Sun Microsystems, Inc.
spacerspacer
spacer   www.sun.com docs.sun.com | | |  
spacer
black dot
   
A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z
    
 
Data Structures for Driversgld_mac_info(9S)


NAME

 gld_mac_info - Generic LAN Driver MAC info data structure

SYNOPSIS

 
#include <sys/gld.h>

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 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 Solaris 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_t  gldm_cookie;              /* Device's interrupt */
                                                 /* block cookie */ 

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.
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.

SEE ALSO

 

gld(7D), gld(9F), gld(9E), gld_stats(9S), dlpi(7P), attach(9E), ddi_add_intr(9F).

Writing Device Drivers


SunOS 5.9Go To TopLast Changed 18 Jan 2000

 
      
      
Copyright 2002 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.