# SPDX-License-Identifier: GPL-2.0-only
################################################################################
#
# r8168 is the Linux device driver released for Realtek Gigabit Ethernet
# controllers with PCI-Express interface.
#
# Copyright(c) 2025 Realtek Semiconductor Corp. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, see <http://www.gnu.org/licenses/>.
#
# Author:
# Realtek NIC software team <nicfae@realtek.com>
# No. 2, Innovation Road II, Hsinchu Science Park, Hsinchu 300, Taiwan
#
################################################################################

################################################################################
#  This product is covered by one or more of the following patents:
#  US6,570,884, US6,115,776, and US6,327,625.
################################################################################

CONFIG_SOC_LAN = y
ENABLE_FIBER_SUPPORT = n
ENABLE_REALWOW_SUPPORT = n
ENABLE_DASH_SUPPORT = n
ENABLE_DASH_PRINTER_SUPPORT = n
CONFIG_DOWN_SPEED_100 = n
CONFIG_ASPM = y
ENABLE_S5WOL = y
ENABLE_S5_KEEP_CURR_MAC = n
ENABLE_EEE = y
ENABLE_S0_MAGIC_PACKET = n
CONFIG_DYNAMIC_ASPM = y
ENABLE_USE_FIRMWARE_FILE = n
CONFIG_CTAP_SHORT_OFF = n
ENABLE_MULTIPLE_TX_QUEUE = n
ENABLE_RSS_SUPPORT = n
ENABLE_LIB_SUPPORT = n
DISABLE_WOL_SUPPORT = n
ENABLE_GIGA_LITE = y

ifneq ($(KERNELRELEASE),)
	obj-m := r8168.o
	r8168-objs := r8168_n.o r8168_asf.o rtl_eeprom.o rtltool.o
	ifeq ($(CONFIG_SOC_LAN), y)
		EXTRA_CFLAGS += -DCONFIG_SOC_LAN
	endif
	ifeq ($(ENABLE_FIBER_SUPPORT), y)
	    r8168-objs += r8168_fiber.o
		EXTRA_CFLAGS += -DENABLE_FIBER_SUPPORT
	endif
	ifeq ($(ENABLE_REALWOW_SUPPORT), y)
	    r8168-objs += r8168_realwow.o
		EXTRA_CFLAGS += -DENABLE_REALWOW_SUPPORT
	endif
	ifeq ($(ENABLE_DASH_SUPPORT), y)
	    r8168-objs += r8168_dash.o
		EXTRA_CFLAGS += -DENABLE_DASH_SUPPORT
	endif
	ifeq ($(ENABLE_DASH_PRINTER_SUPPORT), y)
	    r8168-objs += r8168_dash.o
		EXTRA_CFLAGS += -DENABLE_DASH_SUPPORT -DENABLE_DASH_PRINTER_SUPPORT
	endif
	ifneq ($(ENABLE_RSS_SUPPORT), y)
		EXTRA_CFLAGS += -DCONFIG_R8168_NAPI
	endif
	EXTRA_CFLAGS += -DCONFIG_R8168_VLAN
	ifeq ($(CONFIG_DOWN_SPEED_100), y)
		EXTRA_CFLAGS += -DCONFIG_DOWN_SPEED_100
	endif
	ifeq ($(CONFIG_ASPM), y)
		EXTRA_CFLAGS += -DCONFIG_ASPM
	endif
	ifeq ($(ENABLE_S5WOL), y)
		EXTRA_CFLAGS += -DENABLE_S5WOL
	endif
	ifeq ($(ENABLE_S5_KEEP_CURR_MAC), y)
		EXTRA_CFLAGS += -DENABLE_S5_KEEP_CURR_MAC
	endif
	ifeq ($(ENABLE_EEE), y)
		EXTRA_CFLAGS += -DENABLE_EEE
	endif
	ifeq ($(ENABLE_S0_MAGIC_PACKET), y)
		EXTRA_CFLAGS += -DENABLE_S0_MAGIC_PACKET
	endif
	ifeq ($(CONFIG_DYNAMIC_ASPM), y)
		EXTRA_CFLAGS += -DCONFIG_DYNAMIC_ASPM
	endif
	ifeq ($(ENABLE_USE_FIRMWARE_FILE), y)
		r8168-objs += r8168_firmware.o
		EXTRA_CFLAGS += -DENABLE_USE_FIRMWARE_FILE
	endif
	ifeq ($(CONFIG_CTAP_SHORT_OFF), y)
		EXTRA_CFLAGS += -DCONFIG_CTAP_SHORT_OFF
	endif
	ifeq ($(ENABLE_MULTIPLE_TX_QUEUE), y)
		EXTRA_CFLAGS += -DENABLE_MULTIPLE_TX_QUEUE
	endif
	ifeq ($(ENABLE_RSS_SUPPORT), y)
		r8168-objs += r8168_rss.o
		EXTRA_CFLAGS += -DENABLE_RSS_SUPPORT
	endif
	ifeq ($(ENABLE_LIB_SUPPORT), y)
		r8168-objs += r8168_lib.o
		EXTRA_CFLAGS += -DENABLE_LIB_SUPPORT
	endif
	ifeq ($(DISABLE_WOL_SUPPORT), y)
		EXTRA_CFLAGS += -DDISABLE_WOL_SUPPORT
	endif
	ifeq ($(ENABLE_GIGA_LITE), y)
		EXTRA_CFLAGS += -DENABLE_GIGA_LITE
	endif

	# Backward compatibility
	ccflags-y  += $(EXTRA_CFLAGS)
