From 5f104551236d3254fed7cf36293f1fa4b4bd737a Mon Sep 17 00:00:00 2001 From: John Hodge Date: Fri, 7 Oct 2011 16:42:45 +0800 Subject: [PATCH] Modules/armv7 - Fixing PL050 support --- Modules/Input/PS2KbMouse/Makefile | 2 +- Modules/Input/PS2KbMouse/main.c | 4 +- Modules/Input/PS2KbMouse/pl050.c | 61 +++++++++++++++++++---------- Modules/Input/PS2KbMouse/ps2mouse.c | 2 +- 4 files changed, 44 insertions(+), 25 deletions(-) diff --git a/Modules/Input/PS2KbMouse/Makefile b/Modules/Input/PS2KbMouse/Makefile index 2500c02c..306e2b41 100644 --- a/Modules/Input/PS2KbMouse/Makefile +++ b/Modules/Input/PS2KbMouse/Makefile @@ -2,7 +2,7 @@ # OBJ = main.o kb.o ps2mouse.o -OBJ += 8042.o +OBJ += 8042.o pl050.o NAME = PS2KbMouse -include ../Makefile.tpl diff --git a/Modules/Input/PS2KbMouse/main.c b/Modules/Input/PS2KbMouse/main.c index 0015b93d..08dfb003 100644 --- a/Modules/Input/PS2KbMouse/main.c +++ b/Modules/Input/PS2KbMouse/main.c @@ -30,8 +30,8 @@ // === GLOBALS === MODULE_DEFINE(0, 0x0100, Input_PS2KbMouse, PS2_Install, NULL, NULL); // Shuts the makefile up -MODULE_DEFINE(0, 0x0100, PS2Keyboard, KB_Install, NULL, NULL); -MODULE_DEFINE(0, 0x0100, PS2Mouse, PS2Mouse_Install, NULL, NULL); +MODULE_DEFINE(0, 0x0100, PS2Keyboard, KB_Install, NULL, "Input_PS2KbMouse", NULL); +MODULE_DEFINE(0, 0x0100, PS2Mouse, PS2Mouse_Install, NULL, "Input_PS2KbMouse", NULL); // === CODE === int PS2_Install(char **Arguments) diff --git a/Modules/Input/PS2KbMouse/pl050.c b/Modules/Input/PS2KbMouse/pl050.c index bd4f1968..8d65e3a3 100644 --- a/Modules/Input/PS2KbMouse/pl050.c +++ b/Modules/Input/PS2KbMouse/pl050.c @@ -7,13 +7,13 @@ #include #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 +28,26 @@ 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); + gpPL050_KeyboardBase = (void*)MM_MapHWPages(KeyboardBase, 1); + IRQ_AddHandler(KeyboardIRQ, PL050_KeyboardHandler, NULL); } 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); } } -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,9 +58,7 @@ 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 @@ -71,28 +69,49 @@ void PL050_EnableMouse(void) 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 ; + } + + 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"); } 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]; } diff --git a/Modules/Input/PS2KbMouse/ps2mouse.c b/Modules/Input/PS2KbMouse/ps2mouse.c index 15b02e45..abf2a602 100644 --- a/Modules/Input/PS2KbMouse/ps2mouse.c +++ b/Modules/Input/PS2KbMouse/ps2mouse.c @@ -59,7 +59,7 @@ int PS2Mouse_Install(char **Arguments) // Initialise Mouse Controller giMouse_Cycle = 0; // Set Current Cycle position - KBC8042_EnableMouse(); + gpMouse_EnableFcn(); DevFS_AddDevice(&gMouse_DriverStruct); -- 2.20.1