1 /* 2 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 * Description: driver_soc_common.header 15 */ 16 17 #ifndef __DRIVER_SOC_COMMON_H__ 18 #define __DRIVER_SOC_COMMON_H__ 19 20 /***************************************************************************** 21 1 Other header files included 22 *****************************************************************************/ 23 #include "wifi_api.h" 24 #ifdef CONFIG_MESH 25 #include "soc_wifi_mesh_api.h" 26 #endif /* LOS_CONFIG_MESH */ 27 28 #ifdef __cplusplus 29 #if __cplusplus 30 extern "C" { 31 #endif 32 #endif 33 34 /***************************************************************************** 35 2 Basic data type definitions 36 *****************************************************************************/ 37 typedef char int8; 38 typedef signed short int16; 39 typedef signed int int32; 40 typedef unsigned char uint8; 41 typedef unsigned short uint16; 42 typedef unsigned int uint32; 43 44 /******************************************************************************* 45 Uncertain length, 32bits on 32-bit machine, 64bits on 64-bit machine 46 *******************************************************************************/ 47 typedef signed long long int64; 48 typedef unsigned long long uint64; 49 50 /***************************************************************************** 51 3 Macro definition 52 *****************************************************************************/ 53 #define OAL_STATIC static 54 #define OAL_VOLATILE volatile 55 #ifdef INLINE_TO_FORCEINLINE 56 #define OAL_INLINE __forceinline 57 #else 58 #define OAL_INLINE inline 59 #endif 60 61 #define EXT_SUCC 0 62 #define EXT_EFAIL 1 63 #define EXT_EINVAL 22 64 65 #ifndef ETH_ADDR_LEN 66 #define ETH_ADDR_LEN 6 67 #endif 68 69 #ifndef MAX_SSID_LEN 70 #define MAX_SSID_LEN 32 71 #endif 72 73 #ifndef EXT_MAX_NR_CIPHER_SUITES 74 #define EXT_MAX_NR_CIPHER_SUITES 5 75 #endif 76 77 #ifndef IFNAMSIZ 78 #define IFNAMSIZ 16 79 #endif 80 81 #ifndef EXT_MAX_NR_AKM_SUITES 82 #define EXT_MAX_NR_AKM_SUITES 2 83 #endif 84 85 #ifndef EXT_PTR_NULL 86 #define EXT_PTR_NULL NULL 87 #endif 88 89 #ifndef SCAN_AP_LIMIT 90 #define SCAN_AP_LIMIT 64 91 #endif 92 93 #ifndef NETDEV_UP 94 #define NETDEV_UP 0x0001 95 #endif 96 #ifndef NETDEV_DOWN 97 #define NETDEV_DOWN 0x0002 98 #endif 99 100 #ifndef NOTIFY_DONE 101 #define NOTIFY_DONE 0x0000 102 #endif 103 104 #ifdef _PRE_WLAN_FEATURE_REKEY_OFFLOAD 105 #define EXT_REKEY_OFFLOAD_KCK_LEN 16 106 #define EXT_REKEY_OFFLOAD_KEK_LEN 16 107 #define EXT_REKEY_OFFLOAD_REPLAY_COUNTER_LEN 8 108 #endif 109 /***************************************************************************** 110 4 Enum definition 111 *****************************************************************************/ 112 typedef enum { 113 EXT_FALSE = 0, 114 EXT_TRUE = 1, 115 116 EXT_BUTT 117 } ext_bool_enum; 118 typedef uint8 ext_bool_enum_uint8; 119 120 #define EXT_KEYTYPE_DEFAULT_INVALID (-1) 121 typedef uint8 ext_iftype_enum_uint8; 122 123 typedef enum { 124 EXT_KEYTYPE_GROUP, 125 EXT_KEYTYPE_PAIRWISE, 126 EXT_KEYTYPE_PEERKEY, 127 128 NUM_EXT_KEYTYPES 129 } ext_key_type_enum; 130 typedef uint8 ext_key_type_enum_uint8; 131 132 typedef enum { 133 EXT_KEY_DEFAULT_TYPE_INVALID, 134 EXT_KEY_DEFAULT_TYPE_UNICAST, 135 EXT_KEY_DEFAULT_TYPE_MULTICAST, 136 137 NUM_EXT_KEY_DEFAULT_TYPES 138 } ext_key_default_types_enum; 139 typedef uint8 ext_key_default_types_enum_uint8; 140 141 typedef enum { 142 EXT_NO_SSID_HIDING, 143 EXT_HIDDEN_SSID_ZERO_LEN, 144 EXT_HIDDEN_SSID_ZERO_CONTENTS 145 } ext_hidden_ssid_enum; 146 typedef uint8 ext_hidden_ssid_enum_uint8; 147 148 typedef enum { 149 EXT_IOCTL_SET_AP = 0, 150 EXT_IOCTL_NEW_KEY, 151 EXT_IOCTL_DEL_KEY, 152 EXT_IOCTL_SET_KEY, 153 EXT_IOCTL_SEND_MLME, 154 EXT_IOCTL_SEND_EAPOL, 155 EXT_IOCTL_RECEIVE_EAPOL, 156 EXT_IOCTL_ENALBE_EAPOL, 157 EXT_IOCTL_DISABLE_EAPOL, 158 HIIS_IOCTL_GET_ADDR, 159 EXT_IOCTL_SET_MODE, 160 EXT_IOCTL_GET_MODE, 161 EXT_IOCTL_DEL_BEACON, 162 HIIS_IOCTL_GET_HW_FEATURE, 163 EXT_IOCTL_SCAN, 164 EXT_IOCTL_DISCONNET, 165 EXT_IOCTL_ASSOC, 166 EXT_IOCTL_SET_NETDEV, 167 EXT_IOCTL_CHANGE_BEACON, 168 EXT_IOCTL_SET_REKEY_INFO, 169 EXT_IOCTL_STA_REMOVE, 170 EXT_IOCTL_SEND_ACTION, 171 EXT_IOCTL_SET_MESH_USER, 172 EXT_IOCTL_SET_MESH_GTK, 173 EXT_IOCTL_EN_ACCEPT_PEER, 174 EXT_IOCTL_EN_ACCEPT_STA, 175 EXT_IOCTL_ADD_IF, 176 EXT_IOCTL_PROBE_REQUEST_REPORT, 177 EXT_IOCTL_REMAIN_ON_CHANNEL, 178 EXT_IOCTL_CANCEL_REMAIN_ON_CHANNEL, 179 EXT_IOCTL_SET_P2P_NOA, 180 EXT_IOCTL_SET_P2P_POWERSAVE, 181 EXT_IOCTL_SET_AP_WPS_P2P_IE, 182 EXT_IOCTL_REMOVE_IF, 183 EXT_IOCTL_GET_P2P_MAC_ADDR, 184 EXT_IOCTL_GET_DRIVER_FLAGS, 185 EXT_IOCTL_SET_USR_APP_IE, 186 EXT_IOCTL_DELAY_REPORT, 187 EXT_IOCTL_SEND_EXT_AUTH_STATUS, 188 EXT_IOCTL_ADD_PMKID, 189 EXT_IOCTL_DEL_PMKID, 190 EXT_IOCTL_FLUSH_PMKID, 191 EXT_IOCTL_GET_SURVEY, 192 EXT_IOCTL_UPDATE_FT_IES, 193 EXT_IOCTL_SET_CSI_CONFIG, 194 EXT_IOCTL_CSI_SWITCH, 195 EXT_IOCTL_UPDATE_DH_IE, 196 EXT_IOCTL_WIFI_APP_SERVICE, 197 HWAL_EVENT_BUTT 198 } ext_event_enum; 199 typedef uint8 ext_event_enum_uint8; 200 201 typedef enum { 202 EXT_ELOOP_EVENT_NEW_STA = 0, 203 EXT_ELOOP_EVENT_DEL_STA, 204 EXT_ELOOP_EVENT_RX_MGMT, 205 EXT_ELOOP_EVENT_TX_STATUS, 206 EXT_ELOOP_EVENT_SCAN_DONE, 207 EXT_ELOOP_EVENT_SCAN_RESULT, 208 EXT_ELOOP_EVENT_CONNECT_RESULT, 209 EXT_ELOOP_EVENT_DISCONNECT, 210 EXT_ELOOP_EVENT_MESH_CLOSE, 211 EXT_ELOOP_EVENT_REMAIN_ON_CHANNEL, 212 EXT_ELOOP_EVENT_CANCEL_REMAIN_ON_CHANNEL, 213 EXT_ELOOP_EVENT_CHANNEL_SWITCH, 214 EXT_ELOOP_EVENT_TIMEOUT_DISCONN, 215 EXT_ELOOP_EVENT_EXTERNAL_AUTH, 216 EXT_ELOOP_EVENT_FT_RESPONSE, 217 EXT_ELOOP_EVENT_RX_CSI, 218 EXT_ELOOP_EVENT_OWE_INFO, 219 EXT_ELOOP_EVENT_BUTT 220 } ext_eloop_event_enum; 221 typedef uint8 ext_eloop_event_enum_uint8; 222 223 /** 224 * Action to perform with external authentication request. 225 * @EXT_EXTERNAL_AUTH_START: Start the authentication. 226 * @EXT_EXTERNAL_AUTH_ABORT: Abort the ongoing authentication. 227 */ 228 typedef enum { 229 EXT_EXTERNAL_AUTH_START, 230 EXT_EXTERNAL_AUTH_ABORT, 231 232 EXT_EXTERNAL_AUTH_BUTT, 233 } ext_external_auth_action_enum; 234 typedef uint8 ext_external_auth_action_enum_uint8; 235 236 typedef enum { 237 EXT_MFP_NO, 238 EXT_MFP_OPTIONAL, 239 EXT_MFP_REQUIRED, 240 } ext_mfp_enum; 241 typedef uint8 ext_mfp_enum_uint8; 242 typedef uint8 ext_mesh_plink_state_enum_uint8; 243 typedef enum { 244 EXT_AUTHTYPE_OPEN_SYSTEM = 0, 245 EXT_AUTHTYPE_SHARED_KEY, 246 EXT_AUTHTYPE_FT, 247 EXT_AUTHTYPE_SAE, 248 EXT_AUTHTYPE_NETWORK_EAP, 249 /* keep last */ 250 EXT_AUTHTYPE_NUM, 251 EXT_AUTHTYPE_MAX = (uint32)EXT_AUTHTYPE_NUM - 1, 252 EXT_AUTHTYPE_AUTOMATIC, 253 EXT_AUTHTYPE_BUTT 254 } ext_auth_type_enum; 255 typedef uint8 ext_auth_type_enum_uint8; 256 257 typedef enum { 258 EXT_SCAN_SUCCESS, 259 EXT_SCAN_FAILED, 260 EXT_SCAN_REFUSED, 261 EXT_SCAN_TIMEOUT 262 } ext_scan_status_enum; 263 264 /***************************************************************************** 265 5 STRUCT definition 266 *****************************************************************************/ 267 typedef struct { 268 ext_scan_status_enum scan_status; 269 } ext_driver_scan_status_stru; 270 271 typedef struct { 272 uint8 set; // 0: del, 1: add 273 wifi_extend_ie_index ie_index; 274 uint8 bitmap; 275 uint16 ie_len; 276 uint8 *ie; 277 } ext_usr_app_ie_stru; 278 279 typedef struct { 280 unsigned int cmd; 281 const void *buf; 282 } ext_ioctl_command_stru; 283 typedef int32 (*ext_send_event_cb)(const char*, signed int, const unsigned char *, unsigned int); 284 285 typedef struct { 286 int32 reassoc; 287 size_t ielen; 288 uint8 *ie; 289 uint8 macaddr[ETH_ADDR_LEN]; 290 uint8 resv[2]; 291 } ext_new_sta_info_stru; 292 293 typedef struct { 294 uint8 *buf; 295 uint32 len; 296 int32 sig_mbm; 297 int32 freq; 298 } ext_rx_mgmt_stru; 299 300 typedef struct { 301 uint8 *buf; 302 uint32 len; 303 ext_bool_enum_uint8 ack; 304 uint8 resv[3]; 305 } ext_tx_status_stru; 306 307 typedef struct { 308 uint32 freq; 309 size_t data_len; 310 uint8 *data; 311 uint64 *send_action_cookie; 312 } ext_mlme_data_stru; 313 314 typedef struct { 315 size_t head_len; 316 size_t tail_len; 317 uint8 *head; 318 uint8 *tail; 319 } ext_beacon_data_stru; 320 321 typedef struct { 322 uint8 *dst; 323 uint8 *src; 324 uint8 *bssid; 325 uint8 *data; 326 size_t data_len; 327 } ext_action_data_stru; 328 329 typedef struct { 330 uint8 *addr; 331 ext_mesh_plink_state_enum_uint8 plink_state; 332 uint8 set; 333 uint8 mesh_bcn_priority; 334 uint8 mesh_is_mbr; 335 uint8 mesh_initiative_peering; 336 } ext_mesh_usr_params_stru; 337 338 typedef struct { 339 uint8 enable_flag; 340 } ext_mesh_enable_flag_stru; 341 342 typedef struct { 343 uint8 enable; 344 uint16 timeout; 345 uint8 resv; 346 } ext_delay_report_stru; 347 348 typedef struct { 349 int32 mode; 350 int32 freq; 351 int32 channel; 352 353 /* for HT */ 354 int32 ht_enabled; 355 356 /* 0 = HT40 disabled, -1 = HT40 enabled, 357 * secondary channel below primary, 1 = HT40 358 * enabled, secondary channel above primary */ 359 int32 sec_channel_offset; 360 361 /* for VHT */ 362 int32 vht_enabled; 363 364 /* valid for both HT and VHT, center_freq2 is non-zero 365 * only for bandwidth 80 and an 80+80 channel */ 366 int32 center_freq1; 367 int32 center_freq2; 368 int32 bandwidth; 369 } ext_freq_params_stru; 370 371 typedef struct { 372 int32 type; 373 uint32 key_idx; 374 uint32 key_len; 375 uint32 seq_len; 376 uint32 cipher; 377 uint8 *addr; 378 uint8 *key; 379 uint8 *seq; 380 ext_bool_enum_uint8 def; 381 ext_bool_enum_uint8 defmgmt; 382 ext_key_default_types_enum_uint8 default_types; 383 uint8 resv; 384 } ext_key_ext_stru; 385 386 typedef struct { 387 ext_freq_params_stru freq_params; 388 ext_beacon_data_stru beacon_data; 389 size_t ssid_len; 390 int32 beacon_interval; 391 int32 dtim_period; 392 uint8 *ssid; 393 ext_hidden_ssid_enum_uint8 hidden_ssid; 394 ext_auth_type_enum_uint8 auth_type; 395 size_t mesh_ssid_len; 396 uint8 *mesh_ssid; 397 int32 sae_pwe; 398 } ext_ap_settings_stru; 399 400 typedef struct { 401 uint8 bssid[ETH_ADDR_LEN]; 402 ext_iftype_enum_uint8 iftype; 403 uint8 resv; 404 } ext_set_mode_stru; 405 406 typedef struct { 407 const uint8 *puc_buf; 408 uint32 ul_len; 409 } ext_tx_eapol_stru; 410 411 typedef struct { 412 uint8 *buf; 413 uint32 len; 414 } ext_rx_eapol_stru; 415 416 typedef struct { 417 void *callback; 418 void *contex; 419 } ext_enable_eapol_stru; 420 421 typedef struct { 422 uint16 channel; 423 uint8 resv[2]; 424 uint32 freq; 425 uint32 flags; 426 } ext_ieee80211_channel_stru; 427 428 typedef struct { 429 int32 channel_num; 430 uint16 bitrate[12]; 431 uint16 ht_capab; 432 uint8 resv[2]; 433 ext_ieee80211_channel_stru iee80211_channel[14]; 434 } ext_hw_feature_data_stru; 435 436 #ifdef CONFIG_ACS 437 enum nl80211_band { 438 NL80211_BAND_2GHZ, 439 NL80211_BAND_5GHZ, 440 }; 441 442 enum ieee80211_band { 443 IEEE80211_BAND_2GHZ = (uint32)NL80211_BAND_2GHZ, 444 IEEE80211_BAND_5GHZ = (uint32)NL80211_BAND_5GHZ, 445 446 /* keep last */ 447 IEEE80211_NUM_BANDS 448 }; 449 450 typedef struct ieee80211_channel { 451 enum ieee80211_band band; 452 uint16 center_freq; 453 uint16 hw_value; 454 uint32 flags; 455 int32 max_antenna_gain; 456 int32 max_power; 457 bool beacon_found; 458 uint8 resv[3]; 459 uint32 orig_flags; 460 int32 orig_mag; 461 int32 orig_mpwr; 462 } oal_ieee80211_channel_stru; 463 typedef struct ieee80211_channel oal_ieee80211_channel; 464 465 typedef struct survey_info { 466 oal_ieee80211_channel *channel; 467 uint64 channel_time; 468 uint64 channel_time_busy; 469 uint64 channel_time_ext_busy; 470 uint64 channel_time_rx; 471 uint64 channel_time_tx; 472 uint32 filled; 473 int8 noise; 474 } oal_survey_info_stru; 475 476 typedef struct { 477 uint32 ifidx; 478 void (*add_survey)(void *sinfo, uint32 ifidx, void *survey_results); 479 void *survey_results; 480 } ext_survey_results_stru; 481 #endif 482 483 #ifdef CONFIG_IEEE80211R 484 typedef struct { 485 uint8 *ies; 486 size_t ies_len; 487 uint8 target_ap[ETH_ADDR_LEN]; 488 uint8 resv[2]; 489 uint8 *ric_ies; 490 size_t ric_ies_len; 491 } ext_ft_event_stru; 492 493 typedef struct { 494 uint16 md; 495 const uint8 *ie; 496 uint16 ie_len; 497 } ext_ft_ies_stru; 498 #endif /* CONFIG_IEEE80211R */ 499 500 typedef struct { 501 uint8 ssid[MAX_SSID_LEN]; 502 size_t ssid_len; 503 } ext_driver_scan_ssid_stru; 504 505 typedef struct { 506 ext_driver_scan_ssid_stru *ssids; 507 int32 *freqs; 508 uint8 *extra_ies; 509 uint8 *bssid; 510 uint8 num_ssids; 511 uint8 num_freqs; 512 uint8 prefix_ssid_scan_flag; 513 uint8 fast_connect_flag; 514 int32 extra_ies_len; 515 uint32 acs_scan_flag; 516 } ext_scan_stru; 517 518 typedef struct { 519 uint32 freq; 520 uint32 duration; 521 } ext_on_channel_stru; 522 523 typedef struct { 524 uint8 type; 525 } ext_if_add_stru; 526 527 typedef struct { 528 int32 start; 529 int32 duration; 530 uint8 count; 531 uint8 resv[3]; 532 } ext_p2p_noa_stru; 533 534 typedef struct { 535 int32 legacy_ps; 536 int8 opp_ps; 537 uint8 ctwindow; 538 int8 resv[2]; 539 } ext_p2p_power_save_stru; 540 541 typedef struct { 542 uint8 ifname[IFNAMSIZ]; 543 } ext_if_remove_stru; 544 545 typedef struct { 546 uint8 type; 547 uint8 mac_addr[ETH_ADDR_LEN]; 548 uint8 resv; 549 } ext_get_p2p_addr_stru; 550 typedef struct { 551 ext_wifi_iftype iftype; 552 uint8 *mac_addr; 553 } ext_iftype_mac_addr_stru; 554 typedef struct { 555 uint64 drv_flags; 556 } ext_get_drv_flags_stru; 557 558 typedef struct { 559 int32 freq; 560 } ext_ch_switch_stru; 561 562 /* The driver reports an event to trigger WPA to start SAE authentication. */ 563 typedef struct { 564 ext_external_auth_action_enum auth_action; 565 uint8 bssid[ETH_ADDR_LEN]; 566 uint8 *ssid; 567 uint32 ssid_len; 568 uint32 key_mgmt_suite; 569 uint16 status; 570 uint8 *pmkid; 571 } ext_external_auth_stru; 572 573 typedef struct { 574 uint8 peer[ETH_ADDR_LEN]; 575 uint16 status; 576 uint8 *ie; 577 uint32 ie_len; 578 } ext_update_dh_ie_stru; 579 580 typedef struct { 581 uint32 wpa_versions; 582 uint32 cipher_group; 583 int32 n_ciphers_pairwise; 584 uint32 ciphers_pairwise[EXT_MAX_NR_CIPHER_SUITES]; 585 int32 n_akm_suites; 586 uint32 akm_suites[EXT_MAX_NR_AKM_SUITES]; 587 int32 sae_pwe; 588 } ext_crypto_settings_stru; 589 590 typedef struct { 591 uint8 *bssid; 592 uint8 *ssid; 593 uint8 *ie; 594 uint8 *key; 595 uint8 auth_type; 596 uint8 privacy; 597 uint8 key_len; 598 uint8 key_idx; 599 uint8 mfp; 600 uint8 auto_conn; 601 uint8 rsv[2]; /* 2: reserve 2 bytes */ 602 uint32 freq; 603 uint32 ssid_len; 604 uint32 ie_len; 605 ext_crypto_settings_stru *crypto; 606 } ext_associate_params_stru; 607 608 typedef struct { 609 uint8 *req_ie; 610 size_t req_ie_len; 611 uint8 *resp_ie; 612 size_t resp_ie_len; 613 uint8 bssid[ETH_ADDR_LEN]; 614 uint8 rsv[2]; 615 uint16 status; 616 uint16 freq; 617 } ext_connect_result_stru; 618 619 typedef struct { 620 int32 flags; 621 uint8 bssid[ETH_ADDR_LEN]; 622 int16 caps; 623 int32 freq; 624 #ifndef EXT_SCAN_SIZE_CROP 625 int16 beacon_int; 626 int32 qual; 627 uint32 beacon_ie_len; 628 #endif /* EXT_SCAN_SIZE_CROP */ 629 int32 level; 630 uint32 age; 631 uint32 ie_len; 632 uint8 *variable; 633 } ext_scan_result_stru; 634 635 typedef struct { 636 uint8 *ie; 637 uint16 reason; 638 uint8 rsv[2]; 639 uint32 ie_len; 640 } ext_disconnect_stru; 641 #ifdef CONFIG_WPS_AP 642 typedef struct _ext_app_ie_stru { 643 uint32 ie_len; 644 uint8 app_ie_type; 645 uint8 rsv[3]; 646 uint8 *ie; 647 } ext_app_ie_stru; 648 #endif 649 650 #ifdef _PRE_WLAN_FEATURE_REKEY_OFFLOAD 651 typedef struct { 652 uint8 kck[EXT_REKEY_OFFLOAD_KCK_LEN]; 653 uint8 kek[EXT_REKEY_OFFLOAD_KEK_LEN]; 654 uint8 replay_ctr[EXT_REKEY_OFFLOAD_REPLAY_COUNTER_LEN]; 655 } ext_rekey_offload_stru; 656 #endif 657 658 typedef struct { 659 uint8 peer_addr[ETH_ADDR_LEN]; 660 uint8 mesh_bcn_priority; 661 uint8 mesh_is_mbr; 662 int8 rssi; 663 int8 reserved[3]; 664 } ext_mesh_new_peer_candidate_stru; 665 666 typedef struct { 667 uint8 bssid[ETH_ADDR_LEN]; 668 uint8 rsv[2]; 669 uint8 *pmkid; 670 } ext_pmkid_params; 671 672 673 /***************************************************************************** 674 6 Function declaration 675 *****************************************************************************/ 676 extern int32 drv_soc_register_send_event_cb(ext_send_event_cb func); 677 extern int32 drv_soc_hwal_wpa_ioctl(int8 *ifname, const ext_ioctl_command_stru *cmd); 678 #ifdef __cplusplus 679 #if __cplusplus 680 } 681 #endif 682 #endif 683 #endif /* end of driver_soc_common.h */ 684