else
SHELL := /bin/sh
CC = gcc
SUBARCH ?= $(shell uname -m | sed -e s/i.86/i386/)
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
KVER ?= $(shell uname -r)
KSRC := /lib/modules/$(KVER)/build
PWD := $(shell pwd)
MODDESTDIR ?= /lib/modules/$(KVER)/kernel/3rdparty/R8168
INSTALL_PREFIX ?=
STAGINGMODDIR := /lib/modules/$(KVER)/kernel/drivers/staging/
FIRMWAREFILEDIR := /lib/firmware/rtl_nic/
CLR_MODULE_FILES := *.mod.c *.mod *.o .*.cmd *.ko *~ .tmp_versions* modules.order Module.symvers
SYMBOL_FILE := Module.symvers

USER_MODULE_NAME := r8168
ifneq ($(USER_MODULE_NAME),)
MODULE_NAME := $(USER_MODULE_NAME)
endif

.PHONY: all
all: clean modules install

.PHONY:modules
modules:
	$(MAKE) -C $(KSRC) M=$(PWD) modules

.PHONY:clean
clean:
	$(MAKE) -C $(KSRC) M=$(shell pwd) clean
	cd hal ; rm -fr */*/*/*.mod.c */*/*/*.mod */*/*/*.o */*/*/.*.cmd */*/*/*.ko*
	cd hal ; rm -fr */*/*.mod.c */*/*.mod */*/*.o */*/.*.cmd */*/*.ko*
	cd hal ; rm -fr */*.mod.c */*.mod */*.o */.*.cmd */*.ko*
	cd hal ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko*
	cd core ; rm -fr */*.mod.c */*.mod */*.o */.*.cmd */*.ko*
	cd core ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko*
	cd os_dep/linux ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko*
	cd os_dep ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko*
	cd platform ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko*
	rm -fr Module.symvers ; rm -fr Module.markers ; rm -fr modules.order
	rm -fr *.mod.c *.mod *.o .*.cmd *.ko* *~
	rm -fr .tmp_versions

.PHONY:install
install:
	mkdir -p $(MODDESTDIR)
	install -p -m 644 $(MODULE_NAME).ko  $(MODDESTDIR)

	/sbin/depmod -a ${KVER}

.PHONY:uninstall
uninstall:
	rm -f $(MODDESTDIR)/$(MODULE_NAME).ko*
	/sbin/depmod -a ${KVER}

endif
