Changeset 92b41f33 in mainline for uspace/lib/usb


Ignore:
Timestamp:
2011-03-13T22:54:33Z (15 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b711f62
Parents:
deb4ba7 (diff), 5fd22d8 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Add library layer for bandwidth reservation

See ticket #121.

Location:
uspace/lib/usb
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usb/include/usb/pipes.h

    rdeb4ba7 r92b41f33  
    131131int usb_endpoint_pipe_initialize_from_configuration(usb_endpoint_mapping_t *,
    132132    size_t, uint8_t *, size_t, usb_device_connection_t *);
    133 
     133int usb_endpoint_pipe_register(usb_endpoint_pipe_t *, unsigned int,
     134    usb_hc_connection_t *);
     135int usb_endpoint_pipe_unregister(usb_endpoint_pipe_t *, usb_hc_connection_t *);
    134136
    135137int usb_endpoint_pipe_start_session(usb_endpoint_pipe_t *);
  • uspace/lib/usb/src/devdrv.c

    rdeb4ba7 r92b41f33  
    155155        }
    156156
     157        /* Register the endpoints. */
     158        usb_hc_connection_t hc_conn;
     159        rc = usb_hc_connection_initialize_from_device(&hc_conn, dev->ddf_dev);
     160        if (rc != EOK) {
     161                usb_log_error(
     162                    "Failed initializing connection to host controller: %s.\n",
     163                    str_error(rc));
     164                goto rollback;
     165        }
     166        rc = usb_hc_connection_open(&hc_conn);
     167        if (rc != EOK) {
     168                usb_log_error("Failed to connect to host controller: %s.\n",
     169                    str_error(rc));
     170                goto rollback;
     171        }
     172        for (i = 0; i < pipe_count; i++) {
     173                if (dev->pipes[i].present) {
     174                        rc = usb_endpoint_pipe_register(dev->pipes[i].pipe,
     175                            dev->pipes[i].descriptor->poll_interval,
     176                            &hc_conn);
     177                        /* Ignore error when operation not supported by HC. */
     178                        if ((rc != EOK) && (rc != ENOTSUP)) {
     179                                /* FIXME: what shall we do? */
     180                                dev->pipes[i].present = false;
     181                                free(dev->pipes[i].pipe);
     182                                dev->pipes[i].pipe = NULL;
     183                        }
     184                }
     185        }
     186        /* Ignoring errors here. */
     187        usb_hc_connection_close(&hc_conn);
     188
    157189        return EOK;
    158190
  • uspace/lib/usb/src/pipesinit.c

    rdeb4ba7 r92b41f33  
    3838#include <usb/dp.h>
    3939#include <usb/request.h>
     40#include <usbhc_iface.h>
    4041#include <errno.h>
    4142#include <assert.h>
     
    393394}
    394395
     396/** Register endpoint with the host controller.
     397 *
     398 * @param pipe Pipe to be registered.
     399 * @param interval Polling interval.
     400 * @param hc_connection Connection to the host controller (must be opened).
     401 * @return Error code.
     402 */
     403int usb_endpoint_pipe_register(usb_endpoint_pipe_t *pipe,
     404    unsigned int interval,
     405    usb_hc_connection_t *hc_connection)
     406{
     407        assert(pipe);
     408        assert(hc_connection);
     409
     410        if (!usb_hc_connection_is_opened(hc_connection)) {
     411                return EBADF;
     412        }
     413
     414#define _PACK(high, low) ((high) * 256 + (low))
     415
     416        return async_req_5_0(hc_connection->hc_phone,
     417            DEV_IFACE_ID(USBHC_DEV_IFACE), IPC_M_USBHC_REGISTER_ENDPOINT,
     418            _PACK(pipe->wire->address, pipe->endpoint_no),
     419            _PACK(pipe->transfer_type, pipe->direction),
     420            pipe->max_packet_size, interval);
     421
     422#undef _PACK
     423}
     424
     425/** Revert endpoint registration with the host controller.
     426 *
     427 * @param pipe Pipe to be unregistered.
     428 * @param hc_connection Connection to the host controller (must be opened).
     429 * @return Error code.
     430 */
     431int usb_endpoint_pipe_unregister(usb_endpoint_pipe_t *pipe,
     432    usb_hc_connection_t *hc_connection)
     433{
     434        assert(pipe);
     435        assert(hc_connection);
     436
     437        if (!usb_hc_connection_is_opened(hc_connection)) {
     438                return EBADF;
     439        }
     440
     441        return async_req_4_0(hc_connection->hc_phone,
     442            DEV_IFACE_ID(USBHC_DEV_IFACE), IPC_M_USBHC_UNREGISTER_ENDPOINT,
     443            pipe->wire->address, pipe->endpoint_no, pipe->direction);
     444}
     445
    395446/**
    396447 * @}
Note: See TracChangeset for help on using the changeset viewer.