æŠèŠã§èª¬æããããã«ããã¹ãã³ã³ãããŒã©ãŒã®ãµããŒãã¬ãã«ã¯ãç¹å®ã®ã€ãã³ããçºçãããšãã«é«ãã¬ãã«ãåŒãèµ·ãããé«ãã¬ãã«ãæ©èœããããã«å¿
èŠãªæ©èœãæäŸããã¯ãã§ãã
䟿å®äžããµããŒãã³ãŒãã®ããŸããŸãªèŠçŽ ã«ã€ããŠãå¶åŸ¡ãåããé åºã§èª¬æããŸãã
USBãµãã·ã¹ãã ã®èµ·å
æºåïŒPCIããã€ã¹ã®ãªã¹ãã«ããUSBã³ã³ãããŒã©ãŒ
USBãµãã·ã¹ãã ã¯ãã·ã¹ãã ã®èµ·åäžã«
usb_init
ãã
usb_initãåŒã³åºãããšã§éå§ãããŸãã
USBãèµ·åãããŸã§ã«ãèŠã€ãã£ã
pcidev_list
PCIããã€ã¹ã®ãªã¹ãã¯ãã§ã«æºåãããŠããŸãã USBã³ã³ãããŒã©ã¯ãã¯ã©ã¹ããµãã¯ã©ã¹ãããã³ã€ã³ã¿ãŒãã§ã€ã¹ã³ãŒãã«ãã£ãŠãã¹ãŠã®PCIããã€ã¹éã§èªèãããŸãã
çš®é¡ | ã¯ã©ã¹ | ãµãã¯ã©ã¹ | ã€ã³ã¿ãŒãã§ãŒã¹ |
---|
UHCI | 0Ch | 03h | 00h |
OHCI | 0Ch | 03h | 10æé |
ãšãŒã | 0Ch | 03h | 20æé |
Xhci | 0Ch | 03h | 30æé |
usb_init
ã¯ãUSBããã€ã¹ã匷調衚瀺ãããã³ã«ãPCIããã€ã¹ã®ãªã¹ããæ°å
usb_init
ãŸãã
BIOSã³ã³ãããŒã«ãç¡å¹ã«ãã
äžéšã®BIOSã¯ãUSBããŠã¹ãUSBããŒããŒããããã³USBãã©ãã·ã¥ãã©ã€ããåŠçã§ããUSBãç¥ããªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ããŒã¿ãæäŸããŸãã ããŠã¹ãšããŒããŒãããã®ããŒã¿ã¯PS / 2圢åŒã«å€æãããäœããã®æ¹æ³ã§ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«æã¡èŸŒãŸããŸããããã¯ãã·ã¹ãã ã«å®éã®PS / 2ããŠã¹ãããŒããŒããååšããå Žåãšåãã§ãã
int 13h
ã®èŠ³ç¹ããã¯ãUSBãã©ãã·ã¥ãã©ã€ãã¯ããŒããã©ã€ãã®ããã«èŠããŸãããã®ãããªãµããŒãã¯ããã©ãã·ã¥ãã©ã€ãããããŠã³ããŒãããããã«å¿
èŠãªãããããŠã¹ã®ãµããŒããããé »ç¹ã«èŠã€ãããŸãã
ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ãä»»æã®ããã»ããµã¢ãŒãã䜿çšããŠãããèªäœã§äžæãåŠçã§ããŸãã ãã®ãããªæ¡ä»¶äžã§BIOSãäºæž¬å¯èœãªç°å¢ã§å¶åŸ¡ã§ããããã«ã486ã«æ»ã£ãŠïŒæ£ç¢ºã«ã¯i386SLã®ç¹å¥ãªããŒãžã§ã³ããïŒãIntelã¯BIOSãåäœããŠåäœãäžæããç¹å¥ãªããã»ããµã¢ãŒã
System Management ModeïŒSMMïŒãèæ¡ããŸããã·ã¹ãã ã ããã»ããµèªäœã䜿çšããŠSMMã«å
¥ãããšã¯äžå¯èœã§ãã ãã¶ãŒããŒãããŒããŠã§ã¢ãç¹å¥ãª
ã·ã¹ãã 管çå²ã蟌ã¿ïŒSMIïŒä¿¡å·ãéä¿¡ãããšãããã»ããµã¯ãã®ã¢ãŒãã«å
¥ããŸãã ååãšããŠããããã»ããã«çµã¿èŸŒãŸããUSBã³ã³ãããŒã©ãŒã¯ãèšå®ã«å¿ããŠãäžæãã代ããã«SMIãçæã§ããŸãã
pcidev_list
ã®æåã®ãã¹ã¯ãUSBã³ã³ãããŒã©ãŒããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®å¶åŸ¡äžã«ããããšãBIOSã«äŒããããšã§ãããããã£ãŠãBIOSã¯ãããã«å¯ŸããŠäœãããŸããã
ãã®ãã¹ã§ã¯ããã¹ãŠã®ã³ã³ãããªã³ããã¢ã®EHCIã³ã³ãããŒã©ãŒã«åŠçã
ããããšãéèŠã§ãã ããšãã°ãæé ã®PCI座æšãèµ°æ»ãããšããããä¿èšŒãããŸãã ã³ãŒãã®æåã®ããŒãžã§ã³ã§ã¯ããã®ããã»ãŒãžã¯åå¥ã«å²ãåœãŠãããããã¹ãŠã®EHCIã³ã³ãããŒã©ãŒãæåã«åŠçãããŸããã ããã¯å€ãã®æ§æã§æ©èœããŸãããã
ãã¹ãäžã«ãã¹ãŠã®BIOSãæ£ããæžã蟌ãŸããŠããããã§ã¯ãªããééã£ãé åºã§SMMå
ã®ã·ã¹ãã ãã¯ã©ãã·ã¥ããå¯èœæ§ãããããšãããããŸããã å
·äœçã«ã¯ã次ã®ã·ããªãªãå¯èœã§ãã
- BIOSã¯EHCIã·ã£ããããŠã³èŠæ±ãæ€åºããŸãã
- BIOSã¯ã³ã³ãããŒã©ãŒãæ§æ解é€ãããããå¿ããŸãã
- ããŒãã®æææš©ã仲éã«ç§»è»¢
- ããŒãã«æ¥ç¶ããããã©ãã·ã¥ãã©ã€ããã³ã³ãããªã³ã«ç§»åããŸãã
- ã³ã³ãããªã³ã¯æ°ããããã€ã¹ã«ä¿¡å·ãéããŸãã
- ã³ã³ãããªã³ã¯ãŸã BIOSã®å¶åŸ¡äžã«ãããããããã€ã¹ãç¬èªã®ãã®ãšèŠãªããããã€ã¹ã®çš®é¡ã調ã¹ãŸãã å€ããã©ãã·ã¥ãã©ã€ãã衚瀺ãããŸãã
- ãããŠãUSBãã©ãã·ã¥ãã©ã€ãã«ã€ããŠãBIOSã¯ããããã³ã³ãããŒã©äžã«ãã£ãããšãèšæ¶ããŠããããšãããããŸããã å¿ããããã³ã³ãããŒã©ãŒã®ããŒã¿ã䜿çšããããšãããšãããã«æ²ããçµæã«ã€ãªãããŸãã
EHCIã®åã«ã³ã³ãããªã³ãåŠçãããšããã®ã·ããªãªã®å¯èœæ§ããªããªããŸãã
ã³ã³ãããŒã©ãè²æž¡ããå¿
èŠãããããšãBIOSã«å ±åããæ¹æ³ã¯ãã³ã³ãããŒã©ã«ãã£ãŠç°ãªããŸãã 察å¿ããé¢æ°ã¯
{u,o,e}hci_kickoff_bios
ãšåŒã°ããŸãã UHCIã¯æç³»åçã«æåã®ã€ã³ã¿ãŒãã§ã€ã¹ã§ãããããç¹å¥ãªã¡ãã»ãŒãžãæäŸããªãããã
uhci_kickoff_bios
åã«SMIçæããªãã«ããã³ã³ãããŒã©ãŒãåæ¢ããŸãã OHCIããã³EHCIã§ã¯ãBIOSãšéä¿¡ããæé ã¯çè«çã«ä»æ§ã§èª¬æãããŠããŸãããå®éã«ã¯...詳现ããããŸãã ã©ã¡ãã®å Žåããæé ã¯æ¬¡ã®ãšããã§ããããã¬ãžã¹ã¿ã«ããããããèšå®ããå¥ã®ãããã®ç®çã®ç¶æ
ãåŸ
ã¡ãŸãã BIOSãã³ã³ãããŒã©ãŒã§åäœããå Žåãã³ã³ãããŒã©ãŒã¯SMIãçæããããã»ããµãŒã¯SMMã«åãæ¿ããŠBIOSãåŒã³åºããBIOSã¯ã³ã³ãããŒã©ãŒã解æŸããä»ã®ããããç®çã®ç¶æ
ã«ããŠãSMMãçµäºããŸãã OHCIã®æé ã®è©³çŽ°ã¯ã
ãã¹ãäžã«å€æãããããBIOSãå²ã蟌ã¿ãœãŒã¹ããªã³ã«ãããŸãŸã³ã³ãããŒã©ãŒãæŸçœ®ããå¯èœæ§ãããããšã§ãã ã€ãã³ããå²ã蟌ã¿ãçæããOHCIãã©ã€ããŒããã®ãã³ãã©ãŒãã€ã³ã¹ããŒã«ããåã«å²ã蟌ã¿ãå²ã蟌ã¿ã³ã³ãããŒã©ãŒã§ãã¹ã¯ãããŠããå Žåãã·ã¹ãã ã¯åã³ãã³ã°ããŸã-OHCIã¯äœåºŠãå²ã蟌ã¿ãçæããŸãããããã¯èª°ãåŠçããŸããã ãããã£ãŠã
ohci_kickoff_bios
ã¯ãBIOSãšã®äŒè©±äžã®å²ã蟌ã¿ãçŠæ¢ããäŒè©±ã®çµäºæã«ãã¹ãŠã®OHCIå²ã蟌ã¿ãœãŒã¹ããªãã«ããŸãã EHCIã§ã¯ãå®éã«ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãã³ã³ãããŒã©ãŒã®æææš©ãèŠæ±ããŸããããšããããããå®éã«èšå®ããããšã¯ã§ããŸããããŸããBIOSãã³ã³ãããŒã©ãŒãææããŠããããšã確èªããå¿
èŠããããŸãã äžéšã®BIOSã¯ãã·ã¹ãã ãèµ·åããåã§ãã³ã³ãããŒã©ãŒãã解æŸããããããå¿ããSMIçæããããåé€ãããèŠæ±ãåŠçã§ããŸãããSMIãäœåºŠãçæããããããã·ã¹ãã ã¯åã³ãã³ã°ããŸãã
ã³ã³ãããŒã©ãŒã®åæå
æåã®ãã¹ã§
usb_init
ãUSBã³ã³ãããŒã©ãŒãæ€åºããªãå Žåãäœæ¥ãåæ¢ããŸãã USBã³ã³ãããŒã©ãŒãããå Žåã
usb_init
ã¯USBåŠçã«å²ãåœãŠãããã¹ããªãŒã ãäœæããPCIããã€ã¹ã®ãªã¹ããããã«2åãã¹ããåUSBã³ã³ãããŒã©ãŒã«å¯ŸããŠ
usb_init_controller
ãåŒã³åºãã
usb_hardware_func
é©åãª
usb_hardware_func
æ§é äœãžã®ãã€ã³ã¿ãŒãæž¡ããŸãã 2çªç®ã®ãã¹ã¯EHCIãåŠçãã3çªç®ã®ãã¹ã¯UHCIãšOHCIãåŠçããŸãã ããã§EHCIã¯ã³ã³ãããªã³ã®åã§åŠçããããããHSããã€ã¹ã¯ã³ã³ãããªã³ã«èªåèªèº«ã«ä¿¡å·ãéã£ãŠããã«åœŒãã奪ãããã®ã§ã¯ãªããEHCIã®å¶åŸ¡äžã«ãããŸãã
usb_init_controller
é¢æ°ã¯
hccommon.incã«ãããŸãã
*hci_controller
/
usb_controller
ãã¢ã«ã¡ã¢ãªãå²ãåœãŠãäž¡æ¹ããŒãã§åæåãã
usb_controller
ãã£ãŒã«ããåæåããŸãããã®ãã¡
usb_hardware_func
æã
HardwareFunc
åå¥ã«èšé²ããå¿
èŠããããŸãã ããã«ãã³ã³ãããŒã©ãŒåºæã®
usb_hardware_func.Init
åæåãåŒã³åºããŸãã æåŸã®ã¢ã¯ã·ã§ã³ã§ãšã©ãŒãçºçããªãã£ãå Žåã
usb_init_controller
ã¯ã³ã³ãããŒã©ãŒãäžè¬çãª
usb_init_controller
ç»é²ããUSBã¹ããªãŒã ãèµ·åããŠã次ã®èµ·åæéã«é¢ããæ
å ±ãæŽæ°ã§ããããã«ããŸãã
usb_hardware_func.Init
ã®ç¹å®ã®åæåã¯
usb_hardware_func.Init
ããšãè¡ããŸãã
- å²ã蟌ã¿ãã£ãã«ã®ãã€ããªããªãŒãªã©ããã£ãã«ã°ã«ãŒããšãããã®éã®é¢ä¿ãæ§æããŸãã
- ã³ã³ãããŒã©ãŒ
*hci_irq
ããå²ã蟌ã¿ãã³ãã©ãŒãã€ã³ã¹ããŒã«ããŸãã *hci_controller
æ§é äœã®ç©çã¢ãã¬ã¹ã®æžã蟌ã¿ãå«ããæ£ããå€ããã¹ãã³ã³ãããŒã©ãŒã®ã¬ãžã¹ã¿ãŒã«æžã蟌ã¿ãŸããusb_controller.NumPorts
ããŒãæ°ãèšç®ãããã¹ãŠã®ããŒãã«é»åãäŸçµŠããŸãã
å²ã蟌ã¿ãã£ãã«ã®ãã€ããªããªãŒã¯ããã¹ãŠã®ã³ã³ãããŒã©ãŒã§åãæ§é ãæã£ãŠ
ããŸã ã
åã®èšäºã§èª¬æããŸããã æ®ãã®ã¿ã€ãã®ãã£ãã«éã®æ¥ç¶ã¯ãã³ã³ãããŒã©ãŒã«ãã£ãŠç°ãªããŸãã
ãã£ãã«éã®éä¿¡ïŒUHCI

