Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/char/ns8250/ns8250.c

    rd51838f rb19e892  
    5555#include <ops/char_dev.h>
    5656
     57#include <irc.h>
    5758#include <device/hw_res.h>
    5859#include <ipc/serial_ctl.h>
     
    153154        /** DDF function node */
    154155        ddf_fun_t *fun;
    155         /** Parent session */
    156         async_sess_t *parent_sess;
    157156        /** I/O registers **/
    158157        ns8250_regs_t *regs;
     
    161160        /** The irq assigned to this device. */
    162161        int irq;
    163         /** IRQ capability handle */
    164         int irq_cap;
    165162        /** The base i/o address of the devices registers. */
    166163        uintptr_t io_addr;
     
    383380static int ns8250_dev_initialize(ns8250_t *ns)
    384381{
     382        async_sess_t *parent_sess;
    385383        int ret = EOK;
    386384       
     
    390388        memset(&hw_resources, 0, sizeof(hw_resource_list_t));
    391389       
     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       
    392399        /* 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);
    394401        if (ret != EOK) {
    395402                ddf_msg(LVL_ERROR, "Failed to get HW resources for device "
     
    478485{
    479486        /* 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);
    481488        if (rc != EOK)
    482489                return EIO;
     
    771778       
    772779        ns8250_read_from_device(ns);
    773         hw_res_clear_interrupt(ns->parent_sess, ns->irq);
     780        irc_disable_interrupt(ns->irq);
    774781}
    775782
     
    790797static inline int ns8250_unregister_interrupt_handler(ns8250_t *ns)
    791798{
    792         return unregister_interrupt_handler(ns->dev, ns->irq_cap);
     799        return unregister_interrupt_handler(ns->dev, ns->irq);
    793800}
    794801
     
    821828        ns->dev = dev;
    822829       
    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        
    831830        rc = ns8250_dev_initialize(ns);
    832831        if (rc != EOK)
     
    850849       
    851850        /* 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) {
    854852                ddf_msg(LVL_ERROR, "Failed to register interrupt handler.");
    855853                rc = EADDRNOTAVAIL;
Note: See TracChangeset for help on using the changeset viewer.