Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Jan 2009 01:31:08 +0000 (UTC)
From:      Sam Leffler <sam@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r187509 - in user/sam/wifi/sys/dev/ath: . ath_hal ath_hal/ar5210 ath_hal/ar5211 ath_hal/ar5212 ath_hal/ar5312 ath_hal/ar5416
Message-ID:  <200901210131.n0L1V8qb062589@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: sam
Date: Wed Jan 21 01:31:08 2009
New Revision: 187509
URL: http://svn.freebsd.org/changeset/base/187509

Log:
  Checkpoint regulatory gutting:
  o move toward eliminating HAL_CHANNEL; for now it's still present but
    rework api's so a switch to an 802.11 channel is more possible
  o move toward stripping duplicate info from HAL_CHANNEL_INTERNAL; this
    is now referenced using ic_devdata in the 802.11 channel and real soon
    all callers will have the 802.11 channel to find the frequency and
    channel attributes (the only issue remaining is ath_hal_process_noisefloor)
  o eliminate code to write the HAL_CHANNEL on channel change; this was
    done to update the tx power for AR/DFS after a reset (so tx power
    scaling and CTL enforcement was applied) but was wrong and needs to
    be handled differently
  o change getChipPowerLimits api to work on a single channel
  o change ath_hal_getctl api to work on an internal channel
  o overhaul regulatory code:
    - remove per-country regulatory constraint work: having the hal construct
      this state duplicates what's already done in layers above; instead we'll
      push any initial sku/country code up as a hint that can be acted on to
      form regulatory state that is plumbed
    - switch to net80211 country code definitions
    - strip 900Mhz stuff; we can now handle this entirely in the driver
    - remove channel sorting; instead tag 802.11 channels with the index of
      the internal channel table (for now we check the frequency and flags
      to insure a match but eventually we'll ditch that and also compress
      all entries for a frequency into one)
    - remove various enforcements that are now meaningless; all we want to do
      is construct an initial regulatory hint/channel list from the EEPROM and
      thereafter trust channel lists that come down from above
    - move CTL to HAL_CHANNEL_INTERNAL for now; it'll be constructed on the
      fly once we merge channel entries for the same frequency
    - change ath_hal_init_channels api to operate directly on 802.11 channels;
      this call is used to check the EEPROM and construct an initial channel
      list (but the api also permits explicit override, use CTRY_DEFAULT/SKU_NONE
      to use the EEPROM contents)
    - add ath_hal_getchannels api to retrieve a channel list according to
      builtin rules but without altering any runtime state (unlike
      ath_hal_init_channels); this is used, in particular, to retrieve the
      device capabilities needed by the getradiocaps driver callback
    - add ath_hal_set_channels api to take 802.11 regulatory state and setup
      required internal state such as CTL's; this is used to implement the
      setregdomain driver callback
    - remove ah_countryCode from the internal state; it's no longer needed
    - move CHANNEL_NFCREQUIRED from privFlags to channelFlags (for now); it
      will eventually use one of the driver-private bits in ic_flags
    - change ar5212GetChipPowerLimits to not apply power scaling and CTL's
      to the values returned for min/max tx power; using ar5212SetRateTable
      to do this was bad as it clobbers runtime state (need to revisit)
    - add new status codes to disambiguate errors in regulatory calls
    - move CHANNEL_DFS to match net80211 definition
    - move CHANNEL_4MS_LIMIT to match net80211 definition
    - remove CTRY_DEBUG and CTRY_DEFAULT in favor of net80211 defs
    - remove ath_hal_isgsmsku; the hal no longer knows about GSM

Modified:
  user/sam/wifi/sys/dev/ath/ath_hal/ah.c
  user/sam/wifi/sys/dev/ath/ath_hal/ah.h
  user/sam/wifi/sys/dev/ath/ath_hal/ah_internal.h
  user/sam/wifi/sys/dev/ath/ath_hal/ah_regdomain.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210.h
  user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210_misc.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210_reset.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5211/ar5211.h
  user/sam/wifi/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5211/ar5211_misc.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5211/ar5211_reset.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar2413.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar2425.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar5111.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar5112.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar5212.h
  user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar5212_ani.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar5212_reset.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar5413.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5312/ar5312_reset.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5416/ar2133.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5416/ar5416.h
  user/sam/wifi/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c
  user/sam/wifi/sys/dev/ath/ath_hal/ar5416/ar5416_cal.h
  user/sam/wifi/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c
  user/sam/wifi/sys/dev/ath/if_ath.c

Modified: user/sam/wifi/sys/dev/ath/ath_hal/ah.c
==============================================================================
--- user/sam/wifi/sys/dev/ath/ath_hal/ah.c	Wed Jan 21 00:56:28 2009	(r187508)
+++ user/sam/wifi/sys/dev/ath/ath_hal/ah.c	Wed Jan 21 01:31:08 2009	(r187509)
@@ -272,7 +272,7 @@ typedef enum {
 } WIRELESS_MODE;
 
 static WIRELESS_MODE
