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

This driver (drivers/usb/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

If you have several USB PCI controllers, define

	CONFIG_PCI_OHCI_DEVNO: number of the OHCI device in PCI list

If undefined, the first instance found in PCI space will be used.

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

	CFG_OHCI_SWAP_REG_ACCESS