UHCIã¯ã幎代é ã§æãåçŽãªããŒããŠã§ã¢ãåããæåã®ã³ã³ãããŒã©ãŒã§ãã
UhciBaseAddressReg
ã®ããŒãã«ãæããã€ã³ã¿ãŒ
UhciBaseAddressReg
1ã€ã ããããŸãã åãã¬ãŒã éã¯ãããŒãã«ã®å¯Ÿå¿ããèŠçŽ ãããŒããããªã³ã¯ããã©ãå§ããŸãã å®æçãªéä¿¡ã®ãã§ãŒã³ã®æåŸã¯ãåãã¬ãŒã ã§åŠçãããå²ã蟌ã¿ãã£ãã«ã®ãªã¹ãã§ãã ãªã¹ãã®æåŸã®ãã£ãã«ããããªã³ã¯ã¯å¶åŸ¡äŒéã®ãªã¹ãã®æåã®ãã£ãã«ã«ã€ãªãããŸãã å¶åŸ¡äŒéã®ãã¹ãŠã®ãã£ãã«ãšããŒã¿é
åã®äŒéã¯ããªã³ã°ã§æ¥ç¶ãããŠããŸãã ã³ã³ãããŒã©ãŒããã¹ãŠã®éåšæçãã£ãã«ã®åŠçãå®äºãããšãã³ã³ãããŒã©ãŒã¯éåšæçãã£ãã«ã®ãªã¹ãã®å
é ã«æ»ããŸãã ãã®ã¹ããŒã ã§ã¯ã次ã®ãã¬ãŒã ãåŸ
ããã«ãæ°ããéåšæçãªéä¿¡ãããã«åŠçããå§ããŸãã
ãã®æ¹åŒã®æãããªå©ç¹ã¯ãåŠçã®åªå
é äœã«é¢ããUSBââä»æ§ã®èŠä»¶ã«å®å
šã«æºæ ããªãããã¢ã€ãã³ãã·ã³ãã«ã§ããããšã§ãã çæïŒéãè² è·ã§ã¯ãã³ã³ãããŒã©ãŒããã¬ãŒã ã®çµãããŸã§ãã¹ãŠã®è»¢éãåŠçããæéããªããšããåãã¿ã€ãã®ãã£ã³ãã«ã¯çãããããŸãã-ãªã¹ãã®æäžäœã«ãã幞éãªäººã¯å€§ããªå©ç¹ãåãåããŸã-ãããŠãå°ããªè² è·ã§ã¯ã³ã³ãããŒã©ãŒã¯åžžã«ã¡ã¢ãªããã®èªã¿åãã«å¿ããã§ãæ°ããä»äºããªãããšã確èªããŸãã 次ã®ã³ã³ãããŒã©ãŒã®éçºè
ã¯ãUHCIã®æ¬ ç¹ãèæ
®ããŸããã
ãã£ãã«éã®éä¿¡ïŒOHCI

