MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


Kernel Functions for Drivers                            delay(9F)



NAME
     delay - delay execution for  a  specified  number  of  clock
     ticks

SYNOPSIS
     #include 



     void delay(clockt ticks);


INTERFACE LEVEL
     Architecture independent level 1 (DI/DKI).

PARAMETERS
     ticks     The number of clock cycles to delay.


DESCRIPTION
     delay() provides a mechanism for a driver to delay its  exe-
     cution  for  a  given period of time. Since the speed of the
     clock varies among systems, drivers should base  their  time
     values  on  microseconds and use drvusectohz(9F) to convert
     microseconds into clock ticks.


     delay() uses timeout(9F) to schedule an internal function to
     be  called  after  the specified amount of time has elapsed.
     delay() then waits until the  function  is  called.  Because
     timeout()  is subject to priority inversion, drivers waiting
     on behalf of processes with real-time constraints should use
     cvtimedwait(9F) rather than delay().


     delay() does not busy-wait. If busy-waiting is required, use
     drvusecwait(9F).

CONTEXT
     delay() can be called from user and kernel contexts.

EXAMPLES
     Example 1 delay() Example


     Before a driver I/O routine allocates buffers and stores any
     user  data in them, it checks the status of the device (line
     12). If the device needs manual intervention (such as, need-
     ing  to  be  refilled with paper), a message is displayed on
     the system console (line 14). The driver waits  an  allotted
     time (line 17) before repeating the procedure.




SunOS 5.11          Last change: 15 Oct 2001                    1






Kernel Functions for Drivers                            delay(9F)



        1  struct  device  {    /* layout of physical device registers */
        2          int      control; /* physical device control word */
        3          int      status;  /* physical device status word */
        4          short    xmitchar;    /* transmit character to device */
        5  };
        6
        7
              . . .
        9   /* get device registers  */
       10      register struct device *rp = ...
       11
       12      while (rp->status & NOPAPER) {  /* while printer is out of paper */
       13       /* display message and ring bell */
                /* on system console */
       14          cmnerr(CEWARN, "^\007",
       15                            (getminor(dev) & 0xf));
       16          /* wait one minute and try again */
       17          delay(60 * drvusectohz(1000000));
       18      }


SEE ALSO
     biodone(9F),         biowait(9F),          cvtimedwait(9F),
     ddiinpanic(9F),     drvhztousec(9F),    drvusectohz(9F),
     drvusecwait(9F), timeout(9F), untimeout(9F)


     Writing Device Drivers



























SunOS 5.11          Last change: 15 Oct 2001                    2



OpenSolaris man pages main menu

Contact us      |       About us      |       Term of use      |       Copyright © 2000-2010 MyWebUniversity.com ™