150 lines
3.0 KiB
ArmAsm
150 lines
3.0 KiB
ArmAsm
// TITLE("Alpha PAL funtions for HAL")
|
||
//++
|
||
//
|
||
// Copyright (c) 1992 Digital Equipment Corporation
|
||
//
|
||
// Module Name:
|
||
//
|
||
// jxvtisup.s
|
||
//
|
||
// Abstract:
|
||
//
|
||
// This module implements routines to i/o to the on-board vti chip on
|
||
// the JENSEN system board via the 64-bit super-pages.
|
||
// Unfortunately, these routines had to be coded in assembly language
|
||
// since it's not a particularly good idea to require a 64-bit compilation
|
||
// mode for the otherwise 32-bit compiler. Still, the C code was awfully
|
||
// clean.
|
||
//
|
||
//
|
||
// Author:
|
||
//
|
||
// Joe Notarangelo 15-Jul-1992
|
||
//
|
||
// Environment:
|
||
//
|
||
// Kernel mode only.
|
||
//
|
||
// Revision History:
|
||
//
|
||
//--
|
||
|
||
#include "kxalpha.h"
|
||
|
||
//++
|
||
//
|
||
// VOID
|
||
// outVti(
|
||
// ULONG port
|
||
// ULONG data
|
||
// )
|
||
//
|
||
// Routine Description:
|
||
//
|
||
// This function uses the 64-bit super-page to write data to a port
|
||
// of the on-board VTI combo chip for JENSEN.
|
||
//
|
||
// Arguments:
|
||
//
|
||
// port (a0) - port number on VTI chip to which to write data
|
||
// data (a1) - data to write to the port, only low byte is significant
|
||
// to the VTI
|
||
//
|
||
// Return Value:
|
||
//
|
||
// None.
|
||
//
|
||
//--
|
||
|
||
LEAF_ENTRY(outVti)
|
||
|
||
//
|
||
// generate super-page address of vti, base address
|
||
// N.B. - upper bits must be sign extension of bit 42
|
||
// va<42:41> = 10 (binary) for super-page address
|
||
//
|
||
|
||
lda t0, 0xc01c(zero) // t0 = 0000 0000 0000 c01c
|
||
ldah t0, -1(t0) // t0 = ffff ffff ffff c01c
|
||
sll t0, 28, t0 // t0 = ffff fc01 c000 0000
|
||
|
||
|
||
//
|
||
// Shift in the port number to generate the port address we
|
||
// wish to access
|
||
// N.B. - access width is always zero = byte access for VTI
|
||
//
|
||
|
||
sll a0, 9, a0 // a0 << 9
|
||
bis t0, a0, t0 // t0 = address of VTI port
|
||
|
||
|
||
//
|
||
// Do the port write, guarantee that subsequent writes (and reads)
|
||
// are ordered with respect to this write and return to caller
|
||
//
|
||
|
||
stl a1, 0(t0) // write data to port
|
||
mb // guarantee write ordering
|
||
|
||
ret zero, (ra) // return
|
||
|
||
.end outVti
|
||
|
||
//++
|
||
//
|
||
// ULONG
|
||
// inVti(
|
||
// ULONG port
|
||
// )
|
||
//
|
||
// Routine Description:
|
||
//
|
||
// This function uses the 64-bit super-page to read data from a port
|
||
// of the on-board VTI combo chip for JENSEN.
|
||
//
|
||
// Arguments:
|
||
//
|
||
// port (a0) - port number on VTI chip to which to write data
|
||
//
|
||
// Return Value:
|
||
//
|
||
// data (v0) - the data read from the VTI chip, only the low byte will
|
||
// be valid
|
||
//
|
||
//--
|
||
|
||
LEAF_ENTRY(inVti)
|
||
|
||
//
|
||
// generate super-page address of vti, base address
|
||
// N.B. - upper bits must be sign extension of bit 42
|
||
// va<42:41> = 10 (binary) for super-page address
|
||
//
|
||
|
||
lda t0, 0xc01c(zero) // t0 = 0000 0000 0000 c01c
|
||
ldah t0, -1(t0) // t0 = ffff ffff ffff c01c
|
||
sll t0, 28, t0 // t0 = ffff fc01 c000 0000
|
||
|
||
|
||
//
|
||
// Shift in the port number to generate the port address we
|
||
// wish to access
|
||
// N.B. - access width for VTI is always 0 = byte access
|
||
//
|
||
|
||
sll a0, 9, a0 // a0 << 9
|
||
bis t0, a0, t0 // t0 = address of VTI port
|
||
|
||
|
||
//
|
||
// Do the super-page i/o access and return data to caller
|
||
//
|
||
|
||
ldl v0, 0(t0) // read data from port
|
||
|
||
ret zero, (ra) // return
|
||
|
||
.end inVti
|
||
|