changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > core / lisp/ffi/ublk/srv.lisp

changeset 698: 96958d3eb5b0
parent: 38e9c3be2392
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
1 ;;; ublk/srv.lisp --- ublksrv API
2 
3 ;;
4 
5 ;;; Code:
6 (in-package :ublk)
7 
8 (define-alien-type ublksrv-ctrl-dev (struct ublksrv-ctrl-dev))
9 
10 (define-alien-type ublksrv-dev-data
11  (struct ublksrv-dev-data
12  (dev-id int)
13  (max-io-buf-bytes unsigned)
14  (nr-hw-queues unsigned-short)
15  (queue-depth unsigned-short)
16  (tgt-type c-string)
17  (tgt-ops (* ublksrv-tgt-type))
18  (tgt-argc int)
19  (tgt-argv (* (c-string)))
20  (run-dir c-string)
21  (flags unsigned-long)
22  (ublksrv-flags unsigned-long)
23  (reserved (array unsigned-long 7))))
24 
25 ;; early def
26 (define-alien-type ublksrv-tgt-info
27  (struct ublksrv-tgt-info
28  (dev-size unsigned-long-long)
29  (tgt-ring-depth unsigned-int)
30  (nr-fds unsigned-int)
31  (fds (array int #.+ublksrv-tgt-max-fds+))
32  (tgt-data (* t))
33  (extra-ios unsigned-int)
34  (io-data-size unsigned-int)
35  (ops (* (struct nil)))
36  (iowq-max-workers (array unsigned-int 2))
37  (reserved (array unsigned-long 4))))
38 
39 (define-alien-type ublksrv-dev
40  (struct ublksrv-dev
41  (tgt ublksrv-tgt-info)))
42 
43 (define-alien-type ublksrv-queue
44  (struct ublksrv-queue
45  (q-id int)
46  (q-depth int)
47  (ring-ptr (* io-uring))
48  (dev (* ublksrv-dev))
49  (private-data (* t))))
50 
51 (define-alien-type ublksrv-handle-io-async-function (function int (* ublksrv-queue) (* ublk-io-data)))
52 (define-alien-type ublksrv-tgt-io-done-function (function void (* ublksrv-queue) (* ublk-io-data) (* io-uring-cqe)))
53 (define-alien-type ublksrv-handle-event-function (function void (* ublksrv-queue)))
54 (define-alien-type ublksrv-handle-io-background-function (function void (* ublksrv-queue) int))
55 (define-alien-type ublksrv-usage-for-add-function (function void))
56 (define-alien-type ublksrv-init-tgt-function (function int (* ublksrv-dev) int int (array c-string)))
57 (define-alien-type ublksrv-deinit-tgt-function (function void (* ublksrv-dev)))
58 (define-alien-type ublksrv-alloc-io-buf-function (function (* t) (* ublksrv-queue) (* t) int))
59 (define-alien-type ublksrv-idle-function (function void (* ublksrv-queue) boolean))
60 (define-alien-type ublksrv-recovery-tgt-function (function int (* ublksrv-dev) int))
61 (define-alien-type ublksrv-init-queue-function (function int (* ublksrv-dev) (* (* t))))
62 (define-alien-type ublksrv-deinit-queue-function (function void (* ublksrv-queue)))
63 
64 ;; TODO 2024-09-29: add all of these as callbacks :C
65 (define-alien-type ublksrv-tgt-type
66  (struct ublksrv-tgt-type
67  (handle-io-async (* ublksrv-handle-io-async-function))
68  (tgt-io-done (* ublksrv-tgt-io-done-function))
69  (handle-event (* ublksrv-handle-event-function))
70  (handle-io-background (* ublksrv-handle-io-background-function))
71  (usage-for-add (* ublksrv-usage-for-add-function))
72  (init-tgt (* ublksrv-init-tgt-function))
73  (deinit-tgt (* ublksrv-deinit-tgt-function))
74  (alloc-io-buf (* ublksrv-alloc-io-buf-function))
75  (idle-fn (* ublksrv-idle-function))
76  (type int)
77  (ublk-flags unsigned)
78  (ublksrv-flags unsigned)
79  (pad unsigned)
80  (name c-string)
81  (recovery-tgt (* ublksrv-recovery-tgt-function))
82  (init-queue (* ublksrv-init-queue-function))
83  (deinit-queue (* ublksrv-deinit-queue-function))
84  (reserved (array unsigned-long 5))))
85 
86 (define-alien-type ublk-io-data
87  (struct ublk-io-data
88  (tag int)
89  (pad unsigned-int)
90  (iod (* ublksrv-io-desc))
91  (private-data (* t))))
92 
93 (define-alien-routine build-user-data (unsigned 64)
94  (tag unsigned)
95  (op unsigned)
96  (tgt-data unsigned)
97  (is-target-io unsigned))
98 
99 (define-alien-routine ublksrv-ctrl-deinit void
100  (dev (* ublksrv-ctrl-dev)))
101 
102 (define-alien-routine ublksrv-ctrl-init (* ublksrv-ctrl-dev)
103  (data (* ublksrv-dev-data)))
104 
105 (define-alien-routine ublksrv-ctrl-get-affinity int
106  (ctrl-dev (* ublksrv-ctrl-dev)))
107 
108 (define-alien-routine ublksrv-ctrl-add-dev int
109  (dev (* ublksrv-ctrl-dev)))
110 
111 (define-alien-routine ublksrv-ctrl-del-dev int
112  (dev (* ublksrv-ctrl-dev)))
113 
114 (define-alien-routine ublksrv-ctrl-get-info int
115  (dev (* ublksrv-ctrl-dev)))
116 
117 (define-alien-routine ublksrv-ctrl-stop-dev int
118  (dev (* ublksrv-ctrl-dev)))
119 
120 (define-alien-routine ublksrv-ctrl-dump void
121  (dev (* ublksrv-ctrl-dev))
122  (buf (* char)))
123 
124 (define-alien-routine ublksrv-ctrl-start-dev int
125  (ctrl-dev (* ublksrv-ctrl-dev))
126  (daemon-pid int))
127 
128 (define-alien-routine ublksrv-ctrl-set-params int
129  (dev (* ublksrv-ctrl-dev))
130  (params (* ublk-params)))
131 
132 (define-alien-routine ublksrv-ctrl-get-params int
133  (dev (* ublksrv-ctrl-dev))
134  (params (* ublk-params)))
135 
136 (define-alien-routine ublksrv-ctrl-start-recovery int
137  (dev (* ublksrv-ctrl-dev)))
138 
139 (define-alien-routine ublksrv-ctrl-end-recovery int
140  (dev (* ublksrv-ctrl-dev))
141  (daemon-pid int))
142 
143 (define-alien-routine ublksrv-ctrl-get-dev-info (* ublksrv-ctrl-dev-info)
144  (dev (* ublksrv-ctrl-dev)))
145 
146 (define-alien-routine ublksrv-ctrl-get-features int
147  (dev (* ublksrv-ctrl-dev))
148  (features (* unsigned-long)))
149 
150 (define-alien-routine ublksrv-ctrl-get-run-dir c-string
151  (dev (* ublksrv-ctrl-dev)))
152 
153 (define-alien-routine ublksrv-ctrl-prep-recovery void
154  (dev (* ublksrv-ctrl-dev))
155  (tgt-type c-string)
156  (tgt-ops (* ublksrv-tgt-type))
157  (recovery-jbuf c-string))
158 
159 (define-alien-routine ublksrv-ctrl-get-recovery-jbuf c-string
160  (dev (* ublksrv-ctrl-dev)))
161 
162 (define-alien-routine ublksrv-is-recovering boolean
163  (ctrl-dev (* ublksrv-ctrl-dev)))
164 
165 (define-alien-routine ublksrv-dev-init (* ublksrv-dev)
166  (ctrl-dev (* ublksrv-ctrl-dev)))
167 
168 (define-alien-routine ublksrv-dev-deinit void
169  (dev (* ublksrv-dev)))
170 
171 (define-alien-routine ublksrv-get-ctrl-dev (* ublksrv-ctrl-dev)
172  (dev (* ublksrv-dev)))
173 
174 (define-alien-routine ublksrv-get-pidfile-fd int
175  (dev (* ublksrv-dev)))
176 
177 (define-alien-routine ublksrv-dev-set-cq-depth void
178  (dev (* ublksrv-dev))
179  (cq-depth int))
180 
181 (define-alien-routine ublksrv-dev-get-cq-depth int
182  (dev (* ublksrv-dev)))
183 
184 (define-alien-routine ublksrv-apply-oom-protection void)
185 
186 (define-alien-type ublksrv-tgt-base-json
187  (struct ublksrv-tgt-base-json
188  (name (array char #.+ublksrv-tgt-name-max-len+))
189  (type int)
190  (pad unsigned-int)
191  (dev-size unsigned-long-long)
192  (reserved (array unsigned-long 8))))
193 
194 (define-alien-routine ublksrv-json-write-dev-info int
195  (dev (* ublksrv-ctrl-dev))
196  (buf (* char))
197  (len int))
198 
199 (define-alien-routine ublksrv-json-read-dev-info int
200  (json-buf (* char))
201  (info (* ublksrv-ctrl-dev-info)))
202 
203 (define-alien-routine ublksrv-json-write-queue-info int
204  (dev (* ublksrv-ctrl-dev))
205  (jbuf (* char))
206  (len int)
207  (qid int)
208  (ubq-daemon-tid int))
209 
210 (define-alien-routine ublksrv-json-read-queue-info int
211  (jbuf (* char))
212  (qid int)
213  (tid (* unsigned))
214  (affinity-buf (* char))
215  (len int))
216 
217 (define-alien-routine ublksrv-json-read-target-info int
218  (jbuf (* char))
219  (tgt-buf (* char))
220  (len int))
221 
222 (define-alien-routine ublksrv-json-read-target-str-info int
223  (jbuf (* char))
224  (len int)
225  (name (* char))
226  (val (* long)))
227 
228 (define-alien-routine ublksrv-json-read-target-ulong-info int
229  (jbuf (* char))
230  (name (* char))
231  (val (* long)))
232 
233 (define-alien-routine ublksrv-json-write-target-str-info int
234  (jbuf (* char))
235  (len int)
236  (name (* char))
237  (val (* char)))
238 
239 (define-alien-routine ublksrv-json-write-target-long-info int
240  (jbuf (* char))
241  (len int)
242  (name (* char))
243  (val long))
244 
245 (define-alien-routine ublksrv-json-write-target-ulong-info int
246  (jbuf (* char))
247  (len int)
248  (name (* char))
249  (val unsigned-long))
250 
251 (define-alien-routine ublksrv-json-dump void
252  (jbuf (* char)))
253 
254 (define-alien-routine ublksrv-json-read-target-base-info int
255  (jbuf (* char))
256  (tgt (* ublksrv-tgt-base-json)))
257 
258 (define-alien-routine ublksrv-json-read-params int
259  (p (* ublk-params))
260  (jbuf (* char)))
261 
262 (define-alien-routine ublksrv-json-write-params int
263  (p (* ublk-params))
264  (jbuf (* char))
265  (len int))
266 
267 (define-alien-routine ublksrv-json-dump-params int
268  (jbuf (* char)))
269 
270 (define-alien-routine ublksrv-json-get-length int (jbuf (* char)))
271 
272 (define-alien-routine ublksrv-io-private-data (* t)
273  (q (* ublksrv-queue))
274  (tag int))
275 
276 (define-alien-routine ublksrv-queue-get-io-data (* ublk-io-data)
277  (q (* ublksrv-queue))
278  (tag int))
279 
280 (define-alien-routine ublksrv-queue-get-io-buf (* t)
281  (q (* ublksrv-queue))
282  (tag int))
283 
284 (define-alien-routine ublksrv-queue-state unsigned-int
285  (q (* ublksrv-queue)))
286 
287 (define-alien-routine ublksrv-queue-init (* ublksrv-queue)
288  (dev (* ublksrv-dev))
289  (d-id unsigned-short)
290  (queue-data (* t)))
291 
292 (define-alien-routine ublksrv-queue-deinit void
293  (q (* ublksrv-queue)))
294 
295 (define-alien-routine ublksrv-queue-unconsumed-cqes int
296  (q (* ublksrv-queue)))
297 
298 (define-alien-routine ublksrv-queue-handled-event int
299  (q (* ublksrv-queue)))
300 
301 (define-alien-routine ublksrv-queue-send-event int
302  (q (* ublksrv-queue)))
303 
304 (define-alien-routine ublksrv-get-queue (* ublksrv-queue)
305  (dev (* ublksrv-dev))
306  (q-id int))
307 
308 (define-alien-routine ublksrv-process-io int
309  (q (* ublksrv-queue)))
310 
311 (define-alien-routine ublksrv-complete-io int
312  (q (* ublksrv-queue))
313  (tag unsigned)
314  (res int))