L4Re Operating System Framework
Interface and Usage Documentation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
device.h
1/*
2 * Copyright (C) 2018-2020, 2024 Kernkonzept GmbH.
3 * Author(s): Sarah Hoffmann <sarah.hoffmann@kernkonzept.com>
4 *
5 * License: see LICENSE.spdx (in this directory or the directories above)
6 */
7#pragma once
8
9#include <l4/cxx/ref_ptr>
10#include <l4/cxx/string>
11#include <l4/re/dataspace>
12#include <l4/re/dma_space>
13
14#include <l4/libblock-device/errand.h>
15#include <l4/libblock-device/types.h>
16
17namespace Block_device {
18
33{
34};
35
36struct Device : public cxx::Ref_obj
37{
38 virtual ~Device() = 0;
39
41 virtual Notification_domain const *notification_domain() const = 0;
42
44 virtual bool is_read_only() const = 0;
46 virtual bool match_hid(cxx::String const &hid) const = 0;
48 virtual l4_uint64_t capacity() const = 0;
50 virtual l4_size_t sector_size() const = 0;
52 virtual l4_size_t max_size() const = 0;
54 virtual unsigned max_segments() const = 0;
55
57 virtual void reset() = 0;
58
60 virtual int dma_map(Block_device::Mem_region *region, l4_addr_t offset,
63
65 virtual int dma_unmap(L4Re::Dma_space::Dma_addr phys, l4_size_t num_sectors,
67
82 virtual int inout_data(l4_uint64_t sector,
83 Block_device::Inout_block const &blocks,
84 Block_device::Inout_callback const &cb,
86
97 virtual int flush(Block_device::Inout_callback const &cb) = 0;
98
100 virtual void start_device_scan(Block_device::Errand::Callback const &callback) = 0;
101};
102
103inline Device::~Device() = default;
104
108template <typename DEV>
110{
112 Notification_domain const *notification_domain() const override
113 { return &dom; }
114};
115
120{
121 struct Discard_info
122 {
123 unsigned max_discard_sectors = 0;
124 unsigned max_discard_seg = 0;
125 unsigned discard_sector_alignment = 1;
126 unsigned max_write_zeroes_sectors = 0;
127 unsigned max_write_zeroes_seg = 0;
128 bool write_zeroes_may_unmap = false;
129 };
130
131 virtual Discard_info discard_info() const = 0;
132
134 virtual int discard(l4_uint64_t offset,
135 Block_device::Inout_block const &blocks,
136 Block_device::Inout_callback const &cb, bool discard) = 0;
137
138protected:
139 ~Device_discard_feature() = default;
140};
141
142} // name space
l4_uint64_t Dma_addr
Data type for DMA addresses.
Definition dma_space:59
Direction
Direction of the DMA transfers.
Definition dma_space:65
Region of driver memory, that shall be managed locally.
Definition l4virtio:451
Allocation free string class with explicit length field.
Definition string:31
Dataspace interface.
unsigned int l4_size_t
Unsigned size type.
Definition l4int.h:24
unsigned long l4_addr_t
Address type.
Definition l4int.h:34
unsigned long long l4_uint64_t
Unsigned 64bit value.
Definition l4int.h:31
Partial interface for devices that offer discard functionality.
Definition device.h:120
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.
Device with a per-device notification domain.
Definition device.h:110
Description of an inout block to be sent to the device.
Definition types.h:67
Opaque type for representing a notification domain.
Definition device.h:33