^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #ifndef _ARCH_X86_KERNEL_SYSFB_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #define _ARCH_X86_KERNEL_SYSFB_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Generic System Framebuffers on x86
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Copyright (c) 2012-2013 David Herrmann <dh.herrmann@gmail.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/kernel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/platform_data/simplefb.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/screen_info.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) M_I17, /* 17-Inch iMac */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) M_I20, /* 20-Inch iMac */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) M_I20_SR, /* 20-Inch iMac (Santa Rosa) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) M_I24, /* 24-Inch iMac */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) M_I24_8_1, /* 24-Inch iMac, 8,1th gen */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) M_I24_10_1, /* 24-Inch iMac, 10,1th gen */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) M_I27_11_1, /* 27-Inch iMac, 11,1th gen */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) M_MINI, /* Mac Mini */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) M_MINI_3_1, /* Mac Mini, 3,1th gen */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) M_MINI_4_1, /* Mac Mini, 4,1th gen */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) M_MB, /* MacBook */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) M_MB_2, /* MacBook, 2nd rev. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) M_MB_3, /* MacBook, 3rd rev. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) M_MB_5_1, /* MacBook, 5th rev. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) M_MB_6_1, /* MacBook, 6th rev. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) M_MB_7_1, /* MacBook, 7th rev. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) M_MB_SR, /* MacBook, 2nd gen, (Santa Rosa) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) M_MBA, /* MacBook Air */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) M_MBA_3, /* Macbook Air, 3rd rev */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) M_MBP, /* MacBook Pro */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) M_MBP_2, /* MacBook Pro 2nd gen */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) M_MBP_2_2, /* MacBook Pro 2,2nd gen */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) M_MBP_SR, /* MacBook Pro (Santa Rosa) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) M_MBP_4, /* MacBook Pro, 4th gen */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) M_MBP_5_1, /* MacBook Pro, 5,1th gen */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) M_MBP_5_2, /* MacBook Pro, 5,2th gen */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) M_MBP_5_3, /* MacBook Pro, 5,3rd gen */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) M_MBP_6_1, /* MacBook Pro, 6,1th gen */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) M_MBP_6_2, /* MacBook Pro, 6,2th gen */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) M_MBP_7_1, /* MacBook Pro, 7,1th gen */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) M_MBP_8_2, /* MacBook Pro, 8,2nd gen */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) M_UNKNOWN /* placeholder */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) struct efifb_dmi_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) char *optname;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) unsigned long base;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) int stride;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) int width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) int height;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) int flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #ifdef CONFIG_EFI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) extern struct efifb_dmi_info efifb_dmi_list[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) void sysfb_apply_efi_quirks(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #else /* CONFIG_EFI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) static inline void sysfb_apply_efi_quirks(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) #endif /* CONFIG_EFI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #ifdef CONFIG_X86_SYSFB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) bool parse_mode(const struct screen_info *si,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) struct simplefb_platform_data *mode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) int create_simplefb(const struct screen_info *si,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) const struct simplefb_platform_data *mode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #else /* CONFIG_X86_SYSFB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) static inline bool parse_mode(const struct screen_info *si,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) struct simplefb_platform_data *mode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) return false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) static inline int create_simplefb(const struct screen_info *si,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) const struct simplefb_platform_data *mode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #endif /* CONFIG_X86_SYSFB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) #endif /* _ARCH_X86_KERNEL_SYSFB_H */