msm: ipa: add new QMI support for ipa stats

In Android platform, apps-ipa needs to get
ipa-stats from Q6-ipa via QMI-msg to update
the iptable chains for CNE to know the
tethering-pair stats, also set the APN network
quota usage.

Change-Id: I9b9222b4f8f8cf36c95b03b777fdd4aa7c007c21
Signed-off-by: Skylar Chang <chiaweic@codeaurora.org>
This commit is contained in:
Skylar Chang 2015-04-08 11:20:13 -07:00
parent fdb5d2ec7a
commit 6480dfd2e9
3 changed files with 849 additions and 4 deletions

View File

@ -72,6 +72,15 @@ extern struct elem_info ipa_disable_force_clear_datapath_req_msg_data_v01_ei[];
extern struct elem_info ipa_disable_force_clear_datapath_resp_msg_data_v01_ei[];
extern struct elem_info ipa_config_req_msg_data_v01_ei[];
extern struct elem_info ipa_config_resp_msg_data_v01_ei[];
extern struct elem_info ipa_get_data_stats_req_msg_data_v01_ei[];
extern struct elem_info ipa_get_data_stats_resp_msg_data_v01_ei[];
extern struct elem_info ipa_get_apn_data_stats_req_msg_data_v01_ei[];
extern struct elem_info ipa_get_apn_data_stats_resp_msg_data_v01_ei[];
extern struct elem_info ipa_set_data_usage_quota_req_msg_data_v01_ei[];
extern struct elem_info ipa_set_data_usage_quota_resp_msg_data_v01_ei[];
extern struct elem_info ipa_data_usage_quota_reached_ind_msg_data_v01_ei[];
extern struct elem_info ipa_stop_data_usage_quota_req_msg_data_v01_ei[];
extern struct elem_info ipa_stop_data_usage_quota_resp_msg_data_v01_ei[];
/**
* struct ipa_rmnet_context - IPA rmnet context

View File

@ -634,8 +634,8 @@ static struct elem_info ipa_filter_spec_type_data_v01_ei[] = {
},
};
static struct
elem_info ipa_filter_rule_identifier_to_handle_map_data_v01_ei[] = {
static struct elem_info
ipa_filter_rule_identifier_to_handle_map_data_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
@ -1006,6 +1006,26 @@ struct elem_info ipa_indication_reg_req_msg_data_v01_ei[] = {
struct ipa_indication_reg_req_msg_v01,
master_driver_init_complete),
},
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
.elem_size = sizeof(uint8_t),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(
struct ipa_indication_reg_req_msg_v01,
data_usage_quota_reached_valid),
},
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
.elem_size = sizeof(uint8_t),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(
struct ipa_indication_reg_req_msg_v01,
data_usage_quota_reached),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
@ -1811,3 +1831,536 @@ struct elem_info ipa_config_resp_msg_data_v01_ei[] = {
.tlv_type = QMI_COMMON_TLV_TYPE,
},
};
struct elem_info ipa_get_data_stats_req_msg_data_v01_ei[] = {
{
.data_type = QMI_SIGNED_4_BYTE_ENUM,
.elem_len = 1,
.elem_size = sizeof(uint32_t),
.is_array = NO_ARRAY,
.tlv_type = 0x01,
.offset = offsetof(
struct ipa_get_data_stats_req_msg_v01,
ipa_stats_type),
},
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
.elem_size = sizeof(uint8_t),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(
struct ipa_get_data_stats_req_msg_v01,
reset_stats_valid),
},
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
.elem_size = sizeof(uint8_t),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(
struct ipa_get_data_stats_req_msg_v01,
reset_stats),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
},
};
static struct elem_info ipa_pipe_stats_info_type_data_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
.elem_size = sizeof(uint32_t),
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
.offset = offsetof(struct ipa_pipe_stats_info_type_v01,
pipe_index),
},
{
.data_type = QMI_UNSIGNED_8_BYTE,
.elem_len = 1,
.elem_size = sizeof(uint64_t),
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
.offset = offsetof(struct ipa_pipe_stats_info_type_v01,
num_ipv4_packets),
},
{
.data_type = QMI_UNSIGNED_8_BYTE,
.elem_len = 1,
.elem_size = sizeof(uint64_t),
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
.offset = offsetof(struct ipa_pipe_stats_info_type_v01,
num_ipv4_bytes),
},
{
.data_type = QMI_UNSIGNED_8_BYTE,
.elem_len = 1,
.elem_size = sizeof(uint64_t),
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
.offset = offsetof(struct ipa_pipe_stats_info_type_v01,
num_ipv6_packets),
},
{
.data_type = QMI_UNSIGNED_8_BYTE,
.elem_len = 1,
.elem_size = sizeof(uint64_t),
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
.offset = offsetof(struct ipa_pipe_stats_info_type_v01,
num_ipv6_bytes),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
},
};
static struct elem_info ipa_stats_type_filter_rule_data_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
.elem_size = sizeof(uint32_t),
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
.offset = offsetof(struct
ipa_stats_type_filter_rule_v01,
filter_rule_index),
},
{
.data_type = QMI_UNSIGNED_8_BYTE,
.elem_len = 1,
.elem_size = sizeof(uint64_t),
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
.offset = offsetof(struct
ipa_stats_type_filter_rule_v01,
num_packets),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
},
};
struct elem_info ipa_get_data_stats_resp_msg_data_v01_ei[] = {
{
.data_type = QMI_STRUCT,
.elem_len = 1,
.elem_size = sizeof(struct qmi_response_type_v01),
.is_array = NO_ARRAY,
.tlv_type = 0x02,
.offset = offsetof(
struct ipa_get_data_stats_resp_msg_v01,
resp),
.ei_array = get_qmi_response_type_v01_ei(),
},
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
.elem_size = sizeof(uint8_t),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(
struct ipa_get_data_stats_resp_msg_v01,
ipa_stats_type_valid),
},
{
.data_type = QMI_SIGNED_4_BYTE_ENUM,
.elem_len = 1,
.elem_size = sizeof(uint32_t),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(
struct ipa_get_data_stats_resp_msg_v01,
ipa_stats_type),
},
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
.elem_size = sizeof(uint8_t),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(
struct ipa_get_data_stats_resp_msg_v01,
ul_src_pipe_stats_list_valid),
},
{
.data_type = QMI_DATA_LEN,
.elem_len = 1,
.elem_size = sizeof(uint8_t),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(
struct ipa_get_data_stats_resp_msg_v01,
ul_src_pipe_stats_list_len),
},
{
.data_type = QMI_STRUCT,
.elem_len = QMI_IPA_MAX_PIPES_V01,
.elem_size = sizeof(struct ipa_pipe_stats_info_type_v01),
.is_array = VAR_LEN_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(
struct ipa_get_data_stats_resp_msg_v01,
ul_src_pipe_stats_list),
.ei_array = ipa_pipe_stats_info_type_data_v01_ei,
},
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
.elem_size = sizeof(uint8_t),
.is_array = NO_ARRAY,
.tlv_type = 0x12,
.offset = offsetof(
struct ipa_get_data_stats_resp_msg_v01,
dl_dst_pipe_stats_list_valid),
},
{
.data_type = QMI_DATA_LEN,
.elem_len = 1,
.elem_size = sizeof(uint8_t),
.is_array = NO_ARRAY,
.tlv_type = 0x12,
.offset = offsetof(
struct ipa_get_data_stats_resp_msg_v01,
dl_dst_pipe_stats_list_len),
},
{
.data_type = QMI_STRUCT,
.elem_len = QMI_IPA_MAX_PIPES_V01,
.elem_size = sizeof(struct ipa_pipe_stats_info_type_v01),
.is_array = VAR_LEN_ARRAY,
.tlv_type = 0x12,
.offset = offsetof(
struct ipa_get_data_stats_resp_msg_v01,
dl_dst_pipe_stats_list),
.ei_array = ipa_pipe_stats_info_type_data_v01_ei,
},
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
.elem_size = sizeof(uint8_t),
.is_array = NO_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(
struct ipa_get_data_stats_resp_msg_v01,
dl_filter_rule_stats_list_valid),
},
{
.data_type = QMI_DATA_LEN,
.elem_len = 1,
.elem_size = sizeof(uint8_t),
.is_array = NO_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(
struct ipa_get_data_stats_resp_msg_v01,
dl_filter_rule_stats_list_len),
},
{
.data_type = QMI_STRUCT,
.elem_len = QMI_IPA_MAX_FILTERS_V01,
.elem_size = sizeof(struct ipa_pipe_stats_info_type_v01),
.is_array = VAR_LEN_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(
struct ipa_get_data_stats_resp_msg_v01,
dl_filter_rule_stats_list),
.ei_array = ipa_stats_type_filter_rule_data_v01_ei,
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
},
};
static struct elem_info ipa_apn_data_stats_info_type_data_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
.elem_size = sizeof(uint32_t),
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
.offset = offsetof(struct
ipa_apn_data_stats_info_type_v01,
mux_id),
},
{
.data_type = QMI_UNSIGNED_8_BYTE,
.elem_len = 1,
.elem_size = sizeof(uint64_t),
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
.offset = offsetof(struct
ipa_apn_data_stats_info_type_v01,
num_ul_packets),
},
{
.data_type = QMI_UNSIGNED_8_BYTE,
.elem_len = 1,
.elem_size = sizeof(uint64_t),
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
.offset = offsetof(struct
ipa_apn_data_stats_info_type_v01,
num_ul_bytes),
},
{
.data_type = QMI_UNSIGNED_8_BYTE,
.elem_len = 1,
.elem_size = sizeof(uint64_t),
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
.offset = offsetof(struct
ipa_apn_data_stats_info_type_v01,
num_dl_packets),
},
{
.data_type = QMI_UNSIGNED_8_BYTE,
.elem_len = 1,
.elem_size = sizeof(uint64_t),
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
.offset = offsetof(struct
ipa_apn_data_stats_info_type_v01,
num_dl_bytes),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
},
};
struct elem_info ipa_get_apn_data_stats_req_msg_data_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
.elem_size = sizeof(uint8_t),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(
struct ipa_get_apn_data_stats_req_msg_v01,
mux_id_list_valid),
},
{
.data_type = QMI_DATA_LEN,
.elem_len = 1,
.elem_size = sizeof(uint8_t),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(
struct ipa_get_apn_data_stats_req_msg_v01,
mux_id_list_len),
},
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = QMI_IPA_MAX_APN_V01,
.elem_size = sizeof(uint32_t),
.is_array = VAR_LEN_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(
struct ipa_get_apn_data_stats_req_msg_v01,
mux_id_list),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
},
};
struct elem_info ipa_get_apn_data_stats_resp_msg_data_v01_ei[] = {
{
.data_type = QMI_STRUCT,
.elem_len = 1,
.elem_size = sizeof(struct qmi_response_type_v01),
.is_array = NO_ARRAY,
.tlv_type = 0x02,
.offset = offsetof(
struct ipa_get_apn_data_stats_resp_msg_v01,
resp),
.ei_array = get_qmi_response_type_v01_ei(),
},
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
.elem_size = sizeof(uint8_t),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(
struct ipa_get_apn_data_stats_resp_msg_v01,
apn_data_stats_list_valid),
},
{
.data_type = QMI_DATA_LEN,
.elem_len = 1,
.elem_size = sizeof(uint8_t),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(
struct ipa_get_apn_data_stats_resp_msg_v01,
apn_data_stats_list_len),
},
{
.data_type = QMI_STRUCT,
.elem_len = QMI_IPA_MAX_APN_V01,
.elem_size = sizeof(struct
ipa_apn_data_stats_info_type_v01),
.is_array = VAR_LEN_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(
struct ipa_get_apn_data_stats_resp_msg_v01,
apn_data_stats_list),
.ei_array = ipa_apn_data_stats_info_type_data_v01_ei,
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
},
};
static struct elem_info ipa_data_usage_quota_info_type_data_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
.elem_size = sizeof(uint32_t),
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
.offset = offsetof(struct
ipa_data_usage_quota_info_type_v01,
mux_id),
},
{
.data_type = QMI_UNSIGNED_8_BYTE,
.elem_len = 1,
.elem_size = sizeof(uint64_t),
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
.offset = offsetof(struct
ipa_data_usage_quota_info_type_v01,
num_Mbytes),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
},
};
struct elem_info ipa_set_data_usage_quota_req_msg_data_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
.elem_size = sizeof(uint8_t),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(
struct ipa_set_data_usage_quota_req_msg_v01,
apn_quota_list_valid),
},
{
.data_type = QMI_DATA_LEN,
.elem_len = 1,
.elem_size = sizeof(uint8_t),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(
struct ipa_set_data_usage_quota_req_msg_v01,
apn_quota_list_len),
},
{
.data_type = QMI_STRUCT,
.elem_len = QMI_IPA_MAX_APN_V01,
.elem_size = sizeof(struct
ipa_data_usage_quota_info_type_v01),
.is_array = VAR_LEN_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(
struct ipa_set_data_usage_quota_req_msg_v01,
apn_quota_list),
.ei_array = ipa_data_usage_quota_info_type_data_v01_ei,
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
},
};
struct elem_info ipa_set_data_usage_quota_resp_msg_data_v01_ei[] = {
{
.data_type = QMI_STRUCT,
.elem_len = 1,
.elem_size = sizeof(struct qmi_response_type_v01),
.is_array = NO_ARRAY,
.tlv_type = 0x02,
.offset = offsetof(
struct ipa_set_data_usage_quota_resp_msg_v01,
resp),
.ei_array = get_qmi_response_type_v01_ei(),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
},
};
struct elem_info ipa_data_usage_quota_reached_ind_msg_data_v01_ei[] = {
{
.data_type = QMI_STRUCT,
.elem_len = 1,
.elem_size = sizeof(struct
ipa_data_usage_quota_info_type_v01),
.is_array = NO_ARRAY,
.tlv_type = 0x01,
.offset = offsetof(
struct ipa_data_usage_quota_reached_ind_msg_v01,
apn),
.ei_array = ipa_data_usage_quota_info_type_data_v01_ei,
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
},
};
struct elem_info ipa_stop_data_usage_quota_req_msg_data_v01_ei[] = {
/* ipa_stop_data_usage_quota_req_msg is empty */
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
},
};
struct elem_info ipa_stop_data_usage_quota_resp_msg_data_v01_ei[] = {
{
.data_type = QMI_STRUCT,
.elem_len = 1,
.elem_size = sizeof(struct qmi_response_type_v01),
.is_array = NO_ARRAY,
.tlv_type = 0x02,
.offset = offsetof(
struct ipa_stop_data_usage_quota_resp_msg_v01,
resp),
.ei_array = get_qmi_response_type_v01_ei(),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
.tlv_type = QMI_COMMON_TLV_TYPE,
},
};

