📄 d860_pub.h
字号:
#ifndef __D860_PUB_H
#define __D860_PUB_H
#define QUICC_ADDRESS 0X22000000
#define NUM_OF_SCHANNELS 48
#define BD_BASE (NUM_OF_SCHANNELS*8) /*Reserved 64*48 bytes for QMC HDLC.*/
#define NUM_OF_SCCS 4
#define GLB_SCC_0 0
#define GLB_SCC_1 1
#define GLB_SCC_2 2
#define GLB_SCC_3 3
#define GLB_FEC 4
#define VALID_SLOT 0x8000
#define WRAP_SLOT 0x4000
#define RFCR 0x18 /* normal operation */
#define TFCR 0x18 /* normal operation */
#define MRBLR 1518 /* Max ethernet frame length */
#define MPC860_IRQ0 0
#define MPC860_IRQ1 1
#define MPC860_IRQ2 2
#define MPC860_IRQ3 3
#define MPC860_IRQ4 4
#define MPC860_IRQ5 5
#define MPC860_IRQ6 6
#define MPC860_IRQ7 7
/* Multi channel Interrupt structure */
#define INTR_VALID 0x8000 /* Valid interrupt entry */
#define INTR_WRAP 0x4000 /* Wrap bit in the interrupt entry table */
#define INTR_CH_NU 0x0FC0 /* Channel Num in interrupt table */
#define INTR_MASK_BITS 0x383f
#define INTR_SCC1 0x40000000 /* SCC port 1 */
#define INTR_SCC2 0x20000000 /* SCC port 2 */
#define INTR_SCC3 0x10000000 /* SCC port 3 */
#define INTR_SCC4 0x08000000 /* SCC port 4 */
/*
* General SCC mode register (GSMR)
*/
#define MODE_HDLC 0x0
#define MODE_APPLE_TALK 0x2
#define MODE_SS7 0x3
#define MODE_UART 0x4
#define MODE_PROFIBUS 0x5
#define MODE_ASYNC_HDLC 0x6
#define MODE_V14 0x7
#define MODE_BISYNC 0x8
#define MODE_DDCMP 0x9
#define MODE_MULTI_CHANNEL 0xa
#define MODE_ETHERNET 0xc
/*****************************************************************
Port C Output signal
*****************************************************************/
#define PC_TENA 0X0001
#define PC_TPAPCE 0X0002
#define PC_TPSQEL 0X0004
#define PC_TPEN 0X0008
#define PC_TPFLDL 0X0040
#define PC_APORT 0X0080
#define PC_LOOP 0X0400
/* general command opcodes */
#define INIT_RXTX_PARAMS 0x0000
#define INIT_RX_PARAMS 0x0100
#define INIT_TX_PARAMS 0x0200
#define ENTER_HUNT_MODE 0x0300
#define STOP_TX 0x0400
#define GR_STOP_TX 0x0500
#define RESTART_TX 0x0600
#define CLOSE_RX_BD 0x0700
#define SET_ENET_GROUP 0x0800
#define RESET_ENET_GROUP 0x0900
typedef enum
{
CCITT_CRC16,
CCITT_CRC32
}CRC;
typedef struct quicc_bd
{
volatile unsigned short status;
volatile unsigned short length;
volatile unsigned char *buf;
}QUICC_BD;
typedef VOID (int_routine)( UI interrupt_event);
typedef int_routine *int_routine_ptr;
typedef VOID *(alloc_routine)(SI length);
typedef VOID (free_routine)(SI scc_num, SI channel_num, VOID *buf);
typedef VOID (store_rx_buffer_routine)(SI scc_num, SI channel_num, VOID *buff, SI length);
typedef SI (handle_tx_error_routine)(SI scc_num, SI channel_num, QUICC_BD *tbd);
typedef VOID (handle_rx_error_routine)(SI scc_num, SI channel_num, QUICC_BD *rbd);
typedef VOID (handle_lost_error_routine)(SI scc_num, SI channel_num);
typedef VOID (handle_glob_overrun_routine)(SI scc_number);
typedef VOID (handle_glob_underrun_routine)(SI scc_number);
typedef VOID (glob_intr_q_overflow_routine)(SI scc_number);
typedef struct {
short init_flag;
QUICC_BD *tbd_get; /* Pionter to get next Transmit BD */
QUICC_BD *tbd_put; /* Pionter to put next Transmit BD */
QUICC_BD *tbd; /* Pionter to next Transmit BD */
short tbd_len; /* Number of Transmit BD's
currently in transmittion */
QUICC_BD *rbd; /* Pionter to next Receive BD */
short no_of_rcv_bd;
short no_of_trn_bd;
short max_frame_length;
int_routine *inter_ptr;
alloc_routine *alloc_ptr;
free_routine *free_ptr;
store_rx_buffer_routine *store_rx_buffer_ptr;
handle_tx_error_routine *handle_tx_error_ptr;
handle_rx_error_routine *handle_rx_error_ptr;
handle_lost_error_routine *handle_lost_error_ptr;
UL mcbase;
} SCC_TABLE[NUM_OF_SCCS];
#define CLEAR_BIT(x, bit) x=bit
/*****************************************************************
tbase and rbase registers
*****************************************************************/
#define TBD_ADDR(quicc,pram) ((struct quicc_bd *) \
(quicc->qcp_or_ud.RESERVED + pram->tbase))
#define RBD_ADDR(quicc,pram) ((struct quicc_bd *) \
(quicc->qcp_or_ud.RESERVED + pram->rbase))
#define TBD_CUR_ADDR(quicc,pram) ((struct quicc_bd *) \
(quicc->qcp_or_ud.RESERVED + pram->tbptr))
#define RBD_CUR_ADDR(quicc,pram) ((struct quicc_bd *) \
(quicc->qcp_or_ud.RESERVED + pram->rbptr))
#define TBD_SET_CUR_ADDR(bd,quicc,pram) pram->tbptr = \
((unsigned short)((char *)(bd) - (char *)(quicc->qcp_or_ud.RESERVED)))
#define RBD_SET_CUR_ADDR(bd,quicc,pram) pram->rbptr = \
((unsigned short)((char *)(bd) - (char *)(quicc->qcp_or_ud.RESERVED)))
#define INCREASE_TBD(bd,quicc,pram) { \
if((bd)->status & T_W) \
(bd) = TBD_ADDR(quicc,pram); \
else \
(bd)++; \
}
#define DECREASE_TBD(bd,quicc,pram) { \
if ((bd) == TBD_ADDR(quicc, pram)) \
while (!((bd)->status & T_W)) \
(bd)++; \
else \
(bd)--; \
}
#define INCREASE_RBD(bd,quicc,pram) { \
if((bd)->status & R_W) \
(bd) = RBD_ADDR(quicc,pram); \
else \
(bd)++; \
}
#define DECREASE_RBD(bd,quicc,pram) { \
if ((bd) == RBD_ADDR(quicc, pram)) \
while (!((bd)->status & T_W)) \
(bd)++; \
else \
(bd)--; \
}
/*****************************************************************
Macros for Multi channel
*****************************************************************/
#define QMC_BASE(quicc,page) (struct global_qmc_pram *)(&quicc->PRAM[page])
#define MCBASE(quicc,page) (unsigned long)(quicc->PRAM[page].m.mcbase)
#define CHANNEL_PRAM_BASE(quicc,channel) ((struct qmc_hdlc_pram *) \
(&(quicc->qcp_or_ud.qcp[channel])))
#define TBD_32_ADDR(quicc,page,channel) ((struct quicc_bd *) \
(MCBASE(quicc,page) + (CHANNEL_PRAM_BASE(quicc,channel)->tbase)))
#define RBD_32_ADDR(quicc,page,channel) ((struct quicc_bd *) \
(MCBASE(quicc,page) + (CHANNEL_PRAM_BASE(quicc,channel)->rbase)))
#define TBD_32_CUR_ADDR(quicc,page,channel) ((struct quicc_bd *) \
(MCBASE(quicc,page) + (CHANNEL_PRAM_BASE(quicc,channel)->tbptr)))
#define RBD_32_CUR_ADDR(quicc,page,channel) ((struct quicc_bd *) \
(MCBASE(quicc,page) + (CHANNEL_PRAM_BASE(quicc,channel)->rbptr)))
#define TBD_32_SET_CUR_ADDR(bd,quicc,page,channel) \
CHANNEL_PRAM_BASE(quicc,channel)->tbptr = \
((unsigned short)((char *)(bd) - (char *)(MCBASE(quicc,page))))
#define RBD_32_SET_CUR_ADDR(bd,quicc,page,channel) \
CHANNEL_PRAM_BASE(quicc,channel)->rbptr = \
((unsigned short)((char *)(bd) - (char *)(MCBASE(quicc,page))))
#define INCREASE_TBD_32(bd,quicc,page,channel) { \
if((bd)->status & T_W) \
(bd) = TBD_32_ADDR(quicc,page,channel); \
else \
(bd)++; \
}
#define DECREASE_TBD_32(bd,quicc,page,channel) { \
if ((bd) == TBD_32_ADDR(quicc, page,channel)) \
while (!((bd)->status & T_W)) \
(bd)++; \
else \
(bd)--; \
}
#define INCREASE_RBD_32(bd,quicc,page,channel) { \
if((bd)->status & R_W) \
(bd) = RBD_32_ADDR(quicc,page,channel); \
else \
(bd)++; \
}
#define DECREASE_RBD_32(bd,quicc,page,channel) { \
if ((bd) == RBD_32_ADDR(quicc, page,channel)) \
while (!((bd)->status & T_W)) \
(bd)++; \
else \
(bd)--; \
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -