added my responsibility for the `cpm' port
[unix-history] / sys / i386 / isa / mcd.c
index db52bca..7309f42 100644 (file)
@@ -39,7 +39,7 @@
  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- *     $Id: mcd.c,v 1.11 1994/03/05 03:54:19 jkh Exp $
+ *     $Id: mcd.c,v 1.15 1994/04/20 07:06:41 davidg Exp $
  */
 static char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore";
 
  */
 static char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore";
 
@@ -79,7 +79,7 @@ static char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore";
 #define mcd_part(dev)  ((minor(dev)) & 7)
 #define mcd_unit(dev)  (((minor(dev)) & 0x38) >> 3)
 #define mcd_phys(dev)  (((minor(dev)) & 0x40) >> 6)
 #define mcd_part(dev)  ((minor(dev)) & 7)
 #define mcd_unit(dev)  (((minor(dev)) & 0x38) >> 3)
 #define mcd_phys(dev)  (((minor(dev)) & 0x40) >> 6)
-#define RAW_PART       3
+#define RAW_PART       0
 
 /* flags */
 #define MCDOPEN                0x0001  /* device opened */
 
 /* flags */
 #define MCDOPEN                0x0001  /* device opened */
@@ -99,7 +99,11 @@ static char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore";
 #define MCDDSKIN       MCD_ST_DSKIN            /* sensed disk in drive */
 #define MCDDOOROPEN    MCD_ST_DOOROPEN         /* sensed door open */
 
 #define MCDDSKIN       MCD_ST_DSKIN            /* sensed disk in drive */
 #define MCDDOOROPEN    MCD_ST_DOOROPEN         /* sensed door open */
 
-#define MCDEXISTS      0x0030                  /* A real Mitsumi drive */
+/* These are apparently the different states a mitsumi can get up to */
+#define MCDCDABSENT    0x0030
+#define MCDCDPRESENT   0x0020
+#define MCDSCLOSED     0x0080
+#define MCDSOPEN       0x00a0
 
 /* toc */
 #define MCD_MAXTOCS    104     /* from the Linux driver */
 
 /* toc */
 #define MCD_MAXTOCS    104     /* from the Linux driver */
@@ -346,6 +350,9 @@ MCD_TRACE("strategy: drive not valid\n",0,0,0,0);
                if (bounds_check_with_label(bp,&cd->dlabel,1) <= 0) {
                        goto done;
                }
                if (bounds_check_with_label(bp,&cd->dlabel,1) <= 0) {
                        goto done;
                }
+       } else {
+               bp->b_pblkno = bp->b_blkno;
+               bp->b_resid = 0;
        }
        
        /* queue it */
        }
        
        /* queue it */
@@ -604,12 +611,8 @@ mcd_probe(struct isa_device *dev)
                return 0;       /* Timeout */
        }
        status = inb(port+MCD_DATA);
                return 0;       /* Timeout */
        }
        status = inb(port+MCD_DATA);
-/* 0x20 == empty drive */
-/* 0x30 == MCDEXISTS == drive closed with CDROM inserted */
-/* 0x80 == drive pulled out but door closed */
-/* 0xa0 == drive pulled out and door open */
-       if (status != 0x20 && status != MCDEXISTS && status != 0x80 &&
-               status != 0xa0)
+       if (status != MCDCDABSENT && status != MCDCDPRESENT &&
+               status != MCDSOPEN && status != MCDSCLOSED)
                return 0;       /* Not actually a Mitsumi drive here */
        /* Get version information */
        outb(port+MCD_DATA, MCD_CMDCONTINFO);
                return 0;       /* Not actually a Mitsumi drive here */
        /* Get version information */
        outb(port+MCD_DATA, MCD_CMDCONTINFO);