From 209b173fbcd7bcadd5b3546a2f773312d668c5a1 Mon Sep 17 00:00:00 2001
From: John Hodge <tpg@mutabah.net>
Date: Tue, 4 Oct 2011 11:53:31 +0800
Subject: [PATCH] Modules/PS2KbMouse - Adding pl050 support

---
 Modules/Input/PS2KbMouse/common.h   |  5 +++++
 Modules/Input/PS2KbMouse/main.c     | 23 +++++++++++++++++++
 Modules/Input/PS2KbMouse/pl050.c    | 34 ++++++++++++-----------------
 Modules/Input/PS2KbMouse/ps2mouse.c |  1 +
 4 files changed, 43 insertions(+), 20 deletions(-)

diff --git a/Modules/Input/PS2KbMouse/common.h b/Modules/Input/PS2KbMouse/common.h
index f7fa36b6..7cbffe9c 100644
--- a/Modules/Input/PS2KbMouse/common.h
+++ b/Modules/Input/PS2KbMouse/common.h
@@ -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
diff --git a/Modules/Input/PS2KbMouse/main.c b/Modules/Input/PS2KbMouse/main.c
index e3ea35cf..7a2b83d4 100644
--- a/Modules/Input/PS2KbMouse/main.c
+++ b/Modules/Input/PS2KbMouse/main.c
@@ -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;
 }
diff --git a/Modules/Input/PS2KbMouse/pl050.c b/Modules/Input/PS2KbMouse/pl050.c
index f4b31986..bd4f1968 100644
--- a/Modules/Input/PS2KbMouse/pl050.c
+++ b/Modules/Input/PS2KbMouse/pl050.c
@@ -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)
diff --git a/Modules/Input/PS2KbMouse/ps2mouse.c b/Modules/Input/PS2KbMouse/ps2mouse.c
index 7c831f76..15b02e45 100644
--- a/Modules/Input/PS2KbMouse/ps2mouse.c
+++ b/Modules/Input/PS2KbMouse/ps2mouse.c
@@ -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);
 
 // == GLOBALS ==
+void	(*gpMouse_EnableFcn)(void);
 // - Settings
  int	giMouse_Sensitivity = 1;
  int	giMouse_MaxX = 640, giMouse_MaxY = 480;
-- 
GitLab