Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/drv/generic/remote_usb.c

    r56fb3732 r95120c3  
    3333 */
    3434
    35 #include <ipc/ipc.h>
    3635#include <async.h>
    3736#include <errno.h>
     
    4140
    4241
     42static void remote_usb_get_address(device_t *, void *, ipc_callid_t, ipc_call_t *);
     43static void remote_usb_get_interface(device_t *, void *, ipc_callid_t, ipc_call_t *);
    4344static void remote_usb_get_hc_handle(device_t *, void *, ipc_callid_t, ipc_call_t *);
    4445//static void remote_usb(device_t *, void *, ipc_callid_t, ipc_call_t *);
     
    4647/** Remote USB interface operations. */
    4748static remote_iface_func_ptr_t remote_usb_iface_ops [] = {
     49        remote_usb_get_address,
     50        remote_usb_get_interface,
    4851        remote_usb_get_hc_handle
    4952};
     
    5861
    5962
     63void remote_usb_get_address(device_t *device, void *iface,
     64    ipc_callid_t callid, ipc_call_t *call)
     65{
     66        usb_iface_t *usb_iface = (usb_iface_t *) iface;
     67
     68        if (usb_iface->get_address == NULL) {
     69                async_answer_0(callid, ENOTSUP);
     70                return;
     71        }
     72
     73        devman_handle_t handle = DEV_IPC_GET_ARG1(*call);
     74
     75        usb_address_t address;
     76        int rc = usb_iface->get_address(device, handle, &address);
     77        if (rc != EOK) {
     78                async_answer_0(callid, rc);
     79        } else {
     80                async_answer_1(callid, EOK, address);
     81        }
     82}
     83
     84void remote_usb_get_interface(device_t *device, void *iface,
     85    ipc_callid_t callid, ipc_call_t *call)
     86{
     87        usb_iface_t *usb_iface = (usb_iface_t *) iface;
     88
     89        if (usb_iface->get_interface == NULL) {
     90                async_answer_0(callid, ENOTSUP);
     91                return;
     92        }
     93
     94        devman_handle_t handle = DEV_IPC_GET_ARG1(*call);
     95
     96        int iface_no;
     97        int rc = usb_iface->get_interface(device, handle, &iface_no);
     98        if (rc != EOK) {
     99                async_answer_0(callid, rc);
     100        } else {
     101                async_answer_1(callid, EOK, iface_no);
     102        }
     103}
     104
    60105void remote_usb_get_hc_handle(device_t *device, void *iface,
    61106    ipc_callid_t callid, ipc_call_t *call)
     
    64109
    65110        if (usb_iface->get_hc_handle == NULL) {
    66                 ipc_answer_0(callid, ENOTSUP);
     111                async_answer_0(callid, ENOTSUP);
    67112                return;
    68113        }
     
    71116        int rc = usb_iface->get_hc_handle(device, &handle);
    72117        if (rc != EOK) {
    73                 ipc_answer_0(callid, rc);
     118                async_answer_0(callid, rc);
    74119        }
    75120
    76         ipc_answer_1(callid, EOK, (sysarg_t) handle);
     121        async_answer_1(callid, EOK, (sysarg_t) handle);
    77122}
    78123
Note: See TracChangeset for help on using the changeset viewer.