Move xbox's i2c support to a separate file, and add support of xbox's LEDs switching...
[reactos.git] / reactos / boot / freeldr / freeldr / arch / i386 / xboxvideo.c
index fdcb67a..bbcf8fe 100644 (file)
  * by the Xbox Linux group: http://www.xbox-linux.org
  */
 
-#include "freeldr.h"
-#include "debug.h"
-#include "rtl.h"
-#include "machine.h"
-#include "machxbox.h"
-#include "portio.h"
-
-#define I2C_IO_BASE 0xc000
+#include <freeldr.h>
 
 static PVOID FrameBuffer;
 static ULONG ScreenWidth;
@@ -44,6 +37,8 @@ static ULONG Delta;
 
 #define MAKE_COLOR(Red, Green, Blue) (0xff000000 | (((Red) & 0xff) << 16) | (((Green) & 0xff) << 8) | ((Blue) & 0xff))
 
+BOOL I2CTransmitByteGetReturn(UCHAR bPicAddressI2cFormat, UCHAR bDataToWrite, ULONG *Return);
+
 static VOID
 XboxVideoOutputChar(UCHAR Char, unsigned X, unsigned Y, ULONG FgColor, ULONG BgColor)
 {
@@ -124,91 +119,6 @@ XboxVideoPutChar(int Ch, UCHAR Attr, unsigned X, unsigned Y)
   XboxVideoOutputChar(Ch, X, Y, FgColor, BgColor);
 }
 
-static BOOL
-ReadfromSMBus(UCHAR Address, UCHAR bRegister, UCHAR Size, ULONG *Data_to_smbus)
-{
-  int nRetriesToLive=50;
-
-  while (0 != (READ_PORT_USHORT((PUSHORT) (I2C_IO_BASE + 0)) & 0x0800))
-    {
-      ;  /* Franz's spin while bus busy with any master traffic */
-    }
-
-  while (0 != nRetriesToLive--)
-    {
-      UCHAR b;
-      int temp;
-
-      WRITE_PORT_UCHAR((PUCHAR) (I2C_IO_BASE + 4), (Address << 1) | 1);
-      WRITE_PORT_UCHAR((PUCHAR) (I2C_IO_BASE + 8), bRegister);
-
-      temp = READ_PORT_USHORT((USHORT *) (I2C_IO_BASE + 0));
-      WRITE_PORT_USHORT((PUSHORT) (I2C_IO_BASE + 0), temp);  /* clear down all preexisting errors */
-
-      switch (Size)
-        {
-          case 4:
-            WRITE_PORT_UCHAR((PUCHAR) (I2C_IO_BASE + 2), 0x0d);      /* DWORD modus ? */
-            break;
-          case 2:
-            WRITE_PORT_UCHAR((PUCHAR) (I2C_IO_BASE + 2), 0x0b);      /* WORD modus */
-            break;
-          default:
-            WRITE_PORT_UCHAR((PUCHAR) (I2C_IO_BASE + 2), 0x0a);      // BYTE
-            break;
-        }
-
-      b = 0;
-
-      while (0 == (b & 0x36))
-        {
-          b = READ_PORT_UCHAR((PUCHAR) (I2C_IO_BASE + 0));
-        }
-
-      if (0 != (b & 0x24))
-        {
-          /* printf("I2CTransmitByteGetReturn error %x\n", b); */
-        }
-
-      if(0 == (b & 0x10))
-        {
-          /* printf("I2CTransmitByteGetReturn no complete, retry\n"); */
-        }
-      else
-        {
-          switch (Size)
-            {
-              case 4:
-                READ_PORT_UCHAR((PUCHAR) (I2C_IO_BASE + 6));
-                READ_PORT_UCHAR((PUCHAR) (I2C_IO_BASE + 9));
-                READ_PORT_UCHAR((PUCHAR) (I2C_IO_BASE + 9));
-                READ_PORT_UCHAR((PUCHAR) (I2C_IO_BASE + 9));
-                READ_PORT_UCHAR((PUCHAR) (I2C_IO_BASE + 9));
-                break;
-              case 2:
-                *Data_to_smbus = READ_PORT_USHORT((USHORT *) (I2C_IO_BASE + 6));
-                break;
-              default:
-                *Data_to_smbus = READ_PORT_UCHAR((PUCHAR) (I2C_IO_BASE + 6));
-                break;
-            }
-
-
-          return TRUE;
-        }
-    }
-
-  return FALSE;
-}
-
-
-static BOOL
-I2CTransmitByteGetReturn(UCHAR bPicAddressI2cFormat, UCHAR bDataToWrite, ULONG *Return)
-{
-  return ReadfromSMBus(bPicAddressI2cFormat, bDataToWrite, 1, Return);
-}
-
-
 VOID
 XboxVideoInit(VOID)
 {