|
|
1.1 root 1: /*****************************************************************************
2:
3: SVGACustom.c for CirrusLogicGD542X
4:
5: ******************************************************************************/
6:
7: #import "SVGAConstants.h"
8: #import <driverkit/svgaPSExtension.h>
9: #import <driverkit/i386/displayRegisters.h>
10:
11:
12: void SetReadSegment(unsigned char num)
13: // Description: Select which 64K segment we intend to read from.
14: {
15: outb(0x03ce,0x09);
16: outb(0x03cf,(num << 4));
17: }
18:
19:
20: void SetWriteSegment(unsigned char num)
21: // Description: Select which 64K segment we intend to write to.
22: {
23: outb(0x03ce,0x09);
24: outb(0x03cf,(num << 4));
25: }
26:
27:
28: void SetReadPlane(unsigned char num)
29: // Description: Select which of 4 bit planes to read from in planar
30: // modes - only one plane can be active at a time.
31: {
32: char tmp;
33:
34: //
35: // Select plane we are reading from
36: //
37: tmp = IOReadRegister(EIDR_GCR_ADDR, GCR_AT_READ_MAPS);
38: tmp &= ~GCR_AT_RMS;
39: tmp |= (num & GCR_AT_RMS);
40: IOWriteRegister(EIDR_GCR_ADDR, GCR_AT_READ_MAPS, tmp);
41: }
42:
43:
44: void SetWritePlane(unsigned char num)
45: // Description: Select one of 4 bit planes to write to in planar modes.
46: // Although more than one plane can be active at a time,
47: // this routine only allows access to 1 plane at a time.
48: {
49: char tmp, plane = 0x01;
50:
51: //
52: // Convert plane num to bit enable.
53: //
54: plane = plane << (num & 0x03);
55:
56: //
57: // Select plane we are writing to
58: //
59: tmp = IOReadRegister(EIDR_SEQ_ADDR, SEQ_AT_MPK);
60: tmp &= ~(SEQ_AT_EM3 | SEQ_AT_EM2 | SEQ_AT_EM1 | SEQ_AT_EM0);
61: tmp |= plane;
62: IOWriteRegister(EIDR_SEQ_ADDR, SEQ_AT_MPK, tmp);
63: }
64:
65:
66: int IOSetSVGAFunctions(IOSVGAFunctions *functs)
67: {
68: functs->setReadSegment = SetReadSegment;
69: functs->setWriteSegment = SetWriteSegment;
70: functs->setReadPlane = SetReadPlane;
71: functs->setWritePlane = SetWritePlane;
72:
73: return 0;
74: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.