ACK: [PATCH][Xenial SRU] UBUNTU: SAUCE: Redpine: Upgrade to ver. 1.2.RC12

Colin Ian King colin.king at canonical.com
Fri Jun 2 11:17:54 UTC 2017


On 02/06/17 10:27, Shrirang Bagul wrote:
> BugLink: https://bugs.launchpad.net/bugs/1694607
> 
> Vendor release ver: 1.2.RC12
> 
> Changelog:
> 
> 1.2.RC12 -
>     WLAN Bug Fixes:
>     ---------------
>     1) WoWLAN stress test cases issue resolved (when all wifi, bt, ble
>     traffics run and suspend)
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) S5 with WoWLAN does not work.
>     2) For GTK rekey, wakeup trigger send to host.
>     3) Low throughput observed for TCP downlink traffic in Coex mode
> 
>     BT Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) To connect multiple BT slaves, connection should be initiated
>        from rsi module.
>     2) In coex mode, BT file transfer fails at times with certain mobiles.
> 
> 1.2.RC11 -
>     WLAN New Features:
>     ------------------
>     1) Module parameter for debug level(ven_rsi_zone_enabled) is added.
>     2) Regulatory changes for Caracalla added
> 
>     WLAN Bug Fixes:
>     ---------------
>     1) Legacy power save issue is fixed.
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) S5 with WoWLAN does not work.
>     2) For GTK rekey, wakeup trigger send to host.
>     3) Low throughput observed for TCP downlink traffic in Coex mode
> 
>     BT Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) To connect multiple BT slaves, connection should be initiated
>        from rsi module.
>     2) In coex mode, BT file transfer fails at times with certain mobiles.
> 
> 1.2.RC10 -
>     WLAN Bug Fixes:
>     ---------------
>     1) 1 minute time delay in sdio resume issue is resolved (Reduced to 10s).
>     2) Fail in multiple iterations of hibernate issue is resolved.
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) S5 with WoWLAN does not work.
>     2) For GTK rekey, wakeup trigger send to host.
> 
>     BT New Features:
>     ----------------
>     1) BT classic + BT LE mode is supported
> 
>     BT Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) To connect multiple BT slaves, connection should be initiated
>        from rsi module.
>     2) In coex mode, BT file transfer fails at times with certain mobiles.
> 
> 1.2.RC9 -
>     WLAN Bug Fixes:
>     ---------------
>     1) BT reset added before going to S3/S4/S5 sleep when WoWLAN is enabled.
>     2) Station connection check before going to S3/S4/S5 sleep removed.
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) S5 with WoWLAN does not work.
>     2) For GTK rekey, wakeup trigger send to host.
> 
>     BT Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) To connect multiple BT slaves, connection should be initiated
>        from rsi module.
>     2) In coex mode, BT file transfer fails at times with certain mobiles.
> 
> 1.2.RC8 -
>     WLAN Bug Fixes:
>     ---------------
>     1) Added power leak fixes for S4.
>     2) S5 WoLAN issue resolved.
>     3) Wakeup short pulse issue resolved.
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) S5 with WoWLAN does not work.
>     2) For GTK rekey, wakeup trigger send to host.
> 
>     BT Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) To connect multiple BT slaves, connection should be initiated
>        from rsi module.
>     2) In coex mode, BT file transfer fails at times with certain mobiles.
> 
> 1.2.RC7 -
>     WLAN Bug Fixes:
>     ---------------
>     1) Configured host wakeup pin as active low from driver.
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) S5 with WoWLAN does not work.
>     2) For GTK rekey, wakeup trigger send to host.
> 
>     BT Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) To connect multiple BT slaves, connection should be initiated
>        from rsi module.
>     2) In coex mode, BT file transfer fails at times with certain mobiles.
> 
> 1.2.RC6 -
>     WLAN Bug Fixes:
>     ---------------
>     1) AP data throughput issue resolved.
>     2) Scan results issue resolved.
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) S5 with WoWLAN does not work.
>     2) For GTK rekey, wakeup trigger send to host.
> 
>     BT Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) To connect multiple BT slaves, connection should be initiated
>        from rsi module.
>     2) In coex mode, BT file transfer fails at times with certain mobiles.
> 
> 1.2.RC4 -
>     WLAN Bug Fixes:
>     ---------------
>     1) Buffer status interrupt handling improved.
>     2) Scan results update in sta+bt dual mode issue resolved
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) S5 with WoWLAN does not work.
>     2) For GTK rekey, wakeup trigger send to host.
> 
>     BT Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) To connect multiple BT slaves, connection should be initiated
>        from rsi module.
>     2) In coex mode, BT file transfer fails at times with certain mobiles.
> 
> 1.2.RC3 -
>     WLAN Bug Fixes:
>     ---------------
>     1) WoWLAN multiple cycles issue resolved.
>     2) Driver Version is correctly updated.
>     3) Default operating mode for Caracalla board is corrected.
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) S5 with WoWLAN does not work.
>     2) For GTK rekey, wakeup trigger send to host.
> 
>     BT New Features:
>     ----------------
>     1) Multiple slaves issue in WLAN-BT coex mode resolved.
> 
>     BT Limitations/Features NOT Supported:
>     --------------------------------------
>     1) To connect multiple BT slaves, connection should be initiated
>        from rsi module.
>     2) In coex mode, BT file transfer fails at times with certain mobiles.
> 
> 1.2.RC2 -
>     WLAN Bug Fixes:
>     ---------------
>     1) Suspend/resume issues resolved.
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) S5 with WoWLAN does not work.
>     2) For GTK rekey, wakeup trigger send to host.
>     3) EAP not tested
> 
>     BT Limitations/Features NOT Supported:
>     --------------------------------------
>     1) To connect multiple BT slaves, connection should be initiated
>        from rsi module.
>     2) In coex mode, BT file transfer fails at times with certain mobiles.
> 
> 1.2.RC1 -
>     WLAN New Features:
>     ------------------
>     1) Restrict functional modes as per device operating mode
>     2) Default operating mode for Caracalla board is 13
> 
>     WLAN Bug Fixes:
>     ---------------
>     1) Driver oops issue if more than 4 clients try to connect in
>        operating mode 14 resolved.
>     2) Issue with connecting more than max clients and disconnection
>        issue resolved.
>     3) L2 test stop when wlan interface down issue resolved.
>     4) Driver version corrected.
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) S5 with WoWLAN does not work.
>     2) For GTK rekey, wakeup trigger send to host.
>     3) EAP not tested
>     4) For channels 12 and 13 in US region max TX power is coming 0 in
>        beacons.
> 
>     BT Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) To connect multiple BT slaves, connection should be initiated
>        from rsi module.
>     2) In coex mode, BT file transfer fails at times with certain
>        mobiles.
> 
> 1.1 -
>     Generic
>     -------
>     1) Firmware file name is displayed along with version information.
>        at the driver load time.
>     2) Device operating mode is made available in the below files:
>        /sys/module/rsi_sdio/parameters/dev_oper_mode
>        /sys/module/rsi_usb/parameters/dev_oper_mode
>     3) Wi-Fi BT radio sharing has been improved.
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) S5 with WoWLAN does not work.
>     2) For GTK rekey, wakeup trigger send to host.
>     3) EAP not tested
>     4) For channels 12 and 13 in US region max TX power is coming 0 in beacons.
> 
>     BT Limitations/Features NOT Supported:
>     --------------------------------------
>     1) To connect multiple BT slaves, connection should be initiated from rsi module.
>     2) In coex mode, BT file transfer fails at times with certain mobiles.
> 
> 1.0.RC7 -
>     Generic
>     -------
>     1) Driver version, Firmware version and operating mode information is displayed
>        at the driver load time.
>     2) Driver version is made available in the below files:
>        /sys/module/rsi_91x/version
>        /sys/module/rsi_sdio/version
>        /sys/module/rsi_usb/version
> 
>     WLAN Bug Fixes:
>     ---------------
>     1) Power save latencies resolved
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) S5 with WoWLAN does not work.
>     2) For GTK rekey, wakeup trigger send to host.
>     3) EAP not tested
> 
>     BT Limitations/Features NOT Supported:
>     --------------------------------------
>     1) To connect multiple BT slaves, connection should be initiated from rsi module.
>     2) In coex mode, BT file transfer fails at times with certain mobiles.
> 
> 1.0 -
>     WLAN New Features:
>     ------------------
>     1) Station mode
>     2) All Security modes (WEP/WPA/WPA2)
>     3) Station Power save (legacy and UAPSD)
>     4) Bgscan and roaming
>     5) External antenna selection
>     6) Neighbour report request in RRM
>     7) Regulatory (802)11d) support
>     8) Management frame protection support (802)11w)
>     9) Software RF-kill
>     10) AP mode
>     11) S3, S4 suspend and resume
>     12) WoWLAN
>     13) AP Power save
>     14) Wi-Fi direct
> 
>     WLAN Bug Fixes:
>     ---------------
>     1) Allowed channels 12 and 13 in FCC region.
>     2) For the allowed channels 12 and 13 in any region, power configuration
>        updated as per Caracalla regulatory rules.
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) S5 with WoWLAN does not work.
>     2) For GTK rekey, wakeup trigger send to host.
>     3) EAP not tested
> 
>     BT New Features:
>     ----------------
>     1) BT EDR mode
>     2) BT LE mode
>     3) BT coex mode (All the coex modes))
>     4) Multi-slave mode supported)
> 
>     BT Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) To connect multiple BT slaves, connection should be initiated from rsi module.
>     2) In coex mode, BT file transfer fails at times with certain mobiles.
> 
> 1.0_RC3 -
>     Gerenic:
>     --------
>     1) Device operating mode is changed as module parameter. Please check
>        README or TRM on how to configure this while loading the modules.
>     2) Max number of stations supported in Wi-Fi AP alone mode is 32, and AP +
>        BT coex mode is 4.
>     3) AP + BT-EDR + BLE support added.
> 
>     WLAN Bug Fixes:
>     ---------------
>     1) Bgscan probe request issue resolved.
>     2) WoWLAN before association issue resolved.
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) S4 with and without WoWLAN works with the work-around implemented by Canonical.
>     2) S5 with WoWLAN does not work.
>     3) For GTK rekey, wakeup trigger send to host.
>     4) EAP not tested
>     5) To connect multiple BT slaves, connection should be initiated from rsi module.
>     6) In coex mode, BT file transfer fails at times with certain mobiles.
> 
>     BT New Features:
>     ----------------
>     1) Multi-slave mode supported.
> 
>     BT Bug Fixes:
>     -------------
>     1) Radio sharing of coex modes improved.
> 
> 1.0.RC2 -
>     WLAN Bug Fixes:
>     ---------------
>     1) PVB preparation issue in AP mode resolved.
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) EAP not supported
>     2) Issue while Resume in S4 with or without WoWLAN.
>     3) S5 with WoWLAN does not work.
>     4) For GTK rekey, wakeup trigger send to host.
> 
>     BT Bug Fixes:
>     -------------
>     1) BT dual mode disconnection issue resolved
>     2) AP BT dual mode issue resolved
> 
> 1.0_RC1 -
>     WLAN Bug Fixes:
>     ---------------
>     1) WoWLAN in Co-ex mode issue resolved.
>     2) AP beacon DTIM count update issue resolved.
>     3) Firmware assertion (0x5d) in bgscan issue is resolved.
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) EAP not supported
>     2) Issue while Resume in S4 with or without WoWLAN.
>     3) S5 with WoWLAN does not work.
>     4) For GTK rekey, wakeup trigger send to host.
> 
> 0.9.8.5_RC6 -
>     WLAN Bug Fixes:
>     ---------------
>     1) Firmware CRC check fail issue resolved
>     2) Compilation fails on 4.10.1 kernel issue resolved
>     3) BG scan issues resolved
>     4) AP mode regulatory fixes
>     5) WoWLAN issues resolved.
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) EAP not supported
>     2) Issue while Resume in S4 with or without WoWLAN.
>     3) S5 with WoWLAN does not work.
>     4) For GTK rekey, wakeup trigger send to host.
> 
> 0.9.8.5_RC4 -
>     WLAN Bug Fixes:
>     -------------------
>     1) AP mode configuration in channels 12 and 13 for EU region issue resolved.
>     2) Data latencies in AP mode issue resolved.
>     3) Roaming issues resolved.
>     4) AP WEP mode issue resolved.
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) EAP not supported
>     2) Issue while Resume in S4 with or without WoWLAN.
>     3) S5 with WoWLAN does not work.
>     4) For GTK rekey, wakeup trigger send to host.
>     5) WoWLAN does not work in WEP mode.
> 
>     Others:
>     -------
>     1) USB binds only to RS9113, let upstream kernel driver handle other RSI chips
> 
> 0.9.8.5_RC3 -
>     WLAN Bug Fixes:
>     -------------------
>     1) Power save issue in station mode (By default UAPSD is enabled on
>     Caracalla board) fixed.
>     2) WoWLAN with S3 issue resolved
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) EAP not supported
>     2) Not verified removing SDIO interrupt polling
>     3) S4/S5 sleep states not supported (with and without WoWLAN)
> 
> 0.9.8.5_RC2 -
>     WLAN Bug Fixes:
>     -------------------
>     1) Power save issue in station mode (By default UAPSD is enabled on
>     Caracalla board) fixed.
>     2) Firmware assert 0x71 (while doing bgscan) issue fixed.
>     3) Keep alive functionality in station mode issue fixed.
>     4) Data traffic stops when connected to multiple stations issue resolved
>     5) WoWLAN not working issue is resolved
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) EAP not supported
>     2) Not verified removing SDIO interrupt polling
>     3) S4/S5 sleep states not supported (with and without WoWLAN)
>     4) Wi-Fi direct testing is in progress
> 
> 0.9.8.5_RC1 -
>     WLAN Bug Fixes:
>     -------------------
>     1) Observed unicast probe requests during bgscan issue fixed
>     2) Firmware assert 0x71 (while doing bgscan) issue fixed.
>     3) Crash when doing rmmod while data traffic is going on issue resolved.
>     4) Beacons stopped after 5 minutes of data traffic issue fixed.
>     5) Keep alive functionality in station mode issue fixed
>     6) 11n data rates issue in station mode resolved.
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) EAP not supported
>     2) Not verified removing SDIO interrupt polling
>     3) S4/S5 sleep states not supported (with.without WoWLAN)
>     4) power save is not working consistently
>     5) WoWLAN is not working consistently
> 
> 0.9.8.3 -
>     WLAN New Features:
>     -----------------------------------------
>     1) AP Mode
>     2) S3, S4 suspend and resume
>     3) WoWLAN [Testing in progress]
> 
>     WLAN Bug Fixes:
>     -------------------
>     1) First EAPOL drop issue is resolved
>     2) Firmware Assert while roaming issue is resolved
>        (Provide driver bgsan should be enabled along with supplicant bgscan)
>     3) Roaming takes longer time issue is resolved
>     4) Added polling support as a work-around for the SDIO interrupt issue
>        on some platforms
> 
>     WLAN Limitations/Features NOT Supported:
>     ----------------------------------------
>     1) Wi-Fi Direct mode not supported
>     2) EAP not supported
>     3) SDIO interrupts are not being delivered to the 9113 driver
>     4) In S4 state 9113 device gets reset but device isn't getting re-enumerated.
> 
> Signed-off-by: Shrirang Bagul <shrirang.bagul at canonical.com>
> ---
>  ubuntu/rsi/rsi_91x_core.c     |   3 ++
>  ubuntu/rsi/rsi_91x_hci.c      |   2 -
>  ubuntu/rsi/rsi_91x_mac80211.c | 106 +++++++++++++++++++++++++++++++++++-------
>  ubuntu/rsi/rsi_91x_main.c     |  12 ++++-
>  ubuntu/rsi/rsi_91x_sdio.c     |  79 +++++++++++++++++--------------
>  ubuntu/rsi/rsi_main.h         |   8 +++-
>  6 files changed, 151 insertions(+), 59 deletions(-)
> 
> diff --git a/ubuntu/rsi/rsi_91x_core.c b/ubuntu/rsi/rsi_91x_core.c
> index a349f973f0e8..db320e235388 100644
> --- a/ubuntu/rsi/rsi_91x_core.c
> +++ b/ubuntu/rsi/rsi_91x_core.c
> @@ -292,6 +292,9 @@ void rsi_core_qos_processor(struct rsi_common *common)
>  		if (q_num == INVALID_QUEUE)
>  			break;
>  
> +		if (common->hibernate_resume)
> +			break;
> +
>  		mutex_lock(&common->tx_lock);
>  
>  		status = adapter->host_intf_ops->check_hw_queue_status(adapter,
> diff --git a/ubuntu/rsi/rsi_91x_hci.c b/ubuntu/rsi/rsi_91x_hci.c
> index 2f982bdab470..559962229e28 100644
> --- a/ubuntu/rsi/rsi_91x_hci.c
> +++ b/ubuntu/rsi/rsi_91x_hci.c
> @@ -295,8 +295,6 @@ int rsi_hci_recv_pkt(struct rsi_common *common, u8 *pkt)
>  			return 0;
>  		}
>  
> -		rsi_send_rfmode_frame(common);
> -
>  		ven_rsi_dbg(INFO_ZONE, "Attaching HCI module\n");
>  
>  		if (rsi_hci_attach(common)) {
> diff --git a/ubuntu/rsi/rsi_91x_mac80211.c b/ubuntu/rsi/rsi_91x_mac80211.c
> index 185444f77cf9..75aaa0897d59 100644
> --- a/ubuntu/rsi/rsi_91x_mac80211.c
> +++ b/ubuntu/rsi/rsi_91x_mac80211.c
> @@ -193,6 +193,29 @@ static const struct ieee80211_iface_combination rsi_iface_combinations[] = {
>  };
>  #endif
>  
> +#ifdef CONFIG_CARACALLA_BOARD
> +struct reg_map {
> +	char country_code[2];
> +	u8 region_code; 
> +};
> +
> +static struct reg_map rsi_caracalla_reg_db[MAX_REG_COUNTRIES] = {
> +	{"AU", NL80211_DFS_ETSI}, {"AT", NL80211_DFS_ETSI},
> +	{"BE", NL80211_DFS_ETSI}, {"BR", NL80211_DFS_WORLD},
> +	{"CA", NL80211_DFS_FCC}, {"CL", NL80211_DFS_WORLD},
> +	{"CN", NL80211_DFS_WORLD}, {"CO", NL80211_DFS_FCC},
> +	{"CZ", NL80211_DFS_ETSI}, {"DK", NL80211_DFS_ETSI},
> +	{"FI", NL80211_DFS_ETSI}, {"FR", NL80211_DFS_ETSI},
> +	{"DE", NL80211_DFS_ETSI}, {"HK", NL80211_DFS_WORLD},
> +	{"IN", NL80211_DFS_WORLD}, {"ID", NL80211_DFS_WORLD},
> +	{"IE", NL80211_DFS_ETSI}, {"IL", NL80211_DFS_ETSI},
> +	{"IT", NL80211_DFS_ETSI}, {"JP", NL80211_DFS_JP},
> +	{"KR", NL80211_DFS_WORLD}, {"LU", NL80211_DFS_ETSI},
> +	{"MY", NL80211_DFS_WORLD}, {"MX", NL80211_DFS_FCC},
> +	{"MA", NL80211_DFS_WORLD}, {"NL", NL80211_DFS_ETSI},
> +};
> +#endif
> +
>  struct ieee80211_vif *rsi_get_vif(struct rsi_hw *adapter, u8 *mac)
>  {
>  	u8 i;
> @@ -337,6 +360,9 @@ static int rsi_mac80211_hw_scan_start(struct ieee80211_hw *hw,
>  
>  	ven_rsi_dbg(INFO_ZONE, "***** Hardware scan start *****\n");
>  
> +	if (common->fsm_state != FSM_MAC_INIT_DONE)
> +		return -ENODEV;
> +
>  	if (scan_req->n_channels == 0)
>  		return -EINVAL;
>  
> @@ -585,6 +611,9 @@ static void rsi_mac80211_stop(struct ieee80211_hw *hw)
>  #endif
>  	ven_rsi_dbg(ERR_ZONE, "===> Interface DOWN <===\n");
>  
> +	if (common->fsm_state != FSM_MAC_INIT_DONE)
> +		return;
> +
>  	mutex_lock(&common->mutex);
>  	
>  	common->iface_down = true;
> @@ -1001,6 +1030,9 @@ static int rsi_mac80211_config(struct ieee80211_hw *hw,
>  	struct ieee80211_conf *conf = &hw->conf;
>  	int status = -EOPNOTSUPP;
>  
> +	if (common->fsm_state != FSM_MAC_INIT_DONE)
> +		return -ENODEV;
> +
>  	mutex_lock(&common->mutex);
>  
>  	/* channel */
> @@ -1139,6 +1171,9 @@ static void rsi_mac80211_bss_info_changed(struct ieee80211_hw *hw,
>  	ven_rsi_dbg(INFO_ZONE, "%s: BSS status changed; changed=%08x\n",
>  		__func__, changed);
>  
> +	if (common->fsm_state != FSM_MAC_INIT_DONE)
> +		return;
> +
>  	mutex_lock(&common->mutex);
>  
>  	if ((changed & BSS_CHANGED_ASSOC) &&
> @@ -1176,10 +1211,13 @@ static void rsi_mac80211_bss_info_changed(struct ieee80211_hw *hw,
>  			bss->dtim_period);
>  
>  		/* If UAPSD is updated send ps params */
> -		if (common->uapsd_bitmap) {
> -			ven_rsi_dbg(INFO_ZONE, "Configuring UAPSD\n");
> -			rsi_conf_uapsd(adapter);
> -		}
> +		if (bss->assoc) {
> +			if (common->uapsd_bitmap) {
> +				ven_rsi_dbg(INFO_ZONE, "Configuring UAPSD\n");
> +				rsi_conf_uapsd(adapter);
> +			}
> +		} else
> +			common->uapsd_bitmap = 0;
>  	}
>  
>  	if ((vif->type == NL80211_IFTYPE_STATION) &&
> @@ -1300,6 +1338,8 @@ static int rsi_mac80211_conf_tx(struct ieee80211_hw *hw,
>  
>  	if (params->uapsd)
>  		common->uapsd_bitmap |= idx;
> +	else
> +		common->uapsd_bitmap &= (~idx);
>  
>  	mutex_unlock(&common->mutex);
>  	return 0;
> @@ -1985,6 +2025,9 @@ static void rsi_mac80211_sw_scan_start(struct ieee80211_hw *hw,
>  	struct rsi_common *common = adapter->priv;
>  	struct ieee80211_bss_conf *bss = &adapter->vifs[0]->bss_conf;
>  
> +	if (common->fsm_state != FSM_MAC_INIT_DONE)
> +		return -ENODEV;
> +
>  	if (common->p2p_enabled)
>  		return;
>  	if (!bss->assoc)
> @@ -2120,6 +2163,8 @@ static const char *regdfs_region_str(enum nl80211_dfs_regions dfs_region)
>                  return "ETSI";
>          case NL80211_DFS_JP:
>                  return "JP";
> +	case NL80211_DFS_WORLD:
> +		return "WORLD";
>          }
>          return "Unknown";
>  }
> @@ -2136,14 +2181,32 @@ static void rsi_reg_notify(struct wiphy *wiphy,
>  	struct ieee80211_vif *vif = adapter->vifs[adapter->sc_nvifs -1];
>  #endif
>  	int i;
> +	u8 region_code;
>  
>  	mutex_lock(&common->mutex);
>  
> +	ven_rsi_dbg(INFO_ZONE,
> +		"%s: country = %s dfs_region = %d\n",
> +		__func__, request->alpha2, request->dfs_region);
> +
> +	region_code = request->dfs_region;
> +#ifdef CONFIG_CARACALLA_BOARD
> +	for (i = 0; i < ARRAY_SIZE(rsi_caracalla_reg_db); i++) {
> +		if (!memcmp(rsi_caracalla_reg_db[i].country_code,
> +		            request->alpha2, 2)) {
> +			region_code = rsi_caracalla_reg_db[i].region_code;
> +			break;
> +		}
> +	}
> +	if (!memcmp(request->alpha2, "00", 2))
> +		region_code = NL80211_DFS_JP;
> +#endif
> +
>  	ven_rsi_dbg(ERR_ZONE, "%s: Updating regulatory for region %s\n",
> -		__func__, regdfs_region_str(request->dfs_region));
> +		__func__, regdfs_region_str(region_code));
>  
>  	sband = wiphy->bands[NL80211_BAND_2GHZ];
> -	switch (request->dfs_region) {
> +	switch (region_code) {
>  	case NL80211_DFS_FCC:
>  		for(i = 0; i < sband->n_channels; i++){
>  	 		ch = &sband->channels[i];
> @@ -2170,7 +2233,7 @@ static void rsi_reg_notify(struct wiphy *wiphy,
>  
>  	case NL80211_DFS_UNSET:
>  	case NL80211_DFS_ETSI:
> -		
> +	case NL80211_DFS_WORLD:
>  		for(i = 0; i < sband->n_channels; i++){
>  	 		ch = &sband->channels[i];
>  			
> @@ -2208,7 +2271,7 @@ static void rsi_reg_notify(struct wiphy *wiphy,
>  	default:
>  		ven_rsi_dbg(ERR_ZONE,
>  			"Wrong Country region code seleted\ndfs_region = %d\n",
> -			request->dfs_region);
> +			region_code);
>  		break;
>  	}
>  
> @@ -2224,15 +2287,11 @@ static void rsi_reg_notify(struct wiphy *wiphy,
>  				ch->flags |= IEEE80211_CHAN_NO_IR;
>  		}
>  	}
> -	
> -	ven_rsi_dbg(INFO_ZONE,
> -		"country = %s dfs_region = %d\n",
> -		request->alpha2, request->dfs_region);
>  
>  #ifndef CONFIG_HW_SCAN_OFFLOAD 
>  	/* If DFS region or country is changed configure back ground scan
>  	 * params to device again */
> -	if ((adapter->dfs_region != request->dfs_region) ||
> +	if ((adapter->dfs_region != region_code) ||
>  	    (memcmp(adapter->country, request->alpha2, 2))) {
>  		if (common->bgscan_en) {
>  			rsi_send_bgscan_params(common, 0);
> @@ -2244,7 +2303,15 @@ static void rsi_reg_notify(struct wiphy *wiphy,
>  	}
>  #endif
>  	
> -	adapter->dfs_region = request->dfs_region;
> +	if (region_code == NL80211_DFS_UNSET)
> +		region_code = NL80211_DFS_WORLD;
> +	ven_rsi_dbg(INFO_ZONE, "Region code: %s\n", regdfs_region_str(region_code));
> +
> +	/* Firmware region code values 1 less than the standard
> +	 * linux values; At this point DFS_UNSET is not set
> +	 * as this is set to WORLD (4)
> +	 */
> +	adapter->dfs_region = region_code - 1;
>  	adapter->country[0] = request->alpha2[0];
>  	adapter->country[1] = request->alpha2[1];
>  	mutex_unlock(&common->mutex);
> @@ -2355,19 +2422,21 @@ fail_wow:
>  
>  static int rsi_mac80211_resume(struct ieee80211_hw *hw)
>  {
> -#ifdef CONFIG_VEN_RSI_WOW
>  	struct rsi_hw *adapter = hw->priv;
>  	struct rsi_common *common = adapter->priv;
> +#ifdef CONFIG_VEN_RSI_WOW
>  	u16 rx_filter_word = 0;
> -
> -	adapter->priv->wow_flags = 0;
>  #endif
> +        
> +	adapter->priv->wow_flags = 0;
>  	
>  	ven_rsi_dbg(INFO_ZONE, "%s: mac80211 resume\n", __func__);
>  
> +	if (common->hibernate_resume)
> +		return 0;
> +
>  #ifdef CONFIG_VEN_RSI_WOW
>  	rsi_send_wowlan_request(common, 0, 0);
> -	//rx_filter_word = 0xE ;
>  
>  	rx_filter_word = (ALLOW_DATA_ASSOC_PEER |
>  			  ALLOW_CTRL_ASSOC_PEER |
> @@ -2378,6 +2447,7 @@ static int rsi_mac80211_resume(struct ieee80211_hw *hw)
>  	return 0;
>  }
>  #endif
> +
>  char *rsi_vif_type_to_name(enum nl80211_iftype vif_type)
>  {
>  	switch (vif_type) {
> diff --git a/ubuntu/rsi/rsi_91x_main.c b/ubuntu/rsi/rsi_91x_main.c
> index 72b80ba1a878..0bae9fed3d64 100644
> --- a/ubuntu/rsi/rsi_91x_main.c
> +++ b/ubuntu/rsi/rsi_91x_main.c
> @@ -42,7 +42,7 @@
>  #include "rsi_coex.h"
>  #endif
>  
> -u32 ven_rsi_zone_enabled =	//INFO_ZONE |
> +u16 ven_rsi_zone_enabled =	//INFO_ZONE |
>  				//INIT_ZONE |
>  				//MGMT_TX_ZONE |
>  				//MGMT_RX_ZONE |
> @@ -53,6 +53,16 @@ u32 ven_rsi_zone_enabled =	//INFO_ZONE |
>  				ERR_ZONE |
>  				0;
>  EXPORT_SYMBOL_GPL(ven_rsi_zone_enabled);
> +MODULE_PARM_DESC(ven_rsi_zone_enabled,
> +		 "BIT(0) - ERROR ZONE \
> +		  BIT(1) - INFO ZONE \
> +		  BIT(2) - INIT ZONE \
> +		  BIT(3) - MGMT TX ZONE \
> +		  BIT(4) - MGMT RX ZONE \
> +		  BIT(5) - DATA TX ZONE \
> +		  BIT(6) - DATA RX ZONE \
> +		  BIT(7) - FSM ZONE \
> +		  BIT(8) - ISR ZONE");
>  
>  /**
>   * ven_rsi_dbg() - This function outputs informational messages.
> diff --git a/ubuntu/rsi/rsi_91x_sdio.c b/ubuntu/rsi/rsi_91x_sdio.c
> index 8eb939868b0b..eb7821b7b8d7 100644
> --- a/ubuntu/rsi/rsi_91x_sdio.c
> +++ b/ubuntu/rsi/rsi_91x_sdio.c
> @@ -1122,6 +1122,7 @@ static int rsi_probe(struct sdio_func *pfunction,
>  		goto fail;
>  	}
>  	sdio_release_host(pfunction);
> +	adapter->priv->hibernate_resume = false;
>  
>  	return 0;
>  
> @@ -1156,24 +1157,24 @@ static void rsi_disconnect(struct sdio_func *pfunction)
>  	sdio_claim_host(pfunction);
>  	sdio_release_irq(pfunction);
>  	sdio_release_host(pfunction);
> -	mdelay(10);
>  
>  	ven_rsi_mac80211_detach(adapter);
> -	mdelay(10);
>  
>  #if defined(CONFIG_VEN_RSI_BT_ALONE) || defined(CONFIG_VEN_RSI_COEX)
>  	rsi_hci_detach(adapter->priv);
> -	mdelay(10);
>  #endif
>  
> -	/* Reset Chip */
> -	rsi_reset_chip(adapter);
> +	if (!adapter->priv->hibernate_resume) {
> +		/* Reset Chip */
> +		rsi_reset_chip(adapter);
>  
> -	/* Resetting to take care of the case, where-in driver is re-loaded */
> -	sdio_claim_host(pfunction);
> -	rsi_reset_card(pfunction);
> -	sdio_disable_func(pfunction);
> -	sdio_release_host(pfunction);
> +		/* Resetting to take care of the case, where-in driver
> +		 * is re-loaded */
> +		sdio_claim_host(pfunction);
> +		rsi_reset_card(pfunction);
> +		sdio_disable_func(pfunction);
> +		sdio_release_host(pfunction);
> +	}
>  	dev->write_fail = 2;
>  	ven_rsi_91x_deinit(adapter);
>  	ven_rsi_dbg(ERR_ZONE, "##### RSI SDIO device disconnected #####\n");
> @@ -1295,12 +1296,10 @@ static int rsi_suspend(struct device *dev)
>  	struct sdio_func *pfunction = dev_to_sdio_func(dev);
>  	struct rsi_hw *adapter = sdio_get_drvdata(pfunction);
>  	struct rsi_common *common = adapter->priv;
> -#ifdef CONFIG_VEN_RSI_WOW
>  	struct rsi_91x_sdiodev *sdev =
>  		(struct rsi_91x_sdiodev *)adapter->rsi_dev;
> -#endif
>  
> -	ven_rsi_dbg(INFO_ZONE, "SDIO Bus suspend ===>\n");
> +	ven_rsi_dbg(ERR_ZONE, "SDIO Bus suspend ===>\n");
>  
>  	if (!adapter) {
>  		ven_rsi_dbg(ERR_ZONE, "Device is not ready\n");
> @@ -1314,29 +1313,28 @@ static int rsi_suspend(struct device *dev)
>  			ven_rsi_dbg(ERR_ZONE,
>  				"##### Device can not wake up through WLAN\n");
>  
> +#if 0
>  #if defined(CONFIG_VEN_RSI_BT_ALONE) || defined(CONFIG_VEN_RSI_COEX)
>  		if ((common->coex_mode == 2) || (common->coex_mode == 4)) {
>  			/* Deregister BT protocol */
>  			rsi_hci_detach(common);
>  		}
>  #endif
> +#endif
>  	}
>  #endif
>  
>  	ret = rsi_sdio_disable_interrupts(pfunction);
> -	if (ret)
> -		return ret;
>  
> -	if (sdev->write_fail) {
> +	if (sdev->write_fail)
>  		ven_rsi_dbg(INFO_ZONE, "###### Device is not ready #######\n");
> -		return 0;
> -	}
>  
>  	ret = rsi_set_sdio_pm_caps(adapter);
>  	if (ret)
>  		ven_rsi_dbg(INFO_ZONE,
>  			"Setting power management caps failed\n");
>  
> +	common->fsm_state = FSM_CARD_NOT_READY;
>  	ven_rsi_dbg(INFO_ZONE, "***** SDIO BUS SUSPEND DONE ******\n");
>  
>  	return 0;
> @@ -1352,11 +1350,11 @@ int rsi_resume(struct device *dev)
>  	ven_rsi_dbg(INFO_ZONE, "***** BUS RESUME ******\n");
>  
>  	common->suspend_in_prog = false;
> +	common->fsm_state = FSM_MAC_INIT_DONE;
>  
>  	ret = rsi_sdio_enable_interrupts(pfunction);
> -	if (ret)
> -		return ret;
>  
> +#if 0
>  #ifdef CONFIG_VEN_RSI_WOW
>  #if defined(CONFIG_VEN_RSI_BT_ALONE) || defined(CONFIG_VEN_RSI_COEX)
>  	if ((common->wow_flags & RSI_WOW_ENABLED) &&
> @@ -1367,6 +1365,7 @@ int rsi_resume(struct device *dev)
>  #endif
>          adapter->priv->wow_flags = 0;
>  #endif
> +#endif
>  
>  	ven_rsi_dbg(INFO_ZONE, "***** RSI module resumed *****\n");
>  	return 0;
> @@ -1378,10 +1377,8 @@ static int rsi_freeze(struct device *dev)
>  	struct sdio_func *pfunction = dev_to_sdio_func(dev);
>  	struct rsi_hw *adapter = sdio_get_drvdata(pfunction);
>  	struct rsi_common *common = adapter->priv;
> -#ifdef CONFIG_VEN_RSI_WOW
>  	struct rsi_91x_sdiodev *sdev =
>  		(struct rsi_91x_sdiodev *)adapter->rsi_dev;
> -#endif
>  
>  	ven_rsi_dbg(INFO_ZONE, "SDIO Bus freeze ===>\n");
>  
> @@ -1397,23 +1394,21 @@ static int rsi_freeze(struct device *dev)
>  			ven_rsi_dbg(ERR_ZONE,
>  				"##### Device can not wake up through WLAN\n");
>  
> +#if 0
>  #if defined(CONFIG_VEN_RSI_BT_ALONE) || defined(CONFIG_VEN_RSI_COEX)
>  		if ((common->coex_mode == 2) || (common->coex_mode == 4)) {
>  			/* Deregister BT protocol */
>  			rsi_deregister_bt(common);
>  		}
>  #endif
> +#endif
>  	}
>  #endif
>  
>  	ret = rsi_sdio_disable_interrupts(pfunction);
> -	if (ret)
> -		return ret;
>  
> -	if (sdev->write_fail) {
> +	if (sdev->write_fail)
>  		ven_rsi_dbg(INFO_ZONE, "###### Device is not ready #######\n");
> -		return 0;
> -	}
>  	
>  	ret = rsi_set_sdio_pm_caps(adapter);
>  	if (ret)
> @@ -1424,17 +1419,18 @@ static int rsi_freeze(struct device *dev)
>  
>  int rsi_thaw(struct device *dev)
>  {
> -	int ret;
>  	struct sdio_func *pfunction = dev_to_sdio_func(dev);
>  	struct rsi_hw *adapter = sdio_get_drvdata(pfunction);
>  
> -	ven_rsi_dbg(INFO_ZONE, "***** BUS THAW ******\n");
> +	ven_rsi_dbg(ERR_ZONE, "***** BUS THAW ******\n");
>  
> -	adapter->priv->suspend_in_prog = false;
> +//	adapter->priv->suspend_in_prog = false;
> +	adapter->priv->hibernate_resume = true;
> +	adapter->priv->fsm_state = FSM_CARD_NOT_READY;
> +	adapter->priv->bt_fsm_state = BT_DEVICE_NOT_READY;
> +	adapter->priv->iface_down = true;
>  
> -	ret = rsi_sdio_enable_interrupts(pfunction);
> -	if (ret)
> -		return ret;
> +	rsi_sdio_enable_interrupts(pfunction);
>  
>  	ven_rsi_dbg(INFO_ZONE, "RSI module resumed\n");
>  	return 0;
> @@ -1442,17 +1438,28 @@ int rsi_thaw(struct device *dev)
>  
>  static int rsi_poweroff(struct device *dev)
>  {
> -	return rsi_suspend(dev);
> +	return rsi_freeze(dev);
>  }
>  
>  static void rsi_shutdown(struct device *dev)
>  {
> -	rsi_suspend(dev);
> +	rsi_freeze(dev);
>  }
>  
>  int rsi_restore(struct device *dev)
>  {
> -	return rsi_thaw(dev);
> +	struct sdio_func *pfunction = dev_to_sdio_func(dev);
> +	struct rsi_hw *adapter = sdio_get_drvdata(pfunction);
> +
> +	adapter->priv->suspend_in_prog = false;
> +	adapter->priv->hibernate_resume = true;
> +	adapter->priv->fsm_state = FSM_CARD_NOT_READY;
> +	adapter->priv->bt_fsm_state = BT_DEVICE_NOT_READY;
> +	adapter->priv->iface_down = true;
> +
> +	ven_rsi_dbg(INFO_ZONE, "RSI module restored\n");
> +
> +	return 0;
>  }
>  
>  static const struct dev_pm_ops rsi_pm_ops = {
> diff --git a/ubuntu/rsi/rsi_main.h b/ubuntu/rsi/rsi_main.h
> index 0fc3ce316bf1..eb1afbb6c4c5 100644
> --- a/ubuntu/rsi/rsi_main.h
> +++ b/ubuntu/rsi/rsi_main.h
> @@ -41,7 +41,7 @@ struct rsi_hw;
>  
>  #include "rsi_ps.h"
>  
> -#define DRV_VER				"RS9113.NB0.NL.GNU.LNX.1.2.RC9"
> +#define DRV_VER				"RS9113.NB0.NL.GNU.LNX.1.2.RC12"
>  
>  #define ERR_ZONE                        BIT(0) /* Error Msgs		*/
>  #define INFO_ZONE                       BIT(1) /* Generic Debug Msgs	*/
> @@ -63,7 +63,7 @@ struct rsi_hw;
>  #define FSM_BB_RF_PROG_SENT             7
>  #define FSM_MAC_INIT_DONE               8
>  
> -extern u32 ven_rsi_zone_enabled;
> +extern u16 ven_rsi_zone_enabled;
>  extern __printf(2, 3) void ven_rsi_dbg(u32 zone, const char *fmt, ...);
>  void rsi_hex_dump(u32 zone, char *msg_str, const u8 *msg, u32 len);
>  
> @@ -131,6 +131,9 @@ void rsi_hex_dump(u32 zone, char *msg_str, const u8 *msg, u32 len);
>  #define RSI_WOW_ENABLED			BIT(0)
>  #define RSI_WOW_NO_CONNECTION		BIT(1)
>  
> +#define MAX_REG_COUNTRIES		30
> +#define NL80211_DFS_WORLD		4
> +
>  struct version_info {
>  	u16 major;
>  	u16 minor;
> @@ -327,6 +330,7 @@ struct rsi_common {
>  	int tx_power;
>  	u8 ant_in_use;
>  	bool suspend_in_prog;
> +	bool hibernate_resume;
>  #ifdef CONFIG_VEN_RSI_WOW
>  	u8 wow_flags;
>  #endif
> 

Update to a specific driver, resolves known issues

Acked-by: Colin Ian King <colin.king at canonical.com>




More information about the kernel-team mailing list