12 #include <aura/slog.h> 
   23 enum aura_node_status {
 
   29 enum aura_call_status {
 
   32         AURA_CALL_TRANSPORT_FAIL,
 
   43         struct aura_node *node;
 
   51         struct aura_export_table *tbl;
 
   54         enum aura_node_status     status;
 
   60         int                       num_buffers_in_pool;
 
   63         bool sync_call_running;
 
   64         bool need_endian_swap;
 
   75         void *status_changed_arg;
 
   76         void (*status_changed_cb)(
struct aura_node *node, 
int newstatus, 
void *arg);
 
   78         void *etable_changed_arg;
 
   79         void (*etable_changed_cb)(
struct aura_node *node,
 
   80                                   struct aura_export_table *old,
 
   81                                   struct aura_export_table *newtbl,
 
   84         void *object_migration_failed_arg;
 
   85         void (*object_migration_failed_cb)(
struct aura_node *node,
 
   86                                         struct aura_object *failed,
 
   89         void (*unhandled_evt_cb)(
struct aura_node *node,
 
   92         void *unhandled_evt_arg;
 
   94         void (*fd_changed_cb)(
const struct aura_pollfds *fd,
 
   95                               enum aura_fd_action act, 
void *arg);
 
  101         struct aura_pollfds *fds; 
 
  104         unsigned int poll_timeout;
 
  105         uint64_t last_checked;
 
  107         const struct aura_object *current_object;
 
  129         void (*calldonecb)(
struct aura_node *dev, 
int status, 
struct aura_buffer *ret, 
void *arg);
 
  133 struct aura_eventloop {
 
  142 #define object_is_event(o)  (o->arg_fmt==NULL) 
  143 #define object_is_method(o) (o->arg_fmt!=NULL) 
  145 struct aura_export_table {
 
  148         struct aura_node *owner;
 
  149         struct hsearch_data index;
 
  150         struct aura_object objects[];
 
  154 #define __BIT(n) (1<< n) 
  210         int    (*
open)(
struct aura_node *node, 
const char *opts);
 
  221         void   (*
close)(
struct aura_node *node);
 
  240         void   (*
loop)(
struct aura_node *node, 
const struct aura_pollfds *fd);
 
  291         struct aura_buffer *(*buffer_request)(
struct aura_node *node, 
int size);
 
  355 struct aura_buffer *aura_serialize(
struct aura_node *node, 
const char *fmt, 
int size, va_list ap);
 
  356 int  aura_fmt_len(
struct aura_node *node, 
const char *fmt);
 
  357 char* aura_fmt_pretty_print(
const char* fmt, 
int *valid, 
int *num_args);
 
  364 #define AURA_TRANSPORT(s)                                          \ 
  365         void __attribute__((constructor (101))) do_reg_##s(void) { \ 
  366                 aura_transport_register(&s);                       \ 
  369 enum aura_endianness aura_get_host_endianness();
 
  370 void aura_hexdump (
char *desc, 
void *addr, 
int len);
 
  371 const char *aura_get_version();
 
  372 unsigned int aura_get_version_code();
 
  381 struct aura_export_table *aura_etable_create(
struct aura_node *owner, 
int n);
 
  382 void aura_etable_add(
struct aura_export_table *tbl,
 
  386 void aura_etable_activate(
struct aura_export_table *tbl);
 
  388 struct aura_object *aura_etable_find(
struct aura_export_table *tbl,
 
  390 struct aura_object *aura_etable_find_id(
struct aura_export_table *tbl,
 
  393 #define AURA_DECLARE_CACHED_ID(idvar, node, name)\ 
  394         static int idvar = -1; \ 
  396                 struct aura_object *tmp = aura_etable_find(node->tbl, name); \ 
  398                         BUG(node, "Static lobject lookup failed!"); \ 
  402 void aura_etable_destroy(
struct aura_export_table *tbl);
 
  404 struct aura_node *
aura_open(
const char* name, 
const char *opts);
 
  408 int aura_queue_call(
struct aura_node *node,
 
  410                     void (*calldonecb)(
struct aura_node *dev, 
int status, 
struct aura_buffer *ret, 
void *arg),
 
  415         struct aura_node *dev,
 
  417         void (*calldonecb)(
struct aura_node *dev, 
int status, 
struct aura_buffer *ret, 
void *arg),
 
  422         struct aura_node *dev,
 
  424         void (*calldonecb)(
struct aura_node *dev, 
int status, 
struct aura_buffer *ret, 
void *arg),
 
  429         struct aura_node *dev,
 
  435         struct aura_node *dev,
 
  441         struct aura_node *node,
 
  443         void (*calldonecb)(
struct aura_node *dev, 
int status, 
struct aura_buffer *ret, 
void *arg),
 
  447         struct aura_node *node,
 
  449         void (*calldonecb)(
struct aura_node *dev, 
int status, 
struct aura_buffer *ret, 
void *arg),
 
  457 void __attribute__((noreturn)) aura_panic(struct aura_node *node);
 
  458 int BUG(struct aura_node *node, const 
char *msg, ...);
 
  717                             void (*cb)(struct aura_node *node,
 
  718                                        struct aura_export_table *old,
 
  719                                        struct aura_export_table *newtbl,
 
  724                             void (*cb)(struct aura_node *node, 
int newstatus, 
void *arg),
 
  728                          void (*cb)(const struct aura_pollfds *fd, enum aura_fd_action act, 
void *arg),
 
  732                            void (*cb)(struct aura_node *node,
 
  738                                      void (*cb)(struct aura_node *node,
 
  739                                                 struct aura_object *failed,
 
  745 void aura_add_pollfds(struct aura_node *node, 
int fd, uint32_t events);
 
  746 void aura_del_pollfds(struct aura_node *node, 
int fd);
 
  747 int aura_get_pollfds(struct aura_node *node, const struct aura_pollfds **fds);
 
  759 #define aura_eventloop_create(...) \ 
  760         aura_eventloop_create__(0, ##__VA_ARGS__, NULL) 
  793 #include <aura/inlines.h> 
  795 #define min_t(type, x, y) ({                                    \ 
  798                         __min1 < __min2 ? __min1: __min2; }) 
  801 #define max_t(type, x, y) ({                                    \ 
  804                         __max1 > __max2 ? __max1: __max2; }) 
void aura_buffer_put_s16(struct aura_buffer *buf, int16_t value)
Put a signed 16 bit integer to aura buffer. 
int aura_get_next_event(struct aura_node *node, const struct aura_object **obj, struct aura_buffer **retbuf)
void aura_requeue_buffer(struct list_head *head, struct aura_buffer *buf)
void(* loop)(struct aura_node *node, const struct aura_pollfds *fd)
Required. 
void aura_set_status(struct aura_node *node, int status)
struct aura_buffer * aura_buffer_request(struct aura_node *nd, int size)
struct aura_buffer * aura_dequeue_buffer(struct list_head *head)
const char * name
Required. 
void * aura_eventloop_vcreate(va_list ap)
int buffer_offset
Optional. 
void aura_buffer_put_s32(struct aura_buffer *buf, int32_t value)
Put a signed 32 bit integer to aura buffer. 
struct list_head registry
Private. 
void aura_handle_events_forever(struct aura_eventloop *loop)
int64_t aura_buffer_get_s64(struct aura_buffer *buf)
Get a signed 64 bit integer from aura buffer. 
void aura_buffer_put_u16(struct aura_buffer *buf, uint16_t value)
Put an unsigned 16 bit integer to aura buffer. 
void aura_buffer_put_bin(struct aura_buffer *buf, const void *data, int len)
Copy data of len bytes to aura buffer from a buffer pointed by data. 
void * aura_eventloop_create__(int dummy,...)
void aura_eventloop_add(struct aura_eventloop *loop, struct aura_node *node)
void(* buffer_release)(struct aura_buffer *buf)
Optional. 
void aura_wait_status(struct aura_node *node, int status)
void * aura_eventloop_create_empty()
int32_t aura_buffer_get_s32(struct aura_buffer *buf)
Get a signed 32 bit integer from aura buffer. 
void aura_handle_events_timeout(struct aura_eventloop *loop, int timeout_ms)
int8_t aura_buffer_get_s8(struct aura_buffer *buf)
Get a signed 8 bit integer from aura buffer. 
struct aura_eventloop * aura_eventloop_get_data(struct aura_node *node)
void aura_buffer_put_s8(struct aura_buffer *buf, int8_t value)
Put a signed 8 bit integer to aura buffer. 
void aura_buffer_put_u32(struct aura_buffer *buf, uint32_t value)
Put an unsigned 32 bit integer to aura buffer. 
void aura_bufferpool_preheat(struct aura_node *nd, int size, int count)
void aura_buffer_put_u8(struct aura_buffer *buf, uint8_t value)
Put an unsigned 8 bit integer to aura buffer. 
void aura_object_migration_failed_cb(struct aura_node *node, void(*cb)(struct aura_node *node, struct aura_object *failed, void *arg), void *arg)
int buffer_overhead
Optional. 
int aura_set_event_callback_raw(struct aura_node *node, int id, void(*calldonecb)(struct aura_node *dev, int status, struct aura_buffer *ret, void *arg), void *arg)
void aura_handle_events(struct aura_eventloop *loop)
uint32_t aura_buffer_get_u32(struct aura_buffer *buf)
Get an unsigned 32 bit integer from aura buffer. 
void(* close)(struct aura_node *node)
Required. 
uint16_t aura_buffer_get_u16(struct aura_buffer *buf)
Get an unsigned 16 bit integer from aura buffer. 
int aura_call_raw(struct aura_node *dev, int id, struct aura_buffer **ret,...)
void aura_buffer_put_u64(struct aura_buffer *buf, uint64_t value)
Put an unsigned 64 bit integer to aura buffer. 
void aura_eventloop_destroy(struct aura_eventloop *loop)
int aura_get_pending_events(struct aura_node *node)
int aura_call(struct aura_node *dev, const char *name, struct aura_buffer **ret,...)
uint8_t aura_buffer_get_u8(struct aura_buffer *buf)
Get an unsigned 8 bit integer from aura buffer. 
struct aura_node * aura_open(const char *name, const char *opts)
void aura_fd_changed_cb(struct aura_node *node, void(*cb)(const struct aura_pollfds *fd, enum aura_fd_action act, void *arg), void *arg)
const void * aura_buffer_get_ptr(struct aura_buffer *buf)
int(* open)(struct aura_node *node, const char *opts)
Required. 
const void * aura_buffer_get_bin(struct aura_buffer *buf, int len)
Get a pointer to the binary data block within buffer and advance internal pointer by len bytes...
int aura_start_call_raw(struct aura_node *dev, int id, void(*calldonecb)(struct aura_node *dev, int status, struct aura_buffer *ret, void *arg), void *arg,...)
void aura_buffer_put_s64(struct aura_buffer *buf, int64_t value)
Put a signed 64 bit integer to aura buffer. 
void aura_eventloop_del(struct aura_node *node)
uint64_t aura_buffer_get_u64(struct aura_buffer *buf)
Get an unsigned 64 bit integer from aura buffer. 
void aura_queue_buffer(struct list_head *list, struct aura_buffer *buf)
void __attribute__((noreturn)) aura_panic(struct aura_node *node)
void aura_enable_sync_events(struct aura_node *node, int count)
const struct aura_object * aura_get_current_object(struct aura_node *node)
Obtain the pointer to the current aura_object. 
void aura_status_changed_cb(struct aura_node *node, void(*cb)(struct aura_node *node, int newstatus, void *arg), void *arg)
void aura_etable_changed_cb(struct aura_node *node, void(*cb)(struct aura_node *node, struct aura_export_table *old, struct aura_export_table *new, void *arg), void *arg)
void aura_unhandled_evt_cb(struct aura_node *node, void(*cb)(struct aura_node *node, struct aura_buffer *buf, void *arg), void *arg)
void aura_eventloop_break(struct aura_eventloop *loop)
int16_t aura_buffer_get_s16(struct aura_buffer *buf)
Get a signed 16 bit integer from aura buffer. 
void aura_buffer_release(struct aura_buffer *buf)
void aura_close(struct aura_node *dev)
void aura_set_node_endian(struct aura_node *node, enum aura_endianness en)
void aura_buffer_destroy(struct aura_buffer *buf)
int aura_start_call(struct aura_node *dev, const char *name, void(*calldonecb)(struct aura_node *dev, int status, struct aura_buffer *ret, void *arg), void *arg,...)
struct aura_buffer * aura_buffer_get_buf(struct aura_buffer *buf)
Retrieve aura_buffer pointer from within the buffer and advance internal pointer by it's size...
struct aura_buffer * aura_peek_buffer(struct list_head *head)
struct aura_object * object
int aura_set_event_callback(struct aura_node *node, const char *event, void(*calldonecb)(struct aura_node *dev, int status, struct aura_buffer *ret, void *arg), void *arg)
void(* buffer_put)(struct aura_buffer *dst, struct aura_buffer *buf)
Optional.