summaryrefslogtreecommitdiffstats
path: root/pcilib/memcpy.h
blob: 99317bf63956dd40998ed84e0cd451ba1065fccf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#ifndef _PCILIB_MEMCPY_H
#define _PCILIB_MEMCPY_H

#include <stdio.h>
#include <stdint.h>


#ifdef __cplusplus
extern "C" {
#endif

/**
 * The collection of slow memcpy functions to move the data between BAR and system memory. 
 *
 * The hardware may restrict access width or expose different behavior depending on the 
 * access width. These functions access memory using the specified word width only. 
 * 8-, 16-, 32-, and 64-bit wide access is supported.
 *
 * @param[out] dst 	- the destination memory region
 * @param[in] src 	- the source memory region
 * @param[in] access	- the size of word (a single memory access) in bytes
 * @param[in] n 	- the number of words to copy (\p n * \p access bytes are copied).
 * @return 		- `dst` or NULL on error
 */
void *pcilib_memcpy(void * dst, void const * src, uint8_t access, size_t n);

/**
 * The collection of slow memcpy functions to move the data between BAR and system memory. 
 *
 * The hardware may restrict access width or expose different behavior depending on the 
 * access width. This function only perform 8-bit memory accesses.
 *
 * @param[out] dst 	- the destination memory region
 * @param[in] src 	- the source memory region
 * @param[in] len	- the number of bytes to copy
 * @return 		- `dst` or NULL on error
 */
void *pcilib_memcpy8(void * dst, void const * src, size_t len);

/**
 * The collection of slow memcpy functions to move the data between BAR and system memory. 
 *
 * The hardware may restrict access width or expose different behavior depending on the 
 * access width. This function only perform 32-bit memory accesses.
 *
 * @param[out] dst 	- the destination memory region
 * @param[in] src 	- the source memory region
 * @param[in] len	- the number of bytes to copy
 * @return 		- `dst` or NULL on error
 */
void *pcilib_memcpy32(void * dst, void const * src, size_t len);


/**
 * The collection of slow memcpy functions to move the data between BAR and system memory. 
 *
 * The hardware may restrict access width or expose different behavior depending on the 
 * access width. This function only perform 64-bit memory accesses.
 *
 * @param[out] dst 	- the destination memory region
 * @param[in] src 	- the source memory region
 * @param[in] len	- the number of bytes to copy
 * @return 		- `dst` or NULL on error
 */
void *pcilib_memcpy64(void * dst, void const * src, size_t len);

#ifdef __cplusplus
}
#endif

#endif /* _PCILIB_MEMCPY_H */