Aracılığıyla paylaş


System-Mode DMA desteklenmesi

[Yalnızca KMDF için geçerlidir]

Sistem modu DMA, veri yolu ana DMA'nın aksine, birden çok cihazın tek bir, genellikle çok kanallı DMA denetleyicisini paylaştığı bir yapılandırmayı açıklar.

Kernel-Mode Driver Framework (KMDF) sürüm 1.11'den başlayarak, çerçeve, Windows işletim sisteminin Windows 8 veya sonraki sürümlerinde çalışan Yonga Üzerinde Sistem (SoC) tabanlı sistemlerde sistem modu DMA'yı destekler.

Bu konu başlığında, sistem modu DMA cihazına yönelik G/Ç isteklerini işlemek için kmdf sürücüsünün olay geri çağırma işlevlerinde sağlaması gereken kodun yanı sıra kaydedebileceği isteğe bağlı olay geri çağırma işlevleri açıklanmaktadır.

KMDF ve veri yolu yöneticisi DMA hakkında bilgi için bkz. Bus-Master DMA Cihazı için KMDF Sürücüsünde G/Ç İsteklerini İşleme.

Aşağıdaki şekilde, sürücünüzün sistem modu DMA'sını desteklemek için kullandığı olay geri çağırma işlevleri gösterilmektedir:

KMDF sürücülerinde sistem modu DMA uygulaması için olay geri çağırma işlevlerini gösteren Akış Çizelgesi.

System-Mode DMA Aktivatörü oluşturma

Sistem modu DMA profili oluşturmak iki adımlı bir işlemdir. Aşağıdaki adımlar tipik bir senaryoyu temsil ediyor:

  1. Genellikle EvtDriverDeviceAdd geri çağırma işlevinde, sürücü WDF_DMA_ENABLER_CONFIG_INITçağırır ve Profili parametresini SystemMode veya SystemModeDuplex olarak ayarlar. Sürücü daha sonra WdfDmaEnablerCreateçağrıda bulunur ve az önce aldığı WDF_DMA_ENABLER_CONFIG yapısını aktarır.

    Sürücü alternatif olarak EvtDevicePrepareHardwaresırasında etkinleştiriciyi oluşturabilir.

  2. Sürücünüzün EvtDevicePrepareHardware geri çağırma işlevi, WdfDmaEnablerConfigureSystemProfile yöntemini çağırarak DMA etkinleştiricisini DMA kaynaklarıyla ilişkilendirir. Çift yönlü bir etkinleştirici için sürücü, aktarma yönlerinden her birini yapılandırmak üzere WdfDmaEnablerConfigureSystemProfile'ü iki kez çağırır.

    Sürücü, EvtDevicePrepareHardware tamamlandıktan sonra WdfDmaEnablerConfigureSystemProfile çağırabilir, ancak DMA işlemlerini başlatmadan önce sürücünün bu yöntemi çağırması gerekir.

İsteğe Bağlı Geri Çağırma İşlevleri Sağlama

KMDF sürücüleri genellikle DMA kanallarını yapılandırmaz. Ancak, belirli durumlarda sürücülerin kanala özgü yapılandırma gerçekleştirmesi gerekebilir. Örneğin, bir sürücü aşağıdaki adımları kullanarak DMA denetleyicisi tarafından uygulanan özel bir işlevi çağırabilir:

  1. sürücününistek işleyicilerinden birinde, sürücü WdfDmaTransactionSetChannelConfigurationCallback’i, bir EvtDmaTransactionConfigureDmaChannel geri çağırma işlevini kaydetmek için çağırır.
  2. Sürücünüzün EvtDmaTransactionConfigureDmaChannel geri çağırma işlevi WDM DMA_ADAPTERişaretçisini almak için WdfDmaEnablerWdmGetDmaAdapterçağırır. Bu yapı, sürücünün sistem modu DMA kanalını temsil eden bağdaştırıcı nesnesidir.
  3. Sürücü daha sonra ConfigureAdapterChannel çağırarak DMA denetleyicisi tarafından uygulanan özel işlevleri etkinleştirebilir. Bu rutin yalnızca bir DMA_OPERATIONS yapısında döndürülen adres işaretçisi tarafından çağrılabilir.
  4. Sürücünüzün EvtDmaTransactionConfigureDmaChannel geri çağırma işlevi, DMA kanalını başarıyla yapılandırırsa TRUE döndürür.
  5. Çerçeve, sürücünün EvtProgramDma geri çağırma işlevini çağırır.

Aktarım Tamamlanma Bildirimi Alınıyor

Veri yolu ana denetleyicilerini kullanan cihazlardan farklı olarak, sistem modu bir DMA cihazının donanımı, bir kesme oluşturarak DMA aktarımının tamamlandığını belirtmeyebilir.

Cihazınız DMA aktarımının tamamlandığını belirten bir kesinti oluşturmazsa, sürücünüz sistem modu DMA aktarımı tamamlandığında çerçevenin çağırdığı bir EvtDmaTransactionDmaTransferComplete olay geri çağırma işlevi sağlayabilir.

Bu geri çağırma işlevini kaydetmek için, bir sürücü WdfDmaTransactionSetTransferCompleteCallbackişleviniistek işleyicilerinden birinden çağırır.