diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-03-20 17:48:02 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-03-20 17:48:02 +0000 |
commit | b44e418cc1fadadcba0a506db7111560afc2c1ff (patch) | |
tree | 2c55bef6f64f1b2891154498bcc0ff4b06ffb6a3 /extras | |
parent | c7033a8f11ee90fa06f09a8730e71251b708bb0a (diff) | |
download | xen-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.c | 5 | ||||
-rw-r--r-- | extras/mini-os/include/blkfront.h | 2 | ||||
-rw-r--r-- | extras/mini-os/kernel.c | 11 |
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); |