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
cb7faa93
Commit
cb7faa93
authored
Jan 10, 2004
by
Alexander Viro
Committed by
Stephen Hemminger
Jan 10, 2004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[netdrvr axnet_cs] use embedded private struct
parent
86a029c3
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
57 additions
and
82 deletions
+57
-82
drivers/net/pcmcia/axnet_cs.c
drivers/net/pcmcia/axnet_cs.c
+57
-82
No files found.
drivers/net/pcmcia/axnet_cs.c
View file @
cb7faa93
...
...
@@ -119,7 +119,7 @@ static void axnet_detach(dev_link_t *);
static
dev_info_t
dev_info
=
"axnet_cs"
;
static
dev_link_t
*
dev_list
;
static
int
axdev_init
(
struct
net_device
*
dev
);
static
void
axdev_setup
(
struct
net_device
*
dev
);
static
void
AX88190_init
(
struct
net_device
*
dev
,
int
startp
);
static
int
ax_open
(
struct
net_device
*
dev
);
static
int
ax_close
(
struct
net_device
*
dev
);
...
...
@@ -128,7 +128,6 @@ static irqreturn_t ax_interrupt(int irq, void *dev_id, struct pt_regs *regs);
/*====================================================================*/
typedef
struct
axnet_dev_t
{
struct
net_device
dev
;
/* so &dev == &axnet_dev_t */
dev_link_t
link
;
dev_node_t
node
;
caddr_t
base
;
...
...
@@ -140,16 +139,10 @@ typedef struct axnet_dev_t {
int
flags
;
}
axnet_dev_t
;
/*======================================================================
We never need to do anything when a axnet device is "initialized"
by the net software, because we only register already-found cards.
======================================================================*/
static
int
axnet_init
(
struct
net_device
*
dev
)
static
inline
axnet_dev_t
*
PRIV
(
struct
net_device
*
dev
)
{
return
0
;
void
*
p
=
(
char
*
)
netdev_priv
(
dev
)
+
sizeof
(
struct
ei_device
);
return
p
;
}
/*======================================================================
...
...
@@ -170,12 +163,15 @@ static dev_link_t *axnet_attach(void)
DEBUG
(
0
,
"axnet_attach()
\n
"
);
/* Create new ethernet device */
info
=
kmalloc
(
sizeof
(
*
info
),
GFP_KERNEL
);
if
(
!
info
)
return
NULL
;
memset
(
info
,
0
,
sizeof
(
*
info
));
link
=
&
info
->
link
;
dev
=
&
info
->
dev
;
link
->
priv
=
info
;
dev
=
alloc_netdev
(
sizeof
(
struct
ei_device
)
+
sizeof
(
axnet_dev_t
),
"eth%d"
,
axdev_setup
);
if
(
!
dev
)
return
NULL
;
info
=
PRIV
(
dev
);
link
=
&
info
->
link
;
link
->
priv
=
dev
;
link
->
irq
.
Attributes
=
IRQ_TYPE_EXCLUSIVE
;
link
->
irq
.
IRQInfo1
=
IRQ_INFO2_VALID
|
IRQ_LEVEL_ID
;
if
(
irq_list
[
0
]
==
-
1
)
...
...
@@ -186,8 +182,6 @@ static dev_link_t *axnet_attach(void)
link
->
conf
.
Attributes
=
CONF_ENABLE_IRQ
;
link
->
conf
.
IntType
=
INT_MEMORY_AND_IO
;
axdev_init
(
dev
);
dev
->
init
=
&
axnet_init
;
dev
->
open
=
&
axnet_open
;
dev
->
stop
=
&
axnet_close
;
dev
->
do_ioctl
=
&
axnet_ioctl
;
...
...
@@ -226,7 +220,7 @@ static dev_link_t *axnet_attach(void)
static
void
axnet_detach
(
dev_link_t
*
link
)
{
axnet_dev_t
*
info
=
link
->
priv
;
struct
net_device
*
dev
=
link
->
priv
;
dev_link_t
**
linkp
;
DEBUG
(
0
,
"axnet_detach(0x%p)
\n
"
,
link
);
...
...
@@ -245,12 +239,9 @@ static void axnet_detach(dev_link_t *link)
/* Unlink device structure, free bits */
*
linkp
=
link
->
next
;
if
(
link
->
dev
)
{
unregister_netdev
(
&
info
->
dev
);
free_netdev
(
&
info
->
dev
);
}
else
kfree
(
info
);
if
(
link
->
dev
)
unregister_netdev
(
dev
);
free_netdev
(
dev
);
}
/* axnet_detach */
/*======================================================================
...
...
@@ -349,8 +340,8 @@ static int try_io_port(dev_link_t *link)
static
void
axnet_config
(
dev_link_t
*
link
)
{
client_handle_t
handle
=
link
->
handle
;
axnet_dev_t
*
info
=
link
->
priv
;
struct
net_device
*
dev
=
&
info
->
dev
;
struct
net_device
*
dev
=
link
->
priv
;
axnet_dev_t
*
info
=
PRIV
(
dev
)
;
tuple_t
tuple
;
cisparse_t
parse
;
int
i
,
j
,
last_ret
,
last_fn
;
...
...
@@ -425,15 +416,10 @@ static void axnet_config(dev_link_t *link)
CS_CHECK
(
RequestConfiguration
,
handle
,
&
link
->
conf
);
dev
->
irq
=
link
->
irq
.
AssignedIRQ
;
dev
->
base_addr
=
link
->
io
.
BasePort1
;
if
(
register_netdev
(
dev
)
!=
0
)
{
printk
(
KERN_NOTICE
"axnet_cs: register_netdev() failed
\n
"
);
goto
failed
;
}
if
(
!
get_prom
(
link
))
{
printk
(
KERN_NOTICE
"axnet_cs: this is not an AX88190 card!
\n
"
);
printk
(
KERN_NOTICE
"axnet_cs: use pcnet_cs instead.
\n
"
);
unregister_netdev
(
dev
);
goto
failed
;
}
...
...
@@ -448,7 +434,6 @@ static void axnet_config(dev_link_t *link)
ei_status
.
block_output
=
&
block_output
;
strcpy
(
info
->
node
.
dev_name
,
dev
->
name
);
link
->
dev
=
&
info
->
node
;
if
(
inb
(
dev
->
base_addr
+
AXNET_TEST
)
!=
0
)
info
->
flags
|=
IS_AX88790
;
...
...
@@ -487,6 +472,12 @@ static void axnet_config(dev_link_t *link)
printk
(
KERN_NOTICE
" No MII transceivers found!
\n
"
);
}
if
(
register_netdev
(
dev
)
!=
0
)
{
printk
(
KERN_NOTICE
"axnet_cs: register_netdev() failed
\n
"
);
goto
failed
;
}
link
->
dev
=
&
info
->
node
;
link
->
state
&=
~
DEV_CONFIG_PENDING
;
return
;
...
...
@@ -530,7 +521,7 @@ static int axnet_event(event_t event, int priority,
event_callback_args_t
*
args
)
{
dev_link_t
*
link
=
args
->
client_data
;
axnet_dev_t
*
info
=
link
->
priv
;
struct
net_device
*
dev
=
link
->
priv
;
DEBUG
(
2
,
"axnet_event(0x%06x)
\n
"
,
event
);
...
...
@@ -538,7 +529,7 @@ static int axnet_event(event_t event, int priority,
case
CS_EVENT_CARD_REMOVAL
:
link
->
state
&=
~
DEV_PRESENT
;
if
(
link
->
state
&
DEV_CONFIG
)
{
netif_device_detach
(
&
info
->
dev
);
netif_device_detach
(
dev
);
axnet_release
(
link
);
}
break
;
...
...
@@ -552,7 +543,7 @@ static int axnet_event(event_t event, int priority,
case
CS_EVENT_RESET_PHYSICAL
:
if
(
link
->
state
&
DEV_CONFIG
)
{
if
(
link
->
open
)
netif_device_detach
(
&
info
->
dev
);
netif_device_detach
(
dev
);
CardServices
(
ReleaseConfiguration
,
link
->
handle
);
}
break
;
...
...
@@ -563,9 +554,9 @@ static int axnet_event(event_t event, int priority,
if
(
link
->
state
&
DEV_CONFIG
)
{
CardServices
(
RequestConfiguration
,
link
->
handle
,
&
link
->
conf
);
if
(
link
->
open
)
{
axnet_reset_8390
(
&
info
->
dev
);
AX88190_init
(
&
info
->
dev
,
1
);
netif_device_attach
(
&
info
->
dev
);
axnet_reset_8390
(
dev
);
AX88190_init
(
dev
,
1
);
netif_device_attach
(
dev
);
}
}
break
;
...
...
@@ -635,7 +626,7 @@ static void mdio_write(ioaddr_t addr, int phy_id, int loc, int value)
static
int
axnet_open
(
struct
net_device
*
dev
)
{
axnet_dev_t
*
info
=
(
axnet_dev_t
*
)
dev
;
axnet_dev_t
*
info
=
PRIV
(
dev
)
;
dev_link_t
*
link
=
&
info
->
link
;
DEBUG
(
2
,
"axnet_open('%s')
\n
"
,
dev
->
name
);
...
...
@@ -650,7 +641,7 @@ static int axnet_open(struct net_device *dev)
info
->
link_status
=
0x00
;
init_timer
(
&
info
->
watchdog
);
info
->
watchdog
.
function
=
&
ei_watchdog
;
info
->
watchdog
.
data
=
(
u_long
)
info
;
info
->
watchdog
.
data
=
(
u_long
)
dev
;
info
->
watchdog
.
expires
=
jiffies
+
HZ
;
add_timer
(
&
info
->
watchdog
);
...
...
@@ -661,7 +652,7 @@ static int axnet_open(struct net_device *dev)
static
int
axnet_close
(
struct
net_device
*
dev
)
{
axnet_dev_t
*
info
=
(
axnet_dev_t
*
)
dev
;
axnet_dev_t
*
info
=
PRIV
(
dev
)
;
dev_link_t
*
link
=
&
info
->
link
;
DEBUG
(
2
,
"axnet_close('%s')
\n
"
,
dev
->
name
);
...
...
@@ -711,15 +702,15 @@ static void axnet_reset_8390(struct net_device *dev)
static
irqreturn_t
ei_irq_wrapper
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
axnet_dev_t
*
info
=
dev_id
;
info
->
stale
=
0
;
struct
net_device
*
dev
=
dev_id
;
PRIV
(
dev
)
->
stale
=
0
;
return
ax_interrupt
(
irq
,
dev_id
,
regs
);
}
static
void
ei_watchdog
(
u_long
arg
)
{
axnet_dev_t
*
info
=
(
axnet_dev_t
*
)(
arg
);
struct
net_device
*
dev
=
&
info
->
dev
;
struct
net_device
*
dev
=
(
struct
net_device
*
)(
arg
);
axnet_dev_t
*
info
=
PRIV
(
dev
)
;
ioaddr_t
nic_base
=
dev
->
base_addr
;
ioaddr_t
mii_addr
=
nic_base
+
AXNET_MII_EEP
;
u_short
link
;
...
...
@@ -789,7 +780,7 @@ static struct ethtool_ops netdev_ethtool_ops = {
static
int
axnet_ioctl
(
struct
net_device
*
dev
,
struct
ifreq
*
rq
,
int
cmd
)
{
axnet_dev_t
*
info
=
(
axnet_dev_t
*
)
dev
;
axnet_dev_t
*
info
=
PRIV
(
dev
)
;
u16
*
data
=
(
u16
*
)
&
rq
->
ifr_data
;
ioaddr_t
mii_addr
=
dev
->
base_addr
+
AXNET_MII_EEP
;
switch
(
cmd
)
{
...
...
@@ -1038,14 +1029,7 @@ static void do_set_multicast_list(struct net_device *dev);
static
int
ax_open
(
struct
net_device
*
dev
)
{
unsigned
long
flags
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
dev
->
priv
;
/* This can't happen unless somebody forgot to call axdev_init(). */
if
(
ei_local
==
NULL
)
{
printk
(
KERN_EMERG
"%s: ax_open passed a non-existent device!
\n
"
,
dev
->
name
);
return
-
ENXIO
;
}
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
netdev_priv
(
dev
);
#ifdef HAVE_TX_TIMEOUT
/* The card I/O part of the driver (e.g. 3c503) can hook a Tx timeout
...
...
@@ -1071,7 +1055,7 @@ static int ax_open(struct net_device *dev)
return
0
;
}
#define dev_lock(dev) (((struct ei_device *)
(dev)->priv
)->page_lock)
#define dev_lock(dev) (((struct ei_device *)
netdev_priv(dev)
)->page_lock)
/**
* ax_close - shut down network device
...
...
@@ -1105,7 +1089,7 @@ int ax_close(struct net_device *dev)
void
ei_tx_timeout
(
struct
net_device
*
dev
)
{
long
e8390_base
=
dev
->
base_addr
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
dev
->
priv
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
netdev_priv
(
dev
)
;
int
txsr
,
isr
,
tickssofar
=
jiffies
-
dev
->
trans_start
;
unsigned
long
flags
;
...
...
@@ -1151,7 +1135,7 @@ void ei_tx_timeout(struct net_device *dev)
static
int
ei_start_xmit
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
)
{
long
e8390_base
=
dev
->
base_addr
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
dev
->
priv
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
netdev_priv
(
dev
)
;
int
length
,
send_length
,
output_page
;
unsigned
long
flags
;
u8
packet
[
ETH_ZLEN
];
...
...
@@ -1297,7 +1281,7 @@ static irqreturn_t ax_interrupt(int irq, void *dev_id, struct pt_regs * regs)
}
e8390_base
=
dev
->
base_addr
;
ei_local
=
(
struct
ei_device
*
)
dev
->
priv
;
ei_local
=
(
struct
ei_device
*
)
netdev_priv
(
dev
)
;
/*
* Protect the irq test too.
...
...
@@ -1409,7 +1393,7 @@ static irqreturn_t ax_interrupt(int irq, void *dev_id, struct pt_regs * regs)
static
void
ei_tx_err
(
struct
net_device
*
dev
)
{
long
e8390_base
=
dev
->
base_addr
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
dev
->
priv
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
netdev_priv
(
dev
)
;
unsigned
char
txsr
=
inb_p
(
e8390_base
+
EN0_TSR
);
unsigned
char
tx_was_aborted
=
txsr
&
(
ENTSR_ABT
+
ENTSR_FU
);
...
...
@@ -1450,7 +1434,7 @@ static void ei_tx_err(struct net_device *dev)
static
void
ei_tx_intr
(
struct
net_device
*
dev
)
{
long
e8390_base
=
dev
->
base_addr
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
dev
->
priv
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
netdev_priv
(
dev
)
;
int
status
=
inb
(
e8390_base
+
EN0_TSR
);
/*
...
...
@@ -1531,7 +1515,7 @@ static void ei_tx_intr(struct net_device *dev)
static
void
ei_receive
(
struct
net_device
*
dev
)
{
long
e8390_base
=
dev
->
base_addr
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
dev
->
priv
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
netdev_priv
(
dev
)
;
unsigned
char
rxing_page
,
this_frame
,
next_frame
;
unsigned
short
current_offset
;
int
rx_pkt_count
=
0
;
...
...
@@ -1651,7 +1635,7 @@ static void ei_rx_overrun(struct net_device *dev)
axnet_dev_t
*
info
=
(
axnet_dev_t
*
)
dev
;
long
e8390_base
=
dev
->
base_addr
;
unsigned
char
was_txing
,
must_resend
=
0
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
dev
->
priv
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
netdev_priv
(
dev
)
;
/*
* Record whether a Tx was in progress and then issue the
...
...
@@ -1718,7 +1702,7 @@ static void ei_rx_overrun(struct net_device *dev)
static
struct
net_device_stats
*
get_stats
(
struct
net_device
*
dev
)
{
long
ioaddr
=
dev
->
base_addr
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
dev
->
priv
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
netdev_priv
(
dev
)
;
unsigned
long
flags
;
/* If the card is stopped, just return the present stats. */
...
...
@@ -1771,39 +1755,30 @@ static void set_multicast_list(struct net_device *dev)
}
/**
* axdev_
init
- init rest of 8390 device struct
* axdev_
setup
- init rest of 8390 device struct
* @dev: network device structure to init
*
* Initialize the rest of the 8390 device structure. Do NOT __init
* this, as it is used by 8390 based modular drivers too.
*/
static
int
axdev_init
(
struct
net_device
*
dev
)
static
void
axdev_setup
(
struct
net_device
*
dev
)
{
struct
ei_device
*
ei_local
;
if
(
ei_debug
>
1
)
printk
(
version_8390
);
SET_MODULE_OWNER
(
dev
);
if
(
dev
->
priv
==
NULL
)
{
struct
ei_device
*
ei_local
;
dev
->
priv
=
kmalloc
(
sizeof
(
struct
ei_device
),
GFP_KERNEL
);
if
(
dev
->
priv
==
NULL
)
return
-
ENOMEM
;
memset
(
dev
->
priv
,
0
,
sizeof
(
struct
ei_device
));
ei_local
=
(
struct
ei_device
*
)
dev
->
priv
;
spin_lock_init
(
&
ei_local
->
page_lock
);
}
ei_local
=
(
struct
ei_device
*
)
netdev_priv
(
dev
);
spin_lock_init
(
&
ei_local
->
page_lock
);
dev
->
hard_start_xmit
=
&
ei_start_xmit
;
dev
->
get_stats
=
get_stats
;
dev
->
set_multicast_list
=
&
set_multicast_list
;
ether_setup
(
dev
);
return
0
;
}
/* This page of functions should be 8390 generic */
...
...
@@ -1819,9 +1794,9 @@ static int axdev_init(struct net_device *dev)
static
void
AX88190_init
(
struct
net_device
*
dev
,
int
startp
)
{
axnet_dev_t
*
info
=
(
axnet_dev_t
*
)
dev
;
axnet_dev_t
*
info
=
PRIV
(
dev
)
;
long
e8390_base
=
dev
->
base_addr
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
dev
->
priv
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
netdev_priv
(
dev
)
;
int
i
;
int
endcfg
=
ei_local
->
word16
?
(
0x48
|
ENDCFG_WTS
)
:
0x48
;
...
...
@@ -1890,7 +1865,7 @@ static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
int
start_page
)
{
long
e8390_base
=
dev
->
base_addr
;
struct
ei_device
*
ei_local
__attribute
((
unused
))
=
(
struct
ei_device
*
)
dev
->
priv
;
struct
ei_device
*
ei_local
__attribute
((
unused
))
=
(
struct
ei_device
*
)
netdev_priv
(
dev
)
;
if
(
inb_p
(
e8390_base
)
&
E8390_TRANS
)
{
...
...
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