rogue
Loading...
Searching...
No Matches
DmaDriver.h
Go to the documentation of this file.
1
22#ifndef __DMA_DRIVER_H__
23#define __DMA_DRIVER_H__
24
25#ifdef DMA_IN_KERNEL
26 #include <linux/types.h>
27#else
28 #include <stdint.h>
29
30 #include <string>
31#endif
32
33/* API Version */
34#define DMA_VERSION 0x06
35
36/* Error values */
37#define DMA_ERR_FIFO 0x01
38#define DMA_ERR_LEN 0x02
39#define DMA_ERR_MAX 0x04
40#define DMA_ERR_BUS 0x08
41
42/* Commands */
43#define DMA_Get_Buff_Count 0x1001
44#define DMA_Get_Buff_Size 0x1002
45#define DMA_Set_Debug 0x1003
46#define DMA_Set_Mask 0x1004
47#define DMA_Ret_Index 0x1005
48#define DMA_Get_Index 0x1006
49#define DMA_Read_Ready 0x1007
50#define DMA_Set_MaskBytes 0x1008
51#define DMA_Get_Version 0x1009
52#define DMA_Write_Register 0x100A
53#define DMA_Read_Register 0x100B
54#define DMA_Get_RxBuff_Count 0x100C
55#define DMA_Get_TxBuff_Count 0x100D
56#define DMA_Get_TxBuffinUser_Count 0x100F
57#define DMA_Get_TxBuffinHW_Count 0x1010
58#define DMA_Get_TxBuffinPreHWQ_Count 0x1011
59#define DMA_Get_TxBuffinSWQ_Count 0x1012
60#define DMA_Get_TxBuffMiss_Count 0x1013
61#define DMA_Get_RxBuffinUser_Count 0x1014
62#define DMA_Get_RxBuffinHW_Count 0x1015
63#define DMA_Get_RxBuffinPreHWQ_Count 0x1016
64#define DMA_Get_RxBuffinSWQ_Count 0x1017
65#define DMA_Get_RxBuffMiss_Count 0x1018
66#define DMA_Get_GITV 0x1019
67
68/* Mask size */
69#define DMA_MASK_SIZE 512
70
88 uint64_t data;
89 uint32_t dest;
90 uint32_t flags;
91 uint32_t index;
92 uint32_t size;
93 uint32_t is32;
94 uint32_t pad;
95};
96
115 uint64_t data;
116 uint32_t dest;
117 uint32_t flags;
118 uint32_t index;
119 uint32_t error;
120 uint32_t size;
121 uint32_t is32;
122 int32_t ret;
123};
124
136 uint64_t address;
137 uint32_t data;
138};
139
140// Conditional inclusion for non-kernel environments
141#ifndef DMA_IN_KERNEL
142 #include <signal.h>
143 #include <stdio.h>
144 #include <stdlib.h>
145 #include <string.h>
146 #include <sys/fcntl.h>
147 #include <sys/ioctl.h>
148 #include <sys/mman.h>
149 #include <sys/signal.h>
150 #include <sys/socket.h>
151 #include <unistd.h>
152
169static inline ssize_t dmaWrite(int32_t fd, const void* buf, size_t size, uint32_t flags, uint32_t dest) {
170 struct DmaWriteData w;
171
172 memset(&w, 0, sizeof(struct DmaWriteData));
173 w.dest = dest;
174 w.flags = flags;
175 w.size = size;
176 w.is32 = (sizeof(void*) == 4);
177 w.data = (uint64_t)buf;//NOLINT
178
179 return (write(fd, &w, sizeof(struct DmaWriteData)));
180}
181
197static inline ssize_t dmaWriteIndex(int32_t fd, uint32_t index, size_t size, uint32_t flags, uint32_t dest) {
198 struct DmaWriteData w;
199
200 memset(&w, 0, sizeof(struct DmaWriteData));
201 w.dest = dest;
202 w.flags = flags;
203 w.size = size;
204 w.is32 = (sizeof(void*) == 4);
205 w.index = index;
206
207 return (write(fd, &w, sizeof(struct DmaWriteData)));
208}
209
229static inline ssize_t dmaWriteVector(int32_t fd,
230 struct iovec* iov,
231 size_t iovlen,
232 uint32_t begFlags,
233 uint32_t midFlags,
234 uint32_t endFlags,
235 uint32_t dest) {
236 uint32_t x;
237 ssize_t ret;
238 ssize_t res;
239 struct DmaWriteData w;
240
241 ret = 0;
242
243 for (x = 0; x < iovlen; x++) {
244 memset(&w, 0, sizeof(struct DmaWriteData));
245 w.dest = dest;
246 w.flags = (x == 0) ? begFlags : ((x == (iovlen - 1)) ? endFlags : midFlags);
247 w.size = iov[x].iov_len;
248 w.is32 = (sizeof(void*) == 4);
249 w.data = (uint64_t)iov[x].iov_base;//NOLINT
250
251 do {
252 res = write(fd, &w, sizeof(struct DmaWriteData));
253
254 if (res < 0)
255 return (res);
256 else if (res == 0)
257 usleep(10);
258 else
259 ret += res;
260 } while (res == 0);
261 }
262 return (ret);
263}
264
281static inline ssize_t dmaWriteIndexVector(int32_t fd,
282 struct iovec* iov,
283 size_t iovlen,
284 uint32_t begFlags,
285 uint32_t midFlags,
286 uint32_t endFlags,
287 uint32_t dest) {
288 uint32_t x;
289 ssize_t ret;
290 ssize_t res;
291 struct DmaWriteData w;
292
293 ret = 0;
294
295 for (x = 0; x < iovlen; x++) {
296 memset(&w, 0, sizeof(struct DmaWriteData));
297 w.dest = dest;
298 w.flags = (x == 0) ? begFlags : ((x == (iovlen - 1)) ? endFlags : midFlags);
299 w.size = iov[x].iov_len;
300 w.is32 = (sizeof(void*) == 4);
301 w.index = (uint32_t)(((uint64_t)iov[x].iov_base) & 0xFFFFFFFF);//NOLINT
302
303 do {
304 res = write(fd, &w, sizeof(struct DmaWriteData));
305
306 if (res < 0)
307 return (res);
308 else if (res == 0)
309 usleep(10);
310 else
311 ret += res;
312 } while (res == 0);
313 }
314 return (ret);
315}
316
331static inline ssize_t dmaRead(int32_t fd, void* buf, size_t maxSize, uint32_t* flags, uint32_t* error, uint32_t* dest) {
332 struct DmaReadData r;
333 ssize_t ret;
334
335 memset(&r, 0, sizeof(struct DmaReadData));
336 r.size = maxSize;
337 r.is32 = (sizeof(void*) == 4);
338 r.data = (uint64_t)buf;//NOLINT
339
340 ret = read(fd, &r, sizeof(struct DmaReadData));
341
342 if (ret <= 0) return (ret);
343
344 if (dest != NULL) *dest = r.dest;
345 if (flags != NULL) *flags = r.flags;
346 if (error != NULL) *error = r.error;
347
348 return (r.ret);
349}
350
365static inline ssize_t dmaReadIndex(int32_t fd, uint32_t* index, uint32_t* flags, uint32_t* error, uint32_t* dest) {
366 struct DmaReadData r;
367 ssize_t ret;
368
369 memset(&r, 0, sizeof(struct DmaReadData));
370
371 ret = read(fd, &r, sizeof(struct DmaReadData));
372
373 if (ret <= 0) return (ret);
374
375 if (dest != NULL) *dest = r.dest;
376 if (flags != NULL) *flags = r.flags;
377 if (error != NULL) *error = r.error;
378
379 *index = r.index;
380 return (r.ret);
381}
382
400static inline ssize_t dmaReadBulkIndex(int32_t fd,
401 uint32_t count,
402 int32_t* ret,
403 uint32_t* index,
404 uint32_t* flags,
405 uint32_t* error,
406 uint32_t* dest) {
407 struct DmaReadData r[count];
408 ssize_t res;
409 ssize_t x;
410
411 memset(r, 0, count * sizeof(struct DmaReadData));
412
413 res = read(fd, r, count * sizeof(struct DmaReadData));
414
415 for (x = 0; x < res; ++x) {
416 if (dest != NULL) dest[x] = r[x].dest;
417 if (flags != NULL) flags[x] = r[x].flags;
418 if (error != NULL) error[x] = r[x].error;
419
420 index[x] = r[x].index;
421 ret[x] = r[x].ret;
422 }
423 return (res);
424}
425
437static inline ssize_t dmaRetIndex(int32_t fd, uint32_t index) {
438 uint32_t cmd = DMA_Ret_Index | 0x10000;
439
440 return (ioctl(fd, cmd, &index));
441}
442
455static inline ssize_t dmaRetIndexes(int32_t fd, uint32_t count, uint32_t* indexes) {
456 uint32_t cmd = DMA_Ret_Index | ((count << 16) & 0xFFFF0000);
457
458 return (ioctl(fd, cmd, indexes));
459}
460
470static inline int32_t dmaGetIndex(int32_t fd) {
471 return (ioctl(fd, DMA_Get_Index, 0));
472}
473
483static inline ssize_t dmaReadReady(int32_t fd) {
484 return (ioctl(fd, DMA_Read_Ready, 0));
485}
486
496static inline ssize_t dmaGetRxBuffCount(int32_t fd) {
497 return (ioctl(fd, DMA_Get_RxBuff_Count, 0));
498}
499
509static inline ssize_t dmaGetRxBuffinUserCount(int32_t fd) {
510 return (ioctl(fd, DMA_Get_RxBuffinUser_Count, 0));
511}
512
522static inline ssize_t dmaGetRxBuffinHwCount(int32_t fd) {
523 return (ioctl(fd, DMA_Get_RxBuffinHW_Count, 0));
524}
525
535static inline ssize_t dmaGetRxBuffinPreHwQCount(int32_t fd) {
536 return (ioctl(fd, DMA_Get_RxBuffinPreHWQ_Count, 0));
537}
538
548static inline ssize_t dmaGetRxBuffinSwQCount(int32_t fd) {
549 return (ioctl(fd, DMA_Get_RxBuffinSWQ_Count, 0));
550}
551
561static inline ssize_t dmaGetRxBuffMissCount(int32_t fd) {
562 return (ioctl(fd, DMA_Get_RxBuffMiss_Count, 0));
563}
564
574static inline ssize_t dmaGetTxBuffCount(int32_t fd) {
575 return (ioctl(fd, DMA_Get_TxBuff_Count, 0));
576}
577
587static inline ssize_t dmaGetTxBuffinUserCount(int32_t fd) {
588 return (ioctl(fd, DMA_Get_TxBuffinUser_Count, 0));
589}
590
600static inline ssize_t dmaGetTxBuffinHwCount(int32_t fd) {
601 return (ioctl(fd, DMA_Get_TxBuffinHW_Count, 0));
602}
603
613static inline ssize_t dmaGetTxBuffinPreHwQCount(int32_t fd) {
614 return (ioctl(fd, DMA_Get_TxBuffinPreHWQ_Count, 0));
615}
616
626static inline ssize_t dmaGetTxBuffinSwQCount(int32_t fd) {
627 return (ioctl(fd, DMA_Get_TxBuffinSWQ_Count, 0));
628}
629
639static inline ssize_t dmaGetTxBuffMissCount(int32_t fd) {
640 return (ioctl(fd, DMA_Get_TxBuffMiss_Count, 0));
641}
642
652static inline ssize_t dmaGetBuffSize(int32_t fd) {
653 return (ioctl(fd, DMA_Get_Buff_Size, 0));
654}
655
665static inline ssize_t dmaGetBuffCount(int32_t fd) {
666 return (ioctl(fd, DMA_Get_Buff_Count, 0));
667}
668
678static inline std::string dmaGetGitVersion(int32_t fd) {
679 char gitv[32] = {0}; // Initialize with zeros to ensure null-termination
680 if (ioctl(fd, DMA_Get_GITV, gitv) < 0) {
681 return "";
682 }
683 gitv[32 - 1] = '\0'; // Ensure null-termination
684 return std::string(gitv);
685}
686
698static inline void** dmaMapDma(int32_t fd, uint32_t* count, uint32_t* size) {
699 void* temp;
700 void** ret;
701 uint32_t bCount;
702 uint32_t gCount;
703 uint32_t bSize;
704 off_t offset;
705
706 bSize = ioctl(fd, DMA_Get_Buff_Size, 0);
707 bCount = ioctl(fd, DMA_Get_Buff_Count, 0);
708
709 if (count != NULL) *count = bCount;
710 if (size != NULL) *size = bSize;
711
712 if ((ret = reinterpret_cast<void**>(calloc(sizeof(void*), bCount))) == 0) return (NULL);
713
714 // Attempt to map
715 gCount = 0;
716 while (gCount < bCount) {
717 offset = (off_t)bSize * (off_t)gCount;
718
719 if ((temp = mmap(0, bSize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset)) == MAP_FAILED) break;
720 ret[gCount++] = temp;
721 }
722
723 // Map failed
724 if (gCount != bCount) {
725 while (gCount != 0) munmap(ret[--gCount], bSize);
726 free(ret);
727 ret = NULL;
728 }
729 return (ret);
730}
731
742static inline ssize_t dmaUnMapDma(int32_t fd, void** buffer) {
743 uint32_t bCount;
744 uint32_t bSize;
745 uint32_t x;
746
747 bCount = ioctl(fd, DMA_Get_Buff_Count, 0);
748 bSize = ioctl(fd, DMA_Get_Buff_Size, 0);
749
750 for (x = 0; x < bCount; x++) munmap(buffer[x], bSize);
751
752 free(buffer);
753 return (0);
754}
755
767static inline ssize_t dmaSetDebug(int32_t fd, uint32_t level) {
768 return (ioctl(fd, DMA_Set_Debug, level));
769}
770
782static inline void dmaAssignHandler(int32_t fd, void (*handler)(int32_t)) {
783 struct sigaction act;
784 int32_t oflags;
785
786 act.sa_handler = handler;
787 sigemptyset(&act.sa_mask);
788 act.sa_flags = 0;
789
790 sigaction(SIGIO, &act, NULL);
791 fcntl(fd, F_SETOWN, getpid());
792 oflags = fcntl(fd, F_GETFL);
793 fcntl(fd, F_SETFL, oflags | FASYNC);
794}
795
806static inline ssize_t dmaSetMask(int32_t fd, uint32_t mask) {
807 return (ioctl(fd, DMA_Set_Mask, mask));
808}
809
818static inline void dmaInitMaskBytes(uint8_t* mask) {
819 memset(mask, 0, DMA_MASK_SIZE);
820}
821
832static inline void dmaAddMaskBytes(uint8_t* mask, uint32_t dest) {
833 uint32_t byte;
834 uint32_t bit;
835
836 if (dest < 8 * (DMA_MASK_SIZE)) {
837 byte = dest / 8;
838 bit = dest % 8;
839 mask[byte] += (1 << bit);
840 }
841}
842
853static inline ssize_t dmaSetMaskBytes(int32_t fd, uint8_t* mask) {
854 return (ioctl(fd, DMA_Set_MaskBytes, mask));
855}
856
866static inline ssize_t dmaCheckVersion(int32_t fd) {
867 int32_t version;
868 version = ioctl(fd, DMA_Get_Version);
869 return ((version == DMA_VERSION) ? 0 : -1);
870}
871
881static inline ssize_t dmaGetApiVersion(int32_t fd) {
882 return (ioctl(fd, DMA_Get_Version, 0));
883}
884
896static inline ssize_t dmaWriteRegister(int32_t fd, uint64_t address, uint32_t data) {
897 struct DmaRegisterData reg;
898
899 reg.address = address;
900 reg.data = data;
901 return (ioctl(fd, DMA_Write_Register, &reg));
902}
903
916static inline ssize_t dmaReadRegister(int32_t fd, uint64_t address, uint32_t* data) {
917 struct DmaRegisterData reg;
918 ssize_t res;
919
920 // Initialize register data structure
921 reg.address = address;
922 reg.data = 0;
923
924 // Perform ioctl to read the register
925 res = ioctl(fd, DMA_Read_Register, &reg);
926
927 // If data pointer is valid, update it with the read value
928 if (data != NULL) *data = reg.data;
929
930 return res;
931}
932
946static inline void* dmaMapRegister(int32_t fd, off_t offset, uint32_t size) {
947 uint32_t bSize;
948 uint32_t bCount;
949 off_t intOffset;
950
951 // Obtain buffer size and count from the DMA device
952 bSize = ioctl(fd, DMA_Get_Buff_Size, 0);
953 bCount = ioctl(fd, DMA_Get_Buff_Count, 0);
954
955 // Calculate internal offset
956 intOffset = ((off_t)bSize * bCount) + offset;
957
958 // Attempt to map the memory region into user space
959 return mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, intOffset);
960}
961
974static inline ssize_t dmaUnMapRegister(int32_t fd, void* ptr, uint32_t size) {
975 // Unmap the memory region
976 munmap(ptr, size);
977 return 0;
978}
979
980#endif // !DMA_IN_KERNEL
981#endif // __DMA_DRIVER_H__
static ssize_t dmaSetMask(int32_t fd, uint32_t mask)
Set DMA mask.
Definition DmaDriver.h:806
static std::string dmaGetGitVersion(int32_t fd)
Get the DMA Driver's Git Version.
Definition DmaDriver.h:678
#define DMA_Set_Debug
Definition DmaDriver.h:45
#define DMA_Get_Index
Definition DmaDriver.h:48
#define DMA_Get_Buff_Size
Definition DmaDriver.h:44
#define DMA_Get_GITV
Definition DmaDriver.h:66
static ssize_t dmaGetTxBuffinPreHwQCount(int32_t fd)
Get the transmit buffer count in pre-hardware queue.
Definition DmaDriver.h:613
static ssize_t dmaGetTxBuffCount(int32_t fd)
Get the transmit buffer count.
Definition DmaDriver.h:574
static ssize_t dmaGetTxBuffMissCount(int32_t fd)
Get the transmit buffer missing count.
Definition DmaDriver.h:639
static ssize_t dmaGetRxBuffinHwCount(int32_t fd)
Get the receive buffer count in hardware.
Definition DmaDriver.h:522
#define DMA_Get_Buff_Count
Definition DmaDriver.h:43
#define DMA_Write_Register
Definition DmaDriver.h:52
#define DMA_Get_RxBuff_Count
Definition DmaDriver.h:54
static ssize_t dmaGetApiVersion(int32_t fd)
Get API version of the DMA driver.
Definition DmaDriver.h:881
static ssize_t dmaWriteIndex(int32_t fd, uint32_t index, size_t size, uint32_t flags, uint32_t dest)
Writes data to a DMA channel using an index.
Definition DmaDriver.h:197
#define DMA_Get_TxBuffinUser_Count
Definition DmaDriver.h:56
static ssize_t dmaReadRegister(int32_t fd, uint64_t address, uint32_t *data)
Read a value from a DMA register.
Definition DmaDriver.h:916
#define DMA_Get_RxBuffinPreHWQ_Count
Definition DmaDriver.h:63
#define DMA_Get_TxBuffinHW_Count
Definition DmaDriver.h:57
static ssize_t dmaWriteRegister(int32_t fd, uint64_t address, uint32_t data)
Write to a DMA register.
Definition DmaDriver.h:896
#define DMA_Get_TxBuff_Count
Definition DmaDriver.h:55
static void dmaInitMaskBytes(uint8_t *mask)
Initialize DMA mask byte array.
Definition DmaDriver.h:818
#define DMA_Set_Mask
Definition DmaDriver.h:46
#define DMA_Ret_Index
Definition DmaDriver.h:47
#define DMA_Get_RxBuffinHW_Count
Definition DmaDriver.h:62
static void dmaAddMaskBytes(uint8_t *mask, uint32_t dest)
Add a destination to the DMA mask byte array.
Definition DmaDriver.h:832
#define DMA_Get_TxBuffMiss_Count
Definition DmaDriver.h:60
#define DMA_Set_MaskBytes
Definition DmaDriver.h:50
static ssize_t dmaReadBulkIndex(int32_t fd, uint32_t count, int32_t *ret, uint32_t *index, uint32_t *flags, uint32_t *error, uint32_t *dest)
Receive frame and access memory-mapped buffer.
Definition DmaDriver.h:400
static ssize_t dmaUnMapRegister(int32_t fd, void *ptr, uint32_t size)
Unmap a DMA register space from user space.
Definition DmaDriver.h:974
#define DMA_MASK_SIZE
Definition DmaDriver.h:69
static ssize_t dmaSetMaskBytes(int32_t fd, uint8_t *mask)
Set mask byte array to the driver.
Definition DmaDriver.h:853
static ssize_t dmaGetRxBuffinUserCount(int32_t fd)
Get the receive buffer count in user.
Definition DmaDriver.h:509
#define DMA_Get_Version
Definition DmaDriver.h:51
static void * dmaMapRegister(int32_t fd, off_t offset, uint32_t size)
Map a DMA register space to user space.
Definition DmaDriver.h:946
static ssize_t dmaGetTxBuffinHwCount(int32_t fd)
Get the transmit buffer count in hardware.
Definition DmaDriver.h:600
static ssize_t dmaGetBuffSize(int32_t fd)
Get the buffer size.
Definition DmaDriver.h:652
static ssize_t dmaGetRxBuffinSwQCount(int32_t fd)
Get the receive buffer count in software queue.
Definition DmaDriver.h:548
static ssize_t dmaGetRxBuffCount(int32_t fd)
Get the receive buffer count.
Definition DmaDriver.h:496
static int32_t dmaGetIndex(int32_t fd)
Get the current write buffer index.
Definition DmaDriver.h:470
static ssize_t dmaReadIndex(int32_t fd, uint32_t *index, uint32_t *flags, uint32_t *error, uint32_t *dest)
Receive Frame, access memory mapped buffer.
Definition DmaDriver.h:365
static ssize_t dmaGetRxBuffinPreHwQCount(int32_t fd)
Get the receive buffer count in pre-hardware queue.
Definition DmaDriver.h:535
#define DMA_Get_RxBuffinUser_Count
Definition DmaDriver.h:61
static ssize_t dmaRetIndex(int32_t fd, uint32_t index)
Post an index back to the DMA.
Definition DmaDriver.h:437
static ssize_t dmaWriteVector(int32_t fd, struct iovec *iov, size_t iovlen, uint32_t begFlags, uint32_t midFlags, uint32_t endFlags, uint32_t dest)
Writes an array of data frames to a DMA channel.
Definition DmaDriver.h:229
#define DMA_Get_TxBuffinPreHWQ_Count
Definition DmaDriver.h:58
static ssize_t dmaSetDebug(int32_t fd, uint32_t level)
Set debugging level for DMA operations.
Definition DmaDriver.h:767
static void dmaAssignHandler(int32_t fd, void(*handler)(int32_t))
Assign a signal handler for asynchronous DMA operations.
Definition DmaDriver.h:782
static ssize_t dmaWriteIndexVector(int32_t fd, struct iovec *iov, size_t iovlen, uint32_t begFlags, uint32_t midFlags, uint32_t endFlags, uint32_t dest)
Write Frame, memory mapped from iovector.
Definition DmaDriver.h:281
#define DMA_VERSION
Definition DmaDriver.h:34
#define DMA_Get_RxBuffinSWQ_Count
Definition DmaDriver.h:64
static ssize_t dmaGetTxBuffinSwQCount(int32_t fd)
Get the transmit buffer count in software queue.
Definition DmaDriver.h:626
static ssize_t dmaReadReady(int32_t fd)
Check if read is ready.
Definition DmaDriver.h:483
static ssize_t dmaGetBuffCount(int32_t fd)
Get the buffer count.
Definition DmaDriver.h:665
static ssize_t dmaCheckVersion(int32_t fd)
Check API version of the DMA driver.
Definition DmaDriver.h:866
static void ** dmaMapDma(int32_t fd, uint32_t *count, uint32_t *size)
Map user space to DMA buffers.
Definition DmaDriver.h:698
static ssize_t dmaUnMapDma(int32_t fd, void **buffer)
Unmap user space from DMA buffers.
Definition DmaDriver.h:742
#define DMA_Get_TxBuffinSWQ_Count
Definition DmaDriver.h:59
#define DMA_Get_RxBuffMiss_Count
Definition DmaDriver.h:65
static ssize_t dmaRead(int32_t fd, void *buf, size_t maxSize, uint32_t *flags, uint32_t *error, uint32_t *dest)
Receive Frame.
Definition DmaDriver.h:331
static ssize_t dmaGetTxBuffinUserCount(int32_t fd)
Get the transmit buffer count in user.
Definition DmaDriver.h:587
#define DMA_Read_Ready
Definition DmaDriver.h:49
static ssize_t dmaWrite(int32_t fd, const void *buf, size_t size, uint32_t flags, uint32_t dest)
Writes data to a DMA channel.
Definition DmaDriver.h:169
static ssize_t dmaGetRxBuffMissCount(int32_t fd)
Get the receive buffer missing count.
Definition DmaDriver.h:561
#define DMA_Read_Register
Definition DmaDriver.h:53
static ssize_t dmaRetIndexes(int32_t fd, uint32_t count, uint32_t *indexes)
Post multiple indices back to the DMA.
Definition DmaDriver.h:455
Structure representing a DMA read operation.
Definition DmaDriver.h:114
uint32_t error
Definition DmaDriver.h:119
uint32_t index
Definition DmaDriver.h:118
uint32_t flags
Definition DmaDriver.h:117
uint32_t size
Definition DmaDriver.h:120
uint32_t is32
Definition DmaDriver.h:121
uint64_t data
Definition DmaDriver.h:115
int32_t ret
Definition DmaDriver.h:122
uint32_t dest
Definition DmaDriver.h:116
Register data structure.
Definition DmaDriver.h:135
uint64_t address
Definition DmaDriver.h:136
uint32_t data
Definition DmaDriver.h:137
Structure representing a DMA write operation.
Definition DmaDriver.h:87
uint32_t size
Definition DmaDriver.h:92
uint32_t pad
Definition DmaDriver.h:94
uint32_t is32
Definition DmaDriver.h:93
uint64_t data
Definition DmaDriver.h:88
uint32_t index
Definition DmaDriver.h:91
uint32_t flags
Definition DmaDriver.h:90
uint32_t dest
Definition DmaDriver.h:89