07.06.2013 Views

Scsi - Index of

Scsi - Index of

Scsi - Index of

SHOW MORE
SHOW LESS

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;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!