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