// SPDX-License-Identifier: GPL-2.0-only /* * NXP Wireless LAN device driver: station RX data handling * * Copyright 2011-2020 NXP */ #include <uapi/linux/ipv6.h> #include <net/ndisc.h> #include "decl.h" #include "ioctl.h" #include "util.h" #include "fw.h" #include "main.h" #include "11n_aggr.h" #include "11n_rxreorder.h" /* This function checks if a frame is IPv4 ARP or IPv6 Neighbour advertisement * frame. If frame has both source and destination mac address as same, this * function drops such gratuitous frames. */ static bool mwifiex_discard_gratuitous_arp(struct mwifiex_private *priv, struct sk_buff *skb) { … } /* * This function processes the received packet and forwards it * to kernel/upper layer. * * This function parses through the received packet and determines * if it is a debug packet or normal packet. * * For non-debug packets, the function chops off unnecessary leading * header bytes, reconstructs the packet as an ethernet frame or * 802.2/llc/snap frame as required, and sends it to kernel/upper layer. * * The completion callback is called after processing in complete. */ int mwifiex_process_rx_packet(struct mwifiex_private *priv, struct sk_buff *skb) { … } /* * This function processes the received buffer. * * 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. Non-unicast packets are sent directly to * the kernel/upper layers. Unicast packets are handed over to the * Rx reordering routine if 11n is enabled. * * The completion callback is called after processing in complete. */ int mwifiex_process_sta_rx_packet(struct mwifiex_private *priv, struct sk_buff *skb) { … }