ublk-cpp v0.0
Loading...
Searching...
No Matches
raw.hpp
Go to the documentation of this file.
1
6
7#pragma once
8
9#include "ublk/ublk_cmd.h"
10#include <condy.hpp>
11#include <cstdint>
12
13namespace ublk {
14namespace detail {
15
16template <typename Fd>
17inline auto ctrl_cmd(Fd fd, int cmd_op, uint32_t dev_id, uint16_t queue_id,
18 uint64_t data0, uint64_t addr, uint16_t len,
19 uint16_t dev_path_len) noexcept {
20 auto prep = [=](io_uring_sqe *sqe) noexcept {
21 auto &cmd = reinterpret_cast<ublksrv_ctrl_cmd &>(sqe->cmd);
22 cmd = {};
23 cmd.dev_id = dev_id;
24 cmd.queue_id = queue_id;
25 cmd.data[0] = data0;
26 cmd.addr = addr;
27 cmd.len = len;
28 cmd.dev_path_len = dev_path_len;
29 };
30#ifdef UBLKCPP_USE_URING_CMD128
31 return condy::async_uring_cmd128(cmd_op, fd, prep,
32 condy::SimpleCQEHandler{});
33#else
34 return condy::async_uring_cmd(cmd_op, fd, prep, condy::SimpleCQEHandler{});
35#endif
36}
37
38template <typename Fd>
39inline auto io_cmd(Fd fd, int cmd_op, uint16_t q_id, uint16_t tag,
40 int32_t result, uint64_t addr, uint64_t sqe_addr) noexcept {
41 return condy::async_uring_cmd(
42 cmd_op, fd,
43 [=](io_uring_sqe *sqe) noexcept {
44 auto &cmd = reinterpret_cast<ublksrv_io_cmd &>(sqe->cmd);
45 cmd = {};
46 cmd.q_id = q_id;
47 cmd.tag = tag;
48 cmd.result = result;
49 cmd.addr = addr;
50 sqe->addr = sqe_addr;
51 },
52 condy::SimpleCQEHandler{});
53}
54
55template <typename Fd>
56inline auto batch_io_cmd(Fd fd, int cmd_op, uint16_t q_id, uint16_t flags,
57 uint16_t nr_elem, uint8_t elem_bytes, uint64_t addr,
58 uint32_t len) noexcept {
59 return condy::async_uring_cmd(
60 cmd_op, fd,
61 [=](io_uring_sqe *sqe) noexcept {
62 auto &cmd = reinterpret_cast<ublk_batch_io &>(sqe->cmd);
63 cmd = {};
64 cmd.q_id = q_id;
65 cmd.flags = flags;
66 cmd.nr_elem = nr_elem;
67 cmd.elem_bytes = elem_bytes;
68 sqe->addr = addr;
69 sqe->len = len;
70 },
71 condy::SimpleCQEHandler{});
72}
73
74} // namespace detail
75} // namespace ublk
The main namespace of the ublk-cpp library.
Definition ublk.hpp:21