Hello,nice people:


we are now using Echotek AD 812 ,Midas M3220SR2,and VMFC 4310 to
transfer data from AD to vmfc's buffer,but we could only use one
channel of the Race++.Now we want to use the two race channels
simultaneously .And I do the following function calling:


1st:if((rc = pxb_drv_init(0, NULL)) != PXB_SUCCESS)
pxb_err_info("pxb_drv_init",rc*);
2nd:if((rc =
pxb_smb_attach(RACE_ADDR,RACE_*ROUTE,0,RACE_SIZE,0 ,&my_smb))
!= PXB_SUCCESS)
pxb_err_info("pxb_smb_attach",*rc);
3rd:if((rc = pxb_race2pci_win_set(PXB_ID_PR*IMARY, RACE2PCI_WIN_MEM,
0x08000000, RACE_SIZE)) != OK)
pxb_err_info("pxb_race2pci_win*_set",rc);
4th:if((rc=pxb_race2pci_win_se*t(PXB_ID_SECONDARY, RACE2PCI_WI*N_MEM,0x08000000,RACE_SIZE))!=

OK)
pxb_err_info("pxb_race2pci_win*_set_secondary", rc);


but unfortunately the 4th function returns error,and results message as

follows:
!!!!!!!!!!
PXB_NO_ACCESS
!!!!!!!!!!


some extra message that may be helpful is that we had successfully used

one channel of the two race++ channel.


So,my question is :Should I do some other configuration work in bsp or
some other file?How could I add the second window for the second
PXB?After that ,Should I try some other route code accordingly?


Thank you very much for you valuable help!
With Best Regards!


Yours,Sincerely
Mei Guodong


the raceInit codes may be helpful as well.
//*race_midas.cpp*//
#include "stdio.h"
#include "race_drv.h"


#include "../Common/CommonDef.h"


#define RACE2PCI_WIN_MEM 0
#define RACE2PCI_WIN_MIO 1
#define RACE2PCI_WIN_IO 2


#define RACE_ADDR (0x00000000)
#define RACE_ROUTE (0x00000000)
#define RACE_SIZE (128 * 1024 * 1024)


typedef void* PXB_handle;
typedef void* PXB_device;


/* functions in lib race_drv.o */


/*
extern int sys_pxb_mgr_get_handle(PXB_ID,*PXB_handle*,PXB_dev ice*);
extern int sys_pxb_race2pci_win_get
(PXB_handle,int,uint32_t*,uint*32_t*);
extern int sys_pxb_race2pci_win_set
(PXB_handle,int,uint32_t,uint3*2_t);
*/


int pxb_race2pci_win_set(PXB_ID,in*t,uint32_t,uint32_t );
int pxb_race2pci_win_get(PXB_ID,in*t type,uint32_t
*pci_base,uint32_t*);


static int pxb_err_info(char *info,int rc)
{
mPrint("ERROR: \"%s\" returned error 0x%x (%s), %s\n",
info,rc,pxb_drv_errstr(rc,0),p*xb_drv_errstr(rc,1) );
return rc;



}


void initRace()
{
int rc;
int count;
SMB_handle my_smb = NULL;
unsigned long smb_addr;
unsigned long smb_route;
unsigned long smb_ret_route;
unsigned long nbytes;

/***** Initialize driver interface *****/
if((rc = pxb_drv_init(0, NULL)) != PXB_SUCCESS)
pxb_err_info("pxb_drv_init",rc*);


if((rc=pxb_ioctl(PXB_ID_SECOND*ARY,PXB_IOCTL_ACCEP T_ACCESS,0)*)!=OK)
pxb_err_info("pxb_ioctl :PXB_IOCTL_ACCEPT_ACCESS",rc);


/***** Set window for traffic from RACEway to PCI *****/
/* BSP 1.2/1.1 */


if((rc = pxb_race2pci_win_set(PXB_ID_PR*IMARY, RACE2PCI_WIN_MEM,
0xc0000000, RACE_SIZE)) != OK)
pxb_err_info("pxb_race2pci_win*_set",rc);


//new added by mgd


if((rc=pxb_race2pci_win_set


(PXB_ID_SECONDARY,RACE2PCI_WIN*_MEM,0xc8000000,RAC E_SIZE))!= OK)
pxb_err_info("pxb_race2pci_win*_set_secondary", rc);


//new added by mgd


mPrint("\nRACE++ mapped to 0x%lx\n", 0xc0000000);


return;}


int pxb_race2pci_win_set (
PXB_ID pxbId,
int type,
uint32_t pci_base,
uint32_t pci_size
)
{
PXB_handle handle=0;
PXB_device device=0;
int rc;


rc=sys_pxb_mgr_get_handle(pxbI*d,&handle,&device);
if(rc==0)
rc=sys_pxb_race2pci_win_set(ha*ndle,type,pci_base, pci_size);
return rc;



}


int pxb_race2pci_win_get (
PXB_ID pxbId,
int type,
uint32_t *pci_base,
uint32_t *pci_size
)
{
PXB_handle handle=0;
PXB_device device=0;
int rc;

rc=sys_pxb_mgr_get_handle(pxbI*d,&handle,&device);
if(rc==0)
rc=sys_pxb_race2pci_win_get(ha*ndle,type,pci_base, pci_size);
return rc;

}