View this PageEdit this PageUploads to this PageVersions of this PageHomeRecent ChangesSearchHelp Guide

Port del driver scc/ISA de Linux a PCI

Ver Información tarjeta torniquetes





Thursday, 22 March 2012, 5:55:16 pm
Driver scc_pci26 validado Ya se ha probado en campo y funciona correctamente :-).

Monday, 12 March 2012, 8:32:36 pm
Pruebas con el scc_pci26 en el pupitre con 2.6.32-bpo.5-686 Para cambiar las opciones del driver mientras se está ejecutando el cci2.x:

==CUT==
cd /dev
mknod scc2 c 34 2
echo 'D' > scc2
echo '1' > scc2
echo '0' > scc2
echo 'd' > scc2
echo 'D' > scc2
==CUT===

Siendo:
'D' - activar las trazas
'd' - desactivar las trazas
'1' - activar las pruebas de escritura (pone un timer para mandar mensajes de forma autónoma cada 1s)
'0' - desactivar las pruebas de escritura (quita el timer)

Las trazas aparecen en /var/log/debug, o bien se pueden consultar con un dmesg.

Thursday, 13 January 2011, 1:16:37 pm
Cambios en el port a linux2.6 Ahora la versión del núcleo que se va a usar es la "2.6.32-bpo.5-686".

Se compila en chibiko:
 root@chibiko:/home/dario# mount  /home/dario/Programacion
 root@chibiko:/home/dario# su - dario
 dario@chibiko:~$ cd ~/Programacion/proyectos/sico-scc_pci26
 dario@chibiko:~/Programacion/proyectos/sico-scc_pci26$ make


Tuesday, 2 November 2010, 11:19:03 am
Port adicional de linux 2.2 a linux 2.6 Los fuentes están en:
 salchicha:/home/dario/Programacion/proyectos/sico-scc_pci26
Se compilan en symbiandevel:
 root@symbiandevel:/home/dario# mount  /home/dario/Programacion
 dario@symbiandevel:~# cd ~/Programacion/proyectos/sico-scc_pci26
 dario@symbiandevel:~/Programacion/proyectos/sico-scc_pci26$ make

Los recursos que estoy usando para el port son:

Para hacer el Makefile out-of-tree se han sguido los siguientes recursos:

Wednesday, 26 October 2005, 7:43:01 am
PNPBIOS support con pcmcia-cs En este post y en este otro dicen lo siguiente:

As Tino pointed out, you can get the pnpbios functionality if you are
building your pcmcia modules, it's just a configure option to the pcmcia
source. Since you are on Debian I'm guessing you are already using
make-kpkg to build your kernels. Just apt-get the pcmcia-source package
and edit /usr/src/modules/pcmcia-cs/debian/rules. Find the calls to
"Configure" and add "--pnp" to those lines (I think the first one is the
one usually used, the second is for debugging). Then make-kpkg
modules_image as usual, and you will have pcmcia modules that provide
pnpbios support. If you need pcmcia modules anyway this is a lot easier
than extracting a patch. I have this working with 2.4.20 mainline with
only the low-latency patches applied.


Tuesday, 25 October 2005, 11:03:46 am
Hex dumps de ESCD junto con explicaciónEn este post hay un hex-dump del ESCD con explicación, obtenida usando System Analyser V5.2 (Shareware),

Hay un programa llamado lsescd que permite ver las asignaciones actuales. Se supone que a partir del 2.6.10 (aprox) también se puede ver usando /proc/bus/pnp. Además, la configuración de las tarjetas se puede cambiar con un programa del pcmcia_cs (separado a pnpbios-tools en debian/unstable): lspnp/setpnp.


Monday, 24 October 2005, 9:54:49 am
Más info sobre ACPI y PCI ROuting Tables Parece que ACPI es quien "depreca" a las PCI Routing Table (_PRT). Hay un "overview" del ACPI de Linux en el anuncio del port de ACPI de Linux a Syllabe.

Monday, 24 October 2005, 7:42:20 am
Utilidad relacionada: dmidecode Está en la web de lan: dmidecode.c. SIrve para interpretar los campos DMI (Desktop Management Interface) de la BIOS. Ver Salida de dmidecode en la Via Eden DP.

Monday, 24 October 2005, 7:30:49 am
Utilidades para guardar/cargar el ESCD en archivo En este post están las insttrucciones para el escd_dump (hay un link muerto: escd.tar.gz).

