/******************************************************************************
 * 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 <usb.h>


/************************************************/
/* 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
