csx_CS_DDI_Info(9F)




NAME

     csx_CS_DDI_Info - obtain DDI information


SYNOPSIS

     #include <sys/pccard.h>

     int32_t csx_CS_DDI_Info(cs_ddi_info_t *cdi);


INTERFACE LEVEL

     Solaris DDI Specific (Solaris DDI)


PARAMETERS

     cdi   Pointer to a cs_ddi_info_t structure.


DESCRIPTION

     This function is a Solaris-specific extension that  is  used
     by  clients that need to provide the xx_getinfo driver entry
     point (see getinfo(9E)). It provides a method for clients to
     obtain  DDI  information  based  on  their socket number and
     client driver name.


STRUCTURE MEMBERS

     The structure members of cs_ddi_info_t are:

     uint32_t     Socket;        /* socket number */
     char*        driver_name;   /* unique driver name */
     dev_info_t   *dip;          /* dip */
     int32_t      instance;      /* instance */

     The fields are defined as follows:

     Socket
           This field must be set to the physical  socket  number
           that  the  client is interested in getting information
           about.

     driver_name
           This field must be set to a string containing the name
           of the client driver to get information about.

     If csx_CS_DDI_Info() is used in a client's xx_getinfo  func-
     tion,  then  the  client  will  typically extract the Socket
     value from the *arg argument and it must set the driver_name
     field to the same string used with csx_RegisterClient(9F).

     If  the  driver_name   is   found   on   the   Socket,   the
     csx_CS_DDI_Info() function returns both the dev_info pointer
     and the instance fields for the requested driver instance.


RETURN VALUES

     CS_SUCCESS
           Successful operation.

     CS_BAD_SOCKET
           Client not found on Socket.

     CS_UNSUPPORTED_FUNCTION
           No PCMCIA hardware installed.


CONTEXT

     This function may be called from user or kernel context.


EXAMPLES

     Example 1: : Using csx_CS_DDI_Info

     The following example shows how  a  client  might  call  the
     csx_CS_DDI_Info()  in  the  client's  xx_getinfo function to
     return the dip or the instance number:

     static int
     pcepp_getinfo(dev_info_t *dip, ddi_info_cmd_t cmd, void *arg,
                                                          void **result)
     {
             int                          error = DDI_SUCCESS;
             pcepp_state_t                *pps;
             cs_ddi_info_t                cs_ddi_info;

        switch (cmd) {

             case DDI_INFO_DEVT2DEVINFO:
               cs_ddi_info.Socket = getminor((dev_t)arg) & 0x3f;
               cs_ddi_info.driver_name = pcepp_name;
               if (csx_CS_DDI_Info(&cs_ddi_info) != CS_SUCCESS)
                        return (DDI_FAILURE);
               if (!(pps = ddi_get_soft_state(pcepp_soft_state_p,
                             cs_ddi_info.instance))) {
                         *result = NULL;
               } else {
                         *result = pps->dip;
               }
               break;

             case DDI_INFO_DEVT2INSTANCE:
               cs_ddi_info.Socket = getminor((dev_t)arg) & 0x3f;
               cs_ddi_info.driver_name = pcepp_name;
               if (csx_CS_DDI_Info(&cs_ddi_info) != CS_SUCCESS)
                              return (DDI_FAILURE);
               *result = (void *)cs_ddi_info.instance;
               break;

             default:
               error = DDI_FAILURE;
               break;

        }
             return (error);
     }


SEE ALSO

     getinfo(9E), csx_RegisterClient(9F), ddi_get_instance(9F)

     PC Card 95 Standard, PCMCIA/JEIDA


Man(1) output converted with man2html