Ask driver to report only new scan results if requested
[mech_eap.git] / src / drivers / driver.h
index 920cb34..4e5ab34 100644 (file)
 #define HOSTAPD_CHAN_DFS_AVAILABLE 0x00000300
 #define HOSTAPD_CHAN_DFS_MASK 0x00000300
 
+#define HOSTAPD_CHAN_VHT_10_70 0x00000800
+#define HOSTAPD_CHAN_VHT_30_50 0x00001000
+#define HOSTAPD_CHAN_VHT_50_30 0x00002000
+#define HOSTAPD_CHAN_VHT_70_10 0x00004000
+
+enum reg_change_initiator {
+       REGDOM_SET_BY_CORE,
+       REGDOM_SET_BY_USER,
+       REGDOM_SET_BY_DRIVER,
+       REGDOM_SET_BY_COUNTRY_IE,
+};
+
 /**
  * struct hostapd_channel_data - Channel information
  */
@@ -221,7 +233,7 @@ struct wpa_scan_res {
 struct wpa_scan_results {
        struct wpa_scan_res **res;
        size_t num;
-       struct os_time fetch_time;
+       struct os_reltime fetch_time;
 };
 
 /**
@@ -328,6 +340,15 @@ struct wpa_driver_scan_params {
         * and not to transmit the frames at any of those rates.
         */
        u8 p2p_probe;
+
+       /**
+        * only_new_results - Request driver to report only new results
+        *
+        * This is used to request the driver to report only BSSes that have
+        * been detected after this scan request has been started, i.e., to
+        * flush old cached BSS entries.
+        */
+       int only_new_results;
 };
 
 /**
@@ -430,25 +451,25 @@ struct wpa_driver_associate_params {
        unsigned int wpa_proto;
 
        /**
-        * pairwise_suite - Selected pairwise cipher suite
+        * pairwise_suite - Selected pairwise cipher suite (WPA_CIPHER_*)
         *
         * This is usually ignored if @wpa_ie is used.
         */
-       enum wpa_cipher pairwise_suite;
+       unsigned int pairwise_suite;
 
        /**
-        * group_suite - Selected group cipher suite
+        * group_suite - Selected group cipher suite (WPA_CIPHER_*)
         *
         * This is usually ignored if @wpa_ie is used.
         */
-       enum wpa_cipher group_suite;
+       unsigned int group_suite;
 
        /**
-        * key_mgmt_suite - Selected key management suite
+        * key_mgmt_suite - Selected key management suite (WPA_KEY_MGMT_*)
         *
         * This is usually ignored if @wpa_ie is used.
         */
-       enum wpa_key_mgmt key_mgmt_suite;
+       unsigned int key_mgmt_suite;
 
        /**
         * auth_alg - Allowed authentication algorithms
@@ -622,7 +643,7 @@ struct wpa_driver_ap_params {
        /**
         * head - Beacon head from IEEE 802.11 header to IEs before TIM IE
         */
-       const u8 *head;
+       u8 *head;
 
        /**
         * head_len - Length of the head buffer in octets
@@ -632,7 +653,7 @@ struct wpa_driver_ap_params {
        /**
         * tail - Beacon tail following TIM IE
         */
-       const u8 *tail;
+       u8 *tail;
 
        /**
         * tail_len - Length of the tail buffer in octets
@@ -663,7 +684,7 @@ struct wpa_driver_ap_params {
         * This is used by drivers that reply to Probe Requests internally in
         * AP mode and require the full Probe Response template.
         */
-       const u8 *proberesp;
+       u8 *proberesp;
 
        /**
         * proberesp_len - Length of the proberesp buffer in octets
@@ -821,6 +842,12 @@ struct wpa_driver_capa {
 #define WPA_DRIVER_CAPA_ENC_CCMP       0x00000008
 #define WPA_DRIVER_CAPA_ENC_WEP128     0x00000010
 #define WPA_DRIVER_CAPA_ENC_GCMP       0x00000020
+#define WPA_DRIVER_CAPA_ENC_GCMP_256   0x00000040
+#define WPA_DRIVER_CAPA_ENC_CCMP_256   0x00000080
+#define WPA_DRIVER_CAPA_ENC_BIP                0x00000100
+#define WPA_DRIVER_CAPA_ENC_BIP_GMAC_128       0x00000200
+#define WPA_DRIVER_CAPA_ENC_BIP_GMAC_256       0x00000400
+#define WPA_DRIVER_CAPA_ENC_BIP_CMAC_256       0x00000800
        unsigned int enc;
 
 #define WPA_DRIVER_AUTH_OPEN           0x00000001
@@ -844,8 +871,7 @@ struct wpa_driver_capa {
 #define WPA_DRIVER_FLAGS_AP            0x00000040
 /* Driver needs static WEP key setup after association has been completed */
 #define WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC_DONE     0x00000080
