#endif
-#define ZYLIN_VERSION "1.47"
+#define ZYLIN_VERSION "1.48"
#define ZYLIN_DATE __DATE__
#define ZYLIN_TIME __TIME__
/* hmmm.... we can't pick up the right # during build if we've checked this out
return ERROR_OK;
}
+
+
+
extern flash_driver_t *flash_drivers[];
extern target_type_t *target_types[];
extern char _stext, _etext; // Defined by the linker
+static char *start_of_code=&_stext;
+static char *end_of_code=&_etext;
+
void start_profile(void)
{
// This starts up the system-wide profiling, gathering
// too large, the usefulness of the profile is reduced.
// no more interrupts than 1/10ms.
- // profile_on(&_stext, &_etext, 16, 10000); // DRAM
//profile_on((void *)0, (void *)0x40000, 16, 10000); // SRAM
- profile_on(0, &_etext, 16, 10000); // SRAM & DRAM
+// profile_on(0, &_etext, 16, 10000); // SRAM & DRAM
+ profile_on(start_of_code, end_of_code, 16, 10000); // Nios DRAM
}
#endif
cyg_mutex_lock(&httpstate.jim_lock);
}
+
+void format(void)
+{
+ diag_printf("Formatting JFFS2...\n");
+
+ cyg_io_handle_t handle;
+
+ Cyg_ErrNo err;
+ err = cyg_io_lookup(CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1, &handle);
+ if (err != ENOERR)
+ {
+ diag_printf("Flash Error cyg_io_lookup: %d\n", err);
+ reboot();
+ }
+
+
+ cyg_uint32 len;
+ cyg_io_flash_getconfig_devsize_t ds;
+ len = sizeof (ds);
+ err = cyg_io_get_config(handle,
+ CYG_IO_GET_CONFIG_FLASH_DEVSIZE, &ds, &len);
+ if (err != ENOERR)
+ {
+ diag_printf("Flash error cyg_io_get_config %d\n", err);
+ reboot();
+ }
+
+ cyg_io_flash_getconfig_erase_t e;
+ void *err_addr;
+ len = sizeof (e);
+
+ e.offset = 0;
+ e.len = ds.dev_size;
+ e.err_address = &err_addr;
+
+ diag_printf("Formatting 0x%08x bytes\n", ds.dev_size);
+ err = cyg_io_get_config(handle, CYG_IO_GET_CONFIG_FLASH_ERASE,
+ &e, &len);
+ if (err != ENOERR)
+ {
+ diag_printf("Flash erase error %d offset 0x%p\n", err, err_addr);
+ reboot();
+ }
+
+ diag_printf("Flash formatted successfully\n");
+
+ reboot();
+}
+
+
+
+static int
+zylinjtag_Jim_Command_format_jffs2(Jim_Interp *interp,
+ int argc,
+ Jim_Obj * const *argv)
+{
+ if (argc != 1)
+ {
+ return JIM_ERR;
+ }
+
+ format();
+ for(;;);
+}
+
+
static int
zylinjtag_Jim_Command_rm(Jim_Interp *interp,
int argc,
Jim_CreateCommand(httpstate.jim_interp, "mac", zylinjtag_Jim_Command_mac, NULL, NULL);
Jim_CreateCommand(httpstate.jim_interp, "ip", zylinjtag_Jim_Command_ip, NULL, NULL);
Jim_CreateCommand(httpstate.jim_interp, "rm", zylinjtag_Jim_Command_rm, NULL, NULL);
+ Jim_CreateCommand(httpstate.jim_interp, "format_jffs2", zylinjtag_Jim_Command_format_jffs2, NULL, NULL);
cyg_httpd_start();
reboot();
}
- err = mount("/dev/ram", "/config", "jffs2");
+ err = mount("", "/config", "ramfs");
if (err < 0)
{
diag_printf("unable to mount ram block device\n");
return ENOERR;
}
-static bool
-ramiodev_init( struct cyg_devtab_entry *tab )
-{
- return true;
-}
-
-static Cyg_ErrNo
-ramiodev_bread( cyg_io_handle_t handle, void *buf, cyg_uint32 *len,
- cyg_uint32 pos)
-{
- if (*len+pos>ramblockdevice_size)
- {
- *len=ramblockdevice_size-pos;
- }
- memcpy(buf, ramblockdevice+pos, *len);
- return ENOERR;
-}
-
-static Cyg_ErrNo
-ramiodev_bwrite( cyg_io_handle_t handle, const void *buf, cyg_uint32 *len,
- cyg_uint32 pos )
-{
- if (((pos%4)!=0)||(((*len)%4)!=0))
- {
- diag_printf("Unaligned write %d %d!", pos, *len);
- }
-
- memcpy(ramblockdevice+pos, buf, *len);
- return ENOERR;
-}
-
-static Cyg_ErrNo
-ramiodev_get_config( cyg_io_handle_t handle,
- cyg_uint32 key,
- void* buf,
- cyg_uint32* len)
-{
- switch (key) {
- case CYG_IO_GET_CONFIG_FLASH_ERASE:
- {
- if ( *len != sizeof( cyg_io_flash_getconfig_erase_t ) )
- return -EINVAL;
- {
- cyg_io_flash_getconfig_erase_t *e = (cyg_io_flash_getconfig_erase_t *)buf;
- char *startpos = ramblockdevice + e->offset;
-
- if (((e->offset%(64*1024))!=0)||((e->len%(64*1024))!=0))
- {
- diag_printf("Erease is not aligned %d %d\n", e->offset, e->len);
- }
-
- memset(startpos, 0xff, e->len);
-
- e->flasherr = 0;
- }
- return ENOERR;
- }
- case CYG_IO_GET_CONFIG_FLASH_DEVSIZE:
- {
- if ( *len != sizeof( cyg_io_flash_getconfig_devsize_t ) )
- return -EINVAL;
- {
- cyg_io_flash_getconfig_devsize_t *d =
- (cyg_io_flash_getconfig_devsize_t *)buf;
-
- d->dev_size = ramblockdevice_size;
- }
- return ENOERR;
- }
-
- case CYG_IO_GET_CONFIG_FLASH_BLOCKSIZE:
- {
- cyg_io_flash_getconfig_blocksize_t *b =
- (cyg_io_flash_getconfig_blocksize_t *)buf;
- if ( *len != sizeof( cyg_io_flash_getconfig_blocksize_t ) )
- return -EINVAL;
-
- // offset unused for now
- b->block_size = 64*1024;
- return ENOERR;
- }
-
- default:
- return -EINVAL;
- }
-}
-
-static Cyg_ErrNo
-ramiodev_set_config( cyg_io_handle_t handle,
- cyg_uint32 key,
- const void* buf,
- cyg_uint32* len)
-{
-
- switch (key) {
- default:
- return -EINVAL;
- }
-} // ramiodev_set_config()
-
-// get_config/set_config should be added later to provide the other flash
-// operations possible, like erase etc.
-
-BLOCK_DEVIO_TABLE( cyg_io_ramdev1_ops,
- &ramiodev_bwrite,
- &ramiodev_bread,
- 0, // no select
- &ramiodev_get_config,
- &ramiodev_set_config
- );
-
-
-BLOCK_DEVTAB_ENTRY( cyg_io_ramdev1,
- "/dev/ram",
- 0,
- &cyg_io_ramdev1_ops,
- &ramiodev_init,
- 0, // No lookup required
- NULL );