1 // SPDX-License-Identifier: GPL-2.0
2 /******************************************************************************
3 *
4 * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
5 *
6 ******************************************************************************/
7 #define _OSDEP_SERVICE_C_
8
9 #include <osdep_service.h>
10 #include <osdep_intf.h>
11 #include <drv_types.h>
12 #include <recv_osdep.h>
13 #include <linux/vmalloc.h>
14 #include <rtw_ioctl_set.h>
15
_rtw_malloc(u32 sz)16 u8 *_rtw_malloc(u32 sz)
17 {
18 return kmalloc(sz, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
19 }
20
_rtw_init_queue(struct __queue * pqueue)21 void _rtw_init_queue(struct __queue *pqueue)
22 {
23 INIT_LIST_HEAD(&pqueue->queue);
24 spin_lock_init(&pqueue->lock);
25 }
26
rtw_buf_free(u8 ** buf,u32 * buf_len)27 void rtw_buf_free(u8 **buf, u32 *buf_len)
28 {
29 *buf_len = 0;
30 kfree(*buf);
31 *buf = NULL;
32 }
33
rtw_buf_update(u8 ** buf,u32 * buf_len,u8 * src,u32 src_len)34 void rtw_buf_update(u8 **buf, u32 *buf_len, u8 *src, u32 src_len)
35 {
36 u32 dup_len = 0;
37 u8 *ori = NULL;
38 u8 *dup = NULL;
39
40 if (!buf || !buf_len)
41 return;
42
43 if (!src || !src_len)
44 goto keep_ori;
45
46 /* duplicate src */
47 dup = rtw_malloc(src_len);
48 if (dup) {
49 dup_len = src_len;
50 memcpy(dup, src, dup_len);
51 }
52
53 keep_ori:
54 ori = *buf;
55
56 /* replace buf with dup */
57 *buf_len = 0;
58 *buf = dup;
59 *buf_len = dup_len;
60
61 /* free ori */
62 kfree(ori);
63 }
64