diff --git a/dde_linux/src/lib/usb/include/storage/component.h b/dde_linux/src/lib/usb/include/storage/component.h index 14abd8490..e25e7e704 100644 --- a/dde_linux/src/lib/usb/include/storage/component.h +++ b/dde_linux/src/lib/usb/include/storage/component.h @@ -92,6 +92,8 @@ namespace Block { ops->set_operation(Packet_descriptor::WRITE); } + void sync() {} + void complete(Packet_descriptor &packet, bool success) { packet.succeeded(success); diff --git a/gems/src/server/http_block/main.cc b/gems/src/server/http_block/main.cc index 6b851ace5..ccffbb57a 100644 --- a/gems/src/server/http_block/main.cc +++ b/gems/src/server/http_block/main.cc @@ -178,6 +178,8 @@ namespace Block { ops->set_operation(Packet_descriptor::READ); } + void sync() {} + /** * Signal indicating that transmit thread is ready */ diff --git a/os/include/block/component.h b/os/include/block/component.h index b383870dc..e3611f1b7 100644 --- a/os/include/block/component.h +++ b/os/include/block/component.h @@ -142,6 +142,8 @@ namespace Block { ops->set_operation(Packet_descriptor::READ); ops->set_operation(Packet_descriptor::WRITE); } + + void sync() { _driver.sync(); } }; /* diff --git a/os/include/block/driver.h b/os/include/block/driver.h index 5a1aafdbd..c035d5436 100644 --- a/os/include/block/driver.h +++ b/os/include/block/driver.h @@ -98,6 +98,11 @@ namespace Block { * Allocate buffer which is suitable for DMA. */ virtual Genode::Ram_dataspace_capability alloc_dma_buffer(Genode::size_t) = 0; + + /** + * Synchronize with with device. + */ + virtual void sync() = 0; }; diff --git a/os/include/block_session/block_session.h b/os/include/block_session/block_session.h index d7eec24e0..9f4c7a161 100644 --- a/os/include/block_session/block_session.h +++ b/os/include/block_session/block_session.h @@ -129,6 +129,11 @@ namespace Block { Genode::size_t *blk_size, Operations *ops) = 0; + /** + * Synchronize with block device, like ensuring data to be written + */ + virtual void sync() = 0; + /** * Request packet-transmission channel */ @@ -146,7 +151,8 @@ namespace Block { GENODE_RPC(Rpc_info, void, info, Genode::size_t *, Genode::size_t *, Operations *); GENODE_RPC(Rpc_tx_cap, Genode::Capability, _tx_cap); - GENODE_RPC_INTERFACE(Rpc_info, Rpc_tx_cap); + GENODE_RPC(Rpc_sync, void, sync); + GENODE_RPC_INTERFACE(Rpc_info, Rpc_tx_cap, Rpc_sync); }; } diff --git a/os/include/block_session/client.h b/os/include/block_session/client.h index b153dccf8..adeb1c142 100644 --- a/os/include/block_session/client.h +++ b/os/include/block_session/client.h @@ -55,6 +55,7 @@ namespace Block { Tx *tx_channel() { return &_tx; } Tx::Source *tx() { return _tx.source(); } + void sync() { call(); } /* * Wrapper for alloc_packet, allocates 2KB aligned packets diff --git a/os/src/drivers/ahci/include/ahci_driver_base.h b/os/src/drivers/ahci/include/ahci_driver_base.h index 2a5e47eab..38440bb2b 100644 --- a/os/src/drivers/ahci/include/ahci_driver_base.h +++ b/os/src/drivers/ahci/include/ahci_driver_base.h @@ -78,6 +78,8 @@ class Ahci_driver_base : public Block::Driver Ram_dataspace_capability alloc_dma_buffer(size_t size) { return _device->alloc_dma_buffer(size); } + + void sync() {} }; #endif /* _AHCI_DRIVER_BASE_H_ */ diff --git a/os/src/drivers/atapi/main.cc b/os/src/drivers/atapi/main.cc index 52b508b6c..7bf621b19 100644 --- a/os/src/drivers/atapi/main.cc +++ b/os/src/drivers/atapi/main.cc @@ -159,6 +159,8 @@ namespace Block { ops->set_operation(Packet_descriptor::WRITE); } + void sync() {} + Ata::Device* device() { return _device; }; /** diff --git a/os/src/drivers/sd_card/exynos5/driver.h b/os/src/drivers/sd_card/exynos5/driver.h index 01a235686..013efbbfe 100644 --- a/os/src/drivers/sd_card/exynos5/driver.h +++ b/os/src/drivers/sd_card/exynos5/driver.h @@ -125,6 +125,8 @@ class Block::Exynos5_driver : public Block::Driver Ram_dataspace_capability alloc_dma_buffer(size_t size) { return Genode::env()->ram_session()->alloc(size, false); } + + void sync() {} }; #endif /* _DRIVER_H_ */ diff --git a/os/src/drivers/sd_card/omap4/driver.h b/os/src/drivers/sd_card/omap4/driver.h index 2a42299d0..bd49d253e 100644 --- a/os/src/drivers/sd_card/omap4/driver.h +++ b/os/src/drivers/sd_card/omap4/driver.h @@ -118,6 +118,8 @@ class Block::Omap4_driver : public Block::Driver Ram_dataspace_capability alloc_dma_buffer(size_t size) { return Genode::env()->ram_session()->alloc(size, false); } + + void sync() {} }; #endif /* _DRIVER_H_ */ diff --git a/os/src/drivers/sd_card/pl180/sd_card.h b/os/src/drivers/sd_card/pl180/sd_card.h index 837ca4215..82df5b3bb 100644 --- a/os/src/drivers/sd_card/pl180/sd_card.h +++ b/os/src/drivers/sd_card/pl180/sd_card.h @@ -135,6 +135,8 @@ class Sd_card : public Block::Driver { return Genode::env()->ram_session()->alloc(size, false); } + + void sync() {} }; #endif /* _SD_CARD_H_ */ diff --git a/os/src/server/part_blk/back_end.cc b/os/src/server/part_blk/back_end.cc index 67aa2da54..c5d2b22ae 100644 --- a/os/src/server/part_blk/back_end.cc +++ b/os/src/server/part_blk/back_end.cc @@ -35,7 +35,7 @@ namespace Partition { Partition *partition(int num) { return (num < MAX_PARTITIONS) ? _part_list[num] : 0; } size_t blk_size() { return _blk_size; } inline unsigned long max_packets() { return (MAX_PACKET_SIZE / _blk_size); } - + void sync() { _blk.sync(); } /** * Partition table entry format diff --git a/os/src/server/part_blk/main.cc b/os/src/server/part_blk/main.cc index 83a2a42c0..8d14ddded 100644 --- a/os/src/server/part_blk/main.cc +++ b/os/src/server/part_blk/main.cc @@ -137,6 +137,8 @@ namespace Block { ops->set_operation(Packet_descriptor::WRITE); } + void sync() { Partition::sync(); } + Partition::Partition *partition() { return _partition; } }; diff --git a/os/src/server/part_blk/part_blk.h b/os/src/server/part_blk/part_blk.h index 0b2933dfb..a2ee96aff 100644 --- a/os/src/server/part_blk/part_blk.h +++ b/os/src/server/part_blk/part_blk.h @@ -72,6 +72,11 @@ namespace Partition { * Returns block size of back end */ Genode::size_t blk_size(); + + /** + * Synchronize with backend device + */ + void sync(); } #endif /* _PART_BLK_H_ */ diff --git a/os/src/server/rom_loopdev/main.cc b/os/src/server/rom_loopdev/main.cc index 14dfac26e..cee8a8009 100644 --- a/os/src/server/rom_loopdev/main.cc +++ b/os/src/server/rom_loopdev/main.cc @@ -173,6 +173,8 @@ namespace Block { *blk_size = _block_size; ops->set_operation(Block::Packet_descriptor::READ); } + + void sync() {} }; diff --git a/os/src/test/fb_block_adapter/main.cc b/os/src/test/fb_block_adapter/main.cc index e38ecefe4..a3cf7dd28 100644 --- a/os/src/test/fb_block_adapter/main.cc +++ b/os/src/test/fb_block_adapter/main.cc @@ -153,6 +153,8 @@ namespace Block { ops->set_operation(Packet_descriptor::WRITE); } + void sync() {} + /** Signal that transmit thread is ready */ void tx_ready() { _startup_sema.up(); } };