📄 ips.h
字号:
u_int8_t reserved[512];} IPS_CONF, *PIPS_CONF;typedef struct { u_int32_t signature; u_int8_t reserved; u_int8_t adapter_slot; u_int16_t adapter_type; u_int8_t bios_high[4]; u_int8_t bios_low[4]; u_int16_t reserved2; u_int8_t reserved3; u_int8_t operating_system; u_int8_t driver_high[4]; u_int8_t driver_low[4]; u_int8_t reserved4[100];} IPS_NVRAM_P5, *PIPS_NVRAM_P5;typedef struct _IPS_SUBSYS { u_int32_t param[128];} IPS_SUBSYS, *PIPS_SUBSYS;/** ** SCSI Structures **//* * Inquiry Data Format */typedef struct { u_int8_t DeviceType; u_int8_t DeviceTypeQualifier; u_int8_t Version; u_int8_t ResponseDataFormat; u_int8_t AdditionalLength; u_int8_t Reserved; u_int8_t Flags[2]; char VendorId[8]; char ProductId[16]; char ProductRevisionLevel[4];} IPS_SCSI_INQ_DATA, *PIPS_SCSI_INQ_DATA;/* * Read Capacity Data Format */typedef struct { u_int32_t lba; u_int32_t len;} IPS_SCSI_CAPACITY;/* * Request Sense Data Format */typedef struct { u_int8_t ResponseCode; u_int8_t SegmentNumber; u_int8_t Flags; u_int8_t Information[4]; u_int8_t AdditionalLength; u_int8_t CommandSpecific[4]; u_int8_t AdditionalSenseCode; u_int8_t AdditionalSenseCodeQual; u_int8_t FRUCode; u_int8_t SenseKeySpecific[3];} IPS_SCSI_REQSEN;/* * Sense Data Format - Page 3 */typedef struct { u_int8_t PageCode; u_int8_t PageLength; u_int16_t TracksPerZone; u_int16_t AltSectorsPerZone; u_int16_t AltTracksPerZone; u_int16_t AltTracksPerVolume; u_int16_t SectorsPerTrack; u_int16_t BytesPerSector; u_int16_t Interleave; u_int16_t TrackSkew; u_int16_t CylinderSkew; u_int8_t flags; u_int8_t reserved[3];} IPS_SCSI_MODE_PAGE3;/* * Sense Data Format - Page 4 */typedef struct { u_int8_t PageCode; u_int8_t PageLength; u_int16_t CylindersHigh; u_int8_t CylindersLow; u_int8_t Heads; u_int16_t WritePrecompHigh; u_int8_t WritePrecompLow; u_int16_t ReducedWriteCurrentHigh; u_int8_t ReducedWriteCurrentLow; u_int16_t StepRate; u_int16_t LandingZoneHigh; u_int8_t LandingZoneLow; u_int8_t flags; u_int8_t RotationalOffset; u_int8_t Reserved; u_int16_t MediumRotationRate; u_int8_t Reserved2[2];} IPS_SCSI_MODE_PAGE4;/* * Sense Data Format - Block Descriptor (DASD) */typedef struct { u_int32_t NumberOfBlocks; u_int8_t DensityCode; u_int16_t BlockLengthHigh; u_int8_t BlockLengthLow;} IPS_SCSI_MODE_PAGE_BLKDESC;/* * Sense Data Format - Mode Page Header */typedef struct { u_int8_t DataLength; u_int8_t MediumType; u_int8_t Reserved; u_int8_t BlockDescLength;} IPS_SCSI_MODE_PAGE_HEADER;typedef struct { IPS_SCSI_MODE_PAGE_HEADER hdr; IPS_SCSI_MODE_PAGE_BLKDESC blkdesc; union { IPS_SCSI_MODE_PAGE3 pg3; IPS_SCSI_MODE_PAGE4 pg4; } pdata;} IPS_SCSI_MODE_PAGE_DATA;/* * Scatter Gather list format */typedef struct ips_sglist { u_int32_t address; u_int32_t length;} IPS_SG_LIST, *PIPS_SG_LIST;typedef struct _IPS_INFOSTR { char *buffer; int length; int offset; int pos; int localpos;} IPS_INFOSTR;typedef struct { char *option_name; int *option_flag; int option_value;} IPS_OPTION;typedef struct { void *userbuffer; u_int32_t usersize; void *kernbuffer; u_int32_t kernsize; void *ha; void *SC; void *pt; struct semaphore *sem; u_int32_t offset; u_int32_t retcode;} IPS_FLASH_DATA;/* * Status Info */typedef struct ips_stat { u_int32_t residue_len; void *scb_addr; u_int8_t padding[12 - sizeof(void *)];} ips_stat_t;/* * SCB Queue Format */typedef struct ips_scb_queue { struct ips_scb *head; struct ips_scb *tail; u_int32_t count; u_int32_t cpu_flags; spinlock_t lock;} ips_scb_queue_t;/* * Wait queue_format */typedef struct ips_wait_queue { Scsi_Cmnd *head; Scsi_Cmnd *tail; u_int32_t count; u_int32_t cpu_flags; spinlock_t lock;} ips_wait_queue_t;typedef struct ips_copp_wait_item { Scsi_Cmnd *scsi_cmd; struct semaphore *sem; struct ips_copp_wait_item *next;} ips_copp_wait_item_t;typedef struct ips_copp_queue { struct ips_copp_wait_item *head; struct ips_copp_wait_item *tail; u_int32_t count; u_int32_t cpu_flags; spinlock_t lock;} ips_copp_queue_t;/* forward decl for host structure */struct ips_ha;typedef struct { int (*reset)(struct ips_ha *); int (*issue)(struct ips_ha *, struct ips_scb *); int (*isinit)(struct ips_ha *); int (*isintr)(struct ips_ha *); int (*init)(struct ips_ha *); int (*erasebios)(struct ips_ha *); int (*programbios)(struct ips_ha *, char *, u_int32_t, u_int32_t); int (*verifybios)(struct ips_ha *, char *, u_int32_t, u_int32_t); void (*statinit)(struct ips_ha *); void (*intr)(struct ips_ha *); void (*enableint)(struct ips_ha *); u_int32_t (*statupd)(struct ips_ha *);} ips_hw_func_t;typedef struct ips_ha { u_int8_t ha_id[IPS_MAX_CHANNELS+1]; u_int32_t dcdb_active[IPS_MAX_CHANNELS]; u_int32_t io_addr; /* Base I/O address */ u_int8_t irq; /* IRQ for adapter */ u_int8_t ntargets; /* Number of targets */ u_int8_t nbus; /* Number of buses */ u_int8_t nlun; /* Number of Luns */ u_int16_t ad_type; /* Adapter type */ u_int16_t host_num; /* Adapter number */ u_int32_t max_xfer; /* Maximum Xfer size */ u_int32_t max_cmds; /* Max concurrent commands */ u_int32_t num_ioctl; /* Number of Ioctls */ ips_stat_t sp; /* Status packer pointer */ struct ips_scb *scbs; /* Array of all CCBS */ struct ips_scb *scb_freelist; /* SCB free list */ ips_wait_queue_t scb_waitlist; /* Pending SCB list */ ips_copp_queue_t copp_waitlist; /* Pending PT list */ ips_scb_queue_t scb_activelist; /* Active SCB list */ IPS_IO_CMD *dummy; /* dummy command */ IPS_ADAPTER *adapt; /* Adapter status area */ IPS_ENQ *enq; /* Adapter Enquiry data */ IPS_CONF *conf; /* Adapter config data */ IPS_NVRAM_P5 *nvram; /* NVRAM page 5 data */ IPS_SUBSYS *subsys; /* Subsystem parameters */ char *ioctl_data; /* IOCTL data area */ u_int32_t ioctl_datasize; /* IOCTL data size */ u_int32_t cmd_in_progress; /* Current command in progress*/ unsigned long flags; /* HA flags */ u_int8_t waitflag; /* are we waiting for cmd */ u_int8_t active; u_int16_t reset_count; /* number of resets */ u_int32_t last_ffdc; /* last time we sent ffdc info*/ u_int8_t revision_id; /* Revision level */ u_int16_t device_id; /* PCI device ID */ u_int8_t slot_num; /* PCI Slot Number */ u_int16_t subdevice_id; /* Subsystem device ID */ u_int8_t ioctl_order; /* Number of pages in ioctl */ u_int8_t reserved2; /* Empty */ u_int8_t bios_version[8]; /* BIOS Revision */ u_int32_t mem_addr; /* Memory mapped address */ u_int32_t io_len; /* Size of IO Address */ u_int32_t mem_len; /* Size of memory address */ char *mem_ptr; /* Memory mapped Ptr */ char *ioremap_ptr; /* ioremapped memory pointer */ ips_hw_func_t func; /* hw function pointers */ struct pci_dev *pcidev; /* PCI device handle */ spinlock_t scb_lock; spinlock_t copp_lock; spinlock_t ips_lock; struct semaphore ioctl_sem; /* Semaphore for new IOCTL's */ struct semaphore flash_ioctl_sem; /* Semaphore for Flashing */ char *save_ioctl_data; /* Save Area for ioctl_data */ u8 save_ioctl_order; /* Save Area for ioctl_order */ u32 save_ioctl_datasize;/* Save Area for ioctl_datasize */} ips_ha_t;typedef void (*ips_scb_callback) (ips_ha_t *, struct ips_scb *);/* * SCB Format */typedef struct ips_scb { IPS_HOST_COMMAND cmd; IPS_DCDB_TABLE dcdb; u_int8_t target_id; u_int8_t bus; u_int8_t lun; u_int8_t cdb[12]; u_int32_t scb_busaddr; u_int32_t data_busaddr; u_int32_t timeout; u_int8_t basic_status; u_int8_t extended_status; u_int8_t breakup; u_int8_t sg_break; u_int32_t data_len; u_int32_t sg_len; u_int32_t flags; u_int32_t op_code; IPS_SG_LIST *sg_list; Scsi_Cmnd *scsi_cmd; struct ips_scb *q_next; ips_scb_callback callback; struct semaphore *sem;} ips_scb_t;typedef struct ips_scb_pt { IPS_HOST_COMMAND cmd; IPS_DCDB_TABLE dcdb; u_int8_t target_id; u_int8_t bus; u_int8_t lun; u_int8_t cdb[12]; u_int32_t scb_busaddr; u_int32_t data_busaddr; u_int32_t timeout; u_int8_t basic_status; u_int8_t extended_status; u_int16_t breakup; u_int32_t data_len; u_int32_t sg_len; u_int32_t flags; u_int32_t op_code; IPS_SG_LIST *sg_list; Scsi_Cmnd *scsi_cmd; struct ips_scb *q_next; ips_scb_callback callback;} ips_scb_pt_t;/* * Passthru Command Format */typedef struct { u_int8_t CoppID[4]; u_int32_t CoppCmd; u_int32_t PtBuffer; u_int8_t *CmdBuffer; u_int32_t CmdBSize; ips_scb_pt_t CoppCP; u_int32_t TimeOut; u_int8_t BasicStatus; u_int8_t ExtendedStatus; u_int16_t reserved;} ips_passthru_t;#endif/* * Overrides for Emacs so that we almost follow Linus's tabbing style. * Emacs will notice this stuff at the end of the file and automatically * adjust the settings for this buffer only. This must remain at the end * of the file. * --------------------------------------------------------------------------- * Local variables: * c-indent-level: 2 * c-brace-imaginary-offset: 0 * c-brace-offset: -2 * c-argdecl-indent: 2 * c-label-offset: -2 * c-continued-statement-offset: 2 * c-continued-brace-offset: 0 * indent-tabs-mode: nil * tab-width: 8 * End: */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -