Changeset 30a4301 in mainline
- Timestamp:
- 2011-02-16T22:28:58Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2736b13e
- Parents:
- 36a4738
- Location:
- uspace/drv/uhci-hcd
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci-hcd/batch.c
r36a4738 r30a4301 248 248 } 249 249 250 instance->tds[i - 1].status |= TD_STATUS_COMPLETE_INTERRUPT_FLAG; 251 250 252 instance->next_step = batch_call_in_and_dispose; 251 253 batch_schedule(instance); … … 272 274 } 273 275 276 instance->tds[i - 1].status |= TD_STATUS_COMPLETE_INTERRUPT_FLAG; 277 274 278 instance->next_step = batch_call_out_and_dispose; 275 279 batch_schedule(instance); -
uspace/drv/uhci-hcd/uhci.c
r36a4738 r30a4301 44 44 static void uhci_init_hw(uhci_t *instance); 45 45 46 static int uhci_ clean_finished(void *arg);46 static int uhci_interrupt_emulator(void *arg); 47 47 static int uhci_debug_checker(void *arg); 48 48 … … 69 69 usb_log_debug("Device registers accessible.\n"); 70 70 71 instance->cleaner = fibril_create(uhci_ clean_finished, instance);71 instance->cleaner = fibril_create(uhci_interrupt_emulator, instance); 72 72 fibril_add_ready(instance->cleaner); 73 73 … … 189 189 } 190 190 /*----------------------------------------------------------------------------*/ 191 int uhci_clean_finished(void* arg) 192 { 193 usb_log_debug("Started cleaning fibril.\n"); 191 void uhci_interrupt(uhci_t *instance) 192 { 193 assert(instance); 194 const uint16_t sts = pio_read_16(&instance->registers->usbsts); 195 if ((sts & (UHCI_STATUS_INTERRUPT | UHCI_STATUS_ERROR_INTERRUPT)) == 0) 196 return; 197 usb_log_debug("UHCI interrupt: %X.\n", sts); 198 transfer_list_check(&instance->transfers_interrupt); 199 transfer_list_check(&instance->transfers_control_slow); 200 transfer_list_check(&instance->transfers_control_full); 201 transfer_list_check(&instance->transfers_bulk_full); 202 pio_write_16(&instance->registers->usbsts, 0xf); 203 } 204 /*----------------------------------------------------------------------------*/ 205 int uhci_interrupt_emulator(void* arg) 206 { 207 usb_log_debug("Started interrupt emulator.\n"); 194 208 uhci_t *instance = (uhci_t*)arg; 195 209 assert(instance); 196 210 197 211 while(1) { 198 transfer_list_check(&instance->transfers_interrupt); 199 transfer_list_check(&instance->transfers_control_slow); 200 transfer_list_check(&instance->transfers_control_full); 201 transfer_list_check(&instance->transfers_bulk_full); 212 uhci_interrupt(instance); 202 213 async_usleep(UHCI_CLEANER_TIMEOUT); 203 214 } -
uspace/drv/uhci-hcd/uhci.h
r36a4738 r30a4301 117 117 int uhci_schedule(uhci_t *instance, batch_t *batch); 118 118 119 void uhci_interrupt(uhci_t *instance); 120 119 121 static inline uhci_t * dev_to_uhci(device_t *dev) 120 122 { return (uhci_t*)dev->driver_data; }
Note:
See TracChangeset
for help on using the changeset viewer.