# SPDX-License-Identifier: GPL-3.0-or-later

#
# Datasheets:
#
# https://cdrdv2.intel.com/v1/dl/getContent/613456

# The datasheet says that this spec covers the following pci ids:
# 8086:1502 - Intel 82579LM gigabit ethernet controller
# 8086:1503 - Intel 82579V gigabit ethernet controller

# Naming convention
# * Word groups separated by a blank line
# * Word groups with known meaning given a prefix
#	* prefix will be defined in comment before group
# * Variable names to be named using a prefix, descriptive name and bit offset
#   within the word, separated by an underscore.
#	* Example: "prefix_description_0"
# * Unidentified reserved word groups will be named reserved and LAN Word
#	* EXCEPTION: Word 0x24, Word 0x25, Word 0x26 also include bit offset
#   	  within the word
#   Offset hex address, separated by an underscore.
#	* Example: "reserved_x03"
# * Nonprefixed names will be  named reserved and LAN Word Offset hex address,
#   separated by an underscore.
#	* Example: "imageversioninfo_x05"
# * Unspecified words are prefixed with "offset_"

# GbE values for 82579LM
{
	# This example sets MAC address to 00:DE:AD:C0:FF:EE
	# USE YOUR DEVICES MAC ADDRESS!!
	# prefix: "mac_"
	"mac_address_0" = 0x00,
	"mac_address_1" = 0xDE,
	"mac_address_2" = 0xAD,
	"mac_address_3" = 0xC0,
	"mac_address_4" = 0xFF,
	"mac_address_5" = 0xEE,

	# Reserved (Word 0x3)
	"reserved_x03" = 0x0800,

	# Reserved (Word 0x04)
	"reserved_x04" = 0xffff,

	# Image Version Information (Word 0x05)
	"imageversioninfo_x05" = 0x00D3,

	"reserved_x06" = 0xffff,
	"reserved_x07" = 0xffff,

	# PBA Low and PBA High (Words 0x08 and 0x09)
	# prefix: "pba_"
	"pba_low_x08" = 0xffff,
	"pba_high_x09" = 0xffff,

	# PCI Init Control Word (Word 0x0A)
	# prefix: "pci_"
	"pci_loaddeviceid_0" = 1,
	"pci_loadsubsystemid_1" = 1,
	"pci_reserved_2" = 0,
	"pci_reserved_3" = 0x0,
	"pci_pmenable_6" = 1,
	"pci_auxpwr_7" = 1,
	"pci_reserved_8" = 0x10,

	# ************* Configurable PCI IDs ****************
	# TODO: make command line switch for these
	# Subsystem ID (Word 0x0B)
	"subsystemid_x0B" = 0,
	# Subsystem Vendor ID (Word 0x0C)
	"subsystemvendorid_x0C" = 0x8086,
	# Device ID (Word 0x0D)
	# TODO: 82579V uses "deviceid_x0D" = 0x1503,
	"deviceid_x0D" = 0x1502,
	# ************* END Configurable PCI IDs ****************

	# Words 0x0E and 0x0F Are Reserved
	"reserved_x0E" = 0x0,
	"reserved_x0F" = 0x0,

	# LAN Power Consumption (Word 0x10)
	# prefix: "lanpwr_"
	"lanpwr_d3pwr_0" = 0x2,
	"lanpwr_reserved_5" = 0,
	"lanpwr_d0pwr_8" = 0x7,

	# Word 0x12 and Word 0x11 Are Reserved
	"reserved_x11" = 0x0000,
	"reserved_x12" = 0x0000,

	# Shared Init Control Word (Word 0x13)
	# prefix: "sicw_"
	"sicw_dynamicclock_0" = 1,
	"sicw_clkcnt_1" = 0,
	"sicw_reserved_2" = 1,
	"sicw_fullduplex_3" = 0,
	"sicw_forcespeed_4" = 0,
	"sicw_reserved_5" = 0,
	"sicw_phydeviceype_6" = 0,
	"sicw_reserved_8" = 1,
	"sicw_phy_enpwrdown_9" = 0,
	"sicw_reserved_10" = 1,
	"sicw_macsecdisable_13" = 1,
	"sicw_sign_14" = 0x2,

	# Extended Configuration Word 1 (Word 0x14)
	# prefix: "ecw1_"
	"ecw1_extcfgptr_0" = 0x0028,
	"ecw1_oemload_12" = 1,
	"ecw1_phyload_13" = 1,
	"ecw1_reserved_14" = 0,

	# Extended Configuration Word 2 (Word 0x15)
	# prefix: "ecw2_"
	"ecw2_reserved_0" = 0x00,
	"ecw2_extphylen_8" = 0x12,

	# Extended Configuration Word 3 (Word 0x16)
	# prefix: "ecw3_"
	"ecw3_extcfg1_0" = 0x00,

	# OEM Configuration Defaults (Word 0x17)
	# prefix: "oem_"
	"oem_reserved_0" = 0x000,
	"oem_lpluenind0a_9" = 0,
	"oem_lplueninnond0a_10" = 1,
	"oem_gbedisinnond0a_11" = 1,
	"oem_reserved_12" = 0,
	"oem_gbedis_14" = 0,
	"oem_reserved_15" = 0,

	# LED 0 - 2 Configuration Defaults (Word 0x18)
	# prefix: "l02_"
	# Lenovo default values
	"l02_led0mode_0" = 0x4,
	"l02_led0invert_3" = 0,
	"l02_led0blink_4" = 0,
	"l02_led1mode_5" = 0x3,
	"l02_led1invert_8" = 0,
	"l02_led1blink_9" = 1,
	"l02_led2mode_10" = 0x2,
	"l02_led2invert_13" = 1,
	"l02_led2blink_14" = 0,
	"l02_blinkrate_15" = 0,

	# Intel default Values
	#"l02_led0mode_0" = 0x4,
	#"l02_led0invert_3" = 0,
	#"l02_led0blink_4" = 1,
	#"l02_led1mode_5" = 0x7,
	#"l02_led1invert_8" = 0,
	#"l02_led1blink_9" = 0,
	#"l02_led2mode_10" = 0x6,
	#"l02_led2invert_13" = 0,
	#"l02_led2blink_14" = 0,
	#"l02_blinkrate_15" = 0,


	# Reserved (Word 0x19)
	# NOTE: bit 6 must be 1 for validation.  See datasheet.
	"reserved_x19" = 0x2B40,

	# Reserved (Word 0x1A)
	# Advanced Power Management Wake Up Enable
	# prefix: "amp_"
	"amp_enable_0" = 1,
	"amp_reserved_1" = 0x0421,

	# Reserved (Word 0x1B)
	"reserved_x1B" = 0x0113,

	# Reserved (Word 0x1C)
	"reserved_x1C" = 0x1502,

	# Reserved (Word 0x1D)
	"reserved_x1D" = 0xBAAD,

	# Reserved (Word 0x1E)
	"reserved_x1E" = 0x1502,

	# Reserved (Word 0x1F)
	"reserved_x1F" = 0x1503,

	# Reserved (Word 0x20)
	"reserved_x20" = 0xBAAD,

	# Reserved (Word 0x21)
	"reserved_x21" = 0xBAAD,

	# Reserved (Word 0x22)
	"reserved_x22" = 0xBAAD,

	# Reserved (Word 0x23)
	"reserved_x23" = 0x1502,

	# Reserved (Word 0x24)
	"reserved_x24_0" = 0x0000,
	"reserved_x24_14" = 0,
	"reserved_x24_15" = 1,

	# Reserved (Word 0x25)
	"reserved_x25_0" = 0x0000,
	"reserved_x25_4" = 1,
	"reserved_x25_5" = 0,
	"reserved_x25_7" = 1,
	"reserved_x25_8" = 0x00,
	"reserved_x25_15" = 1,

	# Reserved (Word 0x26)
	"reserved_x26_0" = 0x00,
	"reserved_x26_9" = 1,
	"reserved_x26_10" = 1,
	"reserved_x26_11" = 1,
	"reserved_x26_12" = 0,
	"reserved_x26_14" = 1,
	"reserved_x26_15" = 0,

	# Reserved (Word 0x27)
	"reserved_x27" = 0x80,

	# Offsets 0x28-0x2F
	"offset_x28" = 0x0000,
	"offset_x29" = 0x0000,
	"offset_x2A" = 0x0000,
	"offset_x2B" = 0x0000,
	"offset_x2C" = 0x0000,
	"offset_x2D" = 0x0000,
	"offset_x2E" = 0x0000,
	"offset_x2F" = 0x0000,

	# Boot Agent Main Setup Options (Word 0x30)
	# Hardcoded PXE setup (disabled)
	# prefix: "pxe30_"
	"pxe30_protocolsel_0" = 0,
	"pxe30_reserved_2" = 0,
	"pxe30_defbootsel_3" = 0x3,
	"pxe30_reserved_5" = 0,
	"pxe30_prompttime_6" = 0x3,
	"pxe30_dispsetup_8" = 0,
	"pxe30_reserved_9" = 0,
	"pxe30_forcespeed_10" = 0,
	"pxe30_forcefullduplex_12" = 0,
	"pxe30_reserved_13" = 0,
	"pxe30_reserved_14" = 0,

	# Boot Agent Configuration Customization Options (Word 0x31)
	# prefix: "pxe31_"
	"pxe31_disablemenu_0" = 1,
 	"pxe31_disabletitle_1" = 1,
	"pxe31_disableprotsel_2" = 0,
	"pxe31_disbootorder_3" = 0,
	"pxe31_dislegacywak_4" = 0,
	"pxe31_disableflasicwpro_5" = 0,
	"pxe31_reserved_6" = 0,
	"pxe31_ibootagentmode_8" = 0,
	"pxe31_contretrydis_11" = 0,
	"pxe31_reserved_12" = 0,
	"pxe31_signature_14" = 10,

	# Boot Agent Configuration Customization Options (Word 0x32)
	# prefix: "pxe32_"
	"pxe32_buildnum_0" = 0x28,
	"pxe32_minorversion_8" = 0x2,
	"pxe32_majorversion_12" = 0x1,

	# IBA Capabilities (Word 0x33)
	# prefix: "pxe33_"
	"pxe33_basecodepresent_0" = 1,
	"pxe33_undipresent_1" = 1,
	"pxe33_reserved_2" = 1,
	"pxe33_efiundipresent_3" = 0,
	"pxe33_iscsi_4" = 0,
	"pxe33_reserved_5" = 0,
	"pxe33_signature_14" = 10,

	"pxe_padding"[11] = 0xffff,

	# Checksum is generated by bincfg
	# "checksum_gbe" = xxx,

	# G3 -> S5 PHY Configuration
	"g3_s5_phy_conf"[0x16] = 0,

	# Padding 0xf80 bytes
	"padding"[0xf6a] = 0xff
}
