blob: 0dd08c5a01469201479cfacc0bda103a39ca7b03 [file] [log] [blame]
Ben Cheng655a7c02013-10-16 16:09:24 -07001/****************************************************************************
2 ****************************************************************************
3 ***
4 *** This header was automatically generated from a Linux kernel header
5 *** of the same name, to make information necessary for userspace to
6 *** call into the kernel available to libc. It contains only constants,
7 *** structures, and macros generated from the original header, and thus,
8 *** contains no copyrightable information.
9 ***
10 *** To edit the content of this header, modify the corresponding
11 *** source file (e.g. under external/kernel-headers/original/) then
12 *** run bionic/libc/kernel/tools/update_all.py
13 ***
14 *** Any manual change here will be lost the next time this script will
15 *** be run. You've been warned!
16 ***
17 ****************************************************************************
18 ****************************************************************************/
19#ifndef _LINUX_VIRTIO_BLK_H
20#define _LINUX_VIRTIO_BLK_H
21#include <linux/types.h>
22#include <linux/virtio_ids.h>
Ben Cheng655a7c02013-10-16 16:09:24 -070023#include <linux/virtio_config.h>
Christopher Ferris05d08e92016-02-04 13:16:38 -080024#include <linux/virtio_types.h>
Ben Cheng655a7c02013-10-16 16:09:24 -070025#define VIRTIO_BLK_F_SIZE_MAX 1
26#define VIRTIO_BLK_F_SEG_MAX 2
Ben Cheng655a7c02013-10-16 16:09:24 -070027#define VIRTIO_BLK_F_GEOMETRY 4
28#define VIRTIO_BLK_F_RO 5
29#define VIRTIO_BLK_F_BLK_SIZE 6
Christopher Ferris05d08e92016-02-04 13:16:38 -080030#define VIRTIO_BLK_F_TOPOLOGY 10
Christopher Ferris05d08e92016-02-04 13:16:38 -080031#define VIRTIO_BLK_F_MQ 12
Christopher Ferrisd842e432019-03-07 10:21:59 -080032#define VIRTIO_BLK_F_DISCARD 13
33#define VIRTIO_BLK_F_WRITE_ZEROES 14
Christopher Ferris6cd53a52022-12-12 23:39:16 +000034#define VIRTIO_BLK_F_SECURE_ERASE 16
Christopher Ferris05d08e92016-02-04 13:16:38 -080035#ifndef VIRTIO_BLK_NO_LEGACY
36#define VIRTIO_BLK_F_BARRIER 0
Ben Cheng655a7c02013-10-16 16:09:24 -070037#define VIRTIO_BLK_F_SCSI 7
Christopher Ferris106b3a82016-08-24 12:15:38 -070038#define VIRTIO_BLK_F_FLUSH 9
Ben Cheng655a7c02013-10-16 16:09:24 -070039#define VIRTIO_BLK_F_CONFIG_WCE 11
Christopher Ferris106b3a82016-08-24 12:15:38 -070040#define VIRTIO_BLK_F_WCE VIRTIO_BLK_F_FLUSH
Christopher Ferris05d08e92016-02-04 13:16:38 -080041#endif
Ben Cheng655a7c02013-10-16 16:09:24 -070042#define VIRTIO_BLK_ID_BYTES 20
43struct virtio_blk_config {
Christopher Ferris25c18d42020-10-14 17:42:58 -070044 __virtio64 capacity;
45 __virtio32 size_max;
46 __virtio32 seg_max;
Tao Baod7db5942015-01-28 10:07:51 -080047 struct virtio_blk_geometry {
Christopher Ferris25c18d42020-10-14 17:42:58 -070048 __virtio16 cylinders;
Tao Baod7db5942015-01-28 10:07:51 -080049 __u8 heads;
50 __u8 sectors;
51 } geometry;
Christopher Ferris25c18d42020-10-14 17:42:58 -070052 __virtio32 blk_size;
Tao Baod7db5942015-01-28 10:07:51 -080053 __u8 physical_block_exp;
54 __u8 alignment_offset;
Christopher Ferris25c18d42020-10-14 17:42:58 -070055 __virtio16 min_io_size;
56 __virtio32 opt_io_size;
Tao Baod7db5942015-01-28 10:07:51 -080057 __u8 wce;
58 __u8 unused;
Christopher Ferris25c18d42020-10-14 17:42:58 -070059 __virtio16 num_queues;
60 __virtio32 max_discard_sectors;
61 __virtio32 max_discard_seg;
62 __virtio32 discard_sector_alignment;
63 __virtio32 max_write_zeroes_sectors;
64 __virtio32 max_write_zeroes_seg;
Christopher Ferrisd842e432019-03-07 10:21:59 -080065 __u8 write_zeroes_may_unmap;
66 __u8 unused1[3];
Christopher Ferris6cd53a52022-12-12 23:39:16 +000067 __virtio32 max_secure_erase_sectors;
68 __virtio32 max_secure_erase_seg;
69 __virtio32 secure_erase_sector_alignment;
Ben Cheng655a7c02013-10-16 16:09:24 -070070} __attribute__((packed));
71#define VIRTIO_BLK_T_IN 0
72#define VIRTIO_BLK_T_OUT 1
Christopher Ferris05d08e92016-02-04 13:16:38 -080073#ifndef VIRTIO_BLK_NO_LEGACY
Ben Cheng655a7c02013-10-16 16:09:24 -070074#define VIRTIO_BLK_T_SCSI_CMD 2
Christopher Ferris05d08e92016-02-04 13:16:38 -080075#endif
Ben Cheng655a7c02013-10-16 16:09:24 -070076#define VIRTIO_BLK_T_FLUSH 4
77#define VIRTIO_BLK_T_GET_ID 8
Christopher Ferrisd842e432019-03-07 10:21:59 -080078#define VIRTIO_BLK_T_DISCARD 11
79#define VIRTIO_BLK_T_WRITE_ZEROES 13
Christopher Ferris6cd53a52022-12-12 23:39:16 +000080#define VIRTIO_BLK_T_SECURE_ERASE 14
Christopher Ferris05d08e92016-02-04 13:16:38 -080081#ifndef VIRTIO_BLK_NO_LEGACY
Ben Cheng655a7c02013-10-16 16:09:24 -070082#define VIRTIO_BLK_T_BARRIER 0x80000000
Christopher Ferris05d08e92016-02-04 13:16:38 -080083#endif
84struct virtio_blk_outhdr {
85 __virtio32 type;
86 __virtio32 ioprio;
Christopher Ferris05d08e92016-02-04 13:16:38 -080087 __virtio64 sector;
Ben Cheng655a7c02013-10-16 16:09:24 -070088};
Christopher Ferrisd842e432019-03-07 10:21:59 -080089#define VIRTIO_BLK_WRITE_ZEROES_FLAG_UNMAP 0x00000001
90struct virtio_blk_discard_write_zeroes {
91 __le64 sector;
92 __le32 num_sectors;
93 __le32 flags;
94};
Christopher Ferris05d08e92016-02-04 13:16:38 -080095#ifndef VIRTIO_BLK_NO_LEGACY
Ben Cheng655a7c02013-10-16 16:09:24 -070096struct virtio_scsi_inhdr {
Christopher Ferris05d08e92016-02-04 13:16:38 -080097 __virtio32 errors;
98 __virtio32 data_len;
99 __virtio32 sense_len;
100 __virtio32 residual;
Ben Cheng655a7c02013-10-16 16:09:24 -0700101};
Christopher Ferris05d08e92016-02-04 13:16:38 -0800102#endif
Ben Cheng655a7c02013-10-16 16:09:24 -0700103#define VIRTIO_BLK_S_OK 0
104#define VIRTIO_BLK_S_IOERR 1
Christopher Ferris05d08e92016-02-04 13:16:38 -0800105#define VIRTIO_BLK_S_UNSUPP 2
Ben Cheng655a7c02013-10-16 16:09:24 -0700106#endif