mirror of
https://github.com/reactos/reactos.git
synced 2025-05-06 18:31:26 +00:00
[BOOTVID] Simplify the code by introducing and using IO port helper macros.
- Move around two header includes. - Remove a redundant assignment in VgaInterpretCmdStream().
This commit is contained in:
parent
0f3f8b2a35
commit
025cfb108b
3 changed files with 67 additions and 64 deletions
|
@ -1,8 +1,5 @@
|
|||
#include "precomp.h"
|
||||
|
||||
#include <ntifs.h>
|
||||
#include <ndk/halfuncs.h>
|
||||
|
||||
/* PRIVATE FUNCTIONS *********************************************************/
|
||||
|
||||
static BOOLEAN
|
||||
|
@ -227,9 +224,6 @@ VgaInterpretCmdStream(IN PUSHORT CmdStream)
|
|||
/* Unknown major function, fail */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Get the next command */
|
||||
Cmd = *CmdStream;
|
||||
}
|
||||
|
||||
/* If we got here, return success */
|
||||
|
@ -245,114 +239,115 @@ VgaIsPresent(VOID)
|
|||
UCHAR i;
|
||||
|
||||
/* Read the VGA Address Register */
|
||||
VgaReg = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE);
|
||||
VgaReg = __inpb(0x3CE);
|
||||
|
||||
/* Select Read Map Select Register */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 4);
|
||||
__outpb(0x3CE, 4);
|
||||
|
||||
/* Read it back...it should be 4 */
|
||||
if (((READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE)) & 0xF) != 4) return FALSE;
|
||||
/* Read it back... it should be 4 */
|
||||
if ((__inpb(0x3CE) & 0xF) != 4)
|
||||
return FALSE;
|
||||
|
||||
/* Read the VGA Data Register */
|
||||
VgaReg2 = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF);
|
||||
VgaReg2 = __inpb(0x3CF);
|
||||
|
||||
/* Enable all planes */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 3);
|
||||
__outpb(0x3CF, 3);
|
||||
|
||||
/* Read it back...it should be 3 */
|
||||
if (READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF) != 0x3)
|
||||
/* Read it back... it should be 3 */
|
||||
if (__inpb(0x3CF) != 0x3)
|
||||
{
|
||||
/* Reset the registers and fail */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0);
|
||||
__outpb(0x3CF, 0);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Select Bit Mask Register */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 8);
|
||||
__outpb(0x3CE, 8);
|
||||
|
||||
/* Read it back...it should be 8 */
|
||||
if (((READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE)) & 0xF) != 8)
|
||||
/* Read it back... it should be 8 */
|
||||
if ((__inpb(0x3CE) & 0xF) != 8)
|
||||
{
|
||||
/* Reset the registers and fail */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 4);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0);
|
||||
__outpb(0x3CE, 4);
|
||||
__outpb(0x3CF, 0);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Read the VGA Data Register */
|
||||
VgaReg3 = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF);
|
||||
VgaReg3 = __inpb(0x3CF);
|
||||
|
||||
/* Loop bitmasks */
|
||||
for (i = 0xBB; i; i >>= 1)
|
||||
{
|
||||
/* Set bitmask */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, i);
|
||||
__outpb(0x3CF, i);
|
||||
|
||||
/* Read it back...it should be the same */
|
||||
if (READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF) != i)
|
||||
/* Read it back... it should be the same */
|
||||
if (__inpb(0x3CF) != i)
|
||||
{
|
||||
/* Reset the registers and fail */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0xFF);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 4);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0);
|
||||
__outpb(0x3CF, 0xFF);
|
||||
__outpb(0x3CE, 4);
|
||||
__outpb(0x3CF, 0);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Select Read Map Select Register */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 4);
|
||||
__outpb(0x3CE, 4);
|
||||
|
||||
/* Read it back...it should be 3 */
|
||||
if (READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF) != 3)
|
||||
/* Read it back... it should be 3 */
|
||||
if (__inpb(0x3CF) != 3)
|
||||
{
|
||||
/* Reset the registers and fail */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 8);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0xFF);
|
||||
__outpb(0x3CF, 0);
|
||||
__outpb(0x3CE, 8);
|
||||
__outpb(0x3CF, 0xFF);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Write the registers we read earlier */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, VgaReg2);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 8);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, VgaReg3);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, VgaReg);
|
||||
__outpb(0x3CF, VgaReg2);
|
||||
__outpb(0x3CE, 8);
|
||||
__outpb(0x3CF, VgaReg3);
|
||||
__outpb(0x3CE, VgaReg);
|
||||
|
||||
/* Read sequencer address */
|
||||
SeqReg = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C4);
|
||||
SeqReg = __inpb(0x3C4);
|
||||
|
||||
/* Select memory mode register */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C4, 4);
|
||||
__outpb(0x3C4, 4);
|
||||
|
||||
/* Read it back...it should still be 4 */
|
||||
if (((READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C4)) & 7) != 4)
|
||||
/* Read it back... it should still be 4 */
|
||||
if ((__inpb(0x3C4) & 7) != 4)
|
||||
{
|
||||
/* Fail */
|
||||
/* Fail */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Read sequencer Data */
|
||||
SeqReg2 = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5);
|
||||
SeqReg2 = __inpb(0x3C5);
|
||||
|
||||
/* Write null plane */
|
||||
WRITE_PORT_USHORT((PUSHORT)VgaRegisterBase + 0x3C4, 0x100);
|
||||
__outpw(0x3C4, 0x100);
|
||||
|
||||
/* Write sequencer flag */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5, SeqReg2 ^ 8);
|
||||
__outpb(0x3C5, SeqReg2 ^ 8);
|
||||
|
||||
/* Read it back */
|
||||
if ((READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5)) != (SeqReg2 ^ 8))
|
||||
if (__inpb(0x3C5) != (SeqReg2 ^ 8))
|
||||
{
|
||||
/* Not the same value...restore registers and fail */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5, 2);
|
||||
WRITE_PORT_USHORT((PUSHORT)VgaRegisterBase + 0x3C4, 0x300);
|
||||
/* Not the same value... restore registers and fail */
|
||||
__outpb(0x3C5, 2);
|
||||
__outpw(0x3C4, 0x300);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Now write the registers we read */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5, SeqReg2);
|
||||
WRITE_PORT_USHORT((PUSHORT)VgaRegisterBase + 0x3C4, 0x300);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C4, SeqReg);
|
||||
__outpb(0x3C5, SeqReg2);
|
||||
__outpw(0x3C4, 0x300);
|
||||
__outpb(0x3C4, SeqReg);
|
||||
|
||||
/* VGA is present! */
|
||||
return TRUE;
|
||||
|
@ -458,7 +453,7 @@ VidInitialize(IN BOOLEAN SetMode)
|
|||
/* Initialize it */
|
||||
VgaInterpretCmdStream(AT_Initialization);
|
||||
}
|
||||
|
||||
|
||||
/* VGA is ready */
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -70,12 +70,6 @@ ULONG curr_y = 0;
|
|||
static ULONG VidTextColor = 0xF;
|
||||
static BOOLEAN CarriageReturn = FALSE;
|
||||
|
||||
#define __outpb(Port, Value) \
|
||||
WRITE_PORT_UCHAR((PUCHAR)(VgaRegisterBase + (Port)), (UCHAR)(Value))
|
||||
|
||||
#define __outpw(Port, Value) \
|
||||
WRITE_PORT_USHORT((PUSHORT)(VgaRegisterBase + (Port)), (USHORT)(Value))
|
||||
|
||||
/* PRIVATE FUNCTIONS *********************************************************/
|
||||
|
||||
static VOID
|
||||
|
@ -88,7 +82,7 @@ ReadWriteMode(IN UCHAR Mode)
|
|||
__outpb(0x3CE, 5);
|
||||
|
||||
/* Get the current register value, minus the current mode */
|
||||
Value = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF) & 0xF4;
|
||||
Value = __inpb(0x3CF) & 0xF4;
|
||||
|
||||
/* Set the new mode */
|
||||
__outpb(0x3CF, Mode | Value);
|
||||
|
@ -750,10 +744,10 @@ NTAPI
|
|||
VidCleanUp(VOID)
|
||||
{
|
||||
/* Select bit mask register */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 8);
|
||||
__outpb(0x3CE, 8);
|
||||
|
||||
/* Clear it */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 255);
|
||||
__outpb(0x3CF, 255);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -2,12 +2,14 @@
|
|||
#define _BOOTVID_PCH_
|
||||
|
||||
#include <ntddk.h>
|
||||
#include <ntifs.h>
|
||||
#include <ndk/halfuncs.h>
|
||||
#include <drivers/bootvid/bootvid.h>
|
||||
|
||||
/* Define if FontData has upside down characters */
|
||||
#undef CHAR_GEN_UPSIDE_DOWN
|
||||
|
||||
#define BOOTCHAR_HEIGHT 13
|
||||
#define BOOTCHAR_HEIGHT 13
|
||||
|
||||
/* Command Stream Definitions */
|
||||
#define CMD_STREAM_WRITE 0x0
|
||||
|
@ -40,11 +42,23 @@ NTAPI
|
|||
InitializePalette(VOID);
|
||||
|
||||
/* Globals */
|
||||
extern USHORT AT_Initialization[];
|
||||
extern ULONG curr_x;
|
||||
extern ULONG curr_y;
|
||||
extern ULONG_PTR VgaRegisterBase;
|
||||
extern ULONG_PTR VgaBase;
|
||||
extern USHORT AT_Initialization[];
|
||||
extern UCHAR FontData[256 * BOOTCHAR_HEIGHT];
|
||||
|
||||
#define __inpb(Port) \
|
||||
READ_PORT_UCHAR((PUCHAR)(VgaRegisterBase + (Port)))
|
||||
|
||||
#define __inpw(Port) \
|
||||
READ_PORT_USHORT((PUSHORT)(VgaRegisterBase + (Port)))
|
||||
|
||||
#define __outpb(Port, Value) \
|
||||
WRITE_PORT_UCHAR((PUCHAR)(VgaRegisterBase + (Port)), (UCHAR)(Value))
|
||||
|
||||
#define __outpw(Port, Value) \
|
||||
WRITE_PORT_USHORT((PUSHORT)(VgaRegisterBase + (Port)), (USHORT)(Value))
|
||||
|
||||
#endif /* _BOOTVID_PCH_ */
|
||||
|
|
Loading…
Reference in a new issue