qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2 00/14] Make Q35 devices closer to Qemu object model.
@ 2016-06-22 12:24 Efimov Vasily
  2016-06-22 12:24 ` [Qemu-devel] [PATCH v2 01/14] ide: move headers to include folder Efimov Vasily
                   ` (14 more replies)
  0 siblings, 15 replies; 17+ messages in thread
From: Efimov Vasily @ 2016-06-22 12:24 UTC (permalink / raw)
  To: qemu-devel
  Cc: Efimov Vasily, John Snow, qemu-block, Gerd Hoffmann,
	Michael S. Tsirkin, Kevin Wolf, Max Reitz, Paolo Bonzini,
	Richard Henderson, Eduardo Habkost, Hervé Poussineau,
	Markus Armbruster, Marcel Apfelbaum, Peter Maydell,
	Kirill Batuzov

The patch series makes several devices closer to Qemu object model.

I am developing a tool that automatize creation of device and machine models.

Recently, I've take part in development of several models. And I noticed that
a significant part of code is same. The examples are:
- Each device represented by a header and a source.
- The device or machine class is described by a set of callbacks containing in
TypeInfo structure.
- Each TypeInfo structure is accounted by a register function.
- A register function is sheduled by a type_init macro.
- Class and state structures of an inherited type are prepended by ones of the
parent type.
- A device must have VM state description.
- A device or a machine can have properties.
- A device can use internal APIs such as: timer, chardev, blockdev, IRQ,
system bys memory and port mapping, PCI BARs, PCI MSI(X), etc.
- A machine consists of devices and memory tree. Devices are linked by IRQs and
buses and assigned property values.
- All of the above should follow the Qemu coding style.

For every listed item can be generated a stub code. All stubs can be generated
with respect to each other forming compileable device (or machine). Ideally,
a programmer have to implement custom device/machine logic and to assign
meaningful names to variables, functions, macroses etc. using a refactoring
tool.

Of cource, a device/machine description for the tool has to be significantly
smaller than the code the tool produced. A GUI constructor is preferred too.

I've chosed Q35 machine to test the tool. The Q35 is one of the most 
complex boards. I have implemented 64-bit CPU, soft MMU, 1GB RAM, 1 HDD,
PCI, USB machine variant. Most of devices is instantiated using the object
model. Some logic (I/O port 80, I/O port F0, A20 line) is dedicated to new
devices. The stubs for thay is also generated by the tool.

In course of implementing Q35 I've noticed that some device models does not
follow Qemu object model close enough. The patch series is desined to make them
closer.

Change log:

v1 -> v2:
A patch was added after 11-th one. The patch introduces function
isa_connect_gpio_out needed by new version of consequent patch.

 01: Git global option diff.renames was set true to generate the patch avoiding
checkpatch.pl issues.

 02, 05: qdev_prop_allow_set_link_before_realize is used instead of
object_property_allow_set_link.

 07, 08: Named GPIO was used for a20 line.

 10, 11: The patches were rebased against the patch series
https://lists.gnu.org/archive/html/qemu-devel/2016-06/msg05619.html

 10: Named GPIO is used for gsi. The name is "gsi" with alias ICH9_GPIO_GSI.

 12: It's a new patch. The patch introduces function isa_connect_gpio_out.

 13 (previously 12): Use isa_connect_gpio_out instead of isa_init_irq.


