xref: /wlan-driver/qcacld-3.0/components/target_if/dp/src/target_if_dp_comp.c (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
3*5113495bSYour Name  *
4*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for any
5*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
6*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
7*5113495bSYour Name  *
8*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15*5113495bSYour Name  */
16*5113495bSYour Name 
17*5113495bSYour Name /**
18*5113495bSYour Name  * DOC: target_if_dp_comp.c
19*5113495bSYour Name  */
20*5113495bSYour Name 
21*5113495bSYour Name #include "target_if_dp_comp.h"
22*5113495bSYour Name #include "target_if.h"
23*5113495bSYour Name #include "qdf_status.h"
24*5113495bSYour Name #include "wmi.h"
25*5113495bSYour Name #include "wmi_unified_api.h"
26*5113495bSYour Name #include "wmi_unified_priv.h"
27*5113495bSYour Name #include "wmi_unified_param.h"
28*5113495bSYour Name #include "wlan_objmgr_psoc_obj.h"
29*5113495bSYour Name #include "wlan_dp_public_struct.h"
30*5113495bSYour Name #include "cdp_txrx_cmn.h"
31*5113495bSYour Name #include "cdp_txrx_ops.h"
32*5113495bSYour Name #include "wlan_dp_main.h"
33*5113495bSYour Name #include <wlan_cm_api.h>
34*5113495bSYour Name 
35*5113495bSYour Name /**
36*5113495bSYour Name  * target_if_dp_get_arp_stats_event_handler() - arp stats event handler
37*5113495bSYour Name  * @scn: scn
38*5113495bSYour Name  * @data: buffer with event
39*5113495bSYour Name  * @datalen: buffer length
40*5113495bSYour Name  *
41*5113495bSYour Name  * Return: Return: 0 on success, failure code otherwise.
42*5113495bSYour Name  */
43*5113495bSYour Name static int
target_if_dp_get_arp_stats_event_handler(ol_scn_t scn,uint8_t * data,uint32_t datalen)44*5113495bSYour Name target_if_dp_get_arp_stats_event_handler(ol_scn_t scn, uint8_t *data,
45*5113495bSYour Name 					 uint32_t datalen)
46*5113495bSYour Name {
47*5113495bSYour Name 	WMI_VDEV_GET_ARP_STAT_EVENTID_param_tlvs *param_buf;
48*5113495bSYour Name 	wmi_vdev_get_arp_stats_event_fixed_param *data_event;
49*5113495bSYour Name 	wmi_vdev_get_connectivity_check_stats *connect_stats_event;
50*5113495bSYour Name 	struct wlan_objmgr_psoc *psoc;
51*5113495bSYour Name 	struct wlan_dp_psoc_nb_ops *nb_ops;
52*5113495bSYour Name 	uint8_t *buf_ptr;
53*5113495bSYour Name 	struct dp_rsp_stats rsp = {0};
54*5113495bSYour Name 
55*5113495bSYour Name 	if (!scn || !data) {
56*5113495bSYour Name 		dp_err("scn: 0x%pK, data: 0x%pK", scn, data);
57*5113495bSYour Name 		return -EINVAL;
58*5113495bSYour Name 	}
59*5113495bSYour Name 	param_buf = (WMI_VDEV_GET_ARP_STAT_EVENTID_param_tlvs *)data;
60*5113495bSYour Name 	if (!param_buf) {
61*5113495bSYour Name 		dp_err("Invalid get arp stats event");
62*5113495bSYour Name 		return -EINVAL;
63*5113495bSYour Name 	}
64*5113495bSYour Name 	data_event = param_buf->fixed_param;
65*5113495bSYour Name 	if (!data_event) {
66*5113495bSYour Name 		dp_err("Invalid get arp stats data event");
67*5113495bSYour Name 		return -EINVAL;
68*5113495bSYour Name 	}
69*5113495bSYour Name 
70*5113495bSYour Name 	psoc = target_if_get_psoc_from_scn_hdl(scn);
71*5113495bSYour Name 	if (!psoc) {
72*5113495bSYour Name 		dp_err("null psoc");
73*5113495bSYour Name 		return -EINVAL;
74*5113495bSYour Name 	}
75*5113495bSYour Name 
76*5113495bSYour Name 	nb_ops = dp_intf_get_rx_ops(psoc);
77*5113495bSYour Name 	if (!nb_ops) {
78*5113495bSYour Name 		dp_err("null tx ops");
79*5113495bSYour Name 		return -EINVAL;
80*5113495bSYour Name 	}
81*5113495bSYour Name 
82*5113495bSYour Name 	rsp.arp_req_enqueue = data_event->arp_req_enqueue;
83*5113495bSYour Name 	rsp.vdev_id = data_event->vdev_id;
84*5113495bSYour Name 	rsp.arp_req_tx_success = data_event->arp_req_tx_success;
85*5113495bSYour Name 	rsp.arp_req_tx_failure = data_event->arp_req_tx_failure;
86*5113495bSYour Name 	rsp.arp_rsp_recvd = data_event->arp_rsp_recvd;
87*5113495bSYour Name 	rsp.out_of_order_arp_rsp_drop_cnt =
88*5113495bSYour Name 		data_event->out_of_order_arp_rsp_drop_cnt;
89*5113495bSYour Name 	rsp.dad_detected = data_event->dad_detected;
90*5113495bSYour Name 	rsp.connect_status = data_event->connect_status;
91*5113495bSYour Name 	rsp.ba_session_establishment_status =
92*5113495bSYour Name 		data_event->ba_session_establishment_status;
93*5113495bSYour Name 
94*5113495bSYour Name 	buf_ptr = (uint8_t *)data_event;
95*5113495bSYour Name 	buf_ptr = buf_ptr + sizeof(wmi_vdev_get_arp_stats_event_fixed_param) +
96*5113495bSYour Name 		  WMI_TLV_HDR_SIZE;
97*5113495bSYour Name 	connect_stats_event = (wmi_vdev_get_connectivity_check_stats *)buf_ptr;
98*5113495bSYour Name 
99*5113495bSYour Name 	if (((connect_stats_event->tlv_header & 0xFFFF0000) >> 16 ==
100*5113495bSYour Name 	      WMITLV_TAG_STRUC_wmi_vdev_get_connectivity_check_stats)) {
101*5113495bSYour Name 		rsp.connect_stats_present = true;
102*5113495bSYour Name 		rsp.tcp_ack_recvd = connect_stats_event->tcp_ack_recvd;
103*5113495bSYour Name 		rsp.icmpv4_rsp_recvd = connect_stats_event->icmpv4_rsp_recvd;
104*5113495bSYour Name 		dp_debug("tcp_ack_recvd %d icmpv4_rsp_recvd %d",
105*5113495bSYour Name 			 connect_stats_event->tcp_ack_recvd,
106*5113495bSYour Name 			 connect_stats_event->icmpv4_rsp_recvd);
107*5113495bSYour Name 	}
108*5113495bSYour Name 
109*5113495bSYour Name 	nb_ops->osif_dp_get_arp_stats_evt(psoc, &rsp);
110*5113495bSYour Name 
111*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
112*5113495bSYour Name }
113*5113495bSYour Name 
114*5113495bSYour Name /**
115*5113495bSYour Name  * target_if_dp_arp_stats_register_event_handler() - register event handler
116*5113495bSYour Name  * @psoc: psoc handle
117*5113495bSYour Name  *
118*5113495bSYour Name  * Return: Return: 0 on success, failure code otherwise.
119*5113495bSYour Name  */
120*5113495bSYour Name static QDF_STATUS
target_if_dp_arp_stats_register_event_handler(struct wlan_objmgr_psoc * psoc)121*5113495bSYour Name target_if_dp_arp_stats_register_event_handler(struct wlan_objmgr_psoc *psoc)
122*5113495bSYour Name {
123*5113495bSYour Name 	struct wmi_unified *wmi_handle;
124*5113495bSYour Name 	QDF_STATUS ret_val;
125*5113495bSYour Name 
126*5113495bSYour Name 	if (!psoc) {
127*5113495bSYour Name 		dp_err("PSOC is NULL!");
128*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
129*5113495bSYour Name 	}
130*5113495bSYour Name 
131*5113495bSYour Name 	wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
132*5113495bSYour Name 	if (!wmi_handle) {
133*5113495bSYour Name 		dp_err("wmi_handle is null");
134*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
135*5113495bSYour Name 	}
136*5113495bSYour Name 
137*5113495bSYour Name 	ret_val = wmi_unified_register_event_handler(wmi_handle,
138*5113495bSYour Name 				wmi_get_arp_stats_req_id,
139*5113495bSYour Name 				target_if_dp_get_arp_stats_event_handler,
140*5113495bSYour Name 				WMI_RX_WORK_CTX);
141*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(ret_val))
142*5113495bSYour Name 		dp_err("Failed to register event_handler");
143*5113495bSYour Name 
144*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
145*5113495bSYour Name }
146*5113495bSYour Name 
147*5113495bSYour Name /**
148*5113495bSYour Name  * target_if_dp_arp_stats_unregister_event_handler() - unregister event handler
149*5113495bSYour Name  * @psoc: psoc handle
150*5113495bSYour Name  *
151*5113495bSYour Name  * Return: Return: 0 on success, failure code otherwise.
152*5113495bSYour Name  */
153*5113495bSYour Name static QDF_STATUS
target_if_dp_arp_stats_unregister_event_handler(struct wlan_objmgr_psoc * psoc)154*5113495bSYour Name target_if_dp_arp_stats_unregister_event_handler(struct wlan_objmgr_psoc *psoc)
155*5113495bSYour Name {
156*5113495bSYour Name 	struct wmi_unified *wmi_handle;
157*5113495bSYour Name 
158*5113495bSYour Name 	if (!psoc) {
159*5113495bSYour Name 		dp_err("PSOC is NULL!");
160*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
161*5113495bSYour Name 	}
162*5113495bSYour Name 
163*5113495bSYour Name 	wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
164*5113495bSYour Name 	if (!wmi_handle) {
165*5113495bSYour Name 		dp_err("wmi_handle is null");
166*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
167*5113495bSYour Name 	}
168*5113495bSYour Name 
169*5113495bSYour Name 	wmi_unified_unregister_event_handler(wmi_handle,
170*5113495bSYour Name 					     wmi_get_arp_stats_req_id);
171*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
172*5113495bSYour Name }
173*5113495bSYour Name 
174*5113495bSYour Name /**
175*5113495bSYour Name  * target_if_dp_get_arp_req_stats() - send get arp stats request command to fw
176*5113495bSYour Name  * @psoc: psoc handle
177*5113495bSYour Name  * @req_buf: get arp stats request buffer
178*5113495bSYour Name  *
179*5113495bSYour Name  * Return: Return: 0 on success, failure code otherwise.
180*5113495bSYour Name  */
181*5113495bSYour Name static QDF_STATUS
target_if_dp_get_arp_req_stats(struct wlan_objmgr_psoc * psoc,struct dp_get_arp_stats_params * req_buf)182*5113495bSYour Name target_if_dp_get_arp_req_stats(struct wlan_objmgr_psoc *psoc,
183*5113495bSYour Name 			       struct dp_get_arp_stats_params *req_buf)
184*5113495bSYour Name {
185*5113495bSYour Name 	QDF_STATUS status;
186*5113495bSYour Name 	struct get_arp_stats *arp_stats;
187*5113495bSYour Name 	struct wmi_unified *wmi_handle;
188*5113495bSYour Name 	struct wlan_objmgr_vdev *vdev;
189*5113495bSYour Name 
190*5113495bSYour Name 	if (!psoc) {
191*5113495bSYour Name 		dp_err("PSOC is NULL!");
192*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
193*5113495bSYour Name 	}
194*5113495bSYour Name 
195*5113495bSYour Name 	wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
196*5113495bSYour Name 	if (!wmi_handle) {
197*5113495bSYour Name 		dp_err("wmi_handle is null");
198*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
199*5113495bSYour Name 	}
200*5113495bSYour Name 
201*5113495bSYour Name 	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc,
202*5113495bSYour Name 						    req_buf->vdev_id,
203*5113495bSYour Name 						    WLAN_DP_ID);
204*5113495bSYour Name 	if (!vdev) {
205*5113495bSYour Name 		dp_err("Can't get vdev by vdev_id:%d", req_buf->vdev_id);
206*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
207*5113495bSYour Name 	}
208*5113495bSYour Name 	if (!wlan_cm_is_vdev_active(vdev)) {
209*5113495bSYour Name 		dp_debug("vdev id:%d is not started", req_buf->vdev_id);
210*5113495bSYour Name 		status = QDF_STATUS_E_INVAL;
211*5113495bSYour Name 		goto release_ref;
212*5113495bSYour Name 	}
213*5113495bSYour Name 
214*5113495bSYour Name 	arp_stats = (struct get_arp_stats *)req_buf;
215*5113495bSYour Name 	status = wmi_unified_get_arp_stats_req(wmi_handle, arp_stats);
216*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
217*5113495bSYour Name 		dp_err("failed to send get arp stats to FW");
218*5113495bSYour Name release_ref:
219*5113495bSYour Name 	wlan_objmgr_vdev_release_ref(vdev, WLAN_DP_ID);
220*5113495bSYour Name 	return status;
221*5113495bSYour Name }
222*5113495bSYour Name 
223*5113495bSYour Name /**
224*5113495bSYour Name  * target_if_dp_set_arp_req_stats() - send set arp stats request command to fw
225*5113495bSYour Name  * @psoc: psoc handle
226*5113495bSYour Name  * @req_buf: set srp stats request buffer
227*5113495bSYour Name  *
228*5113495bSYour Name  * Return: Return: 0 on success, failure code otherwise.
229*5113495bSYour Name  */
230*5113495bSYour Name static QDF_STATUS
target_if_dp_set_arp_req_stats(struct wlan_objmgr_psoc * psoc,struct dp_set_arp_stats_params * req_buf)231*5113495bSYour Name target_if_dp_set_arp_req_stats(struct wlan_objmgr_psoc *psoc,
232*5113495bSYour Name 			       struct dp_set_arp_stats_params *req_buf)
233*5113495bSYour Name {
234*5113495bSYour Name 	QDF_STATUS status;
235*5113495bSYour Name 	struct set_arp_stats *arp_stats;
236*5113495bSYour Name 	struct wmi_unified *wmi_handle;
237*5113495bSYour Name 	struct wlan_objmgr_vdev *vdev;
238*5113495bSYour Name 
239*5113495bSYour Name 	if (!psoc) {
240*5113495bSYour Name 		dp_err("PSOC is NULL!");
241*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
242*5113495bSYour Name 	}
243*5113495bSYour Name 
244*5113495bSYour Name 	wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
245*5113495bSYour Name 	if (!wmi_handle) {
246*5113495bSYour Name 		dp_err("wmi_handle is null");
247*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
248*5113495bSYour Name 	}
249*5113495bSYour Name 
250*5113495bSYour Name 	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc,
251*5113495bSYour Name 						    req_buf->vdev_id,
252*5113495bSYour Name 						    WLAN_DP_ID);
253*5113495bSYour Name 	if (!vdev) {
254*5113495bSYour Name 		dp_err("Can't get vdev by vdev_id:%d", req_buf->vdev_id);
255*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
256*5113495bSYour Name 	}
257*5113495bSYour Name 
258*5113495bSYour Name 	status = wlan_vdev_is_up(vdev);
259*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status)) {
260*5113495bSYour Name 		dp_err("vdev id:%d is not started", req_buf->vdev_id);
261*5113495bSYour Name 		status = QDF_STATUS_E_INVAL;
262*5113495bSYour Name 		goto release_ref;
263*5113495bSYour Name 	}
264*5113495bSYour Name 	arp_stats = (struct set_arp_stats *)req_buf;
265*5113495bSYour Name 	status = wmi_unified_set_arp_stats_req(wmi_handle, arp_stats);
266*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
267*5113495bSYour Name 		dp_err("failed to set arp stats to FW");
268*5113495bSYour Name 
269*5113495bSYour Name release_ref:
270*5113495bSYour Name 	wlan_objmgr_vdev_release_ref(vdev, WLAN_DP_ID);
271*5113495bSYour Name 	return status;
272*5113495bSYour Name }
273*5113495bSYour Name 
274*5113495bSYour Name /**
275*5113495bSYour Name  * target_if_dp_lro_config_cmd() - process the LRO config command
276*5113495bSYour Name  * @psoc: Pointer to psoc handle
277*5113495bSYour Name  * @dp_lro_cmd: Pointer to LRO configuration parameters
278*5113495bSYour Name  *
279*5113495bSYour Name  * This function sends down the LRO configuration parameters to
280*5113495bSYour Name  * the firmware to enable LRO, sets the TCP flags and sets the
281*5113495bSYour Name  * seed values for the toeplitz hash generation
282*5113495bSYour Name  *
283*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS for success otherwise failure
284*5113495bSYour Name  */
285*5113495bSYour Name static QDF_STATUS
target_if_dp_lro_config_cmd(struct wlan_objmgr_psoc * psoc,struct cdp_lro_hash_config * dp_lro_cmd)286*5113495bSYour Name target_if_dp_lro_config_cmd(struct wlan_objmgr_psoc *psoc,
287*5113495bSYour Name 			    struct cdp_lro_hash_config *dp_lro_cmd)
288*5113495bSYour Name {
289*5113495bSYour Name 	struct wmi_lro_config_cmd_t wmi_lro_cmd = {0};
290*5113495bSYour Name 	struct wmi_unified *wmi_handle;
291*5113495bSYour Name 
292*5113495bSYour Name 	wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
293*5113495bSYour Name 	if (!dp_lro_cmd || !wmi_handle) {
294*5113495bSYour Name 		dp_err("wmi_handle or dp_lro_cmd is null");
295*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
296*5113495bSYour Name 	}
297*5113495bSYour Name 
298*5113495bSYour Name 	wmi_lro_cmd.lro_enable = dp_lro_cmd->lro_enable;
299*5113495bSYour Name 	wmi_lro_cmd.tcp_flag = dp_lro_cmd->tcp_flag;
300*5113495bSYour Name 	wmi_lro_cmd.tcp_flag_mask = dp_lro_cmd->tcp_flag_mask;
301*5113495bSYour Name 	qdf_mem_copy(wmi_lro_cmd.toeplitz_hash_ipv4,
302*5113495bSYour Name 		     dp_lro_cmd->toeplitz_hash_ipv4,
303*5113495bSYour Name 		     LRO_IPV4_SEED_ARR_SZ * sizeof(uint32_t));
304*5113495bSYour Name 	qdf_mem_copy(wmi_lro_cmd.toeplitz_hash_ipv6,
305*5113495bSYour Name 		     dp_lro_cmd->toeplitz_hash_ipv6,
306*5113495bSYour Name 		     LRO_IPV6_SEED_ARR_SZ * sizeof(uint32_t));
307*5113495bSYour Name 
308*5113495bSYour Name 	return wmi_unified_lro_config_cmd(wmi_handle, &wmi_lro_cmd);
309*5113495bSYour Name }
310*5113495bSYour Name 
311*5113495bSYour Name /**
312*5113495bSYour Name  * target_if_dp_send_dhcp_ind() - process set arp stats request command to fw
313*5113495bSYour Name  * @vdev_id: vdev id
314*5113495bSYour Name  * @dhcp_ind: DHCP indication.
315*5113495bSYour Name  *
316*5113495bSYour Name  * Return: 0 on success, failure code otherwise.
317*5113495bSYour Name  */
318*5113495bSYour Name static QDF_STATUS
target_if_dp_send_dhcp_ind(uint16_t vdev_id,struct dp_dhcp_ind * dhcp_ind)319*5113495bSYour Name target_if_dp_send_dhcp_ind(uint16_t vdev_id,
320*5113495bSYour Name 			   struct dp_dhcp_ind *dhcp_ind)
321*5113495bSYour Name {
322*5113495bSYour Name 	struct wmi_unified *wmi_handle;
323*5113495bSYour Name 	struct wlan_objmgr_psoc *psoc;
324*5113495bSYour Name 	wmi_peer_set_param_cmd_fixed_param peer_set_param_fp = {0};
325*5113495bSYour Name 	QDF_STATUS status;
326*5113495bSYour Name 
327*5113495bSYour Name 	psoc = wlan_objmgr_get_psoc_by_id(0, WLAN_PSOC_TARGET_IF_ID);
328*5113495bSYour Name 	if (!psoc) {
329*5113495bSYour Name 		dp_err("psoc null");
330*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
331*5113495bSYour Name 	}
332*5113495bSYour Name 
333*5113495bSYour Name 	wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
334*5113495bSYour Name 	if (!wmi_handle) {
335*5113495bSYour Name 		dp_err("Unable to get wmi handle");
336*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
337*5113495bSYour Name 	}
338*5113495bSYour Name 
339*5113495bSYour Name 	/* fill in values */
340*5113495bSYour Name 	peer_set_param_fp.vdev_id = vdev_id;
341*5113495bSYour Name 	peer_set_param_fp.param_id = WMI_HOST_PEER_CRIT_PROTO_HINT_ENABLED;
342*5113495bSYour Name 
343*5113495bSYour Name 	if (dhcp_ind->dhcp_start)
344*5113495bSYour Name 		peer_set_param_fp.param_value = 1;
345*5113495bSYour Name 	else
346*5113495bSYour Name 		peer_set_param_fp.param_value = 0;
347*5113495bSYour Name 
348*5113495bSYour Name 	WMI_CHAR_ARRAY_TO_MAC_ADDR(dhcp_ind->peer_mac_addr.bytes,
349*5113495bSYour Name 				   &peer_set_param_fp.peer_macaddr);
350*5113495bSYour Name 
351*5113495bSYour Name 	status = wmi_unified_process_dhcp_ind(wmi_handle,
352*5113495bSYour Name 					      &peer_set_param_fp);
353*5113495bSYour Name 	wlan_objmgr_psoc_release_ref(psoc, WLAN_PSOC_TARGET_IF_ID);
354*5113495bSYour Name 
355*5113495bSYour Name 	return status;
356*5113495bSYour Name }
357*5113495bSYour Name 
target_if_dp_register_tx_ops(struct wlan_dp_psoc_sb_ops * sb_ops)358*5113495bSYour Name void target_if_dp_register_tx_ops(struct wlan_dp_psoc_sb_ops *sb_ops)
359*5113495bSYour Name {
360*5113495bSYour Name 	sb_ops->dp_arp_stats_register_event_handler =
361*5113495bSYour Name 		target_if_dp_arp_stats_register_event_handler;
362*5113495bSYour Name 	sb_ops->dp_arp_stats_unregister_event_handler =
363*5113495bSYour Name 		target_if_dp_arp_stats_unregister_event_handler;
364*5113495bSYour Name 	sb_ops->dp_get_arp_req_stats =
365*5113495bSYour Name 		target_if_dp_get_arp_req_stats;
366*5113495bSYour Name 	sb_ops->dp_set_arp_req_stats =
367*5113495bSYour Name 		target_if_dp_set_arp_req_stats;
368*5113495bSYour Name 	sb_ops->dp_lro_config_cmd = target_if_dp_lro_config_cmd;
369*5113495bSYour Name 	sb_ops->dp_send_dhcp_ind =
370*5113495bSYour Name 		target_if_dp_send_dhcp_ind;
371*5113495bSYour Name }
372*5113495bSYour Name 
target_if_dp_register_rx_ops(struct wlan_dp_psoc_nb_ops * nb_ops)373*5113495bSYour Name void target_if_dp_register_rx_ops(struct wlan_dp_psoc_nb_ops *nb_ops)
374*5113495bSYour Name {
375*5113495bSYour Name }
376