17494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/*
27494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall $License:
37494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall    Copyright (C) 2011 InvenSense Corporation, All Rights Reserved.
47494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall $
57494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */
67494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall
77494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef _MLOS_H
87494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define _MLOS_H
97494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall
107494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef __KERNEL__
117494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#include <stdio.h>
127494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif
138504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall#include <pthread.h>
147494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall
157494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#include "mltypes.h"
167494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall
177494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __cplusplus
187494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrallextern "C" {
197494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif
207494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall
217494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#if defined(LINUX) || defined(__KERNEL__)
228504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgralltypedef pthread_mutex_t* HANDLE;
237494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif
247494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall
257494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	/* ------------ */
267494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	/* - Defines. - */
277494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	/* ------------ */
287494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall
297494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	/* - MLOSCreateFile defines. - */
307494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall
317494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MLOS_GENERIC_READ         ((unsigned int)0x80000000)
327494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MLOS_GENERIC_WRITE        ((unsigned int)0x40000000)
337494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MLOS_FILE_SHARE_READ      ((unsigned int)0x00000001)
347494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MLOS_FILE_SHARE_WRITE     ((unsigned int)0x00000002)
357494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MLOS_OPEN_EXISTING        ((unsigned int)0x00000003)
367494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall
377494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	/* ---------- */
387494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	/* - Enums. - */
397494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	/* ---------- */
407494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall
417494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	/* --------------- */
427494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	/* - Structures. - */
437494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	/* --------------- */
447494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall
457494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	/* --------------------- */
467494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	/* - Function p-types. - */
477494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	/* --------------------- */
487494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall
497494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef __KERNEL__
507494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#include <string.h>
517494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	void *inv_malloc(unsigned int numBytes);
527494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	inv_error_t inv_free(void *ptr);
537494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	inv_error_t inv_create_mutex(HANDLE *mutex);
547494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	inv_error_t inv_lock_mutex(HANDLE mutex);
557494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	inv_error_t inv_unlock_mutex(HANDLE mutex);
567494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	FILE *inv_fopen(char *filename);
577494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	void inv_fclose(FILE *fp);
587494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall
597494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	inv_error_t inv_destroy_mutex(HANDLE handle);
607494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall
617494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	void inv_sleep(int mSecs);
627494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	unsigned long inv_get_tick_count(void);
637494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall
647494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	/* Kernel implmentations */
657494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define GFP_KERNEL (0x70)
667494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	static inline void *kmalloc(size_t size,
677494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall				    unsigned int gfp_flags)
687494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	{
697494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall        (void)gfp_flags;
707494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall		return inv_malloc((unsigned int)size);
717494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	}
727494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	static inline void *kzalloc(size_t size, unsigned int gfp_flags)
737494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	{
747494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall		void *tmp = inv_malloc((unsigned int)size);
757494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall        (void)gfp_flags;
767494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall		if (tmp)
777494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall			memset(tmp, 0, size);
787494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall		return tmp;
797494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	}
807494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	static inline void kfree(void *ptr)
817494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	{
827494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall		inv_free(ptr);
837494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	}
847494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	static inline void msleep(long msecs)
857494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	{
867494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall		inv_sleep(msecs);
877494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	}
887494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	static inline void udelay(unsigned long usecs)
897494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	{
907494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall		inv_sleep((usecs + 999) / 1000);
917494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall	}
927494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else
937494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#include <linux/delay.h>
947494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif
957494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall
967494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __cplusplus
977494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall}
987494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif
997494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif				/* _MLOS_H */
100