forked from rrcarlosr/Jetpack
94 lines
3.1 KiB
C
94 lines
3.1 KiB
C
/*
|
|
* (C) Copyright 2003
|
|
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
|
*
|
|
* This file is based on code
|
|
* (C) Copyright Motorola, Inc., 2000
|
|
*
|
|
* odin smartdma header file
|
|
*/
|
|
|
|
#ifndef __MPC5XXX_SDMA_H
|
|
#define __MPC5XXX_SDMA_H
|
|
|
|
#include <common.h>
|
|
#include <mpc5xxx.h>
|
|
|
|
/* Task number assignment */
|
|
#define FEC_RECV_TASK_NO 0
|
|
#define FEC_XMIT_TASK_NO 1
|
|
|
|
/*---------------------------------------------------------------------*/
|
|
|
|
/* Stuff for Ethernet Tx/Rx tasks */
|
|
|
|
/*---------------------------------------------------------------------*/
|
|
|
|
/* Layout of Ethernet controller Parameter SRAM area:
|
|
----------------------------------------------------------------
|
|
0x00: TBD_BASE, base address of TX BD ring
|
|
0x04: TBD_NEXT, address of next TX BD to be processed
|
|
0x08: RBD_BASE, base address of RX BD ring
|
|
0x0C: RBD_NEXT, address of next RX BD to be processed
|
|
---------------------------------------------------------------
|
|
ALL PARAMETERS ARE ALL LONGWORDS (FOUR BYTES EACH).
|
|
*/
|
|
|
|
/* base address of SRAM area to store parameters used by Ethernet tasks */
|
|
#define FEC_PARAM_BASE (MPC5XXX_SRAM + 0x0800)
|
|
|
|
/* base address of SRAM area for buffer descriptors */
|
|
#define FEC_BD_BASE (MPC5XXX_SRAM + 0x0820)
|
|
|
|
/*---------------------------------------------------------------------*/
|
|
|
|
/* common shortcuts used by driver C code */
|
|
|
|
/*---------------------------------------------------------------------*/
|
|
|
|
/* Disable SmartDMA task */
|
|
#define SDMA_TASK_DISABLE(tasknum) \
|
|
{ \
|
|
volatile ushort *tcr = (ushort *)(MPC5XXX_SDMA + 0x0000001c + 2 * tasknum); \
|
|
*tcr = (*tcr) & (~0x8000); \
|
|
}
|
|
|
|
/* Enable SmartDMA task */
|
|
#define SDMA_TASK_ENABLE(tasknum) \
|
|
{ \
|
|
volatile ushort *tcr = (ushort *) (MPC5XXX_SDMA + 0x0000001c + 2 * tasknum); \
|
|
*tcr = (*tcr) | 0x8000; \
|
|
}
|
|
|
|
/* Enable interrupt */
|
|
#define SDMA_INT_ENABLE(tasknum) \
|
|
{ \
|
|
struct mpc5xxx_sdma *sdma = (struct mpc5xxx_sdma *)MPC5XXX_SDMA; \
|
|
sdma->IntMask &= ~(1 << tasknum); \
|
|
}
|
|
|
|
/* Disable interrupt */
|
|
#define SDMA_INT_DISABLE(tasknum) \
|
|
{ \
|
|
struct mpc5xxx_sdma *sdma = (struct mpc5xxx_sdma *)MPC5XXX_SDMA; \
|
|
sdma->IntMask |= (1 << tasknum); \
|
|
}
|
|
|
|
|
|
/* Clear interrupt pending bits */
|
|
#define SDMA_CLEAR_IEVENT(tasknum) \
|
|
{ \
|
|
struct mpc5xxx_sdma *sdma = (struct mpc5xxx_sdma *)MPC5XXX_SDMA; \
|
|
sdma->IntPend = (1 << tasknum); \
|
|
}
|
|
|
|
/* get interrupt pending bit of a task */
|
|
#define SDMA_GET_PENDINGBIT(tasknum) \
|
|
((*(vu_long *)(MPC5XXX_SDMA + 0x14)) & (1<<(tasknum)))
|
|
|
|
/* get interrupt mask bit of a task */
|
|
#define SDMA_GET_MASKBIT(tasknum) \
|
|
((*(vu_long *)(MPC5XXX_SDMA + 0x18)) & (1<<(tasknum)))
|
|
|
|
#endif /* __MPC5XXX_SDMA_H */
|