/alps/pcitool

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

« back to all changes in this revision

Viewing changes to pcilib/fifo.c

  • Committer: Suren A. Chilingaryan
  • Date: 2015-05-05 13:27:22 UTC
  • Revision ID: csa@suren.me-20150505132722-rz47ppxkx39x2koj
Split bar manipulation and fifo operations in stand-alone source and publish kmem and bar headers

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#define _BSD_SOURCE
 
2
#define _POSIX_C_SOURCE 200809L
 
3
 
 
4
#include <stdio.h>
 
5
#include <string.h>
 
6
#include <strings.h>
 
7
#include <stdlib.h>
 
8
#include <stdint.h>
 
9
#include <fcntl.h>
 
10
#include <unistd.h>
 
11
#include <sys/ioctl.h>
 
12
#include <sys/mman.h>
 
13
#include <arpa/inet.h>
 
14
#include <errno.h>
 
15
#include <assert.h>
 
16
 
 
17
#include "pcilib.h"
 
18
#include "pci.h"
 
19
#include "tools.h"
 
20
#include "error.h"
 
21
#include "model.h"
 
22
#include "plugin.h"
 
23
#include "bar.h"
 
24
 
 
25
int pcilib_read_fifo(pcilib_t *ctx, pcilib_bar_t bar, uintptr_t addr, uint8_t fifo_size, size_t n, void *buf) {
 
26
    int i;
 
27
    void *data;
 
28
 
 
29
    pcilib_detect_address(ctx, &bar, &addr, fifo_size);
 
30
    data = pcilib_map_bar(ctx, bar);
 
31
 
 
32
    for (i = 0; i < n; i++) {
 
33
        pcilib_memcpy(buf + i * fifo_size, data + addr, fifo_size);
 
34
    }
 
35
 
 
36
    pcilib_unmap_bar(ctx, bar, data);
 
37
 
 
38
    return 0;
 
39
}
 
40
 
 
41
int pcilib_write_fifo(pcilib_t *ctx, pcilib_bar_t bar, uintptr_t addr, uint8_t fifo_size, size_t n, void *buf) {
 
42
    int i;
 
43
    void *data;
 
44
 
 
45
    pcilib_detect_address(ctx, &bar, &addr, fifo_size);
 
46
    data = pcilib_map_bar(ctx, bar);
 
47
 
 
48
    for (i = 0; i < n; i++) {
 
49
        pcilib_memcpy(data + addr, buf + i * fifo_size, fifo_size);
 
50
    }
 
51
 
 
52
    pcilib_unmap_bar(ctx, bar, data);
 
53
 
 
54
    return 0;
 
55
}