OHCIã«ã¯7ã€ã®æŽæ°ã¬ãžã¹ã¿ãããããã®ãã¡6ã€ã¯ãã£ãã«ã«é¢é£ä»ããããŠããŸãã
OhciHCCAReg
ã®ã¬ãžã¹ã¿ã®1ã€ã¯ãä»ã®ã³ã³ãããŒã©ãŒïŒã¢ã€ãœã¯ããã¹è»¢éçšã«èª¿æŽïŒãšåæ§ã®åšæãã£ã³ãã«ã®ããŒãã«ãæãã2çªç®ã®
OhciPeriodCurrentEDReg
ã¯çŸåšã®åšæãã£ã³ãã«ã瀺ããŠãããããå³ã«ã¯ç€ºãããŠããŸããã
å¶åŸ¡ãã£ãã«ãšããŒã¿é
åã®ãã£ãã«ã¯ãç¬ç«ãããªã¹ãã«åéãããŸãã åãªã¹ãã«ã¯2ã€ã®ãã€ã³ã¿ãŒããããŸãããªã¹ãã®å
é ãžã®ãã€ã³ã¿ãŒ
Ohci{Control,Bulk}HeadEDReg
ãšãçŸåšã®ãã£ã³ãã«
Ohci{Control,Bulk}CurrentEDReg
ãžã®ãã€ã³ã¿ãŒã§ãã ã³ã³ãããŒã©ãŒã¯ãäºãã«ç¬ç«ããŠ3ã€ã®ãªã¹ãã§ç§»åã§ããŸãã åªå
床ãªã¹ãã¯USBèŠä»¶ã«æ²¿ã£ãŠããŸãã åãã¬ãŒã ã³ã³ãããŒã©ãŒã¯å®æçãªãã£ã³ãã«ã®ãªã¹ããå®è¡ããŸãããUHCIãšã¯ç°ãªããä»ã®ãªã¹ãã®äœçœ®ã倱ãããšã¯ãããŸããããããã£ãŠãåããªã¹ãå
ã®ãã¹ãŠã®ãã£ã³ãã«ã¯çãããªããŸãã ããã«ãããUHCIã®æåã®ãã€ãã¹ãéããããŸãã OHCIã¬ãžã¹ã¿ã«ã¯ãããªã¹ãã«æ°ããäŒéããããŸãããšãã2ãããããããŸãã1ã€ã¯å¶åŸ¡ãã£ãã«ã®ãªã¹ãããã1ã€ã¯ããŒã¿é
åã®ãã£ãã«ã®ãªã¹ãã§ãããœãããŠã§ã¢ã¯æ°ããäŒéãè¿œå ãããšãã«å¯Ÿå¿ããããããèšå®ããå¿
èŠããããŸãã ã³ã³ãããŒã©ããªã¹ãã®æ€çŽ¢ãéå§ãããšããããããªã»ãããããŸãã ã³ã³ãããŒã©ããªã¹ãã®æåŸã«å°éãããšããããã確èªããŸãã ããããèšå®ãããŠããå Žåãã³ã³ãããŒã©ãŒã¯ãªã¹ãã®å
é ã«ç§»åããããã§ãªãå Žåã¯ãªã¹ãã®åŠçãåæ¢ããŸãã ããã«ãããUHCIã®2çªç®ã®ãã€ãã¹ãéããããŸãã
ãã£ãã«éã®ãªã³ã¯ïŒEHCI

