GLD_MAC_INFO(9S)         Data Structures for Drivers        GLD_MAC_INFO(9S)
NAME
       gld_mac_info - Generic LAN Driver MAC info data structure
SYNOPSIS
       #include <sys/gld.h>
INTERFACE LEVEL
       illumos architecture specific (illumos DDI).
DESCRIPTION
       The Generic LAN Driver (GLD) Media Access Control (MAC) information
       (
gld_mac_info) structure is the main data interface between the
       device-specific driver and GLD. It contains data required by GLD and
       a pointer to an optional additional driver-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 illumos and/or GLD. Structure members private
       to GLD, not documented here, should not be set or read by the device-
       specific driver.
STRUCTURE MEMBERS
         caddr_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 */
                                                     /* 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, pointing to a driver-defined and driver-
                       allocated per-instance data structure.
       The following group of structure members must be set by the driver
       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, so changes 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).       
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 handles. The
                               values currently supported by 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 illumos.       
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 the device-specific driver can handle
                               any required padding.       
gldm_maxpkt                               Maximum 
Service Data Unit size -- the maximum
                               size of packet, not 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 by the 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 address in a DLSAP address. See
                               the description 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 appropriate value, and
                               set 
gldm_broadcast_addr to point at it. For
                               Ethernet, Token Ring, and FDDI, the broadcast
                               address 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 set 
gldm_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,
                               returned 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 receive interrupt, from which                               
gld_recv() is called.       
gldm_margin                               Drivers set this value to the amount of data
                               in bytes that the device can transmit beyond                               
gldm_maxpkt. For example, if an Ethernet
                               device can handle packets whose payload
                               section is no greater than 1522 bytes and the                               
gldm_maxpkt is set to 1500 (as is typical for
                               Ethernet), then 
gldm_margin is set to 22. The
                               registered 
gldm_margin value is reported in
                               acknowledgements of the DLIOCMARGININFO ioctl
                               (see 
dlpi(4P)).       
gldm_capabilities                               Bit-field of device capabilities. If the
                               device is capable of reporting media link
                               state, the GLD_CAP_LINKSTATE bit should be
                               set.
SEE ALSO
       gld(4D), 
dlpi(4P), 
attach(9E), 
gld(9E), 
ddi_add_intr(9F), 
gld(9F),       
gld_stats(9S)       Writing Device Drivers                                June 7, 2004                GLD_MAC_INFO(9S)