X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=UDI%2Fdrivers%2Fhelpers.h;h=dde98164c6cff4952c611d11e28ce44affbe8155;hb=545c440973f9676efe7cb01edf9ec47b61023513;hp=9b827b3dc65ab7e85490e785248d048e8fffe6fd;hpb=4e407e69bd660e9a32644281733192193ee6e8c8;p=tpg%2Facess2.git diff --git a/UDI/drivers/helpers.h b/UDI/drivers/helpers.h index 9b827b3d..dde98164 100644 --- a/UDI/drivers/helpers.h +++ b/UDI/drivers/helpers.h @@ -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