Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
7f02d002
Commit
7f02d002
authored
Jan 06, 2005
by
Alexander Viro
Committed by
Jeff Garzik
Jan 06, 2005
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] hamachi iomem annotations
Signed-off-by:
Jeff Garzik
<
jgarzik@pobox.com
>
parent
17c45e12
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
43 additions
and
38 deletions
+43
-38
drivers/net/hamachi.c
drivers/net/hamachi.c
+43
-38
No files found.
drivers/net/hamachi.c
View file @
7f02d002
...
@@ -512,6 +512,7 @@ struct hamachi_private {
...
@@ -512,6 +512,7 @@ struct hamachi_private {
u32
rx_int_var
,
tx_int_var
;
/* interrupt control variables */
u32
rx_int_var
,
tx_int_var
;
/* interrupt control variables */
u32
option
;
/* Hold on to a copy of the options */
u32
option
;
/* Hold on to a copy of the options */
struct
pci_dev
*
pci_dev
;
struct
pci_dev
*
pci_dev
;
void
__iomem
*
base
;
};
};
MODULE_AUTHOR
(
"Donald Becker <becker@scyld.com>, Eric Kasten <kasten@nscl.msu.edu>, Keith Underwood <keithu@parl.clemson.edu>"
);
MODULE_AUTHOR
(
"Donald Becker <becker@scyld.com>, Eric Kasten <kasten@nscl.msu.edu>, Keith Underwood <keithu@parl.clemson.edu>"
);
...
@@ -549,7 +550,7 @@ MODULE_PARM_DESC(options, "GNIC-II Bits 0-3: media type, bits 4-6: as force32, b
...
@@ -549,7 +550,7 @@ MODULE_PARM_DESC(options, "GNIC-II Bits 0-3: media type, bits 4-6: as force32, b
MODULE_PARM_DESC
(
full_duplex
,
"GNIC-II full duplex setting(s) (1)"
);
MODULE_PARM_DESC
(
full_duplex
,
"GNIC-II full duplex setting(s) (1)"
);
MODULE_PARM_DESC
(
force32
,
"GNIC-II: Bit 0: 32 bit PCI, bit 1: disable parity, bit 2: 64 bit PCI (all boards)"
);
MODULE_PARM_DESC
(
force32
,
"GNIC-II: Bit 0: 32 bit PCI, bit 1: disable parity, bit 2: 64 bit PCI (all boards)"
);
static
int
read_eeprom
(
long
ioaddr
,
int
location
);
static
int
read_eeprom
(
void
__iomem
*
ioaddr
,
int
location
);
static
int
mdio_read
(
struct
net_device
*
dev
,
int
phy_id
,
int
location
);
static
int
mdio_read
(
struct
net_device
*
dev
,
int
phy_id
,
int
location
);
static
void
mdio_write
(
struct
net_device
*
dev
,
int
phy_id
,
int
location
,
int
value
);
static
void
mdio_write
(
struct
net_device
*
dev
,
int
phy_id
,
int
location
,
int
value
);
static
int
hamachi_open
(
struct
net_device
*
dev
);
static
int
hamachi_open
(
struct
net_device
*
dev
);
...
@@ -575,7 +576,8 @@ static int __devinit hamachi_init_one (struct pci_dev *pdev,
...
@@ -575,7 +576,8 @@ static int __devinit hamachi_init_one (struct pci_dev *pdev,
int
option
,
i
,
rx_int_var
,
tx_int_var
,
boguscnt
;
int
option
,
i
,
rx_int_var
,
tx_int_var
,
boguscnt
;
int
chip_id
=
ent
->
driver_data
;
int
chip_id
=
ent
->
driver_data
;
int
irq
;
int
irq
;
long
ioaddr
;
void
__iomem
*
ioaddr
;
unsigned
long
base
;
static
int
card_idx
;
static
int
card_idx
;
struct
net_device
*
dev
;
struct
net_device
*
dev
;
void
*
ring_space
;
void
*
ring_space
;
...
@@ -594,9 +596,9 @@ static int __devinit hamachi_init_one (struct pci_dev *pdev,
...
@@ -594,9 +596,9 @@ static int __devinit hamachi_init_one (struct pci_dev *pdev,
goto
err_out
;
goto
err_out
;
}
}
ioaddr
=
pci_resource_start
(
pdev
,
0
);
base
=
pci_resource_start
(
pdev
,
0
);
#ifdef __alpha__
/* Really "64 bit addrs" */
#ifdef __alpha__
/* Really "64 bit addrs" */
ioaddr
|=
(
pci_resource_start
(
pdev
,
1
)
<<
32
);
base
|=
(
pci_resource_start
(
pdev
,
1
)
<<
32
);
#endif
#endif
pci_set_master
(
pdev
);
pci_set_master
(
pdev
);
...
@@ -605,7 +607,7 @@ static int __devinit hamachi_init_one (struct pci_dev *pdev,
...
@@ -605,7 +607,7 @@ static int __devinit hamachi_init_one (struct pci_dev *pdev,
if
(
i
)
return
i
;
if
(
i
)
return
i
;
irq
=
pdev
->
irq
;
irq
=
pdev
->
irq
;
ioaddr
=
(
long
)
ioremap
(
ioaddr
,
0x400
);
ioaddr
=
ioremap
(
base
,
0x400
);
if
(
!
ioaddr
)
if
(
!
ioaddr
)
goto
err_out_release
;
goto
err_out_release
;
...
@@ -678,7 +680,8 @@ static int __devinit hamachi_init_one (struct pci_dev *pdev,
...
@@ -678,7 +680,8 @@ static int __devinit hamachi_init_one (struct pci_dev *pdev,
i
=
readb
(
ioaddr
+
PCIClkMeas
);
i
=
readb
(
ioaddr
+
PCIClkMeas
);
}
}
dev
->
base_addr
=
ioaddr
;
hmp
->
base
=
ioaddr
;
dev
->
base_addr
=
(
unsigned
long
)
ioaddr
;
dev
->
irq
=
irq
;
dev
->
irq
=
irq
;
pci_set_drvdata
(
pdev
,
dev
);
pci_set_drvdata
(
pdev
,
dev
);
...
@@ -741,7 +744,7 @@ static int __devinit hamachi_init_one (struct pci_dev *pdev,
...
@@ -741,7 +744,7 @@ static int __devinit hamachi_init_one (struct pci_dev *pdev,
goto
err_out_unmap_rx
;
goto
err_out_unmap_rx
;
}
}
printk
(
KERN_INFO
"%s: %s type %x at
0x%lx
, "
,
printk
(
KERN_INFO
"%s: %s type %x at
%p
, "
,
dev
->
name
,
chip_tbl
[
chip_id
].
name
,
readl
(
ioaddr
+
ChipRev
),
dev
->
name
,
chip_tbl
[
chip_id
].
name
,
readl
(
ioaddr
+
ChipRev
),
ioaddr
);
ioaddr
);
for
(
i
=
0
;
i
<
5
;
i
++
)
for
(
i
=
0
;
i
<
5
;
i
++
)
...
@@ -790,14 +793,14 @@ static int __devinit hamachi_init_one (struct pci_dev *pdev,
...
@@ -790,14 +793,14 @@ static int __devinit hamachi_init_one (struct pci_dev *pdev,
err_out_cleardev:
err_out_cleardev:
free_netdev
(
dev
);
free_netdev
(
dev
);
err_out_iounmap:
err_out_iounmap:
iounmap
(
(
char
*
)
ioaddr
);
iounmap
(
ioaddr
);
err_out_release:
err_out_release:
pci_release_regions
(
pdev
);
pci_release_regions
(
pdev
);
err_out:
err_out:
return
ret
;
return
ret
;
}
}
static
int
__devinit
read_eeprom
(
long
ioaddr
,
int
location
)
static
int
__devinit
read_eeprom
(
void
__iomem
*
ioaddr
,
int
location
)
{
{
int
bogus_cnt
=
1000
;
int
bogus_cnt
=
1000
;
...
@@ -819,7 +822,8 @@ static int __devinit read_eeprom(long ioaddr, int location)
...
@@ -819,7 +822,8 @@ static int __devinit read_eeprom(long ioaddr, int location)
static
int
mdio_read
(
struct
net_device
*
dev
,
int
phy_id
,
int
location
)
static
int
mdio_read
(
struct
net_device
*
dev
,
int
phy_id
,
int
location
)
{
{
long
ioaddr
=
dev
->
base_addr
;
struct
hamachi_private
*
hmp
=
netdev_priv
(
dev
);
void
__iomem
*
ioaddr
=
hmp
->
base
;
int
i
;
int
i
;
/* We should check busy first - per docs -KDU */
/* We should check busy first - per docs -KDU */
...
@@ -836,7 +840,8 @@ static int mdio_read(struct net_device *dev, int phy_id, int location)
...
@@ -836,7 +840,8 @@ static int mdio_read(struct net_device *dev, int phy_id, int location)
static
void
mdio_write
(
struct
net_device
*
dev
,
int
phy_id
,
int
location
,
int
value
)
static
void
mdio_write
(
struct
net_device
*
dev
,
int
phy_id
,
int
location
,
int
value
)
{
{
long
ioaddr
=
dev
->
base_addr
;
struct
hamachi_private
*
hmp
=
netdev_priv
(
dev
);
void
__iomem
*
ioaddr
=
hmp
->
base
;
int
i
;
int
i
;
/* We should check busy first - per docs -KDU */
/* We should check busy first - per docs -KDU */
...
@@ -857,7 +862,7 @@ static void mdio_write(struct net_device *dev, int phy_id, int location, int val
...
@@ -857,7 +862,7 @@ static void mdio_write(struct net_device *dev, int phy_id, int location, int val
static
int
hamachi_open
(
struct
net_device
*
dev
)
static
int
hamachi_open
(
struct
net_device
*
dev
)
{
{
struct
hamachi_private
*
hmp
=
netdev_priv
(
dev
);
struct
hamachi_private
*
hmp
=
netdev_priv
(
dev
);
long
ioaddr
=
dev
->
base_addr
;
void
__iomem
*
ioaddr
=
hmp
->
base
;
int
i
;
int
i
;
u32
rx_int_var
,
tx_int_var
;
u32
rx_int_var
,
tx_int_var
;
u16
fifo_info
;
u16
fifo_info
;
...
@@ -987,7 +992,7 @@ static int hamachi_open(struct net_device *dev)
...
@@ -987,7 +992,7 @@ static int hamachi_open(struct net_device *dev)
writew
(
0x001D
,
ioaddr
+
RxDMACtrl
);
writew
(
0x001D
,
ioaddr
+
RxDMACtrl
);
writew
(
0x001D
,
ioaddr
+
TxDMACtrl
);
writew
(
0x001D
,
ioaddr
+
TxDMACtrl
);
#endif
#endif
writew
(
0x0001
,
dev
->
base_
addr
+
RxCmd
);
writew
(
0x0001
,
io
addr
+
RxCmd
);
if
(
hamachi_debug
>
2
)
{
if
(
hamachi_debug
>
2
)
{
printk
(
KERN_DEBUG
"%s: Done hamachi_open(), status: Rx %x Tx %x.
\n
"
,
printk
(
KERN_DEBUG
"%s: Done hamachi_open(), status: Rx %x Tx %x.
\n
"
,
...
@@ -1038,7 +1043,7 @@ static void hamachi_timer(unsigned long data)
...
@@ -1038,7 +1043,7 @@ static void hamachi_timer(unsigned long data)
{
{
struct
net_device
*
dev
=
(
struct
net_device
*
)
data
;
struct
net_device
*
dev
=
(
struct
net_device
*
)
data
;
struct
hamachi_private
*
hmp
=
netdev_priv
(
dev
);
struct
hamachi_private
*
hmp
=
netdev_priv
(
dev
);
long
ioaddr
=
dev
->
base_addr
;
void
__iomem
*
ioaddr
=
hmp
->
base
;
int
next_tick
=
10
*
HZ
;
int
next_tick
=
10
*
HZ
;
if
(
hamachi_debug
>
2
)
{
if
(
hamachi_debug
>
2
)
{
...
@@ -1063,7 +1068,7 @@ static void hamachi_tx_timeout(struct net_device *dev)
...
@@ -1063,7 +1068,7 @@ static void hamachi_tx_timeout(struct net_device *dev)
{
{
int
i
;
int
i
;
struct
hamachi_private
*
hmp
=
netdev_priv
(
dev
);
struct
hamachi_private
*
hmp
=
netdev_priv
(
dev
);
long
ioaddr
=
dev
->
base_addr
;
void
__iomem
*
ioaddr
=
hmp
->
base
;
printk
(
KERN_WARNING
"%s: Hamachi transmit timed out, status %8.8x,"
printk
(
KERN_WARNING
"%s: Hamachi transmit timed out, status %8.8x,"
" resetting...
\n
"
,
dev
->
name
,
(
int
)
readw
(
ioaddr
+
TxStatus
));
" resetting...
\n
"
,
dev
->
name
,
(
int
)
readw
(
ioaddr
+
TxStatus
));
...
@@ -1115,7 +1120,7 @@ static void hamachi_tx_timeout(struct net_device *dev)
...
@@ -1115,7 +1120,7 @@ static void hamachi_tx_timeout(struct net_device *dev)
}
}
udelay
(
60
);
/* Sleep 60 us just for safety sake */
udelay
(
60
);
/* Sleep 60 us just for safety sake */
writew
(
0x0002
,
dev
->
base_
addr
+
RxCmd
);
/* STOP Rx */
writew
(
0x0002
,
io
addr
+
RxCmd
);
/* STOP Rx */
writeb
(
0x01
,
ioaddr
+
ChipReset
);
/* Reinit the hardware */
writeb
(
0x01
,
ioaddr
+
ChipReset
);
/* Reinit the hardware */
...
@@ -1157,9 +1162,9 @@ static void hamachi_tx_timeout(struct net_device *dev)
...
@@ -1157,9 +1162,9 @@ static void hamachi_tx_timeout(struct net_device *dev)
hmp
->
stats
.
tx_errors
++
;
hmp
->
stats
.
tx_errors
++
;
/* Restart the chip's Tx/Rx processes . */
/* Restart the chip's Tx/Rx processes . */
writew
(
0x0002
,
dev
->
base_
addr
+
TxCmd
);
/* STOP Tx */
writew
(
0x0002
,
io
addr
+
TxCmd
);
/* STOP Tx */
writew
(
0x0001
,
dev
->
base_
addr
+
TxCmd
);
/* START Tx */
writew
(
0x0001
,
io
addr
+
TxCmd
);
/* START Tx */
writew
(
0x0001
,
dev
->
base_
addr
+
RxCmd
);
/* START Rx */
writew
(
0x0001
,
io
addr
+
RxCmd
);
/* START Rx */
netif_wake_queue
(
dev
);
netif_wake_queue
(
dev
);
}
}
...
@@ -1275,9 +1280,9 @@ static int hamachi_start_xmit(struct sk_buff *skb, struct net_device *dev)
...
@@ -1275,9 +1280,9 @@ static int hamachi_start_xmit(struct sk_buff *skb, struct net_device *dev)
/* Wake the potentially-idle transmit channel. */
/* Wake the potentially-idle transmit channel. */
/* If we don't need to read status, DON'T -KDU */
/* If we don't need to read status, DON'T -KDU */
status
=
readw
(
dev
->
base_addr
+
TxStatus
);
status
=
readw
(
hmp
->
base
+
TxStatus
);
if
(
!
(
status
&
0x0001
)
||
(
status
&
0x0002
))
if
(
!
(
status
&
0x0001
)
||
(
status
&
0x0002
))
writew
(
0x0001
,
dev
->
base_addr
+
TxCmd
);
writew
(
0x0001
,
hmp
->
base
+
TxCmd
);
return
1
;
return
1
;
}
}
...
@@ -1343,9 +1348,9 @@ static int hamachi_start_xmit(struct sk_buff *skb, struct net_device *dev)
...
@@ -1343,9 +1348,9 @@ static int hamachi_start_xmit(struct sk_buff *skb, struct net_device *dev)
/* Wake the potentially-idle transmit channel. */
/* Wake the potentially-idle transmit channel. */
/* If we don't need to read status, DON'T -KDU */
/* If we don't need to read status, DON'T -KDU */
status
=
readw
(
dev
->
base_addr
+
TxStatus
);
status
=
readw
(
hmp
->
base
+
TxStatus
);
if
(
!
(
status
&
0x0001
)
||
(
status
&
0x0002
))
if
(
!
(
status
&
0x0001
)
||
(
status
&
0x0002
))
writew
(
0x0001
,
dev
->
base_addr
+
TxCmd
);
writew
(
0x0001
,
hmp
->
base
+
TxCmd
);
/* Immediately before returning, let's clear as many entries as we can. */
/* Immediately before returning, let's clear as many entries as we can. */
hamachi_tx
(
dev
);
hamachi_tx
(
dev
);
...
@@ -1376,8 +1381,9 @@ static int hamachi_start_xmit(struct sk_buff *skb, struct net_device *dev)
...
@@ -1376,8 +1381,9 @@ static int hamachi_start_xmit(struct sk_buff *skb, struct net_device *dev)
static
irqreturn_t
hamachi_interrupt
(
int
irq
,
void
*
dev_instance
,
struct
pt_regs
*
rgs
)
static
irqreturn_t
hamachi_interrupt
(
int
irq
,
void
*
dev_instance
,
struct
pt_regs
*
rgs
)
{
{
struct
net_device
*
dev
=
dev_instance
;
struct
net_device
*
dev
=
dev_instance
;
struct
hamachi_private
*
hmp
;
struct
hamachi_private
*
hmp
=
netdev_priv
(
dev
);
long
ioaddr
,
boguscnt
=
max_interrupt_work
;
void
__iomem
*
ioaddr
=
hmp
->
base
;
long
boguscnt
=
max_interrupt_work
;
int
handled
=
0
;
int
handled
=
0
;
#ifndef final_version
/* Can never occur. */
#ifndef final_version
/* Can never occur. */
...
@@ -1387,8 +1393,6 @@ static irqreturn_t hamachi_interrupt(int irq, void *dev_instance, struct pt_regs
...
@@ -1387,8 +1393,6 @@ static irqreturn_t hamachi_interrupt(int irq, void *dev_instance, struct pt_regs
}
}
#endif
#endif
ioaddr
=
dev
->
base_addr
;
hmp
=
netdev_priv
(
dev
);
spin_lock
(
&
hmp
->
lock
);
spin_lock
(
&
hmp
->
lock
);
do
{
do
{
...
@@ -1687,8 +1691,8 @@ static int hamachi_rx(struct net_device *dev)
...
@@ -1687,8 +1691,8 @@ static int hamachi_rx(struct net_device *dev)
/* Restart Rx engine if stopped. */
/* Restart Rx engine if stopped. */
/* If we don't need to check status, don't. -KDU */
/* If we don't need to check status, don't. -KDU */
if
(
readw
(
dev
->
base_addr
+
RxStatus
)
&
0x0002
)
if
(
readw
(
hmp
->
base
+
RxStatus
)
&
0x0002
)
writew
(
0x0001
,
dev
->
base_addr
+
RxCmd
);
writew
(
0x0001
,
hmp
->
base
+
RxCmd
);
return
0
;
return
0
;
}
}
...
@@ -1697,8 +1701,8 @@ static int hamachi_rx(struct net_device *dev)
...
@@ -1697,8 +1701,8 @@ static int hamachi_rx(struct net_device *dev)
than just errors. */
than just errors. */
static
void
hamachi_error
(
struct
net_device
*
dev
,
int
intr_status
)
static
void
hamachi_error
(
struct
net_device
*
dev
,
int
intr_status
)
{
{
long
ioaddr
=
dev
->
base_addr
;
struct
hamachi_private
*
hmp
=
netdev_priv
(
dev
);
struct
hamachi_private
*
hmp
=
netdev_priv
(
dev
);
void
__iomem
*
ioaddr
=
hmp
->
base
;
if
(
intr_status
&
(
LinkChange
|
NegotiationChange
))
{
if
(
intr_status
&
(
LinkChange
|
NegotiationChange
))
{
if
(
hamachi_debug
>
1
)
if
(
hamachi_debug
>
1
)
...
@@ -1731,8 +1735,8 @@ static void hamachi_error(struct net_device *dev, int intr_status)
...
@@ -1731,8 +1735,8 @@ static void hamachi_error(struct net_device *dev, int intr_status)
static
int
hamachi_close
(
struct
net_device
*
dev
)
static
int
hamachi_close
(
struct
net_device
*
dev
)
{
{
long
ioaddr
=
dev
->
base_addr
;
struct
hamachi_private
*
hmp
=
netdev_priv
(
dev
);
struct
hamachi_private
*
hmp
=
netdev_priv
(
dev
);
void
__iomem
*
ioaddr
=
hmp
->
base
;
struct
sk_buff
*
skb
;
struct
sk_buff
*
skb
;
int
i
;
int
i
;
...
@@ -1817,8 +1821,8 @@ static int hamachi_close(struct net_device *dev)
...
@@ -1817,8 +1821,8 @@ static int hamachi_close(struct net_device *dev)
static
struct
net_device_stats
*
hamachi_get_stats
(
struct
net_device
*
dev
)
static
struct
net_device_stats
*
hamachi_get_stats
(
struct
net_device
*
dev
)
{
{
long
ioaddr
=
dev
->
base_addr
;
struct
hamachi_private
*
hmp
=
netdev_priv
(
dev
);
struct
hamachi_private
*
hmp
=
netdev_priv
(
dev
);
void
__iomem
*
ioaddr
=
hmp
->
base
;
/* We should lock this segment of code for SMP eventually, although
/* We should lock this segment of code for SMP eventually, although
the vulnerability window is very small and statistics are
the vulnerability window is very small and statistics are
...
@@ -1845,7 +1849,8 @@ static struct net_device_stats *hamachi_get_stats(struct net_device *dev)
...
@@ -1845,7 +1849,8 @@ static struct net_device_stats *hamachi_get_stats(struct net_device *dev)
static
void
set_rx_mode
(
struct
net_device
*
dev
)
static
void
set_rx_mode
(
struct
net_device
*
dev
)
{
{
long
ioaddr
=
dev
->
base_addr
;
struct
hamachi_private
*
hmp
=
netdev_priv
(
dev
);
void
__iomem
*
ioaddr
=
hmp
->
base
;
if
(
dev
->
flags
&
IFF_PROMISC
)
{
/* Set promiscuous. */
if
(
dev
->
flags
&
IFF_PROMISC
)
{
/* Set promiscuous. */
/* Unconditionally log net taps. */
/* Unconditionally log net taps. */
...
@@ -1950,11 +1955,11 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
...
@@ -1950,11 +1955,11 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
*/
*/
if
(
!
capable
(
CAP_NET_ADMIN
))
if
(
!
capable
(
CAP_NET_ADMIN
))
return
-
EPERM
;
return
-
EPERM
;
writel
(
d
[
0
],
dev
->
base_addr
+
TxIntrCtrl
);
writel
(
d
[
0
],
np
->
base
+
TxIntrCtrl
);
writel
(
d
[
1
],
dev
->
base_addr
+
RxIntrCtrl
);
writel
(
d
[
1
],
np
->
base
+
RxIntrCtrl
);
printk
(
KERN_NOTICE
"%s: tx %08x, rx %08x intr
\n
"
,
dev
->
name
,
printk
(
KERN_NOTICE
"%s: tx %08x, rx %08x intr
\n
"
,
dev
->
name
,
(
u32
)
readl
(
dev
->
base_addr
+
TxIntrCtrl
),
(
u32
)
readl
(
np
->
base
+
TxIntrCtrl
),
(
u32
)
readl
(
dev
->
base_addr
+
RxIntrCtrl
));
(
u32
)
readl
(
np
->
base
+
RxIntrCtrl
));
rc
=
0
;
rc
=
0
;
}
}
...
@@ -1980,7 +1985,7 @@ static void __devexit hamachi_remove_one (struct pci_dev *pdev)
...
@@ -1980,7 +1985,7 @@ static void __devexit hamachi_remove_one (struct pci_dev *pdev)
pci_free_consistent
(
pdev
,
TX_TOTAL_SIZE
,
hmp
->
tx_ring
,
pci_free_consistent
(
pdev
,
TX_TOTAL_SIZE
,
hmp
->
tx_ring
,
hmp
->
tx_ring_dma
);
hmp
->
tx_ring_dma
);
unregister_netdev
(
dev
);
unregister_netdev
(
dev
);
iounmap
(
(
char
*
)
dev
->
base_addr
);
iounmap
(
hmp
->
base
);
free_netdev
(
dev
);
free_netdev
(
dev
);
pci_release_regions
(
pdev
);
pci_release_regions
(
pdev
);
pci_set_drvdata
(
pdev
,
NULL
);
pci_set_drvdata
(
pdev
,
NULL
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment