Browse Source

qcacmn: Fix key installation issue for BE offload radios

For big endian based offload radios, key installed using
WMI_VDEV_INSTALL_KEY_CMDID requires to be code swapped as the copy engine
for big endian platform does byte swap operation on the received key before
sending it down to FW.

It is observed that the big endian conversion is carried out in WIN Wi-Fi driver
for big endian platform specific radios in the driver, that takes care of
converting the key data to the byte swapped form. However, it is observed
that an additional copy is carried out in the WMI layer that is overwriting
the converted key with old key, in the non-swapped form.

We move the byte swapping operation to the converged component and do a single
memory copy using the macro that carries out its operation based on big or
little endian platform.

Change-Id: Ic6b7cc667d0f505d1d1daeacec72f54d41554038
CRs-Fixed: 1067206
Sathish Kumar 8 years ago
parent
commit
46af87ba9c
1 changed files with 8 additions and 1 deletions
  1. 8 1
      wmi/src/wmi_unified_non_tlv.c

+ 8 - 1
wmi/src/wmi_unified_non_tlv.c

@@ -446,7 +446,14 @@ QDF_STATUS send_vdev_install_key_cmd_non_tlv(wmi_unified_t wmi_handle,
 	}
 #endif
 
-	qdf_mem_copy(cmd->key_data, param->key_data, cmd->key_len);
+	/* for big endian host, copy engine byte_swap is enabled
+	 * But the key data content is in network byte order
+	 * Need to byte swap the key data content - so when copy engine
+	 * does byte_swap - target gets key_data content in the correct order
+	 */
+	WMI_HOST_IF_MSG_COPY_CHAR_ARRAY(cmd->key_data, param->key_data,
+					cmd->key_len);
+
 	return wmi_unified_cmd_send(wmi_handle, buf, len,
 			WMI_VDEV_INSTALL_KEY_CMDID);