From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756102AbcIUJqu (ORCPT ); Wed, 21 Sep 2016 05:46:50 -0400 Received: from mail.sigma-star.at ([95.130.255.111]:45996 "EHLO mail.sigma-star.at" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753311AbcIUJqr (ORCPT ); Wed, 21 Sep 2016 05:46:47 -0400 From: Daniel Walter To: linux-mtd@lists.infradead.org Cc: linux-kernel@vger.kernel.org, computersforpeace@gmail.com, dwmw2@infradead.org, boris.brezillon@free-electrons.com, Richard Weinberger Subject: [PATCH v2 06/46] mtd: nandsim: Add basic control file support Date: Wed, 21 Sep 2016 11:46:42 +0200 Message-Id: <074879ccf1f983362e478983f6fbd50b0bfe9059.1474450295.git.dwalter@sigma-star.at> X-Mailer: git-send-email 2.8.3 In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Richard Weinberger /dev/nandsim_ctrl accept ioctl() commands such that userspace can configure nandsim. Signed-off-by: Richard Weinberger --- drivers/mtd/nand/nandsim.c | 66 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 56 insertions(+), 10 deletions(-) diff --git a/drivers/mtd/nand/nandsim.c b/drivers/mtd/nand/nandsim.c index 1eb9344..0abbc88 100644 --- a/drivers/mtd/nand/nandsim.c +++ b/drivers/mtd/nand/nandsim.c @@ -44,6 +44,9 @@ #include #include #include +#include +#include +#include /* Default simulator parameters values */ #if !defined(CONFIG_NANDSIM_FIRST_ID_BYTE) || \ @@ -2226,10 +2229,41 @@ static void ns_nand_read_buf(struct mtd_info *mtd, u_char *buf, int len) return; } -/* - * Module initialization function - */ -static int __init ns_init_module(void) +static long ns_ctrl_ioctl(struct file *file, unsigned int cmd, + unsigned long arg) +{ + if (!capable(CAP_SYS_RESOURCE)) + return -EPERM; + + return -ENOTTY; +} + +#ifdef CONFIG_COMPAT +static long ns_ctrl_compat_ioctl(struct file *file, unsigned int cmd, + unsigned long arg) +{ + unsigned long translated_arg = (unsigned long)compat_ptr(arg); + + return ns_ctrl_ioctl(file, cmd, translated_arg); +} +#else +#define ns_ctrl_compat_ioctl NULL +#endif + +static const struct file_operations nansim_ctrl_fops = { + .owner = THIS_MODULE, + .unlocked_ioctl = ns_ctrl_ioctl, + .compat_ioctl = ns_ctrl_compat_ioctl, + .llseek = no_llseek, +}; + +static struct miscdevice nandsim_ctrl_cdev = { + .minor = MISC_DYNAMIC_MINOR, + .name = "nandsim_ctrl", + .fops = &nansim_ctrl_fops, +}; + +static int __init ns_init_default(void) { struct nand_chip *chip; struct nandsim *nand; @@ -2404,12 +2438,7 @@ error: return retval; } -module_init(ns_init_module); - -/* - * Module clean-up function - */ -static void __exit ns_cleanup_module(void) +static void __exit ns_cleanup_default(void) { struct nand_chip *chip = mtd_to_nand(nsmtd); struct nandsim *ns = nand_get_controller_data(chip); @@ -2424,6 +2453,23 @@ static void __exit ns_cleanup_module(void) free_lists(); } +static int __init ns_init_module(void) +{ + int ret; + + ret = ns_init_default(); + if (ret) + return ret; + + return misc_register(&nandsim_ctrl_cdev); +} +module_init(ns_init_module); + +static void __exit ns_cleanup_module(void) +{ + ns_cleanup_default(); + misc_deregister(&nandsim_ctrl_cdev); +} module_exit(ns_cleanup_module); MODULE_LICENSE ("GPL"); -- 2.8.3