UDI/include - A few tweaks
[tpg/acess2.git] / UDI / include / udi / buf.h
1 /**
2  * \file udi_buf.h
3  */
4 #ifndef _UDI_BUF_H_
5 #define _UDI_BUF_H_
6
7
8 typedef struct udi_buf_s        udi_buf_t;
9 typedef struct udi_buf_tag_s    udi_buf_tag_t;
10 typedef struct udi_xfer_constraints_s   udi_xfer_constraints_t;
11 typedef void udi_buf_copy_call_t(udi_cb_t *gcb, udi_buf_t *new_dst_buf);
12 typedef void udi_buf_write_call_t(udi_cb_t *gcb, udi_buf_t *new_dst_buf);
13
14 /**
15  * \brief Describes a buffer
16  * \note Semi-Opaque
17  */
18 struct udi_buf_s
19 {
20         udi_size_t      buf_size;
21         // ... filled in udi_lib/core/buf.c
22 };
23
24 typedef udi_ubit32_t    udi_tagtype_t;
25
26 struct udi_buf_tag_s
27 {
28         udi_tagtype_t   tag_type;
29         udi_ubit32_t    tag_value;
30         udi_size_t      tag_off;
31         udi_size_t      tag_len;
32 };
33
34 /**
35  * \brief 
36  */
37 struct udi_xfer_constraints_s
38 {
39         udi_ubit32_t    udi_xfer_max;
40         udi_ubit32_t    udi_xfer_typical;
41         udi_ubit32_t    udi_xfer_granularity;
42         udi_boolean_t   udi_xfer_one_piece;
43         udi_boolean_t   udi_xfer_exact_size;
44         udi_boolean_t   udi_xfer_no_reorder;
45 };
46
47 // --- MACROS ---
48 /**
49  * \brief Allocates a buffer
50  */
51 #define UDI_BUF_ALLOC(callback, gcb, init_data, size, path_handle) \
52         udi_buf_write(callback, gcb, init_data, size, NULL, 0, 0, path_handle)
53
54 /**
55  * \brief Inserts data into a buffer
56  */
57 #define UDI_BUF_INSERT(callback, gcb, new_data, size, dst_buf, dst_off) \
58         udi_buf_write(callback, gcb, new_data, size, dst_buf, dst_off, 0, UDI_NULL_BUF_PATH)
59
60 /**
61  * \brief Removes data from a buffer (data afterwards will be moved forewards)
62  */
63 #define UDI_BUF_DELETE(callback, gcb, size, dst_buf, dst_off) \
64         udi_buf_write(callback, gcb, NULL, 0, dst_buf, dst_off, size, UDI_NULL_BUF_PATH)
65
66 /**
67  * \brief Duplicates \a src_buf
68  */
69 #define UDI_BUF_DUP(callback, gcb, src_buf, path_handle) \
70         udi_buf_copy(callback, gcb, src_buf, 0, (src_buf)->buf_size, NULL, 0, 0, path_handle)
71
72
73 /**
74  * \brief Copies data from one buffer to another
75  */
76 extern void udi_buf_copy(
77         udi_buf_copy_call_t *callback,
78         udi_cb_t        *gcb,
79         udi_buf_t       *src_buf,
80         udi_size_t      src_off,
81         udi_size_t      src_len,
82         udi_buf_t       *dst_buf,
83         udi_size_t      dst_off,
84         udi_size_t      dst_len,
85         udi_buf_path_t path_handle );
86
87 /**
88  * \brief Copies data from driver space to a buffer
89  */
90 extern void udi_buf_write(
91         udi_buf_write_call_t *callback,
92         udi_cb_t        *gcb,
93         const void      *src_mem,
94         udi_size_t      src_len,
95         udi_buf_t       *dst_buf,
96         udi_size_t      dst_off,
97         udi_size_t      dst_len,
98         udi_buf_path_t path_handle
99         );
100
101 /**
102  * \brief Reads data from a buffer into driver space
103  */
104 extern void udi_buf_read(
105         udi_buf_t       *src_buf,
106         udi_size_t      src_off,
107         udi_size_t      src_len,
108         void    *dst_mem );
109
110 /**
111  * \brief Frees a buffer
112  */
113 extern void udi_buf_free(udi_buf_t *buf);
114
115
116 #endif

UCC git Repository :: git.ucc.asn.au