07.06.2013 Views

Scsi - Index of

Scsi - Index of

Scsi - Index of

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

以海洋广阔无边;而这个函数支持各种传输,作为usb-storage 模块,无论其采用何种传输方式,无论传输数<br />

据量的多少,最终都一定要调用这个函数,所以我们必须承认这个函数很伟大.<br />

鉴于这个函数的重要性,它适用于各种信息的传送,而不仅仅是控制传送,日后在bulk 传输中我们还将遇<br />

上它,我们将在下一节专门来分析.但是在看这个函数之前,有些事情必须要心里有数,那就是作为设备驱动<br />

程序,只需要提交一个urb 就可以了,剩下的事情usb core 会去处理,有了结果它会通知我们.而提交<br />

urb,usb core 为我们准备了一个函数,usb_submit_urb()不管我们使用什么传输方式,我们都只要调用<br />

这<br />

个函数即可,在此之前,我们需要做的只是准备好这么一个urb,把urb 中各相关的成员填充好,然后就ok<br />

了.<br />

而这usb_stor_msg_common 正是这样做的.而显然,不同的传输方式其填写urb 的方式也不同.<br />

最后我们需要指出一点,这里我们的cr 是一个指针,有同志会问这个指针申请过内存了吗?答案是肯定的,<br />

忆往昔峥嵘岁月,曾几何时,我们在函数associate_dev()中就见到了us->cr,并且用usb_buffer_alloc<br />

为其申请了内存,当时我们就讲过的.<br />

80<br />

第一次亲密接触(三)<br />

让我们单刀直入,进入usb_stor_msg_common()函数.<br />

首先看145 行,让us->flags 和ABORTING_OR_DISCONNECTING 相<br />

与,ABORTING_OR_DISCONNECTING 宏定义于drivers/usb/storage/usb.h 中:<br />

78 /* Dynamic flag definitions: used in set_bit() etc. */<br />

79 #define US_FLIDX_URB_ACTIVE 18 /* 0x00040000 current_urb is in use */<br />

80 #define US_FLIDX_SG_ACTIVE 19 /* 0x00080000 current_sg is in use */<br />

81 #define US_FLIDX_ABORTING 20 /* 0x00100000 abort is in progress */<br />

82 #define US_FLIDX_DISCONNECTING 21 /* 0x00200000 disconnect in progress<br />

*/<br />

83 #define ABORTING_OR_DISCONNECTING ((1UL

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

Saved successfully!

Ooh no, something went wrong!