/*
 * Copyright (c) 2013-2018 The Linux Foundation. All rights reserved.
 *
 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
 *
 *
 * Permission to use, copy, modify, and/or distribute this software for
 * any purpose with or without fee is hereby granted, provided that the
 * above copyright notice and this permission notice appear in all
 * copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */

/*
 * This file was originally distributed by Qualcomm Atheros, Inc.
 * under proprietary terms before Copyright ownership was assigned
 * to the Linux Foundation.
 */

#ifndef HDD_TGT_CFG_H
#define HDD_TGT_CFG_H

/* TODO: Find it from the max number of supported vdev */
#define INTF_MACADDR_MASK	0x7

struct hdd_tgt_services {
        u_int32_t sta_power_save;
        u_int32_t uapsd;
        u_int32_t ap_dfs;
        u_int32_t en_11ac;
        u_int32_t arp_offload;
        u_int32_t early_rx;
#ifdef FEATURE_WLAN_SCAN_PNO
        v_BOOL_t  pno_offload;
#endif
        v_BOOL_t beacon_offload;
        u_int32_t lte_coex_ant_share;
        uint8_t chain_mask_2g;
        uint8_t chain_mask_5g;
        bool per_band_chainmask_supp;
#ifdef FEATURE_WLAN_TDLS
        v_BOOL_t en_tdls;
        v_BOOL_t en_tdls_offchan;
        v_BOOL_t en_tdls_uapsd_buf_sta;
        v_BOOL_t en_tdls_uapsd_sleep_sta;
#endif
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
        v_BOOL_t en_roam_offload;
#endif
#ifdef SAP_AUTH_OFFLOAD
        bool sap_auth_offload_service;
#endif
        bool get_peer_info_enabled;
	bool wow_support;
};

struct hdd_tgt_ht_cap {
        u_int32_t mpdu_density;
        bool ht_rx_stbc;
        bool ht_tx_stbc;
        bool ht_rx_ldpc;
        bool ht_sgi_20;
        bool ht_sgi_40;
        u_int32_t num_rf_chains;
};

#ifdef WLAN_FEATURE_11AC
struct hdd_tgt_vht_cap {
        u_int32_t vht_max_mpdu;
        u_int32_t supp_chan_width;
        u_int32_t vht_rx_ldpc;
        u_int32_t vht_short_gi_80;
        u_int32_t vht_short_gi_160;
        u_int32_t vht_tx_stbc;
        u_int32_t vht_rx_stbc;
        u_int32_t vht_su_bformer;
        u_int32_t vht_su_bformee;
        u_int32_t vht_mu_bformer;
        u_int32_t vht_mu_bformee;
        u_int32_t vht_max_ampdu_len_exp;
        u_int32_t vht_txop_ps;
};
#endif


struct hdd_tgt_cfg {
        u_int32_t target_fw_version;
        u_int8_t band_cap;
        u_int32_t reg_domain;
        u_int32_t eeprom_rd_ext;
        v_MACADDR_t hw_macaddr;
        struct hdd_tgt_services services;
        struct hdd_tgt_ht_cap ht_cap;
#ifdef WLAN_FEATURE_11AC
        struct hdd_tgt_vht_cap vht_cap;
#endif
        v_U8_t max_intf_count;
#ifdef WLAN_FEATURE_LPSS
        v_U8_t lpss_support;
#endif
        uint8_t ap_arpns_support;
#ifdef FEATURE_GREEN_AP
        bool egap_support;
#endif
        uint32_t fine_time_measurement_cap;
        bool bpf_enabled;
#ifdef FEATURE_WLAN_RA_FILTERING
        bool is_ra_rate_limit_enabled;
#endif
        uint16_t wmi_max_len;
#ifdef WLAN_FEATURE_NAN_DATAPATH
        bool nan_datapath_enabled;
#endif
        uint8_t max_mc_addr_list;
        bool sub_20_support;
};

struct hdd_dfs_radar_ind {
        u_int8_t   ieee_chan_number;
        u_int32_t  chan_freq;
        u_int32_t  dfs_radar_status;
};

#endif /* HDD_TGT_CFG_H */
