Condividi tramite


Supporto delle richieste nei driver di dispositivo virtuale IEEE 1394

I PDO virtuali e i driver caricati sopra hanno lo stesso livello di accesso all'DDI del bus 1394 che un driver funzionale caricato su un PDO deve essere effettivamente hardware. Tuttavia, poiché nel caso di un driver virtuale non è presente alcun hardware effettivo, il driver del bus 1394 deve considerare determinate richieste come casi speciali. Questo argomento descrive le richieste che presentano un comportamento diverso se indirizzate a un PDO virtuale:

  • REQUEST_ASYNC_READ, REQUEST_ASYNC_WRITE e REQUEST_ASYNC_LOCK

    In genere, quando un'applicazione o un driver indirizza una richiesta di I/O asincrona a un dispositivo di destinazione, il driver del bus 1394 estrae l'ID nodo del dispositivo dall'estensione del dispositivo dell'oggetto dispositivo fisico (PDO). Queste informazioni vengono registrate nell'estensione PDO del dispositivo quando il dispositivo viene enumerato. I dispositivi virtuali, tuttavia, non vengono enumerati nel modo consueto, quindi il driver che genera la richiesta deve fornire un ID nodo quando si invia una richiesta a un dispositivo virtuale, proprio come se si stesse eseguendo operazioni di I/O asincrone in modalità non elaborata. Per una descrizione dell'indirizzamento in modalità non elaborata, vedere Invio di pacchetti di richiesta di I/O asincroni sul bus IEEE 1394.

    Quando il driver del bus riceve una richiesta per il PDO di un dispositivo virtuale, usa l'ID nodo fornito dal driver che ha originato la richiesta anziché tentare di estrarre l'ID nodo dall'estensione del dispositivo. In linea di principio, i dispositivi virtuali non dispongono di ID nodo, pertanto i driver che inviano richieste ai dispositivi virtuali devono fornire un ID nodo alternativo. Per convenzione, i dispositivi virtuali usano l'ID nodo del controller host del PC.

    Quando il driver per il dispositivo virtuale alloca memoria, specifica che riceverà tutti i pacchetti trasmessi nel bus 1394. Il driver identifica quindi i pacchetti controllando l'ID nodo del controller host in ogni pacchetto ricevuto.

    I dispositivi virtuali non dispongono di informazioni sulle dimensioni dei pacchetti o sulla velocità di trasferimento registrate nelle estensioni del dispositivo, perché si tratta di parametri hardware. Nel caso dei dispositivi virtuali, il driver del bus usa le informazioni sulle dimensioni dei pacchetti e sulla velocità di trasferimento archiviate nell'oggetto dispositivo per la porta.

  • REQUEST_ALLOCATE_ADDRESS_RANGE

    I driver per i dispositivi virtuali devono impostare il flag ACCESS_FLAGS_TYPE_BROADCAST nel membro fulAccessType dell'IRB durante l'allocazione della memoria tramite una richiesta di REQUEST_ALLOCATE_ADDRESS_RANGE. Poiché i dispositivi virtuali non hanno numeri di nodo effettivi, i driver per i dispositivi virtuali non hanno mezzi per ricevere le richieste a meno che non ricevano pacchetti in modalità broadcast. Se più nodi hanno allocato lo stesso intervallo di indirizzi, solo uno riceverà richieste asincrone indirizzate a tale intervallo. Se i driver per un dispositivo virtuale e un dispositivo fisico allocano entrambi lo stesso intervallo di indirizzi, il dispositivo fisico ha priorità rispetto al dispositivo virtuale e quindi il dispositivo fisico riceve i pacchetti. Se più dispositivi virtuali allocano lo stesso intervallo di indirizzi, il primo driver per allocare l'intervallo ha priorità.

  • REQUEST_GET_ADDR_FROM_DEVICE_OBJECT

    I dispositivi virtuali non hanno nodi hardware corrispondenti e nessun ID nodo di propria proprietà. I driver di dispositivo virtuale restituiscono l'ID nodo del controller host ogni volta che ricevono questa richiesta, anziché l'ID nodo di un nodo fisico nel bus.

  • REQUEST_SET_DEVICE_XMIT_PROPERTIES

    Questa richiesta non è supportata per i dispositivi virtuali perché non è presente alcun nodo hardware corrispondente da cui ottenere l'ID nodo.

Per tutte le altre richieste, il comportamento tra dispositivi virtuali e fisici è identico.