Patchwork [09/26] dec_pci: simplify dec_pci.c by using pci_p2pbr

login
register
mail settings
Submitter Isaku Yamahata
Date March 16, 2011, 9:29 a.m.
Message ID <dff1920a090078855951b7801447da3bedf23369.1300266238.git.yamahata@valinux.co.jp>
Download mbox | patch
Permalink /patch/87204/
State New
Headers show

Comments

Isaku Yamahata - March 16, 2011, 9:29 a.m.
apply pci_p2pbr for dec_pci.c.

Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Blue Swirl <blauwirbel@gmail.com>
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
---
 hw/dec_pci.c |   49 ++++++++++++++-----------------------------------
 1 files changed, 14 insertions(+), 35 deletions(-)
Blue Swirl - March 19, 2011, 8:13 a.m.
On Wed, Mar 16, 2011 at 11:29 AM, Isaku Yamahata <yamahata@valinux.co.jp> wrote:
> apply pci_p2pbr for dec_pci.c.
>
> Cc: Michael S. Tsirkin <mst@redhat.com>
> Cc: Blue Swirl <blauwirbel@gmail.com>
> Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
> ---
>  hw/dec_pci.c |   49 ++++++++++++++-----------------------------------
>  1 files changed, 14 insertions(+), 35 deletions(-)
>
> diff --git a/hw/dec_pci.c b/hw/dec_pci.c
> index 3cc4f04..fbd1363 100644
> --- a/hw/dec_pci.c
> +++ b/hw/dec_pci.c
> @@ -29,6 +29,7 @@
>  #include "pci_host.h"
>  #include "pci_bridge.h"
>  #include "pci_internals.h"
> +#include "pci_p2pbr.h"
>
>  /* debug DEC */
>  //#define DEBUG_DEC
> @@ -50,42 +51,21 @@ static int dec_map_irq(void *opaque, PCIDevice *pci_dev, int irq_num)
>     return irq_num;
>  }
>
> -static int dec_21154_initfn(PCIDevice *dev)
> -{
> -    int rc;
> -
> -    rc = pci_bridge_initfn(dev);
> -    if (rc < 0) {
> -        return rc;
> -    }
> -
> -    pci_config_set_vendor_id(dev->config, PCI_VENDOR_ID_DEC);
> -    pci_config_set_device_id(dev->config, PCI_DEVICE_ID_DEC_21154);
> -    return 0;
> -}
> -
> -static PCIDeviceInfo dec_21154_pci_bridge_info = {
> -    .qdev.name = "dec-21154-p2p-bridge",
> -    .qdev.desc = "DEC 21154 PCI-PCI bridge",
> -    .qdev.size = sizeof(PCIBridge),
> -    .qdev.vmsd = &vmstate_pci_device,
> -    .qdev.reset = pci_bridge_reset,
> -    .init = dec_21154_initfn,
> -    .exit = pci_bridge_exitfn,
> -    .config_write = pci_bridge_write_config,
> -    .is_bridge = 1,
> -};
> -
>  PCIBus *pci_dec_21154_init(PCIBus *parent_bus, int devfn)
>  {
> -    PCIDevice *dev;
> -    PCIBridge *br;
> -
> -    dev = pci_create_multifunction(parent_bus, devfn, false,
> -                                   "dec-21154-p2p-bridge");
> -    br = DO_UPCAST(PCIBridge, dev, dev);
> -    pci_bridge_map_irq(br, "DEC 21154 PCI-PCI bridge", dec_map_irq);
> -    qdev_init_nofail(&dev->qdev);
> +    const PCIP2PBridgeInit init = {
> +        .bus = parent_bus,
> +        .devfn = devfn,
> +        .multifunction = false,
> +
> +        .bus_name = "DEC 21154 PCI-PCI bridge",
> +        .map_irq = dec_map_irq,
> +    };
> +    const PCIP2PBridgeProp prop = {
> +        .vendor_id = PCI_VENDOR_ID_DEC,
> +        .device_id = PCI_DEVICE_ID_DEC_21154,
> +    };

I'd make the above structures static.

> +    PCIBridge *br = pci_p2pbr_create_simple(&init, &prop);
>     return pci_bridge_get_sec_bus(br);
>  }
>
> @@ -127,7 +107,6 @@ static void dec_register_devices(void)
>     sysbus_register_dev("dec-21154", sizeof(DECState),
>                         pci_dec_21154_init_device);
>     pci_qdev_register(&dec_21154_pci_host_info);
> -    pci_qdev_register(&dec_21154_pci_bridge_info);
>  }
>
>  device_init(dec_register_devices)
> --
> 1.7.1.1
>
>

