Author: adrian
Date: Thu May 26 09:15:33 2011
New Revision: 222301
URL: http://svn.freebsd.org/changeset/base/222301

Log:
  Bring over my AR9287 work in progress.
  
  It isn't linked into the build because it's missing the TX power
  and PDADC programming code.
  
  This code is mostly based on the ath9k codebase, compared against
  the Atheros codebase as appropriate.
  
  What's implemented:
  
  * probe/attach
  * EEPROM board value programming
  * RX initial calibration
  * radio channel programming
  * general MAC / baseband setup
  * async fifo setup
  * open-loop tx power calibration
  
  What's missing before it can be enabled by default:
  
  * TX power / calibration setting code
  * closed-loop tx power calibration routines
  * TSF2 handling
  * generic timer support from ath9k
  
  Obtained from:        Atheros, ath9k

Added:
  head/sys/dev/ath/ath_hal/ar9002/ar9287.c   (contents, props changed)
  head/sys/dev/ath/ath_hal/ar9002/ar9287.h   (contents, props changed)
  head/sys/dev/ath/ath_hal/ar9002/ar9287.ini   (contents, props changed)
  head/sys/dev/ath/ath_hal/ar9002/ar9287_attach.c   (contents, props changed)
  head/sys/dev/ath/ath_hal/ar9002/ar9287_cal.c   (contents, props changed)
  head/sys/dev/ath/ath_hal/ar9002/ar9287_cal.h   (contents, props changed)
  head/sys/dev/ath/ath_hal/ar9002/ar9287_olc.c   (contents, props changed)
  head/sys/dev/ath/ath_hal/ar9002/ar9287_olc.h   (contents, props changed)
  head/sys/dev/ath/ath_hal/ar9002/ar9287_reset.c   (contents, props changed)
  head/sys/dev/ath/ath_hal/ar9002/ar9287_reset.h   (contents, props changed)
  head/sys/dev/ath/ath_hal/ar9002/ar9287an.h   (contents, props changed)
  head/sys/dev/ath/ath_hal/ar9002/ar9287phy.h   (contents, props changed)
Modified:
  head/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c
  head/sys/dev/ath/ath_hal/ar5416/ar5416phy.h
  head/sys/dev/ath/ath_hal/ar5416/ar5416reg.h
  head/sys/dev/ath/ath_hal/ar9002/ar9285_phy.c

Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c      Thu May 26 08:35:47 
2011        (r222300)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c      Thu May 26 09:15:33 
2011        (r222301)
@@ -167,6 +167,17 @@ ar5416Reset(struct ath_hal *ah, HAL_OPMO
 
        AH5416(ah)->ah_writeIni(ah, chan);
 
+       if(AR_SREV_KIWI_13_OR_LATER(ah) ) {
+               /* Enable ASYNC FIFO */
+               OS_REG_SET_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
+                   AR_MAC_PCU_ASYNC_FIFO_REG3_DATAPATH_SEL);
+               OS_REG_SET_BIT(ah, AR_PHY_MODE, AR_PHY_MODE_ASYNCFIFO);
+               OS_REG_CLR_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
+                   AR_MAC_PCU_ASYNC_FIFO_REG3_SOFT_RESET);
+               OS_REG_SET_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
+                   AR_MAC_PCU_ASYNC_FIFO_REG3_SOFT_RESET);
+       }
+
        /* Override ini values (that can be overriden in this fashion) */
        ar5416OverrideIni(ah, chan);
 