Según parece, si se compila la opción de PNPBIOS, se puede acceder al PNP en /proc/bus/pnp/escd, pero según qué placa, funciona o no... (si no funciona se consigue un bonito reboot).

Friday, 21 October 2005, 6:13:35 pm
Más sobre cambiar interrupciones y ACPI Ver este artículo de lwn, más en google. Por otro lado, habría que estudiarse la documentación de acpi4linux.

Friday, 21 October 2005, 12:28:36 pm
Sigue habiendo problemas compartiendo la IRQ Además resulta que en la estación en la qu eestamos haciendo pruebas (vest2 de iglesia), no hay manera de que no compartan interrupción. He probado:
  • Poner tarjeta arriba y reset BIOS: Comparte
  • Cambio a abajo y reset BIOS: Comparte
  • cambio a arriba y no se hace reset de BIOS: Comparte

Con lo cual no parece haber manera sana de forzar que cambie de interrupción.

or otro lado tampoco ha habido forma de hacer que use la eth1 en vez de la eth0 (en la oficina funciona, pero en el pupitre_sc de iglesia se queda sin ping al cambiarle el interfaz de red a usar y cambiar el cable de posición :-?).

He visto que OpenSolaris tiene una función para reconfigurar la interrupciónd de un dispositivo PCI usando ACPI: uppc_acpi_irq_configure(). Sólo me falta saber si Linux tiene algo equivalente, ya que parece la única salida (le pondría la irq 5, que está libre).

Update: Lo más cercano que he encontrado es en /usr/src/scc/linux-2.4.27/drivers/acpi/pci_irq.c, la función acpi_pci_irq_enable(), pero esa no la cambia, sólo la activa. Por cierto, eso se hace en la "PCI Interrupt Routing Table", la _PRT, que se cambia usando ACPI. En este parche incluso son capaces de cambiar la IRQ usando acpi_pci_set_current_irq :-o.

Otra opción es usar IO-APIC, que sí permite programar qué interrupciones usa quién.

Thursday, 20 October 2005, 6:12:54 pm
Pruebas compartiendo la IRQ Este documento dice que no se debe usar SA_INTERRUPT a la vez que SA_SHIRQ. Merece la pena hacer la prueba...

Friday, 14 October 2005, 12:23:20 am
Primera versión del driver de SICO scc_pci Ya funciona lo siguiente en el scc pci.c:
  • Transmisión usando interrupciones
  • Lee y tracea (aunque ignora) el estado de transmisión y de recepción
  • También tracea la recepción (aunque no lo guarde para mandárselo al usuario)
Esta versión del driver está reescrita desde cero específicamente para el ESCC (frente al de INDRA que era para el SCC), con lo que se mejora en velocidad y en estabilidad (p.ej. no tiene problemas por compartir interrupciones), así como una mejora muy sustancial en legibilidad de código (en estos momentos le falta implementar parte de la recepción, pero son 620 líneas, frente a las más de 3000 de la parte equivalente del driver antiguo).

Thursday, 13 October 2005, 7:05:20 am
Documentación de Zilog Página de Zilog sobre el SCC/ESCC y la página específica del z85230.

Thursday, 13 October 2005, 3:48:14 am
Más información

Wednesday, 5 October 2005, 4:49:40 pm
El CRC es CRC-CCITT Según este doc, el CRC generado por el SCC sólo puede ser CRC-16 o CRC-CCITT, y en las pruebas con INDRA ponían el analizador (DATASCOPE) a CCITT. Ese CRC es, según la documentación de Zilog, el CRC "nativo" de SDLC (es decir, el que no es CRC-16). Además, indican que el DPLL sirve para que el receptor pueda obtener la señal de reloj cuando se embebe usando FM0/FM1/NRZ/NRZI en SDLC (también lo mencionan aquí).

Wednesday, 5 October 2005, 4:30:14 pm
Información miscelánea sobre puertos serie La página Serial communications [drop.com/~cary] contiene una cantidad formidable de punteros a documentos de programación de puertos serie (tanto tipo PC (UART), como Mac/Atari (SCC) y otros: midi, usb, ieee1394...). Por desgracia, aunque los Mac usan SDLC sobre SCC para appletalk, lo usan con FM0 en vez de con NRZI (no podía ser perfecto).

