blob: e617b7715600bfede3b60ccd76365ba1eda4d744 (
plain)
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
|
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#define LINUX_RX_SIZE (96 * 1024)
#define LINUX_TX_SIZE (64 * 1024)
#define WILC1000_FW_SIZE (4 * 1024)
/*
* Add necessary buffer pointers
*/
void *exported_g_tx_buf;
void *exported_g_rx_buf;
void *exported_g_fw_buf;
void *get_tx_buffer(void)
{
return exported_g_tx_buf;
}
EXPORT_SYMBOL(get_tx_buffer);
void *get_rx_buffer(void)
{
return exported_g_rx_buf;
}
EXPORT_SYMBOL(get_rx_buffer);
void *get_fw_buffer(void)
{
return exported_g_fw_buf;
}
EXPORT_SYMBOL(get_fw_buffer);
static int __init wilc_module_init(void)
{
printk("wilc_module_init\n");
/*
* alloc necessary memory
*/
exported_g_tx_buf = kmalloc(LINUX_TX_SIZE, GFP_KERNEL);
if (!exported_g_tx_buf)
return -ENOMEM;
exported_g_rx_buf = kmalloc(LINUX_RX_SIZE, GFP_KERNEL);
if (!exported_g_rx_buf)
goto free_g_tx_buf;
exported_g_fw_buf = kmalloc(WILC1000_FW_SIZE, GFP_KERNEL);
if (!exported_g_fw_buf)
goto free_g_rx_buf;
return 0;
free_g_rx_buf:
kfree(exported_g_rx_buf);
exported_g_rx_buf = NULL;
free_g_tx_buf:
kfree(exported_g_tx_buf);
exported_g_tx_buf = NULL;
return -ENOMEM;
}
static void __exit wilc_module_deinit(void)
{
printk("wilc_module_deinit\n");
kfree(exported_g_tx_buf);
kfree(exported_g_rx_buf);
kfree(exported_g_fw_buf);
}
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("Tony Cho");
MODULE_DESCRIPTION("WILC1xxx Memory Manager");
pure_initcall(wilc_module_init);
module_exit(wilc_module_deinit);
|