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
Kirill Smelkov
linux
Commits
e602c6f0
Commit
e602c6f0
authored
Mar 06, 2005
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Plain Diff
Merge pobox.com:/garz/repo/netdev-2.6/ibmlana
into pobox.com:/garz/repo/net-drivers-2.6
parents
70f13990
5994284b
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
53 additions
and
47 deletions
+53
-47
drivers/net/ibmlana.c
drivers/net/ibmlana.c
+52
-47
drivers/net/ibmlana.h
drivers/net/ibmlana.h
+1
-0
No files found.
drivers/net/ibmlana.c
View file @
e602c6f0
...
...
@@ -133,13 +133,14 @@ static void dumpregs(struct net_device *dev)
static
void
dumpmem
(
struct
net_device
*
dev
,
u32
start
,
u32
len
)
{
ibmlana_priv
*
priv
=
netdev_priv
(
dev
);
int
z
;
printk
(
"Address %04x:
\n
"
,
start
);
for
(
z
=
0
;
z
<
len
;
z
++
)
{
if
((
z
&
15
)
==
0
)
printk
(
"%04x:"
,
z
);
printk
(
" %02x"
,
isa_readb
(
dev
->
mem_start
+
start
+
z
));
printk
(
" %02x"
,
readb
(
priv
->
base
+
start
+
z
));
if
((
z
&
15
)
==
15
)
printk
(
"
\n
"
);
}
...
...
@@ -231,7 +232,7 @@ static void ResetBoard(struct net_device *dev)
static
void
InitDscrs
(
struct
net_device
*
dev
)
{
ibmlana_priv
*
priv
=
(
ibmlana_priv
*
)
dev
->
priv
;
ibmlana_priv
*
priv
=
netdev_priv
(
dev
)
;
u32
addr
,
baddr
,
raddr
;
int
z
;
tda_t
tda
;
...
...
@@ -240,8 +241,8 @@ static void InitDscrs(struct net_device *dev)
/* initialize RAM */
isa_memset_io
(
dev
->
mem_start
,
0xaa
,
dev
->
mem_start
-
dev
->
mem_start
);
memset_io
(
priv
->
base
,
0xaa
,
dev
->
mem_start
-
dev
->
mem_start
);
/* XXX: typo? */
/* setup n TX descriptors - independent of RAM size */
...
...
@@ -260,7 +261,7 @@ static void InitDscrs(struct net_device *dev)
else
tda
.
link
=
addr
+
sizeof
(
tda_t
);
tda
.
link
|=
1
;
isa_memcpy_toio
(
dev
->
mem_start
+
addr
,
&
tda
,
sizeof
(
tda_t
));
memcpy_toio
(
priv
->
base
+
addr
,
&
tda
,
sizeof
(
tda_t
));
addr
+=
sizeof
(
tda_t
);
baddr
+=
PKTSIZE
;
}
...
...
@@ -280,7 +281,7 @@ static void InitDscrs(struct net_device *dev)
rra
.
starthi
=
0
;
rra
.
cntlo
=
PKTSIZE
>>
1
;
rra
.
cnthi
=
0
;
isa_memcpy_toio
(
dev
->
mem_start
+
raddr
,
&
rra
,
sizeof
(
rra_t
));
memcpy_toio
(
priv
->
base
+
raddr
,
&
rra
,
sizeof
(
rra_t
));
rda
.
status
=
0
;
rda
.
length
=
0
;
...
...
@@ -292,7 +293,7 @@ static void InitDscrs(struct net_device *dev)
else
rda
.
link
=
1
;
rda
.
inuse
=
1
;
isa_memcpy_toio
(
dev
->
mem_start
+
addr
,
&
rda
,
sizeof
(
rda_t
));
memcpy_toio
(
priv
->
base
+
addr
,
&
rda
,
sizeof
(
rda_t
));
baddr
+=
PKTSIZE
;
raddr
+=
sizeof
(
rra_t
);
...
...
@@ -313,7 +314,7 @@ static void InitDscrs(struct net_device *dev)
static
int
InitSONIC
(
struct
net_device
*
dev
)
{
ibmlana_priv
*
priv
=
(
ibmlana_priv
*
)
dev
->
priv
;
ibmlana_priv
*
priv
=
netdev_priv
(
dev
)
;
/* set up start & end of resource area */
...
...
@@ -379,6 +380,7 @@ static void putcam(camentry_t * cams, int *camcnt, char *addr)
static
void
InitBoard
(
struct
net_device
*
dev
)
{
ibmlana_priv
*
priv
=
netdev_priv
(
dev
);
int
camcnt
;
camentry_t
cams
[
16
];
u32
cammask
;
...
...
@@ -429,8 +431,8 @@ static void InitBoard(struct net_device *dev)
/* feed CDA into SONIC, initialize RCR value (always get broadcasts) */
isa_memcpy_toio
(
dev
->
mem_start
,
cams
,
sizeof
(
camentry_t
)
*
camcnt
);
isa_memcpy_toio
(
dev
->
mem_start
+
(
sizeof
(
camentry_t
)
*
camcnt
),
&
cammask
,
sizeof
(
cammask
));
memcpy_toio
(
priv
->
base
,
cams
,
sizeof
(
camentry_t
)
*
camcnt
);
memcpy_toio
(
priv
->
base
+
(
sizeof
(
camentry_t
)
*
camcnt
),
&
cammask
,
sizeof
(
cammask
));
#ifdef DEBUG
printk
(
"CAM setup:
\n
"
);
...
...
@@ -520,7 +522,7 @@ static void InitBoard(struct net_device *dev)
static
void
StartTx
(
struct
net_device
*
dev
,
int
descr
)
{
ibmlana_priv
*
priv
=
(
ibmlana_priv
*
)
dev
->
priv
;
ibmlana_priv
*
priv
=
netdev_priv
(
dev
)
;
int
addr
;
addr
=
priv
->
tdastart
+
(
descr
*
sizeof
(
tda_t
));
...
...
@@ -543,7 +545,7 @@ static void StartTx(struct net_device *dev, int descr)
static
void
irqrbe_handler
(
struct
net_device
*
dev
)
{
ibmlana_priv
*
priv
=
(
ibmlana_priv
*
)
dev
->
priv
;
ibmlana_priv
*
priv
=
netdev_priv
(
dev
)
;
/* point the SONIC back to the RRA start */
...
...
@@ -555,7 +557,7 @@ static void irqrbe_handler(struct net_device *dev)
static
void
irqrx_handler
(
struct
net_device
*
dev
)
{
ibmlana_priv
*
priv
=
(
ibmlana_priv
*
)
dev
->
priv
;
ibmlana_priv
*
priv
=
netdev_priv
(
dev
)
;
rda_t
rda
;
u32
rdaaddr
,
lrdaaddr
;
...
...
@@ -566,7 +568,7 @@ static void irqrx_handler(struct net_device *dev)
rdaaddr
=
priv
->
rdastart
+
(
priv
->
nextrxdescr
*
sizeof
(
rda_t
));
lrdaaddr
=
priv
->
rdastart
+
(
priv
->
lastrxdescr
*
sizeof
(
rda_t
));
isa_memcpy_fromio
(
&
rda
,
dev
->
mem_start
+
rdaaddr
,
sizeof
(
rda_t
));
memcpy_fromio
(
&
rda
,
priv
->
base
+
rdaaddr
,
sizeof
(
rda_t
));
/* iron out upper word halves of fields we use - SONIC will duplicate
bits 0..15 to 16..31 */
...
...
@@ -593,8 +595,8 @@ static void irqrx_handler(struct net_device *dev)
else
{
/* copy out data */
isa_
memcpy_fromio
(
skb_put
(
skb
,
rda
.
length
),
dev
->
mem_start
+
memcpy_fromio
(
skb_put
(
skb
,
rda
.
length
),
priv
->
base
+
rda
.
startlo
,
rda
.
length
);
/* set up skb fields */
...
...
@@ -627,14 +629,14 @@ static void irqrx_handler(struct net_device *dev)
rda
.
link
=
1
;
rda
.
inuse
=
1
;
isa_memcpy_toio
(
dev
->
mem_start
+
rdaaddr
,
&
rda
,
memcpy_toio
(
priv
->
base
+
rdaaddr
,
&
rda
,
sizeof
(
rda_t
));
/* set up link and EOL = 0 in currently last descriptor. Only write
the link field since the SONIC may currently already access the
other fields. */
isa_memcpy_toio
(
dev
->
mem_start
+
lrdaaddr
+
20
,
&
rdaaddr
,
4
);
memcpy_toio
(
priv
->
base
+
lrdaaddr
+
20
,
&
rdaaddr
,
4
);
/* advance indices */
...
...
@@ -648,11 +650,11 @@ static void irqrx_handler(struct net_device *dev)
static
void
irqtx_handler
(
struct
net_device
*
dev
)
{
ibmlana_priv
*
priv
=
(
ibmlana_priv
*
)
dev
->
priv
;
ibmlana_priv
*
priv
=
netdev_priv
(
dev
)
;
tda_t
tda
;
/* fetch descriptor (we forgot the size ;-) */
isa_memcpy_fromio
(
&
tda
,
dev
->
mem_start
+
priv
->
tdastart
+
(
priv
->
currtxdescr
*
sizeof
(
tda_t
)),
sizeof
(
tda_t
));
memcpy_fromio
(
&
tda
,
priv
->
base
+
priv
->
tdastart
+
(
priv
->
currtxdescr
*
sizeof
(
tda_t
)),
sizeof
(
tda_t
));
/* update statistics */
priv
->
stat
.
tx_packets
++
;
...
...
@@ -672,11 +674,11 @@ static void irqtx_handler(struct net_device *dev)
static
void
irqtxerr_handler
(
struct
net_device
*
dev
)
{
ibmlana_priv
*
priv
=
(
ibmlana_priv
*
)
dev
->
priv
;
ibmlana_priv
*
priv
=
netdev_priv
(
dev
)
;
tda_t
tda
;
/* fetch descriptor to check status */
isa_memcpy_fromio
(
&
tda
,
dev
->
mem_start
+
priv
->
tdastart
+
(
priv
->
currtxdescr
*
sizeof
(
tda_t
)),
sizeof
(
tda_t
));
memcpy_fromio
(
&
tda
,
priv
->
base
+
priv
->
tdastart
+
(
priv
->
currtxdescr
*
sizeof
(
tda_t
)),
sizeof
(
tda_t
));
/* update statistics */
priv
->
stat
.
tx_errors
++
;
...
...
@@ -753,9 +755,7 @@ static int ibmlana_getinfo(char *buf, int slot, void *d)
if
(
dev
==
NULL
)
return
len
;
if
(
dev
->
priv
==
NULL
)
return
len
;
priv
=
(
ibmlana_priv
*
)
dev
->
priv
;
priv
=
netdev_priv
(
dev
);
/* print info */
...
...
@@ -778,7 +778,7 @@ static int ibmlana_getinfo(char *buf, int slot, void *d)
static
int
ibmlana_open
(
struct
net_device
*
dev
)
{
int
result
;
ibmlana_priv
*
priv
=
(
ibmlana_priv
*
)
dev
->
priv
;
ibmlana_priv
*
priv
=
netdev_priv
(
dev
)
;
/* register resources - only necessary for IRQ */
...
...
@@ -814,7 +814,7 @@ static int ibmlana_close(struct net_device *dev)
static
int
ibmlana_tx
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
)
{
ibmlana_priv
*
priv
=
(
ibmlana_priv
*
)
dev
->
priv
;
ibmlana_priv
*
priv
=
netdev_priv
(
dev
)
;
int
retval
=
0
,
tmplen
,
addr
;
unsigned
long
flags
;
tda_t
tda
;
...
...
@@ -834,7 +834,7 @@ static int ibmlana_tx(struct sk_buff *skb, struct net_device *dev)
if
(
tmplen
<
60
)
tmplen
=
60
;
baddr
=
priv
->
txbufstart
+
(
priv
->
nexttxdescr
*
PKTSIZE
);
isa_memcpy_toio
(
dev
->
mem_start
+
baddr
,
skb
->
data
,
skb
->
len
);
memcpy_toio
(
priv
->
base
+
baddr
,
skb
->
data
,
skb
->
len
);
/* copy filler into RAM - in case we're filling up...
we're filling a bit more than necessary, but that doesn't harm
...
...
@@ -846,16 +846,16 @@ static int ibmlana_tx(struct sk_buff *skb, struct net_device *dev)
unsigned
int
destoffs
=
skb
->
len
,
l
=
strlen
(
fill
);
while
(
destoffs
<
tmplen
)
{
isa_memcpy_toio
(
dev
->
mem_start
+
baddr
+
destoffs
,
fill
,
l
);
memcpy_toio
(
priv
->
base
+
baddr
+
destoffs
,
fill
,
l
);
destoffs
+=
l
;
}
}
/* set up the new frame descriptor */
addr
=
priv
->
tdastart
+
(
priv
->
nexttxdescr
*
sizeof
(
tda_t
));
isa_memcpy_fromio
(
&
tda
,
dev
->
mem_start
+
addr
,
sizeof
(
tda_t
));
memcpy_fromio
(
&
tda
,
priv
->
base
+
addr
,
sizeof
(
tda_t
));
tda
.
length
=
tda
.
fraglength
=
tmplen
;
isa_memcpy_toio
(
dev
->
mem_start
+
addr
,
&
tda
,
sizeof
(
tda_t
));
memcpy_toio
(
priv
->
base
+
addr
,
&
tda
,
sizeof
(
tda_t
));
/* if there were no active descriptors, trigger the SONIC */
spin_lock_irqsave
(
&
priv
->
lock
,
flags
);
...
...
@@ -881,7 +881,7 @@ static int ibmlana_tx(struct sk_buff *skb, struct net_device *dev)
static
struct
net_device_stats
*
ibmlana_stats
(
struct
net_device
*
dev
)
{
ibmlana_priv
*
priv
=
(
ibmlana_priv
*
)
dev
->
priv
;
ibmlana_priv
*
priv
=
netdev_priv
(
dev
)
;
return
&
priv
->
stat
;
}
...
...
@@ -903,7 +903,6 @@ static int startslot; /* counts through slots when probing multiple devices */
static
int
ibmlana_probe
(
struct
net_device
*
dev
)
{
int
force_detect
=
0
;
int
slot
,
z
;
int
base
=
0
,
irq
=
0
,
iobase
=
0
,
memlen
=
0
;
ibmlana_priv
*
priv
;
...
...
@@ -915,10 +914,6 @@ static int ibmlana_probe(struct net_device *dev)
if
(
MCA_bus
==
0
)
return
-
ENODEV
;
/* start address of 1 --> forced detection */
if
(
dev
->
mem_start
==
1
)
force_detect
=
1
;
base
=
dev
->
mem_start
;
irq
=
dev
->
irq
;
...
...
@@ -952,18 +947,12 @@ static int ibmlana_probe(struct net_device *dev)
return
-
EBUSY
;
}
/* make procfs entries */
mca_set_adapter_name
(
slot
,
"IBM LAN Adapter/A"
);
mca_set_adapter_procfn
(
slot
,
(
MCA_ProcFn
)
ibmlana_getinfo
,
dev
);
mca_mark_as_used
(
slot
);
/* allocate structure */
priv
=
dev
->
priv
;
priv
=
netdev_priv
(
dev
);
priv
->
slot
=
slot
;
priv
->
realirq
=
irq
;
priv
->
medium
=
medium
;
spin_lock_init
(
&
priv
->
lock
);
/* set base + irq for this device (irq not allocated so far) */
...
...
@@ -972,6 +961,20 @@ static int ibmlana_probe(struct net_device *dev)
dev
->
mem_end
=
base
+
memlen
;
dev
->
base_addr
=
iobase
;
priv
->
base
=
ioremap
(
base
,
memlen
);
if
(
!
priv
->
base
)
{
printk
(
KERN_ERR
"%s: cannot remap memory!
\n
"
,
DRV_NAME
);
startslot
=
slot
+
1
;
release_region
(
iobase
,
IBM_LANA_IORANGE
);
return
-
EBUSY
;
}
/* make procfs entries */
mca_set_adapter_name
(
slot
,
"IBM LAN Adapter/A"
);
mca_set_adapter_procfn
(
slot
,
(
MCA_ProcFn
)
ibmlana_getinfo
,
dev
);
mca_mark_as_used
(
slot
);
/* set methods */
dev
->
open
=
ibmlana_open
;
...
...
@@ -1042,11 +1045,12 @@ int init_module(void)
break
;
}
if
(
register_netdev
(
dev
))
{
ibmlana_priv
*
priv
=
dev
->
priv
;
ibmlana_priv
*
priv
=
netdev_priv
(
dev
)
;
release_region
(
dev
->
base_addr
,
IBM_LANA_IORANGE
);
mca_mark_as_unused
(
priv
->
slot
);
mca_set_adapter_name
(
priv
->
slot
,
""
);
mca_set_adapter_procfn
(
priv
->
slot
,
NULL
,
NULL
);
iounmap
(
priv
->
base
);
free_netdev
(
dev
);
break
;
}
...
...
@@ -1061,13 +1065,14 @@ void cleanup_module(void)
for
(
z
=
0
;
z
<
DEVMAX
;
z
++
)
{
struct
net_device
*
dev
=
moddevs
[
z
];
if
(
dev
)
{
ibmlana_priv
*
priv
=
(
ibmlana_priv
*
)
dev
->
priv
;
ibmlana_priv
*
priv
=
netdev_priv
(
dev
)
;
unregister_netdev
(
dev
);
/*DeinitBoard(dev); */
release_region
(
dev
->
base_addr
,
IBM_LANA_IORANGE
);
mca_mark_as_unused
(
priv
->
slot
);
mca_set_adapter_name
(
priv
->
slot
,
""
);
mca_set_adapter_procfn
(
priv
->
slot
,
NULL
,
NULL
);
iounmap
(
priv
->
base
);
free_netdev
(
dev
);
}
}
...
...
drivers/net/ibmlana.h
View file @
e602c6f0
...
...
@@ -37,6 +37,7 @@ typedef struct {
nexttxdescr
,
/* last tx descriptor to be used */
currtxdescr
,
/* tx descriptor currently tx'ed */
txused
[
TXBUFCNT
];
/* busy flags */
void
__iomem
*
base
;
spinlock_t
lock
;
}
ibmlana_priv
;
...
...
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