1 /*
2 * Copyright (c) 2013-2020 The Linux Foundation. All rights reserved.
3 * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
4 *
5 * Permission to use, copy, modify, and/or distribute this software for
6 * any purpose with or without fee is hereby granted, provided that the
7 * above copyright notice and this permission notice appear in all
8 * copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17 * PERFORMANCE OF THIS SOFTWARE.
18 */
19
20 /**
21 * DOC: wlan_qct_wma_legacy.c
22 *
23 * This software unit holds the implementation of the WLAN Device Adaptation
24 * Layer for the legacy functionalities that were part of the old HAL.
25 *
26 * The functions externalized by this module are to be called ONLY by other
27 * WLAN modules that properly register with the Transport Layer initially.
28 *
29 */
30
31 /* Standard include files */
32 /* Application Specific include files */
33 #include "lim_api.h"
34 #include "wma.h"
35 #include "sme_power_save_api.h"
36 /* Locally used Defines */
37
38 #define HAL_MMH_MB_MSG_TYPE_MASK 0xFF00
39
40 /**
41 * wma_post_ctrl_msg() - Posts WMA messages to MC thread
42 * @mac: MAC parameters structure
43 * @pMsg: pointer with message
44 *
45 * Return: Success or Failure
46 */
47
wma_post_ctrl_msg(struct mac_context * mac,struct scheduler_msg * pMsg)48 QDF_STATUS wma_post_ctrl_msg(struct mac_context *mac, struct scheduler_msg *pMsg)
49 {
50 if (QDF_STATUS_SUCCESS !=
51 scheduler_post_message(QDF_MODULE_ID_WMA,
52 QDF_MODULE_ID_WMA,
53 QDF_MODULE_ID_WMA, pMsg))
54 return QDF_STATUS_E_FAILURE;
55 else
56 return QDF_STATUS_SUCCESS;
57 }
58
59 /**
60 * u_mac_post_ctrl_msg() - post ctrl msg
61 * @pMb: A pointer to the mailbox message
62 *
63 * Forwards the completely received message to the respective
64 * modules for further processing.
65 *
66 * NOTE:
67 * This function has been moved to the API file because for MAC running
68 * on Windows host, the host module will call this routine directly to
69 * send any mailbox messages. Making this function an API makes sure that
70 * outside world (any module outside MMH) only calls APIs to use MMH
71 * services and not an internal function.
72 *
73 * Return: success/error code
74 */
75
u_mac_post_ctrl_msg(void * pSirGlobal,tSirMbMsg * pMb)76 QDF_STATUS u_mac_post_ctrl_msg(void *pSirGlobal, tSirMbMsg *pMb)
77 {
78 struct scheduler_msg msg = {0};
79 QDF_STATUS status = QDF_STATUS_SUCCESS;
80 struct mac_context *mac = (struct mac_context *) pSirGlobal;
81
82 msg.type = pMb->type;
83 msg.bodyval = 0;
84 msg.bodyptr = pMb;
85
86 switch (msg.type & HAL_MMH_MB_MSG_TYPE_MASK) {
87 case WMA_MSG_TYPES_BEGIN: /* Posts a message to the HAL MsgQ */
88 status = wma_post_ctrl_msg(mac, &msg);
89 break;
90
91 case SIR_LIM_MSG_TYPES_BEGIN: /* Posts a message to the LIM MsgQ */
92 status = lim_post_msg_api(mac, &msg);
93 break;
94
95 case SIR_SME_MSG_TYPES_BEGIN: /* Posts a message to the LIM MsgQ */
96 status = sme_post_pe_message(mac, &msg);
97 break;
98
99 default:
100 wma_debug("Unknown message type = 0x%X", msg.type);
101 qdf_mem_free(msg.bodyptr);
102 return QDF_STATUS_E_FAILURE;
103 }
104
105 if (status != QDF_STATUS_SUCCESS)
106 qdf_mem_free(msg.bodyptr);
107
108 return status;
109
110 } /* u_mac_post_ctrl_msg() */
111
umac_send_mb_message_to_mac(void * msg)112 QDF_STATUS umac_send_mb_message_to_mac(void *msg)
113 {
114 void *mac_handle = cds_get_context(QDF_MODULE_ID_SME);
115
116 if (!mac_handle) {
117 qdf_mem_free(msg);
118 return QDF_STATUS_E_FAILURE;
119 }
120
121 return u_mac_post_ctrl_msg(mac_handle, msg);
122 }
123