History

wimax: move out to staging

There are no known users of this driver as of October 2020, and it will be removed unless someone turns out to still need it in future releases. According to https://en.wikipedia.org/wiki/List_of_WiMAX_networks, there have been many public wimax networks, but it appears that many of these have migrated to LTE or discontinued their service altogether. As most PCs and phones lack WiMAX hardware support, the remaining networks tend to use standalone routers. These almost certainly run Linux, but not a modern kernel or the mainline wimax driver stack. NetworkManager appears to have dropped userspace support in 2015 https://bugzilla.gnome.org/show_bug.cgi?id=747846, the www.linuxwimax.org site had already shut down earlier. WiMax is apparently still being deployed on airport campus networks ("AeroMACS"), but in a frequency band that was not supported by the old Intel 2400m (used in Sandy Bridge laptops and earlier), which is the only driver using the kernel's wimax stack. Move all files into drivers/staging/wimax, including the uapi header files and documentation, to make it easier to remove it when it gets to that. Only minimal changes are made to the source files, in order to make it possible to port patches across the move. Also remove the MAINTAINERS entry that refers to a broken mailing list and website.

Arnd Bergmann committed 6 years ago

Commit f54ec581 parent 72de7d951 files · +51 −93Browse files

Showing the changes to include/uapi/linux (2 of 51 files). Show all

Unified · Split

2 files
  1. include/uapi/linux/wimax.h +0 −239
  2. include/uapi/linux/wimax/i2400m.h +0 −572
