3 * - By thePowersGang (John Hodge)
5 * PL050 (or comaptible) Driver
13 #define PL050_TXBUSY 0x20
16 void PL050_Init(Uint32 KeyboardBase, Uint8 KeyboardIRQ, Uint32 MouseBase, Uint8 MouseIRQ);
17 void PL050_KeyboardHandler(int IRQ, void *Ptr);
18 void PL050_MouseHandler(int IRQ, void *Ptr);
19 void PL050_EnableMouse(void);
20 static inline void PL050_WriteMouseData(Uint8 data);
21 static inline void PL050_WriteKeyboardData(Uint8 data);
22 static inline Uint8 PL050_ReadMouseData(void);
23 static inline Uint8 PL050_ReadKeyboardData(void);
26 Uint32 *gpPL050_KeyboardBase;
27 Uint32 *gpPL050_MouseBase;
30 void PL050_Init(Uint32 KeyboardBase, Uint8 KeyboardIRQ, Uint32 MouseBase, Uint8 MouseIRQ)
33 LOG("KeyboardBase = 0x%x", KeyboardBase);
34 gpPL050_KeyboardBase = (void*)MM_MapHWPages(KeyboardBase, 1);
35 LOG("gpPL050_KeyboardBase = %p", gpPL050_KeyboardBase);
36 IRQ_AddHandler(KeyboardIRQ, PL050_KeyboardHandler, NULL);
38 gpPL050_KeyboardBase[0] = 0x10;
41 gpPL050_MouseBase = (void*)MM_MapHWPages(MouseBase, 1);
42 IRQ_AddHandler(MouseIRQ, PL050_MouseHandler, NULL);
44 gpPL050_MouseBase[0] = 0x10;
48 void PL050_KeyboardHandler(int IRQ, void *Ptr)
52 scancode = PL050_ReadKeyboardData();
53 KB_HandleScancode( scancode );
56 void PL050_MouseHandler(int IRQ, void *Ptr)
58 PS2Mouse_HandleInterrupt( PL050_ReadMouseData() );
61 void PL050_SetLEDs(Uint8 leds)
63 PL050_WriteKeyboardData(0xED);
64 PL050_WriteKeyboardData(leds);
67 void PL050_EnableMouse(void)
69 Log_Log("PL050", "Enabling Mouse...");
71 //PL050_WriteMouseData(0xD4);
72 //PL050_WriteMouseData(0xF6); // Set Default Settings
73 PL050_WriteMouseData(0xD4);
74 PL050_WriteMouseData(0xF4); // Enable Packets
78 static inline void PL050_WriteMouseData(Uint8 Data)
82 if( !gpPL050_MouseBase ) {
83 Log_Error("PL050", "Mouse disabled (gpPL050_MouseBase = NULL)");
87 while( --timeout && gpPL050_MouseBase[1] & PL050_TXBUSY );
89 gpPL050_MouseBase[2] = Data;
91 Log_Error("PL050", "Write to mouse timed out");
94 static inline Uint8 PL050_ReadMouseData(void)
96 if( !gpPL050_MouseBase ) {
97 Log_Error("PL050", "Mouse disabled (gpPL050_MouseBase = NULL)");
100 return gpPL050_MouseBase[2];
102 static inline void PL050_WriteKeyboardData(Uint8 Data)
106 if( !gpPL050_KeyboardBase ) {
107 Log_Error("PL050", "Keyboard disabled (gpPL050_KeyboardBase = NULL)");
111 while( --timeout && gpPL050_KeyboardBase[1] & PL050_TXBUSY );
113 gpPL050_KeyboardBase[2] = Data;
115 Log_Error("PL050", "Write to keyboard timed out");
117 static inline Uint8 PL050_ReadKeyboardData(void)
119 if( !gpPL050_KeyboardBase ) {
120 Log_Error("PL050", "Keyboard disabled (gpPL050_KeyboardBase = NULL)");
124 return gpPL050_KeyboardBase[2];