|  | /* SPDX-License-Identifier: GPL-2.0-only */ | 
|  | /* | 
|  | * intel-mid.h: Intel MID specific setup code | 
|  | * | 
|  | * (C) Copyright 2009 Intel Corporation | 
|  | */ | 
|  | #ifndef _ASM_X86_INTEL_MID_H | 
|  | #define _ASM_X86_INTEL_MID_H | 
|  |  | 
|  | #include <linux/sfi.h> | 
|  | #include <linux/pci.h> | 
|  | #include <linux/platform_device.h> | 
|  |  | 
|  | extern int intel_mid_pci_init(void); | 
|  | extern int intel_mid_pci_set_power_state(struct pci_dev *pdev, pci_power_t state); | 
|  | extern pci_power_t intel_mid_pci_get_power_state(struct pci_dev *pdev); | 
|  |  | 
|  | extern void intel_mid_pwr_power_off(void); | 
|  |  | 
|  | #define INTEL_MID_PWR_LSS_OFFSET	4 | 
|  | #define INTEL_MID_PWR_LSS_TYPE		(1 << 7) | 
|  |  | 
|  | extern int intel_mid_pwr_get_lss_id(struct pci_dev *pdev); | 
|  |  | 
|  | extern int get_gpio_by_name(const char *name); | 
|  | extern int __init sfi_parse_mrtc(struct sfi_table_header *table); | 
|  | extern int __init sfi_parse_mtmr(struct sfi_table_header *table); | 
|  | extern int sfi_mrtc_num; | 
|  | extern struct sfi_rtc_table_entry sfi_mrtc_array[]; | 
|  |  | 
|  | /* | 
|  | * Here defines the array of devices platform data that IAFW would export | 
|  | * through SFI "DEVS" table, we use name and type to match the device and | 
|  | * its platform data. | 
|  | */ | 
|  | struct devs_id { | 
|  | char name[SFI_NAME_LEN + 1]; | 
|  | u8 type; | 
|  | u8 delay; | 
|  | u8 msic; | 
|  | void *(*get_platform_data)(void *info); | 
|  | }; | 
|  |  | 
|  | #define sfi_device(i)								\ | 
|  | static const struct devs_id *const __intel_mid_sfi_##i##_dev __used	\ | 
|  | __section(".x86_intel_mid_dev.init") = &i | 
|  |  | 
|  | /** | 
|  | * struct mid_sd_board_info - template for SD device creation | 
|  | * @name:		identifies the driver | 
|  | * @bus_num:		board-specific identifier for a given SD controller | 
|  | * @max_clk:		the maximum frequency device supports | 
|  | * @platform_data:	the particular data stored there is driver-specific | 
|  | */ | 
|  | struct mid_sd_board_info { | 
|  | char		name[SFI_NAME_LEN]; | 
|  | int		bus_num; | 
|  | unsigned short	addr; | 
|  | u32		max_clk; | 
|  | void		*platform_data; | 
|  | }; | 
|  |  | 
|  | /* | 
|  | * Medfield is the follow-up of Moorestown, it combines two chip solution into | 
|  | * one. Other than that it also added always-on and constant tsc and lapic | 
|  | * timers. Medfield is the platform name, and the chip name is called Penwell | 
|  | * we treat Medfield/Penwell as a variant of Moorestown. Penwell can be | 
|  | * identified via MSRs. | 
|  | */ | 
|  | enum intel_mid_cpu_type { | 
|  | /* 1 was Moorestown */ | 
|  | INTEL_MID_CPU_CHIP_PENWELL = 2, | 
|  | INTEL_MID_CPU_CHIP_CLOVERVIEW, | 
|  | INTEL_MID_CPU_CHIP_TANGIER, | 
|  | }; | 
|  |  | 
|  | extern enum intel_mid_cpu_type __intel_mid_cpu_chip; | 
|  |  | 
|  | #ifdef CONFIG_X86_INTEL_MID | 
|  |  | 
|  | static inline enum intel_mid_cpu_type intel_mid_identify_cpu(void) | 
|  | { | 
|  | return __intel_mid_cpu_chip; | 
|  | } | 
|  |  | 
|  | static inline bool intel_mid_has_msic(void) | 
|  | { | 
|  | return (intel_mid_identify_cpu() == INTEL_MID_CPU_CHIP_PENWELL); | 
|  | } | 
|  |  | 
|  | extern void intel_scu_devices_create(void); | 
|  | extern void intel_scu_devices_destroy(void); | 
|  |  | 
|  | #else /* !CONFIG_X86_INTEL_MID */ | 
|  |  | 
|  | #define intel_mid_identify_cpu()	0 | 
|  | #define intel_mid_has_msic()		0 | 
|  |  | 
|  | static inline void intel_scu_devices_create(void) { } | 
|  | static inline void intel_scu_devices_destroy(void) { } | 
|  |  | 
|  | #endif /* !CONFIG_X86_INTEL_MID */ | 
|  |  | 
|  | enum intel_mid_timer_options { | 
|  | INTEL_MID_TIMER_DEFAULT, | 
|  | INTEL_MID_TIMER_APBT_ONLY, | 
|  | INTEL_MID_TIMER_LAPIC_APBT, | 
|  | }; | 
|  |  | 
|  | extern enum intel_mid_timer_options intel_mid_timer_options; | 
|  |  | 
|  | /* Bus Select SoC Fuse value */ | 
|  | #define BSEL_SOC_FUSE_MASK		0x7 | 
|  | /* FSB 133MHz */ | 
|  | #define BSEL_SOC_FUSE_001		0x1 | 
|  | /* FSB 100MHz */ | 
|  | #define BSEL_SOC_FUSE_101		0x5 | 
|  | /* FSB 83MHz */ | 
|  | #define BSEL_SOC_FUSE_111		0x7 | 
|  |  | 
|  | #define SFI_MTMR_MAX_NUM		8 | 
|  | #define SFI_MRTC_MAX			8 | 
|  |  | 
|  | /* VRTC timer */ | 
|  | #define MRST_VRTC_MAP_SZ		1024 | 
|  | /* #define MRST_VRTC_PGOFFSET		0xc00 */ | 
|  |  | 
|  | extern void intel_mid_rtc_init(void); | 
|  |  | 
|  | /* The offset for the mapping of global gpio pin to irq */ | 
|  | #define INTEL_MID_IRQ_OFFSET		0x100 | 
|  |  | 
|  | #endif /* _ASM_X86_INTEL_MID_H */ |