Ejemplo n.º 1
0
/*
 * 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;
}
Ejemplo n.º 2
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);
}
Ejemplo n.º 3
0
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();
    }
}
Ejemplo n.º 4
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);

	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);
}
Ejemplo n.º 5
0
/*
 * 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;
}