📄 idpcidevices.c
字号:
Data = *(volatile int *)(PCIBase+RegAddress); SwapData = (Data & 0xff) << 24; SwapData |= (Data & 0xff00) << 8; SwapData |= (Data & 0xff0000) >> 8; SwapData |= (Data & 0xff000000) >> 24; return(SwapData);}/* The following are general purpose memory reading routines */void Peek8(int Address){ char cData; cData = *(volatile char *)Address; printf("0x%x = 0x%x\n",Address, (0xff & (int)cData));}void Peek16(int Address){ short sData; sData = *(volatile short *)Address; printf("0x%x = 0x%x\n",Address, (0xffff & (int)sData));}void Peek32(int Address){ int iData; iData = *(volatile int *)Address; printf("0x%x = 0x%x\n",Address, iData);}void Poke8(int Address, int cData){ *(volatile char *)Address = (char)cData; printf("0x%x = 0x%x\n",Address, (0xff & (int)cData));}void Poke16(int Address, int sData){ *(volatile short *)Address = (short)sData; printf("0x%x = 0x%x\n",Address, (0xffff & (int)sData));}void Poke32(int Address, int iData){ *(volatile int *)Address = iData; printf("0x%x = 0x%x\n",Address, iData);}void Init7110(void){ int pciBusNo,pciDevNo,pciFuncNo; int iDummy,i; short sDummy; printf("\n\n"); printf("CPU_PCI_IO_ADRS 0x%x PCI_IO_ADRS 0x%x\n",CPU_PCI_IO_ADRS,PCI_IO_ADRS); printf("CPU_PCI_MEM_ADRS 0x%x PCI_MEM_ADRS 0x%x\n\n",CPU_PCI_MEM_ADRS,PCI_MEM_ADRS);/* printf("CLIB_PCI_FIFO_ADRS 0x%x CLIB_PCI_ALTERA_ADRS 0x%x\n",CLIB_PCI_FIFO_ADRS,CLIB_PCI_ALTERA_ADRS); printf("CLIB_CPU_FIFO_ADRS 0x%x CLIB_CPU_ALTERA_ADRS 0x%x\n\n",CLIB_CPU_FIFO_ADRS|CPU_PCI_MEM_ADRS,CLIB_CPU_ALTERA_ADRS|CPU_PCI_IO_ADRS);*/ if((pciFindDevice(C44_PCI_DEVICE_ID&0xffff, (C44_PCI_DEVICE_ID>>16)&0xffff, 0,&pciBusNo,&pciDevNo,&pciFuncNo) != ERROR)) { /* Initialize PCI Configuration Registers enough to access Local Configuration Registers */ pciConfigOutLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_0, C44_PCI_MEM0_ADRS); pciConfigInLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_0, &iDummy); printf("PCI_CFG_BASE_ADDRESS_0 = 0x%x\n",iDummy); pciConfigOutLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_1, C44_PCI_IO0_ADRS); pciConfigInLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_1, &iDummy); printf("PCI_CFG_BASE_ADDRESS_1 = 0x%x\n",iDummy); pciConfigOutLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_2, 0); pciConfigInLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_2, &iDummy); printf("PCI_CFG_BASE_ADDRESS_2 = 0x%x\n",iDummy); pciConfigOutLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_3, 0); pciConfigInLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_3, &iDummy); printf("PCI_CFG_BASE_ADDRESS_3 = 0x%x\n",iDummy); pciConfigOutLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_4, 0); pciConfigInLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_4, &iDummy); printf("PCI_CFG_BASE_ADDRESS_4 = 0x%x\n",iDummy); pciConfigOutLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_5, 0); pciConfigInLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_5, &iDummy); printf("PCI_CFG_BASE_ADDRESS_5 = 0x%x\n",iDummy); pciConfigOutWord (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_COMMAND, ( PCI_CMD_MEM_ENABLE | PCI_CMD_IO_ENABLE)); pciConfigInWord (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_COMMAND, &sDummy ); printf("PCI_CFG_COMMAND = 0x%x\n",sDummy); /* Now we can access Local Configuration Registers so begin to do so */ /* Register settings to enable basic communication to PLX9080 has been */ /* initialized from EEPROM at 7110 power on */#ifdef SETUP_LOCAL_CONFIG_REGISTERS PciDevWriteLocCfgReg(C44_PCI_MEM0_ADRS, CNTRL, 0x00ff7580);/*0x00ff7580*//*0x00ff3580*//*0x00fd3580*/ /* Control */ PciDevWriteLocCfgReg(C44_PCI_MEM0_ADRS, LAS0RR, 0x0ffffff0); /* Fifo mapping */ PciDevWriteLocCfgReg(C44_PCI_MEM0_ADRS, LAS0BA, 0x000003c1); /* A0 & A1 of Local bus aren't used */ PciDevWriteLocCfgReg(C44_PCI_MEM0_ADRS, LAS0BRD,0x0180003f); /*0x01800022*//*0x0180003f*//*0x0180003a*//*0x0180001a*//* Fifo A0 = Local A2 */ PciDevWriteLocCfgReg(C44_PCI_MEM0_ADRS, CS0BASE, 0x000003c5); /* Fifo A1 = Local A3 */ /* Shift Address bits accordingly */ PciDevWriteLocCfgReg(C44_PCI_MEM0_ADRS, LAS1RR, 0x0fffffe1); /* Altera mapping */ PciDevWriteLocCfgReg(C44_PCI_MEM0_ADRS, LAS1BA, 0x00000141); /* A0 & A1 of Local bus aren't used */ PciDevWriteLocCfgReg(C44_PCI_MEM0_ADRS, LAS1BRD, 0x014060c2); /* Altera A0 = Local A2 */ PciDevWriteLocCfgReg(C44_PCI_MEM0_ADRS, CS1BASE, 0x00000000); /* Altera A1 = Local A3 */ /* Shift Address bits accordingly */ /* Now we can enable these memory maps in the PCI Configuration Registers */ pciConfigOutLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_2, C44_PCI_FIFO_ADRS); pciConfigInLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_2, &iDummy); printf("PCI_CFG_BASE_ADDRESS_2 = 0x%x\n",iDummy); pciConfigOutLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_3, CLIB_PCI_ALTERA_ADRS); pciConfigInLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_3, &iDummy); printf("PCI_CFG_BASE_ADDRESS_3 = 0x%x\n",iDummy);#endif } else { printf("Error initializing Pentek 7110\n"); } printf(" 7110 setup: pciBusNo = %d\n",pciBusNo); printf(" pciDevNo = %d\n",pciDevNo); printf(" pciFuncNo = %d\n",pciFuncNo); printf(" C44_PCI_IO0_ADRS 0x%x\n",C44_PCI_IO0_ADRS); printf(" C44_PCI_MEM0_ADRS 0x%x\n",C44_PCI_MEM0_ADRS); printf("\nLocal configuration registers\n"); for(i=0; i<12; i++) { iDummy = PciDevReadLocCfgReg(C44_PCI_MEM0_ADRS,(i*4)); printf("0x%x = 0x%x\n",(i*4), iDummy); } =09 for(i=16; i<20; i++) { iDummy = PciDevReadLocCfgReg(C44_PCI_MEM0_ADRS,(i*4)); printf("0x%x = 0x%x\n",(i*4), iDummy); } =09 for(i=24; i<29; i++) { iDummy = PciDevReadLocCfgReg(C44_PCI_MEM0_ADRS,(i*4)); printf("0x%x = 0x%x\n",(i*4), iDummy); } =09}void PCIReadBack7110(void){ int pciBusNo,pciDevNo,pciFuncNo; int Bar0,Bar1,Bar2,Bar3,Bar4,Bar5; if((pciFindDevice(C44_PCI_DEVICE_ID&0xffff, (C44_PCI_DEVICE_ID>>16)&0xffff, 0,&pciBusNo,&pciDevNo,&pciFuncNo) != ERROR)) { pciConfigOutLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_0, 0xffffffff); pciConfigOutLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_1, 0xffffffff); pciConfigOutLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_2, 0xffffffff); pciConfigOutLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_3, 0xffffffff); pciConfigOutLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_4, 0xffffffff); pciConfigOutLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_5, 0xffffffff); pciConfigInLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_0, &Bar0); pciConfigInLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_1, &Bar1); pciConfigInLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_2, &Bar2); pciConfigInLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_3, &Bar3); pciConfigInLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_4, &Bar4); pciConfigInLong (pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_BASE_ADDRESS_5, &Bar5); printf(" 7110 PCI Readback Base Address Registers\n"); printf(" PCI_CFG_BASE_ADDRESS_0 = 0x%x\n",Bar0); printf(" PCI_CFG_BASE_ADDRESS_1 = 0x%x\n",Bar1); printf(" PCI_CFG_BASE_ADDRESS_2 = 0x%x\n",Bar2); printf(" PCI_CFG_BASE_ADDRESS_3 = 0x%x\n",Bar3); printf(" PCI_CFG_BASE_ADDRESS_4 = 0x%x\n",Bar4); } else { printf("Error initializing CLIB\n"); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -