/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/bank.c

  • Committer: Suren A. Chilingaryan
  • Date: 2015-11-18 02:25:02 UTC
  • Revision ID: csa@suren.me-20151118022502-2yu6oagexn3048jq
Provide API calls for register and bank address resolution

Show diffs side-by-side

added added

removed removed

Lines of Context:
272
272
    return pcilib_find_register_protocol_by_name(ctx, protocol);
273
273
}
274
274
 
 
275
uintptr_t pcilib_resolve_bank_address_by_id(pcilib_t *ctx, pcilib_address_resolution_flags_t flags, pcilib_register_bank_t bank) {
 
276
    pcilib_register_bank_context_t *bctx = ctx->bank_ctx[bank];
 
277
 
 
278
    if (!bctx->api->resolve)
 
279
        return PCILIB_ADDRESS_INVALID;
 
280
        
 
281
    return bctx->api->resolve(ctx, bctx, flags, PCILIB_REGISTER_ADDRESS_INVALID);
 
282
}
 
283
 
 
284
uintptr_t pcilib_resolve_bank_address(pcilib_t *ctx, pcilib_address_resolution_flags_t flags, const char *bank) {
 
285
    pcilib_register_bank_t bank_id = pcilib_find_register_bank(ctx, bank);
 
286
    if (bank_id == PCILIB_REGISTER_BANK_INVALID) {
 
287
        if (bank) pcilib_error("Invalid register bank is specified (%s)", bank);
 
288
        else pcilib_error("Register bank should be specified");
 
289
        return PCILIB_ADDRESS_INVALID;
 
290
    }
 
291
 
 
292
    return pcilib_resolve_bank_address_by_id(ctx, flags, bank_id);
 
293
}
 
294
 
 
295
uintptr_t pcilib_resolve_register_address_by_id(pcilib_t *ctx, pcilib_address_resolution_flags_t flags, pcilib_register_t reg) {
 
296
    pcilib_register_bank_context_t *bctx = ctx->bank_ctx[ctx->register_ctx[reg].bank];
 
297
 
 
298
    if (!bctx->api->resolve)
 
299
        return PCILIB_ADDRESS_INVALID;
 
300
 
 
301
    return bctx->api->resolve(ctx, bctx, 0, ctx->registers[reg].addr);
 
302
}
 
303
 
 
304
uintptr_t pcilib_resolve_register_address(pcilib_t *ctx, pcilib_address_resolution_flags_t flags, const char *bank, const char *regname) {
 
305
    pcilib_register_t reg = pcilib_find_register(ctx, bank, regname);
 
306
    if (reg == PCILIB_REGISTER_INVALID) {
 
307
        pcilib_error("Register (%s) is not found", regname);
 
308
        return PCILIB_ADDRESS_INVALID;
 
309
    }
 
310
 
 
311
    return pcilib_resolve_register_address_by_id(ctx, flags, reg);
 
312
}
 
313
 
275
314
int pcilib_get_register_bank_attr_by_id(pcilib_t *ctx, pcilib_register_bank_t bank, const char *attr, pcilib_value_t *val) {
276
315
    assert(bank < ctx->num_banks);
277
316