xref: /dpdk/drivers/net/octeontx/base/octeontx_pkivf.h (revision 89ee1e94bc2d97ccb1ee00c834d81b1a895d0241)
1b95c3413SJerin Jacob /*
2b95c3413SJerin Jacob  *   BSD LICENSE
3b95c3413SJerin Jacob  *
4b95c3413SJerin Jacob  *   Copyright (C) Cavium Inc. 2017. All rights reserved.
5b95c3413SJerin Jacob  *
6b95c3413SJerin Jacob  *   Redistribution and use in source and binary forms, with or without
7b95c3413SJerin Jacob  *   modification, are permitted provided that the following conditions
8b95c3413SJerin Jacob  *   are met:
9b95c3413SJerin Jacob  *
10b95c3413SJerin Jacob  *     * Redistributions of source code must retain the above copyright
11b95c3413SJerin Jacob  *       notice, this list of conditions and the following disclaimer.
12b95c3413SJerin Jacob  *     * Redistributions in binary form must reproduce the above copyright
13b95c3413SJerin Jacob  *       notice, this list of conditions and the following disclaimer in
14b95c3413SJerin Jacob  *       the documentation and/or other materials provided with the
15b95c3413SJerin Jacob  *       distribution.
16b95c3413SJerin Jacob  *     * Neither the name of Cavium networks nor the names of its
17b95c3413SJerin Jacob  *       contributors may be used to endorse or promote products derived
18b95c3413SJerin Jacob  *       from this software without specific prior written permission.
19b95c3413SJerin Jacob  *
20b95c3413SJerin Jacob  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21b95c3413SJerin Jacob  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22b95c3413SJerin Jacob  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23b95c3413SJerin Jacob  *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24b95c3413SJerin Jacob  *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25b95c3413SJerin Jacob  *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26b95c3413SJerin Jacob  *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27b95c3413SJerin Jacob  *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28b95c3413SJerin Jacob  *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29b95c3413SJerin Jacob  *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30b95c3413SJerin Jacob  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31b95c3413SJerin Jacob  */
32b95c3413SJerin Jacob 
33b95c3413SJerin Jacob #ifndef	__OCTEONTX_PKI_H__
34b95c3413SJerin Jacob #define	__OCTEONTX_PKI_H__
35b95c3413SJerin Jacob 
36b95c3413SJerin Jacob #include <stdint.h>
37b95c3413SJerin Jacob 
38*89ee1e94SSantosh Shukla #include <octeontx_mbox.h>
39b95c3413SJerin Jacob 
40b95c3413SJerin Jacob #define OCTEONTX_PKI_COPROC                     5
41b95c3413SJerin Jacob 
42b95c3413SJerin Jacob /* PKI messages */
43b95c3413SJerin Jacob 
44b95c3413SJerin Jacob #define MBOX_PKI_PORT_OPEN			1
45b95c3413SJerin Jacob #define MBOX_PKI_PORT_START			2
46b95c3413SJerin Jacob #define MBOX_PKI_PORT_STOP			3
47b95c3413SJerin Jacob #define MBOX_PKI_PORT_CLOSE			4
486d28968eSJerin Jacob #define MBOX_PKI_PORT_CONFIG			5
496d28968eSJerin Jacob #define MBOX_PKI_PORT_OPT_PARSER_CONFIG		6
506d28968eSJerin Jacob #define MBOX_PKI_PORT_CUSTOM_PARSER_CONFIG	7
516d28968eSJerin Jacob #define MBOX_PKI_PORT_PKTBUF_CONFIG		8
526d28968eSJerin Jacob #define MBOX_PKI_PORT_HASH_CONFIG		9
536d28968eSJerin Jacob #define MBOX_PKI_PORT_ERRCHK_CONFIG		10
546d28968eSJerin Jacob #define MBOX_PKI_PORT_CREATE_QOS		11
556d28968eSJerin Jacob #define MBOX_PKI_PORT_MODIFY_QOS		12
566d28968eSJerin Jacob #define MBOX_PKI_PORT_DELETE_QOS		13
576d28968eSJerin Jacob #define MBOX_PKI_PORT_PKTDROP_CONFIG		14
586d28968eSJerin Jacob #define MBOX_PKI_PORT_WQE_GEN_CONFIG		15
596d28968eSJerin Jacob #define MBOX_PKI_BACKPRESSURE_CONFIG		16
606d28968eSJerin Jacob #define MBOX_PKI_PORT_GET_STATS			17
616d28968eSJerin Jacob #define MBOX_PKI_PORT_RESET_STATS		18
626d28968eSJerin Jacob #define MBOX_PKI_GET_PORT_CONFIG		19
636d28968eSJerin Jacob #define MBOX_PKI_GET_PORT_QOS_CONFIG		20
646d28968eSJerin Jacob 
656d28968eSJerin Jacob #define MBOX_PKI_MAX_QOS_ENTRY 64
666d28968eSJerin Jacob 
676d28968eSJerin Jacob /* pki pkind parse mode */
686d28968eSJerin Jacob enum  {
696d28968eSJerin Jacob 	MBOX_PKI_PARSE_LA_TO_LG = 0,
706d28968eSJerin Jacob 	MBOX_PKI_PARSE_LB_TO_LG = 1,
716d28968eSJerin Jacob 	MBOX_PKI_PARSE_LC_TO_LG = 3,
726d28968eSJerin Jacob 	MBOX_PKI_PARSE_LG = 0x3f,
736d28968eSJerin Jacob 	MBOX_PKI_PARSE_NOTHING = 0x7f
746d28968eSJerin Jacob };
75b95c3413SJerin Jacob 
76b95c3413SJerin Jacob /* Interface types: */
77b95c3413SJerin Jacob enum {
78b95c3413SJerin Jacob 	OCTTX_PORT_TYPE_NET, /* Network interface ports */
79b95c3413SJerin Jacob 	OCTTX_PORT_TYPE_INT, /* CPU internal interface ports */
80b95c3413SJerin Jacob 	OCTTX_PORT_TYPE_PCI, /* DPI/PCIe interface ports */
81b95c3413SJerin Jacob 	OCTTX_PORT_TYPE_MAX
82b95c3413SJerin Jacob };
83b95c3413SJerin Jacob 
84b95c3413SJerin Jacob /* pki port config */
85b95c3413SJerin Jacob typedef struct mbox_pki_port_type {
86b95c3413SJerin Jacob 	uint8_t port_type;
87b95c3413SJerin Jacob } mbox_pki_port_t;
88b95c3413SJerin Jacob 
896d28968eSJerin Jacob /* pki port config */
906d28968eSJerin Jacob typedef struct mbox_pki_port_cfg {
916d28968eSJerin Jacob 	uint8_t port_type;
926d28968eSJerin Jacob 	struct {
936d28968eSJerin Jacob 		uint8_t fcs_pres:1;
946d28968eSJerin Jacob 		uint8_t fcs_skip:1;
956d28968eSJerin Jacob 		uint8_t parse_mode:1;
966d28968eSJerin Jacob 		uint8_t mpls_parse:1;
976d28968eSJerin Jacob 		uint8_t inst_hdr_parse:1;
986d28968eSJerin Jacob 		uint8_t fulc_parse:1;
996d28968eSJerin Jacob 		uint8_t dsa_parse:1;
1006d28968eSJerin Jacob 		uint8_t hg2_parse:1;
1016d28968eSJerin Jacob 		uint8_t hg_parse:1;
1026d28968eSJerin Jacob 	} mmask;
1036d28968eSJerin Jacob 	uint8_t fcs_pres;
1046d28968eSJerin Jacob 	uint8_t fcs_skip;
1056d28968eSJerin Jacob 	uint8_t parse_mode;
1066d28968eSJerin Jacob 	uint8_t mpls_parse;
1076d28968eSJerin Jacob 	uint8_t inst_hdr_parse;
1086d28968eSJerin Jacob 	uint8_t fulc_parse;
1096d28968eSJerin Jacob 	uint8_t dsa_parse;
1106d28968eSJerin Jacob 	uint8_t hg2_parse;
1116d28968eSJerin Jacob 	uint8_t hg_parse;
1126d28968eSJerin Jacob } mbox_pki_prt_cfg_t;
1136d28968eSJerin Jacob 
1146d28968eSJerin Jacob /* pki Flow/style packet buffer config */
1156d28968eSJerin Jacob typedef struct mbox_pki_port_pktbuf_cfg {
1166d28968eSJerin Jacob 	uint8_t port_type;
1176d28968eSJerin Jacob 	struct {
1186d28968eSJerin Jacob 		uint16_t f_mbuff_size:1;
1196d28968eSJerin Jacob 		uint16_t f_wqe_skip:1;
1206d28968eSJerin Jacob 		uint16_t f_first_skip:1;
1216d28968eSJerin Jacob 		uint16_t f_later_skip:1;
1226d28968eSJerin Jacob 		uint16_t f_pkt_outside_wqe:1;
1236d28968eSJerin Jacob 		uint16_t f_wqe_endian:1;
1246d28968eSJerin Jacob 		uint16_t f_cache_mode:1;
1256d28968eSJerin Jacob 	} mmask;
1266d28968eSJerin Jacob 	uint16_t mbuff_size;
1276d28968eSJerin Jacob 	uint16_t wqe_skip;
1286d28968eSJerin Jacob 	uint16_t first_skip;
1296d28968eSJerin Jacob 	uint16_t later_skip;
1306d28968eSJerin Jacob 	uint8_t pkt_outside_wqe;
1316d28968eSJerin Jacob 	uint8_t wqe_endian;
1326d28968eSJerin Jacob 	uint8_t cache_mode;
1336d28968eSJerin Jacob } mbox_pki_pktbuf_cfg_t;
1346d28968eSJerin Jacob 
1356d28968eSJerin Jacob /* pki flow/style tag config */
1366d28968eSJerin Jacob typedef struct mbox_pki_port_hash_cfg {
1376d28968eSJerin Jacob 	uint8_t port_type;
1386d28968eSJerin Jacob 	uint32_t tag_slf:1;
1396d28968eSJerin Jacob 	uint32_t tag_sle:1;
1406d28968eSJerin Jacob 	uint32_t tag_sld:1;
1416d28968eSJerin Jacob 	uint32_t tag_slc:1;
1426d28968eSJerin Jacob 	uint32_t tag_dlf:1;
1436d28968eSJerin Jacob 	uint32_t tag_dle:1;
1446d28968eSJerin Jacob 	uint32_t tag_dld:1;
1456d28968eSJerin Jacob 	uint32_t tag_dlc:1;
1466d28968eSJerin Jacob 	uint32_t tag_prt:1;
1476d28968eSJerin Jacob 	uint32_t tag_vlan0:1;
1486d28968eSJerin Jacob 	uint32_t tag_vlan1:1;
1496d28968eSJerin Jacob 	uint32_t tag_ip_pctl:1;
1506d28968eSJerin Jacob 	uint32_t tag_sync:1;
1516d28968eSJerin Jacob 	uint32_t tag_spi:1;
1526d28968eSJerin Jacob 	uint32_t tag_gtp:1;
1536d28968eSJerin Jacob 	uint32_t tag_vni:1;
1546d28968eSJerin Jacob } mbox_pki_hash_cfg_t;
1556d28968eSJerin Jacob 
1566d28968eSJerin Jacob /* pki flow/style errcheck config */
1576d28968eSJerin Jacob typedef struct mbox_pki_port_errcheck_cfg {
1586d28968eSJerin Jacob 	uint8_t port_type;
1596d28968eSJerin Jacob 	struct {
1606d28968eSJerin Jacob 		uint32_t f_ip6_udp_opt:1;
1616d28968eSJerin Jacob 		uint32_t f_lenerr_en:1;
1626d28968eSJerin Jacob 		uint32_t f_maxerr_en:1;
1636d28968eSJerin Jacob 		uint32_t f_minerr_en:1;
1646d28968eSJerin Jacob 		uint32_t f_fcs_chk:1;
1656d28968eSJerin Jacob 		uint32_t f_fcs_strip:1;
1666d28968eSJerin Jacob 		uint32_t f_len_lf:1;
1676d28968eSJerin Jacob 		uint32_t f_len_le:1;
1686d28968eSJerin Jacob 		uint32_t f_len_ld:1;
1696d28968eSJerin Jacob 		uint32_t f_len_lc:1;
1706d28968eSJerin Jacob 		uint32_t f_csum_lf:1;
1716d28968eSJerin Jacob 		uint32_t f_csum_le:1;
1726d28968eSJerin Jacob 		uint32_t f_csum_ld:1;
1736d28968eSJerin Jacob 		uint32_t f_csum_lc:1;
1746d28968eSJerin Jacob 		uint32_t f_min_frame_len;
1756d28968eSJerin Jacob 		uint32_t f_max_frame_len;
1766d28968eSJerin Jacob 	} mmask;
1776d28968eSJerin Jacob 	uint64_t ip6_udp_opt:1;
1786d28968eSJerin Jacob 	uint64_t lenerr_en:1;
1796d28968eSJerin Jacob 	uint64_t maxerr_en:1;
1806d28968eSJerin Jacob 	uint64_t minerr_en:1;
1816d28968eSJerin Jacob 	uint64_t fcs_chk:1;
1826d28968eSJerin Jacob 	uint64_t fcs_strip:1;
1836d28968eSJerin Jacob 	uint64_t len_lf:1;
1846d28968eSJerin Jacob 	uint64_t len_le:1;
1856d28968eSJerin Jacob 	uint64_t len_ld:1;
1866d28968eSJerin Jacob 	uint64_t len_lc:1;
1876d28968eSJerin Jacob 	uint64_t csum_lf:1;
1886d28968eSJerin Jacob 	uint64_t csum_le:1;
1896d28968eSJerin Jacob 	uint64_t csum_ld:1;
1906d28968eSJerin Jacob 	uint64_t csum_lc:1;
1916d28968eSJerin Jacob 	uint64_t min_frame_len;
1926d28968eSJerin Jacob 	uint64_t max_frame_len;
1936d28968eSJerin Jacob } mbox_pki_errcheck_cfg_t;
1946d28968eSJerin Jacob 
1956d28968eSJerin Jacob /* CACHE MODE*/
1966d28968eSJerin Jacob enum {
1976d28968eSJerin Jacob 	MBOX_PKI_OPC_MODE_STT = 0LL,
1986d28968eSJerin Jacob 	MBOX_PKI_OPC_MODE_STF = 1LL,
1996d28968eSJerin Jacob 	MBOX_PKI_OPC_MODE_STF1_STT = 2LL,
2006d28968eSJerin Jacob 	MBOX_PKI_OPC_MODE_STF2_STT = 3LL
2016d28968eSJerin Jacob };
2026d28968eSJerin Jacob 
2036d28968eSJerin Jacob /* PKI QPG QOS*/
2046d28968eSJerin Jacob enum {
2056d28968eSJerin Jacob 	MBOX_PKI_QPG_QOS_NONE = 0,
2066d28968eSJerin Jacob 	MBOX_PKI_QPG_QOS_VLAN,
2076d28968eSJerin Jacob 	MBOX_PKI_QPG_QOS_MPLS,
2086d28968eSJerin Jacob 	MBOX_PKI_QPG_QOS_DSA_SRC,
2096d28968eSJerin Jacob 	MBOX_PKI_QPG_QOS_DIFFSERV,
2106d28968eSJerin Jacob 	MBOX_PKI_QPG_QOS_HIGIG,
2116d28968eSJerin Jacob };
2126d28968eSJerin Jacob 
2136d28968eSJerin Jacob struct mbox_pki_qos_entry {
2146d28968eSJerin Jacob 	uint16_t port_add;
2156d28968eSJerin Jacob 	uint16_t ggrp_ok;
2166d28968eSJerin Jacob 	uint16_t ggrp_bad;
2176d28968eSJerin Jacob 	uint16_t gaura;
2186d28968eSJerin Jacob 	uint8_t grptag_ok;
2196d28968eSJerin Jacob 	uint8_t grptag_bad;
2206d28968eSJerin Jacob };
2216d28968eSJerin Jacob 
2226d28968eSJerin Jacob /* pki flow/style enable qos */
2236d28968eSJerin Jacob typedef struct mbox_pki_port_create_qos {
2246d28968eSJerin Jacob 	uint8_t port_type;
2256d28968eSJerin Jacob 	uint8_t qpg_qos;
2266d28968eSJerin Jacob 	uint8_t num_entry;
2276d28968eSJerin Jacob 	uint8_t tag_type;
2286d28968eSJerin Jacob 	uint8_t drop_policy;
2296d28968eSJerin Jacob 	struct mbox_pki_qos_entry qos_entry[MBOX_PKI_MAX_QOS_ENTRY];
2306d28968eSJerin Jacob } mbox_pki_qos_cfg_t;
2316d28968eSJerin Jacob 
2326d28968eSJerin Jacob /* pki flow/style enable qos */
2336d28968eSJerin Jacob typedef struct mbox_pki_port_modify_qos_entry {
2346d28968eSJerin Jacob 	uint8_t port_type;
2356d28968eSJerin Jacob 	uint16_t index;
2366d28968eSJerin Jacob 	struct {
2376d28968eSJerin Jacob 		uint8_t f_port_add:1;
2386d28968eSJerin Jacob 		uint8_t f_grp_ok:1;
2396d28968eSJerin Jacob 		uint8_t f_grp_bad:1;
2406d28968eSJerin Jacob 		uint8_t f_gaura:1;
2416d28968eSJerin Jacob 		uint8_t f_grptag_ok:1;
2426d28968eSJerin Jacob 		uint8_t f_grptag_bad:1;
2436d28968eSJerin Jacob 	} mmask;
2446d28968eSJerin Jacob 	struct mbox_pki_qos_entry qos_entry;
2456d28968eSJerin Jacob } mbox_pki_mod_qos_t;
2466d28968eSJerin Jacob 
2476d28968eSJerin Jacob /* PKI maximum constants */
2486d28968eSJerin Jacob #define PKI_VF_MAX			(1)
2496d28968eSJerin Jacob #define PKI_MAX_PKTLEN			(32768)
2506d28968eSJerin Jacob 
2516d28968eSJerin Jacob /* pki pkind parse mode */
2526d28968eSJerin Jacob enum  {
2536d28968eSJerin Jacob 	PKI_PARSE_LA_TO_LG = 0,
2546d28968eSJerin Jacob 	PKI_PARSE_LB_TO_LG = 1,
2556d28968eSJerin Jacob 	PKI_PARSE_LC_TO_LG = 3,
2566d28968eSJerin Jacob 	PKI_PARSE_LG = 0x3f,
2576d28968eSJerin Jacob 	PKI_PARSE_NOTHING = 0x7f
2586d28968eSJerin Jacob };
2596d28968eSJerin Jacob 
2606d28968eSJerin Jacob /* pki port config */
2616d28968eSJerin Jacob typedef struct pki_port_cfg {
2626d28968eSJerin Jacob 	uint8_t port_type;
2636d28968eSJerin Jacob 	struct {
2646d28968eSJerin Jacob 		uint8_t fcs_pres:1;
2656d28968eSJerin Jacob 		uint8_t fcs_skip:1;
2666d28968eSJerin Jacob 		uint8_t parse_mode:1;
2676d28968eSJerin Jacob 		uint8_t mpls_parse:1;
2686d28968eSJerin Jacob 		uint8_t inst_hdr_parse:1;
2696d28968eSJerin Jacob 		uint8_t fulc_parse:1;
2706d28968eSJerin Jacob 		uint8_t dsa_parse:1;
2716d28968eSJerin Jacob 		uint8_t hg2_parse:1;
2726d28968eSJerin Jacob 		uint8_t hg_parse:1;
2736d28968eSJerin Jacob 	} mmask;
2746d28968eSJerin Jacob 	uint8_t fcs_pres;
2756d28968eSJerin Jacob 	uint8_t fcs_skip;
2766d28968eSJerin Jacob 	uint8_t parse_mode;
2776d28968eSJerin Jacob 	uint8_t mpls_parse;
2786d28968eSJerin Jacob 	uint8_t inst_hdr_parse;
2796d28968eSJerin Jacob 	uint8_t fulc_parse;
2806d28968eSJerin Jacob 	uint8_t dsa_parse;
2816d28968eSJerin Jacob 	uint8_t hg2_parse;
2826d28968eSJerin Jacob 	uint8_t hg_parse;
2836d28968eSJerin Jacob } pki_prt_cfg_t;
2846d28968eSJerin Jacob 
2856d28968eSJerin Jacob 
2866d28968eSJerin Jacob /* pki Flow/style packet buffer config */
2876d28968eSJerin Jacob typedef struct pki_port_pktbuf_cfg {
2886d28968eSJerin Jacob 	uint8_t port_type;
2896d28968eSJerin Jacob 	struct {
2906d28968eSJerin Jacob 		uint16_t f_mbuff_size:1;
2916d28968eSJerin Jacob 		uint16_t f_wqe_skip:1;
2926d28968eSJerin Jacob 		uint16_t f_first_skip:1;
2936d28968eSJerin Jacob 		uint16_t f_later_skip:1;
2946d28968eSJerin Jacob 		uint16_t f_pkt_outside_wqe:1;
2956d28968eSJerin Jacob 		uint16_t f_wqe_endian:1;
2966d28968eSJerin Jacob 		uint16_t f_cache_mode:1;
2976d28968eSJerin Jacob 	} mmask;
2986d28968eSJerin Jacob 	uint16_t mbuff_size;
2996d28968eSJerin Jacob 	uint16_t wqe_skip;
3006d28968eSJerin Jacob 	uint16_t first_skip;
3016d28968eSJerin Jacob 	uint16_t later_skip;
3026d28968eSJerin Jacob 	uint8_t pkt_outside_wqe;
3036d28968eSJerin Jacob 	uint8_t wqe_endian;
3046d28968eSJerin Jacob 	uint8_t cache_mode;
3056d28968eSJerin Jacob } pki_pktbuf_cfg_t;
3066d28968eSJerin Jacob 
3076d28968eSJerin Jacob /* pki flow/style tag config */
3086d28968eSJerin Jacob typedef struct pki_port_hash_cfg {
3096d28968eSJerin Jacob 	uint8_t port_type;
3106d28968eSJerin Jacob 	uint32_t tag_slf:1;
3116d28968eSJerin Jacob 	uint32_t tag_sle:1;
3126d28968eSJerin Jacob 	uint32_t tag_sld:1;
3136d28968eSJerin Jacob 	uint32_t tag_slc:1;
3146d28968eSJerin Jacob 	uint32_t tag_dlf:1;
3156d28968eSJerin Jacob 	uint32_t tag_dle:1;
3166d28968eSJerin Jacob 	uint32_t tag_dld:1;
3176d28968eSJerin Jacob 	uint32_t tag_dlc:1;
3186d28968eSJerin Jacob 	uint32_t tag_prt:1;
3196d28968eSJerin Jacob 	uint32_t tag_vlan0:1;
3206d28968eSJerin Jacob 	uint32_t tag_vlan1:1;
3216d28968eSJerin Jacob 	uint32_t tag_ip_pctl:1;
3226d28968eSJerin Jacob 	uint32_t tag_sync:1;
3236d28968eSJerin Jacob 	uint32_t tag_spi:1;
3246d28968eSJerin Jacob 	uint32_t tag_gtp:1;
3256d28968eSJerin Jacob 	uint32_t tag_vni:1;
3266d28968eSJerin Jacob } pki_hash_cfg_t;
3276d28968eSJerin Jacob 
3286d28968eSJerin Jacob /* pki flow/style errcheck config */
3296d28968eSJerin Jacob typedef struct pki_port_errcheck_cfg {
3306d28968eSJerin Jacob 	uint8_t port_type;
3316d28968eSJerin Jacob 	struct {
3326d28968eSJerin Jacob 		uint32_t f_ip6_udp_opt:1;
3336d28968eSJerin Jacob 		uint32_t f_lenerr_en:1;
3346d28968eSJerin Jacob 		uint32_t f_maxerr_en:1;
3356d28968eSJerin Jacob 		uint32_t f_minerr_en:1;
3366d28968eSJerin Jacob 		uint32_t f_fcs_chk:1;
3376d28968eSJerin Jacob 		uint32_t f_fcs_strip:1;
3386d28968eSJerin Jacob 		uint32_t f_len_lf:1;
3396d28968eSJerin Jacob 		uint32_t f_len_le:1;
3406d28968eSJerin Jacob 		uint32_t f_len_ld:1;
3416d28968eSJerin Jacob 		uint32_t f_len_lc:1;
3426d28968eSJerin Jacob 		uint32_t f_csum_lf:1;
3436d28968eSJerin Jacob 		uint32_t f_csum_le:1;
3446d28968eSJerin Jacob 		uint32_t f_csum_ld:1;
3456d28968eSJerin Jacob 		uint32_t f_csum_lc:1;
3466d28968eSJerin Jacob 		uint32_t f_min_frame_len;
3476d28968eSJerin Jacob 		uint32_t f_max_frame_len;
3486d28968eSJerin Jacob 	} mmask;
3496d28968eSJerin Jacob 	uint64_t ip6_udp_opt:1;
3506d28968eSJerin Jacob 	uint64_t lenerr_en:1;
3516d28968eSJerin Jacob 	uint64_t maxerr_en:1;
3526d28968eSJerin Jacob 	uint64_t minerr_en:1;
3536d28968eSJerin Jacob 	uint64_t fcs_chk:1;
3546d28968eSJerin Jacob 	uint64_t fcs_strip:1;
3556d28968eSJerin Jacob 	uint64_t len_lf:1;
3566d28968eSJerin Jacob 	uint64_t len_le:1;
3576d28968eSJerin Jacob 	uint64_t len_ld:1;
3586d28968eSJerin Jacob 	uint64_t len_lc:1;
3596d28968eSJerin Jacob 	uint64_t csum_lf:1;
3606d28968eSJerin Jacob 	uint64_t csum_le:1;
3616d28968eSJerin Jacob 	uint64_t csum_ld:1;
3626d28968eSJerin Jacob 	uint64_t csum_lc:1;
3636d28968eSJerin Jacob 	uint64_t min_frame_len;
3646d28968eSJerin Jacob 	uint64_t max_frame_len;
3656d28968eSJerin Jacob } pki_errchk_cfg_t;
3666d28968eSJerin Jacob 
3676d28968eSJerin Jacob 
3686d28968eSJerin Jacob /* CACHE MODE*/
3696d28968eSJerin Jacob enum {
3706d28968eSJerin Jacob 	PKI_OPC_MODE_STT = 0LL,
3716d28968eSJerin Jacob 	PKI_OPC_MODE_STF = 1LL,
3726d28968eSJerin Jacob 	PKI_OPC_MODE_STF1_STT = 2LL,
3736d28968eSJerin Jacob 	PKI_OPC_MODE_STF2_STT = 3LL
3746d28968eSJerin Jacob };
3756d28968eSJerin Jacob 
3766d28968eSJerin Jacob /* PKI QPG QOS*/
3776d28968eSJerin Jacob enum {
3786d28968eSJerin Jacob 	PKI_QPG_QOS_NONE = 0,
3796d28968eSJerin Jacob 	PKI_QPG_QOS_VLAN,
3806d28968eSJerin Jacob 	PKI_QPG_QOS_MPLS,
3816d28968eSJerin Jacob 	PKI_QPG_QOS_DSA_SRC,
3826d28968eSJerin Jacob 	PKI_QPG_QOS_DIFFSERV,
3836d28968eSJerin Jacob 	PKI_QPG_QOS_HIGIG,
3846d28968eSJerin Jacob };
3856d28968eSJerin Jacob 
3866d28968eSJerin Jacob struct pki_qos_entry {
3876d28968eSJerin Jacob 	uint16_t port_add;
3886d28968eSJerin Jacob 	uint16_t ggrp_ok;
3896d28968eSJerin Jacob 	uint16_t ggrp_bad;
3906d28968eSJerin Jacob 	uint16_t gaura;
3916d28968eSJerin Jacob 	uint8_t grptag_ok;
3926d28968eSJerin Jacob 	uint8_t grptag_bad;
3936d28968eSJerin Jacob 	uint8_t ena_red;
3946d28968eSJerin Jacob 	uint8_t ena_drop;
3956d28968eSJerin Jacob };
3966d28968eSJerin Jacob 
3976d28968eSJerin Jacob #define PKO_MAX_QOS_ENTRY 64
3986d28968eSJerin Jacob 
3996d28968eSJerin Jacob /* pki flow/style enable qos */
4006d28968eSJerin Jacob typedef struct pki_port_create_qos {
4016d28968eSJerin Jacob 	uint8_t port_type;
4026d28968eSJerin Jacob 	uint8_t qpg_qos;
4036d28968eSJerin Jacob 	uint8_t num_entry;
4046d28968eSJerin Jacob 	uint8_t tag_type;
4056d28968eSJerin Jacob 	uint8_t drop_policy;
4066d28968eSJerin Jacob 	struct pki_qos_entry qos_entry[PKO_MAX_QOS_ENTRY];
4076d28968eSJerin Jacob } pki_qos_cfg_t;
4086d28968eSJerin Jacob 
4096d28968eSJerin Jacob /* pki flow/style enable qos */
4106d28968eSJerin Jacob typedef struct pki_port_modify_qos_entry {
4116d28968eSJerin Jacob 	uint8_t port_type;
4126d28968eSJerin Jacob 	uint16_t index;
4136d28968eSJerin Jacob 	struct {
4146d28968eSJerin Jacob 		uint8_t f_port_add:1;
4156d28968eSJerin Jacob 		uint8_t f_grp_ok:1;
4166d28968eSJerin Jacob 		uint8_t f_grp_bad:1;
4176d28968eSJerin Jacob 		uint8_t f_gaura:1;
4186d28968eSJerin Jacob 	} mmask;
4196d28968eSJerin Jacob 	struct pki_qos_entry qos_entry;
4206d28968eSJerin Jacob } pki_mod_qos_t;
4216d28968eSJerin Jacob 
422b95c3413SJerin Jacob int octeontx_pki_port_open(int port);
4236d28968eSJerin Jacob int octeontx_pki_port_hash_config(int port, pki_hash_cfg_t *hash_cfg);
4246d28968eSJerin Jacob int octeontx_pki_port_pktbuf_config(int port, pki_pktbuf_cfg_t *buf_cfg);
4256d28968eSJerin Jacob int octeontx_pki_port_create_qos(int port, pki_qos_cfg_t *qos_cfg);
426b95c3413SJerin Jacob int octeontx_pki_port_close(int port);
427b95c3413SJerin Jacob int octeontx_pki_port_start(int port);
428b95c3413SJerin Jacob int octeontx_pki_port_stop(int port);
4296d28968eSJerin Jacob int octeontx_pki_port_errchk_config(int port, pki_errchk_cfg_t *cfg);
430b95c3413SJerin Jacob 
431b95c3413SJerin Jacob #endif /* __OCTEONTX_PKI_H__ */
432