Bug

[В начало]

Ошибка # 168

Показать/спрятать трассу ошибок
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;
23 typedef unsigned short __u16;
25 typedef int __s32;
26 typedef unsigned int __u32;
29 typedef long long __s64;
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;
28 typedef __u16 __le16;
29 typedef __u16 __be16;
30 typedef __u32 __le32;
31 typedef __u32 __be32;
32 typedef __u64 __le64;
36 typedef __u32 __wsum;
280 struct kernel_symbol { unsigned long value; const char *name; } ;
34 struct module ;
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;
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;
152 typedef u64 dma_addr_t;
157 typedef unsigned int gfp_t;
158 typedef unsigned int fmode_t;
161 typedef u64 phys_addr_t;
166 typedef phys_addr_t resource_size_t;
176 struct __anonstruct_atomic_t_6 { int counter; } ;
176 typedef struct __anonstruct_atomic_t_6 atomic_t;
181 struct __anonstruct_atomic64_t_7 { long counter; } ;
181 typedef struct __anonstruct_atomic64_t_7 atomic64_t;
182 struct list_head { struct list_head *next; struct list_head *prev; } ;
187 struct hlist_node ;
187 struct hlist_head { struct hlist_node *first; } ;
191 struct hlist_node { struct hlist_node *next; struct hlist_node **pprev; } ;
202 struct callback_head { struct callback_head *next; void (*func)(struct callback_head *); } ;
115 typedef void (*ctor_fn_t)();
83 struct ctl_table ;
58 struct device ;
64 struct net_device ;
465 struct file_operations ;
477 struct completion ;
478 struct pt_regs ;
546 struct bug_entry { int bug_addr_disp; int file_disp; unsigned short line; unsigned short flags; } ;
114 struct timespec ;
115 struct compat_timespec ;
116 struct pollfd ;
117 struct __anonstruct_futex_27 { u32 *uaddr; u32 val; u32 flags; u32 bitset; u64 time; u32 *uaddr2; } ;
117 struct __anonstruct_nanosleep_28 { clockid_t clockid; struct timespec *rmtp; struct compat_timespec *compat_rmtp; u64 expires; } ;
117 struct __anonstruct_poll_29 { struct pollfd *ufds; int nfds; int has_timeout; unsigned long tv_sec; unsigned long tv_nsec; } ;
117 union __anonunion____missing_field_name_26 { struct __anonstruct_futex_27 futex; struct __anonstruct_nanosleep_28 nanosleep; struct __anonstruct_poll_29 poll; } ;
117 struct restart_block { long int (*fn)(struct restart_block *); union __anonunion____missing_field_name_26 __annonCompField4; } ;
50 struct task_struct ;
39 struct page ;
26 struct mm_struct ;
288 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; } ;
66 struct __anonstruct____missing_field_name_32 { unsigned int a; unsigned int b; } ;
66 struct __anonstruct____missing_field_name_33 { 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; } ;
66 union __anonunion____missing_field_name_31 { struct __anonstruct____missing_field_name_32 __annonCompField5; struct __anonstruct____missing_field_name_33 __annonCompField6; } ;
66 struct desc_struct { union __anonunion____missing_field_name_31 __annonCompField7; } ;
13 typedef unsigned long pteval_t;
14 typedef unsigned long pmdval_t;
16 typedef unsigned long pgdval_t;
17 typedef unsigned long pgprotval_t;
19 struct __anonstruct_pte_t_34 { pteval_t pte; } ;
19 typedef struct __anonstruct_pte_t_34 pte_t;
21 struct pgprot { pgprotval_t pgprot; } ;
256 typedef struct pgprot pgprot_t;
258 struct __anonstruct_pgd_t_35 { pgdval_t pgd; } ;
258 typedef struct __anonstruct_pgd_t_35 pgd_t;
297 struct __anonstruct_pmd_t_37 { pmdval_t pmd; } ;
297 typedef struct __anonstruct_pmd_t_37 pmd_t;
423 typedef struct page *pgtable_t;
434 struct file ;
445 struct seq_file ;
481 struct thread_struct ;
483 struct cpumask ;
20 struct qspinlock { atomic_t val; } ;
33 typedef struct qspinlock arch_spinlock_t;
34 struct qrwlock { atomic_t cnts; arch_spinlock_t wait_lock; } ;
14 typedef struct qrwlock arch_rwlock_t;
247 struct math_emu_info { long ___orig_eip; struct pt_regs *regs; } ;
83 struct static_key { atomic_t enabled; } ;
23 typedef atomic64_t atomic_long_t;
359 struct cpumask { unsigned long bits[128U]; } ;
15 typedef struct cpumask cpumask_t;
654 typedef struct cpumask *cpumask_var_t;
22 struct tracepoint_func { void *func; void *data; int prio; } ;
28 struct tracepoint { const char *name; struct static_key key; int (*regfunc)(); void (*unregfunc)(); struct tracepoint_func *funcs; } ;
233 struct fregs_state { u32 cwd; u32 swd; u32 twd; u32 fip; u32 fcs; u32 foo; u32 fos; u32 st_space[20U]; u32 status; } ;
26 struct __anonstruct____missing_field_name_61 { u64 rip; u64 rdp; } ;
26 struct __anonstruct____missing_field_name_62 { u32 fip; u32 fcs; u32 foo; u32 fos; } ;
26 union __anonunion____missing_field_name_60 { struct __anonstruct____missing_field_name_61 __annonCompField13; struct __anonstruct____missing_field_name_62 __annonCompField14; } ;
26 union __anonunion____missing_field_name_63 { u32 padding1[12U]; u32 sw_reserved[12U]; } ;
26 struct fxregs_state { u16 cwd; u16 swd; u16 twd; u16 fop; union __anonunion____missing_field_name_60 __annonCompField15; u32 mxcsr; u32 mxcsr_mask; u32 st_space[32U]; u32 xmm_space[64U]; u32 padding[12U]; union __anonunion____missing_field_name_63 __annonCompField16; } ;
66 struct swregs_state { 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; } ;
227 struct xstate_header { u64 xfeatures; u64 xcomp_bv; u64 reserved[6U]; } ;
233 struct xregs_state { struct fxregs_state i387; struct xstate_header header; u8 extended_state_area[0U]; } ;
254 union fpregs_state { struct fregs_state fsave; struct fxregs_state fxsave; struct swregs_state soft; struct xregs_state xsave; u8 __padding[4096U]; } ;
271 struct fpu { unsigned int last_cpu; unsigned char fpstate_active; unsigned char fpregs_active; union fpregs_state state; } ;
180 struct seq_operations ;
386 struct perf_event ;
391 struct __anonstruct_mm_segment_t_75 { unsigned long seg; } ;
391 typedef struct __anonstruct_mm_segment_t_75 mm_segment_t;
392 struct thread_struct { struct desc_struct tls_array[3U]; unsigned long sp0; unsigned long sp; unsigned short es; unsigned short ds; unsigned short fsindex; unsigned short gsindex; u32 status; unsigned long fsbase; unsigned long gsbase; struct perf_event *ptrace_bps[4U]; unsigned long debugreg6; unsigned long ptrace_dr7; unsigned long cr2; unsigned long trap_nr; unsigned long error_code; unsigned long *io_bitmap_ptr; unsigned long iopl; unsigned int io_bitmap_max; mm_segment_t addr_limit; unsigned char sig_on_uaccess_err; unsigned char uaccess_err; struct fpu fpu; } ;
48 struct thread_info { unsigned long flags; } ;
303 enum irqreturn { IRQ_NONE = 0, IRQ_HANDLED = 1, IRQ_WAKE_THREAD = 2 } ;
16 typedef enum irqreturn irqreturn_t;
10 struct lockdep_map ;
55 struct stack_trace { unsigned int nr_entries; unsigned int max_entries; unsigned long *entries; int skip; } ;
28 struct lockdep_subclass_key { char __one_byte; } ;
53 struct lock_class_key { struct lockdep_subclass_key subkeys[8U]; } ;
59 struct lock_class { struct hlist_node 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; } ;
207 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; unsigned int pin_count; } ;
34 struct vm_area_struct ;
15 struct llist_node ;
64 struct llist_node { struct llist_node *next; } ;
70 struct resource { resource_size_t start; resource_size_t end; const char *name; unsigned long flags; unsigned long desc; struct resource *parent; struct resource *sibling; struct resource *child; } ;
236 struct pci_dev ;
33 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_141 { u8 __padding[24U]; struct lockdep_map dep_map; } ;
33 union __anonunion____missing_field_name_140 { struct raw_spinlock rlock; struct __anonstruct____missing_field_name_141 __annonCompField19; } ;
33 struct spinlock { union __anonunion____missing_field_name_140 __annonCompField20; } ;
76 typedef struct spinlock spinlock_t;
23 struct __anonstruct_rwlock_t_142 { 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_142 rwlock_t;
416 struct seqcount { unsigned int sequence; struct lockdep_map dep_map; } ;
52 typedef struct seqcount seqcount_t;
407 struct __anonstruct_seqlock_t_157 { struct seqcount seqcount; spinlock_t lock; } ;
407 typedef struct __anonstruct_seqlock_t_157 seqlock_t;
601 struct timespec { __kernel_time_t tv_sec; long tv_nsec; } ;
7 typedef __s64 time64_t;
28 typedef s64 ktime_t;
109 struct timer_list { struct hlist_node entry; unsigned long expires; void (*function)(unsigned long); unsigned long data; u32 flags; int start_pid; void *start_site; char start_comm[16U]; struct lockdep_map lockdep_map; } ;
254 struct hrtimer ;
255 enum hrtimer_restart ;
38 struct __wait_queue_head { spinlock_t lock; struct list_head task_list; } ;
43 typedef struct __wait_queue_head wait_queue_head_t;
1225 struct completion { unsigned int done; wait_queue_head_t wait; } ;
1144 struct rb_node { unsigned long __rb_parent_color; struct rb_node *rb_right; struct rb_node *rb_left; } ;
41 struct rb_root { struct rb_node *rb_node; } ;
83 struct user_namespace ;
22 struct __anonstruct_kuid_t_162 { uid_t val; } ;
22 typedef struct __anonstruct_kuid_t_162 kuid_t;
27 struct __anonstruct_kgid_t_163 { gid_t val; } ;
27 typedef struct __anonstruct_kgid_t_163 kgid_t;
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 *);
61 struct ctl_table_poll { atomic_t event; wait_queue_head_t wait; } ;
100 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; } ;
121 struct ctl_node { struct rb_node node; struct ctl_table_header *header; } ;
126 struct __anonstruct____missing_field_name_165 { struct ctl_table *ctl_table; int used; int count; int nreg; } ;
126 union __anonunion____missing_field_name_164 { struct __anonstruct____missing_field_name_165 __annonCompField21; struct callback_head rcu; } ;
126 struct ctl_table_set ;
126 struct ctl_table_header { union __anonunion____missing_field_name_164 __annonCompField22; 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; } ;
147 struct ctl_dir { struct ctl_table_header header; struct rb_root root; } ;
153 struct ctl_table_set { int (*is_seen)(struct ctl_table_set *); struct ctl_dir dir; } ;
158 struct ctl_table_root { struct ctl_table_set default_set; struct ctl_table_set * (*lookup)(struct ctl_table_root *); void (*set_ownership)(struct ctl_table_header *, struct ctl_table *, kuid_t *, kgid_t *); int (*permissions)(struct ctl_table_header *, struct ctl_table *); } ;
278 struct workqueue_struct ;
279 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; } ;
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 *); } ;
320 enum rpm_status { RPM_ACTIVE = 0, RPM_RESUMING = 1, RPM_SUSPENDED = 2, RPM_SUSPENDING = 3 } ;
327 enum rpm_request { RPM_REQ_NONE = 0, RPM_REQ_IDLE = 1, RPM_REQ_SUSPEND = 2, RPM_REQ_AUTOSUSPEND = 3, RPM_REQ_RESUME = 4 } ;
335 struct wakeup_source ;
336 struct wake_irq ;
337 struct pm_domain_data ;
338 struct pm_subsys_data { spinlock_t lock; unsigned int refcount; struct list_head clock_list; struct pm_domain_data *domain_data; } ;
556 struct dev_pm_qos ;
556 struct dev_pm_info { pm_message_t power_state; unsigned char can_wakeup; unsigned char async_suspend; bool in_dpm_list; bool is_prepared; bool is_suspended; bool is_noirq_suspended; bool is_late_suspended; bool early_init; bool direct_complete; spinlock_t lock; struct list_head entry; struct completion completion; struct wakeup_source *wakeup; bool wakeup_path; bool syscore; bool no_pm_callbacks; struct timer_list suspend_timer; unsigned long timer_expires; struct work_struct work; wait_queue_head_t wait_queue; struct wake_irq *wakeirq; 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; bool ignore_children; unsigned char no_callbacks; unsigned char irq_safe; unsigned char use_autosuspend; unsigned char timer_autosuspends; unsigned char memalloc_noio; unsigned int links_count; 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; void (*set_latency_tolerance)(struct device *, s32 ); struct dev_pm_qos *qos; } ;
618 struct dev_pm_domain { struct dev_pm_ops ops; void (*detach)(struct device *, bool ); int (*activate)(struct device *); void (*sync)(struct device *); void (*dismiss)(struct device *); } ;
97 struct __anonstruct_nodemask_t_166 { unsigned long bits[16U]; } ;
97 typedef struct __anonstruct_nodemask_t_166 nodemask_t;
144 struct pci_bus ;
13 struct optimistic_spin_queue { atomic_t tail; } ;
39 struct mutex { atomic_long_t owner; spinlock_t wait_lock; struct optimistic_spin_queue osq; struct list_head wait_list; void *magic; struct lockdep_map dep_map; } ;
70 struct mutex_waiter { struct list_head list; struct task_struct *task; void *magic; } ;
38 struct ldt_struct ;
38 struct vdso_image ;
38 struct __anonstruct_mm_context_t_167 { struct ldt_struct *ldt; unsigned short ia32_compat; struct mutex lock; void *vdso; const struct vdso_image *vdso_image; atomic_t perf_rdpmc_allowed; u16 pkey_allocation_map; s16 execute_only_pkey; void *bd_addr; } ;
38 typedef struct __anonstruct_mm_context_t_167 mm_context_t;
22 struct bio_vec ;
249 typedef unsigned int isolate_mode_t;
744 struct rw_semaphore ;
745 struct rw_semaphore { atomic_long_t count; struct list_head wait_list; raw_spinlock_t wait_lock; struct optimistic_spin_queue osq; struct task_struct *owner; struct lockdep_map dep_map; } ;
64 struct irq_domain ;
422 union __anonunion____missing_field_name_209 { unsigned long bitmap[1U]; struct callback_head callback_head; } ;
422 struct idr_layer { int prefix; int layer; struct idr_layer *ary[64U]; int count; union __anonunion____missing_field_name_209 __annonCompField33; } ;
40 struct idr { struct idr_layer *hint; struct idr_layer *top; int layers; int cur; spinlock_t lock; int id_free_cnt; struct idr_layer *id_free; } ;
149 struct ida_bitmap { long nr_busy; unsigned long bitmap[15U]; } ;
192 struct ida { struct idr idr; struct ida_bitmap *free_bitmap; } ;
229 struct dentry ;
230 struct iattr ;
231 struct super_block ;
232 struct file_system_type ;
233 struct kernfs_open_node ;
234 struct kernfs_iattrs ;
257 struct kernfs_root ;
257 struct kernfs_elem_dir { unsigned long subdirs; struct rb_root children; struct kernfs_root *root; } ;
85 struct kernfs_node ;
85 struct kernfs_elem_symlink { struct kernfs_node *target_kn; } ;
89 struct kernfs_ops ;
89 struct kernfs_elem_attr { const struct kernfs_ops *ops; struct kernfs_open_node *open; loff_t size; struct kernfs_node *notify_next; } ;
96 union __anonunion____missing_field_name_218 { struct kernfs_elem_dir dir; struct kernfs_elem_symlink symlink; struct kernfs_elem_attr attr; } ;
96 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; const void *ns; unsigned int hash; union __anonunion____missing_field_name_218 __annonCompField34; void *priv; unsigned short flags; umode_t mode; unsigned int ino; struct kernfs_iattrs *iattr; } ;
138 struct kernfs_syscall_ops { int (*remount_fs)(struct kernfs_root *, int *, char *); int (*show_options)(struct seq_file *, struct kernfs_root *); int (*mkdir)(struct kernfs_node *, const char *, umode_t ); int (*rmdir)(struct kernfs_node *); int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *); int (*show_path)(struct seq_file *, struct kernfs_node *, struct kernfs_root *); } ;
157 struct kernfs_root { struct kernfs_node *kn; unsigned int flags; struct ida ino_ida; struct kernfs_syscall_ops *syscall_ops; struct list_head supers; wait_queue_head_t deactivate_waitq; } ;
173 struct vm_operations_struct ;
173 struct kernfs_open_file { struct kernfs_node *kn; struct file *file; void *priv; struct mutex mutex; struct mutex prealloc_mutex; int event; struct list_head list; char *prealloc_buf; size_t atomic_write_len; bool mmapped; const struct vm_operations_struct *vm_ops; } ;
191 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 ); size_t atomic_write_len; bool prealloc; 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; } ;
286 struct inode ;
511 struct sock ;
512 struct kobject ;
513 enum kobj_ns_type { KOBJ_NS_TYPE_NONE = 0, KOBJ_NS_TYPE_NET = 1, KOBJ_NS_TYPES = 2 } ;
519 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 *); } ;
135 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); umode_t (*is_bin_visible)(struct kobject *, struct bin_attribute *, int); struct attribute **attrs; struct bin_attribute **bin_attrs; } ;
92 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 *); } ;
165 struct sysfs_ops { ssize_t (*show)(struct kobject *, struct attribute *, char *); ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t ); } ;
530 struct kref { atomic_t refcount; } ;
52 struct kset ;
52 struct kobj_type ;
52 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; } ;
115 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 *); } ;
123 struct kobj_uevent_env { char *argv[3U]; char *envp[32U]; int envp_idx; char buf[2048U]; int buflen; } ;
131 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 *); } ;
148 struct kset { struct list_head list; spinlock_t list_lock; struct kobject kobj; const struct kset_uevent_ops *uevent_ops; } ;
224 struct proc_dir_entry ;
133 struct exception_table_entry { int insn; int fixup; int handler; } ;
61 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; u8 state; u8 is_rel; int start_pid; void *start_site; char start_comm[16U]; } ;
125 struct hrtimer_clock_base { struct hrtimer_cpu_base *cpu_base; int index; clockid_t clockid; struct timerqueue_head active; ktime_t (*get_time)(); ktime_t offset; } ;
158 struct hrtimer_cpu_base { raw_spinlock_t lock; seqcount_t seq; struct hrtimer *running; unsigned int cpu; unsigned int active_bases; unsigned int clock_was_set_seq; bool migration_enabled; bool nohz_active; unsigned char in_hrtirq; unsigned char hres_active; unsigned char hang_detected; ktime_t expires_next; struct hrtimer *next_timer; unsigned int nr_events; unsigned int nr_retries; unsigned int nr_hangs; unsigned int max_hang_time; struct hrtimer_clock_base clock_base[4U]; } ;
506 struct tasklet_struct { struct tasklet_struct *next; unsigned long state; atomic_t count; void (*func)(unsigned long); unsigned long data; } ;
37 struct cred ;
58 struct arch_uprobe_task { unsigned long saved_scratch_register; unsigned int saved_trap_nr; unsigned int saved_tf; } ;
66 enum uprobe_task_state { UTASK_RUNNING = 0, UTASK_SSTEP = 1, UTASK_SSTEP_ACK = 2, UTASK_SSTEP_TRAPPED = 3 } ;
73 struct __anonstruct____missing_field_name_236 { struct arch_uprobe_task autask; unsigned long vaddr; } ;
73 struct __anonstruct____missing_field_name_237 { struct callback_head dup_xol_work; unsigned long dup_xol_addr; } ;
73 union __anonunion____missing_field_name_235 { struct __anonstruct____missing_field_name_236 __annonCompField45; struct __anonstruct____missing_field_name_237 __annonCompField46; } ;
73 struct uprobe ;
73 struct return_instance ;
73 struct uprobe_task { enum uprobe_task_state state; union __anonunion____missing_field_name_235 __annonCompField47; struct uprobe *active_uprobe; unsigned long xol_vaddr; struct return_instance *return_instances; unsigned int depth; } ;
95 struct return_instance { struct uprobe *uprobe; unsigned long func; unsigned long stack; unsigned long orig_ret_vaddr; bool chained; struct return_instance *next; } ;
111 struct xol_area ;
112 struct uprobes_state { struct xol_area *xol_area; } ;
151 struct address_space ;
152 struct mem_cgroup ;
153 union __anonunion____missing_field_name_238 { struct address_space *mapping; void *s_mem; atomic_t compound_mapcount; } ;
153 union __anonunion____missing_field_name_239 { unsigned long index; void *freelist; } ;
153 struct __anonstruct____missing_field_name_243 { unsigned short inuse; unsigned short objects; unsigned char frozen; } ;
153 union __anonunion____missing_field_name_242 { atomic_t _mapcount; unsigned int active; struct __anonstruct____missing_field_name_243 __annonCompField50; int units; } ;
153 struct __anonstruct____missing_field_name_241 { union __anonunion____missing_field_name_242 __annonCompField51; atomic_t _refcount; } ;
153 union __anonunion____missing_field_name_240 { unsigned long counters; struct __anonstruct____missing_field_name_241 __annonCompField52; } ;
153 struct dev_pagemap ;
153 struct __anonstruct____missing_field_name_245 { struct page *next; int pages; int pobjects; } ;
153 struct __anonstruct____missing_field_name_246 { unsigned long compound_head; unsigned int compound_dtor; unsigned int compound_order; } ;
153 struct __anonstruct____missing_field_name_247 { unsigned long __pad; pgtable_t pmd_huge_pte; } ;
153 union __anonunion____missing_field_name_244 { struct list_head lru; struct dev_pagemap *pgmap; struct __anonstruct____missing_field_name_245 __annonCompField54; struct callback_head callback_head; struct __anonstruct____missing_field_name_246 __annonCompField55; struct __anonstruct____missing_field_name_247 __annonCompField56; } ;
153 struct kmem_cache ;
153 union __anonunion____missing_field_name_248 { unsigned long private; spinlock_t *ptl; struct kmem_cache *slab_cache; } ;
153 struct page { unsigned long flags; union __anonunion____missing_field_name_238 __annonCompField48; union __anonunion____missing_field_name_239 __annonCompField49; union __anonunion____missing_field_name_240 __annonCompField53; union __anonunion____missing_field_name_244 __annonCompField57; union __anonunion____missing_field_name_248 __annonCompField58; struct mem_cgroup *mem_cgroup; } ;
197 struct page_frag { struct page *page; __u32 offset; __u32 size; } ;
282 struct userfaultfd_ctx ;
282 struct vm_userfaultfd_ctx { struct userfaultfd_ctx *ctx; } ;
289 struct __anonstruct_shared_249 { struct rb_node rb; unsigned long rb_subtree_last; } ;
289 struct anon_vma ;
289 struct mempolicy ;
289 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; struct __anonstruct_shared_249 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; struct vm_userfaultfd_ctx vm_userfaultfd_ctx; } ;
362 struct core_thread { struct task_struct *task; struct core_thread *next; } ;
367 struct core_state { atomic_t nr_threads; struct core_thread dumper; struct completion startup; } ;
381 struct task_rss_stat { int events; int count[4U]; } ;
389 struct mm_rss_stat { atomic_long_t count[4U]; } ;
394 struct kioctx_table ;
395 struct linux_binfmt ;
395 struct mmu_notifier_mm ;
395 struct mm_struct { struct vm_area_struct *mmap; struct rb_root mm_rb; u32 vmacache_seqnum; 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; atomic_long_t nr_pmds; 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 data_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 user_namespace *user_ns; 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; atomic_long_t hugetlb_usage; struct work_struct async_put_work; } ;
560 struct vm_fault ;
614 struct vdso_image { void *data; unsigned long size; unsigned long alt; unsigned long alt_len; long sym_vvar_start; long sym_vvar_page; long sym_hpet_page; long sym_pvclock_page; long sym_VDSO32_NOTE_MASK; long sym___kernel_sigreturn; long sym___kernel_rt_sigreturn; long sym___kernel_vsyscall; long sym_int80_landing_pad; } ;
15 typedef __u64 Elf64_Addr;
16 typedef __u16 Elf64_Half;
18 typedef __u64 Elf64_Off;
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;
219 struct elf64_hdr { unsigned char e_ident[16U]; Elf64_Half e_type; Elf64_Half e_machine; Elf64_Word e_version; Elf64_Addr e_entry; Elf64_Off e_phoff; Elf64_Off e_shoff; Elf64_Word e_flags; Elf64_Half e_ehsize; Elf64_Half e_phentsize; Elf64_Half e_phnum; Elf64_Half e_shentsize; Elf64_Half e_shnum; Elf64_Half e_shstrndx; } ;
235 typedef struct elf64_hdr Elf64_Ehdr;
314 struct elf64_shdr { Elf64_Word sh_name; Elf64_Word sh_type; Elf64_Xword sh_flags; Elf64_Addr sh_addr; Elf64_Off sh_offset; Elf64_Xword sh_size; Elf64_Word sh_link; Elf64_Word sh_info; Elf64_Xword sh_addralign; Elf64_Xword sh_entsize; } ;
326 typedef struct elf64_shdr Elf64_Shdr;
53 struct kernel_param ;
58 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 *); } ;
62 struct kparam_string ;
62 struct kparam_array ;
62 union __anonunion____missing_field_name_254 { void *arg; const struct kparam_string *str; const struct kparam_array *arr; } ;
62 struct kernel_param { const char *name; struct module *mod; const struct kernel_param_ops *ops; const u16 perm; s8 level; u8 flags; union __anonunion____missing_field_name_254 __annonCompField59; } ;
83 struct kparam_string { unsigned int maxlen; char *string; } ;
89 struct kparam_array { unsigned int max; unsigned int elemsize; unsigned int *num; const struct kernel_param_ops *ops; void *elem; } ;
24 struct latch_tree_node { struct rb_node node[2U]; } ;
211 struct mod_arch_specific { } ;
39 struct module_param_attrs ;
39 struct module_kobject { struct kobject kobj; struct module *mod; struct kobject *drivers_dir; struct module_param_attrs *mp; struct completion *kobj_completion; } ;
50 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 *); } ;
277 enum module_state { MODULE_STATE_LIVE = 0, MODULE_STATE_COMING = 1, MODULE_STATE_GOING = 2, MODULE_STATE_UNFORMED = 3 } ;
284 struct mod_tree_node { struct module *mod; struct latch_tree_node node; } ;
291 struct module_layout { void *base; unsigned int size; unsigned int text_size; unsigned int ro_size; unsigned int ro_after_init_size; struct mod_tree_node mtn; } ;
307 struct mod_kallsyms { Elf64_Sym *symtab; unsigned int num_symtab; char *strtab; } ;
321 struct klp_modinfo { Elf64_Ehdr hdr; Elf64_Shdr *sechdrs; char *secstrings; unsigned int symndx; } ;
329 struct module_sect_attrs ;
329 struct module_notes_attrs ;
329 struct trace_event_call ;
329 struct trace_enum_map ;
329 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 mutex param_lock; 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; bool async_probe_requested; 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)(); struct module_layout core_layout; struct module_layout init_layout; struct mod_arch_specific arch; unsigned long taints; unsigned int num_bugs; struct list_head bug_list; struct bug_entry *bug_table; struct mod_kallsyms *kallsyms; struct mod_kallsyms core_kallsyms; 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 trace_event_call **trace_events; unsigned int num_trace_events; struct trace_enum_map **trace_enums; unsigned int num_trace_enums; bool klp; bool klp_alive; struct klp_modinfo *klp_info; struct list_head source_list; struct list_head target_list; void (*exit)(); atomic_t refcnt; 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; } ;
187 struct acpi_device_id { __u8 id[9U]; kernel_ulong_t driver_data; __u32 cls; __u32 cls_msk; } ;
230 struct of_device_id { char name[32U]; char type[32U]; char compatible[128U]; const void *data; } ;
675 struct klist_node ;
37 struct klist_node { void *n_klist; struct list_head n_node; struct kref n_ref; } ;
93 struct hlist_bl_node ;
93 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_311 { spinlock_t lock; int count; } ;
114 union __anonunion____missing_field_name_310 { struct __anonstruct____missing_field_name_311 __annonCompField60; } ;
114 struct lockref { union __anonunion____missing_field_name_310 __annonCompField61; } ;
77 struct path ;
78 struct vfsmount ;
79 struct __anonstruct____missing_field_name_313 { u32 hash; u32 len; } ;
79 union __anonunion____missing_field_name_312 { struct __anonstruct____missing_field_name_313 __annonCompField62; u64 hash_len; } ;
79 struct qstr { union __anonunion____missing_field_name_312 __annonCompField63; const unsigned char *name; } ;
65 struct dentry_operations ;
65 union __anonunion____missing_field_name_314 { struct list_head d_lru; wait_queue_head_t *d_wait; } ;
65 union __anonunion_d_u_315 { struct hlist_node d_alias; struct hlist_bl_node d_in_lookup_hash; struct callback_head d_rcu; } ;
65 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; union __anonunion____missing_field_name_314 __annonCompField64; struct list_head d_child; struct list_head d_subdirs; union __anonunion_d_u_315 d_u; } ;
121 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 *, unsigned int, const char *, const struct qstr *); int (*d_delete)(const struct dentry *); int (*d_init)(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)(const struct path *, bool ); struct dentry * (*d_real)(struct dentry *, const struct inode *, unsigned int); } ;
592 struct path { struct vfsmount *mnt; struct dentry *dentry; } ;
19 struct shrink_control { gfp_t gfp_mask; unsigned long nr_to_scan; int nid; struct mem_cgroup *memcg; } ;
27 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; } ;
80 struct list_lru_one { struct list_head list; long nr_items; } ;
32 struct list_lru_memcg { struct list_lru_one *lru[0U]; } ;
37 struct list_lru_node { spinlock_t lock; struct list_lru_one lru; struct list_lru_memcg *memcg_lrus; } ;
47 struct list_lru { struct list_lru_node *node; struct list_head list; } ;
63 union __anonunion____missing_field_name_316 { struct list_head private_list; struct callback_head callback_head; } ;
63 struct radix_tree_node { unsigned char shift; unsigned char offset; unsigned char count; unsigned char exceptional; struct radix_tree_node *parent; void *private_data; union __anonunion____missing_field_name_316 __annonCompField65; void *slots[64U]; unsigned long tags[3U][1U]; } ;
105 struct radix_tree_root { gfp_t gfp_mask; struct radix_tree_node *rnode; } ;
519 enum pid_type { PIDTYPE_PID = 0, PIDTYPE_PGID = 1, PIDTYPE_SID = 2, PIDTYPE_MAX = 3 } ;
526 struct pid_namespace ;
526 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 } ;
44 enum rcu_sync_type { RCU_SYNC = 0, RCU_SCHED_SYNC = 1, RCU_BH_SYNC = 2 } ;
50 struct rcu_sync { int gp_state; int gp_count; wait_queue_head_t gp_wait; int cb_state; struct callback_head cb_head; enum rcu_sync_type gp_type; } ;
66 struct percpu_rw_semaphore { struct rcu_sync rss; unsigned int *read_count; struct rw_semaphore rw_sem; wait_queue_head_t writer; int readers_block; } ;
144 struct delayed_call { void (*fn)(void *); void *arg; } ;
282 struct backing_dev_info ;
283 struct bdi_writeback ;
285 struct export_operations ;
287 struct iovec ;
288 struct kiocb ;
289 struct pipe_inode_info ;
290 struct poll_table_struct ;
291 struct kstatfs ;
292 struct swap_info_struct ;
293 struct iov_iter ;
294 struct fscrypt_info ;
295 struct fscrypt_operations ;
76 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; } ;
210 struct percpu_counter { raw_spinlock_t lock; s64 count; struct list_head list; s32 *counters; } ;
213 struct dquot ;
214 struct kqid ;
19 typedef __kernel_uid32_t projid_t;
23 struct __anonstruct_kprojid_t_320 { projid_t val; } ;
23 typedef struct __anonstruct_kprojid_t_320 kprojid_t;
181 enum quota_type { USRQUOTA = 0, GRPQUOTA = 1, PRJQUOTA = 2 } ;
66 typedef long long qsize_t;
67 union __anonunion____missing_field_name_321 { kuid_t uid; kgid_t gid; kprojid_t projid; } ;
67 struct kqid { union __anonunion____missing_field_name_321 __annonCompField66; enum quota_type type; } ;
194 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; time64_t dqb_btime; time64_t dqb_itime; } ;
216 struct quota_format_type ;
217 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_max_spc_limit; qsize_t dqi_max_ino_limit; void *dqi_priv; } ;
282 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; } ;
309 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 *); int (*get_next_id)(struct super_block *, struct kqid *); } ;
321 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 *); int (*get_projid)(struct inode *, kprojid_t *); int (*get_next_id)(struct super_block *, struct kqid *); } ;
338 struct qc_dqblk { int d_fieldmask; u64 d_spc_hardlimit; u64 d_spc_softlimit; u64 d_ino_hardlimit; u64 d_ino_softlimit; u64 d_space; u64 d_ino_count; s64 d_ino_timer; s64 d_spc_timer; int d_ino_warns; int d_spc_warns; u64 d_rt_spc_hardlimit; u64 d_rt_spc_softlimit; u64 d_rt_space; s64 d_rt_spc_timer; int d_rt_spc_warns; } ;
361 struct qc_type_state { unsigned int flags; unsigned int spc_timelimit; unsigned int ino_timelimit; unsigned int rt_spc_timelimit; unsigned int spc_warnlimit; unsigned int ino_warnlimit; unsigned int rt_spc_warnlimit; unsigned long long ino; blkcnt_t blocks; blkcnt_t nextents; } ;
407 struct qc_state { unsigned int s_incoredqs; struct qc_type_state s_state[3U]; } ;
418 struct qc_info { int i_fieldmask; unsigned int i_flags; unsigned int i_spc_timelimit; unsigned int i_ino_timelimit; unsigned int i_rt_spc_timelimit; unsigned int i_spc_warnlimit; unsigned int i_ino_warnlimit; unsigned int i_rt_spc_warnlimit; } ;
431 struct quotactl_ops { int (*quota_on)(struct super_block *, int, int, const struct path *); int (*quota_off)(struct super_block *, int); int (*quota_enable)(struct super_block *, unsigned int); int (*quota_disable)(struct super_block *, unsigned int); int (*quota_sync)(struct super_block *, int); int (*set_info)(struct super_block *, int, struct qc_info *); int (*get_dqblk)(struct super_block *, struct kqid , struct qc_dqblk *); int (*get_nextdqblk)(struct super_block *, struct kqid *, struct qc_dqblk *); int (*set_dqblk)(struct super_block *, struct kqid , struct qc_dqblk *); int (*get_state)(struct super_block *, struct qc_state *); int (*rm_xquota)(struct super_block *, unsigned int); } ;
447 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; } ;
511 struct quota_info { unsigned int flags; struct mutex dqio_mutex; struct inode *files[3U]; struct mem_dqinfo info[3U]; const struct quota_format_ops *ops[3U]; } ;
540 struct writeback_control ;
541 struct kiocb { struct file *ki_filp; loff_t ki_pos; void (*ki_complete)(struct kiocb *, long, long); void *private; int ki_flags; } ;
317 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)(struct kiocb *, struct iov_iter *); int (*migratepage)(struct address_space *, struct page *, struct page *, enum migrate_mode ); bool (*isolate_page)(struct page *, isolate_mode_t ); void (*putback_page)(struct page *); int (*launder_page)(struct page *); int (*is_partially_uptodate)(struct page *, unsigned long, 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 *); } ;
376 struct address_space { struct inode *host; struct radix_tree_root page_tree; spinlock_t tree_lock; atomic_t i_mmap_writable; struct rb_root i_mmap; struct rw_semaphore i_mmap_rwsem; unsigned long nrpages; unsigned long nrexceptional; unsigned long writeback_index; const struct address_space_operations *a_ops; unsigned long flags; spinlock_t private_lock; gfp_t gfp_mask; struct list_head private_list; void *private_data; } ;
398 struct request_queue ;
399 struct hd_struct ;
399 struct gendisk ;
399 struct block_device { dev_t bd_dev; int bd_openers; struct inode *bd_inode; struct super_block *bd_super; struct mutex bd_mutex; 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; } ;
514 struct posix_acl ;
541 struct inode_operations ;
541 union __anonunion____missing_field_name_326 { const unsigned int i_nlink; unsigned int __i_nlink; } ;
541 union __anonunion____missing_field_name_327 { struct hlist_head i_dentry; struct callback_head i_rcu; } ;
541 struct file_lock_context ;
541 struct cdev ;
541 union __anonunion____missing_field_name_328 { struct pipe_inode_info *i_pipe; struct block_device *i_bdev; struct cdev *i_cdev; char *i_link; unsigned int i_dir_seq; } ;
541 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_326 __annonCompField67; 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 rw_semaphore i_rwsem; unsigned long dirtied_when; unsigned long dirtied_time_when; struct hlist_node i_hash; struct list_head i_io_list; struct bdi_writeback *i_wb; int i_wb_frn_winner; u16 i_wb_frn_avg_time; u16 i_wb_frn_history; struct list_head i_lru; struct list_head i_sb_list; struct list_head i_wb_list; union __anonunion____missing_field_name_327 __annonCompField68; u64 i_version; atomic_t i_count; atomic_t i_dio_count; atomic_t i_writecount; atomic_t i_readcount; const struct file_operations *i_fop; struct file_lock_context *i_flctx; struct address_space i_data; struct list_head i_devices; union __anonunion____missing_field_name_328 __annonCompField69; __u32 i_generation; __u32 i_fsnotify_mask; struct hlist_head i_fsnotify_marks; struct fscrypt_info *i_crypt_info; void *i_private; } ;
797 struct fown_struct { rwlock_t lock; struct pid *pid; enum pid_type pid_type; kuid_t uid; kuid_t euid; int signum; } ;
805 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; } ;
828 union __anonunion_f_u_329 { struct llist_node fu_llist; struct callback_head fu_rcuhead; } ;
828 struct file { union __anonunion_f_u_329 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; } ;
913 typedef void *fl_owner_t;
914 struct file_lock ;
915 struct file_lock_operations { void (*fl_copy_lock)(struct file_lock *, struct file_lock *); void (*fl_release_private)(struct file_lock *); } ;
921 struct lock_manager_operations { int (*lm_compare_owner)(struct file_lock *, struct file_lock *); unsigned long int (*lm_owner_key)(struct file_lock *); fl_owner_t (*lm_get_owner)(fl_owner_t ); void (*lm_put_owner)(fl_owner_t ); void (*lm_notify)(struct file_lock *); int (*lm_grant)(struct file_lock *, int); bool (*lm_break)(struct file_lock *); int (*lm_change)(struct file_lock *, int, struct list_head *); void (*lm_setup)(struct file_lock *, void **); } ;
942 struct net ;
948 struct nlm_lockowner ;
949 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 fasync_struct ;
19 struct __anonstruct_afs_331 { struct list_head link; int state; } ;
19 union __anonunion_fl_u_330 { struct nfs_lock_info nfs_fl; struct nfs4_lock_info nfs4_fl; struct __anonstruct_afs_331 afs; } ;
19 struct file_lock { struct file_lock *fl_next; struct list_head fl_list; 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_330 fl_u; } ;
1001 struct file_lock_context { spinlock_t flc_lock; struct list_head flc_flock; struct list_head flc_posix; struct list_head flc_lease; } ;
1068 struct files_struct ;
1221 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; } ;
1256 struct sb_writers { int frozen; wait_queue_head_t wait_unfrozen; struct percpu_rw_semaphore rw_sem[3U]; } ;
1286 struct super_operations ;
1286 struct xattr_handler ;
1286 struct mtd_info ;
1286 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_iflags; 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; const struct fscrypt_operations *s_cop; 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; unsigned int s_quota_types; 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 hlist_head s_pins; struct user_namespace *s_user_ns; struct list_lru s_dentry_lru; struct list_lru s_inode_lru; struct callback_head rcu; struct work_struct destroy_work; struct mutex s_sync_lock; int s_stack_depth; spinlock_t s_inode_list_lock; struct list_head s_inodes; spinlock_t s_inode_wblist_lock; struct list_head s_inodes_wb; } ;
1570 struct fiemap_extent_info { unsigned int fi_flags; unsigned int fi_extents_mapped; unsigned int fi_extents_max; struct fiemap_extent *fi_extents_start; } ;
1583 struct dir_context ;
1608 struct dir_context { int (*actor)(struct dir_context *, const char *, int, loff_t , u64 , unsigned int); loff_t pos; } ;
1615 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 (*read_iter)(struct kiocb *, struct iov_iter *); ssize_t (*write_iter)(struct kiocb *, struct iov_iter *); int (*iterate)(struct file *, struct dir_context *); int (*iterate_shared)(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 (*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 **, void **); long int (*fallocate)(struct file *, int, loff_t , loff_t ); void (*show_fdinfo)(struct seq_file *, struct file *); ssize_t (*copy_file_range)(struct file *, loff_t , struct file *, loff_t , size_t , unsigned int); int (*clone_file_range)(struct file *, loff_t , struct file *, loff_t , u64 ); ssize_t (*dedupe_file_range)(struct file *, u64 , u64 , struct file *, u64 ); } ;
1683 struct inode_operations { struct dentry * (*lookup)(struct inode *, struct dentry *, unsigned int); const char * (*get_link)(struct dentry *, struct inode *, struct delayed_call *); int (*permission)(struct inode *, int); struct posix_acl * (*get_acl)(struct inode *, int); int (*readlink)(struct dentry *, char *, int); 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 *, unsigned int); int (*setattr)(struct dentry *, struct iattr *); int (*getattr)(struct vfsmount *, struct dentry *, struct kstat *); ssize_t (*listxattr)(struct dentry *, char *, size_t ); 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); } ;
1753 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_super)(struct super_block *); int (*freeze_fs)(struct super_block *); int (*thaw_super)(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 ); struct dquot ** (*get_dquots)(struct inode *); int (*bdev_try_to_free_page)(struct super_block *, struct page *, gfp_t ); long int (*nr_cached_objects)(struct super_block *, struct shrink_control *); long int (*free_cached_objects)(struct super_block *, struct shrink_control *); } ;
1995 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; } ;
3167 struct assoc_array_ptr ;
3167 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 user_struct ;
37 struct signal_struct ;
38 struct key_type ;
42 struct keyring_index_key { struct key_type *type; const char *description; size_t desc_len; } ;
91 union key_payload { void *rcu_data0; void *data[4U]; } ;
128 union __anonunion____missing_field_name_332 { struct list_head graveyard_link; struct rb_node serial_node; } ;
128 struct key_user ;
128 union __anonunion____missing_field_name_333 { time_t expiry; time_t revoked_at; } ;
128 struct __anonstruct____missing_field_name_335 { struct key_type *type; char *description; } ;
128 union __anonunion____missing_field_name_334 { struct keyring_index_key index_key; struct __anonstruct____missing_field_name_335 __annonCompField72; } ;
128 struct __anonstruct____missing_field_name_337 { struct list_head name_link; struct assoc_array keys; } ;
128 union __anonunion____missing_field_name_336 { union key_payload payload; struct __anonstruct____missing_field_name_337 __annonCompField74; int reject_error; } ;
128 struct key { atomic_t usage; key_serial_t serial; union __anonunion____missing_field_name_332 __annonCompField70; struct rw_semaphore sem; struct key_user *user; void *security; union __anonunion____missing_field_name_333 __annonCompField71; 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_334 __annonCompField73; union __anonunion____missing_field_name_336 __annonCompField75; int (*restrict_link)(struct key *, const struct key_type *, const union key_payload *); } ;
377 struct audit_context ;
27 struct group_info { atomic_t usage; int ngroups; kgid_t gid[0U]; } ;
85 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; kernel_cap_t cap_ambient; 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; } ;
368 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; const struct file *file; void *private; } ;
30 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 *); } ;
222 struct pinctrl ;
223 struct pinctrl_state ;
194 struct dev_pin_info { struct pinctrl *p; struct pinctrl_state *default_state; struct pinctrl_state *init_state; struct pinctrl_state *sleep_state; struct pinctrl_state *idle_state; } ;
84 struct plist_node { int prio; struct list_head prio_list; struct list_head node_list; } ;
4 typedef unsigned long cputime_t;
26 struct sem_undo_list ;
26 struct sysv_sem { struct sem_undo_list *undo_list; } ;
26 struct sysv_shm { struct list_head shm_clist; } ;
24 struct __anonstruct_sigset_t_338 { unsigned long sig[1U]; } ;
24 typedef struct __anonstruct_sigset_t_338 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;
38 union sigval { int sival_int; void *sival_ptr; } ;
10 typedef union sigval sigval_t;
11 struct __anonstruct__kill_340 { __kernel_pid_t _pid; __kernel_uid32_t _uid; } ;
11 struct __anonstruct__timer_341 { __kernel_timer_t _tid; int _overrun; char _pad[0U]; sigval_t _sigval; int _sys_private; } ;
11 struct __anonstruct__rt_342 { __kernel_pid_t _pid; __kernel_uid32_t _uid; sigval_t _sigval; } ;
11 struct __anonstruct__sigchld_343 { __kernel_pid_t _pid; __kernel_uid32_t _uid; int _status; __kernel_clock_t _utime; __kernel_clock_t _stime; } ;
11 struct __anonstruct__addr_bnd_346 { void *_lower; void *_upper; } ;
11 union __anonunion____missing_field_name_345 { struct __anonstruct__addr_bnd_346 _addr_bnd; __u32 _pkey; } ;
11 struct __anonstruct__sigfault_344 { void *_addr; short _addr_lsb; union __anonunion____missing_field_name_345 __annonCompField76; } ;
11 struct __anonstruct__sigpoll_347 { long _band; int _fd; } ;
11 struct __anonstruct__sigsys_348 { void *_call_addr; int _syscall; unsigned int _arch; } ;
11 union __anonunion__sifields_339 { int _pad[28U]; struct __anonstruct__kill_340 _kill; struct __anonstruct__timer_341 _timer; struct __anonstruct__rt_342 _rt; struct __anonstruct__sigchld_343 _sigchld; struct __anonstruct__sigfault_344 _sigfault; struct __anonstruct__sigpoll_347 _sigpoll; struct __anonstruct__sigsys_348 _sigsys; } ;
11 struct siginfo { int si_signo; int si_errno; int si_code; union __anonunion__sifields_339 _sifields; } ;
118 typedef struct siginfo siginfo_t;
22 struct sigpending { struct list_head list; sigset_t signal; } ;
274 struct sigaction { __sighandler_t sa_handler; unsigned long sa_flags; __sigrestore_t sa_restorer; sigset_t sa_mask; } ;
288 struct k_sigaction { struct sigaction sa; } ;
43 struct seccomp_filter ;
44 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; } ;
12 enum kcov_mode { KCOV_MODE_DISABLED = 0, KCOV_MODE_TRACE = 1 } ;
17 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; } ;
41 struct percpu_ref ;
55 typedef void percpu_ref_func_t(struct percpu_ref *);
68 struct percpu_ref { atomic_long_t count; unsigned long percpu_count_ptr; percpu_ref_func_t *release; percpu_ref_func_t *confirm_switch; bool force_atomic; struct callback_head rcu; } ;
607 struct cgroup ;
608 struct sk_buff ;
14 struct bpf_prog ;
14 struct cgroup_bpf { struct bpf_prog *prog[3U]; struct bpf_prog *effective[3U]; } ;
44 struct cgroup_root ;
45 struct cgroup_subsys ;
46 struct cgroup_taskset ;
90 struct cgroup_file { struct kernfs_node *kn; } ;
91 struct cgroup_subsys_state { struct cgroup *cgroup; struct cgroup_subsys *ss; struct percpu_ref refcnt; struct cgroup_subsys_state *parent; struct list_head sibling; struct list_head children; int id; unsigned int flags; u64 serial_nr; atomic_t online_cnt; struct callback_head callback_head; struct work_struct destroy_work; } ;
142 struct css_set { atomic_t refcount; struct hlist_node hlist; struct list_head tasks; struct list_head mg_tasks; struct list_head cgrp_links; struct cgroup *dfl_cgrp; struct cgroup_subsys_state *subsys[13U]; struct list_head mg_preload_node; struct list_head mg_node; struct cgroup *mg_src_cgrp; struct cgroup *mg_dst_cgrp; struct css_set *mg_dst_cset; struct list_head e_cset_node[13U]; struct list_head task_iters; bool dead; struct callback_head callback_head; } ;
222 struct cgroup { struct cgroup_subsys_state self; unsigned long flags; int id; int level; int populated_cnt; struct kernfs_node *kn; struct cgroup_file procs_file; struct cgroup_file events_file; u16 subtree_control; u16 subtree_ss_mask; u16 old_subtree_control; u16 old_subtree_ss_mask; struct cgroup_subsys_state *subsys[13U]; struct cgroup_root *root; struct list_head cset_links; struct list_head e_csets[13U]; struct list_head pidlists; struct mutex pidlist_mutex; wait_queue_head_t offline_waitq; struct work_struct release_agent_work; struct cgroup_bpf bpf; int ancestor_ids[]; } ;
310 struct cgroup_root { struct kernfs_root *kf_root; unsigned int subsys_mask; int hierarchy_id; struct cgroup cgrp; int cgrp_ancestor_id_storage; atomic_t nr_cgrps; struct list_head root_list; unsigned int flags; struct idr cgroup_idr; char release_agent_path[4096U]; char name[64U]; } ;
349 struct cftype { char name[64U]; unsigned long private; size_t max_write_len; unsigned int flags; unsigned int file_offset; struct cgroup_subsys *ss; struct list_head node; struct kernfs_ops *kf_ops; 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 ); ssize_t (*write)(struct kernfs_open_file *, char *, size_t , loff_t ); struct lock_class_key lockdep_key; } ;
434 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_released)(struct cgroup_subsys_state *); void (*css_free)(struct cgroup_subsys_state *); void (*css_reset)(struct cgroup_subsys_state *); int (*can_attach)(struct cgroup_taskset *); void (*cancel_attach)(struct cgroup_taskset *); void (*attach)(struct cgroup_taskset *); void (*post_attach)(); int (*can_fork)(struct task_struct *); void (*cancel_fork)(struct task_struct *); void (*fork)(struct task_struct *); void (*exit)(struct task_struct *); void (*free)(struct task_struct *); void (*bind)(struct cgroup_subsys_state *); bool early_init; bool implicit_on_dfl; bool broken_hierarchy; bool warned_broken_hierarchy; int id; const char *name; const char *legacy_name; struct cgroup_root *root; struct idr css_idr; struct list_head cfts; struct cftype *dfl_cftypes; struct cftype *legacy_cftypes; unsigned int depends_on; } ;
128 struct futex_pi_state ;
129 struct robust_list_head ;
130 struct bio_list ;
131 struct fs_struct ;
132 struct perf_event_context ;
133 struct blk_plug ;
134 struct nameidata ;
188 struct cfs_rq ;
189 struct task_group ;
515 struct sighand_struct { atomic_t count; struct k_sigaction action[64U]; spinlock_t siglock; wait_queue_head_t signalfd_wqh; } ;
563 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; } ;
571 struct cpu_itimer { cputime_t expires; cputime_t incr; u32 error; u32 incr_error; } ;
578 struct prev_cputime { cputime_t utime; cputime_t stime; raw_spinlock_t lock; } ;
603 struct task_cputime { cputime_t utime; cputime_t stime; unsigned long long sum_exec_runtime; } ;
619 struct task_cputime_atomic { atomic64_t utime; atomic64_t stime; atomic64_t sum_exec_runtime; } ;
641 struct thread_group_cputimer { struct task_cputime_atomic cputime_atomic; bool running; bool checking_timer; } ;
686 struct autogroup ;
687 struct tty_struct ;
687 struct taskstats ;
687 struct tty_audit_buf ;
687 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; seqlock_t stats_lock; cputime_t utime; cputime_t stime; cputime_t cutime; cputime_t cstime; cputime_t gtime; cputime_t cgtime; struct prev_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; struct tty_audit_buf *tty_audit_buf; bool oom_flag_origin; short oom_score_adj; short oom_score_adj_min; struct mm_struct *oom_mm; struct mutex cred_guard_mutex; } ;
863 struct user_struct { atomic_t __count; atomic_t processes; 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; unsigned long unix_inflight; atomic_long_t pipe_bufs; struct key *uid_keyring; struct key *session_keyring; struct hlist_node uidhash_node; kuid_t uid; atomic_long_t locked_vm; } ;
908 struct reclaim_state ;
909 struct sched_info { unsigned long pcount; unsigned long long run_delay; unsigned long long last_arrival; unsigned long long last_queued; } ;
924 struct task_delay_info { spinlock_t lock; unsigned int flags; u64 blkio_start; u64 blkio_delay; u64 swapin_delay; u32 blkio_count; u32 swapin_count; u64 freepages_start; u64 freepages_delay; u32 freepages_count; } ;
981 struct wake_q_node { struct wake_q_node *next; } ;
1226 struct io_context ;
1260 struct uts_namespace ;
1261 struct load_weight { unsigned long weight; u32 inv_weight; } ;
1269 struct sched_avg { u64 last_update_time; u64 load_sum; u32 util_sum; u32 period_contrib; unsigned long load_avg; unsigned long util_avg; } ;
1327 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; } ;
1362 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; int depth; struct sched_entity *parent; struct cfs_rq *cfs_rq; struct cfs_rq *my_q; struct sched_avg avg; } ;
1399 struct rt_rq ;
1399 struct sched_rt_entity { struct list_head run_list; unsigned long timeout; unsigned long watchdog_stamp; unsigned int time_slice; unsigned short on_rq; unsigned short on_list; struct sched_rt_entity *back; struct sched_rt_entity *parent; struct rt_rq *rt_rq; struct rt_rq *my_q; } ;
1417 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_boosted; int dl_yielded; struct hrtimer dl_timer; } ;
1481 struct tlbflush_unmap_batch { struct cpumask cpumask; bool flush_required; bool writable; } ;
1500 struct sched_class ;
1500 struct compat_robust_list_head ;
1500 struct numa_group ;
1500 struct kcov ;
1500 struct task_struct { struct thread_info thread_info; volatile long state; void *stack; atomic_t usage; unsigned int flags; unsigned int ptrace; struct llist_node wake_entry; int on_cpu; unsigned int cpu; unsigned int wakee_flips; unsigned long wakee_flip_decay_ts; struct task_struct *last_wakee; 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; unsigned long rcu_tasks_nvcsw; bool rcu_tasks_holdout; struct list_head rcu_tasks_holdout_list; int rcu_tasks_idle_cpu; 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; u32 vmacache_seqnum; struct vm_area_struct *vmacache[4U]; struct task_rss_stat rss_stat; int exit_state; int exit_code; int exit_signal; int pdeath_signal; unsigned long jobctl; unsigned int personality; unsigned char sched_reset_on_fork; unsigned char sched_contributes_to_load; unsigned char sched_migrated; unsigned char sched_remote_wakeup; unsigned char; unsigned char in_execve; unsigned char in_iowait; unsigned char restore_sigmask; unsigned char memcg_may_oom; unsigned char memcg_kmem_skip_account; unsigned char brk_randomized; unsigned long atomic_flags; struct restart_block restart_block; 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 gtime; struct prev_cputime prev_cputime; unsigned long nvcsw; unsigned long nivcsw; u64 start_time; u64 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 *ptracer_cred; const struct cred *real_cred; const struct cred *cred; char comm[16U]; struct nameidata *nameidata; struct sysv_sem sysvsem; struct sysv_shm sysvshm; unsigned long last_switch_count; 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; unsigned int sas_ss_flags; 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 wake_q_node wake_q; struct rb_root pi_waiters; struct rb_node *pi_waiters_leftmost; struct rt_mutex_waiter *pi_blocked_on; 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; unsigned int in_ubsan; 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; int closid; 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; unsigned long numa_migrate_retry; u64 node_stamp; u64 last_task_numa_placement; u64 last_sum_exec_runtime; 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_locality[3U]; unsigned long numa_pages_migrated; struct tlbflush_unmap_batch tlb_ubc; 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]; u64 timer_slack_ns; u64 default_timer_slack_ns; unsigned int kasan_depth; unsigned long trace; unsigned long trace_recursion; enum kcov_mode kcov_mode; unsigned int kcov_size; void *kcov_area; struct kcov *kcov; struct mem_cgroup *memcg_in_oom; gfp_t memcg_oom_gfp_mask; int memcg_oom_order; unsigned int memcg_nr_pages_over_high; struct uprobe_task *utask; unsigned int sequential_io; unsigned int sequential_io_avg; unsigned long task_state_change; int pagefault_disabled; struct task_struct *oom_reaper_list; atomic_t stack_refcount; struct thread_struct thread; } ;
76 struct dma_map_ops ;
76 struct dev_archdata { struct dma_map_ops *dma_ops; void *iommu; } ;
24 struct device_private ;
25 struct device_driver ;
26 struct driver_private ;
27 struct class ;
28 struct subsys_private ;
29 struct bus_type ;
30 struct device_node ;
31 struct fwnode_handle ;
32 struct iommu_ops ;
33 struct iommu_group ;
34 struct iommu_fwspec ;
62 struct device_attribute ;
62 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; const struct iommu_ops *iommu_ops; struct subsys_private *p; struct lock_class_key lock_key; } ;
143 struct device_type ;
202 enum probe_type { PROBE_DEFAULT_STRATEGY = 0, PROBE_PREFER_ASYNCHRONOUS = 1, PROBE_FORCE_SYNCHRONOUS = 2 } ;
208 struct device_driver { const char *name; struct bus_type *bus; struct module *owner; const char *mod_name; bool suppress_bind_attrs; enum probe_type probe_type; 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; } ;
358 struct class_attribute ;
358 struct class { const char *name; struct module *owner; struct class_attribute *class_attrs; const struct attribute_group **class_groups; 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; } ;
453 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 ); } ;
523 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; } ;
551 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 ); } ;
723 struct device_dma_parameters { unsigned int max_segment_size; unsigned long segment_boundary_mask; } ;
786 enum dl_dev_state { DL_DEV_NO_DRIVER = 0, DL_DEV_PROBING = 1, DL_DEV_DRIVER_BOUND = 2, DL_DEV_UNBINDING = 3 } ;
793 struct dev_links_info { struct list_head suppliers; struct list_head consumers; enum dl_dev_state status; } ;
813 struct dma_coherent_mem ;
813 struct cma ;
813 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; void *driver_data; struct dev_links_info links; struct dev_pm_info power; struct dev_pm_domain *pm_domain; struct irq_domain *msi_domain; struct dev_pin_info *pins; struct list_head msi_list; int numa_node; u64 *dma_mask; u64 coherent_dma_mask; unsigned long dma_pfn_offset; struct device_dma_parameters *dma_parms; struct list_head dma_pools; struct dma_coherent_mem *dma_mem; struct cma *cma_area; struct dev_archdata archdata; struct device_node *of_node; struct fwnode_handle *fwnode; 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; struct iommu_fwspec *iommu_fwspec; bool offline_disabled; bool offline; } ;
971 struct wakeup_source { const char *name; struct list_head entry; spinlock_t lock; struct wake_irq *wakeirq; 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; } ;
70 struct hotplug_slot ;
70 struct pci_slot { struct pci_bus *bus; struct list_head list; struct hotplug_slot *hotplug; unsigned char number; struct kobject kobj; } ;
108 typedef int pci_power_t;
135 typedef unsigned int pci_channel_state_t;
136 enum pci_channel_state { pci_channel_io_normal = 1, pci_channel_io_frozen = 2, pci_channel_io_perm_failure = 3 } ;
161 typedef unsigned short pci_dev_flags_t;
188 typedef unsigned short pci_bus_flags_t;
246 struct pcie_link_state ;
247 struct pci_vpd ;
248 struct pci_sriov ;
250 struct pci_driver ;
250 union __anonunion____missing_field_name_388 { struct pci_sriov *sriov; struct pci_dev *physfn; } ;
250 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; u16 aer_cap; u8 pcie_cap; u8 msi_cap; u8 msix_cap; unsigned char pcie_mpss; u8 rom_base_reg; u8 pin; u16 pcie_flags_reg; unsigned long *dma_alias_mask; 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 bridge_d3; unsigned char d3cold_allowed; unsigned char mmio_always_on; unsigned char wakeup_prepared; unsigned char runtime_d3cold; unsigned char ignore_hotplug; unsigned char hotplug_user_indicators; 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 no_64bit_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 ats_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; unsigned char irq_managed; unsigned char has_secondary_link; unsigned char non_compliant_bars; 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]; unsigned char ptm_root; unsigned char ptm_enabled; u8 ptm_granularity; const struct attribute_group **msi_irq_groups; struct pci_vpd *vpd; union __anonunion____missing_field_name_388 __annonCompField89; u16 ats_cap; u8 ats_stu; atomic_t ats_ref_cnt; phys_addr_t rom; size_t romlen; char *driver_override; } ;
419 struct pci_ops ;
419 struct msi_controller ;
482 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_controller *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; } ;
606 struct pci_ops { int (*add_bus)(struct pci_bus *); void (*remove_bus)(struct pci_bus *); void * (*map_bus)(struct pci_bus *, unsigned int, int); int (*read)(struct pci_bus *, unsigned int, int, int, u32 *); int (*write)(struct pci_bus *, unsigned int, int, int, u32 ); } ;
636 struct pci_dynids { spinlock_t lock; struct list_head list; } ;
650 typedef unsigned int pci_ers_result_t;
660 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 (*reset_notify)(struct pci_dev *, bool ); void (*resume)(struct pci_dev *); } ;
693 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; } ;
273 struct vm_fault { struct vm_area_struct *vma; unsigned int flags; gfp_t gfp_mask; unsigned long pgoff; unsigned long address; pmd_t *pmd; pte_t orig_pte; struct page *cow_page; struct mem_cgroup *memcg; struct page *page; pte_t *pte; spinlock_t *ptl; pgtable_t prealloc_pte; } ;
322 struct vm_operations_struct { void (*open)(struct vm_area_struct *); void (*close)(struct vm_area_struct *); int (*mremap)(struct vm_area_struct *); int (*fault)(struct vm_area_struct *, struct vm_fault *); int (*pmd_fault)(struct vm_area_struct *, unsigned long, pmd_t *, unsigned int); void (*map_pages)(struct vm_fault *, unsigned long, unsigned long); int (*page_mkwrite)(struct vm_area_struct *, struct vm_fault *); int (*pfn_mkwrite)(struct vm_area_struct *, struct vm_fault *); int (*access)(struct vm_area_struct *, unsigned long, void *, int, int); const char * (*name)(struct vm_area_struct *); int (*set_policy)(struct vm_area_struct *, struct mempolicy *); struct mempolicy * (*get_policy)(struct vm_area_struct *, unsigned long); struct page * (*find_special_page)(struct vm_area_struct *, unsigned long); } ;
1322 struct kvec ;
2439 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; } ;
21 struct sg_table { struct scatterlist *sgl; unsigned int nents; unsigned int orig_nents; } ;
96 enum dma_data_direction { DMA_BIDIRECTIONAL = 0, DMA_TO_DEVICE = 1, DMA_FROM_DEVICE = 2, DMA_NONE = 3 } ;
158 struct dma_map_ops { void * (*alloc)(struct device *, size_t , dma_addr_t *, gfp_t , unsigned long); void (*free)(struct device *, size_t , void *, dma_addr_t , unsigned long); int (*mmap)(struct device *, struct vm_area_struct *, void *, dma_addr_t , size_t , unsigned long); int (*get_sgtable)(struct device *, struct sg_table *, void *, dma_addr_t , size_t , unsigned long); dma_addr_t (*map_page)(struct device *, struct page *, unsigned long, size_t , enum dma_data_direction , unsigned long); void (*unmap_page)(struct device *, dma_addr_t , size_t , enum dma_data_direction , unsigned long); int (*map_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction , unsigned long); void (*unmap_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction , unsigned long); dma_addr_t (*map_resource)(struct device *, phys_addr_t , size_t , enum dma_data_direction , unsigned long); void (*unmap_resource)(struct device *, dma_addr_t , size_t , enum dma_data_direction , unsigned long); 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; } ;
56 struct iovec { void *iov_base; __kernel_size_t iov_len; } ;
21 struct kvec { void *iov_base; size_t iov_len; } ;
29 union __anonunion____missing_field_name_399 { const struct iovec *iov; const struct kvec *kvec; const struct bio_vec *bvec; struct pipe_inode_info *pipe; } ;
29 union __anonunion____missing_field_name_400 { unsigned long nr_segs; int idx; } ;
29 struct iov_iter { int type; size_t iov_offset; size_t count; union __anonunion____missing_field_name_399 __annonCompField90; union __anonunion____missing_field_name_400 __annonCompField91; } ;
1426 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; } ;
11 typedef unsigned short __kernel_sa_family_t;
23 typedef __kernel_sa_family_t sa_family_t;
24 struct sockaddr { sa_family_t sa_family; char sa_data[14U]; } ;
43 struct __anonstruct_sync_serial_settings_402 { unsigned int clock_rate; unsigned int clock_type; unsigned short loopback; } ;
43 typedef struct __anonstruct_sync_serial_settings_402 sync_serial_settings;
50 struct __anonstruct_te1_settings_403 { unsigned int clock_rate; unsigned int clock_type; unsigned short loopback; unsigned int slot_map; } ;
50 typedef struct __anonstruct_te1_settings_403 te1_settings;
55 struct __anonstruct_raw_hdlc_proto_404 { unsigned short encoding; unsigned short parity; } ;
55 typedef struct __anonstruct_raw_hdlc_proto_404 raw_hdlc_proto;
65 struct __anonstruct_fr_proto_405 { 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_405 fr_proto;
69 struct __anonstruct_fr_proto_pvc_406 { unsigned int dlci; } ;
69 typedef struct __anonstruct_fr_proto_pvc_406 fr_proto_pvc;
74 struct __anonstruct_fr_proto_pvc_info_407 { unsigned int dlci; char master[16U]; } ;
74 typedef struct __anonstruct_fr_proto_pvc_info_407 fr_proto_pvc_info;
79 struct __anonstruct_cisco_proto_408 { unsigned int interval; unsigned int timeout; } ;
79 typedef struct __anonstruct_cisco_proto_408 cisco_proto;
117 struct ifmap { unsigned long mem_start; unsigned long mem_end; unsigned short base_addr; unsigned char irq; unsigned char dma; unsigned char port; } ;
197 union __anonunion_ifs_ifsu_409 { 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; } ;
197 struct if_settings { unsigned int type; unsigned int size; union __anonunion_ifs_ifsu_409 ifs_ifsu; } ;
216 union __anonunion_ifr_ifrn_410 { char ifrn_name[16U]; } ;
216 union __anonunion_ifr_ifru_411 { 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; } ;
216 struct ifreq { union __anonunion_ifr_ifrn_410 ifr_ifrn; union __anonunion_ifr_ifru_411 ifr_ifru; } ;
18 typedef s32 compat_time_t;
39 typedef s32 compat_long_t;
45 typedef u32 compat_uptr_t;
46 struct compat_timespec { compat_time_t tv_sec; s32 tv_nsec; } ;
278 struct compat_robust_list { compat_uptr_t next; } ;
282 struct compat_robust_list_head { struct compat_robust_list list; compat_long_t futex_offset; compat_uptr_t list_op_pending; } ;
161 struct in6_addr ;
15 typedef u64 netdev_features_t;
70 union __anonunion_in6_u_437 { __u8 u6_addr8[16U]; __be16 u6_addr16[8U]; __be32 u6_addr32[4U]; } ;
70 struct in6_addr { union __anonunion_in6_u_437 in6_u; } ;
46 struct ethhdr { unsigned char h_dest[6U]; unsigned char h_source[6U]; __be16 h_proto; } ;
227 struct pipe_buf_operations ;
227 struct pipe_buffer { struct page *page; unsigned int offset; unsigned int len; const struct pipe_buf_operations *ops; unsigned int flags; unsigned long private; } ;
27 struct pipe_inode_info { struct mutex mutex; wait_queue_head_t wait; unsigned int nrbufs; unsigned int curbuf; unsigned int buffers; unsigned int readers; unsigned int writers; unsigned int files; unsigned int waiting_writers; unsigned int r_counter; unsigned int w_counter; struct page *tmp_page; struct fasync_struct *fasync_readers; struct fasync_struct *fasync_writers; struct pipe_buffer *bufs; struct user_struct *user; } ;
63 struct pipe_buf_operations { int can_merge; int (*confirm)(struct pipe_inode_info *, struct pipe_buffer *); void (*release)(struct pipe_inode_info *, struct pipe_buffer *); int (*steal)(struct pipe_inode_info *, struct pipe_buffer *); void (*get)(struct pipe_inode_info *, struct pipe_buffer *); } ;
272 struct napi_struct ;
273 struct nf_conntrack { atomic_t use; } ;
254 union __anonunion____missing_field_name_451 { __be32 ipv4_daddr; struct in6_addr ipv6_daddr; char neigh_header[8U]; } ;
254 struct nf_bridge_info { atomic_t use; unsigned char orig_proto; unsigned char pkt_otherhost; unsigned char in_prerouting; unsigned char bridged_dnat; __u16 frag_max_size; struct net_device *physindev; struct net_device *physoutdev; union __anonunion____missing_field_name_451 __annonCompField100; } ;
278 struct sk_buff_head { struct sk_buff *next; struct sk_buff *prev; __u32 qlen; spinlock_t lock; } ;
310 struct skb_frag_struct ;
310 typedef struct skb_frag_struct skb_frag_t;
311 struct __anonstruct_page_452 { struct page *p; } ;
311 struct skb_frag_struct { struct __anonstruct_page_452 page; __u32 page_offset; __u32 size; } ;
344 struct skb_shared_hwtstamps { ktime_t hwtstamp; } ;
410 struct skb_shared_info { unsigned char nr_frags; __u8 tx_flags; unsigned short gso_size; unsigned short gso_segs; unsigned short gso_type; struct sk_buff *frag_list; struct skb_shared_hwtstamps hwtstamps; u32 tskey; __be32 ip6_frag_id; atomic_t dataref; void *destructor_arg; skb_frag_t frags[17U]; } ;
500 typedef unsigned int sk_buff_data_t;
501 struct __anonstruct____missing_field_name_454 { u32 stamp_us; u32 stamp_jiffies; } ;
501 union __anonunion____missing_field_name_453 { u64 v64; struct __anonstruct____missing_field_name_454 __annonCompField101; } ;
501 struct skb_mstamp { union __anonunion____missing_field_name_453 __annonCompField102; } ;
564 union __anonunion____missing_field_name_457 { ktime_t tstamp; struct skb_mstamp skb_mstamp; } ;
564 struct __anonstruct____missing_field_name_456 { struct sk_buff *next; struct sk_buff *prev; union __anonunion____missing_field_name_457 __annonCompField103; } ;
564 union __anonunion____missing_field_name_455 { struct __anonstruct____missing_field_name_456 __annonCompField104; struct rb_node rbnode; } ;
564 union __anonunion____missing_field_name_458 { struct net_device *dev; unsigned long dev_scratch; } ;
564 struct sec_path ;
564 struct __anonstruct____missing_field_name_460 { __u16 csum_start; __u16 csum_offset; } ;
564 union __anonunion____missing_field_name_459 { __wsum csum; struct __anonstruct____missing_field_name_460 __annonCompField107; } ;
564 union __anonunion____missing_field_name_461 { unsigned int napi_id; unsigned int sender_cpu; } ;
564 union __anonunion____missing_field_name_462 { __u32 mark; __u32 reserved_tailroom; } ;
564 union __anonunion____missing_field_name_463 { __be16 inner_protocol; __u8 inner_ipproto; } ;
564 struct sk_buff { union __anonunion____missing_field_name_455 __annonCompField105; struct sock *sk; union __anonunion____missing_field_name_458 __annonCompField106; char cb[48U]; unsigned long _skb_refdst; void (*destructor)(struct sk_buff *); struct sec_path *sp; struct nf_conntrack *nfct; struct nf_bridge_info *nf_bridge; unsigned int len; unsigned int data_len; __u16 mac_len; __u16 hdr_len; __u16 queue_mapping; __u8 __cloned_offset[0U]; unsigned char cloned; unsigned char nohdr; unsigned char fclone; unsigned char peeked; unsigned char head_frag; unsigned char xmit_more; unsigned char __unused; __u32 headers_start[0U]; __u8 __pkt_type_offset[0U]; unsigned char pkt_type; unsigned char pfmemalloc; unsigned char ignore_df; unsigned char nfctinfo; unsigned char nf_trace; unsigned char ip_summed; unsigned char ooo_okay; unsigned char l4_hash; unsigned char sw_hash; unsigned char wifi_acked_valid; unsigned char wifi_acked; unsigned char no_fcs; unsigned char encapsulation; unsigned char encap_hdr_csum; unsigned char csum_valid; unsigned char csum_complete_sw; unsigned char csum_level; unsigned char csum_bad; unsigned char ndisc_nodetype; unsigned char ipvs_property; unsigned char inner_protocol_type; unsigned char remcsum_offload; unsigned char offload_fwd_mark; __u16 tc_index; __u16 tc_verd; union __anonunion____missing_field_name_459 __annonCompField108; __u32 priority; int skb_iif; __u32 hash; __be16 vlan_proto; __u16 vlan_tci; union __anonunion____missing_field_name_461 __annonCompField109; __u32 secmark; union __anonunion____missing_field_name_462 __annonCompField110; union __anonunion____missing_field_name_463 __annonCompField111; __u16 inner_transport_header; __u16 inner_network_header; __u16 inner_mac_header; __be16 protocol; __u16 transport_header; __u16 network_header; __u16 mac_header; __u32 headers_end[0U]; sk_buff_data_t tail; sk_buff_data_t end; unsigned char *head; unsigned char *data; unsigned int truesize; atomic_t users; } ;
845 struct dst_entry ;
39 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]; } ;
130 struct ethtool_drvinfo { __u32 cmd; char driver[32U]; char version[32U]; char fw_version[32U]; char bus_info[32U]; char erom_version[32U]; char reserved2[12U]; __u32 n_priv_flags; __u32 n_stats; __u32 testinfo_len; __u32 eedump_len; __u32 regdump_len; } ;
194 struct ethtool_wolinfo { __u32 cmd; __u32 supported; __u32 wolopts; __u8 sopass[6U]; } ;
238 struct ethtool_tunable { __u32 cmd; __u32 id; __u32 type_id; __u32 len; void *data[0U]; } ;
256 struct ethtool_regs { __u32 cmd; __u32 version; __u32 len; __u8 data[0U]; } ;
285 struct ethtool_eeprom { __u32 cmd; __u32 magic; __u32 offset; __u32 len; __u8 data[0U]; } ;
311 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]; } ;
340 struct ethtool_modinfo { __u32 cmd; __u32 type; __u32 eeprom_len; __u32 reserved[8U]; } ;
357 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; } ;
456 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; } ;
493 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; } ;
521 struct ethtool_pauseparam { __u32 cmd; __u32 autoneg; __u32 rx_pause; __u32 tx_pause; } ;
627 struct ethtool_test { __u32 cmd; __u32 flags; __u32 reserved; __u32 len; __u64 data[0U]; } ;
659 struct ethtool_stats { __u32 cmd; __u32 n_stats; __u64 data[0U]; } ;
701 struct ethtool_tcpip4_spec { __be32 ip4src; __be32 ip4dst; __be16 psrc; __be16 pdst; __u8 tos; } ;
734 struct ethtool_ah_espip4_spec { __be32 ip4src; __be32 ip4dst; __be32 spi; __u8 tos; } ;
750 struct ethtool_usrip4_spec { __be32 ip4src; __be32 ip4dst; __be32 l4_4_bytes; __u8 tos; __u8 ip_ver; __u8 proto; } ;
770 struct ethtool_tcpip6_spec { __be32 ip6src[4U]; __be32 ip6dst[4U]; __be16 psrc; __be16 pdst; __u8 tclass; } ;
788 struct ethtool_ah_espip6_spec { __be32 ip6src[4U]; __be32 ip6dst[4U]; __be32 spi; __u8 tclass; } ;
804 struct ethtool_usrip6_spec { __be32 ip6src[4U]; __be32 ip6dst[4U]; __be32 l4_4_bytes; __u8 tclass; __u8 l4_proto; } ;
820 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 ethtool_tcpip6_spec tcp_ip6_spec; struct ethtool_tcpip6_spec udp_ip6_spec; struct ethtool_tcpip6_spec sctp_ip6_spec; struct ethtool_ah_espip6_spec ah_ip6_spec; struct ethtool_ah_espip6_spec esp_ip6_spec; struct ethtool_usrip6_spec usr_ip6_spec; struct ethhdr ether_spec; __u8 hdata[52U]; } ;
837 struct ethtool_flow_ext { __u8 padding[2U]; unsigned char h_dest[6U]; __be16 vlan_etype; __be16 vlan_tci; __be32 data[2U]; } ;
856 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; } ;
906 struct ethtool_rxnfc { __u32 cmd; __u32 flow_type; __u64 data; struct ethtool_rx_flow_spec fs; __u32 rule_cnt; __u32 rule_locs[0U]; } ;
1077 struct ethtool_flash { __u32 cmd; __u32 region; char data[128U]; } ;
1085 struct ethtool_dump { __u32 cmd; __u32 version; __u32 flag; __u32 len; __u8 data[0U]; } ;
1161 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]; } ;
1537 struct ethtool_link_settings { __u32 cmd; __u32 speed; __u8 duplex; __u8 port; __u8 phy_address; __u8 autoneg; __u8 mdio_support; __u8 eth_tp_mdix; __u8 eth_tp_mdix_ctrl; __s8 link_mode_masks_nwords; __u32 reserved[8U]; __u32 link_mode_masks[0U]; } ;
39 enum ethtool_phys_id_state { ETHTOOL_ID_INACTIVE = 0, ETHTOOL_ID_ACTIVE = 1, ETHTOOL_ID_ON = 2, ETHTOOL_ID_OFF = 3 } ;
97 struct __anonstruct_link_modes_467 { unsigned long supported[1U]; unsigned long advertising[1U]; unsigned long lp_advertising[1U]; } ;
97 struct ethtool_link_ksettings { struct ethtool_link_settings base; struct __anonstruct_link_modes_467 link_modes; } ;
158 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_key_size)(struct net_device *); u32 (*get_rxfh_indir_size)(struct net_device *); int (*get_rxfh)(struct net_device *, u32 *, u8 *, u8 *); int (*set_rxfh)(struct net_device *, const u32 *, const u8 *, const u8 ); 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 *); int (*get_tunable)(struct net_device *, const struct ethtool_tunable *, void *); int (*set_tunable)(struct net_device *, const struct ethtool_tunable *, const void *); int (*get_per_queue_coalesce)(struct net_device *, u32 , struct ethtool_coalesce *); int (*set_per_queue_coalesce)(struct net_device *, u32 , struct ethtool_coalesce *); int (*get_link_ksettings)(struct net_device *, struct ethtool_link_ksettings *); int (*set_link_ksettings)(struct net_device *, const struct ethtool_link_ksettings *); } ;
375 struct prot_inuse ;
376 struct netns_core { struct ctl_table_header *sysctl_hdr; int sysctl_somaxconn; struct prot_inuse *inuse; } ;
38 struct u64_stats_sync { } ;
164 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[9U]; } ;
106 struct linux_mib { unsigned long mibs[118U]; } ;
112 struct linux_xfrm_mib { unsigned long mibs[29U]; } ;
118 struct netns_mib { struct tcp_mib *tcp_statistics; struct ipstats_mib *ip_statistics; struct linux_mib *net_statistics; struct udp_mib *udp_statistics; struct udp_mib *udplite_statistics; struct icmp_mib *icmp_statistics; struct icmpmsg_mib *icmpmsg_statistics; struct proc_dir_entry *proc_net_devsnmp6; struct udp_mib *udp_stats_in6; struct udp_mib *udplite_stats_in6; struct ipstats_mib *ipv6_statistics; struct icmpv6_mib *icmpv6_statistics; struct icmpv6msg_mib *icmpv6msg_statistics; struct linux_xfrm_mib *xfrm_statistics; } ;
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 { struct percpu_counter mem; int timeout; int high_thresh; int low_thresh; int max_dist; } ;
187 struct ipv4_devconf ;
188 struct fib_rules_ops ;
189 struct fib_table ;
190 struct local_ports { seqlock_t lock; int range[2U]; bool warned; } ;
24 struct ping_group_range { seqlock_t lock; kgid_t range[2U]; } ;
29 struct inet_peer_base ;
29 struct xt_table ;
29 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_main; struct fib_table *fib_default; int fib_num_tclassid_users; struct hlist_head *fib_table_hash; bool fib_offload_disabled; struct sock *fibnl; struct sock **icmp_sk; struct sock *mc_autojoin_sk; struct inet_peer_base *peers; struct sock **tcp_sk; 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 ip_local_ports; int sysctl_tcp_ecn; int sysctl_tcp_ecn_fallback; int sysctl_ip_default_ttl; int sysctl_ip_no_pmtu_disc; int sysctl_ip_fwd_use_pmtu; int sysctl_ip_nonlocal_bind; int sysctl_ip_dynaddr; int sysctl_ip_early_demux; int sysctl_fwmark_reflect; int sysctl_tcp_fwmark_accept; int sysctl_tcp_l3mdev_accept; int sysctl_tcp_mtu_probing; int sysctl_tcp_base_mss; int sysctl_tcp_probe_threshold; u32 sysctl_tcp_probe_interval; int sysctl_tcp_keepalive_time; int sysctl_tcp_keepalive_probes; int sysctl_tcp_keepalive_intvl; int sysctl_tcp_syn_retries; int sysctl_tcp_synack_retries; int sysctl_tcp_syncookies; int sysctl_tcp_reordering; int sysctl_tcp_retries1; int sysctl_tcp_retries2; int sysctl_tcp_orphan_retries; int sysctl_tcp_fin_timeout; unsigned int sysctl_tcp_notsent_lowat; int sysctl_igmp_max_memberships; int sysctl_igmp_max_msf; int sysctl_igmp_llm_reports; int sysctl_igmp_qrv; struct ping_group_range ping_group_range; atomic_t dev_addr_genid; unsigned long *sysctl_local_reserved_ports; struct list_head mr_tables; struct fib_rules_ops *mr_rules_ops; int sysctl_fib_multipath_use_neigh; unsigned int fib_seq; atomic_t rt_genid; } ;
144 struct neighbour ;
144 struct dst_ops { unsigned short family; 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 net *, struct sock *, 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 auto_flowlabels; int icmpv6_time; int anycast_src_echo_reply; int ip_nonlocal_bind; int fwmark_reflect; int idgen_retries; int idgen_delay; int flowlabel_state_ranges; } ;
40 struct ipv6_devconf ;
40 struct rt6_info ;
40 struct rt6_statistics ;
40 struct fib6_table ;
40 struct seg6_pernet_data ;
40 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 list_head fib6_walkers; struct dst_ops ip6_dst_ops; rwlock_t fib6_walker_lock; spinlock_t fib6_gc_lock; 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 sock *mc_autojoin_sk; struct list_head mr6_tables; struct fib_rules_ops *mr6_rules_ops; atomic_t dev_addr_genid; atomic_t fib6_sernum; struct seg6_pernet_data *seg6_data; } ;
90 struct netns_nf_frag { struct netns_sysctl_ipv6 sysctl; struct netns_frags frags; } ;
96 struct netns_sysctl_lowpan { struct ctl_table_header *frags_hdr; } ;
14 struct netns_ieee802154_lowpan { struct netns_sysctl_lowpan sysctl; struct netns_frags frags; } ;
20 struct sctp_mib ;
21 struct netns_sctp { struct sctp_mib *sctp_statistics; 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 pf_enable; 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; } ;
141 struct netns_dccp { struct sock *v4_ctl_sk; struct sock *v6_ctl_sk; } ;
79 struct nf_logger ;
80 struct nf_queue_handler ;
81 struct nf_hook_entry ;
81 struct netns_nf { struct proc_dir_entry *proc_netfilter; const struct nf_queue_handler *queue_handler; const struct nf_logger *nf_loggers[13U]; struct ctl_table_header *nf_log_dir_header; struct nf_hook_entry *hooks[13U][8U]; bool defrag_ipv4; bool defrag_ipv6; } ;
26 struct ebt_table ;
27 struct netns_xt { struct list_head tables[13U]; bool notrack_deprecated_warning; bool clusterip_deprecated_warning; struct ebt_table *broute_table; struct ebt_table *frame_filter; struct ebt_table *frame_nat; } ;
19 struct hlist_nulls_node ;
19 struct hlist_nulls_head { struct hlist_nulls_node *first; } ;
23 struct hlist_nulls_node { struct hlist_nulls_node *next; struct hlist_nulls_node **pprev; } ;
114 struct ip_conntrack_stat { unsigned int found; unsigned int invalid; unsigned int ignore; unsigned int insert; unsigned int insert_failed; unsigned int drop; unsigned int early_drop; unsigned int error; unsigned int expect_new; unsigned int expect_create; unsigned int expect_delete; unsigned int search_restart; } ;
13 struct nf_proto_net { struct ctl_table_header *ctl_table_header; struct ctl_table *ctl_table; unsigned int users; } ;
27 struct nf_generic_net { struct nf_proto_net pn; unsigned int timeout; } ;
32 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; } ;
46 struct nf_udp_net { struct nf_proto_net pn; unsigned int timeouts[2U]; } ;
51 struct nf_icmp_net { struct nf_proto_net pn; unsigned int timeout; } ;
56 struct nf_dccp_net { struct nf_proto_net pn; int dccp_loose; unsigned int dccp_timeout[10U]; } ;
63 struct nf_sctp_net { struct nf_proto_net pn; unsigned int timeouts[10U]; } ;
76 struct nf_udplite_net { struct nf_proto_net pn; unsigned int timeouts[2U]; } ;
83 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 nf_dccp_net dccp; struct nf_sctp_net sctp; struct nf_udplite_net udplite; } ;
100 struct ct_pcpu { spinlock_t lock; struct hlist_nulls_head unconfirmed; struct hlist_nulls_head dying; } ;
107 struct nf_ct_event_notifier ;
107 struct nf_exp_event_notifier ;
107 struct netns_ct { atomic_t count; unsigned int expect_count; struct delayed_work ecache_dwork; bool ecache_dwork_pending; 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; unsigned int sysctl_log_invalid; int sysctl_events; int sysctl_acct; int sysctl_auto_assign_helper; bool auto_assign_helper_warned; int sysctl_tstamp; int sysctl_checksum; struct ct_pcpu *pcpu_lists; 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; } ;
138 struct nft_af_info ;
139 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; struct nft_af_info *netdev; unsigned int base_seq; u8 gencursor; } ;
509 struct flow_cache_percpu { struct hlist_head *hash_table; int hash_count; u32 hash_rnd; int hash_rnd_recalc; struct tasklet_struct flush_tasklet; } ;
16 struct flow_cache { u32 hash_shift; struct flow_cache_percpu *percpu; struct hlist_node node; int low_watermark; int high_watermark; struct timer_list rnd_timer; } ;
25 struct xfrm_policy_hash { struct hlist_head *table; unsigned int hmask; u8 dbits4; u8 sbits4; u8 dbits6; u8 sbits6; } ;
21 struct xfrm_policy_hthresh { struct work_struct work; seqlock_t lock; u8 lbits4; u8 rbits4; u8 lbits6; u8 rbits6; } ;
30 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 list_head policy_all; struct hlist_head *policy_byidx; unsigned int policy_idx_hmask; struct hlist_head policy_inexact[3U]; struct xfrm_policy_hash policy_bydst[3U]; unsigned int policy_count[6U]; struct work_struct policy_hash_work; struct xfrm_policy_hthresh policy_hthresh; 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_lock; struct mutex xfrm_cfg_mutex; struct flow_cache flow_cache_global; atomic_t flow_cache_genid; struct list_head flow_cache_gc_list; atomic_t flow_cache_gc_count; spinlock_t flow_cache_gc_lock; struct work_struct flow_cache_gc_work; struct work_struct flow_cache_flush_work; struct mutex flow_flush_sem; } ;
87 struct mpls_route ;
88 struct netns_mpls { size_t platform_labels; struct mpls_route **platform_label; struct ctl_table_header *ctl; } ;
16 struct proc_ns_operations ;
17 struct ns_common { atomic_long_t stashed; const struct proc_ns_operations *ops; unsigned int inum; } ;
11 struct net_generic ;
12 struct netns_ipvs ;
13 struct ucounts ;
13 struct net { atomic_t passive; atomic_t count; spinlock_t rules_mod_lock; atomic64_t cookie_gen; struct list_head list; struct list_head cleanup_list; struct list_head exit_list; struct user_namespace *user_ns; struct ucounts *ucounts; spinlock_t nsid_lock; struct idr netns_ids; struct ns_common ns; 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_ieee802154_lowpan ieee802154_lowpan; 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 list_head nfnl_acct_list; struct list_head nfct_timeout_list; struct sk_buff_head wext_nlevents; struct net_generic *gen; struct netns_xfrm xfrm; struct netns_ipvs *ipvs; struct netns_mpls mpls; struct sock *diag_nlsk; atomic_t fnhe_genid; } ;
248 struct __anonstruct_possible_net_t_479 { struct net *net; } ;
248 typedef struct __anonstruct_possible_net_t_479 possible_net_t;
383 enum fwnode_type { FWNODE_INVALID = 0, FWNODE_OF = 1, FWNODE_ACPI = 2, FWNODE_ACPI_DATA = 3, FWNODE_ACPI_STATIC = 4, FWNODE_PDATA = 5, FWNODE_IRQCHIP = 6 } ;
393 struct fwnode_handle { enum fwnode_type type; struct fwnode_handle *secondary; } ;
32 typedef u32 phandle;
34 struct property { char *name; int length; void *value; struct property *next; unsigned long _flags; unsigned int unique_id; struct bin_attribute attr; } ;
44 struct device_node { const char *name; const char *type; phandle phandle; const char *full_name; struct fwnode_handle fwnode; struct property *properties; struct property *deadprops; struct device_node *parent; struct device_node *child; struct device_node *sibling; struct kobject kobj; unsigned long _flags; void *data; } ;
1290 struct mii_ioctl_data { __u16 phy_id; __u16 reg_num; __u16 val_in; __u16 val_out; } ;
161 struct mii_if_info { int phy_id; int advertising; int phy_id_mask; int reg_num_mask; unsigned char full_duplex; unsigned char force_media; unsigned char supports_gmii; struct net_device *dev; int (*mdio_read)(struct net_device *, int, int); void (*mdio_write)(struct net_device *, int, int, int); } ;
296 struct mii_bus ;
303 struct mdio_device { struct device dev; const struct dev_pm_ops *pm_ops; struct mii_bus *bus; int (*bus_match)(struct device *, struct device_driver *); void (*device_free)(struct mdio_device *); void (*device_remove)(struct mdio_device *); int addr; int flags; } ;
41 struct mdio_driver_common { struct device_driver driver; int flags; } ;
244 struct phy_device ;
245 enum led_brightness { LED_OFF = 0, LED_HALF = 127, LED_FULL = 255 } ;
251 struct led_trigger ;
251 struct led_classdev { const char *name; enum led_brightness brightness; enum led_brightness max_brightness; int flags; unsigned long work_flags; void (*brightness_set)(struct led_classdev *, enum led_brightness ); int (*brightness_set_blocking)(struct led_classdev *, enum led_brightness ); enum led_brightness (*brightness_get)(struct led_classdev *); int (*blink_set)(struct led_classdev *, unsigned long *, unsigned long *); struct device *dev; const struct attribute_group **groups; struct list_head node; const char *default_trigger; unsigned long blink_delay_on; unsigned long blink_delay_off; struct timer_list blink_timer; int blink_brightness; int new_blink_brightness; void (*flash_resume)(struct led_classdev *); struct work_struct set_brightness_work; int delayed_set_value; struct rw_semaphore trigger_lock; struct led_trigger *trigger; struct list_head trig_list; void *trigger_data; bool activated; struct mutex led_access; } ;
226 struct led_trigger { const char *name; void (*activate)(struct led_classdev *); void (*deactivate)(struct led_classdev *); rwlock_t leddev_list_lock; struct list_head led_cdevs; struct list_head next_trig; } ;
418 struct phy_led_trigger { struct led_trigger trigger; char name[31U]; unsigned int speed; } ;
39 enum ldv_32668 { PHY_INTERFACE_MODE_NA = 0, PHY_INTERFACE_MODE_MII = 1, PHY_INTERFACE_MODE_GMII = 2, PHY_INTERFACE_MODE_SGMII = 3, PHY_INTERFACE_MODE_TBI = 4, PHY_INTERFACE_MODE_REVMII = 5, PHY_INTERFACE_MODE_RMII = 6, PHY_INTERFACE_MODE_RGMII = 7, PHY_INTERFACE_MODE_RGMII_ID = 8, PHY_INTERFACE_MODE_RGMII_RXID = 9, PHY_INTERFACE_MODE_RGMII_TXID = 10, PHY_INTERFACE_MODE_RTBI = 11, PHY_INTERFACE_MODE_SMII = 12, PHY_INTERFACE_MODE_XGMII = 13, PHY_INTERFACE_MODE_MOCA = 14, PHY_INTERFACE_MODE_QSGMII = 15, PHY_INTERFACE_MODE_TRGMII = 16, PHY_INTERFACE_MODE_MAX = 17 } ;
86 typedef enum ldv_32668 phy_interface_t;
149 enum ldv_32721 { MDIOBUS_ALLOCATED = 1, MDIOBUS_REGISTERED = 2, MDIOBUS_UNREGISTERED = 3, MDIOBUS_RELEASED = 4 } ;
156 struct mii_bus { struct module *owner; const char *name; char id[17U]; void *priv; int (*read)(struct mii_bus *, int, int); int (*write)(struct mii_bus *, int, int, u16 ); int (*reset)(struct mii_bus *); struct mutex mdio_lock; struct device *parent; enum ldv_32721 state; struct device dev; struct mdio_device *mdio_map[32U]; u32 phy_mask; u32 phy_ignore_ta_mask; int irq[32U]; } ;
237 enum phy_state { PHY_DOWN = 0, PHY_STARTING = 1, PHY_READY = 2, PHY_PENDING = 3, PHY_UP = 4, PHY_AN = 5, PHY_RUNNING = 6, PHY_NOLINK = 7, PHY_FORCING = 8, PHY_CHANGELINK = 9, PHY_HALTED = 10, PHY_RESUMING = 11 } ;
252 struct phy_c45_device_ids { u32 devices_in_package; u32 device_ids[8U]; } ;
345 struct phy_driver ;
345 struct phy_device { struct mdio_device mdio; struct phy_driver *drv; u32 phy_id; struct phy_c45_device_ids c45_ids; bool is_c45; bool is_internal; bool is_pseudo_fixed_link; bool has_fixups; bool suspended; enum phy_state state; u32 dev_flags; phy_interface_t interface; int speed; int duplex; int pause; int asym_pause; int link; u32 interrupts; u32 supported; u32 advertising; u32 lp_advertising; u32 eee_broken_modes; int autoneg; int link_timeout; struct phy_led_trigger *phy_led_triggers; unsigned int phy_num_led_triggers; struct phy_led_trigger *last_triggered; int irq; void *priv; struct work_struct phy_queue; struct delayed_work state_queue; atomic_t irq_disable; struct mutex lock; struct net_device *attached_dev; u8 mdix; u8 mdix_ctrl; void (*adjust_link)(struct net_device *); } ;
457 struct phy_driver { struct mdio_driver_common mdiodrv; u32 phy_id; char *name; unsigned int phy_id_mask; u32 features; u32 flags; const void *driver_data; int (*soft_reset)(struct phy_device *); int (*config_init)(struct phy_device *); int (*probe)(struct phy_device *); int (*suspend)(struct phy_device *); int (*resume)(struct phy_device *); int (*config_aneg)(struct phy_device *); int (*aneg_done)(struct phy_device *); int (*read_status)(struct phy_device *); int (*ack_interrupt)(struct phy_device *); int (*config_intr)(struct phy_device *); int (*did_interrupt)(struct phy_device *); void (*remove)(struct phy_device *); int (*match_phy_device)(struct phy_device *); int (*ts_info)(struct phy_device *, struct ethtool_ts_info *); int (*hwtstamp)(struct phy_device *, struct ifreq *); bool (*rxtstamp)(struct phy_device *, struct sk_buff *, int); void (*txtstamp)(struct phy_device *, struct sk_buff *, int); int (*set_wol)(struct phy_device *, struct ethtool_wolinfo *); void (*get_wol)(struct phy_device *, struct ethtool_wolinfo *); void (*link_change_notify)(struct phy_device *); int (*read_mmd_indirect)(struct phy_device *, int, int, int); void (*write_mmd_indirect)(struct phy_device *, int, int, int, u32 ); int (*module_info)(struct phy_device *, struct ethtool_modinfo *); int (*module_eeprom)(struct phy_device *, struct ethtool_eeprom *, u8 *); int (*get_sset_count)(struct phy_device *); void (*get_strings)(struct phy_device *, u8 *); void (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *); int (*get_tunable)(struct phy_device *, struct ethtool_tunable *, void *); int (*set_tunable)(struct phy_device *, struct ethtool_tunable *, const void *); } ;
884 struct fixed_phy_status { int link; int speed; int duplex; int pause; int asym_pause; } ;
27 enum dsa_tag_protocol { DSA_TAG_PROTO_NONE = 0, DSA_TAG_PROTO_DSA = 1, DSA_TAG_PROTO_TRAILER = 2, DSA_TAG_PROTO_EDSA = 3, DSA_TAG_PROTO_BRCM = 4, DSA_TAG_PROTO_QCA = 5, DSA_TAG_LAST = 6 } ;
37 struct dsa_chip_data { struct device *host_dev; int sw_addr; int eeprom_len; struct device_node *of_node; char *port_names[12U]; struct device_node *port_dn[12U]; s8 rtable[4U]; } ;
71 struct dsa_platform_data { struct device *netdev; struct net_device *of_netdev; int nr_chips; struct dsa_chip_data *chip; } ;
87 struct packet_type ;
88 struct dsa_switch ;
88 struct dsa_device_ops ;
88 struct dsa_switch_tree { struct list_head list; u32 tree; struct kref refcount; bool applied; struct dsa_platform_data *pd; struct net_device *master_netdev; int (*rcv)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *); struct ethtool_ops master_ethtool_ops; const struct ethtool_ops *master_orig_ethtool_ops; s8 cpu_switch; s8 cpu_port; struct dsa_switch *ds[4U]; const struct dsa_device_ops *tag_ops; } ;
141 struct dsa_port { struct net_device *netdev; struct device_node *dn; unsigned int ageing_time; u8 stp_state; } ;
148 struct dsa_switch_ops ;
148 struct dsa_switch { struct device *dev; struct dsa_switch_tree *dst; int index; void *priv; struct dsa_chip_data *cd; struct dsa_switch_ops *ops; s8 rtable[4U]; char hwmon_name[24U]; struct device *hwmon_dev; struct net_device *master_netdev; u32 dsa_port_mask; u32 cpu_port_mask; u32 enabled_port_mask; u32 phys_mii_mask; struct dsa_port ports[12U]; struct mii_bus *slave_mii_bus; } ;
235 struct switchdev_trans ;
236 struct switchdev_obj ;
237 struct switchdev_obj_port_fdb ;
238 struct switchdev_obj_port_mdb ;
239 struct switchdev_obj_port_vlan ;
240 struct dsa_switch_ops { struct list_head list; const char * (*probe)(struct device *, struct device *, int, void **); enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *); int (*setup)(struct dsa_switch *); int (*set_addr)(struct dsa_switch *, u8 *); u32 (*get_phy_flags)(struct dsa_switch *, int); int (*phy_read)(struct dsa_switch *, int, int); int (*phy_write)(struct dsa_switch *, int, int, u16 ); void (*adjust_link)(struct dsa_switch *, int, struct phy_device *); void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *); 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 *); void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *); int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *); int (*suspend)(struct dsa_switch *); int (*resume)(struct dsa_switch *); int (*port_enable)(struct dsa_switch *, int, struct phy_device *); void (*port_disable)(struct dsa_switch *, int, struct phy_device *); int (*set_eee)(struct dsa_switch *, int, struct phy_device *, struct ethtool_eee *); int (*get_eee)(struct dsa_switch *, int, struct ethtool_eee *); int (*get_temp)(struct dsa_switch *, int *); int (*get_temp_limit)(struct dsa_switch *, int *); int (*set_temp_limit)(struct dsa_switch *, int); int (*get_temp_alarm)(struct dsa_switch *, bool *); int (*get_eeprom_len)(struct dsa_switch *); int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *); int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *); int (*get_regs_len)(struct dsa_switch *, int); void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *); int (*set_ageing_time)(struct dsa_switch *, unsigned int); int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *); void (*port_bridge_leave)(struct dsa_switch *, int); void (*port_stp_state_set)(struct dsa_switch *, int, u8 ); void (*port_fast_age)(struct dsa_switch *, int); int (*port_vlan_filtering)(struct dsa_switch *, int, bool ); int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct switchdev_trans *); void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct switchdev_trans *); int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *); int (*port_vlan_dump)(struct dsa_switch *, int, struct switchdev_obj_port_vlan *, int (*)(struct switchdev_obj *)); int (*port_fdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_fdb *, struct switchdev_trans *); void (*port_fdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_fdb *, struct switchdev_trans *); int (*port_fdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_fdb *); int (*port_fdb_dump)(struct dsa_switch *, int, struct switchdev_obj_port_fdb *, int (*)(struct switchdev_obj *)); int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct switchdev_trans *); void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct switchdev_trans *); int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *); int (*port_mdb_dump)(struct dsa_switch *, int, struct switchdev_obj_port_mdb *, int (*)(struct switchdev_obj *)); } ;
407 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]; } ;
87 struct ieee_qcn { __u8 rpg_enable[8U]; __u32 rppp_max_rps[8U]; __u32 rpg_time_reset[8U]; __u32 rpg_byte_reset[8U]; __u32 rpg_threshold[8U]; __u32 rpg_max_rate[8U]; __u32 rpg_ai_rate[8U]; __u32 rpg_hai_rate[8U]; __u32 rpg_gd[8U]; __u32 rpg_min_dec_fac[8U]; __u32 rpg_min_rate[8U]; __u32 cndd_state_machine[8U]; } ;
132 struct ieee_qcn_stats { __u64 rppp_rp_centiseconds[8U]; __u32 rppp_created_rps[8U]; } ;
144 struct ieee_pfc { __u8 pfc_cap; __u8 pfc_en; __u8 mbc; __u16 delay; __u64 requests[8U]; __u64 indications[8U]; } ;
164 struct cee_pg { __u8 willing; __u8 error; __u8 pg_en; __u8 tcs_supported; __u8 pg_bw[8U]; __u8 prio_pg[8U]; } ;
187 struct cee_pfc { __u8 willing; __u8 error; __u8 pfc_en; __u8 tcs_supported; } ;
202 struct dcb_app { __u8 selector; __u8 priority; __u16 protocol; } ;
236 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_getqcn)(struct net_device *, struct ieee_qcn *); int (*ieee_setqcn)(struct net_device *, struct ieee_qcn *); int (*ieee_getqcnstats)(struct net_device *, struct ieee_qcn_stats *); 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 ); int (*setapp)(struct net_device *, u8 , u16 , u8 ); int (*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 *); } ;
105 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; } ;
58 struct mnt_namespace ;
59 struct ipc_namespace ;
60 struct cgroup_namespace ;
61 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; struct cgroup_namespace *cgroup_ns; } ;
86 struct uid_gid_extent { u32 first; u32 lower_first; u32 count; } ;
19 struct uid_gid_map { u32 nr_extents; struct uid_gid_extent extent[5U]; } ;
31 struct user_namespace { struct uid_gid_map uid_map; struct uid_gid_map gid_map; struct uid_gid_map projid_map; atomic_t count; struct user_namespace *parent; int level; kuid_t owner; kgid_t group; struct ns_common ns; unsigned long flags; struct key *persistent_keyring_register; struct rw_semaphore persistent_keyring_register_sem; struct work_struct work; struct ctl_table_set set; struct ctl_table_header *sysctls; struct ucounts *ucounts; int ucount_max[7U]; } ;
63 struct ucounts { struct hlist_node node; struct user_namespace *ns; kuid_t uid; atomic_t count; atomic_t ucount[7U]; } ;
631 struct cgroup_namespace { atomic_t count; struct ns_common ns; struct user_namespace *user_ns; struct ucounts *ucounts; struct css_set *root_cset; } ;
686 struct netprio_map { struct callback_head rcu; u32 priomap_len; u32 priomap[]; } ;
41 struct nlmsghdr { __u32 nlmsg_len; __u16 nlmsg_type; __u16 nlmsg_flags; __u32 nlmsg_seq; __u32 nlmsg_pid; } ;
143 struct nlattr { __u16 nla_len; __u16 nla_type; } ;
105 struct netlink_callback { struct sk_buff *skb; const struct nlmsghdr *nlh; int (*start)(struct netlink_callback *); 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]; } ;
183 struct ndmsg { __u8 ndm_family; __u8 ndm_pad1; __u16 ndm_pad2; __s32 ndm_ifindex; __u16 ndm_state; __u8 ndm_flags; __u8 ndm_type; } ;
41 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; __u64 rx_nohandler; } ;
869 struct ifla_vf_stats { __u64 rx_packets; __u64 tx_packets; __u64 rx_bytes; __u64 tx_bytes; __u64 broadcast; __u64 multicast; } ;
16 struct ifla_vf_info { __u32 vf; __u8 mac[32U]; __u32 vlan; __u32 qos; __u32 spoofchk; __u32 linkstate; __u32 min_tx_rate; __u32 max_tx_rate; __u32 rss_query_en; __u32 trusted; __be16 vlan_proto; } ;
117 struct netpoll_info ;
118 struct wireless_dev ;
119 struct wpan_dev ;
120 struct mpls_dev ;
121 struct udp_tunnel_info ;
70 enum netdev_tx { __NETDEV_TX_MIN = -2147483648, NETDEV_TX_OK = 0, NETDEV_TX_BUSY = 16 } ;
113 typedef enum netdev_tx netdev_tx_t;
132 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 ;
197 struct netdev_hw_addr { struct list_head list; unsigned char addr[32U]; unsigned char type; bool global_use; int sync_cnt; int refcount; int synced; struct callback_head callback_head; } ;
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 (*cache)(const struct neighbour *, struct hh_cache *, __be16 ); void (*cache_update)(struct hh_cache *, const struct net_device *, const unsigned char *); bool (*validate)(const char *, unsigned int); } ;
302 struct napi_struct { struct list_head poll_list; unsigned long state; int weight; unsigned int gro_count; int (*poll)(struct napi_struct *, int); int poll_owner; struct net_device *dev; struct sk_buff *gro_list; struct sk_buff *skb; struct hrtimer timer; struct list_head dev_list; struct hlist_node napi_hash_node; unsigned int napi_id; } ;
357 enum rx_handler_result { RX_HANDLER_CONSUMED = 0, RX_HANDLER_ANOTHER = 1, RX_HANDLER_EXACT = 2, RX_HANDLER_PASS = 3 } ;
405 typedef enum rx_handler_result rx_handler_result_t;
406 typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **);
541 struct Qdisc ;
541 struct netdev_queue { struct net_device *dev; struct Qdisc *qdisc; struct Qdisc *qdisc_sleeping; struct kobject kobj; int numa_node; unsigned long tx_maxrate; unsigned long trans_timeout; spinlock_t _xmit_lock; int xmit_lock_owner; unsigned long trans_start; unsigned long state; struct dql dql; } ;
612 struct rps_map { unsigned int len; struct callback_head rcu; u16 cpus[0U]; } ;
624 struct rps_dev_flow { u16 cpu; u16 filter; unsigned int last_qtail; } ;
636 struct rps_dev_flow_table { unsigned int mask; struct callback_head rcu; struct rps_dev_flow flows[0U]; } ;
688 struct netdev_rx_queue { struct rps_map *rps_map; struct rps_dev_flow_table *rps_flow_table; struct kobject kobj; struct net_device *dev; } ;
711 struct xps_map { unsigned int len; unsigned int alloc_len; struct callback_head rcu; u16 queues[0U]; } ;
724 struct xps_dev_maps { struct callback_head rcu; struct xps_map *cpu_map[0U]; } ;
735 struct netdev_tc_txq { u16 count; u16 offset; } ;
746 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]; } ;
762 struct netdev_phys_item_id { unsigned char id[32U]; unsigned char id_len; } ;
790 struct tc_cls_u32_offload ;
791 struct tc_cls_flower_offload ;
791 struct tc_cls_matchall_offload ;
791 struct tc_cls_bpf_offload ;
791 union __anonunion____missing_field_name_492 { u8 tc; struct tc_cls_u32_offload *cls_u32; struct tc_cls_flower_offload *cls_flower; struct tc_cls_matchall_offload *cls_mall; struct tc_cls_bpf_offload *cls_bpf; } ;
791 struct tc_to_netdev { unsigned int type; union __anonunion____missing_field_name_492 __annonCompField115; bool egress_dev; } ;
808 enum xdp_netdev_command { XDP_SETUP_PROG = 0, XDP_QUERY_PROG = 1 } ;
813 union __anonunion____missing_field_name_493 { struct bpf_prog *prog; bool prog_attached; } ;
813 struct netdev_xdp { enum xdp_netdev_command command; union __anonunion____missing_field_name_493 __annonCompField116; } ;
836 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 *); netdev_features_t (*ndo_features_check)(struct sk_buff *, struct net_device *, netdev_features_t ); 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 *); bool (*ndo_has_offload_stats)(const struct net_device *, int); int (*ndo_get_offload_stats)(int, const struct net_device *, void *); 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 *); 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 , __be16 ); int (*ndo_set_vf_rate)(struct net_device *, int, int, int); int (*ndo_set_vf_spoofchk)(struct net_device *, int, bool ); int (*ndo_set_vf_trust)(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_get_vf_stats)(struct net_device *, int, struct ifla_vf_stats *); 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_set_vf_guid)(struct net_device *, int, u64 , int); int (*ndo_set_vf_rss_query_en)(struct net_device *, int, bool ); int (*ndo_setup_tc)(struct net_device *, u32 , __be16 , struct tc_to_netdev *); 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 net_device *, struct neighbour *); void (*ndo_neigh_destroy)(struct net_device *, struct neighbour *); int (*ndo_fdb_add)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16 , u16 ); int (*ndo_fdb_del)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16 ); int (*ndo_fdb_dump)(struct sk_buff *, struct netlink_callback *, struct net_device *, struct net_device *, int *); int (*ndo_bridge_setlink)(struct net_device *, struct nlmsghdr *, u16 ); int (*ndo_bridge_getlink)(struct sk_buff *, u32 , u32 , struct net_device *, u32 , int); int (*ndo_bridge_dellink)(struct net_device *, struct nlmsghdr *, u16 ); int (*ndo_change_carrier)(struct net_device *, bool ); int (*ndo_get_phys_port_id)(struct net_device *, struct netdev_phys_item_id *); int (*ndo_get_phys_port_name)(struct net_device *, char *, size_t ); void (*ndo_udp_tunnel_add)(struct net_device *, struct udp_tunnel_info *); void (*ndo_udp_tunnel_del)(struct net_device *, struct udp_tunnel_info *); 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 *); int (*ndo_get_lock_subclass)(struct net_device *); int (*ndo_set_tx_maxrate)(struct net_device *, int, u32 ); int (*ndo_get_iflink)(const struct net_device *); int (*ndo_change_proto_down)(struct net_device *, bool ); int (*ndo_fill_metadata_dst)(struct net_device *, struct sk_buff *); void (*ndo_set_rx_headroom)(struct net_device *, int); int (*ndo_xdp)(struct net_device *, struct netdev_xdp *); } ;
1372 struct __anonstruct_adj_list_494 { struct list_head upper; struct list_head lower; } ;
1372 struct iw_handler_def ;
1372 struct iw_public_data ;
1372 struct switchdev_ops ;
1372 struct l3mdev_ops ;
1372 struct ndisc_ops ;
1372 struct vlan_info ;
1372 struct tipc_bearer ;
1372 struct in_device ;
1372 struct dn_dev ;
1372 struct inet6_dev ;
1372 struct tcf_proto ;
1372 struct cpu_rmap ;
1372 struct pcpu_lstats ;
1372 struct pcpu_sw_netstats ;
1372 struct pcpu_dstats ;
1372 struct pcpu_vstats ;
1372 union __anonunion____missing_field_name_495 { void *ml_priv; struct pcpu_lstats *lstats; struct pcpu_sw_netstats *tstats; struct pcpu_dstats *dstats; struct pcpu_vstats *vstats; } ;
1372 struct garp_port ;
1372 struct mrp_port ;
1372 struct rtnl_link_ops ;
1372 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; atomic_t carrier_changes; unsigned long state; struct list_head dev_list; struct list_head napi_list; struct list_head unreg_list; struct list_head close_list; struct list_head ptype_all; struct list_head ptype_specific; struct __anonstruct_adj_list_494 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; netdev_features_t gso_partial_features; int ifindex; int group; struct net_device_stats stats; atomic_long_t rx_dropped; atomic_long_t tx_dropped; atomic_long_t rx_nohandler; 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 switchdev_ops *switchdev_ops; const struct l3mdev_ops *l3mdev_ops; const struct ndisc_ops *ndisc_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 int min_mtu; unsigned int max_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; unsigned short dev_port; spinlock_t addr_list_lock; unsigned char name_assign_type; bool uc_promisc; struct netdev_hw_addr_list uc; struct netdev_hw_addr_list mc; struct netdev_hw_addr_list dev_addrs; struct kset *queues_kset; 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; struct wpan_dev *ieee802154_ptr; struct mpls_dev *mpls_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; unsigned long gro_flush_timeout; rx_handler_func_t *rx_handler; void *rx_handler_data; struct tcf_proto *ingress_cl_list; struct netdev_queue *ingress_queue; struct nf_hook_entry *nf_hooks_ingress; unsigned char broadcast[32U]; struct cpu_rmap *rx_cpu_rmap; struct hlist_node index_hlist; struct netdev_queue *_tx; unsigned int num_tx_queues; unsigned int real_num_tx_queues; struct Qdisc *qdisc; struct hlist_head qdisc_hash[16U]; unsigned long tx_queue_len; spinlock_t tx_global_lock; int watchdog_timeo; struct xps_dev_maps *xps_maps; struct tcf_proto *egress_cl_list; struct timer_list watchdog_timer; int *pcpu_refcnt; struct list_head todo_list; 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; possible_net_t nd_net; union __anonunion____missing_field_name_495 __annonCompField117; 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; struct lock_class_key *qdisc_running_key; bool proto_down; } ;
2194 struct packet_type { __be16 type; struct net_device *dev; int (*func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *); bool (*id_match)(struct packet_type *, struct sock *); void *af_packet_priv; struct list_head list; } ;
2222 struct pcpu_sw_netstats { u64 rx_packets; u64 rx_bytes; u64 tx_packets; u64 tx_bytes; struct u64_stats_sync syncp; } ;
3168 enum skb_free_reason { SKB_REASON_CONSUMED = 0, SKB_REASON_DROPPED = 1 } ;
644 struct firmware { size_t size; const u8 *data; struct page **pages; void *priv; } ;
294 struct chip_info { const char *name; int drv_flags; } ;
497 struct starfire_rx_desc { __le64 rxaddr; } ;
466 struct full_rx_done_desc { __le32 status; __le16 status3; __le16 status2; __le16 vlanid; __le16 csum; __le32 timestamp; } ;
476 typedef struct full_rx_done_desc rx_done_desc;
492 struct starfire_tx_desc_2 { __le32 status; __le32 reserved; __le64 addr; } ;
501 typedef struct starfire_tx_desc_2 starfire_tx_desc;
510 struct tx_done_desc { __le32 status; } ;
517 struct rx_ring_info { struct sk_buff *skb; dma_addr_t mapping; } ;
525 struct tx_ring_info { struct sk_buff *skb; dma_addr_t mapping; unsigned int used_slots; } ;
530 struct netdev_private { struct starfire_rx_desc *rx_ring; starfire_tx_desc *tx_ring; dma_addr_t rx_ring_dma; dma_addr_t tx_ring_dma; struct rx_ring_info rx_info[256U]; struct tx_ring_info tx_info[32U]; rx_done_desc *rx_done_q; dma_addr_t rx_done_q_dma; unsigned int rx_done; struct tx_done_desc *tx_done_q; dma_addr_t tx_done_q_dma; unsigned int tx_done; struct napi_struct napi; struct net_device *dev; struct pci_dev *pci_dev; unsigned long active_vlans[64U]; void *queue_mem; dma_addr_t queue_mem_dma; size_t queue_mem_size; spinlock_t lock; unsigned int cur_rx; unsigned int dirty_rx; unsigned int cur_tx; unsigned int dirty_tx; unsigned int reap_tx; unsigned int rx_buf_sz; int speed100; u32 tx_mode; u32 intr_timer_ctrl; u8 tx_threshold; struct mii_if_info mii_if; int phy_cnt; unsigned char phys[2U]; void *base; } ;
1 long int __builtin_expect(long, long);
34 extern struct module __this_module;
72 void set_bit(long nr, volatile unsigned long *addr);
110 void clear_bit(long nr, volatile unsigned long *addr);
204 bool test_and_set_bit(long nr, volatile unsigned long *addr);
308 bool constant_test_bit(long nr, const volatile unsigned long *addr);
14 unsigned long int find_next_bit(const unsigned long *, unsigned long, unsigned long);
42 unsigned long int find_first_bit(const unsigned long *, unsigned long);
7 __u32 __arch_swab32(__u32 val);
46 __u16 __fswab16(__u16 val);
55 __u32 __fswab32(__u32 val);
173 __u32 __swab32p(const __u32 *p);
79 __u32 __be32_to_cpup(const __be32 *p);
178 int printk(const char *, ...);
8 void ldv_dma_map_page();
7 extern unsigned long page_offset_base;
9 extern unsigned long vmemmap_base;
23 unsigned long int __phys_addr(unsigned long);
32 void * __memcpy(void *, const void *, size_t );
57 void * __memset(void *, int, size_t );
27 size_t strlcpy(char *, const char *, size_t );
93 void __raw_spin_lock_init(raw_spinlock_t *, const char *, struct lock_class_key *);
22 void _raw_spin_lock(raw_spinlock_t *);
31 void _raw_spin_lock_irq(raw_spinlock_t *);
41 void _raw_spin_unlock(raw_spinlock_t *);
43 void _raw_spin_unlock_irq(raw_spinlock_t *);
289 raw_spinlock_t * spinlock_check(spinlock_t *lock);
300 void spin_lock(spinlock_t *lock);
330 void spin_lock_irq(spinlock_t *lock);
345 void spin_unlock(spinlock_t *lock);
355 void spin_unlock_irq(spinlock_t *lock);
78 extern volatile unsigned long jiffies;
56 unsigned char readb(const volatile void *addr);
57 unsigned short int readw(const volatile void *addr);
58 unsigned int readl(const volatile void *addr);
64 void writeb(unsigned char val, volatile void *addr);
65 void writew(unsigned short val, volatile void *addr);
66 void writel(unsigned int val, volatile void *addr);
181 void * ioremap_nocache(resource_size_t , unsigned long);
192 void * ioremap(resource_size_t offset, unsigned long size);
197 void iounmap(volatile void *);
87 const char * kobject_name(const struct kobject *kobj);
139 int request_threaded_irq(unsigned int, irqreturn_t (*)(int, void *), irqreturn_t (*)(int, void *), unsigned long, const char *, void *);
144 int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *), unsigned long flags, const char *name, void *dev);
158 void free_irq(unsigned int, void *);
974 const char * dev_name(const struct device *dev);
1021 void * dev_get_drvdata(const struct device *dev);
1026 void dev_set_drvdata(struct device *dev, void *data);
1248 void dev_err(const struct device *, const char *, ...);
1015 int pci_enable_device(struct pci_dev *);
1032 void pci_disable_device(struct pci_dev *);
1035 void pci_set_master(struct pci_dev *);
1042 int pci_try_set_mwi(struct pci_dev *);
1088 int pci_save_state(struct pci_dev *);
1089 void pci_restore_state(struct pci_dev *);
1102 int pci_set_power_state(struct pci_dev *, pci_power_t );
1103 pci_power_t pci_choose_state(struct pci_dev *, pm_message_t );
1161 int pci_request_regions(struct pci_dev *, const char *);
1163 void pci_release_regions(struct pci_dev *);
1216 int __pci_register_driver(struct pci_driver *, struct module *, const char *);
1225 void pci_unregister_driver(struct pci_driver *);
992 void * lowmem_page_address(const struct page *page);
1661 void * pci_get_drvdata(struct pci_dev *pdev);
1666 void pci_set_drvdata(struct pci_dev *pdev, void *data);
1674 const char * pci_name(const struct pci_dev *pdev);
37 void debug_dma_map_page(struct device *, struct page *, size_t , size_t , int, dma_addr_t , bool );
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 *);
66 void debug_dma_sync_single_for_cpu(struct device *, dma_addr_t , size_t , int);
70 void debug_dma_sync_single_for_device(struct device *, dma_addr_t , size_t , int);
131 void kmemcheck_mark_initialized(void *address, unsigned int n);
136 int valid_dma_direction(int dma_direction);
28 extern struct dma_map_ops *dma_ops;
30 struct dma_map_ops * get_dma_ops(struct device *dev);
42 bool arch_dma_alloc_attrs(struct device **, gfp_t *);
180 dma_addr_t ldv_dma_map_single_attrs_5(struct device *dev, void *ptr, size_t size, enum dma_data_direction dir, unsigned long attrs);
180 dma_addr_t dma_map_single_attrs(struct device *dev, void *ptr, size_t size, enum dma_data_direction dir, unsigned long attrs);
203 void dma_unmap_single_attrs(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir, unsigned long attrs);
315 void dma_sync_single_for_cpu(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir);
327 void dma_sync_single_for_device(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir);
456 void * dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, unsigned long attrs);
497 void * dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag);
503 void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t dma_handle);
16 void * pci_alloc_consistent(struct pci_dev *hwdev, size_t size, dma_addr_t *dma_handle);
31 void pci_free_consistent(struct pci_dev *hwdev, size_t size, void *vaddr, dma_addr_t dma_handle);
38 dma_addr_t pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size, int direction);
44 void pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr, size_t size, int direction);
79 void pci_dma_sync_single_for_cpu(struct pci_dev *hwdev, dma_addr_t dma_handle, size_t size, int direction);
86 void pci_dma_sync_single_for_device(struct pci_dev *hwdev, dma_addr_t dma_handle, size_t size, int direction);
10 void __const_udelay(unsigned long);
325 unsigned int skb_frag_size(const skb_frag_t *frag);
911 void consume_skb(struct sk_buff *);
999 int skb_pad(struct sk_buff *, int);
1198 unsigned char * skb_end_pointer(const struct sk_buff *skb);
1804 unsigned int skb_headlen(const struct sk_buff *skb);
1920 unsigned char * skb_put(struct sk_buff *, unsigned int);
2023 void skb_reserve(struct sk_buff *skb, int len);
2429 struct sk_buff * __netdev_alloc_skb(struct net_device *, unsigned int, gfp_t );
2445 struct sk_buff * netdev_alloc_skb(struct net_device *dev, unsigned int length);
2565 struct page * skb_frag_page(const skb_frag_t *frag);
2623 void * skb_frag_address(const skb_frag_t *frag);
2783 int skb_padto(struct sk_buff *skb, unsigned int len);
3175 void skb_copy_to_linear_data(struct sk_buff *skb, const void *from, const unsigned int len);
31 int mii_link_ok(struct mii_if_info *);
32 int mii_nway_restart(struct mii_if_info *);
34 int mii_ethtool_get_link_ksettings(struct mii_if_info *, struct ethtool_link_ksettings *);
37 int mii_ethtool_set_link_ksettings(struct mii_if_info *, const struct ethtool_link_ksettings *);
44 int generic_mii_ioctl(struct mii_if_info *, struct mii_ioctl_data *, int, unsigned int *);
49 struct mii_ioctl_data * if_mii(struct ifreq *rq);
408 void __napi_schedule(struct napi_struct *);
411 bool napi_disable_pending(struct napi_struct *n);
425 bool napi_schedule_prep(struct napi_struct *n);
467 bool napi_complete_done(struct napi_struct *, int);
476 bool napi_complete(struct napi_struct *n);
502 void napi_disable(struct napi_struct *);
511 void napi_enable(struct napi_struct *n);
1936 struct netdev_queue * netdev_get_tx_queue(const struct net_device *dev, unsigned int index);
2031 void * netdev_priv(const struct net_device *dev);
2062 void netif_napi_add(struct net_device *, struct napi_struct *, int (*)(struct napi_struct *, int), int);
2434 void free_netdev(struct net_device *);
2790 void netif_tx_start_queue(struct netdev_queue *dev_queue);
2801 void netif_start_queue(struct net_device *dev);
2816 void netif_tx_wake_queue(struct netdev_queue *);
2825 void netif_wake_queue(struct net_device *dev);
2840 void netif_tx_stop_queue(struct netdev_queue *dev_queue);
2852 void netif_stop_queue(struct net_device *dev);
2859 bool netif_tx_queue_stopped(const struct netdev_queue *dev_queue);
2870 bool netif_queue_stopped(const struct net_device *dev);
3044 bool netif_running(const struct net_device *dev);
3174 void __dev_kfree_skb_irq(struct sk_buff *, enum skb_free_reason );
3196 void dev_kfree_skb_irq(struct sk_buff *skb);
3218 int netif_receive_skb(struct sk_buff *);
3339 void netif_carrier_on(struct net_device *);
3341 void netif_carrier_off(struct net_device *);
3408 void netif_device_detach(struct net_device *);
3410 void netif_device_attach(struct net_device *);
3511 void netif_trans_update(struct net_device *dev);
3667 int register_netdev(struct net_device *);
3668 void unregister_netdev(struct net_device *);
36 __be16 eth_type_trans(struct sk_buff *, struct net_device *);
48 int eth_mac_addr(struct net_device *, void *);
50 int eth_validate_addr(struct net_device *);
52 struct net_device * alloc_etherdev_mqs(int, unsigned int, unsigned int);
11 u32 crc32_le(u32 , const unsigned char *, size_t );
411 void __vlan_hwaccel_put_tag(struct sk_buff *skb, __be16 vlan_proto, u16 vlan_tci);
42 int request_firmware(const struct firmware **, const char *, struct device *);
53 void release_firmware(const struct firmware *);
78 int intr_latency = 0;
79 int small_frames = 0;
81 int debug = 1;
82 int max_interrupt_work = 20;
83 int mtu = 0;
86 const int multicast_filter_limit = 512;
88 int enable_hw_cksum = 1;
108 int rx_copybreak = 0;
170 const char version[137U] = { '\xe', 's', 't', 'a', 'r', 'f', 'i', 'r', 'e', '.', 'c', ':', 'v', '1', '.', '0', '3', ' ', '7', '/', '2', '6', '/', '2', '0', '0', '0', ' ', ' ', 'W', 'r', 'i', 't', 't', 'e', 'n', ' ', 'b', 'y', ' ', 'D', 'o', 'n', 'a', 'l', 'd', ' ', 'B', 'e', 'c', 'k', 'e', 'r', ' ', '<', 'b', 'e', 'c', 'k', 'e', 'r', '@', 's', 'c', 'y', 'l', 'd', '.', 'c', 'o', 'm', '>', '\xa', ' ', '(', 'u', 'n', 'o', 'f', 'f', 'i', 'c', 'i', 'a', 'l', ' ', '2', '.', '2', '/', '2', '.', '4', ' ', 'k', 'e', 'r', 'n', 'e', 'l', ' ', 'p', 'o', 'r', 't', ',', ' ', 'v', 'e', 'r', 's', 'i', 'o', 'n', ' ', '2', '.', '1', ',', ' ', 'J', 'u', 'l', 'y', ' ', ' ', '6', ',', ' ', '2', '0', '0', '8', ')', '\xa', '\x0' };
289 const struct pci_device_id starfire_pci_tbl[2U] = { { 36868U, 26901U, 4294967295U, 4294967295U, 0U, 0U, 0UL }, { 0U, 0U, 0U, 0U, 0U, 0U, 0UL } };
293 const struct pci_device_id __mod_pci__starfire_pci_tbl_device_table[2U] = { };
299 const struct chip_info netdrv_tbl[1U] = { { "Adaptec Starfire 6915", 1 } };
576 int mdio_read(struct net_device *dev, int phy_id, int location);
577 void mdio_write(struct net_device *dev, int phy_id, int location, int value);
578 int netdev_open(struct net_device *dev);
579 void check_duplex(struct net_device *dev);
580 void tx_timeout(struct net_device *dev);
581 void init_ring(struct net_device *dev);
582 netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev);
583 irqreturn_t intr_handler(int irq, void *dev_instance);
584 void netdev_error(struct net_device *dev, int intr_status);
585 int __netdev_rx(struct net_device *dev, int *quota);
586 int netdev_poll(struct napi_struct *napi, int budget);
587 void refill_rx_ring(struct net_device *dev);
589 void set_rx_mode(struct net_device *dev);
590 struct net_device_stats * get_stats(struct net_device *dev);
591 int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
592 int netdev_close(struct net_device *dev);
593 void netdev_media_change(struct net_device *dev);
594 const struct ethtool_ops ethtool_ops;
598 int netdev_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid);
613 int netdev_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, u16 vid);
630 const struct net_device_ops netdev_ops = { 0, 0, &netdev_open, &netdev_close, &start_tx, 0, 0, 0, &set_rx_mode, ð_mac_addr, ð_validate_addr, &netdev_ioctl, 0, 0, 0, &tx_timeout, 0, 0, 0, &get_stats, &netdev_vlan_rx_add_vid, &netdev_vlan_rx_kill_vid, 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, 0, 0, 0, 0, 0, 0, 0, 0 };
646 int starfire_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
1713 u32 set_vlan_mode(struct netdev_private *np);
1805 int check_if_running(struct net_device *dev);
1812 void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info);
1820 int get_link_ksettings(struct net_device *dev, struct ethtool_link_ksettings *cmd);
1830 int set_link_ksettings(struct net_device *dev, const struct ethtool_link_ksettings *cmd);
1842 int nway_reset(struct net_device *dev);
1848 u32 get_link(struct net_device *dev);
1854 u32 get_msglevel(struct net_device *dev);
1859 void set_msglevel(struct net_device *dev, u32 val);
1864 const struct ethtool_ops ethtool_ops = { 0, 0, &get_drvinfo, 0, 0, 0, 0, &get_msglevel, &set_msglevel, &nway_reset, &get_link, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &check_if_running, 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, &get_link_ksettings, &set_link_ksettings };
1964 int starfire_suspend(struct pci_dev *pdev, pm_message_t state);
1979 int starfire_resume(struct pci_dev *pdev);
1996 void starfire_remove_one(struct pci_dev *pdev);
2020 struct pci_driver starfire_driver = { { 0, 0 }, "starfire", (const struct pci_device_id *)(&starfire_pci_tbl), &starfire_init_one, &starfire_remove_one, &starfire_suspend, 0, 0, &starfire_resume, 0, 0, 0, { 0, 0, 0, 0, (_Bool)0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { { { { 0 } }, 0U, 0U, 0, { 0, { 0, 0 }, 0, 0, 0UL } } } }, { 0, 0 } } };
2032 int starfire_init();
2047 void starfire_cleanup();
2080 void ldv_check_final_state();
2083 void ldv_check_return_value(int);
2086 void ldv_check_return_value_probe(int);
2089 void ldv_initialize();
2092 void ldv_handler_precall();
2095 int nondet_int();
2098 int LDV_IN_INTERRUPT = 0;
2101 void ldv_main0_sequence_infinite_withcheck_stateful();
10 void ldv_error();
7 bool ldv_is_err(const void *ptr);
14 void * ldv_err_ptr(long error);
21 long int ldv_ptr_err(const void *ptr);
28 bool ldv_is_err_or_null(const void *ptr);
5 int LDV_DMA_MAP_CALLS = 0;
16 void ldv_dma_mapping_error();
return ;
}
-entry_point
{
2103 struct net_device *var_group1;
2104 int res_netdev_open_5;
2105 int res_netdev_close_28;
2106 struct sk_buff *var_group2;
2107 struct ifreq *var_group3;
2108 int var_netdev_ioctl_27_p2;
2109 unsigned short var_netdev_vlan_rx_add_vid_0_p1;
2110 unsigned short var_netdev_vlan_rx_add_vid_0_p2;
2111 unsigned short var_netdev_vlan_rx_kill_vid_1_p1;
2112 unsigned short var_netdev_vlan_rx_kill_vid_1_p2;
2113 struct ethtool_drvinfo *var_group4;
2114 unsigned int var_set_msglevel_26_p1;
2115 struct ethtool_link_ksettings *var_group5;
2116 const struct ethtool_link_ksettings *var_set_link_ksettings_22_p1;
2117 struct pci_dev *var_group6;
2118 const struct pci_device_id *var_starfire_init_one_2_p1;
2119 int res_starfire_init_one_2;
2120 struct pm_message var_starfire_suspend_29_p1;
2121 int var_intr_handler_10_p0;
2122 void *var_intr_handler_10_p1;
2123 int ldv_s_netdev_ops_net_device_ops;
2124 int ldv_s_starfire_driver_pci_driver;
2125 int tmp;
2126 int tmp___0;
2127 int tmp___1;
4664 ldv_s_netdev_ops_net_device_ops = 0;
4669 ldv_s_starfire_driver_pci_driver = 0;
4543 LDV_IN_INTERRUPT = 1;
4552 ldv_initialize() { /* Function call is skipped due to function is undefined */}
4661 ldv_handler_precall() { /* Function call is skipped due to function is undefined */}
4662 -starfire_init()
{
2034 int tmp;
2036 printk((const char *)(&version)) { /* Function call is skipped due to function is undefined */}
2038 printk("\016starfire: polling (NAPI) enabled\n") { /* Function call is skipped due to function is undefined */}
2043 tmp = __pci_register_driver(&starfire_driver, &__this_module, "starfire") { /* Function call is skipped due to function is undefined */}
2043 return tmp;;
}
4662 assume(!(tmp != 0));
4675 goto ldv_52857;
4675 tmp___1 = nondet_int() { /* Function call is skipped due to function is undefined */}
4675 assume(tmp___1 != 0);
4679 goto ldv_52856;
4676 ldv_52856:;
4680 tmp___0 = nondet_int() { /* Function call is skipped due to function is undefined */}
4680 switch (tmp___0);
4681 assume(!(tmp___0 == 0));
4807 assume(!(tmp___0 == 1));
4934 assume(!(tmp___0 == 2));
5056 assume(!(tmp___0 == 3));
5180 assume(!(tmp___0 == 4));
5304 assume(!(tmp___0 == 5));
5426 assume(!(tmp___0 == 6));
5550 assume(!(tmp___0 == 7));
5674 assume(!(tmp___0 == 8));
5798 assume(!(tmp___0 == 9));
5922 assume(!(tmp___0 == 10));
6046 assume(!(tmp___0 == 11));
6170 assume(!(tmp___0 == 12));
6294 assume(!(tmp___0 == 13));
6418 assume(!(tmp___0 == 14));
6542 assume(!(tmp___0 == 15));
6666 assume(!(tmp___0 == 16));
6790 assume(!(tmp___0 == 17));
6907 assume(!(tmp___0 == 18));
7031 assume(!(tmp___0 == 19));
7155 assume(tmp___0 == 20);
7263 ldv_handler_precall() { /* Function call is skipped due to function is undefined */}
7264 -starfire_resume(var_group6)
{
1981 struct net_device *dev;
1982 void *tmp;
1983 _Bool tmp___0;
1981 -pci_get_drvdata(pdev)
{
1663 void *tmp;
1663 -dev_get_drvdata((const struct device *)(&(pdev->dev)))
{
1023 void *__CPAchecker_TMP_0 = (void *)(dev->driver_data);
1023 return __CPAchecker_TMP_0;;
}
1663 return tmp;;
}
1981 dev = (struct net_device *)tmp;
1983 pci_set_power_state(pdev, 0) { /* Function call is skipped due to function is undefined */}
1984 pci_restore_state(pdev) { /* Function call is skipped due to function is undefined */}
1986 -netif_running((const struct net_device *)dev)
{
3046 _Bool tmp;
3046 -constant_test_bit(0L, (const volatile unsigned long *)(&(dev->state)))
{
310 return (((int)(((unsigned long)(*(addr + ((unsigned long)(nr >> 6))))) >> (((int)nr) & 63))) & 1) != 0;;
}
3046 return ((int)tmp) != 0;;
}
1986 assume(!(((int)tmp___0) == 0));
1987 -netdev_open(dev)
{
876 const struct firmware *fw_rx;
877 const struct firmware *fw_tx;
878 const __be32 *fw_rx_data;
879 const __be32 *fw_tx_data;
880 struct netdev_private *np;
881 void *tmp;
882 void *ioaddr;
883 int irq;
884 int i;
885 int retval;
886 unsigned long tx_size;
887 unsigned long rx_size;
888 unsigned long tx_done_q_size;
889 unsigned long rx_done_q_size;
890 unsigned long tx_ring_size;
891 unsigned long rx_ring_size;
892 __be16 *eaddrs;
893 void *setup_frm;
894 unsigned short tmp___0;
895 unsigned short tmp___1;
896 unsigned short tmp___2;
897 unsigned int tmp___3;
898 unsigned int tmp___4;
899 unsigned int tmp___5;
878 -netdev_priv((const struct net_device *)dev)
{
2033 return ((void *)dev) + 3200U;;
}
878 np = (struct netdev_private *)tmp;
879 ioaddr = np->base;
880 const int __CPAchecker_TMP_0 = (const int)(np->pci_dev->irq);
880 irq = __CPAchecker_TMP_0;
887 -request_irq((unsigned int)irq, &intr_handler, 128UL, (const char *)(&(dev->name)), (void *)dev)
{
147 int tmp;
147 tmp = request_threaded_irq(irq, handler, (irqreturn_t (*)(int, void *))0, flags, name, dev) { /* Function call is skipped due to function is undefined */}
147 return tmp;;
}
888 assume(!(retval != 0));
892 -writel(0U, ((volatile void *)ioaddr) + 327792U)
{
66 Ignored inline assembler code
67 return ;;
}
893 -writel(1U, ((volatile void *)ioaddr) + 327744U)
{
66 Ignored inline assembler code
67 return ;;
}
894 assume(!(debug > 1));
899 unsigned long __CPAchecker_TMP_1 = (unsigned long)(np->queue_mem);
899 assume(!(__CPAchecker_TMP_1 == ((unsigned long)((void *)0))));
922 netif_carrier_off(dev) { /* Function call is skipped due to function is undefined */}
923 -init_ring(dev)
{
1141 struct netdev_private *np;
1142 void *tmp;
1143 int i;
1144 unsigned int tmp___0;
1145 unsigned int tmp___1;
1146 unsigned int tmp___2;
1147 unsigned int tmp___3;
1148 unsigned int tmp___4;
1149 struct sk_buff *skb;
1150 struct sk_buff *tmp___5;
1141 -netdev_priv((const struct net_device *)dev)
{
2033 return ((void *)dev) + 3200U;;
}
1141 np = (struct netdev_private *)tmp;
1144 tmp___1 = 0U;
1144 np->reap_tx = tmp___1;
1144 tmp___0 = tmp___1;
1144 np->cur_tx = tmp___0;
1144 np->cur_rx = tmp___0;
1145 tmp___4 = 0U;
1145 np->tx_done = tmp___4;
1145 tmp___3 = tmp___4;
1145 np->rx_done = tmp___3;
1145 tmp___2 = tmp___3;
1145 np->dirty_tx = tmp___2;
1145 np->dirty_rx = tmp___2;
1147 unsigned int __CPAchecker_TMP_0;
1147 assume((dev->mtu) > 1500U);
1147 __CPAchecker_TMP_0 = (dev->mtu) + 32U;
1147 np->rx_buf_sz = __CPAchecker_TMP_0;
1150 i = 0;
1150 goto ldv_52538;
1150 assume(i <= 255);
1152 goto ldv_52537;
1151 ldv_52537:;
1151 -netdev_alloc_skb(dev, np->rx_buf_sz)
{
2447 struct sk_buff *tmp;
2448 tmp = __netdev_alloc_skb(dev, length, 34078752U) { /* Function call is skipped due to function is undefined */}
2448 return tmp;;
}
1151 skb = tmp___5;
1152 ((np->rx_info)[i]).skb = skb;
1153 assume(!(((unsigned long)skb) == ((unsigned long)((struct sk_buff *)0))));
1155 void *__CPAchecker_TMP_1 = (void *)(skb->data);
1155 size_t __CPAchecker_TMP_2 = (size_t )(np->rx_buf_sz);
1155 -pci_map_single(np->pci_dev, __CPAchecker_TMP_1, __CPAchecker_TMP_2, 2)
{
41 unsigned long long tmp;
40 struct device *__CPAchecker_TMP_0;
40 assume(((unsigned long)hwdev) != ((unsigned long)((struct pci_dev *)0)));
40 __CPAchecker_TMP_0 = &(hwdev->dev);
40 -dma_map_single_attrs(__CPAchecker_TMP_0, ptr, size, (enum dma_data_direction )direction, 0UL)
{
38 unsigned long long tmp;
38 -ldv_dma_map_page()
{
10 assume(!(LDV_DMA_MAP_CALLS != 0));
12 LDV_DMA_MAP_CALLS = LDV_DMA_MAP_CALLS + 1;
13 return ;;
}
40 -ldv_dma_map_single_attrs_5(dev, ptr, size, dir, attrs)
{
184 struct dma_map_ops *ops;
185 struct dma_map_ops *tmp;
186 unsigned long long addr;
187 int tmp___0;
188 long tmp___1;
189 unsigned long tmp___2;
190 unsigned long tmp___3;
185 -get_dma_ops(dev)
{
32 long tmp;
35 tmp = __builtin_expect(((unsigned long)dev) == ((unsigned long)((struct device *)0)), 0L) { /* Function call is skipped due to function is undefined */}
35 assume(!(tmp != 0L));
35 assume(((unsigned long)(dev->archdata.dma_ops)) == ((unsigned long)((struct dma_map_ops *)0)));
36 return dma_ops;;
}
185 ops = tmp;
188 -kmemcheck_mark_initialized(ptr, (unsigned int)size)
{
133 return ;;
}
189 -valid_dma_direction((int)dir)
{
138 int __CPAchecker_TMP_0;
138 assume(!(dma_direction == 0));
138 assume(!(dma_direction == 1));
138 assume(dma_direction == 2);
__CPAchecker_TMP_0 = 1;
138 return __CPAchecker_TMP_0;;
}
189 tmp___1 = __builtin_expect(tmp___0 == 0, 0L) { /* Function call is skipped due to function is undefined */}
189 assume(!(tmp___1 != 0L));
190 tmp___2 = __phys_addr((unsigned long)ptr) { /* Function call is skipped due to function is undefined */}
190 addr = (*(ops->map_page))(dev, (struct page *)((tmp___2 >> 12) + vmemmap_base), ((unsigned long)ptr) & 4095UL, size, dir, attrs);
193 tmp___3 = __phys_addr((unsigned long)ptr) { /* Function call is skipped due to function is undefined */}
193 debug_dma_map_page(dev, (struct page *)((tmp___3 >> 12) + vmemmap_base), ((unsigned long)ptr) & 4095UL, size, (int)dir, addr, 1) { /* Function call is skipped due to function is undefined */}
196 return addr;;
}
40 return tmp;;
}
40 return tmp;;
}
1157 ((np->rx_ring) + ((unsigned long)i))->rxaddr = (((np->rx_info)[i]).mapping) | 1ULL;
1150 i = i + 1;
1151 ldv_52538:;
1150 assume(i <= 255);
1152 goto ldv_52537;
1151 ldv_52537:;
1151 -netdev_alloc_skb(dev, np->rx_buf_sz)
{
2447 struct sk_buff *tmp;
2448 tmp = __netdev_alloc_skb(dev, length, 34078752U) { /* Function call is skipped due to function is undefined */}
2448 return tmp;;
}
1151 skb = tmp___5;
1152 ((np->rx_info)[i]).skb = skb;
1153 assume(!(((unsigned long)skb) == ((unsigned long)((struct sk_buff *)0))));
1155 void *__CPAchecker_TMP_1 = (void *)(skb->data);
1155 size_t __CPAchecker_TMP_2 = (size_t )(np->rx_buf_sz);
1155 -pci_map_single(np->pci_dev, __CPAchecker_TMP_1, __CPAchecker_TMP_2, 2)
{
41 unsigned long long tmp;
40 struct device *__CPAchecker_TMP_0;
40 assume(((unsigned long)hwdev) != ((unsigned long)((struct pci_dev *)0)));
40 __CPAchecker_TMP_0 = &(hwdev->dev);
40 -dma_map_single_attrs(__CPAchecker_TMP_0, ptr, size, (enum dma_data_direction )direction, 0UL)
{
38 unsigned long long tmp;
38 -ldv_dma_map_page()
{
10 assume(LDV_DMA_MAP_CALLS != 0);
10 -ldv_error()
{
15 LDV_ERROR:;
}
}
}
}
}
}
}
}
Source code
1 #ifndef _ASM_X86_BITOPS_H 2 #define _ASM_X86_BITOPS_H 3 4 /* 5 * Copyright 1992, Linus Torvalds. 6 * 7 * Note: inlines with more than a single statement should be marked 8 * __always_inline to avoid problems with older gcc's inlining heuristics. 9 */ 10 11 #ifndef _LINUX_BITOPS_H 12 #error only <linux/bitops.h> can be included directly 13 #endif 14 15 #include <linux/compiler.h> 16 #include <asm/alternative.h> 17 #include <asm/rmwcc.h> 18 #include <asm/barrier.h> 19 20 #if BITS_PER_LONG == 32 21 # define _BITOPS_LONG_SHIFT 5 22 #elif BITS_PER_LONG == 64 23 # define _BITOPS_LONG_SHIFT 6 24 #else 25 # error "Unexpected BITS_PER_LONG" 26 #endif 27 28 #define BIT_64(n) (U64_C(1) << (n)) 29 30 /* 31 * These have to be done with inline assembly: that way the bit-setting 32 * is guaranteed to be atomic. All bit operations return 0 if the bit 33 * was cleared before the operation and != 0 if it was not. 34 * 35 * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1). 36 */ 37 38 #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1) 39 /* Technically wrong, but this avoids compilation errors on some gcc 40 versions. */ 41 #define BITOP_ADDR(x) "=m" (*(volatile long *) (x)) 42 #else 43 #define BITOP_ADDR(x) "+m" (*(volatile long *) (x)) 44 #endif 45 46 #define ADDR BITOP_ADDR(addr) 47 48 /* 49 * We do the locked ops that don't return the old value as 50 * a mask operation on a byte. 51 */ 52 #define IS_IMMEDIATE(nr) (__builtin_constant_p(nr)) 53 #define CONST_MASK_ADDR(nr, addr) BITOP_ADDR((void *)(addr) + ((nr)>>3)) 54 #define CONST_MASK(nr) (1 << ((nr) & 7)) 55 56 /** 57 * set_bit - Atomically set a bit in memory 58 * @nr: the bit to set 59 * @addr: the address to start counting from 60 * 61 * This function is atomic and may not be reordered. See __set_bit() 62 * if you do not require the atomic guarantees. 63 * 64 * Note: there are no guarantees that this function will not be reordered 65 * on non x86 architectures, so if you are writing portable code, 66 * make sure not to rely on its reordering guarantees. 67 * 68 * Note that @nr may be almost arbitrarily large; this function is not 69 * restricted to acting on a single-word quantity. 70 */ 71 static __always_inline void 72 set_bit(long nr, volatile unsigned long *addr) 73 { 74 if (IS_IMMEDIATE(nr)) { 75 asm volatile(LOCK_PREFIX "orb %1,%0" 76 : CONST_MASK_ADDR(nr, addr) 77 : "iq" ((u8)CONST_MASK(nr)) 78 : "memory"); 79 } else { 80 asm volatile(LOCK_PREFIX "bts %1,%0" 81 : BITOP_ADDR(addr) : "Ir" (nr) : "memory"); 82 } 83 } 84 85 /** 86 * __set_bit - Set a bit in memory 87 * @nr: the bit to set 88 * @addr: the address to start counting from 89 * 90 * Unlike set_bit(), this function is non-atomic and may be reordered. 91 * If it's called on the same region of memory simultaneously, the effect 92 * may be that only one operation succeeds. 93 */ 94 static __always_inline void __set_bit(long nr, volatile unsigned long *addr) 95 { 96 asm volatile("bts %1,%0" : ADDR : "Ir" (nr) : "memory"); 97 } 98 99 /** 100 * clear_bit - Clears a bit in memory 101 * @nr: Bit to clear 102 * @addr: Address to start counting from 103 * 104 * clear_bit() is atomic and may not be reordered. However, it does 105 * not contain a memory barrier, so if it is used for locking purposes, 106 * you should call smp_mb__before_atomic() and/or smp_mb__after_atomic() 107 * in order to ensure changes are visible on other processors. 108 */ 109 static __always_inline void 110 clear_bit(long nr, volatile unsigned long *addr) 111 { 112 if (IS_IMMEDIATE(nr)) { 113 asm volatile(LOCK_PREFIX "andb %1,%0" 114 : CONST_MASK_ADDR(nr, addr) 115 : "iq" ((u8)~CONST_MASK(nr))); 116 } else { 117 asm volatile(LOCK_PREFIX "btr %1,%0" 118 : BITOP_ADDR(addr) 119 : "Ir" (nr)); 120 } 121 } 122 123 /* 124 * clear_bit_unlock - Clears a bit in memory 125 * @nr: Bit to clear 126 * @addr: Address to start counting from 127 * 128 * clear_bit() is atomic and implies release semantics before the memory 129 * operation. It can be used for an unlock. 130 */ 131 static __always_inline void clear_bit_unlock(long nr, volatile unsigned long *addr) 132 { 133 barrier(); 134 clear_bit(nr, addr); 135 } 136 137 static __always_inline void __clear_bit(long nr, volatile unsigned long *addr) 138 { 139 asm volatile("btr %1,%0" : ADDR : "Ir" (nr)); 140 } 141 142 /* 143 * __clear_bit_unlock - Clears a bit in memory 144 * @nr: Bit to clear 145 * @addr: Address to start counting from 146 * 147 * __clear_bit() is non-atomic and implies release semantics before the memory 148 * operation. It can be used for an unlock if no other CPUs can concurrently 149 * modify other bits in the word. 150 * 151 * No memory barrier is required here, because x86 cannot reorder stores past 152 * older loads. Same principle as spin_unlock. 153 */ 154 static __always_inline void __clear_bit_unlock(long nr, volatile unsigned long *addr) 155 { 156 barrier(); 157 __clear_bit(nr, addr); 158 } 159 160 /** 161 * __change_bit - Toggle a bit in memory 162 * @nr: the bit to change 163 * @addr: the address to start counting from 164 * 165 * Unlike change_bit(), this function is non-atomic and may be reordered. 166 * If it's called on the same region of memory simultaneously, the effect 167 * may be that only one operation succeeds. 168 */ 169 static __always_inline void __change_bit(long nr, volatile unsigned long *addr) 170 { 171 asm volatile("btc %1,%0" : ADDR : "Ir" (nr)); 172 } 173 174 /** 175 * change_bit - Toggle a bit in memory 176 * @nr: Bit to change 177 * @addr: Address to start counting from 178 * 179 * change_bit() is atomic and may not be reordered. 180 * Note that @nr may be almost arbitrarily large; this function is not 181 * restricted to acting on a single-word quantity. 182 */ 183 static __always_inline void change_bit(long nr, volatile unsigned long *addr) 184 { 185 if (IS_IMMEDIATE(nr)) { 186 asm volatile(LOCK_PREFIX "xorb %1,%0" 187 : CONST_MASK_ADDR(nr, addr) 188 : "iq" ((u8)CONST_MASK(nr))); 189 } else { 190 asm volatile(LOCK_PREFIX "btc %1,%0" 191 : BITOP_ADDR(addr) 192 : "Ir" (nr)); 193 } 194 } 195 196 /** 197 * test_and_set_bit - Set a bit and return its old value 198 * @nr: Bit to set 199 * @addr: Address to count from 200 * 201 * This operation is atomic and cannot be reordered. 202 * It also implies a memory barrier. 203 */ 204 static __always_inline bool test_and_set_bit(long nr, volatile unsigned long *addr) 205 { 206 GEN_BINARY_RMWcc(LOCK_PREFIX "bts", *addr, "Ir", nr, "%0", c); 207 } 208 209 /** 210 * test_and_set_bit_lock - Set a bit and return its old value for lock 211 * @nr: Bit to set 212 * @addr: Address to count from 213 * 214 * This is the same as test_and_set_bit on x86. 215 */ 216 static __always_inline bool 217 test_and_set_bit_lock(long nr, volatile unsigned long *addr) 218 { 219 return test_and_set_bit(nr, addr); 220 } 221 222 /** 223 * __test_and_set_bit - Set a bit and return its old value 224 * @nr: Bit to set 225 * @addr: Address to count from 226 * 227 * This operation is non-atomic and can be reordered. 228 * If two examples of this operation race, one can appear to succeed 229 * but actually fail. You must protect multiple accesses with a lock. 230 */ 231 static __always_inline bool __test_and_set_bit(long nr, volatile unsigned long *addr) 232 { 233 bool oldbit; 234 235 asm("bts %2,%1\n\t" 236 CC_SET(c) 237 : CC_OUT(c) (oldbit), ADDR 238 : "Ir" (nr)); 239 return oldbit; 240 } 241 242 /** 243 * test_and_clear_bit - Clear a bit and return its old value 244 * @nr: Bit to clear 245 * @addr: Address to count from 246 * 247 * This operation is atomic and cannot be reordered. 248 * It also implies a memory barrier. 249 */ 250 static __always_inline bool test_and_clear_bit(long nr, volatile unsigned long *addr) 251 { 252 GEN_BINARY_RMWcc(LOCK_PREFIX "btr", *addr, "Ir", nr, "%0", c); 253 } 254 255 /** 256 * __test_and_clear_bit - Clear a bit and return its old value 257 * @nr: Bit to clear 258 * @addr: Address to count from 259 * 260 * This operation is non-atomic and can be reordered. 261 * If two examples of this operation race, one can appear to succeed 262 * but actually fail. You must protect multiple accesses with a lock. 263 * 264 * Note: the operation is performed atomically with respect to 265 * the local CPU, but not other CPUs. Portable code should not 266 * rely on this behaviour. 267 * KVM relies on this behaviour on x86 for modifying memory that is also 268 * accessed from a hypervisor on the same CPU if running in a VM: don't change 269 * this without also updating arch/x86/kernel/kvm.c 270 */ 271 static __always_inline bool __test_and_clear_bit(long nr, volatile unsigned long *addr) 272 { 273 bool oldbit; 274 275 asm volatile("btr %2,%1\n\t" 276 CC_SET(c) 277 : CC_OUT(c) (oldbit), ADDR 278 : "Ir" (nr)); 279 return oldbit; 280 } 281 282 /* WARNING: non atomic and it can be reordered! */ 283 static __always_inline bool __test_and_change_bit(long nr, volatile unsigned long *addr) 284 { 285 bool oldbit; 286 287 asm volatile("btc %2,%1\n\t" 288 CC_SET(c) 289 : CC_OUT(c) (oldbit), ADDR 290 : "Ir" (nr) : "memory"); 291 292 return oldbit; 293 } 294 295 /** 296 * test_and_change_bit - Change a bit and return its old value 297 * @nr: Bit to change 298 * @addr: Address to count from 299 * 300 * This operation is atomic and cannot be reordered. 301 * It also implies a memory barrier. 302 */ 303 static __always_inline bool test_and_change_bit(long nr, volatile unsigned long *addr) 304 { 305 GEN_BINARY_RMWcc(LOCK_PREFIX "btc", *addr, "Ir", nr, "%0", c); 306 } 307 308 static __always_inline bool constant_test_bit(long nr, const volatile unsigned long *addr) 309 { 310 return ((1UL << (nr & (BITS_PER_LONG-1))) & 311 (addr[nr >> _BITOPS_LONG_SHIFT])) != 0; 312 } 313 314 static __always_inline bool variable_test_bit(long nr, volatile const unsigned long *addr) 315 { 316 bool oldbit; 317 318 asm volatile("bt %2,%1\n\t" 319 CC_SET(c) 320 : CC_OUT(c) (oldbit) 321 : "m" (*(unsigned long *)addr), "Ir" (nr)); 322 323 return oldbit; 324 } 325 326 #if 0 /* Fool kernel-doc since it doesn't do macros yet */ 327 /** 328 * test_bit - Determine whether a bit is set 329 * @nr: bit number to test 330 * @addr: Address to start counting from 331 */ 332 static bool test_bit(int nr, const volatile unsigned long *addr); 333 #endif 334 335 #define test_bit(nr, addr) \ 336 (__builtin_constant_p((nr)) \ 337 ? constant_test_bit((nr), (addr)) \ 338 : variable_test_bit((nr), (addr))) 339 340 /** 341 * __ffs - find first set bit in word 342 * @word: The word to search 343 * 344 * Undefined if no bit exists, so code should check against 0 first. 345 */ 346 static __always_inline unsigned long __ffs(unsigned long word) 347 { 348 asm("rep; bsf %1,%0" 349 : "=r" (word) 350 : "rm" (word)); 351 return word; 352 } 353 354 /** 355 * ffz - find first zero bit in word 356 * @word: The word to search 357 * 358 * Undefined if no zero exists, so code should check against ~0UL first. 359 */ 360 static __always_inline unsigned long ffz(unsigned long word) 361 { 362 asm("rep; bsf %1,%0" 363 : "=r" (word) 364 : "r" (~word)); 365 return word; 366 } 367 368 /* 369 * __fls: find last set bit in word 370 * @word: The word to search 371 * 372 * Undefined if no set bit exists, so code should check against 0 first. 373 */ 374 static __always_inline unsigned long __fls(unsigned long word) 375 { 376 asm("bsr %1,%0" 377 : "=r" (word) 378 : "rm" (word)); 379 return word; 380 } 381 382 #undef ADDR 383 384 #ifdef __KERNEL__ 385 /** 386 * ffs - find first set bit in word 387 * @x: the word to search 388 * 389 * This is defined the same way as the libc and compiler builtin ffs 390 * routines, therefore differs in spirit from the other bitops. 391 * 392 * ffs(value) returns 0 if value is 0 or the position of the first 393 * set bit if value is nonzero. The first (least significant) bit 394 * is at position 1. 395 */ 396 static __always_inline int ffs(int x) 397 { 398 int r; 399 400 #ifdef CONFIG_X86_64 401 /* 402 * AMD64 says BSFL won't clobber the dest reg if x==0; Intel64 says the 403 * dest reg is undefined if x==0, but their CPU architect says its 404 * value is written to set it to the same as before, except that the 405 * top 32 bits will be cleared. 406 * 407 * We cannot do this on 32 bits because at the very least some 408 * 486 CPUs did not behave this way. 409 */ 410 asm("bsfl %1,%0" 411 : "=r" (r) 412 : "rm" (x), "0" (-1)); 413 #elif defined(CONFIG_X86_CMOV) 414 asm("bsfl %1,%0\n\t" 415 "cmovzl %2,%0" 416 : "=&r" (r) : "rm" (x), "r" (-1)); 417 #else 418 asm("bsfl %1,%0\n\t" 419 "jnz 1f\n\t" 420 "movl $-1,%0\n" 421 "1:" : "=r" (r) : "rm" (x)); 422 #endif 423 return r + 1; 424 } 425 426 /** 427 * fls - find last set bit in word 428 * @x: the word to search 429 * 430 * This is defined in a similar way as the libc and compiler builtin 431 * ffs, but returns the position of the most significant set bit. 432 * 433 * fls(value) returns 0 if value is 0 or the position of the last 434 * set bit if value is nonzero. The last (most significant) bit is 435 * at position 32. 436 */ 437 static __always_inline int fls(int x) 438 { 439 int r; 440 441 #ifdef CONFIG_X86_64 442 /* 443 * AMD64 says BSRL won't clobber the dest reg if x==0; Intel64 says the 444 * dest reg is undefined if x==0, but their CPU architect says its 445 * value is written to set it to the same as before, except that the 446 * top 32 bits will be cleared. 447 * 448 * We cannot do this on 32 bits because at the very least some 449 * 486 CPUs did not behave this way. 450 */ 451 asm("bsrl %1,%0" 452 : "=r" (r) 453 : "rm" (x), "0" (-1)); 454 #elif defined(CONFIG_X86_CMOV) 455 asm("bsrl %1,%0\n\t" 456 "cmovzl %2,%0" 457 : "=&r" (r) : "rm" (x), "rm" (-1)); 458 #else 459 asm("bsrl %1,%0\n\t" 460 "jnz 1f\n\t" 461 "movl $-1,%0\n" 462 "1:" : "=r" (r) : "rm" (x)); 463 #endif 464 return r + 1; 465 } 466 467 /** 468 * fls64 - find last set bit in a 64-bit word 469 * @x: the word to search 470 * 471 * This is defined in a similar way as the libc and compiler builtin 472 * ffsll, but returns the position of the most significant set bit. 473 * 474 * fls64(value) returns 0 if value is 0 or the position of the last 475 * set bit if value is nonzero. The last (most significant) bit is 476 * at position 64. 477 */ 478 #ifdef CONFIG_X86_64 479 static __always_inline int fls64(__u64 x) 480 { 481 int bitpos = -1; 482 /* 483 * AMD64 says BSRQ won't clobber the dest reg if x==0; Intel64 says the 484 * dest reg is undefined if x==0, but their CPU architect says its 485 * value is written to set it to the same as before. 486 */ 487 asm("bsrq %1,%q0" 488 : "+r" (bitpos) 489 : "rm" (x)); 490 return bitpos + 1; 491 } 492 #else 493 #include <asm-generic/bitops/fls64.h> 494 #endif 495 496 #include <asm-generic/bitops/find.h> 497 498 #include <asm-generic/bitops/sched.h> 499 500 #include <asm/arch_hweight.h> 501 502 #include <asm-generic/bitops/const_hweight.h> 503 504 #include <asm-generic/bitops/le.h> 505 506 #include <asm-generic/bitops/ext2-atomic-setbit.h> 507 508 #endif /* __KERNEL__ */ 509 #endif /* _ASM_X86_BITOPS_H */
1 #ifndef _ASM_X86_DMA_MAPPING_H 2 #define _ASM_X86_DMA_MAPPING_H 3 4 /* 5 * IOMMU interface. See Documentation/DMA-API-HOWTO.txt and 6 * Documentation/DMA-API.txt for documentation. 7 */ 8 9 #include <linux/kmemcheck.h> 10 #include <linux/scatterlist.h> 11 #include <linux/dma-debug.h> 12 #include <asm/io.h> 13 #include <asm/swiotlb.h> 14 #include <linux/dma-contiguous.h> 15 16 #ifdef CONFIG_ISA 17 # define ISA_DMA_BIT_MASK DMA_BIT_MASK(24) 18 #else 19 # define ISA_DMA_BIT_MASK DMA_BIT_MASK(32) 20 #endif 21 22 #define DMA_ERROR_CODE 0 23 24 extern int iommu_merge; 25 extern struct device x86_dma_fallback_dev; 26 extern int panic_on_overflow; 27 28 extern struct dma_map_ops *dma_ops; 29 30 static inline struct dma_map_ops *get_dma_ops(struct device *dev) 31 { 32 #ifndef CONFIG_X86_DEV_DMA_OPS 33 return dma_ops; 34 #else 35 if (unlikely(!dev) || !dev->archdata.dma_ops) 36 return dma_ops; 37 else 38 return dev->archdata.dma_ops; 39 #endif 40 } 41 42 bool arch_dma_alloc_attrs(struct device **dev, gfp_t *gfp); 43 #define arch_dma_alloc_attrs arch_dma_alloc_attrs 44 45 #define HAVE_ARCH_DMA_SUPPORTED 1 46 extern int dma_supported(struct device *hwdev, u64 mask); 47 48 extern void *dma_generic_alloc_coherent(struct device *dev, size_t size, 49 dma_addr_t *dma_addr, gfp_t flag, 50 unsigned long attrs); 51 52 extern void dma_generic_free_coherent(struct device *dev, size_t size, 53 void *vaddr, dma_addr_t dma_addr, 54 unsigned long attrs); 55 56 #ifdef CONFIG_X86_DMA_REMAP /* Platform code defines bridge-specific code */ 57 extern bool dma_capable(struct device *dev, dma_addr_t addr, size_t size); 58 extern dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr); 59 extern phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr); 60 #else 61 62 static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size) 63 { 64 if (!dev->dma_mask) 65 return 0; 66 67 return addr + size - 1 <= *dev->dma_mask; 68 } 69 70 static inline dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr) 71 { 72 return paddr; 73 } 74 75 static inline phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr) 76 { 77 return daddr; 78 } 79 #endif /* CONFIG_X86_DMA_REMAP */ 80 81 static inline void 82 dma_cache_sync(struct device *dev, void *vaddr, size_t size, 83 enum dma_data_direction dir) 84 { 85 flush_write_buffers(); 86 } 87 88 static inline unsigned long dma_alloc_coherent_mask(struct device *dev, 89 gfp_t gfp) 90 { 91 unsigned long dma_mask = 0; 92 93 dma_mask = dev->coherent_dma_mask; 94 if (!dma_mask) 95 dma_mask = (gfp & GFP_DMA) ? DMA_BIT_MASK(24) : DMA_BIT_MASK(32); 96 97 return dma_mask; 98 } 99 100 static inline gfp_t dma_alloc_coherent_gfp_flags(struct device *dev, gfp_t gfp) 101 { 102 unsigned long dma_mask = dma_alloc_coherent_mask(dev, gfp); 103 104 if (dma_mask <= DMA_BIT_MASK(24)) 105 gfp |= GFP_DMA; 106 #ifdef CONFIG_X86_64 107 if (dma_mask <= DMA_BIT_MASK(32) && !(gfp & GFP_DMA)) 108 gfp |= GFP_DMA32; 109 #endif 110 return gfp; 111 } 112 113 #endif
1 #ifndef _ASM_X86_IO_H 2 #define _ASM_X86_IO_H 3 4 /* 5 * This file contains the definitions for the x86 IO instructions 6 * inb/inw/inl/outb/outw/outl and the "string versions" of the same 7 * (insb/insw/insl/outsb/outsw/outsl). You can also use "pausing" 8 * versions of the single-IO instructions (inb_p/inw_p/..). 9 * 10 * This file is not meant to be obfuscating: it's just complicated 11 * to (a) handle it all in a way that makes gcc able to optimize it 12 * as well as possible and (b) trying to avoid writing the same thing 13 * over and over again with slight variations and possibly making a 14 * mistake somewhere. 15 */ 16 17 /* 18 * Thanks to James van Artsdalen for a better timing-fix than 19 * the two short jumps: using outb's to a nonexistent port seems 20 * to guarantee better timings even on fast machines. 21 * 22 * On the other hand, I'd like to be sure of a non-existent port: 23 * I feel a bit unsafe about using 0x80 (should be safe, though) 24 * 25 * Linus 26 */ 27 28 /* 29 * Bit simplified and optimized by Jan Hubicka 30 * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999. 31 * 32 * isa_memset_io, isa_memcpy_fromio, isa_memcpy_toio added, 33 * isa_read[wl] and isa_write[wl] fixed 34 * - Arnaldo Carvalho de Melo <acme@conectiva.com.br> 35 */ 36 37 #define ARCH_HAS_IOREMAP_WC 38 #define ARCH_HAS_IOREMAP_WT 39 40 #include <linux/string.h> 41 #include <linux/compiler.h> 42 #include <asm/page.h> 43 #include <asm/early_ioremap.h> 44 #include <asm/pgtable_types.h> 45 46 #define build_mmio_read(name, size, type, reg, barrier) \ 47 static inline type name(const volatile void __iomem *addr) \ 48 { type ret; asm volatile("mov" size " %1,%0":reg (ret) \ 49 :"m" (*(volatile type __force *)addr) barrier); return ret; } 50 51 #define build_mmio_write(name, size, type, reg, barrier) \ 52 static inline void name(type val, volatile void __iomem *addr) \ 53 { asm volatile("mov" size " %0,%1": :reg (val), \ 54 "m" (*(volatile type __force *)addr) barrier); } 55 56 build_mmio_read(readb, "b", unsigned char, "=q", :"memory") 57 build_mmio_read(readw, "w", unsigned short, "=r", :"memory") 58 build_mmio_read(readl, "l", unsigned int, "=r", :"memory") 59 60 build_mmio_read(__readb, "b", unsigned char, "=q", ) 61 build_mmio_read(__readw, "w", unsigned short, "=r", ) 62 build_mmio_read(__readl, "l", unsigned int, "=r", ) 63 64 build_mmio_write(writeb, "b", unsigned char, "q", :"memory") 65 build_mmio_write(writew, "w", unsigned short, "r", :"memory") 66 build_mmio_write(writel, "l", unsigned int, "r", :"memory") 67 68 build_mmio_write(__writeb, "b", unsigned char, "q", ) 69 build_mmio_write(__writew, "w", unsigned short, "r", ) 70 build_mmio_write(__writel, "l", unsigned int, "r", ) 71 72 #define readb_relaxed(a) __readb(a) 73 #define readw_relaxed(a) __readw(a) 74 #define readl_relaxed(a) __readl(a) 75 #define __raw_readb __readb 76 #define __raw_readw __readw 77 #define __raw_readl __readl 78 79 #define writeb_relaxed(v, a) __writeb(v, a) 80 #define writew_relaxed(v, a) __writew(v, a) 81 #define writel_relaxed(v, a) __writel(v, a) 82 #define __raw_writeb __writeb 83 #define __raw_writew __writew 84 #define __raw_writel __writel 85 86 #define mmiowb() barrier() 87 88 #ifdef CONFIG_X86_64 89 90 build_mmio_read(readq, "q", unsigned long, "=r", :"memory") 91 build_mmio_write(writeq, "q", unsigned long, "r", :"memory") 92 93 #define readq_relaxed(a) readq(a) 94 #define writeq_relaxed(v, a) writeq(v, a) 95 96 #define __raw_readq(a) readq(a) 97 #define __raw_writeq(val, addr) writeq(val, addr) 98 99 /* Let people know that we have them */ 100 #define readq readq 101 #define writeq writeq 102 103 #endif 104 105 /** 106 * virt_to_phys - map virtual addresses to physical 107 * @address: address to remap 108 * 109 * The returned physical address is the physical (CPU) mapping for 110 * the memory address given. It is only valid to use this function on 111 * addresses directly mapped or allocated via kmalloc. 112 * 113 * This function does not give bus mappings for DMA transfers. In 114 * almost all conceivable cases a device driver should not be using 115 * this function 116 */ 117 118 static inline phys_addr_t virt_to_phys(volatile void *address) 119 { 120 return __pa(address); 121 } 122 123 /** 124 * phys_to_virt - map physical address to virtual 125 * @address: address to remap 126 * 127 * The returned virtual address is a current CPU mapping for 128 * the memory address given. It is only valid to use this function on 129 * addresses that have a kernel mapping 130 * 131 * This function does not handle bus mappings for DMA transfers. In 132 * almost all conceivable cases a device driver should not be using 133 * this function 134 */ 135 136 static inline void *phys_to_virt(phys_addr_t address) 137 { 138 return __va(address); 139 } 140 141 /* 142 * Change "struct page" to physical address. 143 */ 144 #define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT) 145 146 /* 147 * ISA I/O bus memory addresses are 1:1 with the physical address. 148 * However, we truncate the address to unsigned int to avoid undesirable 149 * promitions in legacy drivers. 150 */ 151 static inline unsigned int isa_virt_to_bus(volatile void *address) 152 { 153 return (unsigned int)virt_to_phys(address); 154 } 155 #define isa_page_to_bus(page) ((unsigned int)page_to_phys(page)) 156 #define isa_bus_to_virt phys_to_virt 157 158 /* 159 * However PCI ones are not necessarily 1:1 and therefore these interfaces 160 * are forbidden in portable PCI drivers. 161 * 162 * Allow them on x86 for legacy drivers, though. 163 */ 164 #define virt_to_bus virt_to_phys 165 #define bus_to_virt phys_to_virt 166 167 /** 168 * ioremap - map bus memory into CPU space 169 * @offset: bus address of the memory 170 * @size: size of the resource to map 171 * 172 * ioremap performs a platform specific sequence of operations to 173 * make bus memory CPU accessible via the readb/readw/readl/writeb/ 174 * writew/writel functions and the other mmio helpers. The returned 175 * address is not guaranteed to be usable directly as a virtual 176 * address. 177 * 178 * If the area you are trying to map is a PCI BAR you should have a 179 * look at pci_iomap(). 180 */ 181 extern void __iomem *ioremap_nocache(resource_size_t offset, unsigned long size); 182 extern void __iomem *ioremap_uc(resource_size_t offset, unsigned long size); 183 #define ioremap_uc ioremap_uc 184 185 extern void __iomem *ioremap_cache(resource_size_t offset, unsigned long size); 186 extern void __iomem *ioremap_prot(resource_size_t offset, unsigned long size, 187 unsigned long prot_val); 188 189 /* 190 * The default ioremap() behavior is non-cached: 191 */ 192 static inline void __iomem *ioremap(resource_size_t offset, unsigned long size) 193 { 194 return ioremap_nocache(offset, size); 195 } 196 197 extern void iounmap(volatile void __iomem *addr); 198 199 extern void set_iounmap_nonlazy(void); 200 201 #ifdef __KERNEL__ 202 203 #include <asm-generic/iomap.h> 204 205 /* 206 * Convert a virtual cached pointer to an uncached pointer 207 */ 208 #define xlate_dev_kmem_ptr(p) p 209 210 static inline void 211 memset_io(volatile void __iomem *addr, unsigned char val, size_t count) 212 { 213 memset((void __force *)addr, val, count); 214 } 215 216 static inline void 217 memcpy_fromio(void *dst, const volatile void __iomem *src, size_t count) 218 { 219 memcpy(dst, (const void __force *)src, count); 220 } 221 222 static inline void 223 memcpy_toio(volatile void __iomem *dst, const void *src, size_t count) 224 { 225 memcpy((void __force *)dst, src, count); 226 } 227 228 /* 229 * ISA space is 'always mapped' on a typical x86 system, no need to 230 * explicitly ioremap() it. The fact that the ISA IO space is mapped 231 * to PAGE_OFFSET is pure coincidence - it does not mean ISA values 232 * are physical addresses. The following constant pointer can be 233 * used as the IO-area pointer (it can be iounmapped as well, so the 234 * analogy with PCI is quite large): 235 */ 236 #define __ISA_IO_base ((char __iomem *)(PAGE_OFFSET)) 237 238 /* 239 * Cache management 240 * 241 * This needed for two cases 242 * 1. Out of order aware processors 243 * 2. Accidentally out of order processors (PPro errata #51) 244 */ 245 246 static inline void flush_write_buffers(void) 247 { 248 #if defined(CONFIG_X86_PPRO_FENCE) 249 asm volatile("lock; addl $0,0(%%esp)": : :"memory"); 250 #endif 251 } 252 253 #endif /* __KERNEL__ */ 254 255 extern void native_io_delay(void); 256 257 extern int io_delay_type; 258 extern void io_delay_init(void); 259 260 #if defined(CONFIG_PARAVIRT) 261 #include <asm/paravirt.h> 262 #else 263 264 static inline void slow_down_io(void) 265 { 266 native_io_delay(); 267 #ifdef REALLY_SLOW_IO 268 native_io_delay(); 269 native_io_delay(); 270 native_io_delay(); 271 #endif 272 } 273 274 #endif 275 276 #define BUILDIO(bwl, bw, type) \ 277 static inline void out##bwl(unsigned type value, int port) \ 278 { \ 279 asm volatile("out" #bwl " %" #bw "0, %w1" \ 280 : : "a"(value), "Nd"(port)); \ 281 } \ 282 \ 283 static inline unsigned type in##bwl(int port) \ 284 { \ 285 unsigned type value; \ 286 asm volatile("in" #bwl " %w1, %" #bw "0" \ 287 : "=a"(value) : "Nd"(port)); \ 288 return value; \ 289 } \ 290 \ 291 static inline void out##bwl##_p(unsigned type value, int port) \ 292 { \ 293 out##bwl(value, port); \ 294 slow_down_io(); \ 295 } \ 296 \ 297 static inline unsigned type in##bwl##_p(int port) \ 298 { \ 299 unsigned type value = in##bwl(port); \ 300 slow_down_io(); \ 301 return value; \ 302 } \ 303 \ 304 static inline void outs##bwl(int port, const void *addr, unsigned long count) \ 305 { \ 306 asm volatile("rep; outs" #bwl \ 307 : "+S"(addr), "+c"(count) : "d"(port)); \ 308 } \ 309 \ 310 static inline void ins##bwl(int port, void *addr, unsigned long count) \ 311 { \ 312 asm volatile("rep; ins" #bwl \ 313 : "+D"(addr), "+c"(count) : "d"(port)); \ 314 } 315 316 BUILDIO(b, b, char) 317 BUILDIO(w, w, short) 318 BUILDIO(l, , int) 319 320 extern void *xlate_dev_mem_ptr(phys_addr_t phys); 321 extern void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr); 322 323 extern int ioremap_change_attr(unsigned long vaddr, unsigned long size, 324 enum page_cache_mode pcm); 325 extern void __iomem *ioremap_wc(resource_size_t offset, unsigned long size); 326 extern void __iomem *ioremap_wt(resource_size_t offset, unsigned long size); 327 328 extern bool is_early_ioremap_ptep(pte_t *ptep); 329 330 #ifdef CONFIG_XEN 331 #include <xen/xen.h> 332 struct bio_vec; 333 334 extern bool xen_biovec_phys_mergeable(const struct bio_vec *vec1, 335 const struct bio_vec *vec2); 336 337 #define BIOVEC_PHYS_MERGEABLE(vec1, vec2) \ 338 (__BIOVEC_PHYS_MERGEABLE(vec1, vec2) && \ 339 (!xen_domain() || xen_biovec_phys_mergeable(vec1, vec2))) 340 #endif /* CONFIG_XEN */ 341 342 #define IO_SPACE_LIMIT 0xffff 343 344 #ifdef CONFIG_MTRR 345 extern int __must_check arch_phys_wc_index(int handle); 346 #define arch_phys_wc_index arch_phys_wc_index 347 348 extern int __must_check arch_phys_wc_add(unsigned long base, 349 unsigned long size); 350 extern void arch_phys_wc_del(int handle); 351 #define arch_phys_wc_add arch_phys_wc_add 352 #endif 353 354 #ifdef CONFIG_X86_PAT 355 extern int arch_io_reserve_memtype_wc(resource_size_t start, resource_size_t size); 356 extern void arch_io_free_memtype_wc(resource_size_t start, resource_size_t size); 357 #define arch_io_reserve_memtype_wc arch_io_reserve_memtype_wc 358 #endif 359 360 #endif /* _ASM_X86_IO_H */
1 2 /* starfire.c: Linux device driver for the Adaptec Starfire network adapter. */ 3 /* 4 Written 1998-2000 by Donald Becker. 5 6 Current maintainer is Ion Badulescu <ionut ta badula tod org>. Please 7 send all bug reports to me, and not to Donald Becker, as this code 8 has been heavily modified from Donald's original version. 9 10 This software may be used and distributed according to the terms of 11 the GNU General Public License (GPL), incorporated herein by reference. 12 Drivers based on or derived from this code fall under the GPL and must 13 retain the authorship, copyright and license notice. This file is not 14 a complete program and may only be used when the entire operating 15 system is licensed under the GPL. 16 17 The information below comes from Donald Becker's original driver: 18 19 The author may be reached as becker@scyld.com, or C/O 20 Scyld Computing Corporation 21 410 Severn Ave., Suite 210 22 Annapolis MD 21403 23 24 Support and updates available at 25 http://www.scyld.com/network/starfire.html 26 [link no longer provides useful info -jgarzik] 27 28 */ 29 30 #define DRV_NAME "starfire" 31 #define DRV_VERSION "2.1" 32 #define DRV_RELDATE "July 6, 2008" 33 34 #include <linux/interrupt.h> 35 #include <linux/module.h> 36 #include <linux/kernel.h> 37 #include <linux/pci.h> 38 #include <linux/netdevice.h> 39 #include <linux/etherdevice.h> 40 #include <linux/init.h> 41 #include <linux/delay.h> 42 #include <linux/crc32.h> 43 #include <linux/ethtool.h> 44 #include <linux/mii.h> 45 #include <linux/if_vlan.h> 46 #include <linux/mm.h> 47 #include <linux/firmware.h> 48 #include <asm/processor.h> /* Processor type for cache alignment. */ 49 #include <linux/uaccess.h> 50 #include <asm/io.h> 51 52 /* 53 * The current frame processor firmware fails to checksum a fragment 54 * of length 1. If and when this is fixed, the #define below can be removed. 55 */ 56 #define HAS_BROKEN_FIRMWARE 57 58 /* 59 * If using the broken firmware, data must be padded to the next 32-bit boundary. 60 */ 61 #ifdef HAS_BROKEN_FIRMWARE 62 #define PADDING_MASK 3 63 #endif 64 65 /* 66 * Define this if using the driver with the zero-copy patch 67 */ 68 #define ZEROCOPY 69 70 #if IS_ENABLED(CONFIG_VLAN_8021Q) 71 #define VLAN_SUPPORT 72 #endif 73 74 /* The user-configurable values. 75 These may be modified when a driver module is loaded.*/ 76 77 /* Used for tuning interrupt latency vs. overhead. */ 78 static int intr_latency; 79 static int small_frames; 80 81 static int debug = 1; /* 1 normal messages, 0 quiet .. 7 verbose. */ 82 static int max_interrupt_work = 20; 83 static int mtu; 84 /* Maximum number of multicast addresses to filter (vs. rx-all-multicast). 85 The Starfire has a 512 element hash table based on the Ethernet CRC. */ 86 static const int multicast_filter_limit = 512; 87 /* Whether to do TCP/UDP checksums in hardware */ 88 static int enable_hw_cksum = 1; 89 90 #define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/ 91 /* 92 * Set the copy breakpoint for the copy-only-tiny-frames scheme. 93 * Setting to > 1518 effectively disables this feature. 94 * 95 * NOTE: 96 * The ia64 doesn't allow for unaligned loads even of integers being 97 * misaligned on a 2 byte boundary. Thus always force copying of 98 * packets as the starfire doesn't allow for misaligned DMAs ;-( 99 * 23/10/2000 - Jes 100 * 101 * The Alpha and the Sparc don't like unaligned loads, either. On Sparc64, 102 * at least, having unaligned frames leads to a rather serious performance 103 * penalty. -Ion 104 */ 105 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 106 static int rx_copybreak = PKT_BUF_SZ; 107 #else 108 static int rx_copybreak /* = 0 */; 109 #endif 110 111 /* PCI DMA burst size -- on sparc64 we want to force it to 64 bytes, on the others the default of 128 is fine. */ 112 #ifdef __sparc__ 113 #define DMA_BURST_SIZE 64 114 #else 115 #define DMA_BURST_SIZE 128 116 #endif 117 118 /* Operational parameters that are set at compile time. */ 119 120 /* The "native" ring sizes are either 256 or 2048. 121 However in some modes a descriptor may be marked to wrap the ring earlier. 122 */ 123 #define RX_RING_SIZE 256 124 #define TX_RING_SIZE 32 125 /* The completion queues are fixed at 1024 entries i.e. 4K or 8KB. */ 126 #define DONE_Q_SIZE 1024 127 /* All queues must be aligned on a 256-byte boundary */ 128 #define QUEUE_ALIGN 256 129 130 #if RX_RING_SIZE > 256 131 #define RX_Q_ENTRIES Rx2048QEntries 132 #else 133 #define RX_Q_ENTRIES Rx256QEntries 134 #endif 135 136 /* Operational parameters that usually are not changed. */ 137 /* Time in jiffies before concluding the transmitter is hung. */ 138 #define TX_TIMEOUT (2 * HZ) 139 140 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 141 /* 64-bit dma_addr_t */ 142 #define ADDR_64BITS /* This chip uses 64 bit addresses. */ 143 #define netdrv_addr_t __le64 144 #define cpu_to_dma(x) cpu_to_le64(x) 145 #define dma_to_cpu(x) le64_to_cpu(x) 146 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 147 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 148 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 149 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 150 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 151 #else /* 32-bit dma_addr_t */ 152 #define netdrv_addr_t __le32 153 #define cpu_to_dma(x) cpu_to_le32(x) 154 #define dma_to_cpu(x) le32_to_cpu(x) 155 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 156 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 157 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 158 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 159 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 160 #endif 161 162 #define skb_first_frag_len(skb) skb_headlen(skb) 163 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 164 165 /* Firmware names */ 166 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 167 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 168 169 /* These identify the driver base version and may not be removed. */ 170 static const char version[] = 171 KERN_INFO "starfire.c:v1.03 7/26/2000 Written by Donald Becker <becker@scyld.com>\n" 172 " (unofficial 2.2/2.4 kernel port, version " DRV_VERSION ", " DRV_RELDATE ")\n"; 173 174 MODULE_AUTHOR("Donald Becker <becker@scyld.com>"); 175 MODULE_DESCRIPTION("Adaptec Starfire Ethernet driver"); 176 MODULE_LICENSE("GPL"); 177 MODULE_VERSION(DRV_VERSION); 178 MODULE_FIRMWARE(FIRMWARE_RX); 179 MODULE_FIRMWARE(FIRMWARE_TX); 180 181 module_param(max_interrupt_work, int, 0); 182 module_param(mtu, int, 0); 183 module_param(debug, int, 0); 184 module_param(rx_copybreak, int, 0); 185 module_param(intr_latency, int, 0); 186 module_param(small_frames, int, 0); 187 module_param(enable_hw_cksum, int, 0); 188 MODULE_PARM_DESC(max_interrupt_work, "Maximum events handled per interrupt"); 189 MODULE_PARM_DESC(mtu, "MTU (all boards)"); 190 MODULE_PARM_DESC(debug, "Debug level (0-6)"); 191 MODULE_PARM_DESC(rx_copybreak, "Copy breakpoint for copy-only-tiny-frames"); 192 MODULE_PARM_DESC(intr_latency, "Maximum interrupt latency, in microseconds"); 193 MODULE_PARM_DESC(small_frames, "Maximum size of receive frames that bypass interrupt latency (0,64,128,256,512)"); 194 MODULE_PARM_DESC(enable_hw_cksum, "Enable/disable hardware cksum support (0/1)"); 195 196 /* 197 Theory of Operation 198 199 I. Board Compatibility 200 201 This driver is for the Adaptec 6915 "Starfire" 64 bit PCI Ethernet adapter. 202 203 II. Board-specific settings 204 205 III. Driver operation 206 207 IIIa. Ring buffers 208 209 The Starfire hardware uses multiple fixed-size descriptor queues/rings. The 210 ring sizes are set fixed by the hardware, but may optionally be wrapped 211 earlier by the END bit in the descriptor. 212 This driver uses that hardware queue size for the Rx ring, where a large 213 number of entries has no ill effect beyond increases the potential backlog. 214 The Tx ring is wrapped with the END bit, since a large hardware Tx queue 215 disables the queue layer priority ordering and we have no mechanism to 216 utilize the hardware two-level priority queue. When modifying the 217 RX/TX_RING_SIZE pay close attention to page sizes and the ring-empty warning 218 levels. 219 220 IIIb/c. Transmit/Receive Structure 221 222 See the Adaptec manual for the many possible structures, and options for 223 each structure. There are far too many to document all of them here. 224 225 For transmit this driver uses type 0/1 transmit descriptors (depending 226 on the 32/64 bitness of the architecture), and relies on automatic 227 minimum-length padding. It does not use the completion queue 228 consumer index, but instead checks for non-zero status entries. 229 230 For receive this driver uses type 2/3 receive descriptors. The driver 231 allocates full frame size skbuffs for the Rx ring buffers, so all frames 232 should fit in a single descriptor. The driver does not use the completion 233 queue consumer index, but instead checks for non-zero status entries. 234 235 When an incoming frame is less than RX_COPYBREAK bytes long, a fresh skbuff 236 is allocated and the frame is copied to the new skbuff. When the incoming 237 frame is larger, the skbuff is passed directly up the protocol stack. 238 Buffers consumed this way are replaced by newly allocated skbuffs in a later 239 phase of receive. 240 241 A notable aspect of operation is that unaligned buffers are not permitted by 242 the Starfire hardware. Thus the IP header at offset 14 in an ethernet frame 243 isn't longword aligned, which may cause problems on some machine 244 e.g. Alphas and IA64. For these architectures, the driver is forced to copy 245 the frame into a new skbuff unconditionally. Copied frames are put into the 246 skbuff at an offset of "+2", thus 16-byte aligning the IP header. 247 248 IIId. Synchronization 249 250 The driver runs as two independent, single-threaded flows of control. One 251 is the send-packet routine, which enforces single-threaded use by the 252 dev->tbusy flag. The other thread is the interrupt handler, which is single 253 threaded by the hardware and interrupt handling software. 254 255 The send packet thread has partial control over the Tx ring and the netif_queue 256 status. If the number of free Tx slots in the ring falls below a certain number 257 (currently hardcoded to 4), it signals the upper layer to stop the queue. 258 259 The interrupt handler has exclusive control over the Rx ring and records stats 260 from the Tx ring. After reaping the stats, it marks the Tx queue entry as 261 empty by incrementing the dirty_tx mark. Iff the netif_queue is stopped and the 262 number of free Tx slow is above the threshold, it signals the upper layer to 263 restart the queue. 264 265 IV. Notes 266 267 IVb. References 268 269 The Adaptec Starfire manuals, available only from Adaptec. 270 http://www.scyld.com/expert/100mbps.html 271 http://www.scyld.com/expert/NWay.html 272 273 IVc. Errata 274 275 - StopOnPerr is broken, don't enable 276 - Hardware ethernet padding exposes random data, perform software padding 277 instead (unverified -- works correctly for all the hardware I have) 278 279 */ 280 281 282 283 enum chip_capability_flags {CanHaveMII=1, }; 284 285 enum chipset { 286 CH_6915 = 0, 287 }; 288 289 static const struct pci_device_id starfire_pci_tbl[] = { 290 { PCI_VDEVICE(ADAPTEC, 0x6915), CH_6915 }, 291 { 0, } 292 }; 293 MODULE_DEVICE_TABLE(pci, starfire_pci_tbl); 294 295 /* A chip capabilities table, matching the CH_xxx entries in xxx_pci_tbl[] above. */ 296 static const struct chip_info { 297 const char *name; 298 int drv_flags; 299 } netdrv_tbl[] = { 300 { "Adaptec Starfire 6915", CanHaveMII }, 301 }; 302 303 304 /* Offsets to the device registers. 305 Unlike software-only systems, device drivers interact with complex hardware. 306 It's not useful to define symbolic names for every register bit in the 307 device. The name can only partially document the semantics and make 308 the driver longer and more difficult to read. 309 In general, only the important configuration values or bits changed 310 multiple times should be defined symbolically. 311 */ 312 enum register_offsets { 313 PCIDeviceConfig=0x50040, GenCtrl=0x50070, IntrTimerCtrl=0x50074, 314 IntrClear=0x50080, IntrStatus=0x50084, IntrEnable=0x50088, 315 MIICtrl=0x52000, TxStationAddr=0x50120, EEPROMCtrl=0x51000, 316 GPIOCtrl=0x5008C, TxDescCtrl=0x50090, 317 TxRingPtr=0x50098, HiPriTxRingPtr=0x50094, /* Low and High priority. */ 318 TxRingHiAddr=0x5009C, /* 64 bit address extension. */ 319 TxProducerIdx=0x500A0, TxConsumerIdx=0x500A4, 320 TxThreshold=0x500B0, 321 CompletionHiAddr=0x500B4, TxCompletionAddr=0x500B8, 322 RxCompletionAddr=0x500BC, RxCompletionQ2Addr=0x500C0, 323 CompletionQConsumerIdx=0x500C4, RxDMACtrl=0x500D0, 324 RxDescQCtrl=0x500D4, RxDescQHiAddr=0x500DC, RxDescQAddr=0x500E0, 325 RxDescQIdx=0x500E8, RxDMAStatus=0x500F0, RxFilterMode=0x500F4, 326 TxMode=0x55000, VlanType=0x55064, 327 PerfFilterTable=0x56000, HashTable=0x56100, 328 TxGfpMem=0x58000, RxGfpMem=0x5a000, 329 }; 330 331 /* 332 * Bits in the interrupt status/mask registers. 333 * Warning: setting Intr[Ab]NormalSummary in the IntrEnable register 334 * enables all the interrupt sources that are or'ed into those status bits. 335 */ 336 enum intr_status_bits { 337 IntrLinkChange=0xf0000000, IntrStatsMax=0x08000000, 338 IntrAbnormalSummary=0x02000000, IntrGeneralTimer=0x01000000, 339 IntrSoftware=0x800000, IntrRxComplQ1Low=0x400000, 340 IntrTxComplQLow=0x200000, IntrPCI=0x100000, 341 IntrDMAErr=0x080000, IntrTxDataLow=0x040000, 342 IntrRxComplQ2Low=0x020000, IntrRxDescQ1Low=0x010000, 343 IntrNormalSummary=0x8000, IntrTxDone=0x4000, 344 IntrTxDMADone=0x2000, IntrTxEmpty=0x1000, 345 IntrEarlyRxQ2=0x0800, IntrEarlyRxQ1=0x0400, 346 IntrRxQ2Done=0x0200, IntrRxQ1Done=0x0100, 347 IntrRxGFPDead=0x80, IntrRxDescQ2Low=0x40, 348 IntrNoTxCsum=0x20, IntrTxBadID=0x10, 349 IntrHiPriTxBadID=0x08, IntrRxGfp=0x04, 350 IntrTxGfp=0x02, IntrPCIPad=0x01, 351 /* not quite bits */ 352 IntrRxDone=IntrRxQ2Done | IntrRxQ1Done, 353 IntrRxEmpty=IntrRxDescQ1Low | IntrRxDescQ2Low, 354 IntrNormalMask=0xff00, IntrAbnormalMask=0x3ff00fe, 355 }; 356 357 /* Bits in the RxFilterMode register. */ 358 enum rx_mode_bits { 359 AcceptBroadcast=0x04, AcceptAllMulticast=0x02, AcceptAll=0x01, 360 AcceptMulticast=0x10, PerfectFilter=0x40, HashFilter=0x30, 361 PerfectFilterVlan=0x80, MinVLANPrio=0xE000, VlanMode=0x0200, 362 WakeupOnGFP=0x0800, 363 }; 364 365 /* Bits in the TxMode register */ 366 enum tx_mode_bits { 367 MiiSoftReset=0x8000, MIILoopback=0x4000, 368 TxFlowEnable=0x0800, RxFlowEnable=0x0400, 369 PadEnable=0x04, FullDuplex=0x02, HugeFrame=0x01, 370 }; 371 372 /* Bits in the TxDescCtrl register. */ 373 enum tx_ctrl_bits { 374 TxDescSpaceUnlim=0x00, TxDescSpace32=0x10, TxDescSpace64=0x20, 375 TxDescSpace128=0x30, TxDescSpace256=0x40, 376 TxDescType0=0x00, TxDescType1=0x01, TxDescType2=0x02, 377 TxDescType3=0x03, TxDescType4=0x04, 378 TxNoDMACompletion=0x08, 379 TxDescQAddr64bit=0x80, TxDescQAddr32bit=0, 380 TxHiPriFIFOThreshShift=24, TxPadLenShift=16, 381 TxDMABurstSizeShift=8, 382 }; 383 384 /* Bits in the RxDescQCtrl register. */ 385 enum rx_ctrl_bits { 386 RxBufferLenShift=16, RxMinDescrThreshShift=0, 387 RxPrefetchMode=0x8000, RxVariableQ=0x2000, 388 Rx2048QEntries=0x4000, Rx256QEntries=0, 389 RxDescAddr64bit=0x1000, RxDescAddr32bit=0, 390 RxDescQAddr64bit=0x0100, RxDescQAddr32bit=0, 391 RxDescSpace4=0x000, RxDescSpace8=0x100, 392 RxDescSpace16=0x200, RxDescSpace32=0x300, 393 RxDescSpace64=0x400, RxDescSpace128=0x500, 394 RxConsumerWrEn=0x80, 395 }; 396 397 /* Bits in the RxDMACtrl register. */ 398 enum rx_dmactrl_bits { 399 RxReportBadFrames=0x80000000, RxDMAShortFrames=0x40000000, 400 RxDMABadFrames=0x20000000, RxDMACrcErrorFrames=0x10000000, 401 RxDMAControlFrame=0x08000000, RxDMAPauseFrame=0x04000000, 402 RxChecksumIgnore=0, RxChecksumRejectTCPUDP=0x02000000, 403 RxChecksumRejectTCPOnly=0x01000000, 404 RxCompletionQ2Enable=0x800000, 405 RxDMAQ2Disable=0, RxDMAQ2FPOnly=0x100000, 406 RxDMAQ2SmallPkt=0x200000, RxDMAQ2HighPrio=0x300000, 407 RxDMAQ2NonIP=0x400000, 408 RxUseBackupQueue=0x080000, RxDMACRC=0x040000, 409 RxEarlyIntThreshShift=12, RxHighPrioThreshShift=8, 410 RxBurstSizeShift=0, 411 }; 412 413 /* Bits in the RxCompletionAddr register */ 414 enum rx_compl_bits { 415 RxComplQAddr64bit=0x80, RxComplQAddr32bit=0, 416 RxComplProducerWrEn=0x40, 417 RxComplType0=0x00, RxComplType1=0x10, 418 RxComplType2=0x20, RxComplType3=0x30, 419 RxComplThreshShift=0, 420 }; 421 422 /* Bits in the TxCompletionAddr register */ 423 enum tx_compl_bits { 424 TxComplQAddr64bit=0x80, TxComplQAddr32bit=0, 425 TxComplProducerWrEn=0x40, 426 TxComplIntrStatus=0x20, 427 CommonQueueMode=0x10, 428 TxComplThreshShift=0, 429 }; 430 431 /* Bits in the GenCtrl register */ 432 enum gen_ctrl_bits { 433 RxEnable=0x05, TxEnable=0x0a, 434 RxGFPEnable=0x10, TxGFPEnable=0x20, 435 }; 436 437 /* Bits in the IntrTimerCtrl register */ 438 enum intr_ctrl_bits { 439 Timer10X=0x800, EnableIntrMasking=0x60, SmallFrameBypass=0x100, 440 SmallFrame64=0, SmallFrame128=0x200, SmallFrame256=0x400, SmallFrame512=0x600, 441 IntrLatencyMask=0x1f, 442 }; 443 444 /* The Rx and Tx buffer descriptors. */ 445 struct starfire_rx_desc { 446 netdrv_addr_t rxaddr; 447 }; 448 enum rx_desc_bits { 449 RxDescValid=1, RxDescEndRing=2, 450 }; 451 452 /* Completion queue entry. */ 453 struct short_rx_done_desc { 454 __le32 status; /* Low 16 bits is length. */ 455 }; 456 struct basic_rx_done_desc { 457 __le32 status; /* Low 16 bits is length. */ 458 __le16 vlanid; 459 __le16 status2; 460 }; 461 struct csum_rx_done_desc { 462 __le32 status; /* Low 16 bits is length. */ 463 __le16 csum; /* Partial checksum */ 464 __le16 status2; 465 }; 466 struct full_rx_done_desc { 467 __le32 status; /* Low 16 bits is length. */ 468 __le16 status3; 469 __le16 status2; 470 __le16 vlanid; 471 __le16 csum; /* partial checksum */ 472 __le32 timestamp; 473 }; 474 /* XXX: this is ugly and I'm not sure it's worth the trouble -Ion */ 475 #ifdef VLAN_SUPPORT 476 typedef struct full_rx_done_desc rx_done_desc; 477 #define RxComplType RxComplType3 478 #else /* not VLAN_SUPPORT */ 479 typedef struct csum_rx_done_desc rx_done_desc; 480 #define RxComplType RxComplType2 481 #endif /* not VLAN_SUPPORT */ 482 483 enum rx_done_bits { 484 RxOK=0x20000000, RxFIFOErr=0x10000000, RxBufQ2=0x08000000, 485 }; 486 487 /* Type 1 Tx descriptor. */ 488 struct starfire_tx_desc_1 { 489 __le32 status; /* Upper bits are status, lower 16 length. */ 490 __le32 addr; 491 }; 492 493 /* Type 2 Tx descriptor. */ 494 struct starfire_tx_desc_2 { 495 __le32 status; /* Upper bits are status, lower 16 length. */ 496 __le32 reserved; 497 __le64 addr; 498 }; 499 500 #ifdef ADDR_64BITS 501 typedef struct starfire_tx_desc_2 starfire_tx_desc; 502 #define TX_DESC_TYPE TxDescType2 503 #else /* not ADDR_64BITS */ 504 typedef struct starfire_tx_desc_1 starfire_tx_desc; 505 #define TX_DESC_TYPE TxDescType1 506 #endif /* not ADDR_64BITS */ 507 #define TX_DESC_SPACING TxDescSpaceUnlim 508 509 enum tx_desc_bits { 510 TxDescID=0xB0000000, 511 TxCRCEn=0x01000000, TxDescIntr=0x08000000, 512 TxRingWrap=0x04000000, TxCalTCP=0x02000000, 513 }; 514 struct tx_done_desc { 515 __le32 status; /* timestamp, index. */ 516 #if 0 517 __le32 intrstatus; /* interrupt status */ 518 #endif 519 }; 520 521 struct rx_ring_info { 522 struct sk_buff *skb; 523 dma_addr_t mapping; 524 }; 525 struct tx_ring_info { 526 struct sk_buff *skb; 527 dma_addr_t mapping; 528 unsigned int used_slots; 529 }; 530 531 #define PHY_CNT 2 532 struct netdev_private { 533 /* Descriptor rings first for alignment. */ 534 struct starfire_rx_desc *rx_ring; 535 starfire_tx_desc *tx_ring; 536 dma_addr_t rx_ring_dma; 537 dma_addr_t tx_ring_dma; 538 /* The addresses of rx/tx-in-place skbuffs. */ 539 struct rx_ring_info rx_info[RX_RING_SIZE]; 540 struct tx_ring_info tx_info[TX_RING_SIZE]; 541 /* Pointers to completion queues (full pages). */ 542 rx_done_desc *rx_done_q; 543 dma_addr_t rx_done_q_dma; 544 unsigned int rx_done; 545 struct tx_done_desc *tx_done_q; 546 dma_addr_t tx_done_q_dma; 547 unsigned int tx_done; 548 struct napi_struct napi; 549 struct net_device *dev; 550 struct pci_dev *pci_dev; 551 #ifdef VLAN_SUPPORT 552 unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)]; 553 #endif 554 void *queue_mem; 555 dma_addr_t queue_mem_dma; 556 size_t queue_mem_size; 557 558 /* Frequently used values: keep some adjacent for cache effect. */ 559 spinlock_t lock; 560 unsigned int cur_rx, dirty_rx; /* Producer/consumer ring indices */ 561 unsigned int cur_tx, dirty_tx, reap_tx; 562 unsigned int rx_buf_sz; /* Based on MTU+slack. */ 563 /* These values keep track of the transceiver/media in use. */ 564 int speed100; /* Set if speed == 100MBit. */ 565 u32 tx_mode; 566 u32 intr_timer_ctrl; 567 u8 tx_threshold; 568 /* MII transceiver section. */ 569 struct mii_if_info mii_if; /* MII lib hooks/info */ 570 int phy_cnt; /* MII device addresses. */ 571 unsigned char phys[PHY_CNT]; /* MII device addresses. */ 572 void __iomem *base; 573 }; 574 575 576 static int mdio_read(struct net_device *dev, int phy_id, int location); 577 static void mdio_write(struct net_device *dev, int phy_id, int location, int value); 578 static int netdev_open(struct net_device *dev); 579 static void check_duplex(struct net_device *dev); 580 static void tx_timeout(struct net_device *dev); 581 static void init_ring(struct net_device *dev); 582 static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev); 583 static irqreturn_t intr_handler(int irq, void *dev_instance); 584 static void netdev_error(struct net_device *dev, int intr_status); 585 static int __netdev_rx(struct net_device *dev, int *quota); 586 static int netdev_poll(struct napi_struct *napi, int budget); 587 static void refill_rx_ring(struct net_device *dev); 588 static void netdev_error(struct net_device *dev, int intr_status); 589 static void set_rx_mode(struct net_device *dev); 590 static struct net_device_stats *get_stats(struct net_device *dev); 591 static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); 592 static int netdev_close(struct net_device *dev); 593 static void netdev_media_change(struct net_device *dev); 594 static const struct ethtool_ops ethtool_ops; 595 596 597 #ifdef VLAN_SUPPORT 598 static int netdev_vlan_rx_add_vid(struct net_device *dev, 599 __be16 proto, u16 vid) 600 { 601 struct netdev_private *np = netdev_priv(dev); 602 603 spin_lock(&np->lock); 604 if (debug > 1) 605 printk("%s: Adding vlanid %d to vlan filter\n", dev->name, vid); 606 set_bit(vid, np->active_vlans); 607 set_rx_mode(dev); 608 spin_unlock(&np->lock); 609 610 return 0; 611 } 612 613 static int netdev_vlan_rx_kill_vid(struct net_device *dev, 614 __be16 proto, u16 vid) 615 { 616 struct netdev_private *np = netdev_priv(dev); 617 618 spin_lock(&np->lock); 619 if (debug > 1) 620 printk("%s: removing vlanid %d from vlan filter\n", dev->name, vid); 621 clear_bit(vid, np->active_vlans); 622 set_rx_mode(dev); 623 spin_unlock(&np->lock); 624 625 return 0; 626 } 627 #endif /* VLAN_SUPPORT */ 628 629 630 static const struct net_device_ops netdev_ops = { 631 .ndo_open = netdev_open, 632 .ndo_stop = netdev_close, 633 .ndo_start_xmit = start_tx, 634 .ndo_tx_timeout = tx_timeout, 635 .ndo_get_stats = get_stats, 636 .ndo_set_rx_mode = set_rx_mode, 637 .ndo_do_ioctl = netdev_ioctl, 638 .ndo_set_mac_address = eth_mac_addr, 639 .ndo_validate_addr = eth_validate_addr, 640 #ifdef VLAN_SUPPORT 641 .ndo_vlan_rx_add_vid = netdev_vlan_rx_add_vid, 642 .ndo_vlan_rx_kill_vid = netdev_vlan_rx_kill_vid, 643 #endif 644 }; 645 646 static int starfire_init_one(struct pci_dev *pdev, 647 const struct pci_device_id *ent) 648 { 649 struct device *d = &pdev->dev; 650 struct netdev_private *np; 651 int i, irq, chip_idx = ent->driver_data; 652 struct net_device *dev; 653 long ioaddr; 654 void __iomem *base; 655 int drv_flags, io_size; 656 int boguscnt; 657 658 /* when built into the kernel, we only print version if device is found */ 659 #ifndef MODULE 660 static int printed_version; 661 if (!printed_version++) 662 printk(version); 663 #endif 664 665 if (pci_enable_device (pdev)) 666 return -EIO; 667 668 ioaddr = pci_resource_start(pdev, 0); 669 io_size = pci_resource_len(pdev, 0); 670 if (!ioaddr || ((pci_resource_flags(pdev, 0) & IORESOURCE_MEM) == 0)) { 671 dev_err(d, "no PCI MEM resources, aborting\n"); 672 return -ENODEV; 673 } 674 675 dev = alloc_etherdev(sizeof(*np)); 676 if (!dev) 677 return -ENOMEM; 678 679 SET_NETDEV_DEV(dev, &pdev->dev); 680 681 irq = pdev->irq; 682 683 if (pci_request_regions (pdev, DRV_NAME)) { 684 dev_err(d, "cannot reserve PCI resources, aborting\n"); 685 goto err_out_free_netdev; 686 } 687 688 base = ioremap(ioaddr, io_size); 689 if (!base) { 690 dev_err(d, "cannot remap %#x @ %#lx, aborting\n", 691 io_size, ioaddr); 692 goto err_out_free_res; 693 } 694 695 pci_set_master(pdev); 696 697 /* enable MWI -- it vastly improves Rx performance on sparc64 */ 698 pci_try_set_mwi(pdev); 699 700 #ifdef ZEROCOPY 701 /* Starfire can do TCP/UDP checksumming */ 702 if (enable_hw_cksum) 703 dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG; 704 #endif /* ZEROCOPY */ 705 706 #ifdef VLAN_SUPPORT 707 dev->features |= NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_CTAG_FILTER; 708 #endif /* VLAN_RX_KILL_VID */ 709 #ifdef ADDR_64BITS 710 dev->features |= NETIF_F_HIGHDMA; 711 #endif /* ADDR_64BITS */ 712 713 /* Serial EEPROM reads are hidden by the hardware. */ 714 for (i = 0; i < 6; i++) 715 dev->dev_addr[i] = readb(base + EEPROMCtrl + 20 - i); 716 717 #if ! defined(final_version) /* Dump the EEPROM contents during development. */ 718 if (debug > 4) 719 for (i = 0; i < 0x20; i++) 720 printk("%2.2x%s", 721 (unsigned int)readb(base + EEPROMCtrl + i), 722 i % 16 != 15 ? " " : "\n"); 723 #endif 724 725 /* Issue soft reset */ 726 writel(MiiSoftReset, base + TxMode); 727 udelay(1000); 728 writel(0, base + TxMode); 729 730 /* Reset the chip to erase previous misconfiguration. */ 731 writel(1, base + PCIDeviceConfig); 732 boguscnt = 1000; 733 while (--boguscnt > 0) { 734 udelay(10); 735 if ((readl(base + PCIDeviceConfig) & 1) == 0) 736 break; 737 } 738 if (boguscnt == 0) 739 printk("%s: chipset reset never completed!\n", dev->name); 740 /* wait a little longer */ 741 udelay(1000); 742 743 np = netdev_priv(dev); 744 np->dev = dev; 745 np->base = base; 746 spin_lock_init(&np->lock); 747 pci_set_drvdata(pdev, dev); 748 749 np->pci_dev = pdev; 750 751 np->mii_if.dev = dev; 752 np->mii_if.mdio_read = mdio_read; 753 np->mii_if.mdio_write = mdio_write; 754 np->mii_if.phy_id_mask = 0x1f; 755 np->mii_if.reg_num_mask = 0x1f; 756 757 drv_flags = netdrv_tbl[chip_idx].drv_flags; 758 759 np->speed100 = 1; 760 761 /* timer resolution is 128 * 0.8us */ 762 np->intr_timer_ctrl = (((intr_latency * 10) / 1024) & IntrLatencyMask) | 763 Timer10X | EnableIntrMasking; 764 765 if (small_frames > 0) { 766 np->intr_timer_ctrl |= SmallFrameBypass; 767 switch (small_frames) { 768 case 1 ... 64: 769 np->intr_timer_ctrl |= SmallFrame64; 770 break; 771 case 65 ... 128: 772 np->intr_timer_ctrl |= SmallFrame128; 773 break; 774 case 129 ... 256: 775 np->intr_timer_ctrl |= SmallFrame256; 776 break; 777 default: 778 np->intr_timer_ctrl |= SmallFrame512; 779 if (small_frames > 512) 780 printk("Adjusting small_frames down to 512\n"); 781 break; 782 } 783 } 784 785 dev->netdev_ops = &netdev_ops; 786 dev->watchdog_timeo = TX_TIMEOUT; 787 dev->ethtool_ops = &ethtool_ops; 788 789 netif_napi_add(dev, &np->napi, netdev_poll, max_interrupt_work); 790 791 if (mtu) 792 dev->mtu = mtu; 793 794 if (register_netdev(dev)) 795 goto err_out_cleardev; 796 797 printk(KERN_INFO "%s: %s at %p, %pM, IRQ %d.\n", 798 dev->name, netdrv_tbl[chip_idx].name, base, 799 dev->dev_addr, irq); 800 801 if (drv_flags & CanHaveMII) { 802 int phy, phy_idx = 0; 803 int mii_status; 804 for (phy = 0; phy < 32 && phy_idx < PHY_CNT; phy++) { 805 mdio_write(dev, phy, MII_BMCR, BMCR_RESET); 806 mdelay(100); 807 boguscnt = 1000; 808 while (--boguscnt > 0) 809 if ((mdio_read(dev, phy, MII_BMCR) & BMCR_RESET) == 0) 810 break; 811 if (boguscnt == 0) { 812 printk("%s: PHY#%d reset never completed!\n", dev->name, phy); 813 continue; 814 } 815 mii_status = mdio_read(dev, phy, MII_BMSR); 816 if (mii_status != 0) { 817 np->phys[phy_idx++] = phy; 818 np->mii_if.advertising = mdio_read(dev, phy, MII_ADVERTISE); 819 printk(KERN_INFO "%s: MII PHY found at address %d, status " 820 "%#4.4x advertising %#4.4x.\n", 821 dev->name, phy, mii_status, np->mii_if.advertising); 822 /* there can be only one PHY on-board */ 823 break; 824 } 825 } 826 np->phy_cnt = phy_idx; 827 if (np->phy_cnt > 0) 828 np->mii_if.phy_id = np->phys[0]; 829 else 830 memset(&np->mii_if, 0, sizeof(np->mii_if)); 831 } 832 833 printk(KERN_INFO "%s: scatter-gather and hardware TCP cksumming %s.\n", 834 dev->name, enable_hw_cksum ? "enabled" : "disabled"); 835 return 0; 836 837 err_out_cleardev: 838 iounmap(base); 839 err_out_free_res: 840 pci_release_regions (pdev); 841 err_out_free_netdev: 842 free_netdev(dev); 843 return -ENODEV; 844 } 845 846 847 /* Read the MII Management Data I/O (MDIO) interfaces. */ 848 static int mdio_read(struct net_device *dev, int phy_id, int location) 849 { 850 struct netdev_private *np = netdev_priv(dev); 851 void __iomem *mdio_addr = np->base + MIICtrl + (phy_id<<7) + (location<<2); 852 int result, boguscnt=1000; 853 /* ??? Should we add a busy-wait here? */ 854 do { 855 result = readl(mdio_addr); 856 } while ((result & 0xC0000000) != 0x80000000 && --boguscnt > 0); 857 if (boguscnt == 0) 858 return 0; 859 if ((result & 0xffff) == 0xffff) 860 return 0; 861 return result & 0xffff; 862 } 863 864 865 static void mdio_write(struct net_device *dev, int phy_id, int location, int value) 866 { 867 struct netdev_private *np = netdev_priv(dev); 868 void __iomem *mdio_addr = np->base + MIICtrl + (phy_id<<7) + (location<<2); 869 writel(value, mdio_addr); 870 /* The busy-wait will occur before a read. */ 871 } 872 873 874 static int netdev_open(struct net_device *dev) 875 { 876 const struct firmware *fw_rx, *fw_tx; 877 const __be32 *fw_rx_data, *fw_tx_data; 878 struct netdev_private *np = netdev_priv(dev); 879 void __iomem *ioaddr = np->base; 880 const int irq = np->pci_dev->irq; 881 int i, retval; 882 size_t tx_size, rx_size; 883 size_t tx_done_q_size, rx_done_q_size, tx_ring_size, rx_ring_size; 884 885 /* Do we ever need to reset the chip??? */ 886 887 retval = request_irq(irq, intr_handler, IRQF_SHARED, dev->name, dev); 888 if (retval) 889 return retval; 890 891 /* Disable the Rx and Tx, and reset the chip. */ 892 writel(0, ioaddr + GenCtrl); 893 writel(1, ioaddr + PCIDeviceConfig); 894 if (debug > 1) 895 printk(KERN_DEBUG "%s: netdev_open() irq %d.\n", 896 dev->name, irq); 897 898 /* Allocate the various queues. */ 899 if (!np->queue_mem) { 900 tx_done_q_size = ((sizeof(struct tx_done_desc) * DONE_Q_SIZE + QUEUE_ALIGN - 1) / QUEUE_ALIGN) * QUEUE_ALIGN; 901 rx_done_q_size = ((sizeof(rx_done_desc) * DONE_Q_SIZE + QUEUE_ALIGN - 1) / QUEUE_ALIGN) * QUEUE_ALIGN; 902 tx_ring_size = ((sizeof(starfire_tx_desc) * TX_RING_SIZE + QUEUE_ALIGN - 1) / QUEUE_ALIGN) * QUEUE_ALIGN; 903 rx_ring_size = sizeof(struct starfire_rx_desc) * RX_RING_SIZE; 904 np->queue_mem_size = tx_done_q_size + rx_done_q_size + tx_ring_size + rx_ring_size; 905 np->queue_mem = pci_alloc_consistent(np->pci_dev, np->queue_mem_size, &np->queue_mem_dma); 906 if (np->queue_mem == NULL) { 907 free_irq(irq, dev); 908 return -ENOMEM; 909 } 910 911 np->tx_done_q = np->queue_mem; 912 np->tx_done_q_dma = np->queue_mem_dma; 913 np->rx_done_q = (void *) np->tx_done_q + tx_done_q_size; 914 np->rx_done_q_dma = np->tx_done_q_dma + tx_done_q_size; 915 np->tx_ring = (void *) np->rx_done_q + rx_done_q_size; 916 np->tx_ring_dma = np->rx_done_q_dma + rx_done_q_size; 917 np->rx_ring = (void *) np->tx_ring + tx_ring_size; 918 np->rx_ring_dma = np->tx_ring_dma + tx_ring_size; 919 } 920 921 /* Start with no carrier, it gets adjusted later */ 922 netif_carrier_off(dev); 923 init_ring(dev); 924 /* Set the size of the Rx buffers. */ 925 writel((np->rx_buf_sz << RxBufferLenShift) | 926 (0 << RxMinDescrThreshShift) | 927 RxPrefetchMode | RxVariableQ | 928 RX_Q_ENTRIES | 929 RX_DESC_Q_ADDR_SIZE | RX_DESC_ADDR_SIZE | 930 RxDescSpace4, 931 ioaddr + RxDescQCtrl); 932 933 /* Set up the Rx DMA controller. */ 934 writel(RxChecksumIgnore | 935 (0 << RxEarlyIntThreshShift) | 936 (6 << RxHighPrioThreshShift) | 937 ((DMA_BURST_SIZE / 32) << RxBurstSizeShift), 938 ioaddr + RxDMACtrl); 939 940 /* Set Tx descriptor */ 941 writel((2 << TxHiPriFIFOThreshShift) | 942 (0 << TxPadLenShift) | 943 ((DMA_BURST_SIZE / 32) << TxDMABurstSizeShift) | 944 TX_DESC_Q_ADDR_SIZE | 945 TX_DESC_SPACING | TX_DESC_TYPE, 946 ioaddr + TxDescCtrl); 947 948 writel( (np->queue_mem_dma >> 16) >> 16, ioaddr + RxDescQHiAddr); 949 writel( (np->queue_mem_dma >> 16) >> 16, ioaddr + TxRingHiAddr); 950 writel( (np->queue_mem_dma >> 16) >> 16, ioaddr + CompletionHiAddr); 951 writel(np->rx_ring_dma, ioaddr + RxDescQAddr); 952 writel(np->tx_ring_dma, ioaddr + TxRingPtr); 953 954 writel(np->tx_done_q_dma, ioaddr + TxCompletionAddr); 955 writel(np->rx_done_q_dma | 956 RxComplType | 957 (0 << RxComplThreshShift), 958 ioaddr + RxCompletionAddr); 959 960 if (debug > 1) 961 printk(KERN_DEBUG "%s: Filling in the station address.\n", dev->name); 962 963 /* Fill both the Tx SA register and the Rx perfect filter. */ 964 for (i = 0; i < 6; i++) 965 writeb(dev->dev_addr[i], ioaddr + TxStationAddr + 5 - i); 966 /* The first entry is special because it bypasses the VLAN filter. 967 Don't use it. */ 968 writew(0, ioaddr + PerfFilterTable); 969 writew(0, ioaddr + PerfFilterTable + 4); 970 writew(0, ioaddr + PerfFilterTable + 8); 971 for (i = 1; i < 16; i++) { 972 __be16 *eaddrs = (__be16 *)dev->dev_addr; 973 void __iomem *setup_frm = ioaddr + PerfFilterTable + i * 16; 974 writew(be16_to_cpu(eaddrs[2]), setup_frm); setup_frm += 4; 975 writew(be16_to_cpu(eaddrs[1]), setup_frm); setup_frm += 4; 976 writew(be16_to_cpu(eaddrs[0]), setup_frm); setup_frm += 8; 977 } 978 979 /* Initialize other registers. */ 980 /* Configure the PCI bus bursts and FIFO thresholds. */ 981 np->tx_mode = TxFlowEnable|RxFlowEnable|PadEnable; /* modified when link is up. */ 982 writel(MiiSoftReset | np->tx_mode, ioaddr + TxMode); 983 udelay(1000); 984 writel(np->tx_mode, ioaddr + TxMode); 985 np->tx_threshold = 4; 986 writel(np->tx_threshold, ioaddr + TxThreshold); 987 988 writel(np->intr_timer_ctrl, ioaddr + IntrTimerCtrl); 989 990 napi_enable(&np->napi); 991 992 netif_start_queue(dev); 993 994 if (debug > 1) 995 printk(KERN_DEBUG "%s: Setting the Rx and Tx modes.\n", dev->name); 996 set_rx_mode(dev); 997 998 np->mii_if.advertising = mdio_read(dev, np->phys[0], MII_ADVERTISE); 999 check_duplex(dev); 1000 1001 /* Enable GPIO interrupts on link change */ 1002 writel(0x0f00ff00, ioaddr + GPIOCtrl); 1003 1004 /* Set the interrupt mask */ 1005 writel(IntrRxDone | IntrRxEmpty | IntrDMAErr | 1006 IntrTxDMADone | IntrStatsMax | IntrLinkChange | 1007 IntrRxGFPDead | IntrNoTxCsum | IntrTxBadID, 1008 ioaddr + IntrEnable); 1009 /* Enable PCI interrupts. */ 1010 writel(0x00800000 | readl(ioaddr + PCIDeviceConfig), 1011 ioaddr + PCIDeviceConfig); 1012 1013 #ifdef VLAN_SUPPORT 1014 /* Set VLAN type to 802.1q */ 1015 writel(ETH_P_8021Q, ioaddr + VlanType); 1016 #endif /* VLAN_SUPPORT */ 1017 1018 retval = request_firmware(&fw_rx, FIRMWARE_RX, &np->pci_dev->dev); 1019 if (retval) { 1020 printk(KERN_ERR "starfire: Failed to load firmware \"%s\"\n", 1021 FIRMWARE_RX); 1022 goto out_init; 1023 } 1024 if (fw_rx->size % 4) { 1025 printk(KERN_ERR "starfire: bogus length %zu in \"%s\"\n", 1026 fw_rx->size, FIRMWARE_RX); 1027 retval = -EINVAL; 1028 goto out_rx; 1029 } 1030 retval = request_firmware(&fw_tx, FIRMWARE_TX, &np->pci_dev->dev); 1031 if (retval) { 1032 printk(KERN_ERR "starfire: Failed to load firmware \"%s\"\n", 1033 FIRMWARE_TX); 1034 goto out_rx; 1035 } 1036 if (fw_tx->size % 4) { 1037 printk(KERN_ERR "starfire: bogus length %zu in \"%s\"\n", 1038 fw_tx->size, FIRMWARE_TX); 1039 retval = -EINVAL; 1040 goto out_tx; 1041 } 1042 fw_rx_data = (const __be32 *)&fw_rx->data[0]; 1043 fw_tx_data = (const __be32 *)&fw_tx->data[0]; 1044 rx_size = fw_rx->size / 4; 1045 tx_size = fw_tx->size / 4; 1046 1047 /* Load Rx/Tx firmware into the frame processors */ 1048 for (i = 0; i < rx_size; i++) 1049 writel(be32_to_cpup(&fw_rx_data[i]), ioaddr + RxGfpMem + i * 4); 1050 for (i = 0; i < tx_size; i++) 1051 writel(be32_to_cpup(&fw_tx_data[i]), ioaddr + TxGfpMem + i * 4); 1052 if (enable_hw_cksum) 1053 /* Enable the Rx and Tx units, and the Rx/Tx frame processors. */ 1054 writel(TxEnable|TxGFPEnable|RxEnable|RxGFPEnable, ioaddr + GenCtrl); 1055 else 1056 /* Enable the Rx and Tx units only. */ 1057 writel(TxEnable|RxEnable, ioaddr + GenCtrl); 1058 1059 if (debug > 1) 1060 printk(KERN_DEBUG "%s: Done netdev_open().\n", 1061 dev->name); 1062 1063 out_tx: 1064 release_firmware(fw_tx); 1065 out_rx: 1066 release_firmware(fw_rx); 1067 out_init: 1068 if (retval) 1069 netdev_close(dev); 1070 return retval; 1071 } 1072 1073 1074 static void check_duplex(struct net_device *dev) 1075 { 1076 struct netdev_private *np = netdev_priv(dev); 1077 u16 reg0; 1078 int silly_count = 1000; 1079 1080 mdio_write(dev, np->phys[0], MII_ADVERTISE, np->mii_if.advertising); 1081 mdio_write(dev, np->phys[0], MII_BMCR, BMCR_RESET); 1082 udelay(500); 1083 while (--silly_count && mdio_read(dev, np->phys[0], MII_BMCR) & BMCR_RESET) 1084 /* do nothing */; 1085 if (!silly_count) { 1086 printk("%s: MII reset failed!\n", dev->name); 1087 return; 1088 } 1089 1090 reg0 = mdio_read(dev, np->phys[0], MII_BMCR); 1091 1092 if (!np->mii_if.force_media) { 1093 reg0 |= BMCR_ANENABLE | BMCR_ANRESTART; 1094 } else { 1095 reg0 &= ~(BMCR_ANENABLE | BMCR_ANRESTART); 1096 if (np->speed100) 1097 reg0 |= BMCR_SPEED100; 1098 if (np->mii_if.full_duplex) 1099 reg0 |= BMCR_FULLDPLX; 1100 printk(KERN_DEBUG "%s: Link forced to %sMbit %s-duplex\n", 1101 dev->name, 1102 np->speed100 ? "100" : "10", 1103 np->mii_if.full_duplex ? "full" : "half"); 1104 } 1105 mdio_write(dev, np->phys[0], MII_BMCR, reg0); 1106 } 1107 1108 1109 static void tx_timeout(struct net_device *dev) 1110 { 1111 struct netdev_private *np = netdev_priv(dev); 1112 void __iomem *ioaddr = np->base; 1113 int old_debug; 1114 1115 printk(KERN_WARNING "%s: Transmit timed out, status %#8.8x, " 1116 "resetting...\n", dev->name, (int) readl(ioaddr + IntrStatus)); 1117 1118 /* Perhaps we should reinitialize the hardware here. */ 1119 1120 /* 1121 * Stop and restart the interface. 1122 * Cheat and increase the debug level temporarily. 1123 */ 1124 old_debug = debug; 1125 debug = 2; 1126 netdev_close(dev); 1127 netdev_open(dev); 1128 debug = old_debug; 1129 1130 /* Trigger an immediate transmit demand. */ 1131 1132 netif_trans_update(dev); /* prevent tx timeout */ 1133 dev->stats.tx_errors++; 1134 netif_wake_queue(dev); 1135 } 1136 1137 1138 /* Initialize the Rx and Tx rings, along with various 'dev' bits. */ 1139 static void init_ring(struct net_device *dev) 1140 { 1141 struct netdev_private *np = netdev_priv(dev); 1142 int i; 1143 1144 np->cur_rx = np->cur_tx = np->reap_tx = 0; 1145 np->dirty_rx = np->dirty_tx = np->rx_done = np->tx_done = 0; 1146 1147 np->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32); 1148 1149 /* Fill in the Rx buffers. Handle allocation failure gracefully. */ 1150 for (i = 0; i < RX_RING_SIZE; i++) { 1151 struct sk_buff *skb = netdev_alloc_skb(dev, np->rx_buf_sz); 1152 np->rx_info[i].skb = skb; 1153 if (skb == NULL) 1154 break; 1155 np->rx_info[i].mapping = pci_map_single(np->pci_dev, skb->data, np->rx_buf_sz, PCI_DMA_FROMDEVICE); 1156 /* Grrr, we cannot offset to correctly align the IP header. */ 1157 np->rx_ring[i].rxaddr = cpu_to_dma(np->rx_info[i].mapping | RxDescValid); 1158 } 1159 writew(i - 1, np->base + RxDescQIdx); 1160 np->dirty_rx = (unsigned int)(i - RX_RING_SIZE); 1161 1162 /* Clear the remainder of the Rx buffer ring. */ 1163 for ( ; i < RX_RING_SIZE; i++) { 1164 np->rx_ring[i].rxaddr = 0; 1165 np->rx_info[i].skb = NULL; 1166 np->rx_info[i].mapping = 0; 1167 } 1168 /* Mark the last entry as wrapping the ring. */ 1169 np->rx_ring[RX_RING_SIZE - 1].rxaddr |= cpu_to_dma(RxDescEndRing); 1170 1171 /* Clear the completion rings. */ 1172 for (i = 0; i < DONE_Q_SIZE; i++) { 1173 np->rx_done_q[i].status = 0; 1174 np->tx_done_q[i].status = 0; 1175 } 1176 1177 for (i = 0; i < TX_RING_SIZE; i++) 1178 memset(&np->tx_info[i], 0, sizeof(np->tx_info[i])); 1179 } 1180 1181 1182 static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev) 1183 { 1184 struct netdev_private *np = netdev_priv(dev); 1185 unsigned int entry; 1186 u32 status; 1187 int i; 1188 1189 /* 1190 * be cautious here, wrapping the queue has weird semantics 1191 * and we may not have enough slots even when it seems we do. 1192 */ 1193 if ((np->cur_tx - np->dirty_tx) + skb_num_frags(skb) * 2 > TX_RING_SIZE) { 1194 netif_stop_queue(dev); 1195 return NETDEV_TX_BUSY; 1196 } 1197 1198 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 1199 if (skb->ip_summed == CHECKSUM_PARTIAL) { 1200 if (skb_padto(skb, (skb->len + PADDING_MASK) & ~PADDING_MASK)) 1201 return NETDEV_TX_OK; 1202 } 1203 #endif /* ZEROCOPY && HAS_BROKEN_FIRMWARE */ 1204 1205 entry = np->cur_tx % TX_RING_SIZE; 1206 for (i = 0; i < skb_num_frags(skb); i++) { 1207 int wrap_ring = 0; 1208 status = TxDescID; 1209 1210 if (i == 0) { 1211 np->tx_info[entry].skb = skb; 1212 status |= TxCRCEn; 1213 if (entry >= TX_RING_SIZE - skb_num_frags(skb)) { 1214 status |= TxRingWrap; 1215 wrap_ring = 1; 1216 } 1217 if (np->reap_tx) { 1218 status |= TxDescIntr; 1219 np->reap_tx = 0; 1220 } 1221 if (skb->ip_summed == CHECKSUM_PARTIAL) { 1222 status |= TxCalTCP; 1223 dev->stats.tx_compressed++; 1224 } 1225 status |= skb_first_frag_len(skb) | (skb_num_frags(skb) << 16); 1226 1227 np->tx_info[entry].mapping = 1228 pci_map_single(np->pci_dev, skb->data, skb_first_frag_len(skb), PCI_DMA_TODEVICE); 1229 } else { 1230 const skb_frag_t *this_frag = &skb_shinfo(skb)->frags[i - 1]; 1231 status |= skb_frag_size(this_frag); 1232 np->tx_info[entry].mapping = 1233 pci_map_single(np->pci_dev, 1234 skb_frag_address(this_frag), 1235 skb_frag_size(this_frag), 1236 PCI_DMA_TODEVICE); 1237 } 1238 1239 np->tx_ring[entry].addr = cpu_to_dma(np->tx_info[entry].mapping); 1240 np->tx_ring[entry].status = cpu_to_le32(status); 1241 if (debug > 3) 1242 printk(KERN_DEBUG "%s: Tx #%d/#%d slot %d status %#8.8x.\n", 1243 dev->name, np->cur_tx, np->dirty_tx, 1244 entry, status); 1245 if (wrap_ring) { 1246 np->tx_info[entry].used_slots = TX_RING_SIZE - entry; 1247 np->cur_tx += np->tx_info[entry].used_slots; 1248 entry = 0; 1249 } else { 1250 np->tx_info[entry].used_slots = 1; 1251 np->cur_tx += np->tx_info[entry].used_slots; 1252 entry++; 1253 } 1254 /* scavenge the tx descriptors twice per TX_RING_SIZE */ 1255 if (np->cur_tx % (TX_RING_SIZE / 2) == 0) 1256 np->reap_tx = 1; 1257 } 1258 1259 /* Non-x86: explicitly flush descriptor cache lines here. */ 1260 /* Ensure all descriptors are written back before the transmit is 1261 initiated. - Jes */ 1262 wmb(); 1263 1264 /* Update the producer index. */ 1265 writel(entry * (sizeof(starfire_tx_desc) / 8), np->base + TxProducerIdx); 1266 1267 /* 4 is arbitrary, but should be ok */ 1268 if ((np->cur_tx - np->dirty_tx) + 4 > TX_RING_SIZE) 1269 netif_stop_queue(dev); 1270 1271 return NETDEV_TX_OK; 1272 } 1273 1274 1275 /* The interrupt handler does all of the Rx thread work and cleans up 1276 after the Tx thread. */ 1277 static irqreturn_t intr_handler(int irq, void *dev_instance) 1278 { 1279 struct net_device *dev = dev_instance; 1280 struct netdev_private *np = netdev_priv(dev); 1281 void __iomem *ioaddr = np->base; 1282 int boguscnt = max_interrupt_work; 1283 int consumer; 1284 int tx_status; 1285 int handled = 0; 1286 1287 do { 1288 u32 intr_status = readl(ioaddr + IntrClear); 1289 1290 if (debug > 4) 1291 printk(KERN_DEBUG "%s: Interrupt status %#8.8x.\n", 1292 dev->name, intr_status); 1293 1294 if (intr_status == 0 || intr_status == (u32) -1) 1295 break; 1296 1297 handled = 1; 1298 1299 if (intr_status & (IntrRxDone | IntrRxEmpty)) { 1300 u32 enable; 1301 1302 if (likely(napi_schedule_prep(&np->napi))) { 1303 __napi_schedule(&np->napi); 1304 enable = readl(ioaddr + IntrEnable); 1305 enable &= ~(IntrRxDone | IntrRxEmpty); 1306 writel(enable, ioaddr + IntrEnable); 1307 /* flush PCI posting buffers */ 1308 readl(ioaddr + IntrEnable); 1309 } else { 1310 /* Paranoia check */ 1311 enable = readl(ioaddr + IntrEnable); 1312 if (enable & (IntrRxDone | IntrRxEmpty)) { 1313 printk(KERN_INFO 1314 "%s: interrupt while in poll!\n", 1315 dev->name); 1316 enable &= ~(IntrRxDone | IntrRxEmpty); 1317 writel(enable, ioaddr + IntrEnable); 1318 } 1319 } 1320 } 1321 1322 /* Scavenge the skbuff list based on the Tx-done queue. 1323 There are redundant checks here that may be cleaned up 1324 after the driver has proven to be reliable. */ 1325 consumer = readl(ioaddr + TxConsumerIdx); 1326 if (debug > 3) 1327 printk(KERN_DEBUG "%s: Tx Consumer index is %d.\n", 1328 dev->name, consumer); 1329 1330 while ((tx_status = le32_to_cpu(np->tx_done_q[np->tx_done].status)) != 0) { 1331 if (debug > 3) 1332 printk(KERN_DEBUG "%s: Tx completion #%d entry %d is %#8.8x.\n", 1333 dev->name, np->dirty_tx, np->tx_done, tx_status); 1334 if ((tx_status & 0xe0000000) == 0xa0000000) { 1335 dev->stats.tx_packets++; 1336 } else if ((tx_status & 0xe0000000) == 0x80000000) { 1337 u16 entry = (tx_status & 0x7fff) / sizeof(starfire_tx_desc); 1338 struct sk_buff *skb = np->tx_info[entry].skb; 1339 np->tx_info[entry].skb = NULL; 1340 pci_unmap_single(np->pci_dev, 1341 np->tx_info[entry].mapping, 1342 skb_first_frag_len(skb), 1343 PCI_DMA_TODEVICE); 1344 np->tx_info[entry].mapping = 0; 1345 np->dirty_tx += np->tx_info[entry].used_slots; 1346 entry = (entry + np->tx_info[entry].used_slots) % TX_RING_SIZE; 1347 { 1348 int i; 1349 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 1350 pci_unmap_single(np->pci_dev, 1351 np->tx_info[entry].mapping, 1352 skb_frag_size(&skb_shinfo(skb)->frags[i]), 1353 PCI_DMA_TODEVICE); 1354 np->dirty_tx++; 1355 entry++; 1356 } 1357 } 1358 1359 dev_kfree_skb_irq(skb); 1360 } 1361 np->tx_done_q[np->tx_done].status = 0; 1362 np->tx_done = (np->tx_done + 1) % DONE_Q_SIZE; 1363 } 1364 writew(np->tx_done, ioaddr + CompletionQConsumerIdx + 2); 1365 1366 if (netif_queue_stopped(dev) && 1367 (np->cur_tx - np->dirty_tx + 4 < TX_RING_SIZE)) { 1368 /* The ring is no longer full, wake the queue. */ 1369 netif_wake_queue(dev); 1370 } 1371 1372 /* Stats overflow */ 1373 if (intr_status & IntrStatsMax) 1374 get_stats(dev); 1375 1376 /* Media change interrupt. */ 1377 if (intr_status & IntrLinkChange) 1378 netdev_media_change(dev); 1379 1380 /* Abnormal error summary/uncommon events handlers. */ 1381 if (intr_status & IntrAbnormalSummary) 1382 netdev_error(dev, intr_status); 1383 1384 if (--boguscnt < 0) { 1385 if (debug > 1) 1386 printk(KERN_WARNING "%s: Too much work at interrupt, " 1387 "status=%#8.8x.\n", 1388 dev->name, intr_status); 1389 break; 1390 } 1391 } while (1); 1392 1393 if (debug > 4) 1394 printk(KERN_DEBUG "%s: exiting interrupt, status=%#8.8x.\n", 1395 dev->name, (int) readl(ioaddr + IntrStatus)); 1396 return IRQ_RETVAL(handled); 1397 } 1398 1399 1400 /* 1401 * This routine is logically part of the interrupt/poll handler, but separated 1402 * for clarity and better register allocation. 1403 */ 1404 static int __netdev_rx(struct net_device *dev, int *quota) 1405 { 1406 struct netdev_private *np = netdev_priv(dev); 1407 u32 desc_status; 1408 int retcode = 0; 1409 1410 /* If EOP is set on the next entry, it's a new packet. Send it up. */ 1411 while ((desc_status = le32_to_cpu(np->rx_done_q[np->rx_done].status)) != 0) { 1412 struct sk_buff *skb; 1413 u16 pkt_len; 1414 int entry; 1415 rx_done_desc *desc = &np->rx_done_q[np->rx_done]; 1416 1417 if (debug > 4) 1418 printk(KERN_DEBUG " netdev_rx() status of %d was %#8.8x.\n", np->rx_done, desc_status); 1419 if (!(desc_status & RxOK)) { 1420 /* There was an error. */ 1421 if (debug > 2) 1422 printk(KERN_DEBUG " netdev_rx() Rx error was %#8.8x.\n", desc_status); 1423 dev->stats.rx_errors++; 1424 if (desc_status & RxFIFOErr) 1425 dev->stats.rx_fifo_errors++; 1426 goto next_rx; 1427 } 1428 1429 if (*quota <= 0) { /* out of rx quota */ 1430 retcode = 1; 1431 goto out; 1432 } 1433 (*quota)--; 1434 1435 pkt_len = desc_status; /* Implicitly Truncate */ 1436 entry = (desc_status >> 16) & 0x7ff; 1437 1438 if (debug > 4) 1439 printk(KERN_DEBUG " netdev_rx() normal Rx pkt length %d, quota %d.\n", pkt_len, *quota); 1440 /* Check if the packet is long enough to accept without copying 1441 to a minimally-sized skbuff. */ 1442 if (pkt_len < rx_copybreak && 1443 (skb = netdev_alloc_skb(dev, pkt_len + 2)) != NULL) { 1444 skb_reserve(skb, 2); /* 16 byte align the IP header */ 1445 pci_dma_sync_single_for_cpu(np->pci_dev, 1446 np->rx_info[entry].mapping, 1447 pkt_len, PCI_DMA_FROMDEVICE); 1448 skb_copy_to_linear_data(skb, np->rx_info[entry].skb->data, pkt_len); 1449 pci_dma_sync_single_for_device(np->pci_dev, 1450 np->rx_info[entry].mapping, 1451 pkt_len, PCI_DMA_FROMDEVICE); 1452 skb_put(skb, pkt_len); 1453 } else { 1454 pci_unmap_single(np->pci_dev, np->rx_info[entry].mapping, np->rx_buf_sz, PCI_DMA_FROMDEVICE); 1455 skb = np->rx_info[entry].skb; 1456 skb_put(skb, pkt_len); 1457 np->rx_info[entry].skb = NULL; 1458 np->rx_info[entry].mapping = 0; 1459 } 1460 #ifndef final_version /* Remove after testing. */ 1461 /* You will want this info for the initial debug. */ 1462 if (debug > 5) { 1463 printk(KERN_DEBUG " Rx data %pM %pM %2.2x%2.2x.\n", 1464 skb->data, skb->data + 6, 1465 skb->data[12], skb->data[13]); 1466 } 1467 #endif 1468 1469 skb->protocol = eth_type_trans(skb, dev); 1470 #ifdef VLAN_SUPPORT 1471 if (debug > 4) 1472 printk(KERN_DEBUG " netdev_rx() status2 of %d was %#4.4x.\n", np->rx_done, le16_to_cpu(desc->status2)); 1473 #endif 1474 if (le16_to_cpu(desc->status2) & 0x0100) { 1475 skb->ip_summed = CHECKSUM_UNNECESSARY; 1476 dev->stats.rx_compressed++; 1477 } 1478 /* 1479 * This feature doesn't seem to be working, at least 1480 * with the two firmware versions I have. If the GFP sees 1481 * an IP fragment, it either ignores it completely, or reports 1482 * "bad checksum" on it. 1483 * 1484 * Maybe I missed something -- corrections are welcome. 1485 * Until then, the printk stays. :-) -Ion 1486 */ 1487 else if (le16_to_cpu(desc->status2) & 0x0040) { 1488 skb->ip_summed = CHECKSUM_COMPLETE; 1489 skb->csum = le16_to_cpu(desc->csum); 1490 printk(KERN_DEBUG "%s: checksum_hw, status2 = %#x\n", dev->name, le16_to_cpu(desc->status2)); 1491 } 1492 #ifdef VLAN_SUPPORT 1493 if (le16_to_cpu(desc->status2) & 0x0200) { 1494 u16 vlid = le16_to_cpu(desc->vlanid); 1495 1496 if (debug > 4) { 1497 printk(KERN_DEBUG " netdev_rx() vlanid = %d\n", 1498 vlid); 1499 } 1500 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlid); 1501 } 1502 #endif /* VLAN_SUPPORT */ 1503 netif_receive_skb(skb); 1504 dev->stats.rx_packets++; 1505 1506 next_rx: 1507 np->cur_rx++; 1508 desc->status = 0; 1509 np->rx_done = (np->rx_done + 1) % DONE_Q_SIZE; 1510 } 1511 1512 if (*quota == 0) { /* out of rx quota */ 1513 retcode = 1; 1514 goto out; 1515 } 1516 writew(np->rx_done, np->base + CompletionQConsumerIdx); 1517 1518 out: 1519 refill_rx_ring(dev); 1520 if (debug > 5) 1521 printk(KERN_DEBUG " exiting netdev_rx(): %d, status of %d was %#8.8x.\n", 1522 retcode, np->rx_done, desc_status); 1523 return retcode; 1524 } 1525 1526 static int netdev_poll(struct napi_struct *napi, int budget) 1527 { 1528 struct netdev_private *np = container_of(napi, struct netdev_private, napi); 1529 struct net_device *dev = np->dev; 1530 u32 intr_status; 1531 void __iomem *ioaddr = np->base; 1532 int quota = budget; 1533 1534 do { 1535 writel(IntrRxDone | IntrRxEmpty, ioaddr + IntrClear); 1536 1537 if (__netdev_rx(dev, &quota)) 1538 goto out; 1539 1540 intr_status = readl(ioaddr + IntrStatus); 1541 } while (intr_status & (IntrRxDone | IntrRxEmpty)); 1542 1543 napi_complete(napi); 1544 intr_status = readl(ioaddr + IntrEnable); 1545 intr_status |= IntrRxDone | IntrRxEmpty; 1546 writel(intr_status, ioaddr + IntrEnable); 1547 1548 out: 1549 if (debug > 5) 1550 printk(KERN_DEBUG " exiting netdev_poll(): %d.\n", 1551 budget - quota); 1552 1553 /* Restart Rx engine if stopped. */ 1554 return budget - quota; 1555 } 1556 1557 static void refill_rx_ring(struct net_device *dev) 1558 { 1559 struct netdev_private *np = netdev_priv(dev); 1560 struct sk_buff *skb; 1561 int entry = -1; 1562 1563 /* Refill the Rx ring buffers. */ 1564 for (; np->cur_rx - np->dirty_rx > 0; np->dirty_rx++) { 1565 entry = np->dirty_rx % RX_RING_SIZE; 1566 if (np->rx_info[entry].skb == NULL) { 1567 skb = netdev_alloc_skb(dev, np->rx_buf_sz); 1568 np->rx_info[entry].skb = skb; 1569 if (skb == NULL) 1570 break; /* Better luck next round. */ 1571 np->rx_info[entry].mapping = 1572 pci_map_single(np->pci_dev, skb->data, np->rx_buf_sz, PCI_DMA_FROMDEVICE); 1573 np->rx_ring[entry].rxaddr = 1574 cpu_to_dma(np->rx_info[entry].mapping | RxDescValid); 1575 } 1576 if (entry == RX_RING_SIZE - 1) 1577 np->rx_ring[entry].rxaddr |= cpu_to_dma(RxDescEndRing); 1578 } 1579 if (entry >= 0) 1580 writew(entry, np->base + RxDescQIdx); 1581 } 1582 1583 1584 static void netdev_media_change(struct net_device *dev) 1585 { 1586 struct netdev_private *np = netdev_priv(dev); 1587 void __iomem *ioaddr = np->base; 1588 u16 reg0, reg1, reg4, reg5; 1589 u32 new_tx_mode; 1590 u32 new_intr_timer_ctrl; 1591 1592 /* reset status first */ 1593 mdio_read(dev, np->phys[0], MII_BMCR); 1594 mdio_read(dev, np->phys[0], MII_BMSR); 1595 1596 reg0 = mdio_read(dev, np->phys[0], MII_BMCR); 1597 reg1 = mdio_read(dev, np->phys[0], MII_BMSR); 1598 1599 if (reg1 & BMSR_LSTATUS) { 1600 /* link is up */ 1601 if (reg0 & BMCR_ANENABLE) { 1602 /* autonegotiation is enabled */ 1603 reg4 = mdio_read(dev, np->phys[0], MII_ADVERTISE); 1604 reg5 = mdio_read(dev, np->phys[0], MII_LPA); 1605 if (reg4 & ADVERTISE_100FULL && reg5 & LPA_100FULL) { 1606 np->speed100 = 1; 1607 np->mii_if.full_duplex = 1; 1608 } else if (reg4 & ADVERTISE_100HALF && reg5 & LPA_100HALF) { 1609 np->speed100 = 1; 1610 np->mii_if.full_duplex = 0; 1611 } else if (reg4 & ADVERTISE_10FULL && reg5 & LPA_10FULL) { 1612 np->speed100 = 0; 1613 np->mii_if.full_duplex = 1; 1614 } else { 1615 np->speed100 = 0; 1616 np->mii_if.full_duplex = 0; 1617 } 1618 } else { 1619 /* autonegotiation is disabled */ 1620 if (reg0 & BMCR_SPEED100) 1621 np->speed100 = 1; 1622 else 1623 np->speed100 = 0; 1624 if (reg0 & BMCR_FULLDPLX) 1625 np->mii_if.full_duplex = 1; 1626 else 1627 np->mii_if.full_duplex = 0; 1628 } 1629 netif_carrier_on(dev); 1630 printk(KERN_DEBUG "%s: Link is up, running at %sMbit %s-duplex\n", 1631 dev->name, 1632 np->speed100 ? "100" : "10", 1633 np->mii_if.full_duplex ? "full" : "half"); 1634 1635 new_tx_mode = np->tx_mode & ~FullDuplex; /* duplex setting */ 1636 if (np->mii_if.full_duplex) 1637 new_tx_mode |= FullDuplex; 1638 if (np->tx_mode != new_tx_mode) { 1639 np->tx_mode = new_tx_mode; 1640 writel(np->tx_mode | MiiSoftReset, ioaddr + TxMode); 1641 udelay(1000); 1642 writel(np->tx_mode, ioaddr + TxMode); 1643 } 1644 1645 new_intr_timer_ctrl = np->intr_timer_ctrl & ~Timer10X; 1646 if (np->speed100) 1647 new_intr_timer_ctrl |= Timer10X; 1648 if (np->intr_timer_ctrl != new_intr_timer_ctrl) { 1649 np->intr_timer_ctrl = new_intr_timer_ctrl; 1650 writel(new_intr_timer_ctrl, ioaddr + IntrTimerCtrl); 1651 } 1652 } else { 1653 netif_carrier_off(dev); 1654 printk(KERN_DEBUG "%s: Link is down\n", dev->name); 1655 } 1656 } 1657 1658 1659 static void netdev_error(struct net_device *dev, int intr_status) 1660 { 1661 struct netdev_private *np = netdev_priv(dev); 1662 1663 /* Came close to underrunning the Tx FIFO, increase threshold. */ 1664 if (intr_status & IntrTxDataLow) { 1665 if (np->tx_threshold <= PKT_BUF_SZ / 16) { 1666 writel(++np->tx_threshold, np->base + TxThreshold); 1667 printk(KERN_NOTICE "%s: PCI bus congestion, increasing Tx FIFO threshold to %d bytes\n", 1668 dev->name, np->tx_threshold * 16); 1669 } else 1670 printk(KERN_WARNING "%s: PCI Tx underflow -- adapter is probably malfunctioning\n", dev->name); 1671 } 1672 if (intr_status & IntrRxGFPDead) { 1673 dev->stats.rx_fifo_errors++; 1674 dev->stats.rx_errors++; 1675 } 1676 if (intr_status & (IntrNoTxCsum | IntrDMAErr)) { 1677 dev->stats.tx_fifo_errors++; 1678 dev->stats.tx_errors++; 1679 } 1680 if ((intr_status & ~(IntrNormalMask | IntrAbnormalSummary | IntrLinkChange | IntrStatsMax | IntrTxDataLow | IntrRxGFPDead | IntrNoTxCsum | IntrPCIPad)) && debug) 1681 printk(KERN_ERR "%s: Something Wicked happened! %#8.8x.\n", 1682 dev->name, intr_status); 1683 } 1684 1685 1686 static struct net_device_stats *get_stats(struct net_device *dev) 1687 { 1688 struct netdev_private *np = netdev_priv(dev); 1689 void __iomem *ioaddr = np->base; 1690 1691 /* This adapter architecture needs no SMP locks. */ 1692 dev->stats.tx_bytes = readl(ioaddr + 0x57010); 1693 dev->stats.rx_bytes = readl(ioaddr + 0x57044); 1694 dev->stats.tx_packets = readl(ioaddr + 0x57000); 1695 dev->stats.tx_aborted_errors = 1696 readl(ioaddr + 0x57024) + readl(ioaddr + 0x57028); 1697 dev->stats.tx_window_errors = readl(ioaddr + 0x57018); 1698 dev->stats.collisions = 1699 readl(ioaddr + 0x57004) + readl(ioaddr + 0x57008); 1700 1701 /* The chip only need report frame silently dropped. */ 1702 dev->stats.rx_dropped += readw(ioaddr + RxDMAStatus); 1703 writew(0, ioaddr + RxDMAStatus); 1704 dev->stats.rx_crc_errors = readl(ioaddr + 0x5703C); 1705 dev->stats.rx_frame_errors = readl(ioaddr + 0x57040); 1706 dev->stats.rx_length_errors = readl(ioaddr + 0x57058); 1707 dev->stats.rx_missed_errors = readl(ioaddr + 0x5707C); 1708 1709 return &dev->stats; 1710 } 1711 1712 #ifdef VLAN_SUPPORT 1713 static u32 set_vlan_mode(struct netdev_private *np) 1714 { 1715 u32 ret = VlanMode; 1716 u16 vid; 1717 void __iomem *filter_addr = np->base + HashTable + 8; 1718 int vlan_count = 0; 1719 1720 for_each_set_bit(vid, np->active_vlans, VLAN_N_VID) { 1721 if (vlan_count == 32) 1722 break; 1723 writew(vid, filter_addr); 1724 filter_addr += 16; 1725 vlan_count++; 1726 } 1727 if (vlan_count == 32) { 1728 ret |= PerfectFilterVlan; 1729 while (vlan_count < 32) { 1730 writew(0, filter_addr); 1731 filter_addr += 16; 1732 vlan_count++; 1733 } 1734 } 1735 return ret; 1736 } 1737 #endif /* VLAN_SUPPORT */ 1738 1739 static void set_rx_mode(struct net_device *dev) 1740 { 1741 struct netdev_private *np = netdev_priv(dev); 1742 void __iomem *ioaddr = np->base; 1743 u32 rx_mode = MinVLANPrio; 1744 struct netdev_hw_addr *ha; 1745 int i; 1746 1747 #ifdef VLAN_SUPPORT 1748 rx_mode |= set_vlan_mode(np); 1749 #endif /* VLAN_SUPPORT */ 1750 1751 if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */ 1752 rx_mode |= AcceptAll; 1753 } else if ((netdev_mc_count(dev) > multicast_filter_limit) || 1754 (dev->flags & IFF_ALLMULTI)) { 1755 /* Too many to match, or accept all multicasts. */ 1756 rx_mode |= AcceptBroadcast|AcceptAllMulticast|PerfectFilter; 1757 } else if (netdev_mc_count(dev) <= 14) { 1758 /* Use the 16 element perfect filter, skip first two entries. */ 1759 void __iomem *filter_addr = ioaddr + PerfFilterTable + 2 * 16; 1760 __be16 *eaddrs; 1761 netdev_for_each_mc_addr(ha, dev) { 1762 eaddrs = (__be16 *) ha->addr; 1763 writew(be16_to_cpu(eaddrs[2]), filter_addr); filter_addr += 4; 1764 writew(be16_to_cpu(eaddrs[1]), filter_addr); filter_addr += 4; 1765 writew(be16_to_cpu(eaddrs[0]), filter_addr); filter_addr += 8; 1766 } 1767 eaddrs = (__be16 *)dev->dev_addr; 1768 i = netdev_mc_count(dev) + 2; 1769 while (i++ < 16) { 1770 writew(be16_to_cpu(eaddrs[0]), filter_addr); filter_addr += 4; 1771 writew(be16_to_cpu(eaddrs[1]), filter_addr); filter_addr += 4; 1772 writew(be16_to_cpu(eaddrs[2]), filter_addr); filter_addr += 8; 1773 } 1774 rx_mode |= AcceptBroadcast|PerfectFilter; 1775 } else { 1776 /* Must use a multicast hash table. */ 1777 void __iomem *filter_addr; 1778 __be16 *eaddrs; 1779 __le16 mc_filter[32] __attribute__ ((aligned(sizeof(long)))); /* Multicast hash filter */ 1780 1781 memset(mc_filter, 0, sizeof(mc_filter)); 1782 netdev_for_each_mc_addr(ha, dev) { 1783 /* The chip uses the upper 9 CRC bits 1784 as index into the hash table */ 1785 int bit_nr = ether_crc_le(ETH_ALEN, ha->addr) >> 23; 1786 __le32 *fptr = (__le32 *) &mc_filter[(bit_nr >> 4) & ~1]; 1787 1788 *fptr |= cpu_to_le32(1 << (bit_nr & 31)); 1789 } 1790 /* Clear the perfect filter list, skip first two entries. */ 1791 filter_addr = ioaddr + PerfFilterTable + 2 * 16; 1792 eaddrs = (__be16 *)dev->dev_addr; 1793 for (i = 2; i < 16; i++) { 1794 writew(be16_to_cpu(eaddrs[0]), filter_addr); filter_addr += 4; 1795 writew(be16_to_cpu(eaddrs[1]), filter_addr); filter_addr += 4; 1796 writew(be16_to_cpu(eaddrs[2]), filter_addr); filter_addr += 8; 1797 } 1798 for (filter_addr = ioaddr + HashTable, i = 0; i < 32; filter_addr+= 16, i++) 1799 writew(mc_filter[i], filter_addr); 1800 rx_mode |= AcceptBroadcast|PerfectFilter|HashFilter; 1801 } 1802 writel(rx_mode, ioaddr + RxFilterMode); 1803 } 1804 1805 static int check_if_running(struct net_device *dev) 1806 { 1807 if (!netif_running(dev)) 1808 return -EINVAL; 1809 return 0; 1810 } 1811 1812 static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) 1813 { 1814 struct netdev_private *np = netdev_priv(dev); 1815 strlcpy(info->driver, DRV_NAME, sizeof(info->driver)); 1816 strlcpy(info->version, DRV_VERSION, sizeof(info->version)); 1817 strlcpy(info->bus_info, pci_name(np->pci_dev), sizeof(info->bus_info)); 1818 } 1819 1820 static int get_link_ksettings(struct net_device *dev, 1821 struct ethtool_link_ksettings *cmd) 1822 { 1823 struct netdev_private *np = netdev_priv(dev); 1824 spin_lock_irq(&np->lock); 1825 mii_ethtool_get_link_ksettings(&np->mii_if, cmd); 1826 spin_unlock_irq(&np->lock); 1827 return 0; 1828 } 1829 1830 static int set_link_ksettings(struct net_device *dev, 1831 const struct ethtool_link_ksettings *cmd) 1832 { 1833 struct netdev_private *np = netdev_priv(dev); 1834 int res; 1835 spin_lock_irq(&np->lock); 1836 res = mii_ethtool_set_link_ksettings(&np->mii_if, cmd); 1837 spin_unlock_irq(&np->lock); 1838 check_duplex(dev); 1839 return res; 1840 } 1841 1842 static int nway_reset(struct net_device *dev) 1843 { 1844 struct netdev_private *np = netdev_priv(dev); 1845 return mii_nway_restart(&np->mii_if); 1846 } 1847 1848 static u32 get_link(struct net_device *dev) 1849 { 1850 struct netdev_private *np = netdev_priv(dev); 1851 return mii_link_ok(&np->mii_if); 1852 } 1853 1854 static u32 get_msglevel(struct net_device *dev) 1855 { 1856 return debug; 1857 } 1858 1859 static void set_msglevel(struct net_device *dev, u32 val) 1860 { 1861 debug = val; 1862 } 1863 1864 static const struct ethtool_ops ethtool_ops = { 1865 .begin = check_if_running, 1866 .get_drvinfo = get_drvinfo, 1867 .nway_reset = nway_reset, 1868 .get_link = get_link, 1869 .get_msglevel = get_msglevel, 1870 .set_msglevel = set_msglevel, 1871 .get_link_ksettings = get_link_ksettings, 1872 .set_link_ksettings = set_link_ksettings, 1873 }; 1874 1875 static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) 1876 { 1877 struct netdev_private *np = netdev_priv(dev); 1878 struct mii_ioctl_data *data = if_mii(rq); 1879 int rc; 1880 1881 if (!netif_running(dev)) 1882 return -EINVAL; 1883 1884 spin_lock_irq(&np->lock); 1885 rc = generic_mii_ioctl(&np->mii_if, data, cmd, NULL); 1886 spin_unlock_irq(&np->lock); 1887 1888 if ((cmd == SIOCSMIIREG) && (data->phy_id == np->phys[0])) 1889 check_duplex(dev); 1890 1891 return rc; 1892 } 1893 1894 static int netdev_close(struct net_device *dev) 1895 { 1896 struct netdev_private *np = netdev_priv(dev); 1897 void __iomem *ioaddr = np->base; 1898 int i; 1899 1900 netif_stop_queue(dev); 1901 1902 napi_disable(&np->napi); 1903 1904 if (debug > 1) { 1905 printk(KERN_DEBUG "%s: Shutting down ethercard, Intr status %#8.8x.\n", 1906 dev->name, (int) readl(ioaddr + IntrStatus)); 1907 printk(KERN_DEBUG "%s: Queue pointers were Tx %d / %d, Rx %d / %d.\n", 1908 dev->name, np->cur_tx, np->dirty_tx, 1909 np->cur_rx, np->dirty_rx); 1910 } 1911 1912 /* Disable interrupts by clearing the interrupt mask. */ 1913 writel(0, ioaddr + IntrEnable); 1914 1915 /* Stop the chip's Tx and Rx processes. */ 1916 writel(0, ioaddr + GenCtrl); 1917 readl(ioaddr + GenCtrl); 1918 1919 if (debug > 5) { 1920 printk(KERN_DEBUG" Tx ring at %#llx:\n", 1921 (long long) np->tx_ring_dma); 1922 for (i = 0; i < 8 /* TX_RING_SIZE is huge! */; i++) 1923 printk(KERN_DEBUG " #%d desc. %#8.8x %#llx -> %#8.8x.\n", 1924 i, le32_to_cpu(np->tx_ring[i].status), 1925 (long long) dma_to_cpu(np->tx_ring[i].addr), 1926 le32_to_cpu(np->tx_done_q[i].status)); 1927 printk(KERN_DEBUG " Rx ring at %#llx -> %p:\n", 1928 (long long) np->rx_ring_dma, np->rx_done_q); 1929 if (np->rx_done_q) 1930 for (i = 0; i < 8 /* RX_RING_SIZE */; i++) { 1931 printk(KERN_DEBUG " #%d desc. %#llx -> %#8.8x\n", 1932 i, (long long) dma_to_cpu(np->rx_ring[i].rxaddr), le32_to_cpu(np->rx_done_q[i].status)); 1933 } 1934 } 1935 1936 free_irq(np->pci_dev->irq, dev); 1937 1938 /* Free all the skbuffs in the Rx queue. */ 1939 for (i = 0; i < RX_RING_SIZE; i++) { 1940 np->rx_ring[i].rxaddr = cpu_to_dma(0xBADF00D0); /* An invalid address. */ 1941 if (np->rx_info[i].skb != NULL) { 1942 pci_unmap_single(np->pci_dev, np->rx_info[i].mapping, np->rx_buf_sz, PCI_DMA_FROMDEVICE); 1943 dev_kfree_skb(np->rx_info[i].skb); 1944 } 1945 np->rx_info[i].skb = NULL; 1946 np->rx_info[i].mapping = 0; 1947 } 1948 for (i = 0; i < TX_RING_SIZE; i++) { 1949 struct sk_buff *skb = np->tx_info[i].skb; 1950 if (skb == NULL) 1951 continue; 1952 pci_unmap_single(np->pci_dev, 1953 np->tx_info[i].mapping, 1954 skb_first_frag_len(skb), PCI_DMA_TODEVICE); 1955 np->tx_info[i].mapping = 0; 1956 dev_kfree_skb(skb); 1957 np->tx_info[i].skb = NULL; 1958 } 1959 1960 return 0; 1961 } 1962 1963 #ifdef CONFIG_PM 1964 static int starfire_suspend(struct pci_dev *pdev, pm_message_t state) 1965 { 1966 struct net_device *dev = pci_get_drvdata(pdev); 1967 1968 if (netif_running(dev)) { 1969 netif_device_detach(dev); 1970 netdev_close(dev); 1971 } 1972 1973 pci_save_state(pdev); 1974 pci_set_power_state(pdev, pci_choose_state(pdev,state)); 1975 1976 return 0; 1977 } 1978 1979 static int starfire_resume(struct pci_dev *pdev) 1980 { 1981 struct net_device *dev = pci_get_drvdata(pdev); 1982 1983 pci_set_power_state(pdev, PCI_D0); 1984 pci_restore_state(pdev); 1985 1986 if (netif_running(dev)) { 1987 netdev_open(dev); 1988 netif_device_attach(dev); 1989 } 1990 1991 return 0; 1992 } 1993 #endif /* CONFIG_PM */ 1994 1995 1996 static void starfire_remove_one(struct pci_dev *pdev) 1997 { 1998 struct net_device *dev = pci_get_drvdata(pdev); 1999 struct netdev_private *np = netdev_priv(dev); 2000 2001 BUG_ON(!dev); 2002 2003 unregister_netdev(dev); 2004 2005 if (np->queue_mem) 2006 pci_free_consistent(pdev, np->queue_mem_size, np->queue_mem, np->queue_mem_dma); 2007 2008 2009 /* XXX: add wakeup code -- requires firmware for MagicPacket */ 2010 pci_set_power_state(pdev, PCI_D3hot); /* go to sleep in D3 mode */ 2011 pci_disable_device(pdev); 2012 2013 iounmap(np->base); 2014 pci_release_regions(pdev); 2015 2016 free_netdev(dev); /* Will also free np!! */ 2017 } 2018 2019 2020 static struct pci_driver starfire_driver = { 2021 .name = DRV_NAME, 2022 .probe = starfire_init_one, 2023 .remove = starfire_remove_one, 2024 #ifdef CONFIG_PM 2025 .suspend = starfire_suspend, 2026 .resume = starfire_resume, 2027 #endif /* CONFIG_PM */ 2028 .id_table = starfire_pci_tbl, 2029 }; 2030 2031 2032 static int __init starfire_init (void) 2033 { 2034 /* when a module, this is printed whether or not devices are found in probe */ 2035 #ifdef MODULE 2036 printk(version); 2037 2038 printk(KERN_INFO DRV_NAME ": polling (NAPI) enabled\n"); 2039 #endif 2040 2041 BUILD_BUG_ON(sizeof(dma_addr_t) != sizeof(netdrv_addr_t)); 2042 2043 return pci_register_driver(&starfire_driver); 2044 } 2045 2046 2047 static void __exit starfire_cleanup (void) 2048 { 2049 pci_unregister_driver (&starfire_driver); 2050 } 2051 2052 2053 module_init(starfire_init); 2054 module_exit(starfire_cleanup); 2055 2056 2057 /* 2058 * Local variables: 2059 * c-basic-offset: 8 2060 * tab-width: 8 2061 * End: 2062 */ 2063 2064 2065 2066 2067 2068 /* LDV_COMMENT_BEGIN_MAIN */ 2069 #ifdef LDV_MAIN0_sequence_infinite_withcheck_stateful 2070 2071 /*###########################################################################*/ 2072 2073 /*############## Driver Environment Generator 0.2 output ####################*/ 2074 2075 /*###########################################################################*/ 2076 2077 2078 2079 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test if all kernel resources are correctly released by driver before driver will be unloaded. */ 2080 void ldv_check_final_state(void); 2081 2082 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test correct return result. */ 2083 void ldv_check_return_value(int res); 2084 2085 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test correct return result of probe() function. */ 2086 void ldv_check_return_value_probe(int res); 2087 2088 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Initializes the model. */ 2089 void ldv_initialize(void); 2090 2091 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Reinitializes the model between distinct model function calls. */ 2092 void ldv_handler_precall(void); 2093 2094 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Returns arbitrary interger value. */ 2095 int nondet_int(void); 2096 2097 /* LDV_COMMENT_VAR_DECLARE_LDV Special variable for LDV verifier. */ 2098 int LDV_IN_INTERRUPT; 2099 2100 /* LDV_COMMENT_FUNCTION_MAIN Main function for LDV verifier. */ 2101 void ldv_main0_sequence_infinite_withcheck_stateful(void) { 2102 2103 2104 2105 /* LDV_COMMENT_BEGIN_VARIABLE_DECLARATION_PART */ 2106 /*============================= VARIABLE DECLARATION PART =============================*/ 2107 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 2108 /* content: static int netdev_open(struct net_device *dev)*/ 2109 /* LDV_COMMENT_BEGIN_PREP */ 2110 #define DRV_NAME "starfire" 2111 #define DRV_VERSION "2.1" 2112 #define DRV_RELDATE "July 6, 2008" 2113 #define HAS_BROKEN_FIRMWARE 2114 #ifdef HAS_BROKEN_FIRMWARE 2115 #define PADDING_MASK 3 2116 #endif 2117 #define ZEROCOPY 2118 #if IS_ENABLED(CONFIG_VLAN_8021Q) 2119 #define VLAN_SUPPORT 2120 #endif 2121 #define PKT_BUF_SZ 1536 2122 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 2123 #else 2124 #endif 2125 #ifdef __sparc__ 2126 #define DMA_BURST_SIZE 64 2127 #else 2128 #define DMA_BURST_SIZE 128 2129 #endif 2130 #define RX_RING_SIZE 256 2131 #define TX_RING_SIZE 32 2132 #define DONE_Q_SIZE 1024 2133 #define QUEUE_ALIGN 256 2134 #if RX_RING_SIZE > 256 2135 #define RX_Q_ENTRIES Rx2048QEntries 2136 #else 2137 #define RX_Q_ENTRIES Rx256QEntries 2138 #endif 2139 #define TX_TIMEOUT (2 * HZ) 2140 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2141 #define ADDR_64BITS 2142 #define netdrv_addr_t __le64 2143 #define cpu_to_dma(x) cpu_to_le64(x) 2144 #define dma_to_cpu(x) le64_to_cpu(x) 2145 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 2146 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 2147 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 2148 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 2149 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 2150 #else 2151 #define netdrv_addr_t __le32 2152 #define cpu_to_dma(x) cpu_to_le32(x) 2153 #define dma_to_cpu(x) le32_to_cpu(x) 2154 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 2155 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 2156 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 2157 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 2158 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 2159 #endif 2160 #define skb_first_frag_len(skb) skb_headlen(skb) 2161 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 2162 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 2163 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 2164 #ifdef VLAN_SUPPORT 2165 #define RxComplType RxComplType3 2166 #else 2167 #define RxComplType RxComplType2 2168 #endif 2169 #ifdef ADDR_64BITS 2170 #define TX_DESC_TYPE TxDescType2 2171 #else 2172 #define TX_DESC_TYPE TxDescType1 2173 #endif 2174 #define TX_DESC_SPACING TxDescSpaceUnlim 2175 #if 0 2176 #endif 2177 #define PHY_CNT 2 2178 #ifdef VLAN_SUPPORT 2179 #endif 2180 #ifdef VLAN_SUPPORT 2181 #endif 2182 #ifdef VLAN_SUPPORT 2183 #endif 2184 #ifndef MODULE 2185 #endif 2186 #ifdef ZEROCOPY 2187 #endif 2188 #ifdef VLAN_SUPPORT 2189 #endif 2190 #ifdef ADDR_64BITS 2191 #endif 2192 #if ! defined(final_version) 2193 #endif 2194 /* LDV_COMMENT_END_PREP */ 2195 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "netdev_open" */ 2196 struct net_device * var_group1; 2197 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "netdev_open" */ 2198 static int res_netdev_open_5; 2199 /* LDV_COMMENT_BEGIN_PREP */ 2200 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 2201 #endif 2202 #ifndef final_version 2203 #endif 2204 #ifdef VLAN_SUPPORT 2205 #endif 2206 #ifdef VLAN_SUPPORT 2207 #endif 2208 #ifdef VLAN_SUPPORT 2209 #endif 2210 #ifdef VLAN_SUPPORT 2211 #endif 2212 #ifdef CONFIG_PM 2213 #endif 2214 #ifdef CONFIG_PM 2215 #endif 2216 #ifdef MODULE 2217 #endif 2218 /* LDV_COMMENT_END_PREP */ 2219 /* content: static int netdev_close(struct net_device *dev)*/ 2220 /* LDV_COMMENT_BEGIN_PREP */ 2221 #define DRV_NAME "starfire" 2222 #define DRV_VERSION "2.1" 2223 #define DRV_RELDATE "July 6, 2008" 2224 #define HAS_BROKEN_FIRMWARE 2225 #ifdef HAS_BROKEN_FIRMWARE 2226 #define PADDING_MASK 3 2227 #endif 2228 #define ZEROCOPY 2229 #if IS_ENABLED(CONFIG_VLAN_8021Q) 2230 #define VLAN_SUPPORT 2231 #endif 2232 #define PKT_BUF_SZ 1536 2233 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 2234 #else 2235 #endif 2236 #ifdef __sparc__ 2237 #define DMA_BURST_SIZE 64 2238 #else 2239 #define DMA_BURST_SIZE 128 2240 #endif 2241 #define RX_RING_SIZE 256 2242 #define TX_RING_SIZE 32 2243 #define DONE_Q_SIZE 1024 2244 #define QUEUE_ALIGN 256 2245 #if RX_RING_SIZE > 256 2246 #define RX_Q_ENTRIES Rx2048QEntries 2247 #else 2248 #define RX_Q_ENTRIES Rx256QEntries 2249 #endif 2250 #define TX_TIMEOUT (2 * HZ) 2251 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2252 #define ADDR_64BITS 2253 #define netdrv_addr_t __le64 2254 #define cpu_to_dma(x) cpu_to_le64(x) 2255 #define dma_to_cpu(x) le64_to_cpu(x) 2256 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 2257 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 2258 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 2259 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 2260 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 2261 #else 2262 #define netdrv_addr_t __le32 2263 #define cpu_to_dma(x) cpu_to_le32(x) 2264 #define dma_to_cpu(x) le32_to_cpu(x) 2265 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 2266 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 2267 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 2268 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 2269 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 2270 #endif 2271 #define skb_first_frag_len(skb) skb_headlen(skb) 2272 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 2273 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 2274 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 2275 #ifdef VLAN_SUPPORT 2276 #define RxComplType RxComplType3 2277 #else 2278 #define RxComplType RxComplType2 2279 #endif 2280 #ifdef ADDR_64BITS 2281 #define TX_DESC_TYPE TxDescType2 2282 #else 2283 #define TX_DESC_TYPE TxDescType1 2284 #endif 2285 #define TX_DESC_SPACING TxDescSpaceUnlim 2286 #if 0 2287 #endif 2288 #define PHY_CNT 2 2289 #ifdef VLAN_SUPPORT 2290 #endif 2291 #ifdef VLAN_SUPPORT 2292 #endif 2293 #ifdef VLAN_SUPPORT 2294 #endif 2295 #ifndef MODULE 2296 #endif 2297 #ifdef ZEROCOPY 2298 #endif 2299 #ifdef VLAN_SUPPORT 2300 #endif 2301 #ifdef ADDR_64BITS 2302 #endif 2303 #if ! defined(final_version) 2304 #endif 2305 #ifdef VLAN_SUPPORT 2306 #endif 2307 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 2308 #endif 2309 #ifndef final_version 2310 #endif 2311 #ifdef VLAN_SUPPORT 2312 #endif 2313 #ifdef VLAN_SUPPORT 2314 #endif 2315 #ifdef VLAN_SUPPORT 2316 #endif 2317 #ifdef VLAN_SUPPORT 2318 #endif 2319 /* LDV_COMMENT_END_PREP */ 2320 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "netdev_close" */ 2321 static int res_netdev_close_28; 2322 /* LDV_COMMENT_BEGIN_PREP */ 2323 #ifdef CONFIG_PM 2324 #endif 2325 #ifdef CONFIG_PM 2326 #endif 2327 #ifdef MODULE 2328 #endif 2329 /* LDV_COMMENT_END_PREP */ 2330 /* content: static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev)*/ 2331 /* LDV_COMMENT_BEGIN_PREP */ 2332 #define DRV_NAME "starfire" 2333 #define DRV_VERSION "2.1" 2334 #define DRV_RELDATE "July 6, 2008" 2335 #define HAS_BROKEN_FIRMWARE 2336 #ifdef HAS_BROKEN_FIRMWARE 2337 #define PADDING_MASK 3 2338 #endif 2339 #define ZEROCOPY 2340 #if IS_ENABLED(CONFIG_VLAN_8021Q) 2341 #define VLAN_SUPPORT 2342 #endif 2343 #define PKT_BUF_SZ 1536 2344 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 2345 #else 2346 #endif 2347 #ifdef __sparc__ 2348 #define DMA_BURST_SIZE 64 2349 #else 2350 #define DMA_BURST_SIZE 128 2351 #endif 2352 #define RX_RING_SIZE 256 2353 #define TX_RING_SIZE 32 2354 #define DONE_Q_SIZE 1024 2355 #define QUEUE_ALIGN 256 2356 #if RX_RING_SIZE > 256 2357 #define RX_Q_ENTRIES Rx2048QEntries 2358 #else 2359 #define RX_Q_ENTRIES Rx256QEntries 2360 #endif 2361 #define TX_TIMEOUT (2 * HZ) 2362 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2363 #define ADDR_64BITS 2364 #define netdrv_addr_t __le64 2365 #define cpu_to_dma(x) cpu_to_le64(x) 2366 #define dma_to_cpu(x) le64_to_cpu(x) 2367 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 2368 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 2369 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 2370 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 2371 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 2372 #else 2373 #define netdrv_addr_t __le32 2374 #define cpu_to_dma(x) cpu_to_le32(x) 2375 #define dma_to_cpu(x) le32_to_cpu(x) 2376 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 2377 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 2378 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 2379 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 2380 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 2381 #endif 2382 #define skb_first_frag_len(skb) skb_headlen(skb) 2383 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 2384 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 2385 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 2386 #ifdef VLAN_SUPPORT 2387 #define RxComplType RxComplType3 2388 #else 2389 #define RxComplType RxComplType2 2390 #endif 2391 #ifdef ADDR_64BITS 2392 #define TX_DESC_TYPE TxDescType2 2393 #else 2394 #define TX_DESC_TYPE TxDescType1 2395 #endif 2396 #define TX_DESC_SPACING TxDescSpaceUnlim 2397 #if 0 2398 #endif 2399 #define PHY_CNT 2 2400 #ifdef VLAN_SUPPORT 2401 #endif 2402 #ifdef VLAN_SUPPORT 2403 #endif 2404 #ifdef VLAN_SUPPORT 2405 #endif 2406 #ifndef MODULE 2407 #endif 2408 #ifdef ZEROCOPY 2409 #endif 2410 #ifdef VLAN_SUPPORT 2411 #endif 2412 #ifdef ADDR_64BITS 2413 #endif 2414 #if ! defined(final_version) 2415 #endif 2416 #ifdef VLAN_SUPPORT 2417 #endif 2418 /* LDV_COMMENT_END_PREP */ 2419 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "start_tx" */ 2420 struct sk_buff * var_group2; 2421 /* LDV_COMMENT_BEGIN_PREP */ 2422 #ifndef final_version 2423 #endif 2424 #ifdef VLAN_SUPPORT 2425 #endif 2426 #ifdef VLAN_SUPPORT 2427 #endif 2428 #ifdef VLAN_SUPPORT 2429 #endif 2430 #ifdef VLAN_SUPPORT 2431 #endif 2432 #ifdef CONFIG_PM 2433 #endif 2434 #ifdef CONFIG_PM 2435 #endif 2436 #ifdef MODULE 2437 #endif 2438 /* LDV_COMMENT_END_PREP */ 2439 /* content: static void tx_timeout(struct net_device *dev)*/ 2440 /* LDV_COMMENT_BEGIN_PREP */ 2441 #define DRV_NAME "starfire" 2442 #define DRV_VERSION "2.1" 2443 #define DRV_RELDATE "July 6, 2008" 2444 #define HAS_BROKEN_FIRMWARE 2445 #ifdef HAS_BROKEN_FIRMWARE 2446 #define PADDING_MASK 3 2447 #endif 2448 #define ZEROCOPY 2449 #if IS_ENABLED(CONFIG_VLAN_8021Q) 2450 #define VLAN_SUPPORT 2451 #endif 2452 #define PKT_BUF_SZ 1536 2453 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 2454 #else 2455 #endif 2456 #ifdef __sparc__ 2457 #define DMA_BURST_SIZE 64 2458 #else 2459 #define DMA_BURST_SIZE 128 2460 #endif 2461 #define RX_RING_SIZE 256 2462 #define TX_RING_SIZE 32 2463 #define DONE_Q_SIZE 1024 2464 #define QUEUE_ALIGN 256 2465 #if RX_RING_SIZE > 256 2466 #define RX_Q_ENTRIES Rx2048QEntries 2467 #else 2468 #define RX_Q_ENTRIES Rx256QEntries 2469 #endif 2470 #define TX_TIMEOUT (2 * HZ) 2471 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2472 #define ADDR_64BITS 2473 #define netdrv_addr_t __le64 2474 #define cpu_to_dma(x) cpu_to_le64(x) 2475 #define dma_to_cpu(x) le64_to_cpu(x) 2476 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 2477 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 2478 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 2479 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 2480 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 2481 #else 2482 #define netdrv_addr_t __le32 2483 #define cpu_to_dma(x) cpu_to_le32(x) 2484 #define dma_to_cpu(x) le32_to_cpu(x) 2485 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 2486 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 2487 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 2488 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 2489 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 2490 #endif 2491 #define skb_first_frag_len(skb) skb_headlen(skb) 2492 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 2493 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 2494 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 2495 #ifdef VLAN_SUPPORT 2496 #define RxComplType RxComplType3 2497 #else 2498 #define RxComplType RxComplType2 2499 #endif 2500 #ifdef ADDR_64BITS 2501 #define TX_DESC_TYPE TxDescType2 2502 #else 2503 #define TX_DESC_TYPE TxDescType1 2504 #endif 2505 #define TX_DESC_SPACING TxDescSpaceUnlim 2506 #if 0 2507 #endif 2508 #define PHY_CNT 2 2509 #ifdef VLAN_SUPPORT 2510 #endif 2511 #ifdef VLAN_SUPPORT 2512 #endif 2513 #ifdef VLAN_SUPPORT 2514 #endif 2515 #ifndef MODULE 2516 #endif 2517 #ifdef ZEROCOPY 2518 #endif 2519 #ifdef VLAN_SUPPORT 2520 #endif 2521 #ifdef ADDR_64BITS 2522 #endif 2523 #if ! defined(final_version) 2524 #endif 2525 #ifdef VLAN_SUPPORT 2526 #endif 2527 /* LDV_COMMENT_END_PREP */ 2528 /* LDV_COMMENT_BEGIN_PREP */ 2529 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 2530 #endif 2531 #ifndef final_version 2532 #endif 2533 #ifdef VLAN_SUPPORT 2534 #endif 2535 #ifdef VLAN_SUPPORT 2536 #endif 2537 #ifdef VLAN_SUPPORT 2538 #endif 2539 #ifdef VLAN_SUPPORT 2540 #endif 2541 #ifdef CONFIG_PM 2542 #endif 2543 #ifdef CONFIG_PM 2544 #endif 2545 #ifdef MODULE 2546 #endif 2547 /* LDV_COMMENT_END_PREP */ 2548 /* content: static struct net_device_stats *get_stats(struct net_device *dev)*/ 2549 /* LDV_COMMENT_BEGIN_PREP */ 2550 #define DRV_NAME "starfire" 2551 #define DRV_VERSION "2.1" 2552 #define DRV_RELDATE "July 6, 2008" 2553 #define HAS_BROKEN_FIRMWARE 2554 #ifdef HAS_BROKEN_FIRMWARE 2555 #define PADDING_MASK 3 2556 #endif 2557 #define ZEROCOPY 2558 #if IS_ENABLED(CONFIG_VLAN_8021Q) 2559 #define VLAN_SUPPORT 2560 #endif 2561 #define PKT_BUF_SZ 1536 2562 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 2563 #else 2564 #endif 2565 #ifdef __sparc__ 2566 #define DMA_BURST_SIZE 64 2567 #else 2568 #define DMA_BURST_SIZE 128 2569 #endif 2570 #define RX_RING_SIZE 256 2571 #define TX_RING_SIZE 32 2572 #define DONE_Q_SIZE 1024 2573 #define QUEUE_ALIGN 256 2574 #if RX_RING_SIZE > 256 2575 #define RX_Q_ENTRIES Rx2048QEntries 2576 #else 2577 #define RX_Q_ENTRIES Rx256QEntries 2578 #endif 2579 #define TX_TIMEOUT (2 * HZ) 2580 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2581 #define ADDR_64BITS 2582 #define netdrv_addr_t __le64 2583 #define cpu_to_dma(x) cpu_to_le64(x) 2584 #define dma_to_cpu(x) le64_to_cpu(x) 2585 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 2586 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 2587 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 2588 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 2589 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 2590 #else 2591 #define netdrv_addr_t __le32 2592 #define cpu_to_dma(x) cpu_to_le32(x) 2593 #define dma_to_cpu(x) le32_to_cpu(x) 2594 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 2595 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 2596 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 2597 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 2598 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 2599 #endif 2600 #define skb_first_frag_len(skb) skb_headlen(skb) 2601 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 2602 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 2603 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 2604 #ifdef VLAN_SUPPORT 2605 #define RxComplType RxComplType3 2606 #else 2607 #define RxComplType RxComplType2 2608 #endif 2609 #ifdef ADDR_64BITS 2610 #define TX_DESC_TYPE TxDescType2 2611 #else 2612 #define TX_DESC_TYPE TxDescType1 2613 #endif 2614 #define TX_DESC_SPACING TxDescSpaceUnlim 2615 #if 0 2616 #endif 2617 #define PHY_CNT 2 2618 #ifdef VLAN_SUPPORT 2619 #endif 2620 #ifdef VLAN_SUPPORT 2621 #endif 2622 #ifdef VLAN_SUPPORT 2623 #endif 2624 #ifndef MODULE 2625 #endif 2626 #ifdef ZEROCOPY 2627 #endif 2628 #ifdef VLAN_SUPPORT 2629 #endif 2630 #ifdef ADDR_64BITS 2631 #endif 2632 #if ! defined(final_version) 2633 #endif 2634 #ifdef VLAN_SUPPORT 2635 #endif 2636 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 2637 #endif 2638 #ifndef final_version 2639 #endif 2640 #ifdef VLAN_SUPPORT 2641 #endif 2642 #ifdef VLAN_SUPPORT 2643 #endif 2644 /* LDV_COMMENT_END_PREP */ 2645 /* LDV_COMMENT_BEGIN_PREP */ 2646 #ifdef VLAN_SUPPORT 2647 #endif 2648 #ifdef VLAN_SUPPORT 2649 #endif 2650 #ifdef CONFIG_PM 2651 #endif 2652 #ifdef CONFIG_PM 2653 #endif 2654 #ifdef MODULE 2655 #endif 2656 /* LDV_COMMENT_END_PREP */ 2657 /* content: static void set_rx_mode(struct net_device *dev)*/ 2658 /* LDV_COMMENT_BEGIN_PREP */ 2659 #define DRV_NAME "starfire" 2660 #define DRV_VERSION "2.1" 2661 #define DRV_RELDATE "July 6, 2008" 2662 #define HAS_BROKEN_FIRMWARE 2663 #ifdef HAS_BROKEN_FIRMWARE 2664 #define PADDING_MASK 3 2665 #endif 2666 #define ZEROCOPY 2667 #if IS_ENABLED(CONFIG_VLAN_8021Q) 2668 #define VLAN_SUPPORT 2669 #endif 2670 #define PKT_BUF_SZ 1536 2671 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 2672 #else 2673 #endif 2674 #ifdef __sparc__ 2675 #define DMA_BURST_SIZE 64 2676 #else 2677 #define DMA_BURST_SIZE 128 2678 #endif 2679 #define RX_RING_SIZE 256 2680 #define TX_RING_SIZE 32 2681 #define DONE_Q_SIZE 1024 2682 #define QUEUE_ALIGN 256 2683 #if RX_RING_SIZE > 256 2684 #define RX_Q_ENTRIES Rx2048QEntries 2685 #else 2686 #define RX_Q_ENTRIES Rx256QEntries 2687 #endif 2688 #define TX_TIMEOUT (2 * HZ) 2689 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2690 #define ADDR_64BITS 2691 #define netdrv_addr_t __le64 2692 #define cpu_to_dma(x) cpu_to_le64(x) 2693 #define dma_to_cpu(x) le64_to_cpu(x) 2694 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 2695 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 2696 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 2697 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 2698 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 2699 #else 2700 #define netdrv_addr_t __le32 2701 #define cpu_to_dma(x) cpu_to_le32(x) 2702 #define dma_to_cpu(x) le32_to_cpu(x) 2703 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 2704 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 2705 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 2706 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 2707 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 2708 #endif 2709 #define skb_first_frag_len(skb) skb_headlen(skb) 2710 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 2711 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 2712 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 2713 #ifdef VLAN_SUPPORT 2714 #define RxComplType RxComplType3 2715 #else 2716 #define RxComplType RxComplType2 2717 #endif 2718 #ifdef ADDR_64BITS 2719 #define TX_DESC_TYPE TxDescType2 2720 #else 2721 #define TX_DESC_TYPE TxDescType1 2722 #endif 2723 #define TX_DESC_SPACING TxDescSpaceUnlim 2724 #if 0 2725 #endif 2726 #define PHY_CNT 2 2727 #ifdef VLAN_SUPPORT 2728 #endif 2729 #ifdef VLAN_SUPPORT 2730 #endif 2731 #ifdef VLAN_SUPPORT 2732 #endif 2733 #ifndef MODULE 2734 #endif 2735 #ifdef ZEROCOPY 2736 #endif 2737 #ifdef VLAN_SUPPORT 2738 #endif 2739 #ifdef ADDR_64BITS 2740 #endif 2741 #if ! defined(final_version) 2742 #endif 2743 #ifdef VLAN_SUPPORT 2744 #endif 2745 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 2746 #endif 2747 #ifndef final_version 2748 #endif 2749 #ifdef VLAN_SUPPORT 2750 #endif 2751 #ifdef VLAN_SUPPORT 2752 #endif 2753 #ifdef VLAN_SUPPORT 2754 #endif 2755 /* LDV_COMMENT_END_PREP */ 2756 /* LDV_COMMENT_BEGIN_PREP */ 2757 #ifdef CONFIG_PM 2758 #endif 2759 #ifdef CONFIG_PM 2760 #endif 2761 #ifdef MODULE 2762 #endif 2763 /* LDV_COMMENT_END_PREP */ 2764 /* content: static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)*/ 2765 /* LDV_COMMENT_BEGIN_PREP */ 2766 #define DRV_NAME "starfire" 2767 #define DRV_VERSION "2.1" 2768 #define DRV_RELDATE "July 6, 2008" 2769 #define HAS_BROKEN_FIRMWARE 2770 #ifdef HAS_BROKEN_FIRMWARE 2771 #define PADDING_MASK 3 2772 #endif 2773 #define ZEROCOPY 2774 #if IS_ENABLED(CONFIG_VLAN_8021Q) 2775 #define VLAN_SUPPORT 2776 #endif 2777 #define PKT_BUF_SZ 1536 2778 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 2779 #else 2780 #endif 2781 #ifdef __sparc__ 2782 #define DMA_BURST_SIZE 64 2783 #else 2784 #define DMA_BURST_SIZE 128 2785 #endif 2786 #define RX_RING_SIZE 256 2787 #define TX_RING_SIZE 32 2788 #define DONE_Q_SIZE 1024 2789 #define QUEUE_ALIGN 256 2790 #if RX_RING_SIZE > 256 2791 #define RX_Q_ENTRIES Rx2048QEntries 2792 #else 2793 #define RX_Q_ENTRIES Rx256QEntries 2794 #endif 2795 #define TX_TIMEOUT (2 * HZ) 2796 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2797 #define ADDR_64BITS 2798 #define netdrv_addr_t __le64 2799 #define cpu_to_dma(x) cpu_to_le64(x) 2800 #define dma_to_cpu(x) le64_to_cpu(x) 2801 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 2802 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 2803 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 2804 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 2805 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 2806 #else 2807 #define netdrv_addr_t __le32 2808 #define cpu_to_dma(x) cpu_to_le32(x) 2809 #define dma_to_cpu(x) le32_to_cpu(x) 2810 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 2811 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 2812 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 2813 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 2814 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 2815 #endif 2816 #define skb_first_frag_len(skb) skb_headlen(skb) 2817 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 2818 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 2819 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 2820 #ifdef VLAN_SUPPORT 2821 #define RxComplType RxComplType3 2822 #else 2823 #define RxComplType RxComplType2 2824 #endif 2825 #ifdef ADDR_64BITS 2826 #define TX_DESC_TYPE TxDescType2 2827 #else 2828 #define TX_DESC_TYPE TxDescType1 2829 #endif 2830 #define TX_DESC_SPACING TxDescSpaceUnlim 2831 #if 0 2832 #endif 2833 #define PHY_CNT 2 2834 #ifdef VLAN_SUPPORT 2835 #endif 2836 #ifdef VLAN_SUPPORT 2837 #endif 2838 #ifdef VLAN_SUPPORT 2839 #endif 2840 #ifndef MODULE 2841 #endif 2842 #ifdef ZEROCOPY 2843 #endif 2844 #ifdef VLAN_SUPPORT 2845 #endif 2846 #ifdef ADDR_64BITS 2847 #endif 2848 #if ! defined(final_version) 2849 #endif 2850 #ifdef VLAN_SUPPORT 2851 #endif 2852 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 2853 #endif 2854 #ifndef final_version 2855 #endif 2856 #ifdef VLAN_SUPPORT 2857 #endif 2858 #ifdef VLAN_SUPPORT 2859 #endif 2860 #ifdef VLAN_SUPPORT 2861 #endif 2862 #ifdef VLAN_SUPPORT 2863 #endif 2864 /* LDV_COMMENT_END_PREP */ 2865 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "netdev_ioctl" */ 2866 struct ifreq * var_group3; 2867 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "netdev_ioctl" */ 2868 int var_netdev_ioctl_27_p2; 2869 /* LDV_COMMENT_BEGIN_PREP */ 2870 #ifdef CONFIG_PM 2871 #endif 2872 #ifdef CONFIG_PM 2873 #endif 2874 #ifdef MODULE 2875 #endif 2876 /* LDV_COMMENT_END_PREP */ 2877 /* content: static int netdev_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid)*/ 2878 /* LDV_COMMENT_BEGIN_PREP */ 2879 #define DRV_NAME "starfire" 2880 #define DRV_VERSION "2.1" 2881 #define DRV_RELDATE "July 6, 2008" 2882 #define HAS_BROKEN_FIRMWARE 2883 #ifdef HAS_BROKEN_FIRMWARE 2884 #define PADDING_MASK 3 2885 #endif 2886 #define ZEROCOPY 2887 #if IS_ENABLED(CONFIG_VLAN_8021Q) 2888 #define VLAN_SUPPORT 2889 #endif 2890 #define PKT_BUF_SZ 1536 2891 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 2892 #else 2893 #endif 2894 #ifdef __sparc__ 2895 #define DMA_BURST_SIZE 64 2896 #else 2897 #define DMA_BURST_SIZE 128 2898 #endif 2899 #define RX_RING_SIZE 256 2900 #define TX_RING_SIZE 32 2901 #define DONE_Q_SIZE 1024 2902 #define QUEUE_ALIGN 256 2903 #if RX_RING_SIZE > 256 2904 #define RX_Q_ENTRIES Rx2048QEntries 2905 #else 2906 #define RX_Q_ENTRIES Rx256QEntries 2907 #endif 2908 #define TX_TIMEOUT (2 * HZ) 2909 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2910 #define ADDR_64BITS 2911 #define netdrv_addr_t __le64 2912 #define cpu_to_dma(x) cpu_to_le64(x) 2913 #define dma_to_cpu(x) le64_to_cpu(x) 2914 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 2915 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 2916 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 2917 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 2918 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 2919 #else 2920 #define netdrv_addr_t __le32 2921 #define cpu_to_dma(x) cpu_to_le32(x) 2922 #define dma_to_cpu(x) le32_to_cpu(x) 2923 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 2924 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 2925 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 2926 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 2927 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 2928 #endif 2929 #define skb_first_frag_len(skb) skb_headlen(skb) 2930 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 2931 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 2932 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 2933 #ifdef VLAN_SUPPORT 2934 #define RxComplType RxComplType3 2935 #else 2936 #define RxComplType RxComplType2 2937 #endif 2938 #ifdef ADDR_64BITS 2939 #define TX_DESC_TYPE TxDescType2 2940 #else 2941 #define TX_DESC_TYPE TxDescType1 2942 #endif 2943 #define TX_DESC_SPACING TxDescSpaceUnlim 2944 #if 0 2945 #endif 2946 #define PHY_CNT 2 2947 #ifdef VLAN_SUPPORT 2948 #endif 2949 #ifdef VLAN_SUPPORT 2950 /* LDV_COMMENT_END_PREP */ 2951 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "netdev_vlan_rx_add_vid" */ 2952 __be16 var_netdev_vlan_rx_add_vid_0_p1; 2953 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "netdev_vlan_rx_add_vid" */ 2954 u16 var_netdev_vlan_rx_add_vid_0_p2; 2955 /* LDV_COMMENT_BEGIN_PREP */ 2956 #endif 2957 #ifdef VLAN_SUPPORT 2958 #endif 2959 #ifndef MODULE 2960 #endif 2961 #ifdef ZEROCOPY 2962 #endif 2963 #ifdef VLAN_SUPPORT 2964 #endif 2965 #ifdef ADDR_64BITS 2966 #endif 2967 #if ! defined(final_version) 2968 #endif 2969 #ifdef VLAN_SUPPORT 2970 #endif 2971 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 2972 #endif 2973 #ifndef final_version 2974 #endif 2975 #ifdef VLAN_SUPPORT 2976 #endif 2977 #ifdef VLAN_SUPPORT 2978 #endif 2979 #ifdef VLAN_SUPPORT 2980 #endif 2981 #ifdef VLAN_SUPPORT 2982 #endif 2983 #ifdef CONFIG_PM 2984 #endif 2985 #ifdef CONFIG_PM 2986 #endif 2987 #ifdef MODULE 2988 #endif 2989 /* LDV_COMMENT_END_PREP */ 2990 /* content: static int netdev_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, u16 vid)*/ 2991 /* LDV_COMMENT_BEGIN_PREP */ 2992 #define DRV_NAME "starfire" 2993 #define DRV_VERSION "2.1" 2994 #define DRV_RELDATE "July 6, 2008" 2995 #define HAS_BROKEN_FIRMWARE 2996 #ifdef HAS_BROKEN_FIRMWARE 2997 #define PADDING_MASK 3 2998 #endif 2999 #define ZEROCOPY 3000 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3001 #define VLAN_SUPPORT 3002 #endif 3003 #define PKT_BUF_SZ 1536 3004 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3005 #else 3006 #endif 3007 #ifdef __sparc__ 3008 #define DMA_BURST_SIZE 64 3009 #else 3010 #define DMA_BURST_SIZE 128 3011 #endif 3012 #define RX_RING_SIZE 256 3013 #define TX_RING_SIZE 32 3014 #define DONE_Q_SIZE 1024 3015 #define QUEUE_ALIGN 256 3016 #if RX_RING_SIZE > 256 3017 #define RX_Q_ENTRIES Rx2048QEntries 3018 #else 3019 #define RX_Q_ENTRIES Rx256QEntries 3020 #endif 3021 #define TX_TIMEOUT (2 * HZ) 3022 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3023 #define ADDR_64BITS 3024 #define netdrv_addr_t __le64 3025 #define cpu_to_dma(x) cpu_to_le64(x) 3026 #define dma_to_cpu(x) le64_to_cpu(x) 3027 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3028 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3029 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3030 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3031 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3032 #else 3033 #define netdrv_addr_t __le32 3034 #define cpu_to_dma(x) cpu_to_le32(x) 3035 #define dma_to_cpu(x) le32_to_cpu(x) 3036 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3037 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3038 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3039 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3040 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3041 #endif 3042 #define skb_first_frag_len(skb) skb_headlen(skb) 3043 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3044 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3045 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3046 #ifdef VLAN_SUPPORT 3047 #define RxComplType RxComplType3 3048 #else 3049 #define RxComplType RxComplType2 3050 #endif 3051 #ifdef ADDR_64BITS 3052 #define TX_DESC_TYPE TxDescType2 3053 #else 3054 #define TX_DESC_TYPE TxDescType1 3055 #endif 3056 #define TX_DESC_SPACING TxDescSpaceUnlim 3057 #if 0 3058 #endif 3059 #define PHY_CNT 2 3060 #ifdef VLAN_SUPPORT 3061 #endif 3062 #ifdef VLAN_SUPPORT 3063 /* LDV_COMMENT_END_PREP */ 3064 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "netdev_vlan_rx_kill_vid" */ 3065 __be16 var_netdev_vlan_rx_kill_vid_1_p1; 3066 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "netdev_vlan_rx_kill_vid" */ 3067 u16 var_netdev_vlan_rx_kill_vid_1_p2; 3068 /* LDV_COMMENT_BEGIN_PREP */ 3069 #endif 3070 #ifdef VLAN_SUPPORT 3071 #endif 3072 #ifndef MODULE 3073 #endif 3074 #ifdef ZEROCOPY 3075 #endif 3076 #ifdef VLAN_SUPPORT 3077 #endif 3078 #ifdef ADDR_64BITS 3079 #endif 3080 #if ! defined(final_version) 3081 #endif 3082 #ifdef VLAN_SUPPORT 3083 #endif 3084 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3085 #endif 3086 #ifndef final_version 3087 #endif 3088 #ifdef VLAN_SUPPORT 3089 #endif 3090 #ifdef VLAN_SUPPORT 3091 #endif 3092 #ifdef VLAN_SUPPORT 3093 #endif 3094 #ifdef VLAN_SUPPORT 3095 #endif 3096 #ifdef CONFIG_PM 3097 #endif 3098 #ifdef CONFIG_PM 3099 #endif 3100 #ifdef MODULE 3101 #endif 3102 /* LDV_COMMENT_END_PREP */ 3103 3104 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 3105 /* content: static int check_if_running(struct net_device *dev)*/ 3106 /* LDV_COMMENT_BEGIN_PREP */ 3107 #define DRV_NAME "starfire" 3108 #define DRV_VERSION "2.1" 3109 #define DRV_RELDATE "July 6, 2008" 3110 #define HAS_BROKEN_FIRMWARE 3111 #ifdef HAS_BROKEN_FIRMWARE 3112 #define PADDING_MASK 3 3113 #endif 3114 #define ZEROCOPY 3115 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3116 #define VLAN_SUPPORT 3117 #endif 3118 #define PKT_BUF_SZ 1536 3119 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3120 #else 3121 #endif 3122 #ifdef __sparc__ 3123 #define DMA_BURST_SIZE 64 3124 #else 3125 #define DMA_BURST_SIZE 128 3126 #endif 3127 #define RX_RING_SIZE 256 3128 #define TX_RING_SIZE 32 3129 #define DONE_Q_SIZE 1024 3130 #define QUEUE_ALIGN 256 3131 #if RX_RING_SIZE > 256 3132 #define RX_Q_ENTRIES Rx2048QEntries 3133 #else 3134 #define RX_Q_ENTRIES Rx256QEntries 3135 #endif 3136 #define TX_TIMEOUT (2 * HZ) 3137 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3138 #define ADDR_64BITS 3139 #define netdrv_addr_t __le64 3140 #define cpu_to_dma(x) cpu_to_le64(x) 3141 #define dma_to_cpu(x) le64_to_cpu(x) 3142 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3143 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3144 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3145 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3146 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3147 #else 3148 #define netdrv_addr_t __le32 3149 #define cpu_to_dma(x) cpu_to_le32(x) 3150 #define dma_to_cpu(x) le32_to_cpu(x) 3151 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3152 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3153 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3154 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3155 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3156 #endif 3157 #define skb_first_frag_len(skb) skb_headlen(skb) 3158 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3159 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3160 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3161 #ifdef VLAN_SUPPORT 3162 #define RxComplType RxComplType3 3163 #else 3164 #define RxComplType RxComplType2 3165 #endif 3166 #ifdef ADDR_64BITS 3167 #define TX_DESC_TYPE TxDescType2 3168 #else 3169 #define TX_DESC_TYPE TxDescType1 3170 #endif 3171 #define TX_DESC_SPACING TxDescSpaceUnlim 3172 #if 0 3173 #endif 3174 #define PHY_CNT 2 3175 #ifdef VLAN_SUPPORT 3176 #endif 3177 #ifdef VLAN_SUPPORT 3178 #endif 3179 #ifdef VLAN_SUPPORT 3180 #endif 3181 #ifndef MODULE 3182 #endif 3183 #ifdef ZEROCOPY 3184 #endif 3185 #ifdef VLAN_SUPPORT 3186 #endif 3187 #ifdef ADDR_64BITS 3188 #endif 3189 #if ! defined(final_version) 3190 #endif 3191 #ifdef VLAN_SUPPORT 3192 #endif 3193 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3194 #endif 3195 #ifndef final_version 3196 #endif 3197 #ifdef VLAN_SUPPORT 3198 #endif 3199 #ifdef VLAN_SUPPORT 3200 #endif 3201 #ifdef VLAN_SUPPORT 3202 #endif 3203 #ifdef VLAN_SUPPORT 3204 #endif 3205 /* LDV_COMMENT_END_PREP */ 3206 /* LDV_COMMENT_BEGIN_PREP */ 3207 #ifdef CONFIG_PM 3208 #endif 3209 #ifdef CONFIG_PM 3210 #endif 3211 #ifdef MODULE 3212 #endif 3213 /* LDV_COMMENT_END_PREP */ 3214 /* content: static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)*/ 3215 /* LDV_COMMENT_BEGIN_PREP */ 3216 #define DRV_NAME "starfire" 3217 #define DRV_VERSION "2.1" 3218 #define DRV_RELDATE "July 6, 2008" 3219 #define HAS_BROKEN_FIRMWARE 3220 #ifdef HAS_BROKEN_FIRMWARE 3221 #define PADDING_MASK 3 3222 #endif 3223 #define ZEROCOPY 3224 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3225 #define VLAN_SUPPORT 3226 #endif 3227 #define PKT_BUF_SZ 1536 3228 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3229 #else 3230 #endif 3231 #ifdef __sparc__ 3232 #define DMA_BURST_SIZE 64 3233 #else 3234 #define DMA_BURST_SIZE 128 3235 #endif 3236 #define RX_RING_SIZE 256 3237 #define TX_RING_SIZE 32 3238 #define DONE_Q_SIZE 1024 3239 #define QUEUE_ALIGN 256 3240 #if RX_RING_SIZE > 256 3241 #define RX_Q_ENTRIES Rx2048QEntries 3242 #else 3243 #define RX_Q_ENTRIES Rx256QEntries 3244 #endif 3245 #define TX_TIMEOUT (2 * HZ) 3246 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3247 #define ADDR_64BITS 3248 #define netdrv_addr_t __le64 3249 #define cpu_to_dma(x) cpu_to_le64(x) 3250 #define dma_to_cpu(x) le64_to_cpu(x) 3251 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3252 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3253 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3254 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3255 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3256 #else 3257 #define netdrv_addr_t __le32 3258 #define cpu_to_dma(x) cpu_to_le32(x) 3259 #define dma_to_cpu(x) le32_to_cpu(x) 3260 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3261 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3262 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3263 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3264 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3265 #endif 3266 #define skb_first_frag_len(skb) skb_headlen(skb) 3267 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3268 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3269 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3270 #ifdef VLAN_SUPPORT 3271 #define RxComplType RxComplType3 3272 #else 3273 #define RxComplType RxComplType2 3274 #endif 3275 #ifdef ADDR_64BITS 3276 #define TX_DESC_TYPE TxDescType2 3277 #else 3278 #define TX_DESC_TYPE TxDescType1 3279 #endif 3280 #define TX_DESC_SPACING TxDescSpaceUnlim 3281 #if 0 3282 #endif 3283 #define PHY_CNT 2 3284 #ifdef VLAN_SUPPORT 3285 #endif 3286 #ifdef VLAN_SUPPORT 3287 #endif 3288 #ifdef VLAN_SUPPORT 3289 #endif 3290 #ifndef MODULE 3291 #endif 3292 #ifdef ZEROCOPY 3293 #endif 3294 #ifdef VLAN_SUPPORT 3295 #endif 3296 #ifdef ADDR_64BITS 3297 #endif 3298 #if ! defined(final_version) 3299 #endif 3300 #ifdef VLAN_SUPPORT 3301 #endif 3302 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3303 #endif 3304 #ifndef final_version 3305 #endif 3306 #ifdef VLAN_SUPPORT 3307 #endif 3308 #ifdef VLAN_SUPPORT 3309 #endif 3310 #ifdef VLAN_SUPPORT 3311 #endif 3312 #ifdef VLAN_SUPPORT 3313 #endif 3314 /* LDV_COMMENT_END_PREP */ 3315 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "get_drvinfo" */ 3316 struct ethtool_drvinfo * var_group4; 3317 /* LDV_COMMENT_BEGIN_PREP */ 3318 #ifdef CONFIG_PM 3319 #endif 3320 #ifdef CONFIG_PM 3321 #endif 3322 #ifdef MODULE 3323 #endif 3324 /* LDV_COMMENT_END_PREP */ 3325 /* content: static int nway_reset(struct net_device *dev)*/ 3326 /* LDV_COMMENT_BEGIN_PREP */ 3327 #define DRV_NAME "starfire" 3328 #define DRV_VERSION "2.1" 3329 #define DRV_RELDATE "July 6, 2008" 3330 #define HAS_BROKEN_FIRMWARE 3331 #ifdef HAS_BROKEN_FIRMWARE 3332 #define PADDING_MASK 3 3333 #endif 3334 #define ZEROCOPY 3335 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3336 #define VLAN_SUPPORT 3337 #endif 3338 #define PKT_BUF_SZ 1536 3339 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3340 #else 3341 #endif 3342 #ifdef __sparc__ 3343 #define DMA_BURST_SIZE 64 3344 #else 3345 #define DMA_BURST_SIZE 128 3346 #endif 3347 #define RX_RING_SIZE 256 3348 #define TX_RING_SIZE 32 3349 #define DONE_Q_SIZE 1024 3350 #define QUEUE_ALIGN 256 3351 #if RX_RING_SIZE > 256 3352 #define RX_Q_ENTRIES Rx2048QEntries 3353 #else 3354 #define RX_Q_ENTRIES Rx256QEntries 3355 #endif 3356 #define TX_TIMEOUT (2 * HZ) 3357 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3358 #define ADDR_64BITS 3359 #define netdrv_addr_t __le64 3360 #define cpu_to_dma(x) cpu_to_le64(x) 3361 #define dma_to_cpu(x) le64_to_cpu(x) 3362 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3363 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3364 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3365 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3366 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3367 #else 3368 #define netdrv_addr_t __le32 3369 #define cpu_to_dma(x) cpu_to_le32(x) 3370 #define dma_to_cpu(x) le32_to_cpu(x) 3371 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3372 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3373 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3374 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3375 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3376 #endif 3377 #define skb_first_frag_len(skb) skb_headlen(skb) 3378 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3379 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3380 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3381 #ifdef VLAN_SUPPORT 3382 #define RxComplType RxComplType3 3383 #else 3384 #define RxComplType RxComplType2 3385 #endif 3386 #ifdef ADDR_64BITS 3387 #define TX_DESC_TYPE TxDescType2 3388 #else 3389 #define TX_DESC_TYPE TxDescType1 3390 #endif 3391 #define TX_DESC_SPACING TxDescSpaceUnlim 3392 #if 0 3393 #endif 3394 #define PHY_CNT 2 3395 #ifdef VLAN_SUPPORT 3396 #endif 3397 #ifdef VLAN_SUPPORT 3398 #endif 3399 #ifdef VLAN_SUPPORT 3400 #endif 3401 #ifndef MODULE 3402 #endif 3403 #ifdef ZEROCOPY 3404 #endif 3405 #ifdef VLAN_SUPPORT 3406 #endif 3407 #ifdef ADDR_64BITS 3408 #endif 3409 #if ! defined(final_version) 3410 #endif 3411 #ifdef VLAN_SUPPORT 3412 #endif 3413 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3414 #endif 3415 #ifndef final_version 3416 #endif 3417 #ifdef VLAN_SUPPORT 3418 #endif 3419 #ifdef VLAN_SUPPORT 3420 #endif 3421 #ifdef VLAN_SUPPORT 3422 #endif 3423 #ifdef VLAN_SUPPORT 3424 #endif 3425 /* LDV_COMMENT_END_PREP */ 3426 /* LDV_COMMENT_BEGIN_PREP */ 3427 #ifdef CONFIG_PM 3428 #endif 3429 #ifdef CONFIG_PM 3430 #endif 3431 #ifdef MODULE 3432 #endif 3433 /* LDV_COMMENT_END_PREP */ 3434 /* content: static u32 get_link(struct net_device *dev)*/ 3435 /* LDV_COMMENT_BEGIN_PREP */ 3436 #define DRV_NAME "starfire" 3437 #define DRV_VERSION "2.1" 3438 #define DRV_RELDATE "July 6, 2008" 3439 #define HAS_BROKEN_FIRMWARE 3440 #ifdef HAS_BROKEN_FIRMWARE 3441 #define PADDING_MASK 3 3442 #endif 3443 #define ZEROCOPY 3444 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3445 #define VLAN_SUPPORT 3446 #endif 3447 #define PKT_BUF_SZ 1536 3448 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3449 #else 3450 #endif 3451 #ifdef __sparc__ 3452 #define DMA_BURST_SIZE 64 3453 #else 3454 #define DMA_BURST_SIZE 128 3455 #endif 3456 #define RX_RING_SIZE 256 3457 #define TX_RING_SIZE 32 3458 #define DONE_Q_SIZE 1024 3459 #define QUEUE_ALIGN 256 3460 #if RX_RING_SIZE > 256 3461 #define RX_Q_ENTRIES Rx2048QEntries 3462 #else 3463 #define RX_Q_ENTRIES Rx256QEntries 3464 #endif 3465 #define TX_TIMEOUT (2 * HZ) 3466 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3467 #define ADDR_64BITS 3468 #define netdrv_addr_t __le64 3469 #define cpu_to_dma(x) cpu_to_le64(x) 3470 #define dma_to_cpu(x) le64_to_cpu(x) 3471 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3472 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3473 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3474 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3475 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3476 #else 3477 #define netdrv_addr_t __le32 3478 #define cpu_to_dma(x) cpu_to_le32(x) 3479 #define dma_to_cpu(x) le32_to_cpu(x) 3480 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3481 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3482 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3483 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3484 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3485 #endif 3486 #define skb_first_frag_len(skb) skb_headlen(skb) 3487 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3488 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3489 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3490 #ifdef VLAN_SUPPORT 3491 #define RxComplType RxComplType3 3492 #else 3493 #define RxComplType RxComplType2 3494 #endif 3495 #ifdef ADDR_64BITS 3496 #define TX_DESC_TYPE TxDescType2 3497 #else 3498 #define TX_DESC_TYPE TxDescType1 3499 #endif 3500 #define TX_DESC_SPACING TxDescSpaceUnlim 3501 #if 0 3502 #endif 3503 #define PHY_CNT 2 3504 #ifdef VLAN_SUPPORT 3505 #endif 3506 #ifdef VLAN_SUPPORT 3507 #endif 3508 #ifdef VLAN_SUPPORT 3509 #endif 3510 #ifndef MODULE 3511 #endif 3512 #ifdef ZEROCOPY 3513 #endif 3514 #ifdef VLAN_SUPPORT 3515 #endif 3516 #ifdef ADDR_64BITS 3517 #endif 3518 #if ! defined(final_version) 3519 #endif 3520 #ifdef VLAN_SUPPORT 3521 #endif 3522 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3523 #endif 3524 #ifndef final_version 3525 #endif 3526 #ifdef VLAN_SUPPORT 3527 #endif 3528 #ifdef VLAN_SUPPORT 3529 #endif 3530 #ifdef VLAN_SUPPORT 3531 #endif 3532 #ifdef VLAN_SUPPORT 3533 #endif 3534 /* LDV_COMMENT_END_PREP */ 3535 /* LDV_COMMENT_BEGIN_PREP */ 3536 #ifdef CONFIG_PM 3537 #endif 3538 #ifdef CONFIG_PM 3539 #endif 3540 #ifdef MODULE 3541 #endif 3542 /* LDV_COMMENT_END_PREP */ 3543 /* content: static u32 get_msglevel(struct net_device *dev)*/ 3544 /* LDV_COMMENT_BEGIN_PREP */ 3545 #define DRV_NAME "starfire" 3546 #define DRV_VERSION "2.1" 3547 #define DRV_RELDATE "July 6, 2008" 3548 #define HAS_BROKEN_FIRMWARE 3549 #ifdef HAS_BROKEN_FIRMWARE 3550 #define PADDING_MASK 3 3551 #endif 3552 #define ZEROCOPY 3553 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3554 #define VLAN_SUPPORT 3555 #endif 3556 #define PKT_BUF_SZ 1536 3557 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3558 #else 3559 #endif 3560 #ifdef __sparc__ 3561 #define DMA_BURST_SIZE 64 3562 #else 3563 #define DMA_BURST_SIZE 128 3564 #endif 3565 #define RX_RING_SIZE 256 3566 #define TX_RING_SIZE 32 3567 #define DONE_Q_SIZE 1024 3568 #define QUEUE_ALIGN 256 3569 #if RX_RING_SIZE > 256 3570 #define RX_Q_ENTRIES Rx2048QEntries 3571 #else 3572 #define RX_Q_ENTRIES Rx256QEntries 3573 #endif 3574 #define TX_TIMEOUT (2 * HZ) 3575 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3576 #define ADDR_64BITS 3577 #define netdrv_addr_t __le64 3578 #define cpu_to_dma(x) cpu_to_le64(x) 3579 #define dma_to_cpu(x) le64_to_cpu(x) 3580 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3581 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3582 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3583 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3584 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3585 #else 3586 #define netdrv_addr_t __le32 3587 #define cpu_to_dma(x) cpu_to_le32(x) 3588 #define dma_to_cpu(x) le32_to_cpu(x) 3589 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3590 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3591 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3592 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3593 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3594 #endif 3595 #define skb_first_frag_len(skb) skb_headlen(skb) 3596 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3597 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3598 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3599 #ifdef VLAN_SUPPORT 3600 #define RxComplType RxComplType3 3601 #else 3602 #define RxComplType RxComplType2 3603 #endif 3604 #ifdef ADDR_64BITS 3605 #define TX_DESC_TYPE TxDescType2 3606 #else 3607 #define TX_DESC_TYPE TxDescType1 3608 #endif 3609 #define TX_DESC_SPACING TxDescSpaceUnlim 3610 #if 0 3611 #endif 3612 #define PHY_CNT 2 3613 #ifdef VLAN_SUPPORT 3614 #endif 3615 #ifdef VLAN_SUPPORT 3616 #endif 3617 #ifdef VLAN_SUPPORT 3618 #endif 3619 #ifndef MODULE 3620 #endif 3621 #ifdef ZEROCOPY 3622 #endif 3623 #ifdef VLAN_SUPPORT 3624 #endif 3625 #ifdef ADDR_64BITS 3626 #endif 3627 #if ! defined(final_version) 3628 #endif 3629 #ifdef VLAN_SUPPORT 3630 #endif 3631 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3632 #endif 3633 #ifndef final_version 3634 #endif 3635 #ifdef VLAN_SUPPORT 3636 #endif 3637 #ifdef VLAN_SUPPORT 3638 #endif 3639 #ifdef VLAN_SUPPORT 3640 #endif 3641 #ifdef VLAN_SUPPORT 3642 #endif 3643 /* LDV_COMMENT_END_PREP */ 3644 /* LDV_COMMENT_BEGIN_PREP */ 3645 #ifdef CONFIG_PM 3646 #endif 3647 #ifdef CONFIG_PM 3648 #endif 3649 #ifdef MODULE 3650 #endif 3651 /* LDV_COMMENT_END_PREP */ 3652 /* content: static void set_msglevel(struct net_device *dev, u32 val)*/ 3653 /* LDV_COMMENT_BEGIN_PREP */ 3654 #define DRV_NAME "starfire" 3655 #define DRV_VERSION "2.1" 3656 #define DRV_RELDATE "July 6, 2008" 3657 #define HAS_BROKEN_FIRMWARE 3658 #ifdef HAS_BROKEN_FIRMWARE 3659 #define PADDING_MASK 3 3660 #endif 3661 #define ZEROCOPY 3662 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3663 #define VLAN_SUPPORT 3664 #endif 3665 #define PKT_BUF_SZ 1536 3666 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3667 #else 3668 #endif 3669 #ifdef __sparc__ 3670 #define DMA_BURST_SIZE 64 3671 #else 3672 #define DMA_BURST_SIZE 128 3673 #endif 3674 #define RX_RING_SIZE 256 3675 #define TX_RING_SIZE 32 3676 #define DONE_Q_SIZE 1024 3677 #define QUEUE_ALIGN 256 3678 #if RX_RING_SIZE > 256 3679 #define RX_Q_ENTRIES Rx2048QEntries 3680 #else 3681 #define RX_Q_ENTRIES Rx256QEntries 3682 #endif 3683 #define TX_TIMEOUT (2 * HZ) 3684 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3685 #define ADDR_64BITS 3686 #define netdrv_addr_t __le64 3687 #define cpu_to_dma(x) cpu_to_le64(x) 3688 #define dma_to_cpu(x) le64_to_cpu(x) 3689 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3690 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3691 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3692 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3693 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3694 #else 3695 #define netdrv_addr_t __le32 3696 #define cpu_to_dma(x) cpu_to_le32(x) 3697 #define dma_to_cpu(x) le32_to_cpu(x) 3698 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3699 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3700 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3701 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3702 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3703 #endif 3704 #define skb_first_frag_len(skb) skb_headlen(skb) 3705 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3706 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3707 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3708 #ifdef VLAN_SUPPORT 3709 #define RxComplType RxComplType3 3710 #else 3711 #define RxComplType RxComplType2 3712 #endif 3713 #ifdef ADDR_64BITS 3714 #define TX_DESC_TYPE TxDescType2 3715 #else 3716 #define TX_DESC_TYPE TxDescType1 3717 #endif 3718 #define TX_DESC_SPACING TxDescSpaceUnlim 3719 #if 0 3720 #endif 3721 #define PHY_CNT 2 3722 #ifdef VLAN_SUPPORT 3723 #endif 3724 #ifdef VLAN_SUPPORT 3725 #endif 3726 #ifdef VLAN_SUPPORT 3727 #endif 3728 #ifndef MODULE 3729 #endif 3730 #ifdef ZEROCOPY 3731 #endif 3732 #ifdef VLAN_SUPPORT 3733 #endif 3734 #ifdef ADDR_64BITS 3735 #endif 3736 #if ! defined(final_version) 3737 #endif 3738 #ifdef VLAN_SUPPORT 3739 #endif 3740 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3741 #endif 3742 #ifndef final_version 3743 #endif 3744 #ifdef VLAN_SUPPORT 3745 #endif 3746 #ifdef VLAN_SUPPORT 3747 #endif 3748 #ifdef VLAN_SUPPORT 3749 #endif 3750 #ifdef VLAN_SUPPORT 3751 #endif 3752 /* LDV_COMMENT_END_PREP */ 3753 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "set_msglevel" */ 3754 u32 var_set_msglevel_26_p1; 3755 /* LDV_COMMENT_BEGIN_PREP */ 3756 #ifdef CONFIG_PM 3757 #endif 3758 #ifdef CONFIG_PM 3759 #endif 3760 #ifdef MODULE 3761 #endif 3762 /* LDV_COMMENT_END_PREP */ 3763 /* content: static int get_link_ksettings(struct net_device *dev, struct ethtool_link_ksettings *cmd)*/ 3764 /* LDV_COMMENT_BEGIN_PREP */ 3765 #define DRV_NAME "starfire" 3766 #define DRV_VERSION "2.1" 3767 #define DRV_RELDATE "July 6, 2008" 3768 #define HAS_BROKEN_FIRMWARE 3769 #ifdef HAS_BROKEN_FIRMWARE 3770 #define PADDING_MASK 3 3771 #endif 3772 #define ZEROCOPY 3773 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3774 #define VLAN_SUPPORT 3775 #endif 3776 #define PKT_BUF_SZ 1536 3777 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3778 #else 3779 #endif 3780 #ifdef __sparc__ 3781 #define DMA_BURST_SIZE 64 3782 #else 3783 #define DMA_BURST_SIZE 128 3784 #endif 3785 #define RX_RING_SIZE 256 3786 #define TX_RING_SIZE 32 3787 #define DONE_Q_SIZE 1024 3788 #define QUEUE_ALIGN 256 3789 #if RX_RING_SIZE > 256 3790 #define RX_Q_ENTRIES Rx2048QEntries 3791 #else 3792 #define RX_Q_ENTRIES Rx256QEntries 3793 #endif 3794 #define TX_TIMEOUT (2 * HZ) 3795 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3796 #define ADDR_64BITS 3797 #define netdrv_addr_t __le64 3798 #define cpu_to_dma(x) cpu_to_le64(x) 3799 #define dma_to_cpu(x) le64_to_cpu(x) 3800 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3801 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3802 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3803 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3804 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3805 #else 3806 #define netdrv_addr_t __le32 3807 #define cpu_to_dma(x) cpu_to_le32(x) 3808 #define dma_to_cpu(x) le32_to_cpu(x) 3809 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3810 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3811 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3812 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3813 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3814 #endif 3815 #define skb_first_frag_len(skb) skb_headlen(skb) 3816 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3817 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3818 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3819 #ifdef VLAN_SUPPORT 3820 #define RxComplType RxComplType3 3821 #else 3822 #define RxComplType RxComplType2 3823 #endif 3824 #ifdef ADDR_64BITS 3825 #define TX_DESC_TYPE TxDescType2 3826 #else 3827 #define TX_DESC_TYPE TxDescType1 3828 #endif 3829 #define TX_DESC_SPACING TxDescSpaceUnlim 3830 #if 0 3831 #endif 3832 #define PHY_CNT 2 3833 #ifdef VLAN_SUPPORT 3834 #endif 3835 #ifdef VLAN_SUPPORT 3836 #endif 3837 #ifdef VLAN_SUPPORT 3838 #endif 3839 #ifndef MODULE 3840 #endif 3841 #ifdef ZEROCOPY 3842 #endif 3843 #ifdef VLAN_SUPPORT 3844 #endif 3845 #ifdef ADDR_64BITS 3846 #endif 3847 #if ! defined(final_version) 3848 #endif 3849 #ifdef VLAN_SUPPORT 3850 #endif 3851 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3852 #endif 3853 #ifndef final_version 3854 #endif 3855 #ifdef VLAN_SUPPORT 3856 #endif 3857 #ifdef VLAN_SUPPORT 3858 #endif 3859 #ifdef VLAN_SUPPORT 3860 #endif 3861 #ifdef VLAN_SUPPORT 3862 #endif 3863 /* LDV_COMMENT_END_PREP */ 3864 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "get_link_ksettings" */ 3865 struct ethtool_link_ksettings * var_group5; 3866 /* LDV_COMMENT_BEGIN_PREP */ 3867 #ifdef CONFIG_PM 3868 #endif 3869 #ifdef CONFIG_PM 3870 #endif 3871 #ifdef MODULE 3872 #endif 3873 /* LDV_COMMENT_END_PREP */ 3874 /* content: static int set_link_ksettings(struct net_device *dev, const struct ethtool_link_ksettings *cmd)*/ 3875 /* LDV_COMMENT_BEGIN_PREP */ 3876 #define DRV_NAME "starfire" 3877 #define DRV_VERSION "2.1" 3878 #define DRV_RELDATE "July 6, 2008" 3879 #define HAS_BROKEN_FIRMWARE 3880 #ifdef HAS_BROKEN_FIRMWARE 3881 #define PADDING_MASK 3 3882 #endif 3883 #define ZEROCOPY 3884 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3885 #define VLAN_SUPPORT 3886 #endif 3887 #define PKT_BUF_SZ 1536 3888 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3889 #else 3890 #endif 3891 #ifdef __sparc__ 3892 #define DMA_BURST_SIZE 64 3893 #else 3894 #define DMA_BURST_SIZE 128 3895 #endif 3896 #define RX_RING_SIZE 256 3897 #define TX_RING_SIZE 32 3898 #define DONE_Q_SIZE 1024 3899 #define QUEUE_ALIGN 256 3900 #if RX_RING_SIZE > 256 3901 #define RX_Q_ENTRIES Rx2048QEntries 3902 #else 3903 #define RX_Q_ENTRIES Rx256QEntries 3904 #endif 3905 #define TX_TIMEOUT (2 * HZ) 3906 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3907 #define ADDR_64BITS 3908 #define netdrv_addr_t __le64 3909 #define cpu_to_dma(x) cpu_to_le64(x) 3910 #define dma_to_cpu(x) le64_to_cpu(x) 3911 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3912 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3913 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3914 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3915 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3916 #else 3917 #define netdrv_addr_t __le32 3918 #define cpu_to_dma(x) cpu_to_le32(x) 3919 #define dma_to_cpu(x) le32_to_cpu(x) 3920 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3921 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3922 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3923 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3924 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3925 #endif 3926 #define skb_first_frag_len(skb) skb_headlen(skb) 3927 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3928 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3929 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3930 #ifdef VLAN_SUPPORT 3931 #define RxComplType RxComplType3 3932 #else 3933 #define RxComplType RxComplType2 3934 #endif 3935 #ifdef ADDR_64BITS 3936 #define TX_DESC_TYPE TxDescType2 3937 #else 3938 #define TX_DESC_TYPE TxDescType1 3939 #endif 3940 #define TX_DESC_SPACING TxDescSpaceUnlim 3941 #if 0 3942 #endif 3943 #define PHY_CNT 2 3944 #ifdef VLAN_SUPPORT 3945 #endif 3946 #ifdef VLAN_SUPPORT 3947 #endif 3948 #ifdef VLAN_SUPPORT 3949 #endif 3950 #ifndef MODULE 3951 #endif 3952 #ifdef ZEROCOPY 3953 #endif 3954 #ifdef VLAN_SUPPORT 3955 #endif 3956 #ifdef ADDR_64BITS 3957 #endif 3958 #if ! defined(final_version) 3959 #endif 3960 #ifdef VLAN_SUPPORT 3961 #endif 3962 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3963 #endif 3964 #ifndef final_version 3965 #endif 3966 #ifdef VLAN_SUPPORT 3967 #endif 3968 #ifdef VLAN_SUPPORT 3969 #endif 3970 #ifdef VLAN_SUPPORT 3971 #endif 3972 #ifdef VLAN_SUPPORT 3973 #endif 3974 /* LDV_COMMENT_END_PREP */ 3975 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "set_link_ksettings" */ 3976 const struct ethtool_link_ksettings * var_set_link_ksettings_22_p1; 3977 /* LDV_COMMENT_BEGIN_PREP */ 3978 #ifdef CONFIG_PM 3979 #endif 3980 #ifdef CONFIG_PM 3981 #endif 3982 #ifdef MODULE 3983 #endif 3984 /* LDV_COMMENT_END_PREP */ 3985 3986 /** STRUCT: struct type: pci_driver, struct name: starfire_driver **/ 3987 /* content: static int starfire_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)*/ 3988 /* LDV_COMMENT_BEGIN_PREP */ 3989 #define DRV_NAME "starfire" 3990 #define DRV_VERSION "2.1" 3991 #define DRV_RELDATE "July 6, 2008" 3992 #define HAS_BROKEN_FIRMWARE 3993 #ifdef HAS_BROKEN_FIRMWARE 3994 #define PADDING_MASK 3 3995 #endif 3996 #define ZEROCOPY 3997 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3998 #define VLAN_SUPPORT 3999 #endif 4000 #define PKT_BUF_SZ 1536 4001 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4002 #else 4003 #endif 4004 #ifdef __sparc__ 4005 #define DMA_BURST_SIZE 64 4006 #else 4007 #define DMA_BURST_SIZE 128 4008 #endif 4009 #define RX_RING_SIZE 256 4010 #define TX_RING_SIZE 32 4011 #define DONE_Q_SIZE 1024 4012 #define QUEUE_ALIGN 256 4013 #if RX_RING_SIZE > 256 4014 #define RX_Q_ENTRIES Rx2048QEntries 4015 #else 4016 #define RX_Q_ENTRIES Rx256QEntries 4017 #endif 4018 #define TX_TIMEOUT (2 * HZ) 4019 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4020 #define ADDR_64BITS 4021 #define netdrv_addr_t __le64 4022 #define cpu_to_dma(x) cpu_to_le64(x) 4023 #define dma_to_cpu(x) le64_to_cpu(x) 4024 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4025 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4026 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4027 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4028 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4029 #else 4030 #define netdrv_addr_t __le32 4031 #define cpu_to_dma(x) cpu_to_le32(x) 4032 #define dma_to_cpu(x) le32_to_cpu(x) 4033 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4034 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4035 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4036 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4037 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 4038 #endif 4039 #define skb_first_frag_len(skb) skb_headlen(skb) 4040 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 4041 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 4042 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 4043 #ifdef VLAN_SUPPORT 4044 #define RxComplType RxComplType3 4045 #else 4046 #define RxComplType RxComplType2 4047 #endif 4048 #ifdef ADDR_64BITS 4049 #define TX_DESC_TYPE TxDescType2 4050 #else 4051 #define TX_DESC_TYPE TxDescType1 4052 #endif 4053 #define TX_DESC_SPACING TxDescSpaceUnlim 4054 #if 0 4055 #endif 4056 #define PHY_CNT 2 4057 #ifdef VLAN_SUPPORT 4058 #endif 4059 #ifdef VLAN_SUPPORT 4060 #endif 4061 #ifdef VLAN_SUPPORT 4062 #endif 4063 /* LDV_COMMENT_END_PREP */ 4064 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "starfire_init_one" */ 4065 struct pci_dev * var_group6; 4066 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "starfire_init_one" */ 4067 const struct pci_device_id * var_starfire_init_one_2_p1; 4068 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "starfire_init_one" */ 4069 static int res_starfire_init_one_2; 4070 /* LDV_COMMENT_BEGIN_PREP */ 4071 #ifdef VLAN_SUPPORT 4072 #endif 4073 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 4074 #endif 4075 #ifndef final_version 4076 #endif 4077 #ifdef VLAN_SUPPORT 4078 #endif 4079 #ifdef VLAN_SUPPORT 4080 #endif 4081 #ifdef VLAN_SUPPORT 4082 #endif 4083 #ifdef VLAN_SUPPORT 4084 #endif 4085 #ifdef CONFIG_PM 4086 #endif 4087 #ifdef CONFIG_PM 4088 #endif 4089 #ifdef MODULE 4090 #endif 4091 /* LDV_COMMENT_END_PREP */ 4092 /* content: static void starfire_remove_one(struct pci_dev *pdev)*/ 4093 /* LDV_COMMENT_BEGIN_PREP */ 4094 #define DRV_NAME "starfire" 4095 #define DRV_VERSION "2.1" 4096 #define DRV_RELDATE "July 6, 2008" 4097 #define HAS_BROKEN_FIRMWARE 4098 #ifdef HAS_BROKEN_FIRMWARE 4099 #define PADDING_MASK 3 4100 #endif 4101 #define ZEROCOPY 4102 #if IS_ENABLED(CONFIG_VLAN_8021Q) 4103 #define VLAN_SUPPORT 4104 #endif 4105 #define PKT_BUF_SZ 1536 4106 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4107 #else 4108 #endif 4109 #ifdef __sparc__ 4110 #define DMA_BURST_SIZE 64 4111 #else 4112 #define DMA_BURST_SIZE 128 4113 #endif 4114 #define RX_RING_SIZE 256 4115 #define TX_RING_SIZE 32 4116 #define DONE_Q_SIZE 1024 4117 #define QUEUE_ALIGN 256 4118 #if RX_RING_SIZE > 256 4119 #define RX_Q_ENTRIES Rx2048QEntries 4120 #else 4121 #define RX_Q_ENTRIES Rx256QEntries 4122 #endif 4123 #define TX_TIMEOUT (2 * HZ) 4124 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4125 #define ADDR_64BITS 4126 #define netdrv_addr_t __le64 4127 #define cpu_to_dma(x) cpu_to_le64(x) 4128 #define dma_to_cpu(x) le64_to_cpu(x) 4129 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4130 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4131 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4132 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4133 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4134 #else 4135 #define netdrv_addr_t __le32 4136 #define cpu_to_dma(x) cpu_to_le32(x) 4137 #define dma_to_cpu(x) le32_to_cpu(x) 4138 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4139 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4140 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4141 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4142 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 4143 #endif 4144 #define skb_first_frag_len(skb) skb_headlen(skb) 4145 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 4146 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 4147 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 4148 #ifdef VLAN_SUPPORT 4149 #define RxComplType RxComplType3 4150 #else 4151 #define RxComplType RxComplType2 4152 #endif 4153 #ifdef ADDR_64BITS 4154 #define TX_DESC_TYPE TxDescType2 4155 #else 4156 #define TX_DESC_TYPE TxDescType1 4157 #endif 4158 #define TX_DESC_SPACING TxDescSpaceUnlim 4159 #if 0 4160 #endif 4161 #define PHY_CNT 2 4162 #ifdef VLAN_SUPPORT 4163 #endif 4164 #ifdef VLAN_SUPPORT 4165 #endif 4166 #ifdef VLAN_SUPPORT 4167 #endif 4168 #ifndef MODULE 4169 #endif 4170 #ifdef ZEROCOPY 4171 #endif 4172 #ifdef VLAN_SUPPORT 4173 #endif 4174 #ifdef ADDR_64BITS 4175 #endif 4176 #if ! defined(final_version) 4177 #endif 4178 #ifdef VLAN_SUPPORT 4179 #endif 4180 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 4181 #endif 4182 #ifndef final_version 4183 #endif 4184 #ifdef VLAN_SUPPORT 4185 #endif 4186 #ifdef VLAN_SUPPORT 4187 #endif 4188 #ifdef VLAN_SUPPORT 4189 #endif 4190 #ifdef VLAN_SUPPORT 4191 #endif 4192 #ifdef CONFIG_PM 4193 #endif 4194 /* LDV_COMMENT_END_PREP */ 4195 /* LDV_COMMENT_BEGIN_PREP */ 4196 #ifdef CONFIG_PM 4197 #endif 4198 #ifdef MODULE 4199 #endif 4200 /* LDV_COMMENT_END_PREP */ 4201 /* content: static int starfire_suspend(struct pci_dev *pdev, pm_message_t state)*/ 4202 /* LDV_COMMENT_BEGIN_PREP */ 4203 #define DRV_NAME "starfire" 4204 #define DRV_VERSION "2.1" 4205 #define DRV_RELDATE "July 6, 2008" 4206 #define HAS_BROKEN_FIRMWARE 4207 #ifdef HAS_BROKEN_FIRMWARE 4208 #define PADDING_MASK 3 4209 #endif 4210 #define ZEROCOPY 4211 #if IS_ENABLED(CONFIG_VLAN_8021Q) 4212 #define VLAN_SUPPORT 4213 #endif 4214 #define PKT_BUF_SZ 1536 4215 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4216 #else 4217 #endif 4218 #ifdef __sparc__ 4219 #define DMA_BURST_SIZE 64 4220 #else 4221 #define DMA_BURST_SIZE 128 4222 #endif 4223 #define RX_RING_SIZE 256 4224 #define TX_RING_SIZE 32 4225 #define DONE_Q_SIZE 1024 4226 #define QUEUE_ALIGN 256 4227 #if RX_RING_SIZE > 256 4228 #define RX_Q_ENTRIES Rx2048QEntries 4229 #else 4230 #define RX_Q_ENTRIES Rx256QEntries 4231 #endif 4232 #define TX_TIMEOUT (2 * HZ) 4233 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4234 #define ADDR_64BITS 4235 #define netdrv_addr_t __le64 4236 #define cpu_to_dma(x) cpu_to_le64(x) 4237 #define dma_to_cpu(x) le64_to_cpu(x) 4238 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4239 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4240 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4241 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4242 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4243 #else 4244 #define netdrv_addr_t __le32 4245 #define cpu_to_dma(x) cpu_to_le32(x) 4246 #define dma_to_cpu(x) le32_to_cpu(x) 4247 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4248 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4249 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4250 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4251 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 4252 #endif 4253 #define skb_first_frag_len(skb) skb_headlen(skb) 4254 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 4255 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 4256 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 4257 #ifdef VLAN_SUPPORT 4258 #define RxComplType RxComplType3 4259 #else 4260 #define RxComplType RxComplType2 4261 #endif 4262 #ifdef ADDR_64BITS 4263 #define TX_DESC_TYPE TxDescType2 4264 #else 4265 #define TX_DESC_TYPE TxDescType1 4266 #endif 4267 #define TX_DESC_SPACING TxDescSpaceUnlim 4268 #if 0 4269 #endif 4270 #define PHY_CNT 2 4271 #ifdef VLAN_SUPPORT 4272 #endif 4273 #ifdef VLAN_SUPPORT 4274 #endif 4275 #ifdef VLAN_SUPPORT 4276 #endif 4277 #ifndef MODULE 4278 #endif 4279 #ifdef ZEROCOPY 4280 #endif 4281 #ifdef VLAN_SUPPORT 4282 #endif 4283 #ifdef ADDR_64BITS 4284 #endif 4285 #if ! defined(final_version) 4286 #endif 4287 #ifdef VLAN_SUPPORT 4288 #endif 4289 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 4290 #endif 4291 #ifndef final_version 4292 #endif 4293 #ifdef VLAN_SUPPORT 4294 #endif 4295 #ifdef VLAN_SUPPORT 4296 #endif 4297 #ifdef VLAN_SUPPORT 4298 #endif 4299 #ifdef VLAN_SUPPORT 4300 #endif 4301 #ifdef CONFIG_PM 4302 /* LDV_COMMENT_END_PREP */ 4303 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "starfire_suspend" */ 4304 pm_message_t var_starfire_suspend_29_p1; 4305 /* LDV_COMMENT_BEGIN_PREP */ 4306 #endif 4307 #ifdef CONFIG_PM 4308 #endif 4309 #ifdef MODULE 4310 #endif 4311 /* LDV_COMMENT_END_PREP */ 4312 /* content: static int starfire_resume(struct pci_dev *pdev)*/ 4313 /* LDV_COMMENT_BEGIN_PREP */ 4314 #define DRV_NAME "starfire" 4315 #define DRV_VERSION "2.1" 4316 #define DRV_RELDATE "July 6, 2008" 4317 #define HAS_BROKEN_FIRMWARE 4318 #ifdef HAS_BROKEN_FIRMWARE 4319 #define PADDING_MASK 3 4320 #endif 4321 #define ZEROCOPY 4322 #if IS_ENABLED(CONFIG_VLAN_8021Q) 4323 #define VLAN_SUPPORT 4324 #endif 4325 #define PKT_BUF_SZ 1536 4326 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4327 #else 4328 #endif 4329 #ifdef __sparc__ 4330 #define DMA_BURST_SIZE 64 4331 #else 4332 #define DMA_BURST_SIZE 128 4333 #endif 4334 #define RX_RING_SIZE 256 4335 #define TX_RING_SIZE 32 4336 #define DONE_Q_SIZE 1024 4337 #define QUEUE_ALIGN 256 4338 #if RX_RING_SIZE > 256 4339 #define RX_Q_ENTRIES Rx2048QEntries 4340 #else 4341 #define RX_Q_ENTRIES Rx256QEntries 4342 #endif 4343 #define TX_TIMEOUT (2 * HZ) 4344 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4345 #define ADDR_64BITS 4346 #define netdrv_addr_t __le64 4347 #define cpu_to_dma(x) cpu_to_le64(x) 4348 #define dma_to_cpu(x) le64_to_cpu(x) 4349 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4350 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4351 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4352 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4353 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4354 #else 4355 #define netdrv_addr_t __le32 4356 #define cpu_to_dma(x) cpu_to_le32(x) 4357 #define dma_to_cpu(x) le32_to_cpu(x) 4358 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4359 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4360 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4361 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4362 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 4363 #endif 4364 #define skb_first_frag_len(skb) skb_headlen(skb) 4365 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 4366 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 4367 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 4368 #ifdef VLAN_SUPPORT 4369 #define RxComplType RxComplType3 4370 #else 4371 #define RxComplType RxComplType2 4372 #endif 4373 #ifdef ADDR_64BITS 4374 #define TX_DESC_TYPE TxDescType2 4375 #else 4376 #define TX_DESC_TYPE TxDescType1 4377 #endif 4378 #define TX_DESC_SPACING TxDescSpaceUnlim 4379 #if 0 4380 #endif 4381 #define PHY_CNT 2 4382 #ifdef VLAN_SUPPORT 4383 #endif 4384 #ifdef VLAN_SUPPORT 4385 #endif 4386 #ifdef VLAN_SUPPORT 4387 #endif 4388 #ifndef MODULE 4389 #endif 4390 #ifdef ZEROCOPY 4391 #endif 4392 #ifdef VLAN_SUPPORT 4393 #endif 4394 #ifdef ADDR_64BITS 4395 #endif 4396 #if ! defined(final_version) 4397 #endif 4398 #ifdef VLAN_SUPPORT 4399 #endif 4400 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 4401 #endif 4402 #ifndef final_version 4403 #endif 4404 #ifdef VLAN_SUPPORT 4405 #endif 4406 #ifdef VLAN_SUPPORT 4407 #endif 4408 #ifdef VLAN_SUPPORT 4409 #endif 4410 #ifdef VLAN_SUPPORT 4411 #endif 4412 #ifdef CONFIG_PM 4413 /* LDV_COMMENT_END_PREP */ 4414 /* LDV_COMMENT_BEGIN_PREP */ 4415 #endif 4416 #ifdef CONFIG_PM 4417 #endif 4418 #ifdef MODULE 4419 #endif 4420 /* LDV_COMMENT_END_PREP */ 4421 4422 /** CALLBACK SECTION request_irq **/ 4423 /* content: static irqreturn_t intr_handler(int irq, void *dev_instance)*/ 4424 /* LDV_COMMENT_BEGIN_PREP */ 4425 #define DRV_NAME "starfire" 4426 #define DRV_VERSION "2.1" 4427 #define DRV_RELDATE "July 6, 2008" 4428 #define HAS_BROKEN_FIRMWARE 4429 #ifdef HAS_BROKEN_FIRMWARE 4430 #define PADDING_MASK 3 4431 #endif 4432 #define ZEROCOPY 4433 #if IS_ENABLED(CONFIG_VLAN_8021Q) 4434 #define VLAN_SUPPORT 4435 #endif 4436 #define PKT_BUF_SZ 1536 4437 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4438 #else 4439 #endif 4440 #ifdef __sparc__ 4441 #define DMA_BURST_SIZE 64 4442 #else 4443 #define DMA_BURST_SIZE 128 4444 #endif 4445 #define RX_RING_SIZE 256 4446 #define TX_RING_SIZE 32 4447 #define DONE_Q_SIZE 1024 4448 #define QUEUE_ALIGN 256 4449 #if RX_RING_SIZE > 256 4450 #define RX_Q_ENTRIES Rx2048QEntries 4451 #else 4452 #define RX_Q_ENTRIES Rx256QEntries 4453 #endif 4454 #define TX_TIMEOUT (2 * HZ) 4455 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4456 #define ADDR_64BITS 4457 #define netdrv_addr_t __le64 4458 #define cpu_to_dma(x) cpu_to_le64(x) 4459 #define dma_to_cpu(x) le64_to_cpu(x) 4460 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4461 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4462 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4463 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4464 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4465 #else 4466 #define netdrv_addr_t __le32 4467 #define cpu_to_dma(x) cpu_to_le32(x) 4468 #define dma_to_cpu(x) le32_to_cpu(x) 4469 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4470 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4471 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4472 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4473 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 4474 #endif 4475 #define skb_first_frag_len(skb) skb_headlen(skb) 4476 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 4477 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 4478 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 4479 #ifdef VLAN_SUPPORT 4480 #define RxComplType RxComplType3 4481 #else 4482 #define RxComplType RxComplType2 4483 #endif 4484 #ifdef ADDR_64BITS 4485 #define TX_DESC_TYPE TxDescType2 4486 #else 4487 #define TX_DESC_TYPE TxDescType1 4488 #endif 4489 #define TX_DESC_SPACING TxDescSpaceUnlim 4490 #if 0 4491 #endif 4492 #define PHY_CNT 2 4493 #ifdef VLAN_SUPPORT 4494 #endif 4495 #ifdef VLAN_SUPPORT 4496 #endif 4497 #ifdef VLAN_SUPPORT 4498 #endif 4499 #ifndef MODULE 4500 #endif 4501 #ifdef ZEROCOPY 4502 #endif 4503 #ifdef VLAN_SUPPORT 4504 #endif 4505 #ifdef ADDR_64BITS 4506 #endif 4507 #if ! defined(final_version) 4508 #endif 4509 #ifdef VLAN_SUPPORT 4510 #endif 4511 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 4512 #endif 4513 /* LDV_COMMENT_END_PREP */ 4514 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "intr_handler" */ 4515 int var_intr_handler_10_p0; 4516 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "intr_handler" */ 4517 void * var_intr_handler_10_p1; 4518 /* LDV_COMMENT_BEGIN_PREP */ 4519 #ifndef final_version 4520 #endif 4521 #ifdef VLAN_SUPPORT 4522 #endif 4523 #ifdef VLAN_SUPPORT 4524 #endif 4525 #ifdef VLAN_SUPPORT 4526 #endif 4527 #ifdef VLAN_SUPPORT 4528 #endif 4529 #ifdef CONFIG_PM 4530 #endif 4531 #ifdef CONFIG_PM 4532 #endif 4533 #ifdef MODULE 4534 #endif 4535 /* LDV_COMMENT_END_PREP */ 4536 4537 4538 4539 4540 /* LDV_COMMENT_END_VARIABLE_DECLARATION_PART */ 4541 /* LDV_COMMENT_BEGIN_VARIABLE_INITIALIZING_PART */ 4542 /*============================= VARIABLE INITIALIZING PART =============================*/ 4543 LDV_IN_INTERRUPT=1; 4544 4545 4546 4547 4548 /* LDV_COMMENT_END_VARIABLE_INITIALIZING_PART */ 4549 /* LDV_COMMENT_BEGIN_FUNCTION_CALL_SECTION */ 4550 /*============================= FUNCTION CALL SECTION =============================*/ 4551 /* LDV_COMMENT_FUNCTION_CALL Initialize LDV model. */ 4552 ldv_initialize(); 4553 4554 /** INIT: init_type: ST_MODULE_INIT **/ 4555 /* content: static int __init starfire_init (void)*/ 4556 /* LDV_COMMENT_BEGIN_PREP */ 4557 #define DRV_NAME "starfire" 4558 #define DRV_VERSION "2.1" 4559 #define DRV_RELDATE "July 6, 2008" 4560 #define HAS_BROKEN_FIRMWARE 4561 #ifdef HAS_BROKEN_FIRMWARE 4562 #define PADDING_MASK 3 4563 #endif 4564 #define ZEROCOPY 4565 #if IS_ENABLED(CONFIG_VLAN_8021Q) 4566 #define VLAN_SUPPORT 4567 #endif 4568 #define PKT_BUF_SZ 1536 4569 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4570 #else 4571 #endif 4572 #ifdef __sparc__ 4573 #define DMA_BURST_SIZE 64 4574 #else 4575 #define DMA_BURST_SIZE 128 4576 #endif 4577 #define RX_RING_SIZE 256 4578 #define TX_RING_SIZE 32 4579 #define DONE_Q_SIZE 1024 4580 #define QUEUE_ALIGN 256 4581 #if RX_RING_SIZE > 256 4582 #define RX_Q_ENTRIES Rx2048QEntries 4583 #else 4584 #define RX_Q_ENTRIES Rx256QEntries 4585 #endif 4586 #define TX_TIMEOUT (2 * HZ) 4587 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4588 #define ADDR_64BITS 4589 #define netdrv_addr_t __le64 4590 #define cpu_to_dma(x) cpu_to_le64(x) 4591 #define dma_to_cpu(x) le64_to_cpu(x) 4592 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4593 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4594 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4595 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4596 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4597 #else 4598 #define netdrv_addr_t __le32 4599 #define cpu_to_dma(x) cpu_to_le32(x) 4600 #define dma_to_cpu(x) le32_to_cpu(x) 4601 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4602 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4603 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4604 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4605 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 4606 #endif 4607 #define skb_first_frag_len(skb) skb_headlen(skb) 4608 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 4609 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 4610 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 4611 #ifdef VLAN_SUPPORT 4612 #define RxComplType RxComplType3 4613 #else 4614 #define RxComplType RxComplType2 4615 #endif 4616 #ifdef ADDR_64BITS 4617 #define TX_DESC_TYPE TxDescType2 4618 #else 4619 #define TX_DESC_TYPE TxDescType1 4620 #endif 4621 #define TX_DESC_SPACING TxDescSpaceUnlim 4622 #if 0 4623 #endif 4624 #define PHY_CNT 2 4625 #ifdef VLAN_SUPPORT 4626 #endif 4627 #ifdef VLAN_SUPPORT 4628 #endif 4629 #ifdef VLAN_SUPPORT 4630 #endif 4631 #ifndef MODULE 4632 #endif 4633 #ifdef ZEROCOPY 4634 #endif 4635 #ifdef VLAN_SUPPORT 4636 #endif 4637 #ifdef ADDR_64BITS 4638 #endif 4639 #if ! defined(final_version) 4640 #endif 4641 #ifdef VLAN_SUPPORT 4642 #endif 4643 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 4644 #endif 4645 #ifndef final_version 4646 #endif 4647 #ifdef VLAN_SUPPORT 4648 #endif 4649 #ifdef VLAN_SUPPORT 4650 #endif 4651 #ifdef VLAN_SUPPORT 4652 #endif 4653 #ifdef VLAN_SUPPORT 4654 #endif 4655 #ifdef CONFIG_PM 4656 #endif 4657 #ifdef CONFIG_PM 4658 #endif 4659 /* LDV_COMMENT_END_PREP */ 4660 /* LDV_COMMENT_FUNCTION_CALL Kernel calls driver init function after driver loading to kernel. This function declared as "MODULE_INIT(function name)". */ 4661 ldv_handler_precall(); 4662 if(starfire_init()) 4663 goto ldv_final; 4664 int ldv_s_netdev_ops_net_device_ops = 0; 4665 4666 4667 4668 4669 int ldv_s_starfire_driver_pci_driver = 0; 4670 4671 4672 4673 4674 4675 while( nondet_int() 4676 || !(ldv_s_netdev_ops_net_device_ops == 0) 4677 || !(ldv_s_starfire_driver_pci_driver == 0) 4678 ) { 4679 4680 switch(nondet_int()) { 4681 4682 case 0: { 4683 4684 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 4685 if(ldv_s_netdev_ops_net_device_ops==0) { 4686 4687 /* content: static int netdev_open(struct net_device *dev)*/ 4688 /* LDV_COMMENT_BEGIN_PREP */ 4689 #define DRV_NAME "starfire" 4690 #define DRV_VERSION "2.1" 4691 #define DRV_RELDATE "July 6, 2008" 4692 #define HAS_BROKEN_FIRMWARE 4693 #ifdef HAS_BROKEN_FIRMWARE 4694 #define PADDING_MASK 3 4695 #endif 4696 #define ZEROCOPY 4697 #if IS_ENABLED(CONFIG_VLAN_8021Q) 4698 #define VLAN_SUPPORT 4699 #endif 4700 #define PKT_BUF_SZ 1536 4701 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4702 #else 4703 #endif 4704 #ifdef __sparc__ 4705 #define DMA_BURST_SIZE 64 4706 #else 4707 #define DMA_BURST_SIZE 128 4708 #endif 4709 #define RX_RING_SIZE 256 4710 #define TX_RING_SIZE 32 4711 #define DONE_Q_SIZE 1024 4712 #define QUEUE_ALIGN 256 4713 #if RX_RING_SIZE > 256 4714 #define RX_Q_ENTRIES Rx2048QEntries 4715 #else 4716 #define RX_Q_ENTRIES Rx256QEntries 4717 #endif 4718 #define TX_TIMEOUT (2 * HZ) 4719 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4720 #define ADDR_64BITS 4721 #define netdrv_addr_t __le64 4722 #define cpu_to_dma(x) cpu_to_le64(x) 4723 #define dma_to_cpu(x) le64_to_cpu(x) 4724 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4725 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4726 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4727 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4728 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4729 #else 4730 #define netdrv_addr_t __le32 4731 #define cpu_to_dma(x) cpu_to_le32(x) 4732 #define dma_to_cpu(x) le32_to_cpu(x) 4733 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4734 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4735 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4736 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4737 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 4738 #endif 4739 #define skb_first_frag_len(skb) skb_headlen(skb) 4740 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 4741 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 4742 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 4743 #ifdef VLAN_SUPPORT 4744 #define RxComplType RxComplType3 4745 #else 4746 #define RxComplType RxComplType2 4747 #endif 4748 #ifdef ADDR_64BITS 4749 #define TX_DESC_TYPE TxDescType2 4750 #else 4751 #define TX_DESC_TYPE TxDescType1 4752 #endif 4753 #define TX_DESC_SPACING TxDescSpaceUnlim 4754 #if 0 4755 #endif 4756 #define PHY_CNT 2 4757 #ifdef VLAN_SUPPORT 4758 #endif 4759 #ifdef VLAN_SUPPORT 4760 #endif 4761 #ifdef VLAN_SUPPORT 4762 #endif 4763 #ifndef MODULE 4764 #endif 4765 #ifdef ZEROCOPY 4766 #endif 4767 #ifdef VLAN_SUPPORT 4768 #endif 4769 #ifdef ADDR_64BITS 4770 #endif 4771 #if ! defined(final_version) 4772 #endif 4773 /* LDV_COMMENT_END_PREP */ 4774 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_open" from driver structure with callbacks "netdev_ops". Standart function test for correct return result. */ 4775 ldv_handler_precall(); 4776 res_netdev_open_5 = netdev_open( var_group1); 4777 ldv_check_return_value(res_netdev_open_5); 4778 if(res_netdev_open_5 < 0) 4779 goto ldv_module_exit; 4780 /* LDV_COMMENT_BEGIN_PREP */ 4781 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 4782 #endif 4783 #ifndef final_version 4784 #endif 4785 #ifdef VLAN_SUPPORT 4786 #endif 4787 #ifdef VLAN_SUPPORT 4788 #endif 4789 #ifdef VLAN_SUPPORT 4790 #endif 4791 #ifdef VLAN_SUPPORT 4792 #endif 4793 #ifdef CONFIG_PM 4794 #endif 4795 #ifdef CONFIG_PM 4796 #endif 4797 #ifdef MODULE 4798 #endif 4799 /* LDV_COMMENT_END_PREP */ 4800 ldv_s_netdev_ops_net_device_ops++; 4801 4802 } 4803 4804 } 4805 4806 break; 4807 case 1: { 4808 4809 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 4810 if(ldv_s_netdev_ops_net_device_ops==1) { 4811 4812 /* content: static int netdev_close(struct net_device *dev)*/ 4813 /* LDV_COMMENT_BEGIN_PREP */ 4814 #define DRV_NAME "starfire" 4815 #define DRV_VERSION "2.1" 4816 #define DRV_RELDATE "July 6, 2008" 4817 #define HAS_BROKEN_FIRMWARE 4818 #ifdef HAS_BROKEN_FIRMWARE 4819 #define PADDING_MASK 3 4820 #endif 4821 #define ZEROCOPY 4822 #if IS_ENABLED(CONFIG_VLAN_8021Q) 4823 #define VLAN_SUPPORT 4824 #endif 4825 #define PKT_BUF_SZ 1536 4826 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4827 #else 4828 #endif 4829 #ifdef __sparc__ 4830 #define DMA_BURST_SIZE 64 4831 #else 4832 #define DMA_BURST_SIZE 128 4833 #endif 4834 #define RX_RING_SIZE 256 4835 #define TX_RING_SIZE 32 4836 #define DONE_Q_SIZE 1024 4837 #define QUEUE_ALIGN 256 4838 #if RX_RING_SIZE > 256 4839 #define RX_Q_ENTRIES Rx2048QEntries 4840 #else 4841 #define RX_Q_ENTRIES Rx256QEntries 4842 #endif 4843 #define TX_TIMEOUT (2 * HZ) 4844 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4845 #define ADDR_64BITS 4846 #define netdrv_addr_t __le64 4847 #define cpu_to_dma(x) cpu_to_le64(x) 4848 #define dma_to_cpu(x) le64_to_cpu(x) 4849 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4850 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4851 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4852 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4853 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4854 #else 4855 #define netdrv_addr_t __le32 4856 #define cpu_to_dma(x) cpu_to_le32(x) 4857 #define dma_to_cpu(x) le32_to_cpu(x) 4858 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4859 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4860 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4861 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4862 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 4863 #endif 4864 #define skb_first_frag_len(skb) skb_headlen(skb) 4865 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 4866 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 4867 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 4868 #ifdef VLAN_SUPPORT 4869 #define RxComplType RxComplType3 4870 #else 4871 #define RxComplType RxComplType2 4872 #endif 4873 #ifdef ADDR_64BITS 4874 #define TX_DESC_TYPE TxDescType2 4875 #else 4876 #define TX_DESC_TYPE TxDescType1 4877 #endif 4878 #define TX_DESC_SPACING TxDescSpaceUnlim 4879 #if 0 4880 #endif 4881 #define PHY_CNT 2 4882 #ifdef VLAN_SUPPORT 4883 #endif 4884 #ifdef VLAN_SUPPORT 4885 #endif 4886 #ifdef VLAN_SUPPORT 4887 #endif 4888 #ifndef MODULE 4889 #endif 4890 #ifdef ZEROCOPY 4891 #endif 4892 #ifdef VLAN_SUPPORT 4893 #endif 4894 #ifdef ADDR_64BITS 4895 #endif 4896 #if ! defined(final_version) 4897 #endif 4898 #ifdef VLAN_SUPPORT 4899 #endif 4900 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 4901 #endif 4902 #ifndef final_version 4903 #endif 4904 #ifdef VLAN_SUPPORT 4905 #endif 4906 #ifdef VLAN_SUPPORT 4907 #endif 4908 #ifdef VLAN_SUPPORT 4909 #endif 4910 #ifdef VLAN_SUPPORT 4911 #endif 4912 /* LDV_COMMENT_END_PREP */ 4913 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_stop" from driver structure with callbacks "netdev_ops". Standart function test for correct return result. */ 4914 ldv_handler_precall(); 4915 res_netdev_close_28 = netdev_close( var_group1); 4916 ldv_check_return_value(res_netdev_close_28); 4917 if(res_netdev_close_28) 4918 goto ldv_module_exit; 4919 /* LDV_COMMENT_BEGIN_PREP */ 4920 #ifdef CONFIG_PM 4921 #endif 4922 #ifdef CONFIG_PM 4923 #endif 4924 #ifdef MODULE 4925 #endif 4926 /* LDV_COMMENT_END_PREP */ 4927 ldv_s_netdev_ops_net_device_ops=0; 4928 4929 } 4930 4931 } 4932 4933 break; 4934 case 2: { 4935 4936 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 4937 4938 4939 /* content: static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev)*/ 4940 /* LDV_COMMENT_BEGIN_PREP */ 4941 #define DRV_NAME "starfire" 4942 #define DRV_VERSION "2.1" 4943 #define DRV_RELDATE "July 6, 2008" 4944 #define HAS_BROKEN_FIRMWARE 4945 #ifdef HAS_BROKEN_FIRMWARE 4946 #define PADDING_MASK 3 4947 #endif 4948 #define ZEROCOPY 4949 #if IS_ENABLED(CONFIG_VLAN_8021Q) 4950 #define VLAN_SUPPORT 4951 #endif 4952 #define PKT_BUF_SZ 1536 4953 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4954 #else 4955 #endif 4956 #ifdef __sparc__ 4957 #define DMA_BURST_SIZE 64 4958 #else 4959 #define DMA_BURST_SIZE 128 4960 #endif 4961 #define RX_RING_SIZE 256 4962 #define TX_RING_SIZE 32 4963 #define DONE_Q_SIZE 1024 4964 #define QUEUE_ALIGN 256 4965 #if RX_RING_SIZE > 256 4966 #define RX_Q_ENTRIES Rx2048QEntries 4967 #else 4968 #define RX_Q_ENTRIES Rx256QEntries 4969 #endif 4970 #define TX_TIMEOUT (2 * HZ) 4971 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4972 #define ADDR_64BITS 4973 #define netdrv_addr_t __le64 4974 #define cpu_to_dma(x) cpu_to_le64(x) 4975 #define dma_to_cpu(x) le64_to_cpu(x) 4976 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4977 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4978 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4979 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4980 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4981 #else 4982 #define netdrv_addr_t __le32 4983 #define cpu_to_dma(x) cpu_to_le32(x) 4984 #define dma_to_cpu(x) le32_to_cpu(x) 4985 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4986 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4987 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4988 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4989 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 4990 #endif 4991 #define skb_first_frag_len(skb) skb_headlen(skb) 4992 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 4993 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 4994 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 4995 #ifdef VLAN_SUPPORT 4996 #define RxComplType RxComplType3 4997 #else 4998 #define RxComplType RxComplType2 4999 #endif 5000 #ifdef ADDR_64BITS 5001 #define TX_DESC_TYPE TxDescType2 5002 #else 5003 #define TX_DESC_TYPE TxDescType1 5004 #endif 5005 #define TX_DESC_SPACING TxDescSpaceUnlim 5006 #if 0 5007 #endif 5008 #define PHY_CNT 2 5009 #ifdef VLAN_SUPPORT 5010 #endif 5011 #ifdef VLAN_SUPPORT 5012 #endif 5013 #ifdef VLAN_SUPPORT 5014 #endif 5015 #ifndef MODULE 5016 #endif 5017 #ifdef ZEROCOPY 5018 #endif 5019 #ifdef VLAN_SUPPORT 5020 #endif 5021 #ifdef ADDR_64BITS 5022 #endif 5023 #if ! defined(final_version) 5024 #endif 5025 #ifdef VLAN_SUPPORT 5026 #endif 5027 /* LDV_COMMENT_END_PREP */ 5028 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_start_xmit" from driver structure with callbacks "netdev_ops" */ 5029 ldv_handler_precall(); 5030 start_tx( var_group2, var_group1); 5031 /* LDV_COMMENT_BEGIN_PREP */ 5032 #ifndef final_version 5033 #endif 5034 #ifdef VLAN_SUPPORT 5035 #endif 5036 #ifdef VLAN_SUPPORT 5037 #endif 5038 #ifdef VLAN_SUPPORT 5039 #endif 5040 #ifdef VLAN_SUPPORT 5041 #endif 5042 #ifdef CONFIG_PM 5043 #endif 5044 #ifdef CONFIG_PM 5045 #endif 5046 #ifdef MODULE 5047 #endif 5048 /* LDV_COMMENT_END_PREP */ 5049 5050 5051 5052 5053 } 5054 5055 break; 5056 case 3: { 5057 5058 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 5059 5060 5061 /* content: static void tx_timeout(struct net_device *dev)*/ 5062 /* LDV_COMMENT_BEGIN_PREP */ 5063 #define DRV_NAME "starfire" 5064 #define DRV_VERSION "2.1" 5065 #define DRV_RELDATE "July 6, 2008" 5066 #define HAS_BROKEN_FIRMWARE 5067 #ifdef HAS_BROKEN_FIRMWARE 5068 #define PADDING_MASK 3 5069 #endif 5070 #define ZEROCOPY 5071 #if IS_ENABLED(CONFIG_VLAN_8021Q) 5072 #define VLAN_SUPPORT 5073 #endif 5074 #define PKT_BUF_SZ 1536 5075 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 5076 #else 5077 #endif 5078 #ifdef __sparc__ 5079 #define DMA_BURST_SIZE 64 5080 #else 5081 #define DMA_BURST_SIZE 128 5082 #endif 5083 #define RX_RING_SIZE 256 5084 #define TX_RING_SIZE 32 5085 #define DONE_Q_SIZE 1024 5086 #define QUEUE_ALIGN 256 5087 #if RX_RING_SIZE > 256 5088 #define RX_Q_ENTRIES Rx2048QEntries 5089 #else 5090 #define RX_Q_ENTRIES Rx256QEntries 5091 #endif 5092 #define TX_TIMEOUT (2 * HZ) 5093 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 5094 #define ADDR_64BITS 5095 #define netdrv_addr_t __le64 5096 #define cpu_to_dma(x) cpu_to_le64(x) 5097 #define dma_to_cpu(x) le64_to_cpu(x) 5098 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 5099 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 5100 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 5101 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 5102 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 5103 #else 5104 #define netdrv_addr_t __le32 5105 #define cpu_to_dma(x) cpu_to_le32(x) 5106 #define dma_to_cpu(x) le32_to_cpu(x) 5107 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 5108 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 5109 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 5110 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 5111 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 5112 #endif 5113 #define skb_first_frag_len(skb) skb_headlen(skb) 5114 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 5115 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 5116 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 5117 #ifdef VLAN_SUPPORT 5118 #define RxComplType RxComplType3 5119 #else 5120 #define RxComplType RxComplType2 5121 #endif 5122 #ifdef ADDR_64BITS 5123 #define TX_DESC_TYPE TxDescType2 5124 #else 5125 #define TX_DESC_TYPE TxDescType1 5126 #endif 5127 #define TX_DESC_SPACING TxDescSpaceUnlim 5128 #if 0 5129 #endif 5130 #define PHY_CNT 2 5131 #ifdef VLAN_SUPPORT 5132 #endif 5133 #ifdef VLAN_SUPPORT 5134 #endif 5135 #ifdef VLAN_SUPPORT 5136 #endif 5137 #ifndef MODULE 5138 #endif 5139 #ifdef ZEROCOPY 5140 #endif 5141 #ifdef VLAN_SUPPORT 5142 #endif 5143 #ifdef ADDR_64BITS 5144 #endif 5145 #if ! defined(final_version) 5146 #endif 5147 #ifdef VLAN_SUPPORT 5148 #endif 5149 /* LDV_COMMENT_END_PREP */ 5150 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_tx_timeout" from driver structure with callbacks "netdev_ops" */ 5151 ldv_handler_precall(); 5152 tx_timeout( var_group1); 5153 /* LDV_COMMENT_BEGIN_PREP */ 5154 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 5155 #endif 5156 #ifndef final_version 5157 #endif 5158 #ifdef VLAN_SUPPORT 5159 #endif 5160 #ifdef VLAN_SUPPORT 5161 #endif 5162 #ifdef VLAN_SUPPORT 5163 #endif 5164 #ifdef VLAN_SUPPORT 5165 #endif 5166 #ifdef CONFIG_PM 5167 #endif 5168 #ifdef CONFIG_PM 5169 #endif 5170 #ifdef MODULE 5171 #endif 5172 /* LDV_COMMENT_END_PREP */ 5173 5174 5175 5176 5177 } 5178 5179 break; 5180 case 4: { 5181 5182 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 5183 5184 5185 /* content: static struct net_device_stats *get_stats(struct net_device *dev)*/ 5186 /* LDV_COMMENT_BEGIN_PREP */ 5187 #define DRV_NAME "starfire" 5188 #define DRV_VERSION "2.1" 5189 #define DRV_RELDATE "July 6, 2008" 5190 #define HAS_BROKEN_FIRMWARE 5191 #ifdef HAS_BROKEN_FIRMWARE 5192 #define PADDING_MASK 3 5193 #endif 5194 #define ZEROCOPY 5195 #if IS_ENABLED(CONFIG_VLAN_8021Q) 5196 #define VLAN_SUPPORT 5197 #endif 5198 #define PKT_BUF_SZ 1536 5199 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 5200 #else 5201 #endif 5202 #ifdef __sparc__ 5203 #define DMA_BURST_SIZE 64 5204 #else 5205 #define DMA_BURST_SIZE 128 5206 #endif 5207 #define RX_RING_SIZE 256 5208 #define TX_RING_SIZE 32 5209 #define DONE_Q_SIZE 1024 5210 #define QUEUE_ALIGN 256 5211 #if RX_RING_SIZE > 256 5212 #define RX_Q_ENTRIES Rx2048QEntries 5213 #else 5214 #define RX_Q_ENTRIES Rx256QEntries 5215 #endif 5216 #define TX_TIMEOUT (2 * HZ) 5217 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 5218 #define ADDR_64BITS 5219 #define netdrv_addr_t __le64 5220 #define cpu_to_dma(x) cpu_to_le64(x) 5221 #define dma_to_cpu(x) le64_to_cpu(x) 5222 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 5223 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 5224 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 5225 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 5226 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 5227 #else 5228 #define netdrv_addr_t __le32 5229 #define cpu_to_dma(x) cpu_to_le32(x) 5230 #define dma_to_cpu(x) le32_to_cpu(x) 5231 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 5232 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 5233 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 5234 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 5235 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 5236 #endif 5237 #define skb_first_frag_len(skb) skb_headlen(skb) 5238 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 5239 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 5240 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 5241 #ifdef VLAN_SUPPORT 5242 #define RxComplType RxComplType3 5243 #else 5244 #define RxComplType RxComplType2 5245 #endif 5246 #ifdef ADDR_64BITS 5247 #define TX_DESC_TYPE TxDescType2 5248 #else 5249 #define TX_DESC_TYPE TxDescType1 5250 #endif 5251 #define TX_DESC_SPACING TxDescSpaceUnlim 5252 #if 0 5253 #endif 5254 #define PHY_CNT 2 5255 #ifdef VLAN_SUPPORT 5256 #endif 5257 #ifdef VLAN_SUPPORT 5258 #endif 5259 #ifdef VLAN_SUPPORT 5260 #endif 5261 #ifndef MODULE 5262 #endif 5263 #ifdef ZEROCOPY 5264 #endif 5265 #ifdef VLAN_SUPPORT 5266 #endif 5267 #ifdef ADDR_64BITS 5268 #endif 5269 #if ! defined(final_version) 5270 #endif 5271 #ifdef VLAN_SUPPORT 5272 #endif 5273 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 5274 #endif 5275 #ifndef final_version 5276 #endif 5277 #ifdef VLAN_SUPPORT 5278 #endif 5279 #ifdef VLAN_SUPPORT 5280 #endif 5281 /* LDV_COMMENT_END_PREP */ 5282 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_get_stats" from driver structure with callbacks "netdev_ops" */ 5283 ldv_handler_precall(); 5284 get_stats( var_group1); 5285 /* LDV_COMMENT_BEGIN_PREP */ 5286 #ifdef VLAN_SUPPORT 5287 #endif 5288 #ifdef VLAN_SUPPORT 5289 #endif 5290 #ifdef CONFIG_PM 5291 #endif 5292 #ifdef CONFIG_PM 5293 #endif 5294 #ifdef MODULE 5295 #endif 5296 /* LDV_COMMENT_END_PREP */ 5297 5298 5299 5300 5301 } 5302 5303 break; 5304 case 5: { 5305 5306 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 5307 5308 5309 /* content: static void set_rx_mode(struct net_device *dev)*/ 5310 /* LDV_COMMENT_BEGIN_PREP */ 5311 #define DRV_NAME "starfire" 5312 #define DRV_VERSION "2.1" 5313 #define DRV_RELDATE "July 6, 2008" 5314 #define HAS_BROKEN_FIRMWARE 5315 #ifdef HAS_BROKEN_FIRMWARE 5316 #define PADDING_MASK 3 5317 #endif 5318 #define ZEROCOPY 5319 #if IS_ENABLED(CONFIG_VLAN_8021Q) 5320 #define VLAN_SUPPORT 5321 #endif 5322 #define PKT_BUF_SZ 1536 5323 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 5324 #else 5325 #endif 5326 #ifdef __sparc__ 5327 #define DMA_BURST_SIZE 64 5328 #else 5329 #define DMA_BURST_SIZE 128 5330 #endif 5331 #define RX_RING_SIZE 256 5332 #define TX_RING_SIZE 32 5333 #define DONE_Q_SIZE 1024 5334 #define QUEUE_ALIGN 256 5335 #if RX_RING_SIZE > 256 5336 #define RX_Q_ENTRIES Rx2048QEntries 5337 #else 5338 #define RX_Q_ENTRIES Rx256QEntries 5339 #endif 5340 #define TX_TIMEOUT (2 * HZ) 5341 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 5342 #define ADDR_64BITS 5343 #define netdrv_addr_t __le64 5344 #define cpu_to_dma(x) cpu_to_le64(x) 5345 #define dma_to_cpu(x) le64_to_cpu(x) 5346 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 5347 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 5348 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 5349 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 5350 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 5351 #else 5352 #define netdrv_addr_t __le32 5353 #define cpu_to_dma(x) cpu_to_le32(x) 5354 #define dma_to_cpu(x) le32_to_cpu(x) 5355 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 5356 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 5357 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 5358 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 5359 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 5360 #endif 5361 #define skb_first_frag_len(skb) skb_headlen(skb) 5362 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 5363 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 5364 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 5365 #ifdef VLAN_SUPPORT 5366 #define RxComplType RxComplType3 5367 #else 5368 #define RxComplType RxComplType2 5369 #endif 5370 #ifdef ADDR_64BITS 5371 #define TX_DESC_TYPE TxDescType2 5372 #else 5373 #define TX_DESC_TYPE TxDescType1 5374 #endif 5375 #define TX_DESC_SPACING TxDescSpaceUnlim 5376 #if 0 5377 #endif 5378 #define PHY_CNT 2 5379 #ifdef VLAN_SUPPORT 5380 #endif 5381 #ifdef VLAN_SUPPORT 5382 #endif 5383 #ifdef VLAN_SUPPORT 5384 #endif 5385 #ifndef MODULE 5386 #endif 5387 #ifdef ZEROCOPY 5388 #endif 5389 #ifdef VLAN_SUPPORT 5390 #endif 5391 #ifdef ADDR_64BITS 5392 #endif 5393 #if ! defined(final_version) 5394 #endif 5395 #ifdef VLAN_SUPPORT 5396 #endif 5397 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 5398 #endif 5399 #ifndef final_version 5400 #endif 5401 #ifdef VLAN_SUPPORT 5402 #endif 5403 #ifdef VLAN_SUPPORT 5404 #endif 5405 #ifdef VLAN_SUPPORT 5406 #endif 5407 /* LDV_COMMENT_END_PREP */ 5408 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_set_rx_mode" from driver structure with callbacks "netdev_ops" */ 5409 ldv_handler_precall(); 5410 set_rx_mode( var_group1); 5411 /* LDV_COMMENT_BEGIN_PREP */ 5412 #ifdef CONFIG_PM 5413 #endif 5414 #ifdef CONFIG_PM 5415 #endif 5416 #ifdef MODULE 5417 #endif 5418 /* LDV_COMMENT_END_PREP */ 5419 5420 5421 5422 5423 } 5424 5425 break; 5426 case 6: { 5427 5428 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 5429 5430 5431 /* content: static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)*/ 5432 /* LDV_COMMENT_BEGIN_PREP */ 5433 #define DRV_NAME "starfire" 5434 #define DRV_VERSION "2.1" 5435 #define DRV_RELDATE "July 6, 2008" 5436 #define HAS_BROKEN_FIRMWARE 5437 #ifdef HAS_BROKEN_FIRMWARE 5438 #define PADDING_MASK 3 5439 #endif 5440 #define ZEROCOPY 5441 #if IS_ENABLED(CONFIG_VLAN_8021Q) 5442 #define VLAN_SUPPORT 5443 #endif 5444 #define PKT_BUF_SZ 1536 5445 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 5446 #else 5447 #endif 5448 #ifdef __sparc__ 5449 #define DMA_BURST_SIZE 64 5450 #else 5451 #define DMA_BURST_SIZE 128 5452 #endif 5453 #define RX_RING_SIZE 256 5454 #define TX_RING_SIZE 32 5455 #define DONE_Q_SIZE 1024 5456 #define QUEUE_ALIGN 256 5457 #if RX_RING_SIZE > 256 5458 #define RX_Q_ENTRIES Rx2048QEntries 5459 #else 5460 #define RX_Q_ENTRIES Rx256QEntries 5461 #endif 5462 #define TX_TIMEOUT (2 * HZ) 5463 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 5464 #define ADDR_64BITS 5465 #define netdrv_addr_t __le64 5466 #define cpu_to_dma(x) cpu_to_le64(x) 5467 #define dma_to_cpu(x) le64_to_cpu(x) 5468 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 5469 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 5470 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 5471 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 5472 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 5473 #else 5474 #define netdrv_addr_t __le32 5475 #define cpu_to_dma(x) cpu_to_le32(x) 5476 #define dma_to_cpu(x) le32_to_cpu(x) 5477 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 5478 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 5479 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 5480 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 5481 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 5482 #endif 5483 #define skb_first_frag_len(skb) skb_headlen(skb) 5484 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 5485 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 5486 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 5487 #ifdef VLAN_SUPPORT 5488 #define RxComplType RxComplType3 5489 #else 5490 #define RxComplType RxComplType2 5491 #endif 5492 #ifdef ADDR_64BITS 5493 #define TX_DESC_TYPE TxDescType2 5494 #else 5495 #define TX_DESC_TYPE TxDescType1 5496 #endif 5497 #define TX_DESC_SPACING TxDescSpaceUnlim 5498 #if 0 5499 #endif 5500 #define PHY_CNT 2 5501 #ifdef VLAN_SUPPORT 5502 #endif 5503 #ifdef VLAN_SUPPORT 5504 #endif 5505 #ifdef VLAN_SUPPORT 5506 #endif 5507 #ifndef MODULE 5508 #endif 5509 #ifdef ZEROCOPY 5510 #endif 5511 #ifdef VLAN_SUPPORT 5512 #endif 5513 #ifdef ADDR_64BITS 5514 #endif 5515 #if ! defined(final_version) 5516 #endif 5517 #ifdef VLAN_SUPPORT 5518 #endif 5519 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 5520 #endif 5521 #ifndef final_version 5522 #endif 5523 #ifdef VLAN_SUPPORT 5524 #endif 5525 #ifdef VLAN_SUPPORT 5526 #endif 5527 #ifdef VLAN_SUPPORT 5528 #endif 5529 #ifdef VLAN_SUPPORT 5530 #endif 5531 /* LDV_COMMENT_END_PREP */ 5532 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_do_ioctl" from driver structure with callbacks "netdev_ops" */ 5533 ldv_handler_precall(); 5534 netdev_ioctl( var_group1, var_group3, var_netdev_ioctl_27_p2); 5535 /* LDV_COMMENT_BEGIN_PREP */ 5536 #ifdef CONFIG_PM 5537 #endif 5538 #ifdef CONFIG_PM 5539 #endif 5540 #ifdef MODULE 5541 #endif 5542 /* LDV_COMMENT_END_PREP */ 5543 5544 5545 5546 5547 } 5548 5549 break; 5550 case 7: { 5551 5552 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 5553 5554 5555 /* content: static int netdev_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid)*/ 5556 /* LDV_COMMENT_BEGIN_PREP */ 5557 #define DRV_NAME "starfire" 5558 #define DRV_VERSION "2.1" 5559 #define DRV_RELDATE "July 6, 2008" 5560 #define HAS_BROKEN_FIRMWARE 5561 #ifdef HAS_BROKEN_FIRMWARE 5562 #define PADDING_MASK 3 5563 #endif 5564 #define ZEROCOPY 5565 #if IS_ENABLED(CONFIG_VLAN_8021Q) 5566 #define VLAN_SUPPORT 5567 #endif 5568 #define PKT_BUF_SZ 1536 5569 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 5570 #else 5571 #endif 5572 #ifdef __sparc__ 5573 #define DMA_BURST_SIZE 64 5574 #else 5575 #define DMA_BURST_SIZE 128 5576 #endif 5577 #define RX_RING_SIZE 256 5578 #define TX_RING_SIZE 32 5579 #define DONE_Q_SIZE 1024 5580 #define QUEUE_ALIGN 256 5581 #if RX_RING_SIZE > 256 5582 #define RX_Q_ENTRIES Rx2048QEntries 5583 #else 5584 #define RX_Q_ENTRIES Rx256QEntries 5585 #endif 5586 #define TX_TIMEOUT (2 * HZ) 5587 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 5588 #define ADDR_64BITS 5589 #define netdrv_addr_t __le64 5590 #define cpu_to_dma(x) cpu_to_le64(x) 5591 #define dma_to_cpu(x) le64_to_cpu(x) 5592 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 5593 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 5594 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 5595 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 5596 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 5597 #else 5598 #define netdrv_addr_t __le32 5599 #define cpu_to_dma(x) cpu_to_le32(x) 5600 #define dma_to_cpu(x) le32_to_cpu(x) 5601 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 5602 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 5603 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 5604 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 5605 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 5606 #endif 5607 #define skb_first_frag_len(skb) skb_headlen(skb) 5608 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 5609 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 5610 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 5611 #ifdef VLAN_SUPPORT 5612 #define RxComplType RxComplType3 5613 #else 5614 #define RxComplType RxComplType2 5615 #endif 5616 #ifdef ADDR_64BITS 5617 #define TX_DESC_TYPE TxDescType2 5618 #else 5619 #define TX_DESC_TYPE TxDescType1 5620 #endif 5621 #define TX_DESC_SPACING TxDescSpaceUnlim 5622 #if 0 5623 #endif 5624 #define PHY_CNT 2 5625 #ifdef VLAN_SUPPORT 5626 #endif 5627 #ifdef VLAN_SUPPORT 5628 /* LDV_COMMENT_END_PREP */ 5629 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_vlan_rx_add_vid" from driver structure with callbacks "netdev_ops" */ 5630 ldv_handler_precall(); 5631 netdev_vlan_rx_add_vid( var_group1, var_netdev_vlan_rx_add_vid_0_p1, var_netdev_vlan_rx_add_vid_0_p2); 5632 /* LDV_COMMENT_BEGIN_PREP */ 5633 #endif 5634 #ifdef VLAN_SUPPORT 5635 #endif 5636 #ifndef MODULE 5637 #endif 5638 #ifdef ZEROCOPY 5639 #endif 5640 #ifdef VLAN_SUPPORT 5641 #endif 5642 #ifdef ADDR_64BITS 5643 #endif 5644 #if ! defined(final_version) 5645 #endif 5646 #ifdef VLAN_SUPPORT 5647 #endif 5648 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 5649 #endif 5650 #ifndef final_version 5651 #endif 5652 #ifdef VLAN_SUPPORT 5653 #endif 5654 #ifdef VLAN_SUPPORT 5655 #endif 5656 #ifdef VLAN_SUPPORT 5657 #endif 5658 #ifdef VLAN_SUPPORT 5659 #endif 5660 #ifdef CONFIG_PM 5661 #endif 5662 #ifdef CONFIG_PM 5663 #endif 5664 #ifdef MODULE 5665 #endif 5666 /* LDV_COMMENT_END_PREP */ 5667 5668 5669 5670 5671 } 5672 5673 break; 5674 case 8: { 5675 5676 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 5677 5678 5679 /* content: static int netdev_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, u16 vid)*/ 5680 /* LDV_COMMENT_BEGIN_PREP */ 5681 #define DRV_NAME "starfire" 5682 #define DRV_VERSION "2.1" 5683 #define DRV_RELDATE "July 6, 2008" 5684 #define HAS_BROKEN_FIRMWARE 5685 #ifdef HAS_BROKEN_FIRMWARE 5686 #define PADDING_MASK 3 5687 #endif 5688 #define ZEROCOPY 5689 #if IS_ENABLED(CONFIG_VLAN_8021Q) 5690 #define VLAN_SUPPORT 5691 #endif 5692 #define PKT_BUF_SZ 1536 5693 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 5694 #else 5695 #endif 5696 #ifdef __sparc__ 5697 #define DMA_BURST_SIZE 64 5698 #else 5699 #define DMA_BURST_SIZE 128 5700 #endif 5701 #define RX_RING_SIZE 256 5702 #define TX_RING_SIZE 32 5703 #define DONE_Q_SIZE 1024 5704 #define QUEUE_ALIGN 256 5705 #if RX_RING_SIZE > 256 5706 #define RX_Q_ENTRIES Rx2048QEntries 5707 #else 5708 #define RX_Q_ENTRIES Rx256QEntries 5709 #endif 5710 #define TX_TIMEOUT (2 * HZ) 5711 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 5712 #define ADDR_64BITS 5713 #define netdrv_addr_t __le64 5714 #define cpu_to_dma(x) cpu_to_le64(x) 5715 #define dma_to_cpu(x) le64_to_cpu(x) 5716 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 5717 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 5718 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 5719 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 5720 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 5721 #else 5722 #define netdrv_addr_t __le32 5723 #define cpu_to_dma(x) cpu_to_le32(x) 5724 #define dma_to_cpu(x) le32_to_cpu(x) 5725 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 5726 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 5727 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 5728 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 5729 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 5730 #endif 5731 #define skb_first_frag_len(skb) skb_headlen(skb) 5732 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 5733 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 5734 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 5735 #ifdef VLAN_SUPPORT 5736 #define RxComplType RxComplType3 5737 #else 5738 #define RxComplType RxComplType2 5739 #endif 5740 #ifdef ADDR_64BITS 5741 #define TX_DESC_TYPE TxDescType2 5742 #else 5743 #define TX_DESC_TYPE TxDescType1 5744 #endif 5745 #define TX_DESC_SPACING TxDescSpaceUnlim 5746 #if 0 5747 #endif 5748 #define PHY_CNT 2 5749 #ifdef VLAN_SUPPORT 5750 #endif 5751 #ifdef VLAN_SUPPORT 5752 /* LDV_COMMENT_END_PREP */ 5753 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_vlan_rx_kill_vid" from driver structure with callbacks "netdev_ops" */ 5754 ldv_handler_precall(); 5755 netdev_vlan_rx_kill_vid( var_group1, var_netdev_vlan_rx_kill_vid_1_p1, var_netdev_vlan_rx_kill_vid_1_p2); 5756 /* LDV_COMMENT_BEGIN_PREP */ 5757 #endif 5758 #ifdef VLAN_SUPPORT 5759 #endif 5760 #ifndef MODULE 5761 #endif 5762 #ifdef ZEROCOPY 5763 #endif 5764 #ifdef VLAN_SUPPORT 5765 #endif 5766 #ifdef ADDR_64BITS 5767 #endif 5768 #if ! defined(final_version) 5769 #endif 5770 #ifdef VLAN_SUPPORT 5771 #endif 5772 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 5773 #endif 5774 #ifndef final_version 5775 #endif 5776 #ifdef VLAN_SUPPORT 5777 #endif 5778 #ifdef VLAN_SUPPORT 5779 #endif 5780 #ifdef VLAN_SUPPORT 5781 #endif 5782 #ifdef VLAN_SUPPORT 5783 #endif 5784 #ifdef CONFIG_PM 5785 #endif 5786 #ifdef CONFIG_PM 5787 #endif 5788 #ifdef MODULE 5789 #endif 5790 /* LDV_COMMENT_END_PREP */ 5791 5792 5793 5794 5795 } 5796 5797 break; 5798 case 9: { 5799 5800 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 5801 5802 5803 /* content: static int check_if_running(struct net_device *dev)*/ 5804 /* LDV_COMMENT_BEGIN_PREP */ 5805 #define DRV_NAME "starfire" 5806 #define DRV_VERSION "2.1" 5807 #define DRV_RELDATE "July 6, 2008" 5808 #define HAS_BROKEN_FIRMWARE 5809 #ifdef HAS_BROKEN_FIRMWARE 5810 #define PADDING_MASK 3 5811 #endif 5812 #define ZEROCOPY 5813 #if IS_ENABLED(CONFIG_VLAN_8021Q) 5814 #define VLAN_SUPPORT 5815 #endif 5816 #define PKT_BUF_SZ 1536 5817 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 5818 #else 5819 #endif 5820 #ifdef __sparc__ 5821 #define DMA_BURST_SIZE 64 5822 #else 5823 #define DMA_BURST_SIZE 128 5824 #endif 5825 #define RX_RING_SIZE 256 5826 #define TX_RING_SIZE 32 5827 #define DONE_Q_SIZE 1024 5828 #define QUEUE_ALIGN 256 5829 #if RX_RING_SIZE > 256 5830 #define RX_Q_ENTRIES Rx2048QEntries 5831 #else 5832 #define RX_Q_ENTRIES Rx256QEntries 5833 #endif 5834 #define TX_TIMEOUT (2 * HZ) 5835 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 5836 #define ADDR_64BITS 5837 #define netdrv_addr_t __le64 5838 #define cpu_to_dma(x) cpu_to_le64(x) 5839 #define dma_to_cpu(x) le64_to_cpu(x) 5840 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 5841 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 5842 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 5843 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 5844 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 5845 #else 5846 #define netdrv_addr_t __le32 5847 #define cpu_to_dma(x) cpu_to_le32(x) 5848 #define dma_to_cpu(x) le32_to_cpu(x) 5849 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 5850 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 5851 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 5852 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 5853 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 5854 #endif 5855 #define skb_first_frag_len(skb) skb_headlen(skb) 5856 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 5857 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 5858 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 5859 #ifdef VLAN_SUPPORT 5860 #define RxComplType RxComplType3 5861 #else 5862 #define RxComplType RxComplType2 5863 #endif 5864 #ifdef ADDR_64BITS 5865 #define TX_DESC_TYPE TxDescType2 5866 #else 5867 #define TX_DESC_TYPE TxDescType1 5868 #endif 5869 #define TX_DESC_SPACING TxDescSpaceUnlim 5870 #if 0 5871 #endif 5872 #define PHY_CNT 2 5873 #ifdef VLAN_SUPPORT 5874 #endif 5875 #ifdef VLAN_SUPPORT 5876 #endif 5877 #ifdef VLAN_SUPPORT 5878 #endif 5879 #ifndef MODULE 5880 #endif 5881 #ifdef ZEROCOPY 5882 #endif 5883 #ifdef VLAN_SUPPORT 5884 #endif 5885 #ifdef ADDR_64BITS 5886 #endif 5887 #if ! defined(final_version) 5888 #endif 5889 #ifdef VLAN_SUPPORT 5890 #endif 5891 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 5892 #endif 5893 #ifndef final_version 5894 #endif 5895 #ifdef VLAN_SUPPORT 5896 #endif 5897 #ifdef VLAN_SUPPORT 5898 #endif 5899 #ifdef VLAN_SUPPORT 5900 #endif 5901 #ifdef VLAN_SUPPORT 5902 #endif 5903 /* LDV_COMMENT_END_PREP */ 5904 /* LDV_COMMENT_FUNCTION_CALL Function from field "begin" from driver structure with callbacks "ethtool_ops" */ 5905 ldv_handler_precall(); 5906 check_if_running( var_group1); 5907 /* LDV_COMMENT_BEGIN_PREP */ 5908 #ifdef CONFIG_PM 5909 #endif 5910 #ifdef CONFIG_PM 5911 #endif 5912 #ifdef MODULE 5913 #endif 5914 /* LDV_COMMENT_END_PREP */ 5915 5916 5917 5918 5919 } 5920 5921 break; 5922 case 10: { 5923 5924 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 5925 5926 5927 /* content: static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)*/ 5928 /* LDV_COMMENT_BEGIN_PREP */ 5929 #define DRV_NAME "starfire" 5930 #define DRV_VERSION "2.1" 5931 #define DRV_RELDATE "July 6, 2008" 5932 #define HAS_BROKEN_FIRMWARE 5933 #ifdef HAS_BROKEN_FIRMWARE 5934 #define PADDING_MASK 3 5935 #endif 5936 #define ZEROCOPY 5937 #if IS_ENABLED(CONFIG_VLAN_8021Q) 5938 #define VLAN_SUPPORT 5939 #endif 5940 #define PKT_BUF_SZ 1536 5941 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 5942 #else 5943 #endif 5944 #ifdef __sparc__ 5945 #define DMA_BURST_SIZE 64 5946 #else 5947 #define DMA_BURST_SIZE 128 5948 #endif 5949 #define RX_RING_SIZE 256 5950 #define TX_RING_SIZE 32 5951 #define DONE_Q_SIZE 1024 5952 #define QUEUE_ALIGN 256 5953 #if RX_RING_SIZE > 256 5954 #define RX_Q_ENTRIES Rx2048QEntries 5955 #else 5956 #define RX_Q_ENTRIES Rx256QEntries 5957 #endif 5958 #define TX_TIMEOUT (2 * HZ) 5959 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 5960 #define ADDR_64BITS 5961 #define netdrv_addr_t __le64 5962 #define cpu_to_dma(x) cpu_to_le64(x) 5963 #define dma_to_cpu(x) le64_to_cpu(x) 5964 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 5965 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 5966 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 5967 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 5968 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 5969 #else 5970 #define netdrv_addr_t __le32 5971 #define cpu_to_dma(x) cpu_to_le32(x) 5972 #define dma_to_cpu(x) le32_to_cpu(x) 5973 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 5974 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 5975 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 5976 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 5977 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 5978 #endif 5979 #define skb_first_frag_len(skb) skb_headlen(skb) 5980 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 5981 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 5982 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 5983 #ifdef VLAN_SUPPORT 5984 #define RxComplType RxComplType3 5985 #else 5986 #define RxComplType RxComplType2 5987 #endif 5988 #ifdef ADDR_64BITS 5989 #define TX_DESC_TYPE TxDescType2 5990 #else 5991 #define TX_DESC_TYPE TxDescType1 5992 #endif 5993 #define TX_DESC_SPACING TxDescSpaceUnlim 5994 #if 0 5995 #endif 5996 #define PHY_CNT 2 5997 #ifdef VLAN_SUPPORT 5998 #endif 5999 #ifdef VLAN_SUPPORT 6000 #endif 6001 #ifdef VLAN_SUPPORT 6002 #endif 6003 #ifndef MODULE 6004 #endif 6005 #ifdef ZEROCOPY 6006 #endif 6007 #ifdef VLAN_SUPPORT 6008 #endif 6009 #ifdef ADDR_64BITS 6010 #endif 6011 #if ! defined(final_version) 6012 #endif 6013 #ifdef VLAN_SUPPORT 6014 #endif 6015 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 6016 #endif 6017 #ifndef final_version 6018 #endif 6019 #ifdef VLAN_SUPPORT 6020 #endif 6021 #ifdef VLAN_SUPPORT 6022 #endif 6023 #ifdef VLAN_SUPPORT 6024 #endif 6025 #ifdef VLAN_SUPPORT 6026 #endif 6027 /* LDV_COMMENT_END_PREP */ 6028 /* LDV_COMMENT_FUNCTION_CALL Function from field "get_drvinfo" from driver structure with callbacks "ethtool_ops" */ 6029 ldv_handler_precall(); 6030 get_drvinfo( var_group1, var_group4); 6031 /* LDV_COMMENT_BEGIN_PREP */ 6032 #ifdef CONFIG_PM 6033 #endif 6034 #ifdef CONFIG_PM 6035 #endif 6036 #ifdef MODULE 6037 #endif 6038 /* LDV_COMMENT_END_PREP */ 6039 6040 6041 6042 6043 } 6044 6045 break; 6046 case 11: { 6047 6048 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 6049 6050 6051 /* content: static int nway_reset(struct net_device *dev)*/ 6052 /* LDV_COMMENT_BEGIN_PREP */ 6053 #define DRV_NAME "starfire" 6054 #define DRV_VERSION "2.1" 6055 #define DRV_RELDATE "July 6, 2008" 6056 #define HAS_BROKEN_FIRMWARE 6057 #ifdef HAS_BROKEN_FIRMWARE 6058 #define PADDING_MASK 3 6059 #endif 6060 #define ZEROCOPY 6061 #if IS_ENABLED(CONFIG_VLAN_8021Q) 6062 #define VLAN_SUPPORT 6063 #endif 6064 #define PKT_BUF_SZ 1536 6065 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 6066 #else 6067 #endif 6068 #ifdef __sparc__ 6069 #define DMA_BURST_SIZE 64 6070 #else 6071 #define DMA_BURST_SIZE 128 6072 #endif 6073 #define RX_RING_SIZE 256 6074 #define TX_RING_SIZE 32 6075 #define DONE_Q_SIZE 1024 6076 #define QUEUE_ALIGN 256 6077 #if RX_RING_SIZE > 256 6078 #define RX_Q_ENTRIES Rx2048QEntries 6079 #else 6080 #define RX_Q_ENTRIES Rx256QEntries 6081 #endif 6082 #define TX_TIMEOUT (2 * HZ) 6083 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 6084 #define ADDR_64BITS 6085 #define netdrv_addr_t __le64 6086 #define cpu_to_dma(x) cpu_to_le64(x) 6087 #define dma_to_cpu(x) le64_to_cpu(x) 6088 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 6089 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 6090 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 6091 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 6092 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 6093 #else 6094 #define netdrv_addr_t __le32 6095 #define cpu_to_dma(x) cpu_to_le32(x) 6096 #define dma_to_cpu(x) le32_to_cpu(x) 6097 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 6098 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 6099 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 6100 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 6101 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 6102 #endif 6103 #define skb_first_frag_len(skb) skb_headlen(skb) 6104 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 6105 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 6106 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 6107 #ifdef VLAN_SUPPORT 6108 #define RxComplType RxComplType3 6109 #else 6110 #define RxComplType RxComplType2 6111 #endif 6112 #ifdef ADDR_64BITS 6113 #define TX_DESC_TYPE TxDescType2 6114 #else 6115 #define TX_DESC_TYPE TxDescType1 6116 #endif 6117 #define TX_DESC_SPACING TxDescSpaceUnlim 6118 #if 0 6119 #endif 6120 #define PHY_CNT 2 6121 #ifdef VLAN_SUPPORT 6122 #endif 6123 #ifdef VLAN_SUPPORT 6124 #endif 6125 #ifdef VLAN_SUPPORT 6126 #endif 6127 #ifndef MODULE 6128 #endif 6129 #ifdef ZEROCOPY 6130 #endif 6131 #ifdef VLAN_SUPPORT 6132 #endif 6133 #ifdef ADDR_64BITS 6134 #endif 6135 #if ! defined(final_version) 6136 #endif 6137 #ifdef VLAN_SUPPORT 6138 #endif 6139 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 6140 #endif 6141 #ifndef final_version 6142 #endif 6143 #ifdef VLAN_SUPPORT 6144 #endif 6145 #ifdef VLAN_SUPPORT 6146 #endif 6147 #ifdef VLAN_SUPPORT 6148 #endif 6149 #ifdef VLAN_SUPPORT 6150 #endif 6151 /* LDV_COMMENT_END_PREP */ 6152 /* LDV_COMMENT_FUNCTION_CALL Function from field "nway_reset" from driver structure with callbacks "ethtool_ops" */ 6153 ldv_handler_precall(); 6154 nway_reset( var_group1); 6155 /* LDV_COMMENT_BEGIN_PREP */ 6156 #ifdef CONFIG_PM 6157 #endif 6158 #ifdef CONFIG_PM 6159 #endif 6160 #ifdef MODULE 6161 #endif 6162 /* LDV_COMMENT_END_PREP */ 6163 6164 6165 6166 6167 } 6168 6169 break; 6170 case 12: { 6171 6172 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 6173 6174 6175 /* content: static u32 get_link(struct net_device *dev)*/ 6176 /* LDV_COMMENT_BEGIN_PREP */ 6177 #define DRV_NAME "starfire" 6178 #define DRV_VERSION "2.1" 6179 #define DRV_RELDATE "July 6, 2008" 6180 #define HAS_BROKEN_FIRMWARE 6181 #ifdef HAS_BROKEN_FIRMWARE 6182 #define PADDING_MASK 3 6183 #endif 6184 #define ZEROCOPY 6185 #if IS_ENABLED(CONFIG_VLAN_8021Q) 6186 #define VLAN_SUPPORT 6187 #endif 6188 #define PKT_BUF_SZ 1536 6189 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 6190 #else 6191 #endif 6192 #ifdef __sparc__ 6193 #define DMA_BURST_SIZE 64 6194 #else 6195 #define DMA_BURST_SIZE 128 6196 #endif 6197 #define RX_RING_SIZE 256 6198 #define TX_RING_SIZE 32 6199 #define DONE_Q_SIZE 1024 6200 #define QUEUE_ALIGN 256 6201 #if RX_RING_SIZE > 256 6202 #define RX_Q_ENTRIES Rx2048QEntries 6203 #else 6204 #define RX_Q_ENTRIES Rx256QEntries 6205 #endif 6206 #define TX_TIMEOUT (2 * HZ) 6207 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 6208 #define ADDR_64BITS 6209 #define netdrv_addr_t __le64 6210 #define cpu_to_dma(x) cpu_to_le64(x) 6211 #define dma_to_cpu(x) le64_to_cpu(x) 6212 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 6213 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 6214 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 6215 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 6216 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 6217 #else 6218 #define netdrv_addr_t __le32 6219 #define cpu_to_dma(x) cpu_to_le32(x) 6220 #define dma_to_cpu(x) le32_to_cpu(x) 6221 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 6222 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 6223 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 6224 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 6225 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 6226 #endif 6227 #define skb_first_frag_len(skb) skb_headlen(skb) 6228 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 6229 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 6230 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 6231 #ifdef VLAN_SUPPORT 6232 #define RxComplType RxComplType3 6233 #else 6234 #define RxComplType RxComplType2 6235 #endif 6236 #ifdef ADDR_64BITS 6237 #define TX_DESC_TYPE TxDescType2 6238 #else 6239 #define TX_DESC_TYPE TxDescType1 6240 #endif 6241 #define TX_DESC_SPACING TxDescSpaceUnlim 6242 #if 0 6243 #endif 6244 #define PHY_CNT 2 6245 #ifdef VLAN_SUPPORT 6246 #endif 6247 #ifdef VLAN_SUPPORT 6248 #endif 6249 #ifdef VLAN_SUPPORT 6250 #endif 6251 #ifndef MODULE 6252 #endif 6253 #ifdef ZEROCOPY 6254 #endif 6255 #ifdef VLAN_SUPPORT 6256 #endif 6257 #ifdef ADDR_64BITS 6258 #endif 6259 #if ! defined(final_version) 6260 #endif 6261 #ifdef VLAN_SUPPORT 6262 #endif 6263 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 6264 #endif 6265 #ifndef final_version 6266 #endif 6267 #ifdef VLAN_SUPPORT 6268 #endif 6269 #ifdef VLAN_SUPPORT 6270 #endif 6271 #ifdef VLAN_SUPPORT 6272 #endif 6273 #ifdef VLAN_SUPPORT 6274 #endif 6275 /* LDV_COMMENT_END_PREP */ 6276 /* LDV_COMMENT_FUNCTION_CALL Function from field "get_link" from driver structure with callbacks "ethtool_ops" */ 6277 ldv_handler_precall(); 6278 get_link( var_group1); 6279 /* LDV_COMMENT_BEGIN_PREP */ 6280 #ifdef CONFIG_PM 6281 #endif 6282 #ifdef CONFIG_PM 6283 #endif 6284 #ifdef MODULE 6285 #endif 6286 /* LDV_COMMENT_END_PREP */ 6287 6288 6289 6290 6291 } 6292 6293 break; 6294 case 13: { 6295 6296 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 6297 6298 6299 /* content: static u32 get_msglevel(struct net_device *dev)*/ 6300 /* LDV_COMMENT_BEGIN_PREP */ 6301 #define DRV_NAME "starfire" 6302 #define DRV_VERSION "2.1" 6303 #define DRV_RELDATE "July 6, 2008" 6304 #define HAS_BROKEN_FIRMWARE 6305 #ifdef HAS_BROKEN_FIRMWARE 6306 #define PADDING_MASK 3 6307 #endif 6308 #define ZEROCOPY 6309 #if IS_ENABLED(CONFIG_VLAN_8021Q) 6310 #define VLAN_SUPPORT 6311 #endif 6312 #define PKT_BUF_SZ 1536 6313 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 6314 #else 6315 #endif 6316 #ifdef __sparc__ 6317 #define DMA_BURST_SIZE 64 6318 #else 6319 #define DMA_BURST_SIZE 128 6320 #endif 6321 #define RX_RING_SIZE 256 6322 #define TX_RING_SIZE 32 6323 #define DONE_Q_SIZE 1024 6324 #define QUEUE_ALIGN 256 6325 #if RX_RING_SIZE > 256 6326 #define RX_Q_ENTRIES Rx2048QEntries 6327 #else 6328 #define RX_Q_ENTRIES Rx256QEntries 6329 #endif 6330 #define TX_TIMEOUT (2 * HZ) 6331 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 6332 #define ADDR_64BITS 6333 #define netdrv_addr_t __le64 6334 #define cpu_to_dma(x) cpu_to_le64(x) 6335 #define dma_to_cpu(x) le64_to_cpu(x) 6336 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 6337 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 6338 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 6339 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 6340 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 6341 #else 6342 #define netdrv_addr_t __le32 6343 #define cpu_to_dma(x) cpu_to_le32(x) 6344 #define dma_to_cpu(x) le32_to_cpu(x) 6345 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 6346 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 6347 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 6348 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 6349 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 6350 #endif 6351 #define skb_first_frag_len(skb) skb_headlen(skb) 6352 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 6353 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 6354 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 6355 #ifdef VLAN_SUPPORT 6356 #define RxComplType RxComplType3 6357 #else 6358 #define RxComplType RxComplType2 6359 #endif 6360 #ifdef ADDR_64BITS 6361 #define TX_DESC_TYPE TxDescType2 6362 #else 6363 #define TX_DESC_TYPE TxDescType1 6364 #endif 6365 #define TX_DESC_SPACING TxDescSpaceUnlim 6366 #if 0 6367 #endif 6368 #define PHY_CNT 2 6369 #ifdef VLAN_SUPPORT 6370 #endif 6371 #ifdef VLAN_SUPPORT 6372 #endif 6373 #ifdef VLAN_SUPPORT 6374 #endif 6375 #ifndef MODULE 6376 #endif 6377 #ifdef ZEROCOPY 6378 #endif 6379 #ifdef VLAN_SUPPORT 6380 #endif 6381 #ifdef ADDR_64BITS 6382 #endif 6383 #if ! defined(final_version) 6384 #endif 6385 #ifdef VLAN_SUPPORT 6386 #endif 6387 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 6388 #endif 6389 #ifndef final_version 6390 #endif 6391 #ifdef VLAN_SUPPORT 6392 #endif 6393 #ifdef VLAN_SUPPORT 6394 #endif 6395 #ifdef VLAN_SUPPORT 6396 #endif 6397 #ifdef VLAN_SUPPORT 6398 #endif 6399 /* LDV_COMMENT_END_PREP */ 6400 /* LDV_COMMENT_FUNCTION_CALL Function from field "get_msglevel" from driver structure with callbacks "ethtool_ops" */ 6401 ldv_handler_precall(); 6402 get_msglevel( var_group1); 6403 /* LDV_COMMENT_BEGIN_PREP */ 6404 #ifdef CONFIG_PM 6405 #endif 6406 #ifdef CONFIG_PM 6407 #endif 6408 #ifdef MODULE 6409 #endif 6410 /* LDV_COMMENT_END_PREP */ 6411 6412 6413 6414 6415 } 6416 6417 break; 6418 case 14: { 6419 6420 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 6421 6422 6423 /* content: static void set_msglevel(struct net_device *dev, u32 val)*/ 6424 /* LDV_COMMENT_BEGIN_PREP */ 6425 #define DRV_NAME "starfire" 6426 #define DRV_VERSION "2.1" 6427 #define DRV_RELDATE "July 6, 2008" 6428 #define HAS_BROKEN_FIRMWARE 6429 #ifdef HAS_BROKEN_FIRMWARE 6430 #define PADDING_MASK 3 6431 #endif 6432 #define ZEROCOPY 6433 #if IS_ENABLED(CONFIG_VLAN_8021Q) 6434 #define VLAN_SUPPORT 6435 #endif 6436 #define PKT_BUF_SZ 1536 6437 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 6438 #else 6439 #endif 6440 #ifdef __sparc__ 6441 #define DMA_BURST_SIZE 64 6442 #else 6443 #define DMA_BURST_SIZE 128 6444 #endif 6445 #define RX_RING_SIZE 256 6446 #define TX_RING_SIZE 32 6447 #define DONE_Q_SIZE 1024 6448 #define QUEUE_ALIGN 256 6449 #if RX_RING_SIZE > 256 6450 #define RX_Q_ENTRIES Rx2048QEntries 6451 #else 6452 #define RX_Q_ENTRIES Rx256QEntries 6453 #endif 6454 #define TX_TIMEOUT (2 * HZ) 6455 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 6456 #define ADDR_64BITS 6457 #define netdrv_addr_t __le64 6458 #define cpu_to_dma(x) cpu_to_le64(x) 6459 #define dma_to_cpu(x) le64_to_cpu(x) 6460 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 6461 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 6462 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 6463 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 6464 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 6465 #else 6466 #define netdrv_addr_t __le32 6467 #define cpu_to_dma(x) cpu_to_le32(x) 6468 #define dma_to_cpu(x) le32_to_cpu(x) 6469 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 6470 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 6471 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 6472 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 6473 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 6474 #endif 6475 #define skb_first_frag_len(skb) skb_headlen(skb) 6476 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 6477 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 6478 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 6479 #ifdef VLAN_SUPPORT 6480 #define RxComplType RxComplType3 6481 #else 6482 #define RxComplType RxComplType2 6483 #endif 6484 #ifdef ADDR_64BITS 6485 #define TX_DESC_TYPE TxDescType2 6486 #else 6487 #define TX_DESC_TYPE TxDescType1 6488 #endif 6489 #define TX_DESC_SPACING TxDescSpaceUnlim 6490 #if 0 6491 #endif 6492 #define PHY_CNT 2 6493 #ifdef VLAN_SUPPORT 6494 #endif 6495 #ifdef VLAN_SUPPORT 6496 #endif 6497 #ifdef VLAN_SUPPORT 6498 #endif 6499 #ifndef MODULE 6500 #endif 6501 #ifdef ZEROCOPY 6502 #endif 6503 #ifdef VLAN_SUPPORT 6504 #endif 6505 #ifdef ADDR_64BITS 6506 #endif 6507 #if ! defined(final_version) 6508 #endif 6509 #ifdef VLAN_SUPPORT 6510 #endif 6511 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 6512 #endif 6513 #ifndef final_version 6514 #endif 6515 #ifdef VLAN_SUPPORT 6516 #endif 6517 #ifdef VLAN_SUPPORT 6518 #endif 6519 #ifdef VLAN_SUPPORT 6520 #endif 6521 #ifdef VLAN_SUPPORT 6522 #endif 6523 /* LDV_COMMENT_END_PREP */ 6524 /* LDV_COMMENT_FUNCTION_CALL Function from field "set_msglevel" from driver structure with callbacks "ethtool_ops" */ 6525 ldv_handler_precall(); 6526 set_msglevel( var_group1, var_set_msglevel_26_p1); 6527 /* LDV_COMMENT_BEGIN_PREP */ 6528 #ifdef CONFIG_PM 6529 #endif 6530 #ifdef CONFIG_PM 6531 #endif 6532 #ifdef MODULE 6533 #endif 6534 /* LDV_COMMENT_END_PREP */ 6535 6536 6537 6538 6539 } 6540 6541 break; 6542 case 15: { 6543 6544 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 6545 6546 6547 /* content: static int get_link_ksettings(struct net_device *dev, struct ethtool_link_ksettings *cmd)*/ 6548 /* LDV_COMMENT_BEGIN_PREP */ 6549 #define DRV_NAME "starfire" 6550 #define DRV_VERSION "2.1" 6551 #define DRV_RELDATE "July 6, 2008" 6552 #define HAS_BROKEN_FIRMWARE 6553 #ifdef HAS_BROKEN_FIRMWARE 6554 #define PADDING_MASK 3 6555 #endif 6556 #define ZEROCOPY 6557 #if IS_ENABLED(CONFIG_VLAN_8021Q) 6558 #define VLAN_SUPPORT 6559 #endif 6560 #define PKT_BUF_SZ 1536 6561 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 6562 #else 6563 #endif 6564 #ifdef __sparc__ 6565 #define DMA_BURST_SIZE 64 6566 #else 6567 #define DMA_BURST_SIZE 128 6568 #endif 6569 #define RX_RING_SIZE 256 6570 #define TX_RING_SIZE 32 6571 #define DONE_Q_SIZE 1024 6572 #define QUEUE_ALIGN 256 6573 #if RX_RING_SIZE > 256 6574 #define RX_Q_ENTRIES Rx2048QEntries 6575 #else 6576 #define RX_Q_ENTRIES Rx256QEntries 6577 #endif 6578 #define TX_TIMEOUT (2 * HZ) 6579 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 6580 #define ADDR_64BITS 6581 #define netdrv_addr_t __le64 6582 #define cpu_to_dma(x) cpu_to_le64(x) 6583 #define dma_to_cpu(x) le64_to_cpu(x) 6584 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 6585 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 6586 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 6587 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 6588 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 6589 #else 6590 #define netdrv_addr_t __le32 6591 #define cpu_to_dma(x) cpu_to_le32(x) 6592 #define dma_to_cpu(x) le32_to_cpu(x) 6593 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 6594 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 6595 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 6596 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 6597 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 6598 #endif 6599 #define skb_first_frag_len(skb) skb_headlen(skb) 6600 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 6601 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 6602 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 6603 #ifdef VLAN_SUPPORT 6604 #define RxComplType RxComplType3 6605 #else 6606 #define RxComplType RxComplType2 6607 #endif 6608 #ifdef ADDR_64BITS 6609 #define TX_DESC_TYPE TxDescType2 6610 #else 6611 #define TX_DESC_TYPE TxDescType1 6612 #endif 6613 #define TX_DESC_SPACING TxDescSpaceUnlim 6614 #if 0 6615 #endif 6616 #define PHY_CNT 2 6617 #ifdef VLAN_SUPPORT 6618 #endif 6619 #ifdef VLAN_SUPPORT 6620 #endif 6621 #ifdef VLAN_SUPPORT 6622 #endif 6623 #ifndef MODULE 6624 #endif 6625 #ifdef ZEROCOPY 6626 #endif 6627 #ifdef VLAN_SUPPORT 6628 #endif 6629 #ifdef ADDR_64BITS 6630 #endif 6631 #if ! defined(final_version) 6632 #endif 6633 #ifdef VLAN_SUPPORT 6634 #endif 6635 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 6636 #endif 6637 #ifndef final_version 6638 #endif 6639 #ifdef VLAN_SUPPORT 6640 #endif 6641 #ifdef VLAN_SUPPORT 6642 #endif 6643 #ifdef VLAN_SUPPORT 6644 #endif 6645 #ifdef VLAN_SUPPORT 6646 #endif 6647 /* LDV_COMMENT_END_PREP */ 6648 /* LDV_COMMENT_FUNCTION_CALL Function from field "get_link_ksettings" from driver structure with callbacks "ethtool_ops" */ 6649 ldv_handler_precall(); 6650 get_link_ksettings( var_group1, var_group5); 6651 /* LDV_COMMENT_BEGIN_PREP */ 6652 #ifdef CONFIG_PM 6653 #endif 6654 #ifdef CONFIG_PM 6655 #endif 6656 #ifdef MODULE 6657 #endif 6658 /* LDV_COMMENT_END_PREP */ 6659 6660 6661 6662 6663 } 6664 6665 break; 6666 case 16: { 6667 6668 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 6669 6670 6671 /* content: static int set_link_ksettings(struct net_device *dev, const struct ethtool_link_ksettings *cmd)*/ 6672 /* LDV_COMMENT_BEGIN_PREP */ 6673 #define DRV_NAME "starfire" 6674 #define DRV_VERSION "2.1" 6675 #define DRV_RELDATE "July 6, 2008" 6676 #define HAS_BROKEN_FIRMWARE 6677 #ifdef HAS_BROKEN_FIRMWARE 6678 #define PADDING_MASK 3 6679 #endif 6680 #define ZEROCOPY 6681 #if IS_ENABLED(CONFIG_VLAN_8021Q) 6682 #define VLAN_SUPPORT 6683 #endif 6684 #define PKT_BUF_SZ 1536 6685 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 6686 #else 6687 #endif 6688 #ifdef __sparc__ 6689 #define DMA_BURST_SIZE 64 6690 #else 6691 #define DMA_BURST_SIZE 128 6692 #endif 6693 #define RX_RING_SIZE 256 6694 #define TX_RING_SIZE 32 6695 #define DONE_Q_SIZE 1024 6696 #define QUEUE_ALIGN 256 6697 #if RX_RING_SIZE > 256 6698 #define RX_Q_ENTRIES Rx2048QEntries 6699 #else 6700 #define RX_Q_ENTRIES Rx256QEntries 6701 #endif 6702 #define TX_TIMEOUT (2 * HZ) 6703 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 6704 #define ADDR_64BITS 6705 #define netdrv_addr_t __le64 6706 #define cpu_to_dma(x) cpu_to_le64(x) 6707 #define dma_to_cpu(x) le64_to_cpu(x) 6708 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 6709 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 6710 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 6711 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 6712 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 6713 #else 6714 #define netdrv_addr_t __le32 6715 #define cpu_to_dma(x) cpu_to_le32(x) 6716 #define dma_to_cpu(x) le32_to_cpu(x) 6717 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 6718 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 6719 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 6720 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 6721 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 6722 #endif 6723 #define skb_first_frag_len(skb) skb_headlen(skb) 6724 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 6725 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 6726 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 6727 #ifdef VLAN_SUPPORT 6728 #define RxComplType RxComplType3 6729 #else 6730 #define RxComplType RxComplType2 6731 #endif 6732 #ifdef ADDR_64BITS 6733 #define TX_DESC_TYPE TxDescType2 6734 #else 6735 #define TX_DESC_TYPE TxDescType1 6736 #endif 6737 #define TX_DESC_SPACING TxDescSpaceUnlim 6738 #if 0 6739 #endif 6740 #define PHY_CNT 2 6741 #ifdef VLAN_SUPPORT 6742 #endif 6743 #ifdef VLAN_SUPPORT 6744 #endif 6745 #ifdef VLAN_SUPPORT 6746 #endif 6747 #ifndef MODULE 6748 #endif 6749 #ifdef ZEROCOPY 6750 #endif 6751 #ifdef VLAN_SUPPORT 6752 #endif 6753 #ifdef ADDR_64BITS 6754 #endif 6755 #if ! defined(final_version) 6756 #endif 6757 #ifdef VLAN_SUPPORT 6758 #endif 6759 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 6760 #endif 6761 #ifndef final_version 6762 #endif 6763 #ifdef VLAN_SUPPORT 6764 #endif 6765 #ifdef VLAN_SUPPORT 6766 #endif 6767 #ifdef VLAN_SUPPORT 6768 #endif 6769 #ifdef VLAN_SUPPORT 6770 #endif 6771 /* LDV_COMMENT_END_PREP */ 6772 /* LDV_COMMENT_FUNCTION_CALL Function from field "set_link_ksettings" from driver structure with callbacks "ethtool_ops" */ 6773 ldv_handler_precall(); 6774 set_link_ksettings( var_group1, var_set_link_ksettings_22_p1); 6775 /* LDV_COMMENT_BEGIN_PREP */ 6776 #ifdef CONFIG_PM 6777 #endif 6778 #ifdef CONFIG_PM 6779 #endif 6780 #ifdef MODULE 6781 #endif 6782 /* LDV_COMMENT_END_PREP */ 6783 6784 6785 6786 6787 } 6788 6789 break; 6790 case 17: { 6791 6792 /** STRUCT: struct type: pci_driver, struct name: starfire_driver **/ 6793 if(ldv_s_starfire_driver_pci_driver==0) { 6794 6795 /* content: static int starfire_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)*/ 6796 /* LDV_COMMENT_BEGIN_PREP */ 6797 #define DRV_NAME "starfire" 6798 #define DRV_VERSION "2.1" 6799 #define DRV_RELDATE "July 6, 2008" 6800 #define HAS_BROKEN_FIRMWARE 6801 #ifdef HAS_BROKEN_FIRMWARE 6802 #define PADDING_MASK 3 6803 #endif 6804 #define ZEROCOPY 6805 #if IS_ENABLED(CONFIG_VLAN_8021Q) 6806 #define VLAN_SUPPORT 6807 #endif 6808 #define PKT_BUF_SZ 1536 6809 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 6810 #else 6811 #endif 6812 #ifdef __sparc__ 6813 #define DMA_BURST_SIZE 64 6814 #else 6815 #define DMA_BURST_SIZE 128 6816 #endif 6817 #define RX_RING_SIZE 256 6818 #define TX_RING_SIZE 32 6819 #define DONE_Q_SIZE 1024 6820 #define QUEUE_ALIGN 256 6821 #if RX_RING_SIZE > 256 6822 #define RX_Q_ENTRIES Rx2048QEntries 6823 #else 6824 #define RX_Q_ENTRIES Rx256QEntries 6825 #endif 6826 #define TX_TIMEOUT (2 * HZ) 6827 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 6828 #define ADDR_64BITS 6829 #define netdrv_addr_t __le64 6830 #define cpu_to_dma(x) cpu_to_le64(x) 6831 #define dma_to_cpu(x) le64_to_cpu(x) 6832 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 6833 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 6834 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 6835 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 6836 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 6837 #else 6838 #define netdrv_addr_t __le32 6839 #define cpu_to_dma(x) cpu_to_le32(x) 6840 #define dma_to_cpu(x) le32_to_cpu(x) 6841 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 6842 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 6843 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 6844 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 6845 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 6846 #endif 6847 #define skb_first_frag_len(skb) skb_headlen(skb) 6848 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 6849 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 6850 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 6851 #ifdef VLAN_SUPPORT 6852 #define RxComplType RxComplType3 6853 #else 6854 #define RxComplType RxComplType2 6855 #endif 6856 #ifdef ADDR_64BITS 6857 #define TX_DESC_TYPE TxDescType2 6858 #else 6859 #define TX_DESC_TYPE TxDescType1 6860 #endif 6861 #define TX_DESC_SPACING TxDescSpaceUnlim 6862 #if 0 6863 #endif 6864 #define PHY_CNT 2 6865 #ifdef VLAN_SUPPORT 6866 #endif 6867 #ifdef VLAN_SUPPORT 6868 #endif 6869 #ifdef VLAN_SUPPORT 6870 #endif 6871 /* LDV_COMMENT_END_PREP */ 6872 /* LDV_COMMENT_FUNCTION_CALL Function from field "probe" from driver structure with callbacks "starfire_driver". Standart function test for correct return result. */ 6873 res_starfire_init_one_2 = starfire_init_one( var_group6, var_starfire_init_one_2_p1); 6874 ldv_check_return_value(res_starfire_init_one_2); 6875 ldv_check_return_value_probe(res_starfire_init_one_2); 6876 if(res_starfire_init_one_2) 6877 goto ldv_module_exit; 6878 /* LDV_COMMENT_BEGIN_PREP */ 6879 #ifdef VLAN_SUPPORT 6880 #endif 6881 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 6882 #endif 6883 #ifndef final_version 6884 #endif 6885 #ifdef VLAN_SUPPORT 6886 #endif 6887 #ifdef VLAN_SUPPORT 6888 #endif 6889 #ifdef VLAN_SUPPORT 6890 #endif 6891 #ifdef VLAN_SUPPORT 6892 #endif 6893 #ifdef CONFIG_PM 6894 #endif 6895 #ifdef CONFIG_PM 6896 #endif 6897 #ifdef MODULE 6898 #endif 6899 /* LDV_COMMENT_END_PREP */ 6900 ldv_s_starfire_driver_pci_driver++; 6901 6902 } 6903 6904 } 6905 6906 break; 6907 case 18: { 6908 6909 /** STRUCT: struct type: pci_driver, struct name: starfire_driver **/ 6910 if(ldv_s_starfire_driver_pci_driver==1) { 6911 6912 /* content: static void starfire_remove_one(struct pci_dev *pdev)*/ 6913 /* LDV_COMMENT_BEGIN_PREP */ 6914 #define DRV_NAME "starfire" 6915 #define DRV_VERSION "2.1" 6916 #define DRV_RELDATE "July 6, 2008" 6917 #define HAS_BROKEN_FIRMWARE 6918 #ifdef HAS_BROKEN_FIRMWARE 6919 #define PADDING_MASK 3 6920 #endif 6921 #define ZEROCOPY 6922 #if IS_ENABLED(CONFIG_VLAN_8021Q) 6923 #define VLAN_SUPPORT 6924 #endif 6925 #define PKT_BUF_SZ 1536 6926 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 6927 #else 6928 #endif 6929 #ifdef __sparc__ 6930 #define DMA_BURST_SIZE 64 6931 #else 6932 #define DMA_BURST_SIZE 128 6933 #endif 6934 #define RX_RING_SIZE 256 6935 #define TX_RING_SIZE 32 6936 #define DONE_Q_SIZE 1024 6937 #define QUEUE_ALIGN 256 6938 #if RX_RING_SIZE > 256 6939 #define RX_Q_ENTRIES Rx2048QEntries 6940 #else 6941 #define RX_Q_ENTRIES Rx256QEntries 6942 #endif 6943 #define TX_TIMEOUT (2 * HZ) 6944 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 6945 #define ADDR_64BITS 6946 #define netdrv_addr_t __le64 6947 #define cpu_to_dma(x) cpu_to_le64(x) 6948 #define dma_to_cpu(x) le64_to_cpu(x) 6949 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 6950 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 6951 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 6952 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 6953 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 6954 #else 6955 #define netdrv_addr_t __le32 6956 #define cpu_to_dma(x) cpu_to_le32(x) 6957 #define dma_to_cpu(x) le32_to_cpu(x) 6958 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 6959 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 6960 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 6961 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 6962 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 6963 #endif 6964 #define skb_first_frag_len(skb) skb_headlen(skb) 6965 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 6966 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 6967 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 6968 #ifdef VLAN_SUPPORT 6969 #define RxComplType RxComplType3 6970 #else 6971 #define RxComplType RxComplType2 6972 #endif 6973 #ifdef ADDR_64BITS 6974 #define TX_DESC_TYPE TxDescType2 6975 #else 6976 #define TX_DESC_TYPE TxDescType1 6977 #endif 6978 #define TX_DESC_SPACING TxDescSpaceUnlim 6979 #if 0 6980 #endif 6981 #define PHY_CNT 2 6982 #ifdef VLAN_SUPPORT 6983 #endif 6984 #ifdef VLAN_SUPPORT 6985 #endif 6986 #ifdef VLAN_SUPPORT 6987 #endif 6988 #ifndef MODULE 6989 #endif 6990 #ifdef ZEROCOPY 6991 #endif 6992 #ifdef VLAN_SUPPORT 6993 #endif 6994 #ifdef ADDR_64BITS 6995 #endif 6996 #if ! defined(final_version) 6997 #endif 6998 #ifdef VLAN_SUPPORT 6999 #endif 7000 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 7001 #endif 7002 #ifndef final_version 7003 #endif 7004 #ifdef VLAN_SUPPORT 7005 #endif 7006 #ifdef VLAN_SUPPORT 7007 #endif 7008 #ifdef VLAN_SUPPORT 7009 #endif 7010 #ifdef VLAN_SUPPORT 7011 #endif 7012 #ifdef CONFIG_PM 7013 #endif 7014 /* LDV_COMMENT_END_PREP */ 7015 /* LDV_COMMENT_FUNCTION_CALL Function from field "remove" from driver structure with callbacks "starfire_driver" */ 7016 ldv_handler_precall(); 7017 starfire_remove_one( var_group6); 7018 /* LDV_COMMENT_BEGIN_PREP */ 7019 #ifdef CONFIG_PM 7020 #endif 7021 #ifdef MODULE 7022 #endif 7023 /* LDV_COMMENT_END_PREP */ 7024 ldv_s_starfire_driver_pci_driver=0; 7025 7026 } 7027 7028 } 7029 7030 break; 7031 case 19: { 7032 7033 /** STRUCT: struct type: pci_driver, struct name: starfire_driver **/ 7034 7035 7036 /* content: static int starfire_suspend(struct pci_dev *pdev, pm_message_t state)*/ 7037 /* LDV_COMMENT_BEGIN_PREP */ 7038 #define DRV_NAME "starfire" 7039 #define DRV_VERSION "2.1" 7040 #define DRV_RELDATE "July 6, 2008" 7041 #define HAS_BROKEN_FIRMWARE 7042 #ifdef HAS_BROKEN_FIRMWARE 7043 #define PADDING_MASK 3 7044 #endif 7045 #define ZEROCOPY 7046 #if IS_ENABLED(CONFIG_VLAN_8021Q) 7047 #define VLAN_SUPPORT 7048 #endif 7049 #define PKT_BUF_SZ 1536 7050 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 7051 #else 7052 #endif 7053 #ifdef __sparc__ 7054 #define DMA_BURST_SIZE 64 7055 #else 7056 #define DMA_BURST_SIZE 128 7057 #endif 7058 #define RX_RING_SIZE 256 7059 #define TX_RING_SIZE 32 7060 #define DONE_Q_SIZE 1024 7061 #define QUEUE_ALIGN 256 7062 #if RX_RING_SIZE > 256 7063 #define RX_Q_ENTRIES Rx2048QEntries 7064 #else 7065 #define RX_Q_ENTRIES Rx256QEntries 7066 #endif 7067 #define TX_TIMEOUT (2 * HZ) 7068 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 7069 #define ADDR_64BITS 7070 #define netdrv_addr_t __le64 7071 #define cpu_to_dma(x) cpu_to_le64(x) 7072 #define dma_to_cpu(x) le64_to_cpu(x) 7073 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 7074 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 7075 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 7076 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 7077 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 7078 #else 7079 #define netdrv_addr_t __le32 7080 #define cpu_to_dma(x) cpu_to_le32(x) 7081 #define dma_to_cpu(x) le32_to_cpu(x) 7082 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 7083 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 7084 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 7085 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 7086 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 7087 #endif 7088 #define skb_first_frag_len(skb) skb_headlen(skb) 7089 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 7090 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 7091 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 7092 #ifdef VLAN_SUPPORT 7093 #define RxComplType RxComplType3 7094 #else 7095 #define RxComplType RxComplType2 7096 #endif 7097 #ifdef ADDR_64BITS 7098 #define TX_DESC_TYPE TxDescType2 7099 #else 7100 #define TX_DESC_TYPE TxDescType1 7101 #endif 7102 #define TX_DESC_SPACING TxDescSpaceUnlim 7103 #if 0 7104 #endif 7105 #define PHY_CNT 2 7106 #ifdef VLAN_SUPPORT 7107 #endif 7108 #ifdef VLAN_SUPPORT 7109 #endif 7110 #ifdef VLAN_SUPPORT 7111 #endif 7112 #ifndef MODULE 7113 #endif 7114 #ifdef ZEROCOPY 7115 #endif 7116 #ifdef VLAN_SUPPORT 7117 #endif 7118 #ifdef ADDR_64BITS 7119 #endif 7120 #if ! defined(final_version) 7121 #endif 7122 #ifdef VLAN_SUPPORT 7123 #endif 7124 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 7125 #endif 7126 #ifndef final_version 7127 #endif 7128 #ifdef VLAN_SUPPORT 7129 #endif 7130 #ifdef VLAN_SUPPORT 7131 #endif 7132 #ifdef VLAN_SUPPORT 7133 #endif 7134 #ifdef VLAN_SUPPORT 7135 #endif 7136 #ifdef CONFIG_PM 7137 /* LDV_COMMENT_END_PREP */ 7138 /* LDV_COMMENT_FUNCTION_CALL Function from field "suspend" from driver structure with callbacks "starfire_driver" */ 7139 ldv_handler_precall(); 7140 starfire_suspend( var_group6, var_starfire_suspend_29_p1); 7141 /* LDV_COMMENT_BEGIN_PREP */ 7142 #endif 7143 #ifdef CONFIG_PM 7144 #endif 7145 #ifdef MODULE 7146 #endif 7147 /* LDV_COMMENT_END_PREP */ 7148 7149 7150 7151 7152 } 7153 7154 break; 7155 case 20: { 7156 7157 /** STRUCT: struct type: pci_driver, struct name: starfire_driver **/ 7158 7159 7160 /* content: static int starfire_resume(struct pci_dev *pdev)*/ 7161 /* LDV_COMMENT_BEGIN_PREP */ 7162 #define DRV_NAME "starfire" 7163 #define DRV_VERSION "2.1" 7164 #define DRV_RELDATE "July 6, 2008" 7165 #define HAS_BROKEN_FIRMWARE 7166 #ifdef HAS_BROKEN_FIRMWARE 7167 #define PADDING_MASK 3 7168 #endif 7169 #define ZEROCOPY 7170 #if IS_ENABLED(CONFIG_VLAN_8021Q) 7171 #define VLAN_SUPPORT 7172 #endif 7173 #define PKT_BUF_SZ 1536 7174 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 7175 #else 7176 #endif 7177 #ifdef __sparc__ 7178 #define DMA_BURST_SIZE 64 7179 #else 7180 #define DMA_BURST_SIZE 128 7181 #endif 7182 #define RX_RING_SIZE 256 7183 #define TX_RING_SIZE 32 7184 #define DONE_Q_SIZE 1024 7185 #define QUEUE_ALIGN 256 7186 #if RX_RING_SIZE > 256 7187 #define RX_Q_ENTRIES Rx2048QEntries 7188 #else 7189 #define RX_Q_ENTRIES Rx256QEntries 7190 #endif 7191 #define TX_TIMEOUT (2 * HZ) 7192 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 7193 #define ADDR_64BITS 7194 #define netdrv_addr_t __le64 7195 #define cpu_to_dma(x) cpu_to_le64(x) 7196 #define dma_to_cpu(x) le64_to_cpu(x) 7197 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 7198 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 7199 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 7200 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 7201 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 7202 #else 7203 #define netdrv_addr_t __le32 7204 #define cpu_to_dma(x) cpu_to_le32(x) 7205 #define dma_to_cpu(x) le32_to_cpu(x) 7206 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 7207 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 7208 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 7209 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 7210 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 7211 #endif 7212 #define skb_first_frag_len(skb) skb_headlen(skb) 7213 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 7214 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 7215 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 7216 #ifdef VLAN_SUPPORT 7217 #define RxComplType RxComplType3 7218 #else 7219 #define RxComplType RxComplType2 7220 #endif 7221 #ifdef ADDR_64BITS 7222 #define TX_DESC_TYPE TxDescType2 7223 #else 7224 #define TX_DESC_TYPE TxDescType1 7225 #endif 7226 #define TX_DESC_SPACING TxDescSpaceUnlim 7227 #if 0 7228 #endif 7229 #define PHY_CNT 2 7230 #ifdef VLAN_SUPPORT 7231 #endif 7232 #ifdef VLAN_SUPPORT 7233 #endif 7234 #ifdef VLAN_SUPPORT 7235 #endif 7236 #ifndef MODULE 7237 #endif 7238 #ifdef ZEROCOPY 7239 #endif 7240 #ifdef VLAN_SUPPORT 7241 #endif 7242 #ifdef ADDR_64BITS 7243 #endif 7244 #if ! defined(final_version) 7245 #endif 7246 #ifdef VLAN_SUPPORT 7247 #endif 7248 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 7249 #endif 7250 #ifndef final_version 7251 #endif 7252 #ifdef VLAN_SUPPORT 7253 #endif 7254 #ifdef VLAN_SUPPORT 7255 #endif 7256 #ifdef VLAN_SUPPORT 7257 #endif 7258 #ifdef VLAN_SUPPORT 7259 #endif 7260 #ifdef CONFIG_PM 7261 /* LDV_COMMENT_END_PREP */ 7262 /* LDV_COMMENT_FUNCTION_CALL Function from field "resume" from driver structure with callbacks "starfire_driver" */ 7263 ldv_handler_precall(); 7264 starfire_resume( var_group6); 7265 /* LDV_COMMENT_BEGIN_PREP */ 7266 #endif 7267 #ifdef CONFIG_PM 7268 #endif 7269 #ifdef MODULE 7270 #endif 7271 /* LDV_COMMENT_END_PREP */ 7272 7273 7274 7275 7276 } 7277 7278 break; 7279 case 21: { 7280 7281 /** CALLBACK SECTION request_irq **/ 7282 LDV_IN_INTERRUPT=2; 7283 7284 /* content: static irqreturn_t intr_handler(int irq, void *dev_instance)*/ 7285 /* LDV_COMMENT_BEGIN_PREP */ 7286 #define DRV_NAME "starfire" 7287 #define DRV_VERSION "2.1" 7288 #define DRV_RELDATE "July 6, 2008" 7289 #define HAS_BROKEN_FIRMWARE 7290 #ifdef HAS_BROKEN_FIRMWARE 7291 #define PADDING_MASK 3 7292 #endif 7293 #define ZEROCOPY 7294 #if IS_ENABLED(CONFIG_VLAN_8021Q) 7295 #define VLAN_SUPPORT 7296 #endif 7297 #define PKT_BUF_SZ 1536 7298 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 7299 #else 7300 #endif 7301 #ifdef __sparc__ 7302 #define DMA_BURST_SIZE 64 7303 #else 7304 #define DMA_BURST_SIZE 128 7305 #endif 7306 #define RX_RING_SIZE 256 7307 #define TX_RING_SIZE 32 7308 #define DONE_Q_SIZE 1024 7309 #define QUEUE_ALIGN 256 7310 #if RX_RING_SIZE > 256 7311 #define RX_Q_ENTRIES Rx2048QEntries 7312 #else 7313 #define RX_Q_ENTRIES Rx256QEntries 7314 #endif 7315 #define TX_TIMEOUT (2 * HZ) 7316 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 7317 #define ADDR_64BITS 7318 #define netdrv_addr_t __le64 7319 #define cpu_to_dma(x) cpu_to_le64(x) 7320 #define dma_to_cpu(x) le64_to_cpu(x) 7321 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 7322 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 7323 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 7324 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 7325 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 7326 #else 7327 #define netdrv_addr_t __le32 7328 #define cpu_to_dma(x) cpu_to_le32(x) 7329 #define dma_to_cpu(x) le32_to_cpu(x) 7330 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 7331 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 7332 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 7333 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 7334 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 7335 #endif 7336 #define skb_first_frag_len(skb) skb_headlen(skb) 7337 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 7338 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 7339 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 7340 #ifdef VLAN_SUPPORT 7341 #define RxComplType RxComplType3 7342 #else 7343 #define RxComplType RxComplType2 7344 #endif 7345 #ifdef ADDR_64BITS 7346 #define TX_DESC_TYPE TxDescType2 7347 #else 7348 #define TX_DESC_TYPE TxDescType1 7349 #endif 7350 #define TX_DESC_SPACING TxDescSpaceUnlim 7351 #if 0 7352 #endif 7353 #define PHY_CNT 2 7354 #ifdef VLAN_SUPPORT 7355 #endif 7356 #ifdef VLAN_SUPPORT 7357 #endif 7358 #ifdef VLAN_SUPPORT 7359 #endif 7360 #ifndef MODULE 7361 #endif 7362 #ifdef ZEROCOPY 7363 #endif 7364 #ifdef VLAN_SUPPORT 7365 #endif 7366 #ifdef ADDR_64BITS 7367 #endif 7368 #if ! defined(final_version) 7369 #endif 7370 #ifdef VLAN_SUPPORT 7371 #endif 7372 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 7373 #endif 7374 /* LDV_COMMENT_END_PREP */ 7375 /* LDV_COMMENT_FUNCTION_CALL */ 7376 ldv_handler_precall(); 7377 intr_handler( var_intr_handler_10_p0, var_intr_handler_10_p1); 7378 /* LDV_COMMENT_BEGIN_PREP */ 7379 #ifndef final_version 7380 #endif 7381 #ifdef VLAN_SUPPORT 7382 #endif 7383 #ifdef VLAN_SUPPORT 7384 #endif 7385 #ifdef VLAN_SUPPORT 7386 #endif 7387 #ifdef VLAN_SUPPORT 7388 #endif 7389 #ifdef CONFIG_PM 7390 #endif 7391 #ifdef CONFIG_PM 7392 #endif 7393 #ifdef MODULE 7394 #endif 7395 /* LDV_COMMENT_END_PREP */ 7396 LDV_IN_INTERRUPT=1; 7397 7398 7399 7400 } 7401 7402 break; 7403 default: break; 7404 7405 } 7406 7407 } 7408 7409 ldv_module_exit: 7410 7411 /** INIT: init_type: ST_MODULE_EXIT **/ 7412 /* content: static void __exit starfire_cleanup (void)*/ 7413 /* LDV_COMMENT_BEGIN_PREP */ 7414 #define DRV_NAME "starfire" 7415 #define DRV_VERSION "2.1" 7416 #define DRV_RELDATE "July 6, 2008" 7417 #define HAS_BROKEN_FIRMWARE 7418 #ifdef HAS_BROKEN_FIRMWARE 7419 #define PADDING_MASK 3 7420 #endif 7421 #define ZEROCOPY 7422 #if IS_ENABLED(CONFIG_VLAN_8021Q) 7423 #define VLAN_SUPPORT 7424 #endif 7425 #define PKT_BUF_SZ 1536 7426 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 7427 #else 7428 #endif 7429 #ifdef __sparc__ 7430 #define DMA_BURST_SIZE 64 7431 #else 7432 #define DMA_BURST_SIZE 128 7433 #endif 7434 #define RX_RING_SIZE 256 7435 #define TX_RING_SIZE 32 7436 #define DONE_Q_SIZE 1024 7437 #define QUEUE_ALIGN 256 7438 #if RX_RING_SIZE > 256 7439 #define RX_Q_ENTRIES Rx2048QEntries 7440 #else 7441 #define RX_Q_ENTRIES Rx256QEntries 7442 #endif 7443 #define TX_TIMEOUT (2 * HZ) 7444 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 7445 #define ADDR_64BITS 7446 #define netdrv_addr_t __le64 7447 #define cpu_to_dma(x) cpu_to_le64(x) 7448 #define dma_to_cpu(x) le64_to_cpu(x) 7449 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 7450 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 7451 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 7452 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 7453 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 7454 #else 7455 #define netdrv_addr_t __le32 7456 #define cpu_to_dma(x) cpu_to_le32(x) 7457 #define dma_to_cpu(x) le32_to_cpu(x) 7458 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 7459 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 7460 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 7461 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 7462 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 7463 #endif 7464 #define skb_first_frag_len(skb) skb_headlen(skb) 7465 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 7466 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 7467 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 7468 #ifdef VLAN_SUPPORT 7469 #define RxComplType RxComplType3 7470 #else 7471 #define RxComplType RxComplType2 7472 #endif 7473 #ifdef ADDR_64BITS 7474 #define TX_DESC_TYPE TxDescType2 7475 #else 7476 #define TX_DESC_TYPE TxDescType1 7477 #endif 7478 #define TX_DESC_SPACING TxDescSpaceUnlim 7479 #if 0 7480 #endif 7481 #define PHY_CNT 2 7482 #ifdef VLAN_SUPPORT 7483 #endif 7484 #ifdef VLAN_SUPPORT 7485 #endif 7486 #ifdef VLAN_SUPPORT 7487 #endif 7488 #ifndef MODULE 7489 #endif 7490 #ifdef ZEROCOPY 7491 #endif 7492 #ifdef VLAN_SUPPORT 7493 #endif 7494 #ifdef ADDR_64BITS 7495 #endif 7496 #if ! defined(final_version) 7497 #endif 7498 #ifdef VLAN_SUPPORT 7499 #endif 7500 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 7501 #endif 7502 #ifndef final_version 7503 #endif 7504 #ifdef VLAN_SUPPORT 7505 #endif 7506 #ifdef VLAN_SUPPORT 7507 #endif 7508 #ifdef VLAN_SUPPORT 7509 #endif 7510 #ifdef VLAN_SUPPORT 7511 #endif 7512 #ifdef CONFIG_PM 7513 #endif 7514 #ifdef CONFIG_PM 7515 #endif 7516 #ifdef MODULE 7517 #endif 7518 /* LDV_COMMENT_END_PREP */ 7519 /* LDV_COMMENT_FUNCTION_CALL Kernel calls driver release function before driver will be uploaded from kernel. This function declared as "MODULE_EXIT(function name)". */ 7520 ldv_handler_precall(); 7521 starfire_cleanup(); 7522 7523 /* LDV_COMMENT_FUNCTION_CALL Checks that all resources and locks are correctly released before the driver will be unloaded. */ 7524 ldv_final: ldv_check_final_state(); 7525 7526 /* LDV_COMMENT_END_FUNCTION_CALL_SECTION */ 7527 return; 7528 7529 } 7530 #endif 7531 7532 /* LDV_COMMENT_END_MAIN */
1 2 #include <linux/kernel.h> 3 bool ldv_is_err(const void *ptr); 4 bool ldv_is_err_or_null(const void *ptr); 5 void* ldv_err_ptr(long error); 6 long ldv_ptr_err(const void *ptr); 7 8 extern void ldv_dma_map_page(void); 9 extern void ldv_dma_mapping_error(void); 10 #line 1 "/home/ldvuser/ldv/ref_launches/work/current--X--drivers--X--defaultlinux-4.10-rc1.tar.xz--X--331_1a--X--cpachecker/linux-4.10-rc1.tar.xz/csd_deg_dscv/12798/dscv_tempdir/dscv/ri/331_1a/drivers/net/ethernet/adaptec/starfire.c" 11 12 /* starfire.c: Linux device driver for the Adaptec Starfire network adapter. */ 13 /* 14 Written 1998-2000 by Donald Becker. 15 16 Current maintainer is Ion Badulescu <ionut ta badula tod org>. Please 17 send all bug reports to me, and not to Donald Becker, as this code 18 has been heavily modified from Donald's original version. 19 20 This software may be used and distributed according to the terms of 21 the GNU General Public License (GPL), incorporated herein by reference. 22 Drivers based on or derived from this code fall under the GPL and must 23 retain the authorship, copyright and license notice. This file is not 24 a complete program and may only be used when the entire operating 25 system is licensed under the GPL. 26 27 The information below comes from Donald Becker's original driver: 28 29 The author may be reached as becker@scyld.com, or C/O 30 Scyld Computing Corporation 31 410 Severn Ave., Suite 210 32 Annapolis MD 21403 33 34 Support and updates available at 35 http://www.scyld.com/network/starfire.html 36 [link no longer provides useful info -jgarzik] 37 38 */ 39 40 #define DRV_NAME "starfire" 41 #define DRV_VERSION "2.1" 42 #define DRV_RELDATE "July 6, 2008" 43 44 #include <linux/interrupt.h> 45 #include <linux/module.h> 46 #include <linux/kernel.h> 47 #include <linux/pci.h> 48 #include <linux/netdevice.h> 49 #include <linux/etherdevice.h> 50 #include <linux/init.h> 51 #include <linux/delay.h> 52 #include <linux/crc32.h> 53 #include <linux/ethtool.h> 54 #include <linux/mii.h> 55 #include <linux/if_vlan.h> 56 #include <linux/mm.h> 57 #include <linux/firmware.h> 58 #include <asm/processor.h> /* Processor type for cache alignment. */ 59 #include <linux/uaccess.h> 60 #include <asm/io.h> 61 62 /* 63 * The current frame processor firmware fails to checksum a fragment 64 * of length 1. If and when this is fixed, the #define below can be removed. 65 */ 66 #define HAS_BROKEN_FIRMWARE 67 68 /* 69 * If using the broken firmware, data must be padded to the next 32-bit boundary. 70 */ 71 #ifdef HAS_BROKEN_FIRMWARE 72 #define PADDING_MASK 3 73 #endif 74 75 /* 76 * Define this if using the driver with the zero-copy patch 77 */ 78 #define ZEROCOPY 79 80 #if IS_ENABLED(CONFIG_VLAN_8021Q) 81 #define VLAN_SUPPORT 82 #endif 83 84 /* The user-configurable values. 85 These may be modified when a driver module is loaded.*/ 86 87 /* Used for tuning interrupt latency vs. overhead. */ 88 static int intr_latency; 89 static int small_frames; 90 91 static int debug = 1; /* 1 normal messages, 0 quiet .. 7 verbose. */ 92 static int max_interrupt_work = 20; 93 static int mtu; 94 /* Maximum number of multicast addresses to filter (vs. rx-all-multicast). 95 The Starfire has a 512 element hash table based on the Ethernet CRC. */ 96 static const int multicast_filter_limit = 512; 97 /* Whether to do TCP/UDP checksums in hardware */ 98 static int enable_hw_cksum = 1; 99 100 #define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/ 101 /* 102 * Set the copy breakpoint for the copy-only-tiny-frames scheme. 103 * Setting to > 1518 effectively disables this feature. 104 * 105 * NOTE: 106 * The ia64 doesn't allow for unaligned loads even of integers being 107 * misaligned on a 2 byte boundary. Thus always force copying of 108 * packets as the starfire doesn't allow for misaligned DMAs ;-( 109 * 23/10/2000 - Jes 110 * 111 * The Alpha and the Sparc don't like unaligned loads, either. On Sparc64, 112 * at least, having unaligned frames leads to a rather serious performance 113 * penalty. -Ion 114 */ 115 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 116 static int rx_copybreak = PKT_BUF_SZ; 117 #else 118 static int rx_copybreak /* = 0 */; 119 #endif 120 121 /* PCI DMA burst size -- on sparc64 we want to force it to 64 bytes, on the others the default of 128 is fine. */ 122 #ifdef __sparc__ 123 #define DMA_BURST_SIZE 64 124 #else 125 #define DMA_BURST_SIZE 128 126 #endif 127 128 /* Operational parameters that are set at compile time. */ 129 130 /* The "native" ring sizes are either 256 or 2048. 131 However in some modes a descriptor may be marked to wrap the ring earlier. 132 */ 133 #define RX_RING_SIZE 256 134 #define TX_RING_SIZE 32 135 /* The completion queues are fixed at 1024 entries i.e. 4K or 8KB. */ 136 #define DONE_Q_SIZE 1024 137 /* All queues must be aligned on a 256-byte boundary */ 138 #define QUEUE_ALIGN 256 139 140 #if RX_RING_SIZE > 256 141 #define RX_Q_ENTRIES Rx2048QEntries 142 #else 143 #define RX_Q_ENTRIES Rx256QEntries 144 #endif 145 146 /* Operational parameters that usually are not changed. */ 147 /* Time in jiffies before concluding the transmitter is hung. */ 148 #define TX_TIMEOUT (2 * HZ) 149 150 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 151 /* 64-bit dma_addr_t */ 152 #define ADDR_64BITS /* This chip uses 64 bit addresses. */ 153 #define netdrv_addr_t __le64 154 #define cpu_to_dma(x) cpu_to_le64(x) 155 #define dma_to_cpu(x) le64_to_cpu(x) 156 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 157 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 158 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 159 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 160 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 161 #else /* 32-bit dma_addr_t */ 162 #define netdrv_addr_t __le32 163 #define cpu_to_dma(x) cpu_to_le32(x) 164 #define dma_to_cpu(x) le32_to_cpu(x) 165 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 166 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 167 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 168 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 169 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 170 #endif 171 172 #define skb_first_frag_len(skb) skb_headlen(skb) 173 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 174 175 /* Firmware names */ 176 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 177 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 178 179 /* These identify the driver base version and may not be removed. */ 180 static const char version[] = 181 KERN_INFO "starfire.c:v1.03 7/26/2000 Written by Donald Becker <becker@scyld.com>\n" 182 " (unofficial 2.2/2.4 kernel port, version " DRV_VERSION ", " DRV_RELDATE ")\n"; 183 184 MODULE_AUTHOR("Donald Becker <becker@scyld.com>"); 185 MODULE_DESCRIPTION("Adaptec Starfire Ethernet driver"); 186 MODULE_LICENSE("GPL"); 187 MODULE_VERSION(DRV_VERSION); 188 MODULE_FIRMWARE(FIRMWARE_RX); 189 MODULE_FIRMWARE(FIRMWARE_TX); 190 191 module_param(max_interrupt_work, int, 0); 192 module_param(mtu, int, 0); 193 module_param(debug, int, 0); 194 module_param(rx_copybreak, int, 0); 195 module_param(intr_latency, int, 0); 196 module_param(small_frames, int, 0); 197 module_param(enable_hw_cksum, int, 0); 198 MODULE_PARM_DESC(max_interrupt_work, "Maximum events handled per interrupt"); 199 MODULE_PARM_DESC(mtu, "MTU (all boards)"); 200 MODULE_PARM_DESC(debug, "Debug level (0-6)"); 201 MODULE_PARM_DESC(rx_copybreak, "Copy breakpoint for copy-only-tiny-frames"); 202 MODULE_PARM_DESC(intr_latency, "Maximum interrupt latency, in microseconds"); 203 MODULE_PARM_DESC(small_frames, "Maximum size of receive frames that bypass interrupt latency (0,64,128,256,512)"); 204 MODULE_PARM_DESC(enable_hw_cksum, "Enable/disable hardware cksum support (0/1)"); 205 206 /* 207 Theory of Operation 208 209 I. Board Compatibility 210 211 This driver is for the Adaptec 6915 "Starfire" 64 bit PCI Ethernet adapter. 212 213 II. Board-specific settings 214 215 III. Driver operation 216 217 IIIa. Ring buffers 218 219 The Starfire hardware uses multiple fixed-size descriptor queues/rings. The 220 ring sizes are set fixed by the hardware, but may optionally be wrapped 221 earlier by the END bit in the descriptor. 222 This driver uses that hardware queue size for the Rx ring, where a large 223 number of entries has no ill effect beyond increases the potential backlog. 224 The Tx ring is wrapped with the END bit, since a large hardware Tx queue 225 disables the queue layer priority ordering and we have no mechanism to 226 utilize the hardware two-level priority queue. When modifying the 227 RX/TX_RING_SIZE pay close attention to page sizes and the ring-empty warning 228 levels. 229 230 IIIb/c. Transmit/Receive Structure 231 232 See the Adaptec manual for the many possible structures, and options for 233 each structure. There are far too many to document all of them here. 234 235 For transmit this driver uses type 0/1 transmit descriptors (depending 236 on the 32/64 bitness of the architecture), and relies on automatic 237 minimum-length padding. It does not use the completion queue 238 consumer index, but instead checks for non-zero status entries. 239 240 For receive this driver uses type 2/3 receive descriptors. The driver 241 allocates full frame size skbuffs for the Rx ring buffers, so all frames 242 should fit in a single descriptor. The driver does not use the completion 243 queue consumer index, but instead checks for non-zero status entries. 244 245 When an incoming frame is less than RX_COPYBREAK bytes long, a fresh skbuff 246 is allocated and the frame is copied to the new skbuff. When the incoming 247 frame is larger, the skbuff is passed directly up the protocol stack. 248 Buffers consumed this way are replaced by newly allocated skbuffs in a later 249 phase of receive. 250 251 A notable aspect of operation is that unaligned buffers are not permitted by 252 the Starfire hardware. Thus the IP header at offset 14 in an ethernet frame 253 isn't longword aligned, which may cause problems on some machine 254 e.g. Alphas and IA64. For these architectures, the driver is forced to copy 255 the frame into a new skbuff unconditionally. Copied frames are put into the 256 skbuff at an offset of "+2", thus 16-byte aligning the IP header. 257 258 IIId. Synchronization 259 260 The driver runs as two independent, single-threaded flows of control. One 261 is the send-packet routine, which enforces single-threaded use by the 262 dev->tbusy flag. The other thread is the interrupt handler, which is single 263 threaded by the hardware and interrupt handling software. 264 265 The send packet thread has partial control over the Tx ring and the netif_queue 266 status. If the number of free Tx slots in the ring falls below a certain number 267 (currently hardcoded to 4), it signals the upper layer to stop the queue. 268 269 The interrupt handler has exclusive control over the Rx ring and records stats 270 from the Tx ring. After reaping the stats, it marks the Tx queue entry as 271 empty by incrementing the dirty_tx mark. Iff the netif_queue is stopped and the 272 number of free Tx slow is above the threshold, it signals the upper layer to 273 restart the queue. 274 275 IV. Notes 276 277 IVb. References 278 279 The Adaptec Starfire manuals, available only from Adaptec. 280 http://www.scyld.com/expert/100mbps.html 281 http://www.scyld.com/expert/NWay.html 282 283 IVc. Errata 284 285 - StopOnPerr is broken, don't enable 286 - Hardware ethernet padding exposes random data, perform software padding 287 instead (unverified -- works correctly for all the hardware I have) 288 289 */ 290 291 292 293 enum chip_capability_flags {CanHaveMII=1, }; 294 295 enum chipset { 296 CH_6915 = 0, 297 }; 298 299 static const struct pci_device_id starfire_pci_tbl[] = { 300 { PCI_VDEVICE(ADAPTEC, 0x6915), CH_6915 }, 301 { 0, } 302 }; 303 MODULE_DEVICE_TABLE(pci, starfire_pci_tbl); 304 305 /* A chip capabilities table, matching the CH_xxx entries in xxx_pci_tbl[] above. */ 306 static const struct chip_info { 307 const char *name; 308 int drv_flags; 309 } netdrv_tbl[] = { 310 { "Adaptec Starfire 6915", CanHaveMII }, 311 }; 312 313 314 /* Offsets to the device registers. 315 Unlike software-only systems, device drivers interact with complex hardware. 316 It's not useful to define symbolic names for every register bit in the 317 device. The name can only partially document the semantics and make 318 the driver longer and more difficult to read. 319 In general, only the important configuration values or bits changed 320 multiple times should be defined symbolically. 321 */ 322 enum register_offsets { 323 PCIDeviceConfig=0x50040, GenCtrl=0x50070, IntrTimerCtrl=0x50074, 324 IntrClear=0x50080, IntrStatus=0x50084, IntrEnable=0x50088, 325 MIICtrl=0x52000, TxStationAddr=0x50120, EEPROMCtrl=0x51000, 326 GPIOCtrl=0x5008C, TxDescCtrl=0x50090, 327 TxRingPtr=0x50098, HiPriTxRingPtr=0x50094, /* Low and High priority. */ 328 TxRingHiAddr=0x5009C, /* 64 bit address extension. */ 329 TxProducerIdx=0x500A0, TxConsumerIdx=0x500A4, 330 TxThreshold=0x500B0, 331 CompletionHiAddr=0x500B4, TxCompletionAddr=0x500B8, 332 RxCompletionAddr=0x500BC, RxCompletionQ2Addr=0x500C0, 333 CompletionQConsumerIdx=0x500C4, RxDMACtrl=0x500D0, 334 RxDescQCtrl=0x500D4, RxDescQHiAddr=0x500DC, RxDescQAddr=0x500E0, 335 RxDescQIdx=0x500E8, RxDMAStatus=0x500F0, RxFilterMode=0x500F4, 336 TxMode=0x55000, VlanType=0x55064, 337 PerfFilterTable=0x56000, HashTable=0x56100, 338 TxGfpMem=0x58000, RxGfpMem=0x5a000, 339 }; 340 341 /* 342 * Bits in the interrupt status/mask registers. 343 * Warning: setting Intr[Ab]NormalSummary in the IntrEnable register 344 * enables all the interrupt sources that are or'ed into those status bits. 345 */ 346 enum intr_status_bits { 347 IntrLinkChange=0xf0000000, IntrStatsMax=0x08000000, 348 IntrAbnormalSummary=0x02000000, IntrGeneralTimer=0x01000000, 349 IntrSoftware=0x800000, IntrRxComplQ1Low=0x400000, 350 IntrTxComplQLow=0x200000, IntrPCI=0x100000, 351 IntrDMAErr=0x080000, IntrTxDataLow=0x040000, 352 IntrRxComplQ2Low=0x020000, IntrRxDescQ1Low=0x010000, 353 IntrNormalSummary=0x8000, IntrTxDone=0x4000, 354 IntrTxDMADone=0x2000, IntrTxEmpty=0x1000, 355 IntrEarlyRxQ2=0x0800, IntrEarlyRxQ1=0x0400, 356 IntrRxQ2Done=0x0200, IntrRxQ1Done=0x0100, 357 IntrRxGFPDead=0x80, IntrRxDescQ2Low=0x40, 358 IntrNoTxCsum=0x20, IntrTxBadID=0x10, 359 IntrHiPriTxBadID=0x08, IntrRxGfp=0x04, 360 IntrTxGfp=0x02, IntrPCIPad=0x01, 361 /* not quite bits */ 362 IntrRxDone=IntrRxQ2Done | IntrRxQ1Done, 363 IntrRxEmpty=IntrRxDescQ1Low | IntrRxDescQ2Low, 364 IntrNormalMask=0xff00, IntrAbnormalMask=0x3ff00fe, 365 }; 366 367 /* Bits in the RxFilterMode register. */ 368 enum rx_mode_bits { 369 AcceptBroadcast=0x04, AcceptAllMulticast=0x02, AcceptAll=0x01, 370 AcceptMulticast=0x10, PerfectFilter=0x40, HashFilter=0x30, 371 PerfectFilterVlan=0x80, MinVLANPrio=0xE000, VlanMode=0x0200, 372 WakeupOnGFP=0x0800, 373 }; 374 375 /* Bits in the TxMode register */ 376 enum tx_mode_bits { 377 MiiSoftReset=0x8000, MIILoopback=0x4000, 378 TxFlowEnable=0x0800, RxFlowEnable=0x0400, 379 PadEnable=0x04, FullDuplex=0x02, HugeFrame=0x01, 380 }; 381 382 /* Bits in the TxDescCtrl register. */ 383 enum tx_ctrl_bits { 384 TxDescSpaceUnlim=0x00, TxDescSpace32=0x10, TxDescSpace64=0x20, 385 TxDescSpace128=0x30, TxDescSpace256=0x40, 386 TxDescType0=0x00, TxDescType1=0x01, TxDescType2=0x02, 387 TxDescType3=0x03, TxDescType4=0x04, 388 TxNoDMACompletion=0x08, 389 TxDescQAddr64bit=0x80, TxDescQAddr32bit=0, 390 TxHiPriFIFOThreshShift=24, TxPadLenShift=16, 391 TxDMABurstSizeShift=8, 392 }; 393 394 /* Bits in the RxDescQCtrl register. */ 395 enum rx_ctrl_bits { 396 RxBufferLenShift=16, RxMinDescrThreshShift=0, 397 RxPrefetchMode=0x8000, RxVariableQ=0x2000, 398 Rx2048QEntries=0x4000, Rx256QEntries=0, 399 RxDescAddr64bit=0x1000, RxDescAddr32bit=0, 400 RxDescQAddr64bit=0x0100, RxDescQAddr32bit=0, 401 RxDescSpace4=0x000, RxDescSpace8=0x100, 402 RxDescSpace16=0x200, RxDescSpace32=0x300, 403 RxDescSpace64=0x400, RxDescSpace128=0x500, 404 RxConsumerWrEn=0x80, 405 }; 406 407 /* Bits in the RxDMACtrl register. */ 408 enum rx_dmactrl_bits { 409 RxReportBadFrames=0x80000000, RxDMAShortFrames=0x40000000, 410 RxDMABadFrames=0x20000000, RxDMACrcErrorFrames=0x10000000, 411 RxDMAControlFrame=0x08000000, RxDMAPauseFrame=0x04000000, 412 RxChecksumIgnore=0, RxChecksumRejectTCPUDP=0x02000000, 413 RxChecksumRejectTCPOnly=0x01000000, 414 RxCompletionQ2Enable=0x800000, 415 RxDMAQ2Disable=0, RxDMAQ2FPOnly=0x100000, 416 RxDMAQ2SmallPkt=0x200000, RxDMAQ2HighPrio=0x300000, 417 RxDMAQ2NonIP=0x400000, 418 RxUseBackupQueue=0x080000, RxDMACRC=0x040000, 419 RxEarlyIntThreshShift=12, RxHighPrioThreshShift=8, 420 RxBurstSizeShift=0, 421 }; 422 423 /* Bits in the RxCompletionAddr register */ 424 enum rx_compl_bits { 425 RxComplQAddr64bit=0x80, RxComplQAddr32bit=0, 426 RxComplProducerWrEn=0x40, 427 RxComplType0=0x00, RxComplType1=0x10, 428 RxComplType2=0x20, RxComplType3=0x30, 429 RxComplThreshShift=0, 430 }; 431 432 /* Bits in the TxCompletionAddr register */ 433 enum tx_compl_bits { 434 TxComplQAddr64bit=0x80, TxComplQAddr32bit=0, 435 TxComplProducerWrEn=0x40, 436 TxComplIntrStatus=0x20, 437 CommonQueueMode=0x10, 438 TxComplThreshShift=0, 439 }; 440 441 /* Bits in the GenCtrl register */ 442 enum gen_ctrl_bits { 443 RxEnable=0x05, TxEnable=0x0a, 444 RxGFPEnable=0x10, TxGFPEnable=0x20, 445 }; 446 447 /* Bits in the IntrTimerCtrl register */ 448 enum intr_ctrl_bits { 449 Timer10X=0x800, EnableIntrMasking=0x60, SmallFrameBypass=0x100, 450 SmallFrame64=0, SmallFrame128=0x200, SmallFrame256=0x400, SmallFrame512=0x600, 451 IntrLatencyMask=0x1f, 452 }; 453 454 /* The Rx and Tx buffer descriptors. */ 455 struct starfire_rx_desc { 456 netdrv_addr_t rxaddr; 457 }; 458 enum rx_desc_bits { 459 RxDescValid=1, RxDescEndRing=2, 460 }; 461 462 /* Completion queue entry. */ 463 struct short_rx_done_desc { 464 __le32 status; /* Low 16 bits is length. */ 465 }; 466 struct basic_rx_done_desc { 467 __le32 status; /* Low 16 bits is length. */ 468 __le16 vlanid; 469 __le16 status2; 470 }; 471 struct csum_rx_done_desc { 472 __le32 status; /* Low 16 bits is length. */ 473 __le16 csum; /* Partial checksum */ 474 __le16 status2; 475 }; 476 struct full_rx_done_desc { 477 __le32 status; /* Low 16 bits is length. */ 478 __le16 status3; 479 __le16 status2; 480 __le16 vlanid; 481 __le16 csum; /* partial checksum */ 482 __le32 timestamp; 483 }; 484 /* XXX: this is ugly and I'm not sure it's worth the trouble -Ion */ 485 #ifdef VLAN_SUPPORT 486 typedef struct full_rx_done_desc rx_done_desc; 487 #define RxComplType RxComplType3 488 #else /* not VLAN_SUPPORT */ 489 typedef struct csum_rx_done_desc rx_done_desc; 490 #define RxComplType RxComplType2 491 #endif /* not VLAN_SUPPORT */ 492 493 enum rx_done_bits { 494 RxOK=0x20000000, RxFIFOErr=0x10000000, RxBufQ2=0x08000000, 495 }; 496 497 /* Type 1 Tx descriptor. */ 498 struct starfire_tx_desc_1 { 499 __le32 status; /* Upper bits are status, lower 16 length. */ 500 __le32 addr; 501 }; 502 503 /* Type 2 Tx descriptor. */ 504 struct starfire_tx_desc_2 { 505 __le32 status; /* Upper bits are status, lower 16 length. */ 506 __le32 reserved; 507 __le64 addr; 508 }; 509 510 #ifdef ADDR_64BITS 511 typedef struct starfire_tx_desc_2 starfire_tx_desc; 512 #define TX_DESC_TYPE TxDescType2 513 #else /* not ADDR_64BITS */ 514 typedef struct starfire_tx_desc_1 starfire_tx_desc; 515 #define TX_DESC_TYPE TxDescType1 516 #endif /* not ADDR_64BITS */ 517 #define TX_DESC_SPACING TxDescSpaceUnlim 518 519 enum tx_desc_bits { 520 TxDescID=0xB0000000, 521 TxCRCEn=0x01000000, TxDescIntr=0x08000000, 522 TxRingWrap=0x04000000, TxCalTCP=0x02000000, 523 }; 524 struct tx_done_desc { 525 __le32 status; /* timestamp, index. */ 526 #if 0 527 __le32 intrstatus; /* interrupt status */ 528 #endif 529 }; 530 531 struct rx_ring_info { 532 struct sk_buff *skb; 533 dma_addr_t mapping; 534 }; 535 struct tx_ring_info { 536 struct sk_buff *skb; 537 dma_addr_t mapping; 538 unsigned int used_slots; 539 }; 540 541 #define PHY_CNT 2 542 struct netdev_private { 543 /* Descriptor rings first for alignment. */ 544 struct starfire_rx_desc *rx_ring; 545 starfire_tx_desc *tx_ring; 546 dma_addr_t rx_ring_dma; 547 dma_addr_t tx_ring_dma; 548 /* The addresses of rx/tx-in-place skbuffs. */ 549 struct rx_ring_info rx_info[RX_RING_SIZE]; 550 struct tx_ring_info tx_info[TX_RING_SIZE]; 551 /* Pointers to completion queues (full pages). */ 552 rx_done_desc *rx_done_q; 553 dma_addr_t rx_done_q_dma; 554 unsigned int rx_done; 555 struct tx_done_desc *tx_done_q; 556 dma_addr_t tx_done_q_dma; 557 unsigned int tx_done; 558 struct napi_struct napi; 559 struct net_device *dev; 560 struct pci_dev *pci_dev; 561 #ifdef VLAN_SUPPORT 562 unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)]; 563 #endif 564 void *queue_mem; 565 dma_addr_t queue_mem_dma; 566 size_t queue_mem_size; 567 568 /* Frequently used values: keep some adjacent for cache effect. */ 569 spinlock_t lock; 570 unsigned int cur_rx, dirty_rx; /* Producer/consumer ring indices */ 571 unsigned int cur_tx, dirty_tx, reap_tx; 572 unsigned int rx_buf_sz; /* Based on MTU+slack. */ 573 /* These values keep track of the transceiver/media in use. */ 574 int speed100; /* Set if speed == 100MBit. */ 575 u32 tx_mode; 576 u32 intr_timer_ctrl; 577 u8 tx_threshold; 578 /* MII transceiver section. */ 579 struct mii_if_info mii_if; /* MII lib hooks/info */ 580 int phy_cnt; /* MII device addresses. */ 581 unsigned char phys[PHY_CNT]; /* MII device addresses. */ 582 void __iomem *base; 583 }; 584 585 586 static int mdio_read(struct net_device *dev, int phy_id, int location); 587 static void mdio_write(struct net_device *dev, int phy_id, int location, int value); 588 static int netdev_open(struct net_device *dev); 589 static void check_duplex(struct net_device *dev); 590 static void tx_timeout(struct net_device *dev); 591 static void init_ring(struct net_device *dev); 592 static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev); 593 static irqreturn_t intr_handler(int irq, void *dev_instance); 594 static void netdev_error(struct net_device *dev, int intr_status); 595 static int __netdev_rx(struct net_device *dev, int *quota); 596 static int netdev_poll(struct napi_struct *napi, int budget); 597 static void refill_rx_ring(struct net_device *dev); 598 static void netdev_error(struct net_device *dev, int intr_status); 599 static void set_rx_mode(struct net_device *dev); 600 static struct net_device_stats *get_stats(struct net_device *dev); 601 static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); 602 static int netdev_close(struct net_device *dev); 603 static void netdev_media_change(struct net_device *dev); 604 static const struct ethtool_ops ethtool_ops; 605 606 607 #ifdef VLAN_SUPPORT 608 static int netdev_vlan_rx_add_vid(struct net_device *dev, 609 __be16 proto, u16 vid) 610 { 611 struct netdev_private *np = netdev_priv(dev); 612 613 spin_lock(&np->lock); 614 if (debug > 1) 615 printk("%s: Adding vlanid %d to vlan filter\n", dev->name, vid); 616 set_bit(vid, np->active_vlans); 617 set_rx_mode(dev); 618 spin_unlock(&np->lock); 619 620 return 0; 621 } 622 623 static int netdev_vlan_rx_kill_vid(struct net_device *dev, 624 __be16 proto, u16 vid) 625 { 626 struct netdev_private *np = netdev_priv(dev); 627 628 spin_lock(&np->lock); 629 if (debug > 1) 630 printk("%s: removing vlanid %d from vlan filter\n", dev->name, vid); 631 clear_bit(vid, np->active_vlans); 632 set_rx_mode(dev); 633 spin_unlock(&np->lock); 634 635 return 0; 636 } 637 #endif /* VLAN_SUPPORT */ 638 639 640 static const struct net_device_ops netdev_ops = { 641 .ndo_open = netdev_open, 642 .ndo_stop = netdev_close, 643 .ndo_start_xmit = start_tx, 644 .ndo_tx_timeout = tx_timeout, 645 .ndo_get_stats = get_stats, 646 .ndo_set_rx_mode = set_rx_mode, 647 .ndo_do_ioctl = netdev_ioctl, 648 .ndo_set_mac_address = eth_mac_addr, 649 .ndo_validate_addr = eth_validate_addr, 650 #ifdef VLAN_SUPPORT 651 .ndo_vlan_rx_add_vid = netdev_vlan_rx_add_vid, 652 .ndo_vlan_rx_kill_vid = netdev_vlan_rx_kill_vid, 653 #endif 654 }; 655 656 static int starfire_init_one(struct pci_dev *pdev, 657 const struct pci_device_id *ent) 658 { 659 struct device *d = &pdev->dev; 660 struct netdev_private *np; 661 int i, irq, chip_idx = ent->driver_data; 662 struct net_device *dev; 663 long ioaddr; 664 void __iomem *base; 665 int drv_flags, io_size; 666 int boguscnt; 667 668 /* when built into the kernel, we only print version if device is found */ 669 #ifndef MODULE 670 static int printed_version; 671 if (!printed_version++) 672 printk(version); 673 #endif 674 675 if (pci_enable_device (pdev)) 676 return -EIO; 677 678 ioaddr = pci_resource_start(pdev, 0); 679 io_size = pci_resource_len(pdev, 0); 680 if (!ioaddr || ((pci_resource_flags(pdev, 0) & IORESOURCE_MEM) == 0)) { 681 dev_err(d, "no PCI MEM resources, aborting\n"); 682 return -ENODEV; 683 } 684 685 dev = alloc_etherdev(sizeof(*np)); 686 if (!dev) 687 return -ENOMEM; 688 689 SET_NETDEV_DEV(dev, &pdev->dev); 690 691 irq = pdev->irq; 692 693 if (pci_request_regions (pdev, DRV_NAME)) { 694 dev_err(d, "cannot reserve PCI resources, aborting\n"); 695 goto err_out_free_netdev; 696 } 697 698 base = ioremap(ioaddr, io_size); 699 if (!base) { 700 dev_err(d, "cannot remap %#x @ %#lx, aborting\n", 701 io_size, ioaddr); 702 goto err_out_free_res; 703 } 704 705 pci_set_master(pdev); 706 707 /* enable MWI -- it vastly improves Rx performance on sparc64 */ 708 pci_try_set_mwi(pdev); 709 710 #ifdef ZEROCOPY 711 /* Starfire can do TCP/UDP checksumming */ 712 if (enable_hw_cksum) 713 dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG; 714 #endif /* ZEROCOPY */ 715 716 #ifdef VLAN_SUPPORT 717 dev->features |= NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_CTAG_FILTER; 718 #endif /* VLAN_RX_KILL_VID */ 719 #ifdef ADDR_64BITS 720 dev->features |= NETIF_F_HIGHDMA; 721 #endif /* ADDR_64BITS */ 722 723 /* Serial EEPROM reads are hidden by the hardware. */ 724 for (i = 0; i < 6; i++) 725 dev->dev_addr[i] = readb(base + EEPROMCtrl + 20 - i); 726 727 #if ! defined(final_version) /* Dump the EEPROM contents during development. */ 728 if (debug > 4) 729 for (i = 0; i < 0x20; i++) 730 printk("%2.2x%s", 731 (unsigned int)readb(base + EEPROMCtrl + i), 732 i % 16 != 15 ? " " : "\n"); 733 #endif 734 735 /* Issue soft reset */ 736 writel(MiiSoftReset, base + TxMode); 737 udelay(1000); 738 writel(0, base + TxMode); 739 740 /* Reset the chip to erase previous misconfiguration. */ 741 writel(1, base + PCIDeviceConfig); 742 boguscnt = 1000; 743 while (--boguscnt > 0) { 744 udelay(10); 745 if ((readl(base + PCIDeviceConfig) & 1) == 0) 746 break; 747 } 748 if (boguscnt == 0) 749 printk("%s: chipset reset never completed!\n", dev->name); 750 /* wait a little longer */ 751 udelay(1000); 752 753 np = netdev_priv(dev); 754 np->dev = dev; 755 np->base = base; 756 spin_lock_init(&np->lock); 757 pci_set_drvdata(pdev, dev); 758 759 np->pci_dev = pdev; 760 761 np->mii_if.dev = dev; 762 np->mii_if.mdio_read = mdio_read; 763 np->mii_if.mdio_write = mdio_write; 764 np->mii_if.phy_id_mask = 0x1f; 765 np->mii_if.reg_num_mask = 0x1f; 766 767 drv_flags = netdrv_tbl[chip_idx].drv_flags; 768 769 np->speed100 = 1; 770 771 /* timer resolution is 128 * 0.8us */ 772 np->intr_timer_ctrl = (((intr_latency * 10) / 1024) & IntrLatencyMask) | 773 Timer10X | EnableIntrMasking; 774 775 if (small_frames > 0) { 776 np->intr_timer_ctrl |= SmallFrameBypass; 777 switch (small_frames) { 778 case 1 ... 64: 779 np->intr_timer_ctrl |= SmallFrame64; 780 break; 781 case 65 ... 128: 782 np->intr_timer_ctrl |= SmallFrame128; 783 break; 784 case 129 ... 256: 785 np->intr_timer_ctrl |= SmallFrame256; 786 break; 787 default: 788 np->intr_timer_ctrl |= SmallFrame512; 789 if (small_frames > 512) 790 printk("Adjusting small_frames down to 512\n"); 791 break; 792 } 793 } 794 795 dev->netdev_ops = &netdev_ops; 796 dev->watchdog_timeo = TX_TIMEOUT; 797 dev->ethtool_ops = &ethtool_ops; 798 799 netif_napi_add(dev, &np->napi, netdev_poll, max_interrupt_work); 800 801 if (mtu) 802 dev->mtu = mtu; 803 804 if (register_netdev(dev)) 805 goto err_out_cleardev; 806 807 printk(KERN_INFO "%s: %s at %p, %pM, IRQ %d.\n", 808 dev->name, netdrv_tbl[chip_idx].name, base, 809 dev->dev_addr, irq); 810 811 if (drv_flags & CanHaveMII) { 812 int phy, phy_idx = 0; 813 int mii_status; 814 for (phy = 0; phy < 32 && phy_idx < PHY_CNT; phy++) { 815 mdio_write(dev, phy, MII_BMCR, BMCR_RESET); 816 mdelay(100); 817 boguscnt = 1000; 818 while (--boguscnt > 0) 819 if ((mdio_read(dev, phy, MII_BMCR) & BMCR_RESET) == 0) 820 break; 821 if (boguscnt == 0) { 822 printk("%s: PHY#%d reset never completed!\n", dev->name, phy); 823 continue; 824 } 825 mii_status = mdio_read(dev, phy, MII_BMSR); 826 if (mii_status != 0) { 827 np->phys[phy_idx++] = phy; 828 np->mii_if.advertising = mdio_read(dev, phy, MII_ADVERTISE); 829 printk(KERN_INFO "%s: MII PHY found at address %d, status " 830 "%#4.4x advertising %#4.4x.\n", 831 dev->name, phy, mii_status, np->mii_if.advertising); 832 /* there can be only one PHY on-board */ 833 break; 834 } 835 } 836 np->phy_cnt = phy_idx; 837 if (np->phy_cnt > 0) 838 np->mii_if.phy_id = np->phys[0]; 839 else 840 memset(&np->mii_if, 0, sizeof(np->mii_if)); 841 } 842 843 printk(KERN_INFO "%s: scatter-gather and hardware TCP cksumming %s.\n", 844 dev->name, enable_hw_cksum ? "enabled" : "disabled"); 845 return 0; 846 847 err_out_cleardev: 848 iounmap(base); 849 err_out_free_res: 850 pci_release_regions (pdev); 851 err_out_free_netdev: 852 free_netdev(dev); 853 return -ENODEV; 854 } 855 856 857 /* Read the MII Management Data I/O (MDIO) interfaces. */ 858 static int mdio_read(struct net_device *dev, int phy_id, int location) 859 { 860 struct netdev_private *np = netdev_priv(dev); 861 void __iomem *mdio_addr = np->base + MIICtrl + (phy_id<<7) + (location<<2); 862 int result, boguscnt=1000; 863 /* ??? Should we add a busy-wait here? */ 864 do { 865 result = readl(mdio_addr); 866 } while ((result & 0xC0000000) != 0x80000000 && --boguscnt > 0); 867 if (boguscnt == 0) 868 return 0; 869 if ((result & 0xffff) == 0xffff) 870 return 0; 871 return result & 0xffff; 872 } 873 874 875 static void mdio_write(struct net_device *dev, int phy_id, int location, int value) 876 { 877 struct netdev_private *np = netdev_priv(dev); 878 void __iomem *mdio_addr = np->base + MIICtrl + (phy_id<<7) + (location<<2); 879 writel(value, mdio_addr); 880 /* The busy-wait will occur before a read. */ 881 } 882 883 884 static int netdev_open(struct net_device *dev) 885 { 886 const struct firmware *fw_rx, *fw_tx; 887 const __be32 *fw_rx_data, *fw_tx_data; 888 struct netdev_private *np = netdev_priv(dev); 889 void __iomem *ioaddr = np->base; 890 const int irq = np->pci_dev->irq; 891 int i, retval; 892 size_t tx_size, rx_size; 893 size_t tx_done_q_size, rx_done_q_size, tx_ring_size, rx_ring_size; 894 895 /* Do we ever need to reset the chip??? */ 896 897 retval = request_irq(irq, intr_handler, IRQF_SHARED, dev->name, dev); 898 if (retval) 899 return retval; 900 901 /* Disable the Rx and Tx, and reset the chip. */ 902 writel(0, ioaddr + GenCtrl); 903 writel(1, ioaddr + PCIDeviceConfig); 904 if (debug > 1) 905 printk(KERN_DEBUG "%s: netdev_open() irq %d.\n", 906 dev->name, irq); 907 908 /* Allocate the various queues. */ 909 if (!np->queue_mem) { 910 tx_done_q_size = ((sizeof(struct tx_done_desc) * DONE_Q_SIZE + QUEUE_ALIGN - 1) / QUEUE_ALIGN) * QUEUE_ALIGN; 911 rx_done_q_size = ((sizeof(rx_done_desc) * DONE_Q_SIZE + QUEUE_ALIGN - 1) / QUEUE_ALIGN) * QUEUE_ALIGN; 912 tx_ring_size = ((sizeof(starfire_tx_desc) * TX_RING_SIZE + QUEUE_ALIGN - 1) / QUEUE_ALIGN) * QUEUE_ALIGN; 913 rx_ring_size = sizeof(struct starfire_rx_desc) * RX_RING_SIZE; 914 np->queue_mem_size = tx_done_q_size + rx_done_q_size + tx_ring_size + rx_ring_size; 915 np->queue_mem = pci_alloc_consistent(np->pci_dev, np->queue_mem_size, &np->queue_mem_dma); 916 if (np->queue_mem == NULL) { 917 free_irq(irq, dev); 918 return -ENOMEM; 919 } 920 921 np->tx_done_q = np->queue_mem; 922 np->tx_done_q_dma = np->queue_mem_dma; 923 np->rx_done_q = (void *) np->tx_done_q + tx_done_q_size; 924 np->rx_done_q_dma = np->tx_done_q_dma + tx_done_q_size; 925 np->tx_ring = (void *) np->rx_done_q + rx_done_q_size; 926 np->tx_ring_dma = np->rx_done_q_dma + rx_done_q_size; 927 np->rx_ring = (void *) np->tx_ring + tx_ring_size; 928 np->rx_ring_dma = np->tx_ring_dma + tx_ring_size; 929 } 930 931 /* Start with no carrier, it gets adjusted later */ 932 netif_carrier_off(dev); 933 init_ring(dev); 934 /* Set the size of the Rx buffers. */ 935 writel((np->rx_buf_sz << RxBufferLenShift) | 936 (0 << RxMinDescrThreshShift) | 937 RxPrefetchMode | RxVariableQ | 938 RX_Q_ENTRIES | 939 RX_DESC_Q_ADDR_SIZE | RX_DESC_ADDR_SIZE | 940 RxDescSpace4, 941 ioaddr + RxDescQCtrl); 942 943 /* Set up the Rx DMA controller. */ 944 writel(RxChecksumIgnore | 945 (0 << RxEarlyIntThreshShift) | 946 (6 << RxHighPrioThreshShift) | 947 ((DMA_BURST_SIZE / 32) << RxBurstSizeShift), 948 ioaddr + RxDMACtrl); 949 950 /* Set Tx descriptor */ 951 writel((2 << TxHiPriFIFOThreshShift) | 952 (0 << TxPadLenShift) | 953 ((DMA_BURST_SIZE / 32) << TxDMABurstSizeShift) | 954 TX_DESC_Q_ADDR_SIZE | 955 TX_DESC_SPACING | TX_DESC_TYPE, 956 ioaddr + TxDescCtrl); 957 958 writel( (np->queue_mem_dma >> 16) >> 16, ioaddr + RxDescQHiAddr); 959 writel( (np->queue_mem_dma >> 16) >> 16, ioaddr + TxRingHiAddr); 960 writel( (np->queue_mem_dma >> 16) >> 16, ioaddr + CompletionHiAddr); 961 writel(np->rx_ring_dma, ioaddr + RxDescQAddr); 962 writel(np->tx_ring_dma, ioaddr + TxRingPtr); 963 964 writel(np->tx_done_q_dma, ioaddr + TxCompletionAddr); 965 writel(np->rx_done_q_dma | 966 RxComplType | 967 (0 << RxComplThreshShift), 968 ioaddr + RxCompletionAddr); 969 970 if (debug > 1) 971 printk(KERN_DEBUG "%s: Filling in the station address.\n", dev->name); 972 973 /* Fill both the Tx SA register and the Rx perfect filter. */ 974 for (i = 0; i < 6; i++) 975 writeb(dev->dev_addr[i], ioaddr + TxStationAddr + 5 - i); 976 /* The first entry is special because it bypasses the VLAN filter. 977 Don't use it. */ 978 writew(0, ioaddr + PerfFilterTable); 979 writew(0, ioaddr + PerfFilterTable + 4); 980 writew(0, ioaddr + PerfFilterTable + 8); 981 for (i = 1; i < 16; i++) { 982 __be16 *eaddrs = (__be16 *)dev->dev_addr; 983 void __iomem *setup_frm = ioaddr + PerfFilterTable + i * 16; 984 writew(be16_to_cpu(eaddrs[2]), setup_frm); setup_frm += 4; 985 writew(be16_to_cpu(eaddrs[1]), setup_frm); setup_frm += 4; 986 writew(be16_to_cpu(eaddrs[0]), setup_frm); setup_frm += 8; 987 } 988 989 /* Initialize other registers. */ 990 /* Configure the PCI bus bursts and FIFO thresholds. */ 991 np->tx_mode = TxFlowEnable|RxFlowEnable|PadEnable; /* modified when link is up. */ 992 writel(MiiSoftReset | np->tx_mode, ioaddr + TxMode); 993 udelay(1000); 994 writel(np->tx_mode, ioaddr + TxMode); 995 np->tx_threshold = 4; 996 writel(np->tx_threshold, ioaddr + TxThreshold); 997 998 writel(np->intr_timer_ctrl, ioaddr + IntrTimerCtrl); 999 1000 napi_enable(&np->napi); 1001 1002 netif_start_queue(dev); 1003 1004 if (debug > 1) 1005 printk(KERN_DEBUG "%s: Setting the Rx and Tx modes.\n", dev->name); 1006 set_rx_mode(dev); 1007 1008 np->mii_if.advertising = mdio_read(dev, np->phys[0], MII_ADVERTISE); 1009 check_duplex(dev); 1010 1011 /* Enable GPIO interrupts on link change */ 1012 writel(0x0f00ff00, ioaddr + GPIOCtrl); 1013 1014 /* Set the interrupt mask */ 1015 writel(IntrRxDone | IntrRxEmpty | IntrDMAErr | 1016 IntrTxDMADone | IntrStatsMax | IntrLinkChange | 1017 IntrRxGFPDead | IntrNoTxCsum | IntrTxBadID, 1018 ioaddr + IntrEnable); 1019 /* Enable PCI interrupts. */ 1020 writel(0x00800000 | readl(ioaddr + PCIDeviceConfig), 1021 ioaddr + PCIDeviceConfig); 1022 1023 #ifdef VLAN_SUPPORT 1024 /* Set VLAN type to 802.1q */ 1025 writel(ETH_P_8021Q, ioaddr + VlanType); 1026 #endif /* VLAN_SUPPORT */ 1027 1028 retval = request_firmware(&fw_rx, FIRMWARE_RX, &np->pci_dev->dev); 1029 if (retval) { 1030 printk(KERN_ERR "starfire: Failed to load firmware \"%s\"\n", 1031 FIRMWARE_RX); 1032 goto out_init; 1033 } 1034 if (fw_rx->size % 4) { 1035 printk(KERN_ERR "starfire: bogus length %zu in \"%s\"\n", 1036 fw_rx->size, FIRMWARE_RX); 1037 retval = -EINVAL; 1038 goto out_rx; 1039 } 1040 retval = request_firmware(&fw_tx, FIRMWARE_TX, &np->pci_dev->dev); 1041 if (retval) { 1042 printk(KERN_ERR "starfire: Failed to load firmware \"%s\"\n", 1043 FIRMWARE_TX); 1044 goto out_rx; 1045 } 1046 if (fw_tx->size % 4) { 1047 printk(KERN_ERR "starfire: bogus length %zu in \"%s\"\n", 1048 fw_tx->size, FIRMWARE_TX); 1049 retval = -EINVAL; 1050 goto out_tx; 1051 } 1052 fw_rx_data = (const __be32 *)&fw_rx->data[0]; 1053 fw_tx_data = (const __be32 *)&fw_tx->data[0]; 1054 rx_size = fw_rx->size / 4; 1055 tx_size = fw_tx->size / 4; 1056 1057 /* Load Rx/Tx firmware into the frame processors */ 1058 for (i = 0; i < rx_size; i++) 1059 writel(be32_to_cpup(&fw_rx_data[i]), ioaddr + RxGfpMem + i * 4); 1060 for (i = 0; i < tx_size; i++) 1061 writel(be32_to_cpup(&fw_tx_data[i]), ioaddr + TxGfpMem + i * 4); 1062 if (enable_hw_cksum) 1063 /* Enable the Rx and Tx units, and the Rx/Tx frame processors. */ 1064 writel(TxEnable|TxGFPEnable|RxEnable|RxGFPEnable, ioaddr + GenCtrl); 1065 else 1066 /* Enable the Rx and Tx units only. */ 1067 writel(TxEnable|RxEnable, ioaddr + GenCtrl); 1068 1069 if (debug > 1) 1070 printk(KERN_DEBUG "%s: Done netdev_open().\n", 1071 dev->name); 1072 1073 out_tx: 1074 release_firmware(fw_tx); 1075 out_rx: 1076 release_firmware(fw_rx); 1077 out_init: 1078 if (retval) 1079 netdev_close(dev); 1080 return retval; 1081 } 1082 1083 1084 static void check_duplex(struct net_device *dev) 1085 { 1086 struct netdev_private *np = netdev_priv(dev); 1087 u16 reg0; 1088 int silly_count = 1000; 1089 1090 mdio_write(dev, np->phys[0], MII_ADVERTISE, np->mii_if.advertising); 1091 mdio_write(dev, np->phys[0], MII_BMCR, BMCR_RESET); 1092 udelay(500); 1093 while (--silly_count && mdio_read(dev, np->phys[0], MII_BMCR) & BMCR_RESET) 1094 /* do nothing */; 1095 if (!silly_count) { 1096 printk("%s: MII reset failed!\n", dev->name); 1097 return; 1098 } 1099 1100 reg0 = mdio_read(dev, np->phys[0], MII_BMCR); 1101 1102 if (!np->mii_if.force_media) { 1103 reg0 |= BMCR_ANENABLE | BMCR_ANRESTART; 1104 } else { 1105 reg0 &= ~(BMCR_ANENABLE | BMCR_ANRESTART); 1106 if (np->speed100) 1107 reg0 |= BMCR_SPEED100; 1108 if (np->mii_if.full_duplex) 1109 reg0 |= BMCR_FULLDPLX; 1110 printk(KERN_DEBUG "%s: Link forced to %sMbit %s-duplex\n", 1111 dev->name, 1112 np->speed100 ? "100" : "10", 1113 np->mii_if.full_duplex ? "full" : "half"); 1114 } 1115 mdio_write(dev, np->phys[0], MII_BMCR, reg0); 1116 } 1117 1118 1119 static void tx_timeout(struct net_device *dev) 1120 { 1121 struct netdev_private *np = netdev_priv(dev); 1122 void __iomem *ioaddr = np->base; 1123 int old_debug; 1124 1125 printk(KERN_WARNING "%s: Transmit timed out, status %#8.8x, " 1126 "resetting...\n", dev->name, (int) readl(ioaddr + IntrStatus)); 1127 1128 /* Perhaps we should reinitialize the hardware here. */ 1129 1130 /* 1131 * Stop and restart the interface. 1132 * Cheat and increase the debug level temporarily. 1133 */ 1134 old_debug = debug; 1135 debug = 2; 1136 netdev_close(dev); 1137 netdev_open(dev); 1138 debug = old_debug; 1139 1140 /* Trigger an immediate transmit demand. */ 1141 1142 netif_trans_update(dev); /* prevent tx timeout */ 1143 dev->stats.tx_errors++; 1144 netif_wake_queue(dev); 1145 } 1146 1147 1148 /* Initialize the Rx and Tx rings, along with various 'dev' bits. */ 1149 static void init_ring(struct net_device *dev) 1150 { 1151 struct netdev_private *np = netdev_priv(dev); 1152 int i; 1153 1154 np->cur_rx = np->cur_tx = np->reap_tx = 0; 1155 np->dirty_rx = np->dirty_tx = np->rx_done = np->tx_done = 0; 1156 1157 np->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32); 1158 1159 /* Fill in the Rx buffers. Handle allocation failure gracefully. */ 1160 for (i = 0; i < RX_RING_SIZE; i++) { 1161 struct sk_buff *skb = netdev_alloc_skb(dev, np->rx_buf_sz); 1162 np->rx_info[i].skb = skb; 1163 if (skb == NULL) 1164 break; 1165 np->rx_info[i].mapping = pci_map_single(np->pci_dev, skb->data, np->rx_buf_sz, PCI_DMA_FROMDEVICE); 1166 /* Grrr, we cannot offset to correctly align the IP header. */ 1167 np->rx_ring[i].rxaddr = cpu_to_dma(np->rx_info[i].mapping | RxDescValid); 1168 } 1169 writew(i - 1, np->base + RxDescQIdx); 1170 np->dirty_rx = (unsigned int)(i - RX_RING_SIZE); 1171 1172 /* Clear the remainder of the Rx buffer ring. */ 1173 for ( ; i < RX_RING_SIZE; i++) { 1174 np->rx_ring[i].rxaddr = 0; 1175 np->rx_info[i].skb = NULL; 1176 np->rx_info[i].mapping = 0; 1177 } 1178 /* Mark the last entry as wrapping the ring. */ 1179 np->rx_ring[RX_RING_SIZE - 1].rxaddr |= cpu_to_dma(RxDescEndRing); 1180 1181 /* Clear the completion rings. */ 1182 for (i = 0; i < DONE_Q_SIZE; i++) { 1183 np->rx_done_q[i].status = 0; 1184 np->tx_done_q[i].status = 0; 1185 } 1186 1187 for (i = 0; i < TX_RING_SIZE; i++) 1188 memset(&np->tx_info[i], 0, sizeof(np->tx_info[i])); 1189 } 1190 1191 1192 static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev) 1193 { 1194 struct netdev_private *np = netdev_priv(dev); 1195 unsigned int entry; 1196 u32 status; 1197 int i; 1198 1199 /* 1200 * be cautious here, wrapping the queue has weird semantics 1201 * and we may not have enough slots even when it seems we do. 1202 */ 1203 if ((np->cur_tx - np->dirty_tx) + skb_num_frags(skb) * 2 > TX_RING_SIZE) { 1204 netif_stop_queue(dev); 1205 return NETDEV_TX_BUSY; 1206 } 1207 1208 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 1209 if (skb->ip_summed == CHECKSUM_PARTIAL) { 1210 if (skb_padto(skb, (skb->len + PADDING_MASK) & ~PADDING_MASK)) 1211 return NETDEV_TX_OK; 1212 } 1213 #endif /* ZEROCOPY && HAS_BROKEN_FIRMWARE */ 1214 1215 entry = np->cur_tx % TX_RING_SIZE; 1216 for (i = 0; i < skb_num_frags(skb); i++) { 1217 int wrap_ring = 0; 1218 status = TxDescID; 1219 1220 if (i == 0) { 1221 np->tx_info[entry].skb = skb; 1222 status |= TxCRCEn; 1223 if (entry >= TX_RING_SIZE - skb_num_frags(skb)) { 1224 status |= TxRingWrap; 1225 wrap_ring = 1; 1226 } 1227 if (np->reap_tx) { 1228 status |= TxDescIntr; 1229 np->reap_tx = 0; 1230 } 1231 if (skb->ip_summed == CHECKSUM_PARTIAL) { 1232 status |= TxCalTCP; 1233 dev->stats.tx_compressed++; 1234 } 1235 status |= skb_first_frag_len(skb) | (skb_num_frags(skb) << 16); 1236 1237 np->tx_info[entry].mapping = 1238 pci_map_single(np->pci_dev, skb->data, skb_first_frag_len(skb), PCI_DMA_TODEVICE); 1239 } else { 1240 const skb_frag_t *this_frag = &skb_shinfo(skb)->frags[i - 1]; 1241 status |= skb_frag_size(this_frag); 1242 np->tx_info[entry].mapping = 1243 pci_map_single(np->pci_dev, 1244 skb_frag_address(this_frag), 1245 skb_frag_size(this_frag), 1246 PCI_DMA_TODEVICE); 1247 } 1248 1249 np->tx_ring[entry].addr = cpu_to_dma(np->tx_info[entry].mapping); 1250 np->tx_ring[entry].status = cpu_to_le32(status); 1251 if (debug > 3) 1252 printk(KERN_DEBUG "%s: Tx #%d/#%d slot %d status %#8.8x.\n", 1253 dev->name, np->cur_tx, np->dirty_tx, 1254 entry, status); 1255 if (wrap_ring) { 1256 np->tx_info[entry].used_slots = TX_RING_SIZE - entry; 1257 np->cur_tx += np->tx_info[entry].used_slots; 1258 entry = 0; 1259 } else { 1260 np->tx_info[entry].used_slots = 1; 1261 np->cur_tx += np->tx_info[entry].used_slots; 1262 entry++; 1263 } 1264 /* scavenge the tx descriptors twice per TX_RING_SIZE */ 1265 if (np->cur_tx % (TX_RING_SIZE / 2) == 0) 1266 np->reap_tx = 1; 1267 } 1268 1269 /* Non-x86: explicitly flush descriptor cache lines here. */ 1270 /* Ensure all descriptors are written back before the transmit is 1271 initiated. - Jes */ 1272 wmb(); 1273 1274 /* Update the producer index. */ 1275 writel(entry * (sizeof(starfire_tx_desc) / 8), np->base + TxProducerIdx); 1276 1277 /* 4 is arbitrary, but should be ok */ 1278 if ((np->cur_tx - np->dirty_tx) + 4 > TX_RING_SIZE) 1279 netif_stop_queue(dev); 1280 1281 return NETDEV_TX_OK; 1282 } 1283 1284 1285 /* The interrupt handler does all of the Rx thread work and cleans up 1286 after the Tx thread. */ 1287 static irqreturn_t intr_handler(int irq, void *dev_instance) 1288 { 1289 struct net_device *dev = dev_instance; 1290 struct netdev_private *np = netdev_priv(dev); 1291 void __iomem *ioaddr = np->base; 1292 int boguscnt = max_interrupt_work; 1293 int consumer; 1294 int tx_status; 1295 int handled = 0; 1296 1297 do { 1298 u32 intr_status = readl(ioaddr + IntrClear); 1299 1300 if (debug > 4) 1301 printk(KERN_DEBUG "%s: Interrupt status %#8.8x.\n", 1302 dev->name, intr_status); 1303 1304 if (intr_status == 0 || intr_status == (u32) -1) 1305 break; 1306 1307 handled = 1; 1308 1309 if (intr_status & (IntrRxDone | IntrRxEmpty)) { 1310 u32 enable; 1311 1312 if (likely(napi_schedule_prep(&np->napi))) { 1313 __napi_schedule(&np->napi); 1314 enable = readl(ioaddr + IntrEnable); 1315 enable &= ~(IntrRxDone | IntrRxEmpty); 1316 writel(enable, ioaddr + IntrEnable); 1317 /* flush PCI posting buffers */ 1318 readl(ioaddr + IntrEnable); 1319 } else { 1320 /* Paranoia check */ 1321 enable = readl(ioaddr + IntrEnable); 1322 if (enable & (IntrRxDone | IntrRxEmpty)) { 1323 printk(KERN_INFO 1324 "%s: interrupt while in poll!\n", 1325 dev->name); 1326 enable &= ~(IntrRxDone | IntrRxEmpty); 1327 writel(enable, ioaddr + IntrEnable); 1328 } 1329 } 1330 } 1331 1332 /* Scavenge the skbuff list based on the Tx-done queue. 1333 There are redundant checks here that may be cleaned up 1334 after the driver has proven to be reliable. */ 1335 consumer = readl(ioaddr + TxConsumerIdx); 1336 if (debug > 3) 1337 printk(KERN_DEBUG "%s: Tx Consumer index is %d.\n", 1338 dev->name, consumer); 1339 1340 while ((tx_status = le32_to_cpu(np->tx_done_q[np->tx_done].status)) != 0) { 1341 if (debug > 3) 1342 printk(KERN_DEBUG "%s: Tx completion #%d entry %d is %#8.8x.\n", 1343 dev->name, np->dirty_tx, np->tx_done, tx_status); 1344 if ((tx_status & 0xe0000000) == 0xa0000000) { 1345 dev->stats.tx_packets++; 1346 } else if ((tx_status & 0xe0000000) == 0x80000000) { 1347 u16 entry = (tx_status & 0x7fff) / sizeof(starfire_tx_desc); 1348 struct sk_buff *skb = np->tx_info[entry].skb; 1349 np->tx_info[entry].skb = NULL; 1350 pci_unmap_single(np->pci_dev, 1351 np->tx_info[entry].mapping, 1352 skb_first_frag_len(skb), 1353 PCI_DMA_TODEVICE); 1354 np->tx_info[entry].mapping = 0; 1355 np->dirty_tx += np->tx_info[entry].used_slots; 1356 entry = (entry + np->tx_info[entry].used_slots) % TX_RING_SIZE; 1357 { 1358 int i; 1359 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 1360 pci_unmap_single(np->pci_dev, 1361 np->tx_info[entry].mapping, 1362 skb_frag_size(&skb_shinfo(skb)->frags[i]), 1363 PCI_DMA_TODEVICE); 1364 np->dirty_tx++; 1365 entry++; 1366 } 1367 } 1368 1369 dev_kfree_skb_irq(skb); 1370 } 1371 np->tx_done_q[np->tx_done].status = 0; 1372 np->tx_done = (np->tx_done + 1) % DONE_Q_SIZE; 1373 } 1374 writew(np->tx_done, ioaddr + CompletionQConsumerIdx + 2); 1375 1376 if (netif_queue_stopped(dev) && 1377 (np->cur_tx - np->dirty_tx + 4 < TX_RING_SIZE)) { 1378 /* The ring is no longer full, wake the queue. */ 1379 netif_wake_queue(dev); 1380 } 1381 1382 /* Stats overflow */ 1383 if (intr_status & IntrStatsMax) 1384 get_stats(dev); 1385 1386 /* Media change interrupt. */ 1387 if (intr_status & IntrLinkChange) 1388 netdev_media_change(dev); 1389 1390 /* Abnormal error summary/uncommon events handlers. */ 1391 if (intr_status & IntrAbnormalSummary) 1392 netdev_error(dev, intr_status); 1393 1394 if (--boguscnt < 0) { 1395 if (debug > 1) 1396 printk(KERN_WARNING "%s: Too much work at interrupt, " 1397 "status=%#8.8x.\n", 1398 dev->name, intr_status); 1399 break; 1400 } 1401 } while (1); 1402 1403 if (debug > 4) 1404 printk(KERN_DEBUG "%s: exiting interrupt, status=%#8.8x.\n", 1405 dev->name, (int) readl(ioaddr + IntrStatus)); 1406 return IRQ_RETVAL(handled); 1407 } 1408 1409 1410 /* 1411 * This routine is logically part of the interrupt/poll handler, but separated 1412 * for clarity and better register allocation. 1413 */ 1414 static int __netdev_rx(struct net_device *dev, int *quota) 1415 { 1416 struct netdev_private *np = netdev_priv(dev); 1417 u32 desc_status; 1418 int retcode = 0; 1419 1420 /* If EOP is set on the next entry, it's a new packet. Send it up. */ 1421 while ((desc_status = le32_to_cpu(np->rx_done_q[np->rx_done].status)) != 0) { 1422 struct sk_buff *skb; 1423 u16 pkt_len; 1424 int entry; 1425 rx_done_desc *desc = &np->rx_done_q[np->rx_done]; 1426 1427 if (debug > 4) 1428 printk(KERN_DEBUG " netdev_rx() status of %d was %#8.8x.\n", np->rx_done, desc_status); 1429 if (!(desc_status & RxOK)) { 1430 /* There was an error. */ 1431 if (debug > 2) 1432 printk(KERN_DEBUG " netdev_rx() Rx error was %#8.8x.\n", desc_status); 1433 dev->stats.rx_errors++; 1434 if (desc_status & RxFIFOErr) 1435 dev->stats.rx_fifo_errors++; 1436 goto next_rx; 1437 } 1438 1439 if (*quota <= 0) { /* out of rx quota */ 1440 retcode = 1; 1441 goto out; 1442 } 1443 (*quota)--; 1444 1445 pkt_len = desc_status; /* Implicitly Truncate */ 1446 entry = (desc_status >> 16) & 0x7ff; 1447 1448 if (debug > 4) 1449 printk(KERN_DEBUG " netdev_rx() normal Rx pkt length %d, quota %d.\n", pkt_len, *quota); 1450 /* Check if the packet is long enough to accept without copying 1451 to a minimally-sized skbuff. */ 1452 if (pkt_len < rx_copybreak && 1453 (skb = netdev_alloc_skb(dev, pkt_len + 2)) != NULL) { 1454 skb_reserve(skb, 2); /* 16 byte align the IP header */ 1455 pci_dma_sync_single_for_cpu(np->pci_dev, 1456 np->rx_info[entry].mapping, 1457 pkt_len, PCI_DMA_FROMDEVICE); 1458 skb_copy_to_linear_data(skb, np->rx_info[entry].skb->data, pkt_len); 1459 pci_dma_sync_single_for_device(np->pci_dev, 1460 np->rx_info[entry].mapping, 1461 pkt_len, PCI_DMA_FROMDEVICE); 1462 skb_put(skb, pkt_len); 1463 } else { 1464 pci_unmap_single(np->pci_dev, np->rx_info[entry].mapping, np->rx_buf_sz, PCI_DMA_FROMDEVICE); 1465 skb = np->rx_info[entry].skb; 1466 skb_put(skb, pkt_len); 1467 np->rx_info[entry].skb = NULL; 1468 np->rx_info[entry].mapping = 0; 1469 } 1470 #ifndef final_version /* Remove after testing. */ 1471 /* You will want this info for the initial debug. */ 1472 if (debug > 5) { 1473 printk(KERN_DEBUG " Rx data %pM %pM %2.2x%2.2x.\n", 1474 skb->data, skb->data + 6, 1475 skb->data[12], skb->data[13]); 1476 } 1477 #endif 1478 1479 skb->protocol = eth_type_trans(skb, dev); 1480 #ifdef VLAN_SUPPORT 1481 if (debug > 4) 1482 printk(KERN_DEBUG " netdev_rx() status2 of %d was %#4.4x.\n", np->rx_done, le16_to_cpu(desc->status2)); 1483 #endif 1484 if (le16_to_cpu(desc->status2) & 0x0100) { 1485 skb->ip_summed = CHECKSUM_UNNECESSARY; 1486 dev->stats.rx_compressed++; 1487 } 1488 /* 1489 * This feature doesn't seem to be working, at least 1490 * with the two firmware versions I have. If the GFP sees 1491 * an IP fragment, it either ignores it completely, or reports 1492 * "bad checksum" on it. 1493 * 1494 * Maybe I missed something -- corrections are welcome. 1495 * Until then, the printk stays. :-) -Ion 1496 */ 1497 else if (le16_to_cpu(desc->status2) & 0x0040) { 1498 skb->ip_summed = CHECKSUM_COMPLETE; 1499 skb->csum = le16_to_cpu(desc->csum); 1500 printk(KERN_DEBUG "%s: checksum_hw, status2 = %#x\n", dev->name, le16_to_cpu(desc->status2)); 1501 } 1502 #ifdef VLAN_SUPPORT 1503 if (le16_to_cpu(desc->status2) & 0x0200) { 1504 u16 vlid = le16_to_cpu(desc->vlanid); 1505 1506 if (debug > 4) { 1507 printk(KERN_DEBUG " netdev_rx() vlanid = %d\n", 1508 vlid); 1509 } 1510 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlid); 1511 } 1512 #endif /* VLAN_SUPPORT */ 1513 netif_receive_skb(skb); 1514 dev->stats.rx_packets++; 1515 1516 next_rx: 1517 np->cur_rx++; 1518 desc->status = 0; 1519 np->rx_done = (np->rx_done + 1) % DONE_Q_SIZE; 1520 } 1521 1522 if (*quota == 0) { /* out of rx quota */ 1523 retcode = 1; 1524 goto out; 1525 } 1526 writew(np->rx_done, np->base + CompletionQConsumerIdx); 1527 1528 out: 1529 refill_rx_ring(dev); 1530 if (debug > 5) 1531 printk(KERN_DEBUG " exiting netdev_rx(): %d, status of %d was %#8.8x.\n", 1532 retcode, np->rx_done, desc_status); 1533 return retcode; 1534 } 1535 1536 static int netdev_poll(struct napi_struct *napi, int budget) 1537 { 1538 struct netdev_private *np = container_of(napi, struct netdev_private, napi); 1539 struct net_device *dev = np->dev; 1540 u32 intr_status; 1541 void __iomem *ioaddr = np->base; 1542 int quota = budget; 1543 1544 do { 1545 writel(IntrRxDone | IntrRxEmpty, ioaddr + IntrClear); 1546 1547 if (__netdev_rx(dev, &quota)) 1548 goto out; 1549 1550 intr_status = readl(ioaddr + IntrStatus); 1551 } while (intr_status & (IntrRxDone | IntrRxEmpty)); 1552 1553 napi_complete(napi); 1554 intr_status = readl(ioaddr + IntrEnable); 1555 intr_status |= IntrRxDone | IntrRxEmpty; 1556 writel(intr_status, ioaddr + IntrEnable); 1557 1558 out: 1559 if (debug > 5) 1560 printk(KERN_DEBUG " exiting netdev_poll(): %d.\n", 1561 budget - quota); 1562 1563 /* Restart Rx engine if stopped. */ 1564 return budget - quota; 1565 } 1566 1567 static void refill_rx_ring(struct net_device *dev) 1568 { 1569 struct netdev_private *np = netdev_priv(dev); 1570 struct sk_buff *skb; 1571 int entry = -1; 1572 1573 /* Refill the Rx ring buffers. */ 1574 for (; np->cur_rx - np->dirty_rx > 0; np->dirty_rx++) { 1575 entry = np->dirty_rx % RX_RING_SIZE; 1576 if (np->rx_info[entry].skb == NULL) { 1577 skb = netdev_alloc_skb(dev, np->rx_buf_sz); 1578 np->rx_info[entry].skb = skb; 1579 if (skb == NULL) 1580 break; /* Better luck next round. */ 1581 np->rx_info[entry].mapping = 1582 pci_map_single(np->pci_dev, skb->data, np->rx_buf_sz, PCI_DMA_FROMDEVICE); 1583 np->rx_ring[entry].rxaddr = 1584 cpu_to_dma(np->rx_info[entry].mapping | RxDescValid); 1585 } 1586 if (entry == RX_RING_SIZE - 1) 1587 np->rx_ring[entry].rxaddr |= cpu_to_dma(RxDescEndRing); 1588 } 1589 if (entry >= 0) 1590 writew(entry, np->base + RxDescQIdx); 1591 } 1592 1593 1594 static void netdev_media_change(struct net_device *dev) 1595 { 1596 struct netdev_private *np = netdev_priv(dev); 1597 void __iomem *ioaddr = np->base; 1598 u16 reg0, reg1, reg4, reg5; 1599 u32 new_tx_mode; 1600 u32 new_intr_timer_ctrl; 1601 1602 /* reset status first */ 1603 mdio_read(dev, np->phys[0], MII_BMCR); 1604 mdio_read(dev, np->phys[0], MII_BMSR); 1605 1606 reg0 = mdio_read(dev, np->phys[0], MII_BMCR); 1607 reg1 = mdio_read(dev, np->phys[0], MII_BMSR); 1608 1609 if (reg1 & BMSR_LSTATUS) { 1610 /* link is up */ 1611 if (reg0 & BMCR_ANENABLE) { 1612 /* autonegotiation is enabled */ 1613 reg4 = mdio_read(dev, np->phys[0], MII_ADVERTISE); 1614 reg5 = mdio_read(dev, np->phys[0], MII_LPA); 1615 if (reg4 & ADVERTISE_100FULL && reg5 & LPA_100FULL) { 1616 np->speed100 = 1; 1617 np->mii_if.full_duplex = 1; 1618 } else if (reg4 & ADVERTISE_100HALF && reg5 & LPA_100HALF) { 1619 np->speed100 = 1; 1620 np->mii_if.full_duplex = 0; 1621 } else if (reg4 & ADVERTISE_10FULL && reg5 & LPA_10FULL) { 1622 np->speed100 = 0; 1623 np->mii_if.full_duplex = 1; 1624 } else { 1625 np->speed100 = 0; 1626 np->mii_if.full_duplex = 0; 1627 } 1628 } else { 1629 /* autonegotiation is disabled */ 1630 if (reg0 & BMCR_SPEED100) 1631 np->speed100 = 1; 1632 else 1633 np->speed100 = 0; 1634 if (reg0 & BMCR_FULLDPLX) 1635 np->mii_if.full_duplex = 1; 1636 else 1637 np->mii_if.full_duplex = 0; 1638 } 1639 netif_carrier_on(dev); 1640 printk(KERN_DEBUG "%s: Link is up, running at %sMbit %s-duplex\n", 1641 dev->name, 1642 np->speed100 ? "100" : "10", 1643 np->mii_if.full_duplex ? "full" : "half"); 1644 1645 new_tx_mode = np->tx_mode & ~FullDuplex; /* duplex setting */ 1646 if (np->mii_if.full_duplex) 1647 new_tx_mode |= FullDuplex; 1648 if (np->tx_mode != new_tx_mode) { 1649 np->tx_mode = new_tx_mode; 1650 writel(np->tx_mode | MiiSoftReset, ioaddr + TxMode); 1651 udelay(1000); 1652 writel(np->tx_mode, ioaddr + TxMode); 1653 } 1654 1655 new_intr_timer_ctrl = np->intr_timer_ctrl & ~Timer10X; 1656 if (np->speed100) 1657 new_intr_timer_ctrl |= Timer10X; 1658 if (np->intr_timer_ctrl != new_intr_timer_ctrl) { 1659 np->intr_timer_ctrl = new_intr_timer_ctrl; 1660 writel(new_intr_timer_ctrl, ioaddr + IntrTimerCtrl); 1661 } 1662 } else { 1663 netif_carrier_off(dev); 1664 printk(KERN_DEBUG "%s: Link is down\n", dev->name); 1665 } 1666 } 1667 1668 1669 static void netdev_error(struct net_device *dev, int intr_status) 1670 { 1671 struct netdev_private *np = netdev_priv(dev); 1672 1673 /* Came close to underrunning the Tx FIFO, increase threshold. */ 1674 if (intr_status & IntrTxDataLow) { 1675 if (np->tx_threshold <= PKT_BUF_SZ / 16) { 1676 writel(++np->tx_threshold, np->base + TxThreshold); 1677 printk(KERN_NOTICE "%s: PCI bus congestion, increasing Tx FIFO threshold to %d bytes\n", 1678 dev->name, np->tx_threshold * 16); 1679 } else 1680 printk(KERN_WARNING "%s: PCI Tx underflow -- adapter is probably malfunctioning\n", dev->name); 1681 } 1682 if (intr_status & IntrRxGFPDead) { 1683 dev->stats.rx_fifo_errors++; 1684 dev->stats.rx_errors++; 1685 } 1686 if (intr_status & (IntrNoTxCsum | IntrDMAErr)) { 1687 dev->stats.tx_fifo_errors++; 1688 dev->stats.tx_errors++; 1689 } 1690 if ((intr_status & ~(IntrNormalMask | IntrAbnormalSummary | IntrLinkChange | IntrStatsMax | IntrTxDataLow | IntrRxGFPDead | IntrNoTxCsum | IntrPCIPad)) && debug) 1691 printk(KERN_ERR "%s: Something Wicked happened! %#8.8x.\n", 1692 dev->name, intr_status); 1693 } 1694 1695 1696 static struct net_device_stats *get_stats(struct net_device *dev) 1697 { 1698 struct netdev_private *np = netdev_priv(dev); 1699 void __iomem *ioaddr = np->base; 1700 1701 /* This adapter architecture needs no SMP locks. */ 1702 dev->stats.tx_bytes = readl(ioaddr + 0x57010); 1703 dev->stats.rx_bytes = readl(ioaddr + 0x57044); 1704 dev->stats.tx_packets = readl(ioaddr + 0x57000); 1705 dev->stats.tx_aborted_errors = 1706 readl(ioaddr + 0x57024) + readl(ioaddr + 0x57028); 1707 dev->stats.tx_window_errors = readl(ioaddr + 0x57018); 1708 dev->stats.collisions = 1709 readl(ioaddr + 0x57004) + readl(ioaddr + 0x57008); 1710 1711 /* The chip only need report frame silently dropped. */ 1712 dev->stats.rx_dropped += readw(ioaddr + RxDMAStatus); 1713 writew(0, ioaddr + RxDMAStatus); 1714 dev->stats.rx_crc_errors = readl(ioaddr + 0x5703C); 1715 dev->stats.rx_frame_errors = readl(ioaddr + 0x57040); 1716 dev->stats.rx_length_errors = readl(ioaddr + 0x57058); 1717 dev->stats.rx_missed_errors = readl(ioaddr + 0x5707C); 1718 1719 return &dev->stats; 1720 } 1721 1722 #ifdef VLAN_SUPPORT 1723 static u32 set_vlan_mode(struct netdev_private *np) 1724 { 1725 u32 ret = VlanMode; 1726 u16 vid; 1727 void __iomem *filter_addr = np->base + HashTable + 8; 1728 int vlan_count = 0; 1729 1730 for_each_set_bit(vid, np->active_vlans, VLAN_N_VID) { 1731 if (vlan_count == 32) 1732 break; 1733 writew(vid, filter_addr); 1734 filter_addr += 16; 1735 vlan_count++; 1736 } 1737 if (vlan_count == 32) { 1738 ret |= PerfectFilterVlan; 1739 while (vlan_count < 32) { 1740 writew(0, filter_addr); 1741 filter_addr += 16; 1742 vlan_count++; 1743 } 1744 } 1745 return ret; 1746 } 1747 #endif /* VLAN_SUPPORT */ 1748 1749 static void set_rx_mode(struct net_device *dev) 1750 { 1751 struct netdev_private *np = netdev_priv(dev); 1752 void __iomem *ioaddr = np->base; 1753 u32 rx_mode = MinVLANPrio; 1754 struct netdev_hw_addr *ha; 1755 int i; 1756 1757 #ifdef VLAN_SUPPORT 1758 rx_mode |= set_vlan_mode(np); 1759 #endif /* VLAN_SUPPORT */ 1760 1761 if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */ 1762 rx_mode |= AcceptAll; 1763 } else if ((netdev_mc_count(dev) > multicast_filter_limit) || 1764 (dev->flags & IFF_ALLMULTI)) { 1765 /* Too many to match, or accept all multicasts. */ 1766 rx_mode |= AcceptBroadcast|AcceptAllMulticast|PerfectFilter; 1767 } else if (netdev_mc_count(dev) <= 14) { 1768 /* Use the 16 element perfect filter, skip first two entries. */ 1769 void __iomem *filter_addr = ioaddr + PerfFilterTable + 2 * 16; 1770 __be16 *eaddrs; 1771 netdev_for_each_mc_addr(ha, dev) { 1772 eaddrs = (__be16 *) ha->addr; 1773 writew(be16_to_cpu(eaddrs[2]), filter_addr); filter_addr += 4; 1774 writew(be16_to_cpu(eaddrs[1]), filter_addr); filter_addr += 4; 1775 writew(be16_to_cpu(eaddrs[0]), filter_addr); filter_addr += 8; 1776 } 1777 eaddrs = (__be16 *)dev->dev_addr; 1778 i = netdev_mc_count(dev) + 2; 1779 while (i++ < 16) { 1780 writew(be16_to_cpu(eaddrs[0]), filter_addr); filter_addr += 4; 1781 writew(be16_to_cpu(eaddrs[1]), filter_addr); filter_addr += 4; 1782 writew(be16_to_cpu(eaddrs[2]), filter_addr); filter_addr += 8; 1783 } 1784 rx_mode |= AcceptBroadcast|PerfectFilter; 1785 } else { 1786 /* Must use a multicast hash table. */ 1787 void __iomem *filter_addr; 1788 __be16 *eaddrs; 1789 __le16 mc_filter[32] __attribute__ ((aligned(sizeof(long)))); /* Multicast hash filter */ 1790 1791 memset(mc_filter, 0, sizeof(mc_filter)); 1792 netdev_for_each_mc_addr(ha, dev) { 1793 /* The chip uses the upper 9 CRC bits 1794 as index into the hash table */ 1795 int bit_nr = ether_crc_le(ETH_ALEN, ha->addr) >> 23; 1796 __le32 *fptr = (__le32 *) &mc_filter[(bit_nr >> 4) & ~1]; 1797 1798 *fptr |= cpu_to_le32(1 << (bit_nr & 31)); 1799 } 1800 /* Clear the perfect filter list, skip first two entries. */ 1801 filter_addr = ioaddr + PerfFilterTable + 2 * 16; 1802 eaddrs = (__be16 *)dev->dev_addr; 1803 for (i = 2; i < 16; i++) { 1804 writew(be16_to_cpu(eaddrs[0]), filter_addr); filter_addr += 4; 1805 writew(be16_to_cpu(eaddrs[1]), filter_addr); filter_addr += 4; 1806 writew(be16_to_cpu(eaddrs[2]), filter_addr); filter_addr += 8; 1807 } 1808 for (filter_addr = ioaddr + HashTable, i = 0; i < 32; filter_addr+= 16, i++) 1809 writew(mc_filter[i], filter_addr); 1810 rx_mode |= AcceptBroadcast|PerfectFilter|HashFilter; 1811 } 1812 writel(rx_mode, ioaddr + RxFilterMode); 1813 } 1814 1815 static int check_if_running(struct net_device *dev) 1816 { 1817 if (!netif_running(dev)) 1818 return -EINVAL; 1819 return 0; 1820 } 1821 1822 static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) 1823 { 1824 struct netdev_private *np = netdev_priv(dev); 1825 strlcpy(info->driver, DRV_NAME, sizeof(info->driver)); 1826 strlcpy(info->version, DRV_VERSION, sizeof(info->version)); 1827 strlcpy(info->bus_info, pci_name(np->pci_dev), sizeof(info->bus_info)); 1828 } 1829 1830 static int get_link_ksettings(struct net_device *dev, 1831 struct ethtool_link_ksettings *cmd) 1832 { 1833 struct netdev_private *np = netdev_priv(dev); 1834 spin_lock_irq(&np->lock); 1835 mii_ethtool_get_link_ksettings(&np->mii_if, cmd); 1836 spin_unlock_irq(&np->lock); 1837 return 0; 1838 } 1839 1840 static int set_link_ksettings(struct net_device *dev, 1841 const struct ethtool_link_ksettings *cmd) 1842 { 1843 struct netdev_private *np = netdev_priv(dev); 1844 int res; 1845 spin_lock_irq(&np->lock); 1846 res = mii_ethtool_set_link_ksettings(&np->mii_if, cmd); 1847 spin_unlock_irq(&np->lock); 1848 check_duplex(dev); 1849 return res; 1850 } 1851 1852 static int nway_reset(struct net_device *dev) 1853 { 1854 struct netdev_private *np = netdev_priv(dev); 1855 return mii_nway_restart(&np->mii_if); 1856 } 1857 1858 static u32 get_link(struct net_device *dev) 1859 { 1860 struct netdev_private *np = netdev_priv(dev); 1861 return mii_link_ok(&np->mii_if); 1862 } 1863 1864 static u32 get_msglevel(struct net_device *dev) 1865 { 1866 return debug; 1867 } 1868 1869 static void set_msglevel(struct net_device *dev, u32 val) 1870 { 1871 debug = val; 1872 } 1873 1874 static const struct ethtool_ops ethtool_ops = { 1875 .begin = check_if_running, 1876 .get_drvinfo = get_drvinfo, 1877 .nway_reset = nway_reset, 1878 .get_link = get_link, 1879 .get_msglevel = get_msglevel, 1880 .set_msglevel = set_msglevel, 1881 .get_link_ksettings = get_link_ksettings, 1882 .set_link_ksettings = set_link_ksettings, 1883 }; 1884 1885 static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) 1886 { 1887 struct netdev_private *np = netdev_priv(dev); 1888 struct mii_ioctl_data *data = if_mii(rq); 1889 int rc; 1890 1891 if (!netif_running(dev)) 1892 return -EINVAL; 1893 1894 spin_lock_irq(&np->lock); 1895 rc = generic_mii_ioctl(&np->mii_if, data, cmd, NULL); 1896 spin_unlock_irq(&np->lock); 1897 1898 if ((cmd == SIOCSMIIREG) && (data->phy_id == np->phys[0])) 1899 check_duplex(dev); 1900 1901 return rc; 1902 } 1903 1904 static int netdev_close(struct net_device *dev) 1905 { 1906 struct netdev_private *np = netdev_priv(dev); 1907 void __iomem *ioaddr = np->base; 1908 int i; 1909 1910 netif_stop_queue(dev); 1911 1912 napi_disable(&np->napi); 1913 1914 if (debug > 1) { 1915 printk(KERN_DEBUG "%s: Shutting down ethercard, Intr status %#8.8x.\n", 1916 dev->name, (int) readl(ioaddr + IntrStatus)); 1917 printk(KERN_DEBUG "%s: Queue pointers were Tx %d / %d, Rx %d / %d.\n", 1918 dev->name, np->cur_tx, np->dirty_tx, 1919 np->cur_rx, np->dirty_rx); 1920 } 1921 1922 /* Disable interrupts by clearing the interrupt mask. */ 1923 writel(0, ioaddr + IntrEnable); 1924 1925 /* Stop the chip's Tx and Rx processes. */ 1926 writel(0, ioaddr + GenCtrl); 1927 readl(ioaddr + GenCtrl); 1928 1929 if (debug > 5) { 1930 printk(KERN_DEBUG" Tx ring at %#llx:\n", 1931 (long long) np->tx_ring_dma); 1932 for (i = 0; i < 8 /* TX_RING_SIZE is huge! */; i++) 1933 printk(KERN_DEBUG " #%d desc. %#8.8x %#llx -> %#8.8x.\n", 1934 i, le32_to_cpu(np->tx_ring[i].status), 1935 (long long) dma_to_cpu(np->tx_ring[i].addr), 1936 le32_to_cpu(np->tx_done_q[i].status)); 1937 printk(KERN_DEBUG " Rx ring at %#llx -> %p:\n", 1938 (long long) np->rx_ring_dma, np->rx_done_q); 1939 if (np->rx_done_q) 1940 for (i = 0; i < 8 /* RX_RING_SIZE */; i++) { 1941 printk(KERN_DEBUG " #%d desc. %#llx -> %#8.8x\n", 1942 i, (long long) dma_to_cpu(np->rx_ring[i].rxaddr), le32_to_cpu(np->rx_done_q[i].status)); 1943 } 1944 } 1945 1946 free_irq(np->pci_dev->irq, dev); 1947 1948 /* Free all the skbuffs in the Rx queue. */ 1949 for (i = 0; i < RX_RING_SIZE; i++) { 1950 np->rx_ring[i].rxaddr = cpu_to_dma(0xBADF00D0); /* An invalid address. */ 1951 if (np->rx_info[i].skb != NULL) { 1952 pci_unmap_single(np->pci_dev, np->rx_info[i].mapping, np->rx_buf_sz, PCI_DMA_FROMDEVICE); 1953 dev_kfree_skb(np->rx_info[i].skb); 1954 } 1955 np->rx_info[i].skb = NULL; 1956 np->rx_info[i].mapping = 0; 1957 } 1958 for (i = 0; i < TX_RING_SIZE; i++) { 1959 struct sk_buff *skb = np->tx_info[i].skb; 1960 if (skb == NULL) 1961 continue; 1962 pci_unmap_single(np->pci_dev, 1963 np->tx_info[i].mapping, 1964 skb_first_frag_len(skb), PCI_DMA_TODEVICE); 1965 np->tx_info[i].mapping = 0; 1966 dev_kfree_skb(skb); 1967 np->tx_info[i].skb = NULL; 1968 } 1969 1970 return 0; 1971 } 1972 1973 #ifdef CONFIG_PM 1974 static int starfire_suspend(struct pci_dev *pdev, pm_message_t state) 1975 { 1976 struct net_device *dev = pci_get_drvdata(pdev); 1977 1978 if (netif_running(dev)) { 1979 netif_device_detach(dev); 1980 netdev_close(dev); 1981 } 1982 1983 pci_save_state(pdev); 1984 pci_set_power_state(pdev, pci_choose_state(pdev,state)); 1985 1986 return 0; 1987 } 1988 1989 static int starfire_resume(struct pci_dev *pdev) 1990 { 1991 struct net_device *dev = pci_get_drvdata(pdev); 1992 1993 pci_set_power_state(pdev, PCI_D0); 1994 pci_restore_state(pdev); 1995 1996 if (netif_running(dev)) { 1997 netdev_open(dev); 1998 netif_device_attach(dev); 1999 } 2000 2001 return 0; 2002 } 2003 #endif /* CONFIG_PM */ 2004 2005 2006 static void starfire_remove_one(struct pci_dev *pdev) 2007 { 2008 struct net_device *dev = pci_get_drvdata(pdev); 2009 struct netdev_private *np = netdev_priv(dev); 2010 2011 BUG_ON(!dev); 2012 2013 unregister_netdev(dev); 2014 2015 if (np->queue_mem) 2016 pci_free_consistent(pdev, np->queue_mem_size, np->queue_mem, np->queue_mem_dma); 2017 2018 2019 /* XXX: add wakeup code -- requires firmware for MagicPacket */ 2020 pci_set_power_state(pdev, PCI_D3hot); /* go to sleep in D3 mode */ 2021 pci_disable_device(pdev); 2022 2023 iounmap(np->base); 2024 pci_release_regions(pdev); 2025 2026 free_netdev(dev); /* Will also free np!! */ 2027 } 2028 2029 2030 static struct pci_driver starfire_driver = { 2031 .name = DRV_NAME, 2032 .probe = starfire_init_one, 2033 .remove = starfire_remove_one, 2034 #ifdef CONFIG_PM 2035 .suspend = starfire_suspend, 2036 .resume = starfire_resume, 2037 #endif /* CONFIG_PM */ 2038 .id_table = starfire_pci_tbl, 2039 }; 2040 2041 2042 static int __init starfire_init (void) 2043 { 2044 /* when a module, this is printed whether or not devices are found in probe */ 2045 #ifdef MODULE 2046 printk(version); 2047 2048 printk(KERN_INFO DRV_NAME ": polling (NAPI) enabled\n"); 2049 #endif 2050 2051 BUILD_BUG_ON(sizeof(dma_addr_t) != sizeof(netdrv_addr_t)); 2052 2053 return pci_register_driver(&starfire_driver); 2054 } 2055 2056 2057 static void __exit starfire_cleanup (void) 2058 { 2059 pci_unregister_driver (&starfire_driver); 2060 } 2061 2062 2063 module_init(starfire_init); 2064 module_exit(starfire_cleanup); 2065 2066 2067 /* 2068 * Local variables: 2069 * c-basic-offset: 8 2070 * tab-width: 8 2071 * End: 2072 */ 2073 2074 2075 2076 2077 2078 /* LDV_COMMENT_BEGIN_MAIN */ 2079 #ifdef LDV_MAIN0_sequence_infinite_withcheck_stateful 2080 2081 /*###########################################################################*/ 2082 2083 /*############## Driver Environment Generator 0.2 output ####################*/ 2084 2085 /*###########################################################################*/ 2086 2087 2088 2089 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test if all kernel resources are correctly released by driver before driver will be unloaded. */ 2090 void ldv_check_final_state(void); 2091 2092 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test correct return result. */ 2093 void ldv_check_return_value(int res); 2094 2095 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test correct return result of probe() function. */ 2096 void ldv_check_return_value_probe(int res); 2097 2098 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Initializes the model. */ 2099 void ldv_initialize(void); 2100 2101 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Reinitializes the model between distinct model function calls. */ 2102 void ldv_handler_precall(void); 2103 2104 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Returns arbitrary interger value. */ 2105 int nondet_int(void); 2106 2107 /* LDV_COMMENT_VAR_DECLARE_LDV Special variable for LDV verifier. */ 2108 int LDV_IN_INTERRUPT; 2109 2110 /* LDV_COMMENT_FUNCTION_MAIN Main function for LDV verifier. */ 2111 void ldv_main0_sequence_infinite_withcheck_stateful(void) { 2112 2113 2114 2115 /* LDV_COMMENT_BEGIN_VARIABLE_DECLARATION_PART */ 2116 /*============================= VARIABLE DECLARATION PART =============================*/ 2117 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 2118 /* content: static int netdev_open(struct net_device *dev)*/ 2119 /* LDV_COMMENT_BEGIN_PREP */ 2120 #define DRV_NAME "starfire" 2121 #define DRV_VERSION "2.1" 2122 #define DRV_RELDATE "July 6, 2008" 2123 #define HAS_BROKEN_FIRMWARE 2124 #ifdef HAS_BROKEN_FIRMWARE 2125 #define PADDING_MASK 3 2126 #endif 2127 #define ZEROCOPY 2128 #if IS_ENABLED(CONFIG_VLAN_8021Q) 2129 #define VLAN_SUPPORT 2130 #endif 2131 #define PKT_BUF_SZ 1536 2132 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 2133 #else 2134 #endif 2135 #ifdef __sparc__ 2136 #define DMA_BURST_SIZE 64 2137 #else 2138 #define DMA_BURST_SIZE 128 2139 #endif 2140 #define RX_RING_SIZE 256 2141 #define TX_RING_SIZE 32 2142 #define DONE_Q_SIZE 1024 2143 #define QUEUE_ALIGN 256 2144 #if RX_RING_SIZE > 256 2145 #define RX_Q_ENTRIES Rx2048QEntries 2146 #else 2147 #define RX_Q_ENTRIES Rx256QEntries 2148 #endif 2149 #define TX_TIMEOUT (2 * HZ) 2150 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2151 #define ADDR_64BITS 2152 #define netdrv_addr_t __le64 2153 #define cpu_to_dma(x) cpu_to_le64(x) 2154 #define dma_to_cpu(x) le64_to_cpu(x) 2155 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 2156 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 2157 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 2158 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 2159 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 2160 #else 2161 #define netdrv_addr_t __le32 2162 #define cpu_to_dma(x) cpu_to_le32(x) 2163 #define dma_to_cpu(x) le32_to_cpu(x) 2164 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 2165 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 2166 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 2167 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 2168 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 2169 #endif 2170 #define skb_first_frag_len(skb) skb_headlen(skb) 2171 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 2172 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 2173 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 2174 #ifdef VLAN_SUPPORT 2175 #define RxComplType RxComplType3 2176 #else 2177 #define RxComplType RxComplType2 2178 #endif 2179 #ifdef ADDR_64BITS 2180 #define TX_DESC_TYPE TxDescType2 2181 #else 2182 #define TX_DESC_TYPE TxDescType1 2183 #endif 2184 #define TX_DESC_SPACING TxDescSpaceUnlim 2185 #if 0 2186 #endif 2187 #define PHY_CNT 2 2188 #ifdef VLAN_SUPPORT 2189 #endif 2190 #ifdef VLAN_SUPPORT 2191 #endif 2192 #ifdef VLAN_SUPPORT 2193 #endif 2194 #ifndef MODULE 2195 #endif 2196 #ifdef ZEROCOPY 2197 #endif 2198 #ifdef VLAN_SUPPORT 2199 #endif 2200 #ifdef ADDR_64BITS 2201 #endif 2202 #if ! defined(final_version) 2203 #endif 2204 /* LDV_COMMENT_END_PREP */ 2205 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "netdev_open" */ 2206 struct net_device * var_group1; 2207 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "netdev_open" */ 2208 static int res_netdev_open_5; 2209 /* LDV_COMMENT_BEGIN_PREP */ 2210 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 2211 #endif 2212 #ifndef final_version 2213 #endif 2214 #ifdef VLAN_SUPPORT 2215 #endif 2216 #ifdef VLAN_SUPPORT 2217 #endif 2218 #ifdef VLAN_SUPPORT 2219 #endif 2220 #ifdef VLAN_SUPPORT 2221 #endif 2222 #ifdef CONFIG_PM 2223 #endif 2224 #ifdef CONFIG_PM 2225 #endif 2226 #ifdef MODULE 2227 #endif 2228 /* LDV_COMMENT_END_PREP */ 2229 /* content: static int netdev_close(struct net_device *dev)*/ 2230 /* LDV_COMMENT_BEGIN_PREP */ 2231 #define DRV_NAME "starfire" 2232 #define DRV_VERSION "2.1" 2233 #define DRV_RELDATE "July 6, 2008" 2234 #define HAS_BROKEN_FIRMWARE 2235 #ifdef HAS_BROKEN_FIRMWARE 2236 #define PADDING_MASK 3 2237 #endif 2238 #define ZEROCOPY 2239 #if IS_ENABLED(CONFIG_VLAN_8021Q) 2240 #define VLAN_SUPPORT 2241 #endif 2242 #define PKT_BUF_SZ 1536 2243 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 2244 #else 2245 #endif 2246 #ifdef __sparc__ 2247 #define DMA_BURST_SIZE 64 2248 #else 2249 #define DMA_BURST_SIZE 128 2250 #endif 2251 #define RX_RING_SIZE 256 2252 #define TX_RING_SIZE 32 2253 #define DONE_Q_SIZE 1024 2254 #define QUEUE_ALIGN 256 2255 #if RX_RING_SIZE > 256 2256 #define RX_Q_ENTRIES Rx2048QEntries 2257 #else 2258 #define RX_Q_ENTRIES Rx256QEntries 2259 #endif 2260 #define TX_TIMEOUT (2 * HZ) 2261 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2262 #define ADDR_64BITS 2263 #define netdrv_addr_t __le64 2264 #define cpu_to_dma(x) cpu_to_le64(x) 2265 #define dma_to_cpu(x) le64_to_cpu(x) 2266 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 2267 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 2268 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 2269 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 2270 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 2271 #else 2272 #define netdrv_addr_t __le32 2273 #define cpu_to_dma(x) cpu_to_le32(x) 2274 #define dma_to_cpu(x) le32_to_cpu(x) 2275 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 2276 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 2277 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 2278 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 2279 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 2280 #endif 2281 #define skb_first_frag_len(skb) skb_headlen(skb) 2282 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 2283 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 2284 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 2285 #ifdef VLAN_SUPPORT 2286 #define RxComplType RxComplType3 2287 #else 2288 #define RxComplType RxComplType2 2289 #endif 2290 #ifdef ADDR_64BITS 2291 #define TX_DESC_TYPE TxDescType2 2292 #else 2293 #define TX_DESC_TYPE TxDescType1 2294 #endif 2295 #define TX_DESC_SPACING TxDescSpaceUnlim 2296 #if 0 2297 #endif 2298 #define PHY_CNT 2 2299 #ifdef VLAN_SUPPORT 2300 #endif 2301 #ifdef VLAN_SUPPORT 2302 #endif 2303 #ifdef VLAN_SUPPORT 2304 #endif 2305 #ifndef MODULE 2306 #endif 2307 #ifdef ZEROCOPY 2308 #endif 2309 #ifdef VLAN_SUPPORT 2310 #endif 2311 #ifdef ADDR_64BITS 2312 #endif 2313 #if ! defined(final_version) 2314 #endif 2315 #ifdef VLAN_SUPPORT 2316 #endif 2317 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 2318 #endif 2319 #ifndef final_version 2320 #endif 2321 #ifdef VLAN_SUPPORT 2322 #endif 2323 #ifdef VLAN_SUPPORT 2324 #endif 2325 #ifdef VLAN_SUPPORT 2326 #endif 2327 #ifdef VLAN_SUPPORT 2328 #endif 2329 /* LDV_COMMENT_END_PREP */ 2330 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "netdev_close" */ 2331 static int res_netdev_close_28; 2332 /* LDV_COMMENT_BEGIN_PREP */ 2333 #ifdef CONFIG_PM 2334 #endif 2335 #ifdef CONFIG_PM 2336 #endif 2337 #ifdef MODULE 2338 #endif 2339 /* LDV_COMMENT_END_PREP */ 2340 /* content: static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev)*/ 2341 /* LDV_COMMENT_BEGIN_PREP */ 2342 #define DRV_NAME "starfire" 2343 #define DRV_VERSION "2.1" 2344 #define DRV_RELDATE "July 6, 2008" 2345 #define HAS_BROKEN_FIRMWARE 2346 #ifdef HAS_BROKEN_FIRMWARE 2347 #define PADDING_MASK 3 2348 #endif 2349 #define ZEROCOPY 2350 #if IS_ENABLED(CONFIG_VLAN_8021Q) 2351 #define VLAN_SUPPORT 2352 #endif 2353 #define PKT_BUF_SZ 1536 2354 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 2355 #else 2356 #endif 2357 #ifdef __sparc__ 2358 #define DMA_BURST_SIZE 64 2359 #else 2360 #define DMA_BURST_SIZE 128 2361 #endif 2362 #define RX_RING_SIZE 256 2363 #define TX_RING_SIZE 32 2364 #define DONE_Q_SIZE 1024 2365 #define QUEUE_ALIGN 256 2366 #if RX_RING_SIZE > 256 2367 #define RX_Q_ENTRIES Rx2048QEntries 2368 #else 2369 #define RX_Q_ENTRIES Rx256QEntries 2370 #endif 2371 #define TX_TIMEOUT (2 * HZ) 2372 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2373 #define ADDR_64BITS 2374 #define netdrv_addr_t __le64 2375 #define cpu_to_dma(x) cpu_to_le64(x) 2376 #define dma_to_cpu(x) le64_to_cpu(x) 2377 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 2378 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 2379 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 2380 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 2381 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 2382 #else 2383 #define netdrv_addr_t __le32 2384 #define cpu_to_dma(x) cpu_to_le32(x) 2385 #define dma_to_cpu(x) le32_to_cpu(x) 2386 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 2387 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 2388 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 2389 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 2390 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 2391 #endif 2392 #define skb_first_frag_len(skb) skb_headlen(skb) 2393 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 2394 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 2395 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 2396 #ifdef VLAN_SUPPORT 2397 #define RxComplType RxComplType3 2398 #else 2399 #define RxComplType RxComplType2 2400 #endif 2401 #ifdef ADDR_64BITS 2402 #define TX_DESC_TYPE TxDescType2 2403 #else 2404 #define TX_DESC_TYPE TxDescType1 2405 #endif 2406 #define TX_DESC_SPACING TxDescSpaceUnlim 2407 #if 0 2408 #endif 2409 #define PHY_CNT 2 2410 #ifdef VLAN_SUPPORT 2411 #endif 2412 #ifdef VLAN_SUPPORT 2413 #endif 2414 #ifdef VLAN_SUPPORT 2415 #endif 2416 #ifndef MODULE 2417 #endif 2418 #ifdef ZEROCOPY 2419 #endif 2420 #ifdef VLAN_SUPPORT 2421 #endif 2422 #ifdef ADDR_64BITS 2423 #endif 2424 #if ! defined(final_version) 2425 #endif 2426 #ifdef VLAN_SUPPORT 2427 #endif 2428 /* LDV_COMMENT_END_PREP */ 2429 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "start_tx" */ 2430 struct sk_buff * var_group2; 2431 /* LDV_COMMENT_BEGIN_PREP */ 2432 #ifndef final_version 2433 #endif 2434 #ifdef VLAN_SUPPORT 2435 #endif 2436 #ifdef VLAN_SUPPORT 2437 #endif 2438 #ifdef VLAN_SUPPORT 2439 #endif 2440 #ifdef VLAN_SUPPORT 2441 #endif 2442 #ifdef CONFIG_PM 2443 #endif 2444 #ifdef CONFIG_PM 2445 #endif 2446 #ifdef MODULE 2447 #endif 2448 /* LDV_COMMENT_END_PREP */ 2449 /* content: static void tx_timeout(struct net_device *dev)*/ 2450 /* LDV_COMMENT_BEGIN_PREP */ 2451 #define DRV_NAME "starfire" 2452 #define DRV_VERSION "2.1" 2453 #define DRV_RELDATE "July 6, 2008" 2454 #define HAS_BROKEN_FIRMWARE 2455 #ifdef HAS_BROKEN_FIRMWARE 2456 #define PADDING_MASK 3 2457 #endif 2458 #define ZEROCOPY 2459 #if IS_ENABLED(CONFIG_VLAN_8021Q) 2460 #define VLAN_SUPPORT 2461 #endif 2462 #define PKT_BUF_SZ 1536 2463 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 2464 #else 2465 #endif 2466 #ifdef __sparc__ 2467 #define DMA_BURST_SIZE 64 2468 #else 2469 #define DMA_BURST_SIZE 128 2470 #endif 2471 #define RX_RING_SIZE 256 2472 #define TX_RING_SIZE 32 2473 #define DONE_Q_SIZE 1024 2474 #define QUEUE_ALIGN 256 2475 #if RX_RING_SIZE > 256 2476 #define RX_Q_ENTRIES Rx2048QEntries 2477 #else 2478 #define RX_Q_ENTRIES Rx256QEntries 2479 #endif 2480 #define TX_TIMEOUT (2 * HZ) 2481 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2482 #define ADDR_64BITS 2483 #define netdrv_addr_t __le64 2484 #define cpu_to_dma(x) cpu_to_le64(x) 2485 #define dma_to_cpu(x) le64_to_cpu(x) 2486 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 2487 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 2488 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 2489 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 2490 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 2491 #else 2492 #define netdrv_addr_t __le32 2493 #define cpu_to_dma(x) cpu_to_le32(x) 2494 #define dma_to_cpu(x) le32_to_cpu(x) 2495 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 2496 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 2497 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 2498 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 2499 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 2500 #endif 2501 #define skb_first_frag_len(skb) skb_headlen(skb) 2502 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 2503 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 2504 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 2505 #ifdef VLAN_SUPPORT 2506 #define RxComplType RxComplType3 2507 #else 2508 #define RxComplType RxComplType2 2509 #endif 2510 #ifdef ADDR_64BITS 2511 #define TX_DESC_TYPE TxDescType2 2512 #else 2513 #define TX_DESC_TYPE TxDescType1 2514 #endif 2515 #define TX_DESC_SPACING TxDescSpaceUnlim 2516 #if 0 2517 #endif 2518 #define PHY_CNT 2 2519 #ifdef VLAN_SUPPORT 2520 #endif 2521 #ifdef VLAN_SUPPORT 2522 #endif 2523 #ifdef VLAN_SUPPORT 2524 #endif 2525 #ifndef MODULE 2526 #endif 2527 #ifdef ZEROCOPY 2528 #endif 2529 #ifdef VLAN_SUPPORT 2530 #endif 2531 #ifdef ADDR_64BITS 2532 #endif 2533 #if ! defined(final_version) 2534 #endif 2535 #ifdef VLAN_SUPPORT 2536 #endif 2537 /* LDV_COMMENT_END_PREP */ 2538 /* LDV_COMMENT_BEGIN_PREP */ 2539 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 2540 #endif 2541 #ifndef final_version 2542 #endif 2543 #ifdef VLAN_SUPPORT 2544 #endif 2545 #ifdef VLAN_SUPPORT 2546 #endif 2547 #ifdef VLAN_SUPPORT 2548 #endif 2549 #ifdef VLAN_SUPPORT 2550 #endif 2551 #ifdef CONFIG_PM 2552 #endif 2553 #ifdef CONFIG_PM 2554 #endif 2555 #ifdef MODULE 2556 #endif 2557 /* LDV_COMMENT_END_PREP */ 2558 /* content: static struct net_device_stats *get_stats(struct net_device *dev)*/ 2559 /* LDV_COMMENT_BEGIN_PREP */ 2560 #define DRV_NAME "starfire" 2561 #define DRV_VERSION "2.1" 2562 #define DRV_RELDATE "July 6, 2008" 2563 #define HAS_BROKEN_FIRMWARE 2564 #ifdef HAS_BROKEN_FIRMWARE 2565 #define PADDING_MASK 3 2566 #endif 2567 #define ZEROCOPY 2568 #if IS_ENABLED(CONFIG_VLAN_8021Q) 2569 #define VLAN_SUPPORT 2570 #endif 2571 #define PKT_BUF_SZ 1536 2572 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 2573 #else 2574 #endif 2575 #ifdef __sparc__ 2576 #define DMA_BURST_SIZE 64 2577 #else 2578 #define DMA_BURST_SIZE 128 2579 #endif 2580 #define RX_RING_SIZE 256 2581 #define TX_RING_SIZE 32 2582 #define DONE_Q_SIZE 1024 2583 #define QUEUE_ALIGN 256 2584 #if RX_RING_SIZE > 256 2585 #define RX_Q_ENTRIES Rx2048QEntries 2586 #else 2587 #define RX_Q_ENTRIES Rx256QEntries 2588 #endif 2589 #define TX_TIMEOUT (2 * HZ) 2590 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2591 #define ADDR_64BITS 2592 #define netdrv_addr_t __le64 2593 #define cpu_to_dma(x) cpu_to_le64(x) 2594 #define dma_to_cpu(x) le64_to_cpu(x) 2595 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 2596 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 2597 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 2598 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 2599 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 2600 #else 2601 #define netdrv_addr_t __le32 2602 #define cpu_to_dma(x) cpu_to_le32(x) 2603 #define dma_to_cpu(x) le32_to_cpu(x) 2604 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 2605 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 2606 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 2607 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 2608 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 2609 #endif 2610 #define skb_first_frag_len(skb) skb_headlen(skb) 2611 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 2612 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 2613 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 2614 #ifdef VLAN_SUPPORT 2615 #define RxComplType RxComplType3 2616 #else 2617 #define RxComplType RxComplType2 2618 #endif 2619 #ifdef ADDR_64BITS 2620 #define TX_DESC_TYPE TxDescType2 2621 #else 2622 #define TX_DESC_TYPE TxDescType1 2623 #endif 2624 #define TX_DESC_SPACING TxDescSpaceUnlim 2625 #if 0 2626 #endif 2627 #define PHY_CNT 2 2628 #ifdef VLAN_SUPPORT 2629 #endif 2630 #ifdef VLAN_SUPPORT 2631 #endif 2632 #ifdef VLAN_SUPPORT 2633 #endif 2634 #ifndef MODULE 2635 #endif 2636 #ifdef ZEROCOPY 2637 #endif 2638 #ifdef VLAN_SUPPORT 2639 #endif 2640 #ifdef ADDR_64BITS 2641 #endif 2642 #if ! defined(final_version) 2643 #endif 2644 #ifdef VLAN_SUPPORT 2645 #endif 2646 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 2647 #endif 2648 #ifndef final_version 2649 #endif 2650 #ifdef VLAN_SUPPORT 2651 #endif 2652 #ifdef VLAN_SUPPORT 2653 #endif 2654 /* LDV_COMMENT_END_PREP */ 2655 /* LDV_COMMENT_BEGIN_PREP */ 2656 #ifdef VLAN_SUPPORT 2657 #endif 2658 #ifdef VLAN_SUPPORT 2659 #endif 2660 #ifdef CONFIG_PM 2661 #endif 2662 #ifdef CONFIG_PM 2663 #endif 2664 #ifdef MODULE 2665 #endif 2666 /* LDV_COMMENT_END_PREP */ 2667 /* content: static void set_rx_mode(struct net_device *dev)*/ 2668 /* LDV_COMMENT_BEGIN_PREP */ 2669 #define DRV_NAME "starfire" 2670 #define DRV_VERSION "2.1" 2671 #define DRV_RELDATE "July 6, 2008" 2672 #define HAS_BROKEN_FIRMWARE 2673 #ifdef HAS_BROKEN_FIRMWARE 2674 #define PADDING_MASK 3 2675 #endif 2676 #define ZEROCOPY 2677 #if IS_ENABLED(CONFIG_VLAN_8021Q) 2678 #define VLAN_SUPPORT 2679 #endif 2680 #define PKT_BUF_SZ 1536 2681 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 2682 #else 2683 #endif 2684 #ifdef __sparc__ 2685 #define DMA_BURST_SIZE 64 2686 #else 2687 #define DMA_BURST_SIZE 128 2688 #endif 2689 #define RX_RING_SIZE 256 2690 #define TX_RING_SIZE 32 2691 #define DONE_Q_SIZE 1024 2692 #define QUEUE_ALIGN 256 2693 #if RX_RING_SIZE > 256 2694 #define RX_Q_ENTRIES Rx2048QEntries 2695 #else 2696 #define RX_Q_ENTRIES Rx256QEntries 2697 #endif 2698 #define TX_TIMEOUT (2 * HZ) 2699 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2700 #define ADDR_64BITS 2701 #define netdrv_addr_t __le64 2702 #define cpu_to_dma(x) cpu_to_le64(x) 2703 #define dma_to_cpu(x) le64_to_cpu(x) 2704 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 2705 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 2706 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 2707 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 2708 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 2709 #else 2710 #define netdrv_addr_t __le32 2711 #define cpu_to_dma(x) cpu_to_le32(x) 2712 #define dma_to_cpu(x) le32_to_cpu(x) 2713 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 2714 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 2715 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 2716 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 2717 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 2718 #endif 2719 #define skb_first_frag_len(skb) skb_headlen(skb) 2720 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 2721 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 2722 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 2723 #ifdef VLAN_SUPPORT 2724 #define RxComplType RxComplType3 2725 #else 2726 #define RxComplType RxComplType2 2727 #endif 2728 #ifdef ADDR_64BITS 2729 #define TX_DESC_TYPE TxDescType2 2730 #else 2731 #define TX_DESC_TYPE TxDescType1 2732 #endif 2733 #define TX_DESC_SPACING TxDescSpaceUnlim 2734 #if 0 2735 #endif 2736 #define PHY_CNT 2 2737 #ifdef VLAN_SUPPORT 2738 #endif 2739 #ifdef VLAN_SUPPORT 2740 #endif 2741 #ifdef VLAN_SUPPORT 2742 #endif 2743 #ifndef MODULE 2744 #endif 2745 #ifdef ZEROCOPY 2746 #endif 2747 #ifdef VLAN_SUPPORT 2748 #endif 2749 #ifdef ADDR_64BITS 2750 #endif 2751 #if ! defined(final_version) 2752 #endif 2753 #ifdef VLAN_SUPPORT 2754 #endif 2755 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 2756 #endif 2757 #ifndef final_version 2758 #endif 2759 #ifdef VLAN_SUPPORT 2760 #endif 2761 #ifdef VLAN_SUPPORT 2762 #endif 2763 #ifdef VLAN_SUPPORT 2764 #endif 2765 /* LDV_COMMENT_END_PREP */ 2766 /* LDV_COMMENT_BEGIN_PREP */ 2767 #ifdef CONFIG_PM 2768 #endif 2769 #ifdef CONFIG_PM 2770 #endif 2771 #ifdef MODULE 2772 #endif 2773 /* LDV_COMMENT_END_PREP */ 2774 /* content: static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)*/ 2775 /* LDV_COMMENT_BEGIN_PREP */ 2776 #define DRV_NAME "starfire" 2777 #define DRV_VERSION "2.1" 2778 #define DRV_RELDATE "July 6, 2008" 2779 #define HAS_BROKEN_FIRMWARE 2780 #ifdef HAS_BROKEN_FIRMWARE 2781 #define PADDING_MASK 3 2782 #endif 2783 #define ZEROCOPY 2784 #if IS_ENABLED(CONFIG_VLAN_8021Q) 2785 #define VLAN_SUPPORT 2786 #endif 2787 #define PKT_BUF_SZ 1536 2788 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 2789 #else 2790 #endif 2791 #ifdef __sparc__ 2792 #define DMA_BURST_SIZE 64 2793 #else 2794 #define DMA_BURST_SIZE 128 2795 #endif 2796 #define RX_RING_SIZE 256 2797 #define TX_RING_SIZE 32 2798 #define DONE_Q_SIZE 1024 2799 #define QUEUE_ALIGN 256 2800 #if RX_RING_SIZE > 256 2801 #define RX_Q_ENTRIES Rx2048QEntries 2802 #else 2803 #define RX_Q_ENTRIES Rx256QEntries 2804 #endif 2805 #define TX_TIMEOUT (2 * HZ) 2806 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2807 #define ADDR_64BITS 2808 #define netdrv_addr_t __le64 2809 #define cpu_to_dma(x) cpu_to_le64(x) 2810 #define dma_to_cpu(x) le64_to_cpu(x) 2811 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 2812 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 2813 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 2814 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 2815 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 2816 #else 2817 #define netdrv_addr_t __le32 2818 #define cpu_to_dma(x) cpu_to_le32(x) 2819 #define dma_to_cpu(x) le32_to_cpu(x) 2820 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 2821 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 2822 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 2823 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 2824 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 2825 #endif 2826 #define skb_first_frag_len(skb) skb_headlen(skb) 2827 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 2828 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 2829 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 2830 #ifdef VLAN_SUPPORT 2831 #define RxComplType RxComplType3 2832 #else 2833 #define RxComplType RxComplType2 2834 #endif 2835 #ifdef ADDR_64BITS 2836 #define TX_DESC_TYPE TxDescType2 2837 #else 2838 #define TX_DESC_TYPE TxDescType1 2839 #endif 2840 #define TX_DESC_SPACING TxDescSpaceUnlim 2841 #if 0 2842 #endif 2843 #define PHY_CNT 2 2844 #ifdef VLAN_SUPPORT 2845 #endif 2846 #ifdef VLAN_SUPPORT 2847 #endif 2848 #ifdef VLAN_SUPPORT 2849 #endif 2850 #ifndef MODULE 2851 #endif 2852 #ifdef ZEROCOPY 2853 #endif 2854 #ifdef VLAN_SUPPORT 2855 #endif 2856 #ifdef ADDR_64BITS 2857 #endif 2858 #if ! defined(final_version) 2859 #endif 2860 #ifdef VLAN_SUPPORT 2861 #endif 2862 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 2863 #endif 2864 #ifndef final_version 2865 #endif 2866 #ifdef VLAN_SUPPORT 2867 #endif 2868 #ifdef VLAN_SUPPORT 2869 #endif 2870 #ifdef VLAN_SUPPORT 2871 #endif 2872 #ifdef VLAN_SUPPORT 2873 #endif 2874 /* LDV_COMMENT_END_PREP */ 2875 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "netdev_ioctl" */ 2876 struct ifreq * var_group3; 2877 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "netdev_ioctl" */ 2878 int var_netdev_ioctl_27_p2; 2879 /* LDV_COMMENT_BEGIN_PREP */ 2880 #ifdef CONFIG_PM 2881 #endif 2882 #ifdef CONFIG_PM 2883 #endif 2884 #ifdef MODULE 2885 #endif 2886 /* LDV_COMMENT_END_PREP */ 2887 /* content: static int netdev_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid)*/ 2888 /* LDV_COMMENT_BEGIN_PREP */ 2889 #define DRV_NAME "starfire" 2890 #define DRV_VERSION "2.1" 2891 #define DRV_RELDATE "July 6, 2008" 2892 #define HAS_BROKEN_FIRMWARE 2893 #ifdef HAS_BROKEN_FIRMWARE 2894 #define PADDING_MASK 3 2895 #endif 2896 #define ZEROCOPY 2897 #if IS_ENABLED(CONFIG_VLAN_8021Q) 2898 #define VLAN_SUPPORT 2899 #endif 2900 #define PKT_BUF_SZ 1536 2901 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 2902 #else 2903 #endif 2904 #ifdef __sparc__ 2905 #define DMA_BURST_SIZE 64 2906 #else 2907 #define DMA_BURST_SIZE 128 2908 #endif 2909 #define RX_RING_SIZE 256 2910 #define TX_RING_SIZE 32 2911 #define DONE_Q_SIZE 1024 2912 #define QUEUE_ALIGN 256 2913 #if RX_RING_SIZE > 256 2914 #define RX_Q_ENTRIES Rx2048QEntries 2915 #else 2916 #define RX_Q_ENTRIES Rx256QEntries 2917 #endif 2918 #define TX_TIMEOUT (2 * HZ) 2919 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2920 #define ADDR_64BITS 2921 #define netdrv_addr_t __le64 2922 #define cpu_to_dma(x) cpu_to_le64(x) 2923 #define dma_to_cpu(x) le64_to_cpu(x) 2924 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 2925 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 2926 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 2927 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 2928 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 2929 #else 2930 #define netdrv_addr_t __le32 2931 #define cpu_to_dma(x) cpu_to_le32(x) 2932 #define dma_to_cpu(x) le32_to_cpu(x) 2933 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 2934 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 2935 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 2936 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 2937 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 2938 #endif 2939 #define skb_first_frag_len(skb) skb_headlen(skb) 2940 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 2941 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 2942 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 2943 #ifdef VLAN_SUPPORT 2944 #define RxComplType RxComplType3 2945 #else 2946 #define RxComplType RxComplType2 2947 #endif 2948 #ifdef ADDR_64BITS 2949 #define TX_DESC_TYPE TxDescType2 2950 #else 2951 #define TX_DESC_TYPE TxDescType1 2952 #endif 2953 #define TX_DESC_SPACING TxDescSpaceUnlim 2954 #if 0 2955 #endif 2956 #define PHY_CNT 2 2957 #ifdef VLAN_SUPPORT 2958 #endif 2959 #ifdef VLAN_SUPPORT 2960 /* LDV_COMMENT_END_PREP */ 2961 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "netdev_vlan_rx_add_vid" */ 2962 __be16 var_netdev_vlan_rx_add_vid_0_p1; 2963 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "netdev_vlan_rx_add_vid" */ 2964 u16 var_netdev_vlan_rx_add_vid_0_p2; 2965 /* LDV_COMMENT_BEGIN_PREP */ 2966 #endif 2967 #ifdef VLAN_SUPPORT 2968 #endif 2969 #ifndef MODULE 2970 #endif 2971 #ifdef ZEROCOPY 2972 #endif 2973 #ifdef VLAN_SUPPORT 2974 #endif 2975 #ifdef ADDR_64BITS 2976 #endif 2977 #if ! defined(final_version) 2978 #endif 2979 #ifdef VLAN_SUPPORT 2980 #endif 2981 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 2982 #endif 2983 #ifndef final_version 2984 #endif 2985 #ifdef VLAN_SUPPORT 2986 #endif 2987 #ifdef VLAN_SUPPORT 2988 #endif 2989 #ifdef VLAN_SUPPORT 2990 #endif 2991 #ifdef VLAN_SUPPORT 2992 #endif 2993 #ifdef CONFIG_PM 2994 #endif 2995 #ifdef CONFIG_PM 2996 #endif 2997 #ifdef MODULE 2998 #endif 2999 /* LDV_COMMENT_END_PREP */ 3000 /* content: static int netdev_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, u16 vid)*/ 3001 /* LDV_COMMENT_BEGIN_PREP */ 3002 #define DRV_NAME "starfire" 3003 #define DRV_VERSION "2.1" 3004 #define DRV_RELDATE "July 6, 2008" 3005 #define HAS_BROKEN_FIRMWARE 3006 #ifdef HAS_BROKEN_FIRMWARE 3007 #define PADDING_MASK 3 3008 #endif 3009 #define ZEROCOPY 3010 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3011 #define VLAN_SUPPORT 3012 #endif 3013 #define PKT_BUF_SZ 1536 3014 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3015 #else 3016 #endif 3017 #ifdef __sparc__ 3018 #define DMA_BURST_SIZE 64 3019 #else 3020 #define DMA_BURST_SIZE 128 3021 #endif 3022 #define RX_RING_SIZE 256 3023 #define TX_RING_SIZE 32 3024 #define DONE_Q_SIZE 1024 3025 #define QUEUE_ALIGN 256 3026 #if RX_RING_SIZE > 256 3027 #define RX_Q_ENTRIES Rx2048QEntries 3028 #else 3029 #define RX_Q_ENTRIES Rx256QEntries 3030 #endif 3031 #define TX_TIMEOUT (2 * HZ) 3032 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3033 #define ADDR_64BITS 3034 #define netdrv_addr_t __le64 3035 #define cpu_to_dma(x) cpu_to_le64(x) 3036 #define dma_to_cpu(x) le64_to_cpu(x) 3037 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3038 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3039 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3040 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3041 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3042 #else 3043 #define netdrv_addr_t __le32 3044 #define cpu_to_dma(x) cpu_to_le32(x) 3045 #define dma_to_cpu(x) le32_to_cpu(x) 3046 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3047 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3048 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3049 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3050 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3051 #endif 3052 #define skb_first_frag_len(skb) skb_headlen(skb) 3053 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3054 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3055 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3056 #ifdef VLAN_SUPPORT 3057 #define RxComplType RxComplType3 3058 #else 3059 #define RxComplType RxComplType2 3060 #endif 3061 #ifdef ADDR_64BITS 3062 #define TX_DESC_TYPE TxDescType2 3063 #else 3064 #define TX_DESC_TYPE TxDescType1 3065 #endif 3066 #define TX_DESC_SPACING TxDescSpaceUnlim 3067 #if 0 3068 #endif 3069 #define PHY_CNT 2 3070 #ifdef VLAN_SUPPORT 3071 #endif 3072 #ifdef VLAN_SUPPORT 3073 /* LDV_COMMENT_END_PREP */ 3074 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "netdev_vlan_rx_kill_vid" */ 3075 __be16 var_netdev_vlan_rx_kill_vid_1_p1; 3076 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "netdev_vlan_rx_kill_vid" */ 3077 u16 var_netdev_vlan_rx_kill_vid_1_p2; 3078 /* LDV_COMMENT_BEGIN_PREP */ 3079 #endif 3080 #ifdef VLAN_SUPPORT 3081 #endif 3082 #ifndef MODULE 3083 #endif 3084 #ifdef ZEROCOPY 3085 #endif 3086 #ifdef VLAN_SUPPORT 3087 #endif 3088 #ifdef ADDR_64BITS 3089 #endif 3090 #if ! defined(final_version) 3091 #endif 3092 #ifdef VLAN_SUPPORT 3093 #endif 3094 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3095 #endif 3096 #ifndef final_version 3097 #endif 3098 #ifdef VLAN_SUPPORT 3099 #endif 3100 #ifdef VLAN_SUPPORT 3101 #endif 3102 #ifdef VLAN_SUPPORT 3103 #endif 3104 #ifdef VLAN_SUPPORT 3105 #endif 3106 #ifdef CONFIG_PM 3107 #endif 3108 #ifdef CONFIG_PM 3109 #endif 3110 #ifdef MODULE 3111 #endif 3112 /* LDV_COMMENT_END_PREP */ 3113 3114 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 3115 /* content: static int check_if_running(struct net_device *dev)*/ 3116 /* LDV_COMMENT_BEGIN_PREP */ 3117 #define DRV_NAME "starfire" 3118 #define DRV_VERSION "2.1" 3119 #define DRV_RELDATE "July 6, 2008" 3120 #define HAS_BROKEN_FIRMWARE 3121 #ifdef HAS_BROKEN_FIRMWARE 3122 #define PADDING_MASK 3 3123 #endif 3124 #define ZEROCOPY 3125 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3126 #define VLAN_SUPPORT 3127 #endif 3128 #define PKT_BUF_SZ 1536 3129 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3130 #else 3131 #endif 3132 #ifdef __sparc__ 3133 #define DMA_BURST_SIZE 64 3134 #else 3135 #define DMA_BURST_SIZE 128 3136 #endif 3137 #define RX_RING_SIZE 256 3138 #define TX_RING_SIZE 32 3139 #define DONE_Q_SIZE 1024 3140 #define QUEUE_ALIGN 256 3141 #if RX_RING_SIZE > 256 3142 #define RX_Q_ENTRIES Rx2048QEntries 3143 #else 3144 #define RX_Q_ENTRIES Rx256QEntries 3145 #endif 3146 #define TX_TIMEOUT (2 * HZ) 3147 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3148 #define ADDR_64BITS 3149 #define netdrv_addr_t __le64 3150 #define cpu_to_dma(x) cpu_to_le64(x) 3151 #define dma_to_cpu(x) le64_to_cpu(x) 3152 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3153 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3154 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3155 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3156 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3157 #else 3158 #define netdrv_addr_t __le32 3159 #define cpu_to_dma(x) cpu_to_le32(x) 3160 #define dma_to_cpu(x) le32_to_cpu(x) 3161 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3162 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3163 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3164 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3165 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3166 #endif 3167 #define skb_first_frag_len(skb) skb_headlen(skb) 3168 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3169 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3170 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3171 #ifdef VLAN_SUPPORT 3172 #define RxComplType RxComplType3 3173 #else 3174 #define RxComplType RxComplType2 3175 #endif 3176 #ifdef ADDR_64BITS 3177 #define TX_DESC_TYPE TxDescType2 3178 #else 3179 #define TX_DESC_TYPE TxDescType1 3180 #endif 3181 #define TX_DESC_SPACING TxDescSpaceUnlim 3182 #if 0 3183 #endif 3184 #define PHY_CNT 2 3185 #ifdef VLAN_SUPPORT 3186 #endif 3187 #ifdef VLAN_SUPPORT 3188 #endif 3189 #ifdef VLAN_SUPPORT 3190 #endif 3191 #ifndef MODULE 3192 #endif 3193 #ifdef ZEROCOPY 3194 #endif 3195 #ifdef VLAN_SUPPORT 3196 #endif 3197 #ifdef ADDR_64BITS 3198 #endif 3199 #if ! defined(final_version) 3200 #endif 3201 #ifdef VLAN_SUPPORT 3202 #endif 3203 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3204 #endif 3205 #ifndef final_version 3206 #endif 3207 #ifdef VLAN_SUPPORT 3208 #endif 3209 #ifdef VLAN_SUPPORT 3210 #endif 3211 #ifdef VLAN_SUPPORT 3212 #endif 3213 #ifdef VLAN_SUPPORT 3214 #endif 3215 /* LDV_COMMENT_END_PREP */ 3216 /* LDV_COMMENT_BEGIN_PREP */ 3217 #ifdef CONFIG_PM 3218 #endif 3219 #ifdef CONFIG_PM 3220 #endif 3221 #ifdef MODULE 3222 #endif 3223 /* LDV_COMMENT_END_PREP */ 3224 /* content: static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)*/ 3225 /* LDV_COMMENT_BEGIN_PREP */ 3226 #define DRV_NAME "starfire" 3227 #define DRV_VERSION "2.1" 3228 #define DRV_RELDATE "July 6, 2008" 3229 #define HAS_BROKEN_FIRMWARE 3230 #ifdef HAS_BROKEN_FIRMWARE 3231 #define PADDING_MASK 3 3232 #endif 3233 #define ZEROCOPY 3234 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3235 #define VLAN_SUPPORT 3236 #endif 3237 #define PKT_BUF_SZ 1536 3238 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3239 #else 3240 #endif 3241 #ifdef __sparc__ 3242 #define DMA_BURST_SIZE 64 3243 #else 3244 #define DMA_BURST_SIZE 128 3245 #endif 3246 #define RX_RING_SIZE 256 3247 #define TX_RING_SIZE 32 3248 #define DONE_Q_SIZE 1024 3249 #define QUEUE_ALIGN 256 3250 #if RX_RING_SIZE > 256 3251 #define RX_Q_ENTRIES Rx2048QEntries 3252 #else 3253 #define RX_Q_ENTRIES Rx256QEntries 3254 #endif 3255 #define TX_TIMEOUT (2 * HZ) 3256 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3257 #define ADDR_64BITS 3258 #define netdrv_addr_t __le64 3259 #define cpu_to_dma(x) cpu_to_le64(x) 3260 #define dma_to_cpu(x) le64_to_cpu(x) 3261 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3262 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3263 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3264 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3265 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3266 #else 3267 #define netdrv_addr_t __le32 3268 #define cpu_to_dma(x) cpu_to_le32(x) 3269 #define dma_to_cpu(x) le32_to_cpu(x) 3270 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3271 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3272 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3273 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3274 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3275 #endif 3276 #define skb_first_frag_len(skb) skb_headlen(skb) 3277 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3278 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3279 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3280 #ifdef VLAN_SUPPORT 3281 #define RxComplType RxComplType3 3282 #else 3283 #define RxComplType RxComplType2 3284 #endif 3285 #ifdef ADDR_64BITS 3286 #define TX_DESC_TYPE TxDescType2 3287 #else 3288 #define TX_DESC_TYPE TxDescType1 3289 #endif 3290 #define TX_DESC_SPACING TxDescSpaceUnlim 3291 #if 0 3292 #endif 3293 #define PHY_CNT 2 3294 #ifdef VLAN_SUPPORT 3295 #endif 3296 #ifdef VLAN_SUPPORT 3297 #endif 3298 #ifdef VLAN_SUPPORT 3299 #endif 3300 #ifndef MODULE 3301 #endif 3302 #ifdef ZEROCOPY 3303 #endif 3304 #ifdef VLAN_SUPPORT 3305 #endif 3306 #ifdef ADDR_64BITS 3307 #endif 3308 #if ! defined(final_version) 3309 #endif 3310 #ifdef VLAN_SUPPORT 3311 #endif 3312 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3313 #endif 3314 #ifndef final_version 3315 #endif 3316 #ifdef VLAN_SUPPORT 3317 #endif 3318 #ifdef VLAN_SUPPORT 3319 #endif 3320 #ifdef VLAN_SUPPORT 3321 #endif 3322 #ifdef VLAN_SUPPORT 3323 #endif 3324 /* LDV_COMMENT_END_PREP */ 3325 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "get_drvinfo" */ 3326 struct ethtool_drvinfo * var_group4; 3327 /* LDV_COMMENT_BEGIN_PREP */ 3328 #ifdef CONFIG_PM 3329 #endif 3330 #ifdef CONFIG_PM 3331 #endif 3332 #ifdef MODULE 3333 #endif 3334 /* LDV_COMMENT_END_PREP */ 3335 /* content: static int nway_reset(struct net_device *dev)*/ 3336 /* LDV_COMMENT_BEGIN_PREP */ 3337 #define DRV_NAME "starfire" 3338 #define DRV_VERSION "2.1" 3339 #define DRV_RELDATE "July 6, 2008" 3340 #define HAS_BROKEN_FIRMWARE 3341 #ifdef HAS_BROKEN_FIRMWARE 3342 #define PADDING_MASK 3 3343 #endif 3344 #define ZEROCOPY 3345 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3346 #define VLAN_SUPPORT 3347 #endif 3348 #define PKT_BUF_SZ 1536 3349 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3350 #else 3351 #endif 3352 #ifdef __sparc__ 3353 #define DMA_BURST_SIZE 64 3354 #else 3355 #define DMA_BURST_SIZE 128 3356 #endif 3357 #define RX_RING_SIZE 256 3358 #define TX_RING_SIZE 32 3359 #define DONE_Q_SIZE 1024 3360 #define QUEUE_ALIGN 256 3361 #if RX_RING_SIZE > 256 3362 #define RX_Q_ENTRIES Rx2048QEntries 3363 #else 3364 #define RX_Q_ENTRIES Rx256QEntries 3365 #endif 3366 #define TX_TIMEOUT (2 * HZ) 3367 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3368 #define ADDR_64BITS 3369 #define netdrv_addr_t __le64 3370 #define cpu_to_dma(x) cpu_to_le64(x) 3371 #define dma_to_cpu(x) le64_to_cpu(x) 3372 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3373 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3374 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3375 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3376 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3377 #else 3378 #define netdrv_addr_t __le32 3379 #define cpu_to_dma(x) cpu_to_le32(x) 3380 #define dma_to_cpu(x) le32_to_cpu(x) 3381 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3382 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3383 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3384 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3385 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3386 #endif 3387 #define skb_first_frag_len(skb) skb_headlen(skb) 3388 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3389 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3390 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3391 #ifdef VLAN_SUPPORT 3392 #define RxComplType RxComplType3 3393 #else 3394 #define RxComplType RxComplType2 3395 #endif 3396 #ifdef ADDR_64BITS 3397 #define TX_DESC_TYPE TxDescType2 3398 #else 3399 #define TX_DESC_TYPE TxDescType1 3400 #endif 3401 #define TX_DESC_SPACING TxDescSpaceUnlim 3402 #if 0 3403 #endif 3404 #define PHY_CNT 2 3405 #ifdef VLAN_SUPPORT 3406 #endif 3407 #ifdef VLAN_SUPPORT 3408 #endif 3409 #ifdef VLAN_SUPPORT 3410 #endif 3411 #ifndef MODULE 3412 #endif 3413 #ifdef ZEROCOPY 3414 #endif 3415 #ifdef VLAN_SUPPORT 3416 #endif 3417 #ifdef ADDR_64BITS 3418 #endif 3419 #if ! defined(final_version) 3420 #endif 3421 #ifdef VLAN_SUPPORT 3422 #endif 3423 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3424 #endif 3425 #ifndef final_version 3426 #endif 3427 #ifdef VLAN_SUPPORT 3428 #endif 3429 #ifdef VLAN_SUPPORT 3430 #endif 3431 #ifdef VLAN_SUPPORT 3432 #endif 3433 #ifdef VLAN_SUPPORT 3434 #endif 3435 /* LDV_COMMENT_END_PREP */ 3436 /* LDV_COMMENT_BEGIN_PREP */ 3437 #ifdef CONFIG_PM 3438 #endif 3439 #ifdef CONFIG_PM 3440 #endif 3441 #ifdef MODULE 3442 #endif 3443 /* LDV_COMMENT_END_PREP */ 3444 /* content: static u32 get_link(struct net_device *dev)*/ 3445 /* LDV_COMMENT_BEGIN_PREP */ 3446 #define DRV_NAME "starfire" 3447 #define DRV_VERSION "2.1" 3448 #define DRV_RELDATE "July 6, 2008" 3449 #define HAS_BROKEN_FIRMWARE 3450 #ifdef HAS_BROKEN_FIRMWARE 3451 #define PADDING_MASK 3 3452 #endif 3453 #define ZEROCOPY 3454 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3455 #define VLAN_SUPPORT 3456 #endif 3457 #define PKT_BUF_SZ 1536 3458 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3459 #else 3460 #endif 3461 #ifdef __sparc__ 3462 #define DMA_BURST_SIZE 64 3463 #else 3464 #define DMA_BURST_SIZE 128 3465 #endif 3466 #define RX_RING_SIZE 256 3467 #define TX_RING_SIZE 32 3468 #define DONE_Q_SIZE 1024 3469 #define QUEUE_ALIGN 256 3470 #if RX_RING_SIZE > 256 3471 #define RX_Q_ENTRIES Rx2048QEntries 3472 #else 3473 #define RX_Q_ENTRIES Rx256QEntries 3474 #endif 3475 #define TX_TIMEOUT (2 * HZ) 3476 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3477 #define ADDR_64BITS 3478 #define netdrv_addr_t __le64 3479 #define cpu_to_dma(x) cpu_to_le64(x) 3480 #define dma_to_cpu(x) le64_to_cpu(x) 3481 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3482 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3483 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3484 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3485 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3486 #else 3487 #define netdrv_addr_t __le32 3488 #define cpu_to_dma(x) cpu_to_le32(x) 3489 #define dma_to_cpu(x) le32_to_cpu(x) 3490 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3491 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3492 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3493 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3494 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3495 #endif 3496 #define skb_first_frag_len(skb) skb_headlen(skb) 3497 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3498 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3499 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3500 #ifdef VLAN_SUPPORT 3501 #define RxComplType RxComplType3 3502 #else 3503 #define RxComplType RxComplType2 3504 #endif 3505 #ifdef ADDR_64BITS 3506 #define TX_DESC_TYPE TxDescType2 3507 #else 3508 #define TX_DESC_TYPE TxDescType1 3509 #endif 3510 #define TX_DESC_SPACING TxDescSpaceUnlim 3511 #if 0 3512 #endif 3513 #define PHY_CNT 2 3514 #ifdef VLAN_SUPPORT 3515 #endif 3516 #ifdef VLAN_SUPPORT 3517 #endif 3518 #ifdef VLAN_SUPPORT 3519 #endif 3520 #ifndef MODULE 3521 #endif 3522 #ifdef ZEROCOPY 3523 #endif 3524 #ifdef VLAN_SUPPORT 3525 #endif 3526 #ifdef ADDR_64BITS 3527 #endif 3528 #if ! defined(final_version) 3529 #endif 3530 #ifdef VLAN_SUPPORT 3531 #endif 3532 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3533 #endif 3534 #ifndef final_version 3535 #endif 3536 #ifdef VLAN_SUPPORT 3537 #endif 3538 #ifdef VLAN_SUPPORT 3539 #endif 3540 #ifdef VLAN_SUPPORT 3541 #endif 3542 #ifdef VLAN_SUPPORT 3543 #endif 3544 /* LDV_COMMENT_END_PREP */ 3545 /* LDV_COMMENT_BEGIN_PREP */ 3546 #ifdef CONFIG_PM 3547 #endif 3548 #ifdef CONFIG_PM 3549 #endif 3550 #ifdef MODULE 3551 #endif 3552 /* LDV_COMMENT_END_PREP */ 3553 /* content: static u32 get_msglevel(struct net_device *dev)*/ 3554 /* LDV_COMMENT_BEGIN_PREP */ 3555 #define DRV_NAME "starfire" 3556 #define DRV_VERSION "2.1" 3557 #define DRV_RELDATE "July 6, 2008" 3558 #define HAS_BROKEN_FIRMWARE 3559 #ifdef HAS_BROKEN_FIRMWARE 3560 #define PADDING_MASK 3 3561 #endif 3562 #define ZEROCOPY 3563 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3564 #define VLAN_SUPPORT 3565 #endif 3566 #define PKT_BUF_SZ 1536 3567 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3568 #else 3569 #endif 3570 #ifdef __sparc__ 3571 #define DMA_BURST_SIZE 64 3572 #else 3573 #define DMA_BURST_SIZE 128 3574 #endif 3575 #define RX_RING_SIZE 256 3576 #define TX_RING_SIZE 32 3577 #define DONE_Q_SIZE 1024 3578 #define QUEUE_ALIGN 256 3579 #if RX_RING_SIZE > 256 3580 #define RX_Q_ENTRIES Rx2048QEntries 3581 #else 3582 #define RX_Q_ENTRIES Rx256QEntries 3583 #endif 3584 #define TX_TIMEOUT (2 * HZ) 3585 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3586 #define ADDR_64BITS 3587 #define netdrv_addr_t __le64 3588 #define cpu_to_dma(x) cpu_to_le64(x) 3589 #define dma_to_cpu(x) le64_to_cpu(x) 3590 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3591 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3592 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3593 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3594 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3595 #else 3596 #define netdrv_addr_t __le32 3597 #define cpu_to_dma(x) cpu_to_le32(x) 3598 #define dma_to_cpu(x) le32_to_cpu(x) 3599 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3600 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3601 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3602 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3603 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3604 #endif 3605 #define skb_first_frag_len(skb) skb_headlen(skb) 3606 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3607 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3608 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3609 #ifdef VLAN_SUPPORT 3610 #define RxComplType RxComplType3 3611 #else 3612 #define RxComplType RxComplType2 3613 #endif 3614 #ifdef ADDR_64BITS 3615 #define TX_DESC_TYPE TxDescType2 3616 #else 3617 #define TX_DESC_TYPE TxDescType1 3618 #endif 3619 #define TX_DESC_SPACING TxDescSpaceUnlim 3620 #if 0 3621 #endif 3622 #define PHY_CNT 2 3623 #ifdef VLAN_SUPPORT 3624 #endif 3625 #ifdef VLAN_SUPPORT 3626 #endif 3627 #ifdef VLAN_SUPPORT 3628 #endif 3629 #ifndef MODULE 3630 #endif 3631 #ifdef ZEROCOPY 3632 #endif 3633 #ifdef VLAN_SUPPORT 3634 #endif 3635 #ifdef ADDR_64BITS 3636 #endif 3637 #if ! defined(final_version) 3638 #endif 3639 #ifdef VLAN_SUPPORT 3640 #endif 3641 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3642 #endif 3643 #ifndef final_version 3644 #endif 3645 #ifdef VLAN_SUPPORT 3646 #endif 3647 #ifdef VLAN_SUPPORT 3648 #endif 3649 #ifdef VLAN_SUPPORT 3650 #endif 3651 #ifdef VLAN_SUPPORT 3652 #endif 3653 /* LDV_COMMENT_END_PREP */ 3654 /* LDV_COMMENT_BEGIN_PREP */ 3655 #ifdef CONFIG_PM 3656 #endif 3657 #ifdef CONFIG_PM 3658 #endif 3659 #ifdef MODULE 3660 #endif 3661 /* LDV_COMMENT_END_PREP */ 3662 /* content: static void set_msglevel(struct net_device *dev, u32 val)*/ 3663 /* LDV_COMMENT_BEGIN_PREP */ 3664 #define DRV_NAME "starfire" 3665 #define DRV_VERSION "2.1" 3666 #define DRV_RELDATE "July 6, 2008" 3667 #define HAS_BROKEN_FIRMWARE 3668 #ifdef HAS_BROKEN_FIRMWARE 3669 #define PADDING_MASK 3 3670 #endif 3671 #define ZEROCOPY 3672 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3673 #define VLAN_SUPPORT 3674 #endif 3675 #define PKT_BUF_SZ 1536 3676 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3677 #else 3678 #endif 3679 #ifdef __sparc__ 3680 #define DMA_BURST_SIZE 64 3681 #else 3682 #define DMA_BURST_SIZE 128 3683 #endif 3684 #define RX_RING_SIZE 256 3685 #define TX_RING_SIZE 32 3686 #define DONE_Q_SIZE 1024 3687 #define QUEUE_ALIGN 256 3688 #if RX_RING_SIZE > 256 3689 #define RX_Q_ENTRIES Rx2048QEntries 3690 #else 3691 #define RX_Q_ENTRIES Rx256QEntries 3692 #endif 3693 #define TX_TIMEOUT (2 * HZ) 3694 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3695 #define ADDR_64BITS 3696 #define netdrv_addr_t __le64 3697 #define cpu_to_dma(x) cpu_to_le64(x) 3698 #define dma_to_cpu(x) le64_to_cpu(x) 3699 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3700 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3701 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3702 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3703 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3704 #else 3705 #define netdrv_addr_t __le32 3706 #define cpu_to_dma(x) cpu_to_le32(x) 3707 #define dma_to_cpu(x) le32_to_cpu(x) 3708 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3709 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3710 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3711 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3712 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3713 #endif 3714 #define skb_first_frag_len(skb) skb_headlen(skb) 3715 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3716 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3717 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3718 #ifdef VLAN_SUPPORT 3719 #define RxComplType RxComplType3 3720 #else 3721 #define RxComplType RxComplType2 3722 #endif 3723 #ifdef ADDR_64BITS 3724 #define TX_DESC_TYPE TxDescType2 3725 #else 3726 #define TX_DESC_TYPE TxDescType1 3727 #endif 3728 #define TX_DESC_SPACING TxDescSpaceUnlim 3729 #if 0 3730 #endif 3731 #define PHY_CNT 2 3732 #ifdef VLAN_SUPPORT 3733 #endif 3734 #ifdef VLAN_SUPPORT 3735 #endif 3736 #ifdef VLAN_SUPPORT 3737 #endif 3738 #ifndef MODULE 3739 #endif 3740 #ifdef ZEROCOPY 3741 #endif 3742 #ifdef VLAN_SUPPORT 3743 #endif 3744 #ifdef ADDR_64BITS 3745 #endif 3746 #if ! defined(final_version) 3747 #endif 3748 #ifdef VLAN_SUPPORT 3749 #endif 3750 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3751 #endif 3752 #ifndef final_version 3753 #endif 3754 #ifdef VLAN_SUPPORT 3755 #endif 3756 #ifdef VLAN_SUPPORT 3757 #endif 3758 #ifdef VLAN_SUPPORT 3759 #endif 3760 #ifdef VLAN_SUPPORT 3761 #endif 3762 /* LDV_COMMENT_END_PREP */ 3763 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "set_msglevel" */ 3764 u32 var_set_msglevel_26_p1; 3765 /* LDV_COMMENT_BEGIN_PREP */ 3766 #ifdef CONFIG_PM 3767 #endif 3768 #ifdef CONFIG_PM 3769 #endif 3770 #ifdef MODULE 3771 #endif 3772 /* LDV_COMMENT_END_PREP */ 3773 /* content: static int get_link_ksettings(struct net_device *dev, struct ethtool_link_ksettings *cmd)*/ 3774 /* LDV_COMMENT_BEGIN_PREP */ 3775 #define DRV_NAME "starfire" 3776 #define DRV_VERSION "2.1" 3777 #define DRV_RELDATE "July 6, 2008" 3778 #define HAS_BROKEN_FIRMWARE 3779 #ifdef HAS_BROKEN_FIRMWARE 3780 #define PADDING_MASK 3 3781 #endif 3782 #define ZEROCOPY 3783 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3784 #define VLAN_SUPPORT 3785 #endif 3786 #define PKT_BUF_SZ 1536 3787 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3788 #else 3789 #endif 3790 #ifdef __sparc__ 3791 #define DMA_BURST_SIZE 64 3792 #else 3793 #define DMA_BURST_SIZE 128 3794 #endif 3795 #define RX_RING_SIZE 256 3796 #define TX_RING_SIZE 32 3797 #define DONE_Q_SIZE 1024 3798 #define QUEUE_ALIGN 256 3799 #if RX_RING_SIZE > 256 3800 #define RX_Q_ENTRIES Rx2048QEntries 3801 #else 3802 #define RX_Q_ENTRIES Rx256QEntries 3803 #endif 3804 #define TX_TIMEOUT (2 * HZ) 3805 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3806 #define ADDR_64BITS 3807 #define netdrv_addr_t __le64 3808 #define cpu_to_dma(x) cpu_to_le64(x) 3809 #define dma_to_cpu(x) le64_to_cpu(x) 3810 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3811 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3812 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3813 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3814 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3815 #else 3816 #define netdrv_addr_t __le32 3817 #define cpu_to_dma(x) cpu_to_le32(x) 3818 #define dma_to_cpu(x) le32_to_cpu(x) 3819 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3820 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3821 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3822 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3823 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3824 #endif 3825 #define skb_first_frag_len(skb) skb_headlen(skb) 3826 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3827 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3828 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3829 #ifdef VLAN_SUPPORT 3830 #define RxComplType RxComplType3 3831 #else 3832 #define RxComplType RxComplType2 3833 #endif 3834 #ifdef ADDR_64BITS 3835 #define TX_DESC_TYPE TxDescType2 3836 #else 3837 #define TX_DESC_TYPE TxDescType1 3838 #endif 3839 #define TX_DESC_SPACING TxDescSpaceUnlim 3840 #if 0 3841 #endif 3842 #define PHY_CNT 2 3843 #ifdef VLAN_SUPPORT 3844 #endif 3845 #ifdef VLAN_SUPPORT 3846 #endif 3847 #ifdef VLAN_SUPPORT 3848 #endif 3849 #ifndef MODULE 3850 #endif 3851 #ifdef ZEROCOPY 3852 #endif 3853 #ifdef VLAN_SUPPORT 3854 #endif 3855 #ifdef ADDR_64BITS 3856 #endif 3857 #if ! defined(final_version) 3858 #endif 3859 #ifdef VLAN_SUPPORT 3860 #endif 3861 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3862 #endif 3863 #ifndef final_version 3864 #endif 3865 #ifdef VLAN_SUPPORT 3866 #endif 3867 #ifdef VLAN_SUPPORT 3868 #endif 3869 #ifdef VLAN_SUPPORT 3870 #endif 3871 #ifdef VLAN_SUPPORT 3872 #endif 3873 /* LDV_COMMENT_END_PREP */ 3874 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "get_link_ksettings" */ 3875 struct ethtool_link_ksettings * var_group5; 3876 /* LDV_COMMENT_BEGIN_PREP */ 3877 #ifdef CONFIG_PM 3878 #endif 3879 #ifdef CONFIG_PM 3880 #endif 3881 #ifdef MODULE 3882 #endif 3883 /* LDV_COMMENT_END_PREP */ 3884 /* content: static int set_link_ksettings(struct net_device *dev, const struct ethtool_link_ksettings *cmd)*/ 3885 /* LDV_COMMENT_BEGIN_PREP */ 3886 #define DRV_NAME "starfire" 3887 #define DRV_VERSION "2.1" 3888 #define DRV_RELDATE "July 6, 2008" 3889 #define HAS_BROKEN_FIRMWARE 3890 #ifdef HAS_BROKEN_FIRMWARE 3891 #define PADDING_MASK 3 3892 #endif 3893 #define ZEROCOPY 3894 #if IS_ENABLED(CONFIG_VLAN_8021Q) 3895 #define VLAN_SUPPORT 3896 #endif 3897 #define PKT_BUF_SZ 1536 3898 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 3899 #else 3900 #endif 3901 #ifdef __sparc__ 3902 #define DMA_BURST_SIZE 64 3903 #else 3904 #define DMA_BURST_SIZE 128 3905 #endif 3906 #define RX_RING_SIZE 256 3907 #define TX_RING_SIZE 32 3908 #define DONE_Q_SIZE 1024 3909 #define QUEUE_ALIGN 256 3910 #if RX_RING_SIZE > 256 3911 #define RX_Q_ENTRIES Rx2048QEntries 3912 #else 3913 #define RX_Q_ENTRIES Rx256QEntries 3914 #endif 3915 #define TX_TIMEOUT (2 * HZ) 3916 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3917 #define ADDR_64BITS 3918 #define netdrv_addr_t __le64 3919 #define cpu_to_dma(x) cpu_to_le64(x) 3920 #define dma_to_cpu(x) le64_to_cpu(x) 3921 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 3922 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 3923 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 3924 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 3925 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 3926 #else 3927 #define netdrv_addr_t __le32 3928 #define cpu_to_dma(x) cpu_to_le32(x) 3929 #define dma_to_cpu(x) le32_to_cpu(x) 3930 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 3931 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 3932 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 3933 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 3934 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 3935 #endif 3936 #define skb_first_frag_len(skb) skb_headlen(skb) 3937 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 3938 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 3939 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 3940 #ifdef VLAN_SUPPORT 3941 #define RxComplType RxComplType3 3942 #else 3943 #define RxComplType RxComplType2 3944 #endif 3945 #ifdef ADDR_64BITS 3946 #define TX_DESC_TYPE TxDescType2 3947 #else 3948 #define TX_DESC_TYPE TxDescType1 3949 #endif 3950 #define TX_DESC_SPACING TxDescSpaceUnlim 3951 #if 0 3952 #endif 3953 #define PHY_CNT 2 3954 #ifdef VLAN_SUPPORT 3955 #endif 3956 #ifdef VLAN_SUPPORT 3957 #endif 3958 #ifdef VLAN_SUPPORT 3959 #endif 3960 #ifndef MODULE 3961 #endif 3962 #ifdef ZEROCOPY 3963 #endif 3964 #ifdef VLAN_SUPPORT 3965 #endif 3966 #ifdef ADDR_64BITS 3967 #endif 3968 #if ! defined(final_version) 3969 #endif 3970 #ifdef VLAN_SUPPORT 3971 #endif 3972 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 3973 #endif 3974 #ifndef final_version 3975 #endif 3976 #ifdef VLAN_SUPPORT 3977 #endif 3978 #ifdef VLAN_SUPPORT 3979 #endif 3980 #ifdef VLAN_SUPPORT 3981 #endif 3982 #ifdef VLAN_SUPPORT 3983 #endif 3984 /* LDV_COMMENT_END_PREP */ 3985 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "set_link_ksettings" */ 3986 const struct ethtool_link_ksettings * var_set_link_ksettings_22_p1; 3987 /* LDV_COMMENT_BEGIN_PREP */ 3988 #ifdef CONFIG_PM 3989 #endif 3990 #ifdef CONFIG_PM 3991 #endif 3992 #ifdef MODULE 3993 #endif 3994 /* LDV_COMMENT_END_PREP */ 3995 3996 /** STRUCT: struct type: pci_driver, struct name: starfire_driver **/ 3997 /* content: static int starfire_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)*/ 3998 /* LDV_COMMENT_BEGIN_PREP */ 3999 #define DRV_NAME "starfire" 4000 #define DRV_VERSION "2.1" 4001 #define DRV_RELDATE "July 6, 2008" 4002 #define HAS_BROKEN_FIRMWARE 4003 #ifdef HAS_BROKEN_FIRMWARE 4004 #define PADDING_MASK 3 4005 #endif 4006 #define ZEROCOPY 4007 #if IS_ENABLED(CONFIG_VLAN_8021Q) 4008 #define VLAN_SUPPORT 4009 #endif 4010 #define PKT_BUF_SZ 1536 4011 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4012 #else 4013 #endif 4014 #ifdef __sparc__ 4015 #define DMA_BURST_SIZE 64 4016 #else 4017 #define DMA_BURST_SIZE 128 4018 #endif 4019 #define RX_RING_SIZE 256 4020 #define TX_RING_SIZE 32 4021 #define DONE_Q_SIZE 1024 4022 #define QUEUE_ALIGN 256 4023 #if RX_RING_SIZE > 256 4024 #define RX_Q_ENTRIES Rx2048QEntries 4025 #else 4026 #define RX_Q_ENTRIES Rx256QEntries 4027 #endif 4028 #define TX_TIMEOUT (2 * HZ) 4029 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4030 #define ADDR_64BITS 4031 #define netdrv_addr_t __le64 4032 #define cpu_to_dma(x) cpu_to_le64(x) 4033 #define dma_to_cpu(x) le64_to_cpu(x) 4034 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4035 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4036 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4037 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4038 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4039 #else 4040 #define netdrv_addr_t __le32 4041 #define cpu_to_dma(x) cpu_to_le32(x) 4042 #define dma_to_cpu(x) le32_to_cpu(x) 4043 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4044 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4045 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4046 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4047 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 4048 #endif 4049 #define skb_first_frag_len(skb) skb_headlen(skb) 4050 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 4051 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 4052 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 4053 #ifdef VLAN_SUPPORT 4054 #define RxComplType RxComplType3 4055 #else 4056 #define RxComplType RxComplType2 4057 #endif 4058 #ifdef ADDR_64BITS 4059 #define TX_DESC_TYPE TxDescType2 4060 #else 4061 #define TX_DESC_TYPE TxDescType1 4062 #endif 4063 #define TX_DESC_SPACING TxDescSpaceUnlim 4064 #if 0 4065 #endif 4066 #define PHY_CNT 2 4067 #ifdef VLAN_SUPPORT 4068 #endif 4069 #ifdef VLAN_SUPPORT 4070 #endif 4071 #ifdef VLAN_SUPPORT 4072 #endif 4073 /* LDV_COMMENT_END_PREP */ 4074 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "starfire_init_one" */ 4075 struct pci_dev * var_group6; 4076 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "starfire_init_one" */ 4077 const struct pci_device_id * var_starfire_init_one_2_p1; 4078 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "starfire_init_one" */ 4079 static int res_starfire_init_one_2; 4080 /* LDV_COMMENT_BEGIN_PREP */ 4081 #ifdef VLAN_SUPPORT 4082 #endif 4083 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 4084 #endif 4085 #ifndef final_version 4086 #endif 4087 #ifdef VLAN_SUPPORT 4088 #endif 4089 #ifdef VLAN_SUPPORT 4090 #endif 4091 #ifdef VLAN_SUPPORT 4092 #endif 4093 #ifdef VLAN_SUPPORT 4094 #endif 4095 #ifdef CONFIG_PM 4096 #endif 4097 #ifdef CONFIG_PM 4098 #endif 4099 #ifdef MODULE 4100 #endif 4101 /* LDV_COMMENT_END_PREP */ 4102 /* content: static void starfire_remove_one(struct pci_dev *pdev)*/ 4103 /* LDV_COMMENT_BEGIN_PREP */ 4104 #define DRV_NAME "starfire" 4105 #define DRV_VERSION "2.1" 4106 #define DRV_RELDATE "July 6, 2008" 4107 #define HAS_BROKEN_FIRMWARE 4108 #ifdef HAS_BROKEN_FIRMWARE 4109 #define PADDING_MASK 3 4110 #endif 4111 #define ZEROCOPY 4112 #if IS_ENABLED(CONFIG_VLAN_8021Q) 4113 #define VLAN_SUPPORT 4114 #endif 4115 #define PKT_BUF_SZ 1536 4116 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4117 #else 4118 #endif 4119 #ifdef __sparc__ 4120 #define DMA_BURST_SIZE 64 4121 #else 4122 #define DMA_BURST_SIZE 128 4123 #endif 4124 #define RX_RING_SIZE 256 4125 #define TX_RING_SIZE 32 4126 #define DONE_Q_SIZE 1024 4127 #define QUEUE_ALIGN 256 4128 #if RX_RING_SIZE > 256 4129 #define RX_Q_ENTRIES Rx2048QEntries 4130 #else 4131 #define RX_Q_ENTRIES Rx256QEntries 4132 #endif 4133 #define TX_TIMEOUT (2 * HZ) 4134 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4135 #define ADDR_64BITS 4136 #define netdrv_addr_t __le64 4137 #define cpu_to_dma(x) cpu_to_le64(x) 4138 #define dma_to_cpu(x) le64_to_cpu(x) 4139 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4140 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4141 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4142 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4143 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4144 #else 4145 #define netdrv_addr_t __le32 4146 #define cpu_to_dma(x) cpu_to_le32(x) 4147 #define dma_to_cpu(x) le32_to_cpu(x) 4148 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4149 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4150 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4151 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4152 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 4153 #endif 4154 #define skb_first_frag_len(skb) skb_headlen(skb) 4155 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 4156 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 4157 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 4158 #ifdef VLAN_SUPPORT 4159 #define RxComplType RxComplType3 4160 #else 4161 #define RxComplType RxComplType2 4162 #endif 4163 #ifdef ADDR_64BITS 4164 #define TX_DESC_TYPE TxDescType2 4165 #else 4166 #define TX_DESC_TYPE TxDescType1 4167 #endif 4168 #define TX_DESC_SPACING TxDescSpaceUnlim 4169 #if 0 4170 #endif 4171 #define PHY_CNT 2 4172 #ifdef VLAN_SUPPORT 4173 #endif 4174 #ifdef VLAN_SUPPORT 4175 #endif 4176 #ifdef VLAN_SUPPORT 4177 #endif 4178 #ifndef MODULE 4179 #endif 4180 #ifdef ZEROCOPY 4181 #endif 4182 #ifdef VLAN_SUPPORT 4183 #endif 4184 #ifdef ADDR_64BITS 4185 #endif 4186 #if ! defined(final_version) 4187 #endif 4188 #ifdef VLAN_SUPPORT 4189 #endif 4190 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 4191 #endif 4192 #ifndef final_version 4193 #endif 4194 #ifdef VLAN_SUPPORT 4195 #endif 4196 #ifdef VLAN_SUPPORT 4197 #endif 4198 #ifdef VLAN_SUPPORT 4199 #endif 4200 #ifdef VLAN_SUPPORT 4201 #endif 4202 #ifdef CONFIG_PM 4203 #endif 4204 /* LDV_COMMENT_END_PREP */ 4205 /* LDV_COMMENT_BEGIN_PREP */ 4206 #ifdef CONFIG_PM 4207 #endif 4208 #ifdef MODULE 4209 #endif 4210 /* LDV_COMMENT_END_PREP */ 4211 /* content: static int starfire_suspend(struct pci_dev *pdev, pm_message_t state)*/ 4212 /* LDV_COMMENT_BEGIN_PREP */ 4213 #define DRV_NAME "starfire" 4214 #define DRV_VERSION "2.1" 4215 #define DRV_RELDATE "July 6, 2008" 4216 #define HAS_BROKEN_FIRMWARE 4217 #ifdef HAS_BROKEN_FIRMWARE 4218 #define PADDING_MASK 3 4219 #endif 4220 #define ZEROCOPY 4221 #if IS_ENABLED(CONFIG_VLAN_8021Q) 4222 #define VLAN_SUPPORT 4223 #endif 4224 #define PKT_BUF_SZ 1536 4225 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4226 #else 4227 #endif 4228 #ifdef __sparc__ 4229 #define DMA_BURST_SIZE 64 4230 #else 4231 #define DMA_BURST_SIZE 128 4232 #endif 4233 #define RX_RING_SIZE 256 4234 #define TX_RING_SIZE 32 4235 #define DONE_Q_SIZE 1024 4236 #define QUEUE_ALIGN 256 4237 #if RX_RING_SIZE > 256 4238 #define RX_Q_ENTRIES Rx2048QEntries 4239 #else 4240 #define RX_Q_ENTRIES Rx256QEntries 4241 #endif 4242 #define TX_TIMEOUT (2 * HZ) 4243 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4244 #define ADDR_64BITS 4245 #define netdrv_addr_t __le64 4246 #define cpu_to_dma(x) cpu_to_le64(x) 4247 #define dma_to_cpu(x) le64_to_cpu(x) 4248 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4249 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4250 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4251 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4252 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4253 #else 4254 #define netdrv_addr_t __le32 4255 #define cpu_to_dma(x) cpu_to_le32(x) 4256 #define dma_to_cpu(x) le32_to_cpu(x) 4257 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4258 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4259 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4260 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4261 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 4262 #endif 4263 #define skb_first_frag_len(skb) skb_headlen(skb) 4264 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 4265 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 4266 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 4267 #ifdef VLAN_SUPPORT 4268 #define RxComplType RxComplType3 4269 #else 4270 #define RxComplType RxComplType2 4271 #endif 4272 #ifdef ADDR_64BITS 4273 #define TX_DESC_TYPE TxDescType2 4274 #else 4275 #define TX_DESC_TYPE TxDescType1 4276 #endif 4277 #define TX_DESC_SPACING TxDescSpaceUnlim 4278 #if 0 4279 #endif 4280 #define PHY_CNT 2 4281 #ifdef VLAN_SUPPORT 4282 #endif 4283 #ifdef VLAN_SUPPORT 4284 #endif 4285 #ifdef VLAN_SUPPORT 4286 #endif 4287 #ifndef MODULE 4288 #endif 4289 #ifdef ZEROCOPY 4290 #endif 4291 #ifdef VLAN_SUPPORT 4292 #endif 4293 #ifdef ADDR_64BITS 4294 #endif 4295 #if ! defined(final_version) 4296 #endif 4297 #ifdef VLAN_SUPPORT 4298 #endif 4299 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 4300 #endif 4301 #ifndef final_version 4302 #endif 4303 #ifdef VLAN_SUPPORT 4304 #endif 4305 #ifdef VLAN_SUPPORT 4306 #endif 4307 #ifdef VLAN_SUPPORT 4308 #endif 4309 #ifdef VLAN_SUPPORT 4310 #endif 4311 #ifdef CONFIG_PM 4312 /* LDV_COMMENT_END_PREP */ 4313 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "starfire_suspend" */ 4314 pm_message_t var_starfire_suspend_29_p1; 4315 /* LDV_COMMENT_BEGIN_PREP */ 4316 #endif 4317 #ifdef CONFIG_PM 4318 #endif 4319 #ifdef MODULE 4320 #endif 4321 /* LDV_COMMENT_END_PREP */ 4322 /* content: static int starfire_resume(struct pci_dev *pdev)*/ 4323 /* LDV_COMMENT_BEGIN_PREP */ 4324 #define DRV_NAME "starfire" 4325 #define DRV_VERSION "2.1" 4326 #define DRV_RELDATE "July 6, 2008" 4327 #define HAS_BROKEN_FIRMWARE 4328 #ifdef HAS_BROKEN_FIRMWARE 4329 #define PADDING_MASK 3 4330 #endif 4331 #define ZEROCOPY 4332 #if IS_ENABLED(CONFIG_VLAN_8021Q) 4333 #define VLAN_SUPPORT 4334 #endif 4335 #define PKT_BUF_SZ 1536 4336 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4337 #else 4338 #endif 4339 #ifdef __sparc__ 4340 #define DMA_BURST_SIZE 64 4341 #else 4342 #define DMA_BURST_SIZE 128 4343 #endif 4344 #define RX_RING_SIZE 256 4345 #define TX_RING_SIZE 32 4346 #define DONE_Q_SIZE 1024 4347 #define QUEUE_ALIGN 256 4348 #if RX_RING_SIZE > 256 4349 #define RX_Q_ENTRIES Rx2048QEntries 4350 #else 4351 #define RX_Q_ENTRIES Rx256QEntries 4352 #endif 4353 #define TX_TIMEOUT (2 * HZ) 4354 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4355 #define ADDR_64BITS 4356 #define netdrv_addr_t __le64 4357 #define cpu_to_dma(x) cpu_to_le64(x) 4358 #define dma_to_cpu(x) le64_to_cpu(x) 4359 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4360 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4361 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4362 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4363 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4364 #else 4365 #define netdrv_addr_t __le32 4366 #define cpu_to_dma(x) cpu_to_le32(x) 4367 #define dma_to_cpu(x) le32_to_cpu(x) 4368 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4369 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4370 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4371 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4372 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 4373 #endif 4374 #define skb_first_frag_len(skb) skb_headlen(skb) 4375 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 4376 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 4377 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 4378 #ifdef VLAN_SUPPORT 4379 #define RxComplType RxComplType3 4380 #else 4381 #define RxComplType RxComplType2 4382 #endif 4383 #ifdef ADDR_64BITS 4384 #define TX_DESC_TYPE TxDescType2 4385 #else 4386 #define TX_DESC_TYPE TxDescType1 4387 #endif 4388 #define TX_DESC_SPACING TxDescSpaceUnlim 4389 #if 0 4390 #endif 4391 #define PHY_CNT 2 4392 #ifdef VLAN_SUPPORT 4393 #endif 4394 #ifdef VLAN_SUPPORT 4395 #endif 4396 #ifdef VLAN_SUPPORT 4397 #endif 4398 #ifndef MODULE 4399 #endif 4400 #ifdef ZEROCOPY 4401 #endif 4402 #ifdef VLAN_SUPPORT 4403 #endif 4404 #ifdef ADDR_64BITS 4405 #endif 4406 #if ! defined(final_version) 4407 #endif 4408 #ifdef VLAN_SUPPORT 4409 #endif 4410 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 4411 #endif 4412 #ifndef final_version 4413 #endif 4414 #ifdef VLAN_SUPPORT 4415 #endif 4416 #ifdef VLAN_SUPPORT 4417 #endif 4418 #ifdef VLAN_SUPPORT 4419 #endif 4420 #ifdef VLAN_SUPPORT 4421 #endif 4422 #ifdef CONFIG_PM 4423 /* LDV_COMMENT_END_PREP */ 4424 /* LDV_COMMENT_BEGIN_PREP */ 4425 #endif 4426 #ifdef CONFIG_PM 4427 #endif 4428 #ifdef MODULE 4429 #endif 4430 /* LDV_COMMENT_END_PREP */ 4431 4432 /** CALLBACK SECTION request_irq **/ 4433 /* content: static irqreturn_t intr_handler(int irq, void *dev_instance)*/ 4434 /* LDV_COMMENT_BEGIN_PREP */ 4435 #define DRV_NAME "starfire" 4436 #define DRV_VERSION "2.1" 4437 #define DRV_RELDATE "July 6, 2008" 4438 #define HAS_BROKEN_FIRMWARE 4439 #ifdef HAS_BROKEN_FIRMWARE 4440 #define PADDING_MASK 3 4441 #endif 4442 #define ZEROCOPY 4443 #if IS_ENABLED(CONFIG_VLAN_8021Q) 4444 #define VLAN_SUPPORT 4445 #endif 4446 #define PKT_BUF_SZ 1536 4447 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4448 #else 4449 #endif 4450 #ifdef __sparc__ 4451 #define DMA_BURST_SIZE 64 4452 #else 4453 #define DMA_BURST_SIZE 128 4454 #endif 4455 #define RX_RING_SIZE 256 4456 #define TX_RING_SIZE 32 4457 #define DONE_Q_SIZE 1024 4458 #define QUEUE_ALIGN 256 4459 #if RX_RING_SIZE > 256 4460 #define RX_Q_ENTRIES Rx2048QEntries 4461 #else 4462 #define RX_Q_ENTRIES Rx256QEntries 4463 #endif 4464 #define TX_TIMEOUT (2 * HZ) 4465 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4466 #define ADDR_64BITS 4467 #define netdrv_addr_t __le64 4468 #define cpu_to_dma(x) cpu_to_le64(x) 4469 #define dma_to_cpu(x) le64_to_cpu(x) 4470 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4471 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4472 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4473 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4474 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4475 #else 4476 #define netdrv_addr_t __le32 4477 #define cpu_to_dma(x) cpu_to_le32(x) 4478 #define dma_to_cpu(x) le32_to_cpu(x) 4479 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4480 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4481 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4482 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4483 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 4484 #endif 4485 #define skb_first_frag_len(skb) skb_headlen(skb) 4486 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 4487 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 4488 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 4489 #ifdef VLAN_SUPPORT 4490 #define RxComplType RxComplType3 4491 #else 4492 #define RxComplType RxComplType2 4493 #endif 4494 #ifdef ADDR_64BITS 4495 #define TX_DESC_TYPE TxDescType2 4496 #else 4497 #define TX_DESC_TYPE TxDescType1 4498 #endif 4499 #define TX_DESC_SPACING TxDescSpaceUnlim 4500 #if 0 4501 #endif 4502 #define PHY_CNT 2 4503 #ifdef VLAN_SUPPORT 4504 #endif 4505 #ifdef VLAN_SUPPORT 4506 #endif 4507 #ifdef VLAN_SUPPORT 4508 #endif 4509 #ifndef MODULE 4510 #endif 4511 #ifdef ZEROCOPY 4512 #endif 4513 #ifdef VLAN_SUPPORT 4514 #endif 4515 #ifdef ADDR_64BITS 4516 #endif 4517 #if ! defined(final_version) 4518 #endif 4519 #ifdef VLAN_SUPPORT 4520 #endif 4521 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 4522 #endif 4523 /* LDV_COMMENT_END_PREP */ 4524 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "intr_handler" */ 4525 int var_intr_handler_10_p0; 4526 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "intr_handler" */ 4527 void * var_intr_handler_10_p1; 4528 /* LDV_COMMENT_BEGIN_PREP */ 4529 #ifndef final_version 4530 #endif 4531 #ifdef VLAN_SUPPORT 4532 #endif 4533 #ifdef VLAN_SUPPORT 4534 #endif 4535 #ifdef VLAN_SUPPORT 4536 #endif 4537 #ifdef VLAN_SUPPORT 4538 #endif 4539 #ifdef CONFIG_PM 4540 #endif 4541 #ifdef CONFIG_PM 4542 #endif 4543 #ifdef MODULE 4544 #endif 4545 /* LDV_COMMENT_END_PREP */ 4546 4547 4548 4549 4550 /* LDV_COMMENT_END_VARIABLE_DECLARATION_PART */ 4551 /* LDV_COMMENT_BEGIN_VARIABLE_INITIALIZING_PART */ 4552 /*============================= VARIABLE INITIALIZING PART =============================*/ 4553 LDV_IN_INTERRUPT=1; 4554 4555 4556 4557 4558 /* LDV_COMMENT_END_VARIABLE_INITIALIZING_PART */ 4559 /* LDV_COMMENT_BEGIN_FUNCTION_CALL_SECTION */ 4560 /*============================= FUNCTION CALL SECTION =============================*/ 4561 /* LDV_COMMENT_FUNCTION_CALL Initialize LDV model. */ 4562 ldv_initialize(); 4563 4564 /** INIT: init_type: ST_MODULE_INIT **/ 4565 /* content: static int __init starfire_init (void)*/ 4566 /* LDV_COMMENT_BEGIN_PREP */ 4567 #define DRV_NAME "starfire" 4568 #define DRV_VERSION "2.1" 4569 #define DRV_RELDATE "July 6, 2008" 4570 #define HAS_BROKEN_FIRMWARE 4571 #ifdef HAS_BROKEN_FIRMWARE 4572 #define PADDING_MASK 3 4573 #endif 4574 #define ZEROCOPY 4575 #if IS_ENABLED(CONFIG_VLAN_8021Q) 4576 #define VLAN_SUPPORT 4577 #endif 4578 #define PKT_BUF_SZ 1536 4579 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4580 #else 4581 #endif 4582 #ifdef __sparc__ 4583 #define DMA_BURST_SIZE 64 4584 #else 4585 #define DMA_BURST_SIZE 128 4586 #endif 4587 #define RX_RING_SIZE 256 4588 #define TX_RING_SIZE 32 4589 #define DONE_Q_SIZE 1024 4590 #define QUEUE_ALIGN 256 4591 #if RX_RING_SIZE > 256 4592 #define RX_Q_ENTRIES Rx2048QEntries 4593 #else 4594 #define RX_Q_ENTRIES Rx256QEntries 4595 #endif 4596 #define TX_TIMEOUT (2 * HZ) 4597 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4598 #define ADDR_64BITS 4599 #define netdrv_addr_t __le64 4600 #define cpu_to_dma(x) cpu_to_le64(x) 4601 #define dma_to_cpu(x) le64_to_cpu(x) 4602 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4603 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4604 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4605 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4606 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4607 #else 4608 #define netdrv_addr_t __le32 4609 #define cpu_to_dma(x) cpu_to_le32(x) 4610 #define dma_to_cpu(x) le32_to_cpu(x) 4611 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4612 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4613 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4614 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4615 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 4616 #endif 4617 #define skb_first_frag_len(skb) skb_headlen(skb) 4618 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 4619 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 4620 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 4621 #ifdef VLAN_SUPPORT 4622 #define RxComplType RxComplType3 4623 #else 4624 #define RxComplType RxComplType2 4625 #endif 4626 #ifdef ADDR_64BITS 4627 #define TX_DESC_TYPE TxDescType2 4628 #else 4629 #define TX_DESC_TYPE TxDescType1 4630 #endif 4631 #define TX_DESC_SPACING TxDescSpaceUnlim 4632 #if 0 4633 #endif 4634 #define PHY_CNT 2 4635 #ifdef VLAN_SUPPORT 4636 #endif 4637 #ifdef VLAN_SUPPORT 4638 #endif 4639 #ifdef VLAN_SUPPORT 4640 #endif 4641 #ifndef MODULE 4642 #endif 4643 #ifdef ZEROCOPY 4644 #endif 4645 #ifdef VLAN_SUPPORT 4646 #endif 4647 #ifdef ADDR_64BITS 4648 #endif 4649 #if ! defined(final_version) 4650 #endif 4651 #ifdef VLAN_SUPPORT 4652 #endif 4653 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 4654 #endif 4655 #ifndef final_version 4656 #endif 4657 #ifdef VLAN_SUPPORT 4658 #endif 4659 #ifdef VLAN_SUPPORT 4660 #endif 4661 #ifdef VLAN_SUPPORT 4662 #endif 4663 #ifdef VLAN_SUPPORT 4664 #endif 4665 #ifdef CONFIG_PM 4666 #endif 4667 #ifdef CONFIG_PM 4668 #endif 4669 /* LDV_COMMENT_END_PREP */ 4670 /* LDV_COMMENT_FUNCTION_CALL Kernel calls driver init function after driver loading to kernel. This function declared as "MODULE_INIT(function name)". */ 4671 ldv_handler_precall(); 4672 if(starfire_init()) 4673 goto ldv_final; 4674 int ldv_s_netdev_ops_net_device_ops = 0; 4675 4676 4677 4678 4679 int ldv_s_starfire_driver_pci_driver = 0; 4680 4681 4682 4683 4684 4685 while( nondet_int() 4686 || !(ldv_s_netdev_ops_net_device_ops == 0) 4687 || !(ldv_s_starfire_driver_pci_driver == 0) 4688 ) { 4689 4690 switch(nondet_int()) { 4691 4692 case 0: { 4693 4694 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 4695 if(ldv_s_netdev_ops_net_device_ops==0) { 4696 4697 /* content: static int netdev_open(struct net_device *dev)*/ 4698 /* LDV_COMMENT_BEGIN_PREP */ 4699 #define DRV_NAME "starfire" 4700 #define DRV_VERSION "2.1" 4701 #define DRV_RELDATE "July 6, 2008" 4702 #define HAS_BROKEN_FIRMWARE 4703 #ifdef HAS_BROKEN_FIRMWARE 4704 #define PADDING_MASK 3 4705 #endif 4706 #define ZEROCOPY 4707 #if IS_ENABLED(CONFIG_VLAN_8021Q) 4708 #define VLAN_SUPPORT 4709 #endif 4710 #define PKT_BUF_SZ 1536 4711 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4712 #else 4713 #endif 4714 #ifdef __sparc__ 4715 #define DMA_BURST_SIZE 64 4716 #else 4717 #define DMA_BURST_SIZE 128 4718 #endif 4719 #define RX_RING_SIZE 256 4720 #define TX_RING_SIZE 32 4721 #define DONE_Q_SIZE 1024 4722 #define QUEUE_ALIGN 256 4723 #if RX_RING_SIZE > 256 4724 #define RX_Q_ENTRIES Rx2048QEntries 4725 #else 4726 #define RX_Q_ENTRIES Rx256QEntries 4727 #endif 4728 #define TX_TIMEOUT (2 * HZ) 4729 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4730 #define ADDR_64BITS 4731 #define netdrv_addr_t __le64 4732 #define cpu_to_dma(x) cpu_to_le64(x) 4733 #define dma_to_cpu(x) le64_to_cpu(x) 4734 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4735 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4736 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4737 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4738 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4739 #else 4740 #define netdrv_addr_t __le32 4741 #define cpu_to_dma(x) cpu_to_le32(x) 4742 #define dma_to_cpu(x) le32_to_cpu(x) 4743 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4744 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4745 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4746 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4747 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 4748 #endif 4749 #define skb_first_frag_len(skb) skb_headlen(skb) 4750 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 4751 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 4752 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 4753 #ifdef VLAN_SUPPORT 4754 #define RxComplType RxComplType3 4755 #else 4756 #define RxComplType RxComplType2 4757 #endif 4758 #ifdef ADDR_64BITS 4759 #define TX_DESC_TYPE TxDescType2 4760 #else 4761 #define TX_DESC_TYPE TxDescType1 4762 #endif 4763 #define TX_DESC_SPACING TxDescSpaceUnlim 4764 #if 0 4765 #endif 4766 #define PHY_CNT 2 4767 #ifdef VLAN_SUPPORT 4768 #endif 4769 #ifdef VLAN_SUPPORT 4770 #endif 4771 #ifdef VLAN_SUPPORT 4772 #endif 4773 #ifndef MODULE 4774 #endif 4775 #ifdef ZEROCOPY 4776 #endif 4777 #ifdef VLAN_SUPPORT 4778 #endif 4779 #ifdef ADDR_64BITS 4780 #endif 4781 #if ! defined(final_version) 4782 #endif 4783 /* LDV_COMMENT_END_PREP */ 4784 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_open" from driver structure with callbacks "netdev_ops". Standart function test for correct return result. */ 4785 ldv_handler_precall(); 4786 res_netdev_open_5 = netdev_open( var_group1); 4787 ldv_check_return_value(res_netdev_open_5); 4788 if(res_netdev_open_5 < 0) 4789 goto ldv_module_exit; 4790 /* LDV_COMMENT_BEGIN_PREP */ 4791 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 4792 #endif 4793 #ifndef final_version 4794 #endif 4795 #ifdef VLAN_SUPPORT 4796 #endif 4797 #ifdef VLAN_SUPPORT 4798 #endif 4799 #ifdef VLAN_SUPPORT 4800 #endif 4801 #ifdef VLAN_SUPPORT 4802 #endif 4803 #ifdef CONFIG_PM 4804 #endif 4805 #ifdef CONFIG_PM 4806 #endif 4807 #ifdef MODULE 4808 #endif 4809 /* LDV_COMMENT_END_PREP */ 4810 ldv_s_netdev_ops_net_device_ops++; 4811 4812 } 4813 4814 } 4815 4816 break; 4817 case 1: { 4818 4819 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 4820 if(ldv_s_netdev_ops_net_device_ops==1) { 4821 4822 /* content: static int netdev_close(struct net_device *dev)*/ 4823 /* LDV_COMMENT_BEGIN_PREP */ 4824 #define DRV_NAME "starfire" 4825 #define DRV_VERSION "2.1" 4826 #define DRV_RELDATE "July 6, 2008" 4827 #define HAS_BROKEN_FIRMWARE 4828 #ifdef HAS_BROKEN_FIRMWARE 4829 #define PADDING_MASK 3 4830 #endif 4831 #define ZEROCOPY 4832 #if IS_ENABLED(CONFIG_VLAN_8021Q) 4833 #define VLAN_SUPPORT 4834 #endif 4835 #define PKT_BUF_SZ 1536 4836 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4837 #else 4838 #endif 4839 #ifdef __sparc__ 4840 #define DMA_BURST_SIZE 64 4841 #else 4842 #define DMA_BURST_SIZE 128 4843 #endif 4844 #define RX_RING_SIZE 256 4845 #define TX_RING_SIZE 32 4846 #define DONE_Q_SIZE 1024 4847 #define QUEUE_ALIGN 256 4848 #if RX_RING_SIZE > 256 4849 #define RX_Q_ENTRIES Rx2048QEntries 4850 #else 4851 #define RX_Q_ENTRIES Rx256QEntries 4852 #endif 4853 #define TX_TIMEOUT (2 * HZ) 4854 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4855 #define ADDR_64BITS 4856 #define netdrv_addr_t __le64 4857 #define cpu_to_dma(x) cpu_to_le64(x) 4858 #define dma_to_cpu(x) le64_to_cpu(x) 4859 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4860 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4861 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4862 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4863 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4864 #else 4865 #define netdrv_addr_t __le32 4866 #define cpu_to_dma(x) cpu_to_le32(x) 4867 #define dma_to_cpu(x) le32_to_cpu(x) 4868 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4869 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4870 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4871 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4872 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 4873 #endif 4874 #define skb_first_frag_len(skb) skb_headlen(skb) 4875 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 4876 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 4877 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 4878 #ifdef VLAN_SUPPORT 4879 #define RxComplType RxComplType3 4880 #else 4881 #define RxComplType RxComplType2 4882 #endif 4883 #ifdef ADDR_64BITS 4884 #define TX_DESC_TYPE TxDescType2 4885 #else 4886 #define TX_DESC_TYPE TxDescType1 4887 #endif 4888 #define TX_DESC_SPACING TxDescSpaceUnlim 4889 #if 0 4890 #endif 4891 #define PHY_CNT 2 4892 #ifdef VLAN_SUPPORT 4893 #endif 4894 #ifdef VLAN_SUPPORT 4895 #endif 4896 #ifdef VLAN_SUPPORT 4897 #endif 4898 #ifndef MODULE 4899 #endif 4900 #ifdef ZEROCOPY 4901 #endif 4902 #ifdef VLAN_SUPPORT 4903 #endif 4904 #ifdef ADDR_64BITS 4905 #endif 4906 #if ! defined(final_version) 4907 #endif 4908 #ifdef VLAN_SUPPORT 4909 #endif 4910 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 4911 #endif 4912 #ifndef final_version 4913 #endif 4914 #ifdef VLAN_SUPPORT 4915 #endif 4916 #ifdef VLAN_SUPPORT 4917 #endif 4918 #ifdef VLAN_SUPPORT 4919 #endif 4920 #ifdef VLAN_SUPPORT 4921 #endif 4922 /* LDV_COMMENT_END_PREP */ 4923 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_stop" from driver structure with callbacks "netdev_ops". Standart function test for correct return result. */ 4924 ldv_handler_precall(); 4925 res_netdev_close_28 = netdev_close( var_group1); 4926 ldv_check_return_value(res_netdev_close_28); 4927 if(res_netdev_close_28) 4928 goto ldv_module_exit; 4929 /* LDV_COMMENT_BEGIN_PREP */ 4930 #ifdef CONFIG_PM 4931 #endif 4932 #ifdef CONFIG_PM 4933 #endif 4934 #ifdef MODULE 4935 #endif 4936 /* LDV_COMMENT_END_PREP */ 4937 ldv_s_netdev_ops_net_device_ops=0; 4938 4939 } 4940 4941 } 4942 4943 break; 4944 case 2: { 4945 4946 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 4947 4948 4949 /* content: static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev)*/ 4950 /* LDV_COMMENT_BEGIN_PREP */ 4951 #define DRV_NAME "starfire" 4952 #define DRV_VERSION "2.1" 4953 #define DRV_RELDATE "July 6, 2008" 4954 #define HAS_BROKEN_FIRMWARE 4955 #ifdef HAS_BROKEN_FIRMWARE 4956 #define PADDING_MASK 3 4957 #endif 4958 #define ZEROCOPY 4959 #if IS_ENABLED(CONFIG_VLAN_8021Q) 4960 #define VLAN_SUPPORT 4961 #endif 4962 #define PKT_BUF_SZ 1536 4963 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 4964 #else 4965 #endif 4966 #ifdef __sparc__ 4967 #define DMA_BURST_SIZE 64 4968 #else 4969 #define DMA_BURST_SIZE 128 4970 #endif 4971 #define RX_RING_SIZE 256 4972 #define TX_RING_SIZE 32 4973 #define DONE_Q_SIZE 1024 4974 #define QUEUE_ALIGN 256 4975 #if RX_RING_SIZE > 256 4976 #define RX_Q_ENTRIES Rx2048QEntries 4977 #else 4978 #define RX_Q_ENTRIES Rx256QEntries 4979 #endif 4980 #define TX_TIMEOUT (2 * HZ) 4981 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 4982 #define ADDR_64BITS 4983 #define netdrv_addr_t __le64 4984 #define cpu_to_dma(x) cpu_to_le64(x) 4985 #define dma_to_cpu(x) le64_to_cpu(x) 4986 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 4987 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 4988 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 4989 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 4990 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 4991 #else 4992 #define netdrv_addr_t __le32 4993 #define cpu_to_dma(x) cpu_to_le32(x) 4994 #define dma_to_cpu(x) le32_to_cpu(x) 4995 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 4996 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 4997 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 4998 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 4999 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 5000 #endif 5001 #define skb_first_frag_len(skb) skb_headlen(skb) 5002 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 5003 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 5004 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 5005 #ifdef VLAN_SUPPORT 5006 #define RxComplType RxComplType3 5007 #else 5008 #define RxComplType RxComplType2 5009 #endif 5010 #ifdef ADDR_64BITS 5011 #define TX_DESC_TYPE TxDescType2 5012 #else 5013 #define TX_DESC_TYPE TxDescType1 5014 #endif 5015 #define TX_DESC_SPACING TxDescSpaceUnlim 5016 #if 0 5017 #endif 5018 #define PHY_CNT 2 5019 #ifdef VLAN_SUPPORT 5020 #endif 5021 #ifdef VLAN_SUPPORT 5022 #endif 5023 #ifdef VLAN_SUPPORT 5024 #endif 5025 #ifndef MODULE 5026 #endif 5027 #ifdef ZEROCOPY 5028 #endif 5029 #ifdef VLAN_SUPPORT 5030 #endif 5031 #ifdef ADDR_64BITS 5032 #endif 5033 #if ! defined(final_version) 5034 #endif 5035 #ifdef VLAN_SUPPORT 5036 #endif 5037 /* LDV_COMMENT_END_PREP */ 5038 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_start_xmit" from driver structure with callbacks "netdev_ops" */ 5039 ldv_handler_precall(); 5040 start_tx( var_group2, var_group1); 5041 /* LDV_COMMENT_BEGIN_PREP */ 5042 #ifndef final_version 5043 #endif 5044 #ifdef VLAN_SUPPORT 5045 #endif 5046 #ifdef VLAN_SUPPORT 5047 #endif 5048 #ifdef VLAN_SUPPORT 5049 #endif 5050 #ifdef VLAN_SUPPORT 5051 #endif 5052 #ifdef CONFIG_PM 5053 #endif 5054 #ifdef CONFIG_PM 5055 #endif 5056 #ifdef MODULE 5057 #endif 5058 /* LDV_COMMENT_END_PREP */ 5059 5060 5061 5062 5063 } 5064 5065 break; 5066 case 3: { 5067 5068 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 5069 5070 5071 /* content: static void tx_timeout(struct net_device *dev)*/ 5072 /* LDV_COMMENT_BEGIN_PREP */ 5073 #define DRV_NAME "starfire" 5074 #define DRV_VERSION "2.1" 5075 #define DRV_RELDATE "July 6, 2008" 5076 #define HAS_BROKEN_FIRMWARE 5077 #ifdef HAS_BROKEN_FIRMWARE 5078 #define PADDING_MASK 3 5079 #endif 5080 #define ZEROCOPY 5081 #if IS_ENABLED(CONFIG_VLAN_8021Q) 5082 #define VLAN_SUPPORT 5083 #endif 5084 #define PKT_BUF_SZ 1536 5085 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 5086 #else 5087 #endif 5088 #ifdef __sparc__ 5089 #define DMA_BURST_SIZE 64 5090 #else 5091 #define DMA_BURST_SIZE 128 5092 #endif 5093 #define RX_RING_SIZE 256 5094 #define TX_RING_SIZE 32 5095 #define DONE_Q_SIZE 1024 5096 #define QUEUE_ALIGN 256 5097 #if RX_RING_SIZE > 256 5098 #define RX_Q_ENTRIES Rx2048QEntries 5099 #else 5100 #define RX_Q_ENTRIES Rx256QEntries 5101 #endif 5102 #define TX_TIMEOUT (2 * HZ) 5103 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 5104 #define ADDR_64BITS 5105 #define netdrv_addr_t __le64 5106 #define cpu_to_dma(x) cpu_to_le64(x) 5107 #define dma_to_cpu(x) le64_to_cpu(x) 5108 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 5109 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 5110 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 5111 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 5112 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 5113 #else 5114 #define netdrv_addr_t __le32 5115 #define cpu_to_dma(x) cpu_to_le32(x) 5116 #define dma_to_cpu(x) le32_to_cpu(x) 5117 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 5118 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 5119 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 5120 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 5121 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 5122 #endif 5123 #define skb_first_frag_len(skb) skb_headlen(skb) 5124 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 5125 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 5126 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 5127 #ifdef VLAN_SUPPORT 5128 #define RxComplType RxComplType3 5129 #else 5130 #define RxComplType RxComplType2 5131 #endif 5132 #ifdef ADDR_64BITS 5133 #define TX_DESC_TYPE TxDescType2 5134 #else 5135 #define TX_DESC_TYPE TxDescType1 5136 #endif 5137 #define TX_DESC_SPACING TxDescSpaceUnlim 5138 #if 0 5139 #endif 5140 #define PHY_CNT 2 5141 #ifdef VLAN_SUPPORT 5142 #endif 5143 #ifdef VLAN_SUPPORT 5144 #endif 5145 #ifdef VLAN_SUPPORT 5146 #endif 5147 #ifndef MODULE 5148 #endif 5149 #ifdef ZEROCOPY 5150 #endif 5151 #ifdef VLAN_SUPPORT 5152 #endif 5153 #ifdef ADDR_64BITS 5154 #endif 5155 #if ! defined(final_version) 5156 #endif 5157 #ifdef VLAN_SUPPORT 5158 #endif 5159 /* LDV_COMMENT_END_PREP */ 5160 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_tx_timeout" from driver structure with callbacks "netdev_ops" */ 5161 ldv_handler_precall(); 5162 tx_timeout( var_group1); 5163 /* LDV_COMMENT_BEGIN_PREP */ 5164 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 5165 #endif 5166 #ifndef final_version 5167 #endif 5168 #ifdef VLAN_SUPPORT 5169 #endif 5170 #ifdef VLAN_SUPPORT 5171 #endif 5172 #ifdef VLAN_SUPPORT 5173 #endif 5174 #ifdef VLAN_SUPPORT 5175 #endif 5176 #ifdef CONFIG_PM 5177 #endif 5178 #ifdef CONFIG_PM 5179 #endif 5180 #ifdef MODULE 5181 #endif 5182 /* LDV_COMMENT_END_PREP */ 5183 5184 5185 5186 5187 } 5188 5189 break; 5190 case 4: { 5191 5192 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 5193 5194 5195 /* content: static struct net_device_stats *get_stats(struct net_device *dev)*/ 5196 /* LDV_COMMENT_BEGIN_PREP */ 5197 #define DRV_NAME "starfire" 5198 #define DRV_VERSION "2.1" 5199 #define DRV_RELDATE "July 6, 2008" 5200 #define HAS_BROKEN_FIRMWARE 5201 #ifdef HAS_BROKEN_FIRMWARE 5202 #define PADDING_MASK 3 5203 #endif 5204 #define ZEROCOPY 5205 #if IS_ENABLED(CONFIG_VLAN_8021Q) 5206 #define VLAN_SUPPORT 5207 #endif 5208 #define PKT_BUF_SZ 1536 5209 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 5210 #else 5211 #endif 5212 #ifdef __sparc__ 5213 #define DMA_BURST_SIZE 64 5214 #else 5215 #define DMA_BURST_SIZE 128 5216 #endif 5217 #define RX_RING_SIZE 256 5218 #define TX_RING_SIZE 32 5219 #define DONE_Q_SIZE 1024 5220 #define QUEUE_ALIGN 256 5221 #if RX_RING_SIZE > 256 5222 #define RX_Q_ENTRIES Rx2048QEntries 5223 #else 5224 #define RX_Q_ENTRIES Rx256QEntries 5225 #endif 5226 #define TX_TIMEOUT (2 * HZ) 5227 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 5228 #define ADDR_64BITS 5229 #define netdrv_addr_t __le64 5230 #define cpu_to_dma(x) cpu_to_le64(x) 5231 #define dma_to_cpu(x) le64_to_cpu(x) 5232 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 5233 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 5234 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 5235 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 5236 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 5237 #else 5238 #define netdrv_addr_t __le32 5239 #define cpu_to_dma(x) cpu_to_le32(x) 5240 #define dma_to_cpu(x) le32_to_cpu(x) 5241 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 5242 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 5243 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 5244 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 5245 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 5246 #endif 5247 #define skb_first_frag_len(skb) skb_headlen(skb) 5248 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 5249 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 5250 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 5251 #ifdef VLAN_SUPPORT 5252 #define RxComplType RxComplType3 5253 #else 5254 #define RxComplType RxComplType2 5255 #endif 5256 #ifdef ADDR_64BITS 5257 #define TX_DESC_TYPE TxDescType2 5258 #else 5259 #define TX_DESC_TYPE TxDescType1 5260 #endif 5261 #define TX_DESC_SPACING TxDescSpaceUnlim 5262 #if 0 5263 #endif 5264 #define PHY_CNT 2 5265 #ifdef VLAN_SUPPORT 5266 #endif 5267 #ifdef VLAN_SUPPORT 5268 #endif 5269 #ifdef VLAN_SUPPORT 5270 #endif 5271 #ifndef MODULE 5272 #endif 5273 #ifdef ZEROCOPY 5274 #endif 5275 #ifdef VLAN_SUPPORT 5276 #endif 5277 #ifdef ADDR_64BITS 5278 #endif 5279 #if ! defined(final_version) 5280 #endif 5281 #ifdef VLAN_SUPPORT 5282 #endif 5283 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 5284 #endif 5285 #ifndef final_version 5286 #endif 5287 #ifdef VLAN_SUPPORT 5288 #endif 5289 #ifdef VLAN_SUPPORT 5290 #endif 5291 /* LDV_COMMENT_END_PREP */ 5292 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_get_stats" from driver structure with callbacks "netdev_ops" */ 5293 ldv_handler_precall(); 5294 get_stats( var_group1); 5295 /* LDV_COMMENT_BEGIN_PREP */ 5296 #ifdef VLAN_SUPPORT 5297 #endif 5298 #ifdef VLAN_SUPPORT 5299 #endif 5300 #ifdef CONFIG_PM 5301 #endif 5302 #ifdef CONFIG_PM 5303 #endif 5304 #ifdef MODULE 5305 #endif 5306 /* LDV_COMMENT_END_PREP */ 5307 5308 5309 5310 5311 } 5312 5313 break; 5314 case 5: { 5315 5316 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 5317 5318 5319 /* content: static void set_rx_mode(struct net_device *dev)*/ 5320 /* LDV_COMMENT_BEGIN_PREP */ 5321 #define DRV_NAME "starfire" 5322 #define DRV_VERSION "2.1" 5323 #define DRV_RELDATE "July 6, 2008" 5324 #define HAS_BROKEN_FIRMWARE 5325 #ifdef HAS_BROKEN_FIRMWARE 5326 #define PADDING_MASK 3 5327 #endif 5328 #define ZEROCOPY 5329 #if IS_ENABLED(CONFIG_VLAN_8021Q) 5330 #define VLAN_SUPPORT 5331 #endif 5332 #define PKT_BUF_SZ 1536 5333 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 5334 #else 5335 #endif 5336 #ifdef __sparc__ 5337 #define DMA_BURST_SIZE 64 5338 #else 5339 #define DMA_BURST_SIZE 128 5340 #endif 5341 #define RX_RING_SIZE 256 5342 #define TX_RING_SIZE 32 5343 #define DONE_Q_SIZE 1024 5344 #define QUEUE_ALIGN 256 5345 #if RX_RING_SIZE > 256 5346 #define RX_Q_ENTRIES Rx2048QEntries 5347 #else 5348 #define RX_Q_ENTRIES Rx256QEntries 5349 #endif 5350 #define TX_TIMEOUT (2 * HZ) 5351 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 5352 #define ADDR_64BITS 5353 #define netdrv_addr_t __le64 5354 #define cpu_to_dma(x) cpu_to_le64(x) 5355 #define dma_to_cpu(x) le64_to_cpu(x) 5356 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 5357 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 5358 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 5359 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 5360 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 5361 #else 5362 #define netdrv_addr_t __le32 5363 #define cpu_to_dma(x) cpu_to_le32(x) 5364 #define dma_to_cpu(x) le32_to_cpu(x) 5365 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 5366 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 5367 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 5368 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 5369 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 5370 #endif 5371 #define skb_first_frag_len(skb) skb_headlen(skb) 5372 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 5373 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 5374 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 5375 #ifdef VLAN_SUPPORT 5376 #define RxComplType RxComplType3 5377 #else 5378 #define RxComplType RxComplType2 5379 #endif 5380 #ifdef ADDR_64BITS 5381 #define TX_DESC_TYPE TxDescType2 5382 #else 5383 #define TX_DESC_TYPE TxDescType1 5384 #endif 5385 #define TX_DESC_SPACING TxDescSpaceUnlim 5386 #if 0 5387 #endif 5388 #define PHY_CNT 2 5389 #ifdef VLAN_SUPPORT 5390 #endif 5391 #ifdef VLAN_SUPPORT 5392 #endif 5393 #ifdef VLAN_SUPPORT 5394 #endif 5395 #ifndef MODULE 5396 #endif 5397 #ifdef ZEROCOPY 5398 #endif 5399 #ifdef VLAN_SUPPORT 5400 #endif 5401 #ifdef ADDR_64BITS 5402 #endif 5403 #if ! defined(final_version) 5404 #endif 5405 #ifdef VLAN_SUPPORT 5406 #endif 5407 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 5408 #endif 5409 #ifndef final_version 5410 #endif 5411 #ifdef VLAN_SUPPORT 5412 #endif 5413 #ifdef VLAN_SUPPORT 5414 #endif 5415 #ifdef VLAN_SUPPORT 5416 #endif 5417 /* LDV_COMMENT_END_PREP */ 5418 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_set_rx_mode" from driver structure with callbacks "netdev_ops" */ 5419 ldv_handler_precall(); 5420 set_rx_mode( var_group1); 5421 /* LDV_COMMENT_BEGIN_PREP */ 5422 #ifdef CONFIG_PM 5423 #endif 5424 #ifdef CONFIG_PM 5425 #endif 5426 #ifdef MODULE 5427 #endif 5428 /* LDV_COMMENT_END_PREP */ 5429 5430 5431 5432 5433 } 5434 5435 break; 5436 case 6: { 5437 5438 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 5439 5440 5441 /* content: static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)*/ 5442 /* LDV_COMMENT_BEGIN_PREP */ 5443 #define DRV_NAME "starfire" 5444 #define DRV_VERSION "2.1" 5445 #define DRV_RELDATE "July 6, 2008" 5446 #define HAS_BROKEN_FIRMWARE 5447 #ifdef HAS_BROKEN_FIRMWARE 5448 #define PADDING_MASK 3 5449 #endif 5450 #define ZEROCOPY 5451 #if IS_ENABLED(CONFIG_VLAN_8021Q) 5452 #define VLAN_SUPPORT 5453 #endif 5454 #define PKT_BUF_SZ 1536 5455 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 5456 #else 5457 #endif 5458 #ifdef __sparc__ 5459 #define DMA_BURST_SIZE 64 5460 #else 5461 #define DMA_BURST_SIZE 128 5462 #endif 5463 #define RX_RING_SIZE 256 5464 #define TX_RING_SIZE 32 5465 #define DONE_Q_SIZE 1024 5466 #define QUEUE_ALIGN 256 5467 #if RX_RING_SIZE > 256 5468 #define RX_Q_ENTRIES Rx2048QEntries 5469 #else 5470 #define RX_Q_ENTRIES Rx256QEntries 5471 #endif 5472 #define TX_TIMEOUT (2 * HZ) 5473 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 5474 #define ADDR_64BITS 5475 #define netdrv_addr_t __le64 5476 #define cpu_to_dma(x) cpu_to_le64(x) 5477 #define dma_to_cpu(x) le64_to_cpu(x) 5478 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 5479 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 5480 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 5481 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 5482 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 5483 #else 5484 #define netdrv_addr_t __le32 5485 #define cpu_to_dma(x) cpu_to_le32(x) 5486 #define dma_to_cpu(x) le32_to_cpu(x) 5487 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 5488 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 5489 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 5490 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 5491 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 5492 #endif 5493 #define skb_first_frag_len(skb) skb_headlen(skb) 5494 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 5495 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 5496 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 5497 #ifdef VLAN_SUPPORT 5498 #define RxComplType RxComplType3 5499 #else 5500 #define RxComplType RxComplType2 5501 #endif 5502 #ifdef ADDR_64BITS 5503 #define TX_DESC_TYPE TxDescType2 5504 #else 5505 #define TX_DESC_TYPE TxDescType1 5506 #endif 5507 #define TX_DESC_SPACING TxDescSpaceUnlim 5508 #if 0 5509 #endif 5510 #define PHY_CNT 2 5511 #ifdef VLAN_SUPPORT 5512 #endif 5513 #ifdef VLAN_SUPPORT 5514 #endif 5515 #ifdef VLAN_SUPPORT 5516 #endif 5517 #ifndef MODULE 5518 #endif 5519 #ifdef ZEROCOPY 5520 #endif 5521 #ifdef VLAN_SUPPORT 5522 #endif 5523 #ifdef ADDR_64BITS 5524 #endif 5525 #if ! defined(final_version) 5526 #endif 5527 #ifdef VLAN_SUPPORT 5528 #endif 5529 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 5530 #endif 5531 #ifndef final_version 5532 #endif 5533 #ifdef VLAN_SUPPORT 5534 #endif 5535 #ifdef VLAN_SUPPORT 5536 #endif 5537 #ifdef VLAN_SUPPORT 5538 #endif 5539 #ifdef VLAN_SUPPORT 5540 #endif 5541 /* LDV_COMMENT_END_PREP */ 5542 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_do_ioctl" from driver structure with callbacks "netdev_ops" */ 5543 ldv_handler_precall(); 5544 netdev_ioctl( var_group1, var_group3, var_netdev_ioctl_27_p2); 5545 /* LDV_COMMENT_BEGIN_PREP */ 5546 #ifdef CONFIG_PM 5547 #endif 5548 #ifdef CONFIG_PM 5549 #endif 5550 #ifdef MODULE 5551 #endif 5552 /* LDV_COMMENT_END_PREP */ 5553 5554 5555 5556 5557 } 5558 5559 break; 5560 case 7: { 5561 5562 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 5563 5564 5565 /* content: static int netdev_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid)*/ 5566 /* LDV_COMMENT_BEGIN_PREP */ 5567 #define DRV_NAME "starfire" 5568 #define DRV_VERSION "2.1" 5569 #define DRV_RELDATE "July 6, 2008" 5570 #define HAS_BROKEN_FIRMWARE 5571 #ifdef HAS_BROKEN_FIRMWARE 5572 #define PADDING_MASK 3 5573 #endif 5574 #define ZEROCOPY 5575 #if IS_ENABLED(CONFIG_VLAN_8021Q) 5576 #define VLAN_SUPPORT 5577 #endif 5578 #define PKT_BUF_SZ 1536 5579 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 5580 #else 5581 #endif 5582 #ifdef __sparc__ 5583 #define DMA_BURST_SIZE 64 5584 #else 5585 #define DMA_BURST_SIZE 128 5586 #endif 5587 #define RX_RING_SIZE 256 5588 #define TX_RING_SIZE 32 5589 #define DONE_Q_SIZE 1024 5590 #define QUEUE_ALIGN 256 5591 #if RX_RING_SIZE > 256 5592 #define RX_Q_ENTRIES Rx2048QEntries 5593 #else 5594 #define RX_Q_ENTRIES Rx256QEntries 5595 #endif 5596 #define TX_TIMEOUT (2 * HZ) 5597 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 5598 #define ADDR_64BITS 5599 #define netdrv_addr_t __le64 5600 #define cpu_to_dma(x) cpu_to_le64(x) 5601 #define dma_to_cpu(x) le64_to_cpu(x) 5602 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 5603 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 5604 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 5605 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 5606 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 5607 #else 5608 #define netdrv_addr_t __le32 5609 #define cpu_to_dma(x) cpu_to_le32(x) 5610 #define dma_to_cpu(x) le32_to_cpu(x) 5611 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 5612 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 5613 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 5614 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 5615 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 5616 #endif 5617 #define skb_first_frag_len(skb) skb_headlen(skb) 5618 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 5619 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 5620 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 5621 #ifdef VLAN_SUPPORT 5622 #define RxComplType RxComplType3 5623 #else 5624 #define RxComplType RxComplType2 5625 #endif 5626 #ifdef ADDR_64BITS 5627 #define TX_DESC_TYPE TxDescType2 5628 #else 5629 #define TX_DESC_TYPE TxDescType1 5630 #endif 5631 #define TX_DESC_SPACING TxDescSpaceUnlim 5632 #if 0 5633 #endif 5634 #define PHY_CNT 2 5635 #ifdef VLAN_SUPPORT 5636 #endif 5637 #ifdef VLAN_SUPPORT 5638 /* LDV_COMMENT_END_PREP */ 5639 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_vlan_rx_add_vid" from driver structure with callbacks "netdev_ops" */ 5640 ldv_handler_precall(); 5641 netdev_vlan_rx_add_vid( var_group1, var_netdev_vlan_rx_add_vid_0_p1, var_netdev_vlan_rx_add_vid_0_p2); 5642 /* LDV_COMMENT_BEGIN_PREP */ 5643 #endif 5644 #ifdef VLAN_SUPPORT 5645 #endif 5646 #ifndef MODULE 5647 #endif 5648 #ifdef ZEROCOPY 5649 #endif 5650 #ifdef VLAN_SUPPORT 5651 #endif 5652 #ifdef ADDR_64BITS 5653 #endif 5654 #if ! defined(final_version) 5655 #endif 5656 #ifdef VLAN_SUPPORT 5657 #endif 5658 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 5659 #endif 5660 #ifndef final_version 5661 #endif 5662 #ifdef VLAN_SUPPORT 5663 #endif 5664 #ifdef VLAN_SUPPORT 5665 #endif 5666 #ifdef VLAN_SUPPORT 5667 #endif 5668 #ifdef VLAN_SUPPORT 5669 #endif 5670 #ifdef CONFIG_PM 5671 #endif 5672 #ifdef CONFIG_PM 5673 #endif 5674 #ifdef MODULE 5675 #endif 5676 /* LDV_COMMENT_END_PREP */ 5677 5678 5679 5680 5681 } 5682 5683 break; 5684 case 8: { 5685 5686 /** STRUCT: struct type: net_device_ops, struct name: netdev_ops **/ 5687 5688 5689 /* content: static int netdev_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, u16 vid)*/ 5690 /* LDV_COMMENT_BEGIN_PREP */ 5691 #define DRV_NAME "starfire" 5692 #define DRV_VERSION "2.1" 5693 #define DRV_RELDATE "July 6, 2008" 5694 #define HAS_BROKEN_FIRMWARE 5695 #ifdef HAS_BROKEN_FIRMWARE 5696 #define PADDING_MASK 3 5697 #endif 5698 #define ZEROCOPY 5699 #if IS_ENABLED(CONFIG_VLAN_8021Q) 5700 #define VLAN_SUPPORT 5701 #endif 5702 #define PKT_BUF_SZ 1536 5703 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 5704 #else 5705 #endif 5706 #ifdef __sparc__ 5707 #define DMA_BURST_SIZE 64 5708 #else 5709 #define DMA_BURST_SIZE 128 5710 #endif 5711 #define RX_RING_SIZE 256 5712 #define TX_RING_SIZE 32 5713 #define DONE_Q_SIZE 1024 5714 #define QUEUE_ALIGN 256 5715 #if RX_RING_SIZE > 256 5716 #define RX_Q_ENTRIES Rx2048QEntries 5717 #else 5718 #define RX_Q_ENTRIES Rx256QEntries 5719 #endif 5720 #define TX_TIMEOUT (2 * HZ) 5721 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 5722 #define ADDR_64BITS 5723 #define netdrv_addr_t __le64 5724 #define cpu_to_dma(x) cpu_to_le64(x) 5725 #define dma_to_cpu(x) le64_to_cpu(x) 5726 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 5727 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 5728 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 5729 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 5730 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 5731 #else 5732 #define netdrv_addr_t __le32 5733 #define cpu_to_dma(x) cpu_to_le32(x) 5734 #define dma_to_cpu(x) le32_to_cpu(x) 5735 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 5736 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 5737 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 5738 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 5739 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 5740 #endif 5741 #define skb_first_frag_len(skb) skb_headlen(skb) 5742 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 5743 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 5744 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 5745 #ifdef VLAN_SUPPORT 5746 #define RxComplType RxComplType3 5747 #else 5748 #define RxComplType RxComplType2 5749 #endif 5750 #ifdef ADDR_64BITS 5751 #define TX_DESC_TYPE TxDescType2 5752 #else 5753 #define TX_DESC_TYPE TxDescType1 5754 #endif 5755 #define TX_DESC_SPACING TxDescSpaceUnlim 5756 #if 0 5757 #endif 5758 #define PHY_CNT 2 5759 #ifdef VLAN_SUPPORT 5760 #endif 5761 #ifdef VLAN_SUPPORT 5762 /* LDV_COMMENT_END_PREP */ 5763 /* LDV_COMMENT_FUNCTION_CALL Function from field "ndo_vlan_rx_kill_vid" from driver structure with callbacks "netdev_ops" */ 5764 ldv_handler_precall(); 5765 netdev_vlan_rx_kill_vid( var_group1, var_netdev_vlan_rx_kill_vid_1_p1, var_netdev_vlan_rx_kill_vid_1_p2); 5766 /* LDV_COMMENT_BEGIN_PREP */ 5767 #endif 5768 #ifdef VLAN_SUPPORT 5769 #endif 5770 #ifndef MODULE 5771 #endif 5772 #ifdef ZEROCOPY 5773 #endif 5774 #ifdef VLAN_SUPPORT 5775 #endif 5776 #ifdef ADDR_64BITS 5777 #endif 5778 #if ! defined(final_version) 5779 #endif 5780 #ifdef VLAN_SUPPORT 5781 #endif 5782 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 5783 #endif 5784 #ifndef final_version 5785 #endif 5786 #ifdef VLAN_SUPPORT 5787 #endif 5788 #ifdef VLAN_SUPPORT 5789 #endif 5790 #ifdef VLAN_SUPPORT 5791 #endif 5792 #ifdef VLAN_SUPPORT 5793 #endif 5794 #ifdef CONFIG_PM 5795 #endif 5796 #ifdef CONFIG_PM 5797 #endif 5798 #ifdef MODULE 5799 #endif 5800 /* LDV_COMMENT_END_PREP */ 5801 5802 5803 5804 5805 } 5806 5807 break; 5808 case 9: { 5809 5810 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 5811 5812 5813 /* content: static int check_if_running(struct net_device *dev)*/ 5814 /* LDV_COMMENT_BEGIN_PREP */ 5815 #define DRV_NAME "starfire" 5816 #define DRV_VERSION "2.1" 5817 #define DRV_RELDATE "July 6, 2008" 5818 #define HAS_BROKEN_FIRMWARE 5819 #ifdef HAS_BROKEN_FIRMWARE 5820 #define PADDING_MASK 3 5821 #endif 5822 #define ZEROCOPY 5823 #if IS_ENABLED(CONFIG_VLAN_8021Q) 5824 #define VLAN_SUPPORT 5825 #endif 5826 #define PKT_BUF_SZ 1536 5827 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 5828 #else 5829 #endif 5830 #ifdef __sparc__ 5831 #define DMA_BURST_SIZE 64 5832 #else 5833 #define DMA_BURST_SIZE 128 5834 #endif 5835 #define RX_RING_SIZE 256 5836 #define TX_RING_SIZE 32 5837 #define DONE_Q_SIZE 1024 5838 #define QUEUE_ALIGN 256 5839 #if RX_RING_SIZE > 256 5840 #define RX_Q_ENTRIES Rx2048QEntries 5841 #else 5842 #define RX_Q_ENTRIES Rx256QEntries 5843 #endif 5844 #define TX_TIMEOUT (2 * HZ) 5845 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 5846 #define ADDR_64BITS 5847 #define netdrv_addr_t __le64 5848 #define cpu_to_dma(x) cpu_to_le64(x) 5849 #define dma_to_cpu(x) le64_to_cpu(x) 5850 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 5851 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 5852 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 5853 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 5854 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 5855 #else 5856 #define netdrv_addr_t __le32 5857 #define cpu_to_dma(x) cpu_to_le32(x) 5858 #define dma_to_cpu(x) le32_to_cpu(x) 5859 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 5860 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 5861 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 5862 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 5863 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 5864 #endif 5865 #define skb_first_frag_len(skb) skb_headlen(skb) 5866 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 5867 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 5868 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 5869 #ifdef VLAN_SUPPORT 5870 #define RxComplType RxComplType3 5871 #else 5872 #define RxComplType RxComplType2 5873 #endif 5874 #ifdef ADDR_64BITS 5875 #define TX_DESC_TYPE TxDescType2 5876 #else 5877 #define TX_DESC_TYPE TxDescType1 5878 #endif 5879 #define TX_DESC_SPACING TxDescSpaceUnlim 5880 #if 0 5881 #endif 5882 #define PHY_CNT 2 5883 #ifdef VLAN_SUPPORT 5884 #endif 5885 #ifdef VLAN_SUPPORT 5886 #endif 5887 #ifdef VLAN_SUPPORT 5888 #endif 5889 #ifndef MODULE 5890 #endif 5891 #ifdef ZEROCOPY 5892 #endif 5893 #ifdef VLAN_SUPPORT 5894 #endif 5895 #ifdef ADDR_64BITS 5896 #endif 5897 #if ! defined(final_version) 5898 #endif 5899 #ifdef VLAN_SUPPORT 5900 #endif 5901 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 5902 #endif 5903 #ifndef final_version 5904 #endif 5905 #ifdef VLAN_SUPPORT 5906 #endif 5907 #ifdef VLAN_SUPPORT 5908 #endif 5909 #ifdef VLAN_SUPPORT 5910 #endif 5911 #ifdef VLAN_SUPPORT 5912 #endif 5913 /* LDV_COMMENT_END_PREP */ 5914 /* LDV_COMMENT_FUNCTION_CALL Function from field "begin" from driver structure with callbacks "ethtool_ops" */ 5915 ldv_handler_precall(); 5916 check_if_running( var_group1); 5917 /* LDV_COMMENT_BEGIN_PREP */ 5918 #ifdef CONFIG_PM 5919 #endif 5920 #ifdef CONFIG_PM 5921 #endif 5922 #ifdef MODULE 5923 #endif 5924 /* LDV_COMMENT_END_PREP */ 5925 5926 5927 5928 5929 } 5930 5931 break; 5932 case 10: { 5933 5934 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 5935 5936 5937 /* content: static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)*/ 5938 /* LDV_COMMENT_BEGIN_PREP */ 5939 #define DRV_NAME "starfire" 5940 #define DRV_VERSION "2.1" 5941 #define DRV_RELDATE "July 6, 2008" 5942 #define HAS_BROKEN_FIRMWARE 5943 #ifdef HAS_BROKEN_FIRMWARE 5944 #define PADDING_MASK 3 5945 #endif 5946 #define ZEROCOPY 5947 #if IS_ENABLED(CONFIG_VLAN_8021Q) 5948 #define VLAN_SUPPORT 5949 #endif 5950 #define PKT_BUF_SZ 1536 5951 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 5952 #else 5953 #endif 5954 #ifdef __sparc__ 5955 #define DMA_BURST_SIZE 64 5956 #else 5957 #define DMA_BURST_SIZE 128 5958 #endif 5959 #define RX_RING_SIZE 256 5960 #define TX_RING_SIZE 32 5961 #define DONE_Q_SIZE 1024 5962 #define QUEUE_ALIGN 256 5963 #if RX_RING_SIZE > 256 5964 #define RX_Q_ENTRIES Rx2048QEntries 5965 #else 5966 #define RX_Q_ENTRIES Rx256QEntries 5967 #endif 5968 #define TX_TIMEOUT (2 * HZ) 5969 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 5970 #define ADDR_64BITS 5971 #define netdrv_addr_t __le64 5972 #define cpu_to_dma(x) cpu_to_le64(x) 5973 #define dma_to_cpu(x) le64_to_cpu(x) 5974 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 5975 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 5976 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 5977 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 5978 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 5979 #else 5980 #define netdrv_addr_t __le32 5981 #define cpu_to_dma(x) cpu_to_le32(x) 5982 #define dma_to_cpu(x) le32_to_cpu(x) 5983 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 5984 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 5985 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 5986 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 5987 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 5988 #endif 5989 #define skb_first_frag_len(skb) skb_headlen(skb) 5990 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 5991 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 5992 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 5993 #ifdef VLAN_SUPPORT 5994 #define RxComplType RxComplType3 5995 #else 5996 #define RxComplType RxComplType2 5997 #endif 5998 #ifdef ADDR_64BITS 5999 #define TX_DESC_TYPE TxDescType2 6000 #else 6001 #define TX_DESC_TYPE TxDescType1 6002 #endif 6003 #define TX_DESC_SPACING TxDescSpaceUnlim 6004 #if 0 6005 #endif 6006 #define PHY_CNT 2 6007 #ifdef VLAN_SUPPORT 6008 #endif 6009 #ifdef VLAN_SUPPORT 6010 #endif 6011 #ifdef VLAN_SUPPORT 6012 #endif 6013 #ifndef MODULE 6014 #endif 6015 #ifdef ZEROCOPY 6016 #endif 6017 #ifdef VLAN_SUPPORT 6018 #endif 6019 #ifdef ADDR_64BITS 6020 #endif 6021 #if ! defined(final_version) 6022 #endif 6023 #ifdef VLAN_SUPPORT 6024 #endif 6025 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 6026 #endif 6027 #ifndef final_version 6028 #endif 6029 #ifdef VLAN_SUPPORT 6030 #endif 6031 #ifdef VLAN_SUPPORT 6032 #endif 6033 #ifdef VLAN_SUPPORT 6034 #endif 6035 #ifdef VLAN_SUPPORT 6036 #endif 6037 /* LDV_COMMENT_END_PREP */ 6038 /* LDV_COMMENT_FUNCTION_CALL Function from field "get_drvinfo" from driver structure with callbacks "ethtool_ops" */ 6039 ldv_handler_precall(); 6040 get_drvinfo( var_group1, var_group4); 6041 /* LDV_COMMENT_BEGIN_PREP */ 6042 #ifdef CONFIG_PM 6043 #endif 6044 #ifdef CONFIG_PM 6045 #endif 6046 #ifdef MODULE 6047 #endif 6048 /* LDV_COMMENT_END_PREP */ 6049 6050 6051 6052 6053 } 6054 6055 break; 6056 case 11: { 6057 6058 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 6059 6060 6061 /* content: static int nway_reset(struct net_device *dev)*/ 6062 /* LDV_COMMENT_BEGIN_PREP */ 6063 #define DRV_NAME "starfire" 6064 #define DRV_VERSION "2.1" 6065 #define DRV_RELDATE "July 6, 2008" 6066 #define HAS_BROKEN_FIRMWARE 6067 #ifdef HAS_BROKEN_FIRMWARE 6068 #define PADDING_MASK 3 6069 #endif 6070 #define ZEROCOPY 6071 #if IS_ENABLED(CONFIG_VLAN_8021Q) 6072 #define VLAN_SUPPORT 6073 #endif 6074 #define PKT_BUF_SZ 1536 6075 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 6076 #else 6077 #endif 6078 #ifdef __sparc__ 6079 #define DMA_BURST_SIZE 64 6080 #else 6081 #define DMA_BURST_SIZE 128 6082 #endif 6083 #define RX_RING_SIZE 256 6084 #define TX_RING_SIZE 32 6085 #define DONE_Q_SIZE 1024 6086 #define QUEUE_ALIGN 256 6087 #if RX_RING_SIZE > 256 6088 #define RX_Q_ENTRIES Rx2048QEntries 6089 #else 6090 #define RX_Q_ENTRIES Rx256QEntries 6091 #endif 6092 #define TX_TIMEOUT (2 * HZ) 6093 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 6094 #define ADDR_64BITS 6095 #define netdrv_addr_t __le64 6096 #define cpu_to_dma(x) cpu_to_le64(x) 6097 #define dma_to_cpu(x) le64_to_cpu(x) 6098 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 6099 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 6100 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 6101 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 6102 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 6103 #else 6104 #define netdrv_addr_t __le32 6105 #define cpu_to_dma(x) cpu_to_le32(x) 6106 #define dma_to_cpu(x) le32_to_cpu(x) 6107 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 6108 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 6109 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 6110 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 6111 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 6112 #endif 6113 #define skb_first_frag_len(skb) skb_headlen(skb) 6114 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 6115 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 6116 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 6117 #ifdef VLAN_SUPPORT 6118 #define RxComplType RxComplType3 6119 #else 6120 #define RxComplType RxComplType2 6121 #endif 6122 #ifdef ADDR_64BITS 6123 #define TX_DESC_TYPE TxDescType2 6124 #else 6125 #define TX_DESC_TYPE TxDescType1 6126 #endif 6127 #define TX_DESC_SPACING TxDescSpaceUnlim 6128 #if 0 6129 #endif 6130 #define PHY_CNT 2 6131 #ifdef VLAN_SUPPORT 6132 #endif 6133 #ifdef VLAN_SUPPORT 6134 #endif 6135 #ifdef VLAN_SUPPORT 6136 #endif 6137 #ifndef MODULE 6138 #endif 6139 #ifdef ZEROCOPY 6140 #endif 6141 #ifdef VLAN_SUPPORT 6142 #endif 6143 #ifdef ADDR_64BITS 6144 #endif 6145 #if ! defined(final_version) 6146 #endif 6147 #ifdef VLAN_SUPPORT 6148 #endif 6149 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 6150 #endif 6151 #ifndef final_version 6152 #endif 6153 #ifdef VLAN_SUPPORT 6154 #endif 6155 #ifdef VLAN_SUPPORT 6156 #endif 6157 #ifdef VLAN_SUPPORT 6158 #endif 6159 #ifdef VLAN_SUPPORT 6160 #endif 6161 /* LDV_COMMENT_END_PREP */ 6162 /* LDV_COMMENT_FUNCTION_CALL Function from field "nway_reset" from driver structure with callbacks "ethtool_ops" */ 6163 ldv_handler_precall(); 6164 nway_reset( var_group1); 6165 /* LDV_COMMENT_BEGIN_PREP */ 6166 #ifdef CONFIG_PM 6167 #endif 6168 #ifdef CONFIG_PM 6169 #endif 6170 #ifdef MODULE 6171 #endif 6172 /* LDV_COMMENT_END_PREP */ 6173 6174 6175 6176 6177 } 6178 6179 break; 6180 case 12: { 6181 6182 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 6183 6184 6185 /* content: static u32 get_link(struct net_device *dev)*/ 6186 /* LDV_COMMENT_BEGIN_PREP */ 6187 #define DRV_NAME "starfire" 6188 #define DRV_VERSION "2.1" 6189 #define DRV_RELDATE "July 6, 2008" 6190 #define HAS_BROKEN_FIRMWARE 6191 #ifdef HAS_BROKEN_FIRMWARE 6192 #define PADDING_MASK 3 6193 #endif 6194 #define ZEROCOPY 6195 #if IS_ENABLED(CONFIG_VLAN_8021Q) 6196 #define VLAN_SUPPORT 6197 #endif 6198 #define PKT_BUF_SZ 1536 6199 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 6200 #else 6201 #endif 6202 #ifdef __sparc__ 6203 #define DMA_BURST_SIZE 64 6204 #else 6205 #define DMA_BURST_SIZE 128 6206 #endif 6207 #define RX_RING_SIZE 256 6208 #define TX_RING_SIZE 32 6209 #define DONE_Q_SIZE 1024 6210 #define QUEUE_ALIGN 256 6211 #if RX_RING_SIZE > 256 6212 #define RX_Q_ENTRIES Rx2048QEntries 6213 #else 6214 #define RX_Q_ENTRIES Rx256QEntries 6215 #endif 6216 #define TX_TIMEOUT (2 * HZ) 6217 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 6218 #define ADDR_64BITS 6219 #define netdrv_addr_t __le64 6220 #define cpu_to_dma(x) cpu_to_le64(x) 6221 #define dma_to_cpu(x) le64_to_cpu(x) 6222 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 6223 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 6224 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 6225 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 6226 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 6227 #else 6228 #define netdrv_addr_t __le32 6229 #define cpu_to_dma(x) cpu_to_le32(x) 6230 #define dma_to_cpu(x) le32_to_cpu(x) 6231 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 6232 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 6233 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 6234 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 6235 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 6236 #endif 6237 #define skb_first_frag_len(skb) skb_headlen(skb) 6238 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 6239 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 6240 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 6241 #ifdef VLAN_SUPPORT 6242 #define RxComplType RxComplType3 6243 #else 6244 #define RxComplType RxComplType2 6245 #endif 6246 #ifdef ADDR_64BITS 6247 #define TX_DESC_TYPE TxDescType2 6248 #else 6249 #define TX_DESC_TYPE TxDescType1 6250 #endif 6251 #define TX_DESC_SPACING TxDescSpaceUnlim 6252 #if 0 6253 #endif 6254 #define PHY_CNT 2 6255 #ifdef VLAN_SUPPORT 6256 #endif 6257 #ifdef VLAN_SUPPORT 6258 #endif 6259 #ifdef VLAN_SUPPORT 6260 #endif 6261 #ifndef MODULE 6262 #endif 6263 #ifdef ZEROCOPY 6264 #endif 6265 #ifdef VLAN_SUPPORT 6266 #endif 6267 #ifdef ADDR_64BITS 6268 #endif 6269 #if ! defined(final_version) 6270 #endif 6271 #ifdef VLAN_SUPPORT 6272 #endif 6273 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 6274 #endif 6275 #ifndef final_version 6276 #endif 6277 #ifdef VLAN_SUPPORT 6278 #endif 6279 #ifdef VLAN_SUPPORT 6280 #endif 6281 #ifdef VLAN_SUPPORT 6282 #endif 6283 #ifdef VLAN_SUPPORT 6284 #endif 6285 /* LDV_COMMENT_END_PREP */ 6286 /* LDV_COMMENT_FUNCTION_CALL Function from field "get_link" from driver structure with callbacks "ethtool_ops" */ 6287 ldv_handler_precall(); 6288 get_link( var_group1); 6289 /* LDV_COMMENT_BEGIN_PREP */ 6290 #ifdef CONFIG_PM 6291 #endif 6292 #ifdef CONFIG_PM 6293 #endif 6294 #ifdef MODULE 6295 #endif 6296 /* LDV_COMMENT_END_PREP */ 6297 6298 6299 6300 6301 } 6302 6303 break; 6304 case 13: { 6305 6306 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 6307 6308 6309 /* content: static u32 get_msglevel(struct net_device *dev)*/ 6310 /* LDV_COMMENT_BEGIN_PREP */ 6311 #define DRV_NAME "starfire" 6312 #define DRV_VERSION "2.1" 6313 #define DRV_RELDATE "July 6, 2008" 6314 #define HAS_BROKEN_FIRMWARE 6315 #ifdef HAS_BROKEN_FIRMWARE 6316 #define PADDING_MASK 3 6317 #endif 6318 #define ZEROCOPY 6319 #if IS_ENABLED(CONFIG_VLAN_8021Q) 6320 #define VLAN_SUPPORT 6321 #endif 6322 #define PKT_BUF_SZ 1536 6323 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 6324 #else 6325 #endif 6326 #ifdef __sparc__ 6327 #define DMA_BURST_SIZE 64 6328 #else 6329 #define DMA_BURST_SIZE 128 6330 #endif 6331 #define RX_RING_SIZE 256 6332 #define TX_RING_SIZE 32 6333 #define DONE_Q_SIZE 1024 6334 #define QUEUE_ALIGN 256 6335 #if RX_RING_SIZE > 256 6336 #define RX_Q_ENTRIES Rx2048QEntries 6337 #else 6338 #define RX_Q_ENTRIES Rx256QEntries 6339 #endif 6340 #define TX_TIMEOUT (2 * HZ) 6341 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 6342 #define ADDR_64BITS 6343 #define netdrv_addr_t __le64 6344 #define cpu_to_dma(x) cpu_to_le64(x) 6345 #define dma_to_cpu(x) le64_to_cpu(x) 6346 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 6347 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 6348 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 6349 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 6350 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 6351 #else 6352 #define netdrv_addr_t __le32 6353 #define cpu_to_dma(x) cpu_to_le32(x) 6354 #define dma_to_cpu(x) le32_to_cpu(x) 6355 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 6356 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 6357 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 6358 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 6359 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 6360 #endif 6361 #define skb_first_frag_len(skb) skb_headlen(skb) 6362 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 6363 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 6364 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 6365 #ifdef VLAN_SUPPORT 6366 #define RxComplType RxComplType3 6367 #else 6368 #define RxComplType RxComplType2 6369 #endif 6370 #ifdef ADDR_64BITS 6371 #define TX_DESC_TYPE TxDescType2 6372 #else 6373 #define TX_DESC_TYPE TxDescType1 6374 #endif 6375 #define TX_DESC_SPACING TxDescSpaceUnlim 6376 #if 0 6377 #endif 6378 #define PHY_CNT 2 6379 #ifdef VLAN_SUPPORT 6380 #endif 6381 #ifdef VLAN_SUPPORT 6382 #endif 6383 #ifdef VLAN_SUPPORT 6384 #endif 6385 #ifndef MODULE 6386 #endif 6387 #ifdef ZEROCOPY 6388 #endif 6389 #ifdef VLAN_SUPPORT 6390 #endif 6391 #ifdef ADDR_64BITS 6392 #endif 6393 #if ! defined(final_version) 6394 #endif 6395 #ifdef VLAN_SUPPORT 6396 #endif 6397 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 6398 #endif 6399 #ifndef final_version 6400 #endif 6401 #ifdef VLAN_SUPPORT 6402 #endif 6403 #ifdef VLAN_SUPPORT 6404 #endif 6405 #ifdef VLAN_SUPPORT 6406 #endif 6407 #ifdef VLAN_SUPPORT 6408 #endif 6409 /* LDV_COMMENT_END_PREP */ 6410 /* LDV_COMMENT_FUNCTION_CALL Function from field "get_msglevel" from driver structure with callbacks "ethtool_ops" */ 6411 ldv_handler_precall(); 6412 get_msglevel( var_group1); 6413 /* LDV_COMMENT_BEGIN_PREP */ 6414 #ifdef CONFIG_PM 6415 #endif 6416 #ifdef CONFIG_PM 6417 #endif 6418 #ifdef MODULE 6419 #endif 6420 /* LDV_COMMENT_END_PREP */ 6421 6422 6423 6424 6425 } 6426 6427 break; 6428 case 14: { 6429 6430 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 6431 6432 6433 /* content: static void set_msglevel(struct net_device *dev, u32 val)*/ 6434 /* LDV_COMMENT_BEGIN_PREP */ 6435 #define DRV_NAME "starfire" 6436 #define DRV_VERSION "2.1" 6437 #define DRV_RELDATE "July 6, 2008" 6438 #define HAS_BROKEN_FIRMWARE 6439 #ifdef HAS_BROKEN_FIRMWARE 6440 #define PADDING_MASK 3 6441 #endif 6442 #define ZEROCOPY 6443 #if IS_ENABLED(CONFIG_VLAN_8021Q) 6444 #define VLAN_SUPPORT 6445 #endif 6446 #define PKT_BUF_SZ 1536 6447 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 6448 #else 6449 #endif 6450 #ifdef __sparc__ 6451 #define DMA_BURST_SIZE 64 6452 #else 6453 #define DMA_BURST_SIZE 128 6454 #endif 6455 #define RX_RING_SIZE 256 6456 #define TX_RING_SIZE 32 6457 #define DONE_Q_SIZE 1024 6458 #define QUEUE_ALIGN 256 6459 #if RX_RING_SIZE > 256 6460 #define RX_Q_ENTRIES Rx2048QEntries 6461 #else 6462 #define RX_Q_ENTRIES Rx256QEntries 6463 #endif 6464 #define TX_TIMEOUT (2 * HZ) 6465 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 6466 #define ADDR_64BITS 6467 #define netdrv_addr_t __le64 6468 #define cpu_to_dma(x) cpu_to_le64(x) 6469 #define dma_to_cpu(x) le64_to_cpu(x) 6470 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 6471 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 6472 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 6473 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 6474 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 6475 #else 6476 #define netdrv_addr_t __le32 6477 #define cpu_to_dma(x) cpu_to_le32(x) 6478 #define dma_to_cpu(x) le32_to_cpu(x) 6479 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 6480 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 6481 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 6482 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 6483 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 6484 #endif 6485 #define skb_first_frag_len(skb) skb_headlen(skb) 6486 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 6487 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 6488 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 6489 #ifdef VLAN_SUPPORT 6490 #define RxComplType RxComplType3 6491 #else 6492 #define RxComplType RxComplType2 6493 #endif 6494 #ifdef ADDR_64BITS 6495 #define TX_DESC_TYPE TxDescType2 6496 #else 6497 #define TX_DESC_TYPE TxDescType1 6498 #endif 6499 #define TX_DESC_SPACING TxDescSpaceUnlim 6500 #if 0 6501 #endif 6502 #define PHY_CNT 2 6503 #ifdef VLAN_SUPPORT 6504 #endif 6505 #ifdef VLAN_SUPPORT 6506 #endif 6507 #ifdef VLAN_SUPPORT 6508 #endif 6509 #ifndef MODULE 6510 #endif 6511 #ifdef ZEROCOPY 6512 #endif 6513 #ifdef VLAN_SUPPORT 6514 #endif 6515 #ifdef ADDR_64BITS 6516 #endif 6517 #if ! defined(final_version) 6518 #endif 6519 #ifdef VLAN_SUPPORT 6520 #endif 6521 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 6522 #endif 6523 #ifndef final_version 6524 #endif 6525 #ifdef VLAN_SUPPORT 6526 #endif 6527 #ifdef VLAN_SUPPORT 6528 #endif 6529 #ifdef VLAN_SUPPORT 6530 #endif 6531 #ifdef VLAN_SUPPORT 6532 #endif 6533 /* LDV_COMMENT_END_PREP */ 6534 /* LDV_COMMENT_FUNCTION_CALL Function from field "set_msglevel" from driver structure with callbacks "ethtool_ops" */ 6535 ldv_handler_precall(); 6536 set_msglevel( var_group1, var_set_msglevel_26_p1); 6537 /* LDV_COMMENT_BEGIN_PREP */ 6538 #ifdef CONFIG_PM 6539 #endif 6540 #ifdef CONFIG_PM 6541 #endif 6542 #ifdef MODULE 6543 #endif 6544 /* LDV_COMMENT_END_PREP */ 6545 6546 6547 6548 6549 } 6550 6551 break; 6552 case 15: { 6553 6554 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 6555 6556 6557 /* content: static int get_link_ksettings(struct net_device *dev, struct ethtool_link_ksettings *cmd)*/ 6558 /* LDV_COMMENT_BEGIN_PREP */ 6559 #define DRV_NAME "starfire" 6560 #define DRV_VERSION "2.1" 6561 #define DRV_RELDATE "July 6, 2008" 6562 #define HAS_BROKEN_FIRMWARE 6563 #ifdef HAS_BROKEN_FIRMWARE 6564 #define PADDING_MASK 3 6565 #endif 6566 #define ZEROCOPY 6567 #if IS_ENABLED(CONFIG_VLAN_8021Q) 6568 #define VLAN_SUPPORT 6569 #endif 6570 #define PKT_BUF_SZ 1536 6571 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 6572 #else 6573 #endif 6574 #ifdef __sparc__ 6575 #define DMA_BURST_SIZE 64 6576 #else 6577 #define DMA_BURST_SIZE 128 6578 #endif 6579 #define RX_RING_SIZE 256 6580 #define TX_RING_SIZE 32 6581 #define DONE_Q_SIZE 1024 6582 #define QUEUE_ALIGN 256 6583 #if RX_RING_SIZE > 256 6584 #define RX_Q_ENTRIES Rx2048QEntries 6585 #else 6586 #define RX_Q_ENTRIES Rx256QEntries 6587 #endif 6588 #define TX_TIMEOUT (2 * HZ) 6589 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 6590 #define ADDR_64BITS 6591 #define netdrv_addr_t __le64 6592 #define cpu_to_dma(x) cpu_to_le64(x) 6593 #define dma_to_cpu(x) le64_to_cpu(x) 6594 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 6595 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 6596 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 6597 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 6598 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 6599 #else 6600 #define netdrv_addr_t __le32 6601 #define cpu_to_dma(x) cpu_to_le32(x) 6602 #define dma_to_cpu(x) le32_to_cpu(x) 6603 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 6604 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 6605 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 6606 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 6607 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 6608 #endif 6609 #define skb_first_frag_len(skb) skb_headlen(skb) 6610 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 6611 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 6612 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 6613 #ifdef VLAN_SUPPORT 6614 #define RxComplType RxComplType3 6615 #else 6616 #define RxComplType RxComplType2 6617 #endif 6618 #ifdef ADDR_64BITS 6619 #define TX_DESC_TYPE TxDescType2 6620 #else 6621 #define TX_DESC_TYPE TxDescType1 6622 #endif 6623 #define TX_DESC_SPACING TxDescSpaceUnlim 6624 #if 0 6625 #endif 6626 #define PHY_CNT 2 6627 #ifdef VLAN_SUPPORT 6628 #endif 6629 #ifdef VLAN_SUPPORT 6630 #endif 6631 #ifdef VLAN_SUPPORT 6632 #endif 6633 #ifndef MODULE 6634 #endif 6635 #ifdef ZEROCOPY 6636 #endif 6637 #ifdef VLAN_SUPPORT 6638 #endif 6639 #ifdef ADDR_64BITS 6640 #endif 6641 #if ! defined(final_version) 6642 #endif 6643 #ifdef VLAN_SUPPORT 6644 #endif 6645 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 6646 #endif 6647 #ifndef final_version 6648 #endif 6649 #ifdef VLAN_SUPPORT 6650 #endif 6651 #ifdef VLAN_SUPPORT 6652 #endif 6653 #ifdef VLAN_SUPPORT 6654 #endif 6655 #ifdef VLAN_SUPPORT 6656 #endif 6657 /* LDV_COMMENT_END_PREP */ 6658 /* LDV_COMMENT_FUNCTION_CALL Function from field "get_link_ksettings" from driver structure with callbacks "ethtool_ops" */ 6659 ldv_handler_precall(); 6660 get_link_ksettings( var_group1, var_group5); 6661 /* LDV_COMMENT_BEGIN_PREP */ 6662 #ifdef CONFIG_PM 6663 #endif 6664 #ifdef CONFIG_PM 6665 #endif 6666 #ifdef MODULE 6667 #endif 6668 /* LDV_COMMENT_END_PREP */ 6669 6670 6671 6672 6673 } 6674 6675 break; 6676 case 16: { 6677 6678 /** STRUCT: struct type: ethtool_ops, struct name: ethtool_ops **/ 6679 6680 6681 /* content: static int set_link_ksettings(struct net_device *dev, const struct ethtool_link_ksettings *cmd)*/ 6682 /* LDV_COMMENT_BEGIN_PREP */ 6683 #define DRV_NAME "starfire" 6684 #define DRV_VERSION "2.1" 6685 #define DRV_RELDATE "July 6, 2008" 6686 #define HAS_BROKEN_FIRMWARE 6687 #ifdef HAS_BROKEN_FIRMWARE 6688 #define PADDING_MASK 3 6689 #endif 6690 #define ZEROCOPY 6691 #if IS_ENABLED(CONFIG_VLAN_8021Q) 6692 #define VLAN_SUPPORT 6693 #endif 6694 #define PKT_BUF_SZ 1536 6695 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 6696 #else 6697 #endif 6698 #ifdef __sparc__ 6699 #define DMA_BURST_SIZE 64 6700 #else 6701 #define DMA_BURST_SIZE 128 6702 #endif 6703 #define RX_RING_SIZE 256 6704 #define TX_RING_SIZE 32 6705 #define DONE_Q_SIZE 1024 6706 #define QUEUE_ALIGN 256 6707 #if RX_RING_SIZE > 256 6708 #define RX_Q_ENTRIES Rx2048QEntries 6709 #else 6710 #define RX_Q_ENTRIES Rx256QEntries 6711 #endif 6712 #define TX_TIMEOUT (2 * HZ) 6713 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 6714 #define ADDR_64BITS 6715 #define netdrv_addr_t __le64 6716 #define cpu_to_dma(x) cpu_to_le64(x) 6717 #define dma_to_cpu(x) le64_to_cpu(x) 6718 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 6719 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 6720 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 6721 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 6722 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 6723 #else 6724 #define netdrv_addr_t __le32 6725 #define cpu_to_dma(x) cpu_to_le32(x) 6726 #define dma_to_cpu(x) le32_to_cpu(x) 6727 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 6728 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 6729 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 6730 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 6731 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 6732 #endif 6733 #define skb_first_frag_len(skb) skb_headlen(skb) 6734 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 6735 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 6736 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 6737 #ifdef VLAN_SUPPORT 6738 #define RxComplType RxComplType3 6739 #else 6740 #define RxComplType RxComplType2 6741 #endif 6742 #ifdef ADDR_64BITS 6743 #define TX_DESC_TYPE TxDescType2 6744 #else 6745 #define TX_DESC_TYPE TxDescType1 6746 #endif 6747 #define TX_DESC_SPACING TxDescSpaceUnlim 6748 #if 0 6749 #endif 6750 #define PHY_CNT 2 6751 #ifdef VLAN_SUPPORT 6752 #endif 6753 #ifdef VLAN_SUPPORT 6754 #endif 6755 #ifdef VLAN_SUPPORT 6756 #endif 6757 #ifndef MODULE 6758 #endif 6759 #ifdef ZEROCOPY 6760 #endif 6761 #ifdef VLAN_SUPPORT 6762 #endif 6763 #ifdef ADDR_64BITS 6764 #endif 6765 #if ! defined(final_version) 6766 #endif 6767 #ifdef VLAN_SUPPORT 6768 #endif 6769 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 6770 #endif 6771 #ifndef final_version 6772 #endif 6773 #ifdef VLAN_SUPPORT 6774 #endif 6775 #ifdef VLAN_SUPPORT 6776 #endif 6777 #ifdef VLAN_SUPPORT 6778 #endif 6779 #ifdef VLAN_SUPPORT 6780 #endif 6781 /* LDV_COMMENT_END_PREP */ 6782 /* LDV_COMMENT_FUNCTION_CALL Function from field "set_link_ksettings" from driver structure with callbacks "ethtool_ops" */ 6783 ldv_handler_precall(); 6784 set_link_ksettings( var_group1, var_set_link_ksettings_22_p1); 6785 /* LDV_COMMENT_BEGIN_PREP */ 6786 #ifdef CONFIG_PM 6787 #endif 6788 #ifdef CONFIG_PM 6789 #endif 6790 #ifdef MODULE 6791 #endif 6792 /* LDV_COMMENT_END_PREP */ 6793 6794 6795 6796 6797 } 6798 6799 break; 6800 case 17: { 6801 6802 /** STRUCT: struct type: pci_driver, struct name: starfire_driver **/ 6803 if(ldv_s_starfire_driver_pci_driver==0) { 6804 6805 /* content: static int starfire_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)*/ 6806 /* LDV_COMMENT_BEGIN_PREP */ 6807 #define DRV_NAME "starfire" 6808 #define DRV_VERSION "2.1" 6809 #define DRV_RELDATE "July 6, 2008" 6810 #define HAS_BROKEN_FIRMWARE 6811 #ifdef HAS_BROKEN_FIRMWARE 6812 #define PADDING_MASK 3 6813 #endif 6814 #define ZEROCOPY 6815 #if IS_ENABLED(CONFIG_VLAN_8021Q) 6816 #define VLAN_SUPPORT 6817 #endif 6818 #define PKT_BUF_SZ 1536 6819 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 6820 #else 6821 #endif 6822 #ifdef __sparc__ 6823 #define DMA_BURST_SIZE 64 6824 #else 6825 #define DMA_BURST_SIZE 128 6826 #endif 6827 #define RX_RING_SIZE 256 6828 #define TX_RING_SIZE 32 6829 #define DONE_Q_SIZE 1024 6830 #define QUEUE_ALIGN 256 6831 #if RX_RING_SIZE > 256 6832 #define RX_Q_ENTRIES Rx2048QEntries 6833 #else 6834 #define RX_Q_ENTRIES Rx256QEntries 6835 #endif 6836 #define TX_TIMEOUT (2 * HZ) 6837 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 6838 #define ADDR_64BITS 6839 #define netdrv_addr_t __le64 6840 #define cpu_to_dma(x) cpu_to_le64(x) 6841 #define dma_to_cpu(x) le64_to_cpu(x) 6842 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 6843 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 6844 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 6845 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 6846 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 6847 #else 6848 #define netdrv_addr_t __le32 6849 #define cpu_to_dma(x) cpu_to_le32(x) 6850 #define dma_to_cpu(x) le32_to_cpu(x) 6851 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 6852 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 6853 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 6854 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 6855 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 6856 #endif 6857 #define skb_first_frag_len(skb) skb_headlen(skb) 6858 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 6859 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 6860 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 6861 #ifdef VLAN_SUPPORT 6862 #define RxComplType RxComplType3 6863 #else 6864 #define RxComplType RxComplType2 6865 #endif 6866 #ifdef ADDR_64BITS 6867 #define TX_DESC_TYPE TxDescType2 6868 #else 6869 #define TX_DESC_TYPE TxDescType1 6870 #endif 6871 #define TX_DESC_SPACING TxDescSpaceUnlim 6872 #if 0 6873 #endif 6874 #define PHY_CNT 2 6875 #ifdef VLAN_SUPPORT 6876 #endif 6877 #ifdef VLAN_SUPPORT 6878 #endif 6879 #ifdef VLAN_SUPPORT 6880 #endif 6881 /* LDV_COMMENT_END_PREP */ 6882 /* LDV_COMMENT_FUNCTION_CALL Function from field "probe" from driver structure with callbacks "starfire_driver". Standart function test for correct return result. */ 6883 res_starfire_init_one_2 = starfire_init_one( var_group6, var_starfire_init_one_2_p1); 6884 ldv_check_return_value(res_starfire_init_one_2); 6885 ldv_check_return_value_probe(res_starfire_init_one_2); 6886 if(res_starfire_init_one_2) 6887 goto ldv_module_exit; 6888 /* LDV_COMMENT_BEGIN_PREP */ 6889 #ifdef VLAN_SUPPORT 6890 #endif 6891 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 6892 #endif 6893 #ifndef final_version 6894 #endif 6895 #ifdef VLAN_SUPPORT 6896 #endif 6897 #ifdef VLAN_SUPPORT 6898 #endif 6899 #ifdef VLAN_SUPPORT 6900 #endif 6901 #ifdef VLAN_SUPPORT 6902 #endif 6903 #ifdef CONFIG_PM 6904 #endif 6905 #ifdef CONFIG_PM 6906 #endif 6907 #ifdef MODULE 6908 #endif 6909 /* LDV_COMMENT_END_PREP */ 6910 ldv_s_starfire_driver_pci_driver++; 6911 6912 } 6913 6914 } 6915 6916 break; 6917 case 18: { 6918 6919 /** STRUCT: struct type: pci_driver, struct name: starfire_driver **/ 6920 if(ldv_s_starfire_driver_pci_driver==1) { 6921 6922 /* content: static void starfire_remove_one(struct pci_dev *pdev)*/ 6923 /* LDV_COMMENT_BEGIN_PREP */ 6924 #define DRV_NAME "starfire" 6925 #define DRV_VERSION "2.1" 6926 #define DRV_RELDATE "July 6, 2008" 6927 #define HAS_BROKEN_FIRMWARE 6928 #ifdef HAS_BROKEN_FIRMWARE 6929 #define PADDING_MASK 3 6930 #endif 6931 #define ZEROCOPY 6932 #if IS_ENABLED(CONFIG_VLAN_8021Q) 6933 #define VLAN_SUPPORT 6934 #endif 6935 #define PKT_BUF_SZ 1536 6936 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 6937 #else 6938 #endif 6939 #ifdef __sparc__ 6940 #define DMA_BURST_SIZE 64 6941 #else 6942 #define DMA_BURST_SIZE 128 6943 #endif 6944 #define RX_RING_SIZE 256 6945 #define TX_RING_SIZE 32 6946 #define DONE_Q_SIZE 1024 6947 #define QUEUE_ALIGN 256 6948 #if RX_RING_SIZE > 256 6949 #define RX_Q_ENTRIES Rx2048QEntries 6950 #else 6951 #define RX_Q_ENTRIES Rx256QEntries 6952 #endif 6953 #define TX_TIMEOUT (2 * HZ) 6954 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 6955 #define ADDR_64BITS 6956 #define netdrv_addr_t __le64 6957 #define cpu_to_dma(x) cpu_to_le64(x) 6958 #define dma_to_cpu(x) le64_to_cpu(x) 6959 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 6960 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 6961 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 6962 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 6963 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 6964 #else 6965 #define netdrv_addr_t __le32 6966 #define cpu_to_dma(x) cpu_to_le32(x) 6967 #define dma_to_cpu(x) le32_to_cpu(x) 6968 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 6969 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 6970 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 6971 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 6972 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 6973 #endif 6974 #define skb_first_frag_len(skb) skb_headlen(skb) 6975 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 6976 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 6977 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 6978 #ifdef VLAN_SUPPORT 6979 #define RxComplType RxComplType3 6980 #else 6981 #define RxComplType RxComplType2 6982 #endif 6983 #ifdef ADDR_64BITS 6984 #define TX_DESC_TYPE TxDescType2 6985 #else 6986 #define TX_DESC_TYPE TxDescType1 6987 #endif 6988 #define TX_DESC_SPACING TxDescSpaceUnlim 6989 #if 0 6990 #endif 6991 #define PHY_CNT 2 6992 #ifdef VLAN_SUPPORT 6993 #endif 6994 #ifdef VLAN_SUPPORT 6995 #endif 6996 #ifdef VLAN_SUPPORT 6997 #endif 6998 #ifndef MODULE 6999 #endif 7000 #ifdef ZEROCOPY 7001 #endif 7002 #ifdef VLAN_SUPPORT 7003 #endif 7004 #ifdef ADDR_64BITS 7005 #endif 7006 #if ! defined(final_version) 7007 #endif 7008 #ifdef VLAN_SUPPORT 7009 #endif 7010 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 7011 #endif 7012 #ifndef final_version 7013 #endif 7014 #ifdef VLAN_SUPPORT 7015 #endif 7016 #ifdef VLAN_SUPPORT 7017 #endif 7018 #ifdef VLAN_SUPPORT 7019 #endif 7020 #ifdef VLAN_SUPPORT 7021 #endif 7022 #ifdef CONFIG_PM 7023 #endif 7024 /* LDV_COMMENT_END_PREP */ 7025 /* LDV_COMMENT_FUNCTION_CALL Function from field "remove" from driver structure with callbacks "starfire_driver" */ 7026 ldv_handler_precall(); 7027 starfire_remove_one( var_group6); 7028 /* LDV_COMMENT_BEGIN_PREP */ 7029 #ifdef CONFIG_PM 7030 #endif 7031 #ifdef MODULE 7032 #endif 7033 /* LDV_COMMENT_END_PREP */ 7034 ldv_s_starfire_driver_pci_driver=0; 7035 7036 } 7037 7038 } 7039 7040 break; 7041 case 19: { 7042 7043 /** STRUCT: struct type: pci_driver, struct name: starfire_driver **/ 7044 7045 7046 /* content: static int starfire_suspend(struct pci_dev *pdev, pm_message_t state)*/ 7047 /* LDV_COMMENT_BEGIN_PREP */ 7048 #define DRV_NAME "starfire" 7049 #define DRV_VERSION "2.1" 7050 #define DRV_RELDATE "July 6, 2008" 7051 #define HAS_BROKEN_FIRMWARE 7052 #ifdef HAS_BROKEN_FIRMWARE 7053 #define PADDING_MASK 3 7054 #endif 7055 #define ZEROCOPY 7056 #if IS_ENABLED(CONFIG_VLAN_8021Q) 7057 #define VLAN_SUPPORT 7058 #endif 7059 #define PKT_BUF_SZ 1536 7060 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 7061 #else 7062 #endif 7063 #ifdef __sparc__ 7064 #define DMA_BURST_SIZE 64 7065 #else 7066 #define DMA_BURST_SIZE 128 7067 #endif 7068 #define RX_RING_SIZE 256 7069 #define TX_RING_SIZE 32 7070 #define DONE_Q_SIZE 1024 7071 #define QUEUE_ALIGN 256 7072 #if RX_RING_SIZE > 256 7073 #define RX_Q_ENTRIES Rx2048QEntries 7074 #else 7075 #define RX_Q_ENTRIES Rx256QEntries 7076 #endif 7077 #define TX_TIMEOUT (2 * HZ) 7078 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 7079 #define ADDR_64BITS 7080 #define netdrv_addr_t __le64 7081 #define cpu_to_dma(x) cpu_to_le64(x) 7082 #define dma_to_cpu(x) le64_to_cpu(x) 7083 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 7084 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 7085 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 7086 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 7087 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 7088 #else 7089 #define netdrv_addr_t __le32 7090 #define cpu_to_dma(x) cpu_to_le32(x) 7091 #define dma_to_cpu(x) le32_to_cpu(x) 7092 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 7093 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 7094 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 7095 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 7096 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 7097 #endif 7098 #define skb_first_frag_len(skb) skb_headlen(skb) 7099 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 7100 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 7101 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 7102 #ifdef VLAN_SUPPORT 7103 #define RxComplType RxComplType3 7104 #else 7105 #define RxComplType RxComplType2 7106 #endif 7107 #ifdef ADDR_64BITS 7108 #define TX_DESC_TYPE TxDescType2 7109 #else 7110 #define TX_DESC_TYPE TxDescType1 7111 #endif 7112 #define TX_DESC_SPACING TxDescSpaceUnlim 7113 #if 0 7114 #endif 7115 #define PHY_CNT 2 7116 #ifdef VLAN_SUPPORT 7117 #endif 7118 #ifdef VLAN_SUPPORT 7119 #endif 7120 #ifdef VLAN_SUPPORT 7121 #endif 7122 #ifndef MODULE 7123 #endif 7124 #ifdef ZEROCOPY 7125 #endif 7126 #ifdef VLAN_SUPPORT 7127 #endif 7128 #ifdef ADDR_64BITS 7129 #endif 7130 #if ! defined(final_version) 7131 #endif 7132 #ifdef VLAN_SUPPORT 7133 #endif 7134 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 7135 #endif 7136 #ifndef final_version 7137 #endif 7138 #ifdef VLAN_SUPPORT 7139 #endif 7140 #ifdef VLAN_SUPPORT 7141 #endif 7142 #ifdef VLAN_SUPPORT 7143 #endif 7144 #ifdef VLAN_SUPPORT 7145 #endif 7146 #ifdef CONFIG_PM 7147 /* LDV_COMMENT_END_PREP */ 7148 /* LDV_COMMENT_FUNCTION_CALL Function from field "suspend" from driver structure with callbacks "starfire_driver" */ 7149 ldv_handler_precall(); 7150 starfire_suspend( var_group6, var_starfire_suspend_29_p1); 7151 /* LDV_COMMENT_BEGIN_PREP */ 7152 #endif 7153 #ifdef CONFIG_PM 7154 #endif 7155 #ifdef MODULE 7156 #endif 7157 /* LDV_COMMENT_END_PREP */ 7158 7159 7160 7161 7162 } 7163 7164 break; 7165 case 20: { 7166 7167 /** STRUCT: struct type: pci_driver, struct name: starfire_driver **/ 7168 7169 7170 /* content: static int starfire_resume(struct pci_dev *pdev)*/ 7171 /* LDV_COMMENT_BEGIN_PREP */ 7172 #define DRV_NAME "starfire" 7173 #define DRV_VERSION "2.1" 7174 #define DRV_RELDATE "July 6, 2008" 7175 #define HAS_BROKEN_FIRMWARE 7176 #ifdef HAS_BROKEN_FIRMWARE 7177 #define PADDING_MASK 3 7178 #endif 7179 #define ZEROCOPY 7180 #if IS_ENABLED(CONFIG_VLAN_8021Q) 7181 #define VLAN_SUPPORT 7182 #endif 7183 #define PKT_BUF_SZ 1536 7184 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 7185 #else 7186 #endif 7187 #ifdef __sparc__ 7188 #define DMA_BURST_SIZE 64 7189 #else 7190 #define DMA_BURST_SIZE 128 7191 #endif 7192 #define RX_RING_SIZE 256 7193 #define TX_RING_SIZE 32 7194 #define DONE_Q_SIZE 1024 7195 #define QUEUE_ALIGN 256 7196 #if RX_RING_SIZE > 256 7197 #define RX_Q_ENTRIES Rx2048QEntries 7198 #else 7199 #define RX_Q_ENTRIES Rx256QEntries 7200 #endif 7201 #define TX_TIMEOUT (2 * HZ) 7202 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 7203 #define ADDR_64BITS 7204 #define netdrv_addr_t __le64 7205 #define cpu_to_dma(x) cpu_to_le64(x) 7206 #define dma_to_cpu(x) le64_to_cpu(x) 7207 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 7208 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 7209 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 7210 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 7211 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 7212 #else 7213 #define netdrv_addr_t __le32 7214 #define cpu_to_dma(x) cpu_to_le32(x) 7215 #define dma_to_cpu(x) le32_to_cpu(x) 7216 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 7217 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 7218 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 7219 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 7220 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 7221 #endif 7222 #define skb_first_frag_len(skb) skb_headlen(skb) 7223 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 7224 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 7225 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 7226 #ifdef VLAN_SUPPORT 7227 #define RxComplType RxComplType3 7228 #else 7229 #define RxComplType RxComplType2 7230 #endif 7231 #ifdef ADDR_64BITS 7232 #define TX_DESC_TYPE TxDescType2 7233 #else 7234 #define TX_DESC_TYPE TxDescType1 7235 #endif 7236 #define TX_DESC_SPACING TxDescSpaceUnlim 7237 #if 0 7238 #endif 7239 #define PHY_CNT 2 7240 #ifdef VLAN_SUPPORT 7241 #endif 7242 #ifdef VLAN_SUPPORT 7243 #endif 7244 #ifdef VLAN_SUPPORT 7245 #endif 7246 #ifndef MODULE 7247 #endif 7248 #ifdef ZEROCOPY 7249 #endif 7250 #ifdef VLAN_SUPPORT 7251 #endif 7252 #ifdef ADDR_64BITS 7253 #endif 7254 #if ! defined(final_version) 7255 #endif 7256 #ifdef VLAN_SUPPORT 7257 #endif 7258 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 7259 #endif 7260 #ifndef final_version 7261 #endif 7262 #ifdef VLAN_SUPPORT 7263 #endif 7264 #ifdef VLAN_SUPPORT 7265 #endif 7266 #ifdef VLAN_SUPPORT 7267 #endif 7268 #ifdef VLAN_SUPPORT 7269 #endif 7270 #ifdef CONFIG_PM 7271 /* LDV_COMMENT_END_PREP */ 7272 /* LDV_COMMENT_FUNCTION_CALL Function from field "resume" from driver structure with callbacks "starfire_driver" */ 7273 ldv_handler_precall(); 7274 starfire_resume( var_group6); 7275 /* LDV_COMMENT_BEGIN_PREP */ 7276 #endif 7277 #ifdef CONFIG_PM 7278 #endif 7279 #ifdef MODULE 7280 #endif 7281 /* LDV_COMMENT_END_PREP */ 7282 7283 7284 7285 7286 } 7287 7288 break; 7289 case 21: { 7290 7291 /** CALLBACK SECTION request_irq **/ 7292 LDV_IN_INTERRUPT=2; 7293 7294 /* content: static irqreturn_t intr_handler(int irq, void *dev_instance)*/ 7295 /* LDV_COMMENT_BEGIN_PREP */ 7296 #define DRV_NAME "starfire" 7297 #define DRV_VERSION "2.1" 7298 #define DRV_RELDATE "July 6, 2008" 7299 #define HAS_BROKEN_FIRMWARE 7300 #ifdef HAS_BROKEN_FIRMWARE 7301 #define PADDING_MASK 3 7302 #endif 7303 #define ZEROCOPY 7304 #if IS_ENABLED(CONFIG_VLAN_8021Q) 7305 #define VLAN_SUPPORT 7306 #endif 7307 #define PKT_BUF_SZ 1536 7308 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 7309 #else 7310 #endif 7311 #ifdef __sparc__ 7312 #define DMA_BURST_SIZE 64 7313 #else 7314 #define DMA_BURST_SIZE 128 7315 #endif 7316 #define RX_RING_SIZE 256 7317 #define TX_RING_SIZE 32 7318 #define DONE_Q_SIZE 1024 7319 #define QUEUE_ALIGN 256 7320 #if RX_RING_SIZE > 256 7321 #define RX_Q_ENTRIES Rx2048QEntries 7322 #else 7323 #define RX_Q_ENTRIES Rx256QEntries 7324 #endif 7325 #define TX_TIMEOUT (2 * HZ) 7326 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 7327 #define ADDR_64BITS 7328 #define netdrv_addr_t __le64 7329 #define cpu_to_dma(x) cpu_to_le64(x) 7330 #define dma_to_cpu(x) le64_to_cpu(x) 7331 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 7332 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 7333 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 7334 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 7335 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 7336 #else 7337 #define netdrv_addr_t __le32 7338 #define cpu_to_dma(x) cpu_to_le32(x) 7339 #define dma_to_cpu(x) le32_to_cpu(x) 7340 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 7341 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 7342 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 7343 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 7344 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 7345 #endif 7346 #define skb_first_frag_len(skb) skb_headlen(skb) 7347 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 7348 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 7349 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 7350 #ifdef VLAN_SUPPORT 7351 #define RxComplType RxComplType3 7352 #else 7353 #define RxComplType RxComplType2 7354 #endif 7355 #ifdef ADDR_64BITS 7356 #define TX_DESC_TYPE TxDescType2 7357 #else 7358 #define TX_DESC_TYPE TxDescType1 7359 #endif 7360 #define TX_DESC_SPACING TxDescSpaceUnlim 7361 #if 0 7362 #endif 7363 #define PHY_CNT 2 7364 #ifdef VLAN_SUPPORT 7365 #endif 7366 #ifdef VLAN_SUPPORT 7367 #endif 7368 #ifdef VLAN_SUPPORT 7369 #endif 7370 #ifndef MODULE 7371 #endif 7372 #ifdef ZEROCOPY 7373 #endif 7374 #ifdef VLAN_SUPPORT 7375 #endif 7376 #ifdef ADDR_64BITS 7377 #endif 7378 #if ! defined(final_version) 7379 #endif 7380 #ifdef VLAN_SUPPORT 7381 #endif 7382 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 7383 #endif 7384 /* LDV_COMMENT_END_PREP */ 7385 /* LDV_COMMENT_FUNCTION_CALL */ 7386 ldv_handler_precall(); 7387 intr_handler( var_intr_handler_10_p0, var_intr_handler_10_p1); 7388 /* LDV_COMMENT_BEGIN_PREP */ 7389 #ifndef final_version 7390 #endif 7391 #ifdef VLAN_SUPPORT 7392 #endif 7393 #ifdef VLAN_SUPPORT 7394 #endif 7395 #ifdef VLAN_SUPPORT 7396 #endif 7397 #ifdef VLAN_SUPPORT 7398 #endif 7399 #ifdef CONFIG_PM 7400 #endif 7401 #ifdef CONFIG_PM 7402 #endif 7403 #ifdef MODULE 7404 #endif 7405 /* LDV_COMMENT_END_PREP */ 7406 LDV_IN_INTERRUPT=1; 7407 7408 7409 7410 } 7411 7412 break; 7413 default: break; 7414 7415 } 7416 7417 } 7418 7419 ldv_module_exit: 7420 7421 /** INIT: init_type: ST_MODULE_EXIT **/ 7422 /* content: static void __exit starfire_cleanup (void)*/ 7423 /* LDV_COMMENT_BEGIN_PREP */ 7424 #define DRV_NAME "starfire" 7425 #define DRV_VERSION "2.1" 7426 #define DRV_RELDATE "July 6, 2008" 7427 #define HAS_BROKEN_FIRMWARE 7428 #ifdef HAS_BROKEN_FIRMWARE 7429 #define PADDING_MASK 3 7430 #endif 7431 #define ZEROCOPY 7432 #if IS_ENABLED(CONFIG_VLAN_8021Q) 7433 #define VLAN_SUPPORT 7434 #endif 7435 #define PKT_BUF_SZ 1536 7436 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) 7437 #else 7438 #endif 7439 #ifdef __sparc__ 7440 #define DMA_BURST_SIZE 64 7441 #else 7442 #define DMA_BURST_SIZE 128 7443 #endif 7444 #define RX_RING_SIZE 256 7445 #define TX_RING_SIZE 32 7446 #define DONE_Q_SIZE 1024 7447 #define QUEUE_ALIGN 256 7448 #if RX_RING_SIZE > 256 7449 #define RX_Q_ENTRIES Rx2048QEntries 7450 #else 7451 #define RX_Q_ENTRIES Rx256QEntries 7452 #endif 7453 #define TX_TIMEOUT (2 * HZ) 7454 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 7455 #define ADDR_64BITS 7456 #define netdrv_addr_t __le64 7457 #define cpu_to_dma(x) cpu_to_le64(x) 7458 #define dma_to_cpu(x) le64_to_cpu(x) 7459 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit 7460 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit 7461 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit 7462 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit 7463 #define RX_DESC_ADDR_SIZE RxDescAddr64bit 7464 #else 7465 #define netdrv_addr_t __le32 7466 #define cpu_to_dma(x) cpu_to_le32(x) 7467 #define dma_to_cpu(x) le32_to_cpu(x) 7468 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit 7469 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit 7470 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit 7471 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit 7472 #define RX_DESC_ADDR_SIZE RxDescAddr32bit 7473 #endif 7474 #define skb_first_frag_len(skb) skb_headlen(skb) 7475 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1) 7476 #define FIRMWARE_RX "adaptec/starfire_rx.bin" 7477 #define FIRMWARE_TX "adaptec/starfire_tx.bin" 7478 #ifdef VLAN_SUPPORT 7479 #define RxComplType RxComplType3 7480 #else 7481 #define RxComplType RxComplType2 7482 #endif 7483 #ifdef ADDR_64BITS 7484 #define TX_DESC_TYPE TxDescType2 7485 #else 7486 #define TX_DESC_TYPE TxDescType1 7487 #endif 7488 #define TX_DESC_SPACING TxDescSpaceUnlim 7489 #if 0 7490 #endif 7491 #define PHY_CNT 2 7492 #ifdef VLAN_SUPPORT 7493 #endif 7494 #ifdef VLAN_SUPPORT 7495 #endif 7496 #ifdef VLAN_SUPPORT 7497 #endif 7498 #ifndef MODULE 7499 #endif 7500 #ifdef ZEROCOPY 7501 #endif 7502 #ifdef VLAN_SUPPORT 7503 #endif 7504 #ifdef ADDR_64BITS 7505 #endif 7506 #if ! defined(final_version) 7507 #endif 7508 #ifdef VLAN_SUPPORT 7509 #endif 7510 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 7511 #endif 7512 #ifndef final_version 7513 #endif 7514 #ifdef VLAN_SUPPORT 7515 #endif 7516 #ifdef VLAN_SUPPORT 7517 #endif 7518 #ifdef VLAN_SUPPORT 7519 #endif 7520 #ifdef VLAN_SUPPORT 7521 #endif 7522 #ifdef CONFIG_PM 7523 #endif 7524 #ifdef CONFIG_PM 7525 #endif 7526 #ifdef MODULE 7527 #endif 7528 /* LDV_COMMENT_END_PREP */ 7529 /* LDV_COMMENT_FUNCTION_CALL Kernel calls driver release function before driver will be uploaded from kernel. This function declared as "MODULE_EXIT(function name)". */ 7530 ldv_handler_precall(); 7531 starfire_cleanup(); 7532 7533 /* LDV_COMMENT_FUNCTION_CALL Checks that all resources and locks are correctly released before the driver will be unloaded. */ 7534 ldv_final: ldv_check_final_state(); 7535 7536 /* LDV_COMMENT_END_FUNCTION_CALL_SECTION */ 7537 return; 7538 7539 } 7540 #endif 7541 7542 /* LDV_COMMENT_END_MAIN */ 7543 7544 #line 10 "/home/ldvuser/ldv/ref_launches/work/current--X--drivers--X--defaultlinux-4.10-rc1.tar.xz--X--331_1a--X--cpachecker/linux-4.10-rc1.tar.xz/csd_deg_dscv/12798/dscv_tempdir/dscv/ri/331_1a/drivers/net/ethernet/adaptec/starfire.o.c.prepared"
1 2 #include <verifier/rcv.h> 3 #include <kernel-model/ERR.inc> 4 5 int LDV_DMA_MAP_CALLS = 0; 6 7 /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_dma_map_page') maps page */ 8 void ldv_dma_map_page(void) { 9 /* LDV_COMMENT_ASSERT Check that previos dma_mapping call was checked */ 10 ldv_assert(LDV_DMA_MAP_CALLS == 0); 11 /* LDV_COMMENT_CHANGE_STATE Increase dma_mapping counter */ 12 LDV_DMA_MAP_CALLS++; 13 } 14 15 /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_dma_mapping_error') unmaps page */ 16 void ldv_dma_mapping_error(void) { 17 /* LDV_COMMENT_ASSERT No dma_mapping calls to verify */ 18 ldv_assert(LDV_DMA_MAP_CALLS != 0); 19 /* LDV_COMMENT_CHANGE_STATE Check that previos dma_mapping call was checked */ 20 LDV_DMA_MAP_CALLS--; 21 } 22 23 /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_check_final_state') Check that all module reference counters have their initial values at the end */ 24 void ldv_check_final_state(void) { 25 /* LDV_COMMENT_ASSERT All incremented module reference counters should be decremented before module unloading*/ 26 ldv_assert(LDV_DMA_MAP_CALLS == 0); 27 }
1 #ifndef _LDV_RCV_H_ 2 #define _LDV_RCV_H_ 3 4 /* If expr evaluates to zero, ldv_assert() causes a program to reach the error 5 label like the standard assert(). */ 6 #define ldv_assert(expr) ((expr) ? 0 : ldv_error()) 7 8 /* The error label wrapper. It is used because of some static verifiers (like 9 BLAST) don't accept multiple error labels through a program. */ 10 static inline void ldv_error(void) 11 { 12 LDV_ERROR: goto LDV_ERROR; 13 } 14 15 /* If expr evaluates to zero, ldv_assume() causes an infinite loop that is 16 avoided by verifiers. */ 17 #define ldv_assume(expr) ((expr) ? 0 : ldv_stop()) 18 19 /* Infinite loop, that causes verifiers to skip such paths. */ 20 static inline void ldv_stop(void) { 21 LDV_STOP: goto LDV_STOP; 22 } 23 24 /* Special nondeterministic functions. */ 25 int ldv_undef_int(void); 26 void *ldv_undef_ptr(void); 27 unsigned long ldv_undef_ulong(void); 28 long ldv_undef_long(void); 29 /* Return nondeterministic negative integer number. */ 30 static inline int ldv_undef_int_negative(void) 31 { 32 int ret = ldv_undef_int(); 33 34 ldv_assume(ret < 0); 35 36 return ret; 37 } 38 /* Return nondeterministic nonpositive integer number. */ 39 static inline int ldv_undef_int_nonpositive(void) 40 { 41 int ret = ldv_undef_int(); 42 43 ldv_assume(ret <= 0); 44 45 return ret; 46 } 47 48 /* Add explicit model for __builin_expect GCC function. Without the model a 49 return value will be treated as nondetermined by verifiers. */ 50 static inline long __builtin_expect(long exp, long c) 51 { 52 return exp; 53 } 54 55 /* This function causes the program to exit abnormally. GCC implements this 56 function by using a target-dependent mechanism (such as intentionally executing 57 an illegal instruction) or by calling abort. The mechanism used may vary from 58 release to release so you should not rely on any particular implementation. 59 http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html */ 60 static inline void __builtin_trap(void) 61 { 62 ldv_assert(0); 63 } 64 65 /* The constant is for simulating an error of ldv_undef_ptr() function. */ 66 #define LDV_PTR_MAX 2012 67 68 #endif /* _LDV_RCV_H_ */
1 /* 2 * device.h - generic, centralized driver model 3 * 4 * Copyright (c) 2001-2003 Patrick Mochel <mochel@osdl.org> 5 * Copyright (c) 2004-2009 Greg Kroah-Hartman <gregkh@suse.de> 6 * Copyright (c) 2008-2009 Novell Inc. 7 * 8 * This file is released under the GPLv2 9 * 10 * See Documentation/driver-model/ for more information. 11 */ 12 13 #ifndef _DEVICE_H_ 14 #define _DEVICE_H_ 15 16 #include <linux/ioport.h> 17 #include <linux/kobject.h> 18 #include <linux/klist.h> 19 #include <linux/list.h> 20 #include <linux/lockdep.h> 21 #include <linux/compiler.h> 22 #include <linux/types.h> 23 #include <linux/mutex.h> 24 #include <linux/pinctrl/devinfo.h> 25 #include <linux/pm.h> 26 #include <linux/atomic.h> 27 #include <linux/ratelimit.h> 28 #include <linux/uidgid.h> 29 #include <linux/gfp.h> 30 #include <asm/device.h> 31 32 struct device; 33 struct device_private; 34 struct device_driver; 35 struct driver_private; 36 struct module; 37 struct class; 38 struct subsys_private; 39 struct bus_type; 40 struct device_node; 41 struct fwnode_handle; 42 struct iommu_ops; 43 struct iommu_group; 44 struct iommu_fwspec; 45 46 struct bus_attribute { 47 struct attribute attr; 48 ssize_t (*show)(struct bus_type *bus, char *buf); 49 ssize_t (*store)(struct bus_type *bus, const char *buf, size_t count); 50 }; 51 52 #define BUS_ATTR(_name, _mode, _show, _store) \ 53 struct bus_attribute bus_attr_##_name = __ATTR(_name, _mode, _show, _store) 54 #define BUS_ATTR_RW(_name) \ 55 struct bus_attribute bus_attr_##_name = __ATTR_RW(_name) 56 #define BUS_ATTR_RO(_name) \ 57 struct bus_attribute bus_attr_##_name = __ATTR_RO(_name) 58 59 extern int __must_check bus_create_file(struct bus_type *, 60 struct bus_attribute *); 61 extern void bus_remove_file(struct bus_type *, struct bus_attribute *); 62 63 /** 64 * struct bus_type - The bus type of the device 65 * 66 * @name: The name of the bus. 67 * @dev_name: Used for subsystems to enumerate devices like ("foo%u", dev->id). 68 * @dev_root: Default device to use as the parent. 69 * @dev_attrs: Default attributes of the devices on the bus. 70 * @bus_groups: Default attributes of the bus. 71 * @dev_groups: Default attributes of the devices on the bus. 72 * @drv_groups: Default attributes of the device drivers on the bus. 73 * @match: Called, perhaps multiple times, whenever a new device or driver 74 * is added for this bus. It should return a positive value if the 75 * given device can be handled by the given driver and zero 76 * otherwise. It may also return error code if determining that 77 * the driver supports the device is not possible. In case of 78 * -EPROBE_DEFER it will queue the device for deferred probing. 79 * @uevent: Called when a device is added, removed, or a few other things 80 * that generate uevents to add the environment variables. 81 * @probe: Called when a new device or driver add to this bus, and callback 82 * the specific driver's probe to initial the matched device. 83 * @remove: Called when a device removed from this bus. 84 * @shutdown: Called at shut-down time to quiesce the device. 85 * 86 * @online: Called to put the device back online (after offlining it). 87 * @offline: Called to put the device offline for hot-removal. May fail. 88 * 89 * @suspend: Called when a device on this bus wants to go to sleep mode. 90 * @resume: Called to bring a device on this bus out of sleep mode. 91 * @pm: Power management operations of this bus, callback the specific 92 * device driver's pm-ops. 93 * @iommu_ops: IOMMU specific operations for this bus, used to attach IOMMU 94 * driver implementations to a bus and allow the driver to do 95 * bus-specific setup 96 * @p: The private data of the driver core, only the driver core can 97 * touch this. 98 * @lock_key: Lock class key for use by the lock validator 99 * 100 * A bus is a channel between the processor and one or more devices. For the 101 * purposes of the device model, all devices are connected via a bus, even if 102 * it is an internal, virtual, "platform" bus. Buses can plug into each other. 103 * A USB controller is usually a PCI device, for example. The device model 104 * represents the actual connections between buses and the devices they control. 105 * A bus is represented by the bus_type structure. It contains the name, the 106 * default attributes, the bus' methods, PM operations, and the driver core's 107 * private data. 108 */ 109 struct bus_type { 110 const char *name; 111 const char *dev_name; 112 struct device *dev_root; 113 struct device_attribute *dev_attrs; /* use dev_groups instead */ 114 const struct attribute_group **bus_groups; 115 const struct attribute_group **dev_groups; 116 const struct attribute_group **drv_groups; 117 118 int (*match)(struct device *dev, struct device_driver *drv); 119 int (*uevent)(struct device *dev, struct kobj_uevent_env *env); 120 int (*probe)(struct device *dev); 121 int (*remove)(struct device *dev); 122 void (*shutdown)(struct device *dev); 123 124 int (*online)(struct device *dev); 125 int (*offline)(struct device *dev); 126 127 int (*suspend)(struct device *dev, pm_message_t state); 128 int (*resume)(struct device *dev); 129 130 const struct dev_pm_ops *pm; 131 132 const struct iommu_ops *iommu_ops; 133 134 struct subsys_private *p; 135 struct lock_class_key lock_key; 136 }; 137 138 extern int __must_check bus_register(struct bus_type *bus); 139 140 extern void bus_unregister(struct bus_type *bus); 141 142 extern int __must_check bus_rescan_devices(struct bus_type *bus); 143 144 /* iterator helpers for buses */ 145 struct subsys_dev_iter { 146 struct klist_iter ki; 147 const struct device_type *type; 148 }; 149 void subsys_dev_iter_init(struct subsys_dev_iter *iter, 150 struct bus_type *subsys, 151 struct device *start, 152 const struct device_type *type); 153 struct device *subsys_dev_iter_next(struct subsys_dev_iter *iter); 154 void subsys_dev_iter_exit(struct subsys_dev_iter *iter); 155 156 int bus_for_each_dev(struct bus_type *bus, struct device *start, void *data, 157 int (*fn)(struct device *dev, void *data)); 158 struct device *bus_find_device(struct bus_type *bus, struct device *start, 159 void *data, 160 int (*match)(struct device *dev, void *data)); 161 struct device *bus_find_device_by_name(struct bus_type *bus, 162 struct device *start, 163 const char *name); 164 struct device *subsys_find_device_by_id(struct bus_type *bus, unsigned int id, 165 struct device *hint); 166 int bus_for_each_drv(struct bus_type *bus, struct device_driver *start, 167 void *data, int (*fn)(struct device_driver *, void *)); 168 void bus_sort_breadthfirst(struct bus_type *bus, 169 int (*compare)(const struct device *a, 170 const struct device *b)); 171 /* 172 * Bus notifiers: Get notified of addition/removal of devices 173 * and binding/unbinding of drivers to devices. 174 * In the long run, it should be a replacement for the platform 175 * notify hooks. 176 */ 177 struct notifier_block; 178 179 extern int bus_register_notifier(struct bus_type *bus, 180 struct notifier_block *nb); 181 extern int bus_unregister_notifier(struct bus_type *bus, 182 struct notifier_block *nb); 183 184 /* All 4 notifers below get called with the target struct device * 185 * as an argument. Note that those functions are likely to be called 186 * with the device lock held in the core, so be careful. 187 */ 188 #define BUS_NOTIFY_ADD_DEVICE 0x00000001 /* device added */ 189 #define BUS_NOTIFY_DEL_DEVICE 0x00000002 /* device to be removed */ 190 #define BUS_NOTIFY_REMOVED_DEVICE 0x00000003 /* device removed */ 191 #define BUS_NOTIFY_BIND_DRIVER 0x00000004 /* driver about to be 192 bound */ 193 #define BUS_NOTIFY_BOUND_DRIVER 0x00000005 /* driver bound to device */ 194 #define BUS_NOTIFY_UNBIND_DRIVER 0x00000006 /* driver about to be 195 unbound */ 196 #define BUS_NOTIFY_UNBOUND_DRIVER 0x00000007 /* driver is unbound 197 from the device */ 198 #define BUS_NOTIFY_DRIVER_NOT_BOUND 0x00000008 /* driver fails to be bound */ 199 200 extern struct kset *bus_get_kset(struct bus_type *bus); 201 extern struct klist *bus_get_device_klist(struct bus_type *bus); 202 203 /** 204 * enum probe_type - device driver probe type to try 205 * Device drivers may opt in for special handling of their 206 * respective probe routines. This tells the core what to 207 * expect and prefer. 208 * 209 * @PROBE_DEFAULT_STRATEGY: Used by drivers that work equally well 210 * whether probed synchronously or asynchronously. 211 * @PROBE_PREFER_ASYNCHRONOUS: Drivers for "slow" devices which 212 * probing order is not essential for booting the system may 213 * opt into executing their probes asynchronously. 214 * @PROBE_FORCE_SYNCHRONOUS: Use this to annotate drivers that need 215 * their probe routines to run synchronously with driver and 216 * device registration (with the exception of -EPROBE_DEFER 217 * handling - re-probing always ends up being done asynchronously). 218 * 219 * Note that the end goal is to switch the kernel to use asynchronous 220 * probing by default, so annotating drivers with 221 * %PROBE_PREFER_ASYNCHRONOUS is a temporary measure that allows us 222 * to speed up boot process while we are validating the rest of the 223 * drivers. 224 */ 225 enum probe_type { 226 PROBE_DEFAULT_STRATEGY, 227 PROBE_PREFER_ASYNCHRONOUS, 228 PROBE_FORCE_SYNCHRONOUS, 229 }; 230 231 /** 232 * struct device_driver - The basic device driver structure 233 * @name: Name of the device driver. 234 * @bus: The bus which the device of this driver belongs to. 235 * @owner: The module owner. 236 * @mod_name: Used for built-in modules. 237 * @suppress_bind_attrs: Disables bind/unbind via sysfs. 238 * @probe_type: Type of the probe (synchronous or asynchronous) to use. 239 * @of_match_table: The open firmware table. 240 * @acpi_match_table: The ACPI match table. 241 * @probe: Called to query the existence of a specific device, 242 * whether this driver can work with it, and bind the driver 243 * to a specific device. 244 * @remove: Called when the device is removed from the system to 245 * unbind a device from this driver. 246 * @shutdown: Called at shut-down time to quiesce the device. 247 * @suspend: Called to put the device to sleep mode. Usually to a 248 * low power state. 249 * @resume: Called to bring a device from sleep mode. 250 * @groups: Default attributes that get created by the driver core 251 * automatically. 252 * @pm: Power management operations of the device which matched 253 * this driver. 254 * @p: Driver core's private data, no one other than the driver 255 * core can touch this. 256 * 257 * The device driver-model tracks all of the drivers known to the system. 258 * The main reason for this tracking is to enable the driver core to match 259 * up drivers with new devices. Once drivers are known objects within the 260 * system, however, a number of other things become possible. Device drivers 261 * can export information and configuration variables that are independent 262 * of any specific device. 263 */ 264 struct device_driver { 265 const char *name; 266 struct bus_type *bus; 267 268 struct module *owner; 269 const char *mod_name; /* used for built-in modules */ 270 271 bool suppress_bind_attrs; /* disables bind/unbind via sysfs */ 272 enum probe_type probe_type; 273 274 const struct of_device_id *of_match_table; 275 const struct acpi_device_id *acpi_match_table; 276 277 int (*probe) (struct device *dev); 278 int (*remove) (struct device *dev); 279 void (*shutdown) (struct device *dev); 280 int (*suspend) (struct device *dev, pm_message_t state); 281 int (*resume) (struct device *dev); 282 const struct attribute_group **groups; 283 284 const struct dev_pm_ops *pm; 285 286 struct driver_private *p; 287 }; 288 289 290 extern int __must_check driver_register(struct device_driver *drv); 291 extern void driver_unregister(struct device_driver *drv); 292 293 extern struct device_driver *driver_find(const char *name, 294 struct bus_type *bus); 295 extern int driver_probe_done(void); 296 extern void wait_for_device_probe(void); 297 298 299 /* sysfs interface for exporting driver attributes */ 300 301 struct driver_attribute { 302 struct attribute attr; 303 ssize_t (*show)(struct device_driver *driver, char *buf); 304 ssize_t (*store)(struct device_driver *driver, const char *buf, 305 size_t count); 306 }; 307 308 #define DRIVER_ATTR(_name, _mode, _show, _store) \ 309 struct driver_attribute driver_attr_##_name = __ATTR(_name, _mode, _show, _store) 310 #define DRIVER_ATTR_RW(_name) \ 311 struct driver_attribute driver_attr_##_name = __ATTR_RW(_name) 312 #define DRIVER_ATTR_RO(_name) \ 313 struct driver_attribute driver_attr_##_name = __ATTR_RO(_name) 314 #define DRIVER_ATTR_WO(_name) \ 315 struct driver_attribute driver_attr_##_name = __ATTR_WO(_name) 316 317 extern int __must_check driver_create_file(struct device_driver *driver, 318 const struct driver_attribute *attr); 319 extern void driver_remove_file(struct device_driver *driver, 320 const struct driver_attribute *attr); 321 322 extern int __must_check driver_for_each_device(struct device_driver *drv, 323 struct device *start, 324 void *data, 325 int (*fn)(struct device *dev, 326 void *)); 327 struct device *driver_find_device(struct device_driver *drv, 328 struct device *start, void *data, 329 int (*match)(struct device *dev, void *data)); 330 331 /** 332 * struct subsys_interface - interfaces to device functions 333 * @name: name of the device function 334 * @subsys: subsytem of the devices to attach to 335 * @node: the list of functions registered at the subsystem 336 * @add_dev: device hookup to device function handler 337 * @remove_dev: device hookup to device function handler 338 * 339 * Simple interfaces attached to a subsystem. Multiple interfaces can 340 * attach to a subsystem and its devices. Unlike drivers, they do not 341 * exclusively claim or control devices. Interfaces usually represent 342 * a specific functionality of a subsystem/class of devices. 343 */ 344 struct subsys_interface { 345 const char *name; 346 struct bus_type *subsys; 347 struct list_head node; 348 int (*add_dev)(struct device *dev, struct subsys_interface *sif); 349 void (*remove_dev)(struct device *dev, struct subsys_interface *sif); 350 }; 351 352 int subsys_interface_register(struct subsys_interface *sif); 353 void subsys_interface_unregister(struct subsys_interface *sif); 354 355 int subsys_system_register(struct bus_type *subsys, 356 const struct attribute_group **groups); 357 int subsys_virtual_register(struct bus_type *subsys, 358 const struct attribute_group **groups); 359 360 /** 361 * struct class - device classes 362 * @name: Name of the class. 363 * @owner: The module owner. 364 * @class_attrs: Default attributes of this class. 365 * @class_groups: Default attributes of this class. 366 * @dev_groups: Default attributes of the devices that belong to the class. 367 * @dev_kobj: The kobject that represents this class and links it into the hierarchy. 368 * @dev_uevent: Called when a device is added, removed from this class, or a 369 * few other things that generate uevents to add the environment 370 * variables. 371 * @devnode: Callback to provide the devtmpfs. 372 * @class_release: Called to release this class. 373 * @dev_release: Called to release the device. 374 * @suspend: Used to put the device to sleep mode, usually to a low power 375 * state. 376 * @resume: Used to bring the device from the sleep mode. 377 * @ns_type: Callbacks so sysfs can detemine namespaces. 378 * @namespace: Namespace of the device belongs to this class. 379 * @pm: The default device power management operations of this class. 380 * @p: The private data of the driver core, no one other than the 381 * driver core can touch this. 382 * 383 * A class is a higher-level view of a device that abstracts out low-level 384 * implementation details. Drivers may see a SCSI disk or an ATA disk, but, 385 * at the class level, they are all simply disks. Classes allow user space 386 * to work with devices based on what they do, rather than how they are 387 * connected or how they work. 388 */ 389 struct class { 390 const char *name; 391 struct module *owner; 392 393 struct class_attribute *class_attrs; 394 const struct attribute_group **class_groups; 395 const struct attribute_group **dev_groups; 396 struct kobject *dev_kobj; 397 398 int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env); 399 char *(*devnode)(struct device *dev, umode_t *mode); 400 401 void (*class_release)(struct class *class); 402 void (*dev_release)(struct device *dev); 403 404 int (*suspend)(struct device *dev, pm_message_t state); 405 int (*resume)(struct device *dev); 406 407 const struct kobj_ns_type_operations *ns_type; 408 const void *(*namespace)(struct device *dev); 409 410 const struct dev_pm_ops *pm; 411 412 struct subsys_private *p; 413 }; 414 415 struct class_dev_iter { 416 struct klist_iter ki; 417 const struct device_type *type; 418 }; 419 420 extern struct kobject *sysfs_dev_block_kobj; 421 extern struct kobject *sysfs_dev_char_kobj; 422 extern int __must_check __class_register(struct class *class, 423 struct lock_class_key *key); 424 extern void class_unregister(struct class *class); 425 426 /* This is a #define to keep the compiler from merging different 427 * instances of the __key variable */ 428 #define class_register(class) \ 429 ({ \ 430 static struct lock_class_key __key; \ 431 __class_register(class, &__key); \ 432 }) 433 434 struct class_compat; 435 struct class_compat *class_compat_register(const char *name); 436 void class_compat_unregister(struct class_compat *cls); 437 int class_compat_create_link(struct class_compat *cls, struct device *dev, 438 struct device *device_link); 439 void class_compat_remove_link(struct class_compat *cls, struct device *dev, 440 struct device *device_link); 441 442 extern void class_dev_iter_init(struct class_dev_iter *iter, 443 struct class *class, 444 struct device *start, 445 const struct device_type *type); 446 extern struct device *class_dev_iter_next(struct class_dev_iter *iter); 447 extern void class_dev_iter_exit(struct class_dev_iter *iter); 448 449 extern int class_for_each_device(struct class *class, struct device *start, 450 void *data, 451 int (*fn)(struct device *dev, void *data)); 452 extern struct device *class_find_device(struct class *class, 453 struct device *start, const void *data, 454 int (*match)(struct device *, const void *)); 455 456 struct class_attribute { 457 struct attribute attr; 458 ssize_t (*show)(struct class *class, struct class_attribute *attr, 459 char *buf); 460 ssize_t (*store)(struct class *class, struct class_attribute *attr, 461 const char *buf, size_t count); 462 }; 463 464 #define CLASS_ATTR(_name, _mode, _show, _store) \ 465 struct class_attribute class_attr_##_name = __ATTR(_name, _mode, _show, _store) 466 #define CLASS_ATTR_RW(_name) \ 467 struct class_attribute class_attr_##_name = __ATTR_RW(_name) 468 #define CLASS_ATTR_RO(_name) \ 469 struct class_attribute class_attr_##_name = __ATTR_RO(_name) 470 #define CLASS_ATTR_WO(_name) \ 471 struct class_attribute class_attr_##_name = __ATTR_WO(_name) 472 473 extern int __must_check class_create_file_ns(struct class *class, 474 const struct class_attribute *attr, 475 const void *ns); 476 extern void class_remove_file_ns(struct class *class, 477 const struct class_attribute *attr, 478 const void *ns); 479 480 static inline int __must_check class_create_file(struct class *class, 481 const struct class_attribute *attr) 482 { 483 return class_create_file_ns(class, attr, NULL); 484 } 485 486 static inline void class_remove_file(struct class *class, 487 const struct class_attribute *attr) 488 { 489 return class_remove_file_ns(class, attr, NULL); 490 } 491 492 /* Simple class attribute that is just a static string */ 493 struct class_attribute_string { 494 struct class_attribute attr; 495 char *str; 496 }; 497 498 /* Currently read-only only */ 499 #define _CLASS_ATTR_STRING(_name, _mode, _str) \ 500 { __ATTR(_name, _mode, show_class_attr_string, NULL), _str } 501 #define CLASS_ATTR_STRING(_name, _mode, _str) \ 502 struct class_attribute_string class_attr_##_name = \ 503 _CLASS_ATTR_STRING(_name, _mode, _str) 504 505 extern ssize_t show_class_attr_string(struct class *class, struct class_attribute *attr, 506 char *buf); 507 508 struct class_interface { 509 struct list_head node; 510 struct class *class; 511 512 int (*add_dev) (struct device *, struct class_interface *); 513 void (*remove_dev) (struct device *, struct class_interface *); 514 }; 515 516 extern int __must_check class_interface_register(struct class_interface *); 517 extern void class_interface_unregister(struct class_interface *); 518 519 extern struct class * __must_check __class_create(struct module *owner, 520 const char *name, 521 struct lock_class_key *key); 522 extern void class_destroy(struct class *cls); 523 524 /* This is a #define to keep the compiler from merging different 525 * instances of the __key variable */ 526 #define class_create(owner, name) \ 527 ({ \ 528 static struct lock_class_key __key; \ 529 __class_create(owner, name, &__key); \ 530 }) 531 532 /* 533 * The type of device, "struct device" is embedded in. A class 534 * or bus can contain devices of different types 535 * like "partitions" and "disks", "mouse" and "event". 536 * This identifies the device type and carries type-specific 537 * information, equivalent to the kobj_type of a kobject. 538 * If "name" is specified, the uevent will contain it in 539 * the DEVTYPE variable. 540 */ 541 struct device_type { 542 const char *name; 543 const struct attribute_group **groups; 544 int (*uevent)(struct device *dev, struct kobj_uevent_env *env); 545 char *(*devnode)(struct device *dev, umode_t *mode, 546 kuid_t *uid, kgid_t *gid); 547 void (*release)(struct device *dev); 548 549 const struct dev_pm_ops *pm; 550 }; 551 552 /* interface for exporting device attributes */ 553 struct device_attribute { 554 struct attribute attr; 555 ssize_t (*show)(struct device *dev, struct device_attribute *attr, 556 char *buf); 557 ssize_t (*store)(struct device *dev, struct device_attribute *attr, 558 const char *buf, size_t count); 559 }; 560 561 struct dev_ext_attribute { 562 struct device_attribute attr; 563 void *var; 564 }; 565 566 ssize_t device_show_ulong(struct device *dev, struct device_attribute *attr, 567 char *buf); 568 ssize_t device_store_ulong(struct device *dev, struct device_attribute *attr, 569 const char *buf, size_t count); 570 ssize_t device_show_int(struct device *dev, struct device_attribute *attr, 571 char *buf); 572 ssize_t device_store_int(struct device *dev, struct device_attribute *attr, 573 const char *buf, size_t count); 574 ssize_t device_show_bool(struct device *dev, struct device_attribute *attr, 575 char *buf); 576 ssize_t device_store_bool(struct device *dev, struct device_attribute *attr, 577 const char *buf, size_t count); 578 579 #define DEVICE_ATTR(_name, _mode, _show, _store) \ 580 struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store) 581 #define DEVICE_ATTR_RW(_name) \ 582 struct device_attribute dev_attr_##_name = __ATTR_RW(_name) 583 #define DEVICE_ATTR_RO(_name) \ 584 struct device_attribute dev_attr_##_name = __ATTR_RO(_name) 585 #define DEVICE_ATTR_WO(_name) \ 586 struct device_attribute dev_attr_##_name = __ATTR_WO(_name) 587 #define DEVICE_ULONG_ATTR(_name, _mode, _var) \ 588 struct dev_ext_attribute dev_attr_##_name = \ 589 { __ATTR(_name, _mode, device_show_ulong, device_store_ulong), &(_var) } 590 #define DEVICE_INT_ATTR(_name, _mode, _var) \ 591 struct dev_ext_attribute dev_attr_##_name = \ 592 { __ATTR(_name, _mode, device_show_int, device_store_int), &(_var) } 593 #define DEVICE_BOOL_ATTR(_name, _mode, _var) \ 594 struct dev_ext_attribute dev_attr_##_name = \ 595 { __ATTR(_name, _mode, device_show_bool, device_store_bool), &(_var) } 596 #define DEVICE_ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store) \ 597 struct device_attribute dev_attr_##_name = \ 598 __ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store) 599 600 extern int device_create_file(struct device *device, 601 const struct device_attribute *entry); 602 extern void device_remove_file(struct device *dev, 603 const struct device_attribute *attr); 604 extern bool device_remove_file_self(struct device *dev, 605 const struct device_attribute *attr); 606 extern int __must_check device_create_bin_file(struct device *dev, 607 const struct bin_attribute *attr); 608 extern void device_remove_bin_file(struct device *dev, 609 const struct bin_attribute *attr); 610 611 /* device resource management */ 612 typedef void (*dr_release_t)(struct device *dev, void *res); 613 typedef int (*dr_match_t)(struct device *dev, void *res, void *match_data); 614 615 #ifdef CONFIG_DEBUG_DEVRES 616 extern void *__devres_alloc_node(dr_release_t release, size_t size, gfp_t gfp, 617 int nid, const char *name) __malloc; 618 #define devres_alloc(release, size, gfp) \ 619 __devres_alloc_node(release, size, gfp, NUMA_NO_NODE, #release) 620 #define devres_alloc_node(release, size, gfp, nid) \ 621 __devres_alloc_node(release, size, gfp, nid, #release) 622 #else 623 extern void *devres_alloc_node(dr_release_t release, size_t size, gfp_t gfp, 624 int nid) __malloc; 625 static inline void *devres_alloc(dr_release_t release, size_t size, gfp_t gfp) 626 { 627 return devres_alloc_node(release, size, gfp, NUMA_NO_NODE); 628 } 629 #endif 630 631 extern void devres_for_each_res(struct device *dev, dr_release_t release, 632 dr_match_t match, void *match_data, 633 void (*fn)(struct device *, void *, void *), 634 void *data); 635 extern void devres_free(void *res); 636 extern void devres_add(struct device *dev, void *res); 637 extern void *devres_find(struct device *dev, dr_release_t release, 638 dr_match_t match, void *match_data); 639 extern void *devres_get(struct device *dev, void *new_res, 640 dr_match_t match, void *match_data); 641 extern void *devres_remove(struct device *dev, dr_release_t release, 642 dr_match_t match, void *match_data); 643 extern int devres_destroy(struct device *dev, dr_release_t release, 644 dr_match_t match, void *match_data); 645 extern int devres_release(struct device *dev, dr_release_t release, 646 dr_match_t match, void *match_data); 647 648 /* devres group */ 649 extern void * __must_check devres_open_group(struct device *dev, void *id, 650 gfp_t gfp); 651 extern void devres_close_group(struct device *dev, void *id); 652 extern void devres_remove_group(struct device *dev, void *id); 653 extern int devres_release_group(struct device *dev, void *id); 654 655 /* managed devm_k.alloc/kfree for device drivers */ 656 extern void *devm_kmalloc(struct device *dev, size_t size, gfp_t gfp) __malloc; 657 extern __printf(3, 0) 658 char *devm_kvasprintf(struct device *dev, gfp_t gfp, const char *fmt, 659 va_list ap) __malloc; 660 extern __printf(3, 4) 661 char *devm_kasprintf(struct device *dev, gfp_t gfp, const char *fmt, ...) __malloc; 662 static inline void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp) 663 { 664 return devm_kmalloc(dev, size, gfp | __GFP_ZERO); 665 } 666 static inline void *devm_kmalloc_array(struct device *dev, 667 size_t n, size_t size, gfp_t flags) 668 { 669 if (size != 0 && n > SIZE_MAX / size) 670 return NULL; 671 return devm_kmalloc(dev, n * size, flags); 672 } 673 static inline void *devm_kcalloc(struct device *dev, 674 size_t n, size_t size, gfp_t flags) 675 { 676 return devm_kmalloc_array(dev, n, size, flags | __GFP_ZERO); 677 } 678 extern void devm_kfree(struct device *dev, void *p); 679 extern char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp) __malloc; 680 extern void *devm_kmemdup(struct device *dev, const void *src, size_t len, 681 gfp_t gfp); 682 683 extern unsigned long devm_get_free_pages(struct device *dev, 684 gfp_t gfp_mask, unsigned int order); 685 extern void devm_free_pages(struct device *dev, unsigned long addr); 686 687 void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res); 688 689 /* allows to add/remove a custom action to devres stack */ 690 int devm_add_action(struct device *dev, void (*action)(void *), void *data); 691 void devm_remove_action(struct device *dev, void (*action)(void *), void *data); 692 693 static inline int devm_add_action_or_reset(struct device *dev, 694 void (*action)(void *), void *data) 695 { 696 int ret; 697 698 ret = devm_add_action(dev, action, data); 699 if (ret) 700 action(data); 701 702 return ret; 703 } 704 705 /** 706 * devm_alloc_percpu - Resource-managed alloc_percpu 707 * @dev: Device to allocate per-cpu memory for 708 * @type: Type to allocate per-cpu memory for 709 * 710 * Managed alloc_percpu. Per-cpu memory allocated with this function is 711 * automatically freed on driver detach. 712 * 713 * RETURNS: 714 * Pointer to allocated memory on success, NULL on failure. 715 */ 716 #define devm_alloc_percpu(dev, type) \ 717 ((typeof(type) __percpu *)__devm_alloc_percpu((dev), sizeof(type), \ 718 __alignof__(type))) 719 720 void __percpu *__devm_alloc_percpu(struct device *dev, size_t size, 721 size_t align); 722 void devm_free_percpu(struct device *dev, void __percpu *pdata); 723 724 struct device_dma_parameters { 725 /* 726 * a low level driver may set these to teach IOMMU code about 727 * sg limitations. 728 */ 729 unsigned int max_segment_size; 730 unsigned long segment_boundary_mask; 731 }; 732 733 /** 734 * enum device_link_state - Device link states. 735 * @DL_STATE_NONE: The presence of the drivers is not being tracked. 736 * @DL_STATE_DORMANT: None of the supplier/consumer drivers is present. 737 * @DL_STATE_AVAILABLE: The supplier driver is present, but the consumer is not. 738 * @DL_STATE_CONSUMER_PROBE: The consumer is probing (supplier driver present). 739 * @DL_STATE_ACTIVE: Both the supplier and consumer drivers are present. 740 * @DL_STATE_SUPPLIER_UNBIND: The supplier driver is unbinding. 741 */ 742 enum device_link_state { 743 DL_STATE_NONE = -1, 744 DL_STATE_DORMANT = 0, 745 DL_STATE_AVAILABLE, 746 DL_STATE_CONSUMER_PROBE, 747 DL_STATE_ACTIVE, 748 DL_STATE_SUPPLIER_UNBIND, 749 }; 750 751 /* 752 * Device link flags. 753 * 754 * STATELESS: The core won't track the presence of supplier/consumer drivers. 755 * AUTOREMOVE: Remove this link automatically on consumer driver unbind. 756 * PM_RUNTIME: If set, the runtime PM framework will use this link. 757 * RPM_ACTIVE: Run pm_runtime_get_sync() on the supplier during link creation. 758 */ 759 #define DL_FLAG_STATELESS BIT(0) 760 #define DL_FLAG_AUTOREMOVE BIT(1) 761 #define DL_FLAG_PM_RUNTIME BIT(2) 762 #define DL_FLAG_RPM_ACTIVE BIT(3) 763 764 /** 765 * struct device_link - Device link representation. 766 * @supplier: The device on the supplier end of the link. 767 * @s_node: Hook to the supplier device's list of links to consumers. 768 * @consumer: The device on the consumer end of the link. 769 * @c_node: Hook to the consumer device's list of links to suppliers. 770 * @status: The state of the link (with respect to the presence of drivers). 771 * @flags: Link flags. 772 * @rpm_active: Whether or not the consumer device is runtime-PM-active. 773 * @rcu_head: An RCU head to use for deferred execution of SRCU callbacks. 774 */ 775 struct device_link { 776 struct device *supplier; 777 struct list_head s_node; 778 struct device *consumer; 779 struct list_head c_node; 780 enum device_link_state status; 781 u32 flags; 782 bool rpm_active; 783 #ifdef CONFIG_SRCU 784 struct rcu_head rcu_head; 785 #endif 786 }; 787 788 /** 789 * enum dl_dev_state - Device driver presence tracking information. 790 * @DL_DEV_NO_DRIVER: There is no driver attached to the device. 791 * @DL_DEV_PROBING: A driver is probing. 792 * @DL_DEV_DRIVER_BOUND: The driver has been bound to the device. 793 * @DL_DEV_UNBINDING: The driver is unbinding from the device. 794 */ 795 enum dl_dev_state { 796 DL_DEV_NO_DRIVER = 0, 797 DL_DEV_PROBING, 798 DL_DEV_DRIVER_BOUND, 799 DL_DEV_UNBINDING, 800 }; 801 802 /** 803 * struct dev_links_info - Device data related to device links. 804 * @suppliers: List of links to supplier devices. 805 * @consumers: List of links to consumer devices. 806 * @status: Driver status information. 807 */ 808 struct dev_links_info { 809 struct list_head suppliers; 810 struct list_head consumers; 811 enum dl_dev_state status; 812 }; 813 814 /** 815 * struct device - The basic device structure 816 * @parent: The device's "parent" device, the device to which it is attached. 817 * In most cases, a parent device is some sort of bus or host 818 * controller. If parent is NULL, the device, is a top-level device, 819 * which is not usually what you want. 820 * @p: Holds the private data of the driver core portions of the device. 821 * See the comment of the struct device_private for detail. 822 * @kobj: A top-level, abstract class from which other classes are derived. 823 * @init_name: Initial name of the device. 824 * @type: The type of device. 825 * This identifies the device type and carries type-specific 826 * information. 827 * @mutex: Mutex to synchronize calls to its driver. 828 * @bus: Type of bus device is on. 829 * @driver: Which driver has allocated this 830 * @platform_data: Platform data specific to the device. 831 * Example: For devices on custom boards, as typical of embedded 832 * and SOC based hardware, Linux often uses platform_data to point 833 * to board-specific structures describing devices and how they 834 * are wired. That can include what ports are available, chip 835 * variants, which GPIO pins act in what additional roles, and so 836 * on. This shrinks the "Board Support Packages" (BSPs) and 837 * minimizes board-specific #ifdefs in drivers. 838 * @driver_data: Private pointer for driver specific info. 839 * @links: Links to suppliers and consumers of this device. 840 * @power: For device power management. 841 * See Documentation/power/admin-guide/devices.rst for details. 842 * @pm_domain: Provide callbacks that are executed during system suspend, 843 * hibernation, system resume and during runtime PM transitions 844 * along with subsystem-level and driver-level callbacks. 845 * @pins: For device pin management. 846 * See Documentation/pinctrl.txt for details. 847 * @msi_list: Hosts MSI descriptors 848 * @msi_domain: The generic MSI domain this device is using. 849 * @numa_node: NUMA node this device is close to. 850 * @dma_mask: Dma mask (if dma'ble device). 851 * @coherent_dma_mask: Like dma_mask, but for alloc_coherent mapping as not all 852 * hardware supports 64-bit addresses for consistent allocations 853 * such descriptors. 854 * @dma_pfn_offset: offset of DMA memory range relatively of RAM 855 * @dma_parms: A low level driver may set these to teach IOMMU code about 856 * segment limitations. 857 * @dma_pools: Dma pools (if dma'ble device). 858 * @dma_mem: Internal for coherent mem override. 859 * @cma_area: Contiguous memory area for dma allocations 860 * @archdata: For arch-specific additions. 861 * @of_node: Associated device tree node. 862 * @fwnode: Associated device node supplied by platform firmware. 863 * @devt: For creating the sysfs "dev". 864 * @id: device instance 865 * @devres_lock: Spinlock to protect the resource of the device. 866 * @devres_head: The resources list of the device. 867 * @knode_class: The node used to add the device to the class list. 868 * @class: The class of the device. 869 * @groups: Optional attribute groups. 870 * @release: Callback to free the device after all references have 871 * gone away. This should be set by the allocator of the 872 * device (i.e. the bus driver that discovered the device). 873 * @iommu_group: IOMMU group the device belongs to. 874 * @iommu_fwspec: IOMMU-specific properties supplied by firmware. 875 * 876 * @offline_disabled: If set, the device is permanently online. 877 * @offline: Set after successful invocation of bus type's .offline(). 878 * 879 * At the lowest level, every device in a Linux system is represented by an 880 * instance of struct device. The device structure contains the information 881 * that the device model core needs to model the system. Most subsystems, 882 * however, track additional information about the devices they host. As a 883 * result, it is rare for devices to be represented by bare device structures; 884 * instead, that structure, like kobject structures, is usually embedded within 885 * a higher-level representation of the device. 886 */ 887 struct device { 888 struct device *parent; 889 890 struct device_private *p; 891 892 struct kobject kobj; 893 const char *init_name; /* initial name of the device */ 894 const struct device_type *type; 895 896 struct mutex mutex; /* mutex to synchronize calls to 897 * its driver. 898 */ 899 900 struct bus_type *bus; /* type of bus device is on */ 901 struct device_driver *driver; /* which driver has allocated this 902 device */ 903 void *platform_data; /* Platform specific data, device 904 core doesn't touch it */ 905 void *driver_data; /* Driver data, set and get with 906 dev_set/get_drvdata */ 907 struct dev_links_info links; 908 struct dev_pm_info power; 909 struct dev_pm_domain *pm_domain; 910 911 #ifdef CONFIG_GENERIC_MSI_IRQ_DOMAIN 912 struct irq_domain *msi_domain; 913 #endif 914 #ifdef CONFIG_PINCTRL 915 struct dev_pin_info *pins; 916 #endif 917 #ifdef CONFIG_GENERIC_MSI_IRQ 918 struct list_head msi_list; 919 #endif 920 921 #ifdef CONFIG_NUMA 922 int numa_node; /* NUMA node this device is close to */ 923 #endif 924 u64 *dma_mask; /* dma mask (if dma'able device) */ 925 u64 coherent_dma_mask;/* Like dma_mask, but for 926 alloc_coherent mappings as 927 not all hardware supports 928 64 bit addresses for consistent 929 allocations such descriptors. */ 930 unsigned long dma_pfn_offset; 931 932 struct device_dma_parameters *dma_parms; 933 934 struct list_head dma_pools; /* dma pools (if dma'ble) */ 935 936 struct dma_coherent_mem *dma_mem; /* internal for coherent mem 937 override */ 938 #ifdef CONFIG_DMA_CMA 939 struct cma *cma_area; /* contiguous memory area for dma 940 allocations */ 941 #endif 942 /* arch specific additions */ 943 struct dev_archdata archdata; 944 945 struct device_node *of_node; /* associated device tree node */ 946 struct fwnode_handle *fwnode; /* firmware device node */ 947 948 dev_t devt; /* dev_t, creates the sysfs "dev" */ 949 u32 id; /* device instance */ 950 951 spinlock_t devres_lock; 952 struct list_head devres_head; 953 954 struct klist_node knode_class; 955 struct class *class; 956 const struct attribute_group **groups; /* optional groups */ 957 958 void (*release)(struct device *dev); 959 struct iommu_group *iommu_group; 960 struct iommu_fwspec *iommu_fwspec; 961 962 bool offline_disabled:1; 963 bool offline:1; 964 }; 965 966 static inline struct device *kobj_to_dev(struct kobject *kobj) 967 { 968 return container_of(kobj, struct device, kobj); 969 } 970 971 /* Get the wakeup routines, which depend on struct device */ 972 #include <linux/pm_wakeup.h> 973 974 static inline const char *dev_name(const struct device *dev) 975 { 976 /* Use the init name until the kobject becomes available */ 977 if (dev->init_name) 978 return dev->init_name; 979 980 return kobject_name(&dev->kobj); 981 } 982 983 extern __printf(2, 3) 984 int dev_set_name(struct device *dev, const char *name, ...); 985 986 #ifdef CONFIG_NUMA 987 static inline int dev_to_node(struct device *dev) 988 { 989 return dev->numa_node; 990 } 991 static inline void set_dev_node(struct device *dev, int node) 992 { 993 dev->numa_node = node; 994 } 995 #else 996 static inline int dev_to_node(struct device *dev) 997 { 998 return -1; 999 } 1000 static inline void set_dev_node(struct device *dev, int node) 1001 { 1002 } 1003 #endif 1004 1005 static inline struct irq_domain *dev_get_msi_domain(const struct device *dev) 1006 { 1007 #ifdef CONFIG_GENERIC_MSI_IRQ_DOMAIN 1008 return dev->msi_domain; 1009 #else 1010 return NULL; 1011 #endif 1012 } 1013 1014 static inline void dev_set_msi_domain(struct device *dev, struct irq_domain *d) 1015 { 1016 #ifdef CONFIG_GENERIC_MSI_IRQ_DOMAIN 1017 dev->msi_domain = d; 1018 #endif 1019 } 1020 1021 static inline void *dev_get_drvdata(const struct device *dev) 1022 { 1023 return dev->driver_data; 1024 } 1025 1026 static inline void dev_set_drvdata(struct device *dev, void *data) 1027 { 1028 dev->driver_data = data; 1029 } 1030 1031 static inline struct pm_subsys_data *dev_to_psd(struct device *dev) 1032 { 1033 return dev ? dev->power.subsys_data : NULL; 1034 } 1035 1036 static inline unsigned int dev_get_uevent_suppress(const struct device *dev) 1037 { 1038 return dev->kobj.uevent_suppress; 1039 } 1040 1041 static inline void dev_set_uevent_suppress(struct device *dev, int val) 1042 { 1043 dev->kobj.uevent_suppress = val; 1044 } 1045 1046 static inline int device_is_registered(struct device *dev) 1047 { 1048 return dev->kobj.state_in_sysfs; 1049 } 1050 1051 static inline void device_enable_async_suspend(struct device *dev) 1052 { 1053 if (!dev->power.is_prepared) 1054 dev->power.async_suspend = true; 1055 } 1056 1057 static inline void device_disable_async_suspend(struct device *dev) 1058 { 1059 if (!dev->power.is_prepared) 1060 dev->power.async_suspend = false; 1061 } 1062 1063 static inline bool device_async_suspend_enabled(struct device *dev) 1064 { 1065 return !!dev->power.async_suspend; 1066 } 1067 1068 static inline void dev_pm_syscore_device(struct device *dev, bool val) 1069 { 1070 #ifdef CONFIG_PM_SLEEP 1071 dev->power.syscore = val; 1072 #endif 1073 } 1074 1075 static inline void device_lock(struct device *dev) 1076 { 1077 mutex_lock(&dev->mutex); 1078 } 1079 1080 static inline int device_lock_interruptible(struct device *dev) 1081 { 1082 return mutex_lock_interruptible(&dev->mutex); 1083 } 1084 1085 static inline int device_trylock(struct device *dev) 1086 { 1087 return mutex_trylock(&dev->mutex); 1088 } 1089 1090 static inline void device_unlock(struct device *dev) 1091 { 1092 mutex_unlock(&dev->mutex); 1093 } 1094 1095 static inline void device_lock_assert(struct device *dev) 1096 { 1097 lockdep_assert_held(&dev->mutex); 1098 } 1099 1100 static inline struct device_node *dev_of_node(struct device *dev) 1101 { 1102 if (!IS_ENABLED(CONFIG_OF)) 1103 return NULL; 1104 return dev->of_node; 1105 } 1106 1107 void driver_init(void); 1108 1109 /* 1110 * High level routines for use by the bus drivers 1111 */ 1112 extern int __must_check device_register(struct device *dev); 1113 extern void device_unregister(struct device *dev); 1114 extern void device_initialize(struct device *dev); 1115 extern int __must_check device_add(struct device *dev); 1116 extern void device_del(struct device *dev); 1117 extern int device_for_each_child(struct device *dev, void *data, 1118 int (*fn)(struct device *dev, void *data)); 1119 extern int device_for_each_child_reverse(struct device *dev, void *data, 1120 int (*fn)(struct device *dev, void *data)); 1121 extern struct device *device_find_child(struct device *dev, void *data, 1122 int (*match)(struct device *dev, void *data)); 1123 extern int device_rename(struct device *dev, const char *new_name); 1124 extern int device_move(struct device *dev, struct device *new_parent, 1125 enum dpm_order dpm_order); 1126 extern const char *device_get_devnode(struct device *dev, 1127 umode_t *mode, kuid_t *uid, kgid_t *gid, 1128 const char **tmp); 1129 1130 static inline bool device_supports_offline(struct device *dev) 1131 { 1132 return dev->bus && dev->bus->offline && dev->bus->online; 1133 } 1134 1135 extern void lock_device_hotplug(void); 1136 extern void unlock_device_hotplug(void); 1137 extern int lock_device_hotplug_sysfs(void); 1138 extern int device_offline(struct device *dev); 1139 extern int device_online(struct device *dev); 1140 extern void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode); 1141 extern void set_secondary_fwnode(struct device *dev, struct fwnode_handle *fwnode); 1142 1143 /* 1144 * Root device objects for grouping under /sys/devices 1145 */ 1146 extern struct device *__root_device_register(const char *name, 1147 struct module *owner); 1148 1149 /* This is a macro to avoid include problems with THIS_MODULE */ 1150 #define root_device_register(name) \ 1151 __root_device_register(name, THIS_MODULE) 1152 1153 extern void root_device_unregister(struct device *root); 1154 1155 static inline void *dev_get_platdata(const struct device *dev) 1156 { 1157 return dev->platform_data; 1158 } 1159 1160 /* 1161 * Manual binding of a device to driver. See drivers/base/bus.c 1162 * for information on use. 1163 */ 1164 extern int __must_check device_bind_driver(struct device *dev); 1165 extern void device_release_driver(struct device *dev); 1166 extern int __must_check device_attach(struct device *dev); 1167 extern int __must_check driver_attach(struct device_driver *drv); 1168 extern void device_initial_probe(struct device *dev); 1169 extern int __must_check device_reprobe(struct device *dev); 1170 1171 extern bool device_is_bound(struct device *dev); 1172 1173 /* 1174 * Easy functions for dynamically creating devices on the fly 1175 */ 1176 extern __printf(5, 0) 1177 struct device *device_create_vargs(struct class *cls, struct device *parent, 1178 dev_t devt, void *drvdata, 1179 const char *fmt, va_list vargs); 1180 extern __printf(5, 6) 1181 struct device *device_create(struct class *cls, struct device *parent, 1182 dev_t devt, void *drvdata, 1183 const char *fmt, ...); 1184 extern __printf(6, 7) 1185 struct device *device_create_with_groups(struct class *cls, 1186 struct device *parent, dev_t devt, void *drvdata, 1187 const struct attribute_group **groups, 1188 const char *fmt, ...); 1189 extern void device_destroy(struct class *cls, dev_t devt); 1190 1191 /* 1192 * Platform "fixup" functions - allow the platform to have their say 1193 * about devices and actions that the general device layer doesn't 1194 * know about. 1195 */ 1196 /* Notify platform of device discovery */ 1197 extern int (*platform_notify)(struct device *dev); 1198 1199 extern int (*platform_notify_remove)(struct device *dev); 1200 1201 1202 /* 1203 * get_device - atomically increment the reference count for the device. 1204 * 1205 */ 1206 extern struct device *get_device(struct device *dev); 1207 extern void put_device(struct device *dev); 1208 1209 #ifdef CONFIG_DEVTMPFS 1210 extern int devtmpfs_create_node(struct device *dev); 1211 extern int devtmpfs_delete_node(struct device *dev); 1212 extern int devtmpfs_mount(const char *mntdir); 1213 #else 1214 static inline int devtmpfs_create_node(struct device *dev) { return 0; } 1215 static inline int devtmpfs_delete_node(struct device *dev) { return 0; } 1216 static inline int devtmpfs_mount(const char *mountpoint) { return 0; } 1217 #endif 1218 1219 /* drivers/base/power/shutdown.c */ 1220 extern void device_shutdown(void); 1221 1222 /* debugging and troubleshooting/diagnostic helpers. */ 1223 extern const char *dev_driver_string(const struct device *dev); 1224 1225 /* Device links interface. */ 1226 struct device_link *device_link_add(struct device *consumer, 1227 struct device *supplier, u32 flags); 1228 void device_link_del(struct device_link *link); 1229 1230 #ifdef CONFIG_PRINTK 1231 1232 extern __printf(3, 0) 1233 int dev_vprintk_emit(int level, const struct device *dev, 1234 const char *fmt, va_list args); 1235 extern __printf(3, 4) 1236 int dev_printk_emit(int level, const struct device *dev, const char *fmt, ...); 1237 1238 extern __printf(3, 4) 1239 void dev_printk(const char *level, const struct device *dev, 1240 const char *fmt, ...); 1241 extern __printf(2, 3) 1242 void dev_emerg(const struct device *dev, const char *fmt, ...); 1243 extern __printf(2, 3) 1244 void dev_alert(const struct device *dev, const char *fmt, ...); 1245 extern __printf(2, 3) 1246 void dev_crit(const struct device *dev, const char *fmt, ...); 1247 extern __printf(2, 3) 1248 void dev_err(const struct device *dev, const char *fmt, ...); 1249 extern __printf(2, 3) 1250 void dev_warn(const struct device *dev, const char *fmt, ...); 1251 extern __printf(2, 3) 1252 void dev_notice(const struct device *dev, const char *fmt, ...); 1253 extern __printf(2, 3) 1254 void _dev_info(const struct device *dev, const char *fmt, ...); 1255 1256 #else 1257 1258 static inline __printf(3, 0) 1259 int dev_vprintk_emit(int level, const struct device *dev, 1260 const char *fmt, va_list args) 1261 { return 0; } 1262 static inline __printf(3, 4) 1263 int dev_printk_emit(int level, const struct device *dev, const char *fmt, ...) 1264 { return 0; } 1265 1266 static inline void __dev_printk(const char *level, const struct device *dev, 1267 struct va_format *vaf) 1268 {} 1269 static inline __printf(3, 4) 1270 void dev_printk(const char *level, const struct device *dev, 1271 const char *fmt, ...) 1272 {} 1273 1274 static inline __printf(2, 3) 1275 void dev_emerg(const struct device *dev, const char *fmt, ...) 1276 {} 1277 static inline __printf(2, 3) 1278 void dev_crit(const struct device *dev, const char *fmt, ...) 1279 {} 1280 static inline __printf(2, 3) 1281 void dev_alert(const struct device *dev, const char *fmt, ...) 1282 {} 1283 static inline __printf(2, 3) 1284 void dev_err(const struct device *dev, const char *fmt, ...) 1285 {} 1286 static inline __printf(2, 3) 1287 void dev_warn(const struct device *dev, const char *fmt, ...) 1288 {} 1289 static inline __printf(2, 3) 1290 void dev_notice(const struct device *dev, const char *fmt, ...) 1291 {} 1292 static inline __printf(2, 3) 1293 void _dev_info(const struct device *dev, const char *fmt, ...) 1294 {} 1295 1296 #endif 1297 1298 /* 1299 * Stupid hackaround for existing uses of non-printk uses dev_info 1300 * 1301 * Note that the definition of dev_info below is actually _dev_info 1302 * and a macro is used to avoid redefining dev_info 1303 */ 1304 1305 #define dev_info(dev, fmt, arg...) _dev_info(dev, fmt, ##arg) 1306 1307 #if defined(CONFIG_DYNAMIC_DEBUG) 1308 #define dev_dbg(dev, format, ...) \ 1309 do { \ 1310 dynamic_dev_dbg(dev, format, ##__VA_ARGS__); \ 1311 } while (0) 1312 #elif defined(DEBUG) 1313 #define dev_dbg(dev, format, arg...) \ 1314 dev_printk(KERN_DEBUG, dev, format, ##arg) 1315 #else 1316 #define dev_dbg(dev, format, arg...) \ 1317 ({ \ 1318 if (0) \ 1319 dev_printk(KERN_DEBUG, dev, format, ##arg); \ 1320 }) 1321 #endif 1322 1323 #ifdef CONFIG_PRINTK 1324 #define dev_level_once(dev_level, dev, fmt, ...) \ 1325 do { \ 1326 static bool __print_once __read_mostly; \ 1327 \ 1328 if (!__print_once) { \ 1329 __print_once = true; \ 1330 dev_level(dev, fmt, ##__VA_ARGS__); \ 1331 } \ 1332 } while (0) 1333 #else 1334 #define dev_level_once(dev_level, dev, fmt, ...) \ 1335 do { \ 1336 if (0) \ 1337 dev_level(dev, fmt, ##__VA_ARGS__); \ 1338 } while (0) 1339 #endif 1340 1341 #define dev_emerg_once(dev, fmt, ...) \ 1342 dev_level_once(dev_emerg, dev, fmt, ##__VA_ARGS__) 1343 #define dev_alert_once(dev, fmt, ...) \ 1344 dev_level_once(dev_alert, dev, fmt, ##__VA_ARGS__) 1345 #define dev_crit_once(dev, fmt, ...) \ 1346 dev_level_once(dev_crit, dev, fmt, ##__VA_ARGS__) 1347 #define dev_err_once(dev, fmt, ...) \ 1348 dev_level_once(dev_err, dev, fmt, ##__VA_ARGS__) 1349 #define dev_warn_once(dev, fmt, ...) \ 1350 dev_level_once(dev_warn, dev, fmt, ##__VA_ARGS__) 1351 #define dev_notice_once(dev, fmt, ...) \ 1352 dev_level_once(dev_notice, dev, fmt, ##__VA_ARGS__) 1353 #define dev_info_once(dev, fmt, ...) \ 1354 dev_level_once(dev_info, dev, fmt, ##__VA_ARGS__) 1355 #define dev_dbg_once(dev, fmt, ...) \ 1356 dev_level_once(dev_dbg, dev, fmt, ##__VA_ARGS__) 1357 1358 #define dev_level_ratelimited(dev_level, dev, fmt, ...) \ 1359 do { \ 1360 static DEFINE_RATELIMIT_STATE(_rs, \ 1361 DEFAULT_RATELIMIT_INTERVAL, \ 1362 DEFAULT_RATELIMIT_BURST); \ 1363 if (__ratelimit(&_rs)) \ 1364 dev_level(dev, fmt, ##__VA_ARGS__); \ 1365 } while (0) 1366 1367 #define dev_emerg_ratelimited(dev, fmt, ...) \ 1368 dev_level_ratelimited(dev_emerg, dev, fmt, ##__VA_ARGS__) 1369 #define dev_alert_ratelimited(dev, fmt, ...) \ 1370 dev_level_ratelimited(dev_alert, dev, fmt, ##__VA_ARGS__) 1371 #define dev_crit_ratelimited(dev, fmt, ...) \ 1372 dev_level_ratelimited(dev_crit, dev, fmt, ##__VA_ARGS__) 1373 #define dev_err_ratelimited(dev, fmt, ...) \ 1374 dev_level_ratelimited(dev_err, dev, fmt, ##__VA_ARGS__) 1375 #define dev_warn_ratelimited(dev, fmt, ...) \ 1376 dev_level_ratelimited(dev_warn, dev, fmt, ##__VA_ARGS__) 1377 #define dev_notice_ratelimited(dev, fmt, ...) \ 1378 dev_level_ratelimited(dev_notice, dev, fmt, ##__VA_ARGS__) 1379 #define dev_info_ratelimited(dev, fmt, ...) \ 1380 dev_level_ratelimited(dev_info, dev, fmt, ##__VA_ARGS__) 1381 #if defined(CONFIG_DYNAMIC_DEBUG) 1382 /* descriptor check is first to prevent flooding with "callbacks suppressed" */ 1383 #define dev_dbg_ratelimited(dev, fmt, ...) \ 1384 do { \ 1385 static DEFINE_RATELIMIT_STATE(_rs, \ 1386 DEFAULT_RATELIMIT_INTERVAL, \ 1387 DEFAULT_RATELIMIT_BURST); \ 1388 DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \ 1389 if (unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT) && \ 1390 __ratelimit(&_rs)) \ 1391 __dynamic_dev_dbg(&descriptor, dev, fmt, \ 1392 ##__VA_ARGS__); \ 1393 } while (0) 1394 #elif defined(DEBUG) 1395 #define dev_dbg_ratelimited(dev, fmt, ...) \ 1396 do { \ 1397 static DEFINE_RATELIMIT_STATE(_rs, \ 1398 DEFAULT_RATELIMIT_INTERVAL, \ 1399 DEFAULT_RATELIMIT_BURST); \ 1400 if (__ratelimit(&_rs)) \ 1401 dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__); \ 1402 } while (0) 1403 #else 1404 #define dev_dbg_ratelimited(dev, fmt, ...) \ 1405 do { \ 1406 if (0) \ 1407 dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__); \ 1408 } while (0) 1409 #endif 1410 1411 #ifdef VERBOSE_DEBUG 1412 #define dev_vdbg dev_dbg 1413 #else 1414 #define dev_vdbg(dev, format, arg...) \ 1415 ({ \ 1416 if (0) \ 1417 dev_printk(KERN_DEBUG, dev, format, ##arg); \ 1418 }) 1419 #endif 1420 1421 /* 1422 * dev_WARN*() acts like dev_printk(), but with the key difference of 1423 * using WARN/WARN_ONCE to include file/line information and a backtrace. 1424 */ 1425 #define dev_WARN(dev, format, arg...) \ 1426 WARN(1, "%s %s: " format, dev_driver_string(dev), dev_name(dev), ## arg); 1427 1428 #define dev_WARN_ONCE(dev, condition, format, arg...) \ 1429 WARN_ONCE(condition, "%s %s: " format, \ 1430 dev_driver_string(dev), dev_name(dev), ## arg) 1431 1432 /* Create alias, so I can be autoloaded. */ 1433 #define MODULE_ALIAS_CHARDEV(major,minor) \ 1434 MODULE_ALIAS("char-major-" __stringify(major) "-" __stringify(minor)) 1435 #define MODULE_ALIAS_CHARDEV_MAJOR(major) \ 1436 MODULE_ALIAS("char-major-" __stringify(major) "-*") 1437 1438 #ifdef CONFIG_SYSFS_DEPRECATED 1439 extern long sysfs_deprecated; 1440 #else 1441 #define sysfs_deprecated 0 1442 #endif 1443 1444 /** 1445 * module_driver() - Helper macro for drivers that don't do anything 1446 * special in module init/exit. This eliminates a lot of boilerplate. 1447 * Each module may only use this macro once, and calling it replaces 1448 * module_init() and module_exit(). 1449 * 1450 * @__driver: driver name 1451 * @__register: register function for this driver type 1452 * @__unregister: unregister function for this driver type 1453 * @...: Additional arguments to be passed to __register and __unregister. 1454 * 1455 * Use this macro to construct bus specific macros for registering 1456 * drivers, and do not use it on its own. 1457 */ 1458 #define module_driver(__driver, __register, __unregister, ...) \ 1459 static int __init __driver##_init(void) \ 1460 { \ 1461 return __register(&(__driver) , ##__VA_ARGS__); \ 1462 } \ 1463 module_init(__driver##_init); \ 1464 static void __exit __driver##_exit(void) \ 1465 { \ 1466 __unregister(&(__driver) , ##__VA_ARGS__); \ 1467 } \ 1468 module_exit(__driver##_exit); 1469 1470 /** 1471 * builtin_driver() - Helper macro for drivers that don't do anything 1472 * special in init and have no exit. This eliminates some boilerplate. 1473 * Each driver may only use this macro once, and calling it replaces 1474 * device_initcall (or in some cases, the legacy __initcall). This is 1475 * meant to be a direct parallel of module_driver() above but without 1476 * the __exit stuff that is not used for builtin cases. 1477 * 1478 * @__driver: driver name 1479 * @__register: register function for this driver type 1480 * @...: Additional arguments to be passed to __register 1481 * 1482 * Use this macro to construct bus specific macros for registering 1483 * drivers, and do not use it on its own. 1484 */ 1485 #define builtin_driver(__driver, __register, ...) \ 1486 static int __init __driver##_init(void) \ 1487 { \ 1488 return __register(&(__driver) , ##__VA_ARGS__); \ 1489 } \ 1490 device_initcall(__driver##_init); 1491 1492 #endif /* _DEVICE_H_ */
1 #ifndef _LINUX_DMA_MAPPING_H 2 #define _LINUX_DMA_MAPPING_H 3 4 #include <linux/sizes.h> 5 #include <linux/string.h> 6 #include <linux/device.h> 7 #include <linux/err.h> 8 #include <linux/dma-debug.h> 9 #include <linux/dma-direction.h> 10 #include <linux/scatterlist.h> 11 #include <linux/kmemcheck.h> 12 #include <linux/bug.h> 13 14 /** 15 * List of possible attributes associated with a DMA mapping. The semantics 16 * of each attribute should be defined in Documentation/DMA-attributes.txt. 17 * 18 * DMA_ATTR_WRITE_BARRIER: DMA to a memory region with this attribute 19 * forces all pending DMA writes to complete. 20 */ 21 #define DMA_ATTR_WRITE_BARRIER (1UL << 0) 22 /* 23 * DMA_ATTR_WEAK_ORDERING: Specifies that reads and writes to the mapping 24 * may be weakly ordered, that is that reads and writes may pass each other. 25 */ 26 #define DMA_ATTR_WEAK_ORDERING (1UL << 1) 27 /* 28 * DMA_ATTR_WRITE_COMBINE: Specifies that writes to the mapping may be 29 * buffered to improve performance. 30 */ 31 #define DMA_ATTR_WRITE_COMBINE (1UL << 2) 32 /* 33 * DMA_ATTR_NON_CONSISTENT: Lets the platform to choose to return either 34 * consistent or non-consistent memory as it sees fit. 35 */ 36 #define DMA_ATTR_NON_CONSISTENT (1UL << 3) 37 /* 38 * DMA_ATTR_NO_KERNEL_MAPPING: Lets the platform to avoid creating a kernel 39 * virtual mapping for the allocated buffer. 40 */ 41 #define DMA_ATTR_NO_KERNEL_MAPPING (1UL << 4) 42 /* 43 * DMA_ATTR_SKIP_CPU_SYNC: Allows platform code to skip synchronization of 44 * the CPU cache for the given buffer assuming that it has been already 45 * transferred to 'device' domain. 46 */ 47 #define DMA_ATTR_SKIP_CPU_SYNC (1UL << 5) 48 /* 49 * DMA_ATTR_FORCE_CONTIGUOUS: Forces contiguous allocation of the buffer 50 * in physical memory. 51 */ 52 #define DMA_ATTR_FORCE_CONTIGUOUS (1UL << 6) 53 /* 54 * DMA_ATTR_ALLOC_SINGLE_PAGES: This is a hint to the DMA-mapping subsystem 55 * that it's probably not worth the time to try to allocate memory to in a way 56 * that gives better TLB efficiency. 57 */ 58 #define DMA_ATTR_ALLOC_SINGLE_PAGES (1UL << 7) 59 /* 60 * DMA_ATTR_NO_WARN: This tells the DMA-mapping subsystem to suppress 61 * allocation failure reports (similarly to __GFP_NOWARN). 62 */ 63 #define DMA_ATTR_NO_WARN (1UL << 8) 64 65 /* 66 * A dma_addr_t can hold any valid DMA or bus address for the platform. 67 * It can be given to a device to use as a DMA source or target. A CPU cannot 68 * reference a dma_addr_t directly because there may be translation between 69 * its physical address space and the bus address space. 70 */ 71 struct dma_map_ops { 72 void* (*alloc)(struct device *dev, size_t size, 73 dma_addr_t *dma_handle, gfp_t gfp, 74 unsigned long attrs); 75 void (*free)(struct device *dev, size_t size, 76 void *vaddr, dma_addr_t dma_handle, 77 unsigned long attrs); 78 int (*mmap)(struct device *, struct vm_area_struct *, 79 void *, dma_addr_t, size_t, 80 unsigned long attrs); 81 82 int (*get_sgtable)(struct device *dev, struct sg_table *sgt, void *, 83 dma_addr_t, size_t, unsigned long attrs); 84 85 dma_addr_t (*map_page)(struct device *dev, struct page *page, 86 unsigned long offset, size_t size, 87 enum dma_data_direction dir, 88 unsigned long attrs); 89 void (*unmap_page)(struct device *dev, dma_addr_t dma_handle, 90 size_t size, enum dma_data_direction dir, 91 unsigned long attrs); 92 /* 93 * map_sg returns 0 on error and a value > 0 on success. 94 * It should never return a value < 0. 95 */ 96 int (*map_sg)(struct device *dev, struct scatterlist *sg, 97 int nents, enum dma_data_direction dir, 98 unsigned long attrs); 99 void (*unmap_sg)(struct device *dev, 100 struct scatterlist *sg, int nents, 101 enum dma_data_direction dir, 102 unsigned long attrs); 103 dma_addr_t (*map_resource)(struct device *dev, phys_addr_t phys_addr, 104 size_t size, enum dma_data_direction dir, 105 unsigned long attrs); 106 void (*unmap_resource)(struct device *dev, dma_addr_t dma_handle, 107 size_t size, enum dma_data_direction dir, 108 unsigned long attrs); 109 void (*sync_single_for_cpu)(struct device *dev, 110 dma_addr_t dma_handle, size_t size, 111 enum dma_data_direction dir); 112 void (*sync_single_for_device)(struct device *dev, 113 dma_addr_t dma_handle, size_t size, 114 enum dma_data_direction dir); 115 void (*sync_sg_for_cpu)(struct device *dev, 116 struct scatterlist *sg, int nents, 117 enum dma_data_direction dir); 118 void (*sync_sg_for_device)(struct device *dev, 119 struct scatterlist *sg, int nents, 120 enum dma_data_direction dir); 121 int (*mapping_error)(struct device *dev, dma_addr_t dma_addr); 122 int (*dma_supported)(struct device *dev, u64 mask); 123 int (*set_dma_mask)(struct device *dev, u64 mask); 124 #ifdef ARCH_HAS_DMA_GET_REQUIRED_MASK 125 u64 (*get_required_mask)(struct device *dev); 126 #endif 127 int is_phys; 128 }; 129 130 extern struct dma_map_ops dma_noop_ops; 131 132 #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1)) 133 134 #define DMA_MASK_NONE 0x0ULL 135 136 static inline int valid_dma_direction(int dma_direction) 137 { 138 return ((dma_direction == DMA_BIDIRECTIONAL) || 139 (dma_direction == DMA_TO_DEVICE) || 140 (dma_direction == DMA_FROM_DEVICE)); 141 } 142 143 static inline int is_device_dma_capable(struct device *dev) 144 { 145 return dev->dma_mask != NULL && *dev->dma_mask != DMA_MASK_NONE; 146 } 147 148 #ifdef CONFIG_HAVE_GENERIC_DMA_COHERENT 149 /* 150 * These three functions are only for dma allocator. 151 * Don't use them in device drivers. 152 */ 153 int dma_alloc_from_coherent(struct device *dev, ssize_t size, 154 dma_addr_t *dma_handle, void **ret); 155 int dma_release_from_coherent(struct device *dev, int order, void *vaddr); 156 157 int dma_mmap_from_coherent(struct device *dev, struct vm_area_struct *vma, 158 void *cpu_addr, size_t size, int *ret); 159 #else 160 #define dma_alloc_from_coherent(dev, size, handle, ret) (0) 161 #define dma_release_from_coherent(dev, order, vaddr) (0) 162 #define dma_mmap_from_coherent(dev, vma, vaddr, order, ret) (0) 163 #endif /* CONFIG_HAVE_GENERIC_DMA_COHERENT */ 164 165 #ifdef CONFIG_HAS_DMA 166 #include <asm/dma-mapping.h> 167 #else 168 /* 169 * Define the dma api to allow compilation but not linking of 170 * dma dependent code. Code that depends on the dma-mapping 171 * API needs to set 'depends on HAS_DMA' in its Kconfig 172 */ 173 extern struct dma_map_ops bad_dma_ops; 174 static inline struct dma_map_ops *get_dma_ops(struct device *dev) 175 { 176 return &bad_dma_ops; 177 } 178 #endif 179 180 static inline dma_addr_t dma_map_single_attrs(struct device *dev, void *ptr, 181 size_t size, 182 enum dma_data_direction dir, 183 unsigned long attrs) 184 { 185 struct dma_map_ops *ops = get_dma_ops(dev); 186 dma_addr_t addr; 187 188 kmemcheck_mark_initialized(ptr, size); 189 BUG_ON(!valid_dma_direction(dir)); 190 addr = ops->map_page(dev, virt_to_page(ptr), 191 offset_in_page(ptr), size, 192 dir, attrs); 193 debug_dma_map_page(dev, virt_to_page(ptr), 194 offset_in_page(ptr), size, 195 dir, addr, true); 196 return addr; 197 } 198 199 static inline void dma_unmap_single_attrs(struct device *dev, dma_addr_t addr, 200 size_t size, 201 enum dma_data_direction dir, 202 unsigned long attrs) 203 { 204 struct dma_map_ops *ops = get_dma_ops(dev); 205 206 BUG_ON(!valid_dma_direction(dir)); 207 if (ops->unmap_page) 208 ops->unmap_page(dev, addr, size, dir, attrs); 209 debug_dma_unmap_page(dev, addr, size, dir, true); 210 } 211 212 /* 213 * dma_maps_sg_attrs returns 0 on error and > 0 on success. 214 * It should never return a value < 0. 215 */ 216 static inline int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, 217 int nents, enum dma_data_direction dir, 218 unsigned long attrs) 219 { 220 struct dma_map_ops *ops = get_dma_ops(dev); 221 int i, ents; 222 struct scatterlist *s; 223 224 for_each_sg(sg, s, nents, i) 225 kmemcheck_mark_initialized(sg_virt(s), s->length); 226 BUG_ON(!valid_dma_direction(dir)); 227 ents = ops->map_sg(dev, sg, nents, dir, attrs); 228 BUG_ON(ents < 0); 229 debug_dma_map_sg(dev, sg, nents, ents, dir); 230 231 return ents; 232 } 233 234 static inline void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg, 235 int nents, enum dma_data_direction dir, 236 unsigned long attrs) 237 { 238 struct dma_map_ops *ops = get_dma_ops(dev); 239 240 BUG_ON(!valid_dma_direction(dir)); 241 debug_dma_unmap_sg(dev, sg, nents, dir); 242 if (ops->unmap_sg) 243 ops->unmap_sg(dev, sg, nents, dir, attrs); 244 } 245 246 static inline dma_addr_t dma_map_page_attrs(struct device *dev, 247 struct page *page, 248 size_t offset, size_t size, 249 enum dma_data_direction dir, 250 unsigned long attrs) 251 { 252 struct dma_map_ops *ops = get_dma_ops(dev); 253 dma_addr_t addr; 254 255 kmemcheck_mark_initialized(page_address(page) + offset, size); 256 BUG_ON(!valid_dma_direction(dir)); 257 addr = ops->map_page(dev, page, offset, size, dir, attrs); 258 debug_dma_map_page(dev, page, offset, size, dir, addr, false); 259 260 return addr; 261 } 262 263 static inline void dma_unmap_page_attrs(struct device *dev, 264 dma_addr_t addr, size_t size, 265 enum dma_data_direction dir, 266 unsigned long attrs) 267 { 268 struct dma_map_ops *ops = get_dma_ops(dev); 269 270 BUG_ON(!valid_dma_direction(dir)); 271 if (ops->unmap_page) 272 ops->unmap_page(dev, addr, size, dir, attrs); 273 debug_dma_unmap_page(dev, addr, size, dir, false); 274 } 275 276 static inline dma_addr_t dma_map_resource(struct device *dev, 277 phys_addr_t phys_addr, 278 size_t size, 279 enum dma_data_direction dir, 280 unsigned long attrs) 281 { 282 struct dma_map_ops *ops = get_dma_ops(dev); 283 dma_addr_t addr; 284 285 BUG_ON(!valid_dma_direction(dir)); 286 287 /* Don't allow RAM to be mapped */ 288 BUG_ON(pfn_valid(PHYS_PFN(phys_addr))); 289 290 addr = phys_addr; 291 if (ops->map_resource) 292 addr = ops->map_resource(dev, phys_addr, size, dir, attrs); 293 294 debug_dma_map_resource(dev, phys_addr, size, dir, addr); 295 296 return addr; 297 } 298 299 static inline void dma_unmap_resource(struct device *dev, dma_addr_t addr, 300 size_t size, enum dma_data_direction dir, 301 unsigned long attrs) 302 { 303 struct dma_map_ops *ops = get_dma_ops(dev); 304 305 BUG_ON(!valid_dma_direction(dir)); 306 if (ops->unmap_resource) 307 ops->unmap_resource(dev, addr, size, dir, attrs); 308 debug_dma_unmap_resource(dev, addr, size, dir); 309 } 310 311 static inline void dma_sync_single_for_cpu(struct device *dev, dma_addr_t addr, 312 size_t size, 313 enum dma_data_direction dir) 314 { 315 struct dma_map_ops *ops = get_dma_ops(dev); 316 317 BUG_ON(!valid_dma_direction(dir)); 318 if (ops->sync_single_for_cpu) 319 ops->sync_single_for_cpu(dev, addr, size, dir); 320 debug_dma_sync_single_for_cpu(dev, addr, size, dir); 321 } 322 323 static inline void dma_sync_single_for_device(struct device *dev, 324 dma_addr_t addr, size_t size, 325 enum dma_data_direction dir) 326 { 327 struct dma_map_ops *ops = get_dma_ops(dev); 328 329 BUG_ON(!valid_dma_direction(dir)); 330 if (ops->sync_single_for_device) 331 ops->sync_single_for_device(dev, addr, size, dir); 332 debug_dma_sync_single_for_device(dev, addr, size, dir); 333 } 334 335 static inline void dma_sync_single_range_for_cpu(struct device *dev, 336 dma_addr_t addr, 337 unsigned long offset, 338 size_t size, 339 enum dma_data_direction dir) 340 { 341 const struct dma_map_ops *ops = get_dma_ops(dev); 342 343 BUG_ON(!valid_dma_direction(dir)); 344 if (ops->sync_single_for_cpu) 345 ops->sync_single_for_cpu(dev, addr + offset, size, dir); 346 debug_dma_sync_single_range_for_cpu(dev, addr, offset, size, dir); 347 } 348 349 static inline void dma_sync_single_range_for_device(struct device *dev, 350 dma_addr_t addr, 351 unsigned long offset, 352 size_t size, 353 enum dma_data_direction dir) 354 { 355 const struct dma_map_ops *ops = get_dma_ops(dev); 356 357 BUG_ON(!valid_dma_direction(dir)); 358 if (ops->sync_single_for_device) 359 ops->sync_single_for_device(dev, addr + offset, size, dir); 360 debug_dma_sync_single_range_for_device(dev, addr, offset, size, dir); 361 } 362 363 static inline void 364 dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, 365 int nelems, enum dma_data_direction dir) 366 { 367 struct dma_map_ops *ops = get_dma_ops(dev); 368 369 BUG_ON(!valid_dma_direction(dir)); 370 if (ops->sync_sg_for_cpu) 371 ops->sync_sg_for_cpu(dev, sg, nelems, dir); 372 debug_dma_sync_sg_for_cpu(dev, sg, nelems, dir); 373 } 374 375 static inline void 376 dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, 377 int nelems, enum dma_data_direction dir) 378 { 379 struct dma_map_ops *ops = get_dma_ops(dev); 380 381 BUG_ON(!valid_dma_direction(dir)); 382 if (ops->sync_sg_for_device) 383 ops->sync_sg_for_device(dev, sg, nelems, dir); 384 debug_dma_sync_sg_for_device(dev, sg, nelems, dir); 385 386 } 387 388 #define dma_map_single(d, a, s, r) dma_map_single_attrs(d, a, s, r, 0) 389 #define dma_unmap_single(d, a, s, r) dma_unmap_single_attrs(d, a, s, r, 0) 390 #define dma_map_sg(d, s, n, r) dma_map_sg_attrs(d, s, n, r, 0) 391 #define dma_unmap_sg(d, s, n, r) dma_unmap_sg_attrs(d, s, n, r, 0) 392 #define dma_map_page(d, p, o, s, r) dma_map_page_attrs(d, p, o, s, r, 0) 393 #define dma_unmap_page(d, a, s, r) dma_unmap_page_attrs(d, a, s, r, 0) 394 395 extern int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, 396 void *cpu_addr, dma_addr_t dma_addr, size_t size); 397 398 void *dma_common_contiguous_remap(struct page *page, size_t size, 399 unsigned long vm_flags, 400 pgprot_t prot, const void *caller); 401 402 void *dma_common_pages_remap(struct page **pages, size_t size, 403 unsigned long vm_flags, pgprot_t prot, 404 const void *caller); 405 void dma_common_free_remap(void *cpu_addr, size_t size, unsigned long vm_flags); 406 407 /** 408 * dma_mmap_attrs - map a coherent DMA allocation into user space 409 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices 410 * @vma: vm_area_struct describing requested user mapping 411 * @cpu_addr: kernel CPU-view address returned from dma_alloc_attrs 412 * @handle: device-view address returned from dma_alloc_attrs 413 * @size: size of memory originally requested in dma_alloc_attrs 414 * @attrs: attributes of mapping properties requested in dma_alloc_attrs 415 * 416 * Map a coherent DMA buffer previously allocated by dma_alloc_attrs 417 * into user space. The coherent DMA buffer must not be freed by the 418 * driver until the user space mapping has been released. 419 */ 420 static inline int 421 dma_mmap_attrs(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, 422 dma_addr_t dma_addr, size_t size, unsigned long attrs) 423 { 424 struct dma_map_ops *ops = get_dma_ops(dev); 425 BUG_ON(!ops); 426 if (ops->mmap) 427 return ops->mmap(dev, vma, cpu_addr, dma_addr, size, attrs); 428 return dma_common_mmap(dev, vma, cpu_addr, dma_addr, size); 429 } 430 431 #define dma_mmap_coherent(d, v, c, h, s) dma_mmap_attrs(d, v, c, h, s, 0) 432 433 int 434 dma_common_get_sgtable(struct device *dev, struct sg_table *sgt, 435 void *cpu_addr, dma_addr_t dma_addr, size_t size); 436 437 static inline int 438 dma_get_sgtable_attrs(struct device *dev, struct sg_table *sgt, void *cpu_addr, 439 dma_addr_t dma_addr, size_t size, 440 unsigned long attrs) 441 { 442 struct dma_map_ops *ops = get_dma_ops(dev); 443 BUG_ON(!ops); 444 if (ops->get_sgtable) 445 return ops->get_sgtable(dev, sgt, cpu_addr, dma_addr, size, 446 attrs); 447 return dma_common_get_sgtable(dev, sgt, cpu_addr, dma_addr, size); 448 } 449 450 #define dma_get_sgtable(d, t, v, h, s) dma_get_sgtable_attrs(d, t, v, h, s, 0) 451 452 #ifndef arch_dma_alloc_attrs 453 #define arch_dma_alloc_attrs(dev, flag) (true) 454 #endif 455 456 static inline void *dma_alloc_attrs(struct device *dev, size_t size, 457 dma_addr_t *dma_handle, gfp_t flag, 458 unsigned long attrs) 459 { 460 struct dma_map_ops *ops = get_dma_ops(dev); 461 void *cpu_addr; 462 463 BUG_ON(!ops); 464 465 if (dma_alloc_from_coherent(dev, size, dma_handle, &cpu_addr)) 466 return cpu_addr; 467 468 if (!arch_dma_alloc_attrs(&dev, &flag)) 469 return NULL; 470 if (!ops->alloc) 471 return NULL; 472 473 cpu_addr = ops->alloc(dev, size, dma_handle, flag, attrs); 474 debug_dma_alloc_coherent(dev, size, *dma_handle, cpu_addr); 475 return cpu_addr; 476 } 477 478 static inline void dma_free_attrs(struct device *dev, size_t size, 479 void *cpu_addr, dma_addr_t dma_handle, 480 unsigned long attrs) 481 { 482 struct dma_map_ops *ops = get_dma_ops(dev); 483 484 BUG_ON(!ops); 485 WARN_ON(irqs_disabled()); 486 487 if (dma_release_from_coherent(dev, get_order(size), cpu_addr)) 488 return; 489 490 if (!ops->free || !cpu_addr) 491 return; 492 493 debug_dma_free_coherent(dev, size, cpu_addr, dma_handle); 494 ops->free(dev, size, cpu_addr, dma_handle, attrs); 495 } 496 497 static inline void *dma_alloc_coherent(struct device *dev, size_t size, 498 dma_addr_t *dma_handle, gfp_t flag) 499 { 500 return dma_alloc_attrs(dev, size, dma_handle, flag, 0); 501 } 502 503 static inline void dma_free_coherent(struct device *dev, size_t size, 504 void *cpu_addr, dma_addr_t dma_handle) 505 { 506 return dma_free_attrs(dev, size, cpu_addr, dma_handle, 0); 507 } 508 509 static inline void *dma_alloc_noncoherent(struct device *dev, size_t size, 510 dma_addr_t *dma_handle, gfp_t gfp) 511 { 512 return dma_alloc_attrs(dev, size, dma_handle, gfp, 513 DMA_ATTR_NON_CONSISTENT); 514 } 515 516 static inline void dma_free_noncoherent(struct device *dev, size_t size, 517 void *cpu_addr, dma_addr_t dma_handle) 518 { 519 dma_free_attrs(dev, size, cpu_addr, dma_handle, 520 DMA_ATTR_NON_CONSISTENT); 521 } 522 523 static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) 524 { 525 debug_dma_mapping_error(dev, dma_addr); 526 527 if (get_dma_ops(dev)->mapping_error) 528 return get_dma_ops(dev)->mapping_error(dev, dma_addr); 529 530 #ifdef DMA_ERROR_CODE 531 return dma_addr == DMA_ERROR_CODE; 532 #else 533 return 0; 534 #endif 535 } 536 537 #ifndef HAVE_ARCH_DMA_SUPPORTED 538 static inline int dma_supported(struct device *dev, u64 mask) 539 { 540 struct dma_map_ops *ops = get_dma_ops(dev); 541 542 if (!ops) 543 return 0; 544 if (!ops->dma_supported) 545 return 1; 546 return ops->dma_supported(dev, mask); 547 } 548 #endif 549 550 #ifndef HAVE_ARCH_DMA_SET_MASK 551 static inline int dma_set_mask(struct device *dev, u64 mask) 552 { 553 struct dma_map_ops *ops = get_dma_ops(dev); 554 555 if (ops->set_dma_mask) 556 return ops->set_dma_mask(dev, mask); 557 558 if (!dev->dma_mask || !dma_supported(dev, mask)) 559 return -EIO; 560 *dev->dma_mask = mask; 561 return 0; 562 } 563 #endif 564 565 static inline u64 dma_get_mask(struct device *dev) 566 { 567 if (dev && dev->dma_mask && *dev->dma_mask) 568 return *dev->dma_mask; 569 return DMA_BIT_MASK(32); 570 } 571 572 #ifdef CONFIG_ARCH_HAS_DMA_SET_COHERENT_MASK 573 int dma_set_coherent_mask(struct device *dev, u64 mask); 574 #else 575 static inline int dma_set_coherent_mask(struct device *dev, u64 mask) 576 { 577 if (!dma_supported(dev, mask)) 578 return -EIO; 579 dev->coherent_dma_mask = mask; 580 return 0; 581 } 582 #endif 583 584 /* 585 * Set both the DMA mask and the coherent DMA mask to the same thing. 586 * Note that we don't check the return value from dma_set_coherent_mask() 587 * as the DMA API guarantees that the coherent DMA mask can be set to 588 * the same or smaller than the streaming DMA mask. 589 */ 590 static inline int dma_set_mask_and_coherent(struct device *dev, u64 mask) 591 { 592 int rc = dma_set_mask(dev, mask); 593 if (rc == 0) 594 dma_set_coherent_mask(dev, mask); 595 return rc; 596 } 597 598 /* 599 * Similar to the above, except it deals with the case where the device 600 * does not have dev->dma_mask appropriately setup. 601 */ 602 static inline int dma_coerce_mask_and_coherent(struct device *dev, u64 mask) 603 { 604 dev->dma_mask = &dev->coherent_dma_mask; 605 return dma_set_mask_and_coherent(dev, mask); 606 } 607 608 extern u64 dma_get_required_mask(struct device *dev); 609 610 #ifndef arch_setup_dma_ops 611 static inline void arch_setup_dma_ops(struct device *dev, u64 dma_base, 612 u64 size, const struct iommu_ops *iommu, 613 bool coherent) { } 614 #endif 615 616 #ifndef arch_teardown_dma_ops 617 static inline void arch_teardown_dma_ops(struct device *dev) { } 618 #endif 619 620 static inline unsigned int dma_get_max_seg_size(struct device *dev) 621 { 622 if (dev->dma_parms && dev->dma_parms->max_segment_size) 623 return dev->dma_parms->max_segment_size; 624 return SZ_64K; 625 } 626 627 static inline unsigned int dma_set_max_seg_size(struct device *dev, 628 unsigned int size) 629 { 630 if (dev->dma_parms) { 631 dev->dma_parms->max_segment_size = size; 632 return 0; 633 } 634 return -EIO; 635 } 636 637 static inline unsigned long dma_get_seg_boundary(struct device *dev) 638 { 639 if (dev->dma_parms && dev->dma_parms->segment_boundary_mask) 640 return dev->dma_parms->segment_boundary_mask; 641 return DMA_BIT_MASK(32); 642 } 643 644 static inline int dma_set_seg_boundary(struct device *dev, unsigned long mask) 645 { 646 if (dev->dma_parms) { 647 dev->dma_parms->segment_boundary_mask = mask; 648 return 0; 649 } 650 return -EIO; 651 } 652 653 #ifndef dma_max_pfn 654 static inline unsigned long dma_max_pfn(struct device *dev) 655 { 656 return *dev->dma_mask >> PAGE_SHIFT; 657 } 658 #endif 659 660 static inline void *dma_zalloc_coherent(struct device *dev, size_t size, 661 dma_addr_t *dma_handle, gfp_t flag) 662 { 663 void *ret = dma_alloc_coherent(dev, size, dma_handle, 664 flag | __GFP_ZERO); 665 return ret; 666 } 667 668 #ifdef CONFIG_HAS_DMA 669 static inline int dma_get_cache_alignment(void) 670 { 671 #ifdef ARCH_DMA_MINALIGN 672 return ARCH_DMA_MINALIGN; 673 #endif 674 return 1; 675 } 676 #endif 677 678 /* flags for the coherent memory api */ 679 #define DMA_MEMORY_MAP 0x01 680 #define DMA_MEMORY_IO 0x02 681 #define DMA_MEMORY_INCLUDES_CHILDREN 0x04 682 #define DMA_MEMORY_EXCLUSIVE 0x08 683 684 #ifdef CONFIG_HAVE_GENERIC_DMA_COHERENT 685 int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr, 686 dma_addr_t device_addr, size_t size, int flags); 687 void dma_release_declared_memory(struct device *dev); 688 void *dma_mark_declared_memory_occupied(struct device *dev, 689 dma_addr_t device_addr, size_t size); 690 #else 691 static inline int 692 dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr, 693 dma_addr_t device_addr, size_t size, int flags) 694 { 695 return 0; 696 } 697 698 static inline void 699 dma_release_declared_memory(struct device *dev) 700 { 701 } 702 703 static inline void * 704 dma_mark_declared_memory_occupied(struct device *dev, 705 dma_addr_t device_addr, size_t size) 706 { 707 return ERR_PTR(-EBUSY); 708 } 709 #endif /* CONFIG_HAVE_GENERIC_DMA_COHERENT */ 710 711 /* 712 * Managed DMA API 713 */ 714 extern void *dmam_alloc_coherent(struct device *dev, size_t size, 715 dma_addr_t *dma_handle, gfp_t gfp); 716 extern void dmam_free_coherent(struct device *dev, size_t size, void *vaddr, 717 dma_addr_t dma_handle); 718 extern void *dmam_alloc_noncoherent(struct device *dev, size_t size, 719 dma_addr_t *dma_handle, gfp_t gfp); 720 extern void dmam_free_noncoherent(struct device *dev, size_t size, void *vaddr, 721 dma_addr_t dma_handle); 722 #ifdef CONFIG_HAVE_GENERIC_DMA_COHERENT 723 extern int dmam_declare_coherent_memory(struct device *dev, 724 phys_addr_t phys_addr, 725 dma_addr_t device_addr, size_t size, 726 int flags); 727 extern void dmam_release_declared_memory(struct device *dev); 728 #else /* CONFIG_HAVE_GENERIC_DMA_COHERENT */ 729 static inline int dmam_declare_coherent_memory(struct device *dev, 730 phys_addr_t phys_addr, dma_addr_t device_addr, 731 size_t size, gfp_t gfp) 732 { 733 return 0; 734 } 735 736 static inline void dmam_release_declared_memory(struct device *dev) 737 { 738 } 739 #endif /* CONFIG_HAVE_GENERIC_DMA_COHERENT */ 740 741 static inline void *dma_alloc_wc(struct device *dev, size_t size, 742 dma_addr_t *dma_addr, gfp_t gfp) 743 { 744 return dma_alloc_attrs(dev, size, dma_addr, gfp, 745 DMA_ATTR_WRITE_COMBINE); 746 } 747 #ifndef dma_alloc_writecombine 748 #define dma_alloc_writecombine dma_alloc_wc 749 #endif 750 751 static inline void dma_free_wc(struct device *dev, size_t size, 752 void *cpu_addr, dma_addr_t dma_addr) 753 { 754 return dma_free_attrs(dev, size, cpu_addr, dma_addr, 755 DMA_ATTR_WRITE_COMBINE); 756 } 757 #ifndef dma_free_writecombine 758 #define dma_free_writecombine dma_free_wc 759 #endif 760 761 static inline int dma_mmap_wc(struct device *dev, 762 struct vm_area_struct *vma, 763 void *cpu_addr, dma_addr_t dma_addr, 764 size_t size) 765 { 766 return dma_mmap_attrs(dev, vma, cpu_addr, dma_addr, size, 767 DMA_ATTR_WRITE_COMBINE); 768 } 769 #ifndef dma_mmap_writecombine 770 #define dma_mmap_writecombine dma_mmap_wc 771 #endif 772 773 #if defined(CONFIG_NEED_DMA_MAP_STATE) || defined(CONFIG_DMA_API_DEBUG) 774 #define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME) dma_addr_t ADDR_NAME 775 #define DEFINE_DMA_UNMAP_LEN(LEN_NAME) __u32 LEN_NAME 776 #define dma_unmap_addr(PTR, ADDR_NAME) ((PTR)->ADDR_NAME) 777 #define dma_unmap_addr_set(PTR, ADDR_NAME, VAL) (((PTR)->ADDR_NAME) = (VAL)) 778 #define dma_unmap_len(PTR, LEN_NAME) ((PTR)->LEN_NAME) 779 #define dma_unmap_len_set(PTR, LEN_NAME, VAL) (((PTR)->LEN_NAME) = (VAL)) 780 #else 781 #define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME) 782 #define DEFINE_DMA_UNMAP_LEN(LEN_NAME) 783 #define dma_unmap_addr(PTR, ADDR_NAME) (0) 784 #define dma_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0) 785 #define dma_unmap_len(PTR, LEN_NAME) (0) 786 #define dma_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0) 787 #endif 788 789 #endif
1 /* interrupt.h */ 2 #ifndef _LINUX_INTERRUPT_H 3 #define _LINUX_INTERRUPT_H 4 5 #include <linux/kernel.h> 6 #include <linux/linkage.h> 7 #include <linux/bitops.h> 8 #include <linux/preempt.h> 9 #include <linux/cpumask.h> 10 #include <linux/irqreturn.h> 11 #include <linux/irqnr.h> 12 #include <linux/hardirq.h> 13 #include <linux/irqflags.h> 14 #include <linux/hrtimer.h> 15 #include <linux/kref.h> 16 #include <linux/workqueue.h> 17 18 #include <linux/atomic.h> 19 #include <asm/ptrace.h> 20 #include <asm/irq.h> 21 22 /* 23 * These correspond to the IORESOURCE_IRQ_* defines in 24 * linux/ioport.h to select the interrupt line behaviour. When 25 * requesting an interrupt without specifying a IRQF_TRIGGER, the 26 * setting should be assumed to be "as already configured", which 27 * may be as per machine or firmware initialisation. 28 */ 29 #define IRQF_TRIGGER_NONE 0x00000000 30 #define IRQF_TRIGGER_RISING 0x00000001 31 #define IRQF_TRIGGER_FALLING 0x00000002 32 #define IRQF_TRIGGER_HIGH 0x00000004 33 #define IRQF_TRIGGER_LOW 0x00000008 34 #define IRQF_TRIGGER_MASK (IRQF_TRIGGER_HIGH | IRQF_TRIGGER_LOW | \ 35 IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING) 36 #define IRQF_TRIGGER_PROBE 0x00000010 37 38 /* 39 * These flags used only by the kernel as part of the 40 * irq handling routines. 41 * 42 * IRQF_SHARED - allow sharing the irq among several devices 43 * IRQF_PROBE_SHARED - set by callers when they expect sharing mismatches to occur 44 * IRQF_TIMER - Flag to mark this interrupt as timer interrupt 45 * IRQF_PERCPU - Interrupt is per cpu 46 * IRQF_NOBALANCING - Flag to exclude this interrupt from irq balancing 47 * IRQF_IRQPOLL - Interrupt is used for polling (only the interrupt that is 48 * registered first in an shared interrupt is considered for 49 * performance reasons) 50 * IRQF_ONESHOT - Interrupt is not reenabled after the hardirq handler finished. 51 * Used by threaded interrupts which need to keep the 52 * irq line disabled until the threaded handler has been run. 53 * IRQF_NO_SUSPEND - Do not disable this IRQ during suspend. Does not guarantee 54 * that this interrupt will wake the system from a suspended 55 * state. See Documentation/power/suspend-and-interrupts.txt 56 * IRQF_FORCE_RESUME - Force enable it on resume even if IRQF_NO_SUSPEND is set 57 * IRQF_NO_THREAD - Interrupt cannot be threaded 58 * IRQF_EARLY_RESUME - Resume IRQ early during syscore instead of at device 59 * resume time. 60 * IRQF_COND_SUSPEND - If the IRQ is shared with a NO_SUSPEND user, execute this 61 * interrupt handler after suspending interrupts. For system 62 * wakeup devices users need to implement wakeup detection in 63 * their interrupt handlers. 64 */ 65 #define IRQF_SHARED 0x00000080 66 #define IRQF_PROBE_SHARED 0x00000100 67 #define __IRQF_TIMER 0x00000200 68 #define IRQF_PERCPU 0x00000400 69 #define IRQF_NOBALANCING 0x00000800 70 #define IRQF_IRQPOLL 0x00001000 71 #define IRQF_ONESHOT 0x00002000 72 #define IRQF_NO_SUSPEND 0x00004000 73 #define IRQF_FORCE_RESUME 0x00008000 74 #define IRQF_NO_THREAD 0x00010000 75 #define IRQF_EARLY_RESUME 0x00020000 76 #define IRQF_COND_SUSPEND 0x00040000 77 78 #define IRQF_TIMER (__IRQF_TIMER | IRQF_NO_SUSPEND | IRQF_NO_THREAD) 79 80 /* 81 * These values can be returned by request_any_context_irq() and 82 * describe the context the interrupt will be run in. 83 * 84 * IRQC_IS_HARDIRQ - interrupt runs in hardirq context 85 * IRQC_IS_NESTED - interrupt runs in a nested threaded context 86 */ 87 enum { 88 IRQC_IS_HARDIRQ = 0, 89 IRQC_IS_NESTED, 90 }; 91 92 typedef irqreturn_t (*irq_handler_t)(int, void *); 93 94 /** 95 * struct irqaction - per interrupt action descriptor 96 * @handler: interrupt handler function 97 * @name: name of the device 98 * @dev_id: cookie to identify the device 99 * @percpu_dev_id: cookie to identify the device 100 * @next: pointer to the next irqaction for shared interrupts 101 * @irq: interrupt number 102 * @flags: flags (see IRQF_* above) 103 * @thread_fn: interrupt handler function for threaded interrupts 104 * @thread: thread pointer for threaded interrupts 105 * @secondary: pointer to secondary irqaction (force threading) 106 * @thread_flags: flags related to @thread 107 * @thread_mask: bitmask for keeping track of @thread activity 108 * @dir: pointer to the proc/irq/NN/name entry 109 */ 110 struct irqaction { 111 irq_handler_t handler; 112 void *dev_id; 113 void __percpu *percpu_dev_id; 114 struct irqaction *next; 115 irq_handler_t thread_fn; 116 struct task_struct *thread; 117 struct irqaction *secondary; 118 unsigned int irq; 119 unsigned int flags; 120 unsigned long thread_flags; 121 unsigned long thread_mask; 122 const char *name; 123 struct proc_dir_entry *dir; 124 } ____cacheline_internodealigned_in_smp; 125 126 extern irqreturn_t no_action(int cpl, void *dev_id); 127 128 /* 129 * If a (PCI) device interrupt is not connected we set dev->irq to 130 * IRQ_NOTCONNECTED. This causes request_irq() to fail with -ENOTCONN, so we 131 * can distingiush that case from other error returns. 132 * 133 * 0x80000000 is guaranteed to be outside the available range of interrupts 134 * and easy to distinguish from other possible incorrect values. 135 */ 136 #define IRQ_NOTCONNECTED (1U << 31) 137 138 extern int __must_check 139 request_threaded_irq(unsigned int irq, irq_handler_t handler, 140 irq_handler_t thread_fn, 141 unsigned long flags, const char *name, void *dev); 142 143 static inline int __must_check 144 request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, 145 const char *name, void *dev) 146 { 147 return request_threaded_irq(irq, handler, NULL, flags, name, dev); 148 } 149 150 extern int __must_check 151 request_any_context_irq(unsigned int irq, irq_handler_t handler, 152 unsigned long flags, const char *name, void *dev_id); 153 154 extern int __must_check 155 request_percpu_irq(unsigned int irq, irq_handler_t handler, 156 const char *devname, void __percpu *percpu_dev_id); 157 158 extern void free_irq(unsigned int, void *); 159 extern void free_percpu_irq(unsigned int, void __percpu *); 160 161 struct device; 162 163 extern int __must_check 164 devm_request_threaded_irq(struct device *dev, unsigned int irq, 165 irq_handler_t handler, irq_handler_t thread_fn, 166 unsigned long irqflags, const char *devname, 167 void *dev_id); 168 169 static inline int __must_check 170 devm_request_irq(struct device *dev, unsigned int irq, irq_handler_t handler, 171 unsigned long irqflags, const char *devname, void *dev_id) 172 { 173 return devm_request_threaded_irq(dev, irq, handler, NULL, irqflags, 174 devname, dev_id); 175 } 176 177 extern int __must_check 178 devm_request_any_context_irq(struct device *dev, unsigned int irq, 179 irq_handler_t handler, unsigned long irqflags, 180 const char *devname, void *dev_id); 181 182 extern void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id); 183 184 /* 185 * On lockdep we dont want to enable hardirqs in hardirq 186 * context. Use local_irq_enable_in_hardirq() to annotate 187 * kernel code that has to do this nevertheless (pretty much 188 * the only valid case is for old/broken hardware that is 189 * insanely slow). 190 * 191 * NOTE: in theory this might break fragile code that relies 192 * on hardirq delivery - in practice we dont seem to have such 193 * places left. So the only effect should be slightly increased 194 * irqs-off latencies. 195 */ 196 #ifdef CONFIG_LOCKDEP 197 # define local_irq_enable_in_hardirq() do { } while (0) 198 #else 199 # define local_irq_enable_in_hardirq() local_irq_enable() 200 #endif 201 202 extern void disable_irq_nosync(unsigned int irq); 203 extern bool disable_hardirq(unsigned int irq); 204 extern void disable_irq(unsigned int irq); 205 extern void disable_percpu_irq(unsigned int irq); 206 extern void enable_irq(unsigned int irq); 207 extern void enable_percpu_irq(unsigned int irq, unsigned int type); 208 extern bool irq_percpu_is_enabled(unsigned int irq); 209 extern void irq_wake_thread(unsigned int irq, void *dev_id); 210 211 /* The following three functions are for the core kernel use only. */ 212 extern void suspend_device_irqs(void); 213 extern void resume_device_irqs(void); 214 215 /** 216 * struct irq_affinity_notify - context for notification of IRQ affinity changes 217 * @irq: Interrupt to which notification applies 218 * @kref: Reference count, for internal use 219 * @work: Work item, for internal use 220 * @notify: Function to be called on change. This will be 221 * called in process context. 222 * @release: Function to be called on release. This will be 223 * called in process context. Once registered, the 224 * structure must only be freed when this function is 225 * called or later. 226 */ 227 struct irq_affinity_notify { 228 unsigned int irq; 229 struct kref kref; 230 struct work_struct work; 231 void (*notify)(struct irq_affinity_notify *, const cpumask_t *mask); 232 void (*release)(struct kref *ref); 233 }; 234 235 /** 236 * struct irq_affinity - Description for automatic irq affinity assignements 237 * @pre_vectors: Don't apply affinity to @pre_vectors at beginning of 238 * the MSI(-X) vector space 239 * @post_vectors: Don't apply affinity to @post_vectors at end of 240 * the MSI(-X) vector space 241 */ 242 struct irq_affinity { 243 int pre_vectors; 244 int post_vectors; 245 }; 246 247 #if defined(CONFIG_SMP) 248 249 extern cpumask_var_t irq_default_affinity; 250 251 /* Internal implementation. Use the helpers below */ 252 extern int __irq_set_affinity(unsigned int irq, const struct cpumask *cpumask, 253 bool force); 254 255 /** 256 * irq_set_affinity - Set the irq affinity of a given irq 257 * @irq: Interrupt to set affinity 258 * @cpumask: cpumask 259 * 260 * Fails if cpumask does not contain an online CPU 261 */ 262 static inline int 263 irq_set_affinity(unsigned int irq, const struct cpumask *cpumask) 264 { 265 return __irq_set_affinity(irq, cpumask, false); 266 } 267 268 /** 269 * irq_force_affinity - Force the irq affinity of a given irq 270 * @irq: Interrupt to set affinity 271 * @cpumask: cpumask 272 * 273 * Same as irq_set_affinity, but without checking the mask against 274 * online cpus. 275 * 276 * Solely for low level cpu hotplug code, where we need to make per 277 * cpu interrupts affine before the cpu becomes online. 278 */ 279 static inline int 280 irq_force_affinity(unsigned int irq, const struct cpumask *cpumask) 281 { 282 return __irq_set_affinity(irq, cpumask, true); 283 } 284 285 extern int irq_can_set_affinity(unsigned int irq); 286 extern int irq_select_affinity(unsigned int irq); 287 288 extern int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m); 289 290 extern int 291 irq_set_affinity_notifier(unsigned int irq, struct irq_affinity_notify *notify); 292 293 struct cpumask *irq_create_affinity_masks(int nvec, const struct irq_affinity *affd); 294 int irq_calc_affinity_vectors(int maxvec, const struct irq_affinity *affd); 295 296 #else /* CONFIG_SMP */ 297 298 static inline int irq_set_affinity(unsigned int irq, const struct cpumask *m) 299 { 300 return -EINVAL; 301 } 302 303 static inline int irq_force_affinity(unsigned int irq, const struct cpumask *cpumask) 304 { 305 return 0; 306 } 307 308 static inline int irq_can_set_affinity(unsigned int irq) 309 { 310 return 0; 311 } 312 313 static inline int irq_select_affinity(unsigned int irq) { return 0; } 314 315 static inline int irq_set_affinity_hint(unsigned int irq, 316 const struct cpumask *m) 317 { 318 return -EINVAL; 319 } 320 321 static inline int 322 irq_set_affinity_notifier(unsigned int irq, struct irq_affinity_notify *notify) 323 { 324 return 0; 325 } 326 327 static inline struct cpumask * 328 irq_create_affinity_masks(int nvec, const struct irq_affinity *affd) 329 { 330 return NULL; 331 } 332 333 static inline int 334 irq_calc_affinity_vectors(int maxvec, const struct irq_affinity *affd) 335 { 336 return maxvec; 337 } 338 339 #endif /* CONFIG_SMP */ 340 341 /* 342 * Special lockdep variants of irq disabling/enabling. 343 * These should be used for locking constructs that 344 * know that a particular irq context which is disabled, 345 * and which is the only irq-context user of a lock, 346 * that it's safe to take the lock in the irq-disabled 347 * section without disabling hardirqs. 348 * 349 * On !CONFIG_LOCKDEP they are equivalent to the normal 350 * irq disable/enable methods. 351 */ 352 static inline void disable_irq_nosync_lockdep(unsigned int irq) 353 { 354 disable_irq_nosync(irq); 355 #ifdef CONFIG_LOCKDEP 356 local_irq_disable(); 357 #endif 358 } 359 360 static inline void disable_irq_nosync_lockdep_irqsave(unsigned int irq, unsigned long *flags) 361 { 362 disable_irq_nosync(irq); 363 #ifdef CONFIG_LOCKDEP 364 local_irq_save(*flags); 365 #endif 366 } 367 368 static inline void disable_irq_lockdep(unsigned int irq) 369 { 370 disable_irq(irq); 371 #ifdef CONFIG_LOCKDEP 372 local_irq_disable(); 373 #endif 374 } 375 376 static inline void enable_irq_lockdep(unsigned int irq) 377 { 378 #ifdef CONFIG_LOCKDEP 379 local_irq_enable(); 380 #endif 381 enable_irq(irq); 382 } 383 384 static inline void enable_irq_lockdep_irqrestore(unsigned int irq, unsigned long *flags) 385 { 386 #ifdef CONFIG_LOCKDEP 387 local_irq_restore(*flags); 388 #endif 389 enable_irq(irq); 390 } 391 392 /* IRQ wakeup (PM) control: */ 393 extern int irq_set_irq_wake(unsigned int irq, unsigned int on); 394 395 static inline int enable_irq_wake(unsigned int irq) 396 { 397 return irq_set_irq_wake(irq, 1); 398 } 399 400 static inline int disable_irq_wake(unsigned int irq) 401 { 402 return irq_set_irq_wake(irq, 0); 403 } 404 405 /* 406 * irq_get_irqchip_state/irq_set_irqchip_state specific flags 407 */ 408 enum irqchip_irq_state { 409 IRQCHIP_STATE_PENDING, /* Is interrupt pending? */ 410 IRQCHIP_STATE_ACTIVE, /* Is interrupt in progress? */ 411 IRQCHIP_STATE_MASKED, /* Is interrupt masked? */ 412 IRQCHIP_STATE_LINE_LEVEL, /* Is IRQ line high? */ 413 }; 414 415 extern int irq_get_irqchip_state(unsigned int irq, enum irqchip_irq_state which, 416 bool *state); 417 extern int irq_set_irqchip_state(unsigned int irq, enum irqchip_irq_state which, 418 bool state); 419 420 #ifdef CONFIG_IRQ_FORCED_THREADING 421 extern bool force_irqthreads; 422 #else 423 #define force_irqthreads (0) 424 #endif 425 426 #ifndef __ARCH_SET_SOFTIRQ_PENDING 427 #define set_softirq_pending(x) (local_softirq_pending() = (x)) 428 #define or_softirq_pending(x) (local_softirq_pending() |= (x)) 429 #endif 430 431 /* Some architectures might implement lazy enabling/disabling of 432 * interrupts. In some cases, such as stop_machine, we might want 433 * to ensure that after a local_irq_disable(), interrupts have 434 * really been disabled in hardware. Such architectures need to 435 * implement the following hook. 436 */ 437 #ifndef hard_irq_disable 438 #define hard_irq_disable() do { } while(0) 439 #endif 440 441 /* PLEASE, avoid to allocate new softirqs, if you need not _really_ high 442 frequency threaded job scheduling. For almost all the purposes 443 tasklets are more than enough. F.e. all serial device BHs et 444 al. should be converted to tasklets, not to softirqs. 445 */ 446 447 enum 448 { 449 HI_SOFTIRQ=0, 450 TIMER_SOFTIRQ, 451 NET_TX_SOFTIRQ, 452 NET_RX_SOFTIRQ, 453 BLOCK_SOFTIRQ, 454 IRQ_POLL_SOFTIRQ, 455 TASKLET_SOFTIRQ, 456 SCHED_SOFTIRQ, 457 HRTIMER_SOFTIRQ, /* Unused, but kept as tools rely on the 458 numbering. Sigh! */ 459 RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */ 460 461 NR_SOFTIRQS 462 }; 463 464 #define SOFTIRQ_STOP_IDLE_MASK (~(1 << RCU_SOFTIRQ)) 465 466 /* map softirq index to softirq name. update 'softirq_to_name' in 467 * kernel/softirq.c when adding a new softirq. 468 */ 469 extern const char * const softirq_to_name[NR_SOFTIRQS]; 470 471 /* softirq mask and active fields moved to irq_cpustat_t in 472 * asm/hardirq.h to get better cache usage. KAO 473 */ 474 475 struct softirq_action 476 { 477 void (*action)(struct softirq_action *); 478 }; 479 480 asmlinkage void do_softirq(void); 481 asmlinkage void __do_softirq(void); 482 483 #ifdef __ARCH_HAS_DO_SOFTIRQ 484 void do_softirq_own_stack(void); 485 #else 486 static inline void do_softirq_own_stack(void) 487 { 488 __do_softirq(); 489 } 490 #endif 491 492 extern void open_softirq(int nr, void (*action)(struct softirq_action *)); 493 extern void softirq_init(void); 494 extern void __raise_softirq_irqoff(unsigned int nr); 495 496 extern void raise_softirq_irqoff(unsigned int nr); 497 extern void raise_softirq(unsigned int nr); 498 499 DECLARE_PER_CPU(struct task_struct *, ksoftirqd); 500 501 static inline struct task_struct *this_cpu_ksoftirqd(void) 502 { 503 return this_cpu_read(ksoftirqd); 504 } 505 506 /* Tasklets --- multithreaded analogue of BHs. 507 508 Main feature differing them of generic softirqs: tasklet 509 is running only on one CPU simultaneously. 510 511 Main feature differing them of BHs: different tasklets 512 may be run simultaneously on different CPUs. 513 514 Properties: 515 * If tasklet_schedule() is called, then tasklet is guaranteed 516 to be executed on some cpu at least once after this. 517 * If the tasklet is already scheduled, but its execution is still not 518 started, it will be executed only once. 519 * If this tasklet is already running on another CPU (or schedule is called 520 from tasklet itself), it is rescheduled for later. 521 * Tasklet is strictly serialized wrt itself, but not 522 wrt another tasklets. If client needs some intertask synchronization, 523 he makes it with spinlocks. 524 */ 525 526 struct tasklet_struct 527 { 528 struct tasklet_struct *next; 529 unsigned long state; 530 atomic_t count; 531 void (*func)(unsigned long); 532 unsigned long data; 533 }; 534 535 #define DECLARE_TASKLET(name, func, data) \ 536 struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(0), func, data } 537 538 #define DECLARE_TASKLET_DISABLED(name, func, data) \ 539 struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(1), func, data } 540 541 542 enum 543 { 544 TASKLET_STATE_SCHED, /* Tasklet is scheduled for execution */ 545 TASKLET_STATE_RUN /* Tasklet is running (SMP only) */ 546 }; 547 548 #ifdef CONFIG_SMP 549 static inline int tasklet_trylock(struct tasklet_struct *t) 550 { 551 return !test_and_set_bit(TASKLET_STATE_RUN, &(t)->state); 552 } 553 554 static inline void tasklet_unlock(struct tasklet_struct *t) 555 { 556 smp_mb__before_atomic(); 557 clear_bit(TASKLET_STATE_RUN, &(t)->state); 558 } 559 560 static inline void tasklet_unlock_wait(struct tasklet_struct *t) 561 { 562 while (test_bit(TASKLET_STATE_RUN, &(t)->state)) { barrier(); } 563 } 564 #else 565 #define tasklet_trylock(t) 1 566 #define tasklet_unlock_wait(t) do { } while (0) 567 #define tasklet_unlock(t) do { } while (0) 568 #endif 569 570 extern void __tasklet_schedule(struct tasklet_struct *t); 571 572 static inline void tasklet_schedule(struct tasklet_struct *t) 573 { 574 if (!test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) 575 __tasklet_schedule(t); 576 } 577 578 extern void __tasklet_hi_schedule(struct tasklet_struct *t); 579 580 static inline void tasklet_hi_schedule(struct tasklet_struct *t) 581 { 582 if (!test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) 583 __tasklet_hi_schedule(t); 584 } 585 586 extern void __tasklet_hi_schedule_first(struct tasklet_struct *t); 587 588 /* 589 * This version avoids touching any other tasklets. Needed for kmemcheck 590 * in order not to take any page faults while enqueueing this tasklet; 591 * consider VERY carefully whether you really need this or 592 * tasklet_hi_schedule()... 593 */ 594 static inline void tasklet_hi_schedule_first(struct tasklet_struct *t) 595 { 596 if (!test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) 597 __tasklet_hi_schedule_first(t); 598 } 599 600 601 static inline void tasklet_disable_nosync(struct tasklet_struct *t) 602 { 603 atomic_inc(&t->count); 604 smp_mb__after_atomic(); 605 } 606 607 static inline void tasklet_disable(struct tasklet_struct *t) 608 { 609 tasklet_disable_nosync(t); 610 tasklet_unlock_wait(t); 611 smp_mb(); 612 } 613 614 static inline void tasklet_enable(struct tasklet_struct *t) 615 { 616 smp_mb__before_atomic(); 617 atomic_dec(&t->count); 618 } 619 620 extern void tasklet_kill(struct tasklet_struct *t); 621 extern void tasklet_kill_immediate(struct tasklet_struct *t, unsigned int cpu); 622 extern void tasklet_init(struct tasklet_struct *t, 623 void (*func)(unsigned long), unsigned long data); 624 625 struct tasklet_hrtimer { 626 struct hrtimer timer; 627 struct tasklet_struct tasklet; 628 enum hrtimer_restart (*function)(struct hrtimer *); 629 }; 630 631 extern void 632 tasklet_hrtimer_init(struct tasklet_hrtimer *ttimer, 633 enum hrtimer_restart (*function)(struct hrtimer *), 634 clockid_t which_clock, enum hrtimer_mode mode); 635 636 static inline 637 void tasklet_hrtimer_start(struct tasklet_hrtimer *ttimer, ktime_t time, 638 const enum hrtimer_mode mode) 639 { 640 hrtimer_start(&ttimer->timer, time, mode); 641 } 642 643 static inline 644 void tasklet_hrtimer_cancel(struct tasklet_hrtimer *ttimer) 645 { 646 hrtimer_cancel(&ttimer->timer); 647 tasklet_kill(&ttimer->tasklet); 648 } 649 650 /* 651 * Autoprobing for irqs: 652 * 653 * probe_irq_on() and probe_irq_off() provide robust primitives 654 * for accurate IRQ probing during kernel initialization. They are 655 * reasonably simple to use, are not "fooled" by spurious interrupts, 656 * and, unlike other attempts at IRQ probing, they do not get hung on 657 * stuck interrupts (such as unused PS2 mouse interfaces on ASUS boards). 658 * 659 * For reasonably foolproof probing, use them as follows: 660 * 661 * 1. clear and/or mask the device's internal interrupt. 662 * 2. sti(); 663 * 3. irqs = probe_irq_on(); // "take over" all unassigned idle IRQs 664 * 4. enable the device and cause it to trigger an interrupt. 665 * 5. wait for the device to interrupt, using non-intrusive polling or a delay. 666 * 6. irq = probe_irq_off(irqs); // get IRQ number, 0=none, negative=multiple 667 * 7. service the device to clear its pending interrupt. 668 * 8. loop again if paranoia is required. 669 * 670 * probe_irq_on() returns a mask of allocated irq's. 671 * 672 * probe_irq_off() takes the mask as a parameter, 673 * and returns the irq number which occurred, 674 * or zero if none occurred, or a negative irq number 675 * if more than one irq occurred. 676 */ 677 678 #if !defined(CONFIG_GENERIC_IRQ_PROBE) 679 static inline unsigned long probe_irq_on(void) 680 { 681 return 0; 682 } 683 static inline int probe_irq_off(unsigned long val) 684 { 685 return 0; 686 } 687 static inline unsigned int probe_irq_mask(unsigned long val) 688 { 689 return 0; 690 } 691 #else 692 extern unsigned long probe_irq_on(void); /* returns 0 on failure */ 693 extern int probe_irq_off(unsigned long); /* returns 0 or negative on failure */ 694 extern unsigned int probe_irq_mask(unsigned long); /* returns mask of ISA interrupts */ 695 #endif 696 697 #ifdef CONFIG_PROC_FS 698 /* Initialize /proc/irq/ */ 699 extern void init_irq_proc(void); 700 #else 701 static inline void init_irq_proc(void) 702 { 703 } 704 #endif 705 706 struct seq_file; 707 int show_interrupts(struct seq_file *p, void *v); 708 int arch_show_interrupts(struct seq_file *p, int prec); 709 710 extern int early_irq_init(void); 711 extern int arch_probe_nr_irqs(void); 712 extern int arch_early_irq_init(void); 713 714 #if defined(CONFIG_FUNCTION_GRAPH_TRACER) || defined(CONFIG_KASAN) 715 /* 716 * We want to know which function is an entrypoint of a hardirq or a softirq. 717 */ 718 #define __irq_entry __attribute__((__section__(".irqentry.text"))) 719 #define __softirq_entry \ 720 __attribute__((__section__(".softirqentry.text"))) 721 722 /* Limits of hardirq entrypoints */ 723 extern char __irqentry_text_start[]; 724 extern char __irqentry_text_end[]; 725 /* Limits of softirq entrypoints */ 726 extern char __softirqentry_text_start[]; 727 extern char __softirqentry_text_end[]; 728 729 #else 730 #define __irq_entry 731 #define __softirq_entry 732 #endif 733 734 #endif
1 #ifndef LINUX_KMEMCHECK_H 2 #define LINUX_KMEMCHECK_H 3 4 #include <linux/mm_types.h> 5 #include <linux/types.h> 6 7 #ifdef CONFIG_KMEMCHECK 8 extern int kmemcheck_enabled; 9 10 /* The slab-related functions. */ 11 void kmemcheck_alloc_shadow(struct page *page, int order, gfp_t flags, int node); 12 void kmemcheck_free_shadow(struct page *page, int order); 13 void kmemcheck_slab_alloc(struct kmem_cache *s, gfp_t gfpflags, void *object, 14 size_t size); 15 void kmemcheck_slab_free(struct kmem_cache *s, void *object, size_t size); 16 17 void kmemcheck_pagealloc_alloc(struct page *p, unsigned int order, 18 gfp_t gfpflags); 19 20 void kmemcheck_show_pages(struct page *p, unsigned int n); 21 void kmemcheck_hide_pages(struct page *p, unsigned int n); 22 23 bool kmemcheck_page_is_tracked(struct page *p); 24 25 void kmemcheck_mark_unallocated(void *address, unsigned int n); 26 void kmemcheck_mark_uninitialized(void *address, unsigned int n); 27 void kmemcheck_mark_initialized(void *address, unsigned int n); 28 void kmemcheck_mark_freed(void *address, unsigned int n); 29 30 void kmemcheck_mark_unallocated_pages(struct page *p, unsigned int n); 31 void kmemcheck_mark_uninitialized_pages(struct page *p, unsigned int n); 32 void kmemcheck_mark_initialized_pages(struct page *p, unsigned int n); 33 34 int kmemcheck_show_addr(unsigned long address); 35 int kmemcheck_hide_addr(unsigned long address); 36 37 bool kmemcheck_is_obj_initialized(unsigned long addr, size_t size); 38 39 /* 40 * Bitfield annotations 41 * 42 * How to use: If you have a struct using bitfields, for example 43 * 44 * struct a { 45 * int x:8, y:8; 46 * }; 47 * 48 * then this should be rewritten as 49 * 50 * struct a { 51 * kmemcheck_bitfield_begin(flags); 52 * int x:8, y:8; 53 * kmemcheck_bitfield_end(flags); 54 * }; 55 * 56 * Now the "flags_begin" and "flags_end" members may be used to refer to the 57 * beginning and end, respectively, of the bitfield (and things like 58 * &x.flags_begin is allowed). As soon as the struct is allocated, the bit- 59 * fields should be annotated: 60 * 61 * struct a *a = kmalloc(sizeof(struct a), GFP_KERNEL); 62 * kmemcheck_annotate_bitfield(a, flags); 63 */ 64 #define kmemcheck_bitfield_begin(name) \ 65 int name##_begin[0]; 66 67 #define kmemcheck_bitfield_end(name) \ 68 int name##_end[0]; 69 70 #define kmemcheck_annotate_bitfield(ptr, name) \ 71 do { \ 72 int _n; \ 73 \ 74 if (!ptr) \ 75 break; \ 76 \ 77 _n = (long) &((ptr)->name##_end) \ 78 - (long) &((ptr)->name##_begin); \ 79 BUILD_BUG_ON(_n < 0); \ 80 \ 81 kmemcheck_mark_initialized(&((ptr)->name##_begin), _n); \ 82 } while (0) 83 84 #define kmemcheck_annotate_variable(var) \ 85 do { \ 86 kmemcheck_mark_initialized(&(var), sizeof(var)); \ 87 } while (0) \ 88 89 #else 90 #define kmemcheck_enabled 0 91 92 static inline void 93 kmemcheck_alloc_shadow(struct page *page, int order, gfp_t flags, int node) 94 { 95 } 96 97 static inline void 98 kmemcheck_free_shadow(struct page *page, int order) 99 { 100 } 101 102 static inline void 103 kmemcheck_slab_alloc(struct kmem_cache *s, gfp_t gfpflags, void *object, 104 size_t size) 105 { 106 } 107 108 static inline void kmemcheck_slab_free(struct kmem_cache *s, void *object, 109 size_t size) 110 { 111 } 112 113 static inline void kmemcheck_pagealloc_alloc(struct page *p, 114 unsigned int order, gfp_t gfpflags) 115 { 116 } 117 118 static inline bool kmemcheck_page_is_tracked(struct page *p) 119 { 120 return false; 121 } 122 123 static inline void kmemcheck_mark_unallocated(void *address, unsigned int n) 124 { 125 } 126 127 static inline void kmemcheck_mark_uninitialized(void *address, unsigned int n) 128 { 129 } 130 131 static inline void kmemcheck_mark_initialized(void *address, unsigned int n) 132 { 133 } 134 135 static inline void kmemcheck_mark_freed(void *address, unsigned int n) 136 { 137 } 138 139 static inline void kmemcheck_mark_unallocated_pages(struct page *p, 140 unsigned int n) 141 { 142 } 143 144 static inline void kmemcheck_mark_uninitialized_pages(struct page *p, 145 unsigned int n) 146 { 147 } 148 149 static inline void kmemcheck_mark_initialized_pages(struct page *p, 150 unsigned int n) 151 { 152 } 153 154 static inline bool kmemcheck_is_obj_initialized(unsigned long addr, size_t size) 155 { 156 return true; 157 } 158 159 #define kmemcheck_bitfield_begin(name) 160 #define kmemcheck_bitfield_end(name) 161 #define kmemcheck_annotate_bitfield(ptr, name) \ 162 do { \ 163 } while (0) 164 165 #define kmemcheck_annotate_variable(var) \ 166 do { \ 167 } while (0) 168 169 #endif /* CONFIG_KMEMCHECK */ 170 171 #endif /* LINUX_KMEMCHECK_H */
1 /* 2 * INET An implementation of the TCP/IP protocol suite for the LINUX 3 * operating system. INET is implemented using the BSD Socket 4 * interface as the means of communication with the user level. 5 * 6 * Definitions for the Interfaces handler. 7 * 8 * Version: @(#)dev.h 1.0.10 08/12/93 9 * 10 * Authors: Ross Biro 11 * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> 12 * Corey Minyard <wf-rch!minyard@relay.EU.net> 13 * Donald J. Becker, <becker@cesdis.gsfc.nasa.gov> 14 * Alan Cox, <alan@lxorguk.ukuu.org.uk> 15 * Bjorn Ekwall. <bj0rn@blox.se> 16 * Pekka Riikonen <priikone@poseidon.pspt.fi> 17 * 18 * This program is free software; you can redistribute it and/or 19 * modify it under the terms of the GNU General Public License 20 * as published by the Free Software Foundation; either version 21 * 2 of the License, or (at your option) any later version. 22 * 23 * Moved to /usr/include/linux for NET3 24 */ 25 #ifndef _LINUX_NETDEVICE_H 26 #define _LINUX_NETDEVICE_H 27 28 #include <linux/timer.h> 29 #include <linux/bug.h> 30 #include <linux/delay.h> 31 #include <linux/atomic.h> 32 #include <linux/prefetch.h> 33 #include <asm/cache.h> 34 #include <asm/byteorder.h> 35 36 #include <linux/percpu.h> 37 #include <linux/rculist.h> 38 #include <linux/dmaengine.h> 39 #include <linux/workqueue.h> 40 #include <linux/dynamic_queue_limits.h> 41 42 #include <linux/ethtool.h> 43 #include <net/net_namespace.h> 44 #include <net/dsa.h> 45 #ifdef CONFIG_DCB 46 #include <net/dcbnl.h> 47 #endif 48 #include <net/netprio_cgroup.h> 49 50 #include <linux/netdev_features.h> 51 #include <linux/neighbour.h> 52 #include <uapi/linux/netdevice.h> 53 #include <uapi/linux/if_bonding.h> 54 #include <uapi/linux/pkt_cls.h> 55 #include <linux/hashtable.h> 56 57 struct netpoll_info; 58 struct device; 59 struct phy_device; 60 /* 802.11 specific */ 61 struct wireless_dev; 62 /* 802.15.4 specific */ 63 struct wpan_dev; 64 struct mpls_dev; 65 /* UDP Tunnel offloads */ 66 struct udp_tunnel_info; 67 struct bpf_prog; 68 69 void netdev_set_default_ethtool_ops(struct net_device *dev, 70 const struct ethtool_ops *ops); 71 72 /* Backlog congestion levels */ 73 #define NET_RX_SUCCESS 0 /* keep 'em coming, baby */ 74 #define NET_RX_DROP 1 /* packet dropped */ 75 76 /* 77 * Transmit return codes: transmit return codes originate from three different 78 * namespaces: 79 * 80 * - qdisc return codes 81 * - driver transmit return codes 82 * - errno values 83 * 84 * Drivers are allowed to return any one of those in their hard_start_xmit() 85 * function. Real network devices commonly used with qdiscs should only return 86 * the driver transmit return codes though - when qdiscs are used, the actual 87 * transmission happens asynchronously, so the value is not propagated to 88 * higher layers. Virtual network devices transmit synchronously; in this case 89 * the driver transmit return codes are consumed by dev_queue_xmit(), and all 90 * others are propagated to higher layers. 91 */ 92 93 /* qdisc ->enqueue() return codes. */ 94 #define NET_XMIT_SUCCESS 0x00 95 #define NET_XMIT_DROP 0x01 /* skb dropped */ 96 #define NET_XMIT_CN 0x02 /* congestion notification */ 97 #define NET_XMIT_MASK 0x0f /* qdisc flags in net/sch_generic.h */ 98 99 /* NET_XMIT_CN is special. It does not guarantee that this packet is lost. It 100 * indicates that the device will soon be dropping packets, or already drops 101 * some packets of the same priority; prompting us to send less aggressively. */ 102 #define net_xmit_eval(e) ((e) == NET_XMIT_CN ? 0 : (e)) 103 #define net_xmit_errno(e) ((e) != NET_XMIT_CN ? -ENOBUFS : 0) 104 105 /* Driver transmit return codes */ 106 #define NETDEV_TX_MASK 0xf0 107 108 enum netdev_tx { 109 __NETDEV_TX_MIN = INT_MIN, /* make sure enum is signed */ 110 NETDEV_TX_OK = 0x00, /* driver took care of packet */ 111 NETDEV_TX_BUSY = 0x10, /* driver tx path was busy*/ 112 }; 113 typedef enum netdev_tx netdev_tx_t; 114 115 /* 116 * Current order: NETDEV_TX_MASK > NET_XMIT_MASK >= 0 is significant; 117 * hard_start_xmit() return < NET_XMIT_MASK means skb was consumed. 118 */ 119 static inline bool dev_xmit_complete(int rc) 120 { 121 /* 122 * Positive cases with an skb consumed by a driver: 123 * - successful transmission (rc == NETDEV_TX_OK) 124 * - error while transmitting (rc < 0) 125 * - error while queueing to a different device (rc & NET_XMIT_MASK) 126 */ 127 if (likely(rc < NET_XMIT_MASK)) 128 return true; 129 130 return false; 131 } 132 133 /* 134 * Compute the worst-case header length according to the protocols 135 * used. 136 */ 137 138 #if defined(CONFIG_HYPERV_NET) 139 # define LL_MAX_HEADER 128 140 #elif defined(CONFIG_WLAN) || IS_ENABLED(CONFIG_AX25) 141 # if defined(CONFIG_MAC80211_MESH) 142 # define LL_MAX_HEADER 128 143 # else 144 # define LL_MAX_HEADER 96 145 # endif 146 #else 147 # define LL_MAX_HEADER 32 148 #endif 149 150 #if !IS_ENABLED(CONFIG_NET_IPIP) && !IS_ENABLED(CONFIG_NET_IPGRE) && \ 151 !IS_ENABLED(CONFIG_IPV6_SIT) && !IS_ENABLED(CONFIG_IPV6_TUNNEL) 152 #define MAX_HEADER LL_MAX_HEADER 153 #else 154 #define MAX_HEADER (LL_MAX_HEADER + 48) 155 #endif 156 157 /* 158 * Old network device statistics. Fields are native words 159 * (unsigned long) so they can be read and written atomically. 160 */ 161 162 struct net_device_stats { 163 unsigned long rx_packets; 164 unsigned long tx_packets; 165 unsigned long rx_bytes; 166 unsigned long tx_bytes; 167 unsigned long rx_errors; 168 unsigned long tx_errors; 169 unsigned long rx_dropped; 170 unsigned long tx_dropped; 171 unsigned long multicast; 172 unsigned long collisions; 173 unsigned long rx_length_errors; 174 unsigned long rx_over_errors; 175 unsigned long rx_crc_errors; 176 unsigned long rx_frame_errors; 177 unsigned long rx_fifo_errors; 178 unsigned long rx_missed_errors; 179 unsigned long tx_aborted_errors; 180 unsigned long tx_carrier_errors; 181 unsigned long tx_fifo_errors; 182 unsigned long tx_heartbeat_errors; 183 unsigned long tx_window_errors; 184 unsigned long rx_compressed; 185 unsigned long tx_compressed; 186 }; 187 188 189 #include <linux/cache.h> 190 #include <linux/skbuff.h> 191 192 #ifdef CONFIG_RPS 193 #include <linux/static_key.h> 194 extern struct static_key rps_needed; 195 extern struct static_key rfs_needed; 196 #endif 197 198 struct neighbour; 199 struct neigh_parms; 200 struct sk_buff; 201 202 struct netdev_hw_addr { 203 struct list_head list; 204 unsigned char addr[MAX_ADDR_LEN]; 205 unsigned char type; 206 #define NETDEV_HW_ADDR_T_LAN 1 207 #define NETDEV_HW_ADDR_T_SAN 2 208 #define NETDEV_HW_ADDR_T_SLAVE 3 209 #define NETDEV_HW_ADDR_T_UNICAST 4 210 #define NETDEV_HW_ADDR_T_MULTICAST 5 211 bool global_use; 212 int sync_cnt; 213 int refcount; 214 int synced; 215 struct rcu_head rcu_head; 216 }; 217 218 struct netdev_hw_addr_list { 219 struct list_head list; 220 int count; 221 }; 222 223 #define netdev_hw_addr_list_count(l) ((l)->count) 224 #define netdev_hw_addr_list_empty(l) (netdev_hw_addr_list_count(l) == 0) 225 #define netdev_hw_addr_list_for_each(ha, l) \ 226 list_for_each_entry(ha, &(l)->list, list) 227 228 #define netdev_uc_count(dev) netdev_hw_addr_list_count(&(dev)->uc) 229 #define netdev_uc_empty(dev) netdev_hw_addr_list_empty(&(dev)->uc) 230 #define netdev_for_each_uc_addr(ha, dev) \ 231 netdev_hw_addr_list_for_each(ha, &(dev)->uc) 232 233 #define netdev_mc_count(dev) netdev_hw_addr_list_count(&(dev)->mc) 234 #define netdev_mc_empty(dev) netdev_hw_addr_list_empty(&(dev)->mc) 235 #define netdev_for_each_mc_addr(ha, dev) \ 236 netdev_hw_addr_list_for_each(ha, &(dev)->mc) 237 238 struct hh_cache { 239 u16 hh_len; 240 u16 __pad; 241 seqlock_t hh_lock; 242 243 /* cached hardware header; allow for machine alignment needs. */ 244 #define HH_DATA_MOD 16 245 #define HH_DATA_OFF(__len) \ 246 (HH_DATA_MOD - (((__len - 1) & (HH_DATA_MOD - 1)) + 1)) 247 #define HH_DATA_ALIGN(__len) \ 248 (((__len)+(HH_DATA_MOD-1))&~(HH_DATA_MOD - 1)) 249 unsigned long hh_data[HH_DATA_ALIGN(LL_MAX_HEADER) / sizeof(long)]; 250 }; 251 252 /* Reserve HH_DATA_MOD byte-aligned hard_header_len, but at least that much. 253 * Alternative is: 254 * dev->hard_header_len ? (dev->hard_header_len + 255 * (HH_DATA_MOD - 1)) & ~(HH_DATA_MOD - 1) : 0 256 * 257 * We could use other alignment values, but we must maintain the 258 * relationship HH alignment <= LL alignment. 259 */ 260 #define LL_RESERVED_SPACE(dev) \ 261 ((((dev)->hard_header_len+(dev)->needed_headroom)&~(HH_DATA_MOD - 1)) + HH_DATA_MOD) 262 #define LL_RESERVED_SPACE_EXTRA(dev,extra) \ 263 ((((dev)->hard_header_len+(dev)->needed_headroom+(extra))&~(HH_DATA_MOD - 1)) + HH_DATA_MOD) 264 265 struct header_ops { 266 int (*create) (struct sk_buff *skb, struct net_device *dev, 267 unsigned short type, const void *daddr, 268 const void *saddr, unsigned int len); 269 int (*parse)(const struct sk_buff *skb, unsigned char *haddr); 270 int (*cache)(const struct neighbour *neigh, struct hh_cache *hh, __be16 type); 271 void (*cache_update)(struct hh_cache *hh, 272 const struct net_device *dev, 273 const unsigned char *haddr); 274 bool (*validate)(const char *ll_header, unsigned int len); 275 }; 276 277 /* These flag bits are private to the generic network queueing 278 * layer; they may not be explicitly referenced by any other 279 * code. 280 */ 281 282 enum netdev_state_t { 283 __LINK_STATE_START, 284 __LINK_STATE_PRESENT, 285 __LINK_STATE_NOCARRIER, 286 __LINK_STATE_LINKWATCH_PENDING, 287 __LINK_STATE_DORMANT, 288 }; 289 290 291 /* 292 * This structure holds boot-time configured netdevice settings. They 293 * are then used in the device probing. 294 */ 295 struct netdev_boot_setup { 296 char name[IFNAMSIZ]; 297 struct ifmap map; 298 }; 299 #define NETDEV_BOOT_SETUP_MAX 8 300 301 int __init netdev_boot_setup(char *str); 302 303 /* 304 * Structure for NAPI scheduling similar to tasklet but with weighting 305 */ 306 struct napi_struct { 307 /* The poll_list must only be managed by the entity which 308 * changes the state of the NAPI_STATE_SCHED bit. This means 309 * whoever atomically sets that bit can add this napi_struct 310 * to the per-CPU poll_list, and whoever clears that bit 311 * can remove from the list right before clearing the bit. 312 */ 313 struct list_head poll_list; 314 315 unsigned long state; 316 int weight; 317 unsigned int gro_count; 318 int (*poll)(struct napi_struct *, int); 319 #ifdef CONFIG_NETPOLL 320 int poll_owner; 321 #endif 322 struct net_device *dev; 323 struct sk_buff *gro_list; 324 struct sk_buff *skb; 325 struct hrtimer timer; 326 struct list_head dev_list; 327 struct hlist_node napi_hash_node; 328 unsigned int napi_id; 329 }; 330 331 enum { 332 NAPI_STATE_SCHED, /* Poll is scheduled */ 333 NAPI_STATE_DISABLE, /* Disable pending */ 334 NAPI_STATE_NPSVC, /* Netpoll - don't dequeue from poll_list */ 335 NAPI_STATE_HASHED, /* In NAPI hash (busy polling possible) */ 336 NAPI_STATE_NO_BUSY_POLL,/* Do not add in napi_hash, no busy polling */ 337 NAPI_STATE_IN_BUSY_POLL,/* sk_busy_loop() owns this NAPI */ 338 }; 339 340 enum { 341 NAPIF_STATE_SCHED = (1UL << NAPI_STATE_SCHED), 342 NAPIF_STATE_DISABLE = (1UL << NAPI_STATE_DISABLE), 343 NAPIF_STATE_NPSVC = (1UL << NAPI_STATE_NPSVC), 344 NAPIF_STATE_HASHED = (1UL << NAPI_STATE_HASHED), 345 NAPIF_STATE_NO_BUSY_POLL = (1UL << NAPI_STATE_NO_BUSY_POLL), 346 NAPIF_STATE_IN_BUSY_POLL = (1UL << NAPI_STATE_IN_BUSY_POLL), 347 }; 348 349 enum gro_result { 350 GRO_MERGED, 351 GRO_MERGED_FREE, 352 GRO_HELD, 353 GRO_NORMAL, 354 GRO_DROP, 355 }; 356 typedef enum gro_result gro_result_t; 357 358 /* 359 * enum rx_handler_result - Possible return values for rx_handlers. 360 * @RX_HANDLER_CONSUMED: skb was consumed by rx_handler, do not process it 361 * further. 362 * @RX_HANDLER_ANOTHER: Do another round in receive path. This is indicated in 363 * case skb->dev was changed by rx_handler. 364 * @RX_HANDLER_EXACT: Force exact delivery, no wildcard. 365 * @RX_HANDLER_PASS: Do nothing, pass the skb as if no rx_handler was called. 366 * 367 * rx_handlers are functions called from inside __netif_receive_skb(), to do 368 * special processing of the skb, prior to delivery to protocol handlers. 369 * 370 * Currently, a net_device can only have a single rx_handler registered. Trying 371 * to register a second rx_handler will return -EBUSY. 372 * 373 * To register a rx_handler on a net_device, use netdev_rx_handler_register(). 374 * To unregister a rx_handler on a net_device, use 375 * netdev_rx_handler_unregister(). 376 * 377 * Upon return, rx_handler is expected to tell __netif_receive_skb() what to 378 * do with the skb. 379 * 380 * If the rx_handler consumed the skb in some way, it should return 381 * RX_HANDLER_CONSUMED. This is appropriate when the rx_handler arranged for 382 * the skb to be delivered in some other way. 383 * 384 * If the rx_handler changed skb->dev, to divert the skb to another 385 * net_device, it should return RX_HANDLER_ANOTHER. The rx_handler for the 386 * new device will be called if it exists. 387 * 388 * If the rx_handler decides the skb should be ignored, it should return 389 * RX_HANDLER_EXACT. The skb will only be delivered to protocol handlers that 390 * are registered on exact device (ptype->dev == skb->dev). 391 * 392 * If the rx_handler didn't change skb->dev, but wants the skb to be normally 393 * delivered, it should return RX_HANDLER_PASS. 394 * 395 * A device without a registered rx_handler will behave as if rx_handler 396 * returned RX_HANDLER_PASS. 397 */ 398 399 enum rx_handler_result { 400 RX_HANDLER_CONSUMED, 401 RX_HANDLER_ANOTHER, 402 RX_HANDLER_EXACT, 403 RX_HANDLER_PASS, 404 }; 405 typedef enum rx_handler_result rx_handler_result_t; 406 typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **pskb); 407 408 void __napi_schedule(struct napi_struct *n); 409 void __napi_schedule_irqoff(struct napi_struct *n); 410 411 static inline bool napi_disable_pending(struct napi_struct *n) 412 { 413 return test_bit(NAPI_STATE_DISABLE, &n->state); 414 } 415 416 /** 417 * napi_schedule_prep - check if NAPI can be scheduled 418 * @n: NAPI context 419 * 420 * Test if NAPI routine is already running, and if not mark 421 * it as running. This is used as a condition variable to 422 * insure only one NAPI poll instance runs. We also make 423 * sure there is no pending NAPI disable. 424 */ 425 static inline bool napi_schedule_prep(struct napi_struct *n) 426 { 427 return !napi_disable_pending(n) && 428 !test_and_set_bit(NAPI_STATE_SCHED, &n->state); 429 } 430 431 /** 432 * napi_schedule - schedule NAPI poll 433 * @n: NAPI context 434 * 435 * Schedule NAPI poll routine to be called if it is not already 436 * running. 437 */ 438 static inline void napi_schedule(struct napi_struct *n) 439 { 440 if (napi_schedule_prep(n)) 441 __napi_schedule(n); 442 } 443 444 /** 445 * napi_schedule_irqoff - schedule NAPI poll 446 * @n: NAPI context 447 * 448 * Variant of napi_schedule(), assuming hard irqs are masked. 449 */ 450 static inline void napi_schedule_irqoff(struct napi_struct *n) 451 { 452 if (napi_schedule_prep(n)) 453 __napi_schedule_irqoff(n); 454 } 455 456 /* Try to reschedule poll. Called by dev->poll() after napi_complete(). */ 457 static inline bool napi_reschedule(struct napi_struct *napi) 458 { 459 if (napi_schedule_prep(napi)) { 460 __napi_schedule(napi); 461 return true; 462 } 463 return false; 464 } 465 466 bool __napi_complete(struct napi_struct *n); 467 bool napi_complete_done(struct napi_struct *n, int work_done); 468 /** 469 * napi_complete - NAPI processing complete 470 * @n: NAPI context 471 * 472 * Mark NAPI processing as complete. 473 * Consider using napi_complete_done() instead. 474 * Return false if device should avoid rearming interrupts. 475 */ 476 static inline bool napi_complete(struct napi_struct *n) 477 { 478 return napi_complete_done(n, 0); 479 } 480 481 /** 482 * napi_hash_del - remove a NAPI from global table 483 * @napi: NAPI context 484 * 485 * Warning: caller must observe RCU grace period 486 * before freeing memory containing @napi, if 487 * this function returns true. 488 * Note: core networking stack automatically calls it 489 * from netif_napi_del(). 490 * Drivers might want to call this helper to combine all 491 * the needed RCU grace periods into a single one. 492 */ 493 bool napi_hash_del(struct napi_struct *napi); 494 495 /** 496 * napi_disable - prevent NAPI from scheduling 497 * @n: NAPI context 498 * 499 * Stop NAPI from being scheduled on this context. 500 * Waits till any outstanding processing completes. 501 */ 502 void napi_disable(struct napi_struct *n); 503 504 /** 505 * napi_enable - enable NAPI scheduling 506 * @n: NAPI context 507 * 508 * Resume NAPI from being scheduled on this context. 509 * Must be paired with napi_disable. 510 */ 511 static inline void napi_enable(struct napi_struct *n) 512 { 513 BUG_ON(!test_bit(NAPI_STATE_SCHED, &n->state)); 514 smp_mb__before_atomic(); 515 clear_bit(NAPI_STATE_SCHED, &n->state); 516 clear_bit(NAPI_STATE_NPSVC, &n->state); 517 } 518 519 /** 520 * napi_synchronize - wait until NAPI is not running 521 * @n: NAPI context 522 * 523 * Wait until NAPI is done being scheduled on this context. 524 * Waits till any outstanding processing completes but 525 * does not disable future activations. 526 */ 527 static inline void napi_synchronize(const struct napi_struct *n) 528 { 529 if (IS_ENABLED(CONFIG_SMP)) 530 while (test_bit(NAPI_STATE_SCHED, &n->state)) 531 msleep(1); 532 else 533 barrier(); 534 } 535 536 enum netdev_queue_state_t { 537 __QUEUE_STATE_DRV_XOFF, 538 __QUEUE_STATE_STACK_XOFF, 539 __QUEUE_STATE_FROZEN, 540 }; 541 542 #define QUEUE_STATE_DRV_XOFF (1 << __QUEUE_STATE_DRV_XOFF) 543 #define QUEUE_STATE_STACK_XOFF (1 << __QUEUE_STATE_STACK_XOFF) 544 #define QUEUE_STATE_FROZEN (1 << __QUEUE_STATE_FROZEN) 545 546 #define QUEUE_STATE_ANY_XOFF (QUEUE_STATE_DRV_XOFF | QUEUE_STATE_STACK_XOFF) 547 #define QUEUE_STATE_ANY_XOFF_OR_FROZEN (QUEUE_STATE_ANY_XOFF | \ 548 QUEUE_STATE_FROZEN) 549 #define QUEUE_STATE_DRV_XOFF_OR_FROZEN (QUEUE_STATE_DRV_XOFF | \ 550 QUEUE_STATE_FROZEN) 551 552 /* 553 * __QUEUE_STATE_DRV_XOFF is used by drivers to stop the transmit queue. The 554 * netif_tx_* functions below are used to manipulate this flag. The 555 * __QUEUE_STATE_STACK_XOFF flag is used by the stack to stop the transmit 556 * queue independently. The netif_xmit_*stopped functions below are called 557 * to check if the queue has been stopped by the driver or stack (either 558 * of the XOFF bits are set in the state). Drivers should not need to call 559 * netif_xmit*stopped functions, they should only be using netif_tx_*. 560 */ 561 562 struct netdev_queue { 563 /* 564 * read-mostly part 565 */ 566 struct net_device *dev; 567 struct Qdisc __rcu *qdisc; 568 struct Qdisc *qdisc_sleeping; 569 #ifdef CONFIG_SYSFS 570 struct kobject kobj; 571 #endif 572 #if defined(CONFIG_XPS) && defined(CONFIG_NUMA) 573 int numa_node; 574 #endif 575 unsigned long tx_maxrate; 576 /* 577 * Number of TX timeouts for this queue 578 * (/sys/class/net/DEV/Q/trans_timeout) 579 */ 580 unsigned long trans_timeout; 581 /* 582 * write-mostly part 583 */ 584 spinlock_t _xmit_lock ____cacheline_aligned_in_smp; 585 int xmit_lock_owner; 586 /* 587 * Time (in jiffies) of last Tx 588 */ 589 unsigned long trans_start; 590 591 unsigned long state; 592 593 #ifdef CONFIG_BQL 594 struct dql dql; 595 #endif 596 } ____cacheline_aligned_in_smp; 597 598 static inline int netdev_queue_numa_node_read(const struct netdev_queue *q) 599 { 600 #if defined(CONFIG_XPS) && defined(CONFIG_NUMA) 601 return q->numa_node; 602 #else 603 return NUMA_NO_NODE; 604 #endif 605 } 606 607 static inline void netdev_queue_numa_node_write(struct netdev_queue *q, int node) 608 { 609 #if defined(CONFIG_XPS) && defined(CONFIG_NUMA) 610 q->numa_node = node; 611 #endif 612 } 613 614 #ifdef CONFIG_RPS 615 /* 616 * This structure holds an RPS map which can be of variable length. The 617 * map is an array of CPUs. 618 */ 619 struct rps_map { 620 unsigned int len; 621 struct rcu_head rcu; 622 u16 cpus[0]; 623 }; 624 #define RPS_MAP_SIZE(_num) (sizeof(struct rps_map) + ((_num) * sizeof(u16))) 625 626 /* 627 * The rps_dev_flow structure contains the mapping of a flow to a CPU, the 628 * tail pointer for that CPU's input queue at the time of last enqueue, and 629 * a hardware filter index. 630 */ 631 struct rps_dev_flow { 632 u16 cpu; 633 u16 filter; 634 unsigned int last_qtail; 635 }; 636 #define RPS_NO_FILTER 0xffff 637 638 /* 639 * The rps_dev_flow_table structure contains a table of flow mappings. 640 */ 641 struct rps_dev_flow_table { 642 unsigned int mask; 643 struct rcu_head rcu; 644 struct rps_dev_flow flows[0]; 645 }; 646 #define RPS_DEV_FLOW_TABLE_SIZE(_num) (sizeof(struct rps_dev_flow_table) + \ 647 ((_num) * sizeof(struct rps_dev_flow))) 648 649 /* 650 * The rps_sock_flow_table contains mappings of flows to the last CPU 651 * on which they were processed by the application (set in recvmsg). 652 * Each entry is a 32bit value. Upper part is the high-order bits 653 * of flow hash, lower part is CPU number. 654 * rps_cpu_mask is used to partition the space, depending on number of 655 * possible CPUs : rps_cpu_mask = roundup_pow_of_two(nr_cpu_ids) - 1 656 * For example, if 64 CPUs are possible, rps_cpu_mask = 0x3f, 657 * meaning we use 32-6=26 bits for the hash. 658 */ 659 struct rps_sock_flow_table { 660 u32 mask; 661 662 u32 ents[0] ____cacheline_aligned_in_smp; 663 }; 664 #define RPS_SOCK_FLOW_TABLE_SIZE(_num) (offsetof(struct rps_sock_flow_table, ents[_num])) 665 666 #define RPS_NO_CPU 0xffff 667 668 extern u32 rps_cpu_mask; 669 extern struct rps_sock_flow_table __rcu *rps_sock_flow_table; 670 671 static inline void rps_record_sock_flow(struct rps_sock_flow_table *table, 672 u32 hash) 673 { 674 if (table && hash) { 675 unsigned int index = hash & table->mask; 676 u32 val = hash & ~rps_cpu_mask; 677 678 /* We only give a hint, preemption can change CPU under us */ 679 val |= raw_smp_processor_id(); 680 681 if (table->ents[index] != val) 682 table->ents[index] = val; 683 } 684 } 685 686 #ifdef CONFIG_RFS_ACCEL 687 bool rps_may_expire_flow(struct net_device *dev, u16 rxq_index, u32 flow_id, 688 u16 filter_id); 689 #endif 690 #endif /* CONFIG_RPS */ 691 692 /* This structure contains an instance of an RX queue. */ 693 struct netdev_rx_queue { 694 #ifdef CONFIG_RPS 695 struct rps_map __rcu *rps_map; 696 struct rps_dev_flow_table __rcu *rps_flow_table; 697 #endif 698 struct kobject kobj; 699 struct net_device *dev; 700 } ____cacheline_aligned_in_smp; 701 702 /* 703 * RX queue sysfs structures and functions. 704 */ 705 struct rx_queue_attribute { 706 struct attribute attr; 707 ssize_t (*show)(struct netdev_rx_queue *queue, 708 struct rx_queue_attribute *attr, char *buf); 709 ssize_t (*store)(struct netdev_rx_queue *queue, 710 struct rx_queue_attribute *attr, const char *buf, size_t len); 711 }; 712 713 #ifdef CONFIG_XPS 714 /* 715 * This structure holds an XPS map which can be of variable length. The 716 * map is an array of queues. 717 */ 718 struct xps_map { 719 unsigned int len; 720 unsigned int alloc_len; 721 struct rcu_head rcu; 722 u16 queues[0]; 723 }; 724 #define XPS_MAP_SIZE(_num) (sizeof(struct xps_map) + ((_num) * sizeof(u16))) 725 #define XPS_MIN_MAP_ALLOC ((L1_CACHE_ALIGN(offsetof(struct xps_map, queues[1])) \ 726 - sizeof(struct xps_map)) / sizeof(u16)) 727 728 /* 729 * This structure holds all XPS maps for device. Maps are indexed by CPU. 730 */ 731 struct xps_dev_maps { 732 struct rcu_head rcu; 733 struct xps_map __rcu *cpu_map[0]; 734 }; 735 #define XPS_DEV_MAPS_SIZE(_tcs) (sizeof(struct xps_dev_maps) + \ 736 (nr_cpu_ids * (_tcs) * sizeof(struct xps_map *))) 737 #endif /* CONFIG_XPS */ 738 739 #define TC_MAX_QUEUE 16 740 #define TC_BITMASK 15 741 /* HW offloaded queuing disciplines txq count and offset maps */ 742 struct netdev_tc_txq { 743 u16 count; 744 u16 offset; 745 }; 746 747 #if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) 748 /* 749 * This structure is to hold information about the device 750 * configured to run FCoE protocol stack. 751 */ 752 struct netdev_fcoe_hbainfo { 753 char manufacturer[64]; 754 char serial_number[64]; 755 char hardware_version[64]; 756 char driver_version[64]; 757 char optionrom_version[64]; 758 char firmware_version[64]; 759 char model[256]; 760 char model_description[256]; 761 }; 762 #endif 763 764 #define MAX_PHYS_ITEM_ID_LEN 32 765 766 /* This structure holds a unique identifier to identify some 767 * physical item (port for example) used by a netdevice. 768 */ 769 struct netdev_phys_item_id { 770 unsigned char id[MAX_PHYS_ITEM_ID_LEN]; 771 unsigned char id_len; 772 }; 773 774 static inline bool netdev_phys_item_id_same(struct netdev_phys_item_id *a, 775 struct netdev_phys_item_id *b) 776 { 777 return a->id_len == b->id_len && 778 memcmp(a->id, b->id, a->id_len) == 0; 779 } 780 781 typedef u16 (*select_queue_fallback_t)(struct net_device *dev, 782 struct sk_buff *skb); 783 784 /* These structures hold the attributes of qdisc and classifiers 785 * that are being passed to the netdevice through the setup_tc op. 786 */ 787 enum { 788 TC_SETUP_MQPRIO, 789 TC_SETUP_CLSU32, 790 TC_SETUP_CLSFLOWER, 791 TC_SETUP_MATCHALL, 792 TC_SETUP_CLSBPF, 793 }; 794 795 struct tc_cls_u32_offload; 796 797 struct tc_to_netdev { 798 unsigned int type; 799 union { 800 u8 tc; 801 struct tc_cls_u32_offload *cls_u32; 802 struct tc_cls_flower_offload *cls_flower; 803 struct tc_cls_matchall_offload *cls_mall; 804 struct tc_cls_bpf_offload *cls_bpf; 805 }; 806 bool egress_dev; 807 }; 808 809 /* These structures hold the attributes of xdp state that are being passed 810 * to the netdevice through the xdp op. 811 */ 812 enum xdp_netdev_command { 813 /* Set or clear a bpf program used in the earliest stages of packet 814 * rx. The prog will have been loaded as BPF_PROG_TYPE_XDP. The callee 815 * is responsible for calling bpf_prog_put on any old progs that are 816 * stored. In case of error, the callee need not release the new prog 817 * reference, but on success it takes ownership and must bpf_prog_put 818 * when it is no longer used. 819 */ 820 XDP_SETUP_PROG, 821 /* Check if a bpf program is set on the device. The callee should 822 * return true if a program is currently attached and running. 823 */ 824 XDP_QUERY_PROG, 825 }; 826 827 struct netdev_xdp { 828 enum xdp_netdev_command command; 829 union { 830 /* XDP_SETUP_PROG */ 831 struct bpf_prog *prog; 832 /* XDP_QUERY_PROG */ 833 bool prog_attached; 834 }; 835 }; 836 837 /* 838 * This structure defines the management hooks for network devices. 839 * The following hooks can be defined; unless noted otherwise, they are 840 * optional and can be filled with a null pointer. 841 * 842 * int (*ndo_init)(struct net_device *dev); 843 * This function is called once when a network device is registered. 844 * The network device can use this for any late stage initialization 845 * or semantic validation. It can fail with an error code which will 846 * be propagated back to register_netdev. 847 * 848 * void (*ndo_uninit)(struct net_device *dev); 849 * This function is called when device is unregistered or when registration 850 * fails. It is not called if init fails. 851 * 852 * int (*ndo_open)(struct net_device *dev); 853 * This function is called when a network device transitions to the up 854 * state. 855 * 856 * int (*ndo_stop)(struct net_device *dev); 857 * This function is called when a network device transitions to the down 858 * state. 859 * 860 * netdev_tx_t (*ndo_start_xmit)(struct sk_buff *skb, 861 * struct net_device *dev); 862 * Called when a packet needs to be transmitted. 863 * Returns NETDEV_TX_OK. Can return NETDEV_TX_BUSY, but you should stop 864 * the queue before that can happen; it's for obsolete devices and weird 865 * corner cases, but the stack really does a non-trivial amount 866 * of useless work if you return NETDEV_TX_BUSY. 867 * Required; cannot be NULL. 868 * 869 * netdev_features_t (*ndo_fix_features)(struct net_device *dev, 870 * netdev_features_t features); 871 * Adjusts the requested feature flags according to device-specific 872 * constraints, and returns the resulting flags. Must not modify 873 * the device state. 874 * 875 * u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb, 876 * void *accel_priv, select_queue_fallback_t fallback); 877 * Called to decide which queue to use when device supports multiple 878 * transmit queues. 879 * 880 * void (*ndo_change_rx_flags)(struct net_device *dev, int flags); 881 * This function is called to allow device receiver to make 882 * changes to configuration when multicast or promiscuous is enabled. 883 * 884 * void (*ndo_set_rx_mode)(struct net_device *dev); 885 * This function is called device changes address list filtering. 886 * If driver handles unicast address filtering, it should set 887 * IFF_UNICAST_FLT in its priv_flags. 888 * 889 * int (*ndo_set_mac_address)(struct net_device *dev, void *addr); 890 * This function is called when the Media Access Control address 891 * needs to be changed. If this interface is not defined, the 892 * MAC address can not be changed. 893 * 894 * int (*ndo_validate_addr)(struct net_device *dev); 895 * Test if Media Access Control address is valid for the device. 896 * 897 * int (*ndo_do_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd); 898 * Called when a user requests an ioctl which can't be handled by 899 * the generic interface code. If not defined ioctls return 900 * not supported error code. 901 * 902 * int (*ndo_set_config)(struct net_device *dev, struct ifmap *map); 903 * Used to set network devices bus interface parameters. This interface 904 * is retained for legacy reasons; new devices should use the bus 905 * interface (PCI) for low level management. 906 * 907 * int (*ndo_change_mtu)(struct net_device *dev, int new_mtu); 908 * Called when a user wants to change the Maximum Transfer Unit 909 * of a device. If not defined, any request to change MTU will 910 * will return an error. 911 * 912 * void (*ndo_tx_timeout)(struct net_device *dev); 913 * Callback used when the transmitter has not made any progress 914 * for dev->watchdog ticks. 915 * 916 * struct rtnl_link_stats64* (*ndo_get_stats64)(struct net_device *dev, 917 * struct rtnl_link_stats64 *storage); 918 * struct net_device_stats* (*ndo_get_stats)(struct net_device *dev); 919 * Called when a user wants to get the network device usage 920 * statistics. Drivers must do one of the following: 921 * 1. Define @ndo_get_stats64 to fill in a zero-initialised 922 * rtnl_link_stats64 structure passed by the caller. 923 * 2. Define @ndo_get_stats to update a net_device_stats structure 924 * (which should normally be dev->stats) and return a pointer to 925 * it. The structure may be changed asynchronously only if each 926 * field is written atomically. 927 * 3. Update dev->stats asynchronously and atomically, and define 928 * neither operation. 929 * 930 * bool (*ndo_has_offload_stats)(const struct net_device *dev, int attr_id) 931 * Return true if this device supports offload stats of this attr_id. 932 * 933 * int (*ndo_get_offload_stats)(int attr_id, const struct net_device *dev, 934 * void *attr_data) 935 * Get statistics for offload operations by attr_id. Write it into the 936 * attr_data pointer. 937 * 938 * int (*ndo_vlan_rx_add_vid)(struct net_device *dev, __be16 proto, u16 vid); 939 * If device supports VLAN filtering this function is called when a 940 * VLAN id is registered. 941 * 942 * int (*ndo_vlan_rx_kill_vid)(struct net_device *dev, __be16 proto, u16 vid); 943 * If device supports VLAN filtering this function is called when a 944 * VLAN id is unregistered. 945 * 946 * void (*ndo_poll_controller)(struct net_device *dev); 947 * 948 * SR-IOV management functions. 949 * int (*ndo_set_vf_mac)(struct net_device *dev, int vf, u8* mac); 950 * int (*ndo_set_vf_vlan)(struct net_device *dev, int vf, u16 vlan, 951 * u8 qos, __be16 proto); 952 * int (*ndo_set_vf_rate)(struct net_device *dev, int vf, int min_tx_rate, 953 * int max_tx_rate); 954 * int (*ndo_set_vf_spoofchk)(struct net_device *dev, int vf, bool setting); 955 * int (*ndo_set_vf_trust)(struct net_device *dev, int vf, bool setting); 956 * int (*ndo_get_vf_config)(struct net_device *dev, 957 * int vf, struct ifla_vf_info *ivf); 958 * int (*ndo_set_vf_link_state)(struct net_device *dev, int vf, int link_state); 959 * int (*ndo_set_vf_port)(struct net_device *dev, int vf, 960 * struct nlattr *port[]); 961 * 962 * Enable or disable the VF ability to query its RSS Redirection Table and 963 * Hash Key. This is needed since on some devices VF share this information 964 * with PF and querying it may introduce a theoretical security risk. 965 * int (*ndo_set_vf_rss_query_en)(struct net_device *dev, int vf, bool setting); 966 * int (*ndo_get_vf_port)(struct net_device *dev, int vf, struct sk_buff *skb); 967 * int (*ndo_setup_tc)(struct net_device *dev, u8 tc) 968 * Called to setup 'tc' number of traffic classes in the net device. This 969 * is always called from the stack with the rtnl lock held and netif tx 970 * queues stopped. This allows the netdevice to perform queue management 971 * safely. 972 * 973 * Fiber Channel over Ethernet (FCoE) offload functions. 974 * int (*ndo_fcoe_enable)(struct net_device *dev); 975 * Called when the FCoE protocol stack wants to start using LLD for FCoE 976 * so the underlying device can perform whatever needed configuration or 977 * initialization to support acceleration of FCoE traffic. 978 * 979 * int (*ndo_fcoe_disable)(struct net_device *dev); 980 * Called when the FCoE protocol stack wants to stop using LLD for FCoE 981 * so the underlying device can perform whatever needed clean-ups to 982 * stop supporting acceleration of FCoE traffic. 983 * 984 * int (*ndo_fcoe_ddp_setup)(struct net_device *dev, u16 xid, 985 * struct scatterlist *sgl, unsigned int sgc); 986 * Called when the FCoE Initiator wants to initialize an I/O that 987 * is a possible candidate for Direct Data Placement (DDP). The LLD can 988 * perform necessary setup and returns 1 to indicate the device is set up 989 * successfully to perform DDP on this I/O, otherwise this returns 0. 990 * 991 * int (*ndo_fcoe_ddp_done)(struct net_device *dev, u16 xid); 992 * Called when the FCoE Initiator/Target is done with the DDPed I/O as 993 * indicated by the FC exchange id 'xid', so the underlying device can 994 * clean up and reuse resources for later DDP requests. 995 * 996 * int (*ndo_fcoe_ddp_target)(struct net_device *dev, u16 xid, 997 * struct scatterlist *sgl, unsigned int sgc); 998 * Called when the FCoE Target wants to initialize an I/O that 999 * is a possible candidate for Direct Data Placement (DDP). The LLD can 1000 * perform necessary setup and returns 1 to indicate the device is set up 1001 * successfully to perform DDP on this I/O, otherwise this returns 0. 1002 * 1003 * int (*ndo_fcoe_get_hbainfo)(struct net_device *dev, 1004 * struct netdev_fcoe_hbainfo *hbainfo); 1005 * Called when the FCoE Protocol stack wants information on the underlying 1006 * device. This information is utilized by the FCoE protocol stack to 1007 * register attributes with Fiber Channel management service as per the 1008 * FC-GS Fabric Device Management Information(FDMI) specification. 1009 * 1010 * int (*ndo_fcoe_get_wwn)(struct net_device *dev, u64 *wwn, int type); 1011 * Called when the underlying device wants to override default World Wide 1012 * Name (WWN) generation mechanism in FCoE protocol stack to pass its own 1013 * World Wide Port Name (WWPN) or World Wide Node Name (WWNN) to the FCoE 1014 * protocol stack to use. 1015 * 1016 * RFS acceleration. 1017 * int (*ndo_rx_flow_steer)(struct net_device *dev, const struct sk_buff *skb, 1018 * u16 rxq_index, u32 flow_id); 1019 * Set hardware filter for RFS. rxq_index is the target queue index; 1020 * flow_id is a flow ID to be passed to rps_may_expire_flow() later. 1021 * Return the filter ID on success, or a negative error code. 1022 * 1023 * Slave management functions (for bridge, bonding, etc). 1024 * int (*ndo_add_slave)(struct net_device *dev, struct net_device *slave_dev); 1025 * Called to make another netdev an underling. 1026 * 1027 * int (*ndo_del_slave)(struct net_device *dev, struct net_device *slave_dev); 1028 * Called to release previously enslaved netdev. 1029 * 1030 * Feature/offload setting functions. 1031 * int (*ndo_set_features)(struct net_device *dev, netdev_features_t features); 1032 * Called to update device configuration to new features. Passed 1033 * feature set might be less than what was returned by ndo_fix_features()). 1034 * Must return >0 or -errno if it changed dev->features itself. 1035 * 1036 * int (*ndo_fdb_add)(struct ndmsg *ndm, struct nlattr *tb[], 1037 * struct net_device *dev, 1038 * const unsigned char *addr, u16 vid, u16 flags) 1039 * Adds an FDB entry to dev for addr. 1040 * int (*ndo_fdb_del)(struct ndmsg *ndm, struct nlattr *tb[], 1041 * struct net_device *dev, 1042 * const unsigned char *addr, u16 vid) 1043 * Deletes the FDB entry from dev coresponding to addr. 1044 * int (*ndo_fdb_dump)(struct sk_buff *skb, struct netlink_callback *cb, 1045 * struct net_device *dev, struct net_device *filter_dev, 1046 * int *idx) 1047 * Used to add FDB entries to dump requests. Implementers should add 1048 * entries to skb and update idx with the number of entries. 1049 * 1050 * int (*ndo_bridge_setlink)(struct net_device *dev, struct nlmsghdr *nlh, 1051 * u16 flags) 1052 * int (*ndo_bridge_getlink)(struct sk_buff *skb, u32 pid, u32 seq, 1053 * struct net_device *dev, u32 filter_mask, 1054 * int nlflags) 1055 * int (*ndo_bridge_dellink)(struct net_device *dev, struct nlmsghdr *nlh, 1056 * u16 flags); 1057 * 1058 * int (*ndo_change_carrier)(struct net_device *dev, bool new_carrier); 1059 * Called to change device carrier. Soft-devices (like dummy, team, etc) 1060 * which do not represent real hardware may define this to allow their 1061 * userspace components to manage their virtual carrier state. Devices 1062 * that determine carrier state from physical hardware properties (eg 1063 * network cables) or protocol-dependent mechanisms (eg 1064 * USB_CDC_NOTIFY_NETWORK_CONNECTION) should NOT implement this function. 1065 * 1066 * int (*ndo_get_phys_port_id)(struct net_device *dev, 1067 * struct netdev_phys_item_id *ppid); 1068 * Called to get ID of physical port of this device. If driver does 1069 * not implement this, it is assumed that the hw is not able to have 1070 * multiple net devices on single physical port. 1071 * 1072 * void (*ndo_udp_tunnel_add)(struct net_device *dev, 1073 * struct udp_tunnel_info *ti); 1074 * Called by UDP tunnel to notify a driver about the UDP port and socket 1075 * address family that a UDP tunnel is listnening to. It is called only 1076 * when a new port starts listening. The operation is protected by the 1077 * RTNL. 1078 * 1079 * void (*ndo_udp_tunnel_del)(struct net_device *dev, 1080 * struct udp_tunnel_info *ti); 1081 * Called by UDP tunnel to notify the driver about a UDP port and socket 1082 * address family that the UDP tunnel is not listening to anymore. The 1083 * operation is protected by the RTNL. 1084 * 1085 * void* (*ndo_dfwd_add_station)(struct net_device *pdev, 1086 * struct net_device *dev) 1087 * Called by upper layer devices to accelerate switching or other 1088 * station functionality into hardware. 'pdev is the lowerdev 1089 * to use for the offload and 'dev' is the net device that will 1090 * back the offload. Returns a pointer to the private structure 1091 * the upper layer will maintain. 1092 * void (*ndo_dfwd_del_station)(struct net_device *pdev, void *priv) 1093 * Called by upper layer device to delete the station created 1094 * by 'ndo_dfwd_add_station'. 'pdev' is the net device backing 1095 * the station and priv is the structure returned by the add 1096 * operation. 1097 * netdev_tx_t (*ndo_dfwd_start_xmit)(struct sk_buff *skb, 1098 * struct net_device *dev, 1099 * void *priv); 1100 * Callback to use for xmit over the accelerated station. This 1101 * is used in place of ndo_start_xmit on accelerated net 1102 * devices. 1103 * netdev_features_t (*ndo_features_check)(struct sk_buff *skb, 1104 * struct net_device *dev 1105 * netdev_features_t features); 1106 * Called by core transmit path to determine if device is capable of 1107 * performing offload operations on a given packet. This is to give 1108 * the device an opportunity to implement any restrictions that cannot 1109 * be otherwise expressed by feature flags. The check is called with 1110 * the set of features that the stack has calculated and it returns 1111 * those the driver believes to be appropriate. 1112 * int (*ndo_set_tx_maxrate)(struct net_device *dev, 1113 * int queue_index, u32 maxrate); 1114 * Called when a user wants to set a max-rate limitation of specific 1115 * TX queue. 1116 * int (*ndo_get_iflink)(const struct net_device *dev); 1117 * Called to get the iflink value of this device. 1118 * void (*ndo_change_proto_down)(struct net_device *dev, 1119 * bool proto_down); 1120 * This function is used to pass protocol port error state information 1121 * to the switch driver. The switch driver can react to the proto_down 1122 * by doing a phys down on the associated switch port. 1123 * int (*ndo_fill_metadata_dst)(struct net_device *dev, struct sk_buff *skb); 1124 * This function is used to get egress tunnel information for given skb. 1125 * This is useful for retrieving outer tunnel header parameters while 1126 * sampling packet. 1127 * void (*ndo_set_rx_headroom)(struct net_device *dev, int needed_headroom); 1128 * This function is used to specify the headroom that the skb must 1129 * consider when allocation skb during packet reception. Setting 1130 * appropriate rx headroom value allows avoiding skb head copy on 1131 * forward. Setting a negative value resets the rx headroom to the 1132 * default value. 1133 * int (*ndo_xdp)(struct net_device *dev, struct netdev_xdp *xdp); 1134 * This function is used to set or query state related to XDP on the 1135 * netdevice. See definition of enum xdp_netdev_command for details. 1136 * 1137 */ 1138 struct net_device_ops { 1139 int (*ndo_init)(struct net_device *dev); 1140 void (*ndo_uninit)(struct net_device *dev); 1141 int (*ndo_open)(struct net_device *dev); 1142 int (*ndo_stop)(struct net_device *dev); 1143 netdev_tx_t (*ndo_start_xmit)(struct sk_buff *skb, 1144 struct net_device *dev); 1145 netdev_features_t (*ndo_features_check)(struct sk_buff *skb, 1146 struct net_device *dev, 1147 netdev_features_t features); 1148 u16 (*ndo_select_queue)(struct net_device *dev, 1149 struct sk_buff *skb, 1150 void *accel_priv, 1151 select_queue_fallback_t fallback); 1152 void (*ndo_change_rx_flags)(struct net_device *dev, 1153 int flags); 1154 void (*ndo_set_rx_mode)(struct net_device *dev); 1155 int (*ndo_set_mac_address)(struct net_device *dev, 1156 void *addr); 1157 int (*ndo_validate_addr)(struct net_device *dev); 1158 int (*ndo_do_ioctl)(struct net_device *dev, 1159 struct ifreq *ifr, int cmd); 1160 int (*ndo_set_config)(struct net_device *dev, 1161 struct ifmap *map); 1162 int (*ndo_change_mtu)(struct net_device *dev, 1163 int new_mtu); 1164 int (*ndo_neigh_setup)(struct net_device *dev, 1165 struct neigh_parms *); 1166 void (*ndo_tx_timeout) (struct net_device *dev); 1167 1168 struct rtnl_link_stats64* (*ndo_get_stats64)(struct net_device *dev, 1169 struct rtnl_link_stats64 *storage); 1170 bool (*ndo_has_offload_stats)(const struct net_device *dev, int attr_id); 1171 int (*ndo_get_offload_stats)(int attr_id, 1172 const struct net_device *dev, 1173 void *attr_data); 1174 struct net_device_stats* (*ndo_get_stats)(struct net_device *dev); 1175 1176 int (*ndo_vlan_rx_add_vid)(struct net_device *dev, 1177 __be16 proto, u16 vid); 1178 int (*ndo_vlan_rx_kill_vid)(struct net_device *dev, 1179 __be16 proto, u16 vid); 1180 #ifdef CONFIG_NET_POLL_CONTROLLER 1181 void (*ndo_poll_controller)(struct net_device *dev); 1182 int (*ndo_netpoll_setup)(struct net_device *dev, 1183 struct netpoll_info *info); 1184 void (*ndo_netpoll_cleanup)(struct net_device *dev); 1185 #endif 1186 #ifdef CONFIG_NET_RX_BUSY_POLL 1187 int (*ndo_busy_poll)(struct napi_struct *dev); 1188 #endif 1189 int (*ndo_set_vf_mac)(struct net_device *dev, 1190 int queue, u8 *mac); 1191 int (*ndo_set_vf_vlan)(struct net_device *dev, 1192 int queue, u16 vlan, 1193 u8 qos, __be16 proto); 1194 int (*ndo_set_vf_rate)(struct net_device *dev, 1195 int vf, int min_tx_rate, 1196 int max_tx_rate); 1197 int (*ndo_set_vf_spoofchk)(struct net_device *dev, 1198 int vf, bool setting); 1199 int (*ndo_set_vf_trust)(struct net_device *dev, 1200 int vf, bool setting); 1201 int (*ndo_get_vf_config)(struct net_device *dev, 1202 int vf, 1203 struct ifla_vf_info *ivf); 1204 int (*ndo_set_vf_link_state)(struct net_device *dev, 1205 int vf, int link_state); 1206 int (*ndo_get_vf_stats)(struct net_device *dev, 1207 int vf, 1208 struct ifla_vf_stats 1209 *vf_stats); 1210 int (*ndo_set_vf_port)(struct net_device *dev, 1211 int vf, 1212 struct nlattr *port[]); 1213 int (*ndo_get_vf_port)(struct net_device *dev, 1214 int vf, struct sk_buff *skb); 1215 int (*ndo_set_vf_guid)(struct net_device *dev, 1216 int vf, u64 guid, 1217 int guid_type); 1218 int (*ndo_set_vf_rss_query_en)( 1219 struct net_device *dev, 1220 int vf, bool setting); 1221 int (*ndo_setup_tc)(struct net_device *dev, 1222 u32 handle, 1223 __be16 protocol, 1224 struct tc_to_netdev *tc); 1225 #if IS_ENABLED(CONFIG_FCOE) 1226 int (*ndo_fcoe_enable)(struct net_device *dev); 1227 int (*ndo_fcoe_disable)(struct net_device *dev); 1228 int (*ndo_fcoe_ddp_setup)(struct net_device *dev, 1229 u16 xid, 1230 struct scatterlist *sgl, 1231 unsigned int sgc); 1232 int (*ndo_fcoe_ddp_done)(struct net_device *dev, 1233 u16 xid); 1234 int (*ndo_fcoe_ddp_target)(struct net_device *dev, 1235 u16 xid, 1236 struct scatterlist *sgl, 1237 unsigned int sgc); 1238 int (*ndo_fcoe_get_hbainfo)(struct net_device *dev, 1239 struct netdev_fcoe_hbainfo *hbainfo); 1240 #endif 1241 1242 #if IS_ENABLED(CONFIG_LIBFCOE) 1243 #define NETDEV_FCOE_WWNN 0 1244 #define NETDEV_FCOE_WWPN 1 1245 int (*ndo_fcoe_get_wwn)(struct net_device *dev, 1246 u64 *wwn, int type); 1247 #endif 1248 1249 #ifdef CONFIG_RFS_ACCEL 1250 int (*ndo_rx_flow_steer)(struct net_device *dev, 1251 const struct sk_buff *skb, 1252 u16 rxq_index, 1253 u32 flow_id); 1254 #endif 1255 int (*ndo_add_slave)(struct net_device *dev, 1256 struct net_device *slave_dev); 1257 int (*ndo_del_slave)(struct net_device *dev, 1258 struct net_device *slave_dev); 1259 netdev_features_t (*ndo_fix_features)(struct net_device *dev, 1260 netdev_features_t features); 1261 int (*ndo_set_features)(struct net_device *dev, 1262 netdev_features_t features); 1263 int (*ndo_neigh_construct)(struct net_device *dev, 1264 struct neighbour *n); 1265 void (*ndo_neigh_destroy)(struct net_device *dev, 1266 struct neighbour *n); 1267 1268 int (*ndo_fdb_add)(struct ndmsg *ndm, 1269 struct nlattr *tb[], 1270 struct net_device *dev, 1271 const unsigned char *addr, 1272 u16 vid, 1273 u16 flags); 1274 int (*ndo_fdb_del)(struct ndmsg *ndm, 1275 struct nlattr *tb[], 1276 struct net_device *dev, 1277 const unsigned char *addr, 1278 u16 vid); 1279 int (*ndo_fdb_dump)(struct sk_buff *skb, 1280 struct netlink_callback *cb, 1281 struct net_device *dev, 1282 struct net_device *filter_dev, 1283 int *idx); 1284 1285 int (*ndo_bridge_setlink)(struct net_device *dev, 1286 struct nlmsghdr *nlh, 1287 u16 flags); 1288 int (*ndo_bridge_getlink)(struct sk_buff *skb, 1289 u32 pid, u32 seq, 1290 struct net_device *dev, 1291 u32 filter_mask, 1292 int nlflags); 1293 int (*ndo_bridge_dellink)(struct net_device *dev, 1294 struct nlmsghdr *nlh, 1295 u16 flags); 1296 int (*ndo_change_carrier)(struct net_device *dev, 1297 bool new_carrier); 1298 int (*ndo_get_phys_port_id)(struct net_device *dev, 1299 struct netdev_phys_item_id *ppid); 1300 int (*ndo_get_phys_port_name)(struct net_device *dev, 1301 char *name, size_t len); 1302 void (*ndo_udp_tunnel_add)(struct net_device *dev, 1303 struct udp_tunnel_info *ti); 1304 void (*ndo_udp_tunnel_del)(struct net_device *dev, 1305 struct udp_tunnel_info *ti); 1306 void* (*ndo_dfwd_add_station)(struct net_device *pdev, 1307 struct net_device *dev); 1308 void (*ndo_dfwd_del_station)(struct net_device *pdev, 1309 void *priv); 1310 1311 netdev_tx_t (*ndo_dfwd_start_xmit) (struct sk_buff *skb, 1312 struct net_device *dev, 1313 void *priv); 1314 int (*ndo_get_lock_subclass)(struct net_device *dev); 1315 int (*ndo_set_tx_maxrate)(struct net_device *dev, 1316 int queue_index, 1317 u32 maxrate); 1318 int (*ndo_get_iflink)(const struct net_device *dev); 1319 int (*ndo_change_proto_down)(struct net_device *dev, 1320 bool proto_down); 1321 int (*ndo_fill_metadata_dst)(struct net_device *dev, 1322 struct sk_buff *skb); 1323 void (*ndo_set_rx_headroom)(struct net_device *dev, 1324 int needed_headroom); 1325 int (*ndo_xdp)(struct net_device *dev, 1326 struct netdev_xdp *xdp); 1327 }; 1328 1329 /** 1330 * enum net_device_priv_flags - &struct net_device priv_flags 1331 * 1332 * These are the &struct net_device, they are only set internally 1333 * by drivers and used in the kernel. These flags are invisible to 1334 * userspace; this means that the order of these flags can change 1335 * during any kernel release. 1336 * 1337 * You should have a pretty good reason to be extending these flags. 1338 * 1339 * @IFF_802_1Q_VLAN: 802.1Q VLAN device 1340 * @IFF_EBRIDGE: Ethernet bridging device 1341 * @IFF_BONDING: bonding master or slave 1342 * @IFF_ISATAP: ISATAP interface (RFC4214) 1343 * @IFF_WAN_HDLC: WAN HDLC device 1344 * @IFF_XMIT_DST_RELEASE: dev_hard_start_xmit() is allowed to 1345 * release skb->dst 1346 * @IFF_DONT_BRIDGE: disallow bridging this ether dev 1347 * @IFF_DISABLE_NETPOLL: disable netpoll at run-time 1348 * @IFF_MACVLAN_PORT: device used as macvlan port 1349 * @IFF_BRIDGE_PORT: device used as bridge port 1350 * @IFF_OVS_DATAPATH: device used as Open vSwitch datapath port 1351 * @IFF_TX_SKB_SHARING: The interface supports sharing skbs on transmit 1352 * @IFF_UNICAST_FLT: Supports unicast filtering 1353 * @IFF_TEAM_PORT: device used as team port 1354 * @IFF_SUPP_NOFCS: device supports sending custom FCS 1355 * @IFF_LIVE_ADDR_CHANGE: device supports hardware address 1356 * change when it's running 1357 * @IFF_MACVLAN: Macvlan device 1358 * @IFF_XMIT_DST_RELEASE_PERM: IFF_XMIT_DST_RELEASE not taking into account 1359 * underlying stacked devices 1360 * @IFF_IPVLAN_MASTER: IPvlan master device 1361 * @IFF_IPVLAN_SLAVE: IPvlan slave device 1362 * @IFF_L3MDEV_MASTER: device is an L3 master device 1363 * @IFF_NO_QUEUE: device can run without qdisc attached 1364 * @IFF_OPENVSWITCH: device is a Open vSwitch master 1365 * @IFF_L3MDEV_SLAVE: device is enslaved to an L3 master device 1366 * @IFF_TEAM: device is a team device 1367 * @IFF_RXFH_CONFIGURED: device has had Rx Flow indirection table configured 1368 * @IFF_PHONY_HEADROOM: the headroom value is controlled by an external 1369 * entity (i.e. the master device for bridged veth) 1370 * @IFF_MACSEC: device is a MACsec device 1371 */ 1372 enum netdev_priv_flags { 1373 IFF_802_1Q_VLAN = 1<<0, 1374 IFF_EBRIDGE = 1<<1, 1375 IFF_BONDING = 1<<2, 1376 IFF_ISATAP = 1<<3, 1377 IFF_WAN_HDLC = 1<<4, 1378 IFF_XMIT_DST_RELEASE = 1<<5, 1379 IFF_DONT_BRIDGE = 1<<6, 1380 IFF_DISABLE_NETPOLL = 1<<7, 1381 IFF_MACVLAN_PORT = 1<<8, 1382 IFF_BRIDGE_PORT = 1<<9, 1383 IFF_OVS_DATAPATH = 1<<10, 1384 IFF_TX_SKB_SHARING = 1<<11, 1385 IFF_UNICAST_FLT = 1<<12, 1386 IFF_TEAM_PORT = 1<<13, 1387 IFF_SUPP_NOFCS = 1<<14, 1388 IFF_LIVE_ADDR_CHANGE = 1<<15, 1389 IFF_MACVLAN = 1<<16, 1390 IFF_XMIT_DST_RELEASE_PERM = 1<<17, 1391 IFF_IPVLAN_MASTER = 1<<18, 1392 IFF_IPVLAN_SLAVE = 1<<19, 1393 IFF_L3MDEV_MASTER = 1<<20, 1394 IFF_NO_QUEUE = 1<<21, 1395 IFF_OPENVSWITCH = 1<<22, 1396 IFF_L3MDEV_SLAVE = 1<<23, 1397 IFF_TEAM = 1<<24, 1398 IFF_RXFH_CONFIGURED = 1<<25, 1399 IFF_PHONY_HEADROOM = 1<<26, 1400 IFF_MACSEC = 1<<27, 1401 }; 1402 1403 #define IFF_802_1Q_VLAN IFF_802_1Q_VLAN 1404 #define IFF_EBRIDGE IFF_EBRIDGE 1405 #define IFF_BONDING IFF_BONDING 1406 #define IFF_ISATAP IFF_ISATAP 1407 #define IFF_WAN_HDLC IFF_WAN_HDLC 1408 #define IFF_XMIT_DST_RELEASE IFF_XMIT_DST_RELEASE 1409 #define IFF_DONT_BRIDGE IFF_DONT_BRIDGE 1410 #define IFF_DISABLE_NETPOLL IFF_DISABLE_NETPOLL 1411 #define IFF_MACVLAN_PORT IFF_MACVLAN_PORT 1412 #define IFF_BRIDGE_PORT IFF_BRIDGE_PORT 1413 #define IFF_OVS_DATAPATH IFF_OVS_DATAPATH 1414 #define IFF_TX_SKB_SHARING IFF_TX_SKB_SHARING 1415 #define IFF_UNICAST_FLT IFF_UNICAST_FLT 1416 #define IFF_TEAM_PORT IFF_TEAM_PORT 1417 #define IFF_SUPP_NOFCS IFF_SUPP_NOFCS 1418 #define IFF_LIVE_ADDR_CHANGE IFF_LIVE_ADDR_CHANGE 1419 #define IFF_MACVLAN IFF_MACVLAN 1420 #define IFF_XMIT_DST_RELEASE_PERM IFF_XMIT_DST_RELEASE_PERM 1421 #define IFF_IPVLAN_MASTER IFF_IPVLAN_MASTER 1422 #define IFF_IPVLAN_SLAVE IFF_IPVLAN_SLAVE 1423 #define IFF_L3MDEV_MASTER IFF_L3MDEV_MASTER 1424 #define IFF_NO_QUEUE IFF_NO_QUEUE 1425 #define IFF_OPENVSWITCH IFF_OPENVSWITCH 1426 #define IFF_L3MDEV_SLAVE IFF_L3MDEV_SLAVE 1427 #define IFF_TEAM IFF_TEAM 1428 #define IFF_RXFH_CONFIGURED IFF_RXFH_CONFIGURED 1429 #define IFF_MACSEC IFF_MACSEC 1430 1431 /** 1432 * struct net_device - The DEVICE structure. 1433 * Actually, this whole structure is a big mistake. It mixes I/O 1434 * data with strictly "high-level" data, and it has to know about 1435 * almost every data structure used in the INET module. 1436 * 1437 * @name: This is the first field of the "visible" part of this structure 1438 * (i.e. as seen by users in the "Space.c" file). It is the name 1439 * of the interface. 1440 * 1441 * @name_hlist: Device name hash chain, please keep it close to name[] 1442 * @ifalias: SNMP alias 1443 * @mem_end: Shared memory end 1444 * @mem_start: Shared memory start 1445 * @base_addr: Device I/O address 1446 * @irq: Device IRQ number 1447 * 1448 * @carrier_changes: Stats to monitor carrier on<->off transitions 1449 * 1450 * @state: Generic network queuing layer state, see netdev_state_t 1451 * @dev_list: The global list of network devices 1452 * @napi_list: List entry used for polling NAPI devices 1453 * @unreg_list: List entry when we are unregistering the 1454 * device; see the function unregister_netdev 1455 * @close_list: List entry used when we are closing the device 1456 * @ptype_all: Device-specific packet handlers for all protocols 1457 * @ptype_specific: Device-specific, protocol-specific packet handlers 1458 * 1459 * @adj_list: Directly linked devices, like slaves for bonding 1460 * @features: Currently active device features 1461 * @hw_features: User-changeable features 1462 * 1463 * @wanted_features: User-requested features 1464 * @vlan_features: Mask of features inheritable by VLAN devices 1465 * 1466 * @hw_enc_features: Mask of features inherited by encapsulating devices 1467 * This field indicates what encapsulation 1468 * offloads the hardware is capable of doing, 1469 * and drivers will need to set them appropriately. 1470 * 1471 * @mpls_features: Mask of features inheritable by MPLS 1472 * 1473 * @ifindex: interface index 1474 * @group: The group the device belongs to 1475 * 1476 * @stats: Statistics struct, which was left as a legacy, use 1477 * rtnl_link_stats64 instead 1478 * 1479 * @rx_dropped: Dropped packets by core network, 1480 * do not use this in drivers 1481 * @tx_dropped: Dropped packets by core network, 1482 * do not use this in drivers 1483 * @rx_nohandler: nohandler dropped packets by core network on 1484 * inactive devices, do not use this in drivers 1485 * 1486 * @wireless_handlers: List of functions to handle Wireless Extensions, 1487 * instead of ioctl, 1488 * see <net/iw_handler.h> for details. 1489 * @wireless_data: Instance data managed by the core of wireless extensions 1490 * 1491 * @netdev_ops: Includes several pointers to callbacks, 1492 * if one wants to override the ndo_*() functions 1493 * @ethtool_ops: Management operations 1494 * @ndisc_ops: Includes callbacks for different IPv6 neighbour 1495 * discovery handling. Necessary for e.g. 6LoWPAN. 1496 * @header_ops: Includes callbacks for creating,parsing,caching,etc 1497 * of Layer 2 headers. 1498 * 1499 * @flags: Interface flags (a la BSD) 1500 * @priv_flags: Like 'flags' but invisible to userspace, 1501 * see if.h for the definitions 1502 * @gflags: Global flags ( kept as legacy ) 1503 * @padded: How much padding added by alloc_netdev() 1504 * @operstate: RFC2863 operstate 1505 * @link_mode: Mapping policy to operstate 1506 * @if_port: Selectable AUI, TP, ... 1507 * @dma: DMA channel 1508 * @mtu: Interface MTU value 1509 * @min_mtu: Interface Minimum MTU value 1510 * @max_mtu: Interface Maximum MTU value 1511 * @type: Interface hardware type 1512 * @hard_header_len: Maximum hardware header length. 1513 * 1514 * @needed_headroom: Extra headroom the hardware may need, but not in all 1515 * cases can this be guaranteed 1516 * @needed_tailroom: Extra tailroom the hardware may need, but not in all 1517 * cases can this be guaranteed. Some cases also use 1518 * LL_MAX_HEADER instead to allocate the skb 1519 * 1520 * interface address info: 1521 * 1522 * @perm_addr: Permanent hw address 1523 * @addr_assign_type: Hw address assignment type 1524 * @addr_len: Hardware address length 1525 * @neigh_priv_len: Used in neigh_alloc() 1526 * @dev_id: Used to differentiate devices that share 1527 * the same link layer address 1528 * @dev_port: Used to differentiate devices that share 1529 * the same function 1530 * @addr_list_lock: XXX: need comments on this one 1531 * @uc_promisc: Counter that indicates promiscuous mode 1532 * has been enabled due to the need to listen to 1533 * additional unicast addresses in a device that 1534 * does not implement ndo_set_rx_mode() 1535 * @uc: unicast mac addresses 1536 * @mc: multicast mac addresses 1537 * @dev_addrs: list of device hw addresses 1538 * @queues_kset: Group of all Kobjects in the Tx and RX queues 1539 * @promiscuity: Number of times the NIC is told to work in 1540 * promiscuous mode; if it becomes 0 the NIC will 1541 * exit promiscuous mode 1542 * @allmulti: Counter, enables or disables allmulticast mode 1543 * 1544 * @vlan_info: VLAN info 1545 * @dsa_ptr: dsa specific data 1546 * @tipc_ptr: TIPC specific data 1547 * @atalk_ptr: AppleTalk link 1548 * @ip_ptr: IPv4 specific data 1549 * @dn_ptr: DECnet specific data 1550 * @ip6_ptr: IPv6 specific data 1551 * @ax25_ptr: AX.25 specific data 1552 * @ieee80211_ptr: IEEE 802.11 specific data, assign before registering 1553 * 1554 * @last_rx: Time of last Rx 1555 * @dev_addr: Hw address (before bcast, 1556 * because most packets are unicast) 1557 * 1558 * @_rx: Array of RX queues 1559 * @num_rx_queues: Number of RX queues 1560 * allocated at register_netdev() time 1561 * @real_num_rx_queues: Number of RX queues currently active in device 1562 * 1563 * @rx_handler: handler for received packets 1564 * @rx_handler_data: XXX: need comments on this one 1565 * @ingress_queue: XXX: need comments on this one 1566 * @broadcast: hw bcast address 1567 * 1568 * @rx_cpu_rmap: CPU reverse-mapping for RX completion interrupts, 1569 * indexed by RX queue number. Assigned by driver. 1570 * This must only be set if the ndo_rx_flow_steer 1571 * operation is defined 1572 * @index_hlist: Device index hash chain 1573 * 1574 * @_tx: Array of TX queues 1575 * @num_tx_queues: Number of TX queues allocated at alloc_netdev_mq() time 1576 * @real_num_tx_queues: Number of TX queues currently active in device 1577 * @qdisc: Root qdisc from userspace point of view 1578 * @tx_queue_len: Max frames per queue allowed 1579 * @tx_global_lock: XXX: need comments on this one 1580 * 1581 * @xps_maps: XXX: need comments on this one 1582 * 1583 * @watchdog_timeo: Represents the timeout that is used by 1584 * the watchdog (see dev_watchdog()) 1585 * @watchdog_timer: List of timers 1586 * 1587 * @pcpu_refcnt: Number of references to this device 1588 * @todo_list: Delayed register/unregister 1589 * @link_watch_list: XXX: need comments on this one 1590 * 1591 * @reg_state: Register/unregister state machine 1592 * @dismantle: Device is going to be freed 1593 * @rtnl_link_state: This enum represents the phases of creating 1594 * a new link 1595 * 1596 * @destructor: Called from unregister, 1597 * can be used to call free_netdev 1598 * @npinfo: XXX: need comments on this one 1599 * @nd_net: Network namespace this network device is inside 1600 * 1601 * @ml_priv: Mid-layer private 1602 * @lstats: Loopback statistics 1603 * @tstats: Tunnel statistics 1604 * @dstats: Dummy statistics 1605 * @vstats: Virtual ethernet statistics 1606 * 1607 * @garp_port: GARP 1608 * @mrp_port: MRP 1609 * 1610 * @dev: Class/net/name entry 1611 * @sysfs_groups: Space for optional device, statistics and wireless 1612 * sysfs groups 1613 * 1614 * @sysfs_rx_queue_group: Space for optional per-rx queue attributes 1615 * @rtnl_link_ops: Rtnl_link_ops 1616 * 1617 * @gso_max_size: Maximum size of generic segmentation offload 1618 * @gso_max_segs: Maximum number of segments that can be passed to the 1619 * NIC for GSO 1620 * 1621 * @dcbnl_ops: Data Center Bridging netlink ops 1622 * @num_tc: Number of traffic classes in the net device 1623 * @tc_to_txq: XXX: need comments on this one 1624 * @prio_tc_map: XXX: need comments on this one 1625 * 1626 * @fcoe_ddp_xid: Max exchange id for FCoE LRO by ddp 1627 * 1628 * @priomap: XXX: need comments on this one 1629 * @phydev: Physical device may attach itself 1630 * for hardware timestamping 1631 * 1632 * @qdisc_tx_busylock: lockdep class annotating Qdisc->busylock spinlock 1633 * @qdisc_running_key: lockdep class annotating Qdisc->running seqcount 1634 * 1635 * @proto_down: protocol port state information can be sent to the 1636 * switch driver and used to set the phys state of the 1637 * switch port. 1638 * 1639 * FIXME: cleanup struct net_device such that network protocol info 1640 * moves out. 1641 */ 1642 1643 struct net_device { 1644 char name[IFNAMSIZ]; 1645 struct hlist_node name_hlist; 1646 char *ifalias; 1647 /* 1648 * I/O specific fields 1649 * FIXME: Merge these and struct ifmap into one 1650 */ 1651 unsigned long mem_end; 1652 unsigned long mem_start; 1653 unsigned long base_addr; 1654 int irq; 1655 1656 atomic_t carrier_changes; 1657 1658 /* 1659 * Some hardware also needs these fields (state,dev_list, 1660 * napi_list,unreg_list,close_list) but they are not 1661 * part of the usual set specified in Space.c. 1662 */ 1663 1664 unsigned long state; 1665 1666 struct list_head dev_list; 1667 struct list_head napi_list; 1668 struct list_head unreg_list; 1669 struct list_head close_list; 1670 struct list_head ptype_all; 1671 struct list_head ptype_specific; 1672 1673 struct { 1674 struct list_head upper; 1675 struct list_head lower; 1676 } adj_list; 1677 1678 netdev_features_t features; 1679 netdev_features_t hw_features; 1680 netdev_features_t wanted_features; 1681 netdev_features_t vlan_features; 1682 netdev_features_t hw_enc_features; 1683 netdev_features_t mpls_features; 1684 netdev_features_t gso_partial_features; 1685 1686 int ifindex; 1687 int group; 1688 1689 struct net_device_stats stats; 1690 1691 atomic_long_t rx_dropped; 1692 atomic_long_t tx_dropped; 1693 atomic_long_t rx_nohandler; 1694 1695 #ifdef CONFIG_WIRELESS_EXT 1696 const struct iw_handler_def *wireless_handlers; 1697 struct iw_public_data *wireless_data; 1698 #endif 1699 const struct net_device_ops *netdev_ops; 1700 const struct ethtool_ops *ethtool_ops; 1701 #ifdef CONFIG_NET_SWITCHDEV 1702 const struct switchdev_ops *switchdev_ops; 1703 #endif 1704 #ifdef CONFIG_NET_L3_MASTER_DEV 1705 const struct l3mdev_ops *l3mdev_ops; 1706 #endif 1707 #if IS_ENABLED(CONFIG_IPV6) 1708 const struct ndisc_ops *ndisc_ops; 1709 #endif 1710 1711 const struct header_ops *header_ops; 1712 1713 unsigned int flags; 1714 unsigned int priv_flags; 1715 1716 unsigned short gflags; 1717 unsigned short padded; 1718 1719 unsigned char operstate; 1720 unsigned char link_mode; 1721 1722 unsigned char if_port; 1723 unsigned char dma; 1724 1725 unsigned int mtu; 1726 unsigned int min_mtu; 1727 unsigned int max_mtu; 1728 unsigned short type; 1729 unsigned short hard_header_len; 1730 1731 unsigned short needed_headroom; 1732 unsigned short needed_tailroom; 1733 1734 /* Interface address info. */ 1735 unsigned char perm_addr[MAX_ADDR_LEN]; 1736 unsigned char addr_assign_type; 1737 unsigned char addr_len; 1738 unsigned short neigh_priv_len; 1739 unsigned short dev_id; 1740 unsigned short dev_port; 1741 spinlock_t addr_list_lock; 1742 unsigned char name_assign_type; 1743 bool uc_promisc; 1744 struct netdev_hw_addr_list uc; 1745 struct netdev_hw_addr_list mc; 1746 struct netdev_hw_addr_list dev_addrs; 1747 1748 #ifdef CONFIG_SYSFS 1749 struct kset *queues_kset; 1750 #endif 1751 unsigned int promiscuity; 1752 unsigned int allmulti; 1753 1754 1755 /* Protocol-specific pointers */ 1756 1757 #if IS_ENABLED(CONFIG_VLAN_8021Q) 1758 struct vlan_info __rcu *vlan_info; 1759 #endif 1760 #if IS_ENABLED(CONFIG_NET_DSA) 1761 struct dsa_switch_tree *dsa_ptr; 1762 #endif 1763 #if IS_ENABLED(CONFIG_TIPC) 1764 struct tipc_bearer __rcu *tipc_ptr; 1765 #endif 1766 void *atalk_ptr; 1767 struct in_device __rcu *ip_ptr; 1768 struct dn_dev __rcu *dn_ptr; 1769 struct inet6_dev __rcu *ip6_ptr; 1770 void *ax25_ptr; 1771 struct wireless_dev *ieee80211_ptr; 1772 struct wpan_dev *ieee802154_ptr; 1773 #if IS_ENABLED(CONFIG_MPLS_ROUTING) 1774 struct mpls_dev __rcu *mpls_ptr; 1775 #endif 1776 1777 /* 1778 * Cache lines mostly used on receive path (including eth_type_trans()) 1779 */ 1780 unsigned long last_rx; 1781 1782 /* Interface address info used in eth_type_trans() */ 1783 unsigned char *dev_addr; 1784 1785 #ifdef CONFIG_SYSFS 1786 struct netdev_rx_queue *_rx; 1787 1788 unsigned int num_rx_queues; 1789 unsigned int real_num_rx_queues; 1790 #endif 1791 1792 unsigned long gro_flush_timeout; 1793 rx_handler_func_t __rcu *rx_handler; 1794 void __rcu *rx_handler_data; 1795 1796 #ifdef CONFIG_NET_CLS_ACT 1797 struct tcf_proto __rcu *ingress_cl_list; 1798 #endif 1799 struct netdev_queue __rcu *ingress_queue; 1800 #ifdef CONFIG_NETFILTER_INGRESS 1801 struct nf_hook_entry __rcu *nf_hooks_ingress; 1802 #endif 1803 1804 unsigned char broadcast[MAX_ADDR_LEN]; 1805 #ifdef CONFIG_RFS_ACCEL 1806 struct cpu_rmap *rx_cpu_rmap; 1807 #endif 1808 struct hlist_node index_hlist; 1809 1810 /* 1811 * Cache lines mostly used on transmit path 1812 */ 1813 struct netdev_queue *_tx ____cacheline_aligned_in_smp; 1814 unsigned int num_tx_queues; 1815 unsigned int real_num_tx_queues; 1816 struct Qdisc *qdisc; 1817 #ifdef CONFIG_NET_SCHED 1818 DECLARE_HASHTABLE (qdisc_hash, 4); 1819 #endif 1820 unsigned long tx_queue_len; 1821 spinlock_t tx_global_lock; 1822 int watchdog_timeo; 1823 1824 #ifdef CONFIG_XPS 1825 struct xps_dev_maps __rcu *xps_maps; 1826 #endif 1827 #ifdef CONFIG_NET_CLS_ACT 1828 struct tcf_proto __rcu *egress_cl_list; 1829 #endif 1830 1831 /* These may be needed for future network-power-down code. */ 1832 struct timer_list watchdog_timer; 1833 1834 int __percpu *pcpu_refcnt; 1835 struct list_head todo_list; 1836 1837 struct list_head link_watch_list; 1838 1839 enum { NETREG_UNINITIALIZED=0, 1840 NETREG_REGISTERED, /* completed register_netdevice */ 1841 NETREG_UNREGISTERING, /* called unregister_netdevice */ 1842 NETREG_UNREGISTERED, /* completed unregister todo */ 1843 NETREG_RELEASED, /* called free_netdev */ 1844 NETREG_DUMMY, /* dummy device for NAPI poll */ 1845 } reg_state:8; 1846 1847 bool dismantle; 1848 1849 enum { 1850 RTNL_LINK_INITIALIZED, 1851 RTNL_LINK_INITIALIZING, 1852 } rtnl_link_state:16; 1853 1854 void (*destructor)(struct net_device *dev); 1855 1856 #ifdef CONFIG_NETPOLL 1857 struct netpoll_info __rcu *npinfo; 1858 #endif 1859 1860 possible_net_t nd_net; 1861 1862 /* mid-layer private */ 1863 union { 1864 void *ml_priv; 1865 struct pcpu_lstats __percpu *lstats; 1866 struct pcpu_sw_netstats __percpu *tstats; 1867 struct pcpu_dstats __percpu *dstats; 1868 struct pcpu_vstats __percpu *vstats; 1869 }; 1870 1871 struct garp_port __rcu *garp_port; 1872 struct mrp_port __rcu *mrp_port; 1873 1874 struct device dev; 1875 const struct attribute_group *sysfs_groups[4]; 1876 const struct attribute_group *sysfs_rx_queue_group; 1877 1878 const struct rtnl_link_ops *rtnl_link_ops; 1879 1880 /* for setting kernel sock attribute on TCP connection setup */ 1881 #define GSO_MAX_SIZE 65536 1882 unsigned int gso_max_size; 1883 #define GSO_MAX_SEGS 65535 1884 u16 gso_max_segs; 1885 1886 #ifdef CONFIG_DCB 1887 const struct dcbnl_rtnl_ops *dcbnl_ops; 1888 #endif 1889 u8 num_tc; 1890 struct netdev_tc_txq tc_to_txq[TC_MAX_QUEUE]; 1891 u8 prio_tc_map[TC_BITMASK + 1]; 1892 1893 #if IS_ENABLED(CONFIG_FCOE) 1894 unsigned int fcoe_ddp_xid; 1895 #endif 1896 #if IS_ENABLED(CONFIG_CGROUP_NET_PRIO) 1897 struct netprio_map __rcu *priomap; 1898 #endif 1899 struct phy_device *phydev; 1900 struct lock_class_key *qdisc_tx_busylock; 1901 struct lock_class_key *qdisc_running_key; 1902 bool proto_down; 1903 }; 1904 #define to_net_dev(d) container_of(d, struct net_device, dev) 1905 1906 #define NETDEV_ALIGN 32 1907 1908 static inline 1909 int netdev_get_prio_tc_map(const struct net_device *dev, u32 prio) 1910 { 1911 return dev->prio_tc_map[prio & TC_BITMASK]; 1912 } 1913 1914 static inline 1915 int netdev_set_prio_tc_map(struct net_device *dev, u8 prio, u8 tc) 1916 { 1917 if (tc >= dev->num_tc) 1918 return -EINVAL; 1919 1920 dev->prio_tc_map[prio & TC_BITMASK] = tc & TC_BITMASK; 1921 return 0; 1922 } 1923 1924 int netdev_txq_to_tc(struct net_device *dev, unsigned int txq); 1925 void netdev_reset_tc(struct net_device *dev); 1926 int netdev_set_tc_queue(struct net_device *dev, u8 tc, u16 count, u16 offset); 1927 int netdev_set_num_tc(struct net_device *dev, u8 num_tc); 1928 1929 static inline 1930 int netdev_get_num_tc(struct net_device *dev) 1931 { 1932 return dev->num_tc; 1933 } 1934 1935 static inline 1936 struct netdev_queue *netdev_get_tx_queue(const struct net_device *dev, 1937 unsigned int index) 1938 { 1939 return &dev->_tx[index]; 1940 } 1941 1942 static inline struct netdev_queue *skb_get_tx_queue(const struct net_device *dev, 1943 const struct sk_buff *skb) 1944 { 1945 return netdev_get_tx_queue(dev, skb_get_queue_mapping(skb)); 1946 } 1947 1948 static inline void netdev_for_each_tx_queue(struct net_device *dev, 1949 void (*f)(struct net_device *, 1950 struct netdev_queue *, 1951 void *), 1952 void *arg) 1953 { 1954 unsigned int i; 1955 1956 for (i = 0; i < dev->num_tx_queues; i++) 1957 f(dev, &dev->_tx[i], arg); 1958 } 1959 1960 #define netdev_lockdep_set_classes(dev) \ 1961 { \ 1962 static struct lock_class_key qdisc_tx_busylock_key; \ 1963 static struct lock_class_key qdisc_running_key; \ 1964 static struct lock_class_key qdisc_xmit_lock_key; \ 1965 static struct lock_class_key dev_addr_list_lock_key; \ 1966 unsigned int i; \ 1967 \ 1968 (dev)->qdisc_tx_busylock = &qdisc_tx_busylock_key; \ 1969 (dev)->qdisc_running_key = &qdisc_running_key; \ 1970 lockdep_set_class(&(dev)->addr_list_lock, \ 1971 &dev_addr_list_lock_key); \ 1972 for (i = 0; i < (dev)->num_tx_queues; i++) \ 1973 lockdep_set_class(&(dev)->_tx[i]._xmit_lock, \ 1974 &qdisc_xmit_lock_key); \ 1975 } 1976 1977 struct netdev_queue *netdev_pick_tx(struct net_device *dev, 1978 struct sk_buff *skb, 1979 void *accel_priv); 1980 1981 /* returns the headroom that the master device needs to take in account 1982 * when forwarding to this dev 1983 */ 1984 static inline unsigned netdev_get_fwd_headroom(struct net_device *dev) 1985 { 1986 return dev->priv_flags & IFF_PHONY_HEADROOM ? 0 : dev->needed_headroom; 1987 } 1988 1989 static inline void netdev_set_rx_headroom(struct net_device *dev, int new_hr) 1990 { 1991 if (dev->netdev_ops->ndo_set_rx_headroom) 1992 dev->netdev_ops->ndo_set_rx_headroom(dev, new_hr); 1993 } 1994 1995 /* set the device rx headroom to the dev's default */ 1996 static inline void netdev_reset_rx_headroom(struct net_device *dev) 1997 { 1998 netdev_set_rx_headroom(dev, -1); 1999 } 2000 2001 /* 2002 * Net namespace inlines 2003 */ 2004 static inline 2005 struct net *dev_net(const struct net_device *dev) 2006 { 2007 return read_pnet(&dev->nd_net); 2008 } 2009 2010 static inline 2011 void dev_net_set(struct net_device *dev, struct net *net) 2012 { 2013 write_pnet(&dev->nd_net, net); 2014 } 2015 2016 static inline bool netdev_uses_dsa(struct net_device *dev) 2017 { 2018 #if IS_ENABLED(CONFIG_NET_DSA) 2019 if (dev->dsa_ptr != NULL) 2020 return dsa_uses_tagged_protocol(dev->dsa_ptr); 2021 #endif 2022 return false; 2023 } 2024 2025 /** 2026 * netdev_priv - access network device private data 2027 * @dev: network device 2028 * 2029 * Get network device private data 2030 */ 2031 static inline void *netdev_priv(const struct net_device *dev) 2032 { 2033 return (char *)dev + ALIGN(sizeof(struct net_device), NETDEV_ALIGN); 2034 } 2035 2036 /* Set the sysfs physical device reference for the network logical device 2037 * if set prior to registration will cause a symlink during initialization. 2038 */ 2039 #define SET_NETDEV_DEV(net, pdev) ((net)->dev.parent = (pdev)) 2040 2041 /* Set the sysfs device type for the network logical device to allow 2042 * fine-grained identification of different network device types. For 2043 * example Ethernet, Wireless LAN, Bluetooth, WiMAX etc. 2044 */ 2045 #define SET_NETDEV_DEVTYPE(net, devtype) ((net)->dev.type = (devtype)) 2046 2047 /* Default NAPI poll() weight 2048 * Device drivers are strongly advised to not use bigger value 2049 */ 2050 #define NAPI_POLL_WEIGHT 64 2051 2052 /** 2053 * netif_napi_add - initialize a NAPI context 2054 * @dev: network device 2055 * @napi: NAPI context 2056 * @poll: polling function 2057 * @weight: default weight 2058 * 2059 * netif_napi_add() must be used to initialize a NAPI context prior to calling 2060 * *any* of the other NAPI-related functions. 2061 */ 2062 void netif_napi_add(struct net_device *dev, struct napi_struct *napi, 2063 int (*poll)(struct napi_struct *, int), int weight); 2064 2065 /** 2066 * netif_tx_napi_add - initialize a NAPI context 2067 * @dev: network device 2068 * @napi: NAPI context 2069 * @poll: polling function 2070 * @weight: default weight 2071 * 2072 * This variant of netif_napi_add() should be used from drivers using NAPI 2073 * to exclusively poll a TX queue. 2074 * This will avoid we add it into napi_hash[], thus polluting this hash table. 2075 */ 2076 static inline void netif_tx_napi_add(struct net_device *dev, 2077 struct napi_struct *napi, 2078 int (*poll)(struct napi_struct *, int), 2079 int weight) 2080 { 2081 set_bit(NAPI_STATE_NO_BUSY_POLL, &napi->state); 2082 netif_napi_add(dev, napi, poll, weight); 2083 } 2084 2085 /** 2086 * netif_napi_del - remove a NAPI context 2087 * @napi: NAPI context 2088 * 2089 * netif_napi_del() removes a NAPI context from the network device NAPI list 2090 */ 2091 void netif_napi_del(struct napi_struct *napi); 2092 2093 struct napi_gro_cb { 2094 /* Virtual address of skb_shinfo(skb)->frags[0].page + offset. */ 2095 void *frag0; 2096 2097 /* Length of frag0. */ 2098 unsigned int frag0_len; 2099 2100 /* This indicates where we are processing relative to skb->data. */ 2101 int data_offset; 2102 2103 /* This is non-zero if the packet cannot be merged with the new skb. */ 2104 u16 flush; 2105 2106 /* Save the IP ID here and check when we get to the transport layer */ 2107 u16 flush_id; 2108 2109 /* Number of segments aggregated. */ 2110 u16 count; 2111 2112 /* Start offset for remote checksum offload */ 2113 u16 gro_remcsum_start; 2114 2115 /* jiffies when first packet was created/queued */ 2116 unsigned long age; 2117 2118 /* Used in ipv6_gro_receive() and foo-over-udp */ 2119 u16 proto; 2120 2121 /* This is non-zero if the packet may be of the same flow. */ 2122 u8 same_flow:1; 2123 2124 /* Used in tunnel GRO receive */ 2125 u8 encap_mark:1; 2126 2127 /* GRO checksum is valid */ 2128 u8 csum_valid:1; 2129 2130 /* Number of checksums via CHECKSUM_UNNECESSARY */ 2131 u8 csum_cnt:3; 2132 2133 /* Free the skb? */ 2134 u8 free:2; 2135 #define NAPI_GRO_FREE 1 2136 #define NAPI_GRO_FREE_STOLEN_HEAD 2 2137 2138 /* Used in foo-over-udp, set in udp[46]_gro_receive */ 2139 u8 is_ipv6:1; 2140 2141 /* Used in GRE, set in fou/gue_gro_receive */ 2142 u8 is_fou:1; 2143 2144 /* Used to determine if flush_id can be ignored */ 2145 u8 is_atomic:1; 2146 2147 /* Number of gro_receive callbacks this packet already went through */ 2148 u8 recursion_counter:4; 2149 2150 /* 1 bit hole */ 2151 2152 /* used to support CHECKSUM_COMPLETE for tunneling protocols */ 2153 __wsum csum; 2154 2155 /* used in skb_gro_receive() slow path */ 2156 struct sk_buff *last; 2157 }; 2158 2159 #define NAPI_GRO_CB(skb) ((struct napi_gro_cb *)(skb)->cb) 2160 2161 #define GRO_RECURSION_LIMIT 15 2162 static inline int gro_recursion_inc_test(struct sk_buff *skb) 2163 { 2164 return ++NAPI_GRO_CB(skb)->recursion_counter == GRO_RECURSION_LIMIT; 2165 } 2166 2167 typedef struct sk_buff **(*gro_receive_t)(struct sk_buff **, struct sk_buff *); 2168 static inline struct sk_buff **call_gro_receive(gro_receive_t cb, 2169 struct sk_buff **head, 2170 struct sk_buff *skb) 2171 { 2172 if (unlikely(gro_recursion_inc_test(skb))) { 2173 NAPI_GRO_CB(skb)->flush |= 1; 2174 return NULL; 2175 } 2176 2177 return cb(head, skb); 2178 } 2179 2180 typedef struct sk_buff **(*gro_receive_sk_t)(struct sock *, struct sk_buff **, 2181 struct sk_buff *); 2182 static inline struct sk_buff **call_gro_receive_sk(gro_receive_sk_t cb, 2183 struct sock *sk, 2184 struct sk_buff **head, 2185 struct sk_buff *skb) 2186 { 2187 if (unlikely(gro_recursion_inc_test(skb))) { 2188 NAPI_GRO_CB(skb)->flush |= 1; 2189 return NULL; 2190 } 2191 2192 return cb(sk, head, skb); 2193 } 2194 2195 struct packet_type { 2196 __be16 type; /* This is really htons(ether_type). */ 2197 struct net_device *dev; /* NULL is wildcarded here */ 2198 int (*func) (struct sk_buff *, 2199 struct net_device *, 2200 struct packet_type *, 2201 struct net_device *); 2202 bool (*id_match)(struct packet_type *ptype, 2203 struct sock *sk); 2204 void *af_packet_priv; 2205 struct list_head list; 2206 }; 2207 2208 struct offload_callbacks { 2209 struct sk_buff *(*gso_segment)(struct sk_buff *skb, 2210 netdev_features_t features); 2211 struct sk_buff **(*gro_receive)(struct sk_buff **head, 2212 struct sk_buff *skb); 2213 int (*gro_complete)(struct sk_buff *skb, int nhoff); 2214 }; 2215 2216 struct packet_offload { 2217 __be16 type; /* This is really htons(ether_type). */ 2218 u16 priority; 2219 struct offload_callbacks callbacks; 2220 struct list_head list; 2221 }; 2222 2223 /* often modified stats are per-CPU, other are shared (netdev->stats) */ 2224 struct pcpu_sw_netstats { 2225 u64 rx_packets; 2226 u64 rx_bytes; 2227 u64 tx_packets; 2228 u64 tx_bytes; 2229 struct u64_stats_sync syncp; 2230 }; 2231 2232 #define __netdev_alloc_pcpu_stats(type, gfp) \ 2233 ({ \ 2234 typeof(type) __percpu *pcpu_stats = alloc_percpu_gfp(type, gfp);\ 2235 if (pcpu_stats) { \ 2236 int __cpu; \ 2237 for_each_possible_cpu(__cpu) { \ 2238 typeof(type) *stat; \ 2239 stat = per_cpu_ptr(pcpu_stats, __cpu); \ 2240 u64_stats_init(&stat->syncp); \ 2241 } \ 2242 } \ 2243 pcpu_stats; \ 2244 }) 2245 2246 #define netdev_alloc_pcpu_stats(type) \ 2247 __netdev_alloc_pcpu_stats(type, GFP_KERNEL) 2248 2249 enum netdev_lag_tx_type { 2250 NETDEV_LAG_TX_TYPE_UNKNOWN, 2251 NETDEV_LAG_TX_TYPE_RANDOM, 2252 NETDEV_LAG_TX_TYPE_BROADCAST, 2253 NETDEV_LAG_TX_TYPE_ROUNDROBIN, 2254 NETDEV_LAG_TX_TYPE_ACTIVEBACKUP, 2255 NETDEV_LAG_TX_TYPE_HASH, 2256 }; 2257 2258 struct netdev_lag_upper_info { 2259 enum netdev_lag_tx_type tx_type; 2260 }; 2261 2262 struct netdev_lag_lower_state_info { 2263 u8 link_up : 1, 2264 tx_enabled : 1; 2265 }; 2266 2267 #include <linux/notifier.h> 2268 2269 /* netdevice notifier chain. Please remember to update the rtnetlink 2270 * notification exclusion list in rtnetlink_event() when adding new 2271 * types. 2272 */ 2273 #define NETDEV_UP 0x0001 /* For now you can't veto a device up/down */ 2274 #define NETDEV_DOWN 0x0002 2275 #define NETDEV_REBOOT 0x0003 /* Tell a protocol stack a network interface 2276 detected a hardware crash and restarted 2277 - we can use this eg to kick tcp sessions 2278 once done */ 2279 #define NETDEV_CHANGE 0x0004 /* Notify device state change */ 2280 #define NETDEV_REGISTER 0x0005 2281 #define NETDEV_UNREGISTER 0x0006 2282 #define NETDEV_CHANGEMTU 0x0007 /* notify after mtu change happened */ 2283 #define NETDEV_CHANGEADDR 0x0008 2284 #define NETDEV_GOING_DOWN 0x0009 2285 #define NETDEV_CHANGENAME 0x000A 2286 #define NETDEV_FEAT_CHANGE 0x000B 2287 #define NETDEV_BONDING_FAILOVER 0x000C 2288 #define NETDEV_PRE_UP 0x000D 2289 #define NETDEV_PRE_TYPE_CHANGE 0x000E 2290 #define NETDEV_POST_TYPE_CHANGE 0x000F 2291 #define NETDEV_POST_INIT 0x0010 2292 #define NETDEV_UNREGISTER_FINAL 0x0011 2293 #define NETDEV_RELEASE 0x0012 2294 #define NETDEV_NOTIFY_PEERS 0x0013 2295 #define NETDEV_JOIN 0x0014 2296 #define NETDEV_CHANGEUPPER 0x0015 2297 #define NETDEV_RESEND_IGMP 0x0016 2298 #define NETDEV_PRECHANGEMTU 0x0017 /* notify before mtu change happened */ 2299 #define NETDEV_CHANGEINFODATA 0x0018 2300 #define NETDEV_BONDING_INFO 0x0019 2301 #define NETDEV_PRECHANGEUPPER 0x001A 2302 #define NETDEV_CHANGELOWERSTATE 0x001B 2303 #define NETDEV_UDP_TUNNEL_PUSH_INFO 0x001C 2304 #define NETDEV_CHANGE_TX_QUEUE_LEN 0x001E 2305 2306 int register_netdevice_notifier(struct notifier_block *nb); 2307 int unregister_netdevice_notifier(struct notifier_block *nb); 2308 2309 struct netdev_notifier_info { 2310 struct net_device *dev; 2311 }; 2312 2313 struct netdev_notifier_change_info { 2314 struct netdev_notifier_info info; /* must be first */ 2315 unsigned int flags_changed; 2316 }; 2317 2318 struct netdev_notifier_changeupper_info { 2319 struct netdev_notifier_info info; /* must be first */ 2320 struct net_device *upper_dev; /* new upper dev */ 2321 bool master; /* is upper dev master */ 2322 bool linking; /* is the notification for link or unlink */ 2323 void *upper_info; /* upper dev info */ 2324 }; 2325 2326 struct netdev_notifier_changelowerstate_info { 2327 struct netdev_notifier_info info; /* must be first */ 2328 void *lower_state_info; /* is lower dev state */ 2329 }; 2330 2331 static inline void netdev_notifier_info_init(struct netdev_notifier_info *info, 2332 struct net_device *dev) 2333 { 2334 info->dev = dev; 2335 } 2336 2337 static inline struct net_device * 2338 netdev_notifier_info_to_dev(const struct netdev_notifier_info *info) 2339 { 2340 return info->dev; 2341 } 2342 2343 int call_netdevice_notifiers(unsigned long val, struct net_device *dev); 2344 2345 2346 extern rwlock_t dev_base_lock; /* Device list lock */ 2347 2348 #define for_each_netdev(net, d) \ 2349 list_for_each_entry(d, &(net)->dev_base_head, dev_list) 2350 #define for_each_netdev_reverse(net, d) \ 2351 list_for_each_entry_reverse(d, &(net)->dev_base_head, dev_list) 2352 #define for_each_netdev_rcu(net, d) \ 2353 list_for_each_entry_rcu(d, &(net)->dev_base_head, dev_list) 2354 #define for_each_netdev_safe(net, d, n) \ 2355 list_for_each_entry_safe(d, n, &(net)->dev_base_head, dev_list) 2356 #define for_each_netdev_continue(net, d) \ 2357 list_for_each_entry_continue(d, &(net)->dev_base_head, dev_list) 2358 #define for_each_netdev_continue_rcu(net, d) \ 2359 list_for_each_entry_continue_rcu(d, &(net)->dev_base_head, dev_list) 2360 #define for_each_netdev_in_bond_rcu(bond, slave) \ 2361 for_each_netdev_rcu(&init_net, slave) \ 2362 if (netdev_master_upper_dev_get_rcu(slave) == (bond)) 2363 #define net_device_entry(lh) list_entry(lh, struct net_device, dev_list) 2364 2365 static inline struct net_device *next_net_device(struct net_device *dev) 2366 { 2367 struct list_head *lh; 2368 struct net *net; 2369 2370 net = dev_net(dev); 2371 lh = dev->dev_list.next; 2372 return lh == &net->dev_base_head ? NULL : net_device_entry(lh); 2373 } 2374 2375 static inline struct net_device *next_net_device_rcu(struct net_device *dev) 2376 { 2377 struct list_head *lh; 2378 struct net *net; 2379 2380 net = dev_net(dev); 2381 lh = rcu_dereference(list_next_rcu(&dev->dev_list)); 2382 return lh == &net->dev_base_head ? NULL : net_device_entry(lh); 2383 } 2384 2385 static inline struct net_device *first_net_device(struct net *net) 2386 { 2387 return list_empty(&net->dev_base_head) ? NULL : 2388 net_device_entry(net->dev_base_head.next); 2389 } 2390 2391 static inline struct net_device *first_net_device_rcu(struct net *net) 2392 { 2393 struct list_head *lh = rcu_dereference(list_next_rcu(&net->dev_base_head)); 2394 2395 return lh == &net->dev_base_head ? NULL : net_device_entry(lh); 2396 } 2397 2398 int netdev_boot_setup_check(struct net_device *dev); 2399 unsigned long netdev_boot_base(const char *prefix, int unit); 2400 struct net_device *dev_getbyhwaddr_rcu(struct net *net, unsigned short type, 2401 const char *hwaddr); 2402 struct net_device *dev_getfirstbyhwtype(struct net *net, unsigned short type); 2403 struct net_device *__dev_getfirstbyhwtype(struct net *net, unsigned short type); 2404 void dev_add_pack(struct packet_type *pt); 2405 void dev_remove_pack(struct packet_type *pt); 2406 void __dev_remove_pack(struct packet_type *pt); 2407 void dev_add_offload(struct packet_offload *po); 2408 void dev_remove_offload(struct packet_offload *po); 2409 2410 int dev_get_iflink(const struct net_device *dev); 2411 int dev_fill_metadata_dst(struct net_device *dev, struct sk_buff *skb); 2412 struct net_device *__dev_get_by_flags(struct net *net, unsigned short flags, 2413 unsigned short mask); 2414 struct net_device *dev_get_by_name(struct net *net, const char *name); 2415 struct net_device *dev_get_by_name_rcu(struct net *net, const char *name); 2416 struct net_device *__dev_get_by_name(struct net *net, const char *name); 2417 int dev_alloc_name(struct net_device *dev, const char *name); 2418 int dev_open(struct net_device *dev); 2419 int dev_close(struct net_device *dev); 2420 int dev_close_many(struct list_head *head, bool unlink); 2421 void dev_disable_lro(struct net_device *dev); 2422 int dev_loopback_xmit(struct net *net, struct sock *sk, struct sk_buff *newskb); 2423 int dev_queue_xmit(struct sk_buff *skb); 2424 int dev_queue_xmit_accel(struct sk_buff *skb, void *accel_priv); 2425 int register_netdevice(struct net_device *dev); 2426 void unregister_netdevice_queue(struct net_device *dev, struct list_head *head); 2427 void unregister_netdevice_many(struct list_head *head); 2428 static inline void unregister_netdevice(struct net_device *dev) 2429 { 2430 unregister_netdevice_queue(dev, NULL); 2431 } 2432 2433 int netdev_refcnt_read(const struct net_device *dev); 2434 void free_netdev(struct net_device *dev); 2435 void netdev_freemem(struct net_device *dev); 2436 void synchronize_net(void); 2437 int init_dummy_netdev(struct net_device *dev); 2438 2439 DECLARE_PER_CPU(int, xmit_recursion); 2440 #define XMIT_RECURSION_LIMIT 10 2441 2442 static inline int dev_recursion_level(void) 2443 { 2444 return this_cpu_read(xmit_recursion); 2445 } 2446 2447 struct net_device *dev_get_by_index(struct net *net, int ifindex); 2448 struct net_device *__dev_get_by_index(struct net *net, int ifindex); 2449 struct net_device *dev_get_by_index_rcu(struct net *net, int ifindex); 2450 int netdev_get_name(struct net *net, char *name, int ifindex); 2451 int dev_restart(struct net_device *dev); 2452 int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb); 2453 2454 static inline unsigned int skb_gro_offset(const struct sk_buff *skb) 2455 { 2456 return NAPI_GRO_CB(skb)->data_offset; 2457 } 2458 2459 static inline unsigned int skb_gro_len(const struct sk_buff *skb) 2460 { 2461 return skb->len - NAPI_GRO_CB(skb)->data_offset; 2462 } 2463 2464 static inline void skb_gro_pull(struct sk_buff *skb, unsigned int len) 2465 { 2466 NAPI_GRO_CB(skb)->data_offset += len; 2467 } 2468 2469 static inline void *skb_gro_header_fast(struct sk_buff *skb, 2470 unsigned int offset) 2471 { 2472 return NAPI_GRO_CB(skb)->frag0 + offset; 2473 } 2474 2475 static inline int skb_gro_header_hard(struct sk_buff *skb, unsigned int hlen) 2476 { 2477 return NAPI_GRO_CB(skb)->frag0_len < hlen; 2478 } 2479 2480 static inline void *skb_gro_header_slow(struct sk_buff *skb, unsigned int hlen, 2481 unsigned int offset) 2482 { 2483 if (!pskb_may_pull(skb, hlen)) 2484 return NULL; 2485 2486 NAPI_GRO_CB(skb)->frag0 = NULL; 2487 NAPI_GRO_CB(skb)->frag0_len = 0; 2488 return skb->data + offset; 2489 } 2490 2491 static inline void *skb_gro_network_header(struct sk_buff *skb) 2492 { 2493 return (NAPI_GRO_CB(skb)->frag0 ?: skb->data) + 2494 skb_network_offset(skb); 2495 } 2496 2497 static inline void skb_gro_postpull_rcsum(struct sk_buff *skb, 2498 const void *start, unsigned int len) 2499 { 2500 if (NAPI_GRO_CB(skb)->csum_valid) 2501 NAPI_GRO_CB(skb)->csum = csum_sub(NAPI_GRO_CB(skb)->csum, 2502 csum_partial(start, len, 0)); 2503 } 2504 2505 /* GRO checksum functions. These are logical equivalents of the normal 2506 * checksum functions (in skbuff.h) except that they operate on the GRO 2507 * offsets and fields in sk_buff. 2508 */ 2509 2510 __sum16 __skb_gro_checksum_complete(struct sk_buff *skb); 2511 2512 static inline bool skb_at_gro_remcsum_start(struct sk_buff *skb) 2513 { 2514 return (NAPI_GRO_CB(skb)->gro_remcsum_start == skb_gro_offset(skb)); 2515 } 2516 2517 static inline bool __skb_gro_checksum_validate_needed(struct sk_buff *skb, 2518 bool zero_okay, 2519 __sum16 check) 2520 { 2521 return ((skb->ip_summed != CHECKSUM_PARTIAL || 2522 skb_checksum_start_offset(skb) < 2523 skb_gro_offset(skb)) && 2524 !skb_at_gro_remcsum_start(skb) && 2525 NAPI_GRO_CB(skb)->csum_cnt == 0 && 2526 (!zero_okay || check)); 2527 } 2528 2529 static inline __sum16 __skb_gro_checksum_validate_complete(struct sk_buff *skb, 2530 __wsum psum) 2531 { 2532 if (NAPI_GRO_CB(skb)->csum_valid && 2533 !csum_fold(csum_add(psum, NAPI_GRO_CB(skb)->csum))) 2534 return 0; 2535 2536 NAPI_GRO_CB(skb)->csum = psum; 2537 2538 return __skb_gro_checksum_complete(skb); 2539 } 2540 2541 static inline void skb_gro_incr_csum_unnecessary(struct sk_buff *skb) 2542 { 2543 if (NAPI_GRO_CB(skb)->csum_cnt > 0) { 2544 /* Consume a checksum from CHECKSUM_UNNECESSARY */ 2545 NAPI_GRO_CB(skb)->csum_cnt--; 2546 } else { 2547 /* Update skb for CHECKSUM_UNNECESSARY and csum_level when we 2548 * verified a new top level checksum or an encapsulated one 2549 * during GRO. This saves work if we fallback to normal path. 2550 */ 2551 __skb_incr_checksum_unnecessary(skb); 2552 } 2553 } 2554 2555 #define __skb_gro_checksum_validate(skb, proto, zero_okay, check, \ 2556 compute_pseudo) \ 2557 ({ \ 2558 __sum16 __ret = 0; \ 2559 if (__skb_gro_checksum_validate_needed(skb, zero_okay, check)) \ 2560 __ret = __skb_gro_checksum_validate_complete(skb, \ 2561 compute_pseudo(skb, proto)); \ 2562 if (__ret) \ 2563 __skb_mark_checksum_bad(skb); \ 2564 else \ 2565 skb_gro_incr_csum_unnecessary(skb); \ 2566 __ret; \ 2567 }) 2568 2569 #define skb_gro_checksum_validate(skb, proto, compute_pseudo) \ 2570 __skb_gro_checksum_validate(skb, proto, false, 0, compute_pseudo) 2571 2572 #define skb_gro_checksum_validate_zero_check(skb, proto, check, \ 2573 compute_pseudo) \ 2574 __skb_gro_checksum_validate(skb, proto, true, check, compute_pseudo) 2575 2576 #define skb_gro_checksum_simple_validate(skb) \ 2577 __skb_gro_checksum_validate(skb, 0, false, 0, null_compute_pseudo) 2578 2579 static inline bool __skb_gro_checksum_convert_check(struct sk_buff *skb) 2580 { 2581 return (NAPI_GRO_CB(skb)->csum_cnt == 0 && 2582 !NAPI_GRO_CB(skb)->csum_valid); 2583 } 2584 2585 static inline void __skb_gro_checksum_convert(struct sk_buff *skb, 2586 __sum16 check, __wsum pseudo) 2587 { 2588 NAPI_GRO_CB(skb)->csum = ~pseudo; 2589 NAPI_GRO_CB(skb)->csum_valid = 1; 2590 } 2591 2592 #define skb_gro_checksum_try_convert(skb, proto, check, compute_pseudo) \ 2593 do { \ 2594 if (__skb_gro_checksum_convert_check(skb)) \ 2595 __skb_gro_checksum_convert(skb, check, \ 2596 compute_pseudo(skb, proto)); \ 2597 } while (0) 2598 2599 struct gro_remcsum { 2600 int offset; 2601 __wsum delta; 2602 }; 2603 2604 static inline void skb_gro_remcsum_init(struct gro_remcsum *grc) 2605 { 2606 grc->offset = 0; 2607 grc->delta = 0; 2608 } 2609 2610 static inline void *skb_gro_remcsum_process(struct sk_buff *skb, void *ptr, 2611 unsigned int off, size_t hdrlen, 2612 int start, int offset, 2613 struct gro_remcsum *grc, 2614 bool nopartial) 2615 { 2616 __wsum delta; 2617 size_t plen = hdrlen + max_t(size_t, offset + sizeof(u16), start); 2618 2619 BUG_ON(!NAPI_GRO_CB(skb)->csum_valid); 2620 2621 if (!nopartial) { 2622 NAPI_GRO_CB(skb)->gro_remcsum_start = off + hdrlen + start; 2623 return ptr; 2624 } 2625 2626 ptr = skb_gro_header_fast(skb, off); 2627 if (skb_gro_header_hard(skb, off + plen)) { 2628 ptr = skb_gro_header_slow(skb, off + plen, off); 2629 if (!ptr) 2630 return NULL; 2631 } 2632 2633 delta = remcsum_adjust(ptr + hdrlen, NAPI_GRO_CB(skb)->csum, 2634 start, offset); 2635 2636 /* Adjust skb->csum since we changed the packet */ 2637 NAPI_GRO_CB(skb)->csum = csum_add(NAPI_GRO_CB(skb)->csum, delta); 2638 2639 grc->offset = off + hdrlen + offset; 2640 grc->delta = delta; 2641 2642 return ptr; 2643 } 2644 2645 static inline void skb_gro_remcsum_cleanup(struct sk_buff *skb, 2646 struct gro_remcsum *grc) 2647 { 2648 void *ptr; 2649 size_t plen = grc->offset + sizeof(u16); 2650 2651 if (!grc->delta) 2652 return; 2653 2654 ptr = skb_gro_header_fast(skb, grc->offset); 2655 if (skb_gro_header_hard(skb, grc->offset + sizeof(u16))) { 2656 ptr = skb_gro_header_slow(skb, plen, grc->offset); 2657 if (!ptr) 2658 return; 2659 } 2660 2661 remcsum_unadjust((__sum16 *)ptr, grc->delta); 2662 } 2663 2664 static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, 2665 unsigned short type, 2666 const void *daddr, const void *saddr, 2667 unsigned int len) 2668 { 2669 if (!dev->header_ops || !dev->header_ops->create) 2670 return 0; 2671 2672 return dev->header_ops->create(skb, dev, type, daddr, saddr, len); 2673 } 2674 2675 static inline int dev_parse_header(const struct sk_buff *skb, 2676 unsigned char *haddr) 2677 { 2678 const struct net_device *dev = skb->dev; 2679 2680 if (!dev->header_ops || !dev->header_ops->parse) 2681 return 0; 2682 return dev->header_ops->parse(skb, haddr); 2683 } 2684 2685 /* ll_header must have at least hard_header_len allocated */ 2686 static inline bool dev_validate_header(const struct net_device *dev, 2687 char *ll_header, int len) 2688 { 2689 if (likely(len >= dev->hard_header_len)) 2690 return true; 2691 2692 if (capable(CAP_SYS_RAWIO)) { 2693 memset(ll_header + len, 0, dev->hard_header_len - len); 2694 return true; 2695 } 2696 2697 if (dev->header_ops && dev->header_ops->validate) 2698 return dev->header_ops->validate(ll_header, len); 2699 2700 return false; 2701 } 2702 2703 typedef int gifconf_func_t(struct net_device * dev, char __user * bufptr, int len); 2704 int register_gifconf(unsigned int family, gifconf_func_t *gifconf); 2705 static inline int unregister_gifconf(unsigned int family) 2706 { 2707 return register_gifconf(family, NULL); 2708 } 2709 2710 #ifdef CONFIG_NET_FLOW_LIMIT 2711 #define FLOW_LIMIT_HISTORY (1 << 7) /* must be ^2 and !overflow buckets */ 2712 struct sd_flow_limit { 2713 u64 count; 2714 unsigned int num_buckets; 2715 unsigned int history_head; 2716 u16 history[FLOW_LIMIT_HISTORY]; 2717 u8 buckets[]; 2718 }; 2719 2720 extern int netdev_flow_limit_table_len; 2721 #endif /* CONFIG_NET_FLOW_LIMIT */ 2722 2723 /* 2724 * Incoming packets are placed on per-CPU queues 2725 */ 2726 struct softnet_data { 2727 struct list_head poll_list; 2728 struct sk_buff_head process_queue; 2729 2730 /* stats */ 2731 unsigned int processed; 2732 unsigned int time_squeeze; 2733 unsigned int received_rps; 2734 #ifdef CONFIG_RPS 2735 struct softnet_data *rps_ipi_list; 2736 #endif 2737 #ifdef CONFIG_NET_FLOW_LIMIT 2738 struct sd_flow_limit __rcu *flow_limit; 2739 #endif 2740 struct Qdisc *output_queue; 2741 struct Qdisc **output_queue_tailp; 2742 struct sk_buff *completion_queue; 2743 2744 #ifdef CONFIG_RPS 2745 /* input_queue_head should be written by cpu owning this struct, 2746 * and only read by other cpus. Worth using a cache line. 2747 */ 2748 unsigned int input_queue_head ____cacheline_aligned_in_smp; 2749 2750 /* Elements below can be accessed between CPUs for RPS/RFS */ 2751 struct call_single_data csd ____cacheline_aligned_in_smp; 2752 struct softnet_data *rps_ipi_next; 2753 unsigned int cpu; 2754 unsigned int input_queue_tail; 2755 #endif 2756 unsigned int dropped; 2757 struct sk_buff_head input_pkt_queue; 2758 struct napi_struct backlog; 2759 2760 }; 2761 2762 static inline void input_queue_head_incr(struct softnet_data *sd) 2763 { 2764 #ifdef CONFIG_RPS 2765 sd->input_queue_head++; 2766 #endif 2767 } 2768 2769 static inline void input_queue_tail_incr_save(struct softnet_data *sd, 2770 unsigned int *qtail) 2771 { 2772 #ifdef CONFIG_RPS 2773 *qtail = ++sd->input_queue_tail; 2774 #endif 2775 } 2776 2777 DECLARE_PER_CPU_ALIGNED(struct softnet_data, softnet_data); 2778 2779 void __netif_schedule(struct Qdisc *q); 2780 void netif_schedule_queue(struct netdev_queue *txq); 2781 2782 static inline void netif_tx_schedule_all(struct net_device *dev) 2783 { 2784 unsigned int i; 2785 2786 for (i = 0; i < dev->num_tx_queues; i++) 2787 netif_schedule_queue(netdev_get_tx_queue(dev, i)); 2788 } 2789 2790 static __always_inline void netif_tx_start_queue(struct netdev_queue *dev_queue) 2791 { 2792 clear_bit(__QUEUE_STATE_DRV_XOFF, &dev_queue->state); 2793 } 2794 2795 /** 2796 * netif_start_queue - allow transmit 2797 * @dev: network device 2798 * 2799 * Allow upper layers to call the device hard_start_xmit routine. 2800 */ 2801 static inline void netif_start_queue(struct net_device *dev) 2802 { 2803 netif_tx_start_queue(netdev_get_tx_queue(dev, 0)); 2804 } 2805 2806 static inline void netif_tx_start_all_queues(struct net_device *dev) 2807 { 2808 unsigned int i; 2809 2810 for (i = 0; i < dev->num_tx_queues; i++) { 2811 struct netdev_queue *txq = netdev_get_tx_queue(dev, i); 2812 netif_tx_start_queue(txq); 2813 } 2814 } 2815 2816 void netif_tx_wake_queue(struct netdev_queue *dev_queue); 2817 2818 /** 2819 * netif_wake_queue - restart transmit 2820 * @dev: network device 2821 * 2822 * Allow upper layers to call the device hard_start_xmit routine. 2823 * Used for flow control when transmit resources are available. 2824 */ 2825 static inline void netif_wake_queue(struct net_device *dev) 2826 { 2827 netif_tx_wake_queue(netdev_get_tx_queue(dev, 0)); 2828 } 2829 2830 static inline void netif_tx_wake_all_queues(struct net_device *dev) 2831 { 2832 unsigned int i; 2833 2834 for (i = 0; i < dev->num_tx_queues; i++) { 2835 struct netdev_queue *txq = netdev_get_tx_queue(dev, i); 2836 netif_tx_wake_queue(txq); 2837 } 2838 } 2839 2840 static __always_inline void netif_tx_stop_queue(struct netdev_queue *dev_queue) 2841 { 2842 set_bit(__QUEUE_STATE_DRV_XOFF, &dev_queue->state); 2843 } 2844 2845 /** 2846 * netif_stop_queue - stop transmitted packets 2847 * @dev: network device 2848 * 2849 * Stop upper layers calling the device hard_start_xmit routine. 2850 * Used for flow control when transmit resources are unavailable. 2851 */ 2852 static inline void netif_stop_queue(struct net_device *dev) 2853 { 2854 netif_tx_stop_queue(netdev_get_tx_queue(dev, 0)); 2855 } 2856 2857 void netif_tx_stop_all_queues(struct net_device *dev); 2858 2859 static inline bool netif_tx_queue_stopped(const struct netdev_queue *dev_queue) 2860 { 2861 return test_bit(__QUEUE_STATE_DRV_XOFF, &dev_queue->state); 2862 } 2863 2864 /** 2865 * netif_queue_stopped - test if transmit queue is flowblocked 2866 * @dev: network device 2867 * 2868 * Test if transmit queue on device is currently unable to send. 2869 */ 2870 static inline bool netif_queue_stopped(const struct net_device *dev) 2871 { 2872 return netif_tx_queue_stopped(netdev_get_tx_queue(dev, 0)); 2873 } 2874 2875 static inline bool netif_xmit_stopped(const struct netdev_queue *dev_queue) 2876 { 2877 return dev_queue->state & QUEUE_STATE_ANY_XOFF; 2878 } 2879 2880 static inline bool 2881 netif_xmit_frozen_or_stopped(const struct netdev_queue *dev_queue) 2882 { 2883 return dev_queue->state & QUEUE_STATE_ANY_XOFF_OR_FROZEN; 2884 } 2885 2886 static inline bool 2887 netif_xmit_frozen_or_drv_stopped(const struct netdev_queue *dev_queue) 2888 { 2889 return dev_queue->state & QUEUE_STATE_DRV_XOFF_OR_FROZEN; 2890 } 2891 2892 /** 2893 * netdev_txq_bql_enqueue_prefetchw - prefetch bql data for write 2894 * @dev_queue: pointer to transmit queue 2895 * 2896 * BQL enabled drivers might use this helper in their ndo_start_xmit(), 2897 * to give appropriate hint to the CPU. 2898 */ 2899 static inline void netdev_txq_bql_enqueue_prefetchw(struct netdev_queue *dev_queue) 2900 { 2901 #ifdef CONFIG_BQL 2902 prefetchw(&dev_queue->dql.num_queued); 2903 #endif 2904 } 2905 2906 /** 2907 * netdev_txq_bql_complete_prefetchw - prefetch bql data for write 2908 * @dev_queue: pointer to transmit queue 2909 * 2910 * BQL enabled drivers might use this helper in their TX completion path, 2911 * to give appropriate hint to the CPU. 2912 */ 2913 static inline void netdev_txq_bql_complete_prefetchw(struct netdev_queue *dev_queue) 2914 { 2915 #ifdef CONFIG_BQL 2916 prefetchw(&dev_queue->dql.limit); 2917 #endif 2918 } 2919 2920 static inline void netdev_tx_sent_queue(struct netdev_queue *dev_queue, 2921 unsigned int bytes) 2922 { 2923 #ifdef CONFIG_BQL 2924 dql_queued(&dev_queue->dql, bytes); 2925 2926 if (likely(dql_avail(&dev_queue->dql) >= 0)) 2927 return; 2928 2929 set_bit(__QUEUE_STATE_STACK_XOFF, &dev_queue->state); 2930 2931 /* 2932 * The XOFF flag must be set before checking the dql_avail below, 2933 * because in netdev_tx_completed_queue we update the dql_completed 2934 * before checking the XOFF flag. 2935 */ 2936 smp_mb(); 2937 2938 /* check again in case another CPU has just made room avail */ 2939 if (unlikely(dql_avail(&dev_queue->dql) >= 0)) 2940 clear_bit(__QUEUE_STATE_STACK_XOFF, &dev_queue->state); 2941 #endif 2942 } 2943 2944 /** 2945 * netdev_sent_queue - report the number of bytes queued to hardware 2946 * @dev: network device 2947 * @bytes: number of bytes queued to the hardware device queue 2948 * 2949 * Report the number of bytes queued for sending/completion to the network 2950 * device hardware queue. @bytes should be a good approximation and should 2951 * exactly match netdev_completed_queue() @bytes 2952 */ 2953 static inline void netdev_sent_queue(struct net_device *dev, unsigned int bytes) 2954 { 2955 netdev_tx_sent_queue(netdev_get_tx_queue(dev, 0), bytes); 2956 } 2957 2958 static inline void netdev_tx_completed_queue(struct netdev_queue *dev_queue, 2959 unsigned int pkts, unsigned int bytes) 2960 { 2961 #ifdef CONFIG_BQL 2962 if (unlikely(!bytes)) 2963 return; 2964 2965 dql_completed(&dev_queue->dql, bytes); 2966 2967 /* 2968 * Without the memory barrier there is a small possiblity that 2969 * netdev_tx_sent_queue will miss the update and cause the queue to 2970 * be stopped forever 2971 */ 2972 smp_mb(); 2973 2974 if (dql_avail(&dev_queue->dql) < 0) 2975 return; 2976 2977 if (test_and_clear_bit(__QUEUE_STATE_STACK_XOFF, &dev_queue->state)) 2978 netif_schedule_queue(dev_queue); 2979 #endif 2980 } 2981 2982 /** 2983 * netdev_completed_queue - report bytes and packets completed by device 2984 * @dev: network device 2985 * @pkts: actual number of packets sent over the medium 2986 * @bytes: actual number of bytes sent over the medium 2987 * 2988 * Report the number of bytes and packets transmitted by the network device 2989 * hardware queue over the physical medium, @bytes must exactly match the 2990 * @bytes amount passed to netdev_sent_queue() 2991 */ 2992 static inline void netdev_completed_queue(struct net_device *dev, 2993 unsigned int pkts, unsigned int bytes) 2994 { 2995 netdev_tx_completed_queue(netdev_get_tx_queue(dev, 0), pkts, bytes); 2996 } 2997 2998 static inline void netdev_tx_reset_queue(struct netdev_queue *q) 2999 { 3000 #ifdef CONFIG_BQL 3001 clear_bit(__QUEUE_STATE_STACK_XOFF, &q->state); 3002 dql_reset(&q->dql); 3003 #endif 3004 } 3005 3006 /** 3007 * netdev_reset_queue - reset the packets and bytes count of a network device 3008 * @dev_queue: network device 3009 * 3010 * Reset the bytes and packet count of a network device and clear the 3011 * software flow control OFF bit for this network device 3012 */ 3013 static inline void netdev_reset_queue(struct net_device *dev_queue) 3014 { 3015 netdev_tx_reset_queue(netdev_get_tx_queue(dev_queue, 0)); 3016 } 3017 3018 /** 3019 * netdev_cap_txqueue - check if selected tx queue exceeds device queues 3020 * @dev: network device 3021 * @queue_index: given tx queue index 3022 * 3023 * Returns 0 if given tx queue index >= number of device tx queues, 3024 * otherwise returns the originally passed tx queue index. 3025 */ 3026 static inline u16 netdev_cap_txqueue(struct net_device *dev, u16 queue_index) 3027 { 3028 if (unlikely(queue_index >= dev->real_num_tx_queues)) { 3029 net_warn_ratelimited("%s selects TX queue %d, but real number of TX queues is %d\n", 3030 dev->name, queue_index, 3031 dev->real_num_tx_queues); 3032 return 0; 3033 } 3034 3035 return queue_index; 3036 } 3037 3038 /** 3039 * netif_running - test if up 3040 * @dev: network device 3041 * 3042 * Test if the device has been brought up. 3043 */ 3044 static inline bool netif_running(const struct net_device *dev) 3045 { 3046 return test_bit(__LINK_STATE_START, &dev->state); 3047 } 3048 3049 /* 3050 * Routines to manage the subqueues on a device. We only need start, 3051 * stop, and a check if it's stopped. All other device management is 3052 * done at the overall netdevice level. 3053 * Also test the device if we're multiqueue. 3054 */ 3055 3056 /** 3057 * netif_start_subqueue - allow sending packets on subqueue 3058 * @dev: network device 3059 * @queue_index: sub queue index 3060 * 3061 * Start individual transmit queue of a device with multiple transmit queues. 3062 */ 3063 static inline void netif_start_subqueue(struct net_device *dev, u16 queue_index) 3064 { 3065 struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); 3066 3067 netif_tx_start_queue(txq); 3068 } 3069 3070 /** 3071 * netif_stop_subqueue - stop sending packets on subqueue 3072 * @dev: network device 3073 * @queue_index: sub queue index 3074 * 3075 * Stop individual transmit queue of a device with multiple transmit queues. 3076 */ 3077 static inline void netif_stop_subqueue(struct net_device *dev, u16 queue_index) 3078 { 3079 struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); 3080 netif_tx_stop_queue(txq); 3081 } 3082 3083 /** 3084 * netif_subqueue_stopped - test status of subqueue 3085 * @dev: network device 3086 * @queue_index: sub queue index 3087 * 3088 * Check individual transmit queue of a device with multiple transmit queues. 3089 */ 3090 static inline bool __netif_subqueue_stopped(const struct net_device *dev, 3091 u16 queue_index) 3092 { 3093 struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); 3094 3095 return netif_tx_queue_stopped(txq); 3096 } 3097 3098 static inline bool netif_subqueue_stopped(const struct net_device *dev, 3099 struct sk_buff *skb) 3100 { 3101 return __netif_subqueue_stopped(dev, skb_get_queue_mapping(skb)); 3102 } 3103 3104 void netif_wake_subqueue(struct net_device *dev, u16 queue_index); 3105 3106 #ifdef CONFIG_XPS 3107 int netif_set_xps_queue(struct net_device *dev, const struct cpumask *mask, 3108 u16 index); 3109 #else 3110 static inline int netif_set_xps_queue(struct net_device *dev, 3111 const struct cpumask *mask, 3112 u16 index) 3113 { 3114 return 0; 3115 } 3116 #endif 3117 3118 u16 __skb_tx_hash(const struct net_device *dev, struct sk_buff *skb, 3119 unsigned int num_tx_queues); 3120 3121 /* 3122 * Returns a Tx hash for the given packet when dev->real_num_tx_queues is used 3123 * as a distribution range limit for the returned value. 3124 */ 3125 static inline u16 skb_tx_hash(const struct net_device *dev, 3126 struct sk_buff *skb) 3127 { 3128 return __skb_tx_hash(dev, skb, dev->real_num_tx_queues); 3129 } 3130 3131 /** 3132 * netif_is_multiqueue - test if device has multiple transmit queues 3133 * @dev: network device 3134 * 3135 * Check if device has multiple transmit queues 3136 */ 3137 static inline bool netif_is_multiqueue(const struct net_device *dev) 3138 { 3139 return dev->num_tx_queues > 1; 3140 } 3141 3142 int netif_set_real_num_tx_queues(struct net_device *dev, unsigned int txq); 3143 3144 #ifdef CONFIG_SYSFS 3145 int netif_set_real_num_rx_queues(struct net_device *dev, unsigned int rxq); 3146 #else 3147 static inline int netif_set_real_num_rx_queues(struct net_device *dev, 3148 unsigned int rxq) 3149 { 3150 return 0; 3151 } 3152 #endif 3153 3154 #ifdef CONFIG_SYSFS 3155 static inline unsigned int get_netdev_rx_queue_index( 3156 struct netdev_rx_queue *queue) 3157 { 3158 struct net_device *dev = queue->dev; 3159 int index = queue - dev->_rx; 3160 3161 BUG_ON(index >= dev->num_rx_queues); 3162 return index; 3163 } 3164 #endif 3165 3166 #define DEFAULT_MAX_NUM_RSS_QUEUES (8) 3167 int netif_get_num_default_rss_queues(void); 3168 3169 enum skb_free_reason { 3170 SKB_REASON_CONSUMED, 3171 SKB_REASON_DROPPED, 3172 }; 3173 3174 void __dev_kfree_skb_irq(struct sk_buff *skb, enum skb_free_reason reason); 3175 void __dev_kfree_skb_any(struct sk_buff *skb, enum skb_free_reason reason); 3176 3177 /* 3178 * It is not allowed to call kfree_skb() or consume_skb() from hardware 3179 * interrupt context or with hardware interrupts being disabled. 3180 * (in_irq() || irqs_disabled()) 3181 * 3182 * We provide four helpers that can be used in following contexts : 3183 * 3184 * dev_kfree_skb_irq(skb) when caller drops a packet from irq context, 3185 * replacing kfree_skb(skb) 3186 * 3187 * dev_consume_skb_irq(skb) when caller consumes a packet from irq context. 3188 * Typically used in place of consume_skb(skb) in TX completion path 3189 * 3190 * dev_kfree_skb_any(skb) when caller doesn't know its current irq context, 3191 * replacing kfree_skb(skb) 3192 * 3193 * dev_consume_skb_any(skb) when caller doesn't know its current irq context, 3194 * and consumed a packet. Used in place of consume_skb(skb) 3195 */ 3196 static inline void dev_kfree_skb_irq(struct sk_buff *skb) 3197 { 3198 __dev_kfree_skb_irq(skb, SKB_REASON_DROPPED); 3199 } 3200 3201 static inline void dev_consume_skb_irq(struct sk_buff *skb) 3202 { 3203 __dev_kfree_skb_irq(skb, SKB_REASON_CONSUMED); 3204 } 3205 3206 static inline void dev_kfree_skb_any(struct sk_buff *skb) 3207 { 3208 __dev_kfree_skb_any(skb, SKB_REASON_DROPPED); 3209 } 3210 3211 static inline void dev_consume_skb_any(struct sk_buff *skb) 3212 { 3213 __dev_kfree_skb_any(skb, SKB_REASON_CONSUMED); 3214 } 3215 3216 int netif_rx(struct sk_buff *skb); 3217 int netif_rx_ni(struct sk_buff *skb); 3218 int netif_receive_skb(struct sk_buff *skb); 3219 gro_result_t napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb); 3220 void napi_gro_flush(struct napi_struct *napi, bool flush_old); 3221 struct sk_buff *napi_get_frags(struct napi_struct *napi); 3222 gro_result_t napi_gro_frags(struct napi_struct *napi); 3223 struct packet_offload *gro_find_receive_by_type(__be16 type); 3224 struct packet_offload *gro_find_complete_by_type(__be16 type); 3225 3226 static inline void napi_free_frags(struct napi_struct *napi) 3227 { 3228 kfree_skb(napi->skb); 3229 napi->skb = NULL; 3230 } 3231 3232 bool netdev_is_rx_handler_busy(struct net_device *dev); 3233 int netdev_rx_handler_register(struct net_device *dev, 3234 rx_handler_func_t *rx_handler, 3235 void *rx_handler_data); 3236 void netdev_rx_handler_unregister(struct net_device *dev); 3237 3238 bool dev_valid_name(const char *name); 3239 int dev_ioctl(struct net *net, unsigned int cmd, void __user *); 3240 int dev_ethtool(struct net *net, struct ifreq *); 3241 unsigned int dev_get_flags(const struct net_device *); 3242 int __dev_change_flags(struct net_device *, unsigned int flags); 3243 int dev_change_flags(struct net_device *, unsigned int); 3244 void __dev_notify_flags(struct net_device *, unsigned int old_flags, 3245 unsigned int gchanges); 3246 int dev_change_name(struct net_device *, const char *); 3247 int dev_set_alias(struct net_device *, const char *, size_t); 3248 int dev_change_net_namespace(struct net_device *, struct net *, const char *); 3249 int dev_set_mtu(struct net_device *, int); 3250 void dev_set_group(struct net_device *, int); 3251 int dev_set_mac_address(struct net_device *, struct sockaddr *); 3252 int dev_change_carrier(struct net_device *, bool new_carrier); 3253 int dev_get_phys_port_id(struct net_device *dev, 3254 struct netdev_phys_item_id *ppid); 3255 int dev_get_phys_port_name(struct net_device *dev, 3256 char *name, size_t len); 3257 int dev_change_proto_down(struct net_device *dev, bool proto_down); 3258 int dev_change_xdp_fd(struct net_device *dev, int fd, u32 flags); 3259 struct sk_buff *validate_xmit_skb_list(struct sk_buff *skb, struct net_device *dev); 3260 struct sk_buff *dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev, 3261 struct netdev_queue *txq, int *ret); 3262 int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb); 3263 int dev_forward_skb(struct net_device *dev, struct sk_buff *skb); 3264 bool is_skb_forwardable(const struct net_device *dev, 3265 const struct sk_buff *skb); 3266 3267 static __always_inline int ____dev_forward_skb(struct net_device *dev, 3268 struct sk_buff *skb) 3269 { 3270 if (skb_orphan_frags(skb, GFP_ATOMIC) || 3271 unlikely(!is_skb_forwardable(dev, skb))) { 3272 atomic_long_inc(&dev->rx_dropped); 3273 kfree_skb(skb); 3274 return NET_RX_DROP; 3275 } 3276 3277 skb_scrub_packet(skb, true); 3278 skb->priority = 0; 3279 return 0; 3280 } 3281 3282 void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev); 3283 3284 extern int netdev_budget; 3285 3286 /* Called by rtnetlink.c:rtnl_unlock() */ 3287 void netdev_run_todo(void); 3288 3289 /** 3290 * dev_put - release reference to device 3291 * @dev: network device 3292 * 3293 * Release reference to device to allow it to be freed. 3294 */ 3295 static inline void dev_put(struct net_device *dev) 3296 { 3297 this_cpu_dec(*dev->pcpu_refcnt); 3298 } 3299 3300 /** 3301 * dev_hold - get reference to device 3302 * @dev: network device 3303 * 3304 * Hold reference to device to keep it from being freed. 3305 */ 3306 static inline void dev_hold(struct net_device *dev) 3307 { 3308 this_cpu_inc(*dev->pcpu_refcnt); 3309 } 3310 3311 /* Carrier loss detection, dial on demand. The functions netif_carrier_on 3312 * and _off may be called from IRQ context, but it is caller 3313 * who is responsible for serialization of these calls. 3314 * 3315 * The name carrier is inappropriate, these functions should really be 3316 * called netif_lowerlayer_*() because they represent the state of any 3317 * kind of lower layer not just hardware media. 3318 */ 3319 3320 void linkwatch_init_dev(struct net_device *dev); 3321 void linkwatch_fire_event(struct net_device *dev); 3322 void linkwatch_forget_dev(struct net_device *dev); 3323 3324 /** 3325 * netif_carrier_ok - test if carrier present 3326 * @dev: network device 3327 * 3328 * Check if carrier is present on device 3329 */ 3330 static inline bool netif_carrier_ok(const struct net_device *dev) 3331 { 3332 return !test_bit(__LINK_STATE_NOCARRIER, &dev->state); 3333 } 3334 3335 unsigned long dev_trans_start(struct net_device *dev); 3336 3337 void __netdev_watchdog_up(struct net_device *dev); 3338 3339 void netif_carrier_on(struct net_device *dev); 3340 3341 void netif_carrier_off(struct net_device *dev); 3342 3343 /** 3344 * netif_dormant_on - mark device as dormant. 3345 * @dev: network device 3346 * 3347 * Mark device as dormant (as per RFC2863). 3348 * 3349 * The dormant state indicates that the relevant interface is not 3350 * actually in a condition to pass packets (i.e., it is not 'up') but is 3351 * in a "pending" state, waiting for some external event. For "on- 3352 * demand" interfaces, this new state identifies the situation where the 3353 * interface is waiting for events to place it in the up state. 3354 */ 3355 static inline void netif_dormant_on(struct net_device *dev) 3356 { 3357 if (!test_and_set_bit(__LINK_STATE_DORMANT, &dev->state)) 3358 linkwatch_fire_event(dev); 3359 } 3360 3361 /** 3362 * netif_dormant_off - set device as not dormant. 3363 * @dev: network device 3364 * 3365 * Device is not in dormant state. 3366 */ 3367 static inline void netif_dormant_off(struct net_device *dev) 3368 { 3369 if (test_and_clear_bit(__LINK_STATE_DORMANT, &dev->state)) 3370 linkwatch_fire_event(dev); 3371 } 3372 3373 /** 3374 * netif_dormant - test if carrier present 3375 * @dev: network device 3376 * 3377 * Check if carrier is present on device 3378 */ 3379 static inline bool netif_dormant(const struct net_device *dev) 3380 { 3381 return test_bit(__LINK_STATE_DORMANT, &dev->state); 3382 } 3383 3384 3385 /** 3386 * netif_oper_up - test if device is operational 3387 * @dev: network device 3388 * 3389 * Check if carrier is operational 3390 */ 3391 static inline bool netif_oper_up(const struct net_device *dev) 3392 { 3393 return (dev->operstate == IF_OPER_UP || 3394 dev->operstate == IF_OPER_UNKNOWN /* backward compat */); 3395 } 3396 3397 /** 3398 * netif_device_present - is device available or removed 3399 * @dev: network device 3400 * 3401 * Check if device has not been removed from system. 3402 */ 3403 static inline bool netif_device_present(struct net_device *dev) 3404 { 3405 return test_bit(__LINK_STATE_PRESENT, &dev->state); 3406 } 3407 3408 void netif_device_detach(struct net_device *dev); 3409 3410 void netif_device_attach(struct net_device *dev); 3411 3412 /* 3413 * Network interface message level settings 3414 */ 3415 3416 enum { 3417 NETIF_MSG_DRV = 0x0001, 3418 NETIF_MSG_PROBE = 0x0002, 3419 NETIF_MSG_LINK = 0x0004, 3420 NETIF_MSG_TIMER = 0x0008, 3421 NETIF_MSG_IFDOWN = 0x0010, 3422 NETIF_MSG_IFUP = 0x0020, 3423 NETIF_MSG_RX_ERR = 0x0040, 3424 NETIF_MSG_TX_ERR = 0x0080, 3425 NETIF_MSG_TX_QUEUED = 0x0100, 3426 NETIF_MSG_INTR = 0x0200, 3427 NETIF_MSG_TX_DONE = 0x0400, 3428 NETIF_MSG_RX_STATUS = 0x0800, 3429 NETIF_MSG_PKTDATA = 0x1000, 3430 NETIF_MSG_HW = 0x2000, 3431 NETIF_MSG_WOL = 0x4000, 3432 }; 3433 3434 #define netif_msg_drv(p) ((p)->msg_enable & NETIF_MSG_DRV) 3435 #define netif_msg_probe(p) ((p)->msg_enable & NETIF_MSG_PROBE) 3436 #define netif_msg_link(p) ((p)->msg_enable & NETIF_MSG_LINK) 3437 #define netif_msg_timer(p) ((p)->msg_enable & NETIF_MSG_TIMER) 3438 #define netif_msg_ifdown(p) ((p)->msg_enable & NETIF_MSG_IFDOWN) 3439 #define netif_msg_ifup(p) ((p)->msg_enable & NETIF_MSG_IFUP) 3440 #define netif_msg_rx_err(p) ((p)->msg_enable & NETIF_MSG_RX_ERR) 3441 #define netif_msg_tx_err(p) ((p)->msg_enable & NETIF_MSG_TX_ERR) 3442 #define netif_msg_tx_queued(p) ((p)->msg_enable & NETIF_MSG_TX_QUEUED) 3443 #define netif_msg_intr(p) ((p)->msg_enable & NETIF_MSG_INTR) 3444 #define netif_msg_tx_done(p) ((p)->msg_enable & NETIF_MSG_TX_DONE) 3445 #define netif_msg_rx_status(p) ((p)->msg_enable & NETIF_MSG_RX_STATUS) 3446 #define netif_msg_pktdata(p) ((p)->msg_enable & NETIF_MSG_PKTDATA) 3447 #define netif_msg_hw(p) ((p)->msg_enable & NETIF_MSG_HW) 3448 #define netif_msg_wol(p) ((p)->msg_enable & NETIF_MSG_WOL) 3449 3450 static inline u32 netif_msg_init(int debug_value, int default_msg_enable_bits) 3451 { 3452 /* use default */ 3453 if (debug_value < 0 || debug_value >= (sizeof(u32) * 8)) 3454 return default_msg_enable_bits; 3455 if (debug_value == 0) /* no output */ 3456 return 0; 3457 /* set low N bits */ 3458 return (1 << debug_value) - 1; 3459 } 3460 3461 static inline void __netif_tx_lock(struct netdev_queue *txq, int cpu) 3462 { 3463 spin_lock(&txq->_xmit_lock); 3464 txq->xmit_lock_owner = cpu; 3465 } 3466 3467 static inline bool __netif_tx_acquire(struct netdev_queue *txq) 3468 { 3469 __acquire(&txq->_xmit_lock); 3470 return true; 3471 } 3472 3473 static inline void __netif_tx_release(struct netdev_queue *txq) 3474 { 3475 __release(&txq->_xmit_lock); 3476 } 3477 3478 static inline void __netif_tx_lock_bh(struct netdev_queue *txq) 3479 { 3480 spin_lock_bh(&txq->_xmit_lock); 3481 txq->xmit_lock_owner = smp_processor_id(); 3482 } 3483 3484 static inline bool __netif_tx_trylock(struct netdev_queue *txq) 3485 { 3486 bool ok = spin_trylock(&txq->_xmit_lock); 3487 if (likely(ok)) 3488 txq->xmit_lock_owner = smp_processor_id(); 3489 return ok; 3490 } 3491 3492 static inline void __netif_tx_unlock(struct netdev_queue *txq) 3493 { 3494 txq->xmit_lock_owner = -1; 3495 spin_unlock(&txq->_xmit_lock); 3496 } 3497 3498 static inline void __netif_tx_unlock_bh(struct netdev_queue *txq) 3499 { 3500 txq->xmit_lock_owner = -1; 3501 spin_unlock_bh(&txq->_xmit_lock); 3502 } 3503 3504 static inline void txq_trans_update(struct netdev_queue *txq) 3505 { 3506 if (txq->xmit_lock_owner != -1) 3507 txq->trans_start = jiffies; 3508 } 3509 3510 /* legacy drivers only, netdev_start_xmit() sets txq->trans_start */ 3511 static inline void netif_trans_update(struct net_device *dev) 3512 { 3513 struct netdev_queue *txq = netdev_get_tx_queue(dev, 0); 3514 3515 if (txq->trans_start != jiffies) 3516 txq->trans_start = jiffies; 3517 } 3518 3519 /** 3520 * netif_tx_lock - grab network device transmit lock 3521 * @dev: network device 3522 * 3523 * Get network device transmit lock 3524 */ 3525 static inline void netif_tx_lock(struct net_device *dev) 3526 { 3527 unsigned int i; 3528 int cpu; 3529 3530 spin_lock(&dev->tx_global_lock); 3531 cpu = smp_processor_id(); 3532 for (i = 0; i < dev->num_tx_queues; i++) { 3533 struct netdev_queue *txq = netdev_get_tx_queue(dev, i); 3534 3535 /* We are the only thread of execution doing a 3536 * freeze, but we have to grab the _xmit_lock in 3537 * order to synchronize with threads which are in 3538 * the ->hard_start_xmit() handler and already 3539 * checked the frozen bit. 3540 */ 3541 __netif_tx_lock(txq, cpu); 3542 set_bit(__QUEUE_STATE_FROZEN, &txq->state); 3543 __netif_tx_unlock(txq); 3544 } 3545 } 3546 3547 static inline void netif_tx_lock_bh(struct net_device *dev) 3548 { 3549 local_bh_disable(); 3550 netif_tx_lock(dev); 3551 } 3552 3553 static inline void netif_tx_unlock(struct net_device *dev) 3554 { 3555 unsigned int i; 3556 3557 for (i = 0; i < dev->num_tx_queues; i++) { 3558 struct netdev_queue *txq = netdev_get_tx_queue(dev, i); 3559 3560 /* No need to grab the _xmit_lock here. If the 3561 * queue is not stopped for another reason, we 3562 * force a schedule. 3563 */ 3564 clear_bit(__QUEUE_STATE_FROZEN, &txq->state); 3565 netif_schedule_queue(txq); 3566 } 3567 spin_unlock(&dev->tx_global_lock); 3568 } 3569 3570 static inline void netif_tx_unlock_bh(struct net_device *dev) 3571 { 3572 netif_tx_unlock(dev); 3573 local_bh_enable(); 3574 } 3575 3576 #define HARD_TX_LOCK(dev, txq, cpu) { \ 3577 if ((dev->features & NETIF_F_LLTX) == 0) { \ 3578 __netif_tx_lock(txq, cpu); \ 3579 } else { \ 3580 __netif_tx_acquire(txq); \ 3581 } \ 3582 } 3583 3584 #define HARD_TX_TRYLOCK(dev, txq) \ 3585 (((dev->features & NETIF_F_LLTX) == 0) ? \ 3586 __netif_tx_trylock(txq) : \ 3587 __netif_tx_acquire(txq)) 3588 3589 #define HARD_TX_UNLOCK(dev, txq) { \ 3590 if ((dev->features & NETIF_F_LLTX) == 0) { \ 3591 __netif_tx_unlock(txq); \ 3592 } else { \ 3593 __netif_tx_release(txq); \ 3594 } \ 3595 } 3596 3597 static inline void netif_tx_disable(struct net_device *dev) 3598 { 3599 unsigned int i; 3600 int cpu; 3601 3602 local_bh_disable(); 3603 cpu = smp_processor_id(); 3604 for (i = 0; i < dev->num_tx_queues; i++) { 3605 struct netdev_queue *txq = netdev_get_tx_queue(dev, i); 3606 3607 __netif_tx_lock(txq, cpu); 3608 netif_tx_stop_queue(txq); 3609 __netif_tx_unlock(txq); 3610 } 3611 local_bh_enable(); 3612 } 3613 3614 static inline void netif_addr_lock(struct net_device *dev) 3615 { 3616 spin_lock(&dev->addr_list_lock); 3617 } 3618 3619 static inline void netif_addr_lock_nested(struct net_device *dev) 3620 { 3621 int subclass = SINGLE_DEPTH_NESTING; 3622 3623 if (dev->netdev_ops->ndo_get_lock_subclass) 3624 subclass = dev->netdev_ops->ndo_get_lock_subclass(dev); 3625 3626 spin_lock_nested(&dev->addr_list_lock, subclass); 3627 } 3628 3629 static inline void netif_addr_lock_bh(struct net_device *dev) 3630 { 3631 spin_lock_bh(&dev->addr_list_lock); 3632 } 3633 3634 static inline void netif_addr_unlock(struct net_device *dev) 3635 { 3636 spin_unlock(&dev->addr_list_lock); 3637 } 3638 3639 static inline void netif_addr_unlock_bh(struct net_device *dev) 3640 { 3641 spin_unlock_bh(&dev->addr_list_lock); 3642 } 3643 3644 /* 3645 * dev_addrs walker. Should be used only for read access. Call with 3646 * rcu_read_lock held. 3647 */ 3648 #define for_each_dev_addr(dev, ha) \ 3649 list_for_each_entry_rcu(ha, &dev->dev_addrs.list, list) 3650 3651 /* These functions live elsewhere (drivers/net/net_init.c, but related) */ 3652 3653 void ether_setup(struct net_device *dev); 3654 3655 /* Support for loadable net-drivers */ 3656 struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name, 3657 unsigned char name_assign_type, 3658 void (*setup)(struct net_device *), 3659 unsigned int txqs, unsigned int rxqs); 3660 #define alloc_netdev(sizeof_priv, name, name_assign_type, setup) \ 3661 alloc_netdev_mqs(sizeof_priv, name, name_assign_type, setup, 1, 1) 3662 3663 #define alloc_netdev_mq(sizeof_priv, name, name_assign_type, setup, count) \ 3664 alloc_netdev_mqs(sizeof_priv, name, name_assign_type, setup, count, \ 3665 count) 3666 3667 int register_netdev(struct net_device *dev); 3668 void unregister_netdev(struct net_device *dev); 3669 3670 /* General hardware address lists handling functions */ 3671 int __hw_addr_sync(struct netdev_hw_addr_list *to_list, 3672 struct netdev_hw_addr_list *from_list, int addr_len); 3673 void __hw_addr_unsync(struct netdev_hw_addr_list *to_list, 3674 struct netdev_hw_addr_list *from_list, int addr_len); 3675 int __hw_addr_sync_dev(struct netdev_hw_addr_list *list, 3676 struct net_device *dev, 3677 int (*sync)(struct net_device *, const unsigned char *), 3678 int (*unsync)(struct net_device *, 3679 const unsigned char *)); 3680 void __hw_addr_unsync_dev(struct netdev_hw_addr_list *list, 3681 struct net_device *dev, 3682 int (*unsync)(struct net_device *, 3683 const unsigned char *)); 3684 void __hw_addr_init(struct netdev_hw_addr_list *list); 3685 3686 /* Functions used for device addresses handling */ 3687 int dev_addr_add(struct net_device *dev, const unsigned char *addr, 3688 unsigned char addr_type); 3689 int dev_addr_del(struct net_device *dev, const unsigned char *addr, 3690 unsigned char addr_type); 3691 void dev_addr_flush(struct net_device *dev); 3692 int dev_addr_init(struct net_device *dev); 3693 3694 /* Functions used for unicast addresses handling */ 3695 int dev_uc_add(struct net_device *dev, const unsigned char *addr); 3696 int dev_uc_add_excl(struct net_device *dev, const unsigned char *addr); 3697 int dev_uc_del(struct net_device *dev, const unsigned char *addr); 3698 int dev_uc_sync(struct net_device *to, struct net_device *from); 3699 int dev_uc_sync_multiple(struct net_device *to, struct net_device *from); 3700 void dev_uc_unsync(struct net_device *to, struct net_device *from); 3701 void dev_uc_flush(struct net_device *dev); 3702 void dev_uc_init(struct net_device *dev); 3703 3704 /** 3705 * __dev_uc_sync - Synchonize device's unicast list 3706 * @dev: device to sync 3707 * @sync: function to call if address should be added 3708 * @unsync: function to call if address should be removed 3709 * 3710 * Add newly added addresses to the interface, and release 3711 * addresses that have been deleted. 3712 */ 3713 static inline int __dev_uc_sync(struct net_device *dev, 3714 int (*sync)(struct net_device *, 3715 const unsigned char *), 3716 int (*unsync)(struct net_device *, 3717 const unsigned char *)) 3718 { 3719 return __hw_addr_sync_dev(&dev->uc, dev, sync, unsync); 3720 } 3721 3722 /** 3723 * __dev_uc_unsync - Remove synchronized addresses from device 3724 * @dev: device to sync 3725 * @unsync: function to call if address should be removed 3726 * 3727 * Remove all addresses that were added to the device by dev_uc_sync(). 3728 */ 3729 static inline void __dev_uc_unsync(struct net_device *dev, 3730 int (*unsync)(struct net_device *, 3731 const unsigned char *)) 3732 { 3733 __hw_addr_unsync_dev(&dev->uc, dev, unsync); 3734 } 3735 3736 /* Functions used for multicast addresses handling */ 3737 int dev_mc_add(struct net_device *dev, const unsigned char *addr); 3738 int dev_mc_add_global(struct net_device *dev, const unsigned char *addr); 3739 int dev_mc_add_excl(struct net_device *dev, const unsigned char *addr); 3740 int dev_mc_del(struct net_device *dev, const unsigned char *addr); 3741 int dev_mc_del_global(struct net_device *dev, const unsigned char *addr); 3742 int dev_mc_sync(struct net_device *to, struct net_device *from); 3743 int dev_mc_sync_multiple(struct net_device *to, struct net_device *from); 3744 void dev_mc_unsync(struct net_device *to, struct net_device *from); 3745 void dev_mc_flush(struct net_device *dev); 3746 void dev_mc_init(struct net_device *dev); 3747 3748 /** 3749 * __dev_mc_sync - Synchonize device's multicast list 3750 * @dev: device to sync 3751 * @sync: function to call if address should be added 3752 * @unsync: function to call if address should be removed 3753 * 3754 * Add newly added addresses to the interface, and release 3755 * addresses that have been deleted. 3756 */ 3757 static inline int __dev_mc_sync(struct net_device *dev, 3758 int (*sync)(struct net_device *, 3759 const unsigned char *), 3760 int (*unsync)(struct net_device *, 3761 const unsigned char *)) 3762 { 3763 return __hw_addr_sync_dev(&dev->mc, dev, sync, unsync); 3764 } 3765 3766 /** 3767 * __dev_mc_unsync - Remove synchronized addresses from device 3768 * @dev: device to sync 3769 * @unsync: function to call if address should be removed 3770 * 3771 * Remove all addresses that were added to the device by dev_mc_sync(). 3772 */ 3773 static inline void __dev_mc_unsync(struct net_device *dev, 3774 int (*unsync)(struct net_device *, 3775 const unsigned char *)) 3776 { 3777 __hw_addr_unsync_dev(&dev->mc, dev, unsync); 3778 } 3779 3780 /* Functions used for secondary unicast and multicast support */ 3781 void dev_set_rx_mode(struct net_device *dev); 3782 void __dev_set_rx_mode(struct net_device *dev); 3783 int dev_set_promiscuity(struct net_device *dev, int inc); 3784 int dev_set_allmulti(struct net_device *dev, int inc); 3785 void netdev_state_change(struct net_device *dev); 3786 void netdev_notify_peers(struct net_device *dev); 3787 void netdev_features_change(struct net_device *dev); 3788 /* Load a device via the kmod */ 3789 void dev_load(struct net *net, const char *name); 3790 struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev, 3791 struct rtnl_link_stats64 *storage); 3792 void netdev_stats_to_stats64(struct rtnl_link_stats64 *stats64, 3793 const struct net_device_stats *netdev_stats); 3794 3795 extern int netdev_max_backlog; 3796 extern int netdev_tstamp_prequeue; 3797 extern int weight_p; 3798 3799 bool netdev_has_upper_dev(struct net_device *dev, struct net_device *upper_dev); 3800 struct net_device *netdev_upper_get_next_dev_rcu(struct net_device *dev, 3801 struct list_head **iter); 3802 struct net_device *netdev_all_upper_get_next_dev_rcu(struct net_device *dev, 3803 struct list_head **iter); 3804 3805 /* iterate through upper list, must be called under RCU read lock */ 3806 #define netdev_for_each_upper_dev_rcu(dev, updev, iter) \ 3807 for (iter = &(dev)->adj_list.upper, \ 3808 updev = netdev_upper_get_next_dev_rcu(dev, &(iter)); \ 3809 updev; \ 3810 updev = netdev_upper_get_next_dev_rcu(dev, &(iter))) 3811 3812 int netdev_walk_all_upper_dev_rcu(struct net_device *dev, 3813 int (*fn)(struct net_device *upper_dev, 3814 void *data), 3815 void *data); 3816 3817 bool netdev_has_upper_dev_all_rcu(struct net_device *dev, 3818 struct net_device *upper_dev); 3819 3820 void *netdev_lower_get_next_private(struct net_device *dev, 3821 struct list_head **iter); 3822 void *netdev_lower_get_next_private_rcu(struct net_device *dev, 3823 struct list_head **iter); 3824 3825 #define netdev_for_each_lower_private(dev, priv, iter) \ 3826 for (iter = (dev)->adj_list.lower.next, \ 3827 priv = netdev_lower_get_next_private(dev, &(iter)); \ 3828 priv; \ 3829 priv = netdev_lower_get_next_private(dev, &(iter))) 3830 3831 #define netdev_for_each_lower_private_rcu(dev, priv, iter) \ 3832 for (iter = &(dev)->adj_list.lower, \ 3833 priv = netdev_lower_get_next_private_rcu(dev, &(iter)); \ 3834 priv; \ 3835 priv = netdev_lower_get_next_private_rcu(dev, &(iter))) 3836 3837 void *netdev_lower_get_next(struct net_device *dev, 3838 struct list_head **iter); 3839 3840 #define netdev_for_each_lower_dev(dev, ldev, iter) \ 3841 for (iter = (dev)->adj_list.lower.next, \ 3842 ldev = netdev_lower_get_next(dev, &(iter)); \ 3843 ldev; \ 3844 ldev = netdev_lower_get_next(dev, &(iter))) 3845 3846 struct net_device *netdev_all_lower_get_next(struct net_device *dev, 3847 struct list_head **iter); 3848 struct net_device *netdev_all_lower_get_next_rcu(struct net_device *dev, 3849 struct list_head **iter); 3850 3851 int netdev_walk_all_lower_dev(struct net_device *dev, 3852 int (*fn)(struct net_device *lower_dev, 3853 void *data), 3854 void *data); 3855 int netdev_walk_all_lower_dev_rcu(struct net_device *dev, 3856 int (*fn)(struct net_device *lower_dev, 3857 void *data), 3858 void *data); 3859 3860 void *netdev_adjacent_get_private(struct list_head *adj_list); 3861 void *netdev_lower_get_first_private_rcu(struct net_device *dev); 3862 struct net_device *netdev_master_upper_dev_get(struct net_device *dev); 3863 struct net_device *netdev_master_upper_dev_get_rcu(struct net_device *dev); 3864 int netdev_upper_dev_link(struct net_device *dev, struct net_device *upper_dev); 3865 int netdev_master_upper_dev_link(struct net_device *dev, 3866 struct net_device *upper_dev, 3867 void *upper_priv, void *upper_info); 3868 void netdev_upper_dev_unlink(struct net_device *dev, 3869 struct net_device *upper_dev); 3870 void netdev_adjacent_rename_links(struct net_device *dev, char *oldname); 3871 void *netdev_lower_dev_get_private(struct net_device *dev, 3872 struct net_device *lower_dev); 3873 void netdev_lower_state_changed(struct net_device *lower_dev, 3874 void *lower_state_info); 3875 int netdev_default_l2upper_neigh_construct(struct net_device *dev, 3876 struct neighbour *n); 3877 void netdev_default_l2upper_neigh_destroy(struct net_device *dev, 3878 struct neighbour *n); 3879 3880 /* RSS keys are 40 or 52 bytes long */ 3881 #define NETDEV_RSS_KEY_LEN 52 3882 extern u8 netdev_rss_key[NETDEV_RSS_KEY_LEN] __read_mostly; 3883 void netdev_rss_key_fill(void *buffer, size_t len); 3884 3885 int dev_get_nest_level(struct net_device *dev); 3886 int skb_checksum_help(struct sk_buff *skb); 3887 struct sk_buff *__skb_gso_segment(struct sk_buff *skb, 3888 netdev_features_t features, bool tx_path); 3889 struct sk_buff *skb_mac_gso_segment(struct sk_buff *skb, 3890 netdev_features_t features); 3891 3892 struct netdev_bonding_info { 3893 ifslave slave; 3894 ifbond master; 3895 }; 3896 3897 struct netdev_notifier_bonding_info { 3898 struct netdev_notifier_info info; /* must be first */ 3899 struct netdev_bonding_info bonding_info; 3900 }; 3901 3902 void netdev_bonding_info_change(struct net_device *dev, 3903 struct netdev_bonding_info *bonding_info); 3904 3905 static inline 3906 struct sk_buff *skb_gso_segment(struct sk_buff *skb, netdev_features_t features) 3907 { 3908 return __skb_gso_segment(skb, features, true); 3909 } 3910 __be16 skb_network_protocol(struct sk_buff *skb, int *depth); 3911 3912 static inline bool can_checksum_protocol(netdev_features_t features, 3913 __be16 protocol) 3914 { 3915 if (protocol == htons(ETH_P_FCOE)) 3916 return !!(features & NETIF_F_FCOE_CRC); 3917 3918 /* Assume this is an IP checksum (not SCTP CRC) */ 3919 3920 if (features & NETIF_F_HW_CSUM) { 3921 /* Can checksum everything */ 3922 return true; 3923 } 3924 3925 switch (protocol) { 3926 case htons(ETH_P_IP): 3927 return !!(features & NETIF_F_IP_CSUM); 3928 case htons(ETH_P_IPV6): 3929 return !!(features & NETIF_F_IPV6_CSUM); 3930 default: 3931 return false; 3932 } 3933 } 3934 3935 #ifdef CONFIG_BUG 3936 void netdev_rx_csum_fault(struct net_device *dev); 3937 #else 3938 static inline void netdev_rx_csum_fault(struct net_device *dev) 3939 { 3940 } 3941 #endif 3942 /* rx skb timestamps */ 3943 void net_enable_timestamp(void); 3944 void net_disable_timestamp(void); 3945 3946 #ifdef CONFIG_PROC_FS 3947 int __init dev_proc_init(void); 3948 #else 3949 #define dev_proc_init() 0 3950 #endif 3951 3952 static inline netdev_tx_t __netdev_start_xmit(const struct net_device_ops *ops, 3953 struct sk_buff *skb, struct net_device *dev, 3954 bool more) 3955 { 3956 skb->xmit_more = more ? 1 : 0; 3957 return ops->ndo_start_xmit(skb, dev); 3958 } 3959 3960 static inline netdev_tx_t netdev_start_xmit(struct sk_buff *skb, struct net_device *dev, 3961 struct netdev_queue *txq, bool more) 3962 { 3963 const struct net_device_ops *ops = dev->netdev_ops; 3964 int rc; 3965 3966 rc = __netdev_start_xmit(ops, skb, dev, more); 3967 if (rc == NETDEV_TX_OK) 3968 txq_trans_update(txq); 3969 3970 return rc; 3971 } 3972 3973 int netdev_class_create_file_ns(struct class_attribute *class_attr, 3974 const void *ns); 3975 void netdev_class_remove_file_ns(struct class_attribute *class_attr, 3976 const void *ns); 3977 3978 static inline int netdev_class_create_file(struct class_attribute *class_attr) 3979 { 3980 return netdev_class_create_file_ns(class_attr, NULL); 3981 } 3982 3983 static inline void netdev_class_remove_file(struct class_attribute *class_attr) 3984 { 3985 netdev_class_remove_file_ns(class_attr, NULL); 3986 } 3987 3988 extern struct kobj_ns_type_operations net_ns_type_operations; 3989 3990 const char *netdev_drivername(const struct net_device *dev); 3991 3992 void linkwatch_run_queue(void); 3993 3994 static inline netdev_features_t netdev_intersect_features(netdev_features_t f1, 3995 netdev_features_t f2) 3996 { 3997 if ((f1 ^ f2) & NETIF_F_HW_CSUM) { 3998 if (f1 & NETIF_F_HW_CSUM) 3999 f1 |= (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM); 4000 else 4001 f2 |= (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM); 4002 } 4003 4004 return f1 & f2; 4005 } 4006 4007 static inline netdev_features_t netdev_get_wanted_features( 4008 struct net_device *dev) 4009 { 4010 return (dev->features & ~dev->hw_features) | dev->wanted_features; 4011 } 4012 netdev_features_t netdev_increment_features(netdev_features_t all, 4013 netdev_features_t one, netdev_features_t mask); 4014 4015 /* Allow TSO being used on stacked device : 4016 * Performing the GSO segmentation before last device 4017 * is a performance improvement. 4018 */ 4019 static inline netdev_features_t netdev_add_tso_features(netdev_features_t features, 4020 netdev_features_t mask) 4021 { 4022 return netdev_increment_features(features, NETIF_F_ALL_TSO, mask); 4023 } 4024 4025 int __netdev_update_features(struct net_device *dev); 4026 void netdev_update_features(struct net_device *dev); 4027 void netdev_change_features(struct net_device *dev); 4028 4029 void netif_stacked_transfer_operstate(const struct net_device *rootdev, 4030 struct net_device *dev); 4031 4032 netdev_features_t passthru_features_check(struct sk_buff *skb, 4033 struct net_device *dev, 4034 netdev_features_t features); 4035 netdev_features_t netif_skb_features(struct sk_buff *skb); 4036 4037 static inline bool net_gso_ok(netdev_features_t features, int gso_type) 4038 { 4039 netdev_features_t feature = (netdev_features_t)gso_type << NETIF_F_GSO_SHIFT; 4040 4041 /* check flags correspondence */ 4042 BUILD_BUG_ON(SKB_GSO_TCPV4 != (NETIF_F_TSO >> NETIF_F_GSO_SHIFT)); 4043 BUILD_BUG_ON(SKB_GSO_UDP != (NETIF_F_UFO >> NETIF_F_GSO_SHIFT)); 4044 BUILD_BUG_ON(SKB_GSO_DODGY != (NETIF_F_GSO_ROBUST >> NETIF_F_GSO_SHIFT)); 4045 BUILD_BUG_ON(SKB_GSO_TCP_ECN != (NETIF_F_TSO_ECN >> NETIF_F_GSO_SHIFT)); 4046 BUILD_BUG_ON(SKB_GSO_TCP_FIXEDID != (NETIF_F_TSO_MANGLEID >> NETIF_F_GSO_SHIFT)); 4047 BUILD_BUG_ON(SKB_GSO_TCPV6 != (NETIF_F_TSO6 >> NETIF_F_GSO_SHIFT)); 4048 BUILD_BUG_ON(SKB_GSO_FCOE != (NETIF_F_FSO >> NETIF_F_GSO_SHIFT)); 4049 BUILD_BUG_ON(SKB_GSO_GRE != (NETIF_F_GSO_GRE >> NETIF_F_GSO_SHIFT)); 4050 BUILD_BUG_ON(SKB_GSO_GRE_CSUM != (NETIF_F_GSO_GRE_CSUM >> NETIF_F_GSO_SHIFT)); 4051 BUILD_BUG_ON(SKB_GSO_IPXIP4 != (NETIF_F_GSO_IPXIP4 >> NETIF_F_GSO_SHIFT)); 4052 BUILD_BUG_ON(SKB_GSO_IPXIP6 != (NETIF_F_GSO_IPXIP6 >> NETIF_F_GSO_SHIFT)); 4053 BUILD_BUG_ON(SKB_GSO_UDP_TUNNEL != (NETIF_F_GSO_UDP_TUNNEL >> NETIF_F_GSO_SHIFT)); 4054 BUILD_BUG_ON(SKB_GSO_UDP_TUNNEL_CSUM != (NETIF_F_GSO_UDP_TUNNEL_CSUM >> NETIF_F_GSO_SHIFT)); 4055 BUILD_BUG_ON(SKB_GSO_PARTIAL != (NETIF_F_GSO_PARTIAL >> NETIF_F_GSO_SHIFT)); 4056 BUILD_BUG_ON(SKB_GSO_TUNNEL_REMCSUM != (NETIF_F_GSO_TUNNEL_REMCSUM >> NETIF_F_GSO_SHIFT)); 4057 BUILD_BUG_ON(SKB_GSO_SCTP != (NETIF_F_GSO_SCTP >> NETIF_F_GSO_SHIFT)); 4058 4059 return (features & feature) == feature; 4060 } 4061 4062 static inline bool skb_gso_ok(struct sk_buff *skb, netdev_features_t features) 4063 { 4064 return net_gso_ok(features, skb_shinfo(skb)->gso_type) && 4065 (!skb_has_frag_list(skb) || (features & NETIF_F_FRAGLIST)); 4066 } 4067 4068 static inline bool netif_needs_gso(struct sk_buff *skb, 4069 netdev_features_t features) 4070 { 4071 return skb_is_gso(skb) && (!skb_gso_ok(skb, features) || 4072 unlikely((skb->ip_summed != CHECKSUM_PARTIAL) && 4073 (skb->ip_summed != CHECKSUM_UNNECESSARY))); 4074 } 4075 4076 static inline void netif_set_gso_max_size(struct net_device *dev, 4077 unsigned int size) 4078 { 4079 dev->gso_max_size = size; 4080 } 4081 4082 static inline void skb_gso_error_unwind(struct sk_buff *skb, __be16 protocol, 4083 int pulled_hlen, u16 mac_offset, 4084 int mac_len) 4085 { 4086 skb->protocol = protocol; 4087 skb->encapsulation = 1; 4088 skb_push(skb, pulled_hlen); 4089 skb_reset_transport_header(skb); 4090 skb->mac_header = mac_offset; 4091 skb->network_header = skb->mac_header + mac_len; 4092 skb->mac_len = mac_len; 4093 } 4094 4095 static inline bool netif_is_macsec(const struct net_device *dev) 4096 { 4097 return dev->priv_flags & IFF_MACSEC; 4098 } 4099 4100 static inline bool netif_is_macvlan(const struct net_device *dev) 4101 { 4102 return dev->priv_flags & IFF_MACVLAN; 4103 } 4104 4105 static inline bool netif_is_macvlan_port(const struct net_device *dev) 4106 { 4107 return dev->priv_flags & IFF_MACVLAN_PORT; 4108 } 4109 4110 static inline bool netif_is_ipvlan(const struct net_device *dev) 4111 { 4112 return dev->priv_flags & IFF_IPVLAN_SLAVE; 4113 } 4114 4115 static inline bool netif_is_ipvlan_port(const struct net_device *dev) 4116 { 4117 return dev->priv_flags & IFF_IPVLAN_MASTER; 4118 } 4119 4120 static inline bool netif_is_bond_master(const struct net_device *dev) 4121 { 4122 return dev->flags & IFF_MASTER && dev->priv_flags & IFF_BONDING; 4123 } 4124 4125 static inline bool netif_is_bond_slave(const struct net_device *dev) 4126 { 4127 return dev->flags & IFF_SLAVE && dev->priv_flags & IFF_BONDING; 4128 } 4129 4130 static inline bool netif_supports_nofcs(struct net_device *dev) 4131 { 4132 return dev->priv_flags & IFF_SUPP_NOFCS; 4133 } 4134 4135 static inline bool netif_is_l3_master(const struct net_device *dev) 4136 { 4137 return dev->priv_flags & IFF_L3MDEV_MASTER; 4138 } 4139 4140 static inline bool netif_is_l3_slave(const struct net_device *dev) 4141 { 4142 return dev->priv_flags & IFF_L3MDEV_SLAVE; 4143 } 4144 4145 static inline bool netif_is_bridge_master(const struct net_device *dev) 4146 { 4147 return dev->priv_flags & IFF_EBRIDGE; 4148 } 4149 4150 static inline bool netif_is_bridge_port(const struct net_device *dev) 4151 { 4152 return dev->priv_flags & IFF_BRIDGE_PORT; 4153 } 4154 4155 static inline bool netif_is_ovs_master(const struct net_device *dev) 4156 { 4157 return dev->priv_flags & IFF_OPENVSWITCH; 4158 } 4159 4160 static inline bool netif_is_team_master(const struct net_device *dev) 4161 { 4162 return dev->priv_flags & IFF_TEAM; 4163 } 4164 4165 static inline bool netif_is_team_port(const struct net_device *dev) 4166 { 4167 return dev->priv_flags & IFF_TEAM_PORT; 4168 } 4169 4170 static inline bool netif_is_lag_master(const struct net_device *dev) 4171 { 4172 return netif_is_bond_master(dev) || netif_is_team_master(dev); 4173 } 4174 4175 static inline bool netif_is_lag_port(const struct net_device *dev) 4176 { 4177 return netif_is_bond_slave(dev) || netif_is_team_port(dev); 4178 } 4179 4180 static inline bool netif_is_rxfh_configured(const struct net_device *dev) 4181 { 4182 return dev->priv_flags & IFF_RXFH_CONFIGURED; 4183 } 4184 4185 /* This device needs to keep skb dst for qdisc enqueue or ndo_start_xmit() */ 4186 static inline void netif_keep_dst(struct net_device *dev) 4187 { 4188 dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_XMIT_DST_RELEASE_PERM); 4189 } 4190 4191 /* return true if dev can't cope with mtu frames that need vlan tag insertion */ 4192 static inline bool netif_reduces_vlan_mtu(struct net_device *dev) 4193 { 4194 /* TODO: reserve and use an additional IFF bit, if we get more users */ 4195 return dev->priv_flags & IFF_MACSEC; 4196 } 4197 4198 extern struct pernet_operations __net_initdata loopback_net_ops; 4199 4200 /* Logging, debugging and troubleshooting/diagnostic helpers. */ 4201 4202 /* netdev_printk helpers, similar to dev_printk */ 4203 4204 static inline const char *netdev_name(const struct net_device *dev) 4205 { 4206 if (!dev->name[0] || strchr(dev->name, '%')) 4207 return "(unnamed net_device)"; 4208 return dev->name; 4209 } 4210 4211 static inline const char *netdev_reg_state(const struct net_device *dev) 4212 { 4213 switch (dev->reg_state) { 4214 case NETREG_UNINITIALIZED: return " (uninitialized)"; 4215 case NETREG_REGISTERED: return ""; 4216 case NETREG_UNREGISTERING: return " (unregistering)"; 4217 case NETREG_UNREGISTERED: return " (unregistered)"; 4218 case NETREG_RELEASED: return " (released)"; 4219 case NETREG_DUMMY: return " (dummy)"; 4220 } 4221 4222 WARN_ONCE(1, "%s: unknown reg_state %d\n", dev->name, dev->reg_state); 4223 return " (unknown)"; 4224 } 4225 4226 __printf(3, 4) 4227 void netdev_printk(const char *level, const struct net_device *dev, 4228 const char *format, ...); 4229 __printf(2, 3) 4230 void netdev_emerg(const struct net_device *dev, const char *format, ...); 4231 __printf(2, 3) 4232 void netdev_alert(const struct net_device *dev, const char *format, ...); 4233 __printf(2, 3) 4234 void netdev_crit(const struct net_device *dev, const char *format, ...); 4235 __printf(2, 3) 4236 void netdev_err(const struct net_device *dev, const char *format, ...); 4237 __printf(2, 3) 4238 void netdev_warn(const struct net_device *dev, const char *format, ...); 4239 __printf(2, 3) 4240 void netdev_notice(const struct net_device *dev, const char *format, ...); 4241 __printf(2, 3) 4242 void netdev_info(const struct net_device *dev, const char *format, ...); 4243 4244 #define MODULE_ALIAS_NETDEV(device) \ 4245 MODULE_ALIAS("netdev-" device) 4246 4247 #if defined(CONFIG_DYNAMIC_DEBUG) 4248 #define netdev_dbg(__dev, format, args...) \ 4249 do { \ 4250 dynamic_netdev_dbg(__dev, format, ##args); \ 4251 } while (0) 4252 #elif defined(DEBUG) 4253 #define netdev_dbg(__dev, format, args...) \ 4254 netdev_printk(KERN_DEBUG, __dev, format, ##args) 4255 #else 4256 #define netdev_dbg(__dev, format, args...) \ 4257 ({ \ 4258 if (0) \ 4259 netdev_printk(KERN_DEBUG, __dev, format, ##args); \ 4260 }) 4261 #endif 4262 4263 #if defined(VERBOSE_DEBUG) 4264 #define netdev_vdbg netdev_dbg 4265 #else 4266 4267 #define netdev_vdbg(dev, format, args...) \ 4268 ({ \ 4269 if (0) \ 4270 netdev_printk(KERN_DEBUG, dev, format, ##args); \ 4271 0; \ 4272 }) 4273 #endif 4274 4275 /* 4276 * netdev_WARN() acts like dev_printk(), but with the key difference 4277 * of using a WARN/WARN_ON to get the message out, including the 4278 * file/line information and a backtrace. 4279 */ 4280 #define netdev_WARN(dev, format, args...) \ 4281 WARN(1, "netdevice: %s%s\n" format, netdev_name(dev), \ 4282 netdev_reg_state(dev), ##args) 4283 4284 /* netif printk helpers, similar to netdev_printk */ 4285 4286 #define netif_printk(priv, type, level, dev, fmt, args...) \ 4287 do { \ 4288 if (netif_msg_##type(priv)) \ 4289 netdev_printk(level, (dev), fmt, ##args); \ 4290 } while (0) 4291 4292 #define netif_level(level, priv, type, dev, fmt, args...) \ 4293 do { \ 4294 if (netif_msg_##type(priv)) \ 4295 netdev_##level(dev, fmt, ##args); \ 4296 } while (0) 4297 4298 #define netif_emerg(priv, type, dev, fmt, args...) \ 4299 netif_level(emerg, priv, type, dev, fmt, ##args) 4300 #define netif_alert(priv, type, dev, fmt, args...) \ 4301 netif_level(alert, priv, type, dev, fmt, ##args) 4302 #define netif_crit(priv, type, dev, fmt, args...) \ 4303 netif_level(crit, priv, type, dev, fmt, ##args) 4304 #define netif_err(priv, type, dev, fmt, args...) \ 4305 netif_level(err, priv, type, dev, fmt, ##args) 4306 #define netif_warn(priv, type, dev, fmt, args...) \ 4307 netif_level(warn, priv, type, dev, fmt, ##args) 4308 #define netif_notice(priv, type, dev, fmt, args...) \ 4309 netif_level(notice, priv, type, dev, fmt, ##args) 4310 #define netif_info(priv, type, dev, fmt, args...) \ 4311 netif_level(info, priv, type, dev, fmt, ##args) 4312 4313 #if defined(CONFIG_DYNAMIC_DEBUG) 4314 #define netif_dbg(priv, type, netdev, format, args...) \ 4315 do { \ 4316 if (netif_msg_##type(priv)) \ 4317 dynamic_netdev_dbg(netdev, format, ##args); \ 4318 } while (0) 4319 #elif defined(DEBUG) 4320 #define netif_dbg(priv, type, dev, format, args...) \ 4321 netif_printk(priv, type, KERN_DEBUG, dev, format, ##args) 4322 #else 4323 #define netif_dbg(priv, type, dev, format, args...) \ 4324 ({ \ 4325 if (0) \ 4326 netif_printk(priv, type, KERN_DEBUG, dev, format, ##args); \ 4327 0; \ 4328 }) 4329 #endif 4330 4331 #if defined(VERBOSE_DEBUG) 4332 #define netif_vdbg netif_dbg 4333 #else 4334 #define netif_vdbg(priv, type, dev, format, args...) \ 4335 ({ \ 4336 if (0) \ 4337 netif_printk(priv, type, KERN_DEBUG, dev, format, ##args); \ 4338 0; \ 4339 }) 4340 #endif 4341 4342 /* 4343 * The list of packet types we will receive (as opposed to discard) 4344 * and the routines to invoke. 4345 * 4346 * Why 16. Because with 16 the only overlap we get on a hash of the 4347 * low nibble of the protocol value is RARP/SNAP/X.25. 4348 * 4349 * NOTE: That is no longer true with the addition of VLAN tags. Not 4350 * sure which should go first, but I bet it won't make much 4351 * difference if we are running VLANs. The good news is that 4352 * this protocol won't be in the list unless compiled in, so 4353 * the average user (w/out VLANs) will not be adversely affected. 4354 * --BLG 4355 * 4356 * 0800 IP 4357 * 8100 802.1Q VLAN 4358 * 0001 802.3 4359 * 0002 AX.25 4360 * 0004 802.2 4361 * 8035 RARP 4362 * 0005 SNAP 4363 * 0805 X.25 4364 * 0806 ARP 4365 * 8137 IPX 4366 * 0009 Localtalk 4367 * 86DD IPv6 4368 */ 4369 #define PTYPE_HASH_SIZE (16) 4370 #define PTYPE_HASH_MASK (PTYPE_HASH_SIZE - 1) 4371 4372 #endif /* _LINUX_NETDEVICE_H */
1 /* include this file if the platform implements the dma_ DMA Mapping API 2 * and wants to provide the pci_ DMA Mapping API in terms of it */ 3 4 #ifndef _ASM_GENERIC_PCI_DMA_COMPAT_H 5 #define _ASM_GENERIC_PCI_DMA_COMPAT_H 6 7 #include <linux/dma-mapping.h> 8 9 /* This defines the direction arg to the DMA mapping routines. */ 10 #define PCI_DMA_BIDIRECTIONAL 0 11 #define PCI_DMA_TODEVICE 1 12 #define PCI_DMA_FROMDEVICE 2 13 #define PCI_DMA_NONE 3 14 15 static inline void * 16 pci_alloc_consistent(struct pci_dev *hwdev, size_t size, 17 dma_addr_t *dma_handle) 18 { 19 return dma_alloc_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, dma_handle, GFP_ATOMIC); 20 } 21 22 static inline void * 23 pci_zalloc_consistent(struct pci_dev *hwdev, size_t size, 24 dma_addr_t *dma_handle) 25 { 26 return dma_zalloc_coherent(hwdev == NULL ? NULL : &hwdev->dev, 27 size, dma_handle, GFP_ATOMIC); 28 } 29 30 static inline void 31 pci_free_consistent(struct pci_dev *hwdev, size_t size, 32 void *vaddr, dma_addr_t dma_handle) 33 { 34 dma_free_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, vaddr, dma_handle); 35 } 36 37 static inline dma_addr_t 38 pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size, int direction) 39 { 40 return dma_map_single(hwdev == NULL ? NULL : &hwdev->dev, ptr, size, (enum dma_data_direction)direction); 41 } 42 43 static inline void 44 pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr, 45 size_t size, int direction) 46 { 47 dma_unmap_single(hwdev == NULL ? NULL : &hwdev->dev, dma_addr, size, (enum dma_data_direction)direction); 48 } 49 50 static inline dma_addr_t 51 pci_map_page(struct pci_dev *hwdev, struct page *page, 52 unsigned long offset, size_t size, int direction) 53 { 54 return dma_map_page(hwdev == NULL ? NULL : &hwdev->dev, page, offset, size, (enum dma_data_direction)direction); 55 } 56 57 static inline void 58 pci_unmap_page(struct pci_dev *hwdev, dma_addr_t dma_address, 59 size_t size, int direction) 60 { 61 dma_unmap_page(hwdev == NULL ? NULL : &hwdev->dev, dma_address, size, (enum dma_data_direction)direction); 62 } 63 64 static inline int 65 pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg, 66 int nents, int direction) 67 { 68 return dma_map_sg(hwdev == NULL ? NULL : &hwdev->dev, sg, nents, (enum dma_data_direction)direction); 69 } 70 71 static inline void 72 pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg, 73 int nents, int direction) 74 { 75 dma_unmap_sg(hwdev == NULL ? NULL : &hwdev->dev, sg, nents, (enum dma_data_direction)direction); 76 } 77 78 static inline void 79 pci_dma_sync_single_for_cpu(struct pci_dev *hwdev, dma_addr_t dma_handle, 80 size_t size, int direction) 81 { 82 dma_sync_single_for_cpu(hwdev == NULL ? NULL : &hwdev->dev, dma_handle, size, (enum dma_data_direction)direction); 83 } 84 85 static inline void 86 pci_dma_sync_single_for_device(struct pci_dev *hwdev, dma_addr_t dma_handle, 87 size_t size, int direction) 88 { 89 dma_sync_single_for_device(hwdev == NULL ? NULL : &hwdev->dev, dma_handle, size, (enum dma_data_direction)direction); 90 } 91 92 static inline void 93 pci_dma_sync_sg_for_cpu(struct pci_dev *hwdev, struct scatterlist *sg, 94 int nelems, int direction) 95 { 96 dma_sync_sg_for_cpu(hwdev == NULL ? NULL : &hwdev->dev, sg, nelems, (enum dma_data_direction)direction); 97 } 98 99 static inline void 100 pci_dma_sync_sg_for_device(struct pci_dev *hwdev, struct scatterlist *sg, 101 int nelems, int direction) 102 { 103 dma_sync_sg_for_device(hwdev == NULL ? NULL : &hwdev->dev, sg, nelems, (enum dma_data_direction)direction); 104 } 105 106 static inline int 107 pci_dma_mapping_error(struct pci_dev *pdev, dma_addr_t dma_addr) 108 { 109 return dma_mapping_error(&pdev->dev, dma_addr); 110 } 111 112 #ifdef CONFIG_PCI 113 static inline int pci_set_dma_mask(struct pci_dev *dev, u64 mask) 114 { 115 return dma_set_mask(&dev->dev, mask); 116 } 117 118 static inline int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask) 119 { 120 return dma_set_coherent_mask(&dev->dev, mask); 121 } 122 123 static inline int pci_set_dma_max_seg_size(struct pci_dev *dev, 124 unsigned int size) 125 { 126 return dma_set_max_seg_size(&dev->dev, size); 127 } 128 129 static inline int pci_set_dma_seg_boundary(struct pci_dev *dev, 130 unsigned long mask) 131 { 132 return dma_set_seg_boundary(&dev->dev, mask); 133 } 134 #else 135 static inline int pci_set_dma_mask(struct pci_dev *dev, u64 mask) 136 { return -EIO; } 137 static inline int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask) 138 { return -EIO; } 139 static inline int pci_set_dma_max_seg_size(struct pci_dev *dev, 140 unsigned int size) 141 { return -EIO; } 142 static inline int pci_set_dma_seg_boundary(struct pci_dev *dev, 143 unsigned long mask) 144 { return -EIO; } 145 #endif 146 147 #endif
1 /* 2 * pci.h 3 * 4 * PCI defines and function prototypes 5 * Copyright 1994, Drew Eckhardt 6 * Copyright 1997--1999 Martin Mares <mj@ucw.cz> 7 * 8 * For more information, please consult the following manuals (look at 9 * http://www.pcisig.com/ for how to get them): 10 * 11 * PCI BIOS Specification 12 * PCI Local Bus Specification 13 * PCI to PCI Bridge Specification 14 * PCI System Design Guide 15 */ 16 #ifndef LINUX_PCI_H 17 #define LINUX_PCI_H 18 19 20 #include <linux/mod_devicetable.h> 21 22 #include <linux/types.h> 23 #include <linux/init.h> 24 #include <linux/ioport.h> 25 #include <linux/list.h> 26 #include <linux/compiler.h> 27 #include <linux/errno.h> 28 #include <linux/kobject.h> 29 #include <linux/atomic.h> 30 #include <linux/device.h> 31 #include <linux/io.h> 32 #include <linux/resource_ext.h> 33 #include <uapi/linux/pci.h> 34 35 #include <linux/pci_ids.h> 36 37 /* 38 * The PCI interface treats multi-function devices as independent 39 * devices. The slot/function address of each device is encoded 40 * in a single byte as follows: 41 * 42 * 7:3 = slot 43 * 2:0 = function 44 * 45 * PCI_DEVFN(), PCI_SLOT(), and PCI_FUNC() are defined in uapi/linux/pci.h. 46 * In the interest of not exposing interfaces to user-space unnecessarily, 47 * the following kernel-only defines are being added here. 48 */ 49 #define PCI_DEVID(bus, devfn) ((((u16)(bus)) << 8) | (devfn)) 50 /* return bus from PCI devid = ((u16)bus_number) << 8) | devfn */ 51 #define PCI_BUS_NUM(x) (((x) >> 8) & 0xff) 52 53 /* pci_slot represents a physical slot */ 54 struct pci_slot { 55 struct pci_bus *bus; /* The bus this slot is on */ 56 struct list_head list; /* node in list of slots on this bus */ 57 struct hotplug_slot *hotplug; /* Hotplug info (migrate over time) */ 58 unsigned char number; /* PCI_SLOT(pci_dev->devfn) */ 59 struct kobject kobj; 60 }; 61 62 static inline const char *pci_slot_name(const struct pci_slot *slot) 63 { 64 return kobject_name(&slot->kobj); 65 } 66 67 /* File state for mmap()s on /proc/bus/pci/X/Y */ 68 enum pci_mmap_state { 69 pci_mmap_io, 70 pci_mmap_mem 71 }; 72 73 /* 74 * For PCI devices, the region numbers are assigned this way: 75 */ 76 enum { 77 /* #0-5: standard PCI resources */ 78 PCI_STD_RESOURCES, 79 PCI_STD_RESOURCE_END = 5, 80 81 /* #6: expansion ROM resource */ 82 PCI_ROM_RESOURCE, 83 84 /* device specific resources */ 85 #ifdef CONFIG_PCI_IOV 86 PCI_IOV_RESOURCES, 87 PCI_IOV_RESOURCE_END = PCI_IOV_RESOURCES + PCI_SRIOV_NUM_BARS - 1, 88 #endif 89 90 /* resources assigned to buses behind the bridge */ 91 #define PCI_BRIDGE_RESOURCE_NUM 4 92 93 PCI_BRIDGE_RESOURCES, 94 PCI_BRIDGE_RESOURCE_END = PCI_BRIDGE_RESOURCES + 95 PCI_BRIDGE_RESOURCE_NUM - 1, 96 97 /* total resources associated with a PCI device */ 98 PCI_NUM_RESOURCES, 99 100 /* preserve this for compatibility */ 101 DEVICE_COUNT_RESOURCE = PCI_NUM_RESOURCES, 102 }; 103 104 /* 105 * pci_power_t values must match the bits in the Capabilities PME_Support 106 * and Control/Status PowerState fields in the Power Management capability. 107 */ 108 typedef int __bitwise pci_power_t; 109 110 #define PCI_D0 ((pci_power_t __force) 0) 111 #define PCI_D1 ((pci_power_t __force) 1) 112 #define PCI_D2 ((pci_power_t __force) 2) 113 #define PCI_D3hot ((pci_power_t __force) 3) 114 #define PCI_D3cold ((pci_power_t __force) 4) 115 #define PCI_UNKNOWN ((pci_power_t __force) 5) 116 #define PCI_POWER_ERROR ((pci_power_t __force) -1) 117 118 /* Remember to update this when the list above changes! */ 119 extern const char *pci_power_names[]; 120 121 static inline const char *pci_power_name(pci_power_t state) 122 { 123 return pci_power_names[1 + (__force int) state]; 124 } 125 126 #define PCI_PM_D2_DELAY 200 127 #define PCI_PM_D3_WAIT 10 128 #define PCI_PM_D3COLD_WAIT 100 129 #define PCI_PM_BUS_WAIT 50 130 131 /** The pci_channel state describes connectivity between the CPU and 132 * the pci device. If some PCI bus between here and the pci device 133 * has crashed or locked up, this info is reflected here. 134 */ 135 typedef unsigned int __bitwise pci_channel_state_t; 136 137 enum pci_channel_state { 138 /* I/O channel is in normal state */ 139 pci_channel_io_normal = (__force pci_channel_state_t) 1, 140 141 /* I/O to channel is blocked */ 142 pci_channel_io_frozen = (__force pci_channel_state_t) 2, 143 144 /* PCI card is dead */ 145 pci_channel_io_perm_failure = (__force pci_channel_state_t) 3, 146 }; 147 148 typedef unsigned int __bitwise pcie_reset_state_t; 149 150 enum pcie_reset_state { 151 /* Reset is NOT asserted (Use to deassert reset) */ 152 pcie_deassert_reset = (__force pcie_reset_state_t) 1, 153 154 /* Use #PERST to reset PCIe device */ 155 pcie_warm_reset = (__force pcie_reset_state_t) 2, 156 157 /* Use PCIe Hot Reset to reset device */ 158 pcie_hot_reset = (__force pcie_reset_state_t) 3 159 }; 160 161 typedef unsigned short __bitwise pci_dev_flags_t; 162 enum pci_dev_flags { 163 /* INTX_DISABLE in PCI_COMMAND register disables MSI 164 * generation too. 165 */ 166 PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = (__force pci_dev_flags_t) (1 << 0), 167 /* Device configuration is irrevocably lost if disabled into D3 */ 168 PCI_DEV_FLAGS_NO_D3 = (__force pci_dev_flags_t) (1 << 1), 169 /* Provide indication device is assigned by a Virtual Machine Manager */ 170 PCI_DEV_FLAGS_ASSIGNED = (__force pci_dev_flags_t) (1 << 2), 171 /* Flag for quirk use to store if quirk-specific ACS is enabled */ 172 PCI_DEV_FLAGS_ACS_ENABLED_QUIRK = (__force pci_dev_flags_t) (1 << 3), 173 /* Use a PCIe-to-PCI bridge alias even if !pci_is_pcie */ 174 PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = (__force pci_dev_flags_t) (1 << 5), 175 /* Do not use bus resets for device */ 176 PCI_DEV_FLAGS_NO_BUS_RESET = (__force pci_dev_flags_t) (1 << 6), 177 /* Do not use PM reset even if device advertises NoSoftRst- */ 178 PCI_DEV_FLAGS_NO_PM_RESET = (__force pci_dev_flags_t) (1 << 7), 179 /* Get VPD from function 0 VPD */ 180 PCI_DEV_FLAGS_VPD_REF_F0 = (__force pci_dev_flags_t) (1 << 8), 181 }; 182 183 enum pci_irq_reroute_variant { 184 INTEL_IRQ_REROUTE_VARIANT = 1, 185 MAX_IRQ_REROUTE_VARIANTS = 3 186 }; 187 188 typedef unsigned short __bitwise pci_bus_flags_t; 189 enum pci_bus_flags { 190 PCI_BUS_FLAGS_NO_MSI = (__force pci_bus_flags_t) 1, 191 PCI_BUS_FLAGS_NO_MMRBC = (__force pci_bus_flags_t) 2, 192 PCI_BUS_FLAGS_NO_AERSID = (__force pci_bus_flags_t) 4, 193 }; 194 195 /* These values come from the PCI Express Spec */ 196 enum pcie_link_width { 197 PCIE_LNK_WIDTH_RESRV = 0x00, 198 PCIE_LNK_X1 = 0x01, 199 PCIE_LNK_X2 = 0x02, 200 PCIE_LNK_X4 = 0x04, 201 PCIE_LNK_X8 = 0x08, 202 PCIE_LNK_X12 = 0x0C, 203 PCIE_LNK_X16 = 0x10, 204 PCIE_LNK_X32 = 0x20, 205 PCIE_LNK_WIDTH_UNKNOWN = 0xFF, 206 }; 207 208 /* Based on the PCI Hotplug Spec, but some values are made up by us */ 209 enum pci_bus_speed { 210 PCI_SPEED_33MHz = 0x00, 211 PCI_SPEED_66MHz = 0x01, 212 PCI_SPEED_66MHz_PCIX = 0x02, 213 PCI_SPEED_100MHz_PCIX = 0x03, 214 PCI_SPEED_133MHz_PCIX = 0x04, 215 PCI_SPEED_66MHz_PCIX_ECC = 0x05, 216 PCI_SPEED_100MHz_PCIX_ECC = 0x06, 217 PCI_SPEED_133MHz_PCIX_ECC = 0x07, 218 PCI_SPEED_66MHz_PCIX_266 = 0x09, 219 PCI_SPEED_100MHz_PCIX_266 = 0x0a, 220 PCI_SPEED_133MHz_PCIX_266 = 0x0b, 221 AGP_UNKNOWN = 0x0c, 222 AGP_1X = 0x0d, 223 AGP_2X = 0x0e, 224 AGP_4X = 0x0f, 225 AGP_8X = 0x10, 226 PCI_SPEED_66MHz_PCIX_533 = 0x11, 227 PCI_SPEED_100MHz_PCIX_533 = 0x12, 228 PCI_SPEED_133MHz_PCIX_533 = 0x13, 229 PCIE_SPEED_2_5GT = 0x14, 230 PCIE_SPEED_5_0GT = 0x15, 231 PCIE_SPEED_8_0GT = 0x16, 232 PCI_SPEED_UNKNOWN = 0xff, 233 }; 234 235 struct pci_cap_saved_data { 236 u16 cap_nr; 237 bool cap_extended; 238 unsigned int size; 239 u32 data[0]; 240 }; 241 242 struct pci_cap_saved_state { 243 struct hlist_node next; 244 struct pci_cap_saved_data cap; 245 }; 246 247 struct irq_affinity; 248 struct pcie_link_state; 249 struct pci_vpd; 250 struct pci_sriov; 251 struct pci_ats; 252 253 /* 254 * The pci_dev structure is used to describe PCI devices. 255 */ 256 struct pci_dev { 257 struct list_head bus_list; /* node in per-bus list */ 258 struct pci_bus *bus; /* bus this device is on */ 259 struct pci_bus *subordinate; /* bus this device bridges to */ 260 261 void *sysdata; /* hook for sys-specific extension */ 262 struct proc_dir_entry *procent; /* device entry in /proc/bus/pci */ 263 struct pci_slot *slot; /* Physical slot this device is in */ 264 265 unsigned int devfn; /* encoded device & function index */ 266 unsigned short vendor; 267 unsigned short device; 268 unsigned short subsystem_vendor; 269 unsigned short subsystem_device; 270 unsigned int class; /* 3 bytes: (base,sub,prog-if) */ 271 u8 revision; /* PCI revision, low byte of class word */ 272 u8 hdr_type; /* PCI header type (`multi' flag masked out) */ 273 #ifdef CONFIG_PCIEAER 274 u16 aer_cap; /* AER capability offset */ 275 #endif 276 u8 pcie_cap; /* PCIe capability offset */ 277 u8 msi_cap; /* MSI capability offset */ 278 u8 msix_cap; /* MSI-X capability offset */ 279 u8 pcie_mpss:3; /* PCIe Max Payload Size Supported */ 280 u8 rom_base_reg; /* which config register controls the ROM */ 281 u8 pin; /* which interrupt pin this device uses */ 282 u16 pcie_flags_reg; /* cached PCIe Capabilities Register */ 283 unsigned long *dma_alias_mask;/* mask of enabled devfn aliases */ 284 285 struct pci_driver *driver; /* which driver has allocated this device */ 286 u64 dma_mask; /* Mask of the bits of bus address this 287 device implements. Normally this is 288 0xffffffff. You only need to change 289 this if your device has broken DMA 290 or supports 64-bit transfers. */ 291 292 struct device_dma_parameters dma_parms; 293 294 pci_power_t current_state; /* Current operating state. In ACPI-speak, 295 this is D0-D3, D0 being fully functional, 296 and D3 being off. */ 297 u8 pm_cap; /* PM capability offset */ 298 unsigned int pme_support:5; /* Bitmask of states from which PME# 299 can be generated */ 300 unsigned int pme_interrupt:1; 301 unsigned int pme_poll:1; /* Poll device's PME status bit */ 302 unsigned int d1_support:1; /* Low power state D1 is supported */ 303 unsigned int d2_support:1; /* Low power state D2 is supported */ 304 unsigned int no_d1d2:1; /* D1 and D2 are forbidden */ 305 unsigned int no_d3cold:1; /* D3cold is forbidden */ 306 unsigned int bridge_d3:1; /* Allow D3 for bridge */ 307 unsigned int d3cold_allowed:1; /* D3cold is allowed by user */ 308 unsigned int mmio_always_on:1; /* disallow turning off io/mem 309 decoding during bar sizing */ 310 unsigned int wakeup_prepared:1; 311 unsigned int runtime_d3cold:1; /* whether go through runtime 312 D3cold, not set for devices 313 powered on/off by the 314 corresponding bridge */ 315 unsigned int ignore_hotplug:1; /* Ignore hotplug events */ 316 unsigned int hotplug_user_indicators:1; /* SlotCtl indicators 317 controlled exclusively by 318 user sysfs */ 319 unsigned int d3_delay; /* D3->D0 transition time in ms */ 320 unsigned int d3cold_delay; /* D3cold->D0 transition time in ms */ 321 322 #ifdef CONFIG_PCIEASPM 323 struct pcie_link_state *link_state; /* ASPM link state */ 324 #endif 325 326 pci_channel_state_t error_state; /* current connectivity state */ 327 struct device dev; /* Generic device interface */ 328 329 int cfg_size; /* Size of configuration space */ 330 331 /* 332 * Instead of touching interrupt line and base address registers 333 * directly, use the values stored here. They might be different! 334 */ 335 unsigned int irq; 336 struct resource resource[DEVICE_COUNT_RESOURCE]; /* I/O and memory regions + expansion ROMs */ 337 338 bool match_driver; /* Skip attaching driver */ 339 /* These fields are used by common fixups */ 340 unsigned int transparent:1; /* Subtractive decode PCI bridge */ 341 unsigned int multifunction:1;/* Part of multi-function device */ 342 /* keep track of device state */ 343 unsigned int is_added:1; 344 unsigned int is_busmaster:1; /* device is busmaster */ 345 unsigned int no_msi:1; /* device may not use msi */ 346 unsigned int no_64bit_msi:1; /* device may only use 32-bit MSIs */ 347 unsigned int block_cfg_access:1; /* config space access is blocked */ 348 unsigned int broken_parity_status:1; /* Device generates false positive parity */ 349 unsigned int irq_reroute_variant:2; /* device needs IRQ rerouting variant */ 350 unsigned int msi_enabled:1; 351 unsigned int msix_enabled:1; 352 unsigned int ari_enabled:1; /* ARI forwarding */ 353 unsigned int ats_enabled:1; /* Address Translation Service */ 354 unsigned int is_managed:1; 355 unsigned int needs_freset:1; /* Dev requires fundamental reset */ 356 unsigned int state_saved:1; 357 unsigned int is_physfn:1; 358 unsigned int is_virtfn:1; 359 unsigned int reset_fn:1; 360 unsigned int is_hotplug_bridge:1; 361 unsigned int __aer_firmware_first_valid:1; 362 unsigned int __aer_firmware_first:1; 363 unsigned int broken_intx_masking:1; 364 unsigned int io_window_1k:1; /* Intel P2P bridge 1K I/O windows */ 365 unsigned int irq_managed:1; 366 unsigned int has_secondary_link:1; 367 unsigned int non_compliant_bars:1; /* broken BARs; ignore them */ 368 pci_dev_flags_t dev_flags; 369 atomic_t enable_cnt; /* pci_enable_device has been called */ 370 371 u32 saved_config_space[16]; /* config space saved at suspend time */ 372 struct hlist_head saved_cap_space; 373 struct bin_attribute *rom_attr; /* attribute descriptor for sysfs ROM entry */ 374 int rom_attr_enabled; /* has display of the rom attribute been enabled? */ 375 struct bin_attribute *res_attr[DEVICE_COUNT_RESOURCE]; /* sysfs file for resources */ 376 struct bin_attribute *res_attr_wc[DEVICE_COUNT_RESOURCE]; /* sysfs file for WC mapping of resources */ 377 378 #ifdef CONFIG_PCIE_PTM 379 unsigned int ptm_root:1; 380 unsigned int ptm_enabled:1; 381 u8 ptm_granularity; 382 #endif 383 #ifdef CONFIG_PCI_MSI 384 const struct attribute_group **msi_irq_groups; 385 #endif 386 struct pci_vpd *vpd; 387 #ifdef CONFIG_PCI_ATS 388 union { 389 struct pci_sriov *sriov; /* SR-IOV capability related */ 390 struct pci_dev *physfn; /* the PF this VF is associated with */ 391 }; 392 u16 ats_cap; /* ATS Capability offset */ 393 u8 ats_stu; /* ATS Smallest Translation Unit */ 394 atomic_t ats_ref_cnt; /* number of VFs with ATS enabled */ 395 #endif 396 phys_addr_t rom; /* Physical address of ROM if it's not from the BAR */ 397 size_t romlen; /* Length of ROM if it's not from the BAR */ 398 char *driver_override; /* Driver name to force a match */ 399 }; 400 401 static inline struct pci_dev *pci_physfn(struct pci_dev *dev) 402 { 403 #ifdef CONFIG_PCI_IOV 404 if (dev->is_virtfn) 405 dev = dev->physfn; 406 #endif 407 return dev; 408 } 409 410 struct pci_dev *pci_alloc_dev(struct pci_bus *bus); 411 412 #define to_pci_dev(n) container_of(n, struct pci_dev, dev) 413 #define for_each_pci_dev(d) while ((d = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, d)) != NULL) 414 415 static inline int pci_channel_offline(struct pci_dev *pdev) 416 { 417 return (pdev->error_state != pci_channel_io_normal); 418 } 419 420 struct pci_host_bridge { 421 struct device dev; 422 struct pci_bus *bus; /* root bus */ 423 struct pci_ops *ops; 424 void *sysdata; 425 int busnr; 426 struct list_head windows; /* resource_entry */ 427 void (*release_fn)(struct pci_host_bridge *); 428 void *release_data; 429 struct msi_controller *msi; 430 unsigned int ignore_reset_delay:1; /* for entire hierarchy */ 431 /* Resource alignment requirements */ 432 resource_size_t (*align_resource)(struct pci_dev *dev, 433 const struct resource *res, 434 resource_size_t start, 435 resource_size_t size, 436 resource_size_t align); 437 unsigned long private[0] ____cacheline_aligned; 438 }; 439 440 #define to_pci_host_bridge(n) container_of(n, struct pci_host_bridge, dev) 441 442 static inline void *pci_host_bridge_priv(struct pci_host_bridge *bridge) 443 { 444 return (void *)bridge->private; 445 } 446 447 static inline struct pci_host_bridge *pci_host_bridge_from_priv(void *priv) 448 { 449 return container_of(priv, struct pci_host_bridge, private); 450 } 451 452 struct pci_host_bridge *pci_alloc_host_bridge(size_t priv); 453 int pci_register_host_bridge(struct pci_host_bridge *bridge); 454 struct pci_host_bridge *pci_find_host_bridge(struct pci_bus *bus); 455 456 void pci_set_host_bridge_release(struct pci_host_bridge *bridge, 457 void (*release_fn)(struct pci_host_bridge *), 458 void *release_data); 459 460 int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge); 461 462 /* 463 * The first PCI_BRIDGE_RESOURCE_NUM PCI bus resources (those that correspond 464 * to P2P or CardBus bridge windows) go in a table. Additional ones (for 465 * buses below host bridges or subtractive decode bridges) go in the list. 466 * Use pci_bus_for_each_resource() to iterate through all the resources. 467 */ 468 469 /* 470 * PCI_SUBTRACTIVE_DECODE means the bridge forwards the window implicitly 471 * and there's no way to program the bridge with the details of the window. 472 * This does not apply to ACPI _CRS windows, even with the _DEC subtractive- 473 * decode bit set, because they are explicit and can be programmed with _SRS. 474 */ 475 #define PCI_SUBTRACTIVE_DECODE 0x1 476 477 struct pci_bus_resource { 478 struct list_head list; 479 struct resource *res; 480 unsigned int flags; 481 }; 482 483 #define PCI_REGION_FLAG_MASK 0x0fU /* These bits of resource flags tell us the PCI region flags */ 484 485 struct pci_bus { 486 struct list_head node; /* node in list of buses */ 487 struct pci_bus *parent; /* parent bus this bridge is on */ 488 struct list_head children; /* list of child buses */ 489 struct list_head devices; /* list of devices on this bus */ 490 struct pci_dev *self; /* bridge device as seen by parent */ 491 struct list_head slots; /* list of slots on this bus; 492 protected by pci_slot_mutex */ 493 struct resource *resource[PCI_BRIDGE_RESOURCE_NUM]; 494 struct list_head resources; /* address space routed to this bus */ 495 struct resource busn_res; /* bus numbers routed to this bus */ 496 497 struct pci_ops *ops; /* configuration access functions */ 498 struct msi_controller *msi; /* MSI controller */ 499 void *sysdata; /* hook for sys-specific extension */ 500 struct proc_dir_entry *procdir; /* directory entry in /proc/bus/pci */ 501 502 unsigned char number; /* bus number */ 503 unsigned char primary; /* number of primary bridge */ 504 unsigned char max_bus_speed; /* enum pci_bus_speed */ 505 unsigned char cur_bus_speed; /* enum pci_bus_speed */ 506 #ifdef CONFIG_PCI_DOMAINS_GENERIC 507 int domain_nr; 508 #endif 509 510 char name[48]; 511 512 unsigned short bridge_ctl; /* manage NO_ISA/FBB/et al behaviors */ 513 pci_bus_flags_t bus_flags; /* inherited by child buses */ 514 struct device *bridge; 515 struct device dev; 516 struct bin_attribute *legacy_io; /* legacy I/O for this bus */ 517 struct bin_attribute *legacy_mem; /* legacy mem */ 518 unsigned int is_added:1; 519 }; 520 521 #define to_pci_bus(n) container_of(n, struct pci_bus, dev) 522 523 /* 524 * Returns true if the PCI bus is root (behind host-PCI bridge), 525 * false otherwise 526 * 527 * Some code assumes that "bus->self == NULL" means that bus is a root bus. 528 * This is incorrect because "virtual" buses added for SR-IOV (via 529 * virtfn_add_bus()) have "bus->self == NULL" but are not root buses. 530 */ 531 static inline bool pci_is_root_bus(struct pci_bus *pbus) 532 { 533 return !(pbus->parent); 534 } 535 536 /** 537 * pci_is_bridge - check if the PCI device is a bridge 538 * @dev: PCI device 539 * 540 * Return true if the PCI device is bridge whether it has subordinate 541 * or not. 542 */ 543 static inline bool pci_is_bridge(struct pci_dev *dev) 544 { 545 return dev->hdr_type == PCI_HEADER_TYPE_BRIDGE || 546 dev->hdr_type == PCI_HEADER_TYPE_CARDBUS; 547 } 548 549 static inline struct pci_dev *pci_upstream_bridge(struct pci_dev *dev) 550 { 551 dev = pci_physfn(dev); 552 if (pci_is_root_bus(dev->bus)) 553 return NULL; 554 555 return dev->bus->self; 556 } 557 558 struct device *pci_get_host_bridge_device(struct pci_dev *dev); 559 void pci_put_host_bridge_device(struct device *dev); 560 561 #ifdef CONFIG_PCI_MSI 562 static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev) 563 { 564 return pci_dev->msi_enabled || pci_dev->msix_enabled; 565 } 566 #else 567 static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev) { return false; } 568 #endif 569 570 /* 571 * Error values that may be returned by PCI functions. 572 */ 573 #define PCIBIOS_SUCCESSFUL 0x00 574 #define PCIBIOS_FUNC_NOT_SUPPORTED 0x81 575 #define PCIBIOS_BAD_VENDOR_ID 0x83 576 #define PCIBIOS_DEVICE_NOT_FOUND 0x86 577 #define PCIBIOS_BAD_REGISTER_NUMBER 0x87 578 #define PCIBIOS_SET_FAILED 0x88 579 #define PCIBIOS_BUFFER_TOO_SMALL 0x89 580 581 /* 582 * Translate above to generic errno for passing back through non-PCI code. 583 */ 584 static inline int pcibios_err_to_errno(int err) 585 { 586 if (err <= PCIBIOS_SUCCESSFUL) 587 return err; /* Assume already errno */ 588 589 switch (err) { 590 case PCIBIOS_FUNC_NOT_SUPPORTED: 591 return -ENOENT; 592 case PCIBIOS_BAD_VENDOR_ID: 593 return -ENOTTY; 594 case PCIBIOS_DEVICE_NOT_FOUND: 595 return -ENODEV; 596 case PCIBIOS_BAD_REGISTER_NUMBER: 597 return -EFAULT; 598 case PCIBIOS_SET_FAILED: 599 return -EIO; 600 case PCIBIOS_BUFFER_TOO_SMALL: 601 return -ENOSPC; 602 } 603 604 return -ERANGE; 605 } 606 607 /* Low-level architecture-dependent routines */ 608 609 struct pci_ops { 610 int (*add_bus)(struct pci_bus *bus); 611 void (*remove_bus)(struct pci_bus *bus); 612 void __iomem *(*map_bus)(struct pci_bus *bus, unsigned int devfn, int where); 613 int (*read)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *val); 614 int (*write)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 val); 615 }; 616 617 /* 618 * ACPI needs to be able to access PCI config space before we've done a 619 * PCI bus scan and created pci_bus structures. 620 */ 621 int raw_pci_read(unsigned int domain, unsigned int bus, unsigned int devfn, 622 int reg, int len, u32 *val); 623 int raw_pci_write(unsigned int domain, unsigned int bus, unsigned int devfn, 624 int reg, int len, u32 val); 625 626 #ifdef CONFIG_PCI_BUS_ADDR_T_64BIT 627 typedef u64 pci_bus_addr_t; 628 #else 629 typedef u32 pci_bus_addr_t; 630 #endif 631 632 struct pci_bus_region { 633 pci_bus_addr_t start; 634 pci_bus_addr_t end; 635 }; 636 637 struct pci_dynids { 638 spinlock_t lock; /* protects list, index */ 639 struct list_head list; /* for IDs added at runtime */ 640 }; 641 642 643 /* 644 * PCI Error Recovery System (PCI-ERS). If a PCI device driver provides 645 * a set of callbacks in struct pci_error_handlers, that device driver 646 * will be notified of PCI bus errors, and will be driven to recovery 647 * when an error occurs. 648 */ 649 650 typedef unsigned int __bitwise pci_ers_result_t; 651 652 enum pci_ers_result { 653 /* no result/none/not supported in device driver */ 654 PCI_ERS_RESULT_NONE = (__force pci_ers_result_t) 1, 655 656 /* Device driver can recover without slot reset */ 657 PCI_ERS_RESULT_CAN_RECOVER = (__force pci_ers_result_t) 2, 658 659 /* Device driver wants slot to be reset. */ 660 PCI_ERS_RESULT_NEED_RESET = (__force pci_ers_result_t) 3, 661 662 /* Device has completely failed, is unrecoverable */ 663 PCI_ERS_RESULT_DISCONNECT = (__force pci_ers_result_t) 4, 664 665 /* Device driver is fully recovered and operational */ 666 PCI_ERS_RESULT_RECOVERED = (__force pci_ers_result_t) 5, 667 668 /* No AER capabilities registered for the driver */ 669 PCI_ERS_RESULT_NO_AER_DRIVER = (__force pci_ers_result_t) 6, 670 }; 671 672 /* PCI bus error event callbacks */ 673 struct pci_error_handlers { 674 /* PCI bus error detected on this device */ 675 pci_ers_result_t (*error_detected)(struct pci_dev *dev, 676 enum pci_channel_state error); 677 678 /* MMIO has been re-enabled, but not DMA */ 679 pci_ers_result_t (*mmio_enabled)(struct pci_dev *dev); 680 681 /* PCI Express link has been reset */ 682 pci_ers_result_t (*link_reset)(struct pci_dev *dev); 683 684 /* PCI slot has been reset */ 685 pci_ers_result_t (*slot_reset)(struct pci_dev *dev); 686 687 /* PCI function reset prepare or completed */ 688 void (*reset_notify)(struct pci_dev *dev, bool prepare); 689 690 /* Device driver may resume normal operations */ 691 void (*resume)(struct pci_dev *dev); 692 }; 693 694 695 struct module; 696 struct pci_driver { 697 struct list_head node; 698 const char *name; 699 const struct pci_device_id *id_table; /* must be non-NULL for probe to be called */ 700 int (*probe) (struct pci_dev *dev, const struct pci_device_id *id); /* New device inserted */ 701 void (*remove) (struct pci_dev *dev); /* Device removed (NULL if not a hot-plug capable driver) */ 702 int (*suspend) (struct pci_dev *dev, pm_message_t state); /* Device suspended */ 703 int (*suspend_late) (struct pci_dev *dev, pm_message_t state); 704 int (*resume_early) (struct pci_dev *dev); 705 int (*resume) (struct pci_dev *dev); /* Device woken up */ 706 void (*shutdown) (struct pci_dev *dev); 707 int (*sriov_configure) (struct pci_dev *dev, int num_vfs); /* PF pdev */ 708 const struct pci_error_handlers *err_handler; 709 struct device_driver driver; 710 struct pci_dynids dynids; 711 }; 712 713 #define to_pci_driver(drv) container_of(drv, struct pci_driver, driver) 714 715 /** 716 * PCI_DEVICE - macro used to describe a specific pci device 717 * @vend: the 16 bit PCI Vendor ID 718 * @dev: the 16 bit PCI Device ID 719 * 720 * This macro is used to create a struct pci_device_id that matches a 721 * specific device. The subvendor and subdevice fields will be set to 722 * PCI_ANY_ID. 723 */ 724 #define PCI_DEVICE(vend,dev) \ 725 .vendor = (vend), .device = (dev), \ 726 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID 727 728 /** 729 * PCI_DEVICE_SUB - macro used to describe a specific pci device with subsystem 730 * @vend: the 16 bit PCI Vendor ID 731 * @dev: the 16 bit PCI Device ID 732 * @subvend: the 16 bit PCI Subvendor ID 733 * @subdev: the 16 bit PCI Subdevice ID 734 * 735 * This macro is used to create a struct pci_device_id that matches a 736 * specific device with subsystem information. 737 */ 738 #define PCI_DEVICE_SUB(vend, dev, subvend, subdev) \ 739 .vendor = (vend), .device = (dev), \ 740 .subvendor = (subvend), .subdevice = (subdev) 741 742 /** 743 * PCI_DEVICE_CLASS - macro used to describe a specific pci device class 744 * @dev_class: the class, subclass, prog-if triple for this device 745 * @dev_class_mask: the class mask for this device 746 * 747 * This macro is used to create a struct pci_device_id that matches a 748 * specific PCI class. The vendor, device, subvendor, and subdevice 749 * fields will be set to PCI_ANY_ID. 750 */ 751 #define PCI_DEVICE_CLASS(dev_class,dev_class_mask) \ 752 .class = (dev_class), .class_mask = (dev_class_mask), \ 753 .vendor = PCI_ANY_ID, .device = PCI_ANY_ID, \ 754 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID 755 756 /** 757 * PCI_VDEVICE - macro used to describe a specific pci device in short form 758 * @vend: the vendor name 759 * @dev: the 16 bit PCI Device ID 760 * 761 * This macro is used to create a struct pci_device_id that matches a 762 * specific PCI device. The subvendor, and subdevice fields will be set 763 * to PCI_ANY_ID. The macro allows the next field to follow as the device 764 * private data. 765 */ 766 767 #define PCI_VDEVICE(vend, dev) \ 768 .vendor = PCI_VENDOR_ID_##vend, .device = (dev), \ 769 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, 0, 0 770 771 enum { 772 PCI_REASSIGN_ALL_RSRC = 0x00000001, /* ignore firmware setup */ 773 PCI_REASSIGN_ALL_BUS = 0x00000002, /* reassign all bus numbers */ 774 PCI_PROBE_ONLY = 0x00000004, /* use existing setup */ 775 PCI_CAN_SKIP_ISA_ALIGN = 0x00000008, /* don't do ISA alignment */ 776 PCI_ENABLE_PROC_DOMAINS = 0x00000010, /* enable domains in /proc */ 777 PCI_COMPAT_DOMAIN_0 = 0x00000020, /* ... except domain 0 */ 778 PCI_SCAN_ALL_PCIE_DEVS = 0x00000040, /* scan all, not just dev 0 */ 779 }; 780 781 /* these external functions are only available when PCI support is enabled */ 782 #ifdef CONFIG_PCI 783 784 extern unsigned int pci_flags; 785 786 static inline void pci_set_flags(int flags) { pci_flags = flags; } 787 static inline void pci_add_flags(int flags) { pci_flags |= flags; } 788 static inline void pci_clear_flags(int flags) { pci_flags &= ~flags; } 789 static inline int pci_has_flag(int flag) { return pci_flags & flag; } 790 791 void pcie_bus_configure_settings(struct pci_bus *bus); 792 793 enum pcie_bus_config_types { 794 PCIE_BUS_TUNE_OFF, /* don't touch MPS at all */ 795 PCIE_BUS_DEFAULT, /* ensure MPS matches upstream bridge */ 796 PCIE_BUS_SAFE, /* use largest MPS boot-time devices support */ 797 PCIE_BUS_PERFORMANCE, /* use MPS and MRRS for best performance */ 798 PCIE_BUS_PEER2PEER, /* set MPS = 128 for all devices */ 799 }; 800 801 extern enum pcie_bus_config_types pcie_bus_config; 802 803 extern struct bus_type pci_bus_type; 804 805 /* Do NOT directly access these two variables, unless you are arch-specific PCI 806 * code, or PCI core code. */ 807 extern struct list_head pci_root_buses; /* list of all known PCI buses */ 808 /* Some device drivers need know if PCI is initiated */ 809 int no_pci_devices(void); 810 811 void pcibios_resource_survey_bus(struct pci_bus *bus); 812 void pcibios_bus_add_device(struct pci_dev *pdev); 813 void pcibios_add_bus(struct pci_bus *bus); 814 void pcibios_remove_bus(struct pci_bus *bus); 815 void pcibios_fixup_bus(struct pci_bus *); 816 int __must_check pcibios_enable_device(struct pci_dev *, int mask); 817 /* Architecture-specific versions may override this (weak) */ 818 char *pcibios_setup(char *str); 819 820 /* Used only when drivers/pci/setup.c is used */ 821 resource_size_t pcibios_align_resource(void *, const struct resource *, 822 resource_size_t, 823 resource_size_t); 824 void pcibios_update_irq(struct pci_dev *, int irq); 825 826 /* Weak but can be overriden by arch */ 827 void pci_fixup_cardbus(struct pci_bus *); 828 829 /* Generic PCI functions used internally */ 830 831 void pcibios_resource_to_bus(struct pci_bus *bus, struct pci_bus_region *region, 832 struct resource *res); 833 void pcibios_bus_to_resource(struct pci_bus *bus, struct resource *res, 834 struct pci_bus_region *region); 835 void pcibios_scan_specific_bus(int busn); 836 struct pci_bus *pci_find_bus(int domain, int busnr); 837 void pci_bus_add_devices(const struct pci_bus *bus); 838 struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata); 839 struct pci_bus *pci_create_root_bus(struct device *parent, int bus, 840 struct pci_ops *ops, void *sysdata, 841 struct list_head *resources); 842 int pci_bus_insert_busn_res(struct pci_bus *b, int bus, int busmax); 843 int pci_bus_update_busn_res_end(struct pci_bus *b, int busmax); 844 void pci_bus_release_busn_res(struct pci_bus *b); 845 struct pci_bus *pci_scan_root_bus_msi(struct device *parent, int bus, 846 struct pci_ops *ops, void *sysdata, 847 struct list_head *resources, 848 struct msi_controller *msi); 849 struct pci_bus *pci_scan_root_bus(struct device *parent, int bus, 850 struct pci_ops *ops, void *sysdata, 851 struct list_head *resources); 852 struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, 853 int busnr); 854 void pcie_update_link_speed(struct pci_bus *bus, u16 link_status); 855 struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr, 856 const char *name, 857 struct hotplug_slot *hotplug); 858 void pci_destroy_slot(struct pci_slot *slot); 859 #ifdef CONFIG_SYSFS 860 void pci_dev_assign_slot(struct pci_dev *dev); 861 #else 862 static inline void pci_dev_assign_slot(struct pci_dev *dev) { } 863 #endif 864 int pci_scan_slot(struct pci_bus *bus, int devfn); 865 struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn); 866 void pci_device_add(struct pci_dev *dev, struct pci_bus *bus); 867 unsigned int pci_scan_child_bus(struct pci_bus *bus); 868 void pci_bus_add_device(struct pci_dev *dev); 869 void pci_read_bridge_bases(struct pci_bus *child); 870 struct resource *pci_find_parent_resource(const struct pci_dev *dev, 871 struct resource *res); 872 struct pci_dev *pci_find_pcie_root_port(struct pci_dev *dev); 873 u8 pci_swizzle_interrupt_pin(const struct pci_dev *dev, u8 pin); 874 int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge); 875 u8 pci_common_swizzle(struct pci_dev *dev, u8 *pinp); 876 struct pci_dev *pci_dev_get(struct pci_dev *dev); 877 void pci_dev_put(struct pci_dev *dev); 878 void pci_remove_bus(struct pci_bus *b); 879 void pci_stop_and_remove_bus_device(struct pci_dev *dev); 880 void pci_stop_and_remove_bus_device_locked(struct pci_dev *dev); 881 void pci_stop_root_bus(struct pci_bus *bus); 882 void pci_remove_root_bus(struct pci_bus *bus); 883 void pci_setup_cardbus(struct pci_bus *bus); 884 void pcibios_setup_bridge(struct pci_bus *bus, unsigned long type); 885 void pci_sort_breadthfirst(void); 886 #define dev_is_pci(d) ((d)->bus == &pci_bus_type) 887 #define dev_is_pf(d) ((dev_is_pci(d) ? to_pci_dev(d)->is_physfn : false)) 888 #define dev_num_vf(d) ((dev_is_pci(d) ? pci_num_vf(to_pci_dev(d)) : 0)) 889 890 /* Generic PCI functions exported to card drivers */ 891 892 enum pci_lost_interrupt_reason { 893 PCI_LOST_IRQ_NO_INFORMATION = 0, 894 PCI_LOST_IRQ_DISABLE_MSI, 895 PCI_LOST_IRQ_DISABLE_MSIX, 896 PCI_LOST_IRQ_DISABLE_ACPI, 897 }; 898 enum pci_lost_interrupt_reason pci_lost_interrupt(struct pci_dev *dev); 899 int pci_find_capability(struct pci_dev *dev, int cap); 900 int pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap); 901 int pci_find_ext_capability(struct pci_dev *dev, int cap); 902 int pci_find_next_ext_capability(struct pci_dev *dev, int pos, int cap); 903 int pci_find_ht_capability(struct pci_dev *dev, int ht_cap); 904 int pci_find_next_ht_capability(struct pci_dev *dev, int pos, int ht_cap); 905 struct pci_bus *pci_find_next_bus(const struct pci_bus *from); 906 907 struct pci_dev *pci_get_device(unsigned int vendor, unsigned int device, 908 struct pci_dev *from); 909 struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device, 910 unsigned int ss_vendor, unsigned int ss_device, 911 struct pci_dev *from); 912 struct pci_dev *pci_get_slot(struct pci_bus *bus, unsigned int devfn); 913 struct pci_dev *pci_get_domain_bus_and_slot(int domain, unsigned int bus, 914 unsigned int devfn); 915 static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus, 916 unsigned int devfn) 917 { 918 return pci_get_domain_bus_and_slot(0, bus, devfn); 919 } 920 struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from); 921 int pci_dev_present(const struct pci_device_id *ids); 922 923 int pci_bus_read_config_byte(struct pci_bus *bus, unsigned int devfn, 924 int where, u8 *val); 925 int pci_bus_read_config_word(struct pci_bus *bus, unsigned int devfn, 926 int where, u16 *val); 927 int pci_bus_read_config_dword(struct pci_bus *bus, unsigned int devfn, 928 int where, u32 *val); 929 int pci_bus_write_config_byte(struct pci_bus *bus, unsigned int devfn, 930 int where, u8 val); 931 int pci_bus_write_config_word(struct pci_bus *bus, unsigned int devfn, 932 int where, u16 val); 933 int pci_bus_write_config_dword(struct pci_bus *bus, unsigned int devfn, 934 int where, u32 val); 935 936 int pci_generic_config_read(struct pci_bus *bus, unsigned int devfn, 937 int where, int size, u32 *val); 938 int pci_generic_config_write(struct pci_bus *bus, unsigned int devfn, 939 int where, int size, u32 val); 940 int pci_generic_config_read32(struct pci_bus *bus, unsigned int devfn, 941 int where, int size, u32 *val); 942 int pci_generic_config_write32(struct pci_bus *bus, unsigned int devfn, 943 int where, int size, u32 val); 944 945 struct pci_ops *pci_bus_set_ops(struct pci_bus *bus, struct pci_ops *ops); 946 947 static inline int pci_read_config_byte(const struct pci_dev *dev, int where, u8 *val) 948 { 949 return pci_bus_read_config_byte(dev->bus, dev->devfn, where, val); 950 } 951 static inline int pci_read_config_word(const struct pci_dev *dev, int where, u16 *val) 952 { 953 return pci_bus_read_config_word(dev->bus, dev->devfn, where, val); 954 } 955 static inline int pci_read_config_dword(const struct pci_dev *dev, int where, 956 u32 *val) 957 { 958 return pci_bus_read_config_dword(dev->bus, dev->devfn, where, val); 959 } 960 static inline int pci_write_config_byte(const struct pci_dev *dev, int where, u8 val) 961 { 962 return pci_bus_write_config_byte(dev->bus, dev->devfn, where, val); 963 } 964 static inline int pci_write_config_word(const struct pci_dev *dev, int where, u16 val) 965 { 966 return pci_bus_write_config_word(dev->bus, dev->devfn, where, val); 967 } 968 static inline int pci_write_config_dword(const struct pci_dev *dev, int where, 969 u32 val) 970 { 971 return pci_bus_write_config_dword(dev->bus, dev->devfn, where, val); 972 } 973 974 int pcie_capability_read_word(struct pci_dev *dev, int pos, u16 *val); 975 int pcie_capability_read_dword(struct pci_dev *dev, int pos, u32 *val); 976 int pcie_capability_write_word(struct pci_dev *dev, int pos, u16 val); 977 int pcie_capability_write_dword(struct pci_dev *dev, int pos, u32 val); 978 int pcie_capability_clear_and_set_word(struct pci_dev *dev, int pos, 979 u16 clear, u16 set); 980 int pcie_capability_clear_and_set_dword(struct pci_dev *dev, int pos, 981 u32 clear, u32 set); 982 983 static inline int pcie_capability_set_word(struct pci_dev *dev, int pos, 984 u16 set) 985 { 986 return pcie_capability_clear_and_set_word(dev, pos, 0, set); 987 } 988 989 static inline int pcie_capability_set_dword(struct pci_dev *dev, int pos, 990 u32 set) 991 { 992 return pcie_capability_clear_and_set_dword(dev, pos, 0, set); 993 } 994 995 static inline int pcie_capability_clear_word(struct pci_dev *dev, int pos, 996 u16 clear) 997 { 998 return pcie_capability_clear_and_set_word(dev, pos, clear, 0); 999 } 1000 1001 static inline int pcie_capability_clear_dword(struct pci_dev *dev, int pos, 1002 u32 clear) 1003 { 1004 return pcie_capability_clear_and_set_dword(dev, pos, clear, 0); 1005 } 1006 1007 /* user-space driven config access */ 1008 int pci_user_read_config_byte(struct pci_dev *dev, int where, u8 *val); 1009 int pci_user_read_config_word(struct pci_dev *dev, int where, u16 *val); 1010 int pci_user_read_config_dword(struct pci_dev *dev, int where, u32 *val); 1011 int pci_user_write_config_byte(struct pci_dev *dev, int where, u8 val); 1012 int pci_user_write_config_word(struct pci_dev *dev, int where, u16 val); 1013 int pci_user_write_config_dword(struct pci_dev *dev, int where, u32 val); 1014 1015 int __must_check pci_enable_device(struct pci_dev *dev); 1016 int __must_check pci_enable_device_io(struct pci_dev *dev); 1017 int __must_check pci_enable_device_mem(struct pci_dev *dev); 1018 int __must_check pci_reenable_device(struct pci_dev *); 1019 int __must_check pcim_enable_device(struct pci_dev *pdev); 1020 void pcim_pin_device(struct pci_dev *pdev); 1021 1022 static inline int pci_is_enabled(struct pci_dev *pdev) 1023 { 1024 return (atomic_read(&pdev->enable_cnt) > 0); 1025 } 1026 1027 static inline int pci_is_managed(struct pci_dev *pdev) 1028 { 1029 return pdev->is_managed; 1030 } 1031 1032 void pci_disable_device(struct pci_dev *dev); 1033 1034 extern unsigned int pcibios_max_latency; 1035 void pci_set_master(struct pci_dev *dev); 1036 void pci_clear_master(struct pci_dev *dev); 1037 1038 int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state); 1039 int pci_set_cacheline_size(struct pci_dev *dev); 1040 #define HAVE_PCI_SET_MWI 1041 int __must_check pci_set_mwi(struct pci_dev *dev); 1042 int pci_try_set_mwi(struct pci_dev *dev); 1043 void pci_clear_mwi(struct pci_dev *dev); 1044 void pci_intx(struct pci_dev *dev, int enable); 1045 bool pci_intx_mask_supported(struct pci_dev *dev); 1046 bool pci_check_and_mask_intx(struct pci_dev *dev); 1047 bool pci_check_and_unmask_intx(struct pci_dev *dev); 1048 int pci_wait_for_pending(struct pci_dev *dev, int pos, u16 mask); 1049 int pci_wait_for_pending_transaction(struct pci_dev *dev); 1050 int pcix_get_max_mmrbc(struct pci_dev *dev); 1051 int pcix_get_mmrbc(struct pci_dev *dev); 1052 int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc); 1053 int pcie_get_readrq(struct pci_dev *dev); 1054 int pcie_set_readrq(struct pci_dev *dev, int rq); 1055 int pcie_get_mps(struct pci_dev *dev); 1056 int pcie_set_mps(struct pci_dev *dev, int mps); 1057 int pcie_get_minimum_link(struct pci_dev *dev, enum pci_bus_speed *speed, 1058 enum pcie_link_width *width); 1059 int __pci_reset_function(struct pci_dev *dev); 1060 int __pci_reset_function_locked(struct pci_dev *dev); 1061 int pci_reset_function(struct pci_dev *dev); 1062 int pci_try_reset_function(struct pci_dev *dev); 1063 int pci_probe_reset_slot(struct pci_slot *slot); 1064 int pci_reset_slot(struct pci_slot *slot); 1065 int pci_try_reset_slot(struct pci_slot *slot); 1066 int pci_probe_reset_bus(struct pci_bus *bus); 1067 int pci_reset_bus(struct pci_bus *bus); 1068 int pci_try_reset_bus(struct pci_bus *bus); 1069 void pci_reset_secondary_bus(struct pci_dev *dev); 1070 void pcibios_reset_secondary_bus(struct pci_dev *dev); 1071 void pci_reset_bridge_secondary_bus(struct pci_dev *dev); 1072 void pci_update_resource(struct pci_dev *dev, int resno); 1073 int __must_check pci_assign_resource(struct pci_dev *dev, int i); 1074 int __must_check pci_reassign_resource(struct pci_dev *dev, int i, resource_size_t add_size, resource_size_t align); 1075 int pci_select_bars(struct pci_dev *dev, unsigned long flags); 1076 bool pci_device_is_present(struct pci_dev *pdev); 1077 void pci_ignore_hotplug(struct pci_dev *dev); 1078 1079 /* ROM control related routines */ 1080 int pci_enable_rom(struct pci_dev *pdev); 1081 void pci_disable_rom(struct pci_dev *pdev); 1082 void __iomem __must_check *pci_map_rom(struct pci_dev *pdev, size_t *size); 1083 void pci_unmap_rom(struct pci_dev *pdev, void __iomem *rom); 1084 size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size); 1085 void __iomem __must_check *pci_platform_rom(struct pci_dev *pdev, size_t *size); 1086 1087 /* Power management related routines */ 1088 int pci_save_state(struct pci_dev *dev); 1089 void pci_restore_state(struct pci_dev *dev); 1090 struct pci_saved_state *pci_store_saved_state(struct pci_dev *dev); 1091 int pci_load_saved_state(struct pci_dev *dev, 1092 struct pci_saved_state *state); 1093 int pci_load_and_free_saved_state(struct pci_dev *dev, 1094 struct pci_saved_state **state); 1095 struct pci_cap_saved_state *pci_find_saved_cap(struct pci_dev *dev, char cap); 1096 struct pci_cap_saved_state *pci_find_saved_ext_cap(struct pci_dev *dev, 1097 u16 cap); 1098 int pci_add_cap_save_buffer(struct pci_dev *dev, char cap, unsigned int size); 1099 int pci_add_ext_cap_save_buffer(struct pci_dev *dev, 1100 u16 cap, unsigned int size); 1101 int __pci_complete_power_transition(struct pci_dev *dev, pci_power_t state); 1102 int pci_set_power_state(struct pci_dev *dev, pci_power_t state); 1103 pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state); 1104 bool pci_pme_capable(struct pci_dev *dev, pci_power_t state); 1105 void pci_pme_active(struct pci_dev *dev, bool enable); 1106 int __pci_enable_wake(struct pci_dev *dev, pci_power_t state, 1107 bool runtime, bool enable); 1108 int pci_wake_from_d3(struct pci_dev *dev, bool enable); 1109 int pci_prepare_to_sleep(struct pci_dev *dev); 1110 int pci_back_from_sleep(struct pci_dev *dev); 1111 bool pci_dev_run_wake(struct pci_dev *dev); 1112 bool pci_check_pme_status(struct pci_dev *dev); 1113 void pci_pme_wakeup_bus(struct pci_bus *bus); 1114 void pci_d3cold_enable(struct pci_dev *dev); 1115 void pci_d3cold_disable(struct pci_dev *dev); 1116 1117 static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state, 1118 bool enable) 1119 { 1120 return __pci_enable_wake(dev, state, false, enable); 1121 } 1122 1123 /* PCI Virtual Channel */ 1124 int pci_save_vc_state(struct pci_dev *dev); 1125 void pci_restore_vc_state(struct pci_dev *dev); 1126 void pci_allocate_vc_save_buffers(struct pci_dev *dev); 1127 1128 /* For use by arch with custom probe code */ 1129 void set_pcie_port_type(struct pci_dev *pdev); 1130 void set_pcie_hotplug_bridge(struct pci_dev *pdev); 1131 1132 /* Functions for PCI Hotplug drivers to use */ 1133 int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap); 1134 unsigned int pci_rescan_bus_bridge_resize(struct pci_dev *bridge); 1135 unsigned int pci_rescan_bus(struct pci_bus *bus); 1136 void pci_lock_rescan_remove(void); 1137 void pci_unlock_rescan_remove(void); 1138 1139 /* Vital product data routines */ 1140 ssize_t pci_read_vpd(struct pci_dev *dev, loff_t pos, size_t count, void *buf); 1141 ssize_t pci_write_vpd(struct pci_dev *dev, loff_t pos, size_t count, const void *buf); 1142 int pci_set_vpd_size(struct pci_dev *dev, size_t len); 1143 1144 /* Helper functions for low-level code (drivers/pci/setup-[bus,res].c) */ 1145 resource_size_t pcibios_retrieve_fw_addr(struct pci_dev *dev, int idx); 1146 void pci_bus_assign_resources(const struct pci_bus *bus); 1147 void pci_bus_claim_resources(struct pci_bus *bus); 1148 void pci_bus_size_bridges(struct pci_bus *bus); 1149 int pci_claim_resource(struct pci_dev *, int); 1150 int pci_claim_bridge_resource(struct pci_dev *bridge, int i); 1151 void pci_assign_unassigned_resources(void); 1152 void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge); 1153 void pci_assign_unassigned_bus_resources(struct pci_bus *bus); 1154 void pci_assign_unassigned_root_bus_resources(struct pci_bus *bus); 1155 void pdev_enable_device(struct pci_dev *); 1156 int pci_enable_resources(struct pci_dev *, int mask); 1157 void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *), 1158 int (*)(const struct pci_dev *, u8, u8)); 1159 struct resource *pci_find_resource(struct pci_dev *dev, struct resource *res); 1160 #define HAVE_PCI_REQ_REGIONS 2 1161 int __must_check pci_request_regions(struct pci_dev *, const char *); 1162 int __must_check pci_request_regions_exclusive(struct pci_dev *, const char *); 1163 void pci_release_regions(struct pci_dev *); 1164 int __must_check pci_request_region(struct pci_dev *, int, const char *); 1165 int __must_check pci_request_region_exclusive(struct pci_dev *, int, const char *); 1166 void pci_release_region(struct pci_dev *, int); 1167 int pci_request_selected_regions(struct pci_dev *, int, const char *); 1168 int pci_request_selected_regions_exclusive(struct pci_dev *, int, const char *); 1169 void pci_release_selected_regions(struct pci_dev *, int); 1170 1171 /* drivers/pci/bus.c */ 1172 struct pci_bus *pci_bus_get(struct pci_bus *bus); 1173 void pci_bus_put(struct pci_bus *bus); 1174 void pci_add_resource(struct list_head *resources, struct resource *res); 1175 void pci_add_resource_offset(struct list_head *resources, struct resource *res, 1176 resource_size_t offset); 1177 void pci_free_resource_list(struct list_head *resources); 1178 void pci_bus_add_resource(struct pci_bus *bus, struct resource *res, 1179 unsigned int flags); 1180 struct resource *pci_bus_resource_n(const struct pci_bus *bus, int n); 1181 void pci_bus_remove_resources(struct pci_bus *bus); 1182 int devm_request_pci_bus_resources(struct device *dev, 1183 struct list_head *resources); 1184 1185 #define pci_bus_for_each_resource(bus, res, i) \ 1186 for (i = 0; \ 1187 (res = pci_bus_resource_n(bus, i)) || i < PCI_BRIDGE_RESOURCE_NUM; \ 1188 i++) 1189 1190 int __must_check pci_bus_alloc_resource(struct pci_bus *bus, 1191 struct resource *res, resource_size_t size, 1192 resource_size_t align, resource_size_t min, 1193 unsigned long type_mask, 1194 resource_size_t (*alignf)(void *, 1195 const struct resource *, 1196 resource_size_t, 1197 resource_size_t), 1198 void *alignf_data); 1199 1200 1201 int pci_register_io_range(phys_addr_t addr, resource_size_t size); 1202 unsigned long pci_address_to_pio(phys_addr_t addr); 1203 phys_addr_t pci_pio_to_address(unsigned long pio); 1204 int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr); 1205 void pci_unmap_iospace(struct resource *res); 1206 1207 static inline pci_bus_addr_t pci_bus_address(struct pci_dev *pdev, int bar) 1208 { 1209 struct pci_bus_region region; 1210 1211 pcibios_resource_to_bus(pdev->bus, &region, &pdev->resource[bar]); 1212 return region.start; 1213 } 1214 1215 /* Proper probing supporting hot-pluggable devices */ 1216 int __must_check __pci_register_driver(struct pci_driver *, struct module *, 1217 const char *mod_name); 1218 1219 /* 1220 * pci_register_driver must be a macro so that KBUILD_MODNAME can be expanded 1221 */ 1222 #define pci_register_driver(driver) \ 1223 __pci_register_driver(driver, THIS_MODULE, KBUILD_MODNAME) 1224 1225 void pci_unregister_driver(struct pci_driver *dev); 1226 1227 /** 1228 * module_pci_driver() - Helper macro for registering a PCI driver 1229 * @__pci_driver: pci_driver struct 1230 * 1231 * Helper macro for PCI drivers which do not do anything special in module 1232 * init/exit. This eliminates a lot of boilerplate. Each module may only 1233 * use this macro once, and calling it replaces module_init() and module_exit() 1234 */ 1235 #define module_pci_driver(__pci_driver) \ 1236 module_driver(__pci_driver, pci_register_driver, \ 1237 pci_unregister_driver) 1238 1239 /** 1240 * builtin_pci_driver() - Helper macro for registering a PCI driver 1241 * @__pci_driver: pci_driver struct 1242 * 1243 * Helper macro for PCI drivers which do not do anything special in their 1244 * init code. This eliminates a lot of boilerplate. Each driver may only 1245 * use this macro once, and calling it replaces device_initcall(...) 1246 */ 1247 #define builtin_pci_driver(__pci_driver) \ 1248 builtin_driver(__pci_driver, pci_register_driver) 1249 1250 struct pci_driver *pci_dev_driver(const struct pci_dev *dev); 1251 int pci_add_dynid(struct pci_driver *drv, 1252 unsigned int vendor, unsigned int device, 1253 unsigned int subvendor, unsigned int subdevice, 1254 unsigned int class, unsigned int class_mask, 1255 unsigned long driver_data); 1256 const struct pci_device_id *pci_match_id(const struct pci_device_id *ids, 1257 struct pci_dev *dev); 1258 int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, 1259 int pass); 1260 1261 void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *), 1262 void *userdata); 1263 int pci_cfg_space_size(struct pci_dev *dev); 1264 unsigned char pci_bus_max_busnr(struct pci_bus *bus); 1265 void pci_setup_bridge(struct pci_bus *bus); 1266 resource_size_t pcibios_window_alignment(struct pci_bus *bus, 1267 unsigned long type); 1268 resource_size_t pcibios_iov_resource_alignment(struct pci_dev *dev, int resno); 1269 1270 #define PCI_VGA_STATE_CHANGE_BRIDGE (1 << 0) 1271 #define PCI_VGA_STATE_CHANGE_DECODES (1 << 1) 1272 1273 int pci_set_vga_state(struct pci_dev *pdev, bool decode, 1274 unsigned int command_bits, u32 flags); 1275 1276 #define PCI_IRQ_LEGACY (1 << 0) /* allow legacy interrupts */ 1277 #define PCI_IRQ_MSI (1 << 1) /* allow MSI interrupts */ 1278 #define PCI_IRQ_MSIX (1 << 2) /* allow MSI-X interrupts */ 1279 #define PCI_IRQ_AFFINITY (1 << 3) /* auto-assign affinity */ 1280 #define PCI_IRQ_ALL_TYPES \ 1281 (PCI_IRQ_LEGACY | PCI_IRQ_MSI | PCI_IRQ_MSIX) 1282 1283 /* kmem_cache style wrapper around pci_alloc_consistent() */ 1284 1285 #include <linux/pci-dma.h> 1286 #include <linux/dmapool.h> 1287 1288 #define pci_pool dma_pool 1289 #define pci_pool_create(name, pdev, size, align, allocation) \ 1290 dma_pool_create(name, &pdev->dev, size, align, allocation) 1291 #define pci_pool_destroy(pool) dma_pool_destroy(pool) 1292 #define pci_pool_alloc(pool, flags, handle) dma_pool_alloc(pool, flags, handle) 1293 #define pci_pool_zalloc(pool, flags, handle) \ 1294 dma_pool_zalloc(pool, flags, handle) 1295 #define pci_pool_free(pool, vaddr, addr) dma_pool_free(pool, vaddr, addr) 1296 1297 struct msix_entry { 1298 u32 vector; /* kernel uses to write allocated vector */ 1299 u16 entry; /* driver uses to specify entry, OS writes */ 1300 }; 1301 1302 #ifdef CONFIG_PCI_MSI 1303 int pci_msi_vec_count(struct pci_dev *dev); 1304 void pci_msi_shutdown(struct pci_dev *dev); 1305 void pci_disable_msi(struct pci_dev *dev); 1306 int pci_msix_vec_count(struct pci_dev *dev); 1307 int pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, int nvec); 1308 void pci_msix_shutdown(struct pci_dev *dev); 1309 void pci_disable_msix(struct pci_dev *dev); 1310 void pci_restore_msi_state(struct pci_dev *dev); 1311 int pci_msi_enabled(void); 1312 int pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec); 1313 static inline int pci_enable_msi_exact(struct pci_dev *dev, int nvec) 1314 { 1315 int rc = pci_enable_msi_range(dev, nvec, nvec); 1316 if (rc < 0) 1317 return rc; 1318 return 0; 1319 } 1320 int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries, 1321 int minvec, int maxvec); 1322 static inline int pci_enable_msix_exact(struct pci_dev *dev, 1323 struct msix_entry *entries, int nvec) 1324 { 1325 int rc = pci_enable_msix_range(dev, entries, nvec, nvec); 1326 if (rc < 0) 1327 return rc; 1328 return 0; 1329 } 1330 int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs, 1331 unsigned int max_vecs, unsigned int flags, 1332 const struct irq_affinity *affd); 1333 1334 void pci_free_irq_vectors(struct pci_dev *dev); 1335 int pci_irq_vector(struct pci_dev *dev, unsigned int nr); 1336 const struct cpumask *pci_irq_get_affinity(struct pci_dev *pdev, int vec); 1337 1338 #else 1339 static inline int pci_msi_vec_count(struct pci_dev *dev) { return -ENOSYS; } 1340 static inline void pci_msi_shutdown(struct pci_dev *dev) { } 1341 static inline void pci_disable_msi(struct pci_dev *dev) { } 1342 static inline int pci_msix_vec_count(struct pci_dev *dev) { return -ENOSYS; } 1343 static inline int pci_enable_msix(struct pci_dev *dev, 1344 struct msix_entry *entries, int nvec) 1345 { return -ENOSYS; } 1346 static inline void pci_msix_shutdown(struct pci_dev *dev) { } 1347 static inline void pci_disable_msix(struct pci_dev *dev) { } 1348 static inline void pci_restore_msi_state(struct pci_dev *dev) { } 1349 static inline int pci_msi_enabled(void) { return 0; } 1350 static inline int pci_enable_msi_range(struct pci_dev *dev, int minvec, 1351 int maxvec) 1352 { return -ENOSYS; } 1353 static inline int pci_enable_msi_exact(struct pci_dev *dev, int nvec) 1354 { return -ENOSYS; } 1355 static inline int pci_enable_msix_range(struct pci_dev *dev, 1356 struct msix_entry *entries, int minvec, int maxvec) 1357 { return -ENOSYS; } 1358 static inline int pci_enable_msix_exact(struct pci_dev *dev, 1359 struct msix_entry *entries, int nvec) 1360 { return -ENOSYS; } 1361 1362 static inline int 1363 pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs, 1364 unsigned int max_vecs, unsigned int flags, 1365 const struct irq_affinity *aff_desc) 1366 { 1367 if (min_vecs > 1) 1368 return -EINVAL; 1369 return 1; 1370 } 1371 1372 static inline void pci_free_irq_vectors(struct pci_dev *dev) 1373 { 1374 } 1375 1376 static inline int pci_irq_vector(struct pci_dev *dev, unsigned int nr) 1377 { 1378 if (WARN_ON_ONCE(nr > 0)) 1379 return -EINVAL; 1380 return dev->irq; 1381 } 1382 static inline const struct cpumask *pci_irq_get_affinity(struct pci_dev *pdev, 1383 int vec) 1384 { 1385 return cpu_possible_mask; 1386 } 1387 #endif 1388 1389 static inline int 1390 pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs, 1391 unsigned int max_vecs, unsigned int flags) 1392 { 1393 return pci_alloc_irq_vectors_affinity(dev, min_vecs, max_vecs, flags, 1394 NULL); 1395 } 1396 1397 #ifdef CONFIG_PCIEPORTBUS 1398 extern bool pcie_ports_disabled; 1399 extern bool pcie_ports_auto; 1400 #else 1401 #define pcie_ports_disabled true 1402 #define pcie_ports_auto false 1403 #endif 1404 1405 #ifdef CONFIG_PCIEASPM 1406 bool pcie_aspm_support_enabled(void); 1407 #else 1408 static inline bool pcie_aspm_support_enabled(void) { return false; } 1409 #endif 1410 1411 #ifdef CONFIG_PCIEAER 1412 void pci_no_aer(void); 1413 bool pci_aer_available(void); 1414 int pci_aer_init(struct pci_dev *dev); 1415 #else 1416 static inline void pci_no_aer(void) { } 1417 static inline bool pci_aer_available(void) { return false; } 1418 static inline int pci_aer_init(struct pci_dev *d) { return -ENODEV; } 1419 #endif 1420 1421 #ifdef CONFIG_PCIE_ECRC 1422 void pcie_set_ecrc_checking(struct pci_dev *dev); 1423 void pcie_ecrc_get_policy(char *str); 1424 #else 1425 static inline void pcie_set_ecrc_checking(struct pci_dev *dev) { } 1426 static inline void pcie_ecrc_get_policy(char *str) { } 1427 #endif 1428 1429 #define pci_enable_msi(pdev) pci_enable_msi_exact(pdev, 1) 1430 1431 #ifdef CONFIG_HT_IRQ 1432 /* The functions a driver should call */ 1433 int ht_create_irq(struct pci_dev *dev, int idx); 1434 void ht_destroy_irq(unsigned int irq); 1435 #endif /* CONFIG_HT_IRQ */ 1436 1437 #ifdef CONFIG_PCI_ATS 1438 /* Address Translation Service */ 1439 void pci_ats_init(struct pci_dev *dev); 1440 int pci_enable_ats(struct pci_dev *dev, int ps); 1441 void pci_disable_ats(struct pci_dev *dev); 1442 int pci_ats_queue_depth(struct pci_dev *dev); 1443 #else 1444 static inline void pci_ats_init(struct pci_dev *d) { } 1445 static inline int pci_enable_ats(struct pci_dev *d, int ps) { return -ENODEV; } 1446 static inline void pci_disable_ats(struct pci_dev *d) { } 1447 static inline int pci_ats_queue_depth(struct pci_dev *d) { return -ENODEV; } 1448 #endif 1449 1450 #ifdef CONFIG_PCIE_PTM 1451 int pci_enable_ptm(struct pci_dev *dev, u8 *granularity); 1452 #else 1453 static inline int pci_enable_ptm(struct pci_dev *dev, u8 *granularity) 1454 { return -EINVAL; } 1455 #endif 1456 1457 void pci_cfg_access_lock(struct pci_dev *dev); 1458 bool pci_cfg_access_trylock(struct pci_dev *dev); 1459 void pci_cfg_access_unlock(struct pci_dev *dev); 1460 1461 /* 1462 * PCI domain support. Sometimes called PCI segment (eg by ACPI), 1463 * a PCI domain is defined to be a set of PCI buses which share 1464 * configuration space. 1465 */ 1466 #ifdef CONFIG_PCI_DOMAINS 1467 extern int pci_domains_supported; 1468 int pci_get_new_domain_nr(void); 1469 #else 1470 enum { pci_domains_supported = 0 }; 1471 static inline int pci_domain_nr(struct pci_bus *bus) { return 0; } 1472 static inline int pci_proc_domain(struct pci_bus *bus) { return 0; } 1473 static inline int pci_get_new_domain_nr(void) { return -ENOSYS; } 1474 #endif /* CONFIG_PCI_DOMAINS */ 1475 1476 /* 1477 * Generic implementation for PCI domain support. If your 1478 * architecture does not need custom management of PCI 1479 * domains then this implementation will be used 1480 */ 1481 #ifdef CONFIG_PCI_DOMAINS_GENERIC 1482 static inline int pci_domain_nr(struct pci_bus *bus) 1483 { 1484 return bus->domain_nr; 1485 } 1486 #ifdef CONFIG_ACPI 1487 int acpi_pci_bus_find_domain_nr(struct pci_bus *bus); 1488 #else 1489 static inline int acpi_pci_bus_find_domain_nr(struct pci_bus *bus) 1490 { return 0; } 1491 #endif 1492 int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent); 1493 #endif 1494 1495 /* some architectures require additional setup to direct VGA traffic */ 1496 typedef int (*arch_set_vga_state_t)(struct pci_dev *pdev, bool decode, 1497 unsigned int command_bits, u32 flags); 1498 void pci_register_set_vga_state(arch_set_vga_state_t func); 1499 1500 static inline int 1501 pci_request_io_regions(struct pci_dev *pdev, const char *name) 1502 { 1503 return pci_request_selected_regions(pdev, 1504 pci_select_bars(pdev, IORESOURCE_IO), name); 1505 } 1506 1507 static inline void 1508 pci_release_io_regions(struct pci_dev *pdev) 1509 { 1510 return pci_release_selected_regions(pdev, 1511 pci_select_bars(pdev, IORESOURCE_IO)); 1512 } 1513 1514 static inline int 1515 pci_request_mem_regions(struct pci_dev *pdev, const char *name) 1516 { 1517 return pci_request_selected_regions(pdev, 1518 pci_select_bars(pdev, IORESOURCE_MEM), name); 1519 } 1520 1521 static inline void 1522 pci_release_mem_regions(struct pci_dev *pdev) 1523 { 1524 return pci_release_selected_regions(pdev, 1525 pci_select_bars(pdev, IORESOURCE_MEM)); 1526 } 1527 1528 #else /* CONFIG_PCI is not enabled */ 1529 1530 static inline void pci_set_flags(int flags) { } 1531 static inline void pci_add_flags(int flags) { } 1532 static inline void pci_clear_flags(int flags) { } 1533 static inline int pci_has_flag(int flag) { return 0; } 1534 1535 /* 1536 * If the system does not have PCI, clearly these return errors. Define 1537 * these as simple inline functions to avoid hair in drivers. 1538 */ 1539 1540 #define _PCI_NOP(o, s, t) \ 1541 static inline int pci_##o##_config_##s(struct pci_dev *dev, \ 1542 int where, t val) \ 1543 { return PCIBIOS_FUNC_NOT_SUPPORTED; } 1544 1545 #define _PCI_NOP_ALL(o, x) _PCI_NOP(o, byte, u8 x) \ 1546 _PCI_NOP(o, word, u16 x) \ 1547 _PCI_NOP(o, dword, u32 x) 1548 _PCI_NOP_ALL(read, *) 1549 _PCI_NOP_ALL(write,) 1550 1551 static inline struct pci_dev *pci_get_device(unsigned int vendor, 1552 unsigned int device, 1553 struct pci_dev *from) 1554 { return NULL; } 1555 1556 static inline struct pci_dev *pci_get_subsys(unsigned int vendor, 1557 unsigned int device, 1558 unsigned int ss_vendor, 1559 unsigned int ss_device, 1560 struct pci_dev *from) 1561 { return NULL; } 1562 1563 static inline struct pci_dev *pci_get_class(unsigned int class, 1564 struct pci_dev *from) 1565 { return NULL; } 1566 1567 #define pci_dev_present(ids) (0) 1568 #define no_pci_devices() (1) 1569 #define pci_dev_put(dev) do { } while (0) 1570 1571 static inline void pci_set_master(struct pci_dev *dev) { } 1572 static inline int pci_enable_device(struct pci_dev *dev) { return -EIO; } 1573 static inline void pci_disable_device(struct pci_dev *dev) { } 1574 static inline int pci_assign_resource(struct pci_dev *dev, int i) 1575 { return -EBUSY; } 1576 static inline int __pci_register_driver(struct pci_driver *drv, 1577 struct module *owner) 1578 { return 0; } 1579 static inline int pci_register_driver(struct pci_driver *drv) 1580 { return 0; } 1581 static inline void pci_unregister_driver(struct pci_driver *drv) { } 1582 static inline int pci_find_capability(struct pci_dev *dev, int cap) 1583 { return 0; } 1584 static inline int pci_find_next_capability(struct pci_dev *dev, u8 post, 1585 int cap) 1586 { return 0; } 1587 static inline int pci_find_ext_capability(struct pci_dev *dev, int cap) 1588 { return 0; } 1589 1590 /* Power management related routines */ 1591 static inline int pci_save_state(struct pci_dev *dev) { return 0; } 1592 static inline void pci_restore_state(struct pci_dev *dev) { } 1593 static inline int pci_set_power_state(struct pci_dev *dev, pci_power_t state) 1594 { return 0; } 1595 static inline int pci_wake_from_d3(struct pci_dev *dev, bool enable) 1596 { return 0; } 1597 static inline pci_power_t pci_choose_state(struct pci_dev *dev, 1598 pm_message_t state) 1599 { return PCI_D0; } 1600 static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state, 1601 int enable) 1602 { return 0; } 1603 1604 static inline struct resource *pci_find_resource(struct pci_dev *dev, 1605 struct resource *res) 1606 { return NULL; } 1607 static inline int pci_request_regions(struct pci_dev *dev, const char *res_name) 1608 { return -EIO; } 1609 static inline void pci_release_regions(struct pci_dev *dev) { } 1610 1611 static inline unsigned long pci_address_to_pio(phys_addr_t addr) { return -1; } 1612 1613 static inline void pci_block_cfg_access(struct pci_dev *dev) { } 1614 static inline int pci_block_cfg_access_in_atomic(struct pci_dev *dev) 1615 { return 0; } 1616 static inline void pci_unblock_cfg_access(struct pci_dev *dev) { } 1617 1618 static inline struct pci_bus *pci_find_next_bus(const struct pci_bus *from) 1619 { return NULL; } 1620 static inline struct pci_dev *pci_get_slot(struct pci_bus *bus, 1621 unsigned int devfn) 1622 { return NULL; } 1623 static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus, 1624 unsigned int devfn) 1625 { return NULL; } 1626 1627 static inline int pci_domain_nr(struct pci_bus *bus) { return 0; } 1628 static inline struct pci_dev *pci_dev_get(struct pci_dev *dev) { return NULL; } 1629 static inline int pci_get_new_domain_nr(void) { return -ENOSYS; } 1630 1631 #define dev_is_pci(d) (false) 1632 #define dev_is_pf(d) (false) 1633 #define dev_num_vf(d) (0) 1634 #endif /* CONFIG_PCI */ 1635 1636 /* Include architecture-dependent settings and functions */ 1637 1638 #include <asm/pci.h> 1639 1640 #ifndef pci_root_bus_fwnode 1641 #define pci_root_bus_fwnode(bus) NULL 1642 #endif 1643 1644 /* these helpers provide future and backwards compatibility 1645 * for accessing popular PCI BAR info */ 1646 #define pci_resource_start(dev, bar) ((dev)->resource[(bar)].start) 1647 #define pci_resource_end(dev, bar) ((dev)->resource[(bar)].end) 1648 #define pci_resource_flags(dev, bar) ((dev)->resource[(bar)].flags) 1649 #define pci_resource_len(dev,bar) \ 1650 ((pci_resource_start((dev), (bar)) == 0 && \ 1651 pci_resource_end((dev), (bar)) == \ 1652 pci_resource_start((dev), (bar))) ? 0 : \ 1653 \ 1654 (pci_resource_end((dev), (bar)) - \ 1655 pci_resource_start((dev), (bar)) + 1)) 1656 1657 /* Similar to the helpers above, these manipulate per-pci_dev 1658 * driver-specific data. They are really just a wrapper around 1659 * the generic device structure functions of these calls. 1660 */ 1661 static inline void *pci_get_drvdata(struct pci_dev *pdev) 1662 { 1663 return dev_get_drvdata(&pdev->dev); 1664 } 1665 1666 static inline void pci_set_drvdata(struct pci_dev *pdev, void *data) 1667 { 1668 dev_set_drvdata(&pdev->dev, data); 1669 } 1670 1671 /* If you want to know what to call your pci_dev, ask this function. 1672 * Again, it's a wrapper around the generic device. 1673 */ 1674 static inline const char *pci_name(const struct pci_dev *pdev) 1675 { 1676 return dev_name(&pdev->dev); 1677 } 1678 1679 1680 /* Some archs don't want to expose struct resource to userland as-is 1681 * in sysfs and /proc 1682 */ 1683 #ifdef HAVE_ARCH_PCI_RESOURCE_TO_USER 1684 void pci_resource_to_user(const struct pci_dev *dev, int bar, 1685 const struct resource *rsrc, 1686 resource_size_t *start, resource_size_t *end); 1687 #else 1688 static inline void pci_resource_to_user(const struct pci_dev *dev, int bar, 1689 const struct resource *rsrc, resource_size_t *start, 1690 resource_size_t *end) 1691 { 1692 *start = rsrc->start; 1693 *end = rsrc->end; 1694 } 1695 #endif /* HAVE_ARCH_PCI_RESOURCE_TO_USER */ 1696 1697 1698 /* 1699 * The world is not perfect and supplies us with broken PCI devices. 1700 * For at least a part of these bugs we need a work-around, so both 1701 * generic (drivers/pci/quirks.c) and per-architecture code can define 1702 * fixup hooks to be called for particular buggy devices. 1703 */ 1704 1705 struct pci_fixup { 1706 u16 vendor; /* You can use PCI_ANY_ID here of course */ 1707 u16 device; /* You can use PCI_ANY_ID here of course */ 1708 u32 class; /* You can use PCI_ANY_ID here too */ 1709 unsigned int class_shift; /* should be 0, 8, 16 */ 1710 void (*hook)(struct pci_dev *dev); 1711 }; 1712 1713 enum pci_fixup_pass { 1714 pci_fixup_early, /* Before probing BARs */ 1715 pci_fixup_header, /* After reading configuration header */ 1716 pci_fixup_final, /* Final phase of device fixups */ 1717 pci_fixup_enable, /* pci_enable_device() time */ 1718 pci_fixup_resume, /* pci_device_resume() */ 1719 pci_fixup_suspend, /* pci_device_suspend() */ 1720 pci_fixup_resume_early, /* pci_device_resume_early() */ 1721 pci_fixup_suspend_late, /* pci_device_suspend_late() */ 1722 }; 1723 1724 /* Anonymous variables would be nice... */ 1725 #define DECLARE_PCI_FIXUP_SECTION(section, name, vendor, device, class, \ 1726 class_shift, hook) \ 1727 static const struct pci_fixup __PASTE(__pci_fixup_##name,__LINE__) __used \ 1728 __attribute__((__section__(#section), aligned((sizeof(void *))))) \ 1729 = { vendor, device, class, class_shift, hook }; 1730 1731 #define DECLARE_PCI_FIXUP_CLASS_EARLY(vendor, device, class, \ 1732 class_shift, hook) \ 1733 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_early, \ 1734 hook, vendor, device, class, class_shift, hook) 1735 #define DECLARE_PCI_FIXUP_CLASS_HEADER(vendor, device, class, \ 1736 class_shift, hook) \ 1737 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_header, \ 1738 hook, vendor, device, class, class_shift, hook) 1739 #define DECLARE_PCI_FIXUP_CLASS_FINAL(vendor, device, class, \ 1740 class_shift, hook) \ 1741 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_final, \ 1742 hook, vendor, device, class, class_shift, hook) 1743 #define DECLARE_PCI_FIXUP_CLASS_ENABLE(vendor, device, class, \ 1744 class_shift, hook) \ 1745 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_enable, \ 1746 hook, vendor, device, class, class_shift, hook) 1747 #define DECLARE_PCI_FIXUP_CLASS_RESUME(vendor, device, class, \ 1748 class_shift, hook) \ 1749 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume, \ 1750 resume##hook, vendor, device, class, \ 1751 class_shift, hook) 1752 #define DECLARE_PCI_FIXUP_CLASS_RESUME_EARLY(vendor, device, class, \ 1753 class_shift, hook) \ 1754 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume_early, \ 1755 resume_early##hook, vendor, device, \ 1756 class, class_shift, hook) 1757 #define DECLARE_PCI_FIXUP_CLASS_SUSPEND(vendor, device, class, \ 1758 class_shift, hook) \ 1759 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend, \ 1760 suspend##hook, vendor, device, class, \ 1761 class_shift, hook) 1762 #define DECLARE_PCI_FIXUP_CLASS_SUSPEND_LATE(vendor, device, class, \ 1763 class_shift, hook) \ 1764 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend_late, \ 1765 suspend_late##hook, vendor, device, \ 1766 class, class_shift, hook) 1767 1768 #define DECLARE_PCI_FIXUP_EARLY(vendor, device, hook) \ 1769 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_early, \ 1770 hook, vendor, device, PCI_ANY_ID, 0, hook) 1771 #define DECLARE_PCI_FIXUP_HEADER(vendor, device, hook) \ 1772 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_header, \ 1773 hook, vendor, device, PCI_ANY_ID, 0, hook) 1774 #define DECLARE_PCI_FIXUP_FINAL(vendor, device, hook) \ 1775 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_final, \ 1776 hook, vendor, device, PCI_ANY_ID, 0, hook) 1777 #define DECLARE_PCI_FIXUP_ENABLE(vendor, device, hook) \ 1778 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_enable, \ 1779 hook, vendor, device, PCI_ANY_ID, 0, hook) 1780 #define DECLARE_PCI_FIXUP_RESUME(vendor, device, hook) \ 1781 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume, \ 1782 resume##hook, vendor, device, \ 1783 PCI_ANY_ID, 0, hook) 1784 #define DECLARE_PCI_FIXUP_RESUME_EARLY(vendor, device, hook) \ 1785 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume_early, \ 1786 resume_early##hook, vendor, device, \ 1787 PCI_ANY_ID, 0, hook) 1788 #define DECLARE_PCI_FIXUP_SUSPEND(vendor, device, hook) \ 1789 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend, \ 1790 suspend##hook, vendor, device, \ 1791 PCI_ANY_ID, 0, hook) 1792 #define DECLARE_PCI_FIXUP_SUSPEND_LATE(vendor, device, hook) \ 1793 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend_late, \ 1794 suspend_late##hook, vendor, device, \ 1795 PCI_ANY_ID, 0, hook) 1796 1797 #ifdef CONFIG_PCI_QUIRKS 1798 void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev); 1799 int pci_dev_specific_acs_enabled(struct pci_dev *dev, u16 acs_flags); 1800 int pci_dev_specific_enable_acs(struct pci_dev *dev); 1801 #else 1802 static inline void pci_fixup_device(enum pci_fixup_pass pass, 1803 struct pci_dev *dev) { } 1804 static inline int pci_dev_specific_acs_enabled(struct pci_dev *dev, 1805 u16 acs_flags) 1806 { 1807 return -ENOTTY; 1808 } 1809 static inline int pci_dev_specific_enable_acs(struct pci_dev *dev) 1810 { 1811 return -ENOTTY; 1812 } 1813 #endif 1814 1815 void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen); 1816 void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr); 1817 void __iomem * const *pcim_iomap_table(struct pci_dev *pdev); 1818 int pcim_iomap_regions(struct pci_dev *pdev, int mask, const char *name); 1819 int pcim_iomap_regions_request_all(struct pci_dev *pdev, int mask, 1820 const char *name); 1821 void pcim_iounmap_regions(struct pci_dev *pdev, int mask); 1822 1823 extern int pci_pci_problems; 1824 #define PCIPCI_FAIL 1 /* No PCI PCI DMA */ 1825 #define PCIPCI_TRITON 2 1826 #define PCIPCI_NATOMA 4 1827 #define PCIPCI_VIAETBF 8 1828 #define PCIPCI_VSFX 16 1829 #define PCIPCI_ALIMAGIK 32 /* Need low latency setting */ 1830 #define PCIAGP_FAIL 64 /* No PCI to AGP DMA */ 1831 1832 extern unsigned long pci_cardbus_io_size; 1833 extern unsigned long pci_cardbus_mem_size; 1834 extern u8 pci_dfl_cache_line_size; 1835 extern u8 pci_cache_line_size; 1836 1837 extern unsigned long pci_hotplug_io_size; 1838 extern unsigned long pci_hotplug_mem_size; 1839 extern unsigned long pci_hotplug_bus_size; 1840 1841 /* Architecture-specific versions may override these (weak) */ 1842 void pcibios_disable_device(struct pci_dev *dev); 1843 void pcibios_set_master(struct pci_dev *dev); 1844 int pcibios_set_pcie_reset_state(struct pci_dev *dev, 1845 enum pcie_reset_state state); 1846 int pcibios_add_device(struct pci_dev *dev); 1847 void pcibios_release_device(struct pci_dev *dev); 1848 void pcibios_penalize_isa_irq(int irq, int active); 1849 int pcibios_alloc_irq(struct pci_dev *dev); 1850 void pcibios_free_irq(struct pci_dev *dev); 1851 1852 #ifdef CONFIG_HIBERNATE_CALLBACKS 1853 extern struct dev_pm_ops pcibios_pm_ops; 1854 #endif 1855 1856 #if defined(CONFIG_PCI_MMCONFIG) || defined(CONFIG_ACPI_MCFG) 1857 void __init pci_mmcfg_early_init(void); 1858 void __init pci_mmcfg_late_init(void); 1859 #else 1860 static inline void pci_mmcfg_early_init(void) { } 1861 static inline void pci_mmcfg_late_init(void) { } 1862 #endif 1863 1864 int pci_ext_cfg_avail(void); 1865 1866 void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar); 1867 void __iomem *pci_ioremap_wc_bar(struct pci_dev *pdev, int bar); 1868 1869 #ifdef CONFIG_PCI_IOV 1870 int pci_iov_virtfn_bus(struct pci_dev *dev, int id); 1871 int pci_iov_virtfn_devfn(struct pci_dev *dev, int id); 1872 1873 int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn); 1874 void pci_disable_sriov(struct pci_dev *dev); 1875 int pci_iov_add_virtfn(struct pci_dev *dev, int id, int reset); 1876 void pci_iov_remove_virtfn(struct pci_dev *dev, int id, int reset); 1877 int pci_num_vf(struct pci_dev *dev); 1878 int pci_vfs_assigned(struct pci_dev *dev); 1879 int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs); 1880 int pci_sriov_get_totalvfs(struct pci_dev *dev); 1881 resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno); 1882 #else 1883 static inline int pci_iov_virtfn_bus(struct pci_dev *dev, int id) 1884 { 1885 return -ENOSYS; 1886 } 1887 static inline int pci_iov_virtfn_devfn(struct pci_dev *dev, int id) 1888 { 1889 return -ENOSYS; 1890 } 1891 static inline int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn) 1892 { return -ENODEV; } 1893 static inline int pci_iov_add_virtfn(struct pci_dev *dev, int id, int reset) 1894 { 1895 return -ENOSYS; 1896 } 1897 static inline void pci_iov_remove_virtfn(struct pci_dev *dev, 1898 int id, int reset) { } 1899 static inline void pci_disable_sriov(struct pci_dev *dev) { } 1900 static inline int pci_num_vf(struct pci_dev *dev) { return 0; } 1901 static inline int pci_vfs_assigned(struct pci_dev *dev) 1902 { return 0; } 1903 static inline int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs) 1904 { return 0; } 1905 static inline int pci_sriov_get_totalvfs(struct pci_dev *dev) 1906 { return 0; } 1907 static inline resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno) 1908 { return 0; } 1909 #endif 1910 1911 #if defined(CONFIG_HOTPLUG_PCI) || defined(CONFIG_HOTPLUG_PCI_MODULE) 1912 void pci_hp_create_module_link(struct pci_slot *pci_slot); 1913 void pci_hp_remove_module_link(struct pci_slot *pci_slot); 1914 #endif 1915 1916 /** 1917 * pci_pcie_cap - get the saved PCIe capability offset 1918 * @dev: PCI device 1919 * 1920 * PCIe capability offset is calculated at PCI device initialization 1921 * time and saved in the data structure. This function returns saved 1922 * PCIe capability offset. Using this instead of pci_find_capability() 1923 * reduces unnecessary search in the PCI configuration space. If you 1924 * need to calculate PCIe capability offset from raw device for some 1925 * reasons, please use pci_find_capability() instead. 1926 */ 1927 static inline int pci_pcie_cap(struct pci_dev *dev) 1928 { 1929 return dev->pcie_cap; 1930 } 1931 1932 /** 1933 * pci_is_pcie - check if the PCI device is PCI Express capable 1934 * @dev: PCI device 1935 * 1936 * Returns: true if the PCI device is PCI Express capable, false otherwise. 1937 */ 1938 static inline bool pci_is_pcie(struct pci_dev *dev) 1939 { 1940 return pci_pcie_cap(dev); 1941 } 1942 1943 /** 1944 * pcie_caps_reg - get the PCIe Capabilities Register 1945 * @dev: PCI device 1946 */ 1947 static inline u16 pcie_caps_reg(const struct pci_dev *dev) 1948 { 1949 return dev->pcie_flags_reg; 1950 } 1951 1952 /** 1953 * pci_pcie_type - get the PCIe device/port type 1954 * @dev: PCI device 1955 */ 1956 static inline int pci_pcie_type(const struct pci_dev *dev) 1957 { 1958 return (pcie_caps_reg(dev) & PCI_EXP_FLAGS_TYPE) >> 4; 1959 } 1960 1961 static inline struct pci_dev *pcie_find_root_port(struct pci_dev *dev) 1962 { 1963 while (1) { 1964 if (!pci_is_pcie(dev)) 1965 break; 1966 if (pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT) 1967 return dev; 1968 if (!dev->bus->self) 1969 break; 1970 dev = dev->bus->self; 1971 } 1972 return NULL; 1973 } 1974 1975 void pci_request_acs(void); 1976 bool pci_acs_enabled(struct pci_dev *pdev, u16 acs_flags); 1977 bool pci_acs_path_enabled(struct pci_dev *start, 1978 struct pci_dev *end, u16 acs_flags); 1979 1980 #define PCI_VPD_LRDT 0x80 /* Large Resource Data Type */ 1981 #define PCI_VPD_LRDT_ID(x) ((x) | PCI_VPD_LRDT) 1982 1983 /* Large Resource Data Type Tag Item Names */ 1984 #define PCI_VPD_LTIN_ID_STRING 0x02 /* Identifier String */ 1985 #define PCI_VPD_LTIN_RO_DATA 0x10 /* Read-Only Data */ 1986 #define PCI_VPD_LTIN_RW_DATA 0x11 /* Read-Write Data */ 1987 1988 #define PCI_VPD_LRDT_ID_STRING PCI_VPD_LRDT_ID(PCI_VPD_LTIN_ID_STRING) 1989 #define PCI_VPD_LRDT_RO_DATA PCI_VPD_LRDT_ID(PCI_VPD_LTIN_RO_DATA) 1990 #define PCI_VPD_LRDT_RW_DATA PCI_VPD_LRDT_ID(PCI_VPD_LTIN_RW_DATA) 1991 1992 /* Small Resource Data Type Tag Item Names */ 1993 #define PCI_VPD_STIN_END 0x0f /* End */ 1994 1995 #define PCI_VPD_SRDT_END (PCI_VPD_STIN_END << 3) 1996 1997 #define PCI_VPD_SRDT_TIN_MASK 0x78 1998 #define PCI_VPD_SRDT_LEN_MASK 0x07 1999 #define PCI_VPD_LRDT_TIN_MASK 0x7f 2000 2001 #define PCI_VPD_LRDT_TAG_SIZE 3 2002 #define PCI_VPD_SRDT_TAG_SIZE 1 2003 2004 #define PCI_VPD_INFO_FLD_HDR_SIZE 3 2005 2006 #define PCI_VPD_RO_KEYWORD_PARTNO "PN" 2007 #define PCI_VPD_RO_KEYWORD_MFR_ID "MN" 2008 #define PCI_VPD_RO_KEYWORD_VENDOR0 "V0" 2009 #define PCI_VPD_RO_KEYWORD_CHKSUM "RV" 2010 2011 /** 2012 * pci_vpd_lrdt_size - Extracts the Large Resource Data Type length 2013 * @lrdt: Pointer to the beginning of the Large Resource Data Type tag 2014 * 2015 * Returns the extracted Large Resource Data Type length. 2016 */ 2017 static inline u16 pci_vpd_lrdt_size(const u8 *lrdt) 2018 { 2019 return (u16)lrdt[1] + ((u16)lrdt[2] << 8); 2020 } 2021 2022 /** 2023 * pci_vpd_lrdt_tag - Extracts the Large Resource Data Type Tag Item 2024 * @lrdt: Pointer to the beginning of the Large Resource Data Type tag 2025 * 2026 * Returns the extracted Large Resource Data Type Tag item. 2027 */ 2028 static inline u16 pci_vpd_lrdt_tag(const u8 *lrdt) 2029 { 2030 return (u16)(lrdt[0] & PCI_VPD_LRDT_TIN_MASK); 2031 } 2032 2033 /** 2034 * pci_vpd_srdt_size - Extracts the Small Resource Data Type length 2035 * @lrdt: Pointer to the beginning of the Small Resource Data Type tag 2036 * 2037 * Returns the extracted Small Resource Data Type length. 2038 */ 2039 static inline u8 pci_vpd_srdt_size(const u8 *srdt) 2040 { 2041 return (*srdt) & PCI_VPD_SRDT_LEN_MASK; 2042 } 2043 2044 /** 2045 * pci_vpd_srdt_tag - Extracts the Small Resource Data Type Tag Item 2046 * @lrdt: Pointer to the beginning of the Small Resource Data Type tag 2047 * 2048 * Returns the extracted Small Resource Data Type Tag Item. 2049 */ 2050 static inline u8 pci_vpd_srdt_tag(const u8 *srdt) 2051 { 2052 return ((*srdt) & PCI_VPD_SRDT_TIN_MASK) >> 3; 2053 } 2054 2055 /** 2056 * pci_vpd_info_field_size - Extracts the information field length 2057 * @lrdt: Pointer to the beginning of an information field header 2058 * 2059 * Returns the extracted information field length. 2060 */ 2061 static inline u8 pci_vpd_info_field_size(const u8 *info_field) 2062 { 2063 return info_field[2]; 2064 } 2065 2066 /** 2067 * pci_vpd_find_tag - Locates the Resource Data Type tag provided 2068 * @buf: Pointer to buffered vpd data 2069 * @off: The offset into the buffer at which to begin the search 2070 * @len: The length of the vpd buffer 2071 * @rdt: The Resource Data Type to search for 2072 * 2073 * Returns the index where the Resource Data Type was found or 2074 * -ENOENT otherwise. 2075 */ 2076 int pci_vpd_find_tag(const u8 *buf, unsigned int off, unsigned int len, u8 rdt); 2077 2078 /** 2079 * pci_vpd_find_info_keyword - Locates an information field keyword in the VPD 2080 * @buf: Pointer to buffered vpd data 2081 * @off: The offset into the buffer at which to begin the search 2082 * @len: The length of the buffer area, relative to off, in which to search 2083 * @kw: The keyword to search for 2084 * 2085 * Returns the index where the information field keyword was found or 2086 * -ENOENT otherwise. 2087 */ 2088 int pci_vpd_find_info_keyword(const u8 *buf, unsigned int off, 2089 unsigned int len, const char *kw); 2090 2091 /* PCI <-> OF binding helpers */ 2092 #ifdef CONFIG_OF 2093 struct device_node; 2094 struct irq_domain; 2095 void pci_set_of_node(struct pci_dev *dev); 2096 void pci_release_of_node(struct pci_dev *dev); 2097 void pci_set_bus_of_node(struct pci_bus *bus); 2098 void pci_release_bus_of_node(struct pci_bus *bus); 2099 struct irq_domain *pci_host_bridge_of_msi_domain(struct pci_bus *bus); 2100 2101 /* Arch may override this (weak) */ 2102 struct device_node *pcibios_get_phb_of_node(struct pci_bus *bus); 2103 2104 static inline struct device_node * 2105 pci_device_to_OF_node(const struct pci_dev *pdev) 2106 { 2107 return pdev ? pdev->dev.of_node : NULL; 2108 } 2109 2110 static inline struct device_node *pci_bus_to_OF_node(struct pci_bus *bus) 2111 { 2112 return bus ? bus->dev.of_node : NULL; 2113 } 2114 2115 #else /* CONFIG_OF */ 2116 static inline void pci_set_of_node(struct pci_dev *dev) { } 2117 static inline void pci_release_of_node(struct pci_dev *dev) { } 2118 static inline void pci_set_bus_of_node(struct pci_bus *bus) { } 2119 static inline void pci_release_bus_of_node(struct pci_bus *bus) { } 2120 static inline struct device_node * 2121 pci_device_to_OF_node(const struct pci_dev *pdev) { return NULL; } 2122 static inline struct irq_domain * 2123 pci_host_bridge_of_msi_domain(struct pci_bus *bus) { return NULL; } 2124 #endif /* CONFIG_OF */ 2125 2126 #ifdef CONFIG_ACPI 2127 struct irq_domain *pci_host_bridge_acpi_msi_domain(struct pci_bus *bus); 2128 2129 void 2130 pci_msi_register_fwnode_provider(struct fwnode_handle *(*fn)(struct device *)); 2131 #else 2132 static inline struct irq_domain * 2133 pci_host_bridge_acpi_msi_domain(struct pci_bus *bus) { return NULL; } 2134 #endif 2135 2136 #ifdef CONFIG_EEH 2137 static inline struct eeh_dev *pci_dev_to_eeh_dev(struct pci_dev *pdev) 2138 { 2139 return pdev->dev.archdata.edev; 2140 } 2141 #endif 2142 2143 void pci_add_dma_alias(struct pci_dev *dev, u8 devfn); 2144 bool pci_devs_are_dma_aliases(struct pci_dev *dev1, struct pci_dev *dev2); 2145 int pci_for_each_dma_alias(struct pci_dev *pdev, 2146 int (*fn)(struct pci_dev *pdev, 2147 u16 alias, void *data), void *data); 2148 2149 /* helper functions for operation of device flag */ 2150 static inline void pci_set_dev_assigned(struct pci_dev *pdev) 2151 { 2152 pdev->dev_flags |= PCI_DEV_FLAGS_ASSIGNED; 2153 } 2154 static inline void pci_clear_dev_assigned(struct pci_dev *pdev) 2155 { 2156 pdev->dev_flags &= ~PCI_DEV_FLAGS_ASSIGNED; 2157 } 2158 static inline bool pci_is_dev_assigned(struct pci_dev *pdev) 2159 { 2160 return (pdev->dev_flags & PCI_DEV_FLAGS_ASSIGNED) == PCI_DEV_FLAGS_ASSIGNED; 2161 } 2162 2163 /** 2164 * pci_ari_enabled - query ARI forwarding status 2165 * @bus: the PCI bus 2166 * 2167 * Returns true if ARI forwarding is enabled. 2168 */ 2169 static inline bool pci_ari_enabled(struct pci_bus *bus) 2170 { 2171 return bus->self && bus->self->ari_enabled; 2172 } 2173 2174 /* provide the legacy pci_dma_* API */ 2175 #include <linux/pci-dma-compat.h> 2176 2177 #endif /* LINUX_PCI_H */
1 /* 2 * Definitions for the 'struct sk_buff' memory handlers. 3 * 4 * Authors: 5 * Alan Cox, <gw4pts@gw4pts.ampr.org> 6 * Florian La Roche, <rzsfl@rz.uni-sb.de> 7 * 8 * This program is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License 10 * as published by the Free Software Foundation; either version 11 * 2 of the License, or (at your option) any later version. 12 */ 13 14 #ifndef _LINUX_SKBUFF_H 15 #define _LINUX_SKBUFF_H 16 17 #include <linux/kernel.h> 18 #include <linux/kmemcheck.h> 19 #include <linux/compiler.h> 20 #include <linux/time.h> 21 #include <linux/bug.h> 22 #include <linux/cache.h> 23 #include <linux/rbtree.h> 24 #include <linux/socket.h> 25 26 #include <linux/atomic.h> 27 #include <asm/types.h> 28 #include <linux/spinlock.h> 29 #include <linux/net.h> 30 #include <linux/textsearch.h> 31 #include <net/checksum.h> 32 #include <linux/rcupdate.h> 33 #include <linux/hrtimer.h> 34 #include <linux/dma-mapping.h> 35 #include <linux/netdev_features.h> 36 #include <linux/sched.h> 37 #include <net/flow_dissector.h> 38 #include <linux/splice.h> 39 #include <linux/in6.h> 40 #include <linux/if_packet.h> 41 #include <net/flow.h> 42 43 /* The interface for checksum offload between the stack and networking drivers 44 * is as follows... 45 * 46 * A. IP checksum related features 47 * 48 * Drivers advertise checksum offload capabilities in the features of a device. 49 * From the stack's point of view these are capabilities offered by the driver, 50 * a driver typically only advertises features that it is capable of offloading 51 * to its device. 52 * 53 * The checksum related features are: 54 * 55 * NETIF_F_HW_CSUM - The driver (or its device) is able to compute one 56 * IP (one's complement) checksum for any combination 57 * of protocols or protocol layering. The checksum is 58 * computed and set in a packet per the CHECKSUM_PARTIAL 59 * interface (see below). 60 * 61 * NETIF_F_IP_CSUM - Driver (device) is only able to checksum plain 62 * TCP or UDP packets over IPv4. These are specifically 63 * unencapsulated packets of the form IPv4|TCP or 64 * IPv4|UDP where the Protocol field in the IPv4 header 65 * is TCP or UDP. The IPv4 header may contain IP options 66 * This feature cannot be set in features for a device 67 * with NETIF_F_HW_CSUM also set. This feature is being 68 * DEPRECATED (see below). 69 * 70 * NETIF_F_IPV6_CSUM - Driver (device) is only able to checksum plain 71 * TCP or UDP packets over IPv6. These are specifically 72 * unencapsulated packets of the form IPv6|TCP or 73 * IPv4|UDP where the Next Header field in the IPv6 74 * header is either TCP or UDP. IPv6 extension headers 75 * are not supported with this feature. This feature 76 * cannot be set in features for a device with 77 * NETIF_F_HW_CSUM also set. This feature is being 78 * DEPRECATED (see below). 79 * 80 * NETIF_F_RXCSUM - Driver (device) performs receive checksum offload. 81 * This flag is used only used to disable the RX checksum 82 * feature for a device. The stack will accept receive 83 * checksum indication in packets received on a device 84 * regardless of whether NETIF_F_RXCSUM is set. 85 * 86 * B. Checksumming of received packets by device. Indication of checksum 87 * verification is in set skb->ip_summed. Possible values are: 88 * 89 * CHECKSUM_NONE: 90 * 91 * Device did not checksum this packet e.g. due to lack of capabilities. 92 * The packet contains full (though not verified) checksum in packet but 93 * not in skb->csum. Thus, skb->csum is undefined in this case. 94 * 95 * CHECKSUM_UNNECESSARY: 96 * 97 * The hardware you're dealing with doesn't calculate the full checksum 98 * (as in CHECKSUM_COMPLETE), but it does parse headers and verify checksums 99 * for specific protocols. For such packets it will set CHECKSUM_UNNECESSARY 100 * if their checksums are okay. skb->csum is still undefined in this case 101 * though. A driver or device must never modify the checksum field in the 102 * packet even if checksum is verified. 103 * 104 * CHECKSUM_UNNECESSARY is applicable to following protocols: 105 * TCP: IPv6 and IPv4. 106 * UDP: IPv4 and IPv6. A device may apply CHECKSUM_UNNECESSARY to a 107 * zero UDP checksum for either IPv4 or IPv6, the networking stack 108 * may perform further validation in this case. 109 * GRE: only if the checksum is present in the header. 110 * SCTP: indicates the CRC in SCTP header has been validated. 111 * 112 * skb->csum_level indicates the number of consecutive checksums found in 113 * the packet minus one that have been verified as CHECKSUM_UNNECESSARY. 114 * For instance if a device receives an IPv6->UDP->GRE->IPv4->TCP packet 115 * and a device is able to verify the checksums for UDP (possibly zero), 116 * GRE (checksum flag is set), and TCP-- skb->csum_level would be set to 117 * two. If the device were only able to verify the UDP checksum and not 118 * GRE, either because it doesn't support GRE checksum of because GRE 119 * checksum is bad, skb->csum_level would be set to zero (TCP checksum is 120 * not considered in this case). 121 * 122 * CHECKSUM_COMPLETE: 123 * 124 * This is the most generic way. The device supplied checksum of the _whole_ 125 * packet as seen by netif_rx() and fills out in skb->csum. Meaning, the 126 * hardware doesn't need to parse L3/L4 headers to implement this. 127 * 128 * Note: Even if device supports only some protocols, but is able to produce 129 * skb->csum, it MUST use CHECKSUM_COMPLETE, not CHECKSUM_UNNECESSARY. 130 * 131 * CHECKSUM_PARTIAL: 132 * 133 * A checksum is set up to be offloaded to a device as described in the 134 * output description for CHECKSUM_PARTIAL. This may occur on a packet 135 * received directly from another Linux OS, e.g., a virtualized Linux kernel 136 * on the same host, or it may be set in the input path in GRO or remote 137 * checksum offload. For the purposes of checksum verification, the checksum 138 * referred to by skb->csum_start + skb->csum_offset and any preceding 139 * checksums in the packet are considered verified. Any checksums in the 140 * packet that are after the checksum being offloaded are not considered to 141 * be verified. 142 * 143 * C. Checksumming on transmit for non-GSO. The stack requests checksum offload 144 * in the skb->ip_summed for a packet. Values are: 145 * 146 * CHECKSUM_PARTIAL: 147 * 148 * The driver is required to checksum the packet as seen by hard_start_xmit() 149 * from skb->csum_start up to the end, and to record/write the checksum at 150 * offset skb->csum_start + skb->csum_offset. A driver may verify that the 151 * csum_start and csum_offset values are valid values given the length and 152 * offset of the packet, however they should not attempt to validate that the 153 * checksum refers to a legitimate transport layer checksum-- it is the 154 * purview of the stack to validate that csum_start and csum_offset are set 155 * correctly. 156 * 157 * When the stack requests checksum offload for a packet, the driver MUST 158 * ensure that the checksum is set correctly. A driver can either offload the 159 * checksum calculation to the device, or call skb_checksum_help (in the case 160 * that the device does not support offload for a particular checksum). 161 * 162 * NETIF_F_IP_CSUM and NETIF_F_IPV6_CSUM are being deprecated in favor of 163 * NETIF_F_HW_CSUM. New devices should use NETIF_F_HW_CSUM to indicate 164 * checksum offload capability. If a device has limited checksum capabilities 165 * (for instance can only perform NETIF_F_IP_CSUM or NETIF_F_IPV6_CSUM as 166 * described above) a helper function can be called to resolve 167 * CHECKSUM_PARTIAL. The helper functions are skb_csum_off_chk*. The helper 168 * function takes a spec argument that describes the protocol layer that is 169 * supported for checksum offload and can be called for each packet. If a 170 * packet does not match the specification for offload, skb_checksum_help 171 * is called to resolve the checksum. 172 * 173 * CHECKSUM_NONE: 174 * 175 * The skb was already checksummed by the protocol, or a checksum is not 176 * required. 177 * 178 * CHECKSUM_UNNECESSARY: 179 * 180 * This has the same meaning on as CHECKSUM_NONE for checksum offload on 181 * output. 182 * 183 * CHECKSUM_COMPLETE: 184 * Not used in checksum output. If a driver observes a packet with this value 185 * set in skbuff, if should treat as CHECKSUM_NONE being set. 186 * 187 * D. Non-IP checksum (CRC) offloads 188 * 189 * NETIF_F_SCTP_CRC - This feature indicates that a device is capable of 190 * offloading the SCTP CRC in a packet. To perform this offload the stack 191 * will set ip_summed to CHECKSUM_PARTIAL and set csum_start and csum_offset 192 * accordingly. Note the there is no indication in the skbuff that the 193 * CHECKSUM_PARTIAL refers to an SCTP checksum, a driver that supports 194 * both IP checksum offload and SCTP CRC offload must verify which offload 195 * is configured for a packet presumably by inspecting packet headers. 196 * 197 * NETIF_F_FCOE_CRC - This feature indicates that a device is capable of 198 * offloading the FCOE CRC in a packet. To perform this offload the stack 199 * will set ip_summed to CHECKSUM_PARTIAL and set csum_start and csum_offset 200 * accordingly. Note the there is no indication in the skbuff that the 201 * CHECKSUM_PARTIAL refers to an FCOE checksum, a driver that supports 202 * both IP checksum offload and FCOE CRC offload must verify which offload 203 * is configured for a packet presumably by inspecting packet headers. 204 * 205 * E. Checksumming on output with GSO. 206 * 207 * In the case of a GSO packet (skb_is_gso(skb) is true), checksum offload 208 * is implied by the SKB_GSO_* flags in gso_type. Most obviously, if the 209 * gso_type is SKB_GSO_TCPV4 or SKB_GSO_TCPV6, TCP checksum offload as 210 * part of the GSO operation is implied. If a checksum is being offloaded 211 * with GSO then ip_summed is CHECKSUM_PARTIAL, csum_start and csum_offset 212 * are set to refer to the outermost checksum being offload (two offloaded 213 * checksums are possible with UDP encapsulation). 214 */ 215 216 /* Don't change this without changing skb_csum_unnecessary! */ 217 #define CHECKSUM_NONE 0 218 #define CHECKSUM_UNNECESSARY 1 219 #define CHECKSUM_COMPLETE 2 220 #define CHECKSUM_PARTIAL 3 221 222 /* Maximum value in skb->csum_level */ 223 #define SKB_MAX_CSUM_LEVEL 3 224 225 #define SKB_DATA_ALIGN(X) ALIGN(X, SMP_CACHE_BYTES) 226 #define SKB_WITH_OVERHEAD(X) \ 227 ((X) - SKB_DATA_ALIGN(sizeof(struct skb_shared_info))) 228 #define SKB_MAX_ORDER(X, ORDER) \ 229 SKB_WITH_OVERHEAD((PAGE_SIZE << (ORDER)) - (X)) 230 #define SKB_MAX_HEAD(X) (SKB_MAX_ORDER((X), 0)) 231 #define SKB_MAX_ALLOC (SKB_MAX_ORDER(0, 2)) 232 233 /* return minimum truesize of one skb containing X bytes of data */ 234 #define SKB_TRUESIZE(X) ((X) + \ 235 SKB_DATA_ALIGN(sizeof(struct sk_buff)) + \ 236 SKB_DATA_ALIGN(sizeof(struct skb_shared_info))) 237 238 struct net_device; 239 struct scatterlist; 240 struct pipe_inode_info; 241 struct iov_iter; 242 struct napi_struct; 243 244 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) 245 struct nf_conntrack { 246 atomic_t use; 247 }; 248 #endif 249 250 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER) 251 struct nf_bridge_info { 252 atomic_t use; 253 enum { 254 BRNF_PROTO_UNCHANGED, 255 BRNF_PROTO_8021Q, 256 BRNF_PROTO_PPPOE 257 } orig_proto:8; 258 u8 pkt_otherhost:1; 259 u8 in_prerouting:1; 260 u8 bridged_dnat:1; 261 __u16 frag_max_size; 262 struct net_device *physindev; 263 264 /* always valid & non-NULL from FORWARD on, for physdev match */ 265 struct net_device *physoutdev; 266 union { 267 /* prerouting: detect dnat in orig/reply direction */ 268 __be32 ipv4_daddr; 269 struct in6_addr ipv6_daddr; 270 271 /* after prerouting + nat detected: store original source 272 * mac since neigh resolution overwrites it, only used while 273 * skb is out in neigh layer. 274 */ 275 char neigh_header[8]; 276 }; 277 }; 278 #endif 279 280 struct sk_buff_head { 281 /* These two members must be first. */ 282 struct sk_buff *next; 283 struct sk_buff *prev; 284 285 __u32 qlen; 286 spinlock_t lock; 287 }; 288 289 struct sk_buff; 290 291 /* To allow 64K frame to be packed as single skb without frag_list we 292 * require 64K/PAGE_SIZE pages plus 1 additional page to allow for 293 * buffers which do not start on a page boundary. 294 * 295 * Since GRO uses frags we allocate at least 16 regardless of page 296 * size. 297 */ 298 #if (65536/PAGE_SIZE + 1) < 16 299 #define MAX_SKB_FRAGS 16UL 300 #else 301 #define MAX_SKB_FRAGS (65536/PAGE_SIZE + 1) 302 #endif 303 extern int sysctl_max_skb_frags; 304 305 /* Set skb_shinfo(skb)->gso_size to this in case you want skb_segment to 306 * segment using its current segmentation instead. 307 */ 308 #define GSO_BY_FRAGS 0xFFFF 309 310 typedef struct skb_frag_struct skb_frag_t; 311 312 struct skb_frag_struct { 313 struct { 314 struct page *p; 315 } page; 316 #if (BITS_PER_LONG > 32) || (PAGE_SIZE >= 65536) 317 __u32 page_offset; 318 __u32 size; 319 #else 320 __u16 page_offset; 321 __u16 size; 322 #endif 323 }; 324 325 static inline unsigned int skb_frag_size(const skb_frag_t *frag) 326 { 327 return frag->size; 328 } 329 330 static inline void skb_frag_size_set(skb_frag_t *frag, unsigned int size) 331 { 332 frag->size = size; 333 } 334 335 static inline void skb_frag_size_add(skb_frag_t *frag, int delta) 336 { 337 frag->size += delta; 338 } 339 340 static inline void skb_frag_size_sub(skb_frag_t *frag, int delta) 341 { 342 frag->size -= delta; 343 } 344 345 #define HAVE_HW_TIME_STAMP 346 347 /** 348 * struct skb_shared_hwtstamps - hardware time stamps 349 * @hwtstamp: hardware time stamp transformed into duration 350 * since arbitrary point in time 351 * 352 * Software time stamps generated by ktime_get_real() are stored in 353 * skb->tstamp. 354 * 355 * hwtstamps can only be compared against other hwtstamps from 356 * the same device. 357 * 358 * This structure is attached to packets as part of the 359 * &skb_shared_info. Use skb_hwtstamps() to get a pointer. 360 */ 361 struct skb_shared_hwtstamps { 362 ktime_t hwtstamp; 363 }; 364 365 /* Definitions for tx_flags in struct skb_shared_info */ 366 enum { 367 /* generate hardware time stamp */ 368 SKBTX_HW_TSTAMP = 1 << 0, 369 370 /* generate software time stamp when queueing packet to NIC */ 371 SKBTX_SW_TSTAMP = 1 << 1, 372 373 /* device driver is going to provide hardware time stamp */ 374 SKBTX_IN_PROGRESS = 1 << 2, 375 376 /* device driver supports TX zero-copy buffers */ 377 SKBTX_DEV_ZEROCOPY = 1 << 3, 378 379 /* generate wifi status information (where possible) */ 380 SKBTX_WIFI_STATUS = 1 << 4, 381 382 /* This indicates at least one fragment might be overwritten 383 * (as in vmsplice(), sendfile() ...) 384 * If we need to compute a TX checksum, we'll need to copy 385 * all frags to avoid possible bad checksum 386 */ 387 SKBTX_SHARED_FRAG = 1 << 5, 388 389 /* generate software time stamp when entering packet scheduling */ 390 SKBTX_SCHED_TSTAMP = 1 << 6, 391 }; 392 393 #define SKBTX_ANY_SW_TSTAMP (SKBTX_SW_TSTAMP | \ 394 SKBTX_SCHED_TSTAMP) 395 #define SKBTX_ANY_TSTAMP (SKBTX_HW_TSTAMP | SKBTX_ANY_SW_TSTAMP) 396 397 /* 398 * The callback notifies userspace to release buffers when skb DMA is done in 399 * lower device, the skb last reference should be 0 when calling this. 400 * The zerocopy_success argument is true if zero copy transmit occurred, 401 * false on data copy or out of memory error caused by data copy attempt. 402 * The ctx field is used to track device context. 403 * The desc field is used to track userspace buffer index. 404 */ 405 struct ubuf_info { 406 void (*callback)(struct ubuf_info *, bool zerocopy_success); 407 void *ctx; 408 unsigned long desc; 409 }; 410 411 /* This data is invariant across clones and lives at 412 * the end of the header data, ie. at skb->end. 413 */ 414 struct skb_shared_info { 415 unsigned char nr_frags; 416 __u8 tx_flags; 417 unsigned short gso_size; 418 /* Warning: this field is not always filled in (UFO)! */ 419 unsigned short gso_segs; 420 unsigned short gso_type; 421 struct sk_buff *frag_list; 422 struct skb_shared_hwtstamps hwtstamps; 423 u32 tskey; 424 __be32 ip6_frag_id; 425 426 /* 427 * Warning : all fields before dataref are cleared in __alloc_skb() 428 */ 429 atomic_t dataref; 430 431 /* Intermediate layers must ensure that destructor_arg 432 * remains valid until skb destructor */ 433 void * destructor_arg; 434 435 /* must be last field, see pskb_expand_head() */ 436 skb_frag_t frags[MAX_SKB_FRAGS]; 437 }; 438 439 /* We divide dataref into two halves. The higher 16 bits hold references 440 * to the payload part of skb->data. The lower 16 bits hold references to 441 * the entire skb->data. A clone of a headerless skb holds the length of 442 * the header in skb->hdr_len. 443 * 444 * All users must obey the rule that the skb->data reference count must be 445 * greater than or equal to the payload reference count. 446 * 447 * Holding a reference to the payload part means that the user does not 448 * care about modifications to the header part of skb->data. 449 */ 450 #define SKB_DATAREF_SHIFT 16 451 #define SKB_DATAREF_MASK ((1 << SKB_DATAREF_SHIFT) - 1) 452 453 454 enum { 455 SKB_FCLONE_UNAVAILABLE, /* skb has no fclone (from head_cache) */ 456 SKB_FCLONE_ORIG, /* orig skb (from fclone_cache) */ 457 SKB_FCLONE_CLONE, /* companion fclone skb (from fclone_cache) */ 458 }; 459 460 enum { 461 SKB_GSO_TCPV4 = 1 << 0, 462 SKB_GSO_UDP = 1 << 1, 463 464 /* This indicates the skb is from an untrusted source. */ 465 SKB_GSO_DODGY = 1 << 2, 466 467 /* This indicates the tcp segment has CWR set. */ 468 SKB_GSO_TCP_ECN = 1 << 3, 469 470 SKB_GSO_TCP_FIXEDID = 1 << 4, 471 472 SKB_GSO_TCPV6 = 1 << 5, 473 474 SKB_GSO_FCOE = 1 << 6, 475 476 SKB_GSO_GRE = 1 << 7, 477 478 SKB_GSO_GRE_CSUM = 1 << 8, 479 480 SKB_GSO_IPXIP4 = 1 << 9, 481 482 SKB_GSO_IPXIP6 = 1 << 10, 483 484 SKB_GSO_UDP_TUNNEL = 1 << 11, 485 486 SKB_GSO_UDP_TUNNEL_CSUM = 1 << 12, 487 488 SKB_GSO_PARTIAL = 1 << 13, 489 490 SKB_GSO_TUNNEL_REMCSUM = 1 << 14, 491 492 SKB_GSO_SCTP = 1 << 15, 493 }; 494 495 #if BITS_PER_LONG > 32 496 #define NET_SKBUFF_DATA_USES_OFFSET 1 497 #endif 498 499 #ifdef NET_SKBUFF_DATA_USES_OFFSET 500 typedef unsigned int sk_buff_data_t; 501 #else 502 typedef unsigned char *sk_buff_data_t; 503 #endif 504 505 /** 506 * struct skb_mstamp - multi resolution time stamps 507 * @stamp_us: timestamp in us resolution 508 * @stamp_jiffies: timestamp in jiffies 509 */ 510 struct skb_mstamp { 511 union { 512 u64 v64; 513 struct { 514 u32 stamp_us; 515 u32 stamp_jiffies; 516 }; 517 }; 518 }; 519 520 /** 521 * skb_mstamp_get - get current timestamp 522 * @cl: place to store timestamps 523 */ 524 static inline void skb_mstamp_get(struct skb_mstamp *cl) 525 { 526 u64 val = local_clock(); 527 528 do_div(val, NSEC_PER_USEC); 529 cl->stamp_us = (u32)val; 530 cl->stamp_jiffies = (u32)jiffies; 531 } 532 533 /** 534 * skb_mstamp_delta - compute the difference in usec between two skb_mstamp 535 * @t1: pointer to newest sample 536 * @t0: pointer to oldest sample 537 */ 538 static inline u32 skb_mstamp_us_delta(const struct skb_mstamp *t1, 539 const struct skb_mstamp *t0) 540 { 541 s32 delta_us = t1->stamp_us - t0->stamp_us; 542 u32 delta_jiffies = t1->stamp_jiffies - t0->stamp_jiffies; 543 544 /* If delta_us is negative, this might be because interval is too big, 545 * or local_clock() drift is too big : fallback using jiffies. 546 */ 547 if (delta_us <= 0 || 548 delta_jiffies >= (INT_MAX / (USEC_PER_SEC / HZ))) 549 550 delta_us = jiffies_to_usecs(delta_jiffies); 551 552 return delta_us; 553 } 554 555 static inline bool skb_mstamp_after(const struct skb_mstamp *t1, 556 const struct skb_mstamp *t0) 557 { 558 s32 diff = t1->stamp_jiffies - t0->stamp_jiffies; 559 560 if (!diff) 561 diff = t1->stamp_us - t0->stamp_us; 562 return diff > 0; 563 } 564 565 /** 566 * struct sk_buff - socket buffer 567 * @next: Next buffer in list 568 * @prev: Previous buffer in list 569 * @tstamp: Time we arrived/left 570 * @rbnode: RB tree node, alternative to next/prev for netem/tcp 571 * @sk: Socket we are owned by 572 * @dev: Device we arrived on/are leaving by 573 * @cb: Control buffer. Free for use by every layer. Put private vars here 574 * @_skb_refdst: destination entry (with norefcount bit) 575 * @sp: the security path, used for xfrm 576 * @len: Length of actual data 577 * @data_len: Data length 578 * @mac_len: Length of link layer header 579 * @hdr_len: writable header length of cloned skb 580 * @csum: Checksum (must include start/offset pair) 581 * @csum_start: Offset from skb->head where checksumming should start 582 * @csum_offset: Offset from csum_start where checksum should be stored 583 * @priority: Packet queueing priority 584 * @ignore_df: allow local fragmentation 585 * @cloned: Head may be cloned (check refcnt to be sure) 586 * @ip_summed: Driver fed us an IP checksum 587 * @nohdr: Payload reference only, must not modify header 588 * @nfctinfo: Relationship of this skb to the connection 589 * @pkt_type: Packet class 590 * @fclone: skbuff clone status 591 * @ipvs_property: skbuff is owned by ipvs 592 * @peeked: this packet has been seen already, so stats have been 593 * done for it, don't do them again 594 * @nf_trace: netfilter packet trace flag 595 * @protocol: Packet protocol from driver 596 * @destructor: Destruct function 597 * @nfct: Associated connection, if any 598 * @nf_bridge: Saved data about a bridged frame - see br_netfilter.c 599 * @skb_iif: ifindex of device we arrived on 600 * @tc_index: Traffic control index 601 * @tc_verd: traffic control verdict 602 * @hash: the packet hash 603 * @queue_mapping: Queue mapping for multiqueue devices 604 * @xmit_more: More SKBs are pending for this queue 605 * @ndisc_nodetype: router type (from link layer) 606 * @ooo_okay: allow the mapping of a socket to a queue to be changed 607 * @l4_hash: indicate hash is a canonical 4-tuple hash over transport 608 * ports. 609 * @sw_hash: indicates hash was computed in software stack 610 * @wifi_acked_valid: wifi_acked was set 611 * @wifi_acked: whether frame was acked on wifi or not 612 * @no_fcs: Request NIC to treat last 4 bytes as Ethernet FCS 613 * @napi_id: id of the NAPI struct this skb came from 614 * @secmark: security marking 615 * @mark: Generic packet mark 616 * @vlan_proto: vlan encapsulation protocol 617 * @vlan_tci: vlan tag control information 618 * @inner_protocol: Protocol (encapsulation) 619 * @inner_transport_header: Inner transport layer header (encapsulation) 620 * @inner_network_header: Network layer header (encapsulation) 621 * @inner_mac_header: Link layer header (encapsulation) 622 * @transport_header: Transport layer header 623 * @network_header: Network layer header 624 * @mac_header: Link layer header 625 * @tail: Tail pointer 626 * @end: End pointer 627 * @head: Head of buffer 628 * @data: Data head pointer 629 * @truesize: Buffer size 630 * @users: User count - see {datagram,tcp}.c 631 */ 632 633 struct sk_buff { 634 union { 635 struct { 636 /* These two members must be first. */ 637 struct sk_buff *next; 638 struct sk_buff *prev; 639 640 union { 641 ktime_t tstamp; 642 struct skb_mstamp skb_mstamp; 643 }; 644 }; 645 struct rb_node rbnode; /* used in netem & tcp stack */ 646 }; 647 struct sock *sk; 648 649 union { 650 struct net_device *dev; 651 /* Some protocols might use this space to store information, 652 * while device pointer would be NULL. 653 * UDP receive path is one user. 654 */ 655 unsigned long dev_scratch; 656 }; 657 /* 658 * This is the control buffer. It is free to use for every 659 * layer. Please put your private variables there. If you 660 * want to keep them across layers you have to do a skb_clone() 661 * first. This is owned by whoever has the skb queued ATM. 662 */ 663 char cb[48] __aligned(8); 664 665 unsigned long _skb_refdst; 666 void (*destructor)(struct sk_buff *skb); 667 #ifdef CONFIG_XFRM 668 struct sec_path *sp; 669 #endif 670 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) 671 struct nf_conntrack *nfct; 672 #endif 673 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER) 674 struct nf_bridge_info *nf_bridge; 675 #endif 676 unsigned int len, 677 data_len; 678 __u16 mac_len, 679 hdr_len; 680 681 /* Following fields are _not_ copied in __copy_skb_header() 682 * Note that queue_mapping is here mostly to fill a hole. 683 */ 684 kmemcheck_bitfield_begin(flags1); 685 __u16 queue_mapping; 686 687 /* if you move cloned around you also must adapt those constants */ 688 #ifdef __BIG_ENDIAN_BITFIELD 689 #define CLONED_MASK (1 << 7) 690 #else 691 #define CLONED_MASK 1 692 #endif 693 #define CLONED_OFFSET() offsetof(struct sk_buff, __cloned_offset) 694 695 __u8 __cloned_offset[0]; 696 __u8 cloned:1, 697 nohdr:1, 698 fclone:2, 699 peeked:1, 700 head_frag:1, 701 xmit_more:1, 702 __unused:1; /* one bit hole */ 703 kmemcheck_bitfield_end(flags1); 704 705 /* fields enclosed in headers_start/headers_end are copied 706 * using a single memcpy() in __copy_skb_header() 707 */ 708 /* private: */ 709 __u32 headers_start[0]; 710 /* public: */ 711 712 /* if you move pkt_type around you also must adapt those constants */ 713 #ifdef __BIG_ENDIAN_BITFIELD 714 #define PKT_TYPE_MAX (7 << 5) 715 #else 716 #define PKT_TYPE_MAX 7 717 #endif 718 #define PKT_TYPE_OFFSET() offsetof(struct sk_buff, __pkt_type_offset) 719 720 __u8 __pkt_type_offset[0]; 721 __u8 pkt_type:3; 722 __u8 pfmemalloc:1; 723 __u8 ignore_df:1; 724 __u8 nfctinfo:3; 725 726 __u8 nf_trace:1; 727 __u8 ip_summed:2; 728 __u8 ooo_okay:1; 729 __u8 l4_hash:1; 730 __u8 sw_hash:1; 731 __u8 wifi_acked_valid:1; 732 __u8 wifi_acked:1; 733 734 __u8 no_fcs:1; 735 /* Indicates the inner headers are valid in the skbuff. */ 736 __u8 encapsulation:1; 737 __u8 encap_hdr_csum:1; 738 __u8 csum_valid:1; 739 __u8 csum_complete_sw:1; 740 __u8 csum_level:2; 741 __u8 csum_bad:1; 742 743 #ifdef CONFIG_IPV6_NDISC_NODETYPE 744 __u8 ndisc_nodetype:2; 745 #endif 746 __u8 ipvs_property:1; 747 __u8 inner_protocol_type:1; 748 __u8 remcsum_offload:1; 749 #ifdef CONFIG_NET_SWITCHDEV 750 __u8 offload_fwd_mark:1; 751 #endif 752 /* 2, 4 or 5 bit hole */ 753 754 #ifdef CONFIG_NET_SCHED 755 __u16 tc_index; /* traffic control index */ 756 #ifdef CONFIG_NET_CLS_ACT 757 __u16 tc_verd; /* traffic control verdict */ 758 #endif 759 #endif 760 761 union { 762 __wsum csum; 763 struct { 764 __u16 csum_start; 765 __u16 csum_offset; 766 }; 767 }; 768 __u32 priority; 769 int skb_iif; 770 __u32 hash; 771 __be16 vlan_proto; 772 __u16 vlan_tci; 773 #if defined(CONFIG_NET_RX_BUSY_POLL) || defined(CONFIG_XPS) 774 union { 775 unsigned int napi_id; 776 unsigned int sender_cpu; 777 }; 778 #endif 779 #ifdef CONFIG_NETWORK_SECMARK 780 __u32 secmark; 781 #endif 782 783 union { 784 __u32 mark; 785 __u32 reserved_tailroom; 786 }; 787 788 union { 789 __be16 inner_protocol; 790 __u8 inner_ipproto; 791 }; 792 793 __u16 inner_transport_header; 794 __u16 inner_network_header; 795 __u16 inner_mac_header; 796 797 __be16 protocol; 798 __u16 transport_header; 799 __u16 network_header; 800 __u16 mac_header; 801 802 /* private: */ 803 __u32 headers_end[0]; 804 /* public: */ 805 806 /* These elements must be at the end, see alloc_skb() for details. */ 807 sk_buff_data_t tail; 808 sk_buff_data_t end; 809 unsigned char *head, 810 *data; 811 unsigned int truesize; 812 atomic_t users; 813 }; 814 815 #ifdef __KERNEL__ 816 /* 817 * Handling routines are only of interest to the kernel 818 */ 819 #include <linux/slab.h> 820 821 822 #define SKB_ALLOC_FCLONE 0x01 823 #define SKB_ALLOC_RX 0x02 824 #define SKB_ALLOC_NAPI 0x04 825 826 /* Returns true if the skb was allocated from PFMEMALLOC reserves */ 827 static inline bool skb_pfmemalloc(const struct sk_buff *skb) 828 { 829 return unlikely(skb->pfmemalloc); 830 } 831 832 /* 833 * skb might have a dst pointer attached, refcounted or not. 834 * _skb_refdst low order bit is set if refcount was _not_ taken 835 */ 836 #define SKB_DST_NOREF 1UL 837 #define SKB_DST_PTRMASK ~(SKB_DST_NOREF) 838 839 /** 840 * skb_dst - returns skb dst_entry 841 * @skb: buffer 842 * 843 * Returns skb dst_entry, regardless of reference taken or not. 844 */ 845 static inline struct dst_entry *skb_dst(const struct sk_buff *skb) 846 { 847 /* If refdst was not refcounted, check we still are in a 848 * rcu_read_lock section 849 */ 850 WARN_ON((skb->_skb_refdst & SKB_DST_NOREF) && 851 !rcu_read_lock_held() && 852 !rcu_read_lock_bh_held()); 853 return (struct dst_entry *)(skb->_skb_refdst & SKB_DST_PTRMASK); 854 } 855 856 /** 857 * skb_dst_set - sets skb dst 858 * @skb: buffer 859 * @dst: dst entry 860 * 861 * Sets skb dst, assuming a reference was taken on dst and should 862 * be released by skb_dst_drop() 863 */ 864 static inline void skb_dst_set(struct sk_buff *skb, struct dst_entry *dst) 865 { 866 skb->_skb_refdst = (unsigned long)dst; 867 } 868 869 /** 870 * skb_dst_set_noref - sets skb dst, hopefully, without taking reference 871 * @skb: buffer 872 * @dst: dst entry 873 * 874 * Sets skb dst, assuming a reference was not taken on dst. 875 * If dst entry is cached, we do not take reference and dst_release 876 * will be avoided by refdst_drop. If dst entry is not cached, we take 877 * reference, so that last dst_release can destroy the dst immediately. 878 */ 879 static inline void skb_dst_set_noref(struct sk_buff *skb, struct dst_entry *dst) 880 { 881 WARN_ON(!rcu_read_lock_held() && !rcu_read_lock_bh_held()); 882 skb->_skb_refdst = (unsigned long)dst | SKB_DST_NOREF; 883 } 884 885 /** 886 * skb_dst_is_noref - Test if skb dst isn't refcounted 887 * @skb: buffer 888 */ 889 static inline bool skb_dst_is_noref(const struct sk_buff *skb) 890 { 891 return (skb->_skb_refdst & SKB_DST_NOREF) && skb_dst(skb); 892 } 893 894 static inline struct rtable *skb_rtable(const struct sk_buff *skb) 895 { 896 return (struct rtable *)skb_dst(skb); 897 } 898 899 /* For mangling skb->pkt_type from user space side from applications 900 * such as nft, tc, etc, we only allow a conservative subset of 901 * possible pkt_types to be set. 902 */ 903 static inline bool skb_pkt_type_ok(u32 ptype) 904 { 905 return ptype <= PACKET_OTHERHOST; 906 } 907 908 void kfree_skb(struct sk_buff *skb); 909 void kfree_skb_list(struct sk_buff *segs); 910 void skb_tx_error(struct sk_buff *skb); 911 void consume_skb(struct sk_buff *skb); 912 void __kfree_skb(struct sk_buff *skb); 913 extern struct kmem_cache *skbuff_head_cache; 914 915 void kfree_skb_partial(struct sk_buff *skb, bool head_stolen); 916 bool skb_try_coalesce(struct sk_buff *to, struct sk_buff *from, 917 bool *fragstolen, int *delta_truesize); 918 919 struct sk_buff *__alloc_skb(unsigned int size, gfp_t priority, int flags, 920 int node); 921 struct sk_buff *__build_skb(void *data, unsigned int frag_size); 922 struct sk_buff *build_skb(void *data, unsigned int frag_size); 923 static inline struct sk_buff *alloc_skb(unsigned int size, 924 gfp_t priority) 925 { 926 return __alloc_skb(size, priority, 0, NUMA_NO_NODE); 927 } 928 929 struct sk_buff *alloc_skb_with_frags(unsigned long header_len, 930 unsigned long data_len, 931 int max_page_order, 932 int *errcode, 933 gfp_t gfp_mask); 934 935 /* Layout of fast clones : [skb1][skb2][fclone_ref] */ 936 struct sk_buff_fclones { 937 struct sk_buff skb1; 938 939 struct sk_buff skb2; 940 941 atomic_t fclone_ref; 942 }; 943 944 /** 945 * skb_fclone_busy - check if fclone is busy 946 * @sk: socket 947 * @skb: buffer 948 * 949 * Returns true if skb is a fast clone, and its clone is not freed. 950 * Some drivers call skb_orphan() in their ndo_start_xmit(), 951 * so we also check that this didnt happen. 952 */ 953 static inline bool skb_fclone_busy(const struct sock *sk, 954 const struct sk_buff *skb) 955 { 956 const struct sk_buff_fclones *fclones; 957 958 fclones = container_of(skb, struct sk_buff_fclones, skb1); 959 960 return skb->fclone == SKB_FCLONE_ORIG && 961 atomic_read(&fclones->fclone_ref) > 1 && 962 fclones->skb2.sk == sk; 963 } 964 965 static inline struct sk_buff *alloc_skb_fclone(unsigned int size, 966 gfp_t priority) 967 { 968 return __alloc_skb(size, priority, SKB_ALLOC_FCLONE, NUMA_NO_NODE); 969 } 970 971 struct sk_buff *__alloc_skb_head(gfp_t priority, int node); 972 static inline struct sk_buff *alloc_skb_head(gfp_t priority) 973 { 974 return __alloc_skb_head(priority, -1); 975 } 976 977 struct sk_buff *skb_morph(struct sk_buff *dst, struct sk_buff *src); 978 int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask); 979 struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t priority); 980 struct sk_buff *skb_copy(const struct sk_buff *skb, gfp_t priority); 981 struct sk_buff *__pskb_copy_fclone(struct sk_buff *skb, int headroom, 982 gfp_t gfp_mask, bool fclone); 983 static inline struct sk_buff *__pskb_copy(struct sk_buff *skb, int headroom, 984 gfp_t gfp_mask) 985 { 986 return __pskb_copy_fclone(skb, headroom, gfp_mask, false); 987 } 988 989 int pskb_expand_head(struct sk_buff *skb, int nhead, int ntail, gfp_t gfp_mask); 990 struct sk_buff *skb_realloc_headroom(struct sk_buff *skb, 991 unsigned int headroom); 992 struct sk_buff *skb_copy_expand(const struct sk_buff *skb, int newheadroom, 993 int newtailroom, gfp_t priority); 994 int skb_to_sgvec_nomark(struct sk_buff *skb, struct scatterlist *sg, 995 int offset, int len); 996 int skb_to_sgvec(struct sk_buff *skb, struct scatterlist *sg, int offset, 997 int len); 998 int skb_cow_data(struct sk_buff *skb, int tailbits, struct sk_buff **trailer); 999 int skb_pad(struct sk_buff *skb, int pad); 1000 #define dev_kfree_skb(a) consume_skb(a) 1001 1002 int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb, 1003 int getfrag(void *from, char *to, int offset, 1004 int len, int odd, struct sk_buff *skb), 1005 void *from, int length); 1006 1007 int skb_append_pagefrags(struct sk_buff *skb, struct page *page, 1008 int offset, size_t size); 1009 1010 struct skb_seq_state { 1011 __u32 lower_offset; 1012 __u32 upper_offset; 1013 __u32 frag_idx; 1014 __u32 stepped_offset; 1015 struct sk_buff *root_skb; 1016 struct sk_buff *cur_skb; 1017 __u8 *frag_data; 1018 }; 1019 1020 void skb_prepare_seq_read(struct sk_buff *skb, unsigned int from, 1021 unsigned int to, struct skb_seq_state *st); 1022 unsigned int skb_seq_read(unsigned int consumed, const u8 **data, 1023 struct skb_seq_state *st); 1024 void skb_abort_seq_read(struct skb_seq_state *st); 1025 1026 unsigned int skb_find_text(struct sk_buff *skb, unsigned int from, 1027 unsigned int to, struct ts_config *config); 1028 1029 /* 1030 * Packet hash types specify the type of hash in skb_set_hash. 1031 * 1032 * Hash types refer to the protocol layer addresses which are used to 1033 * construct a packet's hash. The hashes are used to differentiate or identify 1034 * flows of the protocol layer for the hash type. Hash types are either 1035 * layer-2 (L2), layer-3 (L3), or layer-4 (L4). 1036 * 1037 * Properties of hashes: 1038 * 1039 * 1) Two packets in different flows have different hash values 1040 * 2) Two packets in the same flow should have the same hash value 1041 * 1042 * A hash at a higher layer is considered to be more specific. A driver should 1043 * set the most specific hash possible. 1044 * 1045 * A driver cannot indicate a more specific hash than the layer at which a hash 1046 * was computed. For instance an L3 hash cannot be set as an L4 hash. 1047 * 1048 * A driver may indicate a hash level which is less specific than the 1049 * actual layer the hash was computed on. For instance, a hash computed 1050 * at L4 may be considered an L3 hash. This should only be done if the 1051 * driver can't unambiguously determine that the HW computed the hash at 1052 * the higher layer. Note that the "should" in the second property above 1053 * permits this. 1054 */ 1055 enum pkt_hash_types { 1056 PKT_HASH_TYPE_NONE, /* Undefined type */ 1057 PKT_HASH_TYPE_L2, /* Input: src_MAC, dest_MAC */ 1058 PKT_HASH_TYPE_L3, /* Input: src_IP, dst_IP */ 1059 PKT_HASH_TYPE_L4, /* Input: src_IP, dst_IP, src_port, dst_port */ 1060 }; 1061 1062 static inline void skb_clear_hash(struct sk_buff *skb) 1063 { 1064 skb->hash = 0; 1065 skb->sw_hash = 0; 1066 skb->l4_hash = 0; 1067 } 1068 1069 static inline void skb_clear_hash_if_not_l4(struct sk_buff *skb) 1070 { 1071 if (!skb->l4_hash) 1072 skb_clear_hash(skb); 1073 } 1074 1075 static inline void 1076 __skb_set_hash(struct sk_buff *skb, __u32 hash, bool is_sw, bool is_l4) 1077 { 1078 skb->l4_hash = is_l4; 1079 skb->sw_hash = is_sw; 1080 skb->hash = hash; 1081 } 1082 1083 static inline void 1084 skb_set_hash(struct sk_buff *skb, __u32 hash, enum pkt_hash_types type) 1085 { 1086 /* Used by drivers to set hash from HW */ 1087 __skb_set_hash(skb, hash, false, type == PKT_HASH_TYPE_L4); 1088 } 1089 1090 static inline void 1091 __skb_set_sw_hash(struct sk_buff *skb, __u32 hash, bool is_l4) 1092 { 1093 __skb_set_hash(skb, hash, true, is_l4); 1094 } 1095 1096 void __skb_get_hash(struct sk_buff *skb); 1097 u32 __skb_get_hash_symmetric(const struct sk_buff *skb); 1098 u32 skb_get_poff(const struct sk_buff *skb); 1099 u32 __skb_get_poff(const struct sk_buff *skb, void *data, 1100 const struct flow_keys *keys, int hlen); 1101 __be32 __skb_flow_get_ports(const struct sk_buff *skb, int thoff, u8 ip_proto, 1102 void *data, int hlen_proto); 1103 1104 static inline __be32 skb_flow_get_ports(const struct sk_buff *skb, 1105 int thoff, u8 ip_proto) 1106 { 1107 return __skb_flow_get_ports(skb, thoff, ip_proto, NULL, 0); 1108 } 1109 1110 void skb_flow_dissector_init(struct flow_dissector *flow_dissector, 1111 const struct flow_dissector_key *key, 1112 unsigned int key_count); 1113 1114 bool __skb_flow_dissect(const struct sk_buff *skb, 1115 struct flow_dissector *flow_dissector, 1116 void *target_container, 1117 void *data, __be16 proto, int nhoff, int hlen, 1118 unsigned int flags); 1119 1120 static inline bool skb_flow_dissect(const struct sk_buff *skb, 1121 struct flow_dissector *flow_dissector, 1122 void *target_container, unsigned int flags) 1123 { 1124 return __skb_flow_dissect(skb, flow_dissector, target_container, 1125 NULL, 0, 0, 0, flags); 1126 } 1127 1128 static inline bool skb_flow_dissect_flow_keys(const struct sk_buff *skb, 1129 struct flow_keys *flow, 1130 unsigned int flags) 1131 { 1132 memset(flow, 0, sizeof(*flow)); 1133 return __skb_flow_dissect(skb, &flow_keys_dissector, flow, 1134 NULL, 0, 0, 0, flags); 1135 } 1136 1137 static inline bool skb_flow_dissect_flow_keys_buf(struct flow_keys *flow, 1138 void *data, __be16 proto, 1139 int nhoff, int hlen, 1140 unsigned int flags) 1141 { 1142 memset(flow, 0, sizeof(*flow)); 1143 return __skb_flow_dissect(NULL, &flow_keys_buf_dissector, flow, 1144 data, proto, nhoff, hlen, flags); 1145 } 1146 1147 static inline __u32 skb_get_hash(struct sk_buff *skb) 1148 { 1149 if (!skb->l4_hash && !skb->sw_hash) 1150 __skb_get_hash(skb); 1151 1152 return skb->hash; 1153 } 1154 1155 __u32 __skb_get_hash_flowi6(struct sk_buff *skb, const struct flowi6 *fl6); 1156 1157 static inline __u32 skb_get_hash_flowi6(struct sk_buff *skb, const struct flowi6 *fl6) 1158 { 1159 if (!skb->l4_hash && !skb->sw_hash) { 1160 struct flow_keys keys; 1161 __u32 hash = __get_hash_from_flowi6(fl6, &keys); 1162 1163 __skb_set_sw_hash(skb, hash, flow_keys_have_l4(&keys)); 1164 } 1165 1166 return skb->hash; 1167 } 1168 1169 __u32 __skb_get_hash_flowi4(struct sk_buff *skb, const struct flowi4 *fl); 1170 1171 static inline __u32 skb_get_hash_flowi4(struct sk_buff *skb, const struct flowi4 *fl4) 1172 { 1173 if (!skb->l4_hash && !skb->sw_hash) { 1174 struct flow_keys keys; 1175 __u32 hash = __get_hash_from_flowi4(fl4, &keys); 1176 1177 __skb_set_sw_hash(skb, hash, flow_keys_have_l4(&keys)); 1178 } 1179 1180 return skb->hash; 1181 } 1182 1183 __u32 skb_get_hash_perturb(const struct sk_buff *skb, u32 perturb); 1184 1185 static inline __u32 skb_get_hash_raw(const struct sk_buff *skb) 1186 { 1187 return skb->hash; 1188 } 1189 1190 static inline void skb_copy_hash(struct sk_buff *to, const struct sk_buff *from) 1191 { 1192 to->hash = from->hash; 1193 to->sw_hash = from->sw_hash; 1194 to->l4_hash = from->l4_hash; 1195 }; 1196 1197 #ifdef NET_SKBUFF_DATA_USES_OFFSET 1198 static inline unsigned char *skb_end_pointer(const struct sk_buff *skb) 1199 { 1200 return skb->head + skb->end; 1201 } 1202 1203 static inline unsigned int skb_end_offset(const struct sk_buff *skb) 1204 { 1205 return skb->end; 1206 } 1207 #else 1208 static inline unsigned char *skb_end_pointer(const struct sk_buff *skb) 1209 { 1210 return skb->end; 1211 } 1212 1213 static inline unsigned int skb_end_offset(const struct sk_buff *skb) 1214 { 1215 return skb->end - skb->head; 1216 } 1217 #endif 1218 1219 /* Internal */ 1220 #define skb_shinfo(SKB) ((struct skb_shared_info *)(skb_end_pointer(SKB))) 1221 1222 static inline struct skb_shared_hwtstamps *skb_hwtstamps(struct sk_buff *skb) 1223 { 1224 return &skb_shinfo(skb)->hwtstamps; 1225 } 1226 1227 /** 1228 * skb_queue_empty - check if a queue is empty 1229 * @list: queue head 1230 * 1231 * Returns true if the queue is empty, false otherwise. 1232 */ 1233 static inline int skb_queue_empty(const struct sk_buff_head *list) 1234 { 1235 return list->next == (const struct sk_buff *) list; 1236 } 1237 1238 /** 1239 * skb_queue_is_last - check if skb is the last entry in the queue 1240 * @list: queue head 1241 * @skb: buffer 1242 * 1243 * Returns true if @skb is the last buffer on the list. 1244 */ 1245 static inline bool skb_queue_is_last(const struct sk_buff_head *list, 1246 const struct sk_buff *skb) 1247 { 1248 return skb->next == (const struct sk_buff *) list; 1249 } 1250 1251 /** 1252 * skb_queue_is_first - check if skb is the first entry in the queue 1253 * @list: queue head 1254 * @skb: buffer 1255 * 1256 * Returns true if @skb is the first buffer on the list. 1257 */ 1258 static inline bool skb_queue_is_first(const struct sk_buff_head *list, 1259 const struct sk_buff *skb) 1260 { 1261 return skb->prev == (const struct sk_buff *) list; 1262 } 1263 1264 /** 1265 * skb_queue_next - return the next packet in the queue 1266 * @list: queue head 1267 * @skb: current buffer 1268 * 1269 * Return the next packet in @list after @skb. It is only valid to 1270 * call this if skb_queue_is_last() evaluates to false. 1271 */ 1272 static inline struct sk_buff *skb_queue_next(const struct sk_buff_head *list, 1273 const struct sk_buff *skb) 1274 { 1275 /* This BUG_ON may seem severe, but if we just return then we 1276 * are going to dereference garbage. 1277 */ 1278 BUG_ON(skb_queue_is_last(list, skb)); 1279 return skb->next; 1280 } 1281 1282 /** 1283 * skb_queue_prev - return the prev packet in the queue 1284 * @list: queue head 1285 * @skb: current buffer 1286 * 1287 * Return the prev packet in @list before @skb. It is only valid to 1288 * call this if skb_queue_is_first() evaluates to false. 1289 */ 1290 static inline struct sk_buff *skb_queue_prev(const struct sk_buff_head *list, 1291 const struct sk_buff *skb) 1292 { 1293 /* This BUG_ON may seem severe, but if we just return then we 1294 * are going to dereference garbage. 1295 */ 1296 BUG_ON(skb_queue_is_first(list, skb)); 1297 return skb->prev; 1298 } 1299 1300 /** 1301 * skb_get - reference buffer 1302 * @skb: buffer to reference 1303 * 1304 * Makes another reference to a socket buffer and returns a pointer 1305 * to the buffer. 1306 */ 1307 static inline struct sk_buff *skb_get(struct sk_buff *skb) 1308 { 1309 atomic_inc(&skb->users); 1310 return skb; 1311 } 1312 1313 /* 1314 * If users == 1, we are the only owner and are can avoid redundant 1315 * atomic change. 1316 */ 1317 1318 /** 1319 * skb_cloned - is the buffer a clone 1320 * @skb: buffer to check 1321 * 1322 * Returns true if the buffer was generated with skb_clone() and is 1323 * one of multiple shared copies of the buffer. Cloned buffers are 1324 * shared data so must not be written to under normal circumstances. 1325 */ 1326 static inline int skb_cloned(const struct sk_buff *skb) 1327 { 1328 return skb->cloned && 1329 (atomic_read(&skb_shinfo(skb)->dataref) & SKB_DATAREF_MASK) != 1; 1330 } 1331 1332 static inline int skb_unclone(struct sk_buff *skb, gfp_t pri) 1333 { 1334 might_sleep_if(gfpflags_allow_blocking(pri)); 1335 1336 if (skb_cloned(skb)) 1337 return pskb_expand_head(skb, 0, 0, pri); 1338 1339 return 0; 1340 } 1341 1342 /** 1343 * skb_header_cloned - is the header a clone 1344 * @skb: buffer to check 1345 * 1346 * Returns true if modifying the header part of the buffer requires 1347 * the data to be copied. 1348 */ 1349 static inline int skb_header_cloned(const struct sk_buff *skb) 1350 { 1351 int dataref; 1352 1353 if (!skb->cloned) 1354 return 0; 1355 1356 dataref = atomic_read(&skb_shinfo(skb)->dataref); 1357 dataref = (dataref & SKB_DATAREF_MASK) - (dataref >> SKB_DATAREF_SHIFT); 1358 return dataref != 1; 1359 } 1360 1361 static inline int skb_header_unclone(struct sk_buff *skb, gfp_t pri) 1362 { 1363 might_sleep_if(gfpflags_allow_blocking(pri)); 1364 1365 if (skb_header_cloned(skb)) 1366 return pskb_expand_head(skb, 0, 0, pri); 1367 1368 return 0; 1369 } 1370 1371 /** 1372 * skb_header_release - release reference to header 1373 * @skb: buffer to operate on 1374 * 1375 * Drop a reference to the header part of the buffer. This is done 1376 * by acquiring a payload reference. You must not read from the header 1377 * part of skb->data after this. 1378 * Note : Check if you can use __skb_header_release() instead. 1379 */ 1380 static inline void skb_header_release(struct sk_buff *skb) 1381 { 1382 BUG_ON(skb->nohdr); 1383 skb->nohdr = 1; 1384 atomic_add(1 << SKB_DATAREF_SHIFT, &skb_shinfo(skb)->dataref); 1385 } 1386 1387 /** 1388 * __skb_header_release - release reference to header 1389 * @skb: buffer to operate on 1390 * 1391 * Variant of skb_header_release() assuming skb is private to caller. 1392 * We can avoid one atomic operation. 1393 */ 1394 static inline void __skb_header_release(struct sk_buff *skb) 1395 { 1396 skb->nohdr = 1; 1397 atomic_set(&skb_shinfo(skb)->dataref, 1 + (1 << SKB_DATAREF_SHIFT)); 1398 } 1399 1400 1401 /** 1402 * skb_shared - is the buffer shared 1403 * @skb: buffer to check 1404 * 1405 * Returns true if more than one person has a reference to this 1406 * buffer. 1407 */ 1408 static inline int skb_shared(const struct sk_buff *skb) 1409 { 1410 return atomic_read(&skb->users) != 1; 1411 } 1412 1413 /** 1414 * skb_share_check - check if buffer is shared and if so clone it 1415 * @skb: buffer to check 1416 * @pri: priority for memory allocation 1417 * 1418 * If the buffer is shared the buffer is cloned and the old copy 1419 * drops a reference. A new clone with a single reference is returned. 1420 * If the buffer is not shared the original buffer is returned. When 1421 * being called from interrupt status or with spinlocks held pri must 1422 * be GFP_ATOMIC. 1423 * 1424 * NULL is returned on a memory allocation failure. 1425 */ 1426 static inline struct sk_buff *skb_share_check(struct sk_buff *skb, gfp_t pri) 1427 { 1428 might_sleep_if(gfpflags_allow_blocking(pri)); 1429 if (skb_shared(skb)) { 1430 struct sk_buff *nskb = skb_clone(skb, pri); 1431 1432 if (likely(nskb)) 1433 consume_skb(skb); 1434 else 1435 kfree_skb(skb); 1436 skb = nskb; 1437 } 1438 return skb; 1439 } 1440 1441 /* 1442 * Copy shared buffers into a new sk_buff. We effectively do COW on 1443 * packets to handle cases where we have a local reader and forward 1444 * and a couple of other messy ones. The normal one is tcpdumping 1445 * a packet thats being forwarded. 1446 */ 1447 1448 /** 1449 * skb_unshare - make a copy of a shared buffer 1450 * @skb: buffer to check 1451 * @pri: priority for memory allocation 1452 * 1453 * If the socket buffer is a clone then this function creates a new 1454 * copy of the data, drops a reference count on the old copy and returns 1455 * the new copy with the reference count at 1. If the buffer is not a clone 1456 * the original buffer is returned. When called with a spinlock held or 1457 * from interrupt state @pri must be %GFP_ATOMIC 1458 * 1459 * %NULL is returned on a memory allocation failure. 1460 */ 1461 static inline struct sk_buff *skb_unshare(struct sk_buff *skb, 1462 gfp_t pri) 1463 { 1464 might_sleep_if(gfpflags_allow_blocking(pri)); 1465 if (skb_cloned(skb)) { 1466 struct sk_buff *nskb = skb_copy(skb, pri); 1467 1468 /* Free our shared copy */ 1469 if (likely(nskb)) 1470 consume_skb(skb); 1471 else 1472 kfree_skb(skb); 1473 skb = nskb; 1474 } 1475 return skb; 1476 } 1477 1478 /** 1479 * skb_peek - peek at the head of an &sk_buff_head 1480 * @list_: list to peek at 1481 * 1482 * Peek an &sk_buff. Unlike most other operations you _MUST_ 1483 * be careful with this one. A peek leaves the buffer on the 1484 * list and someone else may run off with it. You must hold 1485 * the appropriate locks or have a private queue to do this. 1486 * 1487 * Returns %NULL for an empty list or a pointer to the head element. 1488 * The reference count is not incremented and the reference is therefore 1489 * volatile. Use with caution. 1490 */ 1491 static inline struct sk_buff *skb_peek(const struct sk_buff_head *list_) 1492 { 1493 struct sk_buff *skb = list_->next; 1494 1495 if (skb == (struct sk_buff *)list_) 1496 skb = NULL; 1497 return skb; 1498 } 1499 1500 /** 1501 * skb_peek_next - peek skb following the given one from a queue 1502 * @skb: skb to start from 1503 * @list_: list to peek at 1504 * 1505 * Returns %NULL when the end of the list is met or a pointer to the 1506 * next element. The reference count is not incremented and the 1507 * reference is therefore volatile. Use with caution. 1508 */ 1509 static inline struct sk_buff *skb_peek_next(struct sk_buff *skb, 1510 const struct sk_buff_head *list_) 1511 { 1512 struct sk_buff *next = skb->next; 1513 1514 if (next == (struct sk_buff *)list_) 1515 next = NULL; 1516 return next; 1517 } 1518 1519 /** 1520 * skb_peek_tail - peek at the tail of an &sk_buff_head 1521 * @list_: list to peek at 1522 * 1523 * Peek an &sk_buff. Unlike most other operations you _MUST_ 1524 * be careful with this one. A peek leaves the buffer on the 1525 * list and someone else may run off with it. You must hold 1526 * the appropriate locks or have a private queue to do this. 1527 * 1528 * Returns %NULL for an empty list or a pointer to the tail element. 1529 * The reference count is not incremented and the reference is therefore 1530 * volatile. Use with caution. 1531 */ 1532 static inline struct sk_buff *skb_peek_tail(const struct sk_buff_head *list_) 1533 { 1534 struct sk_buff *skb = list_->prev; 1535 1536 if (skb == (struct sk_buff *)list_) 1537 skb = NULL; 1538 return skb; 1539 1540 } 1541 1542 /** 1543 * skb_queue_len - get queue length 1544 * @list_: list to measure 1545 * 1546 * Return the length of an &sk_buff queue. 1547 */ 1548 static inline __u32 skb_queue_len(const struct sk_buff_head *list_) 1549 { 1550 return list_->qlen; 1551 } 1552 1553 /** 1554 * __skb_queue_head_init - initialize non-spinlock portions of sk_buff_head 1555 * @list: queue to initialize 1556 * 1557 * This initializes only the list and queue length aspects of 1558 * an sk_buff_head object. This allows to initialize the list 1559 * aspects of an sk_buff_head without reinitializing things like 1560 * the spinlock. It can also be used for on-stack sk_buff_head 1561 * objects where the spinlock is known to not be used. 1562 */ 1563 static inline void __skb_queue_head_init(struct sk_buff_head *list) 1564 { 1565 list->prev = list->next = (struct sk_buff *)list; 1566 list->qlen = 0; 1567 } 1568 1569 /* 1570 * This function creates a split out lock class for each invocation; 1571 * this is needed for now since a whole lot of users of the skb-queue 1572 * infrastructure in drivers have different locking usage (in hardirq) 1573 * than the networking core (in softirq only). In the long run either the 1574 * network layer or drivers should need annotation to consolidate the 1575 * main types of usage into 3 classes. 1576 */ 1577 static inline void skb_queue_head_init(struct sk_buff_head *list) 1578 { 1579 spin_lock_init(&list->lock); 1580 __skb_queue_head_init(list); 1581 } 1582 1583 static inline void skb_queue_head_init_class(struct sk_buff_head *list, 1584 struct lock_class_key *class) 1585 { 1586 skb_queue_head_init(list); 1587 lockdep_set_class(&list->lock, class); 1588 } 1589 1590 /* 1591 * Insert an sk_buff on a list. 1592 * 1593 * The "__skb_xxxx()" functions are the non-atomic ones that 1594 * can only be called with interrupts disabled. 1595 */ 1596 void skb_insert(struct sk_buff *old, struct sk_buff *newsk, 1597 struct sk_buff_head *list); 1598 static inline void __skb_insert(struct sk_buff *newsk, 1599 struct sk_buff *prev, struct sk_buff *next, 1600 struct sk_buff_head *list) 1601 { 1602 newsk->next = next; 1603 newsk->prev = prev; 1604 next->prev = prev->next = newsk; 1605 list->qlen++; 1606 } 1607 1608 static inline void __skb_queue_splice(const struct sk_buff_head *list, 1609 struct sk_buff *prev, 1610 struct sk_buff *next) 1611 { 1612 struct sk_buff *first = list->next; 1613 struct sk_buff *last = list->prev; 1614 1615 first->prev = prev; 1616 prev->next = first; 1617 1618 last->next = next; 1619 next->prev = last; 1620 } 1621 1622 /** 1623 * skb_queue_splice - join two skb lists, this is designed for stacks 1624 * @list: the new list to add 1625 * @head: the place to add it in the first list 1626 */ 1627 static inline void skb_queue_splice(const struct sk_buff_head *list, 1628 struct sk_buff_head *head) 1629 { 1630 if (!skb_queue_empty(list)) { 1631 __skb_queue_splice(list, (struct sk_buff *) head, head->next); 1632 head->qlen += list->qlen; 1633 } 1634 } 1635 1636 /** 1637 * skb_queue_splice_init - join two skb lists and reinitialise the emptied list 1638 * @list: the new list to add 1639 * @head: the place to add it in the first list 1640 * 1641 * The list at @list is reinitialised 1642 */ 1643 static inline void skb_queue_splice_init(struct sk_buff_head *list, 1644 struct sk_buff_head *head) 1645 { 1646 if (!skb_queue_empty(list)) { 1647 __skb_queue_splice(list, (struct sk_buff *) head, head->next); 1648 head->qlen += list->qlen; 1649 __skb_queue_head_init(list); 1650 } 1651 } 1652 1653 /** 1654 * skb_queue_splice_tail - join two skb lists, each list being a queue 1655 * @list: the new list to add 1656 * @head: the place to add it in the first list 1657 */ 1658 static inline void skb_queue_splice_tail(const struct sk_buff_head *list, 1659 struct sk_buff_head *head) 1660 { 1661 if (!skb_queue_empty(list)) { 1662 __skb_queue_splice(list, head->prev, (struct sk_buff *) head); 1663 head->qlen += list->qlen; 1664 } 1665 } 1666 1667 /** 1668 * skb_queue_splice_tail_init - join two skb lists and reinitialise the emptied list 1669 * @list: the new list to add 1670 * @head: the place to add it in the first list 1671 * 1672 * Each of the lists is a queue. 1673 * The list at @list is reinitialised 1674 */ 1675 static inline void skb_queue_splice_tail_init(struct sk_buff_head *list, 1676 struct sk_buff_head *head) 1677 { 1678 if (!skb_queue_empty(list)) { 1679 __skb_queue_splice(list, head->prev, (struct sk_buff *) head); 1680 head->qlen += list->qlen; 1681 __skb_queue_head_init(list); 1682 } 1683 } 1684 1685 /** 1686 * __skb_queue_after - queue a buffer at the list head 1687 * @list: list to use 1688 * @prev: place after this buffer 1689 * @newsk: buffer to queue 1690 * 1691 * Queue a buffer int the middle of a list. This function takes no locks 1692 * and you must therefore hold required locks before calling it. 1693 * 1694 * A buffer cannot be placed on two lists at the same time. 1695 */ 1696 static inline void __skb_queue_after(struct sk_buff_head *list, 1697 struct sk_buff *prev, 1698 struct sk_buff *newsk) 1699 { 1700 __skb_insert(newsk, prev, prev->next, list); 1701 } 1702 1703 void skb_append(struct sk_buff *old, struct sk_buff *newsk, 1704 struct sk_buff_head *list); 1705 1706 static inline void __skb_queue_before(struct sk_buff_head *list, 1707 struct sk_buff *next, 1708 struct sk_buff *newsk) 1709 { 1710 __skb_insert(newsk, next->prev, next, list); 1711 } 1712 1713 /** 1714 * __skb_queue_head - queue a buffer at the list head 1715 * @list: list to use 1716 * @newsk: buffer to queue 1717 * 1718 * Queue a buffer at the start of a list. This function takes no locks 1719 * and you must therefore hold required locks before calling it. 1720 * 1721 * A buffer cannot be placed on two lists at the same time. 1722 */ 1723 void skb_queue_head(struct sk_buff_head *list, struct sk_buff *newsk); 1724 static inline void __skb_queue_head(struct sk_buff_head *list, 1725 struct sk_buff *newsk) 1726 { 1727 __skb_queue_after(list, (struct sk_buff *)list, newsk); 1728 } 1729 1730 /** 1731 * __skb_queue_tail - queue a buffer at the list tail 1732 * @list: list to use 1733 * @newsk: buffer to queue 1734 * 1735 * Queue a buffer at the end of a list. This function takes no locks 1736 * and you must therefore hold required locks before calling it. 1737 * 1738 * A buffer cannot be placed on two lists at the same time. 1739 */ 1740 void skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk); 1741 static inline void __skb_queue_tail(struct sk_buff_head *list, 1742 struct sk_buff *newsk) 1743 { 1744 __skb_queue_before(list, (struct sk_buff *)list, newsk); 1745 } 1746 1747 /* 1748 * remove sk_buff from list. _Must_ be called atomically, and with 1749 * the list known.. 1750 */ 1751 void skb_unlink(struct sk_buff *skb, struct sk_buff_head *list); 1752 static inline void __skb_unlink(struct sk_buff *skb, struct sk_buff_head *list) 1753 { 1754 struct sk_buff *next, *prev; 1755 1756 list->qlen--; 1757 next = skb->next; 1758 prev = skb->prev; 1759 skb->next = skb->prev = NULL; 1760 next->prev = prev; 1761 prev->next = next; 1762 } 1763 1764 /** 1765 * __skb_dequeue - remove from the head of the queue 1766 * @list: list to dequeue from 1767 * 1768 * Remove the head of the list. This function does not take any locks 1769 * so must be used with appropriate locks held only. The head item is 1770 * returned or %NULL if the list is empty. 1771 */ 1772 struct sk_buff *skb_dequeue(struct sk_buff_head *list); 1773 static inline struct sk_buff *__skb_dequeue(struct sk_buff_head *list) 1774 { 1775 struct sk_buff *skb = skb_peek(list); 1776 if (skb) 1777 __skb_unlink(skb, list); 1778 return skb; 1779 } 1780 1781 /** 1782 * __skb_dequeue_tail - remove from the tail of the queue 1783 * @list: list to dequeue from 1784 * 1785 * Remove the tail of the list. This function does not take any locks 1786 * so must be used with appropriate locks held only. The tail item is 1787 * returned or %NULL if the list is empty. 1788 */ 1789 struct sk_buff *skb_dequeue_tail(struct sk_buff_head *list); 1790 static inline struct sk_buff *__skb_dequeue_tail(struct sk_buff_head *list) 1791 { 1792 struct sk_buff *skb = skb_peek_tail(list); 1793 if (skb) 1794 __skb_unlink(skb, list); 1795 return skb; 1796 } 1797 1798 1799 static inline bool skb_is_nonlinear(const struct sk_buff *skb) 1800 { 1801 return skb->data_len; 1802 } 1803 1804 static inline unsigned int skb_headlen(const struct sk_buff *skb) 1805 { 1806 return skb->len - skb->data_len; 1807 } 1808 1809 static inline unsigned int skb_pagelen(const struct sk_buff *skb) 1810 { 1811 unsigned int i, len = 0; 1812 1813 for (i = skb_shinfo(skb)->nr_frags - 1; (int)i >= 0; i--) 1814 len += skb_frag_size(&skb_shinfo(skb)->frags[i]); 1815 return len + skb_headlen(skb); 1816 } 1817 1818 /** 1819 * __skb_fill_page_desc - initialise a paged fragment in an skb 1820 * @skb: buffer containing fragment to be initialised 1821 * @i: paged fragment index to initialise 1822 * @page: the page to use for this fragment 1823 * @off: the offset to the data with @page 1824 * @size: the length of the data 1825 * 1826 * Initialises the @i'th fragment of @skb to point to &size bytes at 1827 * offset @off within @page. 1828 * 1829 * Does not take any additional reference on the fragment. 1830 */ 1831 static inline void __skb_fill_page_desc(struct sk_buff *skb, int i, 1832 struct page *page, int off, int size) 1833 { 1834 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 1835 1836 /* 1837 * Propagate page pfmemalloc to the skb if we can. The problem is 1838 * that not all callers have unique ownership of the page but rely 1839 * on page_is_pfmemalloc doing the right thing(tm). 1840 */ 1841 frag->page.p = page; 1842 frag->page_offset = off; 1843 skb_frag_size_set(frag, size); 1844 1845 page = compound_head(page); 1846 if (page_is_pfmemalloc(page)) 1847 skb->pfmemalloc = true; 1848 } 1849 1850 /** 1851 * skb_fill_page_desc - initialise a paged fragment in an skb 1852 * @skb: buffer containing fragment to be initialised 1853 * @i: paged fragment index to initialise 1854 * @page: the page to use for this fragment 1855 * @off: the offset to the data with @page 1856 * @size: the length of the data 1857 * 1858 * As per __skb_fill_page_desc() -- initialises the @i'th fragment of 1859 * @skb to point to @size bytes at offset @off within @page. In 1860 * addition updates @skb such that @i is the last fragment. 1861 * 1862 * Does not take any additional reference on the fragment. 1863 */ 1864 static inline void skb_fill_page_desc(struct sk_buff *skb, int i, 1865 struct page *page, int off, int size) 1866 { 1867 __skb_fill_page_desc(skb, i, page, off, size); 1868 skb_shinfo(skb)->nr_frags = i + 1; 1869 } 1870 1871 void skb_add_rx_frag(struct sk_buff *skb, int i, struct page *page, int off, 1872 int size, unsigned int truesize); 1873 1874 void skb_coalesce_rx_frag(struct sk_buff *skb, int i, int size, 1875 unsigned int truesize); 1876 1877 #define SKB_PAGE_ASSERT(skb) BUG_ON(skb_shinfo(skb)->nr_frags) 1878 #define SKB_FRAG_ASSERT(skb) BUG_ON(skb_has_frag_list(skb)) 1879 #define SKB_LINEAR_ASSERT(skb) BUG_ON(skb_is_nonlinear(skb)) 1880 1881 #ifdef NET_SKBUFF_DATA_USES_OFFSET 1882 static inline unsigned char *skb_tail_pointer(const struct sk_buff *skb) 1883 { 1884 return skb->head + skb->tail; 1885 } 1886 1887 static inline void skb_reset_tail_pointer(struct sk_buff *skb) 1888 { 1889 skb->tail = skb->data - skb->head; 1890 } 1891 1892 static inline void skb_set_tail_pointer(struct sk_buff *skb, const int offset) 1893 { 1894 skb_reset_tail_pointer(skb); 1895 skb->tail += offset; 1896 } 1897 1898 #else /* NET_SKBUFF_DATA_USES_OFFSET */ 1899 static inline unsigned char *skb_tail_pointer(const struct sk_buff *skb) 1900 { 1901 return skb->tail; 1902 } 1903 1904 static inline void skb_reset_tail_pointer(struct sk_buff *skb) 1905 { 1906 skb->tail = skb->data; 1907 } 1908 1909 static inline void skb_set_tail_pointer(struct sk_buff *skb, const int offset) 1910 { 1911 skb->tail = skb->data + offset; 1912 } 1913 1914 #endif /* NET_SKBUFF_DATA_USES_OFFSET */ 1915 1916 /* 1917 * Add data to an sk_buff 1918 */ 1919 unsigned char *pskb_put(struct sk_buff *skb, struct sk_buff *tail, int len); 1920 unsigned char *skb_put(struct sk_buff *skb, unsigned int len); 1921 static inline unsigned char *__skb_put(struct sk_buff *skb, unsigned int len) 1922 { 1923 unsigned char *tmp = skb_tail_pointer(skb); 1924 SKB_LINEAR_ASSERT(skb); 1925 skb->tail += len; 1926 skb->len += len; 1927 return tmp; 1928 } 1929 1930 unsigned char *skb_push(struct sk_buff *skb, unsigned int len); 1931 static inline unsigned char *__skb_push(struct sk_buff *skb, unsigned int len) 1932 { 1933 skb->data -= len; 1934 skb->len += len; 1935 return skb->data; 1936 } 1937 1938 unsigned char *skb_pull(struct sk_buff *skb, unsigned int len); 1939 static inline unsigned char *__skb_pull(struct sk_buff *skb, unsigned int len) 1940 { 1941 skb->len -= len; 1942 BUG_ON(skb->len < skb->data_len); 1943 return skb->data += len; 1944 } 1945 1946 static inline unsigned char *skb_pull_inline(struct sk_buff *skb, unsigned int len) 1947 { 1948 return unlikely(len > skb->len) ? NULL : __skb_pull(skb, len); 1949 } 1950 1951 unsigned char *__pskb_pull_tail(struct sk_buff *skb, int delta); 1952 1953 static inline unsigned char *__pskb_pull(struct sk_buff *skb, unsigned int len) 1954 { 1955 if (len > skb_headlen(skb) && 1956 !__pskb_pull_tail(skb, len - skb_headlen(skb))) 1957 return NULL; 1958 skb->len -= len; 1959 return skb->data += len; 1960 } 1961 1962 static inline unsigned char *pskb_pull(struct sk_buff *skb, unsigned int len) 1963 { 1964 return unlikely(len > skb->len) ? NULL : __pskb_pull(skb, len); 1965 } 1966 1967 static inline int pskb_may_pull(struct sk_buff *skb, unsigned int len) 1968 { 1969 if (likely(len <= skb_headlen(skb))) 1970 return 1; 1971 if (unlikely(len > skb->len)) 1972 return 0; 1973 return __pskb_pull_tail(skb, len - skb_headlen(skb)) != NULL; 1974 } 1975 1976 void skb_condense(struct sk_buff *skb); 1977 1978 /** 1979 * skb_headroom - bytes at buffer head 1980 * @skb: buffer to check 1981 * 1982 * Return the number of bytes of free space at the head of an &sk_buff. 1983 */ 1984 static inline unsigned int skb_headroom(const struct sk_buff *skb) 1985 { 1986 return skb->data - skb->head; 1987 } 1988 1989 /** 1990 * skb_tailroom - bytes at buffer end 1991 * @skb: buffer to check 1992 * 1993 * Return the number of bytes of free space at the tail of an sk_buff 1994 */ 1995 static inline int skb_tailroom(const struct sk_buff *skb) 1996 { 1997 return skb_is_nonlinear(skb) ? 0 : skb->end - skb->tail; 1998 } 1999 2000 /** 2001 * skb_availroom - bytes at buffer end 2002 * @skb: buffer to check 2003 * 2004 * Return the number of bytes of free space at the tail of an sk_buff 2005 * allocated by sk_stream_alloc() 2006 */ 2007 static inline int skb_availroom(const struct sk_buff *skb) 2008 { 2009 if (skb_is_nonlinear(skb)) 2010 return 0; 2011 2012 return skb->end - skb->tail - skb->reserved_tailroom; 2013 } 2014 2015 /** 2016 * skb_reserve - adjust headroom 2017 * @skb: buffer to alter 2018 * @len: bytes to move 2019 * 2020 * Increase the headroom of an empty &sk_buff by reducing the tail 2021 * room. This is only allowed for an empty buffer. 2022 */ 2023 static inline void skb_reserve(struct sk_buff *skb, int len) 2024 { 2025 skb->data += len; 2026 skb->tail += len; 2027 } 2028 2029 /** 2030 * skb_tailroom_reserve - adjust reserved_tailroom 2031 * @skb: buffer to alter 2032 * @mtu: maximum amount of headlen permitted 2033 * @needed_tailroom: minimum amount of reserved_tailroom 2034 * 2035 * Set reserved_tailroom so that headlen can be as large as possible but 2036 * not larger than mtu and tailroom cannot be smaller than 2037 * needed_tailroom. 2038 * The required headroom should already have been reserved before using 2039 * this function. 2040 */ 2041 static inline void skb_tailroom_reserve(struct sk_buff *skb, unsigned int mtu, 2042 unsigned int needed_tailroom) 2043 { 2044 SKB_LINEAR_ASSERT(skb); 2045 if (mtu < skb_tailroom(skb) - needed_tailroom) 2046 /* use at most mtu */ 2047 skb->reserved_tailroom = skb_tailroom(skb) - mtu; 2048 else 2049 /* use up to all available space */ 2050 skb->reserved_tailroom = needed_tailroom; 2051 } 2052 2053 #define ENCAP_TYPE_ETHER 0 2054 #define ENCAP_TYPE_IPPROTO 1 2055 2056 static inline void skb_set_inner_protocol(struct sk_buff *skb, 2057 __be16 protocol) 2058 { 2059 skb->inner_protocol = protocol; 2060 skb->inner_protocol_type = ENCAP_TYPE_ETHER; 2061 } 2062 2063 static inline void skb_set_inner_ipproto(struct sk_buff *skb, 2064 __u8 ipproto) 2065 { 2066 skb->inner_ipproto = ipproto; 2067 skb->inner_protocol_type = ENCAP_TYPE_IPPROTO; 2068 } 2069 2070 static inline void skb_reset_inner_headers(struct sk_buff *skb) 2071 { 2072 skb->inner_mac_header = skb->mac_header; 2073 skb->inner_network_header = skb->network_header; 2074 skb->inner_transport_header = skb->transport_header; 2075 } 2076 2077 static inline void skb_reset_mac_len(struct sk_buff *skb) 2078 { 2079 skb->mac_len = skb->network_header - skb->mac_header; 2080 } 2081 2082 static inline unsigned char *skb_inner_transport_header(const struct sk_buff 2083 *skb) 2084 { 2085 return skb->head + skb->inner_transport_header; 2086 } 2087 2088 static inline int skb_inner_transport_offset(const struct sk_buff *skb) 2089 { 2090 return skb_inner_transport_header(skb) - skb->data; 2091 } 2092 2093 static inline void skb_reset_inner_transport_header(struct sk_buff *skb) 2094 { 2095 skb->inner_transport_header = skb->data - skb->head; 2096 } 2097 2098 static inline void skb_set_inner_transport_header(struct sk_buff *skb, 2099 const int offset) 2100 { 2101 skb_reset_inner_transport_header(skb); 2102 skb->inner_transport_header += offset; 2103 } 2104 2105 static inline unsigned char *skb_inner_network_header(const struct sk_buff *skb) 2106 { 2107 return skb->head + skb->inner_network_header; 2108 } 2109 2110 static inline void skb_reset_inner_network_header(struct sk_buff *skb) 2111 { 2112 skb->inner_network_header = skb->data - skb->head; 2113 } 2114 2115 static inline void skb_set_inner_network_header(struct sk_buff *skb, 2116 const int offset) 2117 { 2118 skb_reset_inner_network_header(skb); 2119 skb->inner_network_header += offset; 2120 } 2121 2122 static inline unsigned char *skb_inner_mac_header(const struct sk_buff *skb) 2123 { 2124 return skb->head + skb->inner_mac_header; 2125 } 2126 2127 static inline void skb_reset_inner_mac_header(struct sk_buff *skb) 2128 { 2129 skb->inner_mac_header = skb->data - skb->head; 2130 } 2131 2132 static inline void skb_set_inner_mac_header(struct sk_buff *skb, 2133 const int offset) 2134 { 2135 skb_reset_inner_mac_header(skb); 2136 skb->inner_mac_header += offset; 2137 } 2138 static inline bool skb_transport_header_was_set(const struct sk_buff *skb) 2139 { 2140 return skb->transport_header != (typeof(skb->transport_header))~0U; 2141 } 2142 2143 static inline unsigned char *skb_transport_header(const struct sk_buff *skb) 2144 { 2145 return skb->head + skb->transport_header; 2146 } 2147 2148 static inline void skb_reset_transport_header(struct sk_buff *skb) 2149 { 2150 skb->transport_header = skb->data - skb->head; 2151 } 2152 2153 static inline void skb_set_transport_header(struct sk_buff *skb, 2154 const int offset) 2155 { 2156 skb_reset_transport_header(skb); 2157 skb->transport_header += offset; 2158 } 2159 2160 static inline unsigned char *skb_network_header(const struct sk_buff *skb) 2161 { 2162 return skb->head + skb->network_header; 2163 } 2164 2165 static inline void skb_reset_network_header(struct sk_buff *skb) 2166 { 2167 skb->network_header = skb->data - skb->head; 2168 } 2169 2170 static inline void skb_set_network_header(struct sk_buff *skb, const int offset) 2171 { 2172 skb_reset_network_header(skb); 2173 skb->network_header += offset; 2174 } 2175 2176 static inline unsigned char *skb_mac_header(const struct sk_buff *skb) 2177 { 2178 return skb->head + skb->mac_header; 2179 } 2180 2181 static inline int skb_mac_header_was_set(const struct sk_buff *skb) 2182 { 2183 return skb->mac_header != (typeof(skb->mac_header))~0U; 2184 } 2185 2186 static inline void skb_reset_mac_header(struct sk_buff *skb) 2187 { 2188 skb->mac_header = skb->data - skb->head; 2189 } 2190 2191 static inline void skb_set_mac_header(struct sk_buff *skb, const int offset) 2192 { 2193 skb_reset_mac_header(skb); 2194 skb->mac_header += offset; 2195 } 2196 2197 static inline void skb_pop_mac_header(struct sk_buff *skb) 2198 { 2199 skb->mac_header = skb->network_header; 2200 } 2201 2202 static inline void skb_probe_transport_header(struct sk_buff *skb, 2203 const int offset_hint) 2204 { 2205 struct flow_keys keys; 2206 2207 if (skb_transport_header_was_set(skb)) 2208 return; 2209 else if (skb_flow_dissect_flow_keys(skb, &keys, 0)) 2210 skb_set_transport_header(skb, keys.control.thoff); 2211 else 2212 skb_set_transport_header(skb, offset_hint); 2213 } 2214 2215 static inline void skb_mac_header_rebuild(struct sk_buff *skb) 2216 { 2217 if (skb_mac_header_was_set(skb)) { 2218 const unsigned char *old_mac = skb_mac_header(skb); 2219 2220 skb_set_mac_header(skb, -skb->mac_len); 2221 memmove(skb_mac_header(skb), old_mac, skb->mac_len); 2222 } 2223 } 2224 2225 static inline int skb_checksum_start_offset(const struct sk_buff *skb) 2226 { 2227 return skb->csum_start - skb_headroom(skb); 2228 } 2229 2230 static inline unsigned char *skb_checksum_start(const struct sk_buff *skb) 2231 { 2232 return skb->head + skb->csum_start; 2233 } 2234 2235 static inline int skb_transport_offset(const struct sk_buff *skb) 2236 { 2237 return skb_transport_header(skb) - skb->data; 2238 } 2239 2240 static inline u32 skb_network_header_len(const struct sk_buff *skb) 2241 { 2242 return skb->transport_header - skb->network_header; 2243 } 2244 2245 static inline u32 skb_inner_network_header_len(const struct sk_buff *skb) 2246 { 2247 return skb->inner_transport_header - skb->inner_network_header; 2248 } 2249 2250 static inline int skb_network_offset(const struct sk_buff *skb) 2251 { 2252 return skb_network_header(skb) - skb->data; 2253 } 2254 2255 static inline int skb_inner_network_offset(const struct sk_buff *skb) 2256 { 2257 return skb_inner_network_header(skb) - skb->data; 2258 } 2259 2260 static inline int pskb_network_may_pull(struct sk_buff *skb, unsigned int len) 2261 { 2262 return pskb_may_pull(skb, skb_network_offset(skb) + len); 2263 } 2264 2265 /* 2266 * CPUs often take a performance hit when accessing unaligned memory 2267 * locations. The actual performance hit varies, it can be small if the 2268 * hardware handles it or large if we have to take an exception and fix it 2269 * in software. 2270 * 2271 * Since an ethernet header is 14 bytes network drivers often end up with 2272 * the IP header at an unaligned offset. The IP header can be aligned by 2273 * shifting the start of the packet by 2 bytes. Drivers should do this 2274 * with: 2275 * 2276 * skb_reserve(skb, NET_IP_ALIGN); 2277 * 2278 * The downside to this alignment of the IP header is that the DMA is now 2279 * unaligned. On some architectures the cost of an unaligned DMA is high 2280 * and this cost outweighs the gains made by aligning the IP header. 2281 * 2282 * Since this trade off varies between architectures, we allow NET_IP_ALIGN 2283 * to be overridden. 2284 */ 2285 #ifndef NET_IP_ALIGN 2286 #define NET_IP_ALIGN 2 2287 #endif 2288 2289 /* 2290 * The networking layer reserves some headroom in skb data (via 2291 * dev_alloc_skb). This is used to avoid having to reallocate skb data when 2292 * the header has to grow. In the default case, if the header has to grow 2293 * 32 bytes or less we avoid the reallocation. 2294 * 2295 * Unfortunately this headroom changes the DMA alignment of the resulting 2296 * network packet. As for NET_IP_ALIGN, this unaligned DMA is expensive 2297 * on some architectures. An architecture can override this value, 2298 * perhaps setting it to a cacheline in size (since that will maintain 2299 * cacheline alignment of the DMA). It must be a power of 2. 2300 * 2301 * Various parts of the networking layer expect at least 32 bytes of 2302 * headroom, you should not reduce this. 2303 * 2304 * Using max(32, L1_CACHE_BYTES) makes sense (especially with RPS) 2305 * to reduce average number of cache lines per packet. 2306 * get_rps_cpus() for example only access one 64 bytes aligned block : 2307 * NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8) 2308 */ 2309 #ifndef NET_SKB_PAD 2310 #define NET_SKB_PAD max(32, L1_CACHE_BYTES) 2311 #endif 2312 2313 int ___pskb_trim(struct sk_buff *skb, unsigned int len); 2314 2315 static inline void __skb_set_length(struct sk_buff *skb, unsigned int len) 2316 { 2317 if (unlikely(skb_is_nonlinear(skb))) { 2318 WARN_ON(1); 2319 return; 2320 } 2321 skb->len = len; 2322 skb_set_tail_pointer(skb, len); 2323 } 2324 2325 static inline void __skb_trim(struct sk_buff *skb, unsigned int len) 2326 { 2327 __skb_set_length(skb, len); 2328 } 2329 2330 void skb_trim(struct sk_buff *skb, unsigned int len); 2331 2332 static inline int __pskb_trim(struct sk_buff *skb, unsigned int len) 2333 { 2334 if (skb->data_len) 2335 return ___pskb_trim(skb, len); 2336 __skb_trim(skb, len); 2337 return 0; 2338 } 2339 2340 static inline int pskb_trim(struct sk_buff *skb, unsigned int len) 2341 { 2342 return (len < skb->len) ? __pskb_trim(skb, len) : 0; 2343 } 2344 2345 /** 2346 * pskb_trim_unique - remove end from a paged unique (not cloned) buffer 2347 * @skb: buffer to alter 2348 * @len: new length 2349 * 2350 * This is identical to pskb_trim except that the caller knows that 2351 * the skb is not cloned so we should never get an error due to out- 2352 * of-memory. 2353 */ 2354 static inline void pskb_trim_unique(struct sk_buff *skb, unsigned int len) 2355 { 2356 int err = pskb_trim(skb, len); 2357 BUG_ON(err); 2358 } 2359 2360 static inline int __skb_grow(struct sk_buff *skb, unsigned int len) 2361 { 2362 unsigned int diff = len - skb->len; 2363 2364 if (skb_tailroom(skb) < diff) { 2365 int ret = pskb_expand_head(skb, 0, diff - skb_tailroom(skb), 2366 GFP_ATOMIC); 2367 if (ret) 2368 return ret; 2369 } 2370 __skb_set_length(skb, len); 2371 return 0; 2372 } 2373 2374 /** 2375 * skb_orphan - orphan a buffer 2376 * @skb: buffer to orphan 2377 * 2378 * If a buffer currently has an owner then we call the owner's 2379 * destructor function and make the @skb unowned. The buffer continues 2380 * to exist but is no longer charged to its former owner. 2381 */ 2382 static inline void skb_orphan(struct sk_buff *skb) 2383 { 2384 if (skb->destructor) { 2385 skb->destructor(skb); 2386 skb->destructor = NULL; 2387 skb->sk = NULL; 2388 } else { 2389 BUG_ON(skb->sk); 2390 } 2391 } 2392 2393 /** 2394 * skb_orphan_frags - orphan the frags contained in a buffer 2395 * @skb: buffer to orphan frags from 2396 * @gfp_mask: allocation mask for replacement pages 2397 * 2398 * For each frag in the SKB which needs a destructor (i.e. has an 2399 * owner) create a copy of that frag and release the original 2400 * page by calling the destructor. 2401 */ 2402 static inline int skb_orphan_frags(struct sk_buff *skb, gfp_t gfp_mask) 2403 { 2404 if (likely(!(skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY))) 2405 return 0; 2406 return skb_copy_ubufs(skb, gfp_mask); 2407 } 2408 2409 /** 2410 * __skb_queue_purge - empty a list 2411 * @list: list to empty 2412 * 2413 * Delete all buffers on an &sk_buff list. Each buffer is removed from 2414 * the list and one reference dropped. This function does not take the 2415 * list lock and the caller must hold the relevant locks to use it. 2416 */ 2417 void skb_queue_purge(struct sk_buff_head *list); 2418 static inline void __skb_queue_purge(struct sk_buff_head *list) 2419 { 2420 struct sk_buff *skb; 2421 while ((skb = __skb_dequeue(list)) != NULL) 2422 kfree_skb(skb); 2423 } 2424 2425 void skb_rbtree_purge(struct rb_root *root); 2426 2427 void *netdev_alloc_frag(unsigned int fragsz); 2428 2429 struct sk_buff *__netdev_alloc_skb(struct net_device *dev, unsigned int length, 2430 gfp_t gfp_mask); 2431 2432 /** 2433 * netdev_alloc_skb - allocate an skbuff for rx on a specific device 2434 * @dev: network device to receive on 2435 * @length: length to allocate 2436 * 2437 * Allocate a new &sk_buff and assign it a usage count of one. The 2438 * buffer has unspecified headroom built in. Users should allocate 2439 * the headroom they think they need without accounting for the 2440 * built in space. The built in space is used for optimisations. 2441 * 2442 * %NULL is returned if there is no free memory. Although this function 2443 * allocates memory it can be called from an interrupt. 2444 */ 2445 static inline struct sk_buff *netdev_alloc_skb(struct net_device *dev, 2446 unsigned int length) 2447 { 2448 return __netdev_alloc_skb(dev, length, GFP_ATOMIC); 2449 } 2450 2451 /* legacy helper around __netdev_alloc_skb() */ 2452 static inline struct sk_buff *__dev_alloc_skb(unsigned int length, 2453 gfp_t gfp_mask) 2454 { 2455 return __netdev_alloc_skb(NULL, length, gfp_mask); 2456 } 2457 2458 /* legacy helper around netdev_alloc_skb() */ 2459 static inline struct sk_buff *dev_alloc_skb(unsigned int length) 2460 { 2461 return netdev_alloc_skb(NULL, length); 2462 } 2463 2464 2465 static inline struct sk_buff *__netdev_alloc_skb_ip_align(struct net_device *dev, 2466 unsigned int length, gfp_t gfp) 2467 { 2468 struct sk_buff *skb = __netdev_alloc_skb(dev, length + NET_IP_ALIGN, gfp); 2469 2470 if (NET_IP_ALIGN && skb) 2471 skb_reserve(skb, NET_IP_ALIGN); 2472 return skb; 2473 } 2474 2475 static inline struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev, 2476 unsigned int length) 2477 { 2478 return __netdev_alloc_skb_ip_align(dev, length, GFP_ATOMIC); 2479 } 2480 2481 static inline void skb_free_frag(void *addr) 2482 { 2483 __free_page_frag(addr); 2484 } 2485 2486 void *napi_alloc_frag(unsigned int fragsz); 2487 struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, 2488 unsigned int length, gfp_t gfp_mask); 2489 static inline struct sk_buff *napi_alloc_skb(struct napi_struct *napi, 2490 unsigned int length) 2491 { 2492 return __napi_alloc_skb(napi, length, GFP_ATOMIC); 2493 } 2494 void napi_consume_skb(struct sk_buff *skb, int budget); 2495 2496 void __kfree_skb_flush(void); 2497 void __kfree_skb_defer(struct sk_buff *skb); 2498 2499 /** 2500 * __dev_alloc_pages - allocate page for network Rx 2501 * @gfp_mask: allocation priority. Set __GFP_NOMEMALLOC if not for network Rx 2502 * @order: size of the allocation 2503 * 2504 * Allocate a new page. 2505 * 2506 * %NULL is returned if there is no free memory. 2507 */ 2508 static inline struct page *__dev_alloc_pages(gfp_t gfp_mask, 2509 unsigned int order) 2510 { 2511 /* This piece of code contains several assumptions. 2512 * 1. This is for device Rx, therefor a cold page is preferred. 2513 * 2. The expectation is the user wants a compound page. 2514 * 3. If requesting a order 0 page it will not be compound 2515 * due to the check to see if order has a value in prep_new_page 2516 * 4. __GFP_MEMALLOC is ignored if __GFP_NOMEMALLOC is set due to 2517 * code in gfp_to_alloc_flags that should be enforcing this. 2518 */ 2519 gfp_mask |= __GFP_COLD | __GFP_COMP | __GFP_MEMALLOC; 2520 2521 return alloc_pages_node(NUMA_NO_NODE, gfp_mask, order); 2522 } 2523 2524 static inline struct page *dev_alloc_pages(unsigned int order) 2525 { 2526 return __dev_alloc_pages(GFP_ATOMIC | __GFP_NOWARN, order); 2527 } 2528 2529 /** 2530 * __dev_alloc_page - allocate a page for network Rx 2531 * @gfp_mask: allocation priority. Set __GFP_NOMEMALLOC if not for network Rx 2532 * 2533 * Allocate a new page. 2534 * 2535 * %NULL is returned if there is no free memory. 2536 */ 2537 static inline struct page *__dev_alloc_page(gfp_t gfp_mask) 2538 { 2539 return __dev_alloc_pages(gfp_mask, 0); 2540 } 2541 2542 static inline struct page *dev_alloc_page(void) 2543 { 2544 return dev_alloc_pages(0); 2545 } 2546 2547 /** 2548 * skb_propagate_pfmemalloc - Propagate pfmemalloc if skb is allocated after RX page 2549 * @page: The page that was allocated from skb_alloc_page 2550 * @skb: The skb that may need pfmemalloc set 2551 */ 2552 static inline void skb_propagate_pfmemalloc(struct page *page, 2553 struct sk_buff *skb) 2554 { 2555 if (page_is_pfmemalloc(page)) 2556 skb->pfmemalloc = true; 2557 } 2558 2559 /** 2560 * skb_frag_page - retrieve the page referred to by a paged fragment 2561 * @frag: the paged fragment 2562 * 2563 * Returns the &struct page associated with @frag. 2564 */ 2565 static inline struct page *skb_frag_page(const skb_frag_t *frag) 2566 { 2567 return frag->page.p; 2568 } 2569 2570 /** 2571 * __skb_frag_ref - take an addition reference on a paged fragment. 2572 * @frag: the paged fragment 2573 * 2574 * Takes an additional reference on the paged fragment @frag. 2575 */ 2576 static inline void __skb_frag_ref(skb_frag_t *frag) 2577 { 2578 get_page(skb_frag_page(frag)); 2579 } 2580 2581 /** 2582 * skb_frag_ref - take an addition reference on a paged fragment of an skb. 2583 * @skb: the buffer 2584 * @f: the fragment offset. 2585 * 2586 * Takes an additional reference on the @f'th paged fragment of @skb. 2587 */ 2588 static inline void skb_frag_ref(struct sk_buff *skb, int f) 2589 { 2590 __skb_frag_ref(&skb_shinfo(skb)->frags[f]); 2591 } 2592 2593 /** 2594 * __skb_frag_unref - release a reference on a paged fragment. 2595 * @frag: the paged fragment 2596 * 2597 * Releases a reference on the paged fragment @frag. 2598 */ 2599 static inline void __skb_frag_unref(skb_frag_t *frag) 2600 { 2601 put_page(skb_frag_page(frag)); 2602 } 2603 2604 /** 2605 * skb_frag_unref - release a reference on a paged fragment of an skb. 2606 * @skb: the buffer 2607 * @f: the fragment offset 2608 * 2609 * Releases a reference on the @f'th paged fragment of @skb. 2610 */ 2611 static inline void skb_frag_unref(struct sk_buff *skb, int f) 2612 { 2613 __skb_frag_unref(&skb_shinfo(skb)->frags[f]); 2614 } 2615 2616 /** 2617 * skb_frag_address - gets the address of the data contained in a paged fragment 2618 * @frag: the paged fragment buffer 2619 * 2620 * Returns the address of the data within @frag. The page must already 2621 * be mapped. 2622 */ 2623 static inline void *skb_frag_address(const skb_frag_t *frag) 2624 { 2625 return page_address(skb_frag_page(frag)) + frag->page_offset; 2626 } 2627 2628 /** 2629 * skb_frag_address_safe - gets the address of the data contained in a paged fragment 2630 * @frag: the paged fragment buffer 2631 * 2632 * Returns the address of the data within @frag. Checks that the page 2633 * is mapped and returns %NULL otherwise. 2634 */ 2635 static inline void *skb_frag_address_safe(const skb_frag_t *frag) 2636 { 2637 void *ptr = page_address(skb_frag_page(frag)); 2638 if (unlikely(!ptr)) 2639 return NULL; 2640 2641 return ptr + frag->page_offset; 2642 } 2643 2644 /** 2645 * __skb_frag_set_page - sets the page contained in a paged fragment 2646 * @frag: the paged fragment 2647 * @page: the page to set 2648 * 2649 * Sets the fragment @frag to contain @page. 2650 */ 2651 static inline void __skb_frag_set_page(skb_frag_t *frag, struct page *page) 2652 { 2653 frag->page.p = page; 2654 } 2655 2656 /** 2657 * skb_frag_set_page - sets the page contained in a paged fragment of an skb 2658 * @skb: the buffer 2659 * @f: the fragment offset 2660 * @page: the page to set 2661 * 2662 * Sets the @f'th fragment of @skb to contain @page. 2663 */ 2664 static inline void skb_frag_set_page(struct sk_buff *skb, int f, 2665 struct page *page) 2666 { 2667 __skb_frag_set_page(&skb_shinfo(skb)->frags[f], page); 2668 } 2669 2670 bool skb_page_frag_refill(unsigned int sz, struct page_frag *pfrag, gfp_t prio); 2671 2672 /** 2673 * skb_frag_dma_map - maps a paged fragment via the DMA API 2674 * @dev: the device to map the fragment to 2675 * @frag: the paged fragment to map 2676 * @offset: the offset within the fragment (starting at the 2677 * fragment's own offset) 2678 * @size: the number of bytes to map 2679 * @dir: the direction of the mapping (%PCI_DMA_*) 2680 * 2681 * Maps the page associated with @frag to @device. 2682 */ 2683 static inline dma_addr_t skb_frag_dma_map(struct device *dev, 2684 const skb_frag_t *frag, 2685 size_t offset, size_t size, 2686 enum dma_data_direction dir) 2687 { 2688 return dma_map_page(dev, skb_frag_page(frag), 2689 frag->page_offset + offset, size, dir); 2690 } 2691 2692 static inline struct sk_buff *pskb_copy(struct sk_buff *skb, 2693 gfp_t gfp_mask) 2694 { 2695 return __pskb_copy(skb, skb_headroom(skb), gfp_mask); 2696 } 2697 2698 2699 static inline struct sk_buff *pskb_copy_for_clone(struct sk_buff *skb, 2700 gfp_t gfp_mask) 2701 { 2702 return __pskb_copy_fclone(skb, skb_headroom(skb), gfp_mask, true); 2703 } 2704 2705 2706 /** 2707 * skb_clone_writable - is the header of a clone writable 2708 * @skb: buffer to check 2709 * @len: length up to which to write 2710 * 2711 * Returns true if modifying the header part of the cloned buffer 2712 * does not requires the data to be copied. 2713 */ 2714 static inline int skb_clone_writable(const struct sk_buff *skb, unsigned int len) 2715 { 2716 return !skb_header_cloned(skb) && 2717 skb_headroom(skb) + len <= skb->hdr_len; 2718 } 2719 2720 static inline int skb_try_make_writable(struct sk_buff *skb, 2721 unsigned int write_len) 2722 { 2723 return skb_cloned(skb) && !skb_clone_writable(skb, write_len) && 2724 pskb_expand_head(skb, 0, 0, GFP_ATOMIC); 2725 } 2726 2727 static inline int __skb_cow(struct sk_buff *skb, unsigned int headroom, 2728 int cloned) 2729 { 2730 int delta = 0; 2731 2732 if (headroom > skb_headroom(skb)) 2733 delta = headroom - skb_headroom(skb); 2734 2735 if (delta || cloned) 2736 return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD), 0, 2737 GFP_ATOMIC); 2738 return 0; 2739 } 2740 2741 /** 2742 * skb_cow - copy header of skb when it is required 2743 * @skb: buffer to cow 2744 * @headroom: needed headroom 2745 * 2746 * If the skb passed lacks sufficient headroom or its data part 2747 * is shared, data is reallocated. If reallocation fails, an error 2748 * is returned and original skb is not changed. 2749 * 2750 * The result is skb with writable area skb->head...skb->tail 2751 * and at least @headroom of space at head. 2752 */ 2753 static inline int skb_cow(struct sk_buff *skb, unsigned int headroom) 2754 { 2755 return __skb_cow(skb, headroom, skb_cloned(skb)); 2756 } 2757 2758 /** 2759 * skb_cow_head - skb_cow but only making the head writable 2760 * @skb: buffer to cow 2761 * @headroom: needed headroom 2762 * 2763 * This function is identical to skb_cow except that we replace the 2764 * skb_cloned check by skb_header_cloned. It should be used when 2765 * you only need to push on some header and do not need to modify 2766 * the data. 2767 */ 2768 static inline int skb_cow_head(struct sk_buff *skb, unsigned int headroom) 2769 { 2770 return __skb_cow(skb, headroom, skb_header_cloned(skb)); 2771 } 2772 2773 /** 2774 * skb_padto - pad an skbuff up to a minimal size 2775 * @skb: buffer to pad 2776 * @len: minimal length 2777 * 2778 * Pads up a buffer to ensure the trailing bytes exist and are 2779 * blanked. If the buffer already contains sufficient data it 2780 * is untouched. Otherwise it is extended. Returns zero on 2781 * success. The skb is freed on error. 2782 */ 2783 static inline int skb_padto(struct sk_buff *skb, unsigned int len) 2784 { 2785 unsigned int size = skb->len; 2786 if (likely(size >= len)) 2787 return 0; 2788 return skb_pad(skb, len - size); 2789 } 2790 2791 /** 2792 * skb_put_padto - increase size and pad an skbuff up to a minimal size 2793 * @skb: buffer to pad 2794 * @len: minimal length 2795 * 2796 * Pads up a buffer to ensure the trailing bytes exist and are 2797 * blanked. If the buffer already contains sufficient data it 2798 * is untouched. Otherwise it is extended. Returns zero on 2799 * success. The skb is freed on error. 2800 */ 2801 static inline int skb_put_padto(struct sk_buff *skb, unsigned int len) 2802 { 2803 unsigned int size = skb->len; 2804 2805 if (unlikely(size < len)) { 2806 len -= size; 2807 if (skb_pad(skb, len)) 2808 return -ENOMEM; 2809 __skb_put(skb, len); 2810 } 2811 return 0; 2812 } 2813 2814 static inline int skb_add_data(struct sk_buff *skb, 2815 struct iov_iter *from, int copy) 2816 { 2817 const int off = skb->len; 2818 2819 if (skb->ip_summed == CHECKSUM_NONE) { 2820 __wsum csum = 0; 2821 if (csum_and_copy_from_iter_full(skb_put(skb, copy), copy, 2822 &csum, from)) { 2823 skb->csum = csum_block_add(skb->csum, csum, off); 2824 return 0; 2825 } 2826 } else if (copy_from_iter_full(skb_put(skb, copy), copy, from)) 2827 return 0; 2828 2829 __skb_trim(skb, off); 2830 return -EFAULT; 2831 } 2832 2833 static inline bool skb_can_coalesce(struct sk_buff *skb, int i, 2834 const struct page *page, int off) 2835 { 2836 if (i) { 2837 const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i - 1]; 2838 2839 return page == skb_frag_page(frag) && 2840 off == frag->page_offset + skb_frag_size(frag); 2841 } 2842 return false; 2843 } 2844 2845 static inline int __skb_linearize(struct sk_buff *skb) 2846 { 2847 return __pskb_pull_tail(skb, skb->data_len) ? 0 : -ENOMEM; 2848 } 2849 2850 /** 2851 * skb_linearize - convert paged skb to linear one 2852 * @skb: buffer to linarize 2853 * 2854 * If there is no free memory -ENOMEM is returned, otherwise zero 2855 * is returned and the old skb data released. 2856 */ 2857 static inline int skb_linearize(struct sk_buff *skb) 2858 { 2859 return skb_is_nonlinear(skb) ? __skb_linearize(skb) : 0; 2860 } 2861 2862 /** 2863 * skb_has_shared_frag - can any frag be overwritten 2864 * @skb: buffer to test 2865 * 2866 * Return true if the skb has at least one frag that might be modified 2867 * by an external entity (as in vmsplice()/sendfile()) 2868 */ 2869 static inline bool skb_has_shared_frag(const struct sk_buff *skb) 2870 { 2871 return skb_is_nonlinear(skb) && 2872 skb_shinfo(skb)->tx_flags & SKBTX_SHARED_FRAG; 2873 } 2874 2875 /** 2876 * skb_linearize_cow - make sure skb is linear and writable 2877 * @skb: buffer to process 2878 * 2879 * If there is no free memory -ENOMEM is returned, otherwise zero 2880 * is returned and the old skb data released. 2881 */ 2882 static inline int skb_linearize_cow(struct sk_buff *skb) 2883 { 2884 return skb_is_nonlinear(skb) || skb_cloned(skb) ? 2885 __skb_linearize(skb) : 0; 2886 } 2887 2888 static __always_inline void 2889 __skb_postpull_rcsum(struct sk_buff *skb, const void *start, unsigned int len, 2890 unsigned int off) 2891 { 2892 if (skb->ip_summed == CHECKSUM_COMPLETE) 2893 skb->csum = csum_block_sub(skb->csum, 2894 csum_partial(start, len, 0), off); 2895 else if (skb->ip_summed == CHECKSUM_PARTIAL && 2896 skb_checksum_start_offset(skb) < 0) 2897 skb->ip_summed = CHECKSUM_NONE; 2898 } 2899 2900 /** 2901 * skb_postpull_rcsum - update checksum for received skb after pull 2902 * @skb: buffer to update 2903 * @start: start of data before pull 2904 * @len: length of data pulled 2905 * 2906 * After doing a pull on a received packet, you need to call this to 2907 * update the CHECKSUM_COMPLETE checksum, or set ip_summed to 2908 * CHECKSUM_NONE so that it can be recomputed from scratch. 2909 */ 2910 static inline void skb_postpull_rcsum(struct sk_buff *skb, 2911 const void *start, unsigned int len) 2912 { 2913 __skb_postpull_rcsum(skb, start, len, 0); 2914 } 2915 2916 static __always_inline void 2917 __skb_postpush_rcsum(struct sk_buff *skb, const void *start, unsigned int len, 2918 unsigned int off) 2919 { 2920 if (skb->ip_summed == CHECKSUM_COMPLETE) 2921 skb->csum = csum_block_add(skb->csum, 2922 csum_partial(start, len, 0), off); 2923 } 2924 2925 /** 2926 * skb_postpush_rcsum - update checksum for received skb after push 2927 * @skb: buffer to update 2928 * @start: start of data after push 2929 * @len: length of data pushed 2930 * 2931 * After doing a push on a received packet, you need to call this to 2932 * update the CHECKSUM_COMPLETE checksum. 2933 */ 2934 static inline void skb_postpush_rcsum(struct sk_buff *skb, 2935 const void *start, unsigned int len) 2936 { 2937 __skb_postpush_rcsum(skb, start, len, 0); 2938 } 2939 2940 unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len); 2941 2942 /** 2943 * skb_push_rcsum - push skb and update receive checksum 2944 * @skb: buffer to update 2945 * @len: length of data pulled 2946 * 2947 * This function performs an skb_push on the packet and updates 2948 * the CHECKSUM_COMPLETE checksum. It should be used on 2949 * receive path processing instead of skb_push unless you know 2950 * that the checksum difference is zero (e.g., a valid IP header) 2951 * or you are setting ip_summed to CHECKSUM_NONE. 2952 */ 2953 static inline unsigned char *skb_push_rcsum(struct sk_buff *skb, 2954 unsigned int len) 2955 { 2956 skb_push(skb, len); 2957 skb_postpush_rcsum(skb, skb->data, len); 2958 return skb->data; 2959 } 2960 2961 /** 2962 * pskb_trim_rcsum - trim received skb and update checksum 2963 * @skb: buffer to trim 2964 * @len: new length 2965 * 2966 * This is exactly the same as pskb_trim except that it ensures the 2967 * checksum of received packets are still valid after the operation. 2968 */ 2969 2970 static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len) 2971 { 2972 if (likely(len >= skb->len)) 2973 return 0; 2974 if (skb->ip_summed == CHECKSUM_COMPLETE) 2975 skb->ip_summed = CHECKSUM_NONE; 2976 return __pskb_trim(skb, len); 2977 } 2978 2979 static inline int __skb_trim_rcsum(struct sk_buff *skb, unsigned int len) 2980 { 2981 if (skb->ip_summed == CHECKSUM_COMPLETE) 2982 skb->ip_summed = CHECKSUM_NONE; 2983 __skb_trim(skb, len); 2984 return 0; 2985 } 2986 2987 static inline int __skb_grow_rcsum(struct sk_buff *skb, unsigned int len) 2988 { 2989 if (skb->ip_summed == CHECKSUM_COMPLETE) 2990 skb->ip_summed = CHECKSUM_NONE; 2991 return __skb_grow(skb, len); 2992 } 2993 2994 #define skb_queue_walk(queue, skb) \ 2995 for (skb = (queue)->next; \ 2996 skb != (struct sk_buff *)(queue); \ 2997 skb = skb->next) 2998 2999 #define skb_queue_walk_safe(queue, skb, tmp) \ 3000 for (skb = (queue)->next, tmp = skb->next; \ 3001 skb != (struct sk_buff *)(queue); \ 3002 skb = tmp, tmp = skb->next) 3003 3004 #define skb_queue_walk_from(queue, skb) \ 3005 for (; skb != (struct sk_buff *)(queue); \ 3006 skb = skb->next) 3007 3008 #define skb_queue_walk_from_safe(queue, skb, tmp) \ 3009 for (tmp = skb->next; \ 3010 skb != (struct sk_buff *)(queue); \ 3011 skb = tmp, tmp = skb->next) 3012 3013 #define skb_queue_reverse_walk(queue, skb) \ 3014 for (skb = (queue)->prev; \ 3015 skb != (struct sk_buff *)(queue); \ 3016 skb = skb->prev) 3017 3018 #define skb_queue_reverse_walk_safe(queue, skb, tmp) \ 3019 for (skb = (queue)->prev, tmp = skb->prev; \ 3020 skb != (struct sk_buff *)(queue); \ 3021 skb = tmp, tmp = skb->prev) 3022 3023 #define skb_queue_reverse_walk_from_safe(queue, skb, tmp) \ 3024 for (tmp = skb->prev; \ 3025 skb != (struct sk_buff *)(queue); \ 3026 skb = tmp, tmp = skb->prev) 3027 3028 static inline bool skb_has_frag_list(const struct sk_buff *skb) 3029 { 3030 return skb_shinfo(skb)->frag_list != NULL; 3031 } 3032 3033 static inline void skb_frag_list_init(struct sk_buff *skb) 3034 { 3035 skb_shinfo(skb)->frag_list = NULL; 3036 } 3037 3038 #define skb_walk_frags(skb, iter) \ 3039 for (iter = skb_shinfo(skb)->frag_list; iter; iter = iter->next) 3040 3041 3042 int __skb_wait_for_more_packets(struct sock *sk, int *err, long *timeo_p, 3043 const struct sk_buff *skb); 3044 struct sk_buff *__skb_try_recv_datagram(struct sock *sk, unsigned flags, 3045 void (*destructor)(struct sock *sk, 3046 struct sk_buff *skb), 3047 int *peeked, int *off, int *err, 3048 struct sk_buff **last); 3049 struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned flags, 3050 void (*destructor)(struct sock *sk, 3051 struct sk_buff *skb), 3052 int *peeked, int *off, int *err); 3053 struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock, 3054 int *err); 3055 unsigned int datagram_poll(struct file *file, struct socket *sock, 3056 struct poll_table_struct *wait); 3057 int skb_copy_datagram_iter(const struct sk_buff *from, int offset, 3058 struct iov_iter *to, int size); 3059 static inline int skb_copy_datagram_msg(const struct sk_buff *from, int offset, 3060 struct msghdr *msg, int size) 3061 { 3062 return skb_copy_datagram_iter(from, offset, &msg->msg_iter, size); 3063 } 3064 int skb_copy_and_csum_datagram_msg(struct sk_buff *skb, int hlen, 3065 struct msghdr *msg); 3066 int skb_copy_datagram_from_iter(struct sk_buff *skb, int offset, 3067 struct iov_iter *from, int len); 3068 int zerocopy_sg_from_iter(struct sk_buff *skb, struct iov_iter *frm); 3069 void skb_free_datagram(struct sock *sk, struct sk_buff *skb); 3070 void __skb_free_datagram_locked(struct sock *sk, struct sk_buff *skb, int len); 3071 static inline void skb_free_datagram_locked(struct sock *sk, 3072 struct sk_buff *skb) 3073 { 3074 __skb_free_datagram_locked(sk, skb, 0); 3075 } 3076 int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags); 3077 int skb_copy_bits(const struct sk_buff *skb, int offset, void *to, int len); 3078 int skb_store_bits(struct sk_buff *skb, int offset, const void *from, int len); 3079 __wsum skb_copy_and_csum_bits(const struct sk_buff *skb, int offset, u8 *to, 3080 int len, __wsum csum); 3081 int skb_splice_bits(struct sk_buff *skb, struct sock *sk, unsigned int offset, 3082 struct pipe_inode_info *pipe, unsigned int len, 3083 unsigned int flags); 3084 void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to); 3085 unsigned int skb_zerocopy_headlen(const struct sk_buff *from); 3086 int skb_zerocopy(struct sk_buff *to, struct sk_buff *from, 3087 int len, int hlen); 3088 void skb_split(struct sk_buff *skb, struct sk_buff *skb1, const u32 len); 3089 int skb_shift(struct sk_buff *tgt, struct sk_buff *skb, int shiftlen); 3090 void skb_scrub_packet(struct sk_buff *skb, bool xnet); 3091 unsigned int skb_gso_transport_seglen(const struct sk_buff *skb); 3092 bool skb_gso_validate_mtu(const struct sk_buff *skb, unsigned int mtu); 3093 struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features); 3094 struct sk_buff *skb_vlan_untag(struct sk_buff *skb); 3095 int skb_ensure_writable(struct sk_buff *skb, int write_len); 3096 int __skb_vlan_pop(struct sk_buff *skb, u16 *vlan_tci); 3097 int skb_vlan_pop(struct sk_buff *skb); 3098 int skb_vlan_push(struct sk_buff *skb, __be16 vlan_proto, u16 vlan_tci); 3099 struct sk_buff *pskb_extract(struct sk_buff *skb, int off, int to_copy, 3100 gfp_t gfp); 3101 3102 static inline int memcpy_from_msg(void *data, struct msghdr *msg, int len) 3103 { 3104 return copy_from_iter(data, len, &msg->msg_iter) == len ? 0 : -EFAULT; 3105 } 3106 3107 static inline int memcpy_to_msg(struct msghdr *msg, void *data, int len) 3108 { 3109 return copy_to_iter(data, len, &msg->msg_iter) == len ? 0 : -EFAULT; 3110 } 3111 3112 struct skb_checksum_ops { 3113 __wsum (*update)(const void *mem, int len, __wsum wsum); 3114 __wsum (*combine)(__wsum csum, __wsum csum2, int offset, int len); 3115 }; 3116 3117 __wsum __skb_checksum(const struct sk_buff *skb, int offset, int len, 3118 __wsum csum, const struct skb_checksum_ops *ops); 3119 __wsum skb_checksum(const struct sk_buff *skb, int offset, int len, 3120 __wsum csum); 3121 3122 static inline void * __must_check 3123 __skb_header_pointer(const struct sk_buff *skb, int offset, 3124 int len, void *data, int hlen, void *buffer) 3125 { 3126 if (hlen - offset >= len) 3127 return data + offset; 3128 3129 if (!skb || 3130 skb_copy_bits(skb, offset, buffer, len) < 0) 3131 return NULL; 3132 3133 return buffer; 3134 } 3135 3136 static inline void * __must_check 3137 skb_header_pointer(const struct sk_buff *skb, int offset, int len, void *buffer) 3138 { 3139 return __skb_header_pointer(skb, offset, len, skb->data, 3140 skb_headlen(skb), buffer); 3141 } 3142 3143 /** 3144 * skb_needs_linearize - check if we need to linearize a given skb 3145 * depending on the given device features. 3146 * @skb: socket buffer to check 3147 * @features: net device features 3148 * 3149 * Returns true if either: 3150 * 1. skb has frag_list and the device doesn't support FRAGLIST, or 3151 * 2. skb is fragmented and the device does not support SG. 3152 */ 3153 static inline bool skb_needs_linearize(struct sk_buff *skb, 3154 netdev_features_t features) 3155 { 3156 return skb_is_nonlinear(skb) && 3157 ((skb_has_frag_list(skb) && !(features & NETIF_F_FRAGLIST)) || 3158 (skb_shinfo(skb)->nr_frags && !(features & NETIF_F_SG))); 3159 } 3160 3161 static inline void skb_copy_from_linear_data(const struct sk_buff *skb, 3162 void *to, 3163 const unsigned int len) 3164 { 3165 memcpy(to, skb->data, len); 3166 } 3167 3168 static inline void skb_copy_from_linear_data_offset(const struct sk_buff *skb, 3169 const int offset, void *to, 3170 const unsigned int len) 3171 { 3172 memcpy(to, skb->data + offset, len); 3173 } 3174 3175 static inline void skb_copy_to_linear_data(struct sk_buff *skb, 3176 const void *from, 3177 const unsigned int len) 3178 { 3179 memcpy(skb->data, from, len); 3180 } 3181 3182 static inline void skb_copy_to_linear_data_offset(struct sk_buff *skb, 3183 const int offset, 3184 const void *from, 3185 const unsigned int len) 3186 { 3187 memcpy(skb->data + offset, from, len); 3188 } 3189 3190 void skb_init(void); 3191 3192 static inline ktime_t skb_get_ktime(const struct sk_buff *skb) 3193 { 3194 return skb->tstamp; 3195 } 3196 3197 /** 3198 * skb_get_timestamp - get timestamp from a skb 3199 * @skb: skb to get stamp from 3200 * @stamp: pointer to struct timeval to store stamp in 3201 * 3202 * Timestamps are stored in the skb as offsets to a base timestamp. 3203 * This function converts the offset back to a struct timeval and stores 3204 * it in stamp. 3205 */ 3206 static inline void skb_get_timestamp(const struct sk_buff *skb, 3207 struct timeval *stamp) 3208 { 3209 *stamp = ktime_to_timeval(skb->tstamp); 3210 } 3211 3212 static inline void skb_get_timestampns(const struct sk_buff *skb, 3213 struct timespec *stamp) 3214 { 3215 *stamp = ktime_to_timespec(skb->tstamp); 3216 } 3217 3218 static inline void __net_timestamp(struct sk_buff *skb) 3219 { 3220 skb->tstamp = ktime_get_real(); 3221 } 3222 3223 static inline ktime_t net_timedelta(ktime_t t) 3224 { 3225 return ktime_sub(ktime_get_real(), t); 3226 } 3227 3228 static inline ktime_t net_invalid_timestamp(void) 3229 { 3230 return 0; 3231 } 3232 3233 struct sk_buff *skb_clone_sk(struct sk_buff *skb); 3234 3235 #ifdef CONFIG_NETWORK_PHY_TIMESTAMPING 3236 3237 void skb_clone_tx_timestamp(struct sk_buff *skb); 3238 bool skb_defer_rx_timestamp(struct sk_buff *skb); 3239 3240 #else /* CONFIG_NETWORK_PHY_TIMESTAMPING */ 3241 3242 static inline void skb_clone_tx_timestamp(struct sk_buff *skb) 3243 { 3244 } 3245 3246 static inline bool skb_defer_rx_timestamp(struct sk_buff *skb) 3247 { 3248 return false; 3249 } 3250 3251 #endif /* !CONFIG_NETWORK_PHY_TIMESTAMPING */ 3252 3253 /** 3254 * skb_complete_tx_timestamp() - deliver cloned skb with tx timestamps 3255 * 3256 * PHY drivers may accept clones of transmitted packets for 3257 * timestamping via their phy_driver.txtstamp method. These drivers 3258 * must call this function to return the skb back to the stack with a 3259 * timestamp. 3260 * 3261 * @skb: clone of the the original outgoing packet 3262 * @hwtstamps: hardware time stamps 3263 * 3264 */ 3265 void skb_complete_tx_timestamp(struct sk_buff *skb, 3266 struct skb_shared_hwtstamps *hwtstamps); 3267 3268 void __skb_tstamp_tx(struct sk_buff *orig_skb, 3269 struct skb_shared_hwtstamps *hwtstamps, 3270 struct sock *sk, int tstype); 3271 3272 /** 3273 * skb_tstamp_tx - queue clone of skb with send time stamps 3274 * @orig_skb: the original outgoing packet 3275 * @hwtstamps: hardware time stamps, may be NULL if not available 3276 * 3277 * If the skb has a socket associated, then this function clones the 3278 * skb (thus sharing the actual data and optional structures), stores 3279 * the optional hardware time stamping information (if non NULL) or 3280 * generates a software time stamp (otherwise), then queues the clone 3281 * to the error queue of the socket. Errors are silently ignored. 3282 */ 3283 void skb_tstamp_tx(struct sk_buff *orig_skb, 3284 struct skb_shared_hwtstamps *hwtstamps); 3285 3286 static inline void sw_tx_timestamp(struct sk_buff *skb) 3287 { 3288 if (skb_shinfo(skb)->tx_flags & SKBTX_SW_TSTAMP && 3289 !(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS)) 3290 skb_tstamp_tx(skb, NULL); 3291 } 3292 3293 /** 3294 * skb_tx_timestamp() - Driver hook for transmit timestamping 3295 * 3296 * Ethernet MAC Drivers should call this function in their hard_xmit() 3297 * function immediately before giving the sk_buff to the MAC hardware. 3298 * 3299 * Specifically, one should make absolutely sure that this function is 3300 * called before TX completion of this packet can trigger. Otherwise 3301 * the packet could potentially already be freed. 3302 * 3303 * @skb: A socket buffer. 3304 */ 3305 static inline void skb_tx_timestamp(struct sk_buff *skb) 3306 { 3307 skb_clone_tx_timestamp(skb); 3308 sw_tx_timestamp(skb); 3309 } 3310 3311 /** 3312 * skb_complete_wifi_ack - deliver skb with wifi status 3313 * 3314 * @skb: the original outgoing packet 3315 * @acked: ack status 3316 * 3317 */ 3318 void skb_complete_wifi_ack(struct sk_buff *skb, bool acked); 3319 3320 __sum16 __skb_checksum_complete_head(struct sk_buff *skb, int len); 3321 __sum16 __skb_checksum_complete(struct sk_buff *skb); 3322 3323 static inline int skb_csum_unnecessary(const struct sk_buff *skb) 3324 { 3325 return ((skb->ip_summed == CHECKSUM_UNNECESSARY) || 3326 skb->csum_valid || 3327 (skb->ip_summed == CHECKSUM_PARTIAL && 3328 skb_checksum_start_offset(skb) >= 0)); 3329 } 3330 3331 /** 3332 * skb_checksum_complete - Calculate checksum of an entire packet 3333 * @skb: packet to process 3334 * 3335 * This function calculates the checksum over the entire packet plus 3336 * the value of skb->csum. The latter can be used to supply the 3337 * checksum of a pseudo header as used by TCP/UDP. It returns the 3338 * checksum. 3339 * 3340 * For protocols that contain complete checksums such as ICMP/TCP/UDP, 3341 * this function can be used to verify that checksum on received 3342 * packets. In that case the function should return zero if the 3343 * checksum is correct. In particular, this function will return zero 3344 * if skb->ip_summed is CHECKSUM_UNNECESSARY which indicates that the 3345 * hardware has already verified the correctness of the checksum. 3346 */ 3347 static inline __sum16 skb_checksum_complete(struct sk_buff *skb) 3348 { 3349 return skb_csum_unnecessary(skb) ? 3350 0 : __skb_checksum_complete(skb); 3351 } 3352 3353 static inline void __skb_decr_checksum_unnecessary(struct sk_buff *skb) 3354 { 3355 if (skb->ip_summed == CHECKSUM_UNNECESSARY) { 3356 if (skb->csum_level == 0) 3357 skb->ip_summed = CHECKSUM_NONE; 3358 else 3359 skb->csum_level--; 3360 } 3361 } 3362 3363 static inline void __skb_incr_checksum_unnecessary(struct sk_buff *skb) 3364 { 3365 if (skb->ip_summed == CHECKSUM_UNNECESSARY) { 3366 if (skb->csum_level < SKB_MAX_CSUM_LEVEL) 3367 skb->csum_level++; 3368 } else if (skb->ip_summed == CHECKSUM_NONE) { 3369 skb->ip_summed = CHECKSUM_UNNECESSARY; 3370 skb->csum_level = 0; 3371 } 3372 } 3373 3374 static inline void __skb_mark_checksum_bad(struct sk_buff *skb) 3375 { 3376 /* Mark current checksum as bad (typically called from GRO 3377 * path). In the case that ip_summed is CHECKSUM_NONE 3378 * this must be the first checksum encountered in the packet. 3379 * When ip_summed is CHECKSUM_UNNECESSARY, this is the first 3380 * checksum after the last one validated. For UDP, a zero 3381 * checksum can not be marked as bad. 3382 */ 3383 3384 if (skb->ip_summed == CHECKSUM_NONE || 3385 skb->ip_summed == CHECKSUM_UNNECESSARY) 3386 skb->csum_bad = 1; 3387 } 3388 3389 /* Check if we need to perform checksum complete validation. 3390 * 3391 * Returns true if checksum complete is needed, false otherwise 3392 * (either checksum is unnecessary or zero checksum is allowed). 3393 */ 3394 static inline bool __skb_checksum_validate_needed(struct sk_buff *skb, 3395 bool zero_okay, 3396 __sum16 check) 3397 { 3398 if (skb_csum_unnecessary(skb) || (zero_okay && !check)) { 3399 skb->csum_valid = 1; 3400 __skb_decr_checksum_unnecessary(skb); 3401 return false; 3402 } 3403 3404 return true; 3405 } 3406 3407 /* For small packets <= CHECKSUM_BREAK peform checksum complete directly 3408 * in checksum_init. 3409 */ 3410 #define CHECKSUM_BREAK 76 3411 3412 /* Unset checksum-complete 3413 * 3414 * Unset checksum complete can be done when packet is being modified 3415 * (uncompressed for instance) and checksum-complete value is 3416 * invalidated. 3417 */ 3418 static inline void skb_checksum_complete_unset(struct sk_buff *skb) 3419 { 3420 if (skb->ip_summed == CHECKSUM_COMPLETE) 3421 skb->ip_summed = CHECKSUM_NONE; 3422 } 3423 3424 /* Validate (init) checksum based on checksum complete. 3425 * 3426 * Return values: 3427 * 0: checksum is validated or try to in skb_checksum_complete. In the latter 3428 * case the ip_summed will not be CHECKSUM_UNNECESSARY and the pseudo 3429 * checksum is stored in skb->csum for use in __skb_checksum_complete 3430 * non-zero: value of invalid checksum 3431 * 3432 */ 3433 static inline __sum16 __skb_checksum_validate_complete(struct sk_buff *skb, 3434 bool complete, 3435 __wsum psum) 3436 { 3437 if (skb->ip_summed == CHECKSUM_COMPLETE) { 3438 if (!csum_fold(csum_add(psum, skb->csum))) { 3439 skb->csum_valid = 1; 3440 return 0; 3441 } 3442 } else if (skb->csum_bad) { 3443 /* ip_summed == CHECKSUM_NONE in this case */ 3444 return (__force __sum16)1; 3445 } 3446 3447 skb->csum = psum; 3448 3449 if (complete || skb->len <= CHECKSUM_BREAK) { 3450 __sum16 csum; 3451 3452 csum = __skb_checksum_complete(skb); 3453 skb->csum_valid = !csum; 3454 return csum; 3455 } 3456 3457 return 0; 3458 } 3459 3460 static inline __wsum null_compute_pseudo(struct sk_buff *skb, int proto) 3461 { 3462 return 0; 3463 } 3464 3465 /* Perform checksum validate (init). Note that this is a macro since we only 3466 * want to calculate the pseudo header which is an input function if necessary. 3467 * First we try to validate without any computation (checksum unnecessary) and 3468 * then calculate based on checksum complete calling the function to compute 3469 * pseudo header. 3470 * 3471 * Return values: 3472 * 0: checksum is validated or try to in skb_checksum_complete 3473 * non-zero: value of invalid checksum 3474 */ 3475 #define __skb_checksum_validate(skb, proto, complete, \ 3476 zero_okay, check, compute_pseudo) \ 3477 ({ \ 3478 __sum16 __ret = 0; \ 3479 skb->csum_valid = 0; \ 3480 if (__skb_checksum_validate_needed(skb, zero_okay, check)) \ 3481 __ret = __skb_checksum_validate_complete(skb, \ 3482 complete, compute_pseudo(skb, proto)); \ 3483 __ret; \ 3484 }) 3485 3486 #define skb_checksum_init(skb, proto, compute_pseudo) \ 3487 __skb_checksum_validate(skb, proto, false, false, 0, compute_pseudo) 3488 3489 #define skb_checksum_init_zero_check(skb, proto, check, compute_pseudo) \ 3490 __skb_checksum_validate(skb, proto, false, true, check, compute_pseudo) 3491 3492 #define skb_checksum_validate(skb, proto, compute_pseudo) \ 3493 __skb_checksum_validate(skb, proto, true, false, 0, compute_pseudo) 3494 3495 #define skb_checksum_validate_zero_check(skb, proto, check, \ 3496 compute_pseudo) \ 3497 __skb_checksum_validate(skb, proto, true, true, check, compute_pseudo) 3498 3499 #define skb_checksum_simple_validate(skb) \ 3500 __skb_checksum_validate(skb, 0, true, false, 0, null_compute_pseudo) 3501 3502 static inline bool __skb_checksum_convert_check(struct sk_buff *skb) 3503 { 3504 return (skb->ip_summed == CHECKSUM_NONE && 3505 skb->csum_valid && !skb->csum_bad); 3506 } 3507 3508 static inline void __skb_checksum_convert(struct sk_buff *skb, 3509 __sum16 check, __wsum pseudo) 3510 { 3511 skb->csum = ~pseudo; 3512 skb->ip_summed = CHECKSUM_COMPLETE; 3513 } 3514 3515 #define skb_checksum_try_convert(skb, proto, check, compute_pseudo) \ 3516 do { \ 3517 if (__skb_checksum_convert_check(skb)) \ 3518 __skb_checksum_convert(skb, check, \ 3519 compute_pseudo(skb, proto)); \ 3520 } while (0) 3521 3522 static inline void skb_remcsum_adjust_partial(struct sk_buff *skb, void *ptr, 3523 u16 start, u16 offset) 3524 { 3525 skb->ip_summed = CHECKSUM_PARTIAL; 3526 skb->csum_start = ((unsigned char *)ptr + start) - skb->head; 3527 skb->csum_offset = offset - start; 3528 } 3529 3530 /* Update skbuf and packet to reflect the remote checksum offload operation. 3531 * When called, ptr indicates the starting point for skb->csum when 3532 * ip_summed is CHECKSUM_COMPLETE. If we need create checksum complete 3533 * here, skb_postpull_rcsum is done so skb->csum start is ptr. 3534 */ 3535 static inline void skb_remcsum_process(struct sk_buff *skb, void *ptr, 3536 int start, int offset, bool nopartial) 3537 { 3538 __wsum delta; 3539 3540 if (!nopartial) { 3541 skb_remcsum_adjust_partial(skb, ptr, start, offset); 3542 return; 3543 } 3544 3545 if (unlikely(skb->ip_summed != CHECKSUM_COMPLETE)) { 3546 __skb_checksum_complete(skb); 3547 skb_postpull_rcsum(skb, skb->data, ptr - (void *)skb->data); 3548 } 3549 3550 delta = remcsum_adjust(ptr, skb->csum, start, offset); 3551 3552 /* Adjust skb->csum since we changed the packet */ 3553 skb->csum = csum_add(skb->csum, delta); 3554 } 3555 3556 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) 3557 void nf_conntrack_destroy(struct nf_conntrack *nfct); 3558 static inline void nf_conntrack_put(struct nf_conntrack *nfct) 3559 { 3560 if (nfct && atomic_dec_and_test(&nfct->use)) 3561 nf_conntrack_destroy(nfct); 3562 } 3563 static inline void nf_conntrack_get(struct nf_conntrack *nfct) 3564 { 3565 if (nfct) 3566 atomic_inc(&nfct->use); 3567 } 3568 #endif 3569 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER) 3570 static inline void nf_bridge_put(struct nf_bridge_info *nf_bridge) 3571 { 3572 if (nf_bridge && atomic_dec_and_test(&nf_bridge->use)) 3573 kfree(nf_bridge); 3574 } 3575 static inline void nf_bridge_get(struct nf_bridge_info *nf_bridge) 3576 { 3577 if (nf_bridge) 3578 atomic_inc(&nf_bridge->use); 3579 } 3580 #endif /* CONFIG_BRIDGE_NETFILTER */ 3581 static inline void nf_reset(struct sk_buff *skb) 3582 { 3583 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) 3584 nf_conntrack_put(skb->nfct); 3585 skb->nfct = NULL; 3586 #endif 3587 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER) 3588 nf_bridge_put(skb->nf_bridge); 3589 skb->nf_bridge = NULL; 3590 #endif 3591 } 3592 3593 static inline void nf_reset_trace(struct sk_buff *skb) 3594 { 3595 #if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE) || defined(CONFIG_NF_TABLES) 3596 skb->nf_trace = 0; 3597 #endif 3598 } 3599 3600 /* Note: This doesn't put any conntrack and bridge info in dst. */ 3601 static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src, 3602 bool copy) 3603 { 3604 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) 3605 dst->nfct = src->nfct; 3606 nf_conntrack_get(src->nfct); 3607 if (copy) 3608 dst->nfctinfo = src->nfctinfo; 3609 #endif 3610 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER) 3611 dst->nf_bridge = src->nf_bridge; 3612 nf_bridge_get(src->nf_bridge); 3613 #endif 3614 #if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE) || defined(CONFIG_NF_TABLES) 3615 if (copy) 3616 dst->nf_trace = src->nf_trace; 3617 #endif 3618 } 3619 3620 static inline void nf_copy(struct sk_buff *dst, const struct sk_buff *src) 3621 { 3622 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) 3623 nf_conntrack_put(dst->nfct); 3624 #endif 3625 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER) 3626 nf_bridge_put(dst->nf_bridge); 3627 #endif 3628 __nf_copy(dst, src, true); 3629 } 3630 3631 #ifdef CONFIG_NETWORK_SECMARK 3632 static inline void skb_copy_secmark(struct sk_buff *to, const struct sk_buff *from) 3633 { 3634 to->secmark = from->secmark; 3635 } 3636 3637 static inline void skb_init_secmark(struct sk_buff *skb) 3638 { 3639 skb->secmark = 0; 3640 } 3641 #else 3642 static inline void skb_copy_secmark(struct sk_buff *to, const struct sk_buff *from) 3643 { } 3644 3645 static inline void skb_init_secmark(struct sk_buff *skb) 3646 { } 3647 #endif 3648 3649 static inline bool skb_irq_freeable(const struct sk_buff *skb) 3650 { 3651 return !skb->destructor && 3652 #if IS_ENABLED(CONFIG_XFRM) 3653 !skb->sp && 3654 #endif 3655 #if IS_ENABLED(CONFIG_NF_CONNTRACK) 3656 !skb->nfct && 3657 #endif 3658 !skb->_skb_refdst && 3659 !skb_has_frag_list(skb); 3660 } 3661 3662 static inline void skb_set_queue_mapping(struct sk_buff *skb, u16 queue_mapping) 3663 { 3664 skb->queue_mapping = queue_mapping; 3665 } 3666 3667 static inline u16 skb_get_queue_mapping(const struct sk_buff *skb) 3668 { 3669 return skb->queue_mapping; 3670 } 3671 3672 static inline void skb_copy_queue_mapping(struct sk_buff *to, const struct sk_buff *from) 3673 { 3674 to->queue_mapping = from->queue_mapping; 3675 } 3676 3677 static inline void skb_record_rx_queue(struct sk_buff *skb, u16 rx_queue) 3678 { 3679 skb->queue_mapping = rx_queue + 1; 3680 } 3681 3682 static inline u16 skb_get_rx_queue(const struct sk_buff *skb) 3683 { 3684 return skb->queue_mapping - 1; 3685 } 3686 3687 static inline bool skb_rx_queue_recorded(const struct sk_buff *skb) 3688 { 3689 return skb->queue_mapping != 0; 3690 } 3691 3692 static inline struct sec_path *skb_sec_path(struct sk_buff *skb) 3693 { 3694 #ifdef CONFIG_XFRM 3695 return skb->sp; 3696 #else 3697 return NULL; 3698 #endif 3699 } 3700 3701 /* Keeps track of mac header offset relative to skb->head. 3702 * It is useful for TSO of Tunneling protocol. e.g. GRE. 3703 * For non-tunnel skb it points to skb_mac_header() and for 3704 * tunnel skb it points to outer mac header. 3705 * Keeps track of level of encapsulation of network headers. 3706 */ 3707 struct skb_gso_cb { 3708 union { 3709 int mac_offset; 3710 int data_offset; 3711 }; 3712 int encap_level; 3713 __wsum csum; 3714 __u16 csum_start; 3715 }; 3716 #define SKB_SGO_CB_OFFSET 32 3717 #define SKB_GSO_CB(skb) ((struct skb_gso_cb *)((skb)->cb + SKB_SGO_CB_OFFSET)) 3718 3719 static inline int skb_tnl_header_len(const struct sk_buff *inner_skb) 3720 { 3721 return (skb_mac_header(inner_skb) - inner_skb->head) - 3722 SKB_GSO_CB(inner_skb)->mac_offset; 3723 } 3724 3725 static inline int gso_pskb_expand_head(struct sk_buff *skb, int extra) 3726 { 3727 int new_headroom, headroom; 3728 int ret; 3729 3730 headroom = skb_headroom(skb); 3731 ret = pskb_expand_head(skb, extra, 0, GFP_ATOMIC); 3732 if (ret) 3733 return ret; 3734 3735 new_headroom = skb_headroom(skb); 3736 SKB_GSO_CB(skb)->mac_offset += (new_headroom - headroom); 3737 return 0; 3738 } 3739 3740 static inline void gso_reset_checksum(struct sk_buff *skb, __wsum res) 3741 { 3742 /* Do not update partial checksums if remote checksum is enabled. */ 3743 if (skb->remcsum_offload) 3744 return; 3745 3746 SKB_GSO_CB(skb)->csum = res; 3747 SKB_GSO_CB(skb)->csum_start = skb_checksum_start(skb) - skb->head; 3748 } 3749 3750 /* Compute the checksum for a gso segment. First compute the checksum value 3751 * from the start of transport header to SKB_GSO_CB(skb)->csum_start, and 3752 * then add in skb->csum (checksum from csum_start to end of packet). 3753 * skb->csum and csum_start are then updated to reflect the checksum of the 3754 * resultant packet starting from the transport header-- the resultant checksum 3755 * is in the res argument (i.e. normally zero or ~ of checksum of a pseudo 3756 * header. 3757 */ 3758 static inline __sum16 gso_make_checksum(struct sk_buff *skb, __wsum res) 3759 { 3760 unsigned char *csum_start = skb_transport_header(skb); 3761 int plen = (skb->head + SKB_GSO_CB(skb)->csum_start) - csum_start; 3762 __wsum partial = SKB_GSO_CB(skb)->csum; 3763 3764 SKB_GSO_CB(skb)->csum = res; 3765 SKB_GSO_CB(skb)->csum_start = csum_start - skb->head; 3766 3767 return csum_fold(csum_partial(csum_start, plen, partial)); 3768 } 3769 3770 static inline bool skb_is_gso(const struct sk_buff *skb) 3771 { 3772 return skb_shinfo(skb)->gso_size; 3773 } 3774 3775 /* Note: Should be called only if skb_is_gso(skb) is true */ 3776 static inline bool skb_is_gso_v6(const struct sk_buff *skb) 3777 { 3778 return skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6; 3779 } 3780 3781 static inline void skb_gso_reset(struct sk_buff *skb) 3782 { 3783 skb_shinfo(skb)->gso_size = 0; 3784 skb_shinfo(skb)->gso_segs = 0; 3785 skb_shinfo(skb)->gso_type = 0; 3786 } 3787 3788 void __skb_warn_lro_forwarding(const struct sk_buff *skb); 3789 3790 static inline bool skb_warn_if_lro(const struct sk_buff *skb) 3791 { 3792 /* LRO sets gso_size but not gso_type, whereas if GSO is really 3793 * wanted then gso_type will be set. */ 3794 const struct skb_shared_info *shinfo = skb_shinfo(skb); 3795 3796 if (skb_is_nonlinear(skb) && shinfo->gso_size != 0 && 3797 unlikely(shinfo->gso_type == 0)) { 3798 __skb_warn_lro_forwarding(skb); 3799 return true; 3800 } 3801 return false; 3802 } 3803 3804 static inline void skb_forward_csum(struct sk_buff *skb) 3805 { 3806 /* Unfortunately we don't support this one. Any brave souls? */ 3807 if (skb->ip_summed == CHECKSUM_COMPLETE) 3808 skb->ip_summed = CHECKSUM_NONE; 3809 } 3810 3811 /** 3812 * skb_checksum_none_assert - make sure skb ip_summed is CHECKSUM_NONE 3813 * @skb: skb to check 3814 * 3815 * fresh skbs have their ip_summed set to CHECKSUM_NONE. 3816 * Instead of forcing ip_summed to CHECKSUM_NONE, we can 3817 * use this helper, to document places where we make this assertion. 3818 */ 3819 static inline void skb_checksum_none_assert(const struct sk_buff *skb) 3820 { 3821 #ifdef DEBUG 3822 BUG_ON(skb->ip_summed != CHECKSUM_NONE); 3823 #endif 3824 } 3825 3826 bool skb_partial_csum_set(struct sk_buff *skb, u16 start, u16 off); 3827 3828 int skb_checksum_setup(struct sk_buff *skb, bool recalculate); 3829 struct sk_buff *skb_checksum_trimmed(struct sk_buff *skb, 3830 unsigned int transport_len, 3831 __sum16(*skb_chkf)(struct sk_buff *skb)); 3832 3833 /** 3834 * skb_head_is_locked - Determine if the skb->head is locked down 3835 * @skb: skb to check 3836 * 3837 * The head on skbs build around a head frag can be removed if they are 3838 * not cloned. This function returns true if the skb head is locked down 3839 * due to either being allocated via kmalloc, or by being a clone with 3840 * multiple references to the head. 3841 */ 3842 static inline bool skb_head_is_locked(const struct sk_buff *skb) 3843 { 3844 return !skb->head_frag || skb_cloned(skb); 3845 } 3846 3847 /** 3848 * skb_gso_network_seglen - Return length of individual segments of a gso packet 3849 * 3850 * @skb: GSO skb 3851 * 3852 * skb_gso_network_seglen is used to determine the real size of the 3853 * individual segments, including Layer3 (IP, IPv6) and L4 headers (TCP/UDP). 3854 * 3855 * The MAC/L2 header is not accounted for. 3856 */ 3857 static inline unsigned int skb_gso_network_seglen(const struct sk_buff *skb) 3858 { 3859 unsigned int hdr_len = skb_transport_header(skb) - 3860 skb_network_header(skb); 3861 return hdr_len + skb_gso_transport_seglen(skb); 3862 } 3863 3864 /* Local Checksum Offload. 3865 * Compute outer checksum based on the assumption that the 3866 * inner checksum will be offloaded later. 3867 * See Documentation/networking/checksum-offloads.txt for 3868 * explanation of how this works. 3869 * Fill in outer checksum adjustment (e.g. with sum of outer 3870 * pseudo-header) before calling. 3871 * Also ensure that inner checksum is in linear data area. 3872 */ 3873 static inline __wsum lco_csum(struct sk_buff *skb) 3874 { 3875 unsigned char *csum_start = skb_checksum_start(skb); 3876 unsigned char *l4_hdr = skb_transport_header(skb); 3877 __wsum partial; 3878 3879 /* Start with complement of inner checksum adjustment */ 3880 partial = ~csum_unfold(*(__force __sum16 *)(csum_start + 3881 skb->csum_offset)); 3882 3883 /* Add in checksum of our headers (incl. outer checksum 3884 * adjustment filled in by caller) and return result. 3885 */ 3886 return csum_partial(l4_hdr, csum_start - l4_hdr, partial); 3887 } 3888 3889 #endif /* __KERNEL__ */ 3890 #endif /* _LINUX_SKBUFF_H */

Here is an explanation of a rule violation arisen while checking your driver against a corresponding kernel.

Note that it may be false positive, i.e. there isn't a real error indeed. Please analyze a given error trace and related source code to understand whether there is an error in your driver.

Error trace column contains a path on which the given rule is violated. You can expand/collapse some entity classes by clicking on corresponding checkboxes in a main menu or in an advanced Others menu. Also you can expand/collapse each particular entity by clicking on +/-. In hovering on some entities you can see some tips. Also the error trace is bound with related source code. Line numbers may be shown as links on the left. You can click on them to open corresponding lines in source code.

Source code column contains a content of files related with the error trace. There is source code of your driver (note that there are some LDV modifications at the end), kernel headers and rule model. Tabs show a currently opened file and other available files. In hovering on them you can see full file names. On clicking a corresponding file content will be shown.

Ядро Модуль Правило Верификатор Вердикт Статус Время создания Описание проблемы
linux-4.10-rc1.tar.xz drivers/net/ethernet/adaptec/starfire.ko 331_1a CPAchecker Bug Fixed 2017-01-21 01:54:17 L0260

Комментарий

Reported: 21 Jan 2017

[В начало]