Mercurial > core / lisp/ffi/ublk/srv.lisp
changeset 687: |
c2f4e7ee921b |
parent: |
8e16efedfd76
|
child: |
38e9c3be2392 |
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Mon, 30 Sep 2024 22:27:12 -0400 |
permissions: |
-rw-r--r-- |
description: |
ffi |
1 ;;; ublk/srv.lisp --- ublksrv API 8 (define-alien-type ublksrv-ctrl-dev (struct ublksrv-ctrl-dev)) 10 (define-alien-type ublksrv-queue 14 (ring-ptr (* io-uring)) 16 (private-data (* t)))) 18 (define-alien-type ublk-io-data 22 (iod (* ublksrv-io-desc)) 23 (private-data (* t)))) 25 ;; TODO 2024-09-29: add all of these as callbacks :C 26 ;; (define-alien-type ublksrv-tgt-type 27 ;; (struct ublksrv-tgt-type 28 ;; (handle-io-async (function int (* ublksrv-queue) (* ublk-io-data))) 29 ;; (tgt-io-done (function void (* ublksrv-queue) (* ublk-io-data) (* io-uring-cqe))) 30 ;; (handle-event (function void (* ublksrv-queue))) 31 ;; (handle-io-background (function void (* ublksrv-queue) int)) 32 ;; (usage-for-add (function void)) 33 ;; (init-tgt (function int (* ublksrv-dev) int int (array c-string))) 34 ;; (deinit-tgt (function void (* ublksrv-dev))) 35 ;; (alloc-io-buf (function (* t) (* ublksrv-queue) (* t) int)) 36 ;; (idle-fn (function void (* ublksrv-queue) bool)) 38 ;; (ublk-flags unsigned) 39 ;; (ublksrv-flags unsigned) 42 ;; (recovery-tgt (function int (* ublksrv-dev) int)) 43 ;; (init-queue (function int (* ublksrv-queue) (* (* t)))) 44 ;; (deinit-queue (function void (* ublksrv-queue))) 45 ;; (reserved (array unsigned-long 5)))) 47 (define-alien-type ublksrv-dev-data 48 (struct ublksrv-dev-data 50 (max-io-buf-bytes unsigned) 51 (nr-hw-queues unsigned-short) 52 (queue-depth unsigned-short) 54 (tgt-ops (* ublksrv-tgt-type)) 56 (tgt-argv (* (c-string))) 59 (ublksrv-flags unsigned-long) 60 (reserved (array unsigned-long 7)))) 62 (define-alien-type ublksrv-tgt-info 63 (struct ublksrv-tgt-info 64 (dev-size unsigned-long-long) 65 (tgt-ring-depth unsigned-int) 67 (fds (array int #.+ublksrv-tgt-max-fds+)) 69 (extra-ios unsigned-int) 70 (io-data-size unsigned-int) 71 (ops (* ublksrv-tgt-type)) 72 (iowq-max-workers (array unsigned-int 2)) 73 (reserved (array unsigned-long 4)))) 75 (define-alien-type ublksrv-dev 77 (tgt ublksrv-tgt-info))) 79 (define-alien-routine build-user-data (unsigned 64) 83 (is-target-io unsigned)) 85 (define-alien-routine ublksrv-ctrl-deinit void 86 (dev (* ublksrv-ctrl-dev))) 88 (define-alien-routine ublksrv-ctrl-init (* ublksrv-ctrl-dev) 89 (data (* ublksrv-dev-data))) 91 (define-alien-routine ublksrv-ctrl-get-affinity int 92 (ctrl-dev (* ublksrv-ctrl-dev))) 94 (define-alien-routine ublksrv-ctrl-add-dev int 95 (dev (* ublksrv-ctrl-dev))) 97 (define-alien-routine ublksrv-ctrl-del-dev int 98 (dev (* ublksrv-ctrl-dev))) 100 (define-alien-routine ublksrv-ctrl-get-info int 101 (dev (* ublksrv-ctrl-dev))) 103 (define-alien-routine ublksrv-ctrl-stop-dev int 104 (dev (* ublksrv-ctrl-dev))) 106 (define-alien-routine ublksrv-ctrl-dump void 107 (dev (* ublksrv-ctrl-dev)) 110 (define-alien-routine ublksrv-ctrl-start-dev int 111 (ctrl-dev (* ublksrv-ctrl-dev)) 114 (define-alien-routine ublksrv-ctrl-set-params int 115 (dev (* ublksrv-ctrl-dev)) 116 (params (* ublk-params))) 118 (define-alien-routine ublksrv-ctrl-get-params int 119 (dev (* ublksrv-ctrl-dev)) 120 (params (* ublk-params))) 122 (define-alien-routine ublksrv-ctrl-start-recovery int 123 (dev (* ublksrv-ctrl-dev))) 125 (define-alien-routine ublksrv-ctrl-end-recovery int 126 (dev (* ublksrv-ctrl-dev)) 129 (define-alien-routine ublksrv-ctrl-get-dev-info (* ublksrv-ctrl-dev-info) 130 (dev (* ublksrv-ctrl-dev))) 132 (define-alien-routine ublksrv-ctrl-get-features int 133 (dev (* ublksrv-ctrl-dev)) 134 (features (* unsigned-long))) 136 (define-alien-routine ublksrv-ctrl-get-run-dir c-string 137 (dev (* ublksrv-ctrl-dev))) 139 (define-alien-routine ublksrv-ctrl-prep-recovery void 140 (dev (* ublksrv-ctrl-dev)) 142 (tgt-ops (* ublksrv-tgt-type)) 143 (recovery-jbuf c-string)) 145 (define-alien-routine ublksrv-ctrl-get-recovery-jbuf c-string 146 (dev (* ublksrv-ctrl-dev))) 148 (define-alien-routine ublksrv-is-recovering boolean 149 (ctrl-dev (* ublksrv-ctrl-dev))) 151 (define-alien-routine ublksrv-dev-init (* ublksrv-dev) 152 (ctrl-dev (* ublksrv-ctrl-dev))) 154 (define-alien-routine ublksrv-dev-deinit void 155 (dev (* ublksrv-dev))) 157 (define-alien-routine ublksrv-get-ctrl-dev (* ublksrv-ctrl-dev) 158 (dev (* ublksrv-dev))) 160 (define-alien-routine ublksrv-get-pidfile-fd int 161 (dev (* ublksrv-dev))) 163 (define-alien-routine ublksrv-dev-set-cq-depth void 164 (dev (* ublksrv-dev)) 167 (define-alien-routine ublksrv-dev-get-cq-depth int 168 (dev (* ublksrv-dev))) 170 (define-alien-routine ublksrv-apply-oom-protection void) 172 (define-alien-type ublksrv-tgt-base-json 173 (struct ublksrv-tgt-base-json 174 (name (array char #.+ublksrv-tgt-name-max-len+)) 177 (dev-size unsigned-long-long) 178 (reserved (array unsigned-long 8)))) 180 (define-alien-routine ublksrv-json-write-dev-info int 181 (dev (* ublksrv-ctrl-dev)) 185 (define-alien-routine ublksrv-json-read-dev-info int 187 (info (* ublksrv-ctrl-dev-info))) 189 (define-alien-routine ublksrv-json-write-queue-info int 190 (dev (* ublksrv-ctrl-dev)) 194 (ubq-daemon-tid int)) 196 (define-alien-routine ublksrv-json-read-queue-info int 200 (affinity-buf (* char)) 203 (define-alien-routine ublksrv-json-read-target-info int 208 (define-alien-routine ublksrv-json-read-target-str-info int 214 (define-alien-routine ublksrv-json-read-target-ulong-info int 219 (define-alien-routine ublksrv-json-write-target-str-info int 225 (define-alien-routine ublksrv-json-write-target-long-info int 231 (define-alien-routine ublksrv-json-write-target-ulong-info int 237 (define-alien-routine ublksrv-json-dump void 240 (define-alien-routine ublksrv-json-read-target-base-info int 242 (tgt (* ublksrv-tgt-base-json))) 244 (define-alien-routine ublksrv-json-read-params int 248 (define-alien-routine ublksrv-json-write-params int 253 (define-alien-routine ublksrv-json-dump-params int 256 (define-alien-routine ublksrv-json-get-length int (jbuf (* char))) 258 (define-alien-routine ublksrv-io-private-data (* t) 259 (q (* ublksrv-queue)) 262 (define-alien-routine ublksrv-queue-get-io-data (* ublk-io-data) 263 (q (* ublksrv-queue)) 266 (define-alien-routine ublksrv-queue-get-io-buf (* t) 267 (q (* ublksrv-queue)) 270 (define-alien-routine ublksrv-queue-state unsigned-int 271 (q (* ublksrv-queue))) 273 (define-alien-routine ublksrv-queue-init (* ublksrv-queue) 274 (dev (* ublksrv-dev)) 275 (d-id unsigned-short) 278 (define-alien-routine ublksrv-queue-deinit void 279 (q (* ublksrv-queue))) 281 (define-alien-routine ublksrv-queue-unconsumed-cqes int 282 (q (* ublksrv-queue))) 284 (define-alien-routine ublksrv-queue-handled-event int 285 (q (* ublksrv-queue))) 287 (define-alien-routine ublksrv-queue-send-event int 288 (q (* ublksrv-queue))) 290 (define-alien-routine ublksrv-get-queue (* ublksrv-queue) 291 (dev (* ublksrv-dev)) 294 (define-alien-routine ublksrv-process-io int 295 (q (* ublksrv-queue))) 297 (define-alien-routine ublksrv-complete-io int 298 (q (* ublksrv-queue))