11
11
12
12
/* GLOBALS ********************************************************************/
13
13
14
- static ULONG_PTR VideoMemoryI ;
15
- ULONG_PTR FrameBuffer ;
14
+ static ULONG_PTR PegcControl = 0 ;
15
+ ULONG_PTR FrameBuffer = 0 ;
16
16
17
17
#define PEGC_MAX_COLORS 256
18
18
@@ -25,23 +25,38 @@ GraphGetStatus(
25
25
UCHAR Result ;
26
26
27
27
WRITE_PORT_UCHAR ((PUCHAR )GRAPH_IO_o_STATUS_SELECT , Status );
28
- KeStallExecutionProcessor (1 );
29
28
Result = READ_PORT_UCHAR ((PUCHAR )GRAPH_IO_i_STATUS );
30
29
31
30
return (Result & GRAPH_STATUS_SET ) && (Result != 0xFF );
32
31
}
33
32
33
+ static BOOLEAN
34
+ TestMmio (VOID )
35
+ {
36
+ USHORT OldValue , NewValue ;
37
+
38
+ OldValue = READ_REGISTER_USHORT ((PUSHORT )(PegcControl + PEGC_MMIO_MODE ));
39
+
40
+ /* Bits [15:1] are not writable */
41
+ WRITE_REGISTER_USHORT ((PUSHORT )(PegcControl + PEGC_MMIO_MODE ), 0x80 );
42
+ NewValue = READ_REGISTER_USHORT ((PUSHORT )(PegcControl + PEGC_MMIO_MODE ));
43
+
44
+ WRITE_REGISTER_USHORT ((PUSHORT )(PegcControl + PEGC_MMIO_MODE ), OldValue );
45
+
46
+ return !(NewValue & 0x80 );
47
+ }
48
+
34
49
static BOOLEAN
35
50
HasPegcController (VOID )
36
51
{
37
52
BOOLEAN Success ;
38
53
39
54
if (GraphGetStatus (GRAPH_STATUS_PEGC ))
40
- return TRUE ;
55
+ return TestMmio () ;
41
56
42
57
WRITE_PORT_UCHAR ((PUCHAR )GDC2_IO_o_MODE_FLIPFLOP2 , GDC2_EGC_FF_UNPROTECT );
43
58
WRITE_PORT_UCHAR ((PUCHAR )GDC2_IO_o_MODE_FLIPFLOP2 , GDC2_MODE_PEGC_ENABLE );
44
- Success = GraphGetStatus (GRAPH_STATUS_PEGC );
59
+ Success = GraphGetStatus (GRAPH_STATUS_PEGC ) ? TestMmio () : FALSE ;
45
60
WRITE_PORT_UCHAR ((PUCHAR )GDC2_IO_o_MODE_FLIPFLOP2 , GDC2_MODE_PEGC_DISABLE );
46
61
WRITE_PORT_UCHAR ((PUCHAR )GDC2_IO_o_MODE_FLIPFLOP2 , GDC2_EGC_FF_PROTECT );
47
62
@@ -212,8 +227,8 @@ InitializeDisplay(VOID)
212
227
WRITE_PORT_UCHAR ((PUCHAR )GDC2_IO_o_MODE_FLIPFLOP2 , GDC2_MODE_PEGC_ENABLE );
213
228
WRITE_PORT_UCHAR ((PUCHAR )GDC2_IO_o_MODE_FLIPFLOP2 , GDC2_MODE_LINES_800 );
214
229
WRITE_PORT_UCHAR ((PUCHAR )GDC2_IO_o_MODE_FLIPFLOP2 , GDC2_EGC_FF_PROTECT );
215
- WRITE_REGISTER_USHORT ((PUSHORT )(VideoMemoryI + PEGC_MMIO_MODE ), PEGC_MODE_PACKED );
216
- WRITE_REGISTER_USHORT ((PUSHORT )(VideoMemoryI + PEGC_MMIO_FRAMEBUFFER ), PEGC_FB_MAP );
230
+ WRITE_REGISTER_USHORT ((PUSHORT )(PegcControl + PEGC_MMIO_MODE ), PEGC_MODE_PACKED );
231
+ WRITE_REGISTER_USHORT ((PUSHORT )(PegcControl + PEGC_MMIO_FRAMEBUFFER ), PEGC_FB_MAP );
217
232
218
233
/* Select the video source */
219
234
RelayState = READ_PORT_UCHAR ((PUCHAR )GRAPH_IO_i_RELAY ) & ~(GRAPH_RELAY_0 | GRAPH_RELAY_1 );
@@ -348,8 +363,8 @@ VidInitialize(
348
363
PHYSICAL_ADDRESS BaseAddress ;
349
364
350
365
BaseAddress .QuadPart = VRAM_NORMAL_PLANE_I ;
351
- VideoMemoryI = (ULONG_PTR )MmMapIoSpace (BaseAddress , VRAM_PLANE_SIZE , MmNonCached );
352
- if (!VideoMemoryI )
366
+ PegcControl = (ULONG_PTR )MmMapIoSpace (BaseAddress , PEGC_CONTROL_SIZE , MmNonCached );
367
+ if (!PegcControl )
353
368
goto Failure ;
354
369
355
370
if (!HasPegcController ())
@@ -366,8 +381,8 @@ VidInitialize(
366
381
return TRUE;
367
382
368
383
Failure :
369
- if (! VideoMemoryI ) MmUnmapIoSpace (( PVOID ) VideoMemoryI , VRAM_PLANE_SIZE );
370
- if (! FrameBuffer ) MmUnmapIoSpace ((PVOID )FrameBuffer , PEGC_FRAMEBUFFER_SIZE );
384
+ if (PegcControl )
385
+ MmUnmapIoSpace ((PVOID )PegcControl , PEGC_CONTROL_SIZE );
371
386
372
387
return FALSE;
373
388
}
0 commit comments