Add RKW support to rolo
Change-Id: If0dc0173701e1a4a9e1aa785548596c366306c2b
This commit is contained in:
parent
2f8b44aae2
commit
4718ff9db0
1 changed files with 65 additions and 2 deletions
|
@ -45,6 +45,10 @@
|
||||||
#define FIRMWARE_OFFSET_FILE_DATA 0x200
|
#define FIRMWARE_OFFSET_FILE_DATA 0x200
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef RKW_FORMAT
|
||||||
|
#include "rkw.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !defined(IRIVER_IFP7XX_SERIES)
|
#if !defined(IRIVER_IFP7XX_SERIES)
|
||||||
/* FIX: this doesn't work on iFP */
|
/* FIX: this doesn't work on iFP */
|
||||||
|
|
||||||
|
@ -113,11 +117,12 @@ static void rolo_error(const char *text)
|
||||||
lcd_stop_scroll();
|
lcd_stop_scroll();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CONFIG_CPU == SH7034 || CONFIG_CPU == IMX31L
|
#if CONFIG_CPU == SH7034 || CONFIG_CPU == IMX31L || CONFIG_CPU == RK27XX
|
||||||
/* these are in assembler file "descramble.S" for SH7034 */
|
/* these are in assembler file "descramble.S" for SH7034 */
|
||||||
extern unsigned short descramble(const unsigned char* source,
|
extern unsigned short descramble(const unsigned char* source,
|
||||||
unsigned char* dest, int length);
|
unsigned char* dest, int length);
|
||||||
/* this is in firmware/target/arm/imx31/rolo_restart.c for IMX31 */
|
/* this is in firmware/target/arm/imx31/rolo_restart.c for IMX31 */
|
||||||
|
/* this is in firmware/target/arm/rk27xx/rolo_restart.c for rk27xx */
|
||||||
extern void rolo_restart(const unsigned char* source, unsigned char* dest,
|
extern void rolo_restart(const unsigned char* source, unsigned char* dest,
|
||||||
int length);
|
int length);
|
||||||
#else
|
#else
|
||||||
|
@ -197,10 +202,67 @@ extern unsigned long loadaddress;
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
*
|
*
|
||||||
* Name: rolo_load_app(char *filename,int scrambled)
|
* Name: rolo_load(const char *filename)
|
||||||
* Filename must be a fully defined filename including the path and extension
|
* Filename must be a fully defined filename including the path and extension
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
#ifdef RKW_FORMAT
|
||||||
|
int rolo_load(const char* filename)
|
||||||
|
{
|
||||||
|
unsigned char* ramstart = (void*)&loadaddress;
|
||||||
|
unsigned char* filebuf;
|
||||||
|
size_t filebuf_size;
|
||||||
|
int errno, length;
|
||||||
|
|
||||||
|
lcd_clear_display();
|
||||||
|
lcd_puts(0, 0, "ROLO...");
|
||||||
|
lcd_puts(0, 1, "Loading");
|
||||||
|
lcd_update();
|
||||||
|
#ifdef HAVE_REMOTE_LCD
|
||||||
|
lcd_remote_clear_display();
|
||||||
|
lcd_remote_puts(0, 0, "ROLO...");
|
||||||
|
lcd_remote_puts(0, 1, "Loading");
|
||||||
|
lcd_remote_update();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
audio_stop();
|
||||||
|
|
||||||
|
/* get the system buffer. release only in case of error, otherwise
|
||||||
|
* we don't return anyway */
|
||||||
|
rolo_handle = core_alloc_maximum("rolo", &filebuf_size, NULL);
|
||||||
|
filebuf = core_get_data(rolo_handle);
|
||||||
|
|
||||||
|
errno = load_rkw(filebuf, filename, filebuf_size);
|
||||||
|
if (errno < 0)
|
||||||
|
{
|
||||||
|
rolo_error(rkw_strerror(errno));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
length = errno;
|
||||||
|
|
||||||
|
#ifdef HAVE_STORAGE_FLUSH
|
||||||
|
lcd_puts(0, 1, "Flushing storage buffers");
|
||||||
|
lcd_update();
|
||||||
|
storage_flush();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
lcd_puts(0, 1, "Executing");
|
||||||
|
lcd_update();
|
||||||
|
#ifdef HAVE_REMOTE_LCD
|
||||||
|
lcd_remote_puts(0, 1, "Executing");
|
||||||
|
lcd_remote_update();
|
||||||
|
#endif
|
||||||
|
adc_close();
|
||||||
|
|
||||||
|
disable_interrupt(IRQ_FIQ_STATUS);
|
||||||
|
|
||||||
|
rolo_restart(filebuf, ramstart, length);
|
||||||
|
|
||||||
|
/* never reached */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
int rolo_load(const char* filename)
|
int rolo_load(const char* filename)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
|
@ -395,6 +457,7 @@ int rolo_load(const char* filename)
|
||||||
return 0; /* this is never reached */
|
return 0; /* this is never reached */
|
||||||
(void)checksum; (void)file_checksum;
|
(void)checksum; (void)file_checksum;
|
||||||
}
|
}
|
||||||
|
#endif /* ifdef RKW_FORMAT */
|
||||||
#else /* !defined(IRIVER_IFP7XX_SERIES) */
|
#else /* !defined(IRIVER_IFP7XX_SERIES) */
|
||||||
int rolo_load(const char* filename)
|
int rolo_load(const char* filename)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue