[XBOX] Move SuperIO definitions and helpers into header file

CORE-16216
This commit is contained in:
Stanislav Motylkov 2020-08-26 02:06:19 +03:00
parent 2edcb58e65
commit f420f2e5df
No known key found for this signature in database
GPG key ID: AFE513258CBA9E92
3 changed files with 156 additions and 32 deletions

View file

@ -17,10 +17,13 @@
*/
#include <freeldr.h>
#include <drivers/xbox/superio.h>
#include <debug.h>
DBG_DEFAULT_CHANNEL(HWDETECT);
#define MAX_XBOX_COM_PORTS 2
extern PVOID FrameBuffer;
extern ULONG FrameBufferSize;
@ -51,30 +54,19 @@ XboxGetSerialPort(ULONG Index, PULONG Irq)
static const UCHAR Device[MAX_XBOX_COM_PORTS] = {LPC_DEVICE_SERIAL_PORT_1, LPC_DEVICE_SERIAL_PORT_2};
ULONG ComBase = 0;
// Enter Configuration
WRITE_PORT_UCHAR((PUCHAR)LPC_IO_BASE, LPC_ENTER_CONFIG_KEY);
LpcEnterConfig();
// Select serial device
WRITE_PORT_UCHAR((PUCHAR)LPC_IO_BASE, LPC_CONFIG_DEVICE_NUMBER);
WRITE_PORT_UCHAR((PUCHAR)(LPC_IO_BASE + 1), Device[Index]);
LpcWriteRegister(LPC_CONFIG_DEVICE_NUMBER, Device[Index]);
// Check if selected device is active
WRITE_PORT_UCHAR((PUCHAR)LPC_IO_BASE, LPC_CONFIG_DEVICE_ACTIVATE);
if (READ_PORT_UCHAR((PUCHAR)(LPC_IO_BASE + 1)) == 1)
if (LpcReadRegister(LPC_CONFIG_DEVICE_ACTIVATE) == 1)
{
// Read LSB
WRITE_PORT_UCHAR((PUCHAR)LPC_IO_BASE, LPC_CONFIG_DEVICE_BASE_ADDRESS_LOW);
ComBase = READ_PORT_UCHAR((PUCHAR)(LPC_IO_BASE + 1));
// Read MSB
WRITE_PORT_UCHAR((PUCHAR)LPC_IO_BASE, LPC_CONFIG_DEVICE_BASE_ADDRESS_HIGH);
ComBase |= (READ_PORT_UCHAR((PUCHAR)(LPC_IO_BASE + 1)) << 8);
// Read IRQ
WRITE_PORT_UCHAR((PUCHAR)LPC_IO_BASE, LPC_CONFIG_DEVICE_INTERRUPT);
*Irq = READ_PORT_UCHAR((PUCHAR)(LPC_IO_BASE + 1));
ComBase = LpcGetIoBase();
*Irq = LpcGetIrqPrimary();
}
// Exit Configuration
WRITE_PORT_UCHAR((PUCHAR)LPC_IO_BASE, LPC_EXIT_CONFIG_KEY);
LpcExitConfig();
return ComBase;
}

View file

@ -22,21 +22,6 @@
#include "mm.h"
#endif
#define MAX_XBOX_COM_PORTS 2
#define LPC_IO_BASE 0x2E
#define LPC_ENTER_CONFIG_KEY 0x55
#define LPC_EXIT_CONFIG_KEY 0xAA
#define LPC_DEVICE_SERIAL_PORT_1 0x4
#define LPC_DEVICE_SERIAL_PORT_2 0x5
#define LPC_CONFIG_DEVICE_NUMBER 0x07
#define LPC_CONFIG_DEVICE_ACTIVATE 0x30
#define LPC_CONFIG_DEVICE_BASE_ADDRESS_HIGH 0x60
#define LPC_CONFIG_DEVICE_BASE_ADDRESS_LOW 0x61
#define LPC_CONFIG_DEVICE_INTERRUPT 0x70
#define NV2A_CONTROL_OFFSET 0xFD000000
#define NV2A_FB_OFFSET (0x100000 + NV2A_CONTROL_OFFSET)
#define NV2A_FB_CFG0 (0x200 + NV2A_FB_OFFSET)