Skip to content

Commit

Permalink
Merge lineage-20.0 from LineageOS/android_kernel_oneplus_sm8250
Browse files Browse the repository at this point in the history
commit: 28048669da64fdc5c7d9b1697531ed25d62ea9aa
Signed-off-by: engstk <eng.stk@sapo.pt>
  • Loading branch information
engstk committed Feb 23, 2023
1 parent ccbbc23 commit c501db8
Show file tree
Hide file tree
Showing 8 changed files with 13 additions and 359 deletions.
31 changes: 0 additions & 31 deletions drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
// SPDX-License-Identifier: GPL-2.0-only
/* Copyright (c) 2013-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
*
* RMNET configuration engine
*
Expand Down Expand Up @@ -718,36 +717,6 @@ bool rmnet_all_flows_enabled(void *port)
}
EXPORT_SYMBOL(rmnet_all_flows_enabled);

void rmnet_prepare_ps_bearers(void *port, u8 *num_bearers, u8 *bearer_id)
{
struct rmnet_endpoint *ep;
unsigned long bkt;
u8 current_num_bearers = 0;
u8 number_bearers_left = 0;
u8 num_bearers_in_out;

if (unlikely(!port || !num_bearers))
return;

number_bearers_left = *num_bearers;

rcu_read_lock();
hash_for_each_rcu(((struct rmnet_port *)port)->muxed_ep,
bkt, ep, hlnode) {
num_bearers_in_out = number_bearers_left;
qmi_rmnet_prepare_ps_bearers(ep->egress_dev,
&num_bearers_in_out,
bearer_id ? bearer_id +
current_num_bearers : NULL);
current_num_bearers += num_bearers_in_out;
number_bearers_left -= num_bearers_in_out;
}
rcu_read_unlock();

*num_bearers = current_num_bearers;
}
EXPORT_SYMBOL(rmnet_prepare_ps_bearers);

int rmnet_get_powersave_notif(void *port)
{
if (!port)
Expand Down
85 changes: 2 additions & 83 deletions drivers/soc/qcom/dfc_qmap.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
*/

#include <net/pkt_sched.h>
Expand All @@ -12,7 +11,6 @@
#include "dfc_defs.h"

#define QMAP_DFC_VER 1
#define QMAP_PS_MAX_BEARERS 32

#define QMAP_CMD_DONE -1

Expand All @@ -25,7 +23,6 @@
#define QMAP_DFC_IND 11
#define QMAP_DFC_QUERY 12
#define QMAP_DFC_END_MARKER 13
#define QMAP_DFC_POWERSAVE 14

