Changeset 5971dd3 in mainline
- Timestamp:
- 2011-03-21T14:27:13Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 28eee11c, 7102aa5
- Parents:
- 48fe0c9 (diff), 5d1db18 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- uspace/drv
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/ohci/hc.c
r48fe0c9 r5971dd3 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, … … 66 61 instance->ddf_instance = fun; 67 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); … … 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 /** -
uspace/drv/ohci/hc.h
r48fe0c9 r5971dd3 54 54 ddf_fun_t *ddf_instance; 55 55 device_keeper_t manager; 56 fid_t interrupt_emulator; 56 57 } hc_t; 57 58 … … 63 64 int hc_schedule(hc_t *instance, batch_t *batch); 64 65 65 void hc_interrupt(hc_t *instance, uint 16_t status);66 void hc_interrupt(hc_t *instance, uint32_t status); 66 67 67 68 /** Safely dispose host controller internal structures -
uspace/drv/ohci/ohci_regs.h
r48fe0c9 r5971dd3 43 43 volatile uint32_t command_status; 44 44 volatile uint32_t interrupt_status; 45 #define IS_SO (1 << 0) 46 #define IS_WDH (1 << 1) 47 #define IS_SF (1 << 2) 48 #define IS_RD (1 << 3) 49 #define IS_UE (1 << 4) 50 #define IS_FNO (1 << 5) 51 #define IS_RHSC (1 << 6) 52 #define IS_OC (1 << 30) 45 53 volatile uint32_t interupt_enable; 46 54 #define IE_SO (1 << 0) -
uspace/drv/uhci-hcd/uhci_hc.c
r48fe0c9 r5971dd3 121 121 fibril_create(uhci_hc_interrupt_emulator, instance); 122 122 fibril_add_ready(instance->cleaner); 123 } else { 124 /* TODO: enable interrupts here */ 123 125 } 124 126
Note:
See TracChangeset
for help on using the changeset viewer.