summaryrefslogtreecommitdiff
path: root/sys/arch/mvme88k/dev/dartreg.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/mvme88k/dev/dartreg.h')
-rw-r--r--sys/arch/mvme88k/dev/dartreg.h311
1 files changed, 311 insertions, 0 deletions
diff --git a/sys/arch/mvme88k/dev/dartreg.h b/sys/arch/mvme88k/dev/dartreg.h
new file mode 100644
index 00000000000..10d996a172d
--- /dev/null
+++ b/sys/arch/mvme88k/dev/dartreg.h
@@ -0,0 +1,311 @@
+/*
+ * Something to put append a 'U' to a long constant if it's C so that
+ * it'll be unsigned in both ANSI and traditional.
+ */
+#if defined(ASSEMBLER)
+# define U(num) num
+#else
+# if defined(__STDC__)
+# define U(num) num ## U
+# else
+# define U(num) num/**/U
+# endif
+#endif
+
+/*********************** CONFIGURATION *******************************/
+#define MAXPORTS 2 /* max count of PORTS/DUART */
+
+/*
+ * The following define is for the utputc/utgetc Console routines
+ * which have to work without any configuration.
+ */
+#define MVME188_DUART U(0xFFF82000) /* M68692 DUART chip */
+
+/*********************** DEFINITIONS *********************************/
+#define MISSING 0 /* flag, missing a configured DUART */
+#define ON 1 /* flag for modem() */
+#define OFF 0 /* flag for modem() */
+#define A_PORT 0 /* flag for port a */
+#define B_PORT 1 /* flag for port b */
+
+/*********************** MACROS ***********************************/
+/*
+ * spl priority level should always be the same.
+ */
+#define SPLCLOCK spl6 /* set clock priority level */
+#define SPLM681 splhi /* set ut driver priority level */
+
+/* the access to the same command register must be delayed,
+ because the chip has some hardware problems in this case */
+#define DELAY_CR { volatile register i; for ( i=0; i<250; ++i ); }
+
+/*********************** MC68681 DEFINITIONS ************************/
+#define PORTOFFSET 0x10 /* offset for port b address space */
+
+/* mode register 1: MR1x operations */
+#define RXRTS 0x80 /* enable receiver RTS */
+#define PAREN 0x00 /* with parity */
+#define PARDIS 0x10 /* no parity */
+#define EVENPAR 0x00 /* even parity */
+#define ODDPAR 0x04 /* odd parity */
+#define CL5 0x00 /* 5 bits per char */
+#define CL6 0x01 /* 6 bits per char */
+#define CL7 0x02 /* 7 bits per char */
+#define CL8 0x03 /* 8 bits per char */
+#define PARMODEMASK 0x18 /* parity mode mask */
+#define PARTYPEMASK 0x04 /* parity type mask */
+#define CLMASK 0x03 /* character length mask */
+
+/* mode register 2: MR2x operations */
+#define TXRTS 0x20 /* enable transmitter RTS */
+#define TXCTS 0x10 /* enable transmitter CTS */
+#define SB2 0x0f /* 2 stop bits */
+#define SB1 0x07 /* 1 stop bit */
+#define SB1L5 0x00 /* 1 stop bit at 5 bits per character */
+
+#define SBMASK 0x0f /* stop bit mask */
+
+/* clock-select register: CSRx operations */
+#define NOBAUD -1 /* 50 and 200 baud are not possible */
+/* they are not in Baud register set 2 */
+#define BD75 0x00 /* 75 baud */
+#define BD110 0x11 /* 110 baud */
+#define BD134 0x22 /* 134.5 baud */
+#define BD150 0x33 /* 150 baud */
+#define BD300 0x44 /* 300 baud */
+#define BD600 0x55 /* 600 baud */
+#define BD1200 0x66 /* 1200 baud */
+#define BD1800 0xaa /* 1800 baud */
+#define BD2400 0x88 /* 2400 baud */
+#define BD4800 0x99 /* 4800 baud */
+#define BD9600 0xbb /* 9600 baud */
+#define BD19200 0xcc /* 19200 baud */
+
+#define DEFBAUD BD9600 /* default value if baudrate is not possible */
+
+
+/* channel command register: CRx operations */
+#define MRRESET 0x10 /* reset mr pointer to mr1 */
+#define RXRESET 0x20 /* reset receiver */
+#define TXRESET 0x30 /* reset transmitter */
+#define ERRRESET 0x40 /* reset error status */
+#define BRKINTRESET 0x50 /* reset channel's break interrupt */
+#define BRKSTART 0x60 /* start break */
+#define BRKSTOP 0x70 /* stop break */
+#define TXDIS 0x08 /* disable transmitter */
+#define TXEN 0x04 /* enable transmitter */
+#define RXDIS 0x02 /* disable receiver */
+#define RXEN 0x01 /* enable receiver */
+
+/* status register: SRx status */
+#define RBRK 0x80 /* received break */
+#define FRERR 0x40 /* frame error */
+#define PERR 0x20 /* parity error */
+#define ROVRN 0x10 /* receiver overrun error */
+#define TXEMT 0x08 /* transmitter empty */
+#define TXRDY 0x04 /* transmitter ready */
+#define FFULL 0x02 /* receiver FIFO full */
+#define RXRDY 0x01 /* receiver ready */
+
+/* output port configuration register: OPCR operations */
+#define OPSET 0x00 /* set all op lines to op function */
+#define OPSETTO 0x04 /* use OP3 for timer output */
+
+/* output port register: OP operations */
+#define OPDTRB 0x20 /* DTR line output b on the VME188, 181, 141 */
+#define OPDTRA 0x04 /* DTR line output a */
+#define OPRTSB 0x02 /* RTS line output b */
+#define OPRTSA 0x01 /* RTS line output a */
+
+/* auxiliary control register: ACR operations */
+#define BDSET1 0x00 /* baudrate generator set 1 */
+#define BDSET2 0x80 /* baudrate generator set 2 */
+#define CCLK1 0x60 /* timer clock: external rate. TA */
+#define CCLK16 0x30 /* counter clock: x1 clk divided by 16 */
+#define SLCTIM 0x7800/* timer count to get 60 Hz time slice (16.6ms ticks) */
+#define IPDCDIB 0x08 /* IP3 change == DCD input on port B */
+#define IPDCDIA 0x04 /* IP2 change == DCD input on port A */
+
+/* input port change register: IPCR operations */
+#define IPCRDCDB 0x80 /* IP3 change == DCD change on port B */
+#define IPCRDCDA 0x40 /* IP2 change == DCD change on port A */
+
+/* Defines for mvme335 */
+#define IPDCDB 0x20 /* DCD line input b */
+#define IPDCDA 0x10 /* DCD line input a */
+
+#define IPDSRB 0x08 /* DSR line input b */
+#define IPDSRA 0x04 /* DSR line input a */
+#define IPCTSB 0x02 /* CTS line input b */
+#define IPCTSA 0x01 /* CTS line input a */
+
+/* interrupt status and mask register: ISR status and IMR mask */
+#define IIPCHG 0x80 /* input port change */
+#define IBRKB 0x40 /* delta break b */
+#define IRXRDYB 0x20 /* receiver ready b */
+#define ITXRDYB 0x10 /* transmitter ready b */
+#define ITIMER 0x08 /* Enable timer interrupts. */
+#define IBRKA 0x04 /* delta break a */
+#define IRXRDYA 0x02 /* receiver ready a */
+#define ITXRDYA 0x01 /* transmitter ready a */
+
+/* interrupts from port a or b */
+#define AINTPORT ( IRXRDYA | ITXRDYA )
+#define BINTPORT ( IRXRDYB | ITXRDYB )
+
+/* HW write register index for ut_wr_regs[] */
+#define MR1A 0 /* mode register 1 a */
+#define CSRA 1 /* clock-select register a*/
+#define CRA 2 /* command register a */
+#define TBA 3 /* transmitter buffer a */
+#define ACR 4 /* auxialiary control register*/
+#define IMR 5 /* interrupt mask register */
+#define CTUR 6 /* counter/timer upper reg */
+#define CTLR 7 /* counter/timer lower reg */
+#define MR1B 8 /* mode register 1 b */
+#define CSRB 9 /* clock-select register b*/
+#define CRB 10 /* command register b */
+#define TBB 11 /* transmitter buffer b */
+#define IVR 12 /* interrupt vector register */
+#define OPCR 13 /* output port config reg */
+#define OPRSET 14 /* output port: bit set cmd */
+#define OPRRESET 15 /* output port: bit reset cmd */
+#define MR2A 16 /* mode register 2 a */
+#define MR2B 17 /* mode register 2 b */
+#define MAXREG 18 /* max count of registers */
+
+/*
+ * Structure of MC68681 hardware read registers.
+ */
+struct dart_rd_reg
+{
+ volatile unsigned int rd_mra; /* mode register a */
+ volatile unsigned int rd_sra; /* status register a*/
+ volatile unsigned int dummy5; /* do not access */
+ volatile unsigned int rd_rba; /* receiver buffer a */
+ volatile unsigned int rd_ipcr; /* input port change register */
+ volatile unsigned int rd_isr; /* interrupt status register */
+ volatile unsigned int rd_cur; /* current MSB of counter */
+ volatile unsigned int rd_clr; /* current LSB of counter */
+ volatile unsigned int rd_mrb; /* mode register b */
+ volatile unsigned int rd_srb; /* status register b*/
+ volatile unsigned int dummyxb; /* do not access */
+ volatile unsigned int rd_rbb; /* receiver buffer b */
+ volatile unsigned int rd_ivr; /* interrupt vector register */
+ volatile unsigned int rd_ip; /* input port (unlatched) */
+ volatile unsigned int rd_ctstart; /* start-counter command */
+ volatile unsigned int rd_ctstop; /* stop-counter command */
+};
+
+/*
+ * Structure of MC68681 hardware write registers.
+ */
+struct dart_wr_reg
+{
+ volatile unsigned int wr_mra; /* mode register a */
+ volatile unsigned int wr_csra; /* clock-select register a*/
+ volatile unsigned int wr_cra; /* command register a */
+ volatile unsigned int wr_tba; /* transmitter buffer a */
+ volatile unsigned int wr_acr; /* auxialiary control register*/
+ volatile unsigned int wr_imr; /* interrupt mask register */
+ volatile unsigned int wr_ctur; /* counter/timer upper reg */
+ volatile unsigned int wr_ctlr; /* counter/timer lower reg */
+ volatile unsigned int wr_mrb; /* mode register b */
+ volatile unsigned int wr_csrb; /* clock-select register b*/
+ volatile unsigned int wr_crb; /* command register b */
+ volatile unsigned int wr_tbb; /* transmitter buffer b */
+ volatile unsigned int wr_ivr; /* interrupt vector register */
+ volatile unsigned int wr_opcr; /* output port config reg */
+ volatile unsigned int wr_oprset; /* output port: bit set cmd */
+ volatile unsigned int wr_oprreset;/* output port: bit reset cmd */
+};
+
+union dartreg {
+ struct dart_rd_reg read; /* read registers */
+ struct dart_wr_reg write; /* write registers */
+};
+
+/*
+ * Structure of MC68681 hardware port dependent read registers.
+ */
+struct dart_prd_reg
+{
+ volatile unsigned int rd_mr; /* mode register */
+ volatile unsigned int rd_sr; /* status register */
+ volatile unsigned int dummy5;
+ volatile unsigned int rd_rb; /* receiver buffer */
+ volatile unsigned int dummy9;
+ volatile unsigned int dummy11;
+ volatile unsigned int dummy13;
+ volatile unsigned int dummy15;
+};
+
+/*
+ * Structure of MC68681 hardware port dependent write registers.
+ */
+struct dart_pwr_reg
+{
+ volatile unsigned int wr_mr; /* mode register */
+ volatile unsigned int wr_csr; /* clock-select register */
+ volatile unsigned int wr_cr; /* command register */
+ volatile unsigned int wr_tb; /* transmitter buffer */
+ volatile unsigned int dummy9;
+ volatile unsigned int dummy11;
+ volatile unsigned int dummy13;
+ volatile unsigned int dummy15;
+};
+
+union dart_pt_io {
+ struct dart_prd_reg read; /* read registers */
+ struct dart_pwr_reg write; /* write registers */
+};
+
+/*
+ * Structure of saved registers
+ */
+struct dart_sv_reg
+{
+ volatile unsigned char sv_mr1[MAXPORTS]; /* mode register 1 a */
+ volatile unsigned char sv_mr2[MAXPORTS]; /* mode register 2 a */
+ volatile unsigned char sv_csr[MAXPORTS]; /* clock-select register a*/
+ volatile unsigned char sv_cr[MAXPORTS]; /* command register a */
+ volatile unsigned char sv_acr; /* auxialiary control register*/
+ volatile unsigned char sv_imr; /* interrupt mask register */
+ volatile unsigned char sv_ivr; /* interrupt vector register */
+};
+
+/* defines for receiver and DCD scanner */
+#define M681CSCAN 2 /* clock ticks for character scan */
+#define M681_CHAR 01 /* character arrived flag (ut_work) */
+#define M681_ACT 02 /* character in buffer flag (ut_work) */
+#define M681_DCD 04 /* DCD wait flag (ut_work) */
+
+
+/********************* SPECIAL IOCTL COMMAND DEFINITIONS ******************/
+/* HWHAND ioctls same as in MVME331 driver */
+#define MSETHWHAND (('m'<<8)+20) /* set hardware handshake */
+#define MCLEARHWHAND (('m'<<8)+21) /* clear hardware handshake */
+#define MGETHWHAND (('m'<<8)+22) /* get hardware handshake mode */
+
+#define M681STATUS (('m'<<8)+40 ) /* get status of duarts */
+#define M681GETSTAT (('m'<<8)+42 ) /* get statistics */
+
+#ifdef STATISTICS
+struct dart_stat {
+ int open_cnt; /* count of open calls */
+ int intr_cnt; /* count of interrupts */
+ int tx_cnt; /* count of transmitted characters */
+ int rx_cnt; /* count of received characters */
+ int brk_cnt; /* count of break events */
+ int rovrn_cnt; /* count of overruns */
+ int frerr_cnt; /* count of frame errors */
+ int perr_cnt; /* count of parity errors */
+ int rxoff_cnt; /* count of received XOFF chars */
+ int rxon_cnt; /* count of received XON chars */
+ int txoff_cnt; /* count of transmitted XOFF chars */
+ int txon_cnt; /* count of transmitted XON chars */
+};
+#endif
+
+
+