Home | History | Annotate | Line # | Download | only in boot
      1  1.15  riastrad /*	$NetBSD: vreset.c,v 1.15 2022/02/16 23:49:26 riastradh Exp $	*/
      2   1.1  sakamoto 
      3   1.1  sakamoto /*
      4   1.1  sakamoto  * Copyright (C) 1995-1997 Gary Thomas (gdt (at) linuxppc.org)
      5   1.1  sakamoto  * All rights reserved.
      6   1.1  sakamoto  *
      7   1.1  sakamoto  * Initialize the VGA control registers to 80x25 text mode.
      8   1.1  sakamoto  *
      9   1.1  sakamoto  * Adapted from a program by:
     10   1.1  sakamoto  *                                      Steve Sellgren
     11   1.1  sakamoto  *                                      San Francisco Indigo Company
     12   1.1  sakamoto  *                                      sfindigo!sellgren (at) uunet.uu.net
     13   1.1  sakamoto  * Adapted for Moto boxes by:
     14   1.1  sakamoto  *                                      Pat Kane & Mark Scott, 1996
     15   1.1  sakamoto  * Fixed for IBM/PowerStack II          Pat Kane 1997
     16   1.1  sakamoto  *
     17   1.1  sakamoto  * Redistribution and use in source and binary forms, with or without
     18   1.1  sakamoto  * modification, are permitted provided that the following conditions
     19   1.1  sakamoto  * are met:
     20   1.1  sakamoto  * 1. Redistributions of source code must retain the above copyright
     21   1.1  sakamoto  *    notice, this list of conditions and the following disclaimer.
     22   1.1  sakamoto  * 2. Redistributions in binary form must reproduce the above copyright
     23   1.1  sakamoto  *    notice, this list of conditions and the following disclaimer in the
     24   1.1  sakamoto  *    documentation and/or other materials provided with the distribution.
     25   1.1  sakamoto  * 3. All advertising materials mentioning features or use of this software
     26   1.1  sakamoto  *    must display the following acknowledgement:
     27   1.1  sakamoto  *      This product includes software developed by Gary Thomas.
     28   1.1  sakamoto  * 4. The name of the author may not be used to endorse or promote products
     29   1.1  sakamoto  *    derived from this software without specific prior written permission.
     30   1.1  sakamoto  *
     31   1.1  sakamoto  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     32   1.1  sakamoto  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     33   1.1  sakamoto  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     34   1.1  sakamoto  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     35   1.1  sakamoto  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     36   1.1  sakamoto  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     37   1.1  sakamoto  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     38   1.1  sakamoto  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     39   1.1  sakamoto  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     40   1.1  sakamoto  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     41   1.1  sakamoto  */
     42   1.1  sakamoto 
     43   1.1  sakamoto #ifdef CONS_VGA
     44   1.6  junyoung #include <lib/libsa/stand.h>
     45   1.4  sakamoto #include "boot.h"
     46   1.4  sakamoto #include "iso_font.h"
     47   1.4  sakamoto 
     48   1.1  sakamoto /*
     49   1.5  junyoung  * VGA Register
     50   1.1  sakamoto  */
     51   1.1  sakamoto struct VgaRegs
     52   1.1  sakamoto {
     53   1.4  sakamoto 	u_short io_port;
     54   1.4  sakamoto 	u_char io_index;
     55   1.4  sakamoto 	u_char io_value;
     56   1.1  sakamoto };
     57   1.1  sakamoto 
     58   1.1  sakamoto /*
     59   1.1  sakamoto  * Default console text mode registers  used to reset
     60   1.1  sakamoto  * graphics adapter.
     61   1.1  sakamoto  */
     62   1.1  sakamoto #define NREGS 54
     63   1.1  sakamoto #define ENDMK  0xFFFF  /* End marker */
     64   1.1  sakamoto 
     65  1.11  kiyohara #define S3Vendor	0x5333
     66  1.11  kiyohara #define CirrusVendor	0x1013
     67   1.1  sakamoto #define DiamondVendor	0x100E
     68   1.1  sakamoto #define MatroxVendor	0x102B
     69   1.1  sakamoto 
     70   1.1  sakamoto struct VgaRegs GenVgaTextRegs[NREGS+1] = {
     71   1.5  junyoung /*      port    index   value */
     72   1.5  junyoung 	/* SR Regs */
     73   1.5  junyoung         { 0x3c4, 0x1, 0x0 },
     74   1.5  junyoung         { 0x3c4, 0x2, 0x3 },
     75   1.5  junyoung         { 0x3c4, 0x3, 0x0 },
     76   1.5  junyoung         { 0x3c4, 0x4, 0x2 },
     77   1.5  junyoung 	/* CR Regs */
     78   1.5  junyoung         { 0x3d4, 0x0, 0x5f },
     79   1.5  junyoung         { 0x3d4, 0x1, 0x4f },
     80   1.5  junyoung         { 0x3d4, 0x2, 0x50 },
     81   1.5  junyoung         { 0x3d4, 0x3, 0x82 },
     82   1.5  junyoung         { 0x3d4, 0x4, 0x55 },
     83   1.5  junyoung         { 0x3d4, 0x5, 0x81 },
     84   1.5  junyoung         { 0x3d4, 0x6, 0xbf },
     85   1.5  junyoung         { 0x3d4, 0x7, 0x1f },
     86   1.5  junyoung         { 0x3d4, 0x8, 0x00 },
     87   1.5  junyoung         { 0x3d4, 0x9, 0x4f },
     88   1.5  junyoung         { 0x3d4, 0xa, 0x0d },
     89   1.5  junyoung         { 0x3d4, 0xb, 0x0e },
     90   1.5  junyoung         { 0x3d4, 0xc, 0x00 },
     91   1.5  junyoung         { 0x3d4, 0xd, 0x00 },
     92   1.5  junyoung         { 0x3d4, 0xe, 0x00 },
     93   1.5  junyoung         { 0x3d4, 0xf, 0x00 },
     94   1.5  junyoung         { 0x3d4, 0x10, 0x9c },
     95   1.5  junyoung         { 0x3d4, 0x11, 0x8e },
     96   1.5  junyoung         { 0x3d4, 0x12, 0x8f },
     97   1.5  junyoung         { 0x3d4, 0x13, 0x28 },
     98   1.5  junyoung         { 0x3d4, 0x14, 0x1f },
     99   1.5  junyoung         { 0x3d4, 0x15, 0x96 },
    100   1.5  junyoung         { 0x3d4, 0x16, 0xb9 },
    101   1.5  junyoung         { 0x3d4, 0x17, 0xa3 },
    102   1.5  junyoung 	/* GR Regs */
    103   1.5  junyoung         { 0x3ce, 0x0, 0x0 },
    104   1.5  junyoung         { 0x3ce, 0x1, 0x0 },
    105   1.5  junyoung         { 0x3ce, 0x2, 0x0 },
    106   1.5  junyoung         { 0x3ce, 0x3, 0x0 },
    107   1.5  junyoung         { 0x3ce, 0x4, 0x0 },
    108   1.5  junyoung         { 0x3ce, 0x5, 0x10 },
    109   1.5  junyoung         { 0x3ce, 0x6, 0xe },
    110   1.5  junyoung         { 0x3ce, 0x7, 0x0 },
    111   1.5  junyoung         { 0x3ce, 0x8, 0xff },
    112   1.5  junyoung         { ENDMK },
    113   1.1  sakamoto };
    114   1.1  sakamoto 
    115   1.1  sakamoto struct VgaRegs S3TextRegs[NREGS+1] = {
    116   1.5  junyoung /*	port	index	value */
    117   1.5  junyoung 	/* SR Regs */
    118   1.5  junyoung 	{ 0x3c4, 0x1, 0x0 },
    119   1.5  junyoung 	{ 0x3c4, 0x2, 0x3 },
    120   1.5  junyoung 	{ 0x3c4, 0x3, 0x0 },
    121   1.5  junyoung 	{ 0x3c4, 0x4, 0x2 },
    122   1.5  junyoung 	/* CR Regs */
    123   1.5  junyoung 	{ 0x3d4, 0x0, 0x5f },
    124   1.5  junyoung 	{ 0x3d4, 0x1, 0x4f },
    125   1.5  junyoung 	{ 0x3d4, 0x2, 0x50 },
    126   1.5  junyoung 	{ 0x3d4, 0x3, 0x82 },
    127   1.5  junyoung 	{ 0x3d4, 0x4, 0x55 },
    128   1.5  junyoung 	{ 0x3d4, 0x5, 0x81 },
    129   1.5  junyoung 	{ 0x3d4, 0x6, 0xbf },
    130   1.5  junyoung 	{ 0x3d4, 0x7, 0x1f },
    131   1.5  junyoung 	{ 0x3d4, 0x8, 0x00 },
    132   1.5  junyoung 	{ 0x3d4, 0x9, 0x4f },
    133   1.5  junyoung 	{ 0x3d4, 0xa, 0x0d },
    134   1.5  junyoung 	{ 0x3d4, 0xb, 0x0e },
    135   1.5  junyoung 	{ 0x3d4, 0xc, 0x00 },
    136   1.5  junyoung 	{ 0x3d4, 0xd, 0x00 },
    137   1.5  junyoung 	{ 0x3d4, 0xe, 0x00 },
    138   1.5  junyoung 	{ 0x3d4, 0xf, 0x00 },
    139   1.5  junyoung 	{ 0x3d4, 0x10, 0x9c },
    140   1.5  junyoung 	{ 0x3d4, 0x11, 0x8e },
    141   1.5  junyoung 	{ 0x3d4, 0x12, 0x8f },
    142   1.5  junyoung 	{ 0x3d4, 0x13, 0x28 },
    143   1.5  junyoung 	{ 0x3d4, 0x14, 0x1f },
    144   1.5  junyoung 	{ 0x3d4, 0x15, 0x96 },
    145   1.5  junyoung 	{ 0x3d4, 0x16, 0xb9 },
    146   1.5  junyoung 	{ 0x3d4, 0x17, 0xa3 },
    147   1.5  junyoung 	/* GR Regs */
    148   1.5  junyoung 	{ 0x3ce, 0x0, 0x0 },
    149   1.5  junyoung 	{ 0x3ce, 0x1, 0x0 },
    150   1.5  junyoung 	{ 0x3ce, 0x2, 0x0 },
    151   1.5  junyoung 	{ 0x3ce, 0x3, 0x0 },
    152   1.5  junyoung 	{ 0x3ce, 0x4, 0x0 },
    153   1.5  junyoung 	{ 0x3ce, 0x5, 0x10 },
    154   1.5  junyoung 	{ 0x3ce, 0x6, 0xe },
    155   1.5  junyoung 	{ 0x3ce, 0x7, 0x0 },
    156   1.5  junyoung 	{ 0x3ce, 0x8, 0xff },
    157   1.4  sakamoto         { ENDMK }
    158   1.1  sakamoto };
    159   1.1  sakamoto 
    160   1.5  junyoung struct RGBColors {
    161   1.5  junyoung 	u_char r, g, b;
    162   1.1  sakamoto };
    163   1.1  sakamoto 
    164   1.1  sakamoto /*
    165   1.1  sakamoto  * Default console text mode color table.
    166   1.1  sakamoto  * These values were obtained by booting Linux with
    167   1.5  junyoung  * text mode firmware & then dumping the registers.
    168   1.1  sakamoto  */
    169   1.5  junyoung struct RGBColors TextCLUT[256] = {
    170   1.5  junyoung /*	red	green	blue */
    171   1.4  sakamoto 	{ 0x0,	0x0,	0x0 },
    172   1.4  sakamoto 	{ 0x0,	0x0,	0x2a },
    173   1.4  sakamoto 	{ 0x0,	0x2a,	0x0 },
    174   1.4  sakamoto 	{ 0x0,	0x2a,	0x2a },
    175   1.4  sakamoto 	{ 0x2a,	0x0,	0x0 },
    176   1.4  sakamoto 	{ 0x2a,	0x0,	0x2a },
    177   1.4  sakamoto 	{ 0x2a,	0x2a,	0x0 },
    178   1.4  sakamoto 	{ 0x2a,	0x2a,	0x2a },
    179   1.4  sakamoto 	{ 0x0,	0x0,	0x15 },
    180   1.4  sakamoto 	{ 0x0,	0x0,	0x3f },
    181   1.4  sakamoto 	{ 0x0,	0x2a,	0x15 },
    182   1.4  sakamoto 	{ 0x0,	0x2a,	0x3f },
    183   1.4  sakamoto 	{ 0x2a,	0x0,	0x15 },
    184   1.4  sakamoto 	{ 0x2a,	0x0,	0x3f },
    185   1.4  sakamoto 	{ 0x2a,	0x2a,	0x15 },
    186   1.4  sakamoto 	{ 0x2a,	0x2a,	0x3f },
    187   1.4  sakamoto 	{ 0x0,	0x15,	0x0 },
    188   1.4  sakamoto 	{ 0x0,	0x15,	0x2a },
    189   1.4  sakamoto 	{ 0x0,	0x3f,	0x0 },
    190   1.4  sakamoto 	{ 0x0,	0x3f,	0x2a },
    191   1.4  sakamoto 	{ 0x2a,	0x15,	0x0 },
    192   1.4  sakamoto 	{ 0x2a,	0x15,	0x2a },
    193   1.4  sakamoto 	{ 0x2a,	0x3f,	0x0 },
    194   1.4  sakamoto 	{ 0x2a,	0x3f,	0x2a },
    195   1.4  sakamoto 	{ 0x0,	0x15,	0x15 },
    196   1.4  sakamoto 	{ 0x0,	0x15,	0x3f },
    197   1.4  sakamoto 	{ 0x0,	0x3f,	0x15 },
    198   1.4  sakamoto 	{ 0x0,	0x3f,	0x3f },
    199   1.4  sakamoto 	{ 0x2a,	0x15,	0x15 },
    200   1.4  sakamoto 	{ 0x2a,	0x15,	0x3f },
    201   1.4  sakamoto 	{ 0x2a,	0x3f,	0x15 },
    202   1.4  sakamoto 	{ 0x2a,	0x3f,	0x3f },
    203   1.4  sakamoto 	{ 0x15,	0x0,	0x0 },
    204   1.4  sakamoto 	{ 0x15,	0x0,	0x2a },
    205   1.4  sakamoto 	{ 0x15,	0x2a,	0x0 },
    206   1.4  sakamoto 	{ 0x15,	0x2a,	0x2a },
    207   1.4  sakamoto 	{ 0x3f,	0x0,	0x0 },
    208   1.4  sakamoto 	{ 0x3f,	0x0,	0x2a },
    209   1.4  sakamoto 	{ 0x3f,	0x2a,	0x0 },
    210   1.4  sakamoto 	{ 0x3f,	0x2a,	0x2a },
    211   1.4  sakamoto 	{ 0x15,	0x0,	0x15 },
    212   1.4  sakamoto 	{ 0x15,	0x0,	0x3f },
    213   1.4  sakamoto 	{ 0x15,	0x2a,	0x15 },
    214   1.4  sakamoto 	{ 0x15,	0x2a,	0x3f },
    215   1.4  sakamoto 	{ 0x3f,	0x0,	0x15 },
    216   1.4  sakamoto 	{ 0x3f,	0x0,	0x3f },
    217   1.4  sakamoto 	{ 0x3f,	0x2a,	0x15 },
    218   1.4  sakamoto 	{ 0x3f,	0x2a,	0x3f },
    219   1.4  sakamoto 	{ 0x15,	0x15,	0x0 },
    220   1.4  sakamoto 	{ 0x15,	0x15,	0x2a },
    221   1.4  sakamoto 	{ 0x15,	0x3f,	0x0 },
    222   1.4  sakamoto 	{ 0x15,	0x3f,	0x2a },
    223   1.4  sakamoto 	{ 0x3f,	0x15,	0x0 },
    224   1.4  sakamoto 	{ 0x3f,	0x15,	0x2a },
    225   1.4  sakamoto 	{ 0x3f,	0x3f,	0x0 },
    226   1.4  sakamoto 	{ 0x3f,	0x3f,	0x2a },
    227   1.4  sakamoto 	{ 0x15,	0x15,	0x15 },
    228   1.4  sakamoto 	{ 0x15,	0x15,	0x3f },
    229   1.4  sakamoto 	{ 0x15,	0x3f,	0x15 },
    230   1.4  sakamoto 	{ 0x15,	0x3f,	0x3f },
    231   1.4  sakamoto 	{ 0x3f,	0x15,	0x15 },
    232   1.4  sakamoto 	{ 0x3f,	0x15,	0x3f },
    233   1.4  sakamoto 	{ 0x3f,	0x3f,	0x15 },
    234   1.4  sakamoto 	{ 0x3f,	0x3f,	0x3f },
    235   1.4  sakamoto 	{ 0x39,	0xc,	0x5 },
    236   1.4  sakamoto 	{ 0x15,	0x2c,	0xf },
    237   1.4  sakamoto 	{ 0x26,	0x10,	0x3d },
    238   1.4  sakamoto 	{ 0x29,	0x29,	0x38 },
    239   1.4  sakamoto 	{ 0x4,	0x1a,	0xe },
    240   1.4  sakamoto 	{ 0x2,	0x1e,	0x3a },
    241   1.4  sakamoto 	{ 0x3c,	0x25,	0x33 },
    242   1.4  sakamoto 	{ 0x3c,	0xc,	0x2c },
    243   1.4  sakamoto 	{ 0x3f,	0x3,	0x2b },
    244   1.4  sakamoto 	{ 0x1c,	0x9,	0x13 },
    245   1.4  sakamoto 	{ 0x25,	0x2a,	0x35 },
    246   1.4  sakamoto 	{ 0x1e,	0xa,	0x38 },
    247   1.4  sakamoto 	{ 0x24,	0x8,	0x3 },
    248   1.4  sakamoto 	{ 0x3,	0xe,	0x36 },
    249   1.4  sakamoto 	{ 0xc,	0x6,	0x2a },
    250   1.4  sakamoto 	{ 0x26,	0x3,	0x32 },
    251   1.4  sakamoto 	{ 0x5,	0x2f,	0x33 },
    252   1.4  sakamoto 	{ 0x3c,	0x35,	0x2f },
    253   1.4  sakamoto 	{ 0x2d,	0x26,	0x3e },
    254   1.4  sakamoto 	{ 0xd,	0xa,	0x10 },
    255   1.4  sakamoto 	{ 0x25,	0x3c,	0x11 },
    256   1.4  sakamoto 	{ 0xd,	0x4,	0x2e },
    257   1.4  sakamoto 	{ 0x5,	0x19,	0x3e },
    258   1.4  sakamoto 	{ 0xc,	0x13,	0x34 },
    259   1.4  sakamoto 	{ 0x2b,	0x6,	0x24 },
    260   1.4  sakamoto 	{ 0x4,	0x3,	0xd },
    261   1.4  sakamoto 	{ 0x2f,	0x3c,	0xc },
    262   1.4  sakamoto 	{ 0x2a,	0x37,	0x1f },
    263   1.4  sakamoto 	{ 0xf,	0x12,	0x38 },
    264   1.4  sakamoto 	{ 0x38,	0xe,	0x2a },
    265   1.4  sakamoto 	{ 0x12,	0x2f,	0x19 },
    266   1.4  sakamoto 	{ 0x29,	0x2e,	0x31 },
    267   1.4  sakamoto 	{ 0x25,	0x13,	0x3e },
    268   1.4  sakamoto 	{ 0x33,	0x3e,	0x33 },
    269   1.4  sakamoto 	{ 0x1d,	0x2c,	0x25 },
    270   1.4  sakamoto 	{ 0x15,	0x15,	0x5 },
    271   1.4  sakamoto 	{ 0x32,	0x25,	0x39 },
    272   1.4  sakamoto 	{ 0x1a,	0x7,	0x1f },
    273   1.4  sakamoto 	{ 0x13,	0xe,	0x1d },
    274   1.4  sakamoto 	{ 0x36,	0x17,	0x34 },
    275   1.4  sakamoto 	{ 0xf,	0x15,	0x23 },
    276   1.4  sakamoto 	{ 0x2,	0x35,	0xd },
    277   1.4  sakamoto 	{ 0x15,	0x3f,	0xc },
    278   1.4  sakamoto 	{ 0x14,	0x2f,	0xf },
    279   1.4  sakamoto 	{ 0x19,	0x21,	0x3e },
    280   1.4  sakamoto 	{ 0x27,	0x11,	0x2f },
    281   1.4  sakamoto 	{ 0x38,	0x3f,	0x3c },
    282   1.4  sakamoto 	{ 0x36,	0x2d,	0x15 },
    283   1.4  sakamoto 	{ 0x16,	0x17,	0x2 },
    284   1.4  sakamoto 	{ 0x1,	0xa,	0x3d },
    285   1.4  sakamoto 	{ 0x1b,	0x11,	0x3f },
    286   1.4  sakamoto 	{ 0x21,	0x3c,	0xd },
    287   1.4  sakamoto 	{ 0x1a,	0x39,	0x3d },
    288   1.4  sakamoto 	{ 0x8,	0xe,	0xe },
    289   1.4  sakamoto 	{ 0x22,	0x21,	0x23 },
    290   1.4  sakamoto 	{ 0x1e,	0x30,	0x5 },
    291   1.4  sakamoto 	{ 0x1f,	0x22,	0x3d },
    292   1.4  sakamoto 	{ 0x1e,	0x2f,	0xa },
    293   1.4  sakamoto 	{ 0x0,	0x1c,	0xe },
    294   1.4  sakamoto 	{ 0x0,	0x1c,	0x15 },
    295   1.4  sakamoto 	{ 0x0,	0x1c,	0x1c },
    296   1.4  sakamoto 	{ 0x0,	0x15,	0x1c },
    297   1.4  sakamoto 	{ 0x0,	0xe,	0x1c },
    298   1.4  sakamoto 	{ 0x0,	0x7,	0x1c },
    299   1.4  sakamoto 	{ 0xe,	0xe,	0x1c },
    300   1.4  sakamoto 	{ 0x11,	0xe,	0x1c },
    301   1.4  sakamoto 	{ 0x15,	0xe,	0x1c },
    302   1.4  sakamoto 	{ 0x18,	0xe,	0x1c },
    303   1.4  sakamoto 	{ 0x1c,	0xe,	0x1c },
    304   1.4  sakamoto 	{ 0x1c,	0xe,	0x18 },
    305   1.4  sakamoto 	{ 0x1c,	0xe,	0x15 },
    306   1.4  sakamoto 	{ 0x1c,	0xe,	0x11 },
    307   1.4  sakamoto 	{ 0x1c,	0xe,	0xe },
    308   1.4  sakamoto 	{ 0x1c,	0x11,	0xe },
    309   1.4  sakamoto 	{ 0x1c,	0x15,	0xe },
    310   1.4  sakamoto 	{ 0x1c,	0x18,	0xe },
    311   1.4  sakamoto 	{ 0x1c,	0x1c,	0xe },
    312   1.4  sakamoto 	{ 0x18,	0x1c,	0xe },
    313   1.4  sakamoto 	{ 0x15,	0x1c,	0xe },
    314   1.4  sakamoto 	{ 0x11,	0x1c,	0xe },
    315   1.4  sakamoto 	{ 0xe,	0x1c,	0xe },
    316   1.4  sakamoto 	{ 0xe,	0x1c,	0x11 },
    317   1.4  sakamoto 	{ 0xe,	0x1c,	0x15 },
    318   1.4  sakamoto 	{ 0xe,	0x1c,	0x18 },
    319   1.4  sakamoto 	{ 0xe,	0x1c,	0x1c },
    320   1.4  sakamoto 	{ 0xe,	0x18,	0x1c },
    321   1.4  sakamoto 	{ 0xe,	0x15,	0x1c },
    322   1.4  sakamoto 	{ 0xe,	0x11,	0x1c },
    323   1.4  sakamoto 	{ 0x14,	0x14,	0x1c },
    324   1.4  sakamoto 	{ 0x16,	0x14,	0x1c },
    325   1.4  sakamoto 	{ 0x18,	0x14,	0x1c },
    326   1.4  sakamoto 	{ 0x1a,	0x14,	0x1c },
    327   1.4  sakamoto 	{ 0x1c,	0x14,	0x1c },
    328   1.4  sakamoto 	{ 0x1c,	0x14,	0x1a },
    329   1.4  sakamoto 	{ 0x1c,	0x14,	0x18 },
    330   1.4  sakamoto 	{ 0x1c,	0x14,	0x16 },
    331   1.4  sakamoto 	{ 0x1c,	0x14,	0x14 },
    332   1.4  sakamoto 	{ 0x1c,	0x16,	0x14 },
    333   1.4  sakamoto 	{ 0x1c,	0x18,	0x14 },
    334   1.4  sakamoto 	{ 0x1c,	0x1a,	0x14 },
    335   1.4  sakamoto 	{ 0x1c,	0x1c,	0x14 },
    336   1.4  sakamoto 	{ 0x1a,	0x1c,	0x14 },
    337   1.4  sakamoto 	{ 0x18,	0x1c,	0x14 },
    338   1.4  sakamoto 	{ 0x16,	0x1c,	0x14 },
    339   1.4  sakamoto 	{ 0x14,	0x1c,	0x14 },
    340   1.4  sakamoto 	{ 0x14,	0x1c,	0x16 },
    341   1.4  sakamoto 	{ 0x14,	0x1c,	0x18 },
    342   1.4  sakamoto 	{ 0x14,	0x1c,	0x1a },
    343   1.4  sakamoto 	{ 0x14,	0x1c,	0x1c },
    344   1.4  sakamoto 	{ 0x14,	0x1a,	0x1c },
    345   1.4  sakamoto 	{ 0x14,	0x18,	0x1c },
    346   1.4  sakamoto 	{ 0x14,	0x16,	0x1c },
    347   1.4  sakamoto 	{ 0x0,	0x0,	0x10 },
    348   1.4  sakamoto 	{ 0x4,	0x0,	0x10 },
    349   1.4  sakamoto 	{ 0x8,	0x0,	0x10 },
    350   1.4  sakamoto 	{ 0xc,	0x0,	0x10 },
    351   1.4  sakamoto 	{ 0x10,	0x0,	0x10 },
    352   1.4  sakamoto 	{ 0x10,	0x0,	0xc },
    353   1.4  sakamoto 	{ 0x10,	0x0,	0x8 },
    354   1.4  sakamoto 	{ 0x10,	0x0,	0x4 },
    355   1.4  sakamoto 	{ 0x10,	0x0,	0x0 },
    356   1.4  sakamoto 	{ 0x10,	0x4,	0x0 },
    357   1.4  sakamoto 	{ 0x10,	0x8,	0x0 },
    358   1.4  sakamoto 	{ 0x10,	0xc,	0x0 },
    359   1.4  sakamoto 	{ 0x10,	0x10,	0x0 },
    360   1.4  sakamoto 	{ 0xc,	0x10,	0x0 },
    361   1.4  sakamoto 	{ 0x8,	0x10,	0x0 },
    362   1.4  sakamoto 	{ 0x4,	0x10,	0x0 },
    363   1.4  sakamoto 	{ 0x0,	0x10,	0x0 },
    364   1.4  sakamoto 	{ 0x0,	0x10,	0x4 },
    365   1.4  sakamoto 	{ 0x0,	0x10,	0x8 },
    366   1.4  sakamoto 	{ 0x0,	0x10,	0xc },
    367   1.4  sakamoto 	{ 0x0,	0x10,	0x10 },
    368   1.4  sakamoto 	{ 0x0,	0xc,	0x10 },
    369   1.4  sakamoto 	{ 0x0,	0x8,	0x10 },
    370   1.4  sakamoto 	{ 0x0,	0x4,	0x10 },
    371   1.4  sakamoto 	{ 0x8,	0x8,	0x10 },
    372   1.4  sakamoto 	{ 0xa,	0x8,	0x10 },
    373   1.4  sakamoto 	{ 0xc,	0x8,	0x10 },
    374   1.4  sakamoto 	{ 0xe,	0x8,	0x10 },
    375   1.4  sakamoto 	{ 0x10,	0x8,	0x10 },
    376   1.4  sakamoto 	{ 0x10,	0x8,	0xe },
    377   1.4  sakamoto 	{ 0x10,	0x8,	0xc },
    378   1.4  sakamoto 	{ 0x10,	0x8,	0xa },
    379   1.4  sakamoto 	{ 0x10,	0x8,	0x8 },
    380   1.4  sakamoto 	{ 0x10,	0xa,	0x8 },
    381   1.4  sakamoto 	{ 0x10,	0xc,	0x8 },
    382   1.4  sakamoto 	{ 0x10,	0xe,	0x8 },
    383   1.4  sakamoto 	{ 0x10,	0x10,	0x8 },
    384   1.4  sakamoto 	{ 0xe,	0x10,	0x8 },
    385   1.4  sakamoto 	{ 0xc,	0x10,	0x8 },
    386   1.4  sakamoto 	{ 0xa,	0x10,	0x8 },
    387   1.4  sakamoto 	{ 0x8,	0x10,	0x8 },
    388   1.4  sakamoto 	{ 0x8,	0x10,	0xa },
    389   1.4  sakamoto 	{ 0x8,	0x10,	0xc },
    390   1.4  sakamoto 	{ 0x8,	0x10,	0xe },
    391   1.4  sakamoto 	{ 0x8,	0x10,	0x10 },
    392   1.4  sakamoto 	{ 0x8,	0xe,	0x10 },
    393   1.4  sakamoto 	{ 0x8,	0xc,	0x10 },
    394   1.4  sakamoto 	{ 0x8,	0xa,	0x10 },
    395   1.4  sakamoto 	{ 0xb,	0xb,	0x10 },
    396   1.4  sakamoto 	{ 0xc,	0xb,	0x10 },
    397   1.4  sakamoto 	{ 0xd,	0xb,	0x10 },
    398   1.4  sakamoto 	{ 0xf,	0xb,	0x10 },
    399   1.4  sakamoto 	{ 0x10,	0xb,	0x10 },
    400   1.4  sakamoto 	{ 0x10,	0xb,	0xf },
    401   1.4  sakamoto 	{ 0x10,	0xb,	0xd },
    402   1.4  sakamoto 	{ 0x10,	0xb,	0xc },
    403   1.4  sakamoto 	{ 0x10,	0xb,	0xb },
    404   1.4  sakamoto 	{ 0x10,	0xc,	0xb },
    405   1.4  sakamoto 	{ 0x10,	0xd,	0xb },
    406   1.4  sakamoto 	{ 0x10,	0xf,	0xb },
    407   1.4  sakamoto 	{ 0x10,	0x10,	0xb },
    408   1.4  sakamoto 	{ 0xf,	0x10,	0xb },
    409   1.4  sakamoto 	{ 0xd,	0x10,	0xb },
    410   1.4  sakamoto 	{ 0xc,	0x10,	0xb },
    411   1.4  sakamoto 	{ 0xb,	0x10,	0xb },
    412   1.4  sakamoto 	{ 0xb,	0x10,	0xc },
    413   1.4  sakamoto 	{ 0xb,	0x10,	0xd },
    414   1.4  sakamoto 	{ 0xb,	0x10,	0xf },
    415   1.4  sakamoto 	{ 0xb,	0x10,	0x10 },
    416   1.4  sakamoto 	{ 0xb,	0xf,	0x10 },
    417   1.4  sakamoto 	{ 0xb,	0xd,	0x10 },
    418   1.4  sakamoto 	{ 0xb,	0xc,	0x10 },
    419   1.4  sakamoto 	{ 0x0,	0x0,	0x0 },
    420   1.4  sakamoto 	{ 0x0,	0x0,	0x0 },
    421   1.4  sakamoto 	{ 0x0,	0x0,	0x0 },
    422   1.4  sakamoto 	{ 0x0,	0x0,	0x0 },
    423   1.4  sakamoto 	{ 0x0,	0x0,	0x0 },
    424   1.4  sakamoto 	{ 0x0,	0x0,	0x0 },
    425   1.4  sakamoto 	{ 0x0,	0x0,	0x0 },
    426   1.1  sakamoto };
    427   1.1  sakamoto 
    428   1.4  sakamoto u_char AC[21] = {
    429   1.5  junyoung 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
    430   1.5  junyoung 	0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
    431   1.4  sakamoto 	0x0C, 0x00, 0x0F, 0x08, 0x00
    432   1.4  sakamoto };
    433   1.1  sakamoto 
    434  1.12  kiyohara 
    435  1.12  kiyohara static int delayLoop(int);
    436  1.12  kiyohara static void writeAttr(u_char, u_char, u_char);
    437  1.12  kiyohara static void setTextRegs(struct VgaRegs *);
    438  1.12  kiyohara static void setTextCLUT(void);
    439  1.12  kiyohara static void loadFont(u_char *);
    440  1.12  kiyohara static void unlockS3(void);
    441  1.13        he static void enablePCIvideo(int);
    442   1.1  sakamoto 
    443   1.4  sakamoto void
    444   1.5  junyoung vga_reset(u_char *ISA_mem)
    445   1.1  sakamoto {
    446   1.1  sakamoto 	int slot;
    447   1.1  sakamoto         struct VgaRegs *VgaTextRegs;
    448   1.1  sakamoto 
    449   1.1  sakamoto 	/* See if VGA already in TEXT mode - exit if so! */
    450   1.1  sakamoto 	outb(0x3CE, 0x06);
    451   1.5  junyoung 	if ((inb(0x3CF) & 0x01) == 0)
    452   1.5  junyoung 		return;
    453   1.1  sakamoto 
    454   1.1  sakamoto 	/* If no VGA responding in text mode, then we have some work to do... */
    455  1.12  kiyohara 	slot = findPCIVga();		/* find video card in use */
    456  1.12  kiyohara 	enablePCIvideo(slot);		/* enable I/O to card */
    457   1.1  sakamoto 
    458   1.1  sakamoto 	/*
    459   1.1  sakamoto          * Note: the PCI scanning code does not yet work correctly
    460   1.1  sakamoto          *       for non-Moto boxes, so the switch below only
    461   1.1  sakamoto          *       defaults to using an S3 card if it does not
    462   1.1  sakamoto          *       find a Cirrus card.
    463   1.1  sakamoto          *
    464   1.1  sakamoto          *       The only reason we need to scan the bus looking for
    465   1.1  sakamoto          *       a graphics card is so we could do the "enablePCIvideo(slot)"
    466   1.1  sakamoto          *       call above; it is needed because Moto's OpenFirmware
    467   1.1  sakamoto          *       disables I/O to the graphics adapter before it gives
    468   1.1  sakamoto          *       us control.                                       PEK'97
    469   1.1  sakamoto          */
    470   1.1  sakamoto 
    471   1.1  sakamoto 	switch (PCIVendor(slot)) {
    472   1.1  sakamoto 	default:			       /* Assume S3 */
    473   1.5  junyoung #if 0
    474   1.5  junyoung 	case S3Vendor:
    475   1.5  junyoung #endif
    476   1.5  junyoung 		unlockS3();
    477   1.1  sakamoto 		VgaTextRegs = S3TextRegs;
    478   1.1  sakamoto 		outw(0x3C4, 0x0120);           /* disable video              */
    479   1.1  sakamoto 		setTextRegs(VgaTextRegs);      /* initial register setup     */
    480   1.1  sakamoto 		setTextCLUT();                 /* load color lookup table    */
    481   1.1  sakamoto 		loadFont(ISA_mem);             /* load font                  */
    482   1.1  sakamoto 		setTextRegs(VgaTextRegs);      /* reload registers           */
    483   1.1  sakamoto 		outw(0x3C4, 0x0100);           /* re-enable video            */
    484   1.1  sakamoto 		outb(0x3c2, 0x63);  	       /* MISC */
    485   1.1  sakamoto 		outb(0x3c2, 0x67);  	       /* MISC */
    486   1.1  sakamoto 		break;
    487   1.1  sakamoto 
    488   1.5  junyoung 	case CirrusVendor:
    489   1.1  sakamoto 		VgaTextRegs = GenVgaTextRegs;
    490   1.1  sakamoto 		outw(0x3C4, 0x0612);	       /* unlock ext regs            */
    491   1.1  sakamoto 		outw(0x3C4, 0x0700);	       /* reset ext sequence mode    */
    492   1.1  sakamoto 		outw(0x3C4, 0x0120);           /* disable video              */
    493   1.1  sakamoto 		setTextRegs(VgaTextRegs);      /* initial register setup     */
    494   1.1  sakamoto 		setTextCLUT();                 /* load color lookup table    */
    495   1.1  sakamoto 		loadFont(ISA_mem);             /* load font                  */
    496   1.1  sakamoto 		setTextRegs(VgaTextRegs);      /* reload registers           */
    497   1.1  sakamoto 		outw(0x3C4, 0x0100);           /* re-enable video            */
    498   1.1  sakamoto 		outb(0x3c2, 0x63);  	       /* MISC */
    499   1.1  sakamoto 		break;
    500   1.1  sakamoto 
    501   1.5  junyoung         case DiamondVendor:
    502   1.5  junyoung         case MatroxVendor:
    503   1.1  sakamoto 	  /*
    504   1.1  sakamoto            * The following code is almost enuf to get the Matrox
    505   1.1  sakamoto            * working (on a Moto box) but the video is not stable.
    506   1.1  sakamoto            * We probably need to tweak the TVP3026 Video PLL regs.   PEK'97
    507   1.1  sakamoto            */
    508   1.5  junyoung 		VgaTextRegs = GenVgaTextRegs;
    509   1.1  sakamoto 		outw(0x3C4, 0x0120);           /* disable video              */
    510   1.1  sakamoto 		setTextRegs(VgaTextRegs);      /* initial register setup     */
    511   1.1  sakamoto 		setTextCLUT();                 /* load color lookup table    */
    512   1.1  sakamoto 		loadFont(ISA_mem);             /* load font                  */
    513   1.1  sakamoto 		setTextRegs(VgaTextRegs);      /* reload registers           */
    514   1.1  sakamoto 		outw(0x3C4, 0x0100);           /* re-enable video            */
    515   1.1  sakamoto 		outb(0x3c2, 0x63);  	       /* MISC */
    516   1.5  junyoung 		delayLoop(1);
    517   1.5  junyoung 		break;
    518   1.1  sakamoto 	};
    519   1.1  sakamoto 
    520   1.1  sakamoto #ifdef DEBUG
    521  1.12  kiyohara 	printPCIslots();
    522   1.5  junyoung 	delayLoop(5);
    523   1.1  sakamoto #endif
    524   1.1  sakamoto 	delayLoop(2);		/* give time for the video monitor to come up */
    525   1.1  sakamoto }
    526   1.1  sakamoto 
    527  1.12  kiyohara static int
    528  1.12  kiyohara delayLoop(int k)
    529  1.12  kiyohara {
    530  1.12  kiyohara 	volatile int a, b;
    531  1.12  kiyohara 	volatile int i, j;
    532  1.12  kiyohara 	a = 0;
    533  1.12  kiyohara 	do {
    534  1.12  kiyohara 		for (i = 0; i < 500; i++) {
    535  1.12  kiyohara 			b = i;
    536  1.12  kiyohara 			for (j = 0; j < 200; j++) {
    537  1.12  kiyohara 				a = b+j;
    538  1.12  kiyohara 			}
    539  1.12  kiyohara 		}
    540  1.12  kiyohara 	} while (k--);
    541  1.12  kiyohara 	return a;
    542  1.12  kiyohara }
    543  1.12  kiyohara 
    544   1.1  sakamoto /*
    545   1.5  junyoung  * Write to VGA Attribute registers.
    546   1.1  sakamoto  */
    547  1.12  kiyohara static void
    548   1.5  junyoung writeAttr(u_char index, u_char data, u_char videoOn)
    549   1.1  sakamoto {
    550  1.14       phx 
    551  1.14       phx 	(void)inb(0x3da);   /* reset attr. address toggle */
    552   1.1  sakamoto 	if (videoOn)
    553   1.1  sakamoto 		outb(0x3c0, (index & 0x1F) | 0x20);
    554   1.1  sakamoto 	else
    555   1.1  sakamoto 		outb(0x3c0, (index & 0x1F));
    556   1.1  sakamoto 	outb(0x3c0, data);
    557   1.1  sakamoto }
    558   1.1  sakamoto 
    559  1.12  kiyohara static void
    560   1.5  junyoung setTextRegs(struct VgaRegs *svp)
    561   1.1  sakamoto {
    562   1.1  sakamoto 	int i;
    563   1.1  sakamoto 
    564   1.1  sakamoto 	/*
    565   1.1  sakamoto 	 *  saved settings
    566   1.5  junyoung 	 */
    567   1.4  sakamoto 	while (svp->io_port != ENDMK) {
    568   1.1  sakamoto 		outb(svp->io_port,   svp->io_index);
    569   1.1  sakamoto 		outb(svp->io_port+1, svp->io_value);
    570   1.5  junyoung 		svp++;
    571   1.1  sakamoto 	}
    572   1.1  sakamoto 
    573   1.1  sakamoto 	outb(0x3c2, 0x67);  /* MISC */
    574   1.1  sakamoto 	outb(0x3c6, 0xff);  /* MASK */
    575   1.1  sakamoto 
    576   1.4  sakamoto 	for (i = 0; i < 0x10; i++)
    577   1.5  junyoung 		writeAttr(i, AC[i], 0);	/* pallete */
    578   1.5  junyoung 	writeAttr(0x10, 0x0c, 0);	/* text mode */
    579   1.5  junyoung 	writeAttr(0x11, 0x00, 0);	/* overscan color (border) */
    580   1.5  junyoung 	writeAttr(0x12, 0x0f, 0);	/* plane enable */
    581   1.5  junyoung 	writeAttr(0x13, 0x08, 0);	/* pixel panning */
    582   1.5  junyoung 	writeAttr(0x14, 0x00, 1);	/* color select; video on */
    583   1.1  sakamoto }
    584   1.1  sakamoto 
    585  1.12  kiyohara static void
    586   1.5  junyoung setTextCLUT(void)
    587   1.1  sakamoto {
    588   1.1  sakamoto 	int i;
    589   1.1  sakamoto 
    590   1.5  junyoung 	outb(0x3C6, 0xFF);
    591   1.1  sakamoto 	i = inb(0x3C7);
    592   1.5  junyoung 	outb(0x3C8, 0);
    593   1.1  sakamoto 	i = inb(0x3C7);
    594   1.1  sakamoto 
    595   1.4  sakamoto 	for (i = 0; i < 256; i++) {
    596   1.1  sakamoto 		outb(0x3C9, TextCLUT[i].r);
    597   1.1  sakamoto 		outb(0x3C9, TextCLUT[i].g);
    598   1.1  sakamoto 		outb(0x3C9, TextCLUT[i].b);
    599   1.1  sakamoto 	}
    600   1.1  sakamoto }
    601   1.1  sakamoto 
    602  1.12  kiyohara static void
    603   1.5  junyoung loadFont(u_char *ISA_mem)
    604   1.1  sakamoto {
    605   1.1  sakamoto 	int i, j;
    606   1.4  sakamoto 	u_char *font_page = (u_char *)&ISA_mem[0xA0000];
    607   1.5  junyoung 
    608   1.1  sakamoto 	outb(0x3C2, 0x67);
    609   1.5  junyoung 	/*
    610   1.5  junyoung 	 * Load font
    611   1.1  sakamoto 	 */
    612   1.5  junyoung 	i = inb(0x3DA);		/* Reset Attr toggle */
    613   1.1  sakamoto 
    614  1.12  kiyohara 	outb(0x3C0, 0x30);
    615   1.5  junyoung 	outb(0x3C0, 0x01);	/* graphics mode */
    616   1.1  sakamoto 
    617   1.5  junyoung 	outw(0x3C4, 0x0001);	/* reset sequencer */
    618   1.5  junyoung 	outw(0x3C4, 0x0204);	/* write to plane 2 */
    619   1.5  junyoung 	outw(0x3C4, 0x0406);	/* enable plane graphics */
    620   1.5  junyoung 	outw(0x3C4, 0x0003);	/* reset sequencer */
    621   1.5  junyoung 	outw(0x3CE, 0x0402);	/* read plane 2 */
    622   1.5  junyoung 	outw(0x3CE, 0x0500);	/* write mode 0, read mode 0 */
    623   1.5  junyoung 	outw(0x3CE, 0x0605);	/* set graphics mode */
    624   1.1  sakamoto 
    625   1.1  sakamoto 	for (i = 0;  i < sizeof(font);  i += 16) {
    626   1.1  sakamoto 		for (j = 0;  j < 16;  j++) {
    627  1.15  riastrad 			__asm volatile("eieio" ::: "memory");
    628   1.1  sakamoto 			font_page[(2*i)+j] = font[i+j];
    629   1.1  sakamoto 		}
    630   1.1  sakamoto 	}
    631   1.1  sakamoto }
    632   1.1  sakamoto 
    633  1.12  kiyohara static void
    634   1.5  junyoung unlockS3(void)
    635   1.1  sakamoto {
    636   1.1  sakamoto 	/* From the S3 manual */
    637   1.1  sakamoto 	outb(0x46E8, 0x10);  /* Put into setup mode */
    638   1.1  sakamoto 	outb(0x3C3, 0x10);
    639   1.1  sakamoto 	outb(0x102, 0x01);   /* Enable registers */
    640   1.1  sakamoto 	outb(0x46E8, 0x08);  /* Enable video */
    641   1.1  sakamoto 	outb(0x3C3, 0x08);
    642   1.1  sakamoto 	outb(0x4AE8, 0x00);
    643   1.1  sakamoto 
    644   1.1  sakamoto 	outb(0x42E8, 0x80);  /* Reset graphics engine? */
    645   1.1  sakamoto 
    646   1.1  sakamoto 	outb(0x3D4, 0x38);  /* Unlock all registers */
    647   1.1  sakamoto 	outb(0x3D5, 0x48);
    648   1.1  sakamoto 	outb(0x3D4, 0x39);
    649   1.1  sakamoto 	outb(0x3D5, 0xA5);
    650   1.1  sakamoto 	outb(0x3D4, 0x40);
    651   1.1  sakamoto 	outb(0x3D5, inb(0x3D5)|0x01);
    652   1.1  sakamoto 	outb(0x3D4, 0x33);
    653   1.1  sakamoto 	outb(0x3D5, inb(0x3D5)&~0x52);
    654   1.1  sakamoto 	outb(0x3D4, 0x35);
    655   1.1  sakamoto 	outb(0x3D5, inb(0x3D5)&~0x30);
    656   1.1  sakamoto 	outb(0x3D4, 0x3A);
    657   1.1  sakamoto 	outb(0x3D5, 0x00);
    658   1.1  sakamoto 	outb(0x3D4, 0x53);
    659   1.1  sakamoto 	outb(0x3D5, 0x00);
    660   1.1  sakamoto 	outb(0x3D4, 0x31);
    661   1.1  sakamoto 	outb(0x3D5, inb(0x3D5)&~0x4B);
    662   1.1  sakamoto 	outb(0x3D4, 0x58);
    663   1.1  sakamoto 
    664   1.1  sakamoto 	outb(0x3D5, 0);
    665   1.1  sakamoto 
    666   1.1  sakamoto 	outb(0x3D4, 0x54);
    667   1.1  sakamoto 	outb(0x3D5, 0x38);
    668   1.1  sakamoto 	outb(0x3D4, 0x60);
    669   1.1  sakamoto 	outb(0x3D5, 0x07);
    670   1.1  sakamoto 	outb(0x3D4, 0x61);
    671   1.1  sakamoto 	outb(0x3D5, 0x80);
    672   1.1  sakamoto 	outb(0x3D4, 0x62);
    673   1.1  sakamoto 	outb(0x3D5, 0xA1);
    674   1.1  sakamoto 	outb(0x3D4, 0x69);  /* High order bits for cursor address */
    675   1.1  sakamoto 	outb(0x3D5, 0);
    676   1.5  junyoung 
    677   1.1  sakamoto 	outb(0x3D4, 0x32);
    678   1.1  sakamoto 	outb(0x3D5, inb(0x3D5)&~0x10);
    679   1.1  sakamoto }
    680   1.1  sakamoto 
    681   1.1  sakamoto /*
    682   1.1  sakamoto  * The following code modifies the PCI Command register
    683   1.5  junyoung  * to enable memory and I/O accesses.
    684   1.5  junyoung  */
    685  1.12  kiyohara static void
    686   1.5  junyoung enablePCIvideo(int slot)
    687   1.1  sakamoto {
    688   1.1  sakamoto 
    689  1.12  kiyohara 	enablePCI(slot, 1, 1, 0);	/* Enable IO and Memory */
    690   1.1  sakamoto 
    691   1.1  sakamoto 	outb(0x3d4, 0x11);
    692  1.11  kiyohara 	outb(0x3d5, 0x0e);	/* unlock CR0-CR7 */
    693   1.1  sakamoto }
    694   1.1  sakamoto #endif /* CONS_VGA */
    695