summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dmidecode.c31
-rw-r--r--dmiopt.c7
-rw-r--r--dmiopt.h1
3 files changed, 25 insertions, 14 deletions
diff --git a/dmidecode.c b/dmidecode.c
index 6be915e..55ac64f 100644
--- a/dmidecode.c
+++ b/dmidecode.c
@@ -3769,10 +3769,10 @@ static void dmi_table(u32 base, u16 len, u16 num, u16 ver, const char *devmem)
u8 *data;
int i=0;
- printf("%u structures occupying %u bytes.\n",
- num, len);
- printf("Table at 0x%08X.\n",
- base);
+ if(!(opt.flags & FLAG_QUIET))
+ printf("%u structures occupying %u bytes.\n"
+ "Table at 0x%08X.\n",
+ num, len, base);
if((buf=mem_chunk(base, len, devmem))==NULL)
{
@@ -3787,9 +3787,10 @@ static void dmi_table(u32 base, u16 len, u16 num, u16 ver, const char *devmem)
{
u8 *next;
struct dmi_header *h=(struct dmi_header *)data;
- int display=(opt.type==NULL || opt.type[h->type]);
+ int display=((opt.type==NULL || opt.type[h->type])
+ && !((opt.flags & FLAG_QUIET) && h->type>=126));
- if(display)
+ if(display && !(opt.flags & FLAG_QUIET))
printf("Handle 0x%04X\n\tDMI type %d, %d bytes.\n",
HANDLE(h), h->type, h->length);
@@ -3832,8 +3833,9 @@ static int smbios_decode(u8 *buf, const char *devmem)
&& memcmp(buf+0x10, "_DMI_", 5)==0
&& checksum(buf+0x10, 0x0F))
{
- printf("SMBIOS %u.%u present.\n",
- buf[0x06], buf[0x07]);
+ if(!(opt.flags & FLAG_QUIET))
+ printf("SMBIOS %u.%u present.\n",
+ buf[0x06], buf[0x07]);
dmi_table(DWORD(buf+0x18), WORD(buf+0x16), WORD(buf+0x1C),
(buf[0x06]<<8)+buf[0x07], devmem);
return 1;
@@ -3847,8 +3849,9 @@ static int legacy_decode(u8 *buf, const char *devmem)
{
if(checksum(buf, 0x0F))
{
- printf("Legacy DMI %u.%u present.\n",
- buf[0x0E]>>4, buf[0x0E]&0x0F);
+ if(!(opt.flags & FLAG_QUIET))
+ printf("Legacy DMI %u.%u present.\n",
+ buf[0x0E]>>4, buf[0x0E]&0x0F);
dmi_table(DWORD(buf+0x08), WORD(buf+0x06), WORD(buf+0x0C),
((buf[0x0E]&0xF0)<<4)+(buf[0x0E]&0x0F), devmem);
return 1;
@@ -3898,7 +3901,8 @@ int main(int argc, char * const argv[])
goto exit_free;
}
- printf("# dmidecode %s\n", VERSION);
+ if(!(opt.flags & FLAG_QUIET))
+ printf("# dmidecode %s\n", VERSION);
#ifdef USE_EFI
/*
@@ -3920,7 +3924,8 @@ int main(int argc, char * const argv[])
if(strcmp(linebuf, "SMBIOS")==0)
{
fp=strtoul(addr, NULL, 0);
- printf("# SMBIOS entry point at 0x%08lx\n", fp);
+ if(!(opt.flags & FLAG_QUIET))
+ printf("# SMBIOS entry point at 0x%08lx\n", fp);
}
}
if(fclose(efi_systab)!=0)
@@ -3967,7 +3972,7 @@ int main(int argc, char * const argv[])
free(buf);
#endif /* USE_EFI */
- if(!found)
+ if(!found && !(opt.flags & FLAG_QUIET))
printf("# No SMBIOS nor DMI entry point found, sorry.\n");
exit_free:
diff --git a/dmiopt.c b/dmiopt.c
index 480b325..cf397ec 100644
--- a/dmiopt.c
+++ b/dmiopt.c
@@ -122,10 +122,11 @@ exit_free:
int parse_command_line(int argc, char * const argv[])
{
int option;
- const char *optstring = "d:ht:uV";
+ const char *optstring = "d:hqt:uV";
struct option longopts[]={
{ "dev-mem", required_argument, NULL, 'd' },
{ "help", no_argument, NULL, 'h' },
+ { "quiet", no_argument, NULL, 'q' },
{ "type", required_argument, NULL, 't' },
{ "dump", no_argument, NULL, 'u' },
{ "version", no_argument, NULL, 'V' },
@@ -141,6 +142,9 @@ int parse_command_line(int argc, char * const argv[])
case 'h':
opt.flags|=FLAG_HELP;
break;
+ case 'q':
+ opt.flags|=FLAG_QUIET;
+ break;
case 't':
opt.type=parse_opt_type(opt.type, optarg);
if(opt.type==NULL)
@@ -167,6 +171,7 @@ void print_help(void)
"Options are:\n"
" -d, --dev-mem FILE Read memory from device FILE (default: " DEFAULT_MEM_DEV ")\n"
" -h, --help Display this help text and exit\n"
+ " -q, --quiet Less verbose output\n"
" -t, --type TYPE Only display the entries of given type\n"
" -u, --dump Do not decode the entries\n"
" -V, --version Display the version and exit\n";
diff --git a/dmiopt.h b/dmiopt.h
index 7ab0b70..db03721 100644
--- a/dmiopt.h
+++ b/dmiopt.h
@@ -30,6 +30,7 @@ extern struct opt opt;
#define FLAG_VERSION (1<<0)
#define FLAG_HELP (1<<1)
#define FLAG_DUMP (1<<2)
+#define FLAG_QUIET (1<<3)
int parse_command_line(int argc, char * const argv[]);
void print_help(void);