Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OS
U-Boot.Mirror
提交
9de99326
U
U-Boot.Mirror
项目概览
OS
/
U-Boot.Mirror
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
U-Boot.Mirror
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9de99326
编写于
10月 13, 2010
作者:
W
Wolfgang Denk
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.denx.de/u-boot-usb
上级
cb2707af
4ee691f6
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
60 addition
and
25 deletion
+60
-25
common/usb_storage.c
common/usb_storage.c
+35
-4
drivers/usb/gadget/ether.c
drivers/usb/gadget/ether.c
+8
-13
drivers/usb/host/ohci-hcd.c
drivers/usb/host/ohci-hcd.c
+1
-1
drivers/usb/musb/musb_hcd.c
drivers/usb/musb/musb_hcd.c
+16
-7
未找到文件。
common/usb_storage.c
浏览文件 @
9de99326
...
...
@@ -204,6 +204,22 @@ int usb_stor_info(void)
return
1
;
}
static
unsigned
int
usb_get_max_lun
(
struct
us_data
*
us
)
{
int
len
;
unsigned
char
result
;
len
=
usb_control_msg
(
us
->
pusb_dev
,
usb_rcvctrlpipe
(
us
->
pusb_dev
,
0
),
US_BBB_GET_MAX_LUN
,
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
|
USB_DIR_IN
,
0
,
us
->
ifnum
,
&
result
,
sizeof
(
result
),
USB_CNTL_TIMEOUT
*
5
);
USB_STOR_PRINTF
(
"Get Max LUN -> len = %i, result = %i
\n
"
,
len
,
(
int
)
result
);
return
(
len
>
0
)
?
result
:
0
;
}
/*******************************************************************************
* scan the usb and reports device info
* to the user if mode = 1
...
...
@@ -241,12 +257,21 @@ int usb_stor_scan(int mode)
break
;
/* no more devices avaiable */
if
(
usb_storage_probe
(
dev
,
0
,
&
usb_stor
[
usb_max_devs
]))
{
/*
ok, it is a storage device
s
*
get info and fill it in
/*
OK, it's a storage device. Iterate over its LUN
s
*
and populate `usb_dev_desc'.
*/
if
(
usb_stor_get_info
(
dev
,
&
usb_stor
[
usb_max_devs
],
&
usb_dev_desc
[
usb_max_devs
])
==
1
)
int
lun
,
max_lun
,
start
=
usb_max_devs
;
max_lun
=
usb_get_max_lun
(
&
usb_stor
[
usb_max_devs
]);
for
(
lun
=
0
;
lun
<=
max_lun
&&
usb_max_devs
<
USB_MAX_STOR_DEV
;
lun
++
)
{
usb_dev_desc
[
usb_max_devs
].
lun
=
lun
;
if
(
usb_stor_get_info
(
dev
,
&
usb_stor
[
start
],
&
usb_dev_desc
[
usb_max_devs
])
==
1
)
{
usb_max_devs
++
;
}
}
}
/* if storage device */
if
(
usb_max_devs
==
USB_MAX_STOR_DEV
)
{
...
...
@@ -882,6 +907,7 @@ static int usb_inquiry(ccb *srb, struct us_data *ss)
do
{
memset
(
&
srb
->
cmd
[
0
],
0
,
12
);
srb
->
cmd
[
0
]
=
SCSI_INQUIRY
;
srb
->
cmd
[
1
]
=
srb
->
lun
<<
5
;
srb
->
cmd
[
4
]
=
36
;
srb
->
datalen
=
36
;
srb
->
cmdlen
=
12
;
...
...
@@ -905,6 +931,7 @@ static int usb_request_sense(ccb *srb, struct us_data *ss)
ptr
=
(
char
*
)
srb
->
pdata
;
memset
(
&
srb
->
cmd
[
0
],
0
,
12
);
srb
->
cmd
[
0
]
=
SCSI_REQ_SENSE
;
srb
->
cmd
[
1
]
=
srb
->
lun
<<
5
;
srb
->
cmd
[
4
]
=
18
;
srb
->
datalen
=
18
;
srb
->
pdata
=
&
srb
->
sense_buf
[
0
];
...
...
@@ -924,6 +951,7 @@ static int usb_test_unit_ready(ccb *srb, struct us_data *ss)
do
{
memset
(
&
srb
->
cmd
[
0
],
0
,
12
);
srb
->
cmd
[
0
]
=
SCSI_TST_U_RDY
;
srb
->
cmd
[
1
]
=
srb
->
lun
<<
5
;
srb
->
datalen
=
0
;
srb
->
cmdlen
=
12
;
if
(
ss
->
transport
(
srb
,
ss
)
==
USB_STOR_TRANSPORT_GOOD
)
...
...
@@ -943,6 +971,7 @@ static int usb_read_capacity(ccb *srb, struct us_data *ss)
do
{
memset
(
&
srb
->
cmd
[
0
],
0
,
12
);
srb
->
cmd
[
0
]
=
SCSI_RD_CAPAC
;
srb
->
cmd
[
1
]
=
srb
->
lun
<<
5
;
srb
->
datalen
=
8
;
srb
->
cmdlen
=
12
;
if
(
ss
->
transport
(
srb
,
ss
)
==
USB_STOR_TRANSPORT_GOOD
)
...
...
@@ -957,6 +986,7 @@ static int usb_read_10(ccb *srb, struct us_data *ss, unsigned long start,
{
memset
(
&
srb
->
cmd
[
0
],
0
,
12
);
srb
->
cmd
[
0
]
=
SCSI_READ10
;
srb
->
cmd
[
1
]
=
srb
->
lun
<<
5
;
srb
->
cmd
[
2
]
=
((
unsigned
char
)
(
start
>>
24
))
&
0xff
;
srb
->
cmd
[
3
]
=
((
unsigned
char
)
(
start
>>
16
))
&
0xff
;
srb
->
cmd
[
4
]
=
((
unsigned
char
)
(
start
>>
8
))
&
0xff
;
...
...
@@ -973,6 +1003,7 @@ static int usb_write_10(ccb *srb, struct us_data *ss, unsigned long start,
{
memset
(
&
srb
->
cmd
[
0
],
0
,
12
);
srb
->
cmd
[
0
]
=
SCSI_WRITE10
;
srb
->
cmd
[
1
]
=
srb
->
lun
<<
5
;
srb
->
cmd
[
2
]
=
((
unsigned
char
)
(
start
>>
24
))
&
0xff
;
srb
->
cmd
[
3
]
=
((
unsigned
char
)
(
start
>>
16
))
&
0xff
;
srb
->
cmd
[
4
]
=
((
unsigned
char
)
(
start
>>
8
))
&
0xff
;
...
...
drivers/usb/gadget/ether.c
浏览文件 @
9de99326
...
...
@@ -1276,9 +1276,6 @@ static void rx_complete(struct usb_ep *ep, struct usb_request *req)
debug
(
"%s: status %d
\n
"
,
__func__
,
req
->
status
);
packet_received
=
1
;
if
(
req
)
dev
->
rx_req
=
req
;
}
static
int
alloc_requests
(
struct
eth_dev
*
dev
,
unsigned
n
,
gfp_t
gfp_flags
)
...
...
@@ -1287,16 +1284,18 @@ static int alloc_requests(struct eth_dev *dev, unsigned n, gfp_t gfp_flags)
dev
->
tx_req
=
usb_ep_alloc_request
(
dev
->
in_ep
,
0
);
if
(
!
dev
->
tx_req
)
goto
fail
;
goto
fail
1
;
dev
->
rx_req
=
usb_ep_alloc_request
(
dev
->
out_ep
,
0
);
if
(
!
dev
->
rx_req
)
goto
fail
;
goto
fail
2
;
return
0
;
fail:
fail2:
usb_ep_free_request
(
dev
->
in_ep
,
dev
->
tx_req
);
fail1:
error
(
"can't alloc requests"
);
return
-
1
;
}
...
...
@@ -1791,8 +1790,6 @@ static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
}
dev
->
network_started
=
0
;
dev
->
tx_req
=
NULL
;
dev
->
rx_req
=
NULL
;
packet_received
=
0
;
packet_sent
=
0
;
...
...
@@ -1813,6 +1810,7 @@ static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
usb_gadget_handle_interrupts
();
}
packet_received
=
0
;
rx_submit
(
dev
,
dev
->
rx_req
,
0
);
return
0
;
fail:
...
...
@@ -1823,15 +1821,13 @@ static int usb_eth_send(struct eth_device *netdev,
volatile
void
*
packet
,
int
length
)
{
int
retval
;
struct
usb_request
*
req
=
NULL
;
struct
eth_dev
*
dev
=
&
l_ethdev
;
struct
usb_request
*
req
=
dev
->
tx_req
;
unsigned
long
ts
;
unsigned
long
timeout
=
USB_CONNECT_TIMEOUT
;
debug
(
"%s:...
\n
"
,
__func__
);
req
=
dev
->
tx_req
;
req
->
buf
=
(
void
*
)
packet
;
req
->
context
=
NULL
;
req
->
complete
=
tx_complete
;
...
...
@@ -1883,8 +1879,7 @@ static int usb_eth_recv(struct eth_device *netdev)
NetReceive
(
NetRxPackets
[
0
],
dev
->
rx_req
->
length
);
packet_received
=
0
;
if
(
dev
->
rx_req
)
rx_submit
(
dev
,
dev
->
rx_req
,
0
);
rx_submit
(
dev
,
dev
->
rx_req
,
0
);
}
else
error
(
"dev->rx_req invalid"
);
}
...
...
drivers/usb/host/ohci-hcd.c
浏览文件 @
9de99326
...
...
@@ -1529,7 +1529,7 @@ int submit_common_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
if
(
usb_pipebulk
(
pipe
))
timeout
=
BULK_TO
;
else
timeout
=
100
;
timeout
=
100
0
;
/* wait for it to complete */
for
(;;)
{
...
...
drivers/usb/musb/musb_hcd.c
浏览文件 @
9de99326
...
...
@@ -144,19 +144,28 @@ static void write_toggle(struct usb_device *dev, u8 ep, u8 dir_out)
u16
csr
;
if
(
dir_out
)
{
if
(
!
toggle
)
writew
(
MUSB_TXCSR_CLRDATATOG
,
&
musbr
->
txcsr
);
else
{
csr
=
readw
(
&
musbr
->
txcsr
);
csr
=
readw
(
&
musbr
->
txcsr
);
if
(
!
toggle
)
{
if
(
csr
&
MUSB_TXCSR_MODE
)
csr
=
MUSB_TXCSR_CLRDATATOG
;
else
csr
=
0
;
writew
(
csr
,
&
musbr
->
txcsr
);
}
else
{
csr
|=
MUSB_TXCSR_H_WR_DATATOGGLE
;
writew
(
csr
,
&
musbr
->
txcsr
);
csr
|=
(
toggle
<<
MUSB_TXCSR_H_DATATOGGLE_SHIFT
);
writew
(
csr
,
&
musbr
->
txcsr
);
}
}
else
{
if
(
!
toggle
)
writew
(
MUSB_RXCSR_CLRDATATOG
,
&
musbr
->
rxcsr
);
else
{
if
(
!
toggle
)
{
csr
=
readw
(
&
musbr
->
txcsr
);
if
(
csr
&
MUSB_TXCSR_MODE
)
csr
=
MUSB_RXCSR_CLRDATATOG
;
else
csr
=
0
;
writew
(
csr
,
&
musbr
->
rxcsr
);
}
else
{
csr
=
readw
(
&
musbr
->
rxcsr
);
csr
|=
MUSB_RXCSR_H_WR_DATATOGGLE
;
writew
(
csr
,
&
musbr
->
rxcsr
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录