CSX_CS_DDI_INFO(9F)     Kernel Functions for Drivers     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
       illumos 
DDI Specific (illumos 
DDI)PARAMETERS
       cdi               Pointer to a 
cs_ddi_info_t structure.
DESCRIPTION
       This function is an illumos-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 function, 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                                July 19, 1996            CSX_CS_DDI_INFO(9F)