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

📄 com_type.h

📁 6440linuxDriver的源代码
💻 H
字号:
#ifndef __MV_COM_TYPE_H__#define __MV_COM_TYPE_H__#include "com_define.h"#include "com_list.h"#ifdef USE_NEW_SGTABLE#include "com_sgd.h"#endif /* USE_NEW_SGTABLE *//* * Data Structure */#define MAX_CDB_SIZE                            16struct _MV_Request;typedef struct _MV_Request MV_Request, *PMV_Request;#ifdef RAID_DRIVERtypedef struct _MV_XOR_Request MV_XOR_Request, *PMV_XOR_Request;#endif /* RAID_DRIVER */#define REQ_STATUS_SUCCESS                      0x0#define REQ_STATUS_NOT_READY                    0x1#define REQ_STATUS_MEDIA_ERROR                  0x2#define REQ_STATUS_BUSY                         0x3#define REQ_STATUS_INVALID_REQUEST              0x4#define REQ_STATUS_INVALID_PARAMETER            0x5#define REQ_STATUS_NO_DEVICE                    0x6/* Sense data structure is the SCSI "Fixed format sense datat" format. */#define REQ_STATUS_HAS_SENSE                    0x7#define REQ_STATUS_ERROR                        0x8#define REQ_STATUS_ERROR_WITH_SENSE             0x10/* Request initiator must set the status to REQ_STATUS_PENDING. */#define REQ_STATUS_PENDING                      0x80#define REQ_STATUS_RETRY                        0x81#define REQ_STATUS_REQUEST_SENSE                0x82/*  * Don't change the order here.  * Module_StartAll will start from big id to small id.  * Make sure module_set setting matches the Module_Id  * MODULE_HBA must be the first one. Refer to Module_AssignModuleExtension. * And HBA_GetNextModuleSendFunction has an assumption that the next level  * has larger ID. */enum Module_Id{        MODULE_HBA = 0,        MODULE_CACHE,        MODULE_RAID,        MODULE_CORE,	MAX_POSSIBLE_MODULE_NUMBER,};#ifdef USE_NEW_SGTABLE#include "com_sgd.h"typedef sgd_tbl_t MV_SG_Table, *PMV_SG_Table;typedef sgd_t MV_SG_Entry, *PMV_SG_Entry;#elsestruct _MV_SG_Table;typedef struct _MV_SG_Table MV_SG_Table, *PMV_SG_Table;struct _MV_SG_Entry;typedef struct _MV_SG_Entry MV_SG_Entry, *PMV_SG_Entry;/* SG Table and SG Entry */struct _MV_SG_Entry{	MV_U32 Base_Address;	MV_U32 Base_Address_High;	MV_U32 Reserved0;	MV_U32 Size;};struct _MV_SG_Table{	MV_U8 Max_Entry_Count;	MV_U8 Valid_Entry_Count;	MV_U8 Flag;	MV_U8 Reserved0;	MV_U32 Byte_Count;	PMV_SG_Entry Entry_Ptr;};#endif#ifdef SIMULATOR#define	MV_REQ_COMMON_SCSI	          0#define	MV_REQ_COMMON_XOR	          1#endif	/*SIMULATOR*//*  * MV_Request is the general request type passed through different modules.  * Must be 64 bit aligned. *//* TBD : REMOVE IT A.S.A.P. */#define DEV_ID_TO_TARGET_ID(_dev_id)    ((MV_U8)((_dev_id) & 0x00FF))#define DEV_ID_TO_LUN(_dev_id)                ((MV_U8) (((_dev_id) & 0xFF00) >> 8))#define __MAKE_DEV_ID(_target_id, _lun)   (((MV_U16)(_target_id)) | (((MV_U16)(_lun)) << 8))/*Work around free disks suporting temporarily*/#define RESTORE_FREE_DISK_TID 1typedef void (*MV_ReqCompletion)(MV_PVOID,PMV_Request);struct _MV_Request {#ifdef SIMULATOR	MV_U32 CommonType;	// please keep it as the first field#endif	/* SIMULATOR */#ifdef __RES_MGMT__	List_Head pool_entry;     /* don't bother, res_mgmt use only */#endif /* __RES_MGMT__ */	List_Head Queue_Pointer;        List_Head Complete_Queue_Pointer;	MV_U16 Device_Id;	MV_U16 Req_Flag;                  /* Check the REQ_FLAG definition */	MV_U8 Scsi_Status;	MV_U8 Tag;                        /* Request tag */	MV_U8 Req_Type;                   /* Check the REQ_TYPE definition */#ifdef _OS_WINDOWS	MV_U8 Reserved0[1];#elif defined(SUPPORT_ERROR_HANDLING) && defined(_OS_LINUX)	MV_U8 eh_flag;    /* mark a req after it is re-inserted into			   * waiting_list due to error handling.			   */#else	MV_U8 Reserved0[1]; #endif /* _OS_WINDOWS */	MV_PVOID Cmd_Initiator;           /* Which module(extension pointer) 					     creates this request. */	MV_U8 Sense_Info_Buffer_Length;#if RESTORE_FREE_DISK_TID	MV_U8 org_target_id;#else	MV_U8 Reserved1;#endif	MV_U16 SlotNo; 	MV_U32 Data_Transfer_Length; 	MV_U8 Cdb[MAX_CDB_SIZE]; 	MV_PVOID Data_Buffer; 	MV_PVOID Sense_Info_Buffer;	MV_SG_Table SG_Table;	MV_PVOID Org_Req;                /* The original request. */ 	/* Each module should only use Context to store module information. */	MV_PVOID Context[MAX_POSSIBLE_MODULE_NUMBER];	MV_PVOID Scratch_Buffer;          /* pointer to the scratch buffer 										 that this request used */	MV_PVOID SG_Buffer;	MV_PVOID pRaid_Request;	MV_LBA LBA;	MV_U32 Sector_Count;	MV_U32 Cmd_Flag;	MV_U32 Time_Out;                  /* how many seconds we should wait 					     before treating request as 					     timed-out */	MV_U32 Splited_Count;            OSSW_DECLARE_TIMER(timer);#if ERROR_HANDLING_SUPPORT	MV_U8   bh_eh_flag;	MV_U8   reserved[3];	MV_PVOID bh_eh_ctx; /*The type should be MV_PVOID*/#endif /* ERROR_HANDLING_SUPPORT */	MV_ReqCompletion	Completion; /* call back function */};#define MV_REQUEST_SIZE                   sizeof(MV_Request)/* * Request flag is the flag for the MV_Request data structure. */#define REQ_FLAG_LBA_VALID                MV_BIT(0)#define REQ_FLAG_CMD_FLAG_VALID           MV_BIT(1)#define REQ_FLAG_RETRY                    MV_BIT(2)#define REQ_FLAG_INTERNAL_SG              MV_BIT(3)#ifndef USE_NEW_SGTABLE	#define REQ_FLAG_USE_PHYSICAL_SG          MV_BIT(4)#define REQ_FLAG_USE_LOGICAL_SG           MV_BIT(5)#else/*temporarily reserve bit 4 & 5 until NEW_SG is enabled fixedly for all OS */#endif#define REQ_FLAG_FLUSH                    MV_BIT(6)#define REQ_FLAG_CONSOLIDATE			  MV_BIT(8)#define REQ_FLAG_NO_CONSOLIDATE           MV_BIT(9)#define REQ_FLAG_EXTERNAL                 MV_BIT(10)/* * Request Type is the type of MV_Request. */enum {	/* use a value other than 0, and now they're bit-mapped */	REQ_TYPE_OS       = 0x01,	REQ_TYPE_RAID     = 0x02,	REQ_TYPE_CACHE    = 0x04,	REQ_TYPE_INTERNAL = 0x08,	REQ_TYPE_SUBLD    = 0x10,	REQ_TYPE_SUBBGA   = 0x20,	REQ_TYPE_MP       = 0x40,};/* * Command flag is the flag for the CDB command itself  *//* The first 16 bit can be determined by the initiator. */#define CMD_FLAG_NON_DATA           MV_BIT(0)  /* 1-non data; 0-data command */#define CMD_FLAG_DMA                MV_BIT(1)  /* 1-DMA */#define CMD_FLAG_PIO                MV_BIT(2)  /* 1-PIO */#define CMD_FLAG_DATA_IN            MV_BIT(3)  /* 1-host read data */#define CMD_FLAG_DATA_OUT           MV_BIT(4)  /* 1-host write data */#define CMD_FLAG_SMART              MV_BIT(5)  /* 1-SMART command; 						  0-non SMART command*//* * The last 16 bit only can be set by the target. Only core driver knows  * the device characteristic.  */#define CMD_FLAG_NCQ                      MV_BIT(16)#define CMD_FLAG_TCQ                      MV_BIT(17)#define CMD_FLAG_48BIT                    MV_BIT(18)#define CMD_FLAG_PACKET                   MV_BIT(19)  /* ATAPI packet cmd */#define CMD_FLAG_SCSI_PASS_THRU           MV_BIT(20)#define CMD_FLAG_ATA_PASS_THRU            MV_BIT(21)#ifdef RAID_DRIVER/* XOR request types */#define    XOR_REQUEST_WRITE              0#define    XOR_REQUEST_COMPARE            1#define    XOR_REQUEST_DMA                2/* XOR request status */#define XOR_STATUS_SUCCESS                0#define XOR_STATUS_INVALID_REQUEST        1#define XOR_STATUS_ERROR                  2#define XOR_STATUS_INVALID_PARAMETER      3#define XOR_SOURCE_SG_COUNT               11  /* TBD support 8 disks RAID5 */#ifdef RAID6_MULTIPLE_PARITY#   define XOR_TARGET_SG_COUNT               3   /* TBD */#else#   define XOR_TARGET_SG_COUNT               1   /* TBD */#endiftypedef MV_U8    XOR_COEF, *PXOR_COEF;        /* XOR Coefficient */struct _MV_XOR_Request {#ifdef SIMULATOR	MV_U32 CommonType;	// please keep it as the first field#endif	/*SIMULATOR*/	List_Head Queue_Pointer;	MV_U16 Device_Id;	MV_U8 Request_Type;                        	MV_U8 Request_Status;	MV_U8 Source_SG_Table_Count;        /* how many items in the 					       SG_Table_List */	MV_U8 Target_SG_Table_Count;#ifdef SOFTWARE_XOR	MV_U8 Reserved[2];#else	MV_U16 SlotNo;#endif /* SOFTWARE_XOR */	MV_SG_Table Source_SG_Table_List[XOR_SOURCE_SG_COUNT];	MV_SG_Table Target_SG_Table_List[XOR_TARGET_SG_COUNT];	/* TBD: Use one task or several tasks. */	XOR_COEF    Coef[XOR_TARGET_SG_COUNT][XOR_SOURCE_SG_COUNT];	MV_U32 Error_Offset;                 /* byte, not sector */	MV_PVOID Cmd_Initiator;              /* Which module(extension pointer						) creates this request. */#ifdef RAID6_HARDWARE_XOR	MV_PVOID Context[MAX_POSSIBLE_MODULE_NUMBER];#else	MV_PVOID Context;#endif	MV_PVOID SG_Buffer;	void (*Completion)(MV_PVOID, PMV_XOR_Request);    /* callback */};#endif /* RAID_DRIVER */typedef struct _MV_Target_ID_Map{	MV_U16   Device_Id;	MV_U8    Type;                    /* 0:LD, 1:Free Disk */	MV_U8    Reserved;} MV_Target_ID_Map, *PMV_Target_ID_Map;/* Module event type */enum Module_Event{	EVENT_MODULE_ALL_STARTED = 1,	EVENT_DEVICE_CACHE_MODE_CHANGED,	EVENT_SPECIFY_RUNTIME_DEVICE,	EVENT_DISCARD_RESOURCE,	EVENT_DEVICE_ARRIVAL,	EVENT_DEVICE_REMOVAL,	EVENT_LOG_GENERATED,       /* a new event is generated */};/* Error_Handling_State */enum EH_State{	EH_NONE = 0,	EH_ABORT_REQUEST,	EH_LU_RESET,	EH_DEVICE_RESET,	EH_PORT_RESET,	EH_CHIP_RESET,	EH_SET_DISK_DOWN};typedef enum{	EH_REQ_NOP = 0,	EH_REQ_ABORT_REQUEST,	EH_REQ_HANDLE_TIMEOUT,	EH_REQ_RESET_BUS,	EH_REQ_RESET_CHANNEL,	EH_REQ_RESET_DEVICE,	EH_REQ_RESET_ADAPTER,}eh_req_type_t;/* * Exposed Functions *//* * * Miscellaneous Definitions * *//* Rounding *//* Packed */#define MV_MAX(x,y)        (((x) > (y)) ? (x) : (y))#define MV_MIN(x,y)        (((x) < (y)) ? (x) : (y))#define MV_MAX_U64(x, y)   ((((x).value) > ((y).value)) ? (x) : (y))#define MV_MIN_U64(x, y)   ((((x).value) < ((y).value)) ? (x) : (y))#define MV_MAX_U8          0xFF#define MV_MAX_U16         0xFFFF#define MV_MAX_U32         0xFFFFFFFFL#ifdef _OS_LINUX#   define ROUNDING_MASK(x, mask)  (((x)+(mask))&~(mask))#   define ROUNDING(value, align)  ROUNDING_MASK(value,   \						 (typeof(value)) (align-1))#   define OFFSET_OF(type, member) offsetof(type, member)#else#   define ROUNDING(value, align)  ( ((value)+(align)-1)/(align)*(align) )#   define OFFSET_OF(type, member)    ((MV_U32)(MV_PTR_INTEGER)&(((type *) 0)->member))#   define ALIGN ROUNDING#endif /* _OS_LINUX */#endif /* __MV_COM_TYPE_H__ */

⌨️ 快捷键说明

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