/alps/pcitool

To get this branch, use:
bzr branch http://suren.me/webbzr/alps/pcitool
7.1.5 by Suren A. Chilingaryan
Support for FPGA registers
1
#include <sys/time.h>
2
#include <arpa/inet.h>
3
#include <assert.h>
4
5
#include "tools.h"
236 by Suren A. Chilingaryan
Big redign of model structures
6
#include "model.h"
7.1.5 by Suren A. Chilingaryan
Support for FPGA registers
7
#include "error.h"
324 by Suren A. Chilingaryan
Documentation update
8
#include "bar.h"
330 by Suren A. Chilingaryan
Support for 64-bit registes
9
#include "datacpy.h"
332 by Suren A. Chilingaryan
Provide API calls for register and bank address resolution
10
#include "pci.h"
7.1.5 by Suren A. Chilingaryan
Support for FPGA registers
11
12
#define default_datacpy(dst, src, access, bank)   pcilib_datacpy(dst, src, access, 1, bank->raw_endianess)
13
332 by Suren A. Chilingaryan
Provide API calls for register and bank address resolution
14
uintptr_t pcilib_default_resolve(pcilib_t *ctx, pcilib_register_bank_context_t *bank_ctx, pcilib_address_resolution_flags_t flags, pcilib_register_addr_t reg_addr) {
15
    uintptr_t addr;
16
    const pcilib_register_bank_description_t *b = bank_ctx->bank;
17
18
    if (reg_addr == PCILIB_REGISTER_ADDRESS_INVALID) reg_addr = 0;
19
20
    switch (flags&PCILIB_ADDRESS_RESOLUTION_MASK_ACCESS_MODE) {
21
     case 0:
22
	if (b->read_addr != b->write_addr)
23
	    return PCILIB_ADDRESS_INVALID;
24
     case PCILIB_ADDRESS_RESOLUTION_FLAG_READ_ONLY:
25
	addr = b->read_addr + reg_addr;
26
	break;
27
     case PCILIB_ADDRESS_RESOLUTION_FLAG_WRITE_ONLY:
28
        addr = b->write_addr + reg_addr;
29
     default:
30
        return PCILIB_ADDRESS_INVALID;
31
    }
32
33
    switch (flags&PCILIB_ADDRESS_RESOLUTION_MASK_ADDRESS_TYPE) {
34
     case 0:
35
        return (uintptr_t)pcilib_resolve_bar_address(ctx, b->bar, addr);
36
     case PCILIB_ADDRESS_RESOLUTION_FLAG_BUS_ADDRESS:
37
     case PCILIB_ADDRESS_RESOLUTION_FLAG_PHYS_ADDRESS:
38
        return ctx->board_info.bar_start[b->bar] + addr;
39
    }
40
41
    return PCILIB_ADDRESS_INVALID;
42
}
43
236 by Suren A. Chilingaryan
Big redign of model structures
44
int pcilib_default_read(pcilib_t *ctx, pcilib_register_bank_context_t *bank_ctx, pcilib_register_addr_t addr, pcilib_register_value_t *value) {
7.1.5 by Suren A. Chilingaryan
Support for FPGA registers
45
    char *ptr;
46
    pcilib_register_value_t val = 0;
236 by Suren A. Chilingaryan
Big redign of model structures
47
    
48
    const pcilib_register_bank_description_t *b = bank_ctx->bank;
303 by Suren A. Chilingaryan
Initial integration of XML support
49
236 by Suren A. Chilingaryan
Big redign of model structures
50
    int access = b->access / 8;
303 by Suren A. Chilingaryan
Initial integration of XML support
51
332 by Suren A. Chilingaryan
Provide API calls for register and bank address resolution
52
    ptr =  pcilib_resolve_bar_address(ctx, b->bar, b->read_addr + addr);
236 by Suren A. Chilingaryan
Big redign of model structures
53
    default_datacpy(&val, ptr, access, b);
303 by Suren A. Chilingaryan
Initial integration of XML support
54
54 by Suren A. Chilingaryan
Support dynamic registers, support register offsets and multiregisters (bitmasks), list NWL DMA registers
55
//    *value = val&BIT_MASK(bits);
56
    *value = val;
303 by Suren A. Chilingaryan
Initial integration of XML support
57
7.1.5 by Suren A. Chilingaryan
Support for FPGA registers
58
    return 0;
59
}
60
61
236 by Suren A. Chilingaryan
Big redign of model structures
62
int pcilib_default_write(pcilib_t *ctx, pcilib_register_bank_context_t *bank_ctx, pcilib_register_addr_t addr, pcilib_register_value_t value) {
7.1.5 by Suren A. Chilingaryan
Support for FPGA registers
63
    char *ptr;
236 by Suren A. Chilingaryan
Big redign of model structures
64
65
    const pcilib_register_bank_description_t *b = bank_ctx->bank;
66
67
    int access = b->access / 8;
68
332 by Suren A. Chilingaryan
Provide API calls for register and bank address resolution
69
    ptr =  pcilib_resolve_bar_address(ctx, b->bar, b->write_addr + addr);
236 by Suren A. Chilingaryan
Big redign of model structures
70
    default_datacpy(ptr, &value, access, b);
7.1.5 by Suren A. Chilingaryan
Support for FPGA registers
71
72
    return 0;
73
}