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