More UDI work
authorJohn Hodge <tpg@prelude.(none)>
Fri, 15 Jan 2010 09:29:29 +0000 (17:29 +0800)
committerJohn Hodge <tpg@prelude.(none)>
Fri, 15 Jan 2010 09:29:29 +0000 (17:29 +0800)
- GIO Metalanguage
- CB Functions
- Also added the UNIMPLEMENTED() macro for unimplemented functions

Kernel/Makefile.BuildNum
Kernel/include/acess.h
Modules/UDI/Makefile
Modules/UDI/buf.c
Modules/UDI/cb.c [new file with mode: 0644]
Modules/UDI/imc.c
Modules/UDI/include/udi_buf.h
Modules/UDI/include/udi_cb.h
Modules/UDI/include/udi_meta_gio.h [new file with mode: 0644]
Modules/UDI/meta_gio.c [new file with mode: 0644]

index e9892dc..866980f 100644 (file)
@@ -1 +1 @@
-BUILD_NUM = 1324
+BUILD_NUM = 1329
index 7bf2e48..e1131ef 100644 (file)
@@ -103,6 +103,7 @@ extern void Debug_Enter(char *FuncName, char *ArgTypes, ...);
 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)
index 2658ae7..4d2070d 100644 (file)
@@ -3,7 +3,7 @@
 
 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
index 235f3e5..7a04d1c 100644 (file)
@@ -9,6 +9,7 @@
 // === EXPORTS ===
 EXPORT(udi_buf_copy);
 EXPORT(udi_buf_write);
+EXPORT(udi_buf_read);
 EXPORT(udi_buf_free);
 
 // === CODE ===
@@ -24,7 +25,7 @@ void udi_buf_copy(
        udi_buf_path_t path_handle
        )
 {
-       Warning("%s Unimplemented", __func__);
+       UNIMPLEMENTED();
 }
 
 void udi_buf_write(
@@ -38,10 +39,19 @@ 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();
 }
diff --git a/Modules/UDI/cb.c b/Modules/UDI/cb.c
new file mode 100644 (file)
index 0000000..59b9507
--- /dev/null
@@ -0,0 +1,60 @@
+/**
+ * \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();
+}
index 2691260..fc7ec6e 100644 (file)
@@ -55,9 +55,7 @@ void udi_channel_event_ind(udi_channel_event_cb_t *cb)
        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__);
 }
index ebff452..fa2428b 100644 (file)
@@ -91,10 +91,10 @@ extern void udi_buf_write(
  * \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
index 1f26a59..76db5c6 100644 (file)
@@ -5,6 +5,12 @@
 #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
@@ -35,5 +41,37 @@ struct udi_cb_s
        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
diff --git a/Modules/UDI/include/udi_meta_gio.h b/Modules/UDI/include/udi_meta_gio.h
new file mode 100644 (file)
index 0000000..1935726
--- /dev/null
@@ -0,0 +1,123 @@
+/**
+ * \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
diff --git a/Modules/UDI/meta_gio.c b/Modules/UDI/meta_gio.c
new file mode 100644 (file)
index 0000000..a7ff7f8
--- /dev/null
@@ -0,0 +1,69 @@
+/**
+ * \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();
+}

UCC git Repository :: git.ucc.asn.au