2 * Copyright (c) 2010 Vojtech Horky
3 * Copyright (c) 2011 Jan Vesely
4 * Copyright (c) 2018 Michal Staruch, Ondrej Hlavaty
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
11 * - Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * - Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * - The name of the author may not be used to endorse or promote products
17 * derived from this software without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 /** @addtogroup libdrv
43 #include "usb_iface.h"
44 #include "ddf/driver.h"
46 usb_dev_session_t
*usb_dev_connect(devman_handle_t handle
)
48 return devman_device_connect(handle
, IPC_FLAG_BLOCKING
);
51 usb_dev_session_t
*usb_dev_connect_to_self(ddf_dev_t
*dev
)
53 return devman_parent_device_connect(ddf_dev_get_handle(dev
),
57 void usb_dev_disconnect(usb_dev_session_t
*sess
)
64 IPC_M_USB_GET_MY_DESCRIPTION
,
67 /** Tell interface number given device can use.
68 * @param[in] exch IPC communication exchange
69 * @param[in] handle Id of the device
70 * @param[out] usb_iface Assigned USB interface
73 errno_t
usb_get_my_description(async_exch_t
*exch
, usb_device_desc_t
*desc
)
78 sysarg_t address
, depth
, speed
, handle
, iface
;
80 const errno_t ret
= async_req_1_5(exch
, DEV_IFACE_ID(USB_DEV_IFACE
),
81 IPC_M_USB_GET_MY_DESCRIPTION
, &address
, &depth
, &speed
, &handle
,
83 if (ret
== EOK
&& desc
) {
84 *desc
= (usb_device_desc_t
) {
96 static void remote_usb_get_my_description(ddf_fun_t
*, void *, ipc_call_t
*);
98 /** Remote USB interface operations. */
99 static const remote_iface_func_ptr_t remote_usb_iface_ops
[] = {
100 [IPC_M_USB_GET_MY_DESCRIPTION
] = remote_usb_get_my_description
,
103 /** Remote USB interface structure.
105 const remote_iface_t remote_usb_iface
= {
106 .method_count
= ARRAY_SIZE(remote_usb_iface_ops
),
107 .methods
= remote_usb_iface_ops
,
110 void remote_usb_get_my_description(ddf_fun_t
*fun
, void *iface
,
113 const usb_iface_t
*usb_iface
= (usb_iface_t
*) iface
;
115 if (usb_iface
->get_my_description
== NULL
) {
116 async_answer_0(call
, ENOTSUP
);
120 usb_device_desc_t desc
;
121 const errno_t ret
= usb_iface
->get_my_description(fun
, &desc
);
123 async_answer_0(call
, ret
);
125 async_answer_5(call
, EOK
,
126 (sysarg_t
) desc
.address
,
127 (sysarg_t
) desc
.depth
,
128 (sysarg_t
) desc
.speed
,