[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 04/12] hw/block/fdc: Expose internal header
From: |
Bernhard Beschow |
Subject: |
Re: [PATCH 04/12] hw/block/fdc: Expose internal header |
Date: |
Mon, 18 Dec 2023 18:53:09 +0000 |
Am 18. Dezember 2023 10:54:56 UTC schrieb BALATON Zoltan <balaton@eik.bme.hu>:
>On Sun, 17 Dec 2023, Bernhard Beschow wrote:
>> Am 17. Dezember 2023 15:47:33 UTC schrieb BALATON Zoltan
>> <balaton@eik.bme.hu>:
>>> On Sun, 17 Dec 2023, Bernhard Beschow wrote:
>>>> Exposing the internal header allows for exposing struct FDCtrlISABus which
>>>> is
>>>> encuraged by qdev guidelines.
>>>
>>> Hopefully the guidelines don't encourage this as object orientation indeed
>>> encourages object encapsulation so only the object itseld should poke its
>>> internals and other objects should use methods the change object state. In
>>> QOM some object states were exposed in public headers to allow embedding
>>> those objects in other objects becuase C needs the struct size to allow
>>> that. This was to simplify memory management so the embedded objects don't
>>> need to be tracked and freed but would be created and freed with the other
>>> object embedding it but this does not mean the other object should poke
>>> into these object or that this is a general guideline to expose internal
>>> object state. I'd say the exposed objects are an exception instead of
>>> recommended guideline and only allowed for objects that need to be embeded
>>> in others but generally object encapsulation would be better to preserve
>>> where possible. This patch exposes objects so others can poke into them
>>> which would make those other objects depe
>ndent on the implementation of these objects making these harder to chnage in
>the future so a better way may be to add methods to fdc and serial to allow
>changing their base address and map/unmap their ports and keep their internals
>unexposed.
>>
>> Each ISADevice sub class would need concenience methods as well as each
>> state class. This series touches three of each: fdc, parallel, serial. And
>> each of those need two convenience methods: set_enabled() and set_address().
>> This would add another 12 functions on top of the current ones.
>
>If all ISA devices need this then these should really be methods of ISADevice
>but since that's just an empty wrapper over devices each of which handles its
>own ports, the ISADevice does not know about those and since each device may
>have different ports and not all of them uses portio lists for this, moving
>port handling to ISADevice might be too big refactoring to do for this.
>Keeping these functions with the superio component devices so their
>implementation is kept private still worth it in my opinion so even if that
>adds 2 functions to superio component devices (which is not all ISA devices
>just a limited set) seems to be a better approach to me than breaking
>encapsulation of objects. These are simple access methods for internal object
>state which are common in object otiented programming.
>
>> Then ISASuperIODevice would require at least 6 more such methods (not
>> counting the unneeded ones for IDE which might be desirable for
>> consistency). So in the end we'd have at least 18 more methods. Is this
>> really worth it?
>
>We may do without these if we say superio is just a container of components so
>don't add forwarding methods but we can call the accessor methods of component
>objects from vt82c686.c. That's still better than reaching into object
>internals from foreign objects.
Version 2 is out which should address all of your comments.
Best regards,
Bernhard
>
>Regards,
>BALATON Zoltan
>
>> I didn't feel very comfortable going this route, so ended up with the
>> current solution poking the states directly. I'm open to different
>> approaches including the one above but I'd really like to know the opinion
>> of the maintainers, too.
>>
>> Best regards,
>> Bernhard
>>
>>>
>>> Regards,
>>> BALATON Zoltan
>>>
>>>> Signed-off-by: Bernhard Beschow <shentey@gmail.com>
>>>> ---
>>>> MAINTAINERS | 2 +-
>>>> hw/block/fdc-internal.h => include/hw/block/fdc.h | 4 ++--
>>>> hw/block/fdc-isa.c | 2 +-
>>>> hw/block/fdc-sysbus.c | 2 +-
>>>> hw/block/fdc.c | 2 +-
>>>> 5 files changed, 6 insertions(+), 6 deletions(-)
>>>> rename hw/block/fdc-internal.h => include/hw/block/fdc.h (98%)
>>>>
>>>> diff --git a/MAINTAINERS b/MAINTAINERS
>>>> index b4718fcf59..939f518701 100644
>>>> --- a/MAINTAINERS
>>>> +++ b/MAINTAINERS
>>>> @@ -1945,9 +1945,9 @@ M: John Snow <jsnow@redhat.com>
>>>> L: qemu-block@nongnu.org
>>>> S: Odd Fixes
>>>> F: hw/block/fdc.c
>>>> -F: hw/block/fdc-internal.h
>>>> F: hw/block/fdc-isa.c
>>>> F: hw/block/fdc-sysbus.c
>>>> +F: include/hw/block/fdc.h
>>>> F: include/hw/block/fdc-isa.h
>>>> F: tests/qtest/fdc-test.c
>>>> T: git https://gitlab.com/jsnow/qemu.git ide
>>>> diff --git a/hw/block/fdc-internal.h b/include/hw/block/fdc.h
>>>> similarity index 98%
>>>> rename from hw/block/fdc-internal.h
>>>> rename to include/hw/block/fdc.h
>>>> index 1728231a26..acca7e0d0e 100644
>>>> --- a/hw/block/fdc-internal.h
>>>> +++ b/include/hw/block/fdc.h
>>>> @@ -22,8 +22,8 @@
>>>> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
>>>> IN
>>>> * THE SOFTWARE.
>>>> */
>>>> -#ifndef HW_BLOCK_FDC_INTERNAL_H
>>>> -#define HW_BLOCK_FDC_INTERNAL_H
>>>> +#ifndef HW_BLOCK_FDC_H
>>>> +#define HW_BLOCK_FDC_H
>>>>
>>>> #include "exec/memory.h"
>>>> #include "exec/ioport.h"
>>>> diff --git a/hw/block/fdc-isa.c b/hw/block/fdc-isa.c
>>>> index 6387dc94fa..7058d4118f 100644
>>>> --- a/hw/block/fdc-isa.c
>>>> +++ b/hw/block/fdc-isa.c
>>>> @@ -39,6 +39,7 @@
>>>> #include "hw/qdev-properties-system.h"
>>>> #include "migration/vmstate.h"
>>>> #include "hw/block/block.h"
>>>> +#include "hw/block/fdc.h"
>>>> #include "sysemu/block-backend.h"
>>>> #include "sysemu/blockdev.h"
>>>> #include "sysemu/sysemu.h"
>>>> @@ -47,7 +48,6 @@
>>>> #include "qemu/module.h"
>>>> #include "trace.h"
>>>> #include "qom/object.h"
>>>> -#include "fdc-internal.h"
>>>>
>>>> OBJECT_DECLARE_SIMPLE_TYPE(FDCtrlISABus, ISA_FDC)
>>>>
>>>> diff --git a/hw/block/fdc-sysbus.c b/hw/block/fdc-sysbus.c
>>>> index f18f0d19b0..cff21c02b3 100644
>>>> --- a/hw/block/fdc-sysbus.c
>>>> +++ b/hw/block/fdc-sysbus.c
>>>> @@ -28,8 +28,8 @@
>>>> #include "qom/object.h"
>>>> #include "hw/sysbus.h"
>>>> #include "hw/block/fdc-isa.h"
>>>> +#include "hw/block/fdc.h"
>>>> #include "migration/vmstate.h"
>>>> -#include "fdc-internal.h"
>>>> #include "trace.h"
>>>>
>>>> #define TYPE_SYSBUS_FDC "base-sysbus-fdc"
>>>> diff --git a/hw/block/fdc.c b/hw/block/fdc.c
>>>> index 2bd6d925b5..0e2fa527f9 100644
>>>> --- a/hw/block/fdc.c
>>>> +++ b/hw/block/fdc.c
>>>> @@ -39,6 +39,7 @@
>>>> #include "hw/qdev-properties-system.h"
>>>> #include "migration/vmstate.h"
>>>> #include "hw/block/block.h"
>>>> +#include "hw/block/fdc.h"
>>>> #include "sysemu/block-backend.h"
>>>> #include "sysemu/blockdev.h"
>>>> #include "sysemu/sysemu.h"
>>>> @@ -47,7 +48,6 @@
>>>> #include "qemu/module.h"
>>>> #include "trace.h"
>>>> #include "qom/object.h"
>>>> -#include "fdc-internal.h"
>>>>
>>>> /********************************************************/
>>>> /* debug Floppy devices */
>>>>
>>
>>
[PATCH 05/12] hw/block/fdc: Move constant #define to where it is imposed, Bernhard Beschow, 2023/12/17
[PATCH 06/12] hw/block/fdc-isa: Expose struct FDCtrlISABus, Bernhard Beschow, 2023/12/17
[PATCH 08/12] hw/char/serial-isa: Export struct ISASerialState, Bernhard Beschow, 2023/12/17
[PATCH 07/12] MAINTAINERS: Add include/hw/char/serial*.h to the "PC Chipset" section, Bernhard Beschow, 2023/12/17
[PATCH 09/12] exec/ioport: Resolve redundant .base attribute in struct MemoryRegionPortio, Bernhard Beschow, 2023/12/17
[PATCH 10/12] exec/ioport: Add portio_list_set_address(), Bernhard Beschow, 2023/12/17
[PATCH 11/12] exec/ioport: Add portio_list_set_enabled(), Bernhard Beschow, 2023/12/17
[PATCH 12/12] hw/isa/vt82c686: Implement relocation of SuperI/O functions, Bernhard Beschow, 2023/12/17