xref: /freebsd/sys/dev/rtwn/rtl8723b/r23b_rx.c (revision 551b7c5e12bfea623a47edf97ad5689732a1233f)
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 Khalifa r23b_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