static ssize_t ps3flash_write_chunk(struct ps3_storage_device *dev, u64 start_sector) { u64 sectors = dev->bounce_size / dev->blk_size; return ps3flash_read_write_sectors(dev, dev->bounce_lpar, start_sector, sectors, 1); }
static int ps3flash_writeback(struct ps3_storage_device *dev) { struct ps3flash_private *priv = ps3_system_bus_get_drvdata(&dev->sbd); int res; if (!priv->dirty || priv->tag < 0) return 0; res = ps3flash_read_write_sectors(dev, priv->tag, 1); if (res) return res; priv->dirty = false; return 0; }
static ssize_t ps3flash_read_sectors(struct ps3_storage_device *dev, u64 start_sector, u64 sectors, unsigned int sector_offset) { u64 max_sectors, lpar; max_sectors = dev->bounce_size / dev->blk_size; if (sectors > max_sectors) { dev_dbg(&dev->sbd.core, "%s:%u Limiting sectors to %lu\n", __func__, __LINE__, max_sectors); sectors = max_sectors; } lpar = dev->bounce_lpar + sector_offset * dev->blk_size; return ps3flash_read_write_sectors(dev, lpar, start_sector, sectors, 0); }
static int ps3flash_fetch(struct ps3_storage_device *dev, u64 start_sector) { struct ps3flash_private *priv = ps3_system_bus_get_drvdata(&dev->sbd); int res; if (start_sector == priv->tag) return 0; res = ps3flash_writeback(dev); if (res) return res; priv->tag = -1; res = ps3flash_read_write_sectors(dev, start_sector, 0); if (res) return res; priv->tag = start_sector; return 0; }