xref: /wlan-driver/qca-wifi-host-cmn/wmi/src/wmi_unified_dbr_tlv.c (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name 
20*5113495bSYour Name #include <osdep.h>
21*5113495bSYour Name #include "wmi.h"
22*5113495bSYour Name #include "wmi_unified_priv.h"
23*5113495bSYour Name #include "wmi_unified_dbr_param.h"
24*5113495bSYour Name #include "wmi_unified_dbr_api.h"
25*5113495bSYour Name 
26*5113495bSYour Name /**
27*5113495bSYour Name  * send_dbr_cfg_cmd_tlv() - configure DMA rings for Direct Buf RX
28*5113495bSYour Name  * @wmi_handle: wmi handle
29*5113495bSYour Name  * @cfg: dma cfg req
30*5113495bSYour Name  *
31*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
32*5113495bSYour Name  */
send_dbr_cfg_cmd_tlv(wmi_unified_t wmi_handle,struct direct_buf_rx_cfg_req * cfg)33*5113495bSYour Name static QDF_STATUS send_dbr_cfg_cmd_tlv(wmi_unified_t wmi_handle,
34*5113495bSYour Name 				struct direct_buf_rx_cfg_req *cfg)
35*5113495bSYour Name {
36*5113495bSYour Name 	wmi_buf_t buf;
37*5113495bSYour Name 	wmi_dma_ring_cfg_req_fixed_param *cmd;
38*5113495bSYour Name 	QDF_STATUS ret;
39*5113495bSYour Name 	int32_t len = sizeof(*cmd);
40*5113495bSYour Name 
41*5113495bSYour Name 	buf = wmi_buf_alloc(wmi_handle, sizeof(*cmd));
42*5113495bSYour Name 	if (!buf) {
43*5113495bSYour Name 		wmi_err("wmi_buf_alloc failed");
44*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
45*5113495bSYour Name 	}
46*5113495bSYour Name 
47*5113495bSYour Name 	cmd = (wmi_dma_ring_cfg_req_fixed_param *)wmi_buf_data(buf);
48*5113495bSYour Name 
49*5113495bSYour Name 	WMITLV_SET_HDR(&cmd->tlv_header,
50*5113495bSYour Name 		WMITLV_TAG_STRUC_wmi_dma_ring_cfg_req_fixed_param,
51*5113495bSYour Name 		WMITLV_GET_STRUCT_TLVLEN(wmi_dma_ring_cfg_req_fixed_param));
52*5113495bSYour Name 
53*5113495bSYour Name 	cmd->pdev_id = wmi_handle->ops->convert_host_pdev_id_to_target(
54*5113495bSYour Name 						wmi_handle,
55*5113495bSYour Name 						cfg->pdev_id);
56*5113495bSYour Name 	cmd->mod_id = cfg->mod_id;
57*5113495bSYour Name 	cmd->base_paddr_lo = cfg->base_paddr_lo;
58*5113495bSYour Name 	cmd->base_paddr_hi = cfg->base_paddr_hi;
59*5113495bSYour Name 	cmd->head_idx_paddr_lo = cfg->head_idx_paddr_lo;
60*5113495bSYour Name 	cmd->head_idx_paddr_hi = cfg->head_idx_paddr_hi;
61*5113495bSYour Name 	cmd->tail_idx_paddr_lo = cfg->tail_idx_paddr_lo;
62*5113495bSYour Name 	cmd->tail_idx_paddr_hi = cfg->tail_idx_paddr_hi;
63*5113495bSYour Name 	cmd->num_elems = cfg->num_elems;
64*5113495bSYour Name 	cmd->buf_size = cfg->buf_size;
65*5113495bSYour Name 	cmd->num_resp_per_event = cfg->num_resp_per_event;
66*5113495bSYour Name 	cmd->event_timeout_ms = cfg->event_timeout_ms;
67*5113495bSYour Name 
68*5113495bSYour Name 	wmi_debug("wmi_dma_ring_cfg_req_fixed_param pdev id %d mod id %d"
69*5113495bSYour Name 		  "base paddr lo %x base paddr hi %x head idx paddr lo %x"
70*5113495bSYour Name 		  "head idx paddr hi %x tail idx paddr lo %x"
71*5113495bSYour Name 		  "tail idx addr hi %x num elems %d buf size %d num resp %d"
72*5113495bSYour Name 		  "event timeout %d", cmd->pdev_id,
73*5113495bSYour Name 		  cmd->mod_id, cmd->base_paddr_lo, cmd->base_paddr_hi,
74*5113495bSYour Name 		  cmd->head_idx_paddr_lo, cmd->head_idx_paddr_hi,
75*5113495bSYour Name 		  cmd->tail_idx_paddr_lo, cmd->tail_idx_paddr_hi,
76*5113495bSYour Name 		  cmd->num_elems, cmd->buf_size, cmd->num_resp_per_event,
77*5113495bSYour Name 		  cmd->event_timeout_ms);
78*5113495bSYour Name 	wmi_mtrace(WMI_PDEV_DMA_RING_CFG_REQ_CMDID, NO_SESSION, 0);
79*5113495bSYour Name 	ret = wmi_unified_cmd_send(wmi_handle, buf, len,
80*5113495bSYour Name 				WMI_PDEV_DMA_RING_CFG_REQ_CMDID);
81*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(ret)) {
82*5113495bSYour Name 		wmi_err(":wmi cmd send failed");
83*5113495bSYour Name 		wmi_buf_free(buf);
84*5113495bSYour Name 	}
85*5113495bSYour Name 
86*5113495bSYour Name 	return ret;
87*5113495bSYour Name }
88*5113495bSYour Name 
extract_scaling_params_service_ready_ext_tlv(wmi_unified_t wmi_handle,uint8_t * event,uint8_t idx,struct wlan_psoc_host_spectral_scaling_params * param)89*5113495bSYour Name static QDF_STATUS extract_scaling_params_service_ready_ext_tlv(
90*5113495bSYour Name 			wmi_unified_t wmi_handle,
91*5113495bSYour Name 			uint8_t *event, uint8_t idx,
92*5113495bSYour Name 			struct wlan_psoc_host_spectral_scaling_params *param)
93*5113495bSYour Name {
94*5113495bSYour Name 	WMI_SERVICE_READY_EXT_EVENTID_param_tlvs *param_buf;
95*5113495bSYour Name 	wmi_spectral_bin_scaling_params *spectral_bin_scaling_params;
96*5113495bSYour Name 
97*5113495bSYour Name 	param_buf = (WMI_SERVICE_READY_EXT_EVENTID_param_tlvs *)event;
98*5113495bSYour Name 	if (!param_buf)
99*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
100*5113495bSYour Name 
101*5113495bSYour Name 	spectral_bin_scaling_params = &param_buf->wmi_bin_scaling_params[idx];
102*5113495bSYour Name 
103*5113495bSYour Name 	param->pdev_id = wmi_handle->ops->convert_target_pdev_id_to_host(
104*5113495bSYour Name 					wmi_handle,
105*5113495bSYour Name 					spectral_bin_scaling_params->pdev_id);
106*5113495bSYour Name 	param->low_level_offset = spectral_bin_scaling_params->low_level_offset;
107*5113495bSYour Name 	param->formula_id = spectral_bin_scaling_params->formula_id;
108*5113495bSYour Name 	param->high_level_offset =
109*5113495bSYour Name 		spectral_bin_scaling_params->high_level_offset;
110*5113495bSYour Name 	param->rssi_thr = spectral_bin_scaling_params->rssi_thr;
111*5113495bSYour Name 	param->default_agc_max_gain =
112*5113495bSYour Name 		spectral_bin_scaling_params->default_agc_max_gain;
113*5113495bSYour Name 
114*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
115*5113495bSYour Name }
116*5113495bSYour Name 
extract_dbr_buf_release_fixed_tlv(wmi_unified_t wmi_handle,uint8_t * event,struct direct_buf_rx_rsp * param)117*5113495bSYour Name static QDF_STATUS extract_dbr_buf_release_fixed_tlv(wmi_unified_t wmi_handle,
118*5113495bSYour Name 		uint8_t *event, struct direct_buf_rx_rsp *param)
119*5113495bSYour Name {
120*5113495bSYour Name 	WMI_PDEV_DMA_RING_BUF_RELEASE_EVENTID_param_tlvs *param_buf;
121*5113495bSYour Name 	wmi_dma_buf_release_fixed_param *ev;
122*5113495bSYour Name 
123*5113495bSYour Name 	param_buf = (WMI_PDEV_DMA_RING_BUF_RELEASE_EVENTID_param_tlvs *)event;
124*5113495bSYour Name 	if (!param_buf)
125*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
126*5113495bSYour Name 
127*5113495bSYour Name 	ev = param_buf->fixed_param;
128*5113495bSYour Name 	if (!ev)
129*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
130*5113495bSYour Name 
131*5113495bSYour Name 	param->pdev_id = wmi_handle->ops->convert_target_pdev_id_to_host(
132*5113495bSYour Name 								wmi_handle,
133*5113495bSYour Name 								ev->pdev_id);
134*5113495bSYour Name 	param->mod_id = ev->mod_id;
135*5113495bSYour Name 	if ((!param_buf->num_entries) ||
136*5113495bSYour Name 	    param_buf->num_entries < ev->num_buf_release_entry) {
137*5113495bSYour Name 		wmi_err("actual num of buf release entries less than provided entries");
138*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
139*5113495bSYour Name 	}
140*5113495bSYour Name 	param->num_buf_release_entry = ev->num_buf_release_entry;
141*5113495bSYour Name 	if (((!param_buf->num_meta_data) ||
142*5113495bSYour Name 	     param_buf->num_meta_data < ev->num_meta_data_entry) &&
143*5113495bSYour Name 	     ((!param_buf->num_cv_meta_data) ||
144*5113495bSYour Name 	     param_buf->num_cv_meta_data < ev->num_meta_data_entry) &&
145*5113495bSYour Name 	     ((!param_buf->num_cqi_meta_data) ||
146*5113495bSYour Name 	     param_buf->num_cqi_meta_data < ev->num_meta_data_entry)) {
147*5113495bSYour Name 		wmi_err(" actual num of meta data entries less than provided entries");
148*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
149*5113495bSYour Name 	}
150*5113495bSYour Name 	param->num_meta_data_entry = param_buf->num_meta_data;
151*5113495bSYour Name 	param->num_cv_meta_data_entry = param_buf->num_cv_meta_data;
152*5113495bSYour Name 	param->num_cqi_meta_data_entry = param_buf->num_cqi_meta_data;
153*5113495bSYour Name 	wmi_debug("pdev id %d mod id %d num buf release entry %d",
154*5113495bSYour Name 		 param->pdev_id, param->mod_id, param->num_buf_release_entry);
155*5113495bSYour Name 
156*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
157*5113495bSYour Name }
158*5113495bSYour Name 
extract_dbr_buf_release_entry_tlv(wmi_unified_t wmi_handle,uint8_t * event,uint8_t idx,struct direct_buf_rx_entry * param)159*5113495bSYour Name static QDF_STATUS extract_dbr_buf_release_entry_tlv(wmi_unified_t wmi_handle,
160*5113495bSYour Name 		uint8_t *event, uint8_t idx, struct direct_buf_rx_entry *param)
161*5113495bSYour Name {
162*5113495bSYour Name 	WMI_PDEV_DMA_RING_BUF_RELEASE_EVENTID_param_tlvs *param_buf;
163*5113495bSYour Name 	wmi_dma_buf_release_entry *entry;
164*5113495bSYour Name 
165*5113495bSYour Name 	param_buf = (WMI_PDEV_DMA_RING_BUF_RELEASE_EVENTID_param_tlvs *)event;
166*5113495bSYour Name 	if (!param_buf)
167*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
168*5113495bSYour Name 
169*5113495bSYour Name 	entry = &param_buf->entries[idx];
170*5113495bSYour Name 
171*5113495bSYour Name 	if (!entry) {
172*5113495bSYour Name 		wmi_err("Entry is NULL");
173*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
174*5113495bSYour Name 	}
175*5113495bSYour Name 
176*5113495bSYour Name 	wmi_debug("paddr_lo[%d] = %x", idx, entry->paddr_lo);
177*5113495bSYour Name 
178*5113495bSYour Name 	param->paddr_lo = entry->paddr_lo;
179*5113495bSYour Name 	param->paddr_hi = entry->paddr_hi;
180*5113495bSYour Name 
181*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
182*5113495bSYour Name }
183*5113495bSYour Name 
extract_dbr_buf_metadata_tlv(wmi_unified_t wmi_handle,uint8_t * event,uint8_t idx,struct direct_buf_rx_metadata * param)184*5113495bSYour Name static QDF_STATUS extract_dbr_buf_metadata_tlv(
185*5113495bSYour Name 		wmi_unified_t wmi_handle, uint8_t *event,
186*5113495bSYour Name 		uint8_t idx, struct direct_buf_rx_metadata *param)
187*5113495bSYour Name {
188*5113495bSYour Name 	WMI_PDEV_DMA_RING_BUF_RELEASE_EVENTID_param_tlvs *param_buf;
189*5113495bSYour Name 	wmi_dma_buf_release_spectral_meta_data *entry;
190*5113495bSYour Name 
191*5113495bSYour Name 	param_buf = (WMI_PDEV_DMA_RING_BUF_RELEASE_EVENTID_param_tlvs *)event;
192*5113495bSYour Name 	if (!param_buf)
193*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
194*5113495bSYour Name 
195*5113495bSYour Name 	entry = &param_buf->meta_data[idx];
196*5113495bSYour Name 
197*5113495bSYour Name 	if (!entry) {
198*5113495bSYour Name 		wmi_err("Entry is NULL");
199*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
200*5113495bSYour Name 	}
201*5113495bSYour Name 
202*5113495bSYour Name 	qdf_mem_copy(param->noisefloor, entry->noise_floor,
203*5113495bSYour Name 		     qdf_min(sizeof(entry->noise_floor),
204*5113495bSYour Name 			     sizeof(param->noisefloor)));
205*5113495bSYour Name 	param->reset_delay = entry->reset_delay;
206*5113495bSYour Name 	param->cfreq1 = entry->freq1;
207*5113495bSYour Name 	param->cfreq2 = entry->freq2;
208*5113495bSYour Name 	param->ch_width = entry->ch_width;
209*5113495bSYour Name 
210*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
211*5113495bSYour Name }
212*5113495bSYour Name 
extract_dbr_buf_cv_metadata_tlv(wmi_unified_t wmi_handle,uint8_t * event,uint8_t idx,struct direct_buf_rx_cv_metadata * param)213*5113495bSYour Name static QDF_STATUS extract_dbr_buf_cv_metadata_tlv(
214*5113495bSYour Name 		wmi_unified_t wmi_handle, uint8_t *event,
215*5113495bSYour Name 		uint8_t idx, struct direct_buf_rx_cv_metadata *param)
216*5113495bSYour Name {
217*5113495bSYour Name 	WMI_PDEV_DMA_RING_BUF_RELEASE_EVENTID_param_tlvs *param_buf;
218*5113495bSYour Name 	wmi_dma_buf_release_cv_upload_meta_data *ev;
219*5113495bSYour Name 
220*5113495bSYour Name 	param_buf = (WMI_PDEV_DMA_RING_BUF_RELEASE_EVENTID_param_tlvs *)event;
221*5113495bSYour Name 	if (!param_buf)
222*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
223*5113495bSYour Name 
224*5113495bSYour Name 	ev = &param_buf->cv_meta_data[idx];
225*5113495bSYour Name 
226*5113495bSYour Name 	if (!ev) {
227*5113495bSYour Name 		wmi_err("CV metadata is NULL");
228*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
229*5113495bSYour Name 	}
230*5113495bSYour Name 
231*5113495bSYour Name 	param->is_valid = ev->is_valid;
232*5113495bSYour Name 	param->fb_type = ev->fb_type;
233*5113495bSYour Name 	param->asnr_len =
234*5113495bSYour Name 		WMI_DMA_BUF_RELEASE_CV_UPLOAD_GET_ASNR_LENGTH(ev->asnr_params);
235*5113495bSYour Name 	param->asnr_offset =
236*5113495bSYour Name 		WMI_DMA_BUF_RELEASE_CV_UPLOAD_GET_ASNR_OFFSET(ev->asnr_params);
237*5113495bSYour Name 	param->dsnr_len =
238*5113495bSYour Name 		WMI_DMA_BUF_RELEASE_CV_UPLOAD_GET_DSNR_LENGTH(ev->dsnr_params);
239*5113495bSYour Name 	param->dsnr_offset =
240*5113495bSYour Name 		WMI_DMA_BUF_RELEASE_CV_UPLOAD_GET_DSNR_OFFSET(ev->dsnr_params);
241*5113495bSYour Name 	WMI_MAC_ADDR_TO_CHAR_ARRAY(&ev->peer_mac_address,
242*5113495bSYour Name 				   &param->peer_mac.bytes[0]);
243*5113495bSYour Name 	param->fb_params = ev->fb_params;
244*5113495bSYour Name 
245*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
246*5113495bSYour Name }
247*5113495bSYour Name 
extract_dbr_buf_cqi_metadata_tlv(wmi_unified_t wmi_handle,uint8_t * event,uint8_t idx,struct direct_buf_rx_cqi_metadata * param)248*5113495bSYour Name static QDF_STATUS extract_dbr_buf_cqi_metadata_tlv(
249*5113495bSYour Name 		wmi_unified_t wmi_handle, uint8_t *event,
250*5113495bSYour Name 		uint8_t idx, struct direct_buf_rx_cqi_metadata *param)
251*5113495bSYour Name {
252*5113495bSYour Name 	WMI_PDEV_DMA_RING_BUF_RELEASE_EVENTID_param_tlvs *param_buf;
253*5113495bSYour Name 	wmi_dma_buf_release_cqi_upload_meta_data *ev;
254*5113495bSYour Name 	uint16_t asnr_len, asnr_offset;
255*5113495bSYour Name 	uint8_t num_users = 0;
256*5113495bSYour Name 	uint8_t i;
257*5113495bSYour Name 
258*5113495bSYour Name 	param_buf = (WMI_PDEV_DMA_RING_BUF_RELEASE_EVENTID_param_tlvs *)event;
259*5113495bSYour Name 	if (!param_buf)
260*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
261*5113495bSYour Name 
262*5113495bSYour Name 	ev = &param_buf->cqi_meta_data[idx];
263*5113495bSYour Name 
264*5113495bSYour Name 	if (!ev) {
265*5113495bSYour Name 		wmi_err("CQI metadata is NULL");
266*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
267*5113495bSYour Name 	}
268*5113495bSYour Name 
269*5113495bSYour Name 	param->fb_params = ev->fb_params_cqi;
270*5113495bSYour Name 	asnr_len =
271*5113495bSYour Name 		WMI_DMA_BUF_RELEASE_CV_UPLOAD_GET_ASNR_LENGTH(ev->asnr_params);
272*5113495bSYour Name 	asnr_offset =
273*5113495bSYour Name 		WMI_DMA_BUF_RELEASE_CV_UPLOAD_GET_ASNR_OFFSET(ev->asnr_params);
274*5113495bSYour Name 	for (i = 0; i < MAX_NUM_CQI_USERS_IN_STANDALONE_SND; i++) {
275*5113495bSYour Name 		if (WMI_DMA_BUF_RELEASE_CQI_UPLOAD_GET_FB_PARAMS_IS_VALID(
276*5113495bSYour Name 		    param->fb_params, i)) {
277*5113495bSYour Name 			WMI_DMA_BUF_RELEASE_CQI_UPLOAD_SET_FB_PARAMS_IS_VALID(
278*5113495bSYour Name 			param->is_valid, 1, i);
279*5113495bSYour Name 			param->user_info[i].asnr_len = asnr_len;
280*5113495bSYour Name 			param->user_info[i].asnr_offset =
281*5113495bSYour Name 				asnr_offset + CQI_USER_DATA_OFFSET(i);
282*5113495bSYour Name 			param->user_info[i].fb_params =
283*5113495bSYour Name 				WMI_DMA_BUF_RELEASE_CQI_UPLOAD_GET_FB_PARAMS_NC(
284*5113495bSYour Name 				param->fb_params, i);
285*5113495bSYour Name 
286*5113495bSYour Name 			WMI_MAC_ADDR_TO_CHAR_ARRAY(&ev->peer_mac_address[i],
287*5113495bSYour Name 				&param->user_info[i].peer_mac.bytes[0]);
288*5113495bSYour Name 			num_users++;
289*5113495bSYour Name 		}
290*5113495bSYour Name 	}
291*5113495bSYour Name 	param->num_users = num_users;
292*5113495bSYour Name 
293*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
294*5113495bSYour Name }
295*5113495bSYour Name 
wmi_dbr_attach_tlv(wmi_unified_t wmi_handle)296*5113495bSYour Name void wmi_dbr_attach_tlv(wmi_unified_t wmi_handle)
297*5113495bSYour Name {
298*5113495bSYour Name 	struct wmi_ops *ops = wmi_handle->ops;
299*5113495bSYour Name 
300*5113495bSYour Name 	ops->send_dbr_cfg_cmd = send_dbr_cfg_cmd_tlv;
301*5113495bSYour Name 	ops->extract_dbr_buf_release_entry = extract_dbr_buf_release_entry_tlv;
302*5113495bSYour Name 	ops->extract_dbr_buf_metadata = extract_dbr_buf_metadata_tlv;
303*5113495bSYour Name 	ops->extract_dbr_buf_cv_metadata = extract_dbr_buf_cv_metadata_tlv;
304*5113495bSYour Name 	ops->extract_dbr_buf_cqi_metadata = extract_dbr_buf_cqi_metadata_tlv;
305*5113495bSYour Name 	ops->extract_dbr_buf_release_fixed = extract_dbr_buf_release_fixed_tlv;
306*5113495bSYour Name 	ops->extract_scaling_params_service_ready_ext =
307*5113495bSYour Name 			extract_scaling_params_service_ready_ext_tlv;
308*5113495bSYour Name }
309