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

📄 mptbase.h

📁 这个linux源代码是很全面的~基本完整了~使用c编译的~由于时间问题我没有亲自测试~但就算用来做参考资料也是非常好的
💻 H
📖 第 1 页 / 共 3 页
字号:
 *	VirtDevice - FC LUN device or SCSI target device *	(used to be FCSCSI_TARGET) */typedef struct _VirtDevice {	struct _VirtDevice	*forw;	struct _VirtDevice	*back;	rwlock_t		 VdevLock;	int			 ref_cnt;	u8			 tflags;	u8			 ioc_id;	u8			 target_id;	u8			 bus_id;	u8			 minSyncFactor;	/* 0xFF is async */	u8			 maxOffset;	/* 0 if async */	u8			 maxWidth;	/* 0 if narrow, 1 if wide*/	u8			 negoFlags;	/* bit field, 0 if WDTR/SDTR/QAS allowed */	u8			 raidVolume;	/* set, if RAID Volume */#ifdef ABORT_FIX	u8			 numAborts;#else	u8			 rsvd;#endif	u16			 rsvd1raid;	int			 npaths;	u16			 fc_phys_lun;	u16			 fc_xlat_lun;	int			 stall_detected;	PathInfo		 path[DMP_MAX_PATHS];	struct timer_list	 stall_timer;	struct timer_list	 retry_timer;	struct timer_list	 gone_timer;	ScsiCmndTracker		 WaitQ;	ScsiCmndTracker		 SentQ;	ScsiCmndTracker		 DoneQ;//--- LUN split here?#ifdef MPT_SAVE_AUTOSENSE	u8			 sense[SCSI_STD_SENSE_BYTES];		/* 18 */	u8			 rsvd2[2];	/* alignment */#endif	u32			 luns;		/* Max LUNs is 32 */	u8			 inq_data[SCSI_STD_INQUIRY_BYTES];	/* 36 */	u8			 pad0[4];	u8			 inq00_data[20];	u8			 pad1[4];		/* IEEE Registered Extended Identifier		   obtained via INQUIRY VPD page 0x83 */		/* NOTE: Do not separate uniq_prepad and uniq_data		   as they are treateed as a single entity in the code */	u8			 uniq_prepad[8];	u8			 uniq_data[20];	u8			 pad2[4];	u8			 inqC3_data[12];	u8			 pad3[4];	u8			 inqC9_data[12];	u8			 pad4[4];	u8			 dev_vol_name[64];} VirtDevice;/* *  Fibre Channel (SCSI) target device and associated defines... */#define MPT_TARGET_DEFAULT_DV_STATUS	0#define MPT_TARGET_FLAGS_VALID_NEGO	0x01#define MPT_TARGET_FLAGS_VALID_INQUIRY	0x02#ifdef MPT_SAVE_AUTOSENSE#define MPT_TARGET_FLAGS_VALID_SENSE	0x04#endif#define MPT_TARGET_FLAGS_Q_YES		0x08#define MPT_TARGET_FLAGS_VALID_56	0x10#define MPT_TARGET_NO_NEGO_WIDE		0x01#define MPT_TARGET_NO_NEGO_SYNC		0x02#define MPT_TARGET_NO_NEGO_QAS		0x04typedef struct _VirtDevTracker {	struct _VirtDevice	*head;	struct _VirtDevice	*tail;	rwlock_t		 VlistLock;	int			 pad;} VirtDevTracker;/* *	/proc/mpt interface */typedef struct {	const char	*name;	mode_t		 mode;	int		 pad;	read_proc_t	*read_proc;	write_proc_t	*write_proc;} mpt_proc_entry_t;#define MPT_PROC_READ_RETURN(buf,start,offset,request,eof,len) \do { \	len -= offset;			\	if (len < request) {		\		*eof = 1;		\		if (len <= 0)		\			return 0;	\	} else				\		len = request;		\	*start = buf + offset;		\	return len;			\} while (0)/* *	IOCTL structure and associated defines */#define MPT_IOCTL_STATUS_DID_IOCRESET	0x01	/* IOC Reset occurred on the current*/#define MPT_IOCTL_STATUS_RF_VALID	0x02	/* The Reply Frame is VALID */#define MPT_IOCTL_STATUS_TIMER_ACTIVE	0x04	/* The timer is running */#define MPT_IOCTL_STATUS_SENSE_VALID	0x08	/* Sense data is valid */#define MPT_IOCTL_STATUS_COMMAND_GOOD	0x10	/* Command Status GOOD */#define MPT_IOCTL_STATUS_TMTIMER_ACTIVE	0x20	/* The TM timer is running */#define MPT_IOCTL_STATUS_TM_FAILED	0x40	/* User TM request failed */#define MPTCTL_RESET_OK			0x01	/* Issue Bus Reset */typedef struct _MPT_IOCTL {	struct _MPT_ADAPTER	*ioc;	struct timer_list	 timer;		/* timer function for this adapter */	u8			 ReplyFrame[MPT_DEFAULT_FRAME_SIZE];	/* reply frame data */	u8			 sense[MPT_SENSE_BUFFER_ALLOC];	int			 wait_done;	/* wake-up value for this ioc */	u8			 rsvd;	u8			 status;	/* current command status */	u8			 reset;		/* 1 if bus reset allowed */	u8			 target;	/* target for reset */	void 			*tmPtr;	struct timer_list	 TMtimer;	/* timer function for this adapter */} MPT_IOCTL;/* *  Event Structure and define */#define MPTCTL_EVENT_LOG_SIZE		(0x0000000A)typedef struct _mpt_ioctl_events {	u32	event;		/* Specified by define above */	u32	eventContext;	/* Index or counter */	int	data[2];	/* First 8 bytes of Event Data */} MPT_IOCTL_EVENTS;/* * CONFIGPARM status  defines */#define MPT_CONFIG_GOOD		MPI_IOCSTATUS_SUCCESS#define MPT_CONFIG_ERROR	0x002F/* *	Substructure to store SCSI specific configuration page data */						/* dvStatus defines: */#define MPT_SCSICFG_NEGOTIATE		0x01	/* Negotiate on next IO */#define MPT_SCSICFG_NEED_DV		0x02	/* Schedule DV */#define MPT_SCSICFG_DV_PENDING		0x04	/* DV on this physical id pending */#define MPT_SCSICFG_DV_NOT_DONE		0x08	/* DV has not been performed */#define MPT_SCSICFG_BLK_NEGO		0x10	/* WriteSDP1 with WDTR and SDTR disabled */						/* Args passed to writeSDP1: */#define MPT_SCSICFG_USE_NVRAM		0x01	/* WriteSDP1 using NVRAM */#define MPT_SCSICFG_ALL_IDS		0x02	/* WriteSDP1 to all IDS *//* #define MPT_SCSICFG_BLK_NEGO		0x10	   WriteSDP1 with WDTR and SDTR disabled */typedef	struct _ScsiCfgData {	int		*nvram;			/* table of device NVRAM values */	IOCPage3_t	*pIocPg3;		/* table of physical disks */	u8		 dvStatus[MPT_MAX_SCSI_DEVICES];	int		 isRaid;		/* bit field, 1 if RAID */	u8		 minSyncFactor;		/* 0xFF if async */	u8		 maxSyncOffset;		/* 0 if async */	u8		 maxBusWidth;		/* 0 if narrow, 1 if wide */	u8		 busType;		/* SE, LVD, HD */	u8		 sdp1version;		/* SDP1 version */	u8		 sdp1length;		/* SDP1 length  */	u8		 sdp0version;		/* SDP0 version */	u8		 sdp0length;		/* SDP0 length  */	u8		 dvScheduled;		/* 1 if scheduled */	u8		 forceDv;		/* 1 to force DV scheduling */	u8		 noQas;			/* Disable QAS for this adapter */	u8		 rsvd[2];} ScsiCfgData;typedef struct _fw_image {	char		*fw;	dma_addr_t	 fw_dma;	u32		 size;	u32		 rsvd;} fw_image_t;/* *  Adapter Structure - pci_dev specific. Maximum: MPT_MAX_ADAPTERS */typedef struct _MPT_ADAPTER{	struct _MPT_ADAPTER	*forw;	struct _MPT_ADAPTER	*back;	int			 id;		/* Unique adapter id N {0,1,2,...} */	int			 pci_irq;	/* This irq           */	char			 name[MPT_NAME_LENGTH];	/* "iocN"             */	char			*prod_name;	/* "LSIFC9x9"         */	volatile SYSIF_REGS	*chip;		/* == c8817000 (mmap) */	volatile SYSIF_REGS	*pio_chip;	/* Programmed IO (downloadboot) */	u32			 mem_phys;	/* == f4020000 (mmap) */	u32			 pio_mem_phys;	/* Programmed IO (downloadboot) */	int			 mem_size;	/* mmap memory size */	int			 alloc_total;	u32			 last_state;	int			 active;	u8			*reply_alloc;	/* Reply frames alloc ptr */	dma_addr_t		 reply_alloc_dma;	MPT_FRAME_HDR		*reply_frames;	/* Reply msg frames - rounded up! */	dma_addr_t		 reply_frames_dma;	u32			 reply_frames_low_dma;	int			 reply_depth;	/* Num Allocated reply frames */	int			 reply_sz;	/* Reply frame size */	CHIP_TYPE		 chip_type;		/* We (host driver) get to manage our own RequestQueue! */	u8			*req_alloc;	/* Request frames alloc ptr */	dma_addr_t		 req_alloc_dma;	MPT_FRAME_HDR		*req_frames;	/* Request msg frames - rounded up! */	dma_addr_t		 req_frames_dma;	u32			 req_frames_low_dma;	int			 req_depth;	/* Number of request frames */	int			 req_sz;	/* Request frame size (bytes) */	spinlock_t		 FreeQlock;	MPT_Q_TRACKER		 FreeQ;		/* Pool of SCSI sense buffers for commands coming from		 * the SCSI mid-layer.  We have one 256 byte sense buffer		 * for each REQ entry.		 */	u8			*sense_buf_pool;	dma_addr_t		 sense_buf_pool_dma;	u32			 sense_buf_low_dma;	int			 mtrr_reg;	void			*pcidev;	/* struct pci_dev pointer */	u8			*memmap;	/* mmap address */	struct Scsi_Host	*sh;		/* Scsi Host pointer */	ScsiCfgData		spi_data;	/* Scsi config. data */	MPT_IOCTL		*ioctl;		/* ioctl data pointer */	struct proc_dir_entry	*ioc_dentry;	struct _MPT_ADAPTER	*alt_ioc;	/* ptr to 929 bound adapter port */	spinlock_t		 diagLock;	/* diagnostic reset lock */	int			 diagPending;	u32			 biosVersion;	/* BIOS version from IO Unit Page 2 */	int			 eventTypes;	/* Event logging parameters */	int			 eventContext;	/* Next event context */	int			 eventLogSize;	/* Max number of cached events */	struct _mpt_ioctl_events *events;	/* pointer to event log */	fw_image_t		**cached_fw;	/* Pointer to FW SG List */	Q_TRACKER		 configQ;	/* linked list of config. requests */	int			 num_fw_frags;	/* Number of SGE in FW SG List */	int			 hs_reply_idx;#ifndef MFCNT	u32			 pad0;#else	u32			 mfcnt;#endif	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];	FCPortPage0_t		 fc_port_page0[2];	LANPage0_t		 lan_cnfg_page0;	LANPage1_t		 lan_cnfg_page1;	u8			 FirstWhoInit;	u8			 upload_fw;	/* If set, do a fw upload */	u8			 reload_fw;	/* Force a FW Reload on next reset */	u8			 pad1[5];} 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/* Define the generic types based on the size * of the dma_addr_t type. */typedef struct _mpt_sge {	u32		FlagsLength;	dma_addr_t	Address;} MptSge_t;#define mpt_addr_size() \	((sizeof(dma_addr_t) == sizeof(u64)) ? MPI_SGE_FLAGS_64_BIT_ADDRESSING : \		MPI_SGE_FLAGS_32_BIT_ADDRESSING)#define mpt_msg_flags() \	((sizeof(dma_addr_t) == sizeof(u64)) ? MPI_SCSIIO_MSGFLGS_SENSE_WIDTH_64 : \		MPI_SCSIIO_MSGFLGS_SENSE_WIDTH_32)/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*//* *  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)#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

⌨️ 快捷键说明

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