blob: 8463cbe793add58c7861a97e7befe66ce8aa0652 [file] [log] [blame]
#ifndef COM_DEFINE_H
#define COM_DEFINE_H
/*
* This file defines Marvell OS independent primary data type for all OS.
*
* We have macros to differentiate different CPU and OS.
*
* CPU definitions:
* _CPU_X86_16B
* Specify 16bit x86 platform, this is used for BIOS and DOS utility.
* _CPU_X86_32B
* Specify 32bit x86 platform, this is used for most OS drivers.
* _CPU_IA_64B
* Specify 64bit IA64 platform, this is used for IA64 OS drivers.
* _CPU_AMD_64B
* Specify 64bit AMD64 platform, this is used for AMD64 OS drivers.
*
* OS definitions:
* _OS_WINDOWS
* _OS_LINUX
* _OS_FREEBSD
* _OS_BIOS
* __QNXNTO__
*/
#include "mv_os.h"
#if !defined(IN)
# define IN
#endif
#if !defined(OUT)
# define OUT
#endif
#if defined(_OS_LINUX) || defined(__QNXNTO__)
# define BUFFER_PACKED __attribute__((packed))
#elif defined(_OS_WINDOWS)
# define BUFFER_PACKED
#elif defined(_OS_BIOS)
# define BUFFER_PACKED
#endif /* defined(_OS_LINUX) || defined(__QNXNTO__) */
#define MV_BIT(x) (1L << (x))
#if !defined(NULL)
# define NULL 0
#endif /* NULL */
#define MV_TRUE 1
#define MV_FALSE 0
typedef unsigned char MV_BOOLEAN, *MV_PBOOLEAN;
typedef unsigned char MV_U8, *MV_PU8;
typedef signed char MV_I8, *MV_PI8;
typedef unsigned short MV_U16, *MV_PU16;
typedef signed short MV_I16, *MV_PI16;
typedef void MV_VOID, *MV_PVOID;
#ifdef _OS_BIOS
typedef MV_U8 GEN_FAR* MV_LPU8;
typedef MV_I8 GEN_FAR* MV_LPI8;
typedef MV_U16 GEN_FAR* MV_LPU16;
typedef MV_I16 GEN_FAR* MV_LPI16;
typedef MV_U32 GEN_FAR* MV_LPU32;
typedef MV_I32 GEN_FAR* MV_LPI32;
typedef void GEN_FAR* MV_LPVOID;
#else
typedef void *MV_LPVOID;
#endif /* _OS_BIOS */
/* Pre-define segment in C code*/
#if defined(_OS_BIOS)
# define BASEATTR __based(__segname("_CODE"))
# define BASEATTRData __based(__segname("_CODE"))
#else
# define BASEATTR
#endif /* _OS_BIOS */
#ifdef DEBUG_COM_SPECIAL
#define MV_DUMP_COM_SPECIAL(pString) {bDbgPrintStr(pString);bCOMEnter();}
#define MV_DUMP32_COM_SPECIAL(pString, value) bDbgPrintStr_U32(pString, value)
#define MV_DUMP16_COM_SPECIAL(pString, value) bDbgPrintStr_U16(pString, value)
#define MV_DUMP32_COM_SPECIAL3(pString, value1, value2) bDbgPrintStr_U32_3(pString, value1, value2)
#define MV_DUMP8_COM_SPECIAL(pString, value) bDbgPrintStr_U8(pString, value)
#define MV_HALTKEY_SPECIAL waitForKeystroke()
#else
#define MV_DUMP_COM_SPECIAL(pString)
#define MV_DUMP32_COM_SPECIAL(pString, value)
#define MV_DUMP16_COM_SPECIAL(pString, value)
#define MV_DUMP32_COM_SPECIAL3(pString, value1, value2)
#define MV_DUMP8_COM_SPECIAL(pString, value)
#define MV_HALTKEY_SPECIAL
#endif
/* For debug version only */
#ifdef DEBUG_BIOS
#ifdef DEBUG_SHOW_ALL
#define MV_DUMP32(_x_) {mvDebugDumpU32(_x_);bCOMEnter();}
#define MV_DUMP16(_x_) {mvDebugDumpU16(_x_);bCOMEnter();}
#define MV_DUMP8(_x_) {mvDebugDumpU8(_x_);bCOMEnter();}
#define MV_DUMPC32(_x_) {mvDebugDumpU32(_x_);bCOMEnter();}
#define MV_DUMPC16(_x_) {mvDebugDumpU16(_x_);bCOMEnter();}
#define MV_DUMPC8(_x_) {mvDebugDumpU8(_x_);bCOMEnter();}
#define MV_DUMPE32(_x_) {mvDebugDumpU32(_x_);bCOMEnter();}
#define MV_DUMPE16(_x_) {mvDebugDumpU16(_x_);bCOMEnter();}
#define MV_DUMPE8(_x_) {mvDebugDumpU8(_x_);bCOMEnter();}
#define MV_DUMP_COM(pString) {bDbgPrintStr(pString);bCOMEnter();}
#define MV_DUMP32_COM(pString, value) bDbgPrintStr_U32(pString, value)
#define MV_DUMP16_COM(pString, value) bDbgPrintStr_U16(pString, value)
#define MV_DUMP32_COM3(pString, value1, value2) bDbgPrintStr_U32_3(pString, value1, value2)
#define MV_DUMP8_COM(pString, value) bDbgPrintStr_U8(pString, value)
#else
#define MV_DUMP32(_x_) //{mvDebugDumpU32(_x_);bCOMEnter();}
#define MV_DUMP16(_x_) //{mvDebugDumpU16(_x_);bCOMEnter();}
#define MV_DUMP8(_x_) //{mvDebugDumpU8(_x_);bCOMEnter();}
#define MV_DUMPC32(_x_) //{mvDebugDumpU32(_x_);bCOMEnter();}
#define MV_DUMPC16(_x_) //{mvDebugDumpU16(_x_);bCOMEnter();}
#define MV_DUMPC8(_x_) //{mvDebugDumpU8(_x_);bCOMEnter();}
#define MV_DUMPE32(_x_) //{mvDebugDumpU32(_x_);bCOMEnter();}
#define MV_DUMPE16(_x_) //{mvDebugDumpU16(_x_);bCOMEnter();}
#define MV_DUMPE8(_x_) //{mvDebugDumpU8(_x_);bCOMEnter();}
#define MV_DUMP_COM(pString) //{bDbgPrintStr(pString);bCOMEnter();}
#define MV_DUMP32_COM(pString, value) //bDbgPrintStr_U32(pString, value)
#define MV_DUMP16_COM(pString, value) //bDbgPrintStr_U16(pString, value)
#define MV_DUMP32_COM3(pString, value1, value2) //bDbgPrintStr_U32_3(pString, value1, value2)
#define MV_DUMP8_COM(pString, value) //bDbgPrintStr_U8(pString, value)
#endif
#define MV_BIOSDEBUG(pString, value) bDbgPrintStr_U32(pString, value)
#define MV_HALTKEY waitForKeystroke()
#define MV_ENTERLINE //mvChangLine()
#else
#define MV_DUMP32(_x_) //{mvDebugDumpU32(_x_);bCOMEnter();}
#define MV_DUMP16(_x_) //{mvDebugDumpU16(_x_);bCOMEnter();}
#define MV_DUMP8(_x_) //{mvDebugDumpU8(_x_);bCOMEnter();}
#define MV_DUMPC32(_x_) //{mvDebugDumpU32(_x_);bCOMEnter();}
#define MV_DUMPC16(_x_) //{mvDebugDumpU16(_x_);bCOMEnter();}
#define MV_DUMPC8(_x_) //{mvDebugDumpU8(_x_);bCOMEnter();}
#define MV_DUMPE32(_x_) //{mvDebugDumpU32(_x_);bCOMEnter();}
#define MV_DUMPE16(_x_) //{mvDebugDumpU16(_x_);bCOMEnter();}
#define MV_DUMPE8(_x_) //{mvDebugDumpU8(_x_);bCOMEnter();}
#define MV_DUMP_COM(pString) //{bDbgPrintStr(pString);bCOMEnter();}
#define MV_DUMP32_COM(pString, value) //bDbgPrintStr_U32(pString, value)
#define MV_DUMP16_COM(pString, value) //bDbgPrintStr_U16(pString, value)
#define MV_DUMP32_COM3(pString, value1, value2) //bDbgPrintStr_U32_3(pString, value1, value2)
#define MV_DUMP8_COM(pString, value) //bDbgPrintStr_U8(pString, value)
#define MV_BIOSDEBUG(pString, value)
#define MV_HALTKEY
#define MV_ENTERLINE
#endif
#if defined(_OS_LINUX) || defined(__QNXNTO__)
/* unsigned/signed long is 64bit for AMD64, so use unsigned int instead */
typedef unsigned int MV_U32, *MV_PU32;
typedef signed int MV_I32, *MV_PI32;
typedef unsigned long MV_ULONG, *MV_PULONG;
typedef signed long MV_ILONG, *MV_PILONG;
#else
/* unsigned/signed long is 32bit for x86, IA64 and AMD64 */
typedef unsigned long MV_U32, *MV_PU32;
typedef signed long MV_I32, *MV_PI32;
#endif /* defined(_OS_LINUX) || defined(__QNXNTO__) */
#if defined(_OS_WINDOWS)
typedef unsigned __int64 _MV_U64;
typedef signed __int64 _MV_I64;
#elif defined(_OS_LINUX) || defined(__QNXNTO__)
typedef unsigned long long _MV_U64;
typedef signed long long _MV_I64;
#elif defined(_OS_FREEBSD)
# error "No Where"
#else
# error "No Where"
#endif /* _OS_WINDOWS */
typedef _MV_U64 BUS_ADDRESS;
#ifdef _OS_LINUX
# if defined(__KCONF_64BIT__)
# define _SUPPORT_64_BIT
# else
# ifdef _SUPPORT_64_BIT
# error Error 64_BIT CPU Macro
# endif
# endif /* defined(__KCONF_64BIT__) */
#elif defined(_OS_BIOS) || defined(__QNXNTO__)
# undef _SUPPORT_64_BIT
#else
# define _SUPPORT_64_BIT
#endif /* _OS_LINUX */
/*
* Primary Data Type
*/
#if defined(_OS_WINDOWS)
typedef union {
struct {
MV_U32 low;
MV_U32 high;
} parts;
_MV_U64 value;
} MV_U64, *PMV_U64, *MV_PU64;
#elif defined(_OS_LINUX) || defined(__QNXNTO__)
typedef union {
struct {
# if defined (__MV_LITTLE_ENDIAN__)
MV_U32 low;
MV_U32 high;
# elif defined (__MV_BIG_ENDIAN__)
MV_U32 high;
MV_U32 low;
# else
# error "undefined endianness"
# endif /* __MV_LITTLE_ENDIAN__ */
} parts;
_MV_U64 value;
} MV_U64, *PMV_U64, *MV_PU64;
#else
/* BIOS compiler doesn't support 64 bit data structure. */
typedef union {
struct {
MV_U32 low;
MV_U32 high;
};
struct {
MV_U32 value;
MV_U32 value1;
};
} _MV_U64,MV_U64, *MV_PU64, *PMV_U64;
#endif /* defined(_OS_LINUX) || defined(_OS_WINDOWS) || defined(__QNXNTO__)*/
/* PTR_INTEGER is necessary to convert between pointer and integer. */
#if defined(_SUPPORT_64_BIT)
typedef _MV_U64 MV_PTR_INTEGER;
#else
typedef MV_U32 MV_PTR_INTEGER;
#endif /* defined(_SUPPORT_64_BIT) */
/* LBA is the logical block access */
typedef MV_U64 MV_LBA;
#if defined(_CPU_16B)
typedef MV_U32 MV_PHYSICAL_ADDR;
#else
typedef MV_U64 MV_PHYSICAL_ADDR;
#endif /* defined(_CPU_16B) */
#if defined (_OS_WINDOWS)
typedef PVOID MV_FILE_HANDLE;
#elif defined(_OS_LINUX) || defined(__QNXNTO__)
typedef MV_I32 MV_FILE_HANDLE;
#endif
/* Product device id */
#define VENDOR_ID 0x11AB
#define DEVICE_ID_THORLITE_2S1P 0x6121
#define DEVICE_ID_THORLITE_0S1P 0x6101
#define DEVICE_ID_THORLITE_1S1P 0x6111
#define DEVICE_ID_THOR_4S1P 0x6141
#define DEVICE_ID_THOR_4S1P_NEW 0x6145
/* Revision ID starts from B1 */
#define DEVICE_ID_THORLITE_2S1P_WITH_FLASH 0x6122
/* Odin lite version */
#define DEVICE_ID_6320 0x6320
#define DEVICE_ID_6340 0x6340
/* mule-board */
#define DEVICE_ID_6440 0x6440
/* Non-RAID Odin */
#define DEVICE_ID_6445 0x6445
/* mule-board */
#define DEVICE_ID_6480 0x6480
#define DEVICE_ID_UNKNOWN 0xFFFF
/* OS_LINUX depedent definition*/
#if defined(_OS_LINUX) || defined(__QNXNTO__)
/* os-dependent data structures */
#define OSSW_DECLARE_SPINLOCK(x) spinlock_t x
#define OSSW_DECLARE_TIMER(x) struct timer_list x
#define MV_DECLARE_TIMER(x) struct timer_list x
/* expect pointers */
#define OSSW_INIT_SPIN_LOCK(plock) spin_lock_init(plock)
#define OSSW_SPIN_LOCK_IRQ(plock) \
do { \
spin_lock_irq(plock); \
} while (0)
#define OSSW_SPIN_UNLOCK_IRQ(plock) \
do { \
spin_unlock_irq(plock); \
} while (0)
#define OSSW_SPIN_LOCK_IRQSAVE(plock, flag) \
do { \
spin_lock_irqsave(plock, flag); \
} while (0)
#define OSSW_SPIN_UNLOCK_IRQRESTORE(plock, flag) \
do { \
spin_unlock_irqrestore(plock, flag); \
} while (0)
/* Delayed Execution Services */
#define OSSW_INIT_TIMER(ptimer) init_timer(ptimer)
#else
#define OSSW_DECLARE_SPINLOCK(x)
#define OSSW_DECLARE_TIMER(x)
#define MV_DECLARE_TIMER(x)
/* expect pointers */
#define OSSW_INIT_SPIN_LOCK(plock)
#define OSSW_SPIN_LOCK_IRQ(plock)
#define OSSW_SPIN_UNLOCK_IRQ(plock)
#define OSSW_SPIN_LOCK_IRQSAVE(plock, flag)
#define OSSW_SPIN_UNLOCK_IRQRESTORE(plock, flag)
/* Delayed Execution Services */
#define OSSW_INIT_TIMER(ptimer)
#endif
#endif /* COM_DEFINE_H */