1*37425c50Sclaudio /* $OpenBSD: pgtreg.h,v 1.7 2006/10/11 12:10:19 claudio Exp $ */ 2a9b5e135Smglocker 3a9b5e135Smglocker /* 4a9b5e135Smglocker * Copyright (c) 2006 Claudio Jeker <claudio@openbsd.org> 5a9b5e135Smglocker * Copyright (c) 2006 Marcus Glocker <mglocker@openbsd.org> 6a9b5e135Smglocker * 7a9b5e135Smglocker * Permission to use, copy, modify, and distribute this software for any 8a9b5e135Smglocker * purpose with or without fee is hereby granted, provided that the above 9a9b5e135Smglocker * copyright notice and this permission notice appear in all copies. 10a9b5e135Smglocker * 11a9b5e135Smglocker * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12a9b5e135Smglocker * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13a9b5e135Smglocker * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14a9b5e135Smglocker * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15a9b5e135Smglocker * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16a9b5e135Smglocker * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17a9b5e135Smglocker * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18a9b5e135Smglocker */ 19a9b5e135Smglocker 20a9b5e135Smglocker /* 21d98f2119Smglocker * Copyright (c) 2004 Fujitsu Laboratories of America, Inc. 22d98f2119Smglocker * Copyright (c) 2004 Brian Fundakowski Feldman 23d98f2119Smglocker * All rights reserved. 24d98f2119Smglocker * 25d98f2119Smglocker * Redistribution and use in source and binary forms, with or without 26d98f2119Smglocker * modification, are permitted provided that the following conditions 27d98f2119Smglocker * are met: 28d98f2119Smglocker * 1. Redistributions of source code must retain the above copyright 29d98f2119Smglocker * notice, this list of conditions and the following disclaimer. 30d98f2119Smglocker * 2. Redistributions in binary form must reproduce the above copyright 31d98f2119Smglocker * notice, this list of conditions and the following disclaimer in the 32d98f2119Smglocker * documentation and/or other materials provided with the distribution. 33d98f2119Smglocker * 34d98f2119Smglocker * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 35d98f2119Smglocker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 36d98f2119Smglocker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 37d98f2119Smglocker * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 38d98f2119Smglocker * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 39d98f2119Smglocker * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 40d98f2119Smglocker * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 41d98f2119Smglocker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 42d98f2119Smglocker * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 43d98f2119Smglocker * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 44d98f2119Smglocker * SUCH DAMAGE. 45d98f2119Smglocker */ 46d98f2119Smglocker 47a9b5e135Smglocker #ifndef __PGTREG_H__ 48a9b5e135Smglocker #define __PGTREG_H__ 49a9b5e135Smglocker 50d98f2119Smglocker /* Sizes, delays, etc. */ 51744a0745Smglocker #define PGT_TX_LIST_CNT 32 52744a0745Smglocker #define PGT_RX_LIST_CNT 8 53744a0745Smglocker #define PGT_FRAG_SIZE 1536 /* overkill for mgmt frames */ 54744a0745Smglocker #define PGT_DIRECT_MEMORY_OFFSET 0x1000 55744a0745Smglocker #define PGT_DIRECT_MEMORY_SIZE 0x1000 56744a0745Smglocker #define PGT_FIRMWARE_INTERNAL_OFFSET 0x20000 57744a0745Smglocker #define PGT_WRITEIO_DELAY 10 58744a0745Smglocker #define PGT_RESET_DELAY 50000 59d98f2119Smglocker 60d98f2119Smglocker /* Registers */ 61744a0745Smglocker #define PGT_REG_DEV_INT 0x0000 /* device interrupt */ 62744a0745Smglocker #define PGT_DEV_INT_RESET 0x00000001 63744a0745Smglocker #define PGT_DEV_INT_UPDATE 0x00000002 64744a0745Smglocker #define PGT_DEV_INT_WAKEUP 0x00000008 65744a0745Smglocker #define PGT_DEV_INT_SLEEP 0x00000010 66744a0745Smglocker #define PGT_REG_INT_STAT 0x0010 /* interrupt status */ 67744a0745Smglocker #define PGT_INT_STAT_UPDATE 0x00000002 68744a0745Smglocker #define PGT_INT_STAT_INIT 0x00000004 69744a0745Smglocker #define PGT_INT_STAT_WAKEUP 0x00000008 70744a0745Smglocker #define PGT_INT_STAT_SLEEP 0x00000010 71744a0745Smglocker #define PGT_INT_STAT_UNKNOWN0 0x00004000 72744a0745Smglocker #define PGT_INT_STAT_UNKNOWN1 0x80000000 73744a0745Smglocker #define PGT_INT_STAT_SOURCES 0x8000401e 74744a0745Smglocker #define PGT_REG_INT_ACK 0x0014 /* interrupt acknowledgement */ 75744a0745Smglocker #define PGT_REG_INT_EN 0x0018 /* interrupt enable */ 76744a0745Smglocker #define PGT_REG_CTRL_BLK_BASE 0x0020 /* control block address */ 77744a0745Smglocker #define PGT_REG_GEN_PURP_COM 0x0024 78744a0745Smglocker #define PGT_REG_DIR_MEM_BASE 0x0030 79744a0745Smglocker #define PGT_REG_CTRL_STAT 0x0078 80744a0745Smglocker #define PGT_CTRL_STAT_SLEEPMODE 0x00000200 81744a0745Smglocker #define PGT_CTRL_STAT_CLOCKRUN 0x00800000 82744a0745Smglocker #define PGT_CTRL_STAT_RESET 0x10000000 83744a0745Smglocker #define PGT_CTRL_STAT_RAMBOOT 0x20000000 84744a0745Smglocker #define PGT_CTRL_STAT_STARTHALTED 0x40000000 85744a0745Smglocker #define PGT_CTRL_STAT_HOST_OVERRIDE 0x80000000 86d98f2119Smglocker 87d98f2119Smglocker /* 88d98f2119Smglocker * The control block consists of a set of queues for low- and high-priority 89d98f2119Smglocker * data, and management, transmission and reception queues. There is a 90d98f2119Smglocker * set of indices that gives the index (modulo queue size) of the current 91d98f2119Smglocker * progress in each. Nearly all configuration is done from the management 92d98f2119Smglocker * queue interface. Almost every structure is little-endian. 93d98f2119Smglocker */ 94d98f2119Smglocker enum pgt_queue { 95744a0745Smglocker PGT_QUEUE_DATA_LOW_RX = 0, 96744a0745Smglocker PGT_QUEUE_DATA_LOW_TX = 1, 97744a0745Smglocker PGT_QUEUE_DATA_HIGH_RX = 2, 98744a0745Smglocker PGT_QUEUE_DATA_HIGH_TX = 3, 99744a0745Smglocker PGT_QUEUE_MGMT_RX = 4, 100744a0745Smglocker PGT_QUEUE_MGMT_TX = 5 101d98f2119Smglocker }; 102d98f2119Smglocker 103744a0745Smglocker #define PGT_QUEUE_COUNT 6 104744a0745Smglocker #define PGT_QUEUE_DATA_RX_SIZE 8 105744a0745Smglocker #define PGT_QUEUE_DATA_TX_SIZE 32 106744a0745Smglocker #define PGT_QUEUE_MGMT_SIZE 4 107744a0745Smglocker #define PGT_QUEUE_FULL_THRESHOLD 8 108d98f2119Smglocker 109d98f2119Smglocker struct pgt_frag { 110d98f2119Smglocker uint32_t pf_addr; /* physical host address */ 111d98f2119Smglocker uint16_t pf_size; 112d98f2119Smglocker uint16_t pf_flags; 113d98f2119Smglocker #define PF_FLAG_MF 0x0001 /* more frags (frame continues) */ 114d98f2119Smglocker }; 115d98f2119Smglocker 116d98f2119Smglocker struct pgt_control_block { 117744a0745Smglocker uint32_t pcb_driver_curfrag[PGT_QUEUE_COUNT]; 118744a0745Smglocker uint32_t pcb_device_curfrag[PGT_QUEUE_COUNT]; 119744a0745Smglocker struct pgt_frag pcb_data_low_rx[PGT_QUEUE_DATA_RX_SIZE]; 120744a0745Smglocker struct pgt_frag pcb_data_low_tx[PGT_QUEUE_DATA_TX_SIZE]; 121744a0745Smglocker struct pgt_frag pcb_data_high_rx[PGT_QUEUE_DATA_RX_SIZE]; 122744a0745Smglocker struct pgt_frag pcb_data_high_tx[PGT_QUEUE_DATA_TX_SIZE]; 123744a0745Smglocker struct pgt_frag pcb_mgmt_rx[PGT_QUEUE_MGMT_SIZE]; 124744a0745Smglocker struct pgt_frag pcb_mgmt_tx[PGT_QUEUE_MGMT_SIZE]; 125d98f2119Smglocker uint32_t pcb_padding; 126d98f2119Smglocker }; 127d98f2119Smglocker 128d98f2119Smglocker /* 129d98f2119Smglocker * Unlike the rest of the structures, this is big-endian by default. 130d98f2119Smglocker * The Linux driver defines a PIMFOR_ETHERTYPE as 0x8828 (why?) 131d98f2119Smglocker */ 132d98f2119Smglocker enum pgt_mgmt_operation { 133d98f2119Smglocker PMF_OP_GET = 0, 134d98f2119Smglocker PMF_OP_SET = 1, 135d98f2119Smglocker PMF_OP_RESPONSE = 2, 136d98f2119Smglocker PMF_OP_ERROR = 3, 137d98f2119Smglocker PMF_OP_TRAP = 4 138d98f2119Smglocker /* may be more */ 139d98f2119Smglocker }; 140d98f2119Smglocker 141d98f2119Smglocker struct pgt_mgmt_frame { 142d98f2119Smglocker uint8_t pmf_version; 143d98f2119Smglocker #define PMF_VER 0x01 144d98f2119Smglocker uint8_t pmf_operation; 145d98f2119Smglocker uint32_t pmf_oid; 146d98f2119Smglocker uint8_t pmf_device; 147d98f2119Smglocker #define PMF_DEV 0x00 148d98f2119Smglocker uint8_t pmf_flags; 149d98f2119Smglocker #define PMF_FLAG_APP 0x01 /* application origin (?) */ 150d98f2119Smglocker #define PMF_FLAG_LE 0x02 /* little-endian */ 151d98f2119Smglocker #define PMF_FLAG_VALID (PMF_FLAG_APP | PMF_FLAG_LE) 152d98f2119Smglocker uint32_t pmf_size; 153d98f2119Smglocker /* data[]; */ 154*37425c50Sclaudio } __packed; 155d98f2119Smglocker 1566f25f00fSclaudio struct pgt_rx_header { 157d98f2119Smglocker uint16_t pra_unknown0; /* always 0x0000 */ 158d98f2119Smglocker uint16_t pra_length; /* always 0x1400 */ 159d98f2119Smglocker uint32_t pra_clock; /* 1MHz timestamp */ 160d98f2119Smglocker uint8_t pra_flags; 161d98f2119Smglocker #define PRA_FLAG_BAD 0x01 162d98f2119Smglocker uint8_t pra_unknown1; 163d98f2119Smglocker uint8_t pra_rate; 164d98f2119Smglocker uint8_t pra_unknown2; 165d98f2119Smglocker uint16_t pra_frequency; 166d98f2119Smglocker uint16_t pra_unknown3; 167d98f2119Smglocker uint8_t pra_rssi; 168d98f2119Smglocker uint8_t pra_pad[3]; 169*37425c50Sclaudio } __packed; 1706f25f00fSclaudio 1716f25f00fSclaudio struct pgt_rx_annex { 1726f25f00fSclaudio uint8_t pra_ether_dhost[ETHER_ADDR_LEN]; 1736f25f00fSclaudio uint8_t pra_ether_shost[ETHER_ADDR_LEN]; 1746f25f00fSclaudio struct pgt_rx_header pra_header; 175d98f2119Smglocker uint16_t pra_ether_type; 176*37425c50Sclaudio } __packed; 177d98f2119Smglocker 178d98f2119Smglocker /* 179d98f2119Smglocker * OIDs used to communicate management information. 180d98f2119Smglocker */ 181d98f2119Smglocker enum pgt_oid { 182744a0745Smglocker PGT_OID_MAC_ADDRESS = 0x00000000, 183d98f2119Smglocker /* uint8_t ether[6]; */ 184744a0745Smglocker PGT_OID_LINK_STATE = 0x00000001, 185d98f2119Smglocker /* uint32_t rate; (500kbps units) */ 186744a0745Smglocker PGT_OID_BSS_TYPE = 0x10000000, 187d98f2119Smglocker /* uint32_t network; */ 188744a0745Smglocker #define PGT_BSS_TYPE_NONE 0 189744a0745Smglocker #define PGT_BSS_TYPE_STA 1 190744a0745Smglocker #define PGT_BSS_TYPE_IBSS 2 191744a0745Smglocker #define PGT_BSS_TYPE_ANY 3 192744a0745Smglocker PGT_OID_BSSID = 0x10000001, 193d98f2119Smglocker /* uint8_t bssid[6]; */ 194744a0745Smglocker PGT_OID_SSID = 0x10000002, 195d98f2119Smglocker /* struct pgt_obj_ssid; */ 196744a0745Smglocker PGT_OID_COUNTRY = 0x10000005, 197d98f2119Smglocker /* uint32_t country; guessing until I see some foreign hardware... */ 198744a0745Smglocker #define PGT_COUNTRY_USA 0 199744a0745Smglocker PGT_OID_SSID_OVERRIDE = 0x10000006, 200d98f2119Smglocker /* struct pgt_obj_ssid; */ 201744a0745Smglocker PGT_OID_AUTH_MODE = 0x12000000, 202d98f2119Smglocker /* uint32_t auth; */ 203744a0745Smglocker #define PGT_AUTH_MODE_NONE 0 204744a0745Smglocker #define PGT_AUTH_MODE_OPEN 1 205744a0745Smglocker #define PGT_AUTH_MODE_SHARED 2 206744a0745Smglocker #define PGT_AUTH_MODE_BOTH 3 207744a0745Smglocker PGT_OID_PRIVACY_INVOKED = 0x12000001, 208d98f2119Smglocker /* uint32_t privacy; */ 209744a0745Smglocker PGT_OID_EXCLUDE_UNENCRYPTED = 0x12000002, 210d98f2119Smglocker /* uint32_t exunencrypted; */ 211744a0745Smglocker PGT_OID_DEFAULT_KEYNUM = 0x12000003, 212d98f2119Smglocker /* uint32_t defkey; */ 213744a0745Smglocker PGT_OID_DEFAULT_KEY0 = 0x12000004, 214d98f2119Smglocker /* struct pgt_obj_key; */ 215744a0745Smglocker PGT_OID_DEFAULT_KEY1 = 0x12000005, 216d98f2119Smglocker /* struct pgt_obj_key; */ 217744a0745Smglocker PGT_OID_DEFAULT_KEY2 = 0x12000006, 218d98f2119Smglocker /* struct pgt_obj_key; */ 219744a0745Smglocker PGT_OID_DEFAULT_KEY3 = 0x12000007, 220d98f2119Smglocker /* struct pgt_obj_key; */ 221744a0745Smglocker PGT_OID_STA_KEY = 0x12000008, 222744a0745Smglocker PGT_OID_PSM = 0x14000000, 223d98f2119Smglocker /* uint32_t powersave; */ 224744a0745Smglocker PGT_OID_EAPAUTHSTA = 0x150007de, 225d98f2119Smglocker /* uint8_t sta[6]; */ 226744a0745Smglocker PGT_OID_EAPUNAUTHSTA = 0x150007df, 227d98f2119Smglocker /* uint8_t sta[6]; */ 228744a0745Smglocker PGT_OID_DOT1X = 0x150007e0, 229d98f2119Smglocker /* uint32_t dot1x; */ 230744a0745Smglocker #define PGT_DOT1X_AUTH_NONE 0 231744a0745Smglocker #define PGT_DOT1X_AUTH_ENABLED 1 232744a0745Smglocker #define PGT_DOT1X_KEYTX_ENABLED 2 233744a0745Smglocker PGT_OID_SLOT_TIME = 0x17000000, 234d98f2119Smglocker /* uint32_t slottime; */ 235744a0745Smglocker PGT_OID_CHANNEL = 0x17000007, 236d98f2119Smglocker /* uint32_t channel; */ 237744a0745Smglocker PGT_OID_PREAMBLE_MODE = 0x17000009, 238d98f2119Smglocker /* uint32_t preamble; */ 239744a0745Smglocker #define PGT_OID_PREAMBLE_MODE_LONG 0 240744a0745Smglocker #define PGT_OID_PREAMBLE_MODE_SHORT 1 241744a0745Smglocker #define PGT_OID_PREAMBLE_MODE_DYNAMIC 2 242744a0745Smglocker PGT_OID_RATES = 0x1700000a, 243d98f2119Smglocker /* uint8_t rates[]; nul terminated */ 244744a0745Smglocker PGT_OID_RSSI_VECTOR = 0x1700000d, 245744a0745Smglocker PGT_OID_OUTPUT_POWER_TABLE = 0x1700000e, 246744a0745Smglocker PGT_OID_OUTPUT_POWER = 0x1700000f, 247744a0745Smglocker PGT_OID_SUPPORTED_RATES = 0x17000010, 248d98f2119Smglocker /* uint8_t rates[]; nul terminated */ 249744a0745Smglocker PGT_OID_NOISE_FLOOR = 0x17000013, 250d98f2119Smglocker /* uint32_t noise; */ 251744a0745Smglocker PGT_OID_SLOT_MODE = 0x17000017, 252d98f2119Smglocker /* uint32_t slot; */ 253744a0745Smglocker #define PGT_OID_SLOT_MODE_LONG 0 254744a0745Smglocker #define PGT_OID_SLOT_MODE_SHORT 1 255744a0745Smglocker #define PGT_OID_SLOT_MODE_DYNAMIC 2 256744a0745Smglocker PGT_OID_EXTENDED_RATES = 0x17000020, 257d98f2119Smglocker /* uint8_t rates[]; nul terminated */ 258744a0745Smglocker PGT_OID_FREQUENCY = 0x17000011, 259d98f2119Smglocker /* uint32_t frequency; */ 260744a0745Smglocker PGT_OID_SUPPORTED_FREQUENCIES = 0x17000012, 261d98f2119Smglocker /* struct pgt_obj_freq; */ 262744a0745Smglocker PGT_OID_PROFILE = 0x17000019, 263d98f2119Smglocker /* uint32_t profile; */ 264744a0745Smglocker #define PGT_PROFILE_B_ONLY 0 265744a0745Smglocker #define PGT_PROFILE_MIXED_G_WIFI 1 266744a0745Smglocker #define PGT_PROFILE_MIXED_LONG 2 267744a0745Smglocker #define PGT_PROFILE_G_ONLY 3 268744a0745Smglocker #define PGT_PROFILE_TEST 4 269744a0745Smglocker #define PGT_PROFILE_B_WIFI 5 270744a0745Smglocker #define PGT_PROFILE_A_ONLY 6 271744a0745Smglocker #define PGT_PROFILE_MIXED_SHORT 7 272744a0745Smglocker PGT_OID_DEAUTHENTICATE = 0x18000000, 273d98f2119Smglocker /* struct pgt_obj_mlme; */ 274744a0745Smglocker PGT_OID_AUTHENTICATE = 0x18000001, 275d98f2119Smglocker /* struct pgt_obj_mlme; */ 276744a0745Smglocker PGT_OID_DISASSOCIATE = 0x18000002, 277d98f2119Smglocker /* struct pgt_obj_mlme; */ 278744a0745Smglocker PGT_OID_ASSOCIATE = 0x18000003, 279d98f2119Smglocker /* struct pgt_obj_mlme; */ 280744a0745Smglocker PGT_OID_SCAN = 0x18000004, 281744a0745Smglocker PGT_OID_BEACON = 0x18000005, 282d98f2119Smglocker /* struct pgt_obj_mlmeex; */ 283744a0745Smglocker PGT_OID_PROBE = 0x18000006, 284d98f2119Smglocker /* struct pgt_obj_mlmeex; */ 285744a0745Smglocker PGT_OID_DEAUTHENTICATEEX = 0x18000007, 286d98f2119Smglocker /* struct pgt_obj_mlmeex; */ 287744a0745Smglocker PGT_OID_AUTHENTICATEEX = 0x18000008, 288d98f2119Smglocker /* struct pgt_obj_mlmeex; */ 289744a0745Smglocker PGT_OID_DISASSOCIATEEX = 0x18000009, 290d98f2119Smglocker /* struct pgt_obj_mlmeex; */ 291744a0745Smglocker PGT_OID_ASSOCIATEEX = 0x1800000a, 292d98f2119Smglocker /* struct pgt_obj_mlmeex; */ 293744a0745Smglocker PGT_OID_REASSOCIATE = 0x1800000b, 294d98f2119Smglocker /* struct pgt_obj_mlmeex; */ 295744a0745Smglocker PGT_OID_REASSOCIATEEX = 0x1800000c, 296d98f2119Smglocker /* struct pgt_obj_mlmeex; */ 297744a0745Smglocker PGT_OID_MLME_AUTO_LEVEL = 0x19000001, 298d98f2119Smglocker /* uint32_t mlme; */ 299744a0745Smglocker #define PGT_MLME_AUTO_LEVEL_AUTO 0 300744a0745Smglocker #define PGT_MLME_AUTO_LEVEL_INTERMEDIATE 1 301744a0745Smglocker #define PGT_MLME_AUTO_LEVEL_EXTENDED 2 302d98f2119Smglocker /* struct pgt_obj_buffer;*/ 303744a0745Smglocker PGT_OID_PSM_BUFFER = 0x19000004, 304d98f2119Smglocker /* struct pgt_obj_buffer;*/ 305744a0745Smglocker #define PGT_PSM_BUFFER_FRAME_COUNT 64 306744a0745Smglocker PGT_OID_MAX_FRAME_BURST = 0x1b000008, 307d98f2119Smglocker /* uint32_t max_usec_grouped; */ 308744a0745Smglocker PGT_OID_BSS_FIND = 0x1c000042, 309d98f2119Smglocker /* struct pgt_obj_bss; */ 310744a0745Smglocker PGT_OID_BSS_LIST = 0x1c000043, 311d98f2119Smglocker /* struct pgt_obj_bsslist; */ 312d98f2119Smglocker /* Initial settings. */ 313744a0745Smglocker PGT_OID_MODE = 0xff020003, 314d98f2119Smglocker /* uint32_t mode; */ 315744a0745Smglocker #define PGT_MODE_PROMISCUOUS 0 316744a0745Smglocker #define PGT_MODE_CLIENT 1 317744a0745Smglocker #define PGT_MODE_AP 2 318744a0745Smglocker #define PGT_MODE_SNIFFER 3 319744a0745Smglocker PGT_OID_CONFIG = 0xff020008, 320d98f2119Smglocker /* uint32_t flags; */ 321744a0745Smglocker #define PGT_CONFIG_MANUAL_RUN 0x00000001 322744a0745Smglocker #define PGT_CONFIG_FRAME_TRAP 0x00000002 323744a0745Smglocker #define PGT_CONFIG_RX_ANNEX 0x00000004 324744a0745Smglocker #define PGT_CONFIG_TX_ANNEX 0x00000008 325744a0745Smglocker #define PGT_CONFIG_WDS 0x00000010 326744a0745Smglocker PGT_OID_PHY = 0xff02000d, 327744a0745Smglocker #define PGT_OID_PHY_2400MHZ 0x00000001 328744a0745Smglocker #define PGT_OID_PHY_5000MHZ 0x00000002 329744a0745Smglocker #define PGT_OID_PHY_FAA 0x80000000 330d98f2119Smglocker }; 331d98f2119Smglocker 332d98f2119Smglocker /* 333d98f2119Smglocker * Structures used to communicate via the OIDs. 334d98f2119Smglocker */ 335d98f2119Smglocker struct pgt_obj_ssid { 336d98f2119Smglocker uint8_t pos_length; 337d98f2119Smglocker char pos_ssid[33]; 338*37425c50Sclaudio } __packed; 339d98f2119Smglocker 340d98f2119Smglocker struct pgt_obj_key { 341d98f2119Smglocker uint8_t pok_type; 342744a0745Smglocker #define PGT_OBJ_KEY_TYPE_WEP 0 343744a0745Smglocker #define PGT_OBJ_KEY_TYPE_TKIP 1 344d98f2119Smglocker uint8_t pok_length; 345d98f2119Smglocker uint8_t pok_key[32]; 346*37425c50Sclaudio } __packed; 347d98f2119Smglocker 348d98f2119Smglocker /* 349d98f2119Smglocker * Each mlme received includes the current 802.11 state. 350d98f2119Smglocker */ 351744a0745Smglocker #define PGT_MLME_STATE_NONE 0 352744a0745Smglocker #define PGT_MLME_STATE_AUTHING 1 353744a0745Smglocker #define PGT_MLME_STATE_AUTH 2 354744a0745Smglocker #define PGT_MLME_STATE_ASSOCING 3 355d98f2119Smglocker 356744a0745Smglocker #define PGT_MLME_STATE_ASSOC 5 357744a0745Smglocker #define PGT_MLME_STATE_IBSS 6 358744a0745Smglocker #define PGT_MLME_STATE_WDS 7 359d98f2119Smglocker 360d98f2119Smglocker struct pgt_obj_mlme { 361d98f2119Smglocker uint8_t pom_address[6]; 362d98f2119Smglocker uint16_t pom_id; /* 802.11 association number */ 363d98f2119Smglocker uint16_t pom_state; 364d98f2119Smglocker uint16_t pom_code; /* 802.11 reason code */ 365*37425c50Sclaudio } __packed; 366d98f2119Smglocker 367d98f2119Smglocker struct pgt_obj_mlmeex { 368d98f2119Smglocker uint8_t pom_address[6]; 369d98f2119Smglocker uint16_t pom_id; 370d98f2119Smglocker uint16_t pom_state; 371d98f2119Smglocker uint16_t pom_code; 372d98f2119Smglocker uint16_t pom_size; 373d98f2119Smglocker uint8_t pom_data[0]; 374*37425c50Sclaudio } __packed; 375d98f2119Smglocker 376d98f2119Smglocker struct pgt_obj_buffer { 377d98f2119Smglocker uint32_t pob_size; 378d98f2119Smglocker uint32_t pob_addr; 379*37425c50Sclaudio } __packed; 380d98f2119Smglocker 381d98f2119Smglocker struct pgt_obj_bss { 382d98f2119Smglocker uint8_t pob_address[6]; 383d98f2119Smglocker uint16_t pob_padding0; 384d98f2119Smglocker uint8_t pob_state; 385d98f2119Smglocker uint8_t pob_reserved; 386d98f2119Smglocker uint16_t pob_age; 387d98f2119Smglocker uint8_t pob_quality; 388d98f2119Smglocker uint8_t pob_rssi; 389d98f2119Smglocker struct pgt_obj_ssid pob_ssid; 390d98f2119Smglocker uint16_t pob_channel; 391d98f2119Smglocker uint8_t pob_beacon_period; 392d98f2119Smglocker uint8_t pob_dtim_period; 393d98f2119Smglocker uint16_t pob_capinfo; 394d98f2119Smglocker uint16_t pob_rates; 395d98f2119Smglocker uint16_t pob_basic_rates; 396d98f2119Smglocker uint16_t pob_padding1; 397*37425c50Sclaudio } __packed; 398d98f2119Smglocker 399d98f2119Smglocker struct pgt_obj_bsslist { 400d98f2119Smglocker uint32_t pob_count; 401d98f2119Smglocker struct pgt_obj_bss pob_bsslist[0]; 402744a0745Smglocker #define PGT_OBJ_BSSLIST_NBSS 24 403*37425c50Sclaudio } __packed; 404d98f2119Smglocker 405d98f2119Smglocker struct pgt_obj_frequencies { 406d98f2119Smglocker uint16_t pof_count; 407d98f2119Smglocker uint16_t pof_freqlist_mhz[0]; 408*37425c50Sclaudio } __packed; 409a9b5e135Smglocker 410a9b5e135Smglocker #endif 411