You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
* NXP Semiconductors PN544 NFC Controller
|
||||
|
||||
Required properties:
|
||||
- compatible: Should be "nxp,pn544-i2c".
|
||||
- clock-frequency: I²C work frequency.
|
||||
- reg: address on the bus
|
||||
- interrupt-parent: phandle for the interrupt gpio controller
|
||||
- interrupts: GPIO interrupt to which the chip is connected
|
||||
- enable-gpios: Output GPIO pin used for enabling/disabling the PN544
|
||||
- firmware-gpios: Output GPIO pin used to enter firmware download mode
|
||||
|
||||
Optional SoC Specific Properties:
|
||||
- pinctrl-names: Contains only one value - "default".
|
||||
- pintctrl-0: Specifies the pin control groups used for this controller.
|
||||
|
||||
Example (for ARM-based BeagleBone with PN544 on I2C2):
|
||||
|
||||
&i2c2 {
|
||||
|
||||
status = "okay";
|
||||
|
||||
pn544: pn544@28 {
|
||||
|
||||
compatible = "nxp,pn544-i2c";
|
||||
|
||||
reg = <0x28>;
|
||||
clock-frequency = <400000>;
|
||||
|
||||
interrupt-parent = <&gpio1>;
|
||||
interrupts = <17 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
enable-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>;
|
||||
firmware-gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,33 @@
|
||||
* STMicroelectronics SAS. ST21NFCA NFC Controller
|
||||
|
||||
Required properties:
|
||||
- compatible: Should be "st,st21nfca-i2c".
|
||||
- clock-frequency: I²C work frequency.
|
||||
- reg: address on the bus
|
||||
- interrupt-parent: phandle for the interrupt gpio controller
|
||||
- interrupts: GPIO interrupt to which the chip is connected
|
||||
- enable-gpios: Output GPIO pin used for enabling/disabling the ST21NFCA
|
||||
|
||||
Optional SoC Specific Properties:
|
||||
- pinctrl-names: Contains only one value - "default".
|
||||
- pintctrl-0: Specifies the pin control groups used for this controller.
|
||||
|
||||
Example (for ARM-based BeagleBoard xM with ST21NFCA on I2C2):
|
||||
|
||||
&i2c2 {
|
||||
|
||||
status = "okay";
|
||||
|
||||
st21nfca: st21nfca@1 {
|
||||
|
||||
compatible = "st,st21nfca_i2c";
|
||||
|
||||
reg = <0x01>;
|
||||
clock-frequency = <400000>;
|
||||
|
||||
interrupt-parent = <&gpio5>;
|
||||
interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
|
||||
|
||||
enable-gpios = <&gpio5 29 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
@@ -12,6 +12,7 @@ Required properties:
|
||||
Optional SoC Specific Properties:
|
||||
- pinctrl-names: Contains only one value - "default".
|
||||
- pintctrl-0: Specifies the pin control groups used for this controller.
|
||||
- autosuspend-delay: Specify autosuspend delay in milliseconds.
|
||||
|
||||
Example (for ARM-based BeagleBone with TRF7970A on SPI1):
|
||||
|
||||
@@ -29,6 +30,7 @@ Example (for ARM-based BeagleBone with TRF7970A on SPI1):
|
||||
ti,enable-gpios = <&gpio2 2 GPIO_ACTIVE_LOW>,
|
||||
<&gpio2 5 GPIO_ACTIVE_LOW>;
|
||||
vin-supply = <&ldo3_reg>;
|
||||
autosuspend-delay = <30000>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -23,9 +23,7 @@
|
||||
#include "board.h"
|
||||
|
||||
static struct rfkill_gpio_platform_data wifi_rfkill_platform_data = {
|
||||
.name = "wifi_rfkill",
|
||||
.reset_gpio = 25, /* PD1 */
|
||||
.shutdown_gpio = 85, /* PK5 */
|
||||
.name = "wifi_rfkill",
|
||||
.type = RFKILL_TYPE_WLAN,
|
||||
};
|
||||
|
||||
|
||||
@@ -168,6 +168,7 @@ static void nvram_read_alpha2(const char *prefix, const char *name,
|
||||
static void bcm47xx_fill_sprom_r1234589(struct ssb_sprom *sprom,
|
||||
const char *prefix, bool fallback)
|
||||
{
|
||||
nvram_read_u16(prefix, NULL, "devid", &sprom->dev_id, 0, fallback);
|
||||
nvram_read_u8(prefix, NULL, "ledbh0", &sprom->gpio0, 0xff, fallback);
|
||||
nvram_read_u8(prefix, NULL, "ledbh1", &sprom->gpio1, 0xff, fallback);
|
||||
nvram_read_u8(prefix, NULL, "ledbh2", &sprom->gpio2, 0xff, fallback);
|
||||
|
||||
@@ -448,7 +448,6 @@ mmc_spi_command_send(struct mmc_spi_host *host,
|
||||
{
|
||||
struct scratch *data = host->data;
|
||||
u8 *cp = data->status;
|
||||
u32 arg = cmd->arg;
|
||||
int status;
|
||||
struct spi_transfer *t;
|
||||
|
||||
@@ -465,14 +464,12 @@ mmc_spi_command_send(struct mmc_spi_host *host,
|
||||
* We init the whole buffer to all-ones, which is what we need
|
||||
* to write while we're reading (later) response data.
|
||||
*/
|
||||
memset(cp++, 0xff, sizeof(data->status));
|
||||
memset(cp, 0xff, sizeof(data->status));
|
||||
|
||||
*cp++ = 0x40 | cmd->opcode;
|
||||
*cp++ = (u8)(arg >> 24);
|
||||
*cp++ = (u8)(arg >> 16);
|
||||
*cp++ = (u8)(arg >> 8);
|
||||
*cp++ = (u8)arg;
|
||||
*cp++ = (crc7(0, &data->status[1], 5) << 1) | 0x01;
|
||||
cp[1] = 0x40 | cmd->opcode;
|
||||
put_unaligned_be32(cmd->arg, cp+2);
|
||||
cp[6] = crc7_be(0, cp+1, 5) | 0x01;
|
||||
cp += 7;
|
||||
|
||||
/* Then, read up to 13 bytes (while writing all-ones):
|
||||
* - N(CR) (== 1..8) bytes of all-ones
|
||||
@@ -711,10 +708,7 @@ mmc_spi_writeblock(struct mmc_spi_host *host, struct spi_transfer *t,
|
||||
* so we have to cope with this situation and check the response
|
||||
* bit-by-bit. Arggh!!!
|
||||
*/
|
||||
pattern = scratch->status[0] << 24;
|
||||
pattern |= scratch->status[1] << 16;
|
||||
pattern |= scratch->status[2] << 8;
|
||||
pattern |= scratch->status[3];
|
||||
pattern = get_unaligned_be32(scratch->status);
|
||||
|
||||
/* First 3 bit of pattern are undefined */
|
||||
pattern |= 0xE0000000;
|
||||
|
||||
@@ -680,8 +680,8 @@ static void ath10k_core_restart(struct work_struct *work)
|
||||
|
||||
switch (ar->state) {
|
||||
case ATH10K_STATE_ON:
|
||||
ath10k_halt(ar);
|
||||
ar->state = ATH10K_STATE_RESTARTING;
|
||||
ath10k_halt(ar);
|
||||
ieee80211_restart_hw(ar->hw);
|
||||
break;
|
||||
case ATH10K_STATE_OFF:
|
||||
@@ -908,7 +908,9 @@ void ath10k_core_stop(struct ath10k *ar)
|
||||
lockdep_assert_held(&ar->conf_mutex);
|
||||
|
||||
/* try to suspend target */
|
||||
ath10k_wait_for_suspend(ar, WMI_PDEV_SUSPEND_AND_DISABLE_INTR);
|
||||
if (ar->state != ATH10K_STATE_RESTARTING)
|
||||
ath10k_wait_for_suspend(ar, WMI_PDEV_SUSPEND_AND_DISABLE_INTR);
|
||||
|
||||
ath10k_debug_stop(ar);
|
||||
ath10k_htc_stop(&ar->htc);
|
||||
ath10k_htt_detach(&ar->htt);
|
||||
|
||||
@@ -2291,6 +2291,8 @@ static void ath10k_tx(struct ieee80211_hw *hw,
|
||||
*/
|
||||
void ath10k_halt(struct ath10k *ar)
|
||||
{
|
||||
struct ath10k_vif *arvif;
|
||||
|
||||
lockdep_assert_held(&ar->conf_mutex);
|
||||
|
||||
if (ath10k_monitor_is_enabled(ar)) {
|
||||
@@ -2313,6 +2315,17 @@ void ath10k_halt(struct ath10k *ar)
|
||||
ar->scan.in_progress = false;
|
||||
ieee80211_scan_completed(ar->hw, true);
|
||||
}
|
||||
|
||||
list_for_each_entry(arvif, &ar->arvifs, list) {
|
||||
if (!arvif->beacon)
|
||||
continue;
|
||||
|
||||
dma_unmap_single(arvif->ar->dev,
|
||||
ATH10K_SKB_CB(arvif->beacon)->paddr,
|
||||
arvif->beacon->len, DMA_TO_DEVICE);
|
||||
dev_kfree_skb_any(arvif->beacon);
|
||||
arvif->beacon = NULL;
|
||||
}
|
||||
spin_unlock_bh(&ar->data_lock);
|
||||
}
|
||||
|
||||
@@ -2771,6 +2784,9 @@ static void ath10k_remove_interface(struct ieee80211_hw *hw,
|
||||
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
if (arvif->beacon) {
|
||||
dma_unmap_single(arvif->ar->dev,
|
||||
ATH10K_SKB_CB(arvif->beacon)->paddr,
|
||||
arvif->beacon->len, DMA_TO_DEVICE);
|
||||
dev_kfree_skb_any(arvif->beacon);
|
||||
arvif->beacon = NULL;
|
||||
}
|
||||
|
||||
@@ -2452,6 +2452,10 @@ static int ath10k_pci_wait_for_target_init(struct ath10k *ar)
|
||||
if (val == 0xffffffff)
|
||||
continue;
|
||||
|
||||
/* the device has crashed so don't bother trying anymore */
|
||||
if (val & FW_IND_EVENT_PENDING)
|
||||
break;
|
||||
|
||||
if (val & FW_IND_INITIALIZED)
|
||||
break;
|
||||
|
||||
@@ -2464,7 +2468,19 @@ static int ath10k_pci_wait_for_target_init(struct ath10k *ar)
|
||||
mdelay(10);
|
||||
} while (time_before(jiffies, timeout));
|
||||
|
||||
if (val == 0xffffffff || !(val & FW_IND_INITIALIZED)) {
|
||||
if (val == 0xffffffff) {
|
||||
ath10k_err("failed to read device register, device is gone\n");
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (val & FW_IND_EVENT_PENDING) {
|
||||
ath10k_warn("device has crashed during init\n");
|
||||
ret = -ECOMM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!(val & FW_IND_INITIALIZED)) {
|
||||
ath10k_err("failed to receive initialized event from target: %08x\n",
|
||||
val);
|
||||
ret = -ETIMEDOUT;
|
||||
|
||||
@@ -1431,6 +1431,7 @@ static void ath10k_wmi_event_host_swba(struct ath10k *ar, struct sk_buff *skb)
|
||||
ATH10K_SKB_CB(arvif->beacon)->paddr,
|
||||
arvif->beacon->len, DMA_TO_DEVICE);
|
||||
dev_kfree_skb_any(arvif->beacon);
|
||||
arvif->beacon = NULL;
|
||||
}
|
||||
|
||||
ATH10K_SKB_CB(bcn)->paddr = dma_map_single(arvif->ar->dev,
|
||||
@@ -1440,6 +1441,7 @@ static void ath10k_wmi_event_host_swba(struct ath10k *ar, struct sk_buff *skb)
|
||||
ATH10K_SKB_CB(bcn)->paddr);
|
||||
if (ret) {
|
||||
ath10k_warn("failed to map beacon: %d\n", ret);
|
||||
dev_kfree_skb_any(bcn);
|
||||
goto skip;
|
||||
}
|
||||
|
||||
|
||||
@@ -1759,7 +1759,7 @@ static bool is_rate_ht40(s32 rate, u8 *mcs, bool *sgi)
|
||||
}
|
||||
|
||||
static int ath6kl_get_station(struct wiphy *wiphy, struct net_device *dev,
|
||||
u8 *mac, struct station_info *sinfo)
|
||||
const u8 *mac, struct station_info *sinfo)
|
||||
{
|
||||
struct ath6kl *ar = ath6kl_priv(dev);
|
||||
struct ath6kl_vif *vif = netdev_priv(dev);
|
||||
@@ -2974,7 +2974,7 @@ static int ath6kl_stop_ap(struct wiphy *wiphy, struct net_device *dev)
|
||||
static const u8 bcast_addr[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
||||
|
||||
static int ath6kl_del_station(struct wiphy *wiphy, struct net_device *dev,
|
||||
u8 *mac)
|
||||
const u8 *mac)
|
||||
{
|
||||
struct ath6kl *ar = ath6kl_priv(dev);
|
||||
struct ath6kl_vif *vif = netdev_priv(dev);
|
||||
@@ -2985,7 +2985,8 @@ static int ath6kl_del_station(struct wiphy *wiphy, struct net_device *dev,
|
||||
}
|
||||
|
||||
static int ath6kl_change_station(struct wiphy *wiphy, struct net_device *dev,
|
||||
u8 *mac, struct station_parameters *params)
|
||||
const u8 *mac,
|
||||
struct station_parameters *params)
|
||||
{
|
||||
struct ath6kl *ar = ath6kl_priv(dev);
|
||||
struct ath6kl_vif *vif = netdev_priv(dev);
|
||||
|
||||
@@ -2320,7 +2320,7 @@ int ath6kl_wmi_addkey_cmd(struct wmi *wmi, u8 if_idx, u8 key_index,
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ath6kl_wmi_add_krk_cmd(struct wmi *wmi, u8 if_idx, u8 *krk)
|
||||
int ath6kl_wmi_add_krk_cmd(struct wmi *wmi, u8 if_idx, const u8 *krk)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
struct wmi_add_krk_cmd *cmd;
|
||||
|
||||
@@ -2616,7 +2616,7 @@ int ath6kl_wmi_addkey_cmd(struct wmi *wmi, u8 if_idx, u8 key_index,
|
||||
u8 *key_material,
|
||||
u8 key_op_ctrl, u8 *mac_addr,
|
||||
enum wmi_sync_flag sync_flag);
|
||||
int ath6kl_wmi_add_krk_cmd(struct wmi *wmi, u8 if_idx, u8 *krk);
|
||||
int ath6kl_wmi_add_krk_cmd(struct wmi *wmi, u8 if_idx, const u8 *krk);
|
||||
int ath6kl_wmi_deletekey_cmd(struct wmi *wmi, u8 if_idx, u8 key_index);
|
||||
int ath6kl_wmi_setpmkid_cmd(struct wmi *wmi, u8 if_idx, const u8 *bssid,
|
||||
const u8 *pmkid, bool set);
|
||||
|
||||
@@ -53,7 +53,8 @@ obj-$(CONFIG_ATH9K_HW) += ath9k_hw.o
|
||||
obj-$(CONFIG_ATH9K_COMMON) += ath9k_common.o
|
||||
ath9k_common-y:= common.o \
|
||||
common-init.o \
|
||||
common-beacon.o
|
||||
common-beacon.o \
|
||||
common-debug.o
|
||||
|
||||
ath9k_htc-y += htc_hst.o \
|
||||
hif_usb.o \
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
#include <linux/leds.h>
|
||||
#include <linux/completion.h>
|
||||
|
||||
#include "debug.h"
|
||||
#include "common.h"
|
||||
#include "debug.h"
|
||||
#include "mci.h"
|
||||
#include "dfs.h"
|
||||
#include "spectral.h"
|
||||
@@ -274,6 +274,7 @@ struct ath_node {
|
||||
#ifdef CONFIG_ATH9K_STATION_STATISTICS
|
||||
struct ath_rx_rate_stats rx_rate_stats;
|
||||
#endif
|
||||
u8 key_idx[4];
|
||||
};
|
||||
|
||||
struct ath_tx_control {
|
||||
|
||||
@@ -537,8 +537,6 @@ static void ath9k_cache_beacon_config(struct ath_softc *sc,
|
||||
cur_conf->dtim_period = bss_conf->dtim_period;
|
||||
cur_conf->dtim_count = 1;
|
||||
cur_conf->ibss_creator = bss_conf->ibss_creator;
|
||||
cur_conf->bmiss_timeout =
|
||||
ATH_DEFAULT_BMISS_LIMIT * cur_conf->beacon_interval;
|
||||
|
||||
/*
|
||||
* It looks like mac80211 may end up using beacon interval of zero in
|
||||
@@ -549,6 +547,9 @@ static void ath9k_cache_beacon_config(struct ath_softc *sc,
|
||||
if (cur_conf->beacon_interval == 0)
|
||||
cur_conf->beacon_interval = 100;
|
||||
|
||||
cur_conf->bmiss_timeout =
|
||||
ATH_DEFAULT_BMISS_LIMIT * cur_conf->beacon_interval;
|
||||
|
||||
/*
|
||||
* We don't parse dtim period from mac80211 during the driver
|
||||
* initialization as it breaks association with hidden-ssid
|
||||
|
||||
@@ -0,0 +1,253 @@
|
||||
/*
|
||||
* Copyright (c) 2008-2011 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.
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
|
||||
static ssize_t read_file_modal_eeprom(struct file *file, char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct ath_hw *ah = file->private_data;
|
||||
u32 len = 0, size = 6000;
|
||||
char *buf;
|
||||
size_t retval;
|
||||
|
||||
buf = kzalloc(size, GFP_KERNEL);
|
||||
if (buf == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
len = ah->eep_ops->dump_eeprom(ah, false, buf, len, size);
|
||||
|
||||
retval = simple_read_from_buffer(user_buf, count, ppos, buf, len);
|
||||
kfree(buf);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static const struct file_operations fops_modal_eeprom = {
|
||||
.read = read_file_modal_eeprom,
|
||||
.open = simple_open,
|
||||
.owner = THIS_MODULE,
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
|
||||
void ath9k_cmn_debug_modal_eeprom(struct dentry *debugfs_phy,
|
||||
struct ath_hw *ah)
|
||||
{
|
||||
debugfs_create_file("modal_eeprom", S_IRUSR, debugfs_phy, ah,
|
||||
&fops_modal_eeprom);
|
||||
}
|
||||
EXPORT_SYMBOL(ath9k_cmn_debug_modal_eeprom);
|
||||
|
||||
static ssize_t read_file_base_eeprom(struct file *file, char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct ath_hw *ah = file->private_data;
|
||||
u32 len = 0, size = 1500;
|
||||
ssize_t retval = 0;
|
||||
char *buf;
|
||||
|
||||
buf = kzalloc(size, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
|
||||
len = ah->eep_ops->dump_eeprom(ah, true, buf, len, size);
|
||||
|
||||
retval = simple_read_from_buffer(user_buf, count, ppos, buf, len);
|
||||
kfree(buf);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static const struct file_operations fops_base_eeprom = {
|
||||
.read = read_file_base_eeprom,
|
||||
.open = simple_open,
|
||||
.owner = THIS_MODULE,
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
void ath9k_cmn_debug_base_eeprom(struct dentry *debugfs_phy,
|
||||
struct ath_hw *ah)
|
||||
{
|
||||
debugfs_create_file("base_eeprom", S_IRUSR, debugfs_phy, ah,
|
||||
&fops_base_eeprom);
|
||||
}
|
||||
EXPORT_SYMBOL(ath9k_cmn_debug_base_eeprom);
|
||||
|
||||
void ath9k_cmn_debug_stat_rx(struct ath_rx_stats *rxstats,
|
||||
struct ath_rx_status *rs)
|
||||
{
|
||||
#define RX_PHY_ERR_INC(c) rxstats->phy_err_stats[c]++
|
||||
#define RX_CMN_STAT_INC(c) (rxstats->c++)
|
||||
|
||||
RX_CMN_STAT_INC(rx_pkts_all);
|
||||
rxstats->rx_bytes_all += rs->rs_datalen;
|
||||
|
||||
if (rs->rs_status & ATH9K_RXERR_CRC)
|
||||
RX_CMN_STAT_INC(crc_err);
|
||||
if (rs->rs_status & ATH9K_RXERR_DECRYPT)
|
||||
RX_CMN_STAT_INC(decrypt_crc_err);
|
||||
if (rs->rs_status & ATH9K_RXERR_MIC)
|
||||
RX_CMN_STAT_INC(mic_err);
|
||||
if (rs->rs_status & ATH9K_RX_DELIM_CRC_PRE)
|
||||
RX_CMN_STAT_INC(pre_delim_crc_err);
|
||||
if (rs->rs_status & ATH9K_RX_DELIM_CRC_POST)
|
||||
RX_CMN_STAT_INC(post_delim_crc_err);
|
||||
if (rs->rs_status & ATH9K_RX_DECRYPT_BUSY)
|
||||
RX_CMN_STAT_INC(decrypt_busy_err);
|
||||
|
||||
if (rs->rs_status & ATH9K_RXERR_PHY) {
|
||||
RX_CMN_STAT_INC(phy_err);
|
||||
if (rs->rs_phyerr < ATH9K_PHYERR_MAX)
|
||||
RX_PHY_ERR_INC(rs->rs_phyerr);
|
||||
}
|
||||
|
||||
#undef RX_CMN_STAT_INC
|
||||
#undef RX_PHY_ERR_INC
|
||||
}
|
||||
EXPORT_SYMBOL(ath9k_cmn_debug_stat_rx);
|
||||
|
||||
static ssize_t read_file_recv(struct file *file, char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
#define RXS_ERR(s, e) \
|
||||
do { \
|
||||
len += scnprintf(buf + len, size - len, \
|
||||
"%18s : %10u\n", s, \
|
||||
rxstats->e); \
|
||||
} while (0)
|
||||
|
||||
struct ath_rx_stats *rxstats = file->private_data;
|
||||
char *buf;
|
||||
unsigned int len = 0, size = 1600;
|
||||
ssize_t retval = 0;
|
||||
|
||||
buf = kzalloc(size, GFP_KERNEL);
|
||||
if (buf == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
RXS_ERR("PKTS-ALL", rx_pkts_all);
|
||||
RXS_ERR("BYTES-ALL", rx_bytes_all);
|
||||
RXS_ERR("BEACONS", rx_beacons);
|
||||
RXS_ERR("FRAGS", rx_frags);
|
||||
RXS_ERR("SPECTRAL", rx_spectral);
|
||||
|
||||
RXS_ERR("CRC ERR", crc_err);
|
||||
RXS_ERR("DECRYPT CRC ERR", decrypt_crc_err);
|
||||
RXS_ERR("PHY ERR", phy_err);
|
||||
RXS_ERR("MIC ERR", mic_err);
|
||||
RXS_ERR("PRE-DELIM CRC ERR", pre_delim_crc_err);
|
||||
RXS_ERR("POST-DELIM CRC ERR", post_delim_crc_err);
|
||||
RXS_ERR("DECRYPT BUSY ERR", decrypt_busy_err);
|
||||
RXS_ERR("LENGTH-ERR", rx_len_err);
|
||||
RXS_ERR("OOM-ERR", rx_oom_err);
|
||||
RXS_ERR("RATE-ERR", rx_rate_err);
|
||||
RXS_ERR("TOO-MANY-FRAGS", rx_too_many_frags_err);
|
||||
|
||||
if (len > size)
|
||||
len = size;
|
||||
|
||||
retval = simple_read_from_buffer(user_buf, count, ppos, buf, len);
|
||||
kfree(buf);
|
||||
|
||||
return retval;
|
||||
|
||||
#undef RXS_ERR
|
||||
}
|
||||
|
||||
static const struct file_operations fops_recv = {
|
||||
.read = read_file_recv,
|
||||
.open = simple_open,
|
||||
.owner = THIS_MODULE,
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
void ath9k_cmn_debug_recv(struct dentry *debugfs_phy,
|
||||
struct ath_rx_stats *rxstats)
|
||||
{
|
||||
debugfs_create_file("recv", S_IRUSR, debugfs_phy, rxstats,
|
||||
&fops_recv);
|
||||
}
|
||||
EXPORT_SYMBOL(ath9k_cmn_debug_recv);
|
||||
|
||||
static ssize_t read_file_phy_err(struct file *file, char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
#define PHY_ERR(s, p) \
|
||||
len += scnprintf(buf + len, size - len, "%22s : %10u\n", s, \
|
||||
rxstats->phy_err_stats[p]);
|
||||
|
||||
struct ath_rx_stats *rxstats = file->private_data;
|
||||
char *buf;
|
||||
unsigned int len = 0, size = 1600;
|
||||
ssize_t retval = 0;
|
||||
|
||||
buf = kzalloc(size, GFP_KERNEL);
|
||||
if (buf == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
PHY_ERR("UNDERRUN ERR", ATH9K_PHYERR_UNDERRUN);
|
||||
PHY_ERR("TIMING ERR", ATH9K_PHYERR_TIMING);
|
||||
PHY_ERR("PARITY ERR", ATH9K_PHYERR_PARITY);
|
||||
PHY_ERR("RATE ERR", ATH9K_PHYERR_RATE);
|
||||
PHY_ERR("LENGTH ERR", ATH9K_PHYERR_LENGTH);
|
||||
PHY_ERR("RADAR ERR", ATH9K_PHYERR_RADAR);
|
||||
PHY_ERR("SERVICE ERR", ATH9K_PHYERR_SERVICE);
|
||||
PHY_ERR("TOR ERR", ATH9K_PHYERR_TOR);
|
||||
PHY_ERR("OFDM-TIMING ERR", ATH9K_PHYERR_OFDM_TIMING);
|
||||
PHY_ERR("OFDM-SIGNAL-PARITY ERR", ATH9K_PHYERR_OFDM_SIGNAL_PARITY);
|
||||
PHY_ERR("OFDM-RATE ERR", ATH9K_PHYERR_OFDM_RATE_ILLEGAL);
|
||||
PHY_ERR("OFDM-LENGTH ERR", ATH9K_PHYERR_OFDM_LENGTH_ILLEGAL);
|
||||
PHY_ERR("OFDM-POWER-DROP ERR", ATH9K_PHYERR_OFDM_POWER_DROP);
|
||||
PHY_ERR("OFDM-SERVICE ERR", ATH9K_PHYERR_OFDM_SERVICE);
|
||||
PHY_ERR("OFDM-RESTART ERR", ATH9K_PHYERR_OFDM_RESTART);
|
||||
PHY_ERR("FALSE-RADAR-EXT ERR", ATH9K_PHYERR_FALSE_RADAR_EXT);
|
||||
PHY_ERR("CCK-TIMING ERR", ATH9K_PHYERR_CCK_TIMING);
|
||||
PHY_ERR("CCK-HEADER-CRC ERR", ATH9K_PHYERR_CCK_HEADER_CRC);
|
||||
PHY_ERR("CCK-RATE ERR", ATH9K_PHYERR_CCK_RATE_ILLEGAL);
|
||||
PHY_ERR("CCK-SERVICE ERR", ATH9K_PHYERR_CCK_SERVICE);
|
||||
PHY_ERR("CCK-RESTART ERR", ATH9K_PHYERR_CCK_RESTART);
|
||||
PHY_ERR("CCK-LENGTH ERR", ATH9K_PHYERR_CCK_LENGTH_ILLEGAL);
|
||||
PHY_ERR("CCK-POWER-DROP ERR", ATH9K_PHYERR_CCK_POWER_DROP);
|
||||
PHY_ERR("HT-CRC ERR", ATH9K_PHYERR_HT_CRC_ERROR);
|
||||
PHY_ERR("HT-LENGTH ERR", ATH9K_PHYERR_HT_LENGTH_ILLEGAL);
|
||||
PHY_ERR("HT-RATE ERR", ATH9K_PHYERR_HT_RATE_ILLEGAL);
|
||||
|
||||
if (len > size)
|
||||
len = size;
|
||||
|
||||
retval = simple_read_from_buffer(user_buf, count, ppos, buf, len);
|
||||
kfree(buf);
|
||||
|
||||
return retval;
|
||||
|
||||
#undef PHY_ERR
|
||||
}
|
||||
|
||||
static const struct file_operations fops_phy_err = {
|
||||
.read = read_file_phy_err,
|
||||
.open = simple_open,
|
||||
.owner = THIS_MODULE,
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
void ath9k_cmn_debug_phy_err(struct dentry *debugfs_phy,
|
||||
struct ath_rx_stats *rxstats)
|
||||
{
|
||||
debugfs_create_file("phy_err", S_IRUSR, debugfs_phy, rxstats,
|
||||
&fops_phy_err);
|
||||
}
|
||||
EXPORT_SYMBOL(ath9k_cmn_debug_phy_err);
|
||||
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright (c) 2008-2011 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.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* struct ath_rx_stats - RX Statistics
|
||||
* @rx_pkts_all: No. of total frames received, including ones that
|
||||
may have had errors.
|
||||
* @rx_bytes_all: No. of total bytes received, including ones that
|
||||
may have had errors.
|
||||
* @crc_err: No. of frames with incorrect CRC value
|
||||
* @decrypt_crc_err: No. of frames whose CRC check failed after
|
||||
decryption process completed
|
||||
* @phy_err: No. of frames whose reception failed because the PHY
|
||||
encountered an error
|
||||
* @mic_err: No. of frames with incorrect TKIP MIC verification failure
|
||||
* @pre_delim_crc_err: Pre-Frame delimiter CRC error detections
|
||||
* @post_delim_crc_err: Post-Frame delimiter CRC error detections
|
||||
* @decrypt_busy_err: Decryption interruptions counter
|
||||
* @phy_err_stats: Individual PHY error statistics
|
||||
* @rx_len_err: No. of frames discarded due to bad length.
|
||||
* @rx_oom_err: No. of frames dropped due to OOM issues.
|
||||
* @rx_rate_err: No. of frames dropped due to rate errors.
|
||||
* @rx_too_many_frags_err: Frames dropped due to too-many-frags received.
|
||||
* @rx_beacons: No. of beacons received.
|
||||
* @rx_frags: No. of rx-fragements received.
|
||||
* @rx_spectral: No of spectral packets received.
|
||||
*/
|
||||
struct ath_rx_stats {
|
||||
u32 rx_pkts_all;
|
||||
u32 rx_bytes_all;
|
||||
u32 crc_err;
|
||||
u32 decrypt_crc_err;
|
||||
u32 phy_err;
|
||||
u32 mic_err;
|
||||
u32 pre_delim_crc_err;
|
||||
u32 post_delim_crc_err;
|
||||
u32 decrypt_busy_err;
|
||||
u32 phy_err_stats[ATH9K_PHYERR_MAX];
|
||||
u32 rx_len_err;
|
||||
u32 rx_oom_err;
|
||||
u32 rx_rate_err;
|
||||
u32 rx_too_many_frags_err;
|
||||
u32 rx_beacons;
|
||||
u32 rx_frags;
|
||||
u32 rx_spectral;
|
||||
};
|
||||
|
||||
void ath9k_cmn_debug_modal_eeprom(struct dentry *debugfs_phy,
|
||||
struct ath_hw *ah);
|
||||
void ath9k_cmn_debug_base_eeprom(struct dentry *debugfs_phy,
|
||||
struct ath_hw *ah);
|
||||
void ath9k_cmn_debug_stat_rx(struct ath_rx_stats *rxstats,
|
||||
struct ath_rx_status *rs);
|
||||
void ath9k_cmn_debug_recv(struct dentry *debugfs_phy,
|
||||
struct ath_rx_stats *rxstats);
|
||||
void ath9k_cmn_debug_phy_err(struct dentry *debugfs_phy,
|
||||
struct ath_rx_stats *rxstats);
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
#include "common-init.h"
|
||||
#include "common-beacon.h"
|
||||
#include "common-debug.h"
|
||||
|
||||
/* Common header for Atheros 802.11n base driver cores */
|
||||
|
||||
|
||||
@@ -948,151 +948,11 @@ static const struct file_operations fops_reset = {
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
static ssize_t read_file_recv(struct file *file, char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
#define RXS_ERR(s, e) \
|
||||
do { \
|
||||
len += scnprintf(buf + len, size - len, \
|
||||
"%18s : %10u\n", s, \
|
||||
sc->debug.stats.rxstats.e);\
|
||||
} while (0)
|
||||
|
||||
struct ath_softc *sc = file->private_data;
|
||||
char *buf;
|
||||
unsigned int len = 0, size = 1600;
|
||||
ssize_t retval = 0;
|
||||
|
||||
buf = kzalloc(size, GFP_KERNEL);
|
||||
if (buf == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
RXS_ERR("PKTS-ALL", rx_pkts_all);
|
||||
RXS_ERR("BYTES-ALL", rx_bytes_all);
|
||||
RXS_ERR("BEACONS", rx_beacons);
|
||||
RXS_ERR("FRAGS", rx_frags);
|
||||
RXS_ERR("SPECTRAL", rx_spectral);
|
||||
|
||||
RXS_ERR("CRC ERR", crc_err);
|
||||
RXS_ERR("DECRYPT CRC ERR", decrypt_crc_err);
|
||||
RXS_ERR("PHY ERR", phy_err);
|
||||
RXS_ERR("MIC ERR", mic_err);
|
||||
RXS_ERR("PRE-DELIM CRC ERR", pre_delim_crc_err);
|
||||
RXS_ERR("POST-DELIM CRC ERR", post_delim_crc_err);
|
||||
RXS_ERR("DECRYPT BUSY ERR", decrypt_busy_err);
|
||||
RXS_ERR("LENGTH-ERR", rx_len_err);
|
||||
RXS_ERR("OOM-ERR", rx_oom_err);
|
||||
RXS_ERR("RATE-ERR", rx_rate_err);
|
||||
RXS_ERR("TOO-MANY-FRAGS", rx_too_many_frags_err);
|
||||
|
||||
if (len > size)
|
||||
len = size;
|
||||
|
||||
retval = simple_read_from_buffer(user_buf, count, ppos, buf, len);
|
||||
kfree(buf);
|
||||
|
||||
return retval;
|
||||
|
||||
#undef RXS_ERR
|
||||
}
|
||||
|
||||
void ath_debug_stat_rx(struct ath_softc *sc, struct ath_rx_status *rs)
|
||||
{
|
||||
#define RX_PHY_ERR_INC(c) sc->debug.stats.rxstats.phy_err_stats[c]++
|
||||
|
||||
RX_STAT_INC(rx_pkts_all);
|
||||
sc->debug.stats.rxstats.rx_bytes_all += rs->rs_datalen;
|
||||
|
||||
if (rs->rs_status & ATH9K_RXERR_CRC)
|
||||
RX_STAT_INC(crc_err);
|
||||
if (rs->rs_status & ATH9K_RXERR_DECRYPT)
|
||||
RX_STAT_INC(decrypt_crc_err);
|
||||
if (rs->rs_status & ATH9K_RXERR_MIC)
|
||||
RX_STAT_INC(mic_err);
|
||||
if (rs->rs_status & ATH9K_RX_DELIM_CRC_PRE)
|
||||
RX_STAT_INC(pre_delim_crc_err);
|
||||
if (rs->rs_status & ATH9K_RX_DELIM_CRC_POST)
|
||||
RX_STAT_INC(post_delim_crc_err);
|
||||
if (rs->rs_status & ATH9K_RX_DECRYPT_BUSY)
|
||||
RX_STAT_INC(decrypt_busy_err);
|
||||
|
||||
if (rs->rs_status & ATH9K_RXERR_PHY) {
|
||||
RX_STAT_INC(phy_err);
|
||||
if (rs->rs_phyerr < ATH9K_PHYERR_MAX)
|
||||
RX_PHY_ERR_INC(rs->rs_phyerr);
|
||||
}
|
||||
|
||||
#undef RX_PHY_ERR_INC
|
||||
ath9k_cmn_debug_stat_rx(&sc->debug.stats.rxstats, rs);
|
||||
}
|
||||
|
||||
static const struct file_operations fops_recv = {
|
||||
.read = read_file_recv,
|
||||
.open = simple_open,
|
||||
.owner = THIS_MODULE,
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
static ssize_t read_file_phy_err(struct file *file, char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
#define PHY_ERR(s, p) \
|
||||
len += scnprintf(buf + len, size - len, "%22s : %10u\n", s, \
|
||||
sc->debug.stats.rxstats.phy_err_stats[p]);
|
||||
|
||||
struct ath_softc *sc = file->private_data;
|
||||
char *buf;
|
||||
unsigned int len = 0, size = 1600;
|
||||
ssize_t retval = 0;
|
||||
|
||||
buf = kzalloc(size, GFP_KERNEL);
|
||||
if (buf == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
PHY_ERR("UNDERRUN ERR", ATH9K_PHYERR_UNDERRUN);
|
||||
PHY_ERR("TIMING ERR", ATH9K_PHYERR_TIMING);
|
||||
PHY_ERR("PARITY ERR", ATH9K_PHYERR_PARITY);
|
||||
PHY_ERR("RATE ERR", ATH9K_PHYERR_RATE);
|
||||
PHY_ERR("LENGTH ERR", ATH9K_PHYERR_LENGTH);
|
||||
PHY_ERR("RADAR ERR", ATH9K_PHYERR_RADAR);
|
||||
PHY_ERR("SERVICE ERR", ATH9K_PHYERR_SERVICE);
|
||||
PHY_ERR("TOR ERR", ATH9K_PHYERR_TOR);
|
||||
PHY_ERR("OFDM-TIMING ERR", ATH9K_PHYERR_OFDM_TIMING);
|
||||
PHY_ERR("OFDM-SIGNAL-PARITY ERR", ATH9K_PHYERR_OFDM_SIGNAL_PARITY);
|
||||
PHY_ERR("OFDM-RATE ERR", ATH9K_PHYERR_OFDM_RATE_ILLEGAL);
|
||||
PHY_ERR("OFDM-LENGTH ERR", ATH9K_PHYERR_OFDM_LENGTH_ILLEGAL);
|
||||
PHY_ERR("OFDM-POWER-DROP ERR", ATH9K_PHYERR_OFDM_POWER_DROP);
|
||||
PHY_ERR("OFDM-SERVICE ERR", ATH9K_PHYERR_OFDM_SERVICE);
|
||||
PHY_ERR("OFDM-RESTART ERR", ATH9K_PHYERR_OFDM_RESTART);
|
||||
PHY_ERR("FALSE-RADAR-EXT ERR", ATH9K_PHYERR_FALSE_RADAR_EXT);
|
||||
PHY_ERR("CCK-TIMING ERR", ATH9K_PHYERR_CCK_TIMING);
|
||||
PHY_ERR("CCK-HEADER-CRC ERR", ATH9K_PHYERR_CCK_HEADER_CRC);
|
||||
PHY_ERR("CCK-RATE ERR", ATH9K_PHYERR_CCK_RATE_ILLEGAL);
|
||||
PHY_ERR("CCK-SERVICE ERR", ATH9K_PHYERR_CCK_SERVICE);
|
||||
PHY_ERR("CCK-RESTART ERR", ATH9K_PHYERR_CCK_RESTART);
|
||||
PHY_ERR("CCK-LENGTH ERR", ATH9K_PHYERR_CCK_LENGTH_ILLEGAL);
|
||||
PHY_ERR("CCK-POWER-DROP ERR", ATH9K_PHYERR_CCK_POWER_DROP);
|
||||
PHY_ERR("HT-CRC ERR", ATH9K_PHYERR_HT_CRC_ERROR);
|
||||
PHY_ERR("HT-LENGTH ERR", ATH9K_PHYERR_HT_LENGTH_ILLEGAL);
|
||||
PHY_ERR("HT-RATE ERR", ATH9K_PHYERR_HT_RATE_ILLEGAL);
|
||||
|
||||
if (len > size)
|
||||
len = size;
|
||||
|
||||
retval = simple_read_from_buffer(user_buf, count, ppos, buf, len);
|
||||
kfree(buf);
|
||||
|
||||
return retval;
|
||||
|
||||
#undef PHY_ERR
|
||||
}
|
||||
|
||||
static const struct file_operations fops_phy_err = {
|
||||
.read = read_file_phy_err,
|
||||
.open = simple_open,
|
||||
.owner = THIS_MODULE,
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
static ssize_t read_file_regidx(struct file *file, char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
@@ -1268,62 +1128,6 @@ static const struct file_operations fops_dump_nfcal = {
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
static ssize_t read_file_base_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;
|
||||
u32 len = 0, size = 1500;
|
||||
ssize_t retval = 0;
|
||||
char *buf;
|
||||
|
||||
buf = kzalloc(size, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
|
||||
len = ah->eep_ops->dump_eeprom(ah, true, buf, len, size);
|
||||
|
||||
retval = simple_read_from_buffer(user_buf, count, ppos, buf, len);
|
||||
kfree(buf);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static const struct file_operations fops_base_eeprom = {
|
||||
.read = read_file_base_eeprom,
|
||||
.open = simple_open,
|
||||
.owner = THIS_MODULE,
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
static ssize_t read_file_modal_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;
|
||||
u32 len = 0, size = 6000;
|
||||
char *buf;
|
||||
size_t retval;
|
||||
|
||||
buf = kzalloc(size, GFP_KERNEL);
|
||||
if (buf == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
len = ah->eep_ops->dump_eeprom(ah, false, buf, len, size);
|
||||
|
||||
retval = simple_read_from_buffer(user_buf, count, ppos, buf, len);
|
||||
kfree(buf);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static const struct file_operations fops_modal_eeprom = {
|
||||
.read = read_file_modal_eeprom,
|
||||
.open = simple_open,
|
||||
.owner = THIS_MODULE,
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
|
||||
static ssize_t read_file_btcoex(struct file *file, char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
@@ -1524,10 +1328,10 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
&fops_misc);
|
||||
debugfs_create_file("reset", S_IRUSR, sc->debug.debugfs_phy, sc,
|
||||
&fops_reset);
|
||||
debugfs_create_file("recv", S_IRUSR, sc->debug.debugfs_phy, sc,
|
||||
&fops_recv);
|
||||
debugfs_create_file("phy_err", S_IRUSR, sc->debug.debugfs_phy, sc,
|
||||
&fops_phy_err);
|
||||
|
||||
ath9k_cmn_debug_recv(sc->debug.debugfs_phy, &sc->debug.stats.rxstats);
|
||||
ath9k_cmn_debug_phy_err(sc->debug.debugfs_phy, &sc->debug.stats.rxstats);
|
||||
|
||||
debugfs_create_u8("rx_chainmask", S_IRUSR, sc->debug.debugfs_phy,
|
||||
&ah->rxchainmask);
|
||||
debugfs_create_u8("tx_chainmask", S_IRUSR, sc->debug.debugfs_phy,
|
||||
@@ -1547,10 +1351,10 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
&fops_regdump);
|
||||
debugfs_create_file("dump_nfcal", S_IRUSR, sc->debug.debugfs_phy, sc,
|
||||
&fops_dump_nfcal);
|
||||
debugfs_create_file("base_eeprom", S_IRUSR, sc->debug.debugfs_phy, sc,
|
||||
&fops_base_eeprom);
|
||||
debugfs_create_file("modal_eeprom", S_IRUSR, sc->debug.debugfs_phy, sc,
|
||||
&fops_modal_eeprom);
|
||||
|
||||
ath9k_cmn_debug_base_eeprom(sc->debug.debugfs_phy, sc->sc_ah);
|
||||
ath9k_cmn_debug_modal_eeprom(sc->debug.debugfs_phy, sc->sc_ah);
|
||||
|
||||
debugfs_create_u32("gpio_mask", S_IRUSR | S_IWUSR,
|
||||
sc->debug.debugfs_phy, &sc->sc_ah->gpio_mask);
|
||||
debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user