]> git.ipfire.org Git - thirdparty/linux.git/blobdiff - include/uapi/linux/ublk_cmd.h
ublk: add read()/write() support for ublk char device
[thirdparty/linux.git] / include / uapi / linux / ublk_cmd.h
index 640bf687b94a9e235751956cf36d9c1210258d8a..c0c1632c671e51de32674b94fe8a28ce3d6b7bb2 100644 (file)
 #define UBLKSRV_CMD_BUF_OFFSET 0
 #define UBLKSRV_IO_BUF_OFFSET  0x80000000
 
-/* tag bit is 12bit, so at most 4096 IOs for each queue */
+/* tag bit is 16bit, so far limit at most 4096 IOs for each queue */
 #define UBLK_MAX_QUEUE_DEPTH   4096
 
+/* single IO buffer max size is 32MB */
+#define UBLK_IO_BUF_OFF                0
+#define UBLK_IO_BUF_BITS       25
+#define UBLK_IO_BUF_BITS_MASK  ((1ULL << UBLK_IO_BUF_BITS) - 1)
+
+/* so at most 64K IOs for each queue */
+#define UBLK_TAG_OFF           UBLK_IO_BUF_BITS
+#define UBLK_TAG_BITS          16
+#define UBLK_TAG_BITS_MASK     ((1ULL << UBLK_TAG_BITS) - 1)
+
+/* max 4096 queues */
+#define UBLK_QID_OFF           (UBLK_TAG_OFF + UBLK_TAG_BITS)
+#define UBLK_QID_BITS          12
+#define UBLK_QID_BITS_MASK     ((1ULL << UBLK_QID_BITS) - 1)
+
+#define UBLK_MAX_NR_QUEUES     (1U << UBLK_QID_BITS)
+
+#define UBLKSRV_IO_BUF_TOTAL_BITS      (UBLK_QID_OFF + UBLK_QID_BITS)
+#define UBLKSRV_IO_BUF_TOTAL_SIZE      (1ULL << UBLKSRV_IO_BUF_TOTAL_BITS)
+
 /*
  * zero copy requires 4k block size, and can remap ublk driver's io
  * request into ublksrv's vm space