Loading drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_nat.c +55 −2 Original line number Diff line number Diff line /* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. /* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -142,11 +142,32 @@ static int ipa_nat_ipv4_stringify_entry_v_4_0(const void *entry, length = ipa_nat_ipv4_stringify_entry_v_3_0(entry, buff, buff_size); length += scnprintf(buff + length, buff_size - length, "\t\tPDN_Index=%d\n", nat_entry->pdn_index); "\t\tPDN_Index=%d\n", nat_entry->pdn_index); return length; } static int ipa_nat_ipv4_stringify_entry_v_4_5(const void *entry, char *buff, size_t buff_size) { int length; const struct ipa_nat_hw_ipv4_entry *nat_entry = (const struct ipa_nat_hw_ipv4_entry *)entry; length = ipa_nat_ipv4_stringify_entry_v_4_0(entry, buff, buff_size); length += scnprintf(buff + length, buff_size - length, "\t\tucp=%s address=%s uc_activation_index=%d\n", (nat_entry->ucp) ? "Enabled" : "Disabled", (nat_entry->s) ? "System" : "Local", nat_entry->uc_activation_index); return length; } static int ipa_nat_ipv4_index_stringify_entry_v_3_0(const void *entry, char *buff, size_t buff_size) { Loading Loading @@ -224,6 +245,24 @@ static int ipa_nat_ipv6ct_stringify_entry_v_4_0(const void *entry, return length; } static int ipa_nat_ipv6ct_stringify_entry_v_4_5(const void *entry, char *buff, size_t buff_size) { int length; const struct ipa_nat_hw_ipv4_entry *nat_entry = (const struct ipa_nat_hw_ipv4_entry *)entry; length = ipa_nat_ipv6ct_stringify_entry_v_4_0(entry, buff, buff_size); length += scnprintf(buff + length, buff_size - length, "\t\tucp=%s address=%s uc_activation_index=%d\n", (nat_entry->ucp) ? "Enabled" : "Disabled", (nat_entry->s) ? "System" : "Local", nat_entry->uc_activation_index); return length; } static void ipa_nat_ipv4_pdn_construct_entry_v_4_0(const void *fields, u32 *address) { Loading Loading @@ -318,6 +357,20 @@ static struct ipahal_nat_obj ipahal_nat_objs[IPA_HW_MAX][IPA_NAT_MAX] = { ipa_nat_ipv6ct_is_entry_zeroed_v_4_0, ipa_nat_ipv6ct_is_entry_valid_v_4_0, ipa_nat_ipv6ct_stringify_entry_v_4_0 }, /* IPAv4.5 */ [IPA_HW_v4_5][IPAHAL_NAT_IPV4] = { ipa_nat_ipv4_entry_size_v_3_0, ipa_nat_ipv4_is_entry_zeroed_v_3_0, ipa_nat_ipv4_is_entry_valid_v_3_0, ipa_nat_ipv4_stringify_entry_v_4_5 }, [IPA_HW_v4_5][IPAHAL_NAT_IPV6CT] = { ipa_nat_ipv6ct_entry_size_v_4_0, ipa_nat_ipv6ct_is_entry_zeroed_v_4_0, ipa_nat_ipv6ct_is_entry_valid_v_4_0, ipa_nat_ipv6ct_stringify_entry_v_4_5 } }; Loading drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_nat_i.h +48 −11 Original line number Diff line number Diff line /* Copyright (c) 2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2018, 2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading @@ -25,7 +25,7 @@ * |Target Port(2B) |Private Port(2B)| Public Port(2B) | Next Index(2B) | * ----------------------------------------------------------------------- * |Proto| TimeStamp(3B) | Flags(2B) |IP check sum Diff| * |(1B) | |EN|Redirect|Resv | (2B) | * |(1B) | | | (2B) | * ----------------------------------------------------------------------- * |TCP/UDP checksum| PDN info(2B) | SW Specific Parameters(4B) | * | diff (2B) |Info|Resv |index table entry| prev index | Loading @@ -42,17 +42,45 @@ struct ipa_nat_hw_ipv4_entry { u32 target_port : 16; u32 ip_chksum : 16; u32 rsvd1 : 14; /*--------------------------------------------------- *IPA NAT Flag is interpreted as follows *--------------------------------------------------- *| EN |FIN/RST| S | IPv4 uC activation index | *| [15] | [14] | [13] | [12:0] | *--------------------------------------------------- */ u32 uc_activation_index: 13; u32 s : 1; u32 redirect : 1; u32 enable : 1; u32 time_stamp : 24; u32 protocol : 8; /*-------------------------------------------------- *32 bit sw_spec_params is interpreted as follows *------------------------------------ *| 16 bits | 16 bits | *------------------------------------ *| index table | prev index | *| entry | | *------------------------------------ */ u32 prev_index : 16; u32 indx_tbl_entry : 16; u32 rsvd2 : 12; u32 rsvd2 : 11; //including next 3 reserved buts /*----------------------------------------- *8 bit PDN info is interpreted as following *----------------------------------------------------- *| 4 bits | 1 bit | 3 bits | *----------------------------------------------------- *| PDN index | uC processing | Reserved | *| [7:4] | [3] | [2:0] | *----------------------------------------------------- */ u32 ucp : 1; /* IPA 4.0 and greater */ u32 pdn_index : 4; /* IPA 4.0 and greater */ u32 tcp_udp_chksum : 16; Loading Loading @@ -107,17 +135,23 @@ struct ipa_nat_hw_pdn_entry { *----------------------------------------------------------------------------- *| Outbound Dest IPv6 Address (8 MSB Bytes) | *----------------------------------------------------------------------------- *|Protocol| TimeStamp (3B) | Flags (2B) |Reserved (2B) | *| (1B) | |Enable|Redirect|Resv | | *|Protocol| TimeStamp (3B) | Flags (2B) |Rsvd |S |uC ACT| *| (1B) | |Enable|Redirect|Resv |[15:14]|13|[12:0]| *----------------------------------------------------------------------------- *|Reserved|Direction(1B)|Src Port(2B)| Dest Port (2B) |Next Index(2B)| *| (1B) |IN|OUT|Resv | | | | *|Reserved|Settings| Src Port(2B) | Dest Port (2B) | Next Index(2B) | *| (1B) | (1B) | | | | *----------------------------------------------------------------------------- *| SW Specific Parameters(4B) | Reserved (4B) | *| Prev Index (2B) |Reserved(2B)| | *----------------------------------------------------------------------------- *| Reserved (8B) | *----------------------------------------------------------------------------- * * Settings *----------------------------------------------- *|IN Allowed|OUT Allowed|Reserved|uC processing| *|[7:7] |[6:6] |[5:1] |[0:0] | *----------------------------------------------- */ struct ipa_nat_hw_ipv6ct_entry { /* An IP address can't be bit-field, because its address is used */ Loading @@ -126,7 +160,9 @@ struct ipa_nat_hw_ipv6ct_entry { u64 dest_ipv6_lsb; u64 dest_ipv6_msb; u64 rsvd1 : 30; u64 uc_activation_index : 13; u64 s : 1; u64 rsvd1 : 16; u64 redirect : 1; u64 enable : 1; Loading @@ -136,7 +172,8 @@ struct ipa_nat_hw_ipv6ct_entry { u64 next_index : 16; u64 dest_port : 16; u64 src_port : 16; u64 rsvd2 : 6; u64 ucp : 1; u64 rsvd2 : 5; u64 out_allowed : 1; u64 in_allowed : 1; u64 rsvd3 : 8; Loading drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_reg.c +202 −2 Original line number Diff line number Diff line /* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -147,7 +147,13 @@ static const char *ipareg_name_to_str[IPA_REG_MAX] = { __stringify(IPA_ENDP_GSI_CFG_AOS_n), __stringify(IPA_ENDP_GSI_CFG_TLV_n), __stringify(IPA_COAL_EVICT_LRU), __stringify(IPA_COAL_QMAP_CFG) __stringify(IPA_COAL_QMAP_CFG), __stringify(IPA_NAT_UC_EXTERNAL_CFG), __stringify(IPA_NAT_UC_LOCAL_CFG), __stringify(IPA_NAT_UC_SHARED_CFG), __stringify(IPA_CONN_TRACK_UC_EXTERNAL_CFG), __stringify(IPA_CONN_TRACK_UC_LOCAL_CFG), __stringify(IPA_CONN_TRACK_UC_SHARED_CFG) }; static void ipareg_construct_dummy(enum ipahal_reg_name reg, Loading Loading @@ -2451,6 +2457,176 @@ static void ipareg_parse_coal_qmap_cfg(enum ipahal_reg_name reg, IPA_COAL_QMAP_CFG_SHFT, IPA_COAL_QMAP_CFG_BMSK); } static void ipareg_construct_nat_uc_external_cfg(enum ipahal_reg_name reg, const void *fields, u32 *val) { struct ipahal_reg_nat_uc_external_cfg *nat_uc_external_cfg = (struct ipahal_reg_nat_uc_external_cfg *)fields; IPA_SETFIELD_IN_REG(*val, nat_uc_external_cfg->nat_uc_external_table_addr_lsb, IPA_NAT_UC_EXTERNAL_CFG_SHFT, IPA_NAT_UC_EXTERNAL_CFG_BMSK); } static void ipareg_parse_nat_uc_external_cfg(enum ipahal_reg_name reg, void *fields, u32 val) { struct ipahal_reg_nat_uc_external_cfg *nat_uc_external_cfg = (struct ipahal_reg_nat_uc_external_cfg *)fields; memset(nat_uc_external_cfg, 0, sizeof(*nat_uc_external_cfg)); nat_uc_external_cfg->nat_uc_external_table_addr_lsb = IPA_GETFIELD_FROM_REG(val, IPA_NAT_UC_EXTERNAL_CFG_SHFT, IPA_NAT_UC_EXTERNAL_CFG_BMSK); } static void ipareg_construct_nat_uc_local_cfg(enum ipahal_reg_name reg, const void *fields, u32 *val) { struct ipahal_reg_nat_uc_local_cfg *nat_uc_local_cfg = (struct ipahal_reg_nat_uc_local_cfg *)fields; IPA_SETFIELD_IN_REG(*val, nat_uc_local_cfg->nat_uc_local_table_addr_lsb, IPA_NAT_UC_LOCAL_CFG_SHFT, IPA_NAT_UC_LOCAL_CFG_BMSK); } static void ipareg_parse_nat_uc_local_cfg(enum ipahal_reg_name reg, void *fields, u32 val) { struct ipahal_reg_nat_uc_local_cfg *nat_uc_local_cfg = (struct ipahal_reg_nat_uc_local_cfg *)fields; memset(nat_uc_local_cfg, 0, sizeof(*nat_uc_local_cfg)); nat_uc_local_cfg->nat_uc_local_table_addr_lsb = IPA_GETFIELD_FROM_REG(val, IPA_NAT_UC_LOCAL_CFG_SHFT, IPA_NAT_UC_LOCAL_CFG_BMSK); } static void ipareg_construct_nat_uc_shared_cfg(enum ipahal_reg_name reg, const void *fields, u32 *val) { struct ipahal_reg_nat_uc_shared_cfg *nat_uc_shared_cfg = (struct ipahal_reg_nat_uc_shared_cfg *)fields; IPA_SETFIELD_IN_REG(*val, nat_uc_shared_cfg->nat_uc_local_table_addr_msb, IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT, IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK); IPA_SETFIELD_IN_REG(*val, nat_uc_shared_cfg->nat_uc_external_table_addr_msb, IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT, IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK); } static void ipareg_parse_nat_uc_shared_cfg(enum ipahal_reg_name reg, void *fields, u32 val) { struct ipahal_reg_nat_uc_shared_cfg *nat_uc_shared_cfg = (struct ipahal_reg_nat_uc_shared_cfg *)fields; memset(nat_uc_shared_cfg, 0, sizeof(*nat_uc_shared_cfg)); nat_uc_shared_cfg->nat_uc_local_table_addr_msb = IPA_GETFIELD_FROM_REG(val, IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT, IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK); nat_uc_shared_cfg->nat_uc_external_table_addr_msb = IPA_GETFIELD_FROM_REG(val, IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT, IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK); } static void ipareg_construct_conn_track_uc_external_cfg (enum ipahal_reg_name reg, const void *fields, u32 *val) { struct ipahal_reg_conn_track_uc_external_cfg *conn_track_uc_external_cfg = (struct ipahal_reg_conn_track_uc_external_cfg *)fields; IPA_SETFIELD_IN_REG(*val, conn_track_uc_external_cfg->conn_track_uc_external_table_addr_lsb, IPA_CONN_TRACK_UC_EXTERNAL_CFG_SHFT, IPA_CONN_TRACK_UC_EXTERNAL_CFG_BMSK); } static void ipareg_parse_conn_track_uc_external_cfg(enum ipahal_reg_name reg, void *fields, u32 val) { struct ipahal_reg_conn_track_uc_external_cfg *conn_track_uc_external_cfg = (struct ipahal_reg_conn_track_uc_external_cfg *)fields; memset(conn_track_uc_external_cfg, 0, sizeof(*conn_track_uc_external_cfg)); conn_track_uc_external_cfg->conn_track_uc_external_table_addr_lsb = IPA_GETFIELD_FROM_REG(val, IPA_CONN_TRACK_UC_EXTERNAL_CFG_SHFT, IPA_CONN_TRACK_UC_EXTERNAL_CFG_BMSK); } static void ipareg_construct_conn_track_uc_local_cfg(enum ipahal_reg_name reg, const void *fields, u32 *val) { struct ipahal_reg_conn_track_uc_local_cfg *conn_track_uc_local_cfg = (struct ipahal_reg_conn_track_uc_local_cfg *)fields; IPA_SETFIELD_IN_REG(*val, conn_track_uc_local_cfg->conn_track_uc_local_table_addr_lsb, IPA_CONN_TRACK_UC_LOCAL_CFG_SHFT, IPA_CONN_TRACK_UC_LOCAL_CFG_BMSK); } static void ipareg_parse_conn_track_uc_local_cfg(enum ipahal_reg_name reg, void *fields, u32 val) { struct ipahal_reg_conn_track_uc_local_cfg *conn_track_uc_local_cfg = (struct ipahal_reg_conn_track_uc_local_cfg *)fields; memset(conn_track_uc_local_cfg, 0, sizeof(*conn_track_uc_local_cfg)); conn_track_uc_local_cfg->conn_track_uc_local_table_addr_lsb = IPA_GETFIELD_FROM_REG(val, IPA_CONN_TRACK_UC_LOCAL_CFG_SHFT, IPA_CONN_TRACK_UC_LOCAL_CFG_BMSK); } static void ipareg_construct_conn_track_uc_shared_cfg(enum ipahal_reg_name reg, const void *fields, u32 *val) { struct ipahal_reg_conn_track_uc_shared_cfg *conn_track_uc_shared_cfg = (struct ipahal_reg_conn_track_uc_shared_cfg *)fields; IPA_SETFIELD_IN_REG(*val, conn_track_uc_shared_cfg->conn_track_uc_local_table_addr_msb, IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT, IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK); IPA_SETFIELD_IN_REG(*val, conn_track_uc_shared_cfg->conn_track_uc_external_table_addr_msb, IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT, IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK); } static void ipareg_parse_conn_track_uc_shared_cfg(enum ipahal_reg_name reg, void *fields, u32 val) { struct ipahal_reg_conn_track_uc_shared_cfg *conn_track_uc_shared_cfg = (struct ipahal_reg_conn_track_uc_shared_cfg *)fields; memset(conn_track_uc_shared_cfg, 0, sizeof(*conn_track_uc_shared_cfg)); conn_track_uc_shared_cfg->conn_track_uc_local_table_addr_msb = IPA_GETFIELD_FROM_REG(val, IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT, IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK); conn_track_uc_shared_cfg->conn_track_uc_external_table_addr_msb = IPA_GETFIELD_FROM_REG(val, IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT, IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK); } /* * struct ipahal_reg_obj - Register H/W information for specific IPA version * @construct - CB to construct register value from abstracted structure Loading Loading @@ -3244,6 +3420,30 @@ static struct ipahal_reg_obj ipahal_reg_objs[IPA_HW_MAX][IPA_REG_MAX] = { [IPA_HW_v4_5][IPA_COAL_QMAP_CFG] = { ipareg_construct_coal_qmap_cfg, ipareg_parse_coal_qmap_cfg, 0x00001810, 0, 0, 0, 0}, [IPA_HW_v4_5][IPA_NAT_UC_EXTERNAL_CFG] = { ipareg_construct_nat_uc_external_cfg, ipareg_parse_nat_uc_external_cfg, 0x00000200, 0, 0, 0, 0}, [IPA_HW_v4_5][IPA_NAT_UC_LOCAL_CFG] = { ipareg_construct_nat_uc_local_cfg, ipareg_parse_nat_uc_local_cfg, 0x00000204, 0, 0, 0, 0}, [IPA_HW_v4_5][IPA_NAT_UC_SHARED_CFG] = { ipareg_construct_nat_uc_shared_cfg, ipareg_parse_nat_uc_shared_cfg, 0x00000208, 0, 0, 0, 0}, [IPA_HW_v4_5][IPA_CONN_TRACK_UC_EXTERNAL_CFG] = { ipareg_construct_conn_track_uc_external_cfg, ipareg_parse_conn_track_uc_external_cfg, 0x00000230, 0, 0, 0, 0}, [IPA_HW_v4_5][IPA_CONN_TRACK_UC_LOCAL_CFG] = { ipareg_construct_conn_track_uc_local_cfg, ipareg_parse_conn_track_uc_local_cfg, 0x00000234, 0, 0, 0, 0}, [IPA_HW_v4_5][IPA_CONN_TRACK_UC_SHARED_CFG] = { ipareg_construct_conn_track_uc_shared_cfg, ipareg_parse_conn_track_uc_shared_cfg, 0x00000238, 0, 0, 0, 0}, }; /* Loading drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_reg.h +70 −1 Original line number Diff line number Diff line /* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -149,6 +149,12 @@ enum ipahal_reg_name { IPA_ENDP_GSI_CFG_TLV_n, IPA_COAL_EVICT_LRU, IPA_COAL_QMAP_CFG, IPA_NAT_UC_EXTERNAL_CFG, IPA_NAT_UC_LOCAL_CFG, IPA_NAT_UC_SHARED_CFG, IPA_CONN_TRACK_UC_EXTERNAL_CFG, IPA_CONN_TRACK_UC_LOCAL_CFG, IPA_CONN_TRACK_UC_SHARED_CFG, IPA_REG_MAX, }; Loading Loading @@ -693,6 +699,69 @@ struct ipahal_reg_coal_qmap_cfg { u32 mux_id_byte_sel; }; /* * struct ipahal_reg_nat_uc_local_cfg - IPA_NAT_UC_EXTERNAL_CFG register * @nat_uc_external_table_addr_lsb: 32 LSb bits of system-memory address of * external UC-activation entry table. */ struct ipahal_reg_nat_uc_external_cfg { u32 nat_uc_external_table_addr_lsb; }; /* * struct ipahal_reg_nat_uc_local_cfg - IPA_NAT_UC_LOCAL_CFG register * @nat_uc_local_table_addr_lsb: 32 LSb bits of local address of local * UC-activation entry table. Address is memory-map based, * i.e. includes IPA address from chip level. */ struct ipahal_reg_nat_uc_local_cfg { u32 nat_uc_local_table_addr_lsb; }; /* * struct ipahal_reg_nat_uc_shared_cfg - IPA_NAT_UC_SHARED_CFG register * @nat_uc_external_table_addr_msb: 16 MSb of external UC-ativation entry table. * @nat_uc_local_table_addr_msb: 16 MSb bits of local UC-ativation entry table. */ struct ipahal_reg_nat_uc_shared_cfg { u32 nat_uc_local_table_addr_msb; u32 nat_uc_external_table_addr_msb; }; /* * struct ipahal_reg_conn_track_uc_local_cfg - IPA_conn_track_UC_EXTERNAL_CFG * register * @conn_track_uc_external_table_addr_lsb: 32 LSb bits of system-memory address * of external UC-activation entry table. */ struct ipahal_reg_conn_track_uc_external_cfg { u32 conn_track_uc_external_table_addr_lsb; }; /* * struct ipahal_reg_conn_track_uc_local_cfg - IPA_conn_track_UC_LOCAL_CFG * register * @conn_track_uc_local_table_addr_lsb: 32 LSb bits of local address of local * UC-activation entry table. Address is memory-map based, * i.e. includes IPA address from chip level. */ struct ipahal_reg_conn_track_uc_local_cfg { u32 conn_track_uc_local_table_addr_lsb; }; /* * struct ipahal_reg_conn_track_uc_shared_cfg - IPA_conn_track_UC_SHARED_CFG * register * @conn_track_uc_external_table_addr_msb: 16 MSb of external UC-ativation * entry table. * @conn_track_uc_local_table_addr_msb: 16 MSb bits of local UC-ativation * entry table. */ struct ipahal_reg_conn_track_uc_shared_cfg { u16 conn_track_uc_local_table_addr_msb; u16 conn_track_uc_external_table_addr_msb; }; /* * ipahal_print_all_regs() - Loop and read and print all the valid registers * Parameterized registers are also printed for all the valid ranges. Loading drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_reg_i.h +17 −2 Original line number Diff line number Diff line /* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -632,7 +632,22 @@ int ipahal_reg_init(enum ipa_hw_type ipa_hw_type); #define IPA_COAL_EVICTION_EN_SHFT 0 #define IPA_COAL_QMAP_CFG_BMSK 0x1 #define IPA_COAL_QMAP_CFG_SHFT 0 #define IPA_NAT_UC_EXTERNAL_CFG_BMSK 0xFFFFFFFF #define IPA_NAT_UC_EXTERNAL_CFG_SHFT 0 #define IPA_NAT_UC_LOCAL_CFG_BMSK 0xFFFFFFFF #define IPA_NAT_UC_LOCAL_CFG_SHFT 0 #define IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK 0xFFFF0000 #define IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT 16 #define IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK 0x0000FFFF #define IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT 0 #define IPA_CONN_TRACK_UC_EXTERNAL_CFG_BMSK 0xFFFFFFFF #define IPA_CONN_TRACK_UC_EXTERNAL_CFG_SHFT 0 #define IPA_CONN_TRACK_UC_LOCAL_CFG_BMSK 0xFFFFFFFF #define IPA_CONN_TRACK_UC_LOCAL_CFG_SHFT 0 #define IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK 0xFFFF0000 #define IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT 16 #define IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK 0x0000FFFF #define IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT 0 #define IPA_STATE_TX_WRAPPER_COAL_SLAVE_OPEN_FRAME_BMSK 0xf0000000 #define IPA_STATE_TX_WRAPPER_COAL_SLAVE_OPEN_FRAME_SHFT 0x1f #define IPA_STATE_TX_WRAPPER_COAL_SLAVE_CTX_IDLE_BMSK 0x100000 Loading Loading
drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_nat.c +55 −2 Original line number Diff line number Diff line /* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. /* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -142,11 +142,32 @@ static int ipa_nat_ipv4_stringify_entry_v_4_0(const void *entry, length = ipa_nat_ipv4_stringify_entry_v_3_0(entry, buff, buff_size); length += scnprintf(buff + length, buff_size - length, "\t\tPDN_Index=%d\n", nat_entry->pdn_index); "\t\tPDN_Index=%d\n", nat_entry->pdn_index); return length; } static int ipa_nat_ipv4_stringify_entry_v_4_5(const void *entry, char *buff, size_t buff_size) { int length; const struct ipa_nat_hw_ipv4_entry *nat_entry = (const struct ipa_nat_hw_ipv4_entry *)entry; length = ipa_nat_ipv4_stringify_entry_v_4_0(entry, buff, buff_size); length += scnprintf(buff + length, buff_size - length, "\t\tucp=%s address=%s uc_activation_index=%d\n", (nat_entry->ucp) ? "Enabled" : "Disabled", (nat_entry->s) ? "System" : "Local", nat_entry->uc_activation_index); return length; } static int ipa_nat_ipv4_index_stringify_entry_v_3_0(const void *entry, char *buff, size_t buff_size) { Loading Loading @@ -224,6 +245,24 @@ static int ipa_nat_ipv6ct_stringify_entry_v_4_0(const void *entry, return length; } static int ipa_nat_ipv6ct_stringify_entry_v_4_5(const void *entry, char *buff, size_t buff_size) { int length; const struct ipa_nat_hw_ipv4_entry *nat_entry = (const struct ipa_nat_hw_ipv4_entry *)entry; length = ipa_nat_ipv6ct_stringify_entry_v_4_0(entry, buff, buff_size); length += scnprintf(buff + length, buff_size - length, "\t\tucp=%s address=%s uc_activation_index=%d\n", (nat_entry->ucp) ? "Enabled" : "Disabled", (nat_entry->s) ? "System" : "Local", nat_entry->uc_activation_index); return length; } static void ipa_nat_ipv4_pdn_construct_entry_v_4_0(const void *fields, u32 *address) { Loading Loading @@ -318,6 +357,20 @@ static struct ipahal_nat_obj ipahal_nat_objs[IPA_HW_MAX][IPA_NAT_MAX] = { ipa_nat_ipv6ct_is_entry_zeroed_v_4_0, ipa_nat_ipv6ct_is_entry_valid_v_4_0, ipa_nat_ipv6ct_stringify_entry_v_4_0 }, /* IPAv4.5 */ [IPA_HW_v4_5][IPAHAL_NAT_IPV4] = { ipa_nat_ipv4_entry_size_v_3_0, ipa_nat_ipv4_is_entry_zeroed_v_3_0, ipa_nat_ipv4_is_entry_valid_v_3_0, ipa_nat_ipv4_stringify_entry_v_4_5 }, [IPA_HW_v4_5][IPAHAL_NAT_IPV6CT] = { ipa_nat_ipv6ct_entry_size_v_4_0, ipa_nat_ipv6ct_is_entry_zeroed_v_4_0, ipa_nat_ipv6ct_is_entry_valid_v_4_0, ipa_nat_ipv6ct_stringify_entry_v_4_5 } }; Loading
drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_nat_i.h +48 −11 Original line number Diff line number Diff line /* Copyright (c) 2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2018, 2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading @@ -25,7 +25,7 @@ * |Target Port(2B) |Private Port(2B)| Public Port(2B) | Next Index(2B) | * ----------------------------------------------------------------------- * |Proto| TimeStamp(3B) | Flags(2B) |IP check sum Diff| * |(1B) | |EN|Redirect|Resv | (2B) | * |(1B) | | | (2B) | * ----------------------------------------------------------------------- * |TCP/UDP checksum| PDN info(2B) | SW Specific Parameters(4B) | * | diff (2B) |Info|Resv |index table entry| prev index | Loading @@ -42,17 +42,45 @@ struct ipa_nat_hw_ipv4_entry { u32 target_port : 16; u32 ip_chksum : 16; u32 rsvd1 : 14; /*--------------------------------------------------- *IPA NAT Flag is interpreted as follows *--------------------------------------------------- *| EN |FIN/RST| S | IPv4 uC activation index | *| [15] | [14] | [13] | [12:0] | *--------------------------------------------------- */ u32 uc_activation_index: 13; u32 s : 1; u32 redirect : 1; u32 enable : 1; u32 time_stamp : 24; u32 protocol : 8; /*-------------------------------------------------- *32 bit sw_spec_params is interpreted as follows *------------------------------------ *| 16 bits | 16 bits | *------------------------------------ *| index table | prev index | *| entry | | *------------------------------------ */ u32 prev_index : 16; u32 indx_tbl_entry : 16; u32 rsvd2 : 12; u32 rsvd2 : 11; //including next 3 reserved buts /*----------------------------------------- *8 bit PDN info is interpreted as following *----------------------------------------------------- *| 4 bits | 1 bit | 3 bits | *----------------------------------------------------- *| PDN index | uC processing | Reserved | *| [7:4] | [3] | [2:0] | *----------------------------------------------------- */ u32 ucp : 1; /* IPA 4.0 and greater */ u32 pdn_index : 4; /* IPA 4.0 and greater */ u32 tcp_udp_chksum : 16; Loading Loading @@ -107,17 +135,23 @@ struct ipa_nat_hw_pdn_entry { *----------------------------------------------------------------------------- *| Outbound Dest IPv6 Address (8 MSB Bytes) | *----------------------------------------------------------------------------- *|Protocol| TimeStamp (3B) | Flags (2B) |Reserved (2B) | *| (1B) | |Enable|Redirect|Resv | | *|Protocol| TimeStamp (3B) | Flags (2B) |Rsvd |S |uC ACT| *| (1B) | |Enable|Redirect|Resv |[15:14]|13|[12:0]| *----------------------------------------------------------------------------- *|Reserved|Direction(1B)|Src Port(2B)| Dest Port (2B) |Next Index(2B)| *| (1B) |IN|OUT|Resv | | | | *|Reserved|Settings| Src Port(2B) | Dest Port (2B) | Next Index(2B) | *| (1B) | (1B) | | | | *----------------------------------------------------------------------------- *| SW Specific Parameters(4B) | Reserved (4B) | *| Prev Index (2B) |Reserved(2B)| | *----------------------------------------------------------------------------- *| Reserved (8B) | *----------------------------------------------------------------------------- * * Settings *----------------------------------------------- *|IN Allowed|OUT Allowed|Reserved|uC processing| *|[7:7] |[6:6] |[5:1] |[0:0] | *----------------------------------------------- */ struct ipa_nat_hw_ipv6ct_entry { /* An IP address can't be bit-field, because its address is used */ Loading @@ -126,7 +160,9 @@ struct ipa_nat_hw_ipv6ct_entry { u64 dest_ipv6_lsb; u64 dest_ipv6_msb; u64 rsvd1 : 30; u64 uc_activation_index : 13; u64 s : 1; u64 rsvd1 : 16; u64 redirect : 1; u64 enable : 1; Loading @@ -136,7 +172,8 @@ struct ipa_nat_hw_ipv6ct_entry { u64 next_index : 16; u64 dest_port : 16; u64 src_port : 16; u64 rsvd2 : 6; u64 ucp : 1; u64 rsvd2 : 5; u64 out_allowed : 1; u64 in_allowed : 1; u64 rsvd3 : 8; Loading
drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_reg.c +202 −2 Original line number Diff line number Diff line /* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -147,7 +147,13 @@ static const char *ipareg_name_to_str[IPA_REG_MAX] = { __stringify(IPA_ENDP_GSI_CFG_AOS_n), __stringify(IPA_ENDP_GSI_CFG_TLV_n), __stringify(IPA_COAL_EVICT_LRU), __stringify(IPA_COAL_QMAP_CFG) __stringify(IPA_COAL_QMAP_CFG), __stringify(IPA_NAT_UC_EXTERNAL_CFG), __stringify(IPA_NAT_UC_LOCAL_CFG), __stringify(IPA_NAT_UC_SHARED_CFG), __stringify(IPA_CONN_TRACK_UC_EXTERNAL_CFG), __stringify(IPA_CONN_TRACK_UC_LOCAL_CFG), __stringify(IPA_CONN_TRACK_UC_SHARED_CFG) }; static void ipareg_construct_dummy(enum ipahal_reg_name reg, Loading Loading @@ -2451,6 +2457,176 @@ static void ipareg_parse_coal_qmap_cfg(enum ipahal_reg_name reg, IPA_COAL_QMAP_CFG_SHFT, IPA_COAL_QMAP_CFG_BMSK); } static void ipareg_construct_nat_uc_external_cfg(enum ipahal_reg_name reg, const void *fields, u32 *val) { struct ipahal_reg_nat_uc_external_cfg *nat_uc_external_cfg = (struct ipahal_reg_nat_uc_external_cfg *)fields; IPA_SETFIELD_IN_REG(*val, nat_uc_external_cfg->nat_uc_external_table_addr_lsb, IPA_NAT_UC_EXTERNAL_CFG_SHFT, IPA_NAT_UC_EXTERNAL_CFG_BMSK); } static void ipareg_parse_nat_uc_external_cfg(enum ipahal_reg_name reg, void *fields, u32 val) { struct ipahal_reg_nat_uc_external_cfg *nat_uc_external_cfg = (struct ipahal_reg_nat_uc_external_cfg *)fields; memset(nat_uc_external_cfg, 0, sizeof(*nat_uc_external_cfg)); nat_uc_external_cfg->nat_uc_external_table_addr_lsb = IPA_GETFIELD_FROM_REG(val, IPA_NAT_UC_EXTERNAL_CFG_SHFT, IPA_NAT_UC_EXTERNAL_CFG_BMSK); } static void ipareg_construct_nat_uc_local_cfg(enum ipahal_reg_name reg, const void *fields, u32 *val) { struct ipahal_reg_nat_uc_local_cfg *nat_uc_local_cfg = (struct ipahal_reg_nat_uc_local_cfg *)fields; IPA_SETFIELD_IN_REG(*val, nat_uc_local_cfg->nat_uc_local_table_addr_lsb, IPA_NAT_UC_LOCAL_CFG_SHFT, IPA_NAT_UC_LOCAL_CFG_BMSK); } static void ipareg_parse_nat_uc_local_cfg(enum ipahal_reg_name reg, void *fields, u32 val) { struct ipahal_reg_nat_uc_local_cfg *nat_uc_local_cfg = (struct ipahal_reg_nat_uc_local_cfg *)fields; memset(nat_uc_local_cfg, 0, sizeof(*nat_uc_local_cfg)); nat_uc_local_cfg->nat_uc_local_table_addr_lsb = IPA_GETFIELD_FROM_REG(val, IPA_NAT_UC_LOCAL_CFG_SHFT, IPA_NAT_UC_LOCAL_CFG_BMSK); } static void ipareg_construct_nat_uc_shared_cfg(enum ipahal_reg_name reg, const void *fields, u32 *val) { struct ipahal_reg_nat_uc_shared_cfg *nat_uc_shared_cfg = (struct ipahal_reg_nat_uc_shared_cfg *)fields; IPA_SETFIELD_IN_REG(*val, nat_uc_shared_cfg->nat_uc_local_table_addr_msb, IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT, IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK); IPA_SETFIELD_IN_REG(*val, nat_uc_shared_cfg->nat_uc_external_table_addr_msb, IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT, IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK); } static void ipareg_parse_nat_uc_shared_cfg(enum ipahal_reg_name reg, void *fields, u32 val) { struct ipahal_reg_nat_uc_shared_cfg *nat_uc_shared_cfg = (struct ipahal_reg_nat_uc_shared_cfg *)fields; memset(nat_uc_shared_cfg, 0, sizeof(*nat_uc_shared_cfg)); nat_uc_shared_cfg->nat_uc_local_table_addr_msb = IPA_GETFIELD_FROM_REG(val, IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT, IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK); nat_uc_shared_cfg->nat_uc_external_table_addr_msb = IPA_GETFIELD_FROM_REG(val, IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT, IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK); } static void ipareg_construct_conn_track_uc_external_cfg (enum ipahal_reg_name reg, const void *fields, u32 *val) { struct ipahal_reg_conn_track_uc_external_cfg *conn_track_uc_external_cfg = (struct ipahal_reg_conn_track_uc_external_cfg *)fields; IPA_SETFIELD_IN_REG(*val, conn_track_uc_external_cfg->conn_track_uc_external_table_addr_lsb, IPA_CONN_TRACK_UC_EXTERNAL_CFG_SHFT, IPA_CONN_TRACK_UC_EXTERNAL_CFG_BMSK); } static void ipareg_parse_conn_track_uc_external_cfg(enum ipahal_reg_name reg, void *fields, u32 val) { struct ipahal_reg_conn_track_uc_external_cfg *conn_track_uc_external_cfg = (struct ipahal_reg_conn_track_uc_external_cfg *)fields; memset(conn_track_uc_external_cfg, 0, sizeof(*conn_track_uc_external_cfg)); conn_track_uc_external_cfg->conn_track_uc_external_table_addr_lsb = IPA_GETFIELD_FROM_REG(val, IPA_CONN_TRACK_UC_EXTERNAL_CFG_SHFT, IPA_CONN_TRACK_UC_EXTERNAL_CFG_BMSK); } static void ipareg_construct_conn_track_uc_local_cfg(enum ipahal_reg_name reg, const void *fields, u32 *val) { struct ipahal_reg_conn_track_uc_local_cfg *conn_track_uc_local_cfg = (struct ipahal_reg_conn_track_uc_local_cfg *)fields; IPA_SETFIELD_IN_REG(*val, conn_track_uc_local_cfg->conn_track_uc_local_table_addr_lsb, IPA_CONN_TRACK_UC_LOCAL_CFG_SHFT, IPA_CONN_TRACK_UC_LOCAL_CFG_BMSK); } static void ipareg_parse_conn_track_uc_local_cfg(enum ipahal_reg_name reg, void *fields, u32 val) { struct ipahal_reg_conn_track_uc_local_cfg *conn_track_uc_local_cfg = (struct ipahal_reg_conn_track_uc_local_cfg *)fields; memset(conn_track_uc_local_cfg, 0, sizeof(*conn_track_uc_local_cfg)); conn_track_uc_local_cfg->conn_track_uc_local_table_addr_lsb = IPA_GETFIELD_FROM_REG(val, IPA_CONN_TRACK_UC_LOCAL_CFG_SHFT, IPA_CONN_TRACK_UC_LOCAL_CFG_BMSK); } static void ipareg_construct_conn_track_uc_shared_cfg(enum ipahal_reg_name reg, const void *fields, u32 *val) { struct ipahal_reg_conn_track_uc_shared_cfg *conn_track_uc_shared_cfg = (struct ipahal_reg_conn_track_uc_shared_cfg *)fields; IPA_SETFIELD_IN_REG(*val, conn_track_uc_shared_cfg->conn_track_uc_local_table_addr_msb, IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT, IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK); IPA_SETFIELD_IN_REG(*val, conn_track_uc_shared_cfg->conn_track_uc_external_table_addr_msb, IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT, IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK); } static void ipareg_parse_conn_track_uc_shared_cfg(enum ipahal_reg_name reg, void *fields, u32 val) { struct ipahal_reg_conn_track_uc_shared_cfg *conn_track_uc_shared_cfg = (struct ipahal_reg_conn_track_uc_shared_cfg *)fields; memset(conn_track_uc_shared_cfg, 0, sizeof(*conn_track_uc_shared_cfg)); conn_track_uc_shared_cfg->conn_track_uc_local_table_addr_msb = IPA_GETFIELD_FROM_REG(val, IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT, IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK); conn_track_uc_shared_cfg->conn_track_uc_external_table_addr_msb = IPA_GETFIELD_FROM_REG(val, IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT, IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK); } /* * struct ipahal_reg_obj - Register H/W information for specific IPA version * @construct - CB to construct register value from abstracted structure Loading Loading @@ -3244,6 +3420,30 @@ static struct ipahal_reg_obj ipahal_reg_objs[IPA_HW_MAX][IPA_REG_MAX] = { [IPA_HW_v4_5][IPA_COAL_QMAP_CFG] = { ipareg_construct_coal_qmap_cfg, ipareg_parse_coal_qmap_cfg, 0x00001810, 0, 0, 0, 0}, [IPA_HW_v4_5][IPA_NAT_UC_EXTERNAL_CFG] = { ipareg_construct_nat_uc_external_cfg, ipareg_parse_nat_uc_external_cfg, 0x00000200, 0, 0, 0, 0}, [IPA_HW_v4_5][IPA_NAT_UC_LOCAL_CFG] = { ipareg_construct_nat_uc_local_cfg, ipareg_parse_nat_uc_local_cfg, 0x00000204, 0, 0, 0, 0}, [IPA_HW_v4_5][IPA_NAT_UC_SHARED_CFG] = { ipareg_construct_nat_uc_shared_cfg, ipareg_parse_nat_uc_shared_cfg, 0x00000208, 0, 0, 0, 0}, [IPA_HW_v4_5][IPA_CONN_TRACK_UC_EXTERNAL_CFG] = { ipareg_construct_conn_track_uc_external_cfg, ipareg_parse_conn_track_uc_external_cfg, 0x00000230, 0, 0, 0, 0}, [IPA_HW_v4_5][IPA_CONN_TRACK_UC_LOCAL_CFG] = { ipareg_construct_conn_track_uc_local_cfg, ipareg_parse_conn_track_uc_local_cfg, 0x00000234, 0, 0, 0, 0}, [IPA_HW_v4_5][IPA_CONN_TRACK_UC_SHARED_CFG] = { ipareg_construct_conn_track_uc_shared_cfg, ipareg_parse_conn_track_uc_shared_cfg, 0x00000238, 0, 0, 0, 0}, }; /* Loading
drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_reg.h +70 −1 Original line number Diff line number Diff line /* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -149,6 +149,12 @@ enum ipahal_reg_name { IPA_ENDP_GSI_CFG_TLV_n, IPA_COAL_EVICT_LRU, IPA_COAL_QMAP_CFG, IPA_NAT_UC_EXTERNAL_CFG, IPA_NAT_UC_LOCAL_CFG, IPA_NAT_UC_SHARED_CFG, IPA_CONN_TRACK_UC_EXTERNAL_CFG, IPA_CONN_TRACK_UC_LOCAL_CFG, IPA_CONN_TRACK_UC_SHARED_CFG, IPA_REG_MAX, }; Loading Loading @@ -693,6 +699,69 @@ struct ipahal_reg_coal_qmap_cfg { u32 mux_id_byte_sel; }; /* * struct ipahal_reg_nat_uc_local_cfg - IPA_NAT_UC_EXTERNAL_CFG register * @nat_uc_external_table_addr_lsb: 32 LSb bits of system-memory address of * external UC-activation entry table. */ struct ipahal_reg_nat_uc_external_cfg { u32 nat_uc_external_table_addr_lsb; }; /* * struct ipahal_reg_nat_uc_local_cfg - IPA_NAT_UC_LOCAL_CFG register * @nat_uc_local_table_addr_lsb: 32 LSb bits of local address of local * UC-activation entry table. Address is memory-map based, * i.e. includes IPA address from chip level. */ struct ipahal_reg_nat_uc_local_cfg { u32 nat_uc_local_table_addr_lsb; }; /* * struct ipahal_reg_nat_uc_shared_cfg - IPA_NAT_UC_SHARED_CFG register * @nat_uc_external_table_addr_msb: 16 MSb of external UC-ativation entry table. * @nat_uc_local_table_addr_msb: 16 MSb bits of local UC-ativation entry table. */ struct ipahal_reg_nat_uc_shared_cfg { u32 nat_uc_local_table_addr_msb; u32 nat_uc_external_table_addr_msb; }; /* * struct ipahal_reg_conn_track_uc_local_cfg - IPA_conn_track_UC_EXTERNAL_CFG * register * @conn_track_uc_external_table_addr_lsb: 32 LSb bits of system-memory address * of external UC-activation entry table. */ struct ipahal_reg_conn_track_uc_external_cfg { u32 conn_track_uc_external_table_addr_lsb; }; /* * struct ipahal_reg_conn_track_uc_local_cfg - IPA_conn_track_UC_LOCAL_CFG * register * @conn_track_uc_local_table_addr_lsb: 32 LSb bits of local address of local * UC-activation entry table. Address is memory-map based, * i.e. includes IPA address from chip level. */ struct ipahal_reg_conn_track_uc_local_cfg { u32 conn_track_uc_local_table_addr_lsb; }; /* * struct ipahal_reg_conn_track_uc_shared_cfg - IPA_conn_track_UC_SHARED_CFG * register * @conn_track_uc_external_table_addr_msb: 16 MSb of external UC-ativation * entry table. * @conn_track_uc_local_table_addr_msb: 16 MSb bits of local UC-ativation * entry table. */ struct ipahal_reg_conn_track_uc_shared_cfg { u16 conn_track_uc_local_table_addr_msb; u16 conn_track_uc_external_table_addr_msb; }; /* * ipahal_print_all_regs() - Loop and read and print all the valid registers * Parameterized registers are also printed for all the valid ranges. Loading
drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_reg_i.h +17 −2 Original line number Diff line number Diff line /* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -632,7 +632,22 @@ int ipahal_reg_init(enum ipa_hw_type ipa_hw_type); #define IPA_COAL_EVICTION_EN_SHFT 0 #define IPA_COAL_QMAP_CFG_BMSK 0x1 #define IPA_COAL_QMAP_CFG_SHFT 0 #define IPA_NAT_UC_EXTERNAL_CFG_BMSK 0xFFFFFFFF #define IPA_NAT_UC_EXTERNAL_CFG_SHFT 0 #define IPA_NAT_UC_LOCAL_CFG_BMSK 0xFFFFFFFF #define IPA_NAT_UC_LOCAL_CFG_SHFT 0 #define IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK 0xFFFF0000 #define IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT 16 #define IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK 0x0000FFFF #define IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT 0 #define IPA_CONN_TRACK_UC_EXTERNAL_CFG_BMSK 0xFFFFFFFF #define IPA_CONN_TRACK_UC_EXTERNAL_CFG_SHFT 0 #define IPA_CONN_TRACK_UC_LOCAL_CFG_BMSK 0xFFFFFFFF #define IPA_CONN_TRACK_UC_LOCAL_CFG_SHFT 0 #define IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK 0xFFFF0000 #define IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT 16 #define IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK 0x0000FFFF #define IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT 0 #define IPA_STATE_TX_WRAPPER_COAL_SLAVE_OPEN_FRAME_BMSK 0xf0000000 #define IPA_STATE_TX_WRAPPER_COAL_SLAVE_OPEN_FRAME_SHFT 0x1f #define IPA_STATE_TX_WRAPPER_COAL_SLAVE_CTX_IDLE_BMSK 0x100000 Loading