1 #include <linux/module.h>
2 #include <linux/moduleparam.h>
3 #include <linux/init.h>
4 #include <linux/kernel.h>
5 #include <linux/slab.h>
7 #define LINUX_RX_SIZE (96 * 1024)
8 #define LINUX_TX_SIZE (64 * 1024)
9 #define WILC1000_FW_SIZE (4 * 1024)
11 #define DECLARE_WILC_BUFFER(name) \
12 void *exported_ ## name = NULL;
14 #define MALLOC_WILC_BUFFER(name, size) \
15 exported_ ## name = kmalloc(size, GFP_KERNEL); \
16 if (!exported_ ## name) { \
17 printk("fail to alloc: %s memory\n", exported_ ## name); \
21 #define FREE_WILC_BUFFER(name) \
22 kfree(exported_ ## name);
25 * Add necessary buffer pointers
27 DECLARE_WILC_BUFFER(g_tx_buf)
28 DECLARE_WILC_BUFFER(g_rx_buf)
29 DECLARE_WILC_BUFFER(g_fw_buf)
31 void *get_tx_buffer(void)
33 return exported_g_tx_buf;
35 EXPORT_SYMBOL(get_tx_buffer);
37 void *get_rx_buffer(void)
39 return exported_g_rx_buf;
41 EXPORT_SYMBOL(get_rx_buffer);
43 void *get_fw_buffer(void)
45 return exported_g_fw_buf;
47 EXPORT_SYMBOL(get_fw_buffer);
49 static int __init wilc_module_init(void)
51 printk("wilc_module_init\n");
53 * alloc necessary memory
55 MALLOC_WILC_BUFFER(g_tx_buf, LINUX_TX_SIZE)
56 MALLOC_WILC_BUFFER(g_rx_buf, LINUX_RX_SIZE)
57 MALLOC_WILC_BUFFER(g_fw_buf, WILC1000_FW_SIZE)
62 static void __exit wilc_module_deinit(void)
64 printk("wilc_module_deinit\n");
65 FREE_WILC_BUFFER(g_tx_buf)
66 FREE_WILC_BUFFER(g_rx_buf)
67 FREE_WILC_BUFFER(g_fw_buf)
72 MODULE_LICENSE("Dual BSD/GPL");
73 MODULE_AUTHOR("Tony Cho");
74 MODULE_DESCRIPTION("WILC1xxx Memory Manager");
75 pure_initcall(wilc_module_init);
76 module_exit(wilc_module_deinit);