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. |