149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/*
249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow $License:
349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    Copyright (C) 2011 InvenSense Corporation, All Rights Reserved.
449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow $
549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifndef _MLOS_H
849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define _MLOS_H
949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
1049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifndef __KERNEL__
1149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <stdio.h>
1249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif
1349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <pthread.h>
1449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
1549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include "mltypes.h"
1649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
1749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifdef __cplusplus
1849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowextern "C" {
1949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif
2049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
2149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#if defined(LINUX) || defined(__KERNEL__)
2249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowtypedef pthread_mutex_t* HANDLE;
2349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif
2449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
2549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	/* ------------ */
2649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	/* - Defines. - */
2749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	/* ------------ */
2849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
2949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	/* - MLOSCreateFile defines. - */
3049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
3149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define MLOS_GENERIC_READ         ((unsigned int)0x80000000)
3249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define MLOS_GENERIC_WRITE        ((unsigned int)0x40000000)
3349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define MLOS_FILE_SHARE_READ      ((unsigned int)0x00000001)
3449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define MLOS_FILE_SHARE_WRITE     ((unsigned int)0x00000002)
3549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define MLOS_OPEN_EXISTING        ((unsigned int)0x00000003)
3649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
3749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	/* ---------- */
3849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	/* - Enums. - */
3949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	/* ---------- */
4049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
4149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	/* --------------- */
4249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	/* - Structures. - */
4349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	/* --------------- */
4449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
4549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	/* --------------------- */
4649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	/* - Function p-types. - */
4749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	/* --------------------- */
4849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
4949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifndef __KERNEL__
5049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <string.h>
5149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	void *inv_malloc(unsigned int numBytes);
5249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	inv_error_t inv_free(void *ptr);
5349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	inv_error_t inv_create_mutex(HANDLE *mutex);
5449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	inv_error_t inv_lock_mutex(HANDLE mutex);
5549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	inv_error_t inv_unlock_mutex(HANDLE mutex);
5649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	FILE *inv_fopen(char *filename);
5749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	void inv_fclose(FILE *fp);
5849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
5949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	inv_error_t inv_destroy_mutex(HANDLE handle);
6049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
6149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	void inv_sleep(int mSecs);
6249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned long inv_get_tick_count(void);
6349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
6449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	/* Kernel implmentations */
6549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define GFP_KERNEL (0x70)
6649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	static inline void *kmalloc(size_t size,
6749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow				    unsigned int gfp_flags)
6849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	{
6949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow        (void)gfp_flags;
7049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow		return inv_malloc((unsigned int)size);
7149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	}
7249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	static inline void *kzalloc(size_t size, unsigned int gfp_flags)
7349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	{
7449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow		void *tmp = inv_malloc((unsigned int)size);
7549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow        (void)gfp_flags;
7649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow		if (tmp)
7749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow			memset(tmp, 0, size);
7849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow		return tmp;
7949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	}
8049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	static inline void kfree(void *ptr)
8149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	{
8249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow		inv_free(ptr);
8349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	}
8449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	static inline void msleep(long msecs)
8549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	{
8649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow		inv_sleep(msecs);
8749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	}
8849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	static inline void udelay(unsigned long usecs)
8949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	{
9049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow		inv_sleep((usecs + 999) / 1000);
9149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	}
9249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#else
9349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <linux/delay.h>
9449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif
9549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
9649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifdef __cplusplus
9749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow}
9849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif
9949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif				/* _MLOS_H */
100