Skip to content

Commit

Permalink
wlcore/wl18xx: export conf struct in a debugfs file
Browse files Browse the repository at this point in the history
Add conf file header structure, magic and version values and export
the entire conf struct in debugfs.

Signed-off-by: Luciano Coelho <coelho@ti.com>
  • Loading branch information
Luciano Coelho committed Jun 8, 2012
1 parent 34bacf7 commit 18b70ac
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 0 deletions.
6 changes: 6 additions & 0 deletions drivers/net/wireless/ti/wl18xx/conf.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@
#ifndef __WL18XX_CONF_H__
#define __WL18XX_CONF_H__

#define WL18XX_CONF_MAGIC 0x10e100ca
#define WL18XX_CONF_VERSION (WLCORE_CONF_VERSION | 0x0001)
#define WL18XX_CONF_MASK 0x0000ffff
#define WL18XX_CONF_SIZE (WLCORE_CONF_SIZE + \
sizeof(struct wl18xx_priv_conf))

struct wl18xx_conf_phy {
u8 phy_standalone;
u8 rdl;
Expand Down
44 changes: 44 additions & 0 deletions drivers/net/wireless/ti/wl18xx/debugfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,48 @@ WL18XX_DEBUGFS_FWSTATS_FILE(mem, tx_free_mem_blks, "%u");
WL18XX_DEBUGFS_FWSTATS_FILE(mem, fwlog_free_mem_blks, "%u");
WL18XX_DEBUGFS_FWSTATS_FILE(mem, fw_gen_free_mem_blks, "%u");

static ssize_t conf_read(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
{
struct wl1271 *wl = file->private_data;
struct wl18xx_priv *priv = wl->priv;
struct wlcore_conf_header header;
char *buf, *pos;
size_t len;
int ret;

len = WL18XX_CONF_SIZE;
buf = kmalloc(len, GFP_KERNEL);
if (!buf)
return -ENOMEM;

header.magic = cpu_to_le32(WL18XX_CONF_MAGIC);
header.version = cpu_to_le32(WL18XX_CONF_VERSION);
header.checksum = 0;

mutex_lock(&wl->mutex);

pos = buf;
memcpy(pos, &header, sizeof(header));
pos += sizeof(header);
memcpy(pos, &wl->conf, sizeof(wl->conf));
pos += sizeof(wl->conf);
memcpy(pos, &priv->conf, sizeof(priv->conf));

mutex_unlock(&wl->mutex);

ret = simple_read_from_buffer(user_buf, count, ppos, buf, len);

kfree(buf);
return ret;
}

static const struct file_operations conf_ops = {
.read = conf_read,
.open = simple_open,
.llseek = default_llseek,
};

static ssize_t clear_fw_stats_write(struct file *file,
const char __user *user_buf,
size_t count, loff_t *ppos)
Expand Down Expand Up @@ -327,6 +369,8 @@ int wl18xx_debugfs_add_files(struct wl1271 *wl,
DEBUGFS_FWSTATS_ADD(mem, fwlog_free_mem_blks);
DEBUGFS_FWSTATS_ADD(mem, fw_gen_free_mem_blks);

DEBUGFS_ADD(conf, moddir);

return 0;

err:
Expand Down
22 changes: 22 additions & 0 deletions drivers/net/wireless/ti/wlcore/conf.h
Original file line number Diff line number Diff line change
Expand Up @@ -1271,6 +1271,22 @@ struct conf_hangover_settings {
u8 window_size;
} __packed;

/*
* The conf version consists of 4 bytes. The two MSB are the wlcore
* version, the two LSB are the lower driver's private conf
* version.
*/
#define WLCORE_CONF_VERSION (0x0001 << 16)
#define WLCORE_CONF_MASK 0xffff0000
#define WLCORE_CONF_SIZE (sizeof(struct wlcore_conf_header) + \
sizeof(struct wlcore_conf))

struct wlcore_conf_header {
__le32 magic;
__le32 version;
__le32 checksum;
} __packed;

struct wlcore_conf {
struct conf_sg_settings sg;
struct conf_rx_settings rx;
Expand All @@ -1290,4 +1306,10 @@ struct wlcore_conf {
struct conf_hangover_settings hangover;
} __packed;

struct wlcore_conf_file {
struct wlcore_conf_header header;
struct wlcore_conf core;
u8 priv[0];
} __packed;

#endif

0 comments on commit 18b70ac

Please sign in to comment.