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 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 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