#include <sys/conf.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>
Solaris DDI specific (Solaris DDI).
cb_ops contains all entry points for drivers that support both character and block entry points. All leaf device drivers supporting direct user process access to a device should declare a cb_ops structure.
All drivers which safely allow multiple threads of execution in the driver at the same time must set the D_MP flag in the cb_flag field.
If the driver properly handles 64-bit offsets, it should also set the D_64BIT flag in the cb_flag field. This specifies that the driver will use the uio_loffset field of the uio(9S) structure.
mt-streams(9F) describes other flags that may be set in the cb_flag field.
cb_rev is the cb_ops structure revision number. This field must be set to CB_REV .
Non-STREAMS drivers should set cb_str to NULL.
The following DDI/DKI or DKI-only or DDI-only functions are provided in the character/block driver operations structure.
block/char | Function | Description |
b/c | XXopen | DDI/DKI |
b/c | XXclose | DDI/DKI |
b | XXstrategy | DDI/DKI |
b | XXprint | DDI/DKI |
b | XXdump | DDI(Sun) |
c | XXread | DDI/DKI |
c | XXwrite | DDI/DKI |
c | XXioctl | DDI/DKI |
c | XXdevmap | DDI(Sun) |
c | XXmmap | DKI |
c | XXsegmap | DKI |
c | XXchpoll | DDI/DKI |
c | XXprop_op | DDI(Sun) |
c | XXaread | DDI(Sun) |
c | XXawrite | DDI(Sun) |
int (*cb_open)(dev_t *devp, int flag, int otyp, cred_t *credp); |
int (*cb_close)(dev_t dev, int flag, int otyp, cred_t *credp); |
int (*cb_strategy)(struct buf *bp); |
int (*cb_print)(dev_t dev, char *str); |
int (*cb_dump)(dev_t dev, caddr_t addr, daddr_t blkno, int nblk); |
int (*cb_read)(dev_t dev, struct uio *uiop, cred_t *credp); |
int (*cb_write)(dev_t dev, struct uio *uiop, cred_t *credp); |
int (*cb_ioctl)(dev_t dev, int cmd, int arg, int mode, |
cred_t *credp, int *rvalp); |
int (*cb_devmap)(); |
int (*cb_mmap)(dev_t dev, off_t off, int prot); |
int (*cb_segmap)(dev_t dev, off_t off, struct as *asp, |
caddr_t *addrp, off_t len, unsigned int prot, |
unsigned int maxprot, unsigned int flags, cred_t *credp); |
int (*cb_chpoll)(dev_t dev, short events, int anyyet, |
short *reventsp, struct pollhead **phpp); |
int (*cb_prop_op)(dev_t dev, dev_info_t *dip, |
ddi_prop_op_t prop_op, int mod_flags, |
char *name, caddr_t valuep, int *length); |
int cb_flag; /* driver compatibility flag*/ |
int cb_rev; /* cb_ops version number */ |
int (*cb_aread)(dev_t dev, struct aio_req *aio, cred_t *credp); |
int (*cb_awrite)(dev_t dev, struct aio_req *aio, cred_t *credp); |
The devmap entry point is not defined in this release and should be set to nodev.