original files of m241
This commit is contained in:
@@ -0,0 +1,399 @@
|
||||
/******************************************************************************
|
||||
|
||||
� 1995-2003, 2004, 2005-2010 Freescale Semiconductor, Inc.
|
||||
All rights reserved.
|
||||
|
||||
This is proprietary source code of Freescale Semiconductor Inc.,
|
||||
and its use is subject to the NetComm Device Drivers EULA.
|
||||
The copyright notice above does not evidence any actual or intended
|
||||
publication of such source code.
|
||||
|
||||
**************************************************************************/
|
||||
/**************************************************************************//**
|
||||
@File ncsw_ext.h
|
||||
|
||||
@Description General NetCommSw Standard Definitions
|
||||
*//***************************************************************************/
|
||||
|
||||
#ifndef __NCSW_EXT_H
|
||||
#define __NCSW_EXT_H
|
||||
|
||||
#include "memcpy_ext.h"
|
||||
|
||||
|
||||
#define WRITE_BLOCK IOMemSet32
|
||||
#define COPY_BLOCK Mem2IOCpy32
|
||||
|
||||
#define CAST_POINTER_TO_UINT32(val) ((uint32_t)((size_t)((void*)(val))))
|
||||
#define CAST_POINTER_TO_UINT64(val) ((uint64_t)((size_t)((void*)(val))))
|
||||
#define CAST_UINT32_TO_POINTER(val) ((void*)((size_t)((uint32_t)(val))))
|
||||
#define CAST_UINT64_TO_POINTER(val) ((void*)((size_t)((uint64_t)(val))))
|
||||
#define CAST_UINT32_TO_POINTER_TYPE(type,val) ((type*)((size_t)((uint32_t)(val))))
|
||||
#define CAST_UINT64_TO_POINTER_TYPE(type,val) ((type*)((size_t)((uint64_t)(val))))
|
||||
|
||||
#define WRITE_UINT8_UINT24(arg, data08, data24) WRITE_UINT32(arg,((uint32_t)(data08)<<24)|((uint32_t)(data24)&0x00FFFFFF))
|
||||
#define WRITE_UINT24_UINT8(arg, data24, data08) WRITE_UINT32(arg,((uint32_t)(data24)<< 8)|((uint32_t)(data08)&0x000000FF))
|
||||
|
||||
/* Little-Endian access macros */
|
||||
|
||||
#define WRITE_UINT16_LE(arg, data) \
|
||||
WRITE_UINT16((arg), SwapUint16(data))
|
||||
|
||||
#define WRITE_UINT32_LE(arg, data) \
|
||||
WRITE_UINT32((arg), SwapUint32(data))
|
||||
|
||||
#define WRITE_UINT64_LE(arg, data) \
|
||||
WRITE_UINT64((arg), SwapUint64(data))
|
||||
|
||||
#define GET_UINT16_LE(arg) \
|
||||
SwapUint16(GET_UINT16(arg))
|
||||
|
||||
#define GET_UINT32_LE(arg) \
|
||||
SwapUint32(GET_UINT32(arg))
|
||||
|
||||
#define GET_UINT64_LE(arg) \
|
||||
SwapUint64(GET_UINT64(arg))
|
||||
|
||||
/* Write and Read again macros */
|
||||
#define WRITE_UINT_SYNC(size, arg, data) \
|
||||
do { \
|
||||
uint##size##_t temp; \
|
||||
WRITE_UINT##size((arg), (data)); \
|
||||
temp = GET_UINT##size(arg); \
|
||||
} while (0)
|
||||
|
||||
#define WRITE_UINT8_SYNC(arg, data) WRITE_UINT_SYNC(8, (arg), (data))
|
||||
|
||||
#define WRITE_UINT16_SYNC(arg, data) WRITE_UINT_SYNC(16, (arg), (data))
|
||||
|
||||
#define WRITE_UINT32_SYNC(arg, data) WRITE_UINT_SYNC(32, (arg), (data))
|
||||
|
||||
#define MAKE_UINT64(high32, low32) (((uint64_t)high32 << 32) | (low32))
|
||||
|
||||
|
||||
/*----------------------*/
|
||||
/* Miscellaneous macros */
|
||||
/*----------------------*/
|
||||
|
||||
#define UNUSED(X) (X=X)
|
||||
|
||||
#define KILOBYTE 0x400 /* 1024 */
|
||||
#define MEGABYTE (KILOBYTE * KILOBYTE) /* 1024*1024 */
|
||||
#define GIGABYTE (KILOBYTE * MEGABYTE) /* 1024*1024*1024 */
|
||||
|
||||
#define NO_IRQ (-1)
|
||||
|
||||
#define NCSW_MASTER_ID (0)
|
||||
|
||||
/* Macro for checking if a number is a power of 2 */
|
||||
#define POWER_OF_2(n) (!((n) & ((n)-1)))
|
||||
|
||||
/* Macro for calculating log of base 2 */
|
||||
#define LOG2(num, log2Num) \
|
||||
do \
|
||||
{ \
|
||||
uint64_t tmp = (num); \
|
||||
log2Num = 0; \
|
||||
while(tmp > 1) \
|
||||
{ \
|
||||
log2Num++; \
|
||||
tmp = tmp >> 1; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/* Ceiling division - not the fastest way, but safer in terms of overflow */
|
||||
#define DIV_CEIL(x,y) ((uint32_t)((x)/(y)) + (((((uint32_t)((x)/(y)))*(y)) == (x)) ? 0 : 1))
|
||||
|
||||
/* Round up a number to be a multiple of a second number */
|
||||
/* Interpeak start */
|
||||
#ifndef ROUND_UP
|
||||
/* Interpeak End */
|
||||
#define ROUND_UP(x,y) ((((x) + (y) - 1) / (y)) * (y))
|
||||
/* Interpeak start */
|
||||
#endif
|
||||
/* Interpeak End */
|
||||
|
||||
/* Timing macro for converting usec units to number of ticks. */
|
||||
/* (number of usec * clock_Hz) / 1,000,000) - since */
|
||||
/* clk is in MHz units, no division needed. */
|
||||
#define USEC_TO_CLK(usec,clk) ((usec) * (clk))
|
||||
#define CYCLES_TO_USEC(cycles,clk) ((cycles) / (clk))
|
||||
|
||||
/* Timing macros for converting between nsec units and number of clocks. */
|
||||
#define NSEC_TO_CLK(nsec,clk) DIV_CEIL(((nsec) * (clk)), 1000)
|
||||
#define CYCLES_TO_NSEC(cycles,clk) (((cycles) * 1000) / (clk))
|
||||
|
||||
/* Timing macros for converting between psec units and number of clocks. */
|
||||
#define PSEC_TO_CLK(psec,clk) DIV_CEIL(((psec) * (clk)), 1000000)
|
||||
#define CYCLES_TO_PSEC(cycles,clk) (((cycles) * 1000000) / (clk))
|
||||
|
||||
/* Min, Max macros */
|
||||
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
||||
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
||||
#define IN_RANGE(min,val,max) ((min)<=(val) && (val)<=(max))
|
||||
|
||||
#if !(defined(ARRAY_SIZE))
|
||||
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
|
||||
#endif /* !defined(ARRAY_SIZE) */
|
||||
|
||||
|
||||
/* possible alignments */
|
||||
#define HALF_WORD_ALIGNMENT 2
|
||||
#define WORD_ALIGNMENT 4
|
||||
#define DOUBLE_WORD_ALIGNMENT 8
|
||||
#define BURST_ALIGNMENT 32
|
||||
|
||||
#define HALF_WORD_ALIGNED 0x00000001
|
||||
#define WORD_ALIGNED 0x00000003
|
||||
#define DOUBLE_WORD_ALIGNED 0x00000007
|
||||
#define BURST_ALIGNED 0x0000001f
|
||||
#ifndef IS_ALIGNED
|
||||
#define IS_ALIGNED(n,align) (!((uint32_t)(n) & (align - 1)))
|
||||
#endif /* IS_ALIGNED */
|
||||
|
||||
|
||||
#define LAST_BUF 1
|
||||
#define FIRST_BUF 2
|
||||
#define SINGLE_BUF (LAST_BUF | FIRST_BUF)
|
||||
#define MIDDLE_BUF 4
|
||||
|
||||
#define ARRAY_END -1
|
||||
|
||||
#define ILLEGAL_BASE (~0)
|
||||
|
||||
#define BUF_POSITION(first, last) state[(!!(last))<<1 | !!(first)]
|
||||
#define DECLARE_POSITION static uint8_t state[4] = { (uint8_t)MIDDLE_BUF, (uint8_t)FIRST_BUF, (uint8_t)LAST_BUF, (uint8_t)SINGLE_BUF };
|
||||
|
||||
|
||||
/**************************************************************************//**
|
||||
@Description Timers operation mode
|
||||
*//***************************************************************************/
|
||||
typedef enum e_TimerMode
|
||||
{
|
||||
e_TIMER_MODE_INVALID = 0,
|
||||
e_TIMER_MODE_FREE_RUN, /**< Free run - counter continues to increase
|
||||
after reaching the reference value. */
|
||||
e_TIMER_MODE_PERIODIC, /**< Periodic - counter restarts counting from 0
|
||||
after reaching the reference value. */
|
||||
e_TIMER_MODE_SINGLE /**< Single (one-shot) - counter stops counting
|
||||
after reaching the reference value. */
|
||||
} e_TimerMode;
|
||||
|
||||
|
||||
/**************************************************************************//**
|
||||
@Description Enumeration (bit flags) of communication modes (Transmit,
|
||||
receive or both).
|
||||
*//***************************************************************************/
|
||||
typedef enum e_CommMode
|
||||
{
|
||||
e_COMM_MODE_NONE = 0, /**< No transmit/receive communication */
|
||||
e_COMM_MODE_RX = 1, /**< Only receive communication */
|
||||
e_COMM_MODE_TX = 2, /**< Only transmit communication */
|
||||
e_COMM_MODE_RX_AND_TX = 3 /**< Both transmit and receive communication */
|
||||
} e_CommMode;
|
||||
|
||||
/**************************************************************************//**
|
||||
@Description General Diagnostic Mode
|
||||
*//***************************************************************************/
|
||||
typedef enum e_DiagMode
|
||||
{
|
||||
e_DIAG_MODE_NONE = 0, /**< Normal operation; no diagnostic mode */
|
||||
e_DIAG_MODE_CTRL_LOOPBACK, /**< Loopback in the controller */
|
||||
e_DIAG_MODE_CHIP_LOOPBACK, /**< Loopback in the chip but not in the
|
||||
controller; e.g. IO-pins, SerDes, etc. */
|
||||
e_DIAG_MODE_PHY_LOOPBACK, /**< Loopback in the external PHY */
|
||||
e_DIAG_MODE_EXT_LOOPBACK, /**< Loopback in the external line (beyond the PHY) */
|
||||
e_DIAG_MODE_CTRL_ECHO, /**< Echo incoming data by the controller */
|
||||
e_DIAG_MODE_PHY_ECHO /**< Echo incoming data by the PHY */
|
||||
} e_DiagMode;
|
||||
|
||||
/**************************************************************************//**
|
||||
@Description Possible RxStore callback responses.
|
||||
*//***************************************************************************/
|
||||
typedef enum e_RxStoreResponse
|
||||
{
|
||||
e_RX_STORE_RESPONSE_PAUSE /**< Pause invoking callback with received data;
|
||||
in polling mode, start again invoking callback
|
||||
only next time user invokes the receive routine;
|
||||
in interrupt mode, start again invoking callback
|
||||
only next time a receive event triggers an interrupt;
|
||||
in all cases, received data that are pending are not
|
||||
lost, rather, their processing is temporarily deferred;
|
||||
in all cases, received data are processed in the order
|
||||
in which they were received. */
|
||||
, e_RX_STORE_RESPONSE_CONTINUE /**< Continue invoking callback with received data. */
|
||||
} e_RxStoreResponse;
|
||||
|
||||
|
||||
/**************************************************************************//**
|
||||
@Description General Handle
|
||||
*//***************************************************************************/
|
||||
typedef void * t_Handle; /**< handle, used as object's descriptor */
|
||||
|
||||
/**************************************************************************//**
|
||||
@Description MUTEX type
|
||||
*//***************************************************************************/
|
||||
typedef uint32_t t_Mutex;
|
||||
|
||||
/**************************************************************************//**
|
||||
@Description Error Code.
|
||||
|
||||
The high word of the error code is the code of the software
|
||||
module (driver). The low word is the error type (e_ErrorType).
|
||||
To get the values from the error code, use GET_ERROR_TYPE()
|
||||
and GET_ERROR_MODULE().
|
||||
*//***************************************************************************/
|
||||
typedef uint32_t t_Error;
|
||||
|
||||
/**************************************************************************//**
|
||||
@Description General prototype of interrupt service routine (ISR).
|
||||
|
||||
@Param[in] handle - Optional handle of the module handling the interrupt.
|
||||
|
||||
@Return None
|
||||
*//***************************************************************************/
|
||||
typedef void (t_Isr)(t_Handle handle);
|
||||
|
||||
/**************************************************************************//**
|
||||
@Anchor mem_attr
|
||||
|
||||
@Collection Memory Attributes
|
||||
|
||||
Various attributes of memory partitions. These values may be
|
||||
or'ed together to create a mask of all memory attributes.
|
||||
@{
|
||||
*//***************************************************************************/
|
||||
#define MEMORY_ATTR_CACHEABLE 0x00000001
|
||||
/**< Memory is cacheable */
|
||||
#define MEMORY_ATTR_QE_2ND_BUS_ACCESS 0x00000002
|
||||
/**< Memory can be accessed by QUICC Engine
|
||||
through its secondary bus interface */
|
||||
|
||||
/* @} */
|
||||
|
||||
|
||||
/**************************************************************************//**
|
||||
@Function t_GetBufFunction
|
||||
|
||||
@Description User callback function called by driver to get data buffer.
|
||||
|
||||
User provides this function. Driver invokes it.
|
||||
|
||||
@Param[in] h_BufferPool - A handle to buffer pool manager
|
||||
@Param[out] p_BufContextHandle - Returns the user's private context that
|
||||
should be associated with the buffer
|
||||
|
||||
@Return Pointer to data buffer, NULL if error
|
||||
*//***************************************************************************/
|
||||
typedef uint8_t * (t_GetBufFunction)(t_Handle h_BufferPool,
|
||||
t_Handle *p_BufContextHandle);
|
||||
|
||||
/**************************************************************************//**
|
||||
@Function t_PutBufFunction
|
||||
|
||||
@Description User callback function called by driver to return data buffer.
|
||||
|
||||
User provides this function. Driver invokes it.
|
||||
|
||||
@Param[in] h_BufferPool - A handle to buffer pool manager
|
||||
@Param[in] p_Buffer - A pointer to buffer to return
|
||||
@Param[in] h_BufContext - The user's private context associated with
|
||||
the returned buffer
|
||||
|
||||
@Return E_OK on success; Error code otherwise
|
||||
*//***************************************************************************/
|
||||
typedef t_Error (t_PutBufFunction)(t_Handle h_BufferPool,
|
||||
uint8_t *p_Buffer,
|
||||
t_Handle h_BufContext);
|
||||
|
||||
/**************************************************************************//**
|
||||
@Function t_PhysToVirt
|
||||
|
||||
@Description Translates a physical address to the matching virtual address.
|
||||
|
||||
@Param[in] addr - The physical address to translate.
|
||||
|
||||
@Return Virtual address.
|
||||
*//***************************************************************************/
|
||||
typedef void * t_PhysToVirt(physAddress_t addr);
|
||||
|
||||
/**************************************************************************//**
|
||||
@Function t_VirtToPhys
|
||||
|
||||
@Description Translates a virtual address to the matching physical address.
|
||||
|
||||
@Param[in] addr - The virtual address to translate.
|
||||
|
||||
@Return Physical address.
|
||||
*//***************************************************************************/
|
||||
typedef physAddress_t t_VirtToPhys(void *addr);
|
||||
|
||||
/**************************************************************************//**
|
||||
@Description Buffer Pool Information Structure.
|
||||
*//***************************************************************************/
|
||||
typedef struct t_BufferPoolInfo
|
||||
{
|
||||
t_Handle h_BufferPool; /**< A handle to the buffer pool manager */
|
||||
t_GetBufFunction *f_GetBuf; /**< User callback to get a free buffer */
|
||||
t_PutBufFunction *f_PutBuf; /**< User callback to return a buffer */
|
||||
uint16_t bufferSize; /**< Buffer size (in bytes) */
|
||||
|
||||
t_PhysToVirt *f_PhysToVirt; /**< User callback to translate pool buffers
|
||||
physical addresses to virtual addresses */
|
||||
t_VirtToPhys *f_VirtToPhys; /**< User callback to translate pool buffers
|
||||
virtual addresses to physical addresses */
|
||||
} t_BufferPoolInfo;
|
||||
|
||||
|
||||
/**************************************************************************//**
|
||||
@Description User callback function called by driver when transmit completed.
|
||||
|
||||
User provides this function. Driver invokes it.
|
||||
|
||||
@Param[in] h_App - Application's handle, as was provided to the
|
||||
driver by the user
|
||||
@Param[in] queueId - Transmit queue ID
|
||||
@Param[in] p_Data - Pointer to the data buffer
|
||||
@Param[in] h_BufContext - The user's private context associated with
|
||||
the given data buffer
|
||||
@Param[in] status - Transmit status and errors
|
||||
@Param[in] flags - Driver-dependent information
|
||||
*//***************************************************************************/
|
||||
typedef void (t_TxConfFunction)(t_Handle h_App,
|
||||
uint32_t queueId,
|
||||
uint8_t *p_Data,
|
||||
t_Handle h_BufContext,
|
||||
uint16_t status,
|
||||
uint32_t flags);
|
||||
|
||||
/**************************************************************************//**
|
||||
@Description User callback function called by driver with receive data.
|
||||
|
||||
User provides this function. Driver invokes it.
|
||||
|
||||
@Param[in] h_App - Application's handle, as was provided to the
|
||||
driver by the user
|
||||
@Param[in] queueId - Receive queue ID
|
||||
@Param[in] p_Data - Pointer to the buffer with received data
|
||||
@Param[in] h_BufContext - The user's private context associated with
|
||||
the given data buffer
|
||||
@Param[in] length - Length of received data
|
||||
@Param[in] status - Receive status and errors
|
||||
@Param[in] position - Position of buffer in frame
|
||||
@Param[in] flags - Driver-dependent information
|
||||
|
||||
@Retval e_RX_STORE_RESPONSE_CONTINUE - order the driver to continue Rx
|
||||
operation for all ready data.
|
||||
@Retval e_RX_STORE_RESPONSE_PAUSE - order the driver to stop Rx operation.
|
||||
*//***************************************************************************/
|
||||
typedef e_RxStoreResponse (t_RxStoreFunction)(t_Handle h_App,
|
||||
uint32_t queueId,
|
||||
uint8_t *p_Data,
|
||||
t_Handle h_BufContext,
|
||||
uint32_t length,
|
||||
uint16_t status,
|
||||
uint8_t position,
|
||||
uint32_t flags);
|
||||
|
||||
|
||||
#endif /* __NCSW_EXT_H */
|
||||
Reference in New Issue
Block a user