From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=53788 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PojCx-0004we-BP for qemu-devel@nongnu.org; Sun, 13 Feb 2011 16:10:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PojCv-0004U4-3E for qemu-devel@nongnu.org; Sun, 13 Feb 2011 16:10:15 -0500 Received: from mail-vx0-f173.google.com ([209.85.220.173]:44605) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PojCu-0004Tr-UP for qemu-devel@nongnu.org; Sun, 13 Feb 2011 16:10:13 -0500 Received: by vxb40 with SMTP id 40so2284418vxb.4 for ; Sun, 13 Feb 2011 13:10:12 -0800 (PST) MIME-Version: 1.0 From: Blue Swirl Date: Sun, 13 Feb 2011 23:09:52 +0200 Message-ID: Content-Type: multipart/mixed; boundary=90e6ba53a2fa60b56f049c305b11 Subject: [Qemu-devel] [PATCH 2/4] vga-isa: convert to qdev List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel --90e6ba53a2fa60b56f049c305b11 Content-Type: text/plain; charset=UTF-8 Signed-off-by: Blue Swirl --- hw/pc.h | 8 +++++++- hw/vga-isa.c | 51 +++++++++++++++++++++++++++++++++++++++++++++------ hw/vga.c | 22 ++++++++++++++-------- hw/vga_int.h | 1 + 4 files changed, 67 insertions(+), 15 deletions(-) diff --git a/hw/pc.h b/hw/pc.h index 64a3a22..475484a 100644 --- a/hw/pc.h +++ b/hw/pc.h @@ -181,7 +181,13 @@ enum vga_retrace_method { extern enum vga_retrace_method vga_retrace_method; -int isa_vga_init(void); +static inline int isa_vga_init(void) +{ + isa_create_simple("isa-vga"); + + return 0; +} + int pci_vga_init(PCIBus *bus); int isa_vga_mm_init(target_phys_addr_t vram_base, target_phys_addr_t ctrl_base, int it_shift); diff --git a/hw/vga-isa.c b/hw/vga-isa.c index 3046054..fde0d56 100644 --- a/hw/vga-isa.c +++ b/hw/vga-isa.c @@ -29,16 +29,40 @@ #include "qemu-timer.h" #include "loader.h" -int isa_vga_init(void) +typedef struct ISAVGAState { + ISADevice dev; + struct VGACommonState state; +} ISAVGAState; + +static void vga_reset_isa(DeviceState *dev) { - VGACommonState *s; + ISAVGAState *d = container_of(dev, ISAVGAState, dev.qdev); + VGACommonState *s = &d->state; - s = qemu_mallocz(sizeof(*s)); + vga_common_reset(s); +} - vga_common_init(s, VGA_RAM_SIZE); - vga_init(s); - vmstate_register(NULL, 0, &vmstate_vga_common, s); +static int vga_initfn(ISADevice *dev) +{ + ISAVGAState *d = DO_UPCAST(ISAVGAState, dev, dev); + VGACommonState *s = &d->state; + int vga_io_memory; + vga_common_init(s, VGA_RAM_SIZE); + vga_io_memory = vga_init_io(s); + cpu_register_physical_memory(isa_mem_base + 0x000a0000, 0x20000, + vga_io_memory); + qemu_register_coalesced_mmio(isa_mem_base + 0x000a0000, 0x20000); + isa_init_ioport(dev, 0x3c0); + isa_init_ioport(dev, 0x3b4); + isa_init_ioport(dev, 0x3ba); + isa_init_ioport(dev, 0x3da); + isa_init_ioport(dev, 0x3c0); +#ifdef CONFIG_BOCHS_VBE + isa_init_ioport(dev, 0x1ce); + isa_init_ioport(dev, 0x1cf); + isa_init_ioport(dev, 0x1d0); +#endif /* CONFIG_BOCHS_VBE */ s->ds = graphic_console_init(s->update, s->invalidate, s->screen_dump, s->text_update, s); @@ -47,3 +71,18 @@ int isa_vga_init(void) rom_add_vga(VGABIOS_FILENAME); return 0; } + +static ISADeviceInfo vga_info = { + .qdev.name = "isa-vga", + .qdev.size = sizeof(ISAVGAState), + .qdev.vmsd = &vmstate_vga_common, + .qdev.reset = vga_reset_isa, + .qdev.no_user = 1, + .init = vga_initfn, +}; + +static void vga_register(void) +{ + isa_qdev_register(&vga_info); +} +device_init(vga_register) diff --git a/hw/vga.c b/hw/vga.c index e2151a2..fd492d0 100644 --- a/hw/vga.c +++ b/hw/vga.c @@ -2259,12 +2259,8 @@ void vga_common_init(VGACommonState *s, int vga_ram_size) } /* used by both ISA and PCI */ -void vga_init(VGACommonState *s) +int vga_init_io(VGACommonState *s) { - int vga_io_memory; - - qemu_register_reset(vga_reset, s); - register_ioport_write(0x3c0, 16, 1, vga_ioport_write, s); register_ioport_write(0x3b4, 2, 1, vga_ioport_write, s); @@ -2278,7 +2274,6 @@ void vga_init(VGACommonState *s) register_ioport_read(0x3d4, 2, 1, vga_ioport_read, s); register_ioport_read(0x3ba, 1, 1, vga_ioport_read, s); register_ioport_read(0x3da, 1, 1, vga_ioport_read, s); - s->bank_offset = 0; #ifdef CONFIG_BOCHS_VBE #if defined (TARGET_I386) @@ -2296,8 +2291,19 @@ void vga_init(VGACommonState *s) #endif #endif /* CONFIG_BOCHS_VBE */ - vga_io_memory = cpu_register_io_memory(vga_mem_read, vga_mem_write, s, - DEVICE_LITTLE_ENDIAN); + return cpu_register_io_memory(vga_mem_read, vga_mem_write, s, + DEVICE_LITTLE_ENDIAN); +} + +void vga_init(VGACommonState *s) +{ + int vga_io_memory; + + qemu_register_reset(vga_reset, s); + + s->bank_offset = 0; + + vga_io_memory = vga_init_io(s); cpu_register_physical_memory(isa_mem_base + 0x000a0000, 0x20000, vga_io_memory); qemu_register_coalesced_mmio(isa_mem_base + 0x000a0000, 0x20000); diff --git a/hw/vga_int.h b/hw/vga_int.h index 1067f2c..d2811bd 100644 --- a/hw/vga_int.h +++ b/hw/vga_int.h @@ -191,6 +191,7 @@ static inline int c6_to_8(int v) void vga_common_init(VGACommonState *s, int vga_ram_size); void vga_init(VGACommonState *s); +int vga_init_io(VGACommonState *s); void vga_common_reset(VGACommonState *s); void vga_dirty_log_start(VGACommonState *s); -- 1.6.2.4 --90e6ba53a2fa60b56f049c305b11 Content-Type: application/mbox; name="0002-vga-isa-convert-to-qdev.patch" Content-Disposition: attachment; filename="0002-vga-isa-convert-to-qdev.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gk4g7c210 RnJvbSA2MjFjNzQwZGU5NmYxYmFkMDY2NmZhMmU0ZmU5MDdiYTcyZTg0NTI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlkOiA8NjIxYzc0MGRlOTZmMWJhZDA2NjZmYTJlNGZlOTA3 YmE3MmU4NDUyOS4xMjk3NjMxMjg2LmdpdC5ibGF1d2lyYmVsQGdtYWlsLmNvbT4KSW4tUmVwbHkt VG86IDxiNmE2ZGExNzc0YjY2YWEwNmEwYzhjNjFmNWUzY2M3MjlkM2YwM2UxLjEyOTc2MzEyODYu Z2l0LmJsYXV3aXJiZWxAZ21haWwuY29tPgpSZWZlcmVuY2VzOiA8YjZhNmRhMTc3NGI2NmFhMDZh MGM4YzYxZjVlM2NjNzI5ZDNmMDNlMS4xMjk3NjMxMjg2LmdpdC5ibGF1d2lyYmVsQGdtYWlsLmNv bT4KRnJvbTogQmx1ZSBTd2lybCA8YmxhdXdpcmJlbEBnbWFpbC5jb20+CkRhdGU6IFN1biwgMTMg RmViIDIwMTEgMTQ6MDE6MDUgKzAwMDAKU3ViamVjdDogW1BBVENIIDIvNF0gdmdhLWlzYTogY29u dmVydCB0byBxZGV2CgpTaWduZWQtb2ZmLWJ5OiBCbHVlIFN3aXJsIDxibGF1d2lyYmVsQGdtYWls LmNvbT4KLS0tCiBody9wYy5oICAgICAgfCAgICA4ICsrKysrKystCiBody92Z2EtaXNhLmMgfCAg IDUxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQog aHcvdmdhLmMgICAgIHwgICAyMiArKysrKysrKysrKysrKy0tLS0tLS0tCiBody92Z2FfaW50Lmgg fCAgICAxICsKIDQgZmlsZXMgY2hhbmdlZCwgNjcgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvaHcvcGMuaCBiL2h3L3BjLmgKaW5kZXggNjRhM2EyMi4uNDc1NDg0 YSAxMDA2NDQKLS0tIGEvaHcvcGMuaAorKysgYi9ody9wYy5oCkBAIC0xODEsNyArMTgxLDEzIEBA IGVudW0gdmdhX3JldHJhY2VfbWV0aG9kIHsKIAogZXh0ZXJuIGVudW0gdmdhX3JldHJhY2VfbWV0 aG9kIHZnYV9yZXRyYWNlX21ldGhvZDsKIAotaW50IGlzYV92Z2FfaW5pdCh2b2lkKTsKK3N0YXRp YyBpbmxpbmUgaW50IGlzYV92Z2FfaW5pdCh2b2lkKQoreworICAgIGlzYV9jcmVhdGVfc2ltcGxl KCJpc2EtdmdhIik7CisKKyAgICByZXR1cm4gMDsKK30KKwogaW50IHBjaV92Z2FfaW5pdChQQ0lC dXMgKmJ1cyk7CiBpbnQgaXNhX3ZnYV9tbV9pbml0KHRhcmdldF9waHlzX2FkZHJfdCB2cmFtX2Jh c2UsCiAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9waHlzX2FkZHJfdCBjdHJsX2Jhc2UsIGlu dCBpdF9zaGlmdCk7CmRpZmYgLS1naXQgYS9ody92Z2EtaXNhLmMgYi9ody92Z2EtaXNhLmMKaW5k ZXggMzA0NjA1NC4uZmRlMGQ1NiAxMDA2NDQKLS0tIGEvaHcvdmdhLWlzYS5jCisrKyBiL2h3L3Zn YS1pc2EuYwpAQCAtMjksMTYgKzI5LDQwIEBACiAjaW5jbHVkZSAicWVtdS10aW1lci5oIgogI2lu Y2x1ZGUgImxvYWRlci5oIgogCi1pbnQgaXNhX3ZnYV9pbml0KHZvaWQpCit0eXBlZGVmIHN0cnVj dCBJU0FWR0FTdGF0ZSB7CisgICAgSVNBRGV2aWNlIGRldjsKKyAgICBzdHJ1Y3QgVkdBQ29tbW9u U3RhdGUgc3RhdGU7Cit9IElTQVZHQVN0YXRlOworCitzdGF0aWMgdm9pZCB2Z2FfcmVzZXRfaXNh KERldmljZVN0YXRlICpkZXYpCiB7Ci0gICAgVkdBQ29tbW9uU3RhdGUgKnM7CisgICAgSVNBVkdB U3RhdGUgKmQgPSBjb250YWluZXJfb2YoZGV2LCBJU0FWR0FTdGF0ZSwgZGV2LnFkZXYpOworICAg IFZHQUNvbW1vblN0YXRlICpzID0gJmQtPnN0YXRlOwogCi0gICAgcyA9IHFlbXVfbWFsbG9jeihz aXplb2YoKnMpKTsKKyAgICB2Z2FfY29tbW9uX3Jlc2V0KHMpOworfQogCi0gICAgdmdhX2NvbW1v bl9pbml0KHMsIFZHQV9SQU1fU0laRSk7Ci0gICAgdmdhX2luaXQocyk7Ci0gICAgdm1zdGF0ZV9y ZWdpc3RlcihOVUxMLCAwLCAmdm1zdGF0ZV92Z2FfY29tbW9uLCBzKTsKK3N0YXRpYyBpbnQgdmdh X2luaXRmbihJU0FEZXZpY2UgKmRldikKK3sKKyAgICBJU0FWR0FTdGF0ZSAqZCA9IERPX1VQQ0FT VChJU0FWR0FTdGF0ZSwgZGV2LCBkZXYpOworICAgIFZHQUNvbW1vblN0YXRlICpzID0gJmQtPnN0 YXRlOworICAgIGludCB2Z2FfaW9fbWVtb3J5OwogCisgICAgdmdhX2NvbW1vbl9pbml0KHMsIFZH QV9SQU1fU0laRSk7CisgICAgdmdhX2lvX21lbW9yeSA9IHZnYV9pbml0X2lvKHMpOworICAgIGNw dV9yZWdpc3Rlcl9waHlzaWNhbF9tZW1vcnkoaXNhX21lbV9iYXNlICsgMHgwMDBhMDAwMCwgMHgy MDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZnYV9pb19tZW1vcnkpOwor ICAgIHFlbXVfcmVnaXN0ZXJfY29hbGVzY2VkX21taW8oaXNhX21lbV9iYXNlICsgMHgwMDBhMDAw MCwgMHgyMDAwMCk7CisgICAgaXNhX2luaXRfaW9wb3J0KGRldiwgMHgzYzApOworICAgIGlzYV9p bml0X2lvcG9ydChkZXYsIDB4M2I0KTsKKyAgICBpc2FfaW5pdF9pb3BvcnQoZGV2LCAweDNiYSk7 CisgICAgaXNhX2luaXRfaW9wb3J0KGRldiwgMHgzZGEpOworICAgIGlzYV9pbml0X2lvcG9ydChk ZXYsIDB4M2MwKTsKKyNpZmRlZiBDT05GSUdfQk9DSFNfVkJFCisgICAgaXNhX2luaXRfaW9wb3J0 KGRldiwgMHgxY2UpOworICAgIGlzYV9pbml0X2lvcG9ydChkZXYsIDB4MWNmKTsKKyAgICBpc2Ff aW5pdF9pb3BvcnQoZGV2LCAweDFkMCk7CisjZW5kaWYgLyogQ09ORklHX0JPQ0hTX1ZCRSAqLwog ICAgIHMtPmRzID0gZ3JhcGhpY19jb25zb2xlX2luaXQocy0+dXBkYXRlLCBzLT5pbnZhbGlkYXRl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+c2NyZWVuX2R1bXAsIHMtPnRl eHRfdXBkYXRlLCBzKTsKIApAQCAtNDcsMyArNzEsMTggQEAgaW50IGlzYV92Z2FfaW5pdCh2b2lk KQogICAgIHJvbV9hZGRfdmdhKFZHQUJJT1NfRklMRU5BTUUpOwogICAgIHJldHVybiAwOwogfQor CitzdGF0aWMgSVNBRGV2aWNlSW5mbyB2Z2FfaW5mbyA9IHsKKyAgICAucWRldi5uYW1lICAgICA9 ICJpc2EtdmdhIiwKKyAgICAucWRldi5zaXplICAgICA9IHNpemVvZihJU0FWR0FTdGF0ZSksCisg ICAgLnFkZXYudm1zZCAgICAgPSAmdm1zdGF0ZV92Z2FfY29tbW9uLAorICAgIC5xZGV2LnJlc2V0 ICAgICA9IHZnYV9yZXNldF9pc2EsCisgICAgLnFkZXYubm9fdXNlciAgPSAxLAorICAgIC5pbml0 ICAgICAgICAgID0gdmdhX2luaXRmbiwKK307CisKK3N0YXRpYyB2b2lkIHZnYV9yZWdpc3Rlcih2 b2lkKQoreworICAgIGlzYV9xZGV2X3JlZ2lzdGVyKCZ2Z2FfaW5mbyk7Cit9CitkZXZpY2VfaW5p dCh2Z2FfcmVnaXN0ZXIpCmRpZmYgLS1naXQgYS9ody92Z2EuYyBiL2h3L3ZnYS5jCmluZGV4IGUy MTUxYTIuLmZkNDkyZDAgMTAwNjQ0Ci0tLSBhL2h3L3ZnYS5jCisrKyBiL2h3L3ZnYS5jCkBAIC0y MjU5LDEyICsyMjU5LDggQEAgdm9pZCB2Z2FfY29tbW9uX2luaXQoVkdBQ29tbW9uU3RhdGUgKnMs IGludCB2Z2FfcmFtX3NpemUpCiB9CiAKIC8qIHVzZWQgYnkgYm90aCBJU0EgYW5kIFBDSSAqLwot dm9pZCB2Z2FfaW5pdChWR0FDb21tb25TdGF0ZSAqcykKK2ludCB2Z2FfaW5pdF9pbyhWR0FDb21t b25TdGF0ZSAqcykKIHsKLSAgICBpbnQgdmdhX2lvX21lbW9yeTsKLQotICAgIHFlbXVfcmVnaXN0 ZXJfcmVzZXQodmdhX3Jlc2V0LCBzKTsKLQogICAgIHJlZ2lzdGVyX2lvcG9ydF93cml0ZSgweDNj MCwgMTYsIDEsIHZnYV9pb3BvcnRfd3JpdGUsIHMpOwogCiAgICAgcmVnaXN0ZXJfaW9wb3J0X3dy aXRlKDB4M2I0LCAyLCAxLCB2Z2FfaW9wb3J0X3dyaXRlLCBzKTsKQEAgLTIyNzgsNyArMjI3NCw2 IEBAIHZvaWQgdmdhX2luaXQoVkdBQ29tbW9uU3RhdGUgKnMpCiAgICAgcmVnaXN0ZXJfaW9wb3J0 X3JlYWQoMHgzZDQsIDIsIDEsIHZnYV9pb3BvcnRfcmVhZCwgcyk7CiAgICAgcmVnaXN0ZXJfaW9w b3J0X3JlYWQoMHgzYmEsIDEsIDEsIHZnYV9pb3BvcnRfcmVhZCwgcyk7CiAgICAgcmVnaXN0ZXJf aW9wb3J0X3JlYWQoMHgzZGEsIDEsIDEsIHZnYV9pb3BvcnRfcmVhZCwgcyk7Ci0gICAgcy0+YmFu a19vZmZzZXQgPSAwOwogCiAjaWZkZWYgQ09ORklHX0JPQ0hTX1ZCRQogI2lmIGRlZmluZWQgKFRB UkdFVF9JMzg2KQpAQCAtMjI5Niw4ICsyMjkxLDE5IEBAIHZvaWQgdmdhX2luaXQoVkdBQ29tbW9u U3RhdGUgKnMpCiAjZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfQk9DSFNfVkJFICovCiAKLSAgICB2 Z2FfaW9fbWVtb3J5ID0gY3B1X3JlZ2lzdGVyX2lvX21lbW9yeSh2Z2FfbWVtX3JlYWQsIHZnYV9t ZW1fd3JpdGUsIHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg REVWSUNFX0xJVFRMRV9FTkRJQU4pOworICAgIHJldHVybiBjcHVfcmVnaXN0ZXJfaW9fbWVtb3J5 KHZnYV9tZW1fcmVhZCwgdmdhX21lbV93cml0ZSwgcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBERVZJQ0VfTElUVExFX0VORElBTik7Cit9CisKK3ZvaWQgdmdhX2luaXQoVkdB Q29tbW9uU3RhdGUgKnMpCit7CisgICAgaW50IHZnYV9pb19tZW1vcnk7CisKKyAgICBxZW11X3Jl Z2lzdGVyX3Jlc2V0KHZnYV9yZXNldCwgcyk7CisKKyAgICBzLT5iYW5rX29mZnNldCA9IDA7CisK KyAgICB2Z2FfaW9fbWVtb3J5ID0gdmdhX2luaXRfaW8ocyk7CiAgICAgY3B1X3JlZ2lzdGVyX3Bo eXNpY2FsX21lbW9yeShpc2FfbWVtX2Jhc2UgKyAweDAwMGEwMDAwLCAweDIwMDAwLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmdhX2lvX21lbW9yeSk7CiAgICAgcWVtdV9yZWdp c3Rlcl9jb2FsZXNjZWRfbW1pbyhpc2FfbWVtX2Jhc2UgKyAweDAwMGEwMDAwLCAweDIwMDAwKTsK ZGlmZiAtLWdpdCBhL2h3L3ZnYV9pbnQuaCBiL2h3L3ZnYV9pbnQuaAppbmRleCAxMDY3ZjJjLi5k MjgxMWJkIDEwMDY0NAotLS0gYS9ody92Z2FfaW50LmgKKysrIGIvaHcvdmdhX2ludC5oCkBAIC0x OTEsNiArMTkxLDcgQEAgc3RhdGljIGlubGluZSBpbnQgYzZfdG9fOChpbnQgdikKIAogdm9pZCB2 Z2FfY29tbW9uX2luaXQoVkdBQ29tbW9uU3RhdGUgKnMsIGludCB2Z2FfcmFtX3NpemUpOwogdm9p ZCB2Z2FfaW5pdChWR0FDb21tb25TdGF0ZSAqcyk7CitpbnQgdmdhX2luaXRfaW8oVkdBQ29tbW9u U3RhdGUgKnMpOwogdm9pZCB2Z2FfY29tbW9uX3Jlc2V0KFZHQUNvbW1vblN0YXRlICpzKTsKIAog dm9pZCB2Z2FfZGlydHlfbG9nX3N0YXJ0KFZHQUNvbW1vblN0YXRlICpzKTsKLS0gCjEuNy4yLjMK Cg== --90e6ba53a2fa60b56f049c305b11--