linux/drivers/staging/otus/wrap_buf.c
<<
>>
Prefs
   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 */
  37zbuf_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 */
  49void 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 */
  55u16_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.                                 */
  71u16_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 */
  80u16_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 */
  90u16_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
 104u16_t zfwBufGetSize(zdev_t* dev, zbuf_t* buf)
 105{
 106    return buf->len;
 107}
 108
 109void zfwCopyBufContext(zdev_t* dev, zbuf_t* source, zbuf_t* dst)
 110{
 111}
 112