1*4418919fSjohnjiang /* SPDX-License-Identifier: BSD-3-Clause 2*4418919fSjohnjiang * Copyright(C) 2019 Marvell International Ltd. 3*4418919fSjohnjiang */ 4*4418919fSjohnjiang 5*4418919fSjohnjiang #ifndef _NITROX_HAL_H_ 6*4418919fSjohnjiang #define _NITROX_HAL_H_ 7*4418919fSjohnjiang 8*4418919fSjohnjiang #include <rte_cycles.h> 9*4418919fSjohnjiang #include <rte_byteorder.h> 10*4418919fSjohnjiang 11*4418919fSjohnjiang #include "nitrox_csr.h" 12*4418919fSjohnjiang 13*4418919fSjohnjiang union nps_pkt_slc_cnts { 14*4418919fSjohnjiang uint64_t u64; 15*4418919fSjohnjiang struct { 16*4418919fSjohnjiang #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN 17*4418919fSjohnjiang uint64_t slc_int : 1; 18*4418919fSjohnjiang uint64_t uns_int : 1; 19*4418919fSjohnjiang uint64_t in_int : 1; 20*4418919fSjohnjiang uint64_t mbox_int : 1; 21*4418919fSjohnjiang uint64_t resend : 1; 22*4418919fSjohnjiang uint64_t raz : 5; 23*4418919fSjohnjiang uint64_t timer : 22; 24*4418919fSjohnjiang uint64_t cnt : 32; 25*4418919fSjohnjiang #else 26*4418919fSjohnjiang uint64_t cnt : 32; 27*4418919fSjohnjiang uint64_t timer : 22; 28*4418919fSjohnjiang uint64_t raz : 5; 29*4418919fSjohnjiang uint64_t resend : 1; 30*4418919fSjohnjiang uint64_t mbox_int : 1; 31*4418919fSjohnjiang uint64_t in_int : 1; 32*4418919fSjohnjiang uint64_t uns_int : 1; 33*4418919fSjohnjiang uint64_t slc_int : 1; 34*4418919fSjohnjiang #endif 35*4418919fSjohnjiang } s; 36*4418919fSjohnjiang }; 37*4418919fSjohnjiang 38*4418919fSjohnjiang union nps_pkt_slc_int_levels { 39*4418919fSjohnjiang uint64_t u64; 40*4418919fSjohnjiang struct { 41*4418919fSjohnjiang #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN 42*4418919fSjohnjiang uint64_t bmode : 1; 43*4418919fSjohnjiang uint64_t raz : 9; 44*4418919fSjohnjiang uint64_t timet : 22; 45*4418919fSjohnjiang uint64_t cnt : 32; 46*4418919fSjohnjiang #else 47*4418919fSjohnjiang uint64_t cnt : 32; 48*4418919fSjohnjiang uint64_t timet : 22; 49*4418919fSjohnjiang uint64_t raz : 9; 50*4418919fSjohnjiang uint64_t bmode : 1; 51*4418919fSjohnjiang #endif 52*4418919fSjohnjiang } s; 53*4418919fSjohnjiang }; 54*4418919fSjohnjiang 55*4418919fSjohnjiang union nps_pkt_slc_ctl { 56*4418919fSjohnjiang uint64_t u64; 57*4418919fSjohnjiang struct { 58*4418919fSjohnjiang #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN 59*4418919fSjohnjiang uint64_t raz : 61; 60*4418919fSjohnjiang uint64_t rh : 1; 61*4418919fSjohnjiang uint64_t z : 1; 62*4418919fSjohnjiang uint64_t enb : 1; 63*4418919fSjohnjiang #else 64*4418919fSjohnjiang uint64_t enb : 1; 65*4418919fSjohnjiang uint64_t z : 1; 66*4418919fSjohnjiang uint64_t rh : 1; 67*4418919fSjohnjiang uint64_t raz : 61; 68*4418919fSjohnjiang #endif 69*4418919fSjohnjiang } s; 70*4418919fSjohnjiang }; 71*4418919fSjohnjiang 72*4418919fSjohnjiang union nps_pkt_in_instr_ctl { 73*4418919fSjohnjiang uint64_t u64; 74*4418919fSjohnjiang struct { 75*4418919fSjohnjiang #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN 76*4418919fSjohnjiang uint64_t raz : 62; 77*4418919fSjohnjiang uint64_t is64b : 1; 78*4418919fSjohnjiang uint64_t enb : 1; 79*4418919fSjohnjiang #else 80*4418919fSjohnjiang uint64_t enb : 1; 81*4418919fSjohnjiang uint64_t is64b : 1; 82*4418919fSjohnjiang uint64_t raz : 62; 83*4418919fSjohnjiang #endif 84*4418919fSjohnjiang } s; 85*4418919fSjohnjiang }; 86*4418919fSjohnjiang 87*4418919fSjohnjiang union nps_pkt_in_instr_rsize { 88*4418919fSjohnjiang uint64_t u64; 89*4418919fSjohnjiang struct { 90*4418919fSjohnjiang #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN 91*4418919fSjohnjiang uint64_t raz : 32; 92*4418919fSjohnjiang uint64_t rsize : 32; 93*4418919fSjohnjiang #else 94*4418919fSjohnjiang uint64_t rsize : 32; 95*4418919fSjohnjiang uint64_t raz : 32; 96*4418919fSjohnjiang #endif 97*4418919fSjohnjiang } s; 98*4418919fSjohnjiang }; 99*4418919fSjohnjiang 100*4418919fSjohnjiang union nps_pkt_in_instr_baoff_dbell { 101*4418919fSjohnjiang uint64_t u64; 102*4418919fSjohnjiang struct { 103*4418919fSjohnjiang #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN 104*4418919fSjohnjiang uint64_t aoff : 32; 105*4418919fSjohnjiang uint64_t dbell : 32; 106*4418919fSjohnjiang #else 107*4418919fSjohnjiang uint64_t dbell : 32; 108*4418919fSjohnjiang uint64_t aoff : 32; 109*4418919fSjohnjiang #endif 110*4418919fSjohnjiang } s; 111*4418919fSjohnjiang }; 112*4418919fSjohnjiang 113*4418919fSjohnjiang union nps_pkt_in_done_cnts { 114*4418919fSjohnjiang uint64_t u64; 115*4418919fSjohnjiang struct { 116*4418919fSjohnjiang #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN 117*4418919fSjohnjiang uint64_t slc_int : 1; 118*4418919fSjohnjiang uint64_t uns_int : 1; 119*4418919fSjohnjiang uint64_t in_int : 1; 120*4418919fSjohnjiang uint64_t mbox_int : 1; 121*4418919fSjohnjiang uint64_t resend : 1; 122*4418919fSjohnjiang uint64_t raz : 27; 123*4418919fSjohnjiang uint64_t cnt : 32; 124*4418919fSjohnjiang #else 125*4418919fSjohnjiang uint64_t cnt : 32; 126*4418919fSjohnjiang uint64_t raz : 27; 127*4418919fSjohnjiang uint64_t resend : 1; 128*4418919fSjohnjiang uint64_t mbox_int : 1; 129*4418919fSjohnjiang uint64_t in_int : 1; 130*4418919fSjohnjiang uint64_t uns_int : 1; 131*4418919fSjohnjiang uint64_t slc_int : 1; 132*4418919fSjohnjiang #endif 133*4418919fSjohnjiang } s; 134*4418919fSjohnjiang }; 135*4418919fSjohnjiang 136*4418919fSjohnjiang union aqmq_qsz { 137*4418919fSjohnjiang uint64_t u64; 138*4418919fSjohnjiang struct { 139*4418919fSjohnjiang #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN 140*4418919fSjohnjiang uint64_t raz : 32; 141*4418919fSjohnjiang uint64_t host_queue_size : 32; 142*4418919fSjohnjiang #else 143*4418919fSjohnjiang uint64_t host_queue_size : 32; 144*4418919fSjohnjiang uint64_t raz : 32; 145*4418919fSjohnjiang #endif 146*4418919fSjohnjiang } s; 147*4418919fSjohnjiang }; 148*4418919fSjohnjiang 149*4418919fSjohnjiang enum nitrox_vf_mode { 150*4418919fSjohnjiang NITROX_MODE_PF = 0x0, 151*4418919fSjohnjiang NITROX_MODE_VF16 = 0x1, 152*4418919fSjohnjiang NITROX_MODE_VF32 = 0x2, 153*4418919fSjohnjiang NITROX_MODE_VF64 = 0x3, 154*4418919fSjohnjiang NITROX_MODE_VF128 = 0x4, 155*4418919fSjohnjiang }; 156*4418919fSjohnjiang 157*4418919fSjohnjiang int vf_get_vf_config_mode(uint8_t *bar_addr); 158*4418919fSjohnjiang int vf_config_mode_to_nr_queues(enum nitrox_vf_mode vf_mode); 159*4418919fSjohnjiang void setup_nps_pkt_input_ring(uint8_t *bar_addr, uint16_t ring, uint32_t rsize, 160*4418919fSjohnjiang phys_addr_t raddr); 161*4418919fSjohnjiang void setup_nps_pkt_solicit_output_port(uint8_t *bar_addr, uint16_t port); 162*4418919fSjohnjiang void nps_pkt_input_ring_disable(uint8_t *bar_addr, uint16_t ring); 163*4418919fSjohnjiang void nps_pkt_solicited_port_disable(uint8_t *bar_addr, uint16_t port); 164*4418919fSjohnjiang 165*4418919fSjohnjiang #endif /* _NITROX_HAL_H_ */ 166