Root/package/mac80211/patches/501-ath9k-eeprom_endianess.patch

1--- a/drivers/net/wireless/ath/ath9k/eeprom_def.c
2+++ b/drivers/net/wireless/ath/ath9k/eeprom_def.c
3@@ -266,7 +266,7 @@ static int ath9k_hw_def_check_eeprom(str
4 {
5     struct ar5416_eeprom_def *eep = &ah->eeprom.def;
6     struct ath_common *common = ath9k_hw_common(ah);
7- u16 *eepdata, temp, magic, magic2;
8+ u16 *eepdata, temp, magic;
9     u32 sum = 0, el;
10     bool need_swap = false;
11     int i, addr, size;
12@@ -276,27 +276,16 @@ static int ath9k_hw_def_check_eeprom(str
13         return false;
14     }
15 
16- if (!ath9k_hw_use_flash(ah)) {
17- ath_dbg(common, EEPROM, "Read Magic = 0x%04X\n", magic);
18-
19- if (magic != AR5416_EEPROM_MAGIC) {
20- magic2 = swab16(magic);
21-
22- if (magic2 == AR5416_EEPROM_MAGIC) {
23- size = sizeof(struct ar5416_eeprom_def);
24- need_swap = true;
25- eepdata = (u16 *) (&ah->eeprom);
26-
27- for (addr = 0; addr < size / sizeof(u16); addr++) {
28- temp = swab16(*eepdata);
29- *eepdata = temp;
30- eepdata++;
31- }
32- } else {
33- ath_err(common,
34- "Invalid EEPROM Magic. Endianness mismatch.\n");
35- return -EINVAL;
36- }
37+ if (swab16(magic) == AR5416_EEPROM_MAGIC &&
38+ !(ah->ah_flags & AH_NO_EEP_SWAP)) {
39+ size = sizeof(struct ar5416_eeprom_def);
40+ need_swap = true;
41+ eepdata = (u16 *) (&ah->eeprom);
42+
43+ for (addr = 0; addr < size / sizeof(u16); addr++) {
44+ temp = swab16(*eepdata);
45+ *eepdata = temp;
46+ eepdata++;
47         }
48     }
49 
50--- a/drivers/net/wireless/ath/ath9k/eeprom_4k.c
51+++ b/drivers/net/wireless/ath/ath9k/eeprom_4k.c
52@@ -195,7 +195,7 @@ static int ath9k_hw_4k_check_eeprom(stru
53     int i, addr;
54 
55 
56- if (!ath9k_hw_use_flash(ah)) {
57+ if (!(ah->ah_flags & AH_NO_EEP_SWAP)) {
58         if (!ath9k_hw_nvram_read(common, AR5416_EEPROM_MAGIC_OFFSET,
59                      &magic)) {
60             ath_err(common, "Reading Magic # failed\n");
61--- a/drivers/net/wireless/ath/ath9k/eeprom_9287.c
62+++ b/drivers/net/wireless/ath/ath9k/eeprom_9287.c
63@@ -189,7 +189,7 @@ static int ath9k_hw_ar9287_check_eeprom(
64     struct ar9287_eeprom *eep = &ah->eeprom.map9287;
65     struct ath_common *common = ath9k_hw_common(ah);
66 
67- if (!ath9k_hw_use_flash(ah)) {
68+ if (!(ah->ah_flags & AH_NO_EEP_SWAP)) {
69         if (!ath9k_hw_nvram_read(common, AR5416_EEPROM_MAGIC_OFFSET,
70                      &magic)) {
71             ath_err(common, "Reading Magic # failed\n");
72--- a/drivers/net/wireless/ath/ath9k/hw.h
73+++ b/drivers/net/wireless/ath/ath9k/hw.h
74@@ -705,6 +705,7 @@ enum ath_cal_list {
75 #define AH_USE_EEPROM 0x1
76 #define AH_UNPLUGGED 0x2 /* The card has been physically removed. */
77 #define AH_FASTCC 0x4
78+#define AH_NO_EEP_SWAP 0x8 /* Do not swap EEPROM data */
79 
80 struct ath_hw {
81     struct ath_ops reg_ops;
82--- a/drivers/net/wireless/ath/ath9k/init.c
83+++ b/drivers/net/wireless/ath/ath9k/init.c
84@@ -537,6 +537,8 @@ static int ath9k_init_softc(u16 devid, s
85         ah->is_clk_25mhz = pdata->is_clk_25mhz;
86         ah->get_mac_revision = pdata->get_mac_revision;
87         ah->external_reset = pdata->external_reset;
88+ if (!pdata->endian_check)
89+ ah->ah_flags |= AH_NO_EEP_SWAP;
90     }
91 
92     common = ath9k_hw_common(ah);
93--- a/include/linux/ath9k_platform.h
94+++ b/include/linux/ath9k_platform.h
95@@ -29,6 +29,7 @@ struct ath9k_platform_data {
96     u32 gpio_mask;
97     u32 gpio_val;
98 
99+ bool endian_check;
100     bool is_clk_25mhz;
101     int (*get_mac_revision)(void);
102     int (*external_reset)(void);
103

Archive Download this file



interactive