[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH v3 14/14] plat/drivers: Add rest of the interface for virtio block
LGTM. Reviewed-by: Jia He <justin.he@xxxxxxx> -- Cheers, Justin (Jia He) > -----Original Message----- > From: Roxana Nicolescu <nicolescu.roxana1996@xxxxxxxxx> > Sent: Friday, March 6, 2020 4:30 AM > To: minios-devel@xxxxxxxxxxxxx > Cc: Justin He <Justin.He@xxxxxxx>; Roxana Nicolescu > <nicolescu.roxana1996@xxxxxxxxx> > Subject: [UNIKRAFT PATCH v3 14/14] plat/drivers: Add rest of the interface > for virtio block > > This patch adds the rest of the interface for virtio block device which > is found in the specs. > Note: For now, it is not used in the implementation of the virtio > driver. > > Signed-off-by: Roxana Nicolescu <nicolescu.roxana1996@xxxxxxxxx> > --- > plat/drivers/include/virtio/virtio_blk.h | 112 +++++++++++++++++++++++ > 1 file changed, 112 insertions(+) > > diff --git a/plat/drivers/include/virtio/virtio_blk.h > b/plat/drivers/include/virtio/virtio_blk.h > index d56c1e13..79c0a967 100644 > --- a/plat/drivers/include/virtio/virtio_blk.h > +++ b/plat/drivers/include/virtio/virtio_blk.h > @@ -41,14 +41,29 @@ > /* Feature bits */ > #define VIRTIO_BLK_F_SIZE_MAX1/* Indicates maximum > segment size */ > #define VIRTIO_BLK_F_SEG_MAX2/* Indicates maximum # of > segments */ > +#define VIRTIO_BLK_F_GEOMETRY4/* Legacy geometry available > */ > #define VIRTIO_BLK_F_RO5/* Disk is read-only */ > #define VIRTIO_BLK_F_BLK_SIZE6/* Block size of disk is > available*/ > +#define VIRTIO_BLK_F_TOPOLOGY10/* Topology information is > available */ > #define VIRTIO_BLK_F_MQ12/* support more than one vq > */ > +#define VIRTIO_BLK_F_DISCARD13/* DISCARD is supported */ > +#define VIRTIO_BLK_F_WRITE_ZEROES14/* WRITE ZEROES is > supported */ > > /* Legacy feature bits */ > +#ifndef VIRTIO_BLK_NO_LEGACY > +#define VIRTIO_BLK_F_BARRIER0/* Does host support barriers? > */ > +#define VIRTIO_BLK_F_SCSI7/* Supports scsi command passthru > */ > #define VIRTIO_BLK_F_FLUSH9/* Flush command supported */ > #define VIRTIO_BLK_F_CONFIG_WCE11/* Writeback mode available > in config */ > > +#ifndef __KERNEL__ > +/* Old (deprecated) name for VIRTIO_BLK_F_FLUSH. */ > +#define VIRTIO_BLK_F_WCE VIRTIO_BLK_F_FLUSH > +#endif > +#endif /* !VIRTIO_BLK_NO_LEGACY */ > + > +#define VIRTIO_BLK_ID_BYTES20/* ID string length */ > + > struct virtio_blk_config { > /* The capacity (in 512-byte sectors). */ > __u64 capacity; > @@ -56,29 +71,104 @@ struct virtio_blk_config { > __u32 size_max; > /* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */ > __u32 seg_max; > +/* geometry of the device (if VIRTIO_BLK_F_GEOMETRY) */ > +struct virtio_blk_geometry { > +__u16 cylinders; > +__u8 heads; > +__u8 sectors; > +} geometry; > > /* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */ > __u32 blk_size; > > +/* the next 4 entries are guarded by VIRTIO_BLK_F_TOPOLOGY */ > +/* exponent for physical block per logical block. */ > +__u8 physical_block_exp; > +/* alignment offset in logical blocks. */ > +__u8 alignment_offset; > +/* minimum I/O size without performance penalty in logical blocks. > */ > +__u16 min_io_size; > +/* optimal sustained I/O size in logical blocks. */ > +__u32 opt_io_size; > > /* writeback mode (if VIRTIO_BLK_F_CONFIG_WCE) */ > __u8 wce; > +__u8 unused; > > /* number of vqs, only available when VIRTIO_BLK_F_MQ is set */ > __u16 num_queues; > + > +/* the next 3 entries are guarded by VIRTIO_BLK_F_DISCARD */ > +/* > + * The maximum discard sectors (in 512-byte sectors) for > + * one segment. > + */ > +__u32 max_discard_sectors; > +/* > + * The maximum number of discard segments in a > + * discard command. > + */ > +__u32 max_discard_seg; > +/* Discard commands must be aligned to this number of sectors. */ > +__u32 discard_sector_alignment; > + > +/* the next 3 entries are guarded by VIRTIO_BLK_F_WRITE_ZEROES */ > +/* > + * The maximum number of write zeroes sectors (in 512-byte sectors) > in > + * one segment. > + */ > +__u32 max_write_zeroes_sectors; > +/* > + * The maximum number of segments in a write zeroes > + * command. > + */ > +__u32 max_write_zeroes_seg; > +/* > + * Set if a VIRTIO_BLK_T_WRITE_ZEROES request may result in the > + * deallocation of one or more of the sectors. > + */ > +__u8 write_zeroes_may_unmap; > + > +__u8 unused1[3]; > } __packed; > > /* > * Command types > + * > + * Usage is a bit tricky as some bits are used as flags and some are not. > + * > + * Rules: > + * VIRTIO_BLK_T_OUT may be combined with VIRTIO_BLK_T_SCSI_CMD or > + * VIRTIO_BLK_T_BARRIER. VIRTIO_BLK_T_FLUSH is a command of its own > + * and may not be combined with any of the other flags. > */ > > /* These two define direction. */ > #define VIRTIO_BLK_T_IN0 > #define VIRTIO_BLK_T_OUT1 > > +#ifndef VIRTIO_BLK_NO_LEGACY > +/* This bit says it's a scsi command, not an actual read or write. */ > +#define VIRTIO_BLK_T_SCSI_CMD2 > +#endif /* VIRTIO_BLK_NO_LEGACY */ > > /* Cache flush command */ > #define VIRTIO_BLK_T_FLUSH4 > + > +/* Get device ID command */ > +#define VIRTIO_BLK_T_GET_ID 8 > + > +/* Discard command */ > +#define VIRTIO_BLK_T_DISCARD11 > + > +/* Write zeroes command */ > +#define VIRTIO_BLK_T_WRITE_ZEROES13 > + > +#ifndef VIRTIO_BLK_NO_LEGACY > +/* Barrier before this op. */ > +#define VIRTIO_BLK_T_BARRIER0x80000000 > +#endif /* !VIRTIO_BLK_NO_LEGACY */ > + > /* > * This comes first in the read scatter-gather list. > * For legacy virtio, if VIRTIO_F_ANY_LAYOUT is not negotiated, > @@ -93,6 +183,28 @@ struct virtio_blk_outhdr { > __virtio_le64 sector; > }; > > +/* Unmap this range (only valid for write zeroes command) */ > +#define VIRTIO_BLK_WRITE_ZEROES_FLAG_UNMAP0x00000001 > + > +/* Discard/write zeroes range for each request. */ > +struct virtio_blk_discard_write_zeroes { > +/* discard/write zeroes start sector */ > +__u64 sector; > +/* number of discard/write zeroes sectors */ > +__u32 num_sectors; > +/* flags for this range */ > +__u32 flags; > +}; > + > +#ifndef VIRTIO_BLK_NO_LEGACY > +struct virtio_scsi_inhdr { > +__virtio_le32 errors; > +__virtio_le32 data_len; > +__virtio_le32 sense_len; > +__virtio_le32 residual; > +}; > +#endif /* !VIRTIO_BLK_NO_LEGACY */ > + > /* And this is the final byte of the write scatter-gather list. */ > #define VIRTIO_BLK_S_OK0 > #define VIRTIO_BLK_S_IOERR1 > -- > 2.17.1 IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you. _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |