Sorting source tree a bit
[tpg/acess2.git] / KernelLand / Modules / Interfaces / 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_xfer_constraints_s   udi_xfer_constraints_t;
10 typedef void udi_buf_copy_call_t(udi_cb_t *gcb, udi_buf_t *new_dst_buf);
11 typedef void udi_buf_write_call_t(udi_cb_t *gcb, udi_buf_t *new_dst_buf);
12
13 /**
14  * \brief Describes a buffer
15  * \note Semi-Opaque
16  */
17 struct udi_buf_s
18 {
19         udi_size_t      buf_size;
20         Uint8   Data[]; //!< ENVIRONMENT ONLY
21 };
22
23 /**
24  * \brief 
25  */
26 struct udi_xfer_constraints_s
27 {
28         udi_ubit32_t    udi_xfer_max;
29         udi_ubit32_t    udi_xfer_typical;
30         udi_ubit32_t    udi_xfer_granularity;
31         udi_boolean_t   udi_xfer_one_piece;
32         udi_boolean_t   udi_xfer_exact_size;
33         udi_boolean_t   udi_xfer_no_reorder;
34 };
35
36 // --- MACROS ---
37 /**
38  * \brief Allocates a buffer
39  */
40 #define UDI_BUF_ALLOC(callback, gcb, init_data, size, path_handle) \
41         udi_buf_write(callback, gcb, init_data, size, NULL, 0, 0, path_handle)
42
43 /**
44  * \brief Inserts data into a buffer
45  */
46 #define UDI_BUF_INSERT(callback, gcb, new_data, size, dst_buf, dst_off) \
47         udi_buf_write(callback, gcb, new_data, size, dst_buf, dst_off, 0, UDI_NULL_BUF_PATH)
48
49 /**
50  * \brief Removes data from a buffer (data afterwards will be moved forewards)
51  */
52 #define UDI_BUF_DELETE(callback, gcb, size, dst_buf, dst_off) \
53         udi_buf_write(callback, gcb, NULL, 0, dst_buf, dst_off, size, UDI_NULL_BUF_PATH)
54
55 /**
56  * \brief Duplicates \a src_buf
57  */
58 #define UDI_BUF_DUP(callback, gcb, src_buf, path_handle) \
59         udi_buf_copy(callback, gcb, src_buf, 0, (src_buf)->buf_size, NULL, 0, 0, path_handle)
60
61
62 /**
63  * \brief Copies data from one buffer to another
64  */
65 extern void udi_buf_copy(
66         udi_buf_copy_call_t *callback,
67         udi_cb_t        *gcb,
68         udi_buf_t       *src_buf,
69         udi_size_t      src_off,
70         udi_size_t      src_len,
71         udi_buf_t       *dst_buf,
72         udi_size_t      dst_off,
73         udi_size_t      dst_len,
74         udi_buf_path_t path_handle );
75
76 /**
77  * \brief Copies data from driver space to a buffer
78  */
79 extern void udi_buf_write(
80         udi_buf_write_call_t *callback,
81         udi_cb_t        *gcb,
82         const void      *src_mem,
83         udi_size_t      src_len,
84         udi_buf_t       *dst_buf,
85         udi_size_t      dst_off,
86         udi_size_t      dst_len,
87         udi_buf_path_t path_handle
88         );
89
90 /**
91  * \brief Reads data from a buffer into driver space
92  */
93 extern void udi_buf_read(
94         udi_buf_t       *src_buf,
95         udi_size_t      src_off,
96         udi_size_t      src_len,
97         void    *dst_mem );
98
99 /**
100  * \brief Frees a buffer
101  */
102 extern void udi_buf_free(udi_buf_t *buf);
103
104
105 #endif

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