HelenOS sources
This source file includes following definitions.
- hw_res_get_resource_list
- hw_res_enable_interrupt
- hw_res_disable_interrupt
- hw_res_clear_interrupt
- hw_res_dma_channel_setup
- hw_res_dma_channel_remain
- hw_res_query_legacy_io
- hw_res_claim_legacy_io
#include <device/hw_res.h>
#include <errno.h>
#include <async.h>
#include <stdlib.h>
errno_t hw_res_get_resource_list(async_sess_t *sess,
    hw_resource_list_t *hw_resources)
{
        sysarg_t count = 0;
        async_exch_t *exch = async_exchange_begin(sess);
        errno_t rc = async_req_1_1(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE),
            HW_RES_GET_RESOURCE_LIST, &count);
        if (rc != EOK) {
                async_exchange_end(exch);
                return rc;
        }
        size_t size = count * sizeof(hw_resource_t);
        hw_resource_t *resources = (hw_resource_t *) malloc(size);
        if (resources == NULL) {
                
                async_exchange_end(exch);
                return ENOMEM;
        }
        rc = async_data_read_start(exch, resources, size);
        async_exchange_end(exch);
        if (rc != EOK) {
                free(resources);
                return rc;
        }
        hw_resources->resources = resources;
        hw_resources->count = count;
        return EOK;
}
errno_t hw_res_enable_interrupt(async_sess_t *sess, int irq)
{
        async_exch_t *exch = async_exchange_begin(sess);
        errno_t rc = async_req_2_0(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE),
            HW_RES_ENABLE_INTERRUPT, irq);
        async_exchange_end(exch);
        return rc;
}
errno_t hw_res_disable_interrupt(async_sess_t *sess, int irq)
{
        async_exch_t *exch = async_exchange_begin(sess);
        errno_t rc = async_req_2_0(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE),
            HW_RES_DISABLE_INTERRUPT, irq);
        async_exchange_end(exch);
        return rc;
}
errno_t hw_res_clear_interrupt(async_sess_t *sess, int irq)
{
        async_exch_t *exch = async_exchange_begin(sess);
        errno_t rc = async_req_2_0(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE),
            HW_RES_CLEAR_INTERRUPT, irq);
        async_exchange_end(exch);
        return rc;
}
errno_t hw_res_dma_channel_setup(async_sess_t *sess,
    unsigned channel, uint32_t pa, uint32_t size, uint8_t mode)
{
        async_exch_t *exch = async_exchange_begin(sess);
        const uint32_t packed = (channel & 0xffff) | (mode << 16);
        const errno_t ret = async_req_4_0(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE),
            HW_RES_DMA_CHANNEL_SETUP, packed, pa, size);
        async_exchange_end(exch);
        return ret;
}
errno_t hw_res_dma_channel_remain(async_sess_t *sess, unsigned channel, size_t *rem)
{
        async_exch_t *exch = async_exchange_begin(sess);
        sysarg_t remain;
        const errno_t ret = async_req_2_1(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE),
            HW_RES_DMA_CHANNEL_REMAIN, channel, &remain);
        async_exchange_end(exch);
        if (ret == EOK)
                *rem = remain;
        return ret;
}
errno_t hw_res_query_legacy_io(async_sess_t *sess, hw_res_claims_t *rclaims)
{
        async_exch_t *exch = async_exchange_begin(sess);
        sysarg_t claims;
        const errno_t ret = async_req_1_1(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE),
            HW_RES_QUERY_LEGACY_IO, &claims);
        async_exchange_end(exch);
        if (ret == EOK)
                *rclaims = claims;
        return ret;
}
errno_t hw_res_claim_legacy_io(async_sess_t *sess, hw_res_claims_t claims)
{
        async_exch_t *exch = async_exchange_begin(sess);
        const errno_t ret = async_req_2_0(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE),
            HW_RES_CLAIM_LEGACY_IO, claims);
        async_exchange_end(exch);
        return ret;
}
HelenOS homepage, sources at GitHub