2 #include <drv_types.h>
\r
5 MODULE_LICENSE("GPL");
\r
6 MODULE_DESCRIPTION("Realtek Wireless Lan Driver");
\r
7 MODULE_AUTHOR("Realtek Semiconductor Corp.");
\r
8 MODULE_VERSION("DRIVERVERSION");
\r
10 struct sk_buff_head rtk_skb_mem_q;
\r
11 struct u8* rtk_buf_mem[NR_RECVBUFF];
\r
13 struct u8 * rtw_get_buf_premem(int index)
\r
15 printk("%s, rtk_buf_mem index : %d\n", __func__, index);
\r
16 return rtk_buf_mem[index];
\r
19 struct sk_buff *rtw_alloc_skb_premem(void)
\r
21 struct sk_buff *skb = NULL;
\r
23 skb = skb_dequeue(&rtk_skb_mem_q);
\r
25 printk("%s, rtk_skb_mem_q len : %d\n", __func__, skb_queue_len(&rtk_skb_mem_q));
\r
29 EXPORT_SYMBOL(rtw_alloc_skb_premem);
\r
31 int rtw_free_skb_premem(struct sk_buff *pskb)
\r
36 if(skb_queue_len(&rtk_skb_mem_q) >= NR_PREALLOC_RECV_SKB)
\r
39 skb_queue_tail(&rtk_skb_mem_q, pskb);
\r
41 printk("%s, rtk_skb_mem_q len : %d\n", __func__, skb_queue_len(&rtk_skb_mem_q));
\r
45 EXPORT_SYMBOL(rtw_free_skb_premem);
\r
47 static int __init rtw_mem_init(void)
\r
51 SIZE_PTR alignment=0;
\r
52 struct sk_buff *pskb=NULL;
\r
54 printk("%s\n", __func__);
\r
55 pr_info("NR_PREALLOC_RECV_SKB: %d\n", NR_PREALLOC_RECV_SKB);
\r
56 pr_info("MAX_RECVBUF_SZ: %d\n", MAX_RECVBUF_SZ);
\r
58 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
\r
59 for(i=0; i<NR_RECVBUFF; i++)
\r\r
61 rtk_buf_mem[i] = usb_buffer_alloc(dev, size, (in_interrupt() ? GFP_ATOMIC : GFP_KERNEL), dma);
\r
63 #endif //CONFIG_USE_USB_BUFFER_ALLOC_RX
\r
65 skb_queue_head_init(&rtk_skb_mem_q);
\r
67 for(i=0; i<NR_PREALLOC_RECV_SKB; i++)
\r
69 pskb = __dev_alloc_skb(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
\r
72 tmpaddr = (SIZE_PTR)pskb->data;
\r
73 alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1);
\r
74 skb_reserve(pskb, (RECVBUFF_ALIGN_SZ - alignment));
\r
76 skb_queue_tail(&rtk_skb_mem_q, pskb);
\r
80 printk("%s, alloc skb memory fail!\n", __func__);
\r
86 printk("%s, rtk_skb_mem_q len : %d\n", __func__, skb_queue_len(&rtk_skb_mem_q));
\r
92 static void __exit rtw_mem_exit(void)
\r
94 if (skb_queue_len(&rtk_skb_mem_q)) {
\r
95 printk("%s, rtk_skb_mem_q len : %d\n", __func__, skb_queue_len(&rtk_skb_mem_q));
\r
98 skb_queue_purge(&rtk_skb_mem_q);
\r
100 printk("%s\n", __func__);
\r
103 module_init(rtw_mem_init);
\r
104 module_exit(rtw_mem_exit);
\r