From: Joe Perches <joe@perches.com>
To: Srinivasan Raju <srini.raju@purelifi.com>
Cc: mostafa.afgani@purelifi.com, Kalle Valo <kvalo@codeaurora.org>,
"David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>,
Mauro Carvalho Chehab <mchehab+huawei@kernel.org>,
Rob Herring <robh@kernel.org>,
Lukas Bulwahn <lukas.bulwahn@gmail.com>,
open list <linux-kernel@vger.kernel.org>,
"open list:NETWORKING DRIVERS (WIRELESS)"
<linux-wireless@vger.kernel.org>,
"open list:NETWORKING DRIVERS" <netdev@vger.kernel.org>
Subject: Re: [PATCH] [v4] wireless: Initial driver submission for pureLiFi STA devices
Date: Fri, 16 Oct 2020 01:58:18 -0700 [thread overview]
Message-ID: <4676eb63d9aa5b9e532b580bd491527d9ed08535.camel@perches.com> (raw)
In-Reply-To: <20201016063444.29822-1-srini.raju@purelifi.com>
On Fri, 2020-10-16 at 12:04 +0530, Srinivasan Raju wrote:
> This introduces the pureLiFi LiFi driver for LiFi-X, LiFi-XC
> and LiFi-XL USB devices.
Suggested neatening patch on top of this:
o Use include "usb.h" instead of direct extern
o Prefix purelifi to speed and send_packet_from_data_queue functions
to remove generic global function naming
o Use enum instead of macro defines for MODULATION_RATE_<foo>
o Simplify the (mac->chip->)usb->tx. uses with a temporary
o Use continue in loops instead of extra indentation
o Remove unnecessary %hx printf formatting, use %x
---
drivers/net/wireless/purelifi/chip.c | 4 +-
drivers/net/wireless/purelifi/mac.c | 60 +++++++++++--------------
drivers/net/wireless/purelifi/mac.h | 22 ++++-----
drivers/net/wireless/purelifi/usb.c | 86 ++++++++++++++++--------------------
drivers/net/wireless/purelifi/usb.h | 4 +-
5 files changed, 80 insertions(+), 96 deletions(-)
diff --git a/drivers/net/wireless/purelifi/chip.c b/drivers/net/wireless/purelifi/chip.c
index 9ad2664b7542..cca03697cb06 100644
--- a/drivers/net/wireless/purelifi/chip.c
+++ b/drivers/net/wireless/purelifi/chip.c
@@ -42,12 +42,12 @@ int purelifi_chip_init_hw(struct purelifi_chip *chip)
u8 *addr = purelifi_mac_get_perm_addr(purelifi_chip_to_mac(chip));
struct usb_device *udev = interface_to_usbdev(chip->usb.intf);
- pr_info("purelifi chip %02hx:%02hx v%02hx %02x-%02x-%02x %s\n",
+ pr_info("purelifi chip %02x:%02x v%02x %02x-%02x-%02x %s\n",
le16_to_cpu(udev->descriptor.idVendor),
le16_to_cpu(udev->descriptor.idProduct),
le16_to_cpu(udev->descriptor.bcdDevice),
addr[0], addr[1], addr[2],
- speed(udev->speed));
+ purelifi_speed(udev->speed));
return purelifi_set_beacon_interval(chip, 100, 0, 0);
}
diff --git a/drivers/net/wireless/purelifi/mac.c b/drivers/net/wireless/purelifi/mac.c
index 6920a1dfd599..09b7c2c0050d 100644
--- a/drivers/net/wireless/purelifi/mac.c
+++ b/drivers/net/wireless/purelifi/mac.c
@@ -10,6 +10,7 @@
#include "chip.h"
#include "mac.h"
+#include "usb.h"
#ifndef IEEE80211_BAND_2GHZ
#define IEEE80211_BAND_2GHZ NL80211_BAND_2GHZ
@@ -332,7 +333,6 @@ static int fill_ctrlset(struct purelifi_mac *mac, struct sk_buff *skb)
return 0;
}
-extern void send_packet_from_data_queue(struct purelifi_usb *usb);
/**
* purelifi_op_tx - transmits a network frame to the device
*
@@ -366,16 +366,15 @@ static void purelifi_op_tx(struct ieee80211_hw *hw,
u8 dst_mac[ETH_ALEN];
u8 sidx;
bool found = false;
+ struct purelifi_usb_tx *tx = &usb->tx;
memcpy(dst_mac, &skb->data[28], ETH_ALEN);
for (sidx = 0; sidx < MAX_STA_NUM; sidx++) {
- if (usb->tx.station[sidx].flag &
- STATION_CONNECTED_FLAG) {
- if (!memcmp(usb->tx.station[sidx].mac,
- dst_mac, ETH_ALEN)) {
- found = true;
- break;
- }
+ if (!(tx->station[sidx].flag & STATION_CONNECTED_FLAG))
+ continue;
+ if (!memcmp(tx->station[sidx].mac, dst_mac, ETH_ALEN)) {
+ found = true;
+ break;
}
}
@@ -384,13 +383,13 @@ static void purelifi_op_tx(struct ieee80211_hw *hw,
sidx = STA_BROADCAST_INDEX;
/* Stop OS from sending packets, if the queue is half full */
- if (skb_queue_len(&usb->tx.station[sidx].data_list) > 60)
- block_queue(usb, usb->tx.station[sidx].mac, true);
+ if (skb_queue_len(&tx->station[sidx].data_list) > 60)
+ block_queue(usb, tx->station[sidx].mac, true);
/* Schedule packet for transmission if queue is not full */
- if (skb_queue_len(&usb->tx.station[sidx].data_list) < 256) {
- skb_queue_tail(&usb->tx.station[sidx].data_list, skb);
- send_packet_from_data_queue(usb);
+ if (skb_queue_len(&tx->station[sidx].data_list) < 256) {
+ skb_queue_tail(&tx->station[sidx].data_list, skb);
+ purelifi_send_packet_from_data_queue(usb);
} else {
dev_kfree_skb(skb);
}
@@ -487,6 +486,7 @@ int purelifi_mac_rx(struct ieee80211_hw *hw, const u8 *buffer,
static unsigned short int min_exp_seq_nmb;
u32 crc_error_cnt_low, crc_error_cnt_high;
int sidx;
+ struct purelifi_usb_tx *tx;
/* Packet blockade during disabled interface. */
if (!mac->vif)
@@ -530,33 +530,25 @@ int purelifi_mac_rx(struct ieee80211_hw *hw, const u8 *buffer,
fc = get_unaligned((__le16 *)buffer);
need_padding = ieee80211_is_data_qos(fc) ^ ieee80211_has_a4(fc);
+ tx = &mac->chip.usb.tx;
+
for (sidx = 0; sidx < MAX_STA_NUM - 1; sidx++) {
- if (!memcmp(&buffer[10],
- mac->chip.usb.tx.station[sidx].mac,
- ETH_ALEN)) {
- if (mac->chip.usb.tx.station[sidx].flag &
- STATION_CONNECTED_FLAG) {
- mac->chip.usb.tx.station[sidx].flag |=
- STATION_HEARTBEAT_FLAG;
- break;
- }
+ if (memcmp(&buffer[10], tx->station[sidx].mac, ETH_ALEN))
+ continue;
+ if (tx->station[sidx].flag & STATION_CONNECTED_FLAG) {
+ tx->station[sidx].flag |= STATION_HEARTBEAT_FLAG;
+ break;
}
}
if (sidx == MAX_STA_NUM - 1) {
for (sidx = 0; sidx < MAX_STA_NUM - 1; sidx++) {
- if (!(mac->chip.usb.tx.station[sidx].flag &
- STATION_CONNECTED_FLAG
- )) {
- memcpy(mac->chip.usb.tx.station[sidx].mac,
- &buffer[10],
- ETH_ALEN);
- mac->chip.usb.tx.station[sidx].flag |=
- STATION_CONNECTED_FLAG;
- mac->chip.usb.tx.station[sidx].flag |=
- STATION_HEARTBEAT_FLAG;
- break;
- }
+ if (tx->station[sidx].flag & STATION_CONNECTED_FLAG)
+ continue;
+ memcpy(tx->station[sidx].mac, &buffer[10], ETH_ALEN);
+ tx->station[sidx].flag |= STATION_CONNECTED_FLAG;
+ tx->station[sidx].flag |= STATION_HEARTBEAT_FLAG;
+ break;
}
}
diff --git a/drivers/net/wireless/purelifi/mac.h b/drivers/net/wireless/purelifi/mac.h
index 35e28cc4dffb..cca1e70a6416 100644
--- a/drivers/net/wireless/purelifi/mac.h
+++ b/drivers/net/wireless/purelifi/mac.h
@@ -37,16 +37,18 @@
#define PURELIFI_RX_ERROR 0x80
#define PURELIFI_RX_CRC32_ERROR 0x10
-#define MODULATION_RATE_BPSK_1_2 0
-#define MODULATION_RATE_BPSK_3_4 (MODULATION_RATE_BPSK_1_2 + 1)
-#define MODULATION_RATE_QPSK_1_2 (MODULATION_RATE_BPSK_3_4 + 1)
-#define MODULATION_RATE_QPSK_3_4 (MODULATION_RATE_QPSK_1_2 + 1)
-#define MODULATION_RATE_QAM16_1_2 (MODULATION_RATE_QPSK_3_4 + 1)
-#define MODULATION_RATE_QAM16_3_4 (MODULATION_RATE_QAM16_1_2 + 1)
-#define MODULATION_RATE_QAM64_1_2 (MODULATION_RATE_QAM16_3_4 + 1)
-#define MODULATION_RATE_QAM64_3_4 (MODULATION_RATE_QAM64_1_2 + 1)
-#define MODULATION_RATE_AUTO (MODULATION_RATE_QAM64_3_4 + 1)
-#define MODULATION_RATE_NUM (MODULATION_RATE_AUTO + 1)
+enum {
+ MODULATION_RATE_BPSK_1_2 = 0,
+ MODULATION_RATE_BPSK_3_4,
+ MODULATION_RATE_QPSK_1_2,
+ MODULATION_RATE_QPSK_3_4,
+ MODULATION_RATE_QAM16_1_2,
+ MODULATION_RATE_QAM16_3_4,
+ MODULATION_RATE_QAM64_1_2,
+ MODULATION_RATE_QAM64_3_4,
+ MODULATION_RATE_AUTO,
+ MODULATION_RATE_NUM
+};
#define purelifi_mac_dev(mac) (purelifi_chip_dev(&(mac)->chip))
diff --git a/drivers/net/wireless/purelifi/usb.c b/drivers/net/wireless/purelifi/usb.c
index 730adbf786da..1354c8734d44 100644
--- a/drivers/net/wireless/purelifi/usb.c
+++ b/drivers/net/wireless/purelifi/usb.c
@@ -71,38 +71,32 @@ static inline u16 get_bcd_device(const struct usb_device *udev)
#define urb_dev(urb) (&(urb)->dev->dev)
-void send_packet_from_data_queue(struct purelifi_usb *usb)
+void purelifi_send_packet_from_data_queue(struct purelifi_usb *usb)
{
struct sk_buff *skb = NULL;
unsigned long flags;
static u8 sidx;
u8 last_served_sidx;
+ struct purelifi_usb_tx *tx = &usb->tx;
- spin_lock_irqsave(&usb->tx.lock, flags);
+ spin_lock_irqsave(&tx->lock, flags);
last_served_sidx = sidx;
do {
sidx = (sidx + 1) % MAX_STA_NUM;
- if ((usb->tx.station[sidx].flag &
- STATION_CONNECTED_FLAG)) {
- if (!(usb->tx.station[sidx].flag &
- STATION_FIFO_FULL_FLAG)) {
- skb = skb_peek(&usb->tx.station
- [sidx].data_list);
- }
- }
+ if (!tx->station[sidx].flag & STATION_CONNECTED_FLAG)
+ continue;
+ if (!(tx->station[sidx].flag & STATION_FIFO_FULL_FLAG))
+ skb = skb_peek(&tx->station[sidx].data_list);
} while ((sidx != last_served_sidx) && (!skb));
if (skb) {
- skb = skb_dequeue(&usb->tx.station[sidx].data_list);
+ skb = skb_dequeue(&tx->station[sidx].data_list);
usb_write_req_async(usb, skb->data, skb->len, USB_REQ_DATA_TX,
tx_urb_complete, skb);
- if (skb_queue_len(&usb->tx.station[sidx].data_list)
- <= 60) {
- block_queue(usb, usb->tx.station[sidx].mac,
- false);
- }
+ if (skb_queue_len(&tx->station[sidx].data_list) <= 60)
+ block_queue(usb, tx->station[sidx].mac, false);
}
- spin_unlock_irqrestore(&usb->tx.lock, flags);
+ spin_unlock_irqrestore(&tx->lock, flags);
}
static void handle_rx_packet(struct purelifi_usb *usb, const u8 *buffer,
@@ -179,18 +173,16 @@ static void rx_urb_complete(struct urb *urb)
dev_info(&usb->intf->dev,
"FIFO full not packet receipt\n");
tx->mac_fifo_full = 1;
- for (sidx = 0; sidx < MAX_STA_NUM; sidx++) {
- usb->tx.station[sidx].flag |=
- STATION_FIFO_FULL_FLAG;
- }
+ for (sidx = 0; sidx < MAX_STA_NUM; sidx++)
+ tx->station[sidx].flag |= STATION_FIFO_FULL_FLAG;
break;
case STATION_FIFO_ALMOST_FULL_MESSAGE:
dev_info(&usb->intf->dev, "FIFO full packet receipt\n");
for (sidx = 0; sidx < MAX_STA_NUM; sidx++)
- usb->tx.station[sidx].flag &= 0xFD;
+ tx->station[sidx].flag &= 0xFD;
- send_packet_from_data_queue(usb);
+ purelifi_send_packet_from_data_queue(usb);
break;
case STATION_CONNECT_MESSAGE:
fpga_link_connection_f = 1;
@@ -435,7 +427,7 @@ void tx_urb_complete(struct urb *urb)
}
purelifi_mac_tx_to_dev(skb, urb->status);
- send_packet_from_data_queue(usb);
+ purelifi_send_packet_from_data_queue(usb);
usb_free_urb(urb);
}
@@ -537,7 +529,7 @@ void purelifi_usb_release(struct purelifi_usb *usb)
/* FIXME: usb_interrupt, usb_tx, usb_rx? */
}
-const char *speed(enum usb_device_speed speed)
+const char *purelifi_speed(enum usb_device_speed speed)
{
switch (speed) {
case USB_SPEED_LOW:
@@ -1050,7 +1042,7 @@ static void slif_data_plane_sap_timer_callb(struct timer_list *t)
{
struct purelifi_usb *usb = from_timer(usb, t, tx.tx_retry_timer);
- send_packet_from_data_queue(usb);
+ purelifi_send_packet_from_data_queue(usb);
usb->tx.tx_retry_timer.expires = jiffies + TX_RETRY_BACKOFF_JIFF;
timer_setup(&usb->tx.tx_retry_timer,
slif_data_plane_sap_timer_callb, 0);
@@ -1060,19 +1052,17 @@ static void slif_data_plane_sap_timer_callb(struct timer_list *t)
static void sta_queue_cleanup_timer_callb(struct timer_list *t)
{
struct purelifi_usb *usb = from_timer(usb, t, sta_queue_cleanup);
+ struct purelifi_usb_tx *tx = &usb->tx;
int sidx;
for (sidx = 0; sidx < MAX_STA_NUM - 1; sidx++) {
- if (usb->tx.station[sidx].flag & STATION_CONNECTED_FLAG) {
- if (usb->tx.station[sidx].flag &
- STATION_HEARTBEAT_FLAG) {
- usb->tx.station[sidx].flag ^=
- STATION_HEARTBEAT_FLAG;
- } else {
- memset(usb->tx.station[sidx].mac, 0,
- ETH_ALEN);
- usb->tx.station[sidx].flag = 0;
- }
+ if (!(tx->station[sidx].flag & STATION_CONNECTED_FLAG))
+ continue;
+ if (tx->station[sidx].flag & STATION_HEARTBEAT_FLAG) {
+ tx->station[sidx].flag ^= STATION_HEARTBEAT_FLAG;
+ } else {
+ memset(tx->station[sidx].mac, 0, ETH_ALEN);
+ tx->station[sidx].flag = 0;
}
}
usb->sta_queue_cleanup.expires = jiffies + STA_QUEUE_CLEANUP_JIFF;
@@ -1231,8 +1221,9 @@ static int probe(struct usb_interface *intf,
const struct usb_device_id *id)
{
int r = 0;
- struct purelifi_usb *usb;
struct purelifi_chip *chip;
+ struct purelifi_usb *usb;
+ struct purelifi_usb_tx *tx;
struct ieee80211_hw *hw = NULL;
static unsigned char hw_address[ETH_ALEN];
static unsigned char serial_number[256];
@@ -1250,6 +1241,7 @@ static int probe(struct usb_interface *intf,
chip = &purelifi_hw_mac(hw)->chip;
usb = &chip->usb;
+ tx = &usb->tx;
r = upload_mac_and_serial_number(intf, hw_address, serial_number);
if (r) {
@@ -1284,8 +1276,8 @@ static int probe(struct usb_interface *intf,
goto error;
}
- usb->tx.mac_fifo_full = 0;
- spin_lock_init(&usb->tx.lock);
+ tx->mac_fifo_full = 0;
+ spin_lock_init(&tx->lock);
msleep(200);
r = purelifi_usb_init_hw(usb);
@@ -1320,19 +1312,17 @@ static int probe(struct usb_interface *intf,
/* Initialise the data plane Tx queue */
atomic_set(&data_queue_flag, 1);
for (i = 0; i < MAX_STA_NUM; i++) {
- skb_queue_head_init(&usb->tx.station[i].data_list);
- usb->tx.station[i].flag = 0;
+ skb_queue_head_init(&tx->station[i].data_list);
+ tx->station[i].flag = 0;
}
- usb->tx.station[STA_BROADCAST_INDEX].flag |=
- STATION_CONNECTED_FLAG;
+ tx->station[STA_BROADCAST_INDEX].flag |= STATION_CONNECTED_FLAG;
for (i = 0; i < ETH_ALEN; i++)
- usb->tx.station[STA_BROADCAST_INDEX].mac[i] = 0xFF;
+ tx->station[STA_BROADCAST_INDEX].mac[i] = 0xFF;
atomic_set(&data_queue_flag, 0);
- timer_setup(&usb->tx.tx_retry_timer,
- slif_data_plane_sap_timer_callb, 0);
- usb->tx.tx_retry_timer.expires = jiffies + TX_RETRY_BACKOFF_JIFF;
- add_timer(&usb->tx.tx_retry_timer);
+ timer_setup(&tx->tx_retry_timer, slif_data_plane_sap_timer_callb, 0);
+ tx->tx_retry_timer.expires = jiffies + TX_RETRY_BACKOFF_JIFF;
+ add_timer(&tx->tx_retry_timer);
timer_setup(&usb->sta_queue_cleanup,
sta_queue_cleanup_timer_callb, 0);
diff --git a/drivers/net/wireless/purelifi/usb.h b/drivers/net/wireless/purelifi/usb.h
index cc8f67cd7ad0..af37e7e9fa0a 100644
--- a/drivers/net/wireless/purelifi/usb.h
+++ b/drivers/net/wireless/purelifi/usb.h
@@ -136,7 +136,7 @@ static inline struct ieee80211_hw *purelifi_usb_to_hw(struct purelifi_usb
void purelifi_usb_init(struct purelifi_usb *usb, struct ieee80211_hw *hw,
struct usb_interface *intf);
-void send_packet_from_data_queue(struct purelifi_usb *usb);
+void purelifi_send_packet_from_data_queue(struct purelifi_usb *usb);
void purelifi_usb_release(struct purelifi_usb *usb);
void purelifi_usb_disable_rx(struct purelifi_usb *usb);
void purelifi_usb_enable_tx(struct purelifi_usb *usb);
@@ -144,5 +144,5 @@ void purelifi_usb_disable_tx(struct purelifi_usb *usb);
int purelifi_usb_tx(struct purelifi_usb *usb, struct sk_buff *skb);
int purelifi_usb_enable_rx(struct purelifi_usb *usb);
int purelifi_usb_init_hw(struct purelifi_usb *usb);
-const char *speed(enum usb_device_speed speed);
+const char *purelifi_speed(enum usb_device_speed speed);
#endif
next prev parent reply other threads:[~2020-10-16 8:58 UTC|newest]
Thread overview: 108+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20200924151910.21693-1-srini.raju@purelifi.com>
2020-09-28 10:19 ` [PATCH] [v2] wireless: Initial driver submission for pureLiFi devices Srinivasan Raju
2020-09-28 12:07 ` Joe Perches
2020-09-28 12:53 ` Srinivasan Raju
2020-09-30 5:16 ` Leon Romanovsky
2020-09-30 5:29 ` Srinivasan Raju
2020-09-30 8:01 ` Kalle Valo
2020-09-30 9:55 ` Leon Romanovsky
2020-09-30 10:11 ` Johannes Berg
2020-09-30 10:44 ` Leon Romanovsky
2020-10-16 8:23 ` Kalle Valo
2020-09-30 8:05 ` Kalle Valo
2020-09-30 10:04 ` Leon Romanovsky
2020-10-14 6:19 ` [PATCH] [PATCH] [v3] wireless: Initial driver submission for pureLiFi STA devices Srinivasan Raju
2020-10-14 10:17 ` kernel test robot
2020-10-15 22:35 ` Joe Perches
2020-10-16 6:36 ` Srinivasan Raju
2020-10-16 6:34 ` [PATCH] [v4] " Srinivasan Raju
2020-10-16 8:58 ` Joe Perches [this message]
2020-10-16 10:13 ` Srinivasan Raju
2020-10-19 3:17 ` [PATCH] [v5] " Srinivasan Raju
2020-10-19 4:55 ` Joe Perches
2020-10-19 6:05 ` Srinivasan Raju
2020-10-19 8:38 ` [PATCH] [v6] " Srinivasan Raju
2020-10-19 16:07 ` Krishna Chaitanya
2020-10-19 16:40 ` Srinivasan Raju
2020-10-19 16:54 ` Joe Perches
2020-10-19 17:05 ` Srinivasan Raju
2020-11-16 9:22 ` [PATCH] [v7] " Srinivasan Raju
2020-11-16 20:45 ` Joe Perches
2020-11-18 3:24 ` Srinivasan Raju
2020-11-24 14:44 ` Kalle Valo
[not found] ` <20201124144448.4E95EC43460@smtp.codeaurora.org>
2020-11-26 5:01 ` Srinivasan Raju
2020-12-03 4:43 ` Srinivasan Raju
2020-12-03 15:58 ` Kalle Valo
2020-12-03 16:50 ` Srinivasan Raju
2020-12-19 13:15 ` Kalle Valo
2020-12-03 4:38 ` [PATCH] [v8] " Srinivasan Raju
2020-12-03 5:09 ` [PATCH] [v9] " Srinivasan Raju
2020-12-03 7:53 ` Joe Perches
2020-12-08 5:53 ` [PATCH] [v10] " Srinivasan Raju
2020-12-08 11:57 ` [PATCH] [v11] " Srinivasan Raju
2020-12-08 14:37 ` Kalle Valo
2020-12-19 12:51 ` Kalle Valo
2020-12-19 13:06 ` Kalle Valo
2020-12-19 13:14 ` Kalle Valo
2020-12-21 5:52 ` Srinivasan Raju
2020-12-21 5:57 ` Kalle Valo
2021-01-15 12:13 ` Srinivasan Raju
2021-01-05 13:19 ` [PATCH] [PATCH] [v12] " Srinivasan Raju
2021-02-12 11:49 ` [PATCH] [v13] " Srinivasan Raju
2021-02-12 13:44 ` Johannes Berg
2021-02-17 10:05 ` Kalle Valo
2021-02-19 5:15 ` Srinivasan Raju
2021-02-19 8:25 ` Johannes Berg
2021-02-24 10:41 ` Srinivasan Raju
2021-02-12 15:06 ` kernel test robot
2021-02-12 17:57 ` kernel test robot
2021-02-17 10:02 ` Kalle Valo
2021-02-17 10:13 ` Kalle Valo
2021-02-17 10:16 ` Srinivasan Raju
2021-02-17 10:09 ` Kalle Valo
2021-02-17 10:19 ` Kalle Valo
2021-02-24 10:44 ` Srinivasan Raju
2021-02-26 13:07 ` [PATCH] [v14] " Srinivasan Raju
2021-04-19 11:52 ` Srinivasan Raju
2021-08-10 13:02 ` Srinivasan Raju
2021-08-21 13:42 ` Kalle Valo
2021-08-18 14:13 ` [PATCH] [v15] " Srinivasan Raju
2021-09-20 13:05 ` Kalle Valo
[not found] ` <CWLP265MB3217BB5AA5F102629A3AD204E0A19@CWLP265MB3217.GBRP265.PROD.OUTLOOK.COM>
2021-09-21 12:30 ` [EXTERNAL] " Kalle Valo
2021-09-22 7:33 ` Johannes Berg
2021-09-24 13:27 ` [EXTERNAL] " Srinivasan Raju
2021-09-20 14:11 ` Kalle Valo
2021-09-24 11:11 ` Kalle Valo
2021-09-24 13:26 ` [PATCH] [v16] wireless: Initial driver submission for pureLiFi LiFi Station Srinivasan Raju
2021-09-24 13:40 ` Kalle Valo
2021-10-05 11:22 ` [PATCH] [v17] wireless: Initial driver submission for pureLiFi STA devices Srinivasan Raju
2021-10-05 11:26 ` Johannes Berg
2021-10-05 12:30 ` [PATCH] [v18 1/2] nl80211: Add LC placeholder band definition to enum nl80211_band Srinivasan Raju
2021-10-05 12:31 ` [PATCH] [v18 2/2] wireless: Initial driver submission for pureLiFi STA devices Srinivasan Raju
2021-10-05 22:09 ` Jeff Johnson
2021-10-06 10:04 ` [PATCH] [v19 " Srinivasan Raju
2021-10-11 6:16 ` Kalle Valo
2021-10-12 12:50 ` [PATCH 0/2] wireless: New Driver " Srinivasan Raju
2021-10-12 12:50 ` [PATCH 1/2] [v19 1/2] nl80211: Add LC placeholder band definition to enum nl80211_band Srinivasan Raju
2021-10-12 12:50 ` [PATCH 2/2] [v19 2/2] wireless: Initial driver submission for pureLiFi STA devices Srinivasan Raju
2021-10-14 6:03 ` kernel test robot
2021-10-24 17:58 ` kernel test robot
2021-10-18 10:00 ` [PATCH v20 0/2] wireless: New Driver " Srinivasan Raju
2021-10-18 10:00 ` [PATCH v20 1/2] nl80211: Add LC placeholder band definition to nl80211_band Srinivasan Raju
2021-10-18 10:00 ` [PATCH v20 2/2] wireless: Initial driver submission for pureLiFi STA devices Srinivasan Raju
2021-10-25 9:59 ` Kari Argillander
[not found] ` <CWLP265MB321780AB502EF147F6AAF197E0839@CWLP265MB3217.GBRP265.PROD.OUTLOOK.COM>
2021-10-25 12:17 ` [EXTERNAL] " Kalle Valo
2021-10-27 11:34 ` kernel test robot
2021-10-27 12:38 ` Kari Argillander
2021-10-28 7:24 ` Kalle Valo
2021-10-31 13:10 ` [PATCH v21 0/2] wireless: New Driver " Srinivasan Raju
2021-10-31 13:10 ` [PATCH 1/2] nl80211: Add LC placeholder band definition to nl80211_band Srinivasan Raju
2021-10-31 13:10 ` [PATCH 2/2] wireless: Initial driver submission for pureLiFi STA devices Srinivasan Raju
2021-12-20 19:13 ` Kalle Valo
2022-02-24 15:35 ` Kalle Valo
2022-02-24 18:20 ` [PATCH v22 0/2] wireless: New Driver " Srinivasan Raju
2022-02-24 18:20 ` [PATCH v22 1/2] nl80211: Add LC placeholder band definition to nl80211_band Srinivasan Raju
2022-02-25 9:52 ` Kalle Valo
2022-02-24 18:20 ` [PATCH v22 1/2] wireless: Initial driver submission for pureLiFi STA devices Srinivasan Raju
2022-04-25 13:06 ` Kalle Valo
[not found] ` <CWLP265MB32173F6188304F6B2CB90C79E0F89@CWLP265MB3217.GBRP265.PROD.OUTLOOK.COM>
2022-04-26 4:17 ` [EXTERNAL] " Kalle Valo
2022-04-27 4:55 ` Kalle Valo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4676eb63d9aa5b9e532b580bd491527d9ed08535.camel@perches.com \
--to=joe@perches.com \
--cc=davem@davemloft.net \
--cc=kuba@kernel.org \
--cc=kvalo@codeaurora.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=lukas.bulwahn@gmail.com \
--cc=mchehab+huawei@kernel.org \
--cc=mostafa.afgani@purelifi.com \
--cc=netdev@vger.kernel.org \
--cc=robh@kernel.org \
--cc=srini.raju@purelifi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).