Patchwork [RFC/RFT,v1,1/2] audio/intel-hda: Fix Inheritance hierachy

login
register
mail settings
Submitter Peter Crosthwaite
Date May 24, 2013, 6:23 a.m.
Message ID <abf122693d4cd8bc89fef596be31e44c3b2855c8.1369376331.git.peter.crosthwaite@xilinx.com>
Download mbox | patch
Permalink /patch/246079/
State New
Headers show

Comments

Peter Crosthwaite - May 24, 2013, 6:23 a.m.
From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>

The ich6 and ich9 variants either need to inherit one from the other,
or both from a common base class, otherwise its not possible to create
a QOM cast macro for use by the shared implementation functions.
Went for option B, with a common base class.

Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---

 hw/audio/intel-hda.c | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)
Peter Crosthwaite - June 6, 2013, 5:14 a.m.
This is missing a hunk

@@ -1329,6 +1329,7 @@ static int intel_hda_and_codec_init(PCIBus *bus)
 static void intel_hda_register_types(void)
 {
     type_register_static(&hda_codec_bus_info);
+    type_register_static(&intel_hda_info);
     type_register_static(&intel_hda_info_ich6);
     type_register_static(&intel_hda_info_ich9);
     type_register_static(&hda_codec_device_type_info);


On Fri, May 24, 2013 at 4:23 PM,  <peter.crosthwaite@xilinx.com> wrote:
> From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>
> The ich6 and ich9 variants either need to inherit one from the other,
> or both from a common base class, otherwise its not possible to create
> a QOM cast macro for use by the shared implementation functions.
> Went for option B, with a common base class.
>
> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
> ---
>
>  hw/audio/intel-hda.c | 20 +++++++++++++-------
>  1 file changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/hw/audio/intel-hda.c b/hw/audio/intel-hda.c
> index 1016af0..8a34337 100644
> --- a/hw/audio/intel-hda.c
> +++ b/hw/audio/intel-hda.c
> @@ -189,6 +189,8 @@ struct IntelHDAState {
>      uint32_t msi;
>  };
>
> +#define TYPE_INTEL_HDA_GENERIC "intel-hda-generic"
> +
>  struct IntelHDAReg {
>      const char *name;      /* register name */
>      uint32_t   size;       /* size in bytes */
> @@ -1232,7 +1234,7 @@ static Property intel_hda_properties[] = {
>      DEFINE_PROP_END_OF_LIST(),
>  };
>
> -static void intel_hda_class_init_common(ObjectClass *klass)
> +static void intel_hda_class_init(ObjectClass *klass, void *data)
>  {
>      DeviceClass *dc = DEVICE_CLASS(klass);
>      PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
> @@ -1251,7 +1253,6 @@ static void intel_hda_class_init_ich6(ObjectClass *klass, void *data)
>      DeviceClass *dc = DEVICE_CLASS(klass);
>      PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
>
> -    intel_hda_class_init_common(klass);
>      k->device_id = 0x2668;
>      k->revision = 1;
>      dc->desc = "Intel HD Audio Controller (ich6)";
> @@ -1262,23 +1263,28 @@ static void intel_hda_class_init_ich9(ObjectClass *klass, void *data)
>      DeviceClass *dc = DEVICE_CLASS(klass);
>      PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
>
> -    intel_hda_class_init_common(klass);
>      k->device_id = 0x293e;
>      k->revision = 3;
>      dc->desc = "Intel HD Audio Controller (ich9)";
>  }
>
> -static const TypeInfo intel_hda_info_ich6 = {
> -    .name          = "intel-hda",
> +static const TypeInfo intel_hda_info = {
> +    .name          = TYPE_INTEL_HDA_GENERIC,
>      .parent        = TYPE_PCI_DEVICE,
>      .instance_size = sizeof(IntelHDAState),
> +    .class_init    = intel_hda_class_init,
> +    .abstract      = true,
> +};
> +
> +static const TypeInfo intel_hda_info_ich6 = {
> +    .name          = "intel-hda",
> +    .parent        = TYPE_INTEL_HDA_GENERIC,
>      .class_init    = intel_hda_class_init_ich6,
>  };
>
>  static const TypeInfo intel_hda_info_ich9 = {
>      .name          = "ich9-intel-hda",
> -    .parent        = TYPE_PCI_DEVICE,
> -    .instance_size = sizeof(IntelHDAState),
> +    .parent        = TYPE_INTEL_HDA_GENERIC,
>      .class_init    = intel_hda_class_init_ich9,
>  };
>
> --
> 1.8.3.rc1.44.gb387c77.dirty
>

Patch

diff --git a/hw/audio/intel-hda.c b/hw/audio/intel-hda.c
index 1016af0..8a34337 100644
--- a/hw/audio/intel-hda.c
+++ b/hw/audio/intel-hda.c
@@ -189,6 +189,8 @@  struct IntelHDAState {
     uint32_t msi;
 };
 
+#define TYPE_INTEL_HDA_GENERIC "intel-hda-generic"
+
 struct IntelHDAReg {
     const char *name;      /* register name */
     uint32_t   size;       /* size in bytes */
@@ -1232,7 +1234,7 @@  static Property intel_hda_properties[] = {
     DEFINE_PROP_END_OF_LIST(),
 };
 
-static void intel_hda_class_init_common(ObjectClass *klass)
+static void intel_hda_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
     PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
@@ -1251,7 +1253,6 @@  static void intel_hda_class_init_ich6(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
     PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
 
-    intel_hda_class_init_common(klass);
     k->device_id = 0x2668;
     k->revision = 1;
     dc->desc = "Intel HD Audio Controller (ich6)";
@@ -1262,23 +1263,28 @@  static void intel_hda_class_init_ich9(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
     PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
 
-    intel_hda_class_init_common(klass);
     k->device_id = 0x293e;
     k->revision = 3;
     dc->desc = "Intel HD Audio Controller (ich9)";
 }
 
-static const TypeInfo intel_hda_info_ich6 = {
-    .name          = "intel-hda",
+static const TypeInfo intel_hda_info = {
+    .name          = TYPE_INTEL_HDA_GENERIC,
     .parent        = TYPE_PCI_DEVICE,
     .instance_size = sizeof(IntelHDAState),
+    .class_init    = intel_hda_class_init,
+    .abstract      = true,
+};
+
+static const TypeInfo intel_hda_info_ich6 = {
+    .name          = "intel-hda",
+    .parent        = TYPE_INTEL_HDA_GENERIC,
     .class_init    = intel_hda_class_init_ich6,
 };
 
 static const TypeInfo intel_hda_info_ich9 = {
     .name          = "ich9-intel-hda",
-    .parent        = TYPE_PCI_DEVICE,
-    .instance_size = sizeof(IntelHDAState),
+    .parent        = TYPE_INTEL_HDA_GENERIC,
     .class_init    = intel_hda_class_init_ich9,
 };