From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=56470 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OFvMw-0000fU-GE for qemu-devel@nongnu.org; Sat, 22 May 2010 16:32:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OFvMu-0000m4-Ai for qemu-devel@nongnu.org; Sat, 22 May 2010 16:32:26 -0400 Received: from mail.gmx.net ([213.165.64.20]:51080) by eggs.gnu.org with smtp (Exim 4.69) (envelope-from ) id 1OFvMt-0000lZ-TF for qemu-devel@nongnu.org; Sat, 22 May 2010 16:32:24 -0400 Date: Sat, 22 May 2010 22:31:44 +0200 Message-Id: <1274560304$3317@local> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit From: Sebastian Herbszt Subject: [Qemu-devel] [PATCH] ahci: handle writes to generic host control registers List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: qemu-ahci-devel@lists.sourceforge.net, Sebastian Herbszt Handle writes to Generic Host Control registers. Signed-off-by: Sebastian Herbszt diff --git a/hw/ahci.c b/hw/ahci.c index f8e198c..178f9ea 100644 --- a/hw/ahci.c +++ b/hw/ahci.c @@ -425,7 +425,6 @@ static uint32_t ahci_mem_readl(void *ptr, target_phys_addr_t addr) static void ahci_mem_writel(void *ptr, target_phys_addr_t addr, uint32_t val) { AHCIState *s = ptr; - uint32_t *p; addr=addr&0xfff; /* Only aligned reads are allowed on OHCI */ @@ -435,17 +434,30 @@ static void ahci_mem_writel(void *ptr, target_phys_addr_t addr, uint32_t val) return; } - if(addr<0x20) - { - switch(addr) - { - case HOST_IRQ_STAT: + if (addr < 0x20) { /* Generic Host Control */ + switch(addr) { + case HOST_CAP: /* R/WO, RO */ + /* FIXME handle R/WO */ + break; + case HOST_CTL: /* R/W */ + if (val & HOST_RESET) { + DPRINTF("HBA Reset\n"); + /* FIXME reset? */ + } else + s->control_regs.ghc = val; + break; + case HOST_IRQ_STAT: /* R/WC, RO */ s->control_regs.irqstatus &= ~val; ahci_check_irq(s); break; + case HOST_PORTS_IMPL: /* R/WO, RO */ + /* FIXME handle R/WO */ + break; + case HOST_VERSION: /* RO */ + /* FIXME report write? */ + break; default: - /* genernal host control */ - p=(uint32_t *)&s->control_regs; + DPRINTF("write to unknown register 0x%x\n", (unsigned)addr); } } else if(addr>=0x100 && addr<0x300)