X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FInput%2FPS2KbMouse%2Fpl050.c;h=5a0a32a66748327dc5a194da5862fdf95882593f;hb=51d1da69cd1c30ff20a2ff1d958fe0cd149c9cbf;hp=bd4f19687aea324939e37c97257eefd13e6d7600;hpb=209b173fbcd7bcadd5b3546a2f773312d668c5a1;p=tpg%2Facess2.git diff --git a/Modules/Input/PS2KbMouse/pl050.c b/Modules/Input/PS2KbMouse/pl050.c index bd4f1968..5a0a32a6 100644 --- a/Modules/Input/PS2KbMouse/pl050.c +++ b/Modules/Input/PS2KbMouse/pl050.c @@ -4,16 +4,18 @@ * * PL050 (or comaptible) Driver */ +#define DEBUG 1 + #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 +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]; }