xref: /freebsd/share/man/man9/make_dev.9 (revision f36575b51cb531d9674869c8a4039526d1c384f2)
194b1839dSChris Costello.\" Copyright (c) 1999 Chris Costello
294b1839dSChris Costello.\" All rights reserved.
394b1839dSChris Costello.\"
494b1839dSChris Costello.\" Redistribution and use in source and binary forms, with or without
594b1839dSChris Costello.\" modification, are permitted provided that the following conditions
694b1839dSChris Costello.\" are met:
794b1839dSChris Costello.\" 1. Redistributions of source code must retain the above copyright
894b1839dSChris Costello.\"    notice, this list of conditions and the following disclaimer.
994b1839dSChris Costello.\" 2. Redistributions in binary form must reproduce the above copyright
1094b1839dSChris Costello.\"    notice, this list of conditions and the following disclaimer in the
1194b1839dSChris Costello.\"    documentation and/or other materials provided with the distribution.
1294b1839dSChris Costello.\"
1394b1839dSChris Costello.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1494b1839dSChris Costello.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1594b1839dSChris Costello.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1694b1839dSChris Costello.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1794b1839dSChris Costello.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1894b1839dSChris Costello.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
1994b1839dSChris Costello.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2094b1839dSChris Costello.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2194b1839dSChris Costello.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2294b1839dSChris Costello.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2394b1839dSChris Costello.\" SUCH DAMAGE.
2494b1839dSChris Costello.\"
2594b1839dSChris Costello.\" $FreeBSD$
2694b1839dSChris Costello.\"
27*f36575b5SJaakko Heinonen.Dd October 24, 2010
2894b1839dSChris Costello.Dt MAKE_DEV 9
29aa12cea2SUlrich Spörlein.Os
3094b1839dSChris Costello.Sh NAME
3194b1839dSChris Costello.Nm make_dev ,
32fe754649SKonstantin Belousov.Nm make_dev_cred ,
33fe754649SKonstantin Belousov.Nm make_dev_credf ,
34*f36575b5SJaakko Heinonen.Nm make_dev_p ,
35f14b89faSDima Dorfman.Nm make_dev_alias ,
36f14b89faSDima Dorfman.Nm destroy_dev ,
37fe754649SKonstantin Belousov.Nm destroy_dev_sched ,
38fe754649SKonstantin Belousov.Nm destroy_dev_sched_cb ,
39fe754649SKonstantin Belousov.Nm destroy_dev_drain ,
4044c63b64SDima Dorfman.Nm dev_depends
41e3718e31SRuslan Ermilov.Nd manage
42c97dc39fSChristian Brueffer.Vt cdev Ns 's
43e3718e31SRuslan Ermilovand DEVFS registration for devices
4494b1839dSChris Costello.Sh SYNOPSIS
45212c98aaSBruce Evans.In sys/param.h
4632eef9aeSRuslan Ermilov.In sys/conf.h
47097fcfebSWarner Losh.Ft struct cdev *
48edde8745SEd Schouten.Fn make_dev "struct cdevsw *cdevsw" "int unit" "uid_t uid" "gid_t gid" "int perms" "const char *fmt" ...
49097fcfebSWarner Losh.Ft struct cdev *
50edde8745SEd Schouten.Fn make_dev_cred "struct cdevsw *cdevsw" "int unit" "struct ucred *cr" "uid_t uid" "gid_t gid" "int perms" "const char *fmt" ...
51fe754649SKonstantin Belousov.Ft struct cdev *
52edde8745SEd Schouten.Fn make_dev_credf "int flags" "struct cdevsw *cdevsw" "int unit" "struct ucred *cr" "uid_t uid" "gid_t gid" "int perms" "const char *fmt" ...
53*f36575b5SJaakko Heinonen.Ft int
54*f36575b5SJaakko Heinonen.Fn make_dev_p "int flags" "struct cdev **cdev" "struct cdevsw *devsw" "struct ucred *cr" "uid_t uid" "gid_t gid" "int mode" "const char *fmt" ...
55fe754649SKonstantin Belousov.Ft struct cdev *
5674c9ea0cSJohn-Mark Gurney.Fn make_dev_alias "struct cdev *pdev" "const char *fmt" ...
5794b1839dSChris Costello.Ft void
58097fcfebSWarner Losh.Fn destroy_dev "struct cdev *dev"
59f14b89faSDima Dorfman.Ft void
60fe754649SKonstantin Belousov.Fn destroy_dev_sched "struct cdev *dev"
61fe754649SKonstantin Belousov.Ft void
62fe754649SKonstantin Belousov.Fn destroy_dev_sched_cb "struct cdev *dev" "void (*cb)(void *)" "void *arg"
63fe754649SKonstantin Belousov.Ft void
64fe754649SKonstantin Belousov.Fn destroy_dev_drain "struct cdevsw *csw"
65fe754649SKonstantin Belousov.Ft void
66097fcfebSWarner Losh.Fn dev_depends "struct cdev *pdev" "struct cdev *cdev"
6794b1839dSChris Costello.Sh DESCRIPTION
6894b1839dSChris CostelloThe
69fe754649SKonstantin Belousov.Fn make_dev_credf
7094b1839dSChris Costellofunction creates a
71c97dc39fSChristian Brueffer.Fa cdev
72a0942a60SHiten Pandyastructure for a new device.
73fe754649SKonstantin BelousovIt also notifies
74fe754649SKonstantin Belousov.Xr devfs 5
75fe754649SKonstantin Belousovof the presence of the new device, that causes corresponding nodes
76fe754649SKonstantin Belousovto be created.
77fe754649SKonstantin BelousovBesides this, a
78fe754649SKonstantin Belousov.Xr devctl 4
79fe754649SKonstantin Belousovnotification is sent.
80a0942a60SHiten PandyaThe device will be owned by
8194b1839dSChris Costello.Va uid ,
8294b1839dSChris Costellowith the group ownership as
831dfbd9c2SWarner Losh.Va gid .
841dfbd9c2SWarner LoshThe name is the expansion of
851dfbd9c2SWarner Losh.Va fmt
861dfbd9c2SWarner Loshand following arguments as
871dfbd9c2SWarner Losh.Xr printf 9
881dfbd9c2SWarner Loshwould print it.
891dfbd9c2SWarner LoshThe name determines its path under
901dfbd9c2SWarner Losh.Pa /dev
911dfbd9c2SWarner Loshor other
921dfbd9c2SWarner Losh.Xr devfs 5
931dfbd9c2SWarner Loshmount point and may contain slash
941dfbd9c2SWarner Losh.Ql /
951dfbd9c2SWarner Loshcharacters to denote subdirectories.
9694b1839dSChris CostelloThe permissions of the file specified in
9794b1839dSChris Costello.Va perms
9894b1839dSChris Costelloare defined in
99fe08efe6SRuslan Ermilov.In sys/stat.h :
10094b1839dSChris Costello.Pp
10194b1839dSChris Costello.Bd -literal -offset indent -compact
10294b1839dSChris Costello#define S_IRWXU 0000700    /* RWX mask for owner */
10394b1839dSChris Costello#define S_IRUSR 0000400    /* R for owner */
10494b1839dSChris Costello#define S_IWUSR 0000200    /* W for owner */
10594b1839dSChris Costello#define S_IXUSR 0000100    /* X for owner */
10694b1839dSChris Costello
10794b1839dSChris Costello#define S_IRWXG 0000070    /* RWX mask for group */
10894b1839dSChris Costello#define S_IRGRP 0000040    /* R for group */
10994b1839dSChris Costello#define S_IWGRP 0000020    /* W for group */
11094b1839dSChris Costello#define S_IXGRP 0000010    /* X for group */
11194b1839dSChris Costello
11294b1839dSChris Costello#define S_IRWXO 0000007    /* RWX mask for other */
11394b1839dSChris Costello#define S_IROTH 0000004    /* R for other */
11494b1839dSChris Costello#define S_IWOTH 0000002    /* W for other */
11594b1839dSChris Costello#define S_IXOTH 0000001    /* X for other */
11694b1839dSChris Costello
11794b1839dSChris Costello#define S_ISUID 0004000    /* set user id on execution */
11894b1839dSChris Costello#define S_ISGID 0002000    /* set group id on execution */
11994b1839dSChris Costello#define S_ISVTX 0001000    /* sticky bit */
12094b1839dSChris Costello#ifndef _POSIX_SOURCE
12194b1839dSChris Costello#define S_ISTXT 0001000
12294b1839dSChris Costello#endif
12394b1839dSChris Costello.Ed
12494b1839dSChris Costello.Pp
12594b1839dSChris CostelloThe
126fe754649SKonstantin Belousov.Va cr
127fe754649SKonstantin Belousovargument specifies credentials that will be stored in the
128fe754649SKonstantin Belousov.Fa si_cred
129fe754649SKonstantin Belousovmember of the initialized
130fe754649SKonstantin Belousov.Fa struct cdev .
131fe754649SKonstantin BelousovThe
132fe754649SKonstantin Belousov.Va flags
133fe754649SKonstantin Belousovargument alters the operation of
134*f36575b5SJaakko Heinonen.Fn make_dev_credf
135*f36575b5SJaakko Heinonenor
136*f36575b5SJaakko Heinonen.Fn make_dev_p .
137fe754649SKonstantin BelousovThe following values are currently accepted:
138fe754649SKonstantin Belousov.Pp
13968f7a013SJaakko Heinonen.Bl -tag -width "MAKEDEV_CHECKNAME" -compact -offset indent
14068f7a013SJaakko Heinonen.It MAKEDEV_REF
14168f7a013SJaakko Heinonenreference the created device
14268f7a013SJaakko Heinonen.It MAKEDEV_NOWAIT
143*f36575b5SJaakko Heinonendo not sleep, the call may fail
14468f7a013SJaakko Heinonen.It MAKEDEV_WAITOK
14568f7a013SJaakko Heinonenallow the function to sleep to satisfy malloc
14668f7a013SJaakko Heinonen.It MAKEDEV_ETERNAL
14768f7a013SJaakko Heinonencreated device will be never destroyed
14868f7a013SJaakko Heinonen.It MAKEDEV_CHECKNAME
149*f36575b5SJaakko Heinonenreturn an error if the device name is invalid or already exists
15068f7a013SJaakko Heinonen.El
151fe754649SKonstantin Belousov.Pp
152fe754649SKonstantin BelousovThe
1532b848cb1SKonstantin Belousov.Dv MAKEDEV_WAITOK
1542b848cb1SKonstantin Belousovflag is assumed if none of
1552b848cb1SKonstantin Belousov.Dv MAKEDEV_WAITOK ,
1562b848cb1SKonstantin Belousov.Dv MAKEDEV_NOWAIT
1572b848cb1SKonstantin Belousovis specified.
1582b848cb1SKonstantin Belousov.Pp
1592b848cb1SKonstantin BelousovThe
160fe754649SKonstantin Belousov.Xr dev_clone 9
161fe754649SKonstantin Belousovevent handler shall specify
162fe754649SKonstantin Belousov.Dv MAKEDEV_REF
163fe754649SKonstantin Belousovflag when creating a device in response to lookup, to avoid race where
164fe754649SKonstantin Belousovthe device created is destroyed immediately after
165fe754649SKonstantin Belousov.Xr devfs_lookup 9
166fe754649SKonstantin Belousovdrops his reference to cdev.
167fe754649SKonstantin Belousov.Pp
168fe754649SKonstantin BelousovThe
1695e9cd1dbSKonstantin Belousov.Dv MAKEDEV_ETERNAL
1705e9cd1dbSKonstantin Belousovflag allows the kernel to not acquire some locks when translating system
1715e9cd1dbSKonstantin Belousovcalls into the cdevsw methods calls.
1725e9cd1dbSKonstantin BelousovIt is responsibility of the driver author to make sure that
1735e9cd1dbSKonstantin Belousov.Fn destroy_dev
1745e9cd1dbSKonstantin Belousovis never called on the returned cdev.
1755e9cd1dbSKonstantin BelousovFor the convenience, use the
1765e9cd1dbSKonstantin Belousov.Dv MAKEDEV_ETERNAL_KLD
1775e9cd1dbSKonstantin Belousovflag for the code that can be compiled into kernel or loaded
1785e9cd1dbSKonstantin Belousov(and unloaded) as loadable module.
1795e9cd1dbSKonstantin Belousov.Pp
18068f7a013SJaakko HeinonenA panic will occur if the MAKEDEV_CHECKNAME flag is not specified
18168f7a013SJaakko Heinonenand the device name is invalid or already exists.
18268f7a013SJaakko Heinonen.Pp
1835e9cd1dbSKonstantin BelousovThe
184fe754649SKonstantin Belousov.Fn make_dev_cred
185fe754649SKonstantin Belousovfunction is equivalent to the call
186fe754649SKonstantin Belousov.Bd -literal -offset indent
187edde8745SEd Schoutenmake_dev_credf(0, cdevsw, unit, cr, uid, gid, perms, fmt, ...);
188e10c1be4SUlrich Spörlein.Ed
189fe754649SKonstantin Belousov.Pp
190fe754649SKonstantin BelousovThe
191fe754649SKonstantin Belousov.Fn make_dev
192fe754649SKonstantin Belousovfunction call is the same as
193fe754649SKonstantin Belousov.Bd -literal -offset indent
194edde8745SEd Schoutenmake_dev_credf(0, cdevsw, unit, NULL, uid, gid, perms, fmt, ...);
195e10c1be4SUlrich Spörlein.Ed
196fe754649SKonstantin Belousov.Pp
197fe754649SKonstantin BelousovThe
198*f36575b5SJaakko Heinonen.Fn make_dev_p
199*f36575b5SJaakko Heinonenfunction is similar to
200*f36575b5SJaakko Heinonen.Fn make_dev_credf
201*f36575b5SJaakko Heinonenbut it may return an error number and takes a pointer to the resulting
202*f36575b5SJaakko Heinonen.Ft *cdev
203*f36575b5SJaakko Heinonenas an argument.
204*f36575b5SJaakko Heinonen.Pp
205*f36575b5SJaakko HeinonenThe
206792b2369SMatt Jacob.Fn make_dev_alias
207792b2369SMatt Jacobfunction takes the returned
208c97dc39fSChristian Brueffer.Ft cdev
209792b2369SMatt Jacobfrom
210792b2369SMatt Jacob.Fn make_dev
211edf0984dSRuslan Ermilovand makes another (aliased) name for this device.
212edf0984dSRuslan ErmilovIt is an error to call
213792b2369SMatt Jacob.Fn make_dev_alias
214792b2369SMatt Jacobprior to calling
215792b2369SMatt Jacob.Fn make_dev .
216792b2369SMatt Jacob.Pp
217792b2369SMatt JacobThe
2182557913dSJohn-Mark Gurney.Fa cdev
2192557913dSJohn-Mark Gurneyreturned by
2202557913dSJohn-Mark Gurney.Fn make_dev
2212557913dSJohn-Mark Gurneyand
2222557913dSJohn-Mark Gurney.Fn make_dev_alias
2232557913dSJohn-Mark Gurneyhas two fields,
2242557913dSJohn-Mark Gurney.Fa si_drv1
2252557913dSJohn-Mark Gurneyand
2262557913dSJohn-Mark Gurney.Fa si_drv2 ,
22777213b87SChristian Bruefferthat are available to store state.
22877213b87SChristian BruefferBoth fields are of type
2292557913dSJohn-Mark Gurney.Ft void * .
2302557913dSJohn-Mark GurneyThese are designed to replace the
231edde8745SEd Schouten.Fa unit
2322557913dSJohn-Mark Gurneyargument to
23366c6ebfeSEd Schouten.Fn make_dev ,
23466c6ebfeSEd Schoutenwhich can be obtained with
23566c6ebfeSEd Schouten.Fn dev2unit .
2362557913dSJohn-Mark Gurney.Pp
2372557913dSJohn-Mark GurneyThe
238bd00dbfaSBruce Evans.Fn destroy_dev
23994b1839dSChris Costellofunction takes the returned
240c97dc39fSChristian Brueffer.Fa cdev
24194b1839dSChris Costellofrom
24294b1839dSChris Costello.Fn make_dev
243edf0984dSRuslan Ermilovand destroys the registration for that device.
244fe754649SKonstantin BelousovThe notification is sent to
245fe754649SKonstantin Belousov.Xr devctl 4
246fe754649SKonstantin Belousovabout the destruction event.
247edf0984dSRuslan ErmilovDo not call
248792b2369SMatt Jacob.Fn destroy_dev
249792b2369SMatt Jacobon devices that were created with
250792b2369SMatt Jacob.Fn make_dev_alias .
251f14b89faSDima Dorfman.Pp
252f14b89faSDima DorfmanThe
25344c63b64SDima Dorfman.Fn dev_depends
254f14b89faSDima Dorfmanfunction establishes a parent-child relationship between two devices.
255f14b89faSDima DorfmanThe net effect is that a
256f14b89faSDima Dorfman.Fn destroy_dev
257f14b89faSDima Dorfmanof the parent device will also result in the destruction of the
258f14b89faSDima Dorfmanchild device(s),
259f14b89faSDima Dorfmanif any exist.
260f14b89faSDima DorfmanA device may simultaneously be a parent and a child,
261b82af3f5SMike Pritchardso it is possible to build a complete hierarchy.
262fe754649SKonstantin Belousov.Pp
263fe754649SKonstantin BelousovThe
264fe754649SKonstantin Belousov.Fn destroy_dev_sched_cb
265fe754649SKonstantin Belousovfunction schedules execution of the
266fe754649SKonstantin Belousov.Fn destroy_dev
267fe754649SKonstantin Belousovfor the specified
268fe754649SKonstantin Belousov.Fa cdev
269fe754649SKonstantin Belousovin the safe context.
270fe754649SKonstantin BelousovAfter
271fe754649SKonstantin Belousov.Fn destroy_dev
272fe754649SKonstantin Belousovis finished, and if the supplied
273fe754649SKonstantin Belousov.Fa cb
274fe754649SKonstantin Belousovis not NULL, the callback
275fe754649SKonstantin Belousov.Fa cb
276fe754649SKonstantin Belousovis called, with argument
277fe754649SKonstantin Belousov.Fa arg .
278fe754649SKonstantin BelousovThe
279fe754649SKonstantin Belousov.Fn destroy_dev_sched
280fe754649SKonstantin Belousovfunction is the same as
281fe754649SKonstantin Belousov.Bd -literal -offset indent
2823035649eSPawel Jakub Dawidekdestroy_dev_sched_cb(cdev, NULL, NULL);
283e10c1be4SUlrich Spörlein.Ed
284fe754649SKonstantin Belousov.Pp
285fe754649SKonstantin BelousovThe
286fe754649SKonstantin Belousov.Fn d_close
287fe754649SKonstantin Belousovdriver method cannot call
288fe754649SKonstantin Belousov.Fn destroy_dev
289fe754649SKonstantin Belousovdirectly. Doing so causes deadlock when
290fe754649SKonstantin Belousov.Fn destroy_dev
291fe754649SKonstantin Belousovwaits for all threads to leave the driver methods.
292fe754649SKonstantin BelousovAlso, because
293fe754649SKonstantin Belousov.Fn destroy_dev
294fe754649SKonstantin Belousovsleeps, no non-sleepable locks may be held over the call.
295fe754649SKonstantin BelousovThe
296fe754649SKonstantin Belousov.Fn destroy_dev_sched
297fe754649SKonstantin Belousovfamily of functions overcome these issues.
298fe754649SKonstantin Belousov.Pp
299fe754649SKonstantin BelousovThe device driver may call the
300fe754649SKonstantin Belousov.Fn destroy_dev_drain
301fe754649SKonstantin Belousovfunction to wait until all devices that have supplied
302fe754649SKonstantin Belousov.Fa csw
303fe754649SKonstantin Belousovas cdevsw, are destroyed. This is useful when driver knows that
304fe754649SKonstantin Belousov.Fn destroy_dev_sched
305fe754649SKonstantin Belousovis called for all instantiated devices, but need to postpone module
306fe754649SKonstantin Belousovunload until
307fe754649SKonstantin Belousov.Fn destroy_dev
308fe754649SKonstantin Belousovis actually finished for all of them.
309*f36575b5SJaakko Heinonen.Sh RETURN VALUES
310*f36575b5SJaakko HeinonenIf successful,
311*f36575b5SJaakko Heinonen.Fn make_dev_p
312*f36575b5SJaakko Heinonenwill return 0, otherwise it will return an error.
313*f36575b5SJaakko HeinonenIf successful,
314*f36575b5SJaakko Heinonen.Fn make_dev_credf
315*f36575b5SJaakko Heinonenwill return a valid
316*f36575b5SJaakko Heinonen.Fa cdev
317*f36575b5SJaakko Heinonenpointer, otherwise it will return
318*f36575b5SJaakko Heinonen.Dv NULL .
319*f36575b5SJaakko Heinonen.Sh ERRORS
320*f36575b5SJaakko HeinonenThe
321*f36575b5SJaakko Heinonen.Fn make_dev_p
322*f36575b5SJaakko Heinonencall will fail and the device will be not registered if:
323*f36575b5SJaakko Heinonen.Bl -tag -width Er
324*f36575b5SJaakko Heinonen.It Bq Er ENOMEM
325*f36575b5SJaakko HeinonenThe
326*f36575b5SJaakko Heinonen.Dv MAKEDEV_NOWAIT
327*f36575b5SJaakko Heinonenflags was specified and a memory allocation request could not be satisfied.
328*f36575b5SJaakko Heinonen.It Bq Er ENAMETOOLONG
329*f36575b5SJaakko HeinonenThe
330*f36575b5SJaakko Heinonen.Dv MAKEDEV_CHECKNAME
331*f36575b5SJaakko Heinonenflags was specified and the provided device name is longer than
332*f36575b5SJaakko Heinonen.Dv SPECNAMELEN .
333*f36575b5SJaakko Heinonen.It Bq Er EINVAL
334*f36575b5SJaakko HeinonenThe
335*f36575b5SJaakko Heinonen.Dv MAKEDEV_CHECKNAME
336*f36575b5SJaakko Heinonenflags was specified and the provided device name is empty, contains a
337*f36575b5SJaakko Heinonen.Qq \&.
338*f36575b5SJaakko Heinonenor
339*f36575b5SJaakko Heinonen.Qq ..
340*f36575b5SJaakko Heinonenpath component or ends with
341*f36575b5SJaakko Heinonen.Ql / .
342*f36575b5SJaakko Heinonen.It Bq Er EEXIST
343*f36575b5SJaakko HeinonenThe
344*f36575b5SJaakko Heinonen.Dv MAKEDEV_CHECKNAME
345*f36575b5SJaakko Heinonenflags was specified and the provided device name already exists.
346*f36575b5SJaakko Heinonen.El
347fe754649SKonstantin Belousov.Pp
348e07f1d5fSHiten Pandya.Sh SEE ALSO
349fe754649SKonstantin Belousov.Xr devctl 4 ,
350fe754649SKonstantin Belousov.Xr destroy_dev_drain 9 ,
351fe754649SKonstantin Belousov.Xr dev_clone 9 ,
352e07f1d5fSHiten Pandya.Xr devfs 5
35394b1839dSChris Costello.Sh HISTORY
35494b1839dSChris CostelloThe
35594b1839dSChris Costello.Fn make_dev
35694b1839dSChris Costelloand
357bd00dbfaSBruce Evans.Fn destroy_dev
35894b1839dSChris Costellofunctions first appeared in
35994b1839dSChris Costello.Fx 4.0 .
360792b2369SMatt JacobThe function
361792b2369SMatt Jacob.Fn make_dev_alias
362792b2369SMatt Jacobfirst appeared in
363792b2369SMatt Jacob.Fx 4.1 .
364f14b89faSDima DorfmanThe function
36544c63b64SDima Dorfman.Fn dev_depends
366f14b89faSDima Dorfmanfirst appeared in
367f14b89faSDima Dorfman.Fx 5.0 .
368fe754649SKonstantin BelousovThe functions
369fe754649SKonstantin Belousov.Fn make_dev_credf ,
370fe754649SKonstantin Belousov.Fn destroy_dev_sched ,
371fe754649SKonstantin Belousov.Fn destroy_dev_sched_cb
372fe754649SKonstantin Belousovfirst appeared in
373fe754649SKonstantin Belousov.Fx 7.0 .
374*f36575b5SJaakko HeinonenThe function
375*f36575b5SJaakko Heinonen.Fn make_dev_p
376*f36575b5SJaakko Heinonenfirst appeared in
377*f36575b5SJaakko Heinonen.Fx 8.2 .
378