/* SPDX-License-Identifier: BSD-3-Clause */ #ifndef PEI_DATA_H #define PEI_DATA_H #include typedef void (*tx_byte_func)(unsigned char byte); #define PEI_VERSION 15 #define SPD_LEN 256 #define PEI_USB_OC_PIN_SKIP 8 enum pei_usb2_port_location { PEI_USB_PORT_BACK_PANEL = 0, PEI_USB_PORT_FRONT_PANEL, PEI_USB_PORT_DOCK, PEI_USB_PORT_MINI_PCIE, PEI_USB_PORT_FLEX, PEI_USB_PORT_INTERNAL, PEI_USB_PORT_SKIP }; /* Usb Port Length: * [16:4] = length in inches in octal format * [3:0] = decimal point */ struct pei_usb2_port_setting { uint16_t length; uint8_t enable; uint8_t over_current_pin; uint8_t location; } __packed; struct pei_usb3_port_setting { uint8_t enable; uint8_t over_current_pin; } __packed; struct pei_data { uint32_t pei_version; uint32_t mchbar; uint32_t dmibar; uint32_t epbar; uint32_t pciexbar; uint16_t smbusbar; /* Unused by HSW MRC, but changes to the memory layout of this struct break the ABI */ uint32_t _unused_wdbbar; uint32_t _unused_wdbsize; uint32_t hpet_address; uint32_t rcba; uint32_t pmbase; uint32_t gpiobase; uint32_t temp_mmio_base; /* System type: 0 => Mobile, 1 => Desktop/Server, 5 => ULT, Others => Reserved */ uint32_t system_type; uint32_t tseg_size; uint8_t spd_addresses[4]; int boot_mode; int ec_present; int gbe_enable; // 0 = leave channel enabled // 1 = disable dimm 0 on channel // 2 = disable dimm 1 on channel // 3 = disable dimm 0+1 on channel int dimm_channel0_disabled; int dimm_channel1_disabled; /* Enable 2x Refresh Mode */ int ddr_refresh_2x; int dq_pins_interleaved; /* Data read from flash and passed into MRC */ unsigned char *mrc_input; unsigned int mrc_input_len; /* Data from MRC that should be saved to flash */ unsigned char *mrc_output; unsigned int mrc_output_len; /* Max frequency to run DDR3 at. Can be one of four values: 800, 1067, 1333, 1600 */ uint32_t max_ddr3_freq; /* Route all USB ports to XHCI controller in resume path */ int usb_xhci_on_resume; struct pei_usb2_port_setting usb2_ports[16]; struct pei_usb3_port_setting usb3_ports[16]; uint8_t spd_data[4][SPD_LEN]; tx_byte_func tx_byte; } __packed; #endif