AFHBA404
AFHBA404 connects ACQ2106 to PCI-Express
STREAM
RTM_T_Device.cpp
Go to the documentation of this file.
1
/*
2
* RTM_T_Device.cpp
3
*
4
* Created on: Apr 28, 2011
5
* Author: pgm
6
*/
7
8
using namespace
std;
9
10
#include <stdio.h>
11
#include <unistd.h>
12
#include <errno.h>
13
#include <stdlib.h>
14
#include <sys/mman.h>
15
#include <sys/types.h>
16
#include <sys/stat.h>
17
#include <sys/time.h>
18
#include <fcntl.h>
19
20
#include "
local.h
"
21
#include "
RTM_T_Device.h
"
22
23
24
25
26
static
unsigned
calc_nbuffers(
unsigned
devnum);
27
static
unsigned
calc_maxlen(
unsigned
devnum);
28
static
unsigned
calc_transfer_buffers(
unsigned
devnum);
29
30
RTM_T_Device::RTM_T_Device
(
int
_devnum) :
31
devnum(_devnum%100),
nbuffers
(calc_nbuffers(devnum)),
32
maxlen(calc_maxlen(devnum)),
33
transfer_buffers
(calc_transfer_buffers(devnum))
34
{
35
char
buf[120];
36
37
sprintf(buf,
"/dev/rtm-t.%d"
,
devnum
);
38
names[
MINOR_DMAREAD
] = *
new
string(buf);
39
_open(
MINOR_DMAREAD
);
40
41
sprintf(buf,
"/dev/rtm-t.%d.regs"
,
devnum
);
42
names[
MINOR_REGREAD
] = *
new
string(buf);
43
_open(
MINOR_REGREAD
);
44
45
for
(
int
ib
= 0;
ib
<
nbuffers
; ++
ib
){
46
sprintf(buf,
"/dev/rtm-t.%d.data/hb%02d"
,
devnum
,
ib
);
47
names[
ib
] = buf;
48
49
_open(
ib
);
50
void
*va = mmap(0,
maxlen
, PROT_READ|PROT_WRITE,
51
MAP_SHARED, handles[
ib
], 0);
52
53
if
(va == (caddr_t)-1 ){
54
perror(
"mmap"
);
55
_exit(errno);
56
}
else
{
57
host_buffers[
ib
] = va;
58
}
59
}
60
61
sprintf(buf,
"/dev/rtm-t.%d.ctrl"
,
devnum
);
62
names[CTRL_ROOT] = *
new
string(buf);
63
}
64
65
static
int
getKnob(
const
char
* knob,
unsigned
* value)
66
{
67
FILE *fp = fopen(knob,
"r"
);
68
if
(!fp)
69
{
70
perror(knob);
71
return
-1;
72
}
73
int
rc = fscanf(fp,
"%u"
, value);
74
fclose(fp);
75
return
rc;
76
}
77
78
#define PARAMETERS "/sys/module/afhba/parameters/"
79
#define BUFFER_LEN PARAMETERS "buffer_len"
80
#define NBUFFERS PARAMETERS "nbuffers"
81
#define TRANSFER_BUFFERS PARAMETERS "transfer_buffers"
82
83
static
unsigned
calc_transfer_buffers(
unsigned
devnum)
84
{
85
unsigned
transfer_buffers
= 0;
86
if
(getKnob(
TRANSFER_BUFFERS
, &
transfer_buffers
) != 1){
87
perror(
"getKnob "
TRANSFER_BUFFERS
" failed"
);
88
exit(1);
89
}
90
return
transfer_buffers
;
91
}
92
93
static
unsigned
calc_nbuffers(
unsigned
devnum)
94
{
95
unsigned
nbuffers
= 0;
96
if
(getKnob(
NBUFFERS
, &
nbuffers
) != 1){
97
perror(
"getKnob "
NBUFFERS
" failed"
);
98
exit(1);
99
}
100
return
nbuffers
;
101
}
102
static
unsigned
calc_maxlen(
unsigned
devnum)
103
{
104
char
knob[80];
105
unsigned
maxlen;
106
snprintf(knob, 80,
"/dev/rtm-t.%u.ctrl/buffer_len"
, devnum);
107
if
(getKnob(knob, &maxlen) == 1){
108
return
maxlen;
109
}
else
if
(getKnob(
BUFFER_LEN
, &maxlen) == 1){
110
return
maxlen;
111
}
else
{
112
perror(
"maxlen not set"
);
113
exit(1);
114
}
115
}
116
117
RTM_T_Device::nbuffers
const unsigned nbuffers
Definition:
RTM_T_Device.h:45
local.h
RTM_T_Device::RTM_T_Device
RTM_T_Device(int _devnum)
Definition:
RTM_T_Device.cpp:30
MINOR_DMAREAD
#define MINOR_DMAREAD
Definition:
afhba_minor.h:13
RTM_T_Device::maxlen
const unsigned maxlen
Definition:
RTM_T_Device.h:46
NBUFFERS
#define NBUFFERS
Definition:
RTM_T_Device.cpp:80
TRANSFER_BUFFERS
#define TRANSFER_BUFFERS
Definition:
RTM_T_Device.cpp:81
ib
int ib
Definition:
InlineDataHandlerMuxAO_LLC.cpp:57
transfer_buffers
int transfer_buffers
Definition:
afhba_stream_drv.c:85
MINOR_REGREAD
#define MINOR_REGREAD
Definition:
afhba_minor.h:14
RTM_T_Device::devnum
const unsigned devnum
Definition:
RTM_T_Device.h:44
RTM_T_Device.h
nbuffers
int nbuffers
Definition:
afhba_stream_drv.c:73
BUFFER_LEN
#define BUFFER_LEN
Definition:
RTM_T_Device.cpp:79
Generated by
1.8.18