xref: /plan9/sys/src/9/boot/paq.c (revision e288d156a88911460b465926f0fb6de139f6d766)
19a747e4fSDavid du Colombier #include <u.h>
29a747e4fSDavid du Colombier #include <libc.h>
39a747e4fSDavid du Colombier #include <../boot/boot.h>
49a747e4fSDavid du Colombier 
59a747e4fSDavid du Colombier char *fparts[] =
69a747e4fSDavid du Colombier {
79a747e4fSDavid du Colombier 	"add bootldr	0x0000000 0x0040000",
89a747e4fSDavid du Colombier 	"add params	0x0040000 0x0080000",
99a747e4fSDavid du Colombier 	"add kernel	0x0080000 0x0140000",
109a747e4fSDavid du Colombier 	"add user	0x0140000 0x0200000",
11*e288d156SDavid du Colombier 	"add ramdisk	0x0200000 0x0600000",
129a747e4fSDavid du Colombier };
139a747e4fSDavid du Colombier 
149a747e4fSDavid du Colombier void
configpaq(Method *)159a747e4fSDavid du Colombier configpaq(Method*)
169a747e4fSDavid du Colombier {
179a747e4fSDavid du Colombier 	int fd;
189a747e4fSDavid du Colombier 	int i;
199a747e4fSDavid du Colombier 
209a747e4fSDavid du Colombier 	if(bind("#F", "/dev", MAFTER) < 0)
219a747e4fSDavid du Colombier 		fatal("bind #c");
229a747e4fSDavid du Colombier 	if(bind("#p", "/proc", MREPL) < 0)
239a747e4fSDavid du Colombier 		fatal("bind #p");
249a747e4fSDavid du Colombier 	fd = open("/dev/flash/flashctl", OWRITE);
259a747e4fSDavid du Colombier 	if(fd < 0)
269a747e4fSDavid du Colombier 		fatal("opening flashctl");
279a747e4fSDavid du Colombier 	for(i = 0; i < nelem(fparts); i++)
289a747e4fSDavid du Colombier 		if(fprint(fd, fparts[i]) < 0)
299a747e4fSDavid du Colombier 			fatal(fparts[i]);
309a747e4fSDavid du Colombier 	close(fd);
319a747e4fSDavid du Colombier }
329a747e4fSDavid du Colombier 
339a747e4fSDavid du Colombier int
connectpaq(void)349a747e4fSDavid du Colombier connectpaq(void)
359a747e4fSDavid du Colombier {
369a747e4fSDavid du Colombier 	int  p[2];
379a747e4fSDavid du Colombier 	char **arg, **argp;
389a747e4fSDavid du Colombier 
399a747e4fSDavid du Colombier 	print("paq...");
409a747e4fSDavid du Colombier 	if(pipe(p)<0)
419a747e4fSDavid du Colombier 		fatal("pipe");
429a747e4fSDavid du Colombier 	switch(fork()){
439a747e4fSDavid du Colombier 	case -1:
449a747e4fSDavid du Colombier 		fatal("fork");
459a747e4fSDavid du Colombier 	case 0:
469a747e4fSDavid du Colombier 		arg = malloc(10*sizeof(char*));
479a747e4fSDavid du Colombier 		argp = arg;
489a747e4fSDavid du Colombier 		*argp++ = "paqfs";
499a747e4fSDavid du Colombier 		*argp++ = "-v";
509a747e4fSDavid du Colombier 		*argp++ = "-i";
519a747e4fSDavid du Colombier 		*argp++ = "/dev/flash/ramdisk";
529a747e4fSDavid du Colombier 		*argp = 0;
539a747e4fSDavid du Colombier 
549a747e4fSDavid du Colombier 		dup(p[0], 0);
559a747e4fSDavid du Colombier 		dup(p[1], 1);
569a747e4fSDavid du Colombier 		close(p[0]);
579a747e4fSDavid du Colombier 		close(p[1]);
586a9fc400SDavid du Colombier 		exec("/boot/paqfs", arg);
599a747e4fSDavid du Colombier 		fatal("can't exec paqfs");
609a747e4fSDavid du Colombier 	default:
619a747e4fSDavid du Colombier 		break;
629a747e4fSDavid du Colombier 	}
639a747e4fSDavid du Colombier 	waitpid();
649a747e4fSDavid du Colombier 
659a747e4fSDavid du Colombier 	close(p[1]);
669a747e4fSDavid du Colombier 	return p[0];
679a747e4fSDavid du Colombier }
68