changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > core / lisp/ffi/uring/opcode.lisp

changeset 252: c53892c30395
parent: 85571b4a3fcc
author: Richard Westhaver <ellis@rwest.io>
date: Sat, 30 Mar 2024 19:44:30 -0400
permissions: -rw-r--r--
description: uring primitives and build-from
1 ;;; uring/opcode.lisp --- Opcodes
2 
3 ;; Wrapper for opcodes defined in liburing/io_uring.h.
4 
5 ;;; Commentary:
6 
7 ;;
8 
9 ;;; Code:
10 (in-package :uring)
11 
12 (defun io-uring-setup-rw ())
13 
14 (def-io-op 0 nop ()
15  (setf (slot sqe 'fd) -1))
16 
17 ;; preadv2(2)
18 (def-io-op 1 readv
19  ((fd -1 :type file-descriptor)
20  (iovec #() :type (array octet-vector))
21  (len 0 :type fixnum)
22  (ioprio 0 :type (unsigned-byte 16))
23  (offset 0 :type (unsigned-byte 64))
24  (rw-flags 0 :type fixnum)
25  (buf-group 0 :type (unsigned-byte 16)))
26  (with-slots (fd iovec len ioprio offset rw-flags buf-group) self
27  (setf (slot sqe 'fd) fd)
28  (setf (slot sqe 'ioprio) ioprio)
29  (setf (slot sqe 'len) len)
30  ;; (setf slot s 'iovecs) iovecs)
31  ;; (setf (slot s 'rw-flags) rw-flags)
32  ;; (setf (slot s 'buf-group) buf-group)
33  ))
34 
35 ;; pwritev2(2)
36 (def-io-op 2 writev
37  ((fd -1 :type file-descriptor)
38  (iovec #() :type (array octet-vector))
39  (len 0 :type fixnum)
40  (ioprio 0 :type (unsigned-byte 16))
41  (offset 0 :type (unsigned-byte 64))
42  (rw-flags 0 :type fixnum))
43  (with-slots (fd iovec len ioprio offset rw-flags) self
44  (setf (slot sqe 'fd) fd)
45  (setf (slot sqe 'ioprio) ioprio)
46  (setf (slot sqe 'len) len)))
47 
48 ;; fsync(2)
49 (def-io-op 3 fsync
50  ((fd -1 :type file-descriptor)
51  (flags 0 :type fixnum))
52  (with-slots (fd flags) self
53  (setf (slot sqe 'fd) fd)))
54 
55 ;; read from pre-registered buffers
56 (def-io-op 4 read-fixed
57  ((fd -1 :type file-descriptor)
58  (buf #() :type octet-vector)
59  (len 0 :type (unsigned-byte 32))
60  (buf-index 0 :type (unsigned-byte 16))
61  (offset 0 :type (unsigned-byte 64))
62  (ioprio 0 :type (unsigned-byte 16))
63  (rw-flags 0 :type fixnum))
64  (with-slots (fd buf len buf-index offset ioprio rw-flags) self
65  (setf (slot sqe 'fd) fd)
66  (setf (slot sqe 'ioprio) ioprio)
67  (setf (slot sqe 'len) len)))
68 
69 (def-io-op 5 write-fixed
70  ((fd -1 :type file-descriptor)
71  (buf #() :type octet-vector)
72  (len 0 :type (unsigned-byte 32))
73  (buf-index 0 :type (unsigned-byte 16))
74  (ioprio 0 :type (unsigned-byte 16))
75  (offset 0 :type (unsigned-byte 64))
76  (rw-flags 0 :type fixnum))
77  (with-slots (fd buf len buf-index ioprio offset rw-flags) self
78  (setf (slot sqe 'fd) fd)
79  (setf (slot sqe 'ioprio) ioprio)
80  (setf (slot sqe 'len) len)))
81 
82 ;; poll the specified fd
83 (def-io-op 6 poll-add nil)
84 (def-io-op 7 poll-remove nil)
85 (def-io-op 8 sync-file-range nil)
86 (def-io-op 9 sendmsg nil)
87 (def-io-op 10 recvmsg nil)
88 (def-io-op 11 timeout nil)
89 (def-io-op 12 timeout-remove nil)
90 (def-io-op 13 accept nil)
91 (def-io-op 14 async-cancel nil)
92 (def-io-op 15 link-timeout nil)
93 (def-io-op 16 connect nil)
94 (def-io-op 17 fallocate nil)
95 (def-io-op 18 openat nil)
96 (def-io-op 19 close nil)
97 (def-io-op 20 files-update nil)
98 (def-io-op 21 statx nil)
99 (def-io-op 22 read nil)
100 (def-io-op 23 write nil)
101 (def-io-op 24 fadvise nil)
102 (def-io-op 25 madvise nil)
103 (def-io-op 26 send nil)
104 (def-io-op 27 recv nil)
105 (def-io-op 28 openat2 nil)
106 (def-io-op 29 epoll-ctl nil)
107 (def-io-op 30 splice nil)
108 (def-io-op 31 provide-buffers nil)
109 (def-io-op 32 remove-buffers nil)
110 (def-io-op 33 tee nil)
111 (def-io-op 34 shutdown nil)
112 (def-io-op 35 renameat nil)
113 (def-io-op 36 unlinkat nil)
114 (def-io-op 37 mkdirat nil)
115 (def-io-op 38 symlinkat nil)
116 (def-io-op 39 msg-ring nil)
117 (def-io-op 40 fsetxattr nil)
118 (def-io-op 41 setxattr nil)
119 (def-io-op 42 fgetxattr nil)
120 (def-io-op 43 getxattr nil)
121 (def-io-op 44 socket nil)
122 (def-io-op 45 uring-cmd nil)
123 (def-io-op 46 send-zc nil)
124 (def-io-op 47 sendmsg-zc nil)
125 (def-io-op 48 last nil)
126 
127 (defun opcode-supported-p (op &optional probe)
128  (declare (type octet op))
129  (let ((p (or probe (io-uring-get-probe))))
130  (if (> op (io-uring-probe-last-op p))
131  nil
132  (/= 0
133  (logand
134  (io-uring-probe-op-flags (addr (deref (io-uring-probe-ops p) op)))
135  io-uring-op-supported)))))