xref: /dflybsd-src/share/man/man9/make_autoclone_dev.9 (revision ec90fa667d8bedc919f5b1ab6b2fe66cb55493d7)
12c8ac1b3SSascha Wildner.\"
22c8ac1b3SSascha Wildner.\" Copyright (c) 2009
32c8ac1b3SSascha Wildner.\"	The DragonFly Project.  All rights reserved.
42c8ac1b3SSascha Wildner.\"
52c8ac1b3SSascha Wildner.\" Redistribution and use in source and binary forms, with or without
62c8ac1b3SSascha Wildner.\" modification, are permitted provided that the following conditions
72c8ac1b3SSascha Wildner.\" are met:
82c8ac1b3SSascha Wildner.\"
92c8ac1b3SSascha Wildner.\" 1. Redistributions of source code must retain the above copyright
102c8ac1b3SSascha Wildner.\"    notice, this list of conditions and the following disclaimer.
112c8ac1b3SSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright
122c8ac1b3SSascha Wildner.\"    notice, this list of conditions and the following disclaimer in
132c8ac1b3SSascha Wildner.\"    the documentation and/or other materials provided with the
142c8ac1b3SSascha Wildner.\"    distribution.
152c8ac1b3SSascha Wildner.\" 3. Neither the name of The DragonFly Project nor the names of its
162c8ac1b3SSascha Wildner.\"    contributors may be used to endorse or promote products derived
172c8ac1b3SSascha Wildner.\"    from this software without specific, prior written permission.
182c8ac1b3SSascha Wildner.\"
192c8ac1b3SSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
202c8ac1b3SSascha Wildner.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
212c8ac1b3SSascha Wildner.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
222c8ac1b3SSascha Wildner.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
232c8ac1b3SSascha Wildner.\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
242c8ac1b3SSascha Wildner.\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
252c8ac1b3SSascha Wildner.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
262c8ac1b3SSascha Wildner.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
272c8ac1b3SSascha Wildner.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
282c8ac1b3SSascha Wildner.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
292c8ac1b3SSascha Wildner.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
302c8ac1b3SSascha Wildner.\" SUCH DAMAGE.
312c8ac1b3SSascha Wildner.\"
32*ec90fa66SAaron LI.Dd June 30, 2020
332c8ac1b3SSascha Wildner.Dt MAKE_AUTOCLONE_DEV 9
34fb5b3747SSascha Wildner.Os
352c8ac1b3SSascha Wildner.Sh NAME
362c8ac1b3SSascha Wildner.Nm make_autoclone_dev ,
372c8ac1b3SSascha Wildner.Nm destroy_autoclone_dev ,
382c8ac1b3SSascha Wildner.Nm devfs_clone_bitmap_init ,
392c8ac1b3SSascha Wildner.Nm devfs_clone_bitmap_uninit ,
402c8ac1b3SSascha Wildner.Nm devfs_clone_bitmap_chk ,
412c8ac1b3SSascha Wildner.Nm devfs_clone_bitmap_set ,
422c8ac1b3SSascha Wildner.Nm devfs_clone_bitmap_get ,
432c8ac1b3SSascha Wildner.Nm devfs_clone_bitmap_put ,
442c8ac1b3SSascha Wildner.Nm DEVFS_DECLARE_CLONE_BITMAP ,
450cf7fc2cSSascha Wildner.Nm DEVFS_DEFINE_CLONE_BITMAP ,
462c8ac1b3SSascha Wildner.Nm DEVFS_CLONE_BITMAP
472c8ac1b3SSascha Wildner.Nd device clone functions
482c8ac1b3SSascha Wildner.Sh SYNOPSIS
492c8ac1b3SSascha Wildner.In sys/types.h
502c8ac1b3SSascha Wildner.In sys/conf.h
512c8ac1b3SSascha Wildner.In sys/devfs.h
522c8ac1b3SSascha Wildner.Ft cdev_t
534aff68f4SSascha Wildner.Fn make_autoclone_dev "struct dev_ops *ops" "struct devfs_bitmap *bitmap" "d_clone_t *nhandler" "uid_t uid" "gid_t gid" "int perms" "const char *fmt" "..."
542c8ac1b3SSascha Wildner.Ft void
552c8ac1b3SSascha Wildner.Fn destroy_autoclone_dev "cdev_t dev" "struct devfs_bitmap *bitmap"
562c8ac1b3SSascha Wildner.Ft void
572c8ac1b3SSascha Wildner.Fn devfs_clone_bitmap_init "struct devfs_bitmap *bitmap"
582c8ac1b3SSascha Wildner.Ft void
592c8ac1b3SSascha Wildner.Fn devfs_clone_bitmap_uninit "struct devfs_bitmap *bitmap"
607d807da9SSascha Wildner.Ft int
614aff68f4SSascha Wildner.Fn devfs_clone_bitmap_chk "struct devfs_bitmap *bitmap" "int unit"
62cbaf7dd9SSascha Wildner.Ft int
634aff68f4SSascha Wildner.Fn devfs_clone_bitmap_set "struct devfs_bitmap *bitmap" "int unit"
642c8ac1b3SSascha Wildner.Ft int
654aff68f4SSascha Wildner.Fn devfs_clone_bitmap_get "struct devfs_bitmap *bitmap" "int limit"
662c8ac1b3SSascha Wildner.Ft void
674aff68f4SSascha Wildner.Fn devfs_clone_bitmap_put "struct devfs_bitmap *bitmap" "int unit"
682c8ac1b3SSascha Wildner.Fn DEVFS_DECLARE_CLONE_BITMAP "name"
690cf7fc2cSSascha Wildner.Fn DEVFS_DEFINE_CLONE_BITMAP "name"
702c8ac1b3SSascha Wildner.Fn DEVFS_CLONE_BITMAP "name"
712c8ac1b3SSascha Wildner.Sh DESCRIPTION
722c8ac1b3SSascha Wildner.Fn make_autoclone_dev
732c8ac1b3SSascha Wildnercreates a
742c8ac1b3SSascha Wildner.Vt cdev_t
752c8ac1b3SSascha Wildnerwith the default
762c8ac1b3SSascha Wildner.Fa ops ,
772c8ac1b3SSascha Wildnervisible in the
782c8ac1b3SSascha Wildner.Xr devfs 5
79*ec90fa66SAaron LInamespace, that will invoke the clone handler specified by
80*ec90fa66SAaron LI.Fa nhandler
81*ec90fa66SAaron LIwhen it is opened.
82*ec90fa66SAaron LIIf the
832c8ac1b3SSascha Wildner.Fa bitmap
84*ec90fa66SAaron LIargument is specified, it will be initialized using
852c8ac1b3SSascha Wildner.Fn devfs_clone_bitmap_init .
862c8ac1b3SSascha Wildner.Pp
872c8ac1b3SSascha WildnerThe clone handler must be defined as follows:
88*ec90fa66SAaron LI.Bd -literal -offset indent
892c8ac1b3SSascha Wildnerd_clone_t mydev_clone;
902c8ac1b3SSascha Wildner
912c8ac1b3SSascha Wildnerint
922c8ac1b3SSascha Wildnermydev_clone(struct dev_clone_args *ap)
932c8ac1b3SSascha Wildner{
942c8ac1b3SSascha Wildner};
952c8ac1b3SSascha Wildner.Ed
962c8ac1b3SSascha Wildner.Pp
972c8ac1b3SSascha WildnerWhen called, the handler is passed a pointer to a populated
982c8ac1b3SSascha Wildner.Vt dev_clone_args
992c8ac1b3SSascha Wildnerstructure, which is defined as follows:
100*ec90fa66SAaron LI.Bd -literal -offset indent
1012c8ac1b3SSascha Wildnerstruct dev_clone_args {
1022c8ac1b3SSascha Wildner        struct dev_generic_args a_head;
1032c8ac1b3SSascha Wildner        struct cdev     *a_dev;
1042c8ac1b3SSascha Wildner        const char      *a_name;
1052c8ac1b3SSascha Wildner        size_t           a_namelen;
1062c8ac1b3SSascha Wildner        struct ucred    *a_cred;
1072c8ac1b3SSascha Wildner        int              a_mode;
1082c8ac1b3SSascha Wildner};
1092c8ac1b3SSascha Wildner.Ed
1102c8ac1b3SSascha Wildner.Pp
111*ec90fa66SAaron LIThe
1122c8ac1b3SSascha Wildner.Fa a_head.a_dev
1132c8ac1b3SSascha Wildneris the
1142c8ac1b3SSascha Wildner.Vt cdev_t
1152c8ac1b3SSascha Wildnerof the accessed autoclone device.
116*ec90fa66SAaron LIThe
1172c8ac1b3SSascha Wildner.Fa a_name
1182c8ac1b3SSascha Wildnerand
1192c8ac1b3SSascha Wildner.Fa a_namelen
1202c8ac1b3SSascha Wildnerare the registered clonable base name and its length, as specified to
1212c8ac1b3SSascha Wildner.Fn make_autoclone_dev .
122*ec90fa66SAaron LIThe
1232c8ac1b3SSascha Wildner.Fa a_mode
1242c8ac1b3SSascha Wildnerand
1252c8ac1b3SSascha Wildner.Fa a_cred
126*ec90fa66SAaron LIcontain the mode and credential passed to the
127*ec90fa66SAaron LI.Fn open
128*ec90fa66SAaron LIof the autoclone device.
1292c8ac1b3SSascha Wildner.Pp
130*ec90fa66SAaron LIThe clone handler must set
1312c8ac1b3SSascha Wildner.Fa a_dev
1322c8ac1b3SSascha Wildnerto a new
133*ec90fa66SAaron LI.Vt cdev_t
134*ec90fa66SAaron LIthat is returned by a call to
1352c8ac1b3SSascha Wildner.Fn make_only_dev .
136*ec90fa66SAaron LIThe new
137*ec90fa66SAaron LI.Vt cdev_t
138*ec90fa66SAaron LIwill be automatically made visible and linked into
1392c8ac1b3SSascha Wildner.Xr devfs 5
140*ec90fa66SAaron LInamespace, as if it was created with
1412c8ac1b3SSascha Wildner.Fn make_dev .
1422c8ac1b3SSascha WildnerThus,
1432c8ac1b3SSascha Wildner.Fn destroy_dev
1442c8ac1b3SSascha Wildnershould be used to destroy the cloned
1452c8ac1b3SSascha Wildner.Vt cdev_t
1462c8ac1b3SSascha Wildneronce it is no longer required,
1472c8ac1b3SSascha Wildnerusually during
1482c8ac1b3SSascha Wildner.Fn close .
1492c8ac1b3SSascha Wildner.Pp
1502c8ac1b3SSascha Wildner.Fn destroy_autoclone_dev
1512c8ac1b3SSascha Wildnerdestroys a
1522c8ac1b3SSascha Wildner.Vt cdev_t
1532c8ac1b3SSascha Wildnercreated by
1542c8ac1b3SSascha Wildner.Fn make_autoclone_dev
1552c8ac1b3SSascha Wildnerunregistering its clone handler and (if non-NULL) also uninitializes its
1562c8ac1b3SSascha Wildner.Fa bitmap
1572c8ac1b3SSascha Wildnerusing
1582c8ac1b3SSascha Wildner.Fn devfs_clone_bitmap_uninit .
1592c8ac1b3SSascha Wildner.Pp
1602c8ac1b3SSascha Wildner.Fn devfs_clone_bitmap_init
1612c8ac1b3SSascha Wildnerinitializes the given clone
1622c8ac1b3SSascha Wildner.Fa bitmap
1632c8ac1b3SSascha Wildnerso it is ready to use.
1642c8ac1b3SSascha Wildner.Pp
1652c8ac1b3SSascha Wildner.Fn devfs_clone_bitmap_uninit
1662c8ac1b3SSascha Wildnerfrees the memory associated with the specified clone
1672c8ac1b3SSascha Wildner.Fa bitmap
1682c8ac1b3SSascha Wildnerand leaves it unusable.
1692c8ac1b3SSascha Wildner.Pp
1702c8ac1b3SSascha Wildner.Fn devfs_clone_bitmap_chk
1712c8ac1b3SSascha Wildnerchecks if
1722c8ac1b3SSascha Wildner.Fa unit
1732c8ac1b3SSascha Wildneris in use (set) and returns 1 if it is; otherwise 0 is returned.
1742c8ac1b3SSascha Wildner.Pp
1752c8ac1b3SSascha Wildner.Fn devfs_clone_bitmap_set
1762c8ac1b3SSascha Wildnermarks
1772c8ac1b3SSascha Wildner.Fa unit
178d7e26e2bSAaron LIin the
1792c8ac1b3SSascha Wildner.Fa bitmap
1802c8ac1b3SSascha Wildneras used, so further calls to
1812c8ac1b3SSascha Wildner.Fn devfs_clone_bitmap_get
1822c8ac1b3SSascha Wildnercannot retrieve it.
183d7e26e2bSAaron LIThe function returns -1 if the unit is already allocated, otherwise 0.
1842c8ac1b3SSascha WildnerIf one intends to use a clone handler along with preallocated devices, it
1852c8ac1b3SSascha Wildneris recommended to block the unit numbers of the preallocated devices by
1862c8ac1b3SSascha Wildnercalling
1872c8ac1b3SSascha Wildner.Fn devfs_clone_bitmap_set
1882c8ac1b3SSascha Wildneron them.
1892c8ac1b3SSascha Wildner.Pp
1903dde3292SAaron LI.Fn devfs_clone_bitmap_get
1913dde3292SAaron LIwill return the first unused unit number and also mark it as used
1923dde3292SAaron LIin the
1933dde3292SAaron LI.Fa bitmap .
1943dde3292SAaron LIIf the
1953dde3292SAaron LI.Fa limit
1963dde3292SAaron LIargument is greater than 0, the requested unit number cannot be greater
1973dde3292SAaron LIthan the given
1983dde3292SAaron LI.Fa limit .
1993dde3292SAaron LIThe function returns -1 if no more units are available.
2003dde3292SAaron LI.Pp
2015fccb22fSSascha Wildner.Fn devfs_clone_bitmap_put
2022c8ac1b3SSascha Wildnermarks
2032c8ac1b3SSascha Wildner.Fa unit
2042c8ac1b3SSascha Wildnerin the
2052c8ac1b3SSascha Wildner.Fa bitmap
2062c8ac1b3SSascha Wildneras unused so further calls to
2072c8ac1b3SSascha Wildner.Fn devfs_clone_bitmap_get
2082c8ac1b3SSascha Wildnercan retrieve it again.
209b0564672SMatthew DillonIt is recommended that the associated device be destroyed prior to
210b0564672SMatthew Dillonmaking the
211b0564672SMatthew Dillon.Fa unit
212b0564672SMatthew Dillonavailable in the bitmap again, to avoid racing against a new clone.
2132c8ac1b3SSascha Wildner.Pp
2142c8ac1b3SSascha WildnerThe
2150cf7fc2cSSascha Wildner.Fn DEVFS_DEFINE_CLONE_BITMAP
2160cf7fc2cSSascha Wildnermacro defines a clone bitmap with the specified
2172c8ac1b3SSascha Wildner.Fa name .
2180cf7fc2cSSascha WildnerAs long as the name specified is unique, this macro can be used to define
2192c8ac1b3SSascha Wildnerglobal variables.
2200cf7fc2cSSascha WildnerSimilarly,
2210cf7fc2cSSascha Wildner.Fn DEVFS_DECLARE_CLONE_BITMAP
2220cf7fc2cSSascha Wildnerdeclares a clone bitmap.
2232c8ac1b3SSascha Wildner.Pp
2242c8ac1b3SSascha WildnerThe
2252c8ac1b3SSascha Wildner.Fn DEVFS_CLONE_BITMAP
2262c8ac1b3SSascha Wildneris a macro which expands the specified
2272c8ac1b3SSascha Wildner.Fa name
2282c8ac1b3SSascha Wildnerto the full name of a clone bitmap.
2292c8ac1b3SSascha WildnerIt is used in conjunction with
2300cf7fc2cSSascha Wildner.Fn DEVFS_DEFINE_CLONE_BITMAP
2310cf7fc2cSSascha Wildnerand
2322c8ac1b3SSascha Wildner.Fn DEVFS_DECLARE_CLONE_BITMAP ,
2332c8ac1b3SSascha Wildneras it uses the same name.
234d7e26e2bSAaron LI.Sh SEE ALSO
235d7e26e2bSAaron LI.Xr devfs 5 ,
236d7e26e2bSAaron LI.Xr destroy_dev 9 ,
237d7e26e2bSAaron LI.Xr make_dev 9 ,
238d7e26e2bSAaron LI.Xr make_only_dev 9
2392c8ac1b3SSascha Wildner.Sh HISTORY
2402c8ac1b3SSascha WildnerThe
2412c8ac1b3SSascha Wildner.Xr devfs 5
2422c8ac1b3SSascha Wildnerclone facilities and the associated functions all appeared in
2432c8ac1b3SSascha Wildner.Dx 2.3 .
244831fa461SSascha Wildner.Sh AUTHORS
2452c8ac1b3SSascha Wildner.An Alex Hornung
246