qcacmn: Add changes for DISA certification

Add TLV changes to pass DISA parameters received from
WMA and pass them to firmware for firmware
to encrypt data and send back to driver.

Change-Id: Ic6928a93f799c47518fbbad96564062f595287dd
CRs-Fixed: 1072545
这个提交包含在:
Padma, Santhosh Kumar
2016-09-11 18:24:59 +05:30
父节点 9214c1607c
当前提交 8394bae1b0
修改 2 个文件,包含 104 行新增0 行删除

查看文件

@@ -4028,6 +4028,88 @@ QDF_STATUS send_setup_install_key_cmd_tlv(wmi_unified_t wmi_handle,
return status;
}
/**
* send_encrypt_decrypt_send_cmd() - send encrypt/decrypt cmd to fw
* @wmi_handle: wmi handle
* @params: encrypt/decrypt params
*
* Return: QDF_STATUS_SUCCESS for success or error code
*/
QDF_STATUS send_encrypt_decrypt_send_cmd_tlv(wmi_unified_t wmi_handle,
struct encrypt_decrypt_req_params *encrypt_decrypt_params)
{
wmi_vdev_encrypt_decrypt_data_req_cmd_fixed_param *cmd;
wmi_buf_t wmi_buf;
uint8_t *buf_ptr;
QDF_STATUS ret;
uint32_t len;
WMI_LOGD(FL("Send encrypt decrypt cmd"));
len = sizeof(*cmd) +
roundup(encrypt_decrypt_params->data_len, sizeof(A_UINT32)) +
WMI_TLV_HDR_SIZE;
wmi_buf = wmi_buf_alloc(wmi_handle, len);
if (!wmi_buf) {
WMI_LOGP("%s: failed to allocate memory for encrypt/decrypt msg",
__func__);
return QDF_STATUS_E_NOMEM;
}
buf_ptr = wmi_buf_data(wmi_buf);
cmd = (wmi_vdev_encrypt_decrypt_data_req_cmd_fixed_param *)buf_ptr;
WMITLV_SET_HDR(&cmd->tlv_header,
WMITLV_TAG_STRUC_wmi_vdev_encrypt_decrypt_data_req_cmd_fixed_param,
WMITLV_GET_STRUCT_TLVLEN(
wmi_vdev_encrypt_decrypt_data_req_cmd_fixed_param));
cmd->vdev_id = encrypt_decrypt_params->vdev_id;
cmd->key_flag = encrypt_decrypt_params->key_flag;
cmd->key_idx = encrypt_decrypt_params->key_idx;
cmd->key_cipher = encrypt_decrypt_params->key_cipher;
cmd->key_len = encrypt_decrypt_params->key_len;
cmd->key_txmic_len = encrypt_decrypt_params->key_txmic_len;
cmd->key_rxmic_len = encrypt_decrypt_params->key_rxmic_len;
qdf_mem_copy(cmd->key_data, encrypt_decrypt_params->key_data,
encrypt_decrypt_params->key_len);
qdf_mem_copy(cmd->mac_hdr, encrypt_decrypt_params->mac_header,
MAX_MAC_HEADER_LEN);
cmd->data_len = encrypt_decrypt_params->data_len;
if (cmd->data_len) {
buf_ptr += sizeof(*cmd);
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_BYTE,
roundup(encrypt_decrypt_params->data_len,
sizeof(A_UINT32)));
buf_ptr += WMI_TLV_HDR_SIZE;
qdf_mem_copy(buf_ptr, encrypt_decrypt_params->data,
encrypt_decrypt_params->data_len);
}
/* This conversion is to facilitate data to FW in little endian */
cmd->pn[5] = encrypt_decrypt_params->pn[0];
cmd->pn[4] = encrypt_decrypt_params->pn[1];
cmd->pn[3] = encrypt_decrypt_params->pn[2];
cmd->pn[2] = encrypt_decrypt_params->pn[3];
cmd->pn[1] = encrypt_decrypt_params->pn[4];
cmd->pn[0] = encrypt_decrypt_params->pn[5];
ret = wmi_unified_cmd_send(wmi_handle,
wmi_buf, len,
WMI_VDEV_ENCRYPT_DECRYPT_DATA_REQ_CMDID);
if (QDF_IS_STATUS_ERROR(ret)) {
WMI_LOGE("Failed to send ENCRYPT DECRYPT cmd: %d", ret);
wmi_buf_free(wmi_buf);
}
return ret;
}
/**
* send_p2p_go_set_beacon_ie_cmd_tlv() - set beacon IE for p2p go
@@ -12541,6 +12623,8 @@ struct wmi_ops tlv_ops = {
.extract_chan_info_event = extract_chan_info_event_tlv,
.extract_channel_hopping_event = extract_channel_hopping_event_tlv,
.send_fw_test_cmd = send_fw_test_cmd_tlv,
.send_encrypt_decrypt_send_cmd =
send_encrypt_decrypt_send_cmd_tlv,
};
#ifndef CONFIG_MCL