MiniportISR

VOID 

  MiniportISR(

    OUT PBOOLEAN  InterruptRecognized,

    OUT PBOOLEAN  QueueMiniportHandleInterrupt,

    IN NDIS_HANDLE  MiniportAdapterContext

    );

MiniportISRÀº µå¶óÀ̹öÀÇ NICÀÌ ÀÎÅÍ·´Æ®µéÀ» ¹ß»ýÇÑ´Ù¸éÀº ÇÊ¿äÇÑ ÇÔ¼öÀÌ´Ù.

¸Å°³º¯¼ö

InterruptRecognized
MiniportISRÀº NICÀÌ ½ÇÁ¦·Î ÀÎÅÍ·´Æ®¸¦ ¹ß»ýÇÒ °ÍÀÎÁö¸¦ ¸®ÅÏÇÏ´Â º¯¼ö¸¦ °¡¸®Å²´Ù. ¸¸¾à ÀÎÅÍ·´Æ®°¡ MiniportAdapterContext·Î À§ÀÓµÈ NICÀ¸·ÎºÎÅÍ ¿Â´Ù´Â °ÍÀ» °¨ÁöÇÑ´Ù¸éÀº ÀÌ °ªÀ» TRUE·Î ¼³Á¤ÇÑ´Ù. ¸¸¾à NICÀÌ °°Àº ¹ö½º¿¡¼­ ´Ù¸¥ ÀåÄ¡µé·Î IRQ¸¦ °øÀ¯ÇÑ´Ù¸éÀº, MiniportISRÀº NICÀÌ ÀÎÅÍ·´Æ®°¡ ¾Æ´Ñ °ÍÀ» °áÁ¤ÇÒ ¶§¸¶´Ù °¡´ÉÇÏ´Ù¸éÀº ºü¸£°Ô FALSE¸¦ ¸®ÅÏÇØ¾ß ÇÑ´Ù.

QueueMiniportHandleInterrupt
¸¸¾à MiniportHandleInterrupt ÇÔ¼ö°¡ ÀÎÅÍ·´Æ® ±¸µ¿ I/O ¿¬»êÀ» ¿Ï¼ºÇϱâ À§ÇØ È£ÃâµÇ¾îÁø´Ù¸éÀº MiniportISRÀº TRUE·Î ¼³Á¤ÇÏ´Â º¯¼ö¸¦ °¡¸®Å²´Ù.

MiniportAdapterContext
µå¶óÀ̹ö°¡ MiniportInitialize¿¡ ÀÇÇØ ¼³Á¤µÈ NIC ´ç »óŸ¦ À¯ÁöÇÏ´Â ¹Ì´ÏÆ÷Æ® ÇÒ´ç ÄÁÅØ½ºÆ® ¿µ¿ª¿¡ ´ëÇÑ ÇÚµéÀ» ÁöÁ¤ÇÑ´Ù.

ÁÖ¼®

NIC µå¶óÀ̹ö´Â MiniportISR ÇÔ¼ö³»¿¡¼­ NICÀÌ MiniportHandleInterrupt ÇÔ¼ö·Î ¹ß»ýÇÏ´Â °¢ ÀÎÅÍ·´Æ®¸¦ À§ÇÑ I/O ¿¬»êµéÀ» Áö¿¬ÇÔÀ¸·Î½á °¡´ÉÇÑÇÑ ÀûÀº ÀÛ¾÷À» ÇØ¾ß ÇÑ´Ù. NIC µå¶óÀ̹öÀÇ ISRÀº ºñ·Ï MiniportISR ÇÔ¼öÀÇ µÎ°³ÀÇ ÀνºÅϽºµéÀÌ(instantiations) SMP ±â°è¿¡¼­ µ¿½Ã¿¡ ½ÇÇàµÇ¾îÁöÁö¸¸Àº, ƯÈ÷ ¸¸¾à ¹Ì´ÏÆ÷Æ®°¡ full-duplex º¸³»±â¿Í ¹Þ±â¸¦ Áö¿øÇÑ´Ù¸éÀº, ÀçÁøÀÔÀ» ¾ÈÇÑ´Ù.

ÀÎÅÍ·´Æ®°¡ NIC ¹ö½º¿¡ ´ëÇØ ¹ß»ýÇÒ ¶§, ¹Ì´ÏÆ÷Æ® µå¶óÀ̹öÀÇ MiniportISR ÇÔ¼ö´Â ´ÙÀ½°ú °°Àº Á¶°Çµé ¾Æ·¡¼­ È£ÃâµÇ¾îÁø´Ù:

  • NICÀº ±×·¯ÇÑ ¹ö½º¿¡¼­ ´Ù¸¥ ÀåÄ¡µé°ú IRQ¸¦ °øÀ¯ÇÑ´Ù.

    ¸¸¾à NICÀÌ ´Ù¸¥ ÀåÄ¡µé°ú IRQ¸¦ °øÀ¯ÇÑ´Ù¸éÀº, MiniportISR ÇÔ¼ö´Â NICÀÌ ÀÎÅÍ·´Æ®¸¦ ¹ß»ýÇÒ °ÍÀÎÁö¸¦ °áÁ¤Çϱâ À§ÇØ È£ÃâµÇ¾îÁú °ÍÀÌ´Ù. ¸¸¾à NICÀÌ ÀÎÅÍ·´Æ®¸¦ ¹ß»ýÇÏÁö ¾Ê´Â´Ù¸éÀº, MiniportISRÀº Áï½Ã FALSE¸¦ ¸®ÅÏÇØ¼­ ÀÎÅÍ·´Æ®¸¦ ¹ß»ýÇÑ ÀåÄ¡ÀÇ µå¶óÀ̹ö°¡ ºü¸£°Ô È£ÃâµÇµµ·Ï ÇÑ´Ù.

  • MiniportInitialize·ÎºÎÅÍ NdisMRegisterInterrupt¸¦ È£ÃâÇÏ´Â ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö´Â MiniportISR ÇÔ¼ö´Â ¹ö½º¿¡¼­ ¸ðµç ÀÎÅÍ·´Æ®¸¦ À§ÇØ È£ÃâµÇ¾îÁöµµ·Ï ÁöÁ¤ÇÑ´Ù. MiniportDisable/EnableInterrupt ±â´ÉÀ» Á¦°øÇÏÁö ¾Ê´Â ¹Ì´ÏÆ÷Æ®µéÀº ¸ðµç ÀÎÅÍ·´Æ®¿¡ ÀÇÇØ È£ÃâµÇ¾îÁö´Â ISRµéÀ» °¡Á®¾ß ÇÑ´Ù.
  • µå¶óÀ̹öÀÇ MiniportInitialize ȤÀº MiniportHalt ÇÔ¼ö°¡ ½ÇÇàÇÏ´Â µ¿¾È NIC¿¡ ÀÎÅÍ·´Æ®°¡ ÀϾ´Ù.

    MiniportISR ÇÔ¼ö´Â Ç×»ó ¹Ì´ÏÆ÷Æ®ÀÇ NICÀÌ ¶ÇÇϳªÀÇ ÀåÄ¡¿Í IRQ¸¦ °øÀ¯ÇÒ °ÍÀÎÁö ȤÀº MiniportISR ÇÔ¼ö°¡ ¹ö½º¿¡ ¸ðµç ÀÎÅÍ·´Æ®¸¦ À§ÇØ È£ÃâµÇ¾îÁú °ÍÀÎÁö¿¡ °ü°è¾øÀÌ ±×·¯ÇÑ °æ¿ì¿¡ È£ÃâµÇ¾îÁø´Ù.

MiniportISRÀº NIC¿¡¼­ ÀÎÅÍ·´Æ®¸¦ ¾ø¾Ö°í ÀÎÅÍ·´Æ®¿¡ ´ëÇÑ »óŰ¡ ¾î¶² °ÍÀÎÁö ÀúÀåÇϰí MiniportHandleInterrupt ÇÔ¼ö¿¡ ´ëÇÑ °¡´ÉÇÑ ÇÑ °¢ ÀÎÅÍ·´Æ®¸¦ À§ÇÑ I/O 󸮸¦ Áö¿¬ÇÑ´Ù.

MiniportISRÀº InterruptRecognized¿Í QueueMiniportHandleInterrupt º¯¼öÀÇ TRUE ¼³Á¤À¸·Î Á¦¾î¸¦ ¸®ÅÏÇÑ ÈÄ¿¡ ÀÀ´äÇÏ´Â MiniportHandleInterrupt ÇÔ¼ö´Â ISRÀÇ ±×°Íº¸´Ù(DIRQL) ³·Àº Çϵå¿þ¾î ¿ì¼±±Ç(IRQL DISPATCH_LEVEL)¿¡¼­ ½ÇÇàÇÑ´Ù. ÀϹÝÀûÀÎ ±ÔÄ¢¿¡¼­, MiniportHandleInterrupt´Â NICÀÌ ½ÇÁ¦·Î ÀÎÅÍ·´Æ®¸¦ ¹ß»ýÇÑ °ÍÀÎÁö¸¦ °áÁ¤ÇÏ´Â °ÍÀ» Á¦¿ÜÇϰí ÇÊ¿äÇÏ´Ù¸éÀº ÀÎÅÍ·´Æ®ÀÇ Å¸ÀÔ(receive, send, reset....)¸¦ ÀúÀåÇϰí ÀÎÅÍ·´Æ® À¯µµ I/O ¿¬»êµéÀ» À§ÇÑ ¸ðµç ÀÛ¾÷µéÀ» ÇØ¾ß ÇÑ´Ù.