Tuesday, 27 September 2005, 1:06:54 pm
Parece que hay un problema con el SDLC Resulta que usan el SDLC, pero en 422 y con sólo 4 hilos. Seguramente haya que configurar algo "raro" en la tarjeta para que embeba el reloj dentro de la transmisión. Tutoriales de SDLC:

¡Update! Resulta que si se usa NRZI, el reloj se embebe dentro de la transmisión, de manera que se sincroniza con los cambios de nivel de señal (ver 3-4 en el manual de Zilog). Es como sigue:
  1. NRZI interpreta el 0 ó 1 en vez de como señal alta/baja, como cambio en el nivel de señal (0) o no (1).
  2. SDLC se asegura uqe nunca haya más de 5 bits 1 seguidos.
  3. Entre los dos hacen que haya un cambio de nivel de señal como mínimo cada 5 bits, lo que provoca que se pueda usar para la sincronización sin necesidad de habilitar una línea dedicada para el CLCK.

Thursday, 22 September 2005, 12:01:35 pm
Sobre los cuelgues del driver en la oficina Resulta que es culpa de compartir interrupción (estaban compartiendo interrupción tanto el usb, como ña eth como el scc). Para hacer que la BIOS haga una asignación de interrupciones diferente hemos seguido las sufgerencias de un howto de estabilidad, que se resumen en resetear el ESCD:
  1. Se entra en la bios
  2. Se entra en el menú de configuración PCI
  3. Se pone a "Enable" la opción de "reset ESCD".
Al salvar y salir, hace una asignación de IRQs diferentes, en la que el scc sólo comparte irq con el usb.

NOTA: Antes era "irq9: usb, eth,scc ; irq11: usb"; ahora es "irq9: usb,scc ; irq11: usb, eth".

Thursday, 22 September 2005, 11:56:56 am
Pruebas en Indra Resulta que la tarjeta Sealevel 5103 sólo tiene rs-232. La tarjeta que soporta tb. 422/485 es la 5102 (la que habíamos elegido inicialmente :-/ ). Se ha pedido una tarjeta de la 5102 para ver si funciona con esa...

Wednesday, 21 September 2005, 8:10:53 am
Información de programación del SCC Afortunadamente, el SCC se usa en los Apple con AppleTalk. Así, hay documentación básica más fácil de comprender que los manuales de Zilog en los siguientes sitios (más):

Wednesday, 21 September 2005, 8:09:19 am
Hay un bug en el driver Después del primer write, un instante después de salir de la función de escritura (SCC_WRITE y dentro de ella, de sdlc_write), bloquea el ordenador.

Wednesday, 14 September 2005, 5:35:06 pm
Terminada la primera versión del port de indra que parece funcionar El código que tenemos hora mismo es:
  • /usr/src/scc/linux-2.2.26-scctty/drivers/char/scc.c: Es el driver de 2.0.x portado a 2.2.x, no funciona con las ioctls de indra
  • /home/dario/Programacion/proyectos/sico-scc_pci/scc_pci.c: Es una prueba de hacer el driver desde cero, pero solo implementa la inicialización, ya que se ha optado por la siguiente opción.
  • /usr/src/scc/Driver-1.0-2/scc.c: Es el driver de indra modificado con los cambios de los dos anteriores de manera que funcione en kernels 2.2.x. Este es el que vamos a utilizar (en principio).

Otras versiones que no se utilizan:
  • Driver-1.0-2/scc-ori.c es el driver original de indra
  • Driver-1.0-2/scc.c.indra24.broken parece ser uin intento abortado de port a 2.4 hehco por indra. Está renombrado (en el tar original tenia otro nombre; no ponia lo de broken, por lo menos).

Thursday, 1 September 2005, 5:54 pm
Más punteros de documentación de escritura de drivers Aunque en genral son para drivers de red, aplica la mayoría del texto:

Y no directamente relacionado, pero útil de todas formas:
  • Jun Sun's Linux/MIPS Porting Guide Guía para portar Linux (el kernel) a una nueva plataforma. Incluye cómo usar KGDB y también un buen repaso a una manera razonable de inicializar el bus PCI en las placas MIPS (pero la descripción es aplicable a otros ports, sólo que el x86 usa "lo que le ha dejado la BIOS", y no requiere hacer algunos de los pasos ahí descritos).