EHCIã¯2ã€ã®ãã€ã³ã¿ã¬ãžã¹ã¿ã«å¶éãããŠããŸãã ãããã®1ã€ã§ãã
EhciPeriodicListReg
ãä»ã®ã³ã³ãããŒã©ãŒãšåæ§ã«ãåšæçãªãã£ãã«ã®ããŒãã«ãæããŸãã å¥ã®
EhciAsyncListReg
ã¯ãçŸåšã®éåšæçãªãã£ãã«ãæããŸãã éåšæçãªãã£ãã«ã¯ãã¹ãŠãªã³ã°ã§éããããŸãããããã¯å¯èœãªå®è£
ã®1ã€ã§ããUHCIãšã¯ç°ãªãããããåææ¡ä»¶ã§ãã åšæçãã£ãã«ãšéåšæçãã£ãã«ã«æ²¿ã£ããŠã©ãŒã¯ã¯äºãã«ç¬ç«ããŠããããããã¹ãŠã®éåšæçãã£ãã«ãçãããªããŸãã ã€ã³ãã«ã¯ãããã§ããŒã¿é
åãã£ãã«ã«å¯Ÿããå¶åŸ¡ãã£ãã«ç¹æš©ã®èŠä»¶ãç¡èŠããããšã«ããŸããã ã³ã³ãããŒã©ãŒã¯ãéåšæçãªãã£ãã«ã§äœæ¥ããªãå Žåãã¡ã¢ãªããã®ç¡éã®èªã¿åãã«ããŸãç±å¿ã§ã¯ãªãããããªã³ã°å
ã®ãã£ãã«ã®1ã€ããªã³ã°ã®ãéå§ããšããŠããŒã¯ãããŸãã ã³ã³ãããŒã©ãŒãã¢ã¯ãã£ããªã®ã¢ãæ€åºããã«ãªã³ã°ã®ãéå§ãã«2åäŒããšãã³ã³ãããŒã©ãŒã¯ãã°ãããªã³ã°ã®åŠçãåæ¢ããŸãã
USBããã€ã¹ã®æäœ
ããã€ã¹ã®ããŸããŸãªç¶æ
ãšãããã®éã®é·ç§»ã説æããUSBââä»æ§ã®åçïŒ

