xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlo_mgr/inc/wlan_mlo_mgr_msgq.h (revision 2f4b444fb7e689b83a4ab0e7b3b38f0bf4def8e0)
1 /*
2  * Copyright (c) 2021, The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 /*
18  * DOC: contains mlo manager msgq structure definitions
19  */
20 
21 #ifndef __MLO_MGR_MSGQ_H
22 #define __MLO_MGR_MSGQ_H
23 
24 /*
25  * struct ctxt_switch_mgr - MLO context switch manager
26  * @ctxt_mgr_timer: Timer to process messages
27  * @msgq_list: list to hold pending messages
28  * @ctxt_lock: Lock to have atomic context
29  * @timer_started: indicates whether timer is running
30  * @max_messages_procd: Max messages can be stored
31  */
32 struct ctxt_switch_mgr {
33 	qdf_timer_t ctxt_mgr_timer;
34 	qdf_list_t msgq_list;
35 	qdf_spinlock_t ctxt_lock;
36 	bool timer_started;
37 	uint16_t max_messages_procd;
38 };
39 
40 /*
41  * enum mlo_msg_type – MLO partner peer message type
42  * @MLO_PEER_CREATE:   Partner peer create
43  * @MLO_PEER_ASSOC:    Partner peer ASSOC
44  * @MLO_PEER_ASSOC_FAIL:  Partner peer ASSOC failure
45  * @MLO_PEER_DISCONNECT:  Partner peer Disconnect
46  */
47 enum mlo_msg_type {
48 	MLO_PEER_CREATE,
49 	MLO_PEER_ASSOC,
50 	MLO_PEER_ASSOC_FAIL,
51 	MLO_PEER_DISCONNECT,
52 };
53 
54 /*
55  * struct peer_create_notif_s - MLO partner peer create notification
56  * @vdev_link: Link VDEV
57  * @ml_peer: ML peer to attached
58  * @addr: Link MAC address
59  * @frm_buf: Assoc request buffer
60  */
61 struct peer_create_notif_s {
62 	struct wlan_objmgr_vdev *vdev_link;
63 	struct wlan_mlo_peer_context *ml_peer;
64 	struct qdf_mac_addr addr;
65 	qdf_nbuf_t frm_buf;
66 };
67 
68 /*
69  * struct peer_assoc_notify_s - MLO partner peer assoc notification
70  * @peer: Link peer on which Peer ASSOC to be sent
71  */
72 struct peer_assoc_notify_s {
73 	struct wlan_objmgr_peer *peer;
74 };
75 
76 /*
77  * struct peer_assoc_fail_notify_s - MLO partner peer assoc fail notification
78  * @peer: Link peer on which Peer assoc resp failure to be sent
79  */
80 struct peer_assoc_fail_notify_s {
81 	struct wlan_objmgr_peer *peer;
82 };
83 
84 /*
85  * struct peer_discon_notify_s - MLO partner peer disconnect notification
86  * @peer: Link peer on which Peer disconnect to be sent
87  */
88 struct peer_discon_notify_s {
89 	struct wlan_objmgr_peer *peer;
90 };
91 
92 /*
93  * union msg_payload - MLO message payload
94  * @peer_create: peer create notification structure
95  * @peer_assoc: peer assoc notification structure
96  * @peer_assoc_fail: peer assoc fail notification structure
97  * @peer_disconn: peer disconnect notification structure
98  */
99 union msg_payload {
100 	struct peer_create_notif_s peer_create;
101 	struct peer_assoc_notify_s peer_assoc;
102 	struct peer_assoc_fail_notify_s peer_assoc_fail;
103 	struct peer_discon_notify_s peer_disconn;
104 };
105 
106 #define MLO_MAX_MSGQ_SIZE 256
107 /*
108  * struct mlo_ctxt_switch_msg_s - MLO ctxt switch message
109  * @type: peer create notification structure
110  * @peer_assoc: peer assoc notification structure
111  * @peer_assoc_fail: peer assoc fail notification structure
112  * @peer_disconn: peer disconnect notification structure
113  */
114 struct mlo_ctxt_switch_msg_s {
115 	qdf_list_node_t node;
116 	enum mlo_msg_type type;
117 	struct wlan_mlo_dev_context *ml_dev;
118 	union msg_payload m;
119 };
120 
121 /**
122  * mlo_msgq_post() - Posts message to defer context
123  * @type: msg tupe
124  * @ml_dev: MLO dev context
125  * @payload: msg buf
126  *
127  * This function post message to defer conext queue for defer processing
128  *
129  * Return: SUCCESS if msg is posted
130  */
131 QDF_STATUS mlo_msgq_post(enum mlo_msg_type type,
132 			 struct wlan_mlo_dev_context *ml_dev,
133 			 void *payload);
134 #endif
135