Buenas.
La verdad es que esto es un S.O.S y no se si alguien con el suficiente nivel o conocimiento lo leerá, pero no logro hacer funcionar la interrupción EHCI que supuestamente es la 4 y no entiendo a que se debe.
Antes de nada, decir que he modificado la syscalls os_software_IRQ(4) y que la mascara de interrupciones se puede ver claramente la interrupción 4 como activa, y tengo registrado el evento para dicha interrupción y tambien activo el correspondiente registro de interrupción EHCI para que actúe por ejemplo, a los cambios en el puerto (enchufar/desenchufar), pero nada, sigue muerto.
Sin embargo, si conecto la interrupción 5 (OH0) responde al cambiar el dispositivo perfectamente (evidentemente, el driver deja de responder porque le desconecto el evento de interrupción.
Viéndome tan desesperado, he modificado la syscalls os_software_IRQ(9) (hay una tabla de saltos para cada interrupcion) que es una interrupción que está fuera de uso y por tanto, podía emplearla para el perverso plan de entrar en modo Dios (modo sistema) y poder tocar ciertas áreas de memoria y registros prohibidos
Así por ejemplo, podía llamar a esa función pasándole un dato en una variable y que hiciera lucir el LED de la bandeja, incluso alternando (cosa que desde modo usuario, no es posible porque peta al tocarlo)
Gracias a esto he podido comprobar que por ejemplo, no es el evento ligado a la interrupción 4 el que está capado, puesto que con una sencilla operación (un simple "poke"
) podía desviar el curso de la interrupción 5 para que activase el evento de la 4
y así he comprobado que al contrario de lo que ocurre con os_software_IRQ, aquí no se comprueba el proceso o lo que sea que se compruebe ahí que pueda dar problemas.
Puestos a sospechar he estado probando interrupciones que en la información de Wiibrew se marcan como desconocidas (¿podría ser que EHCI responda a otra interrupción?) y fruto de mi desesperación, he llegado incluso a suplantar el vector de interrupción (¿ a que mola el modo Dios?) para poder personalizarlo y tratar las interrupciones de forma diferente.
Así por ejemplo, la interrupción 16, una de las marcadas como desconocidas, que está fuera de uso hasta el punto de que o no tiene rutina de tratamiento o lleva a muerte segura, la he podido tratar desde una función que se encargaba de actualizar un contador (para medir la velocidad de refresco, cosa que puedo ver en pantalla gracias a las facilidades de
mload) y de encender/apagar el led de la bandeja (trabaja a unos 50 Hz o así y no me extrañaría que fuera VSYNC desde el lado del Starlet, quien sabe)
El caso es que no se que carajos es lo que falla, pero no consigo activar ni un solo pulso de interrupción EHCI (¿alguien conoce algún otro registro que controle interrupciones desde el Starlet? Porque me vendría de perlas) y es una pena, pero tanto trabajo para tratar de utilizar la IRQ 4 y no se que coño me está parando
En fin, dejo esto dicho por si alguien conoce algo y me lo quiere contar
(y por que estoy frustrado
)
Saludos