xref: /openbsd-src/sys/dev/ic/qlareg.h (revision 91637d7960ecb17617564a53eef5a6cd6f1012fb)
1*91637d79Sdlg /*	$OpenBSD: qlareg.h,v 1.9 2017/06/05 04:57:37 dlg Exp $ */
24cd89cf2Sjmatthew 
34cd89cf2Sjmatthew /*
44cd89cf2Sjmatthew  * Copyright (c) 2013, 2014 Jonathan Matthew <jmatthew@openbsd.org>
54cd89cf2Sjmatthew  *
64cd89cf2Sjmatthew  * Permission to use, copy, modify, and distribute this software for any
74cd89cf2Sjmatthew  * purpose with or without fee is hereby granted, provided that the above
84cd89cf2Sjmatthew  * copyright notice and this permission notice appear in all copies.
94cd89cf2Sjmatthew  *
104cd89cf2Sjmatthew  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
114cd89cf2Sjmatthew  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
124cd89cf2Sjmatthew  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
134cd89cf2Sjmatthew  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
144cd89cf2Sjmatthew  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
154cd89cf2Sjmatthew  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
164cd89cf2Sjmatthew  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
174cd89cf2Sjmatthew  */
184cd89cf2Sjmatthew 
194cd89cf2Sjmatthew /* firmware loading */
2088fa6db8Sjmatthew #define QLA_2100_CODE_ORG		0x1000
21db1d60ccSjmatthew #define QLA_2200_CODE_ORG		0x1000
224cd89cf2Sjmatthew #define QLA_2300_CODE_ORG		0x0800
234cd89cf2Sjmatthew 
244cd89cf2Sjmatthew /* firmware attributes */
254cd89cf2Sjmatthew #define QLA_FW_ATTR_EXPANDED_LUN	0x0002
264cd89cf2Sjmatthew #define QLA_FW_ATTR_FABRIC		0x0004
274cd89cf2Sjmatthew #define QLA_FW_ATTR_2K_LOGINS		0x0100
284cd89cf2Sjmatthew 
294cd89cf2Sjmatthew /* interrupt types */
30023e4a3eSjmatthew #define QLA_INT_TYPE_MBOX		1
31023e4a3eSjmatthew #define QLA_INT_TYPE_ASYNC		2
32023e4a3eSjmatthew #define QLA_INT_TYPE_IO			3
33023e4a3eSjmatthew #define QLA_INT_TYPE_OTHER		4
34023e4a3eSjmatthew 
35023e4a3eSjmatthew /* 23xx interrupt status codes */
36023e4a3eSjmatthew #define QLA_23XX_INT_ROM_MBOX		0x01
37023e4a3eSjmatthew #define QLA_23XX_INT_ROM_MBOX_FAIL	0x02
38023e4a3eSjmatthew #define QLA_23XX_INT_MBOX		0x10
39023e4a3eSjmatthew #define QLA_23XX_INT_MBOX_FAIL		0x11
40023e4a3eSjmatthew #define QLA_23XX_INT_ASYNC		0x12
41023e4a3eSjmatthew #define QLA_23XX_INT_RSPQ		0x13
42023e4a3eSjmatthew #define QLA_23XX_INT_FP16		0x15
43023e4a3eSjmatthew #define QLA_23XX_INT_FP_SCSI		0x16
44023e4a3eSjmatthew #define QLA_23XX_INT_FP_CTIO		0x17
454cd89cf2Sjmatthew 
464cd89cf2Sjmatthew /* ISP registers */
474cd89cf2Sjmatthew #define QLA_FLASH_BIOS_ADDR		0x00
484cd89cf2Sjmatthew #define QLA_FLASH_BIOS_DATA		0x02
494cd89cf2Sjmatthew #define QLA_CTRL_STATUS			0x06
504cd89cf2Sjmatthew #define QLA_INT_CTRL			0x08
514cd89cf2Sjmatthew #define QLA_INT_STATUS			0x0A
524cd89cf2Sjmatthew #define QLA_SEMA			0x0C
534cd89cf2Sjmatthew #define QLA_NVRAM			0x0E
544cd89cf2Sjmatthew #define QLA_REQ_IN			0x10
554cd89cf2Sjmatthew #define QLA_REQ_OUT			0x12
564cd89cf2Sjmatthew #define QLA_RESP_IN			0x14
574cd89cf2Sjmatthew #define QLA_RESP_OUT			0x16
584cd89cf2Sjmatthew #define QLA_RISC_STATUS_LOW		0x18
594cd89cf2Sjmatthew #define QLA_RISC_STATUS_HIGH		0x1A
604cd89cf2Sjmatthew #define QLA_HOST_CMD_CTRL		0xC0
614cd89cf2Sjmatthew #define QLA_GPIO_DATA			0xCC
624cd89cf2Sjmatthew #define QLA_GPIO_ENABLE			0xCE
634cd89cf2Sjmatthew 
644cd89cf2Sjmatthew #define QLA_FPM_DIAG			0x96
654cd89cf2Sjmatthew 
664cd89cf2Sjmatthew 
674cd89cf2Sjmatthew /* mailbox base moves around between generations */
684cd89cf2Sjmatthew #define QLA_MBOX_BASE_23XX		0x40
694cd89cf2Sjmatthew #define QLA_MBOX_BASE_2100		0x10
704cd89cf2Sjmatthew #define QLA_MBOX_BASE_2200		0x10
714cd89cf2Sjmatthew 
724cd89cf2Sjmatthew /* QLA_CTRL_STATUS */
734cd89cf2Sjmatthew #define QLA_CTRL_RESET			0x0001
744cd89cf2Sjmatthew #define QLA_CTRL_RISC_REGS		0x0000
754cd89cf2Sjmatthew #define QLA_CTRL_FB_REGS		0x0010
764cd89cf2Sjmatthew #define QLA_CTRL_FPM0_REGS		0x0020
774cd89cf2Sjmatthew #define QLA_CTRL_FPM1_REGS		0x0030
784cd89cf2Sjmatthew 
794cd89cf2Sjmatthew /* QLA_INT_STATUS */
804cd89cf2Sjmatthew #define QLA_INT_REQ			0x8000
814cd89cf2Sjmatthew #define QLA_RISC_INT_REQ		0x0008
824cd89cf2Sjmatthew 
834cd89cf2Sjmatthew /* QLA_SEMA */
844cd89cf2Sjmatthew #define QLA_SEMA_STATUS			0x0002
854cd89cf2Sjmatthew #define QLA_SEMA_LOCK			0x0001
864cd89cf2Sjmatthew 
874cd89cf2Sjmatthew /* QLA_NVRAM */
884cd89cf2Sjmatthew #define QLA_NVRAM_DATA_IN		0x0008
894cd89cf2Sjmatthew #define QLA_NVRAM_DATA_OUT		0x0004
904cd89cf2Sjmatthew #define QLA_NVRAM_CHIP_SEL		0x0002
914cd89cf2Sjmatthew #define QLA_NVRAM_CLOCK			0x0001
924cd89cf2Sjmatthew #define QLA_NVRAM_CMD_READ		6
934cd89cf2Sjmatthew 
944cd89cf2Sjmatthew 
954cd89cf2Sjmatthew /* QLA_RISC_STATUS LOW/HIGH */
964cd89cf2Sjmatthew #define QLA_INT_INFO_SHIFT		16
974cd89cf2Sjmatthew #define QLA_RISC_HOST_INT_REQ		0x8000
984cd89cf2Sjmatthew #define QLA_RISC_PAUSED			0x0100
994cd89cf2Sjmatthew #define QLA_INT_STATUS_MASK		0x00FF
1004cd89cf2Sjmatthew 
1014cd89cf2Sjmatthew /* QLA_HOST_CMD_CTRL write */
1024cd89cf2Sjmatthew #define QLA_HOST_CMD_SHIFT		12
1034cd89cf2Sjmatthew #define QLA_HOST_CMD_NOP		0x0
1044cd89cf2Sjmatthew #define QLA_HOST_CMD_RESET		0x1
1054cd89cf2Sjmatthew #define QLA_HOST_CMD_PAUSE		0x2
1064cd89cf2Sjmatthew #define QLA_HOST_CMD_RELEASE		0x3
1074cd89cf2Sjmatthew #define QLA_HOST_CMD_MASK_PARITY	0x4
1084cd89cf2Sjmatthew #define QLA_HOST_CMD_SET_HOST_INT	0x5
1094cd89cf2Sjmatthew #define QLA_HOST_CMD_CLR_HOST_INT	0x6
1104cd89cf2Sjmatthew #define QLA_HOST_CMD_CLR_RISC_INT	0x7
1114cd89cf2Sjmatthew #define QLA_HOST_CMD_ENABLE_PARITY	0xA
1124cd89cf2Sjmatthew #define QLA_HOST_CMD_PARITY_ERROR	0xE
1134cd89cf2Sjmatthew 
1144cd89cf2Sjmatthew /* QLA_HOST_CMD_CTRL read */
1154cd89cf2Sjmatthew #define QLA_HOST_STATUS_HOST_INT	0x0080
1164cd89cf2Sjmatthew #define QLA_HOST_STATUS_RISC_RESET	0x0040
1174cd89cf2Sjmatthew #define QLA_HOST_STATUS_RISC_PAUSE	0x0020
1184cd89cf2Sjmatthew #define QLA_HOST_STATUS_RISC_EXT	0x0010
1194cd89cf2Sjmatthew 
1204cd89cf2Sjmatthew /* QLA_FPM_DIAG */
1214cd89cf2Sjmatthew #define QLA_FPM_RESET			0x0100
1224cd89cf2Sjmatthew 
1234cd89cf2Sjmatthew /* QLA_MBOX_BASE (reg 0) read */
124db1d60ccSjmatthew #define QLA_MBOX_HAS_STATUS		0x4000
1254cd89cf2Sjmatthew #define QLA_MBOX_COMPLETE		0x4000
1264cd89cf2Sjmatthew #define QLA_MBOX_INVALID		0x4001
1274cd89cf2Sjmatthew #define QLA_MBOX_INTF_ERROR		0x4002
1284cd89cf2Sjmatthew #define QLA_MBOX_TEST_FAILED		0x4003
1294cd89cf2Sjmatthew #define QLA_MBOX_CMD_ERROR		0x4005
1304cd89cf2Sjmatthew #define QLA_MBOX_CMD_PARAM		0x4006
1314cd89cf2Sjmatthew #define QLA_MBOX_PORT_USED		0x4007
1324cd89cf2Sjmatthew #define QLA_MBOX_LOOP_USED		0x4008
1334cd89cf2Sjmatthew #define QLA_MBOX_ALL_IDS_USED		0x4009
1344cd89cf2Sjmatthew #define QLA_MBOX_NOT_LOGGED_IN		0x400A
1354cd89cf2Sjmatthew #define QLA_MBOX_LINK_DOWN		0x400B
1364cd89cf2Sjmatthew #define QLA_ASYNC_SYSTEM_ERROR		0x8002
1374cd89cf2Sjmatthew #define QLA_ASYNC_REQ_XFER_ERROR	0x8003
1384cd89cf2Sjmatthew #define QLA_ASYNC_RSP_XFER_ERROR	0x8004
1394cd89cf2Sjmatthew #define QLA_ASYNC_LIP_OCCURRED		0x8010
1404cd89cf2Sjmatthew #define QLA_ASYNC_LOOP_UP		0x8011
1414cd89cf2Sjmatthew #define QLA_ASYNC_LOOP_DOWN		0x8012
1424cd89cf2Sjmatthew #define QLA_ASYNC_LIP_RESET		0x8013
1434cd89cf2Sjmatthew #define QLA_ASYNC_PORT_DB_CHANGE	0x8014
1444cd89cf2Sjmatthew #define QLA_ASYNC_CHANGE_NOTIFY		0x8015
1454cd89cf2Sjmatthew #define QLA_ASYNC_LIP_F8		0x8016
1464cd89cf2Sjmatthew #define QLA_ASYNC_LOOP_INIT_ERROR	0x8017
1474cd89cf2Sjmatthew #define QLA_ASYNC_LOGIN_REJECT		0x8018
1484cd89cf2Sjmatthew #define QLA_ASYNC_SCSI_CMD_COMPLETE	0x8020
1494cd89cf2Sjmatthew #define QLA_ASYNC_CTIO_COMPLETE		0x8021
1504cd89cf2Sjmatthew #define QLA_ASYNC_POINT_TO_POINT	0x8030
1514cd89cf2Sjmatthew #define QLA_ASYNC_ZIO_RESP_UPDATE	0x8040
1524cd89cf2Sjmatthew #define QLA_ASYNC_RND_ERROR		0x8048
1534cd89cf2Sjmatthew #define QLA_ASYNC_QUEUE_FULL		0x8049
1544cd89cf2Sjmatthew 
1554cd89cf2Sjmatthew 
1564cd89cf2Sjmatthew /* QLA_MBOX_BASE (reg 0) write */
1574cd89cf2Sjmatthew #define QLA_MBOX_NOP			0x0000
1584cd89cf2Sjmatthew #define QLA_MBOX_LOAD_RAM		0x0001
1594cd89cf2Sjmatthew #define QLA_MBOX_EXEC_FIRMWARE		0x0002
160db1d60ccSjmatthew #define QLA_MBOX_WRITE_RAM_WORD		0x0004
1614cd89cf2Sjmatthew #define QLA_MBOX_REGISTER_TEST		0x0006
1624cd89cf2Sjmatthew #define QLA_MBOX_VERIFY_CSUM		0x0007
1634cd89cf2Sjmatthew #define QLA_MBOX_ABOUT_FIRMWARE		0x0008
1644cd89cf2Sjmatthew #define QLA_MBOX_LOAD_RAM_EXT		0x000B
1654cd89cf2Sjmatthew #define QLA_MBOX_CSUM_FIRMWARE		0x000E
1664cd89cf2Sjmatthew #define QLA_MBOX_INIT_REQ_QUEUE		0x0010
1674cd89cf2Sjmatthew #define QLA_MBOX_INIT_RSP_QUEUE		0x0011
1684cd89cf2Sjmatthew #define QLA_MBOX_STOP_FIRMWARE		0x0014
1694cd89cf2Sjmatthew #define QLA_MBOX_ABORT_IOCB		0x0015
1704cd89cf2Sjmatthew #define QLA_MBOX_ABORT_DEVICE		0x0016
1714cd89cf2Sjmatthew #define QLA_MBOX_ABORT_TARGET		0x0017
1724cd89cf2Sjmatthew #define QLA_MBOX_RESET			0x0018
1734cd89cf2Sjmatthew #define QLA_MBOX_ABORT_QUEUE		0x001C
1744cd89cf2Sjmatthew #define QLA_MBOX_GET_QUEUE_STATUS	0x001D
1754cd89cf2Sjmatthew #define QLA_MBOX_GET_FIRMWARE_STATUS	0x001F
1764cd89cf2Sjmatthew #define QLA_MBOX_GET_LOOP_ID		0x0020
1774cd89cf2Sjmatthew #define QLA_MBOX_SET_FIRMWARE_OPTIONS	0x0038
1784cd89cf2Sjmatthew #define QLA_MBOX_ENH_GET_PORT_DB	0x0047
1794cd89cf2Sjmatthew #define QLA_MBOX_PLOGO			0x0056
1804cd89cf2Sjmatthew #define QLA_MBOX_INIT_FIRMWARE		0x0060
1814cd89cf2Sjmatthew #define QLA_MBOX_GET_INIT_CB		0x0061
1824cd89cf2Sjmatthew #define QLA_MBOX_LIP			0x0062
1834cd89cf2Sjmatthew #define QLA_MBOX_GET_FC_AL_POS		0x0063
1844cd89cf2Sjmatthew #define QLA_MBOX_GET_PORT_DB		0x0064
1854cd89cf2Sjmatthew #define QLA_MBOX_TARGET_RESET		0x0066
1864cd89cf2Sjmatthew #define QLA_MBOX_GET_FIRMWARE_STATE	0x0069
1874cd89cf2Sjmatthew #define QLA_MBOX_GET_PORT_NAME		0x006A
1884cd89cf2Sjmatthew #define QLA_MBOX_GET_LINK_STATUS	0x006B
1894cd89cf2Sjmatthew #define QLA_MBOX_LIP_RESET		0x006C
1904cd89cf2Sjmatthew #define QLA_MBOX_SEND_SNS		0x006E
1914cd89cf2Sjmatthew #define QLA_MBOX_FABRIC_PLOGI		0x006F
1924cd89cf2Sjmatthew #define QLA_MBOX_SEND_CHANGE_REQ	0x0070
1934cd89cf2Sjmatthew #define QLA_MBOX_FABRIC_PLOGO		0x0071
1944cd89cf2Sjmatthew #define QLA_MBOX_LOOP_PLOGI		0x0074
1954cd89cf2Sjmatthew #define QLA_MBOX_GET_PORT_NAME_LIST	0x0075
1964cd89cf2Sjmatthew #define QLA_MBOX_LUN_RESET		0x007E
1974cd89cf2Sjmatthew 
1984cd89cf2Sjmatthew 
1994cd89cf2Sjmatthew /* nvram layout */
2004cd89cf2Sjmatthew struct qla_nvram {
2014cd89cf2Sjmatthew 	u_int8_t	id[4];
2024cd89cf2Sjmatthew 	u_int8_t	nvram_version;
2034cd89cf2Sjmatthew 	u_int8_t	reserved_0;
2044cd89cf2Sjmatthew 
2054cd89cf2Sjmatthew 	u_int8_t	parameter_block_version;
2064cd89cf2Sjmatthew 	u_int8_t	reserved_1;
2074cd89cf2Sjmatthew 
2084cd89cf2Sjmatthew 	u_int16_t	fw_options;
2094cd89cf2Sjmatthew 
2104cd89cf2Sjmatthew 	u_int16_t	frame_payload_size;
2114cd89cf2Sjmatthew 	u_int16_t	max_iocb_allocation;
2124cd89cf2Sjmatthew 	u_int16_t	execution_throttle;
2134cd89cf2Sjmatthew 	u_int8_t	retry_count;
2144cd89cf2Sjmatthew 	u_int8_t	retry_delay;
2154cd89cf2Sjmatthew 	u_int64_t	port_name;
2164cd89cf2Sjmatthew 	u_int16_t	hard_address;
2174cd89cf2Sjmatthew 	u_int8_t	inquiry_data;
2184cd89cf2Sjmatthew 	u_int8_t	login_timeout;
2194cd89cf2Sjmatthew 	u_int64_t	node_name;
2204cd89cf2Sjmatthew 
2214cd89cf2Sjmatthew 	u_int16_t	add_fw_options;
2224cd89cf2Sjmatthew 
2234cd89cf2Sjmatthew 	u_int8_t	response_accumulation_timer;
2244cd89cf2Sjmatthew 	u_int8_t	interrupt_delay_timer;
2254cd89cf2Sjmatthew 
2264cd89cf2Sjmatthew 	u_int16_t	special_options;
2274cd89cf2Sjmatthew 
2284cd89cf2Sjmatthew 	u_int8_t	reserved_2[22];
2294cd89cf2Sjmatthew 
2304cd89cf2Sjmatthew 	u_int8_t	seriallink_options[4];
2314cd89cf2Sjmatthew 
2324cd89cf2Sjmatthew 	u_int8_t	host_p[2];
2334cd89cf2Sjmatthew 
2344cd89cf2Sjmatthew 	u_int64_t	boot_node_name;
2354cd89cf2Sjmatthew 	u_int8_t	boot_lun_number;
2364cd89cf2Sjmatthew 	u_int8_t	reset_delay;
2374cd89cf2Sjmatthew 	u_int8_t	port_down_retry_count;
2384cd89cf2Sjmatthew 	u_int8_t	boot_id_number;
2394cd89cf2Sjmatthew 	u_int16_t	max_luns_per_target;
2404cd89cf2Sjmatthew 	u_int64_t	fcode_boot_port_name;
2414cd89cf2Sjmatthew 	u_int64_t	alternate_port_name;
2424cd89cf2Sjmatthew 	u_int64_t	alternate_node_name;
2434cd89cf2Sjmatthew 
2444cd89cf2Sjmatthew 	u_int8_t	efi_parameters;
2454cd89cf2Sjmatthew 
2464cd89cf2Sjmatthew 	u_int8_t	link_down_timeout;
2474cd89cf2Sjmatthew 
2484cd89cf2Sjmatthew 	u_int8_t	adapter_id[16];
2494cd89cf2Sjmatthew 
2504cd89cf2Sjmatthew 	u_int64_t	alt1_boot_node_name;
2514cd89cf2Sjmatthew 	u_int16_t	alt1_boot_lun_number;
2524cd89cf2Sjmatthew 	u_int64_t	alt2_boot_node_name;
2534cd89cf2Sjmatthew 	u_int16_t	alt2_boot_lun_number;
2544cd89cf2Sjmatthew 	u_int64_t	alt3_boot_node_name;
2554cd89cf2Sjmatthew 	u_int16_t	alt3_boot_lun_number;
2564cd89cf2Sjmatthew 	u_int64_t	alt4_boot_node_name;
2574cd89cf2Sjmatthew 	u_int16_t	alt4_boot_lun_number;
2584cd89cf2Sjmatthew 	u_int64_t	alt5_boot_node_name;
2594cd89cf2Sjmatthew 	u_int16_t	alt5_boot_lun_number;
2604cd89cf2Sjmatthew 	u_int64_t	alt6_boot_node_name;
2614cd89cf2Sjmatthew 	u_int16_t	alt6_boot_lun_number;
2624cd89cf2Sjmatthew 	u_int64_t	alt7_boot_node_name;
2634cd89cf2Sjmatthew 	u_int16_t	alt7_boot_lun_number;
2644cd89cf2Sjmatthew 
2654cd89cf2Sjmatthew 	u_int8_t	reserved_3[2];
2664cd89cf2Sjmatthew 
2674cd89cf2Sjmatthew 	u_int8_t	model_number[16];
2684cd89cf2Sjmatthew 
2694cd89cf2Sjmatthew 	u_int8_t	oem_specific[16];
2704cd89cf2Sjmatthew 
2714cd89cf2Sjmatthew 	u_int8_t	adapter_features[2];
2724cd89cf2Sjmatthew 
2734cd89cf2Sjmatthew 	u_int8_t	reserved_4[16];
2744cd89cf2Sjmatthew 
2754cd89cf2Sjmatthew 	u_int16_t	subsystem_vendor_id_2200;
2764cd89cf2Sjmatthew 	u_int16_t	subsystem_device_id_2200;
2774cd89cf2Sjmatthew 
2784cd89cf2Sjmatthew 	u_int8_t	reserved_5;
2794cd89cf2Sjmatthew 	u_int8_t	checksum;
2804cd89cf2Sjmatthew } __packed;
2814cd89cf2Sjmatthew 
2824cd89cf2Sjmatthew /* init firmware control block */
2834cd89cf2Sjmatthew #define QLA_ICB_VERSION		1
2844cd89cf2Sjmatthew 
2854cd89cf2Sjmatthew #define QLA_ICB_FW_HARD_ADDR		0x0001
2864cd89cf2Sjmatthew #define QLA_ICB_FW_FAIRNESS		0x0002
2874cd89cf2Sjmatthew #define QLA_ICB_FW_FULL_DUPLEX		0x0004
2884cd89cf2Sjmatthew #define QLA_ICB_FW_FAST_POST		0x0008
2894cd89cf2Sjmatthew #define QLA_ICB_FW_TARGET_MODE		0x0010
2904cd89cf2Sjmatthew #define QLA_ICB_FW_DISABLE_INITIATOR	0x0020
2914cd89cf2Sjmatthew #define QLA_ICB_FW_ENABLE_ADISC		0x0040
2924cd89cf2Sjmatthew #define QLA_ICB_FW_ENABLE_TGT_DEV	0x0080
2934cd89cf2Sjmatthew #define QLA_ICB_FW_ENABLE_PDB_CHANGED	0x0100
2944cd89cf2Sjmatthew #define QLA_ICB_FW_DISABLE_INIT_LIP	0x0200
2954cd89cf2Sjmatthew #define QLA_ICB_FW_DESC_LOOP_ID		0x0400
2964cd89cf2Sjmatthew #define QLA_ICB_FW_PREV_LOOP_ID		0x0800
2974cd89cf2Sjmatthew #define QLA_ICB_FW_RESERVED		0x1000
2984cd89cf2Sjmatthew #define QLA_ICB_FW_LOGIN_AFTER_LIP	0x2000
2994cd89cf2Sjmatthew #define QLA_ICB_FW_NAME_OPTION		0x4000
3004cd89cf2Sjmatthew #define QLA_ICB_FW_EXTENDED_INIT_CB	0x8000
3014cd89cf2Sjmatthew 
3024cd89cf2Sjmatthew #define QLA_ICB_XFW_ZIO_DISABLED	0x0000
3034cd89cf2Sjmatthew #define QLA_ICB_XFW_ZIO_MODE_5		0x0005
3044cd89cf2Sjmatthew #define QLA_ICB_XFW_ZIO_MODE_6		0x0006
3054cd89cf2Sjmatthew 
3064cd89cf2Sjmatthew #define QLA_ICB_XFW_LOOP_PTP		0x0020
3074cd89cf2Sjmatthew #define QLA_ICB_XFW_PTP_ONLY		0x0010
3084cd89cf2Sjmatthew #define QLA_ICB_XFW_LOOP_ONLY		0x0000
3094cd89cf2Sjmatthew 
3104cd89cf2Sjmatthew #define QLA_ICB_XFW_HARD_ADDR_ONLY	0x0080
3114cd89cf2Sjmatthew #define QLA_ICB_XFW_ENABLE_CLASS_2	0x0100
3124cd89cf2Sjmatthew #define QLA_ICB_XFW_ENABLE_ACK0		0x0200
3134cd89cf2Sjmatthew #define QLA_ICB_XFW_ENABLE_FC_TAPE	0x1000
3144cd89cf2Sjmatthew #define QLA_ICB_XFW_ENABLE_FC_CONFIRM	0x2000
3154cd89cf2Sjmatthew #define QLA_ICB_XFW_ENABLE_TGT_QUEUE	0x4000
3164cd89cf2Sjmatthew #define QLA_ICB_XFW_NO_IMPLICIT_LOGOUT	0x8000
3174cd89cf2Sjmatthew 
3184cd89cf2Sjmatthew #define QLA_ICB_ZFW_ENABLE_XFR_RDY	0x0001
3194cd89cf2Sjmatthew #define QLA_ICB_ZFW_SOFT_ID_ONLY	0x0002
3204cd89cf2Sjmatthew #define QLA_ICB_ZFW_FCP_RSP_12_0	0x0010
3214cd89cf2Sjmatthew #define QLA_ICB_ZFW_FCP_RSP_24_0	0x0020
3224cd89cf2Sjmatthew #define QLA_ICB_ZFW_FCP_RSP_32_BYTES	0x0030
3234cd89cf2Sjmatthew #define QLA_ICB_ZFW_ENABLE_OOO		0x0040
3244cd89cf2Sjmatthew #define QLA_ICB_ZFW_NO_AUTO_PLOGI	0x0080
3254cd89cf2Sjmatthew #define QLA_ICB_ZFW_50_OHMS		0x2000
3264cd89cf2Sjmatthew #define QLA_ICB_ZFW_1GBPS		0x0000
3274cd89cf2Sjmatthew #define QLA_ICB_ZFW_2GBPS		0x4000
3284cd89cf2Sjmatthew #define QLA_ICB_ZFW_AUTONEG		0x8000
3294cd89cf2Sjmatthew 
3304cd89cf2Sjmatthew 
3314cd89cf2Sjmatthew struct qla_init_cb {
3324cd89cf2Sjmatthew 	u_int8_t	icb_version;
3334cd89cf2Sjmatthew 	u_int8_t	icb_reserved;
3344cd89cf2Sjmatthew 	u_int16_t	icb_fw_options;
3354cd89cf2Sjmatthew 	u_int16_t	icb_max_frame_len;
3364cd89cf2Sjmatthew 	u_int16_t	icb_max_alloc;
3374cd89cf2Sjmatthew 	u_int16_t	icb_exec_throttle;
3384cd89cf2Sjmatthew 	u_int8_t	icb_retry_count;
3394cd89cf2Sjmatthew 	u_int8_t	icb_retry_delay;
340*91637d79Sdlg 	u_int32_t	icb_portname_hi;
341*91637d79Sdlg 	u_int32_t	icb_portname_lo;
3424cd89cf2Sjmatthew 	u_int16_t	icb_hardaddr;
3434cd89cf2Sjmatthew 	u_int8_t	icb_inquiry_data;
3444cd89cf2Sjmatthew 	u_int8_t	icb_login_timeout;
345*91637d79Sdlg 	u_int32_t	icb_nodename_hi;
346*91637d79Sdlg 	u_int32_t	icb_nodename_lo;
3474cd89cf2Sjmatthew 	u_int16_t	icb_req_out;
3484cd89cf2Sjmatthew 	u_int16_t	icb_resp_in;
3494cd89cf2Sjmatthew 	u_int16_t	icb_req_queue_len;
3504cd89cf2Sjmatthew 	u_int16_t	icb_resp_queue_len;
351*91637d79Sdlg 	u_int32_t	icb_req_queue_addr_lo;
352*91637d79Sdlg 	u_int32_t	icb_req_queue_addr_hi;
353*91637d79Sdlg 	u_int32_t	icb_resp_queue_addr_lo;
354*91637d79Sdlg 	u_int32_t	icb_resp_queue_addr_hi;
3554cd89cf2Sjmatthew 	u_int16_t	icb_lun_enables;
3564cd89cf2Sjmatthew 	u_int8_t	icb_cmd_count;
3574cd89cf2Sjmatthew 	u_int8_t	icb_notify_count;
3584cd89cf2Sjmatthew 	u_int16_t	icb_lun_timeout;
3594cd89cf2Sjmatthew 	u_int16_t	icb_reserved2;
3604cd89cf2Sjmatthew 	u_int16_t	icb_xfwoptions;
3614cd89cf2Sjmatthew 	u_int8_t	icb_reserved3;
3624cd89cf2Sjmatthew 	u_int8_t	icb_int_delaytimer;
3634cd89cf2Sjmatthew 	u_int16_t	icb_zfwoptions;
3644cd89cf2Sjmatthew 	u_int16_t	icb_reserved4[13];
365*91637d79Sdlg } __packed __aligned(4);
3664cd89cf2Sjmatthew 
3674cd89cf2Sjmatthew #define QLA_FW_OPTION1_ASYNC_LIP_F8	0x0001
3684cd89cf2Sjmatthew #define QLA_FW_OPTION1_ASYNC_LIP_RESET	0x0002
3694cd89cf2Sjmatthew #define QLA_FW_OPTION1_SYNC_LOSS_LIP	0x0010
3704cd89cf2Sjmatthew #define QLA_FW_OPTION1_ASYNC_LIP_ERROR	0x0080
3714cd89cf2Sjmatthew #define QLA_FW_OPTION1_ASYNC_LOGIN_RJT	0x0800
3724cd89cf2Sjmatthew 
3734cd89cf2Sjmatthew #define QLA_FW_OPTION3_EMERG_IOCB	0x0001
3744cd89cf2Sjmatthew #define QLA_FW_OPTION3_ASYNC_RND_ERROR	0x0002
3754cd89cf2Sjmatthew 
3764cd89cf2Sjmatthew /* topology types returned from QLA_MBOX_GET_LOOP_ID */
3774cd89cf2Sjmatthew #define QLA_TOPO_NL_PORT		0
3784cd89cf2Sjmatthew #define QLA_TOPO_FL_PORT		1
3794cd89cf2Sjmatthew #define QLA_TOPO_N_PORT			2
3804cd89cf2Sjmatthew #define QLA_TOPO_F_PORT			3
3814cd89cf2Sjmatthew #define QLA_TOPO_N_PORT_NO_TARGET	4
3824cd89cf2Sjmatthew 
3834cd89cf2Sjmatthew 
3844cd89cf2Sjmatthew struct qla_get_port_db {
3854cd89cf2Sjmatthew 	u_int8_t	options;
3864cd89cf2Sjmatthew 	u_int8_t	control;
3874cd89cf2Sjmatthew 	u_int8_t	master_state;
3884cd89cf2Sjmatthew 	u_int8_t	slave_state;
3894cd89cf2Sjmatthew 	u_int32_t	adisc_hard_addr;
3904cd89cf2Sjmatthew 	u_int16_t	port_id[2];
3914cd89cf2Sjmatthew 	u_int64_t	node_name;
3924cd89cf2Sjmatthew 	u_int64_t	port_name;
3934cd89cf2Sjmatthew 	u_int16_t	exec_throttle;
3944cd89cf2Sjmatthew 	u_int16_t	exec_count;
3954cd89cf2Sjmatthew 	u_int8_t	retry_count;
3964cd89cf2Sjmatthew 	u_int8_t	reserved;
3974cd89cf2Sjmatthew 	u_int16_t	resource_alloc;
3984cd89cf2Sjmatthew 	u_int16_t	current_alloc;
3994cd89cf2Sjmatthew 	u_int16_t	queue_head;
4004cd89cf2Sjmatthew 	u_int16_t	queue_tail;
4014cd89cf2Sjmatthew 	u_int16_t	xmit_exec_list_next;
4024cd89cf2Sjmatthew 	u_int16_t	xmit_exec_list_prev;
4034cd89cf2Sjmatthew 	u_int16_t	common_features;
4044cd89cf2Sjmatthew 	u_int16_t	total_concurrent_seq;
4054cd89cf2Sjmatthew 	u_int16_t	rel_offset;
4064cd89cf2Sjmatthew 	u_int16_t	recip_control_flags;
4074cd89cf2Sjmatthew 	u_int16_t	recv_data_size;
4084cd89cf2Sjmatthew 	u_int16_t	concurrent_seq;
4094cd89cf2Sjmatthew 	u_int16_t	open_seq;
4104cd89cf2Sjmatthew 	u_int8_t	reserved2[8];
4114cd89cf2Sjmatthew 	u_int16_t	retry_timer;
4124cd89cf2Sjmatthew 	u_int16_t	next_seq_id;
4134cd89cf2Sjmatthew 	u_int16_t	frame_count;
4144cd89cf2Sjmatthew 	u_int16_t	prli_payload_len;
4154cd89cf2Sjmatthew 	u_int16_t	prli_svc_word0;
4164cd89cf2Sjmatthew 	u_int16_t	prli_svc_word3;
4174cd89cf2Sjmatthew 	u_int16_t	loop_id;
4184cd89cf2Sjmatthew 	u_int16_t	ext_lun_list_ptr;
4194cd89cf2Sjmatthew 	u_int16_t	ext_lun_stop_ptr;
4204cd89cf2Sjmatthew } __packed;
4214cd89cf2Sjmatthew 
422d10165e5Sjmatthew struct qla_port_name_list {
423d10165e5Sjmatthew 	u_int64_t	port_name;
424d10165e5Sjmatthew 	u_int16_t	loop_id;
425d10165e5Sjmatthew } __packed;
426d10165e5Sjmatthew 
4274cd89cf2Sjmatthew #define QLA_SVC3_TARGET_ROLE		0x0010
4284cd89cf2Sjmatthew 
4294cd89cf2Sjmatthew /* fabric name server commands */
4304cd89cf2Sjmatthew #define QLA_SNS_GA_NXT			0x0100
4314cd89cf2Sjmatthew #define QLA_SNS_GID_FT			0x0171
4324cd89cf2Sjmatthew #define QLA_SNS_RFT_ID			0x0217
4334cd89cf2Sjmatthew 
4344cd89cf2Sjmatthew #define QLA_FC4_SCSI			8
4354cd89cf2Sjmatthew 
4364cd89cf2Sjmatthew #define	QLA_LS_REJECT			0x8001
4374cd89cf2Sjmatthew #define QLA_LS_ACCEPT			0x8002
4384cd89cf2Sjmatthew 
4394cd89cf2Sjmatthew struct qla_sns_req_hdr {
4404cd89cf2Sjmatthew 	u_int16_t	resp_len;
4414cd89cf2Sjmatthew 	u_int16_t	reserved;
442*91637d79Sdlg 	u_int32_t	resp_addr_lo;
443*91637d79Sdlg 	u_int32_t	resp_addr_hi;
4444cd89cf2Sjmatthew 	u_int16_t	subcmd_len;
4454cd89cf2Sjmatthew 	u_int16_t	reserved2;
4464cd89cf2Sjmatthew } __packed;
4474cd89cf2Sjmatthew 
4484cd89cf2Sjmatthew struct qla_sns_ga_nxt {
4494cd89cf2Sjmatthew 	struct qla_sns_req_hdr header;
4504cd89cf2Sjmatthew 	u_int16_t	subcmd;
4514cd89cf2Sjmatthew 	u_int16_t	max_word;
4524cd89cf2Sjmatthew 	u_int32_t	reserved3;
4534cd89cf2Sjmatthew 	u_int32_t	port_id;
4544cd89cf2Sjmatthew } __packed;
4554cd89cf2Sjmatthew 
4564cd89cf2Sjmatthew struct qla_sns_ga_nxt_resp {
4574cd89cf2Sjmatthew 	struct qla_sns_req_hdr header;
4584cd89cf2Sjmatthew 	u_int32_t	port_type_id;
4594cd89cf2Sjmatthew 	u_int64_t	port_name;
4604cd89cf2Sjmatthew 	u_int8_t	sym_port_name_len;
4614cd89cf2Sjmatthew 	u_int8_t	sym_port_name[255];
4624cd89cf2Sjmatthew 	u_int64_t	node_name;
4634cd89cf2Sjmatthew 	u_int8_t	sym_node_name_len;
4644cd89cf2Sjmatthew 	u_int8_t	sym_node_name[255];
4654cd89cf2Sjmatthew 	u_int64_t	initial_assoc;
4664cd89cf2Sjmatthew 	u_int8_t	ip_addr[16];
4674cd89cf2Sjmatthew 	u_int32_t	cos;
4684cd89cf2Sjmatthew 	u_int32_t	fc4_types[8];
4694cd89cf2Sjmatthew } __packed;
4704cd89cf2Sjmatthew 
4714cd89cf2Sjmatthew struct qla_sns_rft_id {
4724cd89cf2Sjmatthew 	struct qla_sns_req_hdr header;
4734cd89cf2Sjmatthew 	u_int16_t	subcmd;
4744cd89cf2Sjmatthew 	u_int16_t	max_word;
4754cd89cf2Sjmatthew 	u_int32_t	reserved3;
4764cd89cf2Sjmatthew 	u_int32_t	port_id;
4774cd89cf2Sjmatthew 	u_int32_t	fc4_types[8];
4784cd89cf2Sjmatthew } __packed;
4794cd89cf2Sjmatthew 
4804cd89cf2Sjmatthew struct qla_sns_gid_ft {
4814cd89cf2Sjmatthew 	struct qla_sns_req_hdr header;
4824cd89cf2Sjmatthew 	u_int16_t	subcmd;
4834cd89cf2Sjmatthew 	u_int16_t	max_word;
4844cd89cf2Sjmatthew 	u_int32_t	reserved3;
4854cd89cf2Sjmatthew 	u_int32_t	fc4_proto;
4864cd89cf2Sjmatthew } __packed;
4874cd89cf2Sjmatthew 
4884cd89cf2Sjmatthew /* available handle ranges */
4894cd89cf2Sjmatthew #define QLA_2KL_MIN_HANDLE		0x81
4904cd89cf2Sjmatthew #define QLA_2KL_MAX_HANDLE		0x7EF
491d5c56ff1Sjmatthew #define QLA_2KL_BUSWIDTH		0x800
4924cd89cf2Sjmatthew 
4934cd89cf2Sjmatthew #define QLA_MIN_HANDLE			0x81
4944cd89cf2Sjmatthew #define QLA_MAX_HANDLE			0xFE
495d5c56ff1Sjmatthew #define QLA_BUSWIDTH			0x100
4964cd89cf2Sjmatthew 
4974cd89cf2Sjmatthew #define QLA_F_PORT_HANDLE		0x7E
4984cd89cf2Sjmatthew #define QLA_FABRIC_CTRL_HANDLE		0x7F
4994cd89cf2Sjmatthew #define QLA_SNS_HANDLE			0x80
5004cd89cf2Sjmatthew /* where does this go with 2klogin firmware? */
5014cd89cf2Sjmatthew #define QLA_IP_BCAST_HANDLE		0xFF
5024cd89cf2Sjmatthew 
5034cd89cf2Sjmatthew 
5044cd89cf2Sjmatthew /* IOCB types */
5054cd89cf2Sjmatthew /*#define QLA_IOCB_CONT_TYPE_1		0x02 */
5064cd89cf2Sjmatthew #define QLA_IOCB_STATUS			0x03
5074cd89cf2Sjmatthew #define QLA_IOCB_MARKER			0x04
5084cd89cf2Sjmatthew #define QLA_IOCB_STATUS_CONT		0x10
5094cd89cf2Sjmatthew #define QLA_IOCB_CMD_TYPE_4		0x15
5104cd89cf2Sjmatthew #define QLA_IOCB_CMD_TYPE_3		0x19
5114cd89cf2Sjmatthew #define QLA_IOCB_MAILBOX		0x39
5124cd89cf2Sjmatthew 
5134cd89cf2Sjmatthew #define QLA_REQ_FLAG_CONT		0x01
5144cd89cf2Sjmatthew #define QLA_REQ_FLAG_FULL		0x02
5154cd89cf2Sjmatthew #define QLA_REQ_FLAG_BAD_HDR		0x04
5164cd89cf2Sjmatthew #define QLA_REQ_FLAG_BAD_PKT		0x08
5174cd89cf2Sjmatthew 
5184cd89cf2Sjmatthew #define QLA_RESP_FLAG_INVALID_COUNT	0x10
5194cd89cf2Sjmatthew #define QLA_RESP_FLAG_INVALID_ORDER	0x20
5204cd89cf2Sjmatthew #define QLA_RESP_FLAG_DMA_ERR		0x40
5214cd89cf2Sjmatthew #define QLA_RESP_FLAG_RESERVED		0x80
5224cd89cf2Sjmatthew 
5234cd89cf2Sjmatthew #define QLA_IOCB_CMD_HEAD_OF_QUEUE	0x0002
5244cd89cf2Sjmatthew #define QLA_IOCB_CMD_ORDERED_QUEUE	0x0004
5254cd89cf2Sjmatthew #define QLA_IOCB_CMD_SIMPLE_QUEUE	0x0008
5264cd89cf2Sjmatthew #define QLA_IOCB_CMD_NO_DATA		0x0000
5274cd89cf2Sjmatthew #define QLA_IOCB_CMD_READ_DATA		0x0020
5284cd89cf2Sjmatthew #define QLA_IOCB_CMD_WRITE_DATA		0x0040
5294cd89cf2Sjmatthew #define QLA_IOCB_CMD_NO_FAST_POST	0x0080
5304cd89cf2Sjmatthew 
5314cd89cf2Sjmatthew #define QLA_IOCB_SEGS_PER_CMD		2
5324cd89cf2Sjmatthew #define QLA_IOCB_SEGS_PER_CMD_CONT	5
5334cd89cf2Sjmatthew 
5344cd89cf2Sjmatthew #define QLA_IOCB_MARKER_SYNC_ALL	2
5354cd89cf2Sjmatthew 
5364cd89cf2Sjmatthew struct qla_iocb_seg {
537ee8c2243Sdlg 	u_int32_t	seg_addr_lo;
538ee8c2243Sdlg 	u_int32_t	seg_addr_hi;
5394cd89cf2Sjmatthew 	u_int32_t	seg_len;
540ee8c2243Sdlg } __packed __aligned(4);
5414cd89cf2Sjmatthew 
5424cd89cf2Sjmatthew #if 0
5434cd89cf2Sjmatthew struct qla_iocb_cont1 {
5444cd89cf2Sjmatthew 	u_int8_t	entry_type;	/* QLA_IOCB_CONT_TYPE_1 */
5454cd89cf2Sjmatthew 	u_int8_t	entry_count;
5464cd89cf2Sjmatthew 	u_int8_t	seqno;
5474cd89cf2Sjmatthew 	u_int8_t	flags;
5484cd89cf2Sjmatthew 
5494cd89cf2Sjmatthew 	struct qla_iocb_seg segs[5];
5504cd89cf2Sjmatthew } __packed;
5514cd89cf2Sjmatthew #endif
5524cd89cf2Sjmatthew 
5534cd89cf2Sjmatthew struct qla_iocb_status {
5544cd89cf2Sjmatthew 	u_int8_t	entry_type;	/* QLA_IOCB_STATUS */
5554cd89cf2Sjmatthew 	u_int8_t	entry_count;
5564cd89cf2Sjmatthew 	u_int8_t	seqno;
5574cd89cf2Sjmatthew 	u_int8_t	flags;
5584cd89cf2Sjmatthew 
5594cd89cf2Sjmatthew 	u_int32_t	handle;
5604cd89cf2Sjmatthew 	u_int16_t	scsi_status;
5614cd89cf2Sjmatthew 	u_int16_t	completion;
5624cd89cf2Sjmatthew 	u_int16_t	state_flags;
5634cd89cf2Sjmatthew 	u_int16_t	status_flags;
5644cd89cf2Sjmatthew 	u_int16_t	rsp_len;
5654cd89cf2Sjmatthew 	u_int16_t	sense_len;
5664cd89cf2Sjmatthew 	u_int32_t	resid;
5674cd89cf2Sjmatthew 	u_int8_t	fcp_rsp[8];
5684cd89cf2Sjmatthew 	u_int8_t	sense_data[32];
5694cd89cf2Sjmatthew } __packed;
5704cd89cf2Sjmatthew 
5714cd89cf2Sjmatthew /* completion */
5724cd89cf2Sjmatthew #define QLA_IOCB_STATUS_COMPLETE	0x0000
5734cd89cf2Sjmatthew #define QLA_IOCB_STATUS_DMA_ERROR	0x0002
5744cd89cf2Sjmatthew #define QLA_IOCB_STATUS_RESET		0x0004
5754cd89cf2Sjmatthew #define QLA_IOCB_STATUS_ABORTED		0x0005
5764cd89cf2Sjmatthew #define QLA_IOCB_STATUS_TIMEOUT		0x0006
5774cd89cf2Sjmatthew #define QLA_IOCB_STATUS_DATA_OVERRUN	0x0007
5784cd89cf2Sjmatthew #define QLA_IOCB_STATUS_DATA_UNDERRUN	0x0015
5794cd89cf2Sjmatthew #define QLA_IOCB_STATUS_QUEUE_FULL	0x001C
5804cd89cf2Sjmatthew #define QLA_IOCB_STATUS_PORT_UNAVAIL	0x0028
5814cd89cf2Sjmatthew #define QLA_IOCB_STATUS_PORT_LOGGED_OUT 0x0029
5824cd89cf2Sjmatthew #define QLA_IOCB_STATUS_PORT_CHANGED	0x002A
5834cd89cf2Sjmatthew #define QLA_IOCB_STATUS_PORT_BUSY	0x002B
5844cd89cf2Sjmatthew 
5854cd89cf2Sjmatthew #define QLA_SCSI_STATUS_FCP_LEN_VALID	0x0100
5864cd89cf2Sjmatthew #define QLA_SCSI_STATUS_SENSE_VALID	0x0200
5874cd89cf2Sjmatthew #define QLA_SCSI_STATUS_RESID_OVER	0x0400
5884cd89cf2Sjmatthew #define QLA_SCSI_STATUS_RESID_UNDER	0x0800
5894cd89cf2Sjmatthew 
5904cd89cf2Sjmatthew 
5914cd89cf2Sjmatthew struct qla_iocb_marker {
5924cd89cf2Sjmatthew 	u_int8_t	entry_type;	/* QLA_IOCB_MARKER */
5934cd89cf2Sjmatthew 	u_int8_t	entry_count;
5944cd89cf2Sjmatthew 	u_int8_t	seqno;
5954cd89cf2Sjmatthew 	u_int8_t	flags;
5964cd89cf2Sjmatthew 
5974cd89cf2Sjmatthew 	u_int32_t	handle;
5984cd89cf2Sjmatthew 	u_int8_t	reserved;
5994cd89cf2Sjmatthew 	u_int8_t	target;
6004cd89cf2Sjmatthew 	u_int8_t	modifier;
6014cd89cf2Sjmatthew 	u_int8_t	vp_index;
6024cd89cf2Sjmatthew 	u_int16_t	marker_flags;
6034cd89cf2Sjmatthew 	u_int16_t	lun;
6044cd89cf2Sjmatthew 	u_int8_t	reserved2[48];
6054cd89cf2Sjmatthew } __packed;
6064cd89cf2Sjmatthew 
6074cd89cf2Sjmatthew struct qla_iocb_status_cont {
6084cd89cf2Sjmatthew 	u_int8_t	entry_type;	/* QLA_IOCB_STATUS_CONT */
6094cd89cf2Sjmatthew 	u_int8_t	entry_count;
6104cd89cf2Sjmatthew 	u_int8_t	seqno;
6114cd89cf2Sjmatthew 	u_int8_t	flags;
6124cd89cf2Sjmatthew 
6134cd89cf2Sjmatthew 	u_int8_t	sense[44];
6144cd89cf2Sjmatthew } __packed;
6154cd89cf2Sjmatthew 
6164cd89cf2Sjmatthew struct qla_iocb_req34 {
6174cd89cf2Sjmatthew 	u_int8_t	entry_type;	/* QLA_IOCB_CMD_TYPE_3 or 4 */
6184cd89cf2Sjmatthew 	u_int8_t	entry_count;
6194cd89cf2Sjmatthew 	u_int8_t	seqno;
6204cd89cf2Sjmatthew 	u_int8_t	flags;
6214cd89cf2Sjmatthew 
6224cd89cf2Sjmatthew 	u_int32_t	req_handle;
6234cd89cf2Sjmatthew 	u_int16_t	req_target;
6244cd89cf2Sjmatthew 	u_int16_t	req_scclun;
6254cd89cf2Sjmatthew 	u_int16_t	req_flags;
6264cd89cf2Sjmatthew 	u_int16_t	req_reserved;
6274cd89cf2Sjmatthew 	u_int16_t	req_time;
6284cd89cf2Sjmatthew 	u_int16_t	req_seg_count;
6294cd89cf2Sjmatthew 	u_int8_t	req_cdb[16];
6304cd89cf2Sjmatthew 	u_int32_t	req_totalcnt;
6314cd89cf2Sjmatthew 	union {
6324cd89cf2Sjmatthew 		struct qla_iocb_seg req3_segs[2];
6334cd89cf2Sjmatthew 		struct {
6344cd89cf2Sjmatthew 			u_int16_t req4_seg_type;
6354cd89cf2Sjmatthew 			u_int32_t req4_seg_base;
6364cd89cf2Sjmatthew 			u_int64_t req4_seg_addr;
6374cd89cf2Sjmatthew 			u_int8_t  req4_reserved[10];
638*91637d79Sdlg 		} __packed __aligned(4) req4;
6394cd89cf2Sjmatthew 	} 		req_type;
640*91637d79Sdlg } __packed __aligned(4);
6414cd89cf2Sjmatthew 
642