man Pages(9E): DDI and DKI Driver Entry Points
只搜寻这本书
以 PDF 格式下载本书

NAME

chpoll - poll entry point for a non-STREAMS character driver

SYNOPSIS

#include <sys/types.h>
#include <sys/poll.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>

int prefixchpoll(dev_t dev, short events, int anyyet, short * reventsp, struct pollhead ** phpp);

ARGUMENTS

dev
The device number for the device to be polled.
events
The events that may occur. Valid events are:
POLLIN
Data other than high priority data may be read without
blocking.
POLLOUT
Normal data may be written without blocking.
POLLPRI
High priority data may be received without blocking.
POLLHUP
A device hangup has occurred.
POLLERR
An error has occurred on the device.
POLLRDNORM
Normal data (priority band = 0) may be read without
blocking.
POLLRDBAND
Data from a non-zero priority band may be read
without blocking
POLLWRNORM
The same as POLLOUT.
POLLWRBAND
Priority data (priority band > 0) may be written.
anyyet
A flag that is non-zero if any other file descriptors in the pollfd array have events pending. The poll(2) system call takes a pointer to an array of pollfd structures as one of its arguments. See the poll(2) reference page for more details.
reventsp
A pointer to a bitmask of the returned events satisfied.
phpp
A pointer to a pointer to a pollhead structure.

INTERFACE LEVEL

This entry point is optional.
Architecture independent level 1 (DDI/DKI).

DESCRIPTION

The chpoll entry point routine is used by non-STREAMS character device drivers that wish to support polling. The driver must implement the polling discipline itself. The following rules must be followed when implementing the polling discipline:
  1. Implement the following algorithm when the chpoll entry point is called:

        if (events_are_satisfied_now) {
           * reventsp= mask_of_satisfied_events;
        } else {
           * reventsp= 0;
           if (!anyyet)
              * phpp= &my_local_pollhead_structure;
        }
        return (0);

  1. Allocate an instance of the pollhead structure. This instance may be tied to the per-minor data structure defined by the driver. The pollhead structure should be treated as a ``black box'' by the driver. None of its fields should be referenced. However, the size of this structure is guaranteed to remain the same across releases.

  2. Call the pollwakeup( ) function whenever an event of type events listed above occur. This function should only be called with one event at a time.

RETURN VALUES

chpoll( ) should return 0 for success, or the appropriate error number.

SEE ALSO

poll(2), pollwakeup(9F)
Writing Device Drivers

NOTES

Driver defined locks should not be held across calls to this function.