-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 <[email protected]>
---
 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 <linux/mm.h>
 #include <linux/slab.h> 
 #include <linux/cdrom.h>
-#include <linux/sysctl.h>
 #include <linux/proc_fs.h>
 #include <linux/blkpg.h>
 #include <linux/init.h>
@@ -284,23 +278,23 @@
 #include <linux/uaccess.h>
 
 /* 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 <linux/kernel.h>
+#include <linux/mm.h>
+#include <linux/cdrom.h>
+#include <linux/sysctl.h>
+
+#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 <linux/fs.h>          /* not really needed, later.. */
 #include <linux/list.h>
 #include <uapi/linux/cdrom.h>
 
+/* 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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to