/* * Setup the channel list for the specified regulatory domain, * country code, and operating modes. This interface is used * when a driver does not obtain the channel list from another * source (such as firmware). */ int ieee80211_init_channels(struct ieee80211com *ic, const struct ieee80211_regdomain *rd, const uint8_t bands[]) { int i; /* XXX just do something for now */ ic->ic_nchans = 0; if (isset(bands, IEEE80211_MODE_11B) || isset(bands, IEEE80211_MODE_11G)) { int maxchan = 11; if (rd != NULL && rd->ecm) maxchan = 14; for (i = 1; i <= maxchan; i++) { if (isset(bands, IEEE80211_MODE_11B)) addchan(ic, i, IEEE80211_CHAN_B); if (isset(bands, IEEE80211_MODE_11G)) addchan(ic, i, IEEE80211_CHAN_G); } } if (isset(bands, IEEE80211_MODE_11A)) { for (i = 36; i <= 64; i += 4) addchan(ic, i, IEEE80211_CHAN_A); for (i = 100; i <= 140; i += 4) addchan(ic, i, IEEE80211_CHAN_A); for (i = 149; i <= 161; i += 4) addchan(ic, i, IEEE80211_CHAN_A); } if (rd != NULL) ic->ic_regdomain = *rd; return 0; }
static int add_chanlist_band(struct ath_hal *ah, struct ieee80211_channel chans[], int maxchans, int *nchans, uint16_t freq_lo, uint16_t freq_hi, int step, uint32_t flags, REG_DMN_FREQ_BAND *fband, REG_DOMAIN *rd) { uint16_t freq = freq_lo; int error; if (freq_hi < freq_lo) return (0); error = addchan(ah, chans, maxchans, nchans, freq, flags, fband, rd); for (freq += step; freq <= freq_hi && error == 0; freq += step) error = copychan_prev(ah, chans, maxchans, nchans, freq); return (error); }
void getstatement(void) /* get next statement */ { EPNODE *ep; char *qname; VARDEF *vdef; if (nextc == ';') { /* empty statement */ scan(); return; } if (esupport&E_OUTCHAN && nextc == '$') { /* channel assignment */ ep = getchan(); addchan(ep); } else { /* ordinary definition */ ep = getdefn(); qname = qualname(dname(ep), 0); if (esupport&E_REDEFW && (vdef = varlookup(qname)) != NULL) { if (vdef->def != NULL && epcmp(ep, vdef->def)) { wputs(qname); if (vdef->def->type == ':') wputs(": redefined constant expression\n"); else wputs(": redefined\n"); } else if (ep->v.kid->type == FUNC && vdef->lib != NULL) { wputs(qname); wputs(": definition hides library function\n"); } } if (ep->type == ':') dremove(qname); else dclear(qname); dpush(qname, ep); } if (nextc != EOF) { if (nextc != ';') syntax("';' expected"); scan(); } }
static int add_chanlist_band(struct ath_hal *ah, struct ieee80211_channel chans[], int maxchans, int *nchans, uint16_t freq_lo, uint16_t freq_hi, int step, uint32_t flags, REG_DMN_FREQ_BAND *fband, REG_DOMAIN *rd) { uint16_t freq = freq_lo; int error; if (freq_hi < freq_lo) return (0); HALDEBUG(ah, HAL_DEBUG_REGDOMAIN, "%s: freq=%d..%d, flags=0x%08x, step=%d\n", __func__, (int) freq_lo, (int) freq_hi, flags, step); error = addchan(ah, chans, maxchans, nchans, freq, flags, fband, rd); for (freq += step; freq <= freq_hi && error == 0; freq += step) error = copychan_prev(ah, chans, maxchans, nchans, freq, flags); return (error); }
/* * Setup the channel list for the specified regulatory domain, * country code, and operating modes. This interface is used * when a driver does not obtain the channel list from another * source (such as firmware). */ int ieee80211_init_channels(struct ieee80211com *ic, const struct ieee80211_regdomain *rd, const uint8_t bands[]) { int i; /* XXX just do something for now */ ic->ic_nchans = 0; if (isset(bands, IEEE80211_MODE_11B) || isset(bands, IEEE80211_MODE_11G) || isset(bands, IEEE80211_MODE_11NG)) { int maxchan = 11; if (rd != NULL && rd->ecm) maxchan = 14; for (i = 1; i <= maxchan; i++) { if (isset(bands, IEEE80211_MODE_11B)) addchan(ic, i, IEEE80211_CHAN_B); if (isset(bands, IEEE80211_MODE_11G)) addchan(ic, i, IEEE80211_CHAN_G); if (isset(bands, IEEE80211_MODE_11NG)) { addchan(ic, i, IEEE80211_CHAN_G | IEEE80211_CHAN_HT20); } if ((ic->ic_htcaps & IEEE80211_HTCAP_CHWIDTH40) == 0) continue; if (i <= 7) { addchan(ic, i, IEEE80211_CHAN_G | IEEE80211_CHAN_HT40U); addchan(ic, i + 4, IEEE80211_CHAN_G | IEEE80211_CHAN_HT40D); } } } if (isset(bands, IEEE80211_MODE_11A) || isset(bands, IEEE80211_MODE_11NA)) { for (i = 36; i <= 64; i += 4) { addchan(ic, i, IEEE80211_CHAN_A); if (isset(bands, IEEE80211_MODE_11NA)) { addchan(ic, i, IEEE80211_CHAN_A | IEEE80211_CHAN_HT20); } if ((ic->ic_htcaps & IEEE80211_HTCAP_CHWIDTH40) == 0) continue; if ((i % 8) == 4) { addchan(ic, i, IEEE80211_CHAN_A | IEEE80211_CHAN_HT40U); addchan(ic, i + 4, IEEE80211_CHAN_A | IEEE80211_CHAN_HT40D); } } for (i = 100; i <= 140; i += 4) { addchan(ic, i, IEEE80211_CHAN_A); if (isset(bands, IEEE80211_MODE_11NA)) { addchan(ic, i, IEEE80211_CHAN_A | IEEE80211_CHAN_HT20); } if ((ic->ic_htcaps & IEEE80211_HTCAP_CHWIDTH40) == 0) continue; if ((i % 8) == 4 && i != 140) { addchan(ic, i, IEEE80211_CHAN_A | IEEE80211_CHAN_HT40U); addchan(ic, i + 4, IEEE80211_CHAN_A | IEEE80211_CHAN_HT40D); } } for (i = 149; i <= 161; i += 4) { addchan(ic, i, IEEE80211_CHAN_A); if (isset(bands, IEEE80211_MODE_11NA)) { addchan(ic, i, IEEE80211_CHAN_A | IEEE80211_CHAN_HT20); } if ((ic->ic_htcaps & IEEE80211_HTCAP_CHWIDTH40) == 0) continue; if ((i % 8) == 5) { addchan(ic, i, IEEE80211_CHAN_A | IEEE80211_CHAN_HT40U); addchan(ic, i + 4, IEEE80211_CHAN_A | IEEE80211_CHAN_HT40D); } } } if (rd != NULL) ic->ic_regdomain = *rd; return 0; }