📄 mptbase.h
字号:
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 + -