/alps/pcitool

To get this branch, use:
bzr branch http://suren.me/webbzr/alps/pcitool

« back to all changes in this revision

Viewing changes to pcilib/xml.c

  • Committer: Suren A. Chilingaryan
  • Date: 2015-10-19 04:59:53 UTC
  • Revision ID: csa@suren.me-20151019045953-h4ur2flqzf3ky412
Provide register listings in public API

Show diffs side-by-side

added added

removed removed

Lines of Context:
61
61
 
62
62
typedef struct {
63
63
    pcilib_register_description_t base;
64
 
    pcilib_register_value_t min, max;
 
64
    pcilib_register_value_range_t range;
65
65
} pcilib_xml_register_description_t;
66
66
 
67
67
/*
156
156
                pcilib_error("Invalid minimum value (%s) is specified in the XML register description", value);
157
157
                return PCILIB_ERROR_INVALID_DATA;
158
158
            }
159
 
            xml_desc->min = min;
 
159
            xml_desc->range.min = min;
160
160
        } else if (!strcasecmp(name, "max")) {
161
161
            pcilib_register_value_t max = strtol(value, &endptr, 0);
162
162
            if ((strlen(endptr) > 0)) {
163
163
                pcilib_error("Invalid minimum value (%s) is specified in the XML register description", value);
164
164
                return PCILIB_ERROR_INVALID_DATA;
165
165
            }
166
 
            xml_desc->max = max;
 
166
            xml_desc->range.max = max;
167
167
        } else if (!strcasecmp((char*)name,"rwmask")) {
168
168
            if (!strcasecmp(value, "all")) {
169
169
                desc->rwmask = PCILIB_REGISTER_ALL_BITS;
275
275
    }
276
276
 
277
277
    ctx->register_ctx[reg].xml = node;
278
 
    ctx->register_ctx[reg].min = desc.min;
279
 
    ctx->register_ctx[reg].max = desc.max;
 
278
    memcpy(&ctx->register_ctx[reg].range, &desc.range, sizeof(pcilib_register_value_range_t));
280
279
    ctx->register_ctx[reg].views = desc.base.views;
281
280
 
282
281
 
319
318
            }
320
319
 
321
320
            ctx->register_ctx[reg].xml = nodeset->nodeTab[i];
322
 
            ctx->register_ctx[reg].min = fdesc.min;
323
 
            ctx->register_ctx[reg].max = fdesc.max;
 
321
            memcpy(&ctx->register_ctx[reg].range, &fdesc.range, sizeof(pcilib_register_value_range_t));
324
322
            ctx->register_ctx[reg].views = fdesc.base.views;
325
323
        }
326
324
    }
563
561
}
564
562
 
565
563
 
566
 
static int pcilib_xml_parse_value_name(pcilib_t *ctx, xmlXPathContextPtr xpath, xmlDocPtr doc, xmlNodePtr node, pcilib_value_name_t *desc) {
 
564
static int pcilib_xml_parse_value_name(pcilib_t *ctx, xmlXPathContextPtr xpath, xmlDocPtr doc, xmlNodePtr node, pcilib_register_value_name_t *desc) {
567
565
    xmlAttr *cur;
568
566
    char *value, *name;
569
567
    char *endptr;
660
658
        return PCILIB_ERROR_INVALID_DATA; 
661
659
    }
662
660
 
663
 
    desc.names = (pcilib_value_name_t*)malloc((nodeset->nodeNr + 1) * sizeof(pcilib_value_name_t));
 
661
    desc.names = (pcilib_register_value_name_t*)malloc((nodeset->nodeNr + 1) * sizeof(pcilib_register_value_name_t));
664
662
    if (!desc.names) {
665
663
        xmlXPathFreeObject(nodes);
666
664
        pcilib_error("No names is defined for enum view (%s)", desc.base.name);
676
674
            return err;
677
675
        }
678
676
    }
679
 
    memset(&desc.names[nodeset->nodeNr], 0, sizeof(pcilib_value_name_t));
 
677
    memset(&desc.names[nodeset->nodeNr], 0, sizeof(pcilib_register_value_name_t));
680
678
 
681
679
    xmlXPathFreeObject(nodes);
682
680