Date: Sun, 15 Sep 2013 09:51:32 GMT From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257366 - soc2013/zcore/head/usr.sbin/bhyve Message-ID: <201309150951.r8F9pWuk079490@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: zcore Date: Sun Sep 15 09:51:31 2013 New Revision: 257366 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257366 Log: support START_STOP_UNIT 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 Sun Sep 15 09:51:04 2013 (r257365) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sun Sep 15 09:51:31 2013 (r257366) @@ -258,7 +258,7 @@ fis[0] = error; fis[2] = tfd & 0x77; *(uint32_t *)(fis + 4) = (1 << slot); - if (error & ATA_S_ERROR) + if (fis[2] & ATA_S_ERROR) p->is |= AHCI_P_IX_TFE; p->tfd = tfd; p->ci &= ~(1 << slot); @@ -287,7 +287,7 @@ fis[11] = cfis[11]; fis[12] = cfis[12]; fis[13] = cfis[13]; - if (error & ATA_S_ERROR) + if (fis[2] & ATA_S_ERROR) p->is |= AHCI_P_IX_TFE; p->tfd = tfd; p->ci &= ~(1 << slot); @@ -900,6 +900,30 @@ } static void +atapi_start_stop_unit(struct ahci_port *p, int slot, uint8_t *cfis) +{ + uint32_t tfd; + uint8_t *acmd = cfis + 0x40; + + switch (acmd[4] & 3) { + case 0: + case 1: + case 3: + cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; + tfd = ATA_S_READY | ATA_S_DSC; + break; + case 2: + /* TODO eject media */ + cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; + p->sense_key = ATA_SENSE_ILLEGAL_REQUEST; + p->asc = 0x53; + tfd = (p->sense_key << 12) | ATA_S_READY | ATA_S_ERROR; + break; + } + ahci_write_fis_d2h(p, slot, cfis, tfd); +} + +static void handle_packet_cmd(struct ahci_port *p, int slot, uint8_t *cfis) { uint8_t *acmd = cfis + 0x40; @@ -938,6 +962,9 @@ case REQUEST_SENSE: atapi_request_sense(p, slot, cfis); break; + case START_STOP_UNIT: + atapi_start_stop_unit(p, slot, cfis); + break; default: break; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201309150951.r8F9pWuk079490>