# Copyright 2019 The ChromiumOS Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

# This ebuild only cares about its own FILESDIR and ebuild file, so it tracks
# the canonical empty project.
CROS_WORKON_PROJECT="chromiumos/infra/build/empty-project"
CROS_WORKON_LOCALNAME="../platform/empty-project"

inherit cros-workon cros-fwupd

DESCRIPTION="Installs storage firmware update files used by fwupd."
HOMEPAGE="https://support.dell.com"
LICENSE="LVFS-Vendor-Agreement-v1"
KEYWORDS="~*"
DEPEND=""
RDEPEND="sys-apps/fwupd"
IUSE="
	wilco
	brya
	skyrim
	hatch
"
FILENAMES_WILCO=(
	# samsung,PM991A
	"ed7ddca0c1b983a9f2f8269de7abed89492bfadba04734568f02227e42553950-Samsung_PM991a_SSD_FW_26300039.cab"
	# samsung,PM9B1-256G
	# samsung,PM9B1-512G
	"ea1dfa748eba53af904ebeebd9a8e168e08491ebeff7b98ce5ce03fd72aa8b25-SAMSUNG_PM9B1_SSD_FW_46303039.cab"
	# ssstc,CL1-3D128-Q11
	# ssstc,CL1-3D256-Q11
	"7649776aa1c1e98ca4ae99b05368135078960f1f381890532336f6229e0dc9ad-22301116.cab"
	# ssstc,CL1-3D512-Q11
	"0790e805aa3cfaf9e08b003d7aaca0b2b9988160ef8928200b869e4820fa3963-22321116.cab"
	# ssstc,CL4-3D256-Q11
	# ssstc,CL4-3D512-Q11
	"cbdb8b53779229764f678eb84236dc72dcc98af7f62e8f239c848c47d193c007-25301111.cab"
	# hynix,BC501A
	"9ed8e3c35835daaea253844c678a525f1f71d02f81050763d74920283eb6eadb-Hynix_BC501A_SSD_FW_80002101.cab"
	# hynix,BC511-256G
	# hynix,BC511-512G
	"7ce04b003b45e9c6f612a5525b54fe51e81f205d36778b94d8db0b99c4df6fd3-Hynix_BC511_SSD_FW_11004101.cab"
	# hynix,BC711-128G
	# hynix,BC711-256G
	# hynix,BC711-512G
	"52c0c472993a5d03282efdd1b35d683c60beff4b68fdf9daaa71eadd8d8fbf54-Hynix_BC711_SSD_FW_41002131.cab"
	# hynix,BC901-256G
	# hynix,BC901-512G
	"0d680d156ae33661ec340f8c05784ec7d6b0f3fce5d635dd0f5a1adbd92892bf-LVFS_BC901_DELL_FW.cab"
	# hynix,PC601-256G
	# hynix,PC601-512G
	# hynix,PC601-1T
	"b0b7f76ecf892c42736a7360ccb9571f784382e641bb5451b35166be2182bc91-Hynix_PC601_SSD_FW_80002111.cab"
	# wdc,SN520
	"e74dffeb31030b01d8ce0299240e496641deac2fb069b153af8a5bdfcf3ef805-SN520-20240012-v1.cab"
	# wdc,SN530
	"532a9ebf8ae2c8d5621efd44cc1cc30475a633760a1f42ce0fbe8de269289983-21113012_ID2409.cab"
	# wdc,SN730
	"6df8d0ba1d36b3c9e017a47373c5e84f93090f80d582d7b62d1f5da0c52a5242-SN730-11121012-v1.cab"
	# wdc,SN740
	"ae2a45818043417ec1bb5e84abd2d1737e2c8d351158fd437413b67df69a71ed-Vulcan_73103012.cab"
)
FILENAMES_BRYA=(
	# samsung,PM991A
	"ed7ddca0c1b983a9f2f8269de7abed89492bfadba04734568f02227e42553950-Samsung_PM991a_SSD_FW_26300039.cab"
	# samsung,PM9B1-256G
	# samsung,PM9B1-512G
	"ea1dfa748eba53af904ebeebd9a8e168e08491ebeff7b98ce5ce03fd72aa8b25-SAMSUNG_PM9B1_SSD_FW_46303039.cab"
	# ssstc,CL1-3D128-Q11
	# ssstc,CL1-3D256-Q11
	"7649776aa1c1e98ca4ae99b05368135078960f1f381890532336f6229e0dc9ad-22301116.cab"
	# ssstc,CL1-3D512-Q11
	"0790e805aa3cfaf9e08b003d7aaca0b2b9988160ef8928200b869e4820fa3963-22321116.cab"
	# ssstc,CL4-3D256-Q11
	# ssstc,CL4-3D512-Q11
	"cbdb8b53779229764f678eb84236dc72dcc98af7f62e8f239c848c47d193c007-25301111.cab"
	# hynix,BC501A
	"9ed8e3c35835daaea253844c678a525f1f71d02f81050763d74920283eb6eadb-Hynix_BC501A_SSD_FW_80002101.cab"
	# hynix,BC511-256G
	# hynix,BC511-512G
	"7ce04b003b45e9c6f612a5525b54fe51e81f205d36778b94d8db0b99c4df6fd3-Hynix_BC511_SSD_FW_11004101.cab"
	# hynix,BC711-128G
	# hynix,BC711-256G
	# hynix,BC711-512G
	"52c0c472993a5d03282efdd1b35d683c60beff4b68fdf9daaa71eadd8d8fbf54-Hynix_BC711_SSD_FW_41002131.cab"
	# hynix,BC901-256G
	# hynix,BC901-512G
	"0d680d156ae33661ec340f8c05784ec7d6b0f3fce5d635dd0f5a1adbd92892bf-LVFS_BC901_DELL_FW.cab"
	# hynix,PC601-256G
	# hynix,PC601-512G
	# hynix,PC601-1T
	"b0b7f76ecf892c42736a7360ccb9571f784382e641bb5451b35166be2182bc91-Hynix_PC601_SSD_FW_80002111.cab"
	# wdc,SN520
	"e74dffeb31030b01d8ce0299240e496641deac2fb069b153af8a5bdfcf3ef805-SN520-20240012-v1.cab"
	# wdc,SN530
	"532a9ebf8ae2c8d5621efd44cc1cc30475a633760a1f42ce0fbe8de269289983-21113012_ID2409.cab"
	# wdc,SN730
	"6df8d0ba1d36b3c9e017a47373c5e84f93090f80d582d7b62d1f5da0c52a5242-SN730-11121012-v1.cab"
	# wdc,SN740
	"ae2a45818043417ec1bb5e84abd2d1737e2c8d351158fd437413b67df69a71ed-Vulcan_73103012.cab"
)
FILENAMES_SKYRIM=(
	# samsung,PM9B1-256G
	"ea1dfa748eba53af904ebeebd9a8e168e08491ebeff7b98ce5ce03fd72aa8b25-SAMSUNG_PM9B1_SSD_FW_46303039.cab"
	# ssstc,CL4-3D256-Q11
	"cbdb8b53779229764f678eb84236dc72dcc98af7f62e8f239c848c47d193c007-25301111.cab"
	# hynix,BC901-256G
	"0d680d156ae33661ec340f8c05784ec7d6b0f3fce5d635dd0f5a1adbd92892bf-LVFS_BC901_DELL_FW.cab"
	# wdc,SN740
	"02bba560c24bdbf4f9a1200966b1183e49995c641f32331366989e13d3680343-firmware068.cab"
)
# b/141010782, b/264579155: Liteon & SSSTC share the same cabinet file.
FILENAMES_HATCH=(
	# ssstc,CL1-3D256
	"eaddc94bfa29ebc8ef2e843ac177950d11c9575c3caa5d84a31705ab1c8835e8-CR22002_428.cab"
)

