#include <IOKit/IODeviceTreeSupport.h>
#include "PowerStar.h"
#include "../drvAppleOHare/OHare.h"
#define super ApplePlatformExpert
OSDefineMetaClassAndStructors(PowerStarPE, ApplePlatformExpert);
bool PowerStarPE::start(IOService *provider)
{
setChipSetType(kChipSetTypePowerStar);
if (IODTMatchNubWithKeys(provider, "('AAPL,3400/2400', 'AAPL,3500')")) {
configureEthernet(provider);
}
_pePMFeatures = kStdPowerBookPMFeatures;
_pePrivPMFeatures = kStdPowerBookPrivPMFeatures;
_peNumBatteriesSupported = kStdPowerBookNumBatteries;
return super::start(provider);
}
bool PowerStarPE::platformAdjustService(IOService *service)
{
if (!strcmp(service->getName(), "chips65550")) {
service->setProperty("Ignore VBL", "", 0);
return true;
}
return true;
}
void PowerStarPE::configureEthernet(IOService *provider)
{
OSCollectionIterator *nodeList;
IORegistryEntry *node, *enet, *ohare;
OSArray *interruptNames, *interruptSources;
OSSymbol *interruptControllerName;
OSData *tempData;
long tempSource;
enet = 0;
ohare = 0;
nodeList = IODTFindMatchingEntries(provider, kIODTRecursive,
"'pci1011,14'");
if (nodeList) {
while ((node = (IORegistryEntry *)nodeList->getNextObject())) {
enet = node;
}
nodeList->release();
}
if (enet == 0) return;
enet->setProperty("Network Connection", "10BaseT");
enet->setProperty("built-in", "", 0);
nodeList = IODTFindMatchingEntries(provider, kIODTRecursive,
"'pci106b,7'");
if (nodeList) {
while ((node = (IORegistryEntry *)nodeList->getNextObject())) {
ohare = node;
}
nodeList->release();
}
if (ohare == 0) return;
interruptNames = OSDynamicCast(OSArray,
enet->getProperty(gIOInterruptControllersKey));
interruptControllerName = (OSSymbol *)OSSymbol::withCStringNoCopy("SecondaryInterruptController");
interruptNames->setObject(0, interruptControllerName);
interruptControllerName->release();
interruptSources = OSDynamicCast(OSArray,
enet->getProperty(gIOInterruptSpecifiersKey));
tempSource = 28;
tempData = OSData::withBytes(&tempSource, sizeof(tempSource));
interruptSources->setObject(0, tempData);
tempData->release();
}