MAC_RING_INFO(9S) Data Structures for Drivers MAC_RING_INFO(9S)
NAME
mac_ring_info,
mac_ring_info_t - MAC ring information structure
SYNOPSIS
#include <sys/mac_provider.h>INTERFACE STABILITY
Uncommitted - This interface is still evolving. API and ABI stability
is not guaranteed.
DESCRIPTION
The
mac_ring_info_t structure is used by the MAC framework as part of
the MAC_CAPAB_RINGS capability. For more background on the MAC
framework, please see
mac(9E) and for an introduction to the
MAC_CAPAB_RINGS capability,
mac_capab_rings(9E).
When a device driver declares that it supports the MAC_CAPAB_RINGS
capability and fills out the structure as described in
mac_capab_rings(9E), it indicates that it supports a number of rings
for transmitting and receiving. For each ring that it supports, the
driver's
mr_rget(9E) entry point will be called, during which it will
have to fill out the
mac_ring_info_t structure defined here.
TYPES
The following types define the function pointers in use in the
mac_ring_info_t structure.
typedef int (*mac_ring_start_t)(mac_ring_driver_t, uint64_t);
typedef void (*mac_ring_stop_t)(mac_ring_driver_t);
typedef mblk_t *(*mac_ring_send_t)(mac_ring_driver_t, mblk_t *);
typedef mblk_t *(*mac_ring_poll_t)(mac_ring_driver_t, int);
typedef int (*mac_ring_stat_t)(mac_ring_driver_t, uint_t, uint64_t *);
STRUCTURE MEMBERS
mac_ring_driver_t mri_driver;
mac_ring_start_t mri_start;
mac_ring_stop_t mri_stop;
mac_intr_t mri_intr;
mac_ring_send_t mri_tx;
mac_ring_poll_t mri_poll;
mac_ring_stat_t mri_stat;
The
mri_driver member should be set to a driver-specific value that
represents the data structure that corresponds to the ring. The driver
will receive this value in all of the callback functions that are
defined in this structure and discussed below.
The
mri_start member is a required entry point that is used to start
the ring. While the device driver may not need to do any work with
hardware to start the use of the ring, it must record the ring's
generation number. For more information, see
mri_start(9E).
The
mri_stop member is an optional entry point that will be called when
the ring is being stopped. For more information, see
mri_stop(9E).
The
mri_intr member contains information about the interrupt associated
with the ring. For more information on filling it out, see
mac_intr(9S).
The
mri_tx member should only be set on transmit rings. It must not be
set on receive rings. The
mri_tx member should be set to a function
that will transmit a given frame on the specified ring. For more
information, see
mri_tx(9E).
The
mri_poll member should only be set on receive rings. It must not
be set on transmit rings. The
mri_poll member should be set to a
function which will poll the specified ring. For more information, see
mri_poll(9E).
The
mri_stat member should be set to a function which will retrieve
statistics about the specified ring. For more information, see
mri_stat(9E).
Required Members
All non-function members are required. The
mri_intr member must be a
properly filled out as per
mac_intr(9S).
For transmit rings, the
mri_tx member is required.
For receive rings, the
mri_poll member is required.
SEE ALSO
mac(9E),
mac_capab_rings(9E),
mri_poll(9E),
mri_start(9E),
mri_stat(9E),
mri_stop(9E),
mri_tx(9E),
mac_intr(9S)illumos July 2, 2022 illumos