Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/platform/icp/icp.c

    ra416d070 r75fe97b  
    3939#include <stdio.h>
    4040#include <errno.h>
    41 #include <irc.h>
    4241#include <stdbool.h>
    4342#include <stdlib.h>
     
    5453        icp_kbd_irq = 3,
    5554        icp_mouse_base = 0x19000000,
    56         icp_mouse_irq = 4,
    57         icp_ic_base = 0x14000000
     55        icp_mouse_irq = 4
    5856};
    5957
     
    109107};
    110108
    111 static hw_resource_t icp_ic_res[] = {
    112         {
    113                 .type = MEM_RANGE,
    114                 .res.mem_range = {
    115                         .address = icp_ic_base,
    116                         .size = 40,
    117                         .relative = false,
    118                         .endianness = LITTLE_ENDIAN
    119                 }
    120         }
    121 };
    122 
    123109static pio_window_t icp_pio_window = {
    124110        .mem = {
     
    142128};
    143129
    144 static icp_fun_t icp_ic_fun_proto = {
    145         .hw_resources = {
    146                 sizeof(icp_ic_res) / sizeof(icp_ic_res[0]),
    147                 icp_ic_res
    148         },
    149 };
    150 
    151130/** Obtain function soft-state from DDF function node */
    152131static icp_fun_t *icp_fun(ddf_fun_t *fnode)
     
    163142}
    164143
    165 static bool icp_fun_owns_interrupt(icp_fun_t *fun, int irq)
    166 {
    167         const hw_resource_list_t *res = &fun->hw_resources;
    168 
    169         /* Check that specified irq really belongs to the function */
    170         for (size_t i = 0; i < res->count; ++i) {
    171                 if (res->resources[i].type == INTERRUPT &&
    172                     res->resources[i].res.interrupt.irq == irq) {
    173                         return true;
    174                 }
    175         }
    176 
     144static bool icp_enable_interrupt(ddf_fun_t *fun)
     145{
     146        /* TODO */
    177147        return false;
    178 }
    179 
    180 static int icp_fun_enable_interrupt(ddf_fun_t *fnode, int irq)
    181 {
    182         icp_fun_t *fun = icp_fun(fnode);
    183 
    184         if (!icp_fun_owns_interrupt(fun, irq))
    185                 return EINVAL;
    186 
    187         return irc_enable_interrupt(irq);
    188 }
    189 
    190 static int icp_fun_disable_interrupt(ddf_fun_t *fnode, int irq)
    191 {
    192         icp_fun_t *fun = icp_fun(fnode);
    193 
    194         if (!icp_fun_owns_interrupt(fun, irq))
    195                 return EINVAL;
    196 
    197         return irc_disable_interrupt(irq);
    198 }
    199 
    200 static int icp_fun_clear_interrupt(ddf_fun_t *fnode, int irq)
    201 {
    202         icp_fun_t *fun = icp_fun(fnode);
    203 
    204         if (!icp_fun_owns_interrupt(fun, irq))
    205                 return EINVAL;
    206 
    207         return irc_clear_interrupt(irq);
    208148}
    209149
     
    215155static hw_res_ops_t icp_hw_res_ops = {
    216156        .get_resource_list = &icp_get_resources,
    217         .enable_interrupt = &icp_fun_enable_interrupt,
    218         .disable_interrupt = &icp_fun_disable_interrupt,
    219         .clear_interrupt = &icp_fun_clear_interrupt
     157        .enable_interrupt = &icp_enable_interrupt,
    220158};
    221159
     
    287225                return rc;
    288226
    289         rc = icp_add_fun(dev, "intctl", "integratorcp/intctl",
    290             &icp_ic_fun_proto);
    291         if (rc != EOK)
    292                 return rc;
    293 
    294227        return EOK;
    295228}
Note: See TracChangeset for help on using the changeset viewer.