xref: /plan9-contrib/sys/src/9k/port/devtab.c (revision 9ef1f84b659abcb917c5c090acbce0772e494f21)
1*9ef1f84bSDavid du Colombier /*
2*9ef1f84bSDavid du Colombier  * Stub.
3*9ef1f84bSDavid du Colombier  */
4*9ef1f84bSDavid du Colombier #include "u.h"
5*9ef1f84bSDavid du Colombier #include "../port/lib.h"
6*9ef1f84bSDavid du Colombier #include "mem.h"
7*9ef1f84bSDavid du Colombier #include "dat.h"
8*9ef1f84bSDavid du Colombier #include "fns.h"
9*9ef1f84bSDavid du Colombier #include "../port/error.h"
10*9ef1f84bSDavid du Colombier 
11*9ef1f84bSDavid du Colombier extern Dev* devtab[];
12*9ef1f84bSDavid du Colombier 
13*9ef1f84bSDavid du Colombier void
devtabreset(void)14*9ef1f84bSDavid du Colombier devtabreset(void)
15*9ef1f84bSDavid du Colombier {
16*9ef1f84bSDavid du Colombier 	int i;
17*9ef1f84bSDavid du Colombier 
18*9ef1f84bSDavid du Colombier 	for(i = 0; devtab[i] != nil; i++)
19*9ef1f84bSDavid du Colombier 		devtab[i]->reset();
20*9ef1f84bSDavid du Colombier }
21*9ef1f84bSDavid du Colombier 
22*9ef1f84bSDavid du Colombier void
devtabinit(void)23*9ef1f84bSDavid du Colombier devtabinit(void)
24*9ef1f84bSDavid du Colombier {
25*9ef1f84bSDavid du Colombier 	int i;
26*9ef1f84bSDavid du Colombier 
27*9ef1f84bSDavid du Colombier 	for(i = 0; devtab[i] != nil; i++)
28*9ef1f84bSDavid du Colombier 		devtab[i]->init();
29*9ef1f84bSDavid du Colombier }
30*9ef1f84bSDavid du Colombier 
31*9ef1f84bSDavid du Colombier void
devtabshutdown(void)32*9ef1f84bSDavid du Colombier devtabshutdown(void)
33*9ef1f84bSDavid du Colombier {
34*9ef1f84bSDavid du Colombier 	int i;
35*9ef1f84bSDavid du Colombier 
36*9ef1f84bSDavid du Colombier 	/*
37*9ef1f84bSDavid du Colombier 	 * Shutdown in reverse order.
38*9ef1f84bSDavid du Colombier 	 */
39*9ef1f84bSDavid du Colombier 	for(i = 0; devtab[i] != nil; i++)
40*9ef1f84bSDavid du Colombier 		;
41*9ef1f84bSDavid du Colombier 	for(i--; i >= 0; i--)
42*9ef1f84bSDavid du Colombier 		devtab[i]->shutdown();
43*9ef1f84bSDavid du Colombier }
44*9ef1f84bSDavid du Colombier 
45*9ef1f84bSDavid du Colombier 
46*9ef1f84bSDavid du Colombier Dev*
devtabget(int dc,int user)47*9ef1f84bSDavid du Colombier devtabget(int dc, int user)
48*9ef1f84bSDavid du Colombier {
49*9ef1f84bSDavid du Colombier 	int i;
50*9ef1f84bSDavid du Colombier 
51*9ef1f84bSDavid du Colombier 	for(i = 0; devtab[i] != nil; i++){
52*9ef1f84bSDavid du Colombier 		if(devtab[i]->dc == dc)
53*9ef1f84bSDavid du Colombier 			return devtab[i];
54*9ef1f84bSDavid du Colombier 	}
55*9ef1f84bSDavid du Colombier 
56*9ef1f84bSDavid du Colombier 	if(user == 0)
57*9ef1f84bSDavid du Colombier 		panic("devtabget %C\n", dc);
58*9ef1f84bSDavid du Colombier 
59*9ef1f84bSDavid du Colombier 	return nil;
60*9ef1f84bSDavid du Colombier }
61*9ef1f84bSDavid du Colombier 
62*9ef1f84bSDavid du Colombier long
devtabread(Chan *,void * buf,long n,vlong off)63*9ef1f84bSDavid du Colombier devtabread(Chan*, void* buf, long n, vlong off)
64*9ef1f84bSDavid du Colombier {
65*9ef1f84bSDavid du Colombier 	int i;
66*9ef1f84bSDavid du Colombier 	Dev *dev;
67*9ef1f84bSDavid du Colombier 	char *alloc, *e, *p;
68*9ef1f84bSDavid du Colombier 
69*9ef1f84bSDavid du Colombier 	alloc = malloc(READSTR);
70*9ef1f84bSDavid du Colombier 	if(alloc == nil)
71*9ef1f84bSDavid du Colombier 		error(Enomem);
72*9ef1f84bSDavid du Colombier 
73*9ef1f84bSDavid du Colombier 	p = alloc;
74*9ef1f84bSDavid du Colombier 	e = p + READSTR;
75*9ef1f84bSDavid du Colombier 	for(i = 0; devtab[i] != nil; i++){
76*9ef1f84bSDavid du Colombier 		dev = devtab[i];
77*9ef1f84bSDavid du Colombier 		p = seprint(p, e, "#%C %s\n", dev->dc, dev->name);
78*9ef1f84bSDavid du Colombier 	}
79*9ef1f84bSDavid du Colombier 
80*9ef1f84bSDavid du Colombier 	if(waserror()){
81*9ef1f84bSDavid du Colombier 		free(alloc);
82*9ef1f84bSDavid du Colombier 		nexterror();
83*9ef1f84bSDavid du Colombier 	}
84*9ef1f84bSDavid du Colombier 	n = readstr(off, buf, n, alloc);
85*9ef1f84bSDavid du Colombier 	free(alloc);
86*9ef1f84bSDavid du Colombier 	poperror();
87*9ef1f84bSDavid du Colombier 
88*9ef1f84bSDavid du Colombier 	return n;
89*9ef1f84bSDavid du Colombier }
90