Data Structures for Drivers gld_mac_info(9S)
NAME
gld_mac_info - Generic LAN Driver MAC info data structure
SYNOPSIS
#include
INTERFACE LEVEL
Solaris architecture specific (Solaris DDI).DESCRIPTION
The Generic LAN Driver (GLD) Media Access Control (MAC)information (gld_mac_info) structure is the main data inter-
face between the device-specific driver and GLD. It contains
data required by GLD and a pointer to an optional additionaldriver-specific information structure.
The gld_mac_info structure should be allocated using
gld_mac_alloc() and deallocated using gld_mac_free().
Drivers can make no assumptions about the length of this structure, which might be different in different releases of Solaris and/or GLD. Structure members private to GLD, notdocumented here, should not be set or read by the device-
specific driver. STRUCTURE MEMBERScaddr_t gldm_private; /* Driver private data */
int (*gldm_reset)(); /* Reset device */
int (*gldm_start)(); /* Start device */
int (*gldm_stop)(); /* Stop device */
int (*gldm_set_mac_addr)(); /* Set device phys addr */
int (*gldm_set_multicast)(); /* Set/delete */
/* multicast address */int (*gldm_set_promiscuous)();
/* Set/reset promiscuous */ /* mode*/int (*gldm_send)(); /* Transmit routine */
u_int (*gldm_intr)(); /* Interrupt handler */
int (*gldm_get_stats)(); /* Get device statistics */
int (*gldm_ioctl)(); /* Driver-specific ioctls */
char *gldm_ident; /* Driver identity string */
uint32_t gldm_type; /* Device type */
uint32_t gldm_minpkt; /* Minimum packet size */
/* accepted by driver */uint32_t gldm_maxpkt; /* Maximum packet size */
/* accepted by driver */uint32_t gldm_addrlen; /* Physical address */
/* length */int32_t gldm_saplen; /* SAP length for */
/* DL_INFO_ACK */
unsigned char *gldm_broadcast_addr; /* Physical broadcast */
SunOS 5.11 Last change: 7 June 2004 1
Data Structures for Drivers gld_mac_info(9S)
/* addr */unsigned char *gldm_vendor_addr; /* Factory MAC address */
t_uscalar_t gldm_ppa; /* Physical Point of */
/* Attachment (PPA) number */dev_info_t *gldm_devinfo; /* Pointer to device's */
/* dev_info node */
ddi_iblock_cookie_tgldm_cookie; /* Device's interrupt */
/* block cookie */int gldm_margin /* accepted data beyond */
/*gldm_maxpkt */
uint32_t gldm_capabilities; /* Device capabilities */
Below is a description of the members of the gld_mac_info
structure that are visible to the device driver.gldm_private This structure member is private to the
device-specific driver and is not used or
modified by GLD. Conventionally, this is used as a pointer to private data, pointingto a driver-defined and driver-allocated
per-instance data structure.
The following group of structure members must be set by thedriver before calling gld_register(), and should not
thereafter be modified by the driver; gld_register() can use
or cache the values of some of these structure members, sochanges made by the driver after calling gld_register()
might cause unpredicted results.gldm_reset Pointer to driver entry point; see
gld(9E).gldm_start Pointer to driver entry point; see
gld(9E).gldm_stop Pointer to driver entry point; see
gld(9E).gldm_set_mac_addr Pointer to driver entry point; see
gld(9E).gldm_set_multicast Pointer to driver entry point; see
gld(9E).SunOS 5.11 Last change: 7 June 2004 2
Data Structures for Drivers gld_mac_info(9S)
gldm_set_promiscuous Pointer to driver entry point; see
gld(9E).gldm_send Pointer to driver entry point; see
gld(9E).gldm_intr Pointer to driver entry point; see
gld(9E).gldm_get_stats Pointer to driver entry point; see
gld(9E).gldm_ioctl Pointer to driver entry point; can
be NULL; see gld(9E).gldm_ident Pointer to a string containing a
short description of the device. It is used to identify the device in system messages.gldm_type The type of device the driver han-
dles. The values currently supportedby GLD are DL_ETHER (IEEE 802.3 and
Ethernet Bus), DL_TPR (IEEE 802.5
Token Passing Ring), and DL_FDDI
(ISO 9314-2 Fibre Distributed Data
Interface). This structure member must be correctly set for GLD to function properly.Support for the DL_TPR and DL_FDDI
media types is obsolete and may be removed in a future release of Solaris.gldm_minpkt Minimum Service Data Unit size - the
minimum packet size, not including the MAC header, that the device will transmit. This can be zero if thedevice-specific driver can handle
any required padding.gldm_maxpkt Maximum Service Data Unit size - the
maximum size of packet, notSunOS 5.11 Last change: 7 June 2004 3
Data Structures for Drivers gld_mac_info(9S)
including the MAC header, that can be transmitted by the device. For Ethernet, this number is 1500.gldm_addrlen The length in bytes of physical
addresses handled by the device. For Ethernet, Token Ring, and FDDI, the value of this structure member should be 6.gldm_saplen The length in bytes of the Service
Access Point (SAP) address used bythe driver. For GLD-based drivers,
this should always be set to -2, to
indicate that two-byte SAP values
are supported and that the SAP appears after the physical addressin a DLSAP address. See the descrip-
tion under ``Message DL_INFO_ACK''
in the DLPI specification for more details.gldm_broadcast_addr Pointer to an array of bytes of
length gldm_addrlen containing the
broadcast address to be used for transmit. The driver must allocate space to hold the broadcast address, fill it in with the appropriatevalue, and set gldm_broadcast_addr
to point at it. For Ethernet, Token Ring, and FDDI, the broadcastaddress is normally 0xFF-FF-FF-FF-
FF-FF.
gldm_vendor_addr Pointer to an array of bytes of
length gldm_addrlen containing the
vendor-provided network physical
address of the device. The driver must allocate space to hold the address, fill it in with information read from the device, and setgldm_vendor_addr to point at it.
gldm_ppa The Physical Point of Attachment
(PPA) number for this instance of the device. Normally this should be set to the instance number, returnedSunOS 5.11 Last change: 7 June 2004 4
Data Structures for Drivers gld_mac_info(9S)
from ddi_get_instance(9F).
gldm_devinfo Pointer to the dev_info node for
this device.gldm_cookie The interrupt block cookie returned
by ddi_get_iblock_cookie(9F),
ddi_add_intr(9F),
ddi_get_soft_iblock_cookie(9F), or
ddi_add_softintr(9F). This must
correspond to the device's receiveinterrupt, from which gld_recv() is
called.gldm_margin Drivers set this value to the amount
of data in bytes that the device cantransmit beyond gldm_maxpkt. For
example, if an Ethernet device can handle packets whose payload section is no greater than 1522 bytes andthe gldm_maxpkt is set to 1500 (as
is typical for Ethernet), thengldm_margin is set to 22. The
registered gldm_margin value is
reported in acknowledgements of the DLIOCMARGININFO ioctl (see dlpi(7P)).gldm_capabilities Bit-field of device capabilities. If
the device is capable of reporting media link state, theGLD_CAP_LINKSTATE bit should be set.
SEE ALSO
gld(7D), dlpi(7P), attach(9E), gld(9E), ddi_add_intr(9F),
gld(9F), gld_stats(9S)
Writing Device DriversSunOS 5.11 Last change: 7 June 2004 5