X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FInput%2FPS2KbMouse%2Fpl050.c;h=8d65e3a35fae17cd4ebea1c1f3e2453cb3ab4188;hb=5f104551236d3254fed7cf36293f1fa4b4bd737a;hp=bd4f19687aea324939e37c97257eefd13e6d7600;hpb=60b2fc86f5aed670e5a18ca7ae0c7f510659050a;p=tpg%2Facess2.git 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]; }