| #!/usr/bin/env python | 
 |  | 
 | r""" | 
 | This module provides some functions for Secure Boot verification. | 
 | """ | 
 |  | 
 | import bmc_ssh_utils as bsu | 
 | import var_funcs as vf | 
 | from robot.libraries.BuiltIn import BuiltIn | 
 |  | 
 |  | 
 | # Define 'constant' functions. | 
 | def secure_boot_mask(): | 
 |  | 
 |     return 0x08000000 | 
 |  | 
 |  | 
 | def jumper_mask(): | 
 |  | 
 |     return 0x04000000 | 
 |  | 
 |  | 
 | class secureboot(object): | 
 |  | 
 |     def get_secure_boot_info(self, quiet=None): | 
 |         r""" | 
 |         Get secure-boot information and return it as a tuple consisting of | 
 |         num_procs, secure_boot, jumper. | 
 |  | 
 |         num_procs is the number of processors containing the information. | 
 |  | 
 |         secure_boot will be set to True if each and every register value | 
 |         in question has its secureboot bit set (Bit 4). | 
 |  | 
 |         jumper will be set to True if each and every register value | 
 |         in question has its jumper bit set (Bit 5). | 
 |  | 
 |         Description of argument(s): | 
 |         quiet                           See shell_cmd for details. | 
 |         """ | 
 |  | 
 |         cmd_buf = "pdbg -d p9w -a getcfam 0x2801" | 
 |         out_buf, stderr, rc = bsu.bmc_execute_command(cmd_buf, quiet=quiet) | 
 |  | 
 |         # Convert result to a dictionary with one key for each processor: | 
 |         # result: | 
 |         #   [p0:0x2801]:               0x80c00002 | 
 |         #   [p1:0x2801]:               0x90c00002 | 
 |         result = vf.key_value_outbuf_to_dict(out_buf, delim="=") | 
 |  | 
 |         num_procs = len(result) | 
 |         # Initialize values to True. | 
 |         secure_boot = True | 
 |         jumper = True | 
 |  | 
 |         for key, value in result.items(): | 
 |             # Convert hex string to int. | 
 |             reg_value = int(value, 16) | 
 |             if not reg_value & secure_boot_mask(): | 
 |                 secure_boot = False | 
 |             if not reg_value & jumper_mask(): | 
 |                 jumper = False | 
 |  | 
 |         return num_procs, secure_boot, jumper |