ããã€ã¹æ¥ç¶
åæåäžã«ãOHCIããã³EHCIã³ã³ãããŒã©ãŒã¯ãããã€ã¹ãæ¥ç¶ãŸãã¯åæããããšãã«å²ã蟌ã¿ãçæããããã«æ§æãããŸãã UHCIã§ã¯ãæ®å¿µãªããããã¯äžå¯èœã§ãããããã£ãŠãUHCIã³ã³ãããŒã©ãŒã§ã¯ãUSBã¹ããªãŒã ãå®æçã«èªåçã«èµ·åããã³ã³ãããŒã©ãŒããŒããããŒãªã³ã°ããŠãæ¥ç¶ç¶æ
ã®å€åããã§ãã¯ããŸãã ããŒãªã³ã°ééã¯
UHCI_POLL_INTERVAL
ã¿ã€ããŒãã£ãã¯ã§ãçŸåšã®å€ã§ã¯1ç§ã§ãã
æ¥ç¶ãããUSBããã€ã¹ã¯ãé»æºãå
¥ã£ãç¶æ
ã§ãã¹ãã³ã³ãããŒã©ãŒãšã®å¯Ÿè©±ãéå§ããŸãã
æ°ããUSBããã€ã¹ã®åæåã¯ã100ããªç§ã®äžæåæ¢ã§å§ãŸããŸãã USBããã€ã¹ã¯åçã«æ¥ç¶ããããããæ¥ç¶ãããšãé£çµ¡å
ã®ãã£ã¿ãªã³ã°ããããã€ãã®é£ç¶ããæ¥ç¶/åæã€ãã³ããçºçããå¯èœæ§ããããŸãã åãããŒãã§æ°ããã€ãã³ããçºçãããã³ã«ãã«ãŠã³ãããŠã³ãåéãããŸãã Poweredç¶æ
ãé£ç¶ããŠ100ããªç§ç¶ããšãæ¥ç¶ã¯å®å®ããŠãããšèŠãªãããã³ãŒãã¯æ¬¡ã®åæåã¹ããŒãž
*hci_new_port
ãŸãã
å°ãåŸã§èª¬æããçç±ã«ãããæ¥ç¶ãåŠçãã次ã®ããã€ãã®æ®µéã¯ãããã€ãã®ããã€ã¹ã«å¯ŸããŠäžŠè¡ããŠå®è¡ããããšã¯ã§ããŸããã ãããã£ãŠã次ã®æé ã®åã«ãæ°ããUSBããã€ã¹ã¯ãçŸåšã®ããã€ã¹ããããã®æé ããã¹ãŠå®äºãããŸã§åŸ
æ©ããå¿
èŠããããŸãã åŸ
æ©ã®çµäºã¯
*hci_new_port.reset
ã§ããŒã¯ãããŸããããã¯ãåŸ
æ©ãäžèŠã§ããããšãå€æããå Žåã«
*hci_new_port
å
éšé¢æ°ã®äžéšã§ãããåæã«
usb_hardware_func.InitiateReset
ããé«ãã¬ãã«ã®ã€ã³ã¿ãŒãã§ãŒã¹ã«é
眮ãããŸãã
次ã«ã
*hci_new_port.reset
ã³ãŒãã¯ãæ°ããããã€ã¹ã®ããŒãã®ãªã»ããä¿¡å·ãæå¹ã«ãã
*hci_new_port.reset
ã³ã³ãããŒã©ãŒã«
*hci_new_port.reset
ãŸãã ä»æ§ã«ãããšããªã»ããã¯å°ãªããšã10ããªç§ç¶ãå¿
èŠããããŸãã OHCIã¯ããèªäœã§æéãã«ãŠã³ãããã€ã³ã¿ãŒãã«ã®çµããã«ãªã»ããä¿¡å·ããªãã«ããŠå²ã蟌ã¿ãçæããŸããå²ã蟌ã¿ã®ãã³ãã©ãŒã¯USBã¹ããªãŒã ã«ä¿¡å·ãéãã次ã®ã¹ããŒãžã«é²ã¿ãŸãã UHCIãšEHCIã§ã¯ãããã°ã©ã ã§æéãèªãå¿
èŠããããŸãã ã¢ã€ãã«ã¹ã¿ã³ãã€ãµã€ã¯ã«ã§ããã»ããµãããŒãããªãããã«ããªã»ããä¿¡å·ããªã³ã«ããåŸã®USBã¹ããªãŒã ã¯ãã·ã¹ãã ã¿ã€ããŒã«åŸã£ãŠèµ·åããã¹ãªãŒãç¶æ
ã«ãªãäºå®ã§ãã KolibriOSã®ã¿ã€ããŒã¯ã10ããªç§ããšã«1åã100 Hzã®åšæ³¢æ°ã§äœåããŸãã æäœ10ããªç§ã®ãªã»ãããä¿èšŒããããã«ãã³ãŒãã¯2ã€ã®ã¿ã€ããŒãµã³ãã«ãåŸ
æ©ããŸãã ã¿ã€ããŒã®2çªç®ã®ãã£ãã¯ã®åŸãã³ãŒãã¯æ°ããããã€ã¹ã®ããŒã
*hci_port_reset_done
ã®ãªã»ããä¿¡å·ããªãã«ãã次ã®ã¹ãããã«é²ã¿ãŸãã
USB2ã§ã¯ããªã»ããããã»ã¹ãããã€ã¹ã®é床ã決å®ããŸãã EHCIã¯HighSpeedããã€ã¹ã§ã®ã¿åäœããUSB1é床ã®ããããã§åäœãããã¹ãŠã®ããã€ã¹ã¯USB1ã³ã³ãããªã³ãŸãã¯ããã«è»¢éãããå¿
èŠãããããšãåã®ããŒãããæãåºããŸãã ãœãããŠã§ã¢ã®èŠ³ç¹ããã¯ããªã»ããã®çµäºåŸãEHCIã¯ããŒããžã®ããŒã¿è»¢éãèš±å¯ãããã©ããã決å®ããŸãã ãªã»ããåŸã«ããŒããç¡å¹ã®ãŸãŸã«ãªã£ãŠããå Žåãæ¥ç¶ãããããã€ã¹ã¯USB2ã®é床ã§åäœããŸããã ãã®å Žåãã³ã³ãããªã³ãžã®ããŒã転éã®ææè
ãéžæããããžãã¯ã«éç¥ããã ãã§ãã ãã®åŸãã³ã³ãããªã³ã¯éåžžã®æ¥ç¶ã€ãã³ãã確èªããŠåŠçããŸãã
ãªã»ããåŸãå€ãã®ããã€ã¹ã¯ãã§ã«ããé«ãã¬ãã«ã§èšå®ããæºåãã§ããŠããŸãã ãããããã¹ãŠã§ã¯ãããŸããã ä»æ§ã§ã¯ããªã»ããåŸå°ãªããšã10ããªç§ã®äžæåæ¢ãå¿
èŠã§ãã
ãã¹ãã瀺ãããã«ãäžéšã®ããã€ã¹ã§ã¯å®éã«ãã®äžæåæ¢ãå¿
èŠã§ãã åã®ã¹ããããšåæ§ã«ãUSBã¹ããªãŒã ã¯2ã€ã®ã¿ã€ããŒã«ãŠã³ãã§ã¹ãªãŒãç¶æ
ã«ãªããŸãããä»åã¯OHCIãå«ããã¹ãŠã®ã³ã³ãããŒã©ãŒã«å¯ŸããŠã§ãã
ãªã»ãããšããã«ç¶ãäžæåæ¢ã®åŸãããã€ã¹ã¯é»æºãå
¥ã£ãç¶æ
ããããã©ã«ãç¶æ
ã«åãæ¿ãããŸããããã€ã¹ããŒããšã³ããã€ã³ãã®ããŒã¿ãéåä¿¡ããæºåãã§ããŠãããããŸã å®å
šã«åæåãããŠããªããšãã®2ã€ã®ãããŒãã¯ãŒãã³ã°ãç¶æ
ã®1ã€ã§ãã ããã©ã«ãç¶æ
ã§ã¯ãããã€ã¹ã¯USBãã¹ã®ãŒãã¢ãã¬ã¹ã«å¿çããŸãã ãããã2ã€ã®ããã€ã¹ã®ãªã»ããã䞊è¡ããŠå®è¡ã§ããªãçç±ã§ããããããªããšã2ã€ã®ããã€ã¹ãå€æãããããããåŸç¶ã®èšå®ãç¹ã«é©çšããããšèããããŸãã
ããã€ã¹ã®ãŒããšã³ããã€ã³ããåäœããæºåãã§ããŸããããã£ãã«ãéããšãã§ãã ãã£ãã«æ§é ã«ã¯ããã£ãã«èªäœã®ç¹æ§ïŒããšãã°ãã¿ã€ãïŒãšããã€ã¹ç¹æ§ïŒããã€ã¹é床ããã¹äžã®ããã€ã¹ã¢ãã¬ã¹ã
usb_controller
ãžã®ãã€ã³ã¿ãŒïŒã
usb_controller
ãŸãã ãã®æ®µéã§åŒã³åºããã
*hci_port_init
ã³ãŒãã¯ã
usb_hardware_func.NewDevice
ããã®APIã§äœæããã
*hci_new_device
é¢æ°ã®æäœãå§ä»»ããŸãã åŸè
ã¯ãããã€ã¹ã®ç¹æ§ãæ£ããæºããããæ¬äŒŒãã£ãã«æ§é ãæºåãããã£ãã«ã®ç¹æ§ã®å€ã¯éèŠã§ã¯ãããŸããã ããã§ããã¹ãã³ã³ãããŒã©ãŒãµããŒãã³ãŒãã¯ç¬ç«ããã¢ã¯ã·ã§ã³ãå®äºããè«çããã€ã¹ã¬ãã«ã®
usb_new_device
é¢æ°ã«å¶åŸ¡ã移ããŸãã ããã«ãããã€ã¹ã®é»æºããªãã«ãªããŸã§ããã¹ãã³ã³ãããŒã©ãŒãµããŒãã³ãŒãã¯ããé«ãã¬ãã«ããã®ãªã¯ãšã¹ãã®ã¿ãå®è¡ããŸãã
ãã£ã³ãã«éèšãšãã£ã³ãã«éä¿¡

