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

Changeset b02308e in mainline


Ignore:
Timestamp:
2011-08-25T10:40:37Z (10 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master
Children:
27873be
Parents:
32e093e
Message:

OHCI: Use destructor instead of manual clearing.

Location:
uspace/drv/bus/usb/ohci
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/ohci/hc.c

    r32e093e rb02308e  
    238238                return ENOMEM;
    239239
    240         hcd_endpoint_t *hcd_ep = hcd_endpoint_assign(ep);
    241         if (hcd_ep == NULL) {
     240        int ret = hcd_endpoint_assign(ep);
     241        if (ret != EOK) {
    242242                endpoint_destroy(ep);
    243                 return ENOMEM;
    244         }
    245 
    246         int ret =
    247             usb_endpoint_manager_register_ep(&instance->ep_manager, ep, size);
     243                return ret;
     244        }
     245
     246        ret = usb_endpoint_manager_register_ep(&instance->ep_manager, ep, size);
    248247        if (ret != EOK) {
    249                 hcd_endpoint_clear(ep);
    250248                endpoint_destroy(ep);
    251249                return ret;
     
    257255                instance->registers->control &= ~C_CLE;
    258256                endpoint_list_add_ep(
    259                     &instance->lists[ep->transfer_type], hcd_ep);
     257                    &instance->lists[ep->transfer_type], hcd_endpoint_get(ep));
    260258                instance->registers->control_current = 0;
    261259                instance->registers->control |= C_CLE;
     
    264262                instance->registers->control &= ~C_BLE;
    265263                endpoint_list_add_ep(
    266                     &instance->lists[ep->transfer_type], hcd_ep);
     264                    &instance->lists[ep->transfer_type], hcd_endpoint_get(ep));
    267265                instance->registers->control |= C_BLE;
    268266                break;
     
    271269                instance->registers->control &= (~C_PLE & ~C_IE);
    272270                endpoint_list_add_ep(
    273                     &instance->lists[ep->transfer_type], hcd_ep);
     271                    &instance->lists[ep->transfer_type], hcd_endpoint_get(ep));
    274272                instance->registers->control |= C_PLE | C_IE;
    275273                break;
     
    327325                        break;
    328326                }
    329                 hcd_endpoint_clear(ep);
    330327        } else {
    331328                usb_log_warning("Endpoint without hcd equivalent structure.\n");
  • uspace/drv/bus/usb/ohci/hcd_endpoint.c

    r32e093e rb02308e  
    6161}
    6262/*----------------------------------------------------------------------------*/
     63/** Disposes hcd endpoint structure
     64 *
     65 * @param[in] hcd_ep endpoint structure
     66 */
     67static void hcd_ep_destroy(void *hcd_ep)
     68{
     69        if (hcd_ep) {
     70                hcd_endpoint_t *instance = hcd_ep;
     71                free32(instance->ed);
     72                free32(instance->td);
     73                free(instance);
     74        }
     75}
     76/*----------------------------------------------------------------------------*/
    6377/** Creates new hcd endpoint representation.
    6478 *
     
    6680 * @return pointer to a new hcd endpoint structure, NULL on failure.
    6781 */
    68 hcd_endpoint_t * hcd_endpoint_assign(endpoint_t *ep)
     82int hcd_endpoint_assign(endpoint_t *ep)
    6983{
    7084        assert(ep);
    7185        hcd_endpoint_t *hcd_ep = malloc(sizeof(hcd_endpoint_t));
    7286        if (hcd_ep == NULL)
    73                 return NULL;
     87                return ENOMEM;
    7488
    7589        hcd_ep->ed = malloc32(sizeof(ed_t));
    7690        if (hcd_ep->ed == NULL) {
    7791                free(hcd_ep);
    78                 return NULL;
     92                return ENOMEM;
    7993        }
    8094
     
    8397                free32(hcd_ep->ed);
    8498                free(hcd_ep);
    85                 return NULL;
     99                return ENOMEM;
    86100        }
    87101
     
    89103        ed_set_td(hcd_ep->ed, hcd_ep->td);
    90104        endpoint_set_hc_data(
    91             ep, hcd_ep, NULL, hcd_ep_toggle_get, hcd_ep_toggle_set);
     105            ep, hcd_ep, hcd_ep_destroy, hcd_ep_toggle_get, hcd_ep_toggle_set);
    92106
    93         return hcd_ep;
    94 }
    95 /*----------------------------------------------------------------------------*/
    96 /** Disposes assigned hcd endpoint structure
    97  *
    98  * @param[in] ep USBD endpoint structure
    99  */
    100 void hcd_endpoint_clear(endpoint_t *ep)
    101 {
    102         assert(ep);
    103         hcd_endpoint_t *hcd_ep = ep->hc_data.data;
    104         assert(hcd_ep);
    105         free32(hcd_ep->ed);
    106         free32(hcd_ep->td);
    107         free(hcd_ep);
     107        return EOK;
    108108}
    109109/**
  • uspace/drv/bus/usb/ohci/hcd_endpoint.h

    r32e093e rb02308e  
    5252} hcd_endpoint_t;
    5353
    54 hcd_endpoint_t * hcd_endpoint_assign(endpoint_t *ep);
    55 void hcd_endpoint_clear(endpoint_t *ep);
     54int hcd_endpoint_assign(endpoint_t *ep);
    5655
    5756/** Get and convert assigned hcd_endpoint_t structure
Note: See TracChangeset for help on using the changeset viewer.