Changes in uspace/drv/ohci/pci.c [79ae36dd:dc5f2fb] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/ohci/pci.c
r79ae36dd rdc5f2fb 26 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 27 */ 28 29 28 /** 30 29 * @addtogroup drvusbohci … … 35 34 * PCI related functions needed by the OHCI driver. 36 35 */ 37 38 36 #include <errno.h> 39 37 #include <assert.h> … … 65 63 assert(irq_no); 66 64 67 async_sess_t *parent_sess = 68 devman_parent_device_connect(EXCHANGE_SERIALIZE, dev->handle, 65 int parent_phone = devman_parent_device_connect(dev->handle, 69 66 IPC_FLAG_BLOCKING); 70 if (!parent_sess) 71 return ENOMEM; 72 67 if (parent_phone < 0) { 68 return parent_phone; 69 } 70 71 int rc; 72 73 73 hw_resource_list_t hw_resources; 74 int rc = hw_res_get_resource_list(parent_sess, &hw_resources);74 rc = hw_res_get_resource_list(parent_phone, &hw_resources); 75 75 if (rc != EOK) { 76 async_hangup(parent_ sess);76 async_hangup(parent_phone); 77 77 return rc; 78 78 } 79 79 80 80 uintptr_t mem_address = 0; 81 81 size_t mem_size = 0; 82 82 bool mem_found = false; 83 83 84 84 int irq = 0; 85 85 bool irq_found = false; 86 86 87 87 size_t i; 88 88 for (i = 0; i < hw_resources.count; i++) { 89 89 hw_resource_t *res = &hw_resources.resources[i]; 90 switch (res->type) { 90 switch (res->type) 91 { 91 92 case INTERRUPT: 92 93 irq = res->res.interrupt.irq; … … 94 95 usb_log_debug2("Found interrupt: %d.\n", irq); 95 96 break; 97 96 98 case MEM_RANGE: 97 99 if (res->res.mem_range.address != 0 … … 102 104 (void *) mem_address, mem_size); 103 105 mem_found = true; 104 }106 } 105 107 default: 106 108 break; 107 109 } 108 110 } 109 111 110 112 if (mem_found && irq_found) { 111 113 *mem_reg_address = mem_address; … … 113 115 *irq_no = irq; 114 116 rc = EOK; 115 } else 117 } else { 116 118 rc = ENOENT; 117 118 async_hangup(parent_sess); 119 } 120 121 async_hangup(parent_phone); 119 122 return rc; 120 123 } 121 122 /** Call the PCI driver with a request to enable interrupts124 /*----------------------------------------------------------------------------*/ 125 /** Calls the PCI driver with a request to enable interrupts 123 126 * 124 127 * @param[in] device Device asking for interrupts … … 127 130 int pci_enable_interrupts(ddf_dev_t *device) 128 131 { 129 async_sess_t *parent_sess = 130 devman_parent_device_connect(EXCHANGE_SERIALIZE, device->handle, 131 IPC_FLAG_BLOCKING); 132 if (!parent_sess) 133 return ENOMEM; 134 135 bool enabled = hw_res_enable_interrupt(parent_sess); 136 async_hangup(parent_sess); 137 132 int parent_phone = 133 devman_parent_device_connect(device->handle, IPC_FLAG_BLOCKING); 134 if (parent_phone < 0) { 135 return parent_phone; 136 } 137 bool enabled = hw_res_enable_interrupt(parent_phone); 138 async_hangup(parent_phone); 138 139 return enabled ? EOK : EIO; 139 140 } 141 /** 142 * @} 143 */ 140 144 141 145 /**
Note:
See TracChangeset
for help on using the changeset viewer.