1 // Copyright 2017 The Fuchsia Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #pragma once 6 7 #include <stdint.h> 8 #include <zircon/compiler.h> 9 10 // clang-format off 11 #define VIRTIO_BLK_F_BARRIER (1u << 0) 12 #define VIRTIO_BLK_F_SIZE_MAX (1u << 1) 13 #define VIRTIO_BLK_F_SEG_MAX (1u << 2) 14 #define VIRTIO_BLK_F_GEOMETRY (1u << 4) 15 #define VIRTIO_BLK_F_RO (1u << 5) 16 #define VIRTIO_BLK_F_BLK_SIZE (1u << 6) 17 #define VIRTIO_BLK_F_SCSI (1u << 7) 18 #define VIRTIO_BLK_F_FLUSH (1u << 9) 19 #define VIRTIO_BLK_F_TOPOLOGY (1u << 10) 20 #define VIRTIO_BLK_F_CONFIG_WCE (1u << 11) 21 22 #define VIRTIO_BLK_T_IN 0 23 #define VIRTIO_BLK_T_OUT 1 24 #define VIRTIO_BLK_T_FLUSH 4 25 #define VIRTIO_BLK_T_GET_ID 8 26 27 #define VIRTIO_BLK_S_OK 0 28 #define VIRTIO_BLK_S_IOERR 1 29 #define VIRTIO_BLK_S_UNSUPP 2 30 31 #define VIRTIO_BLK_ID_BYTES 20 32 // clang-format on 33 34 __BEGIN_CDECLS 35 36 typedef struct virtio_blk_geometry { 37 uint16_t cylinders; 38 uint8_t heads; 39 uint8_t sectors; 40 } __PACKED virtio_blk_geometry_t; 41 42 typedef struct virtio_blk_config { 43 uint64_t capacity; 44 uint32_t size_max; 45 uint32_t seg_max; 46 virtio_blk_geometry_t geometry; 47 uint32_t blk_size; 48 } __PACKED virtio_blk_config_t; 49 50 typedef struct virtio_blk_req { 51 uint32_t type; 52 uint32_t ioprio; 53 uint64_t sector; 54 } __PACKED virtio_blk_req_t; 55 56 __END_CDECLS 57