Changeset 3f189c5 in mainline for uspace/drv/uhci-hcd/uhci.c


Ignore:
Timestamp:
2011-02-07T14:06:57Z (13 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
fe10e72
Parents:
7e62b62
Message:

Lots of cleanup, removes unused code (replaced by trackers)

File:
1 edited

Legend:

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

    r7e62b62 r3f189c5  
    9696        fibril_add_ready(instance->debug_checker);
    9797
    98         /* Start the hc with large(64b) packet FSBR */
     98        /* Start the hc with large(64B) packet FSBR */
    9999        pio_write_16(&instance->registers->usbcmd,
    100100            UHCI_CMD_RUN_STOP | UHCI_CMD_MAX_PACKET);
     
    146146        instance->transfers[0][USB_TRANSFER_CONTROL] =
    147147          &instance->transfers_control_full;
    148 
    149         return EOK;
    150 }
    151 /*----------------------------------------------------------------------------*/
    152 int uhci_transfer(
    153   uhci_t *instance,
    154   device_t *dev,
    155   usb_target_t target,
    156   usb_transfer_type_t transfer_type,
    157         bool toggle,
    158   usb_packet_id pid,
    159         bool low_speed,
    160   void *buffer, size_t size,
    161   usbhc_iface_transfer_out_callback_t callback_out,
    162   usbhc_iface_transfer_in_callback_t callback_in,
    163   void *arg)
    164 {
    165         if (!allowed_usb_packet(low_speed, transfer_type, size)) {
    166                 usb_log_warning("Invalid USB packet specified %s SPEED %d %zu.\n",
    167                         low_speed ? "LOW" : "FULL" , transfer_type, size);
    168                 return ENOTSUP;
    169         }
    170 
    171         // TODO: Add support for isochronous transfers
    172         if (transfer_type == USB_TRANSFER_ISOCHRONOUS) {
    173                 usb_log_warning("ISO transfer not supported.\n");
    174                 return ENOTSUP;
    175         }
    176 
    177         transfer_list_t *list = instance->transfers[low_speed][transfer_type];
    178         assert(list);
    179 
    180         transfer_descriptor_t *td = NULL;
    181         callback_t *job = NULL;
    182         int ret = EOK;
    183         assert(dev);
    184 
    185 #define CHECK_RET_TRANS_FREE_JOB_TD(message) \
    186         if (ret != EOK) { \
    187                 usb_log_error(message); \
    188                 if (job) { \
    189                         callback_dispose(job); \
    190                 } \
    191                 if (td) { free32(td); } \
    192                 return ret; \
    193         } else (void) 0
    194 
    195         job = callback_get(dev, buffer, size, callback_in, callback_out, arg);
    196         ret = job ? EOK : ENOMEM;
    197         CHECK_RET_TRANS_FREE_JOB_TD("Failed to allocate callback structure.\n");
    198 
    199         td = transfer_descriptor_get(3, size, false, target, pid, job->new_buffer);
    200         ret = td ? EOK : ENOMEM;
    201         CHECK_RET_TRANS_FREE_JOB_TD("Failed to setup transfer descriptor.\n");
    202 
    203         td->callback = job;
    204 
    205         usb_log_debug("Appending a new transfer to queue %s.\n", list->name);
    206 
    207         ret = transfer_list_append(list, td);
    208         CHECK_RET_TRANS_FREE_JOB_TD("Failed to append transfer descriptor.\n");
    209148
    210149        return EOK;
     
    256195                        current = next;
    257196                }
    258                 /* iterate all transfer queues */
    259                 transfer_list_t *current_list = &instance->transfers_interrupt;
    260                 while (current_list) {
    261                         /* Remove inactive transfers from the top of the queue
    262                          * TODO: should I reach queue head or is this enough? */
    263                         volatile transfer_descriptor_t * it =
    264                                 current_list->first;
    265                         usb_log_debug("Running cleaning fibril on queue: %s (%s).\n",
    266                                 current_list->name, it ? "SOMETHING" : "EMPTY");
    267 
    268                         if (it) {
    269                                 usb_log_debug("First in queue: %p (%x) PA:%x.\n",
    270                                         it, it->status, addr_to_phys((void*)it) );
    271                                 usb_log_debug("First to send: %x\n",
    272                                         (current_list->queue_head->element) );
    273                         }
    274 
    275                         while (current_list->first &&
    276                          !(current_list->first->status & TD_STATUS_ERROR_ACTIVE)) {
    277                                 transfer_descriptor_t *transfer = current_list->first;
    278                                 usb_log_info("Inactive transfer calling callback with status %x.\n",
    279                                   transfer->status);
    280                                 current_list->first = transfer->next_va;
    281                                 transfer_descriptor_dispose(transfer);
    282                         }
    283                         if (!current_list->first)
    284                                 current_list->last = current_list->first;
    285 
    286                         current_list = current_list->next;
    287                 }
    288197                async_usleep(UHCI_CLEANER_TIMEOUT);
    289198        }
     
    352261                        return (!low_speed && size < 1024);
    353262                case USB_TRANSFER_INTERRUPT:
    354                         return size <= (low_speed ? 8 :64);
     263                        return size <= (low_speed ? 8 : 64);
    355264                case USB_TRANSFER_CONTROL: /* device specifies its own max size */
    356265                        return (size <= (low_speed ? 8 : 64));
Note: See TracChangeset for help on using the changeset viewer.