⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pspan_diag.c

📁 powerspan pci slave device driver
💻 C
📖 第 1 页 / 共 2 页
字号:

void PLX_EEPROMAccess(P9050_HANDLE hPlx)
{
    int cmd;
    DWORD addr;
    DWORD dwData;

    do
    {
        printf ("Access the board's serial EEPROM\n");
        printf ("--------------------------------\n");
        if (!P9050_EEPROMValid(hPlx))
            printf ("Note: PLX EEPROM valid BIT is 0\n");
        printf ("1. Display EEPROM content\n");
        printf ("2. Read dword from serial EEPROM on the board\n");
        printf ("3. Write dword to the serial EEPROM on the board\n");
        printf ("99. Back to main menu\n");
        printf ("\n");
        printf ("Enter option: ");
        cmd = 0;
        fgets(line, sizeof(line), stdin);
        sscanf (line, "%d",&cmd);
        switch (cmd)
        {
        case 1:
            for (addr=0; addr<0xff; addr += 4)
            {
                if (!(addr % 0x10))
                printf("\n %02x: ", addr);
                if (!P9050_EEPROMReadDWord(hPlx, addr, &dwData))
                {
                    printf("\nError occurred reading serial EEPROM - %s\n", P9050_ErrorString);
                    break;
                }
                printf("%08x  ", dwData);
            }
            printf ("\n");
            break;
        case 2:
            printf ("Enter address to read from (0-7f): ");
            fgets(line, sizeof(line), stdin);
            sscanf (line, "%x", &addr);
            if (P9050_EEPROMReadDWord(hPlx, addr, &dwData))
                printf ("Value read: %08x\n", dwData);
             else
                printf("Error occurred reading serial EEPROM - %s\n", P9050_ErrorString);
            break;

        case 3:
            printf ("Enter address to write to (0-7f): ");
            fgets(line, sizeof(line), stdin);
            sscanf (line, "%x", &addr);
            printf ("Enter data to write: ");
            fgets(line, sizeof(line), stdin);
            sscanf (line, "%x",&dwData);
            if (!P9050_EEPROMWriteDWord(hPlx, addr, dwData))
                printf("Error occurred reading serial EEPROM - %s\n", P9050_ErrorString);

            break;

        default:
            break;
        }
    } while (cmd!=99);
}

P9050_HANDLE PLX_LocateAndOpenBoard(DWORD dwVendorID, DWORD dwDeviceID)
{
    DWORD cards, my_card;
    P9050_HANDLE hPlx = NULL;

    if (dwVendorID==0)
    {
        printf ("Enter VendorID: ");
        fgets(line, sizeof(line), stdin);
        sscanf (line, "%x",&dwVendorID);
        if (dwVendorID==0) return NULL;

        printf ("Enter DeviceID: ");
        fgets(line, sizeof(line), stdin);
        sscanf (line, "%x",&dwDeviceID);
    }
    
    cards = P9050_CountCards (dwVendorID, dwDeviceID);
    
    if (cards==0) 
    {
        printf("%s", P9050_ErrorString);
        return NULL;
    }
    else if (cards==1) my_card = 1;
    else
    {
        DWORD i;

        printf("Found %d matching PCI cards\n", cards);
        printf("Select card (1-%d): ", cards);
        i = 0;
        fgets(line, sizeof(line), stdin);
        sscanf (line, "%d",&i);
        if (i>=1 && i <=cards) my_card = i;
        else 
        {
            printf ("Choice out of range\n");
            return NULL;
        }
    }
    // to correct an errata with BIT7 of BAR0 in some 9050 chips, use P9050_OPEN_FIX_BIT7
    if (P9050_Open (&hPlx, dwVendorID, dwDeviceID, my_card - 1, 0 /* P9050_OPEN_FIX_BIT7 */ ))
        printf ("PLX 9050 PCI card found!\n");
    else printf ("%s", P9050_ErrorString);
    return hPlx;
}


