xref: /plan9-contrib/sys/src/9k/boot/paq.c (revision 9ef1f84b659abcb917c5c090acbce0772e494f21)
1*9ef1f84bSDavid du Colombier #include <u.h>
2*9ef1f84bSDavid du Colombier #include <libc.h>
3*9ef1f84bSDavid du Colombier #include <../boot/boot.h>
4*9ef1f84bSDavid du Colombier 
5*9ef1f84bSDavid du Colombier char *fparts[] =
6*9ef1f84bSDavid du Colombier {
7*9ef1f84bSDavid du Colombier 	"add bootldr	0x0000000 0x0040000",
8*9ef1f84bSDavid du Colombier 	"add params	0x0040000 0x0080000",
9*9ef1f84bSDavid du Colombier 	"add kernel	0x0080000 0x0140000",
10*9ef1f84bSDavid du Colombier 	"add user	0x0140000 0x0200000",
11*9ef1f84bSDavid du Colombier 	"add ramdisk	0x0200000 0x0600000",
12*9ef1f84bSDavid du Colombier };
13*9ef1f84bSDavid du Colombier 
14*9ef1f84bSDavid du Colombier void
configpaq(Method *)15*9ef1f84bSDavid du Colombier configpaq(Method*)
16*9ef1f84bSDavid du Colombier {
17*9ef1f84bSDavid du Colombier 	int fd;
18*9ef1f84bSDavid du Colombier 	int i;
19*9ef1f84bSDavid du Colombier 
20*9ef1f84bSDavid du Colombier 	if(bind("#F", "/dev", MAFTER) < 0)
21*9ef1f84bSDavid du Colombier 		fatal("bind #c");
22*9ef1f84bSDavid du Colombier 	if(bind("#p", "/proc", MREPL) < 0)
23*9ef1f84bSDavid du Colombier 		fatal("bind #p");
24*9ef1f84bSDavid du Colombier 	fd = open("/dev/flash/flashctl", OWRITE);
25*9ef1f84bSDavid du Colombier 	if(fd < 0)
26*9ef1f84bSDavid du Colombier 		fatal("opening flashctl");
27*9ef1f84bSDavid du Colombier 	for(i = 0; i < nelem(fparts); i++)
28*9ef1f84bSDavid du Colombier 		if(fprint(fd, fparts[i]) < 0)
29*9ef1f84bSDavid du Colombier 			fatal(fparts[i]);
30*9ef1f84bSDavid du Colombier 	close(fd);
31*9ef1f84bSDavid du Colombier }
32*9ef1f84bSDavid du Colombier 
33*9ef1f84bSDavid du Colombier int
connectpaq(void)34*9ef1f84bSDavid du Colombier connectpaq(void)
35*9ef1f84bSDavid du Colombier {
36*9ef1f84bSDavid du Colombier 	int  p[2];
37*9ef1f84bSDavid du Colombier 	char **arg, **argp;
38*9ef1f84bSDavid du Colombier 
39*9ef1f84bSDavid du Colombier 	print("paq...");
40*9ef1f84bSDavid du Colombier 	if(pipe(p)<0)
41*9ef1f84bSDavid du Colombier 		fatal("pipe");
42*9ef1f84bSDavid du Colombier 	switch(fork()){
43*9ef1f84bSDavid du Colombier 	case -1:
44*9ef1f84bSDavid du Colombier 		fatal("fork");
45*9ef1f84bSDavid du Colombier 	case 0:
46*9ef1f84bSDavid du Colombier 		arg = malloc(10*sizeof(char*));
47*9ef1f84bSDavid du Colombier 		argp = arg;
48*9ef1f84bSDavid du Colombier 		*argp++ = "paqfs";
49*9ef1f84bSDavid du Colombier 		*argp++ = "-v";
50*9ef1f84bSDavid du Colombier 		*argp++ = "-i";
51*9ef1f84bSDavid du Colombier 		*argp++ = "/dev/flash/ramdisk";
52*9ef1f84bSDavid du Colombier 		*argp = 0;
53*9ef1f84bSDavid du Colombier 
54*9ef1f84bSDavid du Colombier 		dup(p[0], 0);
55*9ef1f84bSDavid du Colombier 		dup(p[1], 1);
56*9ef1f84bSDavid du Colombier 		close(p[0]);
57*9ef1f84bSDavid du Colombier 		close(p[1]);
58*9ef1f84bSDavid du Colombier 		exec("/boot/paqfs", arg);
59*9ef1f84bSDavid du Colombier 		fatal("can't exec paqfs");
60*9ef1f84bSDavid du Colombier 	default:
61*9ef1f84bSDavid du Colombier 		break;
62*9ef1f84bSDavid du Colombier 	}
63*9ef1f84bSDavid du Colombier 	waitpid();
64*9ef1f84bSDavid du Colombier 
65*9ef1f84bSDavid du Colombier 	close(p[1]);
66*9ef1f84bSDavid du Colombier 	return p[0];
67*9ef1f84bSDavid du Colombier }
68