En estos ultimos dos dias laborales ( viernes/lunes) tuve que realizar un driver para una tarjeta de entrada y salida digital: la OMG-PCI-DIO24 .

A pesar de que existe un modulo de kernel para esta tarjeta, no cumple con las especificaciones requeridas. Unicamente genera un conjunt de archivos en el /proc que leen/escriben directamente en los registros de la tarjeta. Esto podria ser "suficiente" si no se tratara de una tarea verdaderamente critica.

Es decir, necesitaba habilitar la interrupcion ( segun el manual de Usuario de la tarjeta, pin 47 ). Esto podria parecer sencillo/trivial. Pero resulto un poquitin mas engorroso de lo que pense.

Basicamente, el codigo existente unicamente sirvio para una cosa: Saber en que registro base ( BAR's ) se encuentra la direccion local asignada por el fabricanete para el inicio de la region de entrada y salida. Ya que en ningun manual se encuentra este dato.

Para entender un poco mejor el funcionamente del Bus PCI pueden leer : The PCI Interface del Linux Device Drivers, 2nd Edition By Alessandro Rubini & Jonathan Corbet El cual funciono perfecto para lo que estba tratando de entender. Tambien revise el buen: The Linux Kernel Development By Robert Love y por su puesto las hojas requeridas por Wikipedia, junto con los manuales de usuario presentados por Omega.

El codigo estoy depurandolo y agregando algunos #defines , para que quede lindo el modulo, mandarlo a la lista.. y pues esperar algun "feedback", mientras me quedan un par de comentarios:

En la Documentacion de Linux ( directo en el tarball ) , se encuentra el archivo pci.txt, El cual trata de dar una muy buena explicacion de como usar los recursos provistos por Linux. Sin embargo es un tanto ambiguo - o el par de horas que trabaje en esto no fueron suficientes -.

En cuanto al manejo de interrupcion, ya sea con pci_register_driver(), o bien con pci_get_device(), esta gobernado por Linux APCI. Lo cual en teoria deberia ser majestuoso, pero causa algunos conflictos al tratar de manejarlo. ( me gustaria en verdad aprender a hacerlo ) . Basicamente, como se vera en el codigo, obligue a ulizar el IRQ asignado fisicamente por la maquina, leyendo la linea de interrupcion asignada por BIOS pci_read_config_byte ( dev, PCI_INTERRUPT_LINE, &local_irq), y haciendo de este el irq pedido,

ret_status = request_irq (      local_irq,
                                         FTio_irq_handler,
                                         SA_INTERRUPT | SA_SHIRQ,
                                         DRV_NAME,
                                         &device  );
 

Las Interrucpiones compartidas, son un poco dolorosas y se necesita un control externo ( logica ) que pueda discernir entre las petciones por interrupcion. Esto tambien quiero depurarlo. Ya que a ciencia cierta, solo confio en la documentacion. ( falta por leer pci.c tal vez ) .

De ahi en fuera. Solo resta seguir aprendiendo en como manejar limpiamente estas entradas. En breve posteo el codigo. Algunos detalles tecnicos de como genrar el modulo ( es decir toda la platica de PCI ) , estara tambien en esta semana en el sitio de bitacora de LIDSOL.

Saludos!

rommel | Software Libre, Personal, Profesional | 26 August, 10:33pm
Trackback URI: http://rommel.cuevano.org/html/index.php/trackback/25
zdjpiqfh: zdjpiqfh / 1 September, 5:14pm
zdjpiqfh
cheap levitra: cheap levitra / 3 September, 6:32pm
cheap levitra
zyloprim: zyloprim / 3 September, 9:09pm
zyloprim
cheap hydrocodone: cheap hydrocodone / 3 September, 10:18pm
cheap hydrocodone
order hydrocodone: order hydrocodone / 4 September, 12:59am
order hydrocodone
ionamin: ionamin / 4 September, 2:06am
ionamin
cheap vicodin: cheap vicodin / 4 September, 3:15am
cheap vicodin
zoloft online: zoloft online / 4 September, 4:45am
zoloft online
reductil: reductil / 4 September, 8:09am
reductil
cheap viagra: cheap viagra / 4 September, 10:23am
cheap viagra
lisinopril: lisinopril / 4 September, 11:35am
lisinopril
buy levitra online: buy levitra online / 4 September, 12:36pm
buy levitra online
advil: advil / 4 September, 1:44pm
advil
purchase vicodin: purchase vicodin / 4 September, 3:01pm
purchase vicodin
lasix: lasix / 4 September, 4:08pm
lasix
order soma: order soma / 4 September, 5:55pm
order soma
glucophage: glucophage / 4 September, 7:11pm
glucophage
cheap fioricet: cheap fioricet / 4 September, 9:13pm
cheap fioricet
proscar: proscar / 4 September, 10:24pm
proscar
cheap soma: cheap soma / 4 September, 11:43pm
cheap soma
paroxetine: paroxetine / 5 September, 12:54am
paroxetine
sonata: sonata / 5 September, 2:13am
sonata
cheap xenical: cheap xenical / 5 September, 3:32am
cheap xenical
buy fioricet: buy fioricet / 5 September, 5:42am
buy fioricet
fluoxetine: fluoxetine / 5 September, 7:05am
fluoxetine
advil: advil / 5 September, 8:16am
advil
order viagra: order viagra / 5 September, 8:16am
order viagra
generic plavix: generic plavix / 5 September, 10:33am
generic plavix
alendronate: alendronate / 5 September, 10:34am
alendronate
metformin: metformin / 5 September, 2:07pm
metformin
levaquin: levaquin / 5 September, 3:35pm
levaquin
sumatriptan: sumatriptan / 5 September, 5:48pm
sumatriptan
naprosyn: naprosyn / 5 September, 6:52pm
naprosyn
imovane: imovane / 5 September, 8:15pm
imovane
buy vicodin online: buy vicodin online / 5 September, 9:18pm
buy vicodin online
allopurinol: allopurinol / 5 September, 10:31pm
allopurinol
singulair: singulair / 5 September, 11:45pm
singulair
effexor: effexor / 6 September, 1:04am
effexor
premarin: premarin / 6 September, 3:35am
premarin
buy hoodia: buy hoodia / 6 September, 3:35am
buy hoodia
nasacort: nasacort / 6 September, 5:00am
nasacort
cheap adipex: cheap adipex / 6 September, 6:04am
cheap adipex
buy alprazolam: buy alprazolam / 6 September, 7:23am
buy alprazolam
prevacid: prevacid / 6 September, 8:24am
prevacid
diazepam online: diazepam online / 6 September, 8:24am
diazepam online
amoxicillin: amoxicillin / 6 September, 9:44am
amoxicillin
allopurinol: allopurinol / 6 September, 10:49am
allopurinol
prednisone: prednisone / 6 September, 12:04pm
prednisone
amoxil: amoxil / 6 September, 1:15pm
amoxil
escitalopram: escitalopram / 6 September, 1:16pm
escitalopram
zyloprim: zyloprim / 6 September, 6:50pm
zyloprim
buy carisoprodol online: buy carisoprodol online / 6 September, 9:00pm
buy carisoprodol online
venlafaxine: venlafaxine / 6 September, 11:19pm
venlafaxine
prozac online: prozac online / 6 September, 11:19pm
prozac online
lisinopril: lisinopril / 7 September, 5:04am
lisinopril
levaquin: levaquin / 7 September, 8:30am
levaquin
ativan: ativan / 7 September, 9:58am
ativan
buy phentermine: buy phentermine / 7 September, 10:59am
buy phentermine
partypoker bonus code jpxi: partypoker bonus code / 13 November, 10:51am
partypoker bonus code
titan poker bonus code rmow: titan poker bonus code / 13 November, 10:58am
titan poker bonus code
Download Titan poker jopa: Download Titan poker / 13 November, 11:05am
Download Titan poker
Titanpoker zdqy: Titanpoker / 13 November, 11:12am
Titanpoker
Titan poker vfaj: Titan poker / 13 November, 11:19am
Titan poker
EverestPoker snhh: EverestPoker / 13 November, 11:27am
EverestPoker
debt settlement usa otho: debt settlement usa / 13 November, 11:34am
debt settlement usa
Download Titan poker jmwa: Download Titan poker / 13 November, 11:41am
Download Titan poker
debt settlement usa wtbv: debt settlement usa / 13 November, 11:49am
debt settlement usa
titan poker bonus code cotz: titan poker bonus code / 13 November, 11:55am
titan poker bonus code

Leave a Comment









Comment XML feeds: RSS | Atom