diff --git a/src/db/Makefile.Host b/src/db/Makefile.Host new file mode 100644 index 000000000..8c3110d54 --- /dev/null +++ b/src/db/Makefile.Host @@ -0,0 +1,31 @@ +# Makefile.Host for base/src/db +# +# + +TOP = ../../.. +include $(TOP)/config/CONFIG_BASE + +# includes to install from this sub-project +# +INC += drvTS.h +INC += drvSup.h +INC += callback.h +INC += dbLock.h +INC += dbAccess.h +INC += dbConvert.h +INC += dbEvent.h +INC += dbScan.h +INC += db_access.h +INC += dbAddr.h +INC += db_field_log.h +INC += fast_lock.h +INC += initHooks.h +INC += recSup.h +INC += devSup.h +INC += taskwd.h +INC += recGbl.h +INC += dbBkpt.h +INC += devLib.h + +include $(TOP)/config/RULES.Host + diff --git a/src/db/dbAccess.c b/src/db/dbAccess.c index 768be3a63..17d318490 100644 --- a/src/db/dbAccess.c +++ b/src/db/dbAccess.c @@ -326,6 +326,9 @@ static void getOptions(DBADDR *paddr,void **poriginal,long *options,void *pflin) pcommon = (dbCommon *)(paddr->precord); if( (*options) & DBR_STATUS ) { if(pfl!=NULL) { + /* This gives warning: + * ANSI C forbids use of cast expressions as lvalues + */ *((unsigned short *)pbuffer)++ = pfl->stat; *((unsigned short *)pbuffer)++ = pfl->sevr; } else { diff --git a/src/db/devLib.c b/src/db/devLib.c index dc3af1333..c4dfd951b 100644 --- a/src/db/devLib.c +++ b/src/db/devLib.c @@ -79,12 +79,16 @@ LOCAL LIST addrFree[atLast]; LOCAL void *addrLast[atLast] = { (void *) 0xffff, (void *) 0xffffff, - (void *) 0xffffffff}; + (void *) 0xffffffff, + (void *) 0xffffff + }; LOCAL long addrFail[atLast] = { S_dev_badA16, S_dev_badA24, - S_dev_badA32}; + S_dev_badA32, + S_dev_badA24 + }; LOCAL FAST_LOCK addrListLock; LOCAL char addrListInit; @@ -421,27 +425,34 @@ void **ppLocalAddress) int s1; int s2; - s1 = sysBusToLocalAdrs( + if (EPICStovxWorksAddrType[addrType] == EPICSAddrTypeNoConvert) + { + *ppLocalAddress = pFirst; + } + else + { + s1 = sysBusToLocalAdrs( EPICStovxWorksAddrType[addrType], pLast, &pAddr); - s2 = sysBusToLocalAdrs( + s2 = sysBusToLocalAdrs( EPICStovxWorksAddrType[addrType], pFirst, &pAddr); - if(s1 || s2){ - errPrintf( - S_dev_vxWorksAddrMapFail, - __FILE__, - __LINE__, - "%s base=0X %X size = 0X %X", - epicsAddressTypeName[addrType], - pFirst, - pLast-pFirst+1); - return S_dev_vxWorksAddrMapFail; - } + if(s1 || s2){ + errPrintf( + S_dev_vxWorksAddrMapFail, + __FILE__, + __LINE__, + "%s base=0X %X size = 0X %X", + epicsAddressTypeName[addrType], + pFirst, + pLast-pFirst+1); + return S_dev_vxWorksAddrMapFail; + } - *ppLocalAddress = (void *) pAddr; + *ppLocalAddress = (void *) pAddr; + } } /* @@ -1175,12 +1186,19 @@ char *pLocation * every byte in the block must * map to a physical address */ - s = sysBusToLocalAdrs( + if (EPICStovxWorksAddrType[addrType] == EPICSAddrTypeNoConvert) + { + pPhysical = pLocation; + } + else + { + s = sysBusToLocalAdrs( EPICStovxWorksAddrType[addrType], pLocation, &pPhysical); - if(s<0){ - return S_dev_vxWorksAddrMapFail; + if(s<0){ + return S_dev_vxWorksAddrMapFail; + } } diff --git a/src/db/devLib.h b/src/db/devLib.h index b3f92b4ce..7e94ad734 100644 --- a/src/db/devLib.h +++ b/src/db/devLib.h @@ -70,7 +70,8 @@ typedef enum { atVMEA16, atVMEA24, atVMEA32, - atLast /* atLast must be the last enum in this list */ + atISA, /* memory mapped ISA access (until now only on PC) */ + atLast /* atLast must be the last enum in this list */ } epicsAddressType; #ifdef devLibGlobal @@ -78,7 +79,8 @@ char *epicsAddressTypeName[] = { "VME A16", "VME A24", - "VME A32" + "VME A32", + "ISA" }; #endif @@ -90,13 +92,15 @@ char *epicsAddressTypeName[] * we assume that the BSP are configured to use these * address modes by default */ +#define EPICSAddrTypeNoConvert -1 #ifdef devLibGlobal int EPICStovxWorksAddrType[] = { VME_AM_SUP_SHORT_IO, VME_AM_STD_SUP_DATA, - VME_AM_EXT_SUP_DATA - }; + VME_AM_EXT_SUP_DATA, + EPICSAddrTypeNoConvert + }; #endif long devAddressMap(void); /* print an address map */ diff --git a/src/vxWorks/db/devLib.c b/src/vxWorks/db/devLib.c index dc3af1333..c4dfd951b 100644 --- a/src/vxWorks/db/devLib.c +++ b/src/vxWorks/db/devLib.c @@ -79,12 +79,16 @@ LOCAL LIST addrFree[atLast]; LOCAL void *addrLast[atLast] = { (void *) 0xffff, (void *) 0xffffff, - (void *) 0xffffffff}; + (void *) 0xffffffff, + (void *) 0xffffff + }; LOCAL long addrFail[atLast] = { S_dev_badA16, S_dev_badA24, - S_dev_badA32}; + S_dev_badA32, + S_dev_badA24 + }; LOCAL FAST_LOCK addrListLock; LOCAL char addrListInit; @@ -421,27 +425,34 @@ void **ppLocalAddress) int s1; int s2; - s1 = sysBusToLocalAdrs( + if (EPICStovxWorksAddrType[addrType] == EPICSAddrTypeNoConvert) + { + *ppLocalAddress = pFirst; + } + else + { + s1 = sysBusToLocalAdrs( EPICStovxWorksAddrType[addrType], pLast, &pAddr); - s2 = sysBusToLocalAdrs( + s2 = sysBusToLocalAdrs( EPICStovxWorksAddrType[addrType], pFirst, &pAddr); - if(s1 || s2){ - errPrintf( - S_dev_vxWorksAddrMapFail, - __FILE__, - __LINE__, - "%s base=0X %X size = 0X %X", - epicsAddressTypeName[addrType], - pFirst, - pLast-pFirst+1); - return S_dev_vxWorksAddrMapFail; - } + if(s1 || s2){ + errPrintf( + S_dev_vxWorksAddrMapFail, + __FILE__, + __LINE__, + "%s base=0X %X size = 0X %X", + epicsAddressTypeName[addrType], + pFirst, + pLast-pFirst+1); + return S_dev_vxWorksAddrMapFail; + } - *ppLocalAddress = (void *) pAddr; + *ppLocalAddress = (void *) pAddr; + } } /* @@ -1175,12 +1186,19 @@ char *pLocation * every byte in the block must * map to a physical address */ - s = sysBusToLocalAdrs( + if (EPICStovxWorksAddrType[addrType] == EPICSAddrTypeNoConvert) + { + pPhysical = pLocation; + } + else + { + s = sysBusToLocalAdrs( EPICStovxWorksAddrType[addrType], pLocation, &pPhysical); - if(s<0){ - return S_dev_vxWorksAddrMapFail; + if(s<0){ + return S_dev_vxWorksAddrMapFail; + } } diff --git a/src/vxWorks/db/devLib.h b/src/vxWorks/db/devLib.h index b3f92b4ce..7e94ad734 100644 --- a/src/vxWorks/db/devLib.h +++ b/src/vxWorks/db/devLib.h @@ -70,7 +70,8 @@ typedef enum { atVMEA16, atVMEA24, atVMEA32, - atLast /* atLast must be the last enum in this list */ + atISA, /* memory mapped ISA access (until now only on PC) */ + atLast /* atLast must be the last enum in this list */ } epicsAddressType; #ifdef devLibGlobal @@ -78,7 +79,8 @@ char *epicsAddressTypeName[] = { "VME A16", "VME A24", - "VME A32" + "VME A32", + "ISA" }; #endif @@ -90,13 +92,15 @@ char *epicsAddressTypeName[] * we assume that the BSP are configured to use these * address modes by default */ +#define EPICSAddrTypeNoConvert -1 #ifdef devLibGlobal int EPICStovxWorksAddrType[] = { VME_AM_SUP_SHORT_IO, VME_AM_STD_SUP_DATA, - VME_AM_EXT_SUP_DATA - }; + VME_AM_EXT_SUP_DATA, + EPICSAddrTypeNoConvert + }; #endif long devAddressMap(void); /* print an address map */