qcacmn: Add set mlo link validation callback

Add "validate_set_mlo_link_cb" callback to mlo link set serialization
request context. Mlo mgr component client can register such callback to
be invoked before set mlo link command to target.

Change-Id: I0e860186dd33fc45b3f662d6af91329f10e4c638
CRs-Fixed: 3324888
This commit is contained in:
Liangwei Dong
2022-10-31 14:35:36 +08:00
committed by Madan Koyyalamudi
szülő 7768a45743
commit 52590a8a70
2 fájl változott, egészen pontosan 24 új sor hozzáadva és 4 régi sor törölve

Fájl megtekintése

@@ -862,13 +862,17 @@ struct mlo_link_set_active_param {
/*
* struct mlo_link_set_active_ctx - Context for MLO link set active request
* @vdev: pointer to vdev on which the request issued
* @cb: callback function for MLO link set active request
* @set_mlo_link_cb: callback function for MLO link set active request
* @validate_set_mlo_link_cb: callback to validate set link request
* @cb_arg: callback context
*/
struct mlo_link_set_active_ctx {
struct wlan_objmgr_vdev *vdev;
void (*set_mlo_link_cb)(struct wlan_objmgr_vdev *vdev, void *arg,
struct mlo_link_set_active_resp *evt);
QDF_STATUS (*validate_set_mlo_link_cb)(
struct wlan_objmgr_psoc *psoc,
struct mlo_link_set_active_param *param);
void *cb_arg;
};

Fájl megtekintése

@@ -438,15 +438,18 @@ void mlo_get_ml_vdev_list(struct wlan_objmgr_vdev *vdev,
/**
* mlo_link_set_active() - send MLO link set active command
* @psoc: PSOC object
* @param: MLO link set active params
* @req: MLO link set active request
*
* Return: QDF_STATUS
*/
static QDF_STATUS
mlo_link_set_active(struct wlan_objmgr_psoc *psoc,
struct mlo_link_set_active_param *param)
struct mlo_link_set_active_req *req)
{
struct wlan_lmac_if_mlo_tx_ops *mlo_tx_ops;
struct mlo_link_set_active_param *param = &req->param;
QDF_STATUS status;
struct mlo_link_set_active_resp rsp_evt;
if (!psoc) {
mlo_err("psoc is null");
@@ -464,6 +467,19 @@ mlo_link_set_active(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_E_NULL_VALUE;
}
if (req->ctx.validate_set_mlo_link_cb) {
status = req->ctx.validate_set_mlo_link_cb(psoc, param);
if (QDF_IS_STATUS_ERROR(status)) {
qdf_mem_zero(&rsp_evt, sizeof(rsp_evt));
rsp_evt.status = status;
if (req->ctx.set_mlo_link_cb)
req->ctx.set_mlo_link_cb(req->ctx.vdev,
req->ctx.cb_arg,
&rsp_evt);
return status;
}
}
return mlo_tx_ops->link_set_active(psoc, param);
}
@@ -564,7 +580,7 @@ mlo_ser_set_link_cb(struct wlan_serialization_command *cmd,
vdev = cmd->vdev;
switch (reason) {
case WLAN_SER_CB_ACTIVATE_CMD:
status = mlo_link_set_active(psoc, &req->param);
status = mlo_link_set_active(psoc, req);
break;
case WLAN_SER_CB_CANCEL_CMD:
case WLAN_SER_CB_ACTIVE_CMD_TIMEOUT: