// SPDX-License-Identifier: ISC /* * Copyright (c) 2010 Broadcom Corporation */ /**************** * Common types * */ #ifndef BRCMFMAC_CORE_H #define BRCMFMAC_CORE_H #include <net/cfg80211.h> #include "fweh.h" #if IS_MODULE(CONFIG_BRCMFMAC) #define BRCMF_EXPORT_SYMBOL_GPL … #else #define BRCMF_EXPORT_SYMBOL_GPL(__sym) … #endif #define TOE_TX_CSUM_OL … #define TOE_RX_CSUM_OL … /* For supporting multiple interfaces */ #define BRCMF_MAX_IFS … /* Small, medium and maximum buffer size for dcmd */ #define BRCMF_DCMD_SMLEN … #define BRCMF_DCMD_MEDLEN … #define BRCMF_DCMD_MAXLEN … /* IOCTL from host to device are limited in length. A device can only handle * ethernet frame size. This limitation is to be applied by protocol layer. */ #define BRCMF_TX_IOCTL_MAX_MSG_SIZE … #define BRCMF_AMPDU_RX_REORDER_MAXFLOWS … /* Length of firmware version string stored for * ethtool driver info which uses 32 bytes as well. */ #define BRCMF_DRIVER_FIRMWARE_VERSION_LEN … #define NDOL_MAX_ENTRIES … /** * struct brcmf_ampdu_rx_reorder - AMPDU receive reorder info * * @flow_id: AMPDU flow identifier. * @cur_idx: last AMPDU index from firmware. * @exp_idx: expected next AMPDU index. * @max_idx: maximum amount of packets per AMPDU. * @pend_pkts: number of packets currently in @pktslots. * @pktslots: array for ordering AMPDU packets. */ struct brcmf_ampdu_rx_reorder { … }; /* Forward decls for struct brcmf_pub (see below) */ struct brcmf_proto; /* device communication protocol info */ struct brcmf_fws_info; /* firmware signalling info */ struct brcmf_mp_device; /* module paramateres, device specific */ /* * struct brcmf_rev_info * * The result field stores the error code of the * revision info request from firmware. For the * other fields see struct brcmf_rev_info_le in * fwil_types.h */ struct brcmf_rev_info { … }; /* Common structure for module and instance linkage */ struct brcmf_pub { … }; /* forward declarations */ struct brcmf_cfg80211_vif; struct brcmf_fws_mac_descriptor; /** * enum brcmf_netif_stop_reason - reason for stopping netif queue. * * @BRCMF_NETIF_STOP_REASON_FWS_FC: * netif stopped due to firmware signalling flow control. * @BRCMF_NETIF_STOP_REASON_FLOW: * netif stopped due to flowring full. * @BRCMF_NETIF_STOP_REASON_DISCONNECTED: * netif stopped due to not being connected (STA mode). */ enum brcmf_netif_stop_reason { … }; /** * struct brcmf_if - interface control information. * * @drvr: points to device related information. * @vif: points to cfg80211 specific interface information. * @ndev: associated network device. * @multicast_work: worker object for multicast provisioning. * @ndoffload_work: worker object for neighbor discovery offload configuration. * @fws_desc: interface specific firmware-signalling descriptor. * @ifidx: interface index in device firmware. * @bsscfgidx: index of bss associated with this interface. * @mac_addr: assigned mac address. * @netif_stop: bitmap indicates reason why netif queues are stopped. * @netif_stop_lock: spinlock for update netif_stop from multiple sources. * @pend_8021x_cnt: tracks outstanding number of 802.1x frames. * @pend_8021x_wait: used for signalling change in count. * @fwil_fwerr: flag indicating fwil layer should return firmware error codes. */ struct brcmf_if { … }; int brcmf_netdev_wait_pend8021x(struct brcmf_if *ifp); /* Return pointer to interface name */ char *brcmf_ifname(struct brcmf_if *ifp); struct brcmf_if *brcmf_get_ifp(struct brcmf_pub *drvr, int ifidx); void brcmf_configure_arp_nd_offload(struct brcmf_if *ifp, bool enable); int brcmf_net_attach(struct brcmf_if *ifp, bool locked); struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, s32 bsscfgidx, s32 ifidx, bool is_p2pdev, const char *name, u8 *mac_addr); void brcmf_remove_interface(struct brcmf_if *ifp, bool locked); void brcmf_txflowblock_if(struct brcmf_if *ifp, enum brcmf_netif_stop_reason reason, bool state); void brcmf_txfinalize(struct brcmf_if *ifp, struct sk_buff *txp, bool success); void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb); void brcmf_netif_mon_rx(struct brcmf_if *ifp, struct sk_buff *skb); void brcmf_net_detach(struct net_device *ndev, bool locked); int brcmf_net_mon_attach(struct brcmf_if *ifp); void brcmf_net_setcarrier(struct brcmf_if *ifp, bool on); int __init brcmf_core_init(void); void __exit brcmf_core_exit(void); #endif /* BRCMFMAC_CORE_H */