µå¶óÀ̹ö °³¹ßÀÚ´Â MiniportISR°ú MiniportHandleInterruptÀÇ ½ÇÇà »çÀÌ¿¡¼­ ÀÏ´ëÀÏ ÀÀ´ä¿¡ ÀÇÁ¸ÇÒ ÇÊ¿ä´Â ¾ø´Ù. MiniportHandleInterrupt ÇÔ¼ö´Â Çϳª ÀÌ»óÀÇ NIC ÀÎÅÍ·´Æ®¸¦ À§ÇÑ I/O 󸮸¦ ´Ù·ç±â À§ÇØ ¾²¿©Áú °ÍÀÌ´Ù. MiniportISR°ú MiniportHandleInterrupt ÇÔ¼öµéÀº µ¿½Ã¿¡ SMP ±â°èµé¿¡¼­ ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ´õ¿ì±â, MiniportISRÀÌ NIC ÀÎÅÍ·´Æ®¸¦ ÀνÄÇÏÀÚ ¸¶ÀÚ, NICÀº MiniportHandleInterrupt DPC°¡ ±×·¯ÇÑ ¿¬¼ÓÀÎ ÀÎÅÍ·´Æ®µéÀ» À§ÇØ Çϳª¾¿ ½ÇÇàÀ» À§ÇØ Å¥¿¡ ÀúÀåÇÒ ¼ö ÀÖ´Â µ¿¾È¿¡ ¶Ç ÇϳªÀÇ ÀÎÅÍ·´Æ®¸¦ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.

¸¸¾à MiniportISRÀº NIC ·¹Áö½ºÅ͵é ȤÀº »óÅ º¯¼öµé°ú °°Àº ÀÚ¿øµéÀ» ¶ÇÇϳªÀÇ ³·Àº IRQL¿¡¼­ ½ÇÇàÇÏ´Â MiniportXxx ¿Í °øÀ¯ÇÑ´Ù¸éÀº, ±×·¯ÇÑ MiniportXxx´Â NdisMSynchronizeWithInterrupt¸¦ È£ÃâÇØ¼­ µå¶óÀ̹öÀÇ MiniportSynchronizeISR ÇÔ¼ö´Â µ¿±âÈ­µÈ ¸ÖƼÇÁ·Î¼¼¼­ ¾ÈÀü ¹æ½ÄÀ¸·Î ±×·¯ÇÑ °øÀ¯µÈ ÀÚ¿øµéÀ» Á¢±ÙÇÒ °ÍÀÌ´Ù. ±×·¸Áö ¾Ê´Ù¸éÀº °øÀ¯µÈ ÀÚ¿øµé¿¡ Á¢±ÙÇÒ ¶§, ±×·¯ÇÑ MiniportXxx ÇÔ¼ö´Â °¡´ÉÇϸéÀº MiniportXxx ¿¡ ÀÇÇØ ÇàÇØÁø ÀÛ¾÷ÀÌ ¿ø»ó º¹±¸µÇ°í MiniportISR¿¡ ÀÇÇØ ¼±Á¡µÉ ¼ö ÀÖ´Ù.

¹Ì´ÏÆ÷Æ®´Â NdisMRegisterInterrupt·Î ÇÒ´çÇÑ ÀÚ¿øµéÀ» ÇØÁ¦Çϱâ À§ÇØ MiniportInitialize ȤÀº MiniportHalt ÇÔ¼ö¿¡¼­ NdisMDeregisterMiniport¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. NdisMDeregisterMiniport°¡ ¸®ÅÏÇÑ ÈÄ¿¡, NDIS´Â ¹Ì´ÏÆ÷Æ®ÀÇ MiniportISR ȤÀº MiniportHandleInterrupt ÇÔ¼öµéÀ» È£ÃâÇÏÁö ¾Ê´Â´Ù.

µðÆúÆ®·Î, MiniportISRÀº ƯÈ÷ µå¶óÀ̹ö°¡ NdisMRegisterInterrupt·Î ÀÎÅÍ·´Æ® °´Ã¼¸¦ ÃʱâÈ­ÇÒ ¶§ ÇÒ´çµÈ DIRQL¿¡¼­ DIRQL¿¡¼­ ½ÇÇàÇÑ´Ù. ±×·¯¹Ç·Î, MiniportISRÀº ´ÜÁö ¾î¶² IRQL¿¡¼­ È£ÃâÇÏ´Â µ¥ ¾ÈÀüÇÑ NdisRawXxx ȤÀº NdisRead/WriteRegisterXxx ÇÔ¼öµé °ú °°Àº NDIS ¶óÀ̺귯¸® ÇÔ¼öµéÀ» È£ÃâÇÒ ¼ö ÀÖ´Ù.