1b6fec8d6SAdrian Chadd /*- 2b6fec8d6SAdrian Chadd * Copyright (c) 2016 Adrian Chadd <adrian@FreeBSD.org> 3b6fec8d6SAdrian Chadd * All rights reserved. 4b6fec8d6SAdrian Chadd * 5b6fec8d6SAdrian Chadd * Redistribution and use in source and binary forms, with or without 6b6fec8d6SAdrian Chadd * modification, are permitted provided that the following conditions 7b6fec8d6SAdrian Chadd * are met: 8b6fec8d6SAdrian Chadd * 1. Redistributions of source code must retain the above copyright 9b6fec8d6SAdrian Chadd * notice, this list of conditions and the following disclaimer. 10b6fec8d6SAdrian Chadd * 2. Redistributions in binary form must reproduce the above copyright 11b6fec8d6SAdrian Chadd * notice, this list of conditions and the following disclaimer in the 12b6fec8d6SAdrian Chadd * documentation and/or other materials provided with the distribution. 13b6fec8d6SAdrian Chadd * 14b6fec8d6SAdrian Chadd * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 15b6fec8d6SAdrian Chadd * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16b6fec8d6SAdrian Chadd * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17b6fec8d6SAdrian Chadd * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 18b6fec8d6SAdrian Chadd * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19b6fec8d6SAdrian Chadd * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20b6fec8d6SAdrian Chadd * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21b6fec8d6SAdrian Chadd * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22b6fec8d6SAdrian Chadd * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23b6fec8d6SAdrian Chadd * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24b6fec8d6SAdrian Chadd */ 25b6fec8d6SAdrian Chadd #ifndef _NET80211_IEEE80211_VHT_H_ 26b6fec8d6SAdrian Chadd #define _NET80211_IEEE80211_VHT_H_ 27b6fec8d6SAdrian Chadd 28b6fec8d6SAdrian Chadd void ieee80211_vht_attach(struct ieee80211com *); 29b6fec8d6SAdrian Chadd void ieee80211_vht_detach(struct ieee80211com *); 30b6fec8d6SAdrian Chadd void ieee80211_vht_vattach(struct ieee80211vap *); 31b6fec8d6SAdrian Chadd void ieee80211_vht_vdetach(struct ieee80211vap *); 32b6fec8d6SAdrian Chadd 33b6fec8d6SAdrian Chadd void ieee80211_vht_announce(struct ieee80211com *); 34b6fec8d6SAdrian Chadd 35b6fec8d6SAdrian Chadd void ieee80211_vht_node_init(struct ieee80211_node *); 36b6fec8d6SAdrian Chadd void ieee80211_vht_node_cleanup(struct ieee80211_node *); 37b6fec8d6SAdrian Chadd 38b6fec8d6SAdrian Chadd void ieee80211_parse_vhtopmode(struct ieee80211_node *, const uint8_t *); 39b6fec8d6SAdrian Chadd void ieee80211_parse_vhtcap(struct ieee80211_node *, const uint8_t *); 40b6fec8d6SAdrian Chadd 41b6fec8d6SAdrian Chadd int ieee80211_vht_updateparams(struct ieee80211_node *, 42b6fec8d6SAdrian Chadd const uint8_t *, const uint8_t *); 43b6fec8d6SAdrian Chadd void ieee80211_setup_vht_rates(struct ieee80211_node *, 44b6fec8d6SAdrian Chadd const uint8_t *, const uint8_t *); 45b6fec8d6SAdrian Chadd 4639ca7ca5SAdrian Chadd void ieee80211_vht_timeout(struct ieee80211vap *vap); 47b6fec8d6SAdrian Chadd 48b6fec8d6SAdrian Chadd void ieee80211_vht_node_join(struct ieee80211_node *ni); 49b6fec8d6SAdrian Chadd void ieee80211_vht_node_leave(struct ieee80211_node *ni); 50b6fec8d6SAdrian Chadd 51b6fec8d6SAdrian Chadd uint8_t * ieee80211_add_vhtcap(uint8_t *frm, struct ieee80211_node *); 52b6fec8d6SAdrian Chadd uint8_t * ieee80211_add_vhtinfo(uint8_t *frm, struct ieee80211_node *); 536c3ae01cSBjoern A. Zeeb uint8_t *ieee80211_add_vhtcap_ch(uint8_t *, struct ieee80211vap *, 546c3ae01cSBjoern A. Zeeb struct ieee80211_channel *); 55b6fec8d6SAdrian Chadd 56b6fec8d6SAdrian Chadd void ieee80211_vht_update_cap(struct ieee80211_node *, 57b6fec8d6SAdrian Chadd const uint8_t *, const uint8_t *); 58b6fec8d6SAdrian Chadd 59b6fec8d6SAdrian Chadd struct ieee80211_channel * 60b6fec8d6SAdrian Chadd ieee80211_vht_adjust_channel(struct ieee80211com *, 61b6fec8d6SAdrian Chadd struct ieee80211_channel *, int); 62b6fec8d6SAdrian Chadd 63791be271SAdrian Chadd void ieee80211_vht_get_vhtcap_ie(struct ieee80211_node *ni, 64e85eb4c8SBjoern A. Zeeb struct ieee80211_vht_cap *, int); 65791be271SAdrian Chadd void ieee80211_vht_get_vhtinfo_ie(struct ieee80211_node *ni, 66e85eb4c8SBjoern A. Zeeb struct ieee80211_vht_operation *, int); 67791be271SAdrian Chadd 68*912a0567SAdrian Chadd bool ieee80211_vht_check_tx_vht(const struct ieee80211_node *); 69*912a0567SAdrian Chadd bool ieee80211_vht_check_tx_bw(const struct ieee80211_node *, 70*912a0567SAdrian Chadd enum ieee80211_sta_rx_bw); 71*912a0567SAdrian Chadd 72b6fec8d6SAdrian Chadd #endif /* _NET80211_IEEE80211_VHT_H_ */ 73