-ath_hal_chan2wmode(struct ath_hal *ah, const HAL_CHANNEL *chan)
+ath_hal_chan2wmode(struct ath_hal *ah, const HAL_CHANNEL_INTERNAL *chan)
 {
 	if (IS_CHAN_CCK(chan))
 		return WIRELESS_MODE_11b;
@@ -294,7 +294,7 @@ static const uint8_t CLOCK_RATE[]  = { 4
 u_int
 ath_hal_mac_clks(struct ath_hal *ah, u_int usecs)
 {
-	const HAL_CHANNEL *c = (const HAL_CHANNEL *) AH_PRIVATE(ah)->ah_curchan;
+	const HAL_CHANNEL_INTERNAL *c = AH_PRIVATE(ah)->ah_curchan;
 	u_int clks;
 
 	/* NB: ah_curchan may be null when called attach time */
@@ -314,7 +314,7 @@ ath_hal_mac_clks(struct ath_hal *ah, u_i
 u_int
 ath_hal_mac_usec(struct ath_hal *ah, u_int clks)
 {
-	const HAL_CHANNEL *c = (const HAL_CHANNEL *) AH_PRIVATE(ah)->ah_curchan;
+	const HAL_CHANNEL_INTERNAL *c = AH_PRIVATE(ah)->ah_curchan;
 	u_int usec;
 
 	/* NB: ah_curchan may be null when called attach time */
@@ -704,7 +704,7 @@ static const int16_t NOISE_FLOOR[] = { -
  *     implement the ah_getChanNoise method.
  */
 int16_t
-ath_hal_getChanNoise(struct ath_hal *ah, HAL_CHANNEL *chan)
+ath_hal_getChanNoise(struct ath_hal *ah, const HAL_CHANNEL *chan)
 {
 	HAL_CHANNEL_INTERNAL *ichan;
 
@@ -716,7 +716,7 @@ ath_hal_getChanNoise(struct ath_hal *ah,
 		return 0;
 	}
 	if (ichan->rawNoiseFloor == 0) {
-		WIRELESS_MODE mode = ath_hal_chan2wmode(ah, chan);
+		WIRELESS_MODE mode = ath_hal_chan2wmode(ah, ichan);
 
 		HALASSERT(mode < WIRELESS_MODE_MAX);
 		return NOISE_FLOOR[mode] + ath_hal_getNfAdjust(ah, ichan);
@@ -751,7 +751,7 @@ ath_hal_process_noisefloor(struct ath_ha
 		c = &AH_PRIVATE(ah)->ah_channels[i];
 		if (c->rawNoiseFloor >= 0)
 			continue;
-		mode = ath_hal_chan2wmode(ah, (HAL_CHANNEL *) c);
+		mode = ath_hal_chan2wmode(ah, c);
 		HALASSERT(mode < WIRELESS_MODE_MAX);
 		nf = c->rawNoiseFloor + NOISE_FLOOR[mode] +
 			ath_hal_getNfAdjust(ah, c);

Modified: user/sam/wifi/sys/dev/ath/ath_hal/ah.h
==============================================================================
--- user/sam/wifi/sys/dev/ath/ath_hal/ah.h	Wed Jan 21 00:56:28 2009	(r187508)
+++ user/sam/wifi/sys/dev/ath/ath_hal/ah.h	Wed Jan 21 01:31:08 2009	(r187509)
@@ -63,6 +63,8 @@ typedef enum {
 	HAL_ENOTSUPP	= 13,	/* Hardware revision not supported */
 	HAL_ESELFTEST	= 14,	/* Hardware self-test failed */
 	HAL_EINPROGRESS	= 15,	/* Operation incomplete */
+	HAL_EEBADREG	= 16,	/* EEPROM invalid regulatory contents */
+	HAL_EEBADCC	= 17,	/* EEPROM invalid country code */
 } HAL_STATUS;
 
 typedef enum {
@@ -362,19 +364,17 @@ typedef enum {
 	HAL_RFGAIN_NEED_CHANGE		= 2
 } HAL_RFGAIN;
 
-/*
- * Channels are specified by frequency.
- */
+typedef uint16_t HAL_CTRY_CODE;		/* country code */
+typedef uint16_t HAL_REG_DOMAIN;		/* regulatory domain code */
+
 typedef struct {
-	uint32_t	channelFlags;	/* see below */
-	uint16_t	channel;	/* setting in Mhz */
-	uint8_t		privFlags;
-	int8_t		maxRegTxPower;	/* max regulatory tx power in dBm */
-	int8_t		maxTxPower;	/* max true tx power in 0.5 dBm */
-	int8_t		minTxPower;	/* min true tx power in 0.5 dBm */
+	uint32_t	channelFlags;
+	uint16_t	channel;	/* NB: must be first for casting */
+	uint16_t	devdata;	/* XXX temp */
 } HAL_CHANNEL;
 
 /* channelFlags */
+#define	CHANNEL_NFCREQUIRED 0x01 /* channel requires noise floor check */
 #define	CHANNEL_CW_INT	0x00002	/* CW interference detected on channel */
 #define	CHANNEL_TURBO	0x00010	/* Turbo Channel */
 #define	CHANNEL_CCK	0x00020	/* CCK channel */
@@ -389,15 +389,8 @@ typedef struct {
 #define	CHANNEL_HT20	0x10000 /* 11n 20MHZ channel */ 
 #define	CHANNEL_HT40PLUS 0x20000 /* 11n 40MHZ channel w/ ext chan above */
 #define	CHANNEL_HT40MINUS 0x40000 /* 11n 40MHZ channel w/ ext chan below */
-
-/* privFlags */
-#define CHANNEL_INTERFERENCE   	0x01 /* Software use: channel interference 
-				        used for as AR as well as RADAR 
-				        interference detection */
-#define CHANNEL_DFS		0x02 /* DFS required on channel */
-#define CHANNEL_4MS_LIMIT	0x04 /* 4msec packet limit on this channel */
-#define	CHANNEL_NFCREQUIRED	0x08 /* channel requires noise floor check */
-#define	CHANNEL_IQVALID		0x10 /* IQ calibration valid */
+#define CHANNEL_DFS	0x80000 /* DFS required on channel */
+#define CHANNEL_4MS_LIMIT 0x00100000 /* 4msec packet limit on this channel */
 
 #define	CHANNEL_A	(CHANNEL_5GHZ|CHANNEL_OFDM)
 #define	CHANNEL_B	(CHANNEL_2GHZ|CHANNEL_CCK)
@@ -435,14 +428,6 @@ typedef struct {
 	uint32_t	beacons;
 } HAL_MIB_STATS;
 
-typedef uint16_t HAL_CTRY_CODE;		/* country code */
-typedef uint16_t HAL_REG_DOMAIN;		/* regulatory domain code */
-
-enum {
-	CTRY_DEBUG	= 0x1ff,		/* debug country code */
-	CTRY_DEFAULT	= 0			/* default country code */
-};
-
 enum {
 	HAL_MODE_11A	= 0x001,		/* 11a channels */
 	HAL_MODE_TURBO	= 0x002,		/* 11a turbo-only channels */
@@ -666,16 +651,18 @@ struct ath_hal {
 
 	/* Reset functions */
 	HAL_BOOL  __ahdecl(*ah_reset)(struct ath_hal *, HAL_OPMODE,
-				HAL_CHANNEL *, HAL_BOOL bChannelChange,
-				HAL_STATUS *status);
+				HAL_CHANNEL *,
+				HAL_BOOL bChannelChange, HAL_STATUS *status);
 	HAL_BOOL  __ahdecl(*ah_phyDisable)(struct ath_hal *);
 	HAL_BOOL  __ahdecl(*ah_disable)(struct ath_hal *);
 	void	  __ahdecl(*ah_setPCUConfig)(struct ath_hal *);
-	HAL_BOOL  __ahdecl(*ah_perCalibration)(struct ath_hal*, HAL_CHANNEL *,
-			HAL_BOOL *);
-	HAL_BOOL  __ahdecl(*ah_perCalibrationN)(struct ath_hal *, HAL_CHANNEL *,
-			u_int chainMask, HAL_BOOL longCal, HAL_BOOL *isCalDone);
-	HAL_BOOL  __ahdecl(*ah_resetCalValid)(struct ath_hal *, HAL_CHANNEL *);
+	HAL_BOOL  __ahdecl(*ah_perCalibration)(struct ath_hal*,
+			HAL_CHANNEL *, HAL_BOOL *);
+	HAL_BOOL  __ahdecl(*ah_perCalibrationN)(struct ath_hal *,
+			HAL_CHANNEL *, u_int chainMask,
+			HAL_BOOL longCal, HAL_BOOL *isCalDone);
+	HAL_BOOL  __ahdecl(*ah_resetCalValid)(struct ath_hal *,
+			const HAL_CHANNEL *);
 	HAL_BOOL  __ahdecl(*ah_setTxPowerLimit)(struct ath_hal *, uint32_t);
 
 	/* Transmit functions */
@@ -736,7 +723,8 @@ struct ath_hal {
 				struct ath_desc *next, uint64_t tsf,
 				struct ath_rx_status *);
 	void	  __ahdecl(*ah_rxMonitor)(struct ath_hal *,
-				const HAL_NODE_STATS *, HAL_CHANNEL *);
+				const HAL_NODE_STATS *,
+				const HAL_CHANNEL *);
 	void	  __ahdecl(*ah_procMibEvent)(struct ath_hal *,
 				const HAL_NODE_STATS *);
 
@@ -805,7 +793,8 @@ struct ath_hal {
 	HAL_BOOL  __ahdecl(*ah_setPowerMode)(struct ath_hal*,
 				HAL_POWER_MODE mode, int setChip);
 	HAL_POWER_MODE __ahdecl(*ah_getPowerMode)(struct ath_hal*);
-	int16_t   __ahdecl(*ah_getChanNoise)(struct ath_hal *, HAL_CHANNEL *);
+	int16_t   __ahdecl(*ah_getChanNoise)(struct ath_hal *,
+				const HAL_CHANNEL *);
 
 	/* Beacon Management Functions */
 	void	  __ahdecl(*ah_setBeaconTimers)(struct ath_hal*,
@@ -848,20 +837,48 @@ extern	struct ath_hal * __ahdecl ath_hal
 		HAL_BUS_TAG, HAL_BUS_HANDLE, HAL_STATUS* status);
 
 /*
- * Return a list of channels available for use with the hardware.
- * The list is based on what the hardware is capable of, the specified
- * country code, the modeSelect mask, and whether or not outdoor
- * channels are to be permitted.
+ * Regulatory interfaces.  Drivers should use ath_hal_init_channels to
+ * request a set of channels for a particular country code and/or
+ * regulatory domain.  If CTRY_DEFAULT and SKU_NONE are specified then
+ * this list is constructed according to the contents of the EEPROM.
+ * ath_hal_getchannels acts similarly but does not alter the operating
+ * state; this can be used to collect information for a particular
+ * regulatory configuration.  Finally ath_hal_set_channels installs a
+ * channel list constructed outside the driver.  The HAL will adopt the
+ * channel list and setup internal state according to the specified
+ * regulatory configuration (e.g. conformance test limits).
  *
- * The channel list is returned in the supplied array.  maxchans
- * defines the maximum size of this array.  nchans contains the actual
- * number of channels returned.  If a problem occurred or there were
- * no channels that met the criteria then AH_FALSE is returned.
- */
-extern	HAL_BOOL __ahdecl ath_hal_init_channels(struct ath_hal *,
-		HAL_CHANNEL *chans, u_int maxchans, u_int *nchans,
-		HAL_CTRY_CODE cc, u_int modeSelect,
-		HAL_BOOL enableExtendedChannels);
+ * For all interfaces the channel list is returned in the supplied array.
+ * maxchans defines the maximum size of this array.  nchans contains the
+ * actual number of channels returned.  If a problem occurred then a
+ * status code != HAL_OK is returned.
+ */
+struct ieee80211_channel;
+
+/*
+ * Return a list of channels according to the specified regulatory.
+ */
+extern	HAL_STATUS __ahdecl ath_hal_getchannels(struct ath_hal *,
+    struct ieee80211_channel *chans, u_int maxchans, int *nchans,
+    u_int modeSelect, HAL_CTRY_CODE cc, HAL_REG_DOMAIN regDmn,
+    HAL_BOOL enableExtendedChannels);
+
+/*
+ * Return a list of channels and install it as the current operating
+ * regulatory list.
+ */
+extern	HAL_STATUS __ahdecl ath_hal_init_channels(struct ath_hal *,
+    struct ieee80211_channel *chans, u_int maxchans, int *nchans,
+    u_int modeSelect, HAL_CTRY_CODE cc, HAL_REG_DOMAIN rd,
+    HAL_BOOL enableExtendedChannels);
+
+/*
+ * Install the list of channels as the current operating regulatory
+ * and setup related state according to the country code and sku.
+ */
+extern	HAL_STATUS __ahdecl ath_hal_set_channels(struct ath_hal *,
+    struct ieee80211_channel *chans, int nchans,
+    HAL_CTRY_CODE cc, HAL_REG_DOMAIN regDmn);
 
 /*
  * Calibrate noise floor data following a channel scan or similar.
@@ -880,9 +897,4 @@ extern	u_int __ahdecl ath_hal_getwireles
 extern uint16_t __ahdecl ath_hal_computetxtime(struct ath_hal *,
 		const HAL_RATE_TABLE *rates, uint32_t frameLen,
 		uint16_t rateix, HAL_BOOL shortPreamble);
-
-/*
- * Return if device is operating in 900 MHz band.
- */
-extern HAL_BOOL ath_hal_isgsmsku(struct ath_hal *);
 #endif /* _ATH_AH_H_ */

Modified: user/sam/wifi/sys/dev/ath/ath_hal/ah_internal.h
==============================================================================
--- user/sam/wifi/sys/dev/ath/ath_hal/ah_internal.h	Wed Jan 21 00:56:28 2009	(r187508)
+++ user/sam/wifi/sys/dev/ath/ath_hal/ah_internal.h	Wed Jan 21 01:31:08 2009	(r187509)
@@ -108,27 +108,35 @@ OS_DATA_SET(ah_rfs, _name##_rf)
 struct ath_hal_rf *ath_hal_rfprobe(struct ath_hal *ah, HAL_STATUS *ecode);
 
 /*
- * Internal form of a HAL_CHANNEL.  Note that the structure
- * must be defined such that you can cast references to a
- * HAL_CHANNEL so don't shuffle the first two members.
+ * Internal per-channel state.  These are found
+ * using ic_devdata in the ieee80211_channel.
  */
 typedef struct {
 	uint32_t	channelFlags;
 	uint16_t	channel;	/* NB: must be first for casting */
-	uint8_t		privFlags;
+	uint16_t	devdata;	/* XXX temp */
 	int8_t		maxRegTxPower;
 	int8_t		maxTxPower;
-	int8_t		minTxPower;	/* as above... */
+	int8_t		minTxPower;
+	uint8_t		antennaMax;
 
+	uint8_t		privFlags;
+	uint8_t		ctl;		/* conformance test limit */
 	uint8_t		calValid;	/* bitmask of cal types */
 	int8_t		iCoff;
 	int8_t		qCoff;
-	int8_t		antennaMax;
+	uint8_t		pad;		/* NB: hole */
 	int16_t		rawNoiseFloor;
 	int16_t		noiseFloorAdjust;
 	uint16_t	mainSpur;	/* cached spur value for this channel */
 } HAL_CHANNEL_INTERNAL;
 
+/* privFlags */
+#define CHANNEL_INTERFERENCE   	0x01 /* Software use: channel interference 
+				        used for as AR as well as RADAR 
+				        interference detection */
+#define	CHANNEL_IQVALID		0x02 /* IQ calibration valid */
+
 typedef struct {
 	uint32_t	halChanSpreadSupport 		: 1,
 			halSleepAfterBeaconBroken	: 1,
@@ -226,7 +234,7 @@ struct ath_hal_private {
 				uint32_t gpio, uint32_t val);
 	void		(*ah_gpioSetIntr)(struct ath_hal*, u_int, uint32_t);
 	HAL_BOOL	(*ah_getChipPowerLimits)(struct ath_hal *,
-				HAL_CHANNEL *, uint32_t);
+				HAL_CHANNEL_INTERNAL *);
 	int16_t		(*ah_getNfAdjust)(struct ath_hal *,
 				const HAL_CHANNEL_INTERNAL*);
 	void		(*ah_getNoiseFloor)(struct ath_hal *,
@@ -255,6 +263,7 @@ struct ath_hal_private {
 
 
 	HAL_OPMODE	ah_opmode;		/* operating mode from reset */
+	HAL_CHANNEL_INTERNAL *ah_curchan;	/* operating channel */
 	HAL_CAPABILITIES ah_caps;		/* device capabilities */
 	uint32_t	ah_diagreg;		/* user-specified AR_DIAG_SW */
 	int16_t		ah_powerLimit;		/* tx power cap */
@@ -265,11 +274,9 @@ struct ath_hal_private {
 	/*
 	 * State for regulatory domain handling.
 	 */
-	HAL_REG_DOMAIN	ah_currentRD;		/* Current regulatory domain */
-	HAL_CTRY_CODE	ah_countryCode;		/* current country code */
+	HAL_REG_DOMAIN	ah_currentRD;		/* EEPROM regulatory domain */
 	HAL_CHANNEL_INTERNAL ah_channels[256];	/* calculated channel list */
 	u_int		ah_nchan;		/* valid channels in list */
-	HAL_CHANNEL_INTERNAL *ah_curchan;	/* current channel */
 	const struct regDomainPair *ah_regpair;	/* reg state */
 	const struct regDomain *ah_reg2G;	/* reg state for 2G band */
 	const struct regDomain *ah_reg5G;	/* reg state for 5G band */
@@ -308,8 +315,8 @@ struct ath_hal_private {
 	AH_PRIVATE(_ah)->ah_gpioGet(_ah, _gpio, _val)
 #define	ath_hal_gpioSetIntr(_ah, _gpio, _ilevel) \
 	AH_PRIVATE(_ah)->ah_gpioSetIntr(_ah, _gpio, _ilevel)
-#define	ath_hal_getpowerlimits(_ah, _chans, _nchan) \
-	AH_PRIVATE(_ah)->ah_getChipPowerLimits(_ah, _chans, _nchan)
+#define	ath_hal_getpowerlimits(_ah, _chan) \
+	AH_PRIVATE(_ah)->ah_getChipPowerLimits(_ah, _chan)
 #define ath_hal_getNfAdjust(_ah, _c) \
 	AH_PRIVATE(_ah)->ah_getNfAdjust(_ah, _c)
 #define	ath_hal_getNoiseFloor(_ah, _nfArray) \
@@ -328,7 +335,7 @@ struct ath_hal_private {
 #define	ath_hal_eepromDiag(_ah, _request, _a, _asize, _r, _rsize) \
 	AH_PRIVATE(_ah)->ah_eepromDiag(_ah, _request, _a, _asize,  _r, _rsize)
 
-#if !defined(_NET_IF_IEEE80211_H_) && !defined(_NET80211__IEEE80211_H_)
+#ifndef _NET_IF_IEEE80211_H_
 /*
  * Stuff that would naturally come from _ieee80211.h
  */
@@ -344,7 +351,9 @@ struct ath_hal_private {
 #define	IEEE80211_MTU				1500
 #define	IEEE80211_MAX_LEN			(2300 + IEEE80211_CRC_LEN + \
     (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + IEEE80211_WEP_CRCLEN))
+#endif /* _NET_IF_IEEE80211_H_ */
 
+#ifndef _NET80211__IEEE80211_H_
 enum {
 	IEEE80211_T_DS,			/* direct sequence spread spectrum */
 	IEEE80211_T_FH,			/* frequency hopping */
@@ -492,16 +501,31 @@ isBigEndian(void)
  */
 
 /*
- * Return the max allowed antenna gain based on the current
- * regulatory domain.
- */
-extern	u_int ath_hal_getantennareduction(struct ath_hal *,
-		HAL_CHANNEL *, u_int twiceGain);
+ * Return the max allowed antenna gain and apply any regulatory
+ * domain specific changes.
+ *
+ * NOTE: a negative reduction is possible in RD's that only
+ * measure radiated power (e.g., ETSI) which would increase
+ * that actual conducted output power (though never beyond
+ * the calibrated target power).
+ */
+static OS_INLINE u_int
+ath_hal_getantennareduction(struct ath_hal *ah,
+    const HAL_CHANNEL_INTERNAL *chan, u_int twiceGain)
+{
+	int8_t antennaMax = twiceGain - chan->antennaMax*2;
+	return (antennaMax < 0) ? 0 : antennaMax;
+}
+
 /*
  * Return the test group for the specific channel based on
  * the current regulator domain.
  */
-extern	u_int ath_hal_getctl(struct ath_hal *, HAL_CHANNEL *);
+static OS_INLINE u_int
+ath_hal_getctl(struct ath_hal *ah, const HAL_CHANNEL_INTERNAL *chan)
+{
+	return chan->ctl;
+}
 
 /*
  * Map a public channel definition to the corresponding
@@ -728,7 +752,7 @@ extern	void ath_hal_setupratetable(struc
 /*
  * Common routine for implementing getChanNoise api.
  */
-extern	int16_t ath_hal_getChanNoise(struct ath_hal *ah, HAL_CHANNEL *chan);
+extern	int16_t ath_hal_getChanNoise(struct ath_hal *ah, const HAL_CHANNEL* );
 
 /*
  * Initialization support.

Modified: user/sam/wifi/sys/dev/ath/ath_hal/ah_regdomain.c
==============================================================================
--- user/sam/wifi/sys/dev/ath/ath_hal/ah_regdomain.c	Wed Jan 21 00:56:28 2009	(r187508)
+++ user/sam/wifi/sys/dev/ath/ath_hal/ah_regdomain.c	Wed Jan 21 01:31:08 2009	(r187509)
@@ -20,6 +20,10 @@
 #include "opt_ah.h"
 
 #include "ah.h"
+
+#include <net80211/_ieee80211.h>
+#include <net80211/ieee80211_regdomain.h>
+
 #include "ah_internal.h"
 #include "ah_eeprom.h"
 #include "ah_devid.h"
@@ -72,160 +76,6 @@ typedef uint64_t chanbmask_t[BMLEN];
 	  W1(_fg) | W1(_fh) }
 
 /*
- * Country/Region Codes
- * Numbering from ISO 3166
- */
-enum {
-    CTRY_ALBANIA              = 8,       /* Albania */
-    CTRY_ALGERIA              = 12,      /* Algeria */
-    CTRY_ARGENTINA            = 32,      /* Argentina */
-    CTRY_ARMENIA              = 51,      /* Armenia */
-    CTRY_AUSTRALIA            = 36,      /* Australia */
-    CTRY_AUSTRIA              = 40,      /* Austria */
-    CTRY_AZERBAIJAN           = 31,      /* Azerbaijan */
-    CTRY_BAHRAIN              = 48,      /* Bahrain */
-    CTRY_BELARUS              = 112,     /* Belarus */
-    CTRY_BELGIUM              = 56,      /* Belgium */
-    CTRY_BELIZE               = 84,      /* Belize */
-    CTRY_BOLIVIA              = 68,      /* Bolivia */
-    CTRY_BRAZIL               = 76,      /* Brazil */
-    CTRY_BRUNEI_DARUSSALAM    = 96,      /* Brunei Darussalam */
-    CTRY_BULGARIA             = 100,     /* Bulgaria */
-    CTRY_CANADA               = 124,     /* Canada */
-    CTRY_CHILE                = 152,     /* Chile */
-    CTRY_CHINA                = 156,     /* People's Republic of China */
-    CTRY_COLOMBIA             = 170,     /* Colombia */
-    CTRY_COSTA_RICA           = 188,     /* Costa Rica */
-    CTRY_CROATIA              = 191,     /* Croatia */
-    CTRY_CYPRUS               = 196,
-    CTRY_CZECH                = 203,     /* Czech Republic */
-    CTRY_DENMARK              = 208,     /* Denmark */
-    CTRY_DOMINICAN_REPUBLIC   = 214,     /* Dominican Republic */
-    CTRY_ECUADOR              = 218,     /* Ecuador */
-    CTRY_EGYPT                = 818,     /* Egypt */
-    CTRY_EL_SALVADOR          = 222,     /* El Salvador */
-    CTRY_ESTONIA              = 233,     /* Estonia */
-    CTRY_FAEROE_ISLANDS       = 234,     /* Faeroe Islands */
-    CTRY_FINLAND              = 246,     /* Finland */
-    CTRY_FRANCE               = 250,     /* France */
-    CTRY_FRANCE2              = 255,     /* France2 */
-    CTRY_GEORGIA              = 268,     /* Georgia */
-    CTRY_GERMANY              = 276,     /* Germany */
-    CTRY_GREECE               = 300,     /* Greece */
-    CTRY_GUATEMALA            = 320,     /* Guatemala */
-    CTRY_HONDURAS             = 340,     /* Honduras */
-    CTRY_HONG_KONG            = 344,     /* Hong Kong S.A.R., P.R.C. */
-    CTRY_HUNGARY              = 348,     /* Hungary */
-    CTRY_ICELAND              = 352,     /* Iceland */
-    CTRY_INDIA                = 356,     /* India */
-    CTRY_INDONESIA            = 360,     /* Indonesia */
-    CTRY_IRAN                 = 364,     /* Iran */
-    CTRY_IRAQ                 = 368,     /* Iraq */
-    CTRY_IRELAND              = 372,     /* Ireland */
-    CTRY_ISRAEL               = 376,     /* Israel */
-    CTRY_ITALY                = 380,     /* Italy */
-    CTRY_JAMAICA              = 388,     /* Jamaica */
-    CTRY_JAPAN                = 392,     /* Japan */
-    CTRY_JAPAN1               = 393,     /* Japan (JP1) */
-    CTRY_JAPAN2               = 394,     /* Japan (JP0) */
-    CTRY_JAPAN3               = 395,     /* Japan (JP1-1) */
-    CTRY_JAPAN4               = 396,     /* Japan (JE1) */
-    CTRY_JAPAN5               = 397,     /* Japan (JE2) */
-    CTRY_JAPAN6               = 399,     /* Japan (JP6) */
-
-    CTRY_JAPAN7		      = 4007,	 /* Japan (J7) */
-    CTRY_JAPAN8		      = 4008,	 /* Japan (J8) */
-    CTRY_JAPAN9		      = 4009,	 /* Japan (J9) */
-
-    CTRY_JAPAN10	      = 4010,	 /* Japan (J10) */
-    CTRY_JAPAN11	      = 4011,	 /* Japan (J11) */
-    CTRY_JAPAN12	      = 4012,	 /* Japan (J12) */
-
-    CTRY_JAPAN13	      = 4013,	 /* Japan (J13) */
-    CTRY_JAPAN14	      = 4014,	 /* Japan (J14) */
-    CTRY_JAPAN15	      = 4015,	 /* Japan (J15) */
-
-    CTRY_JAPAN16	      = 4016,	 /* Japan (J16) */
-    CTRY_JAPAN17	      = 4017,	 /* Japan (J17) */
-    CTRY_JAPAN18	      = 4018,	 /* Japan (J18) */
-
-    CTRY_JAPAN19	      = 4019,	 /* Japan (J19) */
-    CTRY_JAPAN20	      = 4020,	 /* Japan (J20) */
-    CTRY_JAPAN21	      = 4021,	 /* Japan (J21) */
-
-    CTRY_JAPAN22	      = 4022,	 /* Japan (J22) */
-    CTRY_JAPAN23	      = 4023,	 /* Japan (J23) */
-    CTRY_JAPAN24	      = 4024,	 /* Japan (J24) */
- 
-    CTRY_JORDAN               = 400,     /* Jordan */
-    CTRY_KAZAKHSTAN           = 398,     /* Kazakhstan */
-    CTRY_KENYA                = 404,     /* Kenya */
-    CTRY_KOREA_NORTH          = 408,     /* North Korea */
-    CTRY_KOREA_ROC            = 410,     /* South Korea */
-    CTRY_KOREA_ROC2           = 411,     /* South Korea */
-    CTRY_KOREA_ROC3           = 412,     /* South Korea */
-    CTRY_KUWAIT               = 414,     /* Kuwait */
-    CTRY_LATVIA               = 428,     /* Latvia */
-    CTRY_LEBANON              = 422,     /* Lebanon */
-    CTRY_LIBYA                = 434,     /* Libya */
-    CTRY_LIECHTENSTEIN        = 438,     /* Liechtenstein */
-    CTRY_LITHUANIA            = 440,     /* Lithuania */
-    CTRY_LUXEMBOURG           = 442,     /* Luxembourg */
-    CTRY_MACAU                = 446,     /* Macau */
-    CTRY_MACEDONIA            = 807,     /* the Former Yugoslav Republic of Macedonia */
-    CTRY_MALAYSIA             = 458,     /* Malaysia */
-    CTRY_MALTA		      = 470,	 /* Malta */
-    CTRY_MEXICO               = 484,     /* Mexico */
-    CTRY_MONACO               = 492,     /* Principality of Monaco */
-    CTRY_MOROCCO              = 504,     /* Morocco */
-    CTRY_NETHERLANDS          = 528,     /* Netherlands */
-    CTRY_NEW_ZEALAND          = 554,     /* New Zealand */
-    CTRY_NICARAGUA            = 558,     /* Nicaragua */
-    CTRY_NORWAY               = 578,     /* Norway */
-    CTRY_OMAN                 = 512,     /* Oman */
-    CTRY_PAKISTAN             = 586,     /* Islamic Republic of Pakistan */
-    CTRY_PANAMA               = 591,     /* Panama */
-    CTRY_PARAGUAY             = 600,     /* Paraguay */
-    CTRY_PERU                 = 604,     /* Peru */
-    CTRY_PHILIPPINES          = 608,     /* Republic of the Philippines */
-    CTRY_POLAND               = 616,     /* Poland */
-    CTRY_PORTUGAL             = 620,     /* Portugal */
-    CTRY_PUERTO_RICO          = 630,     /* Puerto Rico */
-    CTRY_QATAR                = 634,     /* Qatar */
-    CTRY_ROMANIA              = 642,     /* Romania */
-    CTRY_RUSSIA               = 643,     /* Russia */
-    CTRY_SAUDI_ARABIA         = 682,     /* Saudi Arabia */
-    CTRY_SINGAPORE            = 702,     /* Singapore */
-    CTRY_SLOVAKIA             = 703,     /* Slovak Republic */
-    CTRY_SLOVENIA             = 705,     /* Slovenia */
-    CTRY_SOUTH_AFRICA         = 710,     /* South Africa */
-    CTRY_SPAIN                = 724,     /* Spain */
-    CTRY_SR9                  = 5000,    /* Ubiquiti SR9 (900MHz/GSM) */
-    CTRY_SWEDEN               = 752,     /* Sweden */
-    CTRY_SWITZERLAND          = 756,     /* Switzerland */
-    CTRY_SYRIA                = 760,     /* Syria */
-    CTRY_TAIWAN               = 158,     /* Taiwan */
-    CTRY_THAILAND             = 764,     /* Thailand */
-    CTRY_TRINIDAD_Y_TOBAGO    = 780,     /* Trinidad y Tobago */
-    CTRY_TUNISIA              = 788,     /* Tunisia */
-    CTRY_TURKEY               = 792,     /* Turkey */
-    CTRY_UAE                  = 784,     /* U.A.E. */
-    CTRY_UKRAINE              = 804,     /* Ukraine */
-    CTRY_UNITED_KINGDOM       = 826,     /* United Kingdom */
-    CTRY_UNITED_STATES        = 840,     /* United States */
-    CTRY_UNITED_STATES_FCC49  = 842,     /* United States (Public Safety)*/
-    CTRY_URUGUAY              = 858,     /* Uruguay */
-    CTRY_UZBEKISTAN           = 860,     /* Uzbekistan */
-    CTRY_VENEZUELA            = 862,     /* Venezuela */
-    CTRY_VIET_NAM             = 704,     /* Viet Nam */
-    CTRY_XR9                  = 5001,    /* Ubiquiti XR9 (900MHz/GSM) */
-    CTRY_GZ901                = 5002,    /* Zcomax GZ-901 (900MHz/GSM) */
-    CTRY_YEMEN                = 887,     /* Yemen */
-    CTRY_ZIMBABWE             = 716      /* Zimbabwe */
-};
-
-
-/*
  * Mask to check whether a domain is a multidomain or a single domain
  */
 #define MULTI_DOMAIN_MASK 0xFF00
@@ -403,9 +253,6 @@ enum {
 
 	NULL1		= 0x0198,
 	WORLD		= 0x0199,
-	SR9_WORLD	= 0x0298,
-	XR9_WORLD	= 0x0299,
-	GZ901_WORLD	= 0x029a,
 	DEBUG_REG_DMN	= 0x01ff,
 };
 
@@ -482,44 +329,44 @@ typedef struct regDomainPair {
 }  REG_DMN_PAIR_MAPPING;
 
 static REG_DMN_PAIR_MAPPING regDomainPairs[] = {
-	{NO_ENUMRD,	DEBUG_REG_DMN,	DEBUG_REG_DMN, NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{NULL1_WORLD,	NULL1,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{NULL1_ETSIB,	NULL1,		ETSIB,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{NULL1_ETSIC,	NULL1,		ETSIC,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-
-	{FCC2_FCCA,	FCC2,		FCCA,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{FCC2_WORLD,	FCC2,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{FCC2_ETSIC,	FCC2,		ETSIC,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{FCC3_FCCA,	FCC3,		FCCA,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{FCC3_WORLD,	FCC3,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{FCC4_FCCA,	FCC4,		FCCA,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, 0 },
-	{FCC5_FCCB,	FCC5,		FCCB,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-
-	{ETSI1_WORLD,	ETSI1,		WORLD,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, 0 },
-	{ETSI2_WORLD,	ETSI2,		WORLD,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, 0 },
-	{ETSI3_WORLD,	ETSI3,		WORLD,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, 0 },
-	{ETSI4_WORLD,	ETSI4,		WORLD,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, 0 },
-	{ETSI5_WORLD,	ETSI5,		WORLD,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, 0 },
-	{ETSI6_WORLD,	ETSI6,		WORLD,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, 0 },
-
-	{ETSI3_ETSIA,	ETSI3,		WORLD,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, 0 },
-	{FRANCE_RES,	ETSI3,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-
-	{FCC1_WORLD,	FCC1,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{FCC1_FCCA,	FCC1,		FCCA,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{APL1_WORLD,	APL1,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{APL2_WORLD,	APL2,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{APL3_WORLD,	APL3,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{APL4_WORLD,	APL4,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{APL5_WORLD,	APL5,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{APL6_WORLD,	APL6,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{APL8_WORLD,	APL8,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{APL9_WORLD,	APL9,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-
-	{APL3_FCCA,	APL3,		FCCA,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{APL1_ETSIC,	APL1,		ETSIC,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{APL2_ETSIC,	APL2,		ETSIC,		NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{APL2_APLD,	APL2,		APLD,		NO_REQ, NO_REQ, PSCAN_DEFER,  },
+	{NO_ENUMRD,	DEBUG_REG_DMN,	DEBUG_REG_DMN, NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{NULL1_WORLD,	NULL1,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{NULL1_ETSIB,	NULL1,		ETSIB,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{NULL1_ETSIC,	NULL1,		ETSIC,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+
+	{FCC2_FCCA,	FCC2,		FCCA,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{FCC2_WORLD,	FCC2,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{FCC2_ETSIC,	FCC2,		ETSIC,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{FCC3_FCCA,	FCC3,		FCCA,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{FCC3_WORLD,	FCC3,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{FCC4_FCCA,	FCC4,		FCCA,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{FCC5_FCCB,	FCC5,		FCCB,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+
+	{ETSI1_WORLD,	ETSI1,		WORLD,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{ETSI2_WORLD,	ETSI2,		WORLD,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{ETSI3_WORLD,	ETSI3,		WORLD,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{ETSI4_WORLD,	ETSI4,		WORLD,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{ETSI5_WORLD,	ETSI5,		WORLD,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{ETSI6_WORLD,	ETSI6,		WORLD,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+
+	{ETSI3_ETSIA,	ETSI3,		WORLD,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{FRANCE_RES,	ETSI3,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+
+	{FCC1_WORLD,	FCC1,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{FCC1_FCCA,	FCC1,		FCCA,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{APL1_WORLD,	APL1,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{APL2_WORLD,	APL2,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{APL3_WORLD,	APL3,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{APL4_WORLD,	APL4,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{APL5_WORLD,	APL5,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{APL6_WORLD,	APL6,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{APL8_WORLD,	APL8,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{APL9_WORLD,	APL9,		WORLD,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+
+	{APL3_FCCA,	APL3,		FCCA,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{APL1_ETSIC,	APL1,		ETSIC,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{APL2_ETSIC,	APL2,		ETSIC,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{APL2_APLD,	APL2,		APLD,		NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
 
 	{MKK1_MKKA,	MKK1,		MKKA,		DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKK1 | PSCAN_MKKA, CTRY_JAPAN },
 	{MKK1_MKKB,	MKK1,		MKKA,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB | NEED_NFC| LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKK1 | PSCAN_MKKA | PSCAN_MKKA_G, CTRY_JAPAN1 },
@@ -532,19 +379,19 @@ static REG_DMN_PAIR_MAPPING regDomainPai
 	{MKK2_MKKA,	MKK2,		MKKA,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB | NEED_NFC| LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKK2 | PSCAN_MKKA | PSCAN_MKKA_G, CTRY_JAPAN3 },
 
 	/* MKK3 */
-	{MKK3_MKKA,	MKK3,	MKKA,	DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC , PSCAN_MKKA, 0 },
+	{MKK3_MKKA,	MKK3,	MKKA,	DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC , PSCAN_MKKA, CTRY_DEFAULT },
 	{MKK3_MKKB,	MKK3,		MKKA,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKKA | PSCAN_MKKA_G, CTRY_JAPAN7 },
-	{MKK3_MKKA1,	MKK3,	MKKA,	DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKKA1 | PSCAN_MKKA1_G, 0 },
+	{MKK3_MKKA1,	MKK3,	MKKA,	DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKKA1 | PSCAN_MKKA1_G, CTRY_DEFAULT },
 	{MKK3_MKKA2,MKK3,		MKKA,		DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKKA2 | PSCAN_MKKA2_G, CTRY_JAPAN8 },
 	{MKK3_MKKC,	MKK3,		MKKC,		DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, NO_PSCAN, CTRY_JAPAN9 },
-	{MKK3_FCCA,	MKK3,	FCCA,	DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, NO_PSCAN, 0 },
+	{MKK3_FCCA,	MKK3,	FCCA,	DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, NO_PSCAN, CTRY_DEFAULT },
 
 	/* MKK4 */
 	{MKK4_MKKB,	MKK4,		MKKA,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKK3 | PSCAN_MKKA | PSCAN_MKKA_G, CTRY_JAPAN10 },
-	{MKK4_MKKA1,	MKK4,	MKKA,	DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKK3 | PSCAN_MKKA1 | PSCAN_MKKA1_G, 0 },
+	{MKK4_MKKA1,	MKK4,	MKKA,	DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKK3 | PSCAN_MKKA1 | PSCAN_MKKA1_G, CTRY_DEFAULT },
 	{MKK4_MKKA2,	MKK4,		MKKA,		DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKK3 |PSCAN_MKKA2 | PSCAN_MKKA2_G, CTRY_JAPAN11 },
 	{MKK4_MKKC,	MKK4,		MKKC,		DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKK3, CTRY_JAPAN12 },
-	{MKK4_FCCA,	MKK4,	FCCA,	DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKK3, 0 },
+	{MKK4_FCCA,	MKK4,	FCCA,	DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKK3, CTRY_DEFAULT },
 
 	/* MKK5 */
 	{MKK5_MKKB,	MKK5,		MKKA,		DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKK3 | PSCAN_MKKA | PSCAN_MKKA_G, CTRY_JAPAN13 },
@@ -566,24 +413,21 @@ static REG_DMN_PAIR_MAPPING regDomainPai
 	{MKK8_MKKA2,MKK8,		MKKA,		DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKK1 | PSCAN_MKK3 | PSCAN_MKKA2 | PSCAN_MKKA2_G, CTRY_JAPAN23 },
 	{MKK8_MKKC,	MKK8,		MKKC,		DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKK1 | PSCAN_MKK3 , CTRY_JAPAN24 },
 
-	{MKK9_MKKA,	MKK9,	MKKA,	DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKK3 | PSCAN_MKKA | PSCAN_MKKA_G, 0 },
-	{MKK10_MKKA,	MKK10,	MKKA,	DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKK3 | PSCAN_MKKA | PSCAN_MKKA_G, 0 },
+	{MKK9_MKKA,	MKK9,	MKKA,	DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKK3 | PSCAN_MKKA | PSCAN_MKKA_G, CTRY_DEFAULT },
+	{MKK10_MKKA,	MKK10,	MKKA,	DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS, NEED_NFC, PSCAN_MKK3 | PSCAN_MKKA | PSCAN_MKKA_G, CTRY_DEFAULT },
 
 		/* These are super domains */
-	{WOR0_WORLD,	WOR0_WORLD,	WOR0_WORLD,	NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{WOR1_WORLD,	WOR1_WORLD,	WOR1_WORLD,	DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, 0 },
-	{WOR2_WORLD,	WOR2_WORLD,	WOR2_WORLD,	DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, 0 },
-	{WOR3_WORLD,	WOR3_WORLD,	WOR3_WORLD,	NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{WOR4_WORLD,	WOR4_WORLD,	WOR4_WORLD,	DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, 0 },
-	{WOR5_ETSIC,	WOR5_ETSIC,	WOR5_ETSIC,	DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, 0 },
-	{WOR01_WORLD,	WOR01_WORLD,	WOR01_WORLD,	NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{WOR02_WORLD,	WOR02_WORLD,	WOR02_WORLD,	NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{EU1_WORLD,	EU1_WORLD,	EU1_WORLD,	NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
-	{WOR9_WORLD,	WOR9_WORLD,	WOR9_WORLD,	DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, 0 },
-	{WORA_WORLD,	WORA_WORLD,	WORA_WORLD,	DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, 0 },
-	{SR9_WORLD,	NULL1,		SR9_WORLD,	NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_SR9 },
-	{XR9_WORLD,	NULL1,		XR9_WORLD,	NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_XR9 },
-	{GZ901_WORLD,	NULL1,		GZ901_WORLD,	NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_GZ901 },
+	{WOR0_WORLD,	WOR0_WORLD,	WOR0_WORLD,	NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{WOR1_WORLD,	WOR1_WORLD,	WOR1_WORLD,	DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{WOR2_WORLD,	WOR2_WORLD,	WOR2_WORLD,	DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{WOR3_WORLD,	WOR3_WORLD,	WOR3_WORLD,	NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{WOR4_WORLD,	WOR4_WORLD,	WOR4_WORLD,	DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{WOR5_ETSIC,	WOR5_ETSIC,	WOR5_ETSIC,	DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{WOR01_WORLD,	WOR01_WORLD,	WOR01_WORLD,	NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{WOR02_WORLD,	WOR02_WORLD,	WOR02_WORLD,	NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{EU1_WORLD,	EU1_WORLD,	EU1_WORLD,	NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{WOR9_WORLD,	WOR9_WORLD,	WOR9_WORLD,	DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{WORA_WORLD,	WORA_WORLD,	WORA_WORLD,	DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
 };
 
 /* 
@@ -600,162 +444,149 @@ static REG_DMN_PAIR_MAPPING regDomainPai
 #define	SUPER_DOMAIN_MASK	0x0fff
 #define	COUNTRY_CODE_MASK	0x3fff
 
-#define	YES	AH_TRUE
-#define	NO	AH_FALSE
-
 typedef struct {
 	HAL_CTRY_CODE		countryCode;	   
 	HAL_REG_DOMAIN		regDmnEnum;
-	HAL_BOOL		allow11aTurbo;
-	HAL_BOOL		allow11gTurbo;
-	HAL_BOOL		allow11ng20;
-	HAL_BOOL		allow11ng40;
-	HAL_BOOL		allow11na20;
-	HAL_BOOL		allow11na40;
 } COUNTRY_CODE_TO_ENUM_RD;
 
 static COUNTRY_CODE_TO_ENUM_RD allCountries[] = {
-    {CTRY_DEBUG,       NO_ENUMRD,	YES, YES, YES,YES, YES,YES },
-    {CTRY_DEFAULT,     DEF_REGDMN,	YES, YES, YES,YES, YES,YES },
-    {CTRY_ALBANIA,     NULL1_WORLD,	 NO, YES, YES, NO,  NO, NO },
-    {CTRY_ALGERIA,     NULL1_WORLD,	 NO, YES, YES, NO,  NO, NO },
-    {CTRY_ARGENTINA,   APL3_WORLD,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_ARMENIA,     ETSI4_WORLD,	 NO, YES, YES,YES,  NO, NO },
-    {CTRY_AUSTRALIA,   FCC2_WORLD,      YES, YES, YES,YES, YES,YES },
-    {CTRY_AUSTRIA,     ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_AZERBAIJAN,  ETSI4_WORLD,     YES, YES, YES,YES, YES,YES },
-    {CTRY_BAHRAIN,     APL6_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_BELARUS,     NULL1_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_BELGIUM,     ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_BELIZE,      APL1_ETSIC,	YES, YES, YES,YES, YES,YES },
-    {CTRY_BOLIVIA,     APL1_ETSIC,	YES, YES, YES,YES, YES,YES },
-    {CTRY_BRAZIL,      FCC3_WORLD,	 NO,  NO, YES, NO, YES, NO },
-    {CTRY_BRUNEI_DARUSSALAM,APL1_WORLD, YES, YES, YES,YES, YES,YES },
-    {CTRY_BULGARIA,    ETSI6_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_CANADA,      FCC2_FCCA,	YES, YES, YES,YES, YES,YES },
-    {CTRY_CHILE,       APL6_WORLD,	YES, YES, YES,YES, YES,YES },
-    {CTRY_CHINA,       APL1_WORLD,	YES, YES, YES,YES, YES,YES },
-    {CTRY_COLOMBIA,    FCC1_FCCA,        NO, YES, YES,YES, YES, NO },
-    {CTRY_COSTA_RICA,  NULL1_WORLD,      NO, YES, YES,YES, YES, NO },
-    {CTRY_CROATIA,     ETSI3_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_CYPRUS,      ETSI1_WORLD,	YES, YES, YES,YES, YES,YES },
-    {CTRY_CZECH,       ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_DENMARK,     ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_DOMINICAN_REPUBLIC,FCC1_FCCA,	YES, YES, YES,YES, YES,YES },
-    {CTRY_ECUADOR,     NULL1_WORLD,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_EGYPT,       ETSI3_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_EL_SALVADOR, NULL1_WORLD,	 NO, YES, YES,YES,  NO, NO },
-    {CTRY_ESTONIA,     ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_FINLAND,     ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_FRANCE,      ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_FRANCE2,     ETSI3_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_GEORGIA,     ETSI4_WORLD,	YES, YES, YES,YES, YES,YES },
-    {CTRY_GERMANY,     ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_GREECE,      ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_GUATEMALA,   FCC1_FCCA,	YES, YES, YES,YES, YES,YES },
-    {CTRY_GZ901,       GZ901_WORLD,      NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_HONDURAS,    NULL1_WORLD,	 NO,  YES, YES,YES, YES, NO },
-    {CTRY_HONG_KONG,   FCC2_WORLD,	YES, YES, YES,YES, YES,YES },
-    {CTRY_HUNGARY,     ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_ICELAND,     ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_INDIA,       APL6_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_INDONESIA,   APL1_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_IRAN,        APL1_WORLD,	YES, YES, YES,YES, YES,YES },
-    {CTRY_IRELAND,     ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_ISRAEL,      NULL1_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_ITALY,       ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_JAPAN,       MKK1_MKKA,	 NO,  NO, YES, NO, YES, NO },
-    {CTRY_JAPAN1,      MKK1_MKKB,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_JAPAN2,      MKK1_FCCA,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_JAPAN3,      MKK2_MKKA,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_JAPAN4,      MKK1_MKKA1,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_JAPAN5,      MKK1_MKKA2,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_JAPAN6,      MKK1_MKKC,	 NO,  NO,  NO, NO,  NO, NO },
-
-    {CTRY_JAPAN7,      MKK3_MKKB,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_JAPAN8,      MKK3_MKKA2,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_JAPAN9,      MKK3_MKKC,	 NO,  NO,  NO, NO,  NO, NO },
-
-    {CTRY_JAPAN10,     MKK4_MKKB,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_JAPAN11,     MKK4_MKKA2,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_JAPAN12,     MKK4_MKKC,	 NO,  NO,  NO, NO,  NO, NO },
-
-    {CTRY_JAPAN13,     MKK5_MKKB,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_JAPAN14,     MKK5_MKKA2,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_JAPAN15,     MKK5_MKKC,	 NO,  NO,  NO, NO,  NO, NO },
-
-    {CTRY_JAPAN16,     MKK6_MKKB,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_JAPAN17,     MKK6_MKKA2,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_JAPAN18,     MKK6_MKKC,	 NO,  NO,  NO, NO,  NO, NO },
-
-    {CTRY_JAPAN19,     MKK7_MKKB,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_JAPAN20,     MKK7_MKKA2,	 NO,  NO, YES, NO, YES, NO },
-    {CTRY_JAPAN21,     MKK7_MKKC,	 NO,  NO,  NO, NO,  NO, NO },
-
-    {CTRY_JAPAN22,     MKK8_MKKB,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_JAPAN23,     MKK8_MKKA2,	 NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_JAPAN24,     MKK8_MKKC,	 NO,  NO,  NO, NO,  NO, NO },
-
-    {CTRY_JORDAN,      APL4_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_KAZAKHSTAN,  NULL1_WORLD,	 NO, YES, YES,YES,  NO, NO },
-    {CTRY_KOREA_NORTH, APL2_WORLD,	YES, YES, YES,YES, YES,YES },
-    {CTRY_KOREA_ROC,   APL2_WORLD,	 NO,  NO, YES, NO, YES, NO },
-    {CTRY_KOREA_ROC2,  APL2_WORLD,	 NO,  NO, YES, NO, YES, NO },
-    {CTRY_KOREA_ROC3,  APL9_WORLD,	 NO,  NO, YES, NO, YES, NO },
-    {CTRY_KUWAIT,      NULL1_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_LATVIA,      ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_LEBANON,     NULL1_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_LIECHTENSTEIN,ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_LITHUANIA,   ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_LUXEMBOURG,  ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_MACAU,       FCC2_WORLD,	YES, YES, YES,YES, YES,YES },
-    {CTRY_MACEDONIA,   NULL1_WORLD,	 NO, YES, YES,YES,  NO, NO },
-    {CTRY_MALAYSIA,    APL8_WORLD,	 NO,  NO, YES, NO, YES, NO },
-    {CTRY_MALTA,       ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_MEXICO,      FCC1_FCCA,	YES, YES, YES,YES, YES,YES },
-    {CTRY_MONACO,      ETSI4_WORLD,	YES, YES, YES,YES, YES,YES },
-    {CTRY_MOROCCO,     NULL1_WORLD,	 NO, YES, YES,YES,  NO, NO },
-    {CTRY_NETHERLANDS, ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_NEW_ZEALAND, FCC2_ETSIC,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_NORWAY,      ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_OMAN,        APL6_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_PAKISTAN,    NULL1_WORLD,	 NO, YES, YES,YES,  NO, NO },
-    {CTRY_PANAMA,      FCC1_FCCA,	YES, YES, YES,YES, YES,YES },
-    {CTRY_PERU,        APL1_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_PHILIPPINES, FCC3_WORLD,	YES, YES, YES,YES, YES,YES },
-    {CTRY_POLAND,      ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_PORTUGAL,    ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_PUERTO_RICO, FCC1_FCCA,	YES, YES, YES,YES, YES,YES },
-    {CTRY_QATAR,       NULL1_WORLD,	 NO, YES, YES,YES,  NO, NO },
-    {CTRY_ROMANIA,     NULL1_WORLD,	 NO, YES, YES,YES,  NO, NO },
-    {CTRY_RUSSIA,      NULL1_WORLD,	 NO, YES, YES,YES,  NO, NO },
-    {CTRY_SAUDI_ARABIA,FCC2_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_SINGAPORE,   APL6_WORLD,	YES, YES, YES,YES, YES,YES },
-    {CTRY_SLOVAKIA,    ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_SLOVENIA,    ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_SOUTH_AFRICA,FCC3_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_SPAIN,       ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_SR9,         SR9_WORLD,        NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_SWEDEN,      ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_SWITZERLAND, ETSI1_WORLD,	 NO, YES, YES,YES, YES,YES },
-    {CTRY_SYRIA,       NULL1_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_TAIWAN,      APL3_FCCA,	YES, YES, YES,YES, YES,YES },
-    {CTRY_THAILAND,    NULL1_WORLD,	 NO, YES, YES,YES,  NO, NO },
-    {CTRY_TRINIDAD_Y_TOBAGO,ETSI4_WORLD, NO, YES, YES,YES, YES, NO },
-    {CTRY_TUNISIA,     ETSI3_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_TURKEY,      ETSI3_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_UKRAINE,     NULL1_WORLD,	 NO, YES, YES,YES,  NO, NO },
-    {CTRY_UAE,         NULL1_WORLD,	 NO, YES, YES,YES,  NO, NO },
-    {CTRY_UNITED_KINGDOM, ETSI1_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_UNITED_STATES, FCC1_FCCA,	YES, YES, YES,YES, YES,YES },
-    {CTRY_UNITED_STATES_FCC49,FCC4_FCCA,YES, YES, YES,YES, YES,YES },
-    {CTRY_URUGUAY,     FCC1_WORLD,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_UZBEKISTAN,  FCC3_FCCA,	YES, YES, YES,YES, YES,YES },
-    {CTRY_VENEZUELA,   APL2_ETSIC,	 NO, YES, YES,YES, YES, NO },
-    {CTRY_VIET_NAM,    NULL1_WORLD,	 NO, YES, YES,YES,  NO, NO },
-    {CTRY_XR9,         XR9_WORLD,        NO,  NO,  NO, NO,  NO, NO },
-    {CTRY_YEMEN,       NULL1_WORLD,	 NO, YES, YES,YES,  NO, NO },
-    {CTRY_ZIMBABWE,    NULL1_WORLD,	 NO, YES, YES,YES,  NO, NO }
+	{ CTRY_DEBUG,       NO_ENUMRD },
+	{ CTRY_DEFAULT,     DEF_REGDMN },
+	{ CTRY_ALBANIA,     NULL1_WORLD },
+	{ CTRY_ALGERIA,     NULL1_WORLD },
+	{ CTRY_ARGENTINA,   APL3_WORLD },
+	{ CTRY_ARMENIA,     ETSI4_WORLD },
+	{ CTRY_AUSTRALIA,   FCC2_WORLD },
+	{ CTRY_AUSTRIA,     ETSI1_WORLD },
+	{ CTRY_AZERBAIJAN,  ETSI4_WORLD },
+	{ CTRY_BAHRAIN,     APL6_WORLD },
+	{ CTRY_BELARUS,     NULL1_WORLD },
+	{ CTRY_BELGIUM,     ETSI1_WORLD },
+	{ CTRY_BELIZE,      APL1_ETSIC },
+	{ CTRY_BOLIVIA,     APL1_ETSIC },
+	{ CTRY_BRAZIL,      FCC3_WORLD },
+	{ CTRY_BRUNEI_DARUSSALAM,APL1_WORLD },
+	{ CTRY_BULGARIA,    ETSI6_WORLD },
+	{ CTRY_CANADA,      FCC2_FCCA },
+	{ CTRY_CHILE,       APL6_WORLD },
+	{ CTRY_CHINA,       APL1_WORLD },
+	{ CTRY_COLOMBIA,    FCC1_FCCA },
+	{ CTRY_COSTA_RICA,  NULL1_WORLD },
+	{ CTRY_CROATIA,     ETSI3_WORLD },
+	{ CTRY_CYPRUS,      ETSI1_WORLD },
+	{ CTRY_CZECH,       ETSI1_WORLD },
+	{ CTRY_DENMARK,     ETSI1_WORLD },
+	{ CTRY_DOMINICAN_REPUBLIC,FCC1_FCCA },
+	{ CTRY_ECUADOR,     NULL1_WORLD },
+	{ CTRY_EGYPT,       ETSI3_WORLD },
+	{ CTRY_EL_SALVADOR, NULL1_WORLD },
+	{ CTRY_ESTONIA,     ETSI1_WORLD },
+	{ CTRY_FINLAND,     ETSI1_WORLD },
+	{ CTRY_FRANCE,      ETSI1_WORLD },
+	{ CTRY_FRANCE2,     ETSI3_WORLD },
+	{ CTRY_GEORGIA,     ETSI4_WORLD },
+	{ CTRY_GERMANY,     ETSI1_WORLD },
+	{ CTRY_GREECE,      ETSI1_WORLD },
+	{ CTRY_GUATEMALA,   FCC1_FCCA },
+	{ CTRY_HONDURAS,    NULL1_WORLD },
+	{ CTRY_HONG_KONG,   FCC2_WORLD },
+	{ CTRY_HUNGARY,     ETSI1_WORLD },
+	{ CTRY_ICELAND,     ETSI1_WORLD },
+	{ CTRY_INDIA,       APL6_WORLD },
+	{ CTRY_INDONESIA,   APL1_WORLD },
+	{ CTRY_IRAN,        APL1_WORLD },
+	{ CTRY_IRELAND,     ETSI1_WORLD },
+	{ CTRY_ISRAEL,      NULL1_WORLD },
+	{ CTRY_ITALY,       ETSI1_WORLD },
+	{ CTRY_JAPAN,       MKK1_MKKA },
+	{ CTRY_JAPAN1,      MKK1_MKKB },
+	{ CTRY_JAPAN2,      MKK1_FCCA },
+	{ CTRY_JAPAN3,      MKK2_MKKA },
+	{ CTRY_JAPAN4,      MKK1_MKKA1 },
+	{ CTRY_JAPAN5,      MKK1_MKKA2 },
+	{ CTRY_JAPAN6,      MKK1_MKKC },
+
+	{ CTRY_JAPAN7,      MKK3_MKKB },
+	{ CTRY_JAPAN8,      MKK3_MKKA2 },
+	{ CTRY_JAPAN9,      MKK3_MKKC },
+
+	{ CTRY_JAPAN10,     MKK4_MKKB },
+	{ CTRY_JAPAN11,     MKK4_MKKA2 },
+	{ CTRY_JAPAN12,     MKK4_MKKC },
+
+	{ CTRY_JAPAN13,     MKK5_MKKB },
+	{ CTRY_JAPAN14,     MKK5_MKKA2 },
+	{ CTRY_JAPAN15,     MKK5_MKKC },
+
+	{ CTRY_JAPAN16,     MKK6_MKKB },
+	{ CTRY_JAPAN17,     MKK6_MKKA2 },
+	{ CTRY_JAPAN18,     MKK6_MKKC },
+
+	{ CTRY_JAPAN19,     MKK7_MKKB },
+	{ CTRY_JAPAN20,     MKK7_MKKA2 },
+	{ CTRY_JAPAN21,     MKK7_MKKC },
+
+	{ CTRY_JAPAN22,     MKK8_MKKB },
+	{ CTRY_JAPAN23,     MKK8_MKKA2 },
+	{ CTRY_JAPAN24,     MKK8_MKKC },
+
+	{ CTRY_JORDAN,      APL4_WORLD },
+	{ CTRY_KAZAKHSTAN,  NULL1_WORLD },
+	{ CTRY_KOREA_NORTH, APL2_WORLD },
+	{ CTRY_KOREA_ROC,   APL2_WORLD },
+	{ CTRY_KOREA_ROC2,  APL2_WORLD },
+	{ CTRY_KOREA_ROC3,  APL9_WORLD },
+	{ CTRY_KUWAIT,      NULL1_WORLD },
+	{ CTRY_LATVIA,      ETSI1_WORLD },
+	{ CTRY_LEBANON,     NULL1_WORLD },
+	{ CTRY_LIECHTENSTEIN,ETSI1_WORLD },
+	{ CTRY_LITHUANIA,   ETSI1_WORLD },
+	{ CTRY_LUXEMBOURG,  ETSI1_WORLD },
+	{ CTRY_MACAU,       FCC2_WORLD },
+	{ CTRY_MACEDONIA,   NULL1_WORLD },
+	{ CTRY_MALAYSIA,    APL8_WORLD },
+	{ CTRY_MALTA,       ETSI1_WORLD },
+	{ CTRY_MEXICO,      FCC1_FCCA },
+	{ CTRY_MONACO,      ETSI4_WORLD },
+	{ CTRY_MOROCCO,     NULL1_WORLD },
+	{ CTRY_NETHERLANDS, ETSI1_WORLD },
+	{ CTRY_NEW_ZEALAND, FCC2_ETSIC },
+	{ CTRY_NORWAY,      ETSI1_WORLD },
+	{ CTRY_OMAN,        APL6_WORLD },
+	{ CTRY_PAKISTAN,    NULL1_WORLD },
+	{ CTRY_PANAMA,      FCC1_FCCA },
+	{ CTRY_PERU,        APL1_WORLD },
+	{ CTRY_PHILIPPINES, FCC3_WORLD },
+	{ CTRY_POLAND,      ETSI1_WORLD },
+	{ CTRY_PORTUGAL,    ETSI1_WORLD },
+	{ CTRY_PUERTO_RICO, FCC1_FCCA },
+	{ CTRY_QATAR,       NULL1_WORLD },
+	{ CTRY_ROMANIA,     NULL1_WORLD },
+	{ CTRY_RUSSIA,      NULL1_WORLD },
+	{ CTRY_SAUDI_ARABIA,FCC2_WORLD },

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200901210131.n0L1V8qb062589>