142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru/*
242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru $License:
3895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall   Copyright 2011 InvenSense, Inc.
4895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
5895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall Licensed under the Apache License, Version 2.0 (the "License");
6895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall you may not use this file except in compliance with the License.
7895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall You may obtain a copy of the License at
8895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
9895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall http://www.apache.org/licenses/LICENSE-2.0
10895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
11895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall Unless required by applicable law or agreed to in writing, software
12895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall distributed under the License is distributed on an "AS IS" BASIS,
13895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall See the License for the specific language governing permissions and
15895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall limitations under the License.
16895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall  $
1742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru */
1842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
1942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#ifndef _MLOS_H
2042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#define _MLOS_H
2142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
2242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#ifndef __KERNEL__
2342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#include <stdio.h>
2442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#endif
2542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
2642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#include "mltypes.h"
2742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
2842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#ifdef __cplusplus
2942331858975144405f95243be8427084ee7d478dJean-Baptiste Queruextern "C" {
3042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#endif
3142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
3242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#if defined(LINUX) || defined(__KERNEL__)
336f13e8c2d7d2716474ea56e6fc9429e8a939ae44Ashok Bhat#include <stdint.h>
346f13e8c2d7d2716474ea56e6fc9429e8a939ae44Ashok Bhattypedef uintptr_t HANDLE;
3542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#endif
3642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
3742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	/* ------------ */
3842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	/* - Defines. - */
3942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	/* ------------ */
4042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
4142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	/* - MLOSCreateFile defines. - */
4242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
4342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#define MLOS_GENERIC_READ         ((unsigned int)0x80000000)
4442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#define MLOS_GENERIC_WRITE        ((unsigned int)0x40000000)
4542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#define MLOS_FILE_SHARE_READ      ((unsigned int)0x00000001)
4642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#define MLOS_FILE_SHARE_WRITE     ((unsigned int)0x00000002)
4742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#define MLOS_OPEN_EXISTING        ((unsigned int)0x00000003)
4842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
4942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	/* ---------- */
5042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	/* - Enums. - */
5142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	/* ---------- */
5242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
5342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	/* --------------- */
5442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	/* - Structures. - */
5542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	/* --------------- */
5642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
5742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	/* --------------------- */
5842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	/* - Function p-types. - */
5942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	/* --------------------- */
6042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
6142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#ifndef __KERNEL__
6242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#include <string.h>
6342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	void *inv_malloc(unsigned int numBytes);
6442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	inv_error_t inv_free(void *ptr);
6542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	inv_error_t inv_create_mutex(HANDLE *mutex);
6642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	inv_error_t inv_lock_mutex(HANDLE mutex);
6742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	inv_error_t inv_unlock_mutex(HANDLE mutex);
6842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	FILE *inv_fopen(char *filename);
6942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	void inv_fclose(FILE *fp);
7042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
7142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	inv_error_t inv_destroy_mutex(HANDLE handle);
7242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
7342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	void inv_sleep(int mSecs);
7442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	unsigned long inv_get_tick_count(void);
7542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
7642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	/* Kernel implmentations */
7742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#define GFP_KERNEL (0x70)
7842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	static inline void *kmalloc(size_t size,
7942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru				    unsigned int gfp_flags)
8042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	{
8142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru		return inv_malloc((unsigned int)size);
8242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	}
8342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	static inline void *kzalloc(size_t size, unsigned int gfp_flags)
8442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	{
8542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru		void *tmp = inv_malloc((unsigned int)size);
8642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru		if (tmp)
8742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru			memset(tmp, 0, size);
8842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru		return tmp;
8942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	}
9042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	static inline void kfree(void *ptr)
9142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	{
9242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru		inv_free(ptr);
9342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	}
9442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	static inline void msleep(long msecs)
9542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	{
9642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru		inv_sleep(msecs);
9742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	}
9842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	static inline void udelay(unsigned long usecs)
9942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	{
10042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru		inv_sleep((usecs + 999) / 1000);
10142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru	}
10242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#else
10342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#include <linux/delay.h>
10442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#endif
10542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
10642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#ifdef __cplusplus
10742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru}
10842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#endif
10942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#endif				/* _MLOS_H */
110