1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright 2014 Garrett D'Amore <garrett@damore.org> 24 * 25 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 26 * Use is subject to license terms. 27 */ 28 29 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 30 /* All Rights Reserved */ 31 32 33 #ifndef _SYS_DDI_H 34 #define _SYS_DDI_H 35 36 #include <sys/types.h> 37 #include <sys/map.h> 38 #include <sys/buf.h> 39 #include <sys/uio.h> 40 #include <sys/stream.h> 41 42 #ifdef __cplusplus 43 extern "C" { 44 #endif 45 46 /* 47 * ddi.h -- the flag and function definitions needed by DDI-conforming 48 * drivers. This header file contains #undefs to undefine macros that 49 * drivers would otherwise pick up in order that function definitions 50 * may be used. Programmers should place the include of "sys/ddi.h" 51 * after any header files that define the macros #undef'ed or the code 52 * may compile incorrectly. 53 */ 54 55 /* 56 * define min() and max() as macros so that drivers will not pick up the 57 * min() and max() kernel functions since they do signed comparison only. 58 */ 59 #ifdef min 60 #undef min 61 #endif /* min */ 62 #define min(a, b) ((a) < (b) ? (a) : (b)) 63 64 #ifdef max 65 #undef max 66 #endif /* max */ 67 #define max(a, b) ((a) < (b) ? (b) : (a)) 68 69 #define TIME 1 70 #define UPROCP 2 71 #define PPGRP 3 72 #define LBOLT 4 73 #define SYSRINT 5 74 #define SYSXINT 6 75 #define SYSMINT 7 76 #define SYSRAWC 8 77 #define SYSCANC 9 78 #define SYSOUTC 10 79 #define PPID 11 80 #define PSID 12 81 #define UCRED 13 82 83 extern int drv_getparm(uint_t, void *); 84 extern int drv_setparm(uint_t, ulong_t); 85 extern void drv_usecwait(clock_t); 86 extern clock_t drv_hztousec(clock_t); 87 extern clock_t drv_usectohz(clock_t); 88 extern void delay(clock_t); 89 extern void time_to_wait(clock_t *, clock_t); 90 91 /* XXX -- should be changed to major_t */ 92 /* convert external to internal major number */ 93 94 extern int etoimajor(major_t); 95 /* convert internal to extern major number */ 96 extern int itoemajor(major_t, int); 97 extern int drv_priv(struct cred *); 98 99 /* 100 * The following declarations take the place of macros in 101 * sysmacros.h The undefs are for any case where a driver includes 102 * sysmacros.h, even though DDI conforming drivers must not. 103 */ 104 #undef getemajor 105 #undef geteminor 106 #undef getmajor 107 #undef getminor 108 #undef makedevice 109 #undef cmpdev 110 #undef expdev 111 112 113 extern major_t getemajor(dev_t); 114 extern minor_t geteminor(dev_t); 115 extern major_t getmajor(dev_t); 116 extern minor_t getminor(dev_t); 117 extern dev_t makedevice(major_t, minor_t); 118 extern o_dev_t cmpdev(dev_t); 119 extern dev_t expdev(dev_t); 120 121 /* 122 * The following macros from param.h are also being converted to 123 * functions and #undefs must be done here as well since param.h 124 * will be included by most if not every driver 125 */ 126 127 #undef btop 128 #undef btopr 129 #undef ptob 130 131 extern unsigned long btop(unsigned long); 132 extern unsigned long btopr(unsigned long); 133 extern unsigned long ptob(unsigned long); 134 135 136 /* STREAMS drivers and modules must include stream.h to pick up the */ 137 /* needed structure and flag definitions. As was the case with map.h, */ 138 /* macros used by both the kernel and drivers in times past now have */ 139 /* a macro definition for the kernel and a function definition for */ 140 /* drivers. The following #undefs allow drivers to include stream.h */ 141 /* but call the functions rather than macros. */ 142 143 #undef OTHERQ 144 #undef RD 145 #undef WR 146 #undef SAMESTR 147 #undef datamsg 148 149 extern struct queue *OTHERQ(queue_t *); /* stream.h */ 150 extern struct queue *RD(queue_t *); 151 extern struct queue *WR(queue_t *); 152 extern int SAMESTR(queue_t *); 153 extern int datamsg(unsigned char); 154 155 /* declarations of functions for allocating and deallocating the space */ 156 /* for a buffer header (just a header, not the associated buffer) */ 157 158 extern struct buf *getrbuf(int); 159 extern void freerbuf(struct buf *); 160 161 #ifdef _KERNEL 162 /* 163 * SVR4MP replacement for hat_getkpfnum() 164 */ 165 #define NOPAGE (-1) /* value returned for invalid addresses */ 166 167 typedef pfn_t ppid_t; /* a 'physical page identifier' - no math allowed! */ 168 169 extern ppid_t kvtoppid(caddr_t); 170 171 extern int qassociate(queue_t *, int); 172 173 #endif /* _KERNEL */ 174 175 #ifdef __cplusplus 176 } 177 #endif 178 179 #endif /* _SYS_DDI_H */ 180