Thursday, 1 September 2005, 9:14:56 am
A vueltas con la inicialización Un problema posible es que la tarjeta esté en un modo ACPI que haga que no funcione (ver p.ej. el driver de la eepro100). Otro problema es la inicialización en sí de las regiones I/O. A continuación pongo un enlace que explica esto último:
El uso de mdelay()/udelay() Está explicado en:



Wednesday, 31 August 2005, 1:06:36 pm
Pruebas sobre DOS Usando el programilla SCC.EXE (versión parametrizada de uno de los programillas de DOS de jemplo de Sealevel), y usando el pcispy/viewpci, sí que se accede a la tarjeta y la detecta correctamente como una ESCC. He aquí lo que hemos "averiguado" cuando se ejecutaba desde DOS5:
Device #VendorDeviceClass
01.0A135e5103Unknown

RegionAdressInfo
0:ff8ffc0080 bytes
1:0000dc0080 bytes I/O space
2:0000dfa010 bytes I/O space
irq11(mirado en el dump)

El programa ha reconocido la tarjeta como una 85230 al hacer:
 C:\> SCC 0xdfa0 11

Conclusión: la tarjeta funciona y las rutinas de inicialización del programa DOS son válidas.

Tuesday, 30 August 2005, 5:46:29 pm
Notas sobre programación del bus PCI bajo DOS
  • Programming PCI boards in DOS Muy útil. Con ejemplo en ensamblador y todo.
  • Register Programming a PCI Device and Finding the Correct Address Poco útil. Lo único que es de interés es que al mapear las direcciones I/O, hay que tener cuidado de que estén en la parte "adddressable by DOS real mode programs", es decir, dentro del primer MB y que no sean sobreescritos por los "memory managers" (es decir, emm386, qemm y similares).
  • Interfacing with PCI soundcards from DOS (thread) Básicamente dicen que se puede acceder usando tanto la BIOS PCI como directamente usando los "ports 0CF8h-0CFCh, they are described in Ralf[ Brown]'s ports list". También enseñan código en ASM (x86) de cómo hacerlo usando llamadas a la PCI BIOS.
  • PCI bus info and code from a programmer's perspective Muy completo, describe para qué son las zonas de configuración y todo. Va paso a paso. Dice tanto la manera usando la BIOS como usando los puertos. Lectura muy recomendable. Además dan un puntero a la utilidad pciview.exe, más completa que el pcispy de matrox (está en salchicha:/home/dario/program/dos).
  • Ralf Brown's Interrupt List Por si se quieren usar las llamadas a la PCI BIOS.

Lo más correcto parece ser utilizar llamadas a la PCI BIOS (1Ah). En el primero de los enlaces hay un programa en ASM (x86) que muestra cómo hacerlo.

Tuesday, 19 July 2005, 10:10:11 am
Ya tenemos el driver de Indra Lo recibimos ayer. Mirando los fuentes, es un fork de la versión z8530drv-1.9.dl1bke (disponible por ftp). Voy a mirar cuales son los cambios que han realizado...

Monday, 4 July 2005, 7:06:19 pm
Primera versión del driver scc.c Pero para que funcione hay que hacer un:
 mknod /dev/scc0 c 34 0

Monday, 4 July 2005, 12:31:55 pm
Estado del port Usando la información de porting 2.0 to 2.2 he hecho las partes básicas para que no use cosas que ya no existen en 2.2. Por otro lado, para ver cómo se debe hacer el soporte PCI, está el driver /usr/src/scc/linux-2.2.26-scctty/drivers/char/cyclades.c (buscar pci_find_device).

Thursday, 30 June 2005, 4:52:18 pm
Arreglados los problemas de la red en la epia Resulta que según este mensaje y este otro mensaje, el via-rhine se consiguió estabilizar "muy tarde". O sea que me he bajado los drivers actualizados del repositorio de Donald Becker y lo he recompilado en salchicha:/usr/src/scc/rhine. Una vez puestos en la epia y regenerado el initrd ha funcionado a la perfección ;-). Eso significa que podemos usar finalmente una sarge (¡¡yiiiiipiee!!).

