Definitions.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. * Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Types.h>
  8. namespace Kernel::Graphics {
  9. struct Timings {
  10. size_t blanking_start() const
  11. {
  12. return active;
  13. }
  14. size_t blanking_end() const
  15. {
  16. return total;
  17. }
  18. size_t active;
  19. size_t sync_start;
  20. size_t sync_end;
  21. size_t total;
  22. };
  23. struct Modesetting {
  24. size_t pixel_clock_in_khz;
  25. Timings horizontal;
  26. Timings vertical;
  27. };
  28. struct [[gnu::packed]] StandardTimings {
  29. u8 resolution;
  30. u8 frequency;
  31. };
  32. struct [[gnu::packed]] DetailTimings {
  33. u16 pixel_clock;
  34. u8 horizontal_active;
  35. u8 horizontal_blank;
  36. u8 horizontal_active_blank_msb;
  37. u8 vertical_active;
  38. u8 vertical_blank;
  39. u8 vertical_active_blank_msb;
  40. u8 horizontal_sync_offset;
  41. u8 horizontal_sync_pulse;
  42. u8 vertical_sync;
  43. u8 sync_msb;
  44. u8 dimension_width;
  45. u8 dimension_height;
  46. u8 dimension_msb;
  47. u8 horizontal_border;
  48. u8 vertical_border;
  49. u8 features;
  50. };
  51. struct [[gnu::packed]] VideoInfoBlock {
  52. u64 padding;
  53. u16 manufacture_id;
  54. u16 product_id;
  55. u32 serial_number;
  56. u8 manufacture_week;
  57. u8 manufacture_year;
  58. u8 edid_version;
  59. u8 edid_revision;
  60. u8 video_input_type;
  61. u8 max_horizontal_size;
  62. u8 max_vertical_size;
  63. u8 gama_factor;
  64. u8 dpms_flags;
  65. u8 chroma_info[10];
  66. u8 established_timing[2];
  67. u8 manufacture_reserved_timings;
  68. StandardTimings timings[8];
  69. DetailTimings details[4];
  70. u8 unused;
  71. u8 checksum;
  72. };
  73. static_assert(sizeof(VideoInfoBlock) == 128);
  74. }