Home | History | Annotate | Line # | Download | only in connections
      1  1.1  jmcneill /**
      2  1.1  jmcneill  * Copyright (c) 2010-2012 Broadcom. All rights reserved.
      3  1.1  jmcneill  *
      4  1.1  jmcneill  * Redistribution and use in source and binary forms, with or without
      5  1.1  jmcneill  * modification, are permitted provided that the following conditions
      6  1.1  jmcneill  * are met:
      7  1.1  jmcneill  * 1. Redistributions of source code must retain the above copyright
      8  1.1  jmcneill  *    notice, this list of conditions, and the following disclaimer,
      9  1.1  jmcneill  *    without modification.
     10  1.1  jmcneill  * 2. Redistributions in binary form must reproduce the above copyright
     11  1.1  jmcneill  *    notice, this list of conditions and the following disclaimer in the
     12  1.1  jmcneill  *    documentation and/or other materials provided with the distribution.
     13  1.1  jmcneill  * 3. The names of the above-listed copyright holders may not be used
     14  1.1  jmcneill  *    to endorse or promote products derived from this software without
     15  1.1  jmcneill  *    specific prior written permission.
     16  1.1  jmcneill  *
     17  1.1  jmcneill  * ALTERNATIVELY, this software may be distributed under the terms of the
     18  1.1  jmcneill  * GNU General Public License ("GPL") version 2, as published by the Free
     19  1.1  jmcneill  * Software Foundation.
     20  1.1  jmcneill  *
     21  1.1  jmcneill  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
     22  1.1  jmcneill  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     23  1.1  jmcneill  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     24  1.1  jmcneill  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     25  1.1  jmcneill  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     26  1.1  jmcneill  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     27  1.1  jmcneill  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     28  1.1  jmcneill  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
     29  1.1  jmcneill  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     30  1.1  jmcneill  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     31  1.1  jmcneill  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     32  1.1  jmcneill  */
     33  1.1  jmcneill 
     34  1.1  jmcneill #ifndef CONNECTION_H_
     35  1.1  jmcneill #define CONNECTION_H_
     36  1.1  jmcneill 
     37  1.1  jmcneill #include "interface/vchi/vchi_cfg_internal.h"
     38  1.1  jmcneill #include "interface/vchi/vchi_common.h"
     39  1.1  jmcneill #include "interface/vchi/message_drivers/message.h"
     40  1.1  jmcneill 
     41  1.1  jmcneill /******************************************************************************
     42  1.1  jmcneill  Global defs
     43  1.1  jmcneill  *****************************************************************************/
     44  1.1  jmcneill 
     45  1.1  jmcneill // Opaque handle for a connection / service pair
     46  1.1  jmcneill typedef struct opaque_vchi_connection_connected_service_handle_t *VCHI_CONNECTION_SERVICE_HANDLE_T;
     47  1.1  jmcneill 
     48  1.1  jmcneill // opaque handle to the connection state information
     49  1.1  jmcneill typedef struct opaque_vchi_connection_info_t VCHI_CONNECTION_STATE_T;
     50  1.1  jmcneill 
     51  1.1  jmcneill typedef struct vchi_connection_t VCHI_CONNECTION_T;
     52  1.1  jmcneill 
     53  1.1  jmcneill 
     54  1.1  jmcneill /******************************************************************************
     55  1.1  jmcneill  API
     56  1.1  jmcneill  *****************************************************************************/
     57  1.1  jmcneill 
     58  1.1  jmcneill // Routine to init a connection with a particular low level driver
     59  1.1  jmcneill typedef VCHI_CONNECTION_STATE_T * (*VCHI_CONNECTION_INIT_T)( struct vchi_connection_t * connection,
     60  1.1  jmcneill                                                              const VCHI_MESSAGE_DRIVER_T * driver );
     61  1.1  jmcneill 
     62  1.1  jmcneill // Routine to control CRC enabling at a connection level
     63  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_CRC_CONTROL_T)( VCHI_CONNECTION_STATE_T *state_handle,
     64  1.1  jmcneill                                                   VCHI_CRC_CONTROL_T control );
     65  1.1  jmcneill 
     66  1.1  jmcneill // Routine to create a service
     67  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_SERVICE_CONNECT_T)( VCHI_CONNECTION_STATE_T *state_handle,
     68  1.1  jmcneill                                                       int32_t service_id,
     69  1.1  jmcneill                                                       uint32_t rx_fifo_size,
     70  1.1  jmcneill                                                       uint32_t tx_fifo_size,
     71  1.1  jmcneill                                                       int server,
     72  1.1  jmcneill                                                       VCHI_CALLBACK_T callback,
     73  1.1  jmcneill                                                       void *callback_param,
     74  1.1  jmcneill                                                       int32_t want_crc,
     75  1.1  jmcneill                                                       int32_t want_unaligned_bulk_rx,
     76  1.1  jmcneill                                                       int32_t want_unaligned_bulk_tx,
     77  1.1  jmcneill                                                       VCHI_CONNECTION_SERVICE_HANDLE_T *service_handle );
     78  1.1  jmcneill 
     79  1.1  jmcneill // Routine to close a service
     80  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_SERVICE_DISCONNECT_T)( VCHI_CONNECTION_SERVICE_HANDLE_T service_handle );
     81  1.1  jmcneill 
     82  1.1  jmcneill // Routine to queue a message
     83  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_SERVICE_QUEUE_MESSAGE_T)( VCHI_CONNECTION_SERVICE_HANDLE_T service_handle,
     84  1.1  jmcneill                                                             const void *data,
     85  1.1  jmcneill                                                             uint32_t data_size,
     86  1.1  jmcneill                                                             VCHI_FLAGS_T flags,
     87  1.1  jmcneill                                                             void *msg_handle );
     88  1.1  jmcneill 
     89  1.1  jmcneill // scatter-gather (vector) message queueing
     90  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_SERVICE_QUEUE_MESSAGEV_T)( VCHI_CONNECTION_SERVICE_HANDLE_T service_handle,
     91  1.1  jmcneill                                                              VCHI_MSG_VECTOR_T *vector,
     92  1.1  jmcneill                                                              uint32_t count,
     93  1.1  jmcneill                                                              VCHI_FLAGS_T flags,
     94  1.1  jmcneill                                                              void *msg_handle );
     95  1.1  jmcneill 
     96  1.1  jmcneill // Routine to dequeue a message
     97  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_SERVICE_DEQUEUE_MESSAGE_T)( VCHI_CONNECTION_SERVICE_HANDLE_T service_handle,
     98  1.1  jmcneill                                                               void *data,
     99  1.1  jmcneill                                                               uint32_t max_data_size_to_read,
    100  1.1  jmcneill                                                               uint32_t *actual_msg_size,
    101  1.1  jmcneill                                                               VCHI_FLAGS_T flags );
    102  1.1  jmcneill 
    103  1.1  jmcneill // Routine to peek at a message
    104  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_SERVICE_PEEK_MESSAGE_T)( VCHI_CONNECTION_SERVICE_HANDLE_T service_handle,
    105  1.1  jmcneill                                                            void **data,
    106  1.1  jmcneill                                                            uint32_t *msg_size,
    107  1.1  jmcneill                                                            VCHI_FLAGS_T flags );
    108  1.1  jmcneill 
    109  1.1  jmcneill // Routine to hold a message
    110  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_SERVICE_HOLD_MESSAGE_T)( VCHI_CONNECTION_SERVICE_HANDLE_T service_handle,
    111  1.1  jmcneill                                                            void **data,
    112  1.1  jmcneill                                                            uint32_t *msg_size,
    113  1.1  jmcneill                                                            VCHI_FLAGS_T flags,
    114  1.1  jmcneill                                                            void **message_handle );
    115  1.1  jmcneill 
    116  1.1  jmcneill // Routine to initialise a received message iterator
    117  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_SERVICE_LOOKAHEAD_MESSAGE_T)( VCHI_CONNECTION_SERVICE_HANDLE_T service_handle,
    118  1.1  jmcneill                                                                 VCHI_MSG_ITER_T *iter,
    119  1.1  jmcneill                                                                 VCHI_FLAGS_T flags );
    120  1.1  jmcneill 
    121  1.1  jmcneill // Routine to release a held message
    122  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_HELD_MSG_RELEASE_T)( VCHI_CONNECTION_SERVICE_HANDLE_T service_handle,
    123  1.1  jmcneill                                                        void *message_handle );
    124  1.1  jmcneill 
    125  1.1  jmcneill // Routine to get info on a held message
    126  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_HELD_MSG_INFO_T)( VCHI_CONNECTION_SERVICE_HANDLE_T service_handle,
    127  1.1  jmcneill                                                     void *message_handle,
    128  1.1  jmcneill                                                     void **data,
    129  1.1  jmcneill                                                     int32_t *msg_size,
    130  1.1  jmcneill                                                     uint32_t *tx_timestamp,
    131  1.1  jmcneill                                                     uint32_t *rx_timestamp );
    132  1.1  jmcneill 
    133  1.1  jmcneill // Routine to check whether the iterator has a next message
    134  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_MSG_ITER_HAS_NEXT_T)( VCHI_CONNECTION_SERVICE_HANDLE_T service,
    135  1.1  jmcneill                                                        const VCHI_MSG_ITER_T *iter );
    136  1.1  jmcneill 
    137  1.1  jmcneill // Routine to advance the iterator
    138  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_MSG_ITER_NEXT_T)( VCHI_CONNECTION_SERVICE_HANDLE_T service,
    139  1.1  jmcneill                                                     VCHI_MSG_ITER_T *iter,
    140  1.1  jmcneill                                                     void **data,
    141  1.1  jmcneill                                                     uint32_t *msg_size );
    142  1.1  jmcneill 
    143  1.1  jmcneill // Routine to remove the last message returned by the iterator
    144  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_MSG_ITER_REMOVE_T)( VCHI_CONNECTION_SERVICE_HANDLE_T service,
    145  1.1  jmcneill                                                       VCHI_MSG_ITER_T *iter );
    146  1.1  jmcneill 
    147  1.1  jmcneill // Routine to hold the last message returned by the iterator
    148  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_MSG_ITER_HOLD_T)( VCHI_CONNECTION_SERVICE_HANDLE_T service,
    149  1.1  jmcneill                                                     VCHI_MSG_ITER_T *iter,
    150  1.1  jmcneill                                                     void **msg_handle );
    151  1.1  jmcneill 
    152  1.1  jmcneill // Routine to transmit bulk data
    153  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_BULK_QUEUE_TRANSMIT_T)( VCHI_CONNECTION_SERVICE_HANDLE_T service_handle,
    154  1.1  jmcneill                                                           const void *data_src,
    155  1.1  jmcneill                                                           uint32_t data_size,
    156  1.1  jmcneill                                                           VCHI_FLAGS_T flags,
    157  1.1  jmcneill                                                           void *bulk_handle );
    158  1.1  jmcneill 
    159  1.1  jmcneill // Routine to receive data
    160  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_BULK_QUEUE_RECEIVE_T)( VCHI_CONNECTION_SERVICE_HANDLE_T service_handle,
    161  1.1  jmcneill                                                          void *data_dst,
    162  1.1  jmcneill                                                          uint32_t data_size,
    163  1.1  jmcneill                                                          VCHI_FLAGS_T flags,
    164  1.1  jmcneill                                                          void *bulk_handle );
    165  1.1  jmcneill 
    166  1.1  jmcneill // Routine to report if a server is available
    167  1.1  jmcneill typedef int32_t (*VCHI_CONNECTION_SERVER_PRESENT)( VCHI_CONNECTION_STATE_T *state, int32_t service_id, int32_t peer_flags );
    168  1.1  jmcneill 
    169  1.1  jmcneill // Routine to report the number of RX slots available
    170  1.1  jmcneill typedef int (*VCHI_CONNECTION_RX_SLOTS_AVAILABLE)( const VCHI_CONNECTION_STATE_T *state );
    171  1.1  jmcneill 
    172  1.1  jmcneill // Routine to report the RX slot size
    173  1.1  jmcneill typedef uint32_t (*VCHI_CONNECTION_RX_SLOT_SIZE)( const VCHI_CONNECTION_STATE_T *state );
    174  1.1  jmcneill 
    175  1.1  jmcneill // Callback to indicate that the other side has added a buffer to the rx bulk DMA FIFO
    176  1.1  jmcneill typedef void (*VCHI_CONNECTION_RX_BULK_BUFFER_ADDED)(VCHI_CONNECTION_STATE_T *state,
    177  1.1  jmcneill                                                      int32_t service,
    178  1.1  jmcneill                                                      uint32_t length,
    179  1.1  jmcneill                                                      MESSAGE_TX_CHANNEL_T channel,
    180  1.1  jmcneill                                                      uint32_t channel_params,
    181  1.1  jmcneill                                                      uint32_t data_length,
    182  1.1  jmcneill                                                      uint32_t data_offset);
    183  1.1  jmcneill 
    184  1.1  jmcneill // Callback to inform a service that a Xon or Xoff message has been received
    185  1.1  jmcneill typedef void (*VCHI_CONNECTION_FLOW_CONTROL)(VCHI_CONNECTION_STATE_T *state, int32_t service_id, int32_t xoff);
    186  1.1  jmcneill 
    187  1.1  jmcneill // Callback to inform a service that a server available reply message has been received
    188  1.1  jmcneill typedef void (*VCHI_CONNECTION_SERVER_AVAILABLE_REPLY)(VCHI_CONNECTION_STATE_T *state, int32_t service_id, uint32_t flags);
    189  1.1  jmcneill 
    190  1.1  jmcneill // Callback to indicate that bulk auxiliary messages have arrived
    191  1.1  jmcneill typedef void (*VCHI_CONNECTION_BULK_AUX_RECEIVED)(VCHI_CONNECTION_STATE_T *state);
    192  1.1  jmcneill 
    193  1.1  jmcneill // Callback to indicate that bulk auxiliary messages have arrived
    194  1.1  jmcneill typedef void (*VCHI_CONNECTION_BULK_AUX_TRANSMITTED)(VCHI_CONNECTION_STATE_T *state, void *handle);
    195  1.1  jmcneill 
    196  1.1  jmcneill // Callback with all the connection info you require
    197  1.1  jmcneill typedef void (*VCHI_CONNECTION_INFO)(VCHI_CONNECTION_STATE_T *state, uint32_t protocol_version, uint32_t slot_size, uint32_t num_slots, uint32_t min_bulk_size);
    198  1.1  jmcneill 
    199  1.1  jmcneill // Callback to inform of a disconnect
    200  1.1  jmcneill typedef void (*VCHI_CONNECTION_DISCONNECT)(VCHI_CONNECTION_STATE_T *state, uint32_t flags);
    201  1.1  jmcneill 
    202  1.1  jmcneill // Callback to inform of a power control request
    203  1.1  jmcneill typedef void (*VCHI_CONNECTION_POWER_CONTROL)(VCHI_CONNECTION_STATE_T *state, MESSAGE_TX_CHANNEL_T channel, int32_t enable);
    204  1.1  jmcneill 
    205  1.1  jmcneill // allocate memory suitably aligned for this connection
    206  1.1  jmcneill typedef void * (*VCHI_BUFFER_ALLOCATE)(VCHI_CONNECTION_SERVICE_HANDLE_T service_handle, uint32_t * length);
    207  1.1  jmcneill 
    208  1.1  jmcneill // free memory allocated by buffer_allocate
    209  1.1  jmcneill typedef void   (*VCHI_BUFFER_FREE)(VCHI_CONNECTION_SERVICE_HANDLE_T service_handle, void * address);
    210  1.1  jmcneill 
    211  1.1  jmcneill 
    212  1.1  jmcneill /******************************************************************************
    213  1.1  jmcneill  System driver struct
    214  1.1  jmcneill  *****************************************************************************/
    215  1.1  jmcneill 
    216  1.1  jmcneill struct opaque_vchi_connection_api_t
    217  1.1  jmcneill {
    218  1.1  jmcneill    // Routine to init the connection
    219  1.1  jmcneill    VCHI_CONNECTION_INIT_T                      init;
    220  1.1  jmcneill 
    221  1.1  jmcneill    // Connection-level CRC control
    222  1.1  jmcneill    VCHI_CONNECTION_CRC_CONTROL_T               crc_control;
    223  1.1  jmcneill 
    224  1.1  jmcneill    // Routine to connect to or create service
    225  1.1  jmcneill    VCHI_CONNECTION_SERVICE_CONNECT_T           service_connect;
    226  1.1  jmcneill 
    227  1.1  jmcneill    // Routine to disconnect from a service
    228  1.1  jmcneill    VCHI_CONNECTION_SERVICE_DISCONNECT_T        service_disconnect;
    229  1.1  jmcneill 
    230  1.1  jmcneill    // Routine to queue a message
    231  1.1  jmcneill    VCHI_CONNECTION_SERVICE_QUEUE_MESSAGE_T     service_queue_msg;
    232  1.1  jmcneill 
    233  1.1  jmcneill    // scatter-gather (vector) message queue
    234  1.1  jmcneill    VCHI_CONNECTION_SERVICE_QUEUE_MESSAGEV_T    service_queue_msgv;
    235  1.1  jmcneill 
    236  1.1  jmcneill    // Routine to dequeue a message
    237  1.1  jmcneill    VCHI_CONNECTION_SERVICE_DEQUEUE_MESSAGE_T   service_dequeue_msg;
    238  1.1  jmcneill 
    239  1.1  jmcneill    // Routine to peek at a message
    240  1.1  jmcneill    VCHI_CONNECTION_SERVICE_PEEK_MESSAGE_T      service_peek_msg;
    241  1.1  jmcneill 
    242  1.1  jmcneill    // Routine to hold a message
    243  1.1  jmcneill    VCHI_CONNECTION_SERVICE_HOLD_MESSAGE_T      service_hold_msg;
    244  1.1  jmcneill 
    245  1.1  jmcneill    // Routine to initialise a received message iterator
    246  1.1  jmcneill    VCHI_CONNECTION_SERVICE_LOOKAHEAD_MESSAGE_T service_look_ahead_msg;
    247  1.1  jmcneill 
    248  1.1  jmcneill    // Routine to release a message
    249  1.1  jmcneill    VCHI_CONNECTION_HELD_MSG_RELEASE_T          held_msg_release;
    250  1.1  jmcneill 
    251  1.1  jmcneill    // Routine to get information on a held message
    252  1.1  jmcneill    VCHI_CONNECTION_HELD_MSG_INFO_T             held_msg_info;
    253  1.1  jmcneill 
    254  1.1  jmcneill    // Routine to check for next message on iterator
    255  1.1  jmcneill    VCHI_CONNECTION_MSG_ITER_HAS_NEXT_T         msg_iter_has_next;
    256  1.1  jmcneill 
    257  1.1  jmcneill    // Routine to get next message on iterator
    258  1.1  jmcneill    VCHI_CONNECTION_MSG_ITER_NEXT_T             msg_iter_next;
    259  1.1  jmcneill 
    260  1.1  jmcneill    // Routine to remove the last message returned by iterator
    261  1.1  jmcneill    VCHI_CONNECTION_MSG_ITER_REMOVE_T           msg_iter_remove;
    262  1.1  jmcneill 
    263  1.1  jmcneill    // Routine to hold the last message returned by iterator
    264  1.1  jmcneill    VCHI_CONNECTION_MSG_ITER_HOLD_T             msg_iter_hold;
    265  1.1  jmcneill 
    266  1.1  jmcneill    // Routine to transmit bulk data
    267  1.1  jmcneill    VCHI_CONNECTION_BULK_QUEUE_TRANSMIT_T       bulk_queue_transmit;
    268  1.1  jmcneill 
    269  1.1  jmcneill    // Routine to receive data
    270  1.1  jmcneill    VCHI_CONNECTION_BULK_QUEUE_RECEIVE_T        bulk_queue_receive;
    271  1.1  jmcneill 
    272  1.1  jmcneill    // Routine to report the available servers
    273  1.1  jmcneill    VCHI_CONNECTION_SERVER_PRESENT              server_present;
    274  1.1  jmcneill 
    275  1.1  jmcneill    // Routine to report the number of RX slots available
    276  1.1  jmcneill    VCHI_CONNECTION_RX_SLOTS_AVAILABLE          connection_rx_slots_available;
    277  1.1  jmcneill 
    278  1.1  jmcneill    // Routine to report the RX slot size
    279  1.1  jmcneill    VCHI_CONNECTION_RX_SLOT_SIZE                connection_rx_slot_size;
    280  1.1  jmcneill 
    281  1.1  jmcneill    // Callback to indicate that the other side has added a buffer to the rx bulk DMA FIFO
    282  1.1  jmcneill    VCHI_CONNECTION_RX_BULK_BUFFER_ADDED        rx_bulk_buffer_added;
    283  1.1  jmcneill 
    284  1.1  jmcneill    // Callback to inform a service that a Xon or Xoff message has been received
    285  1.1  jmcneill    VCHI_CONNECTION_FLOW_CONTROL                flow_control;
    286  1.1  jmcneill 
    287  1.1  jmcneill    // Callback to inform a service that a server available reply message has been received
    288  1.1  jmcneill    VCHI_CONNECTION_SERVER_AVAILABLE_REPLY      server_available_reply;
    289  1.1  jmcneill 
    290  1.1  jmcneill    // Callback to indicate that bulk auxiliary messages have arrived
    291  1.1  jmcneill    VCHI_CONNECTION_BULK_AUX_RECEIVED           bulk_aux_received;
    292  1.1  jmcneill 
    293  1.1  jmcneill    // Callback to indicate that a bulk auxiliary message has been transmitted
    294  1.1  jmcneill    VCHI_CONNECTION_BULK_AUX_TRANSMITTED        bulk_aux_transmitted;
    295  1.1  jmcneill 
    296  1.1  jmcneill    // Callback to provide information about the connection
    297  1.1  jmcneill    VCHI_CONNECTION_INFO                        connection_info;
    298  1.1  jmcneill 
    299  1.1  jmcneill    // Callback to notify that peer has requested disconnect
    300  1.1  jmcneill    VCHI_CONNECTION_DISCONNECT                  disconnect;
    301  1.1  jmcneill 
    302  1.1  jmcneill    // Callback to notify that peer has requested power change
    303  1.1  jmcneill    VCHI_CONNECTION_POWER_CONTROL               power_control;
    304  1.1  jmcneill 
    305  1.1  jmcneill    // allocate memory suitably aligned for this connection
    306  1.1  jmcneill    VCHI_BUFFER_ALLOCATE                        buffer_allocate;
    307  1.1  jmcneill 
    308  1.1  jmcneill    // free memory allocated by buffer_allocate
    309  1.1  jmcneill    VCHI_BUFFER_FREE                            buffer_free;
    310  1.1  jmcneill 
    311  1.1  jmcneill };
    312  1.1  jmcneill 
    313  1.1  jmcneill struct vchi_connection_t {
    314  1.1  jmcneill    const VCHI_CONNECTION_API_T *api;
    315  1.1  jmcneill    VCHI_CONNECTION_STATE_T     *state;
    316  1.1  jmcneill #ifdef VCHI_COARSE_LOCKING
    317  1.1  jmcneill    struct semaphore             sem;
    318  1.1  jmcneill #endif
    319  1.1  jmcneill };
    320  1.1  jmcneill 
    321  1.1  jmcneill 
    322  1.1  jmcneill #endif /* CONNECTION_H_ */
    323  1.1  jmcneill 
    324  1.1  jmcneill /****************************** End of file **********************************/
    325