Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/ena/ena.c
Show First 20 Lines • Show All 3,598 Lines • ▼ Show 20 Lines | ena_attach(device_t pdev) | ||||
rc = ena_enable_msix_and_set_admin_interrupts(adapter, io_queue_num); | rc = ena_enable_msix_and_set_admin_interrupts(adapter, io_queue_num); | ||||
if (rc) { | if (rc) { | ||||
device_printf(pdev, | device_printf(pdev, | ||||
"Failed to enable and set the admin interrupts\n"); | "Failed to enable and set the admin interrupts\n"); | ||||
goto err_ifp_free; | goto err_ifp_free; | ||||
} | } | ||||
/* Initialize reset task queue */ | |||||
TASK_INIT(&adapter->reset_task, 0, ena_reset_task, adapter); | |||||
adapter->reset_tq = taskqueue_create("ena_reset_enqueue", | |||||
M_WAITOK | M_ZERO, taskqueue_thread_enqueue, &adapter->reset_tq); | |||||
if (adapter->reset_tq == NULL) { | |||||
device_printf(adapter->pdev, | |||||
"Unable to create reset task queue\n"); | |||||
goto err_reset_tq; | |||||
} | |||||
taskqueue_start_threads(&adapter->reset_tq, 1, PI_NET, | |||||
"%s rstq", device_get_nameunit(adapter->pdev)); | |||||
/* Initialize statistics */ | /* Initialize statistics */ | ||||
ena_alloc_counters((counter_u64_t *)&adapter->dev_stats, | ena_alloc_counters((counter_u64_t *)&adapter->dev_stats, | ||||
sizeof(struct ena_stats_dev)); | sizeof(struct ena_stats_dev)); | ||||
ena_update_stats_counters(adapter); | ena_update_stats_counters(adapter); | ||||
ena_sysctl_add_nodes(adapter); | ena_sysctl_add_nodes(adapter); | ||||
/* Tell the stack that the interface is not active */ | /* Tell the stack that the interface is not active */ | ||||
if_setdrvflagbits(adapter->ifp, IFF_DRV_OACTIVE, IFF_DRV_RUNNING); | if_setdrvflagbits(adapter->ifp, IFF_DRV_OACTIVE, IFF_DRV_RUNNING); | ||||
/* Initialize reset task queue */ | |||||
TASK_INIT(&adapter->reset_task, 0, ena_reset_task, adapter); | |||||
adapter->reset_tq = taskqueue_create("ena_reset_enqueue", | |||||
M_WAITOK | M_ZERO, taskqueue_thread_enqueue, &adapter->reset_tq); | |||||
taskqueue_start_threads(&adapter->reset_tq, 1, PI_NET, | |||||
"%s rstq", device_get_nameunit(adapter->pdev)); | |||||
adapter->running = true; | adapter->running = true; | ||||
return (0); | return (0); | ||||
err_reset_tq: | |||||
ena_free_mgmnt_irq(adapter); | |||||
ena_disable_msix(adapter); | |||||
err_ifp_free: | err_ifp_free: | ||||
if_detach(adapter->ifp); | if_detach(adapter->ifp); | ||||
if_free(adapter->ifp); | if_free(adapter->ifp); | ||||
err_com_free: | err_com_free: | ||||
ena_free_all_io_rings_resources(adapter); | ena_free_all_io_rings_resources(adapter); | ||||
err_io_init: | err_io_init: | ||||
ena_free_rx_dma_tag(adapter); | ena_free_rx_dma_tag(adapter); | ||||
dma_rx_err: | dma_rx_err: | ||||
▲ Show 20 Lines • Show All 170 Lines • Show Last 20 Lines |