From d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 11 Dec 2023 02:45:28 +0000 Subject: [PATCH] add boot partition size --- kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/dhd_flowring.h | 109 ++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 73 insertions(+), 36 deletions(-) diff --git a/kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/dhd_flowring.h b/kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/dhd_flowring.h index 24e4b88..9744db1 100644 --- a/kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/dhd_flowring.h +++ b/kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/dhd_flowring.h @@ -1,5 +1,4 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/** +/* * @file Header file describing the flow rings DHD interfaces. * * Flow rings are transmit traffic (=propagating towards antenna) related entities. @@ -7,14 +6,16 @@ * Provides type definitions and function prototypes used to create, delete and manage flow rings at * high level. * - * Copyright (C) 1999-2019, Broadcom Corporation - * + * Portions of this code are copyright (c) 2022 Cypress Semiconductor Corporation + * + * Copyright (C) 1999-2017, Broadcom Corporation + * * Unless you and Broadcom execute a separate written software license * agreement governing use of this software, this software is licensed to you * under the terms of the GNU General Public License version 2 (the "GPL"), * available at http://www.broadcom.com/licenses/GPLv2.php, with the * following added to such license: - * + * * As a special exception, the copyright holders of this software give you * permission to link this software with independent modules, and to copy and * distribute the resulting executable under terms of your choice, provided that @@ -22,7 +23,7 @@ * the license of that module. An independent module is a module which is not * derived from this software. The special exception does not apply to any * modifications of the software. - * + * * Notwithstanding the above, under no circumstances may you combine this * software in any way with any other Broadcom software provided under a license * other than the GPL, without Broadcom's express prior written consent. @@ -30,9 +31,8 @@ * * <<Broadcom-WL-IPTag/Open:>> * - * $Id: dhd_flowrings.h jaganlv $ + * $Id: dhd_flowring.h 697690 2017-05-04 14:16:18Z $ */ - /**************** * Common types * @@ -51,39 +51,24 @@ #define FLOWID_RESERVED (FLOW_RING_COMMON) #define FLOW_RING_STATUS_OPEN 0 -#define FLOW_RING_STATUS_PENDING 1 +#define FLOW_RING_STATUS_CREATE_PENDING 1 #define FLOW_RING_STATUS_CLOSED 2 #define FLOW_RING_STATUS_DELETE_PENDING 3 #define FLOW_RING_STATUS_FLUSH_PENDING 4 -#define FLOW_RING_STATUS_STA_FREEING 5 + +#ifdef IDLE_TX_FLOW_MGMT +#define FLOW_RING_STATUS_SUSPENDED 5 +#define FLOW_RING_STATUS_RESUME_PENDING 6 +#endif /* IDLE_TX_FLOW_MGMT */ +#define FLOW_RING_STATUS_STA_FREEING 7 #define DHD_FLOWRING_RX_BUFPOST_PKTSZ 2048 +#define DHD_FLOWRING_RX_BUFPOST_PKTSZ_MAX 4096 #define DHD_FLOW_PRIO_AC_MAP 0 #define DHD_FLOW_PRIO_TID_MAP 1 +/* Flow ring prority map for lossless roaming */ #define DHD_FLOW_PRIO_LLR_MAP 2 - -/* Pkttag not compatible with PROP_TXSTATUS or WLFC */ -typedef struct dhd_pkttag_fr { - uint16 flowid; - uint16 ifid; - int dataoff; - dmaaddr_t physaddr; - uint32 pa_len; - -} dhd_pkttag_fr_t; - -#define DHD_PKTTAG_SET_FLOWID(tag, flow) ((tag)->flowid = (uint16)(flow)) -#define DHD_PKTTAG_SET_IFID(tag, idx) ((tag)->ifid = (uint16)(idx)) -#define DHD_PKTTAG_SET_DATAOFF(tag, offset) ((tag)->dataoff = (int)(offset)) -#define DHD_PKTTAG_SET_PA(tag, pa) ((tag)->physaddr = (pa)) -#define DHD_PKTTAG_SET_PA_LEN(tag, palen) ((tag)->pa_len = (palen)) - -#define DHD_PKTTAG_FLOWID(tag) ((tag)->flowid) -#define DHD_PKTTAG_IFID(tag) ((tag)->ifid) -#define DHD_PKTTAG_DATAOFF(tag) ((tag)->dataoff) -#define DHD_PKTTAG_PA(tag) ((tag)->physaddr) -#define DHD_PKTTAG_PA_LEN(tag) ((tag)->pa_len) /* Hashing a MacAddress for lkup into a per interface flow hash table */ #define DHD_FLOWRING_HASH_SIZE 256 @@ -94,8 +79,24 @@ #define DHD_IF_ROLE(pub, idx) (((if_flow_lkup_t *)(pub)->if_flow_lkup)[idx].role) #define DHD_IF_ROLE_AP(pub, idx) (DHD_IF_ROLE(pub, idx) == WLC_E_IF_ROLE_AP) #define DHD_IF_ROLE_STA(pub, idx) (DHD_IF_ROLE(pub, idx) == WLC_E_IF_ROLE_STA) +#define DHD_IF_ROLE_P2PGC(pub, idx) (DHD_IF_ROLE(pub, idx) == WLC_E_IF_ROLE_P2P_CLIENT) #define DHD_IF_ROLE_P2PGO(pub, idx) (DHD_IF_ROLE(pub, idx) == WLC_E_IF_ROLE_P2P_GO) #define DHD_IF_ROLE_WDS(pub, idx) (DHD_IF_ROLE(pub, idx) == WLC_E_IF_ROLE_WDS) +#define DHD_IF_ROLE_IBSS(pub, idx) (DHD_IF_ROLE(pub, idx) == WLC_E_IF_ROLE_IBSS) +#ifdef WL_NAN +#define DHD_IF_ROLE_NAN(pub, idx) (DHD_IF_ROLE(pub, idx) == WLC_E_IF_ROLE_NAN) +#else +#define DHD_IF_ROLE_NAN(pub, idx) (FALSE) +#endif /* WL_NAN */ +#define DHD_IF_ROLE_AWDL(pub, idx) (FALSE) + +#define DHD_IF_ROLE_GENERIC_STA(pub, idx) \ + (DHD_IF_ROLE_STA(pub, idx) || DHD_IF_ROLE_P2PGC(pub, idx) || DHD_IF_ROLE_WDS(pub, idx)) + +#define DHD_IF_ROLE_MULTI_CLIENT(pub, idx) \ + (DHD_IF_ROLE_AP(pub, idx) || DHD_IF_ROLE_P2PGO(pub, idx) || DHD_IF_ROLE_AWDL(pub, idx) ||\ + DHD_IF_ROLE_NAN(pub, idx)) + #define DHD_FLOW_RING(dhdp, flowid) \ (flow_ring_node_t *)&(((flow_ring_node_t *)((dhdp)->flow_ring_table))[flowid]) @@ -162,15 +163,40 @@ #define DHD_FLOW_QUEUE_SET_L2CLEN(queue, grandparent_clen_ptr) \ ((queue)->l2clen_ptr) = (void *)(grandparent_clen_ptr) -/* see wlfc_proto.h for tx status details */ -#define DHD_FLOWRING_MAXSTATUS_MSGS 5 #define DHD_FLOWRING_TXSTATUS_CNT_UPDATE(bus, flowid, txstatus) + +/* Pkttag not compatible with PROP_TXSTATUS or WLFC */ +typedef struct dhd_pkttag_fr { + uint16 flowid; + uint16 ifid; +#ifdef DHD_LB_TXC + int dataoff; + dmaaddr_t physaddr; + uint32 pa_len; +#endif /* DHD_LB_TXC */ +} dhd_pkttag_fr_t; + +#define DHD_PKTTAG_SET_IFID(tag, idx) ((tag)->ifid = (uint16)(idx)) +#define DHD_PKTTAG_SET_PA(tag, pa) ((tag)->physaddr = (pa)) +#define DHD_PKTTAG_SET_PA_LEN(tag, palen) ((tag)->pa_len = (palen)) +#define DHD_PKTTAG_IFID(tag) ((tag)->ifid) +#define DHD_PKTTAG_PA(tag) ((tag)->physaddr) +#define DHD_PKTTAG_PA_LEN(tag) ((tag)->pa_len) + /** each flow ring is dedicated to a tid/sa/da combination */ typedef struct flow_info { uint8 tid; uint8 ifindex; - char sa[ETHER_ADDR_LEN]; - char da[ETHER_ADDR_LEN]; + uchar sa[ETHER_ADDR_LEN]; + uchar da[ETHER_ADDR_LEN]; +#ifdef TX_STATUS_LATENCY_STATS + /* total number of tx_status received on this flowid */ + uint64 num_tx_status; + /* cumulative tx_status latency for this flowid */ + uint64 cum_tx_status_latency; + /* num tx packets sent on this flowring */ + uint64 num_tx_pkts; +#endif /* TX_STATUS_LATENCY_STATS */ } flow_info_t; /** a flow ring is used for outbound (towards antenna) 802.3 packets */ @@ -187,6 +213,13 @@ flow_info_t flow_info; void *prot_info; void *lock; /* lock for flowring access protection */ + +#ifdef IDLE_TX_FLOW_MGMT + uint64 last_active_ts; /* contains last active timestamp */ +#endif /* IDLE_TX_FLOW_MGMT */ +#ifdef DHD_HP2P + bool hp2p_ring; +#endif /* DHD_HP2P */ } flow_ring_node_t; typedef flow_ring_node_t flow_ring_table_t; @@ -231,10 +264,14 @@ extern int dhd_flowid_update(dhd_pub_t *dhdp, uint8 ifindex, uint8 prio, void *pktbuf); +extern int dhd_flowid_debug_create(dhd_pub_t *dhdp, uint8 ifindex, + uint8 prio, char *sa, char *da, uint16 *flowid); +extern int dhd_flowid_find_by_ifidx(dhd_pub_t *dhdp, uint8 ifidex, uint16 flowid); extern void dhd_flowid_free(dhd_pub_t *dhdp, uint8 ifindex, uint16 flowid); extern void dhd_flow_rings_delete(dhd_pub_t *dhdp, uint8 ifindex); +extern void dhd_flow_rings_flush(dhd_pub_t *dhdp, uint8 ifindex); extern void dhd_flow_rings_delete_for_peer(dhd_pub_t *dhdp, uint8 ifindex, char *addr); -- Gitblit v1.6.2