est.c (155996) | est.c (158446) |
---|---|
1/*- 2 * Copyright (c) 2004 Colin Percival 3 * Copyright (c) 2005 Nate Lawson 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted providing that the following conditions 8 * are met: --- 12 unchanged lines hidden (view full) --- 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 23 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 24 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 * POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2004 Colin Percival 3 * Copyright (c) 2005 Nate Lawson 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted providing that the following conditions 8 * are met: --- 12 unchanged lines hidden (view full) --- 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 23 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 24 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 * POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28#include <sys/cdefs.h> |
29__FBSDID("$FreeBSD: head/sys/i386/cpufreq/est.c 155996 2006-02-25 04:55:38Z cperciva $"); | 29__FBSDID("$FreeBSD: head/sys/i386/cpufreq/est.c 158446 2006-05-11 17:35:44Z njl $"); |
30 31#include <sys/param.h> 32#include <sys/bus.h> 33#include <sys/cpu.h> 34#include <sys/kernel.h> 35#include <sys/malloc.h> 36#include <sys/module.h> 37#include <sys/smp.h> --- 21 unchanged lines hidden (view full) --- 59 uint16_t id16; 60 int power; 61} freq_info; 62 63/* Identifying characteristics of a processor and supported frequencies. */ 64typedef struct { 65 const char *vendor; 66 uint32_t id32; | 30 31#include <sys/param.h> 32#include <sys/bus.h> 33#include <sys/cpu.h> 34#include <sys/kernel.h> 35#include <sys/malloc.h> 36#include <sys/module.h> 37#include <sys/smp.h> --- 21 unchanged lines hidden (view full) --- 59 uint16_t id16; 60 int power; 61} freq_info; 62 63/* Identifying characteristics of a processor and supported frequencies. */ 64typedef struct { 65 const char *vendor; 66 uint32_t id32; |
67 uint32_t bus_clk; | |
68 freq_info *freqtab; 69} cpu_info; 70 71struct est_softc { 72 device_t dev; 73 int acpi_settings; 74 freq_info *freq_list; 75}; 76 77/* Convert MHz and mV into IDs for passing to the MSR. */ 78#define ID16(MHz, mV, bus_clk) \ 79 (((MHz / bus_clk) << 8) | ((mV ? mV - 700 : 0) >> 4)) 80#define ID32(MHz_hi, mV_hi, MHz_lo, mV_lo, bus_clk) \ 81 ((ID16(MHz_lo, mV_lo, bus_clk) << 16) | (ID16(MHz_hi, mV_hi, bus_clk))) 82 83/* Format for storing IDs in our table. */ | 67 freq_info *freqtab; 68} cpu_info; 69 70struct est_softc { 71 device_t dev; 72 int acpi_settings; 73 freq_info *freq_list; 74}; 75 76/* Convert MHz and mV into IDs for passing to the MSR. */ 77#define ID16(MHz, mV, bus_clk) \ 78 (((MHz / bus_clk) << 8) | ((mV ? mV - 700 : 0) >> 4)) 79#define ID32(MHz_hi, mV_hi, MHz_lo, mV_lo, bus_clk) \ 80 ((ID16(MHz_lo, mV_lo, bus_clk) << 16) | (ID16(MHz_hi, mV_hi, bus_clk))) 81 82/* Format for storing IDs in our table. */ |
83#define FREQ_INFO_PWR(MHz, mV, bus_clk, mW) \ 84 { MHz, mV, ID16(MHz, mV, bus_clk), mW } |
|
84#define FREQ_INFO(MHz, mV, bus_clk) \ | 85#define FREQ_INFO(MHz, mV, bus_clk) \ |
85 { MHz, mV, ID16(MHz, mV, bus_clk), CPUFREQ_VAL_UNKNOWN } | 86 FREQ_INFO_PWR(MHz, mV, bus_clk, CPUFREQ_VAL_UNKNOWN) |
86#define INTEL(tab, zhi, vhi, zlo, vlo, bus_clk) \ | 87#define INTEL(tab, zhi, vhi, zlo, vlo, bus_clk) \ |
87 { GenuineIntel, ID32(zhi, vhi, zlo, vlo, bus_clk), bus_clk, tab } | 88 { intel_id, ID32(zhi, vhi, zlo, vlo, bus_clk), tab } 89#define CENTAUR(tab, zhi, vhi, zlo, vlo, bus_clk) \ 90 { centaur_id, ID32(zhi, vhi, zlo, vlo, bus_clk), tab } |
88 | 91 |
89const char GenuineIntel[] = "GenuineIntel"; | 92const char intel_id[] = "GenuineIntel"; 93const char centaur_id[] = "CentaurHauls"; |
90 91/* Default bus clock value for Centrino processors. */ 92#define INTEL_BUS_CLK 100 93 94/* XXX Update this if new CPUs have more settings. */ 95#define EST_MAX_SETTINGS 10 96CTASSERT(EST_MAX_SETTINGS <= MAX_SETTINGS); 97 --- 581 unchanged lines hidden (view full) --- 679 /* 90 nm 1.00GHz Ultra Low Voltage Pentium M */ 680 FREQ_INFO(1000, 940, INTEL_BUS_CLK), 681 FREQ_INFO( 900, 908, INTEL_BUS_CLK), 682 FREQ_INFO( 800, 876, INTEL_BUS_CLK), 683 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 684 FREQ_INFO( 0, 0, 1), 685}; 686 | 94 95/* Default bus clock value for Centrino processors. */ 96#define INTEL_BUS_CLK 100 97 98/* XXX Update this if new CPUs have more settings. */ 99#define EST_MAX_SETTINGS 10 100CTASSERT(EST_MAX_SETTINGS <= MAX_SETTINGS); 101 --- 581 unchanged lines hidden (view full) --- 683 /* 90 nm 1.00GHz Ultra Low Voltage Pentium M */ 684 FREQ_INFO(1000, 940, INTEL_BUS_CLK), 685 FREQ_INFO( 900, 908, INTEL_BUS_CLK), 686 FREQ_INFO( 800, 876, INTEL_BUS_CLK), 687 FREQ_INFO( 600, 812, INTEL_BUS_CLK), 688 FREQ_INFO( 0, 0, 1), 689}; 690 |
691/* 692 * VIA C7-M 500 MHz FSB, 400 MHz FSB, and ULV variants. 693 * Data from the "VIA C7-M Processor BIOS Writer's Guide (v2.17)" datasheet. 694 */ 695static freq_info C7M_795[] = { 696 /* 2.00GHz Centaur C7-M 533 Mhz FSB */ 697 FREQ_INFO_PWR(2000, 1148, 133, 20000), 698 FREQ_INFO_PWR(1867, 1132, 133, 18000), 699 FREQ_INFO_PWR(1600, 1100, 133, 15000), 700 FREQ_INFO_PWR(1467, 1052, 133, 13000), 701 FREQ_INFO_PWR(1200, 1004, 133, 10000), 702 FREQ_INFO_PWR( 800, 844, 133, 7000), 703 FREQ_INFO_PWR( 667, 844, 133, 6000), 704 FREQ_INFO_PWR( 533, 844, 133, 5000), 705 FREQ_INFO(0, 0, 1), 706}; 707static freq_info C7M_785[] = { 708 /* 1.80GHz Centaur C7-M 533 Mhz FSB */ 709 FREQ_INFO_PWR(1867, 1148, 133, 18000), 710 FREQ_INFO_PWR(1600, 1100, 133, 15000), 711 FREQ_INFO_PWR(1467, 1052, 133, 13000), 712 FREQ_INFO_PWR(1200, 1004, 133, 10000), 713 FREQ_INFO_PWR( 800, 844, 133, 7000), 714 FREQ_INFO_PWR( 667, 844, 133, 6000), 715 FREQ_INFO_PWR( 533, 844, 133, 5000), 716 FREQ_INFO(0, 0, 1), 717}; 718static freq_info C7M_765[] = { 719 /* 1.60GHz Centaur C7-M 533 Mhz FSB */ 720 FREQ_INFO_PWR(1600, 1084, 133, 15000), 721 FREQ_INFO_PWR(1467, 1052, 133, 13000), 722 FREQ_INFO_PWR(1200, 1004, 133, 10000), 723 FREQ_INFO_PWR( 800, 844, 133, 7000), 724 FREQ_INFO_PWR( 667, 844, 133, 6000), 725 FREQ_INFO_PWR( 533, 844, 133, 5000), 726 FREQ_INFO(0, 0, 1), 727}; 728 729static freq_info C7M_794[] = { 730 /* 2.00GHz Centaur C7-M 400 Mhz FSB */ 731 FREQ_INFO_PWR(2000, 1148, 100, 20000), 732 FREQ_INFO_PWR(1800, 1132, 100, 18000), 733 FREQ_INFO_PWR(1600, 1100, 100, 15000), 734 FREQ_INFO_PWR(1400, 1052, 100, 13000), 735 FREQ_INFO_PWR(1000, 1004, 100, 10000), 736 FREQ_INFO_PWR( 800, 844, 100, 7000), 737 FREQ_INFO_PWR( 600, 844, 100, 6000), 738 FREQ_INFO_PWR( 400, 844, 100, 5000), 739 FREQ_INFO(0, 0, 1), 740}; 741static freq_info C7M_784[] = { 742 /* 1.80GHz Centaur C7-M 400 Mhz FSB */ 743 FREQ_INFO_PWR(1800, 1148, 100, 18000), 744 FREQ_INFO_PWR(1600, 1100, 100, 15000), 745 FREQ_INFO_PWR(1400, 1052, 100, 13000), 746 FREQ_INFO_PWR(1000, 1004, 100, 10000), 747 FREQ_INFO_PWR( 800, 844, 100, 7000), 748 FREQ_INFO_PWR( 600, 844, 100, 6000), 749 FREQ_INFO_PWR( 400, 844, 100, 5000), 750 FREQ_INFO(0, 0, 1), 751}; 752static freq_info C7M_764[] = { 753 /* 1.60GHz Centaur C7-M 400 Mhz FSB */ 754 FREQ_INFO_PWR(1600, 1084, 100, 15000), 755 FREQ_INFO_PWR(1400, 1052, 100, 13000), 756 FREQ_INFO_PWR(1000, 1004, 100, 10000), 757 FREQ_INFO_PWR( 800, 844, 100, 7000), 758 FREQ_INFO_PWR( 600, 844, 100, 6000), 759 FREQ_INFO_PWR( 400, 844, 100, 5000), 760 FREQ_INFO(0, 0, 1), 761}; 762static freq_info C7M_754[] = { 763 /* 1.50GHz Centaur C7-M 400 Mhz FSB */ 764 FREQ_INFO_PWR(1500, 1004, 100, 12000), 765 FREQ_INFO_PWR(1400, 988, 100, 11000), 766 FREQ_INFO_PWR(1000, 940, 100, 9000), 767 FREQ_INFO_PWR( 800, 844, 100, 7000), 768 FREQ_INFO_PWR( 600, 844, 100, 6000), 769 FREQ_INFO_PWR( 400, 844, 100, 5000), 770 FREQ_INFO(0, 0, 1), 771}; 772static freq_info C7M_771[] = { 773 /* 1.20GHz Centaur C7-M 400 Mhz FSB */ 774 FREQ_INFO_PWR(1200, 860, 100, 7000), 775 FREQ_INFO_PWR(1000, 860, 100, 6000), 776 FREQ_INFO_PWR( 800, 844, 100, 5500), 777 FREQ_INFO_PWR( 600, 844, 100, 5000), 778 FREQ_INFO_PWR( 400, 844, 100, 4000), 779 FREQ_INFO(0, 0, 1), 780}; 781 782static freq_info C7M_775_ULV[] = { 783 /* 1.50GHz Centaur C7-M ULV */ 784 FREQ_INFO_PWR(1500, 956, 100, 7500), 785 FREQ_INFO_PWR(1400, 940, 100, 6000), 786 FREQ_INFO_PWR(1000, 860, 100, 5000), 787 FREQ_INFO_PWR( 800, 828, 100, 2800), 788 FREQ_INFO_PWR( 600, 796, 100, 2500), 789 FREQ_INFO_PWR( 400, 796, 100, 2000), 790 FREQ_INFO(0, 0, 1), 791}; 792static freq_info C7M_772_ULV[] = { 793 /* 1.20GHz Centaur C7-M ULV */ 794 FREQ_INFO_PWR(1200, 844, 100, 5000), 795 FREQ_INFO_PWR(1000, 844, 100, 4000), 796 FREQ_INFO_PWR( 800, 828, 100, 2800), 797 FREQ_INFO_PWR( 600, 796, 100, 2500), 798 FREQ_INFO_PWR( 400, 796, 100, 2000), 799 FREQ_INFO(0, 0, 1), 800}; 801static freq_info C7M_779_ULV[] = { 802 /* 1.00GHz Centaur C7-M ULV */ 803 FREQ_INFO_PWR(1000, 796, 100, 3500), 804 FREQ_INFO_PWR( 800, 796, 100, 2800), 805 FREQ_INFO_PWR( 600, 796, 100, 2500), 806 FREQ_INFO_PWR( 400, 796, 100, 2000), 807 FREQ_INFO(0, 0, 1), 808}; 809static freq_info C7M_770_ULV[] = { 810 /* 1.00GHz Centaur C7-M ULV */ 811 FREQ_INFO_PWR(1000, 844, 100, 5000), 812 FREQ_INFO_PWR( 800, 796, 100, 2800), 813 FREQ_INFO_PWR( 600, 796, 100, 2500), 814 FREQ_INFO_PWR( 400, 796, 100, 2000), 815 FREQ_INFO(0, 0, 1), 816}; 817 |
|
687static cpu_info ESTprocs[] = { 688 INTEL(PM17_130, 1700, 1484, 600, 956, INTEL_BUS_CLK), 689 INTEL(PM16_130, 1600, 1484, 600, 956, INTEL_BUS_CLK), 690 INTEL(PM15_130, 1500, 1484, 600, 956, INTEL_BUS_CLK), 691 INTEL(PM14_130, 1400, 1484, 600, 956, INTEL_BUS_CLK), 692 INTEL(PM13_130, 1300, 1388, 600, 956, INTEL_BUS_CLK), 693 INTEL(PM13_LV_130, 1300, 1180, 600, 956, INTEL_BUS_CLK), 694 INTEL(PM12_LV_130, 1200, 1180, 600, 956, INTEL_BUS_CLK), --- 42 unchanged lines hidden (view full) --- 737 INTEL(PM_733JG_90, 1100, 956, 600, 812, INTEL_BUS_CLK), 738 INTEL(PM_733JH_90, 1100, 940, 600, 812, INTEL_BUS_CLK), 739 INTEL(PM_733JI_90, 1100, 924, 600, 812, INTEL_BUS_CLK), 740 INTEL(PM_733JJ_90, 1100, 908, 600, 812, INTEL_BUS_CLK), 741 INTEL(PM_733JK_90, 1100, 892, 600, 812, INTEL_BUS_CLK), 742 INTEL(PM_733JL_90, 1100, 876, 600, 812, INTEL_BUS_CLK), 743 INTEL(PM_733_90, 1100, 940, 600, 812, INTEL_BUS_CLK), 744 INTEL(PM_723_90, 1000, 940, 600, 812, INTEL_BUS_CLK), | 818static cpu_info ESTprocs[] = { 819 INTEL(PM17_130, 1700, 1484, 600, 956, INTEL_BUS_CLK), 820 INTEL(PM16_130, 1600, 1484, 600, 956, INTEL_BUS_CLK), 821 INTEL(PM15_130, 1500, 1484, 600, 956, INTEL_BUS_CLK), 822 INTEL(PM14_130, 1400, 1484, 600, 956, INTEL_BUS_CLK), 823 INTEL(PM13_130, 1300, 1388, 600, 956, INTEL_BUS_CLK), 824 INTEL(PM13_LV_130, 1300, 1180, 600, 956, INTEL_BUS_CLK), 825 INTEL(PM12_LV_130, 1200, 1180, 600, 956, INTEL_BUS_CLK), --- 42 unchanged lines hidden (view full) --- 868 INTEL(PM_733JG_90, 1100, 956, 600, 812, INTEL_BUS_CLK), 869 INTEL(PM_733JH_90, 1100, 940, 600, 812, INTEL_BUS_CLK), 870 INTEL(PM_733JI_90, 1100, 924, 600, 812, INTEL_BUS_CLK), 871 INTEL(PM_733JJ_90, 1100, 908, 600, 812, INTEL_BUS_CLK), 872 INTEL(PM_733JK_90, 1100, 892, 600, 812, INTEL_BUS_CLK), 873 INTEL(PM_733JL_90, 1100, 876, 600, 812, INTEL_BUS_CLK), 874 INTEL(PM_733_90, 1100, 940, 600, 812, INTEL_BUS_CLK), 875 INTEL(PM_723_90, 1000, 940, 600, 812, INTEL_BUS_CLK), |
745 { NULL, 0, 0, NULL }, | 876 877 CENTAUR(C7M_795, 2000, 1148, 533, 844, 133), 878 CENTAUR(C7M_794, 2000, 1148, 400, 844, 100), 879 CENTAUR(C7M_785, 1867, 1148, 533, 844, 133), 880 CENTAUR(C7M_784, 1800, 1148, 400, 844, 100), 881 CENTAUR(C7M_765, 1600, 1084, 533, 844, 133), 882 CENTAUR(C7M_764, 1600, 1084, 400, 844, 100), 883 CENTAUR(C7M_754, 1500, 1004, 400, 844, 100), 884 CENTAUR(C7M_775_ULV, 1500, 956, 400, 796, 100), 885 CENTAUR(C7M_771, 1200, 860, 400, 844, 100), 886 CENTAUR(C7M_772_ULV, 1200, 844, 400, 796, 100), 887 CENTAUR(C7M_779_ULV, 1000, 796, 400, 796, 100), 888 CENTAUR(C7M_770_ULV, 1000, 844, 400, 796, 100), 889 { NULL, 0, NULL }, |
746}; 747 748static void est_identify(driver_t *driver, device_t parent); 749static int est_features(driver_t *driver, u_int *features); 750static int est_probe(device_t parent); 751static int est_attach(device_t parent); 752static int est_detach(device_t parent); 753static int est_get_info(device_t dev); 754static int est_acpi_info(device_t dev, freq_info **freqs); | 890}; 891 892static void est_identify(driver_t *driver, device_t parent); 893static int est_features(driver_t *driver, u_int *features); 894static int est_probe(device_t parent); 895static int est_attach(device_t parent); 896static int est_detach(device_t parent); 897static int est_get_info(device_t dev); 898static int est_acpi_info(device_t dev, freq_info **freqs); |
755static int est_table_info(device_t dev, uint64_t msr, uint32_t bus_clk, 756 freq_info **freqs); | 899static int est_table_info(device_t dev, uint64_t msr, freq_info **freqs); |
757static freq_info *est_get_current(freq_info *freq_list); 758static int est_settings(device_t dev, struct cf_setting *sets, int *count); 759static int est_set(device_t dev, const struct cf_setting *set); 760static int est_get(device_t dev, struct cf_setting *set); 761static int est_type(device_t dev, int *type); 762 763static device_method_t est_methods[] = { 764 /* Device interface */ --- 38 unchanged lines hidden (view full) --- 803 device_t child; 804 u_int p[4]; 805 806 /* Make sure we're not being doubly invoked. */ 807 if (device_find_child(parent, "est", -1) != NULL) 808 return; 809 810 /* Check that CPUID is supported and the vendor is Intel.*/ | 900static freq_info *est_get_current(freq_info *freq_list); 901static int est_settings(device_t dev, struct cf_setting *sets, int *count); 902static int est_set(device_t dev, const struct cf_setting *set); 903static int est_get(device_t dev, struct cf_setting *set); 904static int est_type(device_t dev, int *type); 905 906static device_method_t est_methods[] = { 907 /* Device interface */ --- 38 unchanged lines hidden (view full) --- 946 device_t child; 947 u_int p[4]; 948 949 /* Make sure we're not being doubly invoked. */ 950 if (device_find_child(parent, "est", -1) != NULL) 951 return; 952 953 /* Check that CPUID is supported and the vendor is Intel.*/ |
811 if (cpu_high == 0 || strcmp(cpu_vendor, GenuineIntel) != 0) | 954 if (cpu_high == 0 || (strcmp(cpu_vendor, intel_id) != 0 && 955 strcmp(cpu_vendor, centaur_id) != 0)) |
812 return; 813 | 956 return; 957 |
814 /* Read capability bits and check if the CPU supports EST. */ | 958 /* 959 * Read capability bits and check if the CPU supports EST. 960 * This is indicated by bit 7 of ECX. 961 */ |
815 do_cpuid(1, p); 816 if ((p[2] & 0x80) == 0) 817 return; 818 819 /* 820 * We add a child for each CPU since settings must be performed 821 * on each CPU in the SMP case. 822 */ --- 80 unchanged lines hidden (view full) --- 903est_get_info(device_t dev) 904{ 905 struct est_softc *sc; 906 uint64_t msr; 907 int error; 908 909 sc = device_get_softc(dev); 910 msr = rdmsr(MSR_PERF_STATUS); | 962 do_cpuid(1, p); 963 if ((p[2] & 0x80) == 0) 964 return; 965 966 /* 967 * We add a child for each CPU since settings must be performed 968 * on each CPU in the SMP case. 969 */ --- 80 unchanged lines hidden (view full) --- 1050est_get_info(device_t dev) 1051{ 1052 struct est_softc *sc; 1053 uint64_t msr; 1054 int error; 1055 1056 sc = device_get_softc(dev); 1057 msr = rdmsr(MSR_PERF_STATUS); |
911 error = est_table_info(dev, msr, INTEL_BUS_CLK, &sc->freq_list); | 1058 error = est_table_info(dev, msr, &sc->freq_list); |
912 if (error) 913 error = est_acpi_info(dev, &sc->freq_list); 914 915 if (error) { 916 printf( 917 "est: CPU supports Enhanced Speedstep, but is not recognized.\n" 918 "est: cpu_vendor %s, msr %0jx\n", cpu_vendor, msr); 919 return (ENXIO); --- 53 unchanged lines hidden (view full) --- 973 if (sets) 974 free(sets, M_TEMP); 975 if (error && table) 976 free(table, M_DEVBUF); 977 return (error); 978} 979 980static int | 1059 if (error) 1060 error = est_acpi_info(dev, &sc->freq_list); 1061 1062 if (error) { 1063 printf( 1064 "est: CPU supports Enhanced Speedstep, but is not recognized.\n" 1065 "est: cpu_vendor %s, msr %0jx\n", cpu_vendor, msr); 1066 return (ENXIO); --- 53 unchanged lines hidden (view full) --- 1120 if (sets) 1121 free(sets, M_TEMP); 1122 if (error && table) 1123 free(table, M_DEVBUF); 1124 return (error); 1125} 1126 1127static int |
981est_table_info(device_t dev, uint64_t msr, uint32_t bus_clk, freq_info **freqs) | 1128est_table_info(device_t dev, uint64_t msr, freq_info **freqs) |
982{ 983 cpu_info *p; 984 uint32_t id; 985 | 1129{ 1130 cpu_info *p; 1131 uint32_t id; 1132 |
986 /* Find a table which matches (vendor, id, bus_clk). */ | 1133 /* Find a table which matches (vendor, id32). */ |
987 id = msr >> 32; 988 for (p = ESTprocs; p->id32 != 0; p++) { | 1134 id = msr >> 32; 1135 for (p = ESTprocs; p->id32 != 0; p++) { |
989 if (strcmp(p->vendor, cpu_vendor) == 0 && p->id32 == id && 990 p->bus_clk == bus_clk) | 1136 if (strcmp(p->vendor, cpu_vendor) == 0 && p->id32 == id) |
991 break; 992 } 993 if (p->id32 == 0) 994 return (EOPNOTSUPP); 995 996 /* Make sure the current setpoint is valid. */ 997 if (est_get_current(p->freqtab) == NULL) { 998 device_printf(dev, "current setting not found in table\n"); --- 110 unchanged lines hidden --- | 1137 break; 1138 } 1139 if (p->id32 == 0) 1140 return (EOPNOTSUPP); 1141 1142 /* Make sure the current setpoint is valid. */ 1143 if (est_get_current(p->freqtab) == NULL) { 1144 device_printf(dev, "current setting not found in table\n"); --- 110 unchanged lines hidden --- |