include/uapi/linux/wimax.h+0−239
@@ -1,239 +0,0 @@
1/*
2 * Linux WiMax
3 * API for user space
4 *
5 *
6 * Copyright (C) 2007-2008 Intel Corporation. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in
16 * the documentation and/or other materials provided with the
17 * distribution.
18 * * Neither the name of Intel Corporation nor the names of its
19 * contributors may be used to endorse or promote products derived
20 * from this software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 *
34 *
35 * Intel Corporation <linux-wimax@intel.com>
36 * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
37 * - Initial implementation
38 *
39 *
40 * This file declares the user/kernel protocol that is spoken over
41 * Generic Netlink, as well as any type declaration that is to be used
42 * by kernel and user space.
43 *
44 * It is intended for user space to clone it verbatim to use it as a
45 * primary reference for definitions.
46 *
47 * Stuff intended for kernel usage as well as full protocol and stack
48 * documentation is rooted in include/net/wimax.h.
49 */
50
51#ifndef __LINUX__WIMAX_H__
52#define __LINUX__WIMAX_H__
53
54#include <linux/types.h>
55
56enum {
57 /**
58 * Version of the interface (unsigned decimal, MMm, max 25.5)
59 * M - Major: change if removing or modifying an existing call.
60 * m - minor: change when adding a new call
61 */
62 WIMAX_GNL_VERSION = 01,
63 /* Generic NetLink attributes */
64 WIMAX_GNL_ATTR_INVALID = 0x00,
65 WIMAX_GNL_ATTR_MAX = 10,
66};
67
68
69/*
70 * Generic NetLink operations
71 *
72 * Most of these map to an API call; _OP_ stands for operation, _RP_
73 * for reply and _RE_ for report (aka: signal).
74 */
75enum {
76 WIMAX_GNL_OP_MSG_FROM_USER, /* User to kernel message */
77 WIMAX_GNL_OP_MSG_TO_USER, /* Kernel to user message */
78 WIMAX_GNL_OP_RFKILL, /* Run wimax_rfkill() */
79 WIMAX_GNL_OP_RESET, /* Run wimax_rfkill() */
80 WIMAX_GNL_RE_STATE_CHANGE, /* Report: status change */
81 WIMAX_GNL_OP_STATE_GET, /* Request for current state */
82};
83
84
85/* Message from user / to user */
86enum {
87 WIMAX_GNL_MSG_IFIDX = 1,
88 WIMAX_GNL_MSG_PIPE_NAME,
89 WIMAX_GNL_MSG_DATA,
90};
91
92
93/*
94 * wimax_rfkill()
95 *
96 * The state of the radio (ON/OFF) is mapped to the rfkill subsystem's
97 * switch state (DISABLED/ENABLED).
98 */
99enum wimax_rf_state {
100 WIMAX_RF_OFF = 0, /* Radio is off, rfkill on/enabled */
101 WIMAX_RF_ON = 1, /* Radio is on, rfkill off/disabled */
102 WIMAX_RF_QUERY = 2,
103};
104
105/* Attributes */
106enum {
107 WIMAX_GNL_RFKILL_IFIDX = 1,
108 WIMAX_GNL_RFKILL_STATE,
109};
110
111
112/* Attributes for wimax_reset() */
113enum {
114 WIMAX_GNL_RESET_IFIDX = 1,
115};
116
117/* Attributes for wimax_state_get() */
118enum {
119 WIMAX_GNL_STGET_IFIDX = 1,
120};
121
122/*
123 * Attributes for the Report State Change
124 *
125 * For now we just have the old and new states; new attributes might
126 * be added later on.
127 */
128enum {
129 WIMAX_GNL_STCH_IFIDX = 1,
130 WIMAX_GNL_STCH_STATE_OLD,
131 WIMAX_GNL_STCH_STATE_NEW,
132};
133
134
135/**
136 * enum wimax_st - The different states of a WiMAX device
137 * @__WIMAX_ST_NULL: The device structure has been allocated and zeroed,
138 * but still wimax_dev_add() hasn't been called. There is no state.
139 *
140 * @WIMAX_ST_DOWN: The device has been registered with the WiMAX and
141 * networking stacks, but it is not initialized (normally that is
142 * done with 'ifconfig DEV up' [or equivalent], which can upload
143 * firmware and enable communications with the device).
144 * In this state, the device is powered down and using as less
145 * power as possible.
146 * This state is the default after a call to wimax_dev_add(). It
147 * is ok to have drivers move directly to %WIMAX_ST_UNINITIALIZED
148 * or %WIMAX_ST_RADIO_OFF in _probe() after the call to
149 * wimax_dev_add().
150 * It is recommended that the driver leaves this state when
151 * calling 'ifconfig DEV up' and enters it back on 'ifconfig DEV
152 * down'.
153 *
154 * @__WIMAX_ST_QUIESCING: The device is being torn down, so no API
155 * operations are allowed to proceed except the ones needed to
156 * complete the device clean up process.
157 *
158 * @WIMAX_ST_UNINITIALIZED: [optional] Communication with the device
159 * is setup, but the device still requires some configuration
160 * before being operational.
161 * Some WiMAX API calls might work.
162 *
163 * @WIMAX_ST_RADIO_OFF: The device is fully up; radio is off (wether
164 * by hardware or software switches).
165 * It is recommended to always leave the device in this state
166 * after initialization.
167 *
168 * @WIMAX_ST_READY: The device is fully up and radio is on.
169 *
170 * @WIMAX_ST_SCANNING: [optional] The device has been instructed to
171 * scan. In this state, the device cannot be actively connected to
172 * a network.
173 *
174 * @WIMAX_ST_CONNECTING: The device is connecting to a network. This
175 * state exists because in some devices, the connect process can
176 * include a number of negotiations between user space, kernel
177 * space and the device. User space needs to know what the device
178 * is doing. If the connect sequence in a device is atomic and
179 * fast, the device can transition directly to CONNECTED
180 *
181 * @WIMAX_ST_CONNECTED: The device is connected to a network.
182 *
183 * @__WIMAX_ST_INVALID: This is an invalid state used to mark the
184 * maximum numeric value of states.
185 *
186 * Description:
187 *
188 * Transitions from one state to another one are atomic and can only
189 * be caused in kernel space with wimax_state_change(). To read the
190 * state, use wimax_state_get().
191 *
192 * States starting with __ are internal and shall not be used or
193 * referred to by drivers or userspace. They look ugly, but that's the
194 * point -- if any use is made non-internal to the stack, it is easier
195 * to catch on review.
196 *
197 * All API operations [with well defined exceptions] will take the
198 * device mutex before starting and then check the state. If the state
199 * is %__WIMAX_ST_NULL, %WIMAX_ST_DOWN, %WIMAX_ST_UNINITIALIZED or
200 * %__WIMAX_ST_QUIESCING, it will drop the lock and quit with
201 * -%EINVAL, -%ENOMEDIUM, -%ENOTCONN or -%ESHUTDOWN.
202 *
203 * The order of the definitions is important, so we can do numerical
204 * comparisons (eg: < %WIMAX_ST_RADIO_OFF means the device is not ready
205 * to operate).
206 */
207/*
208 * The allowed state transitions are described in the table below
209 * (states in rows can go to states in columns where there is an X):
210 *
211 * UNINI RADIO READY SCAN CONNEC CONNEC
212 * NULL DOWN QUIESCING TIALIZED OFF NING TING TED
213 * NULL - x
214 * DOWN - x x x
215 * QUIESCING x -
216 * UNINITIALIZED x - x
217 * RADIO_OFF x - x
218 * READY x x - x x x
219 * SCANNING x x x - x x
220 * CONNECTING x x x x - x
221 * CONNECTED x x x -
222 *
223 * This table not available in kernel-doc because the formatting messes it up.
224 */
225 enum wimax_st {
226 __WIMAX_ST_NULL = 0,
227 WIMAX_ST_DOWN,
228 __WIMAX_ST_QUIESCING,
229 WIMAX_ST_UNINITIALIZED,
230 WIMAX_ST_RADIO_OFF,
231 WIMAX_ST_READY,
232 WIMAX_ST_SCANNING,
233 WIMAX_ST_CONNECTING,
234 WIMAX_ST_CONNECTED,
235 __WIMAX_ST_INVALID /* Always keep last */
236};
237
238
239#endif /* #ifndef __LINUX__WIMAX_H__ */
include/uapi/linux/wimax/i2400m.h+0−572
@@ -1,572 +0,0 @@
1/*
2 * Intel Wireless WiMax Connection 2400m
3 * Host-Device protocol interface definitions
4 *
5 *
6 * Copyright (C) 2007-2008 Intel Corporation. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in
16 * the documentation and/or other materials provided with the
17 * distribution.
18 * * Neither the name of Intel Corporation nor the names of its
19 * contributors may be used to endorse or promote products derived
20 * from this software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 *
34 *
35 * Intel Corporation <linux-wimax@intel.com>
36 * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
37 * - Initial implementation
38 *
39 *
40 * This header defines the data structures and constants used to
41 * communicate with the device.
42 *
43 * BOOTMODE/BOOTROM/FIRMWARE UPLOAD PROTOCOL
44 *
45 * The firmware upload protocol is quite simple and only requires a
46 * handful of commands. See drivers/net/wimax/i2400m/fw.c for more
47 * details.
48 *
49 * The BCF data structure is for the firmware file header.
50 *
51 *
52 * THE DATA / CONTROL PROTOCOL
53 *
54 * This is the normal protocol spoken with the device once the
55 * firmware is uploaded. It transports data payloads and control
56 * messages back and forth.
57 *
58 * It consists 'messages' that pack one or more payloads each. The
59 * format is described in detail in drivers/net/wimax/i2400m/rx.c and
60 * tx.c.
61 *
62 *
63 * THE L3L4 PROTOCOL
64 *
65 * The term L3L4 refers to Layer 3 (the device), Layer 4 (the
66 * driver/host software).
67 *
68 * This is the control protocol used by the host to control the i2400m
69 * device (scan, connect, disconnect...). This is sent to / received
70 * as control frames. These frames consist of a header and zero or
71 * more TLVs with information. We call each control frame a "message".
72 *
73 * Each message is composed of:
74 *
75 * HEADER
76 * [TLV0 + PAYLOAD0]
77 * [TLV1 + PAYLOAD1]
78 * [...]
79 * [TLVN + PAYLOADN]
80 *
81 * The HEADER is defined by 'struct i2400m_l3l4_hdr'. The payloads are
82 * defined by a TLV structure (Type Length Value) which is a 'header'
83 * (struct i2400m_tlv_hdr) and then the payload.
84 *
85 * All integers are represented as Little Endian.
86 *
87 * - REQUESTS AND EVENTS
88 *
89 * The requests can be clasified as follows:
90 *
91 * COMMAND: implies a request from the host to the device requesting
92 * an action being performed. The device will reply with a
93 * message (with the same type as the command), status and
94 * no (TLV) payload. Execution of a command might cause
95 * events (of different type) to be sent later on as
96 * device's state changes.
97 *
98 * GET/SET: similar to COMMAND, but will not cause other
99 * EVENTs. The reply, in the case of GET, will contain
100 * TLVs with the requested information.
101 *
102 * EVENT: asynchronous messages sent from the device, maybe as a
103 * consequence of previous COMMANDs but disassociated from
104 * them.
105 *
106 * Only one request might be pending at the same time (ie: don't
107 * parallelize nor post another GET request before the previous
108 * COMMAND has been acknowledged with it's corresponding reply by the
109 * device).
110 *
111 * The different requests and their formats are described below:
112 *
113 * I2400M_MT_* Message types
114 * I2400M_MS_* Message status (for replies, events)
115 * i2400m_tlv_* TLVs
116 *
117 * data types are named 'struct i2400m_msg_OPNAME', OPNAME matching the
118 * operation.
119 */
120
121#ifndef __LINUX__WIMAX__I2400M_H__
122#define __LINUX__WIMAX__I2400M_H__
123
124#include <linux/types.h>
125#include <linux/if_ether.h>
126
127/*
128 * Host Device Interface (HDI) common to all busses
129 */
130
131/* Boot-mode (firmware upload mode) commands */
132
133/* Header for the firmware file */
134struct i2400m_bcf_hdr {
135 __le32 module_type;
136 __le32 header_len;
137 __le32 header_version;
138 __le32 module_id;
139 __le32 module_vendor;
140 __le32 date; /* BCD YYYMMDD */
141 __le32 size; /* in dwords */
142 __le32 key_size; /* in dwords */
143 __le32 modulus_size; /* in dwords */
144 __le32 exponent_size; /* in dwords */
145 __u8 reserved[88];
146} __attribute__ ((packed));
147
148/* Boot mode opcodes */
149enum i2400m_brh_opcode {
150 I2400M_BRH_READ = 1,
151 I2400M_BRH_WRITE = 2,
152 I2400M_BRH_JUMP = 3,
153 I2400M_BRH_SIGNED_JUMP = 8,
154 I2400M_BRH_HASH_PAYLOAD_ONLY = 9,
155};
156
157/* Boot mode command masks and stuff */
158enum i2400m_brh {
159 I2400M_BRH_SIGNATURE = 0xcbbc0000,
160 I2400M_BRH_SIGNATURE_MASK = 0xffff0000,
161 I2400M_BRH_SIGNATURE_SHIFT = 16,
162 I2400M_BRH_OPCODE_MASK = 0x0000000f,
163 I2400M_BRH_RESPONSE_MASK = 0x000000f0,
164 I2400M_BRH_RESPONSE_SHIFT = 4,
165 I2400M_BRH_DIRECT_ACCESS = 0x00000400,
166 I2400M_BRH_RESPONSE_REQUIRED = 0x00000200,
167 I2400M_BRH_USE_CHECKSUM = 0x00000100,
168};
169
170
171/**
172 * i2400m_bootrom_header - Header for a boot-mode command
173 *
174 * @cmd: the above command descriptor
175 * @target_addr: where on the device memory should the action be performed.
176 * @data_size: for read/write, amount of data to be read/written
177 * @block_checksum: checksum value (if applicable)
178 * @payload: the beginning of data attached to this header
179 */
180struct i2400m_bootrom_header {
181 __le32 command; /* Compose with enum i2400_brh */
182 __le32 target_addr;
183 __le32 data_size;
184 __le32 block_checksum;
185 char payload[0];
186} __attribute__ ((packed));
187
188
189/*
190 * Data / control protocol
191 */
192
193/* Packet types for the host-device interface */
194enum i2400m_pt {
195 I2400M_PT_DATA = 0,
196 I2400M_PT_CTRL,
197 I2400M_PT_TRACE, /* For device debug */
198 I2400M_PT_RESET_WARM, /* device reset */
199 I2400M_PT_RESET_COLD, /* USB[transport] reset, like reconnect */
200 I2400M_PT_EDATA, /* Extended RX data */
201 I2400M_PT_ILLEGAL
202};
203
204
205/*
206 * Payload for a data packet
207 *
208 * This is prefixed to each and every outgoing DATA type.
209 */
210struct i2400m_pl_data_hdr {
211 __le32 reserved;
212} __attribute__((packed));
213
214
215/*
216 * Payload for an extended data packet
217 *
218 * New in fw v1.4
219 *
220 * @reorder: if this payload has to be reorder or not (and how)
221 * @cs: the type of data in the packet, as defined per (802.16e
222 * T11.13.19.1). Currently only 2 (IPv4 packet) supported.
223 *
224 * This is prefixed to each and every INCOMING DATA packet.
225 */
226struct i2400m_pl_edata_hdr {
227 __le32 reorder; /* bits defined in i2400m_ro */
228 __u8 cs;
229 __u8 reserved[11];
230} __attribute__((packed));
231
232enum i2400m_cs {
233 I2400M_CS_IPV4_0 = 0,
234 I2400M_CS_IPV4 = 2,
235};
236
237enum i2400m_ro {
238 I2400M_RO_NEEDED = 0x01,
239 I2400M_RO_TYPE = 0x03,
240 I2400M_RO_TYPE_SHIFT = 1,
241 I2400M_RO_CIN = 0x0f,
242 I2400M_RO_CIN_SHIFT = 4,
243 I2400M_RO_FBN = 0x07ff,
244 I2400M_RO_FBN_SHIFT = 8,
245 I2400M_RO_SN = 0x07ff,
246 I2400M_RO_SN_SHIFT = 21,
247};
248
249enum i2400m_ro_type {
250 I2400M_RO_TYPE_RESET = 0,
251 I2400M_RO_TYPE_PACKET,
252 I2400M_RO_TYPE_WS,
253 I2400M_RO_TYPE_PACKET_WS,
254};
255
256
257/* Misc constants */
258enum {
259 I2400M_PL_ALIGN = 16, /* Payload data size alignment */
260 I2400M_PL_SIZE_MAX = 0x3EFF,
261 I2400M_MAX_PLS_IN_MSG = 60,
262 /* protocol barkers: sync sequences; for notifications they
263 * are sent in groups of four. */
264 I2400M_H2D_PREVIEW_BARKER = 0xcafe900d,
265 I2400M_COLD_RESET_BARKER = 0xc01dc01d,
266 I2400M_WARM_RESET_BARKER = 0x50f750f7,
267 I2400M_NBOOT_BARKER = 0xdeadbeef,
268 I2400M_SBOOT_BARKER = 0x0ff1c1a1,
269 I2400M_SBOOT_BARKER_6050 = 0x80000001,
270 I2400M_ACK_BARKER = 0xfeedbabe,
271 I2400M_D2H_MSG_BARKER = 0xbeefbabe,
272};
273
274
275/*
276 * Hardware payload descriptor
277 *
278 * Bitfields encoded in a struct to enforce typing semantics.
279 *
280 * Look in rx.c and tx.c for a full description of the format.
281 */
282struct i2400m_pld {
283 __le32 val;
284} __attribute__ ((packed));
285
286#define I2400M_PLD_SIZE_MASK 0x00003fff
287#define I2400M_PLD_TYPE_SHIFT 16
288#define I2400M_PLD_TYPE_MASK 0x000f0000
289
290/*
291 * Header for a TX message or RX message
292 *
293 * @barker: preamble
294 * @size: used for management of the FIFO queue buffer; before
295 * sending, this is converted to be a real preamble. This
296 * indicates the real size of the TX message that starts at this
297 * point. If the highest bit is set, then this message is to be
298 * skipped.
299 * @sequence: sequence number of this message
300 * @offset: offset where the message itself starts -- see the comments
301 * in the file header about message header and payload descriptor
302 * alignment.
303 * @num_pls: number of payloads in this message
304 * @padding: amount of padding bytes at the end of the message to make
305 * it be of block-size aligned
306 *
307 * Look in rx.c and tx.c for a full description of the format.
308 */
309struct i2400m_msg_hdr {
310 union {
311 __le32 barker;
312 __u32 size; /* same size type as barker!! */
313 };
314 union {
315 __le32 sequence;
316 __u32 offset; /* same size type as barker!! */
317 };
318 __le16 num_pls;
319 __le16 rsv1;
320 __le16 padding;
321 __le16 rsv2;
322 struct i2400m_pld pld[0];
323} __attribute__ ((packed));
324
325
326
327/*
328 * L3/L4 control protocol
329 */
330
331enum {
332 /* Interface version */
333 I2400M_L3L4_VERSION = 0x0100,
334};
335
336/* Message types */
337enum i2400m_mt {
338 I2400M_MT_RESERVED = 0x0000,
339 I2400M_MT_INVALID = 0xffff,
340 I2400M_MT_REPORT_MASK = 0x8000,
341
342 I2400M_MT_GET_SCAN_RESULT = 0x4202,
343 I2400M_MT_SET_SCAN_PARAM = 0x4402,
344 I2400M_MT_CMD_RF_CONTROL = 0x4602,
345 I2400M_MT_CMD_SCAN = 0x4603,
346 I2400M_MT_CMD_CONNECT = 0x4604,
347 I2400M_MT_CMD_DISCONNECT = 0x4605,
348 I2400M_MT_CMD_EXIT_IDLE = 0x4606,
349 I2400M_MT_GET_LM_VERSION = 0x5201,
350 I2400M_MT_GET_DEVICE_INFO = 0x5202,
351 I2400M_MT_GET_LINK_STATUS = 0x5203,
352 I2400M_MT_GET_STATISTICS = 0x5204,
353 I2400M_MT_GET_STATE = 0x5205,
354 I2400M_MT_GET_MEDIA_STATUS = 0x5206,
355 I2400M_MT_SET_INIT_CONFIG = 0x5404,
356 I2400M_MT_CMD_INIT = 0x5601,
357 I2400M_MT_CMD_TERMINATE = 0x5602,
358 I2400M_MT_CMD_MODE_OF_OP = 0x5603,
359 I2400M_MT_CMD_RESET_DEVICE = 0x5604,
360 I2400M_MT_CMD_MONITOR_CONTROL = 0x5605,
361 I2400M_MT_CMD_ENTER_POWERSAVE = 0x5606,
362 I2400M_MT_GET_TLS_OPERATION_RESULT = 0x6201,
363 I2400M_MT_SET_EAP_SUCCESS = 0x6402,
364 I2400M_MT_SET_EAP_FAIL = 0x6403,
365 I2400M_MT_SET_EAP_KEY = 0x6404,
366 I2400M_MT_CMD_SEND_EAP_RESPONSE = 0x6602,
367 I2400M_MT_REPORT_SCAN_RESULT = 0xc002,
368 I2400M_MT_REPORT_STATE = 0xd002,
369 I2400M_MT_REPORT_POWERSAVE_READY = 0xd005,
370 I2400M_MT_REPORT_EAP_REQUEST = 0xe002,
371 I2400M_MT_REPORT_EAP_RESTART = 0xe003,
372 I2400M_MT_REPORT_ALT_ACCEPT = 0xe004,
373 I2400M_MT_REPORT_KEY_REQUEST = 0xe005,
374};
375
376
377/*
378 * Message Ack Status codes
379 *
380 * When a message is replied-to, this status is reported.
381 */
382enum i2400m_ms {
383 I2400M_MS_DONE_OK = 0,
384 I2400M_MS_DONE_IN_PROGRESS = 1,
385 I2400M_MS_INVALID_OP = 2,
386 I2400M_MS_BAD_STATE = 3,
387 I2400M_MS_ILLEGAL_VALUE = 4,
388 I2400M_MS_MISSING_PARAMS = 5,
389 I2400M_MS_VERSION_ERROR = 6,
390 I2400M_MS_ACCESSIBILITY_ERROR = 7,
391 I2400M_MS_BUSY = 8,
392 I2400M_MS_CORRUPTED_TLV = 9,
393 I2400M_MS_UNINITIALIZED = 10,
394 I2400M_MS_UNKNOWN_ERROR = 11,
395 I2400M_MS_PRODUCTION_ERROR = 12,
396 I2400M_MS_NO_RF = 13,
397 I2400M_MS_NOT_READY_FOR_POWERSAVE = 14,
398 I2400M_MS_THERMAL_CRITICAL = 15,
399 I2400M_MS_MAX
400};
401
402
403/**
404 * i2400m_tlv - enumeration of the different types of TLVs
405 *
406 * TLVs stand for type-length-value and are the header for a payload
407 * composed of almost anything. Each payload has a type assigned
408 * and a length.
409 */
410enum i2400m_tlv {
411 I2400M_TLV_L4_MESSAGE_VERSIONS = 129,
412 I2400M_TLV_SYSTEM_STATE = 141,
413 I2400M_TLV_MEDIA_STATUS = 161,
414 I2400M_TLV_RF_OPERATION = 162,
415 I2400M_TLV_RF_STATUS = 163,
416 I2400M_TLV_DEVICE_RESET_TYPE = 132,
417 I2400M_TLV_CONFIG_IDLE_PARAMETERS = 601,
418 I2400M_TLV_CONFIG_IDLE_TIMEOUT = 611,
419 I2400M_TLV_CONFIG_D2H_DATA_FORMAT = 614,
420 I2400M_TLV_CONFIG_DL_HOST_REORDER = 615,
421};
422
423
424struct i2400m_tlv_hdr {
425 __le16 type;
426 __le16 length; /* payload's */
427 __u8 pl[0];
428} __attribute__((packed));
429
430
431struct i2400m_l3l4_hdr {
432 __le16 type;
433 __le16 length; /* payload's */
434 __le16 version;
435 __le16 resv1;
436 __le16 status;
437 __le16 resv2;
438 struct i2400m_tlv_hdr pl[0];
439} __attribute__((packed));
440
441
442/**
443 * i2400m_system_state - different states of the device
444 */
445enum i2400m_system_state {
446 I2400M_SS_UNINITIALIZED = 1,
447 I2400M_SS_INIT,
448 I2400M_SS_READY,
449 I2400M_SS_SCAN,
450 I2400M_SS_STANDBY,
451 I2400M_SS_CONNECTING,
452 I2400M_SS_WIMAX_CONNECTED,
453 I2400M_SS_DATA_PATH_CONNECTED,
454 I2400M_SS_IDLE,
455 I2400M_SS_DISCONNECTING,
456 I2400M_SS_OUT_OF_ZONE,
457 I2400M_SS_SLEEPACTIVE,
458 I2400M_SS_PRODUCTION,
459 I2400M_SS_CONFIG,
460 I2400M_SS_RF_OFF,
461 I2400M_SS_RF_SHUTDOWN,
462 I2400M_SS_DEVICE_DISCONNECT,
463 I2400M_SS_MAX,
464};
465
466
467/**
468 * i2400m_tlv_system_state - report on the state of the system
469 *
470 * @state: see enum i2400m_system_state
471 */
472struct i2400m_tlv_system_state {
473 struct i2400m_tlv_hdr hdr;
474 __le32 state;
475} __attribute__((packed));
476
477
478struct i2400m_tlv_l4_message_versions {
479 struct i2400m_tlv_hdr hdr;
480 __le16 major;
481 __le16 minor;
482 __le16 branch;
483 __le16 reserved;
484} __attribute__((packed));
485
486
487struct i2400m_tlv_detailed_device_info {
488 struct i2400m_tlv_hdr hdr;
489 __u8 reserved1[400];
490 __u8 mac_address[ETH_ALEN];
491 __u8 reserved2[2];
492} __attribute__((packed));
493
494
495enum i2400m_rf_switch_status {
496 I2400M_RF_SWITCH_ON = 1,
497 I2400M_RF_SWITCH_OFF = 2,
498};
499
500struct i2400m_tlv_rf_switches_status {
501 struct i2400m_tlv_hdr hdr;
502 __u8 sw_rf_switch; /* 1 ON, 2 OFF */
503 __u8 hw_rf_switch; /* 1 ON, 2 OFF */
504 __u8 reserved[2];
505} __attribute__((packed));
506
507
508enum {
509 i2400m_rf_operation_on = 1,
510 i2400m_rf_operation_off = 2
511};
512
513struct i2400m_tlv_rf_operation {
514 struct i2400m_tlv_hdr hdr;
515 __le32 status; /* 1 ON, 2 OFF */
516} __attribute__((packed));
517
518
519enum i2400m_tlv_reset_type {
520 I2400M_RESET_TYPE_COLD = 1,
521 I2400M_RESET_TYPE_WARM
522};
523
524struct i2400m_tlv_device_reset_type {
525 struct i2400m_tlv_hdr hdr;
526 __le32 reset_type;
527} __attribute__((packed));
528
529
530struct i2400m_tlv_config_idle_parameters {
531 struct i2400m_tlv_hdr hdr;
532 __le32 idle_timeout; /* 100 to 300000 ms [5min], 100 increments
533 * 0 disabled */
534 __le32 idle_paging_interval; /* frames */
535} __attribute__((packed));
536
537
538enum i2400m_media_status {
539 I2400M_MEDIA_STATUS_LINK_UP = 1,
540 I2400M_MEDIA_STATUS_LINK_DOWN,
541 I2400M_MEDIA_STATUS_LINK_RENEW,
542};
543
544struct i2400m_tlv_media_status {
545 struct i2400m_tlv_hdr hdr;
546 __le32 media_status;
547} __attribute__((packed));
548
549
550/* New in v1.4 */
551struct i2400m_tlv_config_idle_timeout {
552 struct i2400m_tlv_hdr hdr;
553 __le32 timeout; /* 100 to 300000 ms [5min], 100 increments
554 * 0 disabled */
555} __attribute__((packed));
556
557/* New in v1.4 -- for backward compat, will be removed */
558struct i2400m_tlv_config_d2h_data_format {
559 struct i2400m_tlv_hdr hdr;
560 __u8 format; /* 0 old format, 1 enhanced */
561 __u8 reserved[3];
562} __attribute__((packed));
563
564/* New in v1.4 */
565struct i2400m_tlv_config_dl_host_reorder {
566 struct i2400m_tlv_hdr hdr;
567 __u8 reorder; /* 0 disabled, 1 enabled */
568 __u8 reserved[3];
569} __attribute__((packed));
570
571
572#endif /* #ifndef __LINUX__WIMAX__I2400M_H__ */