Error Trace

[Home]

Bug # 104

Show/hide error trace
Error trace
Function bodies
Blocks
  • Others...
    Function bodies without model function calls
    Initialization function calls
    Initialization function bodies
    Entry point
    Entry point body
    Function calls
    Skipped function calls
    Formal parameter names
    Declarations
    Assumes
    Assume conditions
    Returns
    Return values
    DEG initialization
    DEG function calls
    Model function calls
    Model function bodies
    Model asserts
    Model state changes
    Model function function calls
    Model function function bodies
    Model returns
    Model others
    Identation
    Line numbers
    Expand signs
-__CPAchecker_initialize()
{
19 typedef signed char __s8;
20 typedef unsigned char __u8;
22 typedef short __s16;
23 typedef unsigned short __u16;
25 typedef int __s32;
26 typedef unsigned int __u32;
30 typedef unsigned long long __u64;
15 typedef signed char s8;
16 typedef unsigned char u8;
18 typedef short s16;
19 typedef unsigned short u16;
21 typedef int s32;
22 typedef unsigned int u32;
24 typedef long long s64;
25 typedef unsigned long long u64;
14 typedef long __kernel_long_t;
15 typedef unsigned long __kernel_ulong_t;
27 typedef int __kernel_pid_t;
48 typedef unsigned int __kernel_uid32_t;
49 typedef unsigned int __kernel_gid32_t;
71 typedef __kernel_ulong_t __kernel_size_t;
72 typedef __kernel_long_t __kernel_ssize_t;
87 typedef long long __kernel_loff_t;
88 typedef __kernel_long_t __kernel_time_t;
89 typedef __kernel_long_t __kernel_clock_t;
90 typedef int __kernel_timer_t;
91 typedef int __kernel_clockid_t;
32 typedef __u16 __le16;
33 typedef __u16 __be16;
34 typedef __u32 __le32;
35 typedef __u32 __be32;
40 typedef __u32 __wsum;
12 typedef __u32 __kernel_dev_t;
15 typedef __kernel_dev_t dev_t;
18 typedef unsigned short umode_t;
21 typedef __kernel_pid_t pid_t;
26 typedef __kernel_clockid_t clockid_t;
29 typedef _Bool bool;
31 typedef __kernel_uid32_t uid_t;
32 typedef __kernel_gid32_t gid_t;
45 typedef __kernel_loff_t loff_t;
54 typedef __kernel_size_t size_t;
59 typedef __kernel_ssize_t ssize_t;
69 typedef __kernel_time_t time_t;
83 typedef unsigned char u_char;
102 typedef __s32 int32_t;
106 typedef __u8 uint8_t;
108 typedef __u32 uint32_t;
111 typedef __u64 uint64_t;
133 typedef unsigned long sector_t;
134 typedef unsigned long blkcnt_t;
146 typedef u64 dma_addr_t;
157 typedef unsigned int gfp_t;
158 typedef unsigned int fmode_t;
159 typedef unsigned int oom_flags_t;
162 typedef u64 phys_addr_t;
167 typedef phys_addr_t resource_size_t;
177 struct __anonstruct_atomic_t_6 { int counter; } ;
177 typedef struct __anonstruct_atomic_t_6 atomic_t;
182 struct __anonstruct_atomic64_t_7 { long counter; } ;
182 typedef struct __anonstruct_atomic64_t_7 atomic64_t;
183 struct list_head { struct list_head *next; struct list_head *prev; } ;
188 struct hlist_node ;
188 struct hlist_head { struct hlist_node *first; } ;
192 struct hlist_node { struct hlist_node *next; struct hlist_node **pprev; } ;
203 struct callback_head { struct callback_head *next; void (*func)(struct callback_head *); } ;
213 enum dma_data_direction { DMA_BIDIRECTIONAL = 0, DMA_TO_DEVICE = 1, DMA_FROM_DEVICE = 2, DMA_NONE = 3 } ;
5 struct device ;
5 struct page ;
7 struct dma_attrs ;
99 struct kernel_symbol { unsigned long value; const char *name; } ;
33 struct module ;
65 struct pt_regs { unsigned long r15; unsigned long r14; unsigned long r13; unsigned long r12; unsigned long bp; unsigned long bx; unsigned long r11; unsigned long r10; unsigned long r9; unsigned long r8; unsigned long ax; unsigned long cx; unsigned long dx; unsigned long si; unsigned long di; unsigned long orig_ax; unsigned long ip; unsigned long cs; unsigned long flags; unsigned long sp; unsigned long ss; } ;
59 struct __anonstruct____missing_field_name_9 { unsigned int a; unsigned int b; } ;
59 struct __anonstruct____missing_field_name_10 { u16 limit0; u16 base0; unsigned char base1; unsigned char type; unsigned char s; unsigned char dpl; unsigned char p; unsigned char limit; unsigned char avl; unsigned char l; unsigned char d; unsigned char g; unsigned char base2; } ;
59 union __anonunion____missing_field_name_8 { struct __anonstruct____missing_field_name_9 __annonCompField4; struct __anonstruct____missing_field_name_10 __annonCompField5; } ;
59 struct desc_struct { union __anonunion____missing_field_name_8 __annonCompField6; } ;
15 typedef unsigned long pgdval_t;
16 typedef unsigned long pgprotval_t;
20 struct pgprot { pgprotval_t pgprot; } ;
243 typedef struct pgprot pgprot_t;
245 struct __anonstruct_pgd_t_12 { pgdval_t pgd; } ;
245 typedef struct __anonstruct_pgd_t_12 pgd_t;
333 typedef struct page *pgtable_t;
341 struct file ;
354 struct seq_file ;
389 struct thread_struct ;
391 struct mm_struct ;
392 struct task_struct ;
393 struct cpumask ;
394 struct paravirt_callee_save { void *func; } ;
196 struct pv_irq_ops { struct paravirt_callee_save save_fl; struct paravirt_callee_save restore_fl; struct paravirt_callee_save irq_disable; struct paravirt_callee_save irq_enable; void (*safe_halt)(); void (*halt)(); void (*adjust_exception_frame)(); } ;
327 struct arch_spinlock ;
18 typedef u16 __ticket_t;
19 typedef u32 __ticketpair_t;
20 struct __raw_tickets { __ticket_t head; __ticket_t tail; } ;
32 union __anonunion____missing_field_name_15 { __ticketpair_t head_tail; struct __raw_tickets tickets; } ;
32 struct arch_spinlock { union __anonunion____missing_field_name_15 __annonCompField7; } ;
33 typedef struct arch_spinlock arch_spinlock_t;
33 struct __anonstruct____missing_field_name_17 { u32 read; s32 write; } ;
33 union __anonunion_arch_rwlock_t_16 { s64 lock; struct __anonstruct____missing_field_name_17 __annonCompField8; } ;
33 typedef union __anonunion_arch_rwlock_t_16 arch_rwlock_t;
142 typedef void (*ctor_fn_t)();
54 struct net_device ;
376 struct file_operations ;
388 struct completion ;
416 struct pid ;
527 struct bug_entry { int bug_addr_disp; int file_disp; unsigned short line; unsigned short flags; } ;
102 struct timespec ;
127 struct kernel_vm86_regs { struct pt_regs pt; unsigned short es; unsigned short __esh; unsigned short ds; unsigned short __dsh; unsigned short fs; unsigned short __fsh; unsigned short gs; unsigned short __gsh; } ;
79 union __anonunion____missing_field_name_22 { struct pt_regs *regs; struct kernel_vm86_regs *vm86; } ;
79 struct math_emu_info { long ___orig_eip; union __anonunion____missing_field_name_22 __annonCompField10; } ;
306 struct cpumask { unsigned long bits[128U]; } ;
14 typedef struct cpumask cpumask_t;
663 typedef struct cpumask *cpumask_var_t;
195 struct static_key ;
162 struct seq_operations ;
294 struct i387_fsave_struct { u32 cwd; u32 swd; u32 twd; u32 fip; u32 fcs; u32 foo; u32 fos; u32 st_space[20U]; u32 status; } ;
312 struct __anonstruct____missing_field_name_27 { u64 rip; u64 rdp; } ;
312 struct __anonstruct____missing_field_name_28 { u32 fip; u32 fcs; u32 foo; u32 fos; } ;
312 union __anonunion____missing_field_name_26 { struct __anonstruct____missing_field_name_27 __annonCompField14; struct __anonstruct____missing_field_name_28 __annonCompField15; } ;
312 union __anonunion____missing_field_name_29 { u32 padding1[12U]; u32 sw_reserved[12U]; } ;
312 struct i387_fxsave_struct { u16 cwd; u16 swd; u16 twd; u16 fop; union __anonunion____missing_field_name_26 __annonCompField16; u32 mxcsr; u32 mxcsr_mask; u32 st_space[32U]; u32 xmm_space[64U]; u32 padding[12U]; union __anonunion____missing_field_name_29 __annonCompField17; } ;
346 struct i387_soft_struct { u32 cwd; u32 swd; u32 twd; u32 fip; u32 fcs; u32 foo; u32 fos; u32 st_space[20U]; u8 ftop; u8 changed; u8 lookahead; u8 no_update; u8 rm; u8 alimit; struct math_emu_info *info; u32 entry_eip; } ;
367 struct ymmh_struct { u32 ymmh_space[64U]; } ;
372 struct lwp_struct { u8 reserved[128U]; } ;
377 struct bndregs_struct { u64 bndregs[8U]; } ;
381 struct bndcsr_struct { u64 cfg_reg_u; u64 status_reg; } ;
386 struct xsave_hdr_struct { u64 xstate_bv; u64 reserved1[2U]; u64 reserved2[5U]; } ;
392 struct xsave_struct { struct i387_fxsave_struct i387; struct xsave_hdr_struct xsave_hdr; struct ymmh_struct ymmh; struct lwp_struct lwp; struct bndregs_struct bndregs; struct bndcsr_struct bndcsr; } ;
401 union thread_xstate { struct i387_fsave_struct fsave; struct i387_fxsave_struct fxsave; struct i387_soft_struct soft; struct xsave_struct xsave; } ;
409 struct fpu { unsigned int last_cpu; unsigned int has_fpu; union thread_xstate *state; } ;
456 struct kmem_cache ;
457 struct perf_event ;
458 struct thread_struct { struct desc_struct tls_array[3U]; unsigned long sp0; unsigned long sp; unsigned long usersp; unsigned short es; unsigned short ds; unsigned short fsindex; unsigned short gsindex; unsigned long fs; unsigned long gs; struct perf_event *ptrace_bps[4U]; unsigned long debugreg6; unsigned long ptrace_dr7; unsigned long cr2; unsigned long trap_nr; unsigned long error_code; struct fpu fpu; unsigned long *io_bitmap_ptr; unsigned long iopl; unsigned int io_bitmap_max; unsigned char fpu_counter; } ;
23 typedef atomic64_t atomic_long_t;
152 struct lockdep_map ;
55 struct stack_trace { unsigned int nr_entries; unsigned int max_entries; unsigned long *entries; int skip; } ;
26 struct lockdep_subclass_key { char __one_byte; } ;
53 struct lock_class_key { struct lockdep_subclass_key subkeys[8U]; } ;
59 struct lock_class { struct list_head hash_entry; struct list_head lock_entry; struct lockdep_subclass_key *key; unsigned int subclass; unsigned int dep_gen_id; unsigned long usage_mask; struct stack_trace usage_traces[13U]; struct list_head locks_after; struct list_head locks_before; unsigned int version; unsigned long ops; const char *name; int name_version; unsigned long contention_point[4U]; unsigned long contending_point[4U]; } ;
144 struct lockdep_map { struct lock_class_key *key; struct lock_class *class_cache[2U]; const char *name; int cpu; unsigned long ip; } ;
205 struct held_lock { u64 prev_chain_key; unsigned long acquire_ip; struct lockdep_map *instance; struct lockdep_map *nest_lock; u64 waittime_stamp; u64 holdtime_stamp; unsigned short class_idx; unsigned char irq_context; unsigned char trylock; unsigned char read; unsigned char check; unsigned char hardirqs_off; unsigned short references; } ;
537 struct raw_spinlock { arch_spinlock_t raw_lock; unsigned int magic; unsigned int owner_cpu; void *owner; struct lockdep_map dep_map; } ;
32 typedef struct raw_spinlock raw_spinlock_t;
33 struct __anonstruct____missing_field_name_33 { u8 __padding[24U]; struct lockdep_map dep_map; } ;
33 union __anonunion____missing_field_name_32 { struct raw_spinlock rlock; struct __anonstruct____missing_field_name_33 __annonCompField19; } ;
33 struct spinlock { union __anonunion____missing_field_name_32 __annonCompField20; } ;
76 typedef struct spinlock spinlock_t;
23 struct __anonstruct_rwlock_t_34 { arch_rwlock_t raw_lock; unsigned int magic; unsigned int owner_cpu; void *owner; struct lockdep_map dep_map; } ;
23 typedef struct __anonstruct_rwlock_t_34 rwlock_t;
59 struct static_key { atomic_t enabled; } ;
412 struct rb_node { unsigned long __rb_parent_color; struct rb_node *rb_right; struct rb_node *rb_left; } ;
40 struct rb_root { struct rb_node *rb_node; } ;
87 struct rw_semaphore ;
88 struct rw_semaphore { long count; raw_spinlock_t wait_lock; struct list_head wait_list; struct lockdep_map dep_map; } ;
12 struct __wait_queue ;
12 typedef struct __wait_queue wait_queue_t;
15 struct __wait_queue { unsigned int flags; void *private; int (*func)(wait_queue_t *, unsigned int, int, void *); struct list_head task_list; } ;
34 struct __wait_queue_head { spinlock_t lock; struct list_head task_list; } ;
39 typedef struct __wait_queue_head wait_queue_head_t;
919 struct completion { unsigned int done; wait_queue_head_t wait; } ;
113 struct vm_area_struct ;
114 struct inode ;
115 struct notifier_block ;
58 struct mutex { atomic_t count; spinlock_t wait_lock; struct list_head wait_list; struct task_struct *owner; const char *name; void *magic; struct lockdep_map dep_map; } ;
67 struct mutex_waiter { struct list_head list; struct task_struct *task; void *magic; } ;
177 struct seqcount { unsigned int sequence; struct lockdep_map dep_map; } ;
51 typedef struct seqcount seqcount_t;
259 struct __anonstruct_seqlock_t_35 { struct seqcount seqcount; spinlock_t lock; } ;
259 typedef struct __anonstruct_seqlock_t_35 seqlock_t;
1039 struct timespec { __kernel_time_t tv_sec; long tv_nsec; } ;
323 union ktime { s64 tv64; } ;
59 typedef union ktime ktime_t;
388 struct tvec_base ;
389 struct timer_list { struct list_head entry; unsigned long expires; struct tvec_base *base; void (*function)(unsigned long); unsigned long data; int slack; int start_pid; void *start_site; char start_comm[16U]; struct lockdep_map lockdep_map; } ;
254 struct hrtimer ;
255 enum hrtimer_restart ;
266 struct workqueue_struct ;
267 struct work_struct ;
54 struct work_struct { atomic_long_t data; struct list_head entry; void (*func)(struct work_struct *); struct lockdep_map lockdep_map; } ;
107 struct delayed_work { struct work_struct work; struct timer_list timer; struct workqueue_struct *wq; int cpu; } ;
51 struct notifier_block { int (*notifier_call)(struct notifier_block *, unsigned long, void *); struct notifier_block *next; int priority; } ;
63 struct blocking_notifier_head { struct rw_semaphore rwsem; struct notifier_block *head; } ;
45 struct arch_uprobe_task { unsigned long saved_scratch_register; unsigned int saved_trap_nr; unsigned int saved_tf; } ;
54 enum uprobe_task_state { UTASK_RUNNING = 0, UTASK_SSTEP = 1, UTASK_SSTEP_ACK = 2, UTASK_SSTEP_TRAPPED = 3 } ;
61 struct __anonstruct____missing_field_name_38 { struct arch_uprobe_task autask; unsigned long vaddr; } ;
61 struct __anonstruct____missing_field_name_39 { struct callback_head dup_xol_work; unsigned long dup_xol_addr; } ;
61 union __anonunion____missing_field_name_37 { struct __anonstruct____missing_field_name_38 __annonCompField22; struct __anonstruct____missing_field_name_39 __annonCompField23; } ;
61 struct uprobe ;
61 struct return_instance ;
61 struct uprobe_task { enum uprobe_task_state state; union __anonunion____missing_field_name_37 __annonCompField24; struct uprobe *active_uprobe; unsigned long xol_vaddr; struct return_instance *return_instances; unsigned int depth; } ;
93 struct xol_area ;
94 struct uprobes_state { struct xol_area *xol_area; } ;
22 struct __anonstruct_mm_context_t_40 { void *ldt; int size; unsigned short ia32_compat; struct mutex lock; void *vdso; } ;
22 typedef struct __anonstruct_mm_context_t_40 mm_context_t;
26 struct address_space ;
27 union __anonunion____missing_field_name_41 { struct address_space *mapping; void *s_mem; } ;
27 union __anonunion____missing_field_name_43 { unsigned long index; void *freelist; bool pfmemalloc; } ;
27 struct __anonstruct____missing_field_name_47 { unsigned short inuse; unsigned short objects; unsigned char frozen; } ;
27 union __anonunion____missing_field_name_46 { atomic_t _mapcount; struct __anonstruct____missing_field_name_47 __annonCompField27; int units; } ;
27 struct __anonstruct____missing_field_name_45 { union __anonunion____missing_field_name_46 __annonCompField28; atomic_t _count; } ;
27 union __anonunion____missing_field_name_44 { unsigned long counters; struct __anonstruct____missing_field_name_45 __annonCompField29; unsigned int active; } ;
27 struct __anonstruct____missing_field_name_42 { union __anonunion____missing_field_name_43 __annonCompField26; union __anonunion____missing_field_name_44 __annonCompField30; } ;
27 struct __anonstruct____missing_field_name_49 { struct page *next; int pages; int pobjects; } ;
27 struct slab ;
27 union __anonunion____missing_field_name_48 { struct list_head lru; struct __anonstruct____missing_field_name_49 __annonCompField32; struct list_head list; struct slab *slab_page; struct callback_head callback_head; pgtable_t pmd_huge_pte; } ;
27 union __anonunion____missing_field_name_50 { unsigned long private; spinlock_t *ptl; struct kmem_cache *slab_cache; struct page *first_page; } ;
27 struct page { unsigned long flags; union __anonunion____missing_field_name_41 __annonCompField25; struct __anonstruct____missing_field_name_42 __annonCompField31; union __anonunion____missing_field_name_48 __annonCompField33; union __anonunion____missing_field_name_50 __annonCompField34; unsigned long debug_flags; } ;
186 struct page_frag { struct page *page; __u32 offset; __u32 size; } ;
238 struct __anonstruct_linear_52 { struct rb_node rb; unsigned long rb_subtree_last; } ;
238 union __anonunion_shared_51 { struct __anonstruct_linear_52 linear; struct list_head nonlinear; } ;
238 struct anon_vma ;
238 struct vm_operations_struct ;
238 struct mempolicy ;
238 struct vm_area_struct { unsigned long vm_start; unsigned long vm_end; struct vm_area_struct *vm_next; struct vm_area_struct *vm_prev; struct rb_node vm_rb; unsigned long rb_subtree_gap; struct mm_struct *vm_mm; pgprot_t vm_page_prot; unsigned long vm_flags; union __anonunion_shared_51 shared; struct list_head anon_vma_chain; struct anon_vma *anon_vma; const struct vm_operations_struct *vm_ops; unsigned long vm_pgoff; struct file *vm_file; void *vm_private_data; struct mempolicy *vm_policy; } ;
310 struct core_thread { struct task_struct *task; struct core_thread *next; } ;
316 struct core_state { atomic_t nr_threads; struct core_thread dumper; struct completion startup; } ;
329 struct task_rss_stat { int events; int count[3U]; } ;
337 struct mm_rss_stat { atomic_long_t count[3U]; } ;
342 struct kioctx_table ;
343 struct linux_binfmt ;
343 struct mmu_notifier_mm ;
343 struct mm_struct { struct vm_area_struct *mmap; struct rb_root mm_rb; struct vm_area_struct *mmap_cache; unsigned long int (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); unsigned long mmap_base; unsigned long mmap_legacy_base; unsigned long task_size; unsigned long highest_vm_end; pgd_t *pgd; atomic_t mm_users; atomic_t mm_count; atomic_long_t nr_ptes; int map_count; spinlock_t page_table_lock; struct rw_semaphore mmap_sem; struct list_head mmlist; unsigned long hiwater_rss; unsigned long hiwater_vm; unsigned long total_vm; unsigned long locked_vm; unsigned long pinned_vm; unsigned long shared_vm; unsigned long exec_vm; unsigned long stack_vm; unsigned long def_flags; unsigned long start_code; unsigned long end_code; unsigned long start_data; unsigned long end_data; unsigned long start_brk; unsigned long brk; unsigned long start_stack; unsigned long arg_start; unsigned long arg_end; unsigned long env_start; unsigned long env_end; unsigned long saved_auxv[46U]; struct mm_rss_stat rss_stat; struct linux_binfmt *binfmt; cpumask_var_t cpu_vm_mask_var; mm_context_t context; unsigned long flags; struct core_state *core_state; spinlock_t ioctx_lock; struct kioctx_table *ioctx_table; struct task_struct *owner; struct file *exe_file; struct mmu_notifier_mm *mmu_notifier_mm; struct cpumask cpumask_allocation; unsigned long numa_next_scan; unsigned long numa_scan_offset; int numa_scan_seq; bool tlb_flush_pending; struct uprobes_state uprobes_state; } ;
186 struct iovec { void *iov_base; __kernel_size_t iov_len; } ;
11 typedef unsigned short __kernel_sa_family_t;
18 struct cred ;
23 typedef __kernel_sa_family_t sa_family_t;
24 struct sockaddr { sa_family_t sa_family; char sa_data[14U]; } ;
38 struct msghdr { void *msg_name; int msg_namelen; struct iovec *msg_iov; __kernel_size_t msg_iovlen; void *msg_control; __kernel_size_t msg_controllen; unsigned int msg_flags; } ;
331 enum ldv_11030 { SS_FREE = 0, SS_UNCONNECTED = 1, SS_CONNECTING = 2, SS_CONNECTED = 3, SS_DISCONNECTING = 4 } ;
53 typedef enum ldv_11030 socket_state;
54 struct poll_table_struct ;
55 struct pipe_inode_info ;
56 struct net ;
73 struct fasync_struct ;
73 struct socket_wq { wait_queue_head_t wait; struct fasync_struct *fasync_list; struct callback_head rcu; } ;
94 struct sock ;
94 struct proto_ops ;
94 struct socket { socket_state state; short type; unsigned long flags; struct socket_wq *wq; struct file *file; struct sock *sk; const struct proto_ops *ops; } ;
120 struct kiocb ;
121 struct proto_ops { int family; struct module *owner; int (*release)(struct socket *); int (*bind)(struct socket *, struct sockaddr *, int); int (*connect)(struct socket *, struct sockaddr *, int, int); int (*socketpair)(struct socket *, struct socket *); int (*accept)(struct socket *, struct socket *, int); int (*getname)(struct socket *, struct sockaddr *, int *, int); unsigned int (*poll)(struct file *, struct socket *, struct poll_table_struct *); int (*ioctl)(struct socket *, unsigned int, unsigned long); int (*compat_ioctl)(struct socket *, unsigned int, unsigned long); int (*listen)(struct socket *, int); int (*shutdown)(struct socket *, int); int (*setsockopt)(struct socket *, int, int, char *, unsigned int); int (*getsockopt)(struct socket *, int, int, char *, int *); int (*compat_setsockopt)(struct socket *, int, int, char *, unsigned int); int (*compat_getsockopt)(struct socket *, int, int, char *, int *); int (*sendmsg)(struct kiocb *, struct socket *, struct msghdr *, size_t ); int (*recvmsg)(struct kiocb *, struct socket *, struct msghdr *, size_t , int); int (*mmap)(struct file *, struct socket *, struct vm_area_struct *); ssize_t (*sendpage)(struct socket *, struct page *, int, size_t , int); ssize_t (*splice_read)(struct socket *, loff_t *, struct pipe_inode_info *, size_t , unsigned int); int (*set_peek_off)(struct sock *, int); } ;
98 struct __anonstruct_nodemask_t_53 { unsigned long bits[16U]; } ;
98 typedef struct __anonstruct_nodemask_t_53 nodemask_t;
891 struct ctl_table ;
72 struct resource { resource_size_t start; resource_size_t end; const char *name; unsigned long flags; struct resource *parent; struct resource *sibling; struct resource *child; } ;
172 struct pci_dev ;
58 struct pm_message { int event; } ;
64 typedef struct pm_message pm_message_t;
65 struct dev_pm_ops { int (*prepare)(struct device *); void (*complete)(struct device *); int (*suspend)(struct device *); int (*resume)(struct device *); int (*freeze)(struct device *); int (*thaw)(struct device *); int (*poweroff)(struct device *); int (*restore)(struct device *); int (*suspend_late)(struct device *); int (*resume_early)(struct device *); int (*freeze_late)(struct device *); int (*thaw_early)(struct device *); int (*poweroff_late)(struct device *); int (*restore_early)(struct device *); int (*suspend_noirq)(struct device *); int (*resume_noirq)(struct device *); int (*freeze_noirq)(struct device *); int (*thaw_noirq)(struct device *); int (*poweroff_noirq)(struct device *); int (*restore_noirq)(struct device *); int (*runtime_suspend)(struct device *); int (*runtime_resume)(struct device *); int (*runtime_idle)(struct device *); } ;
301 enum rpm_status { RPM_ACTIVE = 0, RPM_RESUMING = 1, RPM_SUSPENDED = 2, RPM_SUSPENDING = 3 } ;
308 enum rpm_request { RPM_REQ_NONE = 0, RPM_REQ_IDLE = 1, RPM_REQ_SUSPEND = 2, RPM_REQ_AUTOSUSPEND = 3, RPM_REQ_RESUME = 4 } ;
316 struct wakeup_source ;
527 struct pm_subsys_data { spinlock_t lock; unsigned int refcount; struct list_head clock_list; } ;
534 struct dev_pm_qos ;
534 struct dev_pm_info { pm_message_t power_state; unsigned char can_wakeup; unsigned char async_suspend; bool is_prepared; bool is_suspended; bool ignore_children; bool early_init; spinlock_t lock; struct list_head entry; struct completion completion; struct wakeup_source *wakeup; bool wakeup_path; bool syscore; struct timer_list suspend_timer; unsigned long timer_expires; struct work_struct work; wait_queue_head_t wait_queue; atomic_t usage_count; atomic_t child_count; unsigned char disable_depth; unsigned char idle_notification; unsigned char request_pending; unsigned char deferred_resume; unsigned char run_wake; unsigned char runtime_auto; unsigned char no_callbacks; unsigned char irq_safe; unsigned char use_autosuspend; unsigned char timer_autosuspends; unsigned char memalloc_noio; enum rpm_request request; enum rpm_status runtime_status; int runtime_error; int autosuspend_delay; unsigned long last_busy; unsigned long active_jiffies; unsigned long suspended_jiffies; unsigned long accounting_timestamp; struct pm_subsys_data *subsys_data; struct dev_pm_qos *qos; } ;
591 struct dev_pm_domain { struct dev_pm_ops ops; } ;
133 struct pci_bus ;
341 struct device_node ;
1276 struct llist_node ;
64 struct llist_node { struct llist_node *next; } ;
58 struct mem_cgroup ;
325 struct idr_layer { int prefix; unsigned long bitmap[4U]; struct idr_layer *ary[256U]; int count; int layer; struct callback_head callback_head; } ;
38 struct idr { struct idr_layer *hint; struct idr_layer *top; struct idr_layer *id_free; int layers; int id_free_cnt; int cur; spinlock_t lock; } ;
197 struct ida_bitmap { long nr_busy; unsigned long bitmap[15U]; } ;
213 struct ida { struct idr idr; struct ida_bitmap *free_bitmap; } ;
245 struct dentry ;
246 struct iattr ;
247 struct super_block ;
248 struct file_system_type ;
249 struct kernfs_open_node ;
250 struct kernfs_iattrs ;
266 struct kernfs_root ;
266 struct kernfs_elem_dir { unsigned long subdirs; struct rb_root children; struct kernfs_root *root; } ;
62 struct kernfs_node ;
62 struct kernfs_elem_symlink { struct kernfs_node *target_kn; } ;
66 struct kernfs_ops ;
66 struct kernfs_elem_attr { const struct kernfs_ops *ops; struct kernfs_open_node *open; loff_t size; } ;
72 union __anonunion_u_145 { struct completion *completion; struct kernfs_node *removed_list; } ;
72 union __anonunion____missing_field_name_146 { struct kernfs_elem_dir dir; struct kernfs_elem_symlink symlink; struct kernfs_elem_attr attr; } ;
72 struct kernfs_node { atomic_t count; atomic_t active; struct lockdep_map dep_map; struct kernfs_node *parent; const char *name; struct rb_node rb; union __anonunion_u_145 u; const void *ns; unsigned int hash; union __anonunion____missing_field_name_146 __annonCompField46; void *priv; unsigned short flags; umode_t mode; unsigned int ino; struct kernfs_iattrs *iattr; } ;
114 struct kernfs_dir_ops { int (*mkdir)(struct kernfs_node *, const char *, umode_t ); int (*rmdir)(struct kernfs_node *); int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *); } ;
127 struct kernfs_root { struct kernfs_node *kn; struct ida ino_ida; struct kernfs_dir_ops *dir_ops; } ;
137 struct kernfs_open_file { struct kernfs_node *kn; struct file *file; struct mutex mutex; int event; struct list_head list; bool mmapped; const struct vm_operations_struct *vm_ops; } ;
151 struct kernfs_ops { int (*seq_show)(struct seq_file *, void *); void * (*seq_start)(struct seq_file *, loff_t *); void * (*seq_next)(struct seq_file *, void *, loff_t *); void (*seq_stop)(struct seq_file *, void *); ssize_t (*read)(struct kernfs_open_file *, char *, size_t , loff_t ); ssize_t (*write)(struct kernfs_open_file *, char *, size_t , loff_t ); int (*mmap)(struct kernfs_open_file *, struct vm_area_struct *); struct lock_class_key lockdep_key; } ;
376 struct kobject ;
377 enum kobj_ns_type { KOBJ_NS_TYPE_NONE = 0, KOBJ_NS_TYPE_NET = 1, KOBJ_NS_TYPES = 2 } ;
383 struct kobj_ns_type_operations { enum kobj_ns_type type; bool (*current_may_mount)(); void * (*grab_current_ns)(); const void * (*netlink_ns)(struct sock *); const void * (*initial_ns)(); void (*drop_ns)(void *); } ;
83 struct user_namespace ;
22 struct __anonstruct_kuid_t_147 { uid_t val; } ;
22 typedef struct __anonstruct_kuid_t_147 kuid_t;
27 struct __anonstruct_kgid_t_148 { gid_t val; } ;
27 typedef struct __anonstruct_kgid_t_148 kgid_t;
127 struct kstat { u64 ino; dev_t dev; umode_t mode; unsigned int nlink; kuid_t uid; kgid_t gid; dev_t rdev; loff_t size; struct timespec atime; struct timespec mtime; struct timespec ctime; unsigned long blksize; unsigned long long blocks; } ;
36 struct bin_attribute ;
37 struct attribute { const char *name; umode_t mode; bool ignore_lockdep; struct lock_class_key *key; struct lock_class_key skey; } ;
37 struct attribute_group { const char *name; umode_t (*is_visible)(struct kobject *, struct attribute *, int); struct attribute **attrs; struct bin_attribute **bin_attrs; } ;
67 struct bin_attribute { struct attribute attr; size_t size; void *private; ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t , size_t ); ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t , size_t ); int (*mmap)(struct file *, struct kobject *, struct bin_attribute *, struct vm_area_struct *); } ;
130 struct sysfs_ops { ssize_t (*show)(struct kobject *, struct attribute *, char *); ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t ); } ;
462 struct kref { atomic_t refcount; } ;
50 struct kset ;
50 struct kobj_type ;
50 struct kobject { const char *name; struct list_head entry; struct kobject *parent; struct kset *kset; struct kobj_type *ktype; struct kernfs_node *sd; struct kref kref; struct delayed_work release; unsigned char state_initialized; unsigned char state_in_sysfs; unsigned char state_add_uevent_sent; unsigned char state_remove_uevent_sent; unsigned char uevent_suppress; } ;
112 struct kobj_type { void (*release)(struct kobject *); const struct sysfs_ops *sysfs_ops; struct attribute **default_attrs; const struct kobj_ns_type_operations * (*child_ns_type)(struct kobject *); const void * (*namespace)(struct kobject *); } ;
120 struct kobj_uevent_env { char *envp[32U]; int envp_idx; char buf[2048U]; int buflen; } ;
127 struct kset_uevent_ops { const int (*filter)(struct kset *, struct kobject *); const const char * (*name)(struct kset *, struct kobject *); const int (*uevent)(struct kset *, struct kobject *, struct kobj_uevent_env *); } ;
144 struct kset { struct list_head list; spinlock_t list_lock; struct kobject kobj; const struct kset_uevent_ops *uevent_ops; } ;
249 struct kmem_cache_cpu { void **freelist; unsigned long tid; struct page *page; struct page *partial; unsigned int stat[26U]; } ;
48 struct kmem_cache_order_objects { unsigned long x; } ;
58 struct memcg_cache_params ;
58 struct kmem_cache_node ;
58 struct kmem_cache { struct kmem_cache_cpu *cpu_slab; unsigned long flags; unsigned long min_partial; int size; int object_size; int offset; int cpu_partial; struct kmem_cache_order_objects oo; struct kmem_cache_order_objects max; struct kmem_cache_order_objects min; gfp_t allocflags; int refcount; void (*ctor)(void *); int inuse; int align; int reserved; const char *name; struct list_head list; struct kobject kobj; struct memcg_cache_params *memcg_params; int max_attr_size; int remote_node_defrag_ratio; struct kmem_cache_node *node[1024U]; } ;
497 struct __anonstruct____missing_field_name_150 { struct callback_head callback_head; struct kmem_cache *memcg_caches[0U]; } ;
497 struct __anonstruct____missing_field_name_151 { struct mem_cgroup *memcg; struct list_head list; struct kmem_cache *root_cache; bool dead; atomic_t nr_pages; struct work_struct destroy; } ;
497 union __anonunion____missing_field_name_149 { struct __anonstruct____missing_field_name_150 __annonCompField47; struct __anonstruct____missing_field_name_151 __annonCompField48; } ;
497 struct memcg_cache_params { bool is_root_cache; union __anonunion____missing_field_name_149 __annonCompField49; } ;
62 struct exception_table_entry { int insn; int fixup; } ;
161 struct in6_addr ;
119 struct sk_buff ;
134 struct klist_node ;
37 struct klist_node { void *n_klist; struct list_head n_node; struct kref n_ref; } ;
67 struct path ;
68 struct seq_file { char *buf; size_t size; size_t from; size_t count; size_t pad_until; loff_t index; loff_t read_pos; u64 version; struct mutex lock; const struct seq_operations *op; int poll_event; struct user_namespace *user_ns; void *private; } ;
35 struct seq_operations { void * (*start)(struct seq_file *, loff_t *); void (*stop)(struct seq_file *, void *); void * (*next)(struct seq_file *, void *, loff_t *); int (*show)(struct seq_file *, void *); } ;
196 struct pinctrl ;
197 struct pinctrl_state ;
194 struct dev_pin_info { struct pinctrl *p; struct pinctrl_state *default_state; struct pinctrl_state *sleep_state; struct pinctrl_state *idle_state; } ;
42 struct dma_map_ops ;
42 struct dev_archdata { struct dma_map_ops *dma_ops; void *iommu; } ;
14 struct device_private ;
15 struct device_driver ;
16 struct driver_private ;
17 struct class ;
18 struct subsys_private ;
19 struct bus_type ;
20 struct iommu_ops ;
21 struct iommu_group ;
60 struct device_attribute ;
60 struct bus_type { const char *name; const char *dev_name; struct device *dev_root; struct device_attribute *dev_attrs; const struct attribute_group **bus_groups; const struct attribute_group **dev_groups; const struct attribute_group **drv_groups; int (*match)(struct device *, struct device_driver *); int (*uevent)(struct device *, struct kobj_uevent_env *); int (*probe)(struct device *); int (*remove)(struct device *); void (*shutdown)(struct device *); int (*online)(struct device *); int (*offline)(struct device *); int (*suspend)(struct device *, pm_message_t ); int (*resume)(struct device *); const struct dev_pm_ops *pm; struct iommu_ops *iommu_ops; struct subsys_private *p; struct lock_class_key lock_key; } ;
138 struct device_type ;
195 struct of_device_id ;
195 struct acpi_device_id ;
195 struct device_driver { const char *name; struct bus_type *bus; struct module *owner; const char *mod_name; bool suppress_bind_attrs; const struct of_device_id *of_match_table; const struct acpi_device_id *acpi_match_table; int (*probe)(struct device *); int (*remove)(struct device *); void (*shutdown)(struct device *); int (*suspend)(struct device *, pm_message_t ); int (*resume)(struct device *); const struct attribute_group **groups; const struct dev_pm_ops *pm; struct driver_private *p; } ;
260 struct driver_attribute { struct attribute attr; ssize_t (*show)(struct device_driver *, char *); ssize_t (*store)(struct device_driver *, const char *, size_t ); } ;
321 struct class_attribute ;
321 struct class { const char *name; struct module *owner; struct class_attribute *class_attrs; const struct attribute_group **dev_groups; struct kobject *dev_kobj; int (*dev_uevent)(struct device *, struct kobj_uevent_env *); char * (*devnode)(struct device *, umode_t *); void (*class_release)(struct class *); void (*dev_release)(struct device *); int (*suspend)(struct device *, pm_message_t ); int (*resume)(struct device *); const struct kobj_ns_type_operations *ns_type; const void * (*namespace)(struct device *); const struct dev_pm_ops *pm; struct subsys_private *p; } ;
414 struct class_attribute { struct attribute attr; ssize_t (*show)(struct class *, struct class_attribute *, char *); ssize_t (*store)(struct class *, struct class_attribute *, const char *, size_t ); } ;
482 struct device_type { const char *name; const struct attribute_group **groups; int (*uevent)(struct device *, struct kobj_uevent_env *); char * (*devnode)(struct device *, umode_t *, kuid_t *, kgid_t *); void (*release)(struct device *); const struct dev_pm_ops *pm; } ;
510 struct device_attribute { struct attribute attr; ssize_t (*show)(struct device *, struct device_attribute *, char *); ssize_t (*store)(struct device *, struct device_attribute *, const char *, size_t ); } ;
637 struct device_dma_parameters { unsigned int max_segment_size; unsigned long segment_boundary_mask; } ;
646 struct acpi_device ;
647 struct acpi_dev_node { struct acpi_device *companion; } ;
653 struct dma_coherent_mem ;
653 struct device { struct device *parent; struct device_private *p; struct kobject kobj; const char *init_name; const struct device_type *type; struct mutex mutex; struct bus_type *bus; struct device_driver *driver; void *platform_data; struct dev_pm_info power; struct dev_pm_domain *pm_domain; struct dev_pin_info *pins; int numa_node; u64 *dma_mask; u64 coherent_dma_mask; struct device_dma_parameters *dma_parms; struct list_head dma_pools; struct dma_coherent_mem *dma_mem; struct dev_archdata archdata; struct device_node *of_node; struct acpi_dev_node acpi_node; dev_t devt; u32 id; spinlock_t devres_lock; struct list_head devres_head; struct klist_node knode_class; struct class *class; const struct attribute_group **groups; void (*release)(struct device *); struct iommu_group *iommu_group; bool offline_disabled; bool offline; } ;
795 struct wakeup_source { const char *name; struct list_head entry; spinlock_t lock; struct timer_list timer; unsigned long timer_expires; ktime_t total_time; ktime_t max_time; ktime_t last_time; ktime_t start_prevent_time; ktime_t prevent_sleep_time; unsigned long event_count; unsigned long active_count; unsigned long relax_count; unsigned long expire_count; unsigned long wakeup_count; bool active; bool autosleep_enabled; } ;
93 struct shrink_control { gfp_t gfp_mask; unsigned long nr_to_scan; nodemask_t nodes_to_scan; int nid; } ;
26 struct shrinker { unsigned long int (*count_objects)(struct shrinker *, struct shrink_control *); unsigned long int (*scan_objects)(struct shrinker *, struct shrink_control *); int seeks; long batch; unsigned long flags; struct list_head list; atomic_long_t *nr_deferred; } ;
71 struct file_ra_state ;
72 struct user_struct ;
73 struct writeback_control ;
185 struct vm_fault { unsigned int flags; unsigned long pgoff; void *virtual_address; struct page *page; } ;
210 struct vm_operations_struct { void (*open)(struct vm_area_struct *); void (*close)(struct vm_area_struct *); int (*fault)(struct vm_area_struct *, struct vm_fault *); int (*page_mkwrite)(struct vm_area_struct *, struct vm_fault *); int (*access)(struct vm_area_struct *, unsigned long, void *, int, int); int (*set_policy)(struct vm_area_struct *, struct mempolicy *); struct mempolicy * (*get_policy)(struct vm_area_struct *, unsigned long); int (*migrate)(struct vm_area_struct *, const nodemask_t *, const nodemask_t *, unsigned long); int (*remap_pages)(struct vm_area_struct *, unsigned long, unsigned long, unsigned long); } ;
2071 struct scatterlist { unsigned long sg_magic; unsigned long page_link; unsigned int offset; unsigned int length; dma_addr_t dma_address; unsigned int dma_length; } ;
17 struct sg_table { struct scatterlist *sgl; unsigned int nents; unsigned int orig_nents; } ;
38 typedef s32 dma_cookie_t;
1156 struct timerqueue_node { struct rb_node node; ktime_t expires; } ;
12 struct timerqueue_head { struct rb_root head; struct timerqueue_node *next; } ;
50 struct hrtimer_clock_base ;
51 struct hrtimer_cpu_base ;
60 enum hrtimer_restart { HRTIMER_NORESTART = 0, HRTIMER_RESTART = 1 } ;
65 struct hrtimer { struct timerqueue_node node; ktime_t _softexpires; enum hrtimer_restart (*function)(struct hrtimer *); struct hrtimer_clock_base *base; unsigned long state; int start_pid; void *start_site; char start_comm[16U]; } ;
132 struct hrtimer_clock_base { struct hrtimer_cpu_base *cpu_base; int index; clockid_t clockid; struct timerqueue_head active; ktime_t resolution; ktime_t (*get_time)(); ktime_t softirq_time; ktime_t offset; } ;
163 struct hrtimer_cpu_base { raw_spinlock_t lock; unsigned int active_bases; unsigned int clock_was_set; ktime_t expires_next; int hres_active; int hang_detected; unsigned long nr_events; unsigned long nr_retries; unsigned long nr_hangs; ktime_t max_hang_time; struct hrtimer_clock_base clock_base[4U]; } ;
474 struct dma_attrs { unsigned long flags[1U]; } ;
70 struct dma_map_ops { void * (*alloc)(struct device *, size_t , dma_addr_t *, gfp_t , struct dma_attrs *); void (*free)(struct device *, size_t , void *, dma_addr_t , struct dma_attrs *); int (*mmap)(struct device *, struct vm_area_struct *, void *, dma_addr_t , size_t , struct dma_attrs *); int (*get_sgtable)(struct device *, struct sg_table *, void *, dma_addr_t , size_t , struct dma_attrs *); dma_addr_t (*map_page)(struct device *, struct page *, unsigned long, size_t , enum dma_data_direction , struct dma_attrs *); void (*unmap_page)(struct device *, dma_addr_t , size_t , enum dma_data_direction , struct dma_attrs *); int (*map_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction , struct dma_attrs *); void (*unmap_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction , struct dma_attrs *); void (*sync_single_for_cpu)(struct device *, dma_addr_t , size_t , enum dma_data_direction ); void (*sync_single_for_device)(struct device *, dma_addr_t , size_t , enum dma_data_direction ); void (*sync_sg_for_cpu)(struct device *, struct scatterlist *, int, enum dma_data_direction ); void (*sync_sg_for_device)(struct device *, struct scatterlist *, int, enum dma_data_direction ); int (*mapping_error)(struct device *, dma_addr_t ); int (*dma_supported)(struct device *, u64 ); int (*set_dma_mask)(struct device *, u64 ); int is_phys; } ;
15 typedef u64 netdev_features_t;
18 struct nf_conntrack { atomic_t use; } ;
136 struct nf_bridge_info { atomic_t use; unsigned int mask; struct net_device *physindev; struct net_device *physoutdev; unsigned long data[4U]; } ;
146 struct sk_buff_head { struct sk_buff *next; struct sk_buff *prev; __u32 qlen; spinlock_t lock; } ;
354 typedef unsigned int sk_buff_data_t;
355 struct sec_path ;
355 struct __anonstruct____missing_field_name_156 { __u16 csum_start; __u16 csum_offset; } ;
355 union __anonunion____missing_field_name_155 { __wsum csum; struct __anonstruct____missing_field_name_156 __annonCompField51; } ;
355 union __anonunion____missing_field_name_157 { unsigned int napi_id; dma_cookie_t dma_cookie; } ;
355 union __anonunion____missing_field_name_158 { __u32 mark; __u32 dropcount; __u32 reserved_tailroom; } ;
355 struct sk_buff { struct sk_buff *next; struct sk_buff *prev; ktime_t tstamp; struct sock *sk; struct net_device *dev; char cb[48U]; unsigned long _skb_refdst; struct sec_path *sp; unsigned int len; unsigned int data_len; __u16 mac_len; __u16 hdr_len; union __anonunion____missing_field_name_155 __annonCompField52; __u32 priority; unsigned char local_df; unsigned char cloned; unsigned char ip_summed; unsigned char nohdr; unsigned char nfctinfo; unsigned char pkt_type; unsigned char fclone; unsigned char ipvs_property; unsigned char peeked; unsigned char nf_trace; __be16 protocol; void (*destructor)(struct sk_buff *); struct nf_conntrack *nfct; struct nf_bridge_info *nf_bridge; int skb_iif; __u32 rxhash; __be16 vlan_proto; __u16 vlan_tci; __u16 tc_index; __u16 tc_verd; __u16 queue_mapping; unsigned char ndisc_nodetype; unsigned char pfmemalloc; unsigned char ooo_okay; unsigned char l4_rxhash; unsigned char wifi_acked_valid; unsigned char wifi_acked; unsigned char no_fcs; unsigned char head_frag; unsigned char encapsulation; union __anonunion____missing_field_name_157 __annonCompField53; __u32 secmark; union __anonunion____missing_field_name_158 __annonCompField54; __be16 inner_protocol; __u16 inner_transport_header; __u16 inner_network_header; __u16 inner_mac_header; __u16 transport_header; __u16 network_header; __u16 mac_header; sk_buff_data_t tail; sk_buff_data_t end; unsigned char *head; unsigned char *data; unsigned int truesize; atomic_t users; } ;
578 struct dst_entry ;
646 struct rtable ;
2939 struct plist_head { struct list_head node_list; } ;
84 struct plist_node { int prio; struct list_head prio_list; struct list_head node_list; } ;
83 struct pm_qos_request { struct plist_node node; int pm_qos_class; struct delayed_work work; } ;
45 struct pm_qos_flags_request { struct list_head node; s32 flags; } ;
50 enum dev_pm_qos_req_type { DEV_PM_QOS_LATENCY = 1, DEV_PM_QOS_FLAGS = 2 } ;
55 union __anonunion_data_159 { struct plist_node pnode; struct pm_qos_flags_request flr; } ;
55 struct dev_pm_qos_request { enum dev_pm_qos_req_type type; union __anonunion_data_159 data; struct device *dev; } ;
64 enum pm_qos_type { PM_QOS_UNITIALIZED = 0, PM_QOS_MAX = 1, PM_QOS_MIN = 2 } ;
70 struct pm_qos_constraints { struct plist_head list; s32 target_value; s32 default_value; enum pm_qos_type type; struct blocking_notifier_head *notifiers; } ;
83 struct pm_qos_flags { struct list_head list; s32 effective_flags; } ;
88 struct dev_pm_qos { struct pm_qos_constraints latency; struct pm_qos_flags flags; struct dev_pm_qos_request *latency_req; struct dev_pm_qos_request *flags_req; } ;
460 struct dql { unsigned int num_queued; unsigned int adj_limit; unsigned int last_obj_cnt; unsigned int limit; unsigned int num_completed; unsigned int prev_ovlimit; unsigned int prev_num_queued; unsigned int prev_last_obj_cnt; unsigned int lowest_slack; unsigned long slack_start_time; unsigned int max_limit; unsigned int min_limit; unsigned int slack_hold_time; } ;
25 struct sem_undo_list ;
25 struct sysv_sem { struct sem_undo_list *undo_list; } ;
43 struct __anonstruct_sync_serial_settings_160 { unsigned int clock_rate; unsigned int clock_type; unsigned short loopback; } ;
43 typedef struct __anonstruct_sync_serial_settings_160 sync_serial_settings;
50 struct __anonstruct_te1_settings_161 { unsigned int clock_rate; unsigned int clock_type; unsigned short loopback; unsigned int slot_map; } ;
50 typedef struct __anonstruct_te1_settings_161 te1_settings;
55 struct __anonstruct_raw_hdlc_proto_162 { unsigned short encoding; unsigned short parity; } ;
55 typedef struct __anonstruct_raw_hdlc_proto_162 raw_hdlc_proto;
65 struct __anonstruct_fr_proto_163 { unsigned int t391; unsigned int t392; unsigned int n391; unsigned int n392; unsigned int n393; unsigned short lmi; unsigned short dce; } ;
65 typedef struct __anonstruct_fr_proto_163 fr_proto;
69 struct __anonstruct_fr_proto_pvc_164 { unsigned int dlci; } ;
69 typedef struct __anonstruct_fr_proto_pvc_164 fr_proto_pvc;
74 struct __anonstruct_fr_proto_pvc_info_165 { unsigned int dlci; char master[16U]; } ;
74 typedef struct __anonstruct_fr_proto_pvc_info_165 fr_proto_pvc_info;
79 struct __anonstruct_cisco_proto_166 { unsigned int interval; unsigned int timeout; } ;
79 typedef struct __anonstruct_cisco_proto_166 cisco_proto;
95 struct ifmap { unsigned long mem_start; unsigned long mem_end; unsigned short base_addr; unsigned char irq; unsigned char dma; unsigned char port; } ;
151 union __anonunion_ifs_ifsu_167 { raw_hdlc_proto *raw_hdlc; cisco_proto *cisco; fr_proto *fr; fr_proto_pvc *fr_pvc; fr_proto_pvc_info *fr_pvc_info; sync_serial_settings *sync; te1_settings *te1; } ;
151 struct if_settings { unsigned int type; unsigned int size; union __anonunion_ifs_ifsu_167 ifs_ifsu; } ;
169 union __anonunion_ifr_ifrn_168 { char ifrn_name[16U]; } ;
169 union __anonunion_ifr_ifru_169 { struct sockaddr ifru_addr; struct sockaddr ifru_dstaddr; struct sockaddr ifru_broadaddr; struct sockaddr ifru_netmask; struct sockaddr ifru_hwaddr; short ifru_flags; int ifru_ivalue; int ifru_mtu; struct ifmap ifru_map; char ifru_slave[16U]; char ifru_newname[16U]; void *ifru_data; struct if_settings ifru_settings; } ;
169 struct ifreq { union __anonunion_ifr_ifrn_168 ifr_ifrn; union __anonunion_ifr_ifru_169 ifr_ifru; } ;
91 struct hlist_bl_node ;
91 struct hlist_bl_head { struct hlist_bl_node *first; } ;
36 struct hlist_bl_node { struct hlist_bl_node *next; struct hlist_bl_node **pprev; } ;
114 struct __anonstruct____missing_field_name_172 { spinlock_t lock; unsigned int count; } ;
114 union __anonunion____missing_field_name_171 { struct __anonstruct____missing_field_name_172 __annonCompField55; } ;
114 struct lockref { union __anonunion____missing_field_name_171 __annonCompField56; } ;
49 struct nameidata ;
50 struct vfsmount ;
51 struct __anonstruct____missing_field_name_174 { u32 hash; u32 len; } ;
51 union __anonunion____missing_field_name_173 { struct __anonstruct____missing_field_name_174 __annonCompField57; u64 hash_len; } ;
51 struct qstr { union __anonunion____missing_field_name_173 __annonCompField58; const unsigned char *name; } ;
90 struct dentry_operations ;
90 union __anonunion_d_u_175 { struct list_head d_child; struct callback_head d_rcu; } ;
90 struct dentry { unsigned int d_flags; seqcount_t d_seq; struct hlist_bl_node d_hash; struct dentry *d_parent; struct qstr d_name; struct inode *d_inode; unsigned char d_iname[32U]; struct lockref d_lockref; const struct dentry_operations *d_op; struct super_block *d_sb; unsigned long d_time; void *d_fsdata; struct list_head d_lru; union __anonunion_d_u_175 d_u; struct list_head d_subdirs; struct hlist_node d_alias; } ;
142 struct dentry_operations { int (*d_revalidate)(struct dentry *, unsigned int); int (*d_weak_revalidate)(struct dentry *, unsigned int); int (*d_hash)(const struct dentry *, struct qstr *); int (*d_compare)(const struct dentry *, const struct dentry *, unsigned int, const char *, const struct qstr *); int (*d_delete)(const struct dentry *); void (*d_release)(struct dentry *); void (*d_prune)(struct dentry *); void (*d_iput)(struct dentry *, struct inode *); char * (*d_dname)(struct dentry *, char *, int); struct vfsmount * (*d_automount)(struct path *); int (*d_manage)(struct dentry *, bool ); } ;
469 struct path { struct vfsmount *mnt; struct dentry *dentry; } ;
26 struct list_lru_node { spinlock_t lock; struct list_head list; long nr_items; } ;
28 struct list_lru { struct list_lru_node *node; nodemask_t active_nodes; } ;
58 struct radix_tree_node ;
58 struct radix_tree_root { unsigned int height; gfp_t gfp_mask; struct radix_tree_node *rnode; } ;
381 enum pid_type { PIDTYPE_PID = 0, PIDTYPE_PGID = 1, PIDTYPE_SID = 2, PIDTYPE_MAX = 3 } ;
388 struct pid_namespace ;
388 struct upid { int nr; struct pid_namespace *ns; struct hlist_node pid_chain; } ;
56 struct pid { atomic_t count; unsigned int level; struct hlist_head tasks[3U]; struct callback_head rcu; struct upid numbers[1U]; } ;
68 struct pid_link { struct hlist_node node; struct pid *pid; } ;
22 struct kernel_cap_struct { __u32 cap[2U]; } ;
25 typedef struct kernel_cap_struct kernel_cap_t;
45 struct fiemap_extent { __u64 fe_logical; __u64 fe_physical; __u64 fe_length; __u64 fe_reserved64[2U]; __u32 fe_flags; __u32 fe_reserved[3U]; } ;
38 enum migrate_mode { MIGRATE_ASYNC = 0, MIGRATE_SYNC_LIGHT = 1, MIGRATE_SYNC = 2 } ;
30 struct block_device ;
31 struct io_context ;
32 struct cgroup_subsys_state ;
56 struct export_operations ;
58 struct kstatfs ;
59 struct swap_info_struct ;
68 struct iattr { unsigned int ia_valid; umode_t ia_mode; kuid_t ia_uid; kgid_t ia_gid; loff_t ia_size; struct timespec ia_atime; struct timespec ia_mtime; struct timespec ia_ctime; struct file *ia_file; } ;
246 struct percpu_counter { raw_spinlock_t lock; s64 count; struct list_head list; s32 *counters; } ;
176 struct fs_disk_quota { __s8 d_version; __s8 d_flags; __u16 d_fieldmask; __u32 d_id; __u64 d_blk_hardlimit; __u64 d_blk_softlimit; __u64 d_ino_hardlimit; __u64 d_ino_softlimit; __u64 d_bcount; __u64 d_icount; __s32 d_itimer; __s32 d_btimer; __u16 d_iwarns; __u16 d_bwarns; __s32 d_padding2; __u64 d_rtb_hardlimit; __u64 d_rtb_softlimit; __u64 d_rtbcount; __s32 d_rtbtimer; __u16 d_rtbwarns; __s16 d_padding3; char d_padding4[8U]; } ;
76 struct fs_qfilestat { __u64 qfs_ino; __u64 qfs_nblks; __u32 qfs_nextents; } ;
151 typedef struct fs_qfilestat fs_qfilestat_t;
152 struct fs_quota_stat { __s8 qs_version; __u16 qs_flags; __s8 qs_pad; fs_qfilestat_t qs_uquota; fs_qfilestat_t qs_gquota; __u32 qs_incoredqs; __s32 qs_btimelimit; __s32 qs_itimelimit; __s32 qs_rtbtimelimit; __u16 qs_bwarnlimit; __u16 qs_iwarnlimit; } ;
166 struct fs_qfilestatv { __u64 qfs_ino; __u64 qfs_nblks; __u32 qfs_nextents; __u32 qfs_pad; } ;
196 struct fs_quota_statv { __s8 qs_version; __u8 qs_pad1; __u16 qs_flags; __u32 qs_incoredqs; struct fs_qfilestatv qs_uquota; struct fs_qfilestatv qs_gquota; struct fs_qfilestatv qs_pquota; __s32 qs_btimelimit; __s32 qs_itimelimit; __s32 qs_rtbtimelimit; __u16 qs_bwarnlimit; __u16 qs_iwarnlimit; __u64 qs_pad2[8U]; } ;
212 struct dquot ;
19 typedef __kernel_uid32_t projid_t;
23 struct __anonstruct_kprojid_t_177 { projid_t val; } ;
23 typedef struct __anonstruct_kprojid_t_177 kprojid_t;
119 struct if_dqinfo { __u64 dqi_bgrace; __u64 dqi_igrace; __u32 dqi_flags; __u32 dqi_valid; } ;
152 enum quota_type { USRQUOTA = 0, GRPQUOTA = 1, PRJQUOTA = 2 } ;
60 typedef long long qsize_t;
61 union __anonunion____missing_field_name_178 { kuid_t uid; kgid_t gid; kprojid_t projid; } ;
61 struct kqid { union __anonunion____missing_field_name_178 __annonCompField59; enum quota_type type; } ;
178 struct mem_dqblk { qsize_t dqb_bhardlimit; qsize_t dqb_bsoftlimit; qsize_t dqb_curspace; qsize_t dqb_rsvspace; qsize_t dqb_ihardlimit; qsize_t dqb_isoftlimit; qsize_t dqb_curinodes; time_t dqb_btime; time_t dqb_itime; } ;
200 struct quota_format_type ;
201 struct mem_dqinfo { struct quota_format_type *dqi_format; int dqi_fmt_id; struct list_head dqi_dirty_list; unsigned long dqi_flags; unsigned int dqi_bgrace; unsigned int dqi_igrace; qsize_t dqi_maxblimit; qsize_t dqi_maxilimit; void *dqi_priv; } ;
264 struct dquot { struct hlist_node dq_hash; struct list_head dq_inuse; struct list_head dq_free; struct list_head dq_dirty; struct mutex dq_lock; atomic_t dq_count; wait_queue_head_t dq_wait_unused; struct super_block *dq_sb; struct kqid dq_id; loff_t dq_off; unsigned long dq_flags; struct mem_dqblk dq_dqb; } ;
291 struct quota_format_ops { int (*check_quota_file)(struct super_block *, int); int (*read_file_info)(struct super_block *, int); int (*write_file_info)(struct super_block *, int); int (*free_file_info)(struct super_block *, int); int (*read_dqblk)(struct dquot *); int (*commit_dqblk)(struct dquot *); int (*release_dqblk)(struct dquot *); } ;
302 struct dquot_operations { int (*write_dquot)(struct dquot *); struct dquot * (*alloc_dquot)(struct super_block *, int); void (*destroy_dquot)(struct dquot *); int (*acquire_dquot)(struct dquot *); int (*release_dquot)(struct dquot *); int (*mark_dirty)(struct dquot *); int (*write_info)(struct super_block *, int); qsize_t * (*get_reserved_space)(struct inode *); } ;
316 struct quotactl_ops { int (*quota_on)(struct super_block *, int, int, struct path *); int (*quota_on_meta)(struct super_block *, int, int); int (*quota_off)(struct super_block *, int); int (*quota_sync)(struct super_block *, int); int (*get_info)(struct super_block *, int, struct if_dqinfo *); int (*set_info)(struct super_block *, int, struct if_dqinfo *); int (*get_dqblk)(struct super_block *, struct kqid , struct fs_disk_quota *); int (*set_dqblk)(struct super_block *, struct kqid , struct fs_disk_quota *); int (*get_xstate)(struct super_block *, struct fs_quota_stat *); int (*set_xstate)(struct super_block *, unsigned int, int); int (*get_xstatev)(struct super_block *, struct fs_quota_statv *); } ;
333 struct quota_format_type { int qf_fmt_id; const struct quota_format_ops *qf_ops; struct module *qf_owner; struct quota_format_type *qf_next; } ;
379 struct quota_info { unsigned int flags; struct mutex dqio_mutex; struct mutex dqonoff_mutex; struct rw_semaphore dqptr_sem; struct inode *files[2U]; struct mem_dqinfo info[2U]; const struct quota_format_ops *ops[2U]; } ;
345 union __anonunion_arg_180 { char *buf; void *data; } ;
345 struct __anonstruct_read_descriptor_t_179 { size_t written; size_t count; union __anonunion_arg_180 arg; int error; } ;
345 typedef struct __anonstruct_read_descriptor_t_179 read_descriptor_t;
348 struct address_space_operations { int (*writepage)(struct page *, struct writeback_control *); int (*readpage)(struct file *, struct page *); int (*writepages)(struct address_space *, struct writeback_control *); int (*set_page_dirty)(struct page *); int (*readpages)(struct file *, struct address_space *, struct list_head *, unsigned int); int (*write_begin)(struct file *, struct address_space *, loff_t , unsigned int, unsigned int, struct page **, void **); int (*write_end)(struct file *, struct address_space *, loff_t , unsigned int, unsigned int, struct page *, void *); sector_t (*bmap)(struct address_space *, sector_t ); void (*invalidatepage)(struct page *, unsigned int, unsigned int); int (*releasepage)(struct page *, gfp_t ); void (*freepage)(struct page *); ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *, loff_t , unsigned long); int (*get_xip_mem)(struct address_space *, unsigned long, int, void **, unsigned long *); int (*migratepage)(struct address_space *, struct page *, struct page *, enum migrate_mode ); int (*launder_page)(struct page *); int (*is_partially_uptodate)(struct page *, read_descriptor_t *, unsigned long); void (*is_dirty_writeback)(struct page *, bool *, bool *); int (*error_remove_page)(struct address_space *, struct page *); int (*swap_activate)(struct swap_info_struct *, struct file *, sector_t *); void (*swap_deactivate)(struct file *); } ;
408 struct backing_dev_info ;
409 struct address_space { struct inode *host; struct radix_tree_root page_tree; spinlock_t tree_lock; unsigned int i_mmap_writable; struct rb_root i_mmap; struct list_head i_mmap_nonlinear; struct mutex i_mmap_mutex; unsigned long nrpages; unsigned long writeback_index; const struct address_space_operations *a_ops; unsigned long flags; struct backing_dev_info *backing_dev_info; spinlock_t private_lock; struct list_head private_list; void *private_data; } ;
430 struct request_queue ;
431 struct hd_struct ;
431 struct gendisk ;
431 struct block_device { dev_t bd_dev; int bd_openers; struct inode *bd_inode; struct super_block *bd_super; struct mutex bd_mutex; struct list_head bd_inodes; void *bd_claiming; void *bd_holder; int bd_holders; bool bd_write_holder; struct list_head bd_holder_disks; struct block_device *bd_contains; unsigned int bd_block_size; struct hd_struct *bd_part; unsigned int bd_part_count; int bd_invalidated; struct gendisk *bd_disk; struct request_queue *bd_queue; struct list_head bd_list; unsigned long bd_private; int bd_fsfreeze_count; struct mutex bd_fsfreeze_mutex; } ;
503 struct posix_acl ;
504 struct inode_operations ;
504 union __anonunion____missing_field_name_181 { const unsigned int i_nlink; unsigned int __i_nlink; } ;
504 union __anonunion____missing_field_name_182 { struct hlist_head i_dentry; struct callback_head i_rcu; } ;
504 struct file_lock ;
504 struct cdev ;
504 union __anonunion____missing_field_name_183 { struct pipe_inode_info *i_pipe; struct block_device *i_bdev; struct cdev *i_cdev; } ;
504 struct inode { umode_t i_mode; unsigned short i_opflags; kuid_t i_uid; kgid_t i_gid; unsigned int i_flags; struct posix_acl *i_acl; struct posix_acl *i_default_acl; const struct inode_operations *i_op; struct super_block *i_sb; struct address_space *i_mapping; void *i_security; unsigned long i_ino; union __anonunion____missing_field_name_181 __annonCompField60; dev_t i_rdev; loff_t i_size; struct timespec i_atime; struct timespec i_mtime; struct timespec i_ctime; spinlock_t i_lock; unsigned short i_bytes; unsigned int i_blkbits; blkcnt_t i_blocks; unsigned long i_state; struct mutex i_mutex; unsigned long dirtied_when; struct hlist_node i_hash; struct list_head i_wb_list; struct list_head i_lru; struct list_head i_sb_list; union __anonunion____missing_field_name_182 __annonCompField61; u64 i_version; atomic_t i_count; atomic_t i_dio_count; atomic_t i_writecount; const struct file_operations *i_fop; struct file_lock *i_flock; struct address_space i_data; struct dquot *i_dquot[2U]; struct list_head i_devices; union __anonunion____missing_field_name_183 __annonCompField62; __u32 i_generation; __u32 i_fsnotify_mask; struct hlist_head i_fsnotify_marks; atomic_t i_readcount; void *i_private; } ;
740 struct fown_struct { rwlock_t lock; struct pid *pid; enum pid_type pid_type; kuid_t uid; kuid_t euid; int signum; } ;
748 struct file_ra_state { unsigned long start; unsigned int size; unsigned int async_size; unsigned int ra_pages; unsigned int mmap_miss; loff_t prev_pos; } ;
771 union __anonunion_f_u_184 { struct llist_node fu_llist; struct callback_head fu_rcuhead; } ;
771 struct file { union __anonunion_f_u_184 f_u; struct path f_path; struct inode *f_inode; const struct file_operations *f_op; spinlock_t f_lock; atomic_long_t f_count; unsigned int f_flags; fmode_t f_mode; struct mutex f_pos_lock; loff_t f_pos; struct fown_struct f_owner; const struct cred *f_cred; struct file_ra_state f_ra; u64 f_version; void *f_security; void *private_data; struct list_head f_ep_links; struct list_head f_tfile_llink; struct address_space *f_mapping; unsigned long f_mnt_write_state; } ;
909 struct files_struct ;
909 typedef struct files_struct *fl_owner_t;
910 struct file_lock_operations { void (*fl_copy_lock)(struct file_lock *, struct file_lock *); void (*fl_release_private)(struct file_lock *); } ;
915 struct lock_manager_operations { int (*lm_compare_owner)(struct file_lock *, struct file_lock *); unsigned long int (*lm_owner_key)(struct file_lock *); void (*lm_notify)(struct file_lock *); int (*lm_grant)(struct file_lock *, struct file_lock *, int); void (*lm_break)(struct file_lock *); int (*lm_change)(struct file_lock **, int); } ;
933 struct nlm_lockowner ;
934 struct nfs_lock_info { u32 state; struct nlm_lockowner *owner; struct list_head list; } ;
14 struct nfs4_lock_state ;
15 struct nfs4_lock_info { struct nfs4_lock_state *owner; } ;
19 struct __anonstruct_afs_186 { struct list_head link; int state; } ;
19 union __anonunion_fl_u_185 { struct nfs_lock_info nfs_fl; struct nfs4_lock_info nfs4_fl; struct __anonstruct_afs_186 afs; } ;
19 struct file_lock { struct file_lock *fl_next; struct hlist_node fl_link; struct list_head fl_block; fl_owner_t fl_owner; unsigned int fl_flags; unsigned char fl_type; unsigned int fl_pid; int fl_link_cpu; struct pid *fl_nspid; wait_queue_head_t fl_wait; struct file *fl_file; loff_t fl_start; loff_t fl_end; struct fasync_struct *fl_fasync; unsigned long fl_break_time; unsigned long fl_downgrade_time; const struct file_lock_operations *fl_ops; const struct lock_manager_operations *fl_lmops; union __anonunion_fl_u_185 fl_u; } ;
1036 struct fasync_struct { spinlock_t fa_lock; int magic; int fa_fd; struct fasync_struct *fa_next; struct file *fa_file; struct callback_head fa_rcu; } ;
1228 struct sb_writers { struct percpu_counter counter[3U]; wait_queue_head_t wait; int frozen; wait_queue_head_t wait_unfrozen; struct lockdep_map lock_map[3U]; } ;
1244 struct super_operations ;
1244 struct xattr_handler ;
1244 struct mtd_info ;
1244 struct super_block { struct list_head s_list; dev_t s_dev; unsigned char s_blocksize_bits; unsigned long s_blocksize; loff_t s_maxbytes; struct file_system_type *s_type; const struct super_operations *s_op; const struct dquot_operations *dq_op; const struct quotactl_ops *s_qcop; const struct export_operations *s_export_op; unsigned long s_flags; unsigned long s_magic; struct dentry *s_root; struct rw_semaphore s_umount; int s_count; atomic_t s_active; void *s_security; const struct xattr_handler **s_xattr; struct list_head s_inodes; struct hlist_bl_head s_anon; struct list_head s_mounts; struct block_device *s_bdev; struct backing_dev_info *s_bdi; struct mtd_info *s_mtd; struct hlist_node s_instances; struct quota_info s_dquot; struct sb_writers s_writers; char s_id[32U]; u8 s_uuid[16U]; void *s_fs_info; unsigned int s_max_links; fmode_t s_mode; u32 s_time_gran; struct mutex s_vfs_rename_mutex; char *s_subtype; char *s_options; const struct dentry_operations *s_d_op; int cleancache_poolid; struct shrinker s_shrink; atomic_long_t s_remove_count; int s_readonly_remount; struct workqueue_struct *s_dio_done_wq; struct list_lru s_dentry_lru; struct list_lru s_inode_lru; struct callback_head rcu; } ;
1474 struct fiemap_extent_info { unsigned int fi_flags; unsigned int fi_extents_mapped; unsigned int fi_extents_max; struct fiemap_extent *fi_extents_start; } ;
1512 struct dir_context { int (*actor)(void *, const char *, int, loff_t , u64 , unsigned int); loff_t pos; } ;
1517 struct file_operations { struct module *owner; loff_t (*llseek)(struct file *, loff_t , int); ssize_t (*read)(struct file *, char *, size_t , loff_t *); ssize_t (*write)(struct file *, const char *, size_t , loff_t *); ssize_t (*aio_read)(struct kiocb *, const struct iovec *, unsigned long, loff_t ); ssize_t (*aio_write)(struct kiocb *, const struct iovec *, unsigned long, loff_t ); int (*iterate)(struct file *, struct dir_context *); unsigned int (*poll)(struct file *, struct poll_table_struct *); long int (*unlocked_ioctl)(struct file *, unsigned int, unsigned long); long int (*compat_ioctl)(struct file *, unsigned int, unsigned long); int (*mmap)(struct file *, struct vm_area_struct *); int (*open)(struct inode *, struct file *); int (*flush)(struct file *, fl_owner_t ); int (*release)(struct inode *, struct file *); int (*fsync)(struct file *, loff_t , loff_t , int); int (*aio_fsync)(struct kiocb *, int); int (*fasync)(int, struct file *, int); int (*lock)(struct file *, int, struct file_lock *); ssize_t (*sendpage)(struct file *, struct page *, int, size_t , loff_t *, int); unsigned long int (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); int (*check_flags)(int); int (*flock)(struct file *, int, struct file_lock *); ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t , unsigned int); ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t , unsigned int); int (*setlease)(struct file *, long, struct file_lock **); long int (*fallocate)(struct file *, int, loff_t , loff_t ); int (*show_fdinfo)(struct seq_file *, struct file *); } ;
1555 struct inode_operations { struct dentry * (*lookup)(struct inode *, struct dentry *, unsigned int); void * (*follow_link)(struct dentry *, struct nameidata *); int (*permission)(struct inode *, int); struct posix_acl * (*get_acl)(struct inode *, int); int (*readlink)(struct dentry *, char *, int); void (*put_link)(struct dentry *, struct nameidata *, void *); int (*create)(struct inode *, struct dentry *, umode_t , bool ); int (*link)(struct dentry *, struct inode *, struct dentry *); int (*unlink)(struct inode *, struct dentry *); int (*symlink)(struct inode *, struct dentry *, const char *); int (*mkdir)(struct inode *, struct dentry *, umode_t ); int (*rmdir)(struct inode *, struct dentry *); int (*mknod)(struct inode *, struct dentry *, umode_t , dev_t ); int (*rename)(struct inode *, struct dentry *, struct inode *, struct dentry *); int (*setattr)(struct dentry *, struct iattr *); int (*getattr)(struct vfsmount *, struct dentry *, struct kstat *); int (*setxattr)(struct dentry *, const char *, const void *, size_t , int); ssize_t (*getxattr)(struct dentry *, const char *, void *, size_t ); ssize_t (*listxattr)(struct dentry *, char *, size_t ); int (*removexattr)(struct dentry *, const char *); int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 , u64 ); int (*update_time)(struct inode *, struct timespec *, int); int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned int, umode_t , int *); int (*tmpfile)(struct inode *, struct dentry *, umode_t ); int (*set_acl)(struct inode *, struct posix_acl *, int); } ;
1600 struct super_operations { struct inode * (*alloc_inode)(struct super_block *); void (*destroy_inode)(struct inode *); void (*dirty_inode)(struct inode *, int); int (*write_inode)(struct inode *, struct writeback_control *); int (*drop_inode)(struct inode *); void (*evict_inode)(struct inode *); void (*put_super)(struct super_block *); int (*sync_fs)(struct super_block *, int); int (*freeze_fs)(struct super_block *); int (*unfreeze_fs)(struct super_block *); int (*statfs)(struct dentry *, struct kstatfs *); int (*remount_fs)(struct super_block *, int *, char *); void (*umount_begin)(struct super_block *); int (*show_options)(struct seq_file *, struct dentry *); int (*show_devname)(struct seq_file *, struct dentry *); int (*show_path)(struct seq_file *, struct dentry *); int (*show_stats)(struct seq_file *, struct dentry *); ssize_t (*quota_read)(struct super_block *, int, char *, size_t , loff_t ); ssize_t (*quota_write)(struct super_block *, int, const char *, size_t , loff_t ); int (*bdev_try_to_free_page)(struct super_block *, struct page *, gfp_t ); long int (*nr_cached_objects)(struct super_block *, int); long int (*free_cached_objects)(struct super_block *, long, int); } ;
1814 struct file_system_type { const char *name; int fs_flags; struct dentry * (*mount)(struct file_system_type *, int, const char *, void *); void (*kill_sb)(struct super_block *); struct module *owner; struct file_system_type *next; struct hlist_head fs_supers; struct lock_class_key s_lock_key; struct lock_class_key s_umount_key; struct lock_class_key s_vfs_rename_key; struct lock_class_key s_writers_key[3U]; struct lock_class_key i_lock_key; struct lock_class_key i_mutex_key; struct lock_class_key i_mutex_dir_key; } ;
4 typedef unsigned long cputime_t;
24 struct __anonstruct_sigset_t_187 { unsigned long sig[1U]; } ;
24 typedef struct __anonstruct_sigset_t_187 sigset_t;
25 struct siginfo ;
17 typedef void __signalfn_t(int);
18 typedef __signalfn_t *__sighandler_t;
20 typedef void __restorefn_t();
21 typedef __restorefn_t *__sigrestore_t;
34 union sigval { int sival_int; void *sival_ptr; } ;
10 typedef union sigval sigval_t;
11 struct __anonstruct__kill_189 { __kernel_pid_t _pid; __kernel_uid32_t _uid; } ;
11 struct __anonstruct__timer_190 { __kernel_timer_t _tid; int _overrun; char _pad[0U]; sigval_t _sigval; int _sys_private; } ;
11 struct __anonstruct__rt_191 { __kernel_pid_t _pid; __kernel_uid32_t _uid; sigval_t _sigval; } ;
11 struct __anonstruct__sigchld_192 { __kernel_pid_t _pid; __kernel_uid32_t _uid; int _status; __kernel_clock_t _utime; __kernel_clock_t _stime; } ;
11 struct __anonstruct__sigfault_193 { void *_addr; short _addr_lsb; } ;
11 struct __anonstruct__sigpoll_194 { long _band; int _fd; } ;
11 struct __anonstruct__sigsys_195 { void *_call_addr; int _syscall; unsigned int _arch; } ;
11 union __anonunion__sifields_188 { int _pad[28U]; struct __anonstruct__kill_189 _kill; struct __anonstruct__timer_190 _timer; struct __anonstruct__rt_191 _rt; struct __anonstruct__sigchld_192 _sigchld; struct __anonstruct__sigfault_193 _sigfault; struct __anonstruct__sigpoll_194 _sigpoll; struct __anonstruct__sigsys_195 _sigsys; } ;
11 struct siginfo { int si_signo; int si_errno; int si_code; union __anonunion__sifields_188 _sifields; } ;
109 typedef struct siginfo siginfo_t;
21 struct sigpending { struct list_head list; sigset_t signal; } ;
251 struct sigaction { __sighandler_t sa_handler; unsigned long sa_flags; __sigrestore_t sa_restorer; sigset_t sa_mask; } ;
265 struct k_sigaction { struct sigaction sa; } ;
46 struct seccomp_filter ;
47 struct seccomp { int mode; struct seccomp_filter *filter; } ;
40 struct rt_mutex_waiter ;
41 struct rlimit { __kernel_ulong_t rlim_cur; __kernel_ulong_t rlim_max; } ;
11 struct task_io_accounting { u64 rchar; u64 wchar; u64 syscr; u64 syscw; u64 read_bytes; u64 write_bytes; u64 cancelled_write_bytes; } ;
45 struct latency_record { unsigned long backtrace[12U]; unsigned int count; unsigned long time; unsigned long max; } ;
835 struct nsproxy ;
836 struct ctl_table_root ;
837 struct ctl_table_header ;
838 struct ctl_dir ;
39 typedef int proc_handler(struct ctl_table *, int, void *, size_t *, loff_t *);
59 struct ctl_table_poll { atomic_t event; wait_queue_head_t wait; } ;
98 struct ctl_table { const char *procname; void *data; int maxlen; umode_t mode; struct ctl_table *child; proc_handler *proc_handler; struct ctl_table_poll *poll; void *extra1; void *extra2; } ;
119 struct ctl_node { struct rb_node node; struct ctl_table_header *header; } ;
124 struct __anonstruct____missing_field_name_199 { struct ctl_table *ctl_table; int used; int count; int nreg; } ;
124 union __anonunion____missing_field_name_198 { struct __anonstruct____missing_field_name_199 __annonCompField63; struct callback_head rcu; } ;
124 struct ctl_table_set ;
124 struct ctl_table_header { union __anonunion____missing_field_name_198 __annonCompField64; struct completion *unregistering; struct ctl_table *ctl_table_arg; struct ctl_table_root *root; struct ctl_table_set *set; struct ctl_dir *parent; struct ctl_node *node; } ;
145 struct ctl_dir { struct ctl_table_header header; struct rb_root root; } ;
151 struct ctl_table_set { int (*is_seen)(struct ctl_table_set *); struct ctl_dir dir; } ;
156 struct ctl_table_root { struct ctl_table_set default_set; struct ctl_table_set * (*lookup)(struct ctl_table_root *, struct nsproxy *); int (*permissions)(struct ctl_table_header *, struct ctl_table *); } ;
193 struct assoc_array_ptr ;
193 struct assoc_array { struct assoc_array_ptr *root; unsigned long nr_leaves_on_tree; } ;
31 typedef int32_t key_serial_t;
34 typedef uint32_t key_perm_t;
35 struct key ;
36 struct signal_struct ;
37 struct key_type ;
41 struct keyring_index_key { struct key_type *type; const char *description; size_t desc_len; } ;
123 union __anonunion____missing_field_name_200 { struct list_head graveyard_link; struct rb_node serial_node; } ;
123 struct key_user ;
123 union __anonunion____missing_field_name_201 { time_t expiry; time_t revoked_at; } ;
123 struct __anonstruct____missing_field_name_203 { struct key_type *type; char *description; } ;
123 union __anonunion____missing_field_name_202 { struct keyring_index_key index_key; struct __anonstruct____missing_field_name_203 __annonCompField67; } ;
123 union __anonunion_type_data_204 { struct list_head link; unsigned long x[2U]; void *p[2U]; int reject_error; } ;
123 union __anonunion_payload_206 { unsigned long value; void *rcudata; void *data; void *data2[2U]; } ;
123 union __anonunion____missing_field_name_205 { union __anonunion_payload_206 payload; struct assoc_array keys; } ;
123 struct key { atomic_t usage; key_serial_t serial; union __anonunion____missing_field_name_200 __annonCompField65; struct rw_semaphore sem; struct key_user *user; void *security; union __anonunion____missing_field_name_201 __annonCompField66; time_t last_used_at; kuid_t uid; kgid_t gid; key_perm_t perm; unsigned short quotalen; unsigned short datalen; unsigned long flags; union __anonunion____missing_field_name_202 __annonCompField68; union __anonunion_type_data_204 type_data; union __anonunion____missing_field_name_205 __annonCompField69; } ;
345 struct audit_context ;
27 struct group_info { atomic_t usage; int ngroups; int nblocks; kgid_t small_block[32U]; kgid_t *blocks[0U]; } ;
78 struct cred { atomic_t usage; atomic_t subscribers; void *put_addr; unsigned int magic; kuid_t uid; kgid_t gid; kuid_t suid; kgid_t sgid; kuid_t euid; kgid_t egid; kuid_t fsuid; kgid_t fsgid; unsigned int securebits; kernel_cap_t cap_inheritable; kernel_cap_t cap_permitted; kernel_cap_t cap_effective; kernel_cap_t cap_bset; unsigned char jit_keyring; struct key *session_keyring; struct key *process_keyring; struct key *thread_keyring; struct key *request_key_auth; void *security; struct user_struct *user; struct user_namespace *user_ns; struct group_info *group_info; struct callback_head rcu; } ;
123 struct futex_pi_state ;
124 struct robust_list_head ;
125 struct bio_list ;
126 struct fs_struct ;
127 struct perf_event_context ;
128 struct blk_plug ;
180 struct cfs_rq ;
181 struct task_group ;
421 struct sighand_struct { atomic_t count; struct k_sigaction action[64U]; spinlock_t siglock; wait_queue_head_t signalfd_wqh; } ;
460 struct pacct_struct { int ac_flag; long ac_exitcode; unsigned long ac_mem; cputime_t ac_utime; cputime_t ac_stime; unsigned long ac_minflt; unsigned long ac_majflt; } ;
468 struct cpu_itimer { cputime_t expires; cputime_t incr; u32 error; u32 incr_error; } ;
475 struct cputime { cputime_t utime; cputime_t stime; } ;
487 struct task_cputime { cputime_t utime; cputime_t stime; unsigned long long sum_exec_runtime; } ;
507 struct thread_group_cputimer { struct task_cputime cputime; int running; raw_spinlock_t lock; } ;
549 struct autogroup ;
550 struct tty_struct ;
550 struct taskstats ;
550 struct tty_audit_buf ;
550 struct signal_struct { atomic_t sigcnt; atomic_t live; int nr_threads; struct list_head thread_head; wait_queue_head_t wait_chldexit; struct task_struct *curr_target; struct sigpending shared_pending; int group_exit_code; int notify_count; struct task_struct *group_exit_task; int group_stop_count; unsigned int flags; unsigned char is_child_subreaper; unsigned char has_child_subreaper; int posix_timer_id; struct list_head posix_timers; struct hrtimer real_timer; struct pid *leader_pid; ktime_t it_real_incr; struct cpu_itimer it[2U]; struct thread_group_cputimer cputimer; struct task_cputime cputime_expires; struct list_head cpu_timers[3U]; struct pid *tty_old_pgrp; int leader; struct tty_struct *tty; struct autogroup *autogroup; cputime_t utime; cputime_t stime; cputime_t cutime; cputime_t cstime; cputime_t gtime; cputime_t cgtime; struct cputime prev_cputime; unsigned long nvcsw; unsigned long nivcsw; unsigned long cnvcsw; unsigned long cnivcsw; unsigned long min_flt; unsigned long maj_flt; unsigned long cmin_flt; unsigned long cmaj_flt; unsigned long inblock; unsigned long oublock; unsigned long cinblock; unsigned long coublock; unsigned long maxrss; unsigned long cmaxrss; struct task_io_accounting ioac; unsigned long long sum_sched_runtime; struct rlimit rlim[16U]; struct pacct_struct pacct; struct taskstats *stats; unsigned int audit_tty; unsigned int audit_tty_log_passwd; struct tty_audit_buf *tty_audit_buf; struct rw_semaphore group_rwsem; oom_flags_t oom_flags; short oom_score_adj; short oom_score_adj_min; struct mutex cred_guard_mutex; } ;
730 struct user_struct { atomic_t __count; atomic_t processes; atomic_t files; atomic_t sigpending; atomic_t inotify_watches; atomic_t inotify_devs; atomic_t fanotify_listeners; atomic_long_t epoll_watches; unsigned long mq_bytes; unsigned long locked_shm; struct key *uid_keyring; struct key *session_keyring; struct hlist_node uidhash_node; kuid_t uid; atomic_long_t locked_vm; } ;
774 struct reclaim_state ;
775 struct sched_info { unsigned long pcount; unsigned long long run_delay; unsigned long long last_arrival; unsigned long long last_queued; } ;
790 struct task_delay_info { spinlock_t lock; unsigned int flags; struct timespec blkio_start; struct timespec blkio_end; u64 blkio_delay; u64 swapin_delay; u32 blkio_count; u32 swapin_count; struct timespec freepages_start; struct timespec freepages_end; u64 freepages_delay; u32 freepages_count; } ;
1004 struct uts_namespace ;
1005 struct load_weight { unsigned long weight; u32 inv_weight; } ;
1013 struct sched_avg { u32 runnable_avg_sum; u32 runnable_avg_period; u64 last_runnable_update; s64 decay_count; unsigned long load_avg_contrib; } ;
1025 struct sched_statistics { u64 wait_start; u64 wait_max; u64 wait_count; u64 wait_sum; u64 iowait_count; u64 iowait_sum; u64 sleep_start; u64 sleep_max; s64 sum_sleep_runtime; u64 block_start; u64 block_max; u64 exec_max; u64 slice_max; u64 nr_migrations_cold; u64 nr_failed_migrations_affine; u64 nr_failed_migrations_running; u64 nr_failed_migrations_hot; u64 nr_forced_migrations; u64 nr_wakeups; u64 nr_wakeups_sync; u64 nr_wakeups_migrate; u64 nr_wakeups_local; u64 nr_wakeups_remote; u64 nr_wakeups_affine; u64 nr_wakeups_affine_attempts; u64 nr_wakeups_passive; u64 nr_wakeups_idle; } ;
1060 struct sched_entity { struct load_weight load; struct rb_node run_node; struct list_head group_node; unsigned int on_rq; u64 exec_start; u64 sum_exec_runtime; u64 vruntime; u64 prev_sum_exec_runtime; u64 nr_migrations; struct sched_statistics statistics; struct sched_entity *parent; struct cfs_rq *cfs_rq; struct cfs_rq *my_q; struct sched_avg avg; } ;
1091 struct rt_rq ;
1091 struct sched_rt_entity { struct list_head run_list; unsigned long timeout; unsigned long watchdog_stamp; unsigned int time_slice; struct sched_rt_entity *back; struct sched_rt_entity *parent; struct rt_rq *rt_rq; struct rt_rq *my_q; } ;
1107 struct sched_dl_entity { struct rb_node rb_node; u64 dl_runtime; u64 dl_deadline; u64 dl_period; u64 dl_bw; s64 runtime; u64 deadline; unsigned int flags; int dl_throttled; int dl_new; int dl_boosted; struct hrtimer dl_timer; } ;
1162 struct memcg_batch_info { int do_batch; struct mem_cgroup *memcg; unsigned long nr_pages; unsigned long memsw_nr_pages; } ;
1569 struct memcg_oom_info { struct mem_cgroup *memcg; gfp_t gfp_mask; int order; unsigned char may_oom; } ;
1576 struct sched_class ;
1576 struct css_set ;
1576 struct compat_robust_list_head ;
1576 struct numa_group ;
1576 struct task_struct { volatile long state; void *stack; atomic_t usage; unsigned int flags; unsigned int ptrace; struct llist_node wake_entry; int on_cpu; struct task_struct *last_wakee; unsigned long wakee_flips; unsigned long wakee_flip_decay_ts; int wake_cpu; int on_rq; int prio; int static_prio; int normal_prio; unsigned int rt_priority; const struct sched_class *sched_class; struct sched_entity se; struct sched_rt_entity rt; struct task_group *sched_task_group; struct sched_dl_entity dl; struct hlist_head preempt_notifiers; unsigned int policy; int nr_cpus_allowed; cpumask_t cpus_allowed; struct sched_info sched_info; struct list_head tasks; struct plist_node pushable_tasks; struct rb_node pushable_dl_tasks; struct mm_struct *mm; struct mm_struct *active_mm; unsigned char brk_randomized; struct task_rss_stat rss_stat; int exit_state; int exit_code; int exit_signal; int pdeath_signal; unsigned int jobctl; unsigned int personality; unsigned char in_execve; unsigned char in_iowait; unsigned char no_new_privs; unsigned char sched_reset_on_fork; unsigned char sched_contributes_to_load; pid_t pid; pid_t tgid; struct task_struct *real_parent; struct task_struct *parent; struct list_head children; struct list_head sibling; struct task_struct *group_leader; struct list_head ptraced; struct list_head ptrace_entry; struct pid_link pids[3U]; struct list_head thread_group; struct list_head thread_node; struct completion *vfork_done; int *set_child_tid; int *clear_child_tid; cputime_t utime; cputime_t stime; cputime_t utimescaled; cputime_t stimescaled; cputime_t gtime; struct cputime prev_cputime; unsigned long nvcsw; unsigned long nivcsw; struct timespec start_time; struct timespec real_start_time; unsigned long min_flt; unsigned long maj_flt; struct task_cputime cputime_expires; struct list_head cpu_timers[3U]; const struct cred *real_cred; const struct cred *cred; char comm[16U]; int link_count; int total_link_count; struct sysv_sem sysvsem; unsigned long last_switch_count; struct thread_struct thread; struct fs_struct *fs; struct files_struct *files; struct nsproxy *nsproxy; struct signal_struct *signal; struct sighand_struct *sighand; sigset_t blocked; sigset_t real_blocked; sigset_t saved_sigmask; struct sigpending pending; unsigned long sas_ss_sp; size_t sas_ss_size; int (*notifier)(void *); void *notifier_data; sigset_t *notifier_mask; struct callback_head *task_works; struct audit_context *audit_context; kuid_t loginuid; unsigned int sessionid; struct seccomp seccomp; u32 parent_exec_id; u32 self_exec_id; spinlock_t alloc_lock; raw_spinlock_t pi_lock; struct rb_root pi_waiters; struct rb_node *pi_waiters_leftmost; struct rt_mutex_waiter *pi_blocked_on; struct task_struct *pi_top_task; struct mutex_waiter *blocked_on; unsigned int irq_events; unsigned long hardirq_enable_ip; unsigned long hardirq_disable_ip; unsigned int hardirq_enable_event; unsigned int hardirq_disable_event; int hardirqs_enabled; int hardirq_context; unsigned long softirq_disable_ip; unsigned long softirq_enable_ip; unsigned int softirq_disable_event; unsigned int softirq_enable_event; int softirqs_enabled; int softirq_context; u64 curr_chain_key; int lockdep_depth; unsigned int lockdep_recursion; struct held_lock held_locks[48U]; gfp_t lockdep_reclaim_gfp; void *journal_info; struct bio_list *bio_list; struct blk_plug *plug; struct reclaim_state *reclaim_state; struct backing_dev_info *backing_dev_info; struct io_context *io_context; unsigned long ptrace_message; siginfo_t *last_siginfo; struct task_io_accounting ioac; u64 acct_rss_mem1; u64 acct_vm_mem1; cputime_t acct_timexpd; nodemask_t mems_allowed; seqcount_t mems_allowed_seq; int cpuset_mem_spread_rotor; int cpuset_slab_spread_rotor; struct css_set *cgroups; struct list_head cg_list; struct robust_list_head *robust_list; struct compat_robust_list_head *compat_robust_list; struct list_head pi_state_list; struct futex_pi_state *pi_state_cache; struct perf_event_context *perf_event_ctxp[2U]; struct mutex perf_event_mutex; struct list_head perf_event_list; struct mempolicy *mempolicy; short il_next; short pref_node_fork; int numa_scan_seq; unsigned int numa_scan_period; unsigned int numa_scan_period_max; int numa_preferred_nid; int numa_migrate_deferred; unsigned long numa_migrate_retry; u64 node_stamp; struct callback_head numa_work; struct list_head numa_entry; struct numa_group *numa_group; unsigned long *numa_faults; unsigned long total_numa_faults; unsigned long *numa_faults_buffer; unsigned long numa_faults_locality[2U]; unsigned long numa_pages_migrated; struct callback_head rcu; struct pipe_inode_info *splice_pipe; struct page_frag task_frag; struct task_delay_info *delays; int make_it_fail; int nr_dirtied; int nr_dirtied_pause; unsigned long dirty_paused_when; int latency_record_count; struct latency_record latency_record[32U]; unsigned long timer_slack_ns; unsigned long default_timer_slack_ns; unsigned long trace; unsigned long trace_recursion; struct memcg_batch_info memcg_batch; unsigned int memcg_kmem_skip_account; struct memcg_oom_info memcg_oom; struct uprobe_task *utask; unsigned int sequential_io; unsigned int sequential_io_avg; } ;
39 typedef s32 compat_long_t;
44 typedef u32 compat_uptr_t;
273 struct compat_robust_list { compat_uptr_t next; } ;
277 struct compat_robust_list_head { struct compat_robust_list list; compat_long_t futex_offset; compat_uptr_t list_op_pending; } ;
685 struct ethhdr { unsigned char h_dest[6U]; unsigned char h_source[6U]; __be16 h_proto; } ;
34 struct ethtool_cmd { __u32 cmd; __u32 supported; __u32 advertising; __u16 speed; __u8 duplex; __u8 port; __u8 phy_address; __u8 transceiver; __u8 autoneg; __u8 mdio_support; __u32 maxtxpkt; __u32 maxrxpkt; __u16 speed_hi; __u8 eth_tp_mdix; __u8 eth_tp_mdix_ctrl; __u32 lp_advertising; __u32 reserved[2U]; } ;
65 struct ethtool_drvinfo { __u32 cmd; char driver[32U]; char version[32U]; char fw_version[32U]; char bus_info[32U]; char reserved1[32U]; char reserved2[12U]; __u32 n_priv_flags; __u32 n_stats; __u32 testinfo_len; __u32 eedump_len; __u32 regdump_len; } ;
105 struct ethtool_wolinfo { __u32 cmd; __u32 supported; __u32 wolopts; __u8 sopass[6U]; } ;
120 struct ethtool_regs { __u32 cmd; __u32 version; __u32 len; __u8 data[0U]; } ;
128 struct ethtool_eeprom { __u32 cmd; __u32 magic; __u32 offset; __u32 len; __u8 data[0U]; } ;
137 struct ethtool_eee { __u32 cmd; __u32 supported; __u32 advertised; __u32 lp_advertised; __u32 eee_active; __u32 eee_enabled; __u32 tx_lpi_enabled; __u32 tx_lpi_timer; __u32 reserved[2U]; } ;
166 struct ethtool_modinfo { __u32 cmd; __u32 type; __u32 eeprom_len; __u32 reserved[8U]; } ;
183 struct ethtool_coalesce { __u32 cmd; __u32 rx_coalesce_usecs; __u32 rx_max_coalesced_frames; __u32 rx_coalesce_usecs_irq; __u32 rx_max_coalesced_frames_irq; __u32 tx_coalesce_usecs; __u32 tx_max_coalesced_frames; __u32 tx_coalesce_usecs_irq; __u32 tx_max_coalesced_frames_irq; __u32 stats_block_coalesce_usecs; __u32 use_adaptive_rx_coalesce; __u32 use_adaptive_tx_coalesce; __u32 pkt_rate_low; __u32 rx_coalesce_usecs_low; __u32 rx_max_coalesced_frames_low; __u32 tx_coalesce_usecs_low; __u32 tx_max_coalesced_frames_low; __u32 pkt_rate_high; __u32 rx_coalesce_usecs_high; __u32 rx_max_coalesced_frames_high; __u32 tx_coalesce_usecs_high; __u32 tx_max_coalesced_frames_high; __u32 rate_sample_interval; } ;
281 struct ethtool_ringparam { __u32 cmd; __u32 rx_max_pending; __u32 rx_mini_max_pending; __u32 rx_jumbo_max_pending; __u32 tx_max_pending; __u32 rx_pending; __u32 rx_mini_pending; __u32 rx_jumbo_pending; __u32 tx_pending; } ;
303 struct ethtool_channels { __u32 cmd; __u32 max_rx; __u32 max_tx; __u32 max_other; __u32 max_combined; __u32 rx_count; __u32 tx_count; __u32 other_count; __u32 combined_count; } ;
331 struct ethtool_pauseparam { __u32 cmd; __u32 autoneg; __u32 rx_pause; __u32 tx_pause; } ;
382 struct ethtool_test { __u32 cmd; __u32 flags; __u32 reserved; __u32 len; __u64 data[0U]; } ;
404 struct ethtool_stats { __u32 cmd; __u32 n_stats; __u64 data[0U]; } ;
425 struct ethtool_tcpip4_spec { __be32 ip4src; __be32 ip4dst; __be16 psrc; __be16 pdst; __u8 tos; } ;
458 struct ethtool_ah_espip4_spec { __be32 ip4src; __be32 ip4dst; __be32 spi; __u8 tos; } ;
474 struct ethtool_usrip4_spec { __be32 ip4src; __be32 ip4dst; __be32 l4_4_bytes; __u8 tos; __u8 ip_ver; __u8 proto; } ;
494 union ethtool_flow_union { struct ethtool_tcpip4_spec tcp_ip4_spec; struct ethtool_tcpip4_spec udp_ip4_spec; struct ethtool_tcpip4_spec sctp_ip4_spec; struct ethtool_ah_espip4_spec ah_ip4_spec; struct ethtool_ah_espip4_spec esp_ip4_spec; struct ethtool_usrip4_spec usr_ip4_spec; struct ethhdr ether_spec; __u8 hdata[52U]; } ;
505 struct ethtool_flow_ext { __u8 padding[2U]; unsigned char h_dest[6U]; __be16 vlan_etype; __be16 vlan_tci; __be32 data[2U]; } ;
524 struct ethtool_rx_flow_spec { __u32 flow_type; union ethtool_flow_union h_u; struct ethtool_flow_ext h_ext; union ethtool_flow_union m_u; struct ethtool_flow_ext m_ext; __u64 ring_cookie; __u32 location; } ;
550 struct ethtool_rxnfc { __u32 cmd; __u32 flow_type; __u64 data; struct ethtool_rx_flow_spec fs; __u32 rule_cnt; __u32 rule_locs[0U]; } ;
684 struct ethtool_flash { __u32 cmd; __u32 region; char data[128U]; } ;
692 struct ethtool_dump { __u32 cmd; __u32 version; __u32 flag; __u32 len; __u8 data[0U]; } ;
768 struct ethtool_ts_info { __u32 cmd; __u32 so_timestamping; __s32 phc_index; __u32 tx_types; __u32 tx_reserved[3U]; __u32 rx_filters; __u32 rx_reserved[3U]; } ;
44 enum ethtool_phys_id_state { ETHTOOL_ID_INACTIVE = 0, ETHTOOL_ID_ACTIVE = 1, ETHTOOL_ID_ON = 2, ETHTOOL_ID_OFF = 3 } ;
79 struct ethtool_ops { int (*get_settings)(struct net_device *, struct ethtool_cmd *); int (*set_settings)(struct net_device *, struct ethtool_cmd *); void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *); int (*get_regs_len)(struct net_device *); void (*get_regs)(struct net_device *, struct ethtool_regs *, void *); void (*get_wol)(struct net_device *, struct ethtool_wolinfo *); int (*set_wol)(struct net_device *, struct ethtool_wolinfo *); u32 (*get_msglevel)(struct net_device *); void (*set_msglevel)(struct net_device *, u32 ); int (*nway_reset)(struct net_device *); u32 (*get_link)(struct net_device *); int (*get_eeprom_len)(struct net_device *); int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *); int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *); int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *); int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *); void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *); int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *); void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam *); int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam *); void (*self_test)(struct net_device *, struct ethtool_test *, u64 *); void (*get_strings)(struct net_device *, u32 , u8 *); int (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state ); void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *); int (*begin)(struct net_device *); void (*complete)(struct net_device *); u32 (*get_priv_flags)(struct net_device *); int (*set_priv_flags)(struct net_device *, u32 ); int (*get_sset_count)(struct net_device *, int); int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, u32 *); int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *); int (*flash_device)(struct net_device *, struct ethtool_flash *); int (*reset)(struct net_device *, u32 *); u32 (*get_rxfh_indir_size)(struct net_device *); int (*get_rxfh_indir)(struct net_device *, u32 *); int (*set_rxfh_indir)(struct net_device *, const u32 *); void (*get_channels)(struct net_device *, struct ethtool_channels *); int (*set_channels)(struct net_device *, struct ethtool_channels *); int (*get_dump_flag)(struct net_device *, struct ethtool_dump *); int (*get_dump_data)(struct net_device *, struct ethtool_dump *, void *); int (*set_dump)(struct net_device *, struct ethtool_dump *); int (*get_ts_info)(struct net_device *, struct ethtool_ts_info *); int (*get_module_info)(struct net_device *, struct ethtool_modinfo *); int (*get_module_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *); int (*get_eee)(struct net_device *, struct ethtool_eee *); int (*set_eee)(struct net_device *, struct ethtool_eee *); } ;
249 struct prot_inuse ;
250 struct netns_core { struct ctl_table_header *sysctl_hdr; int sysctl_somaxconn; struct prot_inuse *inuse; } ;
38 struct u64_stats_sync { } ;
145 struct ipstats_mib { u64 mibs[36U]; struct u64_stats_sync syncp; } ;
61 struct icmp_mib { unsigned long mibs[28U]; } ;
67 struct icmpmsg_mib { atomic_long_t mibs[512U]; } ;
72 struct icmpv6_mib { unsigned long mibs[6U]; } ;
83 struct icmpv6msg_mib { atomic_long_t mibs[512U]; } ;
93 struct tcp_mib { unsigned long mibs[16U]; } ;
100 struct udp_mib { unsigned long mibs[8U]; } ;
106 struct linux_mib { unsigned long mibs[97U]; } ;
112 struct linux_xfrm_mib { unsigned long mibs[29U]; } ;
118 struct proc_dir_entry ;
118 struct netns_mib { struct tcp_mib *tcp_statistics[1U]; struct ipstats_mib *ip_statistics[1U]; struct linux_mib *net_statistics[1U]; struct udp_mib *udp_statistics[1U]; struct udp_mib *udplite_statistics[1U]; struct icmp_mib *icmp_statistics[1U]; struct icmpmsg_mib *icmpmsg_statistics; struct proc_dir_entry *proc_net_devsnmp6; struct udp_mib *udp_stats_in6[1U]; struct udp_mib *udplite_stats_in6[1U]; struct ipstats_mib *ipv6_statistics[1U]; struct icmpv6_mib *icmpv6_statistics[1U]; struct icmpv6msg_mib *icmpv6msg_statistics; struct linux_xfrm_mib *xfrm_statistics[1U]; } ;
26 struct netns_unix { int sysctl_max_dgram_qlen; struct ctl_table_header *ctl; } ;
12 struct netns_packet { struct mutex sklist_lock; struct hlist_head sklist; } ;
14 struct netns_frags { int nqueues; struct list_head lru_list; spinlock_t lru_lock; struct percpu_counter mem; int timeout; int high_thresh; int low_thresh; } ;
180 struct tcpm_hash_bucket ;
181 struct ipv4_devconf ;
182 struct fib_rules_ops ;
183 struct fib_table ;
184 struct local_ports { seqlock_t lock; int range[2U]; } ;
22 struct inet_peer_base ;
22 struct xt_table ;
22 struct netns_ipv4 { struct ctl_table_header *forw_hdr; struct ctl_table_header *frags_hdr; struct ctl_table_header *ipv4_hdr; struct ctl_table_header *route_hdr; struct ctl_table_header *xfrm4_hdr; struct ipv4_devconf *devconf_all; struct ipv4_devconf *devconf_dflt; struct fib_rules_ops *rules_ops; bool fib_has_custom_rules; struct fib_table *fib_local; struct fib_table *fib_main; struct fib_table *fib_default; int fib_num_tclassid_users; struct hlist_head *fib_table_hash; struct sock *fibnl; struct sock **icmp_sk; struct inet_peer_base *peers; struct tcpm_hash_bucket *tcp_metrics_hash; unsigned int tcp_metrics_hash_log; struct netns_frags frags; struct xt_table *iptable_filter; struct xt_table *iptable_mangle; struct xt_table *iptable_raw; struct xt_table *arptable_filter; struct xt_table *iptable_security; struct xt_table *nat_table; int sysctl_icmp_echo_ignore_all; int sysctl_icmp_echo_ignore_broadcasts; int sysctl_icmp_ignore_bogus_error_responses; int sysctl_icmp_ratelimit; int sysctl_icmp_ratemask; int sysctl_icmp_errors_use_inbound_ifaddr; struct local_ports sysctl_local_ports; int sysctl_tcp_ecn; int sysctl_ip_no_pmtu_disc; int sysctl_ip_fwd_use_pmtu; kgid_t sysctl_ping_group_range[2U]; atomic_t dev_addr_genid; struct list_head mr_tables; struct fib_rules_ops *mr_rules_ops; atomic_t rt_genid; } ;
90 struct neighbour ;
90 struct dst_ops { unsigned short family; __be16 protocol; unsigned int gc_thresh; int (*gc)(struct dst_ops *); struct dst_entry * (*check)(struct dst_entry *, __u32 ); unsigned int (*default_advmss)(const struct dst_entry *); unsigned int (*mtu)(const struct dst_entry *); u32 * (*cow_metrics)(struct dst_entry *, unsigned long); void (*destroy)(struct dst_entry *); void (*ifdown)(struct dst_entry *, struct net_device *, int); struct dst_entry * (*negative_advice)(struct dst_entry *); void (*link_failure)(struct sk_buff *); void (*update_pmtu)(struct dst_entry *, struct sock *, struct sk_buff *, u32 ); void (*redirect)(struct dst_entry *, struct sock *, struct sk_buff *); int (*local_out)(struct sk_buff *); struct neighbour * (*neigh_lookup)(const struct dst_entry *, struct sk_buff *, const void *); struct kmem_cache *kmem_cachep; struct percpu_counter pcpuc_entries; } ;
73 struct netns_sysctl_ipv6 { struct ctl_table_header *hdr; struct ctl_table_header *route_hdr; struct ctl_table_header *icmp_hdr; struct ctl_table_header *frags_hdr; struct ctl_table_header *xfrm6_hdr; int bindv6only; int flush_delay; int ip6_rt_max_size; int ip6_rt_gc_min_interval; int ip6_rt_gc_timeout; int ip6_rt_gc_interval; int ip6_rt_gc_elasticity; int ip6_rt_mtu_expires; int ip6_rt_min_advmss; int flowlabel_consistency; int icmpv6_time; int anycast_src_echo_reply; } ;
34 struct ipv6_devconf ;
34 struct rt6_info ;
34 struct rt6_statistics ;
34 struct fib6_table ;
34 struct netns_ipv6 { struct netns_sysctl_ipv6 sysctl; struct ipv6_devconf *devconf_all; struct ipv6_devconf *devconf_dflt; struct inet_peer_base *peers; struct netns_frags frags; struct xt_table *ip6table_filter; struct xt_table *ip6table_mangle; struct xt_table *ip6table_raw; struct xt_table *ip6table_security; struct xt_table *ip6table_nat; struct rt6_info *ip6_null_entry; struct rt6_statistics *rt6_stats; struct timer_list ip6_fib_timer; struct hlist_head *fib_table_hash; struct fib6_table *fib6_main_tbl; struct dst_ops ip6_dst_ops; unsigned int ip6_rt_gc_expire; unsigned long ip6_rt_last_gc; struct rt6_info *ip6_prohibit_entry; struct rt6_info *ip6_blk_hole_entry; struct fib6_table *fib6_local_tbl; struct fib_rules_ops *fib6_rules_ops; struct sock **icmp_sk; struct sock *ndisc_sk; struct sock *tcp_sk; struct sock *igmp_sk; struct list_head mr6_tables; struct fib_rules_ops *mr6_rules_ops; atomic_t dev_addr_genid; atomic_t rt_genid; } ;
79 struct netns_nf_frag { struct netns_sysctl_ipv6 sysctl; struct netns_frags frags; } ;
85 struct sctp_mib ;
86 struct netns_sctp { struct sctp_mib *sctp_statistics[1U]; struct proc_dir_entry *proc_net_sctp; struct ctl_table_header *sysctl_header; struct sock *ctl_sock; struct list_head local_addr_list; struct list_head addr_waitq; struct timer_list addr_wq_timer; struct list_head auto_asconf_splist; spinlock_t addr_wq_lock; spinlock_t local_addr_lock; unsigned int rto_initial; unsigned int rto_min; unsigned int rto_max; int rto_alpha; int rto_beta; int max_burst; int cookie_preserve_enable; char *sctp_hmac_alg; unsigned int valid_cookie_life; unsigned int sack_timeout; unsigned int hb_interval; int max_retrans_association; int max_retrans_path; int max_retrans_init; int pf_retrans; int sndbuf_policy; int rcvbuf_policy; int default_auto_asconf; int addip_enable; int addip_noauth; int prsctp_enable; int auth_enable; int scope_policy; int rwnd_upd_shift; unsigned long max_autoclose; } ;
133 struct netns_dccp { struct sock *v4_ctl_sk; struct sock *v6_ctl_sk; } ;
104 union __anonunion_in6_u_224 { __u8 u6_addr8[16U]; __be16 u6_addr16[8U]; __be32 u6_addr32[4U]; } ;
104 struct in6_addr { union __anonunion_in6_u_224 in6_u; } ;
324 struct nlattr ;
337 struct nf_logger ;
338 struct netns_nf { struct proc_dir_entry *proc_netfilter; const struct nf_logger *nf_loggers[13U]; struct ctl_table_header *nf_log_dir_header; } ;
17 struct ebt_table ;
18 struct netns_xt { struct list_head tables[13U]; bool notrack_deprecated_warning; struct ebt_table *broute_table; struct ebt_table *frame_filter; struct ebt_table *frame_nat; bool ulog_warn_deprecated; bool ebt_ulog_warn_deprecated; } ;
24 struct hlist_nulls_node ;
24 struct hlist_nulls_head { struct hlist_nulls_node *first; } ;
20 struct hlist_nulls_node { struct hlist_nulls_node *next; struct hlist_nulls_node **pprev; } ;
32 struct nf_proto_net { struct ctl_table_header *ctl_table_header; struct ctl_table *ctl_table; struct ctl_table_header *ctl_compat_header; struct ctl_table *ctl_compat_table; unsigned int users; } ;
23 struct nf_generic_net { struct nf_proto_net pn; unsigned int timeout; } ;
28 struct nf_tcp_net { struct nf_proto_net pn; unsigned int timeouts[14U]; unsigned int tcp_loose; unsigned int tcp_be_liberal; unsigned int tcp_max_retrans; } ;
42 struct nf_udp_net { struct nf_proto_net pn; unsigned int timeouts[2U]; } ;
47 struct nf_icmp_net { struct nf_proto_net pn; unsigned int timeout; } ;
52 struct nf_ip_net { struct nf_generic_net generic; struct nf_tcp_net tcp; struct nf_udp_net udp; struct nf_icmp_net icmp; struct nf_icmp_net icmpv6; struct ctl_table_header *ctl_table_header; struct ctl_table *ctl_table; } ;
63 struct ip_conntrack_stat ;
63 struct nf_ct_event_notifier ;
63 struct nf_exp_event_notifier ;
63 struct netns_ct { atomic_t count; unsigned int expect_count; struct ctl_table_header *sysctl_header; struct ctl_table_header *acct_sysctl_header; struct ctl_table_header *tstamp_sysctl_header; struct ctl_table_header *event_sysctl_header; struct ctl_table_header *helper_sysctl_header; char *slabname; unsigned int sysctl_log_invalid; unsigned int sysctl_events_retry_timeout; int sysctl_events; int sysctl_acct; int sysctl_auto_assign_helper; bool auto_assign_helper_warned; int sysctl_tstamp; int sysctl_checksum; unsigned int htable_size; struct kmem_cache *nf_conntrack_cachep; struct hlist_nulls_head *hash; struct hlist_head *expect_hash; struct hlist_nulls_head unconfirmed; struct hlist_nulls_head dying; struct hlist_nulls_head tmpl; struct ip_conntrack_stat *stat; struct nf_ct_event_notifier *nf_conntrack_event_cb; struct nf_exp_event_notifier *nf_expect_event_cb; struct nf_ip_net nf_ct_proto; unsigned int labels_used; u8 label_words; struct hlist_head *nat_bysource; unsigned int nat_htable_size; } ;
104 struct nft_af_info ;
105 struct netns_nftables { struct list_head af_info; struct list_head commit_list; struct nft_af_info *ipv4; struct nft_af_info *ipv6; struct nft_af_info *inet; struct nft_af_info *arp; struct nft_af_info *bridge; u8 gencursor; u8 genctr; } ;
489 struct xfrm_policy_hash { struct hlist_head *table; unsigned int hmask; } ;
16 struct netns_xfrm { struct list_head state_all; struct hlist_head *state_bydst; struct hlist_head *state_bysrc; struct hlist_head *state_byspi; unsigned int state_hmask; unsigned int state_num; struct work_struct state_hash_work; struct hlist_head state_gc_list; struct work_struct state_gc_work; struct list_head policy_all; struct hlist_head *policy_byidx; unsigned int policy_idx_hmask; struct hlist_head policy_inexact[6U]; struct xfrm_policy_hash policy_bydst[6U]; unsigned int policy_count[6U]; struct work_struct policy_hash_work; struct sock *nlsk; struct sock *nlsk_stash; u32 sysctl_aevent_etime; u32 sysctl_aevent_rseqth; int sysctl_larval_drop; u32 sysctl_acq_expires; struct ctl_table_header *sysctl_hdr; struct dst_ops xfrm4_dst_ops; struct dst_ops xfrm6_dst_ops; spinlock_t xfrm_state_lock; spinlock_t xfrm_policy_sk_bundle_lock; rwlock_t xfrm_policy_lock; struct mutex xfrm_cfg_mutex; } ;
65 struct net_generic ;
66 struct netns_ipvs ;
67 struct net { atomic_t passive; atomic_t count; spinlock_t rules_mod_lock; struct list_head list; struct list_head cleanup_list; struct list_head exit_list; struct user_namespace *user_ns; unsigned int proc_inum; struct proc_dir_entry *proc_net; struct proc_dir_entry *proc_net_stat; struct ctl_table_set sysctls; struct sock *rtnl; struct sock *genl_sock; struct list_head dev_base_head; struct hlist_head *dev_name_head; struct hlist_head *dev_index_head; unsigned int dev_base_seq; int ifindex; unsigned int dev_unreg_count; struct list_head rules_ops; struct net_device *loopback_dev; struct netns_core core; struct netns_mib mib; struct netns_packet packet; struct netns_unix unx; struct netns_ipv4 ipv4; struct netns_ipv6 ipv6; struct netns_sctp sctp; struct netns_dccp dccp; struct netns_nf nf; struct netns_xt xt; struct netns_ct ct; struct netns_nftables nft; struct netns_nf_frag nf_frag; struct sock *nfnl; struct sock *nfnl_stash; struct sk_buff_head wext_nlevents; struct net_generic *gen; struct netns_xfrm xfrm; struct netns_ipvs *ipvs; struct sock *diag_nlsk; atomic_t fnhe_genid; } ;
395 struct dsa_chip_data { struct device *mii_bus; int sw_addr; char *port_names[12U]; s8 *rtable; } ;
46 struct dsa_platform_data { struct device *netdev; int nr_chips; struct dsa_chip_data *chip; } ;
61 struct dsa_switch ;
61 struct dsa_switch_tree { struct dsa_platform_data *pd; struct net_device *master_netdev; __be16 tag_protocol; s8 cpu_switch; s8 cpu_port; int link_poll_needed; struct work_struct link_poll_work; struct timer_list link_poll_timer; struct dsa_switch *ds[4U]; } ;
94 struct dsa_switch_driver ;
94 struct mii_bus ;
94 struct dsa_switch { struct dsa_switch_tree *dst; int index; struct dsa_chip_data *pd; struct dsa_switch_driver *drv; struct mii_bus *master_mii_bus; u32 dsa_port_mask; u32 phys_port_mask; struct mii_bus *slave_mii_bus; struct net_device *ports[12U]; } ;
146 struct dsa_switch_driver { struct list_head list; __be16 tag_protocol; int priv_size; char * (*probe)(struct mii_bus *, int); int (*setup)(struct dsa_switch *); int (*set_addr)(struct dsa_switch *, u8 *); int (*phy_read)(struct dsa_switch *, int, int); int (*phy_write)(struct dsa_switch *, int, int, u16 ); void (*poll_link)(struct dsa_switch *); void (*get_strings)(struct dsa_switch *, int, uint8_t *); void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *); int (*get_sset_count)(struct dsa_switch *); } ;
200 struct ieee_ets { __u8 willing; __u8 ets_cap; __u8 cbs; __u8 tc_tx_bw[8U]; __u8 tc_rx_bw[8U]; __u8 tc_tsa[8U]; __u8 prio_tc[8U]; __u8 tc_reco_bw[8U]; __u8 tc_reco_tsa[8U]; __u8 reco_prio_tc[8U]; } ;
69 struct ieee_maxrate { __u64 tc_maxrate[8U]; } ;
80 struct ieee_pfc { __u8 pfc_cap; __u8 pfc_en; __u8 mbc; __u16 delay; __u64 requests[8U]; __u64 indications[8U]; } ;
100 struct cee_pg { __u8 willing; __u8 error; __u8 pg_en; __u8 tcs_supported; __u8 pg_bw[8U]; __u8 prio_pg[8U]; } ;
123 struct cee_pfc { __u8 willing; __u8 error; __u8 pfc_en; __u8 tcs_supported; } ;
138 struct dcb_app { __u8 selector; __u8 priority; __u16 protocol; } ;
167 struct dcb_peer_app_info { __u8 willing; __u8 error; } ;
40 struct dcbnl_rtnl_ops { int (*ieee_getets)(struct net_device *, struct ieee_ets *); int (*ieee_setets)(struct net_device *, struct ieee_ets *); int (*ieee_getmaxrate)(struct net_device *, struct ieee_maxrate *); int (*ieee_setmaxrate)(struct net_device *, struct ieee_maxrate *); int (*ieee_getpfc)(struct net_device *, struct ieee_pfc *); int (*ieee_setpfc)(struct net_device *, struct ieee_pfc *); int (*ieee_getapp)(struct net_device *, struct dcb_app *); int (*ieee_setapp)(struct net_device *, struct dcb_app *); int (*ieee_delapp)(struct net_device *, struct dcb_app *); int (*ieee_peer_getets)(struct net_device *, struct ieee_ets *); int (*ieee_peer_getpfc)(struct net_device *, struct ieee_pfc *); u8 (*getstate)(struct net_device *); u8 (*setstate)(struct net_device *, u8 ); void (*getpermhwaddr)(struct net_device *, u8 *); void (*setpgtccfgtx)(struct net_device *, int, u8 , u8 , u8 , u8 ); void (*setpgbwgcfgtx)(struct net_device *, int, u8 ); void (*setpgtccfgrx)(struct net_device *, int, u8 , u8 , u8 , u8 ); void (*setpgbwgcfgrx)(struct net_device *, int, u8 ); void (*getpgtccfgtx)(struct net_device *, int, u8 *, u8 *, u8 *, u8 *); void (*getpgbwgcfgtx)(struct net_device *, int, u8 *); void (*getpgtccfgrx)(struct net_device *, int, u8 *, u8 *, u8 *, u8 *); void (*getpgbwgcfgrx)(struct net_device *, int, u8 *); void (*setpfccfg)(struct net_device *, int, u8 ); void (*getpfccfg)(struct net_device *, int, u8 *); u8 (*setall)(struct net_device *); u8 (*getcap)(struct net_device *, int, u8 *); int (*getnumtcs)(struct net_device *, int, u8 *); int (*setnumtcs)(struct net_device *, int, u8 ); u8 (*getpfcstate)(struct net_device *); void (*setpfcstate)(struct net_device *, u8 ); void (*getbcncfg)(struct net_device *, int, u32 *); void (*setbcncfg)(struct net_device *, int, u32 ); void (*getbcnrp)(struct net_device *, int, u8 *); void (*setbcnrp)(struct net_device *, int, u8 ); u8 (*setapp)(struct net_device *, u8 , u16 , u8 ); u8 (*getapp)(struct net_device *, u8 , u16 ); u8 (*getfeatcfg)(struct net_device *, int, u8 *); u8 (*setfeatcfg)(struct net_device *, int, u8 ); u8 (*getdcbx)(struct net_device *); u8 (*setdcbx)(struct net_device *, u8 ); int (*peer_getappinfo)(struct net_device *, struct dcb_peer_app_info *, u16 *); int (*peer_getapptable)(struct net_device *, struct dcb_app *); int (*cee_peer_getpg)(struct net_device *, struct cee_pg *); int (*cee_peer_getpfc)(struct net_device *, struct cee_pfc *); } ;
102 struct taskstats { __u16 version; __u32 ac_exitcode; __u8 ac_flag; __u8 ac_nice; __u64 cpu_count; __u64 cpu_delay_total; __u64 blkio_count; __u64 blkio_delay_total; __u64 swapin_count; __u64 swapin_delay_total; __u64 cpu_run_real_total; __u64 cpu_run_virtual_total; char ac_comm[32U]; __u8 ac_sched; __u8 ac_pad[3U]; __u32 ac_uid; __u32 ac_gid; __u32 ac_pid; __u32 ac_ppid; __u32 ac_btime; __u64 ac_etime; __u64 ac_utime; __u64 ac_stime; __u64 ac_minflt; __u64 ac_majflt; __u64 coremem; __u64 virtmem; __u64 hiwater_rss; __u64 hiwater_vm; __u64 read_char; __u64 write_char; __u64 read_syscalls; __u64 write_syscalls; __u64 read_bytes; __u64 write_bytes; __u64 cancelled_write_bytes; __u64 nvcsw; __u64 nivcsw; __u64 ac_utimescaled; __u64 ac_stimescaled; __u64 cpu_scaled_run_real_total; __u64 freepages_count; __u64 freepages_delay_total; } ;
55 struct xattr_handler { const char *prefix; int flags; size_t (*list)(struct dentry *, char *, size_t , const char *, size_t , int); int (*get)(struct dentry *, const char *, void *, size_t , int); int (*set)(struct dentry *, const char *, const void *, size_t , int, int); } ;
53 struct simple_xattrs { struct list_head head; spinlock_t lock; } ;
98 struct percpu_ref ;
54 typedef void percpu_ref_func_t(struct percpu_ref *);
55 struct percpu_ref { atomic_t count; unsigned int *pcpu_count; percpu_ref_func_t *release; percpu_ref_func_t *confirm_kill; struct callback_head rcu; } ;
173 struct cgroupfs_root ;
174 struct cgroup_subsys ;
175 struct cgroup ;
62 struct cgroup_subsys_state { struct cgroup *cgroup; struct cgroup_subsys *ss; struct percpu_ref refcnt; struct cgroup_subsys_state *parent; unsigned long flags; struct callback_head callback_head; struct work_struct destroy_work; } ;
142 struct cgroup_name { struct callback_head callback_head; char name[]; } ;
160 struct cgroup { unsigned long flags; int id; int nr_css; struct list_head sibling; struct list_head children; struct list_head files; struct cgroup *parent; struct dentry *dentry; u64 serial_nr; struct cgroup_name *name; struct cgroup_subsys_state *subsys[12U]; struct cgroupfs_root *root; struct list_head cset_links; struct list_head release_list; struct list_head pidlists; struct mutex pidlist_mutex; struct cgroup_subsys_state dummy_css; struct callback_head callback_head; struct work_struct destroy_work; struct simple_xattrs xattrs; } ;
252 struct cgroupfs_root { struct super_block *sb; unsigned long subsys_mask; int hierarchy_id; struct cgroup top_cgroup; int number_of_cgroups; struct list_head root_list; unsigned long flags; struct idr cgroup_idr; char release_agent_path[4096U]; char name[64U]; } ;
342 struct css_set { atomic_t refcount; struct hlist_node hlist; struct list_head tasks; struct list_head cgrp_links; struct cgroup_subsys_state *subsys[12U]; struct callback_head callback_head; } ;
392 struct cftype { char name[64U]; int private; umode_t mode; size_t max_write_len; unsigned int flags; struct cgroup_subsys *ss; u64 (*read_u64)(struct cgroup_subsys_state *, struct cftype *); s64 (*read_s64)(struct cgroup_subsys_state *, struct cftype *); int (*seq_show)(struct seq_file *, void *); void * (*seq_start)(struct seq_file *, loff_t *); void * (*seq_next)(struct seq_file *, void *, loff_t *); void (*seq_stop)(struct seq_file *, void *); int (*write_u64)(struct cgroup_subsys_state *, struct cftype *, u64 ); int (*write_s64)(struct cgroup_subsys_state *, struct cftype *, s64 ); int (*write_string)(struct cgroup_subsys_state *, struct cftype *, const char *); int (*trigger)(struct cgroup_subsys_state *, unsigned int); } ;
479 struct cftype_set { struct list_head node; struct cftype *cfts; } ;
546 struct cgroup_taskset ;
557 struct cgroup_subsys { struct cgroup_subsys_state * (*css_alloc)(struct cgroup_subsys_state *); int (*css_online)(struct cgroup_subsys_state *); void (*css_offline)(struct cgroup_subsys_state *); void (*css_free)(struct cgroup_subsys_state *); int (*can_attach)(struct cgroup_subsys_state *, struct cgroup_taskset *); void (*cancel_attach)(struct cgroup_subsys_state *, struct cgroup_taskset *); void (*attach)(struct cgroup_subsys_state *, struct cgroup_taskset *); void (*fork)(struct task_struct *); void (*exit)(struct cgroup_subsys_state *, struct cgroup_subsys_state *, struct task_struct *); void (*bind)(struct cgroup_subsys_state *); int subsys_id; int disabled; int early_init; bool broken_hierarchy; bool warned_broken_hierarchy; const char *name; struct cgroupfs_root *root; struct list_head cftsets; struct cftype *base_cftypes; struct cftype_set base_cftset; struct module *module; } ;
124 enum irqreturn { IRQ_NONE = 0, IRQ_HANDLED = 1, IRQ_WAKE_THREAD = 2 } ;
16 typedef enum irqreturn irqreturn_t;
60 struct netprio_map { struct callback_head rcu; u32 priomap_len; u32 priomap[]; } ;
103 struct xfrm_policy ;
104 struct xfrm_state ;
124 struct request_sock ;
3157 struct mnt_namespace ;
3158 struct ipc_namespace ;
3159 struct nsproxy { atomic_t count; struct uts_namespace *uts_ns; struct ipc_namespace *ipc_ns; struct mnt_namespace *mnt_ns; struct pid_namespace *pid_ns_for_children; struct net *net_ns; } ;
41 struct nlmsghdr { __u32 nlmsg_len; __u16 nlmsg_type; __u16 nlmsg_flags; __u32 nlmsg_seq; __u32 nlmsg_pid; } ;
145 struct nlattr { __u16 nla_len; __u16 nla_type; } ;
102 struct netlink_callback { struct sk_buff *skb; const struct nlmsghdr *nlh; int (*dump)(struct sk_buff *, struct netlink_callback *); int (*done)(struct netlink_callback *); void *data; struct module *module; u16 family; u16 min_dump_alloc; unsigned int prev_seq; unsigned int seq; long args[6U]; } ;
171 struct ndmsg { __u8 ndm_family; __u8 ndm_pad1; __u16 ndm_pad2; __s32 ndm_ifindex; __u16 ndm_state; __u8 ndm_flags; __u8 ndm_type; } ;
39 struct rtnl_link_stats64 { __u64 rx_packets; __u64 tx_packets; __u64 rx_bytes; __u64 tx_bytes; __u64 rx_errors; __u64 tx_errors; __u64 rx_dropped; __u64 tx_dropped; __u64 multicast; __u64 collisions; __u64 rx_length_errors; __u64 rx_over_errors; __u64 rx_crc_errors; __u64 rx_frame_errors; __u64 rx_fifo_errors; __u64 rx_missed_errors; __u64 tx_aborted_errors; __u64 tx_carrier_errors; __u64 tx_fifo_errors; __u64 tx_heartbeat_errors; __u64 tx_window_errors; __u64 rx_compressed; __u64 tx_compressed; } ;
536 struct ifla_vf_info { __u32 vf; __u8 mac[32U]; __u32 vlan; __u32 qos; __u32 tx_rate; __u32 spoofchk; __u32 linkstate; } ;
27 struct netpoll_info ;
28 struct phy_device ;
29 struct wireless_dev ;
64 enum netdev_tx { __NETDEV_TX_MIN = -2147483648, NETDEV_TX_OK = 0, NETDEV_TX_BUSY = 16, NETDEV_TX_LOCKED = 32 } ;
116 typedef enum netdev_tx netdev_tx_t;
135 struct net_device_stats { unsigned long rx_packets; unsigned long tx_packets; unsigned long rx_bytes; unsigned long tx_bytes; unsigned long rx_errors; unsigned long tx_errors; unsigned long rx_dropped; unsigned long tx_dropped; unsigned long multicast; unsigned long collisions; unsigned long rx_length_errors; unsigned long rx_over_errors; unsigned long rx_crc_errors; unsigned long rx_frame_errors; unsigned long rx_fifo_errors; unsigned long rx_missed_errors; unsigned long tx_aborted_errors; unsigned long tx_carrier_errors; unsigned long tx_fifo_errors; unsigned long tx_heartbeat_errors; unsigned long tx_window_errors; unsigned long rx_compressed; unsigned long tx_compressed; } ;
196 struct neigh_parms ;
217 struct netdev_hw_addr_list { struct list_head list; int count; } ;
222 struct hh_cache { u16 hh_len; u16 __pad; seqlock_t hh_lock; unsigned long hh_data[16U]; } ;
251 struct header_ops { int (*create)(struct sk_buff *, struct net_device *, unsigned short, const void *, const void *, unsigned int); int (*parse)(const struct sk_buff *, unsigned char *); int (*rebuild)(struct sk_buff *); int (*cache)(const struct neighbour *, struct hh_cache *, __be16 ); void (*cache_update)(struct hh_cache *, const struct net_device *, const unsigned char *); } ;
302 struct napi_struct { struct list_head poll_list; unsigned long state; int weight; unsigned int gro_count; int (*poll)(struct napi_struct *, int); spinlock_t poll_lock; int poll_owner; struct net_device *dev; struct sk_buff *gro_list; struct sk_buff *skb; struct list_head dev_list; struct hlist_node napi_hash_node; unsigned int napi_id; } ;
346 enum rx_handler_result { RX_HANDLER_CONSUMED = 0, RX_HANDLER_ANOTHER = 1, RX_HANDLER_EXACT = 2, RX_HANDLER_PASS = 3 } ;
394 typedef enum rx_handler_result rx_handler_result_t;
395 typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **);
532 struct Qdisc ;
532 struct netdev_queue { struct net_device *dev; struct Qdisc *qdisc; struct Qdisc *qdisc_sleeping; struct kobject kobj; int numa_node; spinlock_t _xmit_lock; int xmit_lock_owner; unsigned long trans_start; unsigned long trans_timeout; unsigned long state; struct dql dql; } ;
594 struct rps_map { unsigned int len; struct callback_head rcu; u16 cpus[0U]; } ;
606 struct rps_dev_flow { u16 cpu; u16 filter; unsigned int last_qtail; } ;
618 struct rps_dev_flow_table { unsigned int mask; struct callback_head rcu; struct rps_dev_flow flows[0U]; } ;
669 struct netdev_rx_queue { struct rps_map *rps_map; struct rps_dev_flow_table *rps_flow_table; struct kobject kobj; struct net_device *dev; } ;
692 struct xps_map { unsigned int len; unsigned int alloc_len; struct callback_head rcu; u16 queues[0U]; } ;
705 struct xps_dev_maps { struct callback_head rcu; struct xps_map *cpu_map[0U]; } ;
716 struct netdev_tc_txq { u16 count; u16 offset; } ;
727 struct netdev_fcoe_hbainfo { char manufacturer[64U]; char serial_number[64U]; char hardware_version[64U]; char driver_version[64U]; char optionrom_version[64U]; char firmware_version[64U]; char model[256U]; char model_description[256U]; } ;
743 struct netdev_phys_port_id { unsigned char id[32U]; unsigned char id_len; } ;
756 struct net_device_ops { int (*ndo_init)(struct net_device *); void (*ndo_uninit)(struct net_device *); int (*ndo_open)(struct net_device *); int (*ndo_stop)(struct net_device *); netdev_tx_t (*ndo_start_xmit)(struct sk_buff *, struct net_device *); u16 (*ndo_select_queue)(struct net_device *, struct sk_buff *, void *, u16 (*)(struct net_device *, struct sk_buff *)); void (*ndo_change_rx_flags)(struct net_device *, int); void (*ndo_set_rx_mode)(struct net_device *); int (*ndo_set_mac_address)(struct net_device *, void *); int (*ndo_validate_addr)(struct net_device *); int (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int); int (*ndo_set_config)(struct net_device *, struct ifmap *); int (*ndo_change_mtu)(struct net_device *, int); int (*ndo_neigh_setup)(struct net_device *, struct neigh_parms *); void (*ndo_tx_timeout)(struct net_device *); struct rtnl_link_stats64 * (*ndo_get_stats64)(struct net_device *, struct rtnl_link_stats64 *); struct net_device_stats * (*ndo_get_stats)(struct net_device *); int (*ndo_vlan_rx_add_vid)(struct net_device *, __be16 , u16 ); int (*ndo_vlan_rx_kill_vid)(struct net_device *, __be16 , u16 ); void (*ndo_poll_controller)(struct net_device *); int (*ndo_netpoll_setup)(struct net_device *, struct netpoll_info *, gfp_t ); void (*ndo_netpoll_cleanup)(struct net_device *); int (*ndo_busy_poll)(struct napi_struct *); int (*ndo_set_vf_mac)(struct net_device *, int, u8 *); int (*ndo_set_vf_vlan)(struct net_device *, int, u16 , u8 ); int (*ndo_set_vf_tx_rate)(struct net_device *, int, int); int (*ndo_set_vf_spoofchk)(struct net_device *, int, bool ); int (*ndo_get_vf_config)(struct net_device *, int, struct ifla_vf_info *); int (*ndo_set_vf_link_state)(struct net_device *, int, int); int (*ndo_set_vf_port)(struct net_device *, int, struct nlattr **); int (*ndo_get_vf_port)(struct net_device *, int, struct sk_buff *); int (*ndo_setup_tc)(struct net_device *, u8 ); int (*ndo_fcoe_enable)(struct net_device *); int (*ndo_fcoe_disable)(struct net_device *); int (*ndo_fcoe_ddp_setup)(struct net_device *, u16 , struct scatterlist *, unsigned int); int (*ndo_fcoe_ddp_done)(struct net_device *, u16 ); int (*ndo_fcoe_ddp_target)(struct net_device *, u16 , struct scatterlist *, unsigned int); int (*ndo_fcoe_get_hbainfo)(struct net_device *, struct netdev_fcoe_hbainfo *); int (*ndo_fcoe_get_wwn)(struct net_device *, u64 *, int); int (*ndo_rx_flow_steer)(struct net_device *, const struct sk_buff *, u16 , u32 ); int (*ndo_add_slave)(struct net_device *, struct net_device *); int (*ndo_del_slave)(struct net_device *, struct net_device *); netdev_features_t (*ndo_fix_features)(struct net_device *, netdev_features_t ); int (*ndo_set_features)(struct net_device *, netdev_features_t ); int (*ndo_neigh_construct)(struct neighbour *); void (*ndo_neigh_destroy)(struct neighbour *); int (*ndo_fdb_add)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16 ); int (*ndo_fdb_del)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *); int (*ndo_fdb_dump)(struct sk_buff *, struct netlink_callback *, struct net_device *, int); int (*ndo_bridge_setlink)(struct net_device *, struct nlmsghdr *); int (*ndo_bridge_getlink)(struct sk_buff *, u32 , u32 , struct net_device *, u32 ); int (*ndo_bridge_dellink)(struct net_device *, struct nlmsghdr *); int (*ndo_change_carrier)(struct net_device *, bool ); int (*ndo_get_phys_port_id)(struct net_device *, struct netdev_phys_port_id *); void (*ndo_add_vxlan_port)(struct net_device *, sa_family_t , __be16 ); void (*ndo_del_vxlan_port)(struct net_device *, sa_family_t , __be16 ); void * (*ndo_dfwd_add_station)(struct net_device *, struct net_device *); void (*ndo_dfwd_del_station)(struct net_device *, void *); netdev_tx_t (*ndo_dfwd_start_xmit)(struct sk_buff *, struct net_device *, void *); } ;
1161 struct __anonstruct_adj_list_235 { struct list_head upper; struct list_head lower; } ;
1161 struct __anonstruct_all_adj_list_236 { struct list_head upper; struct list_head lower; } ;
1161 struct iw_handler_def ;
1161 struct iw_public_data ;
1161 struct forwarding_accel_ops ;
1161 struct vlan_info ;
1161 struct tipc_bearer ;
1161 struct in_device ;
1161 struct dn_dev ;
1161 struct inet6_dev ;
1161 struct cpu_rmap ;
1161 struct pcpu_lstats ;
1161 struct pcpu_sw_netstats ;
1161 struct pcpu_dstats ;
1161 struct pcpu_vstats ;
1161 union __anonunion____missing_field_name_237 { void *ml_priv; struct pcpu_lstats *lstats; struct pcpu_sw_netstats *tstats; struct pcpu_dstats *dstats; struct pcpu_vstats *vstats; } ;
1161 struct garp_port ;
1161 struct mrp_port ;
1161 struct rtnl_link_ops ;
1161 struct net_device { char name[16U]; struct hlist_node name_hlist; char *ifalias; unsigned long mem_end; unsigned long mem_start; unsigned long base_addr; int irq; unsigned long state; struct list_head dev_list; struct list_head napi_list; struct list_head unreg_list; struct list_head close_list; struct __anonstruct_adj_list_235 adj_list; struct __anonstruct_all_adj_list_236 all_adj_list; netdev_features_t features; netdev_features_t hw_features; netdev_features_t wanted_features; netdev_features_t vlan_features; netdev_features_t hw_enc_features; netdev_features_t mpls_features; int ifindex; int iflink; struct net_device_stats stats; atomic_long_t rx_dropped; const struct iw_handler_def *wireless_handlers; struct iw_public_data *wireless_data; const struct net_device_ops *netdev_ops; const struct ethtool_ops *ethtool_ops; const struct forwarding_accel_ops *fwd_ops; const struct header_ops *header_ops; unsigned int flags; unsigned int priv_flags; unsigned short gflags; unsigned short padded; unsigned char operstate; unsigned char link_mode; unsigned char if_port; unsigned char dma; unsigned int mtu; unsigned short type; unsigned short hard_header_len; unsigned short needed_headroom; unsigned short needed_tailroom; unsigned char perm_addr[32U]; unsigned char addr_assign_type; unsigned char addr_len; unsigned short neigh_priv_len; unsigned short dev_id; spinlock_t addr_list_lock; struct netdev_hw_addr_list uc; struct netdev_hw_addr_list mc; struct netdev_hw_addr_list dev_addrs; struct kset *queues_kset; bool uc_promisc; unsigned int promiscuity; unsigned int allmulti; struct vlan_info *vlan_info; struct dsa_switch_tree *dsa_ptr; struct tipc_bearer *tipc_ptr; void *atalk_ptr; struct in_device *ip_ptr; struct dn_dev *dn_ptr; struct inet6_dev *ip6_ptr; void *ax25_ptr; struct wireless_dev *ieee80211_ptr; unsigned long last_rx; unsigned char *dev_addr; struct netdev_rx_queue *_rx; unsigned int num_rx_queues; unsigned int real_num_rx_queues; rx_handler_func_t *rx_handler; void *rx_handler_data; struct netdev_queue *ingress_queue; unsigned char broadcast[32U]; struct netdev_queue *_tx; unsigned int num_tx_queues; unsigned int real_num_tx_queues; struct Qdisc *qdisc; unsigned long tx_queue_len; spinlock_t tx_global_lock; struct xps_dev_maps *xps_maps; struct cpu_rmap *rx_cpu_rmap; unsigned long trans_start; int watchdog_timeo; struct timer_list watchdog_timer; int *pcpu_refcnt; struct list_head todo_list; struct hlist_node index_hlist; struct list_head link_watch_list; unsigned char reg_state; bool dismantle; unsigned short rtnl_link_state; void (*destructor)(struct net_device *); struct netpoll_info *npinfo; struct net *nd_net; union __anonunion____missing_field_name_237 __annonCompField74; struct garp_port *garp_port; struct mrp_port *mrp_port; struct device dev; const struct attribute_group *sysfs_groups[4U]; const struct attribute_group *sysfs_rx_queue_group; const struct rtnl_link_ops *rtnl_link_ops; unsigned int gso_max_size; u16 gso_max_segs; const struct dcbnl_rtnl_ops *dcbnl_ops; u8 num_tc; struct netdev_tc_txq tc_to_txq[16U]; u8 prio_tc_map[16U]; unsigned int fcoe_ddp_xid; struct netprio_map *priomap; struct phy_device *phydev; struct lock_class_key *qdisc_tx_busylock; int group; struct pm_qos_request pm_qos_req; } ;
1722 struct pcpu_sw_netstats { u64 rx_packets; u64 rx_bytes; u64 tx_packets; u64 tx_bytes; struct u64_stats_sync syncp; } ;
2465 enum skb_free_reason { SKB_REASON_CONSUMED = 0, SKB_REASON_DROPPED = 1 } ;
15 typedef __u64 Elf64_Addr;
16 typedef __u16 Elf64_Half;
20 typedef __u32 Elf64_Word;
21 typedef __u64 Elf64_Xword;
190 struct elf64_sym { Elf64_Word st_name; unsigned char st_info; unsigned char st_other; Elf64_Half st_shndx; Elf64_Addr st_value; Elf64_Xword st_size; } ;
198 typedef struct elf64_sym Elf64_Sym;
48 struct kernel_param ;
53 struct kernel_param_ops { unsigned int flags; int (*set)(const char *, const struct kernel_param *); int (*get)(char *, const struct kernel_param *); void (*free)(void *); } ;
58 struct kparam_string ;
58 struct kparam_array ;
58 union __anonunion____missing_field_name_242 { void *arg; const struct kparam_string *str; const struct kparam_array *arr; } ;
58 struct kernel_param { const char *name; const struct kernel_param_ops *ops; u16 perm; s16 level; union __anonunion____missing_field_name_242 __annonCompField75; } ;
70 struct kparam_string { unsigned int maxlen; char *string; } ;
76 struct kparam_array { unsigned int max; unsigned int elemsize; unsigned int *num; const struct kernel_param_ops *ops; void *elem; } ;
463 struct tracepoint ;
464 struct tracepoint_func { void *func; void *data; } ;
29 struct tracepoint { const char *name; struct static_key key; void (*regfunc)(); void (*unregfunc)(); struct tracepoint_func *funcs; } ;
92 struct mod_arch_specific { } ;
36 struct module_param_attrs ;
36 struct module_kobject { struct kobject kobj; struct module *mod; struct kobject *drivers_dir; struct module_param_attrs *mp; struct completion *kobj_completion; } ;
46 struct module_attribute { struct attribute attr; ssize_t (*show)(struct module_attribute *, struct module_kobject *, char *); ssize_t (*store)(struct module_attribute *, struct module_kobject *, const char *, size_t ); void (*setup)(struct module *, const char *); int (*test)(struct module *); void (*free)(struct module *); } ;
208 enum module_state { MODULE_STATE_LIVE = 0, MODULE_STATE_COMING = 1, MODULE_STATE_GOING = 2, MODULE_STATE_UNFORMED = 3 } ;
215 struct module_ref { unsigned long incs; unsigned long decs; } ;
229 struct module_sect_attrs ;
229 struct module_notes_attrs ;
229 struct ftrace_event_call ;
229 struct module { enum module_state state; struct list_head list; char name[56U]; struct module_kobject mkobj; struct module_attribute *modinfo_attrs; const char *version; const char *srcversion; struct kobject *holders_dir; const struct kernel_symbol *syms; const unsigned long *crcs; unsigned int num_syms; struct kernel_param *kp; unsigned int num_kp; unsigned int num_gpl_syms; const struct kernel_symbol *gpl_syms; const unsigned long *gpl_crcs; const struct kernel_symbol *unused_syms; const unsigned long *unused_crcs; unsigned int num_unused_syms; unsigned int num_unused_gpl_syms; const struct kernel_symbol *unused_gpl_syms; const unsigned long *unused_gpl_crcs; bool sig_ok; const struct kernel_symbol *gpl_future_syms; const unsigned long *gpl_future_crcs; unsigned int num_gpl_future_syms; unsigned int num_exentries; struct exception_table_entry *extable; int (*init)(); void *module_init; void *module_core; unsigned int init_size; unsigned int core_size; unsigned int init_text_size; unsigned int core_text_size; unsigned int init_ro_size; unsigned int core_ro_size; struct mod_arch_specific arch; unsigned int taints; unsigned int num_bugs; struct list_head bug_list; struct bug_entry *bug_table; Elf64_Sym *symtab; Elf64_Sym *core_symtab; unsigned int num_symtab; unsigned int core_num_syms; char *strtab; char *core_strtab; struct module_sect_attrs *sect_attrs; struct module_notes_attrs *notes_attrs; char *args; void *percpu; unsigned int percpu_size; unsigned int num_tracepoints; const struct tracepoint **tracepoints_ptrs; unsigned int num_trace_bprintk_fmt; const char **trace_bprintk_fmt_start; struct ftrace_event_call **trace_events; unsigned int num_trace_events; struct list_head source_list; struct list_head target_list; void (*exit)(); struct module_ref *refptr; ctor_fn_t (**ctors)(); unsigned int num_ctors; } ;
13 typedef unsigned long kernel_ulong_t;
14 struct pci_device_id { __u32 vendor; __u32 device; __u32 subvendor; __u32 subdevice; __u32 class; __u32 class_mask; kernel_ulong_t driver_data; } ;
186 struct acpi_device_id { __u8 id[9U]; kernel_ulong_t driver_data; } ;
219 struct of_device_id { char name[32U]; char type[32U]; char compatible[128U]; const void *data; } ;
69 struct hotplug_slot ;
69 struct pci_slot { struct pci_bus *bus; struct list_head list; struct hotplug_slot *hotplug; unsigned char number; struct kobject kobj; } ;
110 typedef int pci_power_t;
137 typedef unsigned int pci_channel_state_t;
138 enum pci_channel_state { pci_channel_io_normal = 1, pci_channel_io_frozen = 2, pci_channel_io_perm_failure = 3 } ;
163 typedef unsigned short pci_dev_flags_t;
180 typedef unsigned short pci_bus_flags_t;
237 struct pcie_link_state ;
238 struct pci_vpd ;
239 struct pci_sriov ;
240 struct pci_ats ;
241 struct pci_driver ;
241 union __anonunion____missing_field_name_246 { struct pci_sriov *sriov; struct pci_dev *physfn; } ;
241 struct pci_dev { struct list_head bus_list; struct pci_bus *bus; struct pci_bus *subordinate; void *sysdata; struct proc_dir_entry *procent; struct pci_slot *slot; unsigned int devfn; unsigned short vendor; unsigned short device; unsigned short subsystem_vendor; unsigned short subsystem_device; unsigned int class; u8 revision; u8 hdr_type; u8 pcie_cap; u8 msi_cap; u8 msix_cap; unsigned char pcie_mpss; u8 rom_base_reg; u8 pin; u16 pcie_flags_reg; struct pci_driver *driver; u64 dma_mask; struct device_dma_parameters dma_parms; pci_power_t current_state; u8 pm_cap; unsigned char pme_support; unsigned char pme_interrupt; unsigned char pme_poll; unsigned char d1_support; unsigned char d2_support; unsigned char no_d1d2; unsigned char no_d3cold; unsigned char d3cold_allowed; unsigned char mmio_always_on; unsigned char wakeup_prepared; unsigned char runtime_d3cold; unsigned int d3_delay; unsigned int d3cold_delay; struct pcie_link_state *link_state; pci_channel_state_t error_state; struct device dev; int cfg_size; unsigned int irq; struct resource resource[17U]; bool match_driver; unsigned char transparent; unsigned char multifunction; unsigned char is_added; unsigned char is_busmaster; unsigned char no_msi; unsigned char block_cfg_access; unsigned char broken_parity_status; unsigned char irq_reroute_variant; unsigned char msi_enabled; unsigned char msix_enabled; unsigned char ari_enabled; unsigned char is_managed; unsigned char needs_freset; unsigned char state_saved; unsigned char is_physfn; unsigned char is_virtfn; unsigned char reset_fn; unsigned char is_hotplug_bridge; unsigned char __aer_firmware_first_valid; unsigned char __aer_firmware_first; unsigned char broken_intx_masking; unsigned char io_window_1k; pci_dev_flags_t dev_flags; atomic_t enable_cnt; u32 saved_config_space[16U]; struct hlist_head saved_cap_space; struct bin_attribute *rom_attr; int rom_attr_enabled; struct bin_attribute *res_attr[17U]; struct bin_attribute *res_attr_wc[17U]; struct list_head msi_list; const struct attribute_group **msi_irq_groups; struct pci_vpd *vpd; union __anonunion____missing_field_name_246 __annonCompField76; struct pci_ats *ats; phys_addr_t rom; size_t romlen; } ;
429 struct pci_ops ;
429 struct msi_chip ;
429 struct pci_bus { struct list_head node; struct pci_bus *parent; struct list_head children; struct list_head devices; struct pci_dev *self; struct list_head slots; struct resource *resource[4U]; struct list_head resources; struct resource busn_res; struct pci_ops *ops; struct msi_chip *msi; void *sysdata; struct proc_dir_entry *procdir; unsigned char number; unsigned char primary; unsigned char max_bus_speed; unsigned char cur_bus_speed; char name[48U]; unsigned short bridge_ctl; pci_bus_flags_t bus_flags; struct device *bridge; struct device dev; struct bin_attribute *legacy_io; struct bin_attribute *legacy_mem; unsigned char is_added; } ;
534 struct pci_ops { int (*read)(struct pci_bus *, unsigned int, int, int, u32 *); int (*write)(struct pci_bus *, unsigned int, int, int, u32 ); } ;
555 struct pci_dynids { spinlock_t lock; struct list_head list; } ;
569 typedef unsigned int pci_ers_result_t;
579 struct pci_error_handlers { pci_ers_result_t (*error_detected)(struct pci_dev *, enum pci_channel_state ); pci_ers_result_t (*mmio_enabled)(struct pci_dev *); pci_ers_result_t (*link_reset)(struct pci_dev *); pci_ers_result_t (*slot_reset)(struct pci_dev *); void (*resume)(struct pci_dev *); } ;
609 struct pci_driver { struct list_head node; const char *name; const struct pci_device_id *id_table; int (*probe)(struct pci_dev *, const struct pci_device_id *); void (*remove)(struct pci_dev *); int (*suspend)(struct pci_dev *, pm_message_t ); int (*suspend_late)(struct pci_dev *, pm_message_t ); int (*resume_early)(struct pci_dev *); int (*resume)(struct pci_dev *); void (*shutdown)(struct pci_dev *); int (*sriov_configure)(struct pci_dev *, int); const struct pci_error_handlers *err_handler; struct device_driver driver; struct pci_dynids dynids; } ;
615 struct res_counter { unsigned long long usage; unsigned long long max_usage; unsigned long long limit; unsigned long long soft_limit; unsigned long long failcnt; spinlock_t lock; struct res_counter *parent; } ;
226 struct kioctx ;
30 typedef int kiocb_cancel_fn(struct kiocb *);
31 union __anonunion_ki_obj_247 { void *user; struct task_struct *tsk; } ;
31 struct eventfd_ctx ;
31 struct kiocb { struct file *ki_filp; struct kioctx *ki_ctx; kiocb_cancel_fn *ki_cancel; void *private; union __anonunion_ki_obj_247 ki_obj; __u64 ki_user_data; loff_t ki_pos; size_t ki_nbytes; struct list_head ki_list; struct eventfd_ctx *ki_eventfd; } ;
100 struct sock_filter { __u16 code; __u8 jt; __u8 jf; __u32 k; } ;
20 union __anonunion____missing_field_name_248 { struct sock_filter insns[0U]; struct work_struct work; } ;
20 struct sk_filter { atomic_t refcnt; unsigned int len; struct callback_head rcu; unsigned int (*bpf_func)(const struct sk_buff *, const struct sock_filter *); union __anonunion____missing_field_name_248 __annonCompField77; } ;
32 struct poll_table_struct { void (*_qproc)(struct file *, wait_queue_head_t *, struct poll_table_struct *); unsigned long _key; } ;
108 struct nla_policy { u16 type; u16 len; } ;
25 struct rtnl_link_ops { struct list_head list; const char *kind; size_t priv_size; void (*setup)(struct net_device *); int maxtype; const struct nla_policy *policy; int (*validate)(struct nlattr **, struct nlattr **); int (*newlink)(struct net *, struct net_device *, struct nlattr **, struct nlattr **); int (*changelink)(struct net_device *, struct nlattr **, struct nlattr **); void (*dellink)(struct net_device *, struct list_head *); size_t (*get_size)(const struct net_device *); int (*fill_info)(struct sk_buff *, const struct net_device *); size_t (*get_xstats_size)(const struct net_device *); int (*fill_xstats)(struct sk_buff *, const struct net_device *); unsigned int (*get_num_tx_queues)(); unsigned int (*get_num_rx_queues)(); int slave_maxtype; const struct nla_policy *slave_policy; int (*slave_validate)(struct nlattr **, struct nlattr **); int (*slave_changelink)(struct net_device *, struct net_device *, struct nlattr **, struct nlattr **); size_t (*get_slave_size)(const struct net_device *, const struct net_device *); int (*fill_slave_info)(struct sk_buff *, const struct net_device *, const struct net_device *); } ;
167 struct neigh_table ;
167 struct neigh_parms { struct net *net; struct net_device *dev; struct neigh_parms *next; int (*neigh_setup)(struct neighbour *); void (*neigh_cleanup)(struct neighbour *); struct neigh_table *tbl; void *sysctl_table; int dead; atomic_t refcnt; struct callback_head callback_head; int reachable_time; int data[12U]; unsigned long data_state[1U]; } ;
111 struct neigh_statistics { unsigned long allocs; unsigned long destroys; unsigned long hash_grows; unsigned long res_failed; unsigned long lookups; unsigned long hits; unsigned long rcv_probes_mcast; unsigned long rcv_probes_ucast; unsigned long periodic_gc_runs; unsigned long forced_gc_runs; unsigned long unres_discards; } ;
130 struct neigh_ops ;
130 struct neighbour { struct neighbour *next; struct neigh_table *tbl; struct neigh_parms *parms; unsigned long confirmed; unsigned long updated; rwlock_t lock; atomic_t refcnt; struct sk_buff_head arp_queue; unsigned int arp_queue_len_bytes; struct timer_list timer; unsigned long used; atomic_t probes; __u8 flags; __u8 nud_state; __u8 type; __u8 dead; seqlock_t ha_lock; unsigned char ha[32U]; struct hh_cache hh; int (*output)(struct neighbour *, struct sk_buff *); const struct neigh_ops *ops; struct callback_head rcu; struct net_device *dev; u8 primary_key[0U]; } ;
159 struct neigh_ops { int family; void (*solicit)(struct neighbour *, struct sk_buff *); void (*error_report)(struct neighbour *, struct sk_buff *); int (*output)(struct neighbour *, struct sk_buff *); int (*connected_output)(struct neighbour *, struct sk_buff *); } ;
167 struct pneigh_entry { struct pneigh_entry *next; struct net *net; struct net_device *dev; u8 flags; u8 key[0U]; } ;
177 struct neigh_hash_table { struct neighbour **hash_buckets; unsigned int hash_shift; __u32 hash_rnd[4U]; struct callback_head rcu; } ;
190 struct neigh_table { struct neigh_table *next; int family; int entry_size; int key_len; __u32 (*hash)(const void *, const struct net_device *, __u32 *); int (*constructor)(struct neighbour *); int (*pconstructor)(struct pneigh_entry *); void (*pdestructor)(struct pneigh_entry *); void (*proxy_redo)(struct sk_buff *); char *id; struct neigh_parms parms; int gc_interval; int gc_thresh1; int gc_thresh2; int gc_thresh3; unsigned long last_flush; struct delayed_work gc_work; struct timer_list proxy_timer; struct sk_buff_head proxy_queue; atomic_t entries; rwlock_t lock; unsigned long last_rand; struct neigh_statistics *stats; struct neigh_hash_table *nht; struct pneigh_entry **phash_buckets; } ;
462 struct dn_route ;
462 union __anonunion____missing_field_name_253 { struct dst_entry *next; struct rtable *rt_next; struct rt6_info *rt6_next; struct dn_route *dn_next; } ;
462 struct dst_entry { struct callback_head callback_head; struct dst_entry *child; struct net_device *dev; struct dst_ops *ops; unsigned long _metrics; unsigned long expires; struct dst_entry *path; struct dst_entry *from; struct xfrm_state *xfrm; int (*input)(struct sk_buff *); int (*output)(struct sk_buff *); unsigned short flags; unsigned short pending_confirm; short error; short obsolete; unsigned short header_len; unsigned short trailer_len; __u32 tclassid; long __pad_to_align_refcnt[2U]; atomic_t __refcnt; int __use; unsigned long lastuse; union __anonunion____missing_field_name_253 __annonCompField78; } ;
123 struct __anonstruct_socket_lock_t_254 { spinlock_t slock; int owned; wait_queue_head_t wq; struct lockdep_map dep_map; } ;
123 typedef struct __anonstruct_socket_lock_t_254 socket_lock_t;
123 struct proto ;
129 typedef __u32 __portpair;
130 typedef __u64 __addrpair;
131 struct __anonstruct____missing_field_name_256 { __be32 skc_daddr; __be32 skc_rcv_saddr; } ;
131 union __anonunion____missing_field_name_255 { __addrpair skc_addrpair; struct __anonstruct____missing_field_name_256 __annonCompField79; } ;
131 union __anonunion____missing_field_name_257 { unsigned int skc_hash; __u16 skc_u16hashes[2U]; } ;
131 struct __anonstruct____missing_field_name_259 { __be16 skc_dport; __u16 skc_num; } ;
131 union __anonunion____missing_field_name_258 { __portpair skc_portpair; struct __anonstruct____missing_field_name_259 __annonCompField82; } ;
131 union __anonunion____missing_field_name_260 { struct hlist_node skc_bind_node; struct hlist_nulls_node skc_portaddr_node; } ;
131 union __anonunion____missing_field_name_261 { struct hlist_node skc_node; struct hlist_nulls_node skc_nulls_node; } ;
131 struct sock_common { union __anonunion____missing_field_name_255 __annonCompField80; union __anonunion____missing_field_name_257 __annonCompField81; union __anonunion____missing_field_name_258 __annonCompField83; unsigned short skc_family; volatile unsigned char skc_state; unsigned char skc_reuse; unsigned char skc_reuseport; int skc_bound_dev_if; union __anonunion____missing_field_name_260 __annonCompField84; struct proto *skc_prot; struct net *skc_net; struct in6_addr skc_v6_daddr; struct in6_addr skc_v6_rcv_saddr; int skc_dontcopy_begin[0U]; union __anonunion____missing_field_name_261 __annonCompField85; int skc_tx_queue_mapping; atomic_t skc_refcnt; int skc_dontcopy_end[0U]; } ;
216 struct cg_proto ;
217 struct __anonstruct_sk_backlog_262 { atomic_t rmem_alloc; int len; struct sk_buff *head; struct sk_buff *tail; } ;
217 struct sock { struct sock_common __sk_common; socket_lock_t sk_lock; struct sk_buff_head sk_receive_queue; struct __anonstruct_sk_backlog_262 sk_backlog; int sk_forward_alloc; __u32 sk_rxhash; unsigned int sk_napi_id; unsigned int sk_ll_usec; atomic_t sk_drops; int sk_rcvbuf; struct sk_filter *sk_filter; struct socket_wq *sk_wq; struct xfrm_policy *sk_policy[2U]; unsigned long sk_flags; struct dst_entry *sk_rx_dst; struct dst_entry *sk_dst_cache; spinlock_t sk_dst_lock; atomic_t sk_wmem_alloc; atomic_t sk_omem_alloc; int sk_sndbuf; struct sk_buff_head sk_write_queue; unsigned char sk_shutdown; unsigned char sk_no_check; unsigned char sk_userlocks; unsigned char sk_protocol; unsigned short sk_type; int sk_wmem_queued; gfp_t sk_allocation; u32 sk_pacing_rate; u32 sk_max_pacing_rate; netdev_features_t sk_route_caps; netdev_features_t sk_route_nocaps; int sk_gso_type; unsigned int sk_gso_max_size; u16 sk_gso_max_segs; int sk_rcvlowat; unsigned long sk_lingertime; struct sk_buff_head sk_error_queue; struct proto *sk_prot_creator; rwlock_t sk_callback_lock; int sk_err; int sk_err_soft; unsigned short sk_ack_backlog; unsigned short sk_max_ack_backlog; __u32 sk_priority; __u32 sk_cgrp_prioidx; struct pid *sk_peer_pid; const struct cred *sk_peer_cred; long sk_rcvtimeo; long sk_sndtimeo; void *sk_protinfo; struct timer_list sk_timer; ktime_t sk_stamp; struct socket *sk_socket; void *sk_user_data; struct page_frag sk_frag; struct sk_buff *sk_send_head; __s32 sk_peek_off; int sk_write_pending; void *sk_security; __u32 sk_mark; u32 sk_classid; struct cg_proto *sk_cgrp; void (*sk_state_change)(struct sock *); void (*sk_data_ready)(struct sock *, int); void (*sk_write_space)(struct sock *); void (*sk_error_report)(struct sock *); int (*sk_backlog_rcv)(struct sock *, struct sk_buff *); void (*sk_destruct)(struct sock *); } ;
901 struct request_sock_ops ;
902 struct timewait_sock_ops ;
903 struct inet_hashinfo ;
904 struct raw_hashinfo ;
919 struct udp_table ;
919 union __anonunion_h_263 { struct inet_hashinfo *hashinfo; struct udp_table *udp_table; struct raw_hashinfo *raw_hash; } ;
919 struct proto { void (*close)(struct sock *, long); int (*connect)(struct sock *, struct sockaddr *, int); int (*disconnect)(struct sock *, int); struct sock * (*accept)(struct sock *, int, int *); int (*ioctl)(struct sock *, int, unsigned long); int (*init)(struct sock *); void (*destroy)(struct sock *); void (*shutdown)(struct sock *, int); int (*setsockopt)(struct sock *, int, int, char *, unsigned int); int (*getsockopt)(struct sock *, int, int, char *, int *); int (*compat_setsockopt)(struct sock *, int, int, char *, unsigned int); int (*compat_getsockopt)(struct sock *, int, int, char *, int *); int (*compat_ioctl)(struct sock *, unsigned int, unsigned long); int (*sendmsg)(struct kiocb *, struct sock *, struct msghdr *, size_t ); int (*recvmsg)(struct kiocb *, struct sock *, struct msghdr *, size_t , int, int, int *); int (*sendpage)(struct sock *, struct page *, int, size_t , int); int (*bind)(struct sock *, struct sockaddr *, int); int (*backlog_rcv)(struct sock *, struct sk_buff *); void (*release_cb)(struct sock *); void (*mtu_reduced)(struct sock *); void (*hash)(struct sock *); void (*unhash)(struct sock *); void (*rehash)(struct sock *); int (*get_port)(struct sock *, unsigned short); void (*clear_sk)(struct sock *, int); unsigned int inuse_idx; bool (*stream_memory_free)(const struct sock *); void (*enter_memory_pressure)(struct sock *); atomic_long_t *memory_allocated; struct percpu_counter *sockets_allocated; int *memory_pressure; long *sysctl_mem; int *sysctl_wmem; int *sysctl_rmem; int max_header; bool no_autobind; struct kmem_cache *slab; unsigned int obj_size; int slab_flags; struct percpu_counter *orphan_count; struct request_sock_ops *rsk_prot; struct timewait_sock_ops *twsk_prot; union __anonunion_h_263 h; struct module *owner; char name[32U]; struct list_head node; int (*init_cgroup)(struct mem_cgroup *, struct cgroup_subsys *); void (*destroy_cgroup)(struct mem_cgroup *); struct cg_proto * (*proto_cgroup)(struct mem_cgroup *); } ;
1044 struct cg_proto { struct res_counter memory_allocated; struct percpu_counter sockets_allocated; int memory_pressure; long sysctl_mem[3U]; unsigned long flags; struct mem_cgroup *memcg; } ;
169 struct request_sock_ops { int family; int obj_size; struct kmem_cache *slab; char *slab_name; int (*rtx_syn_ack)(struct sock *, struct request_sock *); void (*send_ack)(struct sock *, struct sk_buff *, struct request_sock *); void (*send_reset)(struct sock *, struct sk_buff *); void (*destructor)(struct request_sock *); void (*syn_ack_timeout)(struct sock *, struct request_sock *); } ;
47 struct request_sock { struct sock_common __req_common; struct request_sock *dl_next; u16 mss; u8 num_retrans; unsigned char cookie_ts; unsigned char num_timeout; u32 window_clamp; u32 rcv_wnd; u32 ts_recent; unsigned long expires; const struct request_sock_ops *rsk_ops; struct sock *sk; u32 secid; u32 peer_secid; } ;
372 struct timewait_sock_ops { struct kmem_cache *twsk_slab; char *twsk_slab_name; unsigned int twsk_obj_size; int (*twsk_unique)(struct sock *, struct sock *, void *); void (*twsk_destructor)(struct sock *); } ;
393 struct firmware { size_t size; const u8 *data; struct page **pages; void *priv; } ;
162 typedef u64 acpi_io_address;
419 typedef void *acpi_handle;
615 typedef u32 acpi_object_type;
865 struct __anonstruct_integer_270 { acpi_object_type type; u64 value; } ;
865 struct __anonstruct_string_271 { acpi_object_type type; u32 length; char *pointer; } ;
865 struct __anonstruct_buffer_272 { acpi_object_type type; u32 length; u8 *pointer; } ;
865 struct __anonstruct_package_273 { acpi_object_type type; u32 count; union acpi_object *elements; } ;
865 struct __anonstruct_reference_274 { acpi_object_type type; acpi_object_type actual_type; acpi_handle handle; } ;
865 struct __anonstruct_processor_275 { acpi_object_type type; u32 proc_id; acpi_io_address pblk_address; u32 pblk_length; } ;
865 struct __anonstruct_power_resource_276 { acpi_object_type type; u32 system_level; u32 resource_order; } ;
865 union acpi_object { acpi_object_type type; struct __anonstruct_integer_270 integer; struct __anonstruct_string_271 string; struct __anonstruct_buffer_272 buffer; struct __anonstruct_package_273 package; struct __anonstruct_reference_274 reference; struct __anonstruct_processor_275 processor; struct __anonstruct_power_resource_276 power_resource; } ;
109 struct acpi_driver ;
110 struct acpi_hotplug_profile { struct kobject kobj; int (*scan_dependent)(struct acpi_device *); bool enabled; bool demand_offline; } ;
131 struct acpi_scan_handler { const struct acpi_device_id *ids; struct list_head list_node; int (*attach)(struct acpi_device *, const struct acpi_device_id *); void (*detach)(struct acpi_device *); struct acpi_hotplug_profile hotplug; } ;
147 struct acpi_device_ops { int (*add)(struct acpi_device *); int (*remove)(struct acpi_device *); void (*notify)(struct acpi_device *, u32 ); } ;
153 struct acpi_driver { char name[80U]; char class[80U]; const struct acpi_device_id *ids; unsigned int flags; struct acpi_device_ops ops; struct device_driver drv; struct module *owner; } ;
165 struct acpi_device_status { unsigned char present; unsigned char enabled; unsigned char show_in_ui; unsigned char functional; unsigned char battery_present; unsigned int reserved; } ;
181 struct acpi_device_flags { unsigned char dynamic_status; unsigned char removable; unsigned char ejectable; unsigned char power_manageable; unsigned char match_driver; unsigned char initialized; unsigned char visited; unsigned char no_hotplug; unsigned int reserved; } ;
195 struct acpi_device_dir { struct proc_dir_entry *entry; } ;
206 typedef char acpi_bus_id[8U];
207 typedef unsigned long acpi_bus_address;
208 typedef char acpi_device_name[40U];
209 typedef char acpi_device_class[20U];
215 struct acpi_pnp_type { unsigned char hardware_id; unsigned char bus_address; unsigned int reserved; } ;
221 struct acpi_device_pnp { acpi_bus_id bus_id; struct acpi_pnp_type type; acpi_bus_address bus_address; char *unique_id; struct list_head ids; acpi_device_name device_name; acpi_device_class device_class; union acpi_object *str_obj; unsigned long sun; } ;
237 struct acpi_device_power_flags { unsigned char explicit_get; unsigned char power_resources; unsigned char inrush_current; unsigned char power_removed; unsigned char ignore_parent; unsigned int reserved; } ;
250 struct __anonstruct_flags_277 { unsigned char valid; unsigned char os_accessible; unsigned char explicit_set; unsigned char reserved; } ;
250 struct acpi_device_power_state { struct __anonstruct_flags_277 flags; int power; int latency; struct list_head resources; } ;
262 struct acpi_device_power { int state; struct acpi_device_power_flags flags; struct acpi_device_power_state states[5U]; } ;
268 struct acpi_device_perf_flags { u8 reserved; } ;
274 struct __anonstruct_flags_278 { unsigned char valid; unsigned char reserved; } ;
274 struct acpi_device_perf_state { struct __anonstruct_flags_278 flags; u8 power; u8 performance; int latency; } ;
284 struct acpi_device_perf { int state; struct acpi_device_perf_flags flags; int state_count; struct acpi_device_perf_state *states; } ;
291 struct acpi_device_wakeup_flags { unsigned char valid; unsigned char run_wake; unsigned char notifier_present; } ;
298 struct acpi_device_wakeup { acpi_handle gpe_device; u64 gpe_number; u64 sleep_state; struct list_head resources; struct acpi_device_wakeup_flags flags; int prepare_count; } ;
314 struct acpi_device { int device_type; acpi_handle handle; struct acpi_device *parent; struct list_head children; struct list_head node; struct list_head wakeup_list; struct list_head del_list; struct acpi_device_status status; struct acpi_device_flags flags; struct acpi_device_pnp pnp; struct acpi_device_power power; struct acpi_device_wakeup wakeup; struct acpi_device_perf performance; struct acpi_device_dir dir; struct acpi_scan_handler *handler; struct acpi_driver *driver; void *driver_data; struct device dev; unsigned int physical_node_count; struct list_head physical_node_list; struct mutex physical_node_lock; void (*remove)(struct acpi_device *); } ;
1119 struct ieee80211_mcs_info { u8 rx_mask[10U]; __le16 rx_highest; u8 tx_params; u8 reserved[3U]; } ;
1144 struct ieee80211_ht_cap { __le16 cap_info; u8 ampdu_params_info; struct ieee80211_mcs_info mcs; __le16 extended_ht_cap_info; __le32 tx_BF_cap_info; u8 antenna_selection_info; } ;
1254 struct ieee80211_vht_mcs_info { __le16 rx_mcs_map; __le16 rx_highest; __le16 tx_mcs_map; __le16 tx_highest; } ;
1335 struct ieee80211_vht_cap { __le32 vht_cap_info; struct ieee80211_vht_mcs_info supp_mcs; } ;
42 struct lib80211_crypto_ops { const char *name; struct list_head list; void * (*init)(int); void (*deinit)(void *); int (*encrypt_mpdu)(struct sk_buff *, int, void *); int (*decrypt_mpdu)(struct sk_buff *, int, void *); int (*encrypt_msdu)(struct sk_buff *, int, void *); int (*decrypt_msdu)(struct sk_buff *, int, int, void *); int (*set_key)(void *, int, u8 *, void *); int (*get_key)(void *, int, u8 *, void *); void (*print_stats)(struct seq_file *, void *); unsigned long int (*get_flags)(void *); unsigned long int (*set_flags)(unsigned long, void *); int extra_mpdu_prefix_len; int extra_mpdu_postfix_len; int extra_msdu_prefix_len; int extra_msdu_postfix_len; struct module *owner; } ;
96 struct lib80211_crypt_data { struct list_head list; struct lib80211_crypto_ops *ops; void *priv; atomic_t refcnt; } ;
103 struct lib80211_crypt_info { char *name; spinlock_t *lock; struct lib80211_crypt_data *crypt[4U]; int tx_keyidx; struct list_head crypt_deinit_list; struct timer_list crypt_deinit_timer; int crypt_quiesced; } ;
405 struct tasklet_struct { struct tasklet_struct *next; unsigned long state; atomic_t count; void (*func)(unsigned long); unsigned long data; } ;
386 struct iw_param { __s32 value; __u8 fixed; __u8 disabled; __u16 flags; } ;
680 struct iw_point { void *pointer; __u16 length; __u16 flags; } ;
691 struct iw_freq { __s32 m; __s16 e; __u8 i; __u8 flags; } ;
708 struct iw_quality { __u8 qual; __u8 level; __u8 noise; __u8 updated; } ;
720 struct iw_discarded { __u32 nwid; __u32 code; __u32 fragment; __u32 retries; __u32 misc; } ;
736 struct iw_missed { __u32 beacon; } ;
842 struct iw_mlme { __u16 cmd; __u16 reason_code; struct sockaddr addr; } ;
882 struct iw_statistics { __u16 status; struct iw_quality qual; struct iw_discarded discard; struct iw_missed miss; } ;
897 union iwreq_data { char name[16U]; struct iw_point essid; struct iw_param nwid; struct iw_freq freq; struct iw_param sens; struct iw_param bitrate; struct iw_param txpower; struct iw_param rts; struct iw_param frag; __u32 mode; struct iw_param retry; struct iw_point encoding; struct iw_param power; struct iw_quality qual; struct sockaddr ap_addr; struct sockaddr addr; struct iw_param param; struct iw_point data; } ;
957 struct iw_range { __u32 throughput; __u32 min_nwid; __u32 max_nwid; __u16 old_num_channels; __u8 old_num_frequency; __u8 scan_capa; __u32 event_capa[6U]; __s32 sensitivity; struct iw_quality max_qual; struct iw_quality avg_qual; __u8 num_bitrates; __s32 bitrate[32U]; __s32 min_rts; __s32 max_rts; __s32 min_frag; __s32 max_frag; __s32 min_pmp; __s32 max_pmp; __s32 min_pmt; __s32 max_pmt; __u16 pmp_flags; __u16 pmt_flags; __u16 pm_capa; __u16 encoding_size[8U]; __u8 num_encoding_sizes; __u8 max_encoding_tokens; __u8 encoding_login_index; __u16 txpower_capa; __u8 num_txpower; __s32 txpower[8U]; __u8 we_version_compiled; __u8 we_version_source; __u16 retry_capa; __u16 retry_flags; __u16 r_time_flags; __s32 min_retry; __s32 max_retry; __s32 min_r_time; __s32 max_r_time; __u16 num_channels; __u8 num_frequency; struct iw_freq freq[32U]; __u32 enc_capa; } ;
1068 struct iw_priv_args { __u32 cmd; __u16 set_args; __u16 get_args; char name[16U]; } ;
30 struct iw_request_info { __u16 cmd; __u16 flags; } ;
314 typedef int (*iw_handler)(struct net_device *, struct iw_request_info *, union iwreq_data *, char *);
315 struct iw_handler_def { const iw_handler (**standard)(struct net_device *, struct iw_request_info *, union iwreq_data *, char *); __u16 num_standard; __u16 num_private; __u16 num_private_args; const iw_handler (**private)(struct net_device *, struct iw_request_info *, union iwreq_data *, char *); const struct iw_priv_args *private_args; struct iw_statistics * (*get_wireless_stats)(struct net_device *); } ;
381 struct iw_spy_data { int spy_number; u_char spy_address[8U][6U]; struct iw_quality spy_stat[8U]; struct iw_quality spy_thr_low; struct iw_quality spy_thr_high; u_char spy_thr_under[8U]; } ;
405 struct libipw_device ;
406 struct iw_public_data { struct iw_spy_data *spy_data; struct libipw_device *libipw; } ;
574 struct ieee80211_radiotap_header { u8 it_version; u8 it_pad; __le16 it_len; __le32 it_present; } ;
423 enum nl80211_iftype { NL80211_IFTYPE_UNSPECIFIED = 0, NL80211_IFTYPE_ADHOC = 1, NL80211_IFTYPE_STATION = 2, NL80211_IFTYPE_AP = 3, NL80211_IFTYPE_AP_VLAN = 4, NL80211_IFTYPE_WDS = 5, NL80211_IFTYPE_MONITOR = 6, NL80211_IFTYPE_MESH_POINT = 7, NL80211_IFTYPE_P2P_CLIENT = 8, NL80211_IFTYPE_P2P_GO = 9, NL80211_IFTYPE_P2P_DEVICE = 10, NUM_NL80211_IFTYPES = 11, NL80211_IFTYPE_MAX = 10 } ;
2157 enum nl80211_reg_initiator { NL80211_REGDOM_SET_BY_CORE = 0, NL80211_REGDOM_SET_BY_USER = 1, NL80211_REGDOM_SET_BY_DRIVER = 2, NL80211_REGDOM_SET_BY_COUNTRY_IE = 3 } ;
2203 enum nl80211_dfs_regions { NL80211_DFS_UNSET = 0, NL80211_DFS_FCC = 1, NL80211_DFS_ETSI = 2, NL80211_DFS_JP = 3 } ;
2210 enum nl80211_user_reg_hint_type { NL80211_USER_REG_HINT_USER = 0, NL80211_USER_REG_HINT_CELL_BASE = 1 } ;
2324 enum nl80211_chan_width { NL80211_CHAN_WIDTH_20_NOHT = 0, NL80211_CHAN_WIDTH_20 = 1, NL80211_CHAN_WIDTH_40 = 2, NL80211_CHAN_WIDTH_80 = 3, NL80211_CHAN_WIDTH_80P80 = 4, NL80211_CHAN_WIDTH_160 = 5, NL80211_CHAN_WIDTH_5 = 6, NL80211_CHAN_WIDTH_10 = 7 } ;
2365 enum nl80211_auth_type { NL80211_AUTHTYPE_OPEN_SYSTEM = 0, NL80211_AUTHTYPE_SHARED_KEY = 1, NL80211_AUTHTYPE_FT = 2, NL80211_AUTHTYPE_NETWORK_EAP = 3, NL80211_AUTHTYPE_SAE = 4, __NL80211_AUTHTYPE_NUM = 5, NL80211_AUTHTYPE_MAX = 4, NL80211_AUTHTYPE_AUTOMATIC = 5 } ;
2383 enum nl80211_mfp { NL80211_MFP_NO = 0, NL80211_MFP_REQUIRED = 1 } ;
3324 struct nl80211_wowlan_tcp_data_seq { __u32 start; __u32 offset; __u32 len; } ;
3437 struct nl80211_wowlan_tcp_data_token { __u32 offset; __u32 len; __u8 token_stream[]; } ;
3449 struct nl80211_wowlan_tcp_data_token_feature { __u32 min_len; __u32 max_len; __u32 bufsize; } ;
3667 enum nl80211_dfs_state { NL80211_DFS_USABLE = 0, NL80211_DFS_UNAVAILABLE = 1, NL80211_DFS_AVAILABLE = 2 } ;
3689 struct nl80211_vendor_cmd_info { __u32 vendor_id; __u32 subcmd; } ;
4039 enum environment_cap { ENVIRON_ANY = 0, ENVIRON_INDOOR = 1, ENVIRON_OUTDOOR = 2 } ;
4045 struct regulatory_request { struct callback_head callback_head; int wiphy_idx; enum nl80211_reg_initiator initiator; enum nl80211_user_reg_hint_type user_reg_hint_type; char alpha2[2U]; enum nl80211_dfs_regions dfs_region; bool intersect; bool processed; enum environment_cap country_ie_env; struct list_head list; } ;
96 struct ieee80211_freq_range { u32 start_freq_khz; u32 end_freq_khz; u32 max_bandwidth_khz; } ;
148 struct ieee80211_power_rule { u32 max_antenna_gain; u32 max_eirp; } ;
153 struct ieee80211_reg_rule { struct ieee80211_freq_range freq_range; struct ieee80211_power_rule power_rule; u32 flags; } ;
159 struct ieee80211_regdomain { struct callback_head callback_head; u32 n_reg_rules; char alpha2[2U]; enum nl80211_dfs_regions dfs_region; struct ieee80211_reg_rule reg_rules[]; } ;
167 struct wiphy ;
168 enum ieee80211_band { IEEE80211_BAND_2GHZ = 0, IEEE80211_BAND_5GHZ = 1, IEEE80211_BAND_60GHZ = 2, IEEE80211_NUM_BANDS = 3 } ;
186 struct ieee80211_channel { enum ieee80211_band band; u16 center_freq; u16 hw_value; u32 flags; int max_antenna_gain; int max_power; int max_reg_power; bool beacon_found; u32 orig_flags; int orig_mag; int orig_mpwr; enum nl80211_dfs_state dfs_state; unsigned long dfs_state_entered; } ;
179 struct ieee80211_rate { u32 flags; u16 bitrate; u16 hw_value; u16 hw_value_short; } ;
222 struct ieee80211_sta_ht_cap { u16 cap; bool ht_supported; u8 ampdu_factor; u8 ampdu_density; struct ieee80211_mcs_info mcs; } ;
242 struct ieee80211_sta_vht_cap { bool vht_supported; u32 cap; struct ieee80211_vht_mcs_info vht_mcs; } ;
258 struct ieee80211_supported_band { struct ieee80211_channel *channels; struct ieee80211_rate *bitrates; enum ieee80211_band band; int n_channels; int n_bitrates; struct ieee80211_sta_ht_cap ht_cap; struct ieee80211_sta_vht_cap vht_cap; } ;
337 struct cfg80211_chan_def { struct ieee80211_channel *chan; enum nl80211_chan_width width; u32 center_freq1; u32 center_freq2; } ;
550 struct cfg80211_crypto_settings { u32 wpa_versions; u32 cipher_group; int n_ciphers_pairwise; u32 ciphers_pairwise[5U]; int n_akm_suites; u32 akm_suites[2U]; bool control_port; __be16 control_port_ethertype; bool control_port_no_encrypt; } ;
613 struct mac_address { u8 addr[6U]; } ;
1446 enum cfg80211_signal_type { CFG80211_SIGNAL_TYPE_NONE = 0, CFG80211_SIGNAL_TYPE_MBM = 1, CFG80211_SIGNAL_TYPE_UNSPEC = 2 } ;
1647 struct cfg80211_ibss_params { u8 *ssid; u8 *bssid; struct cfg80211_chan_def chandef; u8 *ie; u8 ssid_len; u8 ie_len; u16 beacon_interval; u32 basic_rates; bool channel_fixed; bool privacy; bool control_port; bool userspace_handles_dfs; int mcast_rate[3U]; struct ieee80211_ht_cap ht_capa; struct ieee80211_ht_cap ht_capa_mask; } ;
1695 struct cfg80211_connect_params { struct ieee80211_channel *channel; u8 *bssid; u8 *ssid; size_t ssid_len; enum nl80211_auth_type auth_type; u8 *ie; size_t ie_len; bool privacy; enum nl80211_mfp mfp; struct cfg80211_crypto_settings crypto; const u8 *key; u8 key_len; u8 key_idx; u32 flags; int bg_scan_period; struct ieee80211_ht_cap ht_capa; struct ieee80211_ht_cap ht_capa_mask; struct ieee80211_vht_cap vht_capa; struct ieee80211_vht_cap vht_capa_mask; } ;
1786 struct cfg80211_pkt_pattern { u8 *mask; u8 *pattern; int pattern_len; int pkt_offset; } ;
1803 struct cfg80211_wowlan_tcp { struct socket *sock; __be32 src; __be32 dst; u16 src_port; u16 dst_port; u8 dst_mac[6U]; int payload_len; const u8 *payload; struct nl80211_wowlan_tcp_data_seq payload_seq; u32 data_interval; u32 wake_len; const u8 *wake_data; const u8 *wake_mask; u32 tokens_size; struct nl80211_wowlan_tcp_data_token payload_tok; } ;
1838 struct cfg80211_wowlan { bool any; bool disconnect; bool magic_pkt; bool gtk_rekey_failure; bool eap_identity_req; bool four_way_handshake; bool rfkill_release; struct cfg80211_pkt_pattern *patterns; struct cfg80211_wowlan_tcp *tcp; int n_patterns; } ;
2527 struct ieee80211_iface_limit { u16 max; u16 types; } ;
2588 struct ieee80211_iface_combination { const struct ieee80211_iface_limit *limits; u32 num_different_channels; u16 max_interfaces; u8 n_limits; bool beacon_int_infra_match; u8 radar_detect_widths; } ;
2654 struct ieee80211_txrx_stypes { u16 tx; u16 rx; } ;
2669 struct wiphy_wowlan_tcp_support { const struct nl80211_wowlan_tcp_data_token_feature *tok; u32 data_payload_max; u32 data_interval_max; u32 wake_payload_max; bool seq; } ;
2693 struct wiphy_wowlan_support { u32 flags; int n_patterns; int pattern_max_len; int pattern_min_len; int max_pkt_offset; const struct wiphy_wowlan_tcp_support *tcp; } ;
2712 struct wiphy_coalesce_support { int n_rules; int max_delay; int n_patterns; int pattern_max_len; int pattern_min_len; int max_pkt_offset; } ;
2737 struct wiphy_vendor_command { struct nl80211_vendor_cmd_info info; u32 flags; int (*doit)(struct wiphy *, struct wireless_dev *, const void *, int); } ;
2758 struct wiphy { u8 perm_addr[6U]; u8 addr_mask[6U]; struct mac_address *addresses; const struct ieee80211_txrx_stypes *mgmt_stypes; const struct ieee80211_iface_combination *iface_combinations; int n_iface_combinations; u16 software_iftypes; u16 n_addresses; u16 interface_modes; u16 max_acl_mac_addrs; u32 flags; u32 regulatory_flags; u32 features; u32 ap_sme_capa; enum cfg80211_signal_type signal_type; int bss_priv_size; u8 max_scan_ssids; u8 max_sched_scan_ssids; u8 max_match_sets; u16 max_scan_ie_len; u16 max_sched_scan_ie_len; int n_cipher_suites; const u32 *cipher_suites; u8 retry_short; u8 retry_long; u32 frag_threshold; u32 rts_threshold; u8 coverage_class; char fw_version[32U]; u32 hw_version; const struct wiphy_wowlan_support *wowlan; struct cfg80211_wowlan *wowlan_config; u16 max_remain_on_channel_duration; u8 max_num_pmkids; u32 available_antennas_tx; u32 available_antennas_rx; u32 probe_resp_offload; const u8 *extended_capabilities; const u8 *extended_capabilities_mask; u8 extended_capabilities_len; const void *privid; struct ieee80211_supported_band *bands[3U]; void (*reg_notifier)(struct wiphy *, struct regulatory_request *); const struct ieee80211_regdomain *regd; struct device dev; bool registered; struct dentry *debugfsdir; const struct ieee80211_ht_cap *ht_capa_mod_mask; const struct ieee80211_vht_cap *vht_capa_mod_mask; struct net *_net; const struct iw_handler_def *wext; const struct wiphy_coalesce_support *coalesce; const struct wiphy_vendor_command *vendor_commands; const struct nl80211_vendor_cmd_info *vendor_events; int n_vendor_commands; int n_vendor_events; char priv[0U]; } ;
3103 struct cfg80211_conn ;
3104 struct cfg80211_internal_bss ;
3105 struct cfg80211_cached_keys ;
3106 struct __anonstruct_wext_317 { struct cfg80211_ibss_params ibss; struct cfg80211_connect_params connect; struct cfg80211_cached_keys *keys; u8 *ie; size_t ie_len; u8 bssid[6U]; u8 prev_bssid[6U]; u8 ssid[32U]; s8 default_key; s8 default_mgmt_key; bool prev_bssid_valid; } ;
3106 struct wireless_dev { struct wiphy *wiphy; enum nl80211_iftype iftype; struct list_head list; struct net_device *netdev; u32 identifier; struct list_head mgmt_registrations; spinlock_t mgmt_registrations_lock; struct mutex mtx; bool use_4addr; bool p2p_started; u8 address[6U]; u8 ssid[32U]; u8 ssid_len; u8 mesh_id_len; u8 mesh_id_up_len; struct cfg80211_conn *conn; struct cfg80211_cached_keys *connect_keys; struct list_head event_list; spinlock_t event_lock; struct cfg80211_internal_bss *current_bss; struct cfg80211_chan_def preset_chandef; struct ieee80211_channel *channel; bool ibss_fixed; bool ibss_dfs_possible; bool ps; int ps_timeout; int beacon_interval; u32 ap_unexpected_nlportid; bool cac_started; unsigned long cac_start_time; struct __anonstruct_wext_317 wext; } ;
149 struct libipw_rx_stats { u32 mac_time; s8 rssi; u8 signal; u8 noise; u16 rate; u8 received_channel; u8 control; u8 mask; u8 freq; u16 len; u64 tsf; u32 beacon_time; } ;
241 struct libipw_frag_entry { unsigned long first_frag_time; unsigned int seq; unsigned int last_frag; struct sk_buff *skb; u8 src_addr[6U]; u8 dst_addr[6U]; } ;
256 struct libipw_stats { unsigned int tx_unicast_frames; unsigned int tx_multicast_frames; unsigned int tx_fragments; unsigned int tx_unicast_octets; unsigned int tx_multicast_octets; unsigned int tx_deferred_transmissions; unsigned int tx_single_retry_frames; unsigned int tx_multiple_retry_frames; unsigned int tx_retry_limit_exceeded; unsigned int tx_discards; unsigned int rx_unicast_frames; unsigned int rx_multicast_frames; unsigned int rx_fragments; unsigned int rx_unicast_octets; unsigned int rx_multicast_octets; unsigned int rx_fcs_errors; unsigned int rx_discards_no_buffer; unsigned int tx_discards_wrong_sa; unsigned int rx_discards_undecryptable; unsigned int rx_message_in_msg_fragments; unsigned int rx_message_in_bad_msg_fragments; } ;
280 struct libipw_security { unsigned char active_key; unsigned char enabled; unsigned char unicast_uses_group; unsigned char encrypt; u8 auth_mode; u8 encode_alg[4U]; u8 key_sizes[4U]; u8 keys[4U][32U]; u8 level; u16 flags; } ;
351 struct libipw_hdr_3addr { __le16 frame_ctl; __le16 duration_id; u8 addr1[6U]; u8 addr2[6U]; u8 addr3[6U]; __le16 seq_ctl; u8 payload[0U]; } ;
361 struct libipw_hdr_4addr { __le16 frame_ctl; __le16 duration_id; u8 addr1[6U]; u8 addr2[6U]; u8 addr3[6U]; __le16 seq_ctl; u8 addr4[6U]; u8 payload[0U]; } ;
383 struct libipw_info_element { u8 id; u8 len; u8 data[0U]; } ;
389 struct libipw_auth { struct libipw_hdr_3addr header; __le16 algorithm; __le16 transaction; __le16 status; struct libipw_info_element info_element[0U]; } ;
415 struct libipw_channel_switch { u8 id; u8 len; u8 mode; u8 channel; u8 count; } ;
423 struct libipw_action_exchange { u8 token; struct libipw_info_element info_element[0U]; } ;
433 union __anonunion_format_318 { struct libipw_action_exchange exchange; struct libipw_channel_switch channel_switch; } ;
433 struct libipw_action { struct libipw_hdr_3addr header; u8 category; u8 action; union __anonunion_format_318 format; } ;
437 struct libipw_disassoc { struct libipw_hdr_3addr header; __le16 reason; } ;
442 struct libipw_probe_request { struct libipw_hdr_3addr header; struct libipw_info_element info_element[0U]; } ;
451 struct libipw_probe_response { struct libipw_hdr_3addr header; __le32 time_stamp[2U]; __le16 beacon_interval; __le16 capability; struct libipw_info_element info_element[0U]; } ;
472 struct libipw_reassoc_request { struct libipw_hdr_3addr header; __le16 capability; __le16 listen_interval; u8 current_ap[6U]; struct libipw_info_element info_element[0U]; } ;
480 struct libipw_assoc_response { struct libipw_hdr_3addr header; __le16 capability; __le16 status; __le16 aid; struct libipw_info_element info_element[0U]; } ;
489 struct libipw_txb { u8 nr_frags; u8 encrypted; u8 rts_included; u8 reserved; u16 frag_size; u16 payload_size; struct sk_buff *fragments[0U]; } ;
563 struct libipw_qos_parameters { __le16 cw_min[4U]; __le16 cw_max[4U]; u8 aifs[4U]; u8 flag[4U]; __le16 tx_op_limit[4U]; } ;
571 struct libipw_qos_data { struct libipw_qos_parameters parameters; int active; int supported; u8 param_count; u8 old_param_count; } ;
579 struct libipw_tim_parameters { u8 tim_count; u8 tim_period; } ;
584 struct libipw_tpc_report { u8 transmit_power; u8 link_margin; } ;
591 struct libipw_channel_map { u8 channel; u8 map; } ;
596 struct libipw_ibss_dfs { struct libipw_info_element ie; u8 owner[6U]; u8 recovery_interval; struct libipw_channel_map channel_map[0U]; } ;
603 struct libipw_csa { u8 mode; u8 channel; u8 count; } ;
609 struct libipw_quiet { u8 count; u8 period; u8 duration; u8 offset; } ;
616 struct libipw_network { u8 bssid[6U]; u8 channel; u8 ssid[33U]; u8 ssid_len; struct libipw_qos_data qos_data; struct libipw_rx_stats stats; u16 capability; u8 rates[12U]; u8 rates_len; u8 rates_ex[16U]; u8 rates_ex_len; unsigned long last_scanned; u8 mode; u32 flags; u32 last_associate; u32 time_stamp[2U]; u16 beacon_interval; u16 listen_interval; u16 atim_window; u8 erp_value; u8 wpa_ie[64U]; size_t wpa_ie_len; u8 rsn_ie[64U]; size_t rsn_ie_len; struct libipw_tim_parameters tim; u8 power_constraint; struct libipw_tpc_report tpc_report; struct libipw_ibss_dfs *ibss_dfs; struct libipw_csa csa; struct libipw_quiet quiet; struct list_head list; } ;
669 enum libipw_state { LIBIPW_UNINITIALIZED = 0, LIBIPW_INITIALIZED = 1, LIBIPW_ASSOCIATING = 2, LIBIPW_ASSOCIATED = 3, LIBIPW_AUTHENTICATING = 4, LIBIPW_AUTHENTICATED = 5, LIBIPW_SHUTDOWN = 6 } ;
689 struct libipw_channel { u32 freq; u8 channel; u8 flags; u8 max_power; } ;
713 struct libipw_geo { u8 name[4U]; u8 bg_channels; u8 a_channels; struct libipw_channel bg[14U]; struct libipw_channel a[132U]; } ;
721 struct libipw_device { struct net_device *dev; struct wireless_dev wdev; struct libipw_security sec; struct libipw_stats ieee_stats; struct libipw_geo geo; struct ieee80211_supported_band bg_band; struct ieee80211_supported_band a_band; struct list_head network_free_list; struct list_head network_list; struct libipw_network *networks[128U]; int scans; int scan_age; int iw_mode; struct iw_spy_data spy_data; spinlock_t lock; int tx_headroom; u32 config; int open_wep; int host_encrypt; int host_encrypt_msdu; int host_decrypt; int host_mc_decrypt; int host_strip_iv_icv; int host_open_frag; int ieee802_1x; int wpa_enabled; int drop_unencrypted; int privacy_invoked; size_t wpa_ie_len; u8 *wpa_ie; struct lib80211_crypt_info crypt_info; int bcrx_sta_key; struct libipw_frag_entry frag_cache[4U]; unsigned int frag_next_idx; u16 fts; u16 rts; u8 bssid[6U]; enum libipw_state state; int mode; int modulation; int freq_band; int abg_true; int perfect_rssi; int worst_rssi; u16 prev_seq_ctl; void (*set_security)(struct net_device *, struct libipw_security *); netdev_tx_t (*hard_start_xmit)(struct libipw_txb *, struct net_device *, int); int (*is_queue_full)(struct net_device *, int); int (*handle_management)(struct net_device *, struct libipw_network *, u16 ); int (*is_qos_active)(struct net_device *, struct sk_buff *); int (*handle_auth)(struct net_device *, struct libipw_auth *); int (*handle_deauth)(struct net_device *, struct libipw_disassoc *); int (*handle_action)(struct net_device *, struct libipw_action *, struct libipw_rx_stats *); int (*handle_disassoc)(struct net_device *, struct libipw_disassoc *); int (*handle_beacon)(struct net_device *, struct libipw_probe_response *, struct libipw_network *); int (*handle_probe_response)(struct net_device *, struct libipw_probe_response *, struct libipw_network *); int (*handle_probe_request)(struct net_device *, struct libipw_probe_request *, struct libipw_rx_stats *); int (*handle_assoc_response)(struct net_device *, struct libipw_assoc_response *, struct libipw_network *); int (*handle_assoc_request)(struct net_device *); int (*handle_reassoc_request)(struct net_device *, struct libipw_reassoc_request *); u8 priv[0U]; } ;
1012 struct ipw2100_priv ;
1013 struct ipw2100_tx_packet ;
1014 struct ipw2100_rx_packet ;
140 struct __anonstruct_fields_320 { unsigned char nlf; unsigned char txType; unsigned char intEnabled; unsigned char reserved; } ;
140 union __anonunion_info_319 { struct __anonstruct_fields_320 fields; u8 field; } ;
140 struct bd_status { union __anonunion_info_319 info; } ;
159 struct ipw2100_bd { u32 host_addr; u32 buf_length; struct bd_status status; u8 num_fragments; u8 reserved[6U]; } ;
169 struct ipw2100_bd_queue { struct ipw2100_bd *drv; dma_addr_t nic; u32 size; u32 entries; u32 available; u32 oldest; u32 next; } ;
202 struct ipw2100_status { u32 frame_size; u16 status_fields; u8 flags; u8 rssi; } ;
227 struct ipw2100_status_queue { struct ipw2100_status *drv; dma_addr_t nic; u32 size; } ;
238 struct __anonstruct_fixed_ies_321 { u16 capab_info; u16 listen_interval; u8 current_ap[6U]; } ;
238 struct ipw2100_wpa_assoc_frame { u16 fixed_ie_mask; struct __anonstruct_fixed_ies_321 fixed_ies; u32 var_ie_len; u8 var_ie[384U]; } ;
258 struct ipw2100_cmd_header { u32 host_command_reg; u32 host_command_reg1; u32 sequence; u32 host_command_len_reg; u32 host_command_params_reg[100U]; u32 cmd_status_reg; u32 cmd_status_params_reg[3U]; u32 rxq_base_ptr; u32 rxq_next_ptr; u32 rxq_host_ptr; u32 txq_base_ptr; u32 txq_next_ptr; u32 txq_host_ptr; u32 tx_status_reg; u32 reserved; u32 status_change_reg; u32 reserved1[3U]; u32 *ordinal1_ptr; u32 *ordinal2_ptr; } ;
288 struct ipw2100_data_header { u32 host_command_reg; u32 host_command_reg1; u8 encrypted; u8 needs_encryption; u8 wep_index; u8 key_size; u8 key[16U]; u8 reserved[10U]; u8 src_addr[6U]; u8 dst_addr[6U]; u16 fragment_size; } ;
302 struct host_command { u32 host_command; u32 host_command1; u32 host_command_sequence; u32 host_command_length; u32 host_command_parameters[100U]; } ;
325 struct __anonstruct_c_struct_323 { struct ipw2100_cmd_header *cmd; dma_addr_t cmd_phys; } ;
325 struct __anonstruct_d_struct_324 { struct ipw2100_data_header *data; dma_addr_t data_phys; struct libipw_txb *txb; } ;
325 union __anonunion_info_322 { struct __anonstruct_c_struct_323 c_struct; struct __anonstruct_d_struct_324 d_struct; } ;
325 struct ipw2100_tx_packet { int type; int index; union __anonunion_info_322 info; int jiffy_start; struct list_head list; } ;
344 struct ipw2100_rx ;
344 struct ipw2100_rx_packet { struct ipw2100_rx *rxp; dma_addr_t dma_addr; int jiffy_start; struct sk_buff *skb; struct list_head list; } ;
352 struct ipw2100_ordinals { u32 table1_addr; u32 table2_addr; u32 table1_size; u32 table2_size; } ;
369 struct ipw2100_notification { u32 hnhdr_subtype; u32 hnhdr_size; } ;
375 struct statistic { int value; int hi; int lo; } ;
406 struct ipw2100_priv { void *ioaddr; int stop_hang_check; int stop_rf_kill; struct libipw_device *ieee; unsigned long status; unsigned long config; unsigned long capability; int resets; int reset_backoff; u8 essid[32U]; u8 essid_len; u8 bssid[6U]; u8 channel; int last_mode; unsigned long connect_start; unsigned long last_reset; u32 channel_mask; u32 fatal_error; u32 fatal_errors[5U]; u32 fatal_index; int eeprom_version; int firmware_version; unsigned long hw_features; int hangs; u32 last_rtc; int dump_raw; u8 *snapshot[48U]; u8 mandatory_bssid_mac[6U]; u8 mac_addr[6U]; int power_mode; int messages_sent; int short_retry_limit; int long_retry_limit; u32 rts_threshold; u32 frag_threshold; int in_isr; u32 tx_rates; int tx_power; u32 beacon_interval; char nick[33U]; struct ipw2100_status_queue status_queue; struct statistic txq_stat; struct statistic rxq_stat; struct ipw2100_bd_queue rx_queue; struct ipw2100_bd_queue tx_queue; struct ipw2100_rx_packet *rx_buffers; struct statistic fw_pend_stat; struct list_head fw_pend_list; struct statistic msg_free_stat; struct statistic msg_pend_stat; struct list_head msg_free_list; struct list_head msg_pend_list; struct ipw2100_tx_packet *msg_buffers; struct statistic tx_free_stat; struct statistic tx_pend_stat; struct list_head tx_free_list; struct list_head tx_pend_list; struct ipw2100_tx_packet *tx_buffers; struct ipw2100_ordinals ordinals; struct pci_dev *pci_dev; struct proc_dir_entry *dir_dev; struct net_device *net_dev; struct iw_statistics wstats; struct iw_public_data wireless_data; struct tasklet_struct irq_tasklet; struct delayed_work reset_work; struct delayed_work security_work; struct delayed_work wx_event_work; struct delayed_work hang_check; struct delayed_work rf_kill; struct delayed_work scan_event; int user_requested_scan; unsigned long suspend_at; unsigned long suspend_time; u32 interrupts; int tx_interrupts; int rx_interrupts; int inta_other; spinlock_t low_lock; struct mutex action_mutex; struct mutex adapter_mutex; wait_queue_head_t wait_command_queue; } ;
599 union __anonunion_rx_data_325 { unsigned char payload[2340U]; struct libipw_hdr_4addr header; u32 status; struct ipw2100_notification notification; struct ipw2100_cmd_header command; } ;
599 struct ipw2100_rx { union __anonunion_rx_data_325 rx_data; } ;
1141 struct ipw2100_fw_chunk_set { const void *data; unsigned long size; } ;
1146 struct ipw2100_fw { int version; struct ipw2100_fw_chunk_set fw; struct ipw2100_fw_chunk_set uc; const struct firmware *fw_entry; } ;
2212 struct ipw2100_status_indicator { int status; void (*cb)(struct ipw2100_priv *, u32 ); char *name; } ;
2547 struct ipw_rt_hdr { struct ieee80211_radiotap_header rt_hdr; s8 rt_dbmsignal; } ;
3574 struct __anonstruct_hw_data_330 { u32 addr; const char *name; } ;
3584 struct __anonstruct_nic_data_331 { u32 addr; const char *name; size_t size; } ;
3592 struct __anonstruct_ord_data_332 { u8 index; const char *name; const char *desc; } ;
5173 struct security_info_params { u32 allowed_ciphers; u16 version; u8 auth_mode; u8 replay_counters_number; u8 unicast_using_group; } ;
5370 struct ipw2100_wep_key { u8 idx; u8 len; u8 key[13U]; } ;
8345 struct ipw2100_fw_header { short version; short mode; unsigned int fw_size; unsigned int uc_size; } ;
8529 struct symbol_alive_response { u8 cmd_id; u8 seq_num; u8 ucode_rev; u8 eeprom_valid; u16 valid_flags; u8 IEEE_addr[6U]; u16 flags; u16 pcb_rev; u16 clock_settle_time; u16 powerup_settle_time; u16 hop_settle_time; u8 date[3U]; u8 time[2U]; u8 ucode_valid; } ;
38 typedef int Set;
1 long int __builtin_expect(long, long);
1 void * __builtin_memcpy(void *, const void *, unsigned long);
7 dma_addr_t ldv_dma_map_single_attrs(struct device *dev, void *ptr, size_t size, enum dma_data_direction dir, struct dma_attrs *attrs);
33 extern struct module __this_module;
358 extern struct pv_irq_ops pv_irq_ops;
71 void set_bit(long nr, volatile unsigned long *addr);
109 void clear_bit(long nr, volatile unsigned long *addr);
206 int test_and_set_bit(long nr, volatile unsigned long *addr);
252 int test_and_clear_bit(long nr, volatile unsigned long *addr);
310 int constant_test_bit(long nr, const volatile unsigned long *addr);
132 int printk(const char *, ...);
253 int kstrtoull(const char *, unsigned int, unsigned long long *);
272 int kstrtoul(const char *s, unsigned int base, unsigned long *res);
314 int kstrtouint(const char *, unsigned int, unsigned int *);
327 int kstrtou32(const char *s, unsigned int base, u32 *res);
388 int sprintf(char *, const char *, ...);
391 int snprintf(char *, size_t , const char *, ...);
24 void INIT_LIST_HEAD(struct list_head *list);
47 void __list_add(struct list_head *, struct list_head *, struct list_head *);
74 void list_add_tail(struct list_head *new, struct list_head *head);
112 void list_del(struct list_head *);
186 int list_empty(const struct list_head *head);
88 void __bad_percpu_size();
71 void warn_slowpath_null(const char *, const int);
34 void * __memcpy(void *, const void *, size_t );
55 void * memset(void *, int, size_t );
58 void * memmove(void *, const void *, size_t );
60 int memcmp(const void *, const void *, size_t );
61 size_t strlen(const char *);
62 char * strcpy(char *, const char *);
26 size_t strlcpy(char *, const char *, size_t );
80 __kernel_size_t strnlen(const char *, __kernel_size_t );
117 void * kmemdup(const void *, size_t , gfp_t );
802 unsigned long int arch_local_save_flags();
155 int arch_irqs_disabled_flags(unsigned long flags);
8 extern int __preempt_count;
20 int preempt_count();
279 void lockdep_init_map(struct lockdep_map *, const char *, struct lock_class_key *, int);
93 void __raw_spin_lock_init(raw_spinlock_t *, const char *, struct lock_class_key *);
22 void _raw_spin_lock(raw_spinlock_t *);
32 unsigned long int _raw_spin_lock_irqsave(raw_spinlock_t *);
39 void _raw_spin_unlock(raw_spinlock_t *);
43 void _raw_spin_unlock_irqrestore(raw_spinlock_t *, unsigned long);
290 raw_spinlock_t * spinlock_check(spinlock_t *lock);
301 void spin_lock(spinlock_t *lock);
341 void spin_unlock(spinlock_t *lock);
356 void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags);
68 void __init_waitqueue_head(wait_queue_head_t *, const char *, struct lock_class_key *);
144 void __wake_up(wait_queue_head_t *, unsigned int, int, void *);
822 long int prepare_to_wait_event(wait_queue_head_t *, wait_queue_t *, int);
823 void finish_wait(wait_queue_head_t *, wait_queue_t *);
119 void __mutex_init(struct mutex *, const char *, struct lock_class_key *);
138 void mutex_lock_nested(struct mutex *, unsigned int);
174 void mutex_unlock(struct mutex *);
132 unsigned long int get_seconds();
77 extern volatile unsigned long jiffies;
303 unsigned long int msecs_to_jiffies(const unsigned int);
94 void init_timer_key(struct timer_list *, unsigned int, const char *, struct lock_class_key *);
260 unsigned long int round_jiffies_relative(unsigned long);
20 void delayed_work_timer_fn(unsigned long);
192 void __init_work(struct work_struct *, int);
375 extern struct workqueue_struct *system_wq;
466 bool queue_delayed_work_on(int, struct workqueue_struct *, struct delayed_work *, unsigned long);
468 bool mod_delayed_work_on(int, struct workqueue_struct *, struct delayed_work *, unsigned long);
483 bool cancel_delayed_work(struct delayed_work *);
484 bool cancel_delayed_work_sync(struct delayed_work *);
518 bool queue_delayed_work(struct workqueue_struct *wq, struct delayed_work *dwork, unsigned long delay);
533 bool mod_delayed_work(struct workqueue_struct *wq, struct delayed_work *dwork, unsigned long delay);
591 bool schedule_delayed_work(struct delayed_work *dwork, unsigned long delay);
55 unsigned int readl(const volatile void *addr);
28 unsigned int ioread8(void *);
29 unsigned int ioread16(void *);
31 unsigned int ioread32(void *);
34 void iowrite8(u8 , void *);
35 void iowrite16(u16 , void *);
37 void iowrite32(u32 , void *);
72 void pci_iounmap(struct pci_dev *, void *);
17 void * pci_iomap(struct pci_dev *, int, unsigned long);
142 void kfree(const void *);
302 void * __kmalloc(size_t , gfp_t );
222 int sysfs_create_group(struct kobject *, const struct attribute_group *);
228 void sysfs_remove_group(struct kobject *, const struct attribute_group *);
84 const char * kobject_name(const struct kobject *kobj);
441 void * kmalloc(size_t size, gfp_t flags);
560 void * kmalloc_array(size_t n, size_t size, gfp_t flags);
573 void * kcalloc(size_t n, size_t size, gfp_t flags);
280 int driver_create_file(struct device_driver *, const struct driver_attribute *);
282 void driver_remove_file(struct device_driver *, const struct driver_attribute *);
798 const char * dev_name(const struct device *dev);
913 void * dev_get_drvdata(const struct device *);
914 int dev_set_drvdata(struct device *, void *);
63 int valid_dma_direction(int dma_direction);
70 int is_device_dma_capable(struct device *dev);
44 void debug_dma_unmap_page(struct device *, dma_addr_t , size_t , int, bool );
53 void debug_dma_alloc_coherent(struct device *, size_t , dma_addr_t , void *);
56 void debug_dma_free_coherent(struct device *, size_t , void *, dma_addr_t );
59 void debug_dma_sync_single_for_cpu(struct device *, dma_addr_t , size_t , int);
63 void debug_dma_sync_single_for_device(struct device *, dma_addr_t , size_t , int);
27 extern struct device x86_dma_fallback_dev;
30 extern struct dma_map_ops *dma_ops;
32 struct dma_map_ops * get_dma_ops(struct device *dev);
32 dma_addr_t ldv_dma_map_single_attrs_2(struct device *dev, void *ptr, size_t size, enum dma_data_direction dir, struct dma_attrs *attrs);
33 void dma_unmap_single_attrs(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir, struct dma_attrs *attrs);
109 void dma_sync_single_for_cpu(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir);
121 void dma_sync_single_for_device(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir);
65 int dma_set_mask(struct device *, u64 );
107 unsigned long int dma_alloc_coherent_mask(struct device *dev, gfp_t gfp);
119 gfp_t dma_alloc_coherent_gfp_flags(struct device *dev, gfp_t gfp);
135 void * dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp, struct dma_attrs *attrs);
164 void dma_free_attrs(struct device *dev, size_t size, void *vaddr, dma_addr_t bus, struct dma_attrs *attrs);
654 void consume_skb(struct sk_buff *);
1369 bool skb_is_nonlinear(const struct sk_buff *skb);
1494 unsigned char * skb_put(struct sk_buff *, unsigned int);
1567 int skb_tailroom(const struct sk_buff *skb);
1933 struct sk_buff * __netdev_alloc_skb(struct net_device *, unsigned int, gfp_t );
1949 struct sk_buff * netdev_alloc_skb(struct net_device *dev, unsigned int length);
1963 struct sk_buff * dev_alloc_skb(unsigned int length);
2504 void skb_copy_from_linear_data(const struct sk_buff *skb, void *to, const unsigned int len);
113 void pm_qos_add_request(struct pm_qos_request *, int, s32 );
115 void pm_qos_update_request(struct pm_qos_request *, s32 );
119 void pm_qos_remove_request(struct pm_qos_request *);
10 void __const_udelay(unsigned long);
372 long int schedule_timeout(long);
375 long int schedule_timeout_uninterruptible(long);
1537 struct netdev_queue * netdev_get_tx_queue(const struct net_device *dev, unsigned int index);
1603 void * netdev_priv(const struct net_device *dev);
1888 int netpoll_trap();
2050 void __netif_schedule(struct Qdisc *);
2066 void netif_tx_start_queue(struct netdev_queue *dev_queue);
2077 void netif_start_queue(struct net_device *dev);
2092 void netif_tx_wake_queue(struct netdev_queue *dev_queue);
2111 void netif_wake_queue(struct net_device *dev);
2126 void netif_tx_stop_queue(struct netdev_queue *dev_queue);
2142 void netif_stop_queue(struct net_device *dev);
2307 bool netif_running(const struct net_device *dev);
2472 void __dev_kfree_skb_any(struct sk_buff *, enum skb_free_reason );
2503 void dev_kfree_skb_any(struct sk_buff *skb);
2610 void netif_carrier_on(struct net_device *);
2612 void netif_carrier_off(struct net_device *);
2680 void netif_device_detach(struct net_device *);
2682 void netif_device_attach(struct net_device *);
2903 int register_netdev(struct net_device *);
2904 void unregister_netdev(struct net_device *);
824 int pci_bus_read_config_dword(struct pci_bus *, unsigned int, int, u32 *);
830 int pci_bus_write_config_dword(struct pci_bus *, unsigned int, int, u32 );
842 int pci_read_config_dword(const struct pci_dev *dev, int where, u32 *val);
855 int pci_write_config_dword(const struct pci_dev *dev, int where, u32 val);
902 int pci_enable_device(struct pci_dev *);
919 void pci_disable_device(struct pci_dev *);
922 void pci_set_master(struct pci_dev *);
975 int pci_save_state(struct pci_dev *);
976 void pci_restore_state(struct pci_dev *);
987 int pci_set_power_state(struct pci_dev *, pci_power_t );
1040 int pci_request_regions(struct pci_dev *, const char *);
1042 void pci_release_regions(struct pci_dev *);
1085 int __pci_register_driver(struct pci_driver *, struct module *, const char *);
1094 void pci_unregister_driver(struct pci_driver *);
16 void * pci_alloc_consistent(struct pci_dev *hwdev, size_t size, dma_addr_t *dma_handle);
23 void pci_free_consistent(struct pci_dev *hwdev, size_t size, void *vaddr, dma_addr_t dma_handle);
30 dma_addr_t pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size, int direction);
36 void pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr, size_t size, int direction);
71 void pci_dma_sync_single_for_cpu(struct pci_dev *hwdev, dma_addr_t dma_handle, size_t size, int direction);
78 void pci_dma_sync_single_for_device(struct pci_dev *hwdev, dma_addr_t dma_handle, size_t size, int direction);
105 int pci_set_dma_mask(struct pci_dev *dev, u64 mask);
1407 void * pci_get_drvdata(struct pci_dev *pdev);
1412 void pci_set_drvdata(struct pci_dev *pdev, void *data);
1420 const char * pci_name(const struct pci_dev *pdev);
42 int request_firmware(const struct firmware **, const char *, struct device *);
49 void release_firmware(const struct firmware *);
18 extern const unsigned char _ctype[];
38 unsigned char __tolower(unsigned char c);
37 const char * print_ssid(char *, const char *, u8 );
123 int request_threaded_irq(unsigned int, irqreturn_t (*)(int, void *), irqreturn_t (*)(int, void *), unsigned long, const char *, void *);
128 int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *), unsigned long flags, const char *name, void *dev);
142 void free_irq(unsigned int, void *);
469 void __tasklet_schedule(struct tasklet_struct *);
471 void tasklet_schedule(struct tasklet_struct *t);
527 void tasklet_init(struct tasklet_struct *, void (*)(unsigned long), unsigned long);
47 int eth_validate_addr(struct net_device *);
89 bool is_zero_ether_addr(const u8 *addr);
107 bool is_multicast_ether_addr(const u8 *addr);
131 bool is_broadcast_ether_addr(const u8 *addr);
160 bool is_valid_ether_addr(const u8 *addr);
440 void wireless_send_event(struct net_device *, unsigned int, union iwreq_data *, const char *);
3036 void set_wiphy_dev(struct wiphy *wiphy, struct device *dev);
3084 int wiphy_register(struct wiphy *);
3095 void wiphy_unregister(struct wiphy *);
3925 void wiphy_rfkill_set_hw_state(struct wiphy *, bool );
849 void * libipw_priv(struct net_device *dev);
953 void free_libipw(struct net_device *, int);
954 struct net_device * alloc_libipw(int, int);
955 int libipw_change_mtu(struct net_device *, int);
957 void libipw_networks_age(struct libipw_device *, unsigned long);
962 netdev_tx_t libipw_xmit(struct sk_buff *, struct net_device *);
963 void libipw_txb_free(struct libipw_txb *);
968 int libipw_rx(struct libipw_device *, struct sk_buff *, struct libipw_rx_stats *);
971 void libipw_rx_mgt(struct libipw_device *, struct libipw_hdr_4addr *, struct libipw_rx_stats *);
976 const struct libipw_geo * libipw_get_geo(struct libipw_device *);
977 void libipw_set_geo(struct libipw_device *, const struct libipw_geo *);
988 int libipw_wx_get_scan(struct libipw_device *, struct iw_request_info *, union iwreq_data *, char *);
990 int libipw_wx_set_encode(struct libipw_device *, struct iw_request_info *, union iwreq_data *, char *);
993 int libipw_wx_get_encode(struct libipw_device *, struct iw_request_info *, union iwreq_data *, char *);
996 int libipw_wx_set_encodeext(struct libipw_device *, struct iw_request_info *, union iwreq_data *, char *);
999 int libipw_wx_get_encodeext(struct libipw_device *, struct iw_request_info *, union iwreq_data *, char *);
16 const u32 ipw_cipher_suites[4U] = { 1027073U, 1027077U, 1027074U, 1027076U };
179 struct pm_qos_request ipw2100_pm_qos_req = { };
191 int debug = 0;
192 int network_mode = 0;
193 int channel = 0;
194 int associate = 0;
195 int disable = 0;
197 struct ipw2100_fw ipw2100_firmware = { };
213 unsigned int ipw2100_debug_level = 0U;
229 const char *command_types[70U] = { "undefined", "unused", "HOST_COMPLETE", "unused", "unused", "unused", "SYSTEM_CONFIG", "unused", "SSID", "MANDATORY_BSSID", "AUTHENTICATION_TYPE", "ADAPTER_ADDRESS", "PORT_TYPE", "INTERNATIONAL_MODE", "CHANNEL", "RTS_THRESHOLD", "FRAG_THRESHOLD", "POWER_MODE", "TX_RATES", "BASIC_TX_RATES", "WEP_KEY_INFO", "unused", "unused", "unused", "unused", "WEP_KEY_INDEX", "WEP_FLAGS", "ADD_MULTICAST", "CLEAR_ALL_MULTICAST", "BEACON_INTERVAL", "ATIM_WINDOW", "CLEAR_STATISTICS", "undefined", "undefined", "undefined", "undefined", "TX_POWER_INDEX", "undefined", "undefined", "undefined", "undefined", "undefined", "undefined", "BROADCAST_SCAN", "CARD_DISABLE", "PREFERRED_BSSID", "SET_SCAN_OPTIONS", "SCAN_DWELL_TIME", "SWEEP_TABLE", "AP_OR_STATION_TABLE", "GROUP_ORDINALS", "SHORT_RETRY_LIMIT", "LONG_RETRY_LIMIT", "unused", "unused", "undefined", "undefined", "undefined", "HOST_PRE_POWER_DOWN", "unused", "undefined", "CARD_DISABLE_PHY_OFF", "MSDU_TX_RATES", "undefined", "SET_STATION_STAT_BITS", "CLEAR_STATIONS_STAT_BITS", "LEAP_ROGUE_MODE", "SET_SECURITY_INFORMATION", "DISASSOCIATION_BSSID", "SET_WPA_ASS_IE" };
303 const long ipw2100_frequencies[14U] = { 2412L, 2417L, 2422L, 2427L, 2432L, 2437L, 2442L, 2447L, 2452L, 2457L, 2462L, 2467L, 2472L, 2484L };
312 struct ieee80211_rate ipw2100_bg_rates[4U] = { { 0U, 10U, (unsigned short)0, (unsigned short)0 }, { 1U, 20U, (unsigned short)0, (unsigned short)0 }, { 1U, 55U, (unsigned short)0, (unsigned short)0 }, { 1U, 110U, (unsigned short)0, (unsigned short)0 } };
322 void ipw2100_tx_send_commands(struct ipw2100_priv *priv);
323 void ipw2100_tx_send_data(struct ipw2100_priv *priv);
324 int ipw2100_adapter_setup(struct ipw2100_priv *priv);
326 void ipw2100_queues_initialize(struct ipw2100_priv *priv);
327 void ipw2100_queues_free(struct ipw2100_priv *priv);
328 int ipw2100_queues_allocate(struct ipw2100_priv *priv);
330 int ipw2100_fw_download(struct ipw2100_priv *priv, struct ipw2100_fw *fw);
332 int ipw2100_get_firmware(struct ipw2100_priv *priv, struct ipw2100_fw *fw);
334 int ipw2100_get_fwversion(struct ipw2100_priv *priv, char *buf, size_t max);
336 int ipw2100_get_ucodeversion(struct ipw2100_priv *priv, char *buf, size_t max);
338 void ipw2100_release_firmware(struct ipw2100_priv *priv, struct ipw2100_fw *fw);
340 int ipw2100_ucode_download(struct ipw2100_priv *priv, struct ipw2100_fw *fw);
342 void ipw2100_wx_event_work(struct work_struct *work);
343 struct iw_statistics * ipw2100_wx_wireless_stats(struct net_device *dev);
344 struct iw_handler_def ipw2100_wx_handler_def;
346 void read_register(struct net_device *dev, u32 reg, u32 *val);
354 void write_register(struct net_device *dev, u32 reg, u32 val);
362 void read_register_word(struct net_device *dev, u32 reg, u16 *val);
371 void read_register_byte(struct net_device *dev, u32 reg, u8 *val);
379 void write_register_word(struct net_device *dev, u32 reg, u16 val);
387 void write_register_byte(struct net_device *dev, u32 reg, u8 val);
395 void read_nic_dword(struct net_device *dev, u32 addr, u32 *val);
402 void write_nic_dword(struct net_device *dev, u32 addr, u32 val);
409 void read_nic_word(struct net_device *dev, u32 addr, u16 *val);
416 void write_nic_word(struct net_device *dev, u32 addr, u16 val);
423 void read_nic_byte(struct net_device *dev, u32 addr, u8 *val);
430 void write_nic_byte(struct net_device *dev, u32 addr, u8 val);
448 void write_nic_memory(struct net_device *dev, u32 addr, u32 len, const u8 *buf);
486 void read_nic_memory(struct net_device *dev, u32 addr, u32 len, u8 *buf);
523 bool ipw2100_hw_is_adapter_in_system(struct net_device *dev);
532 int ipw2100_get_ordinal(struct ipw2100_priv *priv, u32 ord, void *val, u32 *len);
611 int ipw2100_set_ordinal(struct ipw2100_priv *priv, u32 ord, u32 *val, u32 *len);
641 char * snprint_line(char *buf, size_t count, const u8 *data, u32 len, u32 ofs);
676 void printk_buf(int level, const u8 *data, u32 len);
694 void schedule_reset(struct ipw2100_priv *priv);
730 int ipw2100_hw_send_command(struct ipw2100_priv *priv, struct host_command *cmd);
848 int ipw2100_verify(struct ipw2100_priv *priv);
892 int ipw2100_wait_for_card_state(struct ipw2100_priv *priv, int state);
935 int sw_reset_and_clock(struct ipw2100_priv *priv);
994 int ipw2100_download_firmware(struct ipw2100_priv *priv);
1117 void ipw2100_enable_interrupts(struct ipw2100_priv *priv);
1125 void ipw2100_disable_interrupts(struct ipw2100_priv *priv);
1133 void ipw2100_initialize_ordinals(struct ipw2100_priv *priv);
1155 void ipw2100_hw_set_gpio(struct ipw2100_priv *priv);
1167 int rf_kill_active(struct ipw2100_priv *priv);
1199 int ipw2100_get_hw_features(struct ipw2100_priv *priv);
1247 int ipw2100_start_adapter(struct ipw2100_priv *priv);
1347 void ipw2100_reset_fatalerror(struct ipw2100_priv *priv);
1358 int ipw2100_power_cycle_adapter(struct ipw2100_priv *priv);
1411 int ipw2100_hw_phy_off(struct ipw2100_priv *priv);
1445 int ipw2100_enable_adapter(struct ipw2100_priv *priv);
1489 int ipw2100_hw_stop_adapter(struct ipw2100_priv *priv);
1595 int ipw2100_disable_adapter(struct ipw2100_priv *priv);
1640 int ipw2100_set_scan_options(struct ipw2100_priv *priv);
1672 int ipw2100_start_scan(struct ipw2100_priv *priv);
1713 const struct libipw_geo ipw_geos[1U] = { { { '-', '-', '-', '\x0' }, 14U, 0U, { { 2412U, 1U, 0U, 0U }, { 2417U, 2U, 0U, 0U }, { 2422U, 3U, 0U, 0U }, { 2427U, 4U, 0U, 0U }, { 2432U, 5U, 0U, 0U }, { 2437U, 6U, 0U, 0U }, { 2442U, 7U, 0U, 0U }, { 2447U, 8U, 0U, 0U }, { 2452U, 9U, 0U, 0U }, { 2457U, 10U, 0U, 0U }, { 2462U, 11U, 0U, 0U }, { 2467U, 12U, 0U, 0U }, { 2472U, 13U, 0U, 0U }, { 2484U, 14U, 0U, 0U } }, { { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U }, { 0U, 0U, 0U, 0U } } } };
1725 int ipw2100_up(struct ipw2100_priv *priv, int deferred);
1851 void ipw2100_down(struct ipw2100_priv *priv);
1904 int ipw2100_wdev_init(struct net_device *dev);
1961 void ipw2100_reset_adapter(struct work_struct *work);
1998 void isr_indicate_associated(struct ipw2100_priv *priv, u32 status);
2089 int ipw2100_set_essid(struct ipw2100_priv *priv, char *essid, int length, int batch_mode);
2140 void isr_indicate_association_lost(struct ipw2100_priv *priv, u32 status);
2171 void isr_indicate_rf_kill(struct ipw2100_priv *priv, u32 status);
2185 void ipw2100_scan_event(struct work_struct *work);
2196 void isr_scan_complete(struct ipw2100_priv *priv, u32 status);
2228 void isr_indicate_scanning(struct ipw2100_priv *priv, u32 status);
2234 const struct ipw2100_status_indicator status_handlers[13U] = { { 1, (void (*)(struct ipw2100_priv *, u32 ))0, (char *)"IPW_STATE_INITIALIZED" }, { 2, (void (*)(struct ipw2100_priv *, u32 ))0, (char *)"IPW_STATE_COUNTRY_FOUND" }, { 4, &isr_indicate_associated, (char *)"IPW_STATE_ASSOCIATED" }, { 8, &isr_indicate_association_lost, (char *)"IPW_STATE_ASSN_LOST" }, { 16, (void (*)(struct ipw2100_priv *, u32 ))0, (char *)"IPW_STATE_ASSN_CHANGED" }, { 32, &isr_scan_complete, (char *)"IPW_STATE_SCAN_COMPLETE" }, { 64, (void (*)(struct ipw2100_priv *, u32 ))0, (char *)"IPW_STATE_ENTERED_PSP" }, { 128, (void (*)(struct ipw2100_priv *, u32 ))0, (char *)"IPW_STATE_LEFT_PSP" }, { 256, &isr_indicate_rf_kill, (char *)"IPW_STATE_RF_KILL" }, { 512, (void (*)(struct ipw2100_priv *, u32 ))0, (char *)"IPW_STATE_DISABLED" }, { 1024, (void (*)(struct ipw2100_priv *, u32 ))0, (char *)"IPW_STATE_POWER_DOWN" }, { 2048, &isr_indicate_scanning, (char *)"IPW_STATE_SCANNING" }, { -1, (void (*)(struct ipw2100_priv *, u32 ))0, (char *)"-1" } };
2250 void isr_status_change(struct ipw2100_priv *priv, int status);
2278 void isr_rx_complete_command(struct ipw2100_priv *priv, struct ipw2100_cmd_header *cmd);
2300 const char *frame_types[5U] = { "COMMAND_STATUS_VAL", "STATUS_CHANGE_VAL", "P80211_DATA_VAL", "P8023_DATA_VAL", "HOST_NOTIFICATION_VAL" };
2309 int ipw2100_alloc_skb(struct ipw2100_priv *priv, struct ipw2100_rx_packet *packet);
2333 void ipw2100_snapshot_free(struct ipw2100_priv *priv);
2419 u8 packet_data[2340U] = { };
2422 void ipw2100_corruption_detected(struct ipw2100_priv *priv, int i);
2467 void isr_rx(struct ipw2100_priv *priv, int i, struct libipw_rx_stats *stats);
2541 void isr_rx_monitor(struct ipw2100_priv *priv, int i, struct libipw_rx_stats *stats);
2623 int ipw2100_corruption_check(struct ipw2100_priv *priv, int i);
2679 void __ipw2100_rx_process(struct ipw2100_priv *priv);
2824 int __ipw2100_tx_process(struct ipw2100_priv *priv);
3000 void __ipw2100_tx_complete(struct ipw2100_priv *priv);
3222 void ipw2100_irq_tasklet(struct ipw2100_priv *priv);
3343 irqreturn_t ipw2100_interrupt(int irq, void *data);
3393 netdev_tx_t ipw2100_tx(struct libipw_txb *txb, struct net_device *dev, int pri);
3440 int ipw2100_msg_allocate(struct ipw2100_priv *priv);
3488 int ipw2100_msg_initialize(struct ipw2100_priv *priv);
3502 void ipw2100_msg_free(struct ipw2100_priv *priv);
3521 ssize_t show_pci(struct device *d, struct device_attribute *attr, char *buf);
3541 struct device_attribute dev_attr_pci = { { "pci", 292U, (_Bool)0, 0, { { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } }, &show_pci, (ssize_t (*)(struct device *, struct device_attribute *, const char *, size_t ))0 };
3543 ssize_t show_cfg(struct device *d, struct device_attribute *attr, char *buf);
3550 struct device_attribute dev_attr_cfg = { { "cfg", 292U, (_Bool)0, 0, { { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } }, &show_cfg, (ssize_t (*)(struct device *, struct device_attribute *, const char *, size_t ))0 };
3552 ssize_t show_status(struct device *d, struct device_attribute *attr, char *buf);
3559 struct device_attribute dev_attr_status = { { "status", 292U, (_Bool)0, 0, { { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } }, &show_status, (ssize_t (*)(struct device *, struct device_attribute *, const char *, size_t ))0 };
3561 ssize_t show_capability(struct device *d, struct device_attribute *attr, char *buf);
3568 struct device_attribute dev_attr_capability = { { "capability", 292U, (_Bool)0, 0, { { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } }, &show_capability, (ssize_t (*)(struct device *, struct device_attribute *, const char *, size_t ))0 };
3574 const struct __anonstruct_hw_data_330 hw_data[5U] = { { 36U, "REG_GP_CNTRL" }, { 48U, "REG_GPIO" }, { 8U, "REG_INTA" }, { 12U, "REG_INTA_MASK" }, { 32U, "REG_RESET_REG" } };
3584 const struct __anonstruct_nic_data_331 nic_data[3U] = { { 2228224U, "IPW2100_CONTROL_REG", 2UL }, { 2162708U, "0x210014", 1UL }, { 2162688U, "0x210000", 1UL } };
3592 const struct __anonstruct_ord_data_332 ord_data[147U] = { { 1U, "STAT_TX_HOST_REQUESTS", "requested Host Tx\'s (MSDU)" }, { 2U, "STAT_TX_HOST_COMPLETE", "successful Host Tx\'s (MSDU)" }, { 3U, "STAT_TX_DIR_DATA", "successful Directed Tx\'s (MSDU)" }, { 4U, "STAT_TX_DIR_DATA1", "successful Directed Tx\'s (MSDU) @ 1MB" }, { 5U, "STAT_TX_DIR_DATA2", "successful Directed Tx\'s (MSDU) @ 2MB" }, { 6U, "STAT_TX_DIR_DATA5_5", "successful Directed Tx\'s (MSDU) @ 5_5MB" }, { 7U, "STAT_TX_DIR_DATA11", "successful Directed Tx\'s (MSDU) @ 11MB" }, { 13U, "STAT_TX_NODIR_DATA1", "successful Non_Directed Tx\'s (MSDU) @ 1MB" }, { 14U, "STAT_TX_NODIR_DATA2", "successful Non_Directed Tx\'s (MSDU) @ 2MB" }, { 15U, "STAT_TX_NODIR_DATA5_5", "successful Non_Directed Tx\'s (MSDU) @ 5.5MB" }, { 16U, "STAT_TX_NODIR_DATA11", "successful Non_Directed Tx\'s (MSDU) @ 11MB" }, { 21U, "STAT_NULL_DATA", "successful NULL data Tx\'s" }, { 22U, "STAT_TX_RTS", "successful Tx RTS" }, { 23U, "STAT_TX_CTS", "successful Tx CTS" }, { 24U, "STAT_TX_ACK", "successful Tx ACK" }, { 25U, "STAT_TX_ASSN", "successful Association Tx\'s" }, { 26U, "STAT_TX_ASSN_RESP", "successful Association response Tx\'s" }, { 27U, "STAT_TX_REASSN", "successful Reassociation Tx\'s" }, { 28U, "STAT_TX_REASSN_RESP", "successful Reassociation response Tx\'s" }, { 29U, "STAT_TX_PROBE", "probes successfully transmitted" }, { 30U, "STAT_TX_PROBE_RESP", "probe responses successfully transmitted" }, { 31U, "STAT_TX_BEACON", "tx beacon" }, { 32U, "STAT_TX_ATIM", "Tx ATIM" }, { 33U, "STAT_TX_DISASSN", "successful Disassociation TX" }, { 34U, "STAT_TX_AUTH", "successful Authentication Tx" }, { 35U, "STAT_TX_DEAUTH", "successful Deauthentication TX" }, { 41U, "STAT_TX_TOTAL_BYTES", "Total successful Tx data bytes" }, { 42U, "STAT_TX_RETRIES", "Tx retries" }, { 43U, "STAT_TX_RETRY1", "Tx retries at 1MBPS" }, { 44U, "STAT_TX_RETRY2", "Tx retries at 2MBPS" }, { 45U, "STAT_TX_RETRY5_5", "Tx retries at 5.5MBPS" }, { 46U, "STAT_TX_RETRY11", "Tx retries at 11MBPS" }, { 51U, "STAT_TX_FAILURES", "Tx Failures" }, { 53U, "STAT_TX_MAX_TRIES_IN_HOP", "times max tries in a hop failed" }, { 56U, "STAT_TX_DISASSN_FAIL", "times disassociation failed" }, { 57U, "STAT_TX_ERR_CTS", "missed/bad CTS frames" }, { 59U, "STAT_TX_ERR_ACK", "tx err due to acks" }, { 61U, "STAT_RX_HOST", "packets passed to host" }, { 62U, "STAT_RX_DIR_DATA", "directed packets" }, { 63U, "STAT_RX_DIR_DATA1", "directed packets at 1MB" }, { 64U, "STAT_RX_DIR_DATA2", "directed packets at 2MB" }, { 65U, "STAT_RX_DIR_DATA5_5", "directed packets at 5.5MB" }, { 66U, "STAT_RX_DIR_DATA11", "directed packets at 11MB" }, { 71U, "STAT_RX_NODIR_DATA", "nondirected packets" }, { 72U, "STAT_RX_NODIR_DATA1", "nondirected packets at 1MB" }, { 73U, "STAT_RX_NODIR_DATA2", "nondirected packets at 2MB" }, { 74U, "STAT_RX_NODIR_DATA5_5", "nondirected packets at 5.5MB" }, { 75U, "STAT_RX_NODIR_DATA11", "nondirected packets at 11MB" }, { 80U, "STAT_RX_NULL_DATA", "null data rx\'s" }, { 82U, "STAT_RX_RTS", "Rx RTS" }, { 83U, "STAT_RX_CTS", "Rx CTS" }, { 84U, "STAT_RX_ACK", "Rx ACK" }, { 85U, "STAT_RX_CFEND", "Rx CF End" }, { 86U, "STAT_RX_CFEND_ACK", "Rx CF End + CF Ack" }, { 87U, "STAT_RX_ASSN", "Association Rx\'s" }, { 88U, "STAT_RX_ASSN_RESP", "Association response Rx\'s" }, { 89U, "STAT_RX_REASSN", "Reassociation Rx\'s" }, { 90U, "STAT_RX_REASSN_RESP", "Reassociation response Rx\'s" }, { 91U, "STAT_RX_PROBE", "probe Rx\'s" }, { 92U, "STAT_RX_PROBE_RESP", "probe response Rx\'s" }, { 93U, "STAT_RX_BEACON", "Rx beacon" }, { 94U, "STAT_RX_ATIM", "Rx ATIM" }, { 95U, "STAT_RX_DISASSN", "disassociation Rx" }, { 96U, "STAT_RX_AUTH", "authentication Rx" }, { 97U, "STAT_RX_DEAUTH", "deauthentication Rx" }, { 101U, "STAT_RX_TOTAL_BYTES", "Total rx data bytes received" }, { 102U, "STAT_RX_ERR_CRC", "packets with Rx CRC error" }, { 103U, "STAT_RX_ERR_CRC1", "Rx CRC errors at 1MB" }, { 104U, "STAT_RX_ERR_CRC2", "Rx CRC errors at 2MB" }, { 105U, "STAT_RX_ERR_CRC5_5", "Rx CRC errors at 5.5MB" }, { 106U, "STAT_RX_ERR_CRC11", "Rx CRC errors at 11MB" }, { 112U, "STAT_RX_DUPLICATE1", "duplicate rx packets at 1MB" }, { 113U, "STAT_RX_DUPLICATE2", "duplicate rx packets at 2MB" }, { 114U, "STAT_RX_DUPLICATE5_5", "duplicate rx packets at 5.5MB" }, { 115U, "STAT_RX_DUPLICATE11", "duplicate rx packets at 11MB" }, { 119U, "STAT_RX_DUPLICATE", "duplicate rx packets" }, { 120U, "PERS_DB_LOCK", "locking fw permanent db" }, { 121U, "PERS_DB_SIZE", "size of fw permanent db" }, { 122U, "PERS_DB_ADDR", "address of fw permanent db" }, { 123U, "STAT_RX_INVALID_PROTOCOL", "rx frames with invalid protocol" }, { 124U, "SYS_BOOT_TIME", "Boot time" }, { 125U, "STAT_RX_NO_BUFFER", "rx frames rejected due to no buffer" }, { 128U, "STAT_RX_MISSING_FRAG", "rx frames dropped due to missing fragment" }, { 129U, "STAT_RX_ORPHAN_FRAG", "rx frames dropped due to non-sequential fragment" }, { 130U, "STAT_RX_ORPHAN_FRAME", "rx frames dropped due to unmatched 1st frame" }, { 131U, "STAT_RX_FRAG_AGEOUT", "rx frames dropped due to uncompleted frame" }, { 133U, "STAT_RX_ICV_ERRORS", "ICV errors during decryption" }, { 137U, "STAT_PSP_SUSPENSION", "times adapter suspended" }, { 138U, "STAT_PSP_BCN_TIMEOUT", "beacon timeout" }, { 139U, "STAT_PSP_POLL_TIMEOUT", "poll response timeouts" }, { 140U, "STAT_PSP_NONDIR_TIMEOUT", "timeouts waiting for last {broad,multi}cast pkt" }, { 141U, "STAT_PSP_RX_DTIMS", "PSP DTIMs received" }, { 142U, "STAT_PSP_RX_TIMS", "PSP TIMs received" }, { 143U, "STAT_PSP_STATION_ID", "PSP Station ID" }, { 147U, "LAST_ASSN_TIME", "RTC time of last association" }, { 148U, "STAT_PERCENT_MISSED_BCNS", "current calculation of % missed beacons" }, { 149U, "STAT_PERCENT_RETRIES", "current calculation of % missed tx retries" }, { 150U, "ASSOCIATED_AP_PTR", "0 if not associated, else pointer to AP table entry" }, { 151U, "AVAILABLE_AP_CNT", "AP\'s decsribed in the AP table" }, { 152U, "AP_LIST_PTR", "Ptr to list of available APs" }, { 153U, "STAT_AP_ASSNS", "associations" }, { 154U, "STAT_ASSN_FAIL", "association failures" }, { 155U, "STAT_ASSN_RESP_FAIL", "failures due to response fail" }, { 156U, "STAT_FULL_SCANS", "full scans" }, { 157U, "CARD_DISABLED", "Card Disabled" }, { 158U, "STAT_ROAM_INHIBIT", "times roaming was inhibited due to activity" }, { 160U, "RSSI_AT_ASSN", "RSSI of associated AP at time of association" }, { 161U, "STAT_ASSN_CAUSE1", "reassociation: no probe response or TX on hop" }, { 162U, "STAT_ASSN_CAUSE2", "reassociation: poor tx/rx quality" }, { 163U, "STAT_ASSN_CAUSE3", "reassociation: tx/rx quality (excessive AP load" }, { 164U, "STAT_ASSN_CAUSE4", "reassociation: AP RSSI level" }, { 165U, "STAT_ASSN_CAUSE5", "reassociations due to load leveling" }, { 170U, "STAT_AUTH_FAIL", "times authentication failed" }, { 171U, "STAT_AUTH_RESP_FAIL", "times authentication response failed" }, { 172U, "STATION_TABLE_CNT", "entries in association table" }, { 173U, "RSSI_AVG_CURR", "Current avg RSSI" }, { 177U, "POWER_MGMT_MODE", "Power mode - 0=CAM, 1=PSP" }, { 179U, "COUNTRY_CODE", "IEEE country code as recv\'d from beacon" }, { 180U, "COUNTRY_CHANNELS", "channels supported by country" }, { 181U, "RESET_CNT", "adapter resets (warm)" }, { 182U, "BEACON_INTERVAL", "Beacon interval" }, { 185U, "ANTENNA_DIVERSITY", "TRUE if antenna diversity is disabled" }, { 188U, "DTIM_PERIOD", "beacon intervals between DTIMs" }, { 189U, "OUR_FREQ", "current radio freq lower digits - channel ID" }, { 190U, "RTC_TIME", "current RTC time" }, { 191U, "PORT_TYPE", "operating mode" }, { 192U, "CURRENT_TX_RATE", "current tx rate" }, { 193U, "SUPPORTED_RATES", "supported tx rates" }, { 194U, "ATIM_WINDOW", "current ATIM Window" }, { 195U, "BASIC_RATES", "basic tx rates" }, { 196U, "NIC_HIGHEST_RATE", "NIC highest tx rate" }, { 197U, "AP_HIGHEST_RATE", "AP highest tx rate" }, { 198U, "CAPABILITIES", "Management frame capability field" }, { 199U, "AUTH_TYPE", "Type of authentication" }, { 200U, "RADIO_TYPE", "Adapter card platform type" }, { 201U, "RTS_THRESHOLD", "Min packet length for RTS handshaking" }, { 202U, "INT_MODE", "International mode" }, { 203U, "FRAGMENTATION_THRESHOLD", "protocol frag threshold" }, { 204U, "EEPROM_SRAM_DB_BLOCK_START_ADDRESS", "EEPROM offset in SRAM" }, { 205U, "EEPROM_SRAM_DB_BLOCK_SIZE", "EEPROM size in SRAM" }, { 206U, "EEPROM_SKU_CAPABILITY", "EEPROM SKU Capability" }, { 207U, "EEPROM_IBSS_11B_CHANNELS", "EEPROM IBSS 11b channel set" }, { 209U, "MAC_VERSION", "MAC Version" }, { 210U, "MAC_REVISION", "MAC Revision" }, { 211U, "RADIO_VERSION", "Radio Version" }, { 212U, "NIC_MANF_DATE_TIME", "MANF Date/Time STAMP" }, { 213U, "UCODE_VERSION", "Ucode Version" } };
3805 ssize_t show_registers(struct device *d, struct device_attribute *attr, char *buf);
3825 struct device_attribute dev_attr_registers = { { "registers", 292U, (_Bool)0, 0, { { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } }, &show_registers, (ssize_t (*)(struct device *, struct device_attribute *, const char *, size_t ))0 };
3827 ssize_t show_hardware(struct device *d, struct device_attribute *attr, char *buf);
3866 struct device_attribute dev_attr_hardware = { { "hardware", 292U, (_Bool)0, 0, { { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } }, &show_hardware, (ssize_t (*)(struct device *, struct device_attribute *, const char *, size_t ))0 };
3868 ssize_t show_memory(struct device *d, struct device_attribute *attr, char *buf);
3925 ssize_t store_memory(struct device *d, struct device_attribute *attr, const char *buf, size_t count);
3960 struct device_attribute dev_attr_memory = { { "memory", 420U, (_Bool)0, 0, { { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } }, &show_memory, &store_memory };
3962 ssize_t show_ordinals(struct device *d, struct device_attribute *attr, char *buf);
3996 struct device_attribute dev_attr_ordinals = { { "ordinals", 292U, (_Bool)0, 0, { { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } }, &show_ordinals, (ssize_t (*)(struct device *, struct device_attribute *, const char *, size_t ))0 };
3998 ssize_t show_stats(struct device *d, struct device_attribute *attr, char *buf);
4017 struct device_attribute dev_attr_stats = { { "stats", 292U, (_Bool)0, 0, { { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } }, &show_stats, (ssize_t (*)(struct device *, struct device_attribute *, const char *, size_t ))0 };
4019 int ipw2100_switch_mode(struct ipw2100_priv *priv, u32 mode);
4063 ssize_t show_internals(struct device *d, struct device_attribute *attr, char *buf);
4115 struct device_attribute dev_attr_internals = { { "internals", 292U, (_Bool)0, 0, { { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } }, &show_internals, (ssize_t (*)(struct device *, struct device_attribute *, const char *, size_t ))0 };
4117 ssize_t show_bssinfo(struct device *d, struct device_attribute *attr, char *buf);
4160 struct device_attribute dev_attr_bssinfo = { { "bssinfo", 292U, (_Bool)0, 0, { { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } }, &show_bssinfo, (ssize_t (*)(struct device *, struct device_attribute *, const char *, size_t ))0 };
4163 ssize_t show_debug_level(struct device_driver *d, char *buf);
4168 ssize_t store_debug_level(struct device_driver *d, const char *buf, size_t count);
4184 struct driver_attribute driver_attr_debug_level = { { "debug_level", 420U, (_Bool)0, 0, { { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } }, &show_debug_level, &store_debug_level };
4187 ssize_t show_fatal_error(struct device *d, struct device_attribute *attr, char *buf);
4212 ssize_t store_fatal_error(struct device *d, struct device_attribute *attr, const char *buf, size_t count);
4222 struct device_attribute dev_attr_fatal_error = { { "fatal_error", 420U, (_Bool)0, 0, { { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } }, &show_fatal_error, &store_fatal_error };
4224 ssize_t show_scan_age(struct device *d, struct device_attribute *attr, char *buf);
4231 ssize_t store_scan_age(struct device *d, struct device_attribute *attr, const char *buf, size_t count);
4255 struct device_attribute dev_attr_scan_age = { { "scan_age", 420U, (_Bool)0, 0, { { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } }, &show_scan_age, &store_scan_age };
4257 ssize_t show_rf_kill(struct device *d, struct device_attribute *attr, char *buf);
4270 int ipw_radio_kill_sw(struct ipw2100_priv *priv, int disable_radio);
4301 ssize_t store_rf_kill(struct device *d, struct device_attribute *attr, const char *buf, size_t count);
4309 struct device_attribute dev_attr_rf_kill = { { "rf_kill", 420U, (_Bool)0, 0, { { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } }, &show_rf_kill, &store_rf_kill };
4311 struct attribute *ipw2100_sysfs_entries[15U] = { &(dev_attr_hardware.attr), &(dev_attr_registers.attr), &(dev_attr_ordinals.attr), &(dev_attr_pci.attr), &(dev_attr_stats.attr), &(dev_attr_internals.attr), &(dev_attr_bssinfo.attr), &(dev_attr_memory.attr), &(dev_attr_scan_age.attr), &(dev_attr_fatal_error.attr), &(dev_attr_rf_kill.attr), &(dev_attr_cfg.attr), &(dev_attr_status.attr), &(dev_attr_capability.attr), (struct attribute *)0 };
4329 struct attribute_group ipw2100_attribute_group = { 0, 0, (struct attribute **)(&ipw2100_sysfs_entries), 0 };
4333 int status_queue_allocate(struct ipw2100_priv *priv, int entries);
4355 void status_queue_free(struct ipw2100_priv *priv);
4369 int bd_queue_allocate(struct ipw2100_priv *priv, struct ipw2100_bd_queue *q, int entries);
4391 void bd_queue_free(struct ipw2100_priv *priv, struct ipw2100_bd_queue *q);
4406 void bd_queue_initialize(struct ipw2100_priv *priv, struct ipw2100_bd_queue *q, u32 base, u32 size, u32 r, u32 w);
4423 void ipw2100_kill_works(struct ipw2100_priv *priv);
4435 int ipw2100_tx_allocate(struct ipw2100_priv *priv);
4494 void ipw2100_tx_initialize(struct ipw2100_priv *priv);
4544 void ipw2100_tx_free(struct ipw2100_priv *priv);
4576 int ipw2100_rx_allocate(struct ipw2100_priv *priv);
4646 void ipw2100_rx_initialize(struct ipw2100_priv *priv);
4670 void ipw2100_rx_free(struct ipw2100_priv *priv);
4698 int ipw2100_read_mac_address(struct ipw2100_priv *priv);
4723 int ipw2100_set_mac_address(struct ipw2100_priv *priv, int batch_mode);
4749 int ipw2100_set_port_type(struct ipw2100_priv *priv, u32 port_type, int batch_mode);
4790 int ipw2100_set_channel(struct ipw2100_priv *priv, u32 channel___0, int batch_mode);
4840 int ipw2100_system_config(struct ipw2100_priv *priv, int batch_mode);
4901 int ipw2100_set_tx_rates(struct ipw2100_priv *priv, u32 rate, int batch_mode);
4941 int ipw2100_set_power_mode(struct ipw2100_priv *priv, int power_level);
4976 int ipw2100_set_rts_threshold(struct ipw2100_priv *priv, u32 threshold);
5040 int ipw2100_set_short_retry(struct ipw2100_priv *priv, u32 retry);
5060 int ipw2100_set_long_retry(struct ipw2100_priv *priv, u32 retry);
5080 int ipw2100_set_mandatory_bssid(struct ipw2100_priv *priv, u8 *bssid, int batch_mode);
5114 int ipw2100_disassociate_bssid(struct ipw2100_priv *priv);
5138 int ipw2100_set_wpa_ie(struct ipw2100_priv *priv, struct ipw2100_wpa_assoc_frame *wpa_frame, int batch_mode);
5182 int ipw2100_set_security_information(struct ipw2100_priv *priv, int auth_mode, int security_level, int unicast_using_group, int batch_mode);
5248 int ipw2100_set_tx_power(struct ipw2100_priv *priv, u32 tx_power);
5272 int ipw2100_set_ibss_beacon_interval(struct ipw2100_priv *priv, u32 interval, int batch_mode);
5338 int ipw2100_set_wep_flags(struct ipw2100_priv *priv, u32 flags, int batch_mode);
5398 int ipw2100_set_key(struct ipw2100_priv *priv, int idx, char *key, int len, int batch_mode);
5461 int ipw2100_set_key_index(struct ipw2100_priv *priv, int idx, int batch_mode);
5496 int ipw2100_configure_security(struct ipw2100_priv *priv, int batch_mode);
5574 void ipw2100_security_work(struct work_struct *work);
5587 void shim__set_security(struct net_device *dev, struct libipw_security *sec);
5781 int ipw2100_set_address(struct net_device *dev, void *p);
5809 int ipw2100_open(struct net_device *dev);
5825 int ipw2100_close(struct net_device *dev);
5864 void ipw2100_tx_timeout(struct net_device *dev);
5880 int ipw2100_wpa_enable(struct ipw2100_priv *priv, int value);
5888 int ipw2100_wpa_set_auth_algs(struct ipw2100_priv *priv, int value);
5917 void ipw2100_wpa_assoc_frame(struct ipw2100_priv *priv, char *wpa_ie, int wpa_ie_len);
5934 void ipw_ethtool_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info);
5953 u32 ipw2100_ethtool_get_link(struct net_device *dev);
5959 const struct ethtool_ops ipw2100_ethtool_ops = { 0, 0, &ipw_ethtool_get_drvinfo, 0, 0, 0, 0, 0, 0, 0, &ipw2100_ethtool_get_link, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
5964 void ipw2100_hang_check(struct work_struct *work);
6007 void ipw2100_rf_kill(struct work_struct *work);
6039 const struct net_device_ops ipw2100_netdev_ops = { 0, 0, &ipw2100_open, &ipw2100_close, &libipw_xmit, 0, 0, 0, &ipw2100_set_address, ð_validate_addr, 0, 0, &libipw_change_mtu, 0, &ipw2100_tx_timeout, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
6051 struct net_device * ipw2100_alloc_device(struct pci_dev *pci_dev, void *ioaddr);
6176 int ipw2100_pci_init_one(struct pci_dev *pci_dev, const struct pci_device_id *ent);
6375 void ipw2100_pci_remove_one(struct pci_dev *pci_dev);
6426 int ipw2100_suspend(struct pci_dev *pci_dev, pm_message_t state);
6453 int ipw2100_resume(struct pci_dev *pci_dev);
6503 void ipw2100_shutdown(struct pci_dev *pci_dev);
6515 const struct pci_device_id ipw2100_pci_id_table[41U] = { { 32902U, 4163U, 32902U, 9504U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9505U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9508U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9509U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9510U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9506U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9507U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9511U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9512U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9513U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9515U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9516U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9517U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9552U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9553U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9555U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9556U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9557U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9568U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9570U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9571U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9569U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9573U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9574U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9575U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9584U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9600U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9602U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9603U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9601U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9605U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9606U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9607U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9616U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9618U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9617U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9619U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9622U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9624U, 0U, 0U, 0UL }, { 32902U, 4163U, 32902U, 9632U, 0U, 0U, 0UL }, { 0U, 0U, 0U, 0U, 0U, 0U, 0UL } };
6565 const struct pci_device_id __mod_pci_device_table = { };
6567 struct pci_driver ipw2100_pci_driver = { { 0, 0 }, "ipw2100", (const struct pci_device_id *)(&ipw2100_pci_id_table), &ipw2100_pci_init_one, &ipw2100_pci_remove_one, &ipw2100_suspend, 0, 0, &ipw2100_resume, &ipw2100_shutdown, 0, 0, { 0, 0, 0, 0, (_Bool)0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { { { { 0U } }, 0U, 0U, 0, { 0, { 0, 0 }, 0, 0, 0UL } } } }, { 0, 0 } } };
6588 int ipw2100_init();
6615 void ipw2100_exit();
6629 int ipw2100_wx_get_name(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
6647 int ipw2100_wx_set_freq(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
6693 int ipw2100_wx_get_freq(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
6718 int ipw2100_wx_set_mode(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
6757 int ipw2100_wx_get_mode(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
6776 const s32 timeout_duration[5U] = { 350000, 250000, 75000, 37000, 25000 };
6784 const s32 period_duration[5U] = { 400000, 700000, 1000000, 1000000, 1000000 };
6792 int ipw2100_wx_get_range(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
6917 int ipw2100_wx_set_wap(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
6955 int ipw2100_wx_get_wap(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
6977 int ipw2100_wx_set_essid(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7028 int ipw2100_wx_get_essid(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7056 int ipw2100_wx_set_nick(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7078 int ipw2100_wx_get_nick(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7097 int ipw2100_wx_set_rate(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7137 int ipw2100_wx_get_rate(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7189 int ipw2100_wx_set_rts(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7224 int ipw2100_wx_get_rts(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7245 int ipw2100_wx_set_txpow(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7286 int ipw2100_wx_get_txpow(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7313 int ipw2100_wx_set_frag(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7343 int ipw2100_wx_get_frag(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7361 int ipw2100_wx_set_retry(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7405 int ipw2100_wx_get_retry(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7437 int ipw2100_wx_set_scan(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7465 int ipw2100_wx_get_scan(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7480 int ipw2100_wx_set_encode(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *key);
7492 int ipw2100_wx_get_encode(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *key);
7504 int ipw2100_wx_set_power(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7549 int ipw2100_wx_get_power(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7576 int ipw2100_wx_set_genie(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7612 int ipw2100_wx_get_genie(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7634 int ipw2100_wx_set_auth(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7727 int ipw2100_wx_get_auth(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7789 int ipw2100_wx_set_encodeext(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7798 int ipw2100_wx_get_encodeext(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7807 int ipw2100_wx_set_mlme(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7838 int ipw2100_wx_set_promisc(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7869 int ipw2100_wx_reset(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7881 int ipw2100_wx_set_powermode(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7905 int ipw2100_wx_get_powermode(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7945 int ipw2100_wx_set_preamble(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7974 int ipw2100_wx_get_preamble(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
7993 int ipw2100_wx_set_crc_check(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
8021 int ipw2100_wx_get_crc_check(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
8040 iw_handler ipw2100_wx_handlers[54U] = { 0, &ipw2100_wx_get_name, 0, 0, &ipw2100_wx_set_freq, &ipw2100_wx_get_freq, &ipw2100_wx_set_mode, &ipw2100_wx_get_mode, 0, 0, 0, &ipw2100_wx_get_range, 0, 0, 0, 0, 0, 0, 0, 0, &ipw2100_wx_set_wap, &ipw2100_wx_get_wap, &ipw2100_wx_set_mlme, 0, &ipw2100_wx_set_scan, &ipw2100_wx_get_scan, &ipw2100_wx_set_essid, &ipw2100_wx_get_essid, &ipw2100_wx_set_nick, &ipw2100_wx_get_nick, 0, 0, &ipw2100_wx_set_rate, &ipw2100_wx_get_rate, &ipw2100_wx_set_rts, &ipw2100_wx_get_rts, &ipw2100_wx_set_frag, &ipw2100_wx_get_frag, &ipw2100_wx_set_txpow, &ipw2100_wx_get_txpow, &ipw2100_wx_set_retry, &ipw2100_wx_get_retry, &ipw2100_wx_set_encode, &ipw2100_wx_get_encode, &ipw2100_wx_set_power, &ipw2100_wx_get_power, 0, 0, &ipw2100_wx_set_genie, &ipw2100_wx_get_genie, &ipw2100_wx_set_auth, &ipw2100_wx_get_auth, &ipw2100_wx_set_encodeext, &ipw2100_wx_get_encodeext };
8087 const struct iw_priv_args ipw2100_private_args[8U] = { { 35808U, 18434U, 0U, { 'm', 'o', 'n', 'i', 't', 'o', 'r', '\x0' } }, { 35809U, 18432U, 0U, { 'r', 'e', 's', 'e', 't', '\x0' } }, { 35810U, 18433U, 0U, { 's', 'e', 't', '_', 'p', 'o', 'w', 'e', 'r', '\x0' } }, { 35811U, 0U, 10320U, { 'g', 'e', 't', '_', 'p', 'o', 'w', 'e', 'r', '\x0' } }, { 35812U, 18433U, 0U, { 's', 'e', 't', '_', 'p', 'r', 'e', 'a', 'm', 'b', 'l', 'e', '\x0' } }, { 35813U, 0U, 10256U, { 'g', 'e', 't', '_', 'p', 'r', 'e', 'a', 'm', 'b', 'l', 'e', '\x0' } }, { 35814U, 18433U, 0U, { 's', 'e', 't', '_', 'c', 'r', 'c', '_', 'c', 'h', 'e', 'c', 'k', '\x0' } }, { 35815U, 0U, 10256U, { 'g', 'e', 't', '_', 'c', 'r', 'c', '_', 'c', 'h', 'e', 'c', 'k', '\x0' } } };
8121 iw_handler ipw2100_private_handler[8U] = { &ipw2100_wx_set_promisc, &ipw2100_wx_reset, &ipw2100_wx_set_powermode, &ipw2100_wx_get_powermode, &ipw2100_wx_set_preamble, &ipw2100_wx_get_preamble, &ipw2100_wx_set_crc_check, &ipw2100_wx_get_crc_check };
8285 struct iw_handler_def ipw2100_wx_handler_def = { (const iw_handler (**)(struct net_device *, struct iw_request_info *, union iwreq_data *, char *))(&ipw2100_wx_handlers), 54U, 8U, 8U, (const iw_handler (**)(struct net_device *, struct iw_request_info *, union iwreq_data *, char *))(&ipw2100_private_handler), (const struct iw_priv_args *)(&ipw2100_private_args), &ipw2100_wx_wireless_stats };
8381 int ipw2100_mod_firmware_load(struct ipw2100_fw *fw);
8672 void ldv_check_final_state();
8675 void ldv_check_return_value(int);
8678 void ldv_check_return_value_probe(int);
8681 void ldv_initialize();
8684 void ldv_handler_precall();
8687 int nondet_int();
8690 int LDV_IN_INTERRUPT = 0;
8693 void ldv_main0_sequence_infinite_withcheck_stateful();
10 void ldv_error();
25 int ldv_undef_int();
26 void * ldv_undef_ptr();
8 int LDV_DMA_MAP_CALLS = 0;
11 dma_addr_t ldv_dma_map_page(struct device *dev, struct page *page, size_t offset, size_t size, enum dma_data_direction dir);
25 int ldv_dma_mapping_error(struct device *dev, dma_addr_t dma_addr);
41 dma_addr_t ldv_dma_map_single(struct device *dev, void *cpu_addr, size_t size, enum dma_data_direction dir);
return ;
}
-entry_point
{
8695 struct net_device *var_group1;
8696 struct ethtool_drvinfo *var_group2;
8697 int res_ipw2100_open_136;
8698 int res_ipw2100_close_137;
8699 void *var_ipw2100_set_address_135_p1;
8700 struct pci_dev *var_group3;
8701 const struct pci_device_id *var_ipw2100_pci_init_one_147_p1;
8702 int res_ipw2100_pci_init_one_147;
8703 struct pm_message var_ipw2100_suspend_149_p1;
8704 int var_ipw2100_interrupt_69_p0;
8705 void *var_ipw2100_interrupt_69_p1;
8706 int ldv_s_ipw2100_netdev_ops_net_device_ops;
8707 int ldv_s_ipw2100_pci_driver_pci_driver;
8708 int tmp;
8709 int tmp___0;
8710 int tmp___1;
11141 ldv_s_ipw2100_netdev_ops_net_device_ops = 0;
11144 ldv_s_ipw2100_pci_driver_pci_driver = 0;
10954 LDV_IN_INTERRUPT = 1;
10963 -ldv_initialize()
{
71 LDV_DMA_MAP_CALLS = 0;
72 return ;;
}
11091 ldv_handler_precall() { /* Function call is skipped due to function is undefined */}
11092 -ipw2100_init()
{
6590 int ret;
6592 printk("\016ipw2100: %s, %s\n", (char *)"Intel(R) PRO/Wireless 2100 Network Driver", (char *)"git-1.2.2") { /* Function call is skipped due to function is undefined */}
6593 printk("\016ipw2100: %s\n", (char *)"Copyright(c) 2003-2006 Intel Corporation") { /* Function call is skipped due to function is undefined */}
6595 pm_qos_add_request(&ipw2100_pm_qos_req, 1, -1) { /* Function call is skipped due to function is undefined */}
6598 ret = __pci_register_driver(&ipw2100_pci_driver, &__this_module, "ipw2100") { /* Function call is skipped due to function is undefined */}
6599 assume(!(ret != 0));
6603 ipw2100_debug_level = (u32 )debug;
6604 ret = driver_create_file(&(ipw2100_pci_driver.driver), (const struct driver_attribute *)(&driver_attr_debug_level)) { /* Function call is skipped due to function is undefined */}
6605 out:;
6609 return ret;;
}
11092 assume(!(tmp != 0));
11152 goto ldv_57553;
11152 tmp___1 = nondet_int() { /* Function call is skipped due to function is undefined */}
11152 assume(tmp___1 != 0);
11156 goto ldv_57552;
11153 ldv_57552:;
11157 tmp___0 = nondet_int() { /* Function call is skipped due to function is undefined */}
11157 switch (tmp___0)
11158 assume(!(tmp___0 == 0));
11345 assume(!(tmp___0 == 1));
11531 assume(!(tmp___0 == 2));
11720 assume(!(tmp___0 == 3));
11909 assume(!(tmp___0 == 4));
12093 assume(!(tmp___0 == 5));
12279 assume(!(tmp___0 == 6));
12468 assume(!(tmp___0 == 7));
12652 assume(!(tmp___0 == 8));
12838 assume(!(tmp___0 == 9));
13024 assume(tmp___0 == 10);
13151 ldv_handler_precall() { /* Function call is skipped due to function is undefined */}
13152 -ipw2100_shutdown(var_group3)
{
6505 struct ipw2100_priv *priv;
6506 void *tmp;
6505 -pci_get_drvdata(pci_dev)
{
1409 void *tmp;
1409 tmp = dev_get_drvdata((const struct device *)(&(pdev->dev))) { /* Function call is skipped due to function is undefined */}
1409 return tmp;;
}
6505 priv = (struct ipw2100_priv *)tmp;
6508 -ipw2100_down(priv)
{
1853 unsigned long flags;
1854 union iwreq_data wrqu;
1855 int associated;
1856 raw_spinlock_t *tmp;
1857 int tmp___0;
1858 raw_spinlock_t *tmp___1;
1854 wrqu.ap_addr.sa_family = 1U;
1854 (wrqu.ap_addr.sa_data)[0] = 0;
1854 (wrqu.ap_addr.sa_data)[1] = 0;
1854 (wrqu.ap_addr.sa_data)[2] = 0;
1854 (wrqu.ap_addr.sa_data)[3] = 0;
1854 (wrqu.ap_addr.sa_data)[4] = 0;
1854 (wrqu.ap_addr.sa_data)[5] = 0;
1854 (wrqu.ap_addr.sa_data)[6] = 0;
1854 (wrqu.ap_addr.sa_data)[7] = 0;
1854 (wrqu.ap_addr.sa_data)[8] = 0;
1854 (wrqu.ap_addr.sa_data)[9] = 0;
1854 (wrqu.ap_addr.sa_data)[10] = 0;
1854 (wrqu.ap_addr.sa_data)[11] = 0;
1854 (wrqu.ap_addr.sa_data)[12] = 0;
1854 (wrqu.ap_addr.sa_data)[13] = 0;
1858 int __CPAchecker_TMP_0 = (int)(priv->status);
1858 associated = __CPAchecker_TMP_0 & 1024;
1861 assume(!((priv->stop_rf_kill) == 0));
1867 assume(!((priv->stop_hang_check) == 0));
1873 assume(((priv->status) & 536870912UL) != 0UL);
1874 cancel_delayed_work(&(priv->reset_work)) { /* Function call is skipped due to function is undefined */}
1878 -spinlock_check(&(priv->low_lock))
{
292 return &(lock->__annonCompField20.rlock);;
}
1878 flags = _raw_spin_lock_irqsave(tmp) { /* Function call is skipped due to function is undefined */}
1879 -ipw2100_enable_interrupts(priv)
{
1119 assume(!(((priv->status) & 2048UL) != 0UL));
1121 priv->status = (priv->status) | 2048UL;
1122 -write_register(priv->net_dev, 12U, 3238068243U)
{
356 struct ipw2100_priv *priv;
357 void *tmp;
358 int tmp___0;
356 -libipw_priv(dev)
{
851 void *tmp;
851 -netdev_priv((const struct net_device *)dev)
{
1605 return ((void *)dev) + 3200U;;
}
851 return (void *)(&(((struct libipw_device *)tmp)->priv));;
}
356 priv = (struct ipw2100_priv *)tmp;
358 iowrite32(val, (priv->ioaddr) + ((unsigned long)reg)) { /* Function call is skipped due to function is undefined */}
359 assume(!((ipw2100_debug_level & 67108864U) != 0U));
361 return ;;
}
1123 return ;;
}
1880 -spin_unlock_irqrestore(&(priv->low_lock), flags)
{
358 _raw_spin_unlock_irqrestore(&(lock->__annonCompField20.rlock), flags) { /* Function call is skipped due to function is undefined */}
359 return ;;
}
1882 -ipw2100_hw_stop_adapter(priv)
{
1491 struct host_command cmd;
1492 int err;
1493 int i;
1494 unsigned int reg;
1495 int tmp;
1496 unsigned long tmp___0;
1493 cmd.host_command = 58U;
1493 cmd.host_command1 = 0U;
1493 cmd.host_command_sequence = 0U;
1493 cmd.host_command_length = 0U;
1493 (cmd.host_command_parameters)[0] = 0U;
1493 (cmd.host_command_parameters)[1] = 0U;
1493 (cmd.host_command_parameters)[2] = 0U;
1493 (cmd.host_command_parameters)[3] = 0U;
1493 (cmd.host_command_parameters)[4] = 0U;
1493 (cmd.host_command_parameters)[5] = 0U;
1493 (cmd.host_command_parameters)[6] = 0U;
1493 (cmd.host_command_parameters)[7] = 0U;
1493 (cmd.host_command_parameters)[8] = 0U;
1493 (cmd.host_command_parameters)[9] = 0U;
1493 (cmd.host_command_parameters)[10] = 0U;
1493 (cmd.host_command_parameters)[11] = 0U;
1493 (cmd.host_command_parameters)[12] = 0U;
1493 (cmd.host_command_parameters)[13] = 0U;
1493 (cmd.host_command_parameters)[14] = 0U;
1493 (cmd.host_command_parameters)[15] = 0U;
1493 (cmd.host_command_parameters)[16] = 0U;
1493 (cmd.host_command_parameters)[17] = 0U;
1493 (cmd.host_command_parameters)[18] = 0U;
1493 (cmd.host_command_parameters)[19] = 0U;
1493 (cmd.host_command_parameters)[20] = 0U;
1493 (cmd.host_command_parameters)[21] = 0U;
1493 (cmd.host_command_parameters)[22] = 0U;
1493 (cmd.host_command_parameters)[23] = 0U;
1493 (cmd.host_command_parameters)[24] = 0U;
1493 (cmd.host_command_parameters)[25] = 0U;
1493 (cmd.host_command_parameters)[26] = 0U;
1493 (cmd.host_command_parameters)[27] = 0U;
1493 (cmd.host_command_parameters)[28] = 0U;
1493 (cmd.host_command_parameters)[29] = 0U;
1493 (cmd.host_command_parameters)[30] = 0U;
1493 (cmd.host_command_parameters)[31] = 0U;
1493 (cmd.host_command_parameters)[32] = 0U;
1493 (cmd.host_command_parameters)[33] = 0U;
1493 (cmd.host_command_parameters)[34] = 0U;
1493 (cmd.host_command_parameters)[35] = 0U;
1493 (cmd.host_command_parameters)[36] = 0U;
1493 (cmd.host_command_parameters)[37] = 0U;
1493 (cmd.host_command_parameters)[38] = 0U;
1493 (cmd.host_command_parameters)[39] = 0U;
1493 (cmd.host_command_parameters)[40] = 0U;
1493 (cmd.host_command_parameters)[41] = 0U;
1493 (cmd.host_command_parameters)[42] = 0U;
1493 (cmd.host_command_parameters)[43] = 0U;
1493 (cmd.host_command_parameters)[44] = 0U;
1493 (cmd.host_command_parameters)[45] = 0U;
1493 (cmd.host_command_parameters)[46] = 0U;
1493 (cmd.host_command_parameters)[47] = 0U;
1493 (cmd.host_command_parameters)[48] = 0U;
1493 (cmd.host_command_parameters)[49] = 0U;
1493 (cmd.host_command_parameters)[50] = 0U;
1493 (cmd.host_command_parameters)[51] = 0U;
1493 (cmd.host_command_parameters)[52] = 0U;
1493 (cmd.host_command_parameters)[53] = 0U;
1493 (cmd.host_command_parameters)[54] = 0U;
1493 (cmd.host_command_parameters)[55] = 0U;
1493 (cmd.host_command_parameters)[56] = 0U;
1493 (cmd.host_command_parameters)[57] = 0U;
1493 (cmd.host_command_parameters)[58] = 0U;
1493 (cmd.host_command_parameters)[59] = 0U;
1493 (cmd.host_command_parameters)[60] = 0U;
1493 (cmd.host_command_parameters)[61] = 0U;
1493 (cmd.host_command_parameters)[62] = 0U;
1493 (cmd.host_command_parameters)[63] = 0U;
1493 (cmd.host_command_parameters)[64] = 0U;
1493 (cmd.host_command_parameters)[65] = 0U;
1493 (cmd.host_command_parameters)[66] = 0U;
1493 (cmd.host_command_parameters)[67] = 0U;
1493 (cmd.host_command_parameters)[68] = 0U;
1493 (cmd.host_command_parameters)[69] = 0U;
1493 (cmd.host_command_parameters)[70] = 0U;
1493 (cmd.host_command_parameters)[71] = 0U;
1493 (cmd.host_command_parameters)[72] = 0U;
1493 (cmd.host_command_parameters)[73] = 0U;
1493 (cmd.host_command_parameters)[74] = 0U;
1493 (cmd.host_command_parameters)[75] = 0U;
1493 (cmd.host_command_parameters)[76] = 0U;
1493 (cmd.host_command_parameters)[77] = 0U;
1493 (cmd.host_command_parameters)[78] = 0U;
1493 (cmd.host_command_parameters)[79] = 0U;
1493 (cmd.host_command_parameters)[80] = 0U;
1493 (cmd.host_command_parameters)[81] = 0U;
1493 (cmd.host_command_parameters)[82] = 0U;
1493 (cmd.host_command_parameters)[83] = 0U;
1493 (cmd.host_command_parameters)[84] = 0U;
1493 (cmd.host_command_parameters)[85] = 0U;
1493 (cmd.host_command_parameters)[86] = 0U;
1493 (cmd.host_command_parameters)[87] = 0U;
1493 (cmd.host_command_parameters)[88] = 0U;
1493 (cmd.host_command_parameters)[89] = 0U;
1493 (cmd.host_command_parameters)[90] = 0U;
1493 (cmd.host_command_parameters)[91] = 0U;
1493 (cmd.host_command_parameters)[92] = 0U;
1493 (cmd.host_command_parameters)[93] = 0U;
1493 (cmd.host_command_parameters)[94] = 0U;
1493 (cmd.host_command_parameters)[95] = 0U;
1493 (cmd.host_command_parameters)[96] = 0U;
1493 (cmd.host_command_parameters)[97] = 0U;
1493 (cmd.host_command_parameters)[98] = 0U;
1493 (cmd.host_command_parameters)[99] = 0U;
1501 assume(!(((priv->status) & 4UL) == 0UL));
1504 priv->status = (priv->status) | 16UL;
1509 assume((priv->fatal_error) == 0U);
1512 -ipw2100_enable_adapter(priv)
{
1447 struct host_command cmd;
1448 int err;
1449 int tmp;
1450 int tmp___0;
1451 int tmp___1;
1452 int tmp___2;
1453 int tmp___3;
1447 cmd.host_command = 2U;
1447 cmd.host_command1 = 0U;
1447 cmd.host_command_sequence = 0U;
1447 cmd.host_command_length = 0U;
1447 (cmd.host_command_parameters)[0] = 0U;
1447 (cmd.host_command_parameters)[1] = 0U;
1447 (cmd.host_command_parameters)[2] = 0U;
1447 (cmd.host_command_parameters)[3] = 0U;
1447 (cmd.host_command_parameters)[4] = 0U;
1447 (cmd.host_command_parameters)[5] = 0U;
1447 (cmd.host_command_parameters)[6] = 0U;
1447 (cmd.host_command_parameters)[7] = 0U;
1447 (cmd.host_command_parameters)[8] = 0U;
1447 (cmd.host_command_parameters)[9] = 0U;
1447 (cmd.host_command_parameters)[10] = 0U;
1447 (cmd.host_command_parameters)[11] = 0U;
1447 (cmd.host_command_parameters)[12] = 0U;
1447 (cmd.host_command_parameters)[13] = 0U;
1447 (cmd.host_command_parameters)[14] = 0U;
1447 (cmd.host_command_parameters)[15] = 0U;
1447 (cmd.host_command_parameters)[16] = 0U;
1447 (cmd.host_command_parameters)[17] = 0U;
1447 (cmd.host_command_parameters)[18] = 0U;
1447 (cmd.host_command_parameters)[19] = 0U;
1447 (cmd.host_command_parameters)[20] = 0U;
1447 (cmd.host_command_parameters)[21] = 0U;
1447 (cmd.host_command_parameters)[22] = 0U;
1447 (cmd.host_command_parameters)[23] = 0U;
1447 (cmd.host_command_parameters)[24] = 0U;
1447 (cmd.host_command_parameters)[25] = 0U;
1447 (cmd.host_command_parameters)[26] = 0U;
1447 (cmd.host_command_parameters)[27] = 0U;
1447 (cmd.host_command_parameters)[28] = 0U;
1447 (cmd.host_command_parameters)[29] = 0U;
1447 (cmd.host_command_parameters)[30] = 0U;
1447 (cmd.host_command_parameters)[31] = 0U;
1447 (cmd.host_command_parameters)[32] = 0U;
1447 (cmd.host_command_parameters)[33] = 0U;
1447 (cmd.host_command_parameters)[34] = 0U;
1447 (cmd.host_command_parameters)[35] = 0U;
1447 (cmd.host_command_parameters)[36] = 0U;
1447 (cmd.host_command_parameters)[37] = 0U;
1447 (cmd.host_command_parameters)[38] = 0U;
1447 (cmd.host_command_parameters)[39] = 0U;
1447 (cmd.host_command_parameters)[40] = 0U;
1447 (cmd.host_command_parameters)[41] = 0U;
1447 (cmd.host_command_parameters)[42] = 0U;
1447 (cmd.host_command_parameters)[43] = 0U;
1447 (cmd.host_command_parameters)[44] = 0U;
1447 (cmd.host_command_parameters)[45] = 0U;
1447 (cmd.host_command_parameters)[46] = 0U;
1447 (cmd.host_command_parameters)[47] = 0U;
1447 (cmd.host_command_parameters)[48] = 0U;
1447 (cmd.host_command_parameters)[49] = 0U;
1447 (cmd.host_command_parameters)[50] = 0U;
1447 (cmd.host_command_parameters)[51] = 0U;
1447 (cmd.host_command_parameters)[52] = 0U;
1447 (cmd.host_command_parameters)[53] = 0U;
1447 (cmd.host_command_parameters)[54] = 0U;
1447 (cmd.host_command_parameters)[55] = 0U;
1447 (cmd.host_command_parameters)[56] = 0U;
1447 (cmd.host_command_parameters)[57] = 0U;
1447 (cmd.host_command_parameters)[58] = 0U;
1447 (cmd.host_command_parameters)[59] = 0U;
1447 (cmd.host_command_parameters)[60] = 0U;
1447 (cmd.host_command_parameters)[61] = 0U;
1447 (cmd.host_command_parameters)[62] = 0U;
1447 (cmd.host_command_parameters)[63] = 0U;
1447 (cmd.host_command_parameters)[64] = 0U;
1447 (cmd.host_command_parameters)[65] = 0U;
1447 (cmd.host_command_parameters)[66] = 0U;
1447 (cmd.host_command_parameters)[67] = 0U;
1447 (cmd.host_command_parameters)[68] = 0U;
1447 (cmd.host_command_parameters)[69] = 0U;
1447 (cmd.host_command_parameters)[70] = 0U;
1447 (cmd.host_command_parameters)[71] = 0U;
1447 (cmd.host_command_parameters)[72] = 0U;
1447 (cmd.host_command_parameters)[73] = 0U;
1447 (cmd.host_command_parameters)[74] = 0U;
1447 (cmd.host_command_parameters)[75] = 0U;
1447 (cmd.host_command_parameters)[76] = 0U;
1447 (cmd.host_command_parameters)[77] = 0U;
1447 (cmd.host_command_parameters)[78] = 0U;
1447 (cmd.host_command_parameters)[79] = 0U;
1447 (cmd.host_command_parameters)[80] = 0U;
1447 (cmd.host_command_parameters)[81] = 0U;
1447 (cmd.host_command_parameters)[82] = 0U;
1447 (cmd.host_command_parameters)[83] = 0U;
1447 (cmd.host_command_parameters)[84] = 0U;
1447 (cmd.host_command_parameters)[85] = 0U;
1447 (cmd.host_command_parameters)[86] = 0U;
1447 (cmd.host_command_parameters)[87] = 0U;
1447 (cmd.host_command_parameters)[88] = 0U;
1447 (cmd.host_command_parameters)[89] = 0U;
1447 (cmd.host_command_parameters)[90] = 0U;
1447 (cmd.host_command_parameters)[91] = 0U;
1447 (cmd.host_command_parameters)[92] = 0U;
1447 (cmd.host_command_parameters)[93] = 0U;
1447 (cmd.host_command_parameters)[94] = 0U;
1447 (cmd.host_command_parameters)[95] = 0U;
1447 (cmd.host_command_parameters)[96] = 0U;
1447 (cmd.host_command_parameters)[97] = 0U;
1447 (cmd.host_command_parameters)[98] = 0U;
1447 (cmd.host_command_parameters)[99] = 0U;
1452 err = 0;
1454 assume(!((ipw2100_debug_level & 32U) != 0U));
1456 assume(!(((priv->status) & 8UL) != 0UL));
1459 mutex_lock_nested(&(priv->adapter_mutex), 0U) { /* Function call is skipped due to function is undefined */}
1461 -rf_kill_active(priv)
{
1169 unsigned short value;
1170 unsigned int reg;
1171 int i;
1172 value = 0U;
1173 reg = 0U;
1176 assume(((priv->hw_features) & 1UL) == 0UL);
1177 wiphy_rfkill_set_hw_state(priv->ieee->wdev.wiphy, 0) { /* Function call is skipped due to function is undefined */}
1178 priv->status = (priv->status) & 18446744073709547519UL;
1179 return 0;;
}
1461 assume(!(tmp___1 != 0));
1466 -ipw2100_hw_send_command(priv, &cmd)
{
732 struct list_head *element;
733 struct ipw2100_tx_packet *packet;
734 unsigned long flags;
735 int err;
736 int tmp;
737 raw_spinlock_t *tmp___0;
738 int tmp___1;
739 int tmp___2;
740 int tmp___3;
741 int tmp___4;
742 int tmp___5;
743 const struct list_head *__mptr;
744 unsigned long __len;
745 void *__ret;
746 long __ret___0;
747 struct __wait_queue __wait;
748 long __ret___1;
749 long __int;
750 long tmp___6;
751 _Bool __cond;
752 _Bool __cond___0;
753 int tmp___7;
754 unsigned long tmp___8;
736 err = 0;
738 assume(!((ipw2100_debug_level & 32U) != 0U));
741 -printk_buf(32, (const u8 *)(&(cmd->host_command_parameters)), cmd->host_command_length)
{
678 char line[81U];
679 unsigned int ofs;
680 unsigned int _min1;
681 unsigned int _min2;
682 char *tmp;
683 unsigned int _min1___0;
684 unsigned int _min2___0;
679 ofs = 0U;
680 assume((ipw2100_debug_level & ((u32 )level)) == 0U);
681 return ;;
}
744 -spinlock_check(&(priv->low_lock))
{
292 return &(lock->__annonCompField20.rlock);;
}
744 flags = _raw_spin_lock_irqsave(tmp___0) { /* Function call is skipped due to function is undefined */}
746 assume(!((priv->fatal_error) != 0U));
753 assume(!(((priv->status) & 4UL) == 0UL));
760 assume(!(((priv->status) & 2UL) != 0UL));
767 -list_empty((const struct list_head *)(&(priv->msg_free_list)))
{
188 const struct list_head *__CPAchecker_TMP_0 = (const struct list_head *)(head->next);
188 return ((unsigned long)__CPAchecker_TMP_0) == ((unsigned long)head);;
}
767 assume(!(tmp___5 != 0));
772 priv->status = (priv->status) | 2UL;
773 priv->messages_sent = (priv->messages_sent) + 1;
775 element = priv->msg_free_list.next;
777 __mptr = (const struct list_head *)element;
777 packet = ((struct ipw2100_tx_packet *)__mptr) + 18446744073709551576UL;
778 packet->jiffy_start = (int)jiffies;
781 packet->info.c_struct.cmd->host_command_reg = cmd->host_command;
782 packet->info.c_struct.cmd->host_command_reg1 = cmd->host_command1;
783 packet->info.c_struct.cmd->host_command_len_reg = cmd->host_command_length;
785 packet->info.c_struct.cmd->sequence = cmd->host_command_sequence;
787 __len = 400UL;
787 assume(__len > 63UL);
787 __ret = __memcpy((void *)(&(packet->info.c_struct.cmd->host_command_params_reg)), (const void *)(&(cmd->host_command_parameters)), __len) { /* Function call is skipped due to function is undefined */}
791 list_del(element) { /* Function call is skipped due to function is undefined */}
792 priv->msg_free_stat.value = (priv->msg_free_stat.value) - 1;
792 assume((priv->msg_free_stat.value) < (priv->msg_free_stat.lo));
792 priv->msg_free_stat.lo = priv->msg_free_stat.value;
794 -list_add_tail(element, &(priv->msg_pend_list))
{
76 __list_add(new, head->prev, head) { /* Function call is skipped due to function is undefined */}
77 return ;;
}
795 priv->msg_pend_stat.value = (priv->msg_pend_stat.value) + 1;
795 assume(!((priv->msg_pend_stat.value) > (priv->msg_pend_stat.hi)));
797 -ipw2100_tx_send_commands(priv)
{
3016 struct list_head *element;
3017 struct ipw2100_tx_packet *packet;
3018 struct ipw2100_bd_queue *txq;
3019 struct ipw2100_bd *tbd;
3020 int next;
3021 int tmp;
3022 const struct list_head *__mptr;
3023 int tmp___0;
3024 int tmp___1;
3018 txq = &(priv->tx_queue);
3020 int __CPAchecker_TMP_0 = (int)(txq->next);
3020 next = __CPAchecker_TMP_0;
3022 goto ldv_55977;
3022 -list_empty((const struct list_head *)(&(priv->msg_pend_list)))
{
188 const struct list_head *__CPAchecker_TMP_0 = (const struct list_head *)(head->next);
188 return ((unsigned long)__CPAchecker_TMP_0) == ((unsigned long)head);;
}
3022 assume(tmp___1 == 0);
3024 goto ldv_55976;
3023 ldv_55976:;
3029 assume((txq->available) <= 3U);
3030 assume(!((ipw2100_debug_level & 8388608U) != 0U));
3031 goto ldv_55973;
3069 assume(!((txq->next) != ((u32 )next)));
3077 return ;;
}
798 -ipw2100_tx_send_data(priv)
{
3085 struct list_head *element;
3086 struct ipw2100_tx_packet *packet;
3087 struct ipw2100_bd_queue *txq;
3088 struct ipw2100_bd *tbd;
3089 int next;
3090 int i;
3091 struct ipw2100_data_header *ipw_hdr;
3092 struct libipw_hdr_3addr *hdr;
3093 const struct list_head *__mptr;
3094 int tmp;
3095 long tmp___0;
3096 int tmp___1;
3097 unsigned long __len;
3098 void *__ret;
3099 unsigned long __len___0;
3100 void *__ret___0;
3101 unsigned long __len___1;
3102 void *__ret___1;
3103 unsigned long __len___2;
3104 void *__ret___2;
3105 int tmp___2;
3106 int tmp___3;
3107 unsigned long long tmp___4;
3108 int tmp___5;
3109 int tmp___6;
3087 txq = &(priv->tx_queue);
3089 int __CPAchecker_TMP_0 = (int)(txq->next);
3089 next = __CPAchecker_TMP_0;
3090 i = 0;
3094 goto ldv_56009;
3094 -list_empty((const struct list_head *)(&(priv->tx_pend_list)))
{
188 const struct list_head *__CPAchecker_TMP_0 = (const struct list_head *)(head->next);
188 return ((unsigned long)__CPAchecker_TMP_0) == ((unsigned long)head);;
}
3094 assume(tmp___6 == 0);
3096 goto ldv_56008;
3095 ldv_56008:;
3101 element = priv->tx_pend_list.next;
3102 __mptr = (const struct list_head *)element;
3102 packet = ((struct ipw2100_tx_packet *)__mptr) + 18446744073709551576UL;
3104 int __CPAchecker_TMP_1 = (int)(packet->info.d_struct.txb->nr_frags);
3104 tmp___0 = __builtin_expect((__CPAchecker_TMP_1 + 1) > 6, 0L) { /* Function call is skipped due to function is undefined */}
3104 assume(!(tmp___0 != 0L));
3113 int __CPAchecker_TMP_3 = (int)(packet->info.d_struct.txb->nr_frags);
3113 assume(!((txq->available) <= ((u32 )(__CPAchecker_TMP_3 + 3))));
3118 list_del(element) { /* Function call is skipped due to function is undefined */}
3119 priv->tx_pend_stat.value = (priv->tx_pend_stat.value) - 1;
3119 assume(!((priv->tx_pend_stat.value) < (priv->tx_pend_stat.lo)));
3121 unsigned long __CPAchecker_TMP_5 = (unsigned long)(txq->next);
3121 tbd = (txq->drv) + __CPAchecker_TMP_5;
3123 int __CPAchecker_TMP_6 = (int)(txq->next);
3123 packet->index = __CPAchecker_TMP_6;
3125 ipw_hdr = packet->info.d_struct.data;
3126 struct libipw_hdr_3addr *__CPAchecker_TMP_7 = (struct libipw_hdr_3addr *)(((packet->info.d_struct.txb->fragments)[0])->data);
3126 hdr = __CPAchecker_TMP_7;
3129 assume(!((priv->ieee->iw_mode) == 2));
3134 assume(!((priv->ieee->iw_mode) == 1));
3141 ipw_hdr->host_command_reg = 33U;
3142 ipw_hdr->host_command_reg1 = 0U;
3145 ipw_hdr->needs_encryption = 0U;
3146 ipw_hdr->encrypted = packet->info.d_struct.txb->encrypted;
3147 unsigned int __CPAchecker_TMP_8 = (unsigned int)(packet->info.d_struct.txb->nr_frags);
3147 assume(!(__CPAchecker_TMP_8 > 1U));
3152 ipw_hdr->fragment_size = 0U;
3154 tbd->host_addr = (u32 )(packet->info.d_struct.data_phys);
3155 tbd->buf_length = 52U;
3156 unsigned int __CPAchecker_TMP_10 = (unsigned int)(packet->info.d_struct.txb->nr_frags);
3156 tbd->num_fragments = __CPAchecker_TMP_10 + 1U;
3157 tbd->status.info.field = 1U;
3160 txq->next = (txq->next) + 1U;
3161 txq->next = (txq->next) % (txq->entries);
3163 assume(!((ipw2100_debug_level & 8388608U) != 0U));
3166 unsigned int __CPAchecker_TMP_12 = (unsigned int)(packet->info.d_struct.txb->nr_frags);
3166 assume(__CPAchecker_TMP_12 > 1U);
3167 assume(!((ipw2100_debug_level & 2097152U) != 0U));
3171 i = 0;
3171 goto ldv_56006;
3171 int __CPAchecker_TMP_22 = (int)(packet->info.d_struct.txb->nr_frags);
3171 assume(__CPAchecker_TMP_22 > i);
3173 goto ldv_56005;
3172 ldv_56005:;
3172 unsigned long __CPAchecker_TMP_15 = (unsigned long)(txq->next);
3172 tbd = (txq->drv) + __CPAchecker_TMP_15;
3173 int __CPAchecker_TMP_16 = (int)(packet->info.d_struct.txb->nr_frags);
3173 assume(!((__CPAchecker_TMP_16 + -1) == i));
3178 tbd->status.info.field = 1U;
3182 tbd->buf_length = (((packet->info.d_struct.txb->fragments)[i])->len) - 24U;
3185 void *__CPAchecker_TMP_17 = (void *)(((packet->info.d_struct.txb->fragments)[i])->data);
3185 size_t __CPAchecker_TMP_18 = (size_t )(tbd->buf_length);
3185 -pci_map_single(priv->pci_dev, __CPAchecker_TMP_17 + 24U, __CPAchecker_TMP_18, 1)
{
33 unsigned long long tmp;
32 struct device *__CPAchecker_TMP_0;
32 assume(((unsigned long)hwdev) != ((unsigned long)((struct pci_dev *)0)));
32 __CPAchecker_TMP_0 = &(hwdev->dev);
32 -ldv_dma_map_single_attrs_2(__CPAchecker_TMP_0, ptr, size, (enum dma_data_direction )direction, (struct dma_attrs *)0)
{
20 unsigned long long tmp;
19 -ldv_dma_map_single_attrs(dev, ptr, size, dir, attrs)
{
58 unsigned long long nonedetermined;
59 void *tmp;
58 tmp = ldv_undef_ptr() { /* Function call is skipped due to function is undefined */}
58 nonedetermined = (dma_addr_t )tmp;
61 assume(!(LDV_DMA_MAP_CALLS != 0));
63 LDV_DMA_MAP_CALLS = LDV_DMA_MAP_CALLS + 1;
65 return nonedetermined;;
}
19 return tmp;;
}
32 return tmp;;
}
3185 tbd->host_addr = (u32 )tmp___4;
3193 assume(!((ipw2100_debug_level & 8388608U) != 0U));
3197 dma_addr_t __CPAchecker_TMP_20 = (dma_addr_t )(tbd->host_addr);
3197 size_t __CPAchecker_TMP_21 = (size_t )(tbd->buf_length);
3197 -pci_dma_sync_single_for_device(priv->pci_dev, __CPAchecker_TMP_20, __CPAchecker_TMP_21, 1)
{
81 struct device *__CPAchecker_TMP_0;
81 assume(((unsigned long)hwdev) != ((unsigned long)((struct pci_dev *)0)));
81 __CPAchecker_TMP_0 = &(hwdev->dev);
81 -dma_sync_single_for_device(__CPAchecker_TMP_0, dma_handle, size, (enum dma_data_direction )direction)
{
124 struct dma_map_ops *ops;
125 struct dma_map_ops *tmp;
126 int tmp___0;
127 long tmp___1;
125 -get_dma_ops(dev)
{
34 long tmp;
37 tmp = __builtin_expect(((unsigned long)dev) == ((unsigned long)((struct device *)0)), 0L) { /* Function call is skipped due to function is undefined */}
37 assume(!(tmp != 0L));
37 assume(!(((unsigned long)(dev->archdata.dma_ops)) == ((unsigned long)((struct dma_map_ops *)0))));
40 return dev->archdata.dma_ops;;
}
125 ops = tmp;
127 -valid_dma_direction((int)dir)
{
65 int __CPAchecker_TMP_0;
65 assume(!(dma_direction == 0));
65 assume(dma_direction == 1);
__CPAchecker_TMP_0 = 1;
65 return __CPAchecker_TMP_0;;
}
127 tmp___1 = __builtin_expect(tmp___0 == 0, 0L) { /* Function call is skipped due to function is undefined */}
127 assume(!(tmp___1 != 0L));
128 unsigned long __CPAchecker_TMP_0 = (unsigned long)(ops->sync_single_for_device);
128 assume(__CPAchecker_TMP_0 != ((unsigned long)((void (*)(struct device *, dma_addr_t , size_t , enum dma_data_direction ))0)));
129 (*(ops->sync_single_for_device))(dev, addr, size, dir);
130 debug_dma_sync_single_for_device(dev, addr, size, (int)dir) { /* Function call is skipped due to function is undefined */}
131 return ;;
}
82 return ;;
}
3202 txq->next = (txq->next) + 1U;
3203 txq->next = (txq->next) % (txq->entries);
3171 i = i + 1;
3172 ldv_56006:;
3171 int __CPAchecker_TMP_22 = (int)(packet->info.d_struct.txb->nr_frags);
3171 assume(__CPAchecker_TMP_22 > i);
3173 goto ldv_56005;
3172 ldv_56005:;
3172 unsigned long __CPAchecker_TMP_15 = (unsigned long)(txq->next);
3172 tbd = (txq->drv) + __CPAchecker_TMP_15;
3173 int __CPAchecker_TMP_16 = (int)(packet->info.d_struct.txb->nr_frags);
3173 assume(!((__CPAchecker_TMP_16 + -1) == i));
3178 tbd->status.info.field = 1U;
3182 tbd->buf_length = (((packet->info.d_struct.txb->fragments)[i])->len) - 24U;
3185 void *__CPAchecker_TMP_17 = (void *)(((packet->info.d_struct.txb->fragments)[i])->data);
3185 size_t __CPAchecker_TMP_18 = (size_t )(tbd->buf_length);
3185 -pci_map_single(priv->pci_dev, __CPAchecker_TMP_17 + 24U, __CPAchecker_TMP_18, 1)
{
33 unsigned long long tmp;
32 struct device *__CPAchecker_TMP_0;
32 assume(((unsigned long)hwdev) != ((unsigned long)((struct pci_dev *)0)));
32 __CPAchecker_TMP_0 = &(hwdev->dev);
32 -ldv_dma_map_single_attrs_2(__CPAchecker_TMP_0, ptr, size, (enum dma_data_direction )direction, (struct dma_attrs *)0)
{
20 unsigned long long tmp;
19 -ldv_dma_map_single_attrs(dev, ptr, size, dir, attrs)
{
58 unsigned long long nonedetermined;
59 void *tmp;
58 tmp = ldv_undef_ptr() { /* Function call is skipped due to function is undefined */}
58 nonedetermined = (dma_addr_t )tmp;
61 assume(LDV_DMA_MAP_CALLS != 0);
61 -ldv_error()
{
15 LDV_ERROR:;
}
}
}
}
}
}
}
}
}
}
}
Source code
1 2 /****************************************************************************** 3 4 Copyright(c) 2003 - 2006 Intel Corporation. All rights reserved. 5 6 This program is free software; you can redistribute it and/or modify it 7 under the terms of version 2 of the GNU General Public License as 8 published by the Free Software Foundation. 9 10 This program is distributed in the hope that it will be useful, but WITHOUT 11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 more details. 14 15 You should have received a copy of the GNU General Public License along with 16 this program; if not, write to the Free Software Foundation, Inc., 59 17 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 19 The full GNU General Public License is included in this distribution in the 20 file called LICENSE. 21 22 Contact Information: 23 Intel Linux Wireless <ilw@linux.intel.com> 24 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 25 26 Portions of this file are based on the sample_* files provided by Wireless 27 Extensions 0.26 package and copyright (c) 1997-2003 Jean Tourrilhes 28 <jt@hpl.hp.com> 29 30 Portions of this file are based on the Host AP project, 31 Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen 32 <j@w1.fi> 33 Copyright (c) 2002-2003, Jouni Malinen <j@w1.fi> 34 35 Portions of ipw2100_mod_firmware_load, ipw2100_do_mod_firmware_load, and 36 ipw2100_fw_load are loosely based on drivers/sound/sound_firmware.c 37 available in the 2.4.25 kernel sources, and are copyright (c) Alan Cox 38 39 ******************************************************************************/ 40 /* 41 42 Initial driver on which this is based was developed by Janusz Gorycki, 43 Maciej Urbaniak, and Maciej Sosnowski. 44 45 Promiscuous mode support added by Jacek Wysoczynski and Maciej Urbaniak. 46 47 Theory of Operation 48 49 Tx - Commands and Data 50 51 Firmware and host share a circular queue of Transmit Buffer Descriptors (TBDs) 52 Each TBD contains a pointer to the physical (dma_addr_t) address of data being 53 sent to the firmware as well as the length of the data. 54 55 The host writes to the TBD queue at the WRITE index. The WRITE index points 56 to the _next_ packet to be written and is advanced when after the TBD has been 57 filled. 58 59 The firmware pulls from the TBD queue at the READ index. The READ index points 60 to the currently being read entry, and is advanced once the firmware is 61 done with a packet. 62 63 When data is sent to the firmware, the first TBD is used to indicate to the 64 firmware if a Command or Data is being sent. If it is Command, all of the 65 command information is contained within the physical address referred to by the 66 TBD. If it is Data, the first TBD indicates the type of data packet, number 67 of fragments, etc. The next TBD then refers to the actual packet location. 68 69 The Tx flow cycle is as follows: 70 71 1) ipw2100_tx() is called by kernel with SKB to transmit 72 2) Packet is move from the tx_free_list and appended to the transmit pending 73 list (tx_pend_list) 74 3) work is scheduled to move pending packets into the shared circular queue. 75 4) when placing packet in the circular queue, the incoming SKB is DMA mapped 76 to a physical address. That address is entered into a TBD. Two TBDs are 77 filled out. The first indicating a data packet, the second referring to the 78 actual payload data. 79 5) the packet is removed from tx_pend_list and placed on the end of the 80 firmware pending list (fw_pend_list) 81 6) firmware is notified that the WRITE index has 82 7) Once the firmware has processed the TBD, INTA is triggered. 83 8) For each Tx interrupt received from the firmware, the READ index is checked 84 to see which TBDs are done being processed. 85 9) For each TBD that has been processed, the ISR pulls the oldest packet 86 from the fw_pend_list. 87 10)The packet structure contained in the fw_pend_list is then used 88 to unmap the DMA address and to free the SKB originally passed to the driver 89 from the kernel. 90 11)The packet structure is placed onto the tx_free_list 91 92 The above steps are the same for commands, only the msg_free_list/msg_pend_list 93 are used instead of tx_free_list/tx_pend_list 94 95 ... 96 97 Critical Sections / Locking : 98 99 There are two locks utilized. The first is the low level lock (priv->low_lock) 100 that protects the following: 101 102 - Access to the Tx/Rx queue lists via priv->low_lock. The lists are as follows: 103 104 tx_free_list : Holds pre-allocated Tx buffers. 105 TAIL modified in __ipw2100_tx_process() 106 HEAD modified in ipw2100_tx() 107 108 tx_pend_list : Holds used Tx buffers waiting to go into the TBD ring 109 TAIL modified ipw2100_tx() 110 HEAD modified by ipw2100_tx_send_data() 111 112 msg_free_list : Holds pre-allocated Msg (Command) buffers 113 TAIL modified in __ipw2100_tx_process() 114 HEAD modified in ipw2100_hw_send_command() 115 116 msg_pend_list : Holds used Msg buffers waiting to go into the TBD ring 117 TAIL modified in ipw2100_hw_send_command() 118 HEAD modified in ipw2100_tx_send_commands() 119 120 The flow of data on the TX side is as follows: 121 122 MSG_FREE_LIST + COMMAND => MSG_PEND_LIST => TBD => MSG_FREE_LIST 123 TX_FREE_LIST + DATA => TX_PEND_LIST => TBD => TX_FREE_LIST 124 125 The methods that work on the TBD ring are protected via priv->low_lock. 126 127 - The internal data state of the device itself 128 - Access to the firmware read/write indexes for the BD queues 129 and associated logic 130 131 All external entry functions are locked with the priv->action_lock to ensure 132 that only one external action is invoked at a time. 133 134 135 */ 136 137 #include <linux/compiler.h> 138 #include <linux/errno.h> 139 #include <linux/if_arp.h> 140 #include <linux/in6.h> 141 #include <linux/in.h> 142 #include <linux/ip.h> 143 #include <linux/kernel.h> 144 #include <linux/kmod.h> 145 #include <linux/module.h> 146 #include <linux/netdevice.h> 147 #include <linux/ethtool.h> 148 #include <linux/pci.h> 149 #include <linux/dma-mapping.h> 150 #include <linux/proc_fs.h> 151 #include <linux/skbuff.h> 152 #include <asm/uaccess.h> 153 #include <asm/io.h> 154 #include <linux/fs.h> 155 #include <linux/mm.h> 156 #include <linux/slab.h> 157 #include <linux/unistd.h> 158 #include <linux/stringify.h> 159 #include <linux/tcp.h> 160 #include <linux/types.h> 161 #include <linux/time.h> 162 #include <linux/firmware.h> 163 #include <linux/acpi.h> 164 #include <linux/ctype.h> 165 #include <linux/pm_qos.h> 166 167 #include <net/lib80211.h> 168 169 #include "ipw2100.h" 170 #include "ipw.h" 171 172 #define IPW2100_VERSION "git-1.2.2" 173 174 #define DRV_NAME "ipw2100" 175 #define DRV_VERSION IPW2100_VERSION 176 #define DRV_DESCRIPTION "Intel(R) PRO/Wireless 2100 Network Driver" 177 #define DRV_COPYRIGHT "Copyright(c) 2003-2006 Intel Corporation" 178 179 static struct pm_qos_request ipw2100_pm_qos_req; 180 181 /* Debugging stuff */ 182 #ifdef CONFIG_IPW2100_DEBUG 183 #define IPW2100_RX_DEBUG /* Reception debugging */ 184 #endif 185 186 MODULE_DESCRIPTION(DRV_DESCRIPTION); 187 MODULE_VERSION(DRV_VERSION); 188 MODULE_AUTHOR(DRV_COPYRIGHT); 189 MODULE_LICENSE("GPL"); 190 191 static int debug = 0; 192 static int network_mode = 0; 193 static int channel = 0; 194 static int associate = 0; 195 static int disable = 0; 196 #ifdef CONFIG_PM 197 static struct ipw2100_fw ipw2100_firmware; 198 #endif 199 200 #include <linux/moduleparam.h> 201 module_param(debug, int, 0444); 202 module_param_named(mode, network_mode, int, 0444); 203 module_param(channel, int, 0444); 204 module_param(associate, int, 0444); 205 module_param(disable, int, 0444); 206 207 MODULE_PARM_DESC(debug, "debug level"); 208 MODULE_PARM_DESC(mode, "network mode (0=BSS,1=IBSS,2=Monitor)"); 209 MODULE_PARM_DESC(channel, "channel"); 210 MODULE_PARM_DESC(associate, "auto associate when scanning (default off)"); 211 MODULE_PARM_DESC(disable, "manually disable the radio (default 0 [radio on])"); 212 213 static u32 ipw2100_debug_level = IPW_DL_NONE; 214 215 #ifdef CONFIG_IPW2100_DEBUG 216 #define IPW_DEBUG(level, message...) \ 217 do { \ 218 if (ipw2100_debug_level & (level)) { \ 219 printk(KERN_DEBUG "ipw2100: %c %s ", \ 220 in_interrupt() ? 'I' : 'U', __func__); \ 221 printk(message); \ 222 } \ 223 } while (0) 224 #else 225 #define IPW_DEBUG(level, message...) do {} while (0) 226 #endif /* CONFIG_IPW2100_DEBUG */ 227 228 #ifdef CONFIG_IPW2100_DEBUG 229 static const char *command_types[] = { 230 "undefined", 231 "unused", /* HOST_ATTENTION */ 232 "HOST_COMPLETE", 233 "unused", /* SLEEP */ 234 "unused", /* HOST_POWER_DOWN */ 235 "unused", 236 "SYSTEM_CONFIG", 237 "unused", /* SET_IMR */ 238 "SSID", 239 "MANDATORY_BSSID", 240 "AUTHENTICATION_TYPE", 241 "ADAPTER_ADDRESS", 242 "PORT_TYPE", 243 "INTERNATIONAL_MODE", 244 "CHANNEL", 245 "RTS_THRESHOLD", 246 "FRAG_THRESHOLD", 247 "POWER_MODE", 248 "TX_RATES", 249 "BASIC_TX_RATES", 250 "WEP_KEY_INFO", 251 "unused", 252 "unused", 253 "unused", 254 "unused", 255 "WEP_KEY_INDEX", 256 "WEP_FLAGS", 257 "ADD_MULTICAST", 258 "CLEAR_ALL_MULTICAST", 259 "BEACON_INTERVAL", 260 "ATIM_WINDOW", 261 "CLEAR_STATISTICS", 262 "undefined", 263 "undefined", 264 "undefined", 265 "undefined", 266 "TX_POWER_INDEX", 267 "undefined", 268 "undefined", 269 "undefined", 270 "undefined", 271 "undefined", 272 "undefined", 273 "BROADCAST_SCAN", 274 "CARD_DISABLE", 275 "PREFERRED_BSSID", 276 "SET_SCAN_OPTIONS", 277 "SCAN_DWELL_TIME", 278 "SWEEP_TABLE", 279 "AP_OR_STATION_TABLE", 280 "GROUP_ORDINALS", 281 "SHORT_RETRY_LIMIT", 282 "LONG_RETRY_LIMIT", 283 "unused", /* SAVE_CALIBRATION */ 284 "unused", /* RESTORE_CALIBRATION */ 285 "undefined", 286 "undefined", 287 "undefined", 288 "HOST_PRE_POWER_DOWN", 289 "unused", /* HOST_INTERRUPT_COALESCING */ 290 "undefined", 291 "CARD_DISABLE_PHY_OFF", 292 "MSDU_TX_RATES", 293 "undefined", 294 "SET_STATION_STAT_BITS", 295 "CLEAR_STATIONS_STAT_BITS", 296 "LEAP_ROGUE_MODE", 297 "SET_SECURITY_INFORMATION", 298 "DISASSOCIATION_BSSID", 299 "SET_WPA_ASS_IE" 300 }; 301 #endif 302 303 static const long ipw2100_frequencies[] = { 304 2412, 2417, 2422, 2427, 305 2432, 2437, 2442, 2447, 306 2452, 2457, 2462, 2467, 307 2472, 2484 308 }; 309 310 #define FREQ_COUNT ARRAY_SIZE(ipw2100_frequencies) 311 312 static struct ieee80211_rate ipw2100_bg_rates[] = { 313 { .bitrate = 10 }, 314 { .bitrate = 20, .flags = IEEE80211_RATE_SHORT_PREAMBLE }, 315 { .bitrate = 55, .flags = IEEE80211_RATE_SHORT_PREAMBLE }, 316 { .bitrate = 110, .flags = IEEE80211_RATE_SHORT_PREAMBLE }, 317 }; 318 319 #define RATE_COUNT ARRAY_SIZE(ipw2100_bg_rates) 320 321 /* Pre-decl until we get the code solid and then we can clean it up */ 322 static void ipw2100_tx_send_commands(struct ipw2100_priv *priv); 323 static void ipw2100_tx_send_data(struct ipw2100_priv *priv); 324 static int ipw2100_adapter_setup(struct ipw2100_priv *priv); 325 326 static void ipw2100_queues_initialize(struct ipw2100_priv *priv); 327 static void ipw2100_queues_free(struct ipw2100_priv *priv); 328 static int ipw2100_queues_allocate(struct ipw2100_priv *priv); 329 330 static int ipw2100_fw_download(struct ipw2100_priv *priv, 331 struct ipw2100_fw *fw); 332 static int ipw2100_get_firmware(struct ipw2100_priv *priv, 333 struct ipw2100_fw *fw); 334 static int ipw2100_get_fwversion(struct ipw2100_priv *priv, char *buf, 335 size_t max); 336 static int ipw2100_get_ucodeversion(struct ipw2100_priv *priv, char *buf, 337 size_t max); 338 static void ipw2100_release_firmware(struct ipw2100_priv *priv, 339 struct ipw2100_fw *fw); 340 static int ipw2100_ucode_download(struct ipw2100_priv *priv, 341 struct ipw2100_fw *fw); 342 static void ipw2100_wx_event_work(struct work_struct *work); 343 static struct iw_statistics *ipw2100_wx_wireless_stats(struct net_device *dev); 344 static struct iw_handler_def ipw2100_wx_handler_def; 345 346 static inline void read_register(struct net_device *dev, u32 reg, u32 * val) 347 { 348 struct ipw2100_priv *priv = libipw_priv(dev); 349 350 *val = ioread32(priv->ioaddr + reg); 351 IPW_DEBUG_IO("r: 0x%08X => 0x%08X\n", reg, *val); 352 } 353 354 static inline void write_register(struct net_device *dev, u32 reg, u32 val) 355 { 356 struct ipw2100_priv *priv = libipw_priv(dev); 357 358 iowrite32(val, priv->ioaddr + reg); 359 IPW_DEBUG_IO("w: 0x%08X <= 0x%08X\n", reg, val); 360 } 361 362 static inline void read_register_word(struct net_device *dev, u32 reg, 363 u16 * val) 364 { 365 struct ipw2100_priv *priv = libipw_priv(dev); 366 367 *val = ioread16(priv->ioaddr + reg); 368 IPW_DEBUG_IO("r: 0x%08X => %04X\n", reg, *val); 369 } 370 371 static inline void read_register_byte(struct net_device *dev, u32 reg, u8 * val) 372 { 373 struct ipw2100_priv *priv = libipw_priv(dev); 374 375 *val = ioread8(priv->ioaddr + reg); 376 IPW_DEBUG_IO("r: 0x%08X => %02X\n", reg, *val); 377 } 378 379 static inline void write_register_word(struct net_device *dev, u32 reg, u16 val) 380 { 381 struct ipw2100_priv *priv = libipw_priv(dev); 382 383 iowrite16(val, priv->ioaddr + reg); 384 IPW_DEBUG_IO("w: 0x%08X <= %04X\n", reg, val); 385 } 386 387 static inline void write_register_byte(struct net_device *dev, u32 reg, u8 val) 388 { 389 struct ipw2100_priv *priv = libipw_priv(dev); 390 391 iowrite8(val, priv->ioaddr + reg); 392 IPW_DEBUG_IO("w: 0x%08X =< %02X\n", reg, val); 393 } 394 395 static inline void read_nic_dword(struct net_device *dev, u32 addr, u32 * val) 396 { 397 write_register(dev, IPW_REG_INDIRECT_ACCESS_ADDRESS, 398 addr & IPW_REG_INDIRECT_ADDR_MASK); 399 read_register(dev, IPW_REG_INDIRECT_ACCESS_DATA, val); 400 } 401 402 static inline void write_nic_dword(struct net_device *dev, u32 addr, u32 val) 403 { 404 write_register(dev, IPW_REG_INDIRECT_ACCESS_ADDRESS, 405 addr & IPW_REG_INDIRECT_ADDR_MASK); 406 write_register(dev, IPW_REG_INDIRECT_ACCESS_DATA, val); 407 } 408 409 static inline void read_nic_word(struct net_device *dev, u32 addr, u16 * val) 410 { 411 write_register(dev, IPW_REG_INDIRECT_ACCESS_ADDRESS, 412 addr & IPW_REG_INDIRECT_ADDR_MASK); 413 read_register_word(dev, IPW_REG_INDIRECT_ACCESS_DATA, val); 414 } 415 416 static inline void write_nic_word(struct net_device *dev, u32 addr, u16 val) 417 { 418 write_register(dev, IPW_REG_INDIRECT_ACCESS_ADDRESS, 419 addr & IPW_REG_INDIRECT_ADDR_MASK); 420 write_register_word(dev, IPW_REG_INDIRECT_ACCESS_DATA, val); 421 } 422 423 static inline void read_nic_byte(struct net_device *dev, u32 addr, u8 * val) 424 { 425 write_register(dev, IPW_REG_INDIRECT_ACCESS_ADDRESS, 426 addr & IPW_REG_INDIRECT_ADDR_MASK); 427 read_register_byte(dev, IPW_REG_INDIRECT_ACCESS_DATA, val); 428 } 429 430 static inline void write_nic_byte(struct net_device *dev, u32 addr, u8 val) 431 { 432 write_register(dev, IPW_REG_INDIRECT_ACCESS_ADDRESS, 433 addr & IPW_REG_INDIRECT_ADDR_MASK); 434 write_register_byte(dev, IPW_REG_INDIRECT_ACCESS_DATA, val); 435 } 436 437 static inline void write_nic_auto_inc_address(struct net_device *dev, u32 addr) 438 { 439 write_register(dev, IPW_REG_AUTOINCREMENT_ADDRESS, 440 addr & IPW_REG_INDIRECT_ADDR_MASK); 441 } 442 443 static inline void write_nic_dword_auto_inc(struct net_device *dev, u32 val) 444 { 445 write_register(dev, IPW_REG_AUTOINCREMENT_DATA, val); 446 } 447 448 static void write_nic_memory(struct net_device *dev, u32 addr, u32 len, 449 const u8 * buf) 450 { 451 u32 aligned_addr; 452 u32 aligned_len; 453 u32 dif_len; 454 u32 i; 455 456 /* read first nibble byte by byte */ 457 aligned_addr = addr & (~0x3); 458 dif_len = addr - aligned_addr; 459 if (dif_len) { 460 /* Start reading at aligned_addr + dif_len */ 461 write_register(dev, IPW_REG_INDIRECT_ACCESS_ADDRESS, 462 aligned_addr); 463 for (i = dif_len; i < 4; i++, buf++) 464 write_register_byte(dev, 465 IPW_REG_INDIRECT_ACCESS_DATA + i, 466 *buf); 467 468 len -= dif_len; 469 aligned_addr += 4; 470 } 471 472 /* read DWs through autoincrement registers */ 473 write_register(dev, IPW_REG_AUTOINCREMENT_ADDRESS, aligned_addr); 474 aligned_len = len & (~0x3); 475 for (i = 0; i < aligned_len; i += 4, buf += 4, aligned_addr += 4) 476 write_register(dev, IPW_REG_AUTOINCREMENT_DATA, *(u32 *) buf); 477 478 /* copy the last nibble */ 479 dif_len = len - aligned_len; 480 write_register(dev, IPW_REG_INDIRECT_ACCESS_ADDRESS, aligned_addr); 481 for (i = 0; i < dif_len; i++, buf++) 482 write_register_byte(dev, IPW_REG_INDIRECT_ACCESS_DATA + i, 483 *buf); 484 } 485 486 static void read_nic_memory(struct net_device *dev, u32 addr, u32 len, 487 u8 * buf) 488 { 489 u32 aligned_addr; 490 u32 aligned_len; 491 u32 dif_len; 492 u32 i; 493 494 /* read first nibble byte by byte */ 495 aligned_addr = addr & (~0x3); 496 dif_len = addr - aligned_addr; 497 if (dif_len) { 498 /* Start reading at aligned_addr + dif_len */ 499 write_register(dev, IPW_REG_INDIRECT_ACCESS_ADDRESS, 500 aligned_addr); 501 for (i = dif_len; i < 4; i++, buf++) 502 read_register_byte(dev, 503 IPW_REG_INDIRECT_ACCESS_DATA + i, 504 buf); 505 506 len -= dif_len; 507 aligned_addr += 4; 508 } 509 510 /* read DWs through autoincrement registers */ 511 write_register(dev, IPW_REG_AUTOINCREMENT_ADDRESS, aligned_addr); 512 aligned_len = len & (~0x3); 513 for (i = 0; i < aligned_len; i += 4, buf += 4, aligned_addr += 4) 514 read_register(dev, IPW_REG_AUTOINCREMENT_DATA, (u32 *) buf); 515 516 /* copy the last nibble */ 517 dif_len = len - aligned_len; 518 write_register(dev, IPW_REG_INDIRECT_ACCESS_ADDRESS, aligned_addr); 519 for (i = 0; i < dif_len; i++, buf++) 520 read_register_byte(dev, IPW_REG_INDIRECT_ACCESS_DATA + i, buf); 521 } 522 523 static bool ipw2100_hw_is_adapter_in_system(struct net_device *dev) 524 { 525 u32 dbg; 526 527 read_register(dev, IPW_REG_DOA_DEBUG_AREA_START, &dbg); 528 529 return dbg == IPW_DATA_DOA_DEBUG_VALUE; 530 } 531 532 static int ipw2100_get_ordinal(struct ipw2100_priv *priv, u32 ord, 533 void *val, u32 * len) 534 { 535 struct ipw2100_ordinals *ordinals = &priv->ordinals; 536 u32 addr; 537 u32 field_info; 538 u16 field_len; 539 u16 field_count; 540 u32 total_length; 541 542 if (ordinals->table1_addr == 0) { 543 printk(KERN_WARNING DRV_NAME ": attempt to use fw ordinals " 544 "before they have been loaded.\n"); 545 return -EINVAL; 546 } 547 548 if (IS_ORDINAL_TABLE_ONE(ordinals, ord)) { 549 if (*len < IPW_ORD_TAB_1_ENTRY_SIZE) { 550 *len = IPW_ORD_TAB_1_ENTRY_SIZE; 551 552 printk(KERN_WARNING DRV_NAME 553 ": ordinal buffer length too small, need %zd\n", 554 IPW_ORD_TAB_1_ENTRY_SIZE); 555 556 return -EINVAL; 557 } 558 559 read_nic_dword(priv->net_dev, 560 ordinals->table1_addr + (ord << 2), &addr); 561 read_nic_dword(priv->net_dev, addr, val); 562 563 *len = IPW_ORD_TAB_1_ENTRY_SIZE; 564 565 return 0; 566 } 567 568 if (IS_ORDINAL_TABLE_TWO(ordinals, ord)) { 569 570 ord -= IPW_START_ORD_TAB_2; 571 572 /* get the address of statistic */ 573 read_nic_dword(priv->net_dev, 574 ordinals->table2_addr + (ord << 3), &addr); 575 576 /* get the second DW of statistics ; 577 * two 16-bit words - first is length, second is count */ 578 read_nic_dword(priv->net_dev, 579 ordinals->table2_addr + (ord << 3) + sizeof(u32), 580 &field_info); 581 582 /* get each entry length */ 583 field_len = *((u16 *) & field_info); 584 585 /* get number of entries */ 586 field_count = *(((u16 *) & field_info) + 1); 587 588 /* abort if no enough memory */ 589 total_length = field_len * field_count; 590 if (total_length > *len) { 591 *len = total_length; 592 return -EINVAL; 593 } 594 595 *len = total_length; 596 if (!total_length) 597 return 0; 598 599 /* read the ordinal data from the SRAM */ 600 read_nic_memory(priv->net_dev, addr, total_length, val); 601 602 return 0; 603 } 604 605 printk(KERN_WARNING DRV_NAME ": ordinal %d neither in table 1 nor " 606 "in table 2\n", ord); 607 608 return -EINVAL; 609 } 610 611 static int ipw2100_set_ordinal(struct ipw2100_priv *priv, u32 ord, u32 * val, 612 u32 * len) 613 { 614 struct ipw2100_ordinals *ordinals = &priv->ordinals; 615 u32 addr; 616 617 if (IS_ORDINAL_TABLE_ONE(ordinals, ord)) { 618 if (*len != IPW_ORD_TAB_1_ENTRY_SIZE) { 619 *len = IPW_ORD_TAB_1_ENTRY_SIZE; 620 IPW_DEBUG_INFO("wrong size\n"); 621 return -EINVAL; 622 } 623 624 read_nic_dword(priv->net_dev, 625 ordinals->table1_addr + (ord << 2), &addr); 626 627 write_nic_dword(priv->net_dev, addr, *val); 628 629 *len = IPW_ORD_TAB_1_ENTRY_SIZE; 630 631 return 0; 632 } 633 634 IPW_DEBUG_INFO("wrong table\n"); 635 if (IS_ORDINAL_TABLE_TWO(ordinals, ord)) 636 return -EINVAL; 637 638 return -EINVAL; 639 } 640 641 static char *snprint_line(char *buf, size_t count, 642 const u8 * data, u32 len, u32 ofs) 643 { 644 int out, i, j, l; 645 char c; 646 647 out = snprintf(buf, count, "%08X", ofs); 648 649 for (l = 0, i = 0; i < 2; i++) { 650 out += snprintf(buf + out, count - out, " "); 651 for (j = 0; j < 8 && l < len; j++, l++) 652 out += snprintf(buf + out, count - out, "%02X ", 653 data[(i * 8 + j)]); 654 for (; j < 8; j++) 655 out += snprintf(buf + out, count - out, " "); 656 } 657 658 out += snprintf(buf + out, count - out, " "); 659 for (l = 0, i = 0; i < 2; i++) { 660 out += snprintf(buf + out, count - out, " "); 661 for (j = 0; j < 8 && l < len; j++, l++) { 662 c = data[(i * 8 + j)]; 663 if (!isascii(c) || !isprint(c)) 664 c = '.'; 665 666 out += snprintf(buf + out, count - out, "%c", c); 667 } 668 669 for (; j < 8; j++) 670 out += snprintf(buf + out, count - out, " "); 671 } 672 673 return buf; 674 } 675 676 static void printk_buf(int level, const u8 * data, u32 len) 677 { 678 char line[81]; 679 u32 ofs = 0; 680 if (!(ipw2100_debug_level & level)) 681 return; 682 683 while (len) { 684 printk(KERN_DEBUG "%s\n", 685 snprint_line(line, sizeof(line), &data[ofs], 686 min(len, 16U), ofs)); 687 ofs += 16; 688 len -= min(len, 16U); 689 } 690 } 691 692 #define MAX_RESET_BACKOFF 10 693 694 static void schedule_reset(struct ipw2100_priv *priv) 695 { 696 unsigned long now = get_seconds(); 697 698 /* If we haven't received a reset request within the backoff period, 699 * then we can reset the backoff interval so this reset occurs 700 * immediately */ 701 if (priv->reset_backoff && 702 (now - priv->last_reset > priv->reset_backoff)) 703 priv->reset_backoff = 0; 704 705 priv->last_reset = get_seconds(); 706 707 if (!(priv->status & STATUS_RESET_PENDING)) { 708 IPW_DEBUG_INFO("%s: Scheduling firmware restart (%ds).\n", 709 priv->net_dev->name, priv->reset_backoff); 710 netif_carrier_off(priv->net_dev); 711 netif_stop_queue(priv->net_dev); 712 priv->status |= STATUS_RESET_PENDING; 713 if (priv->reset_backoff) 714 schedule_delayed_work(&priv->reset_work, 715 priv->reset_backoff * HZ); 716 else 717 schedule_delayed_work(&priv->reset_work, 0); 718 719 if (priv->reset_backoff < MAX_RESET_BACKOFF) 720 priv->reset_backoff++; 721 722 wake_up_interruptible(&priv->wait_command_queue); 723 } else 724 IPW_DEBUG_INFO("%s: Firmware restart already in progress.\n", 725 priv->net_dev->name); 726 727 } 728 729 #define HOST_COMPLETE_TIMEOUT (2 * HZ) 730 static int ipw2100_hw_send_command(struct ipw2100_priv *priv, 731 struct host_command *cmd) 732 { 733 struct list_head *element; 734 struct ipw2100_tx_packet *packet; 735 unsigned long flags; 736 int err = 0; 737 738 IPW_DEBUG_HC("Sending %s command (#%d), %d bytes\n", 739 command_types[cmd->host_command], cmd->host_command, 740 cmd->host_command_length); 741 printk_buf(IPW_DL_HC, (u8 *) cmd->host_command_parameters, 742 cmd->host_command_length); 743 744 spin_lock_irqsave(&priv->low_lock, flags); 745 746 if (priv->fatal_error) { 747 IPW_DEBUG_INFO 748 ("Attempt to send command while hardware in fatal error condition.\n"); 749 err = -EIO; 750 goto fail_unlock; 751 } 752 753 if (!(priv->status & STATUS_RUNNING)) { 754 IPW_DEBUG_INFO 755 ("Attempt to send command while hardware is not running.\n"); 756 err = -EIO; 757 goto fail_unlock; 758 } 759 760 if (priv->status & STATUS_CMD_ACTIVE) { 761 IPW_DEBUG_INFO 762 ("Attempt to send command while another command is pending.\n"); 763 err = -EBUSY; 764 goto fail_unlock; 765 } 766 767 if (list_empty(&priv->msg_free_list)) { 768 IPW_DEBUG_INFO("no available msg buffers\n"); 769 goto fail_unlock; 770 } 771 772 priv->status |= STATUS_CMD_ACTIVE; 773 priv->messages_sent++; 774 775 element = priv->msg_free_list.next; 776 777 packet = list_entry(element, struct ipw2100_tx_packet, list); 778 packet->jiffy_start = jiffies; 779 780 /* initialize the firmware command packet */ 781 packet->info.c_struct.cmd->host_command_reg = cmd->host_command; 782 packet->info.c_struct.cmd->host_command_reg1 = cmd->host_command1; 783 packet->info.c_struct.cmd->host_command_len_reg = 784 cmd->host_command_length; 785 packet->info.c_struct.cmd->sequence = cmd->host_command_sequence; 786 787 memcpy(packet->info.c_struct.cmd->host_command_params_reg, 788 cmd->host_command_parameters, 789 sizeof(packet->info.c_struct.cmd->host_command_params_reg)); 790 791 list_del(element); 792 DEC_STAT(&priv->msg_free_stat); 793 794 list_add_tail(element, &priv->msg_pend_list); 795 INC_STAT(&priv->msg_pend_stat); 796 797 ipw2100_tx_send_commands(priv); 798 ipw2100_tx_send_data(priv); 799 800 spin_unlock_irqrestore(&priv->low_lock, flags); 801 802 /* 803 * We must wait for this command to complete before another 804 * command can be sent... but if we wait more than 3 seconds 805 * then there is a problem. 806 */ 807 808 err = 809 wait_event_interruptible_timeout(priv->wait_command_queue, 810 !(priv-> 811 status & STATUS_CMD_ACTIVE), 812 HOST_COMPLETE_TIMEOUT); 813 814 if (err == 0) { 815 IPW_DEBUG_INFO("Command completion failed out after %dms.\n", 816 1000 * (HOST_COMPLETE_TIMEOUT / HZ)); 817 priv->fatal_error = IPW2100_ERR_MSG_TIMEOUT; 818 priv->status &= ~STATUS_CMD_ACTIVE; 819 schedule_reset(priv); 820 return -EIO; 821 } 822 823 if (priv->fatal_error) { 824 printk(KERN_WARNING DRV_NAME ": %s: firmware fatal error\n", 825 priv->net_dev->name); 826 return -EIO; 827 } 828 829 /* !!!!! HACK TEST !!!!! 830 * When lots of debug trace statements are enabled, the driver 831 * doesn't seem to have as many firmware restart cycles... 832 * 833 * As a test, we're sticking in a 1/100s delay here */ 834 schedule_timeout_uninterruptible(msecs_to_jiffies(10)); 835 836 return 0; 837 838 fail_unlock: 839 spin_unlock_irqrestore(&priv->low_lock, flags); 840 841 return err; 842 } 843 844 /* 845 * Verify the values and data access of the hardware 846 * No locks needed or used. No functions called. 847 */ 848 static int ipw2100_verify(struct ipw2100_priv *priv) 849 { 850 u32 data1, data2; 851 u32 address; 852 853 u32 val1 = 0x76543210; 854 u32 val2 = 0xFEDCBA98; 855 856 /* Domain 0 check - all values should be DOA_DEBUG */ 857 for (address = IPW_REG_DOA_DEBUG_AREA_START; 858 address < IPW_REG_DOA_DEBUG_AREA_END; address += sizeof(u32)) { 859 read_register(priv->net_dev, address, &data1); 860 if (data1 != IPW_DATA_DOA_DEBUG_VALUE) 861 return -EIO; 862 } 863 864 /* Domain 1 check - use arbitrary read/write compare */ 865 for (address = 0; address < 5; address++) { 866 /* The memory area is not used now */ 867 write_register(priv->net_dev, IPW_REG_DOMAIN_1_OFFSET + 0x32, 868 val1); 869 write_register(priv->net_dev, IPW_REG_DOMAIN_1_OFFSET + 0x36, 870 val2); 871 read_register(priv->net_dev, IPW_REG_DOMAIN_1_OFFSET + 0x32, 872 &data1); 873 read_register(priv->net_dev, IPW_REG_DOMAIN_1_OFFSET + 0x36, 874 &data2); 875 if (val1 == data1 && val2 == data2) 876 return 0; 877 } 878 879 return -EIO; 880 } 881 882 /* 883 * 884 * Loop until the CARD_DISABLED bit is the same value as the 885 * supplied parameter 886 * 887 * TODO: See if it would be more efficient to do a wait/wake 888 * cycle and have the completion event trigger the wakeup 889 * 890 */ 891 #define IPW_CARD_DISABLE_COMPLETE_WAIT 100 // 100 milli 892 static int ipw2100_wait_for_card_state(struct ipw2100_priv *priv, int state) 893 { 894 int i; 895 u32 card_state; 896 u32 len = sizeof(card_state); 897 int err; 898 899 for (i = 0; i <= IPW_CARD_DISABLE_COMPLETE_WAIT * 1000; i += 50) { 900 err = ipw2100_get_ordinal(priv, IPW_ORD_CARD_DISABLED, 901 &card_state, &len); 902 if (err) { 903 IPW_DEBUG_INFO("Query of CARD_DISABLED ordinal " 904 "failed.\n"); 905 return 0; 906 } 907 908 /* We'll break out if either the HW state says it is 909 * in the state we want, or if HOST_COMPLETE command 910 * finishes */ 911 if ((card_state == state) || 912 ((priv->status & STATUS_ENABLED) ? 913 IPW_HW_STATE_ENABLED : IPW_HW_STATE_DISABLED) == state) { 914 if (state == IPW_HW_STATE_ENABLED) 915 priv->status |= STATUS_ENABLED; 916 else 917 priv->status &= ~STATUS_ENABLED; 918 919 return 0; 920 } 921 922 udelay(50); 923 } 924 925 IPW_DEBUG_INFO("ipw2100_wait_for_card_state to %s state timed out\n", 926 state ? "DISABLED" : "ENABLED"); 927 return -EIO; 928 } 929 930 /********************************************************************* 931 Procedure : sw_reset_and_clock 932 Purpose : Asserts s/w reset, asserts clock initialization 933 and waits for clock stabilization 934 ********************************************************************/ 935 static int sw_reset_and_clock(struct ipw2100_priv *priv) 936 { 937 int i; 938 u32 r; 939 940 // assert s/w reset 941 write_register(priv->net_dev, IPW_REG_RESET_REG, 942 IPW_AUX_HOST_RESET_REG_SW_RESET); 943 944 // wait for clock stabilization 945 for (i = 0; i < 1000; i++) { 946 udelay(IPW_WAIT_RESET_ARC_COMPLETE_DELAY); 947 948 // check clock ready bit 949 read_register(priv->net_dev, IPW_REG_RESET_REG, &r); 950 if (r & IPW_AUX_HOST_RESET_REG_PRINCETON_RESET) 951 break; 952 } 953 954 if (i == 1000) 955 return -EIO; // TODO: better error value 956 957 /* set "initialization complete" bit to move adapter to 958 * D0 state */ 959 write_register(priv->net_dev, IPW_REG_GP_CNTRL, 960 IPW_AUX_HOST_GP_CNTRL_BIT_INIT_DONE); 961 962 /* wait for clock stabilization */ 963 for (i = 0; i < 10000; i++) { 964 udelay(IPW_WAIT_CLOCK_STABILIZATION_DELAY * 4); 965 966 /* check clock ready bit */ 967 read_register(priv->net_dev, IPW_REG_GP_CNTRL, &r); 968 if (r & IPW_AUX_HOST_GP_CNTRL_BIT_CLOCK_READY) 969 break; 970 } 971 972 if (i == 10000) 973 return -EIO; /* TODO: better error value */ 974 975 /* set D0 standby bit */ 976 read_register(priv->net_dev, IPW_REG_GP_CNTRL, &r); 977 write_register(priv->net_dev, IPW_REG_GP_CNTRL, 978 r | IPW_AUX_HOST_GP_CNTRL_BIT_HOST_ALLOWS_STANDBY); 979 980 return 0; 981 } 982 983 /********************************************************************* 984 Procedure : ipw2100_download_firmware 985 Purpose : Initiaze adapter after power on. 986 The sequence is: 987 1. assert s/w reset first! 988 2. awake clocks & wait for clock stabilization 989 3. hold ARC (don't ask me why...) 990 4. load Dino ucode and reset/clock init again 991 5. zero-out shared mem 992 6. download f/w 993 *******************************************************************/ 994 static int ipw2100_download_firmware(struct ipw2100_priv *priv) 995 { 996 u32 address; 997 int err; 998 999 #ifndef CONFIG_PM 1000 /* Fetch the firmware and microcode */ 1001 struct ipw2100_fw ipw2100_firmware; 1002 #endif 1003 1004 if (priv->fatal_error) { 1005 IPW_DEBUG_ERROR("%s: ipw2100_download_firmware called after " 1006 "fatal error %d. Interface must be brought down.\n", 1007 priv->net_dev->name, priv->fatal_error); 1008 return -EINVAL; 1009 } 1010 #ifdef CONFIG_PM 1011 if (!ipw2100_firmware.version) { 1012 err = ipw2100_get_firmware(priv, &ipw2100_firmware); 1013 if (err) { 1014 IPW_DEBUG_ERROR("%s: ipw2100_get_firmware failed: %d\n", 1015 priv->net_dev->name, err); 1016 priv->fatal_error = IPW2100_ERR_FW_LOAD; 1017 goto fail; 1018 } 1019 } 1020 #else 1021 err = ipw2100_get_firmware(priv, &ipw2100_firmware); 1022 if (err) { 1023 IPW_DEBUG_ERROR("%s: ipw2100_get_firmware failed: %d\n", 1024 priv->net_dev->name, err); 1025 priv->fatal_error = IPW2100_ERR_FW_LOAD; 1026 goto fail; 1027 } 1028 #endif 1029 priv->firmware_version = ipw2100_firmware.version; 1030 1031 /* s/w reset and clock stabilization */ 1032 err = sw_reset_and_clock(priv); 1033 if (err) { 1034 IPW_DEBUG_ERROR("%s: sw_reset_and_clock failed: %d\n", 1035 priv->net_dev->name, err); 1036 goto fail; 1037 } 1038 1039 err = ipw2100_verify(priv); 1040 if (err) { 1041 IPW_DEBUG_ERROR("%s: ipw2100_verify failed: %d\n", 1042 priv->net_dev->name, err); 1043 goto fail; 1044 } 1045 1046 /* Hold ARC */ 1047 write_nic_dword(priv->net_dev, 1048 IPW_INTERNAL_REGISTER_HALT_AND_RESET, 0x80000000); 1049 1050 /* allow ARC to run */ 1051 write_register(priv->net_dev, IPW_REG_RESET_REG, 0); 1052 1053 /* load microcode */ 1054 err = ipw2100_ucode_download(priv, &ipw2100_firmware); 1055 if (err) { 1056 printk(KERN_ERR DRV_NAME ": %s: Error loading microcode: %d\n", 1057 priv->net_dev->name, err); 1058 goto fail; 1059 } 1060 1061 /* release ARC */ 1062 write_nic_dword(priv->net_dev, 1063 IPW_INTERNAL_REGISTER_HALT_AND_RESET, 0x00000000); 1064 1065 /* s/w reset and clock stabilization (again!!!) */ 1066 err = sw_reset_and_clock(priv); 1067 if (err) { 1068 printk(KERN_ERR DRV_NAME 1069 ": %s: sw_reset_and_clock failed: %d\n", 1070 priv->net_dev->name, err); 1071 goto fail; 1072 } 1073 1074 /* load f/w */ 1075 err = ipw2100_fw_download(priv, &ipw2100_firmware); 1076 if (err) { 1077 IPW_DEBUG_ERROR("%s: Error loading firmware: %d\n", 1078 priv->net_dev->name, err); 1079 goto fail; 1080 } 1081 #ifndef CONFIG_PM 1082 /* 1083 * When the .resume method of the driver is called, the other 1084 * part of the system, i.e. the ide driver could still stay in 1085 * the suspend stage. This prevents us from loading the firmware 1086 * from the disk. --YZ 1087 */ 1088 1089 /* free any storage allocated for firmware image */ 1090 ipw2100_release_firmware(priv, &ipw2100_firmware); 1091 #endif 1092 1093 /* zero out Domain 1 area indirectly (Si requirement) */ 1094 for (address = IPW_HOST_FW_SHARED_AREA0; 1095 address < IPW_HOST_FW_SHARED_AREA0_END; address += 4) 1096 write_nic_dword(priv->net_dev, address, 0); 1097 for (address = IPW_HOST_FW_SHARED_AREA1; 1098 address < IPW_HOST_FW_SHARED_AREA1_END; address += 4) 1099 write_nic_dword(priv->net_dev, address, 0); 1100 for (address = IPW_HOST_FW_SHARED_AREA2; 1101 address < IPW_HOST_FW_SHARED_AREA2_END; address += 4) 1102 write_nic_dword(priv->net_dev, address, 0); 1103 for (address = IPW_HOST_FW_SHARED_AREA3; 1104 address < IPW_HOST_FW_SHARED_AREA3_END; address += 4) 1105 write_nic_dword(priv->net_dev, address, 0); 1106 for (address = IPW_HOST_FW_INTERRUPT_AREA; 1107 address < IPW_HOST_FW_INTERRUPT_AREA_END; address += 4) 1108 write_nic_dword(priv->net_dev, address, 0); 1109 1110 return 0; 1111 1112 fail: 1113 ipw2100_release_firmware(priv, &ipw2100_firmware); 1114 return err; 1115 } 1116 1117 static inline void ipw2100_enable_interrupts(struct ipw2100_priv *priv) 1118 { 1119 if (priv->status & STATUS_INT_ENABLED) 1120 return; 1121 priv->status |= STATUS_INT_ENABLED; 1122 write_register(priv->net_dev, IPW_REG_INTA_MASK, IPW_INTERRUPT_MASK); 1123 } 1124 1125 static inline void ipw2100_disable_interrupts(struct ipw2100_priv *priv) 1126 { 1127 if (!(priv->status & STATUS_INT_ENABLED)) 1128 return; 1129 priv->status &= ~STATUS_INT_ENABLED; 1130 write_register(priv->net_dev, IPW_REG_INTA_MASK, 0x0); 1131 } 1132 1133 static void ipw2100_initialize_ordinals(struct ipw2100_priv *priv) 1134 { 1135 struct ipw2100_ordinals *ord = &priv->ordinals; 1136 1137 IPW_DEBUG_INFO("enter\n"); 1138 1139 read_register(priv->net_dev, IPW_MEM_HOST_SHARED_ORDINALS_TABLE_1, 1140 &ord->table1_addr); 1141 1142 read_register(priv->net_dev, IPW_MEM_HOST_SHARED_ORDINALS_TABLE_2, 1143 &ord->table2_addr); 1144 1145 read_nic_dword(priv->net_dev, ord->table1_addr, &ord->table1_size); 1146 read_nic_dword(priv->net_dev, ord->table2_addr, &ord->table2_size); 1147 1148 ord->table2_size &= 0x0000FFFF; 1149 1150 IPW_DEBUG_INFO("table 1 size: %d\n", ord->table1_size); 1151 IPW_DEBUG_INFO("table 2 size: %d\n", ord->table2_size); 1152 IPW_DEBUG_INFO("exit\n"); 1153 } 1154 1155 static inline void ipw2100_hw_set_gpio(struct ipw2100_priv *priv) 1156 { 1157 u32 reg = 0; 1158 /* 1159 * Set GPIO 3 writable by FW; GPIO 1 writable 1160 * by driver and enable clock 1161 */ 1162 reg = (IPW_BIT_GPIO_GPIO3_MASK | IPW_BIT_GPIO_GPIO1_ENABLE | 1163 IPW_BIT_GPIO_LED_OFF); 1164 write_register(priv->net_dev, IPW_REG_GPIO, reg); 1165 } 1166 1167 static int rf_kill_active(struct ipw2100_priv *priv) 1168 { 1169 #define MAX_RF_KILL_CHECKS 5 1170 #define RF_KILL_CHECK_DELAY 40 1171 1172 unsigned short value = 0; 1173 u32 reg = 0; 1174 int i; 1175 1176 if (!(priv->hw_features & HW_FEATURE_RFKILL)) { 1177 wiphy_rfkill_set_hw_state(priv->ieee->wdev.wiphy, false); 1178 priv->status &= ~STATUS_RF_KILL_HW; 1179 return 0; 1180 } 1181 1182 for (i = 0; i < MAX_RF_KILL_CHECKS; i++) { 1183 udelay(RF_KILL_CHECK_DELAY); 1184 read_register(priv->net_dev, IPW_REG_GPIO, &reg); 1185 value = (value << 1) | ((reg & IPW_BIT_GPIO_RF_KILL) ? 0 : 1); 1186 } 1187 1188 if (value == 0) { 1189 wiphy_rfkill_set_hw_state(priv->ieee->wdev.wiphy, true); 1190 priv->status |= STATUS_RF_KILL_HW; 1191 } else { 1192 wiphy_rfkill_set_hw_state(priv->ieee->wdev.wiphy, false); 1193 priv->status &= ~STATUS_RF_KILL_HW; 1194 } 1195 1196 return (value == 0); 1197 } 1198 1199 static int ipw2100_get_hw_features(struct ipw2100_priv *priv) 1200 { 1201 u32 addr, len; 1202 u32 val; 1203 1204 /* 1205 * EEPROM_SRAM_DB_START_ADDRESS using ordinal in ordinal table 1 1206 */ 1207 len = sizeof(addr); 1208 if (ipw2100_get_ordinal 1209 (priv, IPW_ORD_EEPROM_SRAM_DB_BLOCK_START_ADDRESS, &addr, &len)) { 1210 IPW_DEBUG_INFO("failed querying ordinals at line %d\n", 1211 __LINE__); 1212 return -EIO; 1213 } 1214 1215 IPW_DEBUG_INFO("EEPROM address: %08X\n", addr); 1216 1217 /* 1218 * EEPROM version is the byte at offset 0xfd in firmware 1219 * We read 4 bytes, then shift out the byte we actually want */ 1220 read_nic_dword(priv->net_dev, addr + 0xFC, &val); 1221 priv->eeprom_version = (val >> 24) & 0xFF; 1222 IPW_DEBUG_INFO("EEPROM version: %d\n", priv->eeprom_version); 1223 1224 /* 1225 * HW RF Kill enable is bit 0 in byte at offset 0x21 in firmware 1226 * 1227 * notice that the EEPROM bit is reverse polarity, i.e. 1228 * bit = 0 signifies HW RF kill switch is supported 1229 * bit = 1 signifies HW RF kill switch is NOT supported 1230 */ 1231 read_nic_dword(priv->net_dev, addr + 0x20, &val); 1232 if (!((val >> 24) & 0x01)) 1233 priv->hw_features |= HW_FEATURE_RFKILL; 1234 1235 IPW_DEBUG_INFO("HW RF Kill: %ssupported.\n", 1236 (priv->hw_features & HW_FEATURE_RFKILL) ? "" : "not "); 1237 1238 return 0; 1239 } 1240 1241 /* 1242 * Start firmware execution after power on and intialization 1243 * The sequence is: 1244 * 1. Release ARC 1245 * 2. Wait for f/w initialization completes; 1246 */ 1247 static int ipw2100_start_adapter(struct ipw2100_priv *priv) 1248 { 1249 int i; 1250 u32 inta, inta_mask, gpio; 1251 1252 IPW_DEBUG_INFO("enter\n"); 1253 1254 if (priv->status & STATUS_RUNNING) 1255 return 0; 1256 1257 /* 1258 * Initialize the hw - drive adapter to DO state by setting 1259 * init_done bit. Wait for clk_ready bit and Download 1260 * fw & dino ucode 1261 */ 1262 if (ipw2100_download_firmware(priv)) { 1263 printk(KERN_ERR DRV_NAME 1264 ": %s: Failed to power on the adapter.\n", 1265 priv->net_dev->name); 1266 return -EIO; 1267 } 1268 1269 /* Clear the Tx, Rx and Msg queues and the r/w indexes 1270 * in the firmware RBD and TBD ring queue */ 1271 ipw2100_queues_initialize(priv); 1272 1273 ipw2100_hw_set_gpio(priv); 1274 1275 /* TODO -- Look at disabling interrupts here to make sure none 1276 * get fired during FW initialization */ 1277 1278 /* Release ARC - clear reset bit */ 1279 write_register(priv->net_dev, IPW_REG_RESET_REG, 0); 1280 1281 /* wait for f/w intialization complete */ 1282 IPW_DEBUG_FW("Waiting for f/w initialization to complete...\n"); 1283 i = 5000; 1284 do { 1285 schedule_timeout_uninterruptible(msecs_to_jiffies(40)); 1286 /* Todo... wait for sync command ... */ 1287 1288 read_register(priv->net_dev, IPW_REG_INTA, &inta); 1289 1290 /* check "init done" bit */ 1291 if (inta & IPW2100_INTA_FW_INIT_DONE) { 1292 /* reset "init done" bit */ 1293 write_register(priv->net_dev, IPW_REG_INTA, 1294 IPW2100_INTA_FW_INIT_DONE); 1295 break; 1296 } 1297 1298 /* check error conditions : we check these after the firmware 1299 * check so that if there is an error, the interrupt handler 1300 * will see it and the adapter will be reset */ 1301 if (inta & 1302 (IPW2100_INTA_FATAL_ERROR | IPW2100_INTA_PARITY_ERROR)) { 1303 /* clear error conditions */ 1304 write_register(priv->net_dev, IPW_REG_INTA, 1305 IPW2100_INTA_FATAL_ERROR | 1306 IPW2100_INTA_PARITY_ERROR); 1307 } 1308 } while (--i); 1309 1310 /* Clear out any pending INTAs since we aren't supposed to have 1311 * interrupts enabled at this point... */ 1312 read_register(priv->net_dev, IPW_REG_INTA, &inta); 1313 read_register(priv->net_dev, IPW_REG_INTA_MASK, &inta_mask); 1314 inta &= IPW_INTERRUPT_MASK; 1315 /* Clear out any pending interrupts */ 1316 if (inta & inta_mask) 1317 write_register(priv->net_dev, IPW_REG_INTA, inta); 1318 1319 IPW_DEBUG_FW("f/w initialization complete: %s\n", 1320 i ? "SUCCESS" : "FAILED"); 1321 1322 if (!i) { 1323 printk(KERN_WARNING DRV_NAME 1324 ": %s: Firmware did not initialize.\n", 1325 priv->net_dev->name); 1326 return -EIO; 1327 } 1328 1329 /* allow firmware to write to GPIO1 & GPIO3 */ 1330 read_register(priv->net_dev, IPW_REG_GPIO, &gpio); 1331 1332 gpio |= (IPW_BIT_GPIO_GPIO1_MASK | IPW_BIT_GPIO_GPIO3_MASK); 1333 1334 write_register(priv->net_dev, IPW_REG_GPIO, gpio); 1335 1336 /* Ready to receive commands */ 1337 priv->status |= STATUS_RUNNING; 1338 1339 /* The adapter has been reset; we are not associated */ 1340 priv->status &= ~(STATUS_ASSOCIATING | STATUS_ASSOCIATED); 1341 1342 IPW_DEBUG_INFO("exit\n"); 1343 1344 return 0; 1345 } 1346 1347 static inline void ipw2100_reset_fatalerror(struct ipw2100_priv *priv) 1348 { 1349 if (!priv->fatal_error) 1350 return; 1351 1352 priv->fatal_errors[priv->fatal_index++] = priv->fatal_error; 1353 priv->fatal_index %= IPW2100_ERROR_QUEUE; 1354 priv->fatal_error = 0; 1355 } 1356 1357 /* NOTE: Our interrupt is disabled when this method is called */ 1358 static int ipw2100_power_cycle_adapter(struct ipw2100_priv *priv) 1359 { 1360 u32 reg; 1361 int i; 1362 1363 IPW_DEBUG_INFO("Power cycling the hardware.\n"); 1364 1365 ipw2100_hw_set_gpio(priv); 1366 1367 /* Step 1. Stop Master Assert */ 1368 write_register(priv->net_dev, IPW_REG_RESET_REG, 1369 IPW_AUX_HOST_RESET_REG_STOP_MASTER); 1370 1371 /* Step 2. Wait for stop Master Assert 1372 * (not more than 50us, otherwise ret error */ 1373 i = 5; 1374 do { 1375 udelay(IPW_WAIT_RESET_MASTER_ASSERT_COMPLETE_DELAY); 1376 read_register(priv->net_dev, IPW_REG_RESET_REG, &reg); 1377 1378 if (reg & IPW_AUX_HOST_RESET_REG_MASTER_DISABLED) 1379 break; 1380 } while (--i); 1381 1382 priv->status &= ~STATUS_RESET_PENDING; 1383 1384 if (!i) { 1385 IPW_DEBUG_INFO 1386 ("exit - waited too long for master assert stop\n"); 1387 return -EIO; 1388 } 1389 1390 write_register(priv->net_dev, IPW_REG_RESET_REG, 1391 IPW_AUX_HOST_RESET_REG_SW_RESET); 1392 1393 /* Reset any fatal_error conditions */ 1394 ipw2100_reset_fatalerror(priv); 1395 1396 /* At this point, the adapter is now stopped and disabled */ 1397 priv->status &= ~(STATUS_RUNNING | STATUS_ASSOCIATING | 1398 STATUS_ASSOCIATED | STATUS_ENABLED); 1399 1400 return 0; 1401 } 1402 1403 /* 1404 * Send the CARD_DISABLE_PHY_OFF command to the card to disable it 1405 * 1406 * After disabling, if the card was associated, a STATUS_ASSN_LOST will be sent. 1407 * 1408 * STATUS_CARD_DISABLE_NOTIFICATION will be sent regardless of 1409 * if STATUS_ASSN_LOST is sent. 1410 */ 1411 static int ipw2100_hw_phy_off(struct ipw2100_priv *priv) 1412 { 1413 1414 #define HW_PHY_OFF_LOOP_DELAY (HZ / 5000) 1415 1416 struct host_command cmd = { 1417 .host_command = CARD_DISABLE_PHY_OFF, 1418 .host_command_sequence = 0, 1419 .host_command_length = 0, 1420 }; 1421 int err, i; 1422 u32 val1, val2; 1423 1424 IPW_DEBUG_HC("CARD_DISABLE_PHY_OFF\n"); 1425 1426 /* Turn off the radio */ 1427 err = ipw2100_hw_send_command(priv, &cmd); 1428 if (err) 1429 return err; 1430 1431 for (i = 0; i < 2500; i++) { 1432 read_nic_dword(priv->net_dev, IPW2100_CONTROL_REG, &val1); 1433 read_nic_dword(priv->net_dev, IPW2100_COMMAND, &val2); 1434 1435 if ((val1 & IPW2100_CONTROL_PHY_OFF) && 1436 (val2 & IPW2100_COMMAND_PHY_OFF)) 1437 return 0; 1438 1439 schedule_timeout_uninterruptible(HW_PHY_OFF_LOOP_DELAY); 1440 } 1441 1442 return -EIO; 1443 } 1444 1445 static int ipw2100_enable_adapter(struct ipw2100_priv *priv) 1446 { 1447 struct host_command cmd = { 1448 .host_command = HOST_COMPLETE, 1449 .host_command_sequence = 0, 1450 .host_command_length = 0 1451 }; 1452 int err = 0; 1453 1454 IPW_DEBUG_HC("HOST_COMPLETE\n"); 1455 1456 if (priv->status & STATUS_ENABLED) 1457 return 0; 1458 1459 mutex_lock(&priv->adapter_mutex); 1460 1461 if (rf_kill_active(priv)) { 1462 IPW_DEBUG_HC("Command aborted due to RF kill active.\n"); 1463 goto fail_up; 1464 } 1465 1466 err = ipw2100_hw_send_command(priv, &cmd); 1467 if (err) { 1468 IPW_DEBUG_INFO("Failed to send HOST_COMPLETE command\n"); 1469 goto fail_up; 1470 } 1471 1472 err = ipw2100_wait_for_card_state(priv, IPW_HW_STATE_ENABLED); 1473 if (err) { 1474 IPW_DEBUG_INFO("%s: card not responding to init command.\n", 1475 priv->net_dev->name); 1476 goto fail_up; 1477 } 1478 1479 if (priv->stop_hang_check) { 1480 priv->stop_hang_check = 0; 1481 schedule_delayed_work(&priv->hang_check, HZ / 2); 1482 } 1483 1484 fail_up: 1485 mutex_unlock(&priv->adapter_mutex); 1486 return err; 1487 } 1488 1489 static int ipw2100_hw_stop_adapter(struct ipw2100_priv *priv) 1490 { 1491 #define HW_POWER_DOWN_DELAY (msecs_to_jiffies(100)) 1492 1493 struct host_command cmd = { 1494 .host_command = HOST_PRE_POWER_DOWN, 1495 .host_command_sequence = 0, 1496 .host_command_length = 0, 1497 }; 1498 int err, i; 1499 u32 reg; 1500 1501 if (!(priv->status & STATUS_RUNNING)) 1502 return 0; 1503 1504 priv->status |= STATUS_STOPPING; 1505 1506 /* We can only shut down the card if the firmware is operational. So, 1507 * if we haven't reset since a fatal_error, then we can not send the 1508 * shutdown commands. */ 1509 if (!priv->fatal_error) { 1510 /* First, make sure the adapter is enabled so that the PHY_OFF 1511 * command can shut it down */ 1512 ipw2100_enable_adapter(priv); 1513 1514 err = ipw2100_hw_phy_off(priv); 1515 if (err) 1516 printk(KERN_WARNING DRV_NAME 1517 ": Error disabling radio %d\n", err); 1518 1519 /* 1520 * If in D0-standby mode going directly to D3 may cause a 1521 * PCI bus violation. Therefore we must change out of the D0 1522 * state. 1523 * 1524 * Sending the PREPARE_FOR_POWER_DOWN will restrict the 1525 * hardware from going into standby mode and will transition 1526 * out of D0-standby if it is already in that state. 1527 * 1528 * STATUS_PREPARE_POWER_DOWN_COMPLETE will be sent by the 1529 * driver upon completion. Once received, the driver can 1530 * proceed to the D3 state. 1531 * 1532 * Prepare for power down command to fw. This command would 1533 * take HW out of D0-standby and prepare it for D3 state. 1534 * 1535 * Currently FW does not support event notification for this 1536 * event. Therefore, skip waiting for it. Just wait a fixed 1537 * 100ms 1538 */ 1539 IPW_DEBUG_HC("HOST_PRE_POWER_DOWN\n"); 1540 1541 err = ipw2100_hw_send_command(priv, &cmd); 1542 if (err) 1543 printk(KERN_WARNING DRV_NAME ": " 1544 "%s: Power down command failed: Error %d\n", 1545 priv->net_dev->name, err); 1546 else 1547 schedule_timeout_uninterruptible(HW_POWER_DOWN_DELAY); 1548 } 1549 1550 priv->status &= ~STATUS_ENABLED; 1551 1552 /* 1553 * Set GPIO 3 writable by FW; GPIO 1 writable 1554 * by driver and enable clock 1555 */ 1556 ipw2100_hw_set_gpio(priv); 1557 1558 /* 1559 * Power down adapter. Sequence: 1560 * 1. Stop master assert (RESET_REG[9]=1) 1561 * 2. Wait for stop master (RESET_REG[8]==1) 1562 * 3. S/w reset assert (RESET_REG[7] = 1) 1563 */ 1564 1565 /* Stop master assert */ 1566 write_register(priv->net_dev, IPW_REG_RESET_REG, 1567 IPW_AUX_HOST_RESET_REG_STOP_MASTER); 1568 1569 /* wait stop master not more than 50 usec. 1570 * Otherwise return error. */ 1571 for (i = 5; i > 0; i--) { 1572 udelay(10); 1573 1574 /* Check master stop bit */ 1575 read_register(priv->net_dev, IPW_REG_RESET_REG, &reg); 1576 1577 if (reg & IPW_AUX_HOST_RESET_REG_MASTER_DISABLED) 1578 break; 1579 } 1580 1581 if (i == 0) 1582 printk(KERN_WARNING DRV_NAME 1583 ": %s: Could now power down adapter.\n", 1584 priv->net_dev->name); 1585 1586 /* assert s/w reset */ 1587 write_register(priv->net_dev, IPW_REG_RESET_REG, 1588 IPW_AUX_HOST_RESET_REG_SW_RESET); 1589 1590 priv->status &= ~(STATUS_RUNNING | STATUS_STOPPING); 1591 1592 return 0; 1593 } 1594 1595 static int ipw2100_disable_adapter(struct ipw2100_priv *priv) 1596 { 1597 struct host_command cmd = { 1598 .host_command = CARD_DISABLE, 1599 .host_command_sequence = 0, 1600 .host_command_length = 0 1601 }; 1602 int err = 0; 1603 1604 IPW_DEBUG_HC("CARD_DISABLE\n"); 1605 1606 if (!(priv->status & STATUS_ENABLED)) 1607 return 0; 1608 1609 /* Make sure we clear the associated state */ 1610 priv->status &= ~(STATUS_ASSOCIATED | STATUS_ASSOCIATING); 1611 1612 if (!priv->stop_hang_check) { 1613 priv->stop_hang_check = 1; 1614 cancel_delayed_work(&priv->hang_check); 1615 } 1616 1617 mutex_lock(&priv->adapter_mutex); 1618 1619 err = ipw2100_hw_send_command(priv, &cmd); 1620 if (err) { 1621 printk(KERN_WARNING DRV_NAME 1622 ": exit - failed to send CARD_DISABLE command\n"); 1623 goto fail_up; 1624 } 1625 1626 err = ipw2100_wait_for_card_state(priv, IPW_HW_STATE_DISABLED); 1627 if (err) { 1628 printk(KERN_WARNING DRV_NAME 1629 ": exit - card failed to change to DISABLED\n"); 1630 goto fail_up; 1631 } 1632 1633 IPW_DEBUG_INFO("TODO: implement scan state machine\n"); 1634 1635 fail_up: 1636 mutex_unlock(&priv->adapter_mutex); 1637 return err; 1638 } 1639 1640 static int ipw2100_set_scan_options(struct ipw2100_priv *priv) 1641 { 1642 struct host_command cmd = { 1643 .host_command = SET_SCAN_OPTIONS, 1644 .host_command_sequence = 0, 1645 .host_command_length = 8 1646 }; 1647 int err; 1648 1649 IPW_DEBUG_INFO("enter\n"); 1650 1651 IPW_DEBUG_SCAN("setting scan options\n"); 1652 1653 cmd.host_command_parameters[0] = 0; 1654 1655 if (!(priv->config & CFG_ASSOCIATE)) 1656 cmd.host_command_parameters[0] |= IPW_SCAN_NOASSOCIATE; 1657 if ((priv->ieee->sec.flags & SEC_ENABLED) && priv->ieee->sec.enabled) 1658 cmd.host_command_parameters[0] |= IPW_SCAN_MIXED_CELL; 1659 if (priv->config & CFG_PASSIVE_SCAN) 1660 cmd.host_command_parameters[0] |= IPW_SCAN_PASSIVE; 1661 1662 cmd.host_command_parameters[1] = priv->channel_mask; 1663 1664 err = ipw2100_hw_send_command(priv, &cmd); 1665 1666 IPW_DEBUG_HC("SET_SCAN_OPTIONS 0x%04X\n", 1667 cmd.host_command_parameters[0]); 1668 1669 return err; 1670 } 1671 1672 static int ipw2100_start_scan(struct ipw2100_priv *priv) 1673 { 1674 struct host_command cmd = { 1675 .host_command = BROADCAST_SCAN, 1676 .host_command_sequence = 0, 1677 .host_command_length = 4 1678 }; 1679 int err; 1680 1681 IPW_DEBUG_HC("START_SCAN\n"); 1682 1683 cmd.host_command_parameters[0] = 0; 1684 1685 /* No scanning if in monitor mode */ 1686 if (priv->ieee->iw_mode == IW_MODE_MONITOR) 1687 return 1; 1688 1689 if (priv->status & STATUS_SCANNING) { 1690 IPW_DEBUG_SCAN("Scan requested while already in scan...\n"); 1691 return 0; 1692 } 1693 1694 IPW_DEBUG_INFO("enter\n"); 1695 1696 /* Not clearing here; doing so makes iwlist always return nothing... 1697 * 1698 * We should modify the table logic to use aging tables vs. clearing 1699 * the table on each scan start. 1700 */ 1701 IPW_DEBUG_SCAN("starting scan\n"); 1702 1703 priv->status |= STATUS_SCANNING; 1704 err = ipw2100_hw_send_command(priv, &cmd); 1705 if (err) 1706 priv->status &= ~STATUS_SCANNING; 1707 1708 IPW_DEBUG_INFO("exit\n"); 1709 1710 return err; 1711 } 1712 1713 static const struct libipw_geo ipw_geos[] = { 1714 { /* Restricted */ 1715 "---", 1716 .bg_channels = 14, 1717 .bg = {{2412, 1}, {2417, 2}, {2422, 3}, 1718 {2427, 4}, {2432, 5}, {2437, 6}, 1719 {2442, 7}, {2447, 8}, {2452, 9}, 1720 {2457, 10}, {2462, 11}, {2467, 12}, 1721 {2472, 13}, {2484, 14}}, 1722 }, 1723 }; 1724 1725 static int ipw2100_up(struct ipw2100_priv *priv, int deferred) 1726 { 1727 unsigned long flags; 1728 int rc = 0; 1729 u32 lock; 1730 u32 ord_len = sizeof(lock); 1731 1732 /* Age scan list entries found before suspend */ 1733 if (priv->suspend_time) { 1734 libipw_networks_age(priv->ieee, priv->suspend_time); 1735 priv->suspend_time = 0; 1736 } 1737 1738 /* Quiet if manually disabled. */ 1739 if (priv->status & STATUS_RF_KILL_SW) { 1740 IPW_DEBUG_INFO("%s: Radio is disabled by Manual Disable " 1741 "switch\n", priv->net_dev->name); 1742 return 0; 1743 } 1744 1745 /* the ipw2100 hardware really doesn't want power management delays 1746 * longer than 175usec 1747 */ 1748 pm_qos_update_request(&ipw2100_pm_qos_req, 175); 1749 1750 /* If the interrupt is enabled, turn it off... */ 1751 spin_lock_irqsave(&priv->low_lock, flags); 1752 ipw2100_disable_interrupts(priv); 1753 1754 /* Reset any fatal_error conditions */ 1755 ipw2100_reset_fatalerror(priv); 1756 spin_unlock_irqrestore(&priv->low_lock, flags); 1757 1758 if (priv->status & STATUS_POWERED || 1759 (priv->status & STATUS_RESET_PENDING)) { 1760 /* Power cycle the card ... */ 1761 if (ipw2100_power_cycle_adapter(priv)) { 1762 printk(KERN_WARNING DRV_NAME 1763 ": %s: Could not cycle adapter.\n", 1764 priv->net_dev->name); 1765 rc = 1; 1766 goto exit; 1767 } 1768 } else 1769 priv->status |= STATUS_POWERED; 1770 1771 /* Load the firmware, start the clocks, etc. */ 1772 if (ipw2100_start_adapter(priv)) { 1773 printk(KERN_ERR DRV_NAME 1774 ": %s: Failed to start the firmware.\n", 1775 priv->net_dev->name); 1776 rc = 1; 1777 goto exit; 1778 } 1779 1780 ipw2100_initialize_ordinals(priv); 1781 1782 /* Determine capabilities of this particular HW configuration */ 1783 if (ipw2100_get_hw_features(priv)) { 1784 printk(KERN_ERR DRV_NAME 1785 ": %s: Failed to determine HW features.\n", 1786 priv->net_dev->name); 1787 rc = 1; 1788 goto exit; 1789 } 1790 1791 /* Initialize the geo */ 1792 libipw_set_geo(priv->ieee, &ipw_geos[0]); 1793 priv->ieee->freq_band = LIBIPW_24GHZ_BAND; 1794 1795 lock = LOCK_NONE; 1796 if (ipw2100_set_ordinal(priv, IPW_ORD_PERS_DB_LOCK, &lock, &ord_len)) { 1797 printk(KERN_ERR DRV_NAME 1798 ": %s: Failed to clear ordinal lock.\n", 1799 priv->net_dev->name); 1800 rc = 1; 1801 goto exit; 1802 } 1803 1804 priv->status &= ~STATUS_SCANNING; 1805 1806 if (rf_kill_active(priv)) { 1807 printk(KERN_INFO "%s: Radio is disabled by RF switch.\n", 1808 priv->net_dev->name); 1809 1810 if (priv->stop_rf_kill) { 1811 priv->stop_rf_kill = 0; 1812 schedule_delayed_work(&priv->rf_kill, 1813 round_jiffies_relative(HZ)); 1814 } 1815 1816 deferred = 1; 1817 } 1818 1819 /* Turn on the interrupt so that commands can be processed */ 1820 ipw2100_enable_interrupts(priv); 1821 1822 /* Send all of the commands that must be sent prior to 1823 * HOST_COMPLETE */ 1824 if (ipw2100_adapter_setup(priv)) { 1825 printk(KERN_ERR DRV_NAME ": %s: Failed to start the card.\n", 1826 priv->net_dev->name); 1827 rc = 1; 1828 goto exit; 1829 } 1830 1831 if (!deferred) { 1832 /* Enable the adapter - sends HOST_COMPLETE */ 1833 if (ipw2100_enable_adapter(priv)) { 1834 printk(KERN_ERR DRV_NAME ": " 1835 "%s: failed in call to enable adapter.\n", 1836 priv->net_dev->name); 1837 ipw2100_hw_stop_adapter(priv); 1838 rc = 1; 1839 goto exit; 1840 } 1841 1842 /* Start a scan . . . */ 1843 ipw2100_set_scan_options(priv); 1844 ipw2100_start_scan(priv); 1845 } 1846 1847 exit: 1848 return rc; 1849 } 1850 1851 static void ipw2100_down(struct ipw2100_priv *priv) 1852 { 1853 unsigned long flags; 1854 union iwreq_data wrqu = { 1855 .ap_addr = { 1856 .sa_family = ARPHRD_ETHER} 1857 }; 1858 int associated = priv->status & STATUS_ASSOCIATED; 1859 1860 /* Kill the RF switch timer */ 1861 if (!priv->stop_rf_kill) { 1862 priv->stop_rf_kill = 1; 1863 cancel_delayed_work(&priv->rf_kill); 1864 } 1865 1866 /* Kill the firmware hang check timer */ 1867 if (!priv->stop_hang_check) { 1868 priv->stop_hang_check = 1; 1869 cancel_delayed_work(&priv->hang_check); 1870 } 1871 1872 /* Kill any pending resets */ 1873 if (priv->status & STATUS_RESET_PENDING) 1874 cancel_delayed_work(&priv->reset_work); 1875 1876 /* Make sure the interrupt is on so that FW commands will be 1877 * processed correctly */ 1878 spin_lock_irqsave(&priv->low_lock, flags); 1879 ipw2100_enable_interrupts(priv); 1880 spin_unlock_irqrestore(&priv->low_lock, flags); 1881 1882 if (ipw2100_hw_stop_adapter(priv)) 1883 printk(KERN_ERR DRV_NAME ": %s: Error stopping adapter.\n", 1884 priv->net_dev->name); 1885 1886 /* Do not disable the interrupt until _after_ we disable 1887 * the adaptor. Otherwise the CARD_DISABLE command will never 1888 * be ack'd by the firmware */ 1889 spin_lock_irqsave(&priv->low_lock, flags); 1890 ipw2100_disable_interrupts(priv); 1891 spin_unlock_irqrestore(&priv->low_lock, flags); 1892 1893 pm_qos_update_request(&ipw2100_pm_qos_req, PM_QOS_DEFAULT_VALUE); 1894 1895 /* We have to signal any supplicant if we are disassociating */ 1896 if (associated) 1897 wireless_send_event(priv->net_dev, SIOCGIWAP, &wrqu, NULL); 1898 1899 priv->status &= ~(STATUS_ASSOCIATED | STATUS_ASSOCIATING); 1900 netif_carrier_off(priv->net_dev); 1901 netif_stop_queue(priv->net_dev); 1902 } 1903 1904 static int ipw2100_wdev_init(struct net_device *dev) 1905 { 1906 struct ipw2100_priv *priv = libipw_priv(dev); 1907 const struct libipw_geo *geo = libipw_get_geo(priv->ieee); 1908 struct wireless_dev *wdev = &priv->ieee->wdev; 1909 int i; 1910 1911 memcpy(wdev->wiphy->perm_addr, priv->mac_addr, ETH_ALEN); 1912 1913 /* fill-out priv->ieee->bg_band */ 1914 if (geo->bg_channels) { 1915 struct ieee80211_supported_band *bg_band = &priv->ieee->bg_band; 1916 1917 bg_band->band = IEEE80211_BAND_2GHZ; 1918 bg_band->n_channels = geo->bg_channels; 1919 bg_band->channels = kcalloc(geo->bg_channels, 1920 sizeof(struct ieee80211_channel), 1921 GFP_KERNEL); 1922 if (!bg_band->channels) { 1923 ipw2100_down(priv); 1924 return -ENOMEM; 1925 } 1926 /* translate geo->bg to bg_band.channels */ 1927 for (i = 0; i < geo->bg_channels; i++) { 1928 bg_band->channels[i].band = IEEE80211_BAND_2GHZ; 1929 bg_band->channels[i].center_freq = geo->bg[i].freq; 1930 bg_band->channels[i].hw_value = geo->bg[i].channel; 1931 bg_band->channels[i].max_power = geo->bg[i].max_power; 1932 if (geo->bg[i].flags & LIBIPW_CH_PASSIVE_ONLY) 1933 bg_band->channels[i].flags |= 1934 IEEE80211_CHAN_NO_IR; 1935 if (geo->bg[i].flags & LIBIPW_CH_NO_IBSS) 1936 bg_band->channels[i].flags |= 1937 IEEE80211_CHAN_NO_IR; 1938 if (geo->bg[i].flags & LIBIPW_CH_RADAR_DETECT) 1939 bg_band->channels[i].flags |= 1940 IEEE80211_CHAN_RADAR; 1941 /* No equivalent for LIBIPW_CH_80211H_RULES, 1942 LIBIPW_CH_UNIFORM_SPREADING, or 1943 LIBIPW_CH_B_ONLY... */ 1944 } 1945 /* point at bitrate info */ 1946 bg_band->bitrates = ipw2100_bg_rates; 1947 bg_band->n_bitrates = RATE_COUNT; 1948 1949 wdev->wiphy->bands[IEEE80211_BAND_2GHZ] = bg_band; 1950 } 1951 1952 wdev->wiphy->cipher_suites = ipw_cipher_suites; 1953 wdev->wiphy->n_cipher_suites = ARRAY_SIZE(ipw_cipher_suites); 1954 1955 set_wiphy_dev(wdev->wiphy, &priv->pci_dev->dev); 1956 if (wiphy_register(wdev->wiphy)) 1957 return -EIO; 1958 return 0; 1959 } 1960 1961 static void ipw2100_reset_adapter(struct work_struct *work) 1962 { 1963 struct ipw2100_priv *priv = 1964 container_of(work, struct ipw2100_priv, reset_work.work); 1965 unsigned long flags; 1966 union iwreq_data wrqu = { 1967 .ap_addr = { 1968 .sa_family = ARPHRD_ETHER} 1969 }; 1970 int associated = priv->status & STATUS_ASSOCIATED; 1971 1972 spin_lock_irqsave(&priv->low_lock, flags); 1973 IPW_DEBUG_INFO(": %s: Restarting adapter.\n", priv->net_dev->name); 1974 priv->resets++; 1975 priv->status &= ~(STATUS_ASSOCIATED | STATUS_ASSOCIATING); 1976 priv->status |= STATUS_SECURITY_UPDATED; 1977 1978 /* Force a power cycle even if interface hasn't been opened 1979 * yet */ 1980 cancel_delayed_work(&priv->reset_work); 1981 priv->status |= STATUS_RESET_PENDING; 1982 spin_unlock_irqrestore(&priv->low_lock, flags); 1983 1984 mutex_lock(&priv->action_mutex); 1985 /* stop timed checks so that they don't interfere with reset */ 1986 priv->stop_hang_check = 1; 1987 cancel_delayed_work(&priv->hang_check); 1988 1989 /* We have to signal any supplicant if we are disassociating */ 1990 if (associated) 1991 wireless_send_event(priv->net_dev, SIOCGIWAP, &wrqu, NULL); 1992 1993 ipw2100_up(priv, 0); 1994 mutex_unlock(&priv->action_mutex); 1995 1996 } 1997 1998 static void isr_indicate_associated(struct ipw2100_priv *priv, u32 status) 1999 { 2000 2001 #define MAC_ASSOCIATION_READ_DELAY (HZ) 2002 int ret; 2003 unsigned int len, essid_len; 2004 char essid[IW_ESSID_MAX_SIZE]; 2005 u32 txrate; 2006 u32 chan; 2007 char *txratename; 2008 u8 bssid[ETH_ALEN]; 2009 DECLARE_SSID_BUF(ssid); 2010 2011 /* 2012 * TBD: BSSID is usually 00:00:00:00:00:00 here and not 2013 * an actual MAC of the AP. Seems like FW sets this 2014 * address too late. Read it later and expose through 2015 * /proc or schedule a later task to query and update 2016 */ 2017 2018 essid_len = IW_ESSID_MAX_SIZE; 2019 ret = ipw2100_get_ordinal(priv, IPW_ORD_STAT_ASSN_SSID, 2020 essid, &essid_len); 2021 if (ret) { 2022 IPW_DEBUG_INFO("failed querying ordinals at line %d\n", 2023 __LINE__); 2024 return; 2025 } 2026 2027 len = sizeof(u32); 2028 ret = ipw2100_get_ordinal(priv, IPW_ORD_CURRENT_TX_RATE, &txrate, &len); 2029 if (ret) { 2030 IPW_DEBUG_INFO("failed querying ordinals at line %d\n", 2031 __LINE__); 2032 return; 2033 } 2034 2035 len = sizeof(u32); 2036 ret = ipw2100_get_ordinal(priv, IPW_ORD_OUR_FREQ, &chan, &len); 2037 if (ret) { 2038 IPW_DEBUG_INFO("failed querying ordinals at line %d\n", 2039 __LINE__); 2040 return; 2041 } 2042 len = ETH_ALEN; 2043 ret = ipw2100_get_ordinal(priv, IPW_ORD_STAT_ASSN_AP_BSSID, bssid, 2044 &len); 2045 if (ret) { 2046 IPW_DEBUG_INFO("failed querying ordinals at line %d\n", 2047 __LINE__); 2048 return; 2049 } 2050 memcpy(priv->ieee->bssid, bssid, ETH_ALEN); 2051 2052 switch (txrate) { 2053 case TX_RATE_1_MBIT: 2054 txratename = "1Mbps"; 2055 break; 2056 case TX_RATE_2_MBIT: 2057 txratename = "2Mbsp"; 2058 break; 2059 case TX_RATE_5_5_MBIT: 2060 txratename = "5.5Mbps"; 2061 break; 2062 case TX_RATE_11_MBIT: 2063 txratename = "11Mbps"; 2064 break; 2065 default: 2066 IPW_DEBUG_INFO("Unknown rate: %d\n", txrate); 2067 txratename = "unknown rate"; 2068 break; 2069 } 2070 2071 IPW_DEBUG_INFO("%s: Associated with '%s' at %s, channel %d (BSSID=%pM)\n", 2072 priv->net_dev->name, print_ssid(ssid, essid, essid_len), 2073 txratename, chan, bssid); 2074 2075 /* now we copy read ssid into dev */ 2076 if (!(priv->config & CFG_STATIC_ESSID)) { 2077 priv->essid_len = min((u8) essid_len, (u8) IW_ESSID_MAX_SIZE); 2078 memcpy(priv->essid, essid, priv->essid_len); 2079 } 2080 priv->channel = chan; 2081 memcpy(priv->bssid, bssid, ETH_ALEN); 2082 2083 priv->status |= STATUS_ASSOCIATING; 2084 priv->connect_start = get_seconds(); 2085 2086 schedule_delayed_work(&priv->wx_event_work, HZ / 10); 2087 } 2088 2089 static int ipw2100_set_essid(struct ipw2100_priv *priv, char *essid, 2090 int length, int batch_mode) 2091 { 2092 int ssid_len = min(length, IW_ESSID_MAX_SIZE); 2093 struct host_command cmd = { 2094 .host_command = SSID, 2095 .host_command_sequence = 0, 2096 .host_command_length = ssid_len 2097 }; 2098 int err; 2099 DECLARE_SSID_BUF(ssid); 2100 2101 IPW_DEBUG_HC("SSID: '%s'\n", print_ssid(ssid, essid, ssid_len)); 2102 2103 if (ssid_len) 2104 memcpy(cmd.host_command_parameters, essid, ssid_len); 2105 2106 if (!batch_mode) { 2107 err = ipw2100_disable_adapter(priv); 2108 if (err) 2109 return err; 2110 } 2111 2112 /* Bug in FW currently doesn't honor bit 0 in SET_SCAN_OPTIONS to 2113 * disable auto association -- so we cheat by setting a bogus SSID */ 2114 if (!ssid_len && !(priv->config & CFG_ASSOCIATE)) { 2115 int i; 2116 u8 *bogus = (u8 *) cmd.host_command_parameters; 2117 for (i = 0; i < IW_ESSID_MAX_SIZE; i++) 2118 bogus[i] = 0x18 + i; 2119 cmd.host_command_length = IW_ESSID_MAX_SIZE; 2120 } 2121 2122 /* NOTE: We always send the SSID command even if the provided ESSID is 2123 * the same as what we currently think is set. */ 2124 2125 err = ipw2100_hw_send_command(priv, &cmd); 2126 if (!err) { 2127 memset(priv->essid + ssid_len, 0, IW_ESSID_MAX_SIZE - ssid_len); 2128 memcpy(priv->essid, essid, ssid_len); 2129 priv->essid_len = ssid_len; 2130 } 2131 2132 if (!batch_mode) { 2133 if (ipw2100_enable_adapter(priv)) 2134 err = -EIO; 2135 } 2136 2137 return err; 2138 } 2139 2140 static void isr_indicate_association_lost(struct ipw2100_priv *priv, u32 status) 2141 { 2142 DECLARE_SSID_BUF(ssid); 2143 2144 IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC, 2145 "disassociated: '%s' %pM\n", 2146 print_ssid(ssid, priv->essid, priv->essid_len), 2147 priv->bssid); 2148 2149 priv->status &= ~(STATUS_ASSOCIATED | STATUS_ASSOCIATING); 2150 2151 if (priv->status & STATUS_STOPPING) { 2152 IPW_DEBUG_INFO("Card is stopping itself, discard ASSN_LOST.\n"); 2153 return; 2154 } 2155 2156 memset(priv->bssid, 0, ETH_ALEN); 2157 memset(priv->ieee->bssid, 0, ETH_ALEN); 2158 2159 netif_carrier_off(priv->net_dev); 2160 netif_stop_queue(priv->net_dev); 2161 2162 if (!(priv->status & STATUS_RUNNING)) 2163 return; 2164 2165 if (priv->status & STATUS_SECURITY_UPDATED) 2166 schedule_delayed_work(&priv->security_work, 0); 2167 2168 schedule_delayed_work(&priv->wx_event_work, 0); 2169 } 2170 2171 static void isr_indicate_rf_kill(struct ipw2100_priv *priv, u32 status) 2172 { 2173 IPW_DEBUG_INFO("%s: RF Kill state changed to radio OFF.\n", 2174 priv->net_dev->name); 2175 2176 /* RF_KILL is now enabled (else we wouldn't be here) */ 2177 wiphy_rfkill_set_hw_state(priv->ieee->wdev.wiphy, true); 2178 priv->status |= STATUS_RF_KILL_HW; 2179 2180 /* Make sure the RF Kill check timer is running */ 2181 priv->stop_rf_kill = 0; 2182 mod_delayed_work(system_wq, &priv->rf_kill, round_jiffies_relative(HZ)); 2183 } 2184 2185 static void ipw2100_scan_event(struct work_struct *work) 2186 { 2187 struct ipw2100_priv *priv = container_of(work, struct ipw2100_priv, 2188 scan_event.work); 2189 union iwreq_data wrqu; 2190 2191 wrqu.data.length = 0; 2192 wrqu.data.flags = 0; 2193 wireless_send_event(priv->net_dev, SIOCGIWSCAN, &wrqu, NULL); 2194 } 2195 2196 static void isr_scan_complete(struct ipw2100_priv *priv, u32 status) 2197 { 2198 IPW_DEBUG_SCAN("scan complete\n"); 2199 /* Age the scan results... */ 2200 priv->ieee->scans++; 2201 priv->status &= ~STATUS_SCANNING; 2202 2203 /* Only userspace-requested scan completion events go out immediately */ 2204 if (!priv->user_requested_scan) { 2205 schedule_delayed_work(&priv->scan_event, 2206 round_jiffies_relative(msecs_to_jiffies(4000))); 2207 } else { 2208 priv->user_requested_scan = 0; 2209 mod_delayed_work(system_wq, &priv->scan_event, 0); 2210 } 2211 } 2212 2213 #ifdef CONFIG_IPW2100_DEBUG 2214 #define IPW2100_HANDLER(v, f) { v, f, # v } 2215 struct ipw2100_status_indicator { 2216 int status; 2217 void (*cb) (struct ipw2100_priv * priv, u32 status); 2218 char *name; 2219 }; 2220 #else 2221 #define IPW2100_HANDLER(v, f) { v, f } 2222 struct ipw2100_status_indicator { 2223 int status; 2224 void (*cb) (struct ipw2100_priv * priv, u32 status); 2225 }; 2226 #endif /* CONFIG_IPW2100_DEBUG */ 2227 2228 static void isr_indicate_scanning(struct ipw2100_priv *priv, u32 status) 2229 { 2230 IPW_DEBUG_SCAN("Scanning...\n"); 2231 priv->status |= STATUS_SCANNING; 2232 } 2233 2234 static const struct ipw2100_status_indicator status_handlers[] = { 2235 IPW2100_HANDLER(IPW_STATE_INITIALIZED, NULL), 2236 IPW2100_HANDLER(IPW_STATE_COUNTRY_FOUND, NULL), 2237 IPW2100_HANDLER(IPW_STATE_ASSOCIATED, isr_indicate_associated), 2238 IPW2100_HANDLER(IPW_STATE_ASSN_LOST, isr_indicate_association_lost), 2239 IPW2100_HANDLER(IPW_STATE_ASSN_CHANGED, NULL), 2240 IPW2100_HANDLER(IPW_STATE_SCAN_COMPLETE, isr_scan_complete), 2241 IPW2100_HANDLER(IPW_STATE_ENTERED_PSP, NULL), 2242 IPW2100_HANDLER(IPW_STATE_LEFT_PSP, NULL), 2243 IPW2100_HANDLER(IPW_STATE_RF_KILL, isr_indicate_rf_kill), 2244 IPW2100_HANDLER(IPW_STATE_DISABLED, NULL), 2245 IPW2100_HANDLER(IPW_STATE_POWER_DOWN, NULL), 2246 IPW2100_HANDLER(IPW_STATE_SCANNING, isr_indicate_scanning), 2247 IPW2100_HANDLER(-1, NULL) 2248 }; 2249 2250 static void isr_status_change(struct ipw2100_priv *priv, int status) 2251 { 2252 int i; 2253 2254 if (status == IPW_STATE_SCANNING && 2255 priv->status & STATUS_ASSOCIATED && 2256 !(priv->status & STATUS_SCANNING)) { 2257 IPW_DEBUG_INFO("Scan detected while associated, with " 2258 "no scan request. Restarting firmware.\n"); 2259 2260 /* Wake up any sleeping jobs */ 2261 schedule_reset(priv); 2262 } 2263 2264 for (i = 0; status_handlers[i].status != -1; i++) { 2265 if (status == status_handlers[i].status) { 2266 IPW_DEBUG_NOTIF("Status change: %s\n", 2267 status_handlers[i].name); 2268 if (status_handlers[i].cb) 2269 status_handlers[i].cb(priv, status); 2270 priv->wstats.status = status; 2271 return; 2272 } 2273 } 2274 2275 IPW_DEBUG_NOTIF("unknown status received: %04x\n", status); 2276 } 2277 2278 static void isr_rx_complete_command(struct ipw2100_priv *priv, 2279 struct ipw2100_cmd_header *cmd) 2280 { 2281 #ifdef CONFIG_IPW2100_DEBUG 2282 if (cmd->host_command_reg < ARRAY_SIZE(command_types)) { 2283 IPW_DEBUG_HC("Command completed '%s (%d)'\n", 2284 command_types[cmd->host_command_reg], 2285 cmd->host_command_reg); 2286 } 2287 #endif 2288 if (cmd->host_command_reg == HOST_COMPLETE) 2289 priv->status |= STATUS_ENABLED; 2290 2291 if (cmd->host_command_reg == CARD_DISABLE) 2292 priv->status &= ~STATUS_ENABLED; 2293 2294 priv->status &= ~STATUS_CMD_ACTIVE; 2295 2296 wake_up_interruptible(&priv->wait_command_queue); 2297 } 2298 2299 #ifdef CONFIG_IPW2100_DEBUG 2300 static const char *frame_types[] = { 2301 "COMMAND_STATUS_VAL", 2302 "STATUS_CHANGE_VAL", 2303 "P80211_DATA_VAL", 2304 "P8023_DATA_VAL", 2305 "HOST_NOTIFICATION_VAL" 2306 }; 2307 #endif 2308 2309 static int ipw2100_alloc_skb(struct ipw2100_priv *priv, 2310 struct ipw2100_rx_packet *packet) 2311 { 2312 packet->skb = dev_alloc_skb(sizeof(struct ipw2100_rx)); 2313 if (!packet->skb) 2314 return -ENOMEM; 2315 2316 packet->rxp = (struct ipw2100_rx *)packet->skb->data; 2317 packet->dma_addr = pci_map_single(priv->pci_dev, packet->skb->data, 2318 sizeof(struct ipw2100_rx), 2319 PCI_DMA_FROMDEVICE); 2320 /* NOTE: pci_map_single does not return an error code, and 0 is a valid 2321 * dma_addr */ 2322 2323 return 0; 2324 } 2325 2326 #define SEARCH_ERROR 0xffffffff 2327 #define SEARCH_FAIL 0xfffffffe 2328 #define SEARCH_SUCCESS 0xfffffff0 2329 #define SEARCH_DISCARD 0 2330 #define SEARCH_SNAPSHOT 1 2331 2332 #define SNAPSHOT_ADDR(ofs) (priv->snapshot[((ofs) >> 12) & 0xff] + ((ofs) & 0xfff)) 2333 static void ipw2100_snapshot_free(struct ipw2100_priv *priv) 2334 { 2335 int i; 2336 if (!priv->snapshot[0]) 2337 return; 2338 for (i = 0; i < 0x30; i++) 2339 kfree(priv->snapshot[i]); 2340 priv->snapshot[0] = NULL; 2341 } 2342 2343 #ifdef IPW2100_DEBUG_C3 2344 static int ipw2100_snapshot_alloc(struct ipw2100_priv *priv) 2345 { 2346 int i; 2347 if (priv->snapshot[0]) 2348 return 1; 2349 for (i = 0; i < 0x30; i++) { 2350 priv->snapshot[i] = kmalloc(0x1000, GFP_ATOMIC); 2351 if (!priv->snapshot[i]) { 2352 IPW_DEBUG_INFO("%s: Error allocating snapshot " 2353 "buffer %d\n", priv->net_dev->name, i); 2354 while (i > 0) 2355 kfree(priv->snapshot[--i]); 2356 priv->snapshot[0] = NULL; 2357 return 0; 2358 } 2359 } 2360 2361 return 1; 2362 } 2363 2364 static u32 ipw2100_match_buf(struct ipw2100_priv *priv, u8 * in_buf, 2365 size_t len, int mode) 2366 { 2367 u32 i, j; 2368 u32 tmp; 2369 u8 *s, *d; 2370 u32 ret; 2371 2372 s = in_buf; 2373 if (mode == SEARCH_SNAPSHOT) { 2374 if (!ipw2100_snapshot_alloc(priv)) 2375 mode = SEARCH_DISCARD; 2376 } 2377 2378 for (ret = SEARCH_FAIL, i = 0; i < 0x30000; i += 4) { 2379 read_nic_dword(priv->net_dev, i, &tmp); 2380 if (mode == SEARCH_SNAPSHOT) 2381 *(u32 *) SNAPSHOT_ADDR(i) = tmp; 2382 if (ret == SEARCH_FAIL) { 2383 d = (u8 *) & tmp; 2384 for (j = 0; j < 4; j++) { 2385 if (*s != *d) { 2386 s = in_buf; 2387 continue; 2388 } 2389 2390 s++; 2391 d++; 2392 2393 if ((s - in_buf) == len) 2394 ret = (i + j) - len + 1; 2395 } 2396 } else if (mode == SEARCH_DISCARD) 2397 return ret; 2398 } 2399 2400 return ret; 2401 } 2402 #endif 2403 2404 /* 2405 * 2406 * 0) Disconnect the SKB from the firmware (just unmap) 2407 * 1) Pack the ETH header into the SKB 2408 * 2) Pass the SKB to the network stack 2409 * 2410 * When packet is provided by the firmware, it contains the following: 2411 * 2412 * . libipw_hdr 2413 * . libipw_snap_hdr 2414 * 2415 * The size of the constructed ethernet 2416 * 2417 */ 2418 #ifdef IPW2100_RX_DEBUG 2419 static u8 packet_data[IPW_RX_NIC_BUFFER_LENGTH]; 2420 #endif 2421 2422 static void ipw2100_corruption_detected(struct ipw2100_priv *priv, int i) 2423 { 2424 #ifdef IPW2100_DEBUG_C3 2425 struct ipw2100_status *status = &priv->status_queue.drv[i]; 2426 u32 match, reg; 2427 int j; 2428 #endif 2429 2430 IPW_DEBUG_INFO(": PCI latency error detected at 0x%04zX.\n", 2431 i * sizeof(struct ipw2100_status)); 2432 2433 #ifdef IPW2100_DEBUG_C3 2434 /* Halt the firmware so we can get a good image */ 2435 write_register(priv->net_dev, IPW_REG_RESET_REG, 2436 IPW_AUX_HOST_RESET_REG_STOP_MASTER); 2437 j = 5; 2438 do { 2439 udelay(IPW_WAIT_RESET_MASTER_ASSERT_COMPLETE_DELAY); 2440 read_register(priv->net_dev, IPW_REG_RESET_REG, &reg); 2441 2442 if (reg & IPW_AUX_HOST_RESET_REG_MASTER_DISABLED) 2443 break; 2444 } while (j--); 2445 2446 match = ipw2100_match_buf(priv, (u8 *) status, 2447 sizeof(struct ipw2100_status), 2448 SEARCH_SNAPSHOT); 2449 if (match < SEARCH_SUCCESS) 2450 IPW_DEBUG_INFO("%s: DMA status match in Firmware at " 2451 "offset 0x%06X, length %d:\n", 2452 priv->net_dev->name, match, 2453 sizeof(struct ipw2100_status)); 2454 else 2455 IPW_DEBUG_INFO("%s: No DMA status match in " 2456 "Firmware.\n", priv->net_dev->name); 2457 2458 printk_buf((u8 *) priv->status_queue.drv, 2459 sizeof(struct ipw2100_status) * RX_QUEUE_LENGTH); 2460 #endif 2461 2462 priv->fatal_error = IPW2100_ERR_C3_CORRUPTION; 2463 priv->net_dev->stats.rx_errors++; 2464 schedule_reset(priv); 2465 } 2466 2467 static void isr_rx(struct ipw2100_priv *priv, int i, 2468 struct libipw_rx_stats *stats) 2469 { 2470 struct net_device *dev = priv->net_dev; 2471 struct ipw2100_status *status = &priv->status_queue.drv[i]; 2472 struct ipw2100_rx_packet *packet = &priv->rx_buffers[i]; 2473 2474 IPW_DEBUG_RX("Handler...\n"); 2475 2476 if (unlikely(status->frame_size > skb_tailroom(packet->skb))) { 2477 IPW_DEBUG_INFO("%s: frame_size (%u) > skb_tailroom (%u)!" 2478 " Dropping.\n", 2479 dev->name, 2480 status->frame_size, skb_tailroom(packet->skb)); 2481 dev->stats.rx_errors++; 2482 return; 2483 } 2484 2485 if (unlikely(!netif_running(dev))) { 2486 dev->stats.rx_errors++; 2487 priv->wstats.discard.misc++; 2488 IPW_DEBUG_DROP("Dropping packet while interface is not up.\n"); 2489 return; 2490 } 2491 2492 if (unlikely(priv->ieee->iw_mode != IW_MODE_MONITOR && 2493 !(priv->status & STATUS_ASSOCIATED))) { 2494 IPW_DEBUG_DROP("Dropping packet while not associated.\n"); 2495 priv->wstats.discard.misc++; 2496 return; 2497 } 2498 2499 pci_unmap_single(priv->pci_dev, 2500 packet->dma_addr, 2501 sizeof(struct ipw2100_rx), PCI_DMA_FROMDEVICE); 2502 2503 skb_put(packet->skb, status->frame_size); 2504 2505 #ifdef IPW2100_RX_DEBUG 2506 /* Make a copy of the frame so we can dump it to the logs if 2507 * libipw_rx fails */ 2508 skb_copy_from_linear_data(packet->skb, packet_data, 2509 min_t(u32, status->frame_size, 2510 IPW_RX_NIC_BUFFER_LENGTH)); 2511 #endif 2512 2513 if (!libipw_rx(priv->ieee, packet->skb, stats)) { 2514 #ifdef IPW2100_RX_DEBUG 2515 IPW_DEBUG_DROP("%s: Non consumed packet:\n", 2516 dev->name); 2517 printk_buf(IPW_DL_DROP, packet_data, status->frame_size); 2518 #endif 2519 dev->stats.rx_errors++; 2520 2521 /* libipw_rx failed, so it didn't free the SKB */ 2522 dev_kfree_skb_any(packet->skb); 2523 packet->skb = NULL; 2524 } 2525 2526 /* We need to allocate a new SKB and attach it to the RDB. */ 2527 if (unlikely(ipw2100_alloc_skb(priv, packet))) { 2528 printk(KERN_WARNING DRV_NAME ": " 2529 "%s: Unable to allocate SKB onto RBD ring - disabling " 2530 "adapter.\n", dev->name); 2531 /* TODO: schedule adapter shutdown */ 2532 IPW_DEBUG_INFO("TODO: Shutdown adapter...\n"); 2533 } 2534 2535 /* Update the RDB entry */ 2536 priv->rx_queue.drv[i].host_addr = packet->dma_addr; 2537 } 2538 2539 #ifdef CONFIG_IPW2100_MONITOR 2540 2541 static void isr_rx_monitor(struct ipw2100_priv *priv, int i, 2542 struct libipw_rx_stats *stats) 2543 { 2544 struct net_device *dev = priv->net_dev; 2545 struct ipw2100_status *status = &priv->status_queue.drv[i]; 2546 struct ipw2100_rx_packet *packet = &priv->rx_buffers[i]; 2547 2548 /* Magic struct that slots into the radiotap header -- no reason 2549 * to build this manually element by element, we can write it much 2550 * more efficiently than we can parse it. ORDER MATTERS HERE */ 2551 struct ipw_rt_hdr { 2552 struct ieee80211_radiotap_header rt_hdr; 2553 s8 rt_dbmsignal; /* signal in dbM, kluged to signed */ 2554 } *ipw_rt; 2555 2556 IPW_DEBUG_RX("Handler...\n"); 2557 2558 if (unlikely(status->frame_size > skb_tailroom(packet->skb) - 2559 sizeof(struct ipw_rt_hdr))) { 2560 IPW_DEBUG_INFO("%s: frame_size (%u) > skb_tailroom (%u)!" 2561 " Dropping.\n", 2562 dev->name, 2563 status->frame_size, 2564 skb_tailroom(packet->skb)); 2565 dev->stats.rx_errors++; 2566 return; 2567 } 2568 2569 if (unlikely(!netif_running(dev))) { 2570 dev->stats.rx_errors++; 2571 priv->wstats.discard.misc++; 2572 IPW_DEBUG_DROP("Dropping packet while interface is not up.\n"); 2573 return; 2574 } 2575 2576 if (unlikely(priv->config & CFG_CRC_CHECK && 2577 status->flags & IPW_STATUS_FLAG_CRC_ERROR)) { 2578 IPW_DEBUG_RX("CRC error in packet. Dropping.\n"); 2579 dev->stats.rx_errors++; 2580 return; 2581 } 2582 2583 pci_unmap_single(priv->pci_dev, packet->dma_addr, 2584 sizeof(struct ipw2100_rx), PCI_DMA_FROMDEVICE); 2585 memmove(packet->skb->data + sizeof(struct ipw_rt_hdr), 2586 packet->skb->data, status->frame_size); 2587 2588 ipw_rt = (struct ipw_rt_hdr *) packet->skb->data; 2589 2590 ipw_rt->rt_hdr.it_version = PKTHDR_RADIOTAP_VERSION; 2591 ipw_rt->rt_hdr.it_pad = 0; /* always good to zero */ 2592 ipw_rt->rt_hdr.it_len = cpu_to_le16(sizeof(struct ipw_rt_hdr)); /* total hdr+data */ 2593 2594 ipw_rt->rt_hdr.it_present = cpu_to_le32(1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL); 2595 2596 ipw_rt->rt_dbmsignal = status->rssi + IPW2100_RSSI_TO_DBM; 2597 2598 skb_put(packet->skb, status->frame_size + sizeof(struct ipw_rt_hdr)); 2599 2600 if (!libipw_rx(priv->ieee, packet->skb, stats)) { 2601 dev->stats.rx_errors++; 2602 2603 /* libipw_rx failed, so it didn't free the SKB */ 2604 dev_kfree_skb_any(packet->skb); 2605 packet->skb = NULL; 2606 } 2607 2608 /* We need to allocate a new SKB and attach it to the RDB. */ 2609 if (unlikely(ipw2100_alloc_skb(priv, packet))) { 2610 IPW_DEBUG_WARNING( 2611 "%s: Unable to allocate SKB onto RBD ring - disabling " 2612 "adapter.\n", dev->name); 2613 /* TODO: schedule adapter shutdown */ 2614 IPW_DEBUG_INFO("TODO: Shutdown adapter...\n"); 2615 } 2616 2617 /* Update the RDB entry */ 2618 priv->rx_queue.drv[i].host_addr = packet->dma_addr; 2619 } 2620 2621 #endif 2622 2623 static int ipw2100_corruption_check(struct ipw2100_priv *priv, int i) 2624 { 2625 struct ipw2100_status *status = &priv->status_queue.drv[i]; 2626 struct ipw2100_rx *u = priv->rx_buffers[i].rxp; 2627 u16 frame_type = status->status_fields & STATUS_TYPE_MASK; 2628 2629 switch (frame_type) { 2630 case COMMAND_STATUS_VAL: 2631 return (status->frame_size != sizeof(u->rx_data.command)); 2632 case STATUS_CHANGE_VAL: 2633 return (status->frame_size != sizeof(u->rx_data.status)); 2634 case HOST_NOTIFICATION_VAL: 2635 return (status->frame_size < sizeof(u->rx_data.notification)); 2636 case P80211_DATA_VAL: 2637 case P8023_DATA_VAL: 2638 #ifdef CONFIG_IPW2100_MONITOR 2639 return 0; 2640 #else 2641 switch (WLAN_FC_GET_TYPE(le16_to_cpu(u->rx_data.header.frame_ctl))) { 2642 case IEEE80211_FTYPE_MGMT: 2643 case IEEE80211_FTYPE_CTL: 2644 return 0; 2645 case IEEE80211_FTYPE_DATA: 2646 return (status->frame_size > 2647 IPW_MAX_802_11_PAYLOAD_LENGTH); 2648 } 2649 #endif 2650 } 2651 2652 return 1; 2653 } 2654 2655 /* 2656 * ipw2100 interrupts are disabled at this point, and the ISR 2657 * is the only code that calls this method. So, we do not need 2658 * to play with any locks. 2659 * 2660 * RX Queue works as follows: 2661 * 2662 * Read index - firmware places packet in entry identified by the 2663 * Read index and advances Read index. In this manner, 2664 * Read index will always point to the next packet to 2665 * be filled--but not yet valid. 2666 * 2667 * Write index - driver fills this entry with an unused RBD entry. 2668 * This entry has not filled by the firmware yet. 2669 * 2670 * In between the W and R indexes are the RBDs that have been received 2671 * but not yet processed. 2672 * 2673 * The process of handling packets will start at WRITE + 1 and advance 2674 * until it reaches the READ index. 2675 * 2676 * The WRITE index is cached in the variable 'priv->rx_queue.next'. 2677 * 2678 */ 2679 static void __ipw2100_rx_process(struct ipw2100_priv *priv) 2680 { 2681 struct ipw2100_bd_queue *rxq = &priv->rx_queue; 2682 struct ipw2100_status_queue *sq = &priv->status_queue; 2683 struct ipw2100_rx_packet *packet; 2684 u16 frame_type; 2685 u32 r, w, i, s; 2686 struct ipw2100_rx *u; 2687 struct libipw_rx_stats stats = { 2688 .mac_time = jiffies, 2689 }; 2690 2691 read_register(priv->net_dev, IPW_MEM_HOST_SHARED_RX_READ_INDEX, &r); 2692 read_register(priv->net_dev, IPW_MEM_HOST_SHARED_RX_WRITE_INDEX, &w); 2693 2694 if (r >= rxq->entries) { 2695 IPW_DEBUG_RX("exit - bad read index\n"); 2696 return; 2697 } 2698 2699 i = (rxq->next + 1) % rxq->entries; 2700 s = i; 2701 while (i != r) { 2702 /* IPW_DEBUG_RX("r = %d : w = %d : processing = %d\n", 2703 r, rxq->next, i); */ 2704 2705 packet = &priv->rx_buffers[i]; 2706 2707 /* Sync the DMA for the RX buffer so CPU is sure to get 2708 * the correct values */ 2709 pci_dma_sync_single_for_cpu(priv->pci_dev, packet->dma_addr, 2710 sizeof(struct ipw2100_rx), 2711 PCI_DMA_FROMDEVICE); 2712 2713 if (unlikely(ipw2100_corruption_check(priv, i))) { 2714 ipw2100_corruption_detected(priv, i); 2715 goto increment; 2716 } 2717 2718 u = packet->rxp; 2719 frame_type = sq->drv[i].status_fields & STATUS_TYPE_MASK; 2720 stats.rssi = sq->drv[i].rssi + IPW2100_RSSI_TO_DBM; 2721 stats.len = sq->drv[i].frame_size; 2722 2723 stats.mask = 0; 2724 if (stats.rssi != 0) 2725 stats.mask |= LIBIPW_STATMASK_RSSI; 2726 stats.freq = LIBIPW_24GHZ_BAND; 2727 2728 IPW_DEBUG_RX("%s: '%s' frame type received (%d).\n", 2729 priv->net_dev->name, frame_types[frame_type], 2730 stats.len); 2731 2732 switch (frame_type) { 2733 case COMMAND_STATUS_VAL: 2734 /* Reset Rx watchdog */ 2735 isr_rx_complete_command(priv, &u->rx_data.command); 2736 break; 2737 2738 case STATUS_CHANGE_VAL: 2739 isr_status_change(priv, u->rx_data.status); 2740 break; 2741 2742 case P80211_DATA_VAL: 2743 case P8023_DATA_VAL: 2744 #ifdef CONFIG_IPW2100_MONITOR 2745 if (priv->ieee->iw_mode == IW_MODE_MONITOR) { 2746 isr_rx_monitor(priv, i, &stats); 2747 break; 2748 } 2749 #endif 2750 if (stats.len < sizeof(struct libipw_hdr_3addr)) 2751 break; 2752 switch (WLAN_FC_GET_TYPE(le16_to_cpu(u->rx_data.header.frame_ctl))) { 2753 case IEEE80211_FTYPE_MGMT: 2754 libipw_rx_mgt(priv->ieee, 2755 &u->rx_data.header, &stats); 2756 break; 2757 2758 case IEEE80211_FTYPE_CTL: 2759 break; 2760 2761 case IEEE80211_FTYPE_DATA: 2762 isr_rx(priv, i, &stats); 2763 break; 2764 2765 } 2766 break; 2767 } 2768 2769 increment: 2770 /* clear status field associated with this RBD */ 2771 rxq->drv[i].status.info.field = 0; 2772 2773 i = (i + 1) % rxq->entries; 2774 } 2775 2776 if (i != s) { 2777 /* backtrack one entry, wrapping to end if at 0 */ 2778 rxq->next = (i ? i : rxq->entries) - 1; 2779 2780 write_register(priv->net_dev, 2781 IPW_MEM_HOST_SHARED_RX_WRITE_INDEX, rxq->next); 2782 } 2783 } 2784 2785 /* 2786 * __ipw2100_tx_process 2787 * 2788 * This routine will determine whether the next packet on 2789 * the fw_pend_list has been processed by the firmware yet. 2790 * 2791 * If not, then it does nothing and returns. 2792 * 2793 * If so, then it removes the item from the fw_pend_list, frees 2794 * any associated storage, and places the item back on the 2795 * free list of its source (either msg_free_list or tx_free_list) 2796 * 2797 * TX Queue works as follows: 2798 * 2799 * Read index - points to the next TBD that the firmware will 2800 * process. The firmware will read the data, and once 2801 * done processing, it will advance the Read index. 2802 * 2803 * Write index - driver fills this entry with an constructed TBD 2804 * entry. The Write index is not advanced until the 2805 * packet has been configured. 2806 * 2807 * In between the W and R indexes are the TBDs that have NOT been 2808 * processed. Lagging behind the R index are packets that have 2809 * been processed but have not been freed by the driver. 2810 * 2811 * In order to free old storage, an internal index will be maintained 2812 * that points to the next packet to be freed. When all used 2813 * packets have been freed, the oldest index will be the same as the 2814 * firmware's read index. 2815 * 2816 * The OLDEST index is cached in the variable 'priv->tx_queue.oldest' 2817 * 2818 * Because the TBD structure can not contain arbitrary data, the 2819 * driver must keep an internal queue of cached allocations such that 2820 * it can put that data back into the tx_free_list and msg_free_list 2821 * for use by future command and data packets. 2822 * 2823 */ 2824 static int __ipw2100_tx_process(struct ipw2100_priv *priv) 2825 { 2826 struct ipw2100_bd_queue *txq = &priv->tx_queue; 2827 struct ipw2100_bd *tbd; 2828 struct list_head *element; 2829 struct ipw2100_tx_packet *packet; 2830 int descriptors_used; 2831 int e, i; 2832 u32 r, w, frag_num = 0; 2833 2834 if (list_empty(&priv->fw_pend_list)) 2835 return 0; 2836 2837 element = priv->fw_pend_list.next; 2838 2839 packet = list_entry(element, struct ipw2100_tx_packet, list); 2840 tbd = &txq->drv[packet->index]; 2841 2842 /* Determine how many TBD entries must be finished... */ 2843 switch (packet->type) { 2844 case COMMAND: 2845 /* COMMAND uses only one slot; don't advance */ 2846 descriptors_used = 1; 2847 e = txq->oldest; 2848 break; 2849 2850 case DATA: 2851 /* DATA uses two slots; advance and loop position. */ 2852 descriptors_used = tbd->num_fragments; 2853 frag_num = tbd->num_fragments - 1; 2854 e = txq->oldest + frag_num; 2855 e %= txq->entries; 2856 break; 2857 2858 default: 2859 printk(KERN_WARNING DRV_NAME ": %s: Bad fw_pend_list entry!\n", 2860 priv->net_dev->name); 2861 return 0; 2862 } 2863 2864 /* if the last TBD is not done by NIC yet, then packet is 2865 * not ready to be released. 2866 * 2867 */ 2868 read_register(priv->net_dev, IPW_MEM_HOST_SHARED_TX_QUEUE_READ_INDEX, 2869 &r); 2870 read_register(priv->net_dev, IPW_MEM_HOST_SHARED_TX_QUEUE_WRITE_INDEX, 2871 &w); 2872 if (w != txq->next) 2873 printk(KERN_WARNING DRV_NAME ": %s: write index mismatch\n", 2874 priv->net_dev->name); 2875 2876 /* 2877 * txq->next is the index of the last packet written txq->oldest is 2878 * the index of the r is the index of the next packet to be read by 2879 * firmware 2880 */ 2881 2882 /* 2883 * Quick graphic to help you visualize the following 2884 * if / else statement 2885 * 2886 * ===>| s---->|=============== 2887 * e>| 2888 * | a | b | c | d | e | f | g | h | i | j | k | l 2889 * r---->| 2890 * w 2891 * 2892 * w - updated by driver 2893 * r - updated by firmware 2894 * s - start of oldest BD entry (txq->oldest) 2895 * e - end of oldest BD entry 2896 * 2897 */ 2898 if (!((r <= w && (e < r || e >= w)) || (e < r && e >= w))) { 2899 IPW_DEBUG_TX("exit - no processed packets ready to release.\n"); 2900 return 0; 2901 } 2902 2903 list_del(element); 2904 DEC_STAT(&priv->fw_pend_stat); 2905 2906 #ifdef CONFIG_IPW2100_DEBUG 2907 { 2908 i = txq->oldest; 2909 IPW_DEBUG_TX("TX%d V=%p P=%04X T=%04X L=%d\n", i, 2910 &txq->drv[i], 2911 (u32) (txq->nic + i * sizeof(struct ipw2100_bd)), 2912 txq->drv[i].host_addr, txq->drv[i].buf_length); 2913 2914 if (packet->type == DATA) { 2915 i = (i + 1) % txq->entries; 2916 2917 IPW_DEBUG_TX("TX%d V=%p P=%04X T=%04X L=%d\n", i, 2918 &txq->drv[i], 2919 (u32) (txq->nic + i * 2920 sizeof(struct ipw2100_bd)), 2921 (u32) txq->drv[i].host_addr, 2922 txq->drv[i].buf_length); 2923 } 2924 } 2925 #endif 2926 2927 switch (packet->type) { 2928 case DATA: 2929 if (txq->drv[txq->oldest].status.info.fields.txType != 0) 2930 printk(KERN_WARNING DRV_NAME ": %s: Queue mismatch. " 2931 "Expecting DATA TBD but pulled " 2932 "something else: ids %d=%d.\n", 2933 priv->net_dev->name, txq->oldest, packet->index); 2934 2935 /* DATA packet; we have to unmap and free the SKB */ 2936 for (i = 0; i < frag_num; i++) { 2937 tbd = &txq->drv[(packet->index + 1 + i) % txq->entries]; 2938 2939 IPW_DEBUG_TX("TX%d P=%08x L=%d\n", 2940 (packet->index + 1 + i) % txq->entries, 2941 tbd->host_addr, tbd->buf_length); 2942 2943 pci_unmap_single(priv->pci_dev, 2944 tbd->host_addr, 2945 tbd->buf_length, PCI_DMA_TODEVICE); 2946 } 2947 2948 libipw_txb_free(packet->info.d_struct.txb); 2949 packet->info.d_struct.txb = NULL; 2950 2951 list_add_tail(element, &priv->tx_free_list); 2952 INC_STAT(&priv->tx_free_stat); 2953 2954 /* We have a free slot in the Tx queue, so wake up the 2955 * transmit layer if it is stopped. */ 2956 if (priv->status & STATUS_ASSOCIATED) 2957 netif_wake_queue(priv->net_dev); 2958 2959 /* A packet was processed by the hardware, so update the 2960 * watchdog */ 2961 priv->net_dev->trans_start = jiffies; 2962 2963 break; 2964 2965 case COMMAND: 2966 if (txq->drv[txq->oldest].status.info.fields.txType != 1) 2967 printk(KERN_WARNING DRV_NAME ": %s: Queue mismatch. " 2968 "Expecting COMMAND TBD but pulled " 2969 "something else: ids %d=%d.\n", 2970 priv->net_dev->name, txq->oldest, packet->index); 2971 2972 #ifdef CONFIG_IPW2100_DEBUG 2973 if (packet->info.c_struct.cmd->host_command_reg < 2974 ARRAY_SIZE(command_types)) 2975 IPW_DEBUG_TX("Command '%s (%d)' processed: %d.\n", 2976 command_types[packet->info.c_struct.cmd-> 2977 host_command_reg], 2978 packet->info.c_struct.cmd-> 2979 host_command_reg, 2980 packet->info.c_struct.cmd->cmd_status_reg); 2981 #endif 2982 2983 list_add_tail(element, &priv->msg_free_list); 2984 INC_STAT(&priv->msg_free_stat); 2985 break; 2986 } 2987 2988 /* advance oldest used TBD pointer to start of next entry */ 2989 txq->oldest = (e + 1) % txq->entries; 2990 /* increase available TBDs number */ 2991 txq->available += descriptors_used; 2992 SET_STAT(&priv->txq_stat, txq->available); 2993 2994 IPW_DEBUG_TX("packet latency (send to process) %ld jiffies\n", 2995 jiffies - packet->jiffy_start); 2996 2997 return (!list_empty(&priv->fw_pend_list)); 2998 } 2999 3000 static inline void __ipw2100_tx_complete(struct ipw2100_priv *priv) 3001 { 3002 int i = 0; 3003 3004 while (__ipw2100_tx_process(priv) && i < 200) 3005 i++; 3006 3007 if (i == 200) { 3008 printk(KERN_WARNING DRV_NAME ": " 3009 "%s: Driver is running slow (%d iters).\n", 3010 priv->net_dev->name, i); 3011 } 3012 } 3013 3014 static void ipw2100_tx_send_commands(struct ipw2100_priv *priv) 3015 { 3016 struct list_head *element; 3017 struct ipw2100_tx_packet *packet; 3018 struct ipw2100_bd_queue *txq = &priv->tx_queue; 3019 struct ipw2100_bd *tbd; 3020 int next = txq->next; 3021 3022 while (!list_empty(&priv->msg_pend_list)) { 3023 /* if there isn't enough space in TBD queue, then 3024 * don't stuff a new one in. 3025 * NOTE: 3 are needed as a command will take one, 3026 * and there is a minimum of 2 that must be 3027 * maintained between the r and w indexes 3028 */ 3029 if (txq->available <= 3) { 3030 IPW_DEBUG_TX("no room in tx_queue\n"); 3031 break; 3032 } 3033 3034 element = priv->msg_pend_list.next; 3035 list_del(element); 3036 DEC_STAT(&priv->msg_pend_stat); 3037 3038 packet = list_entry(element, struct ipw2100_tx_packet, list); 3039 3040 IPW_DEBUG_TX("using TBD at virt=%p, phys=%04X\n", 3041 &txq->drv[txq->next], 3042 (u32) (txq->nic + txq->next * 3043 sizeof(struct ipw2100_bd))); 3044 3045 packet->index = txq->next; 3046 3047 tbd = &txq->drv[txq->next]; 3048 3049 /* initialize TBD */ 3050 tbd->host_addr = packet->info.c_struct.cmd_phys; 3051 tbd->buf_length = sizeof(struct ipw2100_cmd_header); 3052 /* not marking number of fragments causes problems 3053 * with f/w debug version */ 3054 tbd->num_fragments = 1; 3055 tbd->status.info.field = 3056 IPW_BD_STATUS_TX_FRAME_COMMAND | 3057 IPW_BD_STATUS_TX_INTERRUPT_ENABLE; 3058 3059