diff mbox series

e1000: Configure ResettableClass

Message ID 20221125140828.56636-1-akihiko.odaki@daynix.com
State New
Headers show
Series e1000: Configure ResettableClass | expand

Commit Message

Akihiko Odaki Nov. 25, 2022, 2:08 p.m. UTC
This is part of recent efforts of refactoring e1000 and e1000e.

DeviceClass's reset member is deprecated so migrate to ResettableClass.
Thre is no behavioral difference.

Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
---
 hw/net/e1000.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

Comments

Peter Maydell Nov. 25, 2022, 2:17 p.m. UTC | #1
On Fri, 25 Nov 2022 at 14:09, Akihiko Odaki <akihiko.odaki@daynix.com> wrote:
>
> This is part of recent efforts of refactoring e1000 and e1000e.
>
> DeviceClass's reset member is deprecated so migrate to ResettableClass.
> Thre is no behavioral difference.
>
> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
> ---
>  hw/net/e1000.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/hw/net/e1000.c b/hw/net/e1000.c
> index e26e0a64c1..f97610d7e1 100644
> --- a/hw/net/e1000.c
> +++ b/hw/net/e1000.c
> @@ -1746,9 +1746,9 @@ static void pci_e1000_realize(PCIDevice *pci_dev, Error **errp)
>                                          e1000_flush_queue_timer, d);
>  }
>
> -static void qdev_e1000_reset(DeviceState *dev)
> +static void qdev_e1000_reset(Object *obj)
>  {
> -    E1000State *d = E1000(dev);
> +    E1000State *d = E1000(obj);
>      e1000_reset(d);
>  }

This function doesn't actually do anything except
call e1000_reset(), which is not called from
anywhere else. So we should:
 * delete this function entirely
 * update e1000_reset() to be named e1000_reset_hold() and
   to have the prototype for a reset phase function
 * directly set rc->phases.hold to e1000_reset_hold

As well as being less code, this avoids having a
function named "e1000_reset()" that gives the
impression that you can do device reset by calling
one function. That might be true now but if we ever
need to add something to the other 2 phases of reset
then it would stop being true.

thanks
-- PMM
diff mbox series

Patch

diff --git a/hw/net/e1000.c b/hw/net/e1000.c
index e26e0a64c1..f97610d7e1 100644
--- a/hw/net/e1000.c
+++ b/hw/net/e1000.c
@@ -1746,9 +1746,9 @@  static void pci_e1000_realize(PCIDevice *pci_dev, Error **errp)
                                         e1000_flush_queue_timer, d);
 }
 
-static void qdev_e1000_reset(DeviceState *dev)
+static void qdev_e1000_reset(Object *obj)
 {
-    E1000State *d = E1000(dev);
+    E1000State *d = E1000(obj);
     e1000_reset(d);
 }
 
@@ -1777,6 +1777,7 @@  typedef struct E1000Info {
 static void e1000_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
+    ResettableClass *rc = RESETTABLE_CLASS(klass);
     PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
     E1000BaseClass *e = E1000_CLASS(klass);
     const E1000Info *info = data;
@@ -1789,9 +1790,9 @@  static void e1000_class_init(ObjectClass *klass, void *data)
     k->revision = info->revision;
     e->phy_id2 = info->phy_id2;
     k->class_id = PCI_CLASS_NETWORK_ETHERNET;
+    rc->phases.hold = qdev_e1000_reset;
     set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
     dc->desc = "Intel Gigabit Ethernet";
-    dc->reset = qdev_e1000_reset;
     dc->vmsd = &vmstate_e1000;
     device_class_set_props(dc, e1000_properties);
 }