Make fwohci works on big endian cpu (e.g., powermac g4).

This commit is contained in:
enami 2001-03-15 23:01:33 +00:00
parent 6fafd0bb60
commit fe99796a13
3 changed files with 17 additions and 5 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: fwohci.c,v 1.21 2001/03/14 06:46:17 onoe Exp $ */
/* $NetBSD: fwohci.c,v 1.22 2001/03/15 23:01:33 enami Exp $ */
/*-
* Copyright (c) 2000 The NetBSD Foundation, Inc.
@ -528,6 +528,10 @@ fwohci_hw_init(struct fwohci_softc *sc)
OHCI_CSR_WRITE(sc, OHCI_REG_HCControlClear,
OHCI_HCControl_NoByteSwapData | OHCI_HCControl_APhyEnhanceEnable);
#if BYTE_ORDER == BIG_ENDIAN
OHCI_CSR_WRITE(sc, OHCI_REG_HCControlSet,
OHCI_HCControl_NoByteSwapData);
#endif
OHCI_CSR_WRITE(sc, OHCI_REG_IntMaskClear, ~0);
OHCI_CSR_WRITE(sc, OHCI_REG_IntMaskSet, OHCI_Int_BusReset |

View File

@ -1,4 +1,4 @@
/* $NetBSD: fwohcivar.h,v 1.7 2000/12/13 11:30:15 enami Exp $ */
/* $NetBSD: fwohcivar.h,v 1.8 2001/03/15 23:03:43 enami Exp $ */
/*-
* Copyright (c) 2000 The NetBSD Foundation, Inc.
@ -161,7 +161,9 @@ int fwohci_print (void *, const char *);
/* Macros to read and write the OHCI registers
*/
#define OHCI_CSR_WRITE(sc, reg, val) bus_space_write_4((sc)->sc_memt, (sc)->sc_memh, reg, val)
#define OHCI_CSR_READ(sc, reg) bus_space_read_4((sc)->sc_memt, (sc)->sc_memh, reg)
#define OHCI_CSR_WRITE(sc, reg, val) \
bus_space_write_4((sc)->sc_memt, (sc)->sc_memh, reg, htole32(val))
#define OHCI_CSR_READ(sc, reg) \
le32toh(bus_space_read_4((sc)->sc_memt, (sc)->sc_memh, reg))
#endif /* _DEV_IEEE1394_FWOHCIVAR_H_ */

View File

@ -1,4 +1,4 @@
/* $NetBSD: fwohci_pci.c,v 1.7 2001/03/15 22:20:12 enami Exp $ */
/* $NetBSD: fwohci_pci.c,v 1.8 2001/03/15 23:01:34 enami Exp $ */
/*-
* Copyright (c) 2000 The NetBSD Foundation, Inc.
@ -114,6 +114,12 @@ fwohci_pci_attach(struct device *parent, struct device *self, void *aux)
pci_conf_write(pa->pa_pc, pa->pa_tag, PCI_COMMAND_STATUS_REG,
csr | PCI_COMMAND_MASTER_ENABLE);
#if BYTE_ORDER == BIG_ENDIAN
csr = pci_conf_read(pa->pa_pc, pa->pa_tag, PCI_OHCI_CONTROL_REGISTER);
pci_conf_write(pa->pa_pc, pa->pa_tag, PCI_OHCI_CONTROL_REGISTER,
csr | PCI_GLOBAL_SWAP_BE);
#endif
/* Map and establish the interrupt. */
if (pci_intr_map(pa, &ih)) {
printf("%s: couldn't map interrupt\n", self->dv_xname);