ruby-amt 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/AUTHORS +1 -0
- data/COPYING +15 -0
- data/ChangeLog +392 -0
- data/GPL +674 -0
- data/Rakefile +292 -0
- data/VERSION +1 -0
- data/doc/default.css +211 -0
- data/doc/default.template +78 -0
- data/doc/documentation.page +40 -0
- data/doc/img/bg.jpg +0 -0
- data/doc/img/image.jpg +0 -0
- data/doc/img/line.jpg +0 -0
- data/doc/img/shadow.jpg +0 -0
- data/doc/index.page +61 -0
- data/doc/installation.page +115 -0
- data/doc/news.page +25 -0
- data/doc/news/release_0_1_0.page +16 -0
- data/doc/virtual +2 -0
- data/lib/amt/pt_status.rb +59 -0
- data/lib/amt/service.rb +16 -0
- data/lib/amt/service/basic.rb +159 -0
- data/lib/amt/service/hardware_asset.rb +83 -0
- data/lib/amt/service/hardware_asset/amt_information_table.rb +49 -0
- data/lib/amt/service/hardware_asset/asset.rb +118 -0
- data/lib/amt/service/hardware_asset/baseboard.rb +31 -0
- data/lib/amt/service/hardware_asset/bios.rb +65 -0
- data/lib/amt/service/hardware_asset/computer_system.rb +30 -0
- data/lib/amt/service/hardware_asset/fru.rb +37 -0
- data/lib/amt/service/hardware_asset/media_device.rb +63 -0
- data/lib/amt/service/hardware_asset/memory_module.rb +91 -0
- data/lib/amt/service/hardware_asset/portable_battery.rb +80 -0
- data/lib/amt/service/hardware_asset/processor.rb +123 -0
- data/lib/amt/service/hardware_asset/vpro_verification_table.rb +120 -0
- data/lib/amt/service/network_administration.rb +181 -0
- data/lib/amt/service/network_administration/structures.rb +29 -0
- data/lib/amt/service/remote_control.rb +73 -0
- data/lib/amt/service/remote_control/structures.rb +120 -0
- data/lib/amt/service/security_administration.rb +430 -0
- data/lib/amt/service/security_administration/structures.rb +117 -0
- data/lib/amt/system.rb +134 -0
- data/lib/amt/utility.rb +33 -0
- data/lib/amt/utility/bit_struct.rb +164 -0
- data/lib/amt/utility/enum.rb +119 -0
- data/lib/amt/version.rb +8 -0
- data/setup.rb +1585 -0
- metadata +125 -0
@@ -0,0 +1,83 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'amt/service/basic'
|
4
|
+
require 'amt/utility'
|
5
|
+
|
6
|
+
module AMT
|
7
|
+
|
8
|
+
module Service
|
9
|
+
|
10
|
+
# AMT Service for retrieving information about the hardware assets of the AMT device.
|
11
|
+
class HardwareAsset < Basic
|
12
|
+
|
13
|
+
autoload :Asset, 'amt/service/hardware_asset/asset'
|
14
|
+
autoload :Bios, 'amt/service/hardware_asset/bios'
|
15
|
+
autoload :ComputerSystem, 'amt/service/hardware_asset/computer_system'
|
16
|
+
autoload :Baseboard, 'amt/service/hardware_asset/baseboard'
|
17
|
+
autoload :Processor, 'amt/service/hardware_asset/processor'
|
18
|
+
autoload :MemoryModule, 'amt/service/hardware_asset/memory_module'
|
19
|
+
autoload :MediaDevice, 'amt/service/hardware_asset/media_device'
|
20
|
+
autoload :PortableBattery, 'amt/service/hardware_asset/portable_battery'
|
21
|
+
autoload :VproVerificationTable, 'amt/service/hardware_asset/vpro_verification_table'
|
22
|
+
autoload :AmtInformationTable, 'amt/service/hardware_asset/amt_information_table'
|
23
|
+
|
24
|
+
|
25
|
+
# Available asset types.
|
26
|
+
class AssetType < AMT::Utility::Enum
|
27
|
+
multi_add(2 => :bios, 3 => :computer_system, 4 => :baseboard, 5 => :processor,
|
28
|
+
6 => :memory_module, 7 => :fru, 8 => :media_device, 9 => :portable_battery,
|
29
|
+
10 => :vpro_verification_table, 11 => :amt_information_table)
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
# Return an array of supported hardware asset type names.
|
34
|
+
#
|
35
|
+
# All API supported asset type names are available as values in the ASSET_TYPES hash.
|
36
|
+
#
|
37
|
+
# Supported by AMT 1.0 and later.
|
38
|
+
def enumerate_asset_types
|
39
|
+
soap_call("EnumerateAssetTypes", 'Status').process do |node|
|
40
|
+
node.xpath('./ns:AssetTypes/ns:AssetType/text()').collect {|at| AssetType.for(at.to_i)}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
ASSET_TYPE_CLASS = {
|
46
|
+
2 => :Bios,
|
47
|
+
3 => :ComputerSystem,
|
48
|
+
4 => :Baseboard,
|
49
|
+
5 => :Processor,
|
50
|
+
6 => :MemoryModule,
|
51
|
+
7 => :FRU,
|
52
|
+
8 => :MediaDevice,
|
53
|
+
9 => :PortableBattery,
|
54
|
+
10 => :VproVerificationTable,
|
55
|
+
11 => :AmtInformationTable
|
56
|
+
} #:nodoc:
|
57
|
+
|
58
|
+
# Return an array of all hardware asset data identified by the asset type +asset_type+.
|
59
|
+
#
|
60
|
+
# [+asset_type+] Can either be the numerical asset type, an asset type name or an instance of
|
61
|
+
# AssetType.
|
62
|
+
#
|
63
|
+
# The class of the returned values is different for every +asset_type+. See Bios,
|
64
|
+
# ComputerSystem, Baseboard, Processor, MemoryModule, FRU, MediaDevice, PortableBattery,
|
65
|
+
# VproVerificationTable and AmtInformationTable.
|
66
|
+
#
|
67
|
+
# Supported by AMT 1.0 and later.
|
68
|
+
def get_asset_data(asset_type)
|
69
|
+
soap_call("GetAssetData", 'Status') do |msg|
|
70
|
+
msg.add('ns:AssetType', AssetType.for(asset_type).value)
|
71
|
+
end.process do |node|
|
72
|
+
node.xpath('./ns:AssetData/ns:AssetData').collect do |anode|
|
73
|
+
data = anode.xpath('./ns:AssetData/text()').to_s.unpack('m*').first
|
74
|
+
self.class.const_get(ASSET_TYPE_CLASS[anode.xpath('./ns:AssetType/text()').to_i]).new(data)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'amt/utility'
|
4
|
+
require 'amt/service/hardware_asset'
|
5
|
+
|
6
|
+
module AMT
|
7
|
+
module Service
|
8
|
+
class HardwareAsset
|
9
|
+
|
10
|
+
|
11
|
+
# Represents a structure with information about AMT capabilities.
|
12
|
+
#
|
13
|
+
# Available fields:
|
14
|
+
#
|
15
|
+
# [+amt_supported?+] +true+ if Intel AMT is supported.
|
16
|
+
# [+amt_enabled?+] +true+ if Intel AMT is enabled.
|
17
|
+
# [+ider_enabled?+] +true+ if IDE redirection is enabled.
|
18
|
+
# [+sol_enabled?+] +true+ if Serial Over Lan capability is enabled.
|
19
|
+
# [+network_enabled?+] +true+ if the network interface of the AMT device is enabled.
|
20
|
+
# [+extended_data+] OEM specific data.
|
21
|
+
# [+oem_capabilities+] OEM specific AMT capabilities (an instance of OemCapabilities).
|
22
|
+
class AmtInformationTable < Asset
|
23
|
+
|
24
|
+
# Defines a set of bit flags that indicate the features the AMT additional supports.
|
25
|
+
class OemCapabilities < AMT::Utility::BitStruct
|
26
|
+
boolean 24, :ider_supported, 'IDE Redirection Supported'
|
27
|
+
boolean 25, :sol_supported, 'Serial over LAN Supported'
|
28
|
+
boolean 26, :bios_reflash_supported, 'BIOS reflash supported'
|
29
|
+
boolean 27, :bios_setup_supported, 'BIOS boot into setup screen supported'
|
30
|
+
boolean 28, :bios_pause_supported, 'BIOS pause before booting operating system supported'
|
31
|
+
boolean 29, :no_floppy_boot, 'BIOS does not support boot from Floppy'
|
32
|
+
boolean 30, :no_cd_boot, 'BIOS does not support boot from CD device'
|
33
|
+
end
|
34
|
+
|
35
|
+
set_unpack_data "IC6Ix2", 16, [[:amt_supported, :boolean], [:amt_enabled, :boolean], [:ider_enabled, :boolean],
|
36
|
+
[:sol_enabled, :boolean], [:network_enabled, :boolean], :extended_data,
|
37
|
+
:oem_capabilities]
|
38
|
+
|
39
|
+
def init_data(data) #:nodoc:
|
40
|
+
super
|
41
|
+
@oem_capabilities = OemCapabilities.new(@oem_capabilities)
|
42
|
+
end
|
43
|
+
private :init_data
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module AMT
|
4
|
+
module Service
|
5
|
+
class HardwareAsset
|
6
|
+
|
7
|
+
# Utility base class which provides methods for easily unpacking the byte stream returned by
|
8
|
+
# AMT::Service::HardwareAsset#get_asset_data.
|
9
|
+
#
|
10
|
+
# Each asset class is derived from this class.
|
11
|
+
class Asset
|
12
|
+
|
13
|
+
# Set the +code+ that is used to unpack the byte stream data. +size+ is the expected (and
|
14
|
+
# fixed) size of the byte stream. +repr+ is an array of fields (or arrays when you also want
|
15
|
+
# to specify the field type and optionally field data) and should be matched to the order of
|
16
|
+
# the unpacked data.
|
17
|
+
#
|
18
|
+
# If +repr+ is specified, an accessor method for each field is created.
|
19
|
+
def self.set_unpack_data(code, size, repr = nil)
|
20
|
+
@code = code
|
21
|
+
@size = size
|
22
|
+
@repr = repr
|
23
|
+
if !repr.nil?
|
24
|
+
repr.each do |field, repr, repr_data|
|
25
|
+
define_method(repr == :boolean ? field.to_s + "?" : field) { instance_variable_get("@#{field}".intern) }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Return the byte stream unpack code for the specific asset class.
|
31
|
+
def self.unpack_code
|
32
|
+
@code
|
33
|
+
end
|
34
|
+
|
35
|
+
# Return the predetermined size of the byte stream for the specific asset class.
|
36
|
+
def self.unpack_size
|
37
|
+
@size
|
38
|
+
end
|
39
|
+
|
40
|
+
# Return the byte stream representation data if set.
|
41
|
+
def self.unpack_repr
|
42
|
+
@repr
|
43
|
+
end
|
44
|
+
|
45
|
+
# The version of the asset structure.
|
46
|
+
attr_reader :structure_version
|
47
|
+
|
48
|
+
|
49
|
+
# Use the data from the byte stream +stream+ to set all needed values.
|
50
|
+
def initialize(stream)
|
51
|
+
if stream.size != self.class.unpack_size
|
52
|
+
raise ArgumentError, "The given byte stream has invalid length (#{stream.size} != #{self.class.unpack_size})"
|
53
|
+
end
|
54
|
+
sv, *rest = *stream.unpack(self.class.unpack_code)
|
55
|
+
@structure_version = as_structure_version(sv)
|
56
|
+
if @structure_version != '1.0'
|
57
|
+
raise ArgumentError, "Only Asset structures with version 1.0 are supported (got #{@structure_version})"
|
58
|
+
end
|
59
|
+
init_data(rest)
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
# Initialize all fields specified in <tt>Asset.unpack_repr</tt> with the data from the
|
65
|
+
# stream.
|
66
|
+
def init_data(data)
|
67
|
+
self.class.unpack_repr.each_with_index do |(field, repr, repr_data), index|
|
68
|
+
value = if repr.nil? then (data[index].kind_of?(String) ? data[index].strip : data[index])
|
69
|
+
elsif repr == :raw then data[index]
|
70
|
+
elsif repr == :date then as_date(data[index])
|
71
|
+
elsif repr == :uuid then as_uuid(data[index])
|
72
|
+
elsif repr == :boolean then as_boolean(data[index])
|
73
|
+
elsif repr == :enum then as_enum(data[index], repr_data)
|
74
|
+
elsif repr == :struct then as_bit_struct(data[index], repr_data)
|
75
|
+
elsif repr.kind_of?(Proc) then repr.call(data[index])
|
76
|
+
else raise ArgumentError, "Unsupported asset field representation: #{repr}"
|
77
|
+
end
|
78
|
+
instance_variable_set("@#{field}".intern, value)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Treat +data+ as if it were a structure version field and extract the structure version.
|
83
|
+
def as_structure_version(data)
|
84
|
+
[data].pack('I').unpack("ss").join('.')
|
85
|
+
end
|
86
|
+
|
87
|
+
# Treat +data+ as if it were a string containing a date in the form mm/dd/yyyy and extract
|
88
|
+
# the date.
|
89
|
+
def as_date(data)
|
90
|
+
month, day, year = data.scan(/(\d\d)\/(\d\d)\/(\d\d\d\d)/).first
|
91
|
+
Date.new(year.to_i, month.to_i, day.to_i)
|
92
|
+
end
|
93
|
+
|
94
|
+
# Treat +data+ as boolean, ie. as value +true+ if it is +1+ and +false+ otherwise.
|
95
|
+
def as_boolean(data)
|
96
|
+
data.to_i == 1
|
97
|
+
end
|
98
|
+
|
99
|
+
# Treat +data+ as enumeration of type +enum_type+.
|
100
|
+
def as_enum(data, enum_type)
|
101
|
+
enum_type.for(data)
|
102
|
+
end
|
103
|
+
|
104
|
+
# Treat +data+ as BitStruct of type +bit_struct_type+.
|
105
|
+
def as_bit_struct(data, bit_struct_type)
|
106
|
+
bit_struct_type.new(data)
|
107
|
+
end
|
108
|
+
|
109
|
+
# Treat +data+ as an UUID.
|
110
|
+
def as_uuid(data)
|
111
|
+
AMT::Utility.binary_to_uuid(data)
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'amt/service/hardware_asset'
|
4
|
+
|
5
|
+
module AMT
|
6
|
+
module Service
|
7
|
+
class HardwareAsset
|
8
|
+
|
9
|
+
# Represents the baseboard of the computer system managed by the AMT device.
|
10
|
+
#
|
11
|
+
# There is at most one instance of this class in the hardware asset inventory of each AMT
|
12
|
+
# device.
|
13
|
+
#
|
14
|
+
# Available fields:
|
15
|
+
#
|
16
|
+
# [+manufacturer+] The name of the manufacturer of the baseboard.
|
17
|
+
# [+product+] The name of the baseboard.
|
18
|
+
# [+version+] The version of the baseboard.
|
19
|
+
# [+serial_number+] The serial number of the baseboard.
|
20
|
+
# [+asset_tag+] The asset tag string of the baseboard.
|
21
|
+
# [+replaceable?+] If the baseboard is replaceable, then +true+, else +false+.
|
22
|
+
class Baseboard < Asset
|
23
|
+
|
24
|
+
set_unpack_data "IZ65Z65Z65Z65Z65Cx2", 332, [:manufacturer, :product, :version, :serial_number,
|
25
|
+
:asset_tag, [:replaceable, :boolean]]
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'amt/utility'
|
4
|
+
require 'amt/service/hardware_asset'
|
5
|
+
|
6
|
+
module AMT
|
7
|
+
module Service
|
8
|
+
class HardwareAsset
|
9
|
+
|
10
|
+
# Represents the BIOS of the AMT device.
|
11
|
+
#
|
12
|
+
# There is at most one instance of this class in the hardware asset inventory of each AMT
|
13
|
+
# device.
|
14
|
+
#
|
15
|
+
# Available fields:
|
16
|
+
#
|
17
|
+
# [+vendor+] The name of the BIOS vendor.
|
18
|
+
# [+version+] The version of the system BIOS image.
|
19
|
+
# [+release_date+] The release date of the system BIOS image.
|
20
|
+
# [+characteristics+] Defines which functions the BIOS supports (an instance of
|
21
|
+
# Characteristics).
|
22
|
+
class Bios < Asset
|
23
|
+
|
24
|
+
# Defines a set of bit flags that indicate the features the BIOS supports.
|
25
|
+
class Characteristics < AMT::Utility::BitStruct
|
26
|
+
boolean 2, :unknown, 'Unknown'
|
27
|
+
boolean 3, :bios_characteristics_not_supported, 'BIOS Characteristics Not Supported'
|
28
|
+
boolean 4, :isa_supported, 'ISA is supported'
|
29
|
+
boolean 5, :mca_supported, 'MCA is supported'
|
30
|
+
boolean 6, :eisa_supported, 'EISA is supported'
|
31
|
+
boolean 7, :pci_supported, 'PCI is supported'
|
32
|
+
boolean 8, :pc_card_supported, 'PC Card (PCMCIA) is supported'
|
33
|
+
boolean 9, :pnp_supported, 'Plug and Play is supported'
|
34
|
+
boolean 10, :apm_supported, 'APM is supported'
|
35
|
+
boolean 11, :bios_upgradeable, 'BIOS is Upgradeable (Flash)'
|
36
|
+
boolean 12, :bios_shadowing_allowed, 'BIOS shadowing is allowed'
|
37
|
+
boolean 13, :vl_vesa_supported, 'VL-VESA is supported'
|
38
|
+
boolean 14, :escd_supported, 'ESCD support is available'
|
39
|
+
boolean 15, :boot_from_CD_supported, 'Boot from CD is supported'
|
40
|
+
boolean 16, :selectable_boot_supported, 'Selectable Boot is supported'
|
41
|
+
boolean 17, :bios_rom_socketed, 'BIOS ROM is socketed '
|
42
|
+
boolean 18, :boot_from_PC_card_supported, 'Boot From PC Card (PCMCIA) is supported'
|
43
|
+
boolean 19, :edd_spec_supported, 'EDD (Enhanced Disk Drive) Specification is supported'
|
44
|
+
boolean 20, :int13h_floppy_for_NEC_9800_supported, 'Int 13h - Japanese Floppy for NEC 9800 1.2mb (3.5", 1k Bytes/Sector, 360 RPM) is supported'
|
45
|
+
boolean 21, :int13h_floppy_for_Toshiba_supported, 'Int 13h - Japanese Floppy for Toshiba 1.2mb (3.5", 360 RPM) is supported'
|
46
|
+
boolean 22, :int13h_5_25_in_360_kb_floppy_supported, 'Int 13h - 5.25" / 360 KB Floppy Services are supported'
|
47
|
+
boolean 23, :int13h_5_25_in_1_2_mb_floppy_supported, 'Int 13h - 5.25" /1.2MB Floppy Services are supported'
|
48
|
+
boolean 24, :int13h_3_5_in_720_kb_floppy_supported, 'Int 13h - 3.5" / 720 KB Floppy Services are supported'
|
49
|
+
boolean 25, :int13h_3_5_in_2_88_mb_floppy_supported, 'Int 13h - 3.5" / 2.88 MB Floppy Services are supported'
|
50
|
+
boolean 26, :int5h_print_screen_services_supported, 'Int 5h, Print Screen Service is supported'
|
51
|
+
boolean 27, :int9h_8042_keyboard_services_supported, 'Int 9h, 8042 Keyboard services are supported'
|
52
|
+
boolean 28, :int14h_serial_services_supported, 'Int 14h, Serial Services are supported'
|
53
|
+
boolean 29, :int17h_printer_services_supported, 'Int 17h, Printer Services are supported'
|
54
|
+
boolean 30, :int10h_CGA_and_mono_video_supported, 'Int 10h, CGA/Mono Video Services are supported'
|
55
|
+
boolean 31, :nec_pc_98, 'NEC PC-98'
|
56
|
+
end
|
57
|
+
|
58
|
+
set_unpack_data "IZ65Z65Z65xI", 204, [:vendor, :version, [:release_date, :date],
|
59
|
+
[:characteristics, :struct, Characteristics]]
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'amt/service/hardware_asset'
|
4
|
+
|
5
|
+
module AMT
|
6
|
+
module Service
|
7
|
+
class HardwareAsset
|
8
|
+
|
9
|
+
# Represents the computer system that is managed by AMT device.
|
10
|
+
#
|
11
|
+
# There is at most one instance of this class in the hardware asset inventory of each AMT
|
12
|
+
# device.
|
13
|
+
#
|
14
|
+
# Available fields:
|
15
|
+
#
|
16
|
+
# [+manufacturer+] The name of the system manufacturer.
|
17
|
+
# [+product+] The name of the system product.
|
18
|
+
# [+version+] The version of the system product.
|
19
|
+
# [+serial_number+] The serial number of the system.
|
20
|
+
# [+uuid+] The UUID (Universal Unique ID) of the system. If it contains only +ff+, then the
|
21
|
+
# UUID is not present but setable. If it contains only +00+, then it is not present.
|
22
|
+
class ComputerSystem < Asset
|
23
|
+
|
24
|
+
set_unpack_data "IZ65Z65Z65Z65H32", 280, [:manufacturer, :product, :version, :serial_number, [:uuid, :uuid]]
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'amt/service/hardware_asset'
|
4
|
+
|
5
|
+
module AMT
|
6
|
+
module Service
|
7
|
+
class HardwareAsset
|
8
|
+
|
9
|
+
# Represents a PCI/AGP add-in device of the system managed by the AMT device.
|
10
|
+
#
|
11
|
+
# There is at most one instance of this class for every PCI or AGP FRU in the hardware asset
|
12
|
+
# inventory of each AMT device.
|
13
|
+
#
|
14
|
+
# Available fields:
|
15
|
+
#
|
16
|
+
# [+vendor_id+] The value in the Vendor ID configuration space register.
|
17
|
+
# [+device_id+] The value in the Device ID configuration space register.
|
18
|
+
# [+revision_id+] The value in the Revision ID configuration space register.
|
19
|
+
# [+prog_if+] The value in the Programming Interface byte in the Class Code configuration
|
20
|
+
# space register
|
21
|
+
# [+subclass+] The value in the Subclass byte in the Class Code configuration space register.
|
22
|
+
# [+base_class+] The value in the Base Class byte in the Class Code configuration space
|
23
|
+
# register.
|
24
|
+
# [+subvendor_id+] The value in the Subvendor ID configuration space register.
|
25
|
+
# [+subsystem_id+] The value in the Subsystem ID configuration space register.
|
26
|
+
# [+device_location+] The bus and slot number where the device is installed.
|
27
|
+
class FRU < Asset
|
28
|
+
|
29
|
+
set_unpack_data "ISSCCCCSSSx2", 20, [:vendor_id, :device_id, :revision_id, :prog_if, :subclass, :base_class,
|
30
|
+
:subvendor_id, :subsystem_id, :device_location]
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'amt/utility'
|
4
|
+
require 'amt/service/hardware_asset'
|
5
|
+
|
6
|
+
module AMT
|
7
|
+
module Service
|
8
|
+
class HardwareAsset
|
9
|
+
|
10
|
+
# Represents an IDE/SATA device of the system managed by the AMT device.
|
11
|
+
#
|
12
|
+
# There is at most one instance of this class for every physical media device in the hardware
|
13
|
+
# asset inventory of each AMT device.
|
14
|
+
#
|
15
|
+
# Available fields:
|
16
|
+
#
|
17
|
+
# [+model_number+] The model number of the media device.
|
18
|
+
# [+serial_number+] The serial number of the media device.
|
19
|
+
# [+capabilities+] The capabilities of the media device (an instance of Capabilities).
|
20
|
+
# [+max_media_size+] The maximum size in bytes of supported media.
|
21
|
+
class MediaDevice < Asset
|
22
|
+
|
23
|
+
# The capabilities of a media device.
|
24
|
+
class Capabilities < AMT::Utility::BitStruct
|
25
|
+
boolean 0, :smart_fs_supported, 'SMART feature set supported'
|
26
|
+
boolean 1, :security_mode_fs_supporte, 'Security Mode feature set supported'
|
27
|
+
boolean 2, :removable_media_fs_supported, 'Removable Media feature set supported'
|
28
|
+
boolean 3, :power_management_fs_supported, 'Power Management feature set supported'
|
29
|
+
boolean 4, :packet_command_fs_supported, 'PACKET Command feature set supported'
|
30
|
+
boolean 5, :write_cache_supported, 'write cache supported'
|
31
|
+
boolean 6, :look_ahead_supported, 'look-ahead supported'
|
32
|
+
boolean 7, :release_interrupt_supported, 'release interrupt supported'
|
33
|
+
boolean 8, :service_interrupt_supported, 'SERVICE interrupt supported'
|
34
|
+
boolean 9, :device_reset_command_supported, 'DEVICE RESET command supported'
|
35
|
+
boolean 10, :host_protected_area_fs_supported, 'Host Protected Area feature set supported'
|
36
|
+
boolean 12, :write_buffer_command_supported, 'WRITE BUFFER command supported'
|
37
|
+
boolean 13, :read_buffer_command_supported, 'READ BUFFER command supported'
|
38
|
+
boolean 15, :nop_command_supported, 'NOP command supported'
|
39
|
+
boolean 16, :download_microcode_command_supported, 'DOWNLOAD MICROCODE command supported'
|
40
|
+
boolean 17, :read_write_dma_queued_supported, 'READ/WRITE DMA QUEUED supported'
|
41
|
+
boolean 18, :cfa_fs_supported, 'CFA feature set supported'
|
42
|
+
boolean 19, :advanced_power_management_fs_supported, 'Advanced Power Management feature set supported'
|
43
|
+
boolean 20, :remove_media_status_notification_fs_supported, 'Removable Media Status Notification feature set supported'
|
44
|
+
end
|
45
|
+
|
46
|
+
set_unpack_data "IA40A20a6a8x2", 80, [:model_number, :serial_number, [:capabilities, :raw],
|
47
|
+
[:max_media_size, lambda {|d|
|
48
|
+
low, high = d.unpack("II")
|
49
|
+
(high << 32) + low
|
50
|
+
}]]
|
51
|
+
|
52
|
+
def init_data(data) # :nodoc:
|
53
|
+
super
|
54
|
+
first, second, last = *@capabilities.unpack("SSS")
|
55
|
+
@capabilities = Capabilities.new((first << 32) + (second << 16) + last)
|
56
|
+
end
|
57
|
+
private :init_data
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|