2 * Copyright (c) 2013 Qualcomm Atheros, Inc.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted (subject to the limitations in the
7 * disclaimer below) provided that the following conditions are met:
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the
17 * * Neither the name of Qualcomm Atheros nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
21 * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
22 * GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
23 * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
24 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
27 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
30 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
32 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
33 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
46 #include <Magpie_api.h>
50 #define VBUF_SIZE sizeof(VBUF)
52 struct VBUF_CONTEXT g_vbufCtx;
54 void _vbuf_init(int nBuf);
55 VBUF* _vbuf_alloc_vbuf(void);
56 void _vbuf_free_vbuf(VBUF *buf);
58 void _vbuf_init(int nBuf)
63 //vbuf = (VBUF*)dataAddr;
64 vbuf = (VBUF*)A_ALLOCRAM(VBUF_SIZE);
65 vbuf->next_buf = NULL;
66 vbuf->desc_list = NULL;
68 g_vbufCtx.free_buf_head = vbuf;
72 //vbuf = (VBUF*)(dataAddr + i*VBUF_SIZE);
73 vbuf = (VBUF*)A_ALLOCRAM(VBUF_SIZE);
75 vbuf->desc_list = NULL;
76 vbuf->next_buf = g_vbufCtx.free_buf_head;
77 g_vbufCtx.free_buf_head = vbuf;
80 g_vbufCtx.nVbufNum = nBuf;
81 //return (dataAddr + nBuf*VBUF_SIZE);
85 VBUF* _vbuf_alloc_vbuf(void)
87 VBUF *allocBuf = NULL;
89 if ( g_vbufCtx.free_buf_head != NULL )
91 allocBuf = g_vbufCtx.free_buf_head;
94 g_vbufCtx.free_buf_head = allocBuf->next_buf;
95 allocBuf->next_buf = NULL;
101 void _vbuf_free_vbuf(VBUF *buf)
103 // assert buf != NULL
105 buf->next_buf = g_vbufCtx.free_buf_head;
106 g_vbufCtx.free_buf_head = buf;
108 g_vbufCtx.nVbufNum++;
111 /* the exported entry point into this module. All apis are accessed through
112 * function pointers */
113 void vbuf_module_install(struct vbuf_api *apis)
116 apis->_init = _vbuf_init;
117 apis->_alloc_vbuf = _vbuf_alloc_vbuf;
118 apis->_free_vbuf = _vbuf_free_vbuf;
120 /* save ptr to the ptr to the context for external code to inspect/modify internal module state */
121 //apis->pReserved = &g_pMboxHWContext;