mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 07:33:19 +02:00
wifi: ath12k: enforce CPU endian format for all QMI data
Currently, the QMI interface only works on little endian systems due to how it encodes and decodes data. Most QMI related data structures do not use endian specific types and are already defined in CPU native order. The ath12k specific QMI structs are an exception: they use partially endian specific types, which prevents the QMI interface from being extended to support big endian systems. Update the two affected ath12k QMI structs to use CPU order types instead. This is required because the QMI interface is being extended to support big endian system, and that support depends on QMI data structures being defined in CPU native order. This change: * preserves compatibility with existing kernels, which only support little endian system * enables future support for big endian systems * aligns ath12k QMI handling with the general QMI design Signed-off-by: Alexander Wilhelm <alexander.wilhelm@westermo.com> Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com> Link: https://patch.msgid.link/20250922061607.11543-1-alexander.wilhelm@westermo.com Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
This commit is contained in:
parent
b706fb4e58
commit
9eb6f55302
|
|
@ -3307,20 +3307,28 @@ static int ath12k_qmi_wlanfw_wlan_cfg_send(struct ath12k_base *ab)
|
|||
/* This is number of CE configs */
|
||||
req->tgt_cfg_len = ab->qmi.ce_cfg.tgt_ce_len;
|
||||
for (pipe_num = 0; pipe_num < req->tgt_cfg_len ; pipe_num++) {
|
||||
req->tgt_cfg[pipe_num].pipe_num = ce_cfg[pipe_num].pipenum;
|
||||
req->tgt_cfg[pipe_num].pipe_dir = ce_cfg[pipe_num].pipedir;
|
||||
req->tgt_cfg[pipe_num].nentries = ce_cfg[pipe_num].nentries;
|
||||
req->tgt_cfg[pipe_num].nbytes_max = ce_cfg[pipe_num].nbytes_max;
|
||||
req->tgt_cfg[pipe_num].flags = ce_cfg[pipe_num].flags;
|
||||
req->tgt_cfg[pipe_num].pipe_num =
|
||||
__le32_to_cpu(ce_cfg[pipe_num].pipenum);
|
||||
req->tgt_cfg[pipe_num].pipe_dir =
|
||||
__le32_to_cpu(ce_cfg[pipe_num].pipedir);
|
||||
req->tgt_cfg[pipe_num].nentries =
|
||||
__le32_to_cpu(ce_cfg[pipe_num].nentries);
|
||||
req->tgt_cfg[pipe_num].nbytes_max =
|
||||
__le32_to_cpu(ce_cfg[pipe_num].nbytes_max);
|
||||
req->tgt_cfg[pipe_num].flags =
|
||||
__le32_to_cpu(ce_cfg[pipe_num].flags);
|
||||
}
|
||||
|
||||
req->svc_cfg_valid = 1;
|
||||
/* This is number of Service/CE configs */
|
||||
req->svc_cfg_len = ab->qmi.ce_cfg.svc_to_ce_map_len;
|
||||
for (pipe_num = 0; pipe_num < req->svc_cfg_len; pipe_num++) {
|
||||
req->svc_cfg[pipe_num].service_id = svc_cfg[pipe_num].service_id;
|
||||
req->svc_cfg[pipe_num].pipe_dir = svc_cfg[pipe_num].pipedir;
|
||||
req->svc_cfg[pipe_num].pipe_num = svc_cfg[pipe_num].pipenum;
|
||||
req->svc_cfg[pipe_num].service_id =
|
||||
__le32_to_cpu(svc_cfg[pipe_num].service_id);
|
||||
req->svc_cfg[pipe_num].pipe_dir =
|
||||
__le32_to_cpu(svc_cfg[pipe_num].pipedir);
|
||||
req->svc_cfg[pipe_num].pipe_num =
|
||||
__le32_to_cpu(svc_cfg[pipe_num].pipenum);
|
||||
}
|
||||
|
||||
/* set shadow v3 configuration */
|
||||
|
|
|
|||
|
|
@ -392,17 +392,17 @@ enum qmi_wlanfw_pipedir_enum_v01 {
|
|||
};
|
||||
|
||||
struct qmi_wlanfw_ce_tgt_pipe_cfg_s_v01 {
|
||||
__le32 pipe_num;
|
||||
__le32 pipe_dir;
|
||||
__le32 nentries;
|
||||
__le32 nbytes_max;
|
||||
__le32 flags;
|
||||
u32 pipe_num;
|
||||
u32 pipe_dir;
|
||||
u32 nentries;
|
||||
u32 nbytes_max;
|
||||
u32 flags;
|
||||
};
|
||||
|
||||
struct qmi_wlanfw_ce_svc_pipe_cfg_s_v01 {
|
||||
__le32 service_id;
|
||||
__le32 pipe_dir;
|
||||
__le32 pipe_num;
|
||||
u32 service_id;
|
||||
u32 pipe_dir;
|
||||
u32 pipe_num;
|
||||
};
|
||||
|
||||
struct qmi_wlanfw_shadow_reg_cfg_s_v01 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user