Changeset d51838f in mainline for uspace/drv/char/ns8250/ns8250.c


Ignore:
Timestamp:
2017-10-14T22:49:18Z (8 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
75911d24
Parents:
ce732e74
Message:

Let leaf drivers enable/disable/clear interrupts via hw_res instead of directly using irc.

File:
1 edited

Legend:

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

    rce732e74 rd51838f  
    5555#include <ops/char_dev.h>
    5656
    57 #include <irc.h>
    5857#include <device/hw_res.h>
    5958#include <ipc/serial_ctl.h>
     
    154153        /** DDF function node */
    155154        ddf_fun_t *fun;
     155        /** Parent session */
     156        async_sess_t *parent_sess;
    156157        /** I/O registers **/
    157158        ns8250_regs_t *regs;
     
    382383static int ns8250_dev_initialize(ns8250_t *ns)
    383384{
    384         async_sess_t *parent_sess;
    385385        int ret = EOK;
    386386       
     
    390390        memset(&hw_resources, 0, sizeof(hw_resource_list_t));
    391391       
    392         /* Connect to the parent's driver. */
    393         parent_sess = ddf_dev_parent_sess_get(ns->dev);
    394         if (parent_sess == NULL) {
    395                 ddf_msg(LVL_ERROR, "Failed to connect to parent driver of "
    396                     "device %s.", ddf_dev_get_name(ns->dev));
    397                 ret = ENOENT;
    398                 goto failed;
    399         }
    400        
    401392        /* Get hw resources. */
    402         ret = hw_res_get_resource_list(parent_sess, &hw_resources);
     393        ret = hw_res_get_resource_list(ns->parent_sess, &hw_resources);
    403394        if (ret != EOK) {
    404395                ddf_msg(LVL_ERROR, "Failed to get HW resources for device "
     
    487478{
    488479        /* Enable interrupt using IRC service. */
    489         int rc = irc_enable_interrupt(ns->irq);
     480        int rc = hw_res_enable_interrupt(ns->parent_sess, ns->irq);
    490481        if (rc != EOK)
    491482                return EIO;
     
    780771       
    781772        ns8250_read_from_device(ns);
    782         irc_clear_interrupt(ns->irq);
     773        hw_res_clear_interrupt(ns->parent_sess, ns->irq);
    783774}
    784775
     
    829820        fibril_condvar_initialize(&ns->input_buffer_available);
    830821        ns->dev = dev;
     822       
     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        }
    831830       
    832831        rc = ns8250_dev_initialize(ns);
Note: See TracChangeset for help on using the changeset viewer.