Example #1
0
static void pci_read_bar(uint32_t id, uint32_t index, uint32_t *address, uint32_t *mask)
{
	uint32_t reg = PCI_CONFIG_BAR0 + index * sizeof(uint32_t);

	// Get address
	*address = pci_read32(id, reg);

	// Find size of the bar
	pci_write32(id, reg, 0xffffffff);
	*mask = pci_read32(id, reg);

	// Restore adddress
	pci_write32(id, reg, *address);
}
Example #2
0
static ssize_t device_read(struct file *filp, char __user * buff,
		size_t len, loff_t * off)
{
	int i;
	printk("=== %s:%d\n", __func__, __LINE__);

	copy_from_user(&g_pci_test , buff, len);

	// read cfg
	/*uint16_t ret = pci_read16(g_pci_test.pci_dev, g_pci_test.reg);*/
	g_pci_block_dev.pci_dev = g_pci_test.pci_dev.u16;
	pci_cfg_bars_decode(&g_pci_block_dev);
	printk("### g_pci_block_dev.pci_dev=%x\n", g_pci_block_dev.pci_dev);  

	for (i=0; i < PCI_DEVICE_BAR_NUM; i++) {
		printk("### bars[%d]=%llx\n", i, g_pci_block_dev.bars[i].addr);
	}

	if ((g_pci_block_dev.bars[0].addr & (0xffffffffULL<<32)) == (0xffffffffULL<<32)) {
		printk("### offset-240%x\n", *(uint32_t *)(g_pci_block_dev.bars[0].addr+0x240));
		printk("### offset-248 %x\n", *(uint32_t *)(g_pci_block_dev.bars[0].addr+0x248));
	}

	// read reg
	g_pci_test.read_val = pci_read32(g_pci_test.pci_dev.u16, g_pci_test.reg);
	printk("### pci_dev: %x, reg: %x, read_val: %x\n", g_pci_test.pci_dev.u16, g_pci_test.reg, g_pci_test.read_val);

	copy_to_user(buff, &g_pci_test, sizeof(g_pci_test));

	return 0;
}
Example #3
0
static void pci_check(uint32_t bus, uint32_t dev, uint32_t func)
{
	uint32_t id = PCI_MAKE_ID(bus, dev, func);

	pci_device_info_t info;
	info.vendorId = pci_read16(id, PCI_CONFIG_VENDOR_ID);

	if (info.vendorId == 0xFFFF) {
		return;
	}

	info.deviceId = pci_read16(id, PCI_CONFIG_DEVICE_ID);
	info.progIntf = pci_read8(id, PCI_CONFIG_PROG_INTF);
	info.subclass = pci_read8(id, PCI_CONFIG_SUBCLASS);
	info.classCode = pci_read8(id, PCI_CONFIG_CLASS_CODE);

	uint32_t result = pci_read32(id, PCI_CONFIG_VENDOR_ID);
	uint16_t dev_id = result >> 0x10;
	uint16_t ven_id = result & 0xFFFF;

	printf("%02x:%02x.%d %04x:%04x %s\n", bus, dev, func, info.vendorId, info.deviceId, pci_class_name(info.classCode, info.subclass, info.progIntf));
}