xref: /plan9/sys/src/cmd/usb/disk/main.c (revision 906943f9f6b8411972abb5e3a03ed19f74be7ccc)
1*906943f9SDavid du Colombier /*
2*906943f9SDavid du Colombier  * usb/disk - usb mass storage file server
3*906943f9SDavid du Colombier  */
4*906943f9SDavid du Colombier #include <u.h>
5*906943f9SDavid du Colombier #include <libc.h>
6*906943f9SDavid du Colombier #include <fcall.h>
7*906943f9SDavid du Colombier #include <thread.h>
8*906943f9SDavid du Colombier #include "scsireq.h"
9*906943f9SDavid du Colombier #include "usb.h"
10*906943f9SDavid du Colombier #include "usbfs.h"
11*906943f9SDavid du Colombier #include "ums.h"
12*906943f9SDavid du Colombier 
13*906943f9SDavid du Colombier enum
14*906943f9SDavid du Colombier {
15*906943f9SDavid du Colombier 	Arglen = 80,
16*906943f9SDavid du Colombier };
17*906943f9SDavid du Colombier 
18*906943f9SDavid du Colombier static void
19*906943f9SDavid du Colombier usage(void)
20*906943f9SDavid du Colombier {
21*906943f9SDavid du Colombier 	fprint(2, "usage: %s [-Dd] [-m mnt] [-s srv] [dev...]\n", argv0);
22*906943f9SDavid du Colombier 	threadexitsall("usage");
23*906943f9SDavid du Colombier }
24*906943f9SDavid du Colombier 
25*906943f9SDavid du Colombier static int csps[] = {
26*906943f9SDavid du Colombier 	CSP(Clstorage,Subatapi,Protobulk),
27*906943f9SDavid du Colombier 	CSP(Clstorage,Sub8070,Protobulk),
28*906943f9SDavid du Colombier 	CSP(Clstorage,Subscsi,Protobulk),
29*906943f9SDavid du Colombier 	0,
30*906943f9SDavid du Colombier };
31*906943f9SDavid du Colombier 
32*906943f9SDavid du Colombier void
33*906943f9SDavid du Colombier threadmain(int argc, char **argv)
34*906943f9SDavid du Colombier {
35*906943f9SDavid du Colombier 	char args[Arglen];
36*906943f9SDavid du Colombier 	char *as;
37*906943f9SDavid du Colombier 	char *ae;
38*906943f9SDavid du Colombier 	char *srv;
39*906943f9SDavid du Colombier 	char *mnt;
40*906943f9SDavid du Colombier 
41*906943f9SDavid du Colombier 	srv = nil;
42*906943f9SDavid du Colombier 	mnt = "/n/disk";
43*906943f9SDavid du Colombier 
44*906943f9SDavid du Colombier 	quotefmtinstall();
45*906943f9SDavid du Colombier 	ae = args+sizeof(args);
46*906943f9SDavid du Colombier 	as = seprint(args, ae, "disk");
47*906943f9SDavid du Colombier 	ARGBEGIN{
48*906943f9SDavid du Colombier 	case 'D':
49*906943f9SDavid du Colombier 		usbfsdebug++;
50*906943f9SDavid du Colombier 		break;
51*906943f9SDavid du Colombier 	case 'd':
52*906943f9SDavid du Colombier 		usbdebug++;
53*906943f9SDavid du Colombier 		as = seprint(as, ae, " -d");
54*906943f9SDavid du Colombier 		break;
55*906943f9SDavid du Colombier 	case 'm':
56*906943f9SDavid du Colombier 		mnt = EARGF(usage());
57*906943f9SDavid du Colombier 		break;
58*906943f9SDavid du Colombier 	case 's':
59*906943f9SDavid du Colombier 		srv = EARGF(usage());
60*906943f9SDavid du Colombier 	default:
61*906943f9SDavid du Colombier 		usage();
62*906943f9SDavid du Colombier 	}ARGEND
63*906943f9SDavid du Colombier 
64*906943f9SDavid du Colombier 	rfork(RFNOTEG);
65*906943f9SDavid du Colombier 	threadsetgrp(threadid());
66*906943f9SDavid du Colombier 	fmtinstall('U', Ufmt);
67*906943f9SDavid du Colombier 	usbfsinit(srv, mnt, &usbdirfs, MBEFORE);
68*906943f9SDavid du Colombier 	startdevs(args, argv, argc, matchdevcsp, csps, diskmain);
69*906943f9SDavid du Colombier 	threadexits(nil);
70*906943f9SDavid du Colombier }
71