[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [Qemu-devel] [PATCH 11/24] Add ali1543 super IO pci device.
From: |
Krumme, Chris |
Subject: |
RE: [Qemu-devel] [PATCH 11/24] Add ali1543 super IO pci device. |
Date: |
Thu, 19 Mar 2009 09:07:59 -0700 |
Hello Tristan,
> -----Original Message-----
> From:
> address@hidden
> [mailto:address@hidden
> rg] On Behalf Of Tristan Gingold
> Sent: Thursday, March 19, 2009 9:36 AM
> To: address@hidden
> Cc: Tristan Gingold
> Subject: [Qemu-devel] [PATCH 11/24] Add ali1543 super IO pci device.
>
> This is a very partial implementation just enough for es40 firmware.
>
> Signed-off-by: Tristan Gingold <address@hidden>
> ---
> hw/ali1543.c | 133
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> hw/pci.h | 5 ++
> hw/pci_ids.h | 3 +
> 3 files changed, 141 insertions(+), 0 deletions(-)
> create mode 100644 hw/ali1543.c
>
> diff --git a/hw/ali1543.c b/hw/ali1543.c
> new file mode 100644
> index 0000000..aca154f
> --- /dev/null
> +++ b/hw/ali1543.c
> @@ -0,0 +1,133 @@
> +/*
> + * QEMU Ali 1543c emulation
> + *
> + * Copyright (c) 2009 AdaCore
> + *
> + * Written by Tristan Gingold.
> + *
> + * This work is licensed under the GNU GPL license version 2
> or later.
> + *
> + */
> +#include <time.h>
> +#include <sys/time.h>
> +#include "hw.h"
> +#include "net.h"
> +#include "sysemu.h"
> +#include "devices.h"
> +#include "boards.h"
> +#include "pc.h"
> +#include "isa.h"
> +#include "qemu-char.h"
> +#include "pci.h"
> +
> +//#define DEBUG_CFG
> +
Your commit comment says this is a Super IO.
I think a bit of a comment here about the card, which devices are on the
card etc. would help people who don't have one laying around.
> +struct ali1543_t {
> + PCIDevice pci;
> +
> + qemu_irq *irq; /* Upstream handler. */
> + PITState *pit;
> + qemu_irq *i8259;
> +
> + /* Configuration. */
> + enum cfg_state { CFG_SNOOP, CFG_51, CFG_EN } cfg_state;
> + unsigned char cfg_index;
> +};
> +
> +static void ali_cfg_write(void *opaque, uint32_t addr, uint32_t val)
> +{
> + ali1543_t *ali = opaque;
> +
> + if ((addr & 1) == 0) {
> + switch (ali->cfg_state) {
> + case CFG_SNOOP:
> + if (val == 0x51)
> + ali->cfg_state = CFG_51;
> + else
> + qemu_log("ali1543-cfg: write %02x to cfg_port\n", val);
> + break;
> + case CFG_51:
> + if (val == 0x23)
> + ali->cfg_state = CFG_EN;
> + else {
> + qemu_log("ali1543-cfg: write %02x to cfg_port
> (51)\n", val);
> + ali->cfg_state = CFG_SNOOP;
> + }
> + break;
> + case CFG_EN:
> + ali->cfg_index = val;
> + break;
> + }
> + }
> + else {
> +#ifdef DEBUG_CFG
> + qemu_log("ali1543-cfg: write %02x to cfg reg %02x (addr=%x)\n",
> + val, ali->cfg_index, addr);
> +#endif
> + }
> +}
> +
> +static uint32_t ali_cfg_read(void *opaque, uint32_t addr)
> +{
> + ali1543_t *ali = opaque;
> +
> + if ((addr & 1) == 0) {
> + if (ali->cfg_state != CFG_EN) {
> + qemu_log("ali1543-cfg: read fromcfg_port\n");
> + return 0;
> + }
> + else
> + return ali->cfg_index;
> + }
> + else {
> +#ifdef DEBUG_CFG
> + qemu_log("ali1543-cfg: read from reg %02x\n", ali->cfg_index);
> +#endif
> + return 0;
> + }
> +}
> +
> +ali1543_t *ali1543_init (PCIBus *bus, int devfn, qemu_irq irq)
> +{
> + ali1543_t *ali;
> + uint8_t *pci_conf;
> +
> + ali = (ali1543_t*)pci_register_device(bus, "Ali1543",
> sizeof(ali1543_t),
> + devfn, NULL, NULL);
> +
> + pci_conf = ali->pci.config;
> +
> + pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_AL);
> + pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_AL_M1533);
Is this an enhanced version of a 1533? Is this just a typo?
Thanks Chris
> + pci_conf[0x08] = 0xc3; // Revision
> + pci_config_set_class(pci_conf, PCI_CLASS_BRIDGE_ISA);
> + pci_conf[0x2c] = 0; // Subsystem
> + pci_conf[0x2d] = 0;
> + pci_conf[0x2e] = 0;
> + pci_conf[0x2f] = 0;
> +
> + register_ioport_read(0x370, 2, 1, ali_cfg_read, ali);
> + register_ioport_write(0x370, 2, 1, ali_cfg_write, ali);
> +
> + ali->i8259 = i8259_init(irq);
> +
> + /* serial_init already handles NULL CharDriverState but
> this code adds
> + a more useful label. */
> + if (serial_hds[0] == NULL)
> + serial_hds[0] = qemu_chr_open("com1", "nul", NULL);
> + if (serial_hds[1] == NULL)
> + serial_hds[1] = qemu_chr_open("com2", "nul", NULL);
> +
> + serial_init(0x3f8, ali->i8259[4], 115200, serial_hds[0]);
> + serial_init(0x2f8, ali->i8259[3], 115200, serial_hds[1]);
> + ali->pit = pit_init(0x40, ali->i8259[0]);
> + pcspk_init(ali->pit);
> + DMA_init(0);
> +
> + return ali;
> +}
> +
> +qemu_irq ali1543_get_irq(ali1543_t *c, int n)
> +{
> + return c->i8259[n];
> +}
> diff --git a/hw/pci.h b/hw/pci.h
> index 4f24895..b1c1035 100644
> --- a/hw/pci.h
> +++ b/hw/pci.h
> @@ -254,4 +254,9 @@ PCIBus *pci_apb_init(target_phys_addr_t
> special_base,
> PCIBus *sh_pci_register_bus(pci_set_irq_fn set_irq,
> pci_map_irq_fn map_irq,
> qemu_irq *pic, int devfn_min, int nirq);
>
> +/* ali1543.c */
> +typedef struct ali1543_t ali1543_t;
> +ali1543_t *ali1543_init (PCIBus *bus, int devfn, qemu_irq irq);
> +qemu_irq ali1543_get_irq(ali1543_t *c, int n);
> +
> #endif
> diff --git a/hw/pci_ids.h b/hw/pci_ids.h
> index 427fcd5..4119ead 100644
> --- a/hw/pci_ids.h
> +++ b/hw/pci_ids.h
> @@ -70,6 +70,9 @@
> #define PCI_VENDOR_ID_CMD 0x1095
> #define PCI_DEVICE_ID_CMD_646 0x0646
>
> +#define PCI_VENDOR_ID_AL 0x10b9
> +#define PCI_DEVICE_ID_AL_M1533 0x1533
> +
> #define PCI_VENDOR_ID_REALTEK 0x10ec
> #define PCI_DEVICE_ID_REALTEK_8139 0x8139
>
> --
> 1.6.2
>
>
>
>
- [Qemu-devel] [PATCH 19/24] alpha ld helpers now directly return the value., (continued)
- [Qemu-devel] [PATCH 19/24] alpha ld helpers now directly return the value., Tristan Gingold, 2009/03/19
- [Qemu-devel] [PATCH 20/24] Add alpha_cpu_list., Tristan Gingold, 2009/03/19
- [Qemu-devel] [PATCH 21/24] Alpha: lower parent irq when irq is lowered., Tristan Gingold, 2009/03/19
- [Qemu-devel] [PATCH 22/24] Move linux-user pal emulation to linux-user/, Tristan Gingold, 2009/03/19
- [Qemu-devel] [PATCH 23/24] Correctly decode hw_ld/hw_st opcodes for all alpha implementations., Tristan Gingold, 2009/03/19
- [Qemu-devel] [PATCH 24/24] Add full emulation for 21264., Tristan Gingold, 2009/03/19
- RE: [Qemu-devel] [PATCH 20/24] Add alpha_cpu_list., Krumme, Chris, 2009/03/19
- Re: [Qemu-devel] [PATCH 20/24] Add alpha_cpu_list., Tristan Gingold, 2009/03/20
- RE: [Qemu-devel] [PATCH 13/24] Add target-alpha/machine.c and hw/es40.cfor es40 machine emulation., Krumme, Chris, 2009/03/19
- Re: [Qemu-devel] [PATCH 13/24] Add target-alpha/machine.c and hw/es40.cfor es40 machine emulation., Tristan Gingold, 2009/03/20
- RE: [Qemu-devel] [PATCH 11/24] Add ali1543 super IO pci device.,
Krumme, Chris <=
- Re: [Qemu-devel] [PATCH 11/24] Add ali1543 super IO pci device., Tristan Gingold, 2009/03/20
- RE: [Qemu-devel] [PATCH 02/24] Fix cpu_physical_memory_rw whenoperating on IO blocks., Krumme, Chris, 2009/03/19
- Re: [Qemu-devel] [PATCH 02/24] Fix cpu_physical_memory_rw whenoperating on IO blocks., Tristan Gingold, 2009/03/20