From cea12c1dcfa04f8043e1b8330fca690fabf3beee Mon Sep 17 00:00:00 2001 From: pefo Date: Wed, 4 Sep 1996 21:18:19 +0000 Subject: [PATCH] Some changes for new arc boxes --- sys/arch/arc/arc/machdep.c | 148 ++++++++++++++++++++++------------ sys/arch/arc/dev/pccons.c | 101 ++++++++++++++--------- sys/arch/arc/include/kbdreg.h | 10 +-- sys/arch/arc/include/pte.h | 3 +- sys/arch/arc/pica/pica.h | 10 +-- 5 files changed, 174 insertions(+), 98 deletions(-) diff --git a/sys/arch/arc/arc/machdep.c b/sys/arch/arc/arc/machdep.c index 5d0d0d1efe5..c7669b06208 100644 --- a/sys/arch/arc/arc/machdep.c +++ b/sys/arch/arc/arc/machdep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: machdep.c,v 1.8 1996/09/02 21:33:29 imp Exp $ */ +/* $OpenBSD: machdep.c,v 1.9 1996/09/04 21:18:19 pefo Exp $ */ /* * Copyright (c) 1988 University of Utah. * Copyright (c) 1992, 1993 @@ -38,7 +38,7 @@ * SUCH DAMAGE. * * from: @(#)machdep.c 8.3 (Berkeley) 1/12/94 - * $Id: machdep.c,v 1.8 1996/09/02 21:33:29 imp Exp $ + * $Id: machdep.c,v 1.9 1996/09/04 21:18:19 pefo Exp $ */ /* from: Utah Hdr: machdep.c 1.63 91/04/24 */ @@ -89,8 +89,9 @@ #include -#include #include +#include +#include #include @@ -142,6 +143,9 @@ int (*Mach_spltty)() = splhigh; int (*Mach_splclock)() = splhigh; int (*Mach_splstatclock)() = splhigh; +static void tlb_init_pica(); +static void tlb_init_tyne(); + void vid_print_string(const char *str); void vid_putchar(dev_t dev, char c); @@ -182,6 +186,8 @@ mips_init(argc, argv, code) cputype = ACER_PICA_61; /* FIXME find systemtype */ + cputype = DESKSTATION_TYNE; /* FIXME find systemtype */ + /* * Get config register now as mapped from BIOS since we are * going to demap these addresses later. We want as may TLB @@ -189,13 +195,21 @@ mips_init(argc, argv, code) */ switch (cputype) { - case ACER_PICA_61: /* ALI PICA 61 */ - memcfg = in32(PICA_MEMORY_SIZE_REG); - brdcfg = in32(PICA_CONFIG_REG); - picacommon: + case ACER_PICA_61: /* ALI PICA 61 and MAGNUM is almost the */ + case MAGNUM: /* Same kind of hardware. NEC goes here too */ + if(cputype == MAGNUM) { + /* XXX this is likely broken */ + memcfg = in32(R4030_SYS_CONFIG); + strcpy(cpu_model, "MIPS Magnum"); + } + else { + memcfg = in32(PICA_MEMORY_SIZE_REG); + brdcfg = in32(PICA_CONFIG_REG); + strcpy(cpu_model, "Acer Pica-61"); + } isa_io_base = PICA_V_ISA_IO; isa_mem_base = PICA_V_ISA_MEM; - strcpy(cpu_model, "ACER PICA-61"); + /* * Set up interrupt handling and I/O addresses. */ @@ -228,14 +242,6 @@ mips_init(argc, argv, code) mem_layout[2].mem_start = 0x0; break; - case MAGNUM: - strcpy(cpu_model, "MIPS MAGNUM"); - - /* XXX this is likely broken */ - memcfg = in32(R4030_SYS_CONFIG); - goto picacommon; - break; - case DESKSTATION_RPC44: strcpy(cpu_model, "Deskstation rPC44"); @@ -250,9 +256,11 @@ mips_init(argc, argv, code) case DESKSTATION_TYNE: strcpy(cpu_model, "Deskstation Tyne"); + isa_io_base = TYNE_V_ISA_IO; + isa_mem_base = TYNE_V_ISA_MEM; /*XXX Need to find out how to size mem */ - physmem = 1024 * 1024 * 32; + physmem = 1024 * 1024 * 16; mem_layout[0].mem_start = 0x00100000; mem_layout[0].mem_size = physmem - mem_layout[0].mem_start; mem_layout[1].mem_start = 0x00020000; @@ -261,12 +269,13 @@ mips_init(argc, argv, code) break; default: +/*XXX printf doesn't work here .... use bios?? */ printf("kernel not configured for systype 0x%x\n", i); boot(RB_HALT | RB_NOSYNC); } physmem = btoc(physmem); - /* look at argv[0] and compute bootdev */ + /* look at argv[0] and compute bootdev for autoconfig setup */ makebootdev(argv[0]); /* @@ -326,41 +335,18 @@ mips_init(argc, argv, code) R4K_SetWIRED(0); R4K_TLBFlush(); R4K_SetWIRED(VMWIRED_ENTRIES); + + switch (cputype) { + case ACER_PICA_61: + case MAGNUM: + tlb_init_pica(); + break; - /* - * Set up mapping for hardware the way we want it! - */ - - tlb.tlb_mask = PG_SIZE_256K; - tlb.tlb_hi = vad_to_vpn(R4030_V_LOCAL_IO_BASE); - tlb.tlb_lo0 = vad_to_pfn(R4030_P_LOCAL_IO_BASE) | PG_IOPAGE; - tlb.tlb_lo1 = vad_to_pfn(PICA_P_INT_SOURCE) | PG_IOPAGE; - R4K_TLBWriteIndexed(1, &tlb); + case DESKSTATION_TYNE: + tlb_init_tyne(); + break; + } - tlb.tlb_mask = PG_SIZE_1M; - tlb.tlb_hi = vad_to_vpn(PICA_V_LOCAL_VIDEO_CTRL); - tlb.tlb_lo0 = vad_to_pfn(PICA_P_LOCAL_VIDEO_CTRL) | PG_IOPAGE; - tlb.tlb_lo1 = vad_to_pfn(PICA_P_LOCAL_VIDEO_CTRL + PICA_S_LOCAL_VIDEO_CTRL/2) | PG_IOPAGE; - R4K_TLBWriteIndexed(2, &tlb); - - tlb.tlb_mask = PG_SIZE_1M; - tlb.tlb_hi = vad_to_vpn(PICA_V_EXTND_VIDEO_CTRL); - tlb.tlb_lo0 = vad_to_pfn(PICA_P_EXTND_VIDEO_CTRL) | PG_IOPAGE; - tlb.tlb_lo1 = vad_to_pfn(PICA_P_EXTND_VIDEO_CTRL + PICA_S_EXTND_VIDEO_CTRL/2) | PG_IOPAGE; - R4K_TLBWriteIndexed(3, &tlb); - - tlb.tlb_mask = PG_SIZE_4M; - tlb.tlb_hi = vad_to_vpn(PICA_V_LOCAL_VIDEO); - tlb.tlb_lo0 = vad_to_pfn(PICA_P_LOCAL_VIDEO) | PG_IOPAGE; - tlb.tlb_lo1 = vad_to_pfn(PICA_P_LOCAL_VIDEO + PICA_S_LOCAL_VIDEO/2) | PG_IOPAGE; - R4K_TLBWriteIndexed(4, &tlb); - - tlb.tlb_mask = PG_SIZE_16M; - tlb.tlb_hi = vad_to_vpn(PICA_V_ISA_IO); - tlb.tlb_lo0 = vad_to_pfn(PICA_P_ISA_IO) | PG_IOPAGE; - tlb.tlb_lo1 = vad_to_pfn(PICA_P_ISA_MEM) | PG_IOPAGE; - R4K_TLBWriteIndexed(5, &tlb); - /* * Init mapping for u page(s) for proc[0], pm_tlbpid 1. */ @@ -500,6 +486,66 @@ mips_init(argc, argv, code) pmap_bootstrap((vm_offset_t)v); } +void +tlb_init_pica() +{ + struct tlb tlb; + + tlb.tlb_mask = PG_SIZE_256K; + tlb.tlb_hi = vad_to_vpn(R4030_V_LOCAL_IO_BASE); + tlb.tlb_lo0 = vad_to_pfn(R4030_P_LOCAL_IO_BASE) | PG_IOPAGE; + tlb.tlb_lo1 = vad_to_pfn(PICA_P_INT_SOURCE) | PG_IOPAGE; + R4K_TLBWriteIndexed(1, &tlb); + + tlb.tlb_mask = PG_SIZE_1M; + tlb.tlb_hi = vad_to_vpn(PICA_V_LOCAL_VIDEO_CTRL); + tlb.tlb_lo0 = vad_to_pfn(PICA_P_LOCAL_VIDEO_CTRL) | PG_IOPAGE; + tlb.tlb_lo1 = vad_to_pfn(PICA_P_LOCAL_VIDEO_CTRL + PICA_S_LOCAL_VIDEO_CTRL/2) | PG_IOPAGE; + R4K_TLBWriteIndexed(2, &tlb); + + tlb.tlb_mask = PG_SIZE_1M; + tlb.tlb_hi = vad_to_vpn(PICA_V_EXTND_VIDEO_CTRL); + tlb.tlb_lo0 = vad_to_pfn(PICA_P_EXTND_VIDEO_CTRL) | PG_IOPAGE; + tlb.tlb_lo1 = vad_to_pfn(PICA_P_EXTND_VIDEO_CTRL + PICA_S_EXTND_VIDEO_CTRL/2) | PG_IOPAGE; + R4K_TLBWriteIndexed(3, &tlb); + + tlb.tlb_mask = PG_SIZE_4M; + tlb.tlb_hi = vad_to_vpn(PICA_V_LOCAL_VIDEO); + tlb.tlb_lo0 = vad_to_pfn(PICA_P_LOCAL_VIDEO) | PG_IOPAGE; + tlb.tlb_lo1 = vad_to_pfn(PICA_P_LOCAL_VIDEO + PICA_S_LOCAL_VIDEO/2) | PG_IOPAGE; + R4K_TLBWriteIndexed(4, &tlb); + + tlb.tlb_mask = PG_SIZE_16M; + tlb.tlb_hi = vad_to_vpn(PICA_V_ISA_IO); + tlb.tlb_lo0 = vad_to_pfn(PICA_P_ISA_IO) | PG_IOPAGE; + tlb.tlb_lo1 = vad_to_pfn(PICA_P_ISA_MEM) | PG_IOPAGE; + R4K_TLBWriteIndexed(5, &tlb); +} + +void +tlb_init_tyne() +{ + struct tlb tlb; + + tlb.tlb_mask = PG_SIZE_64K; + tlb.tlb_hi = vad_to_vpn(TYNE_V_BOUNCE); + tlb.tlb_lo0 = vad_to_pfn64(TYNE_P_BOUNCE) | PG_IOPAGE; + tlb.tlb_lo1 = PG_G; + R4K_TLBWriteIndexed(1, &tlb); + + tlb.tlb_mask = PG_SIZE_1M; + tlb.tlb_hi = vad_to_vpn(TYNE_V_ISA_IO); + tlb.tlb_lo0 = vad_to_pfn64(TYNE_P_ISA_IO) | PG_IOPAGE; + tlb.tlb_lo1 = PG_G; + R4K_TLBWriteIndexed(2, &tlb); + + tlb.tlb_mask = PG_SIZE_1M; + tlb.tlb_hi = vad_to_vpn(TYNE_V_ISA_MEM); + tlb.tlb_lo0 = vad_to_pfn64(TYNE_P_ISA_MEM) | PG_IOPAGE; + tlb.tlb_lo1 = PG_G; + R4K_TLBWriteIndexed(3, &tlb); +} + /* * Console initialization: called early on from main, * before vm init or startup. Do enough configuration diff --git a/sys/arch/arc/dev/pccons.c b/sys/arch/arc/dev/pccons.c index d813ba20899..66e6e05d212 100644 --- a/sys/arch/arc/dev/pccons.c +++ b/sys/arch/arc/dev/pccons.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pccons.c,v 1.4 1996/09/01 19:41:16 deraadt Exp $ */ +/* $OpenBSD: pccons.c,v 1.5 1996/09/04 21:18:22 pefo Exp $ */ /* $NetBSD: pccons.c,v 1.89 1995/05/04 19:35:20 cgd Exp $ */ /*- @@ -71,11 +71,15 @@ #include #include #include +#include #include +#include #include #include +extern int cputype; + #define XFREE86_BUG_COMPAT #ifndef BEEP_FREQ @@ -167,7 +171,12 @@ struct cfdriver pms_cd = { #define ROW 25 #define CHR 2 -static unsigned int addr_6845 = MONO_BASE; +static unsigned int addr_6845; +static unsigned int mono_base; +static unsigned int mono_buf; +static unsigned int cga_base; +static unsigned int cga_buf; +static unsigned int kbd_base; char *sget __P((void)); void sput __P((u_char *, int)); @@ -187,7 +196,7 @@ kbd_wait_output() u_int i; for (i = 100000; i; i--) - if ((inb(KBSTATP) & KBS_IBF) == 0) { + if ((inb(kbd_base + KBSTATP) & KBS_IBF) == 0) { KBD_DELAY; return 1; } @@ -200,7 +209,7 @@ kbd_wait_input() u_int i; for (i = 100000; i; i--) - if ((inb(KBSTATP) & KBS_DIB) != 0) { + if ((inb(kbd_base + KBSTATP) & KBS_DIB) != 0) { KBD_DELAY; return 1; } @@ -212,12 +221,12 @@ kbd_flush_input() { u_char c; - while (c = inb(KBSTATP) & 0x03) + while (c = inb(kbd_base + KBSTATP) & 0x03) if ((c & KBS_DIB) == KBS_DIB) { /* XXX - delay is needed to prevent some keyboards from wedging when the system boots */ delay(6); - (void) inb(KBDATAP); + (void) inb(kbd_base + KBDATAP); } } @@ -232,10 +241,10 @@ kbc_get8042cmd() if (!kbd_wait_output()) return -1; - outb(KBCMDP, K_RDCMDBYTE); + outb(kbd_base + KBCMDP, K_RDCMDBYTE); if (!kbd_wait_input()) return -1; - return inb(KBDATAP); + return inb(kbd_base + KBDATAP); } #endif @@ -249,10 +258,10 @@ kbc_put8042cmd(val) if (!kbd_wait_output()) return 0; - outb(KBCMDP, K_LDCMDBYTE); + outb(kbd_base + KBCMDP, K_LDCMDBYTE); if (!kbd_wait_output()) return 0; - outb(KBOUTP, val); + outb(kbd_base + KBOUTP, val); return 1; } @@ -270,7 +279,7 @@ kbd_cmd(val, polling) if(!polling) { i = spltty(); if(kb_oq_get == kb_oq_put) { - outb(KBOUTP, val); + outb(kbd_base + KBOUTP, val); } kb_oq[kb_oq_put] = val; kb_oq_put = (kb_oq_put + 1) & 7; @@ -280,13 +289,13 @@ kbd_cmd(val, polling) else do { if (!kbd_wait_output()) return 0; - outb(KBOUTP, val); + outb(kbd_base + KBOUTP, val); for (i = 100000; i; i--) { - if (inb(KBSTATP) & KBS_DIB) { + if (inb(kbd_base + KBSTATP) & KBS_DIB) { register u_char c; KBD_DELAY; - c = inb(KBDATAP); + c = inb(kbd_base + KBDATAP); if (c == KBR_ACK || c == KBR_ECHO) { return 1; } @@ -425,11 +434,11 @@ pcprobe(parent, cfdata, aux) goto lose; } for (i = 600000; i; i--) - if ((inb(KBSTATP) & KBS_DIB) != 0) { + if ((inb(kbd_base + KBSTATP) & KBS_DIB) != 0) { KBD_DELAY; break; } - if (i == 0 || inb(KBDATAP) != KBR_RSTDONE) { + if (i == 0 || inb(kbd_base + KBDATAP) != KBR_RSTDONE) { printf("pcprobe: reset error %d\n", 2); goto lose; } @@ -603,7 +612,7 @@ pcintr(arg) register struct tty *tp = sc->sc_tty; u_char *cp; - if ((inb(KBSTATP) & KBS_DIB) == 0) + if ((inb(kbd_base + KBSTATP) & KBS_DIB) == 0) return 0; if (polling) return 1; @@ -615,7 +624,7 @@ pcintr(arg) do (*linesw[tp->t_line].l_rint)(*cp++, tp); while (*cp); - } while (inb(KBSTATP) & KBS_DIB); + } while (inb(kbd_base + KBSTATP) & KBS_DIB); return 1; } @@ -776,6 +785,26 @@ pccninit(cp) * For now, don't screw with it. */ /* crtat = 0; */ + switch(cputype) { + + case ACER_PICA_61: + mono_base = PICA_MONO_BASE; + mono_buf = PICA_MONO_BUF; + cga_base = PICA_CGA_BASE; + cga_buf = PICA_CGA_BUF; + kbd_base = PICA_SYS_KBD; + break; + + case DESKSTATION_TYNE: + mono_base = PICA_MONO_BASE; + mono_buf = PICA_MONO_BUF; + cga_base = PICA_CGA_BASE; + cga_buf = PICA_CGA_BUF; + kbd_base = PICA_SYS_KBD; + outb(TYNE_V_ISA_IO + 0x3ce, 6); /* Correct video mode */ + outb(TYNE_V_ISA_IO + 0x3cf, 0xe); + break; + } } /* ARGSUSED */ @@ -805,7 +834,7 @@ pccngetc(dev) do { /* wait for byte */ - while ((inb(KBSTATP) & KBS_DIB) == 0); + while ((inb(kbd_base + KBSTATP) & KBS_DIB) == 0); /* see if it's worthwhile */ cp = sget(); } while (!cp); @@ -912,16 +941,16 @@ sput(cp, n) u_short was; unsigned cursorat; - cp = (u_short *)CGA_BUF; + cp = (u_short *)cga_buf; was = *cp; *cp = (u_short) 0xA55A; if (*cp != 0xA55A) { - cp = (u_short *)MONO_BUF; - addr_6845 = MONO_BASE; + cp = (u_short *)mono_buf; + addr_6845 = mono_base; vs.color = 0; } else { *cp = was; - addr_6845 = CGA_BASE; + addr_6845 = cga_base; vs.color = 1; } @@ -1477,17 +1506,17 @@ sget() top: KBD_DELAY; - dt = inb(KBDATAP); + dt = inb(kbd_base + KBDATAP); switch (dt) { case KBR_ACK: case KBR_ECHO: kb_oq_get = (kb_oq_get + 1) & 7; if(kb_oq_get != kb_oq_put) { - outb(KBOUTP, kb_oq[kb_oq_get]); + outb(kbd_base + KBOUTP, kb_oq[kb_oq_get]); } goto loop; case KBR_RESEND: - outb(KBOUTP, kb_oq[kb_oq_get]); + outb(kbd_base + KBOUTP, kb_oq[kb_oq_get]); goto loop; } @@ -1690,7 +1719,7 @@ printf("keycode %d\n",dt); extended = 0; loop: - if ((inb(KBSTATP) & KBS_DIB) == 0) + if ((inb(kbd_base + KBSTATP) & KBS_DIB) == 0) return 0; goto top; } @@ -1773,9 +1802,9 @@ pms_dev_cmd(value) u_char value; { kbd_flush_input(); - outb(KBCMDP, 0xd4); + outb(kbd_base + KBCMDP, 0xd4); kbd_flush_input(); - outb(KBDATAP, value); + outb(kbd_base + KBDATAP, value); } static inline void @@ -1783,7 +1812,7 @@ pms_aux_cmd(value) u_char value; { kbd_flush_input(); - outb(KBCMDP, value); + outb(kbd_base + KBCMDP, value); } static inline void @@ -1791,9 +1820,9 @@ pms_pit_cmd(value) u_char value; { kbd_flush_input(); - outb(KBCMDP, 0x60); + outb(kbd_base + KBCMDP, 0x60); kbd_flush_input(); - outb(KBDATAP, value); + outb(kbd_base + KBDATAP, value); } int @@ -1811,7 +1840,7 @@ pmsprobe(parent, probe, aux) pms_dev_cmd(KBC_RESET); pms_aux_cmd(PMS_MAGIC_1); delay(10000); - x = inb(KBDATAP); + x = inb(kbd_base + KBDATAP); pms_pit_cmd(PMS_INT_DISABLE); if (x & 0x04) return 0; @@ -2019,20 +2048,20 @@ pmsintr(arg) switch (state) { case 0: - buttons = inb(KBDATAP); + buttons = inb(kbd_base + KBDATAP); if ((buttons & 0xc0) == 0) ++state; break; case 1: - dx = inb(KBDATAP); + dx = inb(kbd_base + KBDATAP); /* Bounding at -127 avoids a bug in XFree86. */ dx = (dx == -128) ? -127 : dx; ++state; break; case 2: - dy = inb(KBDATAP); + dy = inb(kbd_base + KBDATAP); dy = (dy == -128) ? -127 : dy; state = 0; diff --git a/sys/arch/arc/include/kbdreg.h b/sys/arch/arc/include/kbdreg.h index fe61cd72d3c..b15039d21c0 100644 --- a/sys/arch/arc/include/kbdreg.h +++ b/sys/arch/arc/include/kbdreg.h @@ -1,4 +1,4 @@ -/* $OpenBSD: kbdreg.h,v 1.2 1996/07/30 20:24:25 pefo Exp $ */ +/* $OpenBSD: kbdreg.h,v 1.3 1996/09/04 21:18:24 pefo Exp $ */ /* * Copyright (c) 1996 Per Fogelstrom @@ -34,7 +34,7 @@ * */ -#define KBSTATP (PICA_SYS_KBD + 0x61) /* controller status port (I) */ +#define KBSTATP (0x61) /* controller status port (I) */ #define KBS_DIB 0x01 /* data in buffer */ #define KBS_IBF 0x02 /* input buffer low */ #define KBS_WARM 0x04 /* input buffer low */ @@ -44,9 +44,9 @@ #define KBS_RERR 0x40 /* receive error */ #define KBS_PERR 0x80 /* parity error */ -#define KBCMDP (PICA_SYS_KBD + 0x61) /* controller port (O) */ -#define KBDATAP (PICA_SYS_KBD + 0x60) /* data port (I) */ -#define KBOUTP (PICA_SYS_KBD + 0x60) /* data port (O) */ +#define KBCMDP (0x61) /* controller port (O) */ +#define KBDATAP (0x60) /* data port (I) */ +#define KBOUTP (0x60) /* data port (O) */ #define K_RDCMDBYTE 0x20 #define K_LDCMDBYTE 0x60 diff --git a/sys/arch/arc/include/pte.h b/sys/arch/arc/include/pte.h index 523b9d8000a..5ef6c626fd4 100644 --- a/sys/arch/arc/include/pte.h +++ b/sys/arch/arc/include/pte.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pte.h,v 1.1.1.1 1996/06/24 09:07:18 pefo Exp $ */ +/* $OpenBSD: pte.h,v 1.2 1996/09/04 21:18:24 pefo Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -106,6 +106,7 @@ typedef union pt_entry { #define PG_FRAME 0x3fffffc0 #define PG_SHIFT 6 #define vad_to_pfn(x) (((unsigned)(x) >> PG_SHIFT) & PG_FRAME) +#define vad_to_pfn64(x) (((quad_t)(x) >> PG_SHIFT) & PG_FRAME) #define pfn_to_vad(x) (((x) & PG_FRAME) << PG_SHIFT) #define vad_to_vpn(x) ((unsigned)(x) & PG_SVPN) #define vpn_to_vad(x) ((x) & PG_SVPN) diff --git a/sys/arch/arc/pica/pica.h b/sys/arch/arc/pica/pica.h index 4b5089b6085..d1d9b7ecd6b 100644 --- a/sys/arch/arc/pica/pica.h +++ b/sys/arch/arc/pica/pica.h @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * from: @(#)pica.h 8.1 (Berkeley) 6/10/93 - * $Id: pica.h,v 1.2 1996/07/30 20:24:31 pefo Exp $ + * $Id: pica.h,v 1.3 1996/09/04 21:18:25 pefo Exp $ */ /* @@ -155,10 +155,10 @@ /* * Addresses used by various display drivers. */ -#define MONO_BASE (PICA_V_LOCAL_VIDEO_CTRL + 0x3B4) -#define MONO_BUF (PICA_V_LOCAL_VIDEO + 0xB0000) -#define CGA_BASE (PICA_V_LOCAL_VIDEO_CTRL + 0x3D4) -#define CGA_BUF (PICA_V_LOCAL_VIDEO + 0xB8000) +#define PICA_MONO_BASE (PICA_V_LOCAL_VIDEO_CTRL + 0x3B4) +#define PICA_MONO_BUF (PICA_V_LOCAL_VIDEO + 0xB0000) +#define PICA_CGA_BASE (PICA_V_LOCAL_VIDEO_CTRL + 0x3D4) +#define PICA_CGA_BUF (PICA_V_LOCAL_VIDEO + 0xB8000) /* * Interrupt vector descriptor for device on pica bus. -- 2.20.1