Kernel - Slight reworks to timer code
[tpg/acess2.git] / Modules / Input / PS2KbMouse / pl050.c
index bd4f196..839c0bd 100644 (file)
@@ -4,16 +4,18 @@
  *
  * PL050 (or comaptible) Driver
  */
+#define DEBUG  1
+
 #include <acess.h>
 #include "common.h"
 
-
+// === CONSTANTS ===
 #define PL050_TXBUSY   0x20
 
 // === PROTOTYPES ===
 void   PL050_Init(Uint32 KeyboardBase, Uint8 KeyboardIRQ, Uint32 MouseBase, Uint8 MouseIRQ);
-void   PL050_KeyboardHandler(int IRQ);
-void   PL050_MouseHandler(int IRQ);
+void   PL050_KeyboardHandler(int IRQ, void *Ptr);
+void   PL050_MouseHandler(int IRQ, void *Ptr);
 void   PL050_EnableMouse(void);
 static inline void     PL050_WriteMouseData(Uint8 data);
 static inline void     PL050_WriteKeyboardData(Uint8 data);
@@ -28,26 +30,32 @@ Uint32      *gpPL050_MouseBase;
 void PL050_Init(Uint32 KeyboardBase, Uint8 KeyboardIRQ, Uint32 MouseBase, Uint8 MouseIRQ)
 {
        if( KeyboardBase ) {
-               gpPL050_KeyboardBase = MM_MapHW(KeyboardBase, 0x1000);
-               IRQ_AddHandler(KeyboardIRQ, PL050_KeyboardHandler);
+               LOG("KeyboardBase = 0x%x", KeyboardBase);
+               gpPL050_KeyboardBase = (void*)MM_MapHWPages(KeyboardBase, 1);
+               LOG("gpPL050_KeyboardBase = %p", gpPL050_KeyboardBase);
+               IRQ_AddHandler(KeyboardIRQ, PL050_KeyboardHandler, NULL);
+
+               gpPL050_KeyboardBase[0] = 0x10;
        }
        if( MouseBase ) {
-               gpPL050_MouseBase = MM_MapHW(MouseBase, 0x1000);
-               IRQ_AddHandler(MouseIRQ, PL050_MouseHandler);
+               gpPL050_MouseBase = (void*)MM_MapHWPages(MouseBase, 1);
+               IRQ_AddHandler(MouseIRQ, PL050_MouseHandler, NULL);
+
+               gpPL050_MouseBase[0] = 0x10;
        }
 }
 
-void PL050_KeyboardHandler(int IRQ)
+void PL050_KeyboardHandler(int IRQ, void *Ptr)
 {
        Uint8   scancode;
 
-       scancode = PL050_ReadKeyboardData(0x60);
+       scancode = PL050_ReadKeyboardData();
        KB_HandleScancode( scancode );
 }
 
-void PL050_MouseHandler(int IRQ)
+void PL050_MouseHandler(int IRQ, void *Ptr)
 {
-       PS2Mouse_HandleInterrupt( PL050_ReadMouseData(0x60) );
+       PS2Mouse_HandleInterrupt( PL050_ReadMouseData() );
 }
 
 void PL050_SetLEDs(Uint8 leds)
@@ -58,41 +66,64 @@ void PL050_SetLEDs(Uint8 leds)
 
 void PL050_EnableMouse(void)
 {
-       Uint8   status;
-       Log_Log("8042", "Enabling Mouse...");
-       
+       Log_Log("PL050", "Enabling Mouse...");
        
        //PL050_WriteMouseData(0xD4);
        //PL050_WriteMouseData(0xF6);   // Set Default Settings
        PL050_WriteMouseData(0xD4);
        PL050_WriteMouseData(0xF4);     // Enable Packets
+       LOG("Done");
 }
 
 static inline void PL050_WriteMouseData(Uint8 Data)
 {
         int    timeout = 10000;
-       while( --timeout && *(Uint32*)(MOUSE_BASE+1) & PL050_TXBUSY );
+
+       if( !gpPL050_MouseBase ) {
+               Log_Error("PL050", "Mouse disabled (gpPL050_MouseBase = NULL)");
+               return ;
+       }
+
+       ENTER("xData", Data);
+
+       while( --timeout && (gpPL050_MouseBase[1] & PL050_TXBUSY) );
        if(timeout)
-               *(Uint32*)(MOUSE_BASE+2) = Data;
+               gpPL050_MouseBase[2] = Data;
        else
                Log_Error("PL050", "Write to mouse timed out");
+       LEAVE('-');
 }
 
 static inline Uint8 PL050_ReadMouseData(void)
 {
-       return *(Uint32*)(MOUSE_BASE+2);
+       if( !gpPL050_MouseBase ) {
+               Log_Error("PL050", "Mouse disabled (gpPL050_MouseBase = NULL)");
+               return 0;
+       }
+       return gpPL050_MouseBase[2];
 }
-static inline void PL050_WriteKeyboardData(Uint8 data)
+static inline void PL050_WriteKeyboardData(Uint8 Data)
 {
         int    timeout = 10000;
-       while( --timeout && *(Uint32*)(KEYBOARD_BASE+1) & PL050_TXBUSY );
+
+       if( !gpPL050_KeyboardBase ) {
+               Log_Error("PL050", "Keyboard disabled (gpPL050_KeyboardBase = NULL)");
+               return ;
+       }
+
+       while( --timeout && gpPL050_KeyboardBase[1] & PL050_TXBUSY );
        if(timeout)
-               *(Uint32*)(KEYBOARD_BASE+2) = Data;
+               gpPL050_KeyboardBase[2] = Data;
        else
                Log_Error("PL050", "Write to keyboard timed out");
 }
 static inline Uint8 PL050_ReadKeyboardData(void)
 {
-       return *(Uint32*)(MOUSE_BASE+2);
+       if( !gpPL050_KeyboardBase ) {
+               Log_Error("PL050", "Keyboard disabled (gpPL050_KeyboardBase = NULL)");
+               return 0;
+       }
+
+       return gpPL050_KeyboardBase[2];
 }
 

UCC git Repository :: git.ucc.asn.au