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