2
0
mirror of https://opendev.org/x/pyghmi synced 2025-05-30 01:26:41 +00:00

Add custom OEM firmware info parsing for Lenovo ThinkServers

Parse Version Info and add a command to retrieve it.

Change-Id: I7c321efb4861392fb4a9151ffd2a64ae2b5b7a42
This commit is contained in:
Juliana Motira 2015-08-19 09:33:51 -03:00
parent 037b31ab5b
commit 76f5c69e72
4 changed files with 75 additions and 0 deletions

View File

@ -1502,3 +1502,9 @@ class Command(object):
"""
self.set_user_password(uid, mode)
return True
def get_firmware(self):
"""Retrieve OEM Firmware information
"""
self.oem_init()
return self._oem.get_oem_firmware()

View File

@ -122,3 +122,8 @@ class OEMHandler(object):
return fru
fru['oem_parser'] = None
return fru
def get_oem_firmware(self):
"""Get Firmware information.
"""
return ()

View File

@ -0,0 +1,57 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2015 Lenovo
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from pyghmi.ipmi.oem.lenovo.inventory import EntryField, \
parse_inventory_category_entry
firmware_fields = (
EntryField("Revision", "B"),
EntryField("Bios", "16s"),
EntryField("Operational ME", "10s"),
EntryField("Recovery ME", "10s"),
EntryField("RAID 1", "16s"),
EntryField("RAID 2", "16s"),
EntryField("Mezz 1", "16s"),
EntryField("Mezz 2", "16s"),
EntryField("BMC", "16s"),
EntryField("LEPT", "16s"),
EntryField("PSU 1", "16s"),
EntryField("PSU 2", "16s"),
EntryField("CPLD", "16s"),
EntryField("LIND", "16s"),
EntryField("WIND", "16s"),
EntryField("DIAG", "16s"))
def parse_firmware_info(raw):
bytes_read, data = parse_inventory_category_entry(raw, firmware_fields)
del data['Revision']
for key in data:
yield(key, {'version': data[key]})
def get_categories():
return {
"firmware": {
"idstr": "FW Version",
"parser": parse_firmware_info,
"command": {
"netfn": 0x06,
"command": 0x59,
"data": (0x00, 0xc7, 0x00, 0x00)
}
}
}

View File

@ -25,6 +25,7 @@ import pyghmi.ipmi.private.util as util
from pyghmi.ipmi.oem.lenovo import cpu
from pyghmi.ipmi.oem.lenovo import dimm
from pyghmi.ipmi.oem.lenovo import drive
from pyghmi.ipmi.oem.lenovo import firmware
from pyghmi.ipmi.oem.lenovo import inventory
from pyghmi.ipmi.oem.lenovo import pci
from pyghmi.ipmi.oem.lenovo import psu
@ -280,3 +281,9 @@ class OEMHandler(generic.OEMHandler):
else:
fru['oem_parser'] = None
return fru
def get_oem_firmware(self):
if self.has_tsm:
command = firmware.get_categories()["firmware"]
rsp = self.ipmicmd.xraw_command(**command["command"])
return command["parser"](rsp["data"])