Merge "[qca-nss-drv] Receving the edma allocation fail count stat"
diff --git a/exports/nss_api_if.h b/exports/nss_api_if.h
index 6366b36..701a710 100644
--- a/exports/nss_api_if.h
+++ b/exports/nss_api_if.h
@@ -203,6 +203,24 @@
/**< Special interface number for dscp2pri. */
/**
+ * Wireless Multimedia Extention Access Category to TID.
+ */
+#define NSS_WIFILI_WME_AC_TO_TID(_ac) ( \
+ ((_ac) == NSS_WIFILI_WME_AC_VO) ? 6 : \
+ (((_ac) == NSS_WIFILI_WME_AC_VI) ? 5 : \
+ (((_ac) == NSS_WIFILI_WME_AC_BK) ? 1 : \
+ 0)))
+
+/**
+ * Wireless TID to Wireless Extension Multimedia Access Category.
+ */
+#define NSS_WIFILI_TID_TO_WME_AC(_tid) ( \
+ (((_tid) == 0) || ((_tid) == 3)) ? NSS_WIFILI_WME_AC_BE : \
+ ((((_tid) == 1) || ((_tid) == 2)) ? NSS_WIFILI_WME_AC_BK : \
+ ((((_tid) == 4) || ((_tid) == 5)) ? NSS_WIFILI_WME_AC_VI : \
+ NSS_WIFILI_WME_AC_VO)))
+
+/**
* Converts the format of an IPv6 address from Linux to NSS. @hideinitializer
*/
#define IN6_ADDR_TO_IPV6_ADDR(ipv6, in6) \
diff --git a/exports/nss_wifili_if.h b/exports/nss_wifili_if.h
index 0bba091..331f84e 100644
--- a/exports/nss_wifili_if.h
+++ b/exports/nss_wifili_if.h
@@ -17,33 +17,80 @@
/**
* @file nss_wifili.h
* NSS TO HLOS interface definitions.
+ * NOTE: Here we will use wifili as a reference to
+ * the IPQ807x Wi-Fi object.
*/
#ifndef __NSS_WIFILI_H
#define __NSS_WIFILI_H
#define NSS_WIFILI_MAX_SRNG_REG_GROUPS_MSG 2
- /**< Max srng register groups. */
+ /**< Maximum srng (ring) register groups. */
#define NSS_WIFILI_MAX_NUMBER_OF_PAGE_MSG 32
- /**< Max number of pages allocated from host. */
+ /**< Maximum number of pages allocated from host. */
#define NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG 4
- /**< Max number of tcl data ring for NSS. */
+ /**< Maximum number of Transmit Classifier data ring for NSS. */
#define NSS_WIFILI_MAX_REO_DATA_RINGS_MSG 4
- /**< Max number of reo data ring for NSS. */
+ /**< Maximum number of Reorder (reo) data ring for NSS. */
#define NSS_WIFILI_SOC_PER_PACKET_METADATA_OFFSET 4
- /**< Metadata area for storing rx stats. */
+ /**< Metadata area for storing Rx statistics. */
#define NSS_WIFILI_MAX_TXDESC_POOLS_MSG 4
- /**< Max number of txdesc sw pools */
+ /**< Maximum number of Tx Descriptor software pools. */
#define NSS_WIFILI_MAX_TX_EXT_DESC_POOLS_MSG 4
- /**< Max number of txdesc ext sw pools */
+ /**< Maximum number of Tx Descriptor Extended software pools. */
#define NSS_WIFILI_MAX_PDEV_NUM_MSG 3
- /**< Max number of pdev devices*/
+ /**< Maximum number of pdev devices. */
+#define NSS_WIFILI_MAX_MCS 12
+ /**< Maximum Modulaton And Coding Scheme (MCS) count. */
+#define NSS_WIFILI_MAX_MCS_11A 8
+ /**< Maximum MCS for 11a mode. */
+#define NSS_WIFILI_MAX_MCS_11B 7
+ /**< Maximum MCS for 11b mode. */
+#define NSS_WIFILI_MAX_MCS_11AC 10
+ /**< Maximum MCS for 11ac mode. */
+#define NSS_WIFILI_MAX_MCS_11AX 10
+ /**< Maximum MCS for 11ax mode. */
+#define NSS_WIFILI_SS_COUNT 8
+ /**< Maximum spatial streams count. */
+#define NSS_WIFILI_SUPPORTED_BW 4
+ /**< Maximum number of bandwidth supported. */
+#define NSS_WIFILI_REPT_MU_MIMO 1
+#define NSS_WIFILI_REPT_MU_OFDMA_MIMO 3
+#define NSS_WIFILI_SUPPORTED_RECEPTION_TYPES 4
+ /**< Maximum supported reception types. */
+#define NSS_WIFILI_SOC_PER_PACKET_METADATA_SIZE 60
+ /**< Metadata area total size. */
+
+/**
+ * nss_wifili_wme_stream_classes
+ * WME stream classes.
+ */
+enum nss_wifili_wme_stream_classes {
+ NSS_WIFILI_WME_AC_BE, /**< Best effort. */
+ NSS_WIFILI_WME_AC_BK, /**< Background. */
+ NSS_WIFILI_WME_AC_VI, /**< Video. */
+ NSS_WIFILI_WME_AC_VO, /**< Voice. */
+ NSS_WIFILI_WME_AC_MAX /**< Maximum AC Value. */
+};
+
+/**
+ * nss_wifili_packet_type
+ * Different Packet Types.
+ */
+enum nss_wifili_packet_type {
+ NSS_WIFILI_DOT11_A, /**< 802.11a packet type. */
+ NSS_WIFILI_DOT11_B, /**< 802.11b packet type. */
+ NSS_WIFILI_DOT11_N, /**< 802.11n packet type. */
+ NSS_WIFILI_DOT11_AC, /**< 802.11ac packet type. */
+ NSS_WIFILI_DOT11_AX , /**< 802.11ax packet type. */
+ NSS_WIFILI_DOT11_MAX /**< Maximum 802.11 packet types. */
+};
/**
* nss_wifili_msg_types
- * nss_wifili messages
+ * NSS wifili messages.
*/
enum nss_wifili_msg_types {
- NSS_WIFILI_INIT_MSG = 0,
+ NSS_WIFILI_INIT_MSG,
NSS_WIFILI_SOC_RESET_MSG,
NSS_WIFILI_PDEV_INIT_MSG,
NSS_WIFILI_PDEV_DEINIT_MSG,
@@ -55,454 +102,569 @@
NSS_WIFILI_PEER_FREELIST_APPEND_MSG,
NSS_WIFILI_STATS_MSG,
NSS_WIFILI_WDS_VENDOR_MSG,
+ NSS_WIFILI_PEER_STATS_MSG,
NSS_WIFILI_MAX_MSG
};
/**
- * wifili_error_types
- * wifili msg error types
+ * nss_wifili_error_types
+ * Wifili error message types for functions.
*/
-enum wifili_error_types {
- NSS_WIFILI_EMSG_NONE = 0,
- /**< no error */
+enum nss_wifili_error_types {
+ NSS_WIFILI_EMSG_NONE,
+ /**< No error. */
NSS_WIFILI_EMSG_RINGS_INIT_FAIL,
- /**< device ring initialization fail */
+ /**< Device ring initialization failure. */
NSS_WIFILI_EMSG_PDEV_INIT_IMPROPER_STATE_FAIL,
- /**< radio init fail due to improper state of device */
+ /**< Radio initialization failure due to improper state of device. */
NSS_WIFILI_EMSG_PDEV_INIT_INVALID_RADIOID_FAIL,
- /**< radio init failed due to invalid radio id */
+ /**< Radio initialization failed due to invalid radio ID. */
NSS_WIFILI_EMSG_PDEV_RESET_INVALID_RADIOID_FAIL,
- /**< radio reset failed due to invalid radio id */
+ /**< Radio reset failed due to invalid radio ID. */
NSS_WIFILI_EMSG_START_IMPROPER_STATE_FAIL,
- /**< device start fail due to improper state */
+ /**< Device start failure due to improper state. */
NSS_WIFILI_EMSG_PEER_CREATE_FAIL,
- /**< peed creat fail */
+ /**< Peer creation failure. */
NSS_WIFILI_EMSG_PEER_DELETE_FAIL,
- /**< peer delete fail */
+ /**< Peer delete failure. */
NSS_WIFILI_EMSG_HASHMEM_INIT_FAIL,
- /**< peer hash mem init fail */
+ /**< Peer hash memory initialization failure. */
NSS_WIFILI_EMSG_PEER_FREELIST_APPEND_FAIL,
- /**< peer freelist append fail*/
+ /**< Peer freelist append failure. */
NSS_WIFILI_EMSG_PEER_CREATE_INVALID_VDEVID_FAIL,
- /**< peer create fail due to invalide vdev_id */
+ /**< Peer creation failure due to invalid vdev ID. */
NSS_WIFILI_EMSG_PEER_CREATE_INVALID_PEER_ID_FAIL,
- /**< peer create fail due to invalide peer_id */
+ /**< Peer creation failure due to invalid peer ID. */
NSS_WIFILI_EMSG_PEER_CREATE_VDEV_NULL_FAIL,
- /**< peer create fail due to vdev null */
+ /**< Peer creation failure due to null vdev. */
NSS_WIFILI_EMSG_PEER_CREATE_PDEV_NULL_FAIL,
- /**< peer create fail due to peer null */
+ /**< Peer creation failure due to null peer. */
NSS_WIFILI_EMSG_PEER_CREATE_ALLOC_FAIL,
- /**< peer create fail due to mem alloc fail */
+ /**< Peer creation failure due to memory allocation failure. */
NSS_WIFILI_EMSG_PEER_DELETE_VAPID_INVALID_FAIL,
- /**< peer delete fail due to invalide vdev_id */
+ /**< Peer delete failure due to invalid vdev_ID. */
NSS_WIFILI_EMSG_PEER_DELETE_INVALID_PEERID_FAIL,
- /**< peer delete fail due to invalide peer_id */
+ /**< Peer delete failure due to invalid peer ID. */
NSS_WIFILI_EMSG_PEER_DELETE_VDEV_NULL_FAIL,
- /**< peer delete fail due to vdev null */
+ /**< Peer delete failure due to null vdev. */
NSS_WIFILI_EMSG_PEER_DELETE_PDEV_NULL_FAIL,
- /**< peer create fail due to pdev null */
+ /**< Peer creation failure due to null vdev. */
NSS_WIFILI_EMSG_PEER_DELETE_PEER_NULL_FAIL,
- /**< peer create fail due to peer null */
+ /**< Peer creation failure due to null peer. */
NSS_WIFILI_EMSG_PEER_DELETE_PEER_CORRUPTED_FAIL,
- /**< peer create fail due to corrupted peer */
+ /**< Peer creation failure due to corrupted peer. */
NSS_WIFILI_EMSG_GROUP0_TIMER_ALLOC_FAIL,
- /**< timer alloc fail */
+ /**< Timer allocation failure. */
NSS_WIFILI_EMSG_INSUFFICIENT_WT_FAIL,
- /**< insufficient worker thread error */
+ /**< Insufficient worker thread error. */
NSS_WIFILI_EMSG_INVALID_NUM_TCL_RING_FAIL,
- /**< invlalid number of tcl ring provided in init msg */
+ /**< Invlalid number of Transmit Classifier ring provided in initialization message. */
NSS_WIFILI_EMSG_INVALID_NUM_REO_DST_RING_FAIL,
- /**< invalid number of reo dst ring in init msg */
+ /**< Invalid number of reorder destination ring in initialization message. */
NSS_WIFILI_EMSG_HAL_SRNG_SOC_ALLOC_FAIL,
- /**< srng soc memory allocation failure */
+ /**< Srng SoC memory allocation failure. */
NSS_WIFILI_EMSG_HAL_TCL_SRNG_ALLOC_FAIL,
- /**< tcl srng ring alloc fail */
+ /**< Transmit Classifier srng ring allocation failure. */
NSS_WIFILI_EMSG_HAL_TXCOMP_SRNG_ALLOC_FAIL,
- /**< txcomp srng ring alloc fail */
+ /**< Txcomp srng ring allocation failure. */
NSS_WIFILI_EMSG_HAL_REODST_SRNG_ALLOC_FAIL,
- /**< reo dst srng ring alloc fail */
+ /**< Reorder destination srng ring allocation failure. */
NSS_WIFILI_EMSG_HAL_REOREINJECT_SRNG_ALLOC_FAIL,
- /**< reo reinject srng ring alloc fail */
+ /**< Reorder reinject srng ring allocation failure. */
NSS_WIFILI_EMSG_HAL_RXRELEASE_SRNG_ALLOC_FAIL,
- /**< rx release srng ring alloc fail */
+ /**< Rx release srng ring allocation failure. */
NSS_WIFILI_EMSG_HAL_RXEXCP_SRNG_ALLOC_FAIL,
- /**< rx exception srng ring alloc fail */
+ /**< Rx exception srng ring allocation failure. */
NSS_WIFILI_EMSG_HAL_TX_MEMALLOC_FAIL,
- /**< tx hal srng ring alloc fail */
+ /**< Tx hal (hardware Abstraction Layer) srng ring allocation failure. */
NSS_WIFILI_EMSG_HAL_TX_INVLID_POOL_NUM_FAIL,
- /**< invalid pool num in init msg */
+ /**< Invalid pool number in initialization message. */
NSS_WIFILI_EMSG_HAL_TX_INVALID_PAGE_NUM_FAIL,
- /**< invalid page num in init msg */
+ /**< Invalid page numner in initialization message. */
NSS_WIFILI_EMSG_HAL_TX_DESC_MEM_ALLOC_FAIL,
- /**< tx desc mem allocation fail */
+ /**< Tx descriptor memory allocation failure. */
NSS_WIFILI_EMSG_HAL_RX_MEMALLOC_FAIL,
- /**< rx memalloc fail */
+ /**< Rx memory allocation failure. */
NSS_WIFILI_EMSG_UNKNOWN
- /**< unknown error message */
+ /**< Unknown error message. */
};
/**
- * wifili_soc_extended_data_types
- * enumeration of extended data type to host
+ * nss_wifili_soc_extended_data_types
+ * Enumeration of extended data type to host.
*/
-enum wifili_soc_extended_data_types {
- WIFILI_SOC_EXT_DATA_PKT_TYPE_NONE,
- WIFILI_SOC_EXT_DATA_PKT_MSDU_LINK_DESC,
- WIFILI_SOC_EXT_DATA_PKT_TYPE_MAX
+enum nss_wifili_soc_extended_data_types {
+ WIFILI_SOC_EXT_DATA_PKT_TYPE_NONE, /**< Packet type is none. */
+ WIFILI_SOC_EXT_DATA_PKT_MSDU_LINK_DESC, /**< Packet type is MSDU link desctriptor. */
+ WIFILI_SOC_EXT_DATA_PKT_INVALID_PEER, /**< Packet type is Invalid peer. */
+ WIFILI_SOC_EXT_DATA_PKT_TYPE_MAX /**< Maximum extended data types. */
};
/**
* nss_wifili_hal_srng_info
- * wifili hal srng info
+ * Wifili hal srng information.
*/
struct nss_wifili_hal_srng_info{
uint8_t ring_id;
- /**< ring id */
+ /**< Ring ID. */
uint8_t mac_id;
- /**< pdev id */
+ /**< Pdev ID. */
uint8_t resv[2];
uint32_t ring_base_paddr;
- /**< physical base address of the ring */
+ /**< Physical base address of the ring. */
uint32_t num_entries;
- /**< number of entries in ring */
- uint32_t flags; /**< misc flags */
+ /**< Number of entries in ring. */
+ uint32_t flags; /**< Miscellaneous flags. */
uint32_t ring_dir;
- /**< ring direction: source or dest */
+ /**< Ring direction: source or destination. */
uint32_t entry_size;
- /**< ring entry size */
+ /**< Ring entry size. */
uint32_t low_threshold;
- /**< Low threshold – in number of ring entries (valid for src rings only) */
+ /**< Low threshold – in number of ring entries (valid for source rings only). */
uint32_t hwreg_base[NSS_WIFILI_MAX_SRNG_REG_GROUPS_MSG];
- /**< hw ring base address */
+ /**< Hardware ring base address. */
};
/**
* nss_wifili_hal_srng_soc_msg
- * wifi li hal srng message
+ * Wifili hal srng message.
*/
struct nss_wifili_hal_srng_soc_msg {
uint32_t dev_base_addr;
- /**< base address of wlan dev */
+ /**< Base address of wlan dev. */
uint32_t shadow_rdptr_mem_addr;
- /**< shadow rdptr address */
+ /**< Shadow read pointer address. */
uint32_t shadow_wrptr_mem_addr;
- /**< shadow wrptr address */
+ /**< Shadow write pointer address. */
};
/**
* nss_wifili_tx_desc_init_msg
- * wifi li software desc pool init msg
+ * Wifili software descriptor pool initialization message.
*/
struct nss_wifili_tx_desc_init_msg {
uint32_t num_tx_desc;
- /**< count of the sw descriptors */
+ /**< Count of the software descriptors. */
uint32_t num_tx_desc_ext;
- /**< count of sw extention descriptors */
+ /**< Count of software extented descriptors. */
uint32_t num_pool;
- /**< number of descriptor pools */
+ /**< Number of descriptor pools. */
uint32_t memory_addr[NSS_WIFILI_MAX_NUMBER_OF_PAGE_MSG];
- /**< memory start address of each page */
+ /**< Memory start address of each page. */
uint32_t memory_size[NSS_WIFILI_MAX_NUMBER_OF_PAGE_MSG];
- /**< memory size */
+ /**< Memory size. */
uint32_t num_memaddr;
- /**< number of mem address */
+ /**< Number of memory address. */
uint32_t ext_desc_page_num;
- /**< ext_desc_page number */
+ /**< Extended descriptor page number. */
};
/**
* nss_wifili_init_msg
- * Lithium soc init msg
+ * Wifili SoC initialization message.
*/
struct nss_wifili_init_msg {
struct nss_wifili_hal_srng_soc_msg hssm;
uint8_t num_tcl_data_rings;
- /**< number of tcl data rings */
+ /**< Number of Transmit Classifier data rings. */
uint8_t num_reo_dest_rings;
- /**< number of reo rings */
+ /**< Number of reorder rings. */
uint8_t resv[2];
- /**< reserve for alignment */
+ /**< Reserve for alignment. */
struct nss_wifili_hal_srng_info tcl_ring_info[NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG];
- /**< tcl data ring config info */
+ /**< Transmit Classifier data ring configuration information. */
struct nss_wifili_hal_srng_info tx_comp_ring[NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG];
- /**< tx completion ring config info */
+ /**< Tx completion ring configuration information. */
struct nss_wifili_hal_srng_info reo_dest_ring[NSS_WIFILI_MAX_REO_DATA_RINGS_MSG];
- /**< reo destination ring config info */
+ /**< Reorder destination ring configuration information. */
struct nss_wifili_hal_srng_info reo_exception_ring;
- /**< reo exception ring config info */
+ /**< Reorder exception ring configuration information. */
struct nss_wifili_hal_srng_info rx_rel_ring;
- /**< wbm release ring config info */
+ /**< WBM (Wireless Buffer manager) release ring configuration information. */
struct nss_wifili_hal_srng_info reo_reinject_ring;
- /**< reinject ring config info */
+ /**< Reinject ring configuration information. */
struct nss_wifili_tx_desc_init_msg wtdim;
- /**< tx descriptor init message */
+ /**< Tx descriptor initialization message. */
};
/**
* nss_wifili_pdev_deinit_msg
- * li pdev deinit msg
+ * Wifili pdev deinit message.
*/
struct nss_wifili_pdev_deinit_msg {
- uint32_t ifnum; /**< nss ifnum of pdev */
+ uint32_t ifnum; /**< NSS interface number of pdev. */
};
/**
* nss_wifili_pdev_init_msg
- * li pdev init msg
+ * Wifili pdev initialization message.
*/
struct nss_wifili_pdev_init_msg {
struct nss_wifili_hal_srng_info rxdma_ring;
- /**< mac ring configuration */
+ /**< MAC (Media Access Point) ring configuration. */
uint32_t radio_id;
- /**< mac radio id */
+ /**< MAC radio ID. */
uint32_t hwmode;
- /**< mac hw mode */
+ /**< MAC hardware mode. */
};
/**
* nss_wifili_peer_msg
- * wifili peer create message.
+ * Wifili peer creation message.
*/
struct nss_wifili_peer_msg {
uint8_t peer_mac_addr[6];
- /**< peer mac address */
+ /**< Peer MAC address. */
uint16_t vdev_id;
- /**< vap id */
+ /**< VAP ID. */
uint16_t peer_id;
- /**< peer id */
+ /**< Peer ID. */
uint16_t hw_ast_idx;
- /**< hw address search table index */
+ /**< Hardware address search table index. */
uint8_t is_nawds;
- /**< is NAWDS enabled for peer */
+ /**< NAWDS enabled for peer. */
};
/**
* nss_wifili_peer_freelist_append_msg
- * peer memory request
+ * Peer memory request.
*/
struct nss_wifili_peer_freelist_append_msg {
uint32_t addr;
- /**< starting address of peer_freelist pool */
+ /**< Starting address of peer_freelist pool. */
uint32_t length;
- /**< length of peer_freelist pool */
+ /**< Length of peer freelist pool. */
uint32_t num_peers;
- /**< max number of peer entries supported in pool */
+ /**< Maximum number of peer entries supported in pool. */
};
/**
* nss_wifili_tx_stats
- * tx statistics
+ * Tx statistics.
*/
struct nss_wifili_tx_stats {
uint32_t tx_enqueue_dropped;
- /**< tx enqueue drop count */
+ /**< Tx enqueue drop count. */
uint32_t tx_enqueue_cnt;
- /**< tx enqueue succesful count */
+ /**< Tx enqueue succesful count. */
uint32_t tx_dequeue_cnt;
- /**< tx dequeue count */
+ /**< Tx dequeue count. */
uint32_t tx_send_fail_cnt;
- /**< hw send fail count */
+ /**< Hardware send failure count. */
uint32_t inv_peer;
- /**< invalid peer enqueue count */
+ /**< Invalid peer enqueue count. */
uint32_t inv_peer_drop_byte_cnt;
- /**< invalid peer drop byte count */
+ /**< Invalid peer drop byte count. */
uint32_t tx_input_pkt;
- /**< tx packets ready to sent */
+ /**< Tx packets ready to sent. */
uint32_t tx_processed_pkt;
- /**< tx no of packets sent */
+ /**< Tx numner of packets sent. */
uint32_t tx_processed_bytes;
- /**< tx no of bytes processed */
+ /**< Tx number of bytes processed. */
};
-/*
+/**
* nss_wifili_rx_stats
- * rx statistics
+ * Rx statistics.
*/
struct nss_wifili_rx_stats {
uint32_t rx_msdu_err;
- /**< rx msdu error count */
+ /**< Rx msdu error count. */
uint32_t rx_inv_peer;
- /**< rx invalid peer count */
+ /**< Rx invalid peer count. */
uint32_t rx_scatter_inv_peer;
- /**< rx scatter invalid peer count */
+ /**< Rx scatter invalid peer count. */
uint32_t rx_wds_learn_send;
- /**< wds src port learn packet */
+ /**< WDS source port learn packet. */
uint32_t rx_wds_learn_send_fail;
- /**< wds src port learn exception send fail cnt */
+ /**< WDS source port learn exception send failure count. */
uint32_t rx_send_dropped;
- /**< rx send dropped count */
+ /**< Rx send dropped count. */
uint32_t rx_deliver_cnt;
- /**< rx deliver count to next node */
+ /**< Rx deliver count to next node. */
uint32_t rx_deliver_cnt_fail;
- /**< rx deliver count fail*/
+ /**< Rx deliver count failure. */
uint32_t rx_intra_bss_ucast_send;
- /**< intrabss unicast sent count */
+ /**< Intra-BSS unicast sent count. */
uint32_t rx_intra_bss_ucast_send_fail;
- /**< intrabss unicast send fail count */
+ /**< Intra-BSS unicast send failure count. */
uint32_t rx_intra_bss_mcast_send;
- /**< intrabss mcast send count */
+ /**< Intra-BSS mcast send count. */
uint32_t rx_intra_bss_mcast_send_fail;
- /**< intrabss mcast send fail count */
+ /**< Intra-BSS mcast send failure count. */
uint32_t rx_sg_recv_send;
- /**< rx sg receive send count */
+ /**< Rx scatter-gather receive send count. */
uint32_t rx_sg_recv_fail;
- /**< rx sg receive fail count */
+ /**< Rx scatter-gather receive failure count. */
};
/**
* nss_wifili_tx_tcl_ring_stats
- * tcl ring specific statistics;
+ * Transmit Classifier ring specific statistics.
*/
struct nss_wifili_tx_tcl_ring_stats {
- uint32_t tcl_no_hw_desc; /**< no of tcl hw descriptors*/
- uint32_t tcl_ring_full; /**< no of times tcl ring full*/
- uint32_t tcl_ring_sent; /**< totall no of ring sent*/
+ uint32_t tcl_no_hw_desc; /**< Number of Transmit Classifier hardware descriptors. */
+ uint32_t tcl_ring_full; /**< Number of times Transmit Classifier ring full. */
+ uint32_t tcl_ring_sent; /**< Total number of ring sent. */
};
/**
* nss_wifili_tx_comp_ring_stats
- * Tx completion ring statistics
+ * Tx completion ring statistics.
*/
struct nss_wifili_tx_comp_ring_stats {
- uint32_t invalid_bufsrc; /**< tx comp ring desc invalid bufsrc */
- uint32_t invalid_cookie; /**< tx com ring desc invalid cookie */
- uint32_t hw_ring_empty; /**< tx comp no comp ring available */
- uint32_t ring_reaped; /**< tx comp successfull ring reaped*/
+ uint32_t invalid_bufsrc; /**< Tx comp (Completion) ring descriptor invalid buffer source. */
+ uint32_t invalid_cookie; /**< Tx comletion ring descriptor has invalid cookies. */
+ uint32_t hw_ring_empty; /**< Tx completion hardware ring empty. */
+ uint32_t ring_reaped; /**< Tx completion successfull ring reaped. */
};
/**
* nss_wifili_tx_sw_pool_stats
- * Tx completion sw stats
+ * Tx completion sw statistics.
*/
struct nss_wifili_tx_sw_pool_stats {
- uint32_t desc_alloc; /**< tx desc sw pool desc in use*/
- uint32_t desc_alloc_fail; /**< tx desc sw pool alloc fail */
- uint32_t desc_already_allocated; /**< tx desc re-alloc for allocated desc */
- uint32_t desc_invalid_free; /**< tx desc freeing of allocated desc */
- uint32_t tx_rel_src_fw; /**< tx desc src is fw */
- uint32_t tx_rel_ext_desc; /**< tx desc sg */
- uint32_t tx_rel_tx_desc; /**< tx desc src is hw*/
- uint32_t tx_rel_no_pb; /**< tx desc has pbuf present */
+ uint32_t desc_alloc; /**< Tx descriptor software pool descriptor in use. */
+ uint32_t desc_alloc_fail; /**< Tx descriptor software pool allocation failure . */
+ uint32_t desc_already_allocated; /**< Tx descriptor re-allocation for allocated descriptor. */
+ uint32_t desc_invalid_free; /**< Tx descriptor freeing of allocated descriptor. */
+ uint32_t tx_rel_src_fw; /**< Tx descriptor source is firmware. */
+ uint32_t tx_rel_ext_desc; /**< Tx descriptor scatter-gather. */
+ uint32_t tx_rel_tx_desc; /**< Tx descriptor source is hardware*/
+ uint32_t tx_rel_no_pb; /**< Tx descriptor has pbuf present. */
};
-/*
+/**
* wifili_tx_ext_sw_pool_stats
- * Tx ext desc pool
+ * Tx extended descriptor pool.
*/
struct nss_wifili_tx_ext_sw_pool_stats {
- uint32_t desc_alloc; /**< tx ext(sg) desc in use */
- uint32_t desc_alloc_fail; /**< tx ext desc alloc fail */
- uint32_t desc_already_allocated; /**< tx ext desc already allocated */
- uint32_t desc_invalid_free; /**< tx desc invalid src */
+ uint32_t desc_alloc; /**< Tx extend (scatter gather) descriptor in use. */
+ uint32_t desc_alloc_fail; /**< Tx extend descriptor allocation failure. */
+ uint32_t desc_already_allocated; /**< Tx extend descriptor already allocated. */
+ uint32_t desc_invalid_free; /**< Tx descriptor invalid source. */
};
/**
* nss_wifili_rx_wbm_ring_stats
- * wbm release ring statistics
+ * WBM (Wireless Buffer Manager) release ring statistics.
*/
struct nss_wifili_rx_wbm_ring_stats {
- uint32_t invalid_buf_mgr; /**< wbm invalid buffer manager */
- uint32_t err_src_rxdma; /**< wbm src is rdma ring */
- uint32_t err_src_rxdma_code_inv; /**< wbm src dma reason unknown */
- uint32_t err_src_reo; /**< wbm src is reo */
- uint32_t err_src_reo_code_nullq; /**< wbm src reo because of null tlv */
- uint32_t err_src_reo_code_inv; /**< wbm src reo reason unknown */
- uint32_t err_src_invalid; /**< wbm src is unknown */
+ uint32_t invalid_buf_mgr; /**< Invalid buffer manager. */
+ uint32_t err_src_rxdma; /**< WBM source is rdma ring. */
+ uint32_t err_src_rxdma_code_inv; /**< WBM source DMA reason unknown. */
+ uint32_t err_src_reo; /**< WBM source is reorder ring. */
+ uint32_t err_src_reo_code_nullq; /**< WBM source reorder ring because of null tlv. */
+ uint32_t err_src_reo_code_inv; /**< WBM source reorder ring reason unknown. */
+ uint32_t err_src_invalid; /**< WBM source is unknown. */
};
/**
* nss_wifili_rx_reo_ring_stats
- * reo error statistics
+ * Reorder error statistics.
*/
struct nss_wifili_rx_reo_ring_stats {
- uint32_t ring_error; /**< reo ring error*/
- uint32_t ring_reaped; /**< no of ring desc reaped */
- uint32_t invalid_cookie; /**< no of invalid cookie */
+ uint32_t ring_error; /**< Reorder ring error. */
+ uint32_t ring_reaped; /**< Number of ring descriptor reaped. */
+ uint32_t invalid_cookie; /**< Number of invalid cookie. */
};
/**
* nss_wifili_rx sw_pool_stats
- * nss_wifoli dma sw pool stats
+ * Wifili DMA sw pool statistics.
*/
struct nss_wifili_rx_sw_pool_stats {
- uint32_t rx_no_pb; /**< rx sw desc no buff avail */
- uint32_t desc_alloc; /**< no of desc in use */
- uint32_t desc_alloc_fail; /**< no of desc alloc fail */
+ uint32_t rx_no_pb; /**< Rx software descriptor number of buffer available. */
+ uint32_t desc_alloc; /**< Number of descriptor in use. */
+ uint32_t desc_alloc_fail; /**< Number of descriptor allocation failure. */
};
-/*
- * wifili rx dma ring stats
- * nss_wifli dma ring statistics
+/**
+ * nss_wifili_rx_dma_ring_stats
+ * Wifili Rx DMA ring statistics.
*/
struct nss_wifili_rx_dma_ring_stats {
- uint32_t rx_hw_desc_unavailable; /**< no of times hw desc is unavailable */
+ uint32_t rx_hw_desc_unavailable; /**< Number of times hardware descriptor is unavailable. */
};
/**
* nss_wifili_device_stats
- * wifili device specific stats
+ * Wifili specific statistics.
*/
struct nss_wifili_device_stats {
struct nss_wifili_tx_tcl_ring_stats tcl_stats[NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG];
- /**< tcl ring stats */
+ /**< Transmit Classifier ring statistics. */
struct nss_wifili_tx_comp_ring_stats txcomp_stats[NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG];
- /**< tx comp ring stats*/
+ /**< Tx completion ring stats. */
struct nss_wifili_tx_sw_pool_stats tx_sw_pool_stats[NSS_WIFILI_MAX_TXDESC_POOLS_MSG];
- /**< tx sw pool stats */
+ /**< Tx software pool statistics. */
struct nss_wifili_tx_ext_sw_pool_stats tx_ext_sw_pool_stats[NSS_WIFILI_MAX_TX_EXT_DESC_POOLS_MSG];
- /**< tx ext ext sw pool stats */
+ /**< Tx extended software pool statistics. */
struct nss_wifili_tx_stats tx_data_stats[NSS_WIFILI_MAX_PDEV_NUM_MSG];
- /**< tx data stats for each pdev */
+ /**< Tx data statistics for each pdev. */
struct nss_wifili_rx_reo_ring_stats rxreo_stats[NSS_WIFILI_MAX_REO_DATA_RINGS_MSG];
- /**< rx reo ring stats */
+ /**< Rx reorder ring statistics. */
struct nss_wifili_rx_sw_pool_stats rx_sw_pool_stats[NSS_WIFILI_MAX_PDEV_NUM_MSG];
- /**< rx dma sw pool stats */
+ /**< Rx DMA software pool statistics. */
struct nss_wifili_rx_stats rx_data_stats[NSS_WIFILI_MAX_PDEV_NUM_MSG];
- /**< rx data stats for each pdev */
+ /**< Rx data statistics for each pdev. */
struct nss_wifili_rx_dma_ring_stats rxdma_stats[NSS_WIFILI_MAX_PDEV_NUM_MSG];
- /**< rx dma ring stats */
+ /**< Rx DMA ring statistics. */
struct nss_wifili_rx_wbm_ring_stats rxwbm_stats;
- /**< wbm ring stats */
+ /**< WBM ring statistics. */
};
/**
* nss_wifili_stats_sync_msg
- * li stats sync msg
+ * Wifili SoC statistics synchronization message.
*/
struct nss_wifili_stats_sync_msg {
struct nss_wifili_device_stats stats;
- /**< device statistics */
+ /**< Device statistics. */
};
/**
- * wifili_soc_linkdesc_per_packet_metadata
- * linkdesc per packet metadata
+ * nss_wifili_soc_linkdesc_per_packet_metadata
+ * Link descriptor per packet metadata.
*/
-struct wifili_soc_linkdesc_per_packet_metadata
+struct nss_wifili_soc_linkdesc_per_packet_metadata
{
- uint32_t desc_addr; /**< link descriptor address */
+ uint32_t desc_addr; /**< Link descriptor address. */
};
/**
- * wifili_soc_per_packet_metadata
- * Per packet special data that has to be sent to host
+ * nss_wifili_soc_per_packet_metadata
+ * Per packet special data that has to be sent to host.
*/
-struct wifili_soc_per_packet_metadata {
+struct nss_wifili_soc_per_packet_metadata {
uint32_t pkt_type;
union {
- struct wifili_soc_linkdesc_per_packet_metadata linkdesc_metadata;
+ struct nss_wifili_soc_linkdesc_per_packet_metadata linkdesc_metadata;
} metadata;
};
/**
+ * nss_wifili_tx_mcs
+ * Peer MCS count.
+ */
+struct nss_wifili_tx_mcs {
+ uint32_t mcs_count[NSS_WIFILI_MAX_MCS + 1]; /**< MCS count. */
+};
+
+/**
+ * Packets dropped on the Tx side
+ * Tx peer dropped packets.
+ */
+struct nss_wifili_tx_dropped {
+ uint32_t dma_map_error; /**< Discarded by firmware. */
+ uint32_t ring_full; /**< Dropped due to ring full. */
+ uint32_t fw_discard; /**< Discarded by firmware. */
+ uint32_t fw_discard_retired; /**< Firmware discard retired. */
+ uint32_t fw_discard_untransmitted; /**< Firmware discard untransmitted. */
+ uint32_t mpdu_age_out; /**< Number of PDU aged out. */
+ uint32_t fw_discard_reason1; /**< Firmware discarded PDU reason 1. */
+ uint32_t fw_discard_reason2; /**< Firmware discarded PDU reason 2. */
+ uint32_t fw_discard_reason3; /**< Firmware discarded PDU reason 3. */
+};
+
+/**
+ * nss_wifili_tx_ctrl_stats
+ * Tx peer statistics.
+ */
+struct nss_wifili_tx_ctrl_stats {
+ uint32_t tx_failed; /**< Total Tx failure. */
+ uint32_t ofdma; /**< Total number of OFDMA packets. */
+ uint32_t stbc; /**< Packets in STBC. */
+ uint32_t ldpc; /**< Packets in LDPC. */
+ uint32_t retries; /**< Packet retries. */
+ uint32_t non_amsdu_cnt; /**< Number of MSDUs with no MSDU level aggregation. */
+ uint32_t amsdu_cnt; /**< Number of MSDUs part of AMSDU. */
+ uint32_t last_ack_rssi; /**< RSSI of last packet. */
+
+ struct nss_wifili_tx_mcs pkt_type[NSS_WIFILI_DOT11_MAX]; /**< MCS count. */
+ uint32_t sgi_count[NSS_WIFILI_MAX_MCS + 1]; /**< SGI count. */
+ uint32_t bw[NSS_WIFILI_SUPPORTED_BW]; /**< Packet Count for different bandwidths. */
+ uint32_t wme_ac_type[NSS_WIFILI_WME_AC_MAX]; /**< Wireless Multimedia type Count. */
+ uint32_t excess_retries_ac[NSS_WIFILI_WME_AC_MAX]; /**< Wireless Multimedia type Count. */
+ struct nss_wifili_tx_dropped dropped; /**< Tx peer dropped. */
+ uint32_t complete_pkt; /**< Complete packet count. */
+ uint32_t complete_byte; /**< Complete byte count. */
+ uint32_t failed; /**< Failed packet count. */
+ uint32_t success; /**< Success packet count. */
+ uint32_t success_bytes; /**< Success bytes count. */
+};
+
+/**
+ * nss_wifili_peer_rx_err
+ * Rx peer errors.
+ */
+struct nss_wifili_rx_err {
+ uint32_t mic_err; /**< Rx MIC errors. */
+ uint32_t decrypt_err; /**< Rx Decryption errors. */
+};
+
+/**
+ * nss_wifili_rx_ctrl_stats
+ * Peer Rx statistics.
+ */
+struct nss_wifili_rx_ctrl_stats {
+ struct nss_wifili_rx_err err; /**< Rx peer errors. */
+ uint32_t wme_ac_type[NSS_WIFILI_WME_AC_MAX]; /**< Wireless Multimedia type Count. */
+ uint32_t reception_type[NSS_WIFILI_SUPPORTED_RECEPTION_TYPES]; /**< Reception type OS packets. */
+ uint32_t mcs_count[NSS_WIFILI_MAX_MCS + 1]; /**< Packets in different MCS rates. */
+ uint32_t sgi_count[NSS_WIFILI_MAX_MCS + 1]; /**< SGI count. */
+ uint32_t nss[NSS_WIFILI_SS_COUNT]; /**< Packet count in spatiel Streams. */
+ uint32_t bw[NSS_WIFILI_SUPPORTED_BW]; /**< Packet Count in different bandwidths. */
+ uint32_t non_ampdu_cnt; /**< Number of MSDUs with no MPDU level aggregation. */
+ uint32_t ampdu_cnt; /**< Number of MSDUs part of AMPDU. */
+ uint32_t non_amsdu_cnt; /**< Number of MSDUs with no MSDU level aggregation. */
+ uint32_t amsdu_cnt; /**< Number of MSDUs part of AMSDU. */
+ uint32_t mcast_rcv_cnt; /**< Total number of mcast packets received. */
+ uint32_t ucast_rcv_cnt; /**< Unicast received count. */
+ uint32_t rx_recvd; /**< Total Rx received count. */
+};
+
+/**
+ * nss_wifili_peer_ctrl_stats
+ * Wifili peer control statistics.
+ */
+struct nss_wifili_peer_ctrl_stats {
+ uint32_t peer_id; /**< Peer ID. */
+ struct nss_wifili_tx_ctrl_stats tx;
+ /**< Peer Tx control statistics. */
+ struct nss_wifili_rx_ctrl_stats rx;
+ /**< Peer Rx control statistics. */
+};
+
+/**
+ * nss_wifili peer stats
+ * Wifili peer statistics.
+ */
+struct nss_wifili_peer_stats {
+ uint32_t npeers; /**< Number of entries of peer statistics. */
+ struct nss_wifili_peer_ctrl_stats wpcs[1];
+ /**< Wifili peer control statistics. */
+};
+
+/**
+ * wifili_peer_stats_msg
+ * Wifili peer statistics message.
+ */
+struct nss_wifili_peer_stats_msg {
+ struct nss_wifili_peer_stats stats;
+ /**< Wifili peer statistics. */
+};
+
+
+/**
* nss_wifili_msg
- * Structure that describes wifi li messages
+ * Structure that describes wifili messages.
*/
struct nss_wifili_msg {
- struct nss_cmn_msg cm; /**< Common message Header */
+ struct nss_cmn_msg cm; /**< Common message header. */
union {
struct nss_wifili_init_msg init;
/**< Wi-Fi initialization data. */
@@ -516,19 +678,21 @@
/**< Information for creating a peer freelist. */
struct nss_wifili_stats_sync_msg wlsoc_stats;
/**< Synchronization statistics. */
+ struct nss_wifili_peer_stats_msg peer_stats;
+ /**< Wifili peer statistics. */
} msg;
};
/**
* nss_wifili_tx_msg
- * Send wifili messages
+ * Send wifili messages.
*
* @datatypes
* nss_ctx_instance \n
* nss_wifili_msg
*
* @param[in] nss_ctx NSS context.
- * @param[in] msg NSS wifi message.
+ * @param[in] msg NSS Wi-Fi message.
*
* @return
* nss_tx_status_t Tx status
@@ -537,7 +701,7 @@
/**
* nss_wifili_msg_callback_t
- * Callback to receive wifili messages
+ * Callback to receive wifili messages.
*
* @datatypes
* nss_wifili_msg
@@ -552,7 +716,7 @@
/**
* nss_wifili_callback_t
- * Callback to receive wifi data
+ * Callback to receive Wi-Fi data.
*
* @datatypes
* net_device \n
@@ -571,7 +735,7 @@
/**
* nss_register_wifili_if
- * Register to send/receive wifi li soc messages to NSS
+ * Register to send/receive wifili SoC messages to NSS.
*
* @datatypes
* nss_wifili_callback_t \n
@@ -594,7 +758,7 @@
/**
* nss_unregister_wifili_if
- * Unregister wifi li soc interface with NSS
+ * Deregister wifili SoC interface with NSS.
*
* @param[in] if_num NSS interface number
*
@@ -605,7 +769,7 @@
/**
* nss_register_wifili_radio_if
- * Register to send/receive wifi li radio messages to NSS
+ * Register to send/receive wifili radio messages to NSS.
*
* @datatypes
* nss_wifili_callback_t \n
@@ -628,7 +792,7 @@
/**
* nss_unregister_wifili_radio_if
- * Unregister wifi li radio interface with NSS
+ * Deregister wifili radio interface with NSS.
*
* @param[in] if_num NSS interface number
*
diff --git a/nss_core.c b/nss_core.c
index 2395be1..b4a7f4a 100644
--- a/nss_core.c
+++ b/nss_core.c
@@ -1577,16 +1577,9 @@
return NSS_N2H_INTR_DATA_QUEUE_3;
}
- if (cause & NSS_N2H_INTR_COREDUMP_COMPLETE_0) {
- printk("NSS core 0 signal COREDUMP COMPLETE %x ", cause);
+ if (cause & NSS_N2H_INTR_COREDUMP_COMPLETE) {
*type = NSS_INTR_CAUSE_EMERGENCY;
- return NSS_N2H_INTR_COREDUMP_COMPLETE_0;
- }
-
- if (cause & NSS_N2H_INTR_COREDUMP_COMPLETE_1) {
- printk("NSS core 1 signal COREDUMP COMPLETE %x\n", cause);
- *type = NSS_INTR_CAUSE_EMERGENCY;
- return NSS_N2H_INTR_COREDUMP_COMPLETE_1;
+ return NSS_N2H_INTR_COREDUMP_COMPLETE;
}
return 0;
@@ -1648,6 +1641,8 @@
break;
case NSS_INTR_CAUSE_EMERGENCY:
+ nss_info_always("NSS core %d signal COREDUMP COMPLETE %x\n",
+ nss_ctx->id, int_ctx->cause);
nss_fw_coredump_notify(nss_ctx, prio_cause);
int_ctx->cause &= ~prio_cause;
break;
@@ -1677,6 +1672,22 @@
}
/*
+ * nss_core_handle_napi_emergency()
+ * NAPI handler for NSS crash
+ */
+int nss_core_handle_napi_emergency(struct napi_struct *napi, int budget)
+{
+ struct netdev_priv_instance *ndev_priv = netdev_priv(napi->dev);
+ struct int_ctx_instance *int_ctx = ndev_priv->int_ctx;
+
+ nss_info_always("NSS core %d signal COREDUMP COMPLETE %x\n",
+ int_ctx->nss_ctx->id, int_ctx->cause);
+ nss_fw_coredump_notify(int_ctx->nss_ctx, 0);
+
+ return 0;
+}
+
+/*
* nss_core_handle_napi_queue()
* NAPI handler for NSS queue cause
*/
diff --git a/nss_core.h b/nss_core.h
index a68d76d..428fb82 100644
--- a/nss_core.h
+++ b/nss_core.h
@@ -163,7 +163,7 @@
*/
#if defined(NSS_HAL_IPQ807x_SUPPORT)
#define NSS_MAX_IRQ_PER_INSTANCE 4
-#define NSS_MAX_IRQ_PER_CORE 7
+#define NSS_MAX_IRQ_PER_CORE 8
#else
#define NSS_MAX_IRQ_PER_INSTANCE 1
#define NSS_MAX_IRQ_PER_CORE 2
@@ -200,6 +200,10 @@
#define NSS_FREQ_110_MIN 0x03000 /* Instructions Per ms Min */
#define NSS_FREQ_110_MAX 0x07000 /* Instructions Per ms Max */
+#define NSS_FREQ_187 187200000 /* Frequency in hz */
+#define NSS_FREQ_187_MIN 0x03000 /* Instructions Per ms Min */
+#define NSS_FREQ_187_MAX 0x07000 /* Instructions Per ms Max */
+
#define NSS_FREQ_275 275000000 /* Frequency in hz */
#define NSS_FREQ_275_MIN 0x03000 /* Instructions Per ms Min */
#define NSS_FREQ_275_MAX 0x07000 /* Instructions Per ms Max */
@@ -216,10 +220,22 @@
#define NSS_FREQ_733_MIN 0x07000 /* Instructions Per ms Min */
#define NSS_FREQ_733_MAX 0x25000 /* Instructions Per ms Max */
+#define NSS_FREQ_748 748800000 /* Frequency in hz */
+#define NSS_FREQ_748_MIN 0x07000 /* Instructions Per ms Min */
+#define NSS_FREQ_748_MAX 0x10000 /* Instructions Per ms Max */
+
#define NSS_FREQ_800 800000000 /* Frequency in hz */
#define NSS_FREQ_800_MIN 0x07000 /* Instructions Per ms Min */
#define NSS_FREQ_800_MAX 0x25000 /* Instructions Per ms Max */
+#define NSS_FREQ_1497 1497600000 /* Frequency in hz */
+#define NSS_FREQ_1497_MIN 0x10000 /* Instructions Per ms Min */
+#define NSS_FREQ_1497_MAX 0x25000 /* Instructions Per ms Max */
+
+#define NSS_FREQ_1689 1689600000 /* Frequency in hz */
+#define NSS_FREQ_1689_MIN 0x10000 /* Instructions Per ms Min */
+#define NSS_FREQ_1689_MAX 0x25000 /* Instructions Per ms Max */
+
#if (NSS_DT_SUPPORT == 1)
#define NSSTCM_FREQ 400000000 /* NSS TCM Frequency in Hz */
@@ -1920,6 +1936,7 @@
extern int nss_core_handle_napi(struct napi_struct *napi, int budget);
extern int nss_core_handle_napi_queue(struct napi_struct *napi, int budget);
extern int nss_core_handle_napi_non_queue(struct napi_struct *napi, int budget);
+extern int nss_core_handle_napi_emergency(struct napi_struct *napi, int budget);
extern int32_t nss_core_send_buffer(struct nss_ctx_instance *nss_ctx, uint32_t if_num,
struct sk_buff *nbuf, uint16_t qid,
uint8_t buffer_type, uint16_t flags);
diff --git a/nss_hal/include/nss_hal.h b/nss_hal/include/nss_hal.h
index 1ac6e20..ec27362 100644
--- a/nss_hal/include/nss_hal.h
+++ b/nss_hal/include/nss_hal.h
@@ -28,6 +28,7 @@
#include <nss_hal_ops.h>
extern struct clk *nss_core0_clk;
+extern struct clk *nss_core1_clk;
extern struct nss_runtime_sampling nss_runtime_samples;
extern struct clk *nss_fab0_clk;
extern struct clk *nss_fab1_clk;
@@ -47,8 +48,7 @@
NSS_N2H_INTR_DATA_QUEUE_1 | \
NSS_N2H_INTR_EMPTY_BUFFERS_SOS | \
NSS_N2H_INTR_TX_UNBLOCKED | \
- NSS_N2H_INTR_COREDUMP_COMPLETE_0 | \
- NSS_N2H_INTR_COREDUMP_COMPLETE_1)
+ NSS_N2H_INTR_COREDUMP_COMPLETE)
/*
* nss_hal_read_interrupt_cause()
diff --git a/nss_hal/include/nss_regs.h b/nss_hal/include/nss_regs.h
index 9af9508..e9b1fdf 100644
--- a/nss_hal/include/nss_regs.h
+++ b/nss_hal/include/nss_regs.h
@@ -66,8 +66,7 @@
#define NSS_N2H_INTR_DATA_QUEUE_3 (1 << 4)
#define NSS_N2H_INTR_EMPTY_BUFFERS_SOS (1 << 10)
#define NSS_N2H_INTR_TX_UNBLOCKED (1 << 11)
-#define NSS_N2H_INTR_COREDUMP_COMPLETE_1 (1 << 13)
-#define NSS_N2H_INTR_COREDUMP_COMPLETE_0 (1 << 14)
+#define NSS_N2H_INTR_COREDUMP_COMPLETE (1 << 14)
/*
* Types of H2N interrupts
diff --git a/nss_hal/ipq807x/nss_hal_pvt.c b/nss_hal/ipq807x/nss_hal_pvt.c
index 61363ba..bb683bd 100644
--- a/nss_hal/ipq807x/nss_hal_pvt.c
+++ b/nss_hal/ipq807x/nss_hal_pvt.c
@@ -398,11 +398,9 @@
*/
static int __nss_hal_clock_configure(struct nss_ctx_instance *nss_ctx, struct platform_device *nss_dev, struct nss_platform_data *npd)
{
- if (nss_hal_clock_set_and_enable(&nss_dev->dev, NSS_NSSNOC_AHB_CLK, 200000000)) {
- return -EFAULT;
- }
+ uint32_t i;
- if (nss_hal_clock_set_and_enable(&nss_dev->dev, NSS_CORE_CLK, 1497600000)) {
+ if (nss_hal_clock_set_and_enable(&nss_dev->dev, NSS_NSSNOC_AHB_CLK, 200000000)) {
return -EFAULT;
}
@@ -422,6 +420,85 @@
return -EFAULT;
}
+ /*
+ * No entries, then just load default
+ */
+ if ((nss_runtime_samples.freq_scale[NSS_FREQ_LOW_SCALE].frequency == 0) ||
+ (nss_runtime_samples.freq_scale[NSS_FREQ_MID_SCALE].frequency == 0) ||
+ (nss_runtime_samples.freq_scale[NSS_FREQ_HIGH_SCALE].frequency == 0)) {
+ nss_runtime_samples.freq_scale[NSS_FREQ_LOW_SCALE].frequency = NSS_FREQ_187;
+ nss_runtime_samples.freq_scale[NSS_FREQ_MID_SCALE].frequency = NSS_FREQ_748;
+ nss_runtime_samples.freq_scale[NSS_FREQ_HIGH_SCALE].frequency = NSS_FREQ_1497;
+ }
+
+ /*
+ * Test frequency from dtsi, if fail, try to set default frequency.
+ */
+ if (nss_hal_clock_set_and_enable(&nss_dev->dev, NSS_CORE_CLK, nss_runtime_samples.freq_scale[NSS_FREQ_HIGH_SCALE].frequency)) {
+ if (nss_hal_clock_set_and_enable(&nss_dev->dev, NSS_CORE_CLK, NSS_FREQ_1497)) {
+ return -EFAULT;
+ }
+ }
+
+ /*
+ * Setup ranges, test frequency, and display.
+ */
+ for (i = 0; i < NSS_FREQ_MAX_SCALE; i++) {
+ if (nss_runtime_samples.freq_scale[i].frequency == NSS_FREQ_187) {
+ nss_runtime_samples.freq_scale[i].minimum = NSS_FREQ_187_MIN;
+ nss_runtime_samples.freq_scale[i].maximum = NSS_FREQ_187_MAX;
+ } else if (nss_runtime_samples.freq_scale[i].frequency == NSS_FREQ_748) {
+ nss_runtime_samples.freq_scale[i].minimum = NSS_FREQ_748_MIN;
+ nss_runtime_samples.freq_scale[i].maximum = NSS_FREQ_748_MAX;
+ } else if (nss_runtime_samples.freq_scale[i].frequency == NSS_FREQ_1497) {
+ nss_runtime_samples.freq_scale[i].minimum = NSS_FREQ_1497_MIN;
+ nss_runtime_samples.freq_scale[i].maximum = NSS_FREQ_1497_MAX;
+ } else if (nss_runtime_samples.freq_scale[i].frequency == NSS_FREQ_1689) {
+ nss_runtime_samples.freq_scale[i].minimum = NSS_FREQ_1689_MIN;
+ nss_runtime_samples.freq_scale[i].maximum = NSS_FREQ_1689_MAX;
+ } else {
+ nss_info_always("Frequency not found %d", nss_runtime_samples.freq_scale[i].frequency);
+ return -EFAULT;
+ }
+
+ /*
+ * Test the frequency, if fail, then default to safe frequency and abort
+ */
+ if (nss_hal_clock_set_and_enable(&nss_dev->dev, NSS_CORE_CLK, nss_runtime_samples.freq_scale[i].frequency)) {
+ return -EFAULT;
+ }
+ }
+
+ nss_info_always("Supported Frequencies - ");
+ for (i = 0; i < NSS_FREQ_MAX_SCALE; i++) {
+ if (nss_runtime_samples.freq_scale[i].frequency == NSS_FREQ_187) {
+ nss_info_always("187 MHz ");
+ } else if (nss_runtime_samples.freq_scale[i].frequency == NSS_FREQ_748) {
+ nss_info_always("748 MHz ");
+ } else if (nss_runtime_samples.freq_scale[i].frequency == NSS_FREQ_1497) {
+ nss_info_always("1.4976 GHz ");
+ } else if (nss_runtime_samples.freq_scale[i].frequency == NSS_FREQ_1689) {
+ nss_info_always("1.689 GHz ");
+ } else {
+ nss_info_always("Error\nNo Table/Invalid Frequency Found");
+ return -EFAULT;
+ }
+ }
+ nss_info_always("\n");
+
+ /*
+ * Set values only once for core0. Grab the proper clock.
+ */
+ if (nss_ctx->id) {
+ nss_core1_clk = clk_get(&nss_dev->dev, NSS_CORE_CLK);
+ } else {
+ nss_core0_clk = clk_get(&nss_dev->dev, NSS_CORE_CLK);
+ }
+
+ if (nss_hal_clock_set_and_enable(&nss_dev->dev, NSS_CORE_CLK, nss_runtime_samples.freq_scale[NSS_FREQ_MID_SCALE].frequency)) {
+ return -EFAULT;
+ }
+
return 0;
}
@@ -517,6 +594,12 @@
err = request_irq(irq, nss_hal_handle_irq, 0, "nss_queue3", int_ctx);
}
+ if (irq_num == NSS_HAL_N2H_INTR_PURPOSE_COREDUMP_COMPLETE) {
+ int_ctx->cause = NSS_N2H_INTR_COREDUMP_COMPLETE;
+ netif_napi_add(int_ctx->ndev, &int_ctx->napi, nss_core_handle_napi_emergency, NSS_DATA_COMMAND_BUFFER_PROCESSING_WEIGHT);
+ err = request_irq(irq, nss_hal_handle_irq, 0, "nss_coredump_complete", int_ctx);
+ }
+
if (err) {
return err;
}
diff --git a/nss_init.c b/nss_init.c
index 0f81a04..1bee547 100644
--- a/nss_init.c
+++ b/nss_init.c
@@ -73,6 +73,7 @@
* Handler to send NSS messages
*/
struct clk *nss_core0_clk;
+struct clk *nss_core1_clk;
/*
* Handle fabric requests - only on new kernel
@@ -197,10 +198,14 @@
nss_freq_change(&nss_top_main.nss[NSS_CORE_1], my_work->frequency, my_work->stats_enable, 0);
}
clk_set_rate(nss_core0_clk, my_work->frequency);
+
nss_freq_change(&nss_top_main.nss[NSS_CORE_0], my_work->frequency, my_work->stats_enable, 1);
if (nss_top_main.nss[NSS_CORE_1].state == NSS_CORE_STATE_INITIALIZED) {
nss_freq_change(&nss_top_main.nss[NSS_CORE_1], my_work->frequency, my_work->stats_enable, 1);
}
+#if defined(NSS_HAL_IPQ807x_SUPPORT)
+ clk_set_rate(nss_core1_clk, my_work->frequency);
+#endif
/*
* If we are running NSS_PM_SUPPORT, we are on banana