-/* Driver takes care of P2P management operations */
-#define WPA_DRIVER_FLAGS_P2P_MGMT      0x00000100
+/* unused: 0x00000100 */
 /* Driver supports concurrent P2P operations */
 #define WPA_DRIVER_FLAGS_P2P_CONCURRENT        0x00000200
 /*
@@ -898,6 +924,8 @@ struct wpa_driver_capa {
 #define WPA_DRIVER_FLAGS_RADAR                         0x10000000
 /* Driver supports a dedicated interface for P2P Device */
 #define WPA_DRIVER_FLAGS_DEDICATED_P2P_DEVICE          0x20000000
+/* Driver supports QoS Mapping */
+#define WPA_DRIVER_FLAGS_QOS_MAPPING                   0x40000000
        unsigned int flags;
 
        int max_scan_ssids;
@@ -1087,17 +1115,6 @@ struct wpa_bss_params {
 #define WPA_STA_MFP BIT(3)
 #define WPA_STA_TDLS_PEER BIT(4)
 
-/**
- * struct p2p_params - P2P parameters for driver-based P2P management
- */
-struct p2p_params {
-       const char *dev_name;
-       u8 pri_dev_type[8];
-#define DRV_MAX_SEC_DEV_TYPES 5
-       u8 sec_dev_type[DRV_MAX_SEC_DEV_TYPES][8];
-       size_t num_sec_dev_types;
-};
-
 enum tdls_oper {
        TDLS_DISCOVERY_REQ,
        TDLS_SETUP,
@@ -1152,6 +1169,59 @@ struct wpa_signal_info {
 };
 
 /**
+ * struct beacon_data - Beacon data
+ * @head: Head portion of Beacon frame (before TIM IE)
+ * @tail: Tail portion of Beacon frame (after TIM IE)
+ * @beacon_ies: Extra information element(s) to add into Beacon frames or %NULL
+ * @proberesp_ies: Extra information element(s) to add into Probe Response
+ *     frames or %NULL
+ * @assocresp_ies: Extra information element(s) to add into (Re)Association
+ *     Response frames or %NULL
+ * @probe_resp: Probe Response frame template
+ * @head_len: Length of @head
+ * @tail_len: Length of @tail
+ * @beacon_ies_len: Length of beacon_ies in octets
+ * @proberesp_ies_len: Length of proberesp_ies in octets
+ * @proberesp_ies_len: Length of proberesp_ies in octets
+ * @probe_resp_len: Length of probe response template (@probe_resp)
+ */
+struct beacon_data {
+       u8 *head, *tail;
+       u8 *beacon_ies;
+       u8 *proberesp_ies;
+       u8 *assocresp_ies;
+       u8 *probe_resp;
+
+       size_t head_len, tail_len;
+       size_t beacon_ies_len;
+       size_t proberesp_ies_len;
+       size_t assocresp_ies_len;
+       size_t probe_resp_len;
+};
+
+/**
+ * struct csa_settings - Settings for channel switch command
+ * @cs_count: Count in Beacon frames (TBTT) to perform the switch
+ * @block_tx: 1 - block transmission for CSA period
+ * @freq_params: Next channel frequency parameter
+ * @beacon_csa: Beacon/probe resp/asooc resp info for CSA period
+ * @beacon_after: Next beacon/probe resp/asooc resp info
+ * @counter_offset_beacon: Offset to the count field in beacon's tail
+ * @counter_offset_presp: Offset to the count field in probe resp.
+ */
+struct csa_settings {
+       u8 cs_count;
+       u8 block_tx;
+
+       struct hostapd_freq_params freq_params;
+       struct beacon_data beacon_csa;
+       struct beacon_data beacon_after;
+
+       u16 counter_offset_beacon;
+       u16 counter_offset_presp;
+};
+
+/**
  * struct wpa_driver_ops - Driver interface API definition
  *
  * This structure defines the API that each driver interface needs to implement
@@ -1200,7 +1270,9 @@ struct wpa_driver_ops {
         * @priv: private driver interface data
         * @alg: encryption algorithm (%WPA_ALG_NONE, %WPA_ALG_WEP,
         *      %WPA_ALG_TKIP, %WPA_ALG_CCMP, %WPA_ALG_IGTK, %WPA_ALG_PMK,
-        *      %WPA_ALG_GCMP);
+        *      %WPA_ALG_GCMP, %WPA_ALG_GCMP_256, %WPA_ALG_CCMP_256,
+        *      %WPA_ALG_BIP_GMAC_128, %WPA_ALG_BIP_GMAC_256,
+        *      %WPA_ALG_BIP_CMAC_256);
         *      %WPA_ALG_NONE clears the key.
         * @addr: Address of the peer STA (BSSID of the current AP when setting
         *      pairwise key in station mode), ff:ff:ff:ff:ff:ff for
@@ -1565,6 +1637,14 @@ struct wpa_driver_ops {
        int (*set_country)(void *priv, const char *alpha2);
 
        /**
+        * get_country - Get country
+        * @priv: Private driver interface data
+        * @alpha2: Buffer for returning country code (at least 3 octets)
+        * Returns: 0 on success, -1 on failure
+        */
+       int (*get_country)(void *priv, char *alpha2);
+
+       /**
         * global_init - Global driver initialization
         * Returns: Pointer to private data (global), %NULL on failure
         *
@@ -1950,12 +2030,13 @@ struct wpa_driver_ops {
         *      (this may differ from the requested addr if the driver cannot
         *      change interface address)
         * @bridge: Bridge interface to use or %NULL if no bridge configured
+        * @use_existing: Whether to allow existing interface to be used
         * Returns: 0 on success, -1 on failure
         */
        int (*if_add)(void *priv, enum wpa_driver_if_type type,
                      const char *ifname, const u8 *addr, void *bss_ctx,
                      void **drv_priv, char *force_ifname, u8 *if_addr,
-                     const char *bridge);
+                     const char *bridge, int use_existing);
 
        /**
         * if_remove - Remove a virtual interface
@@ -2132,7 +2213,7 @@ struct wpa_driver_ops {
         *
         * This command is used to request the driver to remain awake on the
         * specified channel for the specified duration and report received
-        * Action frames with EVENT_RX_ACTION events. Optionally, received
+        * Action frames with EVENT_RX_MGMT events. Optionally, received
         * Probe Request frames may also be requested to be reported by calling
         * probe_req_report(). These will be reported with EVENT_RX_PROBE_REQ.
         *
@@ -2314,222 +2395,6 @@ struct wpa_driver_ops {
        const char * (*get_radio_name)(void *priv);
 
        /**
-        * p2p_find - Start P2P Device Discovery
-        * @priv: Private driver interface data
-        * @timeout: Timeout for find operation in seconds or 0 for no timeout
-        * @type: Device Discovery type (enum p2p_discovery_type)
-        * Returns: 0 on success, -1 on failure
-        *
-        * This function is only used if the driver implements P2P management,
-        * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
-        * struct wpa_driver_capa.
-        */
-       int (*p2p_find)(void *priv, unsigned int timeout, int type);
-
-       /**
-        * p2p_stop_find - Stop P2P Device Discovery
-        * @priv: Private driver interface data
-        * Returns: 0 on success, -1 on failure
-        *
-        * This function is only used if the driver implements P2P management,
-        * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
-        * struct wpa_driver_capa.
-        */
-       int (*p2p_stop_find)(void *priv);
-
-       /**
-        * p2p_listen - Start P2P Listen state for specified duration
-        * @priv: Private driver interface data
-        * @timeout: Listen state duration in milliseconds
-        * Returns: 0 on success, -1 on failure
-        *
-        * This function can be used to request the P2P module to keep the
-        * device discoverable on the listen channel for an extended set of
-        * time. At least in its current form, this is mainly used for testing
-        * purposes and may not be of much use for normal P2P operations.
-        *
-        * This function is only used if the driver implements P2P management,
-        * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
-        * struct wpa_driver_capa.
-        */
-       int (*p2p_listen)(void *priv, unsigned int timeout);
-
-       /**
-        * p2p_connect - Start P2P group formation (GO negotiation)
-        * @priv: Private driver interface data
-        * @peer_addr: MAC address of the peer P2P client
-        * @wps_method: enum p2p_wps_method value indicating config method
-        * @go_intent: Local GO intent value (1..15)
-        * @own_interface_addr: Intended interface address to use with the
-        *      group
-        * @force_freq: The only allowed channel frequency in MHz or 0
-        * @persistent_group: Whether to create persistent group
-        * Returns: 0 on success, -1 on failure
-        *
-        * This function is only used if the driver implements P2P management,
-        * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
-        * struct wpa_driver_capa.
-        */
-       int (*p2p_connect)(void *priv, const u8 *peer_addr, int wps_method,
-                          int go_intent, const u8 *own_interface_addr,
-                          unsigned int force_freq, int persistent_group);
-
-       /**
-        * wps_success_cb - Report successfully completed WPS provisioning
-        * @priv: Private driver interface data
-        * @peer_addr: Peer address
-        * Returns: 0 on success, -1 on failure
-        *
-        * This function is used to report successfully completed WPS
-        * provisioning during group formation in both GO/Registrar and
-        * client/Enrollee roles.
-        *
-        * This function is only used if the driver implements P2P management,
-        * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
-        * struct wpa_driver_capa.
-        */
-       int (*wps_success_cb)(void *priv, const u8 *peer_addr);
-
-       /**
-        * p2p_group_formation_failed - Report failed WPS provisioning
-        * @priv: Private driver interface data
-        * Returns: 0 on success, -1 on failure
-        *
-        * This function is used to report failed group formation. This can
-        * happen either due to failed WPS provisioning or due to 15 second
-        * timeout during the provisioning phase.
-        *
-        * This function is only used if the driver implements P2P management,
-        * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
-        * struct wpa_driver_capa.
-        */
-       int (*p2p_group_formation_failed)(void *priv);
-
-       /**
-        * p2p_set_params - Set P2P parameters
-        * @priv: Private driver interface data
-        * @params: P2P parameters
-        * Returns: 0 on success, -1 on failure
-        *
-        * This function is only used if the driver implements P2P management,
-        * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
-        * struct wpa_driver_capa.
-        */
-       int (*p2p_set_params)(void *priv, const struct p2p_params *params);
-
-       /**
-        * p2p_prov_disc_req - Send Provision Discovery Request
-        * @priv: Private driver interface data
-        * @peer_addr: MAC address of the peer P2P client
-        * @config_methods: WPS Config Methods value (only one bit set)
-        * Returns: 0 on success, -1 on failure
-        *
-        * This function can be used to request a discovered P2P peer to
-        * display a PIN (config_methods = WPS_CONFIG_DISPLAY) or be prepared
-        * to enter a PIN from us (config_methods = WPS_CONFIG_KEYPAD). The
-        * Provision Discovery Request frame is transmitted once immediately
-        * and if no response is received, the frame will be sent again
-        * whenever the target device is discovered during device dsicovery
-        * (start with a p2p_find() call). Response from the peer is indicated
-        * with the EVENT_P2P_PROV_DISC_RESPONSE event.
-        *
-        * This function is only used if the driver implements P2P management,
-        * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
-        * struct wpa_driver_capa.
-        */
-       int (*p2p_prov_disc_req)(void *priv, const u8 *peer_addr,
-                                u16 config_methods, int join);
-
-       /**
-        * p2p_sd_request - Schedule a service discovery query
-        * @priv: Private driver interface data
-        * @dst: Destination peer or %NULL to apply for all peers
-        * @tlvs: P2P Service Query TLV(s)
-        * Returns: Reference to the query or 0 on failure
-        *
-        * Response to the query is indicated with the
-        * EVENT_P2P_SD_RESPONSE driver event.
-        *
-        * This function is only used if the driver implements P2P management,
-        * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
-        * struct wpa_driver_capa.
-        */
-       u64 (*p2p_sd_request)(void *priv, const u8 *dst,
-                             const struct wpabuf *tlvs);
-
-       /**
-        * p2p_sd_cancel_request - Cancel a pending service discovery query
-        * @priv: Private driver interface data
-        * @req: Query reference from p2p_sd_request()
-        * Returns: 0 on success, -1 on failure
-        *
-        * This function is only used if the driver implements P2P management,
-        * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
-        * struct wpa_driver_capa.
-        */
-       int (*p2p_sd_cancel_request)(void *priv, u64 req);
-
-       /**
-        * p2p_sd_response - Send response to a service discovery query
-        * @priv: Private driver interface data
-        * @freq: Frequency from EVENT_P2P_SD_REQUEST event
-        * @dst: Destination address from EVENT_P2P_SD_REQUEST event
-        * @dialog_token: Dialog token from EVENT_P2P_SD_REQUEST event
-        * @resp_tlvs: P2P Service Response TLV(s)
-        * Returns: 0 on success, -1 on failure
-        *
-        * This function is called as a response to the request indicated with
-        * the EVENT_P2P_SD_REQUEST driver event.
-        *
-        * This function is only used if the driver implements P2P management,
-        * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
-        * struct wpa_driver_capa.
-        */
-       int (*p2p_sd_response)(void *priv, int freq, const u8 *dst,
-                              u8 dialog_token,
-                              const struct wpabuf *resp_tlvs);
-
-       /**
-        * p2p_service_update - Indicate a change in local services
-        * @priv: Private driver interface data
-        * Returns: 0 on success, -1 on failure
-        *
-        * This function needs to be called whenever there is a change in
-        * availability of the local services. This will increment the
-        * Service Update Indicator value which will be used in SD Request and
-        * Response frames.
-        *
-        * This function is only used if the driver implements P2P management,
-        * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
-        * struct wpa_driver_capa.
-        */
-       int (*p2p_service_update)(void *priv);
-
-       /**
-        * p2p_reject - Reject peer device (explicitly block connections)
-        * @priv: Private driver interface data
-        * @addr: MAC address of the peer
-        * Returns: 0 on success, -1 on failure
-        */
-       int (*p2p_reject)(void *priv, const u8 *addr);
-
-       /**
-        * p2p_invite - Invite a P2P Device into a group
-        * @priv: Private driver interface data
-        * @peer: Device Address of the peer P2P Device
-        * @role: Local role in the group
-        * @bssid: Group BSSID or %NULL if not known
-        * @ssid: Group SSID
-        * @ssid_len: Length of ssid in octets
-        * @go_dev_addr: Forced GO Device Address or %NULL if none
-        * @persistent_group: Whether this is to reinvoke a persistent group
-        * Returns: 0 on success, -1 on failure
-        */
-       int (*p2p_invite)(void *priv, const u8 *peer, int role,
-                         const u8 *bssid, const u8 *ssid, size_t ssid_len,
-                         const u8 *go_dev_addr, int persistent_group);
-
-       /**
         * send_tdls_mgmt - for sending TDLS management packets
         * @priv: private driver interface data
         * @dst: Destination (peer) MAC address
@@ -2601,6 +2466,18 @@ struct wpa_driver_ops {
         */
        int (*set_authmode)(void *priv, int authmode);
 
+#ifdef ANDROID
+       /**
+        * driver_cmd - Execute driver-specific command
+        * @priv: Private driver interface data
+        * @cmd: Command to execute
+        * @buf: Return buffer
+        * @buf_len: Buffer length
+        * Returns: 0 on success, -1 on failure
+        */
+       int (*driver_cmd)(void *priv, char *cmd, char *buf, size_t buf_len);
+#endif /* ANDROID */
+
        /**
         * set_rekey_info - Set rekey information
         * @priv: Private driver interface data
@@ -2733,13 +2610,13 @@ struct wpa_driver_ops {
         * switch_channel - Announce channel switch and migrate the GO to the
         * given frequency
         * @priv: Private driver interface data
-        * @freq: Frequency in MHz
+        * @settings: Settings for CSA period and new channel
         * Returns: 0 on success, -1 on failure
         *
         * This function is used to move the GO to the legacy STA channel to
         * avoid frequency conflict in single channel concurrency.
         */
-       int (*switch_channel)(void *priv, unsigned int freq);
+       int (*switch_channel)(void *priv, struct csa_settings *settings);
 
        /**
         * start_dfs_cac - Listen for radar interference on the channel
@@ -3006,15 +2883,6 @@ enum wpa_event_type {
        EVENT_RX_MGMT,
 
        /**
-        * EVENT_RX_ACTION - Action frame received
-        *
-        * This event is used to indicate when an Action frame has been
-        * received. Information about the received frame is included in
-        * union wpa_event_data::rx_action.
-        */
-       EVENT_RX_ACTION,
-
-       /**
         * EVENT_REMAIN_ON_CHANNEL - Remain-on-channel duration started
         *
         * This event is used to indicate when the driver has started the
@@ -3161,38 +3029,6 @@ enum wpa_event_type {
        EVENT_STATION_LOW_ACK,
 
        /**
-        * EVENT_P2P_DEV_FOUND - Report a discovered P2P device
-        *
-        * This event is used only if the driver implements P2P management
-        * internally. Event data is stored in
-        * union wpa_event_data::p2p_dev_found.
-        */
-       EVENT_P2P_DEV_FOUND,
-
-       /**
-        * EVENT_P2P_GO_NEG_REQ_RX - Report reception of GO Negotiation Request
-        *
-        * This event is used only if the driver implements P2P management
-        * internally. Event data is stored in
-        * union wpa_event_data::p2p_go_neg_req_rx.
-        */
-       EVENT_P2P_GO_NEG_REQ_RX,
-
-       /**
-        * EVENT_P2P_GO_NEG_COMPLETED - Report completion of GO Negotiation
-        *
-        * This event is used only if the driver implements P2P management
-        * internally. Event data is stored in
-        * union wpa_event_data::p2p_go_neg_completed.
-        */
-       EVENT_P2P_GO_NEG_COMPLETED,
-
-       EVENT_P2P_PROV_DISC_REQUEST,
-       EVENT_P2P_PROV_DISC_RESPONSE,
-       EVENT_P2P_SD_REQUEST,
-       EVENT_P2P_SD_RESPONSE,
-
-       /**
         * EVENT_IBSS_PEER_LOST - IBSS peer not reachable anymore
         */
        EVENT_IBSS_PEER_LOST,
@@ -3279,17 +3115,27 @@ enum wpa_event_type {
         */
        EVENT_DFS_NOP_FINISHED,
 
-       /*
-       * EVENT_SURVEY - Received survey data
-       *
-       * This event gets triggered when a driver query is issued for survey
-       * data and the requested data becomes available. The returned data is
-       * stored in struct survey_results. The results provide at most one
-       * survey entry for each frequency and at minimum will provide one survey
-       * entry for one frequency. The survey data can be os_malloc()'d and
-       * then os_free()'d, so the event callback must only copy data.
-       */
-       EVENT_SURVEY
+       /**
+        * EVENT_SURVEY - Received survey data
+        *
+        * This event gets triggered when a driver query is issued for survey
+        * data and the requested data becomes available. The returned data is
+        * stored in struct survey_results. The results provide at most one
+        * survey entry for each frequency and at minimum will provide one
+        * survey entry for one frequency. The survey data can be os_malloc()'d
+        * and then os_free()'d, so the event callback must only copy data.
+        */
+       EVENT_SURVEY,
+
+       /**
+        * EVENT_SCAN_STARTED - Scan started
+        *
+        * This indicates that driver has started a scan operation either based
+        * on a request from wpa_supplicant/hostapd or from another application.
+        * EVENT_SCAN_RESULTS is used to indicate when the scan has been
+        * completed (either successfully or by getting cancelled).
+        */
+       EVENT_SCAN_STARTED
 };
 
 
@@ -3657,48 +3503,17 @@ union wpa_event_data {
                const u8 *frame;
                size_t frame_len;
                u32 datarate;
-               int ssi_signal; /* dBm */
-       } rx_mgmt;
 
-       /**
-        * struct rx_action - Data for EVENT_RX_ACTION events
-        */
-       struct rx_action {
                /**
-                * da - Destination address of the received Action frame
-                */
-               const u8 *da;
-
-               /**
-                * sa - Source address of the received Action frame
-                */
-               const u8 *sa;
-
-               /**
-                * bssid - Address 3 of the received Action frame
-                */
-               const u8 *bssid;
-
-               /**
-                * category - Action frame category
-                */
-               u8 category;
-
-               /**
-                * data - Action frame body after category field
-                */
-               const u8 *data;
-
-               /**
-                * len - Length of data in octets
+                * freq - Frequency (in MHz) on which the frame was received
                 */
-               size_t len;
+               int freq;
 
                /**
-                * freq - Frequency (in MHz) on which the frame was received
+                * ssi_signal - Signal strength in dBm (or 0 if not available)
                 */
-               int freq;
-       } rx_action;
+               int ssi_signal;
+       } rx_mgmt;
 
        /**
         * struct remain_on_channel - Data for EVENT_REMAIN_ON_CHANNEL events
@@ -3838,66 +3653,6 @@ union wpa_event_data {
        } low_ack;
 
        /**
-        * struct p2p_dev_found - Data for EVENT_P2P_DEV_FOUND
-        */
-       struct p2p_dev_found {
-               const u8 *addr;
-               const u8 *dev_addr;
-               const u8 *pri_dev_type;
-               const char *dev_name;
-               u16 config_methods;
-               u8 dev_capab;
-               u8 group_capab;
-       } p2p_dev_found;
-
-       /**
-        * struct p2p_go_neg_req_rx - Data for EVENT_P2P_GO_NEG_REQ_RX
-        */
-       struct p2p_go_neg_req_rx {
-               const u8 *src;
-               u16 dev_passwd_id;
-       } p2p_go_neg_req_rx;
-
-       /**
-        * struct p2p_go_neg_completed - Data for EVENT_P2P_GO_NEG_COMPLETED
-        */
-       struct p2p_go_neg_completed {
-               struct p2p_go_neg_results *res;
-       } p2p_go_neg_completed;
-
-       struct p2p_prov_disc_req {
-               const u8 *peer;
-               u16 config_methods;
-               const u8 *dev_addr;
-               const u8 *pri_dev_type;
-               const char *dev_name;
-               u16 supp_config_methods;
-               u8 dev_capab;
-               u8 group_capab;
-       } p2p_prov_disc_req;
-
-       struct p2p_prov_disc_resp {
-               const u8 *peer;
-               u16 config_methods;
-       } p2p_prov_disc_resp;
-
-       struct p2p_sd_req {
-               int freq;
-               const u8 *sa;
-               u8 dialog_token;
-               u16 update_indic;
-               const u8 *tlvs;
-               size_t tlvs_len;
-       } p2p_sd_req;
-
-       struct p2p_sd_resp {
-               const u8 *sa;
-               u16 update_indic;
-               const u8 *tlvs;
-               size_t tlvs_len;
-       } p2p_sd_resp;
-
-       /**
         * struct ibss_peer_lost - Data for EVENT_IBSS_PEER_LOST
         */
        struct ibss_peer_lost {
@@ -3942,11 +3697,17 @@ union wpa_event_data {
         * @freq: Frequency of new channel in MHz
         * @ht_enabled: Whether this is an HT channel
         * @ch_offset: Secondary channel offset
+        * @ch_width: Channel width
+        * @cf1: Center frequency 1
+        * @cf2: Center frequency 2
         */
        struct ch_switch {
                int freq;
                int ht_enabled;
                int ch_offset;
+               enum chan_width ch_width;
+               int cf1;
+               int cf2;
        } ch_switch;
 
        /**
@@ -3985,6 +3746,14 @@ union wpa_event_data {
                unsigned int freq_filter;
                struct dl_list survey_list; /* struct freq_survey */
        } survey_results;
+
+       /**
+        * channel_list_changed - Data for EVENT_CHANNEL_LIST_CHANGED
+        * @initiator: Initiator of the regulatory change
+        */
+       struct channel_list_changed {
+               enum reg_change_initiator initiator;
+       } channel_list_changed;
 };
 
 /**
@@ -4043,4 +3812,7 @@ void wpa_scan_results_free(struct wpa_scan_results *res);
 /* Convert wpa_event_type to a string for logging */
 const char * event_to_string(enum wpa_event_type event);
 
+/* NULL terminated array of linked in driver wrappers */
+extern struct wpa_driver_ops *wpa_drivers[];
+
 #endif /* DRIVER_H */