xref: /illumos-gate/usr/src/uts/common/sys/ddi.h (revision b4203d75)
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