| DEVSW(9) | Kernel Developer's Manual | DEVSW(9) |
devsw,
devsw_attach, devsw_detach,
bdevsw_lookup,
cdevsw_lookup,
bdevsw_lookup_major,
cdevsw_lookup_major —
character and block device switch functions
#include
<sys/conf.h>
int
devsw_attach(const char
*devname, const struct bdevsw *bev,
devmajor_t *bmajor, const struct
cdevsw *cdev, devmajor_t *cmajor);
void
devsw_detach(const struct bdevsw
*bdev, const struct cdevsw *cdev);
const struct bdevsw *
bdevsw_lookup(dev_t dev);
const struct cdevsw *
cdevsw_lookup(dev_t dev);
devmajor_t
bdevsw_lookup_major(const struct
bdevsw *bdev);
devmajor_t
cdevsw_lookup_major(const struct
cdevsw *cdev);
If a device driver has character device interfaces accessed from userland, the driver must define a cdevsw structure. If the driver also has block device interfaces, the driver must additionally define a bdevsw structure. These structures are constant, and are defined within the driver(9).
For drivers which are included in the kernel via
config(1), the
cdevsw and bdevsw structures are
automatically linked into the configuration database. For drivers which are
separately loaded, the
devsw_attach()
function creates the necessary linkage and associates the
cdev and optional bdev with the
driver(9). If there is no
block device interface needed, bdev should be set to
NULL and bmajor to
NODEVMAJOR. The devname, major
number, and device type (character or block) must correspond to the device
file which will be opened by user programs. By passing
NODEVMAJOR to the function for the
cmajor or bmajor, the major
number can be automatically generated. It can then be returned to userspace
(for example, using sysctl(8))
for creation of the device node.
The
devsw_detach()
function is used to detach the bdev and
cdev structures.
devsw_detach() should be called before a loaded
device driver is unloaded. The caller must ensure that there are no open
instances of the device, and that the device's d_open
function will fail, before calling
devsw_detach().
The
bdevsw_lookup()
and
cdevsw_lookup()
functions return const struct bdevsw * and
const struct cdevsw * for the given
dev.
The
bdevsw_lookup_major()
and
cdevsw_lookup_major()
functions return devmajor_t for the given
const struct bdevsw * or const struct
cdevsw *.
Upon successful completion, devsw_attach()
returns 0. Otherwise it returns an error value.
In case of failure, bdevsw_lookup() and
cdevsw_lookup() return the
NULL value.
The bdevsw_lookup_major() and
cdevsw_lookup_major() functions return
NODEVMAJOR for an unsuccessful completion.
| February 2, 2023 | NetBSD 11.0 |