|
@@ -1742,6 +1742,87 @@ static void wma_read_cfg_wepkey(tp_wma_handle wma_handle,
|
|
|
*num_keys = j;
|
|
|
}
|
|
|
|
|
|
+#ifdef FEATURE_WLAN_WAPI
|
|
|
+#define WPI_IV_LEN 16
|
|
|
+#if defined(QCA_WIFI_QCA6290) || defined(QCA_WIFI_QCA6390)
|
|
|
+/**
|
|
|
+ * wma_fill_in_wapi_key_params() - update key parameters about wapi
|
|
|
+ * @key_params: wma key parameters
|
|
|
+ * @params: parameters pointer to be set
|
|
|
+ * @mode: operation mode
|
|
|
+ *
|
|
|
+ * Return: None
|
|
|
+ */
|
|
|
+static inline void wma_fill_in_wapi_key_params(
|
|
|
+ struct wma_set_key_params *key_params,
|
|
|
+ struct set_key_params *params, uint8_t mode)
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * Since MCL shares same FW with WIN for Napier/Hasting, FW WAPI logic
|
|
|
+ * is fit for WIN, change it to align with WIN.
|
|
|
+ */
|
|
|
+ unsigned char iv_init_ap[16] = { 0x5c, 0x36, 0x5c, 0x36, 0x5c, 0x36,
|
|
|
+ 0x5c, 0x36, 0x5c, 0x36, 0x5c, 0x36,
|
|
|
+ 0x5c, 0x36, 0x5c, 0x37};
|
|
|
+ unsigned char iv_init_sta[16] = { 0x5c, 0x36, 0x5c, 0x36, 0x5c, 0x36,
|
|
|
+ 0x5c, 0x36, 0x5c, 0x36, 0x5c, 0x36,
|
|
|
+ 0x5c, 0x36, 0x5c, 0x36};
|
|
|
+
|
|
|
+ if (mode == wlan_op_mode_ap) {
|
|
|
+ qdf_mem_copy(params->rx_iv, iv_init_sta,
|
|
|
+ WPI_IV_LEN);
|
|
|
+ qdf_mem_copy(params->tx_iv, iv_init_ap,
|
|
|
+ WPI_IV_LEN);
|
|
|
+ } else {
|
|
|
+ qdf_mem_copy(params->rx_iv, iv_init_ap,
|
|
|
+ WPI_IV_LEN);
|
|
|
+ qdf_mem_copy(params->tx_iv, iv_init_sta,
|
|
|
+ WPI_IV_LEN);
|
|
|
+ }
|
|
|
+
|
|
|
+ params->key_txmic_len = WMA_TXMIC_LEN;
|
|
|
+ params->key_rxmic_len = WMA_RXMIC_LEN;
|
|
|
+
|
|
|
+ params->key_cipher = WMI_CIPHER_WAPI;
|
|
|
+}
|
|
|
+#else
|
|
|
+static inline void wma_fill_in_wapi_key_params(
|
|
|
+ struct wma_set_key_params *key_params,
|
|
|
+ struct set_key_params *params, uint8_t mode)
|
|
|
+{
|
|
|
+ /*initialize receive and transmit IV with default values */
|
|
|
+ /* **Note: tx_iv must be sent in reverse** */
|
|
|
+ unsigned char tx_iv[16] = { 0x36, 0x5c, 0x36, 0x5c, 0x36, 0x5c,
|
|
|
+ 0x36, 0x5c, 0x36, 0x5c, 0x36, 0x5c,
|
|
|
+ 0x36, 0x5c, 0x36, 0x5c};
|
|
|
+ unsigned char rx_iv[16] = { 0x5c, 0x36, 0x5c, 0x36, 0x5c, 0x36,
|
|
|
+ 0x5c, 0x36, 0x5c, 0x36, 0x5c, 0x36,
|
|
|
+ 0x5c, 0x36, 0x5c, 0x37};
|
|
|
+ if (mode == wlan_op_mode_ap) {
|
|
|
+ /* Authenticator initializes the value of PN as
|
|
|
+ * 0x5C365C365C365C365C365C365C365C36 for MCastkeyUpdate
|
|
|
+ */
|
|
|
+ if (key_params->unicast)
|
|
|
+ tx_iv[0] = 0x37;
|
|
|
+
|
|
|
+ rx_iv[WPI_IV_LEN - 1] = 0x36;
|
|
|
+ } else {
|
|
|
+ if (!key_params->unicast)
|
|
|
+ rx_iv[WPI_IV_LEN - 1] = 0x36;
|
|
|
+ }
|
|
|
+
|
|
|
+ params->key_txmic_len = WMA_TXMIC_LEN;
|
|
|
+ params->key_rxmic_len = WMA_RXMIC_LEN;
|
|
|
+
|
|
|
+ qdf_mem_copy(params->rx_iv, &rx_iv,
|
|
|
+ WPI_IV_LEN);
|
|
|
+ qdf_mem_copy(params->tx_iv, &tx_iv,
|
|
|
+ WPI_IV_LEN);
|
|
|
+ params->key_cipher = WMI_CIPHER_WAPI;
|
|
|
+}
|
|
|
+#endif
|
|
|
+#endif
|
|
|
+
|
|
|
/**
|
|
|
* wma_setup_install_key_cmd() - set key parameters
|
|
|
* @wma_handle: wma handle
|
|
@@ -1844,38 +1925,9 @@ static QDF_STATUS wma_setup_install_key_cmd(tp_wma_handle wma_handle,
|
|
|
sec_type = cdp_sec_type_tkip;
|
|
|
break;
|
|
|
#ifdef FEATURE_WLAN_WAPI
|
|
|
-#define WPI_IV_LEN 16
|
|
|
case eSIR_ED_WPI:
|
|
|
{
|
|
|
- /*initialize receive and transmit IV with default values */
|
|
|
- /* **Note: tx_iv must be sent in reverse** */
|
|
|
- unsigned char tx_iv[16] = { 0x36, 0x5c, 0x36, 0x5c, 0x36, 0x5c,
|
|
|
- 0x36, 0x5c, 0x36, 0x5c, 0x36, 0x5c,
|
|
|
- 0x36, 0x5c, 0x36, 0x5c};
|
|
|
- unsigned char rx_iv[16] = { 0x5c, 0x36, 0x5c, 0x36, 0x5c, 0x36,
|
|
|
- 0x5c, 0x36, 0x5c, 0x36, 0x5c, 0x36,
|
|
|
- 0x5c, 0x36, 0x5c, 0x37};
|
|
|
- if (mode == wlan_op_mode_ap) {
|
|
|
- /* Authenticator initializes the value of PN as
|
|
|
- * 0x5C365C365C365C365C365C365C365C36 for MCastkeyUpdate
|
|
|
- */
|
|
|
- if (key_params->unicast)
|
|
|
- tx_iv[0] = 0x37;
|
|
|
-
|
|
|
- rx_iv[WPI_IV_LEN - 1] = 0x36;
|
|
|
- } else {
|
|
|
- if (!key_params->unicast)
|
|
|
- rx_iv[WPI_IV_LEN - 1] = 0x36;
|
|
|
- }
|
|
|
-
|
|
|
- params.key_txmic_len = WMA_TXMIC_LEN;
|
|
|
- params.key_rxmic_len = WMA_RXMIC_LEN;
|
|
|
-
|
|
|
- qdf_mem_copy(¶ms.rx_iv, &rx_iv,
|
|
|
- WPI_IV_LEN);
|
|
|
- qdf_mem_copy(¶ms.tx_iv, &tx_iv,
|
|
|
- WPI_IV_LEN);
|
|
|
- params.key_cipher = WMI_CIPHER_WAPI;
|
|
|
+ wma_fill_in_wapi_key_params(key_params, ¶ms, mode);
|
|
|
break;
|
|
|
}
|
|
|
#endif /* FEATURE_WLAN_WAPI */
|