]> xenbits.xensource.com Git - xen.git/commitdiff
minios: get VBD CD/removable/RO info
authorKeir Fraser <keir.fraser@citrix.com>
Thu, 20 Mar 2008 17:48:02 +0000 (17:48 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Thu, 20 Mar 2008 17:48:02 +0000 (17:48 +0000)
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
extras/mini-os/blkfront.c
extras/mini-os/include/blkfront.h
extras/mini-os/kernel.c
tools/ioemu/block-vbd.c

index f5cf19cbe59667d03e58151cc47e9cd752215ae2..3a6c22acebd7f42335a4c9695cbe34f86b4a4f89 100644 (file)
@@ -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);
index 034c793ff679278013223775e2696b8f6f682fc2..687f8434dcfba06f19a0607cefc22b41897b62aa 100644 (file)
@@ -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
index a9074fdcf68eee9c0d2586d5cf7cccbb4fab6983..96535e5ec7a491a5cef99a28dfc1ce9c764d498d 100644 (file)
@@ -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);
index b8ad91692e65587ddfb14ed6f7ed7f58f3cd752c..53c62484a54b9fdbe510efb658d0a1d9f775af3e 100644 (file)
@@ -51,6 +51,7 @@ typedef struct BDRVVbdState {
     int fd;
     int type;
     int mode;
+    int info;
     uint64_t sectors;
     unsigned sector_size;
     QEMU_LIST_ENTRY(BDRVVbdState) list;
@@ -80,7 +81,7 @@ static int vbd_open(BlockDriverState *bs, const char *filename, int flags)
     //handy to test posix access
     //return -EIO;
 
-    s->dev = init_blkfront((char *) filename, &s->sectors, &s->sector_size, &s->mode);
+    s->dev = init_blkfront((char *) filename, &s->sectors, &s->sector_size, &s->mode, &s->info);
 
     if (!s->dev)
        return -EIO;