qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH V5 09/29] pci: clean up of pci_default_read_config.


From: Isaku Yamahata
Subject: [Qemu-devel] [PATCH V5 09/29] pci: clean up of pci_default_read_config.
Date: Fri, 9 Oct 2009 15:28:42 +0900

This patch cleans up pci_default_read_config() removing
ugly length and range check.

Suggesed by "Michael S. Tsirkin" <address@hidden>
Signed-off-by: Isaku Yamahata <address@hidden>
---
 hw/pci.c |   26 +++++---------------------
 1 files changed, 5 insertions(+), 21 deletions(-)

diff --git a/hw/pci.c b/hw/pci.c
index 634899a..755ebad 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -558,27 +558,11 @@ static void pci_update_mappings(PCIDevice *d)
 uint32_t pci_default_read_config(PCIDevice *d,
                                  uint32_t address, int len)
 {
-    uint32_t val;
-
-    switch(len) {
-    default:
-    case 4:
-       if (address <= 0xfc) {
-            val = pci_get_long(d->config + address);
-           break;
-       }
-       /* fall through */
-    case 2:
-        if (address <= 0xfe) {
-            val = pci_get_word(d->config + address);
-           break;
-       }
-       /* fall through */
-    case 1:
-        val = pci_get_byte(d->config + address);
-        break;
-    }
-    return val;
+    uint32_t val = 0;
+    assert(len == 1 || len == 2 || len == 4);
+    len = MIN(len, PCI_CONFIG_SPACE_SIZE - address);
+    memcpy(&val, d->config + address, len);
+    return le32_to_cpu(val);
 }
 
 void pci_default_write_config(PCIDevice *d, uint32_t addr, uint32_t val, int l)
-- 
1.6.0.2





reply via email to

[Prev in Thread] Current Thread [Next in Thread]