1 /* 2 * BSD LICENSE 3 * 4 * Copyright (C) Cavium networks Ltd. 2016. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * * Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * * Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in 14 * the documentation and/or other materials provided with the 15 * distribution. 16 * * Neither the name of Cavium networks nor the names of its 17 * contributors may be used to endorse or promote products derived 18 * from this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 #ifndef _THUNDERX_NICVF_H 34 #define _THUNDERX_NICVF_H 35 36 /* Platform/OS/arch specific abstractions */ 37 38 /* log */ 39 #include <rte_log.h> 40 #include "../nicvf_logs.h" 41 42 #define nicvf_log_error(s, ...) PMD_DRV_LOG(ERR, s, ##__VA_ARGS__) 43 44 #define nicvf_log_debug(s, ...) PMD_DRV_LOG(DEBUG, s, ##__VA_ARGS__) 45 46 #define nicvf_mbox_log(s, ...) PMD_MBOX_LOG(DEBUG, s, ##__VA_ARGS__) 47 48 #define nicvf_log(s, ...) fprintf(stderr, s, ##__VA_ARGS__) 49 50 /* delay */ 51 #include <rte_cycles.h> 52 #define nicvf_delay_us(x) rte_delay_us(x) 53 54 /* barrier */ 55 #include <rte_atomic.h> 56 #define nicvf_smp_wmb() rte_smp_wmb() 57 #define nicvf_smp_rmb() rte_smp_rmb() 58 59 /* utils */ 60 #include <rte_common.h> 61 #define nicvf_min(x, y) RTE_MIN(x, y) 62 63 /* byte order */ 64 #include <rte_byteorder.h> 65 #define nicvf_cpu_to_be_64(x) rte_cpu_to_be_64(x) 66 #define nicvf_be_to_cpu_64(x) rte_be_to_cpu_64(x) 67 68 #define NICVF_BYTE_ORDER RTE_BYTE_ORDER 69 #define NICVF_BIG_ENDIAN RTE_BIG_ENDIAN 70 #define NICVF_LITTLE_ENDIAN RTE_LITTLE_ENDIAN 71 72 /* Constants */ 73 #include <rte_ether.h> 74 #define NICVF_MAC_ADDR_SIZE ETHER_ADDR_LEN 75 76 #include <rte_io.h> 77 #define nicvf_addr_write(addr, val) rte_write64_relaxed((val), (void *)(addr)) 78 #define nicvf_addr_read(addr) rte_read64_relaxed((void *)(addr)) 79 80 /* ARM64 specific functions */ 81 #if defined(RTE_ARCH_ARM64) 82 #define nicvf_prefetch_store_keep(_ptr) ({\ 83 asm volatile("prfm pstl1keep, [%x0]\n" : : "r" (_ptr)); }) 84 85 86 #define NICVF_LOAD_PAIR(reg1, reg2, addr) ({ \ 87 asm volatile( \ 88 "ldp %x[x1], %x[x0], [%x[p1]]" \ 89 : [x1]"=r"(reg1), [x0]"=r"(reg2)\ 90 : [p1]"r"(addr) \ 91 ); }) 92 93 #else /* non optimized functions for building on non arm64 arch */ 94 95 #define nicvf_prefetch_store_keep(_ptr) do {} while (0) 96 97 #define NICVF_LOAD_PAIR(reg1, reg2, addr) \ 98 do { \ 99 reg1 = nicvf_addr_read((uintptr_t)addr); \ 100 reg2 = nicvf_addr_read((uintptr_t)addr + 8); \ 101 } while (0) 102 103 #endif 104 105 #include "nicvf_hw.h" 106 #include "nicvf_mbox.h" 107 108 #endif /* _THUNDERX_NICVF_H */ 109