Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/infrastructure/rootpc/rootpc.c

    re882e3a r56fd7cf  
    5454#define NAME "rootpc"
    5555
    56 /** Obtain function soft-state from DDF function node */
    57 #define ROOTPC_FUN(fnode) ((rootpc_fun_t *) (fnode)->driver_data)
    58 
    5956typedef struct rootpc_fun {
    6057        hw_resource_list_t hw_resources;
     
    7572};
    7673
    77 static hw_resource_t pci_conf_regs = {
    78         .type = IO_RANGE,
    79         .res.io_range = {
    80                 .address = 0xCF8,
    81                 .size = 8,
    82                 .endianness = LITTLE_ENDIAN
     74static hw_resource_t pci_conf_regs[] = {
     75        {
     76                .type = IO_RANGE,
     77                .res.io_range = {
     78                        .address = 0xCF8,
     79                        .size = 4,
     80                        .endianness = LITTLE_ENDIAN
     81                }
     82        },
     83        {
     84                .type = IO_RANGE,
     85                .res.io_range = {
     86                        .address = 0xCFC,
     87                        .size = 4,
     88                        .endianness = LITTLE_ENDIAN
     89                }
    8390        }
    8491};
     
    8693static rootpc_fun_t pci_data = {
    8794        .hw_resources = {
    88                 1,
    89                 &pci_conf_regs
    90         }
    91 };
     95                sizeof(pci_conf_regs)/sizeof(pci_conf_regs[0]),
     96                pci_conf_regs
     97        }
     98};
     99
     100/** Obtain function soft-state from DDF function node */
     101static rootpc_fun_t *rootpc_fun(ddf_fun_t *fnode)
     102{
     103        return ddf_fun_data_get(fnode);
     104}
    92105
    93106static hw_resource_list_t *rootpc_get_resources(ddf_fun_t *fnode)
    94107{
    95         rootpc_fun_t *fun = ROOTPC_FUN(fnode);
     108        rootpc_fun_t *fun = rootpc_fun(fnode);
    96109       
    97110        assert(fun != NULL);
     
    116129static bool
    117130rootpc_add_fun(ddf_dev_t *dev, const char *name, const char *str_match_id,
    118     rootpc_fun_t *fun)
     131    rootpc_fun_t *fun_proto)
    119132{
    120133        ddf_msg(LVL_DEBUG, "Adding new function '%s'.", name);
    121134       
    122135        ddf_fun_t *fnode = NULL;
    123         match_id_t *match_id = NULL;
     136        int rc;
    124137       
    125138        /* Create new device. */
     
    128141                goto failure;
    129142       
    130         fnode->driver_data = fun;
    131        
    132         /* Initialize match id list */
    133         match_id = create_match_id();
    134         if (match_id == NULL)
     143        rootpc_fun_t *fun = ddf_fun_data_alloc(fnode, sizeof(rootpc_fun_t));
     144        *fun = *fun_proto;
     145       
     146        /* Add match ID */
     147        rc = ddf_fun_add_match_id(fnode, str_match_id, 100);
     148        if (rc != EOK)
    135149                goto failure;
    136150       
    137         match_id->id = str_match_id;
    138         match_id->score = 100;
    139         add_match_id(&fnode->match_ids, match_id);
    140        
    141151        /* Set provided operations to the device. */
    142         fnode->ops = &rootpc_fun_ops;
     152        ddf_fun_set_ops(fnode, &rootpc_fun_ops);
    143153       
    144154        /* Register function. */
     
    151161       
    152162failure:
    153         if (match_id != NULL)
    154                 match_id->id = NULL;
    155        
    156163        if (fnode != NULL)
    157164                ddf_fun_destroy(fnode);
     
    176183{
    177184        ddf_msg(LVL_DEBUG, "rootpc_dev_add, device handle = %d",
    178             (int)dev->handle);
     185            (int)ddf_dev_get_handle(dev));
    179186       
    180187        /* Register functions. */
Note: See TracChangeset for help on using the changeset viewer.