Home | History | Annotate | Download | only in include
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2009-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 /******************************************************************************
     20  *
     21  *  Filename:      utils.h
     22  *
     23  *  Description:   Utility functions declaration
     24  *
     25  ******************************************************************************/
     26 
     27 #ifndef UTILS_H
     28 #define UTILS_H
     29 
     30 /******************************************************************************
     31 **  Constants & Macros
     32 ******************************************************************************/
     33 
     34 #define STREAM_TO_UINT16(u16, p) {u16 = ((uint16_t)(*(p)) + (((uint16_t)(*((p) + 1))) << 8)); (p) += 2;}
     35 #define UINT16_TO_STREAM(p, u16) {*(p)++ = (uint8_t)(u16); *(p)++ = (uint8_t)((u16) >> 8);}
     36 #define UINT32_TO_STREAM(p, u32) {*(p)++ = (uint8_t)(u32); *(p)++ = (uint8_t)((u32) >> 8); *(p)++ = (uint8_t)((u32) >> 16); *(p)++ = (uint8_t)((u32) >> 24);}
     37 
     38 /******************************************************************************
     39 **  Type definitions
     40 ******************************************************************************/
     41 
     42 typedef struct
     43 {
     44     void        *p_first;
     45     void        *p_last;
     46     uint16_t    count;
     47 } BUFFER_Q;
     48 
     49 /******************************************************************************
     50 **  Extern variables and functions
     51 ******************************************************************************/
     52 
     53 /******************************************************************************
     54 **  Functions
     55 ******************************************************************************/
     56 
     57 /*******************************************************************************
     58 **
     59 ** Function        utils_init
     60 **
     61 ** Description     Utils initialization
     62 **
     63 ** Returns         None
     64 **
     65 *******************************************************************************/
     66 void utils_init ();
     67 
     68 /*******************************************************************************
     69 **
     70 ** Function        utils_cleanup
     71 **
     72 ** Description     Utils cleanup
     73 **
     74 ** Returns         None
     75 **
     76 *******************************************************************************/
     77 void utils_cleanup ();
     78 
     79 /*******************************************************************************
     80 **
     81 ** Function        utils_queue_init
     82 **
     83 ** Description     Initialize the given buffer queue
     84 **
     85 ** Returns         None
     86 **
     87 *******************************************************************************/
     88 void utils_queue_init (BUFFER_Q *p_q);
     89 
     90 /*******************************************************************************
     91 **
     92 ** Function        utils_enqueue
     93 **
     94 ** Description     Enqueue a buffer at the tail of the given queue
     95 **
     96 ** Returns         None
     97 **
     98 *******************************************************************************/
     99 void utils_enqueue (BUFFER_Q *p_q, void *p_buf);
    100 
    101 /*******************************************************************************
    102 **
    103 ** Function        utils_dequeue
    104 **
    105 ** Description     Dequeues a buffer from the head of the given queue
    106 **
    107 ** Returns         NULL if queue is empty, else buffer
    108 **
    109 *******************************************************************************/
    110 void *utils_dequeue (BUFFER_Q *p_q);
    111 
    112 /*******************************************************************************
    113 **
    114 ** Function        utils_dequeue_unlocked
    115 **
    116 ** Description     Dequeues a buffer from the head of the given queue without lock
    117 **
    118 ** Returns         NULL if queue is empty, else buffer
    119 **
    120 *******************************************************************************/
    121 void *utils_dequeue_unlocked (BUFFER_Q *p_q);
    122 
    123 /*******************************************************************************
    124 **
    125 ** Function        utils_getnext
    126 **
    127 ** Description     Return a pointer to the next buffer linked to the given buffer
    128 **
    129 ** Returns         NULL if the given buffer does not point to any next buffer,
    130 **                 else next buffer address
    131 **
    132 *******************************************************************************/
    133 void *utils_getnext (void *p_buf);
    134 
    135 /*******************************************************************************
    136 **
    137 ** Function        utils_remove_from_queue
    138 **
    139 ** Description     Dequeue the given buffer from the middle of the given queue
    140 **
    141 ** Returns         NULL if the given queue is empty, else the given buffer
    142 **
    143 *******************************************************************************/
    144 void *utils_remove_from_queue (BUFFER_Q *p_q, void *p_buf);
    145 
    146 /*******************************************************************************
    147 **
    148 ** Function        utils_remove_from_queue_unlocked
    149 **
    150 ** Description     Dequeue the given buffer from the middle of the given queue without lock
    151 **
    152 ** Returns         NULL if the given queue is empty, else the given buffer
    153 **
    154 *******************************************************************************/
    155 void *utils_remove_from_queue_unlocked (BUFFER_Q *p_q, void *p_buf);
    156 
    157 
    158 /*******************************************************************************
    159 **
    160 ** Function        utils_delay
    161 **
    162 ** Description     sleep unconditionally for timeout milliseconds
    163 **
    164 ** Returns         None
    165 **
    166 *******************************************************************************/
    167 void utils_delay (uint32_t timeout);
    168 
    169 /*******************************************************************************
    170 **
    171 ** Function        utils_lock
    172 **
    173 ** Description     application calls this function before entering critical
    174 **                 section
    175 **
    176 ** Returns         None
    177 **
    178 *******************************************************************************/
    179 void utils_lock (void);
    180 
    181 /*******************************************************************************
    182 **
    183 ** Function        utils_unlock
    184 **
    185 ** Description     application calls this function when leaving critical
    186 **                 section
    187 **
    188 ** Returns         None
    189 **
    190 *******************************************************************************/
    191 void utils_unlock (void);
    192 
    193 #endif /* UTILS_H */
    194 
    195