summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/export/audio.h4
-rw-r--r--firmware/target/arm/pp/usb-fw-pp502x.c15
-rw-r--r--firmware/usbstack/usb_storage.c17
3 files changed, 12 insertions, 24 deletions
diff --git a/firmware/export/audio.h b/firmware/export/audio.h
index 8108f50..57f7981 100644
--- a/firmware/export/audio.h
+++ b/firmware/export/audio.h
@@ -75,10 +75,6 @@ void audio_error_clear(void);
int audio_get_file_pos(void);
void audio_beep(int duration);
-/* Required call when audio buffer is required for some other purpose */
-/* implemented in apps but called from firmware(!) */
-unsigned char *audio_get_buffer(bool talk_buf, size_t *buffer_size);
-
#if CONFIG_CODEC == SWCODEC
void audio_next_dir(void);
void audio_prev_dir(void);
diff --git a/firmware/target/arm/pp/usb-fw-pp502x.c b/firmware/target/arm/pp/usb-fw-pp502x.c
index 44cce14..acbb221 100644
--- a/firmware/target/arm/pp/usb-fw-pp502x.c
+++ b/firmware/target/arm/pp/usb-fw-pp502x.c
@@ -230,21 +230,6 @@ void usb_insert_int(void)
}
#endif /* USB_STATUS_BY_EVENT */
-#ifdef HAVE_BOOTLOADER_USB_MODE
-/* Replacement function that returns all unused memory after the bootloader
- * because the storage driver uses the audio buffer */
-extern unsigned char freebuffer[];
-extern unsigned char freebufferend[];
-unsigned char *audio_get_buffer(bool talk_buf, size_t *buffer_size)
-{
- if (buffer_size)
- *buffer_size = freebufferend - freebuffer + 1;
-
- return freebuffer;
- (void)talk_buf;
-}
-#endif /* HAVE_BOOTLOADER_USB_MODE */
-
void usb_drv_int_enable(bool enable)
{
/* enable/disable USB IRQ in CPU */
diff --git a/firmware/usbstack/usb_storage.c b/firmware/usbstack/usb_storage.c
index d1279d0..a3b8673 100644
--- a/firmware/usbstack/usb_storage.c
+++ b/firmware/usbstack/usb_storage.c
@@ -34,6 +34,7 @@
#if CONFIG_RTC
#include "timefuncs.h"
#endif
+#include "core_alloc.h"
#ifdef USB_USE_RAMDISK
#define RAMDISK_SIZE 2048
@@ -430,6 +431,7 @@ int usb_storage_get_config_descriptor(unsigned char *dest,int max_packet_size)
return (dest - orig_dest);
}
+static int usb_handle;
void usb_storage_init_connection(void)
{
logf("ums: set config");
@@ -452,13 +454,17 @@ void usb_storage_init_connection(void)
#else
/* TODO : check if bufsize is at least 32K ? */
size_t bufsize;
- unsigned char * audio_buffer;
+ unsigned char * buffer;
+ /* dummy ops with no callbacks, needed because by
+ * default buflib buffers can be moved around which must be avoided */
+ static struct buflib_callbacks dummy_ops;
- audio_buffer = audio_get_buffer(false,&bufsize);
+ usb_handle = core_alloc_maximum("usb storage", &bufsize, &dummy_ops);
+ buffer = core_get_data(usb_handle);
#if defined(UNCACHED_ADDR) && CONFIG_CPU != AS3525
- cbw_buffer = (void *)UNCACHED_ADDR((unsigned int)(audio_buffer+31) & 0xffffffe0);
+ cbw_buffer = (void *)UNCACHED_ADDR((unsigned int)(buffer+31) & 0xffffffe0);
#else
- cbw_buffer = (void *)((unsigned int)(audio_buffer+31) & 0xffffffe0);
+ cbw_buffer = (void *)((unsigned int)(buffer+31) & 0xffffffe0);
#endif
tb.transfer_buffer = cbw_buffer + MAX_CBW_SIZE;
commit_discard_dcache();
@@ -478,7 +484,8 @@ void usb_storage_init_connection(void)
void usb_storage_disconnect(void)
{
- /* Empty for now */
+ if (usb_handle > 0)
+ usb_handle = core_free(usb_handle);
}
/* called by usb_core_transfer_complete() */