ddi_devid_register(9f) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

ddi_devid_register(9f)

ddi_devid_compare(9F)          Kernel Functions          ddi_devid_compare(9F)



NAME
       ddi_devid_compare,  ddi_devid_free, ddi_devid_init, ddi_devid_register,
       ddi_devid_sizeof,      ddi_devid_str_decode,      ddi_devid_str_encode,
       ddi_devid_str_free,         ddi_devid_get,        ddi_devid_unregister,
       ddi_devid_valid - kernel interfaces for device ids

SYNOPSIS
       int ddi_devid_compare(ddi_devid_t devid1, ddi_devid_t devid2);


       size_t ddi_devid_sizeof(ddi_devid_t devid);


       int ddi_devid_init(dev_info_t *dip, ushort_t devid_type,
            ushort_t nbytes, void *id, ddi_devid_t *retdevid);


       void ddi_devid_free(ddi_devid_t devid);


       int ddi_devid_register(dev_info_t *dip, ddi_devid_t devid);


       int ddi_devid_str_decode(char *devidstr, ddi_devid_t *retdevid,
            char **retminor_name);


       int ddi_devid_str_encode(ddi_devid_t devid, char *minor_name);


       int ddi_devid_str_free(char *devidstr);


       int ddi_devid_get(dev_info_t *dip, ddi_devid_t *retdevid);


       void ddi_devid_unregister(dev_info_t *dip);


       int ddi_devid_valid(ddi_devid_t devid);

PARAMETERS
       devid

           The device id address.


       devidstr

           The devid and minor_name represented as a string.


       devid1

           The first of  two  device  id  addresses  to  be  compared  calling
           ddi_devid_compare().


       devid2

           The  second  of  two  device  id  addresses  to be compared calling
           ddi_devid_compare().


       dip

           A dev_info pointer, which identifies the device.


       devid_type

           The  following  device  id   types   may   be   accepted   by   the
           ddi_devid_init() function:

           DEVID_SCSI3_WWN      World   Wide   Name   associated  with  SCSI-3
                                devices.


           DEVID_SCSI_SERIAL    Vendor ID and serial number associated with  a
                                SCSI  device.  Note:  This may only be used if
                                known to be  unique;  otherwise  a  fabricated
                                device id must be used.


           DEVID_ENCAP          Device  ID of another device. This is for lay‐
                                ered device driver usage.


           DEVID_FAB            Fabricated device ID.



       minor_name

           The minor name to be encoded.


       nbytes

           The length in bytes of device ID.


       retdevid

           The return address of the device ID.


       retminor_name

           The  return  address  of   a   minor   name.   Free   string   with
           ddi_devid_str_free().


INTERFACE LEVEL
       Solaris DDI specific (Solaris DDI).

