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
7bedd791
Commit
7bedd791
authored
Dec 26, 2004
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Plain Diff
Merge pobox.com:/garz/repo/netdev-2.6/viro-eth1
into pobox.com:/garz/repo/net-drivers-2.6
parents
90b14f29
2f5a21d6
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
417 additions
and
435 deletions
+417
-435
drivers/net/mace.c
drivers/net/mace.c
+32
-34
drivers/net/skfp/h/fplustm.h
drivers/net/skfp/h/fplustm.h
+1
-5
drivers/net/skfp/h/targethw.h
drivers/net/skfp/h/targethw.h
+1
-5
drivers/net/skfp/h/targetos.h
drivers/net/skfp/h/targetos.h
+1
-1
drivers/net/skfp/h/types.h
drivers/net/skfp/h/types.h
+6
-15
drivers/net/skfp/skfddi.c
drivers/net/skfp/skfddi.c
+16
-9
drivers/net/starfire.c
drivers/net/starfire.c
+40
-39
drivers/net/sundance.c
drivers/net/sundance.c
+121
-138
drivers/net/tokenring/lanstreamer.c
drivers/net/tokenring/lanstreamer.c
+12
-12
drivers/net/tokenring/lanstreamer.h
drivers/net/tokenring/lanstreamer.h
+1
-1
drivers/net/tokenring/olympic.c
drivers/net/tokenring/olympic.c
+44
-46
drivers/net/wireless/airo.c
drivers/net/wireless/airo.c
+21
-21
drivers/net/wireless/arlan-main.c
drivers/net/wireless/arlan-main.c
+45
-45
drivers/net/wireless/arlan-proc.c
drivers/net/wireless/arlan-proc.c
+10
-5
drivers/net/wireless/arlan.h
drivers/net/wireless/arlan.h
+11
-13
drivers/net/wireless/netwave_cs.c
drivers/net/wireless/netwave_cs.c
+40
-35
drivers/net/wireless/wavelan_cs.c
drivers/net/wireless/wavelan_cs.c
+14
-11
drivers/net/wireless/wavelan_cs.p.h
drivers/net/wireless/wavelan_cs.p.h
+1
-0
No files found.
drivers/net/mace.c
View file @
7bedd791
...
...
@@ -40,10 +40,10 @@ static int port_aaui = -1;
#define TX_DMA_ERR 0x80
struct
mace_data
{
volatile
struct
mace
*
mace
;
volatile
struct
dbdma_regs
*
tx_dma
;
volatile
struct
mace
__iomem
*
mace
;
volatile
struct
dbdma_regs
__iomem
*
tx_dma
;
int
tx_dma_intr
;
volatile
struct
dbdma_regs
*
rx_dma
;
volatile
struct
dbdma_regs
__iomem
*
rx_dma
;
int
rx_dma_intr
;
volatile
struct
dbdma_cmd
*
tx_cmds
;
/* xmit dma command list */
volatile
struct
dbdma_cmd
*
rx_cmds
;
/* recv dma command list */
...
...
@@ -88,7 +88,7 @@ static irqreturn_t mace_txdma_intr(int irq, void *dev_id, struct pt_regs *regs);
static
irqreturn_t
mace_rxdma_intr
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
);
static
void
mace_set_timeout
(
struct
net_device
*
dev
);
static
void
mace_tx_timeout
(
unsigned
long
data
);
static
inline
void
dbdma_reset
(
volatile
struct
dbdma_regs
*
dma
);
static
inline
void
dbdma_reset
(
volatile
struct
dbdma_regs
__iomem
*
dma
);
static
inline
void
mace_clean_rings
(
struct
mace_data
*
mp
);
static
void
__mace_set_address
(
struct
net_device
*
dev
,
void
*
addr
);
...
...
@@ -164,7 +164,7 @@ static int __devinit mace_probe(struct macio_dev *mdev, const struct of_match *m
macio_set_drvdata
(
mdev
,
dev
);
dev
->
base_addr
=
macio_resource_start
(
mdev
,
0
);
mp
->
mace
=
(
volatile
struct
mace
*
)
ioremap
(
dev
->
base_addr
,
0x1000
);
mp
->
mace
=
ioremap
(
dev
->
base_addr
,
0x1000
);
if
(
mp
->
mace
==
NULL
)
{
printk
(
KERN_ERR
"MACE: can't map IO resources !
\n
"
);
rc
=
-
ENOMEM
;
...
...
@@ -183,8 +183,7 @@ static int __devinit mace_probe(struct macio_dev *mdev, const struct of_match *m
mp
=
(
struct
mace_data
*
)
dev
->
priv
;
mp
->
maccc
=
ENXMT
|
ENRCV
;
mp
->
tx_dma
=
(
volatile
struct
dbdma_regs
*
)
ioremap
(
macio_resource_start
(
mdev
,
1
),
0x1000
);
mp
->
tx_dma
=
ioremap
(
macio_resource_start
(
mdev
,
1
),
0x1000
);
if
(
mp
->
tx_dma
==
NULL
)
{
printk
(
KERN_ERR
"MACE: can't map TX DMA resources !
\n
"
);
rc
=
-
ENOMEM
;
...
...
@@ -192,8 +191,7 @@ static int __devinit mace_probe(struct macio_dev *mdev, const struct of_match *m
}
mp
->
tx_dma_intr
=
macio_irq
(
mdev
,
1
);
mp
->
rx_dma
=
(
volatile
struct
dbdma_regs
*
)
ioremap
(
macio_resource_start
(
mdev
,
2
),
0x1000
);
mp
->
rx_dma
=
ioremap
(
macio_resource_start
(
mdev
,
2
),
0x1000
);
if
(
mp
->
rx_dma
==
NULL
)
{
printk
(
KERN_ERR
"MACE: can't map RX DMA resources !
\n
"
);
rc
=
-
ENOMEM
;
...
...
@@ -275,11 +273,11 @@ static int __devinit mace_probe(struct macio_dev *mdev, const struct of_match *m
err_free_irq:
free_irq
(
macio_irq
(
mdev
,
0
),
dev
);
err_unmap_rx_dma:
iounmap
(
(
void
*
)
mp
->
rx_dma
);
iounmap
(
mp
->
rx_dma
);
err_unmap_tx_dma:
iounmap
(
(
void
*
)
mp
->
tx_dma
);
iounmap
(
mp
->
tx_dma
);
err_unmap_io:
iounmap
(
(
void
*
)
mp
->
mace
);
iounmap
(
mp
->
mace
);
err_free:
free_netdev
(
dev
);
err_release:
...
...
@@ -305,9 +303,9 @@ static int __devexit mace_remove(struct macio_dev *mdev)
free_irq
(
mp
->
tx_dma_intr
,
dev
);
free_irq
(
mp
->
rx_dma_intr
,
dev
);
iounmap
(
(
void
*
)
mp
->
rx_dma
);
iounmap
(
(
void
*
)
mp
->
tx_dma
);
iounmap
(
(
void
*
)
mp
->
mace
);
iounmap
(
mp
->
rx_dma
);
iounmap
(
mp
->
tx_dma
);
iounmap
(
mp
->
mace
);
free_netdev
(
dev
);
...
...
@@ -316,7 +314,7 @@ static int __devexit mace_remove(struct macio_dev *mdev)
return
0
;
}
static
void
dbdma_reset
(
volatile
struct
dbdma_regs
*
dma
)
static
void
dbdma_reset
(
volatile
struct
dbdma_regs
__iomem
*
dma
)
{
int
i
;
...
...
@@ -334,7 +332,7 @@ static void dbdma_reset(volatile struct dbdma_regs *dma)
static
void
mace_reset
(
struct
net_device
*
dev
)
{
struct
mace_data
*
mp
=
(
struct
mace_data
*
)
dev
->
priv
;
volatile
struct
mace
*
mb
=
mp
->
mace
;
volatile
struct
mace
__iomem
*
mb
=
mp
->
mace
;
int
i
;
/* soft-reset the chip */
...
...
@@ -389,7 +387,7 @@ static void mace_reset(struct net_device *dev)
static
void
__mace_set_address
(
struct
net_device
*
dev
,
void
*
addr
)
{
struct
mace_data
*
mp
=
(
struct
mace_data
*
)
dev
->
priv
;
volatile
struct
mace
*
mb
=
mp
->
mace
;
volatile
struct
mace
__iomem
*
mb
=
mp
->
mace
;
unsigned
char
*
p
=
addr
;
int
i
;
...
...
@@ -410,7 +408,7 @@ static void __mace_set_address(struct net_device *dev, void *addr)
static
int
mace_set_address
(
struct
net_device
*
dev
,
void
*
addr
)
{
struct
mace_data
*
mp
=
(
struct
mace_data
*
)
dev
->
priv
;
volatile
struct
mace
*
mb
=
mp
->
mace
;
volatile
struct
mace
__iomem
*
mb
=
mp
->
mace
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
mp
->
lock
,
flags
);
...
...
@@ -445,9 +443,9 @@ static inline void mace_clean_rings(struct mace_data *mp)
static
int
mace_open
(
struct
net_device
*
dev
)
{
struct
mace_data
*
mp
=
(
struct
mace_data
*
)
dev
->
priv
;
volatile
struct
mace
*
mb
=
mp
->
mace
;
volatile
struct
dbdma_regs
*
rd
=
mp
->
rx_dma
;
volatile
struct
dbdma_regs
*
td
=
mp
->
tx_dma
;
volatile
struct
mace
__iomem
*
mb
=
mp
->
mace
;
volatile
struct
dbdma_regs
__iomem
*
rd
=
mp
->
rx_dma
;
volatile
struct
dbdma_regs
__iomem
*
td
=
mp
->
tx_dma
;
volatile
struct
dbdma_cmd
*
cp
;
int
i
;
struct
sk_buff
*
skb
;
...
...
@@ -515,9 +513,9 @@ static int mace_open(struct net_device *dev)
static
int
mace_close
(
struct
net_device
*
dev
)
{
struct
mace_data
*
mp
=
(
struct
mace_data
*
)
dev
->
priv
;
volatile
struct
mace
*
mb
=
mp
->
mace
;
volatile
struct
dbdma_regs
*
rd
=
mp
->
rx_dma
;
volatile
struct
dbdma_regs
*
td
=
mp
->
tx_dma
;
volatile
struct
mace
__iomem
*
mb
=
mp
->
mace
;
volatile
struct
dbdma_regs
__iomem
*
rd
=
mp
->
rx_dma
;
volatile
struct
dbdma_regs
__iomem
*
td
=
mp
->
tx_dma
;
/* disable rx and tx */
out_8
(
&
mb
->
maccc
,
0
);
...
...
@@ -548,7 +546,7 @@ static inline void mace_set_timeout(struct net_device *dev)
static
int
mace_xmit_start
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
)
{
struct
mace_data
*
mp
=
(
struct
mace_data
*
)
dev
->
priv
;
volatile
struct
dbdma_regs
*
td
=
mp
->
tx_dma
;
volatile
struct
dbdma_regs
__iomem
*
td
=
mp
->
tx_dma
;
volatile
struct
dbdma_cmd
*
cp
,
*
np
;
unsigned
long
flags
;
int
fill
,
next
,
len
;
...
...
@@ -610,7 +608,7 @@ static struct net_device_stats *mace_stats(struct net_device *dev)
static
void
mace_set_multicast
(
struct
net_device
*
dev
)
{
struct
mace_data
*
mp
=
(
struct
mace_data
*
)
dev
->
priv
;
volatile
struct
mace
*
mb
=
mp
->
mace
;
volatile
struct
mace
__iomem
*
mb
=
mp
->
mace
;
int
i
,
j
;
u32
crc
;
unsigned
long
flags
;
...
...
@@ -662,7 +660,7 @@ static void mace_set_multicast(struct net_device *dev)
static
void
mace_handle_misc_intrs
(
struct
mace_data
*
mp
,
int
intr
)
{
volatile
struct
mace
*
mb
=
mp
->
mace
;
volatile
struct
mace
__iomem
*
mb
=
mp
->
mace
;
static
int
mace_babbles
,
mace_jabbers
;
if
(
intr
&
MPCO
)
...
...
@@ -685,8 +683,8 @@ static irqreturn_t mace_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
struct
net_device
*
dev
=
(
struct
net_device
*
)
dev_id
;
struct
mace_data
*
mp
=
(
struct
mace_data
*
)
dev
->
priv
;
volatile
struct
mace
*
mb
=
mp
->
mace
;
volatile
struct
dbdma_regs
*
td
=
mp
->
tx_dma
;
volatile
struct
mace
__iomem
*
mb
=
mp
->
mace
;
volatile
struct
dbdma_regs
__iomem
*
td
=
mp
->
tx_dma
;
volatile
struct
dbdma_cmd
*
cp
;
int
intr
,
fs
,
i
,
stat
,
x
;
int
xcount
,
dstat
;
...
...
@@ -831,9 +829,9 @@ static void mace_tx_timeout(unsigned long data)
{
struct
net_device
*
dev
=
(
struct
net_device
*
)
data
;
struct
mace_data
*
mp
=
(
struct
mace_data
*
)
dev
->
priv
;
volatile
struct
mace
*
mb
=
mp
->
mace
;
volatile
struct
dbdma_regs
*
td
=
mp
->
tx_dma
;
volatile
struct
dbdma_regs
*
rd
=
mp
->
rx_dma
;
volatile
struct
mace
__iomem
*
mb
=
mp
->
mace
;
volatile
struct
dbdma_regs
__iomem
*
td
=
mp
->
tx_dma
;
volatile
struct
dbdma_regs
__iomem
*
rd
=
mp
->
rx_dma
;
volatile
struct
dbdma_cmd
*
cp
;
unsigned
long
flags
;
int
i
;
...
...
@@ -902,7 +900,7 @@ static irqreturn_t mace_rxdma_intr(int irq, void *dev_id, struct pt_regs *regs)
{
struct
net_device
*
dev
=
(
struct
net_device
*
)
dev_id
;
struct
mace_data
*
mp
=
(
struct
mace_data
*
)
dev
->
priv
;
volatile
struct
dbdma_regs
*
rd
=
mp
->
rx_dma
;
volatile
struct
dbdma_regs
__iomem
*
rd
=
mp
->
rx_dma
;
volatile
struct
dbdma_cmd
*
cp
,
*
np
;
int
i
,
nb
,
stat
,
next
;
struct
sk_buff
*
skb
;
...
...
drivers/net/skfp/h/fplustm.h
View file @
7bedd791
...
...
@@ -21,11 +21,7 @@
#define _FPLUS_
#ifndef HW_PTR
#ifdef MEM_MAPPED_IO
#define HW_PTR u_long
#else
#define HW_PTR u_short
#endif
#define HW_PTR void __iomem *
#endif
/*
...
...
drivers/net/skfp/h/targethw.h
View file @
7bedd791
...
...
@@ -33,11 +33,7 @@
#endif
#ifndef HW_PTR
#ifdef MEM_MAPPED_IO
#define HW_PTR u_long
#else
#define HW_PTR u_short
#endif
#define HW_PTR void __iomem *
#endif
#ifdef MULT_OEM
...
...
drivers/net/skfp/h/targetos.h
View file @
7bedd791
...
...
@@ -53,7 +53,7 @@
// is redefined by linux, but we need our definition
#undef ADDR
#ifdef MEM_MAPPED_IO
#define ADDR(a) (
char far *) smc->hw.iop+(a
)
#define ADDR(a) (
smc->hw.iop+(a)
)
#else
#define ADDR(a) (((a)>>7) ? (outp(smc->hw.iop+B0_RAP,(a)>>7), (smc->hw.iop+( ((a)&0x7F) | ((a)>>7 ? 0x80:0)) )) : (smc->hw.iop+(((a)&0x7F)|((a)>>7 ? 0x80:0))))
#endif
...
...
drivers/net/skfp/h/types.h
View file @
7bedd791
...
...
@@ -29,20 +29,11 @@
#define _far
#endif
#ifndef MEM_MAPPED_IO // "normal" IO
#define inp(p) inb(p)
#define inpw(p) inw(p)
#define inpd(p) inl(p)
#define outp(p,c) outb(c,p)
#define outpw(p,s) outw(s,p)
#define outpd(p,l) outl(l,p)
#else // memory mapped io
#define inp(a) readb(a)
#define inpw(a) readw(a)
#define inpd(a) readl(a)
#define outp(a,v) writeb(v, a)
#define outpw(a,v) writew(v, a)
#define outpd(a,v) writel(v, a)
#endif
#define inp(p) ioread8(p)
#define inpw(p) ioread16(p)
#define inpd(p) ioread32(p)
#define outp(p,c) iowrite8(c,p)
#define outpw(p,s) iowrite16(s,p)
#define outpd(p,l) iowrite32(l,p)
#endif
/* _TYPES_ */
drivers/net/skfp/skfddi.c
View file @
7bedd791
...
...
@@ -206,6 +206,7 @@ static int skfp_init_one(struct pci_dev *pdev,
struct
net_device
*
dev
;
struct
s_smc
*
smc
;
/* board pointer */
unsigned
long
port
,
len
;
void
__iomem
*
mem
;
int
err
;
PRINTK
(
KERN_INFO
"entering skfp_init_one
\n
"
);
...
...
@@ -263,16 +264,16 @@ static int skfp_init_one(struct pci_dev *pdev,
}
#ifdef MEM_MAPPED_IO
dev
->
base_addr
=
(
unsigned
long
)
ioremap
(
port
,
len
);
if
(
!
dev
->
base_addr
)
{
printk
(
KERN_ERR
"skfp: Unable to map MEMORY register, "
mem
=
ioremap
(
port
,
len
);
#else
mem
=
ioport_map
(
port
,
len
);
#endif
if
(
!
mem
)
{
printk
(
KERN_ERR
"skfp: Unable to map register, "
"FDDI adapter will be disabled.
\n
"
);
err
=
-
EIO
;
goto
err_out3
;
}
#else
dev
->
base_addr
=
port
;
#endif
dev
->
irq
=
pdev
->
irq
;
dev
->
get_stats
=
&
skfp_ctl_get_stats
;
...
...
@@ -296,9 +297,12 @@ static int skfp_init_one(struct pci_dev *pdev,
smc
->
os
.
MaxFrameSize
=
MAX_FRAME_SIZE
;
smc
->
os
.
dev
=
dev
;
smc
->
hw
.
slot
=
-
1
;
smc
->
hw
.
iop
=
mem
;
smc
->
os
.
ResetRequested
=
FALSE
;
skb_queue_head_init
(
&
smc
->
os
.
SendSkbQueue
);
dev
->
base_addr
=
(
unsigned
long
)
mem
;
err
=
skfp_driver_init
(
dev
);
if
(
err
)
goto
err_out4
;
...
...
@@ -328,7 +332,9 @@ static int skfp_init_one(struct pci_dev *pdev,
smc
->
os
.
LocalRxBuffer
,
smc
->
os
.
LocalRxBufferDMA
);
err_out4:
#ifdef MEM_MAPPED_IO
iounmap
((
void
*
)
dev
->
base_addr
);
iounmap
(
smc
->
hw
.
iop
);
#else
ioport_unmap
(
smc
->
hw
.
iop
);
#endif
err_out3:
free_netdev
(
dev
);
...
...
@@ -363,7 +369,9 @@ static void __devexit skfp_remove_one(struct pci_dev *pdev)
lp
->
os
.
LocalRxBuffer
=
NULL
;
}
#ifdef MEM_MAPPED_IO
iounmap
((
void
*
)
p
->
base_addr
);
iounmap
(
lp
->
hw
.
iop
);
#else
ioport_unmap
(
lp
->
hw
.
iop
);
#endif
pci_release_regions
(
pdev
);
free_netdev
(
p
);
...
...
@@ -406,7 +414,6 @@ static int skfp_driver_init(struct net_device *dev)
// set the io address in private structures
bp
->
base_addr
=
dev
->
base_addr
;
smc
->
hw
.
iop
=
dev
->
base_addr
;
// Get the interrupt level from the PCI Configuration Table
smc
->
hw
.
irq
=
dev
->
irq
;
...
...
drivers/net/starfire.c
View file @
7bedd791
...
...
@@ -776,6 +776,7 @@ struct netdev_private {
struct
mii_if_info
mii_if
;
/* MII lib hooks/info */
int
phy_cnt
;
/* MII device addresses. */
unsigned
char
phys
[
PHY_CNT
];
/* MII device addresses. */
void
__iomem
*
base
;
};
...
...
@@ -846,6 +847,7 @@ static int __devinit starfire_init_one(struct pci_dev *pdev,
struct
net_device
*
dev
;
static
int
card_idx
=
-
1
;
long
ioaddr
;
void
__iomem
*
base
;
int
drv_flags
,
io_size
;
int
boguscnt
;
...
...
@@ -884,14 +886,12 @@ static int __devinit starfire_init_one(struct pci_dev *pdev,
}
/* ioremap is borken in Linux-2.2.x/sparc64 */
#if !defined(CONFIG_SPARC64) || LINUX_VERSION_CODE > 0x20300
ioaddr
=
(
long
)
ioremap
(
ioaddr
,
io_size
);
if
(
!
ioaddr
)
{
base
=
ioremap
(
ioaddr
,
io_size
);
if
(
!
base
)
{
printk
(
KERN_ERR
DRV_NAME
" %d: cannot remap %#x @ %#lx, aborting
\n
"
,
card_idx
,
io_size
,
ioaddr
);
goto
err_out_free_res
;
}
#endif
/* !CONFIG_SPARC64 || Linux 2.3.0+ */
pci_set_master
(
pdev
);
...
...
@@ -918,27 +918,27 @@ static int __devinit starfire_init_one(struct pci_dev *pdev,
/* Serial EEPROM reads are hidden by the hardware. */
for
(
i
=
0
;
i
<
6
;
i
++
)
dev
->
dev_addr
[
i
]
=
readb
(
ioaddr
+
EEPROMCtrl
+
20
-
i
);
dev
->
dev_addr
[
i
]
=
readb
(
base
+
EEPROMCtrl
+
20
-
i
);
#if ! defined(final_version)
/* Dump the EEPROM contents during development. */
if
(
debug
>
4
)
for
(
i
=
0
;
i
<
0x20
;
i
++
)
printk
(
"%2.2x%s"
,
(
unsigned
int
)
readb
(
ioaddr
+
EEPROMCtrl
+
i
),
(
unsigned
int
)
readb
(
base
+
EEPROMCtrl
+
i
),
i
%
16
!=
15
?
" "
:
"
\n
"
);
#endif
/* Issue soft reset */
writel
(
MiiSoftReset
,
ioaddr
+
TxMode
);
writel
(
MiiSoftReset
,
base
+
TxMode
);
udelay
(
1000
);
writel
(
0
,
ioaddr
+
TxMode
);
writel
(
0
,
base
+
TxMode
);
/* Reset the chip to erase previous misconfiguration. */
writel
(
1
,
ioaddr
+
PCIDeviceConfig
);
writel
(
1
,
base
+
PCIDeviceConfig
);
boguscnt
=
1000
;
while
(
--
boguscnt
>
0
)
{
udelay
(
10
);
if
((
readl
(
ioaddr
+
PCIDeviceConfig
)
&
1
)
==
0
)
if
((
readl
(
base
+
PCIDeviceConfig
)
&
1
)
==
0
)
break
;
}
if
(
boguscnt
==
0
)
...
...
@@ -946,10 +946,11 @@ static int __devinit starfire_init_one(struct pci_dev *pdev,
/* wait a little longer */
udelay
(
1000
);
dev
->
base_addr
=
ioaddr
;
dev
->
base_addr
=
(
unsigned
long
)
base
;
dev
->
irq
=
irq
;
np
=
netdev_priv
(
dev
);
np
->
base
=
base
;
spin_lock_init
(
&
np
->
lock
);
pci_set_drvdata
(
pdev
,
dev
);
...
...
@@ -1021,8 +1022,8 @@ static int __devinit starfire_init_one(struct pci_dev *pdev,
if
(
register_netdev
(
dev
))
goto
err_out_cleardev
;
printk
(
KERN_INFO
"%s: %s at %
#lx
, "
,
dev
->
name
,
netdrv_tbl
[
chip_idx
].
name
,
ioaddr
);
printk
(
KERN_INFO
"%s: %s at %
p
, "
,
dev
->
name
,
netdrv_tbl
[
chip_idx
].
name
,
base
);
for
(
i
=
0
;
i
<
5
;
i
++
)
printk
(
"%2.2x:"
,
dev
->
dev_addr
[
i
]);
printk
(
"%2.2x, IRQ %d.
\n
"
,
dev
->
dev_addr
[
i
],
irq
);
...
...
@@ -1065,7 +1066,7 @@ static int __devinit starfire_init_one(struct pci_dev *pdev,
err_out_cleardev:
pci_set_drvdata
(
pdev
,
NULL
);
iounmap
(
(
void
*
)
ioaddr
);
iounmap
(
base
);
err_out_free_res:
pci_release_regions
(
pdev
);
err_out_free_netdev:
...
...
@@ -1077,7 +1078,8 @@ static int __devinit starfire_init_one(struct pci_dev *pdev,
/* Read the MII Management Data I/O (MDIO) interfaces. */
static
int
mdio_read
(
struct
net_device
*
dev
,
int
phy_id
,
int
location
)
{
long
mdio_addr
=
dev
->
base_addr
+
MIICtrl
+
(
phy_id
<<
7
)
+
(
location
<<
2
);
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
void
__iomem
*
mdio_addr
=
np
->
base
+
MIICtrl
+
(
phy_id
<<
7
)
+
(
location
<<
2
);
int
result
,
boguscnt
=
1000
;
/* ??? Should we add a busy-wait here? */
do
...
...
@@ -1093,7 +1095,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
)
{
long
mdio_addr
=
dev
->
base_addr
+
MIICtrl
+
(
phy_id
<<
7
)
+
(
location
<<
2
);
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
void
__iomem
*
mdio_addr
=
np
->
base
+
MIICtrl
+
(
phy_id
<<
7
)
+
(
location
<<
2
);
writel
(
value
,
mdio_addr
);
/* The busy-wait will occur before a read. */
}
...
...
@@ -1102,7 +1105,7 @@ static void mdio_write(struct net_device *dev, int phy_id, int location, int val
static
int
netdev_open
(
struct
net_device
*
dev
)
{
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
long
ioaddr
=
dev
->
base_addr
;
void
__iomem
*
ioaddr
=
np
->
base
;
int
i
,
retval
;
size_t
tx_done_q_size
,
rx_done_q_size
,
tx_ring_size
,
rx_ring_size
;
...
...
@@ -1191,7 +1194,7 @@ static int netdev_open(struct net_device *dev)
writew
(
0
,
ioaddr
+
PerfFilterTable
+
8
);
for
(
i
=
1
;
i
<
16
;
i
++
)
{
u16
*
eaddrs
=
(
u16
*
)
dev
->
dev_addr
;
long
setup_frm
=
ioaddr
+
PerfFilterTable
+
i
*
16
;
void
__iomem
*
setup_frm
=
ioaddr
+
PerfFilterTable
+
i
*
16
;
writew
(
cpu_to_be16
(
eaddrs
[
2
]),
setup_frm
);
setup_frm
+=
4
;
writew
(
cpu_to_be16
(
eaddrs
[
1
]),
setup_frm
);
setup_frm
+=
4
;
writew
(
cpu_to_be16
(
eaddrs
[
0
]),
setup_frm
);
setup_frm
+=
8
;
...
...
@@ -1295,7 +1298,7 @@ static void check_duplex(struct net_device *dev)
static
void
tx_timeout
(
struct
net_device
*
dev
)
{
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
long
ioaddr
=
dev
->
base_addr
;
void
__iomem
*
ioaddr
=
np
->
base
;
int
old_debug
;
printk
(
KERN_WARNING
"%s: Transmit timed out, status %#8.8x, "
...
...
@@ -1343,7 +1346,7 @@ static void init_ring(struct net_device *dev)
/* Grrr, we cannot offset to correctly align the IP header. */
np
->
rx_ring
[
i
].
rxaddr
=
cpu_to_dma
(
np
->
rx_info
[
i
].
mapping
|
RxDescValid
);
}
writew
(
i
-
1
,
dev
->
base_addr
+
RxDescQIdx
);
writew
(
i
-
1
,
np
->
base
+
RxDescQIdx
);
np
->
dirty_rx
=
(
unsigned
int
)(
i
-
RX_RING_SIZE
);
/* Clear the remainder of the Rx buffer ring. */
...
...
@@ -1464,7 +1467,7 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev)
wmb
();
/* Update the producer index. */
writel
(
entry
*
(
sizeof
(
starfire_tx_desc
)
/
8
),
dev
->
base_addr
+
TxProducerIdx
);
writel
(
entry
*
(
sizeof
(
starfire_tx_desc
)
/
8
),
np
->
base
+
TxProducerIdx
);
/* 4 is arbitrary, but should be ok */
if
((
np
->
cur_tx
-
np
->
dirty_tx
)
+
4
>
TX_RING_SIZE
)
...
...
@@ -1481,16 +1484,13 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev)
static
irqreturn_t
intr_handler
(
int
irq
,
void
*
dev_instance
,
struct
pt_regs
*
rgs
)
{
struct
net_device
*
dev
=
dev_instance
;
struct
netdev_private
*
np
;
long
ioaddr
;
struct
netdev_private
*
np
=
netdev_priv
(
dev
)
;
void
__iomem
*
ioaddr
=
np
->
base
;
int
boguscnt
=
max_interrupt_work
;
int
consumer
;
int
tx_status
;
int
handled
=
0
;
ioaddr
=
dev
->
base_addr
;
np
=
netdev_priv
(
dev
);
do
{
u32
intr_status
=
readl
(
ioaddr
+
IntrClear
);
...
...
@@ -1697,7 +1697,7 @@ static int __netdev_rx(struct net_device *dev, int *quota)
desc
->
status
=
0
;
np
->
rx_done
=
(
np
->
rx_done
+
1
)
%
DONE_Q_SIZE
;
}
writew
(
np
->
rx_done
,
dev
->
base_addr
+
CompletionQConsumerIdx
);
writew
(
np
->
rx_done
,
np
->
base
+
CompletionQConsumerIdx
);
out:
refill_rx_ring
(
dev
);
...
...
@@ -1712,7 +1712,8 @@ static int __netdev_rx(struct net_device *dev, int *quota)
static
int
netdev_poll
(
struct
net_device
*
dev
,
int
*
budget
)
{
u32
intr_status
;
long
ioaddr
=
dev
->
base_addr
;
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
void
__iomem
*
ioaddr
=
np
->
base
;
int
retcode
=
0
,
quota
=
dev
->
quota
;
do
{
...
...
@@ -1766,14 +1767,14 @@ static void refill_rx_ring(struct net_device *dev)
np
->
rx_ring
[
entry
].
rxaddr
|=
cpu_to_dma
(
RxDescEndRing
);
}
if
(
entry
>=
0
)
writew
(
entry
,
dev
->
base_addr
+
RxDescQIdx
);
writew
(
entry
,
np
->
base
+
RxDescQIdx
);
}
static
void
netdev_media_change
(
struct
net_device
*
dev
)
{
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
long
ioaddr
=
dev
->
base_addr
;
void
__iomem
*
ioaddr
=
np
->
base
;
u16
reg0
,
reg1
,
reg4
,
reg5
;
u32
new_tx_mode
;
u32
new_intr_timer_ctrl
;
...
...
@@ -1852,7 +1853,7 @@ static void netdev_error(struct net_device *dev, int intr_status)
/* Came close to underrunning the Tx FIFO, increase threshold. */
if
(
intr_status
&
IntrTxDataLow
)
{
if
(
np
->
tx_threshold
<=
PKT_BUF_SZ
/
16
)
{
writel
(
++
np
->
tx_threshold
,
dev
->
base_addr
+
TxThreshold
);
writel
(
++
np
->
tx_threshold
,
np
->
base
+
TxThreshold
);
printk
(
KERN_NOTICE
"%s: PCI bus congestion, increasing Tx FIFO threshold to %d bytes
\n
"
,
dev
->
name
,
np
->
tx_threshold
*
16
);
}
else
...
...
@@ -1874,8 +1875,8 @@ static void netdev_error(struct net_device *dev, int intr_status)
static
struct
net_device_stats
*
get_stats
(
struct
net_device
*
dev
)
{
long
ioaddr
=
dev
->
base_addr
;
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
void
__iomem
*
ioaddr
=
np
->
base
;
/* This adapter architecture needs no SMP locks. */
np
->
stats
.
tx_bytes
=
readl
(
ioaddr
+
0x57010
);
...
...
@@ -1904,17 +1905,17 @@ static struct net_device_stats *get_stats(struct net_device *dev)
*/
static
void
set_rx_mode
(
struct
net_device
*
dev
)
{
long
ioaddr
=
dev
->
base_addr
;
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
void
__iomem
*
ioaddr
=
np
->
base
;
u32
rx_mode
=
MinVLANPrio
;
struct
dev_mc_list
*
mclist
;
int
i
;
#ifdef VLAN_SUPPORT
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
rx_mode
|=
VlanMode
;
if
(
np
->
vlgrp
)
{
int
vlan_count
=
0
;
long
filter_addr
=
ioaddr
+
HashTable
+
8
;
void
__iomem
*
filter_addr
=
ioaddr
+
HashTable
+
8
;
for
(
i
=
0
;
i
<
VLAN_VID_MASK
;
i
++
)
{
if
(
np
->
vlgrp
->
vlan_devices
[
i
])
{
if
(
vlan_count
>=
32
)
...
...
@@ -1943,7 +1944,7 @@ static void set_rx_mode(struct net_device *dev)
rx_mode
|=
AcceptBroadcast
|
AcceptAllMulticast
|
PerfectFilter
;
}
else
if
(
dev
->
mc_count
<=
14
)
{
/* Use the 16 element perfect filter, skip first two entries. */
long
filter_addr
=
ioaddr
+
PerfFilterTable
+
2
*
16
;
void
__iomem
*
filter_addr
=
ioaddr
+
PerfFilterTable
+
2
*
16
;
u16
*
eaddrs
;
for
(
i
=
2
,
mclist
=
dev
->
mc_list
;
mclist
&&
i
<
dev
->
mc_count
+
2
;
i
++
,
mclist
=
mclist
->
next
)
{
...
...
@@ -1961,7 +1962,7 @@ static void set_rx_mode(struct net_device *dev)
rx_mode
|=
AcceptBroadcast
|
PerfectFilter
;
}
else
{
/* Must use a multicast hash table. */
long
filter_addr
;
void
__iomem
*
filter_addr
;
u16
*
eaddrs
;
u16
mc_filter
[
32
]
__attribute__
((
aligned
(
sizeof
(
long
))));
/* Multicast hash filter */
...
...
@@ -2077,8 +2078,8 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
static
int
netdev_close
(
struct
net_device
*
dev
)
{
long
ioaddr
=
dev
->
base_addr
;
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
void
__iomem
*
ioaddr
=
np
->
base
;
int
i
;
netif_stop_queue
(
dev
);
...
...
@@ -2162,7 +2163,7 @@ static void __devexit starfire_remove_one (struct pci_dev *pdev)
pci_set_power_state
(
pdev
,
3
);
/* go to sleep in D3 mode */
pci_disable_device
(
pdev
);
iounmap
(
(
char
*
)
dev
->
base_addr
);
iounmap
(
np
->
base
);
pci_release_regions
(
pdev
);
pci_set_drvdata
(
pdev
,
NULL
);
...
...
drivers/net/sundance.c
View file @
7bedd791
...
...
@@ -305,20 +305,6 @@ static struct pci_id_info pci_id_tbl[] = {
/* This driver was written to use PCI memory space, however x86-oriented
hardware often uses I/O space accesses. */
#ifdef USE_IO_OPS
#undef readb
#undef readw
#undef readl
#undef writeb
#undef writew
#undef writel
#define readb inb
#define readw inw
#define readl inl
#define writeb outb
#define writew outw
#define writel outl
#endif
/* Offsets to the device registers.
Unlike software-only systems, device drivers interact with complex hardware.
...
...
@@ -480,6 +466,7 @@ struct netdev_private {
int
mii_preamble_required
;
unsigned
char
phys
[
MII_CNT
];
/* MII device addresses, only first one used. */
struct
pci_dev
*
pci_dev
;
void
__iomem
*
base
;
unsigned
char
pci_rev_id
;
};
...
...
@@ -490,7 +477,7 @@ struct netdev_private {
LinkChange)
static
int
change_mtu
(
struct
net_device
*
dev
,
int
new_mtu
);
static
int
eeprom_read
(
long
ioaddr
,
int
location
);
static
int
eeprom_read
(
void
__iomem
*
ioaddr
,
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
int
netdev_open
(
struct
net_device
*
dev
);
...
...
@@ -522,10 +509,15 @@ static int __devinit sundance_probe1 (struct pci_dev *pdev,
int
chip_idx
=
ent
->
driver_data
;
int
irq
;
int
i
;
long
ioaddr
;
void
__iomem
*
ioaddr
;
u16
mii_ctl
;
void
*
ring_space
;
dma_addr_t
ring_dma
;
#ifdef USE_IO_OPS
int
bar
=
0
;
#else
int
bar
=
1
;
#endif
/* when built into the kernel, we only print version if device is found */
...
...
@@ -550,23 +542,19 @@ static int __devinit sundance_probe1 (struct pci_dev *pdev,
if
(
pci_request_regions
(
pdev
,
DRV_NAME
))
goto
err_out_netdev
;
#ifdef USE_IO_OPS
ioaddr
=
pci_resource_start
(
pdev
,
0
);
#else
ioaddr
=
pci_resource_start
(
pdev
,
1
);
ioaddr
=
(
long
)
ioremap
(
ioaddr
,
netdev_io_size
);
ioaddr
=
pci_iomap
(
pdev
,
bar
,
netdev_io_size
);
if
(
!
ioaddr
)
goto
err_out_res
;
#endif
for
(
i
=
0
;
i
<
3
;
i
++
)
((
u16
*
)
dev
->
dev_addr
)[
i
]
=
le16_to_cpu
(
eeprom_read
(
ioaddr
,
i
+
EEPROM_SA_OFFSET
));
dev
->
base_addr
=
ioaddr
;
dev
->
base_addr
=
(
unsigned
long
)
ioaddr
;
dev
->
irq
=
irq
;
np
=
netdev_priv
(
dev
);
np
->
base
=
ioaddr
;
np
->
pci_dev
=
pdev
;
np
->
chip_id
=
chip_idx
;
np
->
msg_enable
=
(
1
<<
debug
)
-
1
;
...
...
@@ -611,7 +599,7 @@ static int __devinit sundance_probe1 (struct pci_dev *pdev,
if
(
i
)
goto
err_out_unmap_rx
;
printk
(
KERN_INFO
"%s: %s at
0x%lx
, "
,
printk
(
KERN_INFO
"%s: %s at
%p
, "
,
dev
->
name
,
pci_id_tbl
[
chip_idx
].
name
,
ioaddr
);
for
(
i
=
0
;
i
<
5
;
i
++
)
printk
(
"%2.2x:"
,
dev
->
dev_addr
[
i
]);
...
...
@@ -637,7 +625,7 @@ static int __devinit sundance_probe1 (struct pci_dev *pdev,
if
(
phy_idx
==
0
)
{
printk
(
KERN_INFO
"%s: No MII transceiver found, aborting. ASIC status %x
\n
"
,
dev
->
name
,
readl
(
ioaddr
+
ASICCtrl
));
dev
->
name
,
ioread32
(
ioaddr
+
ASICCtrl
));
goto
err_out_unregister
;
}
...
...
@@ -674,7 +662,7 @@ static int __devinit sundance_probe1 (struct pci_dev *pdev,
}
/* Fibre PHY? */
if
(
readl
(
ioaddr
+
ASICCtrl
)
&
0x80
)
{
if
(
ioread32
(
ioaddr
+
ASICCtrl
)
&
0x80
)
{
/* Default 100Mbps Full */
if
(
np
->
an_enable
)
{
np
->
speed
=
100
;
...
...
@@ -703,10 +691,10 @@ static int __devinit sundance_probe1 (struct pci_dev *pdev,
/* Perhaps move the reset here? */
/* Reset the chip to erase previous misconfiguration. */
if
(
netif_msg_hw
(
np
))
printk
(
"ASIC Control is %x.
\n
"
,
readl
(
ioaddr
+
ASICCtrl
));
writew
(
0x007f
,
ioaddr
+
ASICCtrl
+
2
);
printk
(
"ASIC Control is %x.
\n
"
,
ioread32
(
ioaddr
+
ASICCtrl
));
iowrite16
(
0x007f
,
ioaddr
+
ASICCtrl
+
2
);
if
(
netif_msg_hw
(
np
))
printk
(
"ASIC Control is now %x.
\n
"
,
readl
(
ioaddr
+
ASICCtrl
));
printk
(
"ASIC Control is now %x.
\n
"
,
ioread32
(
ioaddr
+
ASICCtrl
));
card_idx
++
;
return
0
;
...
...
@@ -719,10 +707,8 @@ static int __devinit sundance_probe1 (struct pci_dev *pdev,
pci_free_consistent
(
pdev
,
TX_TOTAL_SIZE
,
np
->
tx_ring
,
np
->
tx_ring_dma
);
err_out_cleardev:
pci_set_drvdata
(
pdev
,
NULL
);
#ifndef USE_IO_OPS
iounmap
((
void
*
)
ioaddr
);
pci_iounmap
(
pdev
,
ioaddr
);
err_out_res:
#endif
pci_release_regions
(
pdev
);
err_out_netdev:
free_netdev
(
dev
);
...
...
@@ -739,16 +725,16 @@ static int change_mtu(struct net_device *dev, int new_mtu)
return
0
;
}
#define eeprom_delay(ee_addr)
readl
(ee_addr)
#define eeprom_delay(ee_addr)
ioread32
(ee_addr)
/* Read the EEPROM and MII Management Data I/O (MDIO) interfaces. */
static
int
__devinit
eeprom_read
(
long
ioaddr
,
int
location
)
static
int
__devinit
eeprom_read
(
void
__iomem
*
ioaddr
,
int
location
)
{
int
boguscnt
=
10000
;
/* Typical 1900 ticks. */
writew
(
0x0200
|
(
location
&
0xff
),
ioaddr
+
EECtrl
);
iowrite16
(
0x0200
|
(
location
&
0xff
),
ioaddr
+
EECtrl
);
do
{
eeprom_delay
(
ioaddr
+
EECtrl
);
if
(
!
(
readw
(
ioaddr
+
EECtrl
)
&
0x8000
))
{
return
readw
(
ioaddr
+
EEData
);
if
(
!
(
ioread16
(
ioaddr
+
EECtrl
)
&
0x8000
))
{
return
ioread16
(
ioaddr
+
EEData
);
}
}
while
(
--
boguscnt
>
0
);
return
0
;
...
...
@@ -761,7 +747,7 @@ static int __devinit eeprom_read(long ioaddr, int location)
The maximum data clock rate is 2.5 Mhz. The minimum timing is usually
met by back-to-back 33Mhz PCI cycles. */
#define mdio_delay()
readb
(mdio_addr)
#define mdio_delay()
ioread8
(mdio_addr)
enum
mii_reg_bits
{
MDIO_ShiftClk
=
0x0001
,
MDIO_Data
=
0x0002
,
MDIO_EnbOutput
=
0x0004
,
...
...
@@ -772,15 +758,15 @@ enum mii_reg_bits {
/* Generate the preamble required for initial synchronization and
a few older transceivers. */
static
void
mdio_sync
(
long
mdio_addr
)
static
void
mdio_sync
(
void
__iomem
*
mdio_addr
)
{
int
bits
=
32
;
/* Establish sync by sending at least 32 logic ones. */
while
(
--
bits
>=
0
)
{
writeb
(
MDIO_WRITE1
,
mdio_addr
);
iowrite8
(
MDIO_WRITE1
,
mdio_addr
);
mdio_delay
();
writeb
(
MDIO_WRITE1
|
MDIO_ShiftClk
,
mdio_addr
);
iowrite8
(
MDIO_WRITE1
|
MDIO_ShiftClk
,
mdio_addr
);
mdio_delay
();
}
}
...
...
@@ -788,7 +774,7 @@ static void mdio_sync(long mdio_addr)
static
int
mdio_read
(
struct
net_device
*
dev
,
int
phy_id
,
int
location
)
{
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
long
mdio_addr
=
dev
->
base_addr
+
MIICtrl
;
void
__iomem
*
mdio_addr
=
np
->
base
+
MIICtrl
;
int
mii_cmd
=
(
0xf6
<<
10
)
|
(
phy_id
<<
5
)
|
location
;
int
i
,
retval
=
0
;
...
...
@@ -799,17 +785,17 @@ static int mdio_read(struct net_device *dev, int phy_id, int location)
for
(
i
=
15
;
i
>=
0
;
i
--
)
{
int
dataval
=
(
mii_cmd
&
(
1
<<
i
))
?
MDIO_WRITE1
:
MDIO_WRITE0
;
writeb
(
dataval
,
mdio_addr
);
iowrite8
(
dataval
,
mdio_addr
);
mdio_delay
();
writeb
(
dataval
|
MDIO_ShiftClk
,
mdio_addr
);
iowrite8
(
dataval
|
MDIO_ShiftClk
,
mdio_addr
);
mdio_delay
();
}
/* Read the two transition, 16 data, and wire-idle bits. */
for
(
i
=
19
;
i
>
0
;
i
--
)
{
writeb
(
MDIO_EnbIn
,
mdio_addr
);
iowrite8
(
MDIO_EnbIn
,
mdio_addr
);
mdio_delay
();
retval
=
(
retval
<<
1
)
|
((
readb
(
mdio_addr
)
&
MDIO_Data
)
?
1
:
0
);
writeb
(
MDIO_EnbIn
|
MDIO_ShiftClk
,
mdio_addr
);
retval
=
(
retval
<<
1
)
|
((
ioread8
(
mdio_addr
)
&
MDIO_Data
)
?
1
:
0
);
iowrite8
(
MDIO_EnbIn
|
MDIO_ShiftClk
,
mdio_addr
);
mdio_delay
();
}
return
(
retval
>>
1
)
&
0xffff
;
...
...
@@ -818,7 +804,7 @@ 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
)
{
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
long
mdio_addr
=
dev
->
base_addr
+
MIICtrl
;
void
__iomem
*
mdio_addr
=
np
->
base
+
MIICtrl
;
int
mii_cmd
=
(
0x5002
<<
16
)
|
(
phy_id
<<
23
)
|
(
location
<<
18
)
|
value
;
int
i
;
...
...
@@ -829,16 +815,16 @@ static void mdio_write(struct net_device *dev, int phy_id, int location, int val
for
(
i
=
31
;
i
>=
0
;
i
--
)
{
int
dataval
=
(
mii_cmd
&
(
1
<<
i
))
?
MDIO_WRITE1
:
MDIO_WRITE0
;
writeb
(
dataval
,
mdio_addr
);
iowrite8
(
dataval
,
mdio_addr
);
mdio_delay
();
writeb
(
dataval
|
MDIO_ShiftClk
,
mdio_addr
);
iowrite8
(
dataval
|
MDIO_ShiftClk
,
mdio_addr
);
mdio_delay
();
}
/* Clear out extra bits. */
for
(
i
=
2
;
i
>
0
;
i
--
)
{
writeb
(
MDIO_EnbIn
,
mdio_addr
);
iowrite8
(
MDIO_EnbIn
,
mdio_addr
);
mdio_delay
();
writeb
(
MDIO_EnbIn
|
MDIO_ShiftClk
,
mdio_addr
);
iowrite8
(
MDIO_EnbIn
|
MDIO_ShiftClk
,
mdio_addr
);
mdio_delay
();
}
return
;
...
...
@@ -847,7 +833,7 @@ static void mdio_write(struct net_device *dev, int phy_id, int location, int val
static
int
netdev_open
(
struct
net_device
*
dev
)
{
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
long
ioaddr
=
dev
->
base_addr
;
void
__iomem
*
ioaddr
=
np
->
base
;
int
i
;
/* Do we need to reset the chip??? */
...
...
@@ -861,18 +847,18 @@ static int netdev_open(struct net_device *dev)
dev
->
name
,
dev
->
irq
);
init_ring
(
dev
);
writel
(
np
->
rx_ring_dma
,
ioaddr
+
RxListPtr
);
iowrite32
(
np
->
rx_ring_dma
,
ioaddr
+
RxListPtr
);
/* The Tx list pointer is written as packets are queued. */
/* Initialize other registers. */
__set_mac_addr
(
dev
);
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
writew
(
dev
->
mtu
+
18
,
ioaddr
+
MaxFrameSize
);
iowrite16
(
dev
->
mtu
+
18
,
ioaddr
+
MaxFrameSize
);
#else
writew
(
dev
->
mtu
+
14
,
ioaddr
+
MaxFrameSize
);
iowrite16
(
dev
->
mtu
+
14
,
ioaddr
+
MaxFrameSize
);
#endif
if
(
dev
->
mtu
>
2047
)
writel
(
readl
(
ioaddr
+
ASICCtrl
)
|
0x0C
,
ioaddr
+
ASICCtrl
);
iowrite32
(
ioread32
(
ioaddr
+
ASICCtrl
)
|
0x0C
,
ioaddr
+
ASICCtrl
);
/* Configure the PCI bus bursts and FIFO thresholds. */
...
...
@@ -882,24 +868,24 @@ static int netdev_open(struct net_device *dev)
spin_lock_init
(
&
np
->
mcastlock
);
set_rx_mode
(
dev
);
writew
(
0
,
ioaddr
+
IntrEnable
);
writew
(
0
,
ioaddr
+
DownCounter
);
iowrite16
(
0
,
ioaddr
+
IntrEnable
);
iowrite16
(
0
,
ioaddr
+
DownCounter
);
/* Set the chip to poll every N*320nsec. */
writeb
(
100
,
ioaddr
+
RxDMAPollPeriod
);
writeb
(
127
,
ioaddr
+
TxDMAPollPeriod
);
iowrite8
(
100
,
ioaddr
+
RxDMAPollPeriod
);
iowrite8
(
127
,
ioaddr
+
TxDMAPollPeriod
);
/* Fix DFE-580TX packet drop issue */
if
(
np
->
pci_rev_id
>=
0x14
)
writeb
(
0x01
,
ioaddr
+
DebugCtrl1
);
iowrite8
(
0x01
,
ioaddr
+
DebugCtrl1
);
netif_start_queue
(
dev
);
writew
(
StatsEnable
|
RxEnable
|
TxEnable
,
ioaddr
+
MACCtrl1
);
iowrite16
(
StatsEnable
|
RxEnable
|
TxEnable
,
ioaddr
+
MACCtrl1
);
if
(
netif_msg_ifup
(
np
))
printk
(
KERN_DEBUG
"%s: Done netdev_open(), status: Rx %x Tx %x "
"MAC Control %x, %4.4x %4.4x.
\n
"
,
dev
->
name
,
readl
(
ioaddr
+
RxStatus
),
readb
(
ioaddr
+
TxStatus
),
readl
(
ioaddr
+
MACCtrl0
),
readw
(
ioaddr
+
MACCtrl1
),
readw
(
ioaddr
+
MACCtrl0
));
dev
->
name
,
ioread32
(
ioaddr
+
RxStatus
),
ioread8
(
ioaddr
+
TxStatus
),
ioread32
(
ioaddr
+
MACCtrl0
),
ioread16
(
ioaddr
+
MACCtrl1
),
ioread16
(
ioaddr
+
MACCtrl0
));
/* Set the timer to check for link beat. */
init_timer
(
&
np
->
timer
);
...
...
@@ -909,7 +895,7 @@ static int netdev_open(struct net_device *dev)
add_timer
(
&
np
->
timer
);
/* Enable interrupts by setting the interrupt mask. */
writew
(
DEFAULT_INTR
,
ioaddr
+
IntrEnable
);
iowrite16
(
DEFAULT_INTR
,
ioaddr
+
IntrEnable
);
return
0
;
}
...
...
@@ -917,7 +903,7 @@ static int netdev_open(struct net_device *dev)
static
void
check_duplex
(
struct
net_device
*
dev
)
{
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
long
ioaddr
=
dev
->
base_addr
;
void
__iomem
*
ioaddr
=
np
->
base
;
int
mii_lpa
=
mdio_read
(
dev
,
np
->
phys
[
0
],
MII_LPA
);
int
negotiated
=
mii_lpa
&
np
->
mii_if
.
advertising
;
int
duplex
;
...
...
@@ -925,7 +911,7 @@ static void check_duplex(struct net_device *dev)
/* Force media */
if
(
!
np
->
an_enable
||
mii_lpa
==
0xffff
)
{
if
(
np
->
mii_if
.
full_duplex
)
writew
(
readw
(
ioaddr
+
MACCtrl0
)
|
EnbFullDuplex
,
iowrite16
(
ioread16
(
ioaddr
+
MACCtrl0
)
|
EnbFullDuplex
,
ioaddr
+
MACCtrl0
);
return
;
}
...
...
@@ -938,7 +924,7 @@ static void check_duplex(struct net_device *dev)
printk
(
KERN_INFO
"%s: Setting %s-duplex based on MII #%d "
"negotiated capability %4.4x.
\n
"
,
dev
->
name
,
duplex
?
"full"
:
"half"
,
np
->
phys
[
0
],
negotiated
);
writew
(
readw
(
ioaddr
+
MACCtrl0
)
|
duplex
?
0x20
:
0
,
ioaddr
+
MACCtrl0
);
iowrite16
(
ioread16
(
ioaddr
+
MACCtrl0
)
|
duplex
?
0x20
:
0
,
ioaddr
+
MACCtrl0
);
}
}
...
...
@@ -946,14 +932,14 @@ static void netdev_timer(unsigned long data)
{
struct
net_device
*
dev
=
(
struct
net_device
*
)
data
;
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
long
ioaddr
=
dev
->
base_addr
;
void
__iomem
*
ioaddr
=
np
->
base
;
int
next_tick
=
10
*
HZ
;
if
(
netif_msg_timer
(
np
))
{
printk
(
KERN_DEBUG
"%s: Media selection timer tick, intr status %4.4x, "
"Tx %x Rx %x.
\n
"
,
dev
->
name
,
readw
(
ioaddr
+
IntrEnable
),
readb
(
ioaddr
+
TxStatus
),
readl
(
ioaddr
+
RxStatus
));
dev
->
name
,
ioread16
(
ioaddr
+
IntrEnable
),
ioread8
(
ioaddr
+
TxStatus
),
ioread32
(
ioaddr
+
RxStatus
));
}
check_duplex
(
dev
);
np
->
timer
.
expires
=
jiffies
+
next_tick
;
...
...
@@ -963,16 +949,16 @@ static void netdev_timer(unsigned long data)
static
void
tx_timeout
(
struct
net_device
*
dev
)
{
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
long
ioaddr
=
dev
->
base_addr
;
void
__iomem
*
ioaddr
=
np
->
base
;
unsigned
long
flag
;
netif_stop_queue
(
dev
);
tasklet_disable
(
&
np
->
tx_tasklet
);
writew
(
0
,
ioaddr
+
IntrEnable
);
iowrite16
(
0
,
ioaddr
+
IntrEnable
);
printk
(
KERN_WARNING
"%s: Transmit timed out, TxStatus %2.2x "
"TxFrameId %2.2x,"
" resetting...
\n
"
,
dev
->
name
,
readb
(
ioaddr
+
TxStatus
),
readb
(
ioaddr
+
TxFrameId
));
" resetting...
\n
"
,
dev
->
name
,
ioread8
(
ioaddr
+
TxStatus
),
ioread8
(
ioaddr
+
TxFrameId
));
{
int
i
;
...
...
@@ -986,7 +972,7 @@ static void tx_timeout(struct net_device *dev)
le32_to_cpu
(
np
->
tx_ring
[
i
].
frag
[
0
].
length
));
}
printk
(
KERN_DEBUG
"TxListPtr=%08x netif_queue_stopped=%d
\n
"
,
readl
(
dev
->
base_addr
+
TxListPtr
),
ioread32
(
np
->
base
+
TxListPtr
),
netif_queue_stopped
(
dev
));
printk
(
KERN_DEBUG
"cur_tx=%d(%02x) dirty_tx=%d(%02x)
\n
"
,
np
->
cur_tx
,
np
->
cur_tx
%
TX_RING_SIZE
,
...
...
@@ -1007,7 +993,7 @@ static void tx_timeout(struct net_device *dev)
if
(
np
->
cur_tx
-
np
->
dirty_tx
<
TX_QUEUE_LEN
-
4
)
{
netif_wake_queue
(
dev
);
}
writew
(
DEFAULT_INTR
,
ioaddr
+
IntrEnable
);
iowrite16
(
DEFAULT_INTR
,
ioaddr
+
IntrEnable
);
tasklet_enable
(
&
np
->
tx_tasklet
);
}
...
...
@@ -1076,9 +1062,9 @@ static void tx_poll (unsigned long data)
/* Indicate the latest descriptor of tx ring */
txdesc
->
status
|=
cpu_to_le32
(
DescIntrOnTx
);
if
(
readl
(
dev
->
base_addr
+
TxListPtr
)
==
0
)
writel
(
np
->
tx_ring_dma
+
head
*
sizeof
(
struct
netdev_desc
),
dev
->
base_addr
+
TxListPtr
);
if
(
ioread32
(
np
->
base
+
TxListPtr
)
==
0
)
iowrite32
(
np
->
tx_ring_dma
+
head
*
sizeof
(
struct
netdev_desc
),
np
->
base
+
TxListPtr
);
return
;
}
...
...
@@ -1128,17 +1114,17 @@ static int
reset_tx
(
struct
net_device
*
dev
)
{
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
long
ioaddr
=
dev
->
base_addr
;
void
__iomem
*
ioaddr
=
np
->
base
;
struct
sk_buff
*
skb
;
int
i
;
int
irq
=
in_interrupt
();
/* Reset tx logic, TxListPtr will be cleaned */
writew
(
TxDisable
,
ioaddr
+
MACCtrl1
);
writew
(
TxReset
|
DMAReset
|
FIFOReset
|
NetworkReset
,
iowrite16
(
TxDisable
,
ioaddr
+
MACCtrl1
);
iowrite16
(
TxReset
|
DMAReset
|
FIFOReset
|
NetworkReset
,
ioaddr
+
ASICCtrl
+
2
);
for
(
i
=
50
;
i
>
0
;
i
--
)
{
if
((
readw
(
ioaddr
+
ASICCtrl
+
2
)
&
ResetBusy
)
==
0
)
if
((
ioread16
(
ioaddr
+
ASICCtrl
+
2
)
&
ResetBusy
)
==
0
)
break
;
mdelay
(
1
);
}
...
...
@@ -1159,7 +1145,7 @@ reset_tx (struct net_device *dev)
}
np
->
cur_tx
=
np
->
dirty_tx
=
0
;
np
->
cur_task
=
0
;
writew
(
StatsEnable
|
RxEnable
|
TxEnable
,
ioaddr
+
MACCtrl1
);
iowrite16
(
StatsEnable
|
RxEnable
|
TxEnable
,
ioaddr
+
MACCtrl1
);
return
0
;
}
...
...
@@ -1168,19 +1154,17 @@ reset_tx (struct net_device *dev)
static
irqreturn_t
intr_handler
(
int
irq
,
void
*
dev_instance
,
struct
pt_regs
*
rgs
)
{
struct
net_device
*
dev
=
(
struct
net_device
*
)
dev_instance
;
struct
netdev_private
*
np
;
long
ioaddr
;
struct
netdev_private
*
np
=
netdev_priv
(
dev
)
;
void
__iomem
*
ioaddr
=
np
->
base
;
int
hw_frame_id
;
int
tx_cnt
;
int
tx_status
;
int
handled
=
0
;
ioaddr
=
dev
->
base_addr
;
np
=
netdev_priv
(
dev
);
do
{
int
intr_status
=
readw
(
ioaddr
+
IntrStatus
);
writew
(
intr_status
,
ioaddr
+
IntrStatus
);
int
intr_status
=
ioread16
(
ioaddr
+
IntrStatus
);
iowrite16
(
intr_status
,
ioaddr
+
IntrStatus
);
if
(
netif_msg_intr
(
np
))
printk
(
KERN_DEBUG
"%s: Interrupt, status %4.4x.
\n
"
,
...
...
@@ -1192,14 +1176,14 @@ static irqreturn_t intr_handler(int irq, void *dev_instance, struct pt_regs *rgs
handled
=
1
;
if
(
intr_status
&
(
IntrRxDMADone
))
{
writew
(
DEFAULT_INTR
&
~
(
IntrRxDone
|
IntrRxDMADone
),
iowrite16
(
DEFAULT_INTR
&
~
(
IntrRxDone
|
IntrRxDMADone
),
ioaddr
+
IntrEnable
);
if
(
np
->
budget
<
0
)
np
->
budget
=
RX_BUDGET
;
tasklet_schedule
(
&
np
->
rx_tasklet
);
}
if
(
intr_status
&
(
IntrTxDone
|
IntrDrvRqst
))
{
tx_status
=
readw
(
ioaddr
+
TxStatus
);
tx_status
=
ioread16
(
ioaddr
+
TxStatus
);
for
(
tx_cnt
=
32
;
tx_status
&
0x80
;
--
tx_cnt
)
{
if
(
netif_msg_tx_done
(
np
))
printk
...
...
@@ -1221,18 +1205,18 @@ static irqreturn_t intr_handler(int irq, void *dev_instance, struct pt_regs *rgs
spin_unlock
(
&
np
->
lock
);
}
if
(
tx_status
&
0x1e
)
/* Restart the Tx. */
writew
(
TxEnable
,
iowrite16
(
TxEnable
,
ioaddr
+
MACCtrl1
);
}
/* Yup, this is a documentation bug. It cost me *hours*. */
writew
(
0
,
ioaddr
+
TxStatus
);
tx_status
=
readw
(
ioaddr
+
TxStatus
);
iowrite16
(
0
,
ioaddr
+
TxStatus
);
tx_status
=
ioread16
(
ioaddr
+
TxStatus
);
if
(
tx_cnt
<
0
)
break
;
}
hw_frame_id
=
(
tx_status
>>
8
)
&
0xff
;
}
else
{
hw_frame_id
=
readb
(
ioaddr
+
TxFrameId
);
hw_frame_id
=
ioread8
(
ioaddr
+
TxFrameId
);
}
if
(
np
->
pci_rev_id
>=
0x14
)
{
...
...
@@ -1293,8 +1277,8 @@ static irqreturn_t intr_handler(int irq, void *dev_instance, struct pt_regs *rgs
}
while
(
0
);
if
(
netif_msg_intr
(
np
))
printk
(
KERN_DEBUG
"%s: exiting interrupt, status=%#4.4x.
\n
"
,
dev
->
name
,
readw
(
ioaddr
+
IntrStatus
));
writel
(
5000
,
ioaddr
+
DownCounter
);
dev
->
name
,
ioread16
(
ioaddr
+
IntrStatus
));
iowrite32
(
5000
,
ioaddr
+
DownCounter
);
return
IRQ_RETVAL
(
handled
);
}
...
...
@@ -1304,7 +1288,7 @@ static void rx_poll(unsigned long data)
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
int
entry
=
np
->
cur_rx
%
RX_RING_SIZE
;
int
boguscnt
=
np
->
budget
;
long
ioaddr
=
dev
->
base_addr
;
void
__iomem
*
ioaddr
=
np
->
base
;
int
received
=
0
;
/* If EOP is set on the next entry, it's a new packet. Send it up. */
...
...
@@ -1381,7 +1365,7 @@ static void rx_poll(unsigned long data)
np
->
cur_rx
=
entry
;
refill_rx
(
dev
);
np
->
budget
-=
received
;
writew
(
DEFAULT_INTR
,
ioaddr
+
IntrEnable
);
iowrite16
(
DEFAULT_INTR
,
ioaddr
+
IntrEnable
);
return
;
not_done:
...
...
@@ -1428,8 +1412,8 @@ static void refill_rx (struct net_device *dev)
}
static
void
netdev_error
(
struct
net_device
*
dev
,
int
intr_status
)
{
long
ioaddr
=
dev
->
base_addr
;
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
void
__iomem
*
ioaddr
=
np
->
base
;
u16
mii_ctl
,
mii_advertise
,
mii_lpa
;
int
speed
;
...
...
@@ -1465,9 +1449,9 @@ static void netdev_error(struct net_device *dev, int intr_status)
}
check_duplex
(
dev
);
if
(
np
->
flowctrl
&&
np
->
mii_if
.
full_duplex
)
{
writew
(
readw
(
ioaddr
+
MulticastFilter1
+
2
)
|
0x0200
,
iowrite16
(
ioread16
(
ioaddr
+
MulticastFilter1
+
2
)
|
0x0200
,
ioaddr
+
MulticastFilter1
+
2
);
writew
(
readw
(
ioaddr
+
MACCtrl0
)
|
EnbFlowCtrl
,
iowrite16
(
ioread16
(
ioaddr
+
MACCtrl0
)
|
EnbFlowCtrl
,
ioaddr
+
MACCtrl0
);
}
}
...
...
@@ -1484,35 +1468,35 @@ static void netdev_error(struct net_device *dev, int intr_status)
static
struct
net_device_stats
*
get_stats
(
struct
net_device
*
dev
)
{
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
long
ioaddr
=
dev
->
base_addr
;
void
__iomem
*
ioaddr
=
np
->
base
;
int
i
;
/* We should lock this segment of code for SMP eventually, although
the vulnerability window is very small and statistics are
non-critical. */
/* The chip only need report frame silently dropped. */
np
->
stats
.
rx_missed_errors
+=
readb
(
ioaddr
+
RxMissed
);
np
->
stats
.
tx_packets
+=
readw
(
ioaddr
+
TxFramesOK
);
np
->
stats
.
rx_packets
+=
readw
(
ioaddr
+
RxFramesOK
);
np
->
stats
.
collisions
+=
readb
(
ioaddr
+
StatsLateColl
);
np
->
stats
.
collisions
+=
readb
(
ioaddr
+
StatsMultiColl
);
np
->
stats
.
collisions
+=
readb
(
ioaddr
+
StatsOneColl
);
np
->
stats
.
tx_carrier_errors
+=
readb
(
ioaddr
+
StatsCarrierError
);
readb
(
ioaddr
+
StatsTxDefer
);
np
->
stats
.
rx_missed_errors
+=
ioread8
(
ioaddr
+
RxMissed
);
np
->
stats
.
tx_packets
+=
ioread16
(
ioaddr
+
TxFramesOK
);
np
->
stats
.
rx_packets
+=
ioread16
(
ioaddr
+
RxFramesOK
);
np
->
stats
.
collisions
+=
ioread8
(
ioaddr
+
StatsLateColl
);
np
->
stats
.
collisions
+=
ioread8
(
ioaddr
+
StatsMultiColl
);
np
->
stats
.
collisions
+=
ioread8
(
ioaddr
+
StatsOneColl
);
np
->
stats
.
tx_carrier_errors
+=
ioread8
(
ioaddr
+
StatsCarrierError
);
ioread8
(
ioaddr
+
StatsTxDefer
);
for
(
i
=
StatsTxDefer
;
i
<=
StatsMcastRx
;
i
++
)
readb
(
ioaddr
+
i
);
np
->
stats
.
tx_bytes
+=
readw
(
ioaddr
+
TxOctetsLow
);
np
->
stats
.
tx_bytes
+=
readw
(
ioaddr
+
TxOctetsHigh
)
<<
16
;
np
->
stats
.
rx_bytes
+=
readw
(
ioaddr
+
RxOctetsLow
);
np
->
stats
.
rx_bytes
+=
readw
(
ioaddr
+
RxOctetsHigh
)
<<
16
;
ioread8
(
ioaddr
+
i
);
np
->
stats
.
tx_bytes
+=
ioread16
(
ioaddr
+
TxOctetsLow
);
np
->
stats
.
tx_bytes
+=
ioread16
(
ioaddr
+
TxOctetsHigh
)
<<
16
;
np
->
stats
.
rx_bytes
+=
ioread16
(
ioaddr
+
RxOctetsLow
);
np
->
stats
.
rx_bytes
+=
ioread16
(
ioaddr
+
RxOctetsHigh
)
<<
16
;
return
&
np
->
stats
;
}
static
void
set_rx_mode
(
struct
net_device
*
dev
)
{
long
ioaddr
=
dev
->
base_addr
;
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
void
__iomem
*
ioaddr
=
np
->
base
;
u16
mc_filter
[
4
];
/* Multicast hash filter */
u32
rx_mode
;
int
i
;
...
...
@@ -1542,27 +1526,28 @@ static void set_rx_mode(struct net_device *dev)
}
rx_mode
=
AcceptBroadcast
|
AcceptMultiHash
|
AcceptMyPhys
;
}
else
{
writeb
(
AcceptBroadcast
|
AcceptMyPhys
,
ioaddr
+
RxMode
);
iowrite8
(
AcceptBroadcast
|
AcceptMyPhys
,
ioaddr
+
RxMode
);
return
;
}
if
(
np
->
mii_if
.
full_duplex
&&
np
->
flowctrl
)
mc_filter
[
3
]
|=
0x0200
;
for
(
i
=
0
;
i
<
4
;
i
++
)
writew
(
mc_filter
[
i
],
ioaddr
+
MulticastFilter0
+
i
*
2
);
writeb
(
rx_mode
,
ioaddr
+
RxMode
);
iowrite16
(
mc_filter
[
i
],
ioaddr
+
MulticastFilter0
+
i
*
2
);
iowrite8
(
rx_mode
,
ioaddr
+
RxMode
);
}
static
int
__set_mac_addr
(
struct
net_device
*
dev
)
{
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
u16
addr16
;
addr16
=
(
dev
->
dev_addr
[
0
]
|
(
dev
->
dev_addr
[
1
]
<<
8
));
writew
(
addr16
,
dev
->
base_addr
+
StationAddr
);
iowrite16
(
addr16
,
np
->
base
+
StationAddr
);
addr16
=
(
dev
->
dev_addr
[
2
]
|
(
dev
->
dev_addr
[
3
]
<<
8
));
writew
(
addr16
,
dev
->
base_addr
+
StationAddr
+
2
);
iowrite16
(
addr16
,
np
->
base
+
StationAddr
+
2
);
addr16
=
(
dev
->
dev_addr
[
4
]
|
(
dev
->
dev_addr
[
5
]
<<
8
));
writew
(
addr16
,
dev
->
base_addr
+
StationAddr
+
4
);
iowrite16
(
addr16
,
np
->
base
+
StationAddr
+
4
);
return
0
;
}
...
...
@@ -1638,9 +1623,9 @@ static struct ethtool_ops ethtool_ops = {
static
int
netdev_ioctl
(
struct
net_device
*
dev
,
struct
ifreq
*
rq
,
int
cmd
)
{
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
void
__iomem
*
ioaddr
=
np
->
base
;
int
rc
;
int
i
;
long
ioaddr
=
dev
->
base_addr
;
if
(
!
netif_running
(
dev
))
return
-
EINVAL
;
...
...
@@ -1661,14 +1646,14 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
le32_to_cpu
(
np
->
tx_ring
[
i
].
frag
[
0
].
length
));
}
printk
(
KERN_DEBUG
"TxListPtr=%08x netif_queue_stopped=%d
\n
"
,
readl
(
dev
->
base_addr
+
TxListPtr
),
ioread32
(
np
->
base
+
TxListPtr
),
netif_queue_stopped
(
dev
));
printk
(
KERN_DEBUG
"cur_tx=%d(%02x) dirty_tx=%d(%02x)
\n
"
,
np
->
cur_tx
,
np
->
cur_tx
%
TX_RING_SIZE
,
np
->
dirty_tx
,
np
->
dirty_tx
%
TX_RING_SIZE
);
printk
(
KERN_DEBUG
"cur_rx=%d dirty_rx=%d
\n
"
,
np
->
cur_rx
,
np
->
dirty_rx
);
printk
(
KERN_DEBUG
"cur_task=%d
\n
"
,
np
->
cur_task
);
printk
(
KERN_DEBUG
"TxStatus=%04x
\n
"
,
readw
(
ioaddr
+
TxStatus
));
printk
(
KERN_DEBUG
"TxStatus=%04x
\n
"
,
ioread16
(
ioaddr
+
TxStatus
));
return
0
;
}
...
...
@@ -1678,8 +1663,8 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
static
int
netdev_close
(
struct
net_device
*
dev
)
{
long
ioaddr
=
dev
->
base_addr
;
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
void
__iomem
*
ioaddr
=
np
->
base
;
struct
sk_buff
*
skb
;
int
i
;
...
...
@@ -1688,17 +1673,17 @@ static int netdev_close(struct net_device *dev)
if
(
netif_msg_ifdown
(
np
))
{
printk
(
KERN_DEBUG
"%s: Shutting down ethercard, status was Tx %2.2x "
"Rx %4.4x Int %2.2x.
\n
"
,
dev
->
name
,
readb
(
ioaddr
+
TxStatus
),
readl
(
ioaddr
+
RxStatus
),
readw
(
ioaddr
+
IntrStatus
));
dev
->
name
,
ioread8
(
ioaddr
+
TxStatus
),
ioread32
(
ioaddr
+
RxStatus
),
ioread16
(
ioaddr
+
IntrStatus
));
printk
(
KERN_DEBUG
"%s: Queue pointers were Tx %d / %d, Rx %d / %d.
\n
"
,
dev
->
name
,
np
->
cur_tx
,
np
->
dirty_tx
,
np
->
cur_rx
,
np
->
dirty_rx
);
}
/* Disable interrupts by clearing the interrupt mask. */
writew
(
0x0000
,
ioaddr
+
IntrEnable
);
iowrite16
(
0x0000
,
ioaddr
+
IntrEnable
);
/* Stop the chip's Tx and Rx processes. */
writew
(
TxDisable
|
RxDisable
|
StatsDisable
,
ioaddr
+
MACCtrl1
);
iowrite16
(
TxDisable
|
RxDisable
|
StatsDisable
,
ioaddr
+
MACCtrl1
);
/* Wait and kill tasklet */
tasklet_kill
(
&
np
->
rx_tasklet
);
...
...
@@ -1765,10 +1750,8 @@ static void __devexit sundance_remove1 (struct pci_dev *pdev)
np
->
rx_ring_dma
);
pci_free_consistent
(
pdev
,
TX_TOTAL_SIZE
,
np
->
tx_ring
,
np
->
tx_ring_dma
);
pci_iounmap
(
pdev
,
np
->
base
);
pci_release_regions
(
pdev
);
#ifndef USE_IO_OPS
iounmap
((
char
*
)(
dev
->
base_addr
));
#endif
free_netdev
(
dev
);
pci_set_drvdata
(
pdev
,
NULL
);
}
...
...
drivers/net/tokenring/lanstreamer.c
View file @
7bedd791
...
...
@@ -443,7 +443,7 @@ static void __devexit streamer_remove_one(struct pci_dev *pdev)
static
int
streamer_reset
(
struct
net_device
*
dev
)
{
struct
streamer_private
*
streamer_priv
;
__u8
*
streamer_mmio
;
__u8
__iomem
*
streamer_mmio
;
unsigned
long
t
;
unsigned
int
uaa_addr
;
struct
sk_buff
*
skb
=
NULL
;
...
...
@@ -591,7 +591,7 @@ static int streamer_reset(struct net_device *dev)
static
int
streamer_open
(
struct
net_device
*
dev
)
{
struct
streamer_private
*
streamer_priv
=
(
struct
streamer_private
*
)
dev
->
priv
;
__u8
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
__u8
__iomem
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
unsigned
long
flags
;
char
open_error
[
255
];
int
i
,
open_finished
=
1
;
...
...
@@ -908,7 +908,7 @@ static void streamer_rx(struct net_device *dev)
{
struct
streamer_private
*
streamer_priv
=
(
struct
streamer_private
*
)
dev
->
priv
;
__u8
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
__u8
__iomem
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
struct
streamer_rx_desc
*
rx_desc
;
int
rx_ring_last_received
,
length
,
frame_length
,
buffer_cnt
=
0
;
struct
sk_buff
*
skb
,
*
skb2
;
...
...
@@ -1035,7 +1035,7 @@ static irqreturn_t streamer_interrupt(int irq, void *dev_id, struct pt_regs *reg
struct
net_device
*
dev
=
(
struct
net_device
*
)
dev_id
;
struct
streamer_private
*
streamer_priv
=
(
struct
streamer_private
*
)
dev
->
priv
;
__u8
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
__u8
__iomem
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
__u16
sisr
;
__u16
misr
;
u8
max_intr
=
MAX_INTR
;
...
...
@@ -1158,7 +1158,7 @@ static int streamer_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct
streamer_private
*
streamer_priv
=
(
struct
streamer_private
*
)
dev
->
priv
;
__u8
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
__u8
__iomem
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
streamer_priv
->
streamer_lock
,
flags
);
...
...
@@ -1209,7 +1209,7 @@ static int streamer_close(struct net_device *dev)
{
struct
streamer_private
*
streamer_priv
=
(
struct
streamer_private
*
)
dev
->
priv
;
__u8
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
__u8
__iomem
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
unsigned
long
flags
;
int
i
;
...
...
@@ -1275,7 +1275,7 @@ static void streamer_set_rx_mode(struct net_device *dev)
{
struct
streamer_private
*
streamer_priv
=
(
struct
streamer_private
*
)
dev
->
priv
;
__u8
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
__u8
__iomem
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
__u8
options
=
0
;
struct
dev_mc_list
*
dmi
;
unsigned
char
dev_mc_address
[
5
];
...
...
@@ -1334,7 +1334,7 @@ static void streamer_set_rx_mode(struct net_device *dev)
static
void
streamer_srb_bh
(
struct
net_device
*
dev
)
{
struct
streamer_private
*
streamer_priv
=
(
struct
streamer_private
*
)
dev
->
priv
;
__u8
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
__u8
__iomem
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
__u16
srb_word
;
writew
(
streamer_priv
->
srb
,
streamer_mmio
+
LAPA
);
...
...
@@ -1531,7 +1531,7 @@ static void streamer_arb_cmd(struct net_device *dev)
{
struct
streamer_private
*
streamer_priv
=
(
struct
streamer_private
*
)
dev
->
priv
;
__u8
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
__u8
__iomem
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
__u8
header_len
;
__u16
frame_len
,
buffer_len
;
struct
sk_buff
*
mac_frame
;
...
...
@@ -1747,7 +1747,7 @@ static void streamer_asb_bh(struct net_device *dev)
{
struct
streamer_private
*
streamer_priv
=
(
struct
streamer_private
*
)
dev
->
priv
;
__u8
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
__u8
__iomem
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
if
(
streamer_priv
->
asb_queued
==
1
)
{
...
...
@@ -1855,7 +1855,7 @@ static int sprintf_info(char *buffer, struct net_device *dev)
{
struct
streamer_private
*
streamer_priv
=
(
struct
streamer_private
*
)
dev
->
priv
;
__u8
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
__u8
__iomem
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
struct
streamer_adapter_addr_table
sat
;
struct
streamer_parameters_table
spt
;
int
size
=
0
;
...
...
@@ -1939,7 +1939,7 @@ static int streamer_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
{
int
i
;
struct
streamer_private
*
streamer_priv
=
(
struct
streamer_private
*
)
dev
->
priv
;
u8
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
u8
__iomem
*
streamer_mmio
=
streamer_priv
->
streamer_mmio
;
switch
(
cmd
)
{
case
IOCTL_SISR_MASK
:
...
...
drivers/net/tokenring/lanstreamer.h
View file @
7bedd791
...
...
@@ -293,7 +293,7 @@ struct streamer_private {
struct
streamer_private
*
next
;
struct
pci_dev
*
pci_dev
;
__u8
*
streamer_mmio
;
__u8
__iomem
*
streamer_mmio
;
char
*
streamer_card_name
;
spinlock_t
streamer_lock
;
...
...
drivers/net/tokenring/olympic.c
View file @
7bedd791
...
...
@@ -438,8 +438,8 @@ static int olympic_open(struct net_device *dev)
struct
olympic_private
*
olympic_priv
=
(
struct
olympic_private
*
)
dev
->
priv
;
u8
__iomem
*
olympic_mmio
=
olympic_priv
->
olympic_mmio
,
*
init_srb
;
unsigned
long
flags
,
t
;
char
open_error
[
255
]
;
int
i
,
open_finished
=
1
;
u8
resp
,
err
;
DECLARE_WAITQUEUE
(
wait
,
current
)
;
...
...
@@ -540,52 +540,48 @@ static int olympic_open(struct net_device *dev)
* timed out.
*/
if
(
readb
(
init_srb
+
2
)
==
OLYMPIC_CLEAR_RET_CODE
)
{
switch
(
resp
=
readb
(
init_srb
+
2
))
{
case
OLYMPIC_CLEAR_RET_CODE
:
printk
(
KERN_WARNING
"%s: Adapter Open time out or error.
\n
"
,
dev
->
name
)
;
return
-
EIO
;
}
if
(
readb
(
init_srb
+
2
)
!=
0
)
{
if
(
readb
(
init_srb
+
2
)
==
0x07
)
{
if
(
!
olympic_priv
->
olympic_ring_speed
&&
open_finished
)
{
/* Autosense , first time around */
printk
(
KERN_WARNING
"%s: Retrying at different ring speed
\n
"
,
dev
->
name
);
open_finished
=
0
;
}
else
{
goto
out
;
case
0
:
open_finished
=
1
;
break
;
case
0x07
:
if
(
!
olympic_priv
->
olympic_ring_speed
&&
open_finished
)
{
/* Autosense , first time around */
printk
(
KERN_WARNING
"%s: Retrying at different ring speed
\n
"
,
dev
->
name
);
open_finished
=
0
;
continue
;
}
strcpy
(
open_error
,
open_maj_error
[(
readb
(
init_srb
+
7
)
&
0xf0
)
>>
4
])
;
strcat
(
open_error
,
" - "
)
;
strcat
(
open_error
,
open_min_error
[(
readb
(
init_srb
+
7
)
&
0x0f
)])
;
err
=
readb
(
init_srb
+
7
);
if
(
!
olympic_priv
->
olympic_ring_speed
&&
((
readb
(
init_srb
+
7
)
&
0x0f
)
==
0x0d
))
{
printk
(
KERN_WARNING
"%s: Tried to autosense ring speed with no monitors present
\n
"
,
dev
->
name
);
printk
(
KERN_WARNING
"%s: Please try again with a specified ring speed
\n
"
,
dev
->
name
);
free_irq
(
dev
->
irq
,
dev
);
return
-
EIO
;
}
if
(
!
olympic_priv
->
olympic_ring_speed
&&
((
err
&
0x0f
)
==
0x0d
))
{
printk
(
KERN_WARNING
"%s: Tried to autosense ring speed with no monitors present
\n
"
,
dev
->
name
);
printk
(
KERN_WARNING
"%s: Please try again with a specified ring speed
\n
"
,
dev
->
name
);
}
else
{
printk
(
KERN_WARNING
"%s: %s - %s
\n
"
,
dev
->
name
,
open_maj_error
[(
err
&
0xf0
)
>>
4
],
open_min_error
[(
err
&
0x0f
)]);
}
goto
out
;
case
0x32
:
printk
(
KERN_WARNING
"%s: Invalid LAA: %02x:%02x:%02x:%02x:%02x:%02x
\n
"
,
dev
->
name
,
olympic_priv
->
olympic_laa
[
0
],
olympic_priv
->
olympic_laa
[
1
],
olympic_priv
->
olympic_laa
[
2
],
olympic_priv
->
olympic_laa
[
3
],
olympic_priv
->
olympic_laa
[
4
],
olympic_priv
->
olympic_laa
[
5
])
;
goto
out
;
printk
(
KERN_WARNING
"%s: %s
\n
"
,
dev
->
name
,
open_error
);
free_irq
(
dev
->
irq
,
dev
)
;
return
-
EIO
;
}
/* if autosense && open_finished */
}
else
if
(
init_srb
[
2
]
==
0x32
)
{
printk
(
KERN_WARNING
"%s: Invalid LAA: %02x:%02x:%02x:%02x:%02x:%02x
\n
"
,
dev
->
name
,
olympic_priv
->
olympic_laa
[
0
],
olympic_priv
->
olympic_laa
[
1
],
olympic_priv
->
olympic_laa
[
2
],
olympic_priv
->
olympic_laa
[
3
],
olympic_priv
->
olympic_laa
[
4
],
olympic_priv
->
olympic_laa
[
5
])
;
free_irq
(
dev
->
irq
,
dev
)
;
return
-
EIO
;
}
else
{
printk
(
KERN_WARNING
"%s: Bad OPEN response: %x
\n
"
,
dev
->
name
,
init_srb
[
2
]);
free_irq
(
dev
->
irq
,
dev
);
return
-
EIO
;
}
}
else
open_finished
=
1
;
default:
printk
(
KERN_WARNING
"%s: Bad OPEN response: %x
\n
"
,
dev
->
name
,
resp
);
goto
out
;
}
}
while
(
!
(
open_finished
))
;
/* Will only loop if ring speed mismatch re-open attempted && autosense is on */
if
(
readb
(
init_srb
+
18
)
&
(
1
<<
3
))
...
...
@@ -634,8 +630,7 @@ static int olympic_open(struct net_device *dev)
if
(
i
==
0
)
{
printk
(
KERN_WARNING
"%s: Not enough memory to allocate rx buffers. Adapter disabled
\n
"
,
dev
->
name
);
free_irq
(
dev
->
irq
,
dev
);
return
-
EIO
;
goto
out
;
}
olympic_priv
->
rx_ring_dma_addr
=
pci_map_single
(
olympic_priv
->
pdev
,
olympic_priv
->
olympic_rx_ring
,
...
...
@@ -737,7 +732,10 @@ static int olympic_open(struct net_device *dev)
netif_start_queue
(
dev
);
return
0
;
out:
free_irq
(
dev
->
irq
,
dev
);
return
-
EIO
;
}
/*
...
...
drivers/net/wireless/airo.c
View file @
7bedd791
...
...
@@ -970,7 +970,7 @@ typedef struct {
* Host receive descriptor
*/
typedef
struct
{
unsigned
char
*
card_ram_off
;
/* offset into card memory of the
unsigned
char
__iomem
*
card_ram_off
;
/* offset into card memory of the
desc */
RxFid
rx_desc
;
/* card receive descriptor */
char
*
virtual_host_addr
;
/* virtual address of host receive
...
...
@@ -982,7 +982,7 @@ typedef struct {
* Host transmit descriptor
*/
typedef
struct
{
unsigned
char
*
card_ram_off
;
/* offset into card memory of the
unsigned
char
__iomem
*
card_ram_off
;
/* offset into card memory of the
desc */
TxFid
tx_desc
;
/* card transmit descriptor */
char
*
virtual_host_addr
;
/* virtual address of host receive
...
...
@@ -994,7 +994,7 @@ typedef struct {
* Host RID descriptor
*/
typedef
struct
{
unsigned
char
*
card_ram_off
;
/* offset into card memory of the
unsigned
char
__iomem
*
card_ram_off
;
/* offset into card memory of the
descriptor */
Rid
rid_desc
;
/* card RID descriptor */
char
*
virtual_host_addr
;
/* virtual address of host receive
...
...
@@ -1203,8 +1203,8 @@ struct airo_info {
unsigned
long
ridbus
;
// phys addr of config_desc
struct
sk_buff_head
txq
;
// tx queue used by mpi350 code
struct
pci_dev
*
pci
;
unsigned
char
*
pcimem
;
unsigned
char
*
pciaux
;
unsigned
char
__iomem
*
pcimem
;
unsigned
char
__iomem
*
pciaux
;
unsigned
char
*
shared
;
dma_addr_t
shared_dma
;
int
power
;
...
...
@@ -2029,8 +2029,8 @@ static int mpi_send_packet (struct net_device *dev)
memcpy
(
sendbuf
,
buffer
,
len
);
}
memcpy
((
char
*
)
ai
->
txfids
[
0
].
card_ram_off
,
(
char
*
)
&
ai
->
txfids
[
0
].
tx_desc
,
sizeof
(
TxFid
));
memcpy
_toio
(
ai
->
txfids
[
0
].
card_ram_off
,
&
ai
->
txfids
[
0
].
tx_desc
,
sizeof
(
TxFid
));
OUT4500
(
ai
,
EVACK
,
8
);
...
...
@@ -2460,7 +2460,7 @@ static int mpi_init_descriptors (struct airo_info *ai)
}
for
(
i
=
0
;
i
<
MPI_MAX_FIDS
;
i
++
)
{
memcpy
(
ai
->
rxfids
[
i
].
card_ram_off
,
memcpy
_toio
(
ai
->
rxfids
[
i
].
card_ram_off
,
&
ai
->
rxfids
[
i
].
rx_desc
,
sizeof
(
RxFid
));
}
...
...
@@ -2476,7 +2476,7 @@ static int mpi_init_descriptors (struct airo_info *ai)
for
(
i
=
0
;
i
<
MPI_MAX_FIDS
;
i
++
)
{
ai
->
txfids
[
i
].
tx_desc
.
valid
=
1
;
memcpy
((
char
*
)
ai
->
txfids
[
i
].
card_ram_off
,
memcpy
_toio
(
ai
->
txfids
[
i
].
card_ram_off
,
&
ai
->
txfids
[
i
].
tx_desc
,
sizeof
(
TxFid
));
}
ai
->
txfids
[
i
-
1
].
tx_desc
.
eoc
=
1
;
/* Last descriptor has EOC set */
...
...
@@ -2501,8 +2501,8 @@ static int mpi_init_descriptors (struct airo_info *ai)
return
rc
;
}
memcpy
((
char
*
)
ai
->
config_desc
.
card_ram_off
,
(
char
*
)
&
ai
->
config_desc
.
rid_desc
,
sizeof
(
Rid
));
memcpy
_toio
(
ai
->
config_desc
.
card_ram_off
,
&
ai
->
config_desc
.
rid_desc
,
sizeof
(
Rid
));
return
rc
;
}
...
...
@@ -2520,7 +2520,7 @@ static int mpi_map_card(struct airo_info *ai, struct pci_dev *pci,
int
rc
=
-
1
;
int
i
;
unsigned
char
*
busaddroff
,
*
vpackoff
;
unsigned
char
*
pciaddroff
;
unsigned
char
__iomem
*
pciaddroff
;
mem_start
=
pci_resource_start
(
pci
,
1
);
mem_len
=
pci_resource_len
(
pci
,
1
);
...
...
@@ -3441,7 +3441,7 @@ static void mpi_receive_802_3(struct airo_info *ai)
MICBuffer
micbuf
;
#endif
memcpy
((
char
*
)
&
rxd
,
ai
->
rxfids
[
0
].
card_ram_off
,
sizeof
(
rxd
));
memcpy
_fromio
(
&
rxd
,
ai
->
rxfids
[
0
].
card_ram_off
,
sizeof
(
rxd
));
/* Make sure we got something */
if
(
rxd
.
rdy
&&
rxd
.
valid
==
0
)
{
len
=
rxd
.
len
+
12
;
...
...
@@ -3504,7 +3504,7 @@ static void mpi_receive_802_3(struct airo_info *ai)
rxd
.
valid
=
1
;
rxd
.
rdy
=
0
;
rxd
.
len
=
PKTSIZE
;
memcpy
(
ai
->
rxfids
[
0
].
card_ram_off
,
(
char
*
)
&
rxd
,
sizeof
(
rxd
));
memcpy
_toio
(
ai
->
rxfids
[
0
].
card_ram_off
,
&
rxd
,
sizeof
(
rxd
));
}
}
...
...
@@ -3526,7 +3526,7 @@ void mpi_receive_802_11 (struct airo_info *ai)
u16
*
buffer
;
char
*
ptr
=
ai
->
rxfids
[
0
].
virtual_host_addr
+
4
;
memcpy
((
char
*
)
&
rxd
,
ai
->
rxfids
[
0
].
card_ram_off
,
sizeof
(
rxd
));
memcpy
_fromio
(
&
rxd
,
ai
->
rxfids
[
0
].
card_ram_off
,
sizeof
(
rxd
));
memcpy
((
char
*
)
&
hdr
,
ptr
,
sizeof
(
hdr
));
ptr
+=
sizeof
(
hdr
);
/* Bad CRC. Ignore packet */
...
...
@@ -3610,7 +3610,7 @@ void mpi_receive_802_11 (struct airo_info *ai)
rxd
.
valid
=
1
;
rxd
.
rdy
=
0
;
rxd
.
len
=
PKTSIZE
;
memcpy
(
ai
->
rxfids
[
0
].
card_ram_off
,
(
char
*
)
&
rxd
,
sizeof
(
rxd
));
memcpy
_toio
(
ai
->
rxfids
[
0
].
card_ram_off
,
&
rxd
,
sizeof
(
rxd
));
}
}
...
...
@@ -3990,8 +3990,8 @@ static int PC4500_readrid(struct airo_info *ai, u16 rid, void *pBuf, int len, in
cmd
.
cmd
=
CMD_ACCESS
;
cmd
.
parm0
=
rid
;
memcpy
((
char
*
)
ai
->
config_desc
.
card_ram_off
,
(
char
*
)
&
ai
->
config_desc
.
rid_desc
,
sizeof
(
Rid
));
memcpy
_toio
(
ai
->
config_desc
.
card_ram_off
,
&
ai
->
config_desc
.
rid_desc
,
sizeof
(
Rid
));
rc
=
issuecommand
(
ai
,
&
cmd
,
&
rsp
);
...
...
@@ -4062,8 +4062,8 @@ static int PC4500_writerid(struct airo_info *ai, u16 rid,
cmd
.
cmd
=
CMD_WRITERID
;
cmd
.
parm0
=
rid
;
memcpy
((
char
*
)
ai
->
config_desc
.
card_ram_off
,
(
char
*
)
&
ai
->
config_desc
.
rid_desc
,
sizeof
(
Rid
));
memcpy
_toio
(
ai
->
config_desc
.
card_ram_off
,
&
ai
->
config_desc
.
rid_desc
,
sizeof
(
Rid
));
if
(
len
<
4
||
len
>
2047
)
{
printk
(
KERN_ERR
"%s: len=%d
\n
"
,
__FUNCTION__
,
len
);
...
...
@@ -7591,7 +7591,7 @@ int flashputbuf(struct airo_info *ai){
/* Write stuff */
if
(
test_bit
(
FLAG_MPI
,
&
ai
->
flags
))
memcpy
(
ai
->
pciaux
+
0x8000
,
ai
->
flash
,
FLASHSIZE
);
memcpy
_toio
(
ai
->
pciaux
+
0x8000
,
ai
->
flash
,
FLASHSIZE
);
else
{
OUT4500
(
ai
,
AUXPAGE
,
0x100
);
OUT4500
(
ai
,
AUXOFF
,
0
);
...
...
drivers/net/wireless/arlan-main.c
View file @
7bedd791
...
...
@@ -129,7 +129,7 @@ static inline long us2ticks(int us)
static
inline
int
arlan_drop_tx
(
struct
net_device
*
dev
)
{
struct
arlan_private
*
priv
=
dev
->
priv
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
priv
->
stats
.
tx_errors
++
;
if
(
priv
->
Conf
->
tx_delay_ms
)
...
...
@@ -152,8 +152,8 @@ static inline int arlan_drop_tx(struct net_device *dev)
int
arlan_command
(
struct
net_device
*
dev
,
int
command_p
)
{
struct
arlan_private
*
priv
=
dev
->
priv
;
volatile
struct
arlan_shmem
*
arlan
=
priv
->
card
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
volatile
struct
arlan_shmem
__iomem
*
arlan
=
priv
->
card
;
struct
arlan_conf_stru
*
conf
=
priv
->
Conf
;
int
udelayed
=
0
;
int
i
=
0
;
...
...
@@ -368,7 +368,7 @@ int arlan_command(struct net_device *dev, int command_p)
if
(
!
registrationBad
(
dev
))
{
setInterruptEnable
(
dev
);
memset_io
(
(
void
*
)
arlan
->
commandParameter
,
0
,
0xf
);
memset_io
(
arlan
->
commandParameter
,
0
,
0xf
);
WRITESHMB
(
arlan
->
commandByte
,
ARLAN_COM_INT
|
ARLAN_COM_RX_ENABLE
);
WRITESHMB
(
arlan
->
commandParameter
[
0
],
conf
->
rxParameter
);
arlan_interrupt_lancpu
(
dev
);
...
...
@@ -398,9 +398,9 @@ int arlan_command(struct net_device *dev, int command_p)
priv
->
last_rx_int_ack_time
+
us2ticks
(
conf
->
rx_tweak2
)))
{
setInterruptEnable
(
dev
);
memset_io
(
(
void
*
)
arlan
->
commandParameter
,
0
,
0xf
);
memset_io
(
arlan
->
commandParameter
,
0
,
0xf
);
WRITESHMB
(
arlan
->
commandByte
,
ARLAN_COM_TX_ENABLE
|
ARLAN_COM_INT
);
memcpy_toio
(
(
void
*
)
arlan
->
commandParameter
,
&
TXLAST
(
dev
),
14
);
memcpy_toio
(
arlan
->
commandParameter
,
&
TXLAST
(
dev
),
14
);
// for ( i=1 ; i < 15 ; i++) printk("%02x:",READSHMB(arlan->commandParameter[i]));
priv
->
tx_last_sent
=
jiffies
;
arlan_interrupt_lancpu
(
dev
);
...
...
@@ -481,7 +481,7 @@ int arlan_command(struct net_device *dev, int command_p)
static
inline
void
arlan_command_process
(
struct
net_device
*
dev
)
{
struct
arlan_private
*
priv
=
dev
->
priv
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
int
times
=
0
;
while
(
priv
->
waiting_command_mask
&&
times
<
8
)
...
...
@@ -502,7 +502,7 @@ static inline void arlan_command_process(struct net_device *dev)
static
inline
void
arlan_retransmit_now
(
struct
net_device
*
dev
)
{
struct
arlan_private
*
priv
=
dev
->
priv
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
ARLAN_DEBUG_ENTRY
(
"arlan_retransmit_now"
);
...
...
@@ -540,7 +540,7 @@ static inline void arlan_retransmit_now(struct net_device *dev)
static
void
arlan_registration_timer
(
unsigned
long
data
)
{
struct
net_device
*
dev
=
(
struct
net_device
*
)
data
;
struct
arlan_private
*
priv
=
dev
->
priv
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
int
bh_mark_needed
=
0
;
int
next_tick
=
1
;
long
lostTime
=
((
long
)
jiffies
-
(
long
)
priv
->
registrationLastSeen
)
...
...
@@ -633,7 +633,7 @@ static void arlan_registration_timer(unsigned long data)
static
void
arlan_print_registers
(
struct
net_device
*
dev
,
int
line
)
{
struct
arlan_private
*
priv
=
dev
->
priv
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
volatile
struct
arlan_shmem
*
arlan
=
priv
->
card
;
u_char
hostcpuLock
,
lancpuLock
,
controlRegister
,
cntrlRegImage
,
...
...
@@ -663,8 +663,8 @@ static int arlan_hw_tx(struct net_device *dev, char *buf, int length)
{
int
i
;
struct
arlan_private
*
priv
=
dev
->
priv
;
volatile
struct
arlan_shmem
*
arlan
=
priv
->
card
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
volatile
struct
arlan_shmem
__iomem
*
arlan
=
priv
->
card
;
struct
arlan_conf_stru
*
conf
=
priv
->
Conf
;
int
tailStarts
=
0x800
;
...
...
@@ -673,9 +673,9 @@ static int arlan_hw_tx(struct net_device *dev, char *buf, int length)
ARLAN_DEBUG_ENTRY
(
"arlan_hw_tx"
);
if
(
TXHEAD
(
dev
).
offset
)
headEnds
=
(((
TXHEAD
(
dev
).
offset
+
TXHEAD
(
dev
).
length
-
(((
int
)
arlan
->
txBuffer
)
-
((
int
)
arlan
)
))
/
64
)
+
1
)
*
64
;
headEnds
=
(((
TXHEAD
(
dev
).
offset
+
TXHEAD
(
dev
).
length
-
offsetof
(
struct
arlan_shmem
,
txBuffer
))
/
64
)
+
1
)
*
64
;
if
(
TXTAIL
(
dev
).
offset
)
tailStarts
=
0x800
-
(((
TXTAIL
(
dev
).
offset
-
(((
int
)
arlan
->
txBuffer
)
-
((
int
)
arlan
)
))
/
64
)
+
2
)
*
64
;
tailStarts
=
0x800
-
(((
TXTAIL
(
dev
).
offset
-
offsetof
(
struct
arlan_shmem
,
txBuffer
))
/
64
)
+
2
)
*
64
;
if
(
!
TXHEAD
(
dev
).
offset
&&
length
<
tailStarts
)
...
...
@@ -684,7 +684,7 @@ static int arlan_hw_tx(struct net_device *dev, char *buf, int length)
printk
(
KERN_ERR
"TXHEAD insert, tailStart %d
\n
"
,
tailStarts
);
TXHEAD
(
dev
).
offset
=
(((
int
)
arlan
->
txBuffer
)
-
((
int
)
arlan
)
);
offsetof
(
struct
arlan_shmem
,
txBuffer
);
TXHEAD
(
dev
).
length
=
length
-
ARLAN_FAKE_HDR_LEN
;
for
(
i
=
0
;
i
<
6
;
i
++
)
TXHEAD
(
dev
).
dest
[
i
]
=
buf
[
i
];
...
...
@@ -692,7 +692,7 @@ static int arlan_hw_tx(struct net_device *dev, char *buf, int length)
TXHEAD
(
dev
).
retries
=
conf
->
txRetries
;
/* 0 is use default */
TXHEAD
(
dev
).
routing
=
conf
->
txRouting
;
TXHEAD
(
dev
).
scrambled
=
conf
->
txScrambled
;
memcpy_toio
((
(
char
*
)
arlan
+
TXHEAD
(
dev
).
offset
)
,
buf
+
ARLAN_FAKE_HDR_LEN
,
TXHEAD
(
dev
).
length
);
memcpy_toio
((
char
__iomem
*
)
arlan
+
TXHEAD
(
dev
).
offset
,
buf
+
ARLAN_FAKE_HDR_LEN
,
TXHEAD
(
dev
).
length
);
}
else
if
(
!
TXTAIL
(
dev
).
offset
&&
length
<
(
0x800
-
headEnds
))
{
...
...
@@ -700,7 +700,7 @@ static int arlan_hw_tx(struct net_device *dev, char *buf, int length)
printk
(
KERN_ERR
"TXTAIL insert, headEnd %d
\n
"
,
headEnds
);
TXTAIL
(
dev
).
offset
=
(((
int
)
arlan
->
txBuffer
)
-
((
int
)
arlan
)
)
+
0x800
-
(
length
/
64
+
2
)
*
64
;
offsetof
(
struct
arlan_shmem
,
txBuffer
)
+
0x800
-
(
length
/
64
+
2
)
*
64
;
TXTAIL
(
dev
).
length
=
length
-
ARLAN_FAKE_HDR_LEN
;
for
(
i
=
0
;
i
<
6
;
i
++
)
TXTAIL
(
dev
).
dest
[
i
]
=
buf
[
i
];
...
...
@@ -708,7 +708,7 @@ static int arlan_hw_tx(struct net_device *dev, char *buf, int length)
TXTAIL
(
dev
).
retries
=
conf
->
txRetries
;
TXTAIL
(
dev
).
routing
=
conf
->
txRouting
;
TXTAIL
(
dev
).
scrambled
=
conf
->
txScrambled
;
memcpy_toio
(((
char
*
)
arlan
+
TXTAIL
(
dev
).
offset
),
buf
+
ARLAN_FAKE_HDR_LEN
,
TXTAIL
(
dev
).
length
);
memcpy_toio
(((
char
__iomem
*
)
arlan
+
TXTAIL
(
dev
).
offset
),
buf
+
ARLAN_FAKE_HDR_LEN
,
TXTAIL
(
dev
).
length
);
}
else
{
...
...
@@ -764,8 +764,8 @@ static int arlan_hw_tx(struct net_device *dev, char *buf, int length)
static
int
arlan_hw_config
(
struct
net_device
*
dev
)
{
struct
arlan_private
*
priv
=
dev
->
priv
;
volatile
struct
arlan_shmem
*
arlan
=
priv
->
card
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
volatile
struct
arlan_shmem
__iomem
*
arlan
=
priv
->
card
;
struct
arlan_conf_stru
*
conf
=
priv
->
Conf
;
ARLAN_DEBUG_ENTRY
(
"arlan_hw_config"
);
...
...
@@ -847,8 +847,8 @@ static int arlan_hw_config(struct net_device *dev)
static
int
arlan_read_card_configuration
(
struct
net_device
*
dev
)
{
u_char
tlx415
;
struct
arlan_private
*
priv
=
dev
->
priv
;
volatile
struct
arlan_shmem
*
arlan
=
priv
->
card
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
volatile
struct
arlan_shmem
__iomem
*
arlan
=
priv
->
card
;
struct
arlan_conf_stru
*
conf
=
priv
->
Conf
;
ARLAN_DEBUG_ENTRY
(
"arlan_read_card_configuration"
);
...
...
@@ -972,7 +972,7 @@ static int lastFoundAt = 0xbe000;
static
int
__init
arlan_check_fingerprint
(
unsigned
long
memaddr
)
{
static
const
char
probeText
[]
=
"TELESYSTEM SLW INC. ARLAN
\0
"
;
volatile
struct
arlan_shmem
*
arlan
=
(
struct
arlan_shmem
*
)
memaddr
;
volatile
struct
arlan_shmem
__iomem
*
arlan
=
(
struct
arlan_shmem
*
)
memaddr
;
unsigned
long
paddr
=
virt_to_phys
((
void
*
)
memaddr
);
char
tempBuf
[
49
];
...
...
@@ -1000,7 +1000,7 @@ static int __init arlan_check_fingerprint(unsigned long memaddr)
static
int
arlan_change_mtu
(
struct
net_device
*
dev
,
int
new_mtu
)
{
struct
arlan_private
*
priv
=
dev
->
priv
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
struct
arlan_conf_stru
*
conf
=
priv
->
Conf
;
ARLAN_DEBUG_ENTRY
(
"arlan_change_mtu"
);
...
...
@@ -1040,7 +1040,7 @@ static int arlan_mac_addr(struct net_device *dev, void *p)
static
int
__init
arlan_setup_device
(
struct
net_device
*
dev
,
int
num
)
{
struct
arlan_private
*
ap
=
dev
->
priv
;
struct
arlan_private
*
ap
=
netdev_priv
(
dev
)
;
int
err
;
ARLAN_DEBUG_ENTRY
(
"arlan_setup_device"
);
...
...
@@ -1081,7 +1081,7 @@ static int __init arlan_setup_device(struct net_device *dev, int num)
static
int
__init
arlan_probe_here
(
struct
net_device
*
dev
,
unsigned
long
memaddr
)
{
struct
arlan_private
*
ap
=
dev
->
priv
;
struct
arlan_private
*
ap
=
netdev_priv
(
dev
)
;
ARLAN_DEBUG_ENTRY
(
"arlan_probe_here"
);
...
...
@@ -1110,8 +1110,8 @@ static int __init arlan_probe_here(struct net_device *dev,
static
int
arlan_open
(
struct
net_device
*
dev
)
{
struct
arlan_private
*
priv
=
dev
->
priv
;
volatile
struct
arlan_shmem
*
arlan
=
priv
->
card
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
volatile
struct
arlan_shmem
__iomem
*
arlan
=
priv
->
card
;
int
ret
=
0
;
ARLAN_DEBUG_ENTRY
(
"arlan_open"
);
...
...
@@ -1208,7 +1208,7 @@ static int arlan_tx(struct sk_buff *skb, struct net_device *dev)
static
inline
int
DoNotReTransmitCrap
(
struct
net_device
*
dev
)
{
struct
arlan_private
*
priv
=
dev
->
priv
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
if
(
TXLAST
(
dev
).
length
<
priv
->
Conf
->
ReTransmitPacketMaxSize
)
return
1
;
...
...
@@ -1218,7 +1218,7 @@ static inline int DoNotReTransmitCrap(struct net_device *dev)
static
inline
int
DoNotWaitReTransmitCrap
(
struct
net_device
*
dev
)
{
struct
arlan_private
*
priv
=
dev
->
priv
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
if
(
TXLAST
(
dev
).
length
<
priv
->
Conf
->
waitReTransmitPacketMaxSize
)
return
1
;
...
...
@@ -1227,7 +1227,7 @@ static inline int DoNotWaitReTransmitCrap(struct net_device *dev)
static
inline
void
arlan_queue_retransmit
(
struct
net_device
*
dev
)
{
struct
arlan_private
*
priv
=
dev
->
priv
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
ARLAN_DEBUG_ENTRY
(
"arlan_queue_retransmit"
);
...
...
@@ -1242,7 +1242,7 @@ static inline void arlan_queue_retransmit(struct net_device *dev)
static
inline
void
RetryOrFail
(
struct
net_device
*
dev
)
{
struct
arlan_private
*
priv
=
dev
->
priv
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
ARLAN_DEBUG_ENTRY
(
"RetryOrFail"
);
...
...
@@ -1263,7 +1263,7 @@ static inline void RetryOrFail(struct net_device *dev)
static
void
arlan_tx_done_interrupt
(
struct
net_device
*
dev
,
int
status
)
{
struct
arlan_private
*
priv
=
dev
->
priv
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
ARLAN_DEBUG_ENTRY
(
"arlan_tx_done_interrupt"
);
...
...
@@ -1405,8 +1405,8 @@ static void arlan_rx_interrupt(struct net_device *dev, u_char rxStatus, u_short
char
*
skbtmp
;
int
i
=
0
;
struct
arlan_private
*
priv
=
dev
->
priv
;
volatile
struct
arlan_shmem
*
arlan
=
priv
->
card
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
volatile
struct
arlan_shmem
__iomem
*
arlan
=
priv
->
card
;
struct
arlan_conf_stru
*
conf
=
priv
->
Conf
;
...
...
@@ -1509,7 +1509,7 @@ static void arlan_rx_interrupt(struct net_device *dev, u_char rxStatus, u_short
skb
->
dev
=
dev
;
skbtmp
=
skb_put
(
skb
,
pkt_len
);
memcpy_fromio
(
skbtmp
+
ARLAN_FAKE_HDR_LEN
,
((
char
*
)
arlan
)
+
rxOffset
,
pkt_len
-
ARLAN_FAKE_HDR_LEN
);
memcpy_fromio
(
skbtmp
+
ARLAN_FAKE_HDR_LEN
,
((
char
__iomem
*
)
arlan
)
+
rxOffset
,
pkt_len
-
ARLAN_FAKE_HDR_LEN
);
memcpy_fromio
(
skbtmp
,
arlan
->
ultimateDestAddress
,
6
);
memcpy_fromio
(
skbtmp
+
6
,
arlan
->
rxSrc
,
6
);
WRITESHMB
(
arlan
->
rxStatus
,
0x00
);
...
...
@@ -1557,8 +1557,8 @@ static void arlan_rx_interrupt(struct net_device *dev, u_char rxStatus, u_short
static
void
arlan_process_interrupt
(
struct
net_device
*
dev
)
{
struct
arlan_private
*
priv
=
dev
->
priv
;
volatile
struct
arlan_shmem
*
arlan
=
priv
->
card
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
volatile
struct
arlan_shmem
__iomem
*
arlan
=
priv
->
card
;
u_char
rxStatus
=
READSHMB
(
arlan
->
rxStatus
);
u_char
txStatus
=
READSHMB
(
arlan
->
txStatus
);
u_short
rxOffset
=
READSHMS
(
arlan
->
rxOffset
);
...
...
@@ -1660,8 +1660,8 @@ static void arlan_process_interrupt(struct net_device *dev)
static
irqreturn_t
arlan_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
struct
net_device
*
dev
=
dev_id
;
struct
arlan_private
*
priv
=
dev
->
priv
;
volatile
struct
arlan_shmem
*
arlan
=
priv
->
card
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
volatile
struct
arlan_shmem
__iomem
*
arlan
=
priv
->
card
;
u_char
rxStatus
=
READSHMB
(
arlan
->
rxStatus
);
u_char
txStatus
=
READSHMB
(
arlan
->
txStatus
);
...
...
@@ -1683,7 +1683,7 @@ static irqreturn_t arlan_interrupt(int irq, void *dev_id, struct pt_regs *regs)
static
int
arlan_close
(
struct
net_device
*
dev
)
{
struct
arlan_private
*
priv
=
dev
->
priv
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
ARLAN_DEBUG_ENTRY
(
"arlan_close"
);
...
...
@@ -1717,8 +1717,8 @@ static long alignLong(volatile u_char * ptr)
static
struct
net_device_stats
*
arlan_statistics
(
struct
net_device
*
dev
)
{
struct
arlan_private
*
priv
=
dev
->
priv
;
volatile
struct
arlan_shmem
*
arlan
=
priv
->
card
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
volatile
struct
arlan_shmem
__iomem
*
arlan
=
priv
->
card
;
ARLAN_DEBUG_ENTRY
(
"arlan_statistics"
);
...
...
@@ -1747,8 +1747,8 @@ static struct net_device_stats *arlan_statistics(struct net_device *dev)
static
void
arlan_set_multicast
(
struct
net_device
*
dev
)
{
struct
arlan_private
*
priv
=
dev
->
priv
;
volatile
struct
arlan_shmem
*
arlan
=
priv
->
card
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
)
;
volatile
struct
arlan_shmem
__iomem
*
arlan
=
priv
->
card
;
struct
arlan_conf_stru
*
conf
=
priv
->
Conf
;
int
board_conf_needed
=
0
;
...
...
drivers/net/wireless/arlan-proc.c
View file @
7bedd791
...
...
@@ -58,7 +58,8 @@
static
const
char
*
arlan_diagnostic_info_string
(
struct
net_device
*
dev
)
{
volatile
struct
arlan_shmem
*
arlan
=
((
struct
arlan_private
*
)
dev
->
priv
)
->
card
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
);
volatile
struct
arlan_shmem
__iomem
*
arlan
=
priv
->
card
;
u_char
diagnosticInfo
;
READSHM
(
diagnosticInfo
,
arlan
->
diagnosticInfo
,
u_char
);
...
...
@@ -113,7 +114,8 @@ static const char *arlan_diagnostic_info_string(struct net_device *dev)
static
const
char
*
arlan_hardware_type_string
(
struct
net_device
*
dev
)
{
u_char
hardwareType
;
volatile
struct
arlan_shmem
*
arlan
=
((
struct
arlan_private
*
)
dev
->
priv
)
->
card
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
);
volatile
struct
arlan_shmem
__iomem
*
arlan
=
priv
->
card
;
READSHM
(
hardwareType
,
arlan
->
hardwareType
,
u_char
);
switch
(
hardwareType
)
...
...
@@ -189,7 +191,8 @@ static void arlan_print_diagnostic_info(struct net_device *dev)
u_char
diagnosticInfo
;
u_short
diagnosticOffset
;
u_char
hardwareType
;
volatile
struct
arlan_shmem
*
arlan
=
((
struct
arlan_private
*
)
dev
->
priv
)
->
card
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
);
volatile
struct
arlan_shmem
__iomem
*
arlan
=
priv
->
card
;
// ARLAN_DEBUG_ENTRY("arlan_print_diagnostic_info");
...
...
@@ -254,7 +257,8 @@ static int arlan_hw_test_memory(struct net_device *dev)
int
i
;
int
memlen
=
sizeof
(
struct
arlan_shmem
)
-
0xF
;
/* avoid control register */
volatile
char
*
arlan_mem
=
(
char
*
)
(
dev
->
mem_start
);
volatile
struct
arlan_shmem
*
arlan
=
((
struct
arlan_private
*
)
dev
->
priv
)
->
card
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
);
volatile
struct
arlan_shmem
__iomem
*
arlan
=
priv
->
card
;
char
pattern
;
ptr
=
NULL
;
...
...
@@ -319,7 +323,8 @@ static int arlan_hw_test_memory(struct net_device *dev)
static
int
arlan_setup_card_by_book
(
struct
net_device
*
dev
)
{
u_char
irqLevel
,
configuredStatusFlag
;
volatile
struct
arlan_shmem
*
arlan
=
((
struct
arlan_private
*
)
dev
->
priv
)
->
card
;
struct
arlan_private
*
priv
=
netdev_priv
(
dev
);
volatile
struct
arlan_shmem
__iomem
*
arlan
=
priv
->
card
;
// ARLAN_DEBUG_ENTRY("arlan_setup_card");
...
...
drivers/net/wireless/arlan.h
View file @
7bedd791
...
...
@@ -332,7 +332,7 @@ struct TxParam
/* Information that need to be kept for each board. */
struct
arlan_private
{
struct
net_device_stats
stats
;
struct
arlan_shmem
*
card
;
struct
arlan_shmem
__iomem
*
card
;
struct
arlan_shmem
*
conf
;
struct
arlan_conf_stru
*
Conf
;
...
...
@@ -403,14 +403,12 @@ struct arlan_private {
#define ARLAN_COM_INT 0x80
#define TXLAST(dev) (((struct arlan_private *)
dev->priv)->txRing[((struct arlan_private *)dev->priv
)->txLast])
#define TXHEAD(dev) (((struct arlan_private *)
dev->priv
)->txRing[0])
#define TXTAIL(dev) (((struct arlan_private *)
dev->priv
)->txRing[1])
#define TXLAST(dev) (((struct arlan_private *)
netdev_priv(dev))->txRing[((struct arlan_private *)netdev_priv(dev)
)->txLast])
#define TXHEAD(dev) (((struct arlan_private *)
netdev_priv(dev)
)->txRing[0])
#define TXTAIL(dev) (((struct arlan_private *)
netdev_priv(dev)
)->txRing[1])
#define TXBuffStart(dev) \
((int)(((struct arlan_private *)dev->priv)->card)->txBuffer) - ((int)(((struct arlan_private *)dev->priv)->card) )
#define TXBuffEnd(dev) \
((int)(((struct arlan_private *)dev->priv)->card)->rxBuffer) - ((int)(((struct arlan_private *)dev->priv)->card)
#define TXBuffStart(dev) offsetof(struct arlan_shmem, txBuffer)
#define TXBuffEnd(dev) offsetof(struct arlan_shmem, xxBuffer)
#define READSHM(to,from,atype) {\
atype tmp;\
...
...
@@ -451,16 +449,16 @@ struct arlan_private {
#define registrationBad(dev)\
( ( READSHMB(((struct arlan_private *)
dev->priv
)->card->registrationMode) > 0) && \
( READSHMB(((struct arlan_private *)
dev->priv
)->card->registrationStatus) == 0) )
( ( READSHMB(((struct arlan_private *)
netdev_priv(dev)
)->card->registrationMode) > 0) && \
( READSHMB(((struct arlan_private *)
netdev_priv(dev)
)->card->registrationStatus) == 0) )
#define readControlRegister(dev)\
READSHMB(((struct arlan_private *)
dev->priv
)->card->cntrlRegImage)
READSHMB(((struct arlan_private *)
netdev_priv(dev)
)->card->cntrlRegImage)
#define writeControlRegister(dev, v){\
WRITESHMB(((struct arlan_private *)
dev->priv
)->card->cntrlRegImage ,((v) &0xF) );\
WRITESHMB(((struct arlan_private *)
dev->priv
)->card->controlRegister ,(v) );}
WRITESHMB(((struct arlan_private *)
netdev_priv(dev)
)->card->cntrlRegImage ,((v) &0xF) );\
WRITESHMB(((struct arlan_private *)
netdev_priv(dev)
)->card->controlRegister ,(v) );}
#define arlan_interrupt_lancpu(dev) {\
...
...
drivers/net/wireless/netwave_cs.c
View file @
7bedd791
...
...
@@ -213,7 +213,7 @@ static dev_link_t *netwave_attach(void); /* Create instance */
static
void
netwave_detach
(
dev_link_t
*
);
/* Destroy instance */
/* Hardware configuration */
static
void
netwave_doreset
(
ioaddr_t
iobase
,
u_char
*
ramBase
);
static
void
netwave_doreset
(
ioaddr_t
iobase
,
u_char
__iomem
*
ramBase
);
static
void
netwave_reset
(
struct
net_device
*
dev
);
/* Misc device stuff */
...
...
@@ -321,7 +321,7 @@ typedef struct netwave_private {
dev_link_t
link
;
spinlock_t
spinlock
;
/* Serialize access to the hardware (SMP) */
dev_node_t
node
;
u_char
*
ramBase
;
u_char
__iomem
*
ramBase
;
int
timeoutCounter
;
int
lastExec
;
struct
timer_list
watchdog
;
/* To avoid blocking state */
...
...
@@ -340,12 +340,12 @@ static struct net_device_stats *netwave_get_stats(struct net_device *dev);
* The Netwave card is little-endian, so won't work for big endian
* systems.
*/
static
inline
unsigned
short
get_uint16
(
u_char
*
staddr
)
static
inline
unsigned
short
get_uint16
(
u_char
__iomem
*
staddr
)
{
return
readw
(
staddr
);
/* Return only 16 bits */
}
static
inline
short
get_int16
(
u_char
*
staddr
)
static
inline
short
get_int16
(
u_char
__iomem
*
staddr
)
{
return
readw
(
staddr
);
}
...
...
@@ -362,7 +362,7 @@ static inline void wait_WOC(unsigned int iobase)
}
#ifdef WIRELESS_EXT
static
void
netwave_snapshot
(
netwave_private
*
priv
,
u_char
*
ramBase
,
static
void
netwave_snapshot
(
netwave_private
*
priv
,
u_char
__iomem
*
ramBase
,
ioaddr_t
iobase
)
{
u_short
resultBuffer
;
...
...
@@ -397,8 +397,8 @@ static struct iw_statistics *netwave_get_wireless_stats(struct net_device *dev)
{
unsigned
long
flags
;
ioaddr_t
iobase
=
dev
->
base_addr
;
netwave_private
*
priv
=
(
netwave_private
*
)
dev
->
priv
;
u_char
*
ramBase
=
priv
->
ramBase
;
netwave_private
*
priv
=
netdev_priv
(
dev
)
;
u_char
__iomem
*
ramBase
=
priv
->
ramBase
;
struct
iw_statistics
*
wstats
;
wstats
=
&
priv
->
iw_stats
;
...
...
@@ -446,7 +446,7 @@ static dev_link_t *netwave_attach(void)
dev
=
alloc_etherdev
(
sizeof
(
netwave_private
));
if
(
!
dev
)
return
NULL
;
priv
=
dev
->
priv
;
priv
=
netdev_priv
(
dev
)
;
link
=
&
priv
->
link
;
link
->
priv
=
dev
;
...
...
@@ -589,8 +589,8 @@ static int netwave_set_nwid(struct net_device *dev,
{
unsigned
long
flags
;
ioaddr_t
iobase
=
dev
->
base_addr
;
netwave_private
*
priv
=
(
netwave_private
*
)
dev
->
priv
;
u_char
*
ramBase
=
priv
->
ramBase
;
netwave_private
*
priv
=
netdev_priv
(
dev
)
;
u_char
__iomem
*
ramBase
=
priv
->
ramBase
;
/* Disable interrupts & save flags */
spin_lock_irqsave
(
&
priv
->
spinlock
,
flags
);
...
...
@@ -647,8 +647,8 @@ static int netwave_set_scramble(struct net_device *dev,
{
unsigned
long
flags
;
ioaddr_t
iobase
=
dev
->
base_addr
;
netwave_private
*
priv
=
(
netwave_private
*
)
dev
->
priv
;
u_char
*
ramBase
=
priv
->
ramBase
;
netwave_private
*
priv
=
netdev_priv
(
dev
)
;
u_char
__iomem
*
ramBase
=
priv
->
ramBase
;
/* Disable interrupts & save flags */
spin_lock_irqsave
(
&
priv
->
spinlock
,
flags
);
...
...
@@ -763,8 +763,8 @@ static int netwave_get_snap(struct net_device *dev,
{
unsigned
long
flags
;
ioaddr_t
iobase
=
dev
->
base_addr
;
netwave_private
*
priv
=
(
netwave_private
*
)
dev
->
priv
;
u_char
*
ramBase
=
priv
->
ramBase
;
netwave_private
*
priv
=
netdev_priv
(
dev
)
;
u_char
__iomem
*
ramBase
=
priv
->
ramBase
;
/* Disable interrupts & save flags */
spin_lock_irqsave
(
&
priv
->
spinlock
,
flags
);
...
...
@@ -996,14 +996,14 @@ do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
static
void
netwave_pcmcia_config
(
dev_link_t
*
link
)
{
client_handle_t
handle
=
link
->
handle
;
struct
net_device
*
dev
=
link
->
priv
;
netwave_private
*
priv
=
dev
->
priv
;
netwave_private
*
priv
=
netdev_priv
(
dev
)
;
tuple_t
tuple
;
cisparse_t
parse
;
int
i
,
j
,
last_ret
,
last_fn
;
u_char
buf
[
64
];
win_req_t
req
;
memreq_t
mem
;
u_char
*
ramBase
=
NULL
;
u_char
__iomem
*
ramBase
=
NULL
;
DEBUG
(
0
,
"netwave_pcmcia_config(0x%p)
\n
"
,
link
);
...
...
@@ -1069,7 +1069,7 @@ static void netwave_pcmcia_config(dev_link_t *link) {
/* Store base address of the common window frame */
ramBase
=
ioremap
(
req
.
Base
,
0x8000
);
((
netwave_private
*
)
dev
->
priv
)
->
ramBase
=
ramBase
;
priv
->
ramBase
=
ramBase
;
dev
->
irq
=
link
->
irq
.
AssignedIRQ
;
dev
->
base_addr
=
link
->
io
.
BasePort1
;
...
...
@@ -1118,7 +1118,7 @@ static void netwave_pcmcia_config(dev_link_t *link) {
static
void
netwave_release
(
dev_link_t
*
link
)
{
struct
net_device
*
dev
=
link
->
priv
;
netwave_private
*
priv
=
dev
->
priv
;
netwave_private
*
priv
=
netdev_priv
(
dev
)
;
DEBUG
(
0
,
"netwave_release(0x%p)
\n
"
,
link
);
...
...
@@ -1149,7 +1149,8 @@ static void netwave_release(dev_link_t *link)
*
*/
static
int
netwave_event
(
event_t
event
,
int
priority
,
event_callback_args_t
*
args
)
{
event_callback_args_t
*
args
)
{
dev_link_t
*
link
=
args
->
client_data
;
struct
net_device
*
dev
=
link
->
priv
;
...
...
@@ -1202,7 +1203,8 @@ static int netwave_event(event_t event, int priority,
*
* Proper hardware reset of the card.
*/
static
void
netwave_doreset
(
ioaddr_t
ioBase
,
u_char
*
ramBase
)
{
static
void
netwave_doreset
(
ioaddr_t
ioBase
,
u_char
__iomem
*
ramBase
)
{
/* Reset card */
wait_WOC
(
ioBase
);
outb
(
0x80
,
ioBase
+
NETWAVE_REG_PMR
);
...
...
@@ -1217,8 +1219,8 @@ static void netwave_doreset(ioaddr_t ioBase, u_char* ramBase) {
*/
static
void
netwave_reset
(
struct
net_device
*
dev
)
{
/* u_char state; */
netwave_private
*
priv
=
(
netwave_private
*
)
dev
->
priv
;
u_char
*
ramBase
=
priv
->
ramBase
;
netwave_private
*
priv
=
netdev_priv
(
dev
)
;
u_char
__iomem
*
ramBase
=
priv
->
ramBase
;
ioaddr_t
iobase
=
dev
->
base_addr
;
DEBUG
(
0
,
"netwave_reset: Done with hardware reset
\n
"
);
...
...
@@ -1298,8 +1300,8 @@ static int netwave_hw_xmit(unsigned char* data, int len,
DataOffset
;
int
tmpcount
;
netwave_private
*
priv
=
(
netwave_private
*
)
dev
->
priv
;
u_char
*
ramBase
=
priv
->
ramBase
;
netwave_private
*
priv
=
netdev_priv
(
dev
)
;
u_char
__iomem
*
ramBase
=
priv
->
ramBase
;
ioaddr_t
iobase
=
dev
->
base_addr
;
/* Disable interrupts & save flags */
...
...
@@ -1390,11 +1392,12 @@ static int netwave_start_xmit(struct sk_buff *skb, struct net_device *dev) {
* ready to transmit another packet.
* 3. A command has completed execution.
*/
static
irqreturn_t
netwave_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
static
irqreturn_t
netwave_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
ioaddr_t
iobase
;
u_char
*
ramBase
;
u_char
__iomem
*
ramBase
;
struct
net_device
*
dev
=
(
struct
net_device
*
)
dev_id
;
struct
netwave_private
*
priv
=
dev
->
priv
;
struct
netwave_private
*
priv
=
netdev_priv
(
dev
)
;
dev_link_t
*
link
=
&
priv
->
link
;
int
i
;
...
...
@@ -1524,7 +1527,7 @@ static void netwave_watchdog(struct net_device *dev) {
}
/* netwave_watchdog */
static
struct
net_device_stats
*
netwave_get_stats
(
struct
net_device
*
dev
)
{
netwave_private
*
priv
=
(
netwave_private
*
)
dev
->
priv
;
netwave_private
*
priv
=
netdev_priv
(
dev
)
;
update_stats
(
dev
);
...
...
@@ -1547,7 +1550,7 @@ static struct net_device_stats *netwave_get_stats(struct net_device *dev) {
static
void
update_stats
(
struct
net_device
*
dev
)
{
//unsigned long flags;
/* netwave_private *priv =
(netwave_private*) dev->priv
; */
/* netwave_private *priv =
netdev_priv(dev)
; */
//spin_lock_irqsave(&priv->spinlock, flags);
...
...
@@ -1557,9 +1560,10 @@ static void update_stats(struct net_device *dev) {
//spin_unlock_irqrestore(&priv->spinlock, flags);
}
static
int
netwave_rx
(
struct
net_device
*
dev
)
{
netwave_private
*
priv
=
(
netwave_private
*
)(
dev
->
priv
);
u_char
*
ramBase
=
priv
->
ramBase
;
static
int
netwave_rx
(
struct
net_device
*
dev
)
{
netwave_private
*
priv
=
netdev_priv
(
dev
);
u_char
__iomem
*
ramBase
=
priv
->
ramBase
;
ioaddr_t
iobase
=
dev
->
base_addr
;
u_char
rxStatus
;
struct
sk_buff
*
skb
=
NULL
;
...
...
@@ -1647,7 +1651,7 @@ static int netwave_rx(struct net_device *dev) {
}
static
int
netwave_open
(
struct
net_device
*
dev
)
{
netwave_private
*
priv
=
dev
->
priv
;
netwave_private
*
priv
=
netdev_priv
(
dev
)
;
dev_link_t
*
link
=
&
priv
->
link
;
DEBUG
(
1
,
"netwave_open: starting.
\n
"
);
...
...
@@ -1664,7 +1668,7 @@ static int netwave_open(struct net_device *dev) {
}
static
int
netwave_close
(
struct
net_device
*
dev
)
{
netwave_private
*
priv
=
(
netwave_private
*
)
dev
->
priv
;
netwave_private
*
priv
=
netdev_priv
(
dev
)
;
dev_link_t
*
link
=
&
priv
->
link
;
DEBUG
(
1
,
"netwave_close: finishing.
\n
"
);
...
...
@@ -1709,7 +1713,8 @@ module_exit(exit_netwave_cs);
static
void
set_multicast_list
(
struct
net_device
*
dev
)
{
ioaddr_t
iobase
=
dev
->
base_addr
;
u_char
*
ramBase
=
((
netwave_private
*
)
dev
->
priv
)
->
ramBase
;
netwave_private
*
priv
=
netdev_priv
(
dev
);
u_char
__iomem
*
ramBase
=
priv
->
ramBase
;
u_char
rcvMode
=
0
;
#ifdef PCMCIA_DEBUG
...
...
drivers/net/wireless/wavelan_cs.c
View file @
7bedd791
...
...
@@ -136,7 +136,8 @@ psa_read(struct net_device * dev,
u_char
*
b
,
/* buffer to fill */
int
n
)
/* size to read */
{
u_char
*
ptr
=
((
u_char
*
)
dev
->
mem_start
)
+
PSA_ADDR
+
(
o
<<
1
);
net_local
*
lp
=
netdev_priv
(
dev
);
u_char
__iomem
*
ptr
=
lp
->
mem
+
PSA_ADDR
+
(
o
<<
1
);
while
(
n
--
>
0
)
{
...
...
@@ -160,12 +161,13 @@ psa_write(struct net_device * dev,
u_char
*
b
,
/* Buffer in memory */
int
n
)
/* Length of buffer */
{
u_char
*
ptr
=
((
u_char
*
)
dev
->
mem_start
)
+
PSA_ADDR
+
(
o
<<
1
);
net_local
*
lp
=
netdev_priv
(
dev
);
u_char
__iomem
*
ptr
=
lp
->
mem
+
PSA_ADDR
+
(
o
<<
1
);
int
count
=
0
;
ioaddr_t
base
=
dev
->
base_addr
;
/* As there seem to have no flag PSA_BUSY as in the ISA model, we are
* oblige to verify this address to know when the PSA is ready... */
volatile
u_char
*
verify
=
((
u_char
*
)
dev
->
mem_start
)
+
PSA_ADDR
+
volatile
u_char
__iomem
*
verify
=
lp
->
mem
+
PSA_ADDR
+
(
psaoff
(
0
,
psa_comp_number
)
<<
1
);
/* Authorize writting to PSA */
...
...
@@ -3948,17 +3950,16 @@ wv_hw_reset(struct net_device * dev)
static
inline
int
wv_pcmcia_config
(
dev_link_t
*
link
)
{
client_handle_t
handle
;
client_handle_t
handle
=
link
->
handle
;
tuple_t
tuple
;
cisparse_t
parse
;
struct
net_device
*
dev
;
struct
net_device
*
dev
=
(
struct
net_device
*
)
link
->
priv
;
int
i
;
u_char
buf
[
64
];
win_req_t
req
;
memreq_t
mem
;
net_local
*
lp
=
netdev_priv
(
dev
);
handle
=
link
->
handle
;
dev
=
(
struct
net_device
*
)
link
->
priv
;
#ifdef DEBUG_CONFIG_TRACE
printk
(
KERN_DEBUG
"->wv_pcmcia_config(0x%p)
\n
"
,
link
);
...
...
@@ -4045,7 +4046,8 @@ wv_pcmcia_config(dev_link_t * link)
break
;
}
dev
->
mem_start
=
(
u_long
)
ioremap
(
req
.
Base
,
req
.
Size
);
lp
->
mem
=
ioremap
(
req
.
Base
,
req
.
Size
);
dev
->
mem_start
=
(
u_long
)
lp
->
mem
;
dev
->
mem_end
=
dev
->
mem_start
+
req
.
Size
;
mem
.
CardOffset
=
0
;
mem
.
Page
=
0
;
...
...
@@ -4062,8 +4064,8 @@ wv_pcmcia_config(dev_link_t * link)
netif_start_queue
(
dev
);
#ifdef DEBUG_CONFIG_INFO
printk
(
KERN_DEBUG
"wv_pcmcia_config: MEMSTART
0x%x
IRQ %d IOPORT 0x%x
\n
"
,
(
u_int
)
dev
->
mem_start
,
dev
->
irq
,
(
u_int
)
dev
->
base_addr
);
printk
(
KERN_DEBUG
"wv_pcmcia_config: MEMSTART
%p
IRQ %d IOPORT 0x%x
\n
"
,
lp
->
mem
,
dev
->
irq
,
(
u_int
)
dev
->
base_addr
);
#endif
i
=
register_netdev
(
dev
);
...
...
@@ -4104,13 +4106,14 @@ static void
wv_pcmcia_release
(
dev_link_t
*
link
)
{
struct
net_device
*
dev
=
(
struct
net_device
*
)
link
->
priv
;
net_local
*
lp
=
netdev_priv
(
dev
);
#ifdef DEBUG_CONFIG_TRACE
printk
(
KERN_DEBUG
"%s: -> wv_pcmcia_release(0x%p)
\n
"
,
dev
->
name
,
link
);
#endif
/* Don't bother checking to see if these succeed or not */
iounmap
(
(
u_char
*
)
dev
->
mem_start
);
iounmap
(
lp
->
mem
);
pcmcia_release_window
(
link
->
win
);
pcmcia_release_configuration
(
link
->
handle
);
pcmcia_release_io
(
link
->
handle
,
&
link
->
io
);
...
...
drivers/net/wireless/wavelan_cs.p.h
View file @
7bedd791
...
...
@@ -645,6 +645,7 @@ struct net_local
int
cell_search
;
/* Searching for new cell? */
struct
timer_list
cell_timer
;
/* Garbage collection */
#endif
/* WAVELAN_ROAMING */
void
__iomem
*
mem
;
};
/**************************** PROTOTYPES ****************************/
...
...
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