1 /******************************************************************************
2  *
3  *  Copyright (C) 1999-2012 Broadcom Corporation
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 #pragma once
20 
21 #include "gki.h"
22 
23 typedef struct _buffer_hdr
24 {
25 	struct _buffer_hdr *p_next;   /* next buffer in the queue */
26 	UINT8   q_id;                 /* id of the queue */
27 	UINT8   status;               /* FREE, UNLINKED or QUEUED */
28 	UINT8   Type;
29         UINT16  size;
30 } BUFFER_HDR_T;
31 
32 typedef struct _free_queue
33 {
34 	BUFFER_HDR_T *_p_first;      /* first buffer in the queue */
35 	BUFFER_HDR_T *_p_last;       /* last buffer in the queue */
36 	UINT16		 size;             /* size of the buffers in the pool */
37 	UINT16		 total;            /* toatal number of buffers */
38 	UINT16		 cur_cnt;          /* number of  buffers currently allocated */
39 	UINT16		 max_cnt;          /* maximum number of buffers allocated at any time */
40 } FREE_QUEUE_T;
41 
42 /* Put all GKI variables into one control block
43 */
44 typedef struct
45 {
46     /* Define the buffer pool management variables
47     */
48     FREE_QUEUE_T    freeq[GKI_NUM_TOTAL_BUF_POOLS];
49 
50     UINT16   pool_buf_size[GKI_NUM_TOTAL_BUF_POOLS];
51 
52     /* Define the buffer pool start addresses
53     */
54     UINT8   *pool_start[GKI_NUM_TOTAL_BUF_POOLS];   /* array of pointers to the start of each buffer pool */
55     UINT8   *pool_end[GKI_NUM_TOTAL_BUF_POOLS];     /* array of pointers to the end of each buffer pool */
56     UINT16   pool_size[GKI_NUM_TOTAL_BUF_POOLS];    /* actual size of the buffers in a pool */
57 
58     /* Define the buffer pool access control variables */
59     UINT16      pool_access_mask;                   /* Bits are set if the corresponding buffer pool is a restricted pool */
60 } tGKI_COM_CB;
61 
62 /* Internal GKI function prototypes
63 */
64 void      gki_buffer_init(void);
65 void      gki_buffer_cleanup(void);
66