/*
 * File:    fecbd.h
 * Purpose:     
 *
 * Purpose: Provide a simple buffer management driver
 */

#ifndef _FECBD_H_
#define _FECBD_H_

/********************************************************************/

#define Rx  1
#define Tx  0

/*
 * Buffer sizes in bytes 
 */
#ifndef RX_BUF_SZ
#define RX_BUF_SZ  1520 //2048 
#endif
#ifndef TX_BUF_SZ
#define TX_BUF_SZ  1520
#endif

/* 
 * Buffer Descriptor Format 
 */
#pragma options align= packed
typedef struct
{
    uint16 status;  /* control and status */
    uint16 length;  /* transfer length */
    uint8  *data;   /* buffer address */
} FECBD;

/*
 * Bit level definitions for status field of buffer descriptors
 */
#define TX_BD_R         0x8000
#define TX_BD_TO1       0x4000
#define TX_BD_W         0x2000
#define TX_BD_TO2       0x1000
#define TX_BD_INTERRUPT 0x1000  /* MCF547x/8x Only */
#define TX_BD_L         0x0800
#define TX_BD_TC        0x0400
#define TX_BD_DEF       0x0200  /* MCF5272 Only */
#define TX_BD_ABC       0x0200
#define TX_BD_HB        0x0100  /* MCF5272 Only */
#define TX_BD_LC        0x0080  /* MCF5272 Only */
#define TX_BD_RL        0x0040  /* MCF5272 Only */
#define TX_BD_UN        0x0002  /* MCF5272 Only */
#define TX_BD_CSL       0x0001  /* MCF5272 Only */

#define RX_BD_E         0x8000
#define RX_BD_R01       0x4000
#define RX_BD_W         0x2000
#define RX_BD_R02       0x1000
#define RX_BD_INTERRUPT 0x1000  /* MCF547x/8x Only */
#define RX_BD_L         0x0800
#define RX_BD_M         0x0100
#define RX_BD_BC        0x0080
#define RX_BD_MC        0x0040
#define RX_BD_LG        0x0020
#define RX_BD_NO        0x0010
#define RX_BD_CR        0x0004
#define RX_BD_OV        0x0002
#define RX_BD_TR        0x0001
#define RX_BD_ERROR     (RX_BD_NO | RX_BD_CR | RX_BD_OV | RX_BD_TR)

/*
 * The following defines are provided by the MCF547x/8x 
 * DMA API.  These are shown here to show their correlation
 * to the other FEC buffer descriptor status bits
 * 
 * #define MCD_FEC_BUF_READY   0x8000
 * #define MCD_FEC_WRAP        0x2000
 * #define MCD_FEC_INTERRUPT   0x1000
 * #define MCD_FEC_END_FRAME   0x0800
 */

/* 
 * Functions provided in fec_bd.c 
 */
int     fecbd_init(int, int, int);
void    fecbd_flush(int);
void    fecbd_dump( void );
uint32  fecbd_get_start(int, int);
FECBD*  fecbd_rx_alloc(int);
FECBD*  fecbd_tx_alloc(int);
FECBD*  fecbd_tx_free(int);

/*
 * Error codes
 */
#define ERR_MALLOC      (-1)
#define ERR_NBUFALLOC   (-2)

/*******************************************************************/

#endif /* _FECBD_H_ */
