The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

gld (9)
  • gld (7) ( Solaris man: Макропакеты и соглашения )
  • >> gld (9) ( Solaris man: Ядро )
  •  

    NAME

    gld, gld_mac_alloc, gld_mac_free, gld_register, gld_unregister, gld_recv, gld_sched, gld_intr - Generic LAN Driver service routines
     
    

    SYNOPSIS

    #include <sys/gld.h> 
    
    gld_mac_info_t *gld_mac_alloc(dev_info_t *dip);
    

    void gld_mac_free(gld_mac_info_t *macinfo);
    

    int gld_register(dev_info_t *dip, char *name, gld_mac_info_t *macinfo);
    

    int gld_unregister(gld_mac_info_t *macinfo);
    

    void gld_recv(gld_mac_info_t *macinfo, mblk_t *mp);
    

    void gld_sched(gld_mac_info_t *macinfo);
    

    uint_t gld_intr(caddr_t);
    

    void gld_linkstate(gld_mac_info_t *macinfo, int32_t newstate);
    

     

    INTERFACE LEVEL

    Solaris architecture specific (Solaris DDI).  

    PARAMETERS

    macinfo

    Pointer to a gld_mac_info(9S) structure.

    dip

    Pointer to dev_info structure.

    name

    Device interface name.

    mp

    Pointer to a message block containing a received packet.

    newstate

    Media link state.

     

    DESCRIPTION

    gld_mac_alloc() allocates a new gld_mac_info(9S) structure and returns a pointer to it. Some of the GLD-private elements of the structure may be initialized before gld_mac_alloc() returns; all other elements are initialized to zero. The device driver must initialize some structure members, as described in gld_mac_info(9S), before passing the mac_info pointer to gld_register().

    gld_mac_free() frees a gld_mac_info(9S) structure previously allocated by gld_mac_alloc().

    gld_register() is called from the device driver's attach(9E) routine, and is used to link the GLD-based device driver with the GLD framework. Before calling gld_register() the device driver's attach(9E) routine must first use gld_mac_alloc() to allocate a gld_mac_info(9S) structure, and initialize several of its structure elements. See gld_mac_info(9S) for more information. A successful call to gld_register() performs the following actions:

    o links the device-specific driver with the GLD system;
    o sets the device-specific driver's private data pointer (using ddi_set_driver_private(9F)) to point to the macinfo structure;
    o creates the minor device node.

    The device interface name passed to gld_register() must exactly match the name of the driver module as it exists in the filesystem.

    The driver's attach(9E) routine should return DDI_SUCCESS if gld_register() succeeds. If gld_register() returns DDI_FAILURE, the attach(9E) routine should deallocate any resources it allocated before calling gld_register() and then also return DDI_FAILURE.

    gld_unregister() is called by the device driver's detach(9E) function, and if successful, performs the following tasks:

    o ensures the device's interrupts are stopped, calling the driver's gldm_stop() routine if necessary;
    o removes the minor device node;
    o unlinks the device-specific driver from the GLD system.

    If gld_unregister() returns DDI_SUCCESS, the detach(9E) routine should deallocate any data structures allocated in the attach(9E) routine, using gld_mac_free() to deallocate the macinfo structure, and return DDI_SUCCESS. If gld_unregister() returns DDI_FAILURE, the driver's detach(9E) routine must leave the device operational and return DDI_FAILURE.

    gld_recv() is called by the driver's interrupt handler to pass a received packet upstream. The driver must construct and pass a STREAMS M_DATA message containing the raw packet. gld_recv() determines which STREAMS queues, if any, should receive a copy of the packet, duplicating it if necessary. It then formats a DL_UNITDATA_IND message, if required, and passes the data up all appropriate streams.

    The driver should avoid holding mutex or other locks during the call to gld_recv(). In particular, locks that could be taken by a transmit thread may not be held during a call to gld_recv(): the interrupt thread that calls gld_recv() may in some cases carry out processing that includes sending an outgoing packet, resulting in a call to the driver's gldm_send() routine. If the gldm_send() routine were to try to acquire a mutex being held by the gldm_intr() routine at the time it calls gld_recv(), this could result in a panic due to recursive mutex entry.

    gld_sched() is called by the device driver to reschedule stalled outbound packets. Whenever the driver's gldm_send() routine has returned GLD_NORESOURCES, the driver must later call gld_sched() to inform the GLD framework that it should retry the packets that previously could not be sent. gld_sched() should be called as soon as possible after resources are again available, to ensure that GLD resumes passing outbound packets to the driver's gldm_send() routine in a timely way. (If the driver's gldm_stop() routine is called, the driver is absolved from this obligation until it later again returns GLD_NORESOURCES from its gldm_send() routine; however, extra calls to gld_sched() will not cause incorrect operation.)

    gld_intr() is GLD's main interrupt handler. Normally it is specified as the interrupt routine in the device driver's call to ddi_add_intr(9F). The argument to the interrupt handler (specified as int_handler_arg in the call to ddi_add_intr(9F)) must be a pointer to the gld_mac_info(9S) structure. gld_intr() will, when appropriate, call the device driver's gldm_intr() function, passing that pointer to the gld_mac_info(9S) structure. However, if the driver uses a high-level interrupt, it must provide its own high-level interrupt handler, and trigger a soft interrupt from within that. In this case, gld_intr() may be specified as the soft interrupt handler in the call to ddi_add_softintr().

    gld_linkstate() is called by the device driver to notify GLD of changes in the media link state. The newstate argument should be set to one of the following:

    GLD_LINKSTATE_DOWN

    The media link is unavailable.

    GLD_LINKSTATE_UP

    The media link is unavailable.

    GLD_LINKSTATE_UNKNOWN

    The status of the media link is unknown.

    If a driver calls gld_linkstate(), it must also set the GLD_CAP_LINKSTATE bit in the gldm_capabilties field of the gld_mac_info(9S) structure.  

    RETURN VALUES

    gld_mac_alloc() returns a pointer to a new gld_mac_info(9S) structure.

    gld_register() and gld_unregister() return:

    DDI_SUCCESS

    on success.

    DDI_FAILURE

    on failure.

    gld_intr() returns a value appropriate for an interrupt handler.  

    SEE ALSO

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

    Writing Device Drivers


     

    Index

    NAME
    SYNOPSIS
    INTERFACE LEVEL
    PARAMETERS
    DESCRIPTION
    RETURN VALUES
    SEE ALSO


    Поиск по тексту MAN-ов: 




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру