All of lore.kernel.org
 help / color / mirror / Atom feed
From: 乔崇 <qiaochong@loongson.cn>
To: Sebastian Herbszt <herbszt@gmx.de>
Cc: Joerg Roedel <joro@8bytes.org>,
	Elek Roland <elek.roland@gmail.com>,
	Alexander Graf <agraf@suse.de>,
	qemu-devel Developers <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] Re: [RFC] [PATCH] add ahci support into qemu
Date: Tue, 04 May 2010 09:07:36 +0800	[thread overview]
Message-ID: <4BDF7358.8050101@loongson.cn> (raw)
In-Reply-To: <2FC4BB04CF31478F952129939300295C@FSCPC>

[-- Attachment #1: Type: text/plain, Size: 6354 bytes --]

I add Sebastian Herbsz's patch,add WIN_WIN_STANDBYNOW1 support to fix 
hw_error on linux shut down etc.

I am  not familiar with  git send-email,I am studying it now :).


Sebastian Herbszt 写道:
> Hi again,
>
> please consider the following minor changes:
> - debug output with DEBUG_AHCI
> - set port count to 4
> - change return value of PxSSTS to include SPD and IPM
> - change cap and version default values according to Intel #301473-002
>
> Regards,
> Sebastian
>
> --- hw/ahci.c.orig Sun May  2 15:43:58 2010
> +++ hw/ahci.c Sun May  2 22:03:26 2010
> @@ -26,8 +26,15 @@
> #include "dma.h"
> #include "cpu-common.h"
> #include <hw/ide/internal.h>
> -#define DPRINTF(...)
>
> +#define DEBUG_AHCI
> +
> +#ifdef DEBUG_AHCI
> +#define DPRINTF(fmt, ...) \
> +do { printf("ahci: " fmt , ## __VA_ARGS__); } while (0)
> +#else
> +#define DPRINTF(fmt, ...) do {} while(0)
> +#endif
>
> enum {
>  AHCI_PCI_BAR  = 5,
> @@ -203,6 +210,8 @@
>  uint32_t  version;
> } ahci_control_regs;
>
> +#define SATA_PORTS 4
> +
> typedef struct ahci_port_regs {
>  uint32_t lst_addr;
>  uint32_t lst_addr_hi;
> @@ -240,7 +249,7 @@
>
> typedef struct AHCIState{
>  ahci_control_regs control_regs;
> - ahci_port_regs port_regs[2];
> + ahci_port_regs port_regs[SATA_PORTS];
>  int mem;
>  QEMUTimer *timer;
>  IDEBus *ide;
> @@ -268,8 +277,10 @@
>  switch(offset)
>  {
>   case PORT_SCR:
> -   if(s->ide && port==0) val=3;
> -   else val=0;
> +   if(s->ide && port==0)
> +    val= 3 /* DET */ | (1 << 4) /* SPD */ | (1 << 8) /* IPM */;
> +   else
> +    val=0;
>    break;
>   case PORT_IRQ_STAT:
>    val=pr->irq_stat;
> @@ -291,6 +302,7 @@
>    val= p[offset>>2];
>    break;
>  }
> + DPRINTF("ahci_port_read: port: 0x%x offset: 0x%x val: 0x%x\n", port, 
> offset, val);
>  return val;
>
> }
> @@ -299,7 +311,7 @@
> {
>  ahci_port_regs *pr;
>  int i;
> - for(i=0;i<2;i++)
> + for(i=0;i<SATA_PORTS;i++)
>  {
>   pr=&s->port_regs[i];
>
> @@ -319,6 +331,7 @@
>  ahci_port_regs *pr=&s->port_regs[port];
>  uint32_t *p;
>
> + DPRINTF("ahci_port_write: port: 0x%x offset: 0x%x val: 0x%x\n", 
> port, offset, val);
>  switch(offset)
>  {
>   case PORT_LST_ADDR:
> @@ -396,7 +409,7 @@
>     val=p[addr>>2];
>   }
>  }
> - else if(addr>=0x100 && addr<0x200)
> + else if(addr>=0x100 && addr<0x300)
>  {
>   val=ahci_port_read(s,(addr-0x100)>>7,addr&0x7f);
>  }
> @@ -436,7 +449,7 @@
>     p=(uint32_t *)&s->control_regs;
>   }
>  }
> - else if(addr>=0x100 && addr<0x200)
> + else if(addr>=0x100 && addr<0x300)
>  {
>   ahci_port_write(s,(addr-0x100)>>7,addr&0x7f,val);
>  }
> @@ -459,10 +472,10 @@
>
> static void ahci_reg_init(AHCIState *s)
> {
> - s->control_regs.cap=2|(0x1f<<8); /*2 ports,32 cmd slot*/
> - s->control_regs.ghc=1<<31;
> - s->control_regs.impl=1;/*2 ports*/
> - s->control_regs.version=0x10100;
> + s->control_regs.cap = 3 | (0x1f << 8) | (1 << 20) ; /* 4 ports, 32 
> command slots, 1.5 Gb/s */
> + s->control_regs.ghc = 1 << 31; /* AHCI Enable */
> + s->control_regs.impl = 1; /* Port 0 implemented */
> + s->control_regs.version = 0x10000;
> }
>
> static void padstr(char *str, const char *src, int len)
> @@ -619,19 +632,22 @@
>  prdt_num=cmd_hdr.opts>>16;
>  if(prdt_num) cpu_physical_memory_read(cmd_hdr.tbl_addr+0x80,(uint8_t 
> *)s->prdt_buf,prdt_num*32);
>
> -
> +#ifdef DEBUG_AHCI
> +        DPRINTF("fis:");
>  for(i=0;i<cmd_len;i++)
>  {
> -  if((i&0xf)==0)DPRINTF("\n%02x:",i);
> -  DPRINTF("%02x ",fis[i]);
> +  if((i&0xf)==0) printf("\n%02x:",i);
> +  printf("%02x ",fis[i]);
>  }
> +        printf("\n");
> +#endif
>
>  switch(fis[0])
>  {
>   case 0x27:
>    break;
>   default:
> -   hw_error("unkonow command fis[0]=%02x fis[1]=%02x 
> fis[2]=%02x\n",fis[0],fis[1],fis[2]);break;
> +   hw_error("unknown command fis[0]=%02x fis[1]=%02x 
> fis[2]=%02x\n",fis[0],fis[1],fis[2]);break;
>  }
>
>  switch(fis[1])
> @@ -641,7 +657,7 @@
>   case 0:
>    break;
>   default:
> -   hw_error("unkonow command fis[0]=%02x fis[1]=%02x 
> fis[2]=%02x\n",fis[0],fis[1],fis[2]);break;
> +   hw_error("unknown command fis[0]=%02x fis[1]=%02x 
> fis[2]=%02x\n",fis[0],fis[1],fis[2]);break;
>  }
>
>  if(fis[1]==0)
> @@ -684,7 +700,7 @@
>     pr->irq_stat |= (1<<2);
>     break;
>    default:
> -    hw_error("unkonow command fis[0]=%02x fis[1]=%02x 
> fis[2]=%02x\n",fis[0],fis[1],fis[2]);break;
> +    hw_error("unknown command fis[0]=%02x fis[1]=%02x 
> fis[2]=%02x\n",fis[0],fis[1],fis[2]);break;
>   }
>
>  }
> @@ -698,7 +714,7 @@
>  AHCIState *s = opaque;
>  ahci_port_regs *pr;
>  int i,j;
> - for(i=0;i<2;i++)
> + for(i=0;i<SATA_PORTS;i++)
>  {
>   pr=&s->port_regs[i];
>   for(j=0;j<32 && pr->cmd_issue;j++)
> @@ -741,23 +757,21 @@
> #define PCI_VENDOR_MYDEVICE  0x8086
> #define PCI_PRODUCT_MYDEVICE 0x2652
>
> -#define PCI_CLASS_HEADERTYPE_00h 0x00
> -
> static int pci_ahci_init(PCIDevice *dev)
> {
>  struct ahci_pci_state *d;
>  d = DO_UPCAST(struct ahci_pci_state, card, dev);
>  pci_config_set_vendor_id(d->card.config,PCI_VENDOR_MYDEVICE);
>  pci_config_set_device_id(d->card.config,PCI_PRODUCT_MYDEVICE);
> - d->card.config[PCI_COMMAND]  = 0x07;  /* I/O + Memory */
> + d->card.config[PCI_COMMAND]  = PCI_COMMAND_IO | PCI_COMMAND_MEMORY | 
> PCI_COMMAND_MASTER;
>  d->card.config[PCI_CLASS_DEVICE] = 0;
>  d->card.config[0x0b]  = 1;//storage
> - d->card.config[0x0c]  = 0x08;  /* Cache line size */
> - d->card.config[0x0d]  = 0x40;  /* Latency timer */
> - d->card.config[0x0e]  = PCI_CLASS_HEADERTYPE_00h;
> - d->card.config[0x3d] = 1;    /* interrupt pin 0 */
> + d->card.config[PCI_CACHE_LINE_SIZE] = 0x08; /* Cache line size */
> + d->card.config[PCI_LATENCY_TIMER] = 0x00; /* Latency timer */
> + d->card.config[PCI_HEADER_TYPE]  = PCI_HEADER_TYPE_NORMAL;
> + d->card.config[PCI_INTERRUPT_PIN] = 1; /* interrupt pin 0 */
>
> - pci_register_bar(&d->card, 5, 0x200,
> + pci_register_bar(&d->card, 5, 0x400,
>    PCI_BASE_ADDRESS_SPACE_MEMORY, ahci_pci_map);
>  d->ahci=ahci_new();
>  d->ahci->irq = d->card.irq[0];
> @@ -792,7 +806,7 @@
> {
>     ahci_sysbus_state *d = FROM_SYSBUS(ahci_sysbus_state, dev);
>  d->ahci=ahci_new();
> -    sysbus_init_mmio(dev, 0x200, d->ahci->mem);
> +    sysbus_init_mmio(dev, 0x400, d->ahci->mem);
>     sysbus_init_irq(dev, &d->ahci->irq);
>     return 0;
> }


-- 

乔崇 qiaochong.ac.cn
龙芯技术服务中心
office:010-62600855-108
mobile:13521990614

2009年 11月 16日 星期一 10:31:04 CST

[-- Attachment #2: 0001-fix-port-count-cap-and-version-etc-to-ahci.patch --]
[-- Type: text/x-patch, Size: 6857 bytes --]

>From 30cc6d82d4b3ad71672801f6126934a84ec39925 Mon Sep 17 00:00:00 2001
From: Sebastian Herbszt <herbszt@gmx.de>
Date: Tue, 4 May 2010 07:17:47 +0800
Subject: [PATCH] fix port count,cap and version etc to ahci.

- debug output with DEBUG_AHCI
- set port count to 4
- change return value of PxSSTS to include SPD and IPM
- change cap and version default values according to Intel #301473-002

Signed-off-by: QiaoChong <qiaochong@loongson.cn>
---
 hw/ahci.c |   68 ++++++++++++++++++++++++++++++++++++------------------------
 1 files changed, 41 insertions(+), 27 deletions(-)

diff --git a/hw/ahci.c b/hw/ahci.c
index a332a45..b6a81af 100644
--- a/hw/ahci.c
+++ b/hw/ahci.c
@@ -26,8 +26,15 @@
 #include "dma.h"
 #include "cpu-common.h"
 #include <hw/ide/internal.h>
-#define DPRINTF(...)
 
+#define DEBUG_AHCI
+
+#ifdef DEBUG_AHCI
+#define DPRINTF(fmt, ...) \
+do { printf("ahci: " fmt , ## __VA_ARGS__); } while (0)
+#else
+#define DPRINTF(fmt, ...) do {} while(0)
+#endif
 
 enum {
 	AHCI_PCI_BAR		= 5,
@@ -203,6 +210,8 @@ typedef struct ahci_control_regs {
 	uint32_t  version;
 } ahci_control_regs;
 
+#define SATA_PORTS 4
+
 typedef struct ahci_port_regs {
 	uint32_t lst_addr;
 	uint32_t lst_addr_hi;
@@ -240,7 +249,7 @@ typedef struct ahci_sg {
 
 typedef struct AHCIState{
 	ahci_control_regs control_regs;
-	ahci_port_regs port_regs[2];
+	ahci_port_regs port_regs[SATA_PORTS];
 	int mem;
 	QEMUTimer *timer;
 	IDEBus *ide;
@@ -268,8 +277,10 @@ static uint32_t  ahci_port_read(AHCIState *s,int port,int offset)
 	switch(offset)
 	{
 		case PORT_SCR:
-			if(s->ide && port==0) val=3;
-			else val=0;
+			if(s->ide && port==0)
+				val= 3 /* DET */ | (1 << 4) /* SPD */ | (1 << 8) /* IPM */;
+			else
+				val=0;
 			break;
 		case PORT_IRQ_STAT:
 			val=pr->irq_stat;
@@ -291,6 +302,7 @@ static uint32_t  ahci_port_read(AHCIState *s,int port,int offset)
 			val= p[offset>>2];
 			break;
 	}
+	DPRINTF("ahci_port_read: port: 0x%x offset: 0x%x val: 0x%x\n", port, offset, val);
 	return val;
 
 }
@@ -299,7 +311,7 @@ static void ahci_check_irq(AHCIState *s)
 {
 	ahci_port_regs *pr;
 	int i;
-	for(i=0;i<2;i++)
+	for(i=0;i<SATA_PORTS;i++)
 	{
 		pr=&s->port_regs[i];
 
@@ -319,6 +331,7 @@ static void  ahci_port_write(AHCIState *s,int port,int offset,uint32_t val)
 	ahci_port_regs *pr=&s->port_regs[port];
 	uint32_t *p;
 
+	DPRINTF("ahci_port_write: port: 0x%x offset: 0x%x val: 0x%x\n", port, offset, val);
 	switch(offset)
 	{
 		case PORT_LST_ADDR:
@@ -396,7 +409,7 @@ static uint32_t ahci_mem_readl(void *ptr, target_phys_addr_t addr)
 				val=p[addr>>2];
 		}
 	}
-	else if(addr>=0x100 && addr<0x200)
+	else if(addr>=0x100 && addr<0x300)
 	{
 		val=ahci_port_read(s,(addr-0x100)>>7,addr&0x7f);
 	}
@@ -436,7 +449,7 @@ static void ahci_mem_writel(void *ptr, target_phys_addr_t addr, uint32_t val)
 				p=(uint32_t *)&s->control_regs;
 		}
 	}
-	else if(addr>=0x100 && addr<0x200)
+	else if(addr>=0x100 && addr<0x300)
 	{
 		ahci_port_write(s,(addr-0x100)>>7,addr&0x7f,val);
 	}
@@ -459,10 +472,10 @@ static CPUWriteMemoryFunc *ahci_writefn[3]={
 
 static void ahci_reg_init(AHCIState *s)
 {
-	s->control_regs.cap=2|(0x1f<<8); /*2 ports,32 cmd slot*/
-	s->control_regs.ghc=1<<31;
-	s->control_regs.impl=1;/*2 ports*/
-	s->control_regs.version=0x10100;
+	s->control_regs.cap = 3 | (0x1f << 8) | (1 << 20) ; /* 4 ports, 32 command slots, 1.5 Gb/s */
+	s->control_regs.ghc = 1 << 31; /* AHCI Enable */
+	s->control_regs.impl = 1; /* Port 0 implemented */
+	s->control_regs.version = 0x10000;
 }
 
 static void padstr(char *str, const char *src, int len)
@@ -619,19 +632,22 @@ static void handle_cmd(AHCIState *s,int port,int slot)
 	prdt_num=cmd_hdr.opts>>16;
 	if(prdt_num) cpu_physical_memory_read(cmd_hdr.tbl_addr+0x80,(uint8_t *)s->prdt_buf,prdt_num*32);
 
-
+#ifdef DEBUG_AHCI
+        DPRINTF("fis:");
 	for(i=0;i<cmd_len;i++)
 	{
-		if((i&0xf)==0)DPRINTF("\n%02x:",i);
-		DPRINTF("%02x ",fis[i]);
+		if((i&0xf)==0) printf("\n%02x:",i);
+		printf("%02x ",fis[i]);
 	}
+        printf("\n");
+#endif
 
 	switch(fis[0])
 	{
 		case 0x27:
 			break;
 		default:
-			hw_error("unkonow command fis[0]=%02x fis[1]=%02x fis[2]=%02x\n",fis[0],fis[1],fis[2]);break;
+			hw_error("unknown command fis[0]=%02x fis[1]=%02x fis[2]=%02x\n",fis[0],fis[1],fis[2]);break;
 	}
 
 	switch(fis[1])
@@ -641,7 +657,7 @@ static void handle_cmd(AHCIState *s,int port,int slot)
 		case 0:
 			break;
 		default:
-			hw_error("unkonow command fis[0]=%02x fis[1]=%02x fis[2]=%02x\n",fis[0],fis[1],fis[2]);break;
+			hw_error("unknown command fis[0]=%02x fis[1]=%02x fis[2]=%02x\n",fis[0],fis[1],fis[2]);break;
 	}
 
 	if(fis[1]==0)
@@ -684,7 +700,7 @@ static void handle_cmd(AHCIState *s,int port,int slot)
 				pr->irq_stat |= (1<<2);
 				break;
 			default:
-				hw_error("unkonow command fis[0]=%02x fis[1]=%02x fis[2]=%02x\n",fis[0],fis[1],fis[2]);break;
+				hw_error("unknown command fis[0]=%02x fis[1]=%02x fis[2]=%02x\n",fis[0],fis[1],fis[2]);break;
 		}
 
 	}
@@ -698,7 +714,7 @@ static void ahci_timer_function(void *opaque)
 	AHCIState *s = opaque;
 	ahci_port_regs *pr;
 	int i,j;
-	for(i=0;i<2;i++)
+	for(i=0;i<SATA_PORTS;i++)
 	{
 		pr=&s->port_regs[i];
 		for(j=0;j<32 && pr->cmd_issue;j++)
@@ -741,23 +757,21 @@ static void ahci_pci_map(PCIDevice *pci_dev, int region_num,
 #define PCI_VENDOR_MYDEVICE  0x8086
 #define PCI_PRODUCT_MYDEVICE 0x2652
 
-#define PCI_CLASS_HEADERTYPE_00h	0x00
-
 static int pci_ahci_init(PCIDevice *dev)
 {
 	struct ahci_pci_state *d;
 	d = DO_UPCAST(struct ahci_pci_state, card, dev);
 	pci_config_set_vendor_id(d->card.config,PCI_VENDOR_MYDEVICE);
 	pci_config_set_device_id(d->card.config,PCI_PRODUCT_MYDEVICE);
-	d->card.config[PCI_COMMAND]		= 0x07;		/* I/O + Memory */
+	d->card.config[PCI_COMMAND]		= PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER;
 	d->card.config[PCI_CLASS_DEVICE]	= 0;
 	d->card.config[0x0b]		= 1;//storage
-	d->card.config[0x0c]		= 0x08;		/* Cache line size */
-	d->card.config[0x0d]		= 0x40;		/* Latency timer */
-	d->card.config[0x0e]		= PCI_CLASS_HEADERTYPE_00h;
-	d->card.config[0x3d] = 1;    /* interrupt pin 0 */
+	d->card.config[PCI_CACHE_LINE_SIZE]	= 0x08;	/* Cache line size */
+	d->card.config[PCI_LATENCY_TIMER]	= 0x00;	/* Latency timer */
+	d->card.config[PCI_HEADER_TYPE]		= PCI_HEADER_TYPE_NORMAL;
+	d->card.config[PCI_INTERRUPT_PIN]	= 1; /* interrupt pin 0 */
 
-	pci_register_bar(&d->card, 5, 0x200,
+	pci_register_bar(&d->card, 5, 0x400,
 			PCI_BASE_ADDRESS_SPACE_MEMORY, ahci_pci_map);
 	d->ahci=ahci_new();
 	d->ahci->irq = d->card.irq[0];
@@ -792,7 +806,7 @@ static int ahci_sysbus_init(SysBusDevice *dev)
 {
     ahci_sysbus_state *d = FROM_SYSBUS(ahci_sysbus_state, dev);
 	d->ahci=ahci_new();
-    sysbus_init_mmio(dev, 0x200, d->ahci->mem);
+    sysbus_init_mmio(dev, 0x400, d->ahci->mem);
     sysbus_init_irq(dev, &d->ahci->irq);
     return 0;
 }
-- 
1.5.6.5


[-- Attachment #3: 0002-add-WIN_STANDBYNOW1-process-into-ahci.patch --]
[-- Type: text/x-patch, Size: 753 bytes --]

>From c07ddd1f9c9ec664a0ef3ee4ad43d930045c9ff7 Mon Sep 17 00:00:00 2001
From: QiaoChong <qiaochong@loongson.cn>
Date: Sun, 2 May 2010 21:54:14 +0800
Subject: [PATCH] add  WIN_STANDBYNOW1 process into ahci.

Signed-off-by: QiaoChong <qiaochong@loongson.cn>
---
 hw/ahci.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/hw/ahci.c b/hw/ahci.c
index b6a81af..cb4a851 100644
--- a/hw/ahci.c
+++ b/hw/ahci.c
@@ -676,6 +676,7 @@ static void handle_cmd(AHCIState *s,int port,int slot)
 				write_to_sglist(ide_state->identify_data, sizeof(ide_state->identify_data),s->prdt_buf,prdt_num);
 				pr->irq_stat |= (1<<2);
 				break;
+			case WIN_STANDBYNOW1:
 			case WIN_SETFEATURES:
 				pr->irq_stat |= (1<<2);
 				break;
-- 
1.5.6.5


[-- Attachment #4: 0003-ahci-pci-ids-into-pci_ids.h-add-warning-messages.patch --]
[-- Type: text/x-patch, Size: 1933 bytes --]

>From e94912b03ed33080d550eb5764fc99911498101b Mon Sep 17 00:00:00 2001
From: QiaoChong <qiaochong@loongson.cn>
Date: Tue, 4 May 2010 07:31:30 +0800
Subject: [PATCH] ahci pci ids  into pci_ids.h,add warning messages.

move ahci pci device id define into pci_ids.h,add warning messages for
unsupported features.

Signed-off-by: QiaoChong <qiaochong@loongson.cn>
---
 hw/ahci.c    |   10 +++++-----
 hw/pci_ids.h |    1 +
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/hw/ahci.c b/hw/ahci.c
index cb4a851..e1aed4a 100644
--- a/hw/ahci.c
+++ b/hw/ahci.c
@@ -662,7 +662,9 @@ static void handle_cmd(AHCIState *s,int port,int slot)
 
 	if(fis[1]==0)
 	{
-
+#ifdef DEBUG_AHCI
+			printf("now,just ignore command fis[0]=%02x fis[1]=%02x fis[2]=%02x\n",fis[0],fis[1],fis[2]);
+#endif
 	}
 
 	if(fis[1]==(1<<7))
@@ -755,15 +757,13 @@ static void ahci_pci_map(PCIDevice *pci_dev, int region_num,
 	cpu_register_physical_memory(addr, size, s->mem);
 }
 
-#define PCI_VENDOR_MYDEVICE  0x8086
-#define PCI_PRODUCT_MYDEVICE 0x2652
 
 static int pci_ahci_init(PCIDevice *dev)
 {
 	struct ahci_pci_state *d;
 	d = DO_UPCAST(struct ahci_pci_state, card, dev);
-	pci_config_set_vendor_id(d->card.config,PCI_VENDOR_MYDEVICE);
-	pci_config_set_device_id(d->card.config,PCI_PRODUCT_MYDEVICE);
+	pci_config_set_vendor_id(d->card.config,PCI_VENDOR_ID_INTEL);
+	pci_config_set_device_id(d->card.config,PCI_DEVICE_ID_INTEL_ICH6R_AHCI);
 	d->card.config[PCI_COMMAND]		= PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER;
 	d->card.config[PCI_CLASS_DEVICE]	= 0;
 	d->card.config[0x0b]		= 1;//storage
diff --git a/hw/pci_ids.h b/hw/pci_ids.h
index fe7a121..4d4de93 100644
--- a/hw/pci_ids.h
+++ b/hw/pci_ids.h
@@ -97,3 +97,4 @@
 #define PCI_DEVICE_ID_INTEL_82371AB      0x7111
 #define PCI_DEVICE_ID_INTEL_82371AB_2    0x7112
 #define PCI_DEVICE_ID_INTEL_82371AB_3    0x7113
+#define PCI_DEVICE_ID_INTEL_ICH6R_AHCI    0x2652
-- 
1.5.6.5


  reply	other threads:[~2010-05-04  1:08 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-30 12:48 [Qemu-devel] add ahci support into qemu 乔崇
2010-05-02  8:05 ` Alexander Graf
2010-05-02 12:52   ` [Qemu-devel] [RFC] [PATCH] " 乔崇
2010-05-02 15:36     ` [Qemu-devel] " Sebastian Herbszt
2010-05-02 15:49       ` Avi Kivity
2010-05-02 15:56       ` Elek Roland
2010-05-03 21:08         ` Elek Roland
2010-05-04 20:56           ` Sebastian Herbszt
2010-05-02 22:13     ` Sebastian Herbszt
2010-05-04  1:07       ` 乔崇 [this message]
2010-05-04 20:51         ` Sebastian Herbszt
2010-05-05 19:37           ` Stuart Brady
2010-05-06 19:10             ` [Qemu-devel] " Sebastian Herbszt
2010-05-04  0:01     ` [Qemu-devel] " Alexander Graf
2010-05-04  0:28       ` 乔崇
2010-05-09 19:16         ` Alexander Graf
2010-05-10 11:24           ` 乔崇

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4BDF7358.8050101@loongson.cn \
    --to=qiaochong@loongson.cn \
    --cc=agraf@suse.de \
    --cc=elek.roland@gmail.com \
    --cc=herbszt@gmx.de \
    --cc=joro@8bytes.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.