* 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;
#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)
{
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)
{