// SPDX-License-Identifier: GPL-2.0-only /* * NXP Wireless LAN device driver: AP TX and RX data handling * * Copyright 2011-2020 NXP */ #include "decl.h" #include "ioctl.h" #include "main.h" #include "wmm.h" #include "11n_aggr.h" #include "11n_rxreorder.h" /* This function checks if particular RA list has packets more than low bridge * packet threshold and then deletes packet from this RA list. * Function deletes packets from such RA list and returns true. If no such list * is found, false is returned. */ static bool mwifiex_uap_del_tx_pkts_in_ralist(struct mwifiex_private *priv, struct list_head *ra_list_head, int tid) { … } /* This function deletes packets from particular RA List. RA list index * from which packets are deleted is preserved so that packets from next RA * list are deleted upon subsequent call thus maintaining fairness. */ static void mwifiex_uap_cleanup_tx_queues(struct mwifiex_private *priv) { … } static void mwifiex_uap_queue_bridged_pkt(struct mwifiex_private *priv, struct sk_buff *skb) { … } /* * This function contains logic for AP packet forwarding. * * If a packet is multicast/broadcast, it is sent to kernel/upper layer * as well as queued back to AP TX queue so that it can be sent to other * associated stations. * If a packet is unicast and RA is present in associated station list, * it is again requeued into AP TX queue. * If a packet is unicast and RA is not in associated station list, * packet is forwarded to kernel to handle routing logic. */ int mwifiex_handle_uap_rx_forward(struct mwifiex_private *priv, struct sk_buff *skb) { … } int mwifiex_uap_recv_packet(struct mwifiex_private *priv, struct sk_buff *skb) { … } /* * This function processes the packet received on AP interface. * * The function looks into the RxPD and performs sanity tests on the * received buffer to ensure its a valid packet before processing it * further. If the packet is determined to be aggregated, it is * de-aggregated accordingly. Then skb is passed to AP packet forwarding logic. * * The completion callback is called after processing is complete. */ int mwifiex_process_uap_rx_packet(struct mwifiex_private *priv, struct sk_buff *skb) { … } /* * This function fills the TxPD for AP tx packets. * * The Tx buffer received by this function should already have the * header space allocated for TxPD. * * This function inserts the TxPD in between interface header and actual * data and adjusts the buffer pointers accordingly. * * The following TxPD fields are set by this function, as required - * - BSS number * - Tx packet length and offset * - Priority * - Packet delay * - Priority specific Tx control * - Flags */ void mwifiex_process_uap_txpd(struct mwifiex_private *priv, struct sk_buff *skb) { … }