Patch from Steven Scholz:
authorEric Andersen <andersen@codepoet.org>
Wed, 6 Aug 2003 08:57:35 +0000 (08:57 -0000)
committerEric Andersen <andersen@codepoet.org>
Wed, 6 Aug 2003 08:57:35 +0000 (08:57 -0000)
should we rename the define into CONFIG_FEATURE_HDPARM_HDIO_DMA and
use it for "set" and "get" ???

Since although CONFIG_FEATURE_HDPARM_HDIO_GET_DMA is _not_ set I still
can use "hdparm -d 1 /dev/hda" to switch the DMA on.
Is this desireable or meant to be like that?

So how about the applied patch?

include/usage.h
miscutils/Config.in
miscutils/hdparm.c

index 60a9f99..1e489a5 100644 (file)
 #define USAGE_TRISTATE_HWIF(a)
 #endif
 
+#ifdef CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA
+#define USAGE_GETSET_DMA(a) a
+#else
+#define USAGE_GETSET_DMA(a)
+#endif
+
 #define hdparm_trivial_usage \
        "[options] [device] .."
 #define hdparm_full_usage \
        " -B   set Advanced Power Management setting (1-255)\n" \
        " -c   get/set IDE 32-bit IO setting\n" \
        " -C   check IDE power mode status\n" \
-       " -d   get/set using_dma flag\n" \
+       USAGE_GETSET_DMA(" -d   get/set using_dma flag\n") \
        " -D   enable/disable drive defect-mgmt\n" \
        " -f   flush buffer cache for device on exit\n" \
        " -g   display drive geometry\n" \
index 0c56f0e..a994c50 100644 (file)
@@ -100,6 +100,14 @@ config CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF
          and the '-b' option to get/set bus state.  This is dangerous
          stuff, so you should probably say N.
 
+config CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA
+       bool "  get/set using_dma flag (DANGEROUS)"
+       default n
+       depends on CONFIG_HDPARM
+       help
+         Enables the 'hdparm -d' option to get/set using_dma flag.
+         This is dangerous stuff, so you should probably say N.
+
 config CONFIG_MAKEDEVS
        bool "makedevs"
        default n
index eb4991e..0263f28 100644 (file)
@@ -1820,6 +1820,7 @@ static void process_dev (char *devname)
                if (ioctl(fd, HDIO_SET_UNMASKINTR, unmask))
                        bb_perror_msg(" HDIO_SET_UNMASKINTR failed");
        }
+#ifdef CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA
        if (set_dma) {
                no_scsi();
                if (get_dma) {
@@ -1829,6 +1830,7 @@ static void process_dev (char *devname)
                if (ioctl(fd, HDIO_SET_DMA, dma))
                        bb_perror_msg(" HDIO_SET_DMA failed");
        }
+#endif /* CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA */
        if (set_dma_q) {
                no_scsi();
                if (get_dma_q) {
@@ -2080,7 +2082,7 @@ static void process_dev (char *devname)
                }
        }
 
-#ifdef CONFIG_FEATURE_HDPARM_HDIO_GET_DMA
+#ifdef CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA
        if ((verbose && !is_scsi_hd) || get_dma) {
                no_scsi();
                if (ioctl(fd, HDIO_GET_DMA, &parm))
@@ -2382,6 +2384,7 @@ int hdparm_main(int argc, char **argv)
                                                        unmask = *p++ - '0';
                                                }
                                                break;
+#ifdef CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA
                                        case 'd':
                                                get_dma = noisy;
                                                noisy = 1;
@@ -2392,6 +2395,7 @@ int hdparm_main(int argc, char **argv)
                                                        dma = *p++ - '0';
                                                }
                                                break;
+#endif /* CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA */
                                        case 'n':
                                                get_nowerr = noisy;
                                                noisy = 1;