Hardware/CPU/AMDCPU.cs
author moel.mich
Thu, 11 Nov 2010 21:22:24 +0000
changeset 241 52007c404f32
parent 197 fb66f749b7ff
child 271 8635fa73eacc
permissions -rw-r--r--
Fixed a problem, where the MainForm location and size was lost when the application is started minimized and exited without ever showing the form. This caused MainForm_Load to be never called (location and size was not loaded), but the default size and location were still saved. The new implementation only saves the location and size when one of the two is changed.
moel@196
     1
/*
moel@196
     2
  
moel@196
     3
  Version: MPL 1.1/GPL 2.0/LGPL 2.1
moel@196
     4
moel@196
     5
  The contents of this file are subject to the Mozilla Public License Version
moel@196
     6
  1.1 (the "License"); you may not use this file except in compliance with
moel@196
     7
  the License. You may obtain a copy of the License at
moel@196
     8
 
moel@196
     9
  http://www.mozilla.org/MPL/
moel@196
    10
moel@196
    11
  Software distributed under the License is distributed on an "AS IS" basis,
moel@196
    12
  WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
moel@196
    13
  for the specific language governing rights and limitations under the License.
moel@196
    14
moel@196
    15
  The Original Code is the Open Hardware Monitor code.
moel@196
    16
moel@196
    17
  The Initial Developer of the Original Code is 
moel@196
    18
  Michael Möller <m.moeller@gmx.ch>.
moel@196
    19
  Portions created by the Initial Developer are Copyright (C) 2009-2010
moel@196
    20
  the Initial Developer. All Rights Reserved.
moel@196
    21
moel@196
    22
  Contributor(s):
moel@196
    23
moel@196
    24
  Alternatively, the contents of this file may be used under the terms of
moel@196
    25
  either the GNU General Public License Version 2 or later (the "GPL"), or
moel@196
    26
  the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
moel@196
    27
  in which case the provisions of the GPL or the LGPL are applicable instead
moel@196
    28
  of those above. If you wish to allow use of your version of this file only
moel@196
    29
  under the terms of either the GPL or the LGPL, and not to allow others to
moel@196
    30
  use your version of this file under the terms of the MPL, indicate your
moel@196
    31
  decision by deleting the provisions above and replace them with the notice
moel@196
    32
  and other provisions required by the GPL or the LGPL. If you do not delete
moel@196
    33
  the provisions above, a recipient may use your version of this file under
moel@196
    34
  the terms of any one of the MPL, the GPL or the LGPL.
moel@196
    35
 
moel@196
    36
*/
moel@196
    37
moel@196
    38
namespace OpenHardwareMonitor.Hardware.CPU {
moel@196
    39
moel@196
    40
  internal abstract class AMDCPU : GenericCPU {
moel@196
    41
moel@196
    42
    private const byte PCI_BUS = 0;
moel@196
    43
    private const byte PCI_BASE_DEVICE = 24;
moel@196
    44
    private const byte DEVICE_VENDOR_ID_REGISTER = 0;
moel@196
    45
    private const ushort AMD_VENDOR_ID = 0x1022;
moel@196
    46
moel@196
    47
    public AMDCPU(int processorIndex, CPUID[][] cpuid, ISettings settings)
moel@196
    48
      : base(processorIndex, cpuid, settings) { }
moel@196
    49
moel@196
    50
    protected uint GetPciAddress(byte function, ushort deviceId) {
moel@197
    51
      
moel@197
    52
      // assemble the pci address
moel@236
    53
      uint address = Ring0.GetPciAddress(PCI_BUS,
moel@196
    54
        (byte)(PCI_BASE_DEVICE + processorIndex), function);
moel@196
    55
moel@197
    56
      // verify that we have the correct bus, device and function
moel@196
    57
      uint deviceVendor;
moel@236
    58
      if (!Ring0.ReadPciConfig(
moel@196
    59
        address, DEVICE_VENDOR_ID_REGISTER, out deviceVendor))
moel@236
    60
        return Ring0.InvalidPciAddress;
moel@197
    61
      
moel@196
    62
      if (deviceVendor != (deviceId << 16 | AMD_VENDOR_ID))
moel@236
    63
        return Ring0.InvalidPciAddress;
moel@196
    64
moel@196
    65
      return address;
moel@196
    66
    }
moel@196
    67
moel@196
    68
  }
moel@196
    69
}