struct qmap_hdr {
u8 cd_pad;
Expand Down Expand Up @@ -124,22 +121,6 @@ struct qmap_dfc_end_marker_cnf {
u32 reserved4;
} __aligned(1);

struct qmap_dfc_powersave_req {
struct qmap_cmd_hdr hdr;
u8 cmd_ver;
u8 allow:1;
u8 autoshut:1;
u8 reserved:6;
u8 reserved2;
u8 mode:1;
u8 reserved3:7;
__be32 ep_type;
__be32 iface_id;
u8 num_bearers;
u8 bearer_id[QMAP_PS_MAX_BEARERS];
u8 reserved4[3];
} __aligned(1);

static struct dfc_flow_status_ind_msg_v01 qmap_flow_ind;
static struct dfc_tx_link_status_ind_msg_v01 qmap_tx_ind;
static struct dfc_qmi_data __rcu *qmap_dfc_data;
Expand All @@ -149,16 +130,14 @@ static void *rmnet_ctl_handle;
static void dfc_qmap_send_end_marker_cnf(struct qos_info *qos,
u8 bearer_id, u16 seq, u32 tx_id);

static int dfc_qmap_send_cmd(struct sk_buff *skb)
static void dfc_qmap_send_cmd(struct sk_buff *skb)
{
trace_dfc_qmap(skb->data, skb->len, false);

if (rmnet_ctl_send_client(rmnet_ctl_handle, skb)) {
pr_err("Failed to send to rmnet ctl\n");
kfree_skb(skb);
return -ECOMM;
}
return 0;
}

static void dfc_qmap_send_inband_ack(struct dfc_qmi_data *dfc,
Expand Down Expand Up @@ -472,65 +451,6 @@ static void dfc_qmap_send_end_marker_cnf(struct qos_info *qos,
rmnet_map_tx_qmap_cmd(skb);
}

static int dfc_qmap_send_powersave(u8 enable, u8 num_bearers, u8 *bearer_id)
{
struct sk_buff *skb;
struct qmap_dfc_powersave_req *dfc_powersave;
unsigned int len = sizeof(struct qmap_dfc_powersave_req);
struct dfc_qmi_data *dfc;
u32 ep_type = 0;
u32 iface_id = 0;

rcu_read_lock();
dfc = rcu_dereference(qmap_dfc_data);
if (dfc) {
ep_type = dfc->svc.ep_type;
iface_id = dfc->svc.iface_id;
} else {
rcu_read_unlock();
return -EINVAL;
}
rcu_read_unlock();

skb = alloc_skb(len, GFP_ATOMIC);
if (!skb)
return -ENOMEM;

skb->protocol = htons(ETH_P_MAP);
dfc_powersave = (struct qmap_dfc_powersave_req *)skb_put(skb, len);
memset(dfc_powersave, 0, len);

dfc_powersave->hdr.cd_bit = 1;
dfc_powersave->hdr.mux_id = 0;
dfc_powersave->hdr.pkt_len = htons(len - QMAP_HDR_LEN);
dfc_powersave->hdr.cmd_name = QMAP_DFC_POWERSAVE;
dfc_powersave->hdr.cmd_type = QMAP_CMD_REQUEST;
dfc_powersave->hdr.tx_id = htonl(atomic_inc_return(&qmap_txid));

dfc_powersave->cmd_ver = 3;
dfc_powersave->mode = enable ? 1 : 0;

if (enable && num_bearers) {
if (unlikely(num_bearers > QMAP_PS_MAX_BEARERS))
num_bearers = QMAP_PS_MAX_BEARERS;
dfc_powersave->allow = 1;
dfc_powersave->autoshut = 1;
dfc_powersave->num_bearers = num_bearers;
memcpy(dfc_powersave->bearer_id, bearer_id, num_bearers);
}

dfc_powersave->ep_type = htonl(ep_type);
dfc_powersave->iface_id = htonl(iface_id);

return dfc_qmap_send_cmd(skb);
}

int dfc_qmap_set_powersave(u8 enable, u8 num_bearers, u8 *bearer_id)
{
trace_dfc_set_powersave_mode(enable);
return dfc_qmap_send_powersave(enable, num_bearers, bearer_id);
}

void dfc_qmap_send_ack(struct qos_info *qos, u8 bearer_id, u16 seq, u8 type)
{
struct rmnet_bearer_map *bearer;
Expand Down Expand Up @@ -579,8 +499,7 @@ int dfc_qmap_client_init(void *port, int index, struct svc_info *psvc,

pr_info("DFC QMAP init\n");

if (!qmi->ps_ext)
dfc_qmap_send_config(data);
dfc_qmap_send_config(data);

return 0;
}
Expand Down
15 changes: 3 additions & 12 deletions drivers/soc/qcom/dfc_qmi.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
*/

#include <net/pkt_sched.h>
Expand Down Expand Up @@ -1104,18 +1104,9 @@ void dfc_do_burst_flow_control(struct dfc_qmi_data *dfc,

spin_lock_bh(&qos->qos_lock);

/* In powersave, change grant to 1 if it is a enable */
if (qmi_rmnet_ignore_grant(dfc->rmnet_port)) {
if (flow_status->num_bytes) {
flow_status->num_bytes = DEFAULT_GRANT;
flow_status->seq_num = 0;
/* below is to reset bytes-in-flight */
flow_status->rx_bytes_valid = 1;
flow_status->rx_bytes = 0xFFFFFFFF;
} else {
spin_unlock_bh(&qos->qos_lock);
continue;
}
spin_unlock_bh(&qos->qos_lock);
continue;
}

if (unlikely(flow_status->bearer_id == 0xFF))
Expand Down
Loading

0 comments on commit c501db8

Please sign in to comment.