Changeset c6f82e5 in mainline for uspace/drv


Ignore:
Timestamp:
2018-01-19T20:56:14Z (8 years ago)
Author:
Ondřej Hlavatý <aearsis@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7ec7b7e
Parents:
69b2dfee
Message:

libusbhost: do not try to handle the toggle bit in a generic way

Location:
uspace/drv/bus/usb
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/ehci/ehci_bus.c

    r69b2dfee rc6f82e5  
    4343#include "hc.h"
    4444
    45 /** Callback to set toggle on ED.
     45/**
     46 * Callback to set toggle on ED.
    4647 *
    4748 * @param[in] hcd_ep hcd endpoint structure
    4849 * @param[in] toggle new value of toggle bit
    4950 */
    50 static void ehci_ep_toggle_reset(endpoint_t *ep)
     51void ehci_ep_toggle_reset(endpoint_t *ep)
    5152{
    5253        ehci_endpoint_t *instance = ehci_endpoint_get(ep);
     
    5455                usb_log_warning("EP(%p): Resetting toggle bit for transfer directed EP", instance);
    5556        qh_toggle_set(instance->qh, 0);
    56         ep->toggle = 0;
    5757}
    5858
     
    169169        .interrupt = ehci_hc_interrupt,
    170170        .status = ehci_hc_status,
     171
    171172        .endpoint_destroy = ehci_endpoint_destroy,
    172173        .endpoint_create = ehci_endpoint_create,
    173174        .endpoint_register = ehci_register_ep,
    174175        .endpoint_unregister = ehci_unregister_ep,
    175         .endpoint_toggle_reset = ehci_ep_toggle_reset,
    176176        .endpoint_count_bw = bandwidth_count_usb20,
     177
    177178        .batch_create = ehci_create_batch,
    178179        .batch_destroy = ehci_destroy_batch,
  • uspace/drv/bus/usb/ehci/ehci_bus.h

    r69b2dfee rc6f82e5  
    6868} ehci_bus_t;
    6969
     70void ehci_ep_toggle_reset(endpoint_t *);
    7071void ehci_bus_prepare_ops(void);
    7172
  • uspace/drv/bus/usb/ehci/hc.c

    r69b2dfee rc6f82e5  
    4545#include <usb/debug.h>
    4646#include <usb/usb.h>
     47#include <usb/host/utility.h>
    4748
    4849#include "ehci_batch.h"
     
    379380                                list_remove(current);
    380381                                endpoint_del_ref(&ep->base);
     382                                hc_reset_toggles(&batch->base, &ehci_ep_toggle_reset);
    381383                                usb_transfer_batch_finish(&batch->base);
    382384                        }
  • uspace/drv/bus/usb/ohci/hc.c

    r69b2dfee rc6f82e5  
    4545
    4646#include <usb/debug.h>
     47#include <usb/host/utility.h>
    4748#include <usb/usb.h>
    4849
     
    377378                                list_remove(current);
    378379                                endpoint_del_ref(&ep->base);
     380                                hc_reset_toggles(&batch->base, &ohci_ep_toggle_reset);
    379381                                usb_transfer_batch_finish(&batch->base);
    380382                        }
  • uspace/drv/bus/usb/ohci/hw_struct/endpoint_descriptor.c

    r69b2dfee rc6f82e5  
    100100        OHCI_MEM32_WR(instance->td_head, pa & ED_TDHEAD_PTR_MASK);
    101101        OHCI_MEM32_WR(instance->td_tail, pa & ED_TDTAIL_PTR_MASK);
    102 
    103         /* Set toggle bit */
    104         if (ep->toggle)
    105                 OHCI_MEM32_SET(instance->td_head, ED_TDHEAD_TOGGLE_CARRY);
    106 
    107102}
    108103/**
  • uspace/drv/bus/usb/ohci/ohci_bus.c

    r69b2dfee rc6f82e5  
    4343#include "hc.h"
    4444
    45 /** Callback to reset toggle on ED.
     45/**
     46 * Callback to reset toggle on ED.
    4647 *
    4748 * @param[in] hcd_ep hcd endpoint structure
    4849 * @param[in] toggle new value of toggle bit
    4950 */
    50 static void ohci_ep_toggle_reset(endpoint_t *ep)
     51void ohci_ep_toggle_reset(endpoint_t *ep)
    5152{
    5253        ohci_endpoint_t *instance = ohci_endpoint_get(ep);
    5354        assert(instance);
    5455        assert(instance->ed);
    55         ep->toggle = 0;
    5656        ed_toggle_set(instance->ed, 0);
    5757}
     
    179179        .endpoint_unregister = ohci_unregister_ep,
    180180        .endpoint_count_bw = bandwidth_count_usb11,
    181         .endpoint_toggle_reset = ohci_ep_toggle_reset,
     181
    182182        .batch_create = ohci_create_batch,
    183183        .batch_destroy = ohci_destroy_batch,
  • uspace/drv/bus/usb/ohci/ohci_bus.h

    r69b2dfee rc6f82e5  
    6565
    6666int ohci_bus_init(ohci_bus_t *, hc_t *);
     67void ohci_ep_toggle_reset(endpoint_t *);
    6768
    6869/** Get and convert assigned ohci_endpoint_t structure
  • uspace/drv/bus/usb/uhci/hc.h

    r69b2dfee rc6f82e5  
    127127} hc_t;
    128128
     129typedef struct uhci_endpoint {
     130        endpoint_t base;
     131
     132        bool toggle;
     133} uhci_endpoint_t;
     134
    129135static inline hc_t *hcd_to_hc(hc_device_t *hcd)
    130136{
  • uspace/drv/bus/usb/uhci/transfer_list.c

    r69b2dfee rc6f82e5  
    4141#include <usb/host/usb_transfer_batch.h>
    4242#include <usb/host/utils/malloc32.h>
     43#include <usb/host/utility.h>
    4344
    4445#include "hw_struct/link_pointer.h"
    4546#include "transfer_list.h"
     47#include "hc.h"
    4648
    4749/** Initialize transfer list structures.
     
    155157}
    156158
     159/**
     160 * Reset toggle on endpoint callback.
     161 */
     162static void uhci_reset_toggle(endpoint_t *ep)
     163{
     164        uhci_endpoint_t *uhci_ep = (uhci_endpoint_t *) ep;
     165        uhci_ep->toggle = 0;
     166}
     167
    157168/** Add completed batches to the provided list.
    158169 *
     
    176187                        fibril_mutex_lock(&batch->base.ep->guard);
    177188                        assert(batch->base.ep->active_batch == &batch->base);
     189                        hc_reset_toggles(&batch->base, &uhci_reset_toggle);
    178190                        endpoint_deactivate_locked(batch->base.ep);
    179191                        transfer_list_remove_batch(instance, batch);
  • uspace/drv/bus/usb/uhci/uhci_batch.c

    r69b2dfee rc6f82e5  
    4646
    4747#include "uhci_batch.h"
     48#include "hc.h"
    4849#include "hw_struct/transfer_descriptor.h"
    4950
     
    164165        batch->transfered_size = 0;
    165166
     167        uhci_endpoint_t *uhci_ep = (uhci_endpoint_t *) batch->ep;
     168
    166169        for (size_t i = 0;i < uhci_batch->td_count; ++i) {
    167170                if (td_is_active(&uhci_batch->tds[i])) {
     
    178181                        td_print_status(&uhci_batch->tds[i]);
    179182
    180                         batch->ep->toggle = td_toggle(&uhci_batch->tds[i]);
     183                        uhci_ep->toggle = td_toggle(&uhci_batch->tds[i]);
    181184                        goto substract_ret;
    182185                }
     
    230233        const size_t mps = uhci_batch->base.ep->max_packet_size;
    231234
    232         int toggle = uhci_batch->base.ep->toggle;
     235        uhci_endpoint_t *uhci_ep = (uhci_endpoint_t *) uhci_batch->base.ep;
     236
     237        int toggle = uhci_ep->toggle;
    233238        assert(toggle == 0 || toggle == 1);
    234239
     
    254259        }
    255260        td_set_ioc(&uhci_batch->tds[td - 1]);
    256         uhci_batch->base.ep->toggle = toggle;
     261        uhci_ep->toggle = toggle;
    257262        usb_log_debug2(
    258263            "Batch %p %s %s " USB_TRANSFER_BATCH_FMT " initialized.", \
Note: See TracChangeset for help on using the changeset viewer.