#include <linux/etherdevice.h>
#include <net/ieee80211_radiotap.h>
#include <linux/if_arp.h>
#include <linux/moduleparam.h>
#include <linux/ip.h>
#include <linux/ipv6.h>
#include <linux/if_vlan.h>
#include <net/ipv6.h>
#include <linux/prefetch.h>
#include "wil6210.h"
#include "wmi.h"
#include "txrx.h"
#include "trace.h"
#include "txrx_edma.h"
bool rx_align_2;
module_param(rx_align_2, bool, 0444);
MODULE_PARM_DESC(…) …;
bool rx_large_buf;
module_param(rx_large_buf, bool, 0444);
MODULE_PARM_DESC(…) …;
bool drop_if_ring_full;
static inline uint wil_rx_snaplen(void)
{ … }
static inline int wil_ring_wmark_low(struct wil_ring *ring)
{ … }
static inline int wil_ring_wmark_high(struct wil_ring *ring)
{ … }
static inline int wil_ring_avail_low(struct wil_ring *ring)
{ … }
static inline int wil_ring_avail_high(struct wil_ring *ring)
{ … }
bool wil_is_tx_idle(struct wil6210_priv *wil)
{ … }
static int wil_vring_alloc(struct wil6210_priv *wil, struct wil_ring *vring)
{ … }
static void wil_txdesc_unmap(struct device *dev, union wil_tx_desc *desc,
struct wil_ctx *ctx)
{ … }
static void wil_vring_free(struct wil6210_priv *wil, struct wil_ring *vring)
{ … }
static int wil_vring_alloc_skb(struct wil6210_priv *wil, struct wil_ring *vring,
u32 i, int headroom)
{ … }
static void wil_rx_add_radiotap_header(struct wil6210_priv *wil,
struct sk_buff *skb)
{ … }
static bool wil_is_rx_idle(struct wil6210_priv *wil)
{ … }
static int wil_rx_get_cid_by_skb(struct wil6210_priv *wil, struct sk_buff *skb)
{ … }
static struct sk_buff *wil_vring_reap_rx(struct wil6210_priv *wil,
struct wil_ring *vring)
{ … }
static int wil_rx_refill(struct wil6210_priv *wil, int count)
{ … }
int reverse_memcmp(const void *cs, const void *ct, size_t count)
{ … }
static int wil_rx_crypto_check(struct wil6210_priv *wil, struct sk_buff *skb)
{ … }
static int wil_rx_error_check(struct wil6210_priv *wil, struct sk_buff *skb,
struct wil_net_stats *stats)
{ … }
static void wil_get_netif_rx_params(struct sk_buff *skb, int *cid,
int *security)
{ … }
static struct wil_eapol_key *wil_is_ptk_eapol_key(struct wil6210_priv *wil,
struct sk_buff *skb)
{ … }
static bool wil_skb_is_eap_3(struct wil6210_priv *wil, struct sk_buff *skb)
{ … }
static bool wil_skb_is_eap_4(struct wil6210_priv *wil, struct sk_buff *skb)
{ … }
void wil_enable_tx_key_worker(struct work_struct *work)
{ … }
void wil_tx_complete_handle_eapol(struct wil6210_vif *vif, struct sk_buff *skb)
{ … }
static void wil_rx_handle_eapol(struct wil6210_vif *vif, struct sk_buff *skb)
{ … }
void wil_netif_rx(struct sk_buff *skb, struct net_device *ndev, int cid,
struct wil_net_stats *stats, bool gro)
{ … }
void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev)
{ … }
void wil_rx_handle(struct wil6210_priv *wil, int *quota)
{ … }
static void wil_rx_buf_len_init(struct wil6210_priv *wil)
{ … }
static int wil_rx_init(struct wil6210_priv *wil, uint order)
{ … }
static void wil_rx_fini(struct wil6210_priv *wil)
{ … }
static int wil_tx_desc_map(union wil_tx_desc *desc, dma_addr_t pa,
u32 len, int vring_index)
{ … }
void wil_tx_data_init(struct wil_ring_tx_data *txdata)
{ … }
static int wil_vring_init_tx(struct wil6210_vif *vif, int id, int size,
int cid, int tid)
{ … }
static int wil_tx_vring_modify(struct wil6210_vif *vif, int ring_id, int cid,
int tid)
{ … }
int wil_vring_init_bcast(struct wil6210_vif *vif, int id, int size)
{ … }
static struct wil_ring *wil_find_tx_ucast(struct wil6210_priv *wil,
struct wil6210_vif *vif,
struct sk_buff *skb)
{ … }
static int wil_tx_ring(struct wil6210_priv *wil, struct wil6210_vif *vif,
struct wil_ring *ring, struct sk_buff *skb);
static struct wil_ring *wil_find_tx_ring_sta(struct wil6210_priv *wil,
struct wil6210_vif *vif,
struct sk_buff *skb)
{ … }
static struct wil_ring *wil_find_tx_bcast_1(struct wil6210_priv *wil,
struct wil6210_vif *vif,
struct sk_buff *skb)
{ … }
static bool wil_check_multicast_to_unicast(struct wil6210_priv *wil,
struct sk_buff *skb)
{ … }
static void wil_set_da_for_vring(struct wil6210_priv *wil,
struct sk_buff *skb, int vring_index)
{ … }
static struct wil_ring *wil_find_tx_bcast_2(struct wil6210_priv *wil,
struct wil6210_vif *vif,
struct sk_buff *skb)
{ … }
static inline
void wil_tx_desc_set_nr_frags(struct vring_tx_desc *d, int nr_frags)
{ … }
static void wil_tx_desc_offload_setup_tso(struct vring_tx_desc *d,
struct sk_buff *skb,
int tso_desc_type, bool is_ipv4,
int tcp_hdr_len, int skb_net_hdr_len)
{ … }
static int wil_tx_desc_offload_setup(struct vring_tx_desc *d,
struct sk_buff *skb){ … }
static inline void wil_tx_last_desc(struct vring_tx_desc *d)
{ … }
static inline void wil_set_tx_desc_last_tso(volatile struct vring_tx_desc *d)
{ … }
static int __wil_tx_vring_tso(struct wil6210_priv *wil, struct wil6210_vif *vif,
struct wil_ring *vring, struct sk_buff *skb)
{ … }
static int __wil_tx_ring(struct wil6210_priv *wil, struct wil6210_vif *vif,
struct wil_ring *ring, struct sk_buff *skb)
{ … }
static int wil_tx_ring(struct wil6210_priv *wil, struct wil6210_vif *vif,
struct wil_ring *ring, struct sk_buff *skb)
{ … }
static inline void __wil_update_net_queues(struct wil6210_priv *wil,
struct wil6210_vif *vif,
struct wil_ring *ring,
bool check_stop)
{ … }
void wil_update_net_queues(struct wil6210_priv *wil, struct wil6210_vif *vif,
struct wil_ring *ring, bool check_stop)
{ … }
void wil_update_net_queues_bh(struct wil6210_priv *wil, struct wil6210_vif *vif,
struct wil_ring *ring, bool check_stop)
{ … }
netdev_tx_t wil_start_xmit(struct sk_buff *skb, struct net_device *ndev)
{ … }
void wil_tx_latency_calc(struct wil6210_priv *wil, struct sk_buff *skb,
struct wil_sta_info *sta)
{ … }
int wil_tx_complete(struct wil6210_vif *vif, int ringid)
{ … }
static inline int wil_tx_init(struct wil6210_priv *wil)
{ … }
static inline void wil_tx_fini(struct wil6210_priv *wil) { … }
static void wil_get_reorder_params(struct wil6210_priv *wil,
struct sk_buff *skb, int *tid, int *cid,
int *mid, u16 *seq, int *mcast, int *retry)
{ … }
void wil_init_txrx_ops_legacy_dma(struct wil6210_priv *wil)
{ … }