-BUILD_NUM = 1324
+BUILD_NUM = 1329
extern void Debug_Log(char *FuncName, char *Fmt, ...);
extern void Debug_Leave(char *FuncName, char RetType, ...);
extern void Debug_HexDump(char *Header, void *Data, Uint Length);
+#define UNIMPLEMENTED() Warning("'%s' unimplemented", __func__)
#if DEBUG
# define ENTER(_types...) Debug_Enter((char*)__func__, _types)
# define LOG(_fmt...) Debug_Log((char*)__func__, _fmt)
CPPFLAGS = -I./include
OBJ = main.o logging.o strmem.o imc.o mem.o buf.o
-OBJ += meta_mgmt.o
+OBJ += meta_mgmt.o meta_gio.o
NAME = UDI
-include ../Makefile.tpl
// === EXPORTS ===
EXPORT(udi_buf_copy);
EXPORT(udi_buf_write);
+EXPORT(udi_buf_read);
EXPORT(udi_buf_free);
// === CODE ===
udi_buf_path_t path_handle
)
{
- Warning("%s Unimplemented", __func__);
+ UNIMPLEMENTED();
}
void udi_buf_write(
udi_buf_path_t path_handle
)
{
- Warning("%s Unimplemented", __func__);
+ UNIMPLEMENTED();
+}
+
+void udi_buf_read(
+ udi_buf_t *src_buf,
+ udi_size_t src_off,
+ udi_size_t src_len,
+ void *dst_mem )
+{
+ UNIMPLEMENTED();
}
void udi_buf_free(udi_buf_t *buf)
{
- Warning("%s Unimplemented", __func__);
+ UNIMPLEMENTED();
}
--- /dev/null
+/**
+ * \file bc.c
+ * \author John Hodge (thePowersGang)
+ */
+#include <acess.h>
+#include <udi.h>
+#include <udi_cb.h>
+
+// === EXPORTS ===
+EXPORT(udi_cb_alloc);
+EXPORT(udi_cb_alloc_dynamic);
+EXPORT(udi_cb_alloc_batch);
+EXPORT(udi_cb_free);
+EXPORT(udi_cancel);
+
+// === CODE ===
+void udi_cb_alloc (
+ udi_cb_alloc_call_t *callback,
+ udi_cb_t *gcb,
+ udi_index_t cb_idx,
+ udi_channel_t default_channel
+ )
+{
+ UNIMPLEMENTED();
+}
+
+void udi_cb_alloc_dynamic(
+ udi_cb_alloc_call_t *callback,
+ udi_cb_t *gcb,
+ udi_index_t cb_idx,
+ udi_channel_t default_channel,
+ udi_size_t inline_size,
+ udi_layout_t *inline_layout
+ )
+{
+ UNIMPLEMENTED();
+}
+
+void udi_cb_alloc_batch(
+ udi_cb_alloc_batch_call_t *callback,
+ udi_cb_t *gcb,
+ udi_index_t cb_idx,
+ udi_index_t count,
+ udi_boolean_t with_buf,
+ udi_size_t buf_size,
+ udi_buf_path_t path_handle
+ )
+{
+ UNIMPLEMENTED();
+}
+
+void udi_cb_free(udi_cb_t *cb)
+{
+ UNIMPLEMENTED();
+}
+
+void udi_cancel(udi_cancel_call_t *callback, udi_cb_t *gcb)
+{
+ UNIMPLEMENTED();
+}
udi_channel_event_complete(cb, UDI_OK);
}
-void udi_channel_event_complete(
- udi_channel_event_cb_t *cb, udi_status_t status
- )
+void udi_channel_event_complete(udi_channel_event_cb_t *cb, udi_status_t status)
{
Warning("%s Unimplemented", __func__);
}
* \brief Reads data from a buffer into driver space
*/
extern void udi_buf_read(
- udi_buf_t *src_buf,
- udi_size_t src_off,
- udi_size_t src_len,
- void *dst_mem );
+ udi_buf_t *src_buf,
+ udi_size_t src_off,
+ udi_size_t src_len,
+ void *dst_mem );
/**
* \brief Frees a buffer
#define _UDI_CB_H_
typedef struct udi_cb_s udi_cb_t;
+typedef void udi_cb_alloc_call_t(udi_cb_t *gcb, udi_cb_t *new_cb);
+typedef void udi_cb_alloc_batch_call_t(udi_cb_t *gcb, udi_cb_t *first_new_cb);
+typedef void udi_cancel_call_t(udi_cb_t *gcb);
+
+#define UDI_GCB(mcb) (&(mcb)->gcb)
+#define UDI_MCB(gcb, cb_type) ((cb_type *)(gcb))
/**
* \brief Describes a generic control block
udi_origin_t origin;
};
+extern void udi_cb_alloc (
+ udi_cb_alloc_call_t *callback,
+ udi_cb_t *gcb,
+ udi_index_t cb_idx,
+ udi_channel_t default_channel
+ );
+
+extern void udi_cb_alloc_dynamic(
+ udi_cb_alloc_call_t *callback,
+ udi_cb_t *gcb,
+ udi_index_t cb_idx,
+ udi_channel_t default_channel,
+ udi_size_t inline_size,
+ udi_layout_t *inline_layout
+ );
+
+extern void udi_cb_alloc_batch(
+ udi_cb_alloc_batch_call_t *callback,
+ udi_cb_t *gcb,
+ udi_index_t cb_idx,
+ udi_index_t count,
+ udi_boolean_t with_buf,
+ udi_size_t buf_size,
+ udi_buf_path_t path_handle
+ );
+
+extern void udi_cb_free(udi_cb_t *cb);
+
+extern void udi_cancel(udi_cancel_call_t *callback, udi_cb_t *gcb);
+
+
+
#endif
--- /dev/null
+/**
+ * \file udi_meta_gio.h
+ */
+#ifndef _UDI_META_GIO_H_
+#define _UDI_META_GIO_H_
+
+#include <udi_imc.h>
+#include <udi_buf.h>
+
+typedef const struct udi_gio_provider_ops_s udi_gio_provider_ops_t;
+typedef const struct udi_gio_client_ops_s udi_gio_client_ops_t;
+typedef struct udi_gio_bind_cb_s udi_gio_bind_cb_t;
+typedef struct udi_gio_xfer_cb_s udi_gio_xfer_cb_t;
+typedef struct udi_gio_rw_params_s udi_gio_rw_params_t;
+typedef struct udi_gio_event_cb_s udi_gio_event_cb_t;
+
+typedef void udi_gio_bind_req_op_t(udi_gio_bind_cb_t *cb);
+typedef void udi_gio_unbind_req_op_t(udi_gio_bind_cb_t *cb);
+typedef void udi_gio_xfer_req_op_t(udi_gio_bind_cb_t *cb);
+typedef void udi_gio_event_res_op_t(udi_gio_bind_cb_t *cb);
+
+typedef void udi_gio_bind_ack_op_t(
+ udi_gio_bind_cb_t *cb,
+ udi_ubit32_t device_size_lo,
+ udi_ubit32_t device_size_hi,
+ udi_status_t status
+ );
+typedef void udi_gio_unbind_ack_op_t(udi_gio_bind_cb_t *cb);
+typedef void udi_gio_xfer_ack_op_t(udi_gio_bind_cb_t *cb);
+typedef void udi_gio_xfer_nak_op_t(udi_gio_bind_cb_t *cb, udi_status_t status);
+typedef void udi_gio_event_ind_op_t(udi_gio_bind_cb_t *cb);
+
+typedef udi_ubit8_t udi_gio_op_t;
+/* Limit values for udi_gio_op_t */
+#define UDI_GIO_OP_CUSTOM 16
+#define UDI_GIO_OP_MAX 64
+/* Direction flag values for op */
+#define UDI_GIO_DIR_READ (1U<<6)
+#define UDI_GIO_DIR_WRITE (1U<<7)
+/* Standard Operation Codes */
+#define UDI_GIO_OP_READ UDI_GIO_DIR_READ
+#define UDI_GIO_OP_WRITE UDI_GIO_DIR_WRITE
+
+
+
+struct udi_gio_provider_ops_s
+{
+ udi_channel_event_ind_op_t *channel_event_ind_op;
+ udi_gio_bind_req_op_t *gio_bind_req_op;
+ udi_gio_unbind_req_op_t *gio_unbind_req_op;
+ udi_gio_xfer_req_op_t *gio_xfer_req_op;
+ udi_gio_event_res_op_t *gio_event_res_op;
+};
+/* Ops Vector Number */
+#define UDI_GIO_PROVIDER_OPS_NUM 1
+
+struct udi_gio_client_ops_s
+{
+ udi_channel_event_ind_op_t *channel_event_ind_op;
+ udi_gio_bind_ack_op_t *gio_bind_ack_op;
+ udi_gio_unbind_ack_op_t *gio_unbind_ack_op;
+ udi_gio_xfer_ack_op_t *gio_xfer_ack_op;
+ udi_gio_xfer_nak_op_t *gio_xfer_nak_op;
+ udi_gio_event_ind_op_t *gio_event_ind_op;
+};
+/* Ops Vector Number */
+#define UDI_GIO_CLIENT_OPS_NUM 2
+
+struct udi_gio_bind_cb_s
+{
+ udi_cb_t gcb;
+ udi_xfer_constraints_t xfer_constraints;
+};
+/* Control Block Group Number */
+#define UDI_GIO_BIND_CB_NUM 1
+
+
+struct udi_gio_xfer_cb_s
+{
+ udi_cb_t gcb;
+ udi_gio_op_t op;
+ void *tr_params;
+ udi_buf_t *data_buf;
+};
+/* Control Block Group Number */
+#define UDI_GIO_XFER_CB_NUM 2
+
+struct udi_gio_rw_params_s
+{
+ udi_ubit32_t offset_lo;
+ udi_ubit32_t offset_hi;
+};
+
+struct udi_gio_event_cb_s
+{
+ udi_cb_t gcb;
+ udi_ubit8_t event_code;
+ void *event_params;
+};
+/* Control Block Group Number */
+#define UDI_GIO_EVENT_CB_NUM 3
+
+
+extern void udi_gio_bind_req(udi_gio_bind_cb_t *cb);
+extern void udi_gio_bind_ack(
+ udi_gio_bind_cb_t *cb,
+ udi_ubit32_t device_size_lo,
+ udi_ubit32_t device_size_hi,
+ udi_status_t status
+ );
+
+extern void udi_gio_unbind_req(udi_gio_bind_cb_t *cb);
+extern void udi_gio_unbind_ack(udi_gio_bind_cb_t *cb);
+
+extern void udi_gio_xfer_req(udi_gio_xfer_cb_t *cb);
+extern void udi_gio_xfer_ack(udi_gio_xfer_cb_t *cb);
+extern void udi_gio_xfer_nak(udi_gio_xfer_cb_t *cb, udi_status_t status);
+
+extern void udi_gio_event_res(udi_gio_event_cb_t *cb);
+extern void udi_gio_event_ind(udi_gio_event_cb_t *cb);
+extern void udi_gio_event_res_unused(udi_gio_event_cb_t *cb);
+
+#endif
--- /dev/null
+/**
+ * \file meta_gio.c
+ * \author John Hodge (thePowersGang)
+ */
+#include <acess.h>
+#include <udi.h>
+#include <udi_meta_gio.h>
+
+// === EXPORTS ===
+EXPORT(udi_gio_bind_req);
+EXPORT(udi_gio_bind_ack);
+EXPORT(udi_gio_unbind_req);
+EXPORT(udi_gio_unbind_ack);
+EXPORT(udi_gio_xfer_req);
+EXPORT(udi_gio_xfer_ack);
+EXPORT(udi_gio_xfer_nak);
+EXPORT(udi_gio_event_res);
+EXPORT(udi_gio_event_ind);
+EXPORT(udi_gio_event_res_unused);
+
+// === CODE ===
+void udi_gio_bind_req(udi_gio_bind_cb_t *cb)
+{
+ UNIMPLEMENTED();
+}
+void udi_gio_bind_ack(
+ udi_gio_bind_cb_t *cb,
+ udi_ubit32_t device_size_lo,
+ udi_ubit32_t device_size_hi,
+ udi_status_t status
+ )
+{
+ UNIMPLEMENTED();
+}
+
+void udi_gio_unbind_req(udi_gio_bind_cb_t *cb)
+{
+ UNIMPLEMENTED();
+}
+void udi_gio_unbind_ack(udi_gio_bind_cb_t *cb)
+{
+ UNIMPLEMENTED();
+}
+
+void udi_gio_xfer_req(udi_gio_xfer_cb_t *cb)
+{
+ UNIMPLEMENTED();
+}
+void udi_gio_xfer_ack(udi_gio_xfer_cb_t *cb)
+{
+ UNIMPLEMENTED();
+}
+void udi_gio_xfer_nak(udi_gio_xfer_cb_t *cb, udi_status_t status)
+{
+ UNIMPLEMENTED();
+}
+
+void udi_gio_event_res(udi_gio_event_cb_t *cb)
+{
+ UNIMPLEMENTED();
+}
+void udi_gio_event_ind(udi_gio_event_cb_t *cb)
+{
+ UNIMPLEMENTED();
+}
+void udi_gio_event_res_unused(udi_gio_event_cb_t *cb)
+{
+ UNIMPLEMENTED();
+}