2015-01-21 11:12:57

by Avinash Patil

[permalink] [raw]
Subject: [PATCH 1/3] mwifiex: add support for SD8801

From: Yogesh Ashok Powar <[email protected]>

SD8801 is Marvell's 1x1 802.11bgn offering.
This patch adds Device IDs for SD8801 and also defines card
structure which has definition for register offsets, buffer sizes etc.

Signed-off-by: Yogesh Ashok Powar <[email protected]>
Signed-off-by: Avinash Patil <[email protected]>
Signed-off-by: Nishant Sarmukadam <[email protected]>
Signed-off-by: Cathy Luo <[email protected]>
Signed-off-by: Frank Huang <[email protected]>
---
drivers/net/wireless/mwifiex/sdio.c | 5 +++++
drivers/net/wireless/mwifiex/sdio.h | 15 +++++++++++++++
2 files changed, 20 insertions(+)

diff --git a/drivers/net/wireless/mwifiex/sdio.c b/drivers/net/wireless/mwifiex/sdio.c
index a70f1033..cee107f 100644
--- a/drivers/net/wireless/mwifiex/sdio.c
+++ b/drivers/net/wireless/mwifiex/sdio.c
@@ -282,6 +282,9 @@ static int mwifiex_sdio_suspend(struct device *dev)
#define SDIO_DEVICE_ID_MARVELL_8897 (0x912d)
/* Device ID for SD8887 */
#define SDIO_DEVICE_ID_MARVELL_8887 (0x9135)
+/* Device ID for SD8801 */
+#define SDIO_DEVICE_ID_MARVELL_8801 (0x9139)
+

/* WLAN IDs */
static const struct sdio_device_id mwifiex_ids[] = {
@@ -295,6 +298,8 @@ static const struct sdio_device_id mwifiex_ids[] = {
.driver_data = (unsigned long) &mwifiex_sdio_sd8897},
{SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_8887),
.driver_data = (unsigned long)&mwifiex_sdio_sd8887},
+ {SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_8801),
+ .driver_data = (unsigned long)&mwifiex_sdio_sd8801},
{},
};

diff --git a/drivers/net/wireless/mwifiex/sdio.h b/drivers/net/wireless/mwifiex/sdio.h
index 895eea0..a4bb0db 100644
--- a/drivers/net/wireless/mwifiex/sdio.h
+++ b/drivers/net/wireless/mwifiex/sdio.h
@@ -34,6 +34,7 @@
#define SD8797_DEFAULT_FW_NAME "mrvl/sd8797_uapsta.bin"
#define SD8897_DEFAULT_FW_NAME "mrvl/sd8897_uapsta.bin"
#define SD8887_DEFAULT_FW_NAME "mrvl/sd8887_uapsta.bin"
+#define SD8801_DEFAULT_FW_NAME "mrvl/sd8801_uapsta.bin"

#define BLOCK_MODE 1
#define BYTE_MODE 0
@@ -474,6 +475,20 @@ static const struct mwifiex_sdio_device mwifiex_sdio_sd8887 = {
.auto_tdls = true,
};

+static const struct mwifiex_sdio_device mwifiex_sdio_sd8801 = {
+ .firmware = SD8801_DEFAULT_FW_NAME,
+ .reg = &mwifiex_reg_sd87xx,
+ .max_ports = 16,
+ .mp_agg_pkt_limit = 8,
+ .supports_sdio_new_mode = false,
+ .has_control_mask = true,
+ .tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K,
+ .mp_tx_agg_buf_size = MWIFIEX_MP_AGGR_BUF_SIZE_16K,
+ .mp_rx_agg_buf_size = MWIFIEX_MP_AGGR_BUF_SIZE_16K,
+ .supports_fw_dump = false,
+ .auto_tdls = false,
+};
+
/*
* .cmdrsp_complete handler
*/
--
1.8.1.4



2015-01-21 16:36:36

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH 3/3] mwifiex: selectively choose ext_scan support

On Wed, 2015-01-21 at 17:35 +0100, Johannes Berg wrote:
> On Wed, 2015-01-21 at 22:12 +0530, Avinash Patil wrote:
>
> > + u8 ext_scan_support;
>
> bool.

Oh, there are also two more places it seems :)

johannes


2015-01-23 04:51:45

by Avinash Patil

[permalink] [raw]
Subject: Re: [PATCH 3/3] mwifiex: selectively choose ext_scan support

