xref: /wlan-driver/qca-wifi-host-cmn/umac/mlme/mlme_utils/wlan_vdev_mlme_ser_if.c (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2022-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 any
6*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
7*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
8*5113495bSYour Name  *
9*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*5113495bSYour Name  */
17*5113495bSYour Name 
18*5113495bSYour Name /**
19*5113495bSYour Name  * DOC: wlan_vdev_mlme_ser.c
20*5113495bSYour Name  * This file contains the APIs to support interface between vdev_mlme and
21*5113495bSYour Name  * serialization module
22*5113495bSYour Name  */
23*5113495bSYour Name 
24*5113495bSYour Name #include <qdf_types.h>
25*5113495bSYour Name #include <qdf_status.h>
26*5113495bSYour Name #include <qdf_mem.h>
27*5113495bSYour Name #include <wlan_serialization_api.h>
28*5113495bSYour Name #include <wlan_objmgr_vdev_obj.h>
29*5113495bSYour Name #include <wlan_cmn.h>
30*5113495bSYour Name #include <wlan_mlme_dbg.h>
31*5113495bSYour Name #include <include/wlan_mlme_cmn.h>
32*5113495bSYour Name #include <wlan_vdev_mlme_api.h>
33*5113495bSYour Name #include <wlan_vdev_mlme_ser_if.h>
34*5113495bSYour Name 
35*5113495bSYour Name enum wlan_serialization_status
wlan_vdev_mlme_ser_start_bss(struct wlan_serialization_command * cmd)36*5113495bSYour Name wlan_vdev_mlme_ser_start_bss(struct wlan_serialization_command *cmd)
37*5113495bSYour Name {
38*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
39*5113495bSYour Name 
40*5113495bSYour Name 	if (!cmd || !cmd->vdev) {
41*5113495bSYour Name 		mlme_err("Null input");
42*5113495bSYour Name 		return WLAN_SER_CMD_DENIED_UNSPECIFIED;
43*5113495bSYour Name 	}
44*5113495bSYour Name 
45*5113495bSYour Name 	if (!wlan_ser_is_vdev_queue_enabled(cmd->vdev))
46*5113495bSYour Name 		return WLAN_SER_CMD_QUEUE_DISABLED;
47*5113495bSYour Name 	/*
48*5113495bSYour Name 	 * Serialization command filtering logic
49*5113495bSYour Name 	 * a. Cancel any existing start bss cmd in the pending queue
50*5113495bSYour Name 	 * b. If there is an start bss cmd in active queue and
51*5113495bSYour Name 	 * there is no stop bss cmd in pending queue,
52*5113495bSYour Name 	 * then explicitly enqueue a stop bss cmd to avoid back to
53*5113495bSYour Name 	 * back execution of UP cmd.
54*5113495bSYour Name 	 * c. Enqueue the new start bss cmd with serialization
55*5113495bSYour Name 	 */
56*5113495bSYour Name 	wlan_vdev_mlme_ser_cancel_request(
57*5113495bSYour Name 			cmd->vdev,
58*5113495bSYour Name 			WLAN_SER_CMD_VDEV_START_BSS,
59*5113495bSYour Name 			WLAN_SER_CANCEL_VDEV_NON_SCAN_CMD_TYPE);
60*5113495bSYour Name 
61*5113495bSYour Name 	if (wlan_serialization_is_cmd_present_in_active_queue(NULL, cmd)) {
62*5113495bSYour Name 		vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(cmd->vdev);
63*5113495bSYour Name 		if (mlme_vdev_enqueue_exp_ser_cmd(vdev_mlme,
64*5113495bSYour Name 						  WLAN_SER_CMD_VDEV_STOP_BSS)) {
65*5113495bSYour Name 			mlme_err("Unable to add the exception cmd request");
66*5113495bSYour Name 			return WLAN_SER_CMD_DENIED_UNSPECIFIED;
67*5113495bSYour Name 		}
68*5113495bSYour Name 	}
69*5113495bSYour Name 
70*5113495bSYour Name 	return wlan_serialization_request(cmd);
71*5113495bSYour Name }
72*5113495bSYour Name 
73*5113495bSYour Name enum wlan_serialization_status
wlan_vdev_mlme_ser_stop_bss(struct wlan_serialization_command * cmd)74*5113495bSYour Name wlan_vdev_mlme_ser_stop_bss(struct wlan_serialization_command *cmd)
75*5113495bSYour Name {
76*5113495bSYour Name 	uint8_t stop_cmd_pending;
77*5113495bSYour Name 	uint8_t ret;
78*5113495bSYour Name 
79*5113495bSYour Name 	if (!cmd || !cmd->vdev) {
80*5113495bSYour Name 		mlme_err("Null input");
81*5113495bSYour Name 		return WLAN_SER_CMD_DENIED_UNSPECIFIED;
82*5113495bSYour Name 	}
83*5113495bSYour Name 
84*5113495bSYour Name 	if (!wlan_ser_is_vdev_queue_enabled(cmd->vdev))
85*5113495bSYour Name 		return WLAN_SER_CMD_QUEUE_DISABLED;
86*5113495bSYour Name 	/*
87*5113495bSYour Name 	 * Serialization command filtering logic
88*5113495bSYour Name 	 * a. Cancel any existing start/stop/restart command in the pending
89*5113495bSYour Name 	 *  queue.
90*5113495bSYour Name 	 * b. If there is a stop cmd in active queue then return
91*5113495bSYour Name 	 * c. Else enqueue the cmd
92*5113495bSYour Name 	 * d. If stop cmd already existed in pending queue then return with
93*5113495bSYour Name 	 *  already exists else return the enqueued return value.
94*5113495bSYour Name 	 */
95*5113495bSYour Name 	stop_cmd_pending =
96*5113495bSYour Name 		wlan_serialization_is_cmd_present_in_pending_queue(NULL, cmd);
97*5113495bSYour Name 	wlan_vdev_mlme_ser_cancel_request(cmd->vdev,
98*5113495bSYour Name 					  WLAN_SER_CMD_NONSCAN,
99*5113495bSYour Name 					  WLAN_SER_CANCEL_VDEV_NON_SCAN_NB_CMD);
100*5113495bSYour Name 
101*5113495bSYour Name 	if (wlan_serialization_is_cmd_present_in_active_queue(NULL, cmd)) {
102*5113495bSYour Name 		mlme_debug("Cmd already exist in the active queue");
103*5113495bSYour Name 		return WLAN_SER_CMD_DENIED_UNSPECIFIED;
104*5113495bSYour Name 	}
105*5113495bSYour Name 
106*5113495bSYour Name 	ret = wlan_serialization_request(cmd);
107*5113495bSYour Name 
108*5113495bSYour Name 	if (stop_cmd_pending && ret == WLAN_SER_CMD_PENDING)
109*5113495bSYour Name 		return WLAN_SER_CMD_ALREADY_EXISTS;
110*5113495bSYour Name 	else
111*5113495bSYour Name 		return ret;
112*5113495bSYour Name }
113*5113495bSYour Name 
114*5113495bSYour Name enum wlan_serialization_status
wlan_vdev_mlme_ser_vdev_restart(struct wlan_serialization_command * cmd)115*5113495bSYour Name wlan_vdev_mlme_ser_vdev_restart(struct wlan_serialization_command *cmd)
116*5113495bSYour Name {
117*5113495bSYour Name 	if (!cmd || !cmd->vdev) {
118*5113495bSYour Name 		mlme_err("Null input");
119*5113495bSYour Name 		return WLAN_SER_CMD_DENIED_UNSPECIFIED;
120*5113495bSYour Name 	}
121*5113495bSYour Name 
122*5113495bSYour Name 	if (!wlan_ser_is_vdev_queue_enabled(cmd->vdev))
123*5113495bSYour Name 		return WLAN_SER_CMD_QUEUE_DISABLED;
124*5113495bSYour Name 	/*
125*5113495bSYour Name 	 * Serialization command filtering logic
126*5113495bSYour Name 	 * a. If there exists START or PDEV/VDEV restart command in the pending
127*5113495bSYour Name 	 * queue then ignore this new vdev restart request.
128*5113495bSYour Name 	 * b. Else enqueue the new VDEV RESTART cmd
129*5113495bSYour Name 	 */
130*5113495bSYour Name 	cmd->cmd_type = WLAN_SER_CMD_VDEV_START_BSS;
131*5113495bSYour Name 	if (wlan_serialization_is_cmd_present_in_pending_queue(NULL, cmd)) {
132*5113495bSYour Name 		mlme_debug("Start cmd already in the pending queue");
133*5113495bSYour Name 		return WLAN_SER_CMD_ALREADY_EXISTS;
134*5113495bSYour Name 	}
135*5113495bSYour Name 
136*5113495bSYour Name 	cmd->cmd_type = WLAN_SER_CMD_PDEV_RESTART;
137*5113495bSYour Name 	if (wlan_serialization_is_cmd_present_in_pending_queue(NULL, cmd)) {
138*5113495bSYour Name 		mlme_debug("Pdev restart already in the pending queue");
139*5113495bSYour Name 		return WLAN_SER_CMD_ALREADY_EXISTS;
140*5113495bSYour Name 	}
141*5113495bSYour Name 
142*5113495bSYour Name 	cmd->cmd_type = WLAN_SER_CMD_VDEV_RESTART;
143*5113495bSYour Name 	if (wlan_serialization_is_cmd_present_in_pending_queue(NULL, cmd)) {
144*5113495bSYour Name 		mlme_debug("Vdev restart already in the pending queue");
145*5113495bSYour Name 		return WLAN_SER_CMD_ALREADY_EXISTS;
146*5113495bSYour Name 	}
147*5113495bSYour Name 
148*5113495bSYour Name 	return wlan_serialization_request(cmd);
149*5113495bSYour Name }
150*5113495bSYour Name 
wlan_mlme_restart_pdev_iter_cb(struct wlan_objmgr_pdev * pdev,void * object,void * arg)151*5113495bSYour Name static void wlan_mlme_restart_pdev_iter_cb(struct wlan_objmgr_pdev *pdev,
152*5113495bSYour Name 					   void *object, void *arg)
153*5113495bSYour Name {
154*5113495bSYour Name 	struct wlan_objmgr_vdev *vdev = (struct wlan_objmgr_vdev *)object;
155*5113495bSYour Name 	uint8_t *pdev_restart_pending = (uint8_t *)arg;
156*5113495bSYour Name 	struct wlan_serialization_command cmd = {0};
157*5113495bSYour Name 	uint8_t vdev_id = wlan_vdev_get_id(vdev);
158*5113495bSYour Name 
159*5113495bSYour Name 	cmd.vdev = vdev;
160*5113495bSYour Name 	cmd.cmd_id = vdev_id;
161*5113495bSYour Name 	cmd.cmd_type = WLAN_SER_CMD_PDEV_RESTART;
162*5113495bSYour Name 	/*
163*5113495bSYour Name 	 * Serialization command filtering logic
164*5113495bSYour Name 	 * a. Cancel any existing VDEV restart cmd in the pending queue
165*5113495bSYour Name 	 * b. If Pdev restart already exist in pending queue then return else
166*5113495bSYour Name 	 * enqueue the new PDEV RESTART cmd
167*5113495bSYour Name 	 */
168*5113495bSYour Name 	wlan_vdev_mlme_ser_cancel_request(
169*5113495bSYour Name 			vdev,
170*5113495bSYour Name 			WLAN_SER_CMD_VDEV_RESTART,
171*5113495bSYour Name 			WLAN_SER_CANCEL_VDEV_NON_SCAN_CMD_TYPE);
172*5113495bSYour Name 
173*5113495bSYour Name 	if (wlan_serialization_is_cmd_present_in_pending_queue(NULL, &cmd)) {
174*5113495bSYour Name 		mlme_debug("Cmd already exist in the pending queue vdev:%u",
175*5113495bSYour Name 			   vdev_id);
176*5113495bSYour Name 		*pdev_restart_pending = 1;
177*5113495bSYour Name 	}
178*5113495bSYour Name }
179*5113495bSYour Name 
180*5113495bSYour Name enum wlan_serialization_status
wlan_vdev_mlme_ser_pdev_restart(struct wlan_serialization_command * cmd)181*5113495bSYour Name wlan_vdev_mlme_ser_pdev_restart(struct wlan_serialization_command *cmd)
182*5113495bSYour Name {
183*5113495bSYour Name 	struct wlan_objmgr_pdev *pdev;
184*5113495bSYour Name 	uint8_t pdev_restart_in_pending = 0;
185*5113495bSYour Name 
186*5113495bSYour Name 	if (!cmd || !cmd->vdev) {
187*5113495bSYour Name 		mlme_err("Null input");
188*5113495bSYour Name 		return WLAN_SER_CMD_DENIED_UNSPECIFIED;
189*5113495bSYour Name 	}
190*5113495bSYour Name 
191*5113495bSYour Name 	if (!wlan_ser_is_vdev_queue_enabled(cmd->vdev))
192*5113495bSYour Name 		return WLAN_SER_CMD_QUEUE_DISABLED;
193*5113495bSYour Name 
194*5113495bSYour Name 	pdev = wlan_vdev_get_pdev(cmd->vdev);
195*5113495bSYour Name 	wlan_objmgr_pdev_iterate_obj_list(pdev, WLAN_VDEV_OP,
196*5113495bSYour Name 					  wlan_mlme_restart_pdev_iter_cb,
197*5113495bSYour Name 					  &pdev_restart_in_pending, 0,
198*5113495bSYour Name 					  WLAN_MLME_SER_IF_ID);
199*5113495bSYour Name 
200*5113495bSYour Name 	if (pdev_restart_in_pending)
201*5113495bSYour Name 		return WLAN_SER_CMD_ALREADY_EXISTS;
202*5113495bSYour Name 
203*5113495bSYour Name 	return wlan_serialization_request(cmd);
204*5113495bSYour Name }
205*5113495bSYour Name 
206*5113495bSYour Name static void
wlan_mlme_cancel_pending_csa_restart(struct wlan_objmgr_pdev * pdev,void * object,void * arg)207*5113495bSYour Name wlan_mlme_cancel_pending_csa_restart(struct wlan_objmgr_pdev *pdev,
208*5113495bSYour Name 				     void *object, void *arg)
209*5113495bSYour Name {
210*5113495bSYour Name 	struct wlan_objmgr_vdev *vdev = object;
211*5113495bSYour Name 	bool *csa_restart_pending = arg;
212*5113495bSYour Name 	struct wlan_serialization_command cmd = {0};
213*5113495bSYour Name 	uint8_t vdev_id = wlan_vdev_get_id(vdev);
214*5113495bSYour Name 
215*5113495bSYour Name 	cmd.vdev = vdev;
216*5113495bSYour Name 	cmd.cmd_id = vdev_id;
217*5113495bSYour Name 	cmd.cmd_type = WLAN_SER_CMD_PDEV_CSA_RESTART;
218*5113495bSYour Name 	if (wlan_serialization_is_cmd_present_in_pending_queue(NULL, &cmd)) {
219*5113495bSYour Name 		mlme_debug("Cmd already exist in the pending queue vdev:%u",
220*5113495bSYour Name 			   vdev_id);
221*5113495bSYour Name 		*csa_restart_pending = true;
222*5113495bSYour Name 	}
223*5113495bSYour Name 
224*5113495bSYour Name 	wlan_vdev_mlme_ser_cancel_request(
225*5113495bSYour Name 			vdev,
226*5113495bSYour Name 			WLAN_SER_CMD_PDEV_CSA_RESTART,
227*5113495bSYour Name 			WLAN_SER_CANCEL_VDEV_NON_SCAN_CMD_TYPE);
228*5113495bSYour Name }
229*5113495bSYour Name 
230*5113495bSYour Name static void
wlan_mlme_check_pdev_restart(struct wlan_objmgr_pdev * pdev,void * object,void * arg)231*5113495bSYour Name wlan_mlme_check_pdev_restart(struct wlan_objmgr_pdev *pdev,
232*5113495bSYour Name 			     void *object, void *arg)
233*5113495bSYour Name {
234*5113495bSYour Name 	struct wlan_objmgr_vdev *vdev = object;
235*5113495bSYour Name 	bool *pdev_restart_pending  = arg;
236*5113495bSYour Name 	struct wlan_serialization_command cmd = {0};
237*5113495bSYour Name 	uint8_t vdev_id = wlan_vdev_get_id(vdev);
238*5113495bSYour Name 
239*5113495bSYour Name 	cmd.vdev = vdev;
240*5113495bSYour Name 	cmd.cmd_id = vdev_id;
241*5113495bSYour Name 	cmd.cmd_type = WLAN_SER_CMD_PDEV_RESTART;
242*5113495bSYour Name 	if (wlan_serialization_is_cmd_present_in_active_queue(NULL, &cmd)) {
243*5113495bSYour Name 		mlme_debug("Pdev restart already in the active queue vdev:%u",
244*5113495bSYour Name 			   vdev_id);
245*5113495bSYour Name 		*pdev_restart_pending = true;
246*5113495bSYour Name 	}
247*5113495bSYour Name }
248*5113495bSYour Name 
249*5113495bSYour Name enum wlan_serialization_status
wlan_vdev_mlme_ser_pdev_csa_restart(struct wlan_serialization_command * cmd)250*5113495bSYour Name wlan_vdev_mlme_ser_pdev_csa_restart(struct wlan_serialization_command *cmd)
251*5113495bSYour Name {
252*5113495bSYour Name 	struct wlan_objmgr_pdev *pdev;
253*5113495bSYour Name 	bool csa_restart_pending = false;
254*5113495bSYour Name 	bool pdev_restart_pending = false;
255*5113495bSYour Name 	enum wlan_serialization_status ret;
256*5113495bSYour Name 
257*5113495bSYour Name 	if (!cmd || !cmd->vdev) {
258*5113495bSYour Name 		mlme_err("Null input");
259*5113495bSYour Name 		return WLAN_SER_CMD_DENIED_UNSPECIFIED;
260*5113495bSYour Name 	}
261*5113495bSYour Name 
262*5113495bSYour Name 	if (!wlan_ser_is_vdev_queue_enabled(cmd->vdev))
263*5113495bSYour Name 		return WLAN_SER_CMD_QUEUE_DISABLED;
264*5113495bSYour Name 
265*5113495bSYour Name 	/*
266*5113495bSYour Name 	 * Serialization command filtering logic
267*5113495bSYour Name 	 * a. Cancel any existing PDEV CSA restart cmd in the pending queue
268*5113495bSYour Name 	 * b. If there exists PDEV RESTART command in the active queue
269*5113495bSYour Name 	 *    then deny this request
270*5113495bSYour Name 	 * c. If PDEV CSA RESTART cmd already existed in pending queue
271*5113495bSYour Name 	 *    then enqueue and return already exists
272*5113495bSYour Name 	 * d. Else enqueue this PDEV CSA RESTART cmd
273*5113495bSYour Name 	 */
274*5113495bSYour Name 	pdev = wlan_vdev_get_pdev(cmd->vdev);
275*5113495bSYour Name 	wlan_objmgr_pdev_iterate_obj_list(pdev, WLAN_VDEV_OP,
276*5113495bSYour Name 					  wlan_mlme_cancel_pending_csa_restart,
277*5113495bSYour Name 					  &csa_restart_pending, 0,
278*5113495bSYour Name 					  WLAN_MLME_SER_IF_ID);
279*5113495bSYour Name 
280*5113495bSYour Name 	wlan_objmgr_pdev_iterate_obj_list(pdev, WLAN_VDEV_OP,
281*5113495bSYour Name 					  wlan_mlme_check_pdev_restart,
282*5113495bSYour Name 					  &pdev_restart_pending, 0,
283*5113495bSYour Name 					  WLAN_MLME_SER_IF_ID);
284*5113495bSYour Name 
285*5113495bSYour Name 	if (pdev_restart_pending)
286*5113495bSYour Name 		return WLAN_SER_CMD_DENIED_UNSPECIFIED;
287*5113495bSYour Name 
288*5113495bSYour Name 	ret = wlan_serialization_request(cmd);
289*5113495bSYour Name 
290*5113495bSYour Name 	if (csa_restart_pending && ret == WLAN_SER_CMD_PENDING)
291*5113495bSYour Name 		return WLAN_SER_CMD_ALREADY_EXISTS;
292*5113495bSYour Name 
293*5113495bSYour Name 	return ret;
294*5113495bSYour Name }
295*5113495bSYour Name 
296*5113495bSYour Name void
wlan_vdev_mlme_ser_remove_request(struct wlan_objmgr_vdev * vdev,uint32_t cmd_id,enum wlan_serialization_cmd_type cmd_type)297*5113495bSYour Name wlan_vdev_mlme_ser_remove_request(struct wlan_objmgr_vdev *vdev,
298*5113495bSYour Name 				  uint32_t cmd_id,
299*5113495bSYour Name 				  enum wlan_serialization_cmd_type cmd_type)
300*5113495bSYour Name {
301*5113495bSYour Name 	struct wlan_serialization_queued_cmd_info cmd = {0};
302*5113495bSYour Name 
303*5113495bSYour Name 	mlme_debug("Vdev:%d remove cmd:%d", wlan_vdev_get_id(vdev), cmd_type);
304*5113495bSYour Name 
305*5113495bSYour Name 	cmd.vdev = vdev;
306*5113495bSYour Name 	cmd.cmd_id = cmd_id;
307*5113495bSYour Name 	cmd.cmd_type = cmd_type;
308*5113495bSYour Name 	cmd.requestor = WLAN_UMAC_COMP_MLME;
309*5113495bSYour Name 	cmd.req_type = WLAN_SER_CANCEL_NON_SCAN_CMD;
310*5113495bSYour Name 	cmd.queue_type = WLAN_SERIALIZATION_ACTIVE_QUEUE;
311*5113495bSYour Name 
312*5113495bSYour Name 	/* Inform serialization for command completion */
313*5113495bSYour Name 	wlan_serialization_remove_cmd(&cmd);
314*5113495bSYour Name }
315*5113495bSYour Name 
316*5113495bSYour Name void
wlan_vdev_mlme_ser_cancel_request(struct wlan_objmgr_vdev * vdev,enum wlan_serialization_cmd_type cmd_type,enum wlan_serialization_cancel_type req_type)317*5113495bSYour Name wlan_vdev_mlme_ser_cancel_request(struct wlan_objmgr_vdev *vdev,
318*5113495bSYour Name 				  enum wlan_serialization_cmd_type cmd_type,
319*5113495bSYour Name 				  enum wlan_serialization_cancel_type req_type)
320*5113495bSYour Name {
321*5113495bSYour Name 	struct wlan_serialization_queued_cmd_info cmd = {0};
322*5113495bSYour Name 
323*5113495bSYour Name 	cmd.vdev = vdev;
324*5113495bSYour Name 	cmd.cmd_type = cmd_type;
325*5113495bSYour Name 	cmd.req_type = req_type;
326*5113495bSYour Name 	cmd.requestor = WLAN_UMAC_COMP_MLME;
327*5113495bSYour Name 	cmd.queue_type = WLAN_SERIALIZATION_PENDING_QUEUE;
328*5113495bSYour Name 
329*5113495bSYour Name 	wlan_serialization_cancel_request(&cmd);
330*5113495bSYour Name }
331*5113495bSYour Name 
332*5113495bSYour Name void
mlme_ser_inc_act_cmd_timeout(struct wlan_serialization_command * cmd)333*5113495bSYour Name mlme_ser_inc_act_cmd_timeout(struct wlan_serialization_command *cmd)
334*5113495bSYour Name {
335*5113495bSYour Name 	mlme_debug("Increase timeout of cmd type:%d", cmd->cmd_type);
336*5113495bSYour Name 	wlan_serialization_update_timer(cmd);
337*5113495bSYour Name }
338