View File

@ -44,6 +44,8 @@
#define QMI_IPA_IPFLTR_NUM_IHL_MEQ_32_EQNS_V01 2
#define QMI_IPA_IPFLTR_NUM_MEQ_128_EQNS_V01 2
#define QMI_IPA_MAX_FILTERS_V01 64
#define QMI_IPA_MAX_PIPES_V01 20
#define QMI_IPA_MAX_APN_V01 8
#define IPA_INT_MAX ((int)(~0U>>1))
#define IPA_INT_MIN (-IPA_INT_MAX - 1)
@ -314,6 +316,19 @@ struct ipa_indication_reg_req_msg_v01 {
* only when the QMI_IPA_INDICATION_REGISTER_REQ is being
* originated from the modem driver
*/
/* Optional */
/* Data Usage Quota Reached */
uint8_t data_usage_quota_reached_valid;
/* Must be set to true if data_usage_quota_reached is being passed */
uint8_t data_usage_quota_reached;
/* If set to TRUE, this field indicates that the client wants to
* receive indications about reaching the data usage quota that
* previously set via QMI_IPA_SET_DATA_USAGE_QUOTA. Setting this field
* in the request message makes sense only when the
* QMI_IPA_INDICATION_REGISTER_REQ is being originated from the Master
* driver
*/
}; /* Message */
@ -888,6 +903,8 @@ enum ipa_peripheral_speed_enum_v01 {
/* High-speed USB connection */
QMI_IPA_PER_USB_SS_V01 = 3,
/* Super-speed USB connection */
QMI_IPA_PER_WLAN_V01 = 4,
/* WLAN connection */
IPA_PERIPHERAL_SPEED_ENUM_MAX_ENUM_VAL_V01 = 2147483647
/* To force a 32 bit signed enum. Do not change or use*/
};
@ -973,6 +990,7 @@ struct ipa_config_req_msg_v01 {
* - QMI_IPA_PER_USB_FS (1) -- Full-speed USB connection
* - QMI_IPA_PER_USB_HS (2) -- High-speed USB connection
* - QMI_IPA_PER_USB_SS (3) -- Super-speed USB connection
* - QMI_IPA_PER_WLAN (4) -- WLAN connection
*/
/* Optional */
@ -1080,6 +1098,244 @@ struct ipa_config_resp_msg_v01 {
/**< Standard response type.*/
}; /* Message */
enum ipa_stats_type_enum_v01 {
IPA_STATS_TYPE_ENUM_MIN_ENUM_VAL_V01 = -2147483647,
/* To force a 32 bit signed enum. Do not change or use */
QMI_IPA_STATS_TYPE_INVALID_V01 = 0,
/* Invalid stats type identifier */
QMI_IPA_STATS_TYPE_PIPE_V01 = 1,
/* Pipe stats type */
QMI_IPA_STATS_TYPE_FILTER_RULES_V01 = 2,
/* Filter rule stats type */
IPA_STATS_TYPE_ENUM_MAX_ENUM_VAL_V01 = 2147483647
/* To force a 32 bit signed enum. Do not change or use */
};
struct ipa_pipe_stats_info_type_v01 {
uint32_t pipe_index;
/* Pipe index for statistics to be retrieved. */
uint64_t num_ipv4_packets;
/* Accumulated number of IPv4 packets over this pipe. */
uint64_t num_ipv4_bytes;
/* Accumulated number of IPv4 bytes over this pipe. */
uint64_t num_ipv6_packets;
/* Accumulated number of IPv6 packets over this pipe. */
uint64_t num_ipv6_bytes;
/* Accumulated number of IPv6 bytes over this pipe. */
};
struct ipa_stats_type_filter_rule_v01 {
uint32_t filter_rule_index;
/* Filter rule index for statistics to be retrieved. */
uint64_t num_packets;
/* Accumulated number of packets over this filter rule. */
};
/* Request Message; Retrieve the data statistics collected on modem
* IPA driver.
*/
struct ipa_get_data_stats_req_msg_v01 {
/* Mandatory */
/* Stats Type */
enum ipa_stats_type_enum_v01 ipa_stats_type;
/* Indicates the type of statistics to be retrieved. */
/* Optional */
/* Reset Statistics */
uint8_t reset_stats_valid;
/* Must be set to true if reset_stats is being passed */
uint8_t reset_stats;
/* Option to reset the specific type of data statistics
* currently collected.
*/
}; /* Message */
/* Response Message; Retrieve the data statistics collected
* on modem IPA driver.
*/
struct ipa_get_data_stats_resp_msg_v01 {
/* Mandatory */
/* Result Code */
struct ipa_qmi_response_type_v01 resp;
/* Standard response type. */
/* Optional */
/* Stats Type */
uint8_t ipa_stats_type_valid;
/* Must be set to true if ipa_stats_type is passed */
enum ipa_stats_type_enum_v01 ipa_stats_type;
/* Indicates the type of statistics that are retrieved. */
/* Optional */
/* Uplink Source Pipe Statistics List */
uint8_t ul_src_pipe_stats_list_valid;
/* Must be set to true if ul_src_pipe_stats_list is being passed */
uint32_t ul_src_pipe_stats_list_len;
/* Must be set to # of elements in ul_src_pipe_stats_list */
struct ipa_pipe_stats_info_type_v01
ul_src_pipe_stats_list[QMI_IPA_MAX_PIPES_V01];
/* List of all Uplink pipe statistics that are retrieved. */
/* Optional */
/* Downlink Destination Pipe Statistics List */
uint8_t dl_dst_pipe_stats_list_valid;
/* Must be set to true if dl_dst_pipe_stats_list is being passed */
uint32_t dl_dst_pipe_stats_list_len;
/* Must be set to # of elements in dl_dst_pipe_stats_list */
struct ipa_pipe_stats_info_type_v01
dl_dst_pipe_stats_list[QMI_IPA_MAX_PIPES_V01];
/* List of all Downlink pipe statistics that are retrieved. */
/* Optional */
/* Downlink Filter Rule Stats List */
uint8_t dl_filter_rule_stats_list_valid;
/* Must be set to true if dl_filter_rule_stats_list is being passed */
uint32_t dl_filter_rule_stats_list_len;
/* Must be set to # of elements in dl_filter_rule_stats_list */
struct ipa_stats_type_filter_rule_v01
dl_filter_rule_stats_list[QMI_IPA_MAX_FILTERS_V01];
/* List of all Downlink filter rule statistics retrieved. */
}; /* Message */
struct ipa_apn_data_stats_info_type_v01 {
uint32_t mux_id;
/* Indicates the MUX ID associated with the APN for which the data
* usage statistics is queried
*/
uint64_t num_ul_packets;
/* Accumulated number of uplink packets corresponding to
* this Mux ID
*/
uint64_t num_ul_bytes;
/* Accumulated number of uplink bytes corresponding to
* this Mux ID
*/
uint64_t num_dl_packets;
/* Accumulated number of downlink packets corresponding
* to this Mux ID
*/
uint64_t num_dl_bytes;
/* Accumulated number of downlink bytes corresponding to
* this Mux ID
*/
}; /* Type */
/* Request Message; Retrieve the APN data statistics collected from modem */
struct ipa_get_apn_data_stats_req_msg_v01 {
/* Optional */
/* Mux ID List */
uint8_t mux_id_list_valid;
/* Must be set to true if mux_id_list is being passed */
uint32_t mux_id_list_len;
/* Must be set to # of elements in mux_id_list */
uint32_t mux_id_list[QMI_IPA_MAX_APN_V01];
/* The list of MUX IDs associated with APNs for which the data usage
* statistics is being retrieved
*/
}; /* Message */
/* Response Message; Retrieve the APN data statistics collected from modem */
struct ipa_get_apn_data_stats_resp_msg_v01 {
/* Mandatory */
/* Result Code */
struct ipa_qmi_response_type_v01 resp;
/* Standard response type.*/
/* Optional */
/* APN Data Statistics List */
uint8_t apn_data_stats_list_valid;
/* Must be set to true if apn_data_stats_list is being passed */
uint32_t apn_data_stats_list_len;
/* Must be set to # of elements in apn_data_stats_list */
struct ipa_apn_data_stats_info_type_v01
apn_data_stats_list[QMI_IPA_MAX_APN_V01];
/* List of APN data retrieved as per request on mux_id.
* For now, only one APN monitoring is supported on modem driver.
* Making this as list for expandability to support more APNs in future.
*/
}; /* Message */
struct ipa_data_usage_quota_info_type_v01 {
uint32_t mux_id;
/* Indicates the MUX ID associated with the APN for which the data usage
* quota needs to be set
*/
uint64_t num_Mbytes;
/* Number of Mega-bytes of quota value to be set on this APN associated
* with this Mux ID.
*/
}; /* Type */
/* Request Message; Master driver sets a data usage quota value on
* modem driver
*/
struct ipa_set_data_usage_quota_req_msg_v01 {
/* Optional */
/* APN Quota List */
uint8_t apn_quota_list_valid;
/* Must be set to true if apn_quota_list is being passed */
uint32_t apn_quota_list_len;
/* Must be set to # of elements in apn_quota_list */
struct ipa_data_usage_quota_info_type_v01
apn_quota_list[QMI_IPA_MAX_APN_V01];
/* The list of APNs on which a data usage quota to be set on modem
* driver. For now, only one APN monitoring is supported on modem
* driver. Making this as list for expandability to support more
* APNs in future.
*/
}; /* Message */
/* Response Message; Master driver sets a data usage on modem driver. */
struct ipa_set_data_usage_quota_resp_msg_v01 {
/* Mandatory */
/* Result Code */
struct ipa_qmi_response_type_v01 resp;
/* Standard response type.*/
}; /* Message */
/* Indication Message; Modem driver sends this indication to master
* driver when the data usage quota is reached
*/
struct ipa_data_usage_quota_reached_ind_msg_v01 {
/* Mandatory */
/* APN Quota List */
struct ipa_data_usage_quota_info_type_v01 apn;
/* This message indicates which APN has the previously set quota
* reached. For now, only one APN monitoring is supported on modem
* driver.
*/
}; /* Message */
/* Request Message; Master driver request modem driver to terminate
* the current data usage quota monitoring session.
*/
struct ipa_stop_data_usage_quota_req_msg_v01 {
/* This element is a placeholder to prevent the declaration of
* an empty struct. DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE
*/
char __placeholder;
}; /* Message */
/* Response Message; Master driver request modem driver to terminate
* the current quota monitoring session.
*/
struct ipa_stop_data_usage_quota_resp_msg_v01 {
/* Mandatory */
/* Result Code */
struct ipa_qmi_response_type_v01 resp;
/**< Standard response type.*/
}; /* Message */
/*Service Message Definition*/
#define QMI_IPA_INDICATION_REGISTER_REQ_V01 0x0020
#define QMI_IPA_INDICATION_REGISTER_RESP_V01 0x0020
@ -1096,17 +1352,31 @@ struct ipa_config_resp_msg_v01 {
#define QMI_IPA_DISABLE_FORCE_CLEAR_DATAPATH_RESP_V01 0x0026
#define QMI_IPA_CONFIG_REQ_V01 0x0027
#define QMI_IPA_CONFIG_RESP_V01 0x0027
#define QMI_IPA_DISABLE_LINK_LOW_PWR_STATE_REQ_V01 0x0028
#define QMI_IPA_DISABLE_LINK_LOW_PWR_STATE_RESP_V01 0x0028
#define QMI_IPA_ENABLE_LINK_LOW_PWR_STATE_REQ_V01 0x0029
#define QMI_IPA_ENABLE_LINK_LOW_PWR_STATE_RESP_V01 0x0029
#define QMI_IPA_GET_DATA_STATS_REQ_V01 0x0030
#define QMI_IPA_GET_DATA_STATS_RESP_V01 0x0030
#define QMI_IPA_GET_APN_DATA_STATS_REQ_V01 0x0031
#define QMI_IPA_GET_APN_DATA_STATS_RESP_V01 0x0031
#define QMI_IPA_SET_DATA_USAGE_QUOTA_REQ_V01 0x0032
#define QMI_IPA_SET_DATA_USAGE_QUOTA_RESP_V01 0x0032
#define QMI_IPA_DATA_USAGE_QUOTA_REACHED_IND_V01 0x0033
#define QMI_IPA_STOP_DATA_USAGE_QUOTA_REQ_V01 0x0034
#define QMI_IPA_STOP_DATA_USAGE_QUOTA_RESP_V01 0x0034
/* add for max length*/
#define QMI_IPA_INIT_MODEM_DRIVER_REQ_MAX_MSG_LEN_V01 98
#define QMI_IPA_INIT_MODEM_DRIVER_RESP_MAX_MSG_LEN_V01 21
#define QMI_IPA_INDICATION_REGISTER_REQ_MAX_MSG_LEN_V01 4
#define QMI_IPA_INDICATION_REGISTER_REQ_MAX_MSG_LEN_V01 8
#define QMI_IPA_INDICATION_REGISTER_RESP_MAX_MSG_LEN_V01 7
#define QMI_IPA_INSTALL_FILTER_RULE_REQ_MAX_MSG_LEN_V01 11293
#define QMI_IPA_INSTALL_FILTER_RULE_RESP_MAX_MSG_LEN_V01 523
#define QMI_IPA_FILTER_INSTALLED_NOTIF_REQ_MAX_MSG_LEN_V01 574
#define QMI_IPA_FILTER_INSTALLED_NOTIF_RESP_MAX_MSG_LEN_V01 7
#define QMI_IPA_MASTER_DRIVER_INIT_COMPLETE_IND_MAX_MSG_LEN_V01 7
#define QMI_IPA_DATA_USAGE_QUOTA_REACHED_IND_MAX_MSG_LEN_V01 15
#define QMI_IPA_ENABLE_FORCE_CLEAR_DATAPATH_REQ_MAX_MSG_LEN_V01 18
#define QMI_IPA_DISABLE_FORCE_CLEAR_DATAPATH_REQ_MAX_MSG_LEN_V01 7
@ -1116,6 +1386,19 @@ struct ipa_config_resp_msg_v01 {
#define QMI_IPA_CONFIG_REQ_MAX_MSG_LEN_V01 81
#define QMI_IPA_CONFIG_RESP_MAX_MSG_LEN_V01 7
#define QMI_IPA_DISABLE_LINK_LOW_PWR_STATE_REQ_MAX_MSG_LEN_V01 18
#define QMI_IPA_DISABLE_LINK_LOW_PWR_STATE_RESP_MAX_MSG_LEN_V01 7
#define QMI_IPA_ENABLE_LINK_LOW_PWR_STATE_REQ_MAX_MSG_LEN_V01 7
#define QMI_IPA_ENABLE_LINK_LOW_PWR_STATE_RESP_MAX_MSG_LEN_V01 7
#define QMI_IPA_GET_DATA_STATS_REQ_MAX_MSG_LEN_V01 11
#define QMI_IPA_GET_DATA_STATS_RESP_MAX_MSG_LEN_V01 2234
#define QMI_IPA_GET_APN_DATA_STATS_REQ_MAX_MSG_LEN_V01 36
#define QMI_IPA_GET_APN_DATA_STATS_RESP_MAX_MSG_LEN_V01 299
#define QMI_IPA_SET_DATA_USAGE_QUOTA_REQ_MAX_MSG_LEN_V01 100
#define QMI_IPA_SET_DATA_USAGE_QUOTA_RESP_MAX_MSG_LEN_V01 7
#define QMI_IPA_STOP_DATA_USAGE_QUOTA_REQ_MAX_MSG_LEN_V01 0
#define QMI_IPA_STOP_DATA_USAGE_QUOTA_RESP_MAX_MSG_LEN_V01 7
/* Service Object Accessor */
#endif/* IPA_QMI_SERVICE_V01_H */