2016-07-27 17 views
0

Ich versuche, die 8250 serielle Schnittstelle auf PCI-Express-Bus von unserem Board, indem Sie durch den Treibercode und ich habe harte Zeit zu verstehen, die unter zwei Mitglieder struct uart_8250_portWas sind mapbase- und membase-Mitglieder der UART 8250-Portstruktur?

struct uart_8250_port x; 
memset(&x, 0, sizeof(x)); 
.... 
.... 
x.port.regshift = 0; 
x.port.iotype = UPIO_MEM; 
x.port.flags = UPF_SHARE_IRQ | UPF_LOW_LATENCY; 
x.port.membase = raw_address; 
x.port.mapbase = ioremap(raw_address); 

Was die Mitglieder membase zu verstehen und mapbase? Auch, warum nimmt membase physische PCI-Bar-Adresse, während mapbase Adresse von ioremap zurückgegeben nimmt?

Antwort

1

mapbase ist im Grunde ein Bus Adresse des Ports Registerplatz in der Frage. membase ist die gleiche Adresse in virtuellen CPU-Adressraum für Memory mapped IO (MMIO) und iobase ist die ähnliche für IO.

Ja, möglicherweise bemerken Sie bereits, dass in Ihrem Beispiel ein Fehler vorliegt, d. H. membase und mapbase sollten ausgetauscht werden.

mapbase Adresse wird benötigt, um zum Beispiel DMA-Operationen auf der UART-Hardware zu tun, da DMA mit Bus Adressen arbeitet.