Add snapshot upto commit f0d2badd74076b ("msm: ipa5: Adding rmnet_ll module APIs to ipa_fmwk") from msm-5.10. CRs-Fixed: 3213076 Change-Id: I24bbfdfb3c24b28eadd019c86ca1c55de6e5c207 Signed-off-by: Subash Abhinov Kasiviswanathan <quic_subashab@quicinc.com>
366 lines
13 KiB
C
366 lines
13 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
|
|
/*
|
|
* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
|
|
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
*/
|
|
|
|
|
|
#ifndef _UAPI_MSM_RMNET_H_
|
|
#define _UAPI_MSM_RMNET_H_
|
|
|
|
#include <linux/types.h>
|
|
|
|
/* Bitmap macros for RmNET driver operation mode. */
|
|
#define RMNET_MODE_NONE (0x00)
|
|
#define RMNET_MODE_LLP_ETH (0x01)
|
|
#define RMNET_MODE_LLP_IP (0x02)
|
|
#define RMNET_MODE_QOS (0x04)
|
|
#define RMNET_MODE_MASK (RMNET_MODE_LLP_ETH | \
|
|
RMNET_MODE_LLP_IP | \
|
|
RMNET_MODE_QOS)
|
|
|
|
#define RMNET_IS_MODE_QOS(mode) \
|
|
((mode & RMNET_MODE_QOS) == RMNET_MODE_QOS)
|
|
#define RMNET_IS_MODE_IP(mode) \
|
|
((mode & RMNET_MODE_LLP_IP) == RMNET_MODE_LLP_IP)
|
|
|
|
/**
|
|
* IOCTL commands
|
|
* Values chosen to not conflict with other drivers in the ecosystem
|
|
*/
|
|
|
|
#define RMNET_IOCTL_SET_LLP_ETHERNET 0x000089F1 /* Set Ethernet protocol */
|
|
#define RMNET_IOCTL_SET_LLP_IP 0x000089F2 /* Set RAWIP protocol */
|
|
#define RMNET_IOCTL_GET_LLP 0x000089F3 /* Get link protocol */
|
|
#define RMNET_IOCTL_SET_QOS_ENABLE 0x000089F4 /* Set QoS header enabled */
|
|
#define RMNET_IOCTL_SET_QOS_DISABLE 0x000089F5 /* Set QoS header disabled*/
|
|
#define RMNET_IOCTL_GET_QOS 0x000089F6 /* Get QoS header state */
|
|
#define RMNET_IOCTL_GET_OPMODE 0x000089F7 /* Get operation mode */
|
|
#define RMNET_IOCTL_OPEN 0x000089F8 /* Open transport port */
|
|
#define RMNET_IOCTL_CLOSE 0x000089F9 /* Close transport port */
|
|
#define RMNET_IOCTL_FLOW_ENABLE 0x000089FA /* Flow enable */
|
|
#define RMNET_IOCTL_FLOW_DISABLE 0x000089FB /* Flow disable */
|
|
#define RMNET_IOCTL_FLOW_SET_HNDL 0x000089FC /* Set flow handle */
|
|
#define RMNET_IOCTL_EXTENDED 0x000089FD /* Extended IOCTLs */
|
|
#define RMNET_IOCTL_EXTENDED_V2 0x000089FE /* Extended V2 IOCTLs */
|
|
|
|
/* RmNet Data Required IOCTLs */
|
|
#define RMNET_IOCTL_GET_SUPPORTED_FEATURES 0x0000 /* Get features */
|
|
#define RMNET_IOCTL_SET_MRU 0x0001 /* Set MRU */
|
|
#define RMNET_IOCTL_GET_MRU 0x0002 /* Get MRU */
|
|
#define RMNET_IOCTL_GET_EPID 0x0003 /* Get endpoint ID */
|
|
#define RMNET_IOCTL_GET_DRIVER_NAME 0x0004 /* Get driver name */
|
|
#define RMNET_IOCTL_ADD_MUX_CHANNEL 0x0005 /* Add MUX ID */
|
|
#define RMNET_IOCTL_SET_EGRESS_DATA_FORMAT 0x0006 /* Set EDF */
|
|
#define RMNET_IOCTL_SET_INGRESS_DATA_FORMAT 0x0007 /* Set IDF */
|
|
#define RMNET_IOCTL_SET_AGGREGATION_COUNT 0x0008 /* Set agg count */
|
|
#define RMNET_IOCTL_GET_AGGREGATION_COUNT 0x0009 /* Get agg count */
|
|
#define RMNET_IOCTL_SET_AGGREGATION_SIZE 0x000A /* Set agg size */
|
|
#define RMNET_IOCTL_GET_AGGREGATION_SIZE 0x000B /* Get agg size */
|
|
#define RMNET_IOCTL_FLOW_CONTROL 0x000C /* Do flow control */
|
|
#define RMNET_IOCTL_GET_DFLT_CONTROL_CHANNEL 0x000D /* For legacy use */
|
|
#define RMNET_IOCTL_GET_HWSW_MAP 0x000E /* Get HW/SW map */
|
|
#define RMNET_IOCTL_SET_RX_HEADROOM 0x000F /* RX Headroom */
|
|
#define RMNET_IOCTL_GET_EP_PAIR 0x0010 /* Endpoint pair */
|
|
#define RMNET_IOCTL_SET_QOS_VERSION 0x0011 /* 8/6 byte QoS hdr*/
|
|
#define RMNET_IOCTL_GET_QOS_VERSION 0x0012 /* 8/6 byte QoS hdr*/
|
|
#define RMNET_IOCTL_GET_SUPPORTED_QOS_MODES 0x0013 /* Get QoS modes */
|
|
#define RMNET_IOCTL_SET_SLEEP_STATE 0x0014 /* Set sleep state */
|
|
#define RMNET_IOCTL_SET_XLAT_DEV_INFO 0x0015 /* xlat dev name */
|
|
#define RMNET_IOCTL_DEREGISTER_DEV 0x0016 /* Dereg a net dev */
|
|
#define RMNET_IOCTL_GET_SG_SUPPORT 0x0017 /* Query sg support*/
|
|
#define RMNET_IOCTL_SET_OFFLOAD 0x0018 /* Set IPA offload */
|
|
#define RMNET_IOCTL_GET_MTU 0x0019 /* Get v4/v6 MTU */
|
|
#define RMNET_IOCTL_SET_MTU 0x0020 /* Set v4/v6 MTU */
|
|
#define RMNET_IOCTL_GET_EPID_LL 0x0021 /* Get LL ep ID */
|
|
#define RMNET_IOCTL_GET_EP_PAIR_LL 0x0022 /* LL ep pair */
|
|
|
|
/**
|
|
* RMNET_IOCTL_EXTENDED_V2 ioctl types.
|
|
* Should be sent through "extended_ioctl_type" variable.
|
|
* Any number of new IOCTL type can be added.
|
|
*/
|
|
/**
|
|
* Set EDF with config values
|
|
* Includes all the egress pipe's config in one single ioctl
|
|
*/
|
|
#define RMNET_IOCTL_SET_EGRESS_DATA_FORMAT_V2 0x0000
|
|
/**
|
|
* Set IDF with config values
|
|
* Includes all the ingress pipe's config in one single ioctl
|
|
*/
|
|
#define RMNET_IOCTL_SET_INGRESS_DATA_FORMAT_V2 0x0001
|
|
|
|
/* Return values for the RMNET_IOCTL_GET_SUPPORTED_FEATURES IOCTL */
|
|
#define RMNET_IOCTL_FEAT_NOTIFY_MUX_CHANNEL (1<<0)
|
|
#define RMNET_IOCTL_FEAT_SET_EGRESS_DATA_FORMAT (1<<1)
|
|
#define RMNET_IOCTL_FEAT_SET_INGRESS_DATA_FORMAT (1<<2)
|
|
#define RMNET_IOCTL_FEAT_SET_AGGREGATION_COUNT (1<<3)
|
|
#define RMNET_IOCTL_FEAT_GET_AGGREGATION_COUNT (1<<4)
|
|
#define RMNET_IOCTL_FEAT_SET_AGGREGATION_SIZE (1<<5)
|
|
#define RMNET_IOCTL_FEAT_GET_AGGREGATION_SIZE (1<<6)
|
|
#define RMNET_IOCTL_FEAT_FLOW_CONTROL (1<<7)
|
|
#define RMNET_IOCTL_FEAT_GET_DFLT_CONTROL_CHANNEL (1<<8)
|
|
#define RMNET_IOCTL_FEAT_GET_HWSW_MAP (1<<9)
|
|
|
|
/* Input values for the RMNET_IOCTL_SET_EGRESS_DATA_FORMAT IOCTL */
|
|
#define RMNET_IOCTL_EGRESS_FORMAT_MAP (1<<1)
|
|
#define RMNET_IOCTL_EGRESS_FORMAT_AGGREGATION (1<<2)
|
|
#define RMNET_IOCTL_EGRESS_FORMAT_MUXING (1<<3)
|
|
#define RMNET_IOCTL_EGRESS_FORMAT_CHECKSUM (1<<4)
|
|
|
|
/* Input values for the RMNET_IOCTL_SET_INGRESS_DATA_FORMAT IOCTL */
|
|
#define RMNET_IOCTL_INGRESS_FORMAT_MAP (1<<1)
|
|
#define RMNET_IOCTL_INGRESS_FORMAT_DEAGGREGATION (1<<2)
|
|
#define RMNET_IOCTL_INGRESS_FORMAT_DEMUXING (1<<3)
|
|
#define RMNET_IOCTL_INGRESS_FORMAT_CHECKSUM (1<<4)
|
|
#define RMNET_IOCTL_INGRESS_FORMAT_AGG_DATA (1<<5)
|
|
|
|
/* Input values for the RMNET_IOCTL_SET_OFFLOAD */
|
|
#define RMNET_IOCTL_OFFLOAD_FORMAT_NONE (0)
|
|
#define RMNET_IOCTL_COALESCING_FORMAT_TCP (1<<0)
|
|
#define RMNET_IOCTL_COALESCING_FORMAT_UDP (1<<1)
|
|
|
|
/* User space may not have this defined. */
|
|
#ifndef IFNAMSIZ
|
|
#define IFNAMSIZ 16
|
|
#endif
|
|
|
|
/**
|
|
* enum rmnet_egress_ep_type - To specify pipe type for egress
|
|
* @RMNET_EGRESS_DEFAULT: WAN Producer pipe
|
|
* @RMNET_EGRESS_LOW_LAT_CTRL: Low latency ctrl producer pipe
|
|
* @RMNET_EGRESS_LOW_LAT_DATA: Low latency data producer pipe
|
|
* Add any number of pipes before max
|
|
*/
|
|
enum rmnet_egress_ep_type {
|
|
RMNET_EGRESS_DEFAULT = 0x0000,
|
|
RMNET_EGRESS_LOW_LAT_CTRL = 0x0001,
|
|
RMNET_EGRESS_LOW_LAT_DATA = 0x0002,
|
|
RMNET_EGRESS_MAX = 0x0003,
|
|
};
|
|
|
|
|
|
/**
|
|
* enum rmnet_ingress_ep_type - To specify pipe type for ingress
|
|
* @RMNET_INGRESS_COALS: Coalescing Consumer pipe
|
|
* @RMNET_INGRESS_DEFAULT: WAN Consumer pipe
|
|
* @RMNET_INGRESS_LOW_LAT_CTRL: Low latency ctrl consumer pipe
|
|
* @RMNET_INGRESS_LOW_LAT_DATA: Low latency data consumer pipe
|
|
* Add any number of pipes before max
|
|
*/
|
|
enum rmnet_ingress_ep_type {
|
|
RMNET_INGRESS_COALS = 0x0000,
|
|
RMNET_INGRESS_DEFAULT = 0x0001,
|
|
RMNET_INGRESS_LOW_LAT_CTRL = 0x0002,
|
|
RMNET_INGRESS_LOW_LAT_DATA = 0x0003,
|
|
RMNET_INGRESS_MAX = 0x0004,
|
|
};
|
|
|
|
/**
|
|
* enum rmnet_egress_ingress_pipe_setup_status - To give
|
|
* back the pipe setup status info to netmngr
|
|
* @IPA_PIPE_SETUP_SUCCESS: pipe setup successful
|
|
* @IPA_PIPE_SETUP_FAILURE: pipe setup failure
|
|
* @IPA_PIPE_SETUP_EXISTS: pipe already exists
|
|
*/
|
|
enum rmnet_egress_ingress_pipe_setup_status {
|
|
IPA_PIPE_SETUP_SUCCESS = 0x0000,
|
|
IPA_PIPE_SETUP_FAILURE = 0x0001,
|
|
IPA_PIPE_SETUP_EXISTS = 0x0002,
|
|
};
|
|
|
|
/**
|
|
* struct rmnet_egress_param - Include all the egress params that
|
|
* needs to be configured. Structure should have even
|
|
* __u32 variables or add padding.
|
|
* @egress_ep_type: Should be from rmnet_egress_ep_type
|
|
* @pipe_setup_status: Out parameter.
|
|
* Need to place below enum
|
|
* rmnet_egress_ingress_pipe_setup_status
|
|
* @cs_offload_en: Checksum offload (1 - Enable)
|
|
* @aggr_en: Aggregation Enable (1 - Enable)
|
|
* @ulso_en: (1 - Enable)
|
|
* @ipid_min_max_idx(for ULSO): A value from the range [0, 2] determines
|
|
* the registers pair from which to read the minimum and maximum of
|
|
* IPv4 packets ID.
|
|
* @int_modt: GSI event ring interrupt moderation time
|
|
* cycles base interrupt moderation (32KHz clock)
|
|
* @int_modc: GSI event ring interrupt moderation packet counter
|
|
*/
|
|
struct rmnet_egress_param {
|
|
__u32 egress_ep_type;
|
|
__u32 pipe_setup_status;
|
|
__u32 cs_offload_en;
|
|
__u32 aggr_en;
|
|
__u32 ulso_en;
|
|
__u32 ipid_min_max_idx;
|
|
__u32 int_modt;
|
|
__u32 int_modc;
|
|
};
|
|
|
|
/**
|
|
* struct rmnet_ingress_param - Include all the ingress params that
|
|
* needs to be configured. Structure should have even
|
|
* __u32 variables or add padding.
|
|
* @ingress_ep_type: Should be from rmnet_ingress_ep_type
|
|
* @pipe_setup_status: Out parameter.
|
|
* Need to place below enum
|
|
* rmnet_egress_ingress_pipe_setup_status
|
|
* @cs_offload_en: Checksum offload (1 - Enable)
|
|
* @buff_size: Actual buff size of rx_pkt
|
|
* @agg_byte_limit: Aggregation byte limit
|
|
* @agg_time_limit: Aggregation time limit
|
|
* @agg_pkt_limit: Aggregation packet limit
|
|
* @int_modt: GSI event ring interrupt moderation time
|
|
* cycles base interrupt moderation (32KHz clock)
|
|
* @int_modc: GSI event ring interrupt moderation packet counter
|
|
* @padding: To make it 64 bit packed structure
|
|
*/
|
|
struct rmnet_ingress_param {
|
|
__u32 ingress_ep_type;
|
|
__u32 pipe_setup_status;
|
|
__u32 cs_offload_en;
|
|
__u32 buff_size;
|
|
__u32 agg_byte_limit;
|
|
__u32 agg_time_limit;
|
|
__u32 agg_pkt_limit;
|
|
__u32 int_modt;
|
|
__u32 int_modc;
|
|
__u32 padding;
|
|
};
|
|
|
|
/**
|
|
* Following uapi coding convention here
|
|
* struct mystruct {
|
|
* __u64 pointer;
|
|
* };
|
|
*
|
|
* In userspace code:
|
|
* mystruct.pointer = (__u64)(uintptr_t) &pointer;
|
|
* In kernelspace code:
|
|
* copy_from_user(&struct, u64_to_user_ptr(mystruct.pointer), size);
|
|
*/
|
|
|
|
/**
|
|
* struct ingress_format_v2 - To include all the ingress params that
|
|
* needs to be configured. Structure should have even
|
|
* __u32 variables or add padding.
|
|
* @ingress_param_ptr: Should be rmnet_ingress_param pointer.
|
|
* Array of ingress params for all the pipes.
|
|
* @ingress_param_size: = sizeof(rmnet_ingress_param);
|
|
* @number_of_eps: Number of ep_types, should be = RMNET_INGRESS_MAX
|
|
*/
|
|
struct ingress_format_v2 {
|
|
__u64 ingress_param_ptr;
|
|
__u32 ingress_param_size;
|
|
__u32 number_of_eps;
|
|
};
|
|
|
|
/**
|
|
* struct egress_format_v2 - To include all the egress params that
|
|
* needs to be configured. Structure should have even
|
|
* __u32 variables or add padding.
|
|
* @egress_param_ptr: Should be rmnet_egress_param pointer.
|
|
* Array of egress params for all the pipes.
|
|
* @egress_param_size: = sizeof(rmnet_egress_param);
|
|
* @number_of_eps: Number of ep_types, should be = RMNET_EGRESS_MAX.
|
|
*/
|
|
struct egress_format_v2 {
|
|
__u64 egress_param_ptr;
|
|
__u32 egress_param_size;
|
|
__u32 number_of_eps;
|
|
};
|
|
|
|
/**
|
|
* struct rmnet_ioctl_extended_s_v2: New structure to include any number of
|
|
* ioctl of any size. Structure should have even
|
|
* __u32 variables or add padding.
|
|
* @ioctl_data_size: Eg: For egress ioctl
|
|
* = sizeof(egress_format_v2)
|
|
* @ioctl_ptr: Has to be typecasted to (__u64)(uintptr_t).
|
|
* @extended_v2_ioctl_type: Should be hash defined above similar
|
|
* to RMNET_IOCTL_SET_EGRESS_DATA_FORMAT_V2.
|
|
*/
|
|
struct rmnet_ioctl_extended_s_v2 {
|
|
__u64 ioctl_ptr;
|
|
__u32 ioctl_data_size;
|
|
__u32 extended_v2_ioctl_type;
|
|
};
|
|
|
|
struct rmnet_ioctl_extended_s {
|
|
__u32 extended_ioctl;
|
|
union {
|
|
__u32 data; /* Generic data field for most extended IOCTLs */
|
|
|
|
/* Return values for
|
|
* RMNET_IOCTL_GET_DRIVER_NAME
|
|
* RMNET_IOCTL_GET_DFLT_CONTROL_CHANNEL
|
|
*/
|
|
__s8 if_name[IFNAMSIZ];
|
|
|
|
/* Input values for the RMNET_IOCTL_ADD_MUX_CHANNEL IOCTL */
|
|
struct {
|
|
__u32 mux_id;
|
|
__s8 vchannel_name[IFNAMSIZ];
|
|
} rmnet_mux_val;
|
|
|
|
/* Input values for the RMNET_IOCTL_FLOW_CONTROL IOCTL */
|
|
struct {
|
|
__u8 flow_mode;
|
|
__u8 mux_id;
|
|
} flow_control_prop;
|
|
|
|
/* Return values for RMNET_IOCTL_GET_EP_PAIR */
|
|
struct {
|
|
__u32 consumer_pipe_num;
|
|
__u32 producer_pipe_num;
|
|
} ipa_ep_pair;
|
|
|
|
struct {
|
|
__u32 __data; /* Placeholder for legacy data*/
|
|
__u32 agg_size;
|
|
__u32 agg_count;
|
|
} ingress_format;
|
|
|
|
/* Input values for the RMNET_IOCTL_SET_OFFLOAD */
|
|
struct {
|
|
__u32 flags;
|
|
__u8 mux_id;
|
|
} offload_params;
|
|
|
|
/* Input values for the RMNET_IOCTL_SET_MTU */
|
|
struct {
|
|
__s8 if_name[IFNAMSIZ];
|
|
/* if given non-zero value, mtu has changed */
|
|
__u16 mtu_v4;
|
|
__u16 mtu_v6;
|
|
} mtu_params;
|
|
} u;
|
|
};
|
|
|
|
struct rmnet_ioctl_data_s {
|
|
union {
|
|
__u32 operation_mode;
|
|
__u32 tcm_handle;
|
|
} u;
|
|
};
|
|
|
|
#define RMNET_IOCTL_QOS_MODE_6 (1<<0)
|
|
#define RMNET_IOCTL_QOS_MODE_8 (1<<1)
|
|
|
|
/* QMI QoS header definition */
|
|
struct QMI_QOS_HDR_S {
|
|
unsigned char version;
|
|
unsigned char flags;
|
|
__u32 flow_id;
|
|
} __attribute((__packed__));
|
|
|
|
/* QMI QoS 8-byte header. */
|
|
struct qmi_qos_hdr8_s {
|
|
struct QMI_QOS_HDR_S hdr;
|
|
__u8 reserved[2];
|
|
} __attribute((__packed__));
|
|
|
|
#endif /* _UAPI_MSM_RMNET_H_ */
|