blob: 72c7421a65271bf1d773d3bf8054d11717dc8074 [file] [log] [blame]
/*
* Copyright (c) 2012-2013 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all
* copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/*
* This file was originally distributed by Qualcomm Atheros, Inc.
* under proprietary terms before Copyright ownership was assigned
* to the Linux Foundation.
*/
#if !defined( __I_VOS_TYPES_H )
#define __I_VOS_TYPES_H
#include <linux/list.h>
#include <linux/mutex.h>
#include <linux/types.h>
#include <linux/sched.h>
#include <linux/completion.h>
#include <linux/string.h>
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/version.h>
#include <asm/div64.h>
/**=========================================================================
\file i_vos_Types.h
\brief virtual Operating System Servies (vOSS) Types
Linux specific basic type definitions
========================================================================*/
/* $Header$ */
/*--------------------------------------------------------------------------
Include Files
------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------
Preprocessor definitions and constants
------------------------------------------------------------------------*/
/*
* 1. GNU C/C++ Compiler
*
* How to detect gcc : __GNUC__
* How to detect gcc version :
* major version : __GNUC__ (2 = 2.x, 3 = 3.x, 4 = 4.x)
* minor version : __GNUC_MINOR__
*
* 2. Microsoft C/C++ Compiler
*
* How to detect msc : _MSC_VER
* How to detect msc version :
* _MSC_VER (1200 = MSVC 6.0, 1300 = MSVC 7.0, ...)
*
*/
// MACROs to help with compiler and OS specifics.
// \note: may need to get a little more sophisticated than this and define
// these to specific 'VERSIONS' of the compiler and OS. Until we have a
// need for that, lets go with this.
#if defined( _MSC_VER )
#define VOS_COMPILER_MSC
#define VOS_OS_WINMOBILE // assuming that if we build with MSC, OS is WinMobile
#elif defined( __GNUC__ )
#define VOS_COMPILER_GNUC
#define VOS_OS_LINUX // assuming if building with GNUC, OS is Linux
#endif
// VOS definitions (compiler specific) for Packing structures. Note that the
// Windows compiler defines a way to pack a 'range' of code in a file. To
// accomodate this, we have to include a file that has the packing #pragmas
// These files are called
// vos_pack_range_n_start.h where "n" is the packing aligment. For example,
// vos_pack_range_2_start.h is included in the file where you want to
// start packing on a 2 byte alignment. vos_pack_range_end.h is included
// in the file where you want to stop the packing.
//
// Other compilers allow packing individual strucutres so we have a series
// of macros that are added to the structure to define the packing attributes.
// For example, VOS_PACK_STRUCT_2 will add the attributes to pack an
// individual structure on a 2 byte boundary.
//
// So what does a coder have to do to properly pack a structure for all the
// supported compilers? You have to add two includes around *all* the
// structures you want packed the same way and you also have to add the
// VOS_PACK_STRUCT_n macros to the individual structures.
//
// For example to properly pack myStruct on a 2 byte boundary for all
// voss supported compilers, the following needs coded...
//
//
// #include <vos_pack_range_2_start.h>
//
// typedef struct
// {
// unsigned char c;
// long int i;
// } myStruct VOS_PACK_STRUCT_2;
//
//
// note... you can include other structure definitions in here that have the
// same 2 byte packing
//
// #include <vos_pack_range_end.h>
// /todo: not sure what the flag is to identify the Microsoft compiler for WinMobile
// Let's leave this out for now and just include the defintions for WinMobile. Need
// to address this when we move to support other operating systems. Probably best to
// define some of our own 'types' or preprocessor flags like VOS_COMPILER_TYPE,
// VOS_OS_TYPE, etc. and then all our code can base on those flags/types independent
// of the operating system, compiler, etc.
#if defined( VOS_COMPILER_MSC )
#define VOS_INLINE_FN __inline
// does nothing on Windows. packing individual structs is not
// supported on the Windows compiler.
#define VOS_PACK_STRUCT_1
#define VOS_PACK_STRUCT_2
#define VOS_PACK_STRUCT_4
#define VOS_PACK_STRUCT_8
#define VOS_PACK_STRUCT_16
#elif defined( VOS_COMPILER_GNUC )
#define VOS_INLINE_FN static inline
#else
#error "Compiling with an unknown compiler!!"
#endif
/*--------------------------------------------------------------------------
Type declarations
------------------------------------------------------------------------*/
/// unsigned 8-bit types
typedef u8 v_U8_t;
typedef u8 v_UCHAR_t;
typedef u8 v_BYTE_t;
/// unsigned 16-bit types
typedef u16 v_U16_t;
typedef unsigned short v_USHORT_t;
/// unsigned 32-bit types
typedef u32 v_U32_t;
// typedef atomic_t v_U32AT_t;
typedef unsigned long v_ULONG_t;
/// unsigned 64-bit types
typedef u64 v_U64_t;
/// unsigned integer types
typedef unsigned int v_UINT_t;
/// signed 8-bit types
typedef s8 v_S7_t;
typedef signed char v_SCHAR_t;
/// signed 16-bit types
typedef s16 v_S15_t;
typedef signed short v_SSHORT_t;
/// signed 32-bit types
typedef s32 v_S31_t;
typedef signed long v_SLONG_t;
/// signed integer types
typedef signed int v_SINT_t;
/// Boolean types
typedef unsigned char v_BOOL_t;
/// void type
#define v_VOID_t void
#endif // __I_VOSS_TYPES_H