Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: Projekt: OS-Development  ::  USB Weiterentwicklung in PrettyOS mit EHCI / UHCI / OHCI     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
Beitrag Erhard Henkes Mitglied 21:47:03 07.09.2011   Titel:   USB Weiterentwicklung in PrettyOS mit EHCI / UHCI / OHCI            Zitieren

Inzwischen wurden die Grundlagen gelegt für UHCI (Intel, VIA) und OHCI (Rest). Nun wurde mit Rev. 1258 auch ein Mechnismus zum Wechsel des Besitzes eines Ports ("Port Routing") zwischen EHCI und Companion HC (UHCI oder OHCI) eingerichtet:

Beim Start:
C++:
    // OpRegs->CONFIGFLAG  =  0; // Write a 0 to CONFIGFLAG register to default-route only to cHC (no high-speed!)
    OpRegs->CONFIGFLAG  = CF; // Write a 1 to CONFIGFLAG register to default-route all ports to the EHCI  
                              // The EHCI can temporarily release control of the port to a cHC
                              // by setting the PortOwner bit in the PORTSC register to a one
//...


Beim Attach und Erkennen der Geschwindikeit (bits 11:10):
C++:
if (((OpRegs->PORTSC[j]>>10)&3) == 1) // K-state, release ownership of port
    {
        OpRegs->PORTSC[j] |= PSTS_COMPANION_HC_OWNED; // release it to the cHC
    }


Beim Deattach:
C++:
OpRegs->PORTSC[j] &= ~PSTS_COMPANION_HC_OWNED; // port is given back to the EHCI



Ergänzung: Eine Fullspeed-Maus wird als J-State erkannt. Daher werden nun ab Rev. 1159 K- und J-State abgegeben. Dies ist in der EHCI Spezifikation m.E. falsch beschrieben.

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
static void ehci_checkPortLineStatus(uint8_t j)
{    
 #ifdef _EHCI_DIAGNOSIS_
    textColor(LIGHT_CYAN);
    printf("\nport %u: %xh, line: %yh ",j+1,OpRegs->PORTSC[j],(OpRegs->PORTSC[j]>>10)&3);
 #endif
   
    switch ((OpRegs->PORTSC[j]>>10)&3)
    {
        case 0: // SE0
        {
            writeInfo(0, "Port: %u, hi-speed device attached", j+1);
     
            if ((OpRegs->PORTSC[j] & PSTS_POWERON) && (OpRegs->PORTSC[j] & PSTS_ENABLED) && (OpRegs->PORTSC[j] & ~PSTS_COMPANION_HC_OWNED))
            {
             #ifdef _EHCI_DIAGNOSIS_
                textColor(IMPORTANT); printf(", power on, enabled, EHCI owned"); textColor(TEXT);
             #endif
                if (USBtransferFlag && enabledPortFlag && (OpRegs->PORTSC[j] & (PSTS_POWERON | PSTS_ENABLED | PSTS_CONNECTED)))
                {
                    setupUSBDevice(j);
                }
            }
            break;
        }
 
        case 1: // K-state, release ownership of port (in EHCI spec 1.0 this is recommended)
        case 2: // J-state, release ownership of port (in EHCI spec 1.0 this is not recommended) <--- keine gute Idee, wie sich später heraus stellt ;)
            OpRegs->PORTSC[j] |= PSTS_COMPANION_HC_OWNED; // release it to the cHC
            break;      
       
        case 3: // undefined
        {
            textColor(ERROR);
            printf("\nline state: undefined");
            textColor(TEXT);
            break;
        }
    }// switch
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:04:17 20.09.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
Beitrag Erhard Henkes Mitglied 10:19:47 10.09.2011   Titel:              Zitieren

Als Aufgaben stehen nun die Schaffung einer ehci_t Struktur an, damit die globalen/statischen Variablen weitgehend verschwinden können (erledigt).

Ansonsten muss wohl die enge Verzahnung zwischen usb-Modul und ehci-QH/qTD Strukturen durch eine Zwischenschicht getrennt werden, um auch uhci/ohci integrieren zu können. Vielleicht kann man das jetzt vorhandene usb-Modul als Zwischenschicht verwenden und darüber ein von dem jeweiligen HC abstrahiertes Modul schaffen.

Auf user-Seite (und auch für das zu schaffende abstrakte Modul) könnte wohl die libusb http://libusb.org/browser/libusb/libusb/libusb.h als Leitlinie verwendet werden.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:31:51 10.09.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
Beitrag Erhard Henkes Mitglied 00:51:51 19.09.2011   Titel:              Zitieren

Auf der Ebene der HCs und Ports ist die Abstraktion schon weitgehend gewonnen (thx to MrX für sein Transfer-/Transaktions-Modell). OHCI wurde nun versuchsweise in USB eingekoppelt, was auch funktioniert. Es sieht so aus, dass man ein gemeinsames Modul für USB 1 und USB 2 verwenden kann.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
Beitrag Erhard Henkes Mitglied 00:01:50 20.09.2011   Titel:              Zitieren

ohci, uhci und ehci hängen nun über die gleiche schnittstelle an usb. Mittels des Emulators Oracle VM VirtualBox soll nun im nächsten Schritt das ohci-Innenleben für usb-transfers (usb 1.1) mit ohci aufgebaut und getestet werden. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
Beitrag Erhard Henkes Mitglied 19:06:06 02.10.2011   Titel:              Zitieren

Nun ist der erste erfolgreiche ohci-Transfer (getDevice) gelungen. :)
Allerdings ist der Gesamtzustand noch unbrauchbar (PC läuft nicht).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
Beitrag Erhard Henkes Mitglied 20:34:25 04.10.2011   Titel:              Zitieren

Meilenstein: Die USB 1.1 control-Transfers (mit ohci) laufen auf VBox!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
Beitrag Erhard Henkes Mitglied 16:54:51 07.10.2011   Titel:              Zitieren

Die bulk-Transfers mit ohci ebenso. Ist kein großer Unterschied.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
Beitrag Erhard Henkes Mitglied 00:32:59 11.10.2011   Titel:              Zitieren

Ich halte USB und Netzwerk von Anfang an für zukunftsweisend. Daher werden diese Module mit Priorität weiter entwickelt. Die Spezifikation für xHCI (Superspeed) liegt nun ebenfalls vor.

Der EHCI-Treiber wurde deutlich beschleunigt durch Beobachtung des active Bit im qTD, allerdings gibt es mit wenigen Sticks in Kombination mit PCs nun Probleme. Der OHCI-Treiber ist stabil (zumindest auf VBox). Der UHCI-Treiber wird gerade ausgebaut und an das abstrakte usb-Modul angedockt. Damit wird PrettyOS bald alle bisherigen HC für usb mass storage devices (MSD) bedienen können, ein wohl eher ungewöhnliches Feature für ein Hobby-OS.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:34:29 11.10.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
Beitrag Erhard Henkes Mitglied 10:24:47 22.10.2011   Titel:              Zitieren

Das Toggle-System wurde überarbeitet und das Toggle-Switchen an die inzwischen richtige Stelle, nämlich in die Transaction, verlagert. Damit können nun auch von 512 Byte mps abweichende Datentransfers wie sie bei full speed bzw. low speed üblich sind (8, 16, 32, 64 Byte) beherrscht werden, ohne dass sich die Toggles "verhaken" (vorher Datenverlust oder NAK). :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
c++.de :: Projekt: OS-Development  ::  USB Weiterentwicklung in PrettyOS mit EHCI / UHCI / OHCI   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.