From 0d8657dd3056063fb115946b10157477b5c70451 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 20 Nov 2023 09:09:45 +0000
Subject: [PATCH] enable lvds 1280x800
---
kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_iapsta.c | 128 ++++++++++++++++++++++++++++--------------
1 files changed, 84 insertions(+), 44 deletions(-)
diff --git a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_iapsta.c b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_iapsta.c
index 2afa1c5..c03b497 100644
--- a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_iapsta.c
+++ b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_iapsta.c
@@ -154,6 +154,12 @@
ENC_TKIPAES
} encmode_t;
+typedef enum MAPSTA_MODE {
+ MCHAN_APSTA_NOT_ALLOW = 0,
+ MCHAN_APSTA_SBSC,
+ MCHAN_APSTA_NO_RESTRICT
+} mapsta_mode_t;
+
#ifdef STA_MGMT
typedef struct wl_sta_info {
int ifidx;
@@ -270,12 +276,13 @@
#endif /* WL_EXT_RECONNECT && WL_CFG80211 */
} wl_if_info_t;
+u8 *g_ioctl_buf = NULL;
+
typedef struct wl_apsta_params {
struct wl_if_info if_info[MAX_IF_NUM];
#ifdef WLDWDS
struct wl_dwds_info dwds_info[MAX_DWDS_IF_NUM];
#endif /* WLDWDS */
- u8 *ioctl_buf;
bool init;
int rsdb;
bool vsdb;
@@ -1933,6 +1940,7 @@
if (!auto_chan) {
auto_chan = wl_ext_autochannel(cur_if->dev, ACS_FW_BIT|ACS_DRV_BIT,
cur_chan_info->band);
+ auto_chan = wf_chspec_ctlchan(auto_chan);
}
if (auto_chan)
cur_chan_info->chan = auto_chan;
@@ -1954,6 +1962,7 @@
if (!auto_chan) {
auto_chan = wl_ext_autochannel(cur_if->dev, ACS_FW_BIT|ACS_DRV_BIT,
cur_chan_info->band);
+ auto_chan = wf_chspec_ctlchan(auto_chan);
}
if (auto_chan) {
cur_chan_info->chan = auto_chan;
@@ -1967,6 +1976,7 @@
} else {
auto_chan = wl_ext_autochannel(cur_if->dev, ACS_FW_BIT|ACS_DRV_BIT,
cur_chan_info->band);
+ auto_chan = wf_chspec_ctlchan(auto_chan);
if (auto_chan) {
cur_chan_info->chan = auto_chan;
}
@@ -2005,6 +2015,7 @@
if (!auto_chan) {
auto_chan = wl_ext_autochannel(tgt_if->dev, ACS_FW_BIT|ACS_DRV_BIT,
tgt_chan_info->band);
+ auto_chan = wf_chspec_ctlchan(auto_chan);
}
if (auto_chan) {
tgt_chan_info->chan = auto_chan;
@@ -2017,6 +2028,7 @@
if (!auto_chan) {
auto_chan = wl_ext_autochannel(tgt_if->dev, ACS_FW_BIT|ACS_DRV_BIT,
tgt_chan_info->band);
+ auto_chan = wf_chspec_ctlchan(auto_chan);
}
} else {
tgt_chan_info->chan = 0;
@@ -2488,6 +2500,7 @@
if (wl_ext_master_if(cur_if) && apsta_params->acs) {
chan_info->chan = wl_ext_autochannel(cur_if->dev, apsta_params->acs,
chan_info->band);
+ chan_info->chan = wf_chspec_ctlchan(chan_info->chan);
}
chan_info->chan = wl_ext_move_cur_channel(apsta_params, cur_if);
if (chan_info->chan) {
@@ -4289,7 +4302,8 @@
}
}
} else {
- WL_ERR(("Unknown auth_alg=%d or auth_seq=%d\n", auth_alg, auth_seq));
+ IAPSTA_ERROR(dev->name, "Unknown auth_alg=%d or auth_seq=%d\n",
+ auth_alg, auth_seq);
}
return;
@@ -4395,16 +4409,11 @@
static void
wl_ampdu_dump(struct net_device *dev)
{
- struct dhd_pub *dhd = dhd_get_pub(dev);
- struct wl_apsta_params *apsta_params = dhd->iapsta_params;
- char *ioctl_buf = apsta_params->ioctl_buf, *buf = NULL;
+ char *ioctl_buf = g_ioctl_buf, *buf = NULL;
char *tx_pch_start, *tx_pch_end, *rx_pch_start, *rx_pch_end;
int ret = 0, max_len, tx_len, rx_len;
if (!(android_msg_level & ANDROID_AMPDU_LEVEL))
- return;
-
- if (!ioctl_buf)
return;
memset(ioctl_buf, 0, WL_DUMP_BUF_LEN);
@@ -4470,11 +4479,9 @@
static void
wl_tvpm_dump(struct net_device *dev)
{
- struct dhd_pub *dhd = dhd_get_pub(dev);
- struct wl_apsta_params *apsta_params = dhd->iapsta_params;
wl_tvpm_req_t* tvpm_req = NULL;
size_t reqlen = sizeof(wl_tvpm_req_t) + sizeof(wl_tvpm_status_t);
- uint8 *outbuf = apsta_params->ioctl_buf;
+ uint8 *outbuf = g_ioctl_buf;
size_t outlen = WLC_IOCTL_MEDLEN;
wl_tvpm_status_t* status;
int ret, phy_temp = 0;
@@ -4545,6 +4552,8 @@
wldev_ioctl(dev, WLC_GET_RSSI, &scb_val, sizeof(scb_val_t), 0);
rssi_ant_p->count = 1;
rssi_ant_p->rssi_ant[0] = dtoh32(scb_val.val);
+ } else {
+ rssi_ant_p->count = 0;
}
}
for (i=0; i<rssi_ant_p->count && rssi_ant_p->rssi_ant[i]; i++) {
@@ -4570,9 +4579,7 @@
static void
wl_sta_info_dump(struct net_device *dev, struct ether_addr *mac)
{
- struct dhd_pub *dhd = dhd_get_pub(dev);
- struct wl_apsta_params *apsta_params = dhd->iapsta_params;
- void *buf = apsta_params->ioctl_buf;
+ void *buf = g_ioctl_buf;
sta_info_v4_t *sta = NULL;
char rssi_buf[16];
int ret;
@@ -4723,7 +4730,7 @@
tmp_if = &apsta_params->if_info[i];
if (tmp_if->dev &&
(tmp_if->ifmode == ISTA_MODE || tmp_if->ifmode == IGC_MODE) &&
- wl_ext_associated(tmp_if->dev)) {
+ wl_get_isam_status(tmp_if, STA_CONNECTED)) {
wl_tput_monitor(dhd, tmp_if->ifidx, &tmp_if->tput_info);
monitor_if[i] = TRUE;
}
@@ -5112,7 +5119,7 @@
{
struct dhd_pub *dhd = dhd_get_pub(cur_if->dev);
struct wl_apsta_params *apsta_params = dhd->iapsta_params;
- char *iovar_buf = apsta_params->ioctl_buf;
+ char *iovar_buf = g_ioctl_buf;
uint32 corerev = 0;
wl_cnt_info_t *cntinfo;
uint16 ver;
@@ -5971,6 +5978,7 @@
(chan_5g && cur_if->chan_info.band == WLC_BAND_5G)) {
cur_if->chan_info.chan = wl_ext_autochannel(cur_if->dev, apsta_params->acs,
cur_if->chan_info.band);
+ cur_if->chan_info.chan = wf_chspec_ctlchan(cur_if->chan_info.chan);
} else {
IAPSTA_ERROR(ifname, "invalid channel\n");
ret = -1;
@@ -6688,6 +6696,28 @@
}
static void
+wl_ext_iapsta_get_mapsta_mode(struct net_device *net)
+{
+ struct dhd_pub *dhd = dhd_get_pub(net);
+ struct wl_apsta_params *apsta_params = dhd->iapsta_params;
+ int ret, mapsta_mode;
+
+ ret = wldev_iovar_getint(net, "mapsta_mode", &mapsta_mode);
+ if (ret) {
+ IAPSTA_INFO(net->name, "not supported %d\n", ret);
+ mapsta_mode = MCHAN_APSTA_NOT_ALLOW;
+ }
+
+ if (mapsta_mode == MCHAN_APSTA_SBSC)
+ apsta_params->rsdb = 1;
+ else if (mapsta_mode == MCHAN_APSTA_NO_RESTRICT)
+ apsta_params->vsdb = TRUE;
+
+ IAPSTA_INFO(net->name, "mapsta_mode=%d(rsdb=%d, vsdb=%d)\n",
+ mapsta_mode, apsta_params->rsdb, apsta_params->vsdb);
+}
+
+static void
wl_ext_iapsta_postinit(struct net_device *net, struct wl_if_info *cur_if)
{
struct dhd_pub *dhd = dhd_get_pub(net);
@@ -6698,6 +6728,7 @@
if (cur_if->ifidx == 0) {
apsta_params->rsdb = wl_ext_iapsta_get_rsdb(net, dhd);
apsta_params->vsdb = FALSE;
+ wl_ext_iapsta_get_mapsta_mode(net);
apsta_params->csa = 0;
apsta_params->acs = 0;
apsta_params->radar = wl_ext_radar_detect(net);
@@ -6873,12 +6904,6 @@
struct dhd_pub *dhd = dhd_get_pub(net);
struct wl_apsta_params *apsta_params = dhd->iapsta_params;
- if (!apsta_params->ioctl_buf) {
- apsta_params->ioctl_buf = kmalloc(WL_DUMP_BUF_LEN, GFP_KERNEL);
- if (unlikely(!apsta_params->ioctl_buf)) {
- IAPSTA_ERROR(net->name, "Can not allocate ioctl_buf\n");
- }
- }
init_waitqueue_head(&apsta_params->netif_change_event);
mutex_init(&apsta_params->usr_sync);
mutex_init(&apsta_params->in4way_sync);
@@ -6896,10 +6921,6 @@
struct dhd_pub *dhd = dhd_get_pub(net);
struct wl_apsta_params *apsta_params = dhd->iapsta_params;
- if (apsta_params->ioctl_buf) {
- kfree(apsta_params->ioctl_buf);
- apsta_params->ioctl_buf = NULL;
- }
memset(apsta_params, 0, sizeof(struct wl_apsta_params));
}
@@ -7028,24 +7049,6 @@
return 0;
}
-int
-wl_ext_iapsta_attach(struct net_device *net)
-{
- struct dhd_pub *dhd = dhd_get_pub(net);
- struct wl_apsta_params *iapsta_params;
-
- IAPSTA_TRACE(net->name, "Enter\n");
-
- iapsta_params = kzalloc(sizeof(struct wl_apsta_params), GFP_KERNEL);
- if (unlikely(!iapsta_params)) {
- IAPSTA_ERROR(net->name, "Can not allocate apsta_params\n");
- return -ENOMEM;
- }
- dhd->iapsta_params = (void *)iapsta_params;
-
- return 0;
-}
-
void
wl_ext_iapsta_dettach(struct net_device *net)
{
@@ -7053,10 +7056,47 @@
IAPSTA_TRACE(net->name, "Enter\n");
+ if (g_ioctl_buf) {
+ kfree(g_ioctl_buf);
+ g_ioctl_buf = NULL;
+ }
+
if (dhd->iapsta_params) {
wl_ext_iapsta_deinit_priv(net);
kfree(dhd->iapsta_params);
dhd->iapsta_params = NULL;
}
}
+
+int
+wl_ext_iapsta_attach(struct net_device *net)
+{
+ struct dhd_pub *dhd = dhd_get_pub(net);
+ struct wl_apsta_params *iapsta_params;
+ int ret = 0;
+
+ IAPSTA_TRACE(net->name, "Enter\n");
+
+ iapsta_params = kzalloc(sizeof(struct wl_apsta_params), GFP_KERNEL);
+ if (unlikely(!iapsta_params)) {
+ IAPSTA_ERROR(net->name, "Can not allocate apsta_params\n");
+ ret = -ENOMEM;
+ goto exit;
+ }
+ dhd->iapsta_params = (void *)iapsta_params;
+
+ if (!g_ioctl_buf) {
+ g_ioctl_buf = kmalloc(WL_DUMP_BUF_LEN, GFP_KERNEL);
+ if (unlikely(!g_ioctl_buf)) {
+ IAPSTA_ERROR(net->name, "Can not allocate g_ioctl_buf\n");
+ ret = -ENOMEM;
+ goto exit;
+ }
+ }
+
+exit:
+ if (ret)
+ wl_ext_iapsta_dettach(net);
+ return ret;
+}
#endif /* WL_EXT_IAPSTA */
--
Gitblit v1.6.2