uefi_bs.rs 1016 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. use crate::{HeaderTagFlag, HeaderTagType};
  2. use core::mem::size_of;
  3. /// This tag indicates that payload supports starting without terminating UEFI boot services.
  4. /// Or in other words: The payload wants to use UEFI boot services.
  5. #[derive(Copy, Clone, Debug)]
  6. #[repr(C)]
  7. pub struct EfiBootServiceHeaderTag {
  8. typ: HeaderTagType,
  9. flags: HeaderTagFlag,
  10. size: u32,
  11. }
  12. impl EfiBootServiceHeaderTag {
  13. pub const fn new(flags: HeaderTagFlag) -> Self {
  14. EfiBootServiceHeaderTag {
  15. typ: HeaderTagType::EfiBS,
  16. flags,
  17. size: size_of::<Self>() as u32,
  18. }
  19. }
  20. pub const fn typ(&self) -> HeaderTagType {
  21. self.typ
  22. }
  23. pub const fn flags(&self) -> HeaderTagFlag {
  24. self.flags
  25. }
  26. pub const fn size(&self) -> u32 {
  27. self.size
  28. }
  29. }
  30. #[cfg(test)]
  31. mod tests {
  32. use crate::EfiBootServiceHeaderTag;
  33. #[test]
  34. fn test_assert_size() {
  35. assert_eq!(core::mem::size_of::<EfiBootServiceHeaderTag>(), 2 + 2 + 4);
  36. }
  37. }