diff options
author | brooks <brooks@FreeBSD.org> | 2005-06-10 16:49:24 +0000 |
---|---|---|
committer | brooks <brooks@FreeBSD.org> | 2005-06-10 16:49:24 +0000 |
commit | 567ba9b00a248431e7c1147c4e079fd7a11b9ecf (patch) | |
tree | f65b6d7834b40dfcd48534829a0a1e9529ab87ee /sys/dev/ixgb | |
parent | 3eaa67c3ad947d85be5350e0e184cd6ee5b93a52 (diff) | |
download | FreeBSD-src-567ba9b00a248431e7c1147c4e079fd7a11b9ecf.zip FreeBSD-src-567ba9b00a248431e7c1147c4e079fd7a11b9ecf.tar.gz |
Stop embedding struct ifnet at the top of driver softcs. Instead the
struct ifnet or the layer 2 common structure it was embedded in have
been replaced with a struct ifnet pointer to be filled by a call to the
new function, if_alloc(). The layer 2 common structure is also allocated
via if_alloc() based on the interface type. It is hung off the new
struct ifnet member, if_l2com.
This change removes the size of these structures from the kernel ABI and
will allow us to better manage them as interfaces come and go.
Other changes of note:
- Struct arpcom is no longer referenced in normal interface code.
Instead the Ethernet address is accessed via the IFP2ENADDR() macro.
To enforce this ac_enaddr has been renamed to _ac_enaddr.
- The second argument to ether_ifattach is now always the mac address
from driver private storage rather than sometimes being ac_enaddr.
Reviewed by: sobomax, sam
Diffstat (limited to 'sys/dev/ixgb')
-rw-r--r-- | sys/dev/ixgb/if_ixgb.c | 41 | ||||
-rw-r--r-- | sys/dev/ixgb/if_ixgb.h | 3 |
2 files changed, 23 insertions, 21 deletions
diff --git a/sys/dev/ixgb/if_ixgb.c b/sys/dev/ixgb/if_ixgb.c index aa32d30..ec925b3 100644 --- a/sys/dev/ixgb/if_ixgb.c +++ b/sys/dev/ixgb/if_ixgb.c @@ -364,7 +364,7 @@ static int ixgb_detach(device_t dev) { struct adapter *adapter = device_get_softc(dev); - struct ifnet *ifp = &adapter->interface_data.ac_if; + struct ifnet *ifp = adapter->ifp; INIT_DEBUGOUT("ixgb_detach: begin"); @@ -375,9 +375,10 @@ ixgb_detach(device_t dev) IXGB_UNLOCK(adapter); #if __FreeBSD_version < 500000 - ether_ifdetach(&adapter->interface_data.ac_if, ETHER_BPF_SUPPORTED); + ether_ifdetach(adapter->ifp, ETHER_BPF_SUPPORTED); #else - ether_ifdetach(&adapter->interface_data.ac_if); + ether_ifdetach(adapter->ifp); + if_free(adapter->ifp); #endif ixgb_free_pci_resources(adapter); @@ -631,7 +632,7 @@ ixgb_init_locked(struct adapter *adapter) ixgb_stop(adapter); /* Get the latest mac address, User can use a LAA */ - bcopy(adapter->interface_data.ac_enaddr, adapter->hw.curr_mac_addr, + bcopy(IFP2ENADDR(adapter->ifp), adapter->hw.curr_mac_addr, IXGB_ETH_LENGTH_OF_ADDRESS); /* Initialize the hardware */ @@ -666,7 +667,7 @@ ixgb_init_locked(struct adapter *adapter) /* Don't loose promiscuous settings */ ixgb_set_promisc(adapter); - ifp = &adapter->interface_data.ac_if; + ifp = adapter->ifp; ifp->if_flags |= IFF_RUNNING; ifp->if_flags &= ~IFF_OACTIVE; @@ -774,7 +775,7 @@ ixgb_intr(void *arg) IXGB_LOCK(adapter); - ifp = &adapter->interface_data.ac_if; + ifp = adapter->ifp; #ifdef DEVICE_POLLING if (ifp->if_flags & IFF_POLLING) { @@ -912,7 +913,7 @@ ixgb_encap(struct adapter * adapter, struct mbuf * m_head) bus_dmamap_t map; struct ixgb_buffer *tx_buffer = NULL; struct ixgb_tx_desc *current_tx_desc = NULL; - struct ifnet *ifp = &adapter->interface_data.ac_if; + struct ifnet *ifp = adapter->ifp; /* * Force a cleanup if number of TX descriptors available hits the @@ -1016,7 +1017,7 @@ ixgb_set_promisc(struct adapter * adapter) { u_int32_t reg_rctl; - struct ifnet *ifp = &adapter->interface_data.ac_if; + struct ifnet *ifp = adapter->ifp; reg_rctl = IXGB_READ_REG(&adapter->hw, RCTL); @@ -1060,7 +1061,7 @@ ixgb_set_multi(struct adapter * adapter) u_int8_t mta[MAX_NUM_MULTICAST_ADDRESSES * IXGB_ETH_LENGTH_OF_ADDRESS]; struct ifmultiaddr *ifma; int mcnt = 0; - struct ifnet *ifp = &adapter->interface_data.ac_if; + struct ifnet *ifp = adapter->ifp; IOCTL_DEBUGOUT("ixgb_set_multi: begin"); @@ -1100,7 +1101,7 @@ ixgb_local_timer(void *arg) { struct ifnet *ifp; struct adapter *adapter = arg; - ifp = &adapter->interface_data.ac_if; + ifp = adapter->ifp; IXGB_LOCK(adapter); @@ -1151,7 +1152,7 @@ ixgb_stop(void *arg) { struct ifnet *ifp; struct adapter *adapter = arg; - ifp = &adapter->interface_data.ac_if; + ifp = adapter->ifp; IXGB_LOCK_ASSERT(adapter); @@ -1303,8 +1304,6 @@ ixgb_hardware_init(struct adapter * adapter) adapter->unit); return (EIO); } - bcopy(adapter->hw.curr_mac_addr, adapter->interface_data.ac_enaddr, - IXGB_ETH_LENGTH_OF_ADDRESS); return (0); } @@ -1320,7 +1319,9 @@ ixgb_setup_interface(device_t dev, struct adapter * adapter) struct ifnet *ifp; INIT_DEBUGOUT("ixgb_setup_interface: begin"); - ifp = &adapter->interface_data.ac_if; + ifp = adapter->ifp = if_alloc(IFT_ETHER); + if (ifp == NULL) + panic("%s: can not if_alloc()\n", device_get_nameunit(dev)); #if __FreeBSD_version >= 502000 if_initname(ifp, device_get_name(dev), device_get_unit(dev)); #else @@ -1340,7 +1341,7 @@ ixgb_setup_interface(device_t dev, struct adapter * adapter) #if __FreeBSD_version < 500000 ether_ifattach(ifp, ETHER_BPF_SUPPORTED); #else - ether_ifattach(ifp, adapter->interface_data.ac_enaddr); + ether_ifattach(ifp, adapter->hw.curr_mac_addr); #endif ifp->if_capabilities = IFCAP_HWCSUM; @@ -1725,7 +1726,7 @@ ixgb_clean_transmit_interrupts(struct adapter * adapter) * restart the timeout. */ if (num_avail > IXGB_TX_CLEANUP_THRESHOLD) { - struct ifnet *ifp = &adapter->interface_data.ac_if; + struct ifnet *ifp = adapter->ifp; ifp->if_flags &= ~IFF_OACTIVE; if (num_avail == adapter->num_tx_desc) @@ -1753,7 +1754,7 @@ ixgb_get_buf(int i, struct adapter * adapter, bus_addr_t paddr; int error; - ifp = &adapter->interface_data.ac_if; + ifp = adapter->ifp; if (mp == NULL) { @@ -1902,7 +1903,7 @@ ixgb_initialize_receive_unit(struct adapter * adapter) struct ifnet *ifp; u_int64_t rdba = adapter->rxdma.dma_paddr; - ifp = &adapter->interface_data.ac_if; + ifp = adapter->ifp; /* * Make sure receives are disabled while setting up the descriptor @@ -2054,7 +2055,7 @@ ixgb_process_receive_interrupts(struct adapter * adapter, int count) IXGB_LOCK_ASSERT(adapter); - ifp = &adapter->interface_data.ac_if; + ifp = adapter->ifp; i = adapter->next_rx_desc_to_check; next_to_use = adapter->next_rx_desc_to_use; eop_desc = adapter->next_rx_desc_to_check; @@ -2353,7 +2354,7 @@ ixgb_update_stats_counters(struct adapter * adapter) adapter->stats.pftc += IXGB_READ_REG(&adapter->hw, PFTC); adapter->stats.mcfrc += IXGB_READ_REG(&adapter->hw, MCFRC); - ifp = &adapter->interface_data.ac_if; + ifp = adapter->ifp; /* Fill out the OS statistics structure */ ifp->if_ipackets = adapter->stats.gprcl; diff --git a/sys/dev/ixgb/if_ixgb.h b/sys/dev/ixgb/if_ixgb.h index 0a8981b..5d7b4d9 100644 --- a/sys/dev/ixgb/if_ixgb.h +++ b/sys/dev/ixgb/if_ixgb.h @@ -51,6 +51,7 @@ POSSIBILITY OF SUCH DAMAGE. #include <net/ethernet.h> #include <net/if_dl.h> #include <net/if_media.h> +#include <net/if_types.h> #include <net/bpf.h> #include <net/if_types.h> @@ -270,7 +271,7 @@ typedef enum _XSUM_CONTEXT_T { /* Our adapter structure */ struct adapter { - struct arpcom interface_data; + struct ifnet *ifp; struct adapter *next; struct adapter *prev; struct ixgb_hw hw; |