/** @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 */