📄 mptbase.h
字号:
* for each REQ entry. */ u8 *sense_buf_pool; dma_addr_t sense_buf_pool_dma; struct pci_dev *pcidev;/* atomic_t userCnt; */ u8 *memmap; int mtrr_reg; struct Scsi_Host *sh; struct proc_dir_entry *ioc_dentry; struct _MPT_ADAPTER *alt_ioc; int hs_reply_idx; u32 hs_req[MPT_MAX_FRAME_SIZE/sizeof(u32)]; u16 hs_reply[MPT_MAX_FRAME_SIZE/sizeof(u16)]; IOCFactsReply_t facts; PortFactsReply_t pfacts[2]; LANPage0_t lan_cnfg_page0; LANPage1_t lan_cnfg_page1; u8 FirstWhoInit; u8 pad1[3];} MPT_ADAPTER;typedef struct _MPT_ADAPTER_TRACKER { MPT_ADAPTER *head; MPT_ADAPTER *tail;} MPT_ADAPTER_TRACKER;/* * New return value convention: * 1 = Ok to free associated request frame * 0 = not Ok ... */typedef int (*MPT_CALLBACK)(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, MPT_FRAME_HDR *reply);typedef int (*MPT_EVHANDLER)(MPT_ADAPTER *ioc, EventNotificationReply_t *evReply);typedef int (*MPT_RESETHANDLER)(MPT_ADAPTER *ioc, int reset_phase);/* reset_phase defs */#define MPT_IOC_PRE_RESET 0#define MPT_IOC_POST_RESET 1/* * Invent MPT host event (super-set of MPI Events) * Fitted to 1030's 64-byte [max] request frame size */typedef struct _MPT_HOST_EVENT { EventNotificationReply_t MpiEvent; /* 8 32-bit words! */ u32 pad[6]; void *next;} MPT_HOST_EVENT;#define MPT_HOSTEVENT_IOC_BRINGUP 0x91#define MPT_HOSTEVENT_IOC_RECOVER 0x92/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*//* * Funky (private) macros... */#ifdef MPT_DEBUG#define dprintk(x) printk x#else#define dprintk(x)#endif#ifdef MPT_DEBUG_HANDSHAKE#define dhsprintk(x) printk x#else#define dhsprintk(x)#endif#if defined(MPT_DEBUG) || defined(MPT_DEBUG_MSG_FRAME)#define dmfprintk(x) printk x#else#define dmfprintk(x)#endif#ifdef MPT_DEBUG_IRQ#define dirqprintk(x) printk x#else#define dirqprintk(x)#endif#ifdef MPT_DEBUG_EVENTS#define deventprintk(x) printk x#else#define deventprintk(x)#endif#ifdef MPT_DEBUG_SPINLOCK#define dslprintk(x) printk x#else#define dslprintk(x)#endif#ifdef MPT_DEBUG_SG#define dsgprintk(x) printk x#else#define dsgprintk(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 Q_INIT(q,type) (q)->head = (q)->tail = (type*)(q)#define Q_IS_EMPTY(q) ((Q_ITEM*)(q)->head == (Q_ITEM*)(q))#define Q_ADD_TAIL(qt,i,type) { \ Q_TRACKER *_qt = (Q_TRACKER*)(qt); \ Q_ITEM *oldTail = _qt->tail; \ (i)->forw = (type*)_qt; \ (i)->back = (type*)oldTail; \ oldTail->forw = (Q_ITEM*)(i); \ _qt->tail = (Q_ITEM*)(i); \}#define Q_ADD_HEAD(qt,i,type) { \ Q_TRACKER *_qt = (Q_TRACKER*)(qt); \ Q_ITEM *oldHead = _qt->head; \ (i)->forw = (type*)oldHead; \ (i)->back = (type*)_qt; \ oldHead->back = (Q_ITEM*)(i); \ _qt->head = (Q_ITEM*)(i); \}#define Q_DEL_ITEM(i) { \ Q_ITEM *_forw = (Q_ITEM*)(i)->forw; \ Q_ITEM *_back = (Q_ITEM*)(i)->back; \ _back->forw = _forw; \ _forw->back = _back; \}#define SWAB4(value) \ (u32)( (((value) & 0x000000ff) << 24) \ | (((value) & 0x0000ff00) << 8) \ | (((value) & 0x00ff0000) >> 8) \ | (((value) & 0xff000000) >> 24) )#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/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/#endif /* } __KERNEL__ *//*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*//* * MPT Control IOCTLs and structures */#define MPT_MAGIC_NUMBER 'm'#define MPTRWPERF _IOWR(MPT_MAGIC_NUMBER,0,struct mpt_raw_r_w)#define MPTRWPERF_CHK _IOR(MPT_MAGIC_NUMBER,13,struct mpt_raw_r_w)#define MPTRWPERF_RESET _IOR(MPT_MAGIC_NUMBER,14,struct mpt_raw_r_w)#define MPTFWDOWNLOAD _IOWR(MPT_MAGIC_NUMBER,15,struct mpt_fw_xfer)#define MPTSCSICMD _IOWR(MPT_MAGIC_NUMBER,16,struct mpt_scsi_cmd)/* * Define something *vague* enough that caller doesn't * really need to know anything about device parameters * (blk_size, capacity, etc.) */struct mpt_raw_r_w { unsigned int iocnum; /* IOC unit number */ unsigned int port; /* IOC port number */ unsigned int target; /* SCSI Target */ unsigned int lun; /* SCSI LUN */ unsigned int iters; /* N iterations */ unsigned short nblks; /* number of blocks per IO */ unsigned short qdepth; /* max Q depth on this device */ unsigned char range; /* 0-100% of FULL disk capacity, 0=use (nblks X iters) */ unsigned char skip; /* % of disk to skip */ unsigned char rdwr; /* 0-100%, 0=pure ReaDs, 100=pure WRites */ unsigned char seqran; /* 0-100%, 0=pure SEQential, 100=pure RANdom */ unsigned int cache_sz; /* In Kb! Optimize hits to N Kb cache size */};struct mpt_fw_xfer { unsigned int iocnum; /* IOC unit number *//* u8 flags;*/ /* Message flags - bit field */ unsigned int fwlen; void *bufp; /* Pointer to firmware buffer */};struct mpt_scsi_cmd { unsigned int iocnum; /* IOC unit number */ unsigned int port; /* IOC port number */ unsigned int target; /* SCSI Target */ unsigned int lun; /* SCSI LUN */ SCSIIORequest_t scsi_req; SCSIIOReply_t scsi_reply;};struct mpt_ioctl_sanity { unsigned int iocnum;};#ifdef __KERNEL__ /* { *//*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*//* * Public entry points... */extern 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_register_ascqops_strings(/*ASCQ_Table_t*/void *ascqTable, int ascqtbl_sz, const char **opsTable);extern void mpt_deregister_ascqops_strings(void);extern MPT_FRAME_HDR *mpt_get_msg_frame(int handle, int iocid);extern void mpt_free_msg_frame(int handle, int iocid, MPT_FRAME_HDR *mf);extern void mpt_put_msg_frame(int handle, int iocid, MPT_FRAME_HDR *mf);extern int mpt_send_handshake_request(int handle, int iocid, int reqBytes, u32 *req);extern int mpt_verify_adapter(int iocid, MPT_ADAPTER **iocpp);extern MPT_ADAPTER *mpt_adapter_find_first(void);extern MPT_ADAPTER *mpt_adapter_find_next(MPT_ADAPTER *prev);extern void mpt_print_ioc_summary(MPT_ADAPTER *ioc, char *buf, int *size, int len, int showlan);extern void mpt_print_ioc_facts(MPT_ADAPTER *ioc, char *buf, int *size, int len);/* * Public data decl's... */extern int mpt_lan_index; /* needed by mptlan.c */extern int mpt_stm_index; /* needed by mptstm.c */extern void *mpt_v_ASCQ_TablePtr;extern const char **mpt_ScsiOpcodesPtr;extern int mpt_ASCQ_TableSz;/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/#endif /* } __KERNEL__ *//* * More (public) macros... */#ifndef MIN#define MIN(a, b) (((a) < (b)) ? (a) : (b))#endif#ifndef MAX#define MAX(a, b) (((a) > (b)) ? (a) : (b))#endif#ifndef offsetof#define offsetof(t, m) ((size_t) (&((t *)0)->m))#endif#if defined(__alpha__) || defined(__sparc_v9__)#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'/*}-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -