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