1 .\" Copyright (c) 2009, Sun Microsystems, Inc., All Rights Reserved 2 .\" Copyright 2018, Joyent, Inc. 3 .\" The contents of this file are subject to the terms of the 4 .\" Common Development and Distribution License (the "License"). 5 .\" You may not use this file except in compliance with the License. 6 .\" 7 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 8 .\" or http://www.opensolaris.org/os/licensing. 9 .\" See the License for the specific language governing permissions 10 .\" and limitations under the License. 11 .\" 12 .\" When distributing Covered Code, include this CDDL HEADER in each 13 .\" file and include the License file at usr/src/OPENSOLARIS.LICENSE. 14 .\" If applicable, add the following below this CDDL HEADER, with the 15 .\" fields enclosed by brackets "[]" replaced with your own identifying 16 .\" information: Portions Copyright [yyyy] [name of copyright owner] 17 .Dd July 9, 2018 18 .Dt CB_OPS 9S 19 .Os 20 .Sh NAME 21 .Nm cb_ops 22 .Nd character/block entry points structure 23 .Sh SYNOPSIS 24 .In sys/conf.h 25 .In sys/ddi.h 26 .In sys/sunddi.h 27 .Sh INTERFACE LEVEL 28 Solaris DDI specific (Solaris DDI) 29 .Sh DESCRIPTION 30 The 31 .Nm 32 structure contains all entry points for drivers that support 33 both character and block entry points. 34 All leaf device drivers that support 35 direct user process access to a device should declare a 36 .Nm 37 structure. 38 .Pp 39 All drivers that safely allow multiple threads of execution in the driver at 40 the same time must set the 41 .Dv D_MP 42 flag in the 43 .Fa cb_flag 44 field. 45 See 46 .Xr open 9E . 47 .Pp 48 If the driver properly handles 64-bit offsets, it should also set the 49 .Dv D_64BIT 50 flag in the 51 .Fa cb_flag 52 field. 53 This specifies that the driver 54 will use the 55 .Fa uio_loffset 56 field of the 57 .Xr uio 9S 58 structure. 59 .Pp 60 If the driver returns 61 .Er EINTR 62 from 63 .Xr open 9E , 64 it should also set the 65 .Dv D_OPEN_RETURNS_EINTR 66 flag in the 67 .Fa cb_flag 68 field. 69 This lets the 70 framework know that it is safe for the driver to return 71 .Er EINTR 72 when waiting, to provide exclusion for a last-reference 73 .Xr close 9E 74 call to complete before calling 75 .Xr open 9E . 76 .Pp 77 The 78 .Xr mt-streams 9F 79 function describes other flags that can be set in the 80 .Fa cb_flag 81 field. 82 .Pp 83 The 84 .Fa cb_rev 85 is the 86 .Vt cb_ops 87 structure revision number. 88 This field must 89 be set to 90 .Dv CB_REV . 91 .Pp 92 .Pf Non- Ns Sy STREAMS 93 drivers should set 94 .Fa cb_str 95 to 96 .Sy NULL . 97 .Pp 98 The following 99 .Sy DDI/DKI 100 or 101 .Sy DKI Ns -only 102 or 103 .Sy DDI Ns -only 104 functions are provided in the character/block driver operations structure. 105 .Bl -column "block/char" "Function" "Description" 106 .It block/char Function Description 107 .It b/c XXopen DDI/DKI 108 .It b/c XXclose DDI/DKI 109 .It b XXstrategy DDI/DKI 110 .It b XXprint DDI/DKI 111 .It b XXdump DDI(Sun) 112 .It c XXread DDI/DKI 113 .It c XXwrite DDI/DKI 114 .It c XXioctl DDI/DKI 115 .It c XXdevmap DDI(Sun) 116 .It c XXmmap DKI 117 .It c XXsegmap DKI 118 .It c XXchpoll DDI/DKI 119 .It c XXprop_op DDI(Sun) 120 .It c XXaread DDI(Sun) 121 .It c XXawrite DDI(Sun) 122 .El 123 .Sh STRUCTURE MEMBERS 124 .Bd -literal -offset 2n 125 int (*cb_open)(dev_t *devp, int flag, int otyp, cred_t *credp); 126 int (*cb_close)(dev_t dev, int flag, int otyp, cred_t *credp); 127 int (*cb_strategy)(struct buf *bp); 128 int (*cb_print)(dev_t dev, char *str); 129 int (*cb_dump)(dev_t dev, caddr_t addr, daddr_t blkno, int nblk); 130 int (*cb_read)(dev_t dev, struct uio *uiop, cred_t *credp); 131 int (*cb_write)(dev_t dev, struct uio *uiop, cred_t *credp); 132 int (*cb_ioctl)(dev_t dev, int cmd, intptr_t arg, int mode, 133 cred_t *credp, int *rvalp); 134 int (*cb_devmap)(dev_t dev, devmap_cookie_t dhp, offset_t off, 135 size_t len, size_t *maplen, uint_t model); 136 int (*cb_mmap)(dev_t dev, off_t off, int prot); 137 int (*cb_segmap)(dev_t dev, off_t off, struct as *asp, 138 caddr_t *addrp, off_t len, unsigned int prot, 139 unsigned int maxprot, unsigned int flags, cred_t *credp); 140 int (*cb_chpoll)(dev_t dev, short events, int anyyet, 141 short *reventsp, struct pollhead **phpp); 142 int (*cb_prop_op)(dev_t dev, dev_info_t *dip, 143 ddi_prop_op_t prop_op, int mod_flags, 144 char *name, caddr_t valuep, int *length); 145 struct streamtab *cb_str; /* streams information */ 146 int cb_flag; 147 int cb_rev; 148 int (*cb_aread)(dev_t dev, struct aio_req *aio, cred_t *credp); 149 int (*cb_awrite)(dev_t dev, struct aio_req *aio, cred_t *credp); 150 .Ed 151 .Sh SEE ALSO 152 .Xr aread 9E , 153 .Xr awrite 9E , 154 .Xr chpoll 9E , 155 .Xr close 9E , 156 .Xr dump 9E , 157 .Xr ioctl 9E , 158 .Xr mmap 9E , 159 .Xr open 9E , 160 .Xr print 9E , 161 .Xr prop_op 9E , 162 .Xr read 9E , 163 .Xr segmap 9E , 164 .Xr strategy 9E , 165 .Xr write 9E , 166 .Xr nochpoll 9F , 167 .Xr nodev 9F , 168 .Xr nulldev 9F , 169 .Xr dev_ops 9S , 170 .Xr qinit 9S 171 .Rs 172 .%T Writing Device Drivers 173 .Re 174 .Rs 175 .%T STREAMS Programming Guide 176 .Re