PCI
µð¹ÙÀ̽ºÀÇ ±¸Á¶¿Í Á¦¾î
PCI configuration ·¹Áö½ºÅÍ¿¡ ´ëÇØ
INtime¿¡ ´ëÇØ PCI µð¹ÙÀ̽º¸¦ Á¦¾îÇÏ´Â °æ¿ì, PCI ¹ö½ºÀÇ configuration ·¹Áö½ºÅÍÀÇ Á¶ÀÛÀ»
ÇàÇÕ´Ï´Ù. 1°³ÀÇ PCI µð¹ÙÀ̽º¿¡ ´ë¾îÁö´Â configuration °ø°£ »çÀÌÁî´Â 256¹ÙÀÌÆ®·Î, À̰ÍÀº Å« Àǹ̷ΠµÎ °³ÀÇ ¿µ¿ªÀ¸·Î ³ª´ ¼ö
ÀÖ½À´Ï´Ù. configuration °ø°£ Çì´õ ºÎºÐ(ÃÖÃÊÀÇ 64¹ÙÀÌÆ®:¹Ø±×¸² ȸ»ö ºÎºÐ)°ú Çϳª ´õ°¡ µð¹ÙÀ̽º °íÀ¯ÀÇ ¿µ¿ª( ÈÄÀÇ
192¹ÙÀÌÆ®: À¯»ö ºÎºÐ)ÀÔ´Ï´Ù. configuration ·¹Áö½ºÅÍ °ø°£ Çì´õ¿Í´Â PCIÀÇ ½Ã¹æ¼³ª °ü·Ã ÀÚ·á·Î ÀÌ¹Ì Á¤Àǵǰí ÀÖ´Â ¿µ¿ª¿¡¼ ÀÌ
¿µ¿ªÀÇ ·¹Áö½ºÅͰ¡ ±ÔÁ¤µÇ°í ÀÖ´Â ¸ñÀû ÀÌ¿ÜÀÇ ¸ñÀûÀ¸·Î »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù(ÁÖ¼Ò£º00h?3Fh).°Ý³³µÇ°í ÀÖ´Â µ¥ÀÌÅÍ´Â ¸ðµÎ µð¹ÙÀ̽º °íÀ¯ÀÇ
½Äº°À̳ª ±× µð¹ÙÀ̽º°¡ ¼ÓÇϴ Ŭ·¡½ºµîÀÇ ¼Ó¼º Á¤º¸ÀÔ´Ï´Ù. µð¹ÙÀ̽º °íÀ¯ÀÇ ¿µ¿ª¿¡ ´ëÇØ¼´Â PCIÀÇ »ç¾çÀ¸·Î Á¤ÀǵǾî ÀÖÁö ¾ÊÀº ¿µ¿ªÀ̸ç, °¢
µð¹ÙÀ̽º ¸¶´Ù Ä¿½ºÅ͸¶ÀÌÁî µÇ´Â ¿µ¿ªÀÔ´Ï´Ù.
PCI µð¹ÙÀ̽ºÀÇ configuration ·¹Áö½ºÅÍ Á¤º¸¸¦ ÃëµæÇϱâ À§Çؼ ÇÊ¿ä·Î ÇÏ´Â ·¹Áö½ºÅÍÀÔ´Ï´Ù. ÀÌ °ªÀ»
¼öÁ¤Çϰųª ÇÒ ¼ö ¾ø½À´Ï´Ù. INtimeÀÇ PCI ¶óÀ̺귯¸® ÄÝ¿¡¼´Â µð¹ÙÀ̽º ½Äº° ·¹Áö½ºÅÍÀÇ Á¤º¸ Àμö·Î¼ ÁÖ´Â °ÍÀ¸·Î, µð¹ÙÀ̽º°¡ ȯ°æ³»¿¡
Á¸ÀçÇÒ±îÀÇ È®ÀÎÀ̳ª, Á¸Àç½Ã¿¡ ÇÁ·Î±×·¡¸ÓºíÀÎ ¿µ¿ªÀÇ ¼±µÎ ÁÖ¼Ò¸¦ ÃëµæÇÏ´Â °ÍÀÌ °¡´ÉÇÏ°Ô µË´Ï´Ù.
1. º¥´õ ID¡¡[Vendor ID; 00h WORD£º¸®µå
Àü¿ë]
¸ÞÀÌÄ¿
¸¶´Ù ÇÒ´çÇÒ ¼ö ÀÖ°í ÀÖ½À´Ï´Ù.FFFFh´Â º¥´õ ID·Î¼ À¯È¿ÇÑ °ªÀÌ ¾Æ´Õ´Ï´Ù. ÄÁÇDZ׷¹ÀÌ¼Ç ÇÁ·Î±×·¥Àº º¥´õ ID·Î¼ FFFFh°¡ ÀÐÇûÀ» ¶§,
Ÿ°ÙÀ¸·Î¼ ÁöÁ¤ÇÑ µð¹ÙÀ̽º³ª ±â´ÉÀÌ Á¸ÀçÇϰí ÀÖÁö ¾Ê´Ù°í ÆÇ´ÜÇÕ´Ï´Ù.<<PCIµð¹ÙÀ̽º °ËÃâÀºFFFFhÀ» °ËÃâÇÒ ¶§±îÁö ¹Ýº¹ÇØ ½Ç½ÃÇØ,
º¸µå¸¦ °ËÃâÇßÀ» °æ¿ì´Â ±× 󸮸¦ Á¾·áÇÕ´Ï´Ù.
2. µð¹ÙÀ̽ºID[Device ID: 02h WORD£º¸®µå
Àü¿ë]
º¥´õID·Î
ÁöÁ¤µÇ´Â ¸ÞÀÌÄ¿°¡ Á¦Á¶ÇÑ µð¹ÙÀ̽º³¢¸®¸¦ ½Äº°Çϱâ À§Çؼ »ç¿ëµÇ´Â16ºñÆ®ÀÇ °ÍIDÀÔ´Ï´Ù. °ªÀÇ ÇÒ´ç ¹æ¹ýÀº °¢ ¸ÞÀÌÄ¿¸¶´Ù
´Ù¸£´Ù.
3. ¸®ºñÁ¯ID[Revision ID: 08h BYTE£º¸®µå
Àü¿ë]
º¥´õ
ID¿Í µð¹ÙÀ̽º ID·Î ÁöÁ¤µÇ´Â ƯÁ¤ÀÇ µð¹ÙÀ̽º¿¡ ´ëÇØ¼ ±× ¸®ºñÁ¯À» ³ªÅ¸³»±â À§Çؼ »ç¿ëµÇ´Â 8ºñÆ®ÀÇ ID.°ªÀÇ Á¤ÀÇ´Â °¢ ¸ÞÀÌÄ¿¿¡ µû¶ó¼
´Ù¸¨´Ï´Ù.
4. Çì´õ ŸÀÔ[Header Type: 0Eh ¹ÙÀÌÆ®£º¸®µå
Àü¿ë]
ÇÏÀ§
7ºñÆ®(ºñÆ®6-0)´Â ±× µð¹ÙÀ̽º°¡ ä¿ëÇϰí ÀÖ´Â ÄÁÇDZַ¹ÀÌ¼Ç °ø°£ Çì´õ·Å¸ÀÔÀ» ³ªÅ¸³À´Ï´Ù. ÇöÀç´Â 00h(ÀÏ¹Ý µð¹ÙÀ̽º)·Î 01h(PCI-PCI
ºê¸´Áö·µð¹ÙÀ̽º)ÀÇ 2Á¾·ù°¡ Á¤Àǵǰí ÀÖ½À´Ï´Ù. ºñÆ® 7Àº ´Ù±â´É µð¹ÙÀ̽º·ºñÆ®ÀÔ´Ï´Ù. ºñÆ®ÀÇ °ªÀÌ 0À̶ó¸é, ÀÌ µð¹ÙÀ̽º´Â ´ÜÀÏ ±â´É µð¹ÙÀ̽ºÀÎ
°ÍÀ» ³ªÅ¸³», °ªÀÌ 1À̶ó¸é ´Ù±â´É µð¹ÙÀ̽ºÀÎ °ÍÀ» ³ªÅ¸³À´Ï´Ù.
5. Ŭ·¡½º ÄÚµå[Class Code: 09h 3¹ÙÀÌÆ®£º¸®µå
Àü¿ë]
±×
µð¹ÙÀ̽ºÀÇ Á¾·ù·±â´ÉÀ» ³ªÅ¸³»´Â Á¤º¸·Î, °ªÀÇ Á¤ÀÇ´Â PCI SIG¿¡ ÀÇÇØ¼ ÇàÇØÁý´Ï´Ù. Ŭ·¡½º ÄÚµå´Â 3°³·Î ³ª´ ¼ö ÀÖ½À´Ï´Ù(±âº»
Ŭ·¡½º[base class:0Bh], ¼ºê Ŭ·¡½º[sub class:0Ah], ÇÁ·Î±×·¡¹Ö·ÀÎÅÍÆäÀ̽º Ŭ·¡½º[programing interface
class:09h]).
º£À̽º ¾îµå·¹½º ·¹Áö½ºÅÍ
PCI µð¹ÙÀ̽º°¡ »ç¿ëÇÏ´Â ¸Þ¸ð¸® °ø°£°ú I/O°ø°£ÀÇ ÁÖ¼Ò´Â ±âº»ÀûÀ¸·Î ÇÁ·Î±×·¡¸ÓºíÀÔ´Ï´Ù. ½ÇÁ¦·Î µð¹ÙÀ̽º°¡
»ç¿ëÇÏ´Â address °ø°£Àº ½Ã½ºÅÛÀÇ ÃʱâÈ ÇÁ·Î±×·¥ÀÌ º£À̽º·ÁÖ¼Ò··¹Áö½ºÅÍ¿¡ °ªÀ» ¼³Á¤ÇÏ´Â °Í¿¡ ÀÇÇØ¼ Á¤ÇØÁý´Ï´Ù. À̰ÍÀº, µð¹ÙÀ̽º³¢¸®ÀÇ
ÁÖ¼ÒÀÇ Áߺ¹À» ÇÇÇØ À¯Àú¿¡ ÀÇÇÑ ½Ã½ºÅÛÀÇ ¼Â¾÷À» ¿ëÀÌÇÏ°Ô Çϱ⠶§¹®ÀÔ´Ï´Ù. º£À̽º ¾îµå·¹½º ·¹Áö½ºÅÍÀÇ »çÀÌÁî´Â Åë»ó
32ºñÆ®(4¹ÙÀÌÆ®)ÀÔ´Ï´Ù. ´Ù¸¸ 64ºñÆ®(8¹ÙÀÌÆ®) ¾Öµå·¹½ÌÀ» ÀÌ¿ëÇØ 4 G¹ÙÀÌÆ®ºÎÅÍ À§ÀÇ ¸Þ¸ð¸® °ø°£¿¡ ¹èÄ¡ÇÒ ¼ö ÀÖ´Â ¸Þ¸ð¸®·ºí·ÏÀ» À§ÇÑ
º£À̽º ¾îµå·¹½º ·¹Áö½ºÅÍ »çÀÌÁî´Â 64ºñÆ®ÀÔ´Ï´Ù.
INtime¿¡ ´ëÇØ ÀÌ ¿µ¿ª ÀÌÇÏÀÇ ¸ÞÀÌÄ¿ °íÀ¯ÀÇ ¿µ¿ªÀÇ µ¥ÀÌÅ͸¦ Á¶ÀÛÇÏ´Â °ÍÀ¸·Î½á,
PCI µð¹ÙÀ̽ºÀÇ Á¦¾î¸¦ ÇàÇÕ´Ï´Ù. ÀÌ ¿µ¿ªÀº °¢ ¸ÞÀÌÄ¿, µð¹ÙÀ̽º¿¡ ÀÇÇØ ´Ù¸£±â ¶§¹®¿¡, ÀÚ¼¼ÇÑ °ÍÀº °¢ ¸ÞÀÌÄ¿ÀÇ Á¦°øÇÏ´Â ÀڷḦ ÂüÁ¶ÇØ
ÁÖ¼¼¿ä. ÇÁ·Î±×·¡¸Óºí ¿µ¿ª(º£À̽º ·¹Áö½ºÅÍ)Àº ¸Þ¸ð¸® °ø°£À¸·Î¼ »ç¿ëµÈ °ÍÀϱî, I/O°ø°£À¸·Î¼ »ç¿ëµÈ °ÍÀϱîÀÇ 2 Á¾·ù Á¸ÀçÇØ, º£À̽º ÁÖ¼ÒÀÇ
¸»¹Ì ºñÆ® Á¤º¸·ÎºÎÅÍ ÆÇ´ÜÇÕ´Ï´Ù. º£À̽º ÁÖ¼ÒÀÇ ¸»¹Ì ºñÆ®´Â ÀεðÄÉÀÌÅÍ(indicator)·Î¼ »ç¿ëµÇ°í ÀÖ½À´Ï´Ù.
¸Þ¸ð¸® °ø°£À» ³ªÅ¸³»´Â º£À̽º ¾îµå·¹½º ·¹Áö½ºÅÍÀÇ °æ¿ì
ºñÆ®3-0´Â ¸®µå Àü¿ëÀ¸·Î Ưº°ÇÑ Àǹ̰¡ ÀÖ½À´Ï´Ù.
ºñÆ® 0£º¸Þ¸ð¸® °ø°£ ÀεðÄÉÀÌÅÍ(indicator)(Memory Space
Indicator)
Ä¡´Â
Ç×»ó 0À¸·Î, ÀÌ º£À̽º ¾îµå·¹½º ·¹Áö½ºÅͰ¡ ¸Þ¸ð¸® °ø°£¿ëÀÇ °ÍÀÓÀ» ³ªÅ¸³» Çϰí ÀÖ´Ù.
ºñÆ®2-1£ºÅ¸ÀÔ(Type)
ºñÆ®ÀÇ
Æí¼º¿¡ ÀÇÇØ¼ ÀÌ ¸Þ¸ð¸®ºê·ÏÅ©¸¦ ¹èÄ¡ °¡´ÉÇÑ ÁÖ¼Ò ¹üÀ§¸¦ Ç¥½ÃÇÕ´Ï´Ù.
|
ºñÆ®2
|
ºñÆ®1
|
Á¤ÀÇ
|
|
0
|
0
|
32ºñÆ®·address °ø°£ÀÇ ÀÓÀÇ À§Ä¡
|
|
1
|
0
|
1 M¹ÙÀÌÆ® ÀÌÇÏÀÇ ¸Þ¸ð¸® °ø°£
|
|
0
|
1
|
64ºñÆ®·address °ø°£ÀÇ ÀÓÀÇÀÇ À§Ä¡
|
|
1
|
0
|
(¿¹¾à¡¡)
|
ºñÆ® 3£ºÇÁ¸®ÆêÄ¡ °¡´É( Prefetchable )
¸Þ¸ð¸®·¸®µå·»çÀÌŬ¿¡
´ëÇϰí ÇÁ¸®ÆêÄ¡¸¦ ÇàÇÏ¸é µ¥ÀÌÅÍ Àü¼ÛÀÇ È¿À²ÀÌ ÁÁ¾ÆÁý´Ï´Ù. ±×·¯³ª ¿¹Á¤¿ÜÀÇ ¸®µå ¾×¼¼½º¿¡ ÀÇÇØ¼ ¿Àµ¿ÀÛµîÀÇ ºÎÀÛ¿ëÀÌ ¹ß»ýÇÒ °¡´É¼ºÀÌ ÀÖ´Â
¸Þ¸ð¸®·Å¸°ÙÀÇ °æ¿ì¿¡´Â, ÀÌ ºñÆ®ÀÇ °ªÀ» 0À¸·Î Çϰí, ¸®µå ¾×¼¼½º¿¡ ÀÖ¾î¼ÀÇ ÇÁ¸®ÆêÄ¡¸¦ ±ÝÁöÇÕ´Ï´Ù. ±× ÀÌ¿ÜÀÇ °æ¿ì¿¡´Â °ªÀ» 1·Î
¼³Á¤ÇÕ´Ï´Ù.
ºñÆ® 4ÀÌ»ó
°íÀ§ÀÇ
ºñÆ®´Â º£À̽º address field¡æÇÊ¿ä·Î ÇÏ´Â ÁÖ¼Ò·ºí·ÏÀÇ Å©±â¿¡ ¸ÂÃß°í, ÀÌ ºñÆ® ÇʵåÀÇ ÇÏÀ§ÀÇ ¸î ºñÆ®Àΰ¡´Â °ª 0ÀÇ ¸®µå Àü¿ë
ºñÆ®·Î¼ ½ÇÀåÇÕ´Ï´Ù.
I/O°ø°£À» ³ªÅ¸³»´Â º£À̽º ¾îµå·¹½º ·¹Áö½ºÅÍÀÇ °æ¿ì
ºñÆ® 0£ºI/OÀεðÄÉÀÌÅÍ(indicator)
Ä¡
1ÀÇ ¸®µå Àü¿ë ºñÆ®·Î ÀÌ º£À̽º ÁÖ¼Ò··¹Áö½ºÅͰ¡ I/Oaddress °ø°£¿ëÀÇ °ÍÀÓÀ» ³ªÅ¸³»°í ÀÖ½À´Ï´Ù.
ºñÆ®2-31£ºº£À̽º address field
¿ä±¸
I/O°ø°£ »çÀÌÁî¿¡ ¸ÂÃß¾î ÇÏÀ§ÀÇ ¸î ºñÆ®ÀÎÁö¸¦ °ª 0ÀÇ ¸®µå Àü¿ë ºñÆ®·Î ÇÏ´Â °ÍÀº ¸Þ¸ð¸®¿ë º£À̽º ¾îµå·¹½º ·¹Áö½ºÅÍÀÇ °æ¿ìµµ °°½À´Ï´Ù.¿ä±¸
I/O°ø°£ »çÀÌÁîÀÇ ÃÖ¼Ò´ÜÀ§´Â 4 BYTEÀÔ´Ï´Ù.
PCIDEV ±¸Á¶Ã¼
ÀÌÇÏ¿¡ INtime·Î »ç¿ëÇÏ´Â PCIDEV ±¸Á¶Ã¼¸¦ ³ªÅ¸³À´Ï´Ù. ÀÌ·¯ÇÑ ÇʵåÄ¡´Â ƯÁ¤ÀÇ PCI µð¹ÙÀ̽º
ÄÁÇDZ׷¹ÀÌ¼Ç Çì´õ·ÎºÎÅÍ PciReadHeader ¿Í PciFindDevice¿¡ ÀÇÇØ¼ ÃëµæÇÑ PCI 2.1 ·¹Áö½ºÅÍÀÇ Ä«ÇÇÀÔ´Ï´Ù. ÀÚ¼¼ÇÑ °ÍÀº,
¡¸ PCI ·ÎÄà ¹ö½º »ç¾ç 2.1¡¹À» ºÁ ÁÖ¼¼¿ä.ÀÌÂÊÀÇ ±¸Á¶Ã¼´Â pcibus.h¿¡ Á¤Àǵǰí
ÀÖ½À´Ï´Ù.
PCI configuration ·¹Áö½ºÅÍ¿Í PCIDEV ±¸Á¶Ã¼
INtime¿¡¼´Â ÀÌÇÏÀÇ ±¸Á¶Ã¼¿¡, º¥´õ ID, µð¹ÙÀ̽º IDµîÀÇ µð¹ÙÀ̽º ½Äº° ·¹Áö½ºÅÍÀÇ °ªÀ» Ű·Î¼ ÀÔ·ÂÇØ
PCI ¶óÀ̺귯¸® ÄÝÀ» ½Ç½ÃÇØ, PCI µð¹ÙÀ̽ºÀÇ ÀνÄÀ» Çϱâ À§Çؼ ÄÁÇDZַ¹ÀÌ¼Ç °ø°£ Çì´õ ºÎºÐÀ» ÂüÁ¶ÇÏ´Â °ÍÀ¸·Î½á µð¹ÙÀ̽º °íÀ¯ÀÇ ¿µ¿ª
Á¤º¸¸¦ Ãëµæ, Á¶ÀÛÀ» ÇàÇÕ´Ï´Ù. Ưº°È÷ ÇÊ¿äÇÏ°Ô µÇ´Â ·¹Áö½ºÅÍ(¸â¹ö)¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù.
typedef struct {
WORD wBusNum; &color(green){//¹ö½º ¹øÈ£ ÀÔ·Â Çʵå};
WORD wDeviceNum; //µð¹ÙÀ̽º ¹øÈ£ ÀÔ·Â Çʵå
WORD wFunction; //Æã¼Ç ¹øÈ£ ÀÔ·Â Çʵå
WORD wVendorId; //º¥´õ ID ÀÔ·Â Çʵå
WORD wDeviceId; //µð¹ÙÀ̽º ID ÀÔ·Â Çʵå
WORD wDeviceIndex; //µð¹ÙÀ̽º °Ë»ö ¹øÈ£ ÀÔ·Â Çʵå
WORD wCommand; //Ä¿¸àµå
WORD wClassId; //Ŭ·¡½º·ÄÚµå
BYTE byInterfaceId; //Ŭ·¡½º·ÄÚµå
BYTE byRevId; //¸®ºñÁ¯ ID
BYTE byCLS; //ij½¬ ¶óÀÎ »çÀÌÁî
BYTE byLatency; //Áö¿¬½Ã°£·Å¸À̸Ó
DWORD dwBaseAddr[6]; //º£À̽º ¾îµå·¹½º ·¹Áö½ºÅÍ
DWORD dwCIS;
WORD wSubSystemVendorId;
WORD wSubSystemId;
DWORD dwRomBaseAddr; //È®Àå ROM º£À̽º ÁÖ¼Ò
BYTE byIntLine; //ÀÎÅÍ·´Æ®·¶óÀÎ
BYTE byIntPin; //ÀÎÅÍ·´Æ®·ÇÉ
BYTE byMaxLatency; //ÃÖ´ë Áö¿¬½Ã°£
BYTE byMinGrant; //ÃÖ¼Ò ±×·£Æ®
} PCIDEV, *LPPCIDEV;