xref: /openbsd/sys/dev/ic/pgtreg.h (revision 37425c50)
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