]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/dev/memdev.c
xnu-1228.5.20.tar.gz
[apple/xnu.git] / bsd / dev / memdev.c
index 307ad77d9949cead937863ce7f5835fe25c7e0c4..f957be33c52a71e9f8109403b51827479d6fb488 100644 (file)
@@ -172,6 +172,7 @@ int mdevCMajor = -1;
 static int mdevioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p, int is_char);
 dev_t mdevadd(int devid, ppnum_t base, unsigned int size, int phys);
 dev_t mdevlookup(int devid);
+void mdevremoveall(void);
 
 static int mdevclose(__unused dev_t dev, __unused int flags, 
                                          __unused int devtype, __unused struct proc *p) {
@@ -609,3 +610,24 @@ dev_t mdevlookup(int devid) {
        if(!(mdev[devid].mdFlags & mdInited)) return -1;        /* This one hasn't been defined */
        return mdev[devid].mdBDev;                                                      /* Return the device number */
 }
+
+void mdevremoveall(void) {
+
+       int i;
+
+       for(i = 0; i < 16; 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;
+       }
+}