From: John Hodge Date: Fri, 15 Jan 2010 09:29:29 +0000 (+0800) Subject: More UDI work X-Git-Tag: rel0.06~332 X-Git-Url: https://git.ucc.asn.au/?a=commitdiff_plain;h=7163111b434c9677098c9ba38c6838820499473c;p=tpg%2Facess2.git More UDI work - GIO Metalanguage - CB Functions - Also added the UNIMPLEMENTED() macro for unimplemented functions --- diff --git a/Kernel/Makefile.BuildNum b/Kernel/Makefile.BuildNum index e9892dc0..866980fb 100644 --- a/Kernel/Makefile.BuildNum +++ b/Kernel/Makefile.BuildNum @@ -1 +1 @@ -BUILD_NUM = 1324 +BUILD_NUM = 1329 diff --git a/Kernel/include/acess.h b/Kernel/include/acess.h index 7bf2e481..e1131ef4 100644 --- a/Kernel/include/acess.h +++ b/Kernel/include/acess.h @@ -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) diff --git a/Modules/UDI/Makefile b/Modules/UDI/Makefile index 2658ae77..4d2070dd 100644 --- a/Modules/UDI/Makefile +++ b/Modules/UDI/Makefile @@ -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 diff --git a/Modules/UDI/buf.c b/Modules/UDI/buf.c index 235f3e56..7a04d1c4 100644 --- a/Modules/UDI/buf.c +++ b/Modules/UDI/buf.c @@ -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 index 00000000..59b9507d --- /dev/null +++ b/Modules/UDI/cb.c @@ -0,0 +1,60 @@ +/** + * \file bc.c + * \author John Hodge (thePowersGang) + */ +#include +#include +#include + +// === 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(); +} diff --git a/Modules/UDI/imc.c b/Modules/UDI/imc.c index 2691260d..fc7ec6ef 100644 --- a/Modules/UDI/imc.c +++ b/Modules/UDI/imc.c @@ -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__); } diff --git a/Modules/UDI/include/udi_buf.h b/Modules/UDI/include/udi_buf.h index ebff452f..fa2428b7 100644 --- a/Modules/UDI/include/udi_buf.h +++ b/Modules/UDI/include/udi_buf.h @@ -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 diff --git a/Modules/UDI/include/udi_cb.h b/Modules/UDI/include/udi_cb.h index 1f26a593..76db5c6e 100644 --- a/Modules/UDI/include/udi_cb.h +++ b/Modules/UDI/include/udi_cb.h @@ -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 index 00000000..19357262 --- /dev/null +++ b/Modules/UDI/include/udi_meta_gio.h @@ -0,0 +1,123 @@ +/** + * \file udi_meta_gio.h + */ +#ifndef _UDI_META_GIO_H_ +#define _UDI_META_GIO_H_ + +#include +#include + +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 index 00000000..a7ff7f8f --- /dev/null +++ b/Modules/UDI/meta_gio.c @@ -0,0 +1,69 @@ +/** + * \file meta_gio.c + * \author John Hodge (thePowersGang) + */ +#include +#include +#include + +// === 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(); +}