Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - SqrT

Seiten: [1]
1
Lowlevel-Coding / PCI Geräte über PCIe auffindbar?
« am: 25. December 2013, 21:00 »
Wunderschönen guten Abend und frohe Festtage,
mittlerweile habe ich die ACPI Tabellen gefunden und teilweise ausgewertet. Dabei habe ich die MCFG Table gefunden. Nach ein wenig Recherche war klar, dass es sich hier um eine Tabelle handelt, welche mir die Grunddaten zur Benutzung des PCIe Busses gab. Nun meine Frage: Nach welchen PCIe Geräten soll ich am PCIe-Bus suchen? Nur Netzwerkkarten oder auch Festplatten oder vielleicht sogar Soundkarten? Und lassen sich PCI-Geräte ebenfalls ausfindig machen über diesen "Enhanced Configuration Mechanism", dass wäre nämlich ein großer Vorteil um MMIO zu gehen statt über die IO-Ports des normalen PCI Configuration Space.
MfG SqrT.
2
Lowlevel-Coding / Re: VESA EDID
« am: 06. November 2013, 19:35 »
Guten Abend,
vielen Dank mal wieder für die schnelle Antwort. Ich fang dann jetzt mal an mit dem duzen :D ich selbst werde auch lieber geduzt, fange jedoch lieber immer mit dem Siezen an, damit sich niemand angegriffen fühlt. Das mit dem Linux-log dauert noch ein wenig, da ich Windows besitze und gerade zu wenig Zeit habe um eine Linux Partition einzurichten ( und sie sinnvoll zu verwenden ). Habe es jetzt wie du geraten hast erstmal zurückgestellt um jeden Preis an die EDID Informationen zu kommen, der User bekommt eine Liste die sein Monitor/Bildschirm von der Grafikkarte aus unterstützen könnte, mit einer Warnung, dass der User nur eine Auflösung auswählen soll, von der er sicher ist das sie unterstützt wird ( es werden auch die VGA-Auflösungen angeboten 640*480 etc. ). Nun stelle ich noch eine weitere Frage mit der ich mich im Moment beschäftige, nämlich die Erstellung dieser "Blacklist". Ist es möglich auch ohne EDID eine zweifelsfreie Identifikation des Bildschirms vorzunehmen? Mir schwebt folgendes vor: Der User hat einen Bildschirm bei welchem die EDID Informationen kaputt sind. Zum Glück kennt er die Auflösung seines Monitors/Fernsehers und selektiert sie innerhalb der Liste der aufgelisteten Grafikmodis. Nun würde ich gerne diese Auflösung speichern für genau diesen Monitortyp sodass der User beim nächsten Start nicht mehr gefragt wird und die Auflösung einfach genommen wird. Die Identifikation ist wichtig, da bei einem Monitor wechsel, also er/sie hat einen neuen Monitor gekauft und angeschlossen, nicht diesselbe Auflösung wie für den alten Bildschirm genommen werden darf. Ich habe bereits geschaut ob die Informationen welche von der BIOS Funktion int 0x10 ax = 0x4F00 es:di = Buffer zurückgegeben werden sich bei unterschiedlichen Bildschirmen auch unterscheiden, dies ist jedoch nicht der Fall. Ist es trotzdem möglich den Bildschirm zu identifizieren ohne EDID Unterstützung?
MfG SqrT 
3
Lowlevel-Coding / Re: VESA EDID
« am: 05. November 2013, 21:15 »
Guten Abend,
es handelt sich um eine VGA-Verbindung vom Fernseher zum PC. Die EDID Informationen sind identisch bei den drei aufgezählten Einstellungsmethoden des Fernsehers. Um den Linux-Treiber Log muss ich mich noch kümmern, besitze im Moment nicht die Möglichkeit dies zu testen. Die von dir genannten default Einstellungen biete ich schon an, ich versuche im Moment nur die Erfolgsquote des EDID auslesens zu maximieren, um ein schöneres Bild zu erzeugen und den User nicht unnötig einzubinden. Habe mich weiter mit dem Linux Source Code beschäftigt, die Bildschirme sind als Objekte in den ACPI Tabellen vorhanden, jedoch weiß ich noch nicht inwiefern man die EDID Informationen mithilfe dieser ACPI-Objekte bekommen soll. Ebenfalls soll es einen auslesbaren EEPROM Bereich vom Bildschirm geben, welchen man über den I^2C-Bus auslesen kann. Vielen Dank für die schnelle Antwort Svenska, ich versuche das mit dem Linux-Treiber log so schnell wie möglich zu realisieren.
MfG SqrT


