📄 hal4d13.c
字号:
if(bD13flags.bits.At_IRQL1 == 0)
LowerIRQL();
return i;
}
*/
void Hal4D13_SetIntEnable(ULONG dIntEn)
{
// if(bD13flags.bits.At_IRQL1 == 0)
// RaiseIRQL();
outportb(D13_COMMAND_PORT,D13CMD_DEV_WR_INTEN);
outportb(D13_DATA_PORT,(UCHAR)dIntEn);
outportb(D13_DATA_PORT,(UCHAR)(dIntEn >> 8));
outportb(D13_DATA_PORT,(UCHAR)(dIntEn >> 16));
outportb(D13_DATA_PORT,(UCHAR)0x0);
// if(bD13flags.bits.At_IRQL1 == 0)
// LowerIRQL();
}
ULONG Hal4D13_ReadInterruptRegister(void)
{
ULONG i;
// if(bD13flags.bits.At_IRQL1 == 0)
// RaiseIRQL();
outportb(D13_COMMAND_PORT, D13CMD_DEV_INT_SRC);
i = ((ULONG)inportb(D13_DATA_PORT));
i += (((ULONG)inportb(D13_DATA_PORT)) << 8);
i += (((ULONG)inportb(D13_DATA_PORT)) << 16);
i += (((ULONG)inportb(D13_DATA_PORT)) << 24);
// if(bD13flags.bits.At_IRQL1 == 0)
// LowerIRQL();
return i;
}
UCHAR Hal4D13_GetEndpointStatusWInteruptClear(UCHAR bEPIndex)
{
UCHAR c;
// if(bD13flags.bits.At_IRQL1 == 0)
// RaiseIRQL();
outportb(D13_COMMAND_PORT, D13CMD_EP_RDSTS_CLRINT + bEPIndex);
c = inportb(D13_DATA_PORT);
// if(bD13flags.bits.At_IRQL1 == 0)
// LowerIRQL();
return c;
}
UCHAR Hal4D13_GetEndpointStatusWOInteruptClear(UCHAR bEPIndex)
{
UCHAR c;
// if(bD13flags.bits.At_IRQL1 == 0)
// RaiseIRQL();
outportb(D13_COMMAND_PORT, D13CMD_EP_RDSTS + bEPIndex);
c = inportb(D13_DATA_PORT);
// if(bD13flags.bits.At_IRQL1 == 0)
// LowerIRQL();
return c;
}
void Hal4D13_SetEndpointStatus(UCHAR bEPIndex, UCHAR bStalled)
{
// if(bD13flags.bits.At_IRQL1 == 0)
// RaiseIRQL();
if(bStalled & 0x80)
{
outportb(D13_COMMAND_PORT, D13CMD_EP_WR_STS + bEPIndex);
// code changed, write EP status 0x40, no data phase.
// outportb(D13_DATA_PORT, bStalled);
}
else
{
// clear endpoint stall 0x80.
outportb(D13_COMMAND_PORT, D13CMD_EP_CLR_STALL + bEPIndex);
}
// if(bD13flags.bits.At_IRQL1 == 0)
// LowerIRQL();
}
//Jan10, WARNING 16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
void Hal4D13_SetDMAConfig(USHORT wDMACnfg)
{
// if(bD13flags.bits.At_IRQL1 == 0)
// RaiseIRQL();
outportb(D13_COMMAND_PORT,D13CMD_DMA_WR_CNFG);
outportb(D13_DATA_PORT,(UCHAR)wDMACnfg);
outportb(D13_DATA_PORT,(UCHAR)(wDMACnfg>>8));
// if(bD13flags.bits.At_IRQL1 == 0)
// LowerIRQL();
}
/*
USHORT Hal4D13_GetDMAConfig(void)
{
USHORT i;
if(bD13flags.bits.At_IRQL1 == 0)
RaiseIRQL();
outportb(D13_COMMAND_PORT,D13CMD_DMA_RD_CNFG);
i = inportb(D13_DATA_PORT);
i += ((USHORT)inportb(D13_DATA_PORT) << 8);
if(bD13flags.bits.At_IRQL1 == 0)
LowerIRQL();
return i;
}
*/
//Jan10, WARNING 16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
void Hal4D13_SetDMACounter(USHORT wDMACounter)
{
// if(bD13flags.bits.At_IRQL1 == 0)
// RaiseIRQL();
outportb(D13_COMMAND_PORT,D13CMD_DMA_WR_COUNT);
outportb(D13_DATA_PORT,(UCHAR)wDMACounter);
outportb(D13_DATA_PORT,(UCHAR)(wDMACounter >> 8));
// if(bD13flags.bits.At_IRQL1 == 0)
// LowerIRQL();
}
/*
USHORT Hal4D13_GetDMACounter(void)
{
USHORT i;
if(bD13flags.bits.At_IRQL1 == 0)
RaiseIRQL();
outportb(D13_COMMAND_PORT,D13CMD_DMA_RD_COUNT);
i = inportb(D13_DATA_PORT);
// i = i + ((USHORT)inportb(D13_DATA_PORT) << 8); //jiangqian i+= -> i = i +;
i += ((USHORT)inportb(D13_DATA_PORT) << 8);
if(bD13flags.bits.At_IRQL1 == 0)
LowerIRQL();
return i;
}
*/
/*
USHORT Hal4D13_GetDataFromChipRam(void)
{
USHORT i;
if(bD13flags.bits.At_IRQL1 == 0)
RaiseIRQL();
outportb(D13_COMMAND_PORT,D13CMD_DEV_RD_RAM);
i = inportb(D13_DATA_PORT);
i = i+((USHORT)inportb(D13_DATA_PORT) << 8);// jiangqian i+= -> i=i+;
if(bD13flags.bits.At_IRQL1 == 0)
LowerIRQL();
return i;
}
void Hal4D13_SetDataToChipRam(USHORT wData)
{
if(bD13flags.bits.At_IRQL1 == 0)
RaiseIRQL();
outportb(D13_COMMAND_PORT,D13CMD_DEV_WR_RAM);
outportb(D13_DATA_PORT,(UCHAR)wData);
outportb(D13_DATA_PORT,(UCHAR)(wData>>8) );
if(bD13flags.bits.At_IRQL1 == 0)
LowerIRQL();
}
USHORT Hal4D13_ReadCurrentFrameNumber(void)
{
USHORT i,j;
if(bD13flags.bits.At_IRQL1 == 0)
RaiseIRQL();
outportb(D13_COMMAND_PORT, D13CMD_RD_FRMNUM);
i= inportb(D13_DATA_PORT);
j = inportb(D13_DATA_PORT);
i += (j<<8);
if(bD13flags.bits.At_IRQL1 == 0)
LowerIRQL();
return i;
}
*/
/*
void Hal4D13_LockDevice(UCHAR bTrue)
{
UCHAR c;
if(bD13flags.bits.At_IRQL1 == 0)
RaiseIRQL();
if(bTrue)
c = 0;
else
c = 0;
outportb(D13_COMMAND_PORT,D13CMD_DEV_LOCK );
outportb(D13_DATA_PORT,c);
if(bD13flags.bits.At_IRQL1 == 0)
LowerIRQL();
}
*/
//ww JULY26
void Hal4D13_LockDevice(USHORT wUnLockDev)
{
// if(bD13flags.bits.At_IRQL1 == 0)
// RaiseIRQL();
outportb(D13_COMMAND_PORT,D13CMD_DEV_LOCK );
outportb(D13_DATA_PORT,(UCHAR)wUnLockDev);
outportb(D13_DATA_PORT,(UCHAR)(wUnLockDev >> 8));
// if(bD13flags.bits.At_IRQL1 == 0)
// LowerIRQL();
}
/*
USHORT Hal4D13_ReadChipID(void)
{
USHORT i;
if(bD13flags.bits.At_IRQL1 == 0)
RaiseIRQL();
outportb(D13_COMMAND_PORT, D13CMD_DEV_RD_CHIPID);
i=inportb(D13_DATA_PORT);
i += ((USHORT)inportb(D13_DATA_PORT) << 8);
// j=inportb(D13_DATA_PORT);
if(bD13flags.bits.At_IRQL1 == 0)
LowerIRQL();
// i += (j<<8);
return i;
}
*/
/*
UCHAR Hal4D13_GetErrorCode(UCHAR bEPIndex)
{
UCHAR c;
if(bD13flags.bits.At_IRQL1 == 0)
RaiseIRQL();
outportb(D13_COMMAND_PORT, D13CMD_EP_RD_ERR+bEPIndex);
c = inportb(D13_DATA_PORT);
if(bD13flags.bits.At_IRQL1 == 0)
LowerIRQL();
return c;
}
UCHAR Hal4D13_GetEndpointConfig(UCHAR bEPIndex)
{
UCHAR c;
if(bD13flags.bits.At_IRQL1 == 0)
RaiseIRQL();
outportb(D13_COMMAND_PORT, D13CMD_EP_RD_CNFG+bEPIndex);
c = inportb(D13_DATA_PORT);
if(bD13flags.bits.At_IRQL1 == 0)
LowerIRQL();
return c;
}
*/
void Hal4D13_SetEndpointConfig(UCHAR bEPConfig, UCHAR bEPIndex)
{
// if(bD13flags.bits.At_IRQL1 == 0)
// RaiseIRQL();
outportb(D13_COMMAND_PORT, D13CMD_EP_WR_CNFG+bEPIndex);
outportb(D13_DATA_PORT,bEPConfig);
// if(bD13flags.bits.At_IRQL1 == 0)
// LowerIRQL();
}
//*************************************************************************
// Subroutines -- 3
//*************************************************************************
void Hal4D13_UnconfigDevice(void)
{
}
void Hal4D13_ConfigDevice(void)
{
}
void Hal4D13_SingleTransmitEP0(UCHAR data * buf, USHORT len)
{
if( len <= EP0_PACKET_SIZE) {
Hal4D13_WriteEndpoint(EPINDEX4EP0_CONTROL_IN, buf, len);
}
}
/*
void Hal4D13_RegAccess(void)
{
UCHAR c;
USHORT i;
ULONG l;
Hal4D13_ResetDevice();
// printf("Reseting\n");
i = Hal4D13_ReadChipID();
// printf("1181 ChipId = %hx\n",i);
i = Hal4D13_GetDataFromChipRam();
// printf("1181 Chip RAM = %hx\n",i);
// printf("Writing 0x55AA,");
Hal4D13_SetDataToChipRam(0x55AA);
i = Hal4D13_GetDataFromChipRam();
// printf("1181 Chip RAM = %hx\n",i);
l = Hal4D13_GetIntEnable();
// printf("Hal4D13_GetIntEnable = %lx\n",l);
l = Hal4D13_ReadInterruptRegister();
// printf("Hal4D13_ReadInterruptRegister = %lx\n",l);
i = Hal4D13_GetDevConfig();
// printf("Hal4D13_GetDevConfig = %hx\n",i);
i = Hal4D13_GetDMAConfig();
// printf("Hal4D13_GetDMAConfig = %hx\n",i);
i = Hal4D13_GetDMACounter();
// printf("Hal4D13_GetDMACounter = %hx\n",i);
i = Hal4D13_ReadCurrentFrameNumber();
// printf("Hal4D13_ReadCurrentFrameNumber = %hx\n",i);
c = Hal4D13_GetMode();
// printf("Hal4D13_GetMode = %x\n",c);
c = Hal4D13_GetEndpointStatusWOInteruptClear(EPINDEX4EP0_CONTROL_OUT);
// printf("Hal4D13_GetEndpointStatus EP0 = %x\n",c);
c = Hal4D13_GetAddress();
// printf("Hal4D13_GetAddress = %x\n",c);
}
*/
void Hal4D13_StallEP0InControlWrite(void)
{
Hal4D13_SetEndpointStatus(EPINDEX4EP0_CONTROL_IN, D13REG_EPSTS_STALL);
Hal4D13_SetEndpointStatus(EPINDEX4EP0_CONTROL_OUT, D13REG_EPSTS_STALL);
}
void Hal4D13_StallEP0InControlRead(void)
{
Hal4D13_SetEndpointStatus(EPINDEX4EP0_CONTROL_OUT, D13REG_EPSTS_STALL);
Hal4D13_SetEndpointStatus(EPINDEX4EP0_CONTROL_IN, D13REG_EPSTS_STALL);
}
//Jan10, WARNING 16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
/*
BOOLEAN Hal4D13_IsAnyNewSetupPkt(void)
{
UCHAR NewSetupPacket;
NewSetupPacket = Hal4D13_GetEndpointStatusWOInteruptClear(EPINDEX4EP0_CONTROL_OUT)&D13REG_EPSTS_SETUP;
return NewSetupPacket;
}
BOOLEAN Hal4D13_IsSetupPktInvalid(void)
{
UCHAR SetupPacketInvalid;
SetupPacketInvalid = Hal4D13_GetEndpointStatusWOInteruptClear(EPINDEX4EP0_CONTROL_OUT)&D13REG_EPSTS_OVWR;
return SetupPacketInvalid;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -