Serenity Operating System
1/*
2 * Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <AK/Types.h>
10
11namespace Kernel::IntelGraphics {
12
13enum class Generation {
14 Gen4,
15 Gen9,
16};
17
18struct PLLSettings;
19
20struct PLLParameterLimit {
21 size_t min, max;
22};
23
24struct PLLMaxSettings {
25 PLLParameterLimit dot_clock, vco, n, m, m1, m2, p, p1, p2;
26};
27
28struct PLLSettings {
29 bool is_valid() const { return (n != 0 && m1 != 0 && m2 != 0 && p1 != 0 && p2 != 0); }
30 u64 compute_dot_clock(u64 refclock) const
31 {
32 return (refclock * (5 * m1 + m2) / n) / (p1 * p2);
33 }
34
35 u64 compute_vco(u64 refclock) const
36 {
37 return refclock * (5 * m1 + m2) / n;
38 }
39
40 u64 compute_m() const
41 {
42 return 5 * m1 + m2;
43 }
44
45 u64 compute_p() const
46 {
47 return p1 * p2;
48 }
49 u64 n { 0 };
50 u64 m1 { 0 };
51 u64 m2 { 0 };
52 u64 p1 { 0 };
53 u64 p2 { 0 };
54};
55}