@@ -258,6 +269,12 @@ ar5416Reset(struct ath_hal *ah, HAL_OPMO
                OS_REG_WRITE(ah, AR_MAC_LED, OS_REG_READ(ah, AR_MAC_LED) |
                    saveLedState);
 
+        /* Start TSF2 for generic timer 8-15 */
+#ifdef NOTYET
+       if (AR_SREV_KIWI(ah))
+               ar5416StartTsf2(ah);
+#endif
+
        /* Restore previous antenna */
        OS_REG_WRITE(ah, AR_DEF_ANTENNA, saveDefAntenna);
 
@@ -292,6 +309,41 @@ ar5416Reset(struct ath_hal *ah, HAL_OPMO
        /* This may override the AR_DIAG_SW register */
        ar5416InitUserSettings(ah);
 
+       if (AR_SREV_KIWI_13_OR_LATER(ah)) {
+               /*
+                * Enable ASYNC FIFO
+                *
+                * If Async FIFO is enabled, the following counters change
+                * as MAC now runs at 117 Mhz instead of 88/44MHz when
+                * async FIFO is disabled.
+                *
+                * Overwrite the delay/timeouts initialized in ProcessIni()
+                * above.
+                */
+               OS_REG_WRITE(ah, AR_D_GBL_IFS_SIFS,
+                   AR_D_GBL_IFS_SIFS_ASYNC_FIFO_DUR);
+               OS_REG_WRITE(ah, AR_D_GBL_IFS_SLOT,
+                   AR_D_GBL_IFS_SLOT_ASYNC_FIFO_DUR);
+               OS_REG_WRITE(ah, AR_D_GBL_IFS_EIFS,
+                   AR_D_GBL_IFS_EIFS_ASYNC_FIFO_DUR);
+
+               OS_REG_WRITE(ah, AR_TIME_OUT,
+                   AR_TIME_OUT_ACK_CTS_ASYNC_FIFO_DUR);
+               OS_REG_WRITE(ah, AR_USEC, AR_USEC_ASYNC_FIFO_DUR);
+
+               OS_REG_SET_BIT(ah, AR_MAC_PCU_LOGIC_ANALYZER,
+                   AR_MAC_PCU_LOGIC_ANALYZER_DISBUG20768);
+               OS_REG_RMW_FIELD(ah, AR_AHB_MODE, AR_AHB_CUSTOM_BURST_EN,
+                   AR_AHB_CUSTOM_BURST_ASYNC_FIFO_VAL);
+       }
+
+       if (AR_SREV_KIWI_13_OR_LATER(ah)) {
+               /* Enable AGGWEP to accelerate encryption engine */
+               OS_REG_SET_BIT(ah, AR_PCU_MISC_MODE2,
+                   AR_PCU_MISC_MODE2_ENABLE_AGGWEP);
+       }
+
+
        /*
         * disable seq number generation in hw
         */

Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416phy.h
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416phy.h Thu May 26 08:35:47 2011        
(r222300)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416phy.h Thu May 26 09:15:33 2011        
(r222301)
@@ -301,4 +301,6 @@
 #define        AR_PHY_TX_PWRCTRL9_RES_DC_REMOVAL       0x80000000
 #define        AR_PHY_TX_PWRCTRL9_RES_DC_REMOVAL_S     31
 
+#define        AR_PHY_MODE_ASYNCFIFO                   0x80    /* Enable async 
fifo */
+
 #endif /* _DEV_ATH_AR5416PHY_H_ */

Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416reg.h
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416reg.h Thu May 26 08:35:47 2011        
(r222300)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416reg.h Thu May 26 09:15:33 2011        
(r222301)
@@ -219,6 +219,10 @@
 #define        AR_AHB_PAGE_SIZE_1K     0x00000000      /* set page-size as 1k 
*/
 #define        AR_AHB_PAGE_SIZE_2K     0x00000008      /* set page-size as 2k 
*/
 #define        AR_AHB_PAGE_SIZE_4K     0x00000010      /* set page-size as 4k 
*/
+/* Kiwi */
+#define        AR_AHB_CUSTOM_BURST_EN  0x000000C0      /* set Custom Burst 
Mode */
+#define        AR_AHB_CUSTOM_BURST_EN_S                6       /* set Custom 
Burst Mode */
+#define        AR_AHB_CUSTOM_BURST_ASYNC_FIFO_VAL      3       /* set both 
bits in Async FIFO mode */
 
 /* MAC PCU Registers */
 #define        AR_STA_ID1_PRESERVE_SEQNUM      0x20000000 /* Don't replace seq 
num */
@@ -451,9 +455,23 @@
  * For Merlin and above only.
  */
 #define        AR_PCU_MISC_MODE2_ADHOC_MCAST_KEYID_ENABLE      0x00000040
+#define        AR_PCU_MISC_MODE2_ENABLE_AGGWEP 0x00020000      /* Kiwi or 
later? */
 #define        AR_PCU_MISC_MODE2_HWWAR1        0x00100000
 #define        AR_PCU_MISC_MODE2_HWWAR2        0x02000000
 
+/* For Kiwi */
+#define        AR_MAC_PCU_ASYNC_FIFO_REG3              0x8358
+#define        AR_MAC_PCU_ASYNC_FIFO_REG3_DATAPATH_SEL 0x00000400
+#define        AR_MAC_PCU_ASYNC_FIFO_REG3_SOFT_RESET   0x80000000
+
+/* TSF2. For Kiwi only */
+#define        AR_TSF2_L32                     0x8390
+#define        AR_TSF2_U32                     0x8394
+
+/* MAC Direct Connect Control. For Kiwi only */
+#define        AR_DIRECT_CONNECT               0x83A0
+#define        AR_DC_AP_STA_EN                 0x00000001
+
 /* GPIO Interrupt */
 #define        AR_INTR_GPIO            0x3FF00000      /* gpio interrupted */
 #define        AR_INTR_GPIO_S          20
@@ -488,6 +506,17 @@
 #define        AR_PCU_TXBUF_CTRL_USABLE_SIZE   0x700
 #define        AR_9285_PCU_TXBUF_CTRL_USABLE_SIZE 0x380
 
+/* IFS, SIFS, slot, etc for Async FIFO mode (Kiwi) */
+#define        AR_D_GBL_IFS_SIFS_ASYNC_FIFO_DUR        0x000003AB
+#define        AR_TIME_OUT_ACK_CTS_ASYNC_FIFO_DUR      0x16001D56
+#define        AR_USEC_ASYNC_FIFO_DUR                  0x12e00074
+#define        AR_D_GBL_IFS_SLOT_ASYNC_FIFO_DUR        0x00000420
+#define        AR_D_GBL_IFS_EIFS_ASYNC_FIFO_DUR        0x0000A5EB
+
+/* Used by Kiwi Async FIFO */
+#define        AR_MAC_PCU_LOGIC_ANALYZER               0x8264
+#define        AR_MAC_PCU_LOGIC_ANALYZER_DISBUG20768   0x20000000
+
 /* Eeprom defines */
 #define        AR_EEPROM_STATUS_DATA_VAL           0x0000ffff
 #define        AR_EEPROM_STATUS_DATA_VAL_S         0
@@ -566,7 +595,7 @@
 #define        AR_XSREV_REVISION_KITE_10       0       /* Kite 1.0 */
 #define        AR_XSREV_REVISION_KITE_11       1       /* Kite 1.1 */
 #define        AR_XSREV_REVISION_KITE_12       2       /* Kite 1.2 */
-#define        AR_XSREV_VERSION_KIWI           0x180   /* Kite Version */
+#define        AR_XSREV_VERSION_KIWI           0x180   /* Kiwi (AR9287) */
 #define        AR_XSREV_REVISION_KIWI_10       0
 #define        AR_XSREV_REVISION_KIWI_11       1
 #define        AR_XSREV_REVISION_KIWI_12       2

Modified: head/sys/dev/ath/ath_hal/ar9002/ar9285_phy.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar9002/ar9285_phy.c        Thu May 26 08:35:47 
2011        (r222300)
+++ head/sys/dev/ath/ath_hal/ar9002/ar9285_phy.c        Thu May 26 09:15:33 
2011        (r222301)
@@ -87,8 +87,10 @@ ar9285_check_div_comb(struct ath_hal *ah
        HAL_EEPROM_v4k *ee = AH_PRIVATE(ah)->ah_eeprom;
         const MODAL_EEP4K_HEADER *pModal = &ee->ee_base.modalHeader;
 
+#if 0
        /* For now, simply disable this until it's better debugged. -adrian */
        return AH_FALSE;
+#endif
 
        if (! AR_SREV_KITE(ah))
                return AH_FALSE;

Added: head/sys/dev/ath/ath_hal/ar9002/ar9287.c
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/sys/dev/ath/ath_hal/ar9002/ar9287.c    Thu May 26 09:15:33 2011        
(r222301)
@@ -0,0 +1,392 @@
+/*
+ * Copyright (c) 2008-2009 Sam Leffler, Errno Consulting
+ * Copyright (c) 2008 Atheros Communications, Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+#include "opt_ah.h"
+
+/*
+ * NB: Merlin and later have a simpler RF backend.
+ */
+#include "ah.h"
+#include "ah_internal.h"
+
+#include "ah_eeprom_v14.h"
+
+#include "ar9002/ar9287.h"
+#include "ar5416/ar5416reg.h"
+#include "ar5416/ar5416phy.h"
+
+#define N(a)    (sizeof(a)/sizeof(a[0]))
+
+struct ar9287State {
+       RF_HAL_FUNCS    base;           /* public state, must be first */
+       uint16_t        pcdacTable[1];  /* XXX */
+};
+#define        AR9280(ah)      ((struct ar9287State *) AH5212(ah)->ah_rfHal)
+
+static HAL_BOOL ar9287GetChannelMaxMinPower(struct ath_hal *,
+       const struct ieee80211_channel *, int16_t *maxPow,int16_t *minPow);
+int16_t ar9287GetNfAdjust(struct ath_hal *ah, const HAL_CHANNEL_INTERNAL *c);
+
+static void
+ar9287WriteRegs(struct ath_hal *ah, u_int modesIndex, u_int freqIndex,
+       int writes)
+{
+       (void) ath_hal_ini_write(ah, &AH5416(ah)->ah_ini_bb_rfgain,
+               freqIndex, writes);
+}
+
+/*
+ * Take the MHz channel value and set the Channel value
+ *
+ * ASSUMES: Writes enabled to analog bus
+ *
+ * Actual Expression,
+ *
+ * For 2GHz channel, 
+ * Channel Frequency = (3/4) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^17) 
+ * (freq_ref = 40MHz)
+ *
+ * For 5GHz channel,
+ * Channel Frequency = (3/2) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^10)
+ * (freq_ref = 40MHz/(24>>amodeRefSel))
+ *
+ * For 5GHz channels which are 5MHz spaced,
+ * Channel Frequency = (3/2) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^17)
+ * (freq_ref = 40MHz)
+ */
+static HAL_BOOL
+ar9287SetChannel(struct ath_hal *ah, const struct ieee80211_channel *chan)
+{
+       uint16_t bMode, fracMode, aModeRefSel = 0;
+       uint32_t freq, ndiv, channelSel = 0, channelFrac = 0, reg32 = 0;
+       CHAN_CENTERS centers;
+       uint32_t refDivA = 24;
+
+       OS_MARK(ah, AH_MARK_SETCHANNEL, chan->ic_freq);
+
+       ar5416GetChannelCenters(ah, chan, &centers);
+       freq = centers.synth_center;
+
+       reg32 = OS_REG_READ(ah, AR_PHY_SYNTH_CONTROL);
+       reg32 &= 0xc0000000;
+
+       if (freq < 4800) {     /* 2 GHz, fractional mode */
+               uint32_t txctl;
+               int regWrites = 0;
+
+               bMode = 1;
+               fracMode = 1;
+               aModeRefSel = 0;       
+               channelSel = (freq * 0x10000)/15;
+
+               if (AR_SREV_KIWI_11_OR_LATER(ah)) {
+                       if (freq == 2484) {
+                               ath_hal_ini_write(ah,
+                                   &AH9287(ah)->ah_ini_cckFirJapan2484, 1,
+                                   regWrites);
+                       } else {
+                               ath_hal_ini_write(ah,
+                                   &AH9287(ah)->ah_ini_cckFirNormal, 1,
+                                   regWrites);
+                       }
+               }
+
+               txctl = OS_REG_READ(ah, AR_PHY_CCK_TX_CTRL);
+               if (freq == 2484) {
+                       /* Enable channel spreading for channel 14 */
+                       OS_REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
+                           txctl | AR_PHY_CCK_TX_CTRL_JAPAN);
+               } else {
+                       OS_REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
+                           txctl &~ AR_PHY_CCK_TX_CTRL_JAPAN);
+               }     
+       } else {
+               bMode = 0;
+               fracMode = 0;
+
+               if ((freq % 20) == 0) {
+                       aModeRefSel = 3;
+               } else if ((freq % 10) == 0) {
+                       aModeRefSel = 2;
+               } else {
+                       aModeRefSel = 0;
+                       /*
+                        * Enable 2G (fractional) mode for channels which
+                        * are 5MHz spaced
+                        */
+                       fracMode = 1;
+                       refDivA = 1;
+                       channelSel = (freq * 0x8000)/15;
+
+                       /* RefDivA setting */
+                       OS_A_REG_RMW_FIELD(ah, AR_AN_SYNTH9,
+                           AR_AN_SYNTH9_REFDIVA, refDivA);
+               }
+               if (!fracMode) {
+                       ndiv = (freq * (refDivA >> aModeRefSel))/60;
+                       channelSel =  ndiv & 0x1ff;         
+                       channelFrac = (ndiv & 0xfffffe00) * 2;
+                       channelSel = (channelSel << 17) | channelFrac;
+               }
+       }
+
+       reg32 = reg32 | (bMode << 29) | (fracMode << 28) |
+           (aModeRefSel << 26) | (channelSel);
+
+       OS_REG_WRITE(ah, AR_PHY_SYNTH_CONTROL, reg32);
+
+       AH_PRIVATE(ah)->ah_curchan = chan;
+
+       return AH_TRUE;
+}
+
+/*
+ * Return a reference to the requested RF Bank.
+ */
+static uint32_t *
+ar9287GetRfBank(struct ath_hal *ah, int bank)
+{
+       HALDEBUG(ah, HAL_DEBUG_ANY, "%s: unknown RF Bank %d requested\n",
+           __func__, bank);
+       return AH_NULL;
+}
+
+/*
+ * Reads EEPROM header info from device structure and programs
+ * all rf registers
+ */
+static HAL_BOOL
+ar9287SetRfRegs(struct ath_hal *ah, const struct ieee80211_channel *chan,
+                uint16_t modesIndex, uint16_t *rfXpdGain)
+{
+       return AH_TRUE;         /* nothing to do */
+}
+
+/*
+ * Read the transmit power levels from the structures taken from EEPROM
+ * Interpolate read transmit power values for this channel
+ * Organize the transmit power values into a table for writing into the 
hardware
+ */
+
+static HAL_BOOL
+ar9287SetPowerTable(struct ath_hal *ah, int16_t *pPowerMin, int16_t 
*pPowerMax, 
+       const struct ieee80211_channel *chan, uint16_t *rfXpdGain)
+{
+       return AH_TRUE;
+}
+
+#if 0
+static int16_t
+ar9287GetMinPower(struct ath_hal *ah, EXPN_DATA_PER_CHANNEL_5112 *data)
+{
+    int i, minIndex;
+    int16_t minGain,minPwr,minPcdac,retVal;
+
+    /* Assume NUM_POINTS_XPD0 > 0 */
+    minGain = data->pDataPerXPD[0].xpd_gain;
+    for (minIndex=0,i=1; i<NUM_XPD_PER_CHANNEL; i++) {
+        if (data->pDataPerXPD[i].xpd_gain < minGain) {
+            minIndex = i;
+            minGain = data->pDataPerXPD[i].xpd_gain;
+        }
+    }
+    minPwr = data->pDataPerXPD[minIndex].pwr_t4[0];
+    minPcdac = data->pDataPerXPD[minIndex].pcdac[0];
+    for (i=1; i<NUM_POINTS_XPD0; i++) {
+        if (data->pDataPerXPD[minIndex].pwr_t4[i] < minPwr) {
+            minPwr = data->pDataPerXPD[minIndex].pwr_t4[i];
+            minPcdac = data->pDataPerXPD[minIndex].pcdac[i];
+        }
+    }
+    retVal = minPwr - (minPcdac*2);
+    return(retVal);
+}
+#endif
+
+static HAL_BOOL
+ar9287GetChannelMaxMinPower(struct ath_hal *ah,
+       const struct ieee80211_channel *chan,
+       int16_t *maxPow, int16_t *minPow)
+{
+#if 0
+    struct ath_hal_5212 *ahp = AH5212(ah);
+    int numChannels=0,i,last;
+    int totalD, totalF,totalMin;
+    EXPN_DATA_PER_CHANNEL_5112 *data=AH_NULL;
+    EEPROM_POWER_EXPN_5112 *powerArray=AH_NULL;
+
+    *maxPow = 0;
+    if (IS_CHAN_A(chan)) {
+        powerArray = ahp->ah_modePowerArray5112;
+        data = powerArray[headerInfo11A].pDataPerChannel;
+        numChannels = powerArray[headerInfo11A].numChannels;
+    } else if (IS_CHAN_G(chan) || IS_CHAN_108G(chan)) {
+        /* XXX - is this correct? Should we also use the same power for turbo 
G? */
+        powerArray = ahp->ah_modePowerArray5112;
+        data = powerArray[headerInfo11G].pDataPerChannel;
+        numChannels = powerArray[headerInfo11G].numChannels;
+    } else if (IS_CHAN_B(chan)) {
+        powerArray = ahp->ah_modePowerArray5112;
+        data = powerArray[headerInfo11B].pDataPerChannel;
+        numChannels = powerArray[headerInfo11B].numChannels;
+    } else {
+        return (AH_TRUE);
+    }
+    /* Make sure the channel is in the range of the TP values
+     *  (freq piers)
+     */
+    if ((numChannels < 1) ||
+        (chan->channel < data[0].channelValue) ||
+        (chan->channel > data[numChannels-1].channelValue))
+        return(AH_FALSE);
+
+    /* Linearly interpolate the power value now */
+    for (last=0,i=0;
+         (i<numChannels) && (chan->channel > data[i].channelValue);
+         last=i++);
+    totalD = data[i].channelValue - data[last].channelValue;
+    if (totalD > 0) {
+        totalF = data[i].maxPower_t4 - data[last].maxPower_t4;
+        *maxPow = (int8_t) ((totalF*(chan->channel-data[last].channelValue) + 
data[last].maxPower_t4*totalD)/totalD);
+
+        totalMin = ar9287GetMinPower(ah,&data[i]) - ar9287GetMinPower(ah, 
&data[last]);
+        *minPow = (int8_t) ((totalMin*(chan->channel-data[last].channelValue) 
+ ar9287GetMinPower(ah, &data[last])*totalD)/totalD);
+        return (AH_TRUE);
+    } else {
+        if (chan->channel == data[i].channelValue) {
+            *maxPow = data[i].maxPower_t4;
+            *minPow = ar9287GetMinPower(ah, &data[i]);
+            return(AH_TRUE);
+        } else
+            return(AH_FALSE);
+    }
+#else
+       *maxPow = *minPow = 0;
+       return AH_FALSE;
+#endif
+}
+
+/*
+ * The ordering of nfarray is thus:
+ *
+ * nfarray[0]: Chain 0 ctl
+ * nfarray[1]: Chain 1 ctl
+ * nfarray[2]: Chain 2 ctl
+ * nfarray[3]: Chain 0 ext
+ * nfarray[4]: Chain 1 ext
+ * nfarray[5]: Chain 2 ext
+ */
+static void
+ar9287GetNoiseFloor(struct ath_hal *ah, int16_t nfarray[])
+{
+       int16_t nf;
+
+       nf = MS(OS_REG_READ(ah, AR_PHY_CCA), AR9280_PHY_MINCCA_PWR);
+       if (nf & 0x100)
+               nf = 0 - ((nf ^ 0x1ff) + 1);
+       HALDEBUG(ah, HAL_DEBUG_NFCAL,
+           "NF calibrated [ctl] [chain 0] is %d\n", nf);
+       nfarray[0] = nf;
+
+       nf = MS(OS_REG_READ(ah, AR_PHY_CH1_CCA), AR9280_PHY_CH1_MINCCA_PWR);
+       if (nf & 0x100)
+               nf = 0 - ((nf ^ 0x1ff) + 1);
+       HALDEBUG(ah, HAL_DEBUG_NFCAL,
+           "NF calibrated [ctl] [chain 1] is %d\n", nf);
+       nfarray[1] = nf;
+
+       nf = MS(OS_REG_READ(ah, AR_PHY_EXT_CCA), AR9280_PHY_EXT_MINCCA_PWR);
+       if (nf & 0x100)
+               nf = 0 - ((nf ^ 0x1ff) + 1);
+       HALDEBUG(ah, HAL_DEBUG_NFCAL,
+           "NF calibrated [ext] [chain 0] is %d\n", nf);
+       nfarray[3] = nf;
+
+       nf = MS(OS_REG_READ(ah, AR_PHY_CH1_EXT_CCA), 
AR9280_PHY_CH1_EXT_MINCCA_PWR);
+       if (nf & 0x100)
+               nf = 0 - ((nf ^ 0x1ff) + 1);
+       HALDEBUG(ah, HAL_DEBUG_NFCAL,
+           "NF calibrated [ext] [chain 1] is %d\n", nf);
+       nfarray[4] = nf;
+
+        /* Chain 2 - invalid */
+        nfarray[2] = 0;
+        nfarray[5] = 0;
+
+}
+
+/*
+ * Adjust NF based on statistical values for 5GHz frequencies.
+ * Stubbed:Not used by Fowl
+ */
+int16_t
+ar9287GetNfAdjust(struct ath_hal *ah, const HAL_CHANNEL_INTERNAL *c)
+{
+       return 0;
+}
+
+/*
+ * Free memory for analog bank scratch buffers
+ */
+static void
+ar9287RfDetach(struct ath_hal *ah)
+{
+       struct ath_hal_5212 *ahp = AH5212(ah);
+
+       HALASSERT(ahp->ah_rfHal != AH_NULL);
+       ath_hal_free(ahp->ah_rfHal);
+       ahp->ah_rfHal = AH_NULL;
+}
+
+HAL_BOOL
+ar9287RfAttach(struct ath_hal *ah, HAL_STATUS *status)
+{
+       struct ath_hal_5212 *ahp = AH5212(ah);
+       struct ar9287State *priv;
+
+       HALDEBUG(ah, HAL_DEBUG_ATTACH, "%s: attach AR9280 radio\n", __func__);
+
+       HALASSERT(ahp->ah_rfHal == AH_NULL);
+       priv = ath_hal_malloc(sizeof(struct ar9287State));
+       if (priv == AH_NULL) {
+               HALDEBUG(ah, HAL_DEBUG_ANY,
+                   "%s: cannot allocate private state\n", __func__);
+               *status = HAL_ENOMEM;           /* XXX */
+               return AH_FALSE;
+       }
+       priv->base.rfDetach             = ar9287RfDetach;
+       priv->base.writeRegs            = ar9287WriteRegs;
+       priv->base.getRfBank            = ar9287GetRfBank;
+       priv->base.setChannel           = ar9287SetChannel;
+       priv->base.setRfRegs            = ar9287SetRfRegs;
+       priv->base.setPowerTable        = ar9287SetPowerTable;
+       priv->base.getChannelMaxMinPower = ar9287GetChannelMaxMinPower;
+       priv->base.getNfAdjust          = ar9287GetNfAdjust;
+
+       ahp->ah_pcdacTable = priv->pcdacTable;
+       ahp->ah_pcdacTableSize = sizeof(priv->pcdacTable);
+       ahp->ah_rfHal = &priv->base;
+       /*
+        * Set noise floor adjust method; we arrange a
+        * direct call instead of thunking.
+        */
+       AH_PRIVATE(ah)->ah_getNfAdjust = priv->base.getNfAdjust;
+       AH_PRIVATE(ah)->ah_getNoiseFloor = ar9287GetNoiseFloor;
+
+       return AH_TRUE;
+}

Added: head/sys/dev/ath/ath_hal/ar9002/ar9287.h
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/sys/dev/ath/ath_hal/ar9002/ar9287.h    Thu May 26 09:15:33 2011        
(r222301)
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2010 Atheros Communications, Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _ATH_AR9287_H_
+#define _ATH_AR9287_H_
+
+#include "ar5416/ar5416.h"
+
+/*
+ * This is a chip thing, but it's used here as part of the
+ * ath_hal_9287 struct; so it's convienent to locate the
+ * define here.
+ */
+#define AR9287_TX_GAIN_TABLE_SIZE              22
+
+struct ath_hal_9287 {
+       struct ath_hal_5416 ah_5416;
+
+       HAL_INI_ARRAY   ah_ini_xmodes;
+       HAL_INI_ARRAY   ah_ini_rxgain;
+       HAL_INI_ARRAY   ah_ini_txgain;
+
+       HAL_INI_ARRAY   ah_ini_cckFirNormal;
+       HAL_INI_ARRAY   ah_ini_cckFirJapan2484;
+
+       int PDADCdelta;
+
+       uint32_t        originalGain[AR9287_TX_GAIN_TABLE_SIZE];
+};
+#define        AH9287(_ah)     ((struct ath_hal_9287 *)(_ah))
+
+#define        AR9287_DEFAULT_RXCHAINMASK      3
+#define        AR9285_DEFAULT_RXCHAINMASK      1
+#define        AR9287_DEFAULT_TXCHAINMASK      3
+#define        AR9285_DEFAULT_TXCHAINMASK      1
+
+#define        AR_PHY_CCA_NOM_VAL_9287_2GHZ            -112
+#define        AR_PHY_CCA_NOM_VAL_9287_5GHZ            -112
+#define        AR_PHY_CCA_MIN_GOOD_VAL_9287_2GHZ       -127
+#define        AR_PHY_CCA_MIN_GOOD_VAL_9287_5GHZ       -122
+#define        AR_PHY_CCA_MAX_GOOD_VAL_9287_2GHZ       -97
+#define        AR_PHY_CCA_MAX_GOOD_VAL_9287_5GHZ       -102
+
+extern HAL_BOOL ar9287RfAttach(struct ath_hal *, HAL_STATUS *);
+extern HAL_BOOL ar9287SetAntennaSwitch(struct ath_hal *, HAL_ANT_SETTING);
+
+#endif /* _ATH_AR9287_H_ */

Added: head/sys/dev/ath/ath_hal/ar9002/ar9287.ini
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/sys/dev/ath/ath_hal/ar9002/ar9287.ini  Thu May 26 09:15:33 2011        
(r222301)
@@ -0,0 +1,783 @@
+/*
+ * Copyright (c) 2010 Atheros Communications Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+static const uint32_t ar9287Modes_9287_1_1[][6] = {
+       {0x00001030, 0x00000000, 0x00000000, 0x000002c0, 0x00000160, 
0x000001e0},
+       {0x00001070, 0x00000000, 0x00000000, 0x00000318, 0x0000018c, 
0x000001e0},
+       {0x000010b0, 0x00000000, 0x00000000, 0x00007c70, 0x00003e38, 
0x00001180},
+       {0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
0x00000008},
+       {0x00008014, 0x00000000, 0x00000000, 0x10801600, 0x08400b00, 
0x06e006e0},
+       {0x0000801c, 0x00000000, 0x00000000, 0x12e00057, 0x12e0002b, 
0x0988004f},
+       {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 
0x08f04810},
+       {0x000081d0, 0x00003200, 0x00003200, 0x0000320a, 0x0000320a, 
0x0000320a},
+       {0x00008318, 0x00000000, 0x00000000, 0x00006880, 0x00003440, 
0x00006880},
+       {0x00009804, 0x00000000, 0x00000000, 0x000003c4, 0x00000300, 
0x00000303},
+       {0x00009820, 0x00000000, 0x00000000, 0x02020200, 0x02020200, 
0x02020200},
+       {0x00009824, 0x00000000, 0x00000000, 0x01000e0e, 0x01000e0e, 
0x01000e0e},
+       {0x00009828, 0x00000000, 0x00000000, 0x3a020001, 0x3a020001, 
0x3a020001},
+       {0x00009834, 0x00000000, 0x00000000, 0x00000e0e, 0x00000e0e, 
0x00000e0e},
+       {0x00009838, 0x00000003, 0x00000003, 0x00000007, 0x00000007, 
0x00000007},
+       {0x00009840, 0x206a002e, 0x206a002e, 0x206a012e, 0x206a012e, 
0x206a012e},
+       {0x00009844, 0x03720000, 0x03720000, 0x037216a0, 0x037216a0, 
0x037216a0},
+       {0x00009850, 0x60000000, 0x60000000, 0x6d4000e2, 0x6c4000e2, 
0x6c4000e2},
+       {0x00009858, 0x7c000d00, 0x7c000d00, 0x7ec84d2e, 0x7ec84d2e, 
0x7ec84d2e},
+       {0x0000985c, 0x3100005e, 0x3100005e, 0x3139605e, 0x31395d5e, 
0x31395d5e},
+       {0x00009860, 0x00058d00, 0x00058d00, 0x00058d20, 0x00058d20, 
0x00058d18},
+       {0x00009864, 0x00000e00, 0x00000e00, 0x0001ce00, 0x0001ce00, 
0x0001ce00},
+       {0x00009868, 0x000040c0, 0x000040c0, 0x5ac640d0, 0x5ac640d0, 
0x5ac640d0},
+       {0x0000986c, 0x00000080, 0x00000080, 0x06903881, 0x06903881, 
0x06903881},
+       {0x00009914, 0x00000000, 0x00000000, 0x00001130, 0x00000898, 
0x000007d0},
+       {0x00009918, 0x00000000, 0x00000000, 0x00000016, 0x0000000b, 
0x00000016},
+       {0x00009924, 0xd00a8a01, 0xd00a8a01, 0xd00a8a0d, 0xd00a8a0d, 
0xd00a8a0d},
+       {0x00009944, 0xefbc0000, 0xefbc0000, 0xefbc1010, 0xefbc1010, 
0xefbc1010},
+       {0x00009960, 0x00000000, 0x00000000, 0x00000010, 0x00000010, 
0x00000010},
+       {0x0000a960, 0x00000000, 0x00000000, 0x00000010, 0x00000010, 
0x00000010},
+       {0x00009964, 0x00000000, 0x00000000, 0x00000210, 0x00000210, 
0x00000210},
+       {0x0000c968, 0x00000200, 0x00000200, 0x000003ce, 0x000003ce, 
0x000003ce},
+       {0x000099b8, 0x00000000, 0x00000000, 0x0000001c, 0x0000001c, 
0x0000001c},
+       {0x000099bc, 0x00000000, 0x00000000, 0x00000c00, 0x00000c00, 
0x00000c00},
+       {0x000099c0, 0x00000000, 0x00000000, 0x05eea6d4, 0x05eea6d4, 
0x05eea6d4},
+       {0x0000a204, 0x00000440, 0x00000440, 0x00000444, 0x00000444, 
0x00000444},
+       {0x0000a20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
0x00000000},
+       {0x0000b20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
0x00000000},
+       {0x0000a21c, 0x1803800a, 0x1803800a, 0x1883800a, 0x1883800a, 
0x1883800a},
+       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 
0x00000000},
+       {0x0000a250, 0x00000000, 0x00000000, 0x0004a000, 0x0004a000, 
0x0004a000},
+       {0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 
0x7999aa0e},
+       {0x0000a3d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
0x00000000},
+};
+
+static const uint32_t ar9287Common_9287_1_1[][2] = {
+       /* Addr      allmodes  */
+       {0x0000000c, 0x00000000},
+       {0x00000030, 0x00020015},
+       {0x00000034, 0x00000005},
+       {0x00000040, 0x00000000},
+       {0x00000044, 0x00000008},
+       {0x00000048, 0x00000008},
+       {0x0000004c, 0x00000010},
+       {0x00000050, 0x00000000},
+       {0x00000054, 0x0000001f},
+       {0x00000800, 0x00000000},
+       {0x00000804, 0x00000000},
+       {0x00000808, 0x00000000},
+       {0x0000080c, 0x00000000},
+       {0x00000810, 0x00000000},
+       {0x00000814, 0x00000000},
+       {0x00000818, 0x00000000},
+       {0x0000081c, 0x00000000},
+       {0x00000820, 0x00000000},
+       {0x00000824, 0x00000000},
+       {0x00001040, 0x002ffc0f},
+       {0x00001044, 0x002ffc0f},
+       {0x00001048, 0x002ffc0f},
+       {0x0000104c, 0x002ffc0f},
+       {0x00001050, 0x002ffc0f},
+       {0x00001054, 0x002ffc0f},
+       {0x00001058, 0x002ffc0f},
+       {0x0000105c, 0x002ffc0f},
+       {0x00001060, 0x002ffc0f},
+       {0x00001064, 0x002ffc0f},
+       {0x00001230, 0x00000000},
+       {0x00001270, 0x00000000},
+       {0x00001038, 0x00000000},
+       {0x00001078, 0x00000000},
+       {0x000010b8, 0x00000000},
+       {0x000010f8, 0x00000000},
+       {0x00001138, 0x00000000},
+       {0x00001178, 0x00000000},
+       {0x000011b8, 0x00000000},
+       {0x000011f8, 0x00000000},
+       {0x00001238, 0x00000000},
+       {0x00001278, 0x00000000},
+       {0x000012b8, 0x00000000},
+       {0x000012f8, 0x00000000},
+       {0x00001338, 0x00000000},
+       {0x00001378, 0x00000000},
+       {0x000013b8, 0x00000000},
+       {0x000013f8, 0x00000000},
+       {0x00001438, 0x00000000},
+       {0x00001478, 0x00000000},
+       {0x000014b8, 0x00000000},
+       {0x000014f8, 0x00000000},
+       {0x00001538, 0x00000000},
+       {0x00001578, 0x00000000},
+       {0x000015b8, 0x00000000},
+       {0x000015f8, 0x00000000},
+       {0x00001638, 0x00000000},
+       {0x00001678, 0x00000000},
+       {0x000016b8, 0x00000000},
+       {0x000016f8, 0x00000000},
+       {0x00001738, 0x00000000},
+       {0x00001778, 0x00000000},
+       {0x000017b8, 0x00000000},
+       {0x000017f8, 0x00000000},
+       {0x0000103c, 0x00000000},
+       {0x0000107c, 0x00000000},
+       {0x000010bc, 0x00000000},
+       {0x000010fc, 0x00000000},
+       {0x0000113c, 0x00000000},
+       {0x0000117c, 0x00000000},
+       {0x000011bc, 0x00000000},
+       {0x000011fc, 0x00000000},
+       {0x0000123c, 0x00000000},
+       {0x0000127c, 0x00000000},
+       {0x000012bc, 0x00000000},
+       {0x000012fc, 0x00000000},
+       {0x0000133c, 0x00000000},
+       {0x0000137c, 0x00000000},
+       {0x000013bc, 0x00000000},
+       {0x000013fc, 0x00000000},
+       {0x0000143c, 0x00000000},
+       {0x0000147c, 0x00000000},
+       {0x00004030, 0x00000002},
+       {0x0000403c, 0x00000002},
+       {0x00004024, 0x0000001f},
+       {0x00004060, 0x00000000},
+       {0x00004064, 0x00000000},
+       {0x00007010, 0x00000033},
+       {0x00007020, 0x00000000},
+       {0x00007034, 0x00000002},
+       {0x00007038, 0x000004c2},
+       {0x00008004, 0x00000000},
+       {0x00008008, 0x00000000},
+       {0x0000800c, 0x00000000},
+       {0x00008018, 0x00000700},
+       {0x00008020, 0x00000000},
+       {0x00008038, 0x00000000},
+       {0x0000803c, 0x00000000},
+       {0x00008048, 0x40000000},
+       {0x00008054, 0x00000000},
+       {0x00008058, 0x00000000},
+       {0x0000805c, 0x000fc78f},
+       {0x00008060, 0x0000000f},
+       {0x00008064, 0x00000000},
+       {0x00008070, 0x00000000},
+       {0x000080c0, 0x2a80001a},
+       {0x000080c4, 0x05dc01e0},
+       {0x000080c8, 0x1f402710},
+       {0x000080cc, 0x01f40000},
+       {0x000080d0, 0x00001e00},
+       {0x000080d4, 0x00000000},
+       {0x000080d8, 0x00400000},
+       {0x000080e0, 0xffffffff},
+       {0x000080e4, 0x0000ffff},
+       {0x000080e8, 0x003f3f3f},
+       {0x000080ec, 0x00000000},
+       {0x000080f0, 0x00000000},
+       {0x000080f4, 0x00000000},
+       {0x000080f8, 0x00000000},
+       {0x000080fc, 0x00020000},
+       {0x00008100, 0x00020000},
+       {0x00008104, 0x00000001},
+       {0x00008108, 0x00000052},
+       {0x0000810c, 0x00000000},
+       {0x00008110, 0x00000168},
+       {0x00008118, 0x000100aa},
+       {0x0000811c, 0x00003210},
+       {0x00008124, 0x00000000},
+       {0x00008128, 0x00000000},
+       {0x0000812c, 0x00000000},
+       {0x00008130, 0x00000000},
+       {0x00008134, 0x00000000},
+       {0x00008138, 0x00000000},
+       {0x0000813c, 0x00000000},
+       {0x00008144, 0xffffffff},
+       {0x00008168, 0x00000000},
+       {0x0000816c, 0x00000000},
+       {0x00008170, 0x18487320},
+       {0x00008174, 0xfaa4fa50},
+       {0x00008178, 0x00000100},
+       {0x0000817c, 0x00000000},
+       {0x000081c0, 0x00000000},
+       {0x000081c4, 0x00000000},
+       {0x000081d4, 0x00000000},
+       {0x000081ec, 0x00000000},
+       {0x000081f0, 0x00000000},
+       {0x000081f4, 0x00000000},
+       {0x000081f8, 0x00000000},
+       {0x000081fc, 0x00000000},
+       {0x00008200, 0x00000000},
+       {0x00008204, 0x00000000},
+       {0x00008208, 0x00000000},
+       {0x0000820c, 0x00000000},
+       {0x00008210, 0x00000000},
+       {0x00008214, 0x00000000},
+       {0x00008218, 0x00000000},
+       {0x0000821c, 0x00000000},
+       {0x00008220, 0x00000000},
+       {0x00008224, 0x00000000},
+       {0x00008228, 0x00000000},
+       {0x0000822c, 0x00000000},
+       {0x00008230, 0x00000000},
+       {0x00008234, 0x00000000},
+       {0x00008238, 0x00000000},
+       {0x0000823c, 0x00000000},
+       {0x00008240, 0x00100000},
+       {0x00008244, 0x0010f400},
+       {0x00008248, 0x00000100},
+       {0x0000824c, 0x0001e800},
+       {0x00008250, 0x00000000},
+       {0x00008254, 0x00000000},
+       {0x00008258, 0x00000000},
+       {0x0000825c, 0x400000ff},
+       {0x00008260, 0x00080922},
+       {0x00008264, 0x88a00010},
+       {0x00008270, 0x00000000},
+       {0x00008274, 0x40000000},
+       {0x00008278, 0x003e4180},
+       {0x0000827c, 0x00000000},
+       {0x00008284, 0x0000002c},
+       {0x00008288, 0x0000002c},
+       {0x0000828c, 0x000000ff},
+       {0x00008294, 0x00000000},
+       {0x00008298, 0x00000000},
+       {0x0000829c, 0x00000000},
+       {0x00008300, 0x00000040},
+       {0x00008314, 0x00000000},
+       {0x00008328, 0x00000000},
+       {0x0000832c, 0x00000007},
+       {0x00008330, 0x00000302},
+       {0x00008334, 0x00000e00},
+       {0x00008338, 0x00ff0000},
+       {0x0000833c, 0x00000000},
+       {0x00008340, 0x000107ff},
+       {0x00008344, 0x01c81043},
+       {0x00008360, 0xffffffff},
+       {0x00008364, 0xffffffff},
+       {0x00008368, 0x00000000},
+       {0x00008370, 0x00000000},
+       {0x00008374, 0x000000ff},
+       {0x00008378, 0x00000000},
+       {0x0000837c, 0x00000000},
+       {0x00008380, 0xffffffff},
+       {0x00008384, 0xffffffff},
+       {0x00008390, 0x0fffffff},
+       {0x00008394, 0x0fffffff},
+       {0x00008398, 0x00000000},
+       {0x0000839c, 0x00000000},
+       {0x000083a0, 0x00000000},
+       {0x00009808, 0x00000000},
+       {0x0000980c, 0xafe68e30},
+       {0x00009810, 0xfd14e000},
+       {0x00009814, 0x9c0a9f6b},
+       {0x0000981c, 0x00000000},
+       {0x0000982c, 0x0000a000},
+       {0x00009830, 0x00000000},
+       {0x0000983c, 0x00200400},
+       {0x0000984c, 0x0040233c},
+       {0x0000a84c, 0x0040233c},
+       {0x00009854, 0x00000044},
+       {0x00009900, 0x00000000},
+       {0x00009904, 0x00000000},
+       {0x00009908, 0x00000000},
+       {0x0000990c, 0x00000000},
+       {0x00009910, 0x10002310},
+       {0x0000991c, 0x10000fff},
+       {0x00009920, 0x04900000},
+       {0x0000a920, 0x04900000},
+       {0x00009928, 0x00000001},
+       {0x0000992c, 0x00000004},
+       {0x00009930, 0x00000000},
+       {0x0000a930, 0x00000000},
+       {0x00009934, 0x1e1f2022},
+       {0x00009938, 0x0a0b0c0d},
+       {0x0000993c, 0x00000000},
+       {0x00009948, 0x9280c00a},
+       {0x0000994c, 0x00020028},
+       {0x00009954, 0x5f3ca3de},
+       {0x00009958, 0x0108ecff},
+       {0x00009940, 0x14750604},
+       {0x0000c95c, 0x004b6a8e},
+       {0x00009970, 0x990bb514},
+       {0x00009974, 0x00000000},
+       {0x00009978, 0x00000001},
+       {0x0000997c, 0x00000000},
+       {0x000099a0, 0x00000000},
+       {0x000099a4, 0x00000001},
+       {0x000099a8, 0x201fff00},
+       {0x000099ac, 0x0c6f0000},
+       {0x000099b0, 0x03051000},
+       {0x000099b4, 0x00000820},
+       {0x000099c4, 0x06336f77},
+       {0x000099c8, 0x6af6532f},
+       {0x000099cc, 0x08f186c8},
+       {0x000099d0, 0x00046384},
+       {0x000099dc, 0x00000000},
+       {0x000099e0, 0x00000000},
+       {0x000099e4, 0xaaaaaaaa},
+       {0x000099e8, 0x3c466478},
+       {0x000099ec, 0x0cc80caa},
+       {0x000099f0, 0x00000000},
+       {0x000099fc, 0x00001042},
+       {0x0000a208, 0x803e4788},
+       {0x0000a210, 0x4080a333},
+       {0x0000a214, 0x40206c10},
+       {0x0000a218, 0x009c4060},
+       {0x0000a220, 0x01834061},
+       {0x0000a224, 0x00000400},
+       {0x0000a228, 0x000003b5},
+       {0x0000a22c, 0x233f7180},
+       {0x0000a234, 0x20202020},
+       {0x0000a238, 0x20202020},
+       {0x0000a23c, 0x13c889af},
+       {0x0000a240, 0x38490a20},
+       {0x0000a244, 0x00000000},
+       {0x0000a248, 0xfffffffc},
+       {0x0000a24c, 0x00000000},
+       {0x0000a254, 0x00000000},
+       {0x0000a258, 0x0cdbd380},
+       {0x0000a25c, 0x0f0f0f01},
+       {0x0000a260, 0xdfa91f01},
+       {0x0000a264, 0x00418a11},
+       {0x0000b264, 0x00418a11},
+       {0x0000a268, 0x00000000},
+       {0x0000a26c, 0x0e79e5c6},
+       {0x0000b26c, 0x0e79e5c6},
+       {0x0000d270, 0x00820820},
+       {0x0000a278, 0x1ce739ce},
+       {0x0000a27c, 0x050701ce},
+       {0x0000d35c, 0x07ffffef},
+       {0x0000d360, 0x0fffffe7},
+       {0x0000d364, 0x17ffffe5},
+       {0x0000d368, 0x1fffffe4},
+       {0x0000d36c, 0x37ffffe3},
+       {0x0000d370, 0x3fffffe3},
+       {0x0000d374, 0x57ffffe3},
+       {0x0000d378, 0x5fffffe2},
+       {0x0000d37c, 0x7fffffe2},
+       {0x0000d380, 0x7f3c7bba},
+       {0x0000d384, 0xf3307ff0},
+       {0x0000a388, 0x0c000000},
+       {0x0000a38c, 0x20202020},
+       {0x0000a390, 0x20202020},
+       {0x0000a394, 0x1ce739ce},
+       {0x0000a398, 0x000001ce},
+       {0x0000b398, 0x000001ce},
+       {0x0000a39c, 0x00000001},
+       {0x0000a3c8, 0x00000246},
+       {0x0000a3cc, 0x20202020},
+       {0x0000a3d0, 0x20202020},
+       {0x0000a3d4, 0x20202020},

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to