mac80211: update to wireless-testing 2010-11-16
[openwrt/svn-archive/archive.git] / package / mac80211 / patches / 530-ath9k_otp_rom.patch
diff --git a/package/mac80211/patches/530-ath9k_otp_rom.patch b/package/mac80211/patches/530-ath9k_otp_rom.patch
deleted file mode 100644 (file)
index 81f8de5..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-@@ -3104,6 +3104,36 @@ error:
-       return false;
- }
-+static bool ar9300_otp_read_word(struct ath_hw *ah, int addr, u32 *data)
-+{
-+      REG_READ(ah, AR9300_OTP_BASE + (4 * addr));
-+
-+      if (!ath9k_hw_wait(ah, AR9300_OTP_STATUS, AR9300_OTP_STATUS_TYPE,
-+                         AR9300_OTP_STATUS_VALID, 1000))
-+              return false;
-+
-+      *data = REG_READ(ah, AR9300_OTP_READ_DATA);
-+      return true;
-+}
-+
-+static bool ar9300_read_otp(struct ath_hw *ah, int address, u8 *buffer,
-+                          int count)
-+{
-+      u32 data;
-+      int i;
-+
-+      for (i = 0; i < count; i++) {
-+              int offset = 8 * ((address - i) % 4);
-+              if (!ar9300_otp_read_word(ah, (address - i) / 4, &data))
-+                      return false;
-+
-+              buffer[i] = (data >> offset) & 0xff;
-+      }
-+
-+      return true;
-+}
-+
-+
- static void ar9300_comp_hdr_unpack(u8 *best, int *code, int *reference,
-                                  int *length, int *major, int *minor)
- {
-@@ -3221,6 +3251,26 @@ static int ar9300_compress_decision(stru
-       return 0;
- }
-+typedef bool (*eeprom_read_op)(struct ath_hw *ah, int address, u8 *buffer,
-+                             int count);
-+
-+static bool ar9300_check_header(void *data)
-+{
-+      u32 *word = data;
-+      return !(*word == 0 || *word == ~0);
-+}
-+
-+static bool ar9300_check_eeprom_header(struct ath_hw *ah, eeprom_read_op read,
-+                                     int base_addr)
-+{
-+      u8 header[4];
-+
-+      if (!read(ah, base_addr, header, 4))
-+              return false;
-+
-+      return ar9300_check_header(header);
-+}
-+
- /*
-  * Read the configuration data from the eeprom.
-  * The data can be put in any specified memory buffer.
-@@ -3241,6 +3291,7 @@ static int ar9300_eeprom_restore_interna
-       int it;
-       u16 checksum, mchecksum;
-       struct ath_common *common = ath9k_hw_common(ah);
-+      eeprom_read_op read;
-       word = kzalloc(2048, GFP_KERNEL);
-       if (!word)
-@@ -3248,14 +3299,42 @@ static int ar9300_eeprom_restore_interna
-       memcpy(mptr, &ar9300_default, mdata_size);
-+      read = ar9300_read_eeprom;
-       cptr = AR9300_BASE_ADDR;
-+      ath_print(common, ATH_DBG_EEPROM,
-+              "Trying EEPROM accesss at Address 0x%04x\n", cptr);
-+      if (ar9300_check_eeprom_header(ah, read, cptr))
-+              goto found;
-+
-+      cptr = AR9300_BASE_ADDR_512;
-+      ath_print(common, ATH_DBG_EEPROM,
-+              "Trying EEPROM accesss at Address 0x%04x\n", cptr);
-+      if (ar9300_check_eeprom_header(ah, read, cptr))
-+              goto found;
-+
-+      read = ar9300_read_otp;
-+      cptr = AR9300_BASE_ADDR;
-+      ath_print(common, ATH_DBG_EEPROM,
-+              "Trying OTP accesss at Address 0x%04x\n", cptr);
-+      if (ar9300_check_eeprom_header(ah, read, cptr))
-+              goto found;
-+
-+      cptr = AR9300_BASE_ADDR_512;
-+      ath_print(common, ATH_DBG_EEPROM,
-+              "Trying OTP accesss at Address 0x%04x\n", cptr);
-+      if (ar9300_check_eeprom_header(ah, read, cptr))
-+              goto found;
-+
-+      goto fail;
-+
-+found:
-+      ath_print(common, ATH_DBG_EEPROM, "Found valid EEPROM data");
-+
-       for (it = 0; it < MSTATE; it++) {
--              if (!ar9300_read_eeprom(ah, cptr, word, COMP_HDR_LEN))
-+              if (!read(ah, cptr, word, COMP_HDR_LEN))
-                       goto fail;
--              if ((word[0] == 0 && word[1] == 0 && word[2] == 0 &&
--                   word[3] == 0) || (word[0] == 0xff && word[1] == 0xff
--                                     && word[2] == 0xff && word[3] == 0xff))
-+              if (!ar9300_check_header(word))
-                       break;
-               ar9300_comp_hdr_unpack(word, &code, &reference,
-@@ -3272,8 +3351,7 @@ static int ar9300_eeprom_restore_interna
-               }
-               osize = length;
--              ar9300_read_eeprom(ah, cptr, word,
--                                 COMP_HDR_LEN + osize + COMP_CKSUM_LEN);
-+              read(ah, cptr, word, COMP_HDR_LEN + osize + COMP_CKSUM_LEN);
-               checksum = ar9300_comp_cksum(&word[COMP_HDR_LEN], length);
-               mchecksum = word[COMP_HDR_LEN + osize] |
-                   (word[COMP_HDR_LEN + osize + 1] << 8);
---- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h
-@@ -79,6 +79,15 @@
- #define FIXED_CCA_THRESHOLD 15
- #define AR9300_BASE_ADDR 0x3ff
-+#define AR9300_BASE_ADDR_512 0x1ff
-+
-+#define AR9300_OTP_BASE                       0x14000
-+#define AR9300_OTP_STATUS             0x15f18
-+#define AR9300_OTP_STATUS_TYPE                0x7
-+#define AR9300_OTP_STATUS_VALID               0x4
-+#define AR9300_OTP_STATUS_ACCESS_BUSY 0x2
-+#define AR9300_OTP_STATUS_SM_BUSY     0x1
-+#define AR9300_OTP_READ_DATA          0x15f1c
- enum targetPowerHTRates {
-       HT_TARGET_RATE_0_8_16,