/alps/bar_resolve

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

« back to all changes in this revision

Viewing changes to app.c

  • Committer: Suren A. Chilingaryan
  • Date: 2016-03-02 19:01:33 UTC
  • Revision ID: csa@suren.me-20160302190133-2suzxss2vze5ao54
Finalyze the sample

Show diffs side-by-side

added added

removed removed

Lines of Context:
9
9
#include <time.h>
10
10
#include <sched.h>
11
11
#include <fcntl.h>
 
12
#include <errno.h>
12
13
#include <sys/types.h>
13
14
#include <sys/time.h>
14
15
#include <sys/stat.h>
15
16
 
16
17
#include <pcilib.h>
17
 
#include "pcilib/kmem.h"
 
18
#include <pcilib/bar.h>
 
19
#include <pcilib/kmem.h>
18
20
 
19
21
#define DEVICE "/dev/fpga0"
 
22
#define BAR PCILIB_BAR0
 
23
 
20
24
 
21
25
#define WR(addr, value) { *(uint32_t*)(bar + addr) = value; }
22
26
#define RD(addr, value) { value = *(uint32_t*)(bar + addr); }
23
27
 
24
 
int main(int argc, char *argv[]) {
25
 
    uint32_t i, j;
26
 
    pcilib_t *pci;
27
 
    pcilib_kmem_handle_t *kbuf;
28
 
 
29
 
    void* volatile bar;
30
 
    
31
 
    pci = pcilib_open(DEVICE, PCILIB_MODEL_DETECT);
32
 
    if (!pci) {
33
 
        printf("pcilib_open\n");
34
 
        exit(1);
35
 
    }
36
 
 
37
 
    kbuf = pcilib_alloc_kernel_memory(pci, PCILIB_KMEM_TYPE_PAGE, 1, 4096, 4096, 0, 0);
38
 
    volatile uint32_t *ua = pcilib_kmem_get_ua(pci, kbuf);
39
 
    uintptr_t pa = pcilib_kmem_get_pa(pci, kbuf);
40
 
 
41
 
    printf("User: %p\n", ua);
42
 
    printf("HW  : 0x%lx\n", pa);
43
 
 
 
28
void request(void* volatile ua) {
44
29
    int fd = open("/sys/class/test/test0/test_request",  O_RDWR);
45
30
    if (fd >= 0) {
46
31
        size_t bytes;
60
45
        }
61
46
 
62
47
        close(fd);
63
 
    }
 
48
    } else {
 
49
        printf("Error openning /sys/class/test/test0/test_request, errno %i\n", errno);
 
50
    }
 
51
}
 
52
 
 
53
int main(int argc, char *argv[]) {
 
54
    uint32_t i, j;
 
55
    pcilib_t *pci;
 
56
    pcilib_kmem_handle_t *kbuf;
 
57
 
 
58
    void* volatile bar;
 
59
    const pcilib_bar_info_t *bar_info;
 
60
 
 
61
    pci = pcilib_open(DEVICE, PCILIB_MODEL_DETECT);
 
62
    if (!pci) {
 
63
        printf("pcilib_open\n");
 
64
        exit(1);
 
65
    }
 
66
 
 
67
    kbuf = pcilib_alloc_kernel_memory(pci, PCILIB_KMEM_TYPE_PAGE, 1, 4096, 4096, 0, 0);
 
68
    void* volatile ua = pcilib_kmem_get_ua(pci, kbuf);
 
69
    uintptr_t pa = pcilib_kmem_get_pa(pci, kbuf);
 
70
 
 
71
    printf("Kmem\n-----\n");
 
72
    printf("User: %p\n", ua);
 
73
    printf("HW  : 0x%lx\n", pa);
 
74
    request(ua);
 
75
    printf("\n");
 
76
 
 
77
    bar = pcilib_resolve_bar_address(pci, BAR, 0);
 
78
    if (!bar) {
 
79
        pcilib_close(pci);
 
80
        printf("map bar\n");
 
81
        exit(1);
 
82
    }
 
83
    bar_info = pcilib_get_bar_info(pci, BAR);
 
84
 
 
85
    printf("Bar\n-----\n");
 
86
    printf("User: %p\n", bar_info[BAR].virt_addr);
 
87
    printf("HW  : %p\n", bar_info[BAR].phys_addr);
 
88
    request(bar_info[BAR].virt_addr);
 
89
    printf("\n");
64
90
 
65
91
    pcilib_free_kernel_memory(pci, kbuf, 0);
66
 
    
67
92
    pcilib_close(pci);
68
93
}