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