hdparm: get rid of static variables
process_dev 5309 5311 +2 unregister_hwif 1 - -1 ........... Xreadahead 4 - -4 seek_to_zero 25 17 -8 hdparm_main 1242 1227 -15 do_time 547 480 -67 ------------------------------------------------------------------------------ (add/remove: 0/83 grow/shrink: 1/3 up/down: 2/-248) Total: -246 bytes
This commit is contained in:
parent
8607677529
commit
0d3c6afc93
@ -379,11 +379,6 @@ static const char *const cmd_feat_str[] = {
|
||||
"SMART self-test ", /* word 84 bit 1 */
|
||||
"SMART error logging " /* word 84 bit 0 */
|
||||
};
|
||||
|
||||
static void identify(uint16_t *id_supplied) ATTRIBUTE_NORETURN;
|
||||
static void identify_from_stdin(void) ATTRIBUTE_NORETURN;
|
||||
#else
|
||||
void identify_from_stdin(void);
|
||||
#endif
|
||||
|
||||
|
||||
@ -444,6 +439,162 @@ static const char *const secu_str[] = {
|
||||
|
||||
enum { fd = 3 };
|
||||
|
||||
|
||||
struct globals {
|
||||
smallint get_identity, get_geom;
|
||||
smallint do_flush;
|
||||
smallint do_ctimings, do_timings;
|
||||
smallint reread_partn;
|
||||
smallint set_piomode, noisy_piomode;
|
||||
smallint set_readahead, get_readahead;
|
||||
smallint set_readonly, get_readonly;
|
||||
smallint set_unmask, get_unmask;
|
||||
smallint set_mult, get_mult;
|
||||
smallint set_dma_q, get_dma_q;
|
||||
smallint set_nowerr, get_nowerr;
|
||||
smallint set_keep, get_keep;
|
||||
smallint set_io32bit, get_io32bit;
|
||||
int piomode;
|
||||
unsigned long Xreadahead;
|
||||
unsigned long readonly;
|
||||
unsigned long unmask;
|
||||
unsigned long mult;
|
||||
unsigned long dma_q;
|
||||
unsigned long nowerr;
|
||||
unsigned long keep;
|
||||
unsigned long io32bit;
|
||||
#if ENABLE_FEATURE_HDPARM_HDIO_GETSET_DMA
|
||||
unsigned long dma;
|
||||
smallint set_dma, get_dma;
|
||||
#endif
|
||||
#ifdef HDIO_DRIVE_CMD
|
||||
smallint set_xfermode, get_xfermode;
|
||||
smallint set_dkeep, get_dkeep;
|
||||
smallint set_standby, get_standby;
|
||||
smallint set_lookahead, get_lookahead;
|
||||
smallint set_prefetch, get_prefetch;
|
||||
smallint set_defects, get_defects;
|
||||
smallint set_wcache, get_wcache;
|
||||
smallint set_doorlock, get_doorlock;
|
||||
smallint set_seagate, get_seagate;
|
||||
smallint set_standbynow, get_standbynow;
|
||||
smallint set_sleepnow, get_sleepnow;
|
||||
smallint get_powermode;
|
||||
smallint set_apmmode, get_apmmode;
|
||||
int xfermode_requested;
|
||||
unsigned long dkeep;
|
||||
unsigned long standby_requested;
|
||||
unsigned long lookahead;
|
||||
unsigned long prefetch;
|
||||
unsigned long defects;
|
||||
unsigned long wcache;
|
||||
unsigned long doorlock;
|
||||
unsigned long apmmode;
|
||||
#endif
|
||||
USE_FEATURE_HDPARM_GET_IDENTITY( smallint get_IDentity;)
|
||||
USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( smallint set_busstate, get_busstate;)
|
||||
USE_FEATURE_HDPARM_HDIO_DRIVE_RESET( smallint perform_reset;)
|
||||
USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( smallint perform_tristate;)
|
||||
USE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF(smallint unregister_hwif;)
|
||||
USE_FEATURE_HDPARM_HDIO_SCAN_HWIF( smallint scan_hwif;)
|
||||
USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( unsigned long busstate;)
|
||||
USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( unsigned long tristate;)
|
||||
USE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF(unsigned long hwif;)
|
||||
#if ENABLE_FEATURE_HDPARM_HDIO_SCAN_HWIF
|
||||
unsigned long hwif_data;
|
||||
unsigned long hwif_ctrl;
|
||||
unsigned long hwif_irq;
|
||||
#endif
|
||||
};
|
||||
#define G (*(struct globals*)&bb_common_bufsiz1)
|
||||
struct BUG_G_too_big {
|
||||
char BUG_G_too_big[sizeof(G) <= COMMON_BUFSIZE ? 1 : -1];
|
||||
};
|
||||
#define get_identity (G.get_identity )
|
||||
#define get_geom (G.get_geom )
|
||||
#define do_flush (G.do_flush )
|
||||
#define do_ctimings (G.do_ctimings )
|
||||
#define do_timings (G.do_timings )
|
||||
#define reread_partn (G.reread_partn )
|
||||
#define set_piomode (G.set_piomode )
|
||||
#define noisy_piomode (G.noisy_piomode )
|
||||
#define set_readahead (G.set_readahead )
|
||||
#define get_readahead (G.get_readahead )
|
||||
#define set_readonly (G.set_readonly )
|
||||
#define get_readonly (G.get_readonly )
|
||||
#define set_unmask (G.set_unmask )
|
||||
#define get_unmask (G.get_unmask )
|
||||
#define set_mult (G.set_mult )
|
||||
#define get_mult (G.get_mult )
|
||||
#define set_dma_q (G.set_dma_q )
|
||||
#define get_dma_q (G.get_dma_q )
|
||||
#define set_nowerr (G.set_nowerr )
|
||||
#define get_nowerr (G.get_nowerr )
|
||||
#define set_keep (G.set_keep )
|
||||
#define get_keep (G.get_keep )
|
||||
#define set_io32bit (G.set_io32bit )
|
||||
#define get_io32bit (G.get_io32bit )
|
||||
#define piomode (G.piomode )
|
||||
#define Xreadahead (G.Xreadahead )
|
||||
#define readonly (G.readonly )
|
||||
#define unmask (G.unmask )
|
||||
#define mult (G.mult )
|
||||
#define dma_q (G.dma_q )
|
||||
#define nowerr (G.nowerr )
|
||||
#define keep (G.keep )
|
||||
#define io32bit (G.io32bit )
|
||||
#define dma (G.dma )
|
||||
#define set_dma (G.set_dma )
|
||||
#define get_dma (G.get_dma )
|
||||
#define set_xfermode (G.set_xfermode )
|
||||
#define get_xfermode (G.get_xfermode )
|
||||
#define set_dkeep (G.set_dkeep )
|
||||
#define get_dkeep (G.get_dkeep )
|
||||
#define set_standby (G.set_standby )
|
||||
#define get_standby (G.get_standby )
|
||||
#define set_lookahead (G.set_lookahead )
|
||||
#define get_lookahead (G.get_lookahead )
|
||||
#define set_prefetch (G.set_prefetch )
|
||||
#define get_prefetch (G.get_prefetch )
|
||||
#define set_defects (G.set_defects )
|
||||
#define get_defects (G.get_defects )
|
||||
#define set_wcache (G.set_wcache )
|
||||
#define get_wcache (G.get_wcache )
|
||||
#define set_doorlock (G.set_doorlock )
|
||||
#define get_doorlock (G.get_doorlock )
|
||||
#define set_seagate (G.set_seagate )
|
||||
#define get_seagate (G.get_seagate )
|
||||
#define set_standbynow (G.set_standbynow )
|
||||
#define get_standbynow (G.get_standbynow )
|
||||
#define set_sleepnow (G.set_sleepnow )
|
||||
#define get_sleepnow (G.get_sleepnow )
|
||||
#define get_powermode (G.get_powermode )
|
||||
#define set_apmmode (G.set_apmmode )
|
||||
#define get_apmmode (G.get_apmmode )
|
||||
#define xfermode_requested (G.xfermode_requested )
|
||||
#define dkeep (G.dkeep )
|
||||
#define standby_requested (G.standby_requested )
|
||||
#define lookahead (G.lookahead )
|
||||
#define prefetch (G.prefetch )
|
||||
#define defects (G.defects )
|
||||
#define wcache (G.wcache )
|
||||
#define doorlock (G.doorlock )
|
||||
#define apmmode (G.apmmode )
|
||||
#define get_IDentity (G.get_IDentity )
|
||||
#define set_busstate (G.set_busstate )
|
||||
#define get_busstate (G.get_busstate )
|
||||
#define perform_reset (G.perform_reset )
|
||||
#define perform_tristate (G.perform_tristate )
|
||||
#define unregister_hwif (G.unregister_hwif )
|
||||
#define scan_hwif (G.scan_hwif )
|
||||
#define busstate (G.busstate )
|
||||
#define tristate (G.tristate )
|
||||
#define hwif (G.hwif )
|
||||
#define hwif_data (G.hwif_data )
|
||||
#define hwif_ctrl (G.hwif_ctrl )
|
||||
#define hwif_irq (G.hwif_irq )
|
||||
|
||||
|
||||
/* Busybox messages and functions */
|
||||
#if ENABLE_IOCTL_HEX2STR_ERROR
|
||||
static int ioctl_alt_func(/*int fd,*/ int cmd, unsigned char *args, int alt, const char *string)
|
||||
@ -544,6 +695,7 @@ static uint8_t mode_loop(uint16_t mode_sup, uint16_t mode_sel, int cc, uint8_t *
|
||||
|
||||
// Parse 512 byte disk identification block and print much crap.
|
||||
|
||||
static void identify(uint16_t *val) ATTRIBUTE_NORETURN;
|
||||
static void identify(uint16_t *val)
|
||||
{
|
||||
uint16_t ii, jj, kk;
|
||||
@ -1012,72 +1164,6 @@ static void identify(uint16_t *val)
|
||||
}
|
||||
#endif
|
||||
|
||||
static smallint get_identity, get_geom;
|
||||
static smallint do_flush;
|
||||
static smallint do_ctimings, do_timings;
|
||||
static smallint reread_partn;
|
||||
|
||||
static smallint set_piomode, noisy_piomode;
|
||||
static smallint set_readahead, get_readahead;
|
||||
static smallint set_readonly, get_readonly;
|
||||
static smallint set_unmask, get_unmask;
|
||||
static smallint set_mult, get_mult;
|
||||
static smallint set_dma_q, get_dma_q;
|
||||
static smallint set_nowerr, get_nowerr;
|
||||
static smallint set_keep, get_keep;
|
||||
static smallint set_io32bit, get_io32bit;
|
||||
static int piomode;
|
||||
static unsigned long Xreadahead;
|
||||
static unsigned long readonly;
|
||||
static unsigned long unmask;
|
||||
static unsigned long mult;
|
||||
static unsigned long dma_q;
|
||||
static unsigned long nowerr;
|
||||
static unsigned long keep;
|
||||
static unsigned long io32bit;
|
||||
#if ENABLE_FEATURE_HDPARM_HDIO_GETSET_DMA
|
||||
static unsigned long dma;
|
||||
static smallint set_dma, get_dma;
|
||||
#endif
|
||||
#ifdef HDIO_DRIVE_CMD
|
||||
static smallint set_xfermode, get_xfermode;
|
||||
static smallint set_dkeep, get_dkeep;
|
||||
static smallint set_standby, get_standby;
|
||||
static smallint set_lookahead, get_lookahead;
|
||||
static smallint set_prefetch, get_prefetch;
|
||||
static smallint set_defects, get_defects;
|
||||
static smallint set_wcache, get_wcache;
|
||||
static smallint set_doorlock, get_doorlock;
|
||||
static smallint set_seagate, get_seagate;
|
||||
static smallint set_standbynow, get_standbynow;
|
||||
static smallint set_sleepnow, get_sleepnow;
|
||||
static smallint get_powermode;
|
||||
static smallint set_apmmode, get_apmmode;
|
||||
static int xfermode_requested;
|
||||
static unsigned long dkeep;
|
||||
static unsigned long standby_requested;
|
||||
static unsigned long lookahead;
|
||||
static unsigned long prefetch;
|
||||
static unsigned long defects;
|
||||
static unsigned long wcache;
|
||||
static unsigned long doorlock;
|
||||
static unsigned long apmmode;
|
||||
#endif
|
||||
USE_FEATURE_HDPARM_GET_IDENTITY( static smallint get_IDentity;)
|
||||
USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( static smallint set_busstate, get_busstate;)
|
||||
USE_FEATURE_HDPARM_HDIO_DRIVE_RESET( static smallint perform_reset;)
|
||||
USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( static smallint perform_tristate;)
|
||||
USE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF(static smallint unregister_hwif;)
|
||||
USE_FEATURE_HDPARM_HDIO_SCAN_HWIF( static smallint scan_hwif;)
|
||||
USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( static unsigned long busstate;)
|
||||
USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( static unsigned long tristate;)
|
||||
USE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF(static unsigned long hwif;)
|
||||
#if ENABLE_FEATURE_HDPARM_HDIO_SCAN_HWIF
|
||||
static unsigned long hwif_data;
|
||||
static unsigned long hwif_ctrl;
|
||||
static unsigned long hwif_irq;
|
||||
#endif
|
||||
|
||||
// Historically, if there was no HDIO_OBSOLETE_IDENTITY, then
|
||||
// then the HDIO_GET_IDENTITY only returned 142 bytes.
|
||||
// Otherwise, HDIO_OBSOLETE_IDENTITY returns 142 bytes,
|
||||
@ -1251,11 +1337,9 @@ static void flush_buffer_cache(/*int fd*/ void)
|
||||
#endif
|
||||
}
|
||||
|
||||
static int seek_to_zero(/*int fd*/ void)
|
||||
static void seek_to_zero(/*int fd*/ void)
|
||||
{
|
||||
if (lseek(fd, (off_t) 0, SEEK_SET))
|
||||
return 1;
|
||||
return 0;
|
||||
xlseek(fd, (off_t) 0, SEEK_SET);
|
||||
}
|
||||
|
||||
static int read_big_block(/*int fd,*/ char *buf)
|
||||
@ -1273,18 +1357,18 @@ static int read_big_block(/*int fd,*/ char *buf)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int do_blkgetsize(/*int fd,*/ unsigned long long *blksize64)
|
||||
static unsigned long long do_blkgetsize(/*int fd*/ void)
|
||||
{
|
||||
int rc;
|
||||
unsigned blksize32 = 0;
|
||||
union {
|
||||
unsigned long long blksize64;
|
||||
unsigned blksize32;
|
||||
} u;
|
||||
|
||||
if (0 == ioctl(fd, BLKGETSIZE64, blksize64)) { // returns bytes
|
||||
*blksize64 /= 512;
|
||||
return 0;
|
||||
if (0 == ioctl(fd, BLKGETSIZE64, &u.blksize64)) { // returns bytes
|
||||
return u.blksize64 / 512;
|
||||
}
|
||||
rc = ioctl_or_warn(fd, BLKGETSIZE, &blksize32); // returns sectors
|
||||
*blksize64 = blksize32;
|
||||
return rc;
|
||||
xioctl(fd, BLKGETSIZE, &u.blksize32); // returns sectors
|
||||
return u.blksize32;
|
||||
}
|
||||
|
||||
static void print_timing(unsigned t, double e)
|
||||
@ -1303,25 +1387,20 @@ static void do_time(int flag /*,int fd*/)
|
||||
struct itimerval itv;
|
||||
unsigned elapsed, elapsed2;
|
||||
unsigned max_iterations, total_MB, iterations;
|
||||
unsigned long long blksize;
|
||||
RESERVE_CONFIG_BUFFER(buf, TIMING_BUF_BYTES);
|
||||
char *buf = xmalloc(TIMING_BUF_BYTES);
|
||||
|
||||
if (mlock(buf, TIMING_BUF_BYTES)) {
|
||||
bb_perror_msg("mlock");
|
||||
goto quit2;
|
||||
}
|
||||
|
||||
max_iterations = 1024;
|
||||
if (0 == do_blkgetsize(&blksize)) {
|
||||
max_iterations = blksize / (2 * 1024) / TIMING_BUF_MB;
|
||||
}
|
||||
max_iterations = do_blkgetsize() / (2 * 1024) / TIMING_BUF_MB;
|
||||
|
||||
/* Clear out the device request queues & give them time to complete */
|
||||
sync();
|
||||
sleep(2);
|
||||
if (flag == 0) { /* Time cache */
|
||||
if (seek_to_zero())
|
||||
goto quit;
|
||||
seek_to_zero();
|
||||
if (read_big_block(buf))
|
||||
goto quit;
|
||||
printf(" Timing buffer-cache reads: ");
|
||||
@ -1334,12 +1413,13 @@ static void do_time(int flag /*,int fd*/)
|
||||
* getitimer() is used rather than gettimeofday() because
|
||||
* it is much more consistent (on my machine, at least).
|
||||
*/
|
||||
//TODO: get rid of
|
||||
setitimer(ITIMER_REAL, &thousand, NULL);
|
||||
/* Now do the timing */
|
||||
do {
|
||||
++iterations;
|
||||
if ((flag == 0) && seek_to_zero())
|
||||
goto quit;
|
||||
if (flag == 0)
|
||||
seek_to_zero();
|
||||
if (read_big_block(buf))
|
||||
goto quit;
|
||||
getitimer(ITIMER_REAL, &itv);
|
||||
@ -1351,8 +1431,7 @@ static void do_time(int flag /*,int fd*/)
|
||||
/* Now remove the lseek() and getitimer() overheads from the elapsed time */
|
||||
setitimer(ITIMER_REAL, &thousand, NULL);
|
||||
do {
|
||||
if (seek_to_zero())
|
||||
goto quit;
|
||||
seek_to_zero();
|
||||
getitimer(ITIMER_REAL, &itv);
|
||||
elapsed2 = (1000 - itv.it_value.tv_sec) * 1000000
|
||||
- itv.it_value.tv_usec;
|
||||
@ -1365,7 +1444,7 @@ static void do_time(int flag /*,int fd*/)
|
||||
quit:
|
||||
munlock(buf, TIMING_BUF_BYTES);
|
||||
quit2:
|
||||
RELEASE_CONFIG_BUFFER(buf);
|
||||
free(buf);
|
||||
}
|
||||
|
||||
#if ENABLE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF
|
||||
@ -1851,6 +1930,7 @@ static int fromhex(unsigned char c)
|
||||
bb_error_msg_and_die("bad char: '%c' 0x%02x", c, c);
|
||||
}
|
||||
|
||||
static void identify_from_stdin(void) ATTRIBUTE_NORETURN;
|
||||
static void identify_from_stdin(void)
|
||||
{
|
||||
uint16_t sbuf[256];
|
||||
@ -1872,6 +1952,8 @@ static void identify_from_stdin(void)
|
||||
|
||||
identify(sbuf);
|
||||
}
|
||||
#else
|
||||
void identify_from_stdin(void);
|
||||
#endif
|
||||
|
||||
/* busybox specific stuff */
|
||||
|
Loading…
Reference in New Issue
Block a user