Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F136630496
D6144.id15711.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D6144.id15711.diff
View Options
Index: sys/dev/usb/wlan/if_run.c
===================================================================
--- sys/dev/usb/wlan/if_run.c
+++ sys/dev/usb/wlan/if_run.c
@@ -423,6 +423,8 @@
static void run_rt5592_set_chan(struct run_softc *, u_int);
static int run_set_chan(struct run_softc *, struct ieee80211_channel *);
static void run_set_channel(struct ieee80211com *);
+static void run_getradiocaps(struct ieee80211com *, int, int *,
+ struct ieee80211_channel[]);
static void run_scan_start(struct ieee80211com *);
static void run_scan_end(struct ieee80211com *);
static void run_update_beacon(struct ieee80211vap *, int);
@@ -704,7 +706,6 @@
struct usb_attach_arg *uaa = device_get_ivars(self);
struct ieee80211com *ic = &sc->sc_ic;
uint32_t ver;
- uint8_t bands[howmany(IEEE80211_MODE_MAX, 8)];
uint8_t iface_index;
int ntries, error;
@@ -786,20 +787,15 @@
ic->ic_flags |= IEEE80211_F_DATAPAD;
ic->ic_flags_ext |= IEEE80211_FEXT_SWBMISS;
- memset(bands, 0, sizeof(bands));
- setbit(bands, IEEE80211_MODE_11B);
- setbit(bands, IEEE80211_MODE_11G);
- if (sc->rf_rev == RT2860_RF_2750 || sc->rf_rev == RT2860_RF_2850 ||
- sc->rf_rev == RT3070_RF_3052 || sc->rf_rev == RT3593_RF_3053 ||
- sc->rf_rev == RT5592_RF_5592)
- setbit(bands, IEEE80211_MODE_11A);
- ieee80211_init_channels(ic, NULL, bands);
+ run_getradiocaps(ic, IEEE80211_CHAN_MAX, &ic->ic_nchans,
+ ic->ic_channels);
ieee80211_ifattach(ic);
ic->ic_scan_start = run_scan_start;
ic->ic_scan_end = run_scan_end;
ic->ic_set_channel = run_set_channel;
+ ic->ic_getradiocaps = run_getradiocaps;
ic->ic_node_alloc = run_node_alloc;
ic->ic_newassoc = run_newassoc;
ic->ic_updateslot = run_updateslot;
@@ -4784,6 +4780,28 @@
}
static void
+run_getradiocaps(struct ieee80211com *ic,
+ int maxchans, int *nchans, struct ieee80211_channel chans[])
+{
+ struct run_softc *sc = ic->ic_softc;
+ uint8_t bands[howmany(IEEE80211_MODE_MAX, 8)];
+
+ memset(bands, 0, sizeof(bands));
+ setbit(bands, IEEE80211_MODE_11B);
+ setbit(bands, IEEE80211_MODE_11G);
+ ieee80211_add_channel_list_2ghz(chans, maxchans, nchans,
+ run_chan_2ghz, nitems(run_chan_2ghz), bands, 0);
+
+ if (sc->rf_rev == RT2860_RF_2750 || sc->rf_rev == RT2860_RF_2850 ||
+ sc->rf_rev == RT3070_RF_3052 || sc->rf_rev == RT3593_RF_3053 ||
+ sc->rf_rev == RT5592_RF_5592) {
+ setbit(bands, IEEE80211_MODE_11A);
+ ieee80211_add_channel_list_5ghz(chans, maxchans, nchans,
+ run_chan_5ghz, nitems(run_chan_5ghz), bands, 0);
+ }
+}
+
+static void
run_scan_start(struct ieee80211com *ic)
{
struct run_softc *sc = ic->ic_softc;
Index: sys/dev/usb/wlan/if_runreg.h
===================================================================
--- sys/dev/usb/wlan/if_runreg.h
+++ sys/dev/usb/wlan/if_runreg.h
@@ -1084,6 +1084,18 @@
{ 137, 0x0f }
/*
+ * Channel map for run(4) driver; taken from the table below.
+ */
+static const uint8_t run_chan_2ghz[] =
+ { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 };
+
+static const uint8_t run_chan_5ghz[] =
+ { 36, 38, 40, 44, 46, 48, 52, 54, 56, 60, 62, 64, 100, 102, 104,
+ 108, 110, 112, 116, 118, 120, 124, 126, 128, 132, 134, 136, 140,
+ 149, 151, 153, 157, 159, 161, 165, 167, 169, 171, 173,
+ 184, 188, 192, 196, 208, 212, 216 };
+
+/*
* Default settings for RF registers; values derived from the reference driver.
*/
#define RT2860_RF2850 \
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Nov 19, 4:05 PM (17 h, 53 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25650630
Default Alt Text
D6144.id15711.diff (3 KB)
Attached To
Mode
D6144: run: switch to ieee80211_add_channel_list_*()
Attached
Detach File
Event Timeline
Log In to Comment