1 /* 2 * Copyright (c) 2024 Nordic Semiconductor ASA 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 /** 8 * @brief Header containing utility declarations for the 9 * FMAC IF Layer of the Wi-Fi driver. 10 */ 11 #ifndef __FMAC_UTIL_H__ 12 #define __FMAC_UTIL_H__ 13 14 #include "fmac_structs_common.h" 15 16 #include "fmac_structs_common.h" 17 #include "common/pack_def.h" 18 19 20 #define NRF_WIFI_FMAC_ETH_ADDR_LEN 6 21 #define NRF_WIFI_FMAC_ETH_HDR_LEN 14 22 23 #define NRF_WIFI_FMAC_FTYPE_DATA 0x0008 24 #define NRF_WIFI_FMAC_STYPE_DATA 0x0000 25 #define NRF_WIFI_FMAC_STYPE_QOS_DATA 0x0080 26 27 #define NRF_WIFI_FMAC_FCTL_FTYPE 0x000c 28 #define NRF_WIFI_FMAC_FCTL_PROTECTED 0x4000 29 #define NRF_WIFI_FMAC_FCTL_TODS 0x0100 30 #define NRF_WIFI_FMAC_FCTL_FROMDS 0x0200 31 32 #define NRF_WIFI_FMAC_CIPHER_SUITE_WEP40 0x000FAC01 33 #define NRF_WIFI_FMAC_CIPHER_SUITE_WEP104 0x000FAC05 34 #define NRF_WIFI_FMAC_CIPHER_SUITE_TKIP 0x000FAC02 35 #define NRF_WIFI_FMAC_CIPHER_SUITE_CCMP 0x000FAC04 36 #define NRF_WIFI_FMAC_CIPHER_SUITE_CCMP_256 0x000FAC0A 37 #define NRF_WIFI_FMAC_CIPHER_SUITE_OPEN 0x0 38 #define NRF_WIFI_FMAC_CIPHER_SUITE_SMS4 0x00147201 39 40 #define NRF_WIFI_FMAC_CCMP_HDR_LEN 8 41 #define NRF_WIFI_FMAC_CCMP_256_HDR_LEN 8 42 #define NRF_WIFI_FMAC_SMS4_HDR_LEN 18 43 44 #define NRF_WIFI_FMAC_WEP_IV_LEN 4 45 #define NRF_WIFI_FMAC_TKIP_IV_LEN 8 46 47 #define NRF_WIFI_FCTL_TODS 0x0100 48 #define NRF_WIFI_FCTL_FROMDS 0x0200 49 #define NRF_WIFI_FMAC_ETH_P_8021Q 0x8100 /* 802.1Q VLAN Extended Header */ 50 #define NRF_WIFI_FMAC_ETH_P_8021AD 0x88A8 /* 802.1ad Service VLAN */ 51 #define NRF_WIFI_FMAC_ETH_P_MPLS_UC 0x8847 /* MPLS Unicast traffic */ 52 #define NRF_WIFI_FMAC_ETH_P_MPLS_MC 0x8848 /* MPLS Multicast traffic */ 53 #define NRF_WIFI_FMAC_ETH_P_IP 0x0800 /* Internet Protocol packet */ 54 #define NRF_WIFI_FMAC_ETH_P_IPV6 0x86DD /* IPv6 over bluebook */ 55 #define NRF_WIFI_FMAC_ETH_P_80221 0x8917 /* IEEE 802.21 Media Independent Handover Protocol */ 56 #define NRF_WIFI_FMAC_ETH_P_AARP 0x80F3 /* Appletalk AARP */ 57 #define NRF_WIFI_FMAC_ETH_P_IPX 0x8137 /* IPX over DIX */ 58 #define NRF_WIFI_FMAC_ETH_P_802_3_MIN 0x0600 /* If the value in the ethernet type is less than 59 * this value then the frame is Ethernet II. 60 * Else it is 802.3 61 */ 62 #define NRF_WIFI_FMAC_VLAN_PRIO_SHIFT 0x0D /* 13 bit */ 63 #define NRF_WIFI_FMAC_VLAN_PRIO_MASK 0xE000 64 #define NRF_WIFI_FMAC_MPLS_LS_TC_MASK 0x00000E00 65 #define NRF_WIFI_FMAC_MPLS_LS_TC_SHIFT 0x09 66 #define NRF_WIFI_FMAC_IPV6_TOS_MASK 0x0FF0 67 #define NRF_WIFI_FMAC_IPV6_TOS_SHIFT 0x04 /* 4bit */ 68 #define NRF_WIFI_FMAC_ETH_TYPE_MASK 0xFFFF 69 70 struct nrf_wifi_fmac_ieee80211_hdr { 71 unsigned short fc; 72 unsigned short dur_id; 73 unsigned char addr_1[NRF_WIFI_FMAC_ETH_ADDR_LEN]; 74 unsigned char addr_2[NRF_WIFI_FMAC_ETH_ADDR_LEN]; 75 unsigned char addr_3[NRF_WIFI_FMAC_ETH_ADDR_LEN]; 76 unsigned short seq_ctrl; 77 unsigned char addr_4[NRF_WIFI_FMAC_ETH_ADDR_LEN]; 78 } __NRF_WIFI_PKD; 79 80 81 struct nrf_wifi_fmac_eth_hdr { 82 unsigned char dst[NRF_WIFI_FMAC_ETH_ADDR_LEN]; /* destination eth addr */ 83 unsigned char src[NRF_WIFI_FMAC_ETH_ADDR_LEN]; /* source ether addr */ 84 unsigned short proto; /* packet type ID field */ 85 } __NRF_WIFI_PKD; 86 87 88 struct nrf_wifi_fmac_amsdu_hdr { 89 unsigned char dst[NRF_WIFI_FMAC_ETH_ADDR_LEN]; /* destination eth addr */ 90 unsigned char src[NRF_WIFI_FMAC_ETH_ADDR_LEN]; /* source ether addr */ 91 unsigned short length; /* length*/ 92 } __NRF_WIFI_PKD; 93 94 bool nrf_wifi_util_is_multicast_addr(const unsigned char *addr); 95 96 bool nrf_wifi_util_is_unicast_addr(const unsigned char *addr); 97 98 bool nrf_wifi_util_ether_addr_equal(const unsigned char *addr_1, 99 const unsigned char *addr_2); 100 101 unsigned short nrf_wifi_util_rx_get_eth_type(void *nwb); 102 unsigned short nrf_wifi_util_tx_get_eth_type(void *nwb); 103 104 bool nrf_wifi_util_is_arr_zero(unsigned char *arr, 105 unsigned int arr_sz); 106 107 void *wifi_fmac_priv(struct nrf_wifi_fmac_priv *def); 108 void *wifi_dev_priv(struct nrf_wifi_fmac_dev_ctx *def); 109 110 #endif /* __FMAC_UTIL_H__ */ 111