xref: /xnu-11215/bsd/miscfs/devfs/devfs.h (revision d0c1fef6)
1 /*
2  * Copyright (c) 2000-2002 Apple Computer, Inc. All rights reserved.
3  *
4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5  *
6  * This file contains Original Code and/or Modifications of Original Code
7  * as defined in and that are subject to the Apple Public Source License
8  * Version 2.0 (the 'License'). You may not use this file except in
9  * compliance with the License. The rights granted to you under the License
10  * may not be used to create, or enable the creation or redistribution of,
11  * unlawful or unlicensed copies of an Apple operating system, or to
12  * circumvent, violate, or enable the circumvention or violation of, any
13  * terms of an Apple operating system software license agreement.
14  *
15  * Please obtain a copy of the License at
16  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17  *
18  * The Original Code and all software distributed under the License are
19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23  * Please see the License for the specific language governing rights and
24  * limitations under the License.
25  *
26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27  */
28 /*
29  * Copyright 1997,1998 Julian Elischer.  All rights reserved.
30  * [email protected]
31  *
32  * Redistribution and use in source and binary forms, with or without
33  * modification, are permitted provided that the following conditions are
34  * met:
35  *  1. Redistributions of source code must retain the above copyright
36  *     notice, this list of conditions and the following disclaimer.
37  *  2. Redistributions in binary form must reproduce the above copyright notice,
38  *     this list of conditions and the following disclaimer in the documentation
39  *     and/or other materials provided with the distribution.
40  *
41  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY EXPRESS
42  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
43  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
44  * DISCLAIMED.  IN NO EVENT SHALL THE HOLDER OR CONTRIBUTORS BE LIABLE FOR
45  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
47  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
48  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51  * SUCH DAMAGE.
52  *
53  * miscfs/devfs/devfs.h
54  */
55 
56 #ifndef _MISCFS_DEVFS_DEVFS_H_
57 #define	_MISCFS_DEVFS_DEVFS_H_
58 
59 #include <sys/appleapiopts.h>
60 
61 #define DEVFS_CHAR 	0
62 #define DEVFS_BLOCK 	1
63 
64 /*
65  * Argument to clone callback after dev
66  */
67 #define	DEVFS_CLONE_ALLOC	1	/* Allocate minor number slot */
68 #define	DEVFS_CLONE_FREE	0	/* Free minor number slot */
69 
70 __BEGIN_DECLS
71 
72 /*
73  * Function: devfs_make_node_clone
74  *
75  * Purpose
76  *   Create a device node with the given pathname in the devfs namespace;
77  *   before returning a dev_t value for an open instance, the dev_t has
78  *   it's minor number updated by calling the supplied clone function on
79  *   the supplied dev..
80  *
81  * Parameters:
82  *   dev 	- the dev_t value to associate
83  *   chrblk	- block or character device (DEVFS_CHAR or DEVFS_BLOCK)
84  *   uid, gid	- ownership
85  *   perms	- permissions
86  *   clone	- minor number cloning function
87  *   fmt, ...	- print format string and args to format the path name
88  * Returns:
89  *   A handle to a device node if successful, NULL otherwise.
90  */
91 void * 	devfs_make_node_clone(dev_t dev, int chrblk, uid_t uid, gid_t gid,
92 			     int perms, int (*clone)(dev_t dev, int action),
93 			     const char *fmt, ...);
94 
95 /*
96  * Function: devfs_make_node
97  *
98  * Purpose
99  *   Create a device node with the given pathname in the devfs namespace.
100  *
101  * Parameters:
102  *   dev 	- the dev_t value to associate
103  *   chrblk	- block or character device (DEVFS_CHAR or DEVFS_BLOCK)
104  *   uid, gid	- ownership
105  *   perms	- permissions
106  *   fmt, ...	- print format string and args to format the path name
107  * Returns:
108  *   A handle to a device node if successful, NULL otherwise.
109  */
110 void * 	devfs_make_node(dev_t dev, int chrblk, uid_t uid, gid_t gid,
111 			     int perms, const char *fmt, ...);
112 
113 #ifdef BSD_KERNEL_PRIVATE
114 /*
115  * Function: devfs_make_link
116  *
117  * Purpose:
118  *   Create a link to a previously created device node.
119  *
120  * Returns:
121  *   0 if successful, -1 if failed
122  */
123 int	devfs_make_link(void * handle, char *fmt, ...);
124 #endif /* BSD_KERNEL_PRIVATE */
125 
126 /*
127  * Function: devfs_remove
128  *
129  * Purpose:
130  *   Remove the device node returned by devfs_make_node() along with
131  *   any links created with devfs_make_link().
132  */
133 void	devfs_remove(void * handle);
134 
135 __END_DECLS
136 
137 #ifdef __APPLE_API_PRIVATE
138 /* XXX */
139 #define	UID_ROOT	0
140 #define	UID_BIN		3
141 #define	UID_UUCP	66
142 
143 /* XXX */
144 #define	GID_WHEEL	0
145 #define	GID_KMEM	2
146 #define	GID_TTY		4
147 #define	GID_OPERATOR	5
148 #define	GID_BIN		7
149 #define	GID_GAMES	13
150 #define	GID_DIALER	68
151 #endif /* __APPLE_API_PRIVATE */
152 
153 #endif /* !_MISCFS_DEVFS_DEVFS_H_ */
154