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

📄 pci1.c

📁 eCos操作系统源码
💻 C
📖 第 1 页 / 共 2 页
字号:
#ifdef USE_PCI_CODE_LIST            device = dev_info.device;            dtbl = PciDevTable;            for (i = 0; i < PCI_DEVTABLE_LEN; i++, dtbl++)                if (vendor == dtbl->VenId && device == dtbl->DevId)                     break;            if (i < PCI_DEVTABLE_LEN) {                diag_printf(" [%s][%s]", dtbl->Chip, dtbl->ChipDesc);            } else {                diag_printf(" [UNKNOWN]");                no_match = true;            }#endif            diag_printf("\n Command   0x%04x, Status 0x%04x\n",                        dev_info.command, dev_info.status);            diag_printf(" Class/Rev 0x%08x", dev_info.class_rev);#ifdef USE_PCI_CODE_LIST            bc = (dev_info.class_rev >> 24) & 0xff;            sc = (dev_info.class_rev >> 16) & 0xff;            pi = (dev_info.class_rev >>  8) & 0xff;            ctbl = PciClassCodeTable;            for (i = 0; i < PCI_CLASSCODETABLE_LEN; i++, ctbl++)                if (bc == ctbl->BaseClass                     && sc == ctbl->SubClass                    && pi == ctbl->ProgIf)                    break;            if (i < PCI_CLASSCODETABLE_LEN) {                diag_printf(" [%s][%s][%s]", ctbl->BaseDesc,                            ctbl->SubDesc, ctbl->ProgDesc);            } else {                diag_printf(" [UNKNOWN]");                no_match = true;            }#endif            diag_printf("\n Header 0x%02x\n", dev_info.header_type);            diag_printf(" SubVendor 0x%04x, Sub ID 0x%04x\n",                        dev_info.header.normal.sub_vendor,                         dev_info.header.normal.sub_id);            for(i = 0; i < CYG_PCI_MAX_BAR; i++) {                diag_printf(" BAR[%d]    0x%08x /", i, dev_info.base_address[i]);                diag_printf(" probed size 0x%08x / CPU addr 0x%08x\n",                            dev_info.base_size[i], dev_info.base_map[i]);            }                        if (cyg_pci_translate_interrupt(&dev_info, &irq))                diag_printf(" Wired to HAL vector %d\n", irq);            else                diag_printf(" Does not generate interrupts.\n");        } while (cyg_pci_find_next(devid, &devid));#ifdef USE_PCI_CODE_LIST        diag_printf("\nStrings in [] are from the PCI Code List at http://www.yourvote.com/pci\n");        if (no_match) {            diag_printf("It seems that some of the device information has not been registered in\n");            diag_printf("the PCI Code List. Please consider improving the database by registering\n");            diag_printf("the [UNKNOWN] information for your devices. Thanks.\n");        }#endif    } else {        diag_printf("No PCI devices found.");    }    pci_scan();    CYG_TEST_PASS_FINISH("pci1 test OK");}voidpci_scan( void ){    cyg_pci_device dev_info;    cyg_pci_device_id devid;    CYG_ADDRWORD irq;    int i;#ifdef USE_PCI_CODE_LIST    cyg_bool no_match = false;    cyg_uint16 vendor, device;    cyg_uint8  bc, sc, pi;    PCI_VENTABLE* vtbl;    PCI_DEVTABLE* dtbl;    PCI_CLASSCODETABLE* ctbl;#endif    diag_printf( "========== Scanning initialized devices\n" );    if (cyg_pci_find_next(CYG_PCI_NULL_DEVID, &devid)) {        do {            // Since we are NOT about to configure the device, set the            // devinfo record so we don't mistake garbage for data.            memset( &dev_info, 0xAAAAAAAAu, sizeof( dev_info ) );            // Get device info            cyg_pci_get_device_info(devid, &dev_info);            // Print stuff            diag_printf("Found device on bus %d, devfn 0x%02x:\n",                        CYG_PCI_DEV_GET_BUS(devid),                        CYG_PCI_DEV_GET_DEVFN(devid));            if (dev_info.command & CYG_PCI_CFG_COMMAND_ACTIVE) {                diag_printf(" Note that board is active. Probed"                            " sizes and CPU addresses invalid!\n");            }            diag_printf(" Vendor    0x%04x", dev_info.vendor);#ifdef USE_PCI_CODE_LIST            vendor = dev_info.vendor;            vtbl = PciVenTable;            for (i = 0; i < PCI_VENTABLE_LEN; i++, vtbl++)                if (vendor == vtbl->VenId)                     break;            if (i < PCI_VENTABLE_LEN) {                diag_printf(" [%s][%s]", vtbl->VenShort, vtbl->VenFull);            } else {                diag_printf(" [UNKNOWN]");                no_match = true;            }#endif            diag_printf("\n Device    0x%04x", dev_info.device);#ifdef USE_PCI_CODE_LIST            device = dev_info.device;            dtbl = PciDevTable;            for (i = 0; i < PCI_DEVTABLE_LEN; i++, dtbl++)                if (vendor == dtbl->VenId && device == dtbl->DevId)                     break;            if (i < PCI_DEVTABLE_LEN) {                diag_printf(" [%s][%s]", dtbl->Chip, dtbl->ChipDesc);            } else {                diag_printf(" [UNKNOWN]");                no_match = true;            }#endif            diag_printf("\n Command   0x%04x, Status 0x%04x\n",                        dev_info.command, dev_info.status);            diag_printf(" Class/Rev 0x%08x", dev_info.class_rev);#ifdef USE_PCI_CODE_LIST            bc = (dev_info.class_rev >> 24) & 0xff;            sc = (dev_info.class_rev >> 16) & 0xff;            pi = (dev_info.class_rev >>  8) & 0xff;            ctbl = PciClassCodeTable;            for (i = 0; i < PCI_CLASSCODETABLE_LEN; i++, ctbl++)                if (bc == ctbl->BaseClass                     && sc == ctbl->SubClass                    && pi == ctbl->ProgIf)                    break;            if (i < PCI_CLASSCODETABLE_LEN) {                diag_printf(" [%s][%s][%s]", ctbl->BaseDesc,                            ctbl->SubDesc, ctbl->ProgDesc);            } else {                diag_printf(" [UNKNOWN]");                no_match = true;            }#endif            diag_printf("\n Header 0x%02x\n", dev_info.header_type);            diag_printf(" SubVendor 0x%04x, Sub ID 0x%04x\n",                        dev_info.header.normal.sub_vendor,                         dev_info.header.normal.sub_id);            for(i = 0; i < CYG_PCI_MAX_BAR; i++) {                diag_printf(" BAR[%d]    0x%08x /", i, dev_info.base_address[i]);                diag_printf(" probed size 0x%08x / CPU addr 0x%08x\n",                            dev_info.base_size[i], dev_info.base_map[i]);            }                        if (cyg_pci_translate_interrupt(&dev_info, &irq))                diag_printf(" Wired to HAL vector %d\n", irq);            else                diag_printf(" Does not generate interrupts.\n");        } while (cyg_pci_find_next(devid, &devid));    } else {        diag_printf("No PCI devices found.");    }}voidcyg_start(void){    CYG_TEST_INIT();    cyg_thread_create(10,                   // Priority - just a number                      (cyg_thread_entry_t*)pci_test,         // entry                      0,                    //                       "pci_thread",     // Name                      &stack[0],            // Stack                      CYGNUM_HAL_STACK_SIZE_TYPICAL,           // Size                      &thread_handle,       // Handle                      &thread_data          // Thread data structure        );    cyg_thread_resume(thread_handle);    cyg_scheduler_start();}#else // CYGFUN_KERNEL_API_C && CYG_PCI_PRESENT#define N_A_MSG "Needs kernel C API & PCI platform support"#endif#else // CYGPKG_IO_PCI && CYGPKG_KERNEL#define N_A_MSG "Needs IO/PCI, ISOINFRA, and Kernel"#endif#ifdef N_A_MSGvoidcyg_start( void ){    CYG_TEST_INIT();    CYG_TEST_NA( N_A_MSG);}#endif // N_A_MSG// EOF pci1.c

⌨️ 快捷键说明

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