Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/nic/ar9271/ath_usb.c

    rb7fd2a0 r5a6cc679  
    5959 *
    6060 */
    61 errno_t ath_usb_init(ath_t *ath, usb_device_t *usb_device)
     61errno_t ath_usb_init(ath_t *ath, usb_device_t *usb_device, const usb_endpoint_description_t **endpoints)
    6262{
    6363        ath_usb_t *ath_usb = malloc(sizeof(ath_usb_t));
     
    7070        ath_usb->usb_device = usb_device;
    7171       
    72         /* TODO: Assign by iterating over pipes. */
    73         ath_usb->output_data_pipe_number = 0;
    74         ath_usb->input_data_pipe_number = 1;
    75         ath_usb->input_ctrl_pipe_number = 2;
    76         ath_usb->output_ctrl_pipe_number = 3;
     72        int rc;
     73
     74#define _MAP_EP(target, ep_no) do {\
     75        usb_endpoint_mapping_t *epm = usb_device_get_mapped_ep_desc(usb_device, endpoints[ep_no]);\
     76        if (!epm || !epm->present) {\
     77                usb_log_error("Failed to map endpoint: " #ep_no ".");\
     78                rc = ENOENT;\
     79                goto err_ath_usb;\
     80        }\
     81        target = &epm->pipe;\
     82        } while (0);
     83
     84        _MAP_EP(ath_usb->output_data_pipe, 0);
     85        _MAP_EP(ath_usb->input_data_pipe, 1);
     86        _MAP_EP(ath_usb->input_ctrl_pipe, 2);
     87        _MAP_EP(ath_usb->output_ctrl_pipe, 3);
     88
     89#undef _MAP_EP
    7790       
    7891        ath->ctrl_response_length = 64;
     
    8396       
    8497        return EOK;
     98err_ath_usb:
     99        free(ath_usb);
     100        return rc;
    85101}
    86102
     
    98114{
    99115        ath_usb_t *ath_usb = (ath_usb_t *) ath->specific_data;
    100         usb_pipe_t *pipe = &usb_device_get_mapped_ep(
    101             ath_usb->usb_device, ath_usb->output_ctrl_pipe_number)->pipe;
    102        
    103         return usb_pipe_write(pipe, buffer, buffer_size);
     116        return usb_pipe_write(ath_usb->output_ctrl_pipe, buffer, buffer_size);
    104117}
    105118
     
    118131{
    119132        ath_usb_t *ath_usb = (ath_usb_t *) ath->specific_data;
    120         usb_pipe_t *pipe = &usb_device_get_mapped_ep(
    121             ath_usb->usb_device, ath_usb->input_ctrl_pipe_number)->pipe;
    122        
    123         return usb_pipe_read(pipe, buffer, buffer_size, transferred_size);
     133        return usb_pipe_read(ath_usb->input_ctrl_pipe, buffer, buffer_size, transferred_size);
    124134}
    125135
     
    148158       
    149159        ath_usb_t *ath_usb = (ath_usb_t *) ath->specific_data;
    150         usb_pipe_t *pipe = &usb_device_get_mapped_ep(
    151             ath_usb->usb_device, ath_usb->output_data_pipe_number)->pipe;
    152        
    153         errno_t ret_val = usb_pipe_write(pipe, complete_buffer,
    154             complete_buffer_size);
     160        const errno_t ret_val = usb_pipe_write(ath_usb->output_data_pipe,
     161            complete_buffer, complete_buffer_size);
    155162       
    156163        free(complete_buffer);
     
    173180{
    174181        ath_usb_t *ath_usb = (ath_usb_t *) ath->specific_data;
    175         usb_pipe_t *pipe = &usb_device_get_mapped_ep(
    176             ath_usb->usb_device, ath_usb->input_data_pipe_number)->pipe;
    177        
    178         return usb_pipe_read(pipe, buffer, buffer_size, transferred_size);
     182        return usb_pipe_read(ath_usb->input_data_pipe, buffer, buffer_size, transferred_size);
    179183}
Note: See TracChangeset for help on using the changeset viewer.