Sourcecode Fortschritt


  • Mod

    0.0.4.116 - Rev: 1505

    Werte im input context bei xhci.c weiter korrigiert.

    test-PC zeigt leider immer noch "parameter error". 😕
    Auf vmware funktioniert es bestens. 🙂


  • Mod

    0.0.4.117 - Rev: 1506

    xhci.c: Nun spielt auch der test-PC beim Adressieren der Devices mit.

    Man erkennt hieraus, dass die Entwicklung solcher Treiber nur durch Testen auf Hardware eine gewisse Reife entwicklen kann. Emulatoren können da bei usb keinesfalls mithalten.


  • Mod

    0.0.4.118 - Rev: 1507
    xhci.c: weitere Verbesserungen - vor allem für Hardware (delay zwischen command und event-abfrage notwendig)

    (nr. versehentlich eins zu hoch in ckernel.c)



  • Version 0.0.4.120:

    - Screenshots können nun auch außerhalb der Kernelkonsole gespeichert werden
    - SHELL.ELF wird nun mit fopen/fread/fclose aus der Ramdisk geladen
    - Codevereinfachungen in BL1 und BL2
    - FAT_fopen vereinfacht
    - Überreste von make_initrd entfernt

    Versions- und Revisionsnummern wieder synchron.



  • Version 0.0.4.121:

    - IO-Cache-Größe hängt von verfügbarem RAM ab (10 bis 3000 Sektoren, statt vorher stets 20)
    - Syscalls für Maus implementiert
    - IPC überspringt voranstehenden Separator in Pfaden
    - Kompatibilität mit aktuellster Clang-Version hergestellt
    - ScreenCache nach Benutzung wieder freigegeben



  • Nachdem ehenkes und ich den halben Tag gesucht haben, können wir nun sogar drei statt einem Fehler beheben:

    Version 0.0.4.122:

    - Drei Fehler im Zusammenspiel von BL2 und paging.c behoben
    - Debugausgaben der MemoryMap verbessert



  • 0.0.4.123 - Revision 1511

    • MADT-Parser ausgebaut (@ehenkes: Interrut Source Overrides koennten vielleicht bei deinem xHCI-Problem helfen)
    • Parser-Format geaendert: Pfade jetzt lowercase; Nullbasierte Nummerierung von lokalen APICs, IO-APICS, NMIs etc. (ID in einem extra Feld) ➡ erster IO-APIC hat garantiert den Pfad /PrettyOS/acpi/ioapic/0/
    • Copyright in ata.c ergaenzt


  • Version 0.0.4.124:

    - Fehlerkorrektur im ACPI-Treiber: Suche EBDA-Zeiger in BDA; BIOS-Bereich beginnt bei 0xE0000 (damit läuft auch VBox); Suche an 16-byte Grenzen
    - Prüfe Verfügbarkeit von ACPI (anhand RDSP-Zeiger); Zeige Bootlog-Meldung nur bei Verfügbarkeit
    - fopen() funktioniert nun für beliebige Dateien aus Ramdisk; ipc_fopen() implementiert
    - Nutze Option -mtune=generic (Optimierung für übliche (moderne) CPUs, aber Befehlssatz weiterhin durch -march=i486 limitiert) in makefiles
    - Aufrufkonvention im BL2: Aufrufer sichert Register (ReadSectors)


  • Mod

    0.0.4.125 - Rev: 1513

    xhci.c: Kleine Verbesserungen, damit auch usb2-Sticks via xhci sicher adressiert werden.


  • Mod

    0.0.4.126 - Rev: 1514

    Als Experimentierbasis für Transfers.

    xhci: Test mit control-Transfer GET_DEVICEDESCRIPTOR

    Hardware: EP not enabled, xHC error (obwohl die Adressierung klappt)
    vmware: scheinbar in Ordnung
    bochs: EP not enabled, Transfer error (Adressierung klappt nicht)

    Screenshot vom test-PC (zwei usb3-Sticks angeschlossen an Port 3 u. 4):

    PrettyOS [Version 0.0.4.126 - Rev: 1514]                      Console 6:        
    --------------------------------------------------------------------------------
    
    Events:                                                                         
    
    Completion: Success     Port:1 c:1 type:Port Status Change                      
    Completion: Success     Port:2 c:1 type:Port Status Change                      
    Completion: Success     Port:3 c:1 type:Port Status Change                      
    Completion: Success     Port:4 c:1 type:Port Status Change                      
    Completion: Success     CmdPtrLo:00DB4000 c:1 slot:1 Cmd Complete               
    Completion: Success     CmdPtrLo:00DB4010 c:1 slot:2 Cmd Complete               
    Completion: Success     CmdPtrLo:00DB4020 c:1 slot:3 Cmd Complete               
    Completion: Success     CmdPtrLo:00DB4030 c:1 slot:4 Cmd Complete               
                 - - - - - - - - - - - press key - - - - - - - - - - -              
    insert setup-data-status in transfer ring                                       
    insert setup-data-status in transfer ring                                       
    insert setup-data-status in transfer ring                                       
    insert setup-data-status in transfer ring                                       
    
    Events:                                                                         
    
    Completion: EP Not Enabled      c:1 type:xHC Event                              
    Completion: EP Not Enabled      c:1 type:xHC Event                              
    Completion: EP Not Enabled      c:1 type:xHC Event                              
    Completion: EP Not Enabled      c:1 type:xHC Event                              
    Completion: EP Not Enabled      c:1 type:xHC Event                              
    Completion: EP Not Enabled      c:1 type:xHC Event                              
    Completion: EP Not Enabled      c:1 type:xHC Event                              
    Completion: EP Not Enabled      c:1 type:xHC Event                              
    Completion: EP Not Enabled      c:1 type:xHC Event                              
    Completion: EP Not Enabled      c:1 type:xHC Event                              
    Completion: EP Not Enabled      c:1 type:xHC Event                              
    Completion: EP Not Enabled      c:1 type:xHC Event                              
    Completion: EP Not Enabled      c:1 type:xHC Event                              
    Completion: EP Not Enabled      c:1 type:xHC Event                              
    Completion: EP Not Enabled      c:1 type:xHC Event                              
    Completion: EP Not Enabled      c:1 type:xHC Event                              
    Completion: Parameter Error     CmdPtrLo:00DB4040 c:1 slot:1 Cmd Complete       
    Completion: Parameter Error     CmdPtrLo:00DB4050 c:1 slot:2 Cmd Complete       
    Completion: Success     CmdPtrLo:00DB4060 c:1 slot:3 Cmd Complete               
    Completion: Success     CmdPtrLo:00DB4070 c:1 slot:4 Cmd Complete               
                 - - - - - - - - - - - press key - - - - - - - - - - -              
    slot: 1 state: 0 addr: 0 speed (context): 0 PLS: 5 usb: 0F23 len: 32 type: 15   
    slot: 2 state: 0 addr: 0 speed (context): 0 PLS: 5 usb: 0F23 len: 35 type: 15   
    slot: 3 state: 2 addr: 3 speed (context): 3 PLS: 0 usb: 0820 len: 35 type: 8    
    slot: 4 state: 2 addr: 4 speed (context): 3 PLS: 0 usb: 0823 len: 35 type: 15   
    
    >>> Press key to close this console. <<<
    

  • Mod

    0.0.4.128 - Rev: 1515 *(Nr. im kernel versehentlich zu hoch)
    *
    xhci: Transfer-Ablauf weiter verbessert, TRT ergänzt im Setup Stage, Zeitablauf geordnet. Hardware spielt leider immer noch nicht mit.

    (Fehlerhaft in xhci.c)


  • Mod

    0.0.4.129 - Rev: 1516 (Rev-Nr. 1515 in ckernel.c: eins zu tief)

    xhci.c: zwei Fehler behoben
    Nun klappt es in vmware, auch der test-PC zeigt endlich Transfer Events.

    Test-PC (an slot 3 u. 4: jeweils ein usb3-Stick):

    Events:

    Completion: Parameter Error CmdPtrLo:00DB4040 c:1 slot:1 Cmd Complete
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: Parameter Error CmdPtrLo:00DB4050 c:1 slot:2 Cmd Complete
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: Success CmdPtrLo:00DB4060 c:1 slot:3 Cmd Complete
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success CmdPtrLo:00DB4070 c:1 slot:4 Cmd Complete
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    - - - - - - - - - - - press key - - - - - - - - - - -
    slot: 1 state: 0 addr: 0 speed (context): 0 PLS: 5 usb: 0210 len: 18 type: 1
    slot: 2 state: 0 addr: 0 speed (context): 0 PLS: 5 usb: 0210 len: 18 type: 1
    slot: 3 state: 2 addr: 3 speed (context): 3 PLS: 0 usb: 0210 len: 18 type: 1
    slot: 4 state: 2 addr: 4 speed (context): 3 PLS: 0 usb: 0210 len: 18 type: 1

    Sehr gut ist, dass wir nun Events vom Typ "Xfer Event" erhalten. Länge und Typ stimmen auch beim usb-Device-Descriptor. Damit kann man nun bezüglich Control-Transfers experimentieren.

    Lässt man sich xHC/EP state (letzteres im Device Context) und max Packet size (im usb device descriptor) ausgeben, so erhält man:

    slot: 3 state: 2/1 addr: 3 speed: 3 PLS: 0 usb: 0210 maxPack: 64

    EP state 1 bedeutet: "Running" (operational, either waiting for a doorbell ring or processing TDs)

    Yep! 👍


  • Mod

    0.0.4.130 - Rev: 1517

    xhci-Transfer in unseren komplexen usb-Transfer/Transactions-Frame eingehängt (experimentelle Version, da usb3-Transfer noch nicht klappt. Liegt noch an Schnittstelle usb zu xhci).

    Klappt bisher nur mit frischem Attach, beim bereits angesteckten Stick erscheint noch Unknown Port Type.


  • Mod

    0.0.4.131 - Rev: 1518

    usb/xhci: experimentelle Version

    Probleme:
    - Start mit angestecktem Stick: unknown port type (Verzögerung nach Interrupt brachte keine Verbesserung)
    - Anstecken eines Sticks: EP not enabled

    Ein Fehler wurde noch behoben:
    Ports laufen intern von 0 ... n, Device Slots von 1 ... n+1

    uint8_t slotNr = ((uint8_t)(size_t)((hc_port_t*)transfer->device->port->data)->data)+1;
    xhci_ringDoorbell_Device(x, slotNr, 1); //TODO: calculate target with transfer->endpoint; 1 = EP0
    

    Nach dem Commit wurde noch ein Fehler gefunden:
    DIR = 0 bedeutet OUT (in der OUT transaction steht noch 1)


  • Mod

    0.0.4.132 - Rev: 1519
    xhci/usb: usb 2.10 (findet sich erstaunlicherweise bei "usb3"-Sticks) wurde als valide Version hinzugefügt. Auswertung der Device-Daten ergibt auf den ersten Blick Werte bei usb-version und maxPacket, die i.O. erscheinen. Damit sollte der erste Transfer - trotz "EP not enabled" im Event TRB - geklappt haben.

    in os.h: usb-Transfer-Diagnose eingeschaltet.

    Beispiel: Stick angesteckt

    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    - - - - - - - - - - - press key - - - - - - - - - - -
    USB 02.10
    endpoint 0 mps: 64 byte.
    vendor: 0930h
    product: 6545h release number: 1.16 (Ausgabe in hexcode umwandeln!)

    manufacturer: 0001h product: 0002h
    serial number: 0003h number of config.: 1

    numInterfaceMSD: 255

    - - - - - - - - - - - press key - - - - - - - - - - -

    USB: SET_ADDRESS
    xhci_setupTransfer
    xhci_setupTransaction
    xhci_inTransaction
    xhci_issueTransfer
    Doorbell at slotNr.: 3
    Broken free: 00000210h
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: TRB Error slot:3 EP:1 ED:0 XferLen:8 c:1 type:Xfer Event
    - - - - - - - - - - - press key - - - - - - - - - - -
    new address: 3
    - - - - - - - - - - - press key - - - - - - - - - - -
    usb-Device address: 3

    USB: GET_DESCRIPTOR Config
    xhci_setupTransfer
    xhci_setupTransaction
    xhci_inTransaction
    xhci_outTransaction
    xhci_issueTransfer
    Doorbell at slotNr.: 3
    Broken free: 00000033h
    Broken free: FF010001h
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: EP Not Enabled c:1 type:xHC Event
    - - - - - - - - - - - press key - - - - - - - - - - -
    --------------------------------------------------------------------------------
    usb3 Port: 3, device attached and enabled

    Vergleich des angesteckten Sticks "Toshiba 16 GB usb3" mit der Freeware usbview:

    Device Descriptor:
    bcdUSB: 0x0210
    bDeviceClass: 0x00
    bDeviceSubClass: 0x00
    bDeviceProtocol: 0x00
    bMaxPacketSize0: 0x40 (64)
    idVendor: 0x0930
    idProduct: 0x6545

    bcdDevice: 0x0110
    iManufacturer: 0x01
    iProduct: 0x02
    iSerialNumber: 0x03
    bNumConfigurations: 0x01

    ConnectionStatus: DeviceConnected
    Current Config Value: 0x01
    Device Bus Speed: Full
    Device Address: 0x03
    Open Pipes: 2

    Endpoint Descriptor:
    bEndpointAddress: 0x81
    Transfer Type: Bulk
    wMaxPacketSize: 0x0200 (512)
    bInterval: 0x00

    Endpoint Descriptor:
    bEndpointAddress: 0x02
    Transfer Type: Bulk
    wMaxPacketSize: 0x0200 (512)
    bInterval: 0x00

    Passt! 👍

    Liste usb vendor ID / product ID: http://www.linux-usb.org/usb.ids
    0930 Toshiba Corp.
    6545 Kingston DataTraveler 102 Flash Drive / HEMA Flash Drive 2 GB / PNY Attache 4GB Stick <== ist aber 16 GB

    Man bekommt auf diese Art die Wahrheit heraus über seine Devices.

    http://online.osr.com/ShowThread.cfm?link=249588
    Es gibt 2.00, 2.01, 2.10 usb devices, aber bisher nur eine 2.0 spec.


  • Mod

    0.0.4.133 - Rev: 1520

    usb:

    if (usbDev->usbSpec == 0x0100 || usbDev->usbSpec == 0x0110 || usbDev->usbSpec == 0x0200 || usbDev->usbSpec == 0x0201 || usbDev->usbSpec == 0x0210 || usbDev->usbSpec == 0x0213 ||usbDev->usbSpec == 0x0300)
    

    eine Menge gültiger deviceBCDs



  • Version 0.0.4.134:

    - Changelog und TODO für nächstes Release hinzugefügt
    - xHCI:
    -- Status-Transactions für In und Out
    -- Überflüssiges delay in xhci_portCheck() entfernt
    -- inBuffer/inLength auf 0 gesetzt in xhci_outTransaction()
    - Codeformatierung korrigiert


  • Mod

    0.0.4.135 - Rev: 1522

    xhci: Sonderfall SET_ADDRESS - xhci sendet hier einen Command - in die xhci-Transactions verlagert. Anstecken eines Sticks und Auslesen weiterer Daten klappt nun. Noch stark experimentell.


  • Mod

    0.0.4.136 - Rev: 1523

    xhci: Ablauf weiter verbessert, DEBUGs für die Funktionen eingebaut zur besseren Übersicht.


  • Mod

    0.0.4.137 - Rev: 1524

    xhci: wir verwenden für den pEP-Index DCI-1!
    Also pEP[0] für EP1

    Eingesteckt hochfahren => EP0 state = 0!
    Später anstecken => EP0 state = 1!

    Nun muss man nur noch herausfinden, wo der EP0 state von 0 auf 1 umspringt bzw. nicht. 😉

    Eingesteckt hochfahren => EP0 state = 0!

    portCheck
    detectDevice

    USB: GET_DESCRIPTOR Device
    xhci_setupTransfer
    before Xfer: slot: 4, EP0 state: 0,
    xhci_setupTransaction. req = 6 loVal = 0
    setEnqueueXfer
    xhci_inTransaction
    setEnqueueXfer
    xhci_outTransaction
    setEnqueueXfer
    xhci_issueTransfer
    Doorbell at slotNr.: 4
    setEnqueueXferPtr
    ringDoorbellDevice slot: 4 target: 1
    Broken free (file: kernel/storage/xhci.c, line: 1298, addr: 0000000Ah)
    after Xfer: slot: 4, EP0 state: 0,
    Completion: Success Port:4 c:1 type:Port Status Change
    - - - - - - - - - - - press key - - - - - - - - - - -
    Invalid USB version 00.20!
    - - - - - - - - - - - press key - - - - - - - - - - -

    Später anstecken => EP0 state = 1!

    portCheck
    detectDevice

    USB: GET_DESCRIPTOR Device
    xhci_setupTransfer
    before Xfer: slot: 4, EP0 state: 1,
    xhci_setupTransaction. req = 6 loVal = 0
    setEnqueueXfer
    xhci_inTransaction
    setEnqueueXfer
    xhci_outTransaction
    setEnqueueXfer
    xhci_issueTransfer
    Doorbell at slotNr.: 4
    setEnqueueXferPtr
    ringDoorbellDevice slot: 4 target: 1
    Broken free (file: kernel/storage/xhci.c, line: 1298, addr: FFFFFFFFh)
    after Xfer: slot: 4, EP0 state: 1,
    Completion: Success Port:4 c:1 type:Port Status Change
    Completion: Success Port:4 c:1 type:Port Status Change
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    - - - - - - - - - - - press key - - - - - - - - - - -
    USB 02.10
    endpoint 0 mps: 64 byte.vendor: 0BDAh
    product: 0301h release number: 01.29
    manufacturer: 0001h product: 0002h
    serial number: 0003h number of config.: 1
    numInterfaceMSD: 255

    - - - - - - - - - - - press key - - - - - - - - - - -


Anmelden zum Antworten