Package: broadcom-sta-dkms Version: 6.30.223.271-25 Followup-For: Bug #1093091 X-Debbugs-Cc: die...@gnome.org
I botched the kernel version :,(. Attaching corrected patch. -- System Information: Debian Release: trixie/sid APT prefers unstable APT policy: (500, 'unstable'), (1, 'experimental') Architecture: amd64 (x86_64) Kernel: Linux 6.13-rc7-amd64 (SMP w/4 CPU threads; PREEMPT) Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_USER, TAINT_WARN, TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE not set Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages broadcom-sta-dkms depends on: ii dkms 3.1.0-2.1 Versions of packages broadcom-sta-dkms recommends: ii wireless-tools 30~pre9-18+b1 broadcom-sta-dkms suggests no packages. -- no debconf information
>From f4e68a018ca9d9f88ddd8490f96314af8a8d074d Mon Sep 17 00:00:00 2001 From: Diego Escalante Urrelo <die...@gnome.org> Date: Thu, 30 Jan 2025 23:42:37 -0500 Subject: [PATCH 2/3] d/patches: Fix build with 6.13 See: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1093091 --- ...uild-Provide-local-lib80211.h-header.patch | 165 ++++++++++++++++++ debian/patches/series | 1 + 2 files changed, 166 insertions(+) create mode 100644 debian/patches/32-build-Provide-local-lib80211.h-header.patch diff --git a/debian/patches/32-build-Provide-local-lib80211.h-header.patch b/debian/patches/32-build-Provide-local-lib80211.h-header.patch new file mode 100644 index 0000000..e352c39 --- /dev/null +++ b/debian/patches/32-build-Provide-local-lib80211.h-header.patch @@ -0,0 +1,165 @@ +From: Diego Escalante Urrelo <die...@gnome.org> +Date: Thu, 30 Jan 2025 23:36:04 -0500 +Subject: build: Provide local lib80211.h header + +The `lib80211.h` header was moved into `libipw` in 6.13. This means +it's no longer available in standard kernel-headers. + +Luckily it's a small file and the driver only uses a struct that has not +changed in ages. + +This copies `lib80211.h` from the rename/remove commit below. + +See: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=02f220b5267042d0de649614eec84ded8aeecb4f +--- + amd64/src/include/lib80211.h | 122 +++++++++++++++++++++++++++++++++++++++++++ + amd64/src/include/linuxver.h | 5 ++ + 2 files changed, 127 insertions(+) + create mode 100644 amd64/src/include/lib80211.h + +diff --git a/amd64/src/include/lib80211.h b/amd64/src/include/lib80211.h +new file mode 100644 +index 0000000..fd0f15d +--- /dev/null ++++ b/amd64/src/include/lib80211.h +@@ -0,0 +1,122 @@ ++/* SPDX-License-Identifier: GPL-2.0 */ ++/* ++ * lib80211.h -- common bits for IEEE802.11 wireless drivers ++ * ++ * Copyright (c) 2008, John W. Linville <linvi...@tuxdriver.com> ++ * ++ * Some bits copied from old ieee80211 component, w/ original copyright ++ * notices below: ++ * ++ * Original code based on Host AP (software wireless LAN access point) driver ++ * for Intersil Prism2/2.5/3. ++ * ++ * Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen ++ * <j...@w1.fi> ++ * Copyright (c) 2002-2003, Jouni Malinen <j...@w1.fi> ++ * ++ * Adaption to a generic IEEE 802.11 stack by James Ketrenos ++ * <jketr...@linux.intel.com> ++ * ++ * Copyright (c) 2004, Intel Corporation ++ * ++ */ ++ ++#ifndef LIB80211_H ++#define LIB80211_H ++ ++#include <linux/types.h> ++#include <linux/list.h> ++#include <linux/atomic.h> ++#include <linux/if.h> ++#include <linux/skbuff.h> ++#include <linux/ieee80211.h> ++#include <linux/timer.h> ++#include <linux/seq_file.h> ++ ++#define NUM_WEP_KEYS 4 ++ ++enum { ++ IEEE80211_CRYPTO_TKIP_COUNTERMEASURES = (1 << 0), ++}; ++ ++struct module; ++ ++struct lib80211_crypto_ops { ++ const char *name; ++ struct list_head list; ++ ++ /* init new crypto context (e.g., allocate private data space, ++ * select IV, etc.); returns NULL on failure or pointer to allocated ++ * private data on success */ ++ void *(*init) (int keyidx); ++ ++ /* deinitialize crypto context and free allocated private data */ ++ void (*deinit) (void *priv); ++ ++ /* encrypt/decrypt return < 0 on error or >= 0 on success. The return ++ * value from decrypt_mpdu is passed as the keyidx value for ++ * decrypt_msdu. skb must have enough head and tail room for the ++ * encryption; if not, error will be returned; these functions are ++ * called for all MPDUs (i.e., fragments). ++ */ ++ int (*encrypt_mpdu) (struct sk_buff * skb, int hdr_len, void *priv); ++ int (*decrypt_mpdu) (struct sk_buff * skb, int hdr_len, void *priv); ++ ++ /* These functions are called for full MSDUs, i.e. full frames. ++ * These can be NULL if full MSDU operations are not needed. */ ++ int (*encrypt_msdu) (struct sk_buff * skb, int hdr_len, void *priv); ++ int (*decrypt_msdu) (struct sk_buff * skb, int keyidx, int hdr_len, ++ void *priv); ++ ++ int (*set_key) (void *key, int len, u8 * seq, void *priv); ++ int (*get_key) (void *key, int len, u8 * seq, void *priv); ++ ++ /* procfs handler for printing out key information and possible ++ * statistics */ ++ void (*print_stats) (struct seq_file *m, void *priv); ++ ++ /* Crypto specific flag get/set for configuration settings */ ++ unsigned long (*get_flags) (void *priv); ++ unsigned long (*set_flags) (unsigned long flags, void *priv); ++ ++ /* maximum number of bytes added by encryption; encrypt buf is ++ * allocated with extra_prefix_len bytes, copy of in_buf, and ++ * extra_postfix_len; encrypt need not use all this space, but ++ * the result must start at the beginning of the buffer and correct ++ * length must be returned */ ++ int extra_mpdu_prefix_len, extra_mpdu_postfix_len; ++ int extra_msdu_prefix_len, extra_msdu_postfix_len; ++ ++ struct module *owner; ++}; ++ ++struct lib80211_crypt_data { ++ struct list_head list; /* delayed deletion list */ ++ const struct lib80211_crypto_ops *ops; ++ void *priv; ++ atomic_t refcnt; ++}; ++ ++struct lib80211_crypt_info { ++ char *name; ++ /* Most clients will already have a lock, ++ so just point to that. */ ++ spinlock_t *lock; ++ ++ struct lib80211_crypt_data *crypt[NUM_WEP_KEYS]; ++ int tx_keyidx; /* default TX key index (crypt[tx_keyidx]) */ ++ struct list_head crypt_deinit_list; ++ struct timer_list crypt_deinit_timer; ++ int crypt_quiesced; ++}; ++ ++int lib80211_crypt_info_init(struct lib80211_crypt_info *info, char *name, ++ spinlock_t *lock); ++void lib80211_crypt_info_free(struct lib80211_crypt_info *info); ++int lib80211_register_crypto_ops(const struct lib80211_crypto_ops *ops); ++int lib80211_unregister_crypto_ops(const struct lib80211_crypto_ops *ops); ++const struct lib80211_crypto_ops *lib80211_get_crypto_ops(const char *name); ++void lib80211_crypt_delayed_deinit(struct lib80211_crypt_info *info, ++ struct lib80211_crypt_data **crypt); ++ ++#endif /* LIB80211_H */ +diff --git a/amd64/src/include/linuxver.h b/amd64/src/include/linuxver.h +index b05bc32..79557c3 100644 +--- a/amd64/src/include/linuxver.h ++++ b/amd64/src/include/linuxver.h +@@ -148,8 +148,13 @@ typedef irqreturn_t(*FN_ISR) (int irq, void *dev_id, struct pt_regs *ptregs); + #endif + + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 13, 0) ++#include "lib80211.h" ++#else + #include <net/lib80211.h> + #endif ++#endif ++ + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) + #include <linux/ieee80211.h> + #else diff --git a/debian/patches/series b/debian/patches/series index a52136f..3ff7975 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -28,3 +28,4 @@ 29-linux601.patch 30-fix-version-parsing.patch 31-6.12-unaligned-header-location.patch +32-build-Provide-local-lib80211.h-header.patch -- 2.47.2