|
@@ -232,191 +232,24 @@ static WLAN_PHY_MODE wma_ocb_freq_to_mode(uint32_t freq)
|
|
|
*/
|
|
|
int wma_ocb_set_config(tp_wma_handle wma_handle, struct sir_ocb_config *config)
|
|
|
{
|
|
|
- int32_t ret;
|
|
|
- wmi_ocb_set_config_cmd_fixed_param *cmd;
|
|
|
- wmi_channel *chan;
|
|
|
- wmi_ocb_channel *ocb_chan;
|
|
|
- wmi_qos_parameter *qos_param;
|
|
|
- wmi_dcc_ndl_chan *ndl_chan;
|
|
|
- wmi_dcc_ndl_active_state_config *ndl_active_config;
|
|
|
- wmi_ocb_schedule_element *sched_elem;
|
|
|
- uint8_t *buf_ptr;
|
|
|
- wmi_buf_t buf;
|
|
|
- int32_t len;
|
|
|
- int32_t i, j, active_state_count;
|
|
|
-
|
|
|
- /*
|
|
|
- * Validate the dcc_ndl_chan_list_len and count the number of active
|
|
|
- * states. Validate dcc_ndl_active_state_list_len.
|
|
|
- */
|
|
|
- active_state_count = 0;
|
|
|
- if (config->dcc_ndl_chan_list_len) {
|
|
|
- if (!config->dcc_ndl_chan_list ||
|
|
|
- config->dcc_ndl_chan_list_len !=
|
|
|
- config->channel_count * sizeof(wmi_dcc_ndl_chan)) {
|
|
|
- WMA_LOGE(FL("NDL channel is invalid. List len: %d"),
|
|
|
- config->dcc_ndl_chan_list_len);
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
-
|
|
|
- for (i = 0, ndl_chan = config->dcc_ndl_chan_list;
|
|
|
- i < config->channel_count; ++i, ++ndl_chan)
|
|
|
- active_state_count +=
|
|
|
- WMI_NDL_NUM_ACTIVE_STATE_GET(ndl_chan);
|
|
|
-
|
|
|
- if (active_state_count) {
|
|
|
- if (!config->dcc_ndl_active_state_list ||
|
|
|
- config->dcc_ndl_active_state_list_len !=
|
|
|
- active_state_count *
|
|
|
- sizeof(wmi_dcc_ndl_active_state_config)) {
|
|
|
- WMA_LOGE(FL("NDL active state is invalid."));
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- len = sizeof(*cmd) +
|
|
|
- WMI_TLV_HDR_SIZE + config->channel_count *
|
|
|
- sizeof(wmi_channel) +
|
|
|
- WMI_TLV_HDR_SIZE + config->channel_count *
|
|
|
- sizeof(wmi_ocb_channel) +
|
|
|
- WMI_TLV_HDR_SIZE + config->channel_count *
|
|
|
- sizeof(wmi_qos_parameter) * WLAN_MAX_AC +
|
|
|
- WMI_TLV_HDR_SIZE + config->dcc_ndl_chan_list_len +
|
|
|
- WMI_TLV_HDR_SIZE + active_state_count *
|
|
|
- sizeof(wmi_dcc_ndl_active_state_config) +
|
|
|
- WMI_TLV_HDR_SIZE + config->schedule_size *
|
|
|
- sizeof(wmi_ocb_schedule_element);
|
|
|
- buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
|
|
|
- if (!buf) {
|
|
|
- WMA_LOGE(FL("wmi_buf_alloc failed"));
|
|
|
- return -ENOMEM;
|
|
|
- }
|
|
|
-
|
|
|
- buf_ptr = (uint8_t *)wmi_buf_data(buf);
|
|
|
- cmd = (wmi_ocb_set_config_cmd_fixed_param *)buf_ptr;
|
|
|
- WMITLV_SET_HDR(&cmd->tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_ocb_set_config_cmd_fixed_param,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN(wmi_ocb_set_config_cmd_fixed_param));
|
|
|
- cmd->vdev_id = config->session_id;
|
|
|
- cmd->channel_count = config->channel_count;
|
|
|
- cmd->schedule_size = config->schedule_size;
|
|
|
- cmd->flags = config->flags;
|
|
|
- buf_ptr += sizeof(*cmd);
|
|
|
-
|
|
|
- /* Add the wmi_channel info */
|
|
|
- WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
|
|
|
- config->channel_count*sizeof(wmi_channel));
|
|
|
- buf_ptr += WMI_TLV_HDR_SIZE;
|
|
|
- for (i = 0; i < config->channel_count; i++) {
|
|
|
- chan = (wmi_channel *)buf_ptr;
|
|
|
- WMITLV_SET_HDR(&chan->tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_channel,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN(wmi_channel));
|
|
|
- chan->mhz = config->channels[i].chan_freq;
|
|
|
- chan->band_center_freq1 = config->channels[i].chan_freq;
|
|
|
- chan->band_center_freq2 = 0;
|
|
|
- chan->info = 0;
|
|
|
-
|
|
|
- WMI_SET_CHANNEL_MODE(chan, wma_ocb_freq_to_mode(chan->mhz));
|
|
|
- WMI_SET_CHANNEL_MAX_POWER(chan, config->channels[i].max_pwr);
|
|
|
- WMI_SET_CHANNEL_MIN_POWER(chan, config->channels[i].min_pwr);
|
|
|
- WMI_SET_CHANNEL_MAX_TX_POWER(chan, config->channels[i].max_pwr);
|
|
|
- WMI_SET_CHANNEL_REG_POWER(chan, config->channels[i].reg_pwr);
|
|
|
- WMI_SET_CHANNEL_ANTENNA_MAX(chan,
|
|
|
- config->channels[i].antenna_max);
|
|
|
-
|
|
|
- if (config->channels[i].bandwidth < 10)
|
|
|
- WMI_SET_CHANNEL_FLAG(chan, WMI_CHAN_FLAG_QUARTER_RATE);
|
|
|
- else if (config->channels[i].bandwidth < 20)
|
|
|
- WMI_SET_CHANNEL_FLAG(chan, WMI_CHAN_FLAG_HALF_RATE);
|
|
|
- buf_ptr += sizeof(*chan);
|
|
|
- }
|
|
|
-
|
|
|
- /* Add the wmi_ocb_channel info */
|
|
|
- WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
|
|
|
- config->channel_count*sizeof(wmi_ocb_channel));
|
|
|
- buf_ptr += WMI_TLV_HDR_SIZE;
|
|
|
- for (i = 0; i < config->channel_count; i++) {
|
|
|
- ocb_chan = (wmi_ocb_channel *)buf_ptr;
|
|
|
- WMITLV_SET_HDR(&ocb_chan->tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_ocb_channel,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN(wmi_ocb_channel));
|
|
|
- ocb_chan->bandwidth = config->channels[i].bandwidth;
|
|
|
- WMI_CHAR_ARRAY_TO_MAC_ADDR(
|
|
|
- config->channels[i].mac_address.bytes,
|
|
|
- &ocb_chan->mac_address);
|
|
|
- buf_ptr += sizeof(*ocb_chan);
|
|
|
- }
|
|
|
-
|
|
|
- /* Add the wmi_qos_parameter info */
|
|
|
- WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
|
|
|
- config->channel_count * sizeof(wmi_qos_parameter)*WLAN_MAX_AC);
|
|
|
- buf_ptr += WMI_TLV_HDR_SIZE;
|
|
|
- /* WLAN_MAX_AC parameters for each channel */
|
|
|
- for (i = 0; i < config->channel_count; i++) {
|
|
|
- for (j = 0; j < WLAN_MAX_AC; j++) {
|
|
|
- qos_param = (wmi_qos_parameter *)buf_ptr;
|
|
|
- WMITLV_SET_HDR(&qos_param->tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_qos_parameter,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN(wmi_qos_parameter));
|
|
|
- qos_param->aifsn =
|
|
|
- config->channels[i].qos_params[j].aifsn;
|
|
|
- qos_param->cwmin =
|
|
|
- config->channels[i].qos_params[j].cwmin;
|
|
|
- qos_param->cwmax =
|
|
|
- config->channels[i].qos_params[j].cwmax;
|
|
|
- buf_ptr += sizeof(*qos_param);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /* Add the wmi_dcc_ndl_chan (per channel) */
|
|
|
- WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
|
|
|
- config->dcc_ndl_chan_list_len);
|
|
|
- buf_ptr += WMI_TLV_HDR_SIZE;
|
|
|
- if (config->dcc_ndl_chan_list_len) {
|
|
|
- ndl_chan = (wmi_dcc_ndl_chan *)buf_ptr;
|
|
|
- qdf_mem_copy(ndl_chan, config->dcc_ndl_chan_list,
|
|
|
- config->dcc_ndl_chan_list_len);
|
|
|
- for (i = 0; i < config->channel_count; i++)
|
|
|
- WMITLV_SET_HDR(&(ndl_chan[i].tlv_header),
|
|
|
- WMITLV_TAG_STRUC_wmi_dcc_ndl_chan,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN(wmi_dcc_ndl_chan));
|
|
|
- buf_ptr += config->dcc_ndl_chan_list_len;
|
|
|
- }
|
|
|
-
|
|
|
- /* Add the wmi_dcc_ndl_active_state_config */
|
|
|
- WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, active_state_count *
|
|
|
- sizeof(wmi_dcc_ndl_active_state_config));
|
|
|
- buf_ptr += WMI_TLV_HDR_SIZE;
|
|
|
- if (active_state_count) {
|
|
|
- ndl_active_config = (wmi_dcc_ndl_active_state_config *)buf_ptr;
|
|
|
- qdf_mem_copy(ndl_active_config,
|
|
|
- config->dcc_ndl_active_state_list,
|
|
|
- active_state_count * sizeof(*ndl_active_config));
|
|
|
- for (i = 0; i < active_state_count; ++i)
|
|
|
- WMITLV_SET_HDR(&(ndl_active_config[i].tlv_header),
|
|
|
- WMITLV_TAG_STRUC_wmi_dcc_ndl_active_state_config,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN(
|
|
|
- wmi_dcc_ndl_active_state_config));
|
|
|
- buf_ptr += active_state_count *
|
|
|
- sizeof(*ndl_active_config);
|
|
|
- }
|
|
|
-
|
|
|
- /* Add the wmi_ocb_schedule_element info */
|
|
|
- WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
|
|
|
- config->schedule_size * sizeof(wmi_ocb_schedule_element));
|
|
|
- buf_ptr += WMI_TLV_HDR_SIZE;
|
|
|
- for (i = 0; i < config->schedule_size; i++) {
|
|
|
- sched_elem = (wmi_ocb_schedule_element *)buf_ptr;
|
|
|
- WMITLV_SET_HDR(&sched_elem->tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_ocb_schedule_element,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN(wmi_ocb_schedule_element));
|
|
|
- sched_elem->channel_freq = config->schedule[i].chan_freq;
|
|
|
- sched_elem->total_duration = config->schedule[i].total_duration;
|
|
|
- sched_elem->guard_interval = config->schedule[i].guard_interval;
|
|
|
- buf_ptr += sizeof(*sched_elem);
|
|
|
- }
|
|
|
+ int32_t ret, i;
|
|
|
+ uint32_t *ch_mhz;
|
|
|
+ struct ocb_config_param tconfig = {0};
|
|
|
+
|
|
|
+ tconfig.session_id = config->session_id;
|
|
|
+ tconfig.channel_count = config->channel_count;
|
|
|
+ tconfig.schedule_size = config->schedule_size;
|
|
|
+ tconfig.flags = config->flags;
|
|
|
+ tconfig.channels = (struct ocb_config_channel *)config->channels;
|
|
|
+ tconfig.schedule = (struct ocb_config_sched *)config->schedule;
|
|
|
+ tconfig.dcc_ndl_chan_list_len = config->dcc_ndl_chan_list_len;
|
|
|
+ tconfig.dcc_ndl_chan_list = config->dcc_ndl_chan_list;
|
|
|
+ tconfig.dcc_ndl_active_state_list_len = config->dcc_ndl_active_state_list_len;
|
|
|
+ tconfig.dcc_ndl_active_state_list = config->dcc_ndl_active_state_list;
|
|
|
+ ch_mhz = qdf_mem_malloc(sizeof(uint32_t)*config->channel_count);
|
|
|
+
|
|
|
+ for (i = 0; i < config->channel_count; i++)
|
|
|
+ ch_mhz[i] = wma_ocb_freq_to_mode(config->channels[i].chan_freq);
|
|
|
|
|
|
/*
|
|
|
* Save the configuration so that it can be used in
|
|
@@ -428,18 +261,19 @@ int wma_ocb_set_config(tp_wma_handle wma_handle, struct sir_ocb_config *config)
|
|
|
wma_handle->ocb_config_req = copy_sir_ocb_config(config);
|
|
|
}
|
|
|
|
|
|
- ret = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len,
|
|
|
- WMI_OCB_SET_CONFIG_CMDID);
|
|
|
+ ret = wmi_unified_ocb_set_config(wma_handle->wmi_handle, &tconfig,
|
|
|
+ ch_mhz);
|
|
|
if (ret != EOK) {
|
|
|
if (wma_handle->ocb_config_req) {
|
|
|
qdf_mem_free(wma_handle->ocb_config_req);
|
|
|
wma_handle->ocb_config_req = NULL;
|
|
|
}
|
|
|
-
|
|
|
+ qdf_mem_free(ch_mhz);
|
|
|
WMA_LOGE("Failed to set OCB config");
|
|
|
- wmi_buf_free(buf);
|
|
|
return -EIO;
|
|
|
}
|
|
|
+ qdf_mem_free(ch_mhz);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -471,36 +305,14 @@ int wma_ocb_set_config_event_handler(void *handle, uint8_t *event_buf,
|
|
|
int wma_ocb_set_utc_time(tp_wma_handle wma_handle, struct sir_ocb_utc *utc)
|
|
|
{
|
|
|
int32_t ret;
|
|
|
- wmi_ocb_set_utc_time_cmd_fixed_param *cmd;
|
|
|
- uint8_t *buf_ptr;
|
|
|
- uint32_t len, i;
|
|
|
- wmi_buf_t buf;
|
|
|
-
|
|
|
- len = sizeof(*cmd);
|
|
|
- buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
|
|
|
- if (!buf) {
|
|
|
- WMA_LOGE(FL("wmi_buf_alloc failed"));
|
|
|
- return -ENOMEM;
|
|
|
- }
|
|
|
-
|
|
|
- buf_ptr = (uint8_t *)wmi_buf_data(buf);
|
|
|
- cmd = (wmi_ocb_set_utc_time_cmd_fixed_param *)buf_ptr;
|
|
|
- WMITLV_SET_HDR(&cmd->tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_ocb_set_utc_time_cmd_fixed_param,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN(wmi_ocb_set_utc_time_cmd_fixed_param));
|
|
|
- cmd->vdev_id = utc->vdev_id;
|
|
|
+ struct ocb_utc_param cmd = {0};
|
|
|
|
|
|
- for (i = 0; i < SIZE_UTC_TIME; i++)
|
|
|
- WMI_UTC_TIME_SET(cmd, i, utc->utc_time[i]);
|
|
|
-
|
|
|
- for (i = 0; i < SIZE_UTC_TIME_ERROR; i++)
|
|
|
- WMI_TIME_ERROR_SET(cmd, i, utc->time_error[i]);
|
|
|
-
|
|
|
- ret = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len,
|
|
|
- WMI_OCB_SET_UTC_TIME_CMDID);
|
|
|
+ cmd.vdev_id = utc->vdev_id;
|
|
|
+ qdf_mem_copy(&cmd.utc_time, &utc->utc_time, WMI_SIZE_UTC_TIME);
|
|
|
+ qdf_mem_copy(&cmd.time_error, &utc->time_error, WMI_SIZE_UTC_TIME_ERROR);
|
|
|
+ ret = wmi_unified_ocb_set_utc_time_cmd(wma_handle->wmi_handle, &cmd);
|
|
|
if (ret != EOK) {
|
|
|
WMA_LOGE(FL("Failed to set OCB UTC time"));
|
|
|
- wmi_buf_free(buf);
|
|
|
return -EIO;
|
|
|
}
|
|
|
|
|
@@ -519,52 +331,20 @@ int wma_ocb_start_timing_advert(tp_wma_handle wma_handle,
|
|
|
struct sir_ocb_timing_advert *timing_advert)
|
|
|
{
|
|
|
int32_t ret;
|
|
|
- wmi_ocb_start_timing_advert_cmd_fixed_param *cmd;
|
|
|
- uint8_t *buf_ptr;
|
|
|
- uint32_t len, len_template;
|
|
|
- wmi_buf_t buf;
|
|
|
-
|
|
|
- len = sizeof(*cmd) +
|
|
|
- WMI_TLV_HDR_SIZE;
|
|
|
-
|
|
|
- len_template = timing_advert->template_length;
|
|
|
- /* Add padding to the template if needed */
|
|
|
- if (len_template % 4 != 0)
|
|
|
- len_template += 4 - (len_template % 4);
|
|
|
- len += len_template;
|
|
|
-
|
|
|
- buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
|
|
|
- if (!buf) {
|
|
|
- WMA_LOGE(FL("wmi_buf_alloc failed"));
|
|
|
- return -ENOMEM;
|
|
|
- }
|
|
|
-
|
|
|
- buf_ptr = (uint8_t *)wmi_buf_data(buf);
|
|
|
- cmd = (wmi_ocb_start_timing_advert_cmd_fixed_param *)buf_ptr;
|
|
|
- WMITLV_SET_HDR(&cmd->tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_ocb_start_timing_advert_cmd_fixed_param,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN(
|
|
|
- wmi_ocb_start_timing_advert_cmd_fixed_param));
|
|
|
- cmd->vdev_id = timing_advert->vdev_id;
|
|
|
- cmd->repeat_rate = timing_advert->repeat_rate;
|
|
|
- cmd->channel_freq = timing_advert->chan_freq;
|
|
|
- cmd->timestamp_offset = timing_advert->timestamp_offset;
|
|
|
- cmd->time_value_offset = timing_advert->time_value_offset;
|
|
|
- cmd->timing_advert_template_length = timing_advert->template_length;
|
|
|
- buf_ptr += sizeof(*cmd);
|
|
|
-
|
|
|
- /* Add the timing advert template */
|
|
|
- WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_BYTE,
|
|
|
- len_template);
|
|
|
- qdf_mem_copy(buf_ptr + WMI_TLV_HDR_SIZE,
|
|
|
- (uint8_t *)timing_advert->template_value,
|
|
|
- timing_advert->template_length);
|
|
|
-
|
|
|
- ret = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len,
|
|
|
- WMI_OCB_START_TIMING_ADVERT_CMDID);
|
|
|
+ struct ocb_timing_advert_param cmd = {0};
|
|
|
+
|
|
|
+ cmd.vdev_id = timing_advert->vdev_id;
|
|
|
+ cmd.repeat_rate = timing_advert->repeat_rate;
|
|
|
+ cmd.chan_freq = timing_advert->chan_freq;
|
|
|
+ cmd.timestamp_offset = timing_advert->timestamp_offset;
|
|
|
+ cmd.time_value_offset = timing_advert->time_value_offset;
|
|
|
+ cmd.template_length = timing_advert->template_length;
|
|
|
+ cmd.template_value = (uint8_t *)timing_advert->template_value;
|
|
|
+
|
|
|
+ ret = wmi_unified_ocb_start_timing_advert(wma_handle->wmi_handle,
|
|
|
+ &cmd);
|
|
|
if (ret != EOK) {
|
|
|
WMA_LOGE(FL("Failed to start OCB timing advert"));
|
|
|
- wmi_buf_free(buf);
|
|
|
return -EIO;
|
|
|
}
|
|
|
|
|
@@ -583,32 +363,14 @@ int wma_ocb_stop_timing_advert(tp_wma_handle wma_handle,
|
|
|
struct sir_ocb_timing_advert *timing_advert)
|
|
|
{
|
|
|
int32_t ret;
|
|
|
- wmi_ocb_stop_timing_advert_cmd_fixed_param *cmd;
|
|
|
- uint8_t *buf_ptr;
|
|
|
- uint32_t len;
|
|
|
- wmi_buf_t buf;
|
|
|
-
|
|
|
- len = sizeof(*cmd);
|
|
|
- buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
|
|
|
- if (!buf) {
|
|
|
- WMA_LOGE(FL("wmi_buf_alloc failed"));
|
|
|
- return -ENOMEM;
|
|
|
- }
|
|
|
+ struct ocb_timing_advert_param cmd = {0};
|
|
|
|
|
|
- buf_ptr = (uint8_t *)wmi_buf_data(buf);
|
|
|
- cmd = (wmi_ocb_stop_timing_advert_cmd_fixed_param *)buf_ptr;
|
|
|
- WMITLV_SET_HDR(&cmd->tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_ocb_stop_timing_advert_cmd_fixed_param,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN(
|
|
|
- wmi_ocb_stop_timing_advert_cmd_fixed_param));
|
|
|
- cmd->vdev_id = timing_advert->vdev_id;
|
|
|
- cmd->channel_freq = timing_advert->chan_freq;
|
|
|
-
|
|
|
- ret = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len,
|
|
|
- WMI_OCB_STOP_TIMING_ADVERT_CMDID);
|
|
|
+ cmd.vdev_id = timing_advert->vdev_id;
|
|
|
+ cmd.chan_freq = timing_advert->chan_freq;
|
|
|
+ ret = wmi_unified_ocb_stop_timing_advert(wma_handle->wmi_handle,
|
|
|
+ &cmd);
|
|
|
if (ret != EOK) {
|
|
|
WMA_LOGE(FL("Failed to stop OCB timing advert"));
|
|
|
- wmi_buf_free(buf);
|
|
|
return -EIO;
|
|
|
}
|
|
|
|
|
@@ -627,34 +389,12 @@ int wma_ocb_get_tsf_timer(tp_wma_handle wma_handle,
|
|
|
struct sir_ocb_get_tsf_timer *request)
|
|
|
{
|
|
|
QDF_STATUS ret;
|
|
|
- wmi_ocb_get_tsf_timer_cmd_fixed_param *cmd;
|
|
|
- uint8_t *buf_ptr;
|
|
|
- wmi_buf_t buf;
|
|
|
- int32_t len;
|
|
|
-
|
|
|
- len = sizeof(*cmd);
|
|
|
- buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
|
|
|
- if (!buf) {
|
|
|
- WMA_LOGE(FL("wmi_buf_alloc failed"));
|
|
|
- return -ENOMEM;
|
|
|
- }
|
|
|
- buf_ptr = (uint8_t *)wmi_buf_data(buf);
|
|
|
-
|
|
|
- cmd = (wmi_ocb_get_tsf_timer_cmd_fixed_param *)buf_ptr;
|
|
|
- qdf_mem_zero(cmd, len);
|
|
|
- WMITLV_SET_HDR(&cmd->tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_ocb_get_tsf_timer_cmd_fixed_param,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN(
|
|
|
- wmi_ocb_get_tsf_timer_cmd_fixed_param));
|
|
|
- cmd->vdev_id = request->vdev_id;
|
|
|
|
|
|
/* Send the WMI command */
|
|
|
- ret = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len,
|
|
|
- WMI_OCB_GET_TSF_TIMER_CMDID);
|
|
|
+ ret = wmi_unified_ocb_get_tsf_timer(wma_handle->wmi_handle, request->vdev_id);
|
|
|
/* If there is an error, set the completion event */
|
|
|
if (ret != EOK) {
|
|
|
WMA_LOGE(FL("Failed to send WMI message: %d"), ret);
|
|
|
- wmi_buf_free(buf);
|
|
|
return -EIO;
|
|
|
}
|
|
|
return 0;
|
|
@@ -712,64 +452,18 @@ int wma_dcc_get_stats(tp_wma_handle wma_handle,
|
|
|
struct sir_dcc_get_stats *get_stats_param)
|
|
|
{
|
|
|
int32_t ret;
|
|
|
- wmi_dcc_get_stats_cmd_fixed_param *cmd;
|
|
|
- wmi_dcc_channel_stats_request *channel_stats_array;
|
|
|
- wmi_buf_t buf;
|
|
|
- uint8_t *buf_ptr;
|
|
|
- uint32_t len;
|
|
|
- uint32_t i;
|
|
|
-
|
|
|
- /* Validate the input */
|
|
|
- if (get_stats_param->request_array_len !=
|
|
|
- get_stats_param->channel_count * sizeof(*channel_stats_array)) {
|
|
|
- WMA_LOGE(FL("Invalid parameter"));
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
-
|
|
|
- /* Allocate memory for the WMI command */
|
|
|
- len = sizeof(*cmd) + WMI_TLV_HDR_SIZE +
|
|
|
- get_stats_param->request_array_len;
|
|
|
-
|
|
|
- buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
|
|
|
- if (!buf) {
|
|
|
- WMA_LOGE(FL("wmi_buf_alloc failed"));
|
|
|
- return QDF_STATUS_E_NOMEM;
|
|
|
- }
|
|
|
+ struct dcc_get_stats_param cmd = {0};
|
|
|
|
|
|
- buf_ptr = wmi_buf_data(buf);
|
|
|
- qdf_mem_zero(buf_ptr, len);
|
|
|
-
|
|
|
- /* Populate the WMI command */
|
|
|
- cmd = (wmi_dcc_get_stats_cmd_fixed_param *)buf_ptr;
|
|
|
- buf_ptr += sizeof(*cmd);
|
|
|
-
|
|
|
- WMITLV_SET_HDR(&cmd->tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_dcc_get_stats_cmd_fixed_param,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN(
|
|
|
- wmi_dcc_get_stats_cmd_fixed_param));
|
|
|
- cmd->vdev_id = get_stats_param->vdev_id;
|
|
|
- cmd->num_channels = get_stats_param->channel_count;
|
|
|
-
|
|
|
- WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
|
|
|
- get_stats_param->request_array_len);
|
|
|
- buf_ptr += WMI_TLV_HDR_SIZE;
|
|
|
-
|
|
|
- channel_stats_array = (wmi_dcc_channel_stats_request *)buf_ptr;
|
|
|
- qdf_mem_copy(channel_stats_array, get_stats_param->request_array,
|
|
|
- get_stats_param->request_array_len);
|
|
|
- for (i = 0; i < cmd->num_channels; i++)
|
|
|
- WMITLV_SET_HDR(&channel_stats_array[i].tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_dcc_channel_stats_request,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN(
|
|
|
- wmi_dcc_channel_stats_request));
|
|
|
+ cmd.vdev_id = get_stats_param->vdev_id;
|
|
|
+ cmd.channel_count = get_stats_param->channel_count;
|
|
|
+ cmd.request_array_len = get_stats_param->request_array_len;
|
|
|
+ cmd.request_array = get_stats_param->request_array;
|
|
|
|
|
|
/* Send the WMI command */
|
|
|
- ret = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len,
|
|
|
- WMI_DCC_GET_STATS_CMDID);
|
|
|
+ ret = wmi_unified_dcc_get_stats_cmd(wma_handle->wmi_handle, &cmd);
|
|
|
|
|
|
if (ret != EOK) {
|
|
|
WMA_LOGE(FL("Failed to send WMI message: %d"), ret);
|
|
|
- wmi_buf_free(buf);
|
|
|
return -EIO;
|
|
|
}
|
|
|
|
|
@@ -835,39 +529,13 @@ int wma_dcc_clear_stats(tp_wma_handle wma_handle,
|
|
|
struct sir_dcc_clear_stats *clear_stats_param)
|
|
|
{
|
|
|
int32_t ret;
|
|
|
- wmi_dcc_clear_stats_cmd_fixed_param *cmd;
|
|
|
- wmi_buf_t buf;
|
|
|
- uint8_t *buf_ptr;
|
|
|
- uint32_t len;
|
|
|
-
|
|
|
- /* Allocate memory for the WMI command */
|
|
|
- len = sizeof(*cmd);
|
|
|
-
|
|
|
- buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
|
|
|
- if (!buf) {
|
|
|
- WMA_LOGE(FL("wmi_buf_alloc failed"));
|
|
|
- return -ENOMEM;
|
|
|
- }
|
|
|
-
|
|
|
- buf_ptr = wmi_buf_data(buf);
|
|
|
- qdf_mem_zero(buf_ptr, len);
|
|
|
-
|
|
|
- /* Populate the WMI command */
|
|
|
- cmd = (wmi_dcc_clear_stats_cmd_fixed_param *)buf_ptr;
|
|
|
-
|
|
|
- WMITLV_SET_HDR(&cmd->tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_dcc_clear_stats_cmd_fixed_param,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN(
|
|
|
- wmi_dcc_clear_stats_cmd_fixed_param));
|
|
|
- cmd->vdev_id = clear_stats_param->vdev_id;
|
|
|
- cmd->dcc_stats_bitmap = clear_stats_param->dcc_stats_bitmap;
|
|
|
|
|
|
/* Send the WMI command */
|
|
|
- ret = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len,
|
|
|
- WMI_DCC_CLEAR_STATS_CMDID);
|
|
|
+ ret = wmi_unified_dcc_clear_stats(wma_handle->wmi_handle,
|
|
|
+ clear_stats_param->vdev_id,
|
|
|
+ clear_stats_param->dcc_stats_bitmap);
|
|
|
if (ret != EOK) {
|
|
|
WMA_LOGE(FL("Failed to send the WMI command"));
|
|
|
- wmi_buf_free(buf);
|
|
|
return -EIO;
|
|
|
}
|
|
|
|
|
@@ -885,95 +553,15 @@ int wma_dcc_update_ndl(tp_wma_handle wma_handle,
|
|
|
struct sir_dcc_update_ndl *update_ndl_param)
|
|
|
{
|
|
|
QDF_STATUS qdf_status;
|
|
|
- wmi_dcc_update_ndl_cmd_fixed_param *cmd;
|
|
|
- wmi_dcc_ndl_chan *ndl_chan_array;
|
|
|
- wmi_dcc_ndl_active_state_config *ndl_active_state_array;
|
|
|
- uint32_t active_state_count;
|
|
|
- wmi_buf_t buf;
|
|
|
- uint8_t *buf_ptr;
|
|
|
- uint32_t len;
|
|
|
- uint32_t i;
|
|
|
-
|
|
|
- /* validate the input */
|
|
|
- if (update_ndl_param->dcc_ndl_chan_list_len !=
|
|
|
- update_ndl_param->channel_count * sizeof(*ndl_chan_array)) {
|
|
|
- WMA_LOGE(FL("Invalid parameter"));
|
|
|
- return QDF_STATUS_E_INVAL;
|
|
|
- }
|
|
|
- active_state_count = 0;
|
|
|
- ndl_chan_array = update_ndl_param->dcc_ndl_chan_list;
|
|
|
- for (i = 0; i < update_ndl_param->channel_count; i++)
|
|
|
- active_state_count +=
|
|
|
- WMI_NDL_NUM_ACTIVE_STATE_GET(&ndl_chan_array[i]);
|
|
|
- if (update_ndl_param->dcc_ndl_active_state_list_len !=
|
|
|
- active_state_count * sizeof(*ndl_active_state_array)) {
|
|
|
- WMA_LOGE(FL("Invalid parameter"));
|
|
|
- return QDF_STATUS_E_INVAL;
|
|
|
- }
|
|
|
-
|
|
|
- /* Allocate memory for the WMI command */
|
|
|
- len = sizeof(*cmd) +
|
|
|
- WMI_TLV_HDR_SIZE + update_ndl_param->dcc_ndl_chan_list_len +
|
|
|
- WMI_TLV_HDR_SIZE +
|
|
|
- update_ndl_param->dcc_ndl_active_state_list_len;
|
|
|
-
|
|
|
- buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
|
|
|
- if (!buf) {
|
|
|
- WMA_LOGE(FL("wmi_buf_alloc failed"));
|
|
|
- return -ENOMEM;
|
|
|
- }
|
|
|
-
|
|
|
- buf_ptr = wmi_buf_data(buf);
|
|
|
- qdf_mem_zero(buf_ptr, len);
|
|
|
-
|
|
|
- /* Populate the WMI command */
|
|
|
- cmd = (wmi_dcc_update_ndl_cmd_fixed_param *)buf_ptr;
|
|
|
- buf_ptr += sizeof(*cmd);
|
|
|
-
|
|
|
- WMITLV_SET_HDR(&cmd->tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_dcc_update_ndl_cmd_fixed_param,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN(
|
|
|
- wmi_dcc_update_ndl_cmd_fixed_param));
|
|
|
- cmd->vdev_id = update_ndl_param->vdev_id;
|
|
|
- cmd->num_channel = update_ndl_param->channel_count;
|
|
|
-
|
|
|
- WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
|
|
|
- update_ndl_param->dcc_ndl_chan_list_len);
|
|
|
- buf_ptr += WMI_TLV_HDR_SIZE;
|
|
|
-
|
|
|
- ndl_chan_array = (wmi_dcc_ndl_chan *)buf_ptr;
|
|
|
- qdf_mem_copy(ndl_chan_array, update_ndl_param->dcc_ndl_chan_list,
|
|
|
- update_ndl_param->dcc_ndl_chan_list_len);
|
|
|
- for (i = 0; i < cmd->num_channel; i++)
|
|
|
- WMITLV_SET_HDR(&ndl_chan_array[i].tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_dcc_ndl_chan,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN(
|
|
|
- wmi_dcc_ndl_chan));
|
|
|
- buf_ptr += update_ndl_param->dcc_ndl_chan_list_len;
|
|
|
-
|
|
|
- WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
|
|
|
- update_ndl_param->dcc_ndl_active_state_list_len);
|
|
|
- buf_ptr += WMI_TLV_HDR_SIZE;
|
|
|
-
|
|
|
- ndl_active_state_array = (wmi_dcc_ndl_active_state_config *) buf_ptr;
|
|
|
- qdf_mem_copy(ndl_active_state_array,
|
|
|
- update_ndl_param->dcc_ndl_active_state_list,
|
|
|
- update_ndl_param->dcc_ndl_active_state_list_len);
|
|
|
- for (i = 0; i < active_state_count; i++) {
|
|
|
- WMITLV_SET_HDR(&ndl_active_state_array[i].tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_dcc_ndl_active_state_config,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN(
|
|
|
- wmi_dcc_ndl_active_state_config));
|
|
|
- }
|
|
|
- buf_ptr += update_ndl_param->dcc_ndl_active_state_list_len;
|
|
|
+ struct dcc_update_ndl_param *cmd;
|
|
|
|
|
|
+ cmd = (struct dcc_update_ndl_param *) update_ndl_param;
|
|
|
/* Send the WMI command */
|
|
|
- qdf_status = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len,
|
|
|
- WMI_DCC_UPDATE_NDL_CMDID);
|
|
|
+ qdf_status = wmi_unified_dcc_update_ndl(wma_handle->wmi_handle,
|
|
|
+ cmd);
|
|
|
/* If there is an error, set the completion event */
|
|
|
if (qdf_status) {
|
|
|
WMA_LOGE(FL("Failed to send WMI message: %d"), qdf_status);
|
|
|
- wmi_buf_free(buf);
|
|
|
return -EIO;
|
|
|
}
|
|
|
|