Changes in uspace/drv/char/ns8250/ns8250.c [d51838f:b19e892] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/char/ns8250/ns8250.c
rd51838f rb19e892 55 55 #include <ops/char_dev.h> 56 56 57 #include <irc.h> 57 58 #include <device/hw_res.h> 58 59 #include <ipc/serial_ctl.h> … … 153 154 /** DDF function node */ 154 155 ddf_fun_t *fun; 155 /** Parent session */156 async_sess_t *parent_sess;157 156 /** I/O registers **/ 158 157 ns8250_regs_t *regs; … … 161 160 /** The irq assigned to this device. */ 162 161 int irq; 163 /** IRQ capability handle */164 int irq_cap;165 162 /** The base i/o address of the devices registers. */ 166 163 uintptr_t io_addr; … … 383 380 static int ns8250_dev_initialize(ns8250_t *ns) 384 381 { 382 async_sess_t *parent_sess; 385 383 int ret = EOK; 386 384 … … 390 388 memset(&hw_resources, 0, sizeof(hw_resource_list_t)); 391 389 390 /* Connect to the parent's driver. */ 391 parent_sess = ddf_dev_parent_sess_create(ns->dev); 392 if (parent_sess == NULL) { 393 ddf_msg(LVL_ERROR, "Failed to connect to parent driver of " 394 "device %s.", ddf_dev_get_name(ns->dev)); 395 ret = ENOENT; 396 goto failed; 397 } 398 392 399 /* Get hw resources. */ 393 ret = hw_res_get_resource_list( ns->parent_sess, &hw_resources);400 ret = hw_res_get_resource_list(parent_sess, &hw_resources); 394 401 if (ret != EOK) { 395 402 ddf_msg(LVL_ERROR, "Failed to get HW resources for device " … … 478 485 { 479 486 /* Enable interrupt using IRC service. */ 480 int rc = hw_res_enable_interrupt(ns->parent_sess,ns->irq);487 int rc = irc_enable_interrupt(ns->irq); 481 488 if (rc != EOK) 482 489 return EIO; … … 771 778 772 779 ns8250_read_from_device(ns); 773 hw_res_clear_interrupt(ns->parent_sess,ns->irq);780 irc_disable_interrupt(ns->irq); 774 781 } 775 782 … … 790 797 static inline int ns8250_unregister_interrupt_handler(ns8250_t *ns) 791 798 { 792 return unregister_interrupt_handler(ns->dev, ns->irq _cap);799 return unregister_interrupt_handler(ns->dev, ns->irq); 793 800 } 794 801 … … 821 828 ns->dev = dev; 822 829 823 ns->parent_sess = ddf_dev_parent_sess_get(ns->dev);824 if (ns->parent_sess == NULL) {825 ddf_msg(LVL_ERROR, "Failed to connect to parent driver of "826 "device %s.", ddf_dev_get_name(ns->dev));827 rc = EIO;828 goto fail;829 }830 831 830 rc = ns8250_dev_initialize(ns); 832 831 if (rc != EOK) … … 850 849 851 850 /* Register interrupt handler. */ 852 ns->irq_cap = ns8250_register_interrupt_handler(ns); 853 if (ns->irq_cap < 0) { 851 if (ns8250_register_interrupt_handler(ns) != EOK) { 854 852 ddf_msg(LVL_ERROR, "Failed to register interrupt handler."); 855 853 rc = EADDRNOTAVAIL;
Note:
See TracChangeset
for help on using the changeset viewer.