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

📄 mptbase.h

📁 linux 内核源代码
💻 H
📖 第 1 页 / 共 3 页
字号:
	u32			 pad0;#else	u32			 mfcnt;#endif	u32			 NB_for_64_byte_frame;	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];	struct timer_list	 persist_timer;	/* persist table timer */	int			 persist_wait_done; /* persist completion flag */	u8			 persist_reply_frame[MPT_DEFAULT_FRAME_SIZE]; /* persist reply */	LANPage0_t		 lan_cnfg_page0;	LANPage1_t		 lan_cnfg_page1;	u8			 ir_firmware; /* =1 if IR firmware detected */	/*	 * Description: errata_flag_1064	 * If a PCIX read occurs within 1 or 2 cycles after the chip receives	 * a split completion for a read data, an internal address pointer incorrectly	 * increments by 32 bytes	 */	int			 errata_flag_1064;	int			 aen_event_read_flag; /* flag to indicate event log was read*/	u8			 FirstWhoInit;	u8			 upload_fw;	/* If set, do a fw upload */	u8			 reload_fw;	/* Force a FW Reload on next reset */	u8			 NBShiftFactor;  /* NB Shift Factor based on Block Size (Facts)  */	u8			 pad1[4];	u8			 DoneCtx;	u8			 TaskCtx;	u8			 InternalCtx;	spinlock_t		 initializing_hba_lock;	int 	 		 initializing_hba_lock_flag;	struct list_head	 list;	struct net_device	*netdev;	struct list_head	 sas_topology;	struct mutex		 sas_topology_mutex;	struct mutex		 sas_discovery_mutex;	u8			 sas_discovery_runtime;	u8			 sas_discovery_ignore_events;	u16			 handle;	int			 sas_index; /* index refrencing */	MPT_SAS_MGMT		 sas_mgmt;	struct work_struct	 sas_persist_task;	struct work_struct	 fc_setup_reset_work;	struct list_head	 fc_rports;	struct work_struct	 fc_lsc_work;	u8			 fc_link_speed[2];	spinlock_t		 fc_rescan_work_lock;	struct work_struct	 fc_rescan_work;	char			 fc_rescan_work_q_name[KOBJ_NAME_LEN];	struct workqueue_struct *fc_rescan_work_q;	struct scsi_cmnd	**ScsiLookup;	spinlock_t		  scsi_lookup_lock;} MPT_ADAPTER;/* *  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#define MPT_IOC_SETUP_RESET		2/* * 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... */#include "mptdebug.h"#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 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,	SPI,	SAS} BUS_TYPE;typedef struct _MPT_SCSI_HOST {	MPT_ADAPTER		 *ioc;	int			  port;	u32			  pad0;	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;	u16			  tm_iocstatus;	u16			  spi_pending;	struct list_head	  target_reset_list;} 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 u8	 mpt_register(MPT_CALLBACK cbfunc, MPT_DRIVER_CLASS dclass);extern void	 mpt_deregister(u8 cb_idx);extern int	 mpt_event_register(u8 cb_idx, MPT_EVHANDLER ev_cbfunc);extern void	 mpt_event_deregister(u8 cb_idx);extern int	 mpt_reset_register(u8 cb_idx, MPT_RESETHANDLER reset_func);extern void	 mpt_reset_deregister(u8 cb_idx);extern int	 mpt_device_driver_register(struct mpt_pci_driver * dd_cbfunc, u8 cb_idx);extern void	 mpt_device_driver_deregister(u8 cb_idx);extern MPT_FRAME_HDR	*mpt_get_msg_frame(u8 cb_idx, MPT_ADAPTER *ioc);extern void	 mpt_free_msg_frame(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf);extern void	 mpt_put_msg_frame(u8 cb_idx, MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf);extern void	 mpt_put_msg_frame_hi_pri(u8 cb_idx, 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(u8 cb_idx, 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 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	 mptbase_sas_persist_operation(MPT_ADAPTER *ioc, u8 persist_opcode);extern int	 mpt_raid_phys_disk_pg0(MPT_ADAPTER *ioc, u8 phys_disk_num, pRaidPhysDiskPage0_t phys_disk);/* *  Public data decl's... */extern struct list_head	  ioc_list;extern struct proc_dir_entry	*mpt_proc_root_dir;/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/#endif		/* } __KERNEL__ */#if defined(__alpha__) || defined(__sparc_v9__) || defined(__ia64__) || defined(__x86_64__) || defined(__powerpc__)#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 + -