void P9050_test (void )
{

    int li;
    long ll;
    
    int number;
    short pVendorId;
    short pDeviceId;
    int   pBusNo;
    int   pDeviceNo;
    int   pFuncNo;
     

	
	// added begin by pgn
	for(number=0;number<32;number++)
	{
   	     if( pciGetDeviceNum(number,&pVendorId,&pDeviceId,&pBusNo,&pDeviceNo,&pFuncNo) == 0 )
 	     {
 	       	 printf("\n%d\n",number);
 		 printf("pVendorId is 0x%x.\n",pVendorId);
 		 printf("pDeviceId is 0x%x.\n",pDeviceId);
	  	 printf("pBusNo is 0x%x.\n",pBusNo);
		 printf("pDeviceNo is 0x%x.\n",pDeviceNo);
    		 printf("pFuncNo is 0x%x.\n",pFuncNo);
            }
            else
            {
            	 printf("\nerror%d\n",number);
            }
        
        
	    if( pciFindDevice(0x14f8,0x2091,number,&pBusNo,&pDeviceNo,&pFuncNo)==0)
	    {
   	    	printf("\n_pBusNo is 0x%x.\n",pBusNo);
  	        printf("_pDeviceNo is 0x%x.\n",pDeviceNo);
  	        printf("_pFuncNo is 0x%x.\n",pFuncNo);

	        pciConfigInLong(pBusNo,pDeviceNo,pFuncNo,0x10,&ll);
        	printf("_hPlx->addrDesc[0].dwAddr is 0x%x\n",ll);
        	pciConfigInAddressSpace(pBusNo,pDeviceNo,pFuncNo,0x10,&li);
        	printf("_hPlx->addrDesc[0].dwbytes is 0x%x\n",li);
                    
        	pciConfigInLong(pBusNo,pDeviceNo,pFuncNo,0x14,&ll);
        	printf("_hPlx->addrDesc[1].dwAddr is 0x%x\n",ll);
        	pciConfigInAddressSpace(pBusNo,pDeviceNo,pFuncNo,0x14,&li);
        	printf("_hPlx->addrDesc[1].dwbytes is 0x%x\n",li);
        
        	pciConfigInLong(pBusNo,pDeviceNo,pFuncNo,0x18,&ll);
        	printf("_hPlx->addrDesc[2].dwAddr is 0x%x\n",ll);
        	pciConfigInAddressSpace(pBusNo,pDeviceNo,pFuncNo,0x18,&li);
        	printf("_hPlx->addrDesc[2].dwbytes is 0x%x\n",li); 
        	
        	printf("\nfind device %d ok\n",number); 
             }
             else
             {
              	printf("find device %d error\n",number);
              	
             }
             
        }        
        // Added end by pgn
    
}


int plx9050(int argc, char *argv[])
{
    int cmd;
    P9050_HANDLE hPlx = NULL;
    HANDLE hWD;
    
    printf ("PLX 9050 diagnostic utility.\n");
    printf ("Application accesses hardware using " WD_PROD_NAME ".\n");

    // make sure DriverBuilder is loaded
    if (!PCI_Get_WD_handle(&hWD)) return 0;
    WD_Close (hWD);

    hPlx = PLX_LocateAndOpenBoard(0x10b5, 0x9050);

    do
    {
        printf ("\n");
        printf ("PLX 9050 main menu\n");
        printf ("-------------------\n");
        printf ("1. Scan PCI bus\n");
        printf ("2. Locate/Choose PLX 9050 board\n");
        if (hPlx)
        {
            printf ("3. PCI configuration registers\n");
            printf ("4. PLX 9050 local registers\n");
            printf ("5. Access address spaces on the board\n");
            printf ("6. Access local address ranges on the board\n");
            printf ("7. Enable / Disable interrupts\n");
            printf ("8. Access serial EEPROM on the board\n");
            printf ("9. Get board parameter\n");
            
        }
        printf ("99. Exit\n");
        printf ("Enter option: ");
        cmd = 0;
        fgets(line, sizeof(line), stdin);
        sscanf (line, "%d",&cmd);
        switch (cmd)
        {
        case 1: // Scan PCI bus
            PCI_Print_all_cards_info();
            break;
        case 2: // Locate PLX 9050 board
            if (hPlx) P9050_Close(hPlx);
            hPlx = PLX_LocateAndOpenBoard(0, 0);
            if (!hPlx) printf ("PLX card open failed!\n");
            break;
        case 3: // PCI configuration registers
            if (hPlx) 
            {
                WD_PCI_SLOT pciSlot;
                P9050_GetPciSlot(hPlx, &pciSlot);
                PCI_EditConfigReg(pciSlot);
            }
            break;
        case 4: // PLX 9050 local registers
            if (hPlx) PLX_EditReg(hPlx);
            break;
        case 5: // Access address spaces on the board
            if (hPlx) PLX_BoardAccess(hPlx, FALSE);
            break;
        case 6: // Access local address ranges on the board
            if (hPlx) PLX_BoardAccess(hPlx, TRUE);
            break;
        case 7: // Enable / Disable interrupts
            if (hPlx) PLX_EnableDisableInterrupts(hPlx);
            break;
        case 8: // Access serial EEPROM on the board
            if (hPlx) PLX_EEPROMAccess(hPlx);
            break;
            
        case 9:
        	P9050_test();
        	
        }
    } while (cmd!=99);

    if (hPlx) P9050_Close(hPlx);

    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -