|
@@ -309,3 +309,100 @@
|
|
|
/*****************************************************************
|
|
|
chip select option register
|
|
|
*****************************************************************/
|
|
|
+#define DTACK 0xe000
|
|
|
+#define ADR_MASK 0x1ffc
|
|
|
+#define RDWR_MASK 0x0002
|
|
|
+#define FC_MASK 0x0001
|
|
|
+
|
|
|
+/*****************************************************************
|
|
|
+ tbase and rbase registers
|
|
|
+*****************************************************************/
|
|
|
+#define TBD_ADDR(quicc,pram) ((struct quicc_bd *) \
|
|
|
+ (quicc->ch_or_u.u.udata_bd_ucode + pram->tbase))
|
|
|
+#define RBD_ADDR(quicc,pram) ((struct quicc_bd *) \
|
|
|
+ (quicc->ch_or_u.u.udata_bd_ucode + pram->rbase))
|
|
|
+#define TBD_CUR_ADDR(quicc,pram) ((struct quicc_bd *) \
|
|
|
+ (quicc->ch_or_u.u.udata_bd_ucode + pram->tbptr))
|
|
|
+#define RBD_CUR_ADDR(quicc,pram) ((struct quicc_bd *) \
|
|
|
+ (quicc->ch_or_u.u.udata_bd_ucode + pram->rbptr))
|
|
|
+#define TBD_SET_CUR_ADDR(bd,quicc,pram) pram->tbptr = \
|
|
|
+ ((unsigned short)((char *)(bd) - (char *)(quicc->ch_or_u.u.udata_bd_ucode)))
|
|
|
+#define RBD_SET_CUR_ADDR(bd,quicc,pram) pram->rbptr = \
|
|
|
+ ((unsigned short)((char *)(bd) - (char *)(quicc->ch_or_u.u.udata_bd_ucode)))
|
|
|
+#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_multi_pram *)(&quicc->pram[page])
|
|
|
+#define MCBASE(quicc,page) (unsigned long)(quicc->pram[page].m.mcbase)
|
|
|
+#define CHANNEL_PRAM_BASE(quicc,channel) ((struct quicc32_pram *) \
|
|
|
+ (&(quicc->ch_or_u.ch_pram_tbl[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
|