Condividi tramite


Uso dei buffer di mapping nel modello di I/O Storport

Nel modello di I/O della porta SCSI, i driver miniport possono richiedere al driver di porta di allocare e mappare la memoria virtuale del sistema per i buffer di I/O SRB. I driver Miniport configurano il driver di porta per eseguire il mapping dei buffer di I/O impostando il membro MapBuffers della struttura PORT_CONFIGURATION_INFORMATION (SCSI) su TRUE.

Se il driver di porta è configurato con MapBuffers impostato su TRUE, il membro DataBuffer di ogni SRB ricevuto dal driver miniport conterrà un indirizzo virtuale di sistema di un buffer di I/O. Questo indirizzo è valido nello spazio indirizzi di tutti i processi nel sistema. Inoltre, il driver miniport sarà libero di accedere direttamente al buffer di I/O.

D'altra parte, se il driver miniport imposta MapBuffers su FALSE, DataBuffer conterrà un indirizzo virtuale appartenente a un processo specifico che non è necessariamente valido nel contesto in cui viene eseguito il driver miniport. Di conseguenza, il driver miniport non sarà in grado di accedere all'area di memoria a cui punta DataBuffer .

Nel modello di I/O Storport sono necessari driver miniport per supportare le I/O basate su DMA. Quando si usa DMA, non è necessario che i driver miniport accingano indirettamente ai buffer di I/O di un SRB tramite un indirizzo virtuale a livello di sistema. In questo modo, il modello di I/O Storport definisce un set diverso di valori per il membro MapBuffers di PORT_CONFIGURATION_INFORMATION (STORPORT).With this in view, the Storport I/O model define a different set of values for the MapBuffers member of PORT_CONFIGURATION_INFORMATION (STORPORT).

Valore Significato

STOR_MAP_NO_BUFFERS

Il driver Storport non esegue il mapping dei buffer di dati per qualsiasi tipo di SRB. Pertanto, i relativi driver miniport non devono accedere direttamente ai dati a cui fa riferimento il membro DataBuffer in uno dei database SRB ricevuti.

STOR_MAP_ALL_BUFFERS

Funzionalità correntemente non implementata. Se al membro MapBuffers viene assegnato questo valore, il driver Storport lo interpreta come se fosse STOR_MAP_NON_READ_WRITE_BUFFERS.

STOR_MAP_NON_READ_WRITE_BUFFERS

Il driver Storport esegue il mapping dei buffer di dati per la richiesta, purché non sia una richiesta di trasferimento dati (lettura e scrittura). Analogamente, i driver miniport possono accedere ai dati in SRB purché SRB non appartenga a una richiesta di lettura o scrittura.