]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Cleaned up extended lspci
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 6 Nov 2009 21:53:07 +0000 (22:53 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 6 Nov 2009 21:53:07 +0000 (22:53 +0100)
commands/lspci.c

index c5df7bb2023f9d151f14d1a2d86119c0a5ad9aad..3d3a9ac0c5e6f90031351e426755a99facd4c677 100644 (file)
@@ -115,6 +115,14 @@ grub_pci_get_class (int class, int subclass)
   return 0;
 }
 
+static const struct grub_arg_option options[] =
+  {
+    {"iospace", 'i', 0, "show I/O spaces", 0, 0},
+    {0, 0, 0, 0, 0, 0}
+  };
+
+static int iospace;
+
 static int NESTED_FUNC_ATTR
 grub_lspci_iter (int bus, int dev, int func, grub_pci_id_t pciid)
 {
@@ -144,42 +152,47 @@ grub_lspci_iter (int bus, int dev, int func, grub_pci_id_t pciid)
 
   grub_printf ("\n");
 
-  reg = 4;
-  for (i = 0; i < 6; i++)
+  if (iospace)
     {
-      grub_uint64_t space;
-      addr = grub_pci_make_address (dev, reg);
-      space = grub_pci_read (addr);
-
-      reg++;
-
-      if (space == 0)
-       continue;
-
-      switch (space & GRUB_PCI_ADDR_SPACE_MASK)
+      reg = 4;
+      for (i = 0; i < 6; i++)
        {
-       case GRUB_PCI_ADDR_SPACE_IO:
-         grub_printf ("IO space %d at 0x%llx\n", i,
-                      (unsigned long long) (space & GRUB_PCI_ADDR_IO_MASK));
-         break;
-       case GRUB_PCI_ADDR_SPACE_MEMORY:
-         if ((space & GRUB_PCI_ADDR_MEM_TYPE_MASK) 
-           == GRUB_PCI_ADDR_MEM_TYPE_64)
+         grub_uint64_t space;
+         addr = grub_pci_make_address (dev, reg);
+         space = grub_pci_read (addr);
+
+         reg++;
+         
+         if (space == 0)
+           continue;
+         
+         switch (space & GRUB_PCI_ADDR_SPACE_MASK)
            {
-             space |= grub_pci_make_address (dev, reg);
-             reg++;
-             grub_printf ("64-bit memory space %d at 0x%16llx [%s]\n", i,
-                          (unsigned long long) (space & GRUB_PCI_ADDR_MEM_MASK),
-                          space & GRUB_PCI_ADDR_MEM_PREFETCH
-                          ? "prefetchable" : "non-prefetchable");
-
+           case GRUB_PCI_ADDR_SPACE_IO:
+             grub_printf ("\tIO space %d at 0x%llx\n", i, (unsigned long long) 
+                          (space & GRUB_PCI_ADDR_IO_MASK));
+             break;
+           case GRUB_PCI_ADDR_SPACE_MEMORY:
+             if ((space & GRUB_PCI_ADDR_MEM_TYPE_MASK) 
+                 == GRUB_PCI_ADDR_MEM_TYPE_64)
+               {
+                 space |= grub_pci_make_address (dev, reg);
+                 reg++;
+                 grub_printf ("\t64-bit memory space %d at 0x0%16llx [%s]\n",
+                              i, (unsigned long long)
+                              (space & GRUB_PCI_ADDR_MEM_MASK),
+                              space & GRUB_PCI_ADDR_MEM_PREFETCH
+                              ? "prefetchable" : "non-prefetchable");
+                 
+               }
+             else
+               grub_printf ("\t32-bit memory space %d at 0x0%16llx [%s]\n", i,
+                            (unsigned long long) 
+                            (space & GRUB_PCI_ADDR_MEM_MASK),
+                            space & GRUB_PCI_ADDR_MEM_PREFETCH
+                            ? "prefetchable" : "non-prefetchable");
+             break;
            }
-         else
-           grub_printf ("32-bit memory space %d at 0x%16llx [%s]\n", i,
-                        (unsigned long long) (space & GRUB_PCI_ADDR_MEM_MASK),
-                        space & GRUB_PCI_ADDR_MEM_PREFETCH
-                        ? "prefetchable" : "non-prefetchable");
-         break;
        }
     }
 
@@ -188,23 +201,24 @@ grub_lspci_iter (int bus, int dev, int func, grub_pci_id_t pciid)
 }
 
 static grub_err_t
-grub_cmd_lspci (grub_command_t cmd __attribute__ ((unused)),
+grub_cmd_lspci (grub_extcmd_t cmd,
                int argc __attribute__ ((unused)),
                char **args __attribute__ ((unused)))
 {
+  iospace = cmd->state[0].set;
   grub_pci_iterate (grub_lspci_iter);
   return GRUB_ERR_NONE;
 }
 
-static grub_command_t cmd;
+static grub_extcmd_t cmd;
 
 GRUB_MOD_INIT(pci)
 {
-  cmd = grub_register_command ("lspci", grub_cmd_lspci,
-                              0, "List PCI devices");
+  cmd = grub_register_extcmd ("lspci", grub_cmd_lspci, GRUB_COMMAND_FLAG_BOTH,
+                             "lspci [-i]", "List PCI devices", options);
 }
 
 GRUB_MOD_FINI(pci)
 {
-  grub_unregister_command (cmd);
+  grub_unregister_extcmd (cmd);
 }