Notes on the the generic USB-OHCI driver
========================================

This driver (drivers/usb_ohci.[ch]) is the result of the merge of
various existing OHCI drivers that were basically identical beside
cpu/board dependant initalization. This initalization has been moved
into cpu/board directories and are called via the hooks below.

Configuration options
----------------------

	CONFIG_USB_OHCI_NEW: enable the new OHCI driver

	CFG_USB_OHCI_BOARD_INIT: call the board dependant hooks:

		  - extern int usb_board_init(void);
		  - extern int usb_board_stop(void);
		  - extern int usb_cpu_init_fail(void);

	CFG_USB_OHCI_CPU_INIT: call the cpu dependant hooks:

		  - extern int usb_cpu_init(void);
		  - extern int usb_cpu_stop(void);
		  - extern int usb_cpu_init_fail(void);

	CFG_USB_OHCI_REGS_BASE: defines the base address of the OHCI
				registers

	CFG_USB_OHCI_SLOT_NAME: slot name

	CFG_USB_OHCI_MAX_ROOT_PORTS: maximal number of ports of the
				     root hub.


Endianness issues
------------------

The USB bus operates in little endian, but unfortunately there are
OHCI controllers that operate in big endian such as ppc4xx and
mpc5xxx. For these the config option

	CFG_OHCI_BE_CONTROLLER

needs to be defined.


PCI Controllers
----------------

You'll need to define

	CONFIG_PCI_OHCI

PCI Controllers need to do byte swapping on register accesses, so they
should to define:

	CFG_OHCI_SWAP_REG_ACCESS
