首页 > 其他分享 >UEFI 笔记 003 —— 什么是 ReportStatusCode

UEFI 笔记 003 —— 什么是 ReportStatusCode

时间:2024-11-17 23:33:02浏览次数:1  
标签:STATUS CODE 003 EFI UEFI POST ReportStatusCode Type

声明:个人笔记,概不负责

经典的 PC 在开机时,若出错,会 想尽办法 通知用户。
在贫瘠的资源下,通过 自带的小喇叭 滴滴滴,报告系统的状态,称为 beep code
在稍微富有的情况下,通过 数码管 显示一串神秘的数字,报告系统的状态,称为 POST code

UEFI 的 ReportStatusCode 明显是 POST Code 加强版。
它基本就是围绕着两个 UINT32 建立起的体系,一个为 Type,另一个为 Value。
离离原上谱的是,ReportStatusCode 非常强大,可以“外挂”许多数据,看上去与 POST Code 已经相去甚远,不太可能搞出个类似的 主板侦错卡。

[What are BIOS POST Codes? Explained!] (https://beebom.com/bios-post-codes/)
[POST自检及BIOS常见错误] (https://www.cnblogs.com/dingcx/p/9007851.html)

关于 ReportStatusCode 的官方描述,可以从此入手 https://uefi.org/specs/PI/1.8/V3_Status_Codes.html#status-codes
找到网上两篇,有点意思的 文章
(1) 2014 - The Design Pattern of UEFI Report Status Code
(2) UEFI Status Code机制

阐述 ReportStatusCode 的理念、实现、运用案例,颇费些笔墨。此处仅摘要,

理念= 围绕着两个 UINT32 建立起的体系,一个为 Type,另一个为 Value。
实现= 基本就是 Publisher-Subscriber pattern

// Concept of
//
EFI_STATUS
ReportStatusCode (
  IN EFI_STATUS_CODE_TYPE   Type,        // (one of) Progress, Error, Debug 
  IN EFI_STATUS_CODE_VALUE  Value,       // = class + subclass + op
  IN UINT32                 Instance,    // if (class + subclass) is not unique, + instance
  IN EFI_GUID               *ReporterId, // DXE module FILE_GUID
  IN EFI_STATUS_CODE_DATA   *Data        // additional data for Value
  );

///////////////////////////
//
// EFI_STATUS_CODE_TYPE
// +-------+-------+-------+-------+-------+-------+-------+-------+
// |3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1|1 1 1 1 1 1                    |
// |1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6|5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0|
// +-------+-------+-------------------------------+---------------+
// |   Severity    |                               |    Type       |
// +-+-+-+-+-------+-------------------------------+---------------+
//  m|m|u|u
//  j|n|c|r
//
//  Severity  - 0x80 = MAJOR     0x40 = MINOR
//              0x90 = UNRECOVERED = MAJOR + ur
//              0xA0 = UNCONTAINED = MAJOR + uc
//
//  Type      -  0x1 = PROGRESS  0x2 = ERROR,  0x3 = DEBUG
//
///////////////////////////
//
// EFI_STATUS_CODE_VALUE
// +-------+-------+-------+-------+-------+-------+-------+-------+
// |3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1|1 1 1 1 1 1                    |
// |1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6|5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0|
// +---------------+---------------+-------+-----------------------+
// |   Class       |   Subclass    |         Operation             |
// +---------------+---------------+-+---+-+-----------------------+
//                                  0 0 0 0 . . . . . . . . . . . .  Class common      0x0000 - 0x0FFF
//                                  0 0 0 1 . . . . . . . . . . . .  Subclass specific 0x1000 - 0x7FFF
//                                  0 . . . 
//                                  0 1 1 1 . . . . . . . . . . . .
//                                  1 . . . . . . . . . . . . . . .  OEM specific      0x8000 - 0xFFFF
// 
///////////////////////////


Publisher-Subscriber pattern
微软 Azure 文档(图比较好看)

Publisher-Subscriber pattern

标签:STATUS,CODE,003,EFI,UEFI,POST,ReportStatusCode,Type
From: https://www.cnblogs.com/you-yangyang/p/18551371

相关文章

  • UEFI 笔记 002 —— PrintLib.h
    https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Library/PrintLib.h//MdePkg\Include\Library\PrintLib.h//--2024-11-16////Thisfunctionissimilarassnprintf_sdefinedinC11.UnicodeSPrint(OUTCHAR16*,INUINTN,INconstCHAR16*......
  • [Tricks-00003]CF1989F 套路叠加,高级分治
    先说一个简单问题:给定一个\(n\timesm\)的黑白网格图,每次可以将一行或者一列染成同一种色,判断是否能到达?经典做法:倒过来考虑,每次将颜色全相同或为*的一行全染成*,判断是否可以将这张图染成全*。经典网格图转二分图,如果\(s_{i,j}='W'\)则将\(i\)向\(j'\)连一条有向边,否......
  • 青少年编程与数学 02-003 Go语言网络编程 20课题、Go语言常用框架
    青少年编程与数学02-003Go语言网络编程20课题、Go语言常用框架课题摘要:一、常用框架Web框架微服务框架数据库ORM框架测试框架工具和库二、GinGin的主要特点包括:Gin的基本使用:Gin的中间件:Gin的路由分组:三、BeegoBeego的主要特点包括:Beego的基本使用:Beego的ORM使用......
  • 「Mac玩转仓颉内测版12」PTA刷题篇3 - L1-003 个位数统计
    本篇将继续讲解PTA平台上的题目L1-003个位数统计,通过对数字的处理与统计,掌握基础的字符串操作与数组计数功能,进一步提升Cangjie编程语言的实际应用能力。关键词PTA刷题数字统计数组操作字符串处理编程技巧一、L1-003个位数统计题目描述:给定一个正整数,统计该数字中......
  • oracle RMAN Duplicate failing with RMAN-06136, ORA-01503, ORA-00349
     在数据迁移的时候遇到报错RMAN-00571:===========================================================RMAN-00569:===============ERRORMESSAGESTACKFOLLOWS===============RMAN-00571:===========================================================RMAN-03002:failur......
  • Primary Arithmetic UVA - 10035
    //PrimaryArithmeticUVA-10035.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*https://vjudge.net/problem/UVA-10035Childrenaretaughttoaddmulti-digitnumbersfromright-to-leftonedigitatatime.Manyfindthe"carry"operation......
  • DL00337-基于yolov11的阿尔兹海默症检测诊断含数据集python
    阿尔兹海默症是一种渐进性的神经退行性疾病,通常通过认知障碍、记忆丧失、语言障碍等症状表现出来。早期诊断是控制疾病发展的关键,但现有的诊断方法如临床评估、神经影像检查(CT、MRI等)通常具有一定的局限性。YOLOv11能够帮助提取医学影像中的有价值特征,进而辅助阿尔兹海默症的诊......
  • SpringBoot线上学习系统的设计与实现kt003 本系统(程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:用户,讲师,学级分类,科目分类,语音课程,视频课程,语音课程购买,视频课程购买,语音课程发送,视频课程发送开题报告内容一、项目背景与意义随着互联网技......
  • CSC1003 OJ system running Java SDK.
    CSC1003Assignment2ImportantNotes:Theassignmentisanindividualproject,tobefinishedonone’sowneffort.Theworkmustbesubmittedbefore6pmNov.8,2024(Friday),BeijingTime.Thisisafirmdeadline.Nolatesubmissionsareaccepted.Plag......
  • COMP0035 specification
    COMP0035Coursework012024CourseworkspecificationTableofcontentsIntroductionCourseworkspecificationGettingstartedGeneralrequirementsandconstraintsSection1:DataexplorationandpreparationSection2:DatabasedesignandcreationSection3:......