\ ***************************************************************************** \ * Copyright (c) 2004, 2011 IBM Corporation \ * All rights reserved. \ * This program and the accompanying materials \ * are made available under the terms of the BSD License \ * which accompanies this distribution, and is available at \ * http://www.opensource.org/licenses/bsd-license.php \ * \ * Contributors: \ * IBM Corporation - initial implementation \ ****************************************************************************/ s" serial bus [ " type my-space pci-class-name type s" ]" type cr my-space pci-device-generic-setup STRUCT /n FIELD hcd>base /n FIELD hcd>type /n FIELD hcd>num /n FIELD hcd>ops /n FIELD hcd>priv /n FIELD hcd>nextaddr CONSTANT /hci-dev : usb-setup-hcidev ( num hci-dev -- ) >r 10 config-l@ F AND case 0 OF 10 config-l@ translate-my-address ENDOF \ 32-bit memory space 4 OF \ 64-bit memory space 14 config-l@ 20 lshift \ Read two bars 10 config-l@ OR translate-my-address ENDOF ENDCASE F not AND ( io-base ) r@ hcd>base ! 08 config-l@ 8 rshift 0000000F0 AND 4 rshift ( usb-type ) r@ hcd>type ! ( usb-num ) r@ hcd>num ! r> drop ; \ Handle USB OHCI controllers: : handle-usb-class ( -- ) \ set Memory Write and Invalidate Enable, SERR# Enable \ (see PCI 3.0 Spec Chapter 6.2.2 device control): 4 config-w@ 110 or 4 config-w! pci-master-enable \ set PCI Bus master bit and pci-mem-enable \ memory space enable for USB scan ; \ Check PCI sub-class and interface type of Serial Bus Controller \ to include the appropriate driver: : handle-sbc-subclass ( -- ) my-space pci-class@ ffff and CASE \ get PCI sub-class and interface 0310 OF \ OHCI controller handle-usb-class set-ohci-alias ENDOF 0320 OF \ EHCI controller handle-usb-class set-ehci-alias ENDOF 0330 OF \ XHCI controller handle-usb-class set-xhci-alias ENDOF ENDCASE ; handle-sbc-subclass