mirror of
https://github.com/sheumann/hush.git
synced 2024-12-22 14:30:31 +00:00
Cleanup patch from tito.
This commit is contained in:
parent
63e4c637cb
commit
20deab0537
@ -25,6 +25,7 @@
|
|||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/times.h>
|
#include <sys/times.h>
|
||||||
#include <sys/mount.h>
|
#include <sys/mount.h>
|
||||||
|
#include <getopt.h>
|
||||||
#include "busybox.h"
|
#include "busybox.h"
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/hdreg.h>
|
#include <linux/hdreg.h>
|
||||||
@ -567,13 +568,6 @@ static uint16_t check_if_maj_and_set_val(uint16_t a, uint16_t b)
|
|||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned long int set_flag(char *p, char max)
|
|
||||||
{
|
|
||||||
if (*p >= '0' && *p <= max )
|
|
||||||
return 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* end of busybox specific stuff */
|
/* end of busybox specific stuff */
|
||||||
|
|
||||||
#ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY
|
#ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY
|
||||||
@ -633,7 +627,6 @@ static void print_ascii(uint16_t *p, uint8_t length) {
|
|||||||
others, though, were declared in hdparm.c with global scope; since other
|
others, though, were declared in hdparm.c with global scope; since other
|
||||||
functions in that file have static (file) scope, I assume the difference is
|
functions in that file have static (file) scope, I assume the difference is
|
||||||
intentional. */
|
intentional. */
|
||||||
|
|
||||||
static void identify(uint16_t *id_supplied)
|
static void identify(uint16_t *id_supplied)
|
||||||
{
|
{
|
||||||
uint16_t buf[256];
|
uint16_t buf[256];
|
||||||
@ -1240,17 +1233,17 @@ static unsigned long set_apmmode, get_apmmode, apmmode;
|
|||||||
static int get_IDentity;
|
static int get_IDentity;
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF
|
#ifdef CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF
|
||||||
static int unregister_hwif;
|
static unsigned long unregister_hwif;
|
||||||
static int hwif;
|
static unsigned long hwif;
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF
|
#ifdef CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF
|
||||||
static int scan_hwif;
|
static unsigned long scan_hwif;
|
||||||
static int hwif_data;
|
static unsigned long hwif_data;
|
||||||
static int hwif_ctrl;
|
static unsigned long hwif_ctrl;
|
||||||
static int hwif_irq;
|
static unsigned long hwif_irq;
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF
|
#ifdef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF
|
||||||
static int set_busstate, get_busstate, busstate;
|
static unsigned long set_busstate, get_busstate, busstate;
|
||||||
#endif
|
#endif
|
||||||
static int reread_partn;
|
static int reread_partn;
|
||||||
|
|
||||||
@ -1258,7 +1251,7 @@ static int reread_partn;
|
|||||||
static int perform_reset;
|
static int perform_reset;
|
||||||
#endif /* CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET */
|
#endif /* CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET */
|
||||||
#ifdef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF
|
#ifdef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF
|
||||||
static int perform_tristate, tristate;
|
static unsigned long perform_tristate, tristate;
|
||||||
#endif /* CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF */
|
#endif /* CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF */
|
||||||
|
|
||||||
// Historically, if there was no HDIO_OBSOLETE_IDENTITY, then
|
// Historically, if there was no HDIO_OBSOLETE_IDENTITY, then
|
||||||
@ -1839,14 +1832,14 @@ static void process_dev(char *devname)
|
|||||||
#ifdef CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF
|
#ifdef CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF
|
||||||
if (unregister_hwif)
|
if (unregister_hwif)
|
||||||
{
|
{
|
||||||
printf(" attempting to unregister hwif#%u\n", hwif);
|
printf(" attempting to unregister hwif#%lu\n", hwif);
|
||||||
bb_ioctl(fd, HDIO_UNREGISTER_HWIF,(int *)(unsigned long)hwif,"HDIO_UNREGISTER_HWIF");
|
bb_ioctl(fd, HDIO_UNREGISTER_HWIF,(int *)(unsigned long)hwif,"HDIO_UNREGISTER_HWIF");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF
|
#ifdef CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF
|
||||||
if (scan_hwif)
|
if (scan_hwif)
|
||||||
{
|
{
|
||||||
printf(" attempting to scan hwif (0x%x, 0x%x, %u)\n", hwif_data, hwif_ctrl, hwif_irq);
|
printf(" attempting to scan hwif (0x%lx, 0x%lx, %lu)\n", hwif_data, hwif_ctrl, hwif_irq);
|
||||||
args[0] = hwif_data;
|
args[0] = hwif_data;
|
||||||
args[1] = hwif_ctrl;
|
args[1] = hwif_ctrl;
|
||||||
args[2] = hwif_irq;
|
args[2] = hwif_irq;
|
||||||
@ -2246,7 +2239,7 @@ static void process_dev(char *devname)
|
|||||||
{
|
{
|
||||||
if (get_busstate)
|
if (get_busstate)
|
||||||
{
|
{
|
||||||
printf(" setting bus state to %d", busstate);
|
printf(" setting bus state to %ld", busstate);
|
||||||
bus_state_value(busstate);
|
bus_state_value(busstate);
|
||||||
}
|
}
|
||||||
bb_ioctl(fd, HDIO_SET_BUSSTATE, (int *)(unsigned long)busstate, "HDIO_SET_BUSSTATE");
|
bb_ioctl(fd, HDIO_SET_BUSSTATE, (int *)(unsigned long)busstate, "HDIO_SET_BUSSTATE");
|
||||||
@ -2275,35 +2268,6 @@ static void process_dev(char *devname)
|
|||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static char * GET_NUMBER(char *p, unsigned long *flag, unsigned long *num)
|
|
||||||
{
|
|
||||||
*num = 0;
|
|
||||||
while (isdigit(*p)) {
|
|
||||||
*flag = 1;
|
|
||||||
*num = (*num * 10) + (*p++ - '0');
|
|
||||||
}
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
static char * GET_STRING(char *p, unsigned long *flag, int *num)
|
|
||||||
{
|
|
||||||
char *tmpstr;
|
|
||||||
char name[32];
|
|
||||||
tmpstr = name;
|
|
||||||
tmpstr[0] = '\0';
|
|
||||||
while (isalnum(*p) && (tmpstr - name) < 31) {
|
|
||||||
tmpstr[0] = *p++;
|
|
||||||
tmpstr[1] = '\0';
|
|
||||||
++tmpstr;
|
|
||||||
}
|
|
||||||
*num = translate_xfermode(name);
|
|
||||||
if (*num == -1)
|
|
||||||
*flag = 0;
|
|
||||||
else
|
|
||||||
*flag = 1;
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY
|
#ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY
|
||||||
static int fromhex(unsigned char c)
|
static int fromhex(unsigned char c)
|
||||||
{
|
{
|
||||||
@ -2333,351 +2297,166 @@ static void identify_from_stdin(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void missing_arg(int arg, char c, char* add)
|
/* busybox specific stuff */
|
||||||
|
static void parse_opts(int flag, unsigned long *get, unsigned long *set, unsigned long *value, int min, int max)
|
||||||
{
|
{
|
||||||
if (!arg)
|
if (flag) {
|
||||||
bb_error_msg("-%c: missing value %s", c, (add!=NULL)? add :"");
|
/* noisy is a global var */
|
||||||
}
|
if (get) { /* *get is initialized to 0 */
|
||||||
|
*get = noisy;
|
||||||
/* our main() routine: */
|
noisy = 1;
|
||||||
int hdparm_main(int argc, char **argv)
|
}
|
||||||
{
|
if (optarg) {
|
||||||
char c, *p;
|
*set = 1;
|
||||||
|
*value = bb_xgetlarg(optarg, 10, min, max);
|
||||||
++argv;
|
|
||||||
if (!--argc)
|
|
||||||
bb_show_usage();
|
|
||||||
|
|
||||||
while (argc--)
|
|
||||||
{
|
|
||||||
if (ENABLE_FEATURE_HDPARM_GET_IDENTITY && !strcmp("-Istdin", *argv))
|
|
||||||
identify_from_stdin();
|
|
||||||
p = *argv++;
|
|
||||||
if (*p == '-')
|
|
||||||
{
|
|
||||||
if (!*++p)
|
|
||||||
bb_show_usage();
|
|
||||||
while ((c = *p++))
|
|
||||||
{
|
|
||||||
++flagcount;
|
|
||||||
switch (c)
|
|
||||||
{
|
|
||||||
case 'V':
|
|
||||||
/*bb_error_msg_and_die("%s", VERSION);*/
|
|
||||||
/* We have to return 0 here and not 1 */
|
|
||||||
printf("%s %s\n",bb_applet_name, VERSION);
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
case 'v':
|
|
||||||
verbose = 1;
|
|
||||||
break;
|
|
||||||
#ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY
|
|
||||||
case 'I':
|
|
||||||
get_IDentity = 1;
|
|
||||||
break;
|
|
||||||
case 'i':
|
|
||||||
get_identity = 1;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
case 'g':
|
|
||||||
get_geom = 1;
|
|
||||||
break;
|
|
||||||
case 'f':
|
|
||||||
do_flush = 1;
|
|
||||||
break;
|
|
||||||
case 'q':
|
|
||||||
quiet = 1;
|
|
||||||
noisy = 0;
|
|
||||||
break;
|
|
||||||
case 'u':
|
|
||||||
get_unmask = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isdigit(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
if ((set_unmask = set_flag(p,'1'))==1)
|
|
||||||
unmask = *p++ - '0';
|
|
||||||
break;
|
|
||||||
#ifdef CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA
|
|
||||||
case 'd':
|
|
||||||
get_dma = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isdigit(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
if ((set_dma = set_flag(p,'9'))==1)
|
|
||||||
dma = *p++ - '0';
|
|
||||||
break;
|
|
||||||
#endif /* CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA */
|
|
||||||
case 'n':
|
|
||||||
get_nowerr = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isdigit(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
if ((set_nowerr = set_flag(p,'1'))==1)
|
|
||||||
nowerr = *p++ - '0';
|
|
||||||
break;
|
|
||||||
case 'p':
|
|
||||||
noisy_piomode = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isalnum(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
p=GET_STRING(p,&set_piomode,&piomode);
|
|
||||||
break;
|
|
||||||
case 'r':
|
|
||||||
get_readonly = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isdigit(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
if ((set_readonly = set_flag(p,'1'))==1)
|
|
||||||
readonly = *p++ - '0';
|
|
||||||
break;
|
|
||||||
case 'm':
|
|
||||||
get_mult = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isalnum(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
p=GET_NUMBER(p,&set_mult,&mult);
|
|
||||||
break;
|
|
||||||
case 'c':
|
|
||||||
get_io32bit = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isalnum(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
p=GET_NUMBER(p,&set_io32bit,&io32bit);
|
|
||||||
break;
|
|
||||||
#ifdef HDIO_DRIVE_CMD
|
|
||||||
case 'S':
|
|
||||||
get_standby = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isalnum(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
p=GET_NUMBER(p,&set_standby,&standby_requested);
|
|
||||||
missing_arg(set_standby, c, NULL);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'D':
|
|
||||||
get_defects = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isalnum(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
p=GET_NUMBER(p,&set_defects,&defects);
|
|
||||||
missing_arg(set_defects, c, NULL);
|
|
||||||
break;
|
|
||||||
case 'P':
|
|
||||||
get_prefetch = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isalnum(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
p=GET_NUMBER(p,&set_prefetch,&prefetch);
|
|
||||||
missing_arg(set_prefetch, c, NULL);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'X':
|
|
||||||
get_xfermode = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isalnum(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
p=GET_STRING(p,&set_xfermode,&xfermode_requested);
|
|
||||||
missing_arg(set_xfermode, c, NULL);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'K':
|
|
||||||
get_dkeep = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isdigit(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
if ((set_dkeep = set_flag(p,'1'))==1)
|
|
||||||
dkeep = *p++ - '0';
|
|
||||||
else
|
|
||||||
goto missing_arg_error;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'A':
|
|
||||||
get_lookahead = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isdigit(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
if ((set_lookahead = set_flag(p,'1'))==1)
|
|
||||||
lookahead = *p++ - '0';
|
|
||||||
else
|
|
||||||
goto missing_arg_error;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'L':
|
|
||||||
get_doorlock = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isdigit(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
if ((set_doorlock = set_flag(p,'1'))==1)
|
|
||||||
doorlock = *p++ - '0';
|
|
||||||
else
|
|
||||||
goto missing_arg_error;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'W':
|
|
||||||
get_wcache = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isdigit(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
if ((set_wcache = set_flag(p,'1'))==1)
|
|
||||||
wcache = *p++ - '0';
|
|
||||||
else
|
|
||||||
missing_arg_error:
|
|
||||||
missing_arg(1, c, "(0/1)");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'C':
|
|
||||||
get_powermode = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'y':
|
|
||||||
get_standbynow = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
set_standbynow = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'Y':
|
|
||||||
get_sleepnow = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
set_sleepnow = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'z':
|
|
||||||
reread_partn = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'Z':
|
|
||||||
get_seagate = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
set_seagate = 1;
|
|
||||||
break;
|
|
||||||
#endif /* HDIO_DRIVE_CMD */
|
|
||||||
case 'k':
|
|
||||||
get_keep = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isdigit(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
if ((set_keep = set_flag(p,'1'))==1)
|
|
||||||
keep = *p++ - '0';
|
|
||||||
break;
|
|
||||||
#ifdef CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF
|
|
||||||
case 'U':
|
|
||||||
if (!*p && argc && isdigit(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
if (! p)
|
|
||||||
goto expected_hwif_error; /* "expected hwif_nr" */
|
|
||||||
|
|
||||||
sscanf(p++, "%i", &hwif);
|
|
||||||
|
|
||||||
unregister_hwif = 1;
|
|
||||||
break;
|
|
||||||
#endif /* CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF */
|
|
||||||
#ifdef CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF
|
|
||||||
case 'R':
|
|
||||||
if (!*p && argc && isdigit(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
if (! p)
|
|
||||||
goto expected_hwif_error; /* "expected hwif_data" */
|
|
||||||
|
|
||||||
sscanf(p++, "%i", &hwif_data);
|
|
||||||
|
|
||||||
if (argc && isdigit(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
else
|
|
||||||
goto expected_hwif_error; /* "expected hwif_ctrl" */
|
|
||||||
|
|
||||||
sscanf(p, "%i", &hwif_ctrl);
|
|
||||||
|
|
||||||
if (argc && isdigit(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
else
|
|
||||||
#endif /* CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF */
|
|
||||||
#if defined CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF || defined CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF
|
|
||||||
expected_hwif_error:
|
|
||||||
bb_error_msg_and_die("expected hwif value"); /* "expected hwif_irq" */
|
|
||||||
#endif /* CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF || CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF */
|
|
||||||
#ifdef CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF
|
|
||||||
|
|
||||||
sscanf(p, "%i", &hwif_irq);
|
|
||||||
|
|
||||||
*p = '\0';
|
|
||||||
|
|
||||||
scan_hwif = 1;
|
|
||||||
break;
|
|
||||||
#endif /* CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF */
|
|
||||||
case 'Q':
|
|
||||||
#ifdef HDIO_GET_QDMA
|
|
||||||
get_dma_q = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
#ifdef HDIO_SET_QDMA
|
|
||||||
if (!*p && argc && isalnum(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
p=GET_NUMBER(p,&set_dma_q,&dma_q);
|
|
||||||
#ifdef HDIO_GET_QDMA
|
|
||||||
dma_q = -dma_q;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
|
|
||||||
#ifdef CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET
|
|
||||||
case 'w':
|
|
||||||
perform_reset = 1;
|
|
||||||
break;
|
|
||||||
#endif /* CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET */
|
|
||||||
#ifdef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF
|
|
||||||
case 'x':
|
|
||||||
if (!*p && argc && isdigit(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
if ((perform_tristate = set_flag(p,'1'))==1)
|
|
||||||
tristate = *p++ - '0';
|
|
||||||
else
|
|
||||||
missing_arg(1, c, "(0/1)");
|
|
||||||
break;
|
|
||||||
|
|
||||||
#endif /* CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF */
|
|
||||||
case 'a':
|
|
||||||
get_readahead = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isalnum(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
p=GET_NUMBER(p,&set_readahead,&Xreadahead);
|
|
||||||
break;
|
|
||||||
case 'B':
|
|
||||||
get_apmmode = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isalnum(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
p=GET_NUMBER(p,&set_apmmode,&apmmode);
|
|
||||||
missing_arg(set_apmmode, c, "(1-255)");
|
|
||||||
break;
|
|
||||||
case 't':
|
|
||||||
do_timings = 1;
|
|
||||||
do_flush = 1;
|
|
||||||
break;
|
|
||||||
case 'T':
|
|
||||||
do_ctimings = 1;
|
|
||||||
do_flush = 1;
|
|
||||||
break;
|
|
||||||
#ifdef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF
|
|
||||||
case 'b':
|
|
||||||
get_busstate = noisy;
|
|
||||||
noisy = 1;
|
|
||||||
if (!*p && argc && isdigit(**argv))
|
|
||||||
p = *argv++, --argc;
|
|
||||||
if ((set_busstate = set_flag(p,'2'))==1)
|
|
||||||
busstate = *p++ - '0';
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
case 'h':
|
|
||||||
default:
|
|
||||||
bb_show_usage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!argc)
|
|
||||||
bb_show_usage();
|
|
||||||
} else {
|
|
||||||
process_dev(p);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0 ;
|
}
|
||||||
|
|
||||||
|
#ifdef HDIO_DRIVE_CMD
|
||||||
|
static void parse_opts_v2(int flag, unsigned long *get, unsigned long *set)
|
||||||
|
{
|
||||||
|
if (flag) {
|
||||||
|
/* noisy is a global var */
|
||||||
|
*get = noisy;
|
||||||
|
noisy = 1;
|
||||||
|
*set = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void parse_opts_v3(int flag, unsigned long *get, unsigned long *set, int *value)
|
||||||
|
{
|
||||||
|
if (flag) {
|
||||||
|
/* noisy is a global var */
|
||||||
|
*get = noisy;
|
||||||
|
noisy = 1;
|
||||||
|
if (optarg) {
|
||||||
|
*set = ((*value = translate_xfermode(optarg)) > -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------*/
|
||||||
|
/* getopt long options */
|
||||||
|
#if ENABLE_FEATURE_HDPARM_GET_IDENTITY
|
||||||
|
static const struct option HDPARM_LONG_OPT[] =
|
||||||
|
{
|
||||||
|
{"Istdin", 0, NULL, '\256'},
|
||||||
|
{NULL, 0, NULL, 0}
|
||||||
|
};
|
||||||
|
#else
|
||||||
|
#define HDPARM_LONG_OPT NULL
|
||||||
|
#endif
|
||||||
|
/*-------------------------------------*/
|
||||||
|
/* getopt short options */
|
||||||
|
static const char hdparm_options[]= "Vvgfqu::n::p:r::m::c::k::a::B:tTh"\
|
||||||
|
USE_FEATURE_HDPARM_GET_IDENTITY("\256iI")
|
||||||
|
USE_FEATURE_HDPARM_HDIO_GETSET_DMA("d::")
|
||||||
|
#ifdef HDIO_DRIVE_CMD
|
||||||
|
"S::D::P::X::K::A::L::W::CyYzZ"
|
||||||
|
#endif
|
||||||
|
USE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF("U:")
|
||||||
|
#ifdef HDIO_GET_QDMA
|
||||||
|
#ifdef HDIO_SET_QDMA
|
||||||
|
"Q:"
|
||||||
|
#else
|
||||||
|
"Q"
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
USE_FEATURE_HDPARM_HDIO_DRIVE_RESET("w")
|
||||||
|
USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF("x::b:")
|
||||||
|
USE_FEATURE_HDPARM_HDIO_SCAN_HWIF("R:");
|
||||||
|
/*-------------------------------------*/
|
||||||
|
|
||||||
|
/* our main() routine: */
|
||||||
|
int hdparm_main(int argc, char **argv) ATTRIBUTE_NORETURN;
|
||||||
|
int hdparm_main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
|
||||||
|
while ((c = getopt_long (argc, argv, hdparm_options, HDPARM_LONG_OPT , NULL)) >= 0) {
|
||||||
|
/* When no flags are given (flagcount = 0), -acdgkmnru is assumed. */
|
||||||
|
flagcount++;
|
||||||
|
#if ENABLE_FEATURE_HDPARM_GET_IDENTITY
|
||||||
|
if (c == '\256') {
|
||||||
|
identify_from_stdin(); /* EXIT */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (c == 'V') {
|
||||||
|
printf("%s %s\n",bb_applet_name, VERSION);
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
verbose = (c == 'v');
|
||||||
|
USE_FEATURE_HDPARM_GET_IDENTITY(get_IDentity = (c == 'I'));
|
||||||
|
USE_FEATURE_HDPARM_GET_IDENTITY(get_identity = (c == 'i'));
|
||||||
|
get_geom = (c == 'g');
|
||||||
|
do_flush = (c == 'f');
|
||||||
|
if (c == 'q') {
|
||||||
|
quiet = 1;
|
||||||
|
noisy = 0;
|
||||||
|
}
|
||||||
|
parse_opts((c == 'u'), &get_unmask, &set_unmask, &unmask, 0, 1);
|
||||||
|
USE_FEATURE_HDPARM_HDIO_GETSET_DMA(parse_opts((c == 'd'), &get_dma, &set_dma, &dma, 0, 9));
|
||||||
|
parse_opts((c == 'n'), &get_nowerr, &set_nowerr, &nowerr, 0, 1);
|
||||||
|
parse_opts_v3((c == 'p'), &noisy_piomode, &set_piomode, &piomode);
|
||||||
|
parse_opts((c == 'r'), &get_readonly, &set_readonly, &readonly, 0, 1);
|
||||||
|
parse_opts((c == 'm'), &get_mult, &set_mult, &mult, 0, INT_MAX /*32*/);
|
||||||
|
parse_opts((c == 'c'), &get_io32bit, &set_io32bit, &io32bit, 0, INT_MAX /*8*/);
|
||||||
|
parse_opts((c == 'k'), &get_keep, &set_keep, &keep, 0, 1);
|
||||||
|
parse_opts((c == 'a'), &get_readahead, &set_readahead, &Xreadahead, 0, INT_MAX);
|
||||||
|
parse_opts((c == 'B'), &get_apmmode, &set_apmmode, &apmmode, 1, 255);
|
||||||
|
do_flush |= do_timings = (c == 't');
|
||||||
|
do_flush |= do_ctimings = (c == 'T');
|
||||||
|
#ifdef HDIO_DRIVE_CMD
|
||||||
|
parse_opts((c == 'S'), &get_standby, &set_standby, &standby_requested, 0, INT_MAX);
|
||||||
|
parse_opts((c == 'D'), &get_defects, &set_defects, &defects, 0, INT_MAX);
|
||||||
|
parse_opts((c == 'P'), &get_prefetch, &set_prefetch, &prefetch, 0, INT_MAX);
|
||||||
|
parse_opts_v3((c == 'X'), &get_xfermode, &set_xfermode, &xfermode_requested);
|
||||||
|
parse_opts((c == 'K'), &get_dkeep, &set_dkeep, &prefetch, 0, 1);
|
||||||
|
parse_opts((c == 'A'), &get_lookahead, &set_lookahead, &lookahead, 0, 1);
|
||||||
|
parse_opts((c == 'L'), &get_doorlock, &set_doorlock, &doorlock, 0, 1);
|
||||||
|
parse_opts((c == 'W'), &get_wcache, &set_wcache, &wcache, 0, 1);
|
||||||
|
parse_opts_v3((c == 'C'), &get_powermode, NULL, NULL);
|
||||||
|
parse_opts_v2((c == 'y'), &get_standbynow, &set_standbynow);
|
||||||
|
parse_opts_v2((c == 'Y'), &get_sleepnow, &set_sleepnow);
|
||||||
|
reread_partn = (c == 'z');
|
||||||
|
parse_opts_v2((c == 'Z'), &get_seagate, &set_seagate);
|
||||||
|
#endif
|
||||||
|
USE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF(parse_opts((c == 'U'), NULL, &unregister_hwif, &hwif, 0, INT_MAX));
|
||||||
|
#ifdef HDIO_GET_QDMA
|
||||||
|
#ifdef HDIO_SET_QDMA
|
||||||
|
parse_opts((c == 'Q'), &get_dma_q, &set_dma_q, &dma_q, 0, INT_MAX);
|
||||||
|
#else
|
||||||
|
parse_opts((c == 'Q'), &get_dma_q, NULL, NULL, 0, 0);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
USE_FEATURE_HDPARM_HDIO_DRIVE_RESET( perform_reset = (c == 'r'));
|
||||||
|
USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF(parse_opts((c == 'x'), NULL, &perform_tristate, &tristate, 0, 1));
|
||||||
|
USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF(parse_opts((c == 'b'), &get_busstate, &set_busstate, &busstate, 0, 2));
|
||||||
|
#if ENABLE_FEATURE_HDPARM_HDIO_SCAN_HWIF
|
||||||
|
if (c == 'R') {
|
||||||
|
parse_opts((c == 'R'), NULL, &scan_hwif, &hwif_data, 0, INT_MAX);
|
||||||
|
hwif_ctrl = bb_xgetlarg((argv[optind]) ? argv[optind] : "", 10, 0, INT_MAX);
|
||||||
|
hwif_irq = bb_xgetlarg((argv[optind+1]) ? argv[optind+1] : "", 10, 0, INT_MAX);
|
||||||
|
/* Move past the 2 additional arguments */
|
||||||
|
argv += 2;
|
||||||
|
argc -= 2;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
|
||||||
|
if (argc < 1) {
|
||||||
|
bb_show_usage();
|
||||||
|
}
|
||||||
|
|
||||||
|
while (argc--) {
|
||||||
|
process_dev(*argv);
|
||||||
|
argv++;
|
||||||
|
}
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user