ã³ã³ãããŒã©ãŒã®èŠ³ç¹ããèŠããšãéä¿¡èšè¿°åã®ãã¥ãŒïŒ1ã€ã®èšè¿°åã¯éä¿¡å
šäœããŸãã¯ã³ã³ãããŒã©ãŒã«å¿ããŠäžéšïŒãåäžãªã³ã¯ãªã¹ããšããŠç·šæãããæåã®èšè¿°åã®ç©çã¢ãã¬ã¹ã¯ãã£ãã«æ§é ã«ããã次ã®èšè¿°åã®ç©çã¢ãã¬ã¹ã¯åã®èšè¿°åã«ãããŸãã ã³ã³ãããŒã©ãŒã1ã€ã®ãã£ã¹ã¯ãªãã¿ãŒã®åŠçãçµäºãããšã次ã®ãã£ã¹ã¯ãªãã¿ãŒã®ã¢ãã¬ã¹ãããã«æžã蟌ãããšã«ããããã£ãã«æ§é ãæŽæ°ããŸãã äŒéãã¥ãŒãå®è¡ãããŠããå Žåããã¹ãã³ã³ãããŒã©ãŒãµããŒãã³ãŒãã¯ãããŒããŠã§ã¢ãšã®ç«¶åç¶æ
ãåé¿ããããã«ã次ã®èšè¿°åèªäœã®ã¢ãã¬ã¹ãæŽæ°ã§ããŸããã äœæ¥ãæŽçããã«ã¯ããã¥ãŒã®æåŸã«è¿œå ã®ç©ºã®èšè¿°åãå¿
èŠã§ãã 空ã®ãã³ãã«ã¯ãã³ã³ãããŒã©ãŒã«å¯ŸããŠéã¢ã¯ãã£ããšããŠããŒã¯ãããŸãã ã³ãŒããèšè¿°åãè¿œå ããå ŽåãçŸåšã®ç©ºã®èšè¿°åãåãã次ã®ç©ºã®èšè¿°åãéžæããå€ãèšè¿°åã«æ°ããèšè¿°åãžã®ãªã³ã¯ãé
眮ããæåŸã®ã¢ã¯ã·ã§ã³ã§å€ãèšè¿°åãã¢ã¯ãã£ãã«ããŸã-ããã¯ãã¹ãŠãã³ã³ãããŒã©ãŒãšã¬ã³ãŒãã亀差ãããŸããã ã³ã³ãããŒã©ãŒãéã¢ã¯ãã£ããªèšè¿°åã«éãããšããã¥ãŒã®åŠçãåæ¢ãããã£ãã«æ§é å
ã«éã¢ã¯ãã£ããªèšè¿°åãžã®ãªã³ã¯ãæ®ããŸãã
空ã®èšè¿°åã®å¿
èŠæ§ãèªèããåŸããã£ãã«ãéããŠéä¿¡ããã¥ãŒã«å
¥ããã®ã¯ããªãç°¡åã§ãã
usb_hardware_func.InitPipe = *hci_init_pipe
ãéããšã
usb_hardware_func.InitPipe = *hci_init_pipe
次ã®ãã®ãå¿
èŠã§ãã
- æ¢åã®ãã£ãã«ãŸãã¯æ¬äŒŒãã£ãã«ããããã€ã¹ç¹æ§ãã³ããŒããŸãã
- éä¿¡ãããããŒã¿ã«åºã¥ããŠãã£ãã«ã®ç¹æ§ãå
¥åãã
- 空ã®èšè¿°åã®ç©çã¢ãã¬ã¹ããã£ãã«æ§é ã«ç»é²ããŸãã
- 空ã®èšè¿°åãéã¢ã¯ãã£ããšããŠåæåããŸãã
- æåŸã®ã¹ãããã¯ã察å¿ãããªã¹ãã«ãã£ãã«ãæ¿å
¥ããããšã§ãã
å®æçãªãã£ãã«ã®å Žåãç®çã®ãªã¹ããéžæããå¿
èŠããããŸãã ããã¯ãã©ã³ããŒã®ã¿ã¹ã¯ã§ããã次ã®èšäºã§èª¬æããŸãã ãã¥ãŒãžã®è»¢éã®è¿œå ã¯ã転é
usb_hardware_func.AllocTransfer = *hci_alloc_transfer
1ã¹ããŒãžã®å
å¡«èšè¿°åã«åå²ãããŸããããã¯ãå¶åŸ¡è»¢éã®ããã«2åãŸãã¯3ååŒã³åºããã転é
usb_hardware_func.InsertTransfer = *hci_insert_transfer
ã¢ã¯ãã£ãåã®ããã«
usb_hardware_func.InsertTransfer = *hci_insert_transfer
ãŸãã
AllocTransfer
, .
InsertTransfer
.
IOC, Interrupt on completion. IOC, . - .
OHCI - , ( IOC) : , .
ohci_controller
, , . OHCI «» , .
UHCI EHCI , UHCI EHCI , , , .
USB,
*hci_process_finalized_td
. â , ; . â , callback- , .
. , , â ( « » ). ,
usb_hardware_func.SetDeviceAddress
: . ,
usb_hardware_func.SetEndpointPacketSize
: . UHCI â , , . , .
, . EHCI , , , . , : , , , , .
OHCI EHCI , , . , . OHCI . EHCI
Interrupt on Async Advance Doorbell : « , » . , .
, .
: â OHCI EHCI, UHCI â
usb_device_disconnected
, . , 100 , .
1:2: -3: -
4:5:6: