1*551b7c5eSAhmad Khalifa /* 2*551b7c5eSAhmad Khalifa * Copyright (c) 2026 Ahmad Khalifa <vexeduxr@FreeBSD.org> 3*551b7c5eSAhmad Khalifa * 4*551b7c5eSAhmad Khalifa * SPDX-License-Identifier: BSD-2-Clause 5*551b7c5eSAhmad Khalifa */ 6*551b7c5eSAhmad Khalifa 7*551b7c5eSAhmad Khalifa #include <sys/param.h> 8*551b7c5eSAhmad Khalifa #include <sys/lock.h> 9*551b7c5eSAhmad Khalifa #include <sys/mutex.h> 10*551b7c5eSAhmad Khalifa #include <sys/mbuf.h> 11*551b7c5eSAhmad Khalifa #include <sys/kernel.h> 12*551b7c5eSAhmad Khalifa #include <sys/socket.h> 13*551b7c5eSAhmad Khalifa #include <sys/systm.h> 14*551b7c5eSAhmad Khalifa #include <sys/malloc.h> 15*551b7c5eSAhmad Khalifa #include <sys/queue.h> 16*551b7c5eSAhmad Khalifa #include <sys/taskqueue.h> 17*551b7c5eSAhmad Khalifa #include <sys/bus.h> 18*551b7c5eSAhmad Khalifa #include <sys/endian.h> 19*551b7c5eSAhmad Khalifa #include <sys/linker.h> 20*551b7c5eSAhmad Khalifa 21*551b7c5eSAhmad Khalifa #include <net/if.h> 22*551b7c5eSAhmad Khalifa #include <net/ethernet.h> 23*551b7c5eSAhmad Khalifa #include <net/if_media.h> 24*551b7c5eSAhmad Khalifa 25*551b7c5eSAhmad Khalifa #include <net80211/ieee80211_var.h> 26*551b7c5eSAhmad Khalifa #include <net80211/ieee80211_radiotap.h> 27*551b7c5eSAhmad Khalifa 28*551b7c5eSAhmad Khalifa #include <dev/rtwn/if_rtwnreg.h> 29*551b7c5eSAhmad Khalifa #include <dev/rtwn/if_rtwnvar.h> 30*551b7c5eSAhmad Khalifa 31*551b7c5eSAhmad Khalifa #include <dev/rtwn/rtl8188e/r88e_rx_desc.h> 32*551b7c5eSAhmad Khalifa 33*551b7c5eSAhmad Khalifa #include <dev/rtwn/rtl8723b/r23b.h> 34*551b7c5eSAhmad Khalifa 35*551b7c5eSAhmad Khalifa int8_t r23b_get_rssi_cck(struct rtwn_softc * sc,void * physt)36*551b7c5eSAhmad Khalifar23b_get_rssi_cck(struct rtwn_softc *sc, void *physt) 37*551b7c5eSAhmad Khalifa { 38*551b7c5eSAhmad Khalifa struct r88e_rx_phystat *phy = (struct r88e_rx_phystat *)physt; 39*551b7c5eSAhmad Khalifa int8_t lna_idx, vga_idx, rssi; 40*551b7c5eSAhmad Khalifa 41*551b7c5eSAhmad Khalifa lna_idx = (phy->agc_rpt & 0xe0) >> 5; 42*551b7c5eSAhmad Khalifa vga_idx = (phy->agc_rpt & 0x1f); 43*551b7c5eSAhmad Khalifa 44*551b7c5eSAhmad Khalifa rssi = -2 * vga_idx; 45*551b7c5eSAhmad Khalifa switch (lna_idx) { 46*551b7c5eSAhmad Khalifa case 6: 47*551b7c5eSAhmad Khalifa rssi -= 34; 48*551b7c5eSAhmad Khalifa break; 49*551b7c5eSAhmad Khalifa case 4: 50*551b7c5eSAhmad Khalifa rssi -= 14; 51*551b7c5eSAhmad Khalifa break; 52*551b7c5eSAhmad Khalifa case 1: 53*551b7c5eSAhmad Khalifa rssi += 6; 54*551b7c5eSAhmad Khalifa break; 55*551b7c5eSAhmad Khalifa case 0: 56*551b7c5eSAhmad Khalifa rssi += 16; 57*551b7c5eSAhmad Khalifa break; 58*551b7c5eSAhmad Khalifa default: 59*551b7c5eSAhmad Khalifa rssi = 0; 60*551b7c5eSAhmad Khalifa break; 61*551b7c5eSAhmad Khalifa } 62*551b7c5eSAhmad Khalifa 63*551b7c5eSAhmad Khalifa return (rssi); 64*551b7c5eSAhmad Khalifa } 65