Modules/PS2KbMouse - Adding pl050 support
authorJohn Hodge <[email protected]>
Tue, 4 Oct 2011 03:53:31 +0000 (11:53 +0800)
committerJohn Hodge <[email protected]>
Tue, 4 Oct 2011 03:53:31 +0000 (11:53 +0800)
Modules/Input/PS2KbMouse/common.h
Modules/Input/PS2KbMouse/main.c
Modules/Input/PS2KbMouse/pl050.c
Modules/Input/PS2KbMouse/ps2mouse.c

index f7fa36b..7cbffe9 100644 (file)
@@ -15,7 +15,12 @@ extern int   PS2Mouse_Install(char **Arguments);
 extern void    KBC8042_Init(void);
 extern void    KBC8042_EnableMouse(void);
 
+extern void    PL050_Init(Uint32 KeyboardBase, Uint8 KeyboardIRQ, Uint32 MouseBase, Uint8 MouseIRQ);
+extern void    PL050_EnableMouse(void);
+
 extern void    KB_HandleScancode(Uint8 scancode);
 extern void    PS2Mouse_HandleInterrupt(Uint8 InputByte);
 
+extern void    (*gpMouse_EnableFcn)(void);
+
 #endif
index e3ea35c..7a2b83d 100644 (file)
@@ -8,6 +8,22 @@
 #include "common.h"
 
 // === IMPORTS ===
+// TODO: Allow runtime/compile-time switching
+//       Maybe PCI will have it?
+// Integrator-CP
+#if 0
+#define KEYBOARD_IRQ   3
+#define KEYBOARD_BASE  0x18000000
+#define MOUSE_IRQ      4
+#define MOUSE_BASE     0x19000000
+#endif
+// Realview
+#if 1
+#define KEYBOARD_IRQ   20
+#define KEYBOARD_BASE  0x10006000
+#define MOUSE_IRQ      21
+#define MOUSE_BASE     0x10007000
+#endif
 
 // === PROTOTYPES ===
  int   PS2_Install(char **Arguments);
@@ -20,6 +36,13 @@ MODULE_DEFINE(0, 0x0100, PS2Mouse, PS2Mouse_Install, NULL, NULL);
 // === CODE ===
 int PS2_Install(char **Arguments)
 {
+       #if ARCH_is_x86 || ARCH_is_x86_64
        KBC8042_Init();
+       gpMouse_EnableFcn = KBC8042_EnableMouse;
+       #elif ARCH_is_armv7
+       PL050_Init(KEYBOARD_IRQ, KEYBOARD_IRQ, MOUSE_BASE, MOUSE_IRQ);
+       gpMouse_EnableFcn = PL050_EnableMouse;
+       #endif
+
        return MODULE_ERR_OK;
 }
index f4b3198..bd4f196 100644 (file)
@@ -7,27 +7,11 @@
 #include <acess.h>
 #include "common.h"
 
-// TODO: Allow runtime/compile-time switching
-//       Maybe PCI will have it?
-// Integrator-CP
-#if 0
-#define KEYBOARD_IRQ   3
-#define KEYBOARD_BASE  0x18000000
-#define MOUSE_IRQ      4
-#define MOUSE_BASE     0x19000000
-#endif
-// Realview
-#if 1
-#define KEYBOARD_IRQ   20
-#define KEYBOARD_BASE  0x10006000
-#define MOUSE_IRQ      21
-#define MOUSE_BASE     0x10007000
-#endif
 
 #define PL050_TXBUSY   0x20
 
 // === PROTOTYPES ===
-void   PL050_Init(void);
+void   PL050_Init(Uint32 KeyboardBase, Uint8 KeyboardIRQ, Uint32 MouseBase, Uint8 MouseIRQ);
 void   PL050_KeyboardHandler(int IRQ);
 void   PL050_MouseHandler(int IRQ);
 void   PL050_EnableMouse(void);
@@ -36,11 +20,21 @@ static inline void  PL050_WriteKeyboardData(Uint8 data);
 static inline Uint8    PL050_ReadMouseData(void);
 static inline Uint8    PL050_ReadKeyboardData(void);
 
+// === GLOBALS ===
+Uint32 *gpPL050_KeyboardBase;
+Uint32 *gpPL050_MouseBase;
+
 // === CODE ===
-void PL050_Init(void)
+void PL050_Init(Uint32 KeyboardBase, Uint8 KeyboardIRQ, Uint32 MouseBase, Uint8 MouseIRQ)
 {
-       IRQ_AddHandler(KEYBOARD_IRQ, PL050_KeyboardHandler);
-       IRQ_AddHandler(MOUSE_IRQ, PL050_MouseHandler);  // Set IRQ
+       if( KeyboardBase ) {
+               gpPL050_KeyboardBase = MM_MapHW(KeyboardBase, 0x1000);
+               IRQ_AddHandler(KeyboardIRQ, PL050_KeyboardHandler);
+       }
+       if( MouseBase ) {
+               gpPL050_MouseBase = MM_MapHW(MouseBase, 0x1000);
+               IRQ_AddHandler(MouseIRQ, PL050_MouseHandler);
+       }
 }
 
 void PL050_KeyboardHandler(int IRQ)
index 7c831f7..15b02e4 100644 (file)
@@ -26,6 +26,7 @@ Uint64        PS2Mouse_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer
 int    PS2Mouse_IOCtl(tVFS_Node *Node, int ID, void *Data);\r
 \r
 // == GLOBALS ==\r
+void   (*gpMouse_EnableFcn)(void);\r
 // - Settings\r
  int   giMouse_Sensitivity = 1;\r
  int   giMouse_MaxX = 640, giMouse_MaxY = 480;\r

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