From 2e948db4ac77ab867b8ed46ebe810748004ace46 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Fri, 20 Sep 1991 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1991-09-20 --- pc/devfloppy.c | 31 +++++++++++++++++-------------- port/devcons.c | 2 +- port/devpipe.c | 3 ++- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/pc/devfloppy.c b/pc/devfloppy.c index 91c5bd48e324a75bbcbd48ef956d4e17e4d3e3fb..344c3ead2c63067e058fd52b054e17f7d665d8b5 100644 --- a/pc/devfloppy.c +++ b/pc/devfloppy.c @@ -6,6 +6,8 @@ #include "io.h" #include "errno.h" +/* NEC PD765A (8272A compatible) floppy controller */ + typedef struct Drive Drive; typedef struct Controller Controller; typedef struct Type Type; @@ -42,6 +44,7 @@ enum /* file types */ Qdir= 0, Qdata= (1<<2), + Qctl= (2<<2), Qmask= (3<<2), }; @@ -160,9 +163,13 @@ static void floppyintr(Ureg*); Dirtab floppydir[]={ "fd0disk", {Qdata + 0}, 0, 0600, + "fd0ctl", {Qctl + 0}, 0, 0600, "fd1disk", {Qdata + 1}, 0, 0600, + "fd1ctl", {Qctl + 1}, 0, 0600, "fd2disk", {Qdata + 2}, 0, 0600, + "fd2ctl", {Qctl + 2}, 0, 0600, "fd3disk", {Qdata + 3}, 0, 0600, + "fd3ctl", {Qctl + 3}, 0, 0600, }; #define NFDIR 2 /* directory entries/drive */ @@ -215,15 +222,20 @@ floppyreset(void) void floppyinit(void) { - /* - * watchdog to turn off the motors - */ - kproc("floppy", floppykproc, 0); } Chan* floppyattach(char *spec) { + static int kstarted; + + if(kstarted == 0){ + /* + * watchdog to turn off the motors + */ + kstarted = 1; + kproc("floppy", floppykproc, 0); + } return devattach('f', spec); } @@ -274,15 +286,6 @@ floppywstat(Chan *c, char *dp) error(Eperm); } -static void -ul2user(uchar *a, ulong x) -{ - a[0] = x >> 24; - a[1] = x >> 16; - a[2] = x >> 8; - a[3] = x; -} - /* * look for a floppy change */ @@ -292,7 +295,7 @@ floppychanged(Drive *dp) if((inb(Fchanged) & Fchange) == 0) return; - + print("floppy has changed\n"); } /* diff --git a/port/devcons.c b/port/devcons.c index 4402bd4170e6b4c4f64c0ca33e63285ab7f86615..e72a76107758a6c63f95d0dc59af059a7302a2fb 100644 --- a/port/devcons.c +++ b/port/devcons.c @@ -162,7 +162,7 @@ panic(char *fmt, ...) int n; strcpy(buf, "inconceivable: "); - n = doprint(buf+7, buf+sizeof(buf), fmt, (&fmt+1)) - buf; + n = doprint(buf+strlen(buf), buf+sizeof(buf), fmt, (&fmt+1)) - buf; buf[n] = '\n'; putstrn(buf, n+1); dumpstack(); diff --git a/port/devpipe.c b/port/devpipe.c index e41a1b8f87c437005af0b3a4af1ee940a9afbdda..f52487e739011aab241aa4a1c3fd42c9fc806f83 100644 --- a/port/devpipe.c +++ b/port/devpipe.c @@ -275,7 +275,8 @@ pipewrite(Chan *c, void *va, long n, ulong offset) static void pipeiput(Queue *q, Block *bp) { - FLOWCTL(q); + if(bp->type != M_HANGUP) + FLOWCTL(q); PUTNEXT(q, bp); }