upload tizen1.0 source
[kernel/linux-2.6.36.git] / drivers / staging / otus / wrap_buf.c
1 /*
2  * Copyright (c) 2007-2008 Atheros Communications Inc.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 /*                                                                      */
17 /*  Module Name : wrap_buf.c                                            */
18 /*                                                                      */
19 /*  Abstract                                                            */
20 /*     This module contains wrapper functions for buffer management     */
21 /*                                                                      */
22 /*  NOTES                                                               */
23 /*     Platform dependent.                                              */
24 /*                                                                      */
25 /************************************************************************/
26
27 #include "oal_dt.h"
28 #include "usbdrv.h"
29
30
31 #include <linux/netlink.h>
32
33 #include <net/iw_handler.h>
34
35
36 /* Called to allocate buffer, must return a continue buffer space */
37 zbuf_t *zfwBufAllocate(zdev_t *dev, u16_t len)
38 {
39     zbuf_t *buf;
40
41     /* Allocate SKB for packet*/
42     buf = dev_alloc_skb(len);
43
44     return buf;
45 }
46
47
48 /* Called to free buffer, replace below 3 functions */
49 void zfwBufFree(zdev_t *dev, zbuf_t *buf, u16_t status)
50 {
51     dev_kfree_skb_any(buf);
52 }
53
54 /* Called to adjust buffer size and head pointer */
55 u16_t zfwBufRemoveHead(zdev_t *dev, zbuf_t *buf, u16_t size)
56 {
57     /* zm_assert(buf->len > size); */
58
59     buf->data += size;
60     buf->len -= size;
61     return 0;
62 }
63
64
65
66
67 /* return tail if head==NULL, called to chain multiple buffer together */
68 /* Used to chain Rx buffer to form a frame. if the prepared Rx buffer  */
69 /* is greater than an ethernet frame(1518+32 byte), then this function    */
70 /* will only be called with head=NULL.                                 */
71 u16_t zfwBufChain(zdev_t *dev, zbuf_t **head, zbuf_t *tail)
72 {
73
74     *head = tail;
75     return 0;
76 }
77
78
79 /* Called when doing infra-bss forwarding */
80 u16_t zfwBufCopy(zdev_t *dev, zbuf_t *dst, zbuf_t *src)
81 {
82     memcpy(dst->data, src->data, src->len);
83     dst->tail = dst->data;
84     skb_put(dst, src->len);
85     return 0;
86 }
87
88
89 /* Called to adjust buffer size and tail pointer */
90 u16_t zfwBufSetSize(zdev_t *dev, zbuf_t *buf, u16_t size)
91 {
92 #ifdef NET_SKBUFF_DATA_USES_OFFSET
93     buf->tail = 0;
94     buf->len = 0;
95 #else
96     buf->tail = buf->data;
97     buf->len = 0;
98 #endif
99
100     skb_put(buf, size);
101     return 0;
102 }
103
104 u16_t zfwBufGetSize(zdev_t *dev, zbuf_t *buf)
105 {
106     return buf->len;
107 }
108
109 void zfwCopyBufContext(zdev_t *dev, zbuf_t *source, zbuf_t *dst)
110 {
111 }