summaryrefslogtreecommitdiffstats
path: root/sys/dev/rtwn
diff options
context:
space:
mode:
authoravos <avos@FreeBSD.org>2016-05-26 16:39:11 +0000
committeravos <avos@FreeBSD.org>2016-05-26 16:39:11 +0000
commita6adaa3c235fe0f54b50a73bea13297603dbb5b7 (patch)
tree91d29e7e88244129cb6dde1ae14d6c5edb1d144c /sys/dev/rtwn
parent930215e113f4fdc93adfeeea2dc664ed68f3bdc4 (diff)
downloadFreeBSD-src-a6adaa3c235fe0f54b50a73bea13297603dbb5b7.zip
FreeBSD-src-a6adaa3c235fe0f54b50a73bea13297603dbb5b7.tar.gz
urtwn, rtwn, rsu: switch to ieee80211_add_channel_list_2ghz().
- Use device's channel list instead of default one (from ieee80211_init_channels()); adds 12 - 14 2GHz channels. - Add ic_getradiocaps() method.
Diffstat (limited to 'sys/dev/rtwn')
-rw-r--r--sys/dev/rtwn/if_rtwn.c30
-rw-r--r--sys/dev/rtwn/if_rtwnreg.h2
2 files changed, 26 insertions, 6 deletions
diff --git a/sys/dev/rtwn/if_rtwn.c b/sys/dev/rtwn/if_rtwn.c
index d800475..3ae0c1a 100644
--- a/sys/dev/rtwn/if_rtwn.c
+++ b/sys/dev/rtwn/if_rtwn.c
@@ -172,6 +172,8 @@ static void rtwn_set_rx_bssid_all(struct rtwn_softc *, int);
static void rtwn_set_gain(struct rtwn_softc *, uint8_t);
static void rtwn_scan_start(struct ieee80211com *);
static void rtwn_scan_end(struct ieee80211com *);
+static void rtwn_getradiocaps(struct ieee80211com *, int, int *,
+ struct ieee80211_channel[]);
static void rtwn_set_channel(struct ieee80211com *);
static void rtwn_update_mcast(struct ieee80211com *);
static void rtwn_set_chan(struct rtwn_softc *,
@@ -230,6 +232,9 @@ MODULE_DEPEND(rtwn, pci, 1, 1, 1);
MODULE_DEPEND(rtwn, wlan, 1, 1, 1);
MODULE_DEPEND(rtwn, firmware, 1, 1, 1);
+static const uint8_t rtwn_chan_2ghz[] =
+ { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 };
+
static int
rtwn_probe(device_t dev)
{
@@ -251,7 +256,6 @@ rtwn_attach(device_t dev)
struct rtwn_softc *sc = device_get_softc(dev);
struct ieee80211com *ic = &sc->sc_ic;
uint32_t lcsr;
- uint8_t bands[IEEE80211_MODE_BYTES];
int i, count, error, rid;
sc->sc_dev = dev;
@@ -352,17 +356,18 @@ rtwn_attach(device_t dev)
| IEEE80211_C_WME /* 802.11e */
;
- memset(bands, 0, sizeof(bands));
- setbit(bands, IEEE80211_MODE_11B);
- setbit(bands, IEEE80211_MODE_11G);
- ieee80211_init_channels(ic, NULL, bands);
+ /* XXX TODO: setup regdomain if R92C_CHANNEL_PLAN_BY_HW bit is set. */
+
+ rtwn_getradiocaps(ic, IEEE80211_CHAN_MAX, &ic->ic_nchans,
+ ic->ic_channels);
ieee80211_ifattach(ic);
ic->ic_wme.wme_update = rtwn_updateedca;
ic->ic_update_mcast = rtwn_update_mcast;
- ic->ic_scan_start =rtwn_scan_start;
+ ic->ic_scan_start = rtwn_scan_start;
ic->ic_scan_end = rtwn_scan_end;
+ ic->ic_getradiocaps = rtwn_getradiocaps;
ic->ic_set_channel = rtwn_set_channel;
ic->ic_raw_xmit = rtwn_raw_xmit;
ic->ic_transmit = rtwn_transmit;
@@ -2717,6 +2722,19 @@ rtwn_scan_end(struct ieee80211com *ic)
}
static void
+rtwn_getradiocaps(struct ieee80211com *ic,
+ int maxchans, int *nchans, struct ieee80211_channel chans[])
+{
+ uint8_t bands[IEEE80211_MODE_BYTES];
+
+ memset(bands, 0, sizeof(bands));
+ setbit(bands, IEEE80211_MODE_11B);
+ setbit(bands, IEEE80211_MODE_11G);
+ ieee80211_add_channel_list_2ghz(chans, maxchans, nchans,
+ rtwn_chan_2ghz, nitems(rtwn_chan_2ghz), bands, 0);
+}
+
+static void
rtwn_set_channel(struct ieee80211com *ic)
{
struct rtwn_softc *sc = ic->ic_softc;
diff --git a/sys/dev/rtwn/if_rtwnreg.h b/sys/dev/rtwn/if_rtwnreg.h
index 1992e83..6fc970c 100644
--- a/sys/dev/rtwn/if_rtwnreg.h
+++ b/sys/dev/rtwn/if_rtwnreg.h
@@ -1014,6 +1014,8 @@ struct r92c_rom {
uint8_t rf_opt3;
uint8_t rf_opt4;
uint8_t channel_plan;
+#define R92C_CHANNEL_PLAN_BY_HW 0x80
+
uint8_t version;
uint8_t curstomer_id;
} __packed;
OpenPOWER on IntegriCloud