17fe2f639SDominik Brodowski /* 27fe2f639SDominik Brodowski * (C) 2003 Bruno Ducrot 37fe2f639SDominik Brodowski * (C) 2004 Dominik Brodowski <linux@dominikbrodowski.de> 47fe2f639SDominik Brodowski * 57fe2f639SDominik Brodowski * Licensed under the terms of the GNU GPL License version 2. 67fe2f639SDominik Brodowski * 77fe2f639SDominik Brodowski * Based on code found in 87fe2f639SDominik Brodowski * linux/include/asm-i386/ist.h and linux/arch/i386/kernel/setup.c 97fe2f639SDominik Brodowski * and originally developed by Andy Grover <andrew.grover@intel.com> 107fe2f639SDominik Brodowski */ 117fe2f639SDominik Brodowski 127fe2f639SDominik Brodowski #include <stdio.h> 137fe2f639SDominik Brodowski #include <string.h> 147fe2f639SDominik Brodowski #include <lrmi.h> 157fe2f639SDominik Brodowski 167fe2f639SDominik Brodowski int main (void) 177fe2f639SDominik Brodowski { 187fe2f639SDominik Brodowski struct LRMI_regs r; 197fe2f639SDominik Brodowski int retval; 207fe2f639SDominik Brodowski 217fe2f639SDominik Brodowski if (!LRMI_init()) 227fe2f639SDominik Brodowski return 0; 237fe2f639SDominik Brodowski 247fe2f639SDominik Brodowski memset(&r, 0, sizeof(r)); 257fe2f639SDominik Brodowski 267fe2f639SDominik Brodowski r.eax = 0x0000E980; 277fe2f639SDominik Brodowski r.edx = 0x47534943; 287fe2f639SDominik Brodowski 297fe2f639SDominik Brodowski retval = LRMI_int(0x15, &r); 307fe2f639SDominik Brodowski 317fe2f639SDominik Brodowski if (!retval) { 327fe2f639SDominik Brodowski printf("Failed!\n"); 337fe2f639SDominik Brodowski return 0; 347fe2f639SDominik Brodowski } 357fe2f639SDominik Brodowski if (r.eax == 0x47534943) { 367fe2f639SDominik Brodowski printf("BIOS supports GSIC call:\n"); 377fe2f639SDominik Brodowski printf("\tsignature: %c%c%c%c\n", 387fe2f639SDominik Brodowski (r.eax >> 24) & 0xff, 397fe2f639SDominik Brodowski (r.eax >> 16) & 0xff, 407fe2f639SDominik Brodowski (r.eax >> 8) & 0xff, 417fe2f639SDominik Brodowski (r.eax) & 0xff); 427fe2f639SDominik Brodowski printf("\tcommand port = 0x%.4x\n", 437fe2f639SDominik Brodowski r.ebx & 0xffff); 447fe2f639SDominik Brodowski printf("\tcommand = 0x%.4x\n", 457fe2f639SDominik Brodowski (r.ebx >> 16) & 0xffff); 467fe2f639SDominik Brodowski printf("\tevent port = 0x%.8x\n", r.ecx); 477fe2f639SDominik Brodowski printf("\tflags = 0x%.8x\n", r.edx); 487fe2f639SDominik Brodowski if (((r.ebx >> 16) & 0xffff) != 0x82) { 497fe2f639SDominik Brodowski printf("non-default command value. If speedstep-smi " 507fe2f639SDominik Brodowski "doesn't work out of the box,\nyou may want to " 517fe2f639SDominik Brodowski "try out the default value by passing " 527fe2f639SDominik Brodowski "smi_cmd=0x82 to the module\n ON YOUR OWN " 537fe2f639SDominik Brodowski "RISK.\n"); 547fe2f639SDominik Brodowski } 557fe2f639SDominik Brodowski if ((r.ebx & 0xffff) != 0xb2) { 567fe2f639SDominik Brodowski printf("non-default command port. If speedstep-smi " 577fe2f639SDominik Brodowski "doesn't work out of the box,\nyou may want to " 587fe2f639SDominik Brodowski "try out the default value by passing " 597fe2f639SDominik Brodowski "smi_port=0x82 to the module\n ON YOUR OWN " 607fe2f639SDominik Brodowski "RISK.\n"); 617fe2f639SDominik Brodowski } 627fe2f639SDominik Brodowski } else { 637fe2f639SDominik Brodowski printf("BIOS DOES NOT support GSIC call. Dumping registers anyway:\n"); 647fe2f639SDominik Brodowski printf("eax = 0x%.8x\n", r.eax); 657fe2f639SDominik Brodowski printf("ebx = 0x%.8x\n", r.ebx); 667fe2f639SDominik Brodowski printf("ecx = 0x%.8x\n", r.ecx); 677fe2f639SDominik Brodowski printf("edx = 0x%.8x\n", r.edx); 687fe2f639SDominik Brodowski printf("Note also that some BIOS do not support the initial " 691051e9b3SMasanari Iida "GSIC call, but the newer\nspeedstep-smi driver may " 707fe2f639SDominik Brodowski "work.\nFor this, you need to pass some arguments to " 717fe2f639SDominik Brodowski "the speedstep-smi driver:\n"); 727fe2f639SDominik Brodowski printf("\tsmi_cmd=0x?? smi_port=0x?? smi_sig=1\n"); 737fe2f639SDominik Brodowski printf("\nUnfortunately, you have to know what exactly are " 747fe2f639SDominik Brodowski "smi_cmd and smi_port, and this\nis system " 757fe2f639SDominik Brodowski "dependant.\n"); 767fe2f639SDominik Brodowski } 777fe2f639SDominik Brodowski return 1; 787fe2f639SDominik Brodowski } 79