123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- /* 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_ */
|