250 lines
5.0 KiB
C
250 lines
5.0 KiB
C
/*++
|
||
|
||
Copyright (c) 1991 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
jxdisp.c
|
||
|
||
Abstract:
|
||
|
||
This module implements the HAL display initialization and output routines
|
||
for a MIPS R3000 or R4000 Jazz system.
|
||
|
||
Author:
|
||
|
||
Andre Vachon (andreva) 09-May-1992
|
||
David N. Cutler (davec) 27-Apr-1991
|
||
|
||
Environment:
|
||
|
||
Kernel mode
|
||
|
||
Revision History:
|
||
|
||
--*/
|
||
|
||
#include "halp.h"
|
||
#include "eisa.h"
|
||
#include "string.h"
|
||
|
||
#define CSI 0x9b
|
||
|
||
int sprintf();
|
||
|
||
extern ULONG IoSpaceAlreadyMapped;
|
||
|
||
static UCHAR DisplayInitializationString[] = {CSI,'3','7',';','4','4','m',CSI,'2','J',0};
|
||
static UCHAR CarriageReturnString[] = {13,0};
|
||
|
||
static ULONG HalOwnsDisplay = FALSE;
|
||
static ULONG DisplayFile;
|
||
|
||
PHAL_RESET_DISPLAY_PARAMETERS HalpResetDisplayParameters;
|
||
|
||
|
||
VOID
|
||
HalAcquireDisplayOwnership (
|
||
IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This routine switches ownership of the display away from the HAL to
|
||
the system display driver. It is called when the system has reached
|
||
a point during bootstrap where it is self supporting and can output
|
||
its own messages. Once ownership has passed to the system display
|
||
driver any attempts to output messages using HalDisplayString must
|
||
result in ownership of the display reverting to the HAL and the
|
||
display hardware reinitialized for use by the HAL.
|
||
|
||
Arguments:
|
||
|
||
ResetDisplayParameters - if non-NULL the address of a function
|
||
the hal can call to reset the video card. The function returns
|
||
TRUE if the display was reset.
|
||
|
||
Return Value:
|
||
|
||
None.
|
||
|
||
--*/
|
||
|
||
{
|
||
ArcClose(DisplayFile);
|
||
HalOwnsDisplay = FALSE;
|
||
|
||
HalpResetDisplayParameters = ResetDisplayParameters;
|
||
|
||
return;
|
||
}
|
||
|
||
|
||
VOID
|
||
HalDisplayString (
|
||
PUCHAR String
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This routine displays a character string on the display screen.
|
||
|
||
Arguments:
|
||
|
||
String - Supplies a pointer to the characters that are to be displayed.
|
||
|
||
Return Value:
|
||
|
||
None.
|
||
|
||
--*/
|
||
|
||
{
|
||
ULONG Count;
|
||
|
||
if (IoSpaceAlreadyMapped == FALSE) {
|
||
HalpMapIoSpace();
|
||
HalpInitializeX86DisplayAdapter();
|
||
IoSpaceAlreadyMapped = TRUE;
|
||
}
|
||
|
||
if (HalOwnsDisplay==FALSE) {
|
||
|
||
if (HalpResetDisplayParameters != NULL) {
|
||
(HalpResetDisplayParameters)(80,25);
|
||
}
|
||
|
||
HalpResetX86DisplayAdapter();
|
||
ArcOpen(ArcGetEnvironmentVariable("ConsoleOut"),ArcOpenWriteOnly,&DisplayFile);
|
||
ArcWrite(DisplayFile,DisplayInitializationString,strlen(DisplayInitializationString),&Count);
|
||
HalOwnsDisplay=TRUE;
|
||
|
||
}
|
||
|
||
ArcWrite(DisplayFile,String,strlen(String),&Count);
|
||
ArcWrite(DisplayFile,CarriageReturnString,strlen(CarriageReturnString),&Count);
|
||
|
||
return;
|
||
|
||
}
|
||
|
||
VOID
|
||
HalQueryDisplayParameters (
|
||
OUT PULONG WidthInCharacters,
|
||
OUT PULONG HeightInLines,
|
||
OUT PULONG CursorColumn,
|
||
OUT PULONG CursorRow
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This routine return information about the display area and current
|
||
cursor position.
|
||
|
||
Arguments:
|
||
|
||
WidthInCharacter - Supplies a pointer to a varible that receives
|
||
the width of the display area in characters.
|
||
|
||
HeightInLines - Supplies a pointer to a variable that receives the
|
||
height of the display area in lines.
|
||
|
||
CursorColumn - Supplies a pointer to a variable that receives the
|
||
current display column position.
|
||
|
||
CursorRow - Supplies a pointer to a variable that receives the
|
||
current display row position.
|
||
|
||
Return Value:
|
||
|
||
None.
|
||
|
||
--*/
|
||
|
||
{
|
||
ARC_DISPLAY_STATUS *DisplayStatus;
|
||
|
||
//
|
||
// Get the display parameter values and return.
|
||
//
|
||
|
||
//
|
||
// If the HAL does not already own the display, then print an empty string.
|
||
// This guarantees that the file descriptor DisplayFile is valid.
|
||
//
|
||
|
||
if (!HalOwnsDisplay) {
|
||
HalDisplayString("");
|
||
}
|
||
|
||
//
|
||
// Make firmware call to get the display's current status
|
||
//
|
||
|
||
DisplayStatus = ArcGetDisplayStatus(DisplayFile);
|
||
|
||
*WidthInCharacters = DisplayStatus->CursorMaxXPosition;
|
||
*HeightInLines = DisplayStatus->CursorMaxYPosition;
|
||
*CursorColumn = DisplayStatus->CursorXPosition;
|
||
*CursorRow = DisplayStatus->CursorYPosition;
|
||
|
||
return;
|
||
}
|
||
|
||
VOID
|
||
HalSetDisplayParameters (
|
||
IN ULONG CursorColumn,
|
||
IN ULONG CursorRow
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This routine set the current cursor position on the display area.
|
||
|
||
Arguments:
|
||
|
||
CursorColumn - Supplies the new display column position.
|
||
|
||
CursorRow - Supplies a the new display row position.
|
||
|
||
Return Value:
|
||
|
||
None.
|
||
|
||
--*/
|
||
|
||
{
|
||
CHAR SetCursorPositionString[20];
|
||
ULONG Count;
|
||
|
||
//
|
||
// Set the display parameter values and return.
|
||
//
|
||
|
||
//
|
||
// If the HAL does not already own the display, then print an empty string.
|
||
// This guarantees that the file descriptor DisplayFile is valid.
|
||
//
|
||
|
||
if (!HalOwnsDisplay) {
|
||
HalDisplayString("");
|
||
}
|
||
|
||
//
|
||
// Build ANSI sequence to set the cursor position.
|
||
//
|
||
|
||
sprintf(SetCursorPositionString,"%c%d;%dH",CSI,CursorRow,CursorColumn);
|
||
ArcWrite(DisplayFile,SetCursorPositionString,strlen(SetCursorPositionString),&Count);
|
||
|
||
return;
|
||
}
|