[libbsd 13/22] cryptodev: Do not use VFS
Sebastian Huber
sebastian.huber at embedded-brains.de
Fri Jun 24 06:33:41 UTC 2022
Revert commit 6514d561587fd1527fe6a26cb43e6b5742c8c779 in
"freebsd/sys/opencrypto/cryptodev.c". The goal is to use USB, network, PCI,
and NVMe support without the VFS to reduce the memory and runtime overhead
introduced by VFS.
Update #4475.
---
freebsd/sys/opencrypto/cryptodev.c | 70 ++++++++++++++++++++++++++++++
1 file changed, 70 insertions(+)
diff --git a/freebsd/sys/opencrypto/cryptodev.c b/freebsd/sys/opencrypto/cryptodev.c
index 97459559..babff6b3 100644
--- a/freebsd/sys/opencrypto/cryptodev.c
+++ b/freebsd/sys/opencrypto/cryptodev.c
@@ -40,6 +40,9 @@
* Materiel Command, USAF, under agreement number F30602-01-2-0537.
*/
+#ifdef __rtems__
+#include <rtems/bsd/sys/file.h>
+#endif /* __rtems__ */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
@@ -303,6 +306,7 @@ SYSCTL_TIMEVAL_SEC(_kern, OID_AUTO, cryptodev_warn_interval, CTLFLAG_RW,
&warninterval,
"Delay in seconds between warnings of deprecated /dev/crypto algorithms");
+#ifndef __rtems__
static int cryptof_ioctl(struct file *, u_long, void *,
struct ucred *, struct thread *);
static int cryptof_stat(struct file *, struct stat *,
@@ -325,6 +329,9 @@ static struct fileops cryptofops = {
.fo_sendfile = invfo_sendfile,
.fo_fill_kinfo = cryptof_fill_kinfo,
};
+#else /* __rtems__ */
+static const rtems_filesystem_file_handlers_r cryptofops;
+#endif /* __rtems__ */
static struct csession *csefind(struct fcrypt *, u_int);
static bool csedelete(struct fcrypt *, u_int);
@@ -768,6 +775,24 @@ bail:
return (error);
#undef SES2
}
+#ifdef __rtems__
+static int
+rtems_bsd_cryptof_ioctl(rtems_libio_t *iop, ioctl_command_t request,
+ void *buffer)
+{
+ struct thread *td;
+ int error;
+
+ td = rtems_bsd_get_curthread_or_null();
+ if (td != NULL) {
+ error = cryptof_ioctl(iop, request, buffer, NULL, td);
+ } else {
+ error = ENOMEM;
+ }
+
+ return (rtems_bsd_error_to_status_and_errno(error));
+}
+#endif /* __rtems__ */
static int cryptodev_cb(struct cryptop *);
@@ -1358,11 +1383,17 @@ cryptodev_find(struct crypt_find_op *find)
/* ARGSUSED */
static int
+#ifndef __rtems__
cryptof_stat(
struct file *fp,
struct stat *sb,
struct ucred *active_cred,
struct thread *td)
+#else /* __rtems__ */
+rtems_bsd_cryptof_stat(const rtems_filesystem_location_info_t *loc,
+ struct stat *buf
+#endif /* __rtems__ */
+)
{
return (EOPNOTSUPP);
@@ -1386,7 +1417,25 @@ cryptof_close(struct file *fp, struct thread *td)
fp->f_data = NULL;
return 0;
}
+#ifdef __rtems__
+static int
+rtems_bsd_cryptof_close(rtems_libio_t *iop)
+{
+ struct thread *td;
+ int error;
+
+ td = rtems_bsd_get_curthread_or_null();
+ if (td != NULL) {
+ error = cryptof_close(iop, td);
+ } else {
+ error = ENOMEM;
+ }
+ return (rtems_bsd_error_to_status_and_errno(error));
+}
+#endif /* __rtems__ */
+
+#ifndef __rtems__
static int
cryptof_fill_kinfo(struct file *fp, struct kinfo_file *kif, struct filedesc *fdp)
{
@@ -1394,6 +1443,7 @@ cryptof_fill_kinfo(struct file *fp, struct kinfo_file *kif, struct filedesc *fdp
kif->kf_type = KF_TYPE_CRYPTO;
return (0);
}
+#endif /* __rtems__ */
static struct csession *
csefind(struct fcrypt *fcr, u_int ses)
@@ -1573,3 +1623,23 @@ MODULE_VERSION(cryptodev, 1);
DECLARE_MODULE(cryptodev, cryptodev_mod, SI_SUB_PSEUDO, SI_ORDER_ANY);
MODULE_DEPEND(cryptodev, crypto, 1, 1, 1);
MODULE_DEPEND(cryptodev, zlib, 1, 1, 1);
+#ifdef __rtems__
+static const rtems_filesystem_file_handlers_r cryptofops = {
+ .open_h = rtems_filesystem_default_open,
+ .close_h = rtems_bsd_cryptof_close,
+ .read_h = rtems_filesystem_default_read,
+ .write_h = rtems_filesystem_default_write,
+ .ioctl_h = rtems_bsd_cryptof_ioctl,
+ .lseek_h = rtems_filesystem_default_lseek,
+ .fstat_h = rtems_bsd_cryptof_stat,
+ .ftruncate_h = rtems_filesystem_default_ftruncate,
+ .fsync_h = rtems_filesystem_default_fsync_or_fdatasync,
+ .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
+ .fcntl_h = rtems_filesystem_default_fcntl,
+ .poll_h = rtems_filesystem_default_poll,
+ .kqfilter_h = rtems_filesystem_default_kqfilter,
+ .readv_h = rtems_filesystem_default_readv,
+ .writev_h = rtems_filesystem_default_writev,
+ .mmap_h = rtems_filesystem_default_mmap
+};
+#endif /* __rtems__ */
--
2.35.3
More information about the devel
mailing list