Как интерпретировать содержание/proc/bus/pci/devices?

Первые несколько полей '/proc/bus/pci/devices' кошки понятны.

Поле 1 - BusDevFunc
Поле 2 - Идентификатор поставщика + идентификатор устройства
Поле 3 - Линия прерывания
Поле 4 - ПАНЕЛЬ 0
и остальная часть регистров ПАНЕЛИ (0 - 5) после этого.

После того, как регистры ПАНЕЛИ распечатываются, каковы другие поля? А именно, что регистрирует пространство конфигурации PCI (смещает), распечатываются?

12
задан vivekian2 7 May 2010 в 18:02
поделиться

1 ответ

Это соответствующий код в ядре:

static int show_device(struct seq_file *m, void *v)
{
    const struct pci_dev *dev = v;
    const struct pci_driver *drv;
    int i;

    if (dev == NULL)
        return 0;

    drv = pci_dev_driver(dev);
    seq_printf(m, "%02x%02x\t%04x%04x\t%x",
            dev->bus->number,
            dev->devfn,
            dev->vendor,
            dev->device,
            dev->irq);
    /* Here should be 7 and not PCI_NUM_RESOURCES as we need to preserve compatibility */
    for (i=0; i<7; i++) {
        resource_size_t start, end;
        pci_resource_to_user(dev, i, &dev->resource[i], &start, &end);
        seq_printf(m, "\t%16llx",
            (unsigned long long)(start |
            (dev->resource[i].flags & PCI_REGION_FLAG_MASK)));
    }
    for (i=0; i<7; i++) {
        resource_size_t start, end;
        pci_resource_to_user(dev, i, &dev->resource[i], &start, &end);
        seq_printf(m, "\t%16llx",
            dev->resource[i].start < dev->resource[i].end ?
            (unsigned long long)(end - start) + 1 : 0);
    }
    seq_putc(m, '\t');
    if (drv)
        seq_printf(m, "%s", drv->name);
    seq_putc(m, '\n');
    return 0;
}

После IRQ, кажется, это начальные адреса, объединенные с флагами первых 6 областей ресурсов, за которыми следуют длины этих областей ресурсов, за которыми следует имя драйвера, заявившего права на устройство.

16
ответ дан 2 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: