M carrera/devether.c => carrera/devether.c +3 -0
@@ 836,6 836,9 @@ parseether(uchar *to, char *from)
}
Dev etherdevtab = {
+ 'l',
+ "ether",
+
etherreset,
devinit,
etherattach,
M carrera/devrtc.c => carrera/devrtc.c +3 -0
@@ 293,6 293,9 @@ rtcwrite(Chan *c, void *buf, long n, ulong offset)
}
Dev rtcdevtab = {
+ 'r',
+ "rtc",
+
rtcreset,
devinit,
rtcattach,
M ip/devip.c => ip/devip.c +3 -0
@@ 712,6 712,9 @@ ipbwrite(Chan* c, Block* bp, ulong offset)
}
Dev ipdevtab = {
+ 'I',
+ "ip",
+
ipreset,
ipinit,
ipattach,
M ip/kio.c => ip/kio.c +2 -2
@@ 71,7 71,7 @@ kread(int fd, void *va, long n)
if(dir && c->mnt)
n = unionread(c, va, n);
- else if(devchar[c->type] != L'M')
+ else if(devtab[c->type]->dc != L'M')
n = devtab[c->type]->read(c, va, n, c->offset);
else
n = mntread9p(c, va, n, c->offset);
@@ 106,7 106,7 @@ kseek(int fd, int offset, int whence)
if(c->qid.path & CHDIR)
error(Eisdir);
- if(devchar[c->type] == '|')
+ if(devtab[c->type]->dc == '|')
error(Eisstream);
off = 0;
M pc/archgeneric.c => pc/archgeneric.c +0 -2
@@ 57,8 57,6 @@ static X86type x86type[] =
{ 5, 2, 23, "P54C", },
{ 5, 3, 23, "P24T", },
{ 5, 4, 23, "P55C MMX", },
- { 5, 5, 23, "PODDX4", },
- { 5, 6, 23, "PODP5", },
{ 5, 7, 23, "P54C VRT", },
{ 6, 1, 16, "PentiumPro", },/* determined by trial and error */
M pc/devastar.c => pc/devastar.c +4 -1
@@ 378,7 378,7 @@ astargen(Chan *c, Dirtab *tab, int ntab, int i, Dir *db)
db->mtime = kerndate;
memmove(db->uid, eve, NAMELEN);
memmove(db->gid, eve, NAMELEN);
- db->type = devchar[c->type];
+ db->type = devtab[c->type]->dc;
db->dev = c->dev;
if(c->flag&CMSG)
db->mode |= CHMOUNT;
@@ 1236,6 1236,9 @@ astarwstat(Chan *c, char *dp)
}
Dev astardevtab = {
+ 'G',
+ "astar",
+
astarreset,
devinit,
astarattach,
M pc/devata.c => pc/devata.c +3 -0
@@ 1912,6 1912,9 @@ atapiintr(Controller *cp)
}
Dev atadevtab = {
+ 'H',
+ "ata",
+
devreset,
devinit,
ataattach,
M pc/devether.c => pc/devether.c +3 -0
@@ 386,6 386,9 @@ etherreset(void)
}
Dev etherdevtab = {
+ 'l',
+ "ether",
+
etherreset,
devinit,
etherattach,
M pc/devfloppy.c => pc/devfloppy.c +3 -0
@@ 1003,6 1003,9 @@ floppyintr(Ureg *ur)
}
Dev floppydevtab = {
+ 'f',
+ "floppy",
+
floppyreset,
devinit,
floppyattach,
M pc/devi82365.c => pc/devi82365.c +3 -0
@@ 877,6 877,9 @@ i82365write(Chan *c, void *a, long n, ulong offset)
}
Dev i82365devtab = {
+ 'y',
+ "i82365",
+
i82365reset,
devinit,
i82365attach,
M pc/devlpt.c => pc/devlpt.c +3 -0
@@ 193,6 193,9 @@ lptintr(Ureg *ur, void *arg)
}
Dev lptdevtab = {
+ 'L',
+ "lpt",
+
devreset,
devinit,
lptattach,
M pc/devrtc.c => pc/devrtc.c +3 -0
@@ 277,6 277,9 @@ rtcwrite(Chan* c, void* buf, long n, ulong offset)
}
Dev rtcdevtab = {
+ 'r',
+ "rtc",
+
devreset,
devinit,
rtcattach,
M pc/devvga.c => pc/devvga.c +3 -0
@@ 410,6 410,9 @@ vgawrite(Chan *c, void *buf, long n, ulong offset)
}
Dev vgadevtab = {
+ 'v',
+ "vga",
+
vgareset,
vgainit,
vgaattach,
M port/chan.c => port/chan.c +2 -2
@@ 55,7 55,7 @@ chandevreset(void)
{
int i;
- for(i=0; devchar[i]; i++)
+ for(i=0; devtab[i] != nil; i++)
devtab[i]->reset();
}
@@ 64,7 64,7 @@ chandevinit(void)
{
int i;
- for(i=0; devchar[i]; i++)
+ for(i=0; devtab[i] != nil; i++)
devtab[i]->init();
}
M port/dev.c => port/dev.c +8 -14
@@ 10,22 10,16 @@ extern ulong kerndate;
int
devno(int c, int user)
{
- Rune *s;
int i;
- s = devchar;
- i = 0;
- while(*s){
- if(c == *s)
+ for(i = 0; devtab[i] != nil; i++) {
+ if(devtab[i]->dc == c)
return i;
- i++;
- s++;
}
+ if(user == 0)
+ panic("devno %C 0x%ux", c, c);
- if(user)
- return -1;
- panic("devno %C 0x%ux", c, c);
- return 0;
+ return -1;
}
void
@@ 33,7 27,7 @@ devdir(Chan *c, Qid qid, char *n, long length, char *user, long perm, Dir *db)
{
strcpy(db->name, n);
db->qid = qid;
- db->type = devchar[c->type];
+ db->type = devtab[c->type]->dc;
db->dev = c->dev;
if(qid.path & CHDIR)
db->mode = CHDIR|perm;
@@ 89,7 83,7 @@ Chan*
devclone(Chan *c, Chan *nc)
{
if(c->flag & COPEN)
- panic("clone of open file type %C\n", devchar[c->type]);
+ panic("clone of open file type %C\n", devtab[c->type]->dc);
if(nc == 0)
nc = newchan();
@@ 158,7 152,7 @@ devstat(Chan *c, char *db, Dirtab *tab, int ntab, Devgen *gen)
}
print("%s %s: devstat %C %lux\n",
up->text, up->user,
- devchar[c->type], c->qid.path);
+ devtab[c->type]->dc, c->qid.path);
error(Enonexist);
case 0:
M port/devXXX.c => port/devXXX.c +3 -0
@@ 129,6 129,9 @@ XXXbwrite(Chan* c, Block* bp, ulong offset) /* default in dev.c */
}
Dev XXXdevtab = { /* defaults in dev.c */
+ 'X',
+ "XXX",
+
XXXreset, /* devreset */
XXXinit, /* devinit */
XXXattach,
M port/devaudio.c => port/devaudio.c +3 -0
@@ 921,6 921,9 @@ swab(uchar *a)
}
Dev audiodevtab = {
+ 'A',
+ "audio",
+
devreset,
audioinit,
audioattach,
M port/devcons.c => port/devcons.c +3 -0
@@ 828,6 828,9 @@ setterm(char *f)
}
Dev consdevtab = {
+ 'c',
+ "cons",
+
devreset,
consinit,
consattach,
M port/devdup.c => port/devdup.c +3 -0
@@ 85,6 85,9 @@ dupwrite(Chan*, void*, long, ulong)
}
Dev dupdevtab = {
+ 'd',
+ "dup",
+
devreset,
devinit,
dupattach,
M port/devenv.c => port/devenv.c +3 -0
@@ 231,6 231,9 @@ envwrite(Chan *c, void *a, long n, ulong offset)
}
Dev envdevtab = {
+ 'e',
+ "env",
+
devreset,
devinit,
envattach,
M port/devkprof.c => port/devkprof.c +3 -0
@@ 169,6 169,9 @@ kprofwrite(Chan *c, char *a, long n, ulong)
}
Dev kprofdevtab = {
+ 'T',
+ "kprof",
+
devreset,
kprofinit,
kprofattach,
M port/devlance.c => port/devlance.c +3 -0
@@ 546,6 546,9 @@ parseether(uchar *to, char *from)
}
Dev lancedevtab = {
+ 'l',
+ "lance",
+
lancereset,
lanceinit,
lanceattach,
M port/devmnt.c => port/devmnt.c +10 -4
@@ 668,7 668,7 @@ mountio(Mnt *m, Mntrpc *r)
nexterror();
}
else {
- if(devchar[m->c->type] == L'M'){
+ if(devtab[m->c->type]->dc == L'M'){
if(mnt9prdwr(Twrite, m->c, r->rpc, n, 0) != n)
error(Emountrpc);
}else{
@@ 718,7 718,7 @@ mntrpcread(Mnt *m, Mntrpc *r)
}
r->reply.type = 0;
r->reply.tag = 0;
- if(devchar[m->c->type] == L'M')
+ if(devtab[m->c->type]->dc == L'M')
n = mnt9prdwr(Tread, m->c, r->rpc, MAXRPC, 0);
else
n = devtab[m->c->type]->read(m->c, r->rpc, MAXRPC, 0);
@@ 940,8 940,11 @@ mntchk(Chan *c)
void
mntdirfix(uchar *dirbuf, Chan *c)
{
- dirbuf[DIRLEN-4] = devchar[c->type]>>0;
- dirbuf[DIRLEN-3] = devchar[c->type]>>8;
+ int r;
+
+ r = devtab[c->type]->dc;
+ dirbuf[DIRLEN-4] = r>>0;
+ dirbuf[DIRLEN-3] = r>>8;
dirbuf[DIRLEN-2] = c->dev;
dirbuf[DIRLEN-1] = c->dev>>8;
}
@@ 1055,6 1058,9 @@ mntrepl(char *buf)
}
Dev mntdevtab = {
+ 'm',
+ "mnt",
+
mntreset,
devinit,
mntattach,
M port/devmouse.c => port/devmouse.c +3 -0
@@ 288,6 288,9 @@ mousewrite(Chan *c, void *va, long n, ulong)
}
Dev mousedevtab = {
+ 'm',
+ "mouse",
+
mousereset,
mouseinit,
mouseattach,
M port/devns16552.c => port/devns16552.c +3 -0
@@ 942,6 942,9 @@ ns16552wstat(Chan *c, char *dp)
}
Dev ns16552devtab = {
+ 't',
+ "ns16552",
+
ns16552reset,
devinit,
ns16552attach,
M port/devpipe.c => port/devpipe.c +3 -0
@@ 349,6 349,9 @@ pipebwrite(Chan *c, Block *bp, ulong)
}
Dev pipedevtab = {
+ '|',
+ "pipe",
+
devreset,
pipeinit,
pipeattach,
M port/devproc.c => port/devproc.c +3 -0
@@ 619,6 619,9 @@ procwrite(Chan *c, void *va, long n, ulong offset)
}
Dev procdevtab = {
+ 'p',
+ "proc",
+
devreset,
procinit,
procattach,
M port/devroot.c => port/devroot.c +3 -0
@@ 213,6 213,9 @@ rootwrite(Chan *c, void *buf, long n, ulong)
}
Dev rootdevtab = {
+ '/',
+ "root",
+
rootreset,
devinit,
rootattach,
M port/devsd.c => port/devsd.c +3 -0
@@ 252,6 252,9 @@ sdwrite(Chan *c, char *a, long n, ulong offset)
}
Dev sddevtab = {
+ 'w',
+ "sd",
+
devreset,
sdinit,
sdattach,
M port/devsrv.c => port/devsrv.c +3 -0
@@ 249,6 249,9 @@ srvwrite(Chan *c, void *va, long n, ulong)
}
Dev srvdevtab = {
+ 's',
+ "srv",
+
devreset,
srvinit,
srvattach,
M port/devssl.c => port/devssl.c +3 -0
@@ 879,6 879,9 @@ out:
}
Dev ssldevtab = {
+ 'D',
+ "ssl",
+
devreset,
sslinit,
sslattach,
M port/devtinyfs.c => port/devtinyfs.c +3 -0
@@ 872,6 872,9 @@ tinyfswrite(Chan *c, void *a, long n, ulong offset)
}
Dev tinyfsdevtab = {
+ 'U',
+ "tinyfs",
+
tinyfsreset,
devinit,
tinyfsattach,
M port/portdat.h => port/portdat.h +3 -1
@@ 166,6 166,9 @@ struct Chan
struct Dev
{
+ int dc;
+ char* name;
+
void (*reset)(void);
void (*init)(void);
Chan* (*attach)(char*);
@@ 620,7 623,6 @@ enum
extern Conf conf;
extern char* conffile;
extern int cpuserver;
-extern Rune* devchar;
extern Dev* devtab[];
extern char eve[];
extern char hostdomain[];
M port/sysfile.c => port/sysfile.c +3 -3
@@ 317,7 317,7 @@ sysread9p(ulong *arg)
if(dir && c->mnt)
n = unionread(c, (void*)arg[1], n);
- else if(devchar[c->type] != L'M')
+ else if(devtab[c->type]->dc != L'M')
n = devtab[c->type]->read(c, (void*)arg[1], n, c->offset);
else
n = mntread9p(c, (void*)arg[1], n, c->offset);
@@ 386,7 386,7 @@ syswrite9p(ulong *arg)
if(c->qid.path & CHDIR)
error(Eisdir);
- if(devchar[c->type] != L'M')
+ if(devtab[c->type]->dc != L'M')
n = devtab[c->type]->write(c, (void*)arg[1], arg[2], c->offset);
else
n = mntwrite9p(c, (void*)arg[1], arg[2], c->offset);
@@ 440,7 440,7 @@ sysseek(ulong *arg)
if(c->qid.path & CHDIR)
error(Eisdir);
- if(devchar[c->type] == '|')
+ if(devtab[c->type]->dc == '|')
error(Eisstream);
off = 0;
M port/sysproc.c => port/sysproc.c +1 -1
@@ 397,7 397,7 @@ sysexec(ulong *arg)
/*
* '/' processes are higher priority (hack to make /ip more responsive).
*/
- if(devchar[tc->type] == L'/')
+ if(devtab[tc->type]->dc == L'/')
up->basepri = PriRoot;
up->priority = up->basepri;
poperror();