Changeset cccd60c3 in mainline for uspace/lib


Ignore:
Timestamp:
2017-10-10T06:51:02Z (8 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c46bfbc
Parents:
2bdf92a5
Message:

hw_res_enable_interrupt should allow enabling individual interrupts.

Location:
uspace/lib
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/device/hw_res.c

    r2bdf92a5 rcccd60c3  
    7575}
    7676
    77 bool hw_res_enable_interrupt(async_sess_t *sess)
     77int hw_res_enable_interrupt(async_sess_t *sess, int irq)
    7878{
    7979        async_exch_t *exch = async_exchange_begin(sess);
    8080       
    81         int rc = async_req_1_0(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE),
    82             HW_RES_ENABLE_INTERRUPT);
     81        int rc = async_req_2_0(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE),
     82            HW_RES_ENABLE_INTERRUPT, irq);
    8383        async_exchange_end(exch);
    8484       
    85         return (rc == EOK);
     85        return rc;
    8686}
    8787
  • uspace/lib/c/include/device/hw_res.h

    r2bdf92a5 rcccd60c3  
    115115
    116116extern int hw_res_get_resource_list(async_sess_t *, hw_resource_list_t *);
    117 extern bool hw_res_enable_interrupt(async_sess_t *);
     117extern int hw_res_enable_interrupt(async_sess_t *, int);
    118118
    119119extern int hw_res_dma_channel_setup(async_sess_t *, unsigned int, uint32_t,
  • uspace/lib/drv/generic/remote_hw_res.c

    r2bdf92a5 rcccd60c3  
    6767        hw_res_ops_t *hw_res_ops = (hw_res_ops_t *) ops;
    6868       
    69         if (hw_res_ops->enable_interrupt == NULL)
     69        if (hw_res_ops->enable_interrupt == NULL) {
    7070                async_answer_0(callid, ENOTSUP);
    71         else if (hw_res_ops->enable_interrupt(fun))
    72                 async_answer_0(callid, EOK);
    73         else
    74                 async_answer_0(callid, EREFUSED);
     71                return;
     72        }
     73       
     74        const int irq = DEV_IPC_GET_ARG1(*call);
     75        const int ret = hw_res_ops->enable_interrupt(fun, irq);
     76        async_answer_0(callid, ret);
    7577}
    7678
  • uspace/lib/drv/include/ops/hw_res.h

    r2bdf92a5 rcccd60c3  
    4444typedef struct {
    4545        hw_resource_list_t *(*get_resource_list)(ddf_fun_t *);
    46         bool (*enable_interrupt)(ddf_fun_t *);
     46        int (*enable_interrupt)(ddf_fun_t *, int);
    4747        int (*dma_channel_setup)(ddf_fun_t *, unsigned, uint32_t, uint32_t, uint8_t);
    4848        int (*dma_channel_remain)(ddf_fun_t *, unsigned, size_t *);
  • uspace/lib/usbhost/include/usb/host/ddf_helpers.h

    r2bdf92a5 rcccd60c3  
    7070hcd_t *dev_to_hcd(ddf_dev_t *dev);
    7171
    72 int hcd_ddf_enable_interrupts(ddf_dev_t *device);
     72int hcd_ddf_enable_interrupt(ddf_dev_t *device, int);
    7373int hcd_ddf_get_registers(ddf_dev_t *device, hw_res_list_parsed_t *hw_res);
    7474int hcd_ddf_setup_interrupts(ddf_dev_t *device,
  • uspace/lib/usbhost/src/ddf_helpers.c

    r2bdf92a5 rcccd60c3  
    692692
    693693//TODO: Cache parent session in HCD
    694 /** Call the parent driver with a request to enable interrupts
     694/** Call the parent driver with a request to enable interrupt
    695695 *
    696696 * @param[in] device Device asking for interrupts
     697 * @param[in] inum Interrupt number
    697698 * @return Error code.
    698699 */
    699 int hcd_ddf_enable_interrupts(ddf_dev_t *device)
     700int hcd_ddf_enable_interrupt(ddf_dev_t *device, int inum)
    700701{
    701702        async_sess_t *parent_sess = ddf_dev_parent_sess_get(device);
     
    703704                return EIO;
    704705
    705         const bool enabled = hw_res_enable_interrupt(parent_sess);
    706 
    707         return enabled ? EOK : EIO;
     706        return hw_res_enable_interrupt(parent_sess, inum);
    708707}
    709708
     
    776775
    777776        /* Enable interrupts */
    778         int ret = hcd_ddf_enable_interrupts(device);
     777        int ret = hcd_ddf_enable_interrupt(device, irq);
    779778        if (ret != EOK) {
    780779                usb_log_error("Failed to register interrupt handler: %s.\n",
Note: See TracChangeset for help on using the changeset viewer.