Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
月有关,友情,并非总与疯斗打闹有关.这几个函数应该说是给后面做铺垫,红花总要有绿叶配,没有这段代码<br />
的铺垫,到了后面usb 设备恐怕也无法正常工作吧.不过,一个利好消息是,这几个函数我们只会遇见这一次,<br />
它们在整个故事中就这么一次露脸的机会,像我们每个人的青春,只有一次,无法回头.和我们每个人的青春<br />
一样,都是绝版的.所以,让我们享受这段平淡无奇的代码吧.<br />
get_device_info, 这个函数定义于drivers/usb/storage/usb.c 中:<br />
466 /* Get the unusual_devs entries and the string descriptors */<br />
467 static void get_device_info(struct us_data *us, int id_index)<br />
468 {<br />
469 struct usb_device *dev = us->pusb_dev;<br />
470 struct usb_interface_descriptor *idesc =<br />
471 &us->pusb_intf->cur_altsetting->desc;<br />
472 struct us_unusual_dev *unusual_dev = &us_unusual_dev_list[id_index];<br />
473 struct usb_device_id *id = &storage_usb_ids[id_index];<br />
474<br />
475 /* Store the entries */<br />
476 us->unusual_dev = unusual_dev;<br />
477 us->subclass = (unusual_dev->useProtocol == US_SC_DEVICE) ?<br />
478 idesc->bInterfaceSubClass :<br />
479 unusual_dev->useProtocol;<br />
480 us->protocol = (unusual_dev->useTransport == US_PR_DEVICE) ?<br />
481 idesc->bInterfaceProtocol :<br />
482 unusual_dev->useTransport;<br />
483 us->flags = unusual_dev->flags;<br />
484<br />
485 /* Log a message if a non-generic unusual_dev entry contains an<br />
486 * unnecessary subclass or protocol override. This may stimulate<br />
487 * reports from users that will help us remove unneeded entries<br />
488 * from the unusual_devs.h table.<br />
489 */<br />
490 if (id->idVendor || id->idProduct) {<br />
491 static char *msgs[3] = {<br />
492 "an unneeded SubClass entry",<br />
493 "an unneeded Protocol entry",<br />
494 "unneeded SubClass and Protocol entries"};<br />
38<br />
495 struct usb_device_descriptor *ddesc = &dev->descriptor;<br />
496 int msg = -1;<br />
497<br />
498 if (unusual_dev->useProtocol != US_SC_DEVICE &&<br />
499 us->subclass == idesc->bInterfaceSubClass)<br />
500 msg += 1;<br />
501 if (unusual_dev->useTransport != US_PR_DEVICE &&<br />
502 us->protocol == idesc->bInterfaceProtocol)<br />
503 msg += 2;