1 /* $OpenBSD: if_uathreg.h,v 1.2 2006/09/18 16:34:23 damien Exp $ */ 2 3 /*- 4 * Copyright (c) 2006 5 * Damien Bergamini <damien.bergamini@free.fr> 6 * 7 * Permission to use, copy, modify, and distribute this software for any 8 * purpose with or without fee is hereby granted, provided that the above 9 * copyright notice and this permission notice appear in all copies. 10 * 11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 #define UATH_CONFIG_NO 1 21 #define UATH_IFACE_INDEX 0 22 23 /* all fields are big endian */ 24 struct uath_fwblock { 25 uint32_t flags; 26 #define UATH_WRITE_BLOCK (1 << 4) 27 28 uint32_t len; 29 #define UATH_MAX_FWBLOCK_SIZE 2048 30 31 uint32_t total; 32 uint32_t remain; 33 uint32_t rxtotal; 34 uint32_t pad[123]; 35 } __packed; 36 37 #define UATH_MAX_RXCMDSZ 512 38 #define UATH_MAX_TXCMDSZ 512 39 40 struct uath_cmd_hdr { 41 uint32_t len; 42 uint32_t code; 43 #define UATH_CMD_SETUP 0x01 44 #define UATH_CMD_02 0x02 45 #define UATH_CMD_READ_MAC 0x03 46 #define UATH_CMD_WRITE_MAC 0x04 47 #define UATH_CMD_READ_EEPROM 0x05 48 #define UATH_CMD_STATS 0x06 49 #define UATH_CMD_07 0x07 50 #define UATH_CMD_SHUTDOWN 0x08 51 #define UATH_CMD_0B 0x0b 52 #define UATH_CMD_0C 0x0c 53 #define UATH_CMD_0F 0x0f 54 #define UATH_NOTIF_STATS 0x10 55 #define UATH_NOTIF_READY 0x12 56 #define UATH_NOTIF_TX 0x13 57 #define UATH_CMD_15 0x15 58 #define UATH_CMD_SET_LED 0x17 59 #define UATH_CMD_SET_XLED 0x18 60 #define UATH_CMD_1B 0x1b 61 #define UATH_CMD_1E 0x1e 62 #define UATH_CMD_CRYPTO 0x1d 63 #define UATH_CMD_SET_STATE 0x20 64 #define UATH_CMD_SET_BSSID 0x21 65 #define UATH_CMD_24 0x24 66 #define UATH_CMD_SET_RATES 0x26 67 #define UATH_CMD_27 0x27 68 #define UATH_CMD_2E 0x2e 69 #define UATH_CMD_31 0x31 70 #define UATH_CMD_SET_FILTER 0x32 71 #define UATH_CMD_SET_CHAN 0x34 72 #define UATH_CMD_RESET 0x35 73 #define UATH_CMD_SET_QUEUE 0x3a 74 #define UATH_CMD_RESET_QUEUE 0x3b 75 76 uint32_t priv; /* driver private data */ 77 uint32_t magic; 78 uint32_t reserved2[4]; 79 } __packed; 80 81 struct uath_rx_desc { 82 uint32_t len; 83 uint32_t reserved1[8]; 84 uint32_t rssi; 85 uint32_t freq; 86 uint32_t reserved2[5]; 87 } __packed; 88 89 #define UATH_MAKECTL(qid, len) htobe32((qid) << 16 | (len)) 90 91 struct uath_tx_desc { 92 uint32_t len; 93 uint32_t priv; /* driver private data */ 94 uint32_t type; 95 #define UATH_TX_DATA 0xe 96 #define UATH_TX_NULL 0xf 97 98 uint32_t magic; 99 uint32_t dest; 100 #define UATH_ID_BSS 2 101 #define UATH_ID_BROADCAST 0xffffffff 102 103 uint32_t flags; 104 #define UATH_TX_NOTIFY (1 << 24) /* f/w will send a UATH_NOTIF_TX */ 105 106 uint32_t paylen; 107 } __packed; 108 109 /* structure for command UATH_CMD_SETUP */ 110 struct uath_cmd_setup { 111 uint32_t magic1; 112 uint32_t magic2; 113 uint32_t magic3; 114 uint32_t magic4; 115 } __packed; 116 117 /* structure for commands UATH_CMD_READ_MAC and UATH_CMD_READ_EEPROM */ 118 struct uath_read_mac { 119 uint32_t len; 120 uint8_t data[32]; 121 } __packed; 122 123 /* structure for command UATH_CMD_WRITE_MAC */ 124 struct uath_write_mac { 125 uint32_t reg; 126 uint32_t len; 127 uint8_t data[32]; 128 } __packed; 129 130 /* structure for command UATH_CMD_0B */ 131 struct uath_cmd_0b { 132 uint32_t code; 133 uint32_t reserved; 134 uint32_t size; 135 uint8_t data[44]; 136 } __packed; 137 138 /* structure for command UATH_CMD_0C */ 139 struct uath_cmd_0c { 140 uint32_t magic1; 141 uint32_t magic2; 142 uint32_t magic3; 143 } __packed; 144 145 /* structure for command UATH_CMD_SET_LED */ 146 struct uath_cmd_led { 147 uint32_t which; 148 #define UATH_LED_LINK 0 149 #define UATH_LED_ACTIVITY 1 150 151 uint32_t state; 152 #define UATH_LED_OFF 0 153 #define UATH_LED_ON 1 154 } __packed; 155 156 /* structure for command UATH_CMD_SET_XLED */ 157 struct uath_cmd_xled { 158 uint32_t which; 159 uint32_t rate; 160 uint32_t mode; 161 } __packed; 162 163 /* structure for command UATH_CMD_CRYPTO */ 164 struct uath_cmd_crypto { 165 uint32_t keyidx; 166 #define UATH_DEFAULT_KEY 6 167 168 uint32_t magic1; 169 uint32_t size; 170 uint32_t reserved1; 171 uint32_t mask; 172 uint8_t addr[IEEE80211_ADDR_LEN]; 173 uint16_t reserved2; 174 uint32_t flags; 175 uint32_t reserved3[2]; 176 uint8_t key[68]; 177 uint8_t magic2[136]; 178 uint8_t magic3[136]; 179 } __packed; 180 181 /* structure for command UATH_CMD_SET_RATES */ 182 struct uath_cmd_rates { 183 uint32_t magic1; 184 uint32_t reserved; 185 uint32_t size; 186 uint8_t nrates; 187 #define UATH_MAX_NRATES 30 188 uint8_t rates[UATH_MAX_NRATES]; 189 } __packed; 190 191 /* structure for command UATH_CMD_SET_CHAN */ 192 struct uath_set_chan { 193 uint32_t flags; 194 uint32_t freq; 195 uint32_t magic1; 196 uint32_t magic2; 197 uint32_t reserved1; 198 uint32_t magic3; 199 uint32_t reserved2; 200 } __packed; 201 202 /* structure for command UATH_CMD_SET_QUEUE */ 203 struct uath_qinfo { 204 uint32_t qid; 205 #define UATH_AC_TO_QID(ac) (ac) /* id function */ 206 207 uint32_t size; 208 uint32_t ac; 209 uint32_t aifsn; 210 uint32_t logcwmin; 211 uint32_t logcwmax; 212 uint32_t txop; 213 uint32_t acm; 214 uint32_t magic1; 215 uint32_t magic2; 216 } __packed; 217 218 /* structure for command UATH_CMD_31 */ 219 struct uath_cmd_31 { 220 uint32_t magic1; 221 uint32_t magic2; 222 } __packed; 223 224 /* structure for command UATH_CMD_SET_FILTER */ 225 struct uath_cmd_filter { 226 uint32_t filter; 227 uint32_t flags; 228 } __packed; 229 230 /* structure for command UATH_CMD_SET_BSSID */ 231 struct uath_cmd_bssid { 232 uint32_t reserved1; 233 uint32_t flags1; 234 uint32_t flags2; 235 uint32_t reserved2; 236 uint32_t len; 237 uint8_t bssid[IEEE80211_ADDR_LEN]; 238 } __packed; 239 240 241 #define UATH_EEPROM_MACADDR 0x0b 242 #define UATH_EEPROM_RXBUFSZ 0x0f 243 244 #define UATH_MAX_TXBUFSZ \ 245 (sizeof (uint32_t) + sizeof (struct uath_tx_desc) + IEEE80211_MAX_LEN) 246 247 #define UATH_MIN_RXBUFSZ \ 248 (((sizeof (uint32_t) + sizeof (struct ieee80211_frame_min) + \ 249 sizeof (struct uath_rx_desc)) + 3) & ~3) 250