xref: /wlan-driver/qca-wifi-host-cmn/umac/mlo_mgr/inc/wlan_mlo_mgr_msgq.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2021, The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-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: contains mlo manager msgq structure definitions
20*5113495bSYour Name  */
21*5113495bSYour Name 
22*5113495bSYour Name #ifndef __MLO_MGR_MSGQ_H
23*5113495bSYour Name #define __MLO_MGR_MSGQ_H
24*5113495bSYour Name 
25*5113495bSYour Name /*
26*5113495bSYour Name  * struct ctxt_switch_mgr - MLO context switch manager
27*5113495bSYour Name  * @ctxt_mgr_timer: Timer to process messages
28*5113495bSYour Name  * @msgq_list: list to hold pending messages
29*5113495bSYour Name  * @ctxt_lock: Lock to have atomic context
30*5113495bSYour Name  * @timer_started: indicates whether timer is running
31*5113495bSYour Name  * @max_messages_procd: Max messages can be stored
32*5113495bSYour Name  */
33*5113495bSYour Name struct ctxt_switch_mgr {
34*5113495bSYour Name 	qdf_timer_t ctxt_mgr_timer;
35*5113495bSYour Name 	qdf_list_t msgq_list;
36*5113495bSYour Name 	qdf_spinlock_t ctxt_lock;
37*5113495bSYour Name 	bool timer_started;
38*5113495bSYour Name 	bool allow_msg;
39*5113495bSYour Name 	uint16_t max_messages_procd;
40*5113495bSYour Name };
41*5113495bSYour Name 
42*5113495bSYour Name /*
43*5113495bSYour Name  * enum mlo_msg_type – MLO partner peer message type
44*5113495bSYour Name  * @MLO_PEER_CREATE:   Partner peer create
45*5113495bSYour Name  * @MLO_PEER_ASSOC:    Partner peer ASSOC
46*5113495bSYour Name  * @MLO_PEER_ASSOC_FAIL:  Partner peer ASSOC failure
47*5113495bSYour Name  * @MLO_PEER_DISCONNECT:  Partner peer Disconnect
48*5113495bSYour Name  * @MLO_PEER_DEAUTH:  Initiate Deauth for ML connection
49*5113495bSYour Name  * @MLO_PEER_PENDING_AUTH:  Initiate process of pending auth
50*5113495bSYour Name  * @MLO_BRIDGE_PEER_CREATE:   Bridge peer create
51*5113495bSYour Name  * @MLO_PEER_REASSOC:  Partner peer reassoc
52*5113495bSYour Name  */
53*5113495bSYour Name enum mlo_msg_type {
54*5113495bSYour Name 	MLO_PEER_CREATE,
55*5113495bSYour Name 	MLO_PEER_ASSOC,
56*5113495bSYour Name 	MLO_PEER_ASSOC_FAIL,
57*5113495bSYour Name 	MLO_PEER_DISCONNECT,
58*5113495bSYour Name 	MLO_PEER_DEAUTH,
59*5113495bSYour Name 	MLO_PEER_PENDING_AUTH,
60*5113495bSYour Name 	MLO_BRIDGE_PEER_CREATE,
61*5113495bSYour Name 	MLO_PEER_REASSOC,
62*5113495bSYour Name };
63*5113495bSYour Name 
64*5113495bSYour Name /*
65*5113495bSYour Name  * struct peer_create_notif_s - MLO partner peer create notification
66*5113495bSYour Name  * @vdev_link: Link VDEV
67*5113495bSYour Name  * @ml_peer: ML peer to attached
68*5113495bSYour Name  * @addr: Link MAC address
69*5113495bSYour Name  * @frm_buf: Assoc request buffer
70*5113495bSYour Name  */
71*5113495bSYour Name struct peer_create_notif_s {
72*5113495bSYour Name 	struct wlan_objmgr_vdev *vdev_link;
73*5113495bSYour Name 	struct wlan_mlo_peer_context *ml_peer;
74*5113495bSYour Name 	struct qdf_mac_addr addr;
75*5113495bSYour Name 	qdf_nbuf_t frm_buf;
76*5113495bSYour Name };
77*5113495bSYour Name 
78*5113495bSYour Name /*
79*5113495bSYour Name  * struct peer_assoc_notify_s - MLO partner peer assoc notification
80*5113495bSYour Name  * @peer: Link peer on which Peer ASSOC to be sent
81*5113495bSYour Name  */
82*5113495bSYour Name struct peer_assoc_notify_s {
83*5113495bSYour Name 	struct wlan_objmgr_peer *peer;
84*5113495bSYour Name };
85*5113495bSYour Name 
86*5113495bSYour Name /*
87*5113495bSYour Name  * struct peer_assoc_fail_notify_s - MLO partner peer assoc fail notification
88*5113495bSYour Name  * @peer: Link peer on which Peer assoc resp failure to be sent
89*5113495bSYour Name  */
90*5113495bSYour Name struct peer_assoc_fail_notify_s {
91*5113495bSYour Name 	struct wlan_objmgr_peer *peer;
92*5113495bSYour Name };
93*5113495bSYour Name 
94*5113495bSYour Name /*
95*5113495bSYour Name  * struct peer_discon_notify_s - MLO partner peer disconnect notification
96*5113495bSYour Name  * @peer: Link peer on which Peer disconnect to be sent
97*5113495bSYour Name  */
98*5113495bSYour Name struct peer_discon_notify_s {
99*5113495bSYour Name 	struct wlan_objmgr_peer *peer;
100*5113495bSYour Name };
101*5113495bSYour Name 
102*5113495bSYour Name /*
103*5113495bSYour Name  * struct peer_deauth_notify_s - MLO partner peer deauth notification
104*5113495bSYour Name  * @peer: Link peer on which Peer deauth to be sent
105*5113495bSYour Name  * @is_disassoc: flag indicates that disassoc frame needs to be sent
106*5113495bSYour Name  */
107*5113495bSYour Name struct peer_deauth_notify_s {
108*5113495bSYour Name 	struct wlan_objmgr_peer *peer;
109*5113495bSYour Name 	uint8_t is_disassoc;
110*5113495bSYour Name };
111*5113495bSYour Name 
112*5113495bSYour Name /*
113*5113495bSYour Name  * struct peer_auth_process_notif_s - MLO peer pending auth notification
114*5113495bSYour Name  * @auth_params: Auth param structure
115*5113495bSYour Name  */
116*5113495bSYour Name struct peer_auth_process_notif_s {
117*5113495bSYour Name 	struct mlpeer_auth_params *auth_params;
118*5113495bSYour Name };
119*5113495bSYour Name 
120*5113495bSYour Name /*
121*5113495bSYour Name  * union msg_payload - MLO message payload
122*5113495bSYour Name  * @peer_create: peer create notification structure
123*5113495bSYour Name  * @peer_assoc: peer assoc notification structure
124*5113495bSYour Name  * @peer_assoc_fail: peer assoc fail notification structure
125*5113495bSYour Name  * @peer_disconn: peer disconnect notification structure
126*5113495bSYour Name  * @peer_deauth: peer deauth notification structure
127*5113495bSYour Name  * @peer_auth_process: Peer Auth process notification structure
128*5113495bSYour Name  */
129*5113495bSYour Name union msg_payload {
130*5113495bSYour Name 	struct peer_create_notif_s peer_create;
131*5113495bSYour Name 	struct peer_assoc_notify_s peer_assoc;
132*5113495bSYour Name 	struct peer_assoc_fail_notify_s peer_assoc_fail;
133*5113495bSYour Name 	struct peer_discon_notify_s peer_disconn;
134*5113495bSYour Name 	struct peer_deauth_notify_s peer_deauth;
135*5113495bSYour Name 	struct peer_auth_process_notif_s peer_auth;
136*5113495bSYour Name };
137*5113495bSYour Name 
138*5113495bSYour Name #define MLO_MAX_MSGQ_SIZE 256
139*5113495bSYour Name /*
140*5113495bSYour Name  * struct mlo_ctxt_switch_msg_s - MLO ctxt switch message
141*5113495bSYour Name  * @type: peer create notification structure
142*5113495bSYour Name  * @peer_assoc: peer assoc notification structure
143*5113495bSYour Name  * @peer_assoc_fail: peer assoc fail notification structure
144*5113495bSYour Name  * @peer_disconn: peer disconnect notification structure
145*5113495bSYour Name  */
146*5113495bSYour Name struct mlo_ctxt_switch_msg_s {
147*5113495bSYour Name 	qdf_list_node_t node;
148*5113495bSYour Name 	enum mlo_msg_type type;
149*5113495bSYour Name 	struct wlan_mlo_dev_context *ml_dev;
150*5113495bSYour Name 	union msg_payload m;
151*5113495bSYour Name };
152*5113495bSYour Name 
153*5113495bSYour Name /**
154*5113495bSYour Name  * mlo_msgq_post() - Posts message to defer context
155*5113495bSYour Name  * @type: msg tupe
156*5113495bSYour Name  * @ml_dev: MLO dev context
157*5113495bSYour Name  * @payload: msg buf
158*5113495bSYour Name  *
159*5113495bSYour Name  * This function post message to defer context queue for defer processing
160*5113495bSYour Name  *
161*5113495bSYour Name  * Return: SUCCESS if msg is posted
162*5113495bSYour Name  */
163*5113495bSYour Name QDF_STATUS mlo_msgq_post(enum mlo_msg_type type,
164*5113495bSYour Name 			 struct wlan_mlo_dev_context *ml_dev,
165*5113495bSYour Name 			 void *payload);
166*5113495bSYour Name 
167*5113495bSYour Name /**
168*5113495bSYour Name  * mlo_msgq_init() - Init MLO message queue
169*5113495bSYour Name  *
170*5113495bSYour Name  * This function initializes MLO msg queue module
171*5113495bSYour Name  *
172*5113495bSYour Name  * Return: void
173*5113495bSYour Name  */
174*5113495bSYour Name void mlo_msgq_init(void);
175*5113495bSYour Name 
176*5113495bSYour Name /**
177*5113495bSYour Name  * mlo_msgq_free() - Free MLO message queue
178*5113495bSYour Name  *
179*5113495bSYour Name  * This function frees MLO msg queue module
180*5113495bSYour Name  *
181*5113495bSYour Name  * Return: void
182*5113495bSYour Name  */
183*5113495bSYour Name void mlo_msgq_free(void);
184*5113495bSYour Name #endif
185