dev, prop hdr, uint test suit

This commit is contained in:
dzavalishin 2015-06-24 01:52:48 +03:00
parent 21b6afd147
commit 8b30732a89
7 changed files with 237 additions and 1 deletions

View File

@ -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 ""

121
src/openpod/pod_driver.h Executable file
View File

@ -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 drivers data structure
void *private_data;
} pod_driver;
#endif // POD_DRIVER_H

View File

@ -1,6 +1,7 @@
#include "pod_types.h" #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, ... ); errno_t pod_log_print( int loglevel, const char **format, ... );
void pod_panic(const char *fmt, ...)
// ------------------------------------------------------------------ // ------------------------------------------------------------------

101
src/openpod/pod_properties.h Executable file
View File

@ -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 );