// OK int DriverStart(int size, void *args) { void *lpData; SceUID hFPL = sceKernelCreateFpl("SceUsbAcc", 1, 256, 368, 1, NULL); // 368 = 2*184=2*sizeof(UsbData) g_hFPL = hFPL; if (hFPL< 0) { return (-1); } if (sceKernelTryAllocateFpl(hFPL, &lpData) < 0) { sceKernelDeleteFpl(g_hFPL); return (-1); } g_lpData = lpData; struct UsbData *lpUsbData = (struct UsbData *)((int)lpData + 64); g_driver.devp_hi = lpUsbData->devdesc; // UsbData[0] g_driver.confp_hi = &lpUsbData->config; lpData = &lpUsbData->confdesc; lpUsbData = sub_00000670(SPEED_HIGH, lpUsbData->devdesc, &lpUsbData->config, &lpUsbData->confdesc); g_driver.devp = lpUsbData->devdesc; // UsbData[1] g_driver.confp = &lpUsbData->config; lpData = &lpUsbData->confdesc; lpData = sub_00000670(SPEED_FULL, lpUsbData->devdesc, &lpUsbData->config, &lpUsbData->confdesc); g_info = 0; g_bAttached = 0; int i; for (i = 0; i < 2; i++) { g_usbEndps[i].unk3 = 0; } g_usbDevReq.endp = g_usbEndps; g_usbDevReq.data = g_lpData; g_usbDevReq.size = 64; g_usbDevReq.unkc = 1; g_usbDevReq.func = UsbDevReqComplete; g_usbDevReq.recvsize = 0; g_usbDevReq.retcode = 0; g_usbDevReq.unk1c = 0; g_usbDevReq.arg = 0; sceUsbBus_driver_90B82F55(); g_bStarted = 1; return (0); }
void *fpl_try_alloc(int fpl) { int result; void *addr = (void*)-1; result = sceKernelTryAllocateFpl(fpl, &addr); printf("sceKernelTryAllocateFpl result=%08x addr=%p\n", result, addr); printMem(); if (result != 0) addr = 0; return addr; }