source: trunk/package/mac80211/patches/520-ath9k_debugfs_chainmask.patch @ 18503

Last change on this file since 18503 was 18503, checked in by nbd, 7 years ago

ath9k: add a few debugfs files to access the chainmasks and registers

File size: 3.9 KB
  • drivers/net/wireless/ath/ath9k/debug.c

    a b static const struct file_operations fops 
    7171        .owner = THIS_MODULE 
    7272}; 
    7373 
     74static ssize_t read_file_tx_chainmask(struct file *file, char __user *user_buf, 
     75                             size_t count, loff_t *ppos) 
     76{ 
     77        struct ath_softc *sc = file->private_data; 
     78        struct ath_common *common = ath9k_hw_common(sc->sc_ah); 
     79        char buf[32]; 
     80        unsigned int len; 
     81 
     82        len = snprintf(buf, sizeof(buf), "0x%08x\n", common->tx_chainmask); 
     83        return simple_read_from_buffer(user_buf, count, ppos, buf, len); 
     84} 
     85 
     86static ssize_t write_file_tx_chainmask(struct file *file, const char __user *user_buf, 
     87                             size_t count, loff_t *ppos) 
     88{ 
     89        struct ath_softc *sc = file->private_data; 
     90        struct ath_common *common = ath9k_hw_common(sc->sc_ah); 
     91        unsigned long mask; 
     92        char buf[32]; 
     93        ssize_t len; 
     94 
     95        len = min(count, sizeof(buf) - 1); 
     96        if (copy_from_user(buf, user_buf, len)) 
     97                return -EINVAL; 
     98 
     99        buf[len] = '\0'; 
     100        if (strict_strtoul(buf, 0, &mask)) 
     101                return -EINVAL; 
     102 
     103        common->tx_chainmask = mask; 
     104        sc->sc_ah->caps.tx_chainmask = mask; 
     105        return count; 
     106} 
     107 
     108static const struct file_operations fops_tx_chainmask = { 
     109        .read = read_file_tx_chainmask, 
     110        .write = write_file_tx_chainmask, 
     111        .open = ath9k_debugfs_open, 
     112        .owner = THIS_MODULE 
     113}; 
     114 
     115 
     116static ssize_t read_file_rx_chainmask(struct file *file, char __user *user_buf, 
     117                             size_t count, loff_t *ppos) 
     118{ 
     119        struct ath_softc *sc = file->private_data; 
     120        struct ath_common *common = ath9k_hw_common(sc->sc_ah); 
     121        char buf[32]; 
     122        unsigned int len; 
     123 
     124        len = snprintf(buf, sizeof(buf), "0x%08x\n", common->rx_chainmask); 
     125        return simple_read_from_buffer(user_buf, count, ppos, buf, len); 
     126} 
     127 
     128static ssize_t write_file_rx_chainmask(struct file *file, const char __user *user_buf, 
     129                             size_t count, loff_t *ppos) 
     130{ 
     131        struct ath_softc *sc = file->private_data; 
     132        struct ath_common *common = ath9k_hw_common(sc->sc_ah); 
     133        unsigned long mask; 
     134        char buf[32]; 
     135        ssize_t len; 
     136 
     137        len = min(count, sizeof(buf) - 1); 
     138        if (copy_from_user(buf, user_buf, len)) 
     139                return -EINVAL; 
     140 
     141        buf[len] = '\0'; 
     142        if (strict_strtoul(buf, 0, &mask)) 
     143                return -EINVAL; 
     144 
     145        common->rx_chainmask = mask; 
     146        sc->sc_ah->caps.rx_chainmask = mask; 
     147        return count; 
     148} 
     149 
     150static const struct file_operations fops_rx_chainmask = { 
     151        .read = read_file_rx_chainmask, 
     152        .write = write_file_rx_chainmask, 
     153        .open = ath9k_debugfs_open, 
     154        .owner = THIS_MODULE 
     155}; 
     156 
     157 
    74158static ssize_t read_file_dma(struct file *file, char __user *user_buf, 
    75159                             size_t count, loff_t *ppos) 
    76160{ 
    int ath9k_init_debug(struct ath_hw *ah) 
    568652        if (!sc->debug.debugfs_debug) 
    569653                goto err; 
    570654 
     655        sc->debug.debugfs_rx_chainmask = debugfs_create_file("rx_chainmask", 
     656                S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, sc, &fops_rx_chainmask); 
     657        if (!sc->debug.debugfs_rx_chainmask) 
     658                goto err; 
     659 
     660        sc->debug.debugfs_tx_chainmask = debugfs_create_file("tx_chainmask", 
     661                S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, sc, &fops_tx_chainmask); 
     662        if (!sc->debug.debugfs_tx_chainmask) 
     663                goto err; 
     664 
    571665        sc->debug.debugfs_dma = debugfs_create_file("dma", S_IRUSR, 
    572666                                       sc->debug.debugfs_phy, sc, &fops_dma); 
    573667        if (!sc->debug.debugfs_dma) 
    void ath9k_exit_debug(struct ath_hw *ah) 
    611705        struct ath_common *common = ath9k_hw_common(ah); 
    612706        struct ath_softc *sc = (struct ath_softc *) common->priv; 
    613707 
     708        debugfs_remove(sc->debug.debugfs_tx_chainmask); 
     709        debugfs_remove(sc->debug.debugfs_rx_chainmask); 
    614710        debugfs_remove(sc->debug.debugfs_xmit); 
    615711        debugfs_remove(sc->debug.debugfs_wiphy); 
    616712        debugfs_remove(sc->debug.debugfs_rcstat); 
  • drivers/net/wireless/ath/ath9k/debug.h

    a b struct ath_stats { 
    123123}; 
    124124 
    125125struct ath9k_debug { 
     126        struct dentry *debugfs_rx_chainmask; 
     127        struct dentry *debugfs_tx_chainmask; 
    126128        struct dentry *debugfs_phy; 
    127129        struct dentry *debugfs_debug; 
    128130        struct dentry *debugfs_dma; 
Note: See TracBrowser for help on using the repository browser.