10#include <l4/cxx/ref_ptr>
11#include <l4/cxx/string>
15#include <l4/libblock-device/errand.h>
16#include <l4/libblock-device/types.h>
17#include <l4/libblock-device/request_queue.h>
19namespace Block_device {
21struct Device :
public cxx::Ref_obj
23 virtual ~Device() = 0;
26 virtual bool is_read_only()
const = 0;
28 virtual bool match_hid(
cxx::String const &hid)
const = 0;
32 virtual l4_size_t sector_size()
const = 0;
36 virtual unsigned max_segments()
const = 0;
46 virtual Request_queue *request_queue() = 0;
49 virtual void reset() = 0;
76 Block_device::Inout_callback
const &cb,
89 virtual int flush(Block_device::Inout_callback
const &cb) = 0;
92 virtual void start_device_scan(Block_device::Errand::Callback
const &callback) = 0;
95inline Device::~Device() =
default;
97template <
typename DEV>
98class Device_with_request_queue :
public DEV
101 Request_queue *request_queue()
override
102 {
return &_request_queue; }
105 Simple_request_queue _request_queue;
115 unsigned max_discard_sectors = 0;
116 unsigned max_discard_seg = 0;
117 unsigned discard_sector_alignment = 1;
118 unsigned max_write_zeroes_sectors = 0;
119 unsigned max_write_zeroes_seg = 0;
120 bool write_zeroes_may_unmap =
false;
123 virtual Discard_info discard_info()
const = 0;
128 Block_device::Inout_callback
const &cb,
bool discard) = 0;
l4_uint64_t Dma_addr
Data type for DMA addresses.
Direction
Direction of the DMA transfers.
Region of driver memory, that shall be managed locally.
Allocation free string class with explicit length field.
unsigned int l4_size_t
Unsigned size type.
unsigned long l4_addr_t
Address type.
unsigned long long l4_uint64_t
Unsigned 64bit value.
Partial interface for devices that offer discard functionality.
virtual int discard(l4_uint64_t offset, Block_device::Inout_block const &blocks, Block_device::Inout_callback const &cb, bool discard)=0
Issues one or more WRITE_ZEROES or DISCARD commands.
Description of an inout block to be sent to the device.