1*aaf4363eSJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause 2*aaf4363eSJerin 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 366d28968eSJerin Jacob 376d28968eSJerin Jacob #define MBOX_PKI_MAX_QOS_ENTRY 64 386d28968eSJerin Jacob 396d28968eSJerin Jacob /* pki pkind parse mode */ 406d28968eSJerin Jacob enum { 416d28968eSJerin Jacob MBOX_PKI_PARSE_LA_TO_LG = 0, 426d28968eSJerin Jacob MBOX_PKI_PARSE_LB_TO_LG = 1, 436d28968eSJerin Jacob MBOX_PKI_PARSE_LC_TO_LG = 3, 446d28968eSJerin Jacob MBOX_PKI_PARSE_LG = 0x3f, 456d28968eSJerin Jacob MBOX_PKI_PARSE_NOTHING = 0x7f 466d28968eSJerin Jacob }; 47b95c3413SJerin Jacob 48b95c3413SJerin Jacob /* Interface types: */ 49b95c3413SJerin Jacob enum { 50b95c3413SJerin Jacob OCTTX_PORT_TYPE_NET, /* Network interface ports */ 51b95c3413SJerin Jacob OCTTX_PORT_TYPE_INT, /* CPU internal interface ports */ 52b95c3413SJerin Jacob OCTTX_PORT_TYPE_PCI, /* DPI/PCIe interface ports */ 53b95c3413SJerin Jacob OCTTX_PORT_TYPE_MAX 54b95c3413SJerin Jacob }; 55b95c3413SJerin Jacob 56b95c3413SJerin Jacob /* pki port config */ 57b95c3413SJerin Jacob typedef struct mbox_pki_port_type { 58b95c3413SJerin Jacob uint8_t port_type; 59b95c3413SJerin Jacob } mbox_pki_port_t; 60b95c3413SJerin Jacob 616d28968eSJerin Jacob /* pki port config */ 626d28968eSJerin Jacob typedef struct mbox_pki_port_cfg { 636d28968eSJerin Jacob uint8_t port_type; 646d28968eSJerin Jacob struct { 656d28968eSJerin Jacob uint8_t fcs_pres:1; 666d28968eSJerin Jacob uint8_t fcs_skip:1; 676d28968eSJerin Jacob uint8_t parse_mode:1; 686d28968eSJerin Jacob uint8_t mpls_parse:1; 696d28968eSJerin Jacob uint8_t inst_hdr_parse:1; 706d28968eSJerin Jacob uint8_t fulc_parse:1; 716d28968eSJerin Jacob uint8_t dsa_parse:1; 726d28968eSJerin Jacob uint8_t hg2_parse:1; 736d28968eSJerin Jacob uint8_t hg_parse:1; 746d28968eSJerin Jacob } mmask; 756d28968eSJerin Jacob uint8_t fcs_pres; 766d28968eSJerin Jacob uint8_t fcs_skip; 776d28968eSJerin Jacob uint8_t parse_mode; 786d28968eSJerin Jacob uint8_t mpls_parse; 796d28968eSJerin Jacob uint8_t inst_hdr_parse; 806d28968eSJerin Jacob uint8_t fulc_parse; 816d28968eSJerin Jacob uint8_t dsa_parse; 826d28968eSJerin Jacob uint8_t hg2_parse; 836d28968eSJerin Jacob uint8_t hg_parse; 846d28968eSJerin Jacob } mbox_pki_prt_cfg_t; 856d28968eSJerin Jacob 866d28968eSJerin Jacob /* pki Flow/style packet buffer config */ 876d28968eSJerin Jacob typedef struct mbox_pki_port_pktbuf_cfg { 886d28968eSJerin Jacob uint8_t port_type; 896d28968eSJerin Jacob struct { 906d28968eSJerin Jacob uint16_t f_mbuff_size:1; 916d28968eSJerin Jacob uint16_t f_wqe_skip:1; 926d28968eSJerin Jacob uint16_t f_first_skip:1; 936d28968eSJerin Jacob uint16_t f_later_skip:1; 946d28968eSJerin Jacob uint16_t f_pkt_outside_wqe:1; 956d28968eSJerin Jacob uint16_t f_wqe_endian:1; 966d28968eSJerin Jacob uint16_t f_cache_mode:1; 976d28968eSJerin Jacob } mmask; 986d28968eSJerin Jacob uint16_t mbuff_size; 996d28968eSJerin Jacob uint16_t wqe_skip; 1006d28968eSJerin Jacob uint16_t first_skip; 1016d28968eSJerin Jacob uint16_t later_skip; 1026d28968eSJerin Jacob uint8_t pkt_outside_wqe; 1036d28968eSJerin Jacob uint8_t wqe_endian; 1046d28968eSJerin Jacob uint8_t cache_mode; 1056d28968eSJerin Jacob } mbox_pki_pktbuf_cfg_t; 1066d28968eSJerin Jacob 1076d28968eSJerin Jacob /* pki flow/style tag config */ 1086d28968eSJerin Jacob typedef struct mbox_pki_port_hash_cfg { 1096d28968eSJerin Jacob uint8_t port_type; 1106d28968eSJerin Jacob uint32_t tag_slf:1; 1116d28968eSJerin Jacob uint32_t tag_sle:1; 1126d28968eSJerin Jacob uint32_t tag_sld:1; 1136d28968eSJerin Jacob uint32_t tag_slc:1; 1146d28968eSJerin Jacob uint32_t tag_dlf:1; 1156d28968eSJerin Jacob uint32_t tag_dle:1; 1166d28968eSJerin Jacob uint32_t tag_dld:1; 1176d28968eSJerin Jacob uint32_t tag_dlc:1; 1186d28968eSJerin Jacob uint32_t tag_prt:1; 1196d28968eSJerin Jacob uint32_t tag_vlan0:1; 1206d28968eSJerin Jacob uint32_t tag_vlan1:1; 1216d28968eSJerin Jacob uint32_t tag_ip_pctl:1; 1226d28968eSJerin Jacob uint32_t tag_sync:1; 1236d28968eSJerin Jacob uint32_t tag_spi:1; 1246d28968eSJerin Jacob uint32_t tag_gtp:1; 1256d28968eSJerin Jacob uint32_t tag_vni:1; 1266d28968eSJerin Jacob } mbox_pki_hash_cfg_t; 1276d28968eSJerin Jacob 1286d28968eSJerin Jacob /* pki flow/style errcheck config */ 1296d28968eSJerin Jacob typedef struct mbox_pki_port_errcheck_cfg { 1306d28968eSJerin Jacob uint8_t port_type; 1316d28968eSJerin Jacob struct { 1326d28968eSJerin Jacob uint32_t f_ip6_udp_opt:1; 1336d28968eSJerin Jacob uint32_t f_lenerr_en:1; 1346d28968eSJerin Jacob uint32_t f_maxerr_en:1; 1356d28968eSJerin Jacob uint32_t f_minerr_en:1; 1366d28968eSJerin Jacob uint32_t f_fcs_chk:1; 1376d28968eSJerin Jacob uint32_t f_fcs_strip:1; 1386d28968eSJerin Jacob uint32_t f_len_lf:1; 1396d28968eSJerin Jacob uint32_t f_len_le:1; 1406d28968eSJerin Jacob uint32_t f_len_ld:1; 1416d28968eSJerin Jacob uint32_t f_len_lc:1; 1426d28968eSJerin Jacob uint32_t f_csum_lf:1; 1436d28968eSJerin Jacob uint32_t f_csum_le:1; 1446d28968eSJerin Jacob uint32_t f_csum_ld:1; 1456d28968eSJerin Jacob uint32_t f_csum_lc:1; 1466d28968eSJerin Jacob uint32_t f_min_frame_len; 1476d28968eSJerin Jacob uint32_t f_max_frame_len; 1486d28968eSJerin Jacob } mmask; 1496d28968eSJerin Jacob uint64_t ip6_udp_opt:1; 1506d28968eSJerin Jacob uint64_t lenerr_en:1; 1516d28968eSJerin Jacob uint64_t maxerr_en:1; 1526d28968eSJerin Jacob uint64_t minerr_en:1; 1536d28968eSJerin Jacob uint64_t fcs_chk:1; 1546d28968eSJerin Jacob uint64_t fcs_strip:1; 1556d28968eSJerin Jacob uint64_t len_lf:1; 1566d28968eSJerin Jacob uint64_t len_le:1; 1576d28968eSJerin Jacob uint64_t len_ld:1; 1586d28968eSJerin Jacob uint64_t len_lc:1; 1596d28968eSJerin Jacob uint64_t csum_lf:1; 1606d28968eSJerin Jacob uint64_t csum_le:1; 1616d28968eSJerin Jacob uint64_t csum_ld:1; 1626d28968eSJerin Jacob uint64_t csum_lc:1; 1636d28968eSJerin Jacob uint64_t min_frame_len; 1646d28968eSJerin Jacob uint64_t max_frame_len; 1656d28968eSJerin Jacob } mbox_pki_errcheck_cfg_t; 1666d28968eSJerin Jacob 1676d28968eSJerin Jacob /* CACHE MODE*/ 1686d28968eSJerin Jacob enum { 1696d28968eSJerin Jacob MBOX_PKI_OPC_MODE_STT = 0LL, 1706d28968eSJerin Jacob MBOX_PKI_OPC_MODE_STF = 1LL, 1716d28968eSJerin Jacob MBOX_PKI_OPC_MODE_STF1_STT = 2LL, 1726d28968eSJerin Jacob MBOX_PKI_OPC_MODE_STF2_STT = 3LL 1736d28968eSJerin Jacob }; 1746d28968eSJerin Jacob 1756d28968eSJerin Jacob /* PKI QPG QOS*/ 1766d28968eSJerin Jacob enum { 1776d28968eSJerin Jacob MBOX_PKI_QPG_QOS_NONE = 0, 1786d28968eSJerin Jacob MBOX_PKI_QPG_QOS_VLAN, 1796d28968eSJerin Jacob MBOX_PKI_QPG_QOS_MPLS, 1806d28968eSJerin Jacob MBOX_PKI_QPG_QOS_DSA_SRC, 1816d28968eSJerin Jacob MBOX_PKI_QPG_QOS_DIFFSERV, 1826d28968eSJerin Jacob MBOX_PKI_QPG_QOS_HIGIG, 1836d28968eSJerin Jacob }; 1846d28968eSJerin Jacob 1856d28968eSJerin Jacob struct mbox_pki_qos_entry { 1866d28968eSJerin Jacob uint16_t port_add; 1876d28968eSJerin Jacob uint16_t ggrp_ok; 1886d28968eSJerin Jacob uint16_t ggrp_bad; 1896d28968eSJerin Jacob uint16_t gaura; 1906d28968eSJerin Jacob uint8_t grptag_ok; 1916d28968eSJerin Jacob uint8_t grptag_bad; 1926d28968eSJerin Jacob }; 1936d28968eSJerin Jacob 1946d28968eSJerin Jacob /* pki flow/style enable qos */ 1956d28968eSJerin Jacob typedef struct mbox_pki_port_create_qos { 1966d28968eSJerin Jacob uint8_t port_type; 1976d28968eSJerin Jacob uint8_t qpg_qos; 1986d28968eSJerin Jacob uint8_t num_entry; 1996d28968eSJerin Jacob uint8_t tag_type; 2006d28968eSJerin Jacob uint8_t drop_policy; 2016d28968eSJerin Jacob struct mbox_pki_qos_entry qos_entry[MBOX_PKI_MAX_QOS_ENTRY]; 2026d28968eSJerin Jacob } mbox_pki_qos_cfg_t; 2036d28968eSJerin Jacob 2046d28968eSJerin Jacob /* pki flow/style enable qos */ 2056d28968eSJerin Jacob typedef struct mbox_pki_port_modify_qos_entry { 2066d28968eSJerin Jacob uint8_t port_type; 2076d28968eSJerin Jacob uint16_t index; 2086d28968eSJerin Jacob struct { 2096d28968eSJerin Jacob uint8_t f_port_add:1; 2106d28968eSJerin Jacob uint8_t f_grp_ok:1; 2116d28968eSJerin Jacob uint8_t f_grp_bad:1; 2126d28968eSJerin Jacob uint8_t f_gaura:1; 2136d28968eSJerin Jacob uint8_t f_grptag_ok:1; 2146d28968eSJerin Jacob uint8_t f_grptag_bad:1; 215d0d65498SPavan Nikhilesh uint8_t f_tag_type:1; 2166d28968eSJerin Jacob } mmask; 217d0d65498SPavan Nikhilesh uint8_t tag_type; 2186d28968eSJerin Jacob struct mbox_pki_qos_entry qos_entry; 2196d28968eSJerin Jacob } mbox_pki_mod_qos_t; 2206d28968eSJerin Jacob 221d0d65498SPavan Nikhilesh /* pki flow/style enable qos */ 222d0d65498SPavan Nikhilesh typedef struct mbox_pki_port_delete_qos_entry { 223d0d65498SPavan Nikhilesh uint8_t port_type; 224d0d65498SPavan Nikhilesh uint16_t index; 225d0d65498SPavan Nikhilesh } mbox_pki_del_qos_t; 226d0d65498SPavan Nikhilesh 2276d28968eSJerin Jacob /* PKI maximum constants */ 2286d28968eSJerin Jacob #define PKI_VF_MAX (1) 2296d28968eSJerin Jacob #define PKI_MAX_PKTLEN (32768) 2306d28968eSJerin Jacob 2316d28968eSJerin Jacob /* pki pkind parse mode */ 2326d28968eSJerin Jacob enum { 2336d28968eSJerin Jacob PKI_PARSE_LA_TO_LG = 0, 2346d28968eSJerin Jacob PKI_PARSE_LB_TO_LG = 1, 2356d28968eSJerin Jacob PKI_PARSE_LC_TO_LG = 3, 2366d28968eSJerin Jacob PKI_PARSE_LG = 0x3f, 2376d28968eSJerin Jacob PKI_PARSE_NOTHING = 0x7f 2386d28968eSJerin Jacob }; 2396d28968eSJerin Jacob 2406d28968eSJerin Jacob /* pki port config */ 2416d28968eSJerin Jacob typedef struct pki_port_cfg { 2426d28968eSJerin Jacob uint8_t port_type; 2436d28968eSJerin Jacob struct { 2446d28968eSJerin Jacob uint8_t fcs_pres:1; 2456d28968eSJerin Jacob uint8_t fcs_skip:1; 2466d28968eSJerin Jacob uint8_t parse_mode:1; 2476d28968eSJerin Jacob uint8_t mpls_parse:1; 2486d28968eSJerin Jacob uint8_t inst_hdr_parse:1; 2496d28968eSJerin Jacob uint8_t fulc_parse:1; 2506d28968eSJerin Jacob uint8_t dsa_parse:1; 2516d28968eSJerin Jacob uint8_t hg2_parse:1; 2526d28968eSJerin Jacob uint8_t hg_parse:1; 2536d28968eSJerin Jacob } mmask; 2546d28968eSJerin Jacob uint8_t fcs_pres; 2556d28968eSJerin Jacob uint8_t fcs_skip; 2566d28968eSJerin Jacob uint8_t parse_mode; 2576d28968eSJerin Jacob uint8_t mpls_parse; 2586d28968eSJerin Jacob uint8_t inst_hdr_parse; 2596d28968eSJerin Jacob uint8_t fulc_parse; 2606d28968eSJerin Jacob uint8_t dsa_parse; 2616d28968eSJerin Jacob uint8_t hg2_parse; 2626d28968eSJerin Jacob uint8_t hg_parse; 2636d28968eSJerin Jacob } pki_prt_cfg_t; 2646d28968eSJerin Jacob 2656d28968eSJerin Jacob 2666d28968eSJerin Jacob /* pki Flow/style packet buffer config */ 2676d28968eSJerin Jacob typedef struct pki_port_pktbuf_cfg { 2686d28968eSJerin Jacob uint8_t port_type; 2696d28968eSJerin Jacob struct { 2706d28968eSJerin Jacob uint16_t f_mbuff_size:1; 2716d28968eSJerin Jacob uint16_t f_wqe_skip:1; 2726d28968eSJerin Jacob uint16_t f_first_skip:1; 2736d28968eSJerin Jacob uint16_t f_later_skip:1; 2746d28968eSJerin Jacob uint16_t f_pkt_outside_wqe:1; 2756d28968eSJerin Jacob uint16_t f_wqe_endian:1; 2766d28968eSJerin Jacob uint16_t f_cache_mode:1; 2776d28968eSJerin Jacob } mmask; 2786d28968eSJerin Jacob uint16_t mbuff_size; 2796d28968eSJerin Jacob uint16_t wqe_skip; 2806d28968eSJerin Jacob uint16_t first_skip; 2816d28968eSJerin Jacob uint16_t later_skip; 2826d28968eSJerin Jacob uint8_t pkt_outside_wqe; 2836d28968eSJerin Jacob uint8_t wqe_endian; 2846d28968eSJerin Jacob uint8_t cache_mode; 2856d28968eSJerin Jacob } pki_pktbuf_cfg_t; 2866d28968eSJerin Jacob 2876d28968eSJerin Jacob /* pki flow/style tag config */ 2886d28968eSJerin Jacob typedef struct pki_port_hash_cfg { 2896d28968eSJerin Jacob uint8_t port_type; 2906d28968eSJerin Jacob uint32_t tag_slf:1; 2916d28968eSJerin Jacob uint32_t tag_sle:1; 2926d28968eSJerin Jacob uint32_t tag_sld:1; 2936d28968eSJerin Jacob uint32_t tag_slc:1; 2946d28968eSJerin Jacob uint32_t tag_dlf:1; 2956d28968eSJerin Jacob uint32_t tag_dle:1; 2966d28968eSJerin Jacob uint32_t tag_dld:1; 2976d28968eSJerin Jacob uint32_t tag_dlc:1; 2986d28968eSJerin Jacob uint32_t tag_prt:1; 2996d28968eSJerin Jacob uint32_t tag_vlan0:1; 3006d28968eSJerin Jacob uint32_t tag_vlan1:1; 3016d28968eSJerin Jacob uint32_t tag_ip_pctl:1; 3026d28968eSJerin Jacob uint32_t tag_sync:1; 3036d28968eSJerin Jacob uint32_t tag_spi:1; 3046d28968eSJerin Jacob uint32_t tag_gtp:1; 3056d28968eSJerin Jacob uint32_t tag_vni:1; 3066d28968eSJerin Jacob } pki_hash_cfg_t; 3076d28968eSJerin Jacob 3086d28968eSJerin Jacob /* pki flow/style errcheck config */ 3096d28968eSJerin Jacob typedef struct pki_port_errcheck_cfg { 3106d28968eSJerin Jacob uint8_t port_type; 3116d28968eSJerin Jacob struct { 3126d28968eSJerin Jacob uint32_t f_ip6_udp_opt:1; 3136d28968eSJerin Jacob uint32_t f_lenerr_en:1; 3146d28968eSJerin Jacob uint32_t f_maxerr_en:1; 3156d28968eSJerin Jacob uint32_t f_minerr_en:1; 3166d28968eSJerin Jacob uint32_t f_fcs_chk:1; 3176d28968eSJerin Jacob uint32_t f_fcs_strip:1; 3186d28968eSJerin Jacob uint32_t f_len_lf:1; 3196d28968eSJerin Jacob uint32_t f_len_le:1; 3206d28968eSJerin Jacob uint32_t f_len_ld:1; 3216d28968eSJerin Jacob uint32_t f_len_lc:1; 3226d28968eSJerin Jacob uint32_t f_csum_lf:1; 3236d28968eSJerin Jacob uint32_t f_csum_le:1; 3246d28968eSJerin Jacob uint32_t f_csum_ld:1; 3256d28968eSJerin Jacob uint32_t f_csum_lc:1; 3266d28968eSJerin Jacob uint32_t f_min_frame_len; 3276d28968eSJerin Jacob uint32_t f_max_frame_len; 3286d28968eSJerin Jacob } mmask; 3296d28968eSJerin Jacob uint64_t ip6_udp_opt:1; 3306d28968eSJerin Jacob uint64_t lenerr_en:1; 3316d28968eSJerin Jacob uint64_t maxerr_en:1; 3326d28968eSJerin Jacob uint64_t minerr_en:1; 3336d28968eSJerin Jacob uint64_t fcs_chk:1; 3346d28968eSJerin Jacob uint64_t fcs_strip:1; 3356d28968eSJerin Jacob uint64_t len_lf:1; 3366d28968eSJerin Jacob uint64_t len_le:1; 3376d28968eSJerin Jacob uint64_t len_ld:1; 3386d28968eSJerin Jacob uint64_t len_lc:1; 3396d28968eSJerin Jacob uint64_t csum_lf:1; 3406d28968eSJerin Jacob uint64_t csum_le:1; 3416d28968eSJerin Jacob uint64_t csum_ld:1; 3426d28968eSJerin Jacob uint64_t csum_lc:1; 3436d28968eSJerin Jacob uint64_t min_frame_len; 3446d28968eSJerin Jacob uint64_t max_frame_len; 3456d28968eSJerin Jacob } pki_errchk_cfg_t; 3466d28968eSJerin Jacob 3476d28968eSJerin Jacob 3486d28968eSJerin Jacob /* CACHE MODE*/ 3496d28968eSJerin Jacob enum { 3506d28968eSJerin Jacob PKI_OPC_MODE_STT = 0LL, 3516d28968eSJerin Jacob PKI_OPC_MODE_STF = 1LL, 3526d28968eSJerin Jacob PKI_OPC_MODE_STF1_STT = 2LL, 3536d28968eSJerin Jacob PKI_OPC_MODE_STF2_STT = 3LL 3546d28968eSJerin Jacob }; 3556d28968eSJerin Jacob 3566d28968eSJerin Jacob /* PKI QPG QOS*/ 3576d28968eSJerin Jacob enum { 3586d28968eSJerin Jacob PKI_QPG_QOS_NONE = 0, 3596d28968eSJerin Jacob PKI_QPG_QOS_VLAN, 3606d28968eSJerin Jacob PKI_QPG_QOS_MPLS, 3616d28968eSJerin Jacob PKI_QPG_QOS_DSA_SRC, 3626d28968eSJerin Jacob PKI_QPG_QOS_DIFFSERV, 3636d28968eSJerin Jacob PKI_QPG_QOS_HIGIG, 3646d28968eSJerin Jacob }; 3656d28968eSJerin Jacob 3666d28968eSJerin Jacob struct pki_qos_entry { 3676d28968eSJerin Jacob uint16_t port_add; 3686d28968eSJerin Jacob uint16_t ggrp_ok; 3696d28968eSJerin Jacob uint16_t ggrp_bad; 3706d28968eSJerin Jacob uint16_t gaura; 3716d28968eSJerin Jacob uint8_t grptag_ok; 3726d28968eSJerin Jacob uint8_t grptag_bad; 3736d28968eSJerin Jacob uint8_t ena_red; 3746d28968eSJerin Jacob uint8_t ena_drop; 3756d28968eSJerin Jacob }; 3766d28968eSJerin Jacob 3776d28968eSJerin Jacob #define PKO_MAX_QOS_ENTRY 64 3786d28968eSJerin Jacob 3796d28968eSJerin Jacob /* pki flow/style enable qos */ 3806d28968eSJerin Jacob typedef struct pki_port_create_qos { 3816d28968eSJerin Jacob uint8_t port_type; 3826d28968eSJerin Jacob uint8_t qpg_qos; 3836d28968eSJerin Jacob uint8_t num_entry; 3846d28968eSJerin Jacob uint8_t tag_type; 3856d28968eSJerin Jacob uint8_t drop_policy; 3866d28968eSJerin Jacob struct pki_qos_entry qos_entry[PKO_MAX_QOS_ENTRY]; 3876d28968eSJerin Jacob } pki_qos_cfg_t; 3886d28968eSJerin Jacob 3896d28968eSJerin Jacob /* pki flow/style enable qos */ 390d0d65498SPavan Nikhilesh typedef struct pki_port_delete_qos_entry { 391d0d65498SPavan Nikhilesh uint8_t port_type; 392d0d65498SPavan Nikhilesh uint16_t index; 393d0d65498SPavan Nikhilesh } pki_del_qos_t; 394d0d65498SPavan Nikhilesh 395d0d65498SPavan Nikhilesh /* pki flow/style enable qos */ 3966d28968eSJerin Jacob typedef struct pki_port_modify_qos_entry { 3976d28968eSJerin Jacob uint8_t port_type; 3986d28968eSJerin Jacob uint16_t index; 3996d28968eSJerin Jacob struct { 4006d28968eSJerin Jacob uint8_t f_port_add:1; 4016d28968eSJerin Jacob uint8_t f_grp_ok:1; 4026d28968eSJerin Jacob uint8_t f_grp_bad:1; 4036d28968eSJerin Jacob uint8_t f_gaura:1; 404d0d65498SPavan Nikhilesh uint8_t f_grptag_ok:1; 405d0d65498SPavan Nikhilesh uint8_t f_grptag_bad:1; 406d0d65498SPavan Nikhilesh uint8_t f_tag_type:1; 4076d28968eSJerin Jacob } mmask; 408d0d65498SPavan Nikhilesh uint8_t tag_type; 4096d28968eSJerin Jacob struct pki_qos_entry qos_entry; 4106d28968eSJerin Jacob } pki_mod_qos_t; 4116d28968eSJerin Jacob 412d0d65498SPavan Nikhilesh static inline int 413d0d65498SPavan Nikhilesh octeontx_pki_port_modify_qos(int port, pki_mod_qos_t *qos_cfg) 414d0d65498SPavan Nikhilesh { 415d0d65498SPavan Nikhilesh struct octeontx_mbox_hdr hdr; 416d0d65498SPavan Nikhilesh int res; 417d0d65498SPavan Nikhilesh 418d0d65498SPavan Nikhilesh mbox_pki_mod_qos_t q_cfg = *(mbox_pki_mod_qos_t *)qos_cfg; 419d0d65498SPavan Nikhilesh int len = sizeof(mbox_pki_mod_qos_t); 420d0d65498SPavan Nikhilesh 421d0d65498SPavan Nikhilesh hdr.coproc = OCTEONTX_PKI_COPROC; 422d0d65498SPavan Nikhilesh hdr.msg = MBOX_PKI_PORT_MODIFY_QOS; 423d0d65498SPavan Nikhilesh hdr.vfid = port; 424d0d65498SPavan Nikhilesh 425d0d65498SPavan Nikhilesh res = octeontx_ssovf_mbox_send(&hdr, &q_cfg, len, NULL, 0); 426d0d65498SPavan Nikhilesh if (res < 0) 427d0d65498SPavan Nikhilesh return -EACCES; 428d0d65498SPavan Nikhilesh 429d0d65498SPavan Nikhilesh return res; 430d0d65498SPavan Nikhilesh } 431d0d65498SPavan Nikhilesh 432d0d65498SPavan Nikhilesh static inline int 433d0d65498SPavan Nikhilesh octeontx_pki_port_delete_qos(int port, pki_del_qos_t *qos_cfg) 434d0d65498SPavan Nikhilesh { 435d0d65498SPavan Nikhilesh struct octeontx_mbox_hdr hdr; 436d0d65498SPavan Nikhilesh int res; 437d0d65498SPavan Nikhilesh 438d0d65498SPavan Nikhilesh mbox_pki_del_qos_t q_cfg = *(mbox_pki_del_qos_t *)qos_cfg; 439d0d65498SPavan Nikhilesh int len = sizeof(mbox_pki_del_qos_t); 440d0d65498SPavan Nikhilesh 441d0d65498SPavan Nikhilesh hdr.coproc = OCTEONTX_PKI_COPROC; 442d0d65498SPavan Nikhilesh hdr.msg = MBOX_PKI_PORT_DELETE_QOS; 443d0d65498SPavan Nikhilesh hdr.vfid = port; 444d0d65498SPavan Nikhilesh 445d0d65498SPavan Nikhilesh res = octeontx_ssovf_mbox_send(&hdr, &q_cfg, len, NULL, 0); 446d0d65498SPavan Nikhilesh if (res < 0) 447d0d65498SPavan Nikhilesh return -EACCES; 448d0d65498SPavan Nikhilesh 449d0d65498SPavan Nikhilesh return res; 450d0d65498SPavan Nikhilesh } 451d0d65498SPavan Nikhilesh 452d0d65498SPavan Nikhilesh static inline int 453d0d65498SPavan Nikhilesh octeontx_pki_port_close(int port) 454d0d65498SPavan Nikhilesh { 455d0d65498SPavan Nikhilesh struct octeontx_mbox_hdr hdr; 456d0d65498SPavan Nikhilesh int res; 457d0d65498SPavan Nikhilesh 458d0d65498SPavan Nikhilesh mbox_pki_port_t ptype; 459d0d65498SPavan Nikhilesh int len = sizeof(mbox_pki_port_t); 460d0d65498SPavan Nikhilesh memset(&ptype, 0, len); 461d0d65498SPavan Nikhilesh ptype.port_type = OCTTX_PORT_TYPE_NET; 462d0d65498SPavan Nikhilesh 463d0d65498SPavan Nikhilesh hdr.coproc = OCTEONTX_PKI_COPROC; 464d0d65498SPavan Nikhilesh hdr.msg = MBOX_PKI_PORT_CLOSE; 465d0d65498SPavan Nikhilesh hdr.vfid = port; 466d0d65498SPavan Nikhilesh 467d0d65498SPavan Nikhilesh res = octeontx_ssovf_mbox_send(&hdr, &ptype, len, NULL, 0); 468d0d65498SPavan Nikhilesh if (res < 0) 469d0d65498SPavan Nikhilesh return -EACCES; 470d0d65498SPavan Nikhilesh 471d0d65498SPavan Nikhilesh return res; 472d0d65498SPavan Nikhilesh } 473d0d65498SPavan Nikhilesh 474d0d65498SPavan Nikhilesh static inline int 475d0d65498SPavan Nikhilesh octeontx_pki_port_start(int port) 476d0d65498SPavan Nikhilesh { 477d0d65498SPavan Nikhilesh struct octeontx_mbox_hdr hdr; 478d0d65498SPavan Nikhilesh int res; 479d0d65498SPavan Nikhilesh 480d0d65498SPavan Nikhilesh mbox_pki_port_t ptype; 481d0d65498SPavan Nikhilesh int len = sizeof(mbox_pki_port_t); 482d0d65498SPavan Nikhilesh memset(&ptype, 0, len); 483d0d65498SPavan Nikhilesh ptype.port_type = OCTTX_PORT_TYPE_NET; 484d0d65498SPavan Nikhilesh 485d0d65498SPavan Nikhilesh hdr.coproc = OCTEONTX_PKI_COPROC; 486d0d65498SPavan Nikhilesh hdr.msg = MBOX_PKI_PORT_START; 487d0d65498SPavan Nikhilesh hdr.vfid = port; 488d0d65498SPavan Nikhilesh 489d0d65498SPavan Nikhilesh res = octeontx_ssovf_mbox_send(&hdr, &ptype, len, NULL, 0); 490d0d65498SPavan Nikhilesh if (res < 0) 491d0d65498SPavan Nikhilesh return -EACCES; 492d0d65498SPavan Nikhilesh 493d0d65498SPavan Nikhilesh return res; 494d0d65498SPavan Nikhilesh } 495d0d65498SPavan Nikhilesh 496d0d65498SPavan Nikhilesh static inline int 497d0d65498SPavan Nikhilesh octeontx_pki_port_stop(int port) 498d0d65498SPavan Nikhilesh { 499d0d65498SPavan Nikhilesh struct octeontx_mbox_hdr hdr; 500d0d65498SPavan Nikhilesh int res; 501d0d65498SPavan Nikhilesh 502d0d65498SPavan Nikhilesh mbox_pki_port_t ptype; 503d0d65498SPavan Nikhilesh int len = sizeof(mbox_pki_port_t); 504d0d65498SPavan Nikhilesh memset(&ptype, 0, len); 505d0d65498SPavan Nikhilesh ptype.port_type = OCTTX_PORT_TYPE_NET; 506d0d65498SPavan Nikhilesh 507d0d65498SPavan Nikhilesh hdr.coproc = OCTEONTX_PKI_COPROC; 508d0d65498SPavan Nikhilesh hdr.msg = MBOX_PKI_PORT_STOP; 509d0d65498SPavan Nikhilesh hdr.vfid = port; 510d0d65498SPavan Nikhilesh 511d0d65498SPavan Nikhilesh res = octeontx_ssovf_mbox_send(&hdr, &ptype, len, NULL, 0); 512d0d65498SPavan Nikhilesh if (res < 0) 513d0d65498SPavan Nikhilesh return -EACCES; 514d0d65498SPavan Nikhilesh 515d0d65498SPavan Nikhilesh return res; 516d0d65498SPavan Nikhilesh } 517d0d65498SPavan Nikhilesh 518b95c3413SJerin Jacob int octeontx_pki_port_open(int port); 5196d28968eSJerin Jacob int octeontx_pki_port_hash_config(int port, pki_hash_cfg_t *hash_cfg); 5206d28968eSJerin Jacob int octeontx_pki_port_pktbuf_config(int port, pki_pktbuf_cfg_t *buf_cfg); 5216d28968eSJerin Jacob int octeontx_pki_port_create_qos(int port, pki_qos_cfg_t *qos_cfg); 522b95c3413SJerin Jacob int octeontx_pki_port_close(int port); 5236d28968eSJerin Jacob int octeontx_pki_port_errchk_config(int port, pki_errchk_cfg_t *cfg); 524b95c3413SJerin Jacob 525b95c3413SJerin Jacob #endif /* __OCTEONTX_PKI_H__ */ 526