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