void *USB_Alloc(int size) { void * ret = 0; ret= os_heap_alloc_aligned(heap, size, 32); // ret= os_heap_alloc(heap, size); if(ret==0) { os_puts("USB Alloc: not enough memory!\n"); while(1) {swi_mload_led_on();ehci_msleep(200);swi_mload_led_off();ehci_msleep(200);} } return ret; }
void *Mem_Alloc(u32 size) { /* Allocate memory */ return os_heap_alloc_aligned(hid, size, 32); }
int read_from_device(void *outbuf, u32 size, u32 lba) { int r=-1; int l; r = __DI_CheckOffset(lba); if (r) return r; r=-1; lba += dip.base + dip.offset; if (dip.has_id) { /* Free memory */ if(fat_mode<=0) { if (table_lba) os_heap_free(0, table_lba); table_lba=NULL; ciso_lba=-1; } return read_from_device_out(outbuf, size, lba); } if(ciso_lba>=0 && ciso_lba!=0x7fffffff) { u32 lba_glob=0; if(table_lba==NULL) table_lba= (void *) os_heap_alloc_aligned(0, 2048*4, 32); // from global heap //ciso_lba=265; /* Allocate memory */ u8 * buff = dip_alloc_aligned(0x800, 32); if (!buff) ciso_lba=-1; if(ciso_lba>=0) { while(1) { lba_glob=(ciso_lba+16)<<9; r=read_from_device_out(buff, 2048, ciso_lba<<9); // read 16 cached sectors if(r<0) {ciso_lba=-1;break;} if((buff[0]=='C' && buff[1]=='I' && buff[2]=='S' && buff[3]=='O')) break; else { if(ciso_lba!=0) {ciso_lba=0;continue;} ciso_lba=-1; } break; } } // if(ciso_lba>=0 && table_lba && buff) ciso_lba=0x7fffffff; if(ciso_lba>=0 && table_lba) { ciso_size=(((u32)buff[4])+(((u32)buff[5])<<8)+(((u32)buff[6])<<16)+(((u32)buff[7])<<24))/4; dip_memset(mem_index,0,2048); for(l=0;l<16384;l++) { if(((l+8) & 2047)==0 && (l+8)>=2048) { r=read_from_device_out(buff, 2048, (ciso_lba+((l+8)>>11))<<9); // read 16 cached sectors if(r<0) {ciso_lba=-1;break;} } if((l & 7)==0) table_lba[l>>3]=lba_glob; if(buff[(8+l) & 2047]) { mem_index[l>>3]|=1<<(l & 7); lba_glob+=ciso_size; } }