/alps/bar_resolve

To get this branch, use:
bzr branch http://darksoft.org/webbzr/alps/bar_resolve

« back to all changes in this revision

Viewing changes to app.c

  • Committer: Suren A. Chilingaryan
  • Date: 2016-03-02 05:45:24 UTC
  • Revision ID: csa@suren.me-20160302054524-aqefho92o0ljk3eh
Test application for resolving user-space BAR addresses

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>
13
12
#include <sys/types.h>
14
13
#include <sys/time.h>
15
14
#include <sys/stat.h>
16
15
 
17
16
#include <pcilib.h>
18
 
#include <pcilib/bar.h>
19
 
#include <pcilib/kmem.h>
 
17
#include "pcilib/kmem.h"
20
18
 
21
19
#define DEVICE "/dev/fpga0"
22
 
#define BAR PCILIB_BAR0
23
 
 
24
20
 
25
21
#define WR(addr, value) { *(uint32_t*)(bar + addr) = value; }
26
22
#define RD(addr, value) { value = *(uint32_t*)(bar + addr); }
27
23
 
28
 
void request(void* volatile ua) {
 
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
 
29
44
    int fd = open("/sys/class/test/test0/test_request",  O_RDWR);
30
45
    if (fd >= 0) {
31
46
        size_t bytes;
45
60
        }
46
61
 
47
62
        close(fd);
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");
 
63
    }
90
64
 
91
65
    pcilib_free_kernel_memory(pci, kbuf, 0);
 
66
    
92
67
    pcilib_close(pci);
93
68
}