void Module::initialiseSchedulerFunctions() { sActiveThreads = coreinit::internal::sysAlloc<OSThreadQueue>(); OSInitThreadQueue(sActiveThreads); for (auto i = 0; i < 3; ++i) { sSchedulerEnabled[i] = true; sCurrentThread[i] = nullptr; sCoreRunQueue[i] = coreinit::internal::sysAlloc<OSThreadQueue>(); OSInitThreadQueue(sCoreRunQueue[i]); sLastSwitchTime[i] = std::chrono::high_resolution_clock::now(); sCorePauseTime[i] = std::chrono::time_point<std::chrono::high_resolution_clock>::max(); } }
static void *gx_audio_init(const char *device, unsigned rate, unsigned latency) { gx_audio_t *wa = (gx_audio_t*)memalign(32, sizeof(*wa)); if (!wa) return NULL; gx_audio_data = (gx_audio_t*)wa; memset(wa, 0, sizeof(*wa)); AIInit(NULL); AIRegisterDMACallback(dma_callback); if (rate < 33000) { AISetDSPSampleRate(AI_SAMPLERATE_32KHZ); g_settings.audio.out_rate = 32000; } else { AISetDSPSampleRate(AI_SAMPLERATE_48KHZ); g_settings.audio.out_rate = 48000; } OSInitThreadQueue(&wa->cond); wa->dma_write = BLOCKS - 1; DCFlushRange(wa->data, sizeof(wa->data)); AIInitDMA((uint32_t)wa->data[wa->dma_next], CHUNK_SIZE); AIStartDMA(); return wa; }
void Module::initialiseAlarm() { for (auto i = 0u; i < CoreCount; ++i) { OSInitAlarmQueue(sAlarmQueue[i]); OSInitAlarmQueue(sAlarmCallbackQueue[i]); OSInitThreadQueue(sAlarmCallbackThreadQueue[i]); } }