summaryrefslogtreecommitdiffstats
path: root/qemu/roms/SLOF/lib/libvirtio/virtio-blk.h
blob: ac8bf28964b2b26558a1cb3b9f65e59a88aff4f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/******************************************************************************
 * Copyright (c) 2011 IBM Corporation
 * All rights reserved.
 * This program and the accompanying materials
 * are made available under the terms of the BSD License
 * which accompanies this distribution, and is available at
 * http://www.opensource.org/licenses/bsd-license.php
 *
 * Contributors:
 *     IBM Corporation - initial implementation
 *****************************************************************************/

/*
 * Virtio block device definitions.
 * See Virtio Spec, Appendix D, for details
 */

#ifndef _VIRTIO_BLK_H
#define _VIRTIO_BLK_H

#include <stdint.h>


struct virtio_blk_cfg {
	uint64_t	capacity;
	uint32_t	size_max;
	uint32_t	seg_max;
	struct	virtio_blk_geometry {
		uint16_t	cylinders;
		uint8_t 	heads;
		uint8_t 	sectors;
	} geometry;
	uint32_t	blk_size;
	uint32_t	sectors_max;
} __attribute__ ((packed)) ;

/* Block request */
struct virtio_blk_req {
	uint32_t  type ;
	uint32_t  ioprio ;
	uint64_t  sector ;
};

/* Block request types */
#define VIRTIO_BLK_T_IN			0
#define VIRTIO_BLK_T_OUT		1
#define VIRTIO_BLK_T_SCSI_CMD		2
#define VIRTIO_BLK_T_SCSI_CMD_OUT	3
#define VIRTIO_BLK_T_FLUSH		4
#define VIRTIO_BLK_T_FLUSH_OUT		5
#define VIRTIO_BLK_T_BARRIER		0x80000000

/* VIRTIO_BLK Feature bits */
#define VIRTIO_BLK_F_BLK_SIZE       (1 << 6)

extern int virtioblk_init(struct virtio_device *dev);
extern void virtioblk_shutdown(struct virtio_device *dev);
extern int virtioblk_read(struct virtio_device *dev, char *buf, long blocknum, long cnt);

#endif  /* _VIRTIO_BLK_H */