1 /*- 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright (c) 1997-2006 by Matthew Jacob 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice immediately at the beginning of the file, without modification, 12 * this list of conditions, and the following disclaimer. 13 * 2. The name of the author may not be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 20 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29 /* 30 * ioctl definitions for Qlogic FC/SCSI HBA driver 31 */ 32 #define ISP_IOC (021) /* 'Ctrl-Q' */ 33 34 /* 35 * This ioctl sets/retrieves the debugging level for this hba instance. 36 * Note that this is not a simple integer level- see ispvar.h for definitions. 37 * 38 * The arguments is a pointer to an integer with the new debugging level. 39 * The old value is written into this argument. 40 */ 41 42 #define ISP_SDBLEV _IOWR(ISP_IOC, 1, int) 43 44 /* 45 * This ioctl resets the HBA. Use with caution. 46 */ 47 #define ISP_RESETHBA _IO(ISP_IOC, 2) 48 49 /* 50 * This ioctl performs a fibre channel rescan. 51 */ 52 #define ISP_RESCAN _IO(ISP_IOC, 3) 53 54 /* 55 * This ioctl performs a reset and then will set the adapter to the 56 * role that was passed in (the old role will be returned). It almost 57 * goes w/o saying: use with caution. 58 * 59 * Channel selector stored in bits 8..32 as input to driver. 60 */ 61 #define ISP_SETROLE _IOWR(ISP_IOC, 4, int) 62 63 #define ISP_ROLE_NONE 0x0 64 #define ISP_ROLE_TARGET 0x1 65 #define ISP_ROLE_INITIATOR 0x2 66 #define ISP_ROLE_BOTH (ISP_ROLE_TARGET|ISP_ROLE_INITIATOR) 67 68 /* 69 * Get the current adapter role 70 * Channel selector passed in first argument. 71 */ 72 #define ISP_GETROLE _IOR(ISP_IOC, 5, int) 73 74 /* 75 * Get/Clear Stats 76 */ 77 #define ISP_STATS_VERSION 0 78 typedef struct { 79 uint8_t isp_stat_version; 80 uint8_t isp_type; /* (ro) reflects chip type */ 81 uint8_t isp_revision; /* (ro) reflects chip version */ 82 uint8_t unused1; 83 uint32_t unused2; 84 /* 85 * Statistics Counters 86 */ 87 #define ISP_NSTATS 16 88 #define ISP_INTCNT 0 89 #define ISP_INTBOGUS 1 90 #define ISP_INTMBOXC 2 91 #define ISP_INGOASYNC 3 92 #define ISP_RSLTCCMPLT 4 93 #define ISP_FPHCCMCPLT 5 94 #define ISP_RSCCHIWAT 6 95 #define ISP_FPCCHIWAT 7 96 uint64_t isp_stats[ISP_NSTATS]; 97 } isp_stats_t; 98 99 #define ISP_GET_STATS _IOR(ISP_IOC, 6, isp_stats_t) 100 #define ISP_CLR_STATS _IO(ISP_IOC, 7) 101 102 /* 103 * Initiate a LIP 104 */ 105 #define ISP_FC_LIP _IO(ISP_IOC, 8) 106 107 /* 108 * Return the Port Database structure for the named device, or ENODEV if none. 109 * Caller fills in virtual loopid (0..255), aka 'target'. The driver returns 110 * ENODEV (if nothing valid there) or the actual loopid (for local loop devices 111 * only), 24 bit Port ID and Node and Port WWNs. 112 */ 113 struct isp_fc_device { 114 uint32_t loopid; /* 0..255,2047 */ 115 uint32_t 116 chan : 6, 117 role : 2, 118 portid : 24; /* 24 bit Port ID */ 119 uint64_t node_wwn; 120 uint64_t port_wwn; 121 }; 122 #define ISP_FC_GETDINFO _IOWR(ISP_IOC, 9, struct isp_fc_device) 123 124 /* 125 * Get F/W crash dump 126 */ 127 #define ISP_GET_FW_CRASH_DUMP _IO(ISP_IOC, 10) 128 #define ISP_FORCE_CRASH_DUMP _IO(ISP_IOC, 11) 129 130 /* 131 * Get information about this Host Adapter, including current connection 132 * topology and capabilities. 133 */ 134 struct isp_hba_device { 135 uint32_t 136 : 8, 137 fc_speed : 4, /* Gbps */ 138 : 1, 139 fc_topology : 3, 140 fc_channel : 8, 141 fc_loopid : 16; 142 uint8_t fc_fw_major; 143 uint8_t fc_fw_minor; 144 uint8_t fc_fw_micro; 145 uint8_t fc_nchannels; /* number of supported channels */ 146 uint16_t fc_nports; /* number of supported ports */ 147 uint64_t nvram_node_wwn; 148 uint64_t nvram_port_wwn; 149 uint64_t active_node_wwn; 150 uint64_t active_port_wwn; 151 }; 152 153 #define ISP_TOPO_UNKNOWN 0 /* connection topology unknown */ 154 #define ISP_TOPO_FCAL 1 /* private or PL_DA */ 155 #define ISP_TOPO_LPORT 2 /* public loop */ 156 #define ISP_TOPO_NPORT 3 /* N-port */ 157 #define ISP_TOPO_FPORT 4 /* F-port */ 158 159 /* don't use 12 any more */ 160 #define ISP_FC_GETHINFO _IOWR(ISP_IOC, 13, struct isp_hba_device) 161 162 /* 163 * Various Reset Goodies 164 */ 165 struct isp_fc_tsk_mgmt { 166 uint32_t loopid; /* 0..255/2048 */ 167 uint16_t lun; 168 uint16_t chan; 169 enum { 170 IPT_CLEAR_ACA, 171 IPT_TARGET_RESET, 172 IPT_LUN_RESET, 173 IPT_CLEAR_TASK_SET, 174 IPT_ABORT_TASK_SET 175 } action; 176 }; 177 /* don't use 97 any more */ 178 #define ISP_TSK_MGMT _IOWR(ISP_IOC, 98, struct isp_fc_tsk_mgmt) 179 180 /* 181 * Just gimme a list of WWPNs that are logged into us. 182 */ 183 typedef struct { 184 uint16_t count; 185 uint16_t channel; 186 struct wwnpair { 187 uint64_t wwnn; 188 uint64_t wwpn; 189 } wwns[1]; 190 } isp_dlist_t; 191 #define ISP_FC_GETDLIST _IO(ISP_IOC, 14) 192