Expand linux-kpi wireless and networking scaffolding
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#ifndef _LINUX_ATOMIC_H
|
||||
#define _LINUX_ATOMIC_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include "types.h"
|
||||
|
||||
typedef struct {
|
||||
volatile int counter;
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
#define ERANGE 34
|
||||
#define ENOSYS 38
|
||||
#define ENODATA 61
|
||||
#define ENOSPC 28
|
||||
#define ENOTCONN 107
|
||||
#define ENOTSUP 95
|
||||
#define ETIMEDOUT 110
|
||||
|
||||
|
||||
@@ -7,14 +7,21 @@
|
||||
#define IEEE80211_NUM_ACS 4
|
||||
|
||||
struct ieee80211_channel {
|
||||
u32 band;
|
||||
u16 center_freq;
|
||||
u16 hw_value;
|
||||
u32 flags;
|
||||
s8 max_power;
|
||||
s8 max_reg_power;
|
||||
s8 max_antenna_gain;
|
||||
bool beacon_found;
|
||||
};
|
||||
|
||||
struct ieee80211_rate {
|
||||
u32 flags;
|
||||
u16 bitrate;
|
||||
u16 hw_value;
|
||||
u16 hw_value_short;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -14,8 +14,9 @@ extern int irqs_disabled(void);
|
||||
static inline int in_interrupt(void) { return irqs_disabled(); }
|
||||
static inline int in_irq(void) { return irqs_disabled(); }
|
||||
|
||||
#define disable_irq_nosync(irq) ((void)(irq))
|
||||
#define enable_irq(irq) ((void)(irq))
|
||||
extern void disable_irq(unsigned int irq);
|
||||
extern void disable_irq_nosync(unsigned int irq);
|
||||
extern void enable_irq(unsigned int irq);
|
||||
|
||||
#define IRQF_NO_SUSPEND 0x0000U
|
||||
#define IRQF_FORCE_RESUME 0x0000U
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#ifndef _LINUX_KERNEL_H
|
||||
#define _LINUX_KERNEL_H
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/types.h>
|
||||
#include "compiler.h"
|
||||
#include "types.h"
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
@@ -20,6 +20,13 @@ struct net_device {
|
||||
size_t __priv_alloc_align;
|
||||
};
|
||||
|
||||
struct napi_struct {
|
||||
int (*poll)(struct napi_struct *napi, int budget);
|
||||
struct net_device *dev;
|
||||
int state;
|
||||
int weight;
|
||||
};
|
||||
|
||||
extern struct net_device *alloc_netdev_mqs(size_t sizeof_priv,
|
||||
const char *name,
|
||||
unsigned char name_assign_type,
|
||||
@@ -32,5 +39,13 @@ extern void unregister_netdev(struct net_device *dev);
|
||||
extern void netif_carrier_on(struct net_device *dev);
|
||||
extern void netif_carrier_off(struct net_device *dev);
|
||||
extern int netif_carrier_ok(const struct net_device *dev);
|
||||
extern void netif_napi_add(struct net_device *dev, struct napi_struct *napi,
|
||||
int (*poll)(struct napi_struct *napi, int budget), int weight);
|
||||
extern void napi_schedule(struct napi_struct *napi);
|
||||
extern int napi_complete_done(struct napi_struct *napi, int work_done);
|
||||
extern void netif_tx_wake_queue(struct net_device *dev, u16 queue_idx);
|
||||
extern void netif_tx_stop_queue(struct net_device *dev, u16 queue_idx);
|
||||
extern void netif_device_attach(struct net_device *dev);
|
||||
extern void netif_device_detach(struct net_device *dev);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -9,6 +9,12 @@ enum nl80211_iftype {
|
||||
NL80211_IFTYPE_MONITOR = 6,
|
||||
};
|
||||
|
||||
enum nl80211_band {
|
||||
NL80211_BAND_2GHZ = 0,
|
||||
NL80211_BAND_5GHZ = 1,
|
||||
NL80211_BAND_6GHZ = 2,
|
||||
};
|
||||
|
||||
enum nl80211_commands {
|
||||
NL80211_CMD_UNSPEC = 0,
|
||||
NL80211_CMD_TRIGGER_SCAN = 33,
|
||||
|
||||
@@ -23,7 +23,7 @@ struct pci_device_id {
|
||||
u32 device;
|
||||
u32 subvendor;
|
||||
u32 subdevice;
|
||||
u32 class;
|
||||
u32 class_code;
|
||||
u32 class_mask;
|
||||
unsigned long driver_data;
|
||||
};
|
||||
@@ -52,6 +52,12 @@ struct pci_driver {
|
||||
void (*shutdown)(struct pci_dev *dev);
|
||||
};
|
||||
|
||||
struct msix_entry {
|
||||
u32 vector;
|
||||
u16 entry;
|
||||
u16 _pad;
|
||||
};
|
||||
|
||||
extern int pci_enable_device(struct pci_dev *dev);
|
||||
extern void pci_disable_device(struct pci_dev *dev);
|
||||
extern void pci_set_master(struct pci_dev *dev);
|
||||
@@ -60,6 +66,8 @@ extern void pci_free_irq_vectors(struct pci_dev *dev);
|
||||
extern int pci_irq_vector(struct pci_dev *dev, unsigned int nr);
|
||||
extern int pci_enable_msi(struct pci_dev *dev);
|
||||
extern void pci_disable_msi(struct pci_dev *dev);
|
||||
extern int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries, int minvec, int maxvec);
|
||||
extern void pci_disable_msix(struct pci_dev *dev);
|
||||
|
||||
extern void *pci_iomap(struct pci_dev *dev, unsigned int bar, size_t max_len);
|
||||
extern void pci_iounmap(struct pci_dev *dev, void *addr, size_t size);
|
||||
@@ -70,6 +78,20 @@ extern int pci_write_config_dword(struct pci_dev *dev, unsigned int offset, u32
|
||||
extern u64 pci_resource_start(struct pci_dev *dev, unsigned int bar);
|
||||
extern u64 pci_resource_len(struct pci_dev *dev, unsigned int bar);
|
||||
|
||||
extern u64 pci_get_quirk_flags(struct pci_dev *dev);
|
||||
extern bool pci_has_quirk(struct pci_dev *dev, u64 flag);
|
||||
|
||||
#define PCI_QUIRK_NO_MSI (1ULL << 0)
|
||||
#define PCI_QUIRK_NO_MSIX (1ULL << 1)
|
||||
#define PCI_QUIRK_FORCE_LEGACY (1ULL << 2)
|
||||
#define PCI_QUIRK_NO_PM (1ULL << 3)
|
||||
#define PCI_QUIRK_NO_D3COLD (1ULL << 4)
|
||||
#define PCI_QUIRK_NO_ASPM (1ULL << 5)
|
||||
#define PCI_QUIRK_NEED_IOMMU (1ULL << 6)
|
||||
#define PCI_QUIRK_DMA_32BIT_ONLY (1ULL << 8)
|
||||
#define PCI_QUIRK_NEED_FIRMWARE (1ULL << 11)
|
||||
#define PCI_QUIRK_DISABLE_ACCEL (1ULL << 12)
|
||||
|
||||
extern int pci_register_driver(struct pci_driver *drv);
|
||||
extern void pci_unregister_driver(struct pci_driver *drv);
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ struct sk_buff_head {
|
||||
struct sk_buff *next;
|
||||
struct sk_buff *prev;
|
||||
u32 qlen;
|
||||
unsigned char lock;
|
||||
};
|
||||
|
||||
extern struct sk_buff *alloc_skb(unsigned int size, gfp_t gfp_mask);
|
||||
@@ -32,10 +33,14 @@ extern void skb_queue_head_init(struct sk_buff_head *list);
|
||||
extern void skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk);
|
||||
extern struct sk_buff *skb_dequeue(struct sk_buff_head *list);
|
||||
extern void skb_queue_purge(struct sk_buff_head *list);
|
||||
extern struct sk_buff *skb_peek(const struct sk_buff_head *list);
|
||||
extern u32 skb_queue_len(const struct sk_buff_head *list);
|
||||
extern int skb_queue_empty(const struct sk_buff_head *list);
|
||||
extern struct sk_buff *__netdev_alloc_skb(struct net_device *dev, u32 length, gfp_t gfp_mask);
|
||||
#define dev_alloc_skb(length) __netdev_alloc_skb(NULL, length, GFP_KERNEL)
|
||||
extern struct sk_buff *skb_copy(const struct sk_buff *src, gfp_t gfp);
|
||||
extern struct sk_buff *skb_clone(const struct sk_buff *skb, gfp_t gfp);
|
||||
extern void skb_set_network_header(struct sk_buff *skb, int offset);
|
||||
extern void skb_reset_mac_header(struct sk_buff *skb);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef _LINUX_SLAB_H
|
||||
#define _LINUX_SLAB_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include "types.h"
|
||||
#include <stddef.h>
|
||||
|
||||
#define GFP_KERNEL 0U
|
||||
|
||||
@@ -19,7 +19,11 @@ static inline void init_waitqueue_head(struct wait_queue_head *wq)
|
||||
do { while (!(condition)) { __asm__ volatile("pause"); } } while(0)
|
||||
|
||||
#define wait_event_timeout(wq, condition, timeout) \
|
||||
({ (void)(wq); (condition) ? 1 : 0; })
|
||||
({ (void)(wq); unsigned long _deadline = jiffies + (timeout); \
|
||||
int _ret = 0; \
|
||||
while (!(_ret = !!(condition)) && time_before(jiffies, _deadline)) { \
|
||||
__asm__ volatile("pause"); \
|
||||
} _ret; })
|
||||
|
||||
#define wait_event_interruptible(wq, condition) \
|
||||
({ (void)(wq); (condition) ? 0 : -512; })
|
||||
|
||||
@@ -51,6 +51,17 @@ struct key_params {
|
||||
const u8 *key;
|
||||
u8 key_len;
|
||||
u32 cipher;
|
||||
u8 key_idx;
|
||||
};
|
||||
|
||||
struct cfg80211_bss {
|
||||
u8 bssid[6];
|
||||
struct ieee80211_channel *channel;
|
||||
s16 signal;
|
||||
u16 capability;
|
||||
u16 beacon_interval;
|
||||
const u8 *ies;
|
||||
size_t ies_len;
|
||||
};
|
||||
|
||||
struct cfg80211_connect_params {
|
||||
@@ -99,9 +110,11 @@ extern void cfg80211_connect_bss(struct net_device *dev,
|
||||
u16 status,
|
||||
gfp_t gfp);
|
||||
extern void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr,
|
||||
struct station_parameters *params, gfp_t gfp);
|
||||
struct station_parameters *params, gfp_t gfp);
|
||||
extern void cfg80211_rx_mgmt(struct wireless_dev *wdev, u32 freq, int sig_dbm,
|
||||
const u8 *buf, size_t len, gfp_t gfp);
|
||||
const u8 *buf, size_t len, gfp_t gfp);
|
||||
extern void cfg80211_mgmt_tx_status(struct wireless_dev *wdev, u64 cookie,
|
||||
const u8 *buf, size_t len, bool ack, gfp_t gfp);
|
||||
extern void cfg80211_sched_scan_results(struct wiphy *wiphy, u64 reqid);
|
||||
extern void cfg80211_ready_on_channel(struct wireless_dev *wdev,
|
||||
u64 cookie,
|
||||
@@ -109,5 +122,19 @@ extern void cfg80211_ready_on_channel(struct wireless_dev *wdev,
|
||||
u32 chan_type,
|
||||
u32 duration,
|
||||
gfp_t gfp);
|
||||
extern u32 ieee80211_channel_to_frequency(u32 chan, u32 band);
|
||||
extern u32 ieee80211_frequency_to_channel(u32 freq);
|
||||
extern struct cfg80211_bss *cfg80211_inform_bss(struct wiphy *wiphy,
|
||||
struct wireless_dev *wdev,
|
||||
u32 freq,
|
||||
const u8 *bssid,
|
||||
u64 tsf,
|
||||
u16 capability,
|
||||
u16 beacon_interval,
|
||||
const u8 *ie,
|
||||
size_t ielen,
|
||||
int signal,
|
||||
gfp_t gfp);
|
||||
extern void cfg80211_put_bss(struct cfg80211_bss *bss);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
struct ieee80211_hw {
|
||||
struct wiphy *wiphy;
|
||||
const struct ieee80211_ops *ops;
|
||||
void *priv;
|
||||
int registered;
|
||||
u32 extra_tx_headroom;
|
||||
@@ -32,6 +33,25 @@ struct ieee80211_bss_conf {
|
||||
bool assoc;
|
||||
u16 aid;
|
||||
u16 beacon_int;
|
||||
u8 bssid[6];
|
||||
u32 basic_rates;
|
||||
u8 bandwidth;
|
||||
struct {
|
||||
u32 center_freq;
|
||||
u16 band;
|
||||
void *channel;
|
||||
} chandef;
|
||||
};
|
||||
|
||||
struct ieee80211_rx_status {
|
||||
u16 freq;
|
||||
u32 band;
|
||||
s8 signal;
|
||||
s8 noise;
|
||||
u8 rate_idx;
|
||||
u32 flag;
|
||||
u8 antenna;
|
||||
u32 rx_flags;
|
||||
};
|
||||
|
||||
enum ieee80211_sta_state {
|
||||
@@ -62,8 +82,13 @@ struct ieee80211_ops {
|
||||
int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd,
|
||||
struct ieee80211_vif *vif, struct ieee80211_sta *sta,
|
||||
struct key_params *key);
|
||||
int (*ampdu_action)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta, u16 action, u16 tid, u16 ssn);
|
||||
void (*sw_scan_start)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, const u8 *mac_addr);
|
||||
void (*sw_scan_complete)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
|
||||
u64 (*prepare_multicast)(struct ieee80211_hw *hw, void *mc_list);
|
||||
void (*configure_filter)(struct ieee80211_hw *hw, u32 changed_flags,
|
||||
u32 *total_flags, u64 multicast);
|
||||
int (*sched_scan_start)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, void *req);
|
||||
void (*sched_scan_stop)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
|
||||
};
|
||||
@@ -87,6 +112,11 @@ extern void ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted);
|
||||
extern void ieee80211_connection_loss(struct ieee80211_vif *vif);
|
||||
extern int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid, u16 timeout);
|
||||
extern int ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, u16 tid);
|
||||
extern int ieee80211_sta_state(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta, u32 old_state, u32 new_state);
|
||||
extern struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_hw *hw, const u8 *addr);
|
||||
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);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user