void memobj_init(void) { unsigned long min_bytes, max_bytes; unsigned long mem_bytes = GetPhysicalPages() * 0.90 * TILT_PAGESIZE; unsigned long cache_bytes = GetBcacheSize() * 2; min_bytes = 2048 * 1024; min_bytes = Max(min_bytes, cache_bytes); max_bytes = (unsigned long)INT_MAX; max_bytes = Min(max_bytes, mem_bytes); max_bytes = Min(max_bytes, rlimit(RLIMIT_DATA)); max_bytes = Min(max_bytes, rlimit(RLIMIT_AS)); #ifdef RLIMIT_VMEM max_bytes = Min(max_bytes, rlimit(RLIMIT_VMEM)); #endif init_int(&MinHeapByte, min_bytes); init_int(&MaxHeapByte, 0.40 * max_bytes); assert(MinHeapByte <= MaxHeapByte); #ifdef sparc assert(TILT_PAGESIZE == sysconf(_SC_PAGESIZE)); #else assert(TILT_PAGESIZE == sysconf(_SC_PAGE_SIZE)); #endif StackInitialize(); HeapInitialize(); GuardStackletSize = TILT_PAGESIZE / kilobyte; stackletOffset = (GuardStackletSize + MLStackletSize + CStackletSize) * kilobyte; primaryStackletOffset = 0; replicaStackletOffset = stackletOffset; /* So we don't pay mmap for first thread - general case? XXXX */ { int i; Stacklet_t *temp[5]; for (i=0; i<5; i++) temp[i] = Stacklet_Alloc(NULL); for (i=0; i<5; i++) Stacklet_Dealloc(temp[i]); } }
void CTestPage::StartPlayback( void ) ///////////////////////////////////////////////////////////////////////////// { ULONG ulBytesRequested, ulCircularBufferSize, ulBytesTransfered; LONG lBufferSize; PHALWAVEDEVICE pHD; PWAVEFORMATEX pFormatEx; if( m_nPlayMode != MODE_STOP ) return; m_nPlayDevice = m_PlayDevice.GetCurSel(); DPF(("Starting Play Device %d\n", m_nPlayDevice )); pHD = m_pHalAdapter->GetWaveOutDevice( m_nPlayDevice ); if( !m_WavePlayFile.Open( m_szFileName, MMIO_READ ) ) { DPF(("Open Failed!\n")); return; } if( !m_WavePlayFile.ReadHeader() ) { DPF(("ReadHeader Failed!\n")); return; } pFormatEx = m_WavePlayFile.GetFormat(); //DPF(("SetFormat\n")); pHD->SetFormat( pFormatEx->wFormatTag, pFormatEx->nChannels, pFormatEx->nSamplesPerSec, pFormatEx->wBitsPerSample, pFormatEx->nBlockAlign ); m_lSampleRate = pFormatEx->nSamplesPerSec; // Get the amount of free space on device //DPF(("GetTransferSize\n")); pHD->GetTransferSize( &ulBytesRequested, &ulCircularBufferSize ); ulCircularBufferSize += sizeof(DWORD); m_ulPlayBufferSize = ulCircularBufferSize; m_pPlayBuffer = malloc( m_ulPlayBufferSize ); m_ulPlayBufferPages = GetNumberOfPhysicalPages( m_pPlayBuffer, m_ulPlayBufferSize ); GetPhysicalPages( m_pPlayBuffer, m_ulPlayBufferSize, &m_ulPlayBufferPages, m_Pages ); //DPF(("ReadBlock %ld\n", ulBytesRequested )); lBufferSize = m_WavePlayFile.ReadBlock( (HPSTR)m_pPlayBuffer, ulBytesRequested ); if( lBufferSize == -1 ) { DPF(("ReadBlock Failed!\n")); return; } //lBufferSize = ulBytesRequested; // only call the hal if we have audio to transfer if( lBufferSize ) { DPF(("T [%ld]", lBufferSize )); pHD->TransferAudio( m_pPlayBuffer, lBufferSize, &ulBytesTransfered ); //DPF(("Write %ld\n", ulBytesTransfered )); } // make sure the limit register get set correctly //DPF(("TransferComplete\n")); pHD->TransferComplete( TRUE ); // put the device in MODE_PLAY //DPF(("Start\n")); if( pHD->Start() ) { DPF(("Start Failed!\n")); } // change the button to stop SetDlgItemText( IDC_PLAY, "Stop" ); // set the mode to playing m_nPlayMode = MODE_RUN; }