/** @file Copyright (c) 2016 - 2017, Socionext Inc. All rights reserved.
Copyright (c) 2017, Linaro, Ltd. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef PFDEP_H #define PFDEP_H #include #include #include #include #include extern EFI_CPU_ARCH_PROTOCOL *mCpu; /********************************************************************** * Constant definitions **********************************************************************/ #define PFDEP_INT64_AVAILABLE /********************************************************************** * Elementary type definitions **********************************************************************/ typedef INT8 pfdep_int8; typedef UINT8 pfdep_uint8; typedef INT16 pfdep_int16; typedef UINT16 pfdep_uint16; typedef INT32 pfdep_int32; typedef UINT32 pfdep_uint32; typedef INT64 pfdep_int64; typedef UINT64 pfdep_uint64; typedef BOOLEAN pfdep_bool; typedef CHAR8 pfdep_char; #define PFDEP_TRUE ((pfdep_bool)1) #define PFDEP_FALSE ((pfdep_bool)0) /********************************************************************** * Complex type definitions **********************************************************************/ typedef enum pfdep_err_e { PFDEP_ERR_OK = 0, PFDEP_ERR_PARAM, PFDEP_ERR_ALLOC, PFDEP_ERR_INTERRUPT } pfdep_err_t; typedef struct { LIST_ENTRY Link; VOID *Buffer; VOID *Mapping; BOOLEAN RecycleForTx; BOOLEAN Released; } PACKET_HANDLE; typedef VOID *pfdep_dev_handle_t; typedef PACKET_HANDLE *pfdep_pkt_handle_t; typedef EFI_PHYSICAL_ADDRESS pfdep_phys_addr_t; typedef UINTN pfdep_cpu_addr_t; typedef int pfdep_hard_lock_t; typedef int pfdep_soft_lock_t; typedef BOOLEAN pfdep_hard_lock_ctx_t; typedef int pfdep_soft_lock_ctx_t; typedef unsigned int pfdep_debug_level_t; #define PFDEP_DEBUG_LEVEL_FATAL ((pfdep_debug_level_t)1) #define PFDEP_DEBUG_LEVEL_WARNING ((pfdep_debug_level_t)2) #define PFDEP_DEBUG_LEVEL_NOTICE ((pfdep_debug_level_t)3) #define PFDEP_DEBUG_LEVEL_DEBUG ((pfdep_debug_level_t)4) #define PFDEP_DEBUG_LEVEL_DEBUG_DETAILED ((pfdep_debug_level_t)5) #define PFDEP_DEBUG_LEVEL_DEBUG_MORE_DETAILED ((pfdep_debug_level_t)6) /********************************************************************** * Variable declarations **********************************************************************/ extern pfdep_debug_level_t pfdep_debug_level; /* defined in pfdep_uefi.c */ /********************************************************************** * Function declarations **********************************************************************/ static __inline pfdep_uint32 pfdep_iomem_read(void *addr) { return *((volatile pfdep_uint32 *)(addr)); } static __inline void pfdep_iomem_write(void *addr, pfdep_uint32 val) { *((volatile pfdep_uint32 *)(addr)) = val; } #define pfdep_read_mem_barrier() MemoryFence() #define pfdep_write_mem_barrier() MemoryFence() #define pfdep_mem_barrier() MemoryFence() void *pfdep_malloc(pfdep_uint32 len); void pfdep_free(void *addr); pfdep_err_t pfdep_dma_malloc ( pfdep_dev_handle_t dev_handle, pfdep_uint32 len, void **addr_p, pfdep_phys_addr_t *phys_addr_p ); void pfdep_dma_free ( pfdep_dev_handle_t dev_handle, pfdep_uint32 len, void *addr, pfdep_phys_addr_t phys_addr ); pfdep_err_t pfdep_alloc_pkt_buf ( pfdep_dev_handle_t dev_handle, pfdep_uint16 len, void **addr_p, pfdep_phys_addr_t *phys_addr_p, pfdep_pkt_handle_t *pkt_handle_p ); void pfdep_free_pkt_buf ( pfdep_dev_handle_t dev_handle, pfdep_uint16 len, void *addr, pfdep_phys_addr_t phys_addr, pfdep_bool last_flag, pfdep_pkt_handle_t pkt_handle ); static __inline pfdep_err_t pfdep_init_hard_lock(pfdep_hard_lock_t *hard_lock_p) { (void)hard_lock_p; /* suppress compiler warning */ return PFDEP_ERR_OK; } static __inline void pfdep_uninit_hard_lock(pfdep_hard_lock_t *hard_lock_p) { (void)hard_lock_p; /* suppress compiler warning */ return; } static __inline void pfdep_acquire_hard_lock ( pfdep_hard_lock_t *hard_lock_p, /* not used */ pfdep_hard_lock_ctx_t *ctx_p ) { (void)hard_lock_p; /* suppress compiler warning */ *ctx_p = SaveAndDisableInterrupts(); } static __inline void pfdep_release_hard_lock ( pfdep_hard_lock_t *hard_lock_p, /* not used */ pfdep_hard_lock_ctx_t *ctx_p ) { (void)hard_lock_p; /* suppress compiler warning */ SetInterruptState(*ctx_p); } static __inline pfdep_err_t pfdep_init_soft_lock ( pfdep_soft_lock_t *soft_lock_p ) { *soft_lock_p = 0; /* suppress compiler warning */ return PFDEP_ERR_OK; } static __inline void pfdep_uninit_soft_lock ( pfdep_soft_lock_t *soft_lock_p ) { (void)soft_lock_p; /* suppress compiler warning */ return; } static __inline pfdep_err_t pfdep_acquire_soft_lock ( pfdep_soft_lock_t *soft_lock_p, pfdep_soft_lock_ctx_t *ctx_p ) { (void)soft_lock_p; /* suppress compiler warning */ (void)ctx_p; /* suppress compiler warning */ return PFDEP_ERR_OK; } static __inline void pfdep_release_soft_lock ( pfdep_soft_lock_t *soft_lock_p, pfdep_soft_lock_ctx_t *ctx_p ) { (void)soft_lock_p; /* suppress compiler warning */ (void)ctx_p; /* suppress compiler warning */ } static __inline void pfdep_memcpy(void *dst_p, const void *src_p, pfdep_uint32 len) { CopyMem (dst_p, src_p, (UINTN)len); } static __inline void pfdep_memset(void *dst_p, pfdep_uint8 c, pfdep_uint32 len) { SetMem (dst_p, (UINTN)len, c); } static __inline pfdep_err_t pfdep_msleep(pfdep_uint32 wait_ms) { MicroSecondDelay ((UINTN)wait_ms * 1000); return PFDEP_ERR_OK; } #define pfdep_print(level,...) \ do { \ if (level <= pfdep_debug_level) { \ DEBUG ((DEBUG_INFO, "[NETSEC] " __VA_ARGS__)); \ } \ } while (0) static __inline pfdep_debug_level_t pfdep_get_debug_level(void) { return pfdep_debug_level; } static __inline void pfdep_set_debug_level(pfdep_debug_level_t level) { pfdep_debug_level = level; } #define pfdep_assert(cond) ASSERT(cond) #endif /* PFDEP_H */