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