00001 #ifndef _ALT_BPP_IMPL_H
00002 #define _ALT_BPP_IMPL_H
00003
00004 #ifdef __cplusplus
00005 extern "C" {
00006 #endif
00007
00008 /* Hardware registers for bpp device.
00009 N.B. nothing declared volatile, so we MUST use the DDI access routines.
00010 The original version is in /usr/include/sys/bpp_reg.h */
00011 struct bpp_reg {
00012 uint32_t dma_csr; /* DMA control and status register */
00013 uint32_t dma_addr; /* address register */
00014 uint32_t dma_bcnt; /* byte count register */
00015 uint32_t dma_tst_csr; /* DMA2 test control/status register */
00016
00017 uint16_t hw_config; /* hardware configuration register */
00018 uint16_t op_config; /* operation configuration register */
00019
00020 uint8_t data; /* parallel port data */
00021 uint8_t trans_cntl; /* transfer control register */
00022 uint8_t out_pins; /* output pins register */
00023 uint8_t in_pins; /* input pins register */
00024
00025 uint16_t int_cntl; /* interrupt control register */
00026 };
00027
00028 /* In the bit definitions that follow, some don't apply to the current
00029 hardware, but may go back to a much earlier bpp driver, written by
00030 Deborah Gronke Bennett about ten years ago.
00031 */
00032
00033 /* Cf. /usr/include/sys/bpp_reg.h for the original version. */
00034 /* Bits in the dma_csr register */
00035 const uint32_t BPP_INT_PEND = 1; /* -> DMA or control intr. pending */
00036 const uint32_t BPP_ERR_PEND = 1<< 1; /* -> SBus error pending */
00037 const uint32_t BPP_DRAINING = (1<< 3)|(1<< 2); /* -> cache is draining */
00038 const uint32_t BPP_INT_EN = 1<< 4; /* <-> Enable interrupts */
00039 const uint32_t BPP_FLUSH = 1<< 5; /* <- Flush the cache */
00040 const uint32_t BPP_SLAVE_ERR = 1<< 6; /* <=> Slave cycle size error */
00041 const uint32_t BPP_RESET_BPP = 1<< 7; /* <-> Hardware reset parallel port */
00042 const uint32_t BPP_READ = 1<< 8; /* -> 1 == DMA read, 0 == DMA write */
00043 const uint32_t BPP_ENABLE_DMA = 1<< 9; /* <-> Enable DMA transfers */
00044 const uint32_t BPP_ENABLE_BCNT = 1<<13; /* <-> Enable byte counter in DMA */
00045 const uint32_t BPP_TERMINAL_CNT = 1<<14; /* <=> Terminal count flag */
00046 const uint32_t BPP_BURST_SIZES_MASK= (1<<18)|(1<<19); /* <-> SBus burst sizes */
00047 const uint32_t BPP_DRAIN_DISABLE = 1<<20; /* <-> Disable draining cache */
00048 const uint32_t BPP_TC_INTR_DISABLE = 1<<23; /* <-> Disable terminal count inter. */
00049 const uint32_t BPP_EN_CHAIN_DMA = 1<<24; /* <-> Enable chained dma */
00050 const uint32_t BPP_DMA_ON = 1<<25; /* -> DMA is on */
00051 const uint32_t BPP_ADDR_VALID = 1<<26; /* -> addr and bcnt are valid */
00052 const uint32_t BPP_NEXT_VALID = 1<<27; /* -> next addr and bcnt valid */
00053 const uint32_t BPP_DEVICE_ID_MASK = 0xf0000000;
00054
00055 /* Cf. /usr/include/sys/bpp_reg.h for the original version. */
00056 /* Bits in the hw_config register */
00057 const uint16_t BPP_DSS_SIZE = (1<< 6)|(1<< 5)|(1<< 4)|(1<< 3)|(1<< 2)|(1<<1)| 1;
00058 const uint16_t BPP_DSW_SIZE = (1<<14)|(1<<13)|(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8);
00059 const uint16_t BPP_CNTR_TEST= (1<<15);
00060
00061 /* Cf. /usr/include/sys/bpp_reg.h for the original version. */
00062 /* Bits in the op_config register */
00063 const uint16_t BPP_EN_VERSATEC = 1; /* Enable versatec operation (Zebra) */
00064 const uint16_t BPP_VERSATEC_INTERLOCK= 1<< 1; /* Versatec connector absent (Zebra) */
00065 const uint16_t BPP_IDLE = 1<< 3; /* data transfer idle */
00066 const uint16_t BPP_SRST = 1<< 7; /* reset state machines */
00067 const uint16_t BPP_ACK_OP = 1<< 8; /* Acknowledge handshake op */
00068 const uint16_t BPP_BUSY_OP = 1<< 9; /* Busy handshake op */
00069 const uint16_t BPP_EN_DIAG = 1<<10; /* Enable diagnostic mode */
00070 const uint16_t BPP_ACK_BIDIR = 1<<11; /* Acknowledge is bidirectional */
00071 const uint16_t BPP_BUSY_BIDIR = 1<<12; /* Busy is bidirectional */
00072 const uint16_t BPP_DS_BIDIR = 1<<13; /* Data Strobe is bidirectional */
00073 const uint16_t BPP_DMA_DATA = 1<<14; /* Data value in DMA mem clear */
00074 const uint16_t BPP_EN_MEM_CLR = 1<<15; /* Enable DMA memory clear op */
00075
00076 /* Cf. /usr/include/sys/bpp_reg.h for the original version. */
00077 /* Bits in the trans_cntl register */
00078 const uint8_t BPP_DS_PIN = 1; /* ControlerEnable/Data Strobe pin */
00079 const uint8_t BPP_ACK_PIN = 1<< 1; /* Input#2/Acknowledge pin */
00080 const uint8_t BPP_BUSY_PIN = 1<< 2; /* Input#1/Busy pin */
00081 const uint8_t BPP_DIRECTION = 1<< 3; /* Direction control, 0 == write */
00082
00083 /* Cf. /usr/include/sys/bpp_io.h for the original version. */
00084 /* Bits in the out_pins register */
00085 const uint8_t BPP_SLCTIN_PIN = 1; /* Output#1/Select in pin */
00086 const uint8_t BPP_AFX_PIN = 1<< 1; /* Output#2/Auto feed pin */
00087 const uint8_t BPP_INIT_PIN = 1<< 2; /* Standby/Initialize pin */
00088
00089 /* Cf. /usr/include/sys/bpp_io.h for the original version. */
00090 /* Bits in the in_pins register */
00091 const uint8_t BPP_ERR_PIN = 1; /* Input#3/Error pin */
00092 const uint8_t BPP_SLCT_PIN = 1<< 1; /* Switch2/Select pin */
00093 const uint8_t BPP_PE_PIN = 1<< 2; /* Switch1/Paper empty pin */
00094
00095 /* Cf. /usr/include/sys/bpp_reg.h for the original version. */
00096 /* Bits in the int_cntl register */
00097 const uint16_t BPP_ERR_IRQ_EN = 1; /* Input#3/ERR interrupt enable */
00098 const uint16_t BPP_ERR_IRP = 1<< 1; /* Input#3/ERR polarity: 1=rising edge */
00099 const uint16_t BPP_SLCT_IRQ_EN= 1<< 2; /* Switch2/SLCT interrupt enable */
00100 const uint16_t BPP_SLCT_IRP = 1<< 3; /* Switch2/SLCT polarity: 1=rising edge */
00101 const uint16_t BPP_PE_IRQ_EN = 1<< 4; /* Switch1/PE interrupt enable */
00102 const uint16_t BPP_PE_IRP = 1<< 5; /* Switch1/PE polarity: 1=rising edge */
00103 const uint16_t BPP_BUSY_IRQ_EN= 1<< 6; /* Input#1/BUSY interrupt enable */
00104 const uint16_t BPP_BUSY_IRP = 1<< 7; /* Input#1/BUSY polarity: 1=rising edge */
00105 const uint16_t BPP_ACK_IRQ_EN = 1<< 8; /* Input#2/ACK interrupt enable */
00106 const uint16_t BPP_DS_IRQ_EN = 1<< 9; /* ControlerEnable/DS interrupt enable */
00107 const uint16_t BPP_ERR_IRQ = 1<<10; /* Input#3/ERR interrupt pending */
00108 const uint16_t BPP_SLCT_IRQ = 1<<11; /* Switch2/SLCT interrupt pending */
00109 const uint16_t BPP_PE_IRQ = 1<<12; /* Switch1/PE interrupt pending */
00110 const uint16_t BPP_BUSY_IRQ = 1<<13; /* Input#1/BUSY interrupt pending */
00111 const uint16_t BPP_ACK_IRQ = 1<<14; /* Input#2/ACK interrupt pending */
00112 const uint16_t BPP_DS_IRQ = 1<<15; /* ControlerEnable/DS interrupt pending */
00113 #define BPP_ALL_IRQS (BPP_ERR_IRQ | BPP_SLCT_IRQ | BPP_PE_IRQ | BPP_BUSY_IRQ \
00114 | BPP_ACK_IRQ | BPP_DS_IRQ)
00115
00116 #ifdef __cplusplus
00117 }
00118 #endif
00119
00120 #endif
1.2.14 written by Dimitri van Heesch,
© 1997-2002