| /****************************************************************************** |
| * |
| * Copyright (C) 1999-2012 Broadcom Corporation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at: |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| ******************************************************************************/ |
| |
| #pragma once |
| |
| #include "gki.h" |
| |
| typedef struct _buffer_hdr |
| { |
| struct _buffer_hdr *p_next; /* next buffer in the queue */ |
| UINT8 q_id; /* id of the queue */ |
| UINT8 status; /* FREE, UNLINKED or QUEUED */ |
| UINT8 Type; |
| UINT16 size; |
| } BUFFER_HDR_T; |
| |
| typedef struct _free_queue |
| { |
| BUFFER_HDR_T *_p_first; /* first buffer in the queue */ |
| BUFFER_HDR_T *_p_last; /* last buffer in the queue */ |
| UINT16 size; /* size of the buffers in the pool */ |
| UINT16 total; /* toatal number of buffers */ |
| UINT16 cur_cnt; /* number of buffers currently allocated */ |
| UINT16 max_cnt; /* maximum number of buffers allocated at any time */ |
| } FREE_QUEUE_T; |
| |
| /* Put all GKI variables into one control block |
| */ |
| typedef struct |
| { |
| /* Define the buffer pool management variables |
| */ |
| FREE_QUEUE_T freeq[GKI_NUM_TOTAL_BUF_POOLS]; |
| |
| UINT16 pool_buf_size[GKI_NUM_TOTAL_BUF_POOLS]; |
| |
| /* Define the buffer pool start addresses |
| */ |
| UINT8 *pool_start[GKI_NUM_TOTAL_BUF_POOLS]; /* array of pointers to the start of each buffer pool */ |
| UINT8 *pool_end[GKI_NUM_TOTAL_BUF_POOLS]; /* array of pointers to the end of each buffer pool */ |
| UINT16 pool_size[GKI_NUM_TOTAL_BUF_POOLS]; /* actual size of the buffers in a pool */ |
| |
| /* Define the buffer pool access control variables */ |
| UINT16 pool_access_mask; /* Bits are set if the corresponding buffer pool is a restricted pool */ |
| } tGKI_COM_CB; |
| |
| /* Internal GKI function prototypes |
| */ |
| void gki_buffer_init(void); |
| void gki_buffer_cleanup(void); |