Loading include/linux/ipa.h +9 −0 Original line number Diff line number Diff line Loading @@ -655,6 +655,11 @@ struct ipa_ext_intf { * @keep_ipa_awake: when true, IPA will not be clock gated * @napi_enabled: when true, IPA call client callback to start polling * @bypass_agg: when true, IPA bypasses the aggregation * @int_modt: GSI event ring interrupt moderation time * cycles base interrupt moderation (32KHz clock) * @int_modc: GSI event ring interrupt moderation packet counter * @buff_size: Actual buff size of rx_pkt * @ext_ioctl_v2: Flag to determine whether ioctl_v2 received */ struct ipa_sys_connect_params { struct ipa_ep_cfg ipa_ep_cfg; Loading @@ -667,6 +672,10 @@ struct ipa_sys_connect_params { struct napi_struct *napi_obj; bool recycle_enabled; bool bypass_agg; u32 int_modt; u32 int_modc; u32 buff_size; bool ext_ioctl_v2; }; /** Loading include/uapi/linux/msm_rmnet.h +182 −2 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ /* * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2018-2021, The Linux Foundation. All rights reserved. */ #ifndef _UAPI_MSM_RMNET_H_ Loading @@ -22,7 +22,8 @@ #define RMNET_IS_MODE_IP(mode) \ ((mode & RMNET_MODE_LLP_IP) == RMNET_MODE_LLP_IP) /* IOCTL commands /** * IOCTL commands * Values chosen to not conflict with other drivers in the ecosystem */ Loading @@ -39,6 +40,7 @@ #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 */ Loading Loading @@ -69,6 +71,22 @@ #define RMNET_IOCTL_GET_MTU 0x0019 /* Get v4/v6 MTU */ #define RMNET_IOCTL_SET_MTU 0x0020 /* Set v4/v6 MTU */ /** * 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) Loading Loading @@ -104,6 +122,168 @@ #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 { Loading Loading
include/linux/ipa.h +9 −0 Original line number Diff line number Diff line Loading @@ -655,6 +655,11 @@ struct ipa_ext_intf { * @keep_ipa_awake: when true, IPA will not be clock gated * @napi_enabled: when true, IPA call client callback to start polling * @bypass_agg: when true, IPA bypasses the aggregation * @int_modt: GSI event ring interrupt moderation time * cycles base interrupt moderation (32KHz clock) * @int_modc: GSI event ring interrupt moderation packet counter * @buff_size: Actual buff size of rx_pkt * @ext_ioctl_v2: Flag to determine whether ioctl_v2 received */ struct ipa_sys_connect_params { struct ipa_ep_cfg ipa_ep_cfg; Loading @@ -667,6 +672,10 @@ struct ipa_sys_connect_params { struct napi_struct *napi_obj; bool recycle_enabled; bool bypass_agg; u32 int_modt; u32 int_modc; u32 buff_size; bool ext_ioctl_v2; }; /** Loading
include/uapi/linux/msm_rmnet.h +182 −2 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ /* * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2018-2021, The Linux Foundation. All rights reserved. */ #ifndef _UAPI_MSM_RMNET_H_ Loading @@ -22,7 +22,8 @@ #define RMNET_IS_MODE_IP(mode) \ ((mode & RMNET_MODE_LLP_IP) == RMNET_MODE_LLP_IP) /* IOCTL commands /** * IOCTL commands * Values chosen to not conflict with other drivers in the ecosystem */ Loading @@ -39,6 +40,7 @@ #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 */ Loading Loading @@ -69,6 +71,22 @@ #define RMNET_IOCTL_GET_MTU 0x0019 /* Get v4/v6 MTU */ #define RMNET_IOCTL_SET_MTU 0x0020 /* Set v4/v6 MTU */ /** * 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) Loading Loading @@ -104,6 +122,168 @@ #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 { Loading