Index: bio.c =================================================================== RCS file: /cvs/src/sys/dev/bio.c,v retrieving revision 1.17 diff -u -p -r1.17 bio.c --- bio.c 26 Aug 2015 22:28:57 -0000 1.17 +++ bio.c 8 Nov 2023 13:54:29 -0000 @@ -89,25 +89,16 @@ bioioctl(dev_t dev, u_long cmd, caddr_t return (ENOENT); break; - case BIOCINQ: - case BIOCDISK: - case BIOCVOL: - case BIOCALARM: - case BIOCBLINK: - case BIOCSETSTATE: - case BIOCCREATERAID: - case BIOCDELETERAID: - case BIOCDISCIPLINE: - case BIOCPATROL: + default: bio = (struct bio *)addr; if (!bio_validate(bio->bio_cookie)) return (ENOENT); - return (bio_delegate_ioctl( - (struct bio_mapping *)bio->bio_cookie, cmd, addr)); - default: - return (ENXIO); + error = bio_delegate_ioctl( + (struct bio_mapping *)bio->bio_cookie, cmd, addr); + break; } + return (0); } Index: ic/nvme.c =================================================================== RCS file: /cvs/src/sys/dev/ic/nvme.c,v retrieving revision 1.106 diff -u -p -r1.106 nvme.c --- ic/nvme.c 25 Nov 2022 03:20:09 -0000 1.106 +++ ic/nvme.c 8 Nov 2023 13:54:30 -0000 @@ -16,6 +16,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include "bio.h" + #include #include #include @@ -25,6 +27,7 @@ #include #include #include +#include #include @@ -37,6 +40,12 @@ #include #include +#if NBIO > 0 +#include +#endif + +#include + struct cfdriver nvme_cd = { NULL, "nvme", @@ -93,6 +102,10 @@ void nvme_scsi_free(struct scsi_link *); int nvme_hibernate_io(dev_t, daddr_t, vaddr_t, size_t, int, void *); #endif +#if NBIO > 0 +int nvme_bioctl(struct device *, u_long, caddr_t); +#endif + const struct scsi_adapter nvme_switch = { nvme_scsi_cmd, nvme_minphys, nvme_scsi_probe, nvme_scsi_free, NULL }; @@ -381,6 +394,11 @@ nvme_attach(struct nvme_softc *sc) config_found(&sc->sc_dev, &saa, scsiprint); +#if NBIO > 0 + if (bio_register(&sc->sc_dev, nvme_bioctl) != 0) + printf("%s: unable to register bioctl\n", DEVNAME(sc)); +#endif + return (0); free_q: @@ -1696,3 +1714,24 @@ nvme_hibernate_io(dev_t dev, daddr_t blk } #endif + +#if NBIO > 0 +int +nvme_bioctl(struct device *self, u_long cmd, caddr_t data) +{ + struct nvme_softc *sc = (struct nvme_softc *)self; + int error = 0; + + uprintf("%s: %s[%u]\n", DEVNAME(sc), __func__, __LINE__); + + switch (cmd) { + case NVMEIOCPING: + break; + default: + error = ENOTTY; + break; + } + + return (error); +} +#endif /* NBIO > 0 */ Index: ic/nvmeioc.h =================================================================== RCS file: ic/nvmeioc.h diff -N ic/nvmeioc.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ ic/nvmeioc.h 8 Nov 2023 13:54:30 -0000 @@ -0,0 +1,24 @@ +/* $OpenBSD$ */ + +/* + * Copyright (c) 2023 David Gwynne + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _DEV_IC_NVMEIOC_H_ +#define _DEV_IC_NVMEIOC_H_ + +#define NVMEIOCPING _IOW('n', 0, struct bio) + +#endif /* _DEV_IC_NVMEIOC_H_ */