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 */