From fc9f4703173bbb0d41b0718a4cebc1de76dde15d Mon Sep 17 00:00:00 2001 From: Aaron Jackson Date: Sat, 18 Sep 2021 01:25:32 +0100 Subject: [PATCH 1/4] Dummy driver for understanding uio --- sys/conf/GENERIC | 2 ++ sys/conf/Make.pdpuba | 4 ++-- sys/pdp/conf.c | 19 ++++++++++++++++-- sys/pdpuba/dummy.c | 46 ++++++++++++++++++++++++++++++++++++++++++++ sys/pdpuba/dummy.h | 4 ++++ 5 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 sys/pdpuba/dummy.c create mode 100644 sys/pdpuba/dummy.h diff --git a/sys/conf/GENERIC b/sys/conf/GENERIC index 989390f5..9870c5f3 100644 --- a/sys/conf/GENERIC +++ b/sys/conf/GENERIC @@ -261,3 +261,5 @@ FPSIM NO # floating point simulator PROFILE NO # system profiling with KW11P clock INGRES NO # include the Ingres lock driver + +NDUMMY 1 \ No newline at end of file diff --git a/sys/conf/Make.pdpuba b/sys/conf/Make.pdpuba index de404454..96b8c9dd 100644 --- a/sys/conf/Make.pdpuba +++ b/sys/conf/Make.pdpuba @@ -17,9 +17,9 @@ VPATH= ../pdpuba CFILES= ${U}/br.c ${U}/dh.c ${U}/dn.c ${U}/dhu.c ${U}/dhv.c ${U}/dkbad.c \ ${U}/dr.c ${U}/dz.c ${U}/hk.c ${U}/ht.c ${U}/lp.c ${U}/ra.c ${U}/rk.c \ ${U}/rl.c ${U}/rx.c ${U}/si.c ${U}/tm.c ${U}/tmscp.c ${U}/tmscpdump.c \ - ${U}/ts.c ${U}/xp.c + ${U}/ts.c ${U}/xp.c ${U}/dummy.c OBJS= br.o dh.o dhu.o dhv.o dkbad.o dn.o dr.o dz.o hk.o ht.o lp.o ra.o rk.o \ - rl.o rx.o si.o tm.o tmscp.o tmscpdump.o ts.o xp.o dn.o + rl.o rx.o si.o tm.o tmscp.o tmscpdump.o ts.o xp.o dn.o dummy.o .c.o: ${CC} ${CFLAGS} -S $*.c diff --git a/sys/pdp/conf.c b/sys/pdp/conf.c index 79a83862..7045af30 100644 --- a/sys/pdp/conf.c +++ b/sys/pdp/conf.c @@ -335,6 +335,16 @@ int dnopen(), dnclose(), dnwrite(); #define dnioctl nodev #endif +#include "dummy.h" +#if NDUMMYY > 0 +int dummyopen(), dummyclose(), dummyread(), dummywrite(); +#else +#define dummyopen nodev +#define dummyclose nodev +#define dummyread nodev +#define dummywrite nodev +#endif + int logopen(), logclose(), logread(), logioctl(), logselect(); int syopen(), syread(), sywrite(), syioctl(), syselect(); @@ -467,6 +477,10 @@ struct cdevsw cdevsw[] = { fdopen, nodev, nodev, nodev, nodev, nodev, 0, nodev, nodev, +/* dummy = 27 */ + dummyopen, dummyclose, dummyread, dummywrite, + nodev, nulldev, 0, nodev, + nulldev, }; int nchrdev = sizeof(cdevsw) / sizeof(cdevsw[0]); @@ -525,7 +539,7 @@ isdisk(dev, type) /* NOTREACHED */ } -#define MAXDEV 27 +#define MAXDEV 28 static char chrtoblktbl[MAXDEV] = { /* CHR */ /* BLK */ /* 0 */ NODEV, @@ -554,7 +568,8 @@ static char chrtoblktbl[MAXDEV] = { /* 23 */ 12, /* tmscp */ /* 24 */ NODEV, /* 25 */ NODEV, - /* 26 */ NODEV + /* 26 */ NODEV, + /* 27 */ NODEV, /* dummy */ }; /* diff --git a/sys/pdpuba/dummy.c b/sys/pdpuba/dummy.c new file mode 100644 index 00000000..42297bc3 --- /dev/null +++ b/sys/pdpuba/dummy.c @@ -0,0 +1,46 @@ + +#include "../h/param.h" +#include "../h/syslog.h" +#include "dummy.h" + +dummyattach(addr, unit) + struct dummy *addr; + u_int unit; +{ + log(LOG_INFO, "dummy attach"); + return 1; +} + +dummyopen(dev, flag) + dev_t dev; + short flag; +{ + log(LOG_INFO, "dummy open"); + return 1; +} + +dummyclose(dev, flag) + dev_t dev; + short flag; +{ + log(LOG_INFO, "dummy close"); + return 1; +} + +dummyread(dev, uio, flag) + dev_t dev; + struct uio *uio; + int flag; +{ + log(LOG_INFO, "dummy read"); + return 1; +} + +dummywrite(dev, uio, flag) + dev_t dev; + struct uio *uio; + int flag; +{ + log(LOG_INFO, "dummy write"); + return 1; +} diff --git a/sys/pdpuba/dummy.h b/sys/pdpuba/dummy.h new file mode 100644 index 00000000..92ff7ada --- /dev/null +++ b/sys/pdpuba/dummy.h @@ -0,0 +1,4 @@ + +struct dummycsr { + long csr; +}; From f6db441cefa6047c06ad0ba0b16255f3ae7ea0a9 Mon Sep 17 00:00:00 2001 From: Aaron Jackson Date: Sat, 18 Sep 2021 22:37:20 +0100 Subject: [PATCH 2/4] NDUMMYY -> NDUMMY in conf.c --- sys/pdp/conf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/pdp/conf.c b/sys/pdp/conf.c index 7045af30..0b8457de 100644 --- a/sys/pdp/conf.c +++ b/sys/pdp/conf.c @@ -336,7 +336,7 @@ int dnopen(), dnclose(), dnwrite(); #endif #include "dummy.h" -#if NDUMMYY > 0 +#if NDUMMY > 0 int dummyopen(), dummyclose(), dummyread(), dummywrite(); #else #define dummyopen nodev From 3397140dc505b873bc62c704800bb9fa33511cda Mon Sep 17 00:00:00 2001 From: Aaron Jackson Date: Sat, 18 Sep 2021 22:37:49 +0100 Subject: [PATCH 3/4] =?UTF-8?q?bytes=20are=20coming=20in=20=F0=9F=A5=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sys/pdpuba/dummy.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/sys/pdpuba/dummy.c b/sys/pdpuba/dummy.c index 42297bc3..411803bd 100644 --- a/sys/pdpuba/dummy.c +++ b/sys/pdpuba/dummy.c @@ -1,8 +1,11 @@ #include "../h/param.h" #include "../h/syslog.h" +#include "../h/uio.h" #include "dummy.h" +#define DUMMY_BUFF_LEN 128 + dummyattach(addr, unit) struct dummy *addr; u_int unit; @@ -16,7 +19,7 @@ dummyopen(dev, flag) short flag; { log(LOG_INFO, "dummy open"); - return 1; + return 0; } dummyclose(dev, flag) @@ -24,7 +27,7 @@ dummyclose(dev, flag) short flag; { log(LOG_INFO, "dummy close"); - return 1; + return 0; } dummyread(dev, uio, flag) @@ -33,7 +36,7 @@ dummyread(dev, uio, flag) int flag; { log(LOG_INFO, "dummy read"); - return 1; + return 0; } dummywrite(dev, uio, flag) @@ -41,6 +44,19 @@ dummywrite(dev, uio, flag) struct uio *uio; int flag; { - log(LOG_INFO, "dummy write"); - return 1; + register int n; + register char *cp; + char inbuf[DUMMY_BUFF_LEN]; + int error; + + while (n = MIN(DUMMY_BUFF_LEN, uio->uio_resid)) { + cp = inbuf; + error = uiomove(cp, (int)n, uio); + if (error) + return error; + do + log(LOG_NOTICE, "dummy write: c=%c", *cp++); + while (--n); + } + return 0; } From 6af3ff79e68200f4e82754095ae6a7d4066563f4 Mon Sep 17 00:00:00 2001 From: Aaron Jackson Date: Sat, 18 Sep 2021 22:45:40 +0100 Subject: [PATCH 4/4] Bad example for writing 'Hello' --- sys/pdpuba/dummy.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sys/pdpuba/dummy.c b/sys/pdpuba/dummy.c index 411803bd..e22c82fa 100644 --- a/sys/pdpuba/dummy.c +++ b/sys/pdpuba/dummy.c @@ -36,6 +36,12 @@ dummyread(dev, uio, flag) int flag; { log(LOG_INFO, "dummy read"); + ureadc('H', uio); + ureadc('e', uio); + ureadc('l', uio); + ureadc('l', uio); + ureadc('o', uio); + return 0; }