carl9170: Update to latest upstream
[linux-libre-firmware.git] / ath9k_htc / target_firmware / magpie_fw_dev / target / inc / adf_os_mem.h
1 /*
2  * Copyright (c) 2013 Qualcomm Atheros, Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted (subject to the limitations in the
7  * disclaimer below) provided that the following conditions are met:
8  *
9  *  * Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
12  *  * Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the
15  *    distribution.
16  *
17  *  * Neither the name of Qualcomm Atheros nor the names of its
18  *    contributors may be used to endorse or promote products derived
19  *    from this software without specific prior written permission.
20  *
21  * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
22  * GRANTED BY THIS LICENSE.  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
23  * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
24  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
27  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
30  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
32  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
33  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34  */
35 /**
36  * @ingroup adf_os_public
37  * @file adf_os_mem.h
38  * This file abstracts memory operations.
39  */
40
41 #ifndef _ADF_OS_MEM_H
42 #define _ADF_OS_MEM_H
43
44 #include <adf_os_types.h>
45 #include <adf_os_mem_pvt.h>
46
47 /**
48  * @brief Allocate a memory buffer. Note this call can block.
49  *
50  * @param[in] size    buffer size
51  *
52  * @return Buffer pointer or NULL if there's not enough memory.
53  */
54 static inline void *
55 adf_os_mem_alloc(adf_os_size_t size)
56 {
57     return __adf_os_mem_alloc(size);
58 }
59
60 /**
61  * @brief Free malloc'ed buffer
62  *
63  * @param[in] buf     buffer pointer allocated by @ref adf_os_mem_alloc
64  */
65 static inline void
66 adf_os_mem_free(void *buf)
67 {
68     __adf_os_mem_free(buf);
69 }
70
71 /**
72  * @brief Move a memory buffer. Overlapping regions are not allowed.
73  *
74  * @param[in] dst     destination address
75  * @param[in] src     source address
76  * @param[in] size    buffer size
77  */
78 static inline void
79 adf_os_mem_copy(void *dst, const void *src, adf_os_size_t size)
80 {
81     __adf_os_mem_copy(dst, src, size);
82 }
83
84 /**
85  * @brief Does a non-destructive copy of memory buffer
86  *
87  * @param[in] dst     destination address
88  * @param[in] src     source address
89  * @param[in] size    buffer size
90  */
91 static inline void
92 adf_os_mem_move(void *dst, void *src, adf_os_size_t size)
93 {
94         __adf_os_mem_move(dst,src,size);
95 }
96
97
98 /**
99  * @brief Fill a memory buffer
100  *
101  * @param[in] buf   buffer to be filled
102  * @param[in] b     byte to fill
103  * @param[in] size  buffer size
104  */
105 static inline void
106 adf_os_mem_set(void *buf, a_uint8_t b, adf_os_size_t size)
107 {
108     __adf_os_mem_set(buf, b, size);
109 }
110
111
112 /**
113  * @brief Zero a memory buffer
114  *
115  * @param[in] buf   buffer to be zeroed
116  * @param[in] size  buffer size
117  */
118 static inline void
119 adf_os_mem_zero(void *buf, adf_os_size_t size)
120 {
121     __adf_os_mem_zero(buf, size);
122 }
123
124
125 /**
126  * @brief Compare two memory buffers
127  *
128  * @param[in] buf1  first buffer
129  * @param[in] buf2  second buffer
130  * @param[in] size  buffer size
131  *
132  * @retval    0     equal
133  * @retval    1     not equal
134  */
135 static inline int
136 adf_os_mem_cmp(void *buf1, void *buf2, adf_os_size_t size)
137 {
138     return __adf_os_mem_cmp(buf1, buf2, size);
139 }
140
141 #endif