From 76504d6eb355267746921fb49ebd191219f4cb84 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Fri, 15 Jan 2010 23:37:56 +0800 Subject: [PATCH] More work on UDI, cleanup and pseudod should now load. - Also added a NULL check to ELF_GetSymbol --- Kernel/Makefile.BuildNum | 2 +- Kernel/bin/elf.c | 4 +- Modules/UDI/Makefile | 1 + Modules/UDI/buf.c | 1 - Modules/UDI/cb.c | 3 +- Modules/UDI/imc.c | 19 ++- Modules/UDI/include/physio/meta_bus.h | 74 +++++++++ Modules/UDI/include/physio/meta_intr.h | 100 ++++++++++++ Modules/UDI/include/physio/pio.h | 15 ++ Modules/UDI/include/udi.h | 30 ++-- .../UDI/include/{udi_attr.h => udi/attr.h} | 0 Modules/UDI/include/{udi_buf.h => udi/buf.h} | 0 Modules/UDI/include/{udi_cb.h => udi/cb.h} | 0 Modules/UDI/include/{udi_imc.h => udi/imc.h} | 0 .../UDI/include/{udi_init.h => udi/init.h} | 0 Modules/UDI/include/{udi_log.h => udi/log.h} | 3 - Modules/UDI/include/{udi_mem.h => udi/mem.h} | 0 .../{udi_meta_gio.h => udi/meta_gio.h} | 3 - .../{udi_meta_mgmt.h => udi/meta_mgmt.h} | 4 +- .../include/{udi_strmem.h => udi/strmem.h} | 0 Modules/UDI/include/udi_physio.h | 144 ++++++++++++++++++ Modules/UDI/main.c | 2 + Modules/UDI/mem.c | 9 +- Modules/UDI/meta_gio.c | 1 - Modules/UDI/meta_mgmt.c | 23 ++- Modules/UDI/physio.c | 25 +++ Modules/UDI/physio/meta_bus.c | 38 +++++ Modules/UDI/physio/meta_intr.c | 48 ++++++ Modules/UDI/strmem.c | 7 +- 29 files changed, 505 insertions(+), 51 deletions(-) create mode 100644 Modules/UDI/include/physio/meta_bus.h create mode 100644 Modules/UDI/include/physio/meta_intr.h create mode 100644 Modules/UDI/include/physio/pio.h rename Modules/UDI/include/{udi_attr.h => udi/attr.h} (100%) rename Modules/UDI/include/{udi_buf.h => udi/buf.h} (100%) rename Modules/UDI/include/{udi_cb.h => udi/cb.h} (100%) rename Modules/UDI/include/{udi_imc.h => udi/imc.h} (100%) rename Modules/UDI/include/{udi_init.h => udi/init.h} (100%) rename Modules/UDI/include/{udi_log.h => udi/log.h} (92%) rename Modules/UDI/include/{udi_mem.h => udi/mem.h} (100%) rename Modules/UDI/include/{udi_meta_gio.h => udi/meta_gio.h} (98%) rename Modules/UDI/include/{udi_meta_mgmt.h => udi/meta_mgmt.h} (95%) rename Modules/UDI/include/{udi_strmem.h => udi/strmem.h} (100%) create mode 100644 Modules/UDI/include/udi_physio.h create mode 100644 Modules/UDI/physio.c create mode 100644 Modules/UDI/physio/meta_bus.c create mode 100644 Modules/UDI/physio/meta_intr.c diff --git a/Kernel/Makefile.BuildNum b/Kernel/Makefile.BuildNum index 866980fb..f432c251 100644 --- a/Kernel/Makefile.BuildNum +++ b/Kernel/Makefile.BuildNum @@ -1 +1 @@ -BUILD_NUM = 1329 +BUILD_NUM = 1339 diff --git a/Kernel/bin/elf.c b/Kernel/bin/elf.c index c516da33..9381b5cf 100644 --- a/Kernel/bin/elf.c +++ b/Kernel/bin/elf.c @@ -539,7 +539,7 @@ int Elf_GetSymbol(void *Base, char *Name, Uint *ret) // Check Bucket i = pBuckets[ iNameHash ]; if(symtab[i].shndx != SHN_UNDEF && strcmp(symtab[i].name, Name) == 0) { - *ret = symtab[ i ].value; + if(ret) *ret = symtab[ i ].value; return 1; } @@ -548,7 +548,7 @@ int Elf_GetSymbol(void *Base, char *Name, Uint *ret) { i = pChains[i]; if(symtab[i].shndx != SHN_UNDEF && strcmp(symtab[ i ].name, Name) == 0) { - *ret = symtab[ i ].value; + if(ret) *ret = symtab[ i ].value; return 1; } } diff --git a/Modules/UDI/Makefile b/Modules/UDI/Makefile index 58e8d07f..4c199f18 100644 --- a/Modules/UDI/Makefile +++ b/Modules/UDI/Makefile @@ -4,6 +4,7 @@ CPPFLAGS = -I./include OBJ = main.o logging.o strmem.o imc.o mem.o buf.o cb.o OBJ += meta_mgmt.o meta_gio.o +OBJ += physio.o physio/meta_bus.o physio/meta_intr.o NAME = UDI -include ../Makefile.tpl diff --git a/Modules/UDI/buf.c b/Modules/UDI/buf.c index 7a04d1c4..3255911d 100644 --- a/Modules/UDI/buf.c +++ b/Modules/UDI/buf.c @@ -4,7 +4,6 @@ */ #include #include -#include // === EXPORTS === EXPORT(udi_buf_copy); diff --git a/Modules/UDI/cb.c b/Modules/UDI/cb.c index 59b9507d..78be97bd 100644 --- a/Modules/UDI/cb.c +++ b/Modules/UDI/cb.c @@ -1,10 +1,9 @@ /** - * \file bc.c + * \file cb.c * \author John Hodge (thePowersGang) */ #include #include -#include // === EXPORTS === EXPORT(udi_cb_alloc); diff --git a/Modules/UDI/imc.c b/Modules/UDI/imc.c index fc7ec6ef..cd15e070 100644 --- a/Modules/UDI/imc.c +++ b/Modules/UDI/imc.c @@ -4,7 +4,15 @@ */ #include #include -#include + +// === EXPORTS === +EXPORT(udi_channel_anchor); +EXPORT(udi_channel_spawn); +EXPORT(udi_channel_set_context); +EXPORT(udi_channel_op_abort); +EXPORT(udi_channel_close); +EXPORT(udi_channel_event_ind); +EXPORT(udi_channel_event_complete); // === CODE === /** @@ -59,12 +67,3 @@ void udi_channel_event_complete(udi_channel_event_cb_t *cb, udi_status_t status) { Warning("%s Unimplemented", __func__); } - -// === EXPORTS === -EXPORT(udi_channel_anchor); -EXPORT(udi_channel_spawn); -EXPORT(udi_channel_set_context); -EXPORT(udi_channel_op_abort); -EXPORT(udi_channel_close); -EXPORT(udi_channel_event_ind); -EXPORT(udi_channel_event_complete); diff --git a/Modules/UDI/include/physio/meta_bus.h b/Modules/UDI/include/physio/meta_bus.h new file mode 100644 index 00000000..7b88ece8 --- /dev/null +++ b/Modules/UDI/include/physio/meta_bus.h @@ -0,0 +1,74 @@ +/** + * \file physio/meta_bus.h + */ +#ifndef _PHYSIO_META_BUS_H_ +#define _PHYSIO_META_BUS_H_ + +#include +#include + +typedef const struct udi_bus_device_ops_s udi_bus_device_ops_t; +typedef const struct udi_bus_bridge_ops_s udi_bus_bridge_ops_t; +typedef struct udi_bus_bind_cb_s udi_bus_bind_cb_t; +typedef void udi_bus_unbind_req_op_t(udi_bus_bind_cb_t *cb); +typedef void udi_bus_unbind_ack_op_t(udi_bus_bind_cb_t *cb); +typedef void udi_bus_bind_req_op_t(udi_bus_bind_cb_t *cb); +typedef void udi_bus_bind_ack_op_t( + udi_bus_bind_cb_t *cb, + udi_dma_constraints_t dma_constraints, + udi_ubit8_t preferred_endianness, + udi_status_t status + ); + + +struct udi_bus_device_ops_s +{ + udi_channel_event_ind_op_t *channel_event_ind_op; + udi_bus_bind_ack_op_t *bus_bind_ack_op; + udi_bus_unbind_ack_op_t *bus_unbind_ack_op; + udi_intr_attach_ack_op_t *intr_attach_ack_op; + udi_intr_detach_ack_op_t *intr_detach_ack_op; +}; +/* Bus Device Ops Vector Number */ +#define UDI_BUS_DEVICE_OPS_NUM 1 + +struct udi_bus_bridge_ops_s +{ + udi_channel_event_ind_op_t *channel_event_ind_op; + udi_bus_bind_req_op_t *bus_bind_req_op; + udi_bus_unbind_req_op_t *bus_unbind_req_op; + udi_intr_attach_req_op_t *intr_attach_req_op; + udi_intr_detach_req_op_t *intr_detach_req_op; +}; +/* Bus Bridge Ops Vector Number */ +#define UDI_BUS_BRIDGE_OPS_NUM + +struct udi_bus_bind_cb_s +{ + udi_cb_t gcb; +}; +/* Bus Bind Control Block Group Number */ +#define UDI_BUS_BIND_CB_NUM 1 + + +extern void udi_bus_bind_req(udi_bus_bind_cb_t *cb); + +extern void udi_bus_bind_ack( + udi_bus_bind_cb_t *cb, + udi_dma_constraints_t dma_constraints, + udi_ubit8_t preferred_endianness, + udi_status_t status + ); +/* Values for preferred_endianness */ +#define UDI_DMA_BIG_ENDIAN (1U<<5) +#define UDI_DMA_LITTLE_ENDIAN (1U<<6) +#define UDI_DMA_ANY_ENDIAN (1U<<0) + +extern void udi_bus_unbind_req(udi_bus_bind_cb_t *cb); +extern void udi_bus_unbind_ack(udi_bus_bind_cb_t *cb); + + + + + +#endif diff --git a/Modules/UDI/include/physio/meta_intr.h b/Modules/UDI/include/physio/meta_intr.h new file mode 100644 index 00000000..d5dd3941 --- /dev/null +++ b/Modules/UDI/include/physio/meta_intr.h @@ -0,0 +1,100 @@ +/** + * \file physio/meta_intr.h + */ +#ifndef _PHYSIO_META_INTR_H_ +#define _PHYSIO_META_INTR_H_ + +#include +#include +#include "pio.h" + +typedef struct udi_intr_attach_cb_s udi_intr_attach_cb_t; +typedef void udi_intr_attach_req_op_t(udi_intr_attach_cb_t *intr_attach_cb); +typedef void udi_intr_attach_ack_op_t( + udi_intr_attach_cb_t *intr_attach_cb, + udi_status_t status + ); +typedef struct udi_intr_detach_cb_s udi_intr_detach_cb_t; +typedef void udi_intr_detach_req_op_t(udi_intr_detach_cb_t *intr_detach_cb); +typedef void udi_intr_detach_ack_op_t(udi_intr_detach_cb_t *intr_detach_cb); +typedef const struct udi_intr_handler_ops_s udi_intr_handler_ops_t; +typedef const struct udi_intr_dispatcher_ops_s udi_intr_dispatcher_ops_t; +typedef struct udi_intr_event_cb_s udi_intr_event_cb_t; +typedef void udi_intr_event_ind_op_t(udi_intr_event_cb_t *intr_event_cb, udi_ubit8_t flags); +typedef void udi_intr_event_rdy_op_t(udi_intr_event_cb_t *intr_event_cb); + + +struct udi_intr_attach_cb_s +{ + udi_cb_t gcb; + udi_index_t interrupt_idx; + udi_ubit8_t min_event_pend; + udi_pio_handle_t preprocessing_handle; +}; +/* Bridge Attach Control Block Group Number */ +#define UDI_BUS_INTR_ATTACH_CB_NUM 2 + +struct udi_intr_detach_cb_s +{ + udi_cb_t gcb; + udi_index_t interrupt_idx; +}; +/* Bridge Detach Control Block Group Number */ +#define UDI_BUS_INTR_DETACH_CB_NUM 3 + +struct udi_intr_handler_ops_s +{ + udi_channel_event_ind_op_t *channel_event_ind_op; + udi_intr_event_ind_op_t *intr_event_ind_op; +}; +/* Interrupt Handler Ops Vector Number */ +#define UDI_BUS_INTR_HANDLER_OPS_NUM 3 + +struct udi_intr_dispatcher_ops_s +{ + udi_channel_event_ind_op_t *channel_event_ind_op; + udi_intr_event_rdy_op_t *intr_event_rdy_op; +}; +/* Interrupt Dispatcher Ops Vector Number */ +#define UDI_BUS_INTR_DISPATCH_OPS_NUM 4 + +struct udi_intr_event_cb_s +{ + udi_cb_t gcb; + udi_buf_t *event_buf; + udi_ubit16_t intr_result; +}; +/* Flag values for interrupt handling */ +#define UDI_INTR_UNCLAIMED (1U<<0) +#define UDI_INTR_NO_EVENT (1U<<1) +/* Bus Interrupt Event Control Block Group Number */ +#define UDI_BUS_INTR_EVENT_CB_NUM 4 + + + +extern void udi_intr_attach_req(udi_intr_attach_cb_t *intr_attach_cb); +extern void udi_intr_attach_ack(udi_intr_attach_cb_t *intr_attach_cb, udi_status_t status); +extern void udi_intr_attach_ack_unused(udi_intr_attach_cb_t *intr_attach_cb, udi_status_t status); + +extern void udi_intr_detach_req(udi_intr_detach_cb_t *intr_detach_cb); +extern void udi_intr_detach_ack(udi_intr_detach_cb_t *intr_detach_cb); +extern void udi_intr_detach_ack_unused(udi_intr_detach_cb_t *intr_detach_cb); + + +extern void udi_intr_event_ind(udi_intr_event_cb_t *intr_event_cb, udi_ubit8_t flags); +/** + * \brief Values for ::udi_intr_event_ind \a flags + * \{ + */ +#define UDI_INTR_MASKING_NOT_REQUIRED (1U<<0) +#define UDI_INTR_OVERRUN_OCCURRED (1U<<1) +#define UDI_INTR_PREPROCESSED (1U<<2) +/** + * \} + */ + +extern void udi_intr_event_rdy(udi_intr_event_cb_t *intr_event_cb); + + + +#endif diff --git a/Modules/UDI/include/physio/pio.h b/Modules/UDI/include/physio/pio.h new file mode 100644 index 00000000..1ce305f2 --- /dev/null +++ b/Modules/UDI/include/physio/pio.h @@ -0,0 +1,15 @@ +/** + * \file physio/pio.h + */ +#ifndef _PHYSIO_PIO_H_ +#define _PHYSIO_PIO_H_ + +#include +#include + + +typedef _udi_handle_t udi_pio_handle_t; +/* Null handle value for udi_pio_handle_t */ +#define UDI_NULL_PIO_HANDLE _NULL_HANDLE + +#endif diff --git a/Modules/UDI/include/udi.h b/Modules/UDI/include/udi.h index 136d42df..fa5cac30 100644 --- a/Modules/UDI/include/udi.h +++ b/Modules/UDI/include/udi.h @@ -21,18 +21,21 @@ typedef udi_ubit8_t udi_boolean_t; /* 0=False; 1..28-1=True */ typedef size_t udi_size_t; /* buffer size */ typedef size_t udi_index_t; /* zero-based index type */ +typedef void *_udi_handle_t; +#define _NULL_HANDLE NULL + /* Channel Handle */ -typedef void *udi_channel_t; -#define UDI_NULL_CHANNEL NULL +typedef _udi_handle_t *udi_channel_t; +#define UDI_NULL_CHANNEL _NULL_HANDLE /** * \brief Buffer Path */ -typedef void *udi_buf_path_t; -#define UDI_NULL_BUF_PATH NULL +typedef _udi_handle_t udi_buf_path_t; +#define UDI_NULL_BUF_PATH _NULL_HANDLE -typedef void *udi_origin_t; -#define UDI_NULL_ORIGIN NULL +typedef _udi_handle_t udi_origin_t; +#define UDI_NULL_ORIGIN _NULL_HANDLE typedef Sint64 udi_timestamp_t; @@ -137,10 +140,15 @@ typedef const udi_ubit8_t udi_layout_t; // === INCLUDE SUB-SECTIONS === -#include "udi_log.h" // Management Metalanguage -#include "udi_attr.h" // Management Metalanguage -#include "udi_cb.h" // Management Metalanguage -#include "udi_meta_mgmt.h" // Management Metalanguage -#include "udi_init.h" // Init +#include "udi/cb.h" // Control Blocks +#include "udi/log.h" // Logging +#include "udi/attr.h" // Attributes +#include "udi/strmem.h" // String/Memory +#include "udi/buf.h" // Buffers +#include "udi/mem.h" // Memory Management +#include "udi/imc.h" // Inter-module Communication +#include "udi/meta_mgmt.h" // Management Metalanguage +#include "udi/meta_gio.h" // General IO Metalanguage +#include "udi/init.h" // Init #endif diff --git a/Modules/UDI/include/udi_attr.h b/Modules/UDI/include/udi/attr.h similarity index 100% rename from Modules/UDI/include/udi_attr.h rename to Modules/UDI/include/udi/attr.h diff --git a/Modules/UDI/include/udi_buf.h b/Modules/UDI/include/udi/buf.h similarity index 100% rename from Modules/UDI/include/udi_buf.h rename to Modules/UDI/include/udi/buf.h diff --git a/Modules/UDI/include/udi_cb.h b/Modules/UDI/include/udi/cb.h similarity index 100% rename from Modules/UDI/include/udi_cb.h rename to Modules/UDI/include/udi/cb.h diff --git a/Modules/UDI/include/udi_imc.h b/Modules/UDI/include/udi/imc.h similarity index 100% rename from Modules/UDI/include/udi_imc.h rename to Modules/UDI/include/udi/imc.h diff --git a/Modules/UDI/include/udi_init.h b/Modules/UDI/include/udi/init.h similarity index 100% rename from Modules/UDI/include/udi_init.h rename to Modules/UDI/include/udi/init.h diff --git a/Modules/UDI/include/udi_log.h b/Modules/UDI/include/udi/log.h similarity index 92% rename from Modules/UDI/include/udi_log.h rename to Modules/UDI/include/udi/log.h index 7a01ed45..dccb1246 100644 --- a/Modules/UDI/include/udi_log.h +++ b/Modules/UDI/include/udi/log.h @@ -4,9 +4,6 @@ #ifndef _UDI_LOG_H_ #define _UDI_LOG_H_ -// Required Files -#include "udi_cb.h" - /** * \brief Trace Event */ diff --git a/Modules/UDI/include/udi_mem.h b/Modules/UDI/include/udi/mem.h similarity index 100% rename from Modules/UDI/include/udi_mem.h rename to Modules/UDI/include/udi/mem.h diff --git a/Modules/UDI/include/udi_meta_gio.h b/Modules/UDI/include/udi/meta_gio.h similarity index 98% rename from Modules/UDI/include/udi_meta_gio.h rename to Modules/UDI/include/udi/meta_gio.h index 19357262..d1cf86fd 100644 --- a/Modules/UDI/include/udi_meta_gio.h +++ b/Modules/UDI/include/udi/meta_gio.h @@ -4,9 +4,6 @@ #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; diff --git a/Modules/UDI/include/udi_meta_mgmt.h b/Modules/UDI/include/udi/meta_mgmt.h similarity index 95% rename from Modules/UDI/include/udi_meta_mgmt.h rename to Modules/UDI/include/udi/meta_mgmt.h index f524bea6..97eccf2d 100644 --- a/Modules/UDI/include/udi_meta_mgmt.h +++ b/Modules/UDI/include/udi/meta_mgmt.h @@ -21,7 +21,7 @@ typedef void udi_usage_ind_op_t(udi_usage_cb_t *cb, udi_ubit8_t resource_level); #define UDI_RESOURCES_NORMAL 3 #define UDI_RESOURCES_PLENTIFUL 4 /* Proxy */ -extern udi_usage_ind_op_t udi_static_usage; +extern void udi_static_usage(udi_usage_cb_t *cb, udi_ubit8_t resource_level); /** * \} */ @@ -41,7 +41,7 @@ typedef void udi_enumerate_req_op_t(udi_enumerate_cb_t *cb, udi_ubit8_t enumerat #define UDI_ENUMERATE_DIRECTED 5 #define UDI_ENUMERATE_RELEASE 6 /* Proxy */ -extern udi_enumerate_req_op_t udi_enumerate_no_children; +extern void udi_enumerate_no_children(udi_enumerate_cb_t *cb, udi_ubit8_t enumeration_level); /** * \} */ diff --git a/Modules/UDI/include/udi_strmem.h b/Modules/UDI/include/udi/strmem.h similarity index 100% rename from Modules/UDI/include/udi_strmem.h rename to Modules/UDI/include/udi/strmem.h diff --git a/Modules/UDI/include/udi_physio.h b/Modules/UDI/include/udi_physio.h new file mode 100644 index 00000000..1397b1c0 --- /dev/null +++ b/Modules/UDI/include/udi_physio.h @@ -0,0 +1,144 @@ +/** + * \file udi_physio.h + */ +#ifndef _UDI_PHYSIO_H_ +#define _UDI_PHYSIO_H_ + +#include + +// === TYPEDEFS === +// DMA Core +typedef _udi_handle_t udi_dma_handle_t; +#define UDI_NULL_DMA_HANDLE _NULL_HANDLE +typedef Uint64 udi_busaddr64_t; //!< \note Opaque +typedef struct udi_scgth_element_32_s udi_scgth_element_32_t; +typedef struct udi_scgth_element_64_s udi_scgth_element_64_t; +typedef struct udi_scgth_s udi_scgth_t; +typedef _udi_handle_t udi_dma_constraints_t; +#define UDI_NULL_DMA_CONSTRAINTS _NULL_HANDLE +/** + * \name DMA constraints attributes + * \{ + */ +typedef udi_ubit8_t udi_dma_constraints_attr_t; +/* DMA Convenience Attribute Codes */ +#define UDI_DMA_ADDRESSABLE_BITS 100 +#define UDI_DMA_ALIGNMENT_BITS 101 +/* DMA Constraints on the Entire Transfer */ +#define UDI_DMA_DATA_ADDRESSABLE_BITS 110 +#define UDI_DMA_NO_PARTIAL 111 +/* DMA Constraints on the Scatter/Gather List */ +#define UDI_DMA_SCGTH_MAX_ELEMENTS 120 +#define UDI_DMA_SCGTH_FORMAT 121 +#define UDI_DMA_SCGTH_ENDIANNESS 122 +#define UDI_DMA_SCGTH_ADDRESSABLE_BITS 123 +#define UDI_DMA_SCGTH_MAX_SEGMENTS 124 +/* DMA Constraints on Scatter/Gather Segments */ +#define UDI_DMA_SCGTH_ALIGNMENT_BITS 130 +#define UDI_DMA_SCGTH_MAX_EL_PER_SEG 131 +#define UDI_DMA_SCGTH_PREFIX_BYTES 132 +/* DMA Constraints on Scatter/Gather Elements */ +#define UDI_DMA_ELEMENT_ALIGNMENT_BITS 140 +#define UDI_DMA_ELEMENT_LENGTH_BITS 141 +#define UDI_DMA_ELEMENT_GRANULARITY_BITS 142 +/* DMA Constraints for Special Addressing */ +#define UDI_DMA_ADDR_FIXED_BITS 150 +#define UDI_DMA_ADDR_FIXED_TYPE 151 +#define UDI_DMA_ADDR_FIXED_VALUE_LO 152 +#define UDI_DMA_ADDR_FIXED_VALUE_HI 153 +/* DMA Constraints on DMA Access Behavior */ +#define UDI_DMA_SEQUENTIAL 160 +#define UDI_DMA_SLOP_IN_BITS 161 +#define UDI_DMA_SLOP_OUT_BITS 162 +#define UDI_DMA_SLOP_OUT_EXTRA 163 +#define UDI_DMA_SLOP_BARRIER_BITS 164 +/* Values for UDI_DMA_SCGTH_ENDIANNESS */ +#define UDI_DMA_LITTLE_ENDIAN (1U<<6) +#define UDI_DMA_BIG_ENDIAN (1U<<5) +/* Values for UDI_DMA_ADDR_FIXED_TYPE */ +#define UDI_DMA_FIXED_ELEMENT 1 +/** + * \} + */ +// DMA Constraints Management +typedef struct udi_dma_constraints_attr_spec_s udi_dma_constraints_attr_spec_t; +typedef void udi_dma_constraints_attr_set_call_t( + udi_cb_t *gcb, udi_dma_constraints_t new_constraints, udi_status_t status + ); +typedef struct udi_dma_limits_s udi_dma_limits_t; + + +// === STRUCTURES === +// --- DMA Constraints Management --- +struct udi_dma_constraints_attr_spec_s +{ + udi_dma_constraints_attr_t attr_type; + udi_ubit32_t attr_value; +}; +// --- DMA Core --- +struct udi_dma_limits_s +{ + udi_size_t max_legal_contig_alloc; + udi_size_t max_safe_contig_alloc; + udi_size_t cache_line_size; +}; +struct udi_scgth_element_32_s +{ + udi_ubit32_t block_busaddr; + udi_ubit32_t block_length; +}; +struct udi_scgth_element_64_s +{ + udi_busaddr64_t block_busaddr; + udi_ubit32_t block_length; + udi_ubit32_t el_reserved; +}; +/* Extension Flag */ +#define UDI_SCGTH_EXT 0x80000000 +struct udi_scgth_s +{ + udi_ubit16_t scgth_num_elements; + udi_ubit8_t scgth_format; + udi_boolean_t scgth_must_swap; + union { + udi_scgth_element_32_t *el32p; + udi_scgth_element_64_t *el64p; + } scgth_elements; + union { + udi_scgth_element_32_t el32; + udi_scgth_element_64_t el64; + } scgth_first_segment; +}; +/* Values for scgth_format */ +#define UDI_SCGTH_32 (1U<<0) +#define UDI_SCGTH_64 (1U<<1) +#define UDI_SCGTH_DMA_MAPPED (1U<<6) +#define UDI_SCGTH_DRIVER_MAPPED (1U<<7) + + + +// === FUNCTIONS === +// --- DMA Constraints Management --- +extern void udi_dma_constraints_attr_set( + udi_dma_constraints_attr_set_call_t *callback, + udi_cb_t *gcb, + udi_dma_constraints_t src_constraints, + const udi_dma_constraints_attr_spec_t *attr_list, + udi_ubit16_t list_length, + udi_ubit8_t flags + ); +/* Constraints Flags */ +#define UDI_DMA_CONSTRAINTS_COPY (1U<<0) + +extern void udi_dma_constraints_attr_reset( + udi_dma_constraints_t constraints, + udi_dma_constraints_attr_t attr_type + ); + +extern void udi_dma_constraints_free(udi_dma_constraints_t constraints); + +#include +#include + + +#endif diff --git a/Modules/UDI/main.c b/Modules/UDI/main.c index a7aab401..0f5e45b1 100644 --- a/Modules/UDI/main.c +++ b/Modules/UDI/main.c @@ -34,6 +34,8 @@ int UDI_LoadDriver(void *Base) int udiprops_size; int i, j; + Log("UDI_LoadDriver: (Base=%p)", Base); + if( Binary_FindSymbol(Base, "udi_init_info", (Uint*)&info) == 0) { Binary_Unload(Base); return 0; diff --git a/Modules/UDI/mem.c b/Modules/UDI/mem.c index 06d4893e..a09d54c5 100644 --- a/Modules/UDI/mem.c +++ b/Modules/UDI/mem.c @@ -4,7 +4,10 @@ */ #include #include -#include + +// === EXPORTS === +EXPORT(udi_mem_alloc); +EXPORT(udi_mem_free); // === CODE === void udi_mem_alloc( @@ -27,7 +30,3 @@ void udi_mem_free(void *target_mem) { free(target_mem); } - -// === EXPORTS === -EXPORT(udi_mem_alloc); -EXPORT(udi_mem_free); diff --git a/Modules/UDI/meta_gio.c b/Modules/UDI/meta_gio.c index a7ff7f8f..1618c27f 100644 --- a/Modules/UDI/meta_gio.c +++ b/Modules/UDI/meta_gio.c @@ -4,7 +4,6 @@ */ #include #include -#include // === EXPORTS === EXPORT(udi_gio_bind_req); diff --git a/Modules/UDI/meta_mgmt.c b/Modules/UDI/meta_mgmt.c index 44531ddc..45a02c46 100644 --- a/Modules/UDI/meta_mgmt.c +++ b/Modules/UDI/meta_mgmt.c @@ -4,7 +4,14 @@ */ #include #include -#include + +// === EXPORTS === +EXPORT(udi_devmgmt_req); +EXPORT(udi_devmgmt_ack); +EXPORT(udi_final_cleanup_req); +EXPORT(udi_final_cleanup_ack); +EXPORT(udi_static_usage); +EXPORT(udi_enumerate_no_children); // === CODE === void udi_devmgmt_req(udi_mgmt_cb_t *cb, udi_ubit8_t mgmt_op, udi_ubit8_t parent_ID ) @@ -31,8 +38,12 @@ void udi_final_cleanup_ack(udi_mgmt_cb_t *cb) LEAVE('-'); } -// === EXPORTS === -EXPORT(udi_devmgmt_req); -EXPORT(udi_devmgmt_ack); -EXPORT(udi_final_cleanup_req); -EXPORT(udi_final_cleanup_ack); +void udi_static_usage(udi_usage_cb_t *cb, udi_ubit8_t resource_level) +{ + UNIMPLEMENTED(); +} + +void udi_enumerate_no_children(udi_enumerate_cb_t *cb, udi_ubit8_t enumeration_level) +{ + UNIMPLEMENTED(); +} diff --git a/Modules/UDI/physio.c b/Modules/UDI/physio.c new file mode 100644 index 00000000..881c9f40 --- /dev/null +++ b/Modules/UDI/physio.c @@ -0,0 +1,25 @@ +/** + * \file physio.c + * \author John Hodge (thePowersGang) + */ +#include +#include +#include + +// === EXPORTS === +EXPORT(udi_dma_constraints_attr_reset); +EXPORT(udi_dma_constraints_free); + +// === CODE === +void udi_dma_constraints_attr_reset( + udi_dma_constraints_t constraints, + udi_dma_constraints_attr_t attr_type + ) +{ + UNIMPLEMENTED(); +} + +void udi_dma_constraints_free(udi_dma_constraints_t constraints) +{ + UNIMPLEMENTED(); +} diff --git a/Modules/UDI/physio/meta_bus.c b/Modules/UDI/physio/meta_bus.c new file mode 100644 index 00000000..e1e6a47d --- /dev/null +++ b/Modules/UDI/physio/meta_bus.c @@ -0,0 +1,38 @@ +/** + * \file physio/meta_bus.c + * \author John Hodge (thePowersGang) + */ +#include +#include +#include + +// === EXPORTS === +EXPORT(udi_bus_unbind_req); +EXPORT(udi_bus_unbind_ack); +EXPORT(udi_bus_bind_req); +EXPORT(udi_bus_bind_ack); + +// === CODE === +void udi_bus_unbind_req(udi_bus_bind_cb_t *cb) +{ + UNIMPLEMENTED(); +} +void udi_bus_unbind_ack(udi_bus_bind_cb_t *cb) +{ + UNIMPLEMENTED(); +} + +void udi_bus_bind_req(udi_bus_bind_cb_t *cb) +{ + UNIMPLEMENTED(); +} + +void udi_bus_bind_ack( + udi_bus_bind_cb_t *cb, + udi_dma_constraints_t dma_constraints, + udi_ubit8_t preferred_endianness, + udi_status_t status + ) +{ + UNIMPLEMENTED(); +} diff --git a/Modules/UDI/physio/meta_intr.c b/Modules/UDI/physio/meta_intr.c new file mode 100644 index 00000000..f4f50961 --- /dev/null +++ b/Modules/UDI/physio/meta_intr.c @@ -0,0 +1,48 @@ +/** + * \file physio/meta_intr.c + * \author John Hodge (thePowersGang) + */ +#include +#include +#include + +// === EXPORTS === +EXPORT(udi_intr_attach_req); +EXPORT(udi_intr_attach_ack); +EXPORT(udi_intr_attach_ack_unused); +EXPORT(udi_intr_detach_req); +EXPORT(udi_intr_detach_ack); +EXPORT(udi_intr_detach_ack_unused); +EXPORT(udi_intr_event_ind); + +// === CODE === +void udi_intr_attach_req(udi_intr_attach_cb_t *intr_attach_cb) +{ + UNIMPLEMENTED(); +} +void udi_intr_attach_ack(udi_intr_attach_cb_t *intr_attach_cb, udi_status_t status) +{ + UNIMPLEMENTED(); +} +void udi_intr_attach_ack_unused(udi_intr_attach_cb_t *intr_attach_cb, udi_status_t status) +{ + UNIMPLEMENTED(); +} + +void udi_intr_detach_req(udi_intr_detach_cb_t *intr_detach_cb) +{ + UNIMPLEMENTED(); +} +void udi_intr_detach_ack(udi_intr_detach_cb_t *intr_detach_cb) +{ + UNIMPLEMENTED(); +} +void udi_intr_detach_ack_unused(udi_intr_detach_cb_t *intr_detach_cb) +{ + UNIMPLEMENTED(); +} + +void udi_intr_event_ind(udi_intr_event_cb_t *intr_event_cb, udi_ubit8_t flags) +{ + UNIMPLEMENTED(); +} diff --git a/Modules/UDI/strmem.c b/Modules/UDI/strmem.c index 23785d6a..4ab1e208 100644 --- a/Modules/UDI/strmem.c +++ b/Modules/UDI/strmem.c @@ -4,7 +4,9 @@ */ #include #include -#include + +// === EXPORTS === +EXPORT(udi_snprintf); // === CODE === udi_size_t udi_snprintf(char *s, udi_size_t max_bytes, const char *format, ...) @@ -12,6 +14,3 @@ udi_size_t udi_snprintf(char *s, udi_size_t max_bytes, const char *format, ...) s[0] = '\0'; return 0; } - -// === EXPORTS === -EXPORT(udi_snprintf); -- 2.20.1