2 Stimmen

über den Zugriff auf den PCI-Konfigurationsbereich verwirrt mich das Makro PCI_CONF1_ADDRESS

Ich lerne gerade den Linux-Kernel-Code, über den Teil von pci, und ich habe die Datei /arch/x86/pci/Direct.c einige Codes verwirren mich:

/*
* Functions for accessing PCI base (first 256 bytes) and extended
* (4096 bytes per PCI function) configuration space with type 1
* accesses.
*/
#define PCI_CONF1_ADDRESS(bus, devfn, reg) \
(0x80000000 | ((reg & 0xF00) << 16) | (bus << 16) \
| (devfn << 8) | (reg & 0xFC))

static int pci_conf1_read(unsigned int seg, unsigned int bus,
          unsigned int devfn, int reg, int len, u32 *value)
{
unsigned long flags;

if ((bus > 255) || (devfn > 255) || (reg > 4095)) {
    *value = -1;
    return -EINVAL;
}

spin_lock_irqsave(&pci_config_lock, flags);

outl(PCI_CONF1_ADDRESS(bus, devfn, reg), 0xCF8);

switch (len) {
case 1:
    *value = inb(0xCFC + (reg & 3));
    break;
case 2:
    *value = inw(0xCFC + (reg & 2));
    break;
case 4:
    *value = inl(0xCFC);
    break;
}

spin_unlock_irqrestore(&pci_config_lock, flags);

return 0;
}

Die Kernelversion ist 2.6.18, daher verwirrt mich das Makro PCI_CONF1_ADDRESS. Wie Sie wissen, kann es nur auf die ersten 256 Byte des PCI-Konfigurationsbereichs zugreifen, wenn Sie den IO-Port CF8/CFC verwenden. Wenn Sie auf den Bereich zwischen 256 und 4095 Byte zugreifen möchten, müssen Sie ECAM (Enhanced Configuration Access Mechanism) verwenden, aber die Anmerkung oben sagt:

erweiterter (4096 Bytes pro PCI-Funktion) Konfigurationsraum mit Typ-1-Zugriffen.

Bedeutet dies, dass er auf alle 4096 Byte des pci-Konfigurationsraums zugreifen kann, wenn er den IO-Port CF8/CFC verwendet? Aber warum wird dies in der PCI LOCAL BUS SPECIFICATION nicht erwähnt?

Inzwischen fühle ich mich auch verwirrt über den Ausdruck:

((reg & 0xF00) << 16)

Auf diese Weise wird eine PCI-Konfigurationsadresse generiert. Ich habe diesen Ausdruck noch nie in einem Buch oder einer Spezifikation gesehen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X