rsi: add version information

We will dump information about firmware version, firmware file
name and operating mode during initialization.

Signed-off-by: Pavani Muthyala <pavani.muthyala@redpinesignals.com>
Signed-off-by: Amitkumar Karwar <amit.karwar@redpinesignals.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
Pavani Muthyala 2017-09-21 18:20:34 +05:30 committed by Kalle Valo
parent 7dfb0ebd02
commit 192524a499
5 changed files with 57 additions and 17 deletions

View File

@ -83,19 +83,12 @@ static int rsi_version_read(struct seq_file *seq, void *data)
{
struct rsi_common *common = seq->private;
common->driver_ver.major = 0;
common->driver_ver.minor = 1;
common->driver_ver.release_num = 0;
common->driver_ver.patch_num = 0;
seq_printf(seq, "Driver : %x.%d.%d.%d\nLMAC : %d.%d.%d.%d\n",
common->driver_ver.major,
common->driver_ver.minor,
common->driver_ver.release_num,
common->driver_ver.patch_num,
common->fw_ver.major,
common->fw_ver.minor,
common->fw_ver.release_num,
common->fw_ver.patch_num);
seq_printf(seq, "LMAC : %d.%d.%d.%d\n",
common->lmac_ver.major,
common->lmac_ver.minor,
common->lmac_ver.release_num,
common->lmac_ver.patch_num);
return 0;
}

View File

@ -769,6 +769,7 @@ static int auto_fw_upgrade(struct rsi_hw *adapter, u8 *flash_content,
static int rsi_load_firmware(struct rsi_hw *adapter)
{
struct rsi_common *common = adapter->priv;
struct rsi_host_intf_ops *hif_ops = adapter->host_intf_ops;
const struct firmware *fw_entry = NULL;
u32 regout_val = 0, content_size;
@ -844,6 +845,18 @@ static int rsi_load_firmware(struct rsi_hw *adapter)
content_size = fw_entry->size;
rsi_dbg(INFO_ZONE, "FW Length = %d bytes\n", content_size);
/* Get the firmware version */
common->lmac_ver.ver.info.fw_ver[0] =
flash_content[LMAC_VER_OFFSET] & 0xFF;
common->lmac_ver.ver.info.fw_ver[1] =
flash_content[LMAC_VER_OFFSET + 1] & 0xFF;
common->lmac_ver.major = flash_content[LMAC_VER_OFFSET + 2] & 0xFF;
common->lmac_ver.release_num =
flash_content[LMAC_VER_OFFSET + 3] & 0xFF;
common->lmac_ver.minor = flash_content[LMAC_VER_OFFSET + 4] & 0xFF;
common->lmac_ver.patch_num = 0;
rsi_print_version(common);
status = bl_write_header(adapter, flash_content, content_size);
if (status) {
rsi_dbg(ERR_ZONE,

View File

@ -20,6 +20,7 @@
#include <linux/firmware.h>
#include "rsi_mgmt.h"
#include "rsi_common.h"
#include "rsi_hal.h"
u32 rsi_zone_enabled = /* INFO_ZONE |
INIT_ZONE |
@ -56,6 +57,30 @@ void rsi_dbg(u32 zone, const char *fmt, ...)
}
EXPORT_SYMBOL_GPL(rsi_dbg);
static char *opmode_str(int oper_mode)
{
switch (oper_mode) {
case RSI_DEV_OPMODE_WIFI_ALONE:
return "Wi-Fi alone";
}
return "Unknown";
}
void rsi_print_version(struct rsi_common *common)
{
rsi_dbg(ERR_ZONE, "================================================\n");
rsi_dbg(ERR_ZONE, "================ RSI Version Info ==============\n");
rsi_dbg(ERR_ZONE, "================================================\n");
rsi_dbg(ERR_ZONE, "FW Version\t: %d.%d.%d\n",
common->lmac_ver.major, common->lmac_ver.minor,
common->lmac_ver.release_num);
rsi_dbg(ERR_ZONE, "Operating mode\t: %d [%s]",
common->oper_mode, opmode_str(common->oper_mode));
rsi_dbg(ERR_ZONE, "Firmware file\t: %s", common->priv->fw_file_name);
rsi_dbg(ERR_ZONE, "================================================\n");
}
/**
* rsi_prepare_skb() - This function prepares the skb.
* @common: Pointer to the driver private structure.

View File

@ -101,6 +101,9 @@
#define BBP_INFO_40MHZ 0x6
#define FW_FLASH_OFFSET 0x820
#define LMAC_VER_OFFSET (FW_FLASH_OFFSET + 0x200)
struct bl_header {
__le32 flags;
__le32 image_no;

View File

@ -113,8 +113,13 @@ extern __printf(2, 3) void rsi_dbg(u32 zone, const char *fmt, ...);
struct version_info {
u16 major;
u16 minor;
u16 release_num;
u16 patch_num;
u8 release_num;
u8 patch_num;
union {
struct {
u8 fw_ver[8];
} info;
} ver;
} __packed;
struct skb_info {
@ -199,8 +204,7 @@ struct rsi_common {
struct vif_priv vif_info[RSI_MAX_VIFS];
bool mgmt_q_block;
struct version_info driver_ver;
struct version_info fw_ver;
struct version_info lmac_ver;
struct rsi_thread tx_thread;
struct sk_buff_head tx_queue[NUM_EDCA_QUEUES + 2];
@ -334,6 +338,8 @@ struct rsi_hw {
int (*determine_event_timeout)(struct rsi_hw *adapter);
};
void rsi_print_version(struct rsi_common *common);
struct rsi_host_intf_ops {
int (*read_pkt)(struct rsi_hw *adapter, u8 *pkt, u32 len);
int (*write_pkt)(struct rsi_hw *adapter, u8 *pkt, u32 len);