All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jahnavi <jahnavi.meher@redpinesignals.com>
To: linux-wireless@vger.kernel.org
Subject: [PATCH 3.13.1 1/9] rsi: Add RS9113 driver
Date: Thu, 30 Jan 2014 21:23:40 +0530	[thread overview]
Message-ID: <52EA7584.4040508@redpinesignals.com> (raw)

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(+)

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/



             reply	other threads:[~2014-01-30 15:59 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-30 15:53 Jahnavi [this message]
2014-01-30 16:18 ` [PATCH 3.13.1 1/9] rsi: Add RS9113 driver Johannes Berg
2014-01-31 10:52   ` Jahnavi Meher

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=52EA7584.4040508@redpinesignals.com \
    --to=jahnavi.meher@redpinesignals.com \
    --cc=linux-wireless@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.