root/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
   2 /* Copyright (c) 2010-2012 Broadcom. All rights reserved. */
   3 
   4 #ifndef VCHIQ_IF_H
   5 #define VCHIQ_IF_H
   6 
   7 #define VCHIQ_SERVICE_HANDLE_INVALID 0
   8 
   9 #define VCHIQ_SLOT_SIZE     4096
  10 #define VCHIQ_MAX_MSG_SIZE  (VCHIQ_SLOT_SIZE - sizeof(struct vchiq_header))
  11 #define VCHIQ_CHANNEL_SIZE  VCHIQ_MAX_MSG_SIZE /* For backwards compatibility */
  12 
  13 #define VCHIQ_MAKE_FOURCC(x0, x1, x2, x3) \
  14                         (((x0) << 24) | ((x1) << 16) | ((x2) << 8) | (x3))
  15 #define VCHIQ_GET_SERVICE_USERDATA(service) vchiq_get_service_userdata(service)
  16 #define VCHIQ_GET_SERVICE_FOURCC(service)   vchiq_get_service_fourcc(service)
  17 
  18 typedef enum {
  19         VCHIQ_SERVICE_OPENED,         /* service, -, -             */
  20         VCHIQ_SERVICE_CLOSED,         /* service, -, -             */
  21         VCHIQ_MESSAGE_AVAILABLE,      /* service, header, -        */
  22         VCHIQ_BULK_TRANSMIT_DONE,     /* service, -, bulk_userdata */
  23         VCHIQ_BULK_RECEIVE_DONE,      /* service, -, bulk_userdata */
  24         VCHIQ_BULK_TRANSMIT_ABORTED,  /* service, -, bulk_userdata */
  25         VCHIQ_BULK_RECEIVE_ABORTED    /* service, -, bulk_userdata */
  26 } VCHIQ_REASON_T;
  27 
  28 typedef enum {
  29         VCHIQ_ERROR   = -1,
  30         VCHIQ_SUCCESS = 0,
  31         VCHIQ_RETRY   = 1
  32 } VCHIQ_STATUS_T;
  33 
  34 typedef enum {
  35         VCHIQ_BULK_MODE_CALLBACK,
  36         VCHIQ_BULK_MODE_BLOCKING,
  37         VCHIQ_BULK_MODE_NOCALLBACK,
  38         VCHIQ_BULK_MODE_WAITING         /* Reserved for internal use */
  39 } VCHIQ_BULK_MODE_T;
  40 
  41 typedef enum {
  42         VCHIQ_SERVICE_OPTION_AUTOCLOSE,
  43         VCHIQ_SERVICE_OPTION_SLOT_QUOTA,
  44         VCHIQ_SERVICE_OPTION_MESSAGE_QUOTA,
  45         VCHIQ_SERVICE_OPTION_SYNCHRONOUS,
  46         VCHIQ_SERVICE_OPTION_TRACE
  47 } VCHIQ_SERVICE_OPTION_T;
  48 
  49 struct vchiq_header {
  50         /* The message identifier - opaque to applications. */
  51         int msgid;
  52 
  53         /* Size of message data. */
  54         unsigned int size;
  55 
  56         char data[0];           /* message */
  57 };
  58 
  59 struct vchiq_element {
  60         const void __user *data;
  61         unsigned int size;
  62 };
  63 
  64 typedef unsigned int VCHIQ_SERVICE_HANDLE_T;
  65 
  66 typedef VCHIQ_STATUS_T (*VCHIQ_CALLBACK_T)(VCHIQ_REASON_T,
  67                                            struct vchiq_header *,
  68                                            VCHIQ_SERVICE_HANDLE_T, void *);
  69 
  70 struct vchiq_service_base {
  71         int fourcc;
  72         VCHIQ_CALLBACK_T callback;
  73         void *userdata;
  74 };
  75 
  76 struct vchiq_service_params {
  77         int fourcc;
  78         VCHIQ_CALLBACK_T callback;
  79         void *userdata;
  80         short version;       /* Increment for non-trivial changes */
  81         short version_min;   /* Update for incompatible changes */
  82 };
  83 
  84 struct vchiq_config {
  85         unsigned int max_msg_size;
  86         unsigned int bulk_threshold; /* The message size above which it
  87                                         is better to use a bulk transfer
  88                                         (<= max_msg_size) */
  89         unsigned int max_outstanding_bulks;
  90         unsigned int max_services;
  91         short version;      /* The version of VCHIQ */
  92         short version_min;  /* The minimum compatible version of VCHIQ */
  93 };
  94 
  95 typedef struct vchiq_instance_struct *VCHIQ_INSTANCE_T;
  96 typedef void (*VCHIQ_REMOTE_USE_CALLBACK_T)(void *cb_arg);
  97 
  98 extern VCHIQ_STATUS_T vchiq_initialise(VCHIQ_INSTANCE_T *pinstance);
  99 extern VCHIQ_STATUS_T vchiq_shutdown(VCHIQ_INSTANCE_T instance);
 100 extern VCHIQ_STATUS_T vchiq_connect(VCHIQ_INSTANCE_T instance);
 101 extern VCHIQ_STATUS_T vchiq_add_service(VCHIQ_INSTANCE_T instance,
 102         const struct vchiq_service_params *params,
 103         VCHIQ_SERVICE_HANDLE_T *pservice);
 104 extern VCHIQ_STATUS_T vchiq_open_service(VCHIQ_INSTANCE_T instance,
 105         const struct vchiq_service_params *params,
 106         VCHIQ_SERVICE_HANDLE_T *pservice);
 107 extern VCHIQ_STATUS_T vchiq_close_service(VCHIQ_SERVICE_HANDLE_T service);
 108 extern VCHIQ_STATUS_T vchiq_remove_service(VCHIQ_SERVICE_HANDLE_T service);
 109 extern VCHIQ_STATUS_T vchiq_use_service(VCHIQ_SERVICE_HANDLE_T service);
 110 extern VCHIQ_STATUS_T vchiq_release_service(VCHIQ_SERVICE_HANDLE_T service);
 111 extern VCHIQ_STATUS_T
 112 vchiq_queue_message(VCHIQ_SERVICE_HANDLE_T handle,
 113                     ssize_t (*copy_callback)(void *context, void *dest,
 114                                              size_t offset, size_t maxsize),
 115                     void *context,
 116                     size_t size);
 117 extern void           vchiq_release_message(VCHIQ_SERVICE_HANDLE_T service,
 118         struct vchiq_header *header);
 119 extern VCHIQ_STATUS_T vchiq_bulk_transmit(VCHIQ_SERVICE_HANDLE_T service,
 120         const void *data, unsigned int size, void *userdata,
 121         VCHIQ_BULK_MODE_T mode);
 122 extern VCHIQ_STATUS_T vchiq_bulk_receive(VCHIQ_SERVICE_HANDLE_T service,
 123         void *data, unsigned int size, void *userdata,
 124         VCHIQ_BULK_MODE_T mode);
 125 extern VCHIQ_STATUS_T vchiq_bulk_transmit_handle(VCHIQ_SERVICE_HANDLE_T service,
 126         const void *offset, unsigned int size,
 127         void *userdata, VCHIQ_BULK_MODE_T mode);
 128 extern VCHIQ_STATUS_T vchiq_bulk_receive_handle(VCHIQ_SERVICE_HANDLE_T service,
 129         void *offset, unsigned int size, void *userdata,
 130         VCHIQ_BULK_MODE_T mode);
 131 extern int   vchiq_get_client_id(VCHIQ_SERVICE_HANDLE_T service);
 132 extern void *vchiq_get_service_userdata(VCHIQ_SERVICE_HANDLE_T service);
 133 extern int   vchiq_get_service_fourcc(VCHIQ_SERVICE_HANDLE_T service);
 134 extern void vchiq_get_config(struct vchiq_config *config);
 135 extern VCHIQ_STATUS_T vchiq_set_service_option(VCHIQ_SERVICE_HANDLE_T service,
 136         VCHIQ_SERVICE_OPTION_T option, int value);
 137 
 138 extern VCHIQ_STATUS_T vchiq_remote_use(VCHIQ_INSTANCE_T instance,
 139         VCHIQ_REMOTE_USE_CALLBACK_T callback, void *cb_arg);
 140 extern VCHIQ_STATUS_T vchiq_remote_release(VCHIQ_INSTANCE_T instance);
 141 
 142 extern VCHIQ_STATUS_T vchiq_dump_phys_mem(VCHIQ_SERVICE_HANDLE_T service,
 143         void *ptr, size_t num_bytes);
 144 
 145 extern VCHIQ_STATUS_T vchiq_get_peer_version(VCHIQ_SERVICE_HANDLE_T handle,
 146       short *peer_version);
 147 
 148 #endif /* VCHIQ_IF_H */

/* [<][>][^][v][top][bottom][index][help] */