ipr.h

来自「linux 内核源代码」· C头文件 代码 · 共 1,569 行 · 第 1/3 页

H
1,569
字号
	__be16 ret_stat_len;	/* Length of the returned IOASA */	__be16 avail_stat_len;	/* Total Length of status available. */	__be32 residual_data_len;	/* number of bytes in the host data */	/* buffers that were not used by the IOARCB command. */	__be32 ilid;#define IPR_NO_ILID			0#define IPR_DRIVER_ILID		0xffffffff	__be32 fd_ioasc;	__be32 fd_phys_locator;	__be32 fd_res_handle;	__be32 ioasc_specific;	/* status code specific field */#define IPR_ADDITIONAL_STATUS_FMT		0x80000000#define IPR_AUTOSENSE_VALID			0x40000000#define IPR_ATA_DEVICE_WAS_RESET		0x20000000#define IPR_IOASC_SPECIFIC_MASK		0x00ffffff#define IPR_FIELD_POINTER_VALID		(0x80000000 >> 8)#define IPR_FIELD_POINTER_MASK		0x0000ffff	union {		struct ipr_ioasa_vset vset;		struct ipr_ioasa_af_dasd dasd;		struct ipr_ioasa_gpdd gpdd;		struct ipr_ioasa_gata gata;	} u;	struct ipr_auto_sense auto_sense;}__attribute__((packed, aligned (4)));struct ipr_mode_parm_hdr {	u8 length;	u8 medium_type;	u8 device_spec_parms;	u8 block_desc_len;}__attribute__((packed));struct ipr_mode_pages {	struct ipr_mode_parm_hdr hdr;	u8 data[255 - sizeof(struct ipr_mode_parm_hdr)];}__attribute__((packed));struct ipr_mode_page_hdr {	u8 ps_page_code;#define IPR_MODE_PAGE_PS	0x80#define IPR_GET_MODE_PAGE_CODE(hdr) ((hdr)->ps_page_code & 0x3F)	u8 page_length;}__attribute__ ((packed));struct ipr_dev_bus_entry {	struct ipr_res_addr res_addr;	u8 flags;#define IPR_SCSI_ATTR_ENABLE_QAS			0x80#define IPR_SCSI_ATTR_DISABLE_QAS			0x40#define IPR_SCSI_ATTR_QAS_MASK				0xC0#define IPR_SCSI_ATTR_ENABLE_TM				0x20#define IPR_SCSI_ATTR_NO_TERM_PWR			0x10#define IPR_SCSI_ATTR_TM_SUPPORTED			0x08#define IPR_SCSI_ATTR_LVD_TO_SE_NOT_ALLOWED	0x04	u8 scsi_id;	u8 bus_width;	u8 extended_reset_delay;#define IPR_EXTENDED_RESET_DELAY	7	__be32 max_xfer_rate;	u8 spinup_delay;	u8 reserved3;	__be16 reserved4;}__attribute__((packed, aligned (4)));struct ipr_mode_page28 {	struct ipr_mode_page_hdr hdr;	u8 num_entries;	u8 entry_length;	struct ipr_dev_bus_entry bus[0];}__attribute__((packed));struct ipr_mode_page24 {	struct ipr_mode_page_hdr hdr;	u8 flags;#define IPR_ENABLE_DUAL_IOA_AF 0x80}__attribute__((packed));struct ipr_ioa_vpd {	struct ipr_std_inq_data std_inq_data;	u8 ascii_part_num[12];	u8 reserved[40];	u8 ascii_plant_code[4];}__attribute__((packed));struct ipr_inquiry_page3 {	u8 peri_qual_dev_type;	u8 page_code;	u8 reserved1;	u8 page_length;	u8 ascii_len;	u8 reserved2[3];	u8 load_id[4];	u8 major_release;	u8 card_type;	u8 minor_release[2];	u8 ptf_number[4];	u8 patch_number[4];}__attribute__((packed));struct ipr_inquiry_cap {	u8 peri_qual_dev_type;	u8 page_code;	u8 reserved1;	u8 page_length;	u8 ascii_len;	u8 reserved2;	u8 sis_version[2];	u8 cap;#define IPR_CAP_DUAL_IOA_RAID		0x80	u8 reserved3[15];}__attribute__((packed));#define IPR_INQUIRY_PAGE0_ENTRIES 20struct ipr_inquiry_page0 {	u8 peri_qual_dev_type;	u8 page_code;	u8 reserved1;	u8 len;	u8 page[IPR_INQUIRY_PAGE0_ENTRIES];}__attribute__((packed));struct ipr_hostrcb_device_data_entry {	struct ipr_vpd vpd;	struct ipr_res_addr dev_res_addr;	struct ipr_vpd new_vpd;	struct ipr_vpd ioa_last_with_dev_vpd;	struct ipr_vpd cfc_last_with_dev_vpd;	__be32 ioa_data[5];}__attribute__((packed, aligned (4)));struct ipr_hostrcb_device_data_entry_enhanced {	struct ipr_ext_vpd vpd;	u8 ccin[4];	struct ipr_res_addr dev_res_addr;	struct ipr_ext_vpd new_vpd;	u8 new_ccin[4];	struct ipr_ext_vpd ioa_last_with_dev_vpd;	struct ipr_ext_vpd cfc_last_with_dev_vpd;}__attribute__((packed, aligned (4)));struct ipr_hostrcb_array_data_entry {	struct ipr_vpd vpd;	struct ipr_res_addr expected_dev_res_addr;	struct ipr_res_addr dev_res_addr;}__attribute__((packed, aligned (4)));struct ipr_hostrcb_array_data_entry_enhanced {	struct ipr_ext_vpd vpd;	u8 ccin[4];	struct ipr_res_addr expected_dev_res_addr;	struct ipr_res_addr dev_res_addr;}__attribute__((packed, aligned (4)));struct ipr_hostrcb_type_ff_error {	__be32 ioa_data[502];}__attribute__((packed, aligned (4)));struct ipr_hostrcb_type_01_error {	__be32 seek_counter;	__be32 read_counter;	u8 sense_data[32];	__be32 ioa_data[236];}__attribute__((packed, aligned (4)));struct ipr_hostrcb_type_02_error {	struct ipr_vpd ioa_vpd;	struct ipr_vpd cfc_vpd;	struct ipr_vpd ioa_last_attached_to_cfc_vpd;	struct ipr_vpd cfc_last_attached_to_ioa_vpd;	__be32 ioa_data[3];}__attribute__((packed, aligned (4)));struct ipr_hostrcb_type_12_error {	struct ipr_ext_vpd ioa_vpd;	struct ipr_ext_vpd cfc_vpd;	struct ipr_ext_vpd ioa_last_attached_to_cfc_vpd;	struct ipr_ext_vpd cfc_last_attached_to_ioa_vpd;	__be32 ioa_data[3];}__attribute__((packed, aligned (4)));struct ipr_hostrcb_type_03_error {	struct ipr_vpd ioa_vpd;	struct ipr_vpd cfc_vpd;	__be32 errors_detected;	__be32 errors_logged;	u8 ioa_data[12];	struct ipr_hostrcb_device_data_entry dev[3];}__attribute__((packed, aligned (4)));struct ipr_hostrcb_type_13_error {	struct ipr_ext_vpd ioa_vpd;	struct ipr_ext_vpd cfc_vpd;	__be32 errors_detected;	__be32 errors_logged;	struct ipr_hostrcb_device_data_entry_enhanced dev[3];}__attribute__((packed, aligned (4)));struct ipr_hostrcb_type_04_error {	struct ipr_vpd ioa_vpd;	struct ipr_vpd cfc_vpd;	u8 ioa_data[12];	struct ipr_hostrcb_array_data_entry array_member[10];	__be32 exposed_mode_adn;	__be32 array_id;	struct ipr_vpd incomp_dev_vpd;	__be32 ioa_data2;	struct ipr_hostrcb_array_data_entry array_member2[8];	struct ipr_res_addr last_func_vset_res_addr;	u8 vset_serial_num[IPR_SERIAL_NUM_LEN];	u8 protection_level[8];}__attribute__((packed, aligned (4)));struct ipr_hostrcb_type_14_error {	struct ipr_ext_vpd ioa_vpd;	struct ipr_ext_vpd cfc_vpd;	__be32 exposed_mode_adn;	__be32 array_id;	struct ipr_res_addr last_func_vset_res_addr;	u8 vset_serial_num[IPR_SERIAL_NUM_LEN];	u8 protection_level[8];	__be32 num_entries;	struct ipr_hostrcb_array_data_entry_enhanced array_member[18];}__attribute__((packed, aligned (4)));struct ipr_hostrcb_type_07_error {	u8 failure_reason[64];	struct ipr_vpd vpd;	u32 data[222];}__attribute__((packed, aligned (4)));struct ipr_hostrcb_type_17_error {	u8 failure_reason[64];	struct ipr_ext_vpd vpd;	u32 data[476];}__attribute__((packed, aligned (4)));struct ipr_hostrcb_config_element {	u8 type_status;#define IPR_PATH_CFG_TYPE_MASK	0xF0#define IPR_PATH_CFG_NOT_EXIST	0x00#define IPR_PATH_CFG_IOA_PORT		0x10#define IPR_PATH_CFG_EXP_PORT		0x20#define IPR_PATH_CFG_DEVICE_PORT	0x30#define IPR_PATH_CFG_DEVICE_LUN	0x40#define IPR_PATH_CFG_STATUS_MASK	0x0F#define IPR_PATH_CFG_NO_PROB		0x00#define IPR_PATH_CFG_DEGRADED		0x01#define IPR_PATH_CFG_FAILED		0x02#define IPR_PATH_CFG_SUSPECT		0x03#define IPR_PATH_NOT_DETECTED		0x04#define IPR_PATH_INCORRECT_CONN	0x05	u8 cascaded_expander;	u8 phy;	u8 link_rate;#define IPR_PHY_LINK_RATE_MASK	0x0F	__be32 wwid[2];}__attribute__((packed, aligned (4)));struct ipr_hostrcb_fabric_desc {	__be16 length;	u8 ioa_port;	u8 cascaded_expander;	u8 phy;	u8 path_state;#define IPR_PATH_ACTIVE_MASK		0xC0#define IPR_PATH_NO_INFO		0x00#define IPR_PATH_ACTIVE			0x40#define IPR_PATH_NOT_ACTIVE		0x80#define IPR_PATH_STATE_MASK		0x0F#define IPR_PATH_STATE_NO_INFO	0x00#define IPR_PATH_HEALTHY		0x01#define IPR_PATH_DEGRADED		0x02#define IPR_PATH_FAILED			0x03	__be16 num_entries;	struct ipr_hostrcb_config_element elem[1];}__attribute__((packed, aligned (4)));#define for_each_fabric_cfg(fabric, cfg) \		for (cfg = (fabric)->elem; \			cfg < ((fabric)->elem + be16_to_cpu((fabric)->num_entries)); \			cfg++)struct ipr_hostrcb_type_20_error {	u8 failure_reason[64];	u8 reserved[3];	u8 num_entries;	struct ipr_hostrcb_fabric_desc desc[1];}__attribute__((packed, aligned (4)));struct ipr_hostrcb_error {	__be32 failing_dev_ioasc;	struct ipr_res_addr failing_dev_res_addr;	__be32 failing_dev_res_handle;	__be32 prc;	union {		struct ipr_hostrcb_type_ff_error type_ff_error;		struct ipr_hostrcb_type_01_error type_01_error;		struct ipr_hostrcb_type_02_error type_02_error;		struct ipr_hostrcb_type_03_error type_03_error;		struct ipr_hostrcb_type_04_error type_04_error;		struct ipr_hostrcb_type_07_error type_07_error;		struct ipr_hostrcb_type_12_error type_12_error;		struct ipr_hostrcb_type_13_error type_13_error;		struct ipr_hostrcb_type_14_error type_14_error;		struct ipr_hostrcb_type_17_error type_17_error;		struct ipr_hostrcb_type_20_error type_20_error;	} u;}__attribute__((packed, aligned (4)));struct ipr_hostrcb_raw {	__be32 data[sizeof(struct ipr_hostrcb_error)/sizeof(__be32)];}__attribute__((packed, aligned (4)));struct ipr_hcam {	u8 op_code;#define IPR_HOST_RCB_OP_CODE_CONFIG_CHANGE			0xE1#define IPR_HOST_RCB_OP_CODE_LOG_DATA				0xE2	u8 notify_type;#define IPR_HOST_RCB_NOTIF_TYPE_EXISTING_CHANGED	0x00#define IPR_HOST_RCB_NOTIF_TYPE_NEW_ENTRY			0x01#define IPR_HOST_RCB_NOTIF_TYPE_REM_ENTRY			0x02#define IPR_HOST_RCB_NOTIF_TYPE_ERROR_LOG_ENTRY		0x10#define IPR_HOST_RCB_NOTIF_TYPE_INFORMATION_ENTRY	0x11	u8 notifications_lost;#define IPR_HOST_RCB_NO_NOTIFICATIONS_LOST			0#define IPR_HOST_RCB_NOTIFICATIONS_LOST				0x80	u8 flags;#define IPR_HOSTRCB_INTERNAL_OPER	0x80#define IPR_HOSTRCB_ERR_RESP_SENT	0x40	u8 overlay_id;#define IPR_HOST_RCB_OVERLAY_ID_1				0x01#define IPR_HOST_RCB_OVERLAY_ID_2				0x02#define IPR_HOST_RCB_OVERLAY_ID_3				0x03#define IPR_HOST_RCB_OVERLAY_ID_4				0x04#define IPR_HOST_RCB_OVERLAY_ID_6				0x06#define IPR_HOST_RCB_OVERLAY_ID_7				0x07#define IPR_HOST_RCB_OVERLAY_ID_12				0x12#define IPR_HOST_RCB_OVERLAY_ID_13				0x13#define IPR_HOST_RCB_OVERLAY_ID_14				0x14#define IPR_HOST_RCB_OVERLAY_ID_16				0x16#define IPR_HOST_RCB_OVERLAY_ID_17				0x17#define IPR_HOST_RCB_OVERLAY_ID_20				0x20#define IPR_HOST_RCB_OVERLAY_ID_DEFAULT			0xFF	u8 reserved1[3];	__be32 ilid;	__be32 time_since_last_ioa_reset;	__be32 reserved2;	__be32 length;	union {		struct ipr_hostrcb_error error;		struct ipr_hostrcb_cfg_ch_not ccn;		struct ipr_hostrcb_raw raw;	} u;}__attribute__((packed, aligned (4)));struct ipr_hostrcb {	struct ipr_hcam hcam;	dma_addr_t hostrcb_dma;	struct list_head queue;	struct ipr_ioa_cfg *ioa_cfg;};/* IPR smart dump table structures */struct ipr_sdt_entry {	__be32 bar_str_offset;	__be32 end_offset;	u8 entry_byte;	u8 reserved[3];	u8 flags;#define IPR_SDT_ENDIAN		0x80#define IPR_SDT_VALID_ENTRY	0x20	u8 resv;	__be16 priority;}__attribute__((packed, aligned (4)));struct ipr_sdt_header {	__be32 state;	__be32 num_entries;	__be32 num_entries_used;	__be32 dump_size;}__attribute__((packed, aligned (4)));struct ipr_sdt {	struct ipr_sdt_header hdr;	struct ipr_sdt_entry entry[IPR_NUM_SDT_ENTRIES];}__attribute__((packed, aligned (4)));struct ipr_uc_sdt {	struct ipr_sdt_header hdr;	struct ipr_sdt_entry entry[1];}__attribute__((packed, aligned (4)));/* * Driver types */struct ipr_bus_attributes {	u8 bus;	u8 qas_enabled;	u8 bus_width;	u8 reserved;	u32 max_xfer_rate;};struct ipr_sata_port {	struct ipr_ioa_cfg *ioa_cfg;	struct ata_port *ap;	struct ipr_resource_entry *res;	struct ipr_ioasa_gata ioasa;};struct ipr_resource_entry {	struct ipr_config_table_entry cfgte;	u8 needs_sync_complete:1;	u8 in_erp:1;	u8 add_to_ml:1;	u8 del_from_ml:1;	u8 resetting_device:1;	struct scsi_device *sdev;	struct ipr_sata_port *sata_port;	struct list_head queue;};struct ipr_resource_hdr {	u16 num_entries;	u16 reserved;};struct ipr_resource_table {	struct ipr_resource_hdr hdr;	struct ipr_resource_entry dev[IPR_MAX_PHYSICAL_DEVS];};struct ipr_misc_cbs {	struct ipr_ioa_vpd ioa_vpd;	struct ipr_inquiry_page0 page0_data;	struct ipr_inquiry_page3 page3_data;	struct ipr_inquiry_cap cap;	struct ipr_mode_pages mode_pages;	struct ipr_supported_device supp_dev;};struct ipr_interrupt_offsets {	unsigned long set_interrupt_mask_reg;	unsigned long clr_interrupt_mask_reg;	unsigned long sense_interrupt_mask_reg;	unsigned long clr_interrupt_reg;	unsigned long sense_interrupt_reg;	unsigned long ioarrin_reg;	unsigned long sense_uproc_interrupt_reg;	unsigned long set_uproc_interrupt_reg;	unsigned long clr_uproc_interrupt_reg;};struct ipr_interrupts {	void __iomem *set_interrupt_mask_reg;	void __iomem *clr_interrupt_mask_reg;	void __iomem *sense_interrupt_mask_reg;	void __iomem *clr_interrupt_reg;	void __iomem *sense_interrupt_reg;	void __iomem *ioarrin_reg;	void __iomem *sense_uproc_interrupt_reg;	void __iomem *set_uproc_interrupt_reg;	void __iomem *clr_uproc_interrupt_reg;};struct ipr_chip_cfg_t {	u32 mailbox;	u8 cache_line_size;	struct ipr_interrupt_offsets regs;};struct ipr_chip_t {	u16 vendor;	u16 device;	const struct ipr_chip_cfg_t *cfg;};enum ipr_shutdown_type {	IPR_SHUTDOWN_NORMAL = 0x00,	IPR_SHUTDOWN_PREPARE_FOR_NORMAL = 0x40,	IPR_SHUTDOWN_ABBREV = 0x80,	IPR_SHUTDOWN_NONE = 0x100};struct ipr_trace_entry {	u32 time;	u8 op_code;	u8 ata_op_code;	u8 type;#define IPR_TRACE_START			0x00#define IPR_TRACE_FINISH		0xff	u8 cmd_index;

⌨️ 快捷键说明

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