Skip to content

Commit a8b36b2

Browse files
ajaykathatajaysk
authored andcommitted
wilc1000: added featurization for kernel 5.x
Signed-off-by: Ajay Singh <ajay.kathat@microchip.com>
1 parent 80d1b90 commit a8b36b2

5 files changed

Lines changed: 106 additions & 13 deletions

File tree

drivers/net/wireless/microchip/wilc1000/cfg80211.c

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1516,6 +1516,7 @@ static int mgmt_tx_cancel_wait(struct wiphy *wiphy,
15161516
return 0;
15171517
}
15181518

1519+
#if KERNEL_VERSION(5, 8, 0) <= LINUX_VERSION_CODE
15191520
void wilc_update_mgmt_frame_registrations(struct wiphy *wiphy,
15201521
struct wireless_dev *wdev,
15211522
struct mgmt_frame_regs *upd)
@@ -1542,6 +1543,42 @@ void wilc_update_mgmt_frame_registrations(struct wiphy *wiphy,
15421543
vif->mgmt_reg_stypes =
15431544
upd->interface_stypes & (presp_bit | action_bit);
15441545
}
1546+
#else
1547+
void wilc_mgmt_frame_register(struct wiphy *wiphy, struct wireless_dev *wdev,
1548+
u16 frame_type, bool reg)
1549+
{
1550+
struct wilc *wl = wiphy_priv(wiphy);
1551+
struct wilc_vif *vif = netdev_priv(wdev->netdev);
1552+
1553+
if (!frame_type)
1554+
return;
1555+
1556+
PRINT_D(vif->ndev, GENERIC_DBG,
1557+
"Frame registering Frame Type: %x: Boolean: %d\n",
1558+
frame_type, reg);
1559+
switch (frame_type) {
1560+
case IEEE80211_STYPE_PROBE_REQ:
1561+
vif->frame_reg[0].type = frame_type;
1562+
vif->frame_reg[0].reg = reg;
1563+
break;
1564+
1565+
case IEEE80211_STYPE_ACTION:
1566+
vif->frame_reg[1].type = frame_type;
1567+
vif->frame_reg[1].reg = reg;
1568+
break;
1569+
1570+
default:
1571+
break;
1572+
}
1573+
1574+
if (!wl->initialized) {
1575+
PRINT_INFO(vif->ndev, GENERIC_DBG,
1576+
"Return since mac is closed\n");
1577+
return;
1578+
}
1579+
wilc_frame_register(vif, frame_type, reg);
1580+
}
1581+
#endif
15451582

