📄 mptbase.h
字号:
#if defined(MPT_DEBUG_MSG_FRAME)#define dmfprintk(x) printk x#define DBG_DUMP_REQUEST_FRAME(mfp) \ { int i, n = 24; \ u32 *m = (u32 *)(mfp); \ for (i=0; i<n; i++) { \ if (i && ((i%8)==0)) \ printk("\n"); \ printk("%08x ", le32_to_cpu(m[i])); \ } \ printk("\n"); \ }#else#define dmfprintk(x)#define DBG_DUMP_REQUEST_FRAME(mfp)#endif#ifdef MPT_DEBUG_IRQ#define dirqprintk(x) printk x#else#define dirqprintk(x)#endif#ifdef MPT_DEBUG_SG#define dsgprintk(x) printk x#else#define dsgprintk(x)#endif#if defined(MPT_DEBUG_DL) || defined(MPT_DEBUG)#define ddlprintk(x) printk x#else#define ddlprintk(x)#endif#ifdef MPT_DEBUG_DV#define ddvprintk(x) printk x#else#define ddvprintk(x)#endif#ifdef MPT_DEBUG_NEGO#define dnegoprintk(x) printk x#else#define dnegoprintk(x)#endif#if defined(MPT_DEBUG_DV) || defined(MPT_DEBUG_DV_TINY)#define ddvtprintk(x) printk x#else#define ddvtprintk(x)#endif#ifdef MPT_DEBUG_IOCTL#define dctlprintk(x) printk x#else#define dctlprintk(x)#endif#ifdef MPT_DEBUG_REPLY#define dreplyprintk(x) printk x#else#define dreplyprintk(x)#endif#ifdef MPT_DEBUG_TM#define dtmprintk(x) printk x#define DBG_DUMP_TM_REQUEST_FRAME(mfp) \ { u32 *m = (u32 *)(mfp); \ int i, n = 13; \ printk("TM_REQUEST:\n"); \ for (i=0; i<n; i++) { \ if (i && ((i%8)==0)) \ printk("\n"); \ printk("%08x ", le32_to_cpu(m[i])); \ } \ printk("\n"); \ }#define DBG_DUMP_TM_REPLY_FRAME(mfp) \ { u32 *m = (u32 *)(mfp); \ int i, n = (le32_to_cpu(m[0]) & 0x00FF0000) >> 16; \ printk("TM_REPLY MessageLength=%d:\n", n); \ for (i=0; i<n; i++) { \ if (i && ((i%8)==0)) \ printk("\n"); \ printk(" %08x", le32_to_cpu(m[i])); \ } \ printk("\n"); \ }#else#define dtmprintk(x)#define DBG_DUMP_TM_REQUEST_FRAME(mfp)#define DBG_DUMP_TM_REPLY_FRAME(mfp)#endif#if defined(MPT_DEBUG_CONFIG) || defined(MPT_DEBUG)#define dcprintk(x) printk x#else#define dcprintk(x)#endif#if defined(MPT_DEBUG_SCSI) || defined(MPT_DEBUG) || defined(MPT_DEBUG_MSG_FRAME)#define dsprintk(x) printk x#else#define dsprintk(x)#endif#define MPT_INDEX_2_MFPTR(ioc,idx) \ (MPT_FRAME_HDR*)( (u8*)(ioc)->req_frames + (ioc)->req_sz * (idx) )#define MFPTR_2_MPT_INDEX(ioc,mf) \ (int)( ((u8*)mf - (u8*)(ioc)->req_frames) / (ioc)->req_sz )#define MPT_INDEX_2_RFPTR(ioc,idx) \ (MPT_FRAME_HDR*)( (u8*)(ioc)->reply_frames + (ioc)->req_sz * (idx) )#if defined(MPT_DEBUG) || defined(MPT_DEBUG_MSG_FRAME)#define DBG_DUMP_REPLY_FRAME(mfp) \ { u32 *m = (u32 *)(mfp); \ int i, n = (le32_to_cpu(m[0]) & 0x00FF0000) >> 16; \ printk(KERN_INFO " "); \ for (i=0; i<n; i++) \ printk(" %08x", le32_to_cpu(m[i])); \ printk("\n"); \ }#define DBG_DUMP_REQUEST_FRAME_HDR(mfp) \ { int i, n = 3; \ u32 *m = (u32 *)(mfp); \ printk(KERN_INFO " "); \ for (i=0; i<n; i++) \ printk(" %08x", le32_to_cpu(m[i])); \ printk("\n"); \ }#else#define DBG_DUMP_REPLY_FRAME(mfp)#define DBG_DUMP_REQUEST_FRAME_HDR(mfp)#endif/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/#define SCSI_STD_SENSE_BYTES 18#define SCSI_STD_INQUIRY_BYTES 36#define SCSI_MAX_INQUIRY_BYTES 96/* * MPT_SCSI_HOST defines - Used by the IOCTL and the SCSI drivers * Private to the driver. *//* LOCAL structure and fields used when processing * internally generated commands. These include: * bus scan, dv and config requests. */typedef struct _MPT_LOCAL_REPLY { ConfigPageHeader_t header; int completion; u8 sense[SCSI_STD_SENSE_BYTES]; u8 scsiStatus; u8 skip; u32 pad;} MPT_LOCAL_REPLY;#define MPT_HOST_BUS_UNKNOWN (0xFF)#define MPT_HOST_TOO_MANY_TM (0x05)#define MPT_HOST_NVRAM_INVALID (0xFFFFFFFF)#define MPT_HOST_NO_CHAIN (0xFFFFFFFF)#define MPT_NVRAM_MASK_TIMEOUT (0x000000FF)#define MPT_NVRAM_SYNC_MASK (0x0000FF00)#define MPT_NVRAM_SYNC_SHIFT (8)#define MPT_NVRAM_DISCONNECT_ENABLE (0x00010000)#define MPT_NVRAM_ID_SCAN_ENABLE (0x00020000)#define MPT_NVRAM_LUN_SCAN_ENABLE (0x00040000)#define MPT_NVRAM_TAG_QUEUE_ENABLE (0x00080000)#define MPT_NVRAM_WIDE_DISABLE (0x00100000)#define MPT_NVRAM_BOOT_CHOICE (0x00200000)/* The TM_STATE variable is used to provide strict single threading of TM * requests as well as communicate TM error conditions. */#define TM_STATE_NONE (0)#define TM_STATE_IN_PROGRESS (1)#define TM_STATE_ERROR (2)typedef enum { FC, SCSI, SAS} BUS_TYPE;typedef struct _MPT_SCSI_HOST { MPT_ADAPTER *ioc; int port; u32 pad0; struct scsi_cmnd **ScsiLookup; VirtDevice **Targets; MPT_LOCAL_REPLY *pLocal; /* used for internal commands */ struct timer_list timer; /* Pool of memory for holding SCpnts before doing * OS callbacks. freeQ is the free pool. */ u8 tmPending; u8 resetPending; u8 negoNvram; /* DV disabled, nego NVRAM */ u8 pad1; u8 tmState; u8 rsvd[2]; MPT_FRAME_HDR *cmdPtr; /* Ptr to nonOS request */ struct scsi_cmnd *abortSCpnt; MPT_LOCAL_REPLY localReply; /* internal cmd reply struct */ unsigned long hard_resets; /* driver forced bus resets count */ unsigned long soft_resets; /* fw/external bus resets count */ unsigned long timeouts; /* cmd timeouts */ ushort sel_timeout[MPT_MAX_FC_DEVICES]; char *info_kbuf; wait_queue_head_t scandv_waitq; int scandv_wait_done; long last_queue_full; u8 mpt_pq_filter;} MPT_SCSI_HOST;/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*//* * More Dynamic Multi-Pathing stuff... *//* Forward decl, a strange C thing, to prevent gcc compiler warnings */struct scsi_cmnd;/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*//* * Generic structure passed to the base mpt_config function. */typedef struct _x_config_parms { struct list_head linkage; /* linked list */ struct timer_list timer; /* timer function for this request */ union { ConfigExtendedPageHeader_t *ehdr; ConfigPageHeader_t *hdr; } cfghdr; dma_addr_t physAddr; int wait_done; /* wait for this request */ u32 pageAddr; /* properly formatted */ u8 action; u8 dir; u8 timeout; /* seconds */ u8 pad1; u16 status; u16 pad2;} CONFIGPARMS;/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*//* * Public entry points... */extern int mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id);extern void mpt_detach(struct pci_dev *pdev);#ifdef CONFIG_PMextern int mpt_suspend(struct pci_dev *pdev, pm_message_t state);extern int mpt_resume(struct pci_dev *pdev);#endifextern int mpt_register(MPT_CALLBACK cbfunc, MPT_DRIVER_CLASS dclass);extern void mpt_deregister(int cb_idx);extern int mpt_event_register(int cb_idx, MPT_EVHANDLER ev_cbfunc);extern void mpt_event_deregister(int cb_idx);extern int mpt_reset_register(int cb_idx, MPT_RESETHANDLER reset_func);extern void mpt_reset_deregister(int cb_idx);extern int mpt_device_driver_register(struct mpt_pci_driver * dd_cbfunc, int cb_idx);extern void mpt_device_driver_deregister(int cb_idx);extern MPT_FRAME_HDR *mpt_get_msg_frame(int handle, MPT_ADAPTER *ioc);extern void mpt_free_msg_frame(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf);extern void mpt_put_msg_frame(int handle, MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf);extern void mpt_add_sge(char *pAddr, u32 flagslength, dma_addr_t dma_addr);extern int mpt_send_handshake_request(int handle, MPT_ADAPTER *ioc, int reqBytes, u32 *req, int sleepFlag);extern int mpt_verify_adapter(int iocid, MPT_ADAPTER **iocpp);extern u32 mpt_GetIocState(MPT_ADAPTER *ioc, int cooked);extern void mpt_print_ioc_summary(MPT_ADAPTER *ioc, char *buf, int *size, int len, int showlan);extern int mpt_HardResetHandler(MPT_ADAPTER *ioc, int sleepFlag);extern int mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *cfg);extern int mpt_toolbox(MPT_ADAPTER *ioc, CONFIGPARMS *cfg);extern void mpt_alloc_fw_memory(MPT_ADAPTER *ioc, int size);extern void mpt_free_fw_memory(MPT_ADAPTER *ioc);extern int mpt_findImVolumes(MPT_ADAPTER *ioc);extern int mpt_read_ioc_pg_3(MPT_ADAPTER *ioc);extern int mptbase_sas_persist_operation(MPT_ADAPTER *ioc, u8 persist_opcode);/* * Public data decl's... */extern struct list_head ioc_list;extern struct proc_dir_entry *mpt_proc_root_dir;extern int mpt_lan_index; /* needed by mptlan.c */extern int mpt_stm_index; /* needed by mptstm.c *//*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/#endif /* } __KERNEL__ */#if defined(__alpha__) || defined(__sparc_v9__) || defined(__ia64__) || defined(__x86_64__)#define CAST_U32_TO_PTR(x) ((void *)(u64)x)#define CAST_PTR_TO_U32(x) ((u32)(u64)x)#else#define CAST_U32_TO_PTR(x) ((void *)x)#define CAST_PTR_TO_U32(x) ((u32)x)#endif#define MPT_PROTOCOL_FLAGS_c_c_c_c(pflags) \ ((pflags) & MPI_PORTFACTS_PROTOCOL_INITIATOR) ? 'I' : 'i', \ ((pflags) & MPI_PORTFACTS_PROTOCOL_TARGET) ? 'T' : 't', \ ((pflags) & MPI_PORTFACTS_PROTOCOL_LAN) ? 'L' : 'l', \ ((pflags) & MPI_PORTFACTS_PROTOCOL_LOGBUSADDR) ? 'B' : 'b'/* * Shifted SGE Defines - Use in SGE with FlagsLength member. * Otherwise, use MPI_xxx defines (refer to "lsi/mpi.h" header). * Defaults: 32 bit SGE, SYSTEM_ADDRESS if direction bit is 0, read */#define MPT_TRANSFER_IOC_TO_HOST (0x00000000)#define MPT_TRANSFER_HOST_TO_IOC (0x04000000)#define MPT_SGE_FLAGS_LAST_ELEMENT (0x80000000)#define MPT_SGE_FLAGS_END_OF_BUFFER (0x40000000)#define MPT_SGE_FLAGS_LOCAL_ADDRESS (0x08000000)#define MPT_SGE_FLAGS_DIRECTION (0x04000000)#define MPT_SGE_FLAGS_ADDRESSING (mpt_addr_size() << MPI_SGE_FLAGS_SHIFT)#define MPT_SGE_FLAGS_END_OF_LIST (0x01000000)#define MPT_SGE_FLAGS_TRANSACTION_ELEMENT (0x00000000)#define MPT_SGE_FLAGS_SIMPLE_ELEMENT (0x10000000)#define MPT_SGE_FLAGS_CHAIN_ELEMENT (0x30000000)#define MPT_SGE_FLAGS_ELEMENT_MASK (0x30000000)#define MPT_SGE_FLAGS_SSIMPLE_READ \ (MPT_SGE_FLAGS_LAST_ELEMENT | \ MPT_SGE_FLAGS_END_OF_BUFFER | \ MPT_SGE_FLAGS_END_OF_LIST | \ MPT_SGE_FLAGS_SIMPLE_ELEMENT | \ MPT_SGE_FLAGS_ADDRESSING | \ MPT_TRANSFER_IOC_TO_HOST)#define MPT_SGE_FLAGS_SSIMPLE_WRITE \ (MPT_SGE_FLAGS_LAST_ELEMENT | \ MPT_SGE_FLAGS_END_OF_BUFFER | \ MPT_SGE_FLAGS_END_OF_LIST | \ MPT_SGE_FLAGS_SIMPLE_ELEMENT | \ MPT_SGE_FLAGS_ADDRESSING | \ MPT_TRANSFER_HOST_TO_IOC)/*}-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -