error_code cellAudioCreateNotifyEventQueue(vm::ptr<u32> id, vm::ptr<u64> key) { cellAudio.warning("cellAudioCreateNotifyEventQueue(id=*0x%x, key=*0x%x)", id, key); vm::var<sys_event_queue_attribute_t> attr; attr->protocol = SYS_SYNC_FIFO; attr->type = SYS_PPU_QUEUE; attr->name_u64 = 0; for (u64 i = 0; i < 100; i++) { // Create an event queue "bruteforcing" an available key const u64 key_value = 0x80004d494f323221ull + i; if (const s32 res = sys_event_queue_create(id, attr, key_value, 32)) { if (res != CELL_EEXIST) { return res; } } else { *key = key_value; return CELL_OK; } } return CELL_AUDIO_ERROR_EVENT_QUEUE; }
int sampleSpursUtilSpuPrintfServiceInitialize(SampleUtilSpursPrintfService *service, CellSpurs* spurs, int prio) { int ret; service->spurs = spurs; /* create event_queue for printf */ sys_event_queue_attribute_t attr; sys_event_queue_attribute_initialize (attr); /* queue depth must be equal or greater than max_spu_threads */ ret = sys_event_queue_create (&service->equeue, &attr, SYS_EVENT_QUEUE_LOCAL, 8); if (ret) { printf ("sys_event_queue_create failed (%d)\n", ret); return ret; } /* create ppu_thread for printf handling */ ret = sys_ppu_thread_create (&service->spu_printf_handler, spu_printf_handler_entry, (uint64_t)(uintptr_t)service, prio, STACK_SIZE, SYS_PPU_THREAD_CREATE_JOINABLE, "spu_printf_handler"); if (ret) { printf ("sys_ppu_thread_create failed (%d)\n", ret); return ret; } /* * Create the terminating port. This port is used only in * spu_printf_service_finalize(). */ ret = sys_event_port_create(&service->terminating_port, SYS_EVENT_PORT_LOCAL, TERMINATING_PORT_NAME); if (ret) { printf ("spu_printf_server_initialize: sys_event_port_create failed %d\n", ret); return ret; } ret = sys_event_port_connect_local(service->terminating_port, service->equeue); if (ret) { printf ("spu_printf_server_initialize: sys_event_connect failed %d\n", ret); return ret; } /* connect to SPURS */ uint8_t port = SPU_PORT_PRINTF; ret = cellSpursAttachLv2EventQueue (service->spurs, service->equeue, &port, 0); if (ret) { printf ("spu_printf_server_initialize: cellSpursAttachLv2EventQueue failed %d\n", ret); return ret; } return CELL_OK; }