Remove some hard-coded IE assembly over to use net80211 methods.

PR:		kern/196069
Submitted by:	 Andriy Voskoboinyk <s3erios@gmail.com>
This commit is contained in:
Adrian Chadd 2014-12-20 20:07:48 +00:00
parent d66bcddce4
commit e54c8bda3e
2 changed files with 7 additions and 25 deletions

View File

@ -2564,7 +2564,7 @@ wpi_scan(struct wpi_softc *sc)
struct ieee80211_channel *c;
enum ieee80211_phymode mode;
uint8_t *frm;
int nrates, pktlen, error, i, nssid;
int pktlen, error, i, nssid;
bus_addr_t physaddr;
desc = &ring->desc[ring->cur];
@ -2613,7 +2613,7 @@ wpi_scan(struct wpi_softc *sc)
nssid = MIN(ss->ss_nssid, WPI_SCAN_MAX_ESSIDS);
for (i = 0; i < nssid; i++) {
hdr->scan_essids[i].id = IEEE80211_ELEMID_SSID;
hdr->scan_essids[i].esslen = MIN(ss->ss_ssid[i].len, 32);
hdr->scan_essids[i].esslen = MIN(ss->ss_ssid[i].len, IEEE80211_NWID_LEN);
memcpy(hdr->scan_essids[i].essid, ss->ss_ssid[i].ssid,
hdr->scan_essids[i].esslen);
#ifdef WPI_DEBUG
@ -2630,7 +2630,7 @@ wpi_scan(struct wpi_softc *sc)
* Build a probe request frame. Most of the following code is a
* copy & paste of what is done in net80211.
*/
wh = (struct ieee80211_frame *)&hdr->scan_essids[4];
wh = (struct ieee80211_frame *)&hdr->scan_essids[WPI_SCAN_MAX_ESSIDS];
wh->i_fc[0] = IEEE80211_FC0_VERSION_0 | IEEE80211_FC0_TYPE_MGT |
IEEE80211_FC0_SUBTYPE_PROBE_REQ;
wh->i_fc[1] = IEEE80211_FC1_DIR_NODS;
@ -2642,30 +2642,12 @@ wpi_scan(struct wpi_softc *sc)
frm = (uint8_t *)(wh + 1);
/* add essid IE, the hardware will fill this in for us */
*frm++ = IEEE80211_ELEMID_SSID;
*frm++ = 0;
mode = ieee80211_chan2mode(ic->ic_curchan);
rs = &ic->ic_sup_rates[mode];
/* add supported rates IE */
*frm++ = IEEE80211_ELEMID_RATES;
nrates = rs->rs_nrates;
if (nrates > IEEE80211_RATE_SIZE)
nrates = IEEE80211_RATE_SIZE;
*frm++ = nrates;
memcpy(frm, rs->rs_rates, nrates);
frm += nrates;
/* add supported xrates IE */
if (rs->rs_nrates > IEEE80211_RATE_SIZE) {
nrates = rs->rs_nrates - IEEE80211_RATE_SIZE;
*frm++ = IEEE80211_ELEMID_XRATES;
*frm++ = nrates;
memcpy(frm, rs->rs_rates + IEEE80211_RATE_SIZE, nrates);
frm += nrates;
}
frm = ieee80211_add_ssid(frm, NULL, 0);
frm = ieee80211_add_rates(frm, rs);
frm = ieee80211_add_xrates(frm, rs);
/* setup length of probe request */
hdr->tx.len = htole16(frm - (uint8_t *)wh);

View File

@ -511,7 +511,7 @@ struct {
struct {
uint8_t id;
uint8_t esslen;
uint8_t essid[32];
uint8_t essid[IEEE80211_NWID_LEN];
}scan_essids[WPI_SCAN_MAX_ESSIDS];
/* followed by probe request body */
/* followed by nchan x wpi_scan_chan */