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
9a2f7a76
Commit
9a2f7a76
authored
Sep 01, 2003
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Plain Diff
Merge redhat.com:/spare/repo/linux-2.5
into redhat.com:/spare/repo/net-drivers-2.5
parents
99e5aa34
325188e8
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
82 additions
and
85 deletions
+82
-85
drivers/net/8390.c
drivers/net/8390.c
+30
-4
drivers/net/8390.h
drivers/net/8390.h
+1
-0
drivers/net/ne2k-pci.c
drivers/net/ne2k-pci.c
+17
-43
drivers/net/tg3.c
drivers/net/tg3.c
+0
-32
include/linux/netdevice.h
include/linux/netdevice.h
+32
-0
net/core/dev.c
net/core/dev.c
+2
-6
No files found.
drivers/net/8390.c
View file @
9a2f7a76
...
...
@@ -997,6 +997,11 @@ static void set_multicast_list(struct net_device *dev)
spin_unlock_irqrestore
(
&
ei_local
->
page_lock
,
flags
);
}
static
inline
void
ei_device_init
(
struct
ei_device
*
ei_local
)
{
spin_lock_init
(
&
ei_local
->
page_lock
);
}
/**
* ethdev_init - init rest of 8390 device struct
* @dev: network device structure to init
...
...
@@ -1012,14 +1017,11 @@ int ethdev_init(struct net_device *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_device_init
(
dev
->
priv
);
}
dev
->
hard_start_xmit
=
&
ei_start_xmit
;
...
...
@@ -1030,6 +1032,29 @@ int ethdev_init(struct net_device *dev)
return
0
;
}
/* wrapper to make alloc_netdev happy; probably should just cast... */
static
void
__ethdev_init
(
struct
net_device
*
dev
)
{
ethdev_init
(
dev
);
}
/**
* alloc_ei_netdev - alloc_etherdev counterpart for 8390
*
* Allocate 8390-specific net_device.
*/
struct
net_device
*
alloc_ei_netdev
(
void
)
{
struct
net_device
*
dev
;
dev
=
alloc_netdev
(
sizeof
(
struct
ei_device
),
"eth%d"
,
__ethdev_init
);
if
(
dev
)
ei_device_init
(
dev
->
priv
);
return
dev
;
}
...
...
@@ -1133,6 +1158,7 @@ EXPORT_SYMBOL(ei_interrupt);
EXPORT_SYMBOL
(
ei_tx_timeout
);
EXPORT_SYMBOL
(
ethdev_init
);
EXPORT_SYMBOL
(
NS8390_init
);
EXPORT_SYMBOL
(
alloc_ei_netdev
);
#if defined(MODULE)
...
...
drivers/net/8390.h
View file @
9a2f7a76
...
...
@@ -44,6 +44,7 @@ extern void NS8390_init(struct net_device *dev, int startp);
extern
int
ei_open
(
struct
net_device
*
dev
);
extern
int
ei_close
(
struct
net_device
*
dev
);
extern
irqreturn_t
ei_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
);
extern
struct
net_device
*
alloc_ei_netdev
(
void
);
/* You have one of these per-board */
struct
ei_device
{
...
...
drivers/net/ne2k-pci.c
View file @
9a2f7a76
...
...
@@ -174,7 +174,7 @@ static void ne2k_pci_block_input(struct net_device *dev, int count,
struct
sk_buff
*
skb
,
int
ring_offset
);
static
void
ne2k_pci_block_output
(
struct
net_device
*
dev
,
const
int
count
,
const
unsigned
char
*
buf
,
const
int
start_page
);
static
int
netdev_ioctl
(
struct
net_device
*
dev
,
struct
ifreq
*
rq
,
int
cmd
)
;
static
struct
ethtool_ops
ne2k_pci_ethtool_ops
;
...
...
@@ -259,7 +259,8 @@ static int __devinit ne2k_pci_init_one (struct pci_dev *pdev,
}
}
dev
=
alloc_etherdev
(
0
);
/* Allocate net_device, dev->priv; fill in 8390 specific dev fields. */
dev
=
alloc_ei_netdev
();
if
(
!
dev
)
{
printk
(
KERN_ERR
PFX
"cannot allocate ethernet device
\n
"
);
goto
err_out_free_res
;
...
...
@@ -331,13 +332,6 @@ static int __devinit ne2k_pci_init_one (struct pci_dev *pdev,
dev
->
base_addr
=
ioaddr
;
pci_set_drvdata
(
pdev
,
dev
);
/* Allocate dev->priv and fill in 8390 specific dev fields. */
if
(
ethdev_init
(
dev
))
{
printk
(
KERN_ERR
"ne2kpci(%s): unable to get memory for dev->priv.
\n
"
,
pci_name
(
pdev
));
goto
err_out_free_netdev
;
}
ei_status
.
name
=
pci_clone_list
[
chip_idx
].
name
;
ei_status
.
tx_start_page
=
start_page
;
ei_status
.
stop_page
=
stop_page
;
...
...
@@ -361,12 +355,12 @@ static int __devinit ne2k_pci_init_one (struct pci_dev *pdev,
ei_status
.
priv
=
(
unsigned
long
)
pdev
;
dev
->
open
=
&
ne2k_pci_open
;
dev
->
stop
=
&
ne2k_pci_close
;
dev
->
do_ioctl
=
&
netdev_ioctl
;
dev
->
ethtool_ops
=
&
ne2k_pci_ethtool_ops
;
NS8390_init
(
dev
,
0
);
i
=
register_netdev
(
dev
);
if
(
i
)
goto
err_out_free_
8390
;
goto
err_out_free_
netdev
;
printk
(
"%s: %s found at %#lx, IRQ %d, "
,
dev
->
name
,
pci_clone_list
[
chip_idx
].
name
,
ioaddr
,
dev
->
irq
);
...
...
@@ -377,10 +371,8 @@ static int __devinit ne2k_pci_init_one (struct pci_dev *pdev,
return
0
;
err_out_free_8390:
kfree
(
dev
->
priv
);
err_out_free_netdev:
kfree
(
dev
);
free_netdev
(
dev
);
err_out_free_res:
release_region
(
ioaddr
,
NE_IO_EXTENT
);
pci_set_drvdata
(
pdev
,
NULL
);
...
...
@@ -591,40 +583,22 @@ static void ne2k_pci_block_output(struct net_device *dev, int count,
return
;
}
static
int
netdev_ethtool_ioctl
(
struct
net_device
*
dev
,
void
*
useraddr
)
static
void
ne2k_pci_get_drvinfo
(
struct
net_device
*
dev
,
struct
ethtool_drvinfo
*
info
)
{
struct
ei_device
*
ei
=
dev
->
priv
;
struct
pci_dev
*
pci_dev
=
(
struct
pci_dev
*
)
ei
->
priv
;
u32
ethcmd
;
if
(
copy_from_user
(
&
ethcmd
,
useraddr
,
sizeof
(
ethcmd
)))
return
-
EFAULT
;
switch
(
ethcmd
)
{
case
ETHTOOL_GDRVINFO
:
{
struct
ethtool_drvinfo
info
=
{
ETHTOOL_GDRVINFO
};
strcpy
(
info
.
driver
,
DRV_NAME
);
strcpy
(
info
.
version
,
DRV_VERSION
);
strcpy
(
info
.
bus_info
,
pci_name
(
pci_dev
));
if
(
copy_to_user
(
useraddr
,
&
info
,
sizeof
(
info
)))
return
-
EFAULT
;
return
0
;
}
}
return
-
EOPNOTSUPP
;
strcpy
(
info
->
driver
,
DRV_NAME
);
strcpy
(
info
->
version
,
DRV_VERSION
);
strcpy
(
info
->
bus_info
,
pci_name
(
pci_dev
))
;
}
static
int
netdev_ioctl
(
struct
net_device
*
dev
,
struct
ifreq
*
rq
,
int
cmd
)
{
switch
(
cmd
)
{
case
SIOCETHTOOL
:
return
netdev_ethtool_ioctl
(
dev
,
(
void
*
)
rq
->
ifr_data
);
default:
return
-
EOPNOTSUPP
;
}
}
static
struct
ethtool_ops
ne2k_pci_ethtool_ops
=
{
.
get_drvinfo
=
ne2k_pci_get_drvinfo
,
.
get_tx_csum
=
ethtool_op_get_tx_csum
,
.
get_sg
=
ethtool_op_get_sg
,
};
static
void
__devexit
ne2k_pci_remove_one
(
struct
pci_dev
*
pdev
)
{
...
...
@@ -635,8 +609,8 @@ static void __devexit ne2k_pci_remove_one (struct pci_dev *pdev)
unregister_netdev
(
dev
);
release_region
(
dev
->
base_addr
,
NE_IO_EXTENT
);
kfree
(
dev
->
priv
);
free_netdev
(
dev
);
pci_disable_device
(
pdev
);
pci_set_drvdata
(
pdev
,
NULL
);
}
...
...
drivers/net/tg3.c
View file @
9a2f7a76
...
...
@@ -267,38 +267,6 @@ static void tg3_enable_ints(struct tg3 *tp)
tg3_cond_int
(
tp
);
}
/* these netif_xxx funcs should be moved into generic net layer */
static
void
netif_poll_disable
(
struct
net_device
*
dev
)
{
while
(
test_and_set_bit
(
__LINK_STATE_RX_SCHED
,
&
dev
->
state
))
{
current
->
state
=
TASK_INTERRUPTIBLE
;
schedule_timeout
(
1
);
}
}
static
inline
void
netif_poll_enable
(
struct
net_device
*
dev
)
{
clear_bit
(
__LINK_STATE_RX_SCHED
,
&
dev
->
state
);
}
/* same as netif_rx_complete, except that local_irq_save(flags)
* has already been issued
*/
static
inline
void
__netif_rx_complete
(
struct
net_device
*
dev
)
{
if
(
!
test_bit
(
__LINK_STATE_RX_SCHED
,
&
dev
->
state
))
BUG
();
list_del
(
&
dev
->
poll_list
);
smp_mb__before_clear_bit
();
clear_bit
(
__LINK_STATE_RX_SCHED
,
&
dev
->
state
);
}
static
inline
void
netif_tx_disable
(
struct
net_device
*
dev
)
{
spin_lock_bh
(
&
dev
->
xmit_lock
);
netif_stop_queue
(
dev
);
spin_unlock_bh
(
&
dev
->
xmit_lock
);
}
static
inline
void
tg3_netif_stop
(
struct
tg3
*
tp
)
{
netif_poll_disable
(
tp
->
dev
);
...
...
include/linux/netdevice.h
View file @
9a2f7a76
...
...
@@ -832,6 +832,38 @@ static inline void netif_rx_complete(struct net_device *dev)
local_irq_restore
(
flags
);
}
static
inline
void
netif_poll_disable
(
struct
net_device
*
dev
)
{
while
(
test_and_set_bit
(
__LINK_STATE_RX_SCHED
,
&
dev
->
state
))
{
/* No hurry. */
current
->
state
=
TASK_INTERRUPTIBLE
;
schedule_timeout
(
1
);
}
}
static
inline
void
netif_poll_enable
(
struct
net_device
*
dev
)
{
clear_bit
(
__LINK_STATE_RX_SCHED
,
&
dev
->
state
);
}
/* same as netif_rx_complete, except that local_irq_save(flags)
* has already been issued
*/
static
inline
void
__netif_rx_complete
(
struct
net_device
*
dev
)
{
if
(
!
test_bit
(
__LINK_STATE_RX_SCHED
,
&
dev
->
state
))
BUG
();
list_del
(
&
dev
->
poll_list
);
smp_mb__before_clear_bit
();
clear_bit
(
__LINK_STATE_RX_SCHED
,
&
dev
->
state
);
}
static
inline
void
netif_tx_disable
(
struct
net_device
*
dev
)
{
spin_lock_bh
(
&
dev
->
xmit_lock
);
netif_stop_queue
(
dev
);
spin_unlock_bh
(
&
dev
->
xmit_lock
);
}
/* These functions live elsewhere (drivers/net/net_init.c, but related) */
extern
void
ether_setup
(
struct
net_device
*
dev
);
...
...
net/core/dev.c
View file @
9a2f7a76
...
...
@@ -845,11 +845,7 @@ int dev_close(struct net_device *dev)
* engine, but this requires more changes in devices. */
smp_mb__after_clear_bit
();
/* Commit netif_running(). */
while
(
test_bit
(
__LINK_STATE_RX_SCHED
,
&
dev
->
state
))
{
/* No hurry. */
current
->
state
=
TASK_INTERRUPTIBLE
;
schedule_timeout
(
1
);
}
netif_poll_disable
(
dev
);
/*
* Call the device specific close. This cannot fail.
...
...
@@ -1657,7 +1653,7 @@ static int process_backlog(struct net_device *backlog_dev, int *budget)
list_del
(
&
backlog_dev
->
poll_list
);
smp_mb__before_clear_bit
();
clear_bit
(
__LINK_STATE_RX_SCHED
,
&
backlog_dev
->
state
);
netif_poll_enable
(
backlog_dev
);
if
(
queue
->
throttle
)
{
queue
->
throttle
=
0
;
...
...
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