/****************************************************************************** * Copyright (c) 2013 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 *****************************************************************************/ /* * libusb bindings for SLOF - implementation */ #include /************************************************/ /* Register with the usb-core */ /* SLOF: USB-OHCI-REGISTER ( -- ) */ /* LIBNEWUSB: usb_ohci_register(void) */ /************************************************/ PRIM(USB_X2d_OHCI_X2d_REGISTER) usb_ohci_register(); MIRP /************************************************/ /* Register with the usb-core */ /* SLOF: USB-EHCI-REGISTER ( -- ) */ /* LIBNEWUSB: usb_ehci_register(void) */ /************************************************/ PRIM(USB_X2d_EHCI_X2d_REGISTER) usb_ehci_register(); MIRP /************************************************/ /* Register with the usb-core */ /* SLOF: USB-XHCI-REGISTER ( -- ) */ /* LIBNEWUSB: usb_xhci_register(void) */ /************************************************/ PRIM(USB_X2d_XHCI_X2d_REGISTER) usb_xhci_register(); MIRP /************************************************/ /* Initialize hcidev with the usb-core */ /* SLOF: USB-HCD-INIT ( hcidev -- ) */ /* LIBNEWUSB: usb_hcd_init(hcidev) */ /************************************************/ PRIM(USB_X2d_HCD_X2d_INIT) void *hcidev = TOS.a; POP; usb_hcd_init(hcidev); MIRP /************************************************/ /* Remove hcidev with the usb-core */ /* SLOF: USB-HCD-EXIT ( hcidev -- ) */ /* LIBNEWUSB: usb_hcd_exit(hcidev) */ /************************************************/ PRIM(USB_X2d_HCD_X2d_EXIT) void *hcidev = TOS.a; POP; usb_hcd_exit(hcidev); MIRP /************************************************/ /* Initialize hid */ /* SLOF: USB-HID-INIT ( dev -- true | false )*/ /* LIBNEWUSB: usb_hid_init(hcidev) */ /************************************************/ PRIM(USB_X2d_HID_X2d_INIT) void *dev = TOS.a; TOS.n = usb_hid_init(dev); MIRP /************************************************/ /* Exit hid */ /* SLOF: USB-HID-EXIT ( dev -- true | false )*/ /* LIBNEWUSB: usb_hid_exit(hcidev) */ /************************************************/ PRIM(USB_X2d_HID_X2d_EXIT) void *dev = TOS.a; TOS.n = usb_hid_exit(dev); MIRP /************************************************/ /* Read usb keyboard for key */ /* SLOF: USB-READ-KEYB ( dev -- */ /* ( key | false )) */ /* LIBNEWUSB: usb_read_keyb */ /************************************************/ PRIM(USB_X2d_READ_X2d_KEYB) void *dev = TOS.a; TOS.n = usb_read_keyb(dev); MIRP /************************************************/ /* Is USB KEY available */ /* SLOF: USB-KEY-AVAILABLE ( dev -- ( true | */ /* false ))*/ /* LIBNEWUSB: usb_key_available */ /************************************************/ PRIM(USB_X2d_KEY_X2d_AVAILABLE) void *dev = TOS.a; TOS.n = usb_key_available(dev); MIRP /************************************************/ /* Initialize and enumerate generic hub */ /* SLOF: USB-HUB-INIT ( dev -- true | false ) */ /* LIBNEWUSB: usb_hub_init */ /************************************************/ PRIM(USB_X2d_HUB_X2d_INIT) void *dev = TOS.a; TOS.n = usb_hub_init(dev); MIRP /************************************************/ /* Initialize msc */ /* SLOF: USB-MSC-INIT ( dev -- true | false )*/ /* LIBNEWUSB: usb_msc_init(hcidev) */ /************************************************/ PRIM(USB_X2d_MSC_X2d_INIT) void *dev = TOS.a; TOS.n = usb_msc_init(dev); MIRP /************************************************/ /* Exit msc */ /* SLOF: USB-MSC-EXIT ( dev -- true | false )*/ /* LIBNEWUSB: usb_msc_exit(hcidev) */ /************************************************/ PRIM(USB_X2d_MSC_X2d_EXIT) void *dev = TOS.a; TOS.n = usb_msc_exit(dev); MIRP /*****************************************************************************/ /* Transfer data through control endpoint */ /* SLOF: USB-TRANSFER_CTRL ( dev req data -- true | false ) */ /* LIBNEWUSB: int usb_transfer_ctrl(void *dev, void *req, void *data) */ /*****************************************************************************/ PRIM(USB_X2d_TRANSFER_X2d_CTRL) void *data = TOS.a; POP; void *req = TOS.a; POP; TOS.n = usb_transfer_ctrl(TOS.a, req, data); MIRP /*****************************************************************************/ /* Transfer data through bulk endpoint */ /* SLOF: USB-TRANSFER_BULK ( dev dir td td-phys data size -- true | false ) */ /* LIBNEWUSB: int usb_transfer_bulk(void *dev, int dir, void *td, */ /* void *td_phys, void *data, int size) */ /*****************************************************************************/ PRIM(USB_X2d_TRANSFER_X2d_BULK) int size = TOS.u; POP; void *data = TOS.a; POP; void *td_phys = TOS.a; POP; void *td = TOS.a; POP; int dir = TOS.u; POP; TOS.n = usb_transfer_bulk(TOS.a, dir, td, td_phys, data, size); MIRP