The OHCI interfaces I have access to map their control regs etc. into

memory address space rather than IO space.. reflect this when looking for the
interface revision register.

If this is not true for them all then we probably need some smarter code.
This commit is contained in:
Julian Elischer 1998-12-14 21:14:11 +00:00
parent 072fd7d9e7
commit 6384b0f1bb
2 changed files with 12 additions and 7 deletions

View File

@ -1,5 +1,5 @@
/* $NetBSD: ohci_pci.c,v 1.5 1998/11/25 22:32:04 augustss Exp $ */
/* FreeBSD $Id$ */
/* FreeBSD $Id: ohci_pci.c,v 1.5 1998/12/14 09:40:14 n_hibma Exp $ */
/*
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@ -226,6 +226,7 @@ ohci_pci_attach(pcici_t config_id, int unit)
usbd_status r;
ohci_softc_t *sc = NULL;
int rev;
vm_offset_t pbase;
sc = malloc(sizeof(ohci_softc_t), M_DEVBUF, M_NOWAIT);
/* Do not free it below, intr might use the sc */
@ -235,7 +236,11 @@ ohci_pci_attach(pcici_t config_id, int unit)
}
memset(sc, 0, sizeof(ohci_softc_t));
sc->sc_iobase = pci_conf_read(config_id,PCI_OHCI_BASE_REG) & 0xfffff000;
if(!pci_map_mem(config_id, PCI_CBMEM,
(vm_offset_t *)&sc->sc_iobase, &pbase)) {
printf("usb%d: couldn't map memory\n", unit);
return;
}
sc->unit = unit;
if ( !pci_map_int(config_id, (pci_inthand_t *)ohci_intr,
@ -249,7 +254,7 @@ ohci_pci_attach(pcici_t config_id, int unit)
#endif
{
/* XXX is this correct? Does the correct version show up? */
rev = inw(sc->sc_iobase+OHCI_REVISION);
rev = *((unsigned int *)(sc->sc_iobase+OHCI_REVISION));
printf("usb%d: OHCI version %d%d, interrupting at %d\n", unit,
OHCI_REV_HI(rev), OHCI_REV_LO(rev),
(int)pci_conf_read(config_id,PCI_INTERRUPT_REG) & 0xff);

View File

@ -1,5 +1,5 @@
/* $NetBSD: ohci.c,v 1.12 1998/11/30 21:39:20 augustss Exp $ */
/* FreeBSD $Id$ */
/* FreeBSD $Id: ohci.c,v 1.4 1998/12/14 09:32:23 n_hibma Exp $ */
/*
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@ -144,9 +144,9 @@ void ohci_dump_ed __P((ohci_soft_ed_t *));
#define OREAD4(sc, r) bus_space_read_4((sc)->iot, (sc)->ioh, (r))
#define OREAD2(sc, r) bus_space_read_2((sc)->iot, (sc)->ioh, (r))
#elif defined(__FreeBSD__)
#define OWRITE4(sc, r, x) outl((sc)->sc_iobase + (r), (x))
#define OREAD4(sc, r) inl((sc)->sc_iobase + (r))
#define OREAD2(sc, r) inw((sc)->sc_iobase + (r))
#define OWRITE4(sc, r, x) *(unsigned int *) ((sc)->sc_iobase + (r)) = x
#define OREAD4(sc, r) (*(unsigned int *) ((sc)->sc_iobase + (r)))
#define OREAD2(sc, r) (*(unsigned short *) ((sc)->sc_iobase + (r)))
#endif
/* Reverse the bits in a value 0 .. 31 */