Hi James/Johannes,
On Wed, 2015-01-21 at 12:11 -0800, James Cameron wrote:
> On Wed, Jan 21, 2015 at 10:12:11PM +0530, Avinash Patil wrote:
> > @@ -256,6 +256,7 @@ struct sdio_mmc_card {
> >
> > u8 *mp_regs;
> > u8 auto_tdls;
> > + u8 ext_scan;
>
> Why not same name as below?
>
> > @@ -273,6 +274,7 @@ struct mwifiex_sdio_device {
> > u32 mp_tx_agg_buf_size;
> > u32 mp_rx_agg_buf_size;
> > u8 auto_tdls;
> > + u8 ext_scan_support;
>
> > @@ -206,6 +206,7 @@ struct mwifiex_pcie_device {
> > u16 blksz_fw_dl;
> > u16 tx_buf_size;
> > bool supports_fw_dump;
> > + u8 ext_scan_support;
>
> Not consistent name style with other support variable above. Perhaps
> should be support_ext_scan.
>
> Long variable names for all support variables, perhaps should use:
>
> - supports_sdio_new_mode
> + can_sdio_new
>
> - supports_fw_dump
> + can_dump
>
> - supports_ext_scan
> + can_ext_scan
>

Thanks for reviewing patches. I will send v2 with naming convention and
data types fixes.

Thanks,
Avinash


2015-01-21 11:13:50

by Avinash Patil

[permalink] [raw]
Subject: [PATCH 3/3] mwifiex: selectively choose ext_scan support

Some devices do not support extended scan.
This patch adds support to enable ext_scan selectively.
For SD/PCIe interfaces, deefine ext_scan_support as part of
card structure and use it to initialize ext_scan in adapter
during registering device. For USB interfaces, we initialize
ext_scan during register_dev handler.

Signed-off-by: Yogesh Ashok Powar <[email protected]>
Signed-off-by: Avinash Patil <[email protected]>
---
drivers/net/wireless/mwifiex/init.c | 2 +-
drivers/net/wireless/mwifiex/pcie.c | 2 ++
drivers/net/wireless/mwifiex/pcie.h | 3 +++
drivers/net/wireless/mwifiex/sdio.c | 2 ++
drivers/net/wireless/mwifiex/sdio.h | 8 ++++++++
drivers/net/wireless/mwifiex/usb.c | 3 +++
6 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/mwifiex/init.c b/drivers/net/wireless/mwifiex/init.c
index b115e0f..8004d14 100644
--- a/drivers/net/wireless/mwifiex/init.c
+++ b/drivers/net/wireless/mwifiex/init.c
@@ -294,7 +294,7 @@ static void mwifiex_init_adapter(struct mwifiex_adapter *adapter)
memset(&adapter->arp_filter, 0, sizeof(adapter->arp_filter));
adapter->arp_filter_size = 0;
adapter->max_mgmt_ie_index = MAX_MGMT_IE_INDEX;
- adapter->ext_scan = true;
+ adapter->ext_scan = false;
adapter->key_api_major_ver = 0;
adapter->key_api_minor_ver = 0;

diff --git a/drivers/net/wireless/mwifiex/pcie.c b/drivers/net/wireless/mwifiex/pcie.c
index a460b0e..824a78b 100644
--- a/drivers/net/wireless/mwifiex/pcie.c
+++ b/drivers/net/wireless/mwifiex/pcie.c
@@ -204,6 +204,7 @@ static int mwifiex_pcie_probe(struct pci_dev *pdev,
card->pcie.blksz_fw_dl = data->blksz_fw_dl;
card->pcie.tx_buf_size = data->tx_buf_size;
card->pcie.supports_fw_dump = data->supports_fw_dump;
+ card->pcie.ext_scan_support = data->ext_scan_support;
}

if (mwifiex_add_card(card, &add_remove_card_sem, &pcie_ops,
@@ -2563,6 +2564,7 @@ static int mwifiex_register_dev(struct mwifiex_adapter *adapter)
adapter->mem_type_mapping_tbl = mem_type_mapping_tbl;
adapter->num_mem_types = ARRAY_SIZE(mem_type_mapping_tbl);
strcpy(adapter->fw_name, card->pcie.firmware);
+ adapter->ext_scan = card->pcie.ext_scan_support;

return 0;
}
diff --git a/drivers/net/wireless/mwifiex/pcie.h b/drivers/net/wireless/mwifiex/pcie.h
index 200e8b0..295e66b 100644
--- a/drivers/net/wireless/mwifiex/pcie.h
+++ b/drivers/net/wireless/mwifiex/pcie.h
@@ -206,6 +206,7 @@ struct mwifiex_pcie_device {
u16 blksz_fw_dl;
u16 tx_buf_size;
bool supports_fw_dump;
+ u8 ext_scan_support;
};

static const struct mwifiex_pcie_device mwifiex_pcie8766 = {
@@ -214,6 +215,7 @@ static const struct mwifiex_pcie_device mwifiex_pcie8766 = {
.blksz_fw_dl = MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD,
.tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K,
.supports_fw_dump = false,
+ .ext_scan_support = true,
};

static const struct mwifiex_pcie_device mwifiex_pcie8897 = {
@@ -222,6 +224,7 @@ static const struct mwifiex_pcie_device mwifiex_pcie8897 = {
.blksz_fw_dl = MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD,
.tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_4K,
.supports_fw_dump = true,
+ .ext_scan_support = true,
};

struct mwifiex_evt_buf_desc {
diff --git a/drivers/net/wireless/mwifiex/sdio.c b/drivers/net/wireless/mwifiex/sdio.c
index cee107f..01c157d 100644
--- a/drivers/net/wireless/mwifiex/sdio.c
+++ b/drivers/net/wireless/mwifiex/sdio.c
@@ -107,6 +107,7 @@ mwifiex_sdio_probe(struct sdio_func *func, const struct sdio_device_id *id)
card->mp_rx_agg_buf_size = data->mp_rx_agg_buf_size;
card->supports_fw_dump = data->supports_fw_dump;
card->auto_tdls = data->auto_tdls;
+ card->ext_scan = data->ext_scan_support;
}

sdio_claim_host(func);
@@ -1887,6 +1888,7 @@ static int mwifiex_init_sdio(struct mwifiex_adapter *adapter)
}

adapter->auto_tdls = card->auto_tdls;
+ adapter->ext_scan = card->ext_scan;
return ret;
}

diff --git a/drivers/net/wireless/mwifiex/sdio.h b/drivers/net/wireless/mwifiex/sdio.h
index a4bb0db..1d58f25 100644
--- a/drivers/net/wireless/mwifiex/sdio.h
+++ b/drivers/net/wireless/mwifiex/sdio.h
@@ -256,6 +256,7 @@ struct sdio_mmc_card {

u8 *mp_regs;
u8 auto_tdls;
+ u8 ext_scan;

struct mwifiex_sdio_mpa_tx mpa_tx;
struct mwifiex_sdio_mpa_rx mpa_rx;
@@ -273,6 +274,7 @@ struct mwifiex_sdio_device {
u32 mp_tx_agg_buf_size;
u32 mp_rx_agg_buf_size;
u8 auto_tdls;
+ u8 ext_scan_support;
};

static const struct mwifiex_sdio_card_reg mwifiex_reg_sd87xx = {
@@ -417,6 +419,7 @@ static const struct mwifiex_sdio_device mwifiex_sdio_sd8786 = {
.mp_rx_agg_buf_size = MWIFIEX_MP_AGGR_BUF_SIZE_16K,
.supports_fw_dump = false,
.auto_tdls = false,
+ .ext_scan_support = false,
};

static const struct mwifiex_sdio_device mwifiex_sdio_sd8787 = {
@@ -431,6 +434,7 @@ static const struct mwifiex_sdio_device mwifiex_sdio_sd8787 = {
.mp_rx_agg_buf_size = MWIFIEX_MP_AGGR_BUF_SIZE_16K,
.supports_fw_dump = false,
.auto_tdls = false,
+ .ext_scan_support = true,
};

static const struct mwifiex_sdio_device mwifiex_sdio_sd8797 = {
@@ -445,6 +449,7 @@ static const struct mwifiex_sdio_device mwifiex_sdio_sd8797 = {
.mp_rx_agg_buf_size = MWIFIEX_MP_AGGR_BUF_SIZE_16K,
.supports_fw_dump = false,
.auto_tdls = false,
+ .ext_scan_support = true,
};

static const struct mwifiex_sdio_device mwifiex_sdio_sd8897 = {
@@ -459,6 +464,7 @@ static const struct mwifiex_sdio_device mwifiex_sdio_sd8897 = {
.mp_rx_agg_buf_size = MWIFIEX_MP_AGGR_BUF_SIZE_32K,
.supports_fw_dump = true,
.auto_tdls = false,
+ .ext_scan_support = true,
};

static const struct mwifiex_sdio_device mwifiex_sdio_sd8887 = {
@@ -473,6 +479,7 @@ static const struct mwifiex_sdio_device mwifiex_sdio_sd8887 = {
.mp_rx_agg_buf_size = MWIFIEX_MP_AGGR_BUF_SIZE_32K,
.supports_fw_dump = false,
.auto_tdls = true,
+ .ext_scan_support = true,
};

static const struct mwifiex_sdio_device mwifiex_sdio_sd8801 = {
@@ -487,6 +494,7 @@ static const struct mwifiex_sdio_device mwifiex_sdio_sd8801 = {
.mp_rx_agg_buf_size = MWIFIEX_MP_AGGR_BUF_SIZE_16K,
.supports_fw_dump = false,
.auto_tdls = false,
+ .ext_scan_support = true,
};

/*
diff --git a/drivers/net/wireless/mwifiex/usb.c b/drivers/net/wireless/mwifiex/usb.c
index 50517b7..2238730 100644
--- a/drivers/net/wireless/mwifiex/usb.c
+++ b/drivers/net/wireless/mwifiex/usb.c
@@ -799,16 +799,19 @@ static int mwifiex_register_dev(struct mwifiex_adapter *adapter)
case USB8897_PID_2:
adapter->tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_4K;
strcpy(adapter->fw_name, USB8897_DEFAULT_FW_NAME);
+ adapter->ext_scan = true;
break;
case USB8766_PID_1:
case USB8766_PID_2:
adapter->tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K;
strcpy(adapter->fw_name, USB8766_DEFAULT_FW_NAME);
+ adapter->ext_scan = true;
break;
case USB8801_PID_1:
case USB8801_PID_2:
adapter->tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K;
strcpy(adapter->fw_name, USB8801_DEFAULT_FW_NAME);
+ adapter->ext_scan = false;
break;
case USB8797_PID_1:
case USB8797_PID_2:
--
1.8.1.4


2015-01-23 05:11:24

by Avinash Patil

[permalink] [raw]
Subject: Re: [PATCH 3/3] mwifiex: selectively choose ext_scan support

On Wed, 2015-01-21 at 08:36 -0800, Johannes Berg wrote:
> On Wed, 2015-01-21 at 17:35 +0100, Johannes Berg wrote:
> > On Wed, 2015-01-21 at 22:12 +0530, Avinash Patil wrote:
> >
> > > + u8 ext_scan_support;
> >
> > bool.
>
> Oh, there are also two more places it seems :)
>
> johannes
>
Hmm..:)
I will send another follow-up patch to fix this later.

Thanks,
Avinash


2015-01-21 11:13:21

by Avinash Patil

[permalink] [raw]
Subject: [PATCH 2/3] mwifiex: add support for USB8801

From: Yogesh Ashok Powar <[email protected]>

USB8801 is Marvell's 1x1 802.11bgn offering.
Patch adds Device IDs support and defines TX buffer size.

Signed-off-by: Yogesh Ashok Powar <[email protected]>
Signed-off-by: Avinash Patil <[email protected]>
Signed-off-by: Nishant Sarmukadam <[email protected]>
Signed-off-by: Cathy Luo <[email protected]>
Signed-off-by: Frank Huang <[email protected]>
---
drivers/net/wireless/mwifiex/usb.c | 13 +++++++++++++
drivers/net/wireless/mwifiex/usb.h | 4 ++++
2 files changed, 17 insertions(+)

diff --git a/drivers/net/wireless/mwifiex/usb.c b/drivers/net/wireless/mwifiex/usb.c
index 6c62995..50517b7 100644
--- a/drivers/net/wireless/mwifiex/usb.c
+++ b/drivers/net/wireless/mwifiex/usb.c
@@ -37,6 +37,11 @@ static struct usb_device_id mwifiex_usb_table[] = {
{USB_DEVICE_AND_INTERFACE_INFO(USB8XXX_VID, USB8797_PID_2,
USB_CLASS_VENDOR_SPEC,
USB_SUBCLASS_VENDOR_SPEC, 0xff)},
+ /* 8801 */
+ {USB_DEVICE(USB8XXX_VID, USB8801_PID_1)},
+ {USB_DEVICE_AND_INTERFACE_INFO(USB8XXX_VID, USB8801_PID_2,
+ USB_CLASS_VENDOR_SPEC,
+ USB_SUBCLASS_VENDOR_SPEC, 0xff)},
/* 8897 */
{USB_DEVICE(USB8XXX_VID, USB8897_PID_1)},
{USB_DEVICE_AND_INTERFACE_INFO(USB8XXX_VID, USB8897_PID_2,
@@ -361,11 +366,13 @@ static int mwifiex_usb_probe(struct usb_interface *intf,
switch (id_product) {
case USB8766_PID_1:
case USB8797_PID_1:
+ case USB8801_PID_1:
case USB8897_PID_1:
card->usb_boot_state = USB8XXX_FW_DNLD;
break;
case USB8766_PID_2:
case USB8797_PID_2:
+ case USB8801_PID_2:
case USB8897_PID_2:
card->usb_boot_state = USB8XXX_FW_READY;
break;
@@ -798,6 +805,11 @@ static int mwifiex_register_dev(struct mwifiex_adapter *adapter)
adapter->tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K;
strcpy(adapter->fw_name, USB8766_DEFAULT_FW_NAME);
break;
+ case USB8801_PID_1:
+ case USB8801_PID_2:
+ adapter->tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K;
+ strcpy(adapter->fw_name, USB8801_DEFAULT_FW_NAME);
+ break;
case USB8797_PID_1:
case USB8797_PID_2:
default:
@@ -1083,4 +1095,5 @@ MODULE_VERSION(USB_VERSION);
MODULE_LICENSE("GPL v2");
MODULE_FIRMWARE(USB8766_DEFAULT_FW_NAME);
MODULE_FIRMWARE(USB8797_DEFAULT_FW_NAME);
+MODULE_FIRMWARE(USB8801_DEFAULT_FW_NAME);
MODULE_FIRMWARE(USB8897_DEFAULT_FW_NAME);
diff --git a/drivers/net/wireless/mwifiex/usb.h b/drivers/net/wireless/mwifiex/usb.h
index 0ad1beb..57e1a57 100644
--- a/drivers/net/wireless/mwifiex/usb.h
+++ b/drivers/net/wireless/mwifiex/usb.h
@@ -30,6 +30,9 @@
#define USB8797_PID_2 0x2044
#define USB8897_PID_1 0x2045
#define USB8897_PID_2 0x2046
+#define USB8801_PID_1 0x2049
+#define USB8801_PID_2 0x204a
+

#define USB8XXX_FW_DNLD 1
#define USB8XXX_FW_READY 2
@@ -41,6 +44,7 @@

#define USB8766_DEFAULT_FW_NAME "mrvl/usb8766_uapsta.bin"
#define USB8797_DEFAULT_FW_NAME "mrvl/usb8797_uapsta.bin"
+#define USB8801_DEFAULT_FW_NAME "mrvl/usb8801_uapsta.bin"
#define USB8897_DEFAULT_FW_NAME "mrvl/usb8897_uapsta.bin"

#define FW_DNLD_TX_BUF_SIZE 620
--
1.8.1.4


2015-01-21 16:36:02

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH 3/3] mwifiex: selectively choose ext_scan support

On Wed, 2015-01-21 at 22:12 +0530, Avinash Patil wrote:

> + u8 ext_scan_support;

bool.

johannes


2015-01-21 20:20:43

by James Cameron

[permalink] [raw]
Subject: Re: [PATCH 3/3] mwifiex: selectively choose ext_scan support

On Wed, Jan 21, 2015 at 10:12:11PM +0530, Avinash Patil wrote:
> @@ -256,6 +256,7 @@ struct sdio_mmc_card {
>
> u8 *mp_regs;
> u8 auto_tdls;
> + u8 ext_scan;

Why not same name as below?

> @@ -273,6 +274,7 @@ struct mwifiex_sdio_device {
> u32 mp_tx_agg_buf_size;
> u32 mp_rx_agg_buf_size;
> u8 auto_tdls;
> + u8 ext_scan_support;

> @@ -206,6 +206,7 @@ struct mwifiex_pcie_device {
> u16 blksz_fw_dl;
> u16 tx_buf_size;
> bool supports_fw_dump;
> + u8 ext_scan_support;

Not consistent name style with other support variable above. Perhaps
should be support_ext_scan.

Long variable names for all support variables, perhaps should use:

- supports_sdio_new_mode
+ can_sdio_new

- supports_fw_dump
+ can_dump

- supports_ext_scan
+ can_ext_scan

--
James Cameron
http://quozl.linux.org.au/