NVNet : Converted into a PCI device
This commit is contained in:
parent
4d1225e181
commit
1b579e2c4b
|
@ -68,11 +68,14 @@ namespace xboxkrnl
|
|||
#include "EEPROMDevice.h" // For EEPROMDevice
|
||||
#include "LED.h" // For LED::Sequence
|
||||
#include "SMCDevice.h" // For SMCDevice
|
||||
#include "EmuNVNet.h" // For NVNetDevice
|
||||
|
||||
PCIBus* g_PCIBus;
|
||||
SMBus* g_SMBus;
|
||||
EEPROMDevice* g_EEPROM;
|
||||
SMCDevice* g_SMC;
|
||||
NVNetDevice* g_NVNet;
|
||||
|
||||
|
||||
/* prevent name collisions */
|
||||
namespace NtDll
|
||||
|
@ -1038,6 +1041,9 @@ __declspec(noreturn) void CxbxKrnlInit
|
|||
|
||||
g_PCIBus->ConnectDevice(PCI_DEVID(0, PCI_DEVFN(1, 1)), g_SMBus);
|
||||
|
||||
g_NVNet = new NVNetDevice();
|
||||
g_PCIBus->ConnectDevice(PCI_DEVID(0, PCI_DEVFN(4, 0)), g_NVNet);
|
||||
|
||||
// Always initialise NV2A: We may need it for disabled HLE patches too!
|
||||
EmuNV2A_Init();
|
||||
|
||||
|
|
|
@ -507,3 +507,56 @@ void EmuNVNet_Write(xbaddr addr, uint32_t value, int size)
|
|||
|
||||
DbgPrintf("NET : Write%d: %s (0x%.8X) = 0x%.8X\n", size, EmuNVNet_GetRegisterName(addr), addr, value);
|
||||
}
|
||||
|
||||
/* NVNetDevice */
|
||||
|
||||
// PCI Device functions
|
||||
|
||||
void NVNetDevice::Init()
|
||||
{
|
||||
PCIBarRegister r;
|
||||
|
||||
// Register IO bar :
|
||||
r.Raw.type = PCI_BAR_TYPE_IO;
|
||||
r.IO.address = 0xE000;
|
||||
RegisterBAR(0, 8, r.value);
|
||||
|
||||
// Register Memory bar :
|
||||
r.Raw.type = PCI_BAR_TYPE_MEMORY;
|
||||
r.Memory.address = NVNET_ADDR >> 4;
|
||||
RegisterBAR(1, NVNET_SIZE, r.value);
|
||||
|
||||
m_DeviceId = 0x01C3;
|
||||
m_VendorId = PCI_VENDOR_ID_NVIDIA;
|
||||
}
|
||||
|
||||
void NVNetDevice::Reset()
|
||||
{
|
||||
}
|
||||
|
||||
uint32_t NVNetDevice::IORead(int barIndex, uint32_t port, unsigned size)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void NVNetDevice::IOWrite(int BarIndex, uint32_t port, uint32_t value, unsigned size)
|
||||
{
|
||||
}
|
||||
|
||||
uint32_t NVNetDevice::MMIORead(int barIndex, uint32_t addr, unsigned size)
|
||||
{
|
||||
if (barIndex != 1) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return EmuNVNet_Read(addr, size * 8); // For now, forward
|
||||
}
|
||||
|
||||
void NVNetDevice::MMIOWrite(int barIndex, uint32_t addr, uint32_t value, unsigned size)
|
||||
{
|
||||
if (barIndex != 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
EmuNVNet_Write(addr, value, size * 8); // For now, forward
|
||||
}
|
||||
|
|
|
@ -31,13 +31,22 @@
|
|||
// * All rights reserved
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef EMUNVNET_H
|
||||
#define EMUNVNET_H
|
||||
#pragma once
|
||||
|
||||
#include "PCIDevice.h" // For PCIDevice
|
||||
|
||||
#define NVNET_ADDR 0xFEF00000
|
||||
#define NVNET_SIZE 0x00000400
|
||||
|
||||
uint32_t EmuNVNet_Read(xbaddr addr, int size);
|
||||
void EmuNVNet_Write(xbaddr addr, uint32_t value, int size);
|
||||
class NVNetDevice : public PCIDevice {
|
||||
public:
|
||||
// PCI Device functions
|
||||
void Init();
|
||||
void Reset();
|
||||
uint32_t IORead(int barIndex, uint32_t port, unsigned size);
|
||||
void IOWrite(int BarIndex, uint32_t port, uint32_t value, unsigned size);
|
||||
uint32_t MMIORead(int barIndex, uint32_t addr, unsigned size);
|
||||
void MMIOWrite(int barIndex, uint32_t addr, uint32_t value, unsigned size);
|
||||
};
|
||||
|
||||
#endif
|
||||
extern NVNetDevice* g_NVNet;
|
||||
|
|
|
@ -210,8 +210,6 @@ uint32_t EmuX86_Read32Aligned(xbaddr addr)
|
|||
// Access NV2A regardless weither HLE is disabled or not (ignoring bLLE_GPU)
|
||||
value = EmuNV2A_Read(addr - NV2A_ADDR, 32);
|
||||
// Note : EmuNV2A_Read32 does it's own logging
|
||||
} else if (addr >= NVNET_ADDR && addr < NVNET_ADDR + NVNET_SIZE) {
|
||||
value = EmuNVNet_Read(addr - NVNET_ADDR, 32);
|
||||
} else if (addr >= XBOX_FLASH_ROM_BASE) { // 0xFFF00000 - 0xFFFFFFF
|
||||
value = EmuFlash_Read32(addr - XBOX_FLASH_ROM_BASE);
|
||||
} else {
|
||||
|
@ -256,8 +254,6 @@ uint16_t EmuX86_Read16(xbaddr addr)
|
|||
// Access NV2A regardless weither HLE is disabled or not
|
||||
value = EmuNV2A_Read(addr - NV2A_ADDR, 16);
|
||||
// Note : EmuNV2A_Read32 does it's own logging
|
||||
} else if (addr >= NVNET_ADDR && addr < NVNET_ADDR + NVNET_SIZE) {
|
||||
value = EmuNVNet_Read(addr - NVNET_ADDR, 16);
|
||||
} else if (addr >= XBOX_FLASH_ROM_BASE) { // 0xFFF00000 - 0xFFFFFFF
|
||||
value = EmuFlash_Read32(addr - XBOX_FLASH_ROM_BASE);
|
||||
} else {
|
||||
|
@ -289,8 +285,6 @@ uint8_t EmuX86_Read8(xbaddr addr)
|
|||
// Access NV2A regardless weither HLE is disabled or not
|
||||
value = EmuNV2A_Read(addr - NV2A_ADDR, 8);
|
||||
// Note : EmuNV2A_Read32 does it's own logging
|
||||
} else if (addr >= NVNET_ADDR && addr < NVNET_ADDR + NVNET_SIZE) {
|
||||
value = EmuNVNet_Read(addr - NVNET_ADDR, 8);
|
||||
} else if (addr >= XBOX_FLASH_ROM_BASE) { // 0xFFF00000 - 0xFFFFFFF
|
||||
value = EmuFlash_Read32(addr - XBOX_FLASH_ROM_BASE);
|
||||
} else {
|
||||
|
@ -325,11 +319,6 @@ void EmuX86_Write32Aligned(xbaddr addr, uint32_t value)
|
|||
return;
|
||||
}
|
||||
|
||||
if (addr >= NVNET_ADDR && addr < NVNET_ADDR + NVNET_SIZE) {
|
||||
EmuNVNet_Write(addr - NVNET_ADDR, value, 32);
|
||||
return;
|
||||
}
|
||||
|
||||
if (addr >= XBOX_FLASH_ROM_BASE) { // 0xFFF00000 - 0xFFFFFFF
|
||||
EmuWarning("EmuX86_Write32Aligned(0x%08X, 0x%08X) [FLASH_ROM]", addr, value);
|
||||
return;
|
||||
|
@ -370,11 +359,6 @@ void EmuX86_Write16(xbaddr addr, uint16_t value)
|
|||
return;
|
||||
}
|
||||
|
||||
if (addr >= NVNET_ADDR && addr < NVNET_ADDR + NVNET_SIZE) {
|
||||
EmuNVNet_Write(addr - NVNET_ADDR, value, 16);
|
||||
return;
|
||||
}
|
||||
|
||||
if (addr >= XBOX_FLASH_ROM_BASE) { // 0xFFF00000 - 0xFFFFFFF
|
||||
EmuWarning("EmuX86_Write16(0x%08X, 0x%08X) [FLASH_ROM]", addr, value);
|
||||
return;
|
||||
|
@ -405,11 +389,6 @@ void EmuX86_Write8(xbaddr addr, uint8_t value)
|
|||
return;
|
||||
}
|
||||
|
||||
if (addr >= NVNET_ADDR && addr < NVNET_ADDR + NVNET_SIZE) {
|
||||
EmuNVNet_Write(addr - NVNET_ADDR, value, 8);
|
||||
return;
|
||||
}
|
||||
|
||||
if (addr >= XBOX_FLASH_ROM_BASE) { // 0xFFF00000 - 0xFFFFFFF
|
||||
EmuWarning("EmuX86_Write8(0x%08X, 0x%08X) [FLASH_ROM]", addr, value);
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue