Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

328 lines
6.2 KiB

//
// MODULE : BOARD.C
// PURPOSE : Board specific code goes here
// AUTHOR : JBS Yadawa
// CREATED : 7/20/96
//
// Copyright (C) 1996 SGS-THOMSON Microelectronics
//
//
// REVISION HISTORY :
//
// DATE :
//
// COMMENTS :
//
#include "common.h"
#include "strmini.h"
#include "stdefs.h"
#include "board.h"
#include "debug.h"
#include "common.h"
#include "i20reg.h"
#include "bt856.h"
#include "memio.h"
#include "codedma.h"
#define POSTOFFICEREG 0x200
#define INCTL 0x01
#define AUXCTL 0x02
#define INTR_CTRL 0x40
#define INTR_STATUS 0x3C
static BYTE PrevVideoAdr = 0xFF;
static BYTE GPIOReg;
BYTE FARAPI BoardReadAudio(BYTE Reg)
{
BYTE NewVideoAdr = Reg & 0x7E;
DWORD PoReg=0;
HostDisableIT();
if(NewVideoAdr != PrevVideoAdr)
{
PrevVideoAdr = NewVideoAdr;
PoReg = NewVideoAdr | 0x00830000;
memOutDword(POSTOFFICEREG, PoReg);
while(memInDword(POSTOFFICEREG)&02000000L);
}
if(Reg&0x80)
{
if(Reg&0x01)
PoReg = 0x00150000;
else
PoReg = 0x00140000;
}
else
{
if(Reg&0x01)
PoReg = 0x00110000;
else
PoReg = 0x00100000;
}
memOutDword(POSTOFFICEREG, PoReg);
while(memInDword(POSTOFFICEREG)&02000000L);
PoReg = memInDword(POSTOFFICEREG);
HostEnableIT();
return ((BYTE)PoReg);
}
BYTE FARAPI BoardReadVideo(BYTE Reg)
{
BYTE NewVideoAdr = Reg & 0x7E;
DWORD PoReg=0;
HostDisableIT();
if(NewVideoAdr != PrevVideoAdr)
{
PrevVideoAdr = NewVideoAdr;
PoReg = NewVideoAdr | 0x00830000;
memOutDword(POSTOFFICEREG, PoReg);
while(memInDword(POSTOFFICEREG)&02000000L);
}
if(Reg&0x80)
{
if(Reg&0x01)
PoReg = 0x00150000;
else
PoReg = 0x00140000;
}
else
{
if(Reg&0x01)
PoReg = 0x00110000;
else
PoReg = 0x00100000;
}
memOutDword(POSTOFFICEREG, PoReg);
while(memInDword(POSTOFFICEREG)&02000000L);
PoReg = memInDword(POSTOFFICEREG);
HostEnableIT();
return ((BYTE)PoReg);
}
void FARAPI BoardWriteAudio(BYTE Reg, BYTE Data)
{
BYTE NewVideoAdr = Reg & 0x7E;
DWORD PoReg=0;
HostDisableIT();
if(NewVideoAdr != PrevVideoAdr)
{
PrevVideoAdr = NewVideoAdr;
PoReg = NewVideoAdr | 0x00830000;
memOutDword(POSTOFFICEREG, PoReg);
while(memInDword(POSTOFFICEREG)&02000000L);
}
if(Reg&0x80)
{
if(Reg&0x01)
PoReg = Data | 0x00970000;
else
PoReg = Data | 0x00960000;
}
else
{
if(Reg&0x01)
PoReg = Data | 0x00930000;
else
PoReg = Data | 0x00920000;
}
memOutDword(POSTOFFICEREG, PoReg);
while(memInDword(POSTOFFICEREG)&02000000L);
HostEnableIT();
}
void FARAPI BoardWriteVideo(BYTE Reg, BYTE Data)
{
BYTE NewVideoAdr = Reg & 0x7E;
DWORD PoReg=0;
HostDisableIT();
if(NewVideoAdr != PrevVideoAdr)
{
PrevVideoAdr = NewVideoAdr;
PoReg = NewVideoAdr | 0x00830000;
memOutDword(POSTOFFICEREG, PoReg);
while(memInDword(POSTOFFICEREG)&02000000L);
}
if(Reg&0x80)
{
if(Reg&0x01)
PoReg = Data | 0x00970000;
else
PoReg = Data | 0x00960000;
}
else
{
if(Reg&0x01)
PoReg = Data | 0x00930000;
else
PoReg = Data | 0x00920000;
}
memOutDword(POSTOFFICEREG, PoReg);
while(memInDword(POSTOFFICEREG)&02000000L);
HostEnableIT();
}
void FARAPI BoardSendAudio(LPBYTE lpBuffer, WORD size)
{
}
void FARAPI BoardSendVideo(WORD * Buffer, WORD Size)
{
}
void FARAPI BoardEnableIRQ(void)
{
memOutByte(INTR_CTRL+3,0x71);
// DPF((Trace,"PCI Intr = %x", memInByte(INTR_CTRL+3)));
}
void FARAPI BoardDisableIRQ(void)
{
memOutByte(INTR_CTRL+3,0x00);
// DPF((Trace,"PCI Intr = %x", memInByte(INTR_CTRL+3)));
}
void FARAPI BoardAudioSetSamplingFrequency(DWORD Frequency)
{
}
void FARAPI BoardEnterInterrupt(void)
{
}
void FARAPI BoardLeaveInterrupt(void)
{
// memOutByte(INTR_STATUS+3,0xFF);
// DPF((Trace,"PCI Intr = %x", memInByte(INTR_STATUS+3)));
}
BOOL FARAPI BoardOpen(DWORD Base)
{
static char dbgstr[120];
PrevVideoAdr = 0xFF;
DPF((Trace,"Allocating Memory Base!!\n"));
if(!AllocMemoryBase(Base, 0x1000))
{
DPF((Trace,"Can not covert Physical to Linear"));
return FALSE;
}
DPF((Trace, "GPIO = %lx", memInDword(I20_GPREG)));
memOutDword(I20_GPREG, 0x000000ff);
Delay(100);
memOutDword(I20_GPREG, 0x010000ff);
Delay(100);
memOutDword(I20_GPREG, 0x000000ff);
Delay(100);
memOutDword(I20_GPREG, 0x010000ff);
Delay(4000);
DPF((Trace, "GPIO = %lx", memInDword(I20_GPREG)));
// Gen Purpose Directions
// O I O O O O I I
// SPIDO SPIDI SPICLK SPIEN SRESET STIRST STIREQ AXREQ
memOutByte(I20_GPREG, 0x43);
// 0 0 1 1 0 0 0 0
// SPIDO SPIDI SPICLK SPIEN SRESET STIRST STIREQ AXREQ
memOutByte(I20_GBREG+3, 0x30);
Delay(100);
// 0 0 0 1 0 0 0 0
// SPIDO SPIDI SPICLK SPIEN SRESET STIRST STIREQ AXREQ
memOutByte(I20_GBREG+3, 0x10);
Delay(100);
BoardWriteEPLD(INCTL, 0x01);
Delay(100);
BoardWriteEPLD(AUXCTL, 0x00);
Delay(100);
// 0 0 0 1 1 1 0 0
// SPIDO SPIDI SPICLK SPIEN SRESET STIRST STIREQ AXREQ
memOutByte(I20_GBREG+3, 0x1C);
GPIOReg = 0x1C;
Delay(100);
memOutByte(I20_GBREG, 0x00);
Delay(100);
memOutByte(I20_GBREG+1, 0x00);
Delay(100);
BoardWriteEPLD(INCTL, 0x01);
Delay(100);
BoardWriteEPLD(AUXCTL, 0x00);
Delay(100);
BTInitEnc();
BTSetVideoStandard(NTSC_PLAY);
BTInitEnc();
BTSetVideoStandard(NTSC_PLAY);
return TRUE;
}
BOOL FARAPI BoardClose(void)
{
FreeMemoryBase();
return TRUE;
}
void FARAPI Delay(DWORD Microseconds)
{
/*
DWORD i, j;
for (i = 0; i < Microseconds*20; i++)
j = inp(0x0070)%2; // the action of reading takes about 1æs
*/
KeStallExecutionProcessor(Microseconds);
}
void FARAPI BoardWriteEPLD(BYTE Reg, BYTE Data)
{
DWORD PoReg=0;
HostDisableIT();
PoReg = Data | 0x00800000 | ((DWORD)(Reg&0x07) << 16);
memOutDword(POSTOFFICEREG, PoReg);
while(memInDword(POSTOFFICEREG)&02000000L);
HostEnableIT();
}
void FARAPI BoardWriteGPIOReg(BYTE Bit, BOOL Val)
{
BYTE x;
if(Val)
{
x = 1 << Bit;
GPIOReg |= x;
memOutByte(I20_GBREG+3, GPIOReg);
}
else
{
x = 1 << Bit;
x = ~x;
GPIOReg &= x;
memOutByte(I20_GBREG+3, GPIOReg);
}
}
BOOL FARAPI BoardReadGPIOReg(BYTE Bit)
{
BYTE x;
x = memInByte(I20_GBREG+3);
return ((x>> Bit)&0x01);
}