105#include <sys/cdefs.h>
111#include <sys/param.h>
114#include <sys/endian.h>
115#include <sys/firmware.h>
116#include <sys/kernel.h>
117#include <sys/malloc.h>
119#include <sys/mutex.h>
120#include <sys/module.h>
123#include <sys/socket.h>
124#include <sys/sockio.h>
125#include <sys/sysctl.h>
126#include <sys/linker.h>
128#include <machine/bus.h>
129#include <machine/endian.h>
130#include <machine/resource.h>
132#include <dev/pci/pcivar.h>
133#include <dev/pci/pcireg.h>
138#include <net/if_var.h>
139#include <net/if_arp.h>
140#include <net/if_dl.h>
141#include <net/if_media.h>
142#include <net/if_types.h>
144#include <netinet/in.h>
145#include <netinet/in_systm.h>
146#include <netinet/if_ether.h>
147#include <netinet/ip.h>
149#include <net80211/ieee80211_var.h>
150#include <net80211/ieee80211_regdomain.h>
151#include <net80211/ieee80211_ratectl.h>
152#include <net80211/ieee80211_radiotap.h>
174 "%s: id=%d, colour=%d, action=%d, apply_time=%d\n",
183 cmd->
action = htole32(action);
193 uint8_t chains_static, uint8_t chains_dynamic)
195 struct ieee80211com *ic = &sc->
sc_ic;
196 uint8_t active_cnt, idle_cnt;
199 "%s: 2ghz=%d, channel=%d, chains static=0x%x, dynamic=0x%x, "
200 "rx_ant=0x%x, tx_ant=0x%x\n",
202 !! IEEE80211_IS_CHAN_2GHZ(chan),
203 ieee80211_chan2ieee(ic, chan),
210 cmd->
ci.
band = IEEE80211_IS_CHAN_2GHZ(chan) ?
213 cmd->
ci.
channel = ieee80211_chan2ieee(ic, chan);
218 idle_cnt = chains_static;
219 active_cnt = chains_dynamic;
251 uint8_t chains_static, uint8_t chains_dynamic,
252 uint32_t action, uint32_t apply_time)
258 "%s: called; channel=%p\n",
267 chains_static, chains_dynamic);
273 "PHY ctxt cmd error. ret=%d\n", ret);
283 struct ieee80211_channel *chan,
284 uint8_t chains_static, uint8_t chains_dynamic)
289 "%s: called; channel=%d\n",
291 ieee80211_chan2ieee(&sc->
sc_ic, chan));
304 struct iwm_phy_ctxt *ctxt,
struct ieee80211_channel *chan,
305 uint8_t chains_static, uint8_t chains_dynamic)
310 "%s: called; channel=%d\n",
312 ieee80211_chan2ieee(&sc->
sc_ic, chan));
#define IWM_DPRINTF(sc, m, fmt,...)
int iwm_phy_ctxt_add(struct iwm_softc *sc, struct iwm_phy_ctxt *ctxt, struct ieee80211_channel *chan, uint8_t chains_static, uint8_t chains_dynamic)
int iwm_phy_ctxt_changed(struct iwm_softc *sc, struct iwm_phy_ctxt *ctxt, struct ieee80211_channel *chan, uint8_t chains_static, uint8_t chains_dynamic)
static void iwm_phy_ctxt_cmd_data(struct iwm_softc *sc, struct iwm_phy_context_cmd *cmd, struct ieee80211_channel *chan, uint8_t chains_static, uint8_t chains_dynamic)
static int iwm_phy_ctxt_apply(struct iwm_softc *sc, struct iwm_phy_ctxt *ctxt, uint8_t chains_static, uint8_t chains_dynamic, uint32_t action, uint32_t apply_time)
static void iwm_phy_ctxt_cmd_hdr(struct iwm_softc *sc, struct iwm_phy_ctxt *ctxt, struct iwm_phy_context_cmd *cmd, uint32_t action, uint32_t apply_time)
boolean_t iwm_rx_diversity_allowed(struct iwm_softc *sc)
int iwm_send_cmd_pdu(struct iwm_softc *sc, uint32_t id, uint32_t flags, uint16_t len, const void *data)
static uint8_t iwm_get_valid_rx_ant(struct iwm_softc *sc)
static uint8_t iwm_get_valid_tx_ant(struct iwm_softc *sc)
#define IWM_PHY_VHT_CHANNEL_MODE20
#define IWM_PHY_VHT_CTRL_POS_1_BELOW
#define IWM_FW_CMD_ID_AND_COLOR(_id, _color)
#define IWM_PHY_CONTEXT_CMD
#define IWM_FW_CTXT_ACTION_MODIFY
#define IWM_FW_CTXT_ACTION_ADD
#define IWM_PHY_RX_CHAIN_VALID_POS
#define IWM_PHY_RX_CHAIN_CNT_POS
#define IWM_PHY_RX_CHAIN_MIMO_CNT_POS
struct iwm_fw_channel_info_v1 ci
struct ieee80211_channel * channel
struct ieee80211com sc_ic