xref: /dpdk/drivers/net/octeontx/base/octeontx_pkivf.h (revision a6d6f0afd0cc48c3a3c2568a971fd6b28daea2fa)
1aaf4363eSJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause
2aaf4363eSJerin Jacob  * Copyright(c) 2017 Cavium, Inc
3b95c3413SJerin Jacob  */
4b95c3413SJerin Jacob 
5b95c3413SJerin Jacob #ifndef	__OCTEONTX_PKI_H__
6b95c3413SJerin Jacob #define	__OCTEONTX_PKI_H__
7b95c3413SJerin Jacob 
8b95c3413SJerin Jacob #include <stdint.h>
9b95c3413SJerin Jacob 
1089ee1e94SSantosh Shukla #include <octeontx_mbox.h>
11b95c3413SJerin Jacob 
12b95c3413SJerin Jacob #define OCTEONTX_PKI_COPROC                     5
13b95c3413SJerin Jacob 
14b95c3413SJerin Jacob /* PKI messages */
15b95c3413SJerin Jacob 
16b95c3413SJerin Jacob #define MBOX_PKI_PORT_OPEN			1
17b95c3413SJerin Jacob #define MBOX_PKI_PORT_START			2
18b95c3413SJerin Jacob #define MBOX_PKI_PORT_STOP			3
19b95c3413SJerin Jacob #define MBOX_PKI_PORT_CLOSE			4
206d28968eSJerin Jacob #define MBOX_PKI_PORT_CONFIG			5
216d28968eSJerin Jacob #define MBOX_PKI_PORT_OPT_PARSER_CONFIG		6
226d28968eSJerin Jacob #define MBOX_PKI_PORT_CUSTOM_PARSER_CONFIG	7
236d28968eSJerin Jacob #define MBOX_PKI_PORT_PKTBUF_CONFIG		8
246d28968eSJerin Jacob #define MBOX_PKI_PORT_HASH_CONFIG		9
256d28968eSJerin Jacob #define MBOX_PKI_PORT_ERRCHK_CONFIG		10
266d28968eSJerin Jacob #define MBOX_PKI_PORT_CREATE_QOS		11
276d28968eSJerin Jacob #define MBOX_PKI_PORT_MODIFY_QOS		12
286d28968eSJerin Jacob #define MBOX_PKI_PORT_DELETE_QOS		13
296d28968eSJerin Jacob #define MBOX_PKI_PORT_PKTDROP_CONFIG		14
306d28968eSJerin Jacob #define MBOX_PKI_PORT_WQE_GEN_CONFIG		15
316d28968eSJerin Jacob #define MBOX_PKI_BACKPRESSURE_CONFIG		16
326d28968eSJerin Jacob #define MBOX_PKI_PORT_GET_STATS			17
336d28968eSJerin Jacob #define MBOX_PKI_PORT_RESET_STATS		18
346d28968eSJerin Jacob #define MBOX_PKI_GET_PORT_CONFIG		19
356d28968eSJerin Jacob #define MBOX_PKI_GET_PORT_QOS_CONFIG		20
36b4134b2dSPavan Nikhilesh #define MBOX_PKI_PORT_ALLOC_QPG			21
37b4134b2dSPavan Nikhilesh #define MBOX_PKI_PORT_FREE_QPG			22
38b4134b2dSPavan Nikhilesh #define MBOX_PKI_SET_PORT_CONFIG		23
396d28968eSJerin Jacob 
406d28968eSJerin Jacob #define MBOX_PKI_MAX_QOS_ENTRY 64
416d28968eSJerin Jacob 
426d28968eSJerin Jacob /* pki pkind parse mode */
436d28968eSJerin Jacob enum  {
446d28968eSJerin Jacob 	MBOX_PKI_PARSE_LA_TO_LG = 0,
456d28968eSJerin Jacob 	MBOX_PKI_PARSE_LB_TO_LG = 1,
466d28968eSJerin Jacob 	MBOX_PKI_PARSE_LC_TO_LG = 3,
476d28968eSJerin Jacob 	MBOX_PKI_PARSE_LG = 0x3f,
486d28968eSJerin Jacob 	MBOX_PKI_PARSE_NOTHING = 0x7f
496d28968eSJerin Jacob };
50b95c3413SJerin Jacob 
51*a6d6f0afSPavan Nikhilesh /* PKI maximum constants */
52*a6d6f0afSPavan Nikhilesh #define PKI_VF_MAX			(32)
53*a6d6f0afSPavan Nikhilesh #define PKI_MAX_PKTLEN			(32768)
54*a6d6f0afSPavan Nikhilesh 
55b95c3413SJerin Jacob /* Interface types: */
56b95c3413SJerin Jacob enum {
57b95c3413SJerin Jacob 	OCTTX_PORT_TYPE_NET, /* Network interface ports */
58b95c3413SJerin Jacob 	OCTTX_PORT_TYPE_INT, /* CPU internal interface ports */
59b95c3413SJerin Jacob 	OCTTX_PORT_TYPE_PCI, /* DPI/PCIe interface ports */
60b95c3413SJerin Jacob 	OCTTX_PORT_TYPE_MAX
61b95c3413SJerin Jacob };
62b95c3413SJerin Jacob 
63b95c3413SJerin Jacob /* pki port config */
64b95c3413SJerin Jacob typedef struct mbox_pki_port_type {
65b95c3413SJerin Jacob 	uint8_t port_type;
66b95c3413SJerin Jacob } mbox_pki_port_t;
67b95c3413SJerin Jacob 
686d28968eSJerin Jacob /* pki port config */
696d28968eSJerin Jacob typedef struct mbox_pki_port_cfg {
706d28968eSJerin Jacob 	uint8_t port_type;
716d28968eSJerin Jacob 	struct {
726d28968eSJerin Jacob 		uint8_t fcs_pres:1;
736d28968eSJerin Jacob 		uint8_t fcs_skip:1;
74b4134b2dSPavan Nikhilesh 		uint8_t inst_skip:1;
756d28968eSJerin Jacob 		uint8_t parse_mode:1;
766d28968eSJerin Jacob 		uint8_t mpls_parse:1;
776d28968eSJerin Jacob 		uint8_t inst_hdr_parse:1;
786d28968eSJerin Jacob 		uint8_t fulc_parse:1;
796d28968eSJerin Jacob 		uint8_t dsa_parse:1;
806d28968eSJerin Jacob 		uint8_t hg2_parse:1;
816d28968eSJerin Jacob 		uint8_t hg_parse:1;
826d28968eSJerin Jacob 	} mmask;
836d28968eSJerin Jacob 	uint8_t fcs_pres;
846d28968eSJerin Jacob 	uint8_t fcs_skip;
85b4134b2dSPavan Nikhilesh 	uint8_t inst_skip;
866d28968eSJerin Jacob 	uint8_t parse_mode;
876d28968eSJerin Jacob 	uint8_t mpls_parse;
886d28968eSJerin Jacob 	uint8_t inst_hdr_parse;
896d28968eSJerin Jacob 	uint8_t fulc_parse;
906d28968eSJerin Jacob 	uint8_t dsa_parse;
916d28968eSJerin Jacob 	uint8_t hg2_parse;
926d28968eSJerin Jacob 	uint8_t hg_parse;
936d28968eSJerin Jacob } mbox_pki_prt_cfg_t;
946d28968eSJerin Jacob 
956d28968eSJerin Jacob /* pki Flow/style packet buffer config */
966d28968eSJerin Jacob typedef struct mbox_pki_port_pktbuf_cfg {
976d28968eSJerin Jacob 	uint8_t port_type;
986d28968eSJerin Jacob 	struct {
996d28968eSJerin Jacob 		uint16_t f_mbuff_size:1;
1006d28968eSJerin Jacob 		uint16_t f_wqe_skip:1;
1016d28968eSJerin Jacob 		uint16_t f_first_skip:1;
1026d28968eSJerin Jacob 		uint16_t f_later_skip:1;
1036d28968eSJerin Jacob 		uint16_t f_pkt_outside_wqe:1;
1046d28968eSJerin Jacob 		uint16_t f_wqe_endian:1;
1056d28968eSJerin Jacob 		uint16_t f_cache_mode:1;
1066d28968eSJerin Jacob 	} mmask;
1076d28968eSJerin Jacob 	uint16_t mbuff_size;
1086d28968eSJerin Jacob 	uint16_t wqe_skip;
1096d28968eSJerin Jacob 	uint16_t first_skip;
1106d28968eSJerin Jacob 	uint16_t later_skip;
1116d28968eSJerin Jacob 	uint8_t pkt_outside_wqe;
1126d28968eSJerin Jacob 	uint8_t wqe_endian;
1136d28968eSJerin Jacob 	uint8_t cache_mode;
1146d28968eSJerin Jacob } mbox_pki_pktbuf_cfg_t;
1156d28968eSJerin Jacob 
1166d28968eSJerin Jacob /* pki flow/style tag config */
1176d28968eSJerin Jacob typedef struct mbox_pki_port_hash_cfg {
1186d28968eSJerin Jacob 	uint8_t port_type;
1196d28968eSJerin Jacob 	uint32_t tag_slf:1;
1206d28968eSJerin Jacob 	uint32_t tag_sle:1;
1216d28968eSJerin Jacob 	uint32_t tag_sld:1;
1226d28968eSJerin Jacob 	uint32_t tag_slc:1;
1236d28968eSJerin Jacob 	uint32_t tag_dlf:1;
1246d28968eSJerin Jacob 	uint32_t tag_dle:1;
1256d28968eSJerin Jacob 	uint32_t tag_dld:1;
1266d28968eSJerin Jacob 	uint32_t tag_dlc:1;
1276d28968eSJerin Jacob 	uint32_t tag_prt:1;
1286d28968eSJerin Jacob 	uint32_t tag_vlan0:1;
1296d28968eSJerin Jacob 	uint32_t tag_vlan1:1;
1306d28968eSJerin Jacob 	uint32_t tag_ip_pctl:1;
1316d28968eSJerin Jacob 	uint32_t tag_sync:1;
1326d28968eSJerin Jacob 	uint32_t tag_spi:1;
1336d28968eSJerin Jacob 	uint32_t tag_gtp:1;
1346d28968eSJerin Jacob 	uint32_t tag_vni:1;
1356d28968eSJerin Jacob } mbox_pki_hash_cfg_t;
1366d28968eSJerin Jacob 
1376d28968eSJerin Jacob /* pki flow/style errcheck config */
1386d28968eSJerin Jacob typedef struct mbox_pki_port_errcheck_cfg {
1396d28968eSJerin Jacob 	uint8_t port_type;
1406d28968eSJerin Jacob 	struct {
1416d28968eSJerin Jacob 		uint32_t f_ip6_udp_opt:1;
1426d28968eSJerin Jacob 		uint32_t f_lenerr_en:1;
1436d28968eSJerin Jacob 		uint32_t f_maxerr_en:1;
1446d28968eSJerin Jacob 		uint32_t f_minerr_en:1;
1456d28968eSJerin Jacob 		uint32_t f_fcs_chk:1;
1466d28968eSJerin Jacob 		uint32_t f_fcs_strip:1;
1476d28968eSJerin Jacob 		uint32_t f_len_lf:1;
1486d28968eSJerin Jacob 		uint32_t f_len_le:1;
1496d28968eSJerin Jacob 		uint32_t f_len_ld:1;
1506d28968eSJerin Jacob 		uint32_t f_len_lc:1;
1516d28968eSJerin Jacob 		uint32_t f_csum_lf:1;
1526d28968eSJerin Jacob 		uint32_t f_csum_le:1;
1536d28968eSJerin Jacob 		uint32_t f_csum_ld:1;
1546d28968eSJerin Jacob 		uint32_t f_csum_lc:1;
1556d28968eSJerin Jacob 		uint32_t f_min_frame_len;
1566d28968eSJerin Jacob 		uint32_t f_max_frame_len;
1576d28968eSJerin Jacob 	} mmask;
1586d28968eSJerin Jacob 	uint64_t ip6_udp_opt:1;
1596d28968eSJerin Jacob 	uint64_t lenerr_en:1;
1606d28968eSJerin Jacob 	uint64_t maxerr_en:1;
1616d28968eSJerin Jacob 	uint64_t minerr_en:1;
1626d28968eSJerin Jacob 	uint64_t fcs_chk:1;
1636d28968eSJerin Jacob 	uint64_t fcs_strip:1;
1646d28968eSJerin Jacob 	uint64_t len_lf:1;
1656d28968eSJerin Jacob 	uint64_t len_le:1;
1666d28968eSJerin Jacob 	uint64_t len_ld:1;
1676d28968eSJerin Jacob 	uint64_t len_lc:1;
1686d28968eSJerin Jacob 	uint64_t csum_lf:1;
1696d28968eSJerin Jacob 	uint64_t csum_le:1;
1706d28968eSJerin Jacob 	uint64_t csum_ld:1;
1716d28968eSJerin Jacob 	uint64_t csum_lc:1;
1726d28968eSJerin Jacob 	uint64_t min_frame_len;
1736d28968eSJerin Jacob 	uint64_t max_frame_len;
1746d28968eSJerin Jacob } mbox_pki_errcheck_cfg_t;
1756d28968eSJerin Jacob 
1766d28968eSJerin Jacob /* CACHE MODE*/
1776d28968eSJerin Jacob enum {
1786d28968eSJerin Jacob 	MBOX_PKI_OPC_MODE_STT = 0LL,
1796d28968eSJerin Jacob 	MBOX_PKI_OPC_MODE_STF = 1LL,
1806d28968eSJerin Jacob 	MBOX_PKI_OPC_MODE_STF1_STT = 2LL,
1816d28968eSJerin Jacob 	MBOX_PKI_OPC_MODE_STF2_STT = 3LL
1826d28968eSJerin Jacob };
1836d28968eSJerin Jacob 
1846d28968eSJerin Jacob /* PKI QPG QOS*/
1856d28968eSJerin Jacob enum {
1866d28968eSJerin Jacob 	MBOX_PKI_QPG_QOS_NONE = 0,
1876d28968eSJerin Jacob 	MBOX_PKI_QPG_QOS_VLAN,
1886d28968eSJerin Jacob 	MBOX_PKI_QPG_QOS_MPLS,
1896d28968eSJerin Jacob 	MBOX_PKI_QPG_QOS_DSA_SRC,
1906d28968eSJerin Jacob 	MBOX_PKI_QPG_QOS_DIFFSERV,
1916d28968eSJerin Jacob 	MBOX_PKI_QPG_QOS_HIGIG,
1926d28968eSJerin Jacob };
1936d28968eSJerin Jacob 
1946d28968eSJerin Jacob struct mbox_pki_qos_entry {
1956d28968eSJerin Jacob 	uint16_t port_add;
1966d28968eSJerin Jacob 	uint16_t ggrp_ok;
1976d28968eSJerin Jacob 	uint16_t ggrp_bad;
1986d28968eSJerin Jacob 	uint16_t gaura;
1996d28968eSJerin Jacob 	uint8_t grptag_ok;
2006d28968eSJerin Jacob 	uint8_t grptag_bad;
201b4134b2dSPavan Nikhilesh 	uint8_t ena_red;
202b4134b2dSPavan Nikhilesh 	uint8_t ena_drop;
203b4134b2dSPavan Nikhilesh 	uint8_t tag_type;
2046d28968eSJerin Jacob };
2056d28968eSJerin Jacob 
2066d28968eSJerin Jacob /* pki flow/style enable qos */
2076d28968eSJerin Jacob typedef struct mbox_pki_port_create_qos {
2086d28968eSJerin Jacob 	uint8_t port_type;
2096d28968eSJerin Jacob 	uint8_t qpg_qos;
2106d28968eSJerin Jacob 	uint8_t num_entry;
2116d28968eSJerin Jacob 	uint8_t tag_type;
2126d28968eSJerin Jacob 	uint8_t drop_policy;
2136d28968eSJerin Jacob 	struct mbox_pki_qos_entry qos_entry[MBOX_PKI_MAX_QOS_ENTRY];
2146d28968eSJerin Jacob } mbox_pki_qos_cfg_t;
2156d28968eSJerin Jacob 
216b4134b2dSPavan Nikhilesh /* pki flow/style modify qos */
2176d28968eSJerin Jacob typedef struct mbox_pki_port_modify_qos_entry {
2186d28968eSJerin Jacob 	uint8_t port_type;
2196d28968eSJerin Jacob 	uint16_t index;
2206d28968eSJerin Jacob 	struct {
2216d28968eSJerin Jacob 		uint8_t f_port_add:1;
2226d28968eSJerin Jacob 		uint8_t f_grp_ok:1;
2236d28968eSJerin Jacob 		uint8_t f_grp_bad:1;
2246d28968eSJerin Jacob 		uint8_t f_gaura:1;
2256d28968eSJerin Jacob 		uint8_t f_grptag_ok:1;
2266d28968eSJerin Jacob 		uint8_t f_grptag_bad:1;
227d0d65498SPavan Nikhilesh 		uint8_t f_tag_type:1;
2286d28968eSJerin Jacob 	} mmask;
2296d28968eSJerin Jacob 	struct mbox_pki_qos_entry qos_entry;
2306d28968eSJerin Jacob } mbox_pki_mod_qos_t;
2316d28968eSJerin Jacob 
232b4134b2dSPavan Nikhilesh /* pki flow/style delete qos */
233d0d65498SPavan Nikhilesh typedef struct mbox_pki_port_delete_qos_entry {
234d0d65498SPavan Nikhilesh 	uint8_t port_type;
235d0d65498SPavan Nikhilesh 	uint16_t index;
236d0d65498SPavan Nikhilesh } mbox_pki_del_qos_t;
237d0d65498SPavan Nikhilesh 
2386d28968eSJerin Jacob /* pki pkind parse mode */
2396d28968eSJerin Jacob enum  {
2406d28968eSJerin Jacob 	PKI_PARSE_LA_TO_LG = 0,
2416d28968eSJerin Jacob 	PKI_PARSE_LB_TO_LG = 1,
2426d28968eSJerin Jacob 	PKI_PARSE_LC_TO_LG = 3,
2436d28968eSJerin Jacob 	PKI_PARSE_LG = 0x3f,
2446d28968eSJerin Jacob 	PKI_PARSE_NOTHING = 0x7f
2456d28968eSJerin Jacob };
2466d28968eSJerin Jacob 
2476d28968eSJerin Jacob /* pki port config */
2486d28968eSJerin Jacob typedef struct pki_port_cfg {
2496d28968eSJerin Jacob 	uint8_t port_type;
2506d28968eSJerin Jacob 	struct {
2516d28968eSJerin Jacob 		uint8_t fcs_pres:1;
2526d28968eSJerin Jacob 		uint8_t fcs_skip:1;
2536d28968eSJerin Jacob 		uint8_t parse_mode:1;
2546d28968eSJerin Jacob 		uint8_t mpls_parse:1;
2556d28968eSJerin Jacob 		uint8_t inst_hdr_parse:1;
2566d28968eSJerin Jacob 		uint8_t fulc_parse:1;
2576d28968eSJerin Jacob 		uint8_t dsa_parse:1;
2586d28968eSJerin Jacob 		uint8_t hg2_parse:1;
2596d28968eSJerin Jacob 		uint8_t hg_parse:1;
2606d28968eSJerin Jacob 	} mmask;
2616d28968eSJerin Jacob 	uint8_t fcs_pres;
2626d28968eSJerin Jacob 	uint8_t fcs_skip;
2636d28968eSJerin Jacob 	uint8_t parse_mode;
2646d28968eSJerin Jacob 	uint8_t mpls_parse;
2656d28968eSJerin Jacob 	uint8_t inst_hdr_parse;
2666d28968eSJerin Jacob 	uint8_t fulc_parse;
2676d28968eSJerin Jacob 	uint8_t dsa_parse;
2686d28968eSJerin Jacob 	uint8_t hg2_parse;
2696d28968eSJerin Jacob 	uint8_t hg_parse;
2706d28968eSJerin Jacob } pki_prt_cfg_t;
2716d28968eSJerin Jacob 
2726d28968eSJerin Jacob 
2736d28968eSJerin Jacob /* pki Flow/style packet buffer config */
2746d28968eSJerin Jacob typedef struct pki_port_pktbuf_cfg {
2756d28968eSJerin Jacob 	uint8_t port_type;
2766d28968eSJerin Jacob 	struct {
2776d28968eSJerin Jacob 		uint16_t f_mbuff_size:1;
2786d28968eSJerin Jacob 		uint16_t f_wqe_skip:1;
2796d28968eSJerin Jacob 		uint16_t f_first_skip:1;
2806d28968eSJerin Jacob 		uint16_t f_later_skip:1;
2816d28968eSJerin Jacob 		uint16_t f_pkt_outside_wqe:1;
2826d28968eSJerin Jacob 		uint16_t f_wqe_endian:1;
2836d28968eSJerin Jacob 		uint16_t f_cache_mode:1;
2846d28968eSJerin Jacob 	} mmask;
2856d28968eSJerin Jacob 	uint16_t mbuff_size;
2866d28968eSJerin Jacob 	uint16_t wqe_skip;
2876d28968eSJerin Jacob 	uint16_t first_skip;
2886d28968eSJerin Jacob 	uint16_t later_skip;
2896d28968eSJerin Jacob 	uint8_t pkt_outside_wqe;
2906d28968eSJerin Jacob 	uint8_t wqe_endian;
2916d28968eSJerin Jacob 	uint8_t cache_mode;
2926d28968eSJerin Jacob } pki_pktbuf_cfg_t;
2936d28968eSJerin Jacob 
2946d28968eSJerin Jacob /* pki flow/style tag config */
2956d28968eSJerin Jacob typedef struct pki_port_hash_cfg {
2966d28968eSJerin Jacob 	uint8_t port_type;
2976d28968eSJerin Jacob 	uint32_t tag_slf:1;
2986d28968eSJerin Jacob 	uint32_t tag_sle:1;
2996d28968eSJerin Jacob 	uint32_t tag_sld:1;
3006d28968eSJerin Jacob 	uint32_t tag_slc:1;
3016d28968eSJerin Jacob 	uint32_t tag_dlf:1;
3026d28968eSJerin Jacob 	uint32_t tag_dle:1;
3036d28968eSJerin Jacob 	uint32_t tag_dld:1;
3046d28968eSJerin Jacob 	uint32_t tag_dlc:1;
3056d28968eSJerin Jacob 	uint32_t tag_prt:1;
3066d28968eSJerin Jacob 	uint32_t tag_vlan0:1;
3076d28968eSJerin Jacob 	uint32_t tag_vlan1:1;
3086d28968eSJerin Jacob 	uint32_t tag_ip_pctl:1;
3096d28968eSJerin Jacob 	uint32_t tag_sync:1;
3106d28968eSJerin Jacob 	uint32_t tag_spi:1;
3116d28968eSJerin Jacob 	uint32_t tag_gtp:1;
3126d28968eSJerin Jacob 	uint32_t tag_vni:1;
3136d28968eSJerin Jacob } pki_hash_cfg_t;
3146d28968eSJerin Jacob 
3156d28968eSJerin Jacob /* pki flow/style errcheck config */
3166d28968eSJerin Jacob typedef struct pki_port_errcheck_cfg {
3176d28968eSJerin Jacob 	uint8_t port_type;
3186d28968eSJerin Jacob 	struct {
3196d28968eSJerin Jacob 		uint32_t f_ip6_udp_opt:1;
3206d28968eSJerin Jacob 		uint32_t f_lenerr_en:1;
3216d28968eSJerin Jacob 		uint32_t f_maxerr_en:1;
3226d28968eSJerin Jacob 		uint32_t f_minerr_en:1;
3236d28968eSJerin Jacob 		uint32_t f_fcs_chk:1;
3246d28968eSJerin Jacob 		uint32_t f_fcs_strip:1;
3256d28968eSJerin Jacob 		uint32_t f_len_lf:1;
3266d28968eSJerin Jacob 		uint32_t f_len_le:1;
3276d28968eSJerin Jacob 		uint32_t f_len_ld:1;
3286d28968eSJerin Jacob 		uint32_t f_len_lc:1;
3296d28968eSJerin Jacob 		uint32_t f_csum_lf:1;
3306d28968eSJerin Jacob 		uint32_t f_csum_le:1;
3316d28968eSJerin Jacob 		uint32_t f_csum_ld:1;
3326d28968eSJerin Jacob 		uint32_t f_csum_lc:1;
3336d28968eSJerin Jacob 		uint32_t f_min_frame_len;
3346d28968eSJerin Jacob 		uint32_t f_max_frame_len;
3356d28968eSJerin Jacob 	} mmask;
3366d28968eSJerin Jacob 	uint64_t ip6_udp_opt:1;
3376d28968eSJerin Jacob 	uint64_t lenerr_en:1;
3386d28968eSJerin Jacob 	uint64_t maxerr_en:1;
3396d28968eSJerin Jacob 	uint64_t minerr_en:1;
3406d28968eSJerin Jacob 	uint64_t fcs_chk:1;
3416d28968eSJerin Jacob 	uint64_t fcs_strip:1;
3426d28968eSJerin Jacob 	uint64_t len_lf:1;
3436d28968eSJerin Jacob 	uint64_t len_le:1;
3446d28968eSJerin Jacob 	uint64_t len_ld:1;
3456d28968eSJerin Jacob 	uint64_t len_lc:1;
3466d28968eSJerin Jacob 	uint64_t csum_lf:1;
3476d28968eSJerin Jacob 	uint64_t csum_le:1;
3486d28968eSJerin Jacob 	uint64_t csum_ld:1;
3496d28968eSJerin Jacob 	uint64_t csum_lc:1;
3506d28968eSJerin Jacob 	uint64_t min_frame_len;
3516d28968eSJerin Jacob 	uint64_t max_frame_len;
3526d28968eSJerin Jacob } pki_errchk_cfg_t;
3536d28968eSJerin Jacob 
3546d28968eSJerin Jacob 
3556d28968eSJerin Jacob /* CACHE MODE*/
3566d28968eSJerin Jacob enum {
3576d28968eSJerin Jacob 	PKI_OPC_MODE_STT = 0LL,
3586d28968eSJerin Jacob 	PKI_OPC_MODE_STF = 1LL,
3596d28968eSJerin Jacob 	PKI_OPC_MODE_STF1_STT = 2LL,
3606d28968eSJerin Jacob 	PKI_OPC_MODE_STF2_STT = 3LL
3616d28968eSJerin Jacob };
3626d28968eSJerin Jacob 
3636d28968eSJerin Jacob /* PKI QPG QOS*/
3646d28968eSJerin Jacob enum {
3656d28968eSJerin Jacob 	PKI_QPG_QOS_NONE = 0,
3666d28968eSJerin Jacob 	PKI_QPG_QOS_VLAN,
3676d28968eSJerin Jacob 	PKI_QPG_QOS_MPLS,
3686d28968eSJerin Jacob 	PKI_QPG_QOS_DSA_SRC,
3696d28968eSJerin Jacob 	PKI_QPG_QOS_DIFFSERV,
3706d28968eSJerin Jacob 	PKI_QPG_QOS_HIGIG,
3716d28968eSJerin Jacob };
3726d28968eSJerin Jacob 
3736d28968eSJerin Jacob struct pki_qos_entry {
3746d28968eSJerin Jacob 	uint16_t port_add;
3756d28968eSJerin Jacob 	uint16_t ggrp_ok;
3766d28968eSJerin Jacob 	uint16_t ggrp_bad;
3776d28968eSJerin Jacob 	uint16_t gaura;
3786d28968eSJerin Jacob 	uint8_t grptag_ok;
3796d28968eSJerin Jacob 	uint8_t grptag_bad;
3806d28968eSJerin Jacob 	uint8_t ena_red;
3816d28968eSJerin Jacob 	uint8_t ena_drop;
382b4134b2dSPavan Nikhilesh 	uint8_t tag_type;
3836d28968eSJerin Jacob };
3846d28968eSJerin Jacob 
3856d28968eSJerin Jacob #define PKO_MAX_QOS_ENTRY 64
3866d28968eSJerin Jacob 
3876d28968eSJerin Jacob /* pki flow/style enable qos */
3886d28968eSJerin Jacob typedef struct pki_port_create_qos {
3896d28968eSJerin Jacob 	uint8_t port_type;
3906d28968eSJerin Jacob 	uint8_t qpg_qos;
3916d28968eSJerin Jacob 	uint8_t num_entry;
3926d28968eSJerin Jacob 	uint8_t tag_type;
3936d28968eSJerin Jacob 	uint8_t drop_policy;
3946d28968eSJerin Jacob 	struct pki_qos_entry qos_entry[PKO_MAX_QOS_ENTRY];
3956d28968eSJerin Jacob } pki_qos_cfg_t;
3966d28968eSJerin Jacob 
3976d28968eSJerin Jacob /* pki flow/style enable qos */
398d0d65498SPavan Nikhilesh typedef struct pki_port_delete_qos_entry {
399d0d65498SPavan Nikhilesh 	uint8_t port_type;
400d0d65498SPavan Nikhilesh 	uint16_t index;
401d0d65498SPavan Nikhilesh } pki_del_qos_t;
402d0d65498SPavan Nikhilesh 
403d0d65498SPavan Nikhilesh /* pki flow/style enable qos */
4046d28968eSJerin Jacob typedef struct pki_port_modify_qos_entry {
4056d28968eSJerin Jacob 	uint8_t port_type;
4066d28968eSJerin Jacob 	uint16_t index;
4076d28968eSJerin Jacob 	struct {
4086d28968eSJerin Jacob 		uint8_t f_port_add:1;
4096d28968eSJerin Jacob 		uint8_t f_grp_ok:1;
4106d28968eSJerin Jacob 		uint8_t f_grp_bad:1;
4116d28968eSJerin Jacob 		uint8_t f_gaura:1;
412d0d65498SPavan Nikhilesh 		uint8_t f_grptag_ok:1;
413d0d65498SPavan Nikhilesh 		uint8_t f_grptag_bad:1;
414d0d65498SPavan Nikhilesh 		uint8_t f_tag_type:1;
4156d28968eSJerin Jacob 	} mmask;
4166d28968eSJerin Jacob 	struct pki_qos_entry qos_entry;
4176d28968eSJerin Jacob } pki_mod_qos_t;
4186d28968eSJerin Jacob 
419d0d65498SPavan Nikhilesh static inline int
420d0d65498SPavan Nikhilesh octeontx_pki_port_modify_qos(int port, pki_mod_qos_t *qos_cfg)
421d0d65498SPavan Nikhilesh {
422d0d65498SPavan Nikhilesh 	struct octeontx_mbox_hdr hdr;
423d0d65498SPavan Nikhilesh 	int res;
424d0d65498SPavan Nikhilesh 
425d0d65498SPavan Nikhilesh 	mbox_pki_mod_qos_t q_cfg = *(mbox_pki_mod_qos_t *)qos_cfg;
426d0d65498SPavan Nikhilesh 	int len = sizeof(mbox_pki_mod_qos_t);
427d0d65498SPavan Nikhilesh 
428d0d65498SPavan Nikhilesh 	hdr.coproc = OCTEONTX_PKI_COPROC;
429d0d65498SPavan Nikhilesh 	hdr.msg = MBOX_PKI_PORT_MODIFY_QOS;
430d0d65498SPavan Nikhilesh 	hdr.vfid = port;
431d0d65498SPavan Nikhilesh 
432d8dd3165SPavan Nikhilesh 	res = octeontx_mbox_send(&hdr, &q_cfg, len, NULL, 0);
433d0d65498SPavan Nikhilesh 	if (res < 0)
434d0d65498SPavan Nikhilesh 		return -EACCES;
435d0d65498SPavan Nikhilesh 
436d0d65498SPavan Nikhilesh 	return res;
437d0d65498SPavan Nikhilesh }
438d0d65498SPavan Nikhilesh 
439d0d65498SPavan Nikhilesh static inline int
440d0d65498SPavan Nikhilesh octeontx_pki_port_delete_qos(int port, pki_del_qos_t *qos_cfg)
441d0d65498SPavan Nikhilesh {
442d0d65498SPavan Nikhilesh 	struct octeontx_mbox_hdr hdr;
443d0d65498SPavan Nikhilesh 	int res;
444d0d65498SPavan Nikhilesh 
445d0d65498SPavan Nikhilesh 	mbox_pki_del_qos_t q_cfg = *(mbox_pki_del_qos_t *)qos_cfg;
446d0d65498SPavan Nikhilesh 	int len = sizeof(mbox_pki_del_qos_t);
447d0d65498SPavan Nikhilesh 
448d0d65498SPavan Nikhilesh 	hdr.coproc = OCTEONTX_PKI_COPROC;
449d0d65498SPavan Nikhilesh 	hdr.msg = MBOX_PKI_PORT_DELETE_QOS;
450d0d65498SPavan Nikhilesh 	hdr.vfid = port;
451d0d65498SPavan Nikhilesh 
452d8dd3165SPavan Nikhilesh 	res = octeontx_mbox_send(&hdr, &q_cfg, len, NULL, 0);
453d0d65498SPavan Nikhilesh 	if (res < 0)
454d0d65498SPavan Nikhilesh 		return -EACCES;
455d0d65498SPavan Nikhilesh 
456d0d65498SPavan Nikhilesh 	return res;
457d0d65498SPavan Nikhilesh }
458d0d65498SPavan Nikhilesh 
459d0d65498SPavan Nikhilesh static inline int
460d0d65498SPavan Nikhilesh octeontx_pki_port_close(int port)
461d0d65498SPavan Nikhilesh {
462d0d65498SPavan Nikhilesh 	struct octeontx_mbox_hdr hdr;
463d0d65498SPavan Nikhilesh 	int res;
464d0d65498SPavan Nikhilesh 
465d0d65498SPavan Nikhilesh 	mbox_pki_port_t ptype;
466d0d65498SPavan Nikhilesh 	int len = sizeof(mbox_pki_port_t);
467d0d65498SPavan Nikhilesh 	memset(&ptype, 0, len);
468d0d65498SPavan Nikhilesh 	ptype.port_type = OCTTX_PORT_TYPE_NET;
469d0d65498SPavan Nikhilesh 
470d0d65498SPavan Nikhilesh 	hdr.coproc = OCTEONTX_PKI_COPROC;
471d0d65498SPavan Nikhilesh 	hdr.msg = MBOX_PKI_PORT_CLOSE;
472d0d65498SPavan Nikhilesh 	hdr.vfid = port;
473d0d65498SPavan Nikhilesh 
474d8dd3165SPavan Nikhilesh 	res = octeontx_mbox_send(&hdr, &ptype, len, NULL, 0);
475d0d65498SPavan Nikhilesh 	if (res < 0)
476d0d65498SPavan Nikhilesh 		return -EACCES;
477d0d65498SPavan Nikhilesh 
478d0d65498SPavan Nikhilesh 	return res;
479d0d65498SPavan Nikhilesh }
480d0d65498SPavan Nikhilesh 
481d0d65498SPavan Nikhilesh static inline int
482d0d65498SPavan Nikhilesh octeontx_pki_port_start(int port)
483d0d65498SPavan Nikhilesh {
484d0d65498SPavan Nikhilesh 	struct octeontx_mbox_hdr hdr;
485d0d65498SPavan Nikhilesh 	int res;
486d0d65498SPavan Nikhilesh 
487d0d65498SPavan Nikhilesh 	mbox_pki_port_t ptype;
488d0d65498SPavan Nikhilesh 	int len = sizeof(mbox_pki_port_t);
489d0d65498SPavan Nikhilesh 	memset(&ptype, 0, len);
490d0d65498SPavan Nikhilesh 	ptype.port_type = OCTTX_PORT_TYPE_NET;
491d0d65498SPavan Nikhilesh 
492d0d65498SPavan Nikhilesh 	hdr.coproc = OCTEONTX_PKI_COPROC;
493d0d65498SPavan Nikhilesh 	hdr.msg = MBOX_PKI_PORT_START;
494d0d65498SPavan Nikhilesh 	hdr.vfid = port;
495d0d65498SPavan Nikhilesh 
496d8dd3165SPavan Nikhilesh 	res = octeontx_mbox_send(&hdr, &ptype, len, NULL, 0);
497d0d65498SPavan Nikhilesh 	if (res < 0)
498d0d65498SPavan Nikhilesh 		return -EACCES;
499d0d65498SPavan Nikhilesh 
500d0d65498SPavan Nikhilesh 	return res;
501d0d65498SPavan Nikhilesh }
502d0d65498SPavan Nikhilesh 
503d0d65498SPavan Nikhilesh static inline int
504d0d65498SPavan Nikhilesh octeontx_pki_port_stop(int port)
505d0d65498SPavan Nikhilesh {
506d0d65498SPavan Nikhilesh 	struct octeontx_mbox_hdr hdr;
507d0d65498SPavan Nikhilesh 	int res;
508d0d65498SPavan Nikhilesh 
509d0d65498SPavan Nikhilesh 	mbox_pki_port_t ptype;
510d0d65498SPavan Nikhilesh 	int len = sizeof(mbox_pki_port_t);
511d0d65498SPavan Nikhilesh 	memset(&ptype, 0, len);
512d0d65498SPavan Nikhilesh 	ptype.port_type = OCTTX_PORT_TYPE_NET;
513d0d65498SPavan Nikhilesh 
514d0d65498SPavan Nikhilesh 	hdr.coproc = OCTEONTX_PKI_COPROC;
515d0d65498SPavan Nikhilesh 	hdr.msg = MBOX_PKI_PORT_STOP;
516d0d65498SPavan Nikhilesh 	hdr.vfid = port;
517d0d65498SPavan Nikhilesh 
518d8dd3165SPavan Nikhilesh 	res = octeontx_mbox_send(&hdr, &ptype, len, NULL, 0);
519d0d65498SPavan Nikhilesh 	if (res < 0)
520d0d65498SPavan Nikhilesh 		return -EACCES;
521d0d65498SPavan Nikhilesh 
522d0d65498SPavan Nikhilesh 	return res;
523d0d65498SPavan Nikhilesh }
524d0d65498SPavan Nikhilesh 
525b95c3413SJerin Jacob int octeontx_pki_port_open(int port);
5266d28968eSJerin Jacob int octeontx_pki_port_hash_config(int port, pki_hash_cfg_t *hash_cfg);
5276d28968eSJerin Jacob int octeontx_pki_port_pktbuf_config(int port, pki_pktbuf_cfg_t *buf_cfg);
5286d28968eSJerin Jacob int octeontx_pki_port_create_qos(int port, pki_qos_cfg_t *qos_cfg);
529b95c3413SJerin Jacob int octeontx_pki_port_close(int port);
5306d28968eSJerin Jacob int octeontx_pki_port_errchk_config(int port, pki_errchk_cfg_t *cfg);
531b95c3413SJerin Jacob 
532b95c3413SJerin Jacob #endif /* __OCTEONTX_PKI_H__ */
533