aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc
diff options
context:
space:
mode:
authorAllen Pais <allen.pais@oracle.com>2014-09-19 09:42:14 -0400
committerDavid S. Miller <davem@davemloft.net>2014-09-30 17:37:34 -0400
commit9bce21828d54a95143f1b74619705c2dd8e88b92 (patch)
tree6565bfb1f8c3cfa6f307bb8600d11eab0fd5d20f /arch/sparc
parent163a4e7473061388bba0899a1a063bae44e1715a (diff)
sunvdc: add cdrom and v1.1 protocol support
Interpret the media type from v1.1 protocol to support CDROM/DVD. For v1.0 protocol, a disk's size continues to be calculated from the geometry returned by the vdisk server. The geometry returned by the server can be less than the actual number of sectors available in the backing image/device due to the rounding in the division used to compute the geometry in the vdisk server. In v1.1 protocol a disk's actual size in sectors is returned during the handshake. Use this size when v1.1 protocol is negotiated. Since this size will always be larger than the former geometry computed size, disks created under v1.0 will be forwards compatible to v1.1, but not vice versa. Signed-off-by: Dwight Engen <dwight.engen@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc')
-rw-r--r--arch/sparc/include/asm/vio.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/sparc/include/asm/vio.h b/arch/sparc/include/asm/vio.h
index 6b135a8ab07b..94a02dbbac41 100644
--- a/arch/sparc/include/asm/vio.h
+++ b/arch/sparc/include/asm/vio.h
@@ -121,12 +121,18 @@ struct vio_disk_attr_info {
121 u8 vdisk_type; 121 u8 vdisk_type;
122#define VD_DISK_TYPE_SLICE 0x01 /* Slice in block device */ 122#define VD_DISK_TYPE_SLICE 0x01 /* Slice in block device */
123#define VD_DISK_TYPE_DISK 0x02 /* Entire block device */ 123#define VD_DISK_TYPE_DISK 0x02 /* Entire block device */
124 u16 resv1; 124 u8 vdisk_mtype; /* v1.1 */
125#define VD_MEDIA_TYPE_FIXED 0x01 /* Fixed device */
126#define VD_MEDIA_TYPE_CD 0x02 /* CD Device */
127#define VD_MEDIA_TYPE_DVD 0x03 /* DVD Device */
128 u8 resv1;
125 u32 vdisk_block_size; 129 u32 vdisk_block_size;
126 u64 operations; 130 u64 operations;
127 u64 vdisk_size; 131 u64 vdisk_size; /* v1.1 */
128 u64 max_xfer_size; 132 u64 max_xfer_size;
129 u64 resv2[2]; 133 u32 phys_block_size; /* v1.2 */
134 u32 resv2;
135 u64 resv3[1];
130}; 136};
131 137
132struct vio_disk_desc { 138struct vio_disk_desc {