--- kernel/bsd/dev/ppc/PowerSurgeMB.m 2018/04/24 18:26:03 1.1 +++ kernel/bsd/dev/ppc/PowerSurgeMB.m 2018/04/24 18:29:37 1.1.1.2 @@ -143,6 +143,24 @@ enum { }; #endif + +static long Core99NVRAMInited; +static char Core99NVRAM[0x2000]; + +IOReturn InitCore99NVRAM(void) +{ + volatile unsigned char *nvAddrReg = + (volatile unsigned char *) (POWERMAC_IO(PCI_NVRAM_ADDR_PHYS)); + + kprintf("InitCore99NVRAM: nvAddrReg = %x\n", nvAddrReg); + + bcopy(nvAddrReg, Core99NVRAM, 0x2000); + + Core99NVRAMInited = 1; + + return 0; +} + IOReturn ReadNVRAM( unsigned int offset, unsigned int length, unsigned char * buffer ) { @@ -155,7 +173,12 @@ int i; if( offset + length > 0x2000 ) return( IO_R_UNSUPPORTED); - if (HasPMU()) { + if (IsSawtooth()) { + if (!Core99NVRAMInited && (InitCore99NVRAM != 0)) return -1; + for (i = 0; i < length; i++) { + buffer[i] = Core99NVRAM[offset + i]; + } + } else if (HasPMU()) { // This is a powerbook if (ApplePMUId == NULL) { for ( i = 0; i < length; i++ ) { @@ -196,7 +219,12 @@ int i; if( offset + length > 0x2000 ) return( IO_R_UNSUPPORTED); - if (HasPMU()) { + if (IsSawtooth()) { + if (!Core99NVRAMInited && (InitCore99NVRAM != 0)) return -1; + for (i = 0; i < length; i++) { + Core99NVRAM[offset + i] = buffer[i]; + } + } if (HasPMU()) { // This is a powerbook if (ApplePMUId == NULL) { } else {