Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
ea5a43db
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ea5a43db
编写于
2月 19, 2011
作者:
M
Marc Kleine-Budde
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ax88796: don't use magic ei_status to acces private data
Signed-off-by:
N
Marc Kleine-Budde
<
mkl@pengutronix.de
>
上级
9f072429
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
42 addition
and
39 deletion
+42
-39
drivers/net/ax88796.c
drivers/net/ax88796.c
+42
-39
未找到文件。
drivers/net/ax88796.c
浏览文件 @
ea5a43db
...
...
@@ -152,8 +152,8 @@ static void ax_reset_8390(struct net_device *dev)
ei_outb
(
ei_inb
(
addr
+
NE_RESET
),
addr
+
NE_RESET
);
ei_
status
.
txing
=
0
;
ei_
status
.
dmaing
=
0
;
ei_
local
->
txing
=
0
;
ei_
local
->
dmaing
=
0
;
/* This check _should_not_ be necessary, omit eventually. */
while
((
ei_inb
(
addr
+
EN0_ISR
)
&
ENISR_RESET
)
==
0
)
{
...
...
@@ -176,15 +176,15 @@ static void ax_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr,
void
__iomem
*
nic_base
=
ei_local
->
mem
;
/* This *shouldn't* happen. If it does, it's the last thing you'll see */
if
(
ei_
status
.
dmaing
)
{
if
(
ei_
local
->
dmaing
)
{
dev_err
(
&
ax
->
dev
->
dev
,
"%s: DMAing conflict in %s "
"[DMAstat:%d][irqlock:%d].
\n
"
,
dev
->
name
,
__func__
,
ei_
status
.
dmaing
,
ei_status
.
irqlock
);
ei_
local
->
dmaing
,
ei_local
->
irqlock
);
return
;
}
ei_
status
.
dmaing
|=
0x01
;
ei_
local
->
dmaing
|=
0x01
;
ei_outb
(
E8390_NODMA
+
E8390_PAGE0
+
E8390_START
,
nic_base
+
NE_CMD
);
ei_outb
(
sizeof
(
struct
e8390_pkt_hdr
),
nic_base
+
EN0_RCNTLO
);
ei_outb
(
0
,
nic_base
+
EN0_RCNTHI
);
...
...
@@ -192,7 +192,7 @@ static void ax_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr,
ei_outb
(
ring_page
,
nic_base
+
EN0_RSARHI
);
ei_outb
(
E8390_RREAD
+
E8390_START
,
nic_base
+
NE_CMD
);
if
(
ei_
status
.
word16
)
if
(
ei_
local
->
word16
)
readsw
(
nic_base
+
NE_DATAPORT
,
hdr
,
sizeof
(
struct
e8390_pkt_hdr
)
>>
1
);
else
...
...
@@ -200,7 +200,7 @@ static void ax_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr,
sizeof
(
struct
e8390_pkt_hdr
));
ei_outb
(
ENISR_RDC
,
nic_base
+
EN0_ISR
);
/* Ack intr. */
ei_
status
.
dmaing
&=
~
0x01
;
ei_
local
->
dmaing
&=
~
0x01
;
le16_to_cpus
(
&
hdr
->
count
);
}
...
...
@@ -221,16 +221,16 @@ static void ax_block_input(struct net_device *dev, int count,
void
__iomem
*
nic_base
=
ei_local
->
mem
;
char
*
buf
=
skb
->
data
;
if
(
ei_
status
.
dmaing
)
{
if
(
ei_
local
->
dmaing
)
{
dev_err
(
&
ax
->
dev
->
dev
,
"%s: DMAing conflict in %s "
"[DMAstat:%d][irqlock:%d].
\n
"
,
dev
->
name
,
__func__
,
ei_
status
.
dmaing
,
ei_status
.
irqlock
);
ei_
local
->
dmaing
,
ei_local
->
irqlock
);
return
;
}
ei_
status
.
dmaing
|=
0x01
;
ei_
local
->
dmaing
|=
0x01
;
ei_outb
(
E8390_NODMA
+
E8390_PAGE0
+
E8390_START
,
nic_base
+
NE_CMD
);
ei_outb
(
count
&
0xff
,
nic_base
+
EN0_RCNTLO
);
...
...
@@ -239,7 +239,7 @@ static void ax_block_input(struct net_device *dev, int count,
ei_outb
(
ring_offset
>>
8
,
nic_base
+
EN0_RSARHI
);
ei_outb
(
E8390_RREAD
+
E8390_START
,
nic_base
+
NE_CMD
);
if
(
ei_
status
.
word16
)
{
if
(
ei_
local
->
word16
)
{
readsw
(
nic_base
+
NE_DATAPORT
,
buf
,
count
>>
1
);
if
(
count
&
0x01
)
buf
[
count
-
1
]
=
ei_inb
(
nic_base
+
NE_DATAPORT
);
...
...
@@ -248,7 +248,7 @@ static void ax_block_input(struct net_device *dev, int count,
readsb
(
nic_base
+
NE_DATAPORT
,
buf
,
count
);
}
ei_
status
.
dmaing
&=
~
1
;
ei_
local
->
dmaing
&=
~
1
;
}
static
void
ax_block_output
(
struct
net_device
*
dev
,
int
count
,
...
...
@@ -264,19 +264,19 @@ static void ax_block_output(struct net_device *dev, int count,
* What effect will an odd byte count have on the 8390? I
* should check someday.
*/
if
(
ei_
status
.
word16
&&
(
count
&
0x01
))
if
(
ei_
local
->
word16
&&
(
count
&
0x01
))
count
++
;
/* This *shouldn't* happen. If it does, it's the last thing you'll see */
if
(
ei_
status
.
dmaing
)
{
if
(
ei_
local
->
dmaing
)
{
dev_err
(
&
ax
->
dev
->
dev
,
"%s: DMAing conflict in %s."
"[DMAstat:%d][irqlock:%d]
\n
"
,
dev
->
name
,
__func__
,
ei_
status
.
dmaing
,
ei_status
.
irqlock
);
ei_
local
->
dmaing
,
ei_local
->
irqlock
);
return
;
}
ei_
status
.
dmaing
|=
0x01
;
ei_
local
->
dmaing
|=
0x01
;
/* We should already be in page 0, but to be safe... */
ei_outb
(
E8390_PAGE0
+
E8390_START
+
E8390_NODMA
,
nic_base
+
NE_CMD
);
...
...
@@ -289,7 +289,7 @@ static void ax_block_output(struct net_device *dev, int count,
ei_outb
(
start_page
,
nic_base
+
EN0_RSARHI
);
ei_outb
(
E8390_RWRITE
+
E8390_START
,
nic_base
+
NE_CMD
);
if
(
ei_
status
.
word16
)
if
(
ei_
local
->
word16
)
writesw
(
nic_base
+
NE_DATAPORT
,
buf
,
count
>>
1
);
else
writesb
(
nic_base
+
NE_DATAPORT
,
buf
,
count
);
...
...
@@ -307,7 +307,7 @@ static void ax_block_output(struct net_device *dev, int count,
}
ei_outb
(
ENISR_RDC
,
nic_base
+
EN0_ISR
);
/* Ack intr. */
ei_
status
.
dmaing
&=
~
0x01
;
ei_
local
->
dmaing
&=
~
0x01
;
}
/* definitions for accessing MII/EEPROM interface */
...
...
@@ -758,22 +758,22 @@ static int ax_init_dev(struct net_device *dev, int first_init)
ax_reset_8390
(
dev
);
ei_
status
.
name
=
"AX88796"
;
ei_
status
.
tx_start_page
=
start_page
;
ei_
status
.
stop_page
=
stop_page
;
ei_
status
.
word16
=
(
ax
->
plat
->
wordlength
==
2
);
ei_
status
.
rx_start_page
=
start_page
+
TX_PAGES
;
ei_
local
->
name
=
"AX88796"
;
ei_
local
->
tx_start_page
=
start_page
;
ei_
local
->
stop_page
=
stop_page
;
ei_
local
->
word16
=
(
ax
->
plat
->
wordlength
==
2
);
ei_
local
->
rx_start_page
=
start_page
+
TX_PAGES
;
#ifdef PACKETBUF_MEMSIZE
/* Allow the packet buffer size to be overridden by know-it-alls. */
ei_
status
.
stop_page
=
ei_status
.
tx_start_page
+
PACKETBUF_MEMSIZE
;
ei_
local
->
stop_page
=
ei_local
->
tx_start_page
+
PACKETBUF_MEMSIZE
;
#endif
ei_
status
.
reset_8390
=
&
ax_reset_8390
;
ei_
status
.
block_input
=
&
ax_block_input
;
ei_
status
.
block_output
=
&
ax_block_output
;
ei_
status
.
get_8390_hdr
=
&
ax_get_8390_hdr
;
ei_
status
.
priv
=
0
;
ei_
local
->
reset_8390
=
&
ax_reset_8390
;
ei_
local
->
block_input
=
&
ax_block_input
;
ei_
local
->
block_output
=
&
ax_block_output
;
ei_
local
->
get_8390_hdr
=
&
ax_get_8390_hdr
;
ei_
local
->
priv
=
0
;
dev
->
netdev_ops
=
&
ax_netdev_ops
;
dev
->
ethtool_ops
=
&
ax_ethtool_ops
;
...
...
@@ -792,7 +792,7 @@ static int ax_init_dev(struct net_device *dev, int first_init)
if
(
first_init
)
dev_info
(
&
ax
->
dev
->
dev
,
"%dbit, irq %d, %lx, MAC: %pM
\n
"
,
ei_
status
.
word16
?
16
:
8
,
dev
->
irq
,
dev
->
base_addr
,
ei_
local
->
word16
?
16
:
8
,
dev
->
irq
,
dev
->
base_addr
,
dev
->
dev_addr
);
ret
=
register_netdev
(
dev
);
...
...
@@ -811,6 +811,7 @@ static int ax_init_dev(struct net_device *dev, int first_init)
static
int
ax_remove
(
struct
platform_device
*
_dev
)
{
struct
net_device
*
dev
=
platform_get_drvdata
(
_dev
);
struct
ei_device
*
ei_local
=
netdev_priv
(
dev
);
struct
ax_device
*
ax
;
ax
=
to_ax_dev
(
dev
);
...
...
@@ -818,7 +819,7 @@ static int ax_remove(struct platform_device *_dev)
unregister_netdev
(
dev
);
free_irq
(
dev
->
irq
,
dev
);
iounmap
(
ei_
status
.
mem
);
iounmap
(
ei_
local
->
mem
);
release_resource
(
ax
->
mem
);
kfree
(
ax
->
mem
);
...
...
@@ -843,6 +844,7 @@ static int ax_remove(struct platform_device *_dev)
static
int
ax_probe
(
struct
platform_device
*
pdev
)
{
struct
net_device
*
dev
;
struct
ei_device
*
ei_local
;
struct
ax_device
*
ax
;
struct
resource
*
res
;
size_t
size
;
...
...
@@ -853,6 +855,7 @@ static int ax_probe(struct platform_device *pdev)
return
-
ENOMEM
;
/* ok, let's setup our device */
ei_local
=
netdev_priv
(
dev
);
ax
=
to_ax_dev
(
dev
);
memset
(
ax
,
0
,
sizeof
(
struct
ax_device
));
...
...
@@ -863,7 +866,7 @@ static int ax_probe(struct platform_device *pdev)
ax
->
plat
=
pdev
->
dev
.
platform_data
;
platform_set_drvdata
(
pdev
,
dev
);
ei_
status
.
rxcr_base
=
ax
->
plat
->
rcr_val
;
ei_
local
->
rxcr_base
=
ax
->
plat
->
rcr_val
;
/* find the platform resources */
res
=
platform_get_resource
(
pdev
,
IORESOURCE_IRQ
,
0
);
...
...
@@ -890,9 +893,9 @@ static int ax_probe(struct platform_device *pdev)
* by using the size of the resource provided
*/
if
(
ax
->
plat
->
reg_offsets
)
ei_
status
.
reg_offset
=
ax
->
plat
->
reg_offsets
;
ei_
local
->
reg_offset
=
ax
->
plat
->
reg_offsets
;
else
{
ei_
status
.
reg_offset
=
ax
->
reg_offsets
;
ei_
local
->
reg_offset
=
ax
->
reg_offsets
;
for
(
ret
=
0
;
ret
<
0x18
;
ret
++
)
ax
->
reg_offsets
[
ret
]
=
(
size
/
0x18
)
*
ret
;
}
...
...
@@ -904,10 +907,10 @@ static int ax_probe(struct platform_device *pdev)
goto
exit_mem
;
}
ei_
status
.
mem
=
ioremap
(
res
->
start
,
size
);
dev
->
base_addr
=
(
unsigned
long
)
ei_
status
.
mem
;
ei_
local
->
mem
=
ioremap
(
res
->
start
,
size
);
dev
->
base_addr
=
(
unsigned
long
)
ei_
local
->
mem
;
if
(
ei_
status
.
mem
==
NULL
)
{
if
(
ei_
local
->
mem
==
NULL
)
{
dev_err
(
&
pdev
->
dev
,
"Cannot ioremap area (%08llx,%08llx)
\n
"
,
(
unsigned
long
long
)
res
->
start
,
(
unsigned
long
long
)
res
->
end
);
...
...
@@ -943,7 +946,7 @@ static int ax_probe(struct platform_device *pdev)
goto
exit_mem2
;
}
ei_
status
.
reg_offset
[
0x1f
]
=
ax
->
map2
-
ei_status
.
mem
;
ei_
local
->
reg_offset
[
0x1f
]
=
ax
->
map2
-
ei_local
->
mem
;
}
/* got resources, now initialise and register device */
...
...
@@ -962,7 +965,7 @@ static int ax_probe(struct platform_device *pdev)
kfree
(
ax
->
mem2
);
exit_mem1:
iounmap
(
ei_
status
.
mem
);
iounmap
(
ei_
local
->
mem
);
exit_req:
release_resource
(
ax
->
mem
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录