15461583
static int set_cqm_rssi_config(struct wiphy *wiphy, struct net_device *dev,
15471584
s32 rssi_thold, u32 rssi_hyst)
@@ -2186,7 +2223,11 @@ static const struct cfg80211_ops wilc_cfg80211_ops = {
21862223
.cancel_remain_on_channel = cancel_remain_on_channel,
21872224
.mgmt_tx_cancel_wait = mgmt_tx_cancel_wait,
21882225
.mgmt_tx = mgmt_tx,
2226+
#if KERNEL_VERSION(5, 8, 0) <= LINUX_VERSION_CODE
21892227
.update_mgmt_frame_registrations = wilc_update_mgmt_frame_registrations,
2228+
#else
2229+
.mgmt_frame_register = wilc_mgmt_frame_register,
2230+
#endif
21902231
.set_power_mgmt = set_power_mgmt,
21912232
.set_cqm_rssi_config = set_cqm_rssi_config,
21922233

drivers/net/wireless/microchip/wilc1000/cfg80211.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,14 @@ void wilc_wfi_deinit_mon_interface(struct wilc *wl, bool rtnl_locked);
1818
struct net_device *wilc_wfi_init_mon_interface(struct wilc *wl,
1919
const char *name,
2020
struct net_device *real_dev);
21+
#if KERNEL_VERSION(5, 8, 0) <= LINUX_VERSION_CODE
2122
void wilc_update_mgmt_frame_registrations(struct wiphy *wiphy,
2223
struct wireless_dev *wdev,
2324
struct mgmt_frame_regs *upd);
25+
#else
26+
void wilc_mgmt_frame_register(struct wiphy *wiphy, struct wireless_dev *wdev,
27+
u16 frame_type, bool reg);
28+
#endif
2429
void wilc_sysfs_init(struct wilc *wilc);
2530
void wilc_sysfs_exit(void);
2631
struct wilc_vif *wilc_get_vif_from_type(struct wilc *wl, int type);

drivers/net/wireless/microchip/wilc1000/netdev.c

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -855,7 +855,9 @@ static int wilc_mac_open(struct net_device *ndev)
855855
struct wilc_vif *vif = netdev_priv(ndev);
856856
struct wilc *wl = vif->wilc;
857857
int ret = 0;
858+
#if KERNEL_VERSION(5, 8, 0) <= LINUX_VERSION_CODE
858859
struct mgmt_frame_regs mgmt_regs = {};
860+
#endif
859861

860862
if (!wl || !wl->dev) {
861863
netdev_err(ndev, "device not ready\n");
@@ -901,12 +903,24 @@ static int wilc_mac_open(struct net_device *ndev)
901903
return -EINVAL;
902904
}
903905

906+
#if KERNEL_VERSION(5, 8, 0) <= LINUX_VERSION_CODE
904907
mgmt_regs.interface_stypes = vif->mgmt_reg_stypes;
905908
/* so we detect a change */
906909
vif->mgmt_reg_stypes = 0;
910+
907911
wilc_update_mgmt_frame_registrations(vif->ndev->ieee80211_ptr->wiphy,
908912
vif->ndev->ieee80211_ptr,
909913
&mgmt_regs);
914+
#else
915+
wilc_mgmt_frame_register(vif->ndev->ieee80211_ptr->wiphy,
916+
vif->ndev->ieee80211_ptr,
917+
vif->frame_reg[0].type,
918+
vif->frame_reg[0].reg);
919+
wilc_mgmt_frame_register(vif->ndev->ieee80211_ptr->wiphy,
920+
vif->ndev->ieee80211_ptr,
921+
vif->frame_reg[1].type,
922+
vif->frame_reg[1].reg);
923+
#endif
910924
netif_wake_queue(ndev);
911925
wl->open_ifcs++;
912926
vif->mac_opened = 1;
@@ -1200,12 +1214,22 @@ void wilc_wfi_mgmt_rx(struct wilc *wilc, u8 *buff, u32 size)
12001214
srcu_idx = srcu_read_lock(&wilc->srcu);
12011215
list_for_each_entry_rcu(vif, &wilc->vif_list, list) {
12021216
u16 type = le16_to_cpup((__le16 *)buff);
1217+
struct wilc_priv *priv;
1218+
#if KERNEL_VERSION(5, 8, 0) <= LINUX_VERSION_CODE
12031219
u32 type_bit = BIT(type >> 4);
1220+
#endif
12041221

1222+
priv = &vif->priv;
1223+
#if KERNEL_VERSION(5, 8, 0) <= LINUX_VERSION_CODE
12051224
if (vif->mgmt_reg_stypes & type_bit &&
12061225
vif->p2p_listen_state)
12071226
wilc_wfi_p2p_rx(vif, buff, size);
1208-
1227+
#else
1228+
if (((type == vif->frame_reg[0].type && vif->frame_reg[0].reg) ||
1229+
(type == vif->frame_reg[1].type && vif->frame_reg[1].reg)) &&
1230+
vif->p2p_listen_state)
1231+
wilc_wfi_p2p_rx(vif, buff, size);
1232+
#endif
12091233

12101234
if (vif->monitor_flag)
12111235
wilc_wfi_monitor_rx(wilc->monitor_dev, buff, size);

drivers/net/wireless/microchip/wilc1000/netdev.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,15 @@ struct wilc_priv {
305305
u64 inc_roc_cookie;
306306
};
307307

308+
#if KERNEL_VERSION(5, 8, 0) > LINUX_VERSION_CODE
309+
struct frame_reg {
310+
u16 type;
311+
bool reg;
312+
};
313+
314+
#define NUM_REG_FRAME 2
315+
#endif
316+
308317
#define MAX_TCP_SESSION 25
309318
#define MAX_PENDING_ACKS 256
310319

@@ -346,7 +355,11 @@ struct wilc_vif {
346355
u8 iftype;
347356
int monitor_flag;
348357
int mac_opened;
358+
#if KERNEL_VERSION(5, 8, 0) <= LINUX_VERSION_CODE
349359
u32 mgmt_reg_stypes;
360+
#else
361+
struct frame_reg frame_reg[NUM_REG_FRAME];
362+
#endif
350363
struct net_device_stats netstats;
351364
struct wilc *wilc;
352365
u8 bssid[ETH_ALEN];

drivers/net/wireless/microchip/wilc1000/spi.c

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -300,10 +300,14 @@ static int wilc_spi_tx(struct wilc *wilc, u8 *b, u32 len)
300300
struct spi_transfer tr = {
301301
.tx_buf = b,
302302
.len = len,
303+
#if KERNEL_VERSION(5, 5, 0) <= LINUX_VERSION_CODE
303304
.delay = {
304-
.value = 0,
305-
.unit = SPI_DELAY_UNIT_USECS
305+
.value = 0,
306+
.unit = SPI_DELAY_UNIT_USECS
306307
},
308+
#else
309+
.delay_usecs = 0,
310+
#endif
307311
};
308312
char *r_buffer = kzalloc(len, GFP_KERNEL);
309313

@@ -344,11 +348,14 @@ static int wilc_spi_rx(struct wilc *wilc, u8 *rb, u32 rlen)
344348
struct spi_transfer tr = {
345349
.rx_buf = rb,
346350
.len = rlen,
347-
.delay = {
348-
.value = 0,
349-
.unit = SPI_DELAY_UNIT_USECS
350-
},
351-
351+
#if KERNEL_VERSION(5, 5, 0) <= LINUX_VERSION_CODE
352+
.delay = {
353+
.value = 0,
354+
.unit = SPI_DELAY_UNIT_USECS
355+
},
356+
#else
357+
.delay_usecs = 0,
358+
#endif
352359
};
353360
char *t_buffer = kzalloc(rlen, GFP_KERNEL);
354361

@@ -389,11 +396,14 @@ static int wilc_spi_tx_rx(struct wilc *wilc, u8 *wb, u8 *rb, u32 rlen)
389396
.tx_buf = wb,
390397
.len = rlen,
391398
.bits_per_word = 8,
392-
.delay = {
393-
.value = 0,
394-
.unit = SPI_DELAY_UNIT_USECS
395-
},
396-
399+
#if KERNEL_VERSION(5, 5, 0) <= LINUX_VERSION_CODE
400+
.delay = {
401+
.value = 0,
402+
.unit = SPI_DELAY_UNIT_USECS
403+
},
404+
#else
405+
.delay_usecs = 0,
406+
#endif
397407
};
398408

399409
memset(&msg, 0, sizeof(msg));

0 commit comments

Comments
 (0)