Kernel/debug - Clean up Debug() method, bind to #define config
[tpg/acess2.git] / UDI / drivers / helpers.h
index 9b827b3..dde9816 100644 (file)
@@ -19,7 +19,8 @@
 #define CONTIN(suffix, call, args, params)     extern void _EXPJOIN(suffix##$,__LINE__) _ADDGCB params;\
        call( _EXPJOIN(suffix##$,__LINE__), gcb, _EXPLODE args); } \
        void _EXPJOIN(suffix##$,__LINE__) _ADDGCB params { \
-       rdata_t *rdata = gcb->context;
+       rdata_t *rdata = gcb->context; \
+       (void)rdata;
 
 /* Copied from http://projectudi.cvs.sourceforge.net/viewvc/projectudi/udiref/driver/udi_dpt/udi_dpt.h */
 #define UDIH_SET_ATTR_BOOLEAN(attr, name, val) \
@@ -62,4 +63,25 @@ struct s_pio_ops {
        udi_ubit32_t    length;
 };
 #define UDIH_PIO_OPS_ENTRY(list, attr, regset, base, len)      {list, ARRAY_COUNT(list), attr, regset, base, len}
+
+
+#define UDIH_INIT_PIO(fcnname, _array, index_field, final_code) \
+       void fcnname(udi_cb_t *gcb, udi_pio_handle_t new_pio_handle) {\
+               rdata_t *rdata = gcb->context; \
+               if( rdata->index_field != (udi_index_t)-1 ) { \
+                       rdata->pio_handles[rdata->index_field] = new_pio_handle; \
+               }\
+               rdata->index_field ++; \
+               if( rdata->index_field < sizeof(_array)/sizeof(_array[0]) ) { \
+                       const struct s_pio_ops  *ops = &pio_ops[rdata->index_field]; \
+                       udi_pio_map(bus_dev_bind__pio_map, gcb, \
+                               ops->regset_idx, ops->base_offset, ops->length, \
+                               ops->trans_list, ops->list_length, \
+                               UDI_PIO_LITTLE_ENDIAN, 0, 0 \
+                               ); \
+                       return ; \
+               } \
+               final_code \
+       }
+
 #endif

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