blob: 7fd1888600281fc40b3e5aea463ea4aa10dac090 [file] [log] [blame]
/*
**************************************************************************
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
**************************************************************************
*/
/*
* nss_wifi_ext_vdev_log.c
* NSS WiFi extended VAP logger file.
*/
#include "nss_core.h"
#define NSS_WIFI_EXT_VDEV_LOG_MESSAGE_TYPE_INDEX(type) ((type) - NSS_IF_MAX_MSG_TYPES)
/*
* nss_wifi_ext_vdev_log_message_types_str
* NSS WiFi extended VAP message strings
*/
static int8_t *nss_wifi_ext_vdev_log_message_types_str[NSS_WIFI_EXT_VDEV_MSG_MAX] __maybe_unused = {
"WiFi Common I/F Message",
"WiFi Extendev VAP configure",
"WiFi Extendev VAP configure wds",
"WiFi Extendev VAP configure next hop",
"WiFi Extendev VAP stats",
"WiFi Extended VAP configure VLAN"
};
/*
* nss_wifi_ext_vdev_log_configure_msg()
* Log NSS WiFi extended vap configure message.
*/
static void nss_wifi_ext_vdev_log_configure_if_msg(struct nss_wifi_ext_vdev_msg *nwevm)
{
struct nss_wifi_ext_vdev_configure_if_msg *cmsg __maybe_unused = &nwevm->msg.cmsg;
nss_trace("%px: WiFi extended VAP configure message \n"
"Mac address: %pM\n"
"Radio interface num: %d\n"
"Parent VAP interface num: %d\n",
cmsg, cmsg->mac_addr, cmsg->radio_ifnum,
cmsg->pvap_ifnum);
}
/*
* nss_wifi_ext_vdev_log_wds_msg()
* Log NSS WiFi extended vap wds message.
*/
static void nss_wifi_ext_vdev_log_wds_msg(struct nss_wifi_ext_vdev_msg *nwevm)
{
struct nss_wifi_ext_vdev_wds_msg *wmsg __maybe_unused = &nwevm->msg.wmsg;
nss_trace("%px: NSS WiFi extended VAP wds message: \n"
"WDS sta ID: %d\n"
"WDS sta macaddr: %pM\n",
wmsg, wmsg->wds_peer_id,
wmsg->mac_addr);
}
/*
* nss_wifi_ext_vdev_set_nxt_hop_msg()
* Set the next hop message.
*/
static void nss_wifi_ext_vdev_set_nxt_hop_msg(struct nss_wifi_ext_vdev_msg *nwevm)
{
struct nss_wifi_ext_vdev_set_next_hop_msg *wnhm __maybe_unused = &nwevm->msg.wnhm;
nss_trace("%px: NSS WiFi extended vap set next hop message: \n"
"Next hop if num: %d\n",
wnhm, wnhm->if_num);
}
/*
* nss_wifi_ext_vdev_linkup_msg()
* Log NSS linkup message.
*/
static void nss_wifi_ext_vdev_linkup_msg(struct nss_wifi_ext_vdev_msg *nwevm)
{
union nss_if_msgs *if_msg __maybe_unused = &nwevm->msg.if_msg;
nss_trace("%px: NSS WiFi ext linkup message\n", if_msg);
}
/*
* nss_wifi_ext_vdev_linkdown_msg()
* Log NSS linkdown message.
*/
static void nss_wifi_ext_vdev_linkdown_msg(struct nss_wifi_ext_vdev_msg *nwevm)
{
union nss_if_msgs *if_msg __maybe_unused = &nwevm->msg.if_msg;
nss_trace("%px: NSS WiFi ext linkdown message\n", if_msg);
}
/*
* nss_wifi_ext_vdev_macaddr_set_msg()
* Set/Change the mac address
*/
static void nss_wifi_ext_vdev_macaddr_set_msg(struct nss_wifi_ext_vdev_msg *nwevm)
{
union nss_if_msgs *if_msg = &nwevm->msg.if_msg;
struct nss_if_mac_address_set *nimas __maybe_unused = &if_msg->mac_address_set;
nss_trace("%px: NSS WiFi ext change mac addr: \n"
"mac addr %pM\n",
nimas, nimas->mac_addr);
}
/*
* nss_wifi_ext_vdev_log_vlan_msg()
* Configure vlan message.
*/
static void nss_wifi_ext_vdev_log_vlan_msg(struct nss_wifi_ext_vdev_msg *nwevm)
{
struct nss_wifi_ext_vdev_vlan_msg *vmsg __maybe_unused = &nwevm->msg.vmsg;
nss_trace("%px: NSS WiFi extended VAP vlan message: \n"
"vlan ID %hu\n",
vmsg, vmsg->vlan_id);
}
/*
* nss_wifi_ext_vdev_log_verbose()
* Log message contents.
*/
static void nss_wifi_ext_vdev_log_verbose(struct nss_wifi_ext_vdev_msg *nwevm)
{
switch (nwevm->cm.type) {
case NSS_WIFI_EXT_VDEV_MSG_CONFIGURE_IF:
nss_wifi_ext_vdev_log_configure_if_msg(nwevm);
break;
case NSS_WIFI_EXT_VDEV_MSG_CONFIGURE_WDS :
nss_wifi_ext_vdev_log_wds_msg(nwevm);
break;
case NSS_WIFI_EXT_VDEV_SET_NEXT_HOP:
nss_wifi_ext_vdev_set_nxt_hop_msg(nwevm);
break;
case NSS_WIFI_EXT_VDEV_MSG_STATS_SYNC:
break;
case NSS_IF_OPEN:
nss_wifi_ext_vdev_linkup_msg(nwevm);
break;
case NSS_IF_CLOSE:
nss_wifi_ext_vdev_linkdown_msg(nwevm);
break;
case NSS_IF_MAC_ADDR_SET:
nss_wifi_ext_vdev_macaddr_set_msg(nwevm);
break;
case NSS_WIFI_EXT_VDEV_MSG_CONFIGURE_VLAN:
nss_wifi_ext_vdev_log_vlan_msg(nwevm);
break;
default:
nss_trace("%px: Invalid message type\n", nwevm);
break;
}
}
/*
* nss_wifi_ext_vdev_log_tx_msg()
* Log messages transmitted to FW.
*/
void nss_wifi_ext_vdev_log_tx_msg(struct nss_wifi_ext_vdev_msg *nwevm)
{
uint32_t type_idx = 0;
if (nwevm->cm.type >= NSS_WIFI_EXT_VDEV_MSG_MAX) {
nss_warning("%px: Invalid message type\n", nwevm);
return;
}
type_idx = (nwevm->cm.type > NSS_IF_MAX_MSG_TYPES) ?
(NSS_WIFI_EXT_VDEV_LOG_MESSAGE_TYPE_INDEX(nwevm->cm.type)) : 0;
nss_info("%px: type[%d]:%s\n", nwevm, nwevm->cm.type, nss_wifi_ext_vdev_log_message_types_str[type_idx]);
nss_wifi_ext_vdev_log_verbose(nwevm);
}
/*
* nss_wifi_ext_vdev_log_rx_msg()
* Log messages received from FW.
*/
void nss_wifi_ext_vdev_log_rx_msg(struct nss_wifi_ext_vdev_msg *nwevm)
{
uint32_t type_idx = 0;
if (nwevm->cm.response >= NSS_CMN_RESPONSE_LAST) {
nss_warning("%px: Invalid response\n", nwevm);
return;
}
type_idx = (nwevm->cm.type > NSS_IF_MAX_MSG_TYPES) ?
(NSS_WIFI_EXT_VDEV_LOG_MESSAGE_TYPE_INDEX(nwevm->cm.type)) : 0;
if (nwevm->cm.response == NSS_CMN_RESPONSE_NOTIFY || (nwevm->cm.response == NSS_CMN_RESPONSE_ACK)) {
nss_info("%px: type[%d]:%s, response[%d]:%s\n", nwevm, nwevm->cm.type,
nss_wifi_ext_vdev_log_message_types_str[type_idx],
nwevm->cm.response, nss_cmn_response_str[nwevm->cm.response]);
goto verbose;
}
nss_info("%px: msg nack - type[%d]:%s, response[%d]:%s\n",
nwevm, nwevm->cm.type, nss_wifi_ext_vdev_log_message_types_str[type_idx],
nwevm->cm.response, nss_cmn_response_str[nwevm->cm.response]);
verbose:
nss_wifi_ext_vdev_log_verbose(nwevm);
}