summaryrefslogtreecommitdiffstats
path: root/src/drivers
diff options
context:
space:
mode:
authorMichael Brown2007-01-04 05:20:08 +0100
committerMichael Brown2007-01-04 05:20:08 +0100
commit0c03bb5a9a0649ec7009e334c0e42290af330437 (patch)
treed523c7ba2ae84b0998b7e8121d70a603d6fd087a /src/drivers
parentWe *should* use the persistent reference API for our netdev reference, (diff)
downloadipxe-0c03bb5a9a0649ec7009e334c0e42290af330437.tar.gz
ipxe-0c03bb5a9a0649ec7009e334c0e42290af330437.tar.xz
ipxe-0c03bb5a9a0649ec7009e334c0e42290af330437.zip
Make open() and close() an official part of the netdevice API.
Call netdevice's poll() and transmit() methods only when device is open.
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/net/legacy.c10
-rw-r--r--src/drivers/net/pnic.c16
-rw-r--r--src/drivers/net/rtl8139.c12
3 files changed, 28 insertions, 10 deletions
diff --git a/src/drivers/net/legacy.c b/src/drivers/net/legacy.c
index b0023b186..0c205aed9 100644
--- a/src/drivers/net/legacy.c
+++ b/src/drivers/net/legacy.c
@@ -56,6 +56,14 @@ static void legacy_poll ( struct net_device *netdev ) {
}
}
+static int legacy_open ( struct net_device *netdev __unused ) {
+ return 0;
+}
+
+static void legacy_close ( struct net_device *netdev __unused ) {
+ /* Nothing to do */
+}
+
int legacy_probe ( struct pci_device *pci,
const struct pci_device_id *id __unused,
int ( * probe ) ( struct nic *nic,
@@ -74,6 +82,8 @@ int legacy_probe ( struct pci_device *pci,
memset ( &nic, 0, sizeof ( nic ) );
pci_set_drvdata ( pci, netdev );
+ netdev->open = legacy_open;
+ netdev->close = legacy_close;
netdev->transmit = legacy_transmit;
netdev->poll = legacy_poll;
nic.node_addr = netdev->ll_addr;
diff --git a/src/drivers/net/pnic.c b/src/drivers/net/pnic.c
index ad98c6092..d8f2544e3 100644
--- a/src/drivers/net/pnic.c
+++ b/src/drivers/net/pnic.c
@@ -186,6 +186,20 @@ static void pnic_irq ( struct net_device *netdev, irq_action_t action ) {
#endif
/**************************************************************************
+OPEN - Open network device
+***************************************************************************/
+static int pnic_open ( struct net_device *netdev __unused ) {
+ return 0;
+}
+
+/**************************************************************************
+CLOSE - Close network device
+***************************************************************************/
+static void pnic_close ( struct net_device *netdev __unused ) {
+ /* Nothing to do */
+}
+
+/**************************************************************************
DISABLE - Turn off ethernet interface
***************************************************************************/
static void pnic_remove ( struct pci_device *pci ) {
@@ -238,6 +252,8 @@ static int pnic_probe ( struct pci_device *pci,
netdev->ll_addr, ETH_ALEN, NULL );
/* Point to NIC specific routines */
+ netdev->open = pnic_open;
+ netdev->close = pnic_close;
netdev->poll = pnic_poll;
netdev->transmit = pnic_transmit;
diff --git a/src/drivers/net/rtl8139.c b/src/drivers/net/rtl8139.c
index 86c9c8057..4592ed7db 100644
--- a/src/drivers/net/rtl8139.c
+++ b/src/drivers/net/rtl8139.c
@@ -542,8 +542,8 @@ static int rtl_probe ( struct pci_device *pci,
nvs_read ( &rtl->eeprom.nvs, EE_MAC, netdev->ll_addr, ETH_ALEN );
/* Point to NIC specific routines */
- // netdev->open = rtl_open;
- // netdev->close = rtl_close;
+ netdev->open = rtl_open;
+ netdev->close = rtl_close;
netdev->transmit = rtl_transmit;
netdev->poll = rtl_poll;
@@ -558,10 +558,6 @@ static int rtl_probe ( struct pci_device *pci,
goto err;
}
-#warning "Hack alert"
- rtl_open ( netdev );
-
-
return 0;
err:
@@ -584,10 +580,6 @@ static void rtl_remove ( struct pci_device *pci ) {
struct net_device *netdev = pci_get_drvdata ( pci );
struct rtl8139_nic *rtl = netdev->priv;
-
-#warning "Hack alert"
- rtl_close ( netdev );
-
if ( rtl->nvo.nvs )
nvo_unregister ( &rtl->nvo );
unregister_netdev ( netdev );