NdisMSetupDmaTransfer

VOID 

  NdisMSetupDmaTransfer(

    OUT PNDIS_STATUS  Status,

    IN NDIS_HANDLE  MiniportDmaHandle,

    IN PNDIS_BUFFER  Buffer,

    IN ULONG  Offset,

    IN ULONG  Length,

    IN BOOLEAN  WriteToDevice

    );

NdisMSetupDmaTransfer ÇÔ¼ö´Â DMA Àü¼ÛÀ» À§Çؼ­ È£½ºÆ® DMA ÄÁÆ®·Ñ·¯¸¦ ¼³Á¤ÇÑ´Ù.

¸Å°³º¯¼ö

Status
´ÙÀ½ Áß Çϳª°¡ µÉ ¼ö ÀÖ´Â ¸®Äù½ºÆ®ÀÇ »óŸ¦ ¸®ÅÏÇÏ´Â ÀÌ ÇÔ¼öÀÇ È£ÃâÀÚ Á¦°ø º¯¼ö¸¦ °¡¸®Å²´Ù:

NDIS_STATUS_SUCCESS
DMA ÄÁÆ®·Ñ·¯°¡ µ¥ÀÌŸ ¹«°á¼ºÀ» À¯ÁöÇϱâ À§Çؼ­ ÀåÄ¡·ÎºÎÅÍ ÃʱâÈ­ÇÑ ¸í½ÃµÈ µ¥ÀÌŸ¸¦ Àü¼ÛÇϱâ À§Çؼ­ ¼³Á¤µÆ´Ù.

NDIS_STATUS_RESOURCES
Àü¼ÛÀ» À§Çؼ­ DMA ÄÁÆ®·Ñ·¯¸¦ ¼³Á¤ÇÏ´Â ½Ãµµ°¡ ½ÇÆÐÇß´Ù. ¿Ö³ÄÇϸé MiniportDmaHandle¿¡ ÀÇÇØ¼­ Áö½ÃµÇ´Â ä³ÎÀÌ ÇöÀç µ¥ÀÌŸ Àü¼Û¿¡ »ç¿ëÁßÀ̰ųª ÁÖ¾îÁø Length°¡ À¯È¿ÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù.

MiniportDmaHandle
ÃʱâÈ­ µ¿¾È¿¡ NdisMRegisterDmaChannel ÇÔ¼ö¿¡ ÀÇÇØ¼­ ¸®ÅÏµÈ ÇÚµéÀ» ¼­¼úÇÑ´Ù.

Buffer
µ¥ÀÌŸ°¡ Àü¼ÛµÉ È£½ºÆ® ¸Þ¸ð¸®ÀÇ ¹üÀ§¸¦ ¸ÅÇÎÇÏ´Â ¹öÆÛ µð½ºÅ©¸³Å͸¦ °¡¸®Å²´Ù.

Offset
Àü¼ÛÀÌ ½ÃÀÛµÉ ¶§ ¸ÊµÈ ¹öÆÛ¾ÈÀÇ ¹ÙÀÌÆ® ¿É¼ÂÀ» ¼­¼úÇÑ´Ù. 0Àº Àü¼ÛÀÌ Buffer¿¡ ¸í½ÃµÈ ¹üÀ§ÀÇ Ã³À½ ¹ÙÀÌÆ®¿¡¼­ ½ÃÀÛÇØ¾ßÇÔÀ» ¾Ë¸°´Ù.

Length
Àü¼ÛµÇ´Â µ¥ÀÌŸÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ¼­¼úÇÑ´Ù. Offset°ú Length¿¡ ÀÇÇØ¼­ ¸í½ÃµÈ ¹üÀ§´Â Buffer¿¡ ¸í½ÃµÈ ÀûÀýÇÑ ¼­ºê ¹üÀ§À̾î¾ßÇÑ´Ù.

WriteToDevice
NICÀ» ÅëÇØ¼­ ½Ã½ºÅÛÀ¸·ÎºÎÅÍ ¾Æ¿ô¹Ù¿îµå Àü¼ÛÀ» À§Çؼ­ TRUE¸¦ ¼­¼úÇÑ´Ù.

ÁÖ¼®

½½·¹À̺ê DMA NICÀÇ µå¶óÀ̹ö´Â WriteToDevice°¡ TRUE·Î ¼³Á¤µÈ °Í¿¡ ´ëÇØ¼­ º¸³»±â ¸®Äù½ºÆ®¿¡ ´ëÇÑ ÀÀ´äÀ¸·Î NdisMSetupDmaTransfer ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ±×µéÀÌ NICÀ¸·ÎºÎÅÍ È£½ºÆ® ¸Þ¸ð¸®·Î ¸®½ÃºêµÈ µ¥ÀÌŸ¸¦ Àü¼ÛÇÒ ¶§ WriteToDevice¸¦ FALSE·Î ¼³Á¤ÇÑ´Ù.

NdisMSetupDmaTransfer ÇÔ¼öÀÇ È£ÃâÀÚ´Â Àü¼Û Ÿ°ÙÀÌ µÇ°í È£½ºÆ®¿¡¼­ NICÀ¸·ÎÀÇ ´Ù¿î·Îµå ¿¬»ê¿¡ ´ëÇÑ µ¥ÀÌŸ¸¦ Æ÷ÇÔÇϴ ȣ½ºÆ® ¸Þ¸ð¸® ¹üÀ§¿¡ ¸ÅÇÎµÈ ¹öÆÛ µð½ºÅ©¸³Å͸¦ Á¦°øÇÑ´Ù. NICÀÇ DMA ¾ïÁ¦¸¦ ¸¸Á·½ÃŰ´Â »çÀÌÁî·Î Àü¼ÛÀ» ¼­¼úÇϱâ À§Çؼ­ È£ÃâÀÚ´Â ÇÊ¿äÇÏ´Ù¸é Offset°ú Length ¸Å°³º¯¼ö¸¦ °¡Áö°í Àü¼ÛµÇµµ·Ï ¼­ºê ¹üÀ§¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.

È£ÃâÀÚ´Â WriteToDevice°¡ FALSEÀÏ ¶§ NICÀ¸·ÎºÎÅÍ Àü¼ÛµÉ ¸®½Ãºê µ¥ÀÌŸÀÇ È£½ºÆ® ¹üÀ§¸¦ ¼­¼úÇÏ´Â ¹öÆÛ µð½ºÅ©¸³Å͸¦ Á¦°øÇؾßÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é BufferÀÇ ¹öÆÛ µð½ºÅ©¸³ÅÍ´Â NIC µå¶óÀ̹öÀÇ MiniportSend³ª MiniportSendPackets ÇÔ¼ö·Î ÀԷµǴ ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ üÀÎÈ­µÈ´Ù.

±æÀ̰¡ 256K º¸´Ù ÀÛÀº º¸³»±â ¸®Äù½ºÆ®Ã³·³ ÀÛÀº Àü¼Û ¸®Äù½ºÆ®¿¡ ´ëÇÑ ÆÛÆ÷¸Õ½º¸¦ Çâ»ó½Ã۱â À§Çؼ­ ¹Ì´ÏÆ÷Æ®´Â ³»ºÎÀÇ ´Ü°èÀûÀÎ ¹öÆÛ ¾ÈÀ¸·Î ÆÐŶ µ¥ÀÌŸ¸¦ º¹»çÇÒ ¼ö ÀÖ°í ±× ¹öÆÛ¸¦ ¸ÅÇÎÇÏ´Â µå¶óÀ̹ö ÇÒ´ç ¹öÆÛ µð½ºÅ©¸³Å͸¦ NdisMSetupDmaTransfer ÇÔ¼ö·Î Àü´ÞÇÑ´Ù.

NdisMSetupDmaTransfer ÇÔ¼ö·ÎºÎÅÍÀÇ ¸®ÅÏ¿¡¼­ È£½ºÆ® DMA ÄÁÆ®·Ñ·¯´Â Àü¼ÛÀ» À§Çؼ­ ÇÁ·Î±×·¥µÇ¾ú´Ù. ±×¸®°í³ª¼­ ¹Ì´ÏÆ÷Æ®´Â Àü¼Û ¿¬»êÀ» À§Çؼ­ NICÀ» ÇÁ·Î±×·¥ÇÑ´Ù.

Àü¼ÛÀÌ ¿Ï·áµÆÀ» ¶§ ¹Ì´ÏÆ÷Æ®´Â NdisMCompleteDmaTransfer ÇÔ¼ö¸¦ È£ÃâÇØ¾ßÇÑ´Ù.

NdisMSetupDmaTransfer ÇÔ¼öÀÇ È£ÃâÀÚ´Â IRQL <= DISPATCH_LEVEL¿¡¼­ ½ÇÇàÇÑ´Ù.