1c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
2c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro $License:
32eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro    Copyright (C) 2014 InvenSense Corporation, All Rights Reserved.
4c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro $
5c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
6c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
7c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef _MLOS_H
8c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define _MLOS_H
9c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
10c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef __KERNEL__
11c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <stdio.h>
12c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
13c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <pthread.h>
14c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
15c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "mltypes.h"
16c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
17c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef __cplusplus
18c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroextern "C" {
19c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
20c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
21c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#if defined(LINUX) || defined(__KERNEL__)
22c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarotypedef pthread_mutex_t* HANDLE;
23c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
24c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
25c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	/* ------------ */
26c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	/* - Defines. - */
27c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	/* ------------ */
28c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
29c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	/* - MLOSCreateFile defines. - */
30c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
31c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MLOS_GENERIC_READ         ((unsigned int)0x80000000)
32c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MLOS_GENERIC_WRITE        ((unsigned int)0x40000000)
33c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MLOS_FILE_SHARE_READ      ((unsigned int)0x00000001)
34c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MLOS_FILE_SHARE_WRITE     ((unsigned int)0x00000002)
35c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MLOS_OPEN_EXISTING        ((unsigned int)0x00000003)
36c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
37c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	/* ---------- */
38c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	/* - Enums. - */
39c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	/* ---------- */
40c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
41c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	/* --------------- */
42c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	/* - Structures. - */
43c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	/* --------------- */
44c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
45c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	/* --------------------- */
46c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	/* - Function p-types. - */
47c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	/* --------------------- */
48c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
49c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef __KERNEL__
50c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <string.h>
51c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	void *inv_malloc(unsigned int numBytes);
52c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	inv_error_t inv_free(void *ptr);
53c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	inv_error_t inv_create_mutex(HANDLE *mutex);
54c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	inv_error_t inv_lock_mutex(HANDLE mutex);
55c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	inv_error_t inv_unlock_mutex(HANDLE mutex);
56c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	FILE *inv_fopen(char *filename);
57c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	void inv_fclose(FILE *fp);
58c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
59c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	inv_error_t inv_destroy_mutex(HANDLE handle);
60c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
61c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	void inv_sleep(int mSecs);
62c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	unsigned long inv_get_tick_count(void);
63c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
64c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	/* Kernel implmentations */
65c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define GFP_KERNEL (0x70)
66c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	static inline void *kmalloc(size_t size,
67c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro				    unsigned int gfp_flags)
68c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	{
69c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        (void)gfp_flags;
70c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		return inv_malloc((unsigned int)size);
71c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	}
72c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	static inline void *kzalloc(size_t size, unsigned int gfp_flags)
73c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	{
74c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		void *tmp = inv_malloc((unsigned int)size);
75c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        (void)gfp_flags;
76c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		if (tmp)
77c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro			memset(tmp, 0, size);
78c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		return tmp;
79c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	}
80c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	static inline void kfree(void *ptr)
81c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	{
82c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		inv_free(ptr);
83c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	}
84c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	static inline void msleep(long msecs)
85c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	{
86c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		inv_sleep(msecs);
87c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	}
88c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	static inline void udelay(unsigned long usecs)
89c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	{
90c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		inv_sleep((usecs + 999) / 1000);
91c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	}
92c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else
93c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <linux/delay.h>
94c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
95c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
96c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef __cplusplus
97c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
98c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
99c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif				/* _MLOS_H */
100