AlcapDAQ  1
vme.h
Go to the documentation of this file.
1 #include "vme_io.h"
2 
3 struct vme_handle
4 {
5  bool used;
6  int fd;
7  unsigned long vme_base;
8  int size;
9  volatile unsigned char *base;
10  int reference_count;
12  int fifo_block_size;
13 };
14 
15 struct vme_handle *vme_open(unsigned long vme_addr,
17  int size,
18  int fifo_block_size = 0);
19 
20 void vme_close(struct vme_handle *handle);
21 
22 int vme_dma_read(struct vme_handle *handle,
23  unsigned long vme_addr,
24  unsigned char *buffer,
25  int size);
26 
27 int vme_dma_write(struct vme_handle *handle,
28  unsigned long vme_addr,
29  unsigned char *buffer,
30  int size);
31 
32 inline unsigned long vme_read_d32(struct vme_handle *handle,
33  unsigned long vme_addr)
34 {
35  volatile unsigned long *p = (volatile unsigned long *)
36  (handle->base + (vme_addr - handle->vme_base));
37  return *p;
38 }
39 
40 inline unsigned short vme_read_d16(struct vme_handle *handle,
41  unsigned long vme_addr)
42 {
43  volatile unsigned short *p = (volatile unsigned short *)
44  (handle->base + (vme_addr - handle->vme_base));
45  return *p;
46 }
47 
48 inline unsigned char vme_read_d8(struct vme_handle *handle,
49  unsigned long vme_addr)
50 {
51  volatile unsigned char *p = (volatile unsigned char *)
52  (handle->base + (vme_addr - handle->vme_base));
53  return *p;
54 }
55 
56 inline void vme_write_d32(struct vme_handle *handle,
57  unsigned long vme_addr,
58  unsigned long value)
59 {
60  volatile unsigned long *p = (volatile unsigned long *)
61  (handle->base + (vme_addr - handle->vme_base));
62  *p = value;
63 }
64 
65 inline void vme_write_d16(struct vme_handle *handle,
66  unsigned long vme_addr,
67  unsigned short value)
68 {
69  volatile unsigned short *p = (volatile unsigned short *)
70  (handle->base + (vme_addr - handle->vme_base));
71  *p = value;
72 }
73 
74 inline void vme_write_d8(struct vme_handle *handle,
75  unsigned long vme_addr,
76  unsigned char value)
77 {
78  volatile unsigned char *p = (volatile unsigned char *)
79  (handle->base + (vme_addr - handle->vme_base));
80  *p = value;
81 }
82 
83 inline unsigned long vme_read_d32_checked(struct vme_handle *handle,
84  unsigned long vme_addr,
85  int *status = NULL)
86 {
87  unsigned long result;
88 
89  int status1 = vme_dma_read(handle, vme_addr, (unsigned char *) &result,
90  sizeof(unsigned long));
91 
92  if(status != NULL) {
93  if(status1 == sizeof(unsigned long)) {
94  *status = SUCCESS;
95  } else {
96  *status = -1;
97  }
98  }
99 
100  return result;
101 }
102 
103 inline unsigned short vme_read_d16_checked(struct vme_handle *handle,
104  unsigned long vme_addr,
105  int *status = NULL)
106 {
107  unsigned short result;
108 
109  int status1 = vme_dma_read(handle, vme_addr, (unsigned char *) &result,
110  sizeof(unsigned short));
111 
112  if(status != NULL) {
113  if(status1 == sizeof(unsigned short)) {
114  *status = SUCCESS;
115  } else {
116  *status = -1;
117  }
118  }
119 
120  return result;
121 }
122 
123 inline unsigned char vme_read_d8_checked(struct vme_handle *handle,
124  unsigned long vme_addr,
125  int *status = NULL)
126 {
127  unsigned short result;
128 
129  int status1 = vme_dma_read(handle, vme_addr, (unsigned char *) &result,
130  sizeof(unsigned char));
131 
132  if(status != NULL) {
133  if(status1 == sizeof(unsigned char)) {
134  *status = SUCCESS;
135  } else {
136  *status = -1;
137  }
138  }
139 
140  return result;
141 }
142 
144  unsigned long vme_addr,
145  unsigned long value)
146 
147 {
148  int status = vme_dma_write(handle, vme_addr, (unsigned char *) &value,
149  sizeof(unsigned long));
150 
151  if(status == sizeof(unsigned long)) {
152  return SUCCESS;
153  } else {
154  return -1;
155  }
156 }
157 
159  unsigned long vme_addr,
160  unsigned short value)
161 {
162  int status = vme_dma_write(handle, vme_addr, (unsigned char *) &value,
163  sizeof(unsigned short));
164 
165  if(status == sizeof(unsigned short)) {
166  return SUCCESS;
167  } else {
168  return -1;
169  }
170 
171 }
172 
174  unsigned long vme_addr,
175  unsigned char value)
176 {
177  int status = vme_dma_write(handle, vme_addr, (unsigned char *) &value,
178  sizeof(unsigned char));
179 
180  if(status == sizeof(unsigned char)) {
181  return SUCCESS;
182  } else {
183  return -1;
184  }
185 }
186