xref: /plan9/sys/src/cmd/usb/disk/main.c (revision fd362a73ff89ae80075dd82c9aad2a3468f0f3c9)
1906943f9SDavid du Colombier /*
2906943f9SDavid du Colombier  * usb/disk - usb mass storage file server
3906943f9SDavid du Colombier  */
4906943f9SDavid du Colombier #include <u.h>
5906943f9SDavid du Colombier #include <libc.h>
6906943f9SDavid du Colombier #include <fcall.h>
7906943f9SDavid du Colombier #include <thread.h>
8*fd362a73SDavid du Colombier #include <disk.h>
9906943f9SDavid du Colombier #include "scsireq.h"
10906943f9SDavid du Colombier #include "usb.h"
11906943f9SDavid du Colombier #include "usbfs.h"
12906943f9SDavid du Colombier #include "ums.h"
13906943f9SDavid du Colombier 
14906943f9SDavid du Colombier enum
15906943f9SDavid du Colombier {
16906943f9SDavid du Colombier 	Arglen = 80,
17906943f9SDavid du Colombier };
18906943f9SDavid du Colombier 
19906943f9SDavid du Colombier static void
usage(void)20906943f9SDavid du Colombier usage(void)
21906943f9SDavid du Colombier {
22ed868a7cSDavid du Colombier 	fprint(2, "usage: %s [-Dd] [-N nb] [-m mnt] [-s srv] [dev...]\n", argv0);
23906943f9SDavid du Colombier 	threadexitsall("usage");
24906943f9SDavid du Colombier }
25906943f9SDavid du Colombier 
26906943f9SDavid du Colombier static int csps[] = {
27906943f9SDavid du Colombier 	CSP(Clstorage,Subatapi,Protobulk),
28906943f9SDavid du Colombier 	CSP(Clstorage,Sub8070,Protobulk),
29906943f9SDavid du Colombier 	CSP(Clstorage,Subscsi,Protobulk),
30906943f9SDavid du Colombier 	0,
31906943f9SDavid du Colombier };
32906943f9SDavid du Colombier 
33906943f9SDavid du Colombier void
threadmain(int argc,char ** argv)34906943f9SDavid du Colombier threadmain(int argc, char **argv)
35906943f9SDavid du Colombier {
36906943f9SDavid du Colombier 	char args[Arglen];
37ed868a7cSDavid du Colombier 	char *as, *ae, *srv, *mnt;
38906943f9SDavid du Colombier 
39906943f9SDavid du Colombier 	srv = nil;
40906943f9SDavid du Colombier 	mnt = "/n/disk";
41906943f9SDavid du Colombier 
42906943f9SDavid du Colombier 	quotefmtinstall();
43906943f9SDavid du Colombier 	ae = args+sizeof(args);
44906943f9SDavid du Colombier 	as = seprint(args, ae, "disk");
45906943f9SDavid du Colombier 	ARGBEGIN{
46906943f9SDavid du Colombier 	case 'D':
47906943f9SDavid du Colombier 		usbfsdebug++;
48906943f9SDavid du Colombier 		break;
49906943f9SDavid du Colombier 	case 'd':
50906943f9SDavid du Colombier 		usbdebug++;
51906943f9SDavid du Colombier 		as = seprint(as, ae, " -d");
52906943f9SDavid du Colombier 		break;
53ed868a7cSDavid du Colombier 	case 'N':
54ed868a7cSDavid du Colombier 		as = seprint(as, ae, " -N %s", EARGF(usage()));
55ed868a7cSDavid du Colombier 		break;
56906943f9SDavid du Colombier 	case 'm':
57906943f9SDavid du Colombier 		mnt = EARGF(usage());
58906943f9SDavid du Colombier 		break;
59906943f9SDavid du Colombier 	case 's':
60906943f9SDavid du Colombier 		srv = EARGF(usage());
6113b40997SDavid du Colombier 		break;
62906943f9SDavid du Colombier 	default:
63906943f9SDavid du Colombier 		usage();
64906943f9SDavid du Colombier 	}ARGEND
65906943f9SDavid du Colombier 
66906943f9SDavid du Colombier 	rfork(RFNOTEG);
67906943f9SDavid du Colombier 	threadsetgrp(threadid());
68906943f9SDavid du Colombier 	fmtinstall('U', Ufmt);
69906943f9SDavid du Colombier 	usbfsinit(srv, mnt, &usbdirfs, MBEFORE);
70906943f9SDavid du Colombier 	startdevs(args, argv, argc, matchdevcsp, csps, diskmain);
71906943f9SDavid du Colombier 	threadexits(nil);
72906943f9SDavid du Colombier }
73