SRC_URI="
	wilco?  ( ${FILENAMES_WILCO[*]/#/${CROS_FWUPD_URL}/} )
	brya? ( ${FILENAMES_BRYA[*]/#/${CROS_FWUPD_URL}/} )
	skyrim? ( ${FILENAMES_SKYRIM[*]/#/${CROS_FWUPD_URL}/} )
	hatch? ( ${FILENAMES_HATCH[*]/#/${CROS_FWUPD_URL}/} )
"
install_rules() {
	local ufiledir="${1}"
	[ -d "${ufiledir}" ] || die "Directory not found: ${ufiledir}"
	while read -d $'\0' -r ufile; do
		udev_dorules "${ufile}"
		einfo "Installed udev rule ${ufile}"
	done < <(find -H "${ufiledir}" -maxdepth 1 -mindepth 1 -print0 -iname "*.rules")
}
src_install() {
	# Install udev rules for automatic firmware update.
	if use wilco; then
		install_rules "${FILESDIR}/wilco"
	fi
	if use brya; then
		install_rules "${FILESDIR}/brya"
	fi
	if use skyrim; then
		install_rules "${FILESDIR}/skyrim"
	fi
	if use hatch; then
		install_rules "${FILESDIR}/hatch"
	fi
	cros-fwupd_src_install
}
