Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f72d8da6 authored by Conner Huff's avatar Conner Huff
Browse files

drivers: rmnet: perf: New dl marker v2 callbacks



New API's for main rmnet driver to call when handling
Dl markers accompanied with v2 format. This allows
rmnet modules to receive new qcmd field upon callback.

Additionally, flushing at the end of a chain of SKBs
will now be the norm to simplify corner cases as well
as leverage larger chains than before.

Change-Id: I24e239603a5fbc609705bc894b87f0ce6139c2fc
Signed-off-by: default avatarConner Huff <chuff@codeaurora.org>
parent 72a8f8d6
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include <../drivers/net/ethernet/qualcomm/rmnet/rmnet_map.h>
#include <../drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.h>
#include <../drivers/net/ethernet/qualcomm/rmnet/rmnet_config.h>
#include <../drivers/net/ethernet/qualcomm/rmnet/rmnet_private.h>

MODULE_LICENSE("GPL v2");

@@ -231,10 +232,17 @@ rmnet_perf_config_register_callbacks(struct net_device *dev,
	dl_ind = kzalloc(sizeof(struct rmnet_map_dl_ind), GFP_ATOMIC);
	if (dl_ind) {
		dl_ind->priority = RMNET_PERF;
		if (port->data_format & RMNET_INGRESS_FORMAT_DL_MARKER_V2) {
			dl_ind->dl_hdr_handler_v2 =
				&rmnet_perf_core_handle_map_control_start_v2;
			dl_ind->dl_trl_handler_v2 =
				&rmnet_perf_core_handle_map_control_end_v2;
		} else {
			dl_ind->dl_hdr_handler =
				&rmnet_perf_core_handle_map_control_start;
			dl_ind->dl_trl_handler =
				&rmnet_perf_core_handle_map_control_end;
		}
		perf->core_meta->dl_ind = dl_ind;
		if (rmnet_map_dl_ind_register(port, dl_ind)) {
			kfree(dl_ind);
+15 −2
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ MODULE_PARM_DESC(rmnet_perf_core_num_skbs_max, "Num skbs max held from HW");
/* Toggle to flush all coalesced packets when physical device is out of
 * packets
 */
unsigned long int rmnet_perf_core_bm_flush_on = 1;
unsigned long int rmnet_perf_core_bm_flush_on = 0;
module_param(rmnet_perf_core_bm_flush_on, ulong, 0644);
MODULE_PARM_DESC(rmnet_perf_core_bm_flush_on, "turn on bm flushing");

@@ -455,7 +455,14 @@ void rmnet_perf_core_ps_on(void *port)
/* DL marker on, we can try to coalesce more packets */
void rmnet_perf_core_ps_off(void *port)
{
	rmnet_perf_core_bm_flush_on = 1;
	rmnet_perf_core_bm_flush_on = 0;
}

void
rmnet_perf_core_handle_map_control_start_v2(struct rmnet_map_dl_ind_hdr *dlhdr,
				struct rmnet_map_control_command_header *qcmd)
{
	rmnet_perf_core_handle_map_control_start(dlhdr);
}

void
@@ -484,6 +491,12 @@ rmnet_perf_core_handle_map_control_start(struct rmnet_map_dl_ind_hdr *dlhdr)
			     NULL, NULL);
}

void rmnet_perf_core_handle_map_control_end_v2(struct rmnet_map_dl_ind_trl *dltrl,
				struct rmnet_map_control_command_header *qcmd)
{
	rmnet_perf_core_handle_map_control_end(dltrl);
}

void rmnet_perf_core_handle_map_control_end(struct rmnet_map_dl_ind_trl *dltrl)
{
	struct rmnet_perf *perf = rmnet_perf_config_get_perf();
+9 −1
Original line number Diff line number Diff line
@@ -148,7 +148,15 @@ void rmnet_perf_core_deaggregate(struct sk_buff *skb,
void rmnet_perf_core_desc_entry(struct rmnet_frag_descriptor *frag_desc,
				struct rmnet_port *port);
u32 rmnet_perf_core_compute_flow_hash(struct rmnet_perf_pkt_info *pkt_info);
void rmnet_perf_core_handle_map_control_end(struct rmnet_map_dl_ind_trl *dltrl);
void rmnet_perf_core_flush_single_gro_flow(u32 hash_key);
void
rmnet_perf_core_handle_map_control_end_v2(struct rmnet_map_dl_ind_trl *dltrl,
				struct rmnet_map_control_command_header *qcmd);
void
rmnet_perf_core_handle_map_control_start_v2(struct rmnet_map_dl_ind_hdr *dlhdr,
				struct rmnet_map_control_command_header *qcmd);
void
rmnet_perf_core_handle_map_control_end(struct rmnet_map_dl_ind_trl *dltrl);
void
rmnet_perf_core_handle_map_control_start(struct rmnet_map_dl_ind_hdr *dlhdr);