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.