1 /* 2 * Copyright (c) 2024 Nordic Semiconductor ASA 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 /** 8 * @brief File containing utility function definitions for the 9 * FMAC IF Layer of the Wi-Fi driver. 10 */ 11 12 #include "osal_api.h" 13 #include "common/fmac_api_common.h" 14 #include "common/fmac_util.h" 15 #include "host_rpu_umac_if.h" 16 nrf_wifi_util_is_multicast_addr(const unsigned char * addr)17bool nrf_wifi_util_is_multicast_addr(const unsigned char *addr) 18 { 19 return (0x01 & *addr); 20 } 21 22 nrf_wifi_util_is_unicast_addr(const unsigned char * addr)23bool nrf_wifi_util_is_unicast_addr(const unsigned char *addr) 24 { 25 return !nrf_wifi_util_is_multicast_addr(addr); 26 } 27 28 nrf_wifi_util_ether_addr_equal(const unsigned char * addr_1,const unsigned char * addr_2)29bool nrf_wifi_util_ether_addr_equal(const unsigned char *addr_1, 30 const unsigned char *addr_2) 31 { 32 const unsigned short *a = (const unsigned short *)addr_1; 33 const unsigned short *b = (const unsigned short *)addr_2; 34 35 return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) == 0; 36 } 37 nrf_wifi_util_rx_get_eth_type(void * nwb)38unsigned short nrf_wifi_util_rx_get_eth_type(void *nwb) 39 { 40 unsigned char *payload = NULL; 41 42 payload = (unsigned char *)nwb; 43 44 return payload[6] << 8 | payload[7]; 45 } 46 47 nrf_wifi_util_tx_get_eth_type(void * nwb)48unsigned short nrf_wifi_util_tx_get_eth_type(void *nwb) 49 { 50 unsigned char *payload = NULL; 51 52 payload = (unsigned char *)nwb; 53 54 return payload[12] << 8 | payload[13]; 55 } 56 57 nrf_wifi_check_mode_validity(unsigned char mode)58enum nrf_wifi_status nrf_wifi_check_mode_validity(unsigned char mode) 59 { 60 /** 61 * We validate the currently supported driver and lower layer 62 * modes only 63 */ 64 if ((mode ^ NRF_WIFI_STA_MODE) == 0) { 65 return NRF_WIFI_STATUS_SUCCESS; 66 } 67 #ifdef NRF70_RAW_DATA_RX 68 else if ((mode ^ NRF_WIFI_MONITOR_MODE) == 0) { 69 return NRF_WIFI_STATUS_SUCCESS; 70 } 71 #endif /* NRF70_RAW_DATA_RX */ 72 return NRF_WIFI_STATUS_FAIL; 73 } 74 nrf_wifi_util_is_arr_zero(unsigned char * arr,unsigned int arr_sz)75bool nrf_wifi_util_is_arr_zero(unsigned char *arr, 76 unsigned int arr_sz) 77 { 78 unsigned int i = 0; 79 80 for (i = 0; i < arr_sz; i++) { 81 if (arr[i] != 0) { 82 return false; 83 } 84 } 85 86 return true; 87 } 88 wifi_fmac_priv(struct nrf_wifi_fmac_priv * def)89void *wifi_fmac_priv(struct nrf_wifi_fmac_priv *def) 90 { 91 return &def->priv; 92 } 93 wifi_dev_priv(struct nrf_wifi_fmac_dev_ctx * def)94void *wifi_dev_priv(struct nrf_wifi_fmac_dev_ctx *def) 95 { 96 return &def->priv; 97 } 98