xref: /freebsd/sys/net80211/ieee80211_vht.h (revision 912a05670ed9545a1d1b010eedafb819e14eb1b8)
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