diff options
Diffstat (limited to 'package/mac80211')
| -rw-r--r-- | package/mac80211/patches/540-ath9k_eeprom_debugfs.patch | 67 | 
1 files changed, 67 insertions, 0 deletions
diff --git a/package/mac80211/patches/540-ath9k_eeprom_debugfs.patch b/package/mac80211/patches/540-ath9k_eeprom_debugfs.patch new file mode 100644 index 000000000..62a5d3167 --- /dev/null +++ b/package/mac80211/patches/540-ath9k_eeprom_debugfs.patch @@ -0,0 +1,67 @@ +--- a/drivers/net/wireless/ath/ath9k/debug.c ++++ b/drivers/net/wireless/ath/ath9k/debug.c +@@ -897,6 +897,53 @@ static const struct file_operations fops + 	.owner = THIS_MODULE + }; +  ++static ssize_t read_file_eeprom(struct file *file, char __user *user_buf, ++			     size_t count, loff_t *ppos) ++{ ++	struct ath_softc *sc = file->private_data; ++	struct ath_hw *ah = sc->sc_ah; ++	struct ath_common *common = ath9k_hw_common(ah); ++	int bytes = 0; ++	int pos = *ppos; ++	int size = 4096; ++	u16 val; ++	int i; ++ ++	if (AR_SREV_9300_20_OR_LATER(ah)) ++		size = 16384; ++ ++	if (*ppos < 0) ++		return -EINVAL; ++ ++	if (count > size - *ppos) ++		count = size - *ppos; ++ ++	for (i = *ppos / 2; count > 0; count -= bytes, *ppos += bytes, i++) { ++		void *from = &val; ++ ++		if (!common->bus_ops->eeprom_read(common, i, &val)) ++			val = 0xffff; ++ ++		if (*ppos % 2) { ++			from++; ++			bytes = 1; ++		} else if (count == 1) { ++			bytes = 1; ++		} else { ++			bytes = 2; ++		} ++		copy_to_user(user_buf, from, bytes); ++		user_buf += bytes; ++	} ++	return *ppos - pos; ++} ++ ++static const struct file_operations fops_eeprom = { ++	.read = read_file_eeprom, ++	.open = ath9k_debugfs_open, ++	.owner = THIS_MODULE ++}; ++ + int ath9k_init_debug(struct ath_hw *ah) + { + 	struct ath_common *common = ath9k_hw_common(ah); +@@ -960,6 +1007,10 @@ int ath9k_init_debug(struct ath_hw *ah) + 			sc->debug.debugfs_phy, &ah->config.cwm_ignore_extcca)) + 		goto err; +  ++	if (!debugfs_create_file("eeprom", S_IRUSR, ++			sc->debug.debugfs_phy, sc, &fops_eeprom)) ++		goto err; ++ + 	sc->debug.regidx = 0; + 	return 0; + err:  | 
