//************************************************************************** // // Title : WDMBuff.cpp // // Date : 1997.12.08 1st making // // Author : Toshiba [PCS](PSY) Hideki Yagi // // Copyright 1997 Toshiba Corporation. All Rights Reserved. // // ------------------------------------------------------------------------- // // Change log : // // Date Revision Description // ------------ ---------- ----------------------------------------------- // 1997.12.08 000.0000 1st making. // //************************************************************************** #include "includes.h" #include "wdmbuff.h" #include "dvdinit.h" CWDMBuffer::CWDMBuffer( void ) { m_pSrb = NULL; m_WDMBuffNext = NULL; #ifndef REARRANGEMENT m_EndFlag = TRUE; //TRUE:last buffer FALSE:non last buffer m_BuffNumber = 0; m_StartPacketNumber = 0; m_PacketNum = 0; m_BeforePacketNum = 0; m_Enable = FALSE; #endif REARRANGEMENT } CWDMBuffer::~CWDMBuffer( void ) { m_pSrb = NULL; m_WDMBuffNext = NULL; #ifndef REARRANGEMENT //追加分変数の初期化 m_EndFlag = TRUE; m_BuffNumber = 0; m_StartPacketNumber = 0; m_PacketNum = 0; m_BeforePacketNum = 0; m_Enable = FALSE; #endif REARRANGEMENT } IMBoardListItem *CWDMBuffer::GetNext( void ) { return( m_WDMBuffNext ); } void CWDMBuffer::SetNext( IMBoardListItem *item ) { m_WDMBuffNext = item; } DWORD CWDMBuffer::GetPageNum( void ) { ASSERT( m_pSrb != NULL ); #ifndef REARRANGEMENT return ((DWORD) m_PacketNum); #else return( (DWORD)(m_pSrb->NumberOfPhysicalPages) ); // Is it OK?????? #endif REARRANGEMENT // return( (DWORD)(m_pSrb->NumberOfBuffers) ); // Is it OK?????? } DWORD CWDMBuffer::GetPageSize( DWORD pagenum ) { ULONG PageSize; // DWORD i, j; // PKSSTREAM_HEADER pStruc; ASSERT( m_pSrb != NULL ); #ifndef REARRANGEMENT ASSERT( m_PacketNum >= pagenum ); #else ASSERT( m_pSrb->NumberOfPhysicalPages >= pagenum ); #endif REARRANGEMENT ASSERT( pagenum != 0 ); #ifndef REARRANGEMENT PageSize = m_pSrb->ScatterGatherBuffer[m_BeforePacketNum + pagenum - 1].Length; #else PageSize = m_pSrb->ScatterGatherBuffer[pagenum-1].Length; #endif REARRANGEMENT // DBG_PRINTF( ("WDMBUFF: PageSzie = 0x%0x\n\r", PageSize ) ); /* j = 0; for( i=0; i<(m_pSrb->NumberOfBuffers); i++ ){ pStruc = &((PKSSTREAM_HEADER)(m_pSrb->CommandData.DataBufferArray))[i]; if( pStruc->DataUsed != 0 ){ if( !(pStruc->OptionsFlags & KSSTREAM_HEADER_OPTIONSF_TYPECHANGED ) ){ // DVD valid data to transfer to decoder board. PageSize = m_pSrb->ScatterGatherBuffer[j].Length; j++; } if( j>=pagenum ) break; } } */ ASSERT( (PageSize % 2048) == 0 ); return( (DWORD)PageSize ); } BOOL CWDMBuffer::GetPagePointer( DWORD pagenum, DWORD *LinAddr, DWORD *PhysAddr ) { PHYSICAL_ADDRESS pAdd; DWORD i, j; PKSSTREAM_HEADER pStruc; ASSERT( m_pSrb != NULL ); #ifndef REARRANGEMENT ASSERT( m_PacketNum >= pagenum ); #else ASSERT( m_pSrb->NumberOfPhysicalPages >= pagenum ); #endif REARRANGEMENT ASSERT( pagenum != 0 ); #ifndef REARRANGEMENT pAdd = m_pSrb->ScatterGatherBuffer[m_BeforePacketNum + pagenum - 1].PhysicalAddress; #else pAdd = m_pSrb->ScatterGatherBuffer[pagenum-1].PhysicalAddress; #endif REARRANGEMENT *PhysAddr = (DWORD)(pAdd.LowPart); *LinAddr = (DWORD)0; // Linear address is validate? j = 0; for( i=0; i<(m_pSrb->NumberOfBuffers); i++ ){ pStruc = &((PKSSTREAM_HEADER)(m_pSrb->CommandData.DataBufferArray))[i]; ASSERT( pStruc != NULL ); if( pStruc->DataUsed != 0 ){ if( !(pStruc->OptionsFlags & KSSTREAM_HEADER_OPTIONSF_TYPECHANGED) ) { // DVD valid data to transfer to decoder board. *LinAddr = (DWORD)(pStruc->Data); j++; } if( j>=pagenum ) break; } } ASSERT( j != 0 ); ASSERT( *LinAddr != 0 ); return( TRUE ); } DWORD CWDMBuffer::GetBufferFlag( void ) { return( (DWORD)0 ); // return( (DWORD)m_pSrb->Flags ); } BOOL CWDMBuffer::SetSRB( PHW_STREAM_REQUEST_BLOCK pSrb ) { ASSERT( pSrb != NULL ); if( pSrb == NULL ){ return( FALSE ); } m_pSrb = pSrb; return( TRUE ); } PHW_STREAM_REQUEST_BLOCK CWDMBuffer::GetSRB( void ) { ASSERT( m_pSrb != NULL ); return( m_pSrb ); } VOID CWDMBuffer::Init( void ) { m_pSrb = NULL; m_WDMBuffNext = NULL; #ifndef REARRANGEMENT m_EndFlag = TRUE; m_BuffNumber = 0; m_StartPacketNumber = 0; m_PacketNum = 0; m_BeforePacketNum = 0; m_Enable = FALSE; #endif REARRANGEMENT }