mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
181 lines
3.2 KiB
181 lines
3.2 KiB
/*++
|
|
|
|
Copyright (c) 1992 AST Research Inc.
|
|
|
|
Module Name:
|
|
|
|
astebi.c
|
|
|
|
Abstract:
|
|
|
|
NT HAL to AST EBI2 translation file. This file contains routines that
|
|
convert NT HAL calls to AST EBI2 calls.
|
|
|
|
Author:
|
|
|
|
Bob Beard (v-bobb) 24-Jul-1992
|
|
|
|
Environment:
|
|
|
|
Kernel mode only.
|
|
|
|
Revision History:
|
|
Quang Phan (v-quangp) 27-Aug-1992: Moved DisplPanel from astdetct.c
|
|
into to this module because astdetct is also used for the NT setup
|
|
program.
|
|
|
|
--*/
|
|
|
|
#include "halp.h"
|
|
#include "astebiii.h"
|
|
#include "astdisp.h"
|
|
|
|
extern VOID* EBI2_MMIOTable[];
|
|
extern EBI_II EBI2_CallTab;
|
|
|
|
#define IRQ0_VECTOR_BASE PRIMARY_VECTOR_BASE
|
|
#define ALL_IRQS (0x0000fffb)
|
|
#define ALL_PROCS (0xffffffff)
|
|
|
|
static UCHAR hex_to_asc(SHORT x)
|
|
{
|
|
return(x < 0xa ? x+'0' : x-10+'A');
|
|
}
|
|
|
|
|
|
VOID
|
|
HalpInitializePICs()
|
|
/*++
|
|
|
|
Routine Description:
|
|
Initialize the AST Interrupt environment. Called once by P0 during
|
|
Phase 0.
|
|
|
|
Arguments:
|
|
none.
|
|
|
|
Return Value:
|
|
NONE
|
|
|
|
--*/
|
|
{
|
|
|
|
dWord subsystemType;
|
|
|
|
//
|
|
// Turn off all interrupts while setting the interrupt environment
|
|
//
|
|
|
|
_asm pushfd
|
|
_asm cli
|
|
|
|
//
|
|
// Check to see the type of interrupt subsystem
|
|
//
|
|
|
|
EBI2_CallTab.GetIntSubsysType( EBI2_MMIOTable, &subsystemType );
|
|
if ( subsystemType != EBI_INT_SUBSYS_ADI)
|
|
DisplPanel(HALIntSubsystemProblem);
|
|
|
|
//
|
|
// Set the IRQ vectors 0 & 8
|
|
//
|
|
|
|
if ( EBI2_CallTab.SetIRQVectorAssign( EBI2_MMIOTable, 0, IRQ0_VECTOR_BASE) )
|
|
DisplPanel(HALIntSubsystemProblem);
|
|
if ( EBI2_CallTab.SetIRQVectorAssign( EBI2_MMIOTable, 8, IRQ0_VECTOR_BASE+8) )
|
|
DisplPanel(HALIntSubsystemProblem);
|
|
|
|
//
|
|
// Mask off all Interrupts for All Processors Globally
|
|
// ( Except chain interrupt, IPI and SPI )
|
|
//
|
|
|
|
if ( EBI2_CallTab.SetGlobalIntMask( EBI2_MMIOTable, ALL_IRQS) )
|
|
DisplPanel(HALIntSubsystemProblem);
|
|
|
|
//
|
|
// Switch to Distributed Interrupt Handling
|
|
//
|
|
|
|
EBI2_CallTab.SetAdvIntMode( EBI2_MMIOTable );
|
|
|
|
//
|
|
// Cancel all pending interrupts (except IPI and SPI)
|
|
//
|
|
|
|
if ( EBI2_CallTab.CancelInterrupt( EBI2_MMIOTable, ALL_IRQS, ALL_PROCS) )
|
|
DisplPanel(HALIntSubsystemProblem);
|
|
|
|
//
|
|
// Return interrupts to entry state
|
|
//
|
|
|
|
_asm popfd
|
|
|
|
}
|
|
|
|
|
|
VOID
|
|
ASTEnableCaches()
|
|
/*++
|
|
|
|
Routine Description:
|
|
Enable the internal and external caches of the processor that calls
|
|
this routine.
|
|
|
|
Arguments:
|
|
none.
|
|
|
|
Return Value:
|
|
NONE
|
|
|
|
--*/
|
|
{
|
|
|
|
if ( EBI2_CallTab.DisableRAMCache( EBI2_MMIOTable ) )
|
|
DisplPanel(HALCacheEnableProblem);
|
|
|
|
if ( EBI2_CallTab.EnableRAMCache( EBI2_MMIOTable ) )
|
|
DisplPanel(HALCacheEnableProblem);
|
|
|
|
}
|
|
|
|
|
|
VOID
|
|
DisplPanel(ULONG x)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Display 2 hex digits on front panel of AST Manhattan. All digits
|
|
are preceded by a "H " (H blank) to indicate HAL output.
|
|
|
|
Arguments:
|
|
A SHORT value to output as hex digits.
|
|
|
|
Return Value:
|
|
none.
|
|
|
|
--*/
|
|
{
|
|
UCHAR digit1,digit2;
|
|
|
|
#define DISP_ADR (PUCHAR) 0xec
|
|
#define DISP_DAT (PUCHAR) 0xed
|
|
|
|
digit1 = hex_to_asc((SHORT)((x & 0xf0) >> 4));
|
|
digit2 = hex_to_asc((SHORT)(x & 0x0f));
|
|
|
|
// digit 4
|
|
WRITE_PORT_UCHAR(DISP_ADR, 7);
|
|
WRITE_PORT_UCHAR(DISP_DAT, 'H');
|
|
// digit 3
|
|
WRITE_PORT_UCHAR(DISP_ADR, 6);
|
|
WRITE_PORT_UCHAR(DISP_DAT, ' ');
|
|
// digit 2
|
|
WRITE_PORT_UCHAR(DISP_ADR, 5);
|
|
WRITE_PORT_UCHAR(DISP_DAT, digit1);
|
|
// digit 1
|
|
WRITE_PORT_UCHAR(DISP_ADR, 4);
|
|
WRITE_PORT_UCHAR(DISP_DAT, digit2);
|
|
}
|