Changes in / [02804e1:df0bbe1] in mainline
- Location:
- uspace
- Files:
-
- 3 added
- 2 deleted
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/ohci/hc.c
r02804e1 rdf0bbe1 49 49 static int interrupt_emulator(hc_t *instance); 50 50 static void hc_gain_control(hc_t *instance); 51 static void hc_init_hw(hc_t *instance); 51 52 static int hc_init_transfer_lists(hc_t *instance); 52 53 static int hc_init_memory(hc_t *instance); … … 91 92 usb_log_error("Failed add root hub match-id.\n"); 92 93 } 93 ret = ddf_fun_bind(hub_fun);94 94 return ret; 95 95 } … … 111 111 ret, str_error(ret)); 112 112 113 list_initialize(&instance->pending_batches);114 113 usb_device_keeper_init(&instance->manager); 115 114 ret = usb_endpoint_manager_init(&instance->ep_manager, … … 118 117 str_error(ret)); 119 118 119 hc_gain_control(instance); 120 120 ret = hc_init_memory(instance); 121 121 CHECK_RET_RETURN(ret, "Failed to create OHCI memory structures: %s.\n", 122 122 str_error(ret)); 123 #undef CHECK_RET_RETURN 124 125 126 // hc_init_hw(instance); 127 hc_gain_control(instance); 123 hc_init_hw(instance); 128 124 fibril_mutex_initialize(&instance->guard); 129 125 … … 136 132 } 137 133 134 list_initialize(&instance->pending_batches); 135 #undef CHECK_RET_RETURN 138 136 return EOK; 139 137 } … … 289 287 { 290 288 assert(instance); 291 usb_log_debug("OHCI (%p) interrupt: %x.\n", instance, status);289 usb_log_debug("OHCI interrupt: %x.\n", status); 292 290 if ((status & ~I_SF) == 0) /* ignore sof status */ 293 291 return; … … 341 339 (uint32_t*)((char*)instance->registers + 0x100); 342 340 usb_log_debug("OHCI legacy register %p: %x.\n", 343 ohci_emulation_reg, *ohci_emulation_reg); 344 /* Do not change A20 state */ 345 *ohci_emulation_reg &= 0x100; 346 usb_log_debug("OHCI legacy register %p: %x.\n", 347 ohci_emulation_reg, *ohci_emulation_reg); 341 ohci_emulation_reg, *ohci_emulation_reg); 342 *ohci_emulation_reg &= ~0x1; 348 343 349 344 /* Interrupt routing enabled => smm driver is active */ … … 355 350 } 356 351 usb_log_info("SMM driver: Ownership taken.\n"); 357 instance->registers->control &= (C_HCFS_RESET << C_HCFS_SHIFT);358 async_usleep(50000);359 352 return; 360 353 } … … 382 375 } 383 376 /*----------------------------------------------------------------------------*/ 384 void hc_ start_hw(hc_t *instance)377 void hc_init_hw(hc_t *instance) 385 378 { 386 379 /* OHCI guide page 42 */ … … 481 474 { 482 475 assert(instance); 483 484 bzero(&instance->rh, sizeof(instance->rh));485 476 /* Init queues */ 486 477 hc_init_transfer_lists(instance); -
uspace/drv/ohci/hc.h
r02804e1 rdf0bbe1 80 80 uintptr_t regs, size_t reg_size, bool interrupts); 81 81 82 void hc_start_hw(hc_t *instance);83 84 82 /** Safely dispose host controller internal structures 85 83 * -
uspace/drv/ohci/main.c
r02804e1 rdf0bbe1 75 75 return ret; 76 76 } 77 // device->driver_data = ohci; 78 hc_register_hub(&ohci->hc, ohci->rh_fun); 77 device->driver_data = ohci; 79 78 80 79 usb_log_info("Controlling new OHCI device `%s'.\n", device->name); … … 94 93 { 95 94 usb_log_enable(USB_LOG_LEVEL_DEFAULT, NAME); 95 sleep(5); 96 96 return ddf_driver_main(&ohci_driver); 97 97 } -
uspace/drv/ohci/ohci.c
r02804e1 rdf0bbe1 54 54 { 55 55 assert(dev); 56 assert(dev->driver_data);57 56 hc_t *hc = &((ohci_t*)dev->driver_data)->hc; 58 57 uint16_t status = IPC_GET_ARG1(*call); … … 153 152 usb_log_debug("Memory mapped regs at %p (size %zu), IRQ %d.\n", 154 153 (void *) mem_reg_base, mem_reg_size, irq); 154 155 ret = pci_disable_legacy(device); 156 CHECK_RET_DEST_FUN_RETURN(ret, 157 "Failed(%d) to disable legacy USB: %s.\n", ret, str_error(ret)); 155 158 156 159 bool interrupts = false; … … 213 216 "Failed(%d) to create root hub function.\n", ret); 214 217 218 hc_register_hub(&instance->hc, instance->rh_fun); 215 219 216 220 instance->rh_fun->ops = &rh_ops; 217 221 instance->rh_fun->driver_data = NULL; 218 219 device->driver_data = instance;220 221 hc_start_hw(&instance->hc); 222 ret = ddf_fun_bind(instance->rh_fun); 223 CHECK_RET_FINI_RETURN(ret, 224 "Failed(%d) to register OHCI root hub.\n", ret); 225 222 226 return EOK; 223 227 #undef CHECK_RET_FINI_RETURN -
uspace/drv/ohci/pci.c
r02804e1 rdf0bbe1 136 136 return enabled ? EOK : EIO; 137 137 } 138 /*----------------------------------------------------------------------------*/ 139 /** Implements BIOS handoff routine as decribed in OHCI spec 140 * 141 * @param[in] device Device asking for interrupts 142 * @return Error code. 143 */ 144 int pci_disable_legacy(ddf_dev_t *device) 145 { 146 /* TODO: implement */ 147 return EOK; 148 } 149 /*----------------------------------------------------------------------------*/ 138 150 /** 139 151 * @}
Note:
See TracChangeset
for help on using the changeset viewer.