diff options
author | David Gwynne <dlg@cvs.openbsd.org> | 2006-12-09 06:42:54 +0000 |
---|---|---|
committer | David Gwynne <dlg@cvs.openbsd.org> | 2006-12-09 06:42:54 +0000 |
commit | 770403284bd8e13d2efc1106f5a772db03815db3 (patch) | |
tree | f452001f314c11d3a46112228872772d229e08cc /sys | |
parent | ada42c8c34c8845803bb20029795bd722d341b10 (diff) |
figure out which revision of ahci we're trying to use and print it out.
if we don't know about it, bomb out.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/pci/ahci.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/sys/dev/pci/ahci.c b/sys/dev/pci/ahci.c index e54d32f537f..dcc2bca1b7b 100644 --- a/sys/dev/pci/ahci.c +++ b/sys/dev/pci/ahci.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ahci.c,v 1.6 2006/12/09 06:29:43 dlg Exp $ */ +/* $OpenBSD: ahci.c,v 1.7 2006/12/09 06:42:53 dlg Exp $ */ /* * Copyright (c) 2006 David Gwynne <dlg@openbsd.org> @@ -72,6 +72,9 @@ int ahcidebug = AHCI_D_VERBOSE; #define AHCI_REG_IS 0x008 /* Interrupt Status */ #define AHCI_REG_PI 0x00c /* Ports Implemented */ #define AHCI_REG_VS 0x010 /* AHCI Version */ +#define AHCI_REG_VS_0_95 0x00000905 /* 0.95 */ +#define AHCI_REG_VS_1_0 0x00010000 /* 1.0 */ +#define AHCI_REG_VS_1_1 0x00010100 /* 1.1 */ #define AHCI_REG_CCC_CTL 0x014 /* Coalescing Control */ #define AHCI_REG_CCC_PORTS 0x018 /* Coalescing Ports */ #define AHCI_REG_EM_LOC 0x01c /* Enclosure Mgmt Location */ @@ -138,8 +141,10 @@ int ahci_map_pci(struct ahci_softc *sc, struct pci_attach_args *pa) { pcireg_t memtype; + u_int32_t vs; pci_intr_handle_t ih; const char *intrstr; + const char *revision; memtype = pci_mapreg_type(pa->pa_pc, pa->pa_tag, AHCI_PCI_BAR); if (pci_mapreg_map(pa, AHCI_PCI_BAR, memtype, 0, &sc->sc_iot, @@ -148,6 +153,23 @@ ahci_map_pci(struct ahci_softc *sc, struct pci_attach_args *pa) return (1); } + vs = ahci_read(sc, AHCI_REG_VS); + switch (vs) { + case AHCI_REG_VS_0_95: + revision = "0.95"; + break; + case AHCI_REG_VS_1_0: + revision = "1.0"; + break; + case AHCI_REG_VS_1_1: + revision = "1.1"; + break; + + default: + printf(": unsupported revision (0x%08x)\n", vs); + goto unmap; + } + if (pci_intr_map(pa, &ih) != 0) { printf(": unable to map interrupt\n"); goto unmap; @@ -162,7 +184,7 @@ ahci_map_pci(struct ahci_softc *sc, struct pci_attach_args *pa) goto unmap; } - printf(": %s\n", intrstr); + printf(": %s, AHCI %s\n", intrstr, revision); return (0); |