summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/opencrypto
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-03-27 14:42:31 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-03-28 07:59:12 +0200
commit8189ea825a2c1a3c7ed8df3d2fc0d1df078a4e31 (patch)
tree283cfd0b2dc6e905fac860ed1cf1762abee7f84b /freebsd/sys/opencrypto
parentCRYPTO(4): Import from FreeBSD (diff)
downloadrtems-libbsd-8189ea825a2c1a3c7ed8df3d2fc0d1df078a4e31.tar.bz2
CRYPTO(4): Port to RTEMS
Diffstat (limited to 'freebsd/sys/opencrypto')
-rw-r--r--freebsd/sys/opencrypto/cryptodev.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/freebsd/sys/opencrypto/cryptodev.c b/freebsd/sys/opencrypto/cryptodev.c
index 06e2e902..20c8c89b 100644
--- a/freebsd/sys/opencrypto/cryptodev.c
+++ b/freebsd/sys/opencrypto/cryptodev.c
@@ -295,6 +295,7 @@ struct fcrypt {
int sesn;
};
+#ifndef __rtems__
static int cryptof_ioctl(struct file *, u_long, void *,
struct ucred *, struct thread *);
static int cryptof_stat(struct file *, struct stat *,
@@ -317,6 +318,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 int csedelete(struct fcrypt *, struct csession *);
@@ -684,6 +688,27 @@ 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) {
+ struct file *fp;
+
+ fp = rtems_bsd_iop_to_fp(iop);
+ error = cryptof_ioctl(fp, request, buffer, NULL, td);
+ } else {
+ error = ENOMEM;
+ }
+
+ return (rtems_bsd_error_to_status_and_errno(error));
+}
+#endif /* __rtems__ */
static int cryptodev_cb(void *);
@@ -1170,11 +1195,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);
@@ -1195,7 +1226,28 @@ 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) {
+ struct file *fp;
+
+ fp = rtems_bsd_iop_to_fp(iop);
+ error = cryptof_close(fp, 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)
{
@@ -1203,6 +1255,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)
@@ -1316,7 +1369,9 @@ cryptoioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread
/* falloc automatically provides an extra reference to 'f'. */
finit(f, FREAD | FWRITE, DTYPE_CRYPTO, fcr, &cryptofops);
*(u_int32_t *)data = fd;
+#ifndef __rtems__
fdrop(f, td);
+#endif /* __rtems__ */
break;
case CRIOFINDDEV:
error = cryptodev_find((struct crypt_find_op *)data);
@@ -1373,3 +1428,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__ */