Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usb/src/pipesinit.c

    rfa0f53b r159b91f4  
    356356        assert(connection);
    357357
    358         fibril_mutex_initialize(&pipe->guard);
    359358        pipe->wire = connection;
    360359        pipe->hc_phone = -1;
    361         fibril_mutex_initialize(&pipe->hc_phone_mutex);
    362360        pipe->endpoint_no = endpoint_no;
    363361        pipe->transfer_type = transfer_type;
    364362        pipe->max_packet_size = max_packet_size;
    365363        pipe->direction = direction;
    366         pipe->refcount = 0;
    367         pipe->auto_reset_halt = false;
    368364
    369365        return EOK;
     
    386382            0, USB_TRANSFER_CONTROL, CTRL_PIPE_MIN_PACKET_SIZE,
    387383            USB_DIRECTION_BOTH);
    388 
    389         pipe->auto_reset_halt = true;
    390384
    391385        return rc;
     
    419413        int rc;
    420414
    421         rc = usb_pipe_start_long_transfer(pipe);
     415        TRY_LOOP(failed_attempts) {
     416                rc = usb_pipe_start_session(pipe);
     417                if (rc == EOK) {
     418                        break;
     419                }
     420        }
    422421        if (rc != EOK) {
    423422                return rc;
     
    440439                }
    441440        }
    442         usb_pipe_end_long_transfer(pipe);
     441        usb_pipe_end_session(pipe);
    443442        if (rc != EOK) {
    444443                return rc;
     
    462461    usb_hc_connection_t *hc_connection)
    463462{
    464         return usb_pipe_register_with_speed(pipe, USB_SPEED_MAX + 1,
    465             interval, hc_connection);
    466 }
    467 
    468 /** Register endpoint with a speed at the host controller.
    469  *
    470  * You will rarely need to use this function because it is needed only
    471  * if the registered endpoint is of address 0 and there is no other way
    472  * to tell speed of the device at address 0.
    473  *
    474  * @param pipe Pipe to be registered.
    475  * @param speed Speed of the device
    476  *      (invalid speed means use previously specified one).
    477  * @param interval Polling interval.
    478  * @param hc_connection Connection to the host controller (must be opened).
    479  * @return Error code.
    480  */
    481 int usb_pipe_register_with_speed(usb_pipe_t *pipe, usb_speed_t speed,
    482     unsigned int interval,
    483     usb_hc_connection_t *hc_connection)
    484 {
    485463        assert(pipe);
    486464        assert(hc_connection);
     
    490468        }
    491469
    492 #define _PACK2(high, low) (((high) << 16) + (low))
    493 #define _PACK3(high, middle, low) (((((high) << 8) + (middle)) << 8) + (low))
    494 
    495         return async_req_4_0(hc_connection->hc_phone,
     470#define _PACK(high, low) ((high) * 256 + (low))
     471
     472        return async_req_5_0(hc_connection->hc_phone,
    496473            DEV_IFACE_ID(USBHC_DEV_IFACE), IPC_M_USBHC_REGISTER_ENDPOINT,
    497             _PACK2(pipe->wire->address, pipe->endpoint_no),
    498             _PACK3(speed, pipe->transfer_type, pipe->direction),
    499             _PACK2(pipe->max_packet_size, interval));
    500 
    501 #undef _PACK2
    502 #undef _PACK3
     474            _PACK(pipe->wire->address, pipe->endpoint_no),
     475            _PACK(pipe->transfer_type, pipe->direction),
     476            pipe->max_packet_size, interval);
     477
     478#undef _PACK
    503479}
    504480
Note: See TracChangeset for help on using the changeset viewer.