diff options
author | krw <krw@openbsd.org> | 2020-10-14 23:40:33 +0000 |
---|---|---|
committer | krw <krw@openbsd.org> | 2020-10-14 23:40:33 +0000 |
commit | f31f903f6b76ce68f8d91daeaf607db9eb189363 (patch) | |
tree | fa58de913e363e0856d42a3a3c4efa1eac902e7f /sys/scsi/scsi_base.c | |
parent | delete strange historical FFS_SOFTUPDATES ifdef... (diff) | |
download | wireguard-openbsd-f31f903f6b76ce68f8d91daeaf607db9eb189363.tar.xz wireguard-openbsd-f31f903f6b76ce68f8d91daeaf607db9eb189363.zip |
Introduce scsi_copy_internal_data() to copy 'faked' data from a driver to a
scsi_xfer. Will replace various equivalent functions/hand-rolled chunks, none of
which were setting xs->resid.
Diffstat (limited to 'sys/scsi/scsi_base.c')
-rw-r--r-- | sys/scsi/scsi_base.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/sys/scsi/scsi_base.c b/sys/scsi/scsi_base.c index 645790e961a..dcd9f0e5544 100644 --- a/sys/scsi/scsi_base.c +++ b/sys/scsi/scsi_base.c @@ -1,4 +1,4 @@ -/* $OpenBSD: scsi_base.c,v 1.276 2020/09/22 19:32:53 krw Exp $ */ +/* $OpenBSD: scsi_base.c,v 1.277 2020/10/14 23:40:33 krw Exp $ */ /* $NetBSD: scsi_base.c,v 1.43 1997/04/02 02:29:36 mycroft Exp $ */ /* @@ -1445,6 +1445,26 @@ scsi_xs_exec(struct scsi_xfer *xs) } /* + * Used by device drivers that fake various scsi commands. + */ +void +scsi_copy_internal_data(struct scsi_xfer *xs, void *data, size_t datalen) +{ + size_t copy_cnt; + + SC_DEBUG(xs->sc_link, SDEV_DB3, ("scsi_copy_internal_data\n")); + + if (xs->datalen == 0) { + sc_print_addr(xs->sc_link); + printf("uio internal data copy not supported\n"); + } else { + copy_cnt = MIN(datalen, xs->datalen); + memcpy(xs->data, data, copy_cnt); + xs->resid = xs->datalen - copy_cnt; + } +} + +/* * This routine is called by the adapter when its xs handling is done. */ void |