Changes in / [474d08e:80fdffe] in mainline


Ignore:
Location:
uspace/drv/uhci-hcd
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified uspace/drv/uhci-hcd/batch.c

    r474d08e r80fdffe  
    4747static int batch_schedule(batch_t *instance);
    4848
    49 static void batch_control(batch_t *instance,
    50     usb_packet_id data_stage, usb_packet_id status_stage);
    51 static void batch_data(batch_t *instance, usb_packet_id pid);
     49static void batch_control(
     50    batch_t *instance, int data_stage, int status_stage);
     51static void batch_data(batch_t *instance, int pid);
    5252static void batch_call_in(batch_t *instance);
    5353static void batch_call_out(batch_t *instance);
     
    8484        }
    8585
    86         instance->tds = malloc32(sizeof(td_t) * instance->packets);
     86        instance->tds = malloc32(sizeof(transfer_descriptor_t) * instance->packets);
    8787        if (instance->tds == NULL) {
    8888                usb_log_error("Failed to allocate transfer descriptors.\n");
     
    9191                return NULL;
    9292        }
    93         bzero(instance->tds, sizeof(td_t) * instance->packets);
     93        bzero(instance->tds, sizeof(transfer_descriptor_t) * instance->packets);
    9494
    9595        const size_t transport_size = max_packet_size * instance->packets;
     
    152152        size_t i = 0;
    153153        for (;i < instance->packets; ++i) {
    154                 if (td_is_active(&instance->tds[i])) {
     154                if (transfer_descriptor_is_active(&instance->tds[i])) {
    155155                        return false;
    156156                }
    157 
    158                 instance->error = td_status(&instance->tds[i]);
     157                instance->error = transfer_descriptor_status(&instance->tds[i]);
    159158                if (instance->error != EOK) {
     159                        if (i > 0)
     160                                instance->transfered_size -= instance->setup_size;
    160161                        usb_log_debug("Batch(%p) found error TD(%d):%x.\n",
    161                             instance, i, instance->tds[i].status);
    162                         if (i > 0)
    163                                 goto substract_ret;
     162                          instance, i, instance->tds[i].status);
    164163                        return true;
    165164                }
    166 
    167                 instance->transfered_size += td_act_size(&instance->tds[i]);
    168                 if (td_is_short(&instance->tds[i]))
    169                         goto substract_ret;
    170         }
    171 substract_ret:
     165                instance->transfered_size +=
     166                    transfer_descriptor_actual_size(&instance->tds[i]);
     167        }
    172168        instance->transfered_size -= instance->setup_size;
    173169        return true;
     
    232228}
    233229/*----------------------------------------------------------------------------*/
    234 static void batch_data(batch_t *instance, usb_packet_id pid)
     230static void batch_data(batch_t *instance, int pid)
    235231{
    236232        assert(instance);
     
    251247                    remain_size : instance->max_packet_size;
    252248
    253                 td_init(&instance->tds[packet],
     249                transfer_descriptor_init(&instance->tds[packet],
    254250                    DEFAULT_ERROR_COUNT, packet_size, toggle, false, low_speed,
    255251                    instance->target, pid, data,
     
    266262}
    267263/*----------------------------------------------------------------------------*/
    268 static void batch_control(batch_t *instance,
    269    usb_packet_id data_stage, usb_packet_id status_stage)
     264static void batch_control(
     265    batch_t *instance, int data_stage, int status_stage)
    270266{
    271267        assert(instance);
     
    274270        int toggle = 0;
    275271        /* setup stage */
    276         td_init(instance->tds, DEFAULT_ERROR_COUNT,
     272        transfer_descriptor_init(instance->tds, DEFAULT_ERROR_COUNT,
    277273            instance->setup_size, toggle, false, low_speed, instance->target,
    278274            USB_PID_SETUP, instance->setup_buffer, &instance->tds[1]);
     
    292288                    remain_size : instance->max_packet_size;
    293289
    294                 td_init(&instance->tds[packet],
     290                transfer_descriptor_init(&instance->tds[packet],
    295291                    DEFAULT_ERROR_COUNT, packet_size, toggle, false, low_speed,
    296292                    instance->target, data_stage, data,
     
    305301        /* status stage */
    306302        assert(packet == instance->packets - 1);
    307         td_init(&instance->tds[packet], DEFAULT_ERROR_COUNT,
     303        transfer_descriptor_init(&instance->tds[packet], DEFAULT_ERROR_COUNT,
    308304            0, 1, false, low_speed, instance->target, status_stage, NULL, NULL);
    309305
  • TabularUnified uspace/drv/uhci-hcd/batch.h

    r474d08e r80fdffe  
    6565        ddf_fun_t *fun;
    6666        queue_head_t *qh;
    67         td_t *tds;
     67        transfer_descriptor_t *tds;
    6868        void (*next_step)(struct batch*);
    6969} batch_t;
  • TabularUnified uspace/drv/uhci-hcd/uhci_struct/transfer_descriptor.c

    r474d08e r80fdffe  
    3838#include "utils/malloc32.h"
    3939
    40 void td_init(td_t *instance, int err_count, size_t size, bool toggle, bool iso,
    41     bool low_speed, usb_target_t target, usb_packet_id pid, void *buffer, td_t *next)
     40void transfer_descriptor_init(transfer_descriptor_t *instance,
     41    int error_count, size_t size, bool toggle, bool isochronous, bool low_speed,
     42    usb_target_t target, int pid, void *buffer, transfer_descriptor_t *next)
    4243{
    4344        assert(instance);
    44         assert(size < 1024);
    45         assert((pid == USB_PID_SETUP) || (pid == USB_PID_IN) || (pid == USB_PID_OUT));
    4645
    4746        instance->next = 0
     
    5049
    5150        instance->status = 0
    52             | ((err_count & TD_STATUS_ERROR_COUNT_MASK) << TD_STATUS_ERROR_COUNT_POS)
    53             | (low_speed ? TD_STATUS_LOW_SPEED_FLAG : 0)
    54             | (iso ? TD_STATUS_ISOCHRONOUS_FLAG : 0)
    55             | TD_STATUS_ERROR_ACTIVE;
     51          | ((error_count & TD_STATUS_ERROR_COUNT_MASK) << TD_STATUS_ERROR_COUNT_POS)
     52                | (low_speed ? TD_STATUS_LOW_SPEED_FLAG : 0)
     53          | TD_STATUS_ERROR_ACTIVE;
    5654
    57         if (pid == USB_PID_IN && !iso) {
    58                 instance->status |= TD_STATUS_SPD_FLAG;
    59         }
    60 
     55        assert(size < 1024);
    6156        instance->device = 0
    62             | (((size - 1) & TD_DEVICE_MAXLEN_MASK) << TD_DEVICE_MAXLEN_POS)
    63             | (toggle ? TD_DEVICE_DATA_TOGGLE_ONE_FLAG : 0)
    64             | ((target.address & TD_DEVICE_ADDRESS_MASK) << TD_DEVICE_ADDRESS_POS)
    65             | ((target.endpoint & TD_DEVICE_ENDPOINT_MASK) << TD_DEVICE_ENDPOINT_POS)
    66             | ((pid & TD_DEVICE_PID_MASK) << TD_DEVICE_PID_POS);
     57                | (((size - 1) & TD_DEVICE_MAXLEN_MASK) << TD_DEVICE_MAXLEN_POS)
     58                | (toggle ? TD_DEVICE_DATA_TOGGLE_ONE_FLAG : 0)
     59                | ((target.address & TD_DEVICE_ADDRESS_MASK) << TD_DEVICE_ADDRESS_POS)
     60                | ((target.endpoint & TD_DEVICE_ENDPOINT_MASK) << TD_DEVICE_ENDPOINT_POS)
     61                | ((pid & TD_DEVICE_PID_MASK) << TD_DEVICE_PID_POS);
    6762
    6863        instance->buffer_ptr = 0;
     
    7368
    7469        usb_log_debug2("Created TD: %X:%X:%X:%X(%p).\n",
    75             instance->next, instance->status, instance->device,
    76             instance->buffer_ptr, buffer);
     70                instance->next, instance->status, instance->device,
     71          instance->buffer_ptr, buffer);
    7772}
    7873/*----------------------------------------------------------------------------*/
    79 int td_status(td_t *instance)
     74int transfer_descriptor_status(transfer_descriptor_t *instance)
    8075{
    8176        assert(instance);
  • TabularUnified uspace/drv/uhci-hcd/uhci_struct/transfer_descriptor.h

    r474d08e r80fdffe  
    8888         * we don't use it anyway
    8989         */
    90 } __attribute__((packed)) td_t;
     90} __attribute__((packed)) transfer_descriptor_t;
    9191
    9292
    93 void td_init(td_t *instance, int error_count, size_t size, bool toggle, bool iso,
    94     bool low_speed, usb_target_t target, usb_packet_id pid, void *buffer,
    95     td_t *next);
     93void transfer_descriptor_init(transfer_descriptor_t *instance,
     94    int error_count, size_t size, bool toggle, bool isochronous, bool low_speed,
     95    usb_target_t target, int pid, void *buffer, transfer_descriptor_t * next);
    9696
    97 int td_status(td_t *instance);
     97int transfer_descriptor_status(transfer_descriptor_t *instance);
    9898
    99 static inline size_t td_act_size(td_t *instance)
     99static inline size_t transfer_descriptor_actual_size(
     100    transfer_descriptor_t *instance)
    100101{
    101102        assert(instance);
    102103        return
    103             ((instance->status >> TD_STATUS_ACTLEN_POS) + 1)
    104             & TD_STATUS_ACTLEN_MASK;
     104            ((instance->status >> TD_STATUS_ACTLEN_POS) + 1) & TD_STATUS_ACTLEN_MASK;
    105105}
    106106
    107 static inline bool td_is_short(td_t *instance)
    108 {
    109         const size_t act_size = td_act_size(instance);
    110         const size_t max_size =
    111             ((instance->device >> TD_DEVICE_MAXLEN_POS) + 1)
    112             & TD_DEVICE_MAXLEN_MASK;
    113         return
    114             (instance->status | TD_STATUS_SPD_FLAG) && act_size < max_size;
    115 }
    116 
    117 static inline bool td_is_active(td_t *instance)
     107static inline bool transfer_descriptor_is_active(
     108    transfer_descriptor_t *instance)
    118109{
    119110        assert(instance);
Note: See TracChangeset for help on using the changeset viewer.