RESULT game_cmd_use_armor(GameContext* pGame, GameEventContext* pEvent) { RESULT ret; Player* p = CUR_PLAYER(pGame); VCard vcard; PosCard pcard; //char temp[128]; if(R_SUCC != get_player_card(p, CardWhere_PlayerEquip, EquipIdx_Armor, &vcard)) { MSG_OUT("你没有装备%s!\n", equip_idx_str(EquipIdx_Armor)); return R_E_FAIL; } pcard.card = vcard.vcard; if(YES != can_use_skill(pGame, pEvent)) { MSG_OUT("你当前不能发动技能!\n"); return R_E_STATUS; } pcard.where = CardWhere_PlayerEquip; pcard.pos = EquipIdx_Armor; if(USE_MANUAL != game_card_can_use(pGame, pEvent, get_game_cur_player(pGame), &pcard)) { MSG_OUT("你装备的%s【%s】当前不能使用!\n", equip_idx_str(EquipIdx_Armor), get_card_name(pcard.card.id)); return R_E_FAIL; } MSG_OUT("【%s】发动【%s】的%s效果。\n", p->name, get_card_name(pcard.card.id), equip_idx_str(EquipIdx_Armor)); set_player_card_flag(p, pcard.where, pcard.pos, CardFlag_InUse); ret = call_card_event(pcard.card.id, pGame, pEvent, get_game_cur_player(pGame)); set_player_card_flag(p, pcard.where, pcard.pos, CardFlag_None); (void)ret; return R_SUCC; }
int PTnVmon::probe_devices() { IOPCIDevice* PTCard=NULL; int i=0; UInt16 vendor_id; IOLog("PTKawainVi: started\n"); OSData* idKey; OSDictionary * iopci = serviceMatching("IOPCIDevice"); OSString* str; #if __LP64__ mach_vm_address_t addr; //mach_vm_size_t size; #else vm_address_t addr; //vm_size_t size; #endif nvclock.num_cards=0; if (iopci) { OSIterator * iterator = getMatchingServices(iopci); if (iterator) { while (PTCard = OSDynamicCast(IOPCIDevice, iterator->getNextObject())) { vendor_id=0; str=OSDynamicCast(OSString, PTCard->getProperty("IOName")); idKey=OSDynamicCast(OSData, PTCard->getProperty("vendor-id")); if (idKey) vendor_id=*(UInt32*)idKey->getBytesNoCopy(); if ((str->isEqualTo("display"))&&(vendor_id==0x10de)){ PTCard->setMemoryEnable(true); nvio = PTCard->mapDeviceMemoryWithIndex(0); addr = (vm_address_t)nvio->getVirtualAddress(); idKey=OSDynamicCast(OSData, PTCard->getProperty("device-id")); if (idKey) nvclock.card[i].device_id=*(UInt32*)idKey->getBytesNoCopy(); IOLog("Vendor ID: %x, Device ID: %x\n", vendor_id, nvclock.card[i].device_id); nvclock.card[i].arch = get_gpu_arch(nvclock.card[i].device_id); IOLog("Architecture: %x\n", nvclock.card[i].arch); nvclock.card[i].number = i; nvclock.card[i].card_name = (char*)get_card_name(nvclock.card[i].device_id, &nvclock.card[i].gpu); IOLog("%s\n", nvclock.card[i].card_name); nvclock.card[i].state = 0; nvclock.card[i].reg_address = addr; map_mem_card( &nvclock.card[i], addr ); i++; } } } } nvclock.num_cards = i; if (!i) { IOLog("PTKawainVi: No nVidia graphics adapters found\n"); } return nvclock.num_cards; }
bool NVClockX::start(IOService * provider) { HWSensorsDebugLog("Starting..."); if (!super::start(provider)) return false; if ((videoCard = (IOPCIDevice*)provider)) { if (videoCard->setMemoryEnable(true)) { if ((nvio = videoCard->mapDeviceMemoryWithIndex(0))) { IOVirtualAddress addr = nvio->getVirtualAddress(); if (OSData * data = OSDynamicCast(OSData, videoCard->getProperty("device-id"))) { nvclock.card[nvclock.num_cards].device_id=*(UInt32*)data->getBytesNoCopy(); nvclock.card[nvclock.num_cards].arch = get_gpu_arch(nvclock.card[nvclock.num_cards].device_id); nvclock.card[nvclock.num_cards].number = nvclock.num_cards; nvclock.card[nvclock.num_cards].card_name = (char*)get_card_name(nvclock.card[nvclock.num_cards].device_id, &nvclock.card[nvclock.num_cards].gpu); nvclock.card[nvclock.num_cards].state = 0; //nvclock.card[nvclock.num_cards].reg_address = addr; //map_mem_card(&nvclock.card[nvclock.num_cards], addr); // Map the registers of the nVidia chip // normally pmc is till 0x2000 but extended it for nv40 nvclock.card[nvclock.num_cards].PEXTDEV = (volatile unsigned int*)(addr + 0x101000); nvclock.card[nvclock.num_cards].PFB = (volatile unsigned int*)(addr + 0x100000); nvclock.card[nvclock.num_cards].PMC = (volatile unsigned int*)(addr + 0x000000); nvclock.card[nvclock.num_cards].PCIO = (volatile unsigned char*)(addr + 0x601000); nvclock.card[nvclock.num_cards].PDISPLAY= (volatile unsigned int*)(addr + NV_PDISPLAY_OFFSET); nvclock.card[nvclock.num_cards].PRAMDAC = (volatile unsigned int*)(addr + 0x680000); nvclock.card[nvclock.num_cards].PRAMIN = (volatile unsigned int*)(addr + NV_PRAMIN_OFFSET); nvclock.card[nvclock.num_cards].PROM = (volatile unsigned char*)(addr + 0x300000); // On Geforce 8xxx cards it appears that the pci config header has been moved if(nvclock.card[nvclock.num_cards].arch & NV5X) nvclock.card[nvclock.num_cards].PBUS = (volatile unsigned int*)(addr + 0x88000); else nvclock.card[nvclock.num_cards].PBUS = nvclock.card[nvclock.num_cards].PMC + 0x1800/4; nvclock.card[nvclock.num_cards].mem_mapped = 1; HWSensorsInfoLog("%s device-id=0x%x arch=0x%x", nvclock.card[nvclock.num_cards].card_name, nvclock.card[nvclock.num_cards].device_id, nvclock.card[nvclock.num_cards].arch); nvclock.num_cards++; } else HWSensorsWarningLog("device-id property not found"); } else { HWSensorsWarningLog("failed to map device's memory"); return false; } } }else { HWSensorsWarningLog("failed to assign PCI device"); return false; } char key[7]; nvclock.dpy = NULL; for (int index = 0; index < nvclock.num_cards; index++) { /* set the card object to the requested card */ if (!set_card(index)){ char buffer[256]; HWSensorsWarningLog("%s", get_error(buffer, 256)); return false; } OSData *bios = OSDynamicCast(OSData, videoCard->getProperty("vbios")); nvclock.card[index].bios = read_bios(bios ? bios->getBytesNoCopy() : NULL); /* Check if the card is supported, if not print a message. */ if(nvclock.card[index].gpu == UNKNOWN){ HWSensorsWarningLog("it seems your card isn't officialy supported yet"); HWSensorsWarningLog("please tell the author the pci_id of the card for further investigation"); HWSensorsWarningLog("continuing anyway"); } SInt8 cardIndex = getVacantGPUIndex(); if (cardIndex < 0) { HWSensorsWarningLog("failed to obtain vacant GPU index"); return false; } if(nv_card->caps & (GPU_TEMP_MONITORING)) { HWSensorsInfoLog("registering temperature sensors"); if(nv_card->caps & BOARD_TEMP_MONITORING) { snprintf(key, 5, KEY_FORMAT_GPU_DIODE_TEMPERATURE, cardIndex); addSensor(key, TYPE_SP78, 2, kNVCLockDiodeTemperatureSensor, index); snprintf(key, 5, KEY_FORMAT_GPU_HEATSINK_TEMPERATURE, cardIndex); addSensor(key, TYPE_SP78, 2, kNVCLockBoardTemperatureSensor, index); } else { snprintf(key, 5, KEY_FORMAT_GPU_PROXIMITY_TEMPERATURE, cardIndex); addSensor(key, TYPE_SP78, 2, kNVCLockBoardTemperatureSensor, index); } } if (nv_card->caps & I2C_FANSPEED_MONITORING || nv_card->caps & GPU_FANSPEED_MONITORING){ HWSensorsInfoLog("registering tachometer sensors"); char title[6]; snprintf (title, 6, "GPU %X", cardIndex); addTachometer(index, title); } HWSensorsInfoLog("registering frequency sensors"); snprintf(key, 5, KEY_FAKESMC_FORMAT_GPU_FREQUENCY, index); addSensor(key, TYPE_UI32, TYPE_UI32_SIZE, kNVCLockCoreFrequencySensor, index); snprintf(key, 5, KEY_FAKESMC_FORMAT_GPU_MEMORY_FREQUENCY, index); addSensor(key, TYPE_UI32, TYPE_UI32_SIZE, kNVCLockMemoryFrequencySensor, index); snprintf(key, 5, KEY_FAKESMC_FORMAT_GPU_SHADER_FREQUENCY, index); addSensor(key, TYPE_UI32, TYPE_UI32_SIZE, kNVCLockMemoryFrequencySensor, index); /*OSNumber* fanKey = OSDynamicCast(OSNumber, getProperty("FanSpeedPercentage")); if((fanKey!=NULL)&(nv_card->set_fanspeed!=NULL)) { HWSensorsInfoLog("Changing fan speed to %d", fanKey->unsigned8BitValue()); nv_card->set_fanspeed(fanKey->unsigned8BitValue()); } OSNumber* speedKey=OSDynamicCast(OSNumber, getProperty("GPUSpeed")); if ((speedKey!=NULL)&(nv_card->caps&GPU_OVERCLOCKING)) { HWSensorsInfoLog("Default speed %d", (UInt16)nv_card->get_gpu_speed()); //HWSensorsInfoLog("%d", speedKey->unsigned16BitValue()); nv_card->set_gpu_speed(speedKey->unsigned16BitValue()); HWSensorsInfoLog("Overclocked to %d", (UInt16)nv_card->get_gpu_speed()); }*/ } registerService(); return true; }