aboutsummaryrefslogtreecommitdiffstats
path: root/extras
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-03-20 17:48:02 +0000
committerKeir Fraser <keir.fraser@citrix.com>2008-03-20 17:48:02 +0000
commitb44e418cc1fadadcba0a506db7111560afc2c1ff (patch)
tree2c55bef6f64f1b2891154498bcc0ff4b06ffb6a3 /extras
parentc7033a8f11ee90fa06f09a8730e71251b708bb0a (diff)
downloadxen-b44e418cc1fadadcba0a506db7111560afc2c1ff.tar.gz
xen-b44e418cc1fadadcba0a506db7111560afc2c1ff.tar.bz2
xen-b44e418cc1fadadcba0a506db7111560afc2c1ff.zip
minios: get VBD CD/removable/RO info
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
Diffstat (limited to 'extras')
-rw-r--r--extras/mini-os/blkfront.c5
-rw-r--r--extras/mini-os/include/blkfront.h2
-rw-r--r--extras/mini-os/kernel.c11
3 files changed, 15 insertions, 3 deletions
diff --git a/extras/mini-os/blkfront.c b/extras/mini-os/blkfront.c
index f5cf19cbe5..3a6c22aceb 100644
--- a/extras/mini-os/blkfront.c
+++ b/extras/mini-os/blkfront.c
@@ -70,7 +70,7 @@ void blkfront_handler(evtchn_port_t port, struct pt_regs *regs, void *data)
wake_up(&blkfront_queue);
}
-struct blkfront_dev *init_blkfront(char *nodename, uint64_t *sectors, unsigned *sector_size, int *mode)
+struct blkfront_dev *init_blkfront(char *nodename, uint64_t *sectors, unsigned *sector_size, int *mode, int *info)
{
xenbus_transaction_t xbt;
char* err;
@@ -176,6 +176,9 @@ done:
xenbus_unwatch_path(XBT_NIL, path);
+ snprintf(path, sizeof(path), "%s/info", dev->backend);
+ *info = xenbus_read_integer(path);
+
snprintf(path, sizeof(path), "%s/sectors", dev->backend);
// FIXME: read_integer returns an int, so disk size limited to 1TB for now
*sectors = dev->sectors = xenbus_read_integer(path);
diff --git a/extras/mini-os/include/blkfront.h b/extras/mini-os/include/blkfront.h
index 034c793ff6..687f8434dc 100644
--- a/extras/mini-os/include/blkfront.h
+++ b/extras/mini-os/include/blkfront.h
@@ -15,7 +15,7 @@ struct blkfront_aiocb
void (*aio_cb)(struct blkfront_aiocb *aiocb, int ret);
};
-struct blkfront_dev *init_blkfront(char *nodename, uint64_t *sectors, unsigned *sector_size, int *mode);
+struct blkfront_dev *init_blkfront(char *nodename, uint64_t *sectors, unsigned *sector_size, int *mode, int *info);
#ifdef HAVE_LIBC
int blkfront_open(struct blkfront_dev *dev);
#endif
diff --git a/extras/mini-os/kernel.c b/extras/mini-os/kernel.c
index a9074fdcf6..96535e5ec7 100644
--- a/extras/mini-os/kernel.c
+++ b/extras/mini-os/kernel.c
@@ -207,10 +207,19 @@ static void blk_write_sector(uint64_t sector)
static void blkfront_thread(void *p)
{
time_t lasttime = 0;
- blk_dev = init_blkfront(NULL, &blk_sectors, &blk_sector_size, &blk_mode);
+ int blk_info;
+
+ blk_dev = init_blkfront(NULL, &blk_sectors, &blk_sector_size, &blk_mode, &blk_info);
if (!blk_dev)
return;
+ if (blk_info & VDISK_CDROM)
+ printk("Block device is a CDROM\n");
+ if (blk_info & VDISK_REMOVABLE)
+ printk("Block device is removable\n");
+ if (blk_info & VDISK_READONLY)
+ printk("Block device is read-only\n");
+
#ifdef BLKTEST_WRITE
if (blk_mode == O_RDWR) {
blk_write_sector(0);