Ignore:
File:
1 edited

Legend:

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

    rcde999a rb3c39690  
    3535#include <usb/dev/pipes.h>
    3636#include <usb/debug.h>
    37 #include <stdlib.h>
     37#include <malloc.h>
    3838#include <errno.h>
    3939#include "ath_usb.h"
     
    5656 * @param usb_device  Connected USB device.
    5757 *
    58  * @return EOK if succeed, error code otherwise.
     58 * @return EOK if succeed, negative error code otherwise.
    5959 *
    6060 */
    61 int ath_usb_init(ath_t *ath, usb_device_t *usb_device)
     61int 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
     
    91107 * @param buffer_size Buffer size.
    92108 *
    93  * @return EOK if succeed, error code otherwise.
     109 * @return EOK if succeed, negative error code otherwise.
    94110 *
    95111 */
     
    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
     
    111124 * @param transferred_size Real size of read data.
    112125 *
    113  * @return EOK if succeed, error code otherwise.
     126 * @return EOK if succeed, negative error code otherwise.
    114127 *
    115128 */
     
    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
     
    130140 * @param buffer_size Buffer size.
    131141 *
    132  * @return EOK if succeed, error code otherwise.
     142 * @return EOK if succeed, negative error code otherwise.
    133143 *
    134144 */
     
    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         int ret_val = usb_pipe_write(pipe, complete_buffer,
     160        int ret_val = usb_pipe_write(ath_usb->output_data_pipe, complete_buffer,
    154161            complete_buffer_size);
    155162       
     
    166173 * @param transferred_size Real size of read data.
    167174 *
    168  * @return EOK if succeed, error code otherwise.
     175 * @return EOK if succeed, negative error code otherwise.
    169176 *
    170177 */
     
    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.