⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 com_util.h

📁 6440linuxDriver的源代码
💻 H
字号:
#ifndef __MV_COM_UTIL_H__#define __MV_COM_UTIL_H__#include "com_define.h"#include "com_type.h"#define MV_ZeroMemory(buf, len)           memset(buf, 0, len)#define MV_FillMemory(buf, len, pattern)  memset(buf, pattern, len)#define MV_CopyMemory(dest, source, len)  memcpy(dest, source, len)void MV_ZeroMvRequest(PMV_Request pReq);void MV_CopySGTable(PMV_SG_Table pTargetSGTable, PMV_SG_Table pSourceSGTable);MV_BOOLEAN MV_Equals(MV_PU8 des, MV_PU8 src, MV_U8 len);#ifndef _OS_BIOS#define	U64_ASSIGN(x,y)				  	((x).value = (y))#define	U64_ASSIGN_U64(x,y)			  	((x).value = (y).value)#define	U64_COMP_U64(x,y)			  	((x) == (y).value)#define U64_COMP_U64_VALUE(x,y)			((x).value == (y).value)#define U32_ASSIGN_U64(v64, v32)		((v64).value = (v32))#define	U64_SHIFT_LEFT(v64, v32)		((v64).value=(v64).value << (v32))#define	U64_SHIFT_RIGHT(v64, v32)		((v64).value=(v64).value >> (v32))#define U64_ZERO_VALUE(v64)				((v64).value = 0)#else#define	U64_ASSIGN(x,y)					((x) = (y))#define	U64_ASSIGN_U64(x,y)				((x) = (y))#define	U64_COMP_U64(x,y)			  	(U64_COMPARE_U64(x, y)==0)#define U64_COMP_U64_VALUE(x,y)			(U64_COMPARE_U64(x, y)==0)#define U32_ASSIGN_U64(v64, v32)		do { (v64).parts.low = v32; (v64).parts.high = 0; } while(0);#define	U64_SHIFT_LEFT(v64, v32)		do { (v64).parts.low=(v64).parts.low << v32; v64.parts.high = 0; } while(0);#define	U64_SHIFT_RIGHT(v64, v32)		do { (v64).parts.low=(v64).parts.low >> v32; v64.parts.high = 0; } while(0);#define U64_ZERO_VALUE(v64)				do { (v64).parts.low = (v64).parts.high = 0; } while(0);#endif#define MV_SWAP_32(x)                             \           (((MV_U32)((MV_U8)(x)))<<24 |          \            ((MV_U32)((MV_U8)((x)>>8)))<<16 |     \            ((MV_U32)((MV_U8)((x)>>16)))<<8 |     \            ((MV_U32)((MV_U8)((x)>>24))) )#define MV_SWAP_64(x)                             \           (((_MV_U64) (MV_SWAP_32((x).parts.low))) << 32 | \	    MV_SWAP_32((x).parts.high))#define MV_SWAP_16(x)                             \           (((MV_U16) ((MV_U8) (x))) << 8 |       \	    (MV_U16) ((MV_U8) ((x) >> 8)))#if !defined(_OS_LINUX) && !defined(__QNXNTO__)#   ifndef __MV_BIG_ENDIAN__#      define MV_CPU_TO_BE32(x)     MV_SWAP_32(x)#      define MV_CPU_TO_BE64(x)     MV_SWAP_64(x)#      define MV_CPU_TO_BE16(x)     MV_SWAP_16(x)#      define MV_BE16_TO_CPU(x)     MV_SWAP_16(x)#      define MV_BE32_TO_CPU(x)     MV_SWAP_32(x)#      define MV_BE64_TO_CPU(x)     MV_SWAP_64(x)#      define MV_CPU_TO_LE16(x)     x#      define MV_CPU_TO_LE32(x)     x#      define MV_CPU_TO_LE64(x)     x#      define MV_LE16_TO_CPU(x)     x#      define MV_LE32_TO_CPU(x)     x#      define MV_LE64_TO_CPU(x)     x#   else  /* __MV_BIG_ENDIAN__ */#      define MV_CPU_TO_BE32(x)     x#      define MV_CPU_TO_BE64(x)     x#      define MV_CPU_TO_BE16(x)     x#      define MV_BE16_TO_CPU(x)     x#      define MV_BE32_TO_CPU(x)     x#      define MV_BE64_TO_CPU(x)     x#      define MV_CPU_TO_LE16(x)     MV_SWAP_16(x)#      define MV_CPU_TO_LE32(x)     MV_SWAP_32(x)#      define MV_CPU_TO_LE64(x)     MV_SWAP_64(x)#      define MV_LE16_TO_CPU(x)     MV_SWAP_16(x)#      define MV_LE32_TO_CPU(x)     MV_SWAP_32(x)#      define MV_LE64_TO_CPU(x)     MV_SWAP_64(x)#   endif /* __MV_BIG_ENDIAN__ */#else /* !_OS_LINUX */#define MV_CPU_TO_LE16      cpu_to_le16#define MV_CPU_TO_LE32      cpu_to_le32#define MV_CPU_TO_LE64(x)   cpu_to_le64((x).value)#define MV_CPU_TO_BE16      cpu_to_be16#define MV_CPU_TO_BE32      cpu_to_be32#define MV_CPU_TO_BE64(x)   cpu_to_be64((x).value)#define MV_LE16_TO_CPU      le16_to_cpu#define MV_LE32_TO_CPU      le32_to_cpu#define MV_LE64_TO_CPU(x)   le64_to_cpu((x).value)#define MV_BE16_TO_CPU      be16_to_cpu#define MV_BE32_TO_CPU      be32_to_cpu#define MV_BE64_TO_CPU(x)   be64_to_cpu((x).value)#endif /* !_OS_LINUX *//* * big endian bit-field structs that are larger than a single byte  * need swapping */#ifdef __MV_BIG_ENDIAN__#define MV_CPU_TO_LE16_PTR(pu16)        \   *((MV_PU16)(pu16)) = MV_CPU_TO_LE16(*(MV_PU16) (pu16))#define MV_CPU_TO_LE32_PTR(pu32)        \   *((MV_PU32)(pu32)) = MV_CPU_TO_LE32(*(MV_PU32) (pu32))#define MV_LE16_TO_CPU_PTR(pu16)        \   *((MV_PU16)(pu16)) = MV_LE16_TO_CPU(*(MV_PU16) (pu16))#define MV_LE32_TO_CPU_PTR(pu32)        \   *((MV_PU32)(pu32)) = MV_LE32_TO_CPU(*(MV_PU32) (pu32))# else  /* __MV_BIG_ENDIAN__ */#define MV_CPU_TO_LE16_PTR(pu16)        /* Nothing */#define MV_CPU_TO_LE32_PTR(pu32)        /* Nothing */#define MV_LE16_TO_CPU_PTR(pu32)#define MV_LE32_TO_CPU_PTR(pu32)#endif /* __MV_BIG_ENDIAN__ *//* definitions - following macro names are used by RAID module    must keep consistent */#define CPU_TO_BIG_ENDIAN_16(x)        MV_CPU_TO_BE16(x)#define CPU_TO_BIG_ENDIAN_32(x)        MV_CPU_TO_BE32(x)#define CPU_TO_BIG_ENDIAN_64(x)        MV_CPU_TO_BE64(x)void SGTable_Init(    OUT PMV_SG_Table pSGTable,    IN MV_U8 flag    );#ifndef USE_NEW_SGTABLEvoid SGTable_Append(    OUT PMV_SG_Table pSGTable,    MV_U32 address,    MV_U32 addressHigh,    MV_U32 size    );#else#define SGTable_Append sgdt_append#endifMV_BOOLEAN SGTable_Available(    IN PMV_SG_Table pSGTable    );void MV_InitializeTargetIDTable(    IN PMV_Target_ID_Map pMapTable    );MV_U16 MV_MapTargetID(    IN PMV_Target_ID_Map    pMapTable,    IN MV_U16                deviceId,    IN MV_U8                deviceType    );MV_U16 MV_MapToSpecificTargetID(	IN PMV_Target_ID_Map	pMapTable,	IN MV_U16				specificId,	IN MV_U16				deviceId,	IN MV_U8				deviceType	);MV_U16 MV_RemoveTargetID(    IN PMV_Target_ID_Map    pMapTable,    IN MV_U16                deviceId,    IN MV_U8                deviceType    );MV_U16 MV_GetMappedID(	IN PMV_Target_ID_Map	pMapTable,	IN MV_U16				deviceId,	IN MV_U8				deviceType	);void MV_DecodeReadWriteCDB(	IN MV_PU8 Cdb,	OUT MV_LBA *pLBA,	OUT MV_U32 *pSectorCount);#define MV_SetLBAandSectorCount(pReq) do {								\	MV_DecodeReadWriteCDB(pReq->Cdb, &pReq->LBA, &pReq->Sector_Count);	\	pReq->Req_Flag |= REQ_FLAG_LBA_VALID;								\} while (0)void MV_DumpRequest(PMV_Request pReq, MV_BOOLEAN detail);#if defined(SUPPORT_RAID6) && defined(RAID_DRIVER)void MV_DumpXORRequest(PMV_XOR_Request pXORReq, MV_BOOLEAN detail);#endif /* SUPPORT_RAID6 */void MV_DumpSGTable(PMV_SG_Table pSGTable);const char* MV_DumpSenseKey(MV_U8 sense);MV_U32 MV_CRC(	IN MV_PU8  pData, 	IN MV_U16  len);#define MV_MOD_ADD(value, mod)                    \           do {                                   \              (value)++;                          \              if ((value) >= (mod))               \                 (value) = 0;                     \           } while (0);#ifdef MV_DEBUGvoid MV_CHECK_OS_SG_TABLE(    IN PMV_SG_Table pSGTable    );#endif /* MV_DEBUG *//* used for endian-ness conversion */static inline MV_VOID mv_swap_bytes(MV_PVOID buf, MV_U32 len){	MV_U32 i;	MV_U8  tmp, *p;	/* we expect len to be in multiples of 2 */	if (len & 0x1)		return;	p = (MV_U8 *) buf;	for (i = 0; i < len / 2; i++) 	{		tmp = p[i];		p[i] = p[len - i - 1];		p[len - i - 1] = tmp;	}}#endif /*  __MV_COM_UTIL_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -