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 ¶óÀ̺귯¸® ÇÔ¼öµéÀ» È£ÃâÇÒ ¼ö ÀÖ´Ù.
|