FreeBSD manual

download PDF document: iflib_device_attach.9.pdf

IFLIBDI(9) FreeBSD Kernel Developer's Manual IFLIBDI(9)
NAME iflibdi - Device Independent Configuration Functions
SYNOPSIS #include <ifdi_if.h>
Device Independent Functions int iflib_device_attach(device_t dev);
int iflib_device_detach(device_t dev);
int iflib_device_suspend(device_t dev);
int iflib_device_resume(device_t dev);
int iflib_device_register(device_t dev, void *softc, if_shared_ctx_t sctx, if_ctx_t *ctxp);
int iflib_device_deregister(if_ctx_t ctx);
int iflib_irq_alloc(if_ctx_t ctx, if_irq_t irq_info, int rid, driver_filter_t filter, void *filter_arg, driver_intr_t handler, void *arg, char *name);
int iflib_irq_alloc_generic(if_ctx_t ctx, if_irq_t irq, int rid, intr_type_t type, driver_filter_t *filter, void *filter_arg, int qid, char *name);
void iflib_led_create(if_ctx_t ctx);
void iflib_tx_intr_deferred(if_ctx_t ctx, int txqid);
void iflib_rx_intr_deferred(if_ctx_t ctx, int rxqid);
void iflib_link_intr_deferred(if_ctx_t ctx);
void iflib_link_state_change(if_ctx_t ctx, int linkstate);
void iflib_add_int_delay_sysctl(if_ctx_t ctx, const char *, const char *, if_int_delay_info_t, int, int);
Global Variables extern struct if_txrx used to hold packets while the interface is in the process of sending another. The receive queue is used to receive packets that are awaiting processing.
The if_ctx_t Structure The fields of struct if_ctx_t are as follows:
if_softc (void) A pointer to the driver's private state block.
ifc_dev (device_t) The underlying device structure.
ifc_ip (if_t) A link back to the interface structure
ifc_cpus (cpuset_t)
ifc_mutex (struct mtx) Mutex lock used to maintain data integrity
ifc_mtx_name (char *) The name of the mutex
ifc_txqs (iflib_txq_t) Device independent transmit queue maintained internally by iflib
ifc_rxqs (iflib_rxq_t) Device independent receive queue maintained internally by iflib
ifc_qsets (iflib_qset_t) Output queue that contains a single transmit (ifc_txq_t) and receive (ifc_rxq_t) queue
ifc_if_flags (uint32_t) Flags describing the operational parameter of the interface
ifc_in_detach (int)
ifc_link_state (int) Describes the current link state of the Ethernet interface. Its possible values are either active or inactive.
ifc_link_irq (int)
ifc_vlan_attach_event (eventhandler_tag)
ifc_vlan_detach_event (eventhandler_tag)
ifc_pause_frames (int)
ifc_watchdog_events (int)
ifc_mac (uint8_t)
ifc_msix_mem (struct resource *)
ifc_legacy_irq (struct if_irq)
ifc_media (struct ifmedia)
ifc_txrx (struct if_txrx)
FUNCTIONS The above named functions are found exclusively in iflib. They are independent of the underlying hardware type or configuration.
Device Independent Functions iflib_device_attach() Function initiates a device registration with the iflib framework. It calls the iflib_register function, which is responsible for allocating and initializing the if_ctx_t structure.
iflib_device_detach() Shutdown and detach the device. Unregister vlan events, drain any dependent tasks, and release irq, pci, and msix memory.
iflib_device_suspend() Suspend a device by calling the device dependent suspend function and bus_generic_suspend.
iflib_device_resume() Resume a device by calling the device dependent resume function, the iflib_init_locked function, and bus_generic_resume.
iflib_device_register() Register a device with the iflib framework. Allocate and initialize the if_ctx_t structure. Setup and initialize the MSI or MSI/X interrupt queues if necessary. Allocate memory for queues and qset structure setup.
iflib_irq_alloc() Allocate an interrupt resource for a given rid value with an associated filter and handler function.
iflib_irq_alloc_generic() Performs the same function as iflib_device_irq_alloc along with the additional functionality of adding a taskgroup. The data fields and callback function are determined by the type of interrupt, such as IFLIB_INTR_TX, IFLIB_INTR_RX, and IFLIB_INTR_ADMIN.
iflib_led_create() Calls led_create to initialize the ctx->ifc_led_dev field
iflib_tx_intr_deferred() Calls GROUPTASK_ENQUEUE to enqueue the transfer queues ift_task.
iflib_rx_intr_deferred() Calls GROUPTASK_ENQUEUE to enqueue the receive queues ifr_task.
iflib_link_intr_deferred() Calls GROUPTASK_ENQUEUE to enqueue the link task
iflib_link_state_change() Change the interface link status to either LINK_STATE_UP or LINK_STATE_DOWN as specified by the second argument to the function.
The link is down.
iflib_add_int_delay_sysctl() Modifies settings to user defined values for a given set of variables.
SEE ALSO iflibdd(9), iflibtxrx(9)
AUTHORS This manual page was written by Nicole Graziano
FreeBSD 14.0-RELEASE-p11 May 21, 2019 FreeBSD 14.0-RELEASE-p11