1 /* 2 * This header file contains definition for global types 3 */ 4 #ifndef _LBS_TYPES_H_ 5 #define _LBS_TYPES_H_ 6 7 #include <linux/if_ether.h> 8 #include <linux/ieee80211.h> 9 #include <asm/byteorder.h> 10 11 struct ieee_ie_header { 12 u8 id; 13 u8 len; 14 } __packed; 15 16 struct ieee_ie_cf_param_set { 17 struct ieee_ie_header header; 18 19 u8 cfpcnt; 20 u8 cfpperiod; 21 __le16 cfpmaxduration; 22 __le16 cfpdurationremaining; 23 } __packed; 24 25 26 struct ieee_ie_ibss_param_set { 27 struct ieee_ie_header header; 28 29 __le16 atimwindow; 30 } __packed; 31 32 union ieee_ss_param_set { 33 struct ieee_ie_cf_param_set cf; 34 struct ieee_ie_ibss_param_set ibss; 35 } __packed; 36 37 struct ieee_ie_fh_param_set { 38 struct ieee_ie_header header; 39 40 __le16 dwelltime; 41 u8 hopset; 42 u8 hoppattern; 43 u8 hopindex; 44 } __packed; 45 46 struct ieee_ie_ds_param_set { 47 struct ieee_ie_header header; 48 49 u8 channel; 50 } __packed; 51 52 union ieee_phy_param_set { 53 struct ieee_ie_fh_param_set fh; 54 struct ieee_ie_ds_param_set ds; 55 } __packed; 56 57 /* TLV type ID definition */ 58 #define PROPRIETARY_TLV_BASE_ID 0x0100 59 60 /* Terminating TLV type */ 61 #define MRVL_TERMINATE_TLV_ID 0xffff 62 63 #define TLV_TYPE_SSID 0x0000 64 #define TLV_TYPE_RATES 0x0001 65 #define TLV_TYPE_PHY_FH 0x0002 66 #define TLV_TYPE_PHY_DS 0x0003 67 #define TLV_TYPE_CF 0x0004 68 #define TLV_TYPE_IBSS 0x0006 69 70 #define TLV_TYPE_DOMAIN 0x0007 71 72 #define TLV_TYPE_POWER_CAPABILITY 0x0021 73 74 #define TLV_TYPE_KEY_MATERIAL (PROPRIETARY_TLV_BASE_ID + 0) 75 #define TLV_TYPE_CHANLIST (PROPRIETARY_TLV_BASE_ID + 1) 76 #define TLV_TYPE_NUMPROBES (PROPRIETARY_TLV_BASE_ID + 2) 77 #define TLV_TYPE_RSSI_LOW (PROPRIETARY_TLV_BASE_ID + 4) 78 #define TLV_TYPE_SNR_LOW (PROPRIETARY_TLV_BASE_ID + 5) 79 #define TLV_TYPE_FAILCOUNT (PROPRIETARY_TLV_BASE_ID + 6) 80 #define TLV_TYPE_BCNMISS (PROPRIETARY_TLV_BASE_ID + 7) 81 #define TLV_TYPE_LED_GPIO (PROPRIETARY_TLV_BASE_ID + 8) 82 #define TLV_TYPE_LEDBEHAVIOR (PROPRIETARY_TLV_BASE_ID + 9) 83 #define TLV_TYPE_PASSTHROUGH (PROPRIETARY_TLV_BASE_ID + 10) 84 #define TLV_TYPE_REASSOCAP (PROPRIETARY_TLV_BASE_ID + 11) 85 #define TLV_TYPE_POWER_TBL_2_4GHZ (PROPRIETARY_TLV_BASE_ID + 12) 86 #define TLV_TYPE_POWER_TBL_5GHZ (PROPRIETARY_TLV_BASE_ID + 13) 87 #define TLV_TYPE_BCASTPROBE (PROPRIETARY_TLV_BASE_ID + 14) 88 #define TLV_TYPE_NUMSSID_PROBE (PROPRIETARY_TLV_BASE_ID + 15) 89 #define TLV_TYPE_WMMQSTATUS (PROPRIETARY_TLV_BASE_ID + 16) 90 #define TLV_TYPE_CRYPTO_DATA (PROPRIETARY_TLV_BASE_ID + 17) 91 #define TLV_TYPE_WILDCARDSSID (PROPRIETARY_TLV_BASE_ID + 18) 92 #define TLV_TYPE_TSFTIMESTAMP (PROPRIETARY_TLV_BASE_ID + 19) 93 #define TLV_TYPE_RSSI_HIGH (PROPRIETARY_TLV_BASE_ID + 22) 94 #define TLV_TYPE_SNR_HIGH (PROPRIETARY_TLV_BASE_ID + 23) 95 #define TLV_TYPE_AUTH_TYPE (PROPRIETARY_TLV_BASE_ID + 31) 96 #define TLV_TYPE_MESH_ID (PROPRIETARY_TLV_BASE_ID + 37) 97 #define TLV_TYPE_OLD_MESH_ID (PROPRIETARY_TLV_BASE_ID + 291) 98 99 /* TLV related data structures */ 100 struct mrvl_ie_header { 101 __le16 type; 102 __le16 len; 103 } __packed; 104 105 struct mrvl_ie_data { 106 struct mrvl_ie_header header; 107 u8 Data[1]; 108 } __packed; 109 110 struct mrvl_ie_rates_param_set { 111 struct mrvl_ie_header header; 112 u8 rates[1]; 113 } __packed; 114 115 struct mrvl_ie_ssid_param_set { 116 struct mrvl_ie_header header; 117 u8 ssid[1]; 118 } __packed; 119 120 struct mrvl_ie_wildcard_ssid_param_set { 121 struct mrvl_ie_header header; 122 u8 MaxSsidlength; 123 u8 ssid[1]; 124 } __packed; 125 126 struct chanscanmode { 127 #ifdef __BIG_ENDIAN_BITFIELD 128 u8 reserved_2_7:6; 129 u8 disablechanfilt:1; 130 u8 passivescan:1; 131 #else 132 u8 passivescan:1; 133 u8 disablechanfilt:1; 134 u8 reserved_2_7:6; 135 #endif 136 } __packed; 137 138 struct chanscanparamset { 139 u8 radiotype; 140 u8 channumber; 141 struct chanscanmode chanscanmode; 142 __le16 minscantime; 143 __le16 maxscantime; 144 } __packed; 145 146 struct mrvl_ie_chanlist_param_set { 147 struct mrvl_ie_header header; 148 struct chanscanparamset chanscanparam[1]; 149 } __packed; 150 151 struct mrvl_ie_cf_param_set { 152 struct mrvl_ie_header header; 153 u8 cfpcnt; 154 u8 cfpperiod; 155 __le16 cfpmaxduration; 156 __le16 cfpdurationremaining; 157 } __packed; 158 159 struct mrvl_ie_ds_param_set { 160 struct mrvl_ie_header header; 161 u8 channel; 162 } __packed; 163 164 struct mrvl_ie_rsn_param_set { 165 struct mrvl_ie_header header; 166 u8 rsnie[1]; 167 } __packed; 168 169 struct mrvl_ie_tsf_timestamp { 170 struct mrvl_ie_header header; 171 __le64 tsftable[1]; 172 } __packed; 173 174 /* v9 and later firmware only */ 175 struct mrvl_ie_auth_type { 176 struct mrvl_ie_header header; 177 __le16 auth; 178 } __packed; 179 180 /* Local Power capability */ 181 struct mrvl_ie_power_capability { 182 struct mrvl_ie_header header; 183 s8 minpower; 184 s8 maxpower; 185 } __packed; 186 187 /* used in CMD_802_11_SUBSCRIBE_EVENT for SNR, RSSI and Failure */ 188 struct mrvl_ie_thresholds { 189 struct mrvl_ie_header header; 190 u8 value; 191 u8 freq; 192 } __packed; 193 194 struct mrvl_ie_beacons_missed { 195 struct mrvl_ie_header header; 196 u8 beaconmissed; 197 u8 reserved; 198 } __packed; 199 200 struct mrvl_ie_num_probes { 201 struct mrvl_ie_header header; 202 __le16 numprobes; 203 } __packed; 204 205 struct mrvl_ie_bcast_probe { 206 struct mrvl_ie_header header; 207 __le16 bcastprobe; 208 } __packed; 209 210 struct mrvl_ie_num_ssid_probe { 211 struct mrvl_ie_header header; 212 __le16 numssidprobe; 213 } __packed; 214 215 struct led_pin { 216 u8 led; 217 u8 pin; 218 } __packed; 219 220 struct mrvl_ie_ledgpio { 221 struct mrvl_ie_header header; 222 struct led_pin ledpin[1]; 223 } __packed; 224 225 struct led_bhv { 226 uint8_t firmwarestate; 227 uint8_t led; 228 uint8_t ledstate; 229 uint8_t ledarg; 230 } __packed; 231 232 233 struct mrvl_ie_ledbhv { 234 struct mrvl_ie_header header; 235 struct led_bhv ledbhv[1]; 236 } __packed; 237 238 /* 239 * Meant to be packed as the value member of a struct ieee80211_info_element. 240 * Note that the len member of the ieee80211_info_element varies depending on 241 * the mesh_id_len 242 */ 243 struct mrvl_meshie_val { 244 uint8_t oui[3]; 245 uint8_t type; 246 uint8_t subtype; 247 uint8_t version; 248 uint8_t active_protocol_id; 249 uint8_t active_metric_id; 250 uint8_t mesh_capability; 251 uint8_t mesh_id_len; 252 uint8_t mesh_id[IEEE80211_MAX_SSID_LEN]; 253 } __packed; 254 255 struct mrvl_meshie { 256 u8 id, len; 257 struct mrvl_meshie_val val; 258 } __packed; 259 260 struct mrvl_mesh_defaults { 261 __le32 bootflag; 262 uint8_t boottime; 263 uint8_t reserved; 264 __le16 channel; 265 struct mrvl_meshie meshie; 266 } __packed; 267 268 #endif 269