Patch

diff --git a/hw/dec_pci.c b/hw/dec_pci.c
index 3cc4f04..fbd1363 100644
--- a/hw/dec_pci.c
+++ b/hw/dec_pci.c
@@ -29,6 +29,7 @@ 
 #include "pci_host.h"
 #include "pci_bridge.h"
 #include "pci_internals.h"
+#include "pci_p2pbr.h"
 
 /* debug DEC */
 //#define DEBUG_DEC
@@ -50,42 +51,21 @@  static int dec_map_irq(void *opaque, PCIDevice *pci_dev, int irq_num)
     return irq_num;
 }
 
-static int dec_21154_initfn(PCIDevice *dev)
-{
-    int rc;
-
-    rc = pci_bridge_initfn(dev);
-    if (rc < 0) {
-        return rc;
-    }
-
-    pci_config_set_vendor_id(dev->config, PCI_VENDOR_ID_DEC);
-    pci_config_set_device_id(dev->config, PCI_DEVICE_ID_DEC_21154);
-    return 0;
-}
-
-static PCIDeviceInfo dec_21154_pci_bridge_info = {
-    .qdev.name = "dec-21154-p2p-bridge",
-    .qdev.desc = "DEC 21154 PCI-PCI bridge",
-    .qdev.size = sizeof(PCIBridge),
-    .qdev.vmsd = &vmstate_pci_device,
-    .qdev.reset = pci_bridge_reset,
-    .init = dec_21154_initfn,
-    .exit = pci_bridge_exitfn,
-    .config_write = pci_bridge_write_config,
-    .is_bridge = 1,
-};
-
 PCIBus *pci_dec_21154_init(PCIBus *parent_bus, int devfn)
 {
-    PCIDevice *dev;
-    PCIBridge *br;
-
-    dev = pci_create_multifunction(parent_bus, devfn, false,
-                                   "dec-21154-p2p-bridge");
-    br = DO_UPCAST(PCIBridge, dev, dev);
-    pci_bridge_map_irq(br, "DEC 21154 PCI-PCI bridge", dec_map_irq);
-    qdev_init_nofail(&dev->qdev);
+    const PCIP2PBridgeInit init = {
+        .bus = parent_bus,
+        .devfn = devfn,
+        .multifunction = false,
+
+        .bus_name = "DEC 21154 PCI-PCI bridge",
+        .map_irq = dec_map_irq,
+    };
+    const PCIP2PBridgeProp prop = {
+        .vendor_id = PCI_VENDOR_ID_DEC,
+        .device_id = PCI_DEVICE_ID_DEC_21154,
+    };
+    PCIBridge *br = pci_p2pbr_create_simple(&init, &prop);
     return pci_bridge_get_sec_bus(br);
 }
 
@@ -127,7 +107,6 @@  static void dec_register_devices(void)
     sysbus_register_dev("dec-21154", sizeof(DECState),
                         pci_dec_21154_init_device);
     pci_qdev_register(&dec_21154_pci_host_info);
-    pci_qdev_register(&dec_21154_pci_bridge_info);
 }
 
 device_init(dec_register_devices)