Changes in uspace/drv/ohci/hc.c [5d1db18:1387692] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/ohci/hc.c
r5d1db18 r1387692 45 45 #include "hc.h" 46 46 47 static int dummy_reset(int foo, void *arg); 48 static int interrupt_emulator(hc_t *instance); 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 } 49 54 /*----------------------------------------------------------------------------*/ 50 55 int hc_init(hc_t *instance, ddf_fun_t *fun, ddf_dev_t *dev, … … 60 65 } 61 66 instance->ddf_instance = fun; 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 } 67 usb_device_keeper_init(&instance->manager); 69 68 70 69 … … 100 99 ret = usb_hc_new_device_wrapper(dev, &conn, USB_SPEED_FULL, dummy_reset, 101 100 0, instance, &address, &handle, NULL, NULL, NULL); 102 if (ret != EOK) { 103 usb_log_error("Failed to add rh device.\n"); 104 instance->rh.address = -1; 105 return ret; 106 } 101 CHECK_RET_RETURN(ret, "Failed to add rh device.\n"); 107 102 108 103 ret = usb_hc_connection_close(&conn); … … 111 106 } 112 107 /*----------------------------------------------------------------------------*/ 113 int hc_schedule(hc_t *instance, batch_t *batch)108 int hc_schedule(hc_t *instance, usb_transfer_batch_t *batch) 114 109 { 115 110 assert(instance); … … 122 117 } 123 118 /*----------------------------------------------------------------------------*/ 124 void hc_interrupt(hc_t *instance, uint 32_t status)119 void hc_interrupt(hc_t *instance, uint16_t status) 125 120 { 126 121 assert(instance); 127 if (status == 0) 128 return; 129 if (status & IS_RHSC) 130 rh_interrupt(&instance->rh); 131 132 /* TODO: Check for further interrupt causes */ 122 /* TODO: Check for interrupt cause */ 123 rh_interrupt(&instance->rh); 133 124 /* 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;155 125 } 156 126 /**
Note:
See TracChangeset
for help on using the changeset viewer.