M pc/devi82365.c => pc/devi82365.c +31 -5
@@ 151,6 151,7 @@ struct Slot
uchar busy;
/* cis info */
+ uchar verstr[512]; /* version string */
uchar vpp1;
uchar vpp2;
uchar bit16;
@@ 379,24 380,24 @@ decrefp(Slot *pp)
qunlock(pp->cp);
}
-int
+char*
pcmspecial(int dev)
{
Slot *pp;
i82365reset();
if(dev >= nslot)
- return -1;
+ return 0;
pp = slot + dev;
if(pp->special)
- return -1;
+ return 0;
increfp(pp);
if(!pp->occupied){
decrefp(pp);
- return -1;
+ return 0;
}
pp->special = 1;
- return 0;
+ return pp->verstr;
}
void
@@ 850,9 851,11 @@ pcmio(int dev, ISAConf *isa)
*/
static void tcfig(Slot*, int);
static void tentry(Slot*, int);
+static void tvers1(Slot*, int);
static void (*parse[256])(Slot*, int) =
{
+[0x15] tvers1,
[0x1A] tcfig,
[0x1B] tentry,
};
@@ 1159,3 1162,26 @@ tentry(Slot *pp, int ttype)
}
pp->configed++;
}
+
+void
+tvers1(Slot *pp, int ttype)
+{
+ uchar c, major, minor;
+ int i;
+
+ USED(ttype);
+ if(readc(pp, &major) != 1)
+ return;
+ if(readc(pp, &minor) != 1)
+ return;
+ for(i = 0; i < sizeof(pp->verstr)-1; i++){
+ if(readc(&c) != 1)
+ return;
+ if(c == 0)
+ c = '\n';
+ if(c == 0xff)
+ break;
+ pp->verstr[i] = c;
+ }
+ pp->verstr[i] = 0;
+}
M pc/fns.h => pc/fns.h +1 -1
@@ 62,7 62,7 @@ void outsl(int, void*, int);
void pcicreset(void);
int pcmio(int, ISAConf*);
long pcmread(int, int, void*, long, ulong);
-int pcmspecial(int);
+char* pcmspecial(int);
void pcmspecialclose(int);
long pcmwrite(int, int, void*, long, ulong);
void prflush(void);