diff --git a/.bnx2x.metadata b/.bnx2x.metadata new file mode 100644 index 0000000..179013b --- /dev/null +++ b/.bnx2x.metadata @@ -0,0 +1 @@ +fc2236052f9f44add30ca2a6b4fbc440e1ee2d6b SOURCES/bnx2x-1.710.51.tar.bz2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4b09395 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/bnx2x-1.710.51.tar.bz2 diff --git a/README.md b/README.md deleted file mode 100644 index 98f42b4..0000000 --- a/README.md +++ /dev/null @@ -1,4 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/bnx2x-firmware.files b/SOURCES/bnx2x-firmware.files new file mode 100644 index 0000000..bdcbb4c --- /dev/null +++ b/SOURCES/bnx2x-firmware.files @@ -0,0 +1,4 @@ +%defattr(644,root,root,755) +/lib/firmware/bnx2x/bnx2x-e1-7.10.51.0.fw +/lib/firmware/bnx2x/bnx2x-e1h-7.10.51.0.fw +/lib/firmware/bnx2x/bnx2x-e2-7.10.51.0.fw diff --git a/SOURCES/bnx2x.files b/SOURCES/bnx2x.files new file mode 100644 index 0000000..2504e86 --- /dev/null +++ b/SOURCES/bnx2x.files @@ -0,0 +1,4 @@ +%defattr(644,root,root,755) +/lib/modules/%2-%1 +/etc/depmod.d/bnx2x.conf +/usr/share/doc/kmod-bnx2x/greylist.txt diff --git a/SOURCES/bnx2x.patch b/SOURCES/bnx2x.patch new file mode 100644 index 0000000..4fc8dca --- /dev/null +++ b/SOURCES/bnx2x.patch @@ -0,0 +1,85 @@ +diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h +index 86e9451..5097083 100644 +--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h ++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h +@@ -2581,4 +2581,9 @@ void bnx2x_set_rx_ts(struct bnx2x *bp, struct sk_buff *skb); + #define BNX2X_MAX_PHC_DRIFT 31000000 + #define BNX2X_PTP_TX_TIMEOUT + ++static inline int dup_is_kdump_kernel(void) ++{ ++ return reset_devices; ++} ++ + #endif /* bnx2x.h */ +diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +index 66717c5..bd1fed9 100644 +--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c ++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +@@ -65,7 +65,7 @@ static int bnx2x_calc_num_queues(struct bnx2x *bp) + int nq = bnx2x_num_queues ? : netif_get_num_default_rss_queues(); + + /* Reduce memory usage in kdump environment by using only one queue */ +- if (is_kdump_kernel()) ++ if (dup_is_kdump_kernel()) + nq = 1; + + nq = clamp(nq, 1, BNX2X_MAX_QUEUES(bp)); +@@ -1647,6 +1647,44 @@ void bnx2x_free_irq(struct bnx2x *bp) + } + } + ++/** ++ * pci_enable_msix_range - configure device's MSI-X capability structure ++ * @dev: pointer to the pci_dev data structure of MSI-X device function ++ * @entries: pointer to an array of MSI-X entries ++ * @minvec: minimum number of MSI-X irqs requested ++ * @maxvec: maximum number of MSI-X irqs requested ++ * ++ * Setup the MSI-X capability structure of device function with a maximum ++ * possible number of interrupts in the range between @minvec and @maxvec ++ * upon its software driver call to request for MSI-X mode enabled on its ++ * hardware device function. It returns a negative errno if an error occurs. ++ * If it succeeds, it returns the actual number of interrupts allocated and ++ * indicates the successful configuration of MSI-X capability structure ++ * with new allocated MSI-X interrupts. ++ **/ ++static int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries, ++ int minvec, int maxvec) ++{ ++ int nvec = maxvec; ++ int rc; ++ ++ if (maxvec < minvec) ++ return -ERANGE; ++ ++ do { ++ rc = pci_enable_msix(dev, entries, nvec); ++ if (rc < 0) { ++ return rc; ++ } else if (rc > 0) { ++ if (rc < minvec) ++ return -ENOSPC; ++ nvec = rc; ++ } ++ } while (rc); ++ ++ return nvec; ++} ++ + int bnx2x_enable_msix(struct bnx2x *bp) + { + int msix_vec = 0, i, rc; +diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +index e22c363..491ffe0 100644 +--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c ++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +@@ -11972,7 +11972,7 @@ static int bnx2x_init_bp(struct bnx2x *bp) + bp->disable_tpa = disable_tpa; + bp->disable_tpa |= IS_MF_STORAGE_SD(bp) || IS_MF_FCOE_AFEX(bp); + /* Reduce memory usage in kdump environment by disabling TPA */ +- bp->disable_tpa |= is_kdump_kernel(); ++ bp->disable_tpa |= dup_is_kdump_kernel(); + + /* Set TPA flags */ + if (bp->disable_tpa) { diff --git a/SOURCES/bnx2x.preamble b/SOURCES/bnx2x.preamble new file mode 100644 index 0000000..142b3d4 --- /dev/null +++ b/SOURCES/bnx2x.preamble @@ -0,0 +1 @@ +Requires: firmware(%{kmod_name}) = %{kmod_firmware_version} diff --git a/SOURCES/depmodconf b/SOURCES/depmodconf new file mode 100755 index 0000000..d54ed63 --- /dev/null +++ b/SOURCES/depmodconf @@ -0,0 +1,10 @@ +#!/bin/bash +VAR=${2} +MAJOR=` echo $VAR | cut -f 1 -d "-" ` +VAR=${VAR##$MAJOR"-"} +MINOR=` echo $VAR | cut -f 1 -d "." ` +kver=$MAJOR-$MINOR.* +find $3 -name '*.ko' | sed 's|^.*/\([^/]*\)\.ko$|\1|' | sort -u | \ +while read -r module; do + echo "override $module $kver weak-updates/$1" +done diff --git a/SOURCES/find-provides.ksyms b/SOURCES/find-provides.ksyms new file mode 100755 index 0000000..38899cd --- /dev/null +++ b/SOURCES/find-provides.ksyms @@ -0,0 +1,11 @@ +#!/bin/bash +filelist=$(sed "s/['\"]/\\\&/g") +kolist=$(echo $filelist | tr '[:blank:]' \\n | grep -E '/lib/modules/.+\.ko$') +echo $filelist | tr '[:blank:]' \\n | /usr/lib/rpm/redhat/find-provides.ksyms + +for module in $kolist; do + modname=$(echo $module | sed 's|^.*/\([^/]*\)\.ko$|\1|') + if [ "$modname" != "$1" ]; then + echo "kmod-$modname = $2" + fi +done | sort -u diff --git a/SOURCES/find-requires.ksyms b/SOURCES/find-requires.ksyms new file mode 100755 index 0000000..db86dd8 --- /dev/null +++ b/SOURCES/find-requires.ksyms @@ -0,0 +1,65 @@ +#! /bin/bash + +IFS=$'\n' + +all_provides() { + nm "$@" \ + | sed -r -ne 's:^([0-9a-f]+) A __crc_(.+):\1\t\2:p' \ + | sort -k2 -u +} + +all_requires() { + for module in "$@"; do + set -- $(/sbin/modinfo -F vermagic "$module" | sed -e 's: .*::' -e q) + /sbin/modprobe --dump-modversions "$module" \ + | awk --non-decimal-data ' + BEGIN { FS = "\t" ; OFS = "\t" } + {printf("0x%08x\t%s\n", $1, $2)}' \ + | sed -r -e 's:$:\t'"$1"':' + done \ + | sort -k2 -u +} + +rm -rf /tmp/krava + +if ! [ -e /sbin/modinfo -a -e /sbin/modprobe ]; then + cat > /dev/null + exit 0 +fi + +modules=($(grep -E '/lib/modules/.+\.ko$')) + +if [ ${#modules[@]} -gt 0 ]; then + kernel=$(/sbin/modinfo -F vermagic "${modules[0]}" | sed -e 's: .*::' -e q) + + # get all that kernel provides + symvers=$(mktemp -t ${0##*/}.XXXXX) + cat /usr/src/kernels/$kernel/Module.symvers | awk ' + BEGIN { FS = "\t" ; OFS = "\t" } + { print $2 "\t" $1 } + ' \ + | sed -r -e 's:$:\t'"$1"':' \ + | sort -u -k2 > $symvers + + # get all that we demands + reqs=$(mktemp -t ${0##*/}.XXXXX) + join -t $'\t' -j 2 -v 1 \ + <(all_requires "${modules[@]}") \ + <(all_provides "${modules[@]}") \ + | sort -u -k2 > $reqs + + # get kernel dependencies - kernel(symbol) = 0xHEX + join -t $'\t' -j2 -o 1.1 1.2 $symvers $reqs \ + | sort -u \ + | awk ' + { FS = "\t" ; OFS = "\t" } + { print "kernel(" $1 ") = " $2 } + ' + + # get module dependencies - ksym(symbol) = 0xHEX + join -t $'\t' -j2 -v2 $symvers $reqs \ + | sort -u | awk ' + { FS = "\t" ; OFS = "\t" } + { print "ksym(" $2 ") = " $1 } + ' +fi diff --git a/SOURCES/kmodtool b/SOURCES/kmodtool new file mode 100755 index 0000000..5a9fc7e --- /dev/null +++ b/SOURCES/kmodtool @@ -0,0 +1,315 @@ +#!/bin/bash + +# kmodtool - Helper script for building kernel module RPMs +# An original version appeared in Fedora. This version is +# generally called only by the %kernel_module_package RPM macro +# during the process of building Driver Update Packages (which +# are also known as "kmods" in the Fedora community). +# +# Copyright (c) 2003-2010 Ville Skyttä <ville.skytta@iki.fi>, +# Thorsten Leemhuis <fedora@leemhuis.info> +# Jon Masters <jcm@redhat.com> +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +# Changelog: +# +# 2010/07/28 - Add fixes for filelists in line with LF standard +# - Remove now defunct "framepointer" kernel variant +# - Change version to "rhel6-rh2" as a consequence. +# +# 2010/01/10 - Simplified for RHEL6. We are working on upstream +# moving to a newer format and in any case do not +# need to retain support for really old systems. + +shopt -s extglob + +myprog="kmodtool" +myver="rhel6-rh2" +knownvariants=@(debug|kdump) +kmod_name= +kver= +verrel= +variant= + +get_kernel_release () +{ + if [[ -z $1 ]]; then + uname -r + return + fi + local arch=$(arch) + local verrel=${1%.$arch} + local verprefix=${verrel%.*} + local versuffix=${verrel#$verprefix} + verrel=$(ls -Ud /usr/src/kernels/$verprefix*$versuffix.$arch | sort -V | tail -n 1) + verrel=${verrel##*/} + [[ -z $verrel ]] && verrel=$1.$arch + echo "$verrel" +} + +get_verrel () +{ + verrel=$(get_kernel_release "$1") + verrel=${verrel%%$knownvariants} +} + +print_verrel () +{ + get_verrel $@ + echo "${verrel}" +} + +get_verrel_for_deps () +{ + verrel_dep=${1:-$(uname -r)} + verrel_dep=${verrel_dep%%$knownvariants} + # TODO: rpmtemplate should be called with %{kernel_version}, not %{kverrel} + # begin hack (remove z-stream subversion) + local verprefix=${verrel_dep%-*} + local versuffix=${verrel_dep##*-} + local verinfix=${versuffix%.*.*} + versuffix=${versuffix#$verinfix} + verinfix=${verinfix%%.*} + verrel_dep=$verprefix-$verinfix$versuffix + # end hack +} + +get_variant () +{ + get_verrel $@ + variant=$(get_kernel_release "$1") + variant=${variant##$verrel} + variant=${variant:-'""'} +} + +print_variant () +{ + get_variant $@ + echo "${variant}" +} + +get_filelist() { + local IFS=$'\n' + filelist=($(cat)) + + if [ ${#filelist[@]} -gt 0 ]; + then + for ((n = 0; n < ${#filelist[@]}; n++)); + do + line="${filelist[n]}" + line=$(echo "$line" \ + | sed -e "s/%verrel/$verrel/g" \ + | sed -e "s/%variant/$variant/g" \ + | sed -e "s/%dashvariant/$dashvariant/g" \ + | sed -e "s/%dotvariant/$dotvariant/g" \ + | sed -e "s/\.%1/$dotvariant/g" \ + | sed -e "s/\-%1/$dotvariant/g" \ + | sed -e "s/%2/$verrel/g") + echo "$line" + done + else + echo "%defattr(644,root,root,755)" + echo "/lib/modules/${verrel}${dotvariant}" + fi +} + + +get_rpmtemplate () +{ + local variant="${1}" + local dashvariant="${variant:+-${variant}}" + local dotvariant="${variant:+.${variant}}" + + echo "%package -n kmod-${kmod_name}${dashvariant}" + + if [ -z "$kmod_provides_summary" ]; then + echo "Summary: ${kmod_name} kernel module(s)" + fi + + if [ -z "$kmod_provides_group" ]; then + echo "Group: System Environment/Kernel" + fi + + if [ ! -z "$kmod_version" ]; then + echo "Version: %{kmod_version}" + fi + + if [ ! -z "$kmod_release" ]; then + echo "Release: %{kmod_release}" + fi + + # Turn of the internal dep generator so we will use the kmod scripts. + echo "%global _use_internal_dependency_generator 0" + cat <<EOF +Provides: kernel-modules = ${verrel_dep}${dotvariant} +Provides: ${kmod_name}-kmod = %{?epoch:%{epoch}:}%{version}-%{release} +Requires(post): /usr/sbin/depmod +Requires(postun): /usr/sbin/depmod +EOF + + if [ "yes" != "$nobuildreqs" ] + then + echo "BuildRequires: kernel${dashvariant}-devel" + fi + + if [ "" != "$override_preamble" ] + then + cat "$override_preamble" + fi + +cat <<EOF +%description -n kmod-${kmod_name}${dashvariant} +This package provides the ${kmod_name} kernel modules built for +the Linux kernel ${verrel}${dotvariant} for the %{_target_cpu} +family of processors. +EOF + +############################################################################## +## The following are not part of this script directly, they are scripts ## +## that will be executed by RPM during various stages of package processing ## +############################################################################## + +cat <<EOF +%post -n kmod-${kmod_name}${dashvariant} +if [ -e "/boot/System.map-${verrel}${dotvariant}" ]; then + /usr/sbin/depmod -aeF "/boot/System.map-${verrel}${dotvariant}" "${verrel}${dotvariant}" > /dev/null || : +fi + +modules=( \$(find /lib/modules/${verrel}${dotvariant}/extra/${kmod_name} | grep '\.ko$') ) +if [ -x "/sbin/weak-modules" ]; then + printf '%s\n' "\${modules[@]}" \ + | /sbin/weak-modules --add-modules +fi +EOF + +cat <<EOF +%preun -n kmod-${kmod_name}${dashvariant} +rpm -ql kmod-${kmod_name}${dashvariant}-%{kmod_version}-%{kmod_release}.$(arch) | grep '\.ko$' > /var/run/rpm-kmod-${kmod_name}${dashvariant}-modules +EOF + +cat <<EOF +%postun -n kmod-${kmod_name}${dashvariant} +if [ -e "/boot/System.map-${verrel}${dotvariant}" ]; then + /usr/sbin/depmod -aeF "/boot/System.map-${verrel}${dotvariant}" "${verrel}${dotvariant}" > /dev/null || : +fi + +modules=( \$(cat /var/run/rpm-kmod-${kmod_name}${dashvariant}-modules) ) +rm /var/run/rpm-kmod-${kmod_name}${dashvariant}-modules +if [ -x "/sbin/weak-modules" ]; then + printf '%s\n' "\${modules[@]}" \ + | /sbin/weak-modules --remove-modules +fi +EOF + +echo "%files -n kmod-${kmod_name}${dashvariant}" + +if [ "" == "$override_filelist" ]; +then + echo "%defattr(644,root,root,755)" + echo "/lib/modules/${verrel}${dotvariant}" +else + cat "$override_filelist" | get_filelist +fi +} + +print_rpmtemplate () +{ + kmod_name="${1}" + shift + kver="${1}" + get_verrel "${1}" + get_verrel_for_deps "${1}" + shift + if [ -z "${kmod_name}" ] ; then + echo "Please provide the kmodule-name as first parameter." >&2 + exit 2 + elif [ -z "${kver}" ] ; then + echo "Please provide the kver as second parameter." >&2 + exit 2 + elif [ -z "${verrel}" ] ; then + echo "Couldn't find out the verrel." >&2 + exit 2 + fi + + for variant in "$@" ; do + if [ "default" == "$variant" ]; + then + get_rpmtemplate "" + else + get_rpmtemplate "${variant}" + fi + done +} + +usage () +{ + cat <<EOF +You called: ${invocation} + +Usage: ${myprog} <command> <option>+ + Commands: + verrel <uname> + - Get "base" version-release. + variant <uname> + - Get variant from uname. + rpmtemplate <mainpgkname> <uname> <variants> + - Return a template for use in a source RPM + version + - Output version number and exit. +EOF +} + +invocation="$(basename ${0}) $@" +while [ "${1}" ] ; do + case "${1}" in + verrel) + shift + print_verrel $@ + exit $? + ;; + variant) + shift + print_variant $@ + exit $? + ;; + rpmtemplate) + shift + print_rpmtemplate "$@" + exit $? + ;; + version) + echo "${myprog} ${myver}" + exit 0 + ;; + *) + echo "Error: Unknown option '${1}'." >&2 + usage >&2 + exit 2 + ;; + esac +done + +# Local variables: +# mode: sh +# sh-indentation: 2 +# indent-tabs-mode: nil +# End: +# ex: ts=2 sw=2 et diff --git a/SOURCES/symbols.greylist-x86_64 b/SOURCES/symbols.greylist-x86_64 new file mode 100644 index 0000000..015a655 --- /dev/null +++ b/SOURCES/symbols.greylist-x86_64 @@ -0,0 +1,101 @@ +alloc_pages_current +__alloc_workqueue_key +build_skb +cancel_work_sync +capable +__const_udelay +crc32c +crc32_le +csum_partial +dcbnl_cee_notify +dcb_setapp +delayed_work_timer_fn +dev_err +_dev_info +dma_ops +down_interruptible +down_timeout +dql_completed +dql_reset +__dynamic_netdev_dbg +ethtool_op_get_ts_info +__fentry__ +flush_workqueue +__free_pages +__get_page_tail +kmalloc_caches +kmalloc_order_trace +kmem_cache_alloc_trace +ktime_get_real +__list_add +local_bh_disable +local_bh_enable +mdio_mii_ioctl +module_layout +napi_hash_add +napi_hash_del +netdev_alloc_frag +netdev_err +netdev_info +__netdev_pick_tx +netdev_printk +netif_get_num_default_rss_queues +netif_set_real_num_rx_queues +pci_choose_state +pci_cleanup_aer_uncorrect_error_status +pci_disable_pcie_error_reporting +pci_disable_sriov +pcie_capability_read_word +pcie_get_minimum_link +pci_enable_pcie_error_reporting +pci_enable_sriov +pci_find_ext_capability +pci_get_bus_and_slot +pci_intx +pci_ioremap_bar +pci_is_pcie +pci_read_config_byte +pci_read_config_dword +pci_read_config_word +pci_read_vpd +pci_restore_state +pci_save_state +pci_set_master +pci_set_power_state +pci_vfs_assigned +pci_vpd_find_info_keyword +pci_vpd_find_tag +pci_wait_for_pending_transaction +pci_wake_from_d3 +pci_write_config_dword +pci_write_config_word +prandom_bytes +ptp_clock_index +ptp_clock_register +ptp_clock_unregister +put_page +pv_irq_ops +queue_work_on +release_firmware +request_firmware +request_threaded_irq +reset_devices +skb_clone_tx_timestamp +__stack_chk_fail +synchronize_irq +synchronize_sched +system_state +system_wq +tcp_gro_complete +timecounter_cyc2time +timecounter_init +timecounter_read +usleep_range +vfree +warn_slowpath_fmt +warn_slowpath_null +x86_dma_fallback_dev +zlib_inflate +zlib_inflateEnd +zlib_inflateInit2 +zlib_inflate_workspacesize diff --git a/SPECS/bnx2x.spec b/SPECS/bnx2x.spec new file mode 100644 index 0000000..8948142 --- /dev/null +++ b/SPECS/bnx2x.spec @@ -0,0 +1,122 @@ +%define kmod_name bnx2x +%define kmod_driver_version 1.710.51 +%define kmod_rpm_release 3 +%define kmod_git_hash 7ddc31247e7f0623d933dd476e3aac576eaa8599 +%define kmod_kernel_version 3.10.0-123.el7 +%define kernel_version 3.10.0-123.el7 +%define kmod_kbuild_dir drivers/net/ethernet/broadcom/bnx2x +%define kmod_firmware_version 7.10.51 + +%{!?dist: %define dist .el7} + +Source0: %{kmod_name}-%{kmod_driver_version}.tar.bz2 +Source1: %{kmod_name}.files +Source2: depmodconf +Source3: find-requires.ksyms +Source4: find-provides.ksyms +Source5: kmodtool +Source6: bnx2x-firmware.files +Source7: bnx2x.preamble +Source8: symbols.greylist-x86_64 + +Patch0: bnx2x.patch + +%define __find_requires %_sourcedir/find-requires.ksyms +%define __find_provides %_sourcedir/find-provides.ksyms %{kmod_name} %{?epoch:%{epoch}:}%{version}-%{release} + +Name: %{kmod_name} +Version: %{kmod_driver_version} +Release: %{kmod_rpm_release}%{?dist} +Summary: %{kmod_name} kernel module + +Group: System/Kernel +License: GPLv2 +URL: http://www.kernel.org/ +BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) +BuildRequires: %kernel_module_package_buildreqs +ExclusiveArch: x86_64 + + +# firmware package +%package -n kmod-%{kmod_name}-firmware +Summary: %{kmod_name} kernel module firmware +Provides: firmware(%{kmod_name}) = %{kmod_firmware_version} +# firmware package has to provide kernel-modules to be recognized and +# unpacked by Anaconda during installation +Provides: kernel-modules = %{kmod_kernel_version}.%{_target_cpu} + +%description -n kmod-%{kmod_name}-firmware +%{kmod_name} - driver update firmware + +%files -n kmod-%{kmod_name}-firmware -f %{SOURCE6} + +# Build only for standard kernel variant(s); for debug packages, append "debug" +# after "default" (separated by space) +%kernel_module_package -s %{SOURCE5} -f %{SOURCE1} -p %{SOURCE7} default + +%description +%{kmod_name} - driver update + +%prep +%setup +%patch0 -p1 +set -- * +mkdir source +mv "$@" source/ +cp %{SOURCE8} source/ +mkdir obj + +%build +for flavor in %flavors_to_build; do + rm -rf obj/$flavor + cp -r source obj/$flavor + + # update symvers file if existing + symvers=source/Module.symvers-%{_target_cpu} + if [ -e $symvers ]; then + cp $symvers obj/$flavor/%{kmod_kbuild_dir}/Module.symvers + fi + + make -C %{kernel_source $flavor} M=$PWD/obj/$flavor/%{kmod_kbuild_dir} \ + NOSTDINC_FLAGS="-I $PWD/obj/$flavor/include" + + # mark modules executable so that strip-to-file can strip them + find obj/$flavor/%{kmod_kbuild_dir} -name "*.ko" -type f -exec chmod u+x '{}' + +done + +%{SOURCE2} %{name} %{kmod_kernel_version} obj > source/depmod.conf + +greylist=source/symbols.greylist-%{_target_cpu} +if [ -f $greylist ]; then + cp $greylist source/symbols.greylist +else + touch source/symbols.greylist +fi + +if [ -d source/firmware ]; then + make -C source/firmware +fi + +%install +export INSTALL_MOD_PATH=$RPM_BUILD_ROOT +export INSTALL_MOD_DIR=extra/%{name} +for flavor in %flavors_to_build ; do + make -C %{kernel_source $flavor} modules_install \ + M=$PWD/obj/$flavor/%{kmod_kbuild_dir} + # Cleanup unnecessary kernel-generated module dependency files. + find $INSTALL_MOD_PATH/lib/modules -iname 'modules.*' -exec rm {} \; +done + +install -m 644 -D source/depmod.conf $RPM_BUILD_ROOT/etc/depmod.d/%{kmod_name}.conf +install -m 644 -D source/symbols.greylist $RPM_BUILD_ROOT/usr/share/doc/kmod-%{kmod_name}/greylist.txt + +if [ -d source/firmware ]; then + make -C source/firmware INSTALL_PATH=$RPM_BUILD_ROOT INSTALL_DIR=updates install +fi + +%clean +rm -rf $RPM_BUILD_ROOT + +%changelog +* Mon Nov 24 2014 Weiping Pan <panweiping3@gmail.com> 1.710.51 3 +- bnx2x DUP module