On 10/28/2025 6:46 PM, Paolo Bonzini wrote: > On Tue, Oct 28, 2025 at 11:18 AM chenmiao <[email protected]> wrote: >> To better implement the Rust PCF8574 bindings, move its struct definition to >> the header file. > This should not be needed, the struct is entirely hidden within the C > implementation and the same should be true for the Rust one. > > Paolo
Ok, delete it in subsequent versions. Chen Miao >> Signed-off-by: chenmiao <[email protected]> >> --- >> hw/gpio/pcf8574.c | 32 -------------------------------- >> include/hw/gpio/pcf8574.h | 36 ++++++++++++++++++++++++++++++++++++ >> 2 files changed, 36 insertions(+), 32 deletions(-) >> >> diff --git a/hw/gpio/pcf8574.c b/hw/gpio/pcf8574.c >> index 274b44bb61..670fc006bb 100644 >> --- a/hw/gpio/pcf8574.c >> +++ b/hw/gpio/pcf8574.c >> @@ -15,38 +15,6 @@ >> #include "qemu/module.h" >> #include "qom/object.h" >> >> -/* >> - * PCF8574 and compatible chips incorporate quasi-bidirectional >> - * IO. Electrically it means that device sustain pull-up to line >> - * unless IO port is configured as output _and_ driven low. >> - * >> - * IO access is implemented as simple I2C single-byte read >> - * or write operation. So, to configure line to input user write 1 >> - * to corresponding bit. To configure line to output and drive it low >> - * user write 0 to corresponding bit. >> - * >> - * In essence, user can think of quasi-bidirectional IO as >> - * open-drain line, except presence of builtin rising edge acceleration >> - * embedded in PCF8574 IC >> - * >> - * PCF8574 has interrupt request line, which is being pulled down when >> - * port line state differs from last read. Port read operation clears >> - * state and INT line returns to high state via pullup. >> - */ >> - >> -OBJECT_DECLARE_SIMPLE_TYPE(PCF8574State, PCF8574) >> - >> -#define PORTS_COUNT (8) >> - >> -struct PCF8574State { >> - I2CSlave parent_obj; >> - uint8_t lastrq; /* Last requested state. If changed - assert irq */ >> - uint8_t input; /* external electrical line state */ >> - uint8_t output; /* Pull-up (1) or drive low (0) on bit */ >> - qemu_irq handler[PORTS_COUNT]; >> - qemu_irq intrq; /* External irq request */ >> -}; >> - >> static void pcf8574_reset(DeviceState *dev) >> { >> PCF8574State *s = PCF8574(dev); >> diff --git a/include/hw/gpio/pcf8574.h b/include/hw/gpio/pcf8574.h >> index 3291d7dbbc..fe1ce891b7 100644 >> --- a/include/hw/gpio/pcf8574.h >> +++ b/include/hw/gpio/pcf8574.h >> @@ -10,6 +10,42 @@ >> #ifndef _HW_GPIO_PCF8574 >> #define _HW_GPIO_PCF8574 >> >> +#include "qemu/osdep.h" >> +#include "hw/i2c/i2c.h" >> +#include "qom/object.h" >> + >> #define TYPE_PCF8574 "pcf8574" >> >> +/* >> + * PCF8574 and compatible chips incorporate quasi-bidirectional >> + * IO. Electrically it means that device sustain pull-up to line >> + * unless IO port is configured as output _and_ driven low. >> + * >> + * IO access is implemented as simple I2C single-byte read >> + * or write operation. So, to configure line to input user write 1 >> + * to corresponding bit. To configure line to output and drive it low >> + * user write 0 to corresponding bit. >> + * >> + * In essence, user can think of quasi-bidirectional IO as >> + * open-drain line, except presence of builtin rising edge acceleration >> + * embedded in PCF8574 IC >> + * >> + * PCF8574 has interrupt request line, which is being pulled down when >> + * port line state differs from last read. Port read operation clears >> + * state and INT line returns to high state via pullup. >> + */ >> + >> +OBJECT_DECLARE_SIMPLE_TYPE(PCF8574State, PCF8574) >> + >> +#define PORTS_COUNT (8) >> + >> +struct PCF8574State { >> + I2CSlave parent_obj; >> + uint8_t lastrq; /* Last requested state. If changed - assert irq */ >> + uint8_t input; /* external electrical line state */ >> + uint8_t output; /* Pull-up (1) or drive low (0) on bit */ >> + qemu_irq handler[PORTS_COUNT]; >> + qemu_irq intrq; /* External irq request */ >> +}; >> + >> #endif /* _HW_GPIO_PCF8574 */ >> -- >> 2.43.0 >>
