Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759874AbaJaVtj (ORCPT ); Fri, 31 Oct 2014 17:49:39 -0400 Received: from mailrelay008.isp.belgacom.be ([195.238.6.174]:2951 "EHLO mailrelay008.isp.belgacom.be" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1760156AbaJaVtD (ORCPT ); Fri, 31 Oct 2014 17:49:03 -0400 X-Belgacom-Dynamic: yes X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvkNAKkCVFRXQwLV/2dsb2JhbABcgw6BLLlrBQF0mhoCgRgXAQEBAQF9hAMBBRoNLyMQUTkeGYhFAbw8jmgBAQEHIoY3ilkHhEsFhjGXR4ExhnqGbocvg3k8L4JLAQEB From: Fabian Frederick To: linux-kernel@vger.kernel.org Cc: Jens Axboe , Fabian Frederick Subject: [PATCH 7/8] cdrom: cdrom: export sysctl code Date: Fri, 31 Oct 2014 22:48:03 +0100 Message-Id: <1414792084-7739-8-git-send-email-fabf@skynet.be> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1414792084-7739-1-git-send-email-fabf@skynet.be> References: <1414792084-7739-1-git-send-email-fabf@skynet.be> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org -Move all sysctl operations to cdrom_sysctl -Remove static/add extern in cdrom.h for some variables -Rename debug to cdrom_debug -Fix some checkpatch warnings -Update cdrom makefile accordingly. Signed-off-by: Fabian Frederick --- drivers/cdrom/Makefile | 1 + drivers/cdrom/cdrom.c | 347 ++----------------------------------------- drivers/cdrom/cdrom_sysctl.c | 297 ++++++++++++++++++++++++++++++++++++ include/linux/cdrom.h | 33 ++++ 4 files changed, 344 insertions(+), 334 deletions(-) create mode 100644 drivers/cdrom/cdrom_sysctl.c diff --git a/drivers/cdrom/Makefile b/drivers/cdrom/Makefile index 8ffde4f..53609b0 100644 --- a/drivers/cdrom/Makefile +++ b/drivers/cdrom/Makefile @@ -9,5 +9,6 @@ obj-$(CONFIG_BLK_DEV_IDECD) += cdrom.o obj-$(CONFIG_BLK_DEV_SR) += cdrom.o obj-$(CONFIG_PARIDE_PCD) += cdrom.o obj-$(CONFIG_CDROM_PKTCDVD) += cdrom.o +obj-$(CONFIG_SYSCTL) += cdrom_sysctl.o obj-$(CONFIG_GDROM) += gdrom.o cdrom.o diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c index a1a26d5..2afe89d 100644 --- a/drivers/cdrom/cdrom.c +++ b/drivers/cdrom/cdrom.c @@ -242,11 +242,6 @@ -------------------------------------------------------------------------*/ -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#define REVISION "Revision: 3.20" -#define VERSION "Id: cdrom.c 3.20 2003/12/17" - /* I use an error-log mask to give fine grain control over the type of messages dumped to the system logs. The available masks include: */ #define CD_NOTHING 0x0 @@ -274,7 +269,6 @@ #include #include #include -#include #include #include #include @@ -284,23 +278,23 @@ #include /* used to tell the module to turn on full debugging messages */ -static bool debug; +bool cdrom_debug = false; /* default compatibility mode */ -static bool autoclose = true; -static bool autoeject; -static bool lockdoor = true; +bool autoclose = true; +bool autoeject = false; +bool lockdoor = true; /* will we ever get to use this... sigh. */ -static bool check_media_type; +bool check_media_type = false; /* automatically restart mrw format */ -static bool mrw_format_restart = true; -module_param(debug, bool, 0); +bool mrw_format_restart = true; +module_param(cdrom_debug, bool, 0); module_param(autoclose, bool, 0); module_param(autoeject, bool, 0); module_param(lockdoor, bool, 0); module_param(check_media_type, bool, 0); module_param(mrw_format_restart, bool, 0); -static DEFINE_MUTEX(cdrom_mutex); +DEFINE_MUTEX(cdrom_mutex); static const char * const mrw_format_status[] = { "not mrw", @@ -314,32 +308,24 @@ static const char * const mrw_address_space[] = { "DMA", "GAA" }; #if (ERRLOGMASK != CD_NOTHING) #define cd_dbg(type, fmt, ...) \ do { \ - if ((ERRLOGMASK & type) || debug) \ + if ((ERRLOGMASK & type) || cdrom_debug) \ pr_debug(fmt, ##__VA_ARGS__); \ } while (0) #else #define cd_dbg(type, fmt, ...) \ do { \ - if (0 && (ERRLOGMASK & type) || debug) \ + if (0 && (ERRLOGMASK & type) || cdrom_debug) \ pr_debug(fmt, ##__VA_ARGS__); \ } while (0) #endif -/* The (cdo->capability & ~cdi->mask & CDC_XXX) construct was used in - a lot of places. This macro makes the code more clear. */ -#define CDROM_CAN(type) (cdi->ops->capability & ~cdi->mask & (type)) - /* * Another popular OS uses 7 seconds as the hard timeout for default * commands, so it is a good choice for us as well. */ #define CDROM_DEF_TIMEOUT (7 * HZ) -/* Not-exported routines. */ - -static void cdrom_sysctl_register(void); - -static LIST_HEAD(cdrom_list); +LIST_HEAD(cdrom_list); static int cdrom_dummy_generic_packet(struct cdrom_device_info *cdi, struct packet_command *cgc) @@ -2492,8 +2478,8 @@ static int cdrom_ioctl_debug(struct cdrom_device_info *cdi, if (!capable(CAP_SYS_ADMIN)) return -EACCES; - debug = arg ? 1 : 0; - return debug; + cdrom_debug = arg ? 1 : 0; + return cdrom_debug; } static int cdrom_ioctl_get_capability(struct cdrom_device_info *cdi) @@ -3406,313 +3392,6 @@ int cdrom_ioctl(struct cdrom_device_info *cdi, struct block_device *bdev, } EXPORT_SYMBOL(cdrom_ioctl); -#ifdef CONFIG_SYSCTL - -#define CDROM_STR_SIZE 1000 - -static struct cdrom_sysctl_settings { - char info[CDROM_STR_SIZE]; /* general info */ - int autoclose; /* close tray upon mount, etc */ - int autoeject; /* eject on umount */ - int debug; /* turn on debugging messages */ - int lock; /* lock the door on device open */ - int check; /* check media type */ -} cdrom_sysctl_settings; - -enum cdrom_print_option { - CTL_NAME, - CTL_SPEED, - CTL_SLOTS, - CTL_CAPABILITY -}; - -static int cdrom_print_info(const char *header, int val, char *info, - int *pos, enum cdrom_print_option option) -{ - const int max_size = sizeof(cdrom_sysctl_settings.info); - struct cdrom_device_info *cdi; - int ret; - - ret = scnprintf(info + *pos, max_size - *pos, header); - if (!ret) - return 1; - - *pos += ret; - - list_for_each_entry(cdi, &cdrom_list, list) { - switch (option) { - case CTL_NAME: - ret = scnprintf(info + *pos, max_size - *pos, - "\t%s", cdi->name); - break; - case CTL_SPEED: - ret = scnprintf(info + *pos, max_size - *pos, - "\t%d", cdi->speed); - break; - case CTL_SLOTS: - ret = scnprintf(info + *pos, max_size - *pos, - "\t%d", cdi->capacity); - break; - case CTL_CAPABILITY: - ret = scnprintf(info + *pos, max_size - *pos, - "\t%d", CDROM_CAN(val) != 0); - break; - default: - pr_info("invalid option%d\n", option); - return 1; - } - if (!ret) - return 1; - *pos += ret; - } - - return 0; -} - -static int cdrom_sysctl_info(struct ctl_table *ctl, int write, - void __user *buffer, size_t *lenp, loff_t *ppos) -{ - int pos; - char *info = cdrom_sysctl_settings.info; - const int max_size = sizeof(cdrom_sysctl_settings.info); - - if (!*lenp || (*ppos && !write)) { - *lenp = 0; - return 0; - } - - mutex_lock(&cdrom_mutex); - - pos = sprintf(info, "CD-ROM information, " VERSION "\n"); - - if (cdrom_print_info("\ndrive name:\t", 0, info, &pos, CTL_NAME)) - goto done; - if (cdrom_print_info("\ndrive speed:\t", 0, info, &pos, CTL_SPEED)) - goto done; - if (cdrom_print_info("\ndrive # of slots:", 0, info, &pos, CTL_SLOTS)) - goto done; - if (cdrom_print_info("\nCan close tray:\t", - CDC_CLOSE_TRAY, info, &pos, CTL_CAPABILITY)) - goto done; - if (cdrom_print_info("\nCan open tray:\t", - CDC_OPEN_TRAY, info, &pos, CTL_CAPABILITY)) - goto done; - if (cdrom_print_info("\nCan lock tray:\t", - CDC_LOCK, info, &pos, CTL_CAPABILITY)) - goto done; - if (cdrom_print_info("\nCan change speed:", - CDC_SELECT_SPEED, info, &pos, CTL_CAPABILITY)) - goto done; - if (cdrom_print_info("\nCan select disk:", - CDC_SELECT_DISC, info, &pos, CTL_CAPABILITY)) - goto done; - if (cdrom_print_info("\nCan read multisession:", - CDC_MULTI_SESSION, info, &pos, CTL_CAPABILITY)) - goto done; - if (cdrom_print_info("\nCan read MCN:\t", - CDC_MCN, info, &pos, CTL_CAPABILITY)) - goto done; - if (cdrom_print_info("\nReports media changed:", - CDC_MEDIA_CHANGED, info, &pos, CTL_CAPABILITY)) - goto done; - if (cdrom_print_info("\nCan play audio:\t", - CDC_PLAY_AUDIO, info, &pos, CTL_CAPABILITY)) - goto done; - if (cdrom_print_info("\nCan write CD-R:\t", - CDC_CD_R, info, &pos, CTL_CAPABILITY)) - goto done; - if (cdrom_print_info("\nCan write CD-RW:", - CDC_CD_RW, info, &pos, CTL_CAPABILITY)) - goto done; - if (cdrom_print_info("\nCan read DVD:\t", - CDC_DVD, info, &pos, CTL_CAPABILITY)) - goto done; - if (cdrom_print_info("\nCan write DVD-R:", - CDC_DVD_R, info, &pos, CTL_CAPABILITY)) - goto done; - if (cdrom_print_info("\nCan write DVD-RAM:", - CDC_DVD_RAM, info, &pos, CTL_CAPABILITY)) - goto done; - if (cdrom_print_info("\nCan read MRW:\t", - CDC_MRW, info, &pos, CTL_CAPABILITY)) - goto done; - if (cdrom_print_info("\nCan write MRW:\t", - CDC_MRW_W, info, &pos, CTL_CAPABILITY)) - goto done; - if (cdrom_print_info("\nCan write RAM:\t", - CDC_RAM, info, &pos, CTL_CAPABILITY)) - goto done; - if (!scnprintf(info + pos, max_size - pos, "\n\n")) - goto done; -doit: - mutex_unlock(&cdrom_mutex); - return proc_dostring(ctl, write, buffer, lenp, ppos); -done: - pr_info("info buffer too small\n"); - goto doit; -} - -/* Unfortunately, per device settings are not implemented through - procfs/sysctl yet. When they are, this will naturally disappear. For now - just update all drives. Later this will become the template on which - new registered drives will be based. */ -static void cdrom_update_settings(void) -{ - struct cdrom_device_info *cdi; - - mutex_lock(&cdrom_mutex); - list_for_each_entry(cdi, &cdrom_list, list) { - if (autoclose && CDROM_CAN(CDC_CLOSE_TRAY)) - cdi->options |= CDO_AUTO_CLOSE; - else if (!autoclose) - cdi->options &= ~CDO_AUTO_CLOSE; - if (autoeject && CDROM_CAN(CDC_OPEN_TRAY)) - cdi->options |= CDO_AUTO_EJECT; - else if (!autoeject) - cdi->options &= ~CDO_AUTO_EJECT; - if (lockdoor && CDROM_CAN(CDC_LOCK)) - cdi->options |= CDO_LOCK; - else if (!lockdoor) - cdi->options &= ~CDO_LOCK; - if (check_media_type) - cdi->options |= CDO_CHECK_TYPE; - else - cdi->options &= ~CDO_CHECK_TYPE; - } - mutex_unlock(&cdrom_mutex); -} - -static int cdrom_sysctl_handler(struct ctl_table *ctl, int write, - void __user *buffer, size_t *lenp, loff_t *ppos) -{ - int ret; - - ret = proc_dointvec(ctl, write, buffer, lenp, ppos); - - if (write) { - - /* we only care for 1 or 0. */ - autoclose = !!cdrom_sysctl_settings.autoclose; - autoeject = !!cdrom_sysctl_settings.autoeject; - debug = !!cdrom_sysctl_settings.debug; - lockdoor = !!cdrom_sysctl_settings.lock; - check_media_type = !!cdrom_sysctl_settings.check; - - /* update the option flags according to the changes. we - don't have per device options through sysctl yet, - but we will have and then this will disappear. */ - cdrom_update_settings(); - } - - return ret; -} - -/* Place files in /proc/sys/dev/cdrom */ -static struct ctl_table cdrom_table[] = { - { - .procname = "info", - .data = &cdrom_sysctl_settings.info, - .maxlen = CDROM_STR_SIZE, - .mode = 0444, - .proc_handler = cdrom_sysctl_info, - }, - { - .procname = "autoclose", - .data = &cdrom_sysctl_settings.autoclose, - .maxlen = sizeof(int), - .mode = 0644, - .proc_handler = cdrom_sysctl_handler, - }, - { - .procname = "autoeject", - .data = &cdrom_sysctl_settings.autoeject, - .maxlen = sizeof(int), - .mode = 0644, - .proc_handler = cdrom_sysctl_handler, - }, - { - .procname = "debug", - .data = &cdrom_sysctl_settings.debug, - .maxlen = sizeof(int), - .mode = 0644, - .proc_handler = cdrom_sysctl_handler, - }, - { - .procname = "lock", - .data = &cdrom_sysctl_settings.lock, - .maxlen = sizeof(int), - .mode = 0644, - .proc_handler = cdrom_sysctl_handler, - }, - { - .procname = "check_media", - .data = &cdrom_sysctl_settings.check, - .maxlen = sizeof(int), - .mode = 0644, - .proc_handler = cdrom_sysctl_handler - }, - { } -}; - -static struct ctl_table cdrom_cdrom_table[] = { - { - .procname = "cdrom", - .maxlen = 0, - .mode = 0555, - .child = cdrom_table, - }, - { } -}; - -/* Make sure that /proc/sys/dev is there */ -static struct ctl_table cdrom_root_table[] = { - { - .procname = "dev", - .maxlen = 0, - .mode = 0555, - .child = cdrom_cdrom_table, - }, - { } -}; -static struct ctl_table_header *cdrom_sysctl_header; - -static void cdrom_sysctl_register(void) -{ - static bool initialized; - - if (initialized) - return; - - cdrom_sysctl_header = register_sysctl_table(cdrom_root_table); - - /* set the defaults */ - cdrom_sysctl_settings.autoclose = autoclose; - cdrom_sysctl_settings.autoeject = autoeject; - cdrom_sysctl_settings.debug = debug; - cdrom_sysctl_settings.lock = lockdoor; - cdrom_sysctl_settings.check = check_media_type; - - initialized = true; -} - -static void cdrom_sysctl_unregister(void) -{ - if (cdrom_sysctl_header) - unregister_sysctl_table(cdrom_sysctl_header); -} - -#else /* CONFIG_SYSCTL */ - -static void cdrom_sysctl_register(void) -{ -} - -static void cdrom_sysctl_unregister(void) -{ -} - -#endif /* CONFIG_SYSCTL */ - static int __init cdrom_init(void) { cdrom_sysctl_register(); diff --git a/drivers/cdrom/cdrom_sysctl.c b/drivers/cdrom/cdrom_sysctl.c new file mode 100644 index 0000000..e7cb4dc --- /dev/null +++ b/drivers/cdrom/cdrom_sysctl.c @@ -0,0 +1,297 @@ +#include +#include +#include +#include + +#define CDROM_STR_SIZE 1000 + +static struct cdrom_sysctl_settings { + char info[CDROM_STR_SIZE]; /* general info */ + int autoclose; /* close tray upon mount, etc */ + int autoeject; /* eject on umount */ + int debug; /* turn on debugging messages */ + int lock; /* lock the door on device open */ + int check; /* check media type */ +} cdrom_sysctl_settings; + +enum cdrom_print_option { + CTL_NAME, + CTL_SPEED, + CTL_SLOTS, + CTL_CAPABILITY +}; + +static int cdrom_print_info(const char *header, int val, char *info, + int *pos, enum cdrom_print_option option) +{ + const int max_size = sizeof(cdrom_sysctl_settings.info); + struct cdrom_device_info *cdi; + int ret; + + ret = scnprintf(info + *pos, max_size - *pos, header); + if (!ret) + return 1; + + *pos += ret; + + list_for_each_entry(cdi, &cdrom_list, list) { + switch (option) { + case CTL_NAME: + ret = scnprintf(info + *pos, max_size - *pos, + "\t%s", cdi->name); + break; + case CTL_SPEED: + ret = scnprintf(info + *pos, max_size - *pos, + "\t%d", cdi->speed); + break; + case CTL_SLOTS: + ret = scnprintf(info + *pos, max_size - *pos, + "\t%d", cdi->capacity); + break; + case CTL_CAPABILITY: + ret = scnprintf(info + *pos, max_size - *pos, + "\t%d", CDROM_CAN(val) != 0); + break; + default: + pr_info("invalid option%d\n", option); + return 1; + } + if (!ret) + return 1; + *pos += ret; + } + + return 0; +} + +static int cdrom_sysctl_info(struct ctl_table *ctl, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) +{ + int pos; + char *info = cdrom_sysctl_settings.info; + const int max_size = sizeof(cdrom_sysctl_settings.info); + + if (!*lenp || (*ppos && !write)) { + *lenp = 0; + return 0; + } + + mutex_lock(&cdrom_mutex); + + pos = sprintf(info, "CD-ROM information, " VERSION "\n"); + + if (cdrom_print_info("\ndrive name:\t", 0, info, &pos, CTL_NAME)) + goto done; + if (cdrom_print_info("\ndrive speed:\t", 0, info, &pos, CTL_SPEED)) + goto done; + if (cdrom_print_info("\ndrive # of slots:", 0, info, &pos, CTL_SLOTS)) + goto done; + if (cdrom_print_info("\nCan close tray:\t", + CDC_CLOSE_TRAY, info, &pos, CTL_CAPABILITY)) + goto done; + if (cdrom_print_info("\nCan open tray:\t", + CDC_OPEN_TRAY, info, &pos, CTL_CAPABILITY)) + goto done; + if (cdrom_print_info("\nCan lock tray:\t", + CDC_LOCK, info, &pos, CTL_CAPABILITY)) + goto done; + if (cdrom_print_info("\nCan change speed:", + CDC_SELECT_SPEED, info, &pos, CTL_CAPABILITY)) + goto done; + if (cdrom_print_info("\nCan select disk:", + CDC_SELECT_DISC, info, &pos, CTL_CAPABILITY)) + goto done; + if (cdrom_print_info("\nCan read multisession:", + CDC_MULTI_SESSION, info, &pos, CTL_CAPABILITY)) + goto done; + if (cdrom_print_info("\nCan read MCN:\t", + CDC_MCN, info, &pos, CTL_CAPABILITY)) + goto done; + if (cdrom_print_info("\nReports media changed:", + CDC_MEDIA_CHANGED, info, &pos, CTL_CAPABILITY)) + goto done; + if (cdrom_print_info("\nCan play audio:\t", + CDC_PLAY_AUDIO, info, &pos, CTL_CAPABILITY)) + goto done; + if (cdrom_print_info("\nCan write CD-R:\t", + CDC_CD_R, info, &pos, CTL_CAPABILITY)) + goto done; + if (cdrom_print_info("\nCan write CD-RW:", + CDC_CD_RW, info, &pos, CTL_CAPABILITY)) + goto done; + if (cdrom_print_info("\nCan read DVD:\t", + CDC_DVD, info, &pos, CTL_CAPABILITY)) + goto done; + if (cdrom_print_info("\nCan write DVD-R:", + CDC_DVD_R, info, &pos, CTL_CAPABILITY)) + goto done; + if (cdrom_print_info("\nCan write DVD-RAM:", + CDC_DVD_RAM, info, &pos, CTL_CAPABILITY)) + goto done; + if (cdrom_print_info("\nCan read MRW:\t", + CDC_MRW, info, &pos, CTL_CAPABILITY)) + goto done; + if (cdrom_print_info("\nCan write MRW:\t", + CDC_MRW_W, info, &pos, CTL_CAPABILITY)) + goto done; + if (cdrom_print_info("\nCan write RAM:\t", + CDC_RAM, info, &pos, CTL_CAPABILITY)) + goto done; + if (!scnprintf(info + pos, max_size - pos, "\n\n")) + goto done; +doit: + mutex_unlock(&cdrom_mutex); + return proc_dostring(ctl, write, buffer, lenp, ppos); +done: + pr_info("info buffer too small\n"); + goto doit; +} + +/* Unfortunately, per device settings are not implemented through + procfs/sysctl yet. When they are, this will naturally disappear. For now + just update all drives. Later this will become the template on which + new registered drives will be based. */ +static void cdrom_update_settings(void) +{ + struct cdrom_device_info *cdi; + + mutex_lock(&cdrom_mutex); + list_for_each_entry(cdi, &cdrom_list, list) { + if (autoclose && CDROM_CAN(CDC_CLOSE_TRAY)) + cdi->options |= CDO_AUTO_CLOSE; + else if (!autoclose) + cdi->options &= ~CDO_AUTO_CLOSE; + if (autoeject && CDROM_CAN(CDC_OPEN_TRAY)) + cdi->options |= CDO_AUTO_EJECT; + else if (!autoeject) + cdi->options &= ~CDO_AUTO_EJECT; + if (lockdoor && CDROM_CAN(CDC_LOCK)) + cdi->options |= CDO_LOCK; + else if (!lockdoor) + cdi->options &= ~CDO_LOCK; + if (check_media_type) + cdi->options |= CDO_CHECK_TYPE; + else + cdi->options &= ~CDO_CHECK_TYPE; + } + mutex_unlock(&cdrom_mutex); +} + +static int cdrom_sysctl_handler(struct ctl_table *ctl, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) +{ + int ret; + + ret = proc_dointvec(ctl, write, buffer, lenp, ppos); + + if (write) { + + /* we only care for 1 or 0. */ + autoclose = !!cdrom_sysctl_settings.autoclose; + autoeject = !!cdrom_sysctl_settings.autoeject; + cdrom_debug = !!cdrom_sysctl_settings.debug; + lockdoor = !!cdrom_sysctl_settings.lock; + check_media_type = !!cdrom_sysctl_settings.check; + + /* update the option flags according to the changes. we + don't have per device options through sysctl yet, + but we will have and then this will disappear. */ + cdrom_update_settings(); + } + + return ret; +} + +/* Place files in /proc/sys/dev/cdrom */ +static struct ctl_table cdrom_table[] = { + { + .procname = "info", + .data = &cdrom_sysctl_settings.info, + .maxlen = CDROM_STR_SIZE, + .mode = 0444, + .proc_handler = cdrom_sysctl_info, + }, + { + .procname = "autoclose", + .data = &cdrom_sysctl_settings.autoclose, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = cdrom_sysctl_handler, + }, + { + .procname = "autoeject", + .data = &cdrom_sysctl_settings.autoeject, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = cdrom_sysctl_handler, + }, + { + .procname = "debug", + .data = &cdrom_sysctl_settings.debug, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = cdrom_sysctl_handler, + }, + { + .procname = "lock", + .data = &cdrom_sysctl_settings.lock, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = cdrom_sysctl_handler, + }, + { + .procname = "check_media", + .data = &cdrom_sysctl_settings.check, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = cdrom_sysctl_handler + }, + { } +}; + +static struct ctl_table cdrom_cdrom_table[] = { + { + .procname = "cdrom", + .maxlen = 0, + .mode = 0555, + .child = cdrom_table, + }, + { } +}; + +/* Make sure that /proc/sys/dev is there */ +static struct ctl_table cdrom_root_table[] = { + { + .procname = "dev", + .maxlen = 0, + .mode = 0555, + .child = cdrom_cdrom_table, + }, + { } +}; +static struct ctl_table_header *cdrom_sysctl_header; + +void cdrom_sysctl_register(void) +{ + static bool initialized; + + if (initialized) + return; + + cdrom_sysctl_header = register_sysctl_table(cdrom_root_table); + + /* set the defaults */ + cdrom_sysctl_settings.autoclose = autoclose; + cdrom_sysctl_settings.autoeject = autoeject; + cdrom_sysctl_settings.debug = cdrom_debug; + cdrom_sysctl_settings.lock = lockdoor; + cdrom_sysctl_settings.check = check_media_type; + + initialized = true; +} + +void cdrom_sysctl_unregister(void) +{ + if (cdrom_sysctl_header) + unregister_sysctl_table(cdrom_sysctl_header); +} diff --git a/include/linux/cdrom.h b/include/linux/cdrom.h index 8609d57..3f1d2fc 100644 --- a/include/linux/cdrom.h +++ b/include/linux/cdrom.h @@ -10,10 +10,23 @@ #ifndef _LINUX_CDROM_H #define _LINUX_CDROM_H +#ifdef pr_fmt +#undef pr_fmt +#endif + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#define REVISION "Revision: 3.20" +#define VERSION "Id: cdrom.c 3.20 2003/12/17" + #include /* not really needed, later.. */ #include #include +/* The (cdo->capability & ~cdi->mask & CDC_XXX) construct was used in + a lot of places. This macro makes the code more clear. */ +#define CDROM_CAN(type) (cdi->ops->capability & ~cdi->mask & (type)) + struct packet_command { unsigned char cmd[CDROM_PACKET_SIZE]; @@ -311,4 +324,24 @@ static inline int msf_to_lba(u8 m, u8 s, u8 f) { return (((m * CD_SECS) + s) * CD_FRAMES + f) - CD_MSF_OFFSET; } + +/* cdrom.c */ +extern bool cdrom_debug; +extern bool autoclose; +extern bool autoeject; +extern bool lockdoor; +extern bool check_media_type; +extern bool mrw_format_restart; +extern struct list_head cdrom_list; +extern struct mutex cdrom_mutex; + +/* cdrom_sysctl.c */ +#ifdef CONFIG_SYSCTL +extern void cdrom_sysctl_register(void); +extern void cdrom_sysctl_unregister(void); +#else +#define cdrom_sysctl_register do { } while (0) +#define cdrom_sysctl_unregister do { } while (0) +#endif /* CONFIG_SYSCTL */ + #endif /* _LINUX_CDROM_H */ -- 1.9.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/