1*906943f9SDavid du Colombier /* 2*906943f9SDavid du Colombier * usb/ether - usb ethernet adapter. 3*906943f9SDavid du Colombier * BUG: This should use /dev/etherfile to 4*906943f9SDavid du Colombier * use the kernel ether device code. 5*906943f9SDavid du Colombier */ 6*906943f9SDavid du Colombier #include <u.h> 7*906943f9SDavid du Colombier #include <libc.h> 8*906943f9SDavid du Colombier #include <fcall.h> 9*906943f9SDavid du Colombier #include <thread.h> 10*906943f9SDavid du Colombier #include "usb.h" 11*906943f9SDavid du Colombier #include "usbfs.h" 12*906943f9SDavid du Colombier #include "ether.h" 13*906943f9SDavid du Colombier 14*906943f9SDavid du Colombier enum 15*906943f9SDavid du Colombier { 16*906943f9SDavid du Colombier Arglen = 80, 17*906943f9SDavid du Colombier }; 18*906943f9SDavid du Colombier 19*906943f9SDavid du Colombier static void 20*906943f9SDavid du Colombier usage(void) 21*906943f9SDavid du Colombier { 22*906943f9SDavid du Colombier fprint(2, "usage: %s [-Dd] [-m mnt] [-s srv] [dev...]\n", argv0); 23*906943f9SDavid du Colombier threadexitsall("usage"); 24*906943f9SDavid du Colombier } 25*906943f9SDavid du Colombier 26*906943f9SDavid du Colombier /* 27*906943f9SDavid du Colombier * Ether devices may be weird. 28*906943f9SDavid du Colombier * Be optimistic and try to use any communication 29*906943f9SDavid du Colombier * device or one of the `vendor specific class' devices 30*906943f9SDavid du Colombier * that we know are ethernets. 31*906943f9SDavid du Colombier */ 32*906943f9SDavid du Colombier static int 33*906943f9SDavid du Colombier matchether(char *info, void*) 34*906943f9SDavid du Colombier { 35*906943f9SDavid du Colombier Cinfo *ip; 36*906943f9SDavid du Colombier char buf[50]; 37*906943f9SDavid du Colombier 38*906943f9SDavid du Colombier /* 39*906943f9SDavid du Colombier * I have an ether reporting comms.0.0 40*906943f9SDavid du Colombier */ 41*906943f9SDavid du Colombier if(strstr(info, "comms") != nil) 42*906943f9SDavid du Colombier return 0; 43*906943f9SDavid du Colombier for(ip = cinfo; ip->vid != 0; ip++){ 44*906943f9SDavid du Colombier snprint(buf, sizeof(buf), "vid %#06x did %#06x", ip->vid, ip->did); 45*906943f9SDavid du Colombier if(strstr(info, buf) != nil) 46*906943f9SDavid du Colombier return 0; 47*906943f9SDavid du Colombier } 48*906943f9SDavid du Colombier return -1; 49*906943f9SDavid du Colombier } 50*906943f9SDavid du Colombier 51*906943f9SDavid du Colombier void 52*906943f9SDavid du Colombier threadmain(int argc, char **argv) 53*906943f9SDavid du Colombier { 54*906943f9SDavid du Colombier char args[Arglen]; 55*906943f9SDavid du Colombier char *as; 56*906943f9SDavid du Colombier char *ae; 57*906943f9SDavid du Colombier char *srv; 58*906943f9SDavid du Colombier char *mnt; 59*906943f9SDavid du Colombier 60*906943f9SDavid du Colombier srv = nil; 61*906943f9SDavid du Colombier mnt = "/net"; 62*906943f9SDavid du Colombier 63*906943f9SDavid du Colombier quotefmtinstall(); 64*906943f9SDavid du Colombier ae = args+sizeof(args); 65*906943f9SDavid du Colombier as = seprint(args, ae, "ether"); 66*906943f9SDavid du Colombier ARGBEGIN{ 67*906943f9SDavid du Colombier case 'D': 68*906943f9SDavid du Colombier usbfsdebug++; 69*906943f9SDavid du Colombier break; 70*906943f9SDavid du Colombier case 'd': 71*906943f9SDavid du Colombier usbdebug++; 72*906943f9SDavid du Colombier as = seprint(as, ae, " -d"); 73*906943f9SDavid du Colombier break; 74*906943f9SDavid du Colombier case 'm': 75*906943f9SDavid du Colombier mnt = EARGF(usage()); 76*906943f9SDavid du Colombier break; 77*906943f9SDavid du Colombier case 's': 78*906943f9SDavid du Colombier srv = EARGF(usage()); 79*906943f9SDavid du Colombier default: 80*906943f9SDavid du Colombier usage(); 81*906943f9SDavid du Colombier }ARGEND 82*906943f9SDavid du Colombier 83*906943f9SDavid du Colombier rfork(RFNOTEG); 84*906943f9SDavid du Colombier threadsetgrp(threadid()); 85*906943f9SDavid du Colombier fmtinstall('U', Ufmt); 86*906943f9SDavid du Colombier usbfsinit(srv, mnt, &usbdirfs, MAFTER|MCREATE); 87*906943f9SDavid du Colombier startdevs(args, argv, argc, matchether, nil, ethermain); 88*906943f9SDavid du Colombier threadexits(nil); 89*906943f9SDavid du Colombier } 90