Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OS
U-Boot.Mirror
提交
a08ded4e
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,发现更多精彩内容 >>
提交
a08ded4e
编写于
11月 16, 2007
作者:
W
Wolfgang Denk
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://www.denx.de/git/u-boot-net
上级
1ce55151
1f103105
变更
6
展开全部
显示空白变更内容
内联
并排
Showing
6 changed file
with
1227 addition
and
179 deletion
+1227
-179
common/cmd_mii.c
common/cmd_mii.c
+6
-2
common/miiphyutil.c
common/miiphyutil.c
+156
-126
drivers/Makefile
drivers/Makefile
+1
-1
drivers/uli526x.c
drivers/uli526x.c
+996
-0
include/miiphy.h
include/miiphy.h
+64
-50
net/eth.c
net/eth.c
+4
-0
未找到文件。
common/cmd_mii.c
浏览文件 @
a08ded4e
...
...
@@ -112,9 +112,11 @@ int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
"OUI = 0x%04X, "
"Model = 0x%02X, "
"Rev = 0x%02X, "
"%3dbase
T
, %s
\n
"
,
"%3dbase
%s
, %s
\n
"
,
j
,
oui
,
model
,
rev
,
miiphy_speed
(
devname
,
j
),
miiphy_is_1000base_x
(
devname
,
j
)
?
"X"
:
"T"
,
(
miiphy_duplex
(
devname
,
j
)
==
FULL
)
?
"FDX"
:
"HDX"
);
}
...
...
@@ -496,9 +498,11 @@ int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
"OUI = 0x%04X, "
"Model = 0x%02X, "
"Rev = 0x%02X, "
"%3dbase
T
, %s
\n
"
,
"%3dbase
%s
, %s
\n
"
,
j
,
oui
,
model
,
rev
,
miiphy_speed
(
devname
,
j
),
miiphy_is_1000base_x
(
devname
,
j
)
?
"X"
:
"T"
,
(
miiphy_duplex
(
devname
,
j
)
==
FULL
)
?
"FDX"
:
"HDX"
);
}
...
...
common/miiphyutil.c
浏览文件 @
a08ded4e
...
...
@@ -49,9 +49,9 @@
struct
mii_dev
{
struct
list_head
link
;
char
*
name
;
int
(
*
read
)
(
char
*
devname
,
unsigned
char
addr
,
int
(
*
read
)
(
char
*
devname
,
unsigned
char
addr
,
unsigned
char
reg
,
unsigned
short
*
value
);
int
(
*
write
)
(
char
*
devname
,
unsigned
char
addr
,
int
(
*
write
)
(
char
*
devname
,
unsigned
char
addr
,
unsigned
char
reg
,
unsigned
short
value
);
};
...
...
@@ -62,9 +62,9 @@ static struct mii_dev *current_mii;
*
* Initialize global data. Need to be called before any other miiphy routine.
*/
void
miiphy_init
()
void
miiphy_init
()
{
INIT_LIST_HEAD
(
&
mii_devs
);
INIT_LIST_HEAD
(
&
mii_devs
);
current_mii
=
NULL
;
}
...
...
@@ -72,10 +72,10 @@ void miiphy_init()
*
* Register read and write MII access routines for the device <name>.
*/
void
miiphy_register
(
char
*
name
,
int
(
*
read
)
(
char
*
devname
,
unsigned
char
addr
,
void
miiphy_register
(
char
*
name
,
int
(
*
read
)
(
char
*
devname
,
unsigned
char
addr
,
unsigned
char
reg
,
unsigned
short
*
value
),
int
(
*
write
)
(
char
*
devname
,
unsigned
char
addr
,
int
(
*
write
)
(
char
*
devname
,
unsigned
char
addr
,
unsigned
char
reg
,
unsigned
short
value
))
{
struct
list_head
*
entry
;
...
...
@@ -84,63 +84,64 @@ void miiphy_register(char *name,
unsigned
int
name_len
;
/* check if we have unique name */
list_for_each
(
entry
,
&
mii_devs
)
{
miidev
=
list_entry
(
entry
,
struct
mii_dev
,
link
);
if
(
strcmp
(
miidev
->
name
,
name
)
==
0
)
{
printf
(
"miiphy_register: non unique device name '%s'
\n
"
,
name
);
list_for_each
(
entry
,
&
mii_devs
)
{
miidev
=
list_entry
(
entry
,
struct
mii_dev
,
link
);
if
(
strcmp
(
miidev
->
name
,
name
)
==
0
)
{
printf
(
"miiphy_register: non unique device name "
"'%s'
\n
"
,
name
);
return
;
}
}
/* allocate memory */
name_len
=
strlen
(
name
);
new_dev
=
(
struct
mii_dev
*
)
malloc
(
sizeof
(
struct
mii_dev
)
+
name_len
+
1
);
name_len
=
strlen
(
name
);
new_dev
=
(
struct
mii_dev
*
)
malloc
(
sizeof
(
struct
mii_dev
)
+
name_len
+
1
);
if
(
new_dev
==
NULL
)
{
printf
(
"miiphy_register: cannot allocate memory for '%s'
\n
"
,
if
(
new_dev
==
NULL
)
{
printf
(
"miiphy_register: cannot allocate memory for '%s'
\n
"
,
name
);
return
;
}
memset
(
new_dev
,
0
,
sizeof
(
struct
mii_dev
)
+
name_len
);
memset
(
new_dev
,
0
,
sizeof
(
struct
mii_dev
)
+
name_len
);
/* initalize mii_dev struct fields */
INIT_LIST_HEAD
(
&
new_dev
->
link
);
INIT_LIST_HEAD
(
&
new_dev
->
link
);
new_dev
->
read
=
read
;
new_dev
->
write
=
write
;
new_dev
->
name
=
(
char
*
)(
new_dev
+
1
);
strncpy
(
new_dev
->
name
,
name
,
name_len
);
strncpy
(
new_dev
->
name
,
name
,
name_len
);
new_dev
->
name
[
name_len
]
=
'\0'
;
debug
(
"miiphy_register: added '%s', read=0x%08lx, write=0x%08lx
\n
"
,
debug
(
"miiphy_register: added '%s', read=0x%08lx, write=0x%08lx
\n
"
,
new_dev
->
name
,
new_dev
->
read
,
new_dev
->
write
);
/* add it to the list */
list_add_tail
(
&
new_dev
->
link
,
&
mii_devs
);
list_add_tail
(
&
new_dev
->
link
,
&
mii_devs
);
if
(
!
current_mii
)
current_mii
=
new_dev
;
}
int
miiphy_set_current_dev
(
char
*
devname
)
int
miiphy_set_current_dev
(
char
*
devname
)
{
struct
list_head
*
entry
;
struct
mii_dev
*
dev
;
list_for_each
(
entry
,
&
mii_devs
)
{
dev
=
list_entry
(
entry
,
struct
mii_dev
,
link
);
list_for_each
(
entry
,
&
mii_devs
)
{
dev
=
list_entry
(
entry
,
struct
mii_dev
,
link
);
if
(
strcmp
(
devname
,
dev
->
name
)
==
0
)
{
if
(
strcmp
(
devname
,
dev
->
name
)
==
0
)
{
current_mii
=
dev
;
return
0
;
}
}
printf
(
"No such device: %s
\n
"
,
devname
);
printf
(
"No such device: %s
\n
"
,
devname
);
return
1
;
}
char
*
miiphy_get_current_dev
()
char
*
miiphy_get_current_dev
()
{
if
(
current_mii
)
return
current_mii
->
name
;
...
...
@@ -156,7 +157,7 @@ char *miiphy_get_current_dev()
* Returns:
* 0 on success
*/
int
miiphy_read
(
char
*
devname
,
unsigned
char
addr
,
unsigned
char
reg
,
int
miiphy_read
(
char
*
devname
,
unsigned
char
addr
,
unsigned
char
reg
,
unsigned
short
*
value
)
{
struct
list_head
*
entry
;
...
...
@@ -165,22 +166,22 @@ int miiphy_read(char *devname, unsigned char addr, unsigned char reg,
int
read_ret
=
0
;
if
(
!
devname
)
{
printf
(
"NULL device name!
\n
"
);
printf
(
"NULL device name!
\n
"
);
return
1
;
}
list_for_each
(
entry
,
&
mii_devs
)
{
dev
=
list_entry
(
entry
,
struct
mii_dev
,
link
);
list_for_each
(
entry
,
&
mii_devs
)
{
dev
=
list_entry
(
entry
,
struct
mii_dev
,
link
);
if
(
strcmp
(
devname
,
dev
->
name
)
==
0
)
{
if
(
strcmp
(
devname
,
dev
->
name
)
==
0
)
{
found_dev
=
1
;
read_ret
=
dev
->
read
(
devname
,
addr
,
reg
,
value
);
read_ret
=
dev
->
read
(
devname
,
addr
,
reg
,
value
);
break
;
}
}
if
(
found_dev
==
0
)
printf
(
"No such device: %s
\n
"
,
devname
);
printf
(
"No such device: %s
\n
"
,
devname
);
return
((
found_dev
)
?
read_ret
:
1
);
}
...
...
@@ -193,7 +194,7 @@ int miiphy_read(char *devname, unsigned char addr, unsigned char reg,
* Returns:
* 0 on success
*/
int
miiphy_write
(
char
*
devname
,
unsigned
char
addr
,
unsigned
char
reg
,
int
miiphy_write
(
char
*
devname
,
unsigned
char
addr
,
unsigned
char
reg
,
unsigned
short
value
)
{
struct
list_head
*
entry
;
...
...
@@ -202,22 +203,22 @@ int miiphy_write(char *devname, unsigned char addr, unsigned char reg,
int
write_ret
=
0
;
if
(
!
devname
)
{
printf
(
"NULL device name!
\n
"
);
printf
(
"NULL device name!
\n
"
);
return
1
;
}
list_for_each
(
entry
,
&
mii_devs
)
{
dev
=
list_entry
(
entry
,
struct
mii_dev
,
link
);
list_for_each
(
entry
,
&
mii_devs
)
{
dev
=
list_entry
(
entry
,
struct
mii_dev
,
link
);
if
(
strcmp
(
devname
,
dev
->
name
)
==
0
)
{
if
(
strcmp
(
devname
,
dev
->
name
)
==
0
)
{
found_dev
=
1
;
write_ret
=
dev
->
write
(
devname
,
addr
,
reg
,
value
);
write_ret
=
dev
->
write
(
devname
,
addr
,
reg
,
value
);
break
;
}
}
if
(
found_dev
==
0
)
printf
(
"No such device: %s
\n
"
,
devname
);
printf
(
"No such device: %s
\n
"
,
devname
);
return
((
found_dev
)
?
write_ret
:
1
);
}
...
...
@@ -226,23 +227,22 @@ int miiphy_write(char *devname, unsigned char addr, unsigned char reg,
*
* Print out list of registered MII capable devices.
*/
void
miiphy_listdev
(
void
)
void
miiphy_listdev
(
void
)
{
struct
list_head
*
entry
;
struct
mii_dev
*
dev
;
puts
(
"MII devices: "
);
list_for_each
(
entry
,
&
mii_devs
)
{
dev
=
list_entry
(
entry
,
struct
mii_dev
,
link
);
printf
(
"'%s' "
,
dev
->
name
);
puts
(
"MII devices: "
);
list_for_each
(
entry
,
&
mii_devs
)
{
dev
=
list_entry
(
entry
,
struct
mii_dev
,
link
);
printf
(
"'%s' "
,
dev
->
name
);
}
puts
(
"
\n
"
);
puts
(
"
\n
"
);
if
(
current_mii
)
printf
(
"Current device: '%s'
\n
"
,
current_mii
->
name
);
printf
(
"Current device: '%s'
\n
"
,
current_mii
->
name
);
}
/*****************************************************************************
*
* Read the OUI, manufacture's model number, and revision number.
...
...
@@ -254,9 +254,7 @@ void miiphy_listdev(void)
* Returns:
* 0 on success
*/
int
miiphy_info
(
char
*
devname
,
unsigned
char
addr
,
unsigned
int
*
oui
,
int
miiphy_info
(
char
*
devname
,
unsigned
char
addr
,
unsigned
int
*
oui
,
unsigned
char
*
model
,
unsigned
char
*
rev
)
{
unsigned
int
reg
=
0
;
...
...
@@ -288,13 +286,12 @@ int miiphy_info (char *devname,
#ifdef DEBUG
printf
(
"PHY_PHYIDR[1,2] @ 0x%x = 0x%08x
\n
"
,
addr
,
reg
);
#endif
*
oui
=
(
reg
>>
10
);
*
model
=
(
unsigned
char
)
((
reg
>>
4
)
&
0x0000003F
);
*
rev
=
(
unsigned
char
)
(
reg
&
0x0000000F
);
*
oui
=
(
reg
>>
10
);
*
model
=
(
unsigned
char
)
((
reg
>>
4
)
&
0x0000003F
);
*
rev
=
(
unsigned
char
)(
reg
&
0x0000000F
);
return
(
0
);
}
/*****************************************************************************
*
* Reset the PHY.
...
...
@@ -345,104 +342,138 @@ int miiphy_reset (char *devname, unsigned char addr)
return
(
0
);
}
/*****************************************************************************
*
* Determine the ethernet speed (10/100
)
.
* Determine the ethernet speed (10/100
/1000). Return 10 on error
.
*/
int
miiphy_speed
(
char
*
devname
,
unsigned
char
addr
)
{
u
nsigned
short
reg
;
u
16
bmcr
,
anlpar
;
#if defined(CONFIG_PHY_GIGE)
if
(
miiphy_read
(
devname
,
addr
,
PHY_1000BTSR
,
&
reg
))
{
printf
(
"PHY 1000BT Status read failed
\n
"
);
}
else
{
if
(
reg
!=
0xFFFF
)
{
if
((
reg
&
(
PHY_1000BTSR_1000FD
|
PHY_1000BTSR_1000HD
))
!=
0
)
{
return
(
_1000BASET
);
u16
btsr
;
/*
* Check for 1000BASE-X. If it is supported, then assume that the speed
* is 1000.
*/
if
(
miiphy_is_1000base_x
(
devname
,
addr
))
{
return
_1000BASET
;
}
/*
* No 1000BASE-X, so assume 1000BASE-T/100BASE-TX/10BASE-T register set.
*/
/* Check for 1000BASE-T. */
if
(
miiphy_read
(
devname
,
addr
,
PHY_1000BTSR
,
&
btsr
))
{
printf
(
"PHY 1000BT status"
);
goto
miiphy_read_failed
;
}
if
(
btsr
!=
0xFFFF
&&
(
btsr
&
(
PHY_1000BTSR_1000FD
|
PHY_1000BTSR_1000HD
)))
{
return
_1000BASET
;
}
#endif
/* CONFIG_PHY_GIGE */
/* Check Basic Management Control Register first. */
if
(
miiphy_read
(
devname
,
addr
,
PHY_BMCR
,
&
reg
))
{
p
uts
(
"PHY speed read failed, assuming 10bT
\n
"
);
return
(
_10BASET
)
;
if
(
miiphy_read
(
devname
,
addr
,
PHY_BMCR
,
&
bmcr
))
{
p
rintf
(
"PHY speed
"
);
goto
miiphy_read_failed
;
}
/* Check if auto-negotiation is on. */
if
(
(
reg
&
PHY_BMCR_AUTON
)
!=
0
)
{
if
(
bmcr
&
PHY_BMCR_AUTON
)
{
/* Get auto-negotiation results. */
if
(
miiphy_read
(
devname
,
addr
,
PHY_ANLPAR
,
&
reg
))
{
puts
(
"PHY AN speed read failed, assuming 10bT
\n
"
);
return
(
_10BASET
);
}
if
((
reg
&
PHY_ANLPAR_100
)
!=
0
)
{
return
(
_100BASET
);
}
else
{
return
(
_10BASET
);
if
(
miiphy_read
(
devname
,
addr
,
PHY_ANLPAR
,
&
anlpar
))
{
printf
(
"PHY AN speed"
);
goto
miiphy_read_failed
;
}
return
(
anlpar
&
PHY_ANLPAR_100
)
?
_100BASET
:
_10BASET
;
}
/* Get speed from basic control settings. */
else
if
(
reg
&
PHY_BMCR_100MB
)
{
return
(
_100BASET
);
}
else
{
return
(
_10BASET
);
}
return
(
bmcr
&
PHY_BMCR_100MB
)
?
_100BASET
:
_10BASET
;
miiphy_read_failed:
printf
(
" read failed, assuming 10BASE-T
\n
"
);
return
_10BASET
;
}
/*****************************************************************************
*
* Determine full/half duplex.
* Determine full/half duplex.
Return half on error.
*/
int
miiphy_duplex
(
char
*
devname
,
unsigned
char
addr
)
{
u
nsigned
short
reg
;
u
16
bmcr
,
anlpar
;
#if defined(CONFIG_PHY_GIGE)
if
(
miiphy_read
(
devname
,
addr
,
PHY_1000BTSR
,
&
reg
))
{
printf
(
"PHY 1000BT Status read failed
\n
"
);
}
else
{
if
(
(
reg
!=
0xFFFF
)
&&
(
reg
&
(
PHY_1000BTSR_1000FD
|
PHY_1000BTSR_1000HD
))
)
{
if
((
reg
&
PHY_1000BTSR_1000FD
)
!=
0
)
{
return
(
FULL
);
}
else
{
return
(
HALF
);
u16
btsr
;
/* Check for 1000BASE-X. */
if
(
miiphy_is_1000base_x
(
devname
,
addr
))
{
/* 1000BASE-X */
if
(
miiphy_read
(
devname
,
addr
,
PHY_ANLPAR
,
&
anlpar
))
{
printf
(
"1000BASE-X PHY AN duplex"
);
goto
miiphy_read_failed
;
}
}
/*
* No 1000BASE-X, so assume 1000BASE-T/100BASE-TX/10BASE-T register set.
*/
/* Check for 1000BASE-T. */
if
(
miiphy_read
(
devname
,
addr
,
PHY_1000BTSR
,
&
btsr
))
{
printf
(
"PHY 1000BT status"
);
goto
miiphy_read_failed
;
}
if
(
btsr
!=
0xFFFF
)
{
if
(
btsr
&
PHY_1000BTSR_1000FD
)
{
return
FULL
;
}
else
if
(
btsr
&
PHY_1000BTSR_1000HD
)
{
return
HALF
;
}
}
#endif
/* CONFIG_PHY_GIGE */
/* Check Basic Management Control Register first. */
if
(
miiphy_read
(
devname
,
addr
,
PHY_BMCR
,
&
reg
))
{
puts
(
"PHY duplex
read failed, assuming half duplex
\n
"
);
return
(
HALF
)
;
if
(
miiphy_read
(
devname
,
addr
,
PHY_BMCR
,
&
bmcr
))
{
puts
(
"PHY duplex"
);
goto
miiphy_read_failed
;
}
/* Check if auto-negotiation is on. */
if
(
(
reg
&
PHY_BMCR_AUTON
)
!=
0
)
{
if
(
bmcr
&
PHY_BMCR_AUTON
)
{
/* Get auto-negotiation results. */
if
(
miiphy_read
(
devname
,
addr
,
PHY_ANLPAR
,
&
reg
))
{
puts
(
"PHY AN duplex read failed, assuming half duplex
\n
"
);
return
(
HALF
);
}
if
((
reg
&
(
PHY_ANLPAR_10FD
|
PHY_ANLPAR_TXFD
))
!=
0
)
{
return
(
FULL
);
}
else
{
return
(
HALF
);
if
(
miiphy_read
(
devname
,
addr
,
PHY_ANLPAR
,
&
anlpar
))
{
puts
(
"PHY AN duplex"
);
goto
miiphy_read_failed
;
}
return
(
anlpar
&
(
PHY_ANLPAR_10FD
|
PHY_ANLPAR_TXFD
))
?
FULL
:
HALF
;
}
/* Get speed from basic control settings. */
else
if
(
reg
&
PHY_BMCR_DPLX
)
{
return
(
FULL
);
}
else
{
return
(
HALF
);
}
return
(
bmcr
&
PHY_BMCR_DPLX
)
?
FULL
:
HALF
;
miiphy_read_failed:
printf
(
" read failed, assuming half duplex
\n
"
);
return
HALF
;
}
/*****************************************************************************
*
* Return 1 if PHY supports 1000BASE-X, 0 if PHY supports 10BASE-T/100BASE-TX/
* 1000BASE-T, or on error.
*/
int
miiphy_is_1000base_x
(
char
*
devname
,
unsigned
char
addr
)
{
#if defined(CONFIG_PHY_GIGE)
u16
exsr
;
if
(
miiphy_read
(
devname
,
addr
,
PHY_EXSR
,
&
exsr
))
{
printf
(
"PHY extended status read failed, assuming no "
"1000BASE-X
\n
"
);
return
0
;
}
return
0
!=
(
exsr
&
(
PHY_EXSR_1000XF
|
PHY_EXSR_1000XH
));
#else
return
0
;
#endif
}
#ifdef CFG_FAULT_ECHO_LINK_DOWN
...
...
@@ -455,7 +486,7 @@ int miiphy_link (char *devname, unsigned char addr)
unsigned
short
reg
;
/* dummy read; needed to latch some phys */
(
void
)
miiphy_read
(
devname
,
addr
,
PHY_BMSR
,
&
reg
);
(
void
)
miiphy_read
(
devname
,
addr
,
PHY_BMSR
,
&
reg
);
if
(
miiphy_read
(
devname
,
addr
,
PHY_BMSR
,
&
reg
))
{
puts
(
"PHY_BMSR read failed, assuming no link
\n
"
);
return
(
0
);
...
...
@@ -469,5 +500,4 @@ int miiphy_link (char *devname, unsigned char addr)
}
}
#endif
#endif
/* CONFIG_MII */
drivers/Makefile
浏览文件 @
a08ded4e
...
...
@@ -41,7 +41,7 @@ COBJS = 3c589.o 5701rls.o ali512x.o at45.o ata_piix.o \
omap24xx_i2c.o pc_keyb.o
\
pci.o pci_auto.o pci_indirect.o
\
pcnet.o plb2800_eth.o ps2ser.o ps2mult.o pxa_pcmcia.o
\
rpx_pcmcia.o rtl8019.o rtl8139.o rtl8169.o
\
rpx_pcmcia.o rtl8019.o rtl8139.o rtl8169.o
uli526x.o
\
s3c4510b_eth.o s3c4510b_uart.o
\
sed13806.o sed156x.o
\
serial.o serial_max3100.o
\
...
...
drivers/uli526x.c
0 → 100644
浏览文件 @
a08ded4e
此差异已折叠。
点击以展开。
include/miiphy.h
浏览文件 @
a08ded4e
...
...
@@ -26,45 +26,38 @@
|
| Author: Mark Wisner
|
| Change Activity-
|
| Date Description of Change BY
| --------- --------------------- ---
| 04-May-99 Created MKW
| 07-Jul-99 Added full duplex support MKW
| 08-Sep-01 Tweaks gvb
|
+----------------------------------------------------------------------------*/
#ifndef _miiphy_h_
#define _miiphy_h_
#include <net.h>
int
miiphy_read
(
char
*
devname
,
unsigned
char
addr
,
unsigned
char
reg
,
int
miiphy_read
(
char
*
devname
,
unsigned
char
addr
,
unsigned
char
reg
,
unsigned
short
*
value
);
int
miiphy_write
(
char
*
devname
,
unsigned
char
addr
,
unsigned
char
reg
,
int
miiphy_write
(
char
*
devname
,
unsigned
char
addr
,
unsigned
char
reg
,
unsigned
short
value
);
int
miiphy_info
(
char
*
devname
,
unsigned
char
addr
,
unsigned
int
*
oui
,
int
miiphy_info
(
char
*
devname
,
unsigned
char
addr
,
unsigned
int
*
oui
,
unsigned
char
*
model
,
unsigned
char
*
rev
);
int
miiphy_reset
(
char
*
devname
,
unsigned
char
addr
);
int
miiphy_speed
(
char
*
devname
,
unsigned
char
addr
);
int
miiphy_duplex
(
char
*
devname
,
unsigned
char
addr
);
int
miiphy_reset
(
char
*
devname
,
unsigned
char
addr
);
int
miiphy_speed
(
char
*
devname
,
unsigned
char
addr
);
int
miiphy_duplex
(
char
*
devname
,
unsigned
char
addr
);
int
miiphy_is_1000base_x
(
char
*
devname
,
unsigned
char
addr
);
#ifdef CFG_FAULT_ECHO_LINK_DOWN
int
miiphy_link
(
char
*
devname
,
unsigned
char
addr
);
int
miiphy_link
(
char
*
devname
,
unsigned
char
addr
);
#endif
void
miiphy_init
(
void
);
void
miiphy_init
(
void
);
void
miiphy_register
(
char
*
devname
,
int
(
*
read
)
(
char
*
devname
,
unsigned
char
addr
,
void
miiphy_register
(
char
*
devname
,
int
(
*
read
)
(
char
*
devname
,
unsigned
char
addr
,
unsigned
char
reg
,
unsigned
short
*
value
),
int
(
*
write
)
(
char
*
devname
,
unsigned
char
addr
,
int
(
*
write
)
(
char
*
devname
,
unsigned
char
addr
,
unsigned
char
reg
,
unsigned
short
value
));
int
miiphy_set_current_dev
(
char
*
devname
);
char
*
miiphy_get_current_dev
(
void
);
int
miiphy_set_current_dev
(
char
*
devname
);
char
*
miiphy_get_current_dev
(
void
);
void
miiphy_listdev
(
void
);
void
miiphy_listdev
(
void
);
#define BB_MII_DEVNAME "bbmii"
...
...
@@ -93,6 +86,7 @@ int bb_miiphy_write (char *devname, unsigned char addr,
#define PHY_ANLPNP 0x08
#define PHY_1000BTCR 0x09
#define PHY_1000BTSR 0x0A
#define PHY_EXSR 0x0F
#define PHY_PHYSTS 0x10
#define PHY_MIPSCR 0x11
#define PHY_MIPGSR 0x12
...
...
@@ -126,6 +120,7 @@ int bb_miiphy_write (char *devname, unsigned char addr,
#define PHY_BMSR_100TXH 0x2000
#define PHY_BMSR_10TF 0x1000
#define PHY_BMSR_10TH 0x0800
#define PHY_BMSR_EXT_STAT 0x0100
#define PHY_BMSR_PRE_SUP 0x0040
#define PHY_BMSR_AUTN_COMP 0x0020
#define PHY_BMSR_RF 0x0010
...
...
@@ -138,18 +133,31 @@ int bb_miiphy_write (char *devname, unsigned char addr,
#define PHY_ANLPAR_NP 0x8000
#define PHY_ANLPAR_ACK 0x4000
#define PHY_ANLPAR_RF 0x2000
#define PHY_ANLPAR_ASYMP 0x0800
#define PHY_ANLPAR_PAUSE 0x0400
#define PHY_ANLPAR_T4 0x0200
#define PHY_ANLPAR_TXFD 0x0100
#define PHY_ANLPAR_TX 0x0080
#define PHY_ANLPAR_10FD 0x0040
#define PHY_ANLPAR_10 0x0020
#define PHY_ANLPAR_100 0x0380
/* we can run at 100 */
/* phy ANLPAR 1000BASE-X */
#define PHY_X_ANLPAR_NP 0x8000
#define PHY_X_ANLPAR_ACK 0x4000
#define PHY_X_ANLPAR_RF_MASK 0x3000
#define PHY_X_ANLPAR_PAUSE_MASK 0x0180
#define PHY_X_ANLPAR_HD 0x0040
#define PHY_X_ANLPAR_FD 0x0020
#define PHY_ANLPAR_PSB_MASK 0x001f
#define PHY_ANLPAR_PSB_802_3 0x0001
#define PHY_ANLPAR_PSB_802_9 0x0002
/* PHY_1000BTSR */
/* phy 1000BTCR */
#define PHY_1000BTCR_1000FD 0x0200
#define PHY_1000BTCR_1000HD 0x0100
/* phy 1000BTSR */
#define PHY_1000BTSR_MSCF 0x8000
#define PHY_1000BTSR_MSCR 0x4000
#define PHY_1000BTSR_LRS 0x2000
...
...
@@ -157,4 +165,10 @@ int bb_miiphy_write (char *devname, unsigned char addr,
#define PHY_1000BTSR_1000FD 0x0800
#define PHY_1000BTSR_1000HD 0x0400
/* phy EXSR */
#define PHY_EXSR_1000XF 0x8000
#define PHY_EXSR_1000XH 0x4000
#define PHY_EXSR_1000TF 0x2000
#define PHY_EXSR_1000TH 0x1000
#endif
net/eth.c
浏览文件 @
a08ded4e
...
...
@@ -54,6 +54,7 @@ extern int rtl8169_initialize(bd_t*);
extern
int
scc_initialize
(
bd_t
*
);
extern
int
skge_initialize
(
bd_t
*
);
extern
int
tsi108_eth_initialize
(
bd_t
*
);
extern
int
uli526x_initialize
(
bd_t
*
);
extern
int
tsec_initialize
(
bd_t
*
,
int
,
char
*
);
extern
int
npe_initialize
(
bd_t
*
);
extern
int
uec_initialize
(
int
);
...
...
@@ -238,6 +239,9 @@ int eth_initialize(bd_t *bis)
#if defined(CONFIG_TSI108_ETH)
tsi108_eth_initialize
(
bis
);
#endif
#if defined(CONFIG_ULI526X)
uli526x_initialize
(
bis
);
#endif
#if defined(CONFIG_RTL8139)
rtl8139_initialize
(
bis
);
#endif
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录