845 lines
24 KiB
C
845 lines
24 KiB
C
//***************************************************************************
|
|
// Audio decoder process
|
|
//
|
|
//***************************************************************************
|
|
|
|
#include "common.h"
|
|
#include "regs.h"
|
|
#include "cadec.h"
|
|
#include "zrnpch6.h"
|
|
#include "cdack.h"
|
|
|
|
|
|
|
|
|
|
|
|
// ***************************************************************************
|
|
// T C 6 8 0 0 A F
|
|
// ***************************************************************************
|
|
|
|
void AUDIO_TC6800_INIT_PCM(PHW_DEVICE_EXTENSION pHwDevExt)
|
|
{
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x66 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0xa0 );
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x66 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x80 );
|
|
}
|
|
|
|
void AUDIO_TC6800_INIT_AC3(PHW_DEVICE_EXTENSION pHwDevExt)
|
|
{
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x66 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x20 );
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x66 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x00 );
|
|
}
|
|
|
|
void AUDIO_TC6800_INIT_MPEG(PHW_DEVICE_EXTENSION pHwDevExt)
|
|
{
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x66 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x20 );
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x66 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x00 );
|
|
}
|
|
|
|
void AUDIO_TC6800_DATA_OFF(PHW_DEVICE_EXTENSION pHwDevExt)
|
|
{
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x66 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x60 );
|
|
}
|
|
|
|
// ***************************************************************************
|
|
// Z R 3 8 5 2 1
|
|
// ***************************************************************************
|
|
|
|
void AUDIO_ZR385_OUT( PHW_DEVICE_EXTENSION pHwDevExt, UCHAR val )
|
|
{
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x08 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, val );
|
|
|
|
// necessary?
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
}
|
|
|
|
void AUDIO_ZR385_DOWNLOAD( PHW_DEVICE_EXTENSION pHwDevExt, PUCHAR pData, ULONG size )
|
|
{
|
|
ULONG i;
|
|
|
|
for( i = 0; i < size; i++ )
|
|
AUDIO_ZR385_OUT( pHwDevExt, *pData++ );
|
|
}
|
|
|
|
void AUDIO_ZR38521_BOOT_AC3(PHW_DEVICE_EXTENSION pHwDevExt)
|
|
{
|
|
AUDIO_ZR385_DOWNLOAD( pHwDevExt, ZRN_AC3_DEC, sizeof(ZRN_AC3_DEC) );
|
|
|
|
if( ((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioType == AUDIO_OUT_DIGITAL )
|
|
AUDIO_ZR385_DOWNLOAD( pHwDevExt, ZRN_AC3_SPD, sizeof(ZRN_AC3_SPD) );
|
|
}
|
|
|
|
void AUDIO_ZR38521_BOOT_MPEG(PHW_DEVICE_EXTENSION pHwDevExt)
|
|
{
|
|
|
|
// not support!
|
|
|
|
}
|
|
|
|
|
|
|
|
void AUDIO_ZR38521_BOOT_PCM(PHW_DEVICE_EXTENSION pHwDevExt)
|
|
{
|
|
AUDIO_ZR385_DOWNLOAD( pHwDevExt, ZRN_PCM, sizeof(ZRN_PCM) );
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
NTSTATUS AUDIO_ZR38521_CFG(PHW_DEVICE_EXTENSION pHwDevExt)
|
|
{
|
|
UCHAR val;
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
|
|
if( val != 0x80 )
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x82 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x50 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x40 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x09 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x09 );
|
|
|
|
if( ((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioType == AUDIO_OUT_DIGITAL )
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x70 );
|
|
else
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x50 );
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x02 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x02 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x04 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
|
|
|
|
|
|
NTSTATUS AUDIO_ZR38521_PCMX( PHW_DEVICE_EXTENSION pHwDevExt )
|
|
{
|
|
UCHAR val;
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
|
|
if( val != 0x80 )
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x88 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x81 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x82 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x7f );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0xff );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x01 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
NTSTATUS AUDIO_ZR38521_AC3( PHW_DEVICE_EXTENSION pHwDevExt )
|
|
{
|
|
UCHAR val;
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
|
|
if( val != 0x80 )
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x85 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x08 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x7f );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x7f );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x11 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x7f );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0xff );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
NTSTATUS AUDIO_ZR38521_MPEG1( PHW_DEVICE_EXTENSION pHwDevExt )
|
|
{
|
|
UCHAR val;
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
|
|
if( val != 0x80 )
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x87 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x7f );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0xff );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
NTSTATUS AUDIO_ZR38521_PLAY( PHW_DEVICE_EXTENSION pHwDevExt )
|
|
{
|
|
UCHAR val;
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
|
|
if( val != 0x80 )
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x8a );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
NTSTATUS AUDIO_ZR38521_MUTE_OFF( PHW_DEVICE_EXTENSION pHwDevExt )
|
|
{
|
|
UCHAR val;
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
|
|
if( val != 0x80 )
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x89 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
NTSTATUS AUDIO_ZR38521_MUTE_ON( PHW_DEVICE_EXTENSION pHwDevExt )
|
|
{
|
|
UCHAR val;
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
|
|
if( val != 0x80 )
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x8b );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
NTSTATUS AUDIO_ZR38521_STOP( PHW_DEVICE_EXTENSION pHwDevExt )
|
|
{
|
|
UCHAR val;
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
|
|
if( val != 0x80 )
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x8c );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
NTSTATUS AUDIO_ZR38521_STOPF( PHW_DEVICE_EXTENSION pHwDevExt )
|
|
{
|
|
UCHAR val;
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
|
|
if( val != 0x80 )
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x8d );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
NTSTATUS AUDIO_ZR38521_STCR( PHW_DEVICE_EXTENSION pHwDevExt )
|
|
{
|
|
UCHAR val;
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
|
|
if( val != 0x80 )
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x94 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x0d );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x03 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0xf6 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x01 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
NTSTATUS AUDIO_ZR38521_VDSCR_ON( PHW_DEVICE_EXTENSION pHwDevExt ,ULONG stc )
|
|
{
|
|
UCHAR val;
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
|
|
if( val != 0x80 )
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x93 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x0d );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x03 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0xf4 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x02 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,(UCHAR)( ( stc >> 25 ) & 0xff ) );
|
|
AUDIO_ZR385_OUT( pHwDevExt,(UCHAR)( ( stc >> 17 ) & 0xff ) );
|
|
AUDIO_ZR385_OUT( pHwDevExt,(UCHAR)( ( stc >> 9 ) & 0xff ) );
|
|
AUDIO_ZR385_OUT( pHwDevExt,(UCHAR)( ( stc >> 1 ) & 0xff ) );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0xfb );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0xc8 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
NTSTATUS AUDIO_ZR38521_VDSCR_OFF( PHW_DEVICE_EXTENSION pHwDevExt , ULONG stc )
|
|
{
|
|
UCHAR val;
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
|
|
if( val != 0x80 )
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x93 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x0d );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x03 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0xf4 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x02 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,(UCHAR)( ( stc >> 25 ) & 0xff ) );
|
|
AUDIO_ZR385_OUT( pHwDevExt,(UCHAR)( ( stc >> 17 ) & 0xff ) );
|
|
AUDIO_ZR385_OUT( pHwDevExt,(UCHAR)( ( stc >> 9 ) & 0xff ) );
|
|
AUDIO_ZR385_OUT( pHwDevExt,(UCHAR)( ( stc >> 1 ) & 0xff ) );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0xfb );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0xc8 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x80 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
NTSTATUS AUDIO_ZR38521_AVSYNC_OFF( PHW_DEVICE_EXTENSION pHwDevExt , ULONG stc )
|
|
{
|
|
UCHAR val;
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
|
|
if( val != 0x80 )
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x93 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x0d );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x03 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0xf4 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x02 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,(UCHAR)( ( stc >> 25 ) & 0xff ) );
|
|
AUDIO_ZR385_OUT( pHwDevExt,(UCHAR)( ( stc >> 17 ) & 0xff ) );
|
|
AUDIO_ZR385_OUT( pHwDevExt,(UCHAR)( ( stc >> 9 ) & 0xff ) );
|
|
AUDIO_ZR385_OUT( pHwDevExt,(UCHAR)( ( stc >> 1 ) & 0xff ) );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0xfb );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0xc8 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0xc0 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
NTSTATUS AUDIO_ZR38521_AVSYNC_ON( PHW_DEVICE_EXTENSION pHwDevExt , ULONG stc )
|
|
{
|
|
UCHAR val;
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
|
|
if( val != 0x80 )
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x93 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x0d );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x03 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0xf4 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x02 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,(UCHAR)( ( stc >> 25 ) & 0xff ) );
|
|
AUDIO_ZR385_OUT( pHwDevExt,(UCHAR)( ( stc >> 17 ) & 0xff ) );
|
|
AUDIO_ZR385_OUT( pHwDevExt,(UCHAR)( ( stc >> 9 ) & 0xff ) );
|
|
AUDIO_ZR385_OUT( pHwDevExt,(UCHAR)( ( stc >> 1 ) & 0xff ) );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0xfb );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0xc8 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x40 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
NTSTATUS AUDIO_ZR38521_STAT( PHW_DEVICE_EXTENSION pHwDevExt , PULONG pDiff )
|
|
{
|
|
UCHAR val;
|
|
|
|
if( pDiff == NULL )
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
|
|
if( val != 0x80 ) {
|
|
*pDiff = 0x0908;
|
|
return STATUS_UNSUCCESSFUL;
|
|
}
|
|
|
|
*pDiff = 0;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x8e );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
|
|
// Check DIFTH
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
*pDiff |= (ULONG)val << 8;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt,0x00 );
|
|
|
|
// Check DIFTL
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
*pDiff |= val & 0xff;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
NTSTATUS AUDIO_ZR38521_KCOEF( PHW_DEVICE_EXTENSION pHwDevExt )
|
|
{
|
|
UCHAR val;
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
|
|
if( val != 0x80 )
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x93 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x0d );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x03 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0xf0 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x03 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x7f );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x59 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x7f );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x59 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
void AUDIO_ZR38521_REPEAT_02( PHW_DEVICE_EXTENSION pHwDevExt )
|
|
{
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x93 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x0d );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x01 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0xc3 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x01 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x13 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0xfb );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0xd0 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x44 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
}
|
|
|
|
void AUDIO_ZR38521_REPEAT_16( PHW_DEVICE_EXTENSION pHwDevExt )
|
|
{
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x93 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x0d );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x01 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0xc3 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x01 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x13 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0xfb );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0xd3 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0xc4 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
}
|
|
|
|
NTSTATUS AUDIO_ZR38521_BFST( PHW_DEVICE_EXTENSION pHwDevExt , PULONG pErrCode )
|
|
{
|
|
UCHAR val;
|
|
|
|
if( pErrCode == NULL )
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
|
|
if( val != 0x80 ) {
|
|
*pErrCode = 0x0908;
|
|
return STATUS_UNSUCCESSFUL;
|
|
}
|
|
|
|
*pErrCode = 0;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x8e );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
|
|
// Check IST
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
val &= 0x07;
|
|
*pErrCode |= (ULONG)val << 8;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
|
|
// Check BFST
|
|
PCIF_CHECK_SERIAL(pHwDevExt);
|
|
|
|
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SR );
|
|
val &= 0x07;
|
|
*pErrCode |= val;
|
|
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
AUDIO_ZR385_OUT( pHwDevExt, 0x00 );
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
// ***************************************************************************
|
|
// T C 9 4 2 5 F
|
|
// ***************************************************************************
|
|
|
|
void AUDIO_TC9425_INIT_DIGITAL( PHW_DEVICE_EXTENSION pHwDevExt )
|
|
{
|
|
UCHAR val;
|
|
|
|
val = 0;
|
|
|
|
if( ((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioType != AUDIO_OUT_ANALOG )
|
|
if( ((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioMode == AUDIO_TYPE_AC3 )
|
|
val |= 0x40;
|
|
if( (((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioCgms & 0x02) == 0x00 ) {
|
|
val |= 0x20; // Copying is permitted without restriction
|
|
DebugPrint( ( DebugLevelTrace, "DVDTS: AUDIO Copy OK\r\n" ) );
|
|
}
|
|
else {
|
|
val &= 0xDF; // Basically no copying is permitted (depend on L-Bit below)
|
|
DebugPrint( ( DebugLevelTrace, "DVDTS: AUDIO Copy NG\r\n" ) );
|
|
}
|
|
|
|
// COPY, EMPH
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x38 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, val );
|
|
|
|
if( (((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioCgms & 0x01) == 0x00 ) {
|
|
val = 0x98; // L-Bit==0; One generation of copies may be made
|
|
DebugPrint( ( DebugLevelTrace, "DVDTS: AUDIO 1 Time Copy OK\r\n" ) );
|
|
}
|
|
else {
|
|
val = 0x99; // L-Bit==1; No copying is permitted
|
|
DebugPrint( ( DebugLevelTrace, "DVDTS: AUDIO 1 Time Copy NG\r\n" ) );
|
|
}
|
|
|
|
// Category Code, LBIT
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x38 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, val );
|
|
|
|
// Channel Num
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x38 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x00 );
|
|
|
|
if( ((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioFreq == AUDIO_FS_32 )
|
|
val = 0xc0;
|
|
else if( ((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioFreq == AUDIO_FS_44 )
|
|
val = 0x00;
|
|
else if( ((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioFreq == AUDIO_FS_48 )
|
|
val = 0x40;
|
|
else
|
|
val = 0x40;
|
|
|
|
// FS1, FS2, CKA1, CKA2
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x38 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, val );
|
|
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x72 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x00 );
|
|
}
|
|
|
|
void AUDIO_TC9425_INIT_ANALOG( PHW_DEVICE_EXTENSION pHwDevExt )
|
|
{
|
|
UCHAR val;
|
|
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x38 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x00 );
|
|
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x38 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x00 );
|
|
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x38 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x00 );
|
|
|
|
// MONO, CHS, EM, EMP
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x38 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x00 );
|
|
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x72 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0xc0 );
|
|
|
|
//
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x38 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x00 );
|
|
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x38 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x00 );
|
|
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x38 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x00 );
|
|
|
|
if( ((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioType == AUDIO_OUT_DIGITAL )
|
|
val = 0x79;
|
|
else
|
|
val = 0x69;
|
|
if( ((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioFreq == AUDIO_FS_96 )
|
|
val |= 0x04;
|
|
else if( ((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioFreq == AUDIO_FS_48 )
|
|
val |= 0x04;
|
|
|
|
// BIT, DOIN, DOSEL, IFSEL, RLS
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x38 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, val );
|
|
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x72 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0xc0 );
|
|
|
|
AUDIO_TC9425_SET_VOLUME( pHwDevExt ,((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioVolume );
|
|
}
|
|
|
|
void AUDIO_TC9425_SET_VOLUME( PHW_DEVICE_EXTENSION pHwDevExt , ULONG vol )
|
|
{
|
|
UCHAR ucvol;
|
|
|
|
((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioVolume = vol;
|
|
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x38 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x00 );
|
|
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x38 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x00 );
|
|
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x38 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x00 );
|
|
|
|
ucvol = (UCHAR)vol;
|
|
ucvol = INVERSE_BYTE( pHwDevExt, ucvol );
|
|
ucvol = (UCHAR)( ucvol >> 1 );
|
|
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x38 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, ucvol );
|
|
|
|
PCIF_CHECK_SERIAL( pHwDevExt );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SCNT, 0x72 );
|
|
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + PCIF_SW, 0x40 );
|
|
}
|
|
|
|
UCHAR INVERSE_BYTE( PHW_DEVICE_EXTENSION pHwDevExt, UCHAR uc )
|
|
{
|
|
ULONG i;
|
|
UCHAR retch = 0;
|
|
|
|
for( i = 0; i < 8; i++ )
|
|
retch |= ( uc & 0x01 ) << ( 7 - i );
|
|
|
|
return retch;
|
|
}
|