Thursday, 30 June 2005, 8:16:15 am
Problemas con la red Con el núcleo 2.2.26 me da el siguiente error por la parte de red:
 $ ping 3.0.1.170
 PING 3.0.1.170 (3.0.1.170) 56 (84) bytes of data.
 Warning: no SO_TIMESTAMP support, falling back to SIOCGSTAMP
 Warning: kernel is not very fresh, upgrade is recommended.
 From 3.0.1.176: icmp_seq=2 Destination Host Unreachable
 From 3.0.1.176: icmp_seq=3 Destination Host Unreachable

Thursday, 30 June 2005, 7:44:17 am
Problemas al arrancar mi flamante nuevo núcleo 2.2.26 Me da lo siguiente:
 VFS: Mounted root (ext2 filesystem) readonly.
 Freeing unused kernel memory: 56k freed
 Warning: unable to open an initial console
 kernel panic: No init found. Try passing init= option to kernel.

No arregla el anterior error el crear un initrd He cambiado el mkinitrd.conf tal y como indican en la manpage para que use genromfs en vez de mkcramfs (por no tener parcheado el núcleo 2.2.x para cramfs), y he generado un initrd para el núcleo con "mkinitrd -k -o /boot/initrd.img-2.2.26 -r /dev/hda1 2.2.26". Sin embargo igue dando exactamente el mismo error :-?.

Update: ¡Arreglado! Según este howto eso es porque le falta el root=... y, efectivamente, era por eso O:-) (¡y yo que creía que lo había puesto!).

Wednesday, 29 June 2005, 3:49:05 pm
Problemas con el 2.0.x Resulta que me da un error al compilar el 2.0.40 en potato. A intentar usar el 2.2.x...

Wednesday, 29 June 2005, 12:08:13 pm
Cambios en el scc.c A base de ver diff de kernel.org partiendo desde el 2.4.27 y yendo para abajo, las versiones del kernel que han visto cambios en el scc.c son las siguientes:

NOTA: Puedes ver las scripts para ver los cambios del scc en el kernel.

Wednesday, 29 June 2005, 11:30:37 am
Cosas, cosas, cosas... Resulta que el núcleo que usan los de Indra en los PCs del scc/ISA data de 1997, pero los fuentes del driver que hay en ese núcleo son de 1995 y el driver scc cambió completamente a finales de 1996; pasó de ser un driver tipo char a tipo net.

Fuentes del driver "original" Los he puesto en
salchicha:/usr/src/scc/linux-2.0.29/drivers/char/scc.c
mientras que los modernos están en
salchicha:/usr/src/scc/linux-2.4.27/drivers/net/hamradio/scc.c


Wednesday, 29 June 2005, 10:08:43 am
PC en metro con el SCC rodando Como ejemplo de la configuración actual que usa las placas ISA, se puede ver el siguiente PC en metro:
  1. f9 (Linea 9)
  2. rlogin rur (vas a rivas urbanizaciones)
  3. rlogin os2 (vas a un pupitre con ethernet)
  4. si necesitas hacer un lsmod o similar, necesitas "". Como usuario tb. puedes (/sbin/lsmod).

Descripción del proyecto


Se trata de porder usar la tarjeta PCI de sealevel que tiene el chip Z8523008VSC (compatible ESCC, Z85230) con el driver de scc de linux (modificado para PCI).

La idea es:
  1. Ver las diferencias entre el driver ne2000 (ne.c) y el ne2000-pci (ne2k-pci.c) de Linux (que se supone simplemente un cambio de bus; el resto del chipset permaneció igual, de la misma manera que se supone que sucede con la sealevel). Otra posibilidad es unar como patrón el driver de AMD PCNet (lance.c) ya que soporta tanto ISA como PCI.
  2. Ver las especificaciones de sealevel para dicha tarjeta
  3. Ver las especificaciones de la tarjeta original (cualquiera de las soportadas por el driver scc)
  4. Hacer un nuevo driver de linux o modificar el scc existente para que funcione con la tarjeta PCI (intentando primero lo de modificar el existente...).

Información base:
Tarjeta de sealevelsealevel 5103
Press release tarjetasealevel ACB-232.LPCI
Documentation tarjeta5103.pdf
Documentación driver Linuxhttp://www.qsl.net/dl1bke/linux/scc.en.html

Diferencias entre la tarjeta PCI y la ISA
CaracterísticaPCIISAComentarios
Oscillator7.37280 Mhz4.9152 MhzLa PCI va a 1.5x la ISA




Attachs


5103.pdf
scc.c+
scc pci.c+