1 /******************************************************************************
2 * Copyright (c) 2013 IBM Corporation
4 * This program and the accompanying materials
5 * are made available under the terms of the BSD License
6 * which accompanies this distribution, and is available at
7 * http://www.opensource.org/licenses/bsd-license.php
10 * IBM Corporation - initial implementation
11 *****************************************************************************/
13 * libusb bindings for SLOF - implementation
19 /************************************************/
20 /* Register with the usb-core */
21 /* SLOF: USB-OHCI-REGISTER ( -- ) */
22 /* LIBNEWUSB: usb_ohci_register(void) */
23 /************************************************/
24 PRIM(USB_X2d_OHCI_X2d_REGISTER)
28 /************************************************/
29 /* Register with the usb-core */
30 /* SLOF: USB-EHCI-REGISTER ( -- ) */
31 /* LIBNEWUSB: usb_ehci_register(void) */
32 /************************************************/
33 PRIM(USB_X2d_EHCI_X2d_REGISTER)
37 /************************************************/
38 /* Register with the usb-core */
39 /* SLOF: USB-XHCI-REGISTER ( -- ) */
40 /* LIBNEWUSB: usb_xhci_register(void) */
41 /************************************************/
42 PRIM(USB_X2d_XHCI_X2d_REGISTER)
46 /************************************************/
47 /* Initialize hcidev with the usb-core */
48 /* SLOF: USB-HCD-INIT ( hcidev -- ) */
49 /* LIBNEWUSB: usb_hcd_init(hcidev) */
50 /************************************************/
51 PRIM(USB_X2d_HCD_X2d_INIT)
52 void *hcidev = TOS.a; POP;
56 /************************************************/
57 /* Remove hcidev with the usb-core */
58 /* SLOF: USB-HCD-EXIT ( hcidev -- ) */
59 /* LIBNEWUSB: usb_hcd_exit(hcidev) */
60 /************************************************/
61 PRIM(USB_X2d_HCD_X2d_EXIT)
62 void *hcidev = TOS.a; POP;
66 /************************************************/
68 /* SLOF: USB-HID-INIT ( dev -- true | false )*/
69 /* LIBNEWUSB: usb_hid_init(hcidev) */
70 /************************************************/
71 PRIM(USB_X2d_HID_X2d_INIT)
73 TOS.n = usb_hid_init(dev);
76 /************************************************/
78 /* SLOF: USB-HID-EXIT ( dev -- true | false )*/
79 /* LIBNEWUSB: usb_hid_exit(hcidev) */
80 /************************************************/
81 PRIM(USB_X2d_HID_X2d_EXIT)
83 TOS.n = usb_hid_exit(dev);
86 /************************************************/
87 /* Read usb keyboard for key */
88 /* SLOF: USB-READ-KEYB ( dev -- */
89 /* ( key | false )) */
90 /* LIBNEWUSB: usb_read_keyb */
91 /************************************************/
92 PRIM(USB_X2d_READ_X2d_KEYB)
94 TOS.n = usb_read_keyb(dev);
97 /************************************************/
98 /* Is USB KEY available */
99 /* SLOF: USB-KEY-AVAILABLE ( dev -- ( true | */
101 /* LIBNEWUSB: usb_key_available */
102 /************************************************/
103 PRIM(USB_X2d_KEY_X2d_AVAILABLE)
105 TOS.n = usb_key_available(dev);
108 /************************************************/
109 /* Initialize and enumerate generic hub */
110 /* SLOF: USB-HUB-INIT ( dev -- true | false ) */
111 /* LIBNEWUSB: usb_hub_init */
112 /************************************************/
113 PRIM(USB_X2d_HUB_X2d_INIT)
115 TOS.n = usb_hub_init(dev);
118 /************************************************/
120 /* SLOF: USB-MSC-INIT ( dev -- true | false )*/
121 /* LIBNEWUSB: usb_msc_init(hcidev) */
122 /************************************************/
123 PRIM(USB_X2d_MSC_X2d_INIT)
125 TOS.n = usb_msc_init(dev);
128 /************************************************/
130 /* SLOF: USB-MSC-EXIT ( dev -- true | false )*/
131 /* LIBNEWUSB: usb_msc_exit(hcidev) */
132 /************************************************/
133 PRIM(USB_X2d_MSC_X2d_EXIT)
135 TOS.n = usb_msc_exit(dev);
138 /*****************************************************************************/
139 /* Transfer data through control endpoint */
140 /* SLOF: USB-TRANSFER_CTRL ( dev req data -- true | false ) */
141 /* LIBNEWUSB: int usb_transfer_ctrl(void *dev, void *req, void *data) */
142 /*****************************************************************************/
143 PRIM(USB_X2d_TRANSFER_X2d_CTRL)
144 void *data = TOS.a; POP;
145 void *req = TOS.a; POP;
146 TOS.n = usb_transfer_ctrl(TOS.a, req, data);
149 /*****************************************************************************/
150 /* Transfer data through bulk endpoint */
151 /* SLOF: USB-TRANSFER_BULK ( dev dir td td-phys data size -- true | false ) */
152 /* LIBNEWUSB: int usb_transfer_bulk(void *dev, int dir, void *td, */
153 /* void *td_phys, void *data, int size) */
154 /*****************************************************************************/
155 PRIM(USB_X2d_TRANSFER_X2d_BULK)
156 int size = TOS.u; POP;
157 void *data = TOS.a; POP;
158 void *td_phys = TOS.a; POP;
159 void *td = TOS.a; POP;
160 int dir = TOS.u; POP;
161 TOS.n = usb_transfer_bulk(TOS.a, dir, td, td_phys, data, size);