Efimov Vasily (14):
  ide: move headers to include folder
  pcspk: convert "pit" property type from ptr to link
  vmport: identify vmport type by macro TYPE_VMPORT
  pflash: make TYPE_CFI_PFLASH0{1,2} macros public
  Q35: implement property interfece to several parameters
  pc_q35: configure Q35 instance using properties
  pckbd: handle A20 IRQ as GPIO
  port92: handle A20 IRQ as GPIO
  ICH9 SMB: make TYPE_ICH9_SMB_DEVICE macro public
  ICH9 LPC: handle GSI as qdev GPIO
  ICH9 LPC: move call of isa_bus_irqs to 'realize' method
  isa: introduce wrapper isa_connect_gpio_out
  MC146818 RTC: add GPIO access to output IRQ
  ICH9 LPC: configure PCI IRQs routing internally

 hw/audio/pcspk.c                  |  9 +++++++--
 hw/block/pflash_cfi01.c           |  1 -
 hw/block/pflash_cfi02.c           |  1 -
 hw/i2c/smbus_ich9.c               |  1 -
 hw/i386/pc.c                      | 10 +++++-----
 hw/i386/pc_q35.c                  | 30 +++++++++++++++++-------------
 hw/ide/ahci.c                     |  2 +-
 hw/input/pckbd.c                  | 21 +++++++--------------
 hw/isa/isa-bus.c                  |  7 +++++++
 hw/isa/lpc_ich9.c                 | 15 ++++++++++++---
 hw/misc/vmport.c                  |  1 -
 hw/pci-host/q35.c                 | 20 ++++++++++++++++++++
 hw/timer/mc146818rtc.c            |  6 ++++--
 include/hw/audio/pcspk.h          |  2 +-
 include/hw/block/flash.h          |  3 +++
 include/hw/i386/ich9.h            |  9 +++++----
 include/hw/i386/pc.h              |  8 +++++++-
 {hw => include/hw}/ide/ahci.h     |  0
 {hw => include/hw}/ide/internal.h |  0
 {hw => include/hw}/ide/pci.h      |  0
 include/hw/isa/isa.h              |  1 +
 include/hw/pci-host/q35.h         |  5 +++++
 22 files changed, 102 insertions(+), 50 deletions(-)
 rename {hw => include/hw}/ide/ahci.h (100%)
 rename {hw => include/hw}/ide/internal.h (100%)
 rename {hw => include/hw}/ide/pci.h (100%)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2016-06-22 18:27 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-22 12:24 [Qemu-devel] [PATCH v2 00/14] Make Q35 devices closer to Qemu object model Efimov Vasily
2016-06-22 12:24 ` [Qemu-devel] [PATCH v2 01/14] ide: move headers to include folder Efimov Vasily
2016-06-22 12:24 ` [Qemu-devel] [PATCH v2 02/14] pcspk: convert "pit" property type from ptr to link Efimov Vasily
2016-06-22 12:24 ` [Qemu-devel] [PATCH v2 03/14] vmport: identify vmport type by macro TYPE_VMPORT Efimov Vasily
2016-06-22 12:24 ` [Qemu-devel] [PATCH v2 04/14] pflash: make TYPE_CFI_PFLASH0{1, 2} macros public Efimov Vasily
2016-06-22 12:24 ` [Qemu-devel] [PATCH v2 05/14] Q35: implement property interfece to several parameters Efimov Vasily
2016-06-22 12:24 ` [Qemu-devel] [PATCH v2 06/14] pc_q35: configure Q35 instance using properties Efimov Vasily
2016-06-22 12:24 ` [Qemu-devel] [PATCH v2 07/14] pckbd: handle A20 IRQ as GPIO Efimov Vasily
2016-06-22 12:24 ` [Qemu-devel] [PATCH v2 08/14] port92: " Efimov Vasily
2016-06-22 12:24 ` [Qemu-devel] [PATCH v2 09/14] ICH9 SMB: make TYPE_ICH9_SMB_DEVICE macro public Efimov Vasily
2016-06-22 12:24 ` [Qemu-devel] [PATCH v2 10/14] ICH9 LPC: handle GSI as qdev GPIO Efimov Vasily
2016-06-22 12:24 ` [Qemu-devel] [PATCH v2 11/14] ICH9 LPC: move call of isa_bus_irqs to 'realize' method Efimov Vasily
2016-06-22 12:24 ` [Qemu-devel] [PATCH v2 12/14] isa: introduce wrapper isa_connect_gpio_out Efimov Vasily
2016-06-22 12:24 ` [Qemu-devel] [PATCH v2 13/14] MC146818 RTC: add GPIO access to output IRQ Efimov Vasily
2016-06-22 12:24 ` [Qemu-devel] [PATCH v2 14/14] ICH9 LPC: configure PCI IRQs routing internally Efimov Vasily
2016-06-22 13:24 ` [Qemu-devel] [PATCH v2 00/14] Make Q35 devices closer to Qemu object model Paolo Bonzini
2016-06-22 18:27   ` Michael S. Tsirkin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).