6 MODULE_DESCRIPTION("Realtek Wireless Lan Driver");
7 MODULE_AUTHOR("Realtek Semiconductor Corp.");
8 MODULE_VERSION("DRIVERVERSION");
10 struct sk_buff_head rtk_skb_mem_q;
11 struct u8* rtk_buf_mem[NR_RECVBUFF];
13 struct u8 * rtw_get_buf_premem(int index)
15 printk("%s, rtk_buf_mem index : %d\n", __func__, index);
16 return rtk_buf_mem[index];
19 u16 rtw_rtkm_get_buff_size(void)
21 return MAX_RTKM_RECVBUF_SZ;
23 EXPORT_SYMBOL(rtw_rtkm_get_buff_size);
25 u8 rtw_rtkm_get_nr_recv_skb(void)
27 return MAX_RTKM_NR_PREALLOC_RECV_SKB;
29 EXPORT_SYMBOL(rtw_rtkm_get_nr_recv_skb);
31 struct sk_buff *rtw_alloc_skb_premem(u16 in_size)
33 struct sk_buff *skb = NULL;
35 if (in_size > MAX_RTKM_RECVBUF_SZ) {
36 pr_info("warning %s: driver buffer size(%d) > rtkm buffer size(%d)\n", __func__, in_size, MAX_RTKM_RECVBUF_SZ);
41 skb = skb_dequeue(&rtk_skb_mem_q);
43 printk("%s, rtk_skb_mem_q len : %d\n", __func__, skb_queue_len(&rtk_skb_mem_q));
47 EXPORT_SYMBOL(rtw_alloc_skb_premem);
49 int rtw_free_skb_premem(struct sk_buff *pskb)
54 if (skb_queue_len(&rtk_skb_mem_q) >= MAX_RTKM_NR_PREALLOC_RECV_SKB)
57 skb_queue_tail(&rtk_skb_mem_q, pskb);
59 printk("%s, rtk_skb_mem_q len : %d\n", __func__, skb_queue_len(&rtk_skb_mem_q));
63 EXPORT_SYMBOL(rtw_free_skb_premem);
65 static int __init rtw_mem_init(void)
70 struct sk_buff *pskb=NULL;
72 printk("%s\n", __func__);
73 pr_info("MAX_RTKM_NR_PREALLOC_RECV_SKB: %d\n", MAX_RTKM_NR_PREALLOC_RECV_SKB);
74 pr_info("MAX_RTKM_RECVBUF_SZ: %d\n", MAX_RTKM_RECVBUF_SZ);
76 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
77 for(i=0; i<NR_RECVBUFF; i++)
79 rtk_buf_mem[i] = usb_buffer_alloc(dev, size, (in_interrupt() ? GFP_ATOMIC : GFP_KERNEL), dma);
81 #endif //CONFIG_USE_USB_BUFFER_ALLOC_RX
83 skb_queue_head_init(&rtk_skb_mem_q);
85 for(i=0; i<MAX_RTKM_NR_PREALLOC_RECV_SKB; i++)
87 pskb = __dev_alloc_skb(MAX_RTKM_RECVBUF_SZ + RECVBUFF_ALIGN_SZ, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
90 tmpaddr = (SIZE_PTR)pskb->data;
91 alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1);
92 skb_reserve(pskb, (RECVBUFF_ALIGN_SZ - alignment));
94 skb_queue_tail(&rtk_skb_mem_q, pskb);
98 printk("%s, alloc skb memory fail!\n", __func__);
104 printk("%s, rtk_skb_mem_q len : %d\n", __func__, skb_queue_len(&rtk_skb_mem_q));
110 static void __exit rtw_mem_exit(void)
112 if (skb_queue_len(&rtk_skb_mem_q)) {
113 printk("%s, rtk_skb_mem_q len : %d\n", __func__, skb_queue_len(&rtk_skb_mem_q));
116 skb_queue_purge(&rtk_skb_mem_q);
118 printk("%s\n", __func__);
121 module_init(rtw_mem_init);
122 module_exit(rtw_mem_exit);