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