Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 1a02517 in mainline


Ignore:
Timestamp:
2011-08-25T08:53:14Z (10 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master
Children:
32e093e
Parents:
3afb758
Message:

libusbhost: Streamline new hcd arch. UHCI: follow changes in libusbhost

Add endpoint registration hook.
Remove batch private data dtor from hcd_t (it should be set during initialization)

Location:
uspace
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/uhci/batch.c

    r3afb758 r1a02517  
    9393 * @param[in] uhci_batch Instance to destroy.
    9494 */
    95 void uhci_transfer_batch_dispose(void *uhci_batch)
     95static void uhci_transfer_batch_dispose(void *uhci_batch)
    9696{
    9797        uhci_transfer_batch_t *instance = uhci_batch;
     
    119119 * Initializes parameters needed for the transfer and callback.
    120120 */
    121 void * uhci_transfer_batch_create(usb_transfer_batch_t *batch)
     121int batch_init_private(usb_transfer_batch_t *batch)
    122122{
    123123#define CHECK_NULL_DISPOSE_RETURN(ptr, message...) \
     
    127127                        uhci_transfer_batch_dispose(uhci_data); \
    128128                } \
    129                 return NULL; \
     129                return ENOMEM; \
    130130        } else (void)0
    131131
     
    164164        /* Set generic data buffer pointer */
    165165        batch->data_buffer = setup + batch->setup_size;
     166        batch->private_data_dtor = uhci_transfer_batch_dispose;
    166167        batch->private_data = uhci_data;
    167168        usb_log_debug2("Batch %p " USB_TRANSFER_BATCH_FMT
     
    171172        batch_setup[batch->ep->transfer_type][batch->ep->direction](batch);
    172173
    173         return uhci_data;
    174 }
    175 /*----------------------------------------------------------------------------*/
     174        return EOK;
     175}
    176176/*----------------------------------------------------------------------------*/
    177177/** Check batch TDs for activity.
  • uspace/drv/bus/usb/uhci/batch.h

    r3afb758 r1a02517  
    3939#include "hw_struct/queue_head.h"
    4040
    41 void * uhci_transfer_batch_create(usb_transfer_batch_t *batch);
    42 void uhci_transfer_batch_dispose(void *uhci_batch);
    43 
    44 bool batch_is_complete(usb_transfer_batch_t *instance);
    45 
    46 qh_t * batch_qh(usb_transfer_batch_t *instance);
     41int batch_init_private(usb_transfer_batch_t *batch);
     42bool batch_is_complete(usb_transfer_batch_t *batch);
     43qh_t * batch_qh(usb_transfer_batch_t *batch);
    4744#endif
    4845/**
  • uspace/drv/bus/usb/uhci/hc.c

    r3afb758 r1a02517  
    198198        instance->generic.private_data = instance;
    199199        instance->generic.schedule = hc_schedule;
    200         instance->generic.batch_private_ctor = uhci_transfer_batch_create;
    201         instance->generic.batch_private_dtor = uhci_transfer_batch_dispose;
     200        instance->generic.batch_init_hook = batch_init_private;
     201        instance->generic.ep_add_hook = NULL;
    202202#undef CHECK_RET_DEST_FUN_RETURN
    203203
  • uspace/lib/usbhost/include/usb/host/hcd.h

    r3afb758 r1a02517  
    5050
    5151        int (*schedule)(hcd_t *, usb_transfer_batch_t *);
    52         void * (*batch_private_ctor)(usb_transfer_batch_t *);
    53         void (*batch_private_dtor)(void *);
     52        int (*batch_init_hook)(usb_transfer_batch_t *);
     53        int (*ep_add_hook)(endpoint_t *);
    5454};
    5555/*----------------------------------------------------------------------------*/
  • uspace/lib/usbhost/include/usb/host/usb_endpoint_manager.h

    r3afb758 r1a02517  
    7777    usb_endpoint_manager_t *instance, usb_target_t target, const uint8_t *data);
    7878
     79/** Wrapper combining allocation and insertion */
    7980static inline int usb_endpoint_manager_add_ep(usb_endpoint_manager_t *instance,
    8081    usb_address_t address, usb_endpoint_t endpoint, usb_direction_t direction,
  • uspace/lib/usbhost/src/iface.c

    r3afb758 r1a02517  
    7878        }
    7979
     80        /* No private data and no private data_dtor, these should be set by
     81         * batch_init_hook*/
    8082        usb_transfer_batch_init(batch, ep, data, NULL, size, setup_data,
    81             setup_size, in, out, arg, fun, NULL, hcd->batch_private_dtor);
    82         if (hcd->batch_private_ctor) {
    83                 batch->private_data = hcd->batch_private_ctor(batch);
    84                 if (!batch->private_data) {
    85                         ret = ENOMEM;
     83            setup_size, in, out, arg, fun, NULL, NULL);
     84        if (hcd->batch_init_hook) {
     85                ret = hcd->batch_init_hook(batch);
     86                if (ret != EOK)
    8687                        goto out;
    87                 }
    8888        } else {
    8989                usb_log_warning("Missing batch_private_data constructor!\n");
     
    199199            max_packet_size, interval);
    200200
    201         return usb_endpoint_manager_add_ep(&hcd->ep_manager, address, endpoint,
    202             direction, transfer_type, speed, max_packet_size, size);
     201        endpoint_t *ep = endpoint_get(
     202            address, endpoint, direction, transfer_type, speed, max_packet_size);
     203        if (!ep)
     204                return ENOMEM;
     205        int ret = EOK;
     206        if (hcd->ep_add_hook) {
     207                ret = hcd->ep_add_hook(ep);
     208        }
     209        if (ret != EOK) {
     210                endpoint_destroy(ep);
     211                return ret;
     212        }
     213
     214        ret = usb_endpoint_manager_register_ep(&hcd->ep_manager, ep, size);
     215        if (ret != EOK) {
     216                endpoint_destroy(ep);
     217        }
     218        return ret;
    203219}
    204220/*----------------------------------------------------------------------------*/
Note: See TracChangeset for help on using the changeset viewer.