1 /* 2 * This header was generated from the Linux kernel headers by update_headers.py, 3 * to provide necessary information from kernel to userspace, such as constants, 4 * structures, and macros, and thus, contains no copyrightable information. 5 */ 6 #ifndef __LINUX__WIMAX__I2400M_H__ 7 #define __LINUX__WIMAX__I2400M_H__ 8 #include <linux/types.h> 9 #include <linux/if_ether.h> 10 struct i2400m_bcf_hdr { 11 __le32 module_type; 12 __le32 header_len; 13 __le32 header_version; 14 __le32 module_id; 15 __le32 module_vendor; 16 __le32 date; 17 __le32 size; 18 __le32 key_size; 19 __le32 modulus_size; 20 __le32 exponent_size; 21 __u8 reserved[88]; 22 } __attribute__ ((packed)); 23 enum i2400m_brh_opcode { 24 I2400M_BRH_READ = 1, 25 I2400M_BRH_WRITE = 2, 26 I2400M_BRH_JUMP = 3, 27 I2400M_BRH_SIGNED_JUMP = 8, 28 I2400M_BRH_HASH_PAYLOAD_ONLY = 9, 29 }; 30 enum i2400m_brh { 31 I2400M_BRH_SIGNATURE = 0xcbbc0000, 32 I2400M_BRH_SIGNATURE_MASK = 0xffff0000, 33 I2400M_BRH_SIGNATURE_SHIFT = 16, 34 I2400M_BRH_OPCODE_MASK = 0x0000000f, 35 I2400M_BRH_RESPONSE_MASK = 0x000000f0, 36 I2400M_BRH_RESPONSE_SHIFT = 4, 37 I2400M_BRH_DIRECT_ACCESS = 0x00000400, 38 I2400M_BRH_RESPONSE_REQUIRED = 0x00000200, 39 I2400M_BRH_USE_CHECKSUM = 0x00000100, 40 }; 41 struct i2400m_bootrom_header { 42 __le32 command; 43 __le32 target_addr; 44 __le32 data_size; 45 __le32 block_checksum; 46 char payload[0]; 47 } __attribute__ ((packed)); 48 enum i2400m_pt { 49 I2400M_PT_DATA = 0, 50 I2400M_PT_CTRL, 51 I2400M_PT_TRACE, 52 I2400M_PT_RESET_WARM, 53 I2400M_PT_RESET_COLD, 54 I2400M_PT_EDATA, 55 I2400M_PT_ILLEGAL 56 }; 57 struct i2400m_pl_data_hdr { 58 __le32 reserved; 59 } __attribute__((packed)); 60 struct i2400m_pl_edata_hdr { 61 __le32 reorder; 62 __u8 cs; 63 __u8 reserved[11]; 64 } __attribute__((packed)); 65 enum i2400m_cs { 66 I2400M_CS_IPV4_0 = 0, 67 I2400M_CS_IPV4 = 2, 68 }; 69 enum i2400m_ro { 70 I2400M_RO_NEEDED = 0x01, 71 I2400M_RO_TYPE = 0x03, 72 I2400M_RO_TYPE_SHIFT = 1, 73 I2400M_RO_CIN = 0x0f, 74 I2400M_RO_CIN_SHIFT = 4, 75 I2400M_RO_FBN = 0x07ff, 76 I2400M_RO_FBN_SHIFT = 8, 77 I2400M_RO_SN = 0x07ff, 78 I2400M_RO_SN_SHIFT = 21, 79 }; 80 enum i2400m_ro_type { 81 I2400M_RO_TYPE_RESET = 0, 82 I2400M_RO_TYPE_PACKET, 83 I2400M_RO_TYPE_WS, 84 I2400M_RO_TYPE_PACKET_WS, 85 }; 86 enum { 87 I2400M_PL_ALIGN = 16, 88 I2400M_PL_SIZE_MAX = 0x3EFF, 89 I2400M_MAX_PLS_IN_MSG = 60, 90 91 I2400M_H2D_PREVIEW_BARKER = 0xcafe900d, 92 I2400M_COLD_RESET_BARKER = 0xc01dc01d, 93 I2400M_WARM_RESET_BARKER = 0x50f750f7, 94 I2400M_NBOOT_BARKER = 0xdeadbeef, 95 I2400M_SBOOT_BARKER = 0x0ff1c1a1, 96 I2400M_SBOOT_BARKER_6050 = 0x80000001, 97 I2400M_ACK_BARKER = 0xfeedbabe, 98 I2400M_D2H_MSG_BARKER = 0xbeefbabe, 99 }; 100 struct i2400m_pld { 101 __le32 val; 102 } __attribute__ ((packed)); 103 #define I2400M_PLD_SIZE_MASK 0x00003fff 104 #define I2400M_PLD_TYPE_SHIFT 16 105 #define I2400M_PLD_TYPE_MASK 0x000f0000 106 struct i2400m_msg_hdr { 107 union { 108 __le32 barker; 109 __u32 size; 110 }; 111 union { 112 __le32 sequence; 113 __u32 offset; 114 }; 115 __le16 num_pls; 116 __le16 rsv1; 117 __le16 padding; 118 __le16 rsv2; 119 struct i2400m_pld pld[0]; 120 } __attribute__ ((packed)); 121 enum { 122 123 I2400M_L3L4_VERSION = 0x0100, 124 }; 125 enum i2400m_mt { 126 I2400M_MT_RESERVED = 0x0000, 127 I2400M_MT_INVALID = 0xffff, 128 I2400M_MT_REPORT_MASK = 0x8000, 129 I2400M_MT_GET_SCAN_RESULT = 0x4202, 130 I2400M_MT_SET_SCAN_PARAM = 0x4402, 131 I2400M_MT_CMD_RF_CONTROL = 0x4602, 132 I2400M_MT_CMD_SCAN = 0x4603, 133 I2400M_MT_CMD_CONNECT = 0x4604, 134 I2400M_MT_CMD_DISCONNECT = 0x4605, 135 I2400M_MT_CMD_EXIT_IDLE = 0x4606, 136 I2400M_MT_GET_LM_VERSION = 0x5201, 137 I2400M_MT_GET_DEVICE_INFO = 0x5202, 138 I2400M_MT_GET_LINK_STATUS = 0x5203, 139 I2400M_MT_GET_STATISTICS = 0x5204, 140 I2400M_MT_GET_STATE = 0x5205, 141 I2400M_MT_GET_MEDIA_STATUS = 0x5206, 142 I2400M_MT_SET_INIT_CONFIG = 0x5404, 143 I2400M_MT_CMD_INIT = 0x5601, 144 I2400M_MT_CMD_TERMINATE = 0x5602, 145 I2400M_MT_CMD_MODE_OF_OP = 0x5603, 146 I2400M_MT_CMD_RESET_DEVICE = 0x5604, 147 I2400M_MT_CMD_MONITOR_CONTROL = 0x5605, 148 I2400M_MT_CMD_ENTER_POWERSAVE = 0x5606, 149 I2400M_MT_GET_TLS_OPERATION_RESULT = 0x6201, 150 I2400M_MT_SET_EAP_SUCCESS = 0x6402, 151 I2400M_MT_SET_EAP_FAIL = 0x6403, 152 I2400M_MT_SET_EAP_KEY = 0x6404, 153 I2400M_MT_CMD_SEND_EAP_RESPONSE = 0x6602, 154 I2400M_MT_REPORT_SCAN_RESULT = 0xc002, 155 I2400M_MT_REPORT_STATE = 0xd002, 156 I2400M_MT_REPORT_POWERSAVE_READY = 0xd005, 157 I2400M_MT_REPORT_EAP_REQUEST = 0xe002, 158 I2400M_MT_REPORT_EAP_RESTART = 0xe003, 159 I2400M_MT_REPORT_ALT_ACCEPT = 0xe004, 160 I2400M_MT_REPORT_KEY_REQUEST = 0xe005, 161 }; 162 enum i2400m_ms { 163 I2400M_MS_DONE_OK = 0, 164 I2400M_MS_DONE_IN_PROGRESS = 1, 165 I2400M_MS_INVALID_OP = 2, 166 I2400M_MS_BAD_STATE = 3, 167 I2400M_MS_ILLEGAL_VALUE = 4, 168 I2400M_MS_MISSING_PARAMS = 5, 169 I2400M_MS_VERSION_ERROR = 6, 170 I2400M_MS_ACCESSIBILITY_ERROR = 7, 171 I2400M_MS_BUSY = 8, 172 I2400M_MS_CORRUPTED_TLV = 9, 173 I2400M_MS_UNINITIALIZED = 10, 174 I2400M_MS_UNKNOWN_ERROR = 11, 175 I2400M_MS_PRODUCTION_ERROR = 12, 176 I2400M_MS_NO_RF = 13, 177 I2400M_MS_NOT_READY_FOR_POWERSAVE = 14, 178 I2400M_MS_THERMAL_CRITICAL = 15, 179 I2400M_MS_MAX 180 }; 181 enum i2400m_tlv { 182 I2400M_TLV_L4_MESSAGE_VERSIONS = 129, 183 I2400M_TLV_SYSTEM_STATE = 141, 184 I2400M_TLV_MEDIA_STATUS = 161, 185 I2400M_TLV_RF_OPERATION = 162, 186 I2400M_TLV_RF_STATUS = 163, 187 I2400M_TLV_DEVICE_RESET_TYPE = 132, 188 I2400M_TLV_CONFIG_IDLE_PARAMETERS = 601, 189 I2400M_TLV_CONFIG_IDLE_TIMEOUT = 611, 190 I2400M_TLV_CONFIG_D2H_DATA_FORMAT = 614, 191 I2400M_TLV_CONFIG_DL_HOST_REORDER = 615, 192 }; 193 struct i2400m_tlv_hdr { 194 __le16 type; 195 __le16 length; 196 __u8 pl[0]; 197 } __attribute__((packed)); 198 struct i2400m_l3l4_hdr { 199 __le16 type; 200 __le16 length; 201 __le16 version; 202 __le16 resv1; 203 __le16 status; 204 __le16 resv2; 205 struct i2400m_tlv_hdr pl[0]; 206 } __attribute__((packed)); 207 enum i2400m_system_state { 208 I2400M_SS_UNINITIALIZED = 1, 209 I2400M_SS_INIT, 210 I2400M_SS_READY, 211 I2400M_SS_SCAN, 212 I2400M_SS_STANDBY, 213 I2400M_SS_CONNECTING, 214 I2400M_SS_WIMAX_CONNECTED, 215 I2400M_SS_DATA_PATH_CONNECTED, 216 I2400M_SS_IDLE, 217 I2400M_SS_DISCONNECTING, 218 I2400M_SS_OUT_OF_ZONE, 219 I2400M_SS_SLEEPACTIVE, 220 I2400M_SS_PRODUCTION, 221 I2400M_SS_CONFIG, 222 I2400M_SS_RF_OFF, 223 I2400M_SS_RF_SHUTDOWN, 224 I2400M_SS_DEVICE_DISCONNECT, 225 I2400M_SS_MAX, 226 }; 227 struct i2400m_tlv_system_state { 228 struct i2400m_tlv_hdr hdr; 229 __le32 state; 230 } __attribute__((packed)); 231 struct i2400m_tlv_l4_message_versions { 232 struct i2400m_tlv_hdr hdr; 233 __le16 major; 234 __le16 minor; 235 __le16 branch; 236 __le16 reserved; 237 } __attribute__((packed)); 238 struct i2400m_tlv_detailed_device_info { 239 struct i2400m_tlv_hdr hdr; 240 __u8 reserved1[400]; 241 __u8 mac_address[ETH_ALEN]; 242 __u8 reserved2[2]; 243 } __attribute__((packed)); 244 enum i2400m_rf_switch_status { 245 I2400M_RF_SWITCH_ON = 1, 246 I2400M_RF_SWITCH_OFF = 2, 247 }; 248 struct i2400m_tlv_rf_switches_status { 249 struct i2400m_tlv_hdr hdr; 250 __u8 sw_rf_switch; 251 __u8 hw_rf_switch; 252 __u8 reserved[2]; 253 } __attribute__((packed)); 254 enum { 255 i2400m_rf_operation_on = 1, 256 i2400m_rf_operation_off = 2 257 }; 258 struct i2400m_tlv_rf_operation { 259 struct i2400m_tlv_hdr hdr; 260 __le32 status; 261 } __attribute__((packed)); 262 enum i2400m_tlv_reset_type { 263 I2400M_RESET_TYPE_COLD = 1, 264 I2400M_RESET_TYPE_WARM 265 }; 266 struct i2400m_tlv_device_reset_type { 267 struct i2400m_tlv_hdr hdr; 268 __le32 reset_type; 269 } __attribute__((packed)); 270 struct i2400m_tlv_config_idle_parameters { 271 struct i2400m_tlv_hdr hdr; 272 __le32 idle_timeout; 273 __le32 idle_paging_interval; 274 } __attribute__((packed)); 275 enum i2400m_media_status { 276 I2400M_MEDIA_STATUS_LINK_UP = 1, 277 I2400M_MEDIA_STATUS_LINK_DOWN, 278 I2400M_MEDIA_STATUS_LINK_RENEW, 279 }; 280 struct i2400m_tlv_media_status { 281 struct i2400m_tlv_hdr hdr; 282 __le32 media_status; 283 } __attribute__((packed)); 284 struct i2400m_tlv_config_idle_timeout { 285 struct i2400m_tlv_hdr hdr; 286 __le32 timeout; 287 } __attribute__((packed)); 288 struct i2400m_tlv_config_d2h_data_format { 289 struct i2400m_tlv_hdr hdr; 290 __u8 format; 291 __u8 reserved[3]; 292 } __attribute__((packed)); 293 struct i2400m_tlv_config_dl_host_reorder { 294 struct i2400m_tlv_hdr hdr; 295 __u8 reorder; 296 __u8 reserved[3]; 297 } __attribute__((packed)); 298 #endif 299