⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d860_pub.h

📁 基于vxworks操作系统的电话语音平台系统
💻 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 + -