Changes in uspace/drv/ohci/hc.c [1387692:5d1db18] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/ohci/hc.c
r1387692 r5d1db18 45 45 #include "hc.h" 46 46 47 static int dummy_reset(int foo, void *arg) 48 { 49 hc_t *hc = (hc_t*)arg; 50 assert(hc); 51 hc->rh.address = 0; 52 return EOK; 53 } 47 static int dummy_reset(int foo, void *arg); 48 static int interrupt_emulator(hc_t *instance); 54 49 /*----------------------------------------------------------------------------*/ 55 50 int hc_init(hc_t *instance, ddf_fun_t *fun, ddf_dev_t *dev, … … 65 60 } 66 61 instance->ddf_instance = fun; 67 usb_device_keeper_init(&instance->manager); 62 device_keeper_init(&instance->manager); 63 64 if (!interrupts) { 65 instance->interrupt_emulator = 66 fibril_create((int(*)(void*))interrupt_emulator, instance); 67 fibril_add_ready(instance->interrupt_emulator); 68 } 68 69 69 70 … … 99 100 ret = usb_hc_new_device_wrapper(dev, &conn, USB_SPEED_FULL, dummy_reset, 100 101 0, instance, &address, &handle, NULL, NULL, NULL); 101 CHECK_RET_RETURN(ret, "Failed to add rh device.\n"); 102 if (ret != EOK) { 103 usb_log_error("Failed to add rh device.\n"); 104 instance->rh.address = -1; 105 return ret; 106 } 102 107 103 108 ret = usb_hc_connection_close(&conn); … … 106 111 } 107 112 /*----------------------------------------------------------------------------*/ 108 int hc_schedule(hc_t *instance, usb_transfer_batch_t *batch)113 int hc_schedule(hc_t *instance, batch_t *batch) 109 114 { 110 115 assert(instance); … … 117 122 } 118 123 /*----------------------------------------------------------------------------*/ 119 void hc_interrupt(hc_t *instance, uint 16_t status)124 void hc_interrupt(hc_t *instance, uint32_t status) 120 125 { 121 126 assert(instance); 122 /* TODO: Check for interrupt cause */ 123 rh_interrupt(&instance->rh); 127 if (status == 0) 128 return; 129 if (status & IS_RHSC) 130 rh_interrupt(&instance->rh); 131 132 /* TODO: Check for further interrupt causes */ 124 133 /* TODO: implement */ 134 } 135 /*----------------------------------------------------------------------------*/ 136 static int dummy_reset(int foo, void *arg) 137 { 138 hc_t *hc = (hc_t*)arg; 139 assert(hc); 140 hc->rh.address = 0; 141 return EOK; 142 } 143 /*----------------------------------------------------------------------------*/ 144 static int interrupt_emulator(hc_t *instance) 145 { 146 assert(instance); 147 usb_log_info("Started interrupt emulator.\n"); 148 while (1) { 149 uint32_t status = instance->registers->interrupt_status; 150 instance->registers->interrupt_status = status; 151 hc_interrupt(instance, status); 152 async_usleep(1000); 153 } 154 return EOK; 125 155 } 126 156 /**
Note:
See TracChangeset
for help on using the changeset viewer.