diff --git a/local/recipes/drivers/linux-kpi/source/src/c_headers/net/mac80211.h b/local/recipes/drivers/linux-kpi/source/src/c_headers/net/mac80211.h index 84c6083f17..23983c0e74 100644 --- a/local/recipes/drivers/linux-kpi/source/src/c_headers/net/mac80211.h +++ b/local/recipes/drivers/linux-kpi/source/src/c_headers/net/mac80211.h @@ -289,6 +289,13 @@ extern struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_hw *hw, const u extern void ieee80211_beacon_loss(struct ieee80211_vif *vif); extern void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, struct sk_buff *skb); extern size_t ieee80211_rx_drain(struct ieee80211_hw *hw); +/* Implemented in src/rust_impl/mac80211.rs (#[no_mangle] extern "C"). + Registers a per-hw callback that ieee80211_rx_drain() delivers frames to + instead of logging and freeing them. The declaration was missing, so C + callers got an implicit declaration -- fatal from GCC 14 on. */ +extern void ieee80211_register_rx_handler(struct ieee80211_hw *hw, + void (*callback)(struct ieee80211_hw *hw, + struct sk_buff *skb)); extern void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb); extern void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue); extern void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue); diff --git a/local/recipes/drivers/redbear-iwlwifi/source/src/linux_port.c b/local/recipes/drivers/redbear-iwlwifi/source/src/linux_port.c index 27c0d04629..6e93083348 100644 --- a/local/recipes/drivers/redbear-iwlwifi/source/src/linux_port.c +++ b/local/recipes/drivers/redbear-iwlwifi/source/src/linux_port.c @@ -30,6 +30,11 @@ #include #include + +/* Defined further down in this file; declared here because the first use + precedes the definition by ~1800 lines and an implicit declaration is + an error from GCC 14 on. */ +void rb_iwlwifi_bridge_register_rx(struct ieee80211_hw *hw); // Known gaps vs Linux 7.1 iwlwifi (drivers/net/wireless/intel/iwlwifi/): // Mini-MVM present (linux_mvm.c) — RW descriptor parsing, signal extraction, // firmware TLV metadata, Minstrel rate adaptation, thermal management @@ -2684,7 +2689,12 @@ int rb_iwlwifi_register_mac80211(struct pci_dev *dev, char *out, unsigned long o /* ── Bridge registration and TX submission ──────────────────── */ /* Rust callback: bridge/src/callback.rs */ -extern void bridge_rx_callback(void *hw, struct sk_buff *skb); +/* Implemented in src/bridge/callback.rs as + unsafe extern "C" fn bridge_rx_callback(*mut Ieee80211Hw, *mut SkBuff) + The first parameter was declared `void *` here, which does not match the + RxCallback type ieee80211_register_rx_handler() takes; GCC 14+ rejects the + mismatch outright rather than warning. */ +extern void bridge_rx_callback(struct ieee80211_hw *hw, struct sk_buff *skb); /* Last registered hw (for TX submission from Rust). */ static struct ieee80211_hw *rb_iwlwifi_bridge_hw; diff --git a/local/recipes/libs/libinput/source/libudev.h b/local/recipes/libs/libinput/source/libudev.h deleted file mode 100644 index cee240d800..0000000000 --- a/local/recipes/libs/libinput/source/libudev.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef LIBINPUT_LIBUDEV_SHIM_H -#define LIBINPUT_LIBUDEV_SHIM_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct udev; -struct udev_device; -struct udev_enumerate; -struct udev_list_entry; -struct udev_monitor; - -struct udev *udev_new(void); -struct udev *udev_ref(struct udev *udev); -struct udev *udev_unref(struct udev *udev); - -struct udev *udev_device_get_udev(struct udev_device *udev_device); -struct udev_device *udev_device_new_from_devnum(struct udev *udev, char type, dev_t devnum); -struct udev_device *udev_device_new_from_syspath(struct udev *udev, const char *syspath); -struct udev_device *udev_device_ref(struct udev_device *udev_device); -struct udev_device *udev_device_unref(struct udev_device *udev_device); -const char *udev_device_get_action(struct udev_device *udev_device); -const char *udev_device_get_devnode(struct udev_device *udev_device); -int udev_device_get_is_initialized(struct udev_device *udev_device); -struct udev_device *udev_device_get_parent(struct udev_device *udev_device); -struct udev_device *udev_device_get_parent_with_subsystem_devtype(struct udev_device *udev_device, - const char *subsystem, - const char *devtype); -struct udev_list_entry *udev_device_get_properties_list_entry(struct udev_device *udev_device); -const char *udev_device_get_property_value(struct udev_device *udev_device, const char *key); -const char *udev_device_get_sysname(struct udev_device *udev_device); -const char *udev_device_get_syspath(struct udev_device *udev_device); - -struct udev_enumerate *udev_enumerate_new(struct udev *udev); -struct udev_enumerate *udev_enumerate_unref(struct udev_enumerate *udev_enumerate); -int udev_enumerate_add_match_subsystem(struct udev_enumerate *udev_enumerate, - const char *subsystem); -struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enumerate *udev_enumerate); -int udev_enumerate_scan_devices(struct udev_enumerate *udev_enumerate); - -const char *udev_list_entry_get_name(struct udev_list_entry *list_entry); -struct udev_list_entry *udev_list_entry_get_next(struct udev_list_entry *list_entry); -const char *udev_list_entry_get_value(struct udev_list_entry *list_entry); - -#define udev_list_entry_foreach(list_entry, first_entry) \ - for ((list_entry) = (first_entry); (list_entry) != NULL; \ - (list_entry) = udev_list_entry_get_next(list_entry)) - -struct udev_monitor *udev_monitor_new_from_netlink(struct udev *udev, const char *name); -struct udev_monitor *udev_monitor_unref(struct udev_monitor *udev_monitor); -int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor); -int udev_monitor_filter_add_match_subsystem_devtype(struct udev_monitor *udev_monitor, - const char *subsystem, - const char *devtype); -int udev_monitor_get_fd(struct udev_monitor *udev_monitor); -struct udev_device *udev_monitor_receive_device(struct udev_monitor *udev_monitor); - -#ifdef __cplusplus -} -#endif - -#endif