/** @file mlan_11v.h
 *
 *  @brief Interface for the BTM module implemented in mlan_11v.c
 *
 *  Driver interface functions and type declarations for the process BTM frame
 *    module implemented in mlan_11v.c.
 *
 *  Copyright 2022-2024 NXP
 *
 *  SPDX-License-Identifier: BSD-3-Clause
 *
 */

/********************************************************
Change log:
    08/11/2022: initial version
********************************************************/

#ifndef _MLAN_11V_H_
#define _MLAN_11V_H_

#if CONFIG_11V

#define WLAN_WNM_MAX_NEIGHBOR_REPORT               6
#define MGMT_WNM_NEIGHBOR_BSS_TRANSITION_CANDIDATE 3

struct wnm_neighbor_report
{
    t_u8 bssid[MLAN_MAC_ADDR_LENGTH];
    t_u32 bssid_info;
    t_u8 reg_class;
    t_u8 channel;
    t_u8 PhyType;
    t_u8 prefer;
    t_u8 prefer_select;
};

/* IEEE Std 802.11-2016 - Table 9-357 BTM status code definitions */
enum wnm_btm_status_code
{
    WNM_BTM_ACCEPT                                 = 0,
    WNM_BTM_REJECT_UNSPECIFIED                     = 1,
    WNM_BTM_REJECT_INSUFFICIENT_BEACON_PROBE_RESP  = 2,
    WNM_BTM_REJECT_INSUFFICIENT_AVAILABLE_CAPABITY = 3,
    WNM_BTM_REJECT_TERMINATION_UNDESIRED           = 4,
    WNM_BTM_REJECT_TERMINATION_DELAY_REQUEST       = 5,
    WNM_BTM_REJECT_STA_CANDIDATE_LIST_PROVIDED     = 6,
    WNM_BTM_REJECT_NO_SUITABLE_CANDIDATES          = 7,
    WNM_BTM_REJECT_LEAVING_ESS                     = 8
};

/** process rx action frame */
void wlan_process_mgmt_wnm_btm_req(t_u8 *pos, t_u8 *end, t_u8 *src_addr, t_u8 *dest_addr, bool protect);

/* send mgmt bss transition query frame */
int wlan_send_mgmt_bss_trans_query(mlan_private *pmpriv, t_u8 query_reason);

/* send mgmt bss transition mgmt response */
void wlan_send_mgmt_wnm_btm_resp(t_u8 dialog_token,
                                 enum wnm_btm_status_code status,
                                 t_u8 *dst_addr,
                                 t_u8 *src_addr,
                                 t_u8 *target_bssid,
                                 t_u8 *tag_nr,
                                 t_u8 tag_len,
                                 bool protect);
#endif /* CONFIG_11V */

#endif /* !_MLAN_11V_H_ */