mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-17 07:54:54 +08:00
wil6210: convert debugfs to the table mode
Define tables for similar file entries, i.e. - table for debugfs_create_file - table for static parameters - table for parameters that are members of "wil" structure - table for blobs - table for interrupt controllers Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
6afd60055d
commit
b7cde47009
@ -29,6 +29,21 @@ static u32 mem_addr;
|
||||
static u32 dbg_txdesc_index;
|
||||
static u32 dbg_vring_index; /* 24+ for Rx, 0..23 for Tx */
|
||||
|
||||
enum dbg_off_type {
|
||||
doff_u32 = 0,
|
||||
doff_x32 = 1,
|
||||
doff_ulong = 2,
|
||||
doff_io32 = 3,
|
||||
};
|
||||
|
||||
/* offset to "wil" */
|
||||
struct dbg_off {
|
||||
const char *name;
|
||||
umode_t mode;
|
||||
ulong off;
|
||||
enum dbg_off_type type;
|
||||
};
|
||||
|
||||
static void wil_print_vring(struct seq_file *s, struct wil6210_priv *wil,
|
||||
const char *name, struct vring *vring,
|
||||
char _s, char _h)
|
||||
@ -244,9 +259,9 @@ DEFINE_SIMPLE_ATTRIBUTE(fops_iomem_x32, wil_debugfs_iomem_x32_get,
|
||||
static struct dentry *wil_debugfs_create_iomem_x32(const char *name,
|
||||
umode_t mode,
|
||||
struct dentry *parent,
|
||||
void __iomem *value)
|
||||
void *value)
|
||||
{
|
||||
return debugfs_create_file(name, mode, parent, (void * __force)value,
|
||||
return debugfs_create_file(name, mode, parent, value,
|
||||
&fops_iomem_x32);
|
||||
}
|
||||
|
||||
@ -270,6 +285,59 @@ static struct dentry *wil_debugfs_create_ulong(const char *name, umode_t mode,
|
||||
return debugfs_create_file(name, mode, parent, value, &wil_fops_ulong);
|
||||
}
|
||||
|
||||
/**
|
||||
* wil6210_debugfs_init_offset - create set of debugfs files
|
||||
* @wil - driver's context, used for printing
|
||||
* @dbg - directory on the debugfs, where files will be created
|
||||
* @base - base address used in address calculation
|
||||
* @tbl - table with file descriptions. Should be terminated with empty element.
|
||||
*
|
||||
* Creates files accordingly to the @tbl.
|
||||
*/
|
||||
static void wil6210_debugfs_init_offset(struct wil6210_priv *wil,
|
||||
struct dentry *dbg, void *base,
|
||||
const struct dbg_off * const tbl)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; tbl[i].name; i++) {
|
||||
struct dentry *f = NULL;
|
||||
|
||||
switch (tbl[i].type) {
|
||||
case doff_u32:
|
||||
f = debugfs_create_u32(tbl[i].name, tbl[i].mode, dbg,
|
||||
base + tbl[i].off);
|
||||
break;
|
||||
case doff_x32:
|
||||
f = debugfs_create_x32(tbl[i].name, tbl[i].mode, dbg,
|
||||
base + tbl[i].off);
|
||||
break;
|
||||
case doff_ulong:
|
||||
f = wil_debugfs_create_ulong(tbl[i].name, tbl[i].mode,
|
||||
dbg, base + tbl[i].off);
|
||||
break;
|
||||
case doff_io32:
|
||||
f = wil_debugfs_create_iomem_x32(tbl[i].name,
|
||||
tbl[i].mode, dbg,
|
||||
base + tbl[i].off);
|
||||
break;
|
||||
}
|
||||
if (IS_ERR_OR_NULL(f))
|
||||
wil_err(wil, "Create file \"%s\": err %ld\n",
|
||||
tbl[i].name, PTR_ERR(f));
|
||||
}
|
||||
}
|
||||
|
||||
static const struct dbg_off isr_off[] = {
|
||||
{"ICC", S_IRUGO | S_IWUSR, offsetof(struct RGF_ICR, ICC), doff_io32},
|
||||
{"ICR", S_IRUGO | S_IWUSR, offsetof(struct RGF_ICR, ICR), doff_io32},
|
||||
{"ICM", S_IRUGO | S_IWUSR, offsetof(struct RGF_ICR, ICM), doff_io32},
|
||||
{"ICS", S_IWUSR, offsetof(struct RGF_ICR, ICS), doff_io32},
|
||||
{"IMV", S_IRUGO | S_IWUSR, offsetof(struct RGF_ICR, IMV), doff_io32},
|
||||
{"IMS", S_IWUSR, offsetof(struct RGF_ICR, IMS), doff_io32},
|
||||
{"IMC", S_IWUSR, offsetof(struct RGF_ICR, IMC), doff_io32},
|
||||
{},
|
||||
};
|
||||
static int wil6210_debugfs_create_ISR(struct wil6210_priv *wil,
|
||||
const char *name,
|
||||
struct dentry *parent, u32 off)
|
||||
@ -279,24 +347,19 @@ static int wil6210_debugfs_create_ISR(struct wil6210_priv *wil,
|
||||
if (IS_ERR_OR_NULL(d))
|
||||
return -ENODEV;
|
||||
|
||||
wil_debugfs_create_iomem_x32("ICC", S_IRUGO | S_IWUSR, d,
|
||||
wil->csr + off);
|
||||
wil_debugfs_create_iomem_x32("ICR", S_IRUGO | S_IWUSR, d,
|
||||
wil->csr + off + 4);
|
||||
wil_debugfs_create_iomem_x32("ICM", S_IRUGO | S_IWUSR, d,
|
||||
wil->csr + off + 8);
|
||||
wil_debugfs_create_iomem_x32("ICS", S_IWUSR, d,
|
||||
wil->csr + off + 12);
|
||||
wil_debugfs_create_iomem_x32("IMV", S_IRUGO | S_IWUSR, d,
|
||||
wil->csr + off + 16);
|
||||
wil_debugfs_create_iomem_x32("IMS", S_IWUSR, d,
|
||||
wil->csr + off + 20);
|
||||
wil_debugfs_create_iomem_x32("IMC", S_IWUSR, d,
|
||||
wil->csr + off + 24);
|
||||
wil6210_debugfs_init_offset(wil, d, (void * __force)wil->csr + off,
|
||||
isr_off);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct dbg_off pseudo_isr_off[] = {
|
||||
{"CAUSE", S_IRUGO, HOSTADDR(RGF_DMA_PSEUDO_CAUSE), doff_io32},
|
||||
{"MASK_SW", S_IRUGO, HOSTADDR(RGF_DMA_PSEUDO_CAUSE_MASK_SW), doff_io32},
|
||||
{"MASK_FW", S_IRUGO, HOSTADDR(RGF_DMA_PSEUDO_CAUSE_MASK_FW), doff_io32},
|
||||
{},
|
||||
};
|
||||
|
||||
static int wil6210_debugfs_create_pseudo_ISR(struct wil6210_priv *wil,
|
||||
struct dentry *parent)
|
||||
{
|
||||
@ -305,16 +368,19 @@ static int wil6210_debugfs_create_pseudo_ISR(struct wil6210_priv *wil,
|
||||
if (IS_ERR_OR_NULL(d))
|
||||
return -ENODEV;
|
||||
|
||||
wil_debugfs_create_iomem_x32("CAUSE", S_IRUGO, d, wil->csr +
|
||||
HOSTADDR(RGF_DMA_PSEUDO_CAUSE));
|
||||
wil_debugfs_create_iomem_x32("MASK_SW", S_IRUGO, d, wil->csr +
|
||||
HOSTADDR(RGF_DMA_PSEUDO_CAUSE_MASK_SW));
|
||||
wil_debugfs_create_iomem_x32("MASK_FW", S_IRUGO, d, wil->csr +
|
||||
HOSTADDR(RGF_DMA_PSEUDO_CAUSE_MASK_FW));
|
||||
wil6210_debugfs_init_offset(wil, d, (void * __force)wil->csr,
|
||||
pseudo_isr_off);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct dbg_off itr_cnt_off[] = {
|
||||
{"TRSH", S_IRUGO | S_IWUSR, HOSTADDR(RGF_DMA_ITR_CNT_TRSH), doff_io32},
|
||||
{"DATA", S_IRUGO | S_IWUSR, HOSTADDR(RGF_DMA_ITR_CNT_DATA), doff_io32},
|
||||
{"CTL", S_IRUGO | S_IWUSR, HOSTADDR(RGF_DMA_ITR_CNT_CRL), doff_io32},
|
||||
{},
|
||||
};
|
||||
|
||||
static int wil6210_debugfs_create_ITR_CNT(struct wil6210_priv *wil,
|
||||
struct dentry *parent)
|
||||
{
|
||||
@ -323,12 +389,8 @@ static int wil6210_debugfs_create_ITR_CNT(struct wil6210_priv *wil,
|
||||
if (IS_ERR_OR_NULL(d))
|
||||
return -ENODEV;
|
||||
|
||||
wil_debugfs_create_iomem_x32("TRSH", S_IRUGO | S_IWUSR, d, wil->csr +
|
||||
HOSTADDR(RGF_DMA_ITR_CNT_TRSH));
|
||||
wil_debugfs_create_iomem_x32("DATA", S_IRUGO | S_IWUSR, d, wil->csr +
|
||||
HOSTADDR(RGF_DMA_ITR_CNT_DATA));
|
||||
wil_debugfs_create_iomem_x32("CTL", S_IRUGO | S_IWUSR, d, wil->csr +
|
||||
HOSTADDR(RGF_DMA_ITR_CNT_CRL));
|
||||
wil6210_debugfs_init_offset(wil, d, (void * __force)wil->csr,
|
||||
itr_cnt_off);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -985,6 +1047,87 @@ static void wil6210_debugfs_init_blobs(struct wil6210_priv *wil,
|
||||
}
|
||||
}
|
||||
|
||||
/* misc files */
|
||||
static const struct {
|
||||
const char *name;
|
||||
umode_t mode;
|
||||
const struct file_operations *fops;
|
||||
} dbg_files[] = {
|
||||
{"mbox", S_IRUGO, &fops_mbox},
|
||||
{"vrings", S_IRUGO, &fops_vring},
|
||||
{"stations", S_IRUGO, &fops_sta},
|
||||
{"desc", S_IRUGO, &fops_txdesc},
|
||||
{"bf", S_IRUGO, &fops_bf},
|
||||
{"ssid", S_IRUGO | S_IWUSR, &fops_ssid},
|
||||
{"mem_val", S_IRUGO, &fops_memread},
|
||||
{"reset", S_IWUSR, &fops_reset},
|
||||
{"rxon", S_IWUSR, &fops_rxon},
|
||||
{"tx_mgmt", S_IWUSR, &fops_txmgmt},
|
||||
{"wmi_send", S_IWUSR, &fops_wmi},
|
||||
{"temp", S_IRUGO, &fops_temp},
|
||||
{"freq", S_IRUGO, &fops_freq},
|
||||
{"link", S_IRUGO, &fops_link},
|
||||
{"info", S_IRUGO, &fops_info},
|
||||
};
|
||||
|
||||
static void wil6210_debugfs_init_files(struct wil6210_priv *wil,
|
||||
struct dentry *dbg)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(dbg_files); i++)
|
||||
debugfs_create_file(dbg_files[i].name, dbg_files[i].mode, dbg,
|
||||
wil, dbg_files[i].fops);
|
||||
}
|
||||
|
||||
/* interrupt control blocks */
|
||||
static const struct {
|
||||
const char *name;
|
||||
u32 icr_off;
|
||||
} dbg_icr[] = {
|
||||
{"USER_ICR", HOSTADDR(RGF_USER_USER_ICR)},
|
||||
{"DMA_EP_TX_ICR", HOSTADDR(RGF_DMA_EP_TX_ICR)},
|
||||
{"DMA_EP_RX_ICR", HOSTADDR(RGF_DMA_EP_RX_ICR)},
|
||||
{"DMA_EP_MISC_ICR", HOSTADDR(RGF_DMA_EP_MISC_ICR)},
|
||||
};
|
||||
|
||||
static void wil6210_debugfs_init_isr(struct wil6210_priv *wil,
|
||||
struct dentry *dbg)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(dbg_icr); i++)
|
||||
wil6210_debugfs_create_ISR(wil, dbg_icr[i].name, dbg,
|
||||
dbg_icr[i].icr_off);
|
||||
}
|
||||
|
||||
#define WIL_FIELD(name, mode, type) { __stringify(name), mode, \
|
||||
offsetof(struct wil6210_priv, name), type}
|
||||
|
||||
/* fields in struct wil6210_priv */
|
||||
static const struct dbg_off dbg_wil_off[] = {
|
||||
WIL_FIELD(secure_pcp, S_IRUGO | S_IWUSR, doff_u32),
|
||||
WIL_FIELD(status, S_IRUGO | S_IWUSR, doff_ulong),
|
||||
WIL_FIELD(fw_version, S_IRUGO, doff_u32),
|
||||
WIL_FIELD(hw_version, S_IRUGO, doff_x32),
|
||||
{},
|
||||
};
|
||||
|
||||
static const struct dbg_off dbg_wil_regs[] = {
|
||||
{"RGF_MAC_MTRL_COUNTER_0", S_IRUGO, HOSTADDR(RGF_MAC_MTRL_COUNTER_0),
|
||||
doff_io32},
|
||||
{"RGF_USER_USAGE_1", S_IRUGO, HOSTADDR(RGF_USER_USAGE_1), doff_io32},
|
||||
{},
|
||||
};
|
||||
|
||||
/* static parameters */
|
||||
static const struct dbg_off dbg_statics[] = {
|
||||
{"desc_index", S_IRUGO | S_IWUSR, (ulong)&dbg_txdesc_index, doff_u32},
|
||||
{"vring_index", S_IRUGO | S_IWUSR, (ulong)&dbg_vring_index, doff_u32},
|
||||
{"mem_addr", S_IRUGO | S_IWUSR, (ulong)&mem_addr, doff_u32},
|
||||
{},
|
||||
};
|
||||
|
||||
int wil6210_debugfs_init(struct wil6210_priv *wil)
|
||||
{
|
||||
struct dentry *dbg = wil->debug = debugfs_create_dir(WIL_NAME,
|
||||
@ -993,54 +1136,17 @@ int wil6210_debugfs_init(struct wil6210_priv *wil)
|
||||
if (IS_ERR_OR_NULL(dbg))
|
||||
return -ENODEV;
|
||||
|
||||
debugfs_create_file("mbox", S_IRUGO, dbg, wil, &fops_mbox);
|
||||
debugfs_create_file("vrings", S_IRUGO, dbg, wil, &fops_vring);
|
||||
debugfs_create_file("stations", S_IRUGO, dbg, wil, &fops_sta);
|
||||
debugfs_create_file("desc", S_IRUGO, dbg, wil, &fops_txdesc);
|
||||
debugfs_create_u32("desc_index", S_IRUGO | S_IWUSR, dbg,
|
||||
&dbg_txdesc_index);
|
||||
debugfs_create_u32("vring_index", S_IRUGO | S_IWUSR, dbg,
|
||||
&dbg_vring_index);
|
||||
|
||||
debugfs_create_file("bf", S_IRUGO, dbg, wil, &fops_bf);
|
||||
debugfs_create_file("ssid", S_IRUGO | S_IWUSR, dbg, wil, &fops_ssid);
|
||||
debugfs_create_u32("secure_pcp", S_IRUGO | S_IWUSR, dbg,
|
||||
&wil->secure_pcp);
|
||||
wil_debugfs_create_ulong("status", S_IRUGO | S_IWUSR, dbg,
|
||||
&wil->status);
|
||||
debugfs_create_u32("fw_version", S_IRUGO, dbg, &wil->fw_version);
|
||||
debugfs_create_x32("hw_version", S_IRUGO, dbg, &wil->hw_version);
|
||||
|
||||
wil6210_debugfs_create_ISR(wil, "USER_ICR", dbg,
|
||||
HOSTADDR(RGF_USER_USER_ICR));
|
||||
wil6210_debugfs_create_ISR(wil, "DMA_EP_TX_ICR", dbg,
|
||||
HOSTADDR(RGF_DMA_EP_TX_ICR));
|
||||
wil6210_debugfs_create_ISR(wil, "DMA_EP_RX_ICR", dbg,
|
||||
HOSTADDR(RGF_DMA_EP_RX_ICR));
|
||||
wil6210_debugfs_create_ISR(wil, "DMA_EP_MISC_ICR", dbg,
|
||||
HOSTADDR(RGF_DMA_EP_MISC_ICR));
|
||||
wil6210_debugfs_create_pseudo_ISR(wil, dbg);
|
||||
wil6210_debugfs_create_ITR_CNT(wil, dbg);
|
||||
wil_debugfs_create_iomem_x32("MAC_MTRL_COUNTER_0", S_IRUGO, dbg,
|
||||
wil->csr +
|
||||
HOSTADDR(RGF_MAC_MTRL_COUNTER_0));
|
||||
|
||||
wil_debugfs_create_iomem_x32("RGF_USER_USAGE_1", S_IRUGO, dbg,
|
||||
wil->csr +
|
||||
HOSTADDR(RGF_USER_USAGE_1));
|
||||
debugfs_create_u32("mem_addr", S_IRUGO | S_IWUSR, dbg, &mem_addr);
|
||||
debugfs_create_file("mem_val", S_IRUGO, dbg, wil, &fops_memread);
|
||||
|
||||
debugfs_create_file("reset", S_IWUSR, dbg, wil, &fops_reset);
|
||||
debugfs_create_file("rxon", S_IWUSR, dbg, wil, &fops_rxon);
|
||||
debugfs_create_file("tx_mgmt", S_IWUSR, dbg, wil, &fops_txmgmt);
|
||||
debugfs_create_file("wmi_send", S_IWUSR, dbg, wil, &fops_wmi);
|
||||
debugfs_create_file("temp", S_IRUGO, dbg, wil, &fops_temp);
|
||||
debugfs_create_file("freq", S_IRUGO, dbg, wil, &fops_freq);
|
||||
debugfs_create_file("link", S_IRUGO, dbg, wil, &fops_link);
|
||||
debugfs_create_file("info", S_IRUGO, dbg, wil, &fops_info);
|
||||
|
||||
wil6210_debugfs_init_files(wil, dbg);
|
||||
wil6210_debugfs_init_isr(wil, dbg);
|
||||
wil6210_debugfs_init_blobs(wil, dbg);
|
||||
wil6210_debugfs_init_offset(wil, dbg, wil, dbg_wil_off);
|
||||
wil6210_debugfs_init_offset(wil, dbg, (void * __force)wil->csr,
|
||||
dbg_wil_regs);
|
||||
wil6210_debugfs_init_offset(wil, dbg, NULL, dbg_statics);
|
||||
|
||||
wil6210_debugfs_create_pseudo_ISR(wil, dbg);
|
||||
|
||||
wil6210_debugfs_create_ITR_CNT(wil, dbg);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user