Pregunta

Los primeros campos de 'cat /proc/bus/pci/dispositivos son comprensibles.

Campo 1 - BusDevFunc
Campo 2 - Vendor Id + Id De Dispositivo
Campo 3 - Línea De Interrupción
Campo de 4 BAR 0
y el resto de la BARRA de registros (0 - 5) después de eso.

Después de la BARRA de registros se imprimen, ¿cuáles son los otros campos?Específicamente, ¿qué espacio de configuración PCI registros(offsets) se imprime?

¿Fue útil?

Solución

Este es el código correspondiente en el núcleo:

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;
}

Después de la IRQ, que parece ser las direcciones de inicio combinadas con las banderas de los primeros 6 regiones de recursos, seguido por las longitudes de las regiones de recursos, seguidos por el nombre del controlador que se ha cobrado el dispositivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top