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