00001
00013 #ifndef _ME_UTILS_H_
00014 #define _ME_UTILS_H_
00015
00022
00023 #include "co_int.h"
00024 #include "co_bool.h"
00025
00026 #include "tx_swdesc.h"
00027
00028
00029 struct mac_mcsset;
00030 struct mac_rateset;
00031 struct mac_rates;
00032 struct sta_info_tag;
00033 struct txdesc;
00034 struct me_bss_info;
00035
00046 __INLINE uint8_t me_phy2mac_bw(uint8_t phy_bw)
00047 {
00048 return((phy_bw == PHY_CHNL_BW_80P80) ? BW_160MHZ : phy_bw);
00049 }
00050
00065 __INLINE uint8_t me_get_sta_bw(uint8_t sta_phy_bw, uint8_t bss_phy_bw)
00066 {
00067
00068 if ((bss_phy_bw == PHY_CHNL_BW_80P80) && (sta_phy_bw < PHY_CHNL_BW_80P80))
00069 {
00070 bss_phy_bw = PHY_CHNL_BW_80;
00071 }
00072 return (co_min(bss_phy_bw, sta_phy_bw));
00073 }
00074
00087 bool me_set_sta_ht_vht_param(struct sta_info_tag *sta, struct me_bss_info *bss);
00088
00102 uint16_t me_legacy_rate_bitfield_build(struct mac_rateset const *rateset, bool basic_only);
00103
00113 uint16_t me_rate_bitfield_vht_build(uint16_t mcs_map_1, uint16_t mcs_map_2);
00114
00124 uint16_t me_build_capability(uint8_t vap_idx);
00125
00135 uint32_t me_build_bss_color_reg(struct me_bss_info *bss);
00136
00144 void me_init_rate(struct sta_info_tag *sta);
00145
00153 void me_init_bcmc_rate(struct sta_info_tag *sta);
00154
00165 struct txl_buffer_control *me_update_buffer_control(struct sta_info_tag *sta);
00166
00178 void me_bw_check(uint32_t ht_op_addr, uint32_t vht_op_addr, struct me_bss_info *bss);
00179
00192 void me_beacon_check(uint8_t vif_idx, uint16_t length, uint32_t bcn_addr);
00193
00206 void me_sta_bw_nss_max_upd(uint8_t sta_idx, uint8_t bw, uint8_t nss);
00207
00218 uint16_t me_tx_cfm_amsdu(struct txdesc *txdesc);
00219
00227 uint8_t me_11ac_mcs_max(uint16_t mcs_map);
00228
00236 uint8_t me_11ax_mcs_max(uint16_t mcs_map);
00237
00245 uint8_t me_11ac_nss_max(uint16_t mcs_map);
00246
00254 uint8_t me_11n_nss_max(uint8_t *mcs_set);
00255
00256
00264 uint8_t me_legacy_ridx_min(uint16_t rate_map);
00265
00273 uint8_t me_legacy_ridx_max(uint16_t rate_map);
00274
00288 void me_get_ampdu_params(struct mac_htcapability const *ht_cap,
00289 struct mac_vhtcapability const *vht_cap,
00290 struct mac_hecapability const *he_cap,
00291 uint16_t *ampdu_size_max_ht,
00292 uint32_t *ampdu_size_max_vht,
00293 uint32_t *ampdu_size_max_he,
00294 uint8_t *ampdu_spacing_min);
00295
00313 void me_vht_bandwidth_parse(uint8_t width, uint8_t center0, uint8_t center1,
00314 struct mac_chan_op *chan);
00316
00317 #endif // _ME_UTILS_H_