Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/ixgbe/if_ix.c
Context not available. | |||||
/* Enable WoL (if supported) */ | /* Enable WoL (if supported) */ | ||||
ixgbe_check_wol_support(adapter); | ixgbe_check_wol_support(adapter); | ||||
adapter->vlans = malloc(sizeof(*adapter->vlans), M_IXGBE, M_NOWAIT | M_ZERO); | |||||
if (adapter->vlans == NULL) { | |||||
device_printf(dev, "Can not allocate VLANs table\n"); | |||||
error = ENOMEM; | |||||
goto err_out; | |||||
} | |||||
/* Register for VLAN events */ | /* Register for VLAN events */ | ||||
adapter->vlan_attach = EVENTHANDLER_REGISTER(vlan_config, | adapter->vlan_attach = EVENTHANDLER_REGISTER(vlan_config, | ||||
ixgbe_register_vlan, adapter, EVENTHANDLER_PRI_FIRST); | ixgbe_register_vlan, adapter, EVENTHANDLER_PRI_FIRST); | ||||
Context not available. | |||||
IXGBE_WRITE_REG(&adapter->hw, IXGBE_CTRL_EXT, ctrl_ext); | IXGBE_WRITE_REG(&adapter->hw, IXGBE_CTRL_EXT, ctrl_ext); | ||||
ixgbe_free_pci_resources(adapter); | ixgbe_free_pci_resources(adapter); | ||||
free(adapter->mta, M_IXGBE); | free(adapter->mta, M_IXGBE); | ||||
free(adapter->vlans, M_IXGBE); | |||||
IXGBE_CORE_LOCK_DESTROY(adapter); | IXGBE_CORE_LOCK_DESTROY(adapter); | ||||
return (error); | return (error); | ||||
Context not available. | |||||
| IFCAP_VLAN_MTU | | IFCAP_VLAN_MTU | ||||
| IFCAP_HWSTATS; | | IFCAP_HWSTATS; | ||||
ifp->if_capabilities |= IFCAP_VLAN_HWFILTER; | |||||
/* Enable the above capabilities by default */ | /* Enable the above capabilities by default */ | ||||
ifp->if_capenable = ifp->if_capabilities; | ifp->if_capenable = ifp->if_capabilities; | ||||
/* | /* | ||||
* Don't turn this on by default, if vlans are | |||||
* created on another pseudo device (eg. lagg) | |||||
* then vlan events are not passed thru, breaking | |||||
* operation, but with HW FILTER off it works. If | |||||
* using vlans directly on the ixgbe driver you can | |||||
* enable this and get full hardware tag filtering. | |||||
*/ | |||||
ifp->if_capabilities |= IFCAP_VLAN_HWFILTER; | |||||
/* | |||||
* Specify the media types supported by this adapter and register | * Specify the media types supported by this adapter and register | ||||
* callbacks to update media and link information | * callbacks to update media and link information | ||||
*/ | */ | ||||
Context not available. | |||||
if ((vtag == 0) || (vtag > 4095)) /* Invalid */ | if ((vtag == 0) || (vtag > 4095)) /* Invalid */ | ||||
return; | return; | ||||
yndx_vlan_set(adapter->vlans, vtag, yndx_vlan_devat(ifp, vtag)); | |||||
IXGBE_CORE_LOCK(adapter); | IXGBE_CORE_LOCK(adapter); | ||||
index = (vtag >> 5) & 0x7F; | index = (vtag >> 5) & 0x7F; | ||||
bit = vtag & 0x1F; | bit = vtag & 0x1F; | ||||
Context not available. | |||||
if ((vtag == 0) || (vtag > 4095)) /* Invalid */ | if ((vtag == 0) || (vtag > 4095)) /* Invalid */ | ||||
return; | return; | ||||
yndx_vlan_set(adapter->vlans, vtag, NULL); | |||||
IXGBE_CORE_LOCK(adapter); | IXGBE_CORE_LOCK(adapter); | ||||
index = (vtag >> 5) & 0x7F; | index = (vtag >> 5) & 0x7F; | ||||
bit = vtag & 0x1F; | bit = vtag & 0x1F; | ||||
Context not available. | |||||
if (adapter->num_vlans == 0) | if (adapter->num_vlans == 0) | ||||
return; | return; | ||||
if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) == 0) | |||||
return; | |||||
/* Setup the queues for vlans */ | /* Setup the queues for vlans */ | ||||
for (i = 0; i < adapter->num_queues; i++) { | for (i = 0; i < adapter->num_queues; i++) { | ||||
rxr = &adapter->rx_rings[i]; | rxr = &adapter->rx_rings[i]; | ||||
Context not available. | |||||
EVENTHANDLER_DEREGISTER(vlan_config, adapter->vlan_attach); | EVENTHANDLER_DEREGISTER(vlan_config, adapter->vlan_attach); | ||||
if (adapter->vlan_detach != NULL) | if (adapter->vlan_detach != NULL) | ||||
EVENTHANDLER_DEREGISTER(vlan_unconfig, adapter->vlan_detach); | EVENTHANDLER_DEREGISTER(vlan_unconfig, adapter->vlan_detach); | ||||
free(adapter->vlans, M_IXGBE); | |||||
callout_drain(&adapter->timer); | callout_drain(&adapter->timer); | ||||
Context not available. |