Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / SLOF / lib / libusb / usb.code
1 /******************************************************************************
2  * Copyright (c) 2013 IBM Corporation
3  * All rights reserved.
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
8  *
9  * Contributors:
10  *     IBM Corporation - initial implementation
11  *****************************************************************************/
12 /*
13  * libusb bindings for SLOF - implementation
14  */
15
16 #include <usb.h>
17
18
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)
25         usb_ohci_register();
26 MIRP
27
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)
34         usb_ehci_register();
35 MIRP
36
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)
43         usb_xhci_register();
44 MIRP
45
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;
53         usb_hcd_init(hcidev);
54 MIRP
55
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;
63         usb_hcd_exit(hcidev);
64 MIRP
65
66 /************************************************/
67 /* Initialize hid                               */
68 /* SLOF:   USB-HID-INIT  ( dev -- true | false )*/
69 /* LIBNEWUSB: usb_hid_init(hcidev)              */
70 /************************************************/
71 PRIM(USB_X2d_HID_X2d_INIT)
72         void *dev = TOS.a;
73         TOS.n = usb_hid_init(dev);
74 MIRP
75
76 /************************************************/
77 /* Exit hid                                     */
78 /* SLOF:   USB-HID-EXIT  ( dev -- true | false )*/
79 /* LIBNEWUSB: usb_hid_exit(hcidev)              */
80 /************************************************/
81 PRIM(USB_X2d_HID_X2d_EXIT)
82         void *dev = TOS.a;
83         TOS.n = usb_hid_exit(dev);
84 MIRP
85
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)
93         void *dev = TOS.a;
94         TOS.n = usb_read_keyb(dev);
95 MIRP
96
97 /************************************************/
98 /* Is USB KEY available                         */
99 /* SLOF:   USB-KEY-AVAILABLE ( dev -- ( true |  */
100 /*                                      false ))*/
101 /* LIBNEWUSB: usb_key_available                 */
102 /************************************************/
103 PRIM(USB_X2d_KEY_X2d_AVAILABLE)
104         void *dev = TOS.a;
105         TOS.n = usb_key_available(dev);
106 MIRP
107
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)
114         void *dev = TOS.a;
115         TOS.n = usb_hub_init(dev);
116 MIRP
117
118 /************************************************/
119 /* Initialize msc                               */
120 /* SLOF:   USB-MSC-INIT  ( dev -- true | false )*/
121 /* LIBNEWUSB: usb_msc_init(hcidev)              */
122 /************************************************/
123 PRIM(USB_X2d_MSC_X2d_INIT)
124         void *dev = TOS.a;
125         TOS.n = usb_msc_init(dev);
126 MIRP
127
128 /************************************************/
129 /* Exit msc                                     */
130 /* SLOF:   USB-MSC-EXIT  ( dev -- true | false )*/
131 /* LIBNEWUSB: usb_msc_exit(hcidev)              */
132 /************************************************/
133 PRIM(USB_X2d_MSC_X2d_EXIT)
134         void *dev = TOS.a;
135         TOS.n = usb_msc_exit(dev);
136 MIRP
137
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);
147 MIRP
148
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);
162 MIRP