NdisMRegisterInterrupt
NDIS_STATUS
NdisMRegisterInterrupt(
OUT PNDIS_MINIPORT_INTERRUPT Interrupt,
IN NDIS_HANDLE MiniportAdapterHandle,
IN UINT InterruptVector,
IN UINT InterruptLevel,
IN BOOLEAN RequestIsr,
IN BOOLEAN SharedInterrupt,
IN NDIS_INTERRUPT_MODE InterruptMode
);
|
NdisMRegisterInterrupt´Â NIC µå¶óÀ̹öÀÇ MiniportIsr °ú MiniportHandleInterrupt ÇÔ¼ö»çÀÌ¿¡ ÀÌ¹Ì NdisMRegisterMiniport·Î µî·ÏµÈ, ¸ÊÇÎÀ» ¼³Á¤Çϰí NICÀÌ ÀÎÅÍ·´Æ®ÇÏ´Â ¹ö½º °ü·Ã º¤ÅÍ¿Í ·¹º§À» ¼³Á¤ÇÑ´Ù.
¸Å°³º¯¼ö
- Interrupt
- NdisMRegisterInterrupt°¡ ÃʱâÈÇϰí NdisMSynchronizeWithInterrupt¿¡ ´ëÇÑ °è¼ÓÀûÀΠȣÃâ¿¡¼ ¹Ì´ÏÆ÷Æ®°¡ »ç¿ëÇÏ´Â ÇÚµéÀ» ¸®ÅÏÇÏ´Â ºÒºÐ¸íÇÑ ÀÎÅÍ·´Æ® °´Ã¼¸¦ Æ÷ÇÔÇϴ ȣÃâÀÚ ÇÒ´ç »óÁÖ ¸Þ¸ð¸®¸¦ °¡¸®Å²´Ù.
- MiniportAdapterHandle
- MiniportIntialize¿¡ ´ëÇÑ ÀÔ·Â ÇÚµéÀ» °¡¸®Å²´Ù.
- InterruptVector
- NIC¿¡ ÀÇÇØ »ç¿ëµÈ ¹ö½º °ü·Ã º¤ÅÍ ³Ñ¹ö¸¦ ÁöÁ¤ÇÑ´Ù.
- InterruptLevel
- ÀÎÅÍ·´Æ®¸¦ À§ÇÑ ¹ö½º °ü·Ã DIRQL¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ °ªÀº °ÅÀÇ Ç×»ó InterruptVectorÀÇ °Í°ú °°´Ù.
- RequestIsr
- ¸¸¾à MiniportIsr ÇÔ¼ö°¡ NICÀÌ ÀÎÅÍ·´Æ®ÇÒ ¶§¸¶´Ù È£ÃâµÇ¾îÁø´Ù¸éÀº TRUE¸¦ ÁöÁ¤ÇÑ´Ù. ¸¸¾à NICÀÌ I/O ¹ö½º¿¡ ÀÖ´Â ´Ù¸¥ ÀåÄ¡µé°ú ÀÎÅÍ·´Æ®µéÀ» °øÀ¯ÇÏ´Ù¸éÀº, ÀÌ ¸Å°³º¯¼ö´Â TRUE·Î ¼³Á¤µÇ¾îÁú °ÍÀÌ´Ù.
- SharedInterrupt
- ¸¸¾à I/O ¹ö½º¿¡ ÀÖ´Â ´Ù¸¥ ÀåÄ¡µéÀÌ ÀÌ·¯ÇÑ ÀÎÅÍ·´Æ® ¶óÀεéÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù¸éÀº TRUE¸¦ ÁöÁ¤ÇÑ´Ù. ¸¸¾à ÀÌ ¸Å°³º¯¼ö°¡ FALSE·Î ¼³Á¤µÈ´Ù¸éÀº ¶Ç ÇϳªÀÇ ÀåÄ¡´Â ÀÌ¹Ì ·¹Áö½ºÆ®¸®³»¿¡ ÁÖ¾îÁø ÀÎÅÍ·´Æ® º¤Å͸¦ ¿ä±¸ÇÑ´Ù¸é, NdisMRegisterInterrupt´Â ½ÇÆÐÇÒ °ÍÀÌ´Ù.
- InterruptMode
- NICÀÌ ´ÙÀ½°ú °°Àº °ªµé Áß¿¡ Çϳª·Î¼ ¹ß»ýÇÑ ÀÎÅÍ·´Æ® ŸÀÔÀ» ÁöÁ¤ÇÑ´Ù.
- NdisInterruptLatched
- ÀÎÅÍ·´Æ® ¶óÀο¡¼ ³·Àºµ¥¼ ³ôÀº °÷À¸·Î ÀüÀÌ¿¡ ÀÇÇØ ÀÎÅÍ·´Æ®µéÀÌ Æ®¸®°ÅµÈ´Ù.
- NdisInterruptLevelSensitive
- ÀÎÅÍ·´Æ®µéÀº ÀÎÅÍ·´Æ® ¶óÀÎÀÌ assertµÈ µ¿¾ÈÀº Ȱ¼ºÈµÈ´Ù.
¸®Åϰª
NdisMRegisterInterrupt´Â ´ÙÀ½°ú °°Àº Çϳª¸¦ ¸®ÅÏÇÒ ¼ö ÀÖ´Ù. :
- NDIS_STATUS_SUCCESS
- NDIS´Â ÀÎÅÍ·´Æ® °´Ã¼¸¦ ÃʱâÈÇϰí À¯È¿ÇÑ Interrupt ÇÚµéÀ» ¸®ÅÏÇÏ°í ¸¸¾à NICÀÌ IRQ¸¦ °øÀ¯ÇÏÁö ¾Ê´Â´Ù¸éÀº ÁÖ¾îÁø ÀÎÅÍ·´Æ® º¤ÅÍ¿Í °°Àº NICÀ» À§ÇØ ·¹Áö½ºÆ®¸®³»¿¡ Çϵå¿þ¾î ÀÚ¿øµéÀ» ¿ä±¸Çϰí MiniportISR(ȤÀº MiniportDisableInterrupt)¿Í ÀÎÅÍ·´Æ®°¡ NdisMRegisterInterrupt¿¡ ´ëÇÑ È£Ãâ¿¡¼ ¿ä±¸µÈ °ÍÀÌ ¹ß»ýÇÒ ¶§ È£ÃâµÇ¾îÁö´Â °ü·ÃµÈ MiniportHandleInterrupt ÇÔ¼öµéÀ» ¼³Á¤ÇÑ´Ù.
- NDIS_STATUS_RESOURCE_CONFLICT
- ·¹Áö½ºÆ®¸®³»¿¡ º¤ÅÍ È¤Àº ·¹º§¸¦ ¿ä±¸ÇÏ´Â ½Ãµµ°¡ °¡´ÉÇϸéÀº µå¶óÀ̹ö°¡ ÀÌ¹Ì ÀåÄ¡¸¦ À§ÇØ ¿ä±¸Ç߱⠶§¹®¿¡ ½ÇÆÐÇÑ´Ù. NdisMRegisterInterrupt´Â ¸¸¾à À̰ÍÀÌ ¹ß»ýÇÑ´Ù¸éÀº ¿¡·¯¸¦ ·Î±×ÇÑ´Ù.
- NDIS_STATUS_RESOURCES
- NDIS´Â NICÀ» À§ÇØ ·¹Áö½ºÆ®¸®³»¿¡ ÀÚ¿øµéÀ» ¿ä±¸ÇÏ´Â ÃæºÐÇÑ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÒ ¼ö ¾ø´Ù.
- NDIS_STATUS_FAILURE
- ÀÎÅÍ·´Æ® °´Ã¼¸¦ ÃʱâÈÇÏ´Â ½Ãµµ°¡ ·¹Áö½ºÆ®¸®³»¿¡¼ InterruptVector ȤÀº InterruptLevel¿¡ ¶Ç ÇϳªÀÇ µå¶óÀ̹öÀÇ ¿ì¼± ¿ä±¸ ¶§¹®¿¡ ½ÇÆÐÇÑ´Ù.
ÁÖ¼®
NIC µå¶óÀ̹ö´Â ¸¸¾à NICÀÌ ÀÎÅÍ·´Æ®µéÀ» ¹ß»ýÇÑ´Ù¸éÀº MiniportInitialize ÇÔ¼ö·ÎºÎÅÍ NdisMRegisterInterrupt¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ÀÎÅÍ·´Æ®µéÀ» ¹ß»ý¾ÈÇÏ´Â NICÀÇ µå¶óÀ̹ö´Â NdisMRegisterInterrupt ´ë½Å¿¡ NdisMInitializeTimer ¿Í NdisMSetPeriodicTimer ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
MiniportInitialize ÇÔ¼ö´Â NdisMRegisterInterrupt¸¦ È£ÃâÇϱâ Àü¿¡ NdisMSetAttributes ȤÀº NdisMSetAttributesEx ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù.
¹ö½º °ü·Ã °ªµéÀ» ¾òÀº MiniportInitialize ÇÔ¼ö´Â ·¹Áö½ºÆ®¸®·ÎºÎÅÍ È¤Àº ¹ö½º ŸÀÔ Æ¯Á¤ NdisXxx ±¸¼º ÇÔ¼ö¸¦ È£ÃâÇÔÀ¸·Î½á NdisMRegisterInterrupt¿¡°Ô Àü´ÞµÇ¾îÁø´Ù.
¸¸¾à NdisMRegisterInterrupt¿¡ ´ëÇÑ È£ÃâÀÌ ½ÇÆÐÇÑ´Ù¸éÀº, MiniportInitialize ÇÔ¼ö´Â ÀÌ¹Ì NICÀ» À§ÇØ ÇÒ´çµÈ ¸ðµç ÀÚ¿øµéÀ» ÇØÁ¦ÇØ¾ß ÇÏ°í ±×·¯ÇÑ NICÀ» À§ÇØ ÃʱâȰ¡ ½ÇÆÐÇÑ´Ù.
NdisMRegisterInterrupt ÇÔ¼ö´Â InterruptVector(Ä«µå°¡ ½Ã½ºÅÛ¿¡ ÀÎÅÍ·´Æ®¸¦ À§ÇØ assertÇÑ ÀÎÅÍ·´Æ® ¶óÀÎ)¿Í InterruptLevel(½Ã½ºÅÛ¿¡ ÀÇÇØ ÇÒ´çµÈ ±×·¯ÇÑ ÀÎÅÍ·´Æ®ÀÇ Çϵå¿þ¾î ¿ì¼±±Ç Áï DIRQL) »çÀÌ¿¡ ±¸º°µÈ´Ù. Ç×»ó, ÀÌ·¯ÇÑ °ªµéÀº ¸¸¾à µå¶óÀ̹ö °³¹ßÀÚ°¡ ƯÁ¤ NICÀ» À§ÇØ ´Ù¸£´Ù´Â °ÍÀ» ¾ËÁö ¸øÇϰųª ¹Ì´ÏÆ÷Æ®°¡ Çö Ç÷§Æû¿¡¼ ÀÚ¿øµéÀ» °øÀ¯ÇÏ´Â Çϳª ÀÌ»óÀÇ NICÀ» Á¦¾îÇÏÁö ¾Ê´Â´Ù¸éÀº °°Àº °ªÀ¸·Î ¿©°ÜÁú ¼ö ÀÖ´Ù.
¸¸¾à NICÀÌ I/O ¹ö½º¿¡¼ ´Ù¸¥ ÀåÄ¡µé°ú °øÀ¯ÇÑ´Ù¸éÀº, NdisMRegisterInterruptÀÇ È£ÃâÀÚ´Â SharedInterrupt ¿Í RequestIsr ¸Å°³º¯¼öµéÀ» TRUE·Î ¼³Á¤ÇØ¾ß ÇÑ´Ù. ±×·¯ÇÑ NIC µå¶óÀ̹öÀÇ MiniportIsr ÇÔ¼ö´Â NICÀ» À§ÇÑ ÀÎÅÍ·´Æ®°¡ ³ªÅ¸³ªÁö ¾ÊÀ» ¶§ È£ÃâµÇ¾îÁú ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ È¯°æ¿¡¼, MiniportIsrÀº °¡´ÉÇÏ´Ù¸éÀº, ÀÎÅÍ·´Æ®°¡ ÀνĵÇÁö ¾Ê°Å³ª NIC¿¡¼ °¡´ÉÇÑ ÀÎÅÍ·´Æ®µéÀ» leavesÇØ¾ß ÇÑ´Ù´Â °ÍÀ» ÀεðÄÉÀÌÆ®ÇÏ´Â FALSE¸¦ ¸®ÅÏÇÑ´Ù.
ÀÎÅÍ·´Æ®µéÀÌ NIC¿¡¼ Àο¡À̺íµÉ ¶§, µå¶óÀ̹öÀÇ MiniportIsr ÇÔ¼ö´Â ÃʱâÈÇÏ´Â µ¿¾È NdisMRegisterInterrupt¿¡ ´ëÇÑ ¼º°øÀûÀΠȣÃâ¿¡¼ À̾î(following) °¢ ¶§¸¶´Ù(any time) È£ÃâµÇ¾îÁú ¼ö ÀÖ´Ù. ±×·¯ÇÑ µå¶óÀ̹öÀÇ MiniportInitialize ÇÔ¼ö´Â µå¶óÀ̹ö°¡ ÀÎÅÍ·´Æ®µéÀ» ´Ù·ç´Â µ¥ ÇÊ¿ä·ÎÇÏ´Â ¸ðµç »óŸ¦ ¼³Á¤ÇÒ ¶§±îÁö NdisMRegisterInterrupt¸¦ È£ÃâÇÒ Çʿ䰡 ¾ø´Ù. MiniportHandleInterrupt ÇÔ¼ö´Â ¸¸¾à µå¶óÀ̹öÀÇ MiniportInitialize ÇÔ¼ö°¡ ÇöÀç ½ÇÇàµÇ°í ÀÖ°í ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÑ´Ù¸éÀº ¿¬¼ÓµÈ ½ÇÇàÀ» À§ÇØ Å¥¿¡ ÀúÀåµÇÁö ¾Ê´Â´Ù.
IRQ¸¦ °øÀ¯ÇÏÁö ¾Ê´Â ´ëºÎºÐÀÇ NIC µå¶óÀ̹ö¿¡ ´ëÇØ¼ MiniportISR ÇÔ¼ö´Â µå¶óÀ̹ö°¡ ÃʱâÈÇÏ´Â µ¿¾ÈÀ» Á¦¿ÜÇØ¼´Â µå¹°°Ô ½ÇÇàµÇ¾îÁø´Ù.(¾Ö¸Å) ±×·¯ÇÑ ¹Ì´ÏÆ÷Æ®´Â MiniportInitialize ÇÔ¼ö°¡ NdisMRegisterInterrupt ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§, RequstIsr¸¦ FALSE·Î ¼³Á¤ÇÏ°í ±×·¯ÇÑ µå¶óÀ̹ö´Â MiniportDisableInterrupt ÇÔ¼ö¸¦ °¡Áö°í ±×¸®°í °¡´ÉÇÏ´Ù¸éÀº MiniportEnableInterrupt ÇÔ¼ö¸¦ °¡Áø´Ù. NDIS ¶óÀ̺귯¸®´Â ±×¸®°í ³ª¼ ÀÎÅÍ·´Æ®°¡ NIC¿¡¼ ¹ß»ýÇÒ ¶§ µå¶óÀ̹öÀÇ MiniportDisableInterrupt ÇÔ¼ö¸¦ È£ÃâÇÏ°í µå¶óÀ̹öÀÇ MiniportHandleInterrupt ÇÔ¼ö´Â ÀÎÅÍ·´Æ®¸¦ À§ÇØ ´ëºÎºÐÀÇ I/O 󸮸¦ ÇÑ´Ù. MiniportHandleInterrupt´Â Á¦¾î¸¦ ¸®ÅÏÇϱâ Àü¿¡, NDIS´Â MiniportEnableInterruptÇÔ¼ö¸¦ È£ÃâÇϰųª MiniportHandleInterrupt ÇÔ¼ö´Â NIC¿¡ ´ëÇØ ´Ù½Ã ÀÎÅÍ·´Æ®µéÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù.
ISR¸¦ °¡Áø ¹Ì´ÏÆ÷Æ®´Â NdisMRegisterInterrupt¸¦ È£ÃâÇÒ ¶§ RequestIsr¸¦ TRUE·Î ¼³Á¤Çϰųª ȤÀº ±×·¸Áö ¾ÊÀºÁö°£¿¡ NDIS´Â ¿î¿µÃ¼Á¦¿¡°Ô ´Ù¸¥ ÀåÄ¡µé·ÎºÎÅÍ ÀÎÅÍ·´Æ®µéÀº ºí·°µÇÁö ¾Ê±â À§ÇØ ÀÎÅÍ·´Æ®¸¦ ¾Ë¸°´Ù.(acknowledges)
¸¸¾à ¹Ì´ÏÆ÷Æ®°¡ NdisMRegisterInterrupt¸¦ È£ÃâÇÒ ¶§ RequestIsr¸¦ TRUE·Î ¼³Á¤ÇÑ´Ù¸éÀº ³×Æ®¿öÅ© ÀÎÅÍÆäÀ̽º Ä«µåÀÇ »óŸ¦ ¼³Á¤ÇÔÀ¸·Î½á NIC¿¡ ÀÎÅÍ·´Æ®¸¦ dismiss ÇØ¾ß ÇÏ°í ±×·¡¼ NICÀÌ ´õ ÀÌ»ó ÀÎÅÍ·´Æ®¸¦ assertÇÑ´Ù. ÀÎÅÍ·´Æ®µéÀÌ ÀÎÅÍ·´Æ®ÀÇ dismissal ÈÄ¿¡(following) NIC¿¡¼ Àο¡ÀÌºí »óÅ·Π³²À» ¼ö Àְųª ȤÀº ±×µéÀº µå¶óÀ̹ö ¼³°è¿¡ ÀÇÁ¸ÇÏ¿© ºÒ°¡´ÉÇÑ »óÅ·ΠµÉ ¼ö ÀÖ´Ù. ±×·¯ÇÑ dismissalÀÇ Å¸À̹ÖÀº µå¶óÀ̹ö°¡ ´ÙÀ½°ú °°Àº NdisMRegisterInterrupt¸¦ È£ÃâÇÒ ¶§, ÁöÁ¤µÈ InterruptMode¿¡ ÀÇÁ¸ÇÑ´Ù.
- NdisInterruptLevelSensitive ÀÎÅÍ·´Æ®¿¡ ´ëÇØ, MiniportISRÀº NICÀÌ ±×·¯ÇÑ ÀÎÅÍ·´Æ®¸¦ ¹ß»ýÇÑ °Íó·³ °¢ ÀÎÅÍ·´ºz dismiss ÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸éÀº, ÀÎÅÍ·´Æ®´Â MiniportISRÀÌ Á¦¾î¸¦ ¸®ÅÏÇÏÀÚ ¸¶ÀÚ, NIC¿¡°Ô ´Ù½Ã assertµÇ¾îÁø´Ù. ¸¸¾à MiniportISRÀÌ NICÀÌ Æ¯Á¤ ÀÎÅÍ·´Æ®¸¦ ¹ß»ýÇÏÁö ¾Ê´Â °ÍÀ» °áÁ¤ÇÑ´Ù¸éÀº, °°Àº ¹ö½º¿¡ ÀÖ´Â ´Ù¸¥ ÀåÄ¡µéÀ» À§ÇÑ ISRµéÀÌ Áï½Ã ½ÇÁ¦ ±×·¯ÇÑ ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏ´Â ÀåÄ¡¿¡ ´ëÇØ ÀÎÅÍ·´Æ®¸¦ dismissÇϱâ À§ÇØ È£ÃâµÇ¾îÁú ¼ö ÀÖ°Ô °¡´ÉÇÏ´Ù¸éÀº »¡¸® FALSE·Î Á¦¾î¸¦ ¸®ÅÏÇØ¾ß ÇÑ´Ù.
- NdisInterruptLatched ÀÎÅÍ·´Æ®µéÀ» À§ÇØ, NIC¿¡¼ ÀÎÅÍ·´Æ®¸¦ dismiss ÇÏ´Â °ÍÀº °øÀ¯µÈ ÀÎÅÍ·´Æ®µéÀ» À§ÇØ time-critical ÇÏÁö ¾Ê´Ù. ¸¸¾à ¹Ì´ÏÆ÷Æ®°¡ MiniportISR¿¡ ´ëÇÑ °¢ È£ÃâÀÌ °ü·ÃµÈ MiniportHandleInterrupt ÇÔ¼ö¿¡ ´ëÇÑ ¿¬¼ÓµÈ È£ÃâÀ» ¾ß±âÇϵµ·Ï ¼³°èµÇ¾îÁø´Ù¸éÀº, MiniportHandleInterrupt ÇÔ¼ö´Â NIC¿¡¼ ÀÎÅÍ·´Æ®¸¦ dismiss ÇÒ ¼ö ÀÖ´Ù. ´ëüÀûÀ¸·Î, ±×·¯ÇÑ µå¶óÀ̹ö´Â NdisMRegisterInterrupt ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ RequestIsr¸¦ FALSE·Î ¼³Á¤ÇÒ ¼ö ÀÖ°í MiniportDisableInterrupt ÇÔ¼ö¸¦ Á¦°øÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â ¸¸¾à MiniportHalt ȤÀº MiniportInitialize ÇÔ¼ö°¡ ÇöÀç ½ÇÇàÇϰí ÀÖÁö ¾Ê´Ù¸éÀº MiniportISR ´ë½Å¿¡ È£ÃâµÇ¾îÁú °ÍÀÌ´Ù.
¹Ì´ÏÆ÷Æ®°¡ full-duplex º¸³»±â¿Í ¹Þ±â¸¦ Á¦°øÇÒ ¶§, NDIS´Â º¸³»±âµéÀ» À§ÇØ MiniportISR ȤÀº MiniportDisableInterrupt ÇÔ¼ö¿¡ ´ëÇÑ È£ÃâµéÀ» Á÷·ÄÈÇÑ´Ù. NDIS´Â ´Ù¸£°Ô ÀÎÅÍ·´Æ®µéÀ» ¾ß±âÇÒ ¼ö ÀÖ´Â ¸ðµç ´Ù¸¥ ¿¬»êµéÀ» À§ÇØ MiniportISR ȤÀº MiniportDisableInterrupt ÇÔ¼ö¿¡ ´ëÇÑ È£ÃâµéÀ» Á÷·ÄÈÇÑ´Ù. MiniportReset ÇÔ¼ö¿¡ ´ëÇÑ È£ÃâµéÀº µ¿±âÈµÈ ±×¸®°í µ¿±âÈÀÌ´Ù.; NDIS´Â full-duplex ¹Ì´ÏÆ÷Æ®³»¿¡¼ ¸ðµç ´Ù¸¥ ÄÚµå °æ·ÎµéÀÌ ÀåÄ¡ ¸®¼Â ¿¬»êÀÌ ¹ß»ýÇÏ´Â µ¿¾È ÁøÀԵǴ °ÍÀ» ¸·´Â´Ù.
¸¸¾à ¹Ì´ÏÆ÷Æ®°¡ full-duplex º¸³»±âµé ¹Þ±âµéÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù¸éÀº, NDIS´Â ¹Ì´ÏÆ÷Æ®°¡ Á¦¾îÇÏ´Â ¾î¶² NICÀ» À§ÇØ MiniportISR ȤÀº MiniportDisableInterrupt ÇÔ¼ö¿¡ ´ëÇÑ ¸ðµç È£ÃâµéÀ» Á÷·ÄÈÇÑ´Ù. ±×·¯ÇÑ µå¶óÀ̹öÀÇ MiniportISR ȤÀº MiniportDisableInterrupt ÇÔ¼ö°¡ ƯÁ¤ NIC ÀÎÅÍ·´Æ®¸¦ ó¸®ÇÏ´Â µ¿¾È¿¡, SMP ±â°è¿¡¼ ¶Ç ÇϳªÀÇ ÇÁ·Î¼¼¼¿¡¼ °°Àº NICÀ¸·ÎºÎÅÍ µÎ ¹øÂ° ÀÎÅÍ·´Æ®¸¦ ó¸®Çϱâ À§ÇØ È£ÃâµÇÁö ¾ÊÀ» °ÍÀÌ´Ù.
±×·¯³ª, ÇÑ ÀåÄ¡ ÀÌ»óÀ» Á¦¾îÇÏ´Â ¾î¶² µå¶óÀ̹öÀÇ ISR(ȤÀº MiniportDisableInterrupt ÇÔ¼ö)Àº ¸¸¾à ±×·¯ÇÑ µå¶óÀ̹öÀÇ ÀåÄ¡µéÀÌ °ÅÀÇ µ¿½Ã¿¡ ÀÎÅÍ·´Æ®¸¦ ¹ß»ýÇÏ´Â °ÍÀÌ ¹ß»ýÇϰí ÀÎÅÍ·´Æ®µéÀÌ NIC¿¡ ÀÇÇØ Àο¡À̺íµÈ´Ù¸éÀº SMP ±â°è¿¡¼ µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö ÀÖ´Ù.
¸¸¾à ÀÎÅÍ·´Æ®°¡ ¶Ç ÇϳªÀÇ µå¶óÀ̹ö ÇÔ¼ö°¡ MiniportISR ȤÀº MiniportDisableInterrupt ÇÔ¼ö·ÎºÎÅÍ Á¢±ÙµÉ ¼ö ÀÖ´Â ÀÚ¿øµéÀ» Á¢±ÙÇÏ´Â µ¿¾È ¹ß»ýÇÒ ¼ö ÀÖ´Ù¸éÀº ´Ù¸¥ ÇÔ¼ö´Â µå¶óÀ̹ö Á¦°ø MiniportSynchronizeISR ÇÔ¼ö°¡ DIRQL¿¡¼ °øÀ¯µÈ ÀÚ¿øµéÀ» Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï NdisMSynchronizeWithInterrupt ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù.
NdisMRegisterInterrupt ÀÇ È£ÃâÀÚµéÀº IRQL PASSIVE_LEVEL¿¡¼ ½ÇÇàÇÑ´Ù.
|