From 96b61dc9b0b68bff80f584d82e6696108d72f9bd Mon Sep 17 00:00:00 2001
From: Rolf Bork <rbork@caltech.edu>
Date: Tue, 6 Oct 2020 09:52:10 -0500
Subject: [PATCH] Modified I/O mapping info pasing from IOP to user models for
 binary I/O cards. With previous change for ADC/DAC mapping to allow DAC
 models in any order, BIO mapping needed to change to same structure.

---
 src/fe/mapApp.c           | 12 ++++++------
 src/fe/moduleLoadCommon.c |  3 ++-
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/fe/mapApp.c b/src/fe/mapApp.c
index e9a470c8e..f3dc18535 100644
--- a/src/fe/mapApp.c
+++ b/src/fe/mapApp.c
@@ -95,7 +95,7 @@ mapPciModules( CDS_HARDWARE* pCds )
 
             case CON_6464DIO:
                 if ( ( pCds->cards_used[ jj ].type == CON_6464DIO ) &&
-                     ( pCds->cards_used[ jj ].instance == doCnt ) )
+                     ( pCds->cards_used[ jj ].instance == ioMemData->card[ ii ] ) )
                 {
                     kk = pCds->doCount;
                     pCds->doType[ kk ] = ioMemData->model[ ii ];
@@ -107,7 +107,7 @@ mapPciModules( CDS_HARDWARE* pCds )
                     status += 2;
                 }
                 if ( ( pCds->cards_used[ jj ].type == CDO64 ) &&
-                     ( pCds->cards_used[ jj ].instance == doCnt ) )
+                     ( pCds->cards_used[ jj ].instance == ioMemData->card[ ii ] ) )
                 {
                     kk = pCds->doCount;
                     pCds->doType[ kk ] = CDO64;
@@ -119,7 +119,7 @@ mapPciModules( CDS_HARDWARE* pCds )
                     status++;
                 }
                 if ( ( pCds->cards_used[ jj ].type == CDI64 ) &&
-                     ( pCds->cards_used[ jj ].instance == doCnt ) )
+                     ( pCds->cards_used[ jj ].instance == ioMemData->card[ ii ] ) )
                 {
                     kk = pCds->doCount;
                     pCds->doType[ kk ] = CDI64;
@@ -133,7 +133,7 @@ mapPciModules( CDS_HARDWARE* pCds )
                 break;
             case CON_32DO:
                 if ( ( pCds->cards_used[ jj ].type == CON_32DO ) &&
-                     ( pCds->cards_used[ jj ].instance == do32Cnt ) )
+                     ( pCds->cards_used[ jj ].instance == ioMemData->card[ ii ] ) )
                 {
                     kk = pCds->doCount;
                     pCds->doType[ kk ] = ioMemData->model[ ii ];
@@ -146,7 +146,7 @@ mapPciModules( CDS_HARDWARE* pCds )
                 break;
             case ACS_16DIO:
                 if ( ( pCds->cards_used[ jj ].type == ACS_16DIO ) &&
-                     ( pCds->cards_used[ jj ].instance == doIIRO16Cnt ) )
+                     ( pCds->cards_used[ jj ].instance == ioMemData->card[ ii ] ) )
                 {
                     kk = pCds->doCount;
                     pCds->doType[ kk ] = ioMemData->model[ ii ];
@@ -159,7 +159,7 @@ mapPciModules( CDS_HARDWARE* pCds )
                 break;
             case ACS_8DIO:
                 if ( ( pCds->cards_used[ jj ].type == ACS_8DIO ) &&
-                     ( pCds->cards_used[ jj ].instance == doIIRO8Cnt ) )
+                     ( pCds->cards_used[ jj ].instance == ioMemData->card[ ii ] ) )
                 {
                     kk = pCds->doCount;
                     pCds->doType[ kk ] = ioMemData->model[ ii ];
diff --git a/src/fe/moduleLoadCommon.c b/src/fe/moduleLoadCommon.c
index ecc512e48..2af4046e9 100644
--- a/src/fe/moduleLoadCommon.c
+++ b/src/fe/moduleLoadCommon.c
@@ -125,7 +125,7 @@ print_io_info( CDS_HARDWARE* cdsp , int iopmodel)
             }
         }
     }
-    kk += cdsp->dioCount;
+    kk += cdsp->doCount;
     printf( "******************************************************************"
             "*********\n" );
     printf( "" SYSTEM_NAME_STRING_LOWER ":%d DIO cards found\n",
@@ -423,6 +423,7 @@ send_io_info_to_mbuf( int totalcards, CDS_HARDWARE* pCds )
             tdsCount++;
         }
         ioMemData->model[ kk ] = pCds->doType[ ii ];
+        ioMemData->card[ kk ] = pCds->doInstance[ ii ];
         // Unlike ADC and DAC, where a memory buffer number is passed, a PCIe
         // address is passed for DIO cards.
         ioMemData->ipc[ kk ] = pCds->pci_do[ ii ];
-- 
GitLab