4
Lowlevel-Coding / Re: VESA EDID
« am: 05. November 2013, 17:45 »
Guten Abend,
entschuldigen sie bitte die Vespätung meiner Antwort, jedoch hatte ich in den letzten Tagen viel zu tun. Das "nicht auslesen" äußert sich in dem Fehlschlag der BIOS Funktion int 0x10 ax = 0x415 bx = 1, cx = 0, dx = 0. Ich habe vorher abgefragt, ob die EDID Funktionen vorhanden sind mit der BIOS funktion int 0x10 ax = 0x415 bx = 0, es : di = 0. Nach dem BIOS sind die EDID Informationen vorhanden, jedoch kann ich sie nicht auslesen mit der dafür typischen BIOS Funktion( int 0x10 ax = 0x415 bx = 1, cx = 0, dx = 0 ). Da der Funktionsaufruf scheitert ( ax != 0x4F ) darf ich nach der Specifikation die Daten, welche in dem Buffer stehen nicht als gültig betrachten. Nun stellte sich mir die Frage, wenn mir das BIOS sagt, dass die EDID Informationen existieren, ich sie aber nicht mit der genannten BIOS Funktion auslesen kann, wo sie sich dann befinden. Ein Fehler im Code ist nahezu ausgeschlossen, da ich diesen Code auf drei verschiedenen Bildschirmen und verschiedenen PCs getestet habe und der Fehler nur beim auslesen der EDID Informationen eines Fernsehers scheitert. Ich hoffe, dass ich die EDID Informationen eines Fernsehers auch auslesen kann, insbesondere wenn selbst das BIOS sagt, dass diese existieren. Vielleicht funktioniert die BIOS Funktion int 0x10 ax = 0x415 bx = 2, welche die VDIF auslesen würde. Jedoch steht über das Format dieser VDIF nichts im Internet, oder ich konnte bisher nichts finden.

MfG SqrT

5
Lowlevel-Coding / VESA EDID
« am: 03. November 2013, 12:07 »
Guten Morgen,
mir kam vor einigen Tagen mal wieder die Idee in den Sinn, meinen VBE-Treiber zu verbessern. Um meinen Grafikteiber weiter zu verbessern wollte ich mit EDID die Liste der verfügbaren Grafikmodis einschränken. Dies funktioniert auch meisten auf echter Hardware mit dem BIOS interrupt 0x10, ax = 0x4F15, bx = 0x0001. In diesem Thema soll es jedoch um die Fälle gehen bei denen es nicht funktioniert, d. h. EDID wird unterstützt, dies habe ich verifiziert mit dem BIOS interrupt 0x10 ax = 0x4F15, bx = 0x0000, es : di = 0x0000, jedoch kann ich die EDID informationen nicht auslesen mit der vorher beschriebenen Prozedur. Nun habe ich mich informiert wie man die EDID funktionen noch bekommen könnte. Man kann die EDID informationen scheinbar ebenfalls bekommen, durch ACPI Tabellen? oder durch eine BIOS Tabelle, sowie durch eine Enumeration der PCI-Busse um den passenden Grafikcontroller zu finden, und bei diesem die EDID informationen abzufragen. Aus dem linux Kernel habe ich entnommen, dass die EDID informationen ebenfalls in einer der ACPI Tabellen vorhanden sind, oder die ACPI Tabellen auf eine Kontrollstruktur zeigen, welche diese beeinhaltet. Meine Frage ist nun ob sich vielleicht schon mal jemand umfassend mit dem Thema beschäftigt hat und möglicherweise zu einer Lösung gekommen ist, da die Informationen, welche im Internet zu finden sind ja eher spärlich ausfallen.
Mir wäre es wichtig dem User so oft wie möglich nur eine Liste an Grafikmodis anzuzeigen, welche der Bildschirm auch unterstützt.

MfG SqrT
6
Das Wiki / Kleiner Fehler im Wiki ( IO-APIC )
« am: 26. October 2013, 23:42 »
Guten Abend,
ich meine einen Fehler gefunden zu haben im Wiki ( http://www.lowlevel.eu/wiki/I/O_APIC#I.2FO_APIC_Version ).

Im Wiki wird gesagt, dass aus den Bits 26-23 der maximale Index der Red. Table zu entnehmen ist, jedoch ist es wohl eher von 23 - 16 nach der folgenden Specification:
http://pdos.csail.mit.edu/6.828/2007/readings/ia32/ioapic.pdf ( Seite 10 )

Ebenfalls liefert mir QEMU die Werte der Red. Table in Bits 23 - 16.

MfG SqrT
7
Lowlevel-Coding / Re: AHCI - HBA, mögliche Registerwerte
« am: 24. October 2013, 01:14 »
Vielen Dank für die Antwort  :-D ich fürchte ich habe das ISS register falsch extrahiert,  :| mein shift left war um eins zu wenig :x, na ja jetzt sind alle Werte gültig, meine Verwirrung enstand nur durch die 2 Ports, die mir angezeigt wurden, da ich dachte, dass eine am Mainboard angeschlossene SATA-Platte einen eigenen Port im HBA bekommt, scheinbar ein Irrtum :-D. Dann versuche ich mal diese Port Multiplier in den Griff zu bekommen, und hoffe dass ich bald auch im Long Mode Daten von der Festplatte lesen kann.

MfG SqrT
8
Lowlevel-Coding / Re: AHCI - HBA, mögliche Registerwerte
« am: 23. October 2013, 15:35 »
Entschuldigung, hatte die letzten Tage viel zu tun, deswegen kommt die Antwort erst so spät. Ich habe aus BAR5 die Addresse 0xFBB00000 bekommen, diese konnte ich mittlerweile bestätigen, da man sich im Windows Gerätemanager die physische Addresse des HBA-Controllers anschauen kann ( Geräte Manager - > IDE ATA/ATAPI-Controller - > SATA-Controller auswählen -> Eigenschaften -> Ressourcen -> und da steht die physische Addresse des HBA ). Ich schreibe mein Hobby OS in Assembler und extrahiere CAP wie folgt:

   mov esi, dword[ HBA_BAR5 ]      ; in der Variablen HBA_BAR5 steht die physische Addresse des HBA, das heißt in esi steht nun 0xFBB00000
   mov eax, dword[ esi ]               ; Lade das CAP register nach eax
   
   and eax, 0x1F                          ; Lösche die oberen Bits, behalte nur die Bits [ 04 : 00 ]
   
So bekomme ich NP heraus, also genauso wie von dir beschrieben. Das Register, welche ich im letzten Satz erwähnte war PI, d.h. Ports implemented:
                              0000 0000 0000 0000 0000 0000 0000 0011      = 0x00000003  = PI
Die Version habe ich noch nicht getestest, dies folgt aber in der nächsten Zeit. Vielleicht noch wichtig zu erwähnen ist, dass Port Multiplier unterstützt werden von meinem HBA, jedoch dachte ich das SATA-Festplatten direkt an den HBA angeschlossen sind und nicht durch einen Port Multiplier.
9
Lowlevel-Coding / AHCI - HBA, mögliche Registerwerte
« am: 21. October 2013, 21:06 »
Guten Abend,
gestern habe ich mir mein OS mal wieder angesehen und wollte mal wieder ein bisschen weiter schreiben, also habe ich dort weiter gemacht, wo ich letztes mal aufgehört habe beim AHCI Treiber.
Dabei hat sich folgendes Problem herausgestellt, ich habe 3 SATA-Festplatten an den PC angeschlossen, beim auslesen der HBA Register, im speziellen das Register NP ( Number of Ports ) wird mir jedoch nur der Wert 1 , d. h. es gibt 2 Ports ausgegeben, ebenfalls enthält das Register ISS ( Interface Speed Support ) keinen von der Specifikation vorgeschriebenen Wert. Nun ist die Frage die sich mir stellt, habe ich die richtige physiche Addresse für den HBA, oder habe ich eine falsche ?

Das HBA-Register hat zwar einen Wert der zu dem Wert von Num of Ports passt ( 0x00000003 ), jedoch müsste der HBA doch mehr als 2 Ports haben und einen gültigen Wert in das Register ISS laden oder?
Seiten: [1]

Einloggen