wil6210: add support for reading multiple RFs temperature via debugfs
Base-band chips support multi RFs chips. Add support for reading multiple RFs temperature via debugfs. Signed-off-by: Tzahi Sabo <stzahi@codeaurora.org> Signed-off-by: Maya Erez <merez@codeaurora.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
3e7ee09d36
commit
9b58611873
|
@ -1336,7 +1336,7 @@ static void print_temp(struct seq_file *s, const char *prefix, s32 t)
|
|||
{
|
||||
switch (t) {
|
||||
case 0:
|
||||
case ~(u32)0:
|
||||
case WMI_INVALID_TEMPERATURE:
|
||||
seq_printf(s, "%s N/A\n", prefix);
|
||||
break;
|
||||
default:
|
||||
|
@ -1349,17 +1349,41 @@ static void print_temp(struct seq_file *s, const char *prefix, s32 t)
|
|||
static int temp_show(struct seq_file *s, void *data)
|
||||
{
|
||||
struct wil6210_priv *wil = s->private;
|
||||
s32 t_m, t_r;
|
||||
int rc = wmi_get_temperature(wil, &t_m, &t_r);
|
||||
int rc, i;
|
||||
|
||||
if (rc) {
|
||||
seq_puts(s, "Failed\n");
|
||||
return 0;
|
||||
if (test_bit(WMI_FW_CAPABILITY_TEMPERATURE_ALL_RF,
|
||||
wil->fw_capabilities)) {
|
||||
struct wmi_temp_sense_all_done_event sense_all_evt;
|
||||
|
||||
wil_dbg_misc(wil,
|
||||
"WMI_FW_CAPABILITY_TEMPERATURE_ALL_RF is supported");
|
||||
rc = wmi_get_all_temperatures(wil, &sense_all_evt);
|
||||
if (rc) {
|
||||
seq_puts(s, "Failed\n");
|
||||
return 0;
|
||||
}
|
||||
print_temp(s, "T_mac =",
|
||||
le32_to_cpu(sense_all_evt.baseband_t1000));
|
||||
seq_printf(s, "Connected RFs [0x%08x]\n",
|
||||
sense_all_evt.rf_bitmap);
|
||||
for (i = 0; i < WMI_MAX_XIF_PORTS_NUM; i++) {
|
||||
seq_printf(s, "RF[%d] = ", i);
|
||||
print_temp(s, "",
|
||||
le32_to_cpu(sense_all_evt.rf_t1000[i]));
|
||||
}
|
||||
} else {
|
||||
s32 t_m, t_r;
|
||||
|
||||
wil_dbg_misc(wil,
|
||||
"WMI_FW_CAPABILITY_TEMPERATURE_ALL_RF is not supported");
|
||||
rc = wmi_get_temperature(wil, &t_m, &t_r);
|
||||
if (rc) {
|
||||
seq_puts(s, "Failed\n");
|
||||
return 0;
|
||||
}
|
||||
print_temp(s, "T_mac =", t_m);
|
||||
print_temp(s, "T_radio =", t_r);
|
||||
}
|
||||
|
||||
print_temp(s, "T_mac =", t_m);
|
||||
print_temp(s, "T_radio =", t_r);
|
||||
|
||||
return 0;
|
||||
}
|
||||
DEFINE_SHOW_ATTRIBUTE(temp);
|
||||
|
|
|
@ -1252,6 +1252,9 @@ int wmi_rx_chain_add(struct wil6210_priv *wil, struct wil_ring *vring);
|
|||
int wmi_update_ft_ies(struct wil6210_vif *vif, u16 ie_len, const void *ie);
|
||||
int wmi_rxon(struct wil6210_priv *wil, bool on);
|
||||
int wmi_get_temperature(struct wil6210_priv *wil, u32 *t_m, u32 *t_r);
|
||||
int wmi_get_all_temperatures(struct wil6210_priv *wil,
|
||||
struct wmi_temp_sense_all_done_event
|
||||
*sense_all_evt);
|
||||
int wmi_disconnect_sta(struct wil6210_vif *vif, const u8 *mac, u16 reason,
|
||||
bool del_sta);
|
||||
int wmi_addba(struct wil6210_priv *wil, u8 mid,
|
||||
|
|
|
@ -486,6 +486,8 @@ static const char *cmdid2name(u16 cmdid)
|
|||
return "WMI_UPDATE_FT_IES_CMD";
|
||||
case WMI_RBUFCAP_CFG_CMDID:
|
||||
return "WMI_RBUFCAP_CFG_CMD";
|
||||
case WMI_TEMP_SENSE_ALL_CMDID:
|
||||
return "WMI_TEMP_SENSE_ALL_CMDID";
|
||||
default:
|
||||
return "Untracked CMD";
|
||||
}
|
||||
|
@ -632,6 +634,8 @@ static const char *eventid2name(u16 eventid)
|
|||
return "WMI_FT_REASSOC_STATUS_EVENT";
|
||||
case WMI_RBUFCAP_CFG_EVENTID:
|
||||
return "WMI_RBUFCAP_CFG_EVENT";
|
||||
case WMI_TEMP_SENSE_ALL_DONE_EVENTID:
|
||||
return "WMI_TEMP_SENSE_ALL_DONE_EVENTID";
|
||||
default:
|
||||
return "Untracked EVENT";
|
||||
}
|
||||
|
@ -2648,6 +2652,44 @@ int wmi_get_temperature(struct wil6210_priv *wil, u32 *t_bb, u32 *t_rf)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int wmi_get_all_temperatures(struct wil6210_priv *wil,
|
||||
struct wmi_temp_sense_all_done_event
|
||||
*sense_all_evt)
|
||||
{
|
||||
struct wil6210_vif *vif = ndev_to_vif(wil->main_ndev);
|
||||
int rc;
|
||||
struct wmi_temp_sense_all_cmd cmd = {
|
||||
.measure_baseband_en = true,
|
||||
.measure_rf_en = true,
|
||||
.measure_mode = TEMPERATURE_MEASURE_NOW,
|
||||
};
|
||||
struct {
|
||||
struct wmi_cmd_hdr wmi;
|
||||
struct wmi_temp_sense_all_done_event evt;
|
||||
} __packed reply;
|
||||
|
||||
if (!sense_all_evt) {
|
||||
wil_err(wil, "Invalid sense_all_evt value\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
memset(&reply, 0, sizeof(reply));
|
||||
reply.evt.status = WMI_FW_STATUS_FAILURE;
|
||||
rc = wmi_call(wil, WMI_TEMP_SENSE_ALL_CMDID, vif->mid, &cmd,
|
||||
sizeof(cmd), WMI_TEMP_SENSE_ALL_DONE_EVENTID,
|
||||
&reply, sizeof(reply), WIL_WMI_CALL_GENERAL_TO_MS);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
if (reply.evt.status == WMI_FW_STATUS_FAILURE) {
|
||||
wil_err(wil, "Failed geting TEMP_SENSE_ALL\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
memcpy(sense_all_evt, &reply.evt, sizeof(reply.evt));
|
||||
return 0;
|
||||
}
|
||||
|
||||
int wmi_disconnect_sta(struct wil6210_vif *vif, const u8 *mac, u16 reason,
|
||||
bool del_sta)
|
||||
{
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#define WMI_PROX_RANGE_NUM (3)
|
||||
#define WMI_MAX_LOSS_DMG_BEACONS (20)
|
||||
#define MAX_NUM_OF_SECTORS (128)
|
||||
#define WMI_INVALID_TEMPERATURE (0xFFFFFFFF)
|
||||
#define WMI_SCHED_MAX_ALLOCS_PER_CMD (4)
|
||||
#define WMI_RF_DTYPE_LENGTH (3)
|
||||
#define WMI_RF_ETYPE_LENGTH (3)
|
||||
|
@ -64,6 +65,7 @@
|
|||
#define WMI_QOS_MAX_WEIGHT 50
|
||||
#define WMI_QOS_SET_VIF_PRIORITY (0xFF)
|
||||
#define WMI_QOS_DEFAULT_PRIORITY (WMI_QOS_NUM_OF_PRIORITY)
|
||||
#define WMI_MAX_XIF_PORTS_NUM (8)
|
||||
|
||||
/* Mailbox interface
|
||||
* used for commands and events
|
||||
|
@ -105,6 +107,7 @@ enum wmi_fw_capability {
|
|||
WMI_FW_CAPABILITY_TX_REQ_EXT = 25,
|
||||
WMI_FW_CAPABILITY_CHANNEL_4 = 26,
|
||||
WMI_FW_CAPABILITY_IPA = 27,
|
||||
WMI_FW_CAPABILITY_TEMPERATURE_ALL_RF = 30,
|
||||
WMI_FW_CAPABILITY_MAX,
|
||||
};
|
||||
|
||||
|
@ -296,6 +299,7 @@ enum wmi_command_id {
|
|||
WMI_SET_VRING_PRIORITY_WEIGHT_CMDID = 0xA10,
|
||||
WMI_SET_VRING_PRIORITY_CMDID = 0xA11,
|
||||
WMI_RBUFCAP_CFG_CMDID = 0xA12,
|
||||
WMI_TEMP_SENSE_ALL_CMDID = 0xA13,
|
||||
WMI_SET_MAC_ADDRESS_CMDID = 0xF003,
|
||||
WMI_ABORT_SCAN_CMDID = 0xF007,
|
||||
WMI_SET_PROMISCUOUS_MODE_CMDID = 0xF041,
|
||||
|
@ -1411,12 +1415,7 @@ struct wmi_rf_xpm_write_cmd {
|
|||
u8 data_bytes[0];
|
||||
} __packed;
|
||||
|
||||
/* WMI_TEMP_SENSE_CMDID
|
||||
*
|
||||
* Measure MAC and radio temperatures
|
||||
*
|
||||
* Possible modes for temperature measurement
|
||||
*/
|
||||
/* Possible modes for temperature measurement */
|
||||
enum wmi_temperature_measure_mode {
|
||||
TEMPERATURE_USE_OLD_VALUE = 0x01,
|
||||
TEMPERATURE_MEASURE_NOW = 0x02,
|
||||
|
@ -1942,6 +1941,14 @@ struct wmi_set_ap_slot_size_cmd {
|
|||
__le32 slot_size;
|
||||
} __packed;
|
||||
|
||||
/* WMI_TEMP_SENSE_ALL_CMDID */
|
||||
struct wmi_temp_sense_all_cmd {
|
||||
u8 measure_baseband_en;
|
||||
u8 measure_rf_en;
|
||||
u8 measure_mode;
|
||||
u8 reserved;
|
||||
} __packed;
|
||||
|
||||
/* WMI Events
|
||||
* List of Events (target to host)
|
||||
*/
|
||||
|
@ -2101,6 +2108,7 @@ enum wmi_event_id {
|
|||
WMI_SET_VRING_PRIORITY_WEIGHT_EVENTID = 0x1A10,
|
||||
WMI_SET_VRING_PRIORITY_EVENTID = 0x1A11,
|
||||
WMI_RBUFCAP_CFG_EVENTID = 0x1A12,
|
||||
WMI_TEMP_SENSE_ALL_DONE_EVENTID = 0x1A13,
|
||||
WMI_SET_CHANNEL_EVENTID = 0x9000,
|
||||
WMI_ASSOC_REQ_EVENTID = 0x9001,
|
||||
WMI_EAPOL_RX_EVENTID = 0x9002,
|
||||
|
@ -2784,11 +2792,13 @@ struct wmi_fixed_scheduling_ul_config_event {
|
|||
*/
|
||||
struct wmi_temp_sense_done_event {
|
||||
/* Temperature times 1000 (actual temperature will be achieved by
|
||||
* dividing the value by 1000)
|
||||
* dividing the value by 1000). When temperature cannot be read from
|
||||
* device return WMI_INVALID_TEMPERATURE
|
||||
*/
|
||||
__le32 baseband_t1000;
|
||||
/* Temperature times 1000 (actual temperature will be achieved by
|
||||
* dividing the value by 1000)
|
||||
* dividing the value by 1000). When temperature cannot be read from
|
||||
* device return WMI_INVALID_TEMPERATURE
|
||||
*/
|
||||
__le32 rf_t1000;
|
||||
} __packed;
|
||||
|
@ -4140,4 +4150,25 @@ struct wmi_rbufcap_cfg_event {
|
|||
u8 reserved[3];
|
||||
} __packed;
|
||||
|
||||
/* WMI_TEMP_SENSE_ALL_DONE_EVENTID
|
||||
* Measure MAC and all radio temperatures
|
||||
*/
|
||||
struct wmi_temp_sense_all_done_event {
|
||||
/* enum wmi_fw_status */
|
||||
u8 status;
|
||||
/* Bitmap of connected RFs */
|
||||
u8 rf_bitmap;
|
||||
u8 reserved[2];
|
||||
/* Temperature times 1000 (actual temperature will be achieved by
|
||||
* dividing the value by 1000). When temperature cannot be read from
|
||||
* device return WMI_INVALID_TEMPERATURE
|
||||
*/
|
||||
__le32 rf_t1000[WMI_MAX_XIF_PORTS_NUM];
|
||||
/* Temperature times 1000 (actual temperature will be achieved by
|
||||
* dividing the value by 1000). When temperature cannot be read from
|
||||
* device return WMI_INVALID_TEMPERATURE
|
||||
*/
|
||||
__le32 baseband_t1000;
|
||||
} __packed;
|
||||
|
||||
#endif /* __WILOCITY_WMI_H__ */
|
||||
|
|
Loading…
Reference in New Issue