1*433d6423SLionel Sambuc #ifndef _LINUX_VIRTIO_BLK_H 2*433d6423SLionel Sambuc #define _LINUX_VIRTIO_BLK_H 3*433d6423SLionel Sambuc /* This header is BSD licensed so anyone can use the definitions to implement 4*433d6423SLionel Sambuc * compatible drivers/servers. 5*433d6423SLionel Sambuc * 6*433d6423SLionel Sambuc * Redistribution and use in source and binary forms, with or without 7*433d6423SLionel Sambuc * modification, are permitted provided that the following conditions 8*433d6423SLionel Sambuc * are met: 9*433d6423SLionel Sambuc * 1. Redistributions of source code must retain the above copyright 10*433d6423SLionel Sambuc * notice, this list of conditions and the following disclaimer. 11*433d6423SLionel Sambuc * 2. Redistributions in binary form must reproduce the above copyright 12*433d6423SLionel Sambuc * notice, this list of conditions and the following disclaimer in the 13*433d6423SLionel Sambuc * documentation and/or other materials provided with the distribution. 14*433d6423SLionel Sambuc * 3. Neither the name of IBM nor the names of its contributors 15*433d6423SLionel Sambuc * may be used to endorse or promote products derived from this software 16*433d6423SLionel Sambuc * without specific prior written permission. 17*433d6423SLionel Sambuc * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND 18*433d6423SLionel Sambuc * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19*433d6423SLionel Sambuc * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20*433d6423SLionel Sambuc * ARE DISCLAIMED. IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE 21*433d6423SLionel Sambuc * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22*433d6423SLionel Sambuc * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23*433d6423SLionel Sambuc * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24*433d6423SLionel Sambuc * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25*433d6423SLionel Sambuc * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26*433d6423SLionel Sambuc * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27*433d6423SLionel Sambuc * SUCH DAMAGE. */ 28*433d6423SLionel Sambuc #if 0 29*433d6423SLionel Sambuc #include <linux/types.h> 30*433d6423SLionel Sambuc #include <linux/virtio_ids.h> 31*433d6423SLionel Sambuc #include <linux/virtio_config.h> 32*433d6423SLionel Sambuc #endif 33*433d6423SLionel Sambuc 34*433d6423SLionel Sambuc /* Feature bits */ 35*433d6423SLionel Sambuc #define VIRTIO_BLK_F_BARRIER 0 /* Does host support barriers? */ 36*433d6423SLionel Sambuc #define VIRTIO_BLK_F_SIZE_MAX 1 /* Indicates maximum segment size */ 37*433d6423SLionel Sambuc #define VIRTIO_BLK_F_SEG_MAX 2 /* Indicates maximum # of segments */ 38*433d6423SLionel Sambuc #define VIRTIO_BLK_F_GEOMETRY 4 /* Legacy geometry available */ 39*433d6423SLionel Sambuc #define VIRTIO_BLK_F_RO 5 /* Disk is read-only */ 40*433d6423SLionel Sambuc #define VIRTIO_BLK_F_BLK_SIZE 6 /* Block size of disk is available*/ 41*433d6423SLionel Sambuc #define VIRTIO_BLK_F_SCSI 7 /* Supports scsi command passthru */ 42*433d6423SLionel Sambuc #define VIRTIO_BLK_F_FLUSH 9 /* Cache flush command support */ 43*433d6423SLionel Sambuc #define VIRTIO_BLK_F_TOPOLOGY 10 /* Topology information is available */ 44*433d6423SLionel Sambuc 45*433d6423SLionel Sambuc #define VIRTIO_BLK_ID_BYTES 20 /* ID string length */ 46*433d6423SLionel Sambuc 47*433d6423SLionel Sambuc struct virtio_blk_config { 48*433d6423SLionel Sambuc /* The capacity (in 512-byte sectors). */ 49*433d6423SLionel Sambuc u64_t capacity; 50*433d6423SLionel Sambuc /* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */ 51*433d6423SLionel Sambuc u32_t size_max; 52*433d6423SLionel Sambuc /* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */ 53*433d6423SLionel Sambuc u32_t seg_max; 54*433d6423SLionel Sambuc /* geometry the device (if VIRTIO_BLK_F_GEOMETRY) */ 55*433d6423SLionel Sambuc struct virtio_blk_geometry { 56*433d6423SLionel Sambuc u16_t cylinders; 57*433d6423SLionel Sambuc u8_t heads; 58*433d6423SLionel Sambuc u8_t sectors; 59*433d6423SLionel Sambuc } geometry; 60*433d6423SLionel Sambuc 61*433d6423SLionel Sambuc /* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */ 62*433d6423SLionel Sambuc u32_t blk_size; 63*433d6423SLionel Sambuc 64*433d6423SLionel Sambuc /* the next 4 entries are guarded by VIRTIO_BLK_F_TOPOLOGY */ 65*433d6423SLionel Sambuc /* exponent for physical block per logical block. */ 66*433d6423SLionel Sambuc u8_t physical_block_exp; 67*433d6423SLionel Sambuc /* alignment offset in logical blocks. */ 68*433d6423SLionel Sambuc u8_t alignment_offset; 69*433d6423SLionel Sambuc /* minimum I/O size without performance penalty in logical blocks. */ 70*433d6423SLionel Sambuc u16_t min_io_size; 71*433d6423SLionel Sambuc /* optimal sustained I/O size in logical blocks. */ 72*433d6423SLionel Sambuc u32_t opt_io_size; 73*433d6423SLionel Sambuc 74*433d6423SLionel Sambuc } __attribute__((packed)); 75*433d6423SLionel Sambuc 76*433d6423SLionel Sambuc /* 77*433d6423SLionel Sambuc * Command types 78*433d6423SLionel Sambuc * 79*433d6423SLionel Sambuc * Usage is a bit tricky as some bits are used as flags and some are not. 80*433d6423SLionel Sambuc * 81*433d6423SLionel Sambuc * Rules: 82*433d6423SLionel Sambuc * VIRTIO_BLK_T_OUT may be combined with VIRTIO_BLK_T_SCSI_CMD or 83*433d6423SLionel Sambuc * VIRTIO_BLK_T_BARRIER. VIRTIO_BLK_T_FLUSH is a command of its own 84*433d6423SLionel Sambuc * and may not be combined with any of the other flags. 85*433d6423SLionel Sambuc */ 86*433d6423SLionel Sambuc 87*433d6423SLionel Sambuc /* These two define direction. */ 88*433d6423SLionel Sambuc #define VIRTIO_BLK_T_IN 0 89*433d6423SLionel Sambuc #define VIRTIO_BLK_T_OUT 1 90*433d6423SLionel Sambuc 91*433d6423SLionel Sambuc /* This bit says it's a scsi command, not an actual read or write. */ 92*433d6423SLionel Sambuc #define VIRTIO_BLK_T_SCSI_CMD 2 93*433d6423SLionel Sambuc 94*433d6423SLionel Sambuc /* Cache flush command */ 95*433d6423SLionel Sambuc #define VIRTIO_BLK_T_FLUSH 4 96*433d6423SLionel Sambuc 97*433d6423SLionel Sambuc /* Get device ID command */ 98*433d6423SLionel Sambuc #define VIRTIO_BLK_T_GET_ID 8 99*433d6423SLionel Sambuc 100*433d6423SLionel Sambuc /* Barrier before this op. */ 101*433d6423SLionel Sambuc #define VIRTIO_BLK_T_BARRIER 0x80000000 102*433d6423SLionel Sambuc 103*433d6423SLionel Sambuc /* This is the first element of the read scatter-gather list. */ 104*433d6423SLionel Sambuc struct virtio_blk_outhdr { 105*433d6423SLionel Sambuc /* VIRTIO_BLK_T* */ 106*433d6423SLionel Sambuc u32_t type; 107*433d6423SLionel Sambuc /* io priority. */ 108*433d6423SLionel Sambuc u32_t ioprio; 109*433d6423SLionel Sambuc /* Sector (ie. 512 byte offset) */ 110*433d6423SLionel Sambuc u64_t sector; 111*433d6423SLionel Sambuc }; 112*433d6423SLionel Sambuc 113*433d6423SLionel Sambuc struct virtio_scsi_inhdr { 114*433d6423SLionel Sambuc u32_t errors; 115*433d6423SLionel Sambuc u32_t data_len; 116*433d6423SLionel Sambuc u32_t sense_len; 117*433d6423SLionel Sambuc u32_t residual; 118*433d6423SLionel Sambuc }; 119*433d6423SLionel Sambuc 120*433d6423SLionel Sambuc /* And this is the final byte of the write scatter-gather list. */ 121*433d6423SLionel Sambuc #define VIRTIO_BLK_S_OK 0 122*433d6423SLionel Sambuc #define VIRTIO_BLK_S_IOERR 1 123*433d6423SLionel Sambuc #define VIRTIO_BLK_S_UNSUPP 2 124*433d6423SLionel Sambuc #endif /* _LINUX_VIRTIO_BLK_H */ 125