1 /* 2 * SPDX-License-Identifier: BSD-3-Clause 3 * Copyright(c) 2023 Napatech A/S 4 */ 5 6 #ifndef NTOSS_SYSTEM_NT_UTIL_H 7 #define NTOSS_SYSTEM_NT_UTIL_H 8 9 #include <stdint.h> 10 #include "nt4ga_link.h" 11 12 #ifndef ARRAY_SIZE 13 #define ARRAY_SIZE(arr) RTE_DIM(arr) 14 #endif 15 16 #define PCIIDENT_TO_DOMAIN(pci_ident) ((uint16_t)(((unsigned int)(pci_ident) >> 16) & 0xFFFFU)) 17 #define PCIIDENT_TO_BUSNR(pci_ident) ((uint8_t)(((unsigned int)(pci_ident) >> 8) & 0xFFU)) 18 #define PCIIDENT_TO_DEVNR(pci_ident) ((uint8_t)(((unsigned int)(pci_ident) >> 3) & 0x1FU)) 19 #define PCIIDENT_TO_FUNCNR(pci_ident) ((uint8_t)(((unsigned int)(pci_ident) >> 0) & 0x7U)) 20 #define PCIIDENT_PRINT_STR "%04x:%02x:%02x.%x" 21 #define BDF_TO_PCIIDENT(dom, bus, dev, fnc) (((dom) << 16) | ((bus) << 8) | ((dev) << 3) | (fnc)) 22 23 uint64_t nt_os_get_time_monotonic_counter(void); 24 void nt_os_wait_usec(int val); 25 void nt_os_wait_usec_poll(int val); 26 27 static inline int min(int a, int b) 28 { 29 return (a < b) ? a : b; 30 } 31 32 uint64_t nt_util_align_size(uint64_t size); 33 34 struct nt_dma_s { 35 uint64_t iova; 36 uint64_t addr; 37 uint64_t size; 38 }; 39 40 struct port_link_speed { 41 int port_id; 42 int link_speed; 43 }; 44 45 struct nt_dma_s *nt_dma_alloc(uint64_t size, uint64_t align, int numa); 46 void nt_dma_free(struct nt_dma_s *vfio_addr); 47 48 struct nt_util_vfio_impl { 49 int (*vfio_dma_map)(int vf_num, void *virt_addr, uint64_t *iova_addr, uint64_t size); 50 int (*vfio_dma_unmap)(int vf_num, void *virt_addr, uint64_t iova_addr, uint64_t size); 51 }; 52 53 void nt_util_vfio_init(struct nt_util_vfio_impl *impl); 54 55 int nt_link_speed_to_eth_speed_num(enum nt_link_speed_e nt_link_speed); 56 uint32_t nt_link_speed_capa_to_eth_speed_capa(int nt_link_speed_capa); 57 nt_link_speed_t convert_link_speed(int link_speed_mbps); 58 int nt_link_duplex_to_eth_duplex(enum nt_link_duplex_e nt_link_duplex); 59 60 #endif /* NTOSS_SYSTEM_NT_UTIL_H */ 61