From 5ea84cb7b5e33ce5b62afe518e6b5a3be0ae92f0 Mon Sep 17 00:00:00 2001 From: Alex Forencich Date: Tue, 23 Jul 2019 18:43:04 -0700 Subject: [PATCH] Add info ioctl --- modules/mqnic/mqnic_dev.c | 30 ++++++++++++++++++++++ modules/mqnic/mqnic_ioctl.h | 51 +++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 modules/mqnic/mqnic_ioctl.h diff --git a/modules/mqnic/mqnic_dev.c b/modules/mqnic/mqnic_dev.c index 62fce5d85..0cb7e588d 100644 --- a/modules/mqnic/mqnic_dev.c +++ b/modules/mqnic/mqnic_dev.c @@ -32,6 +32,7 @@ either expressed or implied, of The Regents of the University of California. */ #include "mqnic.h" +#include "mqnic_ioctl.h" static int mqnic_open(struct inode *inode, struct file *filp) { @@ -103,9 +104,38 @@ fail_invalid_offset: return -EINVAL; } +static long mqnic_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) +{ + struct mqnic_dev *mqnic = filp->private_data; + + if (_IOC_TYPE(cmd) != MQNIC_IOCTL_TYPE) + return -ENOTTY; + + switch (cmd) { + case MQNIC_IOCTL_INFO: + { + struct mqnic_ioctl_info ctl; + + ctl.fw_id = mqnic->fw_id; + ctl.fw_ver = mqnic->fw_ver; + ctl.board_id = mqnic->board_id; + ctl.board_ver = mqnic->board_ver; + ctl.regs_size = mqnic->hw_regs_size; + + if (copy_to_user((void *)arg, &ctl, sizeof(ctl)) != 0) + return -EFAULT; + + return 0; + } + default: + return -ENOTTY; + } +} + const struct file_operations mqnic_fops = { .owner = THIS_MODULE, .open = mqnic_open, .release = mqnic_release, .mmap = mqnic_mmap, + .unlocked_ioctl = mqnic_ioctl, }; diff --git a/modules/mqnic/mqnic_ioctl.h b/modules/mqnic/mqnic_ioctl.h new file mode 100644 index 000000000..d9828692c --- /dev/null +++ b/modules/mqnic/mqnic_ioctl.h @@ -0,0 +1,51 @@ +/* + +Copyright 2019, The Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS OF THE UNIVERSITY OF CALIFORNIA ''AS +IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF CALIFORNIA OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those +of the authors and should not be interpreted as representing official policies, +either expressed or implied, of The Regents of the University of California. + +*/ + +#ifndef MQNIC_IOCTL_H +#define MQNIC_IOCTL_H + +#include + +#define MQNIC_IOCTL_TYPE 0x88 + +#define MQNIC_IOCTL_INFO _IOR(MQNIC_IOCTL_TYPE, 0xf0, struct mqnic_ioctl_info) + +struct mqnic_ioctl_info { + __u32 fw_id; + __u32 fw_ver; + __u32 board_id; + __u32 board_ver; + size_t regs_size; +}; + +#endif /* MQNIC_IOCTL_H */