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

📄 mptbase.h

📁 底层驱动开发
💻 H
📖 第 1 页 / 共 3 页
字号:
#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 + -