Fixing up doxygen comments
[tpg/acess2.git] / Kernel / drv / kb.c
index aa807b5..923a58f 100644 (file)
 
 // === CONSTANTS ===
 #define        KB_BUFFER_SIZE  1024
+#define        USE_KERNEL_MAGIC        1
 
 // === IMPORTS ===
-void   Threads_Dump();
+void   Threads_Dump(void);
+void   Heap_Stats(void);
 
 // === PROTOTYPES ===
  int   KB_Install(char **Arguments);
-void   KB_IRQHandler();
+void   KB_IRQHandler(int IRQNum);
 void   KB_AddBuffer(char ch);
 Uint64 KB_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Dest);
-void   KB_UpdateLEDs();
+void   KB_UpdateLEDs(void);
  int   KB_IOCtl(tVFS_Node *Node, int Id, void *Data);
 
 // === GLOBALS ===
@@ -52,36 +54,45 @@ Uint8       gbaKB_States[3][256];
 
 // === CODE ===
 /**
- * \fn int KB_Install(char **Arguments)
+ * \brief Install the keyboard driver
  */
 int KB_Install(char **Arguments)
 {
+       Uint8   temp;
+       
+       // Attempt to get around a strange bug in Bochs/Qemu by toggling
+       // the controller on and off
+       temp = inb(0x61);
+       outb(0x61, temp | 0x80);
+       outb(0x61, temp & 0x7F);
+       inb(0x60);      // Clear keyboard buffer
+       
        IRQ_AddHandler(1, KB_IRQHandler);
        DevFS_AddDevice( &gKB_DevInfo );
        //Log("KB_Install: Installed");
-       return 1;
+       return MODULE_ERR_OK;
 }
 
 /**
- * \fn void KB_IRQHandler()
  * \brief Called on a keyboard IRQ
+ * \param IRQNum       IRQ number (unused)
  */
-void KB_IRQHandler()
+void KB_IRQHandler(int IRQNum)
 {
        Uint8   scancode;
        Uint32  ch;
        // int  keyNum;
 
-       //if( inportb(0x64) & 0x20 )    return;
+       // Check port 0x64 to tell if this is from the aux port
+       //if( inb(0x64) & 0x20 )        return;
 
        scancode = inb(0x60); // Read from the keyboard's data buffer
-
-       //Log("KB_IRQHandler: scancode = 0x%02x", scancode);
+       //Log_Debug("Keyboard", "scancode = %02x", scancode);
 
        // Ignore ACKs
        if(scancode == 0xFA) {
-               // Oh man! This is anachic (I'm leaving it here to represent the
-               // mess that Acess once was)
+               // Oh man! This is anarchic (I'm leaving it here to represent
+               // the mess that Acess once was)
                //kb_lastChar = KB_ACK;
                return;
        }
@@ -116,7 +127,7 @@ void KB_IRQHandler()
        //keyNum = giKB_KeyLayer * 256 + scancode;
        // Check for unknown key
        if(!ch && !gbKB_KeyUp)
-               Warning("UNK %i %x", giKB_KeyLayer, scancode);
+               Log_Warning("Keyboard", "UNK %i %x", giKB_KeyLayer, scancode);
 
        // Key Up?
        if (gbKB_KeyUp)
@@ -161,21 +172,33 @@ void KB_IRQHandler()
 
        // --- Check for Kernel Magic Combos
        #if USE_KERNEL_MAGIC
-       if(ch == KEY_LCTRL)     gbKB_MagicState |= 1;
-       if(ch == KEY_LALT)      gbKB_MagicState |= 2;
+       if(ch == KEY_LCTRL) {
+               gbKB_MagicState |= 1;
+               //Log_Log("Keyboard", "Kernel Magic LCTRL Down\n");
+       }
+       if(ch == KEY_LALT) {
+               gbKB_MagicState |= 2;
+               //Log_Log("Keyboard", "Kernel Magic LALT Down\n");
+       }
        if(gbKB_MagicState == 3)
        {
                switch(ch)
                {
-               case 'd':       __asm__ __volatile__ ("xchg %bx, %bx"); break;
-               case 'p':       Threads_Dump(); break;
+               // Kernel Panic (Page Fault)
+               case 'q':       *((int*)1) = 0; return;
+               // Bochs Magic Breakpoint
+               case 'd':       __asm__ __volatile__ ("xchg %bx, %bx"); return;
+               // Thread List Dump
+               case 'p':       Threads_Dump(); return;
+               // Heap Statistics
+               case 'h':       Heap_Stats();   return;
                }
        }
        #endif
 
        // Is shift pressed
-       // - Darn ugly hacks !(!x) means (bool)x
-       if( !(!gbKB_ShiftState) ^ gbKB_CapsState)
+       // - Darn ugly hacks !!x means (bool)x
+       if( !!gbKB_ShiftState ^ gbKB_CapsState)
        {
                switch(ch)
                {
@@ -212,10 +235,10 @@ void KB_IRQHandler()
 }
 
 /**
- * \fn void KB_UpdateLEDs()
+ * \fn void KB_UpdateLEDs(void)
  * \brief Updates the status of the keyboard LEDs
  */
-void KB_UpdateLEDs()
+void KB_UpdateLEDs(void)
 {
        Uint8   leds;
 

UCC git Repository :: git.ucc.asn.au