xref: /plan9/sys/src/cmd/usb/disk/main.c (revision ba8542f7a64cb018d856de588f59d755d599b1d2)
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] [-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;
37 	char *ae;
38 	char *srv;
39 	char *mnt;
40 
41 	srv = nil;
42 	mnt = "/n/disk";
43 
44 	quotefmtinstall();
45 	ae = args+sizeof(args);
46 	as = seprint(args, ae, "disk");
47 	ARGBEGIN{
48 	case 'D':
49 		usbfsdebug++;
50 		break;
51 	case 'd':
52 		usbdebug++;
53 		as = seprint(as, ae, " -d");
54 		break;
55 	case 'm':
56 		mnt = EARGF(usage());
57 		break;
58 	case 's':
59 		srv = EARGF(usage());
60 	default:
61 		usage();
62 	}ARGEND
63 
64 	rfork(RFNOTEG);
65 	threadsetgrp(threadid());
66 	fmtinstall('U', Ufmt);
67 	usbfsinit(srv, mnt, &usbdirfs, MBEFORE);
68 	startdevs(args, argv, argc, matchdevcsp, csps, diskmain);
69 	threadexits(nil);
70 }
71