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

📄 mptbase.h

📁 优龙2410linux2.6.8内核源代码
💻 H
📖 第 1 页 / 共 3 页
字号:
//#if defined(MPT_DEBUG) || defined(MPT_DEBUG_MSG_FRAME)#if 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_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#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_RESET#define dtmprintk(x) printk x#else#define dtmprintk(x)#endif#ifdef MPT_DEBUG_NEH#define nehprintk(x) printk x#else#define nehprintk(x)#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) )#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/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*//* * 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 struct _MPT_SCSI_HOST {	MPT_ADAPTER		 *ioc;	int			  port;	u32			  pad0;	struct scsi_cmnd	**ScsiLookup;		/* Pool of buffers for chaining. ReqToChain		 * and ChainToChain track index of chain buffers.		 * ChainBuffer (DMA) virt/phys addresses.		 * FreeChainQ (lock) locking mechanisms.		 */	int			 *ReqToChain;	int			 *ChainToChain;	u8			 *ChainBuffer;	dma_addr_t		  ChainBufferDMA;	MPT_Q_TRACKER		  FreeChainQ;	spinlock_t		  FreeChainQlock;	u32			  qtag_tick;	VirtDevice		**Targets;	MPT_LOCAL_REPLY		 *pLocal;		/* used for internal commands */	struct timer_list	  timer;	struct timer_list	  TMtimer;		/* Timer for TM commands ONLY */		/* Pool of memory for holding SCpnts before doing		 * OS callbacks. freeQ is the free pool.		 */	u8			 *memQ;	DONE_Q_TRACKER		  freeQ;	DONE_Q_TRACKER		  doneQ;		/* Holds Linux formmatted requests */	DONE_Q_TRACKER		  pendingQ;		/* Holds MPI formmatted requests */	MPT_Q_TRACKER		  taskQ;		/* TM request Q */	spinlock_t		  freedoneQlock;	int			  taskQcnt;	int			  num_chain;		/* Number of chain buffers */	int			  max_sge;		/* Max No of SGE*/	u8			  numTMrequests;	u8			  tmPending;	u8			  resetPending;	u8			  is_spi;		/* Parallel SCSI i/f */	u8			  negoNvram;		/* DV disabled, nego NVRAM */	u8			  is_multipath;		/* Multi-path compatible */	u8                        tmState;	u8			  rsvd[1];	MPT_FRAME_HDR		 *tmPtr;		/* Ptr to TM request*/	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];} MPT_SCSI_HOST;/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*//* *	More Dynamic Multi-Pathing stuff... *//* Forward decl, a strange C thing, to prevent gcc compiler warnings */struct scsi_cmnd;/* *	DMP service layer structure / API interface */typedef struct _DmpServices {	VirtDevTracker	  VdevList;	struct semaphore *Daemon;	int		(*ScsiPathSelect)				(struct scsi_cmnd *, MPT_SCSI_HOST **hd, int *target, int *lun);	int		(*DmpIoDoneChk)				(MPT_SCSI_HOST *, struct scsi_cmnd *,				 SCSIIORequest_t *,				 SCSIIOReply_t *);	void		(*mptscsih_scanVlist)				(MPT_SCSI_HOST *, int portnum);	int		(*ScsiAbort)				(struct scsi_cmnd *);	int		(*ScsiBusReset)				(struct scsi_cmnd *);} DmpServices_t;/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*//* * Generic structure passed to the base mpt_config function. */typedef struct _x_config_parms {	Q_ITEM			 linkage;	/* linked list */	struct timer_list	 timer;		/* timer function for this request  */	ConfigPageHeader_t	*hdr;	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_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 int	 mpt_register_ascqops_strings(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, MPT_ADAPTER *ioc);extern void	 mpt_free_msg_frame(int handle, 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 void	 mpt_add_chain(char *pAddr, u8 next, u16 length, 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_handshake_req_reply_wait(MPT_ADAPTER *ioc, int reqBytes, u32 *req, int replyBytes, u16 *u16reply, int maxwait, 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);/* *  Public data decl's... */extern struct list_head	  ioc_list;extern struct proc_dir_entry	*mpt_proc_root_dir;extern DmpServices_t		*DmpService;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 offsetof#define offsetof(t, m)	((size_t) (&((t *)0)->m))#endif#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 + -