detach(9e) 맨 페이지 - 윈디하나의 솔라나라

개요

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

detach(9e)

detach(9E)                    Driver Entry Points                   detach(9E)



NAME
       detach - detach or suspend a device

SYNOPSIS
       #include <sys/ddi.h>
       #include <sys/sunddi.h>

       int prefix detach(dev_info_t dip, ddi_detach_cmd_t cmd);

INTERFACE LEVEL
       Solaris DDI specific (Solaris DDI)

PARAMETERS
       dip    A pointer to the device's dev_info structure.


       cmd    Type  of  detach;  the  driver  should return DDI_FAILURE if any
              value other than DDI_DETACH or DDI_SUSPEND is passed to it.


DESCRIPTION
       The detach() function complements the attach(9E) routine.

   DDI_DETACH
       If cmd is set to DDI_DETACH, detach() is used to remove the state asso‐
       ciated  with  a given instance of a device node prior to the removal of
       that instance from the system.


       The detach() function will be called once  for  each  instance  of  the
       device  for  which there has been a successful attach(), once there are
       no longer any opens on the device. An attached instance of a driver can
       be  successfully detached only once. The detach() function should clean
       up  any  per  instance  data  initialized  in   attach(9E)   and   call
       kmem_free(9F)  to  free any heap allocations. For information on how to
       unregister interrupt handlers, see ddi_add_intr(9F). This  should  also
       include putting the underlying device into a quiescent state so that it
       will not generate interrupts.


       Drivers that set up timeout(9F) routines should ensure  that  they  are
       cancelled before returning DDI_SUCCESS from detach().


       If  detach()  determines  a particular instance of the device cannot be
       removed when requested because of some exceptional condition,  detach()
       must  return DDI_FAILURE, which prevents the particular device instance
       from being detached. This also prevents the driver from being unloaded.
       A  driver  instance failing the detach must ensure that no per instance
       data or state is modified or freed that would compromise the system  or
       subsequent driver operation.


       The  system guarantees that the function will only be called for a par‐
       ticular dev_info node after (and not concurrently  with)  a  successful
       attach(9E)  of  that  device.  The system also guarantees that detach()
       will only be called when there are no outstanding open(9E) calls on the
       device.

   DDI_SUSPEND
       The  DDI_SUSPEND   cmd  is  issued when the entire system is being sus‐
       pended and power removed from it or when the system must be made quies‐
       cent.  It  will  be issued only to devices which have a reg property or
       which export a pm-hardware-state property with the value needs-suspend-
       resume.


       If  cmd is set to DDI_SUSPEND, detach() is used to suspend all activity
       of a device before power is (possibly) removed  from  the  device.  The
       steps  associated  with  suspension must include putting the underlying
       device into a quiescent state so that it will not  generate  interrupts
       or modify or access memory. Once quiescence has been obtained, detach()
       can be called with outstanding open(9E)  requests.  It  must  save  the
       hardware  state  of the device to memory and block incoming or existing
       requests until attach() is called with DDI_RESUME.


       If the device is used to store file systems, then after DDI_SUSPEND  is
       issued,  the  device should still honor dump(9E) requests as this entry
       point may be used by suspend-resume  operation  (see  cpr(4))  to  save
       state  file.  It  must  do  this, however, without disturbing the saved
       hardware state of the device.


       If the device driver uses automatic device Power Management  interfaces
       (driver  exports  pm-components(9P)  property),  it  might need to call
       pm_raise_power(9F) if the current power level is lower than required to
       complete the dump(9E) request.


       Before returning successfully from a call to detach() with a command of
       DDI_SUSPEND, the driver must cancel any outstanding timeouts  and  make
       any driver threads quiescent.


       If  DDI_FAILURE is returned for the DDI_SUSPEND  cmd, either the opera‐
       tion to suspend the system or to make it quiescent will be aborted.

RETURN VALUES
       DDI_SUCCESS    For DDI_DETACH, the  state  associated  with  the  given
                      device  was  successfully  removed. For DDI_SUSPEND, the
                      driver was successfully suspended.


       DDI_FAILURE    The operation failed or the request was not  understood.
                      The associated state is unchanged.


CONTEXT
       This function is called from user context only.

ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:


       tab()  box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE TYPEAT‐
       TRIBUTE VALUE _ Interface StabilityCommitted


SEE ALSO
       pm(4D),   cpr(4),   attach(9E),    dump(9E),    open(9E),    power(9E),
       ddi_add_intr(9F),  ddi_map_regs(9F), kmem_free(9F), pm_raise_power(9F),
       timeout(9F), pm(9P), pm-components(9P)


       Writing Device Drivers in Oracle Solaris 11.4



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