diff mbox

[3.13.1,1/9] rsi: Add RS9113 driver

Message ID 52EA7584.4040508@redpinesignals.com (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Jahnavi Jan. 30, 2014, 3:53 p.m. UTC
From: Jahnavi Meher <jahnavi.meher@redpinesignals.com>

This driver supports the RS9113 chipset from Redpine Signals Inc. This
chipset supports the 802.11a/b/g/n standards, but this driver currently
supports only b/g/n. Both SDIO and USB interfaces are supported. Can be
upgraded to 91x quite easily. More information can be found at:
http://www.redpinesignals.com/Technologies_&_Chipsets/Chipsets/RS9113.php

Signed-off-by: Jahnavi Meher <jahnavi.meher@redpinesignals.com>
---

Kconfig                      |    1
Makefile                     |    1
rsi/Kconfig                  |   33 +++++
rsi/Makefile                 |    1
rsi/include/rsi_device_ops.h |  121 +++++++++++++++++++++
rsi/include/rsi_hw_intf.h    |  173 ++++++++++++++++++++++++++++++
rsi/include/rsi_mac80211.h   |  154 ++++++++++++++++++++++++++
rsi/include/rsi_main.h       |  110 +++++++++++++++++++
rsi/include/rsi_mgmt.h       |  246 +++++++++++++++++++++++++++++++++++++++++++
9 files changed, 840 insertions(+)



--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Johannes Berg Jan. 30, 2014, 4:18 p.m. UTC | #1
On Thu, 2014-01-30 at 21:23 +0530, Jahnavi wrote:
> From: Jahnavi Meher <jahnavi.meher@redpinesignals.com>
> 
> This driver supports the RS9113 chipset from Redpine Signals Inc. This
> chipset supports the 802.11a/b/g/n standards, but this driver currently
> supports only b/g/n. Both SDIO and USB interfaces are supported. Can be
> upgraded to 91x quite easily. More information can be found at:
> http://www.redpinesignals.com/Technologies_&_Chipsets/Chipsets/RS9113.php

You should probably propose it for staging... let me take a few minutes
and make a quick review pass.

> +/**
> + * @file rsi_device_ops.h
> + * @author
> + * @version 1.0
> + *
> + * @section LICENSE

Those lines are all useless

> + * Copyright (c) 2013 Redpine Signals Inc.

It's 2014 now, surely you want to claim copyright this year?

> + * @section DESCRIPTION

That's unnecessary.

> + * This file contians the data structures and variables/ macros commonly

contains

> +#define RSI_HEADER_SIZE                 18

That should probably be some struct, and the define doing sizeof()?

> +static inline unsigned int rsi_get_queueno(unsigned char *addr,
> +					   unsigned short offset)
> +{
> +	return (le16_to_cpu(*(unsigned short *)&addr[offset]) & 0x7000) >> 12;

> +static inline unsigned int rsi_get_length(unsigned char *addr,
> +					  unsigned short offset)

> +static inline unsigned char rsi_get_extended_desc(unsigned char *addr,
> +						  unsigned short offset)

> +static inline unsigned char rsi_get_rssi(unsigned char *addr)

> +static inline unsigned char rsi_get_channel(unsigned char *addr)

These seem like they should then just be replaced by

	some_struct_ptr->rssi

and similar?

> +int rsi_send_ampdu_indication_frame(struct rsi_common *common,
> +				    unsigned short tid,
> +				    unsigned short ssn, unsigned char buf_size,
> +				    unsigned char event);

what are "A-MPDU indication frame[s]"?

> +#ifdef USE_USB_INTF

Shouldn't that be just CONFIG_RSI_SOMETHING?

> +typedef void (*SD_INTERRUPT)(void *pcontext);

no typedefs please

> +#define SDIO_BLOCK_SIZE                         256

Seems like there should be a define for that already?


> +++ b/drivers/net/wireless/rsi/include/rsi_mac80211.h	2014-01-30 16:01:00.194777922 +0530

> +static const struct ieee80211_channel rsi_2ghz_channels[] = {

> +static const struct ieee80211_channel rsi_5ghz_channels[] = {

> +static struct ieee80211_rate rsi_rates[] = {

> +static const unsigned short rsi_mcsrates[] = {

None of this belongs into a header file.

> + * This file contians the os dependent( Linux) specific function prototypes
> + * and macros

That kind of thing is generally frowned upon.

> +void rsi_print(int zone, unsigned char *vdata, int len);

Unless it's more than just a simple printk wrapper?

> +struct module_ps_config {
> +	unsigned int not_in_use:1;
> +	unsigned int clock_gate:1;
> +	unsigned int logical_prgm:1;
> +	unsigned int logical_poweroff:1;
> +	unsigned int power_off:1;
> +	unsigned int resvd:27;
> +};

Uh, no, you can't use bitfields in hardware/firmware communication
structs. They also need to be __packed, in most cases.

> +struct rsi_mac_frame {

All those unions seem a bit ... overblown? Probably better to define
separate structs for different usages and cast appropriately.

johannes

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jahnavi Jan. 31, 2014, 10:52 a.m. UTC | #2
Hi Johannes, 
Thank you for the review comments, will make the changes
as you have suggested. A-MPDU indication frames are sent 
to the firmware to start/stop tx/rx ampdu aggregation.

Regards,
Jahnavi

On 01/30/2014 09:48 PM, Johannes Berg wrote:
> On Thu, 2014-01-30 at 21:23 +0530, Jahnavi wrote:
>> From: Jahnavi Meher <jahnavi.meher@redpinesignals.com>
>>
>> This driver supports the RS9113 chipset from Redpine Signals Inc. This
>> chipset supports the 802.11a/b/g/n standards, but this driver currently
>> supports only b/g/n. Both SDIO and USB interfaces are supported. Can be
>> upgraded to 91x quite easily. More information can be found at:
>> http://www.redpinesignals.com/Technologies_&_Chipsets/Chipsets/RS9113.php
> You should probably propose it for staging... let me take a few minutes
> and make a quick review pass.
>
>> +/**
>> + * @file rsi_device_ops.h
>> + * @author
>> + * @version 1.0
>> + *
>> + * @section LICENSE
> Those lines are all useless
>
>> + * Copyright (c) 2013 Redpine Signals Inc.
> It's 2014 now, surely you want to claim copyright this year?
>
>> + * @section DESCRIPTION
> That's unnecessary.
>
>> + * This file contians the data structures and variables/ macros commonly
> contains
>
>> +#define RSI_HEADER_SIZE                 18
> That should probably be some struct, and the define doing sizeof()?
>
>> +static inline unsigned int rsi_get_queueno(unsigned char *addr,
>> +					   unsigned short offset)
>> +{
>> +	return (le16_to_cpu(*(unsigned short *)&addr[offset]) & 0x7000) >> 12;
>> +static inline unsigned int rsi_get_length(unsigned char *addr,
>> +					  unsigned short offset)
>> +static inline unsigned char rsi_get_extended_desc(unsigned char *addr,
>> +						  unsigned short offset)
>> +static inline unsigned char rsi_get_rssi(unsigned char *addr)
>> +static inline unsigned char rsi_get_channel(unsigned char *addr)
> These seem like they should then just be replaced by
>
> 	some_struct_ptr->rssi
>
> and similar?
>
>> +int rsi_send_ampdu_indication_frame(struct rsi_common *common,
>> +				    unsigned short tid,
>> +				    unsigned short ssn, unsigned char buf_size,
>> +				    unsigned char event);
> what are "A-MPDU indication frame[s]"?
>
>> +#ifdef USE_USB_INTF
> Shouldn't that be just CONFIG_RSI_SOMETHING?
>
>> +typedef void (*SD_INTERRUPT)(void *pcontext);
> no typedefs please
>
>> +#define SDIO_BLOCK_SIZE                         256
> Seems like there should be a define for that already?
>
>
>> +++ b/drivers/net/wireless/rsi/include/rsi_mac80211.h	2014-01-30 16:01:00.194777922 +0530
>> +static const struct ieee80211_channel rsi_2ghz_channels[] = {
>> +static const struct ieee80211_channel rsi_5ghz_channels[] = {
>> +static struct ieee80211_rate rsi_rates[] = {
>> +static const unsigned short rsi_mcsrates[] = {
> None of this belongs into a header file.
>
>> + * This file contians the os dependent( Linux) specific function prototypes
>> + * and macros
> That kind of thing is generally frowned upon.
>
>> +void rsi_print(int zone, unsigned char *vdata, int len);
> Unless it's more than just a simple printk wrapper?
>
>> +struct module_ps_config {
>> +	unsigned int not_in_use:1;
>> +	unsigned int clock_gate:1;
>> +	unsigned int logical_prgm:1;
>> +	unsigned int logical_poweroff:1;
>> +	unsigned int power_off:1;
>> +	unsigned int resvd:27;
>> +};
> Uh, no, you can't use bitfields in hardware/firmware communication
> structs. They also need to be __packed, in most cases.
>
>> +struct rsi_mac_frame {
> All those unions seem a bit ... overblown? Probably better to define
> separate structs for different usages and cast appropriately.
>
> johannes
>
>
>


--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff -uprN a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig
--- a/drivers/net/wireless/Kconfig	2014-01-30 15:53:42.066094019 +0530
+++ b/drivers/net/wireless/Kconfig	2014-01-30 16:01:00.131769914 +0530
@@ -281,5 +281,6 @@  source "drivers/net/wireless/ti/Kconfig"
 source "drivers/net/wireless/zd1211rw/Kconfig"
 source "drivers/net/wireless/mwifiex/Kconfig"
 source "drivers/net/wireless/cw1200/Kconfig"
+source "drivers/net/wireless/rsi/Kconfig"
 
 endif # WLAN
diff -uprN a/drivers/net/wireless/Makefile b/drivers/net/wireless/Makefile
--- a/drivers/net/wireless/Makefile	2014-01-30 15:53:42.051092112 +0530
+++ b/drivers/net/wireless/Makefile	2014-01-30 16:01:00.133770168 +0530
@@ -59,3 +59,4 @@  obj-$(CONFIG_BRCMFMAC)	+= brcm80211/
 obj-$(CONFIG_BRCMSMAC)	+= brcm80211/
 
 obj-$(CONFIG_CW1200)	+= cw1200/
+obj-$(CONFIG_RSI)	+= rsi/
diff -uprN a/drivers/net/wireless/rsi/include/rsi_device_ops.h b/drivers/net/wireless/rsi/include/rsi_device_ops.h
--- a/drivers/net/wireless/rsi/include/rsi_device_ops.h	1970-01-01 05:30:00.000000000 +0530
+++ b/drivers/net/wireless/rsi/include/rsi_device_ops.h	2014-01-30 16:01:00.185776778 +0530
@@ -0,0 +1,121 @@ 
+/**
+ * @file rsi_device_ops.h
+ * @author
+ * @version 1.0
+ *
+ * @section LICENSE
+ * Copyright (c) 2013 Redpine Signals Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * @section DESCRIPTION
+ *
+ * This file contians the data structures and variables/ macros commonly
+ * used in the driver .
+ */
+
+#ifndef __RSI_DEVICE_OPS_H__
+#define __RSI_DEVICE_OPS_H__
+
+#define RSI_HEADER_SIZE                 18
+#define RSI_NEEDED_HEADROOM             80
+#define RSI_RCV_BUFFER_LEN              2000
+#define RSI_RF_TYPE                     1
+#define MAX_MGMT_PKT_SIZE               512
+#define MIN_802_11_HDR_LEN              24
+
+#define RSI_RATE_00                     0x00
+#define RSI_RATE_1                      0x0
+#define RSI_RATE_2                      0x2
+#define RSI_RATE_5_5                    0x4
+#define RSI_RATE_11                     0x6
+#define RSI_RATE_6                      0x8b
+#define RSI_RATE_9                      0x8f
+#define RSI_RATE_12                     0x8a
+#define RSI_RATE_18                     0x8e
+#define RSI_RATE_24                     0x89
+#define RSI_RATE_36                     0x8d
+#define RSI_RATE_48                     0x88
+#define RSI_RATE_54                     0x8c
+#define RSI_RATE_MCS0                   0x100
+#define RSI_RATE_MCS1                   0x101
+#define RSI_RATE_MCS2                   0x102
+#define RSI_RATE_MCS3                   0x103
+#define RSI_RATE_MCS4                   0x104
+#define RSI_RATE_MCS5                   0x105
+#define RSI_RATE_MCS6                   0x106
+#define RSI_RATE_MCS7                   0x107
+#define RSI_RATE_MCS7_SG                0x307
+
+#define BW_20MHZ                        0
+#define BW_40MHZ                        1
+
+static inline unsigned int rsi_get_queueno(unsigned char *addr,
+					   unsigned short offset)
+{
+	return (le16_to_cpu(*(unsigned short *)&addr[offset]) & 0x7000) >> 12;
+}
+
+static inline unsigned int rsi_get_length(unsigned char *addr,
+					  unsigned short offset)
+{
+	return (le16_to_cpu(*(unsigned short *)&addr[offset])) & 0x0fff;
+}
+
+static inline unsigned char rsi_get_extended_desc(unsigned char *addr,
+						  unsigned short offset)
+{
+	return (le16_to_cpu(*(unsigned char *)&addr[offset + 4])) & 0x00ff;
+}
+
+static inline unsigned char rsi_get_rssi(unsigned char *addr)
+{
+	return *(unsigned char *)(addr + FRAME_DESC_SZ);
+}
+
+static inline unsigned char rsi_get_channel(unsigned char *addr)
+{
+	return *(char *)(addr + 15);
+}
+
+int rsi_mgmt_pkt_recv(struct rsi_common *common, unsigned char *msg);
+int rsi_set_vap_capabilities(struct rsi_common *common, unsigned char opmode);
+int rsi_send_ampdu_indication_frame(struct rsi_common *common,
+				    unsigned short tid,
+				    unsigned short ssn, unsigned char buf_size,
+				    unsigned char event);
+int rsi_hal_load_key(struct rsi_common *common, unsigned char *data,
+		     unsigned short key_len, unsigned char key_type,
+		     unsigned char key_id, unsigned int cipher);
+int rsi_set_channel(struct rsi_common *common, unsigned short chno);
+void rsi_inform_bss_status(struct rsi_common *common, unsigned char status,
+			   const unsigned char *bssid, unsigned char qos_enable,
+			   unsigned short aid);
+int rsi_send_mgmt_pkt(struct rsi_common *common, struct sk_buff *skb);
+int rsi_send_data_pkt(struct rsi_common *common, struct sk_buff *skb);
+void rsi_interrupt_handler(struct rsi_common *common);
+void rsi_tx_scheduler_thread(struct rsi_common *common);
+#ifdef USE_USB_INTF
+void rsi_usb_rx_thread(struct rsi_common *common);
+#endif
+int rsi_device_init(struct rsi_common *common, unsigned short fw_status);
+int rsi_device_deinit(struct rsi_hw *adapter);
+int rsi_set_default_parameters(struct rsi_common *common);
+void rsi_indicate_pkt_to_os(struct rsi_common *common, struct sk_buff *skb);
+int rsi_mac80211_attach(struct rsi_common *common);
+void rsi_mac80211_detach(struct rsi_hw *hw);
+void rsi_indicate_tx_status(struct rsi_hw *common, struct sk_buff *skb,
+			    int status);
+bool rsi_is_cipher_wep(struct rsi_common *common);
+unsigned short rsi_get_connected_channel(struct rsi_hw *adapter);
+#endif
diff -uprN a/drivers/net/wireless/rsi/include/rsi_hw_intf.h b/drivers/net/wireless/rsi/include/rsi_hw_intf.h
--- a/drivers/net/wireless/rsi/include/rsi_hw_intf.h	1970-01-01 05:30:00.000000000 +0530
+++ b/drivers/net/wireless/rsi/include/rsi_hw_intf.h	2014-01-30 16:01:00.187777032 +0530
@@ -0,0 +1,173 @@ 
+/**
+ * @file rsi_hw_intf.h
+ * @author
+ * @version 1.0
+ *
+ * @section LICENSE
+ * Copyright (c) 2013 Redpine Signals Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * @section DESCRIPTION
+ *
+ * This file contians the function prototypes of related to sdio/usb interface
+ *
+ */
+
+#ifndef __RSI_HW_INTF__
+#define __RSI_HW_INTF__
+
+#ifdef USE_USB_INTF
+#include <linux/usb.h>
+#else
+#include <linux/mmc/card.h>
+#include <linux/mmc/mmc.h>
+#include <linux/mmc/host.h>
+#include <linux/mmc/sdio_func.h>
+#include <linux/mmc/sdio.h>
+#include <linux/mmc/sd.h>
+#include <linux/mmc/sdio_ids.h>
+#endif
+
+#ifdef USE_SDIO_INTF
+enum SDIO_INTERRUPT_TYPE {
+	BUFFER_FULL         = 0x0,
+	BUFFER_AVAILABLE    = 0x1,
+	FIRMWARE_ASSERT_IND = 0x3,
+	MSDU_PACKET_PENDING = 0x4,
+	SLEEP_INDCN         = 0X5,
+	WAKEUP_INDCN        = 0x6,
+	SEMI_BUFFER_FULL    = 0x7,
+	MGMT_BUFFER_FULL    = 0x8,
+	VI_STARTVING        = 0X9,
+	VO_STARTVING        = 0xA,
+	BE_STARTVING        = 0xB,
+	BK_STARTVING        = 0xC,
+	UNKNOWN_INT         = 0XE
+};
+
+typedef void (*SD_INTERRUPT)(void *pcontext);
+
+#define SDIO_BLOCK_SIZE                         256
+#define RSI_SD_REQUEST_MASTER                   0x10000
+#define RSI_SDIO_INTERRUPT_ENABLE_REGISTER      0x04
+#define RSI_VENDOR_SPECIFIC_REGISTER_1          0xf1
+#define RSI_DEVICE_BUFFER_STATUS_REGISTER       0xf3
+#define RSI_NEXT_READ_DELAY_REGISTER_1          0xf4
+#define RSI_NEXT_READ_DELAY_REGISTER_2          0xf5
+#define RSI_VERSION_NO                          0xf8
+#define RSI_FN1_INT_REGISTER                    0xf9
+#define RSI_RFIFO_START_LEVEL_REGISTER          0xfc
+#define RSI_RFIFO_AFULL_LEVEL_REGISTER          0xfd
+#define RSI_WFIFO_AEMPTY_LEVEL_REGISTER         0xfe
+#define RSI_WAKEUP_REGISTER                     0xff
+#define SDIO_MASTER_ACCESS_MSBYTE               0x000FA
+#define SDIO_MASTER_ACCESS_LSBYTE               0x000FB
+#define RSI_DESC_QUEUE_NUM_MASK                 0x7
+
+/* Interrupt Bit Related Macros */
+#define PKT_BUFF_SEMI_FULL                      0
+#define PKT_BUFF_FULL                           1
+#define PKT_MGMT_BUFF_FULL                      2
+#define MSDU_PKT_PENDING                        3
+#define VI_STARVING                             4
+#define VO_STARVING                             5
+#define BE_STARVING                             6
+#define BK_STARVING                             7
+#define PKT_BUFF_AVAILABLE                      0
+#define FW_ASSERT_IND                           2
+
+/* FOR SD CARD ONLY */
+#define SDIO_RX_NUM_BLOCKS_REG                  0x000F1
+#define SDIO_FW_STATUS_REG                      0x000F2
+#define SDIO_NXT_RD_DELAY2                      0x000F5
+#define SDIO_FUN1_INT_REG                       0x000F9
+#define SDIO_READ_START_LVL                     0x000FC
+#define SDIO_READ_FIFO_CTL                      0x000FD
+#define SDIO_WRITE_FIFO_CTL                     0x000FE
+#define SDIO_WAKEUP_REG                         0x000FF
+#define SD_REQUEST_MASTER                       0x10000
+#define SDIO_FUN1_INTR_CLR_REG                  0x0008
+
+#define CCCR_REVISION                           0x00
+#define SD_SPEC_REVISION                        0x01
+#define SD_IO_ENABLE                            0x02
+#define SD_IO_READY                             0x03
+#define SD_INT_ENABLE                           0x04
+#define SD_INT_PENDING                          0x05
+#define SD_IO_ABART                             0x06
+#define SD_BUS_IF_CNT                           0x07
+#define SD_CARD_CAPABILITY                      0x08
+
+/* PTR to CARD'S COMMON CARD INFO STRUCT(CIS):0x09-0x0B*/
+#define SD_CIS_PTR                              0x09
+#define SD_BUS_SUSPEND                          0x0C
+#define SD_FUNCTION_SELEC                       0x0D
+#define SD_EXEC_FLAGS                           0x0E
+#define SD_READY_FLAGS                          0x0F
+#define SD_FN0_BLK_SZ                           0x10
+#define SD_RESERVED                             0x12
+#define SDIO_REG_HIGH_SPEED                     0x13
+
+#define RSI_GET_SDIO_INTERRUPT_TYPE(_I, TYPE)      \
+	{					   \
+		TYPE =                             \
+		(_I & (1 << PKT_BUFF_AVAILABLE)) ? \
+		BUFFER_AVAILABLE :		   \
+		(_I & (1 << MSDU_PKT_PENDING)) ?   \
+		MSDU_PACKET_PENDING :              \
+		(_I & (1 << FW_ASSERT_IND)) ?      \
+		FIRMWARE_ASSERT_IND : UNKNOWN_INT; \
+	}
+#endif
+
+#ifdef USE_USB_INTF
+#define WATCH_DOG_TIMER_1            0x16c
+#define WATCH_DOG_TIMER_2            0x16d
+#define WATCH_DOG_DELAY_TIMER_1      0x16e
+#define WATCH_DOG_DELAY_TIMER_2      0x16f
+#define WATCH_DOG_TIMER_ENABLE       0x170
+
+#define RESTART_WDT                  BIT(11)
+#define BYPASS_ULP_ON_WDT            BIT(1)
+
+#define RF_SPI_PROG_REG_BASE_ADDR    0x40080000
+#define GSPI_CTRL_REG0               (RF_SPI_PROG_REG_BASE_ADDR)
+#define GSPI_CTRL_REG1               (RF_SPI_PROG_REG_BASE_ADDR + 0x2)
+#define GSPI_DATA_REG0               (RF_SPI_PROG_REG_BASE_ADDR + 0x4)
+#define GSPI_DATA_REG1               (RF_SPI_PROG_REG_BASE_ADDR + 0x6)
+#define GSPI_DATA_REG2               (RF_SPI_PROG_REG_BASE_ADDR + 0x8)
+#define GSPI_2_ULP                   BIT(12)
+#define GSPI_TRIG                    BIT(7)
+#define GSPI_READ                    BIT(6)
+#define GSPI_RF_SPI_ACTIVE           BIT(8)
+#endif
+
+/* common registers in SDIO function1 */
+#define TA_SOFT_RESET_REG            0x0004
+#define TA_TH0_PC_REG                0x0400
+#define TA_HOLD_THREAD_REG           0x0844
+#define TA_RELEASE_THREAD_REG        0x0848
+
+#define TA_SOFT_RST_CLR              0
+#define TA_SOFT_RST_SET              BIT(0)
+#define TA_PC_ZERO                   0
+#define TA_HOLD_THREAD_VALUE         cpu_to_le32(0xF)
+#define TA_RELEASE_THREAD_VALUE      cpu_to_le32(0xF)
+
+#ifdef USE_USB_INTF
+#define USB_VENDOR_REGISTER_READ     0x15
+#define USB_VENDOR_REGISTER_WRITE    0x16
+#define RSI_USB_TX_HEAD_ROOM         128
+#endif
+#endif
diff -uprN a/drivers/net/wireless/rsi/include/rsi_mac80211.h b/drivers/net/wireless/rsi/include/rsi_mac80211.h
--- a/drivers/net/wireless/rsi/include/rsi_mac80211.h	1970-01-01 05:30:00.000000000 +0530
+++ b/drivers/net/wireless/rsi/include/rsi_mac80211.h	2014-01-30 16:01:00.194777922 +0530
@@ -0,0 +1,154 @@ 
+/**
+ * @file rsi_mac80211.h
+ * @author
+ * @version 1.0
+ *
+ * @section LICENSE
+ * Copyright (c) 2013 Redpine Signals Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * @section DESCRIPTION
+ *
+ * This file contians the mac80211 include files and structures and functions
+ *
+ */
+
+#ifndef __RSI_MAC80211__H__
+#define __RSI_MAC80211__H__
+
+#define MAX_RETRIES                     8
+
+#define STD_RATE_MCS7                   0x07
+#define STD_RATE_MCS6                   0x06
+#define STD_RATE_MCS5                   0x05
+#define STD_RATE_MCS4                   0x04
+#define STD_RATE_MCS3                   0x03
+#define STD_RATE_MCS2                   0x02
+#define STD_RATE_MCS1                   0x01
+#define STD_RATE_MCS0                   0x00
+#define STD_RATE_54                     0x6c
+#define STD_RATE_48                     0x60
+#define STD_RATE_36                     0x48
+#define STD_RATE_24                     0x30
+#define STD_RATE_18                     0x24
+#define STD_RATE_12                     0x18
+#define STD_RATE_11                     0x16
+#define STD_RATE_09                     0x12
+#define STD_RATE_06                     0x0C
+#define STD_RATE_5_5                    0x0B
+#define STD_RATE_02                     0x04
+#define STD_RATE_01                     0x02
+
+static const struct ieee80211_channel rsi_2ghz_channels[] = {
+	{ .band = IEEE80211_BAND_2GHZ, .center_freq = 2412,
+	  .hw_value = 1 }, /* Channel 1 */
+	{ .band = IEEE80211_BAND_2GHZ, .center_freq = 2417,
+	  .hw_value = 2 }, /* Channel 2 */
+	{ .band = IEEE80211_BAND_2GHZ, .center_freq = 2422,
+	  .hw_value = 3 }, /* Channel 3 */
+	{ .band = IEEE80211_BAND_2GHZ, .center_freq = 2427,
+	  .hw_value = 4 }, /* Channel 4 */
+	{ .band = IEEE80211_BAND_2GHZ, .center_freq = 2432,
+	  .hw_value = 5 }, /* Channel 5 */
+	{ .band = IEEE80211_BAND_2GHZ, .center_freq = 2437,
+	  .hw_value = 6 }, /* Channel 6 */
+	{ .band = IEEE80211_BAND_2GHZ, .center_freq = 2442,
+	  .hw_value = 7 }, /* Channel 7 */
+	{ .band = IEEE80211_BAND_2GHZ, .center_freq = 2447,
+	  .hw_value = 8 }, /* Channel 8 */
+	{ .band = IEEE80211_BAND_2GHZ, .center_freq = 2452,
+	  .hw_value = 9 }, /* Channel 9 */
+	{ .band = IEEE80211_BAND_2GHZ, .center_freq = 2457,
+	  .hw_value = 10 }, /* Channel 10 */
+	{ .band = IEEE80211_BAND_2GHZ, .center_freq = 2462,
+	  .hw_value = 11 }, /* Channel 11 */
+	{ .band = IEEE80211_BAND_2GHZ, .center_freq = 2467,
+	  .hw_value = 12 }, /* Channel 12 */
+	{ .band = IEEE80211_BAND_2GHZ, .center_freq = 2472,
+	  .hw_value = 13 }, /* Channel 13 */
+	{ .band = IEEE80211_BAND_2GHZ, .center_freq = 2484,
+	  .hw_value = 14 }, /* Channel 14 */
+};
+
+static const struct ieee80211_channel rsi_5ghz_channels[] = {
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5180,
+	  .hw_value = 36,  }, /* Channel 36 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5200,
+	  .hw_value = 40, }, /* Channel 40 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5220,
+	  .hw_value = 44, }, /* Channel 44 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5240,
+	  .hw_value = 48, }, /* Channel 48 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5260,
+	  .hw_value = 52, }, /* Channel 52 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5280,
+	  .hw_value = 56, }, /* Channel 56 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5300,
+	  .hw_value = 60, }, /* Channel 60 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5320,
+	  .hw_value = 64, }, /* Channel 64 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5500,
+	  .hw_value = 100, }, /* Channel 100 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5520,
+	  .hw_value = 104, }, /* Channel 104 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5540,
+	  .hw_value = 108, }, /* Channel 108 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5560,
+	  .hw_value = 112, }, /* Channel 112 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5580,
+	  .hw_value = 116, }, /* Channel 116 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5600,
+	  .hw_value = 120, }, /* Channel 120 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5620,
+	  .hw_value = 124, }, /* Channel 124 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5640,
+	  .hw_value = 128, }, /* Channel 128 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5660,
+	  .hw_value = 132, }, /* Channel 132 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5680,
+	  .hw_value = 136, }, /* Channel 136 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5700,
+	  .hw_value = 140, }, /* Channel 140 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5745,
+	  .hw_value = 149, }, /* Channel 149 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5765,
+	  .hw_value = 153, }, /* Channel 153 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5785,
+	  .hw_value = 157, }, /* Channel 157 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5805,
+	  .hw_value = 161, }, /* Channel 161 */
+	{ .band = IEEE80211_BAND_5GHZ, .center_freq = 5825,
+	  .hw_value = 165, }, /* Channel 165 */
+};
+
+static struct ieee80211_rate rsi_rates[] = {
+	{ .bitrate = STD_RATE_01  * 5, .hw_value = RSI_RATE_1 },
+	{ .bitrate = STD_RATE_02  * 5, .hw_value = RSI_RATE_2 },
+	{ .bitrate = STD_RATE_5_5 * 5, .hw_value = RSI_RATE_5_5 },
+	{ .bitrate = STD_RATE_11  * 5, .hw_value = RSI_RATE_11 },
+	{ .bitrate = STD_RATE_06  * 5, .hw_value = RSI_RATE_6 },
+	{ .bitrate = STD_RATE_09  * 5, .hw_value = RSI_RATE_9 },
+	{ .bitrate = STD_RATE_12  * 5, .hw_value = RSI_RATE_12 },
+	{ .bitrate = STD_RATE_18  * 5, .hw_value = RSI_RATE_18 },
+	{ .bitrate = STD_RATE_24  * 5, .hw_value = RSI_RATE_24 },
+	{ .bitrate = STD_RATE_36  * 5, .hw_value = RSI_RATE_36 },
+	{ .bitrate = STD_RATE_48  * 5, .hw_value = RSI_RATE_48 },
+	{ .bitrate = STD_RATE_54  * 5, .hw_value = RSI_RATE_54 },
+};
+
+static const unsigned short rsi_mcsrates[] = {
+	RSI_RATE_MCS0, RSI_RATE_MCS1, RSI_RATE_MCS2, RSI_RATE_MCS3,
+	RSI_RATE_MCS4, RSI_RATE_MCS5, RSI_RATE_MCS6, RSI_RATE_MCS7
+};
+#endif
diff -uprN a/drivers/net/wireless/rsi/include/rsi_main.h b/drivers/net/wireless/rsi/include/rsi_main.h
--- a/drivers/net/wireless/rsi/include/rsi_main.h	1970-01-01 05:30:00.000000000 +0530
+++ b/drivers/net/wireless/rsi/include/rsi_main.h	2014-01-30 16:01:00.197778303 +0530
@@ -0,0 +1,110 @@ 
+/**
+ * @file rsi_main.h
+ * @author
+ * @version 1.0
+ *
+ * @section LICENSE
+ * Copyright (c) 2013 Redpine Signals Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * @section DESCRIPTION
+ *
+ * This file contians the os dependent( Linux) specific function prototypes
+ * and macros
+ */
+
+#ifndef __RSI_MAIN_H__
+#define __RSI_MAIN_H__
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/version.h>
+#ifdef USE_USB_INTF
+#include <linux/usb.h>
+#endif
+#include <net/mac80211.h>
+#include "rsi_common.h"
+
+#define MAX_RX_URBS                     1
+#define MAX_BULK_EP                     8
+
+struct rsi_hw {
+	struct rsi_common *priv;
+	struct ieee80211_hw *hw;
+	struct ieee80211_vif *vifs[RSI_MAX_VIFS];
+	struct ieee80211_tx_queue_params edca_params[NUM_EDCA_QUEUES];
+	struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
+
+	struct device *device;
+	unsigned char sc_nvifs;
+
+	struct proc_dir_entry *proc_entry;
+#ifdef USE_SDIO_INTF
+	struct sdio_func *pfunction;
+	struct task_struct *in_sdio_litefi_irq;
+	unsigned int next_read_delay;
+	unsigned int sdio_high_speed_enable;
+	unsigned char sdio_clock_speed;
+	unsigned int rx_blk_size;
+	unsigned int cardcapability;
+	unsigned char stop_card_write;
+	unsigned char prev_desc[FRAME_DESC_SZ];
+#else
+	unsigned char endpoint;
+	struct usb_device *usbdev;
+	struct usb_interface *pfunction;
+	struct urb *rx_usb_urb[MAX_RX_URBS];
+	unsigned char *tx_buffer;
+	unsigned int bulkin_size;
+	unsigned char bulkin_endpoint_addr;
+	unsigned int bulkout_size[MAX_BULK_EP];
+	unsigned char bulkout_endpoint_addr[MAX_BULK_EP];
+	unsigned int total_usb_rx_urbs_submitted;
+	unsigned int total_usb_rx_urbs_done;
+	unsigned int usb_rx_thread_exit;
+#endif
+	unsigned int tx_blk_size;
+	unsigned char write_fail;
+};
+
+void rsi_set_event(struct rsi_event *event);
+int rsi_wait_event(struct rsi_event *event, unsigned int timeout);
+void rsi_reset_event(struct rsi_event *event);
+struct rsi_hw *rsi_init_os_intf_ops(void);
+void rsi_deinit_os_intf_ops(struct rsi_hw *adapter);
+void rsi_core_qos_processor(struct rsi_common *common);
+int rsi_core_xmit(struct rsi_common *common, struct sk_buff *skb);
+struct rsi_common_ops *rsi_get_common_ops(void);
+#ifdef USE_USB_INTF
+int rsi_write_ta_register_multiple(struct rsi_hw *adapter, unsigned int addr,
+				   unsigned char *data, unsigned int count);
+int rsi_rx_urb_submit(struct rsi_hw *adapter);
+int rsi_write_pkt(struct rsi_hw *adapter, unsigned char *pkt, unsigned int len);
+#else
+void rsi_ack_interrupt(struct rsi_hw *adapter, unsigned char int_bit);
+int rsi_read_register_multiple(struct rsi_hw *adapter, unsigned int addr,
+			       unsigned int count, unsigned char *data);
+int rsi_host_intf_read_pkt(struct rsi_hw *adapter, unsigned char *pkt,
+			   unsigned int len);
+int rsi_host_intf_write_pkt(struct rsi_hw *adapter, unsigned char *pkt,
+			    unsigned int len);
+int rsi_write_register_multiple(struct rsi_hw *adapter, unsigned int addr,
+				unsigned char *data, unsigned int count);
+int rsi_write_register(struct rsi_hw *adapter, unsigned char fun_num,
+		       unsigned int addr, unsigned char *data);
+int rsi_read_register(struct rsi_hw *adapter, unsigned int addr,
+		      unsigned char *data);
+#endif
+void rsi_print(int zone, unsigned char *vdata, int len);
+#endif
diff -uprN a/drivers/net/wireless/rsi/include/rsi_mgmt.h b/drivers/net/wireless/rsi/include/rsi_mgmt.h
--- a/drivers/net/wireless/rsi/include/rsi_mgmt.h	1970-01-01 05:30:00.000000000 +0530
+++ b/drivers/net/wireless/rsi/include/rsi_mgmt.h	2014-01-30 16:01:00.201778811 +0530
@@ -0,0 +1,246 @@ 
+/**
+ * @file rsi_mgmt.h
+ * @author
+ * @version 1.0
+ *
+ * @section LICENSE
+ * Copyright (c) 2013 Redpine Signals Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * @section DESCRIPTION
+ *
+ * This file contians the datastructures / macros and function prototypes
+ * related to management module
+ *
+ */
+
+#ifndef __RSI_MGMT_H__
+#define __RSI_MGMT_H__
+
+#include <linux/sort.h>
+#include "rsi_boot_params.h"
+
+#define RSI_11B_MODE                    0
+#define RSI_11G_MODE                    BIT(7)
+#define RSI_11N_MODE                    BIT(8)
+#define RSI_11AC_MODE                   (BIT(7) | (BIT(8)))
+#define RETRY_COUNT                     8
+
+/* Receive Frame Types */
+#define MGMT_PPE_DEBUG_FRAME            0x82
+#define TA_CONFIRM_TYPE                 0x01
+#define RX_DOT11_MGMT                   0x02
+#define TX_STATUS_IND			0x04
+#define PROBEREQ_CONFIRM                2
+#define CARD_READY_IND                  0x0000
+
+#define RSI_DELETE_PEER                 0x0
+#define RSI_ADD_PEER                    0x1
+#define START_AMPDU_AGGR                0x1
+#define STOP_AMPDU_AGGR                 0x0
+#define INTERNAL_MGMT_PKT               0x99
+
+#define RSI_SELF_CTS_ENABLE             BIT(1)
+#define BBP_REMOVE_SOFT_RST_BEFORE_PROG BIT(0)
+#define BBP_REMOVE_SOFT_RST_AFTER_PROG  BIT(1)
+#define BBP_REG_READ                    BIT(2)
+#define PUT_BBP_RESET                   0
+#define BBP_REG_WRITE                   0
+#define BBP_REG_READ                    BIT(2)
+#define RF_RESET_ENABLE                 BIT(3)
+#define ULP_MODE                        BIT(0)
+
+#define RATE_INFO_ENABLE                BIT(0)
+#define RSI_BROADCAST_PKT               BIT(9)
+
+#define UPPER_20_ENABLE                 (0x2 << 12)
+#define LOWER_20_ENABLE                 (0x4 << 12)
+#define FULL40M_ENABLE                  0x6
+
+#define RSI_LMAC_CLOCK_40MHZ            0x0
+#define RSI_LMAC_CLOCK_80MHZ            0x1
+#define RSI_LMAC_CLOCK_160MHZ           0x2
+#define RSI_LMAC_CLOCK_320MHZ           0x3
+
+#define RSI_ENABLE_20MHZ                (0x0 << 3)
+#define RSI_ENABLE_40MHZ                (0x1 << 3)
+#define RSI_ENABLE_80MHZ                (0x2 << 3)
+
+#define RX_BA_INDICATION                1
+
+#define CONNECTED_SLEEP_ENABLE          1
+#define DEEP_SLEEP_ENABLE               2
+#define WAKEUP                          3
+
+#define WAKE_UP_HOST_REQ                BIT(0)
+#define WAKE_UP_GPIO_REQ                BIT(1)
+#define WAKE_UP_GEN_SLEEP_CLK_TOUT      BIT(2)
+#define WAKE_UP_PROCESSOR_REQ           BIT(3)
+#define WAKE_UP_SLEEP_TOUT              BIT(3)
+#define WAKE_UP_ULP_WATCHDOG_TOUT       BIT(4)
+#define WAKE_UP_GPIO_LEVEL_BASED        BIT(5)
+#define WAKE_UP_GPIO_RISE_EDGE          BIT(6)
+#define WAKE_UP_GPIO_FALL_EDGE          BIT(7)
+#define LP_MODE                         0
+
+#define RSI_TBL_SZ                      40
+
+/* Send Frames Types */
+enum cmd_frame_type {
+	TX_DOT11_MGMT,
+	RESET_MAC_REQ,
+	RADIO_CAPABILITIES,
+	BB_PROG_VALUES_REQUEST,
+	RF_PROG_VALUES_REQUEST,
+	WAKEUP_SLEEP_REQUEST,
+	SCAN_REQUEST,
+	TSF_UPDATE,
+	PEER_NOTIFY,
+	BLOCK_UNBLOCK,
+	SET_KEY_REQ,
+	AUTO_RATE_IND,
+	BOOTUP_PARAMS_REQUEST,
+	VAP_CAPABILITIES,
+	EEPROM_READ_TYPE ,
+	EEPROM_WRITE,
+	GPIO_PIN_CONFIG ,
+	SET_RX_FILTER,
+	AMPDU_IND,
+	STATS_REQUEST_FRAME,
+	BB_BUF_PROG_VALUES_REQ,
+	BBP_PROG_IN_TA,
+	BG_SCAN_PARAMS,
+	BG_SCAN_PROBE_REQ,
+	CW_MODE_REQ,
+	PER_CMD_PKT
+};
+
+struct module_ps_config {
+	unsigned int not_in_use:1;
+	unsigned int clock_gate:1;
+	unsigned int logical_prgm:1;
+	unsigned int logical_poweroff:1;
+	unsigned int power_off:1;
+	unsigned int resvd:27;
+};
+
+struct lp_mode_params {
+	unsigned int type_of_wakeup;
+	unsigned int wakeup_threshold[8];
+};
+
+struct ulp_ram_supply {
+	unsigned int ram_retention:1;
+	unsigned int ram_voltage:31;
+};
+
+struct ulp_mode_params {
+	unsigned int type_of_wakeup;
+	unsigned int wakeup_threshold[8];
+	struct ulp_ram_supply ram_supply;
+};
+
+struct pm_levels {
+	struct module_ps_config rf_ps_config;
+	struct module_ps_config bb_ps_config;
+	struct module_ps_config wlan_ps_config;
+	struct module_ps_config bt_zb_ps_config;
+	struct module_ps_config afe_ps_config;
+	struct module_ps_config pll_ps_config;
+};
+
+struct pm_config {
+	struct pm_levels config_module;
+	unsigned int sleep_duration[2];
+	unsigned int lp_or_ulp_mode;
+	struct lp_mode_params lp_mode_params;
+	struct ulp_mode_params ulp_mode_params;
+	unsigned int node_deregister;
+	unsigned int sleep_level;
+	unsigned int sleep_type;
+	struct pm_config *next;
+};
+
+struct rsi_mac_frame {
+	union {
+		unsigned short desc_word[8];
+		unsigned char desc_byte[16];
+		struct {
+			unsigned char frame_len;
+			unsigned char frame_type;
+		};
+	};
+	union {
+		struct  {
+			unsigned short rf_prog_vals[100];
+		} rf_prog_req;
+
+		struct  {
+			struct {
+				unsigned short cont_win_min_q;
+				unsigned short cont_win_max_q;
+				unsigned short aifsn_val_q;
+				unsigned short txop_q;
+			} qos_params[MAX_HW_QUEUES];
+
+			unsigned char num_11n_rates;
+			unsigned char num_11ac_rates;
+			unsigned short gcpd_per_rate[20];
+		} radio_caps;
+
+		struct  {
+			unsigned char mac_addr[6];
+			unsigned short command;
+			unsigned short mpdu_density;
+			unsigned short reserved;
+			unsigned int sta_flags;
+		} peer_notify;
+
+		struct  {
+			unsigned char mac_addr[6];
+			unsigned short keep_alive_period;
+			unsigned char bssid[6];
+			unsigned short reserved;
+			unsigned int flags;
+			unsigned short frag_threshold;
+			unsigned short rts_threshold;
+			unsigned int default_mgmt_rate_bbpinfo;
+			unsigned int default_ctrl_rate_bbpinfo;
+			unsigned int default_data_rate_bbpinfo;
+			unsigned short beacon_interval;
+			unsigned short dtim_period;
+		} vap_caps;
+
+		struct  {
+			unsigned char key[4][32];
+			unsigned char tx_mic_key[8];
+			unsigned char rx_mic_key[8];
+		} set_key;
+
+		struct  {
+			unsigned short failure_limit;
+			unsigned short initial_boundary;
+			unsigned short max_threshold_limt;
+			unsigned short num_supported_rates;
+			unsigned short aarf_rssi;
+			unsigned short moderate_rate_inx;
+			unsigned short collision_tolerance;
+			unsigned short  supported_rates[40];
+		} auto_rate;
+
+		struct bootup_params bootup_params;
+		struct pm_config ps_params;
+	} u;
+};
+#endif
diff -uprN a/drivers/net/wireless/rsi/Kconfig b/drivers/net/wireless/rsi/Kconfig
--- a/drivers/net/wireless/rsi/Kconfig	1970-01-01 05:30:00.000000000 +0530
+++ b/drivers/net/wireless/rsi/Kconfig	2014-01-30 16:01:00.204779193 +0530
@@ -0,0 +1,33 @@ 
+menuconfig RSI
+	bool "Redpine Signals Inc Wireless Chipset"
+	default y
+	---help---
+	  This will enable support for RSI wireless chips
+
+config RSI_91x
+	tristate "Redpine Signals Inc 1x1 device support"
+	depends on RSI && MAC80211
+	default m
+	---help---
+	  This option enabes support for RSI 1x1 devices.
+	  Select M (recommended), if you have a RSI 1x1 wireless module.
+
+choice
+	prompt "Redpine Signals Inc hardware interface support"
+	depends on RSI_91x
+	default RSI_USB
+
+config RSI_USB
+	bool "Redpine Signals USB bus support"
+	depends on USB && RSI_91x
+	---help---
+	  This option enables the USB bus support in rsi drivers.
+	  Select Y, if you have a RSI USB 1x1 wireless module.
+
+config RSI_SDIO
+	bool "Redpine Signals SDIO bus support"
+	depends on MMC && RSI_91x
+	---help---
+	  This option enables the SDIO bus support in rsi drivers.
+	  Select Y, if you have a RSI SDIO 1x1 wireless module.
+endchoice
diff -uprN a/drivers/net/wireless/rsi/Makefile b/drivers/net/wireless/rsi/Makefile
--- a/drivers/net/wireless/rsi/Makefile	1970-01-01 05:30:00.000000000 +0530
+++ b/drivers/net/wireless/rsi/Makefile	2014-01-30 16:01:00.206779447 +0530
@@ -0,0 +1 @@ 
+obj-$(CONFIG_RSI_91x) := 91x/ common/