Merge "wil6210: extract firmware version from file header"
This commit is contained in:
commit
fa6c7033dc
7 changed files with 46 additions and 6 deletions
|
@ -1583,6 +1583,32 @@ static const struct file_operations fops_fw_capabilities = {
|
|||
.llseek = seq_lseek,
|
||||
};
|
||||
|
||||
/*---------FW version------------*/
|
||||
static int wil_fw_version_debugfs_show(struct seq_file *s, void *data)
|
||||
{
|
||||
struct wil6210_priv *wil = s->private;
|
||||
|
||||
if (wil->fw_version[0])
|
||||
seq_printf(s, "%s\n", wil->fw_version);
|
||||
else
|
||||
seq_puts(s, "N/A\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int wil_fw_version_seq_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return single_open(file, wil_fw_version_debugfs_show,
|
||||
inode->i_private);
|
||||
}
|
||||
|
||||
static const struct file_operations fops_fw_version = {
|
||||
.open = wil_fw_version_seq_open,
|
||||
.release = single_release,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
};
|
||||
|
||||
/*----------------*/
|
||||
static void wil6210_debugfs_init_blobs(struct wil6210_priv *wil,
|
||||
struct dentry *dbg)
|
||||
|
@ -1634,6 +1660,7 @@ static const struct {
|
|||
{"led_cfg", S_IRUGO | S_IWUSR, &fops_led_cfg},
|
||||
{"led_blink_time", S_IRUGO | S_IWUSR, &fops_led_blink_time},
|
||||
{"fw_capabilities", S_IRUGO, &fops_fw_capabilities},
|
||||
{"fw_version", S_IRUGO, &fops_fw_version},
|
||||
};
|
||||
|
||||
static void wil6210_debugfs_init_files(struct wil6210_priv *wil,
|
||||
|
@ -1674,7 +1701,6 @@ static void wil6210_debugfs_init_isr(struct wil6210_priv *wil,
|
|||
static const struct dbg_off dbg_wil_off[] = {
|
||||
WIL_FIELD(privacy, S_IRUGO, doff_u32),
|
||||
WIL_FIELD(status[0], S_IRUGO | S_IWUSR, doff_ulong),
|
||||
WIL_FIELD(fw_version, S_IRUGO, doff_u32),
|
||||
WIL_FIELD(hw_version, S_IRUGO, doff_x32),
|
||||
WIL_FIELD(recovery_count, S_IRUGO, doff_u32),
|
||||
WIL_FIELD(ap_isolate, S_IRUGO, doff_u32),
|
||||
|
|
|
@ -102,6 +102,9 @@ struct wil_fw_record_verify { /* type == wil_fw_verify */
|
|||
/* file header
|
||||
* First record of every file
|
||||
*/
|
||||
/* the FW version prefix in the comment */
|
||||
#define WIL_FW_VERSION_PREFIX "FW version: "
|
||||
#define WIL_FW_VERSION_PREFIX_LEN (sizeof(WIL_FW_VERSION_PREFIX) - 1)
|
||||
struct wil_fw_record_file_header {
|
||||
__le32 signature ; /* Wilocity signature */
|
||||
__le32 reserved;
|
||||
|
|
|
@ -223,6 +223,13 @@ static int fw_handle_file_header(struct wil6210_priv *wil, const void *data,
|
|||
wil_hex_dump_fw("", DUMP_PREFIX_OFFSET, 16, 1, d->comment,
|
||||
sizeof(d->comment), true);
|
||||
|
||||
if (!memcmp(d->comment, WIL_FW_VERSION_PREFIX,
|
||||
WIL_FW_VERSION_PREFIX_LEN))
|
||||
memcpy(wil->fw_version,
|
||||
d->comment + WIL_FW_VERSION_PREFIX_LEN,
|
||||
min(sizeof(d->comment) - WIL_FW_VERSION_PREFIX_LEN,
|
||||
sizeof(wil->fw_version) - 1));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -892,6 +892,7 @@ int wil_reset(struct wil6210_priv *wil, bool load_fw)
|
|||
WIL_FW2_NAME);
|
||||
|
||||
wil_halt_cpu(wil);
|
||||
memset(wil->fw_version, 0, sizeof(wil->fw_version));
|
||||
/* Loading f/w from the file */
|
||||
rc = wil_request_firmware(wil, WIL_FW_NAME, true);
|
||||
if (rc)
|
||||
|
|
|
@ -222,6 +222,8 @@ int wil_if_add(struct wil6210_priv *wil)
|
|||
|
||||
wil_dbg_misc(wil, "entered");
|
||||
|
||||
strlcpy(wiphy->fw_version, wil->fw_version, sizeof(wiphy->fw_version));
|
||||
|
||||
rc = wiphy_register(wiphy);
|
||||
if (rc < 0) {
|
||||
wil_err(wil, "failed to register wiphy, err %d\n", rc);
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#ifndef __WIL6210_H__
|
||||
#define __WIL6210_H__
|
||||
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/wireless.h>
|
||||
#include <net/cfg80211.h>
|
||||
|
@ -579,7 +580,7 @@ struct wil6210_priv {
|
|||
struct wireless_dev *wdev;
|
||||
void __iomem *csr;
|
||||
DECLARE_BITMAP(status, wil_status_last);
|
||||
u32 fw_version;
|
||||
u8 fw_version[ETHTOOL_FWVERS_LEN];
|
||||
u32 hw_version;
|
||||
const char *hw_name;
|
||||
DECLARE_BITMAP(hw_capabilities, hw_capability_last);
|
||||
|
|
|
@ -312,14 +312,14 @@ static void wmi_evt_ready(struct wil6210_priv *wil, int id, void *d, int len)
|
|||
struct wireless_dev *wdev = wil->wdev;
|
||||
struct wmi_ready_event *evt = d;
|
||||
|
||||
wil->fw_version = le32_to_cpu(evt->sw_version);
|
||||
wil->n_mids = evt->numof_additional_mids;
|
||||
|
||||
wil_info(wil, "FW ver. %d; MAC %pM; %d MID's\n", wil->fw_version,
|
||||
wil_info(wil, "FW ver. %s(SW %d); MAC %pM; %d MID's\n",
|
||||
wil->fw_version, le32_to_cpu(evt->sw_version),
|
||||
evt->mac, wil->n_mids);
|
||||
/* ignore MAC address, we already have it from the boot loader */
|
||||
snprintf(wdev->wiphy->fw_version, sizeof(wdev->wiphy->fw_version),
|
||||
"%d", wil->fw_version);
|
||||
strlcpy(wdev->wiphy->fw_version, wil->fw_version,
|
||||
sizeof(wdev->wiphy->fw_version));
|
||||
|
||||
wil_set_recovery_state(wil, fw_recovery_idle);
|
||||
set_bit(wil_status_fwready, wil->status);
|
||||
|
|
Loading…
Add table
Reference in a new issue