Changeset 00aece0 in mainline for uspace/drv/bus/usb/ohci/pci.c
- Timestamp:
- 2012-02-18T16:47:38Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4449c6c
- Parents:
- bd5f3b7 (diff), f943dd3 (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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/ohci/pci.c
rbd5f3b7 r00aece0 42 42 #include <ddi.h> 43 43 #include <libarch/ddi.h> 44 #include <device/hw_res .h>44 #include <device/hw_res_parsed.h> 45 45 46 46 #include <usb/debug.h> … … 61 61 { 62 62 assert(dev); 63 assert(mem_reg_address);64 assert(mem_reg_size);65 assert(irq_no);66 63 67 64 async_sess_t *parent_sess = … … 70 67 if (!parent_sess) 71 68 return ENOMEM; 72 73 hw_resource_list_t hw_resources; 74 int rc = hw_res_get_resource_list(parent_sess, &hw_resources); 75 if (rc != EOK) { 76 async_hangup(parent_sess); 77 return rc; 69 70 hw_res_list_parsed_t hw_res; 71 hw_res_list_parsed_init(&hw_res); 72 const int ret = hw_res_get_list_parsed(parent_sess, &hw_res, 0); 73 async_hangup(parent_sess); 74 if (ret != EOK) { 75 return ret; 78 76 } 79 80 uintptr_t mem_address = 0; 81 size_t mem_size = 0; 82 bool mem_found = false; 83 84 int irq = 0; 85 bool irq_found = false; 86 87 size_t i; 88 for (i = 0; i < hw_resources.count; i++) { 89 hw_resource_t *res = &hw_resources.resources[i]; 90 switch (res->type) { 91 case INTERRUPT: 92 irq = res->res.interrupt.irq; 93 irq_found = true; 94 usb_log_debug2("Found interrupt: %d.\n", irq); 95 break; 96 case MEM_RANGE: 97 if (res->res.mem_range.address != 0 98 && res->res.mem_range.size != 0 ) { 99 mem_address = res->res.mem_range.address; 100 mem_size = res->res.mem_range.size; 101 usb_log_debug2("Found mem: %p %zu.\n", 102 (void *) mem_address, mem_size); 103 mem_found = true; 104 } 105 default: 106 break; 107 } 77 78 /* We want one irq and one mem range. */ 79 if (hw_res.irqs.count != 1 || hw_res.mem_ranges.count != 1) { 80 hw_res_list_parsed_clean(&hw_res); 81 return EINVAL; 108 82 } 109 110 if (mem_found && irq_found) { 111 *mem_reg_address = mem_address; 112 *mem_reg_size = mem_size; 113 *irq_no = irq; 114 rc = EOK; 115 } else 116 rc = ENOENT; 117 118 async_hangup(parent_sess); 119 return rc; 83 84 if (mem_reg_address) 85 *mem_reg_address = hw_res.mem_ranges.ranges[0].address; 86 if (mem_reg_size) 87 *mem_reg_size = hw_res.mem_ranges.ranges[0].size; 88 if (irq_no) 89 *irq_no = hw_res.irqs.irqs[0]; 90 91 hw_res_list_parsed_clean(&hw_res); 92 return EOK; 120 93 } 121 94
Note:
See TracChangeset
for help on using the changeset viewer.