Merge branch 'core-objtool-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-block.git] / drivers / staging / rtl8188eu / os_dep / osdep_service.c
CommitLineData
71e9bd3f 1// SPDX-License-Identifier: GPL-2.0
a2c60d42
LF
2/******************************************************************************
3 *
4 * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
5 *
a2c60d42 6 ******************************************************************************/
a2c60d42
LF
7#define _OSDEP_SERVICE_C_
8
9#include <osdep_service.h>
0a95a7f4 10#include <osdep_intf.h>
a2c60d42
LF
11#include <drv_types.h>
12#include <recv_osdep.h>
13#include <linux/vmalloc.h>
14#include <rtw_ioctl_set.h>
15
a2c60d42
LF
16u8 *_rtw_malloc(u32 sz)
17{
92098c1f 18 return kmalloc(sz, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
a2c60d42
LF
19}
20
1050394c 21void _rtw_init_queue(struct __queue *pqueue)
a2c60d42 22{
1050394c
PYK
23 INIT_LIST_HEAD(&pqueue->queue);
24 spin_lock_init(&pqueue->lock);
a2c60d42
LF
25}
26
f8a1a236 27struct net_device *rtw_alloc_etherdev_with_old_priv(void *old_priv)
a2c60d42 28{
36be4102 29 struct net_device *netdev;
a2c60d42
LF
30 struct rtw_netdev_priv_indicator *pnpi;
31
36be4102
MS
32 netdev = alloc_etherdev_mq(sizeof(struct rtw_netdev_priv_indicator), 4);
33 if (!netdev)
226f912a 34 return NULL;
a2c60d42 35
36be4102 36 pnpi = netdev_priv(netdev);
a2c60d42 37 pnpi->priv = old_priv;
a2c60d42 38
36be4102 39 return netdev;
a2c60d42
LF
40}
41
a2c60d42
LF
42void rtw_free_netdev(struct net_device *netdev)
43{
44 struct rtw_netdev_priv_indicator *pnpi;
45
46 if (!netdev)
226f912a 47 return;
a2c60d42
LF
48
49 pnpi = netdev_priv(netdev);
50
51 if (!pnpi->priv)
226f912a 52 return;
a2c60d42 53
03bd6aea 54 vfree(pnpi->priv);
a2c60d42 55 free_netdev(netdev);
a2c60d42
LF
56}
57
a2c60d42
LF
58void rtw_buf_free(u8 **buf, u32 *buf_len)
59{
60 *buf_len = 0;
61 kfree(*buf);
62 *buf = NULL;
63}
64
65void rtw_buf_update(u8 **buf, u32 *buf_len, u8 *src, u32 src_len)
66{
9393d34e 67 u32 dup_len = 0;
a2c60d42
LF
68 u8 *ori = NULL;
69 u8 *dup = NULL;
70
71 if (!buf || !buf_len)
72 return;
73
74 if (!src || !src_len)
75 goto keep_ori;
76
77 /* duplicate src */
78 dup = rtw_malloc(src_len);
79 if (dup) {
80 dup_len = src_len;
81 memcpy(dup, src, dup_len);
82 }
83
84keep_ori:
85 ori = *buf;
a2c60d42
LF
86
87 /* replace buf with dup */
88 *buf_len = 0;
89 *buf = dup;
90 *buf_len = dup_len;
91
92 /* free ori */
93 kfree(ori);
94}