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
    
 
Kernel Functions for Driverscsx_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 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


SunOS 5.9Go To TopLast Changed 19 Jul 1996

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