]> git.saurik.com Git - apple/bootx.git/blobdiff - bootx.tproj/ci.subproj/ci.c
BootX-81.tar.gz
[apple/bootx.git] / bootx.tproj / ci.subproj / ci.c
index 596e5710c57616f917870c0ecb0e8c802b201b9c..9bddc406bdd0472c0e0baef7332713cee897bdc9 100644 (file)
@@ -324,6 +324,10 @@ CICell Open(char *devSpec)
   CICell ihandle;
   long ret;
   
+  // intercept software RAID's virtual devices
+  if(isRAIDPath(devSpec))
+    return (CICell)RAIDOpen(devSpec);
+
   ciArgs.service = "open";
   ciArgs.nArgs = 1;
   ciArgs.nReturns = 1;
@@ -342,6 +346,11 @@ void Close(CICell ihandle)
 {
   CIArgs ciArgs;
   
+  if(isRAIDDevice((void*)ihandle)) {
+    RAIDClose((RAIDDevicePtr)ihandle);
+    return;
+  }
+
   ciArgs.service = "close";
   ciArgs.nArgs = 1;
   ciArgs.nReturns = 0;
@@ -358,6 +367,9 @@ CICell Read(CICell ihandle, long addr, long length)
   long actual;
   long ret;
   
+  if(isRAIDDevice((void*)ihandle))
+    return RAIDRead((RAIDDevicePtr)ihandle, addr, length, -1);
+
   ciArgs.service = "read";
   ciArgs.nArgs = 3;
   ciArgs.nReturns = 1;
@@ -383,6 +395,11 @@ CICell Write(CICell ihandle, long addr, long length)
   CIArgs ciArgs;
   long actual;
   long ret;
+
+  if(isRAIDDevice((void*)ihandle)) {
+    printf("who's trying to write to RAID?!\n");
+    return -1;
+  }
   
   ciArgs.service = "write";
   ciArgs.nArgs = 3;
@@ -407,6 +424,9 @@ CICell Seek(CICell ihandle, long long position)
   CIArgs ciArgs;
   long ret;
   
+  if(isRAIDDevice((void*)ihandle))
+    return RAIDSeek((RAIDDevicePtr)ihandle, position);
+
   ciArgs.service = "seek";
   ciArgs.nArgs = 3;
   ciArgs.nReturns = 1;