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