xref: /openbmc/qemu/block/export/virtio-blk-handler.h (revision 5c368029703da5f16dd2bbc4308c4486e74c1aa3)
1*5c368029SXie Yongji /*
2*5c368029SXie Yongji  * Handler for virtio-blk I/O
3*5c368029SXie Yongji  *
4*5c368029SXie Yongji  * Copyright (C) 2022 Bytedance Inc. and/or its affiliates. All rights reserved.
5*5c368029SXie Yongji  *
6*5c368029SXie Yongji  * Author:
7*5c368029SXie Yongji  *   Xie Yongji <xieyongji@bytedance.com>
8*5c368029SXie Yongji  *
9*5c368029SXie Yongji  * This work is licensed under the terms of the GNU GPL, version 2 or
10*5c368029SXie Yongji  * later.  See the COPYING file in the top-level directory.
11*5c368029SXie Yongji  */
12*5c368029SXie Yongji 
13*5c368029SXie Yongji #ifndef VIRTIO_BLK_HANDLER_H
14*5c368029SXie Yongji #define VIRTIO_BLK_HANDLER_H
15*5c368029SXie Yongji 
16*5c368029SXie Yongji #include "sysemu/block-backend.h"
17*5c368029SXie Yongji 
18*5c368029SXie Yongji #define VIRTIO_BLK_SECTOR_BITS 9
19*5c368029SXie Yongji #define VIRTIO_BLK_SECTOR_SIZE (1ULL << VIRTIO_BLK_SECTOR_BITS)
20*5c368029SXie Yongji 
21*5c368029SXie Yongji #define VIRTIO_BLK_MAX_DISCARD_SECTORS 32768
22*5c368029SXie Yongji #define VIRTIO_BLK_MAX_WRITE_ZEROES_SECTORS 32768
23*5c368029SXie Yongji 
24*5c368029SXie Yongji typedef struct {
25*5c368029SXie Yongji     BlockBackend *blk;
26*5c368029SXie Yongji     const char *serial;
27*5c368029SXie Yongji     uint32_t logical_block_size;
28*5c368029SXie Yongji     bool writable;
29*5c368029SXie Yongji } VirtioBlkHandler;
30*5c368029SXie Yongji 
31*5c368029SXie Yongji int coroutine_fn virtio_blk_process_req(VirtioBlkHandler *handler,
32*5c368029SXie Yongji                                         struct iovec *in_iov,
33*5c368029SXie Yongji                                         struct iovec *out_iov,
34*5c368029SXie Yongji                                         unsigned int in_num,
35*5c368029SXie Yongji                                         unsigned int out_num);
36*5c368029SXie Yongji 
37*5c368029SXie Yongji #endif /* VIRTIO_BLK_HANDLER_H */
38