Ejemplo n.º 1
0
ssize_t
lb4g_flash_write(uint32_t base_offset, const unsigned char *data, uint32_t len)
{
    int fd;
    ssize_t wb;
    int rv;

    fd = open("/dev/flash", O_WRONLY);
    if (fd < 0) {
        SFS_ERR("lb4g flash write: Failed to open flash device\n");
        return -1;
    }

    SFS_VERB("lb4g flash write: Opened flash device\n");
    rv = ioctl(fd, FLASHDRV_SET_ADDR_CMD, FLASH_MEM_ADDR_BEGIN + base_offset);
    if (rv != 0) {
        SFS_ERR("lb4g flash write: Write seek ioctl returns %d; failed\n", rv);
        close(fd);
        return -1;
    }
#if defined(NO_FLASH_WRITE)
    SFS_WARN("lb4g flash write:  NOT writing %d bytes to flash\n", len);
    wb = len;
#else
    wb = write(fd, data, len);
    if (wb >= 0) { /* Driver doesn't return number of bytes */
        wb = len;
        SFS_VERB("Wrote %d bytes.\n", (int)len);
    } else {
        SFS_ERR("Error writing data to flash\n");
    }
#endif

    close(fd);
    return wb;
}
Ejemplo n.º 2
0
static ssize_t
_flash_read_lb4g(int fd, uint32_t base_offset, unsigned char *buf, uint32_t len)
{
    int rv;

    SFS_VERB("Seek 0x%x\n", FLASH_MEM_ADDR_BEGIN + base_offset);
    rv = ioctl(fd, FLASHDRV_SET_ADDR_CMD, FLASH_MEM_ADDR_BEGIN + base_offset);
    if (rv != 0) {
        SFS_ERR("lb4g flash read: seek ioctl for 0x%x returns %d; failed\n", 
              base_offset, rv);
        return -1;
    }

    /* Read in the data */
    return read(fd, buf, len);
}
Ejemplo n.º 3
0
ssize_t
fake_flash_read(uint32_t base_offset, unsigned char *buf, uint32_t len)
{
    read_file();

    if (base_offset > SFS_FLASH_BYTES) {
        return -1;
    }

    if (base_offset + len > SFS_FLASH_BYTES) {
        len = SFS_FLASH_BYTES - base_offset;
    }

    SFS_VERB("Copying %d bytes from FS\n", len);
    memcpy(buf, &fake_flash[base_offset], len);

    return (ssize_t)len;
}
Ejemplo n.º 4
0
/* Driver functions for HW specific read/write ops; return bytes written/read */
ssize_t
fake_flash_write(uint32_t base_offset, const unsigned char *buf, uint32_t len)
{
    read_file();

    if (base_offset > SFS_FLASH_BYTES) {
        return -1;
    }

    if (base_offset + len > SFS_FLASH_BYTES) {
        len = SFS_FLASH_BYTES - base_offset;
    }

    SFS_VERB("Copying %d bytes to FS\n", len);
    memcpy(&fake_flash[base_offset], buf, len);

    save_file();

    return (ssize_t)len;
}