From 8b30732a89a8be9b5c769f7cbc18bde33fd7e8eb Mon Sep 17 00:00:00 2001 From: dzavalishin Date: Wed, 24 Jun 2015 01:52:48 +0300 Subject: [PATCH] dev, prop hdr, uint test suit --- {tmp => src/libs/openpod_rq}/pod_dev_q.c | 0 src/openpod/openpod.h | 12 +++ {tmp => src/openpod}/pod_dev_q.h | 0 src/openpod/pod_driver.h | 121 +++++++++++++++++++++++ src/openpod/pod_kernel_api.h | 4 +- src/openpod/pod_properties.h | 101 +++++++++++++++++++ {tmp => src/openpod}/pod_queues.h | 0 7 files changed, 237 insertions(+), 1 deletion(-) rename {tmp => src/libs/openpod_rq}/pod_dev_q.c (100%) rename {tmp => src/openpod}/pod_dev_q.h (100%) create mode 100755 src/openpod/pod_driver.h create mode 100755 src/openpod/pod_properties.h rename {tmp => src/openpod}/pod_queues.h (100%) diff --git a/tmp/pod_dev_q.c b/src/libs/openpod_rq/pod_dev_q.c similarity index 100% rename from tmp/pod_dev_q.c rename to src/libs/openpod_rq/pod_dev_q.c diff --git a/src/openpod/openpod.h b/src/openpod/openpod.h index e69de29..080b3cb 100755 --- a/src/openpod/openpod.h +++ b/src/openpod/openpod.h @@ -0,0 +1,12 @@ +// Just include all main specification headres + +#include "pod_types.h" + +#include "pod_dev_class.h" +#include "" +#include "" +#include "" +#include "" +#include "" +#include "" +#include "" diff --git a/tmp/pod_dev_q.h b/src/openpod/pod_dev_q.h similarity index 100% rename from tmp/pod_dev_q.h rename to src/openpod/pod_dev_q.h diff --git a/src/openpod/pod_driver.h b/src/openpod/pod_driver.h new file mode 100755 index 0000000..aea1443 --- /dev/null +++ b/src/openpod/pod_driver.h @@ -0,0 +1,121 @@ +#ifndef POD_DRIVER_H +#define POD_DRIVER_H + +#include "pod_properties.h" + +//******************************************************************* +// +// OpenPOD +// +// Driver level definitions +// +//******************************************************************* + +struct pod_driver; + +//------------------------------------------------------------------- +// +// Driver methods, required +// +//------------------------------------------------------------------- + +typedef struct { + +errno_t (*pod_construct)( struct pod_driver *drv ); +errno_t (*pod_destruct)( struct pod_driver *drv ); + + +errno_t (*pod_activate)( struct pod_driver *drv ); +errno_t (*pod_deactivate)( struct pod_driver *drv ); + + +errno_t (*pod_sense)( struct pod_driver *drv ); +//errno_t (*pod_probe)( struct pod_driver *drv, pod_bus *bus, pod_bus_dev *bdev ); + +} pod_dev_required_f; + +//------------------------------------------------------------------- +// +// Driver methods, optional +// +//------------------------------------------------------------------- + + +typedef enum +{ + pod_sleep_undefined, // Do the best you can + pod_sleep_fast, // Must take uSeconds to wake + pod_sleep_norm, // Must take mSeconds to wake + pod_sleep_slow, // Must take seconds to wake + pod_sleep_undefined, // Can take forever (disk spin) to wake +} pod_sleep_level; + + +typedef struct { + +errno_t (*pod_get_property)( pod_properties *p, const char *pName, char *pValue, int vlen ); +errno_t (*pod_set_property)( pod_properties *p, const char *pName, const char *pValue ); +errno_t (*pod_list_properties)( pod_properties *p, int nProperty, char *pName, int vlen ); + + +errno_t (*pod_save_state)( struct pod_driver *drv, char **state_xml ); +errno_t (*pod_load_state)( struct pod_driver *drv, const char *state_xml ); + +errno_t (*pod_sleep)( struct pod_driver *drv, pod_sleep_level l ); +errno_t (*pod_awake)( struct pod_driver *drv ); + +} pod_dev_optional_f; + + + +//------------------------------------------------------------------- +// +// Driver descriptor +// +//------------------------------------------------------------------- + + +typedef struct pod_driver +{ + char magic[4]; // magic number + + // Minor change means API is extended, but compatible + uint8_t API_version_major; + uint8_t API_version_minor; + + // i32, i64, arm32, arm64, mips32, mips64, ... + uint8_t arch_major; + uint8_t arch_minor; // undefined, must be 0 + + uint8_t class_id; + uint8_t pad0; + uint8_t pad1; + uint8_t pad2; + +//uint32_t capabilities; // tbd. + + char *name; + + // lifecycle entry points function pointers + pod_dev_required_f calls; + pod_dev_optional_f *optional; + + pod_properties *prop; + +/** + * таблица функций ядра для драйвера - используется если нельзя пролинковать + * напрямую (функции заменяются матросами, которые через эту таблицу идут в + * ядро - см. pod_kernel_api.h) +**/ + kernel_f *kernel_driver_api; + + // private driver’s data structure + void *private_data; + +} pod_driver; + + + + + +#endif // POD_DRIVER_H diff --git a/src/openpod/pod_kernel_api.h b/src/openpod/pod_kernel_api.h index b9fc8cf..10187bb 100755 --- a/src/openpod/pod_kernel_api.h +++ b/src/openpod/pod_kernel_api.h @@ -1,6 +1,7 @@ #include "pod_types.h" +#include "pod_driver.h" // ------------------------------------------------------------------ // @@ -55,11 +56,12 @@ errno_t pod_kernel_signal_cond( pod_cond_t *cond ); // ------------------------------------------------------------------ // -// Logging +// Logging and panic // // ------------------------------------------------------------------ errno_t pod_log_print( int loglevel, const char **format, ... ); +void pod_panic(const char *fmt, ...) // ------------------------------------------------------------------ diff --git a/src/openpod/pod_properties.h b/src/openpod/pod_properties.h new file mode 100755 index 0000000..a1fb964 --- /dev/null +++ b/src/openpod/pod_properties.h @@ -0,0 +1,101 @@ + +//******************************************************************* +// +// OpenPOD +// +// Driver level definitions +// +//******************************************************************* + +typedef enum +{ + pt_int32, + pt_mstring, // malloced string + pt_enum32, // enum int32 - unimpl! +} pod_property_type_t; + + +struct pod_property; + +typedef struct pod_properties + //u_int32_t prefix; // 4-byte char prefix of this group, like 'dev.', 'gen.' or 'fsp.' + //const char * prefix; // 4-byte char prefix of this group, like 'dev.', 'gen.' or 'fsp.' + + struct pod_property *list; + size_t lsize; + + //! Get pointer to property value + void * (*valp)(struct pod_properties *ps, void *context, size_t offset ); + + + +} pod_properties; + + + +typedef struct pod_property { + pod_property_type_t type; + const char *name; + size_t offset; + void *valp; + + char **val_list; // for enums + + void (*activate)(struct pod_properties *ps, void *context, size_t offset, void *vp ); + errno_t (*setf)(struct pod_properties *ps, void *context, size_t offset, void *vp, const char *val); + // unused yet + errno_t (*getf)(struct pod_properties *ps, void *context, size_t offset, void *vp, char *val, size_t len); +} pod_property; + + + +#define PROP_COUNT(__plist) (sizeof(__plist)/sizeof(__plist[0])) + + + +//------------------------------------------------------------------- +// +// Generic property manipulation code +// +//------------------------------------------------------------------- + + +errno_t pod_gen_setproperty( pod_properties *ps, void *context, const char *pName, const char *pValue ); +errno_t pod_gen_getproperty( pod_properties *ps, void *context, const char *pName, char *pValue, int vlen ); +errno_t pod_gen_listproperties( pod_properties *ps, int nProperty, char *pValue, int vlen ); + + +//------------------------------------------------------------------- +// +// Generic property manipulation code for a driver. +// +// Can be filled into the driver optional methods table. +// +//------------------------------------------------------------------- + + +struct pod_driver; + +errno_t gen_dev_listproperties( struct pod_driver *drv, int nProperty, char *pValue, int vlen ); +errno_t gen_dev_getproperty( struct pod_driver *drv, const char *pName, char *pValue, int vlen ); +errno_t gen_dev_setproperty( structpod_driver *drv, const char *pName, const char *pValue ); + + + + + +//------------------------------------------------------------------- +// +// Generic property manipulation code for a device. +// +//------------------------------------------------------------------- + + +struct pod_device; + +errno_t gen_dev_listproperties( struct pod_device *dev, int nProperty, char *pValue, int vlen ); +errno_t gen_dev_getproperty( struct pod_device *dev, const char *pName, char *pValue, int vlen ); +errno_t gen_dev_setproperty( struct pod_device *dev, const char *pName, const char *pValue ); + + + diff --git a/tmp/pod_queues.h b/src/openpod/pod_queues.h similarity index 100% rename from tmp/pod_queues.h rename to src/openpod/pod_queues.h