CDCEther.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:44k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. // Portions of this file taken from 
  2. // Petko Manolov - Petkan (petkan@dce.bg)
  3. // from his driver pegasus.c
  4. /*
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or
  8.  * (at your option) any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  18.  */
  19. #include <linux/sched.h>
  20. #include <linux/slab.h>
  21. #include <linux/init.h>
  22. #include <linux/delay.h>
  23. #include <linux/netdevice.h>
  24. #include <linux/etherdevice.h>
  25. #include <linux/usb.h>
  26. #include <linux/module.h>
  27. #include "CDCEther.h"
  28. static const char *version = __FILE__ ": v0.98.5 22 Sep 2001 Brad Hards and another";
  29. /* Take any CDC device, and sort it out in probe() */
  30. static struct usb_device_id CDCEther_ids[] = {
  31. { USB_DEVICE_INFO(USB_CLASS_COMM, 0, 0) },
  32. { } /* Terminating null entry */
  33. };
  34. /* 
  35.  * module parameter that provides an alternate upper limit on the 
  36.  * number of multicast filters we use, with a default to use all
  37.  * the filters available to us. Note that the actual number used
  38.  * is the lesser of this parameter and the number returned in the
  39.  * descriptor for the particular device. See Table 41 of the CDC
  40.  * spec for more info on the descriptor limit.
  41.  */
  42. static int multicast_filter_limit = 32767;
  43. //////////////////////////////////////////////////////////////////////////////
  44. // Callback routines from USB device /////////////////////////////////////////
  45. //////////////////////////////////////////////////////////////////////////////
  46. static void read_bulk_callback( struct urb *urb )
  47. {
  48. ether_dev_t *ether_dev = urb->context;
  49. struct net_device *net;
  50. int count = urb->actual_length, res;
  51. struct sk_buff *skb;
  52. // Sanity check 
  53. if ( !ether_dev || !(ether_dev->flags & CDC_ETHER_RUNNING) ) {
  54. dbg("BULK IN callback but driver is not active!");
  55. return;
  56. }
  57. net = ether_dev->net;
  58. if ( !netif_device_present(net) ) {
  59. // Somebody killed our network interface...
  60. return;
  61. }
  62. if ( ether_dev->flags & CDC_ETHER_RX_BUSY ) {
  63. // Are we already trying to receive a frame???
  64. ether_dev->stats.rx_errors++;
  65. dbg("ether_dev Rx busy");
  66. return;
  67. }
  68. // We are busy, leave us alone!
  69. ether_dev->flags |= CDC_ETHER_RX_BUSY;
  70. switch ( urb->status ) {
  71. case USB_ST_NOERROR:
  72. break;
  73. case USB_ST_NORESPONSE:
  74. dbg( "no repsonse in BULK IN" );
  75. ether_dev->flags &= ~CDC_ETHER_RX_BUSY;
  76. break;
  77. default:
  78. dbg( "%s: RX status %d", net->name, urb->status );
  79. goto goon;
  80. }
  81. // Check to make sure we got some data...
  82. if ( !count ) {
  83. // We got no data!!!
  84. goto goon;
  85. }
  86. // Tell the kernel we want some memory
  87. if ( !(skb = dev_alloc_skb(count)) ) {
  88. // We got no receive buffer.
  89. goto goon;
  90. }
  91. // Here's where it came from
  92. skb->dev = net;
  93. // Now we copy it over
  94. eth_copy_and_sum(skb, ether_dev->rx_buff, count, 0);
  95. // Not sure
  96. skb_put(skb, count);
  97. // Not sure here either
  98. skb->protocol = eth_type_trans(skb, net);
  99. // Ship it off to the kernel
  100. netif_rx(skb);
  101. // update out statistics
  102. ether_dev->stats.rx_packets++;
  103. ether_dev->stats.rx_bytes += count;
  104. goon:
  105. // Prep the USB to wait for another frame
  106. FILL_BULK_URB( &ether_dev->rx_urb, ether_dev->usb,
  107. usb_rcvbulkpipe(ether_dev->usb, ether_dev->data_ep_in),
  108. ether_dev->rx_buff, ether_dev->wMaxSegmentSize, 
  109. read_bulk_callback, ether_dev );
  110. // Give this to the USB subsystem so it can tell us 
  111. // when more data arrives.
  112. if ( (res = usb_submit_urb(&ether_dev->rx_urb)) ) {
  113. warn( __FUNCTION__ " failed submint rx_urb %d", res);
  114. }
  115. // We are no longer busy, show us the frames!!!
  116. ether_dev->flags &= ~CDC_ETHER_RX_BUSY;
  117. }
  118. static void write_bulk_callback( struct urb *urb )
  119. {
  120. ether_dev_t *ether_dev = urb->context;
  121. // Sanity check
  122. if ( !ether_dev || !(ether_dev->flags & CDC_ETHER_RUNNING) ) {
  123. // We are insane!!!
  124. err( "write_bulk_callback: device not running" );
  125. return;
  126. }
  127. // Do we still have a valid kernel network device?
  128. if ( !netif_device_present(ether_dev->net) ) {
  129. // Someone killed our network interface.
  130. err( "write_bulk_callback: net device not present" );
  131. return;
  132. }
  133. // Hmm...  What on Earth could have happened???
  134. if ( urb->status ) {
  135. info("%s: TX status %d", ether_dev->net->name, urb->status);
  136. }
  137. // Update the network interface and tell it we are
  138. // ready for another frame
  139. ether_dev->net->trans_start = jiffies;
  140. netif_wake_queue( ether_dev->net );
  141. }
  142. //static void intr_callback( struct urb *urb )
  143. //{
  144. // ether_dev_t *ether_dev = urb->context;
  145. // struct net_device *net;
  146. // __u8 *d;
  147. //
  148. // if ( !ether_dev )
  149. // return;
  150. //
  151. // switch ( urb->status ) {
  152. // case USB_ST_NOERROR:
  153. // break;
  154. // case USB_ST_URB_KILLED:
  155. // return;
  156. // default:
  157. // info("intr status %d", urb->status);
  158. // }
  159. //
  160. // d = urb->transfer_buffer;
  161. // net = ether_dev->net;
  162. // if ( d[0] & 0xfc ) {
  163. // ether_dev->stats.tx_errors++;
  164. // if ( d[0] & TX_UNDERRUN )
  165. // ether_dev->stats.tx_fifo_errors++;
  166. // if ( d[0] & (EXCESSIVE_COL | JABBER_TIMEOUT) )
  167. // ether_dev->stats.tx_aborted_errors++;
  168. // if ( d[0] & LATE_COL )
  169. // ether_dev->stats.tx_window_errors++;
  170. // if ( d[0] & (NO_CARRIER | LOSS_CARRIER) )
  171. // ether_dev->stats.tx_carrier_errors++;
  172. // }
  173. //}
  174. //////////////////////////////////////////////////////////////////////////////
  175. // Routines for turning net traffic on and off on the USB side ///////////////
  176. //////////////////////////////////////////////////////////////////////////////
  177. static inline int enable_net_traffic( ether_dev_t *ether_dev )
  178. {
  179. struct usb_device *usb = ether_dev->usb;
  180. // Here would be the time to set the data interface to the configuration where
  181. // it has two endpoints that use a protocol we can understand.
  182. if (usb_set_interface( usb, 
  183.                         ether_dev->data_bInterfaceNumber, 
  184.                         ether_dev->data_bAlternateSetting_with_traffic ) )  {
  185. err("usb_set_interface() failed" );
  186. err("Attempted to set interface %d", ether_dev->data_bInterfaceNumber);
  187. err("To alternate setting       %d", ether_dev->data_bAlternateSetting_with_traffic);
  188. return -1;
  189. }
  190. return 0;
  191. }
  192. static inline void disable_net_traffic( ether_dev_t *ether_dev )
  193. {
  194. // The thing to do is to set the data interface to the alternate setting that has
  195. // no endpoints.  This is what the spec suggests.
  196. if (ether_dev->data_interface_altset_num_without_traffic >= 0 ) {
  197. if (usb_set_interface( ether_dev->usb, 
  198.                         ether_dev->data_bInterfaceNumber, 
  199.                         ether_dev->data_bAlternateSetting_without_traffic ) )  {
  200. err("usb_set_interface() failed");
  201. }
  202. } else {
  203. // Some devices just may not support this...
  204. warn("No way to disable net traffic");
  205. }
  206. }
  207. //////////////////////////////////////////////////////////////////////////////
  208. // Callback routines for kernel Ethernet Device //////////////////////////////
  209. //////////////////////////////////////////////////////////////////////////////
  210. static void CDCEther_tx_timeout( struct net_device *net )
  211. {
  212. ether_dev_t *ether_dev = net->priv;
  213. // Sanity check
  214. if ( !ether_dev ) {
  215. // Seems to be a case of insanity here
  216. return;
  217. }
  218. // Tell syslog we are hosed.
  219. warn("%s: Tx timed out.", net->name);
  220. // Tear the waiting frame off the list
  221. ether_dev->tx_urb.transfer_flags |= USB_ASYNC_UNLINK;
  222. usb_unlink_urb( &ether_dev->tx_urb );
  223. // Update statistics
  224. ether_dev->stats.tx_errors++;
  225. }
  226. static int CDCEther_start_xmit( struct sk_buff *skb, struct net_device *net )
  227. {
  228. ether_dev_t *ether_dev = net->priv;
  229. int  count;
  230. int  res;
  231. // If we are told to transmit an ethernet frame that fits EXACTLY 
  232. // into an integer number of USB packets, we force it to send one 
  233. // more byte so the device will get a runt USB packet signalling the 
  234. // end of the ethernet frame
  235. if ( (skb->len) ^ (ether_dev->data_ep_out_size) ) {
  236. // It was not an exact multiple
  237. // no need to add anything extra
  238. count = skb->len;
  239. } else {
  240. // Add one to make it NOT an exact multiple
  241. count = skb->len + 1;
  242. }
  243. // Tell the kernel, "No more frames 'til we are done
  244. // with this one.'
  245. netif_stop_queue( net );
  246. // Copy it from kernel memory to OUR memory
  247. memcpy(ether_dev->tx_buff, skb->data, skb->len);
  248. // Fill in the URB for shipping it out.
  249. FILL_BULK_URB( &ether_dev->tx_urb, ether_dev->usb,
  250. usb_sndbulkpipe(ether_dev->usb, ether_dev->data_ep_out),
  251. ether_dev->tx_buff, ether_dev->wMaxSegmentSize, 
  252. write_bulk_callback, ether_dev );
  253. // Tell the URB how much it will be transporting today
  254. ether_dev->tx_urb.transfer_buffer_length = count;
  255. // Send the URB on its merry way.
  256. if ((res = usb_submit_urb(&ether_dev->tx_urb)))  {
  257. // Hmm...  It didn't go. Tell someone...
  258. warn("failed tx_urb %d", res);
  259. // update some stats...
  260. ether_dev->stats.tx_errors++;
  261. // and tell the kernel to give us another.
  262. // Maybe we'll get it right next time.
  263. netif_start_queue( net );
  264. } else {
  265. // Okay, it went out.
  266. // Update statistics
  267. ether_dev->stats.tx_packets++;
  268. ether_dev->stats.tx_bytes += skb->len;
  269. // And tell the kernel when the last transmit occurred.
  270. net->trans_start = jiffies;
  271. }
  272. // We are done with the kernel's memory
  273. dev_kfree_skb(skb);
  274. // We are done here.
  275. return 0;
  276. }
  277. static struct net_device_stats *CDCEther_netdev_stats( struct net_device *net )
  278. {
  279. // Easy enough!
  280. return &((ether_dev_t *)net->priv)->stats;
  281. }
  282. static int CDCEther_open(struct net_device *net)
  283. {
  284. ether_dev_t *ether_dev = (ether_dev_t *)net->priv;
  285. int res;
  286. // Turn on the USB and let the packets flow!!!
  287. if ( (res = enable_net_traffic( ether_dev )) ) {
  288. err( __FUNCTION__ "can't enable_net_traffic() - %d", res );
  289. return -EIO;
  290. }
  291. // Prep a receive URB
  292. FILL_BULK_URB( &ether_dev->rx_urb, ether_dev->usb,
  293. usb_rcvbulkpipe(ether_dev->usb, ether_dev->data_ep_in),
  294. ether_dev->rx_buff, ether_dev->wMaxSegmentSize, 
  295. read_bulk_callback, ether_dev );
  296. // Put it out there so the device can send us stuff
  297. if ( (res = usb_submit_urb(&ether_dev->rx_urb)) )
  298. {
  299. // Hmm...  Okay...
  300. warn( __FUNCTION__ " failed rx_urb %d", res );
  301. }
  302. // Tell the kernel we are ready to start receiving from it
  303. netif_start_queue( net );
  304. // We are up and running.
  305. ether_dev->flags |= CDC_ETHER_RUNNING;
  306. // Let's get ready to move frames!!!
  307. return 0;
  308. }
  309. static int CDCEther_close( struct net_device *net )
  310. {
  311. ether_dev_t *ether_dev = net->priv;
  312. // We are no longer running.
  313. ether_dev->flags &= ~CDC_ETHER_RUNNING;
  314. // Tell the kernel to stop sending us stuff
  315. netif_stop_queue( net );
  316. // If we are not already unplugged, turn off USB
  317. // traffic
  318. if ( !(ether_dev->flags & CDC_ETHER_UNPLUG) ) {
  319. disable_net_traffic( ether_dev );
  320. }
  321. // We don't need the URBs anymore.
  322. usb_unlink_urb( &ether_dev->rx_urb );
  323. usb_unlink_urb( &ether_dev->tx_urb );
  324. usb_unlink_urb( &ether_dev->intr_urb );
  325. // That's it.  I'm done.
  326. return 0;
  327. }
  328. static int CDCEther_ioctl( struct net_device *net, struct ifreq *rq, int cmd )
  329. {
  330. //__u16 *data = (__u16 *)&rq->ifr_data;
  331. //ether_dev_t *ether_dev = net->priv;
  332. // No support here yet.
  333. // Do we need support???
  334. switch(cmd) {
  335. case SIOCDEVPRIVATE:
  336. return -EOPNOTSUPP;
  337. case SIOCDEVPRIVATE+1:
  338. return -EOPNOTSUPP;
  339. case SIOCDEVPRIVATE+2:
  340. //return 0;
  341. return -EOPNOTSUPP;
  342. default:
  343. return -EOPNOTSUPP;
  344. }
  345. }
  346. static void CDC_SetEthernetPacketFilter (ether_dev_t *ether_dev)
  347. {
  348. usb_control_msg(ether_dev->usb,
  349. usb_sndctrlpipe(ether_dev->usb, 0),
  350. SET_ETHERNET_PACKET_FILTER, /* request */
  351. USB_TYPE_CLASS | USB_DIR_OUT | USB_RECIP_INTERFACE, /* request type */
  352. cpu_to_le16(ether_dev->mode_flags), /* value */
  353. cpu_to_le16((u16)ether_dev->comm_interface), /* index */
  354. NULL,
  355. 0, /* size */
  356. HZ); /* timeout */
  357. }
  358. static void CDCEther_set_multicast( struct net_device *net )
  359. {
  360. ether_dev_t *ether_dev = net->priv;
  361. int i;
  362. __u8 *buff;
  363. // Tell the kernel to stop sending us frames while we get this
  364. // all set up.
  365. netif_stop_queue(net);
  366.       /* Note: do not reorder, GCC is clever about common statements. */
  367.         if (net->flags & IFF_PROMISC) {
  368.                 /* Unconditionally log net taps. */
  369.                 info( "%s: Promiscuous mode enabled", net->name);
  370. ether_dev->mode_flags = MODE_FLAG_PROMISCUOUS |
  371. MODE_FLAG_ALL_MULTICAST |
  372. MODE_FLAG_DIRECTED |
  373. MODE_FLAG_BROADCAST |
  374. MODE_FLAG_MULTICAST;
  375.         } else if (net->mc_count > ether_dev->wNumberMCFilters) {
  376.                 /* Too many to filter perfectly -- accept all multicasts. */
  377. info("%s: set too many MC filters, using allmulti", net->name);
  378. ether_dev->mode_flags = MODE_FLAG_ALL_MULTICAST |
  379. MODE_FLAG_DIRECTED |
  380. MODE_FLAG_BROADCAST |
  381. MODE_FLAG_MULTICAST;
  382. } else if (net->flags & IFF_ALLMULTI) {
  383.                 /* Filter in software */
  384. info("%s: using allmulti", net->name);
  385. ether_dev->mode_flags = MODE_FLAG_ALL_MULTICAST |
  386. MODE_FLAG_DIRECTED |
  387. MODE_FLAG_BROADCAST |
  388. MODE_FLAG_MULTICAST;
  389.         } else {
  390. /* do multicast filtering in hardware */
  391.                 struct dev_mc_list *mclist;
  392. info("%s: set multicast filters", net->name);
  393. ether_dev->mode_flags = MODE_FLAG_ALL_MULTICAST |
  394. MODE_FLAG_DIRECTED |
  395. MODE_FLAG_BROADCAST |
  396. MODE_FLAG_MULTICAST;
  397. buff = kmalloc(6 * net->mc_count, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
  398.                 for (i = 0, mclist = net->mc_list;
  399.      mclist && i < net->mc_count;
  400.                      i++, mclist = mclist->next) {
  401. memcpy(&mclist->dmi_addr, &buff[i * 6], 6);
  402. }
  403. #if 0
  404. usb_control_msg(ether_dev->usb,
  405. usb_sndctrlpipe(ether_dev->usb, 0),
  406. SET_ETHERNET_MULTICAST_FILTER, /* request */
  407. USB_TYPE_CLASS | USB_DIR_OUT | USB_RECIP_INTERFACE, /* request type */
  408. cpu_to_le16(net->mc_count), /* value */
  409. cpu_to_le16((u16)ether_dev->comm_interface), /* index */
  410. buff,
  411. (6* net->mc_count), /* size */
  412. HZ); /* timeout */
  413. #endif
  414. kfree(buff);
  415. }
  416. #if 0 
  417. CDC_SetEthernetPacketFilter(ether_dev);
  418. #endif
  419.         // Tell the kernel to start giving frames to us again.
  420. netif_wake_queue(net);
  421. }
  422. //////////////////////////////////////////////////////////////////////////////
  423. // Routines used to parse out the Functional Descriptors /////////////////////
  424. //////////////////////////////////////////////////////////////////////////////
  425. static int parse_header_functional_descriptor( int *bFunctionLength, 
  426.                                                int bDescriptorType, 
  427.                                                int bDescriptorSubtype,
  428.                                                unsigned char *data,
  429.                                                ether_dev_t *ether_dev,
  430.                                                int *requirements )
  431. {
  432. // Check to make sure we haven't seen one of these already.
  433. if ( (~*requirements) & REQ_HDR_FUNC_DESCR ) {
  434. err( "Multiple Header Functional Descriptors found." );
  435. return -1;
  436. }
  437. // Is it the right size???
  438. if (*bFunctionLength != 5) {
  439. info( "Invalid length in Header Functional Descriptor" );
  440. // This is a hack to get around a particular device (NO NAMES)
  441. // It has this function length set to the length of the
  442. // whole class-specific descriptor
  443. *bFunctionLength = 5;
  444. }
  445. // Nothing extremely useful here.
  446. // We'll keep it for posterity
  447. ether_dev->bcdCDC = data[0] + (data[1] << 8);
  448. dbg( "Found Header descriptor, CDC version %x", ether_dev->bcdCDC);
  449. // We've seen one of these
  450. *requirements &= ~REQ_HDR_FUNC_DESCR;
  451. // It's all good.
  452. return 0;
  453. }
  454. static int parse_union_functional_descriptor( int *bFunctionLength, 
  455.                                               int bDescriptorType, 
  456.                                               int bDescriptorSubtype,
  457.                                               unsigned char *data,
  458.                                               ether_dev_t *ether_dev,
  459.                                               int *requirements )
  460. {
  461. // Check to make sure we haven't seen one of these already.
  462. if ( (~*requirements) & REQ_UNION_FUNC_DESCR ) {
  463. err( "Multiple Union Functional Descriptors found." );
  464. return -1;
  465. }
  466. // Is it the right size?
  467. if (*bFunctionLength != 5) {
  468. // It is NOT the size we expected.
  469. err( "Unsupported length in Union Functional Descriptor" );
  470. return -1;
  471. }
  472. // Sanity check of sorts
  473. if (ether_dev->comm_interface != data[0]) {
  474. // This tells us that we are chasing the wrong comm
  475. // interface or we are crazy or something else weird.
  476. if (ether_dev->comm_interface == data[1]) {
  477. info( "Probably broken Union descriptor, fudging data interface" );
  478. // We'll need this in a few microseconds, 
  479. // so guess here, and hope for the best
  480. ether_dev->data_interface = data[0];
  481. } else {
  482. err( "Union Functional Descriptor is broken beyond repair" );
  483. return -1;
  484. }
  485. } else{ // Descriptor is OK
  486.         // We'll need this in a few microseconds!
  487. ether_dev->data_interface = data[1];
  488. }
  489. // We've seen one of these now.
  490. *requirements &= ~REQ_UNION_FUNC_DESCR;
  491. // Done
  492. return 0;
  493. }
  494. static int parse_ethernet_functional_descriptor( int *bFunctionLength, 
  495.                                                  int bDescriptorType, 
  496.                                                  int bDescriptorSubtype,
  497.                                                  unsigned char *data,
  498.                                                  ether_dev_t *ether_dev,
  499.                                                  int *requirements )
  500. {
  501. // Check to make sure we haven't seen one of these already.
  502. if ( (~*requirements) & REQ_ETH_FUNC_DESCR ) {
  503. err( "Multiple Ethernet Functional Descriptors found." );
  504. return -1;
  505. }
  506. // Is it the right size?
  507. if (*bFunctionLength != 13) {
  508. err( "Invalid length in Ethernet Networking Functional Descriptor" );
  509. return -1;
  510. }
  511. // Lots of goodies from this one.  They are all important.
  512. ether_dev->iMACAddress = data[0];
  513. ether_dev->bmEthernetStatistics = data[1] + (data[2] << 8) + (data[3] << 16) + (data[4] << 24);
  514. ether_dev->wMaxSegmentSize = data[5] + (data[6] << 8);
  515. ether_dev->wNumberMCFilters = (data[7] + (data[8] << 8)) & 0x00007FFF;
  516. if (ether_dev->wNumberMCFilters > multicast_filter_limit) {
  517. ether_dev->wNumberMCFilters = multicast_filter_limit;
  518. }
  519. ether_dev->bNumberPowerFilters = data[9];
  520. // We've seen one of these now.
  521. *requirements &= ~REQ_ETH_FUNC_DESCR;
  522. // That's all she wrote.
  523. return 0;
  524. }
  525. static int parse_protocol_unit_functional_descriptor( int *bFunctionLength, 
  526.                                                       int bDescriptorType, 
  527.                                                       int bDescriptorSubtype,
  528.                                                       unsigned char *data,
  529.                                                       ether_dev_t *ether_dev,
  530.                                                       int *requirements )
  531. {
  532. // There should only be one type if we are sane
  533. if (bDescriptorType != CS_INTERFACE) {
  534. info( "Invalid bDescriptorType found." );
  535. return -1;
  536. }
  537. // The Subtype tells the tale.
  538. switch (bDescriptorSubtype){
  539. case 0x00: // Header Functional Descriptor
  540. return parse_header_functional_descriptor( bFunctionLength,
  541.                                            bDescriptorType,
  542.                                            bDescriptorSubtype,
  543.                                            data,
  544.                                            ether_dev,
  545.                                            requirements );
  546. break;
  547. case 0x06: // Union Functional Descriptor
  548. return parse_union_functional_descriptor( bFunctionLength,
  549.                                           bDescriptorType,
  550.                                           bDescriptorSubtype,
  551.                                           data,
  552.                                           ether_dev,
  553.                                           requirements );
  554. break;
  555. case 0x0F: // Ethernet Networking Functional Descriptor
  556. return parse_ethernet_functional_descriptor( bFunctionLength,
  557.                                              bDescriptorType,
  558.                                              bDescriptorSubtype,
  559.                                              data,
  560.                                              ether_dev,
  561.                                              requirements );
  562. break;
  563. default: // We don't support this at this time...
  564. // However that doesn't necessarily indicate an error.
  565. dbg( "Unexpected header type %x:", bDescriptorSubtype );
  566. return 0;
  567. }
  568. // How did we get here???
  569. return -1;
  570. }
  571. static int parse_ethernet_class_information( unsigned char *data, int length, ether_dev_t *ether_dev )
  572. {
  573. int loc = 0;
  574. int rc;
  575. int bFunctionLength;
  576. int bDescriptorType;
  577. int bDescriptorSubtype;
  578. int requirements = REQUIREMENTS_TOTAL;
  579. // As long as there is something here, we will try to parse it
  580. while (loc < length) {
  581. // Length
  582. bFunctionLength = data[loc];
  583. loc++;
  584. // Type
  585. bDescriptorType = data[loc];
  586. loc++;
  587. // Subtype
  588. bDescriptorSubtype = data[loc];
  589. loc++;
  590. // ship this off to be processed elsewhere.
  591. rc = parse_protocol_unit_functional_descriptor( &bFunctionLength, 
  592.                                                 bDescriptorType, 
  593.                                                 bDescriptorSubtype, 
  594.                                                 &data[loc],
  595.                                                 ether_dev,
  596.                                                 &requirements );
  597. // Did it process okay?
  598. if (rc) {
  599. // Something was hosed somewhere.
  600. // No need to continue;
  601. err("Bad descriptor parsing: %x", rc );
  602. return -1;
  603. }
  604. // We have already taken three bytes.
  605. loc += (bFunctionLength - 3);
  606. }
  607. // Check to see if we got everything we need.
  608. if (requirements) {
  609. // We missed some of the requirements...
  610. err( "Not all required functional descriptors present 0x%08X", requirements );
  611. return -1;
  612. }
  613. // We got everything.
  614. return 0;
  615. }
  616. //////////////////////////////////////////////////////////////////////////////
  617. // Routine to check for the existence of the Functional Descriptors //////////
  618. //////////////////////////////////////////////////////////////////////////////
  619. static int find_and_parse_ethernet_class_information( struct usb_device *device, ether_dev_t *ether_dev )
  620. {
  621. struct usb_config_descriptor *conf = NULL;
  622. struct usb_interface *comm_intf_group = NULL;
  623. struct usb_interface_descriptor *comm_intf = NULL;
  624. int rc = -1;
  625. // The assumption here is that find_ethernet_comm_interface
  626. // and find_valid_configuration 
  627. // have already filled in the information about where to find
  628. // the a valid commication interface.
  629. conf = &( device->config[ether_dev->configuration_num] );
  630. comm_intf_group = &( conf->interface[ether_dev->comm_interface] );
  631. comm_intf = &( comm_intf_group->altsetting[ether_dev->comm_interface_altset_num] );
  632. // Let's check and see if it has the extra information we need...
  633. if (comm_intf->extralen > 0) {
  634. // This is where the information is SUPPOSED to be.
  635. rc = parse_ethernet_class_information( comm_intf->extra, comm_intf->extralen, ether_dev );
  636. } else if (conf->extralen > 0) {
  637. // This is a hack.  The spec says it should be at the interface 
  638. // location checked above.  However I have seen it here also.
  639. // This is the same device that requires the functional descriptor hack above
  640. warn( "Ethernet information found at device configuration.  This is broken." );
  641. rc = parse_ethernet_class_information( conf->extra, conf->extralen, ether_dev );
  642. } else  {
  643. // I don't know where else to look.
  644. warn( "No ethernet information found." );
  645. rc = -1;
  646. }
  647. return rc;
  648. }
  649. //////////////////////////////////////////////////////////////////////////////
  650. // Routines to verify the data interface /////////////////////////////////////
  651. //////////////////////////////////////////////////////////////////////////////
  652. static int get_data_interface_endpoints( struct usb_device *device, ether_dev_t *ether_dev )
  653. {
  654. struct usb_config_descriptor *conf = NULL;
  655. struct usb_interface *data_intf_group = NULL;
  656. struct usb_interface_descriptor *data_intf = NULL;
  657. // Walk through and get to the data interface we are checking.
  658. conf = &( device->config[ether_dev->configuration_num] );
  659. data_intf_group = &( conf->interface[ether_dev->data_interface] );
  660. data_intf = &( data_intf_group->altsetting[ether_dev->data_interface_altset_num_with_traffic] );
  661. // Start out assuming we won't find anything we can use
  662. ether_dev->data_ep_in = 0;
  663. ether_dev->data_ep_out = 0;
  664. // If these are not BULK endpoints, we don't want them
  665. if ( data_intf->endpoint[0].bmAttributes != 0x02 ) {
  666. return -1;
  667. } if ( data_intf->endpoint[1].bmAttributes != 0x02 ) {
  668. return -1;
  669. }
  670. // Check the first endpoint to see if it is IN or OUT
  671. if ( data_intf->endpoint[0].bEndpointAddress & 0x80 ) {
  672. // This endpoint is IN
  673. ether_dev->data_ep_in = data_intf->endpoint[0].bEndpointAddress & 0x7F;
  674. } else {
  675. // This endpoint is OUT
  676. ether_dev->data_ep_out = data_intf->endpoint[0].bEndpointAddress & 0x7F;
  677. ether_dev->data_ep_out_size = data_intf->endpoint[0].wMaxPacketSize;
  678. }
  679. // Check the second endpoint to see if it is IN or OUT
  680. if ( data_intf->endpoint[1].bEndpointAddress & 0x80 ) {
  681. // This endpoint is IN
  682. ether_dev->data_ep_in = data_intf->endpoint[1].bEndpointAddress & 0x7F;
  683. } else {
  684. // This endpoint is OUT
  685. ether_dev->data_ep_out = data_intf->endpoint[1].bEndpointAddress & 0x7F;
  686. ether_dev->data_ep_out_size = data_intf->endpoint[1].wMaxPacketSize;
  687. }
  688. // Now make sure we got both an IN and an OUT
  689. if (ether_dev->data_ep_in && ether_dev->data_ep_out) {
  690. // We did get both, we are in good shape...
  691. info( "detected BULK OUT packets of size %d", ether_dev->data_ep_out_size );
  692. return 0;
  693. }
  694. return -1;
  695. }
  696. static int verify_ethernet_data_interface( struct usb_device *device, ether_dev_t *ether_dev )
  697. {
  698. struct usb_config_descriptor *conf = NULL;
  699. struct usb_interface *data_intf_group = NULL;
  700. struct usb_interface_descriptor *data_intf = NULL;
  701. int rc = -1;
  702. int status;
  703. int altset_num;
  704. // The assumption here is that parse_ethernet_class_information()
  705. // and find_valid_configuration() 
  706. // have already filled in the information about where to find
  707. // a data interface
  708. conf = &( device->config[ether_dev->configuration_num] );
  709. data_intf_group = &( conf->interface[ether_dev->data_interface] );
  710. // start out assuming we won't find what we are looking for.
  711. ether_dev->data_interface_altset_num_with_traffic = -1;
  712. ether_dev->data_bAlternateSetting_with_traffic = -1;
  713. ether_dev->data_interface_altset_num_without_traffic = -1;
  714. ether_dev->data_bAlternateSetting_without_traffic = -1;
  715. // Walk through every possible setting for this interface until
  716. // we find what makes us happy.
  717. for ( altset_num = 0; altset_num < data_intf_group->num_altsetting; altset_num++ ) {
  718. data_intf = &( data_intf_group->altsetting[altset_num] );
  719. // Is this a data interface we like?
  720. if ( ( data_intf->bInterfaceClass == 0x0A )
  721.    && ( data_intf->bInterfaceSubClass == 0x00 )
  722.    && ( data_intf->bInterfaceProtocol == 0x00 ) ) {
  723. if ( data_intf->bNumEndpoints == 2 ) {
  724. // We are required to have one of these.
  725. // An interface with 2 endpoints to send Ethernet traffic back and forth
  726. // It actually may be possible that the device might only
  727. // communicate in a vendor specific manner.
  728. // That would not be very nice.
  729. // We can add that one later.
  730. ether_dev->data_bInterfaceNumber = data_intf->bInterfaceNumber;
  731. ether_dev->data_interface_altset_num_with_traffic = altset_num;
  732. ether_dev->data_bAlternateSetting_with_traffic = data_intf->bAlternateSetting;
  733. status = get_data_interface_endpoints( device, ether_dev );
  734. if (!status) {
  735. rc = 0;
  736. }
  737. }
  738. if ( data_intf->bNumEndpoints == 0 ) {
  739. // According to the spec we are SUPPOSED to have one of these
  740. // In fact the device is supposed to come up in this state.
  741. // However, I have seen a device that did not have such an interface.
  742. // So it must be just optional for our driver...
  743. ether_dev->data_bInterfaceNumber = data_intf->bInterfaceNumber;
  744. ether_dev->data_interface_altset_num_without_traffic = altset_num;
  745. ether_dev->data_bAlternateSetting_without_traffic = data_intf->bAlternateSetting;
  746. }
  747. }
  748. }
  749. return rc;
  750. }
  751. //////////////////////////////////////////////////////////////////////////////
  752. // Routine to find a communication interface /////////////////////////////////
  753. //////////////////////////////////////////////////////////////////////////////
  754. static int find_ethernet_comm_interface( struct usb_device *device, ether_dev_t *ether_dev )
  755. {
  756. struct usb_config_descriptor *conf = NULL;
  757. struct usb_interface *comm_intf_group = NULL;
  758. struct usb_interface_descriptor *comm_intf = NULL;
  759. int intf_num;
  760. int altset_num;
  761. int rc;
  762. conf = &( device->config[ether_dev->configuration_num] );
  763. // We need to check and see if any of these interfaces are something we want.
  764. // Walk through each interface one at a time
  765. for ( intf_num = 0; intf_num < conf->bNumInterfaces; intf_num++ ) {
  766. comm_intf_group = &( conf->interface[intf_num] );
  767. // Now for each of those interfaces, check every possible
  768. // alternate setting.
  769. for ( altset_num = 0; altset_num < comm_intf_group->num_altsetting; altset_num++ ) {
  770. comm_intf = &( comm_intf_group->altsetting[altset_num] );
  771. // Is this a communication class of interface of the
  772. // ethernet subclass variety.
  773. if ( ( comm_intf->bInterfaceClass == 0x02 )
  774.    && ( comm_intf->bInterfaceSubClass == 0x06 )
  775.    && ( comm_intf->bInterfaceProtocol == 0x00 ) ) {
  776. if ( comm_intf->bNumEndpoints == 1 ) {
  777. // Good, we found one, we will try this one
  778. // Fill in the structure...
  779. ether_dev->comm_interface = intf_num;
  780. ether_dev->comm_bInterfaceNumber = comm_intf->bInterfaceNumber;
  781. ether_dev->comm_interface_altset_num = altset_num;
  782. ether_dev->comm_bAlternateSetting = comm_intf->bAlternateSetting;
  783. // Look for the Ethernet Functional Descriptors
  784. rc = find_and_parse_ethernet_class_information( device, ether_dev );
  785. if (rc) {
  786. // Nope this was no good after all.
  787. continue;
  788. }
  789. // Check that we really can talk to the data
  790. // interface 
  791. // This includes # of endpoints, protocols,
  792. // etc.
  793. rc = verify_ethernet_data_interface( device, ether_dev );
  794. if (rc) {
  795. // We got something we didn't like
  796. continue;
  797. }
  798. // This communication interface seems to give us everything
  799. // we require.  We have all the ethernet info we need.
  800. // Let's get out of here and go home right now.
  801. return 0;
  802. } else {
  803.                                         // bNumEndPoints != 1
  804. // We found an interface that had the wrong number of 
  805. // endpoints but would have otherwise been okay
  806. } // end bNumEndpoints check.
  807. } // end interface specifics check.
  808. } // end for altset_num
  809. } // end for intf_num
  810. return -1;
  811. }
  812. //////////////////////////////////////////////////////////////////////////////
  813. // Routine to go through all configurations and find one that ////////////////
  814. // is an Ethernet Networking Device //////////////////////////////////////////
  815. //////////////////////////////////////////////////////////////////////////////
  816. static int find_valid_configuration( struct usb_device *device, ether_dev_t *ether_dev )
  817. {
  818. struct usb_config_descriptor *conf = NULL;
  819. int conf_num;
  820. int rc;
  821. // We will try each and every possible configuration
  822. for ( conf_num = 0; conf_num < device->descriptor.bNumConfigurations; conf_num++ ) {
  823. conf = &( device->config[conf_num] );
  824. // Our first requirement : 2 interfaces
  825. if ( conf->bNumInterfaces != 2 ) {
  826. // I currently don't know how to handle devices with any number of interfaces
  827. // other than 2.
  828. continue;
  829. }
  830. // This one passed our first check, fill in some 
  831. // useful data
  832. ether_dev->configuration_num = conf_num;
  833. ether_dev->bConfigurationValue = conf->bConfigurationValue;
  834. // Now run it through the ringers and see what comes
  835. // out the other side.
  836. rc = find_ethernet_comm_interface( device, ether_dev );
  837. // Check if we found an ethernet Communcation Device
  838. if ( !rc ) {
  839. // We found one.
  840. return 0;
  841. }
  842. }
  843. // None of the configurations suited us.
  844. return -1;
  845. }
  846. //////////////////////////////////////////////////////////////////////////////
  847. // Routine that checks a given configuration to see if any driver ////////////
  848. // has claimed any of the devices interfaces /////////////////////////////////
  849. //////////////////////////////////////////////////////////////////////////////
  850. static int check_for_claimed_interfaces( struct usb_config_descriptor *config )
  851. {
  852. struct usb_interface *comm_intf_group;
  853. int intf_num;
  854. // Go through all the interfaces and make sure none are 
  855. // claimed by anybody else.
  856. for ( intf_num = 0; intf_num < config->bNumInterfaces; intf_num++ ) {
  857. comm_intf_group = &( config->interface[intf_num] );
  858. if ( usb_interface_claimed( comm_intf_group ) ) {
  859. // Somebody has beat us to this guy.
  860. // We can't change the configuration out from underneath of whoever
  861. // is using this device, so we will go ahead and give up.
  862. return -1;
  863. }
  864. }
  865. // We made it all the way through.
  866. // I guess no one has claimed any of these interfaces.
  867. return 0;
  868. }
  869. //////////////////////////////////////////////////////////////////////////////
  870. // Routines to ask for and set the kernel network interface's MAC address ////
  871. // Used by driver's probe routine ////////////////////////////////////////////
  872. //////////////////////////////////////////////////////////////////////////////
  873. static inline unsigned char hex2dec( unsigned char digit )
  874. {
  875. // Is there a standard way to do this???
  876. // I have written this code TOO MANY times.
  877. if ( (digit >= '0') && (digit <= '9') ) {
  878. return (digit - '0');
  879. }
  880. if ( (digit >= 'a') && (digit <= 'f') ) {
  881. return (digit - 'a' + 10);
  882. }
  883. if ( (digit >= 'A') && (digit <= 'F') ) {
  884. return (digit - 'A' + 10);
  885. }
  886. return 0;
  887. }
  888. static void set_ethernet_addr( ether_dev_t *ether_dev )
  889. {
  890. unsigned char mac_addr[6];
  891. int i;
  892. int  len;
  893. unsigned char buffer[13];
  894. // Let's assume we don't get anything...
  895. mac_addr[0] = 0x00;
  896. mac_addr[1] = 0x00;
  897. mac_addr[2] = 0x00;
  898. mac_addr[3] = 0x00;
  899. mac_addr[4] = 0x00;
  900. mac_addr[5] = 0x00;
  901. // Let's ask the device...
  902. len = usb_string(ether_dev->usb, ether_dev->iMACAddress, buffer, 13);
  903. // Sanity check!
  904. if (len != 12) {
  905. // You gotta love failing sanity checks
  906. err("Attempting to get MAC address returned %d bytes", len);
  907. return;
  908. }
  909. // Fill in the mac_addr
  910. for (i = 0; i < 6; i++) {
  911. mac_addr[i] = ( hex2dec( buffer[2 * i] ) << 4 ) + hex2dec( buffer[2 * i + 1] );
  912. }
  913. // Now copy it over to the kernel's network driver.
  914. memcpy( ether_dev->net->dev_addr, mac_addr, sizeof(mac_addr) );
  915. }
  916. //////////////////////////////////////////////////////////////////////////////
  917. // Routine to print to syslog information about the driver ///////////////////
  918. // Used by driver's probe routine ////////////////////////////////////////////
  919. //////////////////////////////////////////////////////////////////////////////
  920. void log_device_info(ether_dev_t *ether_dev)
  921. {
  922. int len;
  923. int string_num;
  924. unsigned char manu[256];
  925. unsigned char prod[256];
  926. unsigned char sern[256];
  927. unsigned char *mac_addr;
  928. // Default empty strings in case we don't find a real one
  929. manu[0] = 0x00;
  930. prod[0] = 0x00;
  931. sern[0] = 0x00;
  932. // Try to get the device Manufacturer
  933. string_num = ether_dev->usb->descriptor.iManufacturer;
  934. if (string_num) {
  935. // Put it into its buffer
  936. len = usb_string(ether_dev->usb, string_num, manu, 255);
  937. // Just to be safe
  938. manu[len] = 0x00;
  939. }
  940. // Try to get the device Product Name
  941. string_num = ether_dev->usb->descriptor.iProduct;
  942. if (string_num) {
  943. // Put it into its buffer
  944. len = usb_string(ether_dev->usb, string_num, prod, 255);
  945. // Just to be safe
  946. prod[len] = 0x00;
  947. }
  948. // Try to get the device Serial Number
  949. string_num = ether_dev->usb->descriptor.iSerialNumber;
  950. if (string_num) {
  951. // Put it into its buffer
  952. len = usb_string(ether_dev->usb, string_num, sern, 255);
  953. // Just to be safe
  954. sern[len] = 0x00;
  955. }
  956. // This makes it easier for us to print
  957. mac_addr = ether_dev->net->dev_addr;
  958. // Now send everything we found to the syslog
  959. info( "%s: %s %s %s %02X:%02X:%02X:%02X:%02X:%02X", 
  960.       ether_dev->net->name, manu, prod, sern, mac_addr[0], 
  961.       mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], 
  962.       mac_addr[5] );
  963. }
  964. /* Forward declaration */
  965. static struct usb_driver CDCEther_driver ;
  966. //////////////////////////////////////////////////////////////////////////////
  967. // Module's probe routine ////////////////////////////////////////////////////
  968. // claims interfaces if they are for an Ethernet CDC /////////////////////////
  969. //////////////////////////////////////////////////////////////////////////////
  970. static void * CDCEther_probe( struct usb_device *usb, unsigned int ifnum,
  971.      const struct usb_device_id *id)
  972. {
  973. struct net_device *net;
  974. ether_dev_t *ether_dev;
  975. int  rc;
  976. // First we should check the active configuration to see if 
  977. // any other driver has claimed any of the interfaces.
  978. if ( check_for_claimed_interfaces( usb->actconfig ) ) {
  979. // Someone has already put there grubby paws on this device.
  980. // We don't want it now...
  981. return NULL;
  982. }
  983. // We might be finding a device we can use.
  984. // We all go ahead and allocate our storage space.
  985. // We need to because we have to start filling in the data that
  986. // we are going to need later.
  987. if(!(ether_dev = kmalloc(sizeof(ether_dev_t), GFP_KERNEL))) {
  988. err("out of memory allocating device structure");
  989. return NULL;
  990. }
  991. // Zero everything out.
  992. memset(ether_dev, 0, sizeof(ether_dev_t));
  993. // Let's see if we can find a configuration we can use.
  994. rc = find_valid_configuration( usb, ether_dev );
  995. if (rc) {
  996. // Nope we couldn't find one we liked.
  997. // This device was not meant for us to control.
  998. kfree( ether_dev );
  999. return NULL;
  1000. }
  1001. // Now that we FOUND a configuration. let's try to make the 
  1002. // device go into it.
  1003. if ( usb_set_configuration( usb, ether_dev->bConfigurationValue ) ) {
  1004. err("usb_set_configuration() failed");
  1005. kfree( ether_dev );
  1006. return NULL;
  1007. }
  1008. // Now set the communication interface up as required.
  1009. if (usb_set_interface(usb, ether_dev->comm_bInterfaceNumber, ether_dev->comm_bAlternateSetting)) {
  1010. err("usb_set_interface() failed");
  1011. kfree( ether_dev );
  1012. return NULL;
  1013. }
  1014. // Only turn traffic on right now if we must...
  1015. if (ether_dev->data_interface_altset_num_without_traffic >= 0) {
  1016. // We found an alternate setting for the data
  1017. // interface that allows us to turn off traffic.
  1018. // We should use it.
  1019. if (usb_set_interface( usb, 
  1020.                        ether_dev->data_bInterfaceNumber, 
  1021.                        ether_dev->data_bAlternateSetting_without_traffic)) {
  1022. err("usb_set_interface() failed");
  1023. kfree( ether_dev );
  1024. return NULL;
  1025. }
  1026. } else {
  1027. // We didn't find an alternate setting for the data
  1028. // interface that would let us turn off traffic.
  1029. // Oh well, let's go ahead and do what we must...
  1030. if (usb_set_interface( usb, 
  1031.                        ether_dev->data_bInterfaceNumber, 
  1032.                        ether_dev->data_bAlternateSetting_with_traffic)) {
  1033. err("usb_set_interface() failed");
  1034. kfree( ether_dev );
  1035. return NULL;
  1036. }
  1037. }
  1038. // Now we need to get a kernel Ethernet interface.
  1039. net = init_etherdev( NULL, 0 );
  1040. if ( !net ) {
  1041. // Hmm...  The kernel is not sharing today...
  1042. // Fine, we didn't want it anyway...
  1043. err( "Unable to initialize ethernet device" );
  1044. kfree( ether_dev );
  1045. return NULL;
  1046. }
  1047. // Now that we have an ethernet device, let's set it up
  1048. // (And I don't mean "set [it] up the bomb".)
  1049. net->priv = ether_dev;
  1050. SET_MODULE_OWNER(net);
  1051. net->open = CDCEther_open;
  1052. net->stop = CDCEther_close;
  1053. net->watchdog_timeo = CDC_ETHER_TX_TIMEOUT;
  1054. net->tx_timeout = CDCEther_tx_timeout;   // TX timeout function
  1055. net->do_ioctl = CDCEther_ioctl;
  1056. net->hard_start_xmit = CDCEther_start_xmit;
  1057. net->set_multicast_list = CDCEther_set_multicast;
  1058. net->get_stats = CDCEther_netdev_stats;
  1059. net->mtu = ether_dev->wMaxSegmentSize - 14;
  1060. // We'll keep track of this information for later...
  1061. ether_dev->usb = usb;
  1062. ether_dev->net = net;
  1063. // and don't forget the MAC address.
  1064. set_ethernet_addr( ether_dev );
  1065. // Send a message to syslog about what we are handling
  1066. log_device_info( ether_dev );
  1067. // I claim this interface to be a CDC Ethernet Networking device
  1068. usb_driver_claim_interface( &CDCEther_driver, 
  1069.                             &(usb->config[ether_dev->configuration_num].interface[ether_dev->comm_interface]), 
  1070.                             ether_dev );
  1071. // I claim this interface to be a CDC Ethernet Networking device
  1072. usb_driver_claim_interface( &CDCEther_driver, 
  1073.                             &(usb->config[ether_dev->configuration_num].interface[ether_dev->data_interface]), 
  1074.                             ether_dev );
  1075. // Does this REALLY do anything???
  1076. usb_inc_dev_use( usb );
  1077. // TODO - last minute HACK
  1078. ether_dev->comm_ep_in = 5;
  1079. // Okay, we are finally done...
  1080. return NULL;
  1081. }
  1082. //////////////////////////////////////////////////////////////////////////////
  1083. // Module's disconnect routine ///////////////////////////////////////////////
  1084. // Called when the driver is unloaded or the device is unplugged /////////////
  1085. // (Whichever happens first assuming the driver suceeded at its probe) ///////
  1086. //////////////////////////////////////////////////////////////////////////////
  1087. static void CDCEther_disconnect( struct usb_device *usb, void *ptr )
  1088. {
  1089. ether_dev_t *ether_dev = ptr;
  1090. // Sanity check!!!
  1091. if ( !ether_dev || !ether_dev->usb ) {
  1092. // We failed.  We are insane!!!
  1093. warn("unregistering non-existant device");
  1094. return;
  1095. }
  1096. // Make sure we fail the sanity check if we try this again.
  1097. ether_dev->usb = NULL;
  1098. // It is possible that this function is called before
  1099. // the "close" function.
  1100. // This tells the close function we are already disconnected
  1101. ether_dev->flags |= CDC_ETHER_UNPLUG;
  1102. // We don't need the network device any more
  1103. unregister_netdev( ether_dev->net );
  1104. // For sanity checks
  1105. ether_dev->net = NULL;
  1106. // I ask again, does this do anything???
  1107. usb_dec_dev_use( usb );
  1108. // We are done with this interface
  1109. usb_driver_release_interface( &CDCEther_driver, 
  1110.                               &(usb->config[ether_dev->configuration_num].interface[ether_dev->comm_interface]) );
  1111. // We are done with this interface too
  1112. usb_driver_release_interface( &CDCEther_driver, 
  1113.                               &(usb->config[ether_dev->configuration_num].interface[ether_dev->data_interface]) );
  1114. // No more tied up kernel memory
  1115. kfree( ether_dev );
  1116. // This does no good, but it looks nice!
  1117. ether_dev = NULL;
  1118. }
  1119. //////////////////////////////////////////////////////////////////////////////
  1120. // Driver info ///////////////////////////////////////////////////////////////
  1121. //////////////////////////////////////////////////////////////////////////////
  1122. static struct usb_driver CDCEther_driver = {
  1123. name: "CDCEther",
  1124. probe: CDCEther_probe,
  1125. disconnect: CDCEther_disconnect,
  1126. id_table: CDCEther_ids,
  1127. };
  1128. //////////////////////////////////////////////////////////////////////////////
  1129. // init and exit routines called when driver is installed and uninstalled ////
  1130. //////////////////////////////////////////////////////////////////////////////
  1131. int __init CDCEther_init(void)
  1132. {
  1133. info( "%s", version );
  1134. return usb_register( &CDCEther_driver );
  1135. }
  1136. void __exit CDCEther_exit(void)
  1137. {
  1138. usb_deregister( &CDCEther_driver );
  1139. }
  1140. //////////////////////////////////////////////////////////////////////////////
  1141. // Module info ///////////////////////////////////////////////////////////////
  1142. //////////////////////////////////////////////////////////////////////////////
  1143. module_init( CDCEther_init );
  1144. module_exit( CDCEther_exit );
  1145. MODULE_AUTHOR("Brad Hards and another");
  1146. MODULE_DESCRIPTION("USB CDC Ethernet driver");
  1147. MODULE_LICENSE("GPL");
  1148. MODULE_PARM (multicast_filter_limit, "i");
  1149. MODULE_PARM_DESC (multicast_filter_limit, "CDCEther maximum number of filtered multicast addresses");
  1150. MODULE_DEVICE_TABLE (usb, CDCEther_ids);
  1151. //////////////////////////////////////////////////////////////////////////////
  1152. // End of file ///////////////////////////////////////////////////////////////
  1153. //////////////////////////////////////////////////////////////////////////////