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