socsvn commit: r255450 - soc2013/zcore/head/usr.sbin/bhyve
zcore at FreeBSD.org
zcore at FreeBSD.org
Fri Aug 2 14:17:25 UTC 2013
Author: zcore
Date: Fri Aug 2 14:17:25 2013
New Revision: 255450
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=255450
Log:
only reset necessary port registers during port_reset
Modified:
soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c
Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c
==============================================================================
--- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Fri Aug 2 13:06:49 2013 (r255449)
+++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Fri Aug 2 14:17:25 2013 (r255450)
@@ -57,7 +57,7 @@
*/
static FILE *dbg;
#define dprintf(format, arg...) do{fprintf(dbg, format, ##arg);fflush(dbg);}while(0)
-#define DPRINTF(params) printf params
+#define DPRINTF(params) dprintf params
#define WPRINTF(params) printf params
struct ahci_ioreq {
@@ -211,7 +211,13 @@
static void
ahci_port_reset(struct ahci_port *pr)
{
- memset(&pr->clb, 0, 17 * sizeof(uint32_t));
+ pr->is = 0;
+ pr->ie = 0;
+ pr->ssts = 0;
+ pr->sctl = 0;
+ pr->serr = 0;
+ pr->sact = 0;
+
/* TODO set signature by the device kind */
pr->sig = 0x00000101;
pr->tfd = 0;
@@ -269,15 +275,11 @@
{
int i;
struct pci_ahci_softc *sc;
- uint64_t clb;
if (!(p->cmd & AHCI_P_CMD_ST) || !p->ci)
return;
sc = p->pr_sc;
- clb = (uint64_t)p->clbu << 32 | p->clb;
- p->cmd_lst = paddr_guest2host(ahci_ctx(sc), clb,
- AHCI_CL_SIZE * AHCI_MAX_SLOTS);
for (i = 0; (i < 32) && p->ci; i++) {
if (p->ci & (1 << i)) {
@@ -387,6 +389,8 @@
ahci_generate_intr(sc);
break;
case AHCI_P_CMD:
+ {
+ uint64_t clb;
p->cmd = value;
if (!(value & AHCI_P_CMD_ST)) {
@@ -406,8 +410,12 @@
p->cmd &= ~AHCI_P_CMD_CLO;
}
+ clb = (uint64_t)p->clbu << 32 | p->clb;
+ p->cmd_lst = paddr_guest2host(ahci_ctx(sc), clb,
+ AHCI_CL_SIZE * AHCI_MAX_SLOTS);
handle_cmd(p);
break;
+ }
case AHCI_P_TFD:
case AHCI_P_SIG:
case AHCI_P_SSTS:
More information about the svn-soc-all
mailing list