+
+void mdevremoveall(void) {
+
+ int i;
+
+ for(i = 0; i < NB_MAX_MDEVICES; i++) {
+ if(!(mdev[i].mdFlags & mdInited)) continue; /* Ignore unused mdevs */
+
+ devfs_remove(mdev[i].mdbdevb); /* Remove the block device */
+ devfs_remove(mdev[i].mdcdevb); /* Remove the character device */
+
+ mdev[i].mdBase = 0; /* Clear the mdev's storage */
+ mdev[i].mdSize = 0;
+ mdev[i].mdSecsize = 0;
+ mdev[i].mdFlags = 0;
+ mdev[i].mdBDev = 0;
+ mdev[i].mdCDev = 0;
+ mdev[i].mdbdevb = 0;
+ mdev[i].mdcdevb = 0;
+ }
+}
+
+int
+mdevgetrange(int devid, uint64_t *base, uint64_t *size)
+{
+ assert(base);
+ assert(size);
+
+ /* filter invalid request */
+ if ((devid < 0) || (devid >= NB_MAX_MDEVICES)) {
+ return -1;
+ }
+
+ /* filter non-initialized memory devices */
+ if ((mdev[devid].mdFlags & mdInited) == 0) {
+ return -1;
+ }
+
+ *base = mdev[devid].mdBase << 12;
+ *size = mdev[devid].mdSize << 12;
+
+ /* make sure (base, size) is a valid range and will not overflow */
+ assert(*size < (UINT64_MAX - *base));
+
+ return 0;
+}
+