BUS PCI G. Frosini Bus PCI Slide 1.

Slides:



Advertisements
Presentazioni simili
Tecniche Automatiche di Acquisizione Dati
Advertisements

Sistemi Elettronici Programmabili
Table View. Problemi ricorrenti Una situazione ricorrente è quella in cui il controller potrebbe avere un’altezza superiore a quella dello schermo. In.
LA MEMORIA CENTRALE. La memoria nella struttura generale del calcolatore MEMORIA CONTROLLO INGRESSO E USCITA ARITMETICA E LOGICA CPU Dispositivi esterni.
IL PROCESSORE I MICROPROCESSORI INTEL Il microprocessore è un circuito integrato dotato di una struttura circuitale in grado di effettuare un determinato.
Unità di apprendimento 6 Dal problema al programma.
Giuditta Cantoni, 4 E S.I.A I DATABASE. Definizione databese In informatica, il termine database, banca dati o base di dati (a volte abbreviato con il.
Università degli Studi - “ G. d'Annunzio ” Chieti - Pescara FACOLTÀ DI ECONOMIA Corso di laurea in Economia Informatica/s Seminario di: Giovanni Placentino.
Sistemi Operativi : Gestione della Memoria Anno Scolastico 2012/2013 Un sistema operativo è un programma o un insieme di programmi che garantisce e permette.
Laboratorio di Architettura Degli Elaboratori1 PSPICE – Circuiti sequenziali.
E’ costituita da due blocchi:  Interfaccia di rete  Blocco di simulazione L’ interfaccia di rete fornisce il collegamento elettrico con la rete sotto.
IL SISTEMA OPERATIVO (seconda parte) PROGRAMMI UTENTE INTERPRETE COMANDI FILE SYSTEM GESTIONE DELLE PERIFERICHE GESTIONE DELLA MEMORIA GESTIONE DEI PROCESSI.
Elementi fondamentali dell’ Architettura di di un elaboratore elettronico.
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Rappresentazione dell’ Informazione Digitale e Binario
Basi di dati - Fondamenti
Unità di apprendimento 1
IL SOFTWARE (FPwin 6.0).
Rileaborato da M. Lenzerini - Basi di dati
PRESENTAZIONE di RICCARDO
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Sistema di Acquisizione Dati Per un Rivelatore di Muoni
Architettura e funzionalità
G. Frosini Memoria virtuale Slide 1
Impostazione evento finale d’Istituto
GPIO: General Purpose Input Output I parte
G. Frosini Elaboratore 32 PC Slide 1
Sistema di Analisi e di Acquisizione
LE ARCHITETTURE NON VON NEUMANN
Microcontrollori e microprocessori
Progettazione di una base di dati relazionale
I microprocessori Il microprocessore è un circuito integrato costituito da silicio. Il microprocessore svolge fondamentalmente due funzioni: sovraintende.
Cammino dei Dati (Datapath)
DMA (BUS MASTERING PCI)
P. L. C. (Programmable Logic Controller)
Unità di apprendimento 7
GPT Vs. MBR Vantaggi introdotti dalla formattazione con la tabella delle partizioni GPT.
CALCOLATORI ELETTRONICI Anno Accademico
Excel 1 - Introduzione.
Organizzazione fisica
Introduzione I microcontrollori.
I BUS È un insieme di fili conduttori che permette il passaggio di dati tra le varie periferiche del pc.
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
analizzatore di protocollo
SUBNETTING E SUPERNETTING
Architettura dei calcolatori
I Bus di Sistema Corso di Laurea Magistrale in Ingegneria Informatica
Informazioni di servizio
01 - INTRODUZIONE ALLA DOMOTICA
K4 è planare? E K3,3 e K5 sono planari? Sì!
Introduzione L’8254 è un interval timer event/counter, progettato per risolvere i problemi del controllo del timing, comuni ad ogni microcomputer. E’ costituito.
Memoria RAM e ROM.
IL MODELLO DI VON NEUMANN
Caratteristiche e funzioni della scheda Arduino
Controllo e microprogrammazione
Processi e Thread Meccanismi di IPC (1).
A/D seconda parte.
Basi di dati - Fondamenti
Progettazione concettuale
Partizionamento/accorpamento di concetti
© 2007 SEI-Società Editrice Internazionale, Apogeo
Esercitazioni corso di RETI
Definizione di linguaggio di programmazione
Algoritmi e Strutture Dati
Parti interne del computer
Memorie Laboratorio di Architetture degli Elaboratori I
Array e Stringhe Linguaggio C.
Progetto del processore e supporto del processore al SO (interruzioni – eccezioni) Salvatore Orlando.
Macchina a stati finiti DMAC
Relazioni tra CPU e Memoria e Dispositivi I/O
Transcript della presentazione:

BUS PCI G. Frosini Bus PCI Slide 1

Bus PCI (1) Sistema di elaborazione che si basa (parzialmente o totalmente) sullo standard PCI (Periferal Component Interconnect): comprende uno o più bus PCI, fino a un massimo di 256; i bus PCI sono organizzati ad albero e collegati tra loro da particolari dispositivi detti ponti PCI-PCI; generalmente, il collegamento con la CPU non è diretto, ma avviene tramite un particolare dispositivo detto ponte Ospite-PCI. Ponti con altri tipi di bus: presenti in sistemi di elaborazione compatibili con architetture precedenti. G. Frosini Bus PCI Slide 2

Bus PCI (2) Bus, dispositivi, funzioni: i bus PCI sono numerati e la radice dell'albero è il bus 0, collegato alla CPU (tramite il ponte Ospite-PCI); numero di ogni bus: stabilito dal software in fase di inizializzazione; ad ogni bus possono essere collegati fino a 32 dispositivi (numerati da 0 a 31); il numero del dispositivo dipende dallo slot fisico in cui esso è stato inserito sul bus; ciascuno dispositivo può contenere fino a 8 funzioni (numerate da 0 a 7); il numero di funzione è deciso dal costruttore del dispositivo; le funzioni possono essere quelle comuni (scheda video, scheda di rete, eccetera), ma anche quelle specifiche per un sistema PCI, come ponte Ospite-PCI, ponte PCI-PCI, o ponte verso altri tipi di bus (come il bus ATA o il bus USB); nel caso più semplice, un dispositivo contiene una sola funzione. Per semplicità, considereremo calcolatori con un solo bus PCI. G. Frosini Bus PCI Slide 3

Architettura con bus PCI G. Frosini Bus PCI Slide 4

Spazi di indirizzamento di un bus PCI prevede tre spazi di indirizzamento: memoria, I/O e configurazione. Spazi di memoria e di I/O: composti da 2**32 locazioni (ciascuna di un byte). Funzione presente in un dispositivo: può gestire blocchi di locazioni, sia nello spazio di memoria che in quello di I/O (brevemente, blocchi di memoria o blocchi di I/O); spazio a cui appartiene ogni blocco: cablato nella funzione; indirizzo iniziale di ogni blocco: programmabile (non cablato). G. Frosini Bus PCI Slide 5

Spazio di configurazione Spazio privato di configurazione: specifico di ogni singola funzione; costituito da 256 locazioni, nelle quale sono posizionati registri lunghi da 1 a 4 byte (gli indirizzi di tali locazioni sono anche detti offset); alcuni registri sono presenti in tutte le funzioni (obbligatori e a indirizzi prefissati), altri sono lasciati a disposizione del costruttore. Scopo dei registri: permettere l'identificazione della funzione; programmare la configurazione della funzione, in particolare assegnando indirizzi ai blocchi di memoria e ai blocchi di I/O gestiti dalla funzione stessa. Spazio globale di configurazione costituito dagli spazi di configurazione privati delle funzioni; questi sono organizzati gerarchicamente secondo la struttura fisica del sistema PCI; in tale spazio, ogni indirizzo è composto dal numero del bus, dal numero del dispositivo all'interno del bus, dal numero della funzione all'interno del dispositivo, e dall’indirizzo del registro nello spazio di configurazione privato della funzione. G. Frosini Bus PCI Slide 6

Transazioni e collegamenti Operazioni che vengono svolte sul bus PCI: prendono il nome di transazioni. Transazione: prevede un iniziatore (il dispositivo che inizia la transazione, detto anche master del bus) e un obiettivo (il dispositivo indirizzato dalla transazione, detto anche target o slave del bus); alcuni dispositivi possono svolgere sia il ruolo di iniziatore che quello di obiettivo, in transazioni diverse. Iniziatore tipico: ponte Ospite-PCI. Linee (principali) del bus PCI: clock di sistema CLK: di ingresso per tutti i dispositivi (tutte le altre linee sono campionate sul fronte di salita di CLK); AD31-AD0 (Address oppure Data): di ingresso/uscita per tutti i dispositivi; C/BE3-C/BE0 (Command oppure Byte Enable): di uscita per i dispositivi iniziatori e di ingresso per i dispositivi obiettivo; /FRAME e /IRDY (Initiator Ready): di uscita per gli iniziatori e di ingresso per gli obiettivi; /TRDY (Target Ready) e /DEVSEL (Device Select): di uscita per gli obiettivi e di ingresso per gli iniziatori. G. Frosini Bus PCI Slide 7

Linee (principali) del bus PCI G. Frosini Bus PCI Slide 8

Tipi di transazioni Ad un bus PCI possono essere collegati più dispositivi iniziatori: sul bus può avvenire una sola transazione per volta; l'accesso al bus deve essere gestito da un arbitro; un iniziatore possiede anche una coppia di piedini, /REQ di uscita e /GNT di ingresso, da collegare all’arbitro, che tipicamente è uno dei dispositivi ponte presenti sul bus. Tipi di transazioni: le più importanti sono le transazioni di lettura e le transazioni di scrittura. Transazione: comincia quando un iniziatore attiva /FRAME; è composta da una fase di indirizzamento e da una o più fasi dati. G. Frosini Bus PCI Slide 9

Fase di indirizzamento di una transazione l'iniziatore emette: un indirizzo sulle linee AD (fungono da linee Address) ; il tipo di operazione (lettura o scrittura) e lo spazio (memoria o I/O), codificati sulle linee C/BE (fungono da linee Control). Transazioni negli spazi di memoria e di I/O: l'indirizzo presente sulle linee AD è multiplo di 4 (AD1 e AD0 uguali a 0); ogni dispositivo presente sul bus, in base all’indirizzo e allo spazio, controlla se una delle proprie funzioni gestisce la risorsa indirizzata (locazione di memoria o registro di I/O); in caso positivo memorizza al suo interno le informazioni presenti sulle linee AD (indirizzo) e sulle linee C/BE (tipo di operazione e spazio); se il bus è configurato correttamente, al più un dispositivo gestisce la risorsa indirizzata e diventa l'obiettivo della transazione. G. Frosini Bus PCI Slide 10

Fasi dati di una transazione Trasferimento dei dati: avviene nelle successive fasi dati. Fase dati: l'iniziatore (in caso di scrittura) o l'obiettivo (in caso di lettura) pilotano le linee AD (fungono da linee Data) per trasferire al più 4 byte di dati per volta (parola lunga); in ogni caso l'iniziatore pilota le linee C/BE (fungono da linee Byte Enable) per abilitare il trasferimento dei singoli byte della parola lunga. Spazio di memoria: le fasi dati possono essere più di una; indirizzo della parola lunga coinvolta nel trasferimento: per la prima fase dati è quello specificato nella fase di indirizzamento; per le successive fasi dati è ottenuto incrementando di 4 l'indirizzo usato nella fase dati precedentemente. Spazio di I/O: la fase dati è in genere unica; in caso contrario, la quantità utilizzata per incrementare l’indirizzo dipende dalla specifica funzione. G. Frosini Bus PCI Slide 11

Segnali per la fase preliminare di arbitraggio Dispositivo che decide di effettuare una transazione come iniziatore: attiva la sua linea /REQ verso l’arbitro; l'arbitro risponde attivando la linea /GNT; attende che una eventuale transazione in corso sul bus sia terminata (che /FRAME e /IRDY siano entrambi disattivi); diviene iniziatore (attiva la linea /FRAME); disattiva la sua linea /REQ verso l’arbitro; l’arbitro risponde disattivando la linea /GNT. G. Frosini Bus PCI Slide 12

Segnali per la fase di indirizzamento e per le fasi dati l'iniziatore attiva la linea /FRAME e pilota le linee AD e C/BE; il dispositivo che riconosce l'indirizzo e lo spazio risponde attivando la linea /DEVSEL e diventa l'obiettivo della transazione; se la linea /DEVSEL non diviene attivata entro 6 cicli di clock, l'indirizzo non corrisponde a nessun dispositivo e la transazione termina con un errore. Fase dati (diversa dall'ultima): l'iniziatore mantiene /FRAME attivo e pilota C/BE; in caso di scrittura, l'iniziatore pilota anche AD, attiva /IRDY e attende che l'obiettivo attivi /TRDY; in caso di lettura l'obiettivo, appena possiede dati disponibili, pilota AD e attiva /TRDY, quindi attende che l'iniziatore attivi /IRDY. in ogni caso, quando /TRDY e /IRDY sono divenuti entrambi attivi la fase dati è conclusa, quindi /TRDY e /IRDY divengono entrambi disattivi. Ultima fase dati: si svolge come le altre, ma l'iniziatore non mantiene /FRAME attivo. G. Frosini Bus PCI Slide 13

Transazione comune Caso comune: Ponte Ospite-PCI; il processore comanda un ciclo di lettura/scrittura; l’entità indirizzata non si trova sul bus locale, ma sul bus PCI. Ponte Ospite-PCI; trasforma il ciclo di lettura o di scrittura comandato dal processore in una transazione PCI; funge da iniziatore sul bus PCI; la transazione prevede una sola fase dati, con lettura o scrittura di uno o più byte consecutivi all’interno di una parola lunga allineata. G. Frosini Bus PCI Slide 14

Interruzioni col bus PCI (1) Dispositivo PCI: possiede da zero a 4 piedini per le richieste di interruzione, denominati (nell'ordine) /INTA, /INTB, /INTC e /INTD (uscita open collector); le funzioni del dispositivo che utilizzano il meccanismo di interruzione sono collegate ad uno di questi piedini. Costruttore del dispositivo: sceglie liberamente quanti dei 4 piedini rendere disponibili e i collegamenti tra questi e le funzioni del dispositivo; funzione: possiede un registro (nel proprio spazio di configurazione) in cui è cablato un codice che identifica il nome del piedino di interruzione a cui la funzione è collegata: codifica: 0, nessuno collegamento; codifica 1, piedino /INTA; codifica 2, piedino /INTB, e così via. più funzioni dello stesso dispositivo possono essere collegate allo stesso piedino (condivisione delle richieste di interruzione). G. Frosini Bus PCI Slide 15

Interruzioni col bus PCI (2) Collegamenti dei piedini di un dispositivo per le richieste di interruzione al controllore di interruzioni APIC: decisione del progettista. Situazione tipica: i singoli piedini /INTA, /INTB, /INTC e /INTD di tutti i dispositivi sono collegati insieme, con una resistenza verso l’alimentazione, formando 4 linee che giungono allo APIC a partire dal piedino 16; ci può essere condivisione delle richieste di interruzione, oltre che fra funzioni dello stesso dispositivo, anche tra funzioni che appartengono a dispositivi diversi. Piedini 0-15 dello APIC: non vengono utilizzati dal bus PCI; vengono lasciati liberi per connettervi le vecchie interfacce (collegate ad altri bus); queste possono essere collegate in modo compatibile con la vecchia circuiteria di interruzione (controllori PIC); possono essere utilizzati gli stessi driver. G. Frosini Bus PCI Slide 16

Spazio di configurazione di una funzione (1) Funzione di un dispositivo PCI: deve implementare, nello spazio di configurazione, alcuni registri; ciascun registro è costituito da uno o più byte consecutivi appartenenti alla stessa parola lunga. Registri obbligatori per tutte le funzioni: Vendor ID (lettura, 2 byte, offset 0): identificatore del venditore; Device ID (lettura, 2 byte, offset 2): identificatore del dispositivo; Command Register (lettura/scrittura, 2 byte, offset 4): bit n. 0: se settato, abilita la funzione a rispondere a transazioni nello spazio di I/O; bit n. 1: se settato, abilita la funzione a rispondere a transazioni nello spazio di memoria; bit n. 2: se settato, abilita la funzionalità di bus mastering. Status Register (lettura, 2 byte, offset 6): segnala gli errori rilevati durante le transazioni. Class Code (lettura, 3 byte, offset 9): specifica il tipo di funzione svolta (secondo la codifica PCI). Interrupt Pin (lettura, 1 byte, offset 57): specifica tramite quale dei 4 piedini del dispositivo genera richieste di interruzione. G. Frosini Bus PCI Slide 17

Spazio di configurazione di una funzione (2) Registri base: servono per gli indirizzi dei blocchi di memoria e dei blocchi di I/O. G. Frosini Bus PCI Slide 18

Blocchi di memoria o di I/O gestiti dalle funzioni (1) gestiscono blocchi di memoria e blocchi di I/O, con dimensione potenza di 2; ogni blocco deve avere un indirizzo allineato alle dimensione del blocco stesso; gli indirizzi dei blocchi sono programmabili (è invece prefissato lo spazio). Blocchi: nei blocchi di memoria, tutti gli indirizzi corrispondono a locazioni fisiche; nei blocchi di I/O, non tutti gli indirizzi corrispondono a registri fisici. Scelta degli indirizzi dei blocchi: le funzioni possiedono un comparatore per ogni blocco; ogni comparatore prevede un registro base nello spazio di configurazione, con alcuni bit più significativi programmabili, bit che determinano l’indirizzo del blocco stesso. Fase di indirizzamento: il comparatore confronta il contenuto del registro base, relativo solo ai bit programmabili, con i corrispondenti bit dell’indirizzo presente sulle linee AD; i rimanenti bit dell’indirizzo presente sulle linee AD selezionano una parola lunga all’interno del blocco. G. Frosini Bus PCI Slide 19

Blocchi di memoria o di I/O gestiti dalle funzioni (2) Funzione: può avere fino a 6 comparatori con i corrispondenti registri base, ciascuno lungo 4 byte; nello spazio di configurazione, gli offset dei registri base, multipli di 4, devono iniziare da 16 ed essere contigui. Associazione tra registri base e blocchi: stabilita dalla funzione. Registri base: vengono tipicamente programmati dal BIOS in fase di avvio del sistema. Bit n. 0 di ogni registro base (bit meno significativo): di sola lettura; specifica se il corrispondente blocco è nello spazio di memoria (se vale 0) o nello spazio di I/O (se vale 1). G. Frosini Bus PCI Slide 20

Blocchi di memoria o di I/O gestiti dalle funzioni (3) Registro base per un blocco di memoria: bit n. 0 (di sola lettura): vale sempre 0 (spazio di memoria); bit n. 1-3 (di sola lettura): specificano alcuni vincoli sul modo in cui va programmato il corrispondente comparatore; dimensione minima di un blocco: 2**4 = 16 Byte; i bit b-31 (da destra a sinistra) rappresentano l’indirizzo base del blocco (sono programmabili); dimensione effettiva del blocco: 2**b Byte. i bit 2-(b-1) (da destra a sinistra) valgono 0 (sono di sola lettura); sulle linee AD, tali bit rappresentano l’indirizzo della parola lunga interna al blocco; Registro base per un blocco di I/O: bit. n. 0 (di sola lettura): vale sempre 1 (spazio di I/O) bit n. 1 (di sola lettura): riservato (vale sempre 0); dimensione minima : 2**2 = 4 Byte; dimensione effettiva: come nel caso precedente. G. Frosini Bus PCI Slide 21

Registri base Spazio di memoria Spazio di I/O 31 b 3 2 1 . . . 1 1 1 Indirizzo base di un blocco di memoria: lungo al più 28 bit Dimensione di un blocco di memoria: minima: 16 byte effettiva: 2**b byte Indirizzo interno al blocco: almeno 2 bit (4 parole lunghe) (non coinvolge il registro base) Spazio di I/O 31 b 1 . . . 1 Indirizzo base di un blocco di I/O: lungo al più 30 bit Dimensione di un blocco di I/O: minima 4 byte effettiva: 2**b byte Indirizzo interno al blocco: anche 0 bit (1 parola lunga) (non coinvolge il registro base) G. Frosini Bus PCI Slide 22

Transazione di configurazione (1) Dispositivo PCI: possiede un piedino di ingresso IDSEL (non riportato nella figura della Slide 8); risponde a una transazione di configurazione solo se IDSEL è attivo e le linee AD0 e AD1 sono entrambe 0. Se il dispositivo risponde a una transazione di configurazione: durante la fase di indirizzamento: legge dalle linee AD8-AD10 il numero della funzione indirizzata; legge dalle linee AD2-AD7 (AD0 e AD1 valgono 0) l'offset della parola lunga indirizzata nello spazio privato di configurazione della funzione; se la funzione esiste, il dispositivo attiva il segnale /DEVSEL; durante la fase dati: si comporta come in una normale transazione di lettura o scrittura. G. Frosini Bus PCI Slide 23

Transazione di configurazione (2) Processore: non è in grado di generare direttamente transazioni nello spazio di configurazione; genera indirettamente tali transazioni tramite il ponte Ospite-PCI (collegato al bus locale del processore). Ponte Ospite_PCI: possiede due registri di 32 bit, posizionati nello spazio di I/O agli indirizzi 0x0CF8 e 0x0CFC, rispettivamente: CAP (Configuration Address Port); CDP (Configuration Data Port). Per generare una transazione nello spazio di configurazione, il processore deve: scrivere una parola lunga nel registro CAP; leggere/scrivere un byte, una parola o una parola lunga dal/nel registro CDP. Parola lunga da scrivere nel registro CAP: deve contenere le informazioni necessarie per l'indirizzamento di una parola lunga all'interno dello spazio globale di configurazione (bus PCI, dispositivo, funzione, spazio privato di configurazione). G. Frosini Bus PCI Slide 24

Formato del registro CAP Campi del registro CAP: bit n. 31: se vale 1, identifica una transazione di configurazione; bit n. 30-24: riservati bit n. 23-16: numero del bus su cui si trova il dispositivo (nel caso considerato, solo il bus n. 0); bit n. 15-11: numero del dispositivo all'interno del bus; bit n. 10-8: numero della funzione all'interno del dispositivo; bit n. 7-2: offset della parola lunga coinvolta dall’operazione nello spazio di configurazione della funzione; bit n. 1-0 valgono 0. G. Frosini Bus PCI Slide 25

Fasi della transazione di configurazione (1) Configurazione valida scritta nel registro CAP: il ponte Ospite-PCI si predispone alla generazione di una transazione di configurazione; questa viene effettivamente generata quando il processore esegue una successiva operazione di lettura/scrittura dal/nel registro CDP. Ponte Ospite-PCI: memorizza: il tipo di operazione specificata dal processore sul bus locale; i valori dei bit /BE specificati dal processore sul bus locale; genera una transazione di configurazione di lettura o di scrittura. Fase di indirizzamento della transazione di configurazione: il ponte: copia i bit n. 10-0 del registro CAP sulle linee AD10-AD0 del bus PCI (funzione e offset di una parola lunga nello spazio di configurazione privato della funzione); decodifica il dispositivo, utilizzando i bit 15-11 del registro CAP, per generare il segnale IDSEL diretto al dispositivo selezionato (il numero di bus è 0); soluzione diffusa per bus PCI che contengono al più 16 dispositivi (dei 32 possibili): il segnale IDSEL viene inviato al dispositivo usando una delle linee AD31-AD16. G. Frosini Bus PCI Slide 26

Fasi della transazione di configurazione (2) Fase dati della transazione di configurazione: il ponte copia i valori precedentemente salvati dei bit /BE sulle linee C/BE del bus PCI. Transazione di scrittura: il ponte copia il contenuto del registro CDP sulle linee AD31-AD0 (fungono da linee dati). Transazione di lettura: il ponte copia lo stato delle linee AD31-AD0 (fungono da linee dati) in CDP, e completa l'operazione di lettura da CDP iniziata dal processore. Se, durante una transazione di lettura, nessun dispositivo attiva /DEVSEL entro un tempo prestabilito, la lettura da CDP restituirà al processore un byte, una parola o una parola lunga composta da tutti bit uguali a 1. G. Frosini Bus PCI Slide 27

Operazioni in fase di inizializzazione Azioni effettuate per ricavare quante funzioni sono presenti: ciclicamente (per un massimo di 32*8 volte), nello spazio di configurazione, vengono effettuate transazioni di lettura riferite al registro Vendor ID per tutte le 8 funzioni di ciascuno dei 32 possibili dispositivi; poiché la quantità 0xFFFF non si riferisce a nessun venditore, si può dedurre il numero delle funzioni implementate in tutti i dispositivi, pari al numero di letture effettuate con risultato diverso da 0xFFFF. Azioni effettuate per ogni funzione presente: ciclicamente (per massimo di 6 volte), nello spazio configurazione, vengono effettuate transazioni di lettura riferite ai registri di configurazione dei comparatori (parole lunghe successive a partire da quella di offset 16), fino a leggere la quantità 0xFFFFFFFF (registro assente); il numero di comparatori implementati sarà allora pari al numero di letture effettuate con risultato diverso da 0xFFFFFFFF. Azioni effettuate per ogni registro di configurazione presente: viene effettuata, nello spazio di configurazione: una transazione di scrittura nel registro con la quantità 0xFFFFFFFF; una successiva transazione di lettura dallo stesso registro: il primo bit a 1 (da destra a sinistra) determina la dimensione del blocco di memoria o di I/O gestito da quel registro di configurazione. G. Frosini Bus PCI Slide 28

Programmi per transazioni di configurazione (1) Generazione della parola lunga da scrivere in CAP: il bit più significativo della parola lunga deve valere 1; i due bit meno significativi di off devono essere portati a 0. natl make_CAP(natb bus, natb dev, natb fun, natb off) { return 0x80000000 | (bus << 16) | (dev << 11) | (fun << 8) | (off & 0xFC); } Lettura da CDP (1, 2 o 4 byte della parola lunga trasferita in CDP) const ioaddr PCI_CAP = 0x0CF8; const ioaddr PCI_CDP = 0x0CFC; natb pci_read_confb(natb bus, natb dev, natb fun, natb off) { natl confaddr = make_CAP(bus, dev, fun, off); outputl(confaddr, PCI_CAP); natb ret; inputb(PCI_CDP + (off & 0x03), ret); // bit n. 1-0 di off, di qualunque valore return ret; G. Frosini Bus PCI Slide 29

Programmi per transazioni di configurazione (2) natw pci_read_confw(natb bus, natb dev, natb fun, natb off) { natl confaddr = make_CAP(bus, dev, fun, off); outputl(confaddr, PCI_CAP); natw ret; inputw(PCI_CDP + (off & 0x03), ret); // bit n. 1-0 di off, che valgono 00 o 10 return ret; } natl pci_read_confl(natb bus, natb dev, natb fun, natb off) natl ret; inputl(PCI_CDP + (off & 0x3), ret); // bit n. 1-0 di off, che valgono 00 // anche inputl(PCI_CDP, ret); Scrittura in CDP void pci_write_confb(natb bus, natb dev, natb fun, natb off, natb data) { /* … */ } void pci_write_confw(natb bus, natb dev, natb fun, natb off, natw data) { /* … */ } void pci_write_confl(natb bus, natb dev, natb fun, natb off, natl data) { /* … */ } G. Frosini Bus PCI Slide 30