diff options
Diffstat (limited to 'firmware/usbstack/usb_storage.c')
-rw-r--r-- | firmware/usbstack/usb_storage.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/firmware/usbstack/usb_storage.c b/firmware/usbstack/usb_storage.c index d1279d0ee1..a3b867319d 100644 --- a/firmware/usbstack/usb_storage.c +++ b/firmware/usbstack/usb_storage.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #if CONFIG_RTC | 34 | #if CONFIG_RTC |
35 | #include "timefuncs.h" | 35 | #include "timefuncs.h" |
36 | #endif | 36 | #endif |
37 | #include "core_alloc.h" | ||
37 | 38 | ||
38 | #ifdef USB_USE_RAMDISK | 39 | #ifdef USB_USE_RAMDISK |
39 | #define RAMDISK_SIZE 2048 | 40 | #define RAMDISK_SIZE 2048 |
@@ -430,6 +431,7 @@ int usb_storage_get_config_descriptor(unsigned char *dest,int max_packet_size) | |||
430 | return (dest - orig_dest); | 431 | return (dest - orig_dest); |
431 | } | 432 | } |
432 | 433 | ||
434 | static int usb_handle; | ||
433 | void usb_storage_init_connection(void) | 435 | void usb_storage_init_connection(void) |
434 | { | 436 | { |
435 | logf("ums: set config"); | 437 | logf("ums: set config"); |
@@ -452,13 +454,17 @@ void usb_storage_init_connection(void) | |||
452 | #else | 454 | #else |
453 | /* TODO : check if bufsize is at least 32K ? */ | 455 | /* TODO : check if bufsize is at least 32K ? */ |
454 | size_t bufsize; | 456 | size_t bufsize; |
455 | unsigned char * audio_buffer; | 457 | unsigned char * buffer; |
458 | /* dummy ops with no callbacks, needed because by | ||
459 | * default buflib buffers can be moved around which must be avoided */ | ||
460 | static struct buflib_callbacks dummy_ops; | ||
456 | 461 | ||
457 | audio_buffer = audio_get_buffer(false,&bufsize); | 462 | usb_handle = core_alloc_maximum("usb storage", &bufsize, &dummy_ops); |
463 | buffer = core_get_data(usb_handle); | ||
458 | #if defined(UNCACHED_ADDR) && CONFIG_CPU != AS3525 | 464 | #if defined(UNCACHED_ADDR) && CONFIG_CPU != AS3525 |
459 | cbw_buffer = (void *)UNCACHED_ADDR((unsigned int)(audio_buffer+31) & 0xffffffe0); | 465 | cbw_buffer = (void *)UNCACHED_ADDR((unsigned int)(buffer+31) & 0xffffffe0); |
460 | #else | 466 | #else |
461 | cbw_buffer = (void *)((unsigned int)(audio_buffer+31) & 0xffffffe0); | 467 | cbw_buffer = (void *)((unsigned int)(buffer+31) & 0xffffffe0); |
462 | #endif | 468 | #endif |
463 | tb.transfer_buffer = cbw_buffer + MAX_CBW_SIZE; | 469 | tb.transfer_buffer = cbw_buffer + MAX_CBW_SIZE; |
464 | commit_discard_dcache(); | 470 | commit_discard_dcache(); |
@@ -478,7 +484,8 @@ void usb_storage_init_connection(void) | |||
478 | 484 | ||
479 | void usb_storage_disconnect(void) | 485 | void usb_storage_disconnect(void) |
480 | { | 486 | { |
481 | /* Empty for now */ | 487 | if (usb_handle > 0) |
488 | usb_handle = core_free(usb_handle); | ||
482 | } | 489 | } |
483 | 490 | ||
484 | /* called by usb_core_transfer_complete() */ | 491 | /* called by usb_core_transfer_complete() */ |