DESCRIPTION
       The  following  routines are used to provide unique identifiers, device
       IDs, for devices. Specifically, kernel modules use these interfaces  to
       identify  and locate devices, independent of the device's physical con‐
       nection or its logical device name or number.


       The ddi_devid_compare() function compares two device  IDs  byte-by-byte
       and determines both equality and sort order.


       The  ddi_devid_sizeof()  function returns the number of bytes allocated
       for the passed in device ID (devid).


       The ddi_devid_init() function  allocates  memory  and  initializes  the
       opaque  device ID structure. This function does not store the devid. If
       the device id is not derived from the  device's  firmware,  it  is  the
       driver's responsibility to store the devid on some reliable store. When
       a  devid_type  of  either   DEVID_SCSI3_WWN,    DEVID_SCSI_SERIAL,   or
       DEVID_ENCAP  is  accepted,  an  array  of  bytes (id) must be passed in
       (nbytes).


       When the devid_type  DEVID_FAB is used, the array of bytes (id) must be
       NULL  and  the length (nbytes) must be zero. The fabricated device ids,
       DEVID_FAB will be initialized with the machine's host id  and  a  time‐
       stamp.


       Drivers  must  free  the  memory  allocated by this function, using the
       ddi_devid_free() function.


       The ddi_devid_free()  function  frees  the  memory  allocated  for  the
       returned  devid  by  the  ddi_devid_init() and devid_str_decode() func‐
       tions.


       The ddi_devid_register()  function  registers  the  device  ID  address
       (devid) with the DDI framework, associating it with the dev_info passed
       in (dip). The drivers must register device  IDs  at  attach  time.  See
       attach(9E).


       A  driver  that  calls  ddi_devid_register() should place the following
       line in its driver.conf(5) file. The presence of this property  informs
       the  system  that  this  driver  may register a devid for a device when
       device discovery is necessary.

         ddi-devid-registrant=1;



       The ddi_devid_unregister() function removes the device ID address  from
       the  dev_info passed in (dip). Drivers must use this function to unreg‐
       ister the device ID when devices are being detached. This function does
       not  free  the  space allocated for the device ID. The driver must free
       the space allocated for the device ID, using the ddi_devid_free() func‐
       tion. See detach(9E).


       The  ddi_devid_valid()  function validates the device ID (devid) passed
       in. The driver must use this function to validate any fabricated device
       ID that has been stored on a device.


       The  ddi_devid_get() function returns a pointer to the device ID struc‐
       ture through retdevid if there is already a registered device ID  asso‐
       ciated with the dev_info node. A driver can use this interface to check
       and get the device ID associated with the  dev_info  node.  It  returns
       DDI_FAILURE if no device ID is registered for the node.


       The  ddi_devid_get() function allocates memory for the opaque device ID
       structure and initializes it with the associated device ID and  returns
       the  pointer  to  it. The driver must free the memory allocated by this
       function using the ddi_devid_free() function.


       The ddi_devid_str_encode() function encodes a devid and minor_name into
       a  null-terminated ASCII string, returning a pointer to that string. If
       both a devid and a minor_name are non-null, then a slash (/) is used to
       separate  the  devid  from  the  minor_name  in  the encoded string. If
       minor_name is null, then only the devid is encoded.  If  the  devid  is
       null,  then  the  special  string id0 is returned. Note that you cannot
       compare the returned string against another  string  with  strcmp()  to
       determine  devid equality. The returned string must be freed by calling
       devid_str_free().


       The ddi_devid_str_decode() function takes a string previously  produced
       by  the devid_str_encode(3DEVID) or ddi_devid_str_encode() function and
       decodes the contained device ID and minor_name, allocating and  return‐
       ing  pointers  to  the  extracted parts through the retdevid and retmi‐
       nor_name arguments. If the special devidstr  id0 was specified then the
       returned  device  ID  and  minor  name  will  both  be null. A non-null
       returned devid must be freed by the caller through the ddi_devid_free()
       function.  A  non-null  returned  minor  name  must be freed by calling
       ddi_devid_str_free().


       The ddi_devid_str_free() function is used to free all strings  returned
       by  the ddi_devid functions (the ddi_devid_str_encode() function return
       value and the returned retminor_name argument).

RETURN VALUES
       The ddi_devid_init() function returns the following values:

       DDI_SUCCESS    Success.


       DDI_FAILURE    Out of memory. An invalid devid_type was passed in.



       The ddi_devid_valid() function returns the following values:

       DDI_SUCCESS    Valid device ID.


       DDI_FAILURE    Invalid device ID.



       The ddi_devid_register() function returns the following values:

       DDI_SUCCESS    Success.


       DDI_FAILURE    Failure. The device ID  is  already  registered  or  the
                      device ID is invalid.



       The ddi_devid_valid() function returns the following values:

       DDI_SUCCESS    Valid device ID.


       DDI_FAILURE    Invalid device ID.



       The ddi_devid_get() function returns the following values:


           DDI_SUCCESS    Device ID is present and a pointer to it is returned
                          in retdevid.


           DDI_FAILURE    No device ID is defined for this dev_info node.




       The ddi_devid_compare() function returns the following values:

       −1       The first device ID is less than the second device ID.


       0        The first device ID is equal to the second device ID.


       1        The first device ID is greater than the second device ID.



       The ddi_devid_sizeof() function returns the size of the devid in bytes.
       If  called with a null, then the number of bytes that must be allocated
       and initialized to determine the  size  of  a  complete  device  ID  is
       returned.


       The ddi_devid_str_encode() function returns a value of null to indicate
       failure. Failure can be caused  by  attempting  to  encode  an  invalid
       devid.  If  the  return value is non-null then the caller must free the
       returned string by using the devid_str_free() function.


       The ddi_devid_str_decode() function returns the following values:

       DDI_SUCCESS    Success.


       DDI_FAILURE    Failure; the devidstr string was not valid.


CONTEXT
       These functions can be called from a user or kernel context.

SEE ALSO
       devid_get(3DEVID),    libdevid(3LIB),    driver.conf(5),    attach(9E),
       detach(9E), kmem_free(9F)


       Writing Device Drivers in Oracle Solaris 11.4



Oracle Solaris 11.4               22 Jun 2010            ddi_devid_compare(9F)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3