FreeBSD 8.1 a multiportova seriova karta
Dan Lukes
dan at obluda.cz
Wed Jan 5 00:27:16 CET 2011
> 2011/1/2 Dan Lukes<dan at obluda.cz>:
> puc0 at pci0:0:17:0: class=0x070002 card=0x40561409 chip=0x71681409
> rev=0x01 hdr=0x00
> vendor = 'Timedia Technology Co Ltd'
> device = 'PCI / ISA Asynchronous UART Signal Chips Solution (40371409)'
> class = simple comms
> subclass = UART
> bar [10] = type I/O Port, range 32, base 0xe000, size 32, enabled
> bar [14] = type I/O Port, range 32, base 0xe020, size 16, enabled
>
> Ano, bary jsou tam definovane.
Dulezite je, ze 10 a 14. Tim muzes zapomenout, ze by tvuj problem byl
stejny jako resili v tom patchi.
>> funkci, co se provadela minula oprava (tedy puc_config_timedia) je kod:
>>
>> case PUC_CFG_GET_OFS:
>> *res = (port == 1 || port == 3) ? 8 : 0;
>>
>> Tak tu osmicku nahrad sestnactkou.
>>
>
> Zmenu ve zdrojacich jsem jeste neudelal, ale udelal jsem tu dalsi
> diagnostiku, kterou jsi doporucoval.
> Behem dneska se pokusim udelat tuto zmenu ve zdrojacich a prekompilovat kernel.
>
>>
>> Potrebujeme jeste vypis devinfo -rv , respektive, z nej ten podstrom, ktery
>> popisuje informace o puc0 zarizeni.
>
> Tady je:
> puc0 pnpinfo vendor=0x1409 device=0x7168 subvendor=0x1409
> subdevice=0x4056 class=0x070002 at slot=17 function=0
> Interrupt request lines:
> 10
> I/O ports:
> 0xe000-0xe01f
> 0xe020-0xe02f
> uart2
> puc0 I/O port mapping:
> 57344-57351
> puc0 port numbers:
> 1
> uart3
> puc0 I/O port mapping:
> 57352-57359
> puc0 port numbers:
> 2
"puc" je blbec ;-)
Proc tam, proboha, maji jednou cisla portu hexa a podruhy decimalne ?
takze - naslo ti to
1. uart2 na portech e000-e007
2. uart3 na portech e007-e00f
Hm, tak to ti ta zmena 8->16 spis nepomuze, protoze to jsou dva seriaky
v prvnim bloku IO portu
Ale stejne to zkus - pokud to i po zmene najde dva seriaky, tak to budou
jine dva (ten druhy bude jiny - bude na portech e010-e017, devinfo -rv
ti to potvrdi).
Pokdu by to vyslo, vedeli bychom uz kde jsou tri ze ctyrech seriaku, coz
by lepsi nez nic.
No, oabvam se, ze te ceka trocha pokusovani, a ze to zbyva na tebe,
protoze tohle je neco, co se neda jednoduse uhadnout.
Jak sam vidis, karta si necha pridelit dva bloku IO portu - jeden o
velikosti 32, druhy o velikosti 16.
Nekde v tomto prostoru jsou rozlozeny tve ctyri seriaky, pricemz jeden
seriak pravdepodobne zabira osm po sobe jdoucich IO portu.
Takovych osmic mame v tech dvou blocich sest.
O dvou seriacich uz vime - okupuji prvni dve osmice prvniho bloku.
Hledame druhe dva.
Ve funkci puc_config_timedia je to tak, ze je zavolana s cislem
hledaneho portu (tedy v tvem pripade 0 - 3) a ceka se, ze funkce vraci:
1) case PUC_CFG_GET_RID: *res = 0x10 nebo 0x14 coz je identifikace
RID/baru/bloku (to je to misto, ktere opravovali oni v tom patchi)
2) case PUC_CFG_GET_OFS: *res = offset v ramci toho bloku (to je to
misto, do jehoz opravy jsem te tlacil ja)
No a ty musis
a) zjistit, kde u tve karty ty porty opravdu jsou (dva uz mas na pozici
[10]:0h a [10]:8h a hledas dalsi dva na ctyrech moznych pozicich,
pricemz ale [14]:0h a [14]:8h to spis nebudou, protoze tam je hledal
soucasny ovladac - takze by mely byt na [10]:10h a [10]:18h - a nebo en
a pak je cela tahle teorie vadna a problem je jinde)
b) az to budes vedet kde IO porty jpro kazdy konkretni seriak jsou tak
zajistit aby puc_config_timedia vracela prave ty spravne zjistene
hodnoty pro kazdy s 0-3 portu
Nicmene opravdu to nemusi vyjit - ja z toho jak maji udelane ty dva
porty o kterych viem dovozuju analogii (ze to budou mit podobne) jak
budou mit ty druhe dva - jenze - ve skutecnosti by je mohli mit i nejake
naprosto jinak, a to prakticky libovolne ...
Pak bys asi mel smulu - jedine co bych ti poradil pak je -
zrekonstruovat navrh hardware z ovladace pro Wokna, coz ovsem pri
hodinove cene tveho casu vyjde radove draz naz tuhle kartu vyhodit a
poridit jinou ...
> Jeste jsem prochazel man sio a je tam napsano
> V LINTu pro 8.1 "options COM_MULTIPORT" neni, takze jsem se domnival,
> ze sio je obsolete a ze se v 8-cce preslo ze sio na uart.
No, schizma sio x uart existuje uz v sedmicce a v osmicce se situace
nemeni - jedine se zmenilo ktery z obou ovladacu prelozili do GENERICu.
Ale jaky si prelozis do svych kernelu ty je jina otazka. Ja nepouzival
sio a prekladal uart uz na sedmicce ...
Jsou to proste dva ovladace stejneho hardware - tak jako v osmicce muzes
na AHCI pouzit ataahci.ko nebo ahci.ko
> Nemam pouzit informace z man sio?
Coz, zkusit to urcite muzes, ale davam tomu minimalni nadeji. Jak SIO
tak UART zavisi na schopnosti vedet kde se v prostoru IO portu dane
karty nachazeji jednotlive osmice. A predevsim - jak UART tak SIO prave
tohle nechavaji na PUC, takze prechod na SIO podle meho nebude znamenat
v nasem problemu zadnou zmenu.
> Pak ale nechapu proc je v systemu 8.1 man sio, kdyz uz se device sio nepouziva?
V GENERICU nepouziva ...
Dan
More information about the Users-l
mailing list