Merge svn+ssh://svn.freebsd.org/base/head@219680
This commit is contained in:
commit
155438b4bd
@ -193,6 +193,7 @@ device ppi # Parallel port interface device
|
||||
#device puc
|
||||
|
||||
# PCI Ethernet NICs.
|
||||
device bxe # Broadcom BCM57710/BCM57711/BCM57711E 10Gb Ethernet
|
||||
device de # DEC/Intel DC21x4x (``Tulip'')
|
||||
device em # Intel PRO/1000 Gigabit Ethernet Family
|
||||
device igb # Intel PRO/1000 PCIE Server Gigabit Family
|
||||
|
@ -56,7 +56,6 @@
|
||||
#ifdef _KERNEL
|
||||
extern char btext[];
|
||||
extern char etext[];
|
||||
extern int tsc_present;
|
||||
|
||||
void cpu_halt(void);
|
||||
void cpu_reset(void);
|
||||
|
@ -5,11 +5,13 @@
|
||||
all:
|
||||
@echo "make sysent only"
|
||||
|
||||
sysent: linux32_sysent.c linux32_syscall.h linux32_proto.h
|
||||
sysent: linux32_sysent.c linux32_syscall.h linux32_proto.h linux32_syscalls.c linux32_systrace_args.c
|
||||
|
||||
linux32_sysent.c linux32_syscall.h linux32_proto.h: ../../kern/makesyscalls.sh \
|
||||
linux32_sysent.c linux32_syscall.h linux32_proto.h linux32_syscalls.c linux32_systrace_args.c: ../../kern/makesyscalls.sh \
|
||||
syscalls.master syscalls.conf
|
||||
-mv -f linux32_sysent.c linux32_sysent.c.bak
|
||||
-mv -f linux32_syscall.h linux32_syscall.h.bak
|
||||
-mv -f linux32_proto.h linux32_proto.h.bak
|
||||
-mv -f linux32_syscalls.c linux32_syscalls.c.bak
|
||||
-mv -f linux32_systrace_args.c linux32_systrace_args.c.bak
|
||||
sh ../../kern/makesyscalls.sh syscalls.master syscalls.conf
|
||||
|
@ -47,7 +47,10 @@ extern u_char linux_debug_map[];
|
||||
MALLOC_DECLARE(M_LINUX);
|
||||
#endif
|
||||
|
||||
#define LINUX32_USRSTACK ((1ul << 32) - PAGE_SIZE)
|
||||
#define LINUX32_MAXUSER ((1ul << 32) - PAGE_SIZE)
|
||||
#define LINUX32_SHAREDPAGE (LINUX32_MAXUSER - PAGE_SIZE)
|
||||
#define LINUX32_USRSTACK LINUX32_SHAREDPAGE
|
||||
|
||||
/* XXX 16 = sizeof(linux32_ps_strings) */
|
||||
#define LINUX32_PS_STRINGS (LINUX32_USRSTACK - 16)
|
||||
#define LINUX32_MAXDSIZ (512 * 1024 * 1024) /* 512MB */
|
||||
|
@ -3,7 +3,7 @@
|
||||
*
|
||||
* DO NOT EDIT-- this file is automatically generated.
|
||||
* $FreeBSD$
|
||||
* created from FreeBSD: head/sys/amd64/linux32/syscalls.master 218610 2011-02-12 15:33:25Z dchagin
|
||||
* created from FreeBSD: head/sys/amd64/linux32/syscalls.master 219559 2011-03-12 08:51:43Z avg
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_SYSPROTO_H_
|
||||
|
@ -3,7 +3,7 @@
|
||||
*
|
||||
* DO NOT EDIT-- this file is automatically generated.
|
||||
* $FreeBSD$
|
||||
* created from FreeBSD: head/sys/amd64/linux32/syscalls.master 218610 2011-02-12 15:33:25Z dchagin
|
||||
* created from FreeBSD: head/sys/amd64/linux32/syscalls.master 219559 2011-03-12 08:51:43Z avg
|
||||
*/
|
||||
|
||||
#define LINUX_SYS_exit 1
|
||||
|
328
sys/amd64/linux32/linux32_syscalls.c
Normal file
328
sys/amd64/linux32/linux32_syscalls.c
Normal file
@ -0,0 +1,328 @@
|
||||
/*
|
||||
* System call names.
|
||||
*
|
||||
* DO NOT EDIT-- this file is automatically generated.
|
||||
* $FreeBSD$
|
||||
* created from FreeBSD: head/sys/amd64/linux32/syscalls.master 219559 2011-03-12 08:51:43Z avg
|
||||
*/
|
||||
|
||||
const char *linux_syscallnames[] = {
|
||||
#define nosys linux_nosys
|
||||
"#0", /* 0 = setup */
|
||||
"exit", /* 1 = exit */
|
||||
"linux_fork", /* 2 = linux_fork */
|
||||
"read", /* 3 = read */
|
||||
"write", /* 4 = write */
|
||||
"linux_open", /* 5 = linux_open */
|
||||
"close", /* 6 = close */
|
||||
"linux_waitpid", /* 7 = linux_waitpid */
|
||||
"linux_creat", /* 8 = linux_creat */
|
||||
"linux_link", /* 9 = linux_link */
|
||||
"linux_unlink", /* 10 = linux_unlink */
|
||||
"linux_execve", /* 11 = linux_execve */
|
||||
"linux_chdir", /* 12 = linux_chdir */
|
||||
"linux_time", /* 13 = linux_time */
|
||||
"linux_mknod", /* 14 = linux_mknod */
|
||||
"linux_chmod", /* 15 = linux_chmod */
|
||||
"linux_lchown16", /* 16 = linux_lchown16 */
|
||||
"#17", /* 17 = break */
|
||||
"linux_stat", /* 18 = linux_stat */
|
||||
"linux_lseek", /* 19 = linux_lseek */
|
||||
"linux_getpid", /* 20 = linux_getpid */
|
||||
"linux_mount", /* 21 = linux_mount */
|
||||
"linux_oldumount", /* 22 = linux_oldumount */
|
||||
"linux_setuid16", /* 23 = linux_setuid16 */
|
||||
"linux_getuid16", /* 24 = linux_getuid16 */
|
||||
"linux_stime", /* 25 = linux_stime */
|
||||
"linux_ptrace", /* 26 = linux_ptrace */
|
||||
"linux_alarm", /* 27 = linux_alarm */
|
||||
"#28", /* 28 = fstat */
|
||||
"linux_pause", /* 29 = linux_pause */
|
||||
"linux_utime", /* 30 = linux_utime */
|
||||
"#31", /* 31 = stty */
|
||||
"#32", /* 32 = gtty */
|
||||
"linux_access", /* 33 = linux_access */
|
||||
"linux_nice", /* 34 = linux_nice */
|
||||
"#35", /* 35 = ftime */
|
||||
"sync", /* 36 = sync */
|
||||
"linux_kill", /* 37 = linux_kill */
|
||||
"linux_rename", /* 38 = linux_rename */
|
||||
"linux_mkdir", /* 39 = linux_mkdir */
|
||||
"linux_rmdir", /* 40 = linux_rmdir */
|
||||
"dup", /* 41 = dup */
|
||||
"linux_pipe", /* 42 = linux_pipe */
|
||||
"linux_times", /* 43 = linux_times */
|
||||
"#44", /* 44 = prof */
|
||||
"linux_brk", /* 45 = linux_brk */
|
||||
"linux_setgid16", /* 46 = linux_setgid16 */
|
||||
"linux_getgid16", /* 47 = linux_getgid16 */
|
||||
"linux_signal", /* 48 = linux_signal */
|
||||
"linux_geteuid16", /* 49 = linux_geteuid16 */
|
||||
"linux_getegid16", /* 50 = linux_getegid16 */
|
||||
"acct", /* 51 = acct */
|
||||
"linux_umount", /* 52 = linux_umount */
|
||||
"#53", /* 53 = lock */
|
||||
"linux_ioctl", /* 54 = linux_ioctl */
|
||||
"linux_fcntl", /* 55 = linux_fcntl */
|
||||
"#56", /* 56 = mpx */
|
||||
"setpgid", /* 57 = setpgid */
|
||||
"#58", /* 58 = ulimit */
|
||||
"linux_olduname", /* 59 = linux_olduname */
|
||||
"umask", /* 60 = umask */
|
||||
"chroot", /* 61 = chroot */
|
||||
"linux_ustat", /* 62 = linux_ustat */
|
||||
"dup2", /* 63 = dup2 */
|
||||
"linux_getppid", /* 64 = linux_getppid */
|
||||
"getpgrp", /* 65 = getpgrp */
|
||||
"setsid", /* 66 = setsid */
|
||||
"linux_sigaction", /* 67 = linux_sigaction */
|
||||
"linux_sgetmask", /* 68 = linux_sgetmask */
|
||||
"linux_ssetmask", /* 69 = linux_ssetmask */
|
||||
"linux_setreuid16", /* 70 = linux_setreuid16 */
|
||||
"linux_setregid16", /* 71 = linux_setregid16 */
|
||||
"linux_sigsuspend", /* 72 = linux_sigsuspend */
|
||||
"linux_sigpending", /* 73 = linux_sigpending */
|
||||
"linux_sethostname", /* 74 = linux_sethostname */
|
||||
"linux_setrlimit", /* 75 = linux_setrlimit */
|
||||
"linux_old_getrlimit", /* 76 = linux_old_getrlimit */
|
||||
"linux_getrusage", /* 77 = linux_getrusage */
|
||||
"linux_gettimeofday", /* 78 = linux_gettimeofday */
|
||||
"linux_settimeofday", /* 79 = linux_settimeofday */
|
||||
"linux_getgroups16", /* 80 = linux_getgroups16 */
|
||||
"linux_setgroups16", /* 81 = linux_setgroups16 */
|
||||
"linux_old_select", /* 82 = linux_old_select */
|
||||
"linux_symlink", /* 83 = linux_symlink */
|
||||
"linux_lstat", /* 84 = linux_lstat */
|
||||
"linux_readlink", /* 85 = linux_readlink */
|
||||
"#86", /* 86 = linux_uselib */
|
||||
"swapon", /* 87 = swapon */
|
||||
"linux_reboot", /* 88 = linux_reboot */
|
||||
"linux_readdir", /* 89 = linux_readdir */
|
||||
"linux_mmap", /* 90 = linux_mmap */
|
||||
"munmap", /* 91 = munmap */
|
||||
"linux_truncate", /* 92 = linux_truncate */
|
||||
"linux_ftruncate", /* 93 = linux_ftruncate */
|
||||
"fchmod", /* 94 = fchmod */
|
||||
"fchown", /* 95 = fchown */
|
||||
"linux_getpriority", /* 96 = linux_getpriority */
|
||||
"setpriority", /* 97 = setpriority */
|
||||
"#98", /* 98 = profil */
|
||||
"linux_statfs", /* 99 = linux_statfs */
|
||||
"linux_fstatfs", /* 100 = linux_fstatfs */
|
||||
"#101", /* 101 = ioperm */
|
||||
"linux_socketcall", /* 102 = linux_socketcall */
|
||||
"linux_syslog", /* 103 = linux_syslog */
|
||||
"linux_setitimer", /* 104 = linux_setitimer */
|
||||
"linux_getitimer", /* 105 = linux_getitimer */
|
||||
"linux_newstat", /* 106 = linux_newstat */
|
||||
"linux_newlstat", /* 107 = linux_newlstat */
|
||||
"linux_newfstat", /* 108 = linux_newfstat */
|
||||
"linux_uname", /* 109 = linux_uname */
|
||||
"linux_iopl", /* 110 = linux_iopl */
|
||||
"linux_vhangup", /* 111 = linux_vhangup */
|
||||
"#112", /* 112 = idle */
|
||||
"#113", /* 113 = vm86old */
|
||||
"linux_wait4", /* 114 = linux_wait4 */
|
||||
"linux_swapoff", /* 115 = linux_swapoff */
|
||||
"linux_sysinfo", /* 116 = linux_sysinfo */
|
||||
"linux_ipc", /* 117 = linux_ipc */
|
||||
"fsync", /* 118 = fsync */
|
||||
"linux_sigreturn", /* 119 = linux_sigreturn */
|
||||
"linux_clone", /* 120 = linux_clone */
|
||||
"linux_setdomainname", /* 121 = linux_setdomainname */
|
||||
"linux_newuname", /* 122 = linux_newuname */
|
||||
"#123", /* 123 = modify_ldt */
|
||||
"linux_adjtimex", /* 124 = linux_adjtimex */
|
||||
"linux_mprotect", /* 125 = linux_mprotect */
|
||||
"linux_sigprocmask", /* 126 = linux_sigprocmask */
|
||||
"linux_create_module", /* 127 = linux_create_module */
|
||||
"linux_init_module", /* 128 = linux_init_module */
|
||||
"linux_delete_module", /* 129 = linux_delete_module */
|
||||
"linux_get_kernel_syms", /* 130 = linux_get_kernel_syms */
|
||||
"linux_quotactl", /* 131 = linux_quotactl */
|
||||
"getpgid", /* 132 = getpgid */
|
||||
"fchdir", /* 133 = fchdir */
|
||||
"linux_bdflush", /* 134 = linux_bdflush */
|
||||
"linux_sysfs", /* 135 = linux_sysfs */
|
||||
"linux_personality", /* 136 = linux_personality */
|
||||
"#137", /* 137 = afs_syscall */
|
||||
"linux_setfsuid16", /* 138 = linux_setfsuid16 */
|
||||
"linux_setfsgid16", /* 139 = linux_setfsgid16 */
|
||||
"linux_llseek", /* 140 = linux_llseek */
|
||||
"linux_getdents", /* 141 = linux_getdents */
|
||||
"linux_select", /* 142 = linux_select */
|
||||
"flock", /* 143 = flock */
|
||||
"linux_msync", /* 144 = linux_msync */
|
||||
"linux_readv", /* 145 = linux_readv */
|
||||
"linux_writev", /* 146 = linux_writev */
|
||||
"linux_getsid", /* 147 = linux_getsid */
|
||||
"linux_fdatasync", /* 148 = linux_fdatasync */
|
||||
"linux_sysctl", /* 149 = linux_sysctl */
|
||||
"mlock", /* 150 = mlock */
|
||||
"munlock", /* 151 = munlock */
|
||||
"mlockall", /* 152 = mlockall */
|
||||
"munlockall", /* 153 = munlockall */
|
||||
"sched_setparam", /* 154 = sched_setparam */
|
||||
"sched_getparam", /* 155 = sched_getparam */
|
||||
"linux_sched_setscheduler", /* 156 = linux_sched_setscheduler */
|
||||
"linux_sched_getscheduler", /* 157 = linux_sched_getscheduler */
|
||||
"sched_yield", /* 158 = sched_yield */
|
||||
"linux_sched_get_priority_max", /* 159 = linux_sched_get_priority_max */
|
||||
"linux_sched_get_priority_min", /* 160 = linux_sched_get_priority_min */
|
||||
"linux_sched_rr_get_interval", /* 161 = linux_sched_rr_get_interval */
|
||||
"linux_nanosleep", /* 162 = linux_nanosleep */
|
||||
"linux_mremap", /* 163 = linux_mremap */
|
||||
"linux_setresuid16", /* 164 = linux_setresuid16 */
|
||||
"linux_getresuid16", /* 165 = linux_getresuid16 */
|
||||
"#166", /* 166 = vm86 */
|
||||
"linux_query_module", /* 167 = linux_query_module */
|
||||
"poll", /* 168 = poll */
|
||||
"linux_nfsservctl", /* 169 = linux_nfsservctl */
|
||||
"linux_setresgid16", /* 170 = linux_setresgid16 */
|
||||
"linux_getresgid16", /* 171 = linux_getresgid16 */
|
||||
"linux_prctl", /* 172 = linux_prctl */
|
||||
"linux_rt_sigreturn", /* 173 = linux_rt_sigreturn */
|
||||
"linux_rt_sigaction", /* 174 = linux_rt_sigaction */
|
||||
"linux_rt_sigprocmask", /* 175 = linux_rt_sigprocmask */
|
||||
"linux_rt_sigpending", /* 176 = linux_rt_sigpending */
|
||||
"linux_rt_sigtimedwait", /* 177 = linux_rt_sigtimedwait */
|
||||
"linux_rt_sigqueueinfo", /* 178 = linux_rt_sigqueueinfo */
|
||||
"linux_rt_sigsuspend", /* 179 = linux_rt_sigsuspend */
|
||||
"linux_pread", /* 180 = linux_pread */
|
||||
"linux_pwrite", /* 181 = linux_pwrite */
|
||||
"linux_chown16", /* 182 = linux_chown16 */
|
||||
"linux_getcwd", /* 183 = linux_getcwd */
|
||||
"linux_capget", /* 184 = linux_capget */
|
||||
"linux_capset", /* 185 = linux_capset */
|
||||
"linux_sigaltstack", /* 186 = linux_sigaltstack */
|
||||
"linux_sendfile", /* 187 = linux_sendfile */
|
||||
"#188", /* 188 = getpmsg */
|
||||
"#189", /* 189 = putpmsg */
|
||||
"linux_vfork", /* 190 = linux_vfork */
|
||||
"linux_getrlimit", /* 191 = linux_getrlimit */
|
||||
"linux_mmap2", /* 192 = linux_mmap2 */
|
||||
"linux_truncate64", /* 193 = linux_truncate64 */
|
||||
"linux_ftruncate64", /* 194 = linux_ftruncate64 */
|
||||
"linux_stat64", /* 195 = linux_stat64 */
|
||||
"linux_lstat64", /* 196 = linux_lstat64 */
|
||||
"linux_fstat64", /* 197 = linux_fstat64 */
|
||||
"linux_lchown", /* 198 = linux_lchown */
|
||||
"linux_getuid", /* 199 = linux_getuid */
|
||||
"linux_getgid", /* 200 = linux_getgid */
|
||||
"geteuid", /* 201 = geteuid */
|
||||
"getegid", /* 202 = getegid */
|
||||
"setreuid", /* 203 = setreuid */
|
||||
"setregid", /* 204 = setregid */
|
||||
"linux_getgroups", /* 205 = linux_getgroups */
|
||||
"linux_setgroups", /* 206 = linux_setgroups */
|
||||
"fchown", /* 207 = fchown */
|
||||
"setresuid", /* 208 = setresuid */
|
||||
"getresuid", /* 209 = getresuid */
|
||||
"setresgid", /* 210 = setresgid */
|
||||
"getresgid", /* 211 = getresgid */
|
||||
"linux_chown", /* 212 = linux_chown */
|
||||
"setuid", /* 213 = setuid */
|
||||
"setgid", /* 214 = setgid */
|
||||
"linux_setfsuid", /* 215 = linux_setfsuid */
|
||||
"linux_setfsgid", /* 216 = linux_setfsgid */
|
||||
"linux_pivot_root", /* 217 = linux_pivot_root */
|
||||
"linux_mincore", /* 218 = linux_mincore */
|
||||
"madvise", /* 219 = madvise */
|
||||
"linux_getdents64", /* 220 = linux_getdents64 */
|
||||
"linux_fcntl64", /* 221 = linux_fcntl64 */
|
||||
"#222", /* 222 = */
|
||||
"#223", /* 223 = */
|
||||
"linux_gettid", /* 224 = linux_gettid */
|
||||
"#225", /* 225 = linux_readahead */
|
||||
"linux_setxattr", /* 226 = linux_setxattr */
|
||||
"linux_lsetxattr", /* 227 = linux_lsetxattr */
|
||||
"linux_fsetxattr", /* 228 = linux_fsetxattr */
|
||||
"linux_getxattr", /* 229 = linux_getxattr */
|
||||
"linux_lgetxattr", /* 230 = linux_lgetxattr */
|
||||
"linux_fgetxattr", /* 231 = linux_fgetxattr */
|
||||
"linux_listxattr", /* 232 = linux_listxattr */
|
||||
"linux_llistxattr", /* 233 = linux_llistxattr */
|
||||
"linux_flistxattr", /* 234 = linux_flistxattr */
|
||||
"linux_removexattr", /* 235 = linux_removexattr */
|
||||
"linux_lremovexattr", /* 236 = linux_lremovexattr */
|
||||
"linux_fremovexattr", /* 237 = linux_fremovexattr */
|
||||
"linux_tkill", /* 238 = linux_tkill */
|
||||
"#239", /* 239 = linux_sendfile64 */
|
||||
"linux_sys_futex", /* 240 = linux_sys_futex */
|
||||
"linux_sched_setaffinity", /* 241 = linux_sched_setaffinity */
|
||||
"linux_sched_getaffinity", /* 242 = linux_sched_getaffinity */
|
||||
"linux_set_thread_area", /* 243 = linux_set_thread_area */
|
||||
"#244", /* 244 = linux_get_thread_area */
|
||||
"#245", /* 245 = linux_io_setup */
|
||||
"#246", /* 246 = linux_io_destroy */
|
||||
"#247", /* 247 = linux_io_getevents */
|
||||
"#248", /* 248 = linux_io_submit */
|
||||
"#249", /* 249 = linux_io_cancel */
|
||||
"linux_fadvise64", /* 250 = linux_fadvise64 */
|
||||
"#251", /* 251 = */
|
||||
"linux_exit_group", /* 252 = linux_exit_group */
|
||||
"linux_lookup_dcookie", /* 253 = linux_lookup_dcookie */
|
||||
"linux_epoll_create", /* 254 = linux_epoll_create */
|
||||
"linux_epoll_ctl", /* 255 = linux_epoll_ctl */
|
||||
"linux_epoll_wait", /* 256 = linux_epoll_wait */
|
||||
"linux_remap_file_pages", /* 257 = linux_remap_file_pages */
|
||||
"linux_set_tid_address", /* 258 = linux_set_tid_address */
|
||||
"linux_timer_create", /* 259 = linux_timer_create */
|
||||
"linux_timer_settime", /* 260 = linux_timer_settime */
|
||||
"linux_timer_gettime", /* 261 = linux_timer_gettime */
|
||||
"linux_timer_getoverrun", /* 262 = linux_timer_getoverrun */
|
||||
"linux_timer_delete", /* 263 = linux_timer_delete */
|
||||
"linux_clock_settime", /* 264 = linux_clock_settime */
|
||||
"linux_clock_gettime", /* 265 = linux_clock_gettime */
|
||||
"linux_clock_getres", /* 266 = linux_clock_getres */
|
||||
"linux_clock_nanosleep", /* 267 = linux_clock_nanosleep */
|
||||
"linux_statfs64", /* 268 = linux_statfs64 */
|
||||
"linux_fstatfs64", /* 269 = linux_fstatfs64 */
|
||||
"linux_tgkill", /* 270 = linux_tgkill */
|
||||
"linux_utimes", /* 271 = linux_utimes */
|
||||
"linux_fadvise64_64", /* 272 = linux_fadvise64_64 */
|
||||
"#273", /* 273 = */
|
||||
"linux_mbind", /* 274 = linux_mbind */
|
||||
"linux_get_mempolicy", /* 275 = linux_get_mempolicy */
|
||||
"linux_set_mempolicy", /* 276 = linux_set_mempolicy */
|
||||
"linux_mq_open", /* 277 = linux_mq_open */
|
||||
"linux_mq_unlink", /* 278 = linux_mq_unlink */
|
||||
"linux_mq_timedsend", /* 279 = linux_mq_timedsend */
|
||||
"linux_mq_timedreceive", /* 280 = linux_mq_timedreceive */
|
||||
"linux_mq_notify", /* 281 = linux_mq_notify */
|
||||
"linux_mq_getsetattr", /* 282 = linux_mq_getsetattr */
|
||||
"linux_kexec_load", /* 283 = linux_kexec_load */
|
||||
"linux_waitid", /* 284 = linux_waitid */
|
||||
"#285", /* 285 = */
|
||||
"linux_add_key", /* 286 = linux_add_key */
|
||||
"linux_request_key", /* 287 = linux_request_key */
|
||||
"linux_keyctl", /* 288 = linux_keyctl */
|
||||
"linux_ioprio_set", /* 289 = linux_ioprio_set */
|
||||
"linux_ioprio_get", /* 290 = linux_ioprio_get */
|
||||
"linux_inotify_init", /* 291 = linux_inotify_init */
|
||||
"linux_inotify_add_watch", /* 292 = linux_inotify_add_watch */
|
||||
"linux_inotify_rm_watch", /* 293 = linux_inotify_rm_watch */
|
||||
"linux_migrate_pages", /* 294 = linux_migrate_pages */
|
||||
"linux_openat", /* 295 = linux_openat */
|
||||
"linux_mkdirat", /* 296 = linux_mkdirat */
|
||||
"linux_mknodat", /* 297 = linux_mknodat */
|
||||
"linux_fchownat", /* 298 = linux_fchownat */
|
||||
"linux_futimesat", /* 299 = linux_futimesat */
|
||||
"linux_fstatat64", /* 300 = linux_fstatat64 */
|
||||
"linux_unlinkat", /* 301 = linux_unlinkat */
|
||||
"linux_renameat", /* 302 = linux_renameat */
|
||||
"linux_linkat", /* 303 = linux_linkat */
|
||||
"linux_symlinkat", /* 304 = linux_symlinkat */
|
||||
"linux_readlinkat", /* 305 = linux_readlinkat */
|
||||
"linux_fchmodat", /* 306 = linux_fchmodat */
|
||||
"linux_faccessat", /* 307 = linux_faccessat */
|
||||
"linux_pselect6", /* 308 = linux_pselect6 */
|
||||
"linux_ppoll", /* 309 = linux_ppoll */
|
||||
"linux_unshare", /* 310 = linux_unshare */
|
||||
"linux_set_robust_list", /* 311 = linux_set_robust_list */
|
||||
"linux_get_robust_list", /* 312 = linux_get_robust_list */
|
||||
"linux_splice", /* 313 = linux_splice */
|
||||
"linux_sync_file_range", /* 314 = linux_sync_file_range */
|
||||
"linux_tee", /* 315 = linux_tee */
|
||||
"linux_vmsplice", /* 316 = linux_vmsplice */
|
||||
};
|
@ -3,7 +3,7 @@
|
||||
*
|
||||
* DO NOT EDIT-- this file is automatically generated.
|
||||
* $FreeBSD$
|
||||
* created from FreeBSD: head/sys/amd64/linux32/syscalls.master 218610 2011-02-12 15:33:25Z dchagin
|
||||
* created from FreeBSD: head/sys/amd64/linux32/syscalls.master 219559 2011-03-12 08:51:43Z avg
|
||||
*/
|
||||
|
||||
#include "opt_compat.h"
|
||||
|
5100
sys/amd64/linux32/linux32_systrace_args.c
Normal file
5100
sys/amd64/linux32/linux32_systrace_args.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -411,8 +411,7 @@ linux_rt_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
* Build context to run handler in.
|
||||
*/
|
||||
regs->tf_rsp = PTROUT(fp);
|
||||
regs->tf_rip = LINUX32_PS_STRINGS - *(p->p_sysent->sv_szsigcode) +
|
||||
linux_sznonrtsigcode;
|
||||
regs->tf_rip = p->p_sysent->sv_sigcode_base + linux_sznonrtsigcode;
|
||||
regs->tf_rflags &= ~(PSL_T | PSL_D);
|
||||
regs->tf_cs = _ucode32sel;
|
||||
regs->tf_ss = _udatasel;
|
||||
@ -535,7 +534,7 @@ linux_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
* Build context to run handler in.
|
||||
*/
|
||||
regs->tf_rsp = PTROUT(fp);
|
||||
regs->tf_rip = LINUX32_PS_STRINGS - *(p->p_sysent->sv_szsigcode);
|
||||
regs->tf_rip = p->p_sysent->sv_sigcode_base;
|
||||
regs->tf_rflags &= ~(PSL_T | PSL_D);
|
||||
regs->tf_cs = _ucode32sel;
|
||||
regs->tf_ss = _udatasel;
|
||||
@ -890,21 +889,15 @@ linux_copyout_strings(struct image_params *imgp)
|
||||
* Also deal with signal trampoline code for this exec type.
|
||||
*/
|
||||
arginfo = (struct linux32_ps_strings *)LINUX32_PS_STRINGS;
|
||||
destp = (caddr_t)arginfo - linux_szsigcode - SPARE_USRSPACE -
|
||||
linux_szplatform - roundup((ARG_MAX - imgp->args->stringspace),
|
||||
destp = (caddr_t)arginfo - SPARE_USRSPACE - linux_szplatform -
|
||||
roundup((ARG_MAX - imgp->args->stringspace),
|
||||
sizeof(char *));
|
||||
|
||||
/*
|
||||
* install sigcode
|
||||
*/
|
||||
copyout(imgp->proc->p_sysent->sv_sigcode,
|
||||
((caddr_t)arginfo - linux_szsigcode), linux_szsigcode);
|
||||
|
||||
/*
|
||||
* Install LINUX_PLATFORM
|
||||
*/
|
||||
copyout(linux_platform, ((caddr_t)arginfo - linux_szsigcode -
|
||||
linux_szplatform), linux_szplatform);
|
||||
copyout(linux_platform, ((caddr_t)arginfo - linux_szplatform),
|
||||
linux_szplatform);
|
||||
|
||||
/*
|
||||
* If we have a valid auxargs ptr, prepare some room
|
||||
@ -1050,7 +1043,7 @@ struct sysentvec elf_linux_sysvec = {
|
||||
.sv_minsigstksz = LINUX_MINSIGSTKSZ,
|
||||
.sv_pagesize = PAGE_SIZE,
|
||||
.sv_minuser = VM_MIN_ADDRESS,
|
||||
.sv_maxuser = LINUX32_USRSTACK,
|
||||
.sv_maxuser = LINUX32_MAXUSER,
|
||||
.sv_usrstack = LINUX32_USRSTACK,
|
||||
.sv_psstrings = LINUX32_PS_STRINGS,
|
||||
.sv_stackprot = VM_PROT_ALL,
|
||||
@ -1058,12 +1051,15 @@ struct sysentvec elf_linux_sysvec = {
|
||||
.sv_setregs = exec_linux_setregs,
|
||||
.sv_fixlimit = linux32_fixlimit,
|
||||
.sv_maxssiz = &linux32_maxssiz,
|
||||
.sv_flags = SV_ABI_LINUX | SV_ILP32 | SV_IA32,
|
||||
.sv_flags = SV_ABI_LINUX | SV_ILP32 | SV_IA32 | SV_SHP,
|
||||
.sv_set_syscall_retval = cpu_set_syscall_retval,
|
||||
.sv_fetch_syscall_args = linux32_fetch_syscall_args,
|
||||
.sv_syscallnames = NULL,
|
||||
.sv_shared_page_base = LINUX32_SHAREDPAGE,
|
||||
.sv_shared_page_len = PAGE_SIZE,
|
||||
.sv_schedtail = linux_schedtail,
|
||||
};
|
||||
INIT_SYSENTVEC(elf_sysvec, &elf_linux_sysvec);
|
||||
|
||||
static char GNU_ABI_VENDOR[] = "GNU";
|
||||
static int GNULINUX_ABI_DESC = 0;
|
||||
|
@ -1,5 +1,5 @@
|
||||
# $FreeBSD$
|
||||
sysnames="/dev/null"
|
||||
sysnames="linux32_syscalls.c"
|
||||
sysproto="linux32_proto.h"
|
||||
sysproto_h=_LINUX_SYSPROTO_H_
|
||||
syshdr="linux32_syscall.h"
|
||||
@ -8,4 +8,4 @@ sysmk="/dev/null"
|
||||
syscallprefix="LINUX_SYS_"
|
||||
switchname="linux_sysent"
|
||||
namesname="linux_syscallnames"
|
||||
systrace="/dev/null"
|
||||
systrace="linux32_systrace_args.c"
|
||||
|
@ -291,7 +291,7 @@
|
||||
l_uid16_t *euid, l_uid16_t *suid); }
|
||||
166 AUE_NULL UNIMPL vm86
|
||||
167 AUE_NULL STD { int linux_query_module(void); }
|
||||
168 AUE_POLL NOPROTO { int poll(struct pollfd*, \
|
||||
168 AUE_POLL NOPROTO { int poll(struct pollfd *fds, \
|
||||
unsigned int nfds, int timeout); }
|
||||
169 AUE_NULL STD { int linux_nfsservctl(void); }
|
||||
170 AUE_SETRESGID STD { int linux_setresgid16(l_gid16_t rgid, \
|
||||
|
@ -16,7 +16,7 @@ get_cyclecount(void)
|
||||
struct bintime bt;
|
||||
|
||||
binuptime(&bt);
|
||||
return (bt.frac ^ bt.sec);
|
||||
return ((uint64_t)bt.sec << 56 | bt.frac >> 8);
|
||||
|
||||
}
|
||||
#endif
|
||||
|
@ -268,6 +268,7 @@ if_bge_load="NO" # Broadcom BCM570x PCI Gigabit Ethernet
|
||||
if_bridge_load="NO" # if_bridge(4) devices
|
||||
if_bwi_load="NO" # Broadcom BCM53xx IEEE 802.11b/g wireness NICs
|
||||
if_bwn_load="NO" # Broadcom BCM43xx IEEE 802.11 wireless NICs
|
||||
if_bxe_load="NO" # Broadcom NetXtreme II 10Gb Ethernet
|
||||
if_carp_load="NO" # carp(4) devices
|
||||
if_cas_load="NO" # Sun Cassini/Cassini+ and NS DP83065 Saturn
|
||||
if_cm_load="NO" # SMC (90c26, 90c56, 90c66)
|
||||
|
@ -20,6 +20,7 @@
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <sys/zfs_context.h>
|
||||
@ -1300,13 +1301,17 @@ dbuf_undirty(dmu_buf_impl_t *db, dmu_tx_t *tx)
|
||||
* it, since one of the current holders may be in the
|
||||
* middle of an update. Note that users of dbuf_undirty()
|
||||
* should not place a hold on the dbuf before the call.
|
||||
* Also note: we can get here with a spill block, so
|
||||
* test for that similar to how dbuf_dirty does.
|
||||
*/
|
||||
if (refcount_count(&db->db_holds) > db->db_dirtycnt) {
|
||||
mutex_exit(&db->db_mtx);
|
||||
/* Make sure we don't toss this buffer at sync phase */
|
||||
if (db->db_blkid != DMU_SPILL_BLKID) {
|
||||
mutex_enter(&dn->dn_mtx);
|
||||
dnode_clear_range(dn, db->db_blkid, 1, tx);
|
||||
mutex_exit(&dn->dn_mtx);
|
||||
}
|
||||
DB_DNODE_EXIT(db);
|
||||
return (0);
|
||||
}
|
||||
@ -1319,11 +1324,18 @@ dbuf_undirty(dmu_buf_impl_t *db, dmu_tx_t *tx)
|
||||
|
||||
*drp = dr->dr_next;
|
||||
|
||||
/*
|
||||
* Note that there are three places in dbuf_dirty()
|
||||
* where this dirty record may be put on a list.
|
||||
* Make sure to do a list_remove corresponding to
|
||||
* every one of those list_insert calls.
|
||||
*/
|
||||
if (dr->dr_parent) {
|
||||
mutex_enter(&dr->dr_parent->dt.di.dr_mtx);
|
||||
list_remove(&dr->dr_parent->dt.di.dr_children, dr);
|
||||
mutex_exit(&dr->dr_parent->dt.di.dr_mtx);
|
||||
} else if (db->db_level+1 == dn->dn_nlevels) {
|
||||
} else if (db->db_blkid == DMU_SPILL_BLKID ||
|
||||
db->db_level+1 == dn->dn_nlevels) {
|
||||
ASSERT(db->db_blkptr == NULL || db->db_parent == dn->dn_dbuf);
|
||||
mutex_enter(&dn->dn_mtx);
|
||||
list_remove(&dn->dn_dirty_records[txg & TXG_MASK], dr);
|
||||
|
@ -59,17 +59,38 @@
|
||||
#include <sys/dtrace.h>
|
||||
|
||||
#ifdef LINUX_SYSTRACE
|
||||
#include <linux.h>
|
||||
#include <linux_syscall.h>
|
||||
#include <linux_proto.h>
|
||||
#include <linux_syscallnames.c>
|
||||
#include <linux_systrace.c>
|
||||
#if defined(__amd64__)
|
||||
#include <amd64/linux32/linux.h>
|
||||
#include <amd64/linux32/linux32_proto.h>
|
||||
#include <amd64/linux32/linux32_syscalls.c>
|
||||
#include <amd64/linux32/linux32_systrace_args.c>
|
||||
#elif defined(__i386__)
|
||||
#include <i386/linux/linux.h>
|
||||
#include <i386/linux/linux_proto.h>
|
||||
#include <i386/linux/linux_syscalls.c>
|
||||
#include <i386/linux/linux_systrace_args.c>
|
||||
#else
|
||||
#error Only i386 and amd64 are supported.
|
||||
#endif
|
||||
extern struct sysent linux_sysent[];
|
||||
#define DEVNAME "dtrace/linsystrace"
|
||||
#define PROVNAME "linsyscall"
|
||||
#define MODNAME "linux32"
|
||||
#define MAXSYSCALL LINUX_SYS_MAXSYSCALL
|
||||
#define SYSCALLNAMES linux_syscallnames
|
||||
#define SYSENT linux_sysent
|
||||
#elif defined(FREEBSD32_SYSTRACE)
|
||||
/*
|
||||
* The syscall arguments are processed into a DTrace argument array
|
||||
* using a generated function. See sys/kern/makesyscalls.sh.
|
||||
*/
|
||||
#include <compat/freebsd32/freebsd32_proto.h>
|
||||
#include <compat/freebsd32/freebsd32_util.h>
|
||||
#include <compat/freebsd32/freebsd32_syscall.h>
|
||||
#include <compat/freebsd32/freebsd32_systrace_args.c>
|
||||
extern const char *freebsd32_syscallnames[];
|
||||
#define MODNAME "freebsd32"
|
||||
#define MAXSYSCALL FREEBSD32_SYS_MAXSYSCALL
|
||||
#define SYSCALLNAMES freebsd32_syscallnames
|
||||
#define SYSENT freebsd32_sysent
|
||||
#else
|
||||
/*
|
||||
* The syscall arguments are processed into a DTrace argument array
|
||||
@ -77,13 +98,15 @@ extern struct sysent linux_sysent[];
|
||||
*/
|
||||
#include <sys/syscall.h>
|
||||
#include <kern/systrace_args.c>
|
||||
#define DEVNAME "dtrace/systrace"
|
||||
#define PROVNAME "syscall"
|
||||
#define MODNAME "freebsd"
|
||||
#define MAXSYSCALL SYS_MAXSYSCALL
|
||||
#define SYSCALLNAMES syscallnames
|
||||
#define SYSENT sysent
|
||||
#endif
|
||||
|
||||
#define PROVNAME "syscall"
|
||||
#define DEVNAME "dtrace/systrace/" MODNAME
|
||||
|
||||
#define SYSTRACE_ARTIFICIAL_FRAMES 1
|
||||
|
||||
#define SYSTRACE_SHIFT 16
|
||||
@ -214,14 +237,14 @@ systrace_provide(void *arg, dtrace_probedesc_t *desc)
|
||||
return;
|
||||
|
||||
for (i = 0; i < MAXSYSCALL; i++) {
|
||||
if (dtrace_probe_lookup(systrace_id, NULL,
|
||||
if (dtrace_probe_lookup(systrace_id, MODNAME,
|
||||
uglyhack.pp_syscallnames[i], "entry") != 0)
|
||||
continue;
|
||||
|
||||
(void) dtrace_probe_create(systrace_id, NULL, uglyhack.pp_syscallnames[i],
|
||||
(void) dtrace_probe_create(systrace_id, MODNAME, uglyhack.pp_syscallnames[i],
|
||||
"entry", SYSTRACE_ARTIFICIAL_FRAMES,
|
||||
(void *)((uintptr_t)SYSTRACE_ENTRY(i)));
|
||||
(void) dtrace_probe_create(systrace_id, NULL, uglyhack.pp_syscallnames[i],
|
||||
(void) dtrace_probe_create(systrace_id, MODNAME, uglyhack.pp_syscallnames[i],
|
||||
"return", SYSTRACE_ARTIFICIAL_FRAMES,
|
||||
(void *)((uintptr_t)SYSTRACE_RETURN(i)));
|
||||
}
|
||||
@ -335,12 +358,16 @@ SYSINIT(systrace_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, systrace_load, NULL
|
||||
SYSUNINIT(systrace_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, systrace_unload, NULL);
|
||||
|
||||
#ifdef LINUX_SYSTRACE
|
||||
DEV_MODULE(linsystrace, systrace_modevent, NULL);
|
||||
MODULE_VERSION(linsystrace, 1);
|
||||
MODULE_DEPEND(linsystrace, linux, 1, 1, 1);
|
||||
MODULE_DEPEND(linsystrace, systrace, 1, 1, 1);
|
||||
MODULE_DEPEND(linsystrace, dtrace, 1, 1, 1);
|
||||
MODULE_DEPEND(linsystrace, opensolaris, 1, 1, 1);
|
||||
DEV_MODULE(systrace_linux32, systrace_modevent, NULL);
|
||||
MODULE_VERSION(systrace_linux32, 1);
|
||||
MODULE_DEPEND(systrace_linux32, linux, 1, 1, 1);
|
||||
MODULE_DEPEND(systrace_linux32, dtrace, 1, 1, 1);
|
||||
MODULE_DEPEND(systrace_linux32, opensolaris, 1, 1, 1);
|
||||
#elif defined(FREEBSD32_SYSTRACE)
|
||||
DEV_MODULE(systrace_freebsd32, systrace_modevent, NULL);
|
||||
MODULE_VERSION(systrace_freebsd32, 1);
|
||||
MODULE_DEPEND(systrace_freebsd32, dtrace, 1, 1, 1);
|
||||
MODULE_DEPEND(systrace_freebsd32, opensolaris, 1, 1, 1);
|
||||
#else
|
||||
DEV_MODULE(systrace, systrace_modevent, NULL);
|
||||
MODULE_VERSION(systrace, 1);
|
||||
|
@ -5,15 +5,17 @@
|
||||
all:
|
||||
@echo "make sysent only"
|
||||
|
||||
sysent: freebsd32_sysent.c freebsd32_syscall.h freebsd32_proto.h
|
||||
sysent: freebsd32_sysent.c freebsd32_syscall.h freebsd32_proto.h freebsd32_systrace_args.c
|
||||
|
||||
freebsd32_sysent.c freebsd32_syscalls.c freebsd32_syscall.h freebsd32_proto.h: \
|
||||
freebsd32_sysent.c freebsd32_syscalls.c freebsd32_syscall.h freebsd32_proto.h freebsd32_systrace_args.c : \
|
||||
../../kern/makesyscalls.sh syscalls.master syscalls.conf
|
||||
-mv -f freebsd32_sysent.c freebsd32_sysent.c.bak
|
||||
-mv -f freebsd32_syscalls.c freebsd32_syscalls.c.bak
|
||||
-mv -f freebsd32_syscall.h freebsd32_syscall.h.bak
|
||||
-mv -f freebsd32_proto.h freebsd32_proto.h.bak
|
||||
-mv -f freebsd32_systrace_args.c freebsd32_systrace_args.c.bak
|
||||
sh ../../kern/makesyscalls.sh syscalls.master syscalls.conf
|
||||
|
||||
clean:
|
||||
rm -f freebsd32_sysent.c freebsd32_syscalls.c freebsd32_syscall.h freebsd32_proto.h
|
||||
rm -f freebsd32_systrace_args.c
|
||||
|
7881
sys/compat/freebsd32/freebsd32_systrace_args.c
Normal file
7881
sys/compat/freebsd32/freebsd32_systrace_args.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -8,4 +8,4 @@ sysmk="/dev/null"
|
||||
syscallprefix="FREEBSD32_SYS_"
|
||||
switchname="freebsd32_sysent"
|
||||
namesname="freebsd32_syscallnames"
|
||||
systrace="/dev/null"
|
||||
systrace="freebsd32_systrace_args.c"
|
||||
|
@ -97,6 +97,7 @@ struct l_msginfo {
|
||||
static void
|
||||
bsd_to_linux_shminfo( struct shminfo *bpp, struct l_shminfo *lpp)
|
||||
{
|
||||
|
||||
lpp->shmmax = bpp->shmmax;
|
||||
lpp->shmmin = bpp->shmmin;
|
||||
lpp->shmmni = bpp->shmmni;
|
||||
@ -107,6 +108,7 @@ bsd_to_linux_shminfo( struct shminfo *bpp, struct l_shminfo *lpp)
|
||||
static void
|
||||
bsd_to_linux_shm_info( struct shm_info *bpp, struct l_shm_info *lpp)
|
||||
{
|
||||
|
||||
lpp->used_ids = bpp->used_ids ;
|
||||
lpp->shm_tot = bpp->shm_tot ;
|
||||
lpp->shm_rss = bpp->shm_rss ;
|
||||
@ -128,6 +130,7 @@ struct l_ipc_perm {
|
||||
static void
|
||||
linux_to_bsd_ipc_perm(struct l_ipc_perm *lpp, struct ipc_perm *bpp)
|
||||
{
|
||||
|
||||
bpp->key = lpp->key;
|
||||
bpp->uid = lpp->uid;
|
||||
bpp->gid = lpp->gid;
|
||||
@ -141,6 +144,7 @@ linux_to_bsd_ipc_perm(struct l_ipc_perm *lpp, struct ipc_perm *bpp)
|
||||
static void
|
||||
bsd_to_linux_ipc_perm(struct ipc_perm *bpp, struct l_ipc_perm *lpp)
|
||||
{
|
||||
|
||||
lpp->key = bpp->key;
|
||||
lpp->uid = bpp->uid;
|
||||
lpp->gid = bpp->gid;
|
||||
@ -202,6 +206,7 @@ struct l_shmid_ds {
|
||||
static void
|
||||
linux_to_bsd_semid_ds(struct l_semid_ds *lsp, struct semid_ds *bsp)
|
||||
{
|
||||
|
||||
linux_to_bsd_ipc_perm(&lsp->sem_perm, &bsp->sem_perm);
|
||||
bsp->sem_otime = lsp->sem_otime;
|
||||
bsp->sem_ctime = lsp->sem_ctime;
|
||||
@ -212,6 +217,7 @@ linux_to_bsd_semid_ds(struct l_semid_ds *lsp, struct semid_ds *bsp)
|
||||
static void
|
||||
bsd_to_linux_semid_ds(struct semid_ds *bsp, struct l_semid_ds *lsp)
|
||||
{
|
||||
|
||||
bsd_to_linux_ipc_perm(&bsp->sem_perm, &lsp->sem_perm);
|
||||
lsp->sem_otime = bsp->sem_otime;
|
||||
lsp->sem_ctime = bsp->sem_ctime;
|
||||
@ -222,6 +228,7 @@ bsd_to_linux_semid_ds(struct semid_ds *bsp, struct l_semid_ds *lsp)
|
||||
static void
|
||||
linux_to_bsd_shmid_ds(struct l_shmid_ds *lsp, struct shmid_ds *bsp)
|
||||
{
|
||||
|
||||
linux_to_bsd_ipc_perm(&lsp->shm_perm, &bsp->shm_perm);
|
||||
bsp->shm_segsz = lsp->shm_segsz;
|
||||
bsp->shm_lpid = lsp->shm_lpid;
|
||||
@ -235,6 +242,7 @@ linux_to_bsd_shmid_ds(struct l_shmid_ds *lsp, struct shmid_ds *bsp)
|
||||
static void
|
||||
bsd_to_linux_shmid_ds(struct shmid_ds *bsp, struct l_shmid_ds *lsp)
|
||||
{
|
||||
|
||||
bsd_to_linux_ipc_perm(&bsp->shm_perm, &lsp->shm_perm);
|
||||
if (bsp->shm_segsz > INT_MAX)
|
||||
lsp->shm_segsz = INT_MAX;
|
||||
@ -255,6 +263,7 @@ bsd_to_linux_shmid_ds(struct shmid_ds *bsp, struct l_shmid_ds *lsp)
|
||||
static void
|
||||
linux_to_bsd_msqid_ds(struct l_msqid_ds *lsp, struct msqid_ds *bsp)
|
||||
{
|
||||
|
||||
linux_to_bsd_ipc_perm(&lsp->msg_perm, &bsp->msg_perm);
|
||||
bsp->msg_cbytes = lsp->msg_cbytes;
|
||||
bsp->msg_qnum = lsp->msg_qnum;
|
||||
@ -269,6 +278,7 @@ linux_to_bsd_msqid_ds(struct l_msqid_ds *lsp, struct msqid_ds *bsp)
|
||||
static void
|
||||
bsd_to_linux_msqid_ds(struct msqid_ds *bsp, struct l_msqid_ds *lsp)
|
||||
{
|
||||
|
||||
bsd_to_linux_ipc_perm(&bsp->msg_perm, &lsp->msg_perm);
|
||||
lsp->msg_cbytes = bsp->msg_cbytes;
|
||||
lsp->msg_qnum = bsp->msg_qnum;
|
||||
@ -315,9 +325,9 @@ linux_msqid_pullup(l_int ver, struct l_msqid_ds *linux_msqid, caddr_t uaddr)
|
||||
linux_msqid->msg_lqbytes = linux_msqid64.msg_qbytes;
|
||||
else
|
||||
linux_msqid->msg_qbytes = linux_msqid64.msg_qbytes;
|
||||
} else {
|
||||
} else
|
||||
error = copyin(uaddr, linux_msqid, sizeof(*linux_msqid));
|
||||
}
|
||||
|
||||
return (error);
|
||||
}
|
||||
|
||||
@ -352,10 +362,9 @@ linux_msqid_pushdown(l_int ver, struct l_msqid_ds *linux_msqid, caddr_t uaddr)
|
||||
linux_msqid64.msg_lrpid = linux_msqid->msg_lrpid;
|
||||
|
||||
return (copyout(&linux_msqid64, uaddr, sizeof(linux_msqid64)));
|
||||
} else {
|
||||
} else
|
||||
return (copyout(linux_msqid, uaddr, sizeof(*linux_msqid)));
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
linux_semid_pullup(l_int ver, struct l_semid_ds *linux_semid, caddr_t uaddr)
|
||||
@ -373,9 +382,9 @@ linux_semid_pullup(l_int ver, struct l_semid_ds *linux_semid, caddr_t uaddr)
|
||||
linux_semid->sem_perm.uid = linux_semid64.sem_perm.uid;
|
||||
linux_semid->sem_perm.gid = linux_semid64.sem_perm.gid;
|
||||
linux_semid->sem_perm.mode = linux_semid64.sem_perm.mode;
|
||||
} else {
|
||||
} else
|
||||
error = copyin(uaddr, linux_semid, sizeof(*linux_semid));
|
||||
}
|
||||
|
||||
return (error);
|
||||
}
|
||||
|
||||
@ -395,10 +404,9 @@ linux_semid_pushdown(l_int ver, struct l_semid_ds *linux_semid, caddr_t uaddr)
|
||||
linux_semid64.sem_nsems = linux_semid->sem_nsems;
|
||||
|
||||
return (copyout(&linux_semid64, uaddr, sizeof(linux_semid64)));
|
||||
} else {
|
||||
} else
|
||||
return (copyout(linux_semid, uaddr, sizeof(*linux_semid)));
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
linux_shmid_pullup(l_int ver, struct l_shmid_ds *linux_shmid, caddr_t uaddr)
|
||||
@ -416,9 +424,9 @@ linux_shmid_pullup(l_int ver, struct l_shmid_ds *linux_shmid, caddr_t uaddr)
|
||||
linux_shmid->shm_perm.uid = linux_shmid64.shm_perm.uid;
|
||||
linux_shmid->shm_perm.gid = linux_shmid64.shm_perm.gid;
|
||||
linux_shmid->shm_perm.mode = linux_shmid64.shm_perm.mode;
|
||||
} else {
|
||||
} else
|
||||
error = copyin(uaddr, linux_shmid, sizeof(*linux_shmid));
|
||||
}
|
||||
|
||||
return (error);
|
||||
}
|
||||
|
||||
@ -451,10 +459,9 @@ linux_shmid_pushdown(l_int ver, struct l_shmid_ds *linux_shmid, caddr_t uaddr)
|
||||
linux_shmid64.shm_nattch = linux_shmid->shm_nattch;
|
||||
|
||||
return (copyout(&linux_shmid64, uaddr, sizeof(linux_shmid64)));
|
||||
} else {
|
||||
} else
|
||||
return (copyout(linux_shmid, uaddr, sizeof(*linux_shmid)));
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
linux_shminfo_pushdown(l_int ver, struct l_shminfo *linux_shminfo,
|
||||
@ -473,10 +480,9 @@ linux_shminfo_pushdown(l_int ver, struct l_shminfo *linux_shminfo,
|
||||
|
||||
return (copyout(&linux_shminfo64, uaddr,
|
||||
sizeof(linux_shminfo64)));
|
||||
} else {
|
||||
} else
|
||||
return (copyout(linux_shminfo, uaddr, sizeof(*linux_shminfo)));
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
linux_semop(struct thread *td, struct linux_semop_args *args)
|
||||
@ -490,7 +496,7 @@ linux_semop(struct thread *td, struct linux_semop_args *args)
|
||||
bsd_args.semid = args->semid;
|
||||
bsd_args.sops = PTRIN(args->tsops);
|
||||
bsd_args.nsops = args->nsops;
|
||||
return semop(td, &bsd_args);
|
||||
return (semop(td, &bsd_args));
|
||||
}
|
||||
|
||||
int
|
||||
@ -507,7 +513,7 @@ linux_semget(struct thread *td, struct linux_semget_args *args)
|
||||
bsd_args.key = args->key;
|
||||
bsd_args.nsems = args->nsems;
|
||||
bsd_args.semflg = args->semflg;
|
||||
return semget(td, &bsd_args);
|
||||
return (semget(td, &bsd_args));
|
||||
}
|
||||
|
||||
int
|
||||
@ -579,9 +585,9 @@ linux_semctl(struct thread *td, struct linux_semctl_args *args)
|
||||
error = copyout(&linux_seminfo,
|
||||
PTRIN(args->arg.buf), sizeof(linux_seminfo));
|
||||
if (error)
|
||||
return error;
|
||||
return (error);
|
||||
td->td_retval[0] = seminfo.semmni;
|
||||
return 0; /* No need for __semctl call */
|
||||
return (0); /* No need for __semctl call */
|
||||
case LINUX_GETALL:
|
||||
cmd = GETALL;
|
||||
semun.val = args->arg.val;
|
||||
@ -593,7 +599,7 @@ linux_semctl(struct thread *td, struct linux_semctl_args *args)
|
||||
default:
|
||||
linux_msg(td, "ipc type %d is not implemented",
|
||||
args->cmd & ~LINUX_IPC_64);
|
||||
return EINVAL;
|
||||
return (EINVAL);
|
||||
}
|
||||
return (kern_semctl(td, args->semid, args->semnum, cmd, &semun,
|
||||
td->td_retval));
|
||||
@ -647,7 +653,7 @@ linux_msgget(struct thread *td, struct linux_msgget_args *args)
|
||||
|
||||
bsd_args.key = args->key;
|
||||
bsd_args.msgflg = args->msgflg;
|
||||
return msgget(td, &bsd_args);
|
||||
return (msgget(td, &bsd_args));
|
||||
}
|
||||
|
||||
int
|
||||
@ -740,14 +746,14 @@ linux_shmat(struct thread *td, struct linux_shmat_args *args)
|
||||
bsd_args.shmaddr = PTRIN(args->shmaddr);
|
||||
bsd_args.shmflg = args->shmflg;
|
||||
if ((error = shmat(td, &bsd_args)))
|
||||
return error;
|
||||
return (error);
|
||||
#if defined(__i386__) || (defined(__amd64__) && defined(COMPAT_LINUX32))
|
||||
addr = td->td_retval[0];
|
||||
if ((error = copyout(&addr, PTRIN(args->raddr), sizeof(addr))))
|
||||
return error;
|
||||
return (error);
|
||||
td->td_retval[0] = 0;
|
||||
#endif
|
||||
return 0;
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
@ -758,7 +764,7 @@ linux_shmdt(struct thread *td, struct linux_shmdt_args *args)
|
||||
} */ bsd_args;
|
||||
|
||||
bsd_args.shmaddr = PTRIN(args->shmaddr);
|
||||
return shmdt(td, &bsd_args);
|
||||
return (shmdt(td, &bsd_args));
|
||||
}
|
||||
|
||||
int
|
||||
@ -773,7 +779,7 @@ linux_shmget(struct thread *td, struct linux_shmget_args *args)
|
||||
bsd_args.key = args->key;
|
||||
bsd_args.size = args->size;
|
||||
bsd_args.shmflg = args->shmflg;
|
||||
return shmget(td, &bsd_args);
|
||||
return (shmget(td, &bsd_args));
|
||||
}
|
||||
|
||||
int
|
||||
@ -794,7 +800,7 @@ linux_shmctl(struct thread *td, struct linux_shmctl_args *args)
|
||||
error = kern_shmctl(td, args->shmid, IPC_INFO,
|
||||
(void *)&bsd_shminfo, NULL);
|
||||
if (error)
|
||||
return error;
|
||||
return (error);
|
||||
|
||||
bsd_to_linux_shminfo(&bsd_shminfo, &linux_shminfo);
|
||||
|
||||
@ -809,12 +815,12 @@ linux_shmctl(struct thread *td, struct linux_shmctl_args *args)
|
||||
error = kern_shmctl(td, args->shmid, SHM_INFO,
|
||||
(void *)&bsd_shm_info, NULL);
|
||||
if (error)
|
||||
return error;
|
||||
return (error);
|
||||
|
||||
bsd_to_linux_shm_info(&bsd_shm_info, &linux_shm_info);
|
||||
|
||||
return copyout(&linux_shm_info, PTRIN(args->buf),
|
||||
sizeof(struct l_shm_info));
|
||||
return (copyout(&linux_shm_info, PTRIN(args->buf),
|
||||
sizeof(struct l_shm_info)));
|
||||
}
|
||||
|
||||
case LINUX_IPC_STAT:
|
||||
@ -822,7 +828,7 @@ linux_shmctl(struct thread *td, struct linux_shmctl_args *args)
|
||||
error = kern_shmctl(td, args->shmid, IPC_STAT,
|
||||
(void *)&bsd_shmid, NULL);
|
||||
if (error)
|
||||
return error;
|
||||
return (error);
|
||||
|
||||
bsd_to_linux_shmid_ds(&bsd_shmid, &linux_shmid);
|
||||
|
||||
@ -834,7 +840,7 @@ linux_shmctl(struct thread *td, struct linux_shmctl_args *args)
|
||||
error = kern_shmctl(td, args->shmid, IPC_STAT,
|
||||
(void *)&bsd_shmid, NULL);
|
||||
if (error)
|
||||
return error;
|
||||
return (error);
|
||||
|
||||
bsd_to_linux_shmid_ds(&bsd_shmid, &linux_shmid);
|
||||
|
||||
@ -845,13 +851,13 @@ linux_shmctl(struct thread *td, struct linux_shmctl_args *args)
|
||||
error = linux_shmid_pullup(args->cmd & LINUX_IPC_64,
|
||||
&linux_shmid, PTRIN(args->buf));
|
||||
if (error)
|
||||
return error;
|
||||
return (error);
|
||||
|
||||
linux_to_bsd_shmid_ds(&linux_shmid, &bsd_shmid);
|
||||
|
||||
/* Perform shmctl wanting removed segments lookup */
|
||||
return kern_shmctl(td, args->shmid, IPC_SET,
|
||||
(void *)&bsd_shmid, NULL);
|
||||
return (kern_shmctl(td, args->shmid, IPC_SET,
|
||||
(void *)&bsd_shmid, NULL));
|
||||
|
||||
case LINUX_IPC_RMID: {
|
||||
void *buf;
|
||||
@ -862,18 +868,21 @@ linux_shmctl(struct thread *td, struct linux_shmctl_args *args)
|
||||
error = linux_shmid_pullup(args->cmd & LINUX_IPC_64,
|
||||
&linux_shmid, PTRIN(args->buf));
|
||||
if (error)
|
||||
return error;
|
||||
return (error);
|
||||
linux_to_bsd_shmid_ds(&linux_shmid, &bsd_shmid);
|
||||
buf = (void *)&bsd_shmid;
|
||||
}
|
||||
return kern_shmctl(td, args->shmid, IPC_RMID, buf, NULL);
|
||||
return (kern_shmctl(td, args->shmid, IPC_RMID, buf, NULL));
|
||||
}
|
||||
|
||||
case LINUX_SHM_LOCK:
|
||||
/* FALLTHROUGH */
|
||||
case LINUX_SHM_UNLOCK:
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
linux_msg(td, "ipc type %d not implemented", args->cmd & ~LINUX_IPC_64);
|
||||
return EINVAL;
|
||||
linux_msg(td, "ipc type %d not implemented",
|
||||
args->cmd & ~LINUX_IPC_64);
|
||||
return (EINVAL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -69,6 +69,10 @@ static unsigned linux_osd_jail_slot;
|
||||
SYSCTL_NODE(_compat, OID_AUTO, linux, CTLFLAG_RW, 0,
|
||||
"Linux mode");
|
||||
|
||||
static int linux_set_osname(struct thread *td, char *osname);
|
||||
static int linux_set_osrelease(struct thread *td, char *osrelease);
|
||||
static int linux_set_oss_version(struct thread *td, int oss_version);
|
||||
|
||||
static int
|
||||
linux_sysctl_osname(SYSCTL_HANDLER_ARGS)
|
||||
{
|
||||
@ -469,7 +473,7 @@ linux_get_osname(struct thread *td, char *dst)
|
||||
mtx_unlock(&pr->pr_mtx);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
linux_set_osname(struct thread *td, char *osname)
|
||||
{
|
||||
struct prison *pr;
|
||||
@ -505,7 +509,7 @@ linux_kernver(struct thread *td)
|
||||
return (osrel);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
linux_set_osrelease(struct thread *td, char *osrelease)
|
||||
{
|
||||
struct prison *pr;
|
||||
@ -533,7 +537,7 @@ linux_get_oss_version(struct thread *td)
|
||||
return (version);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
linux_set_oss_version(struct thread *td, int oss_version)
|
||||
{
|
||||
struct prison *pr;
|
||||
|
@ -35,13 +35,10 @@ void linux_osd_jail_register(void);
|
||||
void linux_osd_jail_deregister(void);
|
||||
|
||||
void linux_get_osname(struct thread *td, char *dst);
|
||||
int linux_set_osname(struct thread *td, char *osname);
|
||||
|
||||
void linux_get_osrelease(struct thread *td, char *dst);
|
||||
int linux_set_osrelease(struct thread *td, char *osrelease);
|
||||
|
||||
int linux_get_oss_version(struct thread *td);
|
||||
int linux_set_oss_version(struct thread *td, int oss_version);
|
||||
|
||||
int linux_kernver(struct thread *td);
|
||||
|
||||
|
@ -1900,6 +1900,8 @@ device xmphy # XaQti XMAC II
|
||||
# BCM570x family of controllers, including the 3Com 3c996-T,
|
||||
# the Netgear GA302T, the SysKonnect SK-9D21 and SK-9D41, and
|
||||
# the embedded gigE NICs on Dell PowerEdge 2550 servers.
|
||||
# bxe: Broadcom NetXtreme II (BCM57710/57711/57711E) PCIe 10b Ethernet
|
||||
# adapters.
|
||||
# bwi: Broadcom BCM430* and BCM431* family of wireless adapters.
|
||||
# bwn: Broadcom BCM43xx family of wireless adapters.
|
||||
# cas: Sun Cassini/Cassini+ and National Semiconductor DP83065 Saturn
|
||||
@ -2078,6 +2080,7 @@ device wb # Winbond W89C840F
|
||||
device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
|
||||
|
||||
# PCI Ethernet NICs.
|
||||
device bxe # Broadcom BCM57710/BCM57711/BCM57711E 10Gb Ethernet
|
||||
device cxgbe # Chelsio T4 10GbE PCIe adapter
|
||||
device de # DEC/Intel DC21x4x (``Tulip'')
|
||||
device em # Intel Pro/1000 Gigabit Ethernet
|
||||
|
@ -819,6 +819,8 @@ dev/bwi/bwirf.c optional bwi
|
||||
dev/bwi/if_bwi.c optional bwi
|
||||
dev/bwi/if_bwi_pci.c optional bwi pci
|
||||
dev/bwn/if_bwn.c optional bwn siba_bwn
|
||||
dev/bxe/if_bxe.c optional bxe
|
||||
dev/bxe/bxe_link.c optional bxe
|
||||
dev/cardbus/cardbus.c optional cardbus
|
||||
dev/cardbus/cardbus_cis.c optional cardbus
|
||||
dev/cardbus/cardbus_device.c optional cardbus
|
||||
@ -2626,7 +2628,7 @@ netinet/in_gif.c optional gif inet | netgraph_gif inet
|
||||
netinet/ip_gre.c optional gre inet
|
||||
netinet/ip_id.c optional inet
|
||||
netinet/in_mcast.c optional inet
|
||||
netinet/in_pcb.c optional inet
|
||||
netinet/in_pcb.c optional inet | inet6
|
||||
netinet/in_proto.c optional inet \
|
||||
compile-with "${NORMAL_C} -I$S/contrib/pf"
|
||||
netinet/in_rmx.c optional inet
|
||||
|
@ -702,8 +702,13 @@ ED_SIC opt_ed.h
|
||||
BCE_DEBUG opt_bce.h
|
||||
BCE_NVRAM_WRITE_SUPPORT opt_bce.h
|
||||
|
||||
# bxe driver
|
||||
BXE_DEBUG opt_bxe.h
|
||||
BXE_NVRAM_WRITE_SUPPORT opt_bxe.h
|
||||
|
||||
SOCKBUF_DEBUG opt_global.h
|
||||
|
||||
|
||||
# options for ubsec driver
|
||||
UBSEC_DEBUG opt_ubsec.h
|
||||
UBSEC_RNDTEST opt_ubsec.h
|
||||
|
@ -78,10 +78,12 @@
|
||||
#include <machine/clock.h>
|
||||
#endif
|
||||
#if defined(__amd64__) || defined(__i386__)
|
||||
#include <machine/cpu.h> /* for cpu_feature or tsc_present */
|
||||
#include <machine/cpufunc.h> /* for pentium tsc */
|
||||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
#include <machine/specialreg.h> /* for CPUID_TSC */
|
||||
#ifdef __FreeBSD__
|
||||
#include <machine/md_var.h> /* for cpu_feature */
|
||||
#elif defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
#include <machine/cpu.h> /* for cpu_feature */
|
||||
#endif
|
||||
#endif /* __amd64 || __i386__ */
|
||||
|
||||
@ -927,7 +929,7 @@ init_machclk_setup(void)
|
||||
#if defined(__amd64__) || defined(__i386__)
|
||||
/* check if TSC is available */
|
||||
#ifdef __FreeBSD__
|
||||
if (!tsc_present || tsc_freq == 0)
|
||||
if ((cpu_feature & CPUID_TSC) == 0 || tsc_freq == 0)
|
||||
#else
|
||||
if ((cpu_feature & CPUID_TSC) == 0)
|
||||
#endif
|
||||
|
@ -6099,7 +6099,8 @@ ahd_alloc_scbs(struct ahd_softc *ahd)
|
||||
/* Allocate the next batch of hardware SCBs */
|
||||
if (aic_dmamem_alloc(ahd, scb_data->hscb_dmat,
|
||||
(void **)&hscb_map->vaddr,
|
||||
BUS_DMA_NOWAIT, &hscb_map->dmamap) != 0) {
|
||||
BUS_DMA_NOWAIT | BUS_DMA_COHERENT,
|
||||
&hscb_map->dmamap) != 0) {
|
||||
free(hscb_map, M_DEVBUF);
|
||||
return (0);
|
||||
}
|
||||
@ -6132,7 +6133,8 @@ ahd_alloc_scbs(struct ahd_softc *ahd)
|
||||
/* Allocate the next batch of S/G lists */
|
||||
if (aic_dmamem_alloc(ahd, scb_data->sg_dmat,
|
||||
(void **)&sg_map->vaddr,
|
||||
BUS_DMA_NOWAIT, &sg_map->dmamap) != 0) {
|
||||
BUS_DMA_NOWAIT | BUS_DMA_COHERENT,
|
||||
&sg_map->dmamap) != 0) {
|
||||
free(sg_map, M_DEVBUF);
|
||||
return (0);
|
||||
}
|
||||
@ -6397,7 +6399,7 @@ ahd_init(struct ahd_softc *ahd)
|
||||
/* Allocation of driver data */
|
||||
if (aic_dmamem_alloc(ahd, ahd->shared_data_dmat,
|
||||
(void **)&ahd->shared_data_map.vaddr,
|
||||
BUS_DMA_NOWAIT,
|
||||
BUS_DMA_NOWAIT | BUS_DMA_COHERENT,
|
||||
&ahd->shared_data_map.dmamap) != 0) {
|
||||
return (ENOMEM);
|
||||
}
|
||||
|
@ -4381,7 +4381,8 @@ ahc_init_scbdata(struct ahc_softc *ahc)
|
||||
/* Allocation for our hscbs */
|
||||
if (aic_dmamem_alloc(ahc, scb_data->hscb_dmat,
|
||||
(void **)&scb_data->hscbs,
|
||||
BUS_DMA_NOWAIT, &scb_data->hscb_dmamap) != 0) {
|
||||
BUS_DMA_NOWAIT | BUS_DMA_COHERENT,
|
||||
&scb_data->hscb_dmamap) != 0) {
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
@ -4549,7 +4550,8 @@ ahc_alloc_scbs(struct ahc_softc *ahc)
|
||||
/* Allocate S/G space for the next batch of SCBS */
|
||||
if (aic_dmamem_alloc(ahc, scb_data->sg_dmat,
|
||||
(void **)&sg_map->sg_vaddr,
|
||||
BUS_DMA_NOWAIT, &sg_map->sg_dmamap) != 0) {
|
||||
BUS_DMA_NOWAIT | BUS_DMA_COHERENT,
|
||||
&sg_map->sg_dmamap) != 0) {
|
||||
free(sg_map, M_DEVBUF);
|
||||
return (0);
|
||||
}
|
||||
@ -4941,7 +4943,8 @@ ahc_init(struct ahc_softc *ahc)
|
||||
/* Allocation of driver data */
|
||||
if (aic_dmamem_alloc(ahc, ahc->shared_data_dmat,
|
||||
(void **)&ahc->qoutfifo,
|
||||
BUS_DMA_NOWAIT, &ahc->shared_data_dmamap) != 0) {
|
||||
BUS_DMA_NOWAIT | BUS_DMA_COHERENT,
|
||||
&ahc->shared_data_dmamap) != 0) {
|
||||
return (ENOMEM);
|
||||
}
|
||||
|
||||
|
@ -986,3 +986,115 @@ ath_hal_ini_bank_write(struct ath_hal *ah, const HAL_INI_ARRAY *ia,
|
||||
}
|
||||
return regWr;
|
||||
}
|
||||
|
||||
/*
|
||||
* These are EEPROM board related routines which should likely live in
|
||||
* a helper library of some sort.
|
||||
*/
|
||||
|
||||
/**************************************************************
|
||||
* ath_ee_getLowerUppderIndex
|
||||
*
|
||||
* Return indices surrounding the value in sorted integer lists.
|
||||
* Requirement: the input list must be monotonically increasing
|
||||
* and populated up to the list size
|
||||
* Returns: match is set if an index in the array matches exactly
|
||||
* or a the target is before or after the range of the array.
|
||||
*/
|
||||
HAL_BOOL
|
||||
ath_ee_getLowerUpperIndex(uint8_t target, uint8_t *pList, uint16_t listSize,
|
||||
uint16_t *indexL, uint16_t *indexR)
|
||||
{
|
||||
uint16_t i;
|
||||
|
||||
/*
|
||||
* Check first and last elements for beyond ordered array cases.
|
||||
*/
|
||||
if (target <= pList[0]) {
|
||||
*indexL = *indexR = 0;
|
||||
return AH_TRUE;
|
||||
}
|
||||
if (target >= pList[listSize-1]) {
|
||||
*indexL = *indexR = (uint16_t)(listSize - 1);
|
||||
return AH_TRUE;
|
||||
}
|
||||
|
||||
/* look for value being near or between 2 values in list */
|
||||
for (i = 0; i < listSize - 1; i++) {
|
||||
/*
|
||||
* If value is close to the current value of the list
|
||||
* then target is not between values, it is one of the values
|
||||
*/
|
||||
if (pList[i] == target) {
|
||||
*indexL = *indexR = i;
|
||||
return AH_TRUE;
|
||||
}
|
||||
/*
|
||||
* Look for value being between current value and next value
|
||||
* if so return these 2 values
|
||||
*/
|
||||
if (target < pList[i + 1]) {
|
||||
*indexL = i;
|
||||
*indexR = (uint16_t)(i + 1);
|
||||
return AH_FALSE;
|
||||
}
|
||||
}
|
||||
HALASSERT(0);
|
||||
*indexL = *indexR = 0;
|
||||
return AH_FALSE;
|
||||
}
|
||||
|
||||
/**************************************************************
|
||||
* ath_ee_FillVpdTable
|
||||
*
|
||||
* Fill the Vpdlist for indices Pmax-Pmin
|
||||
* Note: pwrMin, pwrMax and Vpdlist are all in dBm * 4
|
||||
*/
|
||||
HAL_BOOL
|
||||
ath_ee_FillVpdTable(uint8_t pwrMin, uint8_t pwrMax, uint8_t *pPwrList,
|
||||
uint8_t *pVpdList, uint16_t numIntercepts, uint8_t *pRetVpdList)
|
||||
{
|
||||
uint16_t i, k;
|
||||
uint8_t currPwr = pwrMin;
|
||||
uint16_t idxL, idxR;
|
||||
|
||||
HALASSERT(pwrMax > pwrMin);
|
||||
for (i = 0; i <= (pwrMax - pwrMin) / 2; i++) {
|
||||
ath_ee_getLowerUpperIndex(currPwr, pPwrList, numIntercepts,
|
||||
&(idxL), &(idxR));
|
||||
if (idxR < 1)
|
||||
idxR = 1; /* extrapolate below */
|
||||
if (idxL == numIntercepts - 1)
|
||||
idxL = (uint16_t)(numIntercepts - 2); /* extrapolate above */
|
||||
if (pPwrList[idxL] == pPwrList[idxR])
|
||||
k = pVpdList[idxL];
|
||||
else
|
||||
k = (uint16_t)( ((currPwr - pPwrList[idxL]) * pVpdList[idxR] + (pPwrList[idxR] - currPwr) * pVpdList[idxL]) /
|
||||
(pPwrList[idxR] - pPwrList[idxL]) );
|
||||
HALASSERT(k < 256);
|
||||
pRetVpdList[i] = (uint8_t)k;
|
||||
currPwr += 2; /* half dB steps */
|
||||
}
|
||||
|
||||
return AH_TRUE;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* ath_ee_interpolate
|
||||
*
|
||||
* Returns signed interpolated or the scaled up interpolated value
|
||||
*/
|
||||
int16_t
|
||||
ath_ee_interpolate(uint16_t target, uint16_t srcLeft, uint16_t srcRight,
|
||||
int16_t targetLeft, int16_t targetRight)
|
||||
{
|
||||
int16_t rv;
|
||||
|
||||
if (srcRight == srcLeft) {
|
||||
rv = targetLeft;
|
||||
} else {
|
||||
rv = (int16_t)( ((target - srcLeft) * targetRight +
|
||||
(srcRight - target) * targetLeft) / (srcRight - srcLeft) );
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
@ -784,4 +784,14 @@ extern int ath_hal_ini_bank_write(struct ath_hal *ah, const HAL_INI_ARRAY *ia,
|
||||
#define TURBO_SYMBOL_TIME 4
|
||||
|
||||
#define WLAN_CTRL_FRAME_SIZE (2+2+6+4) /* ACK+FCS */
|
||||
|
||||
/* Generic EEPROM board value functions */
|
||||
extern HAL_BOOL ath_ee_getLowerUpperIndex(uint8_t target, uint8_t *pList,
|
||||
uint16_t listSize, uint16_t *indexL, uint16_t *indexR);
|
||||
extern HAL_BOOL ath_ee_FillVpdTable(uint8_t pwrMin, uint8_t pwrMax,
|
||||
uint8_t *pPwrList, uint8_t *pVpdList, uint16_t numIntercepts,
|
||||
uint8_t *pRetVpdList);
|
||||
extern int16_t ath_ee_interpolate(uint16_t target, uint16_t srcLeft,
|
||||
uint16_t srcRight, int16_t targetLeft, int16_t targetRight);
|
||||
|
||||
#endif /* _ATH_AH_INTERAL_H_ */
|
||||
|
@ -386,12 +386,29 @@ ar2133GetChannelMaxMinPower(struct ath_hal *ah,
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* The ordering of nfarray is thus:
|
||||
*
|
||||
* nfarray[0]: Chain 0 ctl
|
||||
* nfarray[1]: Chain 1 ctl
|
||||
* nfarray[2]: Chain 2 ctl
|
||||
* nfarray[3]: Chain 0 ext
|
||||
* nfarray[4]: Chain 1 ext
|
||||
* nfarray[5]: Chain 2 ext
|
||||
*/
|
||||
static void
|
||||
ar2133GetNoiseFloor(struct ath_hal *ah, int16_t nfarray[])
|
||||
{
|
||||
struct ath_hal_5416 *ahp = AH5416(ah);
|
||||
int16_t nf;
|
||||
|
||||
/*
|
||||
* Blank nf array - some chips may only
|
||||
* have one or two RX chainmasks enabled.
|
||||
*/
|
||||
nfarray[0] = nfarray[1] = nfarray[2] = 0;
|
||||
nfarray[3] = nfarray[4] = nfarray[5] = 0;
|
||||
|
||||
switch (ahp->ah_rx_chainmask) {
|
||||
case 0x7:
|
||||
nf = MS(OS_REG_READ(ah, AR_PHY_CH2_CCA), AR_PHY_CH2_MINCCA_PWR);
|
||||
@ -399,7 +416,7 @@ ar2133GetNoiseFloor(struct ath_hal *ah, int16_t nfarray[])
|
||||
nf = 0 - ((nf ^ 0x1ff) + 1);
|
||||
HALDEBUG(ah, HAL_DEBUG_NFCAL,
|
||||
"NF calibrated [ctl] [chain 2] is %d\n", nf);
|
||||
nfarray[4] = nf;
|
||||
nfarray[2] = nf;
|
||||
|
||||
nf = MS(OS_REG_READ(ah, AR_PHY_CH2_EXT_CCA), AR_PHY_CH2_EXT_MINCCA_PWR);
|
||||
if (nf & 0x100)
|
||||
@ -415,7 +432,7 @@ ar2133GetNoiseFloor(struct ath_hal *ah, int16_t nfarray[])
|
||||
nf = 0 - ((nf ^ 0x1ff) + 1);
|
||||
HALDEBUG(ah, HAL_DEBUG_NFCAL,
|
||||
"NF calibrated [ctl] [chain 1] is %d\n", nf);
|
||||
nfarray[2] = nf;
|
||||
nfarray[1] = nf;
|
||||
|
||||
|
||||
nf = MS(OS_REG_READ(ah, AR_PHY_CH1_EXT_CCA), AR_PHY_CH1_EXT_MINCCA_PWR);
|
||||
@ -423,7 +440,7 @@ ar2133GetNoiseFloor(struct ath_hal *ah, int16_t nfarray[])
|
||||
nf = 0 - ((nf ^ 0x1ff) + 1);
|
||||
HALDEBUG(ah, HAL_DEBUG_NFCAL,
|
||||
"NF calibrated [ext] [chain 1] is %d\n", nf);
|
||||
nfarray[3] = nf;
|
||||
nfarray[4] = nf;
|
||||
/* fall thru... */
|
||||
case 0x1:
|
||||
nf = MS(OS_REG_READ(ah, AR_PHY_CCA), AR_PHY_MINCCA_PWR);
|
||||
@ -438,7 +455,7 @@ ar2133GetNoiseFloor(struct ath_hal *ah, int16_t nfarray[])
|
||||
nf = 0 - ((nf ^ 0x1ff) + 1);
|
||||
HALDEBUG(ah, HAL_DEBUG_NFCAL,
|
||||
"NF calibrated [ext] [chain 0] is %d\n", nf);
|
||||
nfarray[1] = nf;
|
||||
nfarray[3] = nf;
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -237,11 +237,6 @@ extern void ar5416InitChainMasks(struct ath_hal *ah);
|
||||
extern void ar5416RestoreChainMask(struct ath_hal *ah);
|
||||
|
||||
/* TX power setup related routines in ar5416_reset.c */
|
||||
extern HAL_BOOL getLowerUpperIndex(uint8_t target, uint8_t *pList,
|
||||
uint16_t listSize, uint16_t *indexL, uint16_t *indexR);
|
||||
extern HAL_BOOL ar5416FillVpdTable(uint8_t pwrMin, uint8_t pwrMax,
|
||||
uint8_t *pPwrList, uint8_t *pVpdList, uint16_t numIntercepts,
|
||||
uint8_t *pRetVpdList);
|
||||
extern void ar5416GetGainBoundariesAndPdadcs(struct ath_hal *ah,
|
||||
const struct ieee80211_channel *chan, CAL_DATA_PER_FREQ *pRawDataSet,
|
||||
uint8_t * bChans, uint16_t availPiers,
|
||||
@ -249,13 +244,13 @@ extern void ar5416GetGainBoundariesAndPdadcs(struct ath_hal *ah,
|
||||
uint16_t * pPdGainBoundaries, uint8_t * pPDADCValues,
|
||||
uint16_t numXpdGains);
|
||||
extern void ar5416SetGainBoundariesClosedLoop(struct ath_hal *ah,
|
||||
int regChainOffset, uint16_t pdGainOverlap_t2,
|
||||
int i, uint16_t pdGainOverlap_t2,
|
||||
uint16_t gainBoundaries[]);
|
||||
extern uint16_t ar5416GetXpdGainValues(struct ath_hal *ah, uint16_t xpdMask,
|
||||
uint16_t xpdGainValues[]);
|
||||
extern void ar5416WriteDetectorGainBiases(struct ath_hal *ah,
|
||||
uint16_t numXpdGain, uint16_t xpdGainValues[]);
|
||||
extern void ar5416WritePdadcValues(struct ath_hal *ah, int regChainOffset,
|
||||
extern void ar5416WritePdadcValues(struct ath_hal *ah, int i,
|
||||
uint8_t pdadcValues[]);
|
||||
extern HAL_BOOL ar5416SetPowerCalTable(struct ath_hal *ah,
|
||||
struct ar5416eeprom *pEepData, const struct ieee80211_channel *chan,
|
||||
|
@ -63,9 +63,6 @@ static HAL_BOOL ar5416SetPowerPerRateTable(struct ath_hal *ah,
|
||||
uint16_t powerLimit);
|
||||
static uint16_t ar5416GetMaxEdgePower(uint16_t freq,
|
||||
CAL_CTL_EDGES *pRdEdgesPower, HAL_BOOL is2GHz);
|
||||
|
||||
static int16_t interpolate(uint16_t target, uint16_t srcLeft,
|
||||
uint16_t srcRight, int16_t targetLeft, int16_t targetRight);
|
||||
static void ar5416Set11nRegs(struct ath_hal *ah, const struct ieee80211_channel *chan);
|
||||
|
||||
/*
|
||||
@ -1864,7 +1861,7 @@ ar5416GetTargetPowers(struct ath_hal *ah, const struct ieee80211_channel *chan,
|
||||
chi = fbin2freq(powInfo[lowIndex + 1].bChannel, IEEE80211_IS_CHAN_2GHZ(chan));
|
||||
|
||||
for (i = 0; i < numRates; i++) {
|
||||
pNewPower->tPow2x[i] = (uint8_t)interpolate(freq, clo, chi,
|
||||
pNewPower->tPow2x[i] = (uint8_t)ath_ee_interpolate(freq, clo, chi,
|
||||
powInfo[lowIndex].tPow2x[i], powInfo[lowIndex + 1].tPow2x[i]);
|
||||
}
|
||||
}
|
||||
@ -1924,7 +1921,7 @@ ar5416GetTargetPowersLeg(struct ath_hal *ah,
|
||||
chi = fbin2freq(powInfo[lowIndex + 1].bChannel, IEEE80211_IS_CHAN_2GHZ(chan));
|
||||
|
||||
for (i = 0; i < numRates; i++) {
|
||||
pNewPower->tPow2x[i] = (uint8_t)interpolate(freq, clo, chi,
|
||||
pNewPower->tPow2x[i] = (uint8_t)ath_ee_interpolate(freq, clo, chi,
|
||||
powInfo[lowIndex].tPow2x[i], powInfo[lowIndex + 1].tPow2x[i]);
|
||||
}
|
||||
}
|
||||
@ -1944,9 +1941,17 @@ ar5416GetTargetPowersLeg(struct ath_hal *ah,
|
||||
* target TX power.
|
||||
*/
|
||||
void
|
||||
ar5416SetGainBoundariesClosedLoop(struct ath_hal *ah, int regChainOffset,
|
||||
ar5416SetGainBoundariesClosedLoop(struct ath_hal *ah, int i,
|
||||
uint16_t pdGainOverlap_t2, uint16_t gainBoundaries[])
|
||||
{
|
||||
int regChainOffset;
|
||||
|
||||
regChainOffset = ar5416GetRegChainOffset(ah, i);
|
||||
|
||||
HALDEBUG(ah, HAL_DEBUG_EEPROM, "%s: chain %d: gainOverlap_t2: %d,"
|
||||
" gainBoundaries: %d, %d, %d, %d\n", __func__, i, pdGainOverlap_t2,
|
||||
gainBoundaries[0], gainBoundaries[1], gainBoundaries[2],
|
||||
gainBoundaries[3]);
|
||||
OS_REG_WRITE(ah, AR_PHY_TPCRG5 + regChainOffset,
|
||||
SM(pdGainOverlap_t2, AR_PHY_TPCRG5_PD_GAIN_OVERLAP) |
|
||||
SM(gainBoundaries[0], AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1) |
|
||||
@ -1998,6 +2003,10 @@ void
|
||||
ar5416WriteDetectorGainBiases(struct ath_hal *ah, uint16_t numXpdGain,
|
||||
uint16_t xpdGainValues[])
|
||||
{
|
||||
HALDEBUG(ah, HAL_DEBUG_EEPROM, "%s: numXpdGain: %d,"
|
||||
" xpdGainValues: %d, %d, %d\n", __func__, numXpdGain,
|
||||
xpdGainValues[0], xpdGainValues[1], xpdGainValues[2]);
|
||||
|
||||
OS_REG_WRITE(ah, AR_PHY_TPCRG1, (OS_REG_READ(ah, AR_PHY_TPCRG1) &
|
||||
~(AR_PHY_TPCRG1_NUM_PD_GAIN | AR_PHY_TPCRG1_PD_GAIN_1 |
|
||||
AR_PHY_TPCRG1_PD_GAIN_2 | AR_PHY_TPCRG1_PD_GAIN_3)) |
|
||||
@ -2008,20 +2017,20 @@ ar5416WriteDetectorGainBiases(struct ath_hal *ah, uint16_t numXpdGain,
|
||||
}
|
||||
|
||||
/*
|
||||
* Write the PDADC array to the given chain offset.
|
||||
* Write the PDADC array to the given radio chain i.
|
||||
*
|
||||
* The 32 PDADC registers are written without any care about
|
||||
* their contents - so if various chips treat values as "special",
|
||||
* this routine will not care.
|
||||
*/
|
||||
void
|
||||
ar5416WritePdadcValues(struct ath_hal *ah, int regChainOffset,
|
||||
uint8_t pdadcValues[])
|
||||
ar5416WritePdadcValues(struct ath_hal *ah, int i, uint8_t pdadcValues[])
|
||||
{
|
||||
int regOffset;
|
||||
int regOffset, regChainOffset;
|
||||
int j;
|
||||
int reg32;
|
||||
|
||||
regChainOffset = ar5416GetRegChainOffset(ah, i);
|
||||
regOffset = AR_PHY_BASE + (672 << 2) + regChainOffset;
|
||||
|
||||
for (j = 0; j < 32; j++) {
|
||||
@ -2030,16 +2039,14 @@ ar5416WritePdadcValues(struct ath_hal *ah, int regChainOffset,
|
||||
((pdadcValues[4*j + 2] & 0xFF) << 16) |
|
||||
((pdadcValues[4*j + 3] & 0xFF) << 24) ;
|
||||
OS_REG_WRITE(ah, regOffset, reg32);
|
||||
#ifdef PDADC_DUMP
|
||||
ath_hal_printf(ah, "PDADC: Chain %d | PDADC %3d Value %3d |"
|
||||
HALDEBUG(ah, HAL_DEBUG_EEPROM, "PDADC: Chain %d |"
|
||||
" PDADC %3d Value %3d | PDADC %3d Value %3d | PDADC %3d"
|
||||
" Value %3d |\n",
|
||||
" Value %3d | PDADC %3d Value %3d |\n",
|
||||
i,
|
||||
4*j, pdadcValues[4*j],
|
||||
4*j+1, pdadcValues[4*j + 1],
|
||||
4*j+2, pdadcValues[4*j + 2],
|
||||
4*j+3, pdadcValues[4*j + 3]);
|
||||
#endif
|
||||
regOffset += 4;
|
||||
}
|
||||
}
|
||||
@ -2108,12 +2115,12 @@ ar5416SetPowerCalTable(struct ath_hal *ah, struct ar5416eeprom *pEepData,
|
||||
pdadcValues, numXpdGain);
|
||||
|
||||
if ((i == 0) || AR_SREV_OWL_20_OR_LATER(ah)) {
|
||||
ar5416SetGainBoundariesClosedLoop(ah, regChainOffset,
|
||||
pdGainOverlap_t2, gainBoundaries);
|
||||
ar5416SetGainBoundariesClosedLoop(ah, i, pdGainOverlap_t2,
|
||||
gainBoundaries);
|
||||
}
|
||||
|
||||
/* Write the power values into the baseband power table */
|
||||
ar5416WritePdadcValues(ah, regChainOffset, pdadcValues);
|
||||
ar5416WritePdadcValues(ah, i, pdadcValues);
|
||||
}
|
||||
}
|
||||
*pTxPowerIndexOffset = 0;
|
||||
@ -2169,15 +2176,15 @@ ar5416GetGainBoundariesAndPdadcs(struct ath_hal *ah,
|
||||
}
|
||||
|
||||
/* Find pier indexes around the current channel */
|
||||
match = getLowerUpperIndex((uint8_t)FREQ2FBIN(centers.synth_center, IEEE80211_IS_CHAN_2GHZ(chan)),
|
||||
bChans, numPiers, &idxL, &idxR);
|
||||
match = ath_ee_getLowerUpperIndex((uint8_t)FREQ2FBIN(centers.synth_center,
|
||||
IEEE80211_IS_CHAN_2GHZ(chan)), bChans, numPiers, &idxL, &idxR);
|
||||
|
||||
if (match) {
|
||||
/* Directly fill both vpd tables from the matching index */
|
||||
for (i = 0; i < numXpdGains; i++) {
|
||||
minPwrT4[i] = pRawDataSet[idxL].pwrPdg[i][0];
|
||||
maxPwrT4[i] = pRawDataSet[idxL].pwrPdg[i][4];
|
||||
ar5416FillVpdTable(minPwrT4[i], maxPwrT4[i], pRawDataSet[idxL].pwrPdg[i],
|
||||
ath_ee_FillVpdTable(minPwrT4[i], maxPwrT4[i], pRawDataSet[idxL].pwrPdg[i],
|
||||
pRawDataSet[idxL].vpdPdg[i], AR5416_PD_GAIN_ICEPTS, vpdTableI[i]);
|
||||
}
|
||||
} else {
|
||||
@ -2195,12 +2202,13 @@ ar5416GetGainBoundariesAndPdadcs(struct ath_hal *ah,
|
||||
HALASSERT(maxPwrT4[i] > minPwrT4[i]);
|
||||
|
||||
/* Fill pier Vpds */
|
||||
ar5416FillVpdTable(minPwrT4[i], maxPwrT4[i], pPwrL, pVpdL, AR5416_PD_GAIN_ICEPTS, vpdTableL[i]);
|
||||
ar5416FillVpdTable(minPwrT4[i], maxPwrT4[i], pPwrR, pVpdR, AR5416_PD_GAIN_ICEPTS, vpdTableR[i]);
|
||||
ath_ee_FillVpdTable(minPwrT4[i], maxPwrT4[i], pPwrL, pVpdL, AR5416_PD_GAIN_ICEPTS, vpdTableL[i]);
|
||||
ath_ee_FillVpdTable(minPwrT4[i], maxPwrT4[i], pPwrR, pVpdR, AR5416_PD_GAIN_ICEPTS, vpdTableR[i]);
|
||||
|
||||
/* Interpolate the final vpd */
|
||||
for (j = 0; j <= (maxPwrT4[i] - minPwrT4[i]) / 2; j++) {
|
||||
vpdTableI[i][j] = (uint8_t)(interpolate((uint16_t)FREQ2FBIN(centers.synth_center, IEEE80211_IS_CHAN_2GHZ(chan)),
|
||||
vpdTableI[i][j] = (uint8_t)(ath_ee_interpolate((uint16_t)FREQ2FBIN(centers.synth_center,
|
||||
IEEE80211_IS_CHAN_2GHZ(chan)),
|
||||
bChans[idxL], bChans[idxR], vpdTableL[i][j], vpdTableR[i][j]));
|
||||
}
|
||||
}
|
||||
@ -2289,113 +2297,6 @@ ar5416GetGainBoundariesAndPdadcs(struct ath_hal *ah,
|
||||
return;
|
||||
}
|
||||
|
||||
/**************************************************************
|
||||
* getLowerUppderIndex
|
||||
*
|
||||
* Return indices surrounding the value in sorted integer lists.
|
||||
* Requirement: the input list must be monotonically increasing
|
||||
* and populated up to the list size
|
||||
* Returns: match is set if an index in the array matches exactly
|
||||
* or a the target is before or after the range of the array.
|
||||
*/
|
||||
HAL_BOOL
|
||||
getLowerUpperIndex(uint8_t target, uint8_t *pList, uint16_t listSize,
|
||||
uint16_t *indexL, uint16_t *indexR)
|
||||
{
|
||||
uint16_t i;
|
||||
|
||||
/*
|
||||
* Check first and last elements for beyond ordered array cases.
|
||||
*/
|
||||
if (target <= pList[0]) {
|
||||
*indexL = *indexR = 0;
|
||||
return AH_TRUE;
|
||||
}
|
||||
if (target >= pList[listSize-1]) {
|
||||
*indexL = *indexR = (uint16_t)(listSize - 1);
|
||||
return AH_TRUE;
|
||||
}
|
||||
|
||||
/* look for value being near or between 2 values in list */
|
||||
for (i = 0; i < listSize - 1; i++) {
|
||||
/*
|
||||
* If value is close to the current value of the list
|
||||
* then target is not between values, it is one of the values
|
||||
*/
|
||||
if (pList[i] == target) {
|
||||
*indexL = *indexR = i;
|
||||
return AH_TRUE;
|
||||
}
|
||||
/*
|
||||
* Look for value being between current value and next value
|
||||
* if so return these 2 values
|
||||
*/
|
||||
if (target < pList[i + 1]) {
|
||||
*indexL = i;
|
||||
*indexR = (uint16_t)(i + 1);
|
||||
return AH_FALSE;
|
||||
}
|
||||
}
|
||||
HALASSERT(0);
|
||||
*indexL = *indexR = 0;
|
||||
return AH_FALSE;
|
||||
}
|
||||
|
||||
/**************************************************************
|
||||
* ar5416FillVpdTable
|
||||
*
|
||||
* Fill the Vpdlist for indices Pmax-Pmin
|
||||
* Note: pwrMin, pwrMax and Vpdlist are all in dBm * 4
|
||||
*/
|
||||
HAL_BOOL
|
||||
ar5416FillVpdTable(uint8_t pwrMin, uint8_t pwrMax, uint8_t *pPwrList,
|
||||
uint8_t *pVpdList, uint16_t numIntercepts, uint8_t *pRetVpdList)
|
||||
{
|
||||
uint16_t i, k;
|
||||
uint8_t currPwr = pwrMin;
|
||||
uint16_t idxL, idxR;
|
||||
|
||||
HALASSERT(pwrMax > pwrMin);
|
||||
for (i = 0; i <= (pwrMax - pwrMin) / 2; i++) {
|
||||
getLowerUpperIndex(currPwr, pPwrList, numIntercepts,
|
||||
&(idxL), &(idxR));
|
||||
if (idxR < 1)
|
||||
idxR = 1; /* extrapolate below */
|
||||
if (idxL == numIntercepts - 1)
|
||||
idxL = (uint16_t)(numIntercepts - 2); /* extrapolate above */
|
||||
if (pPwrList[idxL] == pPwrList[idxR])
|
||||
k = pVpdList[idxL];
|
||||
else
|
||||
k = (uint16_t)( ((currPwr - pPwrList[idxL]) * pVpdList[idxR] + (pPwrList[idxR] - currPwr) * pVpdList[idxL]) /
|
||||
(pPwrList[idxR] - pPwrList[idxL]) );
|
||||
HALASSERT(k < 256);
|
||||
pRetVpdList[i] = (uint8_t)k;
|
||||
currPwr += 2; /* half dB steps */
|
||||
}
|
||||
|
||||
return AH_TRUE;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* interpolate
|
||||
*
|
||||
* Returns signed interpolated or the scaled up interpolated value
|
||||
*/
|
||||
static int16_t
|
||||
interpolate(uint16_t target, uint16_t srcLeft, uint16_t srcRight,
|
||||
int16_t targetLeft, int16_t targetRight)
|
||||
{
|
||||
int16_t rv;
|
||||
|
||||
if (srcRight == srcLeft) {
|
||||
rv = targetLeft;
|
||||
} else {
|
||||
rv = (int16_t)( ((target - srcLeft) * targetRight +
|
||||
(srcRight - target) * targetLeft) / (srcRight - srcLeft) );
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*
|
||||
* The linux ath9k driver and (from what I've been told) the reference
|
||||
* Atheros driver enables the 11n PHY by default whether or not it's
|
||||
|
@ -265,6 +265,16 @@ ar9280GetChannelMaxMinPower(struct ath_hal *ah,
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* The ordering of nfarray is thus:
|
||||
*
|
||||
* nfarray[0]: Chain 0 ctl
|
||||
* nfarray[1]: Chain 1 ctl
|
||||
* nfarray[2]: Chain 2 ctl
|
||||
* nfarray[3]: Chain 0 ext
|
||||
* nfarray[4]: Chain 1 ext
|
||||
* nfarray[5]: Chain 2 ext
|
||||
*/
|
||||
static void
|
||||
ar9280GetNoiseFloor(struct ath_hal *ah, int16_t nfarray[])
|
||||
{
|
||||
@ -297,6 +307,11 @@ ar9280GetNoiseFloor(struct ath_hal *ah, int16_t nfarray[])
|
||||
HALDEBUG(ah, HAL_DEBUG_NFCAL,
|
||||
"NF calibrated [ext] [chain 1] is %d\n", nf);
|
||||
nfarray[4] = nf;
|
||||
|
||||
/* Chain 2 - invalid */
|
||||
nfarray[2] = 0;
|
||||
nfarray[5] = 0;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -67,7 +67,7 @@ ar9280olcGetTxGainIndex(struct ath_hal *ah,
|
||||
if (calChans[numPiers] == AR5416_BCHAN_UNUSED)
|
||||
break;
|
||||
|
||||
match = getLowerUpperIndex((uint8_t)FREQ2FBIN(centers.synth_center,
|
||||
match = ath_ee_getLowerUpperIndex((uint8_t)FREQ2FBIN(centers.synth_center,
|
||||
IEEE80211_IS_CHAN_2GHZ(chan)), calChans, numPiers,
|
||||
&idxL, &idxR);
|
||||
if (match) {
|
||||
@ -231,13 +231,20 @@ ar9280AdjustPDADCValues(struct ath_hal *ah, int8_t pwr_table_offset,
|
||||
* to the open-loop TX power control.
|
||||
*/
|
||||
static void
|
||||
ar9280SetGainBoundariesOpenLoop(struct ath_hal *ah, int regChainOffset,
|
||||
ar9280SetGainBoundariesOpenLoop(struct ath_hal *ah, int i,
|
||||
uint16_t pdGainOverlap_t2, uint16_t gainBoundaries[])
|
||||
{
|
||||
int regChainOffset;
|
||||
|
||||
regChainOffset = ar5416GetRegChainOffset(ah, i);
|
||||
|
||||
/* These are unused for OLC */
|
||||
(void) pdGainOverlap_t2;
|
||||
(void) gainBoundaries;
|
||||
|
||||
HALDEBUG(ah, HAL_DEBUG_EEPROM, "%s: chain %d: writing closed loop values\n",
|
||||
__func__, i);
|
||||
|
||||
OS_REG_WRITE(ah, AR_PHY_TPCRG5 + regChainOffset,
|
||||
SM(0x6, AR_PHY_TPCRG5_PD_GAIN_OVERLAP) |
|
||||
SM(0x38, AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1) |
|
||||
@ -366,11 +373,11 @@ ar9280SetPowerCalTable(struct ath_hal *ah, struct ar5416eeprom *pEepData,
|
||||
if (AR_SREV_MERLIN_20_OR_LATER(ah) &&
|
||||
ath_hal_eepromGetFlag(ah, AR_EEP_OL_PWRCTRL))
|
||||
ar9280SetGainBoundariesOpenLoop(ah,
|
||||
regChainOffset, pdGainOverlap_t2,
|
||||
i, pdGainOverlap_t2,
|
||||
gainBoundaries);
|
||||
else
|
||||
ar5416SetGainBoundariesClosedLoop(ah,
|
||||
regChainOffset, pdGainOverlap_t2,
|
||||
i, pdGainOverlap_t2,
|
||||
gainBoundaries);
|
||||
}
|
||||
|
||||
@ -383,7 +390,7 @@ ar9280SetPowerCalTable(struct ath_hal *ah, struct ar5416eeprom *pEepData,
|
||||
ar9280AdjustPDADCValues(ah, pwr_table_offset, diff, pdadcValues);
|
||||
|
||||
/* Write the power values into the baseband power table */
|
||||
ar5416WritePdadcValues(ah, regChainOffset, pdadcValues);
|
||||
ar5416WritePdadcValues(ah, i, pdadcValues);
|
||||
}
|
||||
}
|
||||
*pTxPowerIndexOffset = 0;
|
||||
|
@ -28,6 +28,16 @@
|
||||
#include "ar5416/ar5416reg.h"
|
||||
#include "ar5416/ar5416phy.h"
|
||||
|
||||
/*
|
||||
* The ordering of nfarray is thus:
|
||||
*
|
||||
* nfarray[0]: Chain 0 ctl
|
||||
* nfarray[1]: Chain 1 ctl
|
||||
* nfarray[2]: Chain 2 ctl
|
||||
* nfarray[3]: Chain 0 ext
|
||||
* nfarray[4]: Chain 1 ext
|
||||
* nfarray[5]: Chain 2 ext
|
||||
*/
|
||||
static void
|
||||
ar9285GetNoiseFloor(struct ath_hal *ah, int16_t nfarray[])
|
||||
{
|
||||
@ -40,7 +50,6 @@ ar9285GetNoiseFloor(struct ath_hal *ah, int16_t nfarray[])
|
||||
"NF calibrated [ctl] [chain 0] is %d\n", nf);
|
||||
nfarray[0] = nf;
|
||||
|
||||
nfarray[1] = 0;
|
||||
|
||||
nf = MS(OS_REG_READ(ah, AR_PHY_EXT_CCA), AR9280_PHY_EXT_MINCCA_PWR);
|
||||
if (nf & 0x100)
|
||||
@ -49,7 +58,13 @@ ar9285GetNoiseFloor(struct ath_hal *ah, int16_t nfarray[])
|
||||
"NF calibrated [ext] [chain 0] is %d\n", nf);
|
||||
nfarray[3] = nf;
|
||||
|
||||
/* Chain 1 - invalid */
|
||||
nfarray[1] = 0;
|
||||
nfarray[4] = 0;
|
||||
|
||||
/* Chain 2 - invalid */
|
||||
nfarray[2] = 0;
|
||||
nfarray[5] = 0;
|
||||
}
|
||||
|
||||
HAL_BOOL
|
||||
|
@ -36,6 +36,8 @@
|
||||
#include "ar5416/ar5416reg.h"
|
||||
#include "ar5416/ar5416phy.h"
|
||||
|
||||
#include "ar9002/ar9285phy.h"
|
||||
|
||||
/* Eeprom versioning macros. Returns true if the version is equal or newer than the ver specified */
|
||||
#define EEP_MINOR(_ah) \
|
||||
(AH_PRIVATE(_ah)->ah_eeversion & AR5416_EEP_VER_MINOR_MASK)
|
||||
@ -57,8 +59,6 @@ static HAL_BOOL ar9285SetPowerCalTable(struct ath_hal *ah,
|
||||
struct ar5416eeprom_4k *pEepData,
|
||||
const struct ieee80211_channel *chan,
|
||||
int16_t *pTxPowerIndexOffset);
|
||||
static int16_t interpolate(uint16_t target, uint16_t srcLeft,
|
||||
uint16_t srcRight, int16_t targetLeft, int16_t targetRight);
|
||||
static void ar9285GetGainBoundariesAndPdadcs(struct ath_hal *ah,
|
||||
const struct ieee80211_channel *chan, CAL_DATA_PER_FREQ_4K *pRawDataSet,
|
||||
uint8_t * bChans, uint16_t availPiers,
|
||||
@ -238,65 +238,196 @@ ar9285SetTransmitPower(struct ath_hal *ah,
|
||||
#undef N
|
||||
}
|
||||
|
||||
static void
|
||||
ar9285SetBoardGain(struct ath_hal *ah, const MODAL_EEP4K_HEADER *pModal,
|
||||
const struct ar5416eeprom_4k *eep, uint8_t txRxAttenLocal)
|
||||
{
|
||||
OS_REG_WRITE(ah, AR_PHY_SWITCH_CHAIN_0,
|
||||
pModal->antCtrlChain[0]);
|
||||
|
||||
OS_REG_WRITE(ah, AR_PHY_TIMING_CTRL4_CHAIN(0),
|
||||
(OS_REG_READ(ah, AR_PHY_TIMING_CTRL4_CHAIN(0)) &
|
||||
~(AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF |
|
||||
AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF)) |
|
||||
SM(pModal->iqCalICh[0], AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF) |
|
||||
SM(pModal->iqCalQCh[0], AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF));
|
||||
|
||||
if ((eep->baseEepHeader.version & AR5416_EEP_VER_MINOR_MASK) >=
|
||||
AR5416_EEP_MINOR_VER_3) {
|
||||
txRxAttenLocal = pModal->txRxAttenCh[0];
|
||||
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_GAIN_2GHZ,
|
||||
AR_PHY_GAIN_2GHZ_XATTEN1_MARGIN, pModal->bswMargin[0]);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_GAIN_2GHZ,
|
||||
AR_PHY_GAIN_2GHZ_XATTEN1_DB, pModal->bswAtten[0]);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_GAIN_2GHZ,
|
||||
AR_PHY_GAIN_2GHZ_XATTEN2_MARGIN, pModal->xatten2Margin[0]);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_GAIN_2GHZ,
|
||||
AR_PHY_GAIN_2GHZ_XATTEN2_DB, pModal->xatten2Db[0]);
|
||||
|
||||
/* Set the block 1 value to block 0 value */
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_GAIN_2GHZ + 0x1000,
|
||||
AR_PHY_GAIN_2GHZ_XATTEN1_MARGIN,
|
||||
pModal->bswMargin[0]);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_GAIN_2GHZ + 0x1000,
|
||||
AR_PHY_GAIN_2GHZ_XATTEN1_DB, pModal->bswAtten[0]);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_GAIN_2GHZ + 0x1000,
|
||||
AR_PHY_GAIN_2GHZ_XATTEN2_MARGIN,
|
||||
pModal->xatten2Margin[0]);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_GAIN_2GHZ + 0x1000,
|
||||
AR_PHY_GAIN_2GHZ_XATTEN2_DB, pModal->xatten2Db[0]);
|
||||
}
|
||||
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_RXGAIN,
|
||||
AR9280_PHY_RXGAIN_TXRX_ATTEN, txRxAttenLocal);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_RXGAIN,
|
||||
AR9280_PHY_RXGAIN_TXRX_MARGIN, pModal->rxTxMarginCh[0]);
|
||||
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_RXGAIN + 0x1000,
|
||||
AR9280_PHY_RXGAIN_TXRX_ATTEN, txRxAttenLocal);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_RXGAIN + 0x1000,
|
||||
AR9280_PHY_RXGAIN_TXRX_MARGIN, pModal->rxTxMarginCh[0]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Read EEPROM header info and program the device for correct operation
|
||||
* given the channel value.
|
||||
*/
|
||||
HAL_BOOL
|
||||
ar9285SetBoardValues(struct ath_hal *ah, const struct ieee80211_channel *chan)
|
||||
{
|
||||
const HAL_EEPROM_v4k *ee = AH_PRIVATE(ah)->ah_eeprom;
|
||||
const struct ar5416eeprom_4k *eep = &ee->ee_base;
|
||||
const MODAL_EEP4K_HEADER *pModal;
|
||||
uint8_t txRxAttenLocal = 23;
|
||||
uint8_t txRxAttenLocal;
|
||||
uint8_t ob[5], db1[5], db2[5];
|
||||
uint8_t ant_div_control1, ant_div_control2;
|
||||
uint32_t regVal;
|
||||
|
||||
HALASSERT(AH_PRIVATE(ah)->ah_eeversion >= AR_EEPROM_VER14_1);
|
||||
pModal = &eep->modalHeader;
|
||||
txRxAttenLocal = 23;
|
||||
|
||||
OS_REG_WRITE(ah, AR_PHY_SWITCH_COM, pModal->antCtrlCommon);
|
||||
OS_REG_WRITE(ah, AR_PHY_SWITCH_CHAIN_0, pModal->antCtrlChain[0]);
|
||||
OS_REG_WRITE(ah, AR_PHY_TIMING_CTRL4,
|
||||
(OS_REG_READ(ah, AR_PHY_TIMING_CTRL4) &
|
||||
~(AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF | AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF)) |
|
||||
SM(pModal->iqCalICh[0], AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF) |
|
||||
SM(pModal->iqCalQCh[0], AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF));
|
||||
|
||||
if (IS_EEP_MINOR_V3(ah)) {
|
||||
if (IEEE80211_IS_CHAN_HT40(chan)) {
|
||||
/* Overwrite switch settling with HT40 value */
|
||||
/* Single chain for 4K EEPROM*/
|
||||
ar9285SetBoardGain(ah, pModal, eep, txRxAttenLocal);
|
||||
|
||||
/* Initialize Ant Diversity settings from EEPROM */
|
||||
if (pModal->version >= 3) {
|
||||
ant_div_control1 = pModal->antdiv_ctl1;
|
||||
ant_div_control2 = pModal->antdiv_ctl2;
|
||||
|
||||
regVal = OS_REG_READ(ah, AR_PHY_MULTICHAIN_GAIN_CTL);
|
||||
regVal &= (~(AR_PHY_9285_ANT_DIV_CTL_ALL));
|
||||
|
||||
regVal |= SM(ant_div_control1,
|
||||
AR_PHY_9285_ANT_DIV_CTL);
|
||||
regVal |= SM(ant_div_control2,
|
||||
AR_PHY_9285_ANT_DIV_ALT_LNACONF);
|
||||
regVal |= SM((ant_div_control2 >> 2),
|
||||
AR_PHY_9285_ANT_DIV_MAIN_LNACONF);
|
||||
regVal |= SM((ant_div_control1 >> 1),
|
||||
AR_PHY_9285_ANT_DIV_ALT_GAINTB);
|
||||
regVal |= SM((ant_div_control1 >> 2),
|
||||
AR_PHY_9285_ANT_DIV_MAIN_GAINTB);
|
||||
|
||||
OS_REG_WRITE(ah, AR_PHY_MULTICHAIN_GAIN_CTL, regVal);
|
||||
regVal = OS_REG_READ(ah, AR_PHY_MULTICHAIN_GAIN_CTL);
|
||||
regVal = OS_REG_READ(ah, AR_PHY_CCK_DETECT);
|
||||
regVal &= (~AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV);
|
||||
regVal |= SM((ant_div_control1 >> 3),
|
||||
AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV);
|
||||
|
||||
OS_REG_WRITE(ah, AR_PHY_CCK_DETECT, regVal);
|
||||
regVal = OS_REG_READ(ah, AR_PHY_CCK_DETECT);
|
||||
}
|
||||
|
||||
if (pModal->version >= 2) {
|
||||
ob[0] = pModal->ob_0;
|
||||
ob[1] = pModal->ob_1;
|
||||
ob[2] = pModal->ob_2;
|
||||
ob[3] = pModal->ob_3;
|
||||
ob[4] = pModal->ob_4;
|
||||
|
||||
db1[0] = pModal->db1_0;
|
||||
db1[1] = pModal->db1_1;
|
||||
db1[2] = pModal->db1_2;
|
||||
db1[3] = pModal->db1_3;
|
||||
db1[4] = pModal->db1_4;
|
||||
|
||||
db2[0] = pModal->db2_0;
|
||||
db2[1] = pModal->db2_1;
|
||||
db2[2] = pModal->db2_2;
|
||||
db2[3] = pModal->db2_3;
|
||||
db2[4] = pModal->db2_4;
|
||||
} else if (pModal->version == 1) {
|
||||
ob[0] = pModal->ob_0;
|
||||
ob[1] = ob[2] = ob[3] = ob[4] = pModal->ob_1;
|
||||
db1[0] = pModal->db1_0;
|
||||
db1[1] = db1[2] = db1[3] = db1[4] = pModal->db1_1;
|
||||
db2[0] = pModal->db2_0;
|
||||
db2[1] = db2[2] = db2[3] = db2[4] = pModal->db2_1;
|
||||
} else {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
ob[i] = pModal->ob_0;
|
||||
db1[i] = pModal->db1_0;
|
||||
db2[i] = pModal->db1_0;
|
||||
}
|
||||
}
|
||||
|
||||
OS_A_REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_OB_0, ob[0]);
|
||||
OS_A_REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_OB_1, ob[1]);
|
||||
OS_A_REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_OB_2, ob[2]);
|
||||
OS_A_REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_OB_3, ob[3]);
|
||||
OS_A_REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_OB_4, ob[4]);
|
||||
|
||||
OS_A_REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_DB1_0, db1[0]);
|
||||
OS_A_REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_DB1_1, db1[1]);
|
||||
OS_A_REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_DB1_2, db1[2]);
|
||||
OS_A_REG_RMW_FIELD(ah, AR9285_AN_RF2G4, AR9285_AN_RF2G4_DB1_3, db1[3]);
|
||||
OS_A_REG_RMW_FIELD(ah, AR9285_AN_RF2G4, AR9285_AN_RF2G4_DB1_4, db1[4]);
|
||||
|
||||
OS_A_REG_RMW_FIELD(ah, AR9285_AN_RF2G4, AR9285_AN_RF2G4_DB2_0, db2[0]);
|
||||
OS_A_REG_RMW_FIELD(ah, AR9285_AN_RF2G4, AR9285_AN_RF2G4_DB2_1, db2[1]);
|
||||
OS_A_REG_RMW_FIELD(ah, AR9285_AN_RF2G4, AR9285_AN_RF2G4_DB2_2, db2[2]);
|
||||
OS_A_REG_RMW_FIELD(ah, AR9285_AN_RF2G4, AR9285_AN_RF2G4_DB2_3, db2[3]);
|
||||
OS_A_REG_RMW_FIELD(ah, AR9285_AN_RF2G4, AR9285_AN_RF2G4_DB2_4, db2[4]);
|
||||
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_SETTLING, AR_PHY_SETTLING_SWITCH,
|
||||
pModal->swSettleHt40);
|
||||
pModal->switchSettling);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_DESIRED_SZ, AR_PHY_DESIRED_SZ_ADC,
|
||||
pModal->adcDesiredSize);
|
||||
|
||||
OS_REG_WRITE(ah, AR_PHY_RF_CTL4,
|
||||
SM(pModal->txEndToXpaOff, AR_PHY_RF_CTL4_TX_END_XPAA_OFF) |
|
||||
SM(pModal->txEndToXpaOff, AR_PHY_RF_CTL4_TX_END_XPAB_OFF) |
|
||||
SM(pModal->txFrameToXpaOn, AR_PHY_RF_CTL4_FRAME_XPAA_ON) |
|
||||
SM(pModal->txFrameToXpaOn, AR_PHY_RF_CTL4_FRAME_XPAB_ON));
|
||||
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_RF_CTL3, AR_PHY_TX_END_TO_A2_RX_ON,
|
||||
pModal->txEndToRxOn);
|
||||
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_CCA, AR9280_PHY_CCA_THRESH62,
|
||||
pModal->thresh62);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_EXT_CCA0, AR_PHY_EXT_CCA0_THRESH62,
|
||||
pModal->thresh62);
|
||||
|
||||
if ((eep->baseEepHeader.version & AR5416_EEP_VER_MINOR_MASK) >=
|
||||
AR5416_EEP_MINOR_VER_2) {
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_RF_CTL2, AR_PHY_TX_FRAME_TO_DATA_START,
|
||||
pModal->txFrameToDataStart);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_RF_CTL2, AR_PHY_TX_FRAME_TO_PA_ON,
|
||||
pModal->txFrameToPaOn);
|
||||
}
|
||||
txRxAttenLocal = pModal->txRxAttenCh[0];
|
||||
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_GAIN_2GHZ, AR_PHY_GAIN_2GHZ_XATTEN1_MARGIN,
|
||||
pModal->bswMargin[0]);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_GAIN_2GHZ, AR_PHY_GAIN_2GHZ_XATTEN1_DB,
|
||||
pModal->bswAtten[0]);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_GAIN_2GHZ, AR_PHY_GAIN_2GHZ_XATTEN2_MARGIN,
|
||||
pModal->xatten2Margin[0]);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_GAIN_2GHZ, AR_PHY_GAIN_2GHZ_XATTEN2_DB,
|
||||
pModal->xatten2Db[0]);
|
||||
|
||||
/* block 1 has the same values as block 0 */
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_GAIN_2GHZ + 0x1000,
|
||||
AR_PHY_GAIN_2GHZ_XATTEN1_MARGIN, pModal->bswMargin[0]);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_GAIN_2GHZ + 0x1000,
|
||||
AR_PHY_GAIN_2GHZ_XATTEN1_DB, pModal->bswAtten[0]);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_GAIN_2GHZ + 0x1000,
|
||||
AR_PHY_GAIN_2GHZ_XATTEN2_MARGIN, pModal->xatten2Margin[0]);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_GAIN_2GHZ + 0x1000,
|
||||
AR_PHY_GAIN_2GHZ_XATTEN2_DB, pModal->xatten2Db[0]);
|
||||
|
||||
if ((eep->baseEepHeader.version & AR5416_EEP_VER_MINOR_MASK) >=
|
||||
AR5416_EEP_MINOR_VER_3) {
|
||||
if (IEEE80211_IS_CHAN_HT40(chan))
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_SETTLING,
|
||||
AR_PHY_SETTLING_SWITCH, pModal->swSettleHt40);
|
||||
}
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_RXGAIN,
|
||||
AR9280_PHY_RXGAIN_TXRX_ATTEN, txRxAttenLocal);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_RXGAIN,
|
||||
AR9280_PHY_RXGAIN_TXRX_MARGIN, pModal->rxTxMarginCh[0]);
|
||||
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_RXGAIN + 0x1000,
|
||||
AR9280_PHY_RXGAIN_TXRX_ATTEN, txRxAttenLocal);
|
||||
OS_REG_RMW_FIELD(ah, AR_PHY_RXGAIN + 0x1000,
|
||||
AR9280_PHY_RXGAIN_TXRX_MARGIN, pModal->rxTxMarginCh[0]);
|
||||
|
||||
if (AR_SREV_KITE_11(ah))
|
||||
OS_REG_WRITE(ah, AR9285_AN_TOP4, (AR9285_AN_TOP4_DEFAULT | 0x14));
|
||||
|
||||
return AH_TRUE;
|
||||
}
|
||||
@ -603,11 +734,11 @@ ar9285SetPowerCalTable(struct ath_hal *ah, struct ar5416eeprom_4k *pEepData,
|
||||
* negative or greater than 0. Need to offset the power
|
||||
* values by the amount of minPower for griffin
|
||||
*/
|
||||
ar5416SetGainBoundariesClosedLoop(ah, regChainOffset, pdGainOverlap_t2, gainBoundaries);
|
||||
ar5416SetGainBoundariesClosedLoop(ah, i, pdGainOverlap_t2, gainBoundaries);
|
||||
}
|
||||
|
||||
/* Write the power values into the baseband power table */
|
||||
ar5416WritePdadcValues(ah, regChainOffset, pdadcValues);
|
||||
ar5416WritePdadcValues(ah, i, pdadcValues);
|
||||
}
|
||||
}
|
||||
*pTxPowerIndexOffset = 0;
|
||||
@ -657,15 +788,15 @@ ar9285GetGainBoundariesAndPdadcs(struct ath_hal *ah,
|
||||
}
|
||||
|
||||
/* Find pier indexes around the current channel */
|
||||
match = getLowerUpperIndex((uint8_t)FREQ2FBIN(centers.synth_center, IEEE80211_IS_CHAN_2GHZ(chan)),
|
||||
bChans, numPiers, &idxL, &idxR);
|
||||
match = ath_ee_getLowerUpperIndex((uint8_t)FREQ2FBIN(centers.synth_center,
|
||||
IEEE80211_IS_CHAN_2GHZ(chan)), bChans, numPiers, &idxL, &idxR);
|
||||
|
||||
if (match) {
|
||||
/* Directly fill both vpd tables from the matching index */
|
||||
for (i = 0; i < numXpdGains; i++) {
|
||||
minPwrT4[i] = pRawDataSet[idxL].pwrPdg[i][0];
|
||||
maxPwrT4[i] = pRawDataSet[idxL].pwrPdg[i][4];
|
||||
ar5416FillVpdTable(minPwrT4[i], maxPwrT4[i],
|
||||
ath_ee_FillVpdTable(minPwrT4[i], maxPwrT4[i],
|
||||
pRawDataSet[idxL].pwrPdg[i],
|
||||
pRawDataSet[idxL].vpdPdg[i],
|
||||
AR5416_PD_GAIN_ICEPTS, vpdTableI[i]);
|
||||
@ -685,14 +816,15 @@ ar9285GetGainBoundariesAndPdadcs(struct ath_hal *ah,
|
||||
HALASSERT(maxPwrT4[i] > minPwrT4[i]);
|
||||
|
||||
/* Fill pier Vpds */
|
||||
ar5416FillVpdTable(minPwrT4[i], maxPwrT4[i], pPwrL, pVpdL,
|
||||
ath_ee_FillVpdTable(minPwrT4[i], maxPwrT4[i], pPwrL, pVpdL,
|
||||
AR5416_PD_GAIN_ICEPTS, vpdTableL[i]);
|
||||
ar5416FillVpdTable(minPwrT4[i], maxPwrT4[i], pPwrR, pVpdR,
|
||||
ath_ee_FillVpdTable(minPwrT4[i], maxPwrT4[i], pPwrR, pVpdR,
|
||||
AR5416_PD_GAIN_ICEPTS, vpdTableR[i]);
|
||||
|
||||
/* Interpolate the final vpd */
|
||||
for (j = 0; j <= (maxPwrT4[i] - minPwrT4[i]) / 2; j++) {
|
||||
vpdTableI[i][j] = (uint8_t)(interpolate((uint16_t)FREQ2FBIN(centers.synth_center, IEEE80211_IS_CHAN_2GHZ(chan)),
|
||||
vpdTableI[i][j] = (uint8_t)(ath_ee_interpolate((uint16_t)FREQ2FBIN(centers.synth_center,
|
||||
IEEE80211_IS_CHAN_2GHZ(chan)),
|
||||
bChans[idxL], bChans[idxR], vpdTableL[i][j], vpdTableR[i][j]));
|
||||
}
|
||||
}
|
||||
@ -780,18 +912,3 @@ ar9285GetGainBoundariesAndPdadcs(struct ath_hal *ah,
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
static int16_t
|
||||
interpolate(uint16_t target, uint16_t srcLeft, uint16_t srcRight,
|
||||
int16_t targetLeft, int16_t targetRight)
|
||||
{
|
||||
int16_t rv;
|
||||
|
||||
if (srcRight == srcLeft) {
|
||||
rv = targetLeft;
|
||||
} else {
|
||||
rv = (int16_t)( ((target - srcLeft) * targetRight +
|
||||
(srcRight - target) * targetLeft) / (srcRight - srcLeft) );
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
@ -98,6 +98,7 @@ ath_rateseries_setup(struct ath_softc *sc, struct ieee80211_node *ni,
|
||||
HAL_11N_RATE_SERIES *series, unsigned int pktlen, uint8_t *rix,
|
||||
uint8_t *try, int flags)
|
||||
{
|
||||
#define HT_RC_2_STREAMS(_rc) ((((_rc) & 0x78) >> 3) + 1)
|
||||
struct ieee80211com *ic = ni->ni_ic;
|
||||
struct ath_hal *ah = sc->sc_ah;
|
||||
HAL_BOOL shortPreamble = AH_FALSE;
|
||||
@ -151,14 +152,15 @@ ath_rateseries_setup(struct ath_softc *sc, struct ieee80211_node *ni,
|
||||
series[i].PktDuration =
|
||||
ath_computedur_ht(pktlen
|
||||
, series[i].Rate
|
||||
, ic->ic_txstream
|
||||
, 0 /* disable 20/40 for now */
|
||||
, HT_RC_2_STREAMS(series[i].Rate)
|
||||
, series[i].RateFlags & HAL_RATESERIES_2040
|
||||
, series[i].RateFlags & HAL_RATESERIES_HALFGI);
|
||||
} else {
|
||||
series[i].PktDuration = ath_hal_computetxtime(ah,
|
||||
rt, pktlen, rix[i], shortPreamble);
|
||||
}
|
||||
}
|
||||
#undef HT_RC_2_STREAMS
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
357
sys/dev/bxe/bxe_debug.h
Normal file
357
sys/dev/bxe/bxe_debug.h
Normal file
@ -0,0 +1,357 @@
|
||||
/*-
|
||||
* Copyright (c) 2007-2011 Broadcom Corporation. All rights reserved.
|
||||
*
|
||||
* Gary Zambrano <zambrano@broadcom.com>
|
||||
* David Christensen <davidch@broadcom.com>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of Broadcom Corporation nor the name of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written consent.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS'
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*$FreeBSD$*/
|
||||
|
||||
#ifndef _BXE_DEBUG_H
|
||||
#define _BXE_DEBUG_H
|
||||
|
||||
extern uint32_t bxe_debug;
|
||||
|
||||
/*
|
||||
* Debugging macros and definitions.
|
||||
*/
|
||||
|
||||
#define BXE_CP_LOAD 0x00000001
|
||||
#define BXE_CP_SEND 0x00000002
|
||||
#define BXE_CP_RECV 0x00000004
|
||||
#define BXE_CP_INTR 0x00000008
|
||||
#define BXE_CP_UNLOAD 0x00000010
|
||||
#define BXE_CP_RESET 0x00000020
|
||||
#define BXE_CP_IOCTL 0x00000040
|
||||
#define BXE_CP_STATS 0x00000080
|
||||
#define BXE_CP_MISC 0x00000100
|
||||
#define BXE_CP_PHY 0x00000200
|
||||
#define BXE_CP_RAMROD 0x00000400
|
||||
#define BXE_CP_NVRAM 0x00000800
|
||||
#define BXE_CP_REGS 0x00001000
|
||||
#define BXE_CP_ALL 0x00FFFFFF
|
||||
#define BXE_CP_MASK 0x00FFFFFF
|
||||
|
||||
#define BXE_LEVEL_FATAL 0x00000000
|
||||
#define BXE_LEVEL_WARN 0x01000000
|
||||
#define BXE_LEVEL_INFO 0x02000000
|
||||
#define BXE_LEVEL_VERBOSE 0x03000000
|
||||
#define BXE_LEVEL_EXTREME 0x04000000
|
||||
#define BXE_LEVEL_INSANE 0x05000000
|
||||
|
||||
#define BXE_LEVEL_MASK 0xFF000000
|
||||
|
||||
#define BXE_WARN_LOAD (BXE_CP_LOAD | BXE_LEVEL_WARN)
|
||||
#define BXE_INFO_LOAD (BXE_CP_LOAD | BXE_LEVEL_INFO)
|
||||
#define BXE_VERBOSE_LOAD (BXE_CP_LOAD | BXE_LEVEL_VERBOSE)
|
||||
#define BXE_EXTREME_LOAD (BXE_CP_LOAD | BXE_LEVEL_EXTREME)
|
||||
#define BXE_INSANE_LOAD (BXE_CP_LOAD | BXE_LEVEL_INSANE)
|
||||
|
||||
#define BXE_WARN_SEND (BXE_CP_SEND | BXE_LEVEL_WARN)
|
||||
#define BXE_INFO_SEND (BXE_CP_SEND | BXE_LEVEL_INFO)
|
||||
#define BXE_VERBOSE_SEND (BXE_CP_SEND | BXE_LEVEL_VERBOSE)
|
||||
#define BXE_EXTREME_SEND (BXE_CP_SEND | BXE_LEVEL_EXTREME)
|
||||
#define BXE_INSANE_SEND (BXE_CP_SEND | BXE_LEVEL_INSANE)
|
||||
|
||||
#define BXE_WARN_RECV (BXE_CP_RECV | BXE_LEVEL_WARN)
|
||||
#define BXE_INFO_RECV (BXE_CP_RECV | BXE_LEVEL_INFO)
|
||||
#define BXE_VERBOSE_RECV (BXE_CP_RECV | BXE_LEVEL_VERBOSE)
|
||||
#define BXE_EXTREME_RECV (BXE_CP_RECV | BXE_LEVEL_EXTREME)
|
||||
#define BXE_INSANE_RECV (BXE_CP_RECV | BXE_LEVEL_INSANE)
|
||||
|
||||
#define BXE_WARN_INTR (BXE_CP_INTR | BXE_LEVEL_WARN)
|
||||
#define BXE_INFO_INTR (BXE_CP_INTR | BXE_LEVEL_INFO)
|
||||
#define BXE_VERBOSE_INTR (BXE_CP_INTR | BXE_LEVEL_VERBOSE)
|
||||
#define BXE_EXTREME_INTR (BXE_CP_INTR | BXE_LEVEL_EXTREME)
|
||||
#define BXE_INSANE_INTR (BXE_CP_INTR | BXE_LEVEL_INSANE)
|
||||
|
||||
#define BXE_WARN_UNLOAD (BXE_CP_UNLOAD | BXE_LEVEL_WARN)
|
||||
#define BXE_INFO_UNLOAD (BXE_CP_UNLOAD | BXE_LEVEL_INFO)
|
||||
#define BXE_VERBOSE_UNLOAD (BXE_CP_UNLOAD | BXE_LEVEL_VERBOSE)
|
||||
#define BXE_EXTREME_UNLOAD (BXE_CP_UNLOAD | BXE_LEVEL_EXTREME)
|
||||
#define BXE_INSANE_UNLOAD (BXE_CP_UNLOAD | BXE_LEVEL_INSANE)
|
||||
|
||||
#define BXE_WARN_RESET (BXE_CP_RESET | BXE_LEVEL_WARN)
|
||||
#define BXE_INFO_RESET (BXE_CP_RESET | BXE_LEVEL_INFO)
|
||||
#define BXE_VERBOSE_RESET (BXE_CP_RESET | BXE_LEVEL_VERBOSE)
|
||||
#define BXE_EXTREME_RESET (BXE_CP_RESET | BXE_LEVEL_EXTREME)
|
||||
#define BXE_INSANE_RESET (BXE_CP_RESET | BXE_LEVEL_INSANE)
|
||||
|
||||
#define BXE_WARN_IOCTL (BXE_CP_IOCTL | BXE_LEVEL_WARN)
|
||||
#define BXE_INFO_IOCTL (BXE_CP_IOCTL | BXE_LEVEL_INFO)
|
||||
#define BXE_VERBOSE_IOCTL (BXE_CP_IOCTL | BXE_LEVEL_VERBOSE)
|
||||
#define BXE_EXTREME_IOCTL (BXE_CP_IOCTL | BXE_LEVEL_EXTREME)
|
||||
#define BXE_INSANE_IOCTL (BXE_CP_IOCTL | BXE_LEVEL_INSANE)
|
||||
|
||||
#define BXE_WARN_STATS (BXE_CP_STATS | BXE_LEVEL_WARN)
|
||||
#define BXE_INFO_STATS (BXE_CP_STATS | BXE_LEVEL_INFO)
|
||||
#define BXE_VERBOSE_STATS (BXE_CP_STATS | BXE_LEVEL_VERBOSE)
|
||||
#define BXE_EXTREME_STATS (BXE_CP_STATS | BXE_LEVEL_EXTREME)
|
||||
#define BXE_INSANE_STATS (BXE_CP_STATS | BXE_LEVEL_INSANE)
|
||||
|
||||
#define BXE_WARN_MISC (BXE_CP_MISC | BXE_LEVEL_WARN)
|
||||
#define BXE_INFO_MISC (BXE_CP_MISC | BXE_LEVEL_INFO)
|
||||
#define BXE_VERBOSE_MISC (BXE_CP_MISC | BXE_LEVEL_VERBOSE)
|
||||
#define BXE_EXTREME_MISC (BXE_CP_MISC | BXE_LEVEL_EXTREME)
|
||||
#define BXE_INSANE_MISC (BXE_CP_MISC | BXE_LEVEL_INSANE)
|
||||
|
||||
#define BXE_WARN_PHY (BXE_CP_PHY | BXE_LEVEL_WARN)
|
||||
#define BXE_INFO_PHY (BXE_CP_PHY | BXE_LEVEL_INFO)
|
||||
#define BXE_VERBOSE_PHY (BXE_CP_PHY | BXE_LEVEL_VERBOSE)
|
||||
#define BXE_EXTREME_PHY (BXE_CP_PHY | BXE_LEVEL_EXTREME)
|
||||
#define BXE_INSANE_PHY (BXE_CP_PHY | BXE_LEVEL_INSANE)
|
||||
|
||||
#define BXE_WARN_RAMROD (BXE_CP_RAMROD | BXE_LEVEL_WARN)
|
||||
#define BXE_INFO_RAMROD (BXE_CP_RAMROD | BXE_LEVEL_INFO)
|
||||
#define BXE_VERBOSE_RAMROD (BXE_CP_RAMROD | BXE_LEVEL_VERBOSE)
|
||||
#define BXE_EXTREME_RAMROD (BXE_CP_RAMROD | BXE_LEVEL_EXTREME)
|
||||
#define BXE_INSANE_RAMROD (BXE_CP_RAMROD | BXE_LEVEL_INSANE)
|
||||
|
||||
#define BXE_WARN_NVRAM (BXE_CP_NVRAM | BXE_LEVEL_WARN)
|
||||
#define BXE_INFO_NVRAM (BXE_CP_NVRAM | BXE_LEVEL_INFO)
|
||||
#define BXE_VERBOSE_NVRAM (BXE_CP_NVRAM | BXE_LEVEL_VERBOSE)
|
||||
#define BXE_EXTREME_NVRAM (BXE_CP_NVRAM | BXE_LEVEL_EXTREME)
|
||||
#define BXE_INSANE_NVRAM (BXE_CP_NVRAM | BXE_LEVEL_INSANE)
|
||||
|
||||
#define BXE_WARN_REGS (BXE_CP_REGS | BXE_LEVEL_WARN)
|
||||
#define BXE_INFO_REGS (BXE_CP_REGS | BXE_LEVEL_INFO)
|
||||
#define BXE_VERBOSE_REGS (BXE_CP_REGS | BXE_LEVEL_VERBOSE)
|
||||
#define BXE_EXTREME_REGS (BXE_CP_REGS | BXE_LEVEL_EXTREME)
|
||||
#define BXE_INSANE_REGS (BXE_CP_REGS | BXE_LEVEL_INSANE)
|
||||
|
||||
#define BXE_FATAL (BXE_CP_ALL | BXE_LEVEL_FATAL)
|
||||
#define BXE_WARN (BXE_CP_ALL | BXE_LEVEL_WARN)
|
||||
#define BXE_INFO (BXE_CP_ALL | BXE_LEVEL_INFO)
|
||||
#define BXE_VERBOSE (BXE_CP_ALL | BXE_LEVEL_VERBOSE)
|
||||
#define BXE_EXTREME (BXE_CP_ALL | BXE_LEVEL_EXTREME)
|
||||
#define BXE_INSANE (BXE_CP_ALL | BXE_LEVEL_INSANE)
|
||||
|
||||
#define BXE_CODE_PATH(cp) ((cp & BXE_CP_MASK) & bxe_debug)
|
||||
#define BXE_MSG_LEVEL(lv) ((lv & BXE_LEVEL_MASK) <= (bxe_debug & BXE_LEVEL_MASK))
|
||||
#define BXE_LOG_MSG(m) (BXE_CODE_PATH(m) && BXE_MSG_LEVEL(m))
|
||||
|
||||
|
||||
#ifdef BXE_DEBUG
|
||||
|
||||
/* Print a message based on the logging level and code path. */
|
||||
#define DBPRINT(sc, level, format, args...) \
|
||||
do { \
|
||||
if (BXE_LOG_MSG(level)) { \
|
||||
device_printf(sc->bxe_dev, format, ## args); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/* Runs a particular command when debugging is enabled. */
|
||||
#define DBRUN(args...) \
|
||||
do { \
|
||||
args; \
|
||||
} while (0)
|
||||
|
||||
/* Runs a particular command based on the logging level. */
|
||||
#define DBRUNLV(level, args...) \
|
||||
if (BXE_MSG_LEVEL(level)) { \
|
||||
args; \
|
||||
}
|
||||
|
||||
/* Runs a particular command based on the code path. */
|
||||
#define DBRUNCP(cp, args...) \
|
||||
if (BXE_CODE_PATH(cp)) { \
|
||||
args; \
|
||||
}
|
||||
|
||||
/* Runs a particular command based on a condition. */
|
||||
#define DBRUNIF(cond, args...) \
|
||||
if (cond) { \
|
||||
args; \
|
||||
}
|
||||
|
||||
/* Runs a particular command based on the logging level and code path. */
|
||||
#define DBRUNMSG(msg, args...) \
|
||||
if (BXE_LOG_MSG(msg)) { \
|
||||
args; \
|
||||
}
|
||||
|
||||
/* Announces function entry. */
|
||||
#define DBENTER(cond) \
|
||||
DBPRINT(sc, (cond), "%s(enter:%d)\n", __FUNCTION__, curcpu) \
|
||||
|
||||
/* Announces function exit. */
|
||||
#define DBEXIT(cond) \
|
||||
DBPRINT(sc, (cond), "%s(exit:%d)\n", __FUNCTION__, curcpu) \
|
||||
|
||||
/* Needed for random() function which is only used in debugging. */
|
||||
#include <sys/random.h>
|
||||
|
||||
/* Returns FALSE in "defects" per 2^31 - 1 calls, otherwise returns TRUE. */
|
||||
#define DB_RANDOMFALSE(defects) (random() > defects)
|
||||
#define DB_OR_RANDOMFALSE(defects) || (random() > defects)
|
||||
#define DB_AND_RANDOMFALSE(defects) && (random() > ddfects)
|
||||
|
||||
/* Returns TRUE in "defects" per 2^31 - 1 calls, otherwise returns FALSE. */
|
||||
#define DB_RANDOMTRUE(defects) (random() < defects)
|
||||
#define DB_OR_RANDOMTRUE(defects) || (random() < defects)
|
||||
#define DB_AND_RANDOMTRUE(defects) && (random() < defects)
|
||||
|
||||
#else
|
||||
|
||||
#define DBPRINT(...)
|
||||
#define DBRUN(...)
|
||||
#define DBRUNLV(...)
|
||||
#define DBRUNCP(...)
|
||||
#define DBRUNIF(...)
|
||||
#define DBRUNMSG(...)
|
||||
#define DBENTER(...)
|
||||
#define DBENTER_UNLOCKED(...)
|
||||
#define DBEXIT(...)
|
||||
#define DBEXIT_UNLOCKED(...)
|
||||
#define DB_RANDOMFALSE(...)
|
||||
#define DB_OR_RANDOMFALSE(...)
|
||||
#define DB_AND_RANDOMFALSE(...)
|
||||
#define DB_RANDOMTRUE(...)
|
||||
#define DB_OR_RANDOMTRUE(...)
|
||||
#define DB_AND_RANDOMTRUE(...)
|
||||
|
||||
#endif /* BXE_DEBUG */
|
||||
|
||||
/* Generic bit decoding for printf("%b"). */
|
||||
#define BXE_DWORD_PRINTFB \
|
||||
"\020" \
|
||||
"\40b31" \
|
||||
"\37b30" \
|
||||
"\36b29" \
|
||||
"\35b28" \
|
||||
"\34b27" \
|
||||
"\33b26" \
|
||||
"\32b25" \
|
||||
"\31b24" \
|
||||
"\30b23" \
|
||||
"\27b22" \
|
||||
"\26b21" \
|
||||
"\25b20" \
|
||||
"\24b19" \
|
||||
"\23b18" \
|
||||
"\22b17" \
|
||||
"\21b16" \
|
||||
"\20b15" \
|
||||
"\17b14" \
|
||||
"\16b13" \
|
||||
"\15b12" \
|
||||
"\14b11" \
|
||||
"\13b10" \
|
||||
"\12b9" \
|
||||
"\11b8" \
|
||||
"\10b7" \
|
||||
"\07b6" \
|
||||
"\06b5" \
|
||||
"\05b4" \
|
||||
"\04b3" \
|
||||
"\03b2" \
|
||||
"\02b1" \
|
||||
"\01b0"
|
||||
|
||||
/* Supported link settings bit decoding for printf("%b"). */
|
||||
#define BXE_SUPPORTED_PRINTFB \
|
||||
"\020" \
|
||||
"\040b31" \
|
||||
"\037b30" \
|
||||
"\036b29" \
|
||||
"\035b28" \
|
||||
"\034b27" \
|
||||
"\033b26" \
|
||||
"\032b25" \
|
||||
"\031b24" \
|
||||
"\030b23" \
|
||||
"\027b22" \
|
||||
"\026b21" \
|
||||
"\025b20" \
|
||||
"\024b19" \
|
||||
"\023b18" \
|
||||
"\022b17" \
|
||||
"\02110000BaseT-Full" \
|
||||
"\0202500BaseX-Full" \
|
||||
"\017b14" \
|
||||
"\016b13" \
|
||||
"\015b12" \
|
||||
"\014Pause" \
|
||||
"\013Asym-Pause" \
|
||||
"\012Autoneg" \
|
||||
"\011Fiber" \
|
||||
"\010TP" \
|
||||
"\0071000BaseT-Full" \
|
||||
"\0061000BaseT-Half" \
|
||||
"\005100BaseTX-Full" \
|
||||
"\004100BaseTX-Half" \
|
||||
"\00310BaseT-Full" \
|
||||
"\00210BaseT-Half" \
|
||||
"\001b0"
|
||||
|
||||
/* Transmit BD TCP flags bit decoding for printf("%b"). */
|
||||
#define BXE_ETH_TX_PARSE_BD_TCP_FLAGS_PRINTFB \
|
||||
"\020" \
|
||||
"\10CWR" \
|
||||
"\07ECE" \
|
||||
"\06URG" \
|
||||
"\05ACK" \
|
||||
"\04PSH" \
|
||||
"\03RST" \
|
||||
"\02SYN" \
|
||||
"\01FIN"
|
||||
|
||||
/* Parsing BD global data bit decoding for printf("%b"). */
|
||||
#define BXE_ETH_TX_PARSE_BD_GLOBAL_DATA_PRINTFB \
|
||||
"\020" \
|
||||
"\10NS" \
|
||||
"\07LLC_SNAP" \
|
||||
"\06PSEUDO_CS_WO_LEN" \
|
||||
"\05CS_ANY"
|
||||
|
||||
/* Transmit BD flags bit decoding for printf("%b"). */
|
||||
#define BXE_ETH_TX_BD_FLAGS_PRINTFB \
|
||||
"\020" \
|
||||
"\10IPv6" \
|
||||
"\07LSO" \
|
||||
"\06HDR_POOL" \
|
||||
"\05START" \
|
||||
"\04END" \
|
||||
"\03TCP_CSUM" \
|
||||
"\02IP_CSUM" \
|
||||
"\01VLAN"
|
||||
|
||||
/* Receive CQE error flags bit decoding for printf("%b"). */
|
||||
#define BXE_ETH_FAST_PATH_RX_CQE_ERROR_FLAGS_PRINTFB \
|
||||
"\020" \
|
||||
"\10RSRVD" \
|
||||
"\07RSRVD" \
|
||||
"\06END_FLAG" \
|
||||
"\05START_FLAG" \
|
||||
"\04L4_BAD_XSUM" \
|
||||
"\03IP_BAD_XSUM" \
|
||||
"\02PHY_DECODE_ERR" \
|
||||
"\01SP"
|
||||
|
||||
#endif /* _BXE_DEBUG_H */
|
624
sys/dev/bxe/bxe_fw_defs.h
Normal file
624
sys/dev/bxe/bxe_fw_defs.h
Normal file
@ -0,0 +1,624 @@
|
||||
/*-
|
||||
* Copyright (c) 2007-2011 Broadcom Corporation. All rights reserved.
|
||||
*
|
||||
* Gary Zambrano <zambrano@broadcom.com>
|
||||
* David Christensen <davidch@broadcom.com>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of Broadcom Corporation nor the name of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written consent.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS'
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*$FreeBSD$*/
|
||||
|
||||
#ifndef _BXE_FW_DEFS_H
|
||||
#define _BXE_FW_DEFS_H
|
||||
|
||||
#define CSTORM_ASSERT_LIST_INDEX_OFFSET \
|
||||
(IS_E1H_OFFSET ? 0x7000 : 0x1000)
|
||||
#define CSTORM_ASSERT_LIST_OFFSET(idx) \
|
||||
(IS_E1H_OFFSET ? (0x7020 + (idx * 0x10)) : (0x1020 + (idx * 0x10)))
|
||||
#define CSTORM_DEF_SB_HC_DISABLE_C_OFFSET(function, index) \
|
||||
(IS_E1H_OFFSET ? (0x8622 + ((function>>1) * 0x40) + \
|
||||
((function&1) * 0x100) + (index * 0x4)) : (0x3562 + (function * \
|
||||
0x40) + (index * 0x4)))
|
||||
#define CSTORM_DEF_SB_HC_DISABLE_U_OFFSET(function, index) \
|
||||
(IS_E1H_OFFSET ? (0x8822 + ((function>>1) * 0x80) + \
|
||||
((function&1) * 0x200) + (index * 0x4)) : (0x35e2 + (function * \
|
||||
0x80) + (index * 0x4)))
|
||||
#define CSTORM_DEF_SB_HOST_SB_ADDR_C_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8600 + ((function>>1) * 0x40) + \
|
||||
((function&1) * 0x100)) : (0x3540 + (function * 0x40)))
|
||||
#define CSTORM_DEF_SB_HOST_SB_ADDR_U_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8800 + ((function>>1) * 0x80) + \
|
||||
((function&1) * 0x200)) : (0x35c0 + (function * 0x80)))
|
||||
#define CSTORM_DEF_SB_HOST_STATUS_BLOCK_C_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8608 + ((function>>1) * 0x40) + \
|
||||
((function&1) * 0x100)) : (0x3548 + (function * 0x40)))
|
||||
#define CSTORM_DEF_SB_HOST_STATUS_BLOCK_U_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8808 + ((function>>1) * 0x80) + \
|
||||
((function&1) * 0x200)) : (0x35c8 + (function * 0x80)))
|
||||
#define CSTORM_FUNCTION_MODE_OFFSET \
|
||||
(IS_E1H_OFFSET ? 0x11e8 : 0xffffffff)
|
||||
#define CSTORM_HC_BTR_C_OFFSET(port) \
|
||||
(IS_E1H_OFFSET ? (0x8c04 + (port * 0xf0)) : (0x36c4 + (port * 0xc0)))
|
||||
#define CSTORM_HC_BTR_U_OFFSET(port) \
|
||||
(IS_E1H_OFFSET ? (0x8de4 + (port * 0xf0)) : (0x3844 + (port * 0xc0)))
|
||||
#define CSTORM_ISCSI_CQ_SIZE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x6680 + (function * 0x8)) : (0x25a0 + \
|
||||
(function * 0x8)))
|
||||
#define CSTORM_ISCSI_CQ_SQN_SIZE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x66c0 + (function * 0x8)) : (0x25b0 + \
|
||||
(function * 0x8)))
|
||||
#define CSTORM_ISCSI_EQ_CONS_OFFSET(function, eqIdx) \
|
||||
(IS_E1H_OFFSET ? (0x6040 + (function * 0xc0) + (eqIdx * 0x18)) : \
|
||||
(0x2410 + (function * 0xc0) + (eqIdx * 0x18)))
|
||||
#define CSTORM_ISCSI_EQ_NEXT_EQE_ADDR_OFFSET(function, eqIdx) \
|
||||
(IS_E1H_OFFSET ? (0x6044 + (function * 0xc0) + (eqIdx * 0x18)) : \
|
||||
(0x2414 + (function * 0xc0) + (eqIdx * 0x18)))
|
||||
#define CSTORM_ISCSI_EQ_NEXT_PAGE_ADDR_OFFSET(function, eqIdx) \
|
||||
(IS_E1H_OFFSET ? (0x604c + (function * 0xc0) + (eqIdx * 0x18)) : \
|
||||
(0x241c + (function * 0xc0) + (eqIdx * 0x18)))
|
||||
#define CSTORM_ISCSI_EQ_NEXT_PAGE_ADDR_VALID_OFFSET(function, eqIdx) \
|
||||
(IS_E1H_OFFSET ? (0x6057 + (function * 0xc0) + (eqIdx * 0x18)) : \
|
||||
(0x2427 + (function * 0xc0) + (eqIdx * 0x18)))
|
||||
#define CSTORM_ISCSI_EQ_PROD_OFFSET(function, eqIdx) \
|
||||
(IS_E1H_OFFSET ? (0x6042 + (function * 0xc0) + (eqIdx * 0x18)) : \
|
||||
(0x2412 + (function * 0xc0) + (eqIdx * 0x18)))
|
||||
#define CSTORM_ISCSI_EQ_SB_INDEX_OFFSET(function, eqIdx) \
|
||||
(IS_E1H_OFFSET ? (0x6056 + (function * 0xc0) + (eqIdx * 0x18)) : \
|
||||
(0x2426 + (function * 0xc0) + (eqIdx * 0x18)))
|
||||
#define CSTORM_ISCSI_EQ_SB_NUM_OFFSET(function, eqIdx) \
|
||||
(IS_E1H_OFFSET ? (0x6054 + (function * 0xc0) + (eqIdx * 0x18)) : \
|
||||
(0x2424 + (function * 0xc0) + (eqIdx * 0x18)))
|
||||
#define CSTORM_ISCSI_HQ_SIZE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x6640 + (function * 0x8)) : (0x2590 + \
|
||||
(function * 0x8)))
|
||||
#define CSTORM_ISCSI_NUM_OF_TASKS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x6004 + (function * 0x8)) : (0x2404 + \
|
||||
(function * 0x8)))
|
||||
#define CSTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x6002 + (function * 0x8)) : (0x2402 + \
|
||||
(function * 0x8)))
|
||||
#define CSTORM_ISCSI_PAGE_SIZE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x6000 + (function * 0x8)) : (0x2400 + \
|
||||
(function * 0x8)))
|
||||
#define CSTORM_SB_HC_DISABLE_C_OFFSET(port, cpu_id, index) \
|
||||
(IS_E1H_OFFSET ? (0x811a + (port * 0x280) + (cpu_id * 0x28) + \
|
||||
(index * 0x4)) : (0x305a + (port * 0x280) + (cpu_id * 0x28) + \
|
||||
(index * 0x4)))
|
||||
#define CSTORM_SB_HC_DISABLE_U_OFFSET(port, cpu_id, index) \
|
||||
(IS_E1H_OFFSET ? (0xb01a + (port * 0x800) + (cpu_id * 0x80) + \
|
||||
(index * 0x4)) : (0x401a + (port * 0x800) + (cpu_id * 0x80) + \
|
||||
(index * 0x4)))
|
||||
#define CSTORM_SB_HC_TIMEOUT_C_OFFSET(port, cpu_id, index) \
|
||||
(IS_E1H_OFFSET ? (0x8118 + (port * 0x280) + (cpu_id * 0x28) + \
|
||||
(index * 0x4)) : (0x3058 + (port * 0x280) + (cpu_id * 0x28) + \
|
||||
(index * 0x4)))
|
||||
#define CSTORM_SB_HC_TIMEOUT_U_OFFSET(port, cpu_id, index) \
|
||||
(IS_E1H_OFFSET ? (0xb018 + (port * 0x800) + (cpu_id * 0x80) + \
|
||||
(index * 0x4)) : (0x4018 + (port * 0x800) + (cpu_id * 0x80) + \
|
||||
(index * 0x4)))
|
||||
#define CSTORM_SB_HOST_SB_ADDR_C_OFFSET(port, cpu_id) \
|
||||
(IS_E1H_OFFSET ? (0x8100 + (port * 0x280) + (cpu_id * 0x28)) : \
|
||||
(0x3040 + (port * 0x280) + (cpu_id * 0x28)))
|
||||
#define CSTORM_SB_HOST_SB_ADDR_U_OFFSET(port, cpu_id) \
|
||||
(IS_E1H_OFFSET ? (0xb000 + (port * 0x800) + (cpu_id * 0x80)) : \
|
||||
(0x4000 + (port * 0x800) + (cpu_id * 0x80)))
|
||||
#define CSTORM_SB_HOST_STATUS_BLOCK_C_OFFSET(port, cpu_id) \
|
||||
(IS_E1H_OFFSET ? (0x8108 + (port * 0x280) + (cpu_id * 0x28)) : \
|
||||
(0x3048 + (port * 0x280) + (cpu_id * 0x28)))
|
||||
#define CSTORM_SB_HOST_STATUS_BLOCK_U_OFFSET(port, cpu_id) \
|
||||
(IS_E1H_OFFSET ? (0xb008 + (port * 0x800) + (cpu_id * 0x80)) : \
|
||||
(0x4008 + (port * 0x800) + (cpu_id * 0x80)))
|
||||
#define CSTORM_SB_STATUS_BLOCK_C_SIZE 0x10
|
||||
#define CSTORM_SB_STATUS_BLOCK_U_SIZE 0x60
|
||||
#define CSTORM_STATS_FLAGS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x1108 + (function * 0x8)) : (0x5108 + \
|
||||
(function * 0x8)))
|
||||
#define TSTORM_APPROXIMATE_MATCH_MULTICAST_FILTERING_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x3200 + (function * 0x20)) : 0xffffffff)
|
||||
#define TSTORM_ASSERT_LIST_INDEX_OFFSET \
|
||||
(IS_E1H_OFFSET ? 0xa000 : 0x1000)
|
||||
#define TSTORM_ASSERT_LIST_OFFSET(idx) \
|
||||
(IS_E1H_OFFSET ? (0xa020 + (idx * 0x10)) : (0x1020 + (idx * 0x10)))
|
||||
#define TSTORM_CLIENT_CONFIG_OFFSET(port, client_id) \
|
||||
(IS_E1H_OFFSET ? (0x33a0 + (port * 0x1a0) + (client_id * 0x10)) \
|
||||
: (0x9c0 + (port * 0x120) + (client_id * 0x10)))
|
||||
#define TSTORM_COMMON_SAFC_WORKAROUND_ENABLE_OFFSET \
|
||||
(IS_E1H_OFFSET ? 0x1ed8 : 0xffffffff)
|
||||
#define TSTORM_COMMON_SAFC_WORKAROUND_TIMEOUT_10USEC_OFFSET \
|
||||
(IS_E1H_OFFSET ? 0x1eda : 0xffffffff)
|
||||
#define TSTORM_DEF_SB_HC_DISABLE_OFFSET(function, index) \
|
||||
(IS_E1H_OFFSET ? (0xb01a + ((function>>1) * 0x28) + \
|
||||
((function&1) * 0xa0) + (index * 0x4)) : (0x141a + (function * \
|
||||
0x28) + (index * 0x4)))
|
||||
#define TSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0xb000 + ((function>>1) * 0x28) + \
|
||||
((function&1) * 0xa0)) : (0x1400 + (function * 0x28)))
|
||||
#define TSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0xb008 + ((function>>1) * 0x28) + \
|
||||
((function&1) * 0xa0)) : (0x1408 + (function * 0x28)))
|
||||
#define TSTORM_ETH_STATS_QUERY_ADDR_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x2940 + (function * 0x8)) : (0x4928 + \
|
||||
(function * 0x8)))
|
||||
#define TSTORM_FUNCTION_COMMON_CONFIG_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x3000 + (function * 0x40)) : (0x1500 + \
|
||||
(function * 0x40)))
|
||||
#define TSTORM_FUNCTION_MODE_OFFSET \
|
||||
(IS_E1H_OFFSET ? 0x1ed0 : 0xffffffff)
|
||||
#define TSTORM_HC_BTR_OFFSET(port) \
|
||||
(IS_E1H_OFFSET ? (0xb144 + (port * 0x30)) : (0x1454 + (port * 0x18)))
|
||||
#define TSTORM_INDIRECTION_TABLE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x12c8 + (function * 0x80)) : (0x22c8 + \
|
||||
(function * 0x80)))
|
||||
#define TSTORM_INDIRECTION_TABLE_SIZE 0x80
|
||||
#define TSTORM_ISCSI_CONN_BUF_PBL_OFFSET(function, pblEntry) \
|
||||
(IS_E1H_OFFSET ? (0x60c0 + (function * 0x40) + (pblEntry * 0x8)) \
|
||||
: (0x4c30 + (function * 0x40) + (pblEntry * 0x8)))
|
||||
#define TSTORM_ISCSI_ERROR_BITMAP_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x6340 + (function * 0x8)) : (0x4cd0 + \
|
||||
(function * 0x8)))
|
||||
#define TSTORM_ISCSI_NUM_OF_TASKS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x6004 + (function * 0x8)) : (0x4c04 + \
|
||||
(function * 0x8)))
|
||||
#define TSTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x6002 + (function * 0x8)) : (0x4c02 + \
|
||||
(function * 0x8)))
|
||||
#define TSTORM_ISCSI_PAGE_SIZE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x6000 + (function * 0x8)) : (0x4c00 + \
|
||||
(function * 0x8)))
|
||||
#define TSTORM_ISCSI_RQ_SIZE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x6080 + (function * 0x8)) : (0x4c20 + \
|
||||
(function * 0x8)))
|
||||
#define TSTORM_ISCSI_TCP_VARS_FLAGS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x6040 + (function * 0x8)) : (0x4c10 + \
|
||||
(function * 0x8)))
|
||||
#define TSTORM_ISCSI_TCP_VARS_LSB_LOCAL_MAC_ADDR_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x6042 + (function * 0x8)) : (0x4c12 + \
|
||||
(function * 0x8)))
|
||||
#define TSTORM_ISCSI_TCP_VARS_MSB_LOCAL_MAC_ADDR_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x6044 + (function * 0x8)) : (0x4c14 + \
|
||||
(function * 0x8)))
|
||||
#define TSTORM_MAC_FILTER_CONFIG_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x3008 + (function * 0x40)) : (0x1508 + \
|
||||
(function * 0x40)))
|
||||
#define TSTORM_PER_COUNTER_ID_STATS_OFFSET(port, stats_counter_id) \
|
||||
(IS_E1H_OFFSET ? (0x2010 + (port * 0x490) + (stats_counter_id * \
|
||||
0x40)) : (0x4010 + (port * 0x490) + (stats_counter_id * 0x40)))
|
||||
#define TSTORM_STATS_FLAGS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x29c0 + (function * 0x8)) : (0x4948 + \
|
||||
(function * 0x8)))
|
||||
#define TSTORM_TCP_MAX_CWND_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x4004 + (function * 0x8)) : (0x1fb4 + \
|
||||
(function * 0x8)))
|
||||
#define USTORM_AGG_DATA_OFFSET (IS_E1H_OFFSET ? 0xa000 : 0x3000)
|
||||
#define USTORM_AGG_DATA_SIZE (IS_E1H_OFFSET ? 0x2000 : 0x1000)
|
||||
#define USTORM_ASSERT_LIST_INDEX_OFFSET \
|
||||
(IS_E1H_OFFSET ? 0x8000 : 0x1000)
|
||||
#define USTORM_ASSERT_LIST_OFFSET(idx) \
|
||||
(IS_E1H_OFFSET ? (0x8020 + (idx * 0x10)) : (0x1020 + (idx * 0x10)))
|
||||
#define USTORM_CQE_PAGE_BASE_OFFSET(port, clientId) \
|
||||
(IS_E1H_OFFSET ? (0x1010 + (port * 0x680) + (clientId * 0x40)) : \
|
||||
(0x4010 + (port * 0x360) + (clientId * 0x30)))
|
||||
|
||||
#define USTORM_CQE_PAGE_NEXT_OFFSET(port, clientId) \
|
||||
(IS_E1H_OFFSET ? (0x1028 + (port * 0x680) + (clientId * 0x40)) : \
|
||||
(0x4028 + (port * 0x360) + (clientId * 0x30)))
|
||||
|
||||
#define USTORM_ETH_PAUSE_ENABLED_OFFSET(port) \
|
||||
(IS_E1H_OFFSET ? (0x2ad4 + (port * 0x8)) : 0xffffffff)
|
||||
#define USTORM_ETH_RING_PAUSE_DATA_OFFSET(port, clientId) \
|
||||
(IS_E1H_OFFSET ? (0x1030 + (port * 0x680) + (clientId * 0x40)) : \
|
||||
0xffffffff)
|
||||
#define USTORM_ETH_STATS_QUERY_ADDR_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x2a50 + (function * 0x8)) : (0x1dd0 + \
|
||||
(function * 0x8)))
|
||||
#define USTORM_FUNCTION_MODE_OFFSET \
|
||||
(IS_E1H_OFFSET ? 0x2448 : 0xffffffff)
|
||||
#define USTORM_ISCSI_CQ_SIZE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x7044 + (function * 0x8)) : (0x2414 + \
|
||||
(function * 0x8)))
|
||||
#define USTORM_ISCSI_CQ_SQN_SIZE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x7046 + (function * 0x8)) : (0x2416 + \
|
||||
(function * 0x8)))
|
||||
#define USTORM_ISCSI_ERROR_BITMAP_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x7688 + (function * 0x8)) : (0x29c8 + \
|
||||
(function * 0x8)))
|
||||
#define USTORM_ISCSI_GLOBAL_BUF_PHYS_ADDR_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x7648 + (function * 0x8)) : (0x29b8 + \
|
||||
(function * 0x8)))
|
||||
#define USTORM_ISCSI_NUM_OF_TASKS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x7004 + (function * 0x8)) : (0x2404 + \
|
||||
(function * 0x8)))
|
||||
#define USTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x7002 + (function * 0x8)) : (0x2402 + \
|
||||
(function * 0x8)))
|
||||
#define USTORM_ISCSI_PAGE_SIZE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x7000 + (function * 0x8)) : (0x2400 + \
|
||||
(function * 0x8)))
|
||||
#define USTORM_ISCSI_R2TQ_SIZE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x7040 + (function * 0x8)) : (0x2410 + \
|
||||
(function * 0x8)))
|
||||
#define USTORM_ISCSI_RQ_BUFFER_SIZE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x7080 + (function * 0x8)) : (0x2420 + \
|
||||
(function * 0x8)))
|
||||
#define USTORM_ISCSI_RQ_SIZE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x7084 + (function * 0x8)) : (0x2424 + \
|
||||
(function * 0x8)))
|
||||
#define USTORM_MAX_AGG_SIZE_OFFSET(port, clientId) \
|
||||
(IS_E1H_OFFSET ? (0x1018 + (port * 0x680) + (clientId * 0x40)) : \
|
||||
(0x4018 + (port * 0x360) + (clientId * 0x30)))
|
||||
#define USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x2408 + (function * 0x8)) : (0x1da8 + \
|
||||
(function * 0x8)))
|
||||
#define USTORM_PER_COUNTER_ID_STATS_OFFSET(port, stats_counter_id) \
|
||||
(IS_E1H_OFFSET ? (0x2450 + (port * 0x2d0) + (stats_counter_id * \
|
||||
0x28)) : (0x1500 + (port * 0x2d0) + (stats_counter_id * 0x28)))
|
||||
#define USTORM_RX_PRODS_OFFSET(port, client_id) \
|
||||
(IS_E1H_OFFSET ? (0x1000 + (port * 0x680) + (client_id * 0x40)) \
|
||||
: (0x4000 + (port * 0x360) + (client_id * 0x30)))
|
||||
#define USTORM_STATS_FLAGS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x29f0 + (function * 0x8)) : (0x1db8 + \
|
||||
(function * 0x8)))
|
||||
#define USTORM_TPA_BTR_OFFSET (IS_E1H_OFFSET ? 0x3da5 : 0x5095)
|
||||
#define USTORM_TPA_BTR_SIZE 0x1
|
||||
#define XSTORM_ASSERT_LIST_INDEX_OFFSET \
|
||||
(IS_E1H_OFFSET ? 0x9000 : 0x1000)
|
||||
#define XSTORM_ASSERT_LIST_OFFSET(idx) \
|
||||
(IS_E1H_OFFSET ? (0x9020 + (idx * 0x10)) : (0x1020 + (idx * 0x10)))
|
||||
#define XSTORM_CMNG_PER_PORT_VARS_OFFSET(port) \
|
||||
(IS_E1H_OFFSET ? (0x24a8 + (port * 0x50)) : (0x3a80 + (port * 0x50)))
|
||||
#define XSTORM_DEF_SB_HC_DISABLE_OFFSET(function, index) \
|
||||
(IS_E1H_OFFSET ? (0xa01a + ((function>>1) * 0x28) + \
|
||||
((function&1) * 0xa0) + (index * 0x4)) : (0x141a + (function * \
|
||||
0x28) + (index * 0x4)))
|
||||
#define XSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0xa000 + ((function>>1) * 0x28) + \
|
||||
((function&1) * 0xa0)) : (0x1400 + (function * 0x28)))
|
||||
#define XSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0xa008 + ((function>>1) * 0x28) + \
|
||||
((function&1) * 0xa0)) : (0x1408 + (function * 0x28)))
|
||||
#define XSTORM_E1HOV_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x2c10 + (function * 0x8)) : 0xffffffff)
|
||||
#define XSTORM_ETH_STATS_QUERY_ADDR_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x2418 + (function * 0x8)) : (0x3a50 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_FAIRNESS_PER_VN_VARS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x2588 + (function * 0x90)) : (0x3b60 + \
|
||||
(function * 0x90)))
|
||||
#define XSTORM_FUNCTION_MODE_OFFSET \
|
||||
(IS_E1H_OFFSET ? 0x2c50 : 0xffffffff)
|
||||
#define XSTORM_HC_BTR_OFFSET(port) \
|
||||
(IS_E1H_OFFSET ? (0xa144 + (port * 0x30)) : (0x1454 + (port * 0x18)))
|
||||
#define XSTORM_ISCSI_HQ_SIZE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x80c0 + (function * 0x8)) : (0x1c30 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_ISCSI_LOCAL_MAC_ADDR0_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8080 + (function * 0x8)) : (0x1c20 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_ISCSI_LOCAL_MAC_ADDR1_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8081 + (function * 0x8)) : (0x1c21 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_ISCSI_LOCAL_MAC_ADDR2_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8082 + (function * 0x8)) : (0x1c22 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_ISCSI_LOCAL_MAC_ADDR3_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8083 + (function * 0x8)) : (0x1c23 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_ISCSI_LOCAL_MAC_ADDR4_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8084 + (function * 0x8)) : (0x1c24 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_ISCSI_LOCAL_MAC_ADDR5_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8085 + (function * 0x8)) : (0x1c25 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_ISCSI_LOCAL_VLAN_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8086 + (function * 0x8)) : (0x1c26 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_ISCSI_NUM_OF_TASKS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8004 + (function * 0x8)) : (0x1c04 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8002 + (function * 0x8)) : (0x1c02 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_ISCSI_PAGE_SIZE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8000 + (function * 0x8)) : (0x1c00 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_ISCSI_R2TQ_SIZE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x80c4 + (function * 0x8)) : (0x1c34 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_ISCSI_SQ_SIZE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x80c2 + (function * 0x8)) : (0x1c32 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_ISCSI_TCP_VARS_ADV_WND_SCL_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8043 + (function * 0x8)) : (0x1c13 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_ISCSI_TCP_VARS_FLAGS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8042 + (function * 0x8)) : (0x1c12 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_ISCSI_TCP_VARS_TOS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8041 + (function * 0x8)) : (0x1c11 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_ISCSI_TCP_VARS_TTL_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x8040 + (function * 0x8)) : (0x1c10 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_PER_COUNTER_ID_STATS_OFFSET(port, stats_counter_id) \
|
||||
(IS_E1H_OFFSET ? (0xc000 + (port * 0x360) + (stats_counter_id * \
|
||||
0x30)) : (0x3378 + (port * 0x360) + (stats_counter_id * 0x30)))
|
||||
#define XSTORM_RATE_SHAPING_PER_VN_VARS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x2548 + (function * 0x90)) : (0x3b20 + \
|
||||
(function * 0x90)))
|
||||
#define XSTORM_SPQ_PAGE_BASE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x2000 + (function * 0x10)) : (0x3328 + \
|
||||
(function * 0x10)))
|
||||
#define XSTORM_SPQ_PROD_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x2008 + (function * 0x10)) : (0x3330 + \
|
||||
(function * 0x10)))
|
||||
#define XSTORM_STATS_FLAGS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x23d8 + (function * 0x8)) : (0x3a40 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_TCP_GLOBAL_DEL_ACK_COUNTER_ENABLED_OFFSET(port) \
|
||||
(IS_E1H_OFFSET ? (0x4000 + (port * 0x8)) : (0x1960 + (port * 0x8)))
|
||||
#define XSTORM_TCP_GLOBAL_DEL_ACK_COUNTER_MAX_COUNT_OFFSET(port) \
|
||||
(IS_E1H_OFFSET ? (0x4001 + (port * 0x8)) : (0x1961 + (port * 0x8)))
|
||||
#define XSTORM_TCP_TX_SWS_TIMER_VAL_OFFSET(function) \
|
||||
(IS_E1H_OFFSET ? (0x4060 + ((function>>1) * 0x8) + ((function&1) \
|
||||
* 0x4)) : (0x1978 + (function * 0x4)))
|
||||
#define COMMON_ASM_INVALID_ASSERT_OPCODE 0x0
|
||||
|
||||
/**
|
||||
* This file defines HSI constants for the ETH flow
|
||||
*/
|
||||
#ifdef _EVEREST_MICROCODE
|
||||
#include "microcode_constants.h"
|
||||
#include "eth_rx_bd.h"
|
||||
#include "eth_tx_bd.h"
|
||||
#include "eth_rx_cqe.h"
|
||||
#include "eth_rx_sge.h"
|
||||
#include "eth_rx_cqe_next_page.h"
|
||||
#endif
|
||||
|
||||
/* RSS hash types */
|
||||
#define DEFAULT_HASH_TYPE 0
|
||||
#define IPV4_HASH_TYPE 1
|
||||
#define TCP_IPV4_HASH_TYPE 2
|
||||
#define IPV6_HASH_TYPE 3
|
||||
#define TCP_IPV6_HASH_TYPE 4
|
||||
#define VLAN_PRI_HASH_TYPE 5
|
||||
#define E1HOV_PRI_HASH_TYPE 6
|
||||
#define DSCP_HASH_TYPE 7
|
||||
|
||||
|
||||
/* Ethernet Ring parameters */
|
||||
#define X_ETH_LOCAL_RING_SIZE 13
|
||||
#define FIRST_BD_IN_PKT 0
|
||||
#define PARSE_BD_INDEX 1
|
||||
#define NUM_OF_ETH_BDS_IN_PAGE ((PAGE_SIZE)/(STRUCT_SIZE(eth_tx_bd)/8))
|
||||
#define U_ETH_NUM_OF_SGES_TO_FETCH 8
|
||||
#define U_ETH_MAX_SGES_FOR_PACKET 3
|
||||
|
||||
/* Rx ring params */
|
||||
#define U_ETH_LOCAL_BD_RING_SIZE 8
|
||||
#define U_ETH_LOCAL_SGE_RING_SIZE 10
|
||||
#define U_ETH_SGL_SIZE 8
|
||||
|
||||
|
||||
#define U_ETH_SGES_PER_PAGE_INVERSE_MASK \
|
||||
(0xFFFF - ((PAGE_SIZE/((STRUCT_SIZE(eth_rx_sge))/8))-1))
|
||||
|
||||
#define TU_ETH_CQES_PER_PAGE (PAGE_SIZE/(STRUCT_SIZE(eth_rx_cqe)/8))
|
||||
#define U_ETH_BDS_PER_PAGE (PAGE_SIZE/(STRUCT_SIZE(eth_rx_bd)/8))
|
||||
#define U_ETH_SGES_PER_PAGE (PAGE_SIZE/(STRUCT_SIZE(eth_rx_sge)/8))
|
||||
|
||||
#define U_ETH_BDS_PER_PAGE_MASK (U_ETH_BDS_PER_PAGE-1)
|
||||
#define U_ETH_CQE_PER_PAGE_MASK (TU_ETH_CQES_PER_PAGE-1)
|
||||
#define U_ETH_SGES_PER_PAGE_MASK (U_ETH_SGES_PER_PAGE-1)
|
||||
|
||||
#define U_ETH_UNDEFINED_Q 0xFF
|
||||
|
||||
/* values of command IDs in the ramrod message */
|
||||
#define RAMROD_CMD_ID_ETH_PORT_SETUP 80
|
||||
#define RAMROD_CMD_ID_ETH_CLIENT_SETUP 85
|
||||
#define RAMROD_CMD_ID_ETH_STAT_QUERY 90
|
||||
#define RAMROD_CMD_ID_ETH_UPDATE 100
|
||||
#define RAMROD_CMD_ID_ETH_HALT 105
|
||||
#define RAMROD_CMD_ID_ETH_SET_MAC 110
|
||||
#define RAMROD_CMD_ID_ETH_CFC_DEL 115
|
||||
#define RAMROD_CMD_ID_ETH_PORT_DEL 120
|
||||
#define RAMROD_CMD_ID_ETH_FORWARD_SETUP 125
|
||||
|
||||
|
||||
/* command values for set mac command */
|
||||
#define T_ETH_MAC_COMMAND_SET 0
|
||||
#define T_ETH_MAC_COMMAND_INVALIDATE 1
|
||||
|
||||
#define T_ETH_INDIRECTION_TABLE_SIZE 128
|
||||
|
||||
/*The CRC32 seed, that is used for the hash(reduction) multicast address */
|
||||
#define T_ETH_CRC32_HASH_SEED 0x00000000
|
||||
|
||||
/* Maximal L2 clients supported */
|
||||
#define ETH_MAX_RX_CLIENTS_E1 18
|
||||
#define ETH_MAX_RX_CLIENTS_E1H 26
|
||||
|
||||
/* Maximal aggregation queues supported */
|
||||
#define ETH_MAX_AGGREGATION_QUEUES_E1 32
|
||||
#define ETH_MAX_AGGREGATION_QUEUES_E1H 64
|
||||
|
||||
/* ETH RSS modes */
|
||||
#define ETH_RSS_MODE_DISABLED 0
|
||||
#define ETH_RSS_MODE_REGULAR 1
|
||||
#define ETH_RSS_MODE_VLAN_PRI 2
|
||||
#define ETH_RSS_MODE_E1HOV_PRI 3
|
||||
#define ETH_RSS_MODE_IP_DSCP 4
|
||||
|
||||
|
||||
/**
|
||||
* This file defines HSI constants common to all microcode flows
|
||||
*/
|
||||
|
||||
/* Connection types */
|
||||
#define ETH_CONNECTION_TYPE 0
|
||||
#define TOE_CONNECTION_TYPE 1
|
||||
#define RDMA_CONNECTION_TYPE 2
|
||||
#define ISCSI_CONNECTION_TYPE 3
|
||||
#define FCOE_CONNECTION_TYPE 4
|
||||
#define RESERVED_CONNECTION_TYPE_0 5
|
||||
#define RESERVED_CONNECTION_TYPE_1 6
|
||||
#define RESERVED_CONNECTION_TYPE_2 7
|
||||
|
||||
|
||||
#define PROTOCOL_STATE_BIT_OFFSET 6
|
||||
|
||||
#define ETH_STATE (ETH_CONNECTION_TYPE << PROTOCOL_STATE_BIT_OFFSET)
|
||||
#define TOE_STATE (TOE_CONNECTION_TYPE << PROTOCOL_STATE_BIT_OFFSET)
|
||||
#define RDMA_STATE (RDMA_CONNECTION_TYPE << PROTOCOL_STATE_BIT_OFFSET)
|
||||
|
||||
/* microcode fixed page page size 4K (chains and ring segments) */
|
||||
#define MC_PAGE_SIZE 4096
|
||||
|
||||
|
||||
/* Host coalescing constants */
|
||||
#define HC_IGU_BC_MODE 0
|
||||
#define HC_IGU_NBC_MODE 1
|
||||
|
||||
#define HC_REGULAR_SEGMENT 0
|
||||
#define HC_DEFAULT_SEGMENT 1
|
||||
|
||||
/* index numbers */
|
||||
#define HC_USTORM_DEF_SB_NUM_INDICES 8
|
||||
#define HC_CSTORM_DEF_SB_NUM_INDICES 8
|
||||
#define HC_XSTORM_DEF_SB_NUM_INDICES 4
|
||||
#define HC_TSTORM_DEF_SB_NUM_INDICES 4
|
||||
#define HC_USTORM_SB_NUM_INDICES 4
|
||||
#define HC_CSTORM_SB_NUM_INDICES 4
|
||||
|
||||
/* index values - which counter to update */
|
||||
|
||||
#define HC_INDEX_U_TOE_RX_CQ_CONS 0
|
||||
#define HC_INDEX_U_ETH_RX_CQ_CONS 1
|
||||
#define HC_INDEX_U_ETH_RX_BD_CONS 2
|
||||
#define HC_INDEX_U_FCOE_EQ_CONS 3
|
||||
|
||||
#define HC_INDEX_C_TOE_TX_CQ_CONS 0
|
||||
#define HC_INDEX_C_ETH_TX_CQ_CONS 1
|
||||
#define HC_INDEX_C_ISCSI_EQ_CONS 2
|
||||
|
||||
#define HC_INDEX_DEF_X_SPQ_CONS 0
|
||||
|
||||
#define HC_INDEX_DEF_C_RDMA_EQ_CONS 0
|
||||
#define HC_INDEX_DEF_C_RDMA_NAL_PROD 1
|
||||
#define HC_INDEX_DEF_C_ETH_FW_TX_CQ_CONS 2
|
||||
#define HC_INDEX_DEF_C_ETH_SLOW_PATH 3
|
||||
#define HC_INDEX_DEF_C_ETH_RDMA_CQ_CONS 4
|
||||
#define HC_INDEX_DEF_C_ETH_ISCSI_CQ_CONS 5
|
||||
#define HC_INDEX_DEF_C_ETH_FCOE_CQ_CONS 6
|
||||
|
||||
#define HC_INDEX_DEF_U_ETH_RDMA_RX_CQ_CONS 0
|
||||
#define HC_INDEX_DEF_U_ETH_ISCSI_RX_CQ_CONS 1
|
||||
#define HC_INDEX_DEF_U_ETH_RDMA_RX_BD_CONS 2
|
||||
#define HC_INDEX_DEF_U_ETH_ISCSI_RX_BD_CONS 3
|
||||
#define HC_INDEX_DEF_U_ETH_FCOE_RX_CQ_CONS 4
|
||||
#define HC_INDEX_DEF_U_ETH_FCOE_RX_BD_CONS 5
|
||||
|
||||
/* used by the driver to get the SB offset */
|
||||
#define USTORM_ID 0
|
||||
#define CSTORM_ID 1
|
||||
#define XSTORM_ID 2
|
||||
#define TSTORM_ID 3
|
||||
#define ATTENTION_ID 4
|
||||
|
||||
/* max number of slow path commands per port */
|
||||
#define MAX_RAMRODS_PER_PORT 8
|
||||
|
||||
/* values for RX ETH CQE type field */
|
||||
#define RX_ETH_CQE_TYPE_ETH_FASTPATH 0
|
||||
#define RX_ETH_CQE_TYPE_ETH_RAMROD 1
|
||||
|
||||
|
||||
/**** DEFINES FOR TIMERS/CLOCKS RESOLUTIONS ****/
|
||||
#define EMULATION_FREQUENCY_FACTOR 1600
|
||||
#define FPGA_FREQUENCY_FACTOR 100
|
||||
|
||||
#define TIMERS_TICK_SIZE_CHIP (1e-3)
|
||||
#define TIMERS_TICK_SIZE_EMUL \
|
||||
((TIMERS_TICK_SIZE_CHIP)/((EMULATION_FREQUENCY_FACTOR)))
|
||||
#define TIMERS_TICK_SIZE_FPGA \
|
||||
((TIMERS_TICK_SIZE_CHIP)/((FPGA_FREQUENCY_FACTOR)))
|
||||
|
||||
#define TSEMI_CLK1_RESUL_CHIP (1e-3)
|
||||
#define TSEMI_CLK1_RESUL_EMUL \
|
||||
((TSEMI_CLK1_RESUL_CHIP)/(EMULATION_FREQUENCY_FACTOR))
|
||||
#define TSEMI_CLK1_RESUL_FPGA \
|
||||
((TSEMI_CLK1_RESUL_CHIP)/(FPGA_FREQUENCY_FACTOR))
|
||||
|
||||
#define USEMI_CLK1_RESUL_CHIP (TIMERS_TICK_SIZE_CHIP)
|
||||
#define USEMI_CLK1_RESUL_EMUL (TIMERS_TICK_SIZE_EMUL)
|
||||
#define USEMI_CLK1_RESUL_FPGA (TIMERS_TICK_SIZE_FPGA)
|
||||
|
||||
#define XSEMI_CLK1_RESUL_CHIP (1e-3)
|
||||
#define XSEMI_CLK1_RESUL_EMUL \
|
||||
((XSEMI_CLK1_RESUL_CHIP)/(EMULATION_FREQUENCY_FACTOR))
|
||||
#define XSEMI_CLK1_RESUL_FPGA \
|
||||
((XSEMI_CLK1_RESUL_CHIP)/(FPGA_FREQUENCY_FACTOR))
|
||||
|
||||
#define XSEMI_CLK2_RESUL_CHIP (1e-6)
|
||||
#define XSEMI_CLK2_RESUL_EMUL \
|
||||
((XSEMI_CLK2_RESUL_CHIP)/(EMULATION_FREQUENCY_FACTOR))
|
||||
#define XSEMI_CLK2_RESUL_FPGA \
|
||||
((XSEMI_CLK2_RESUL_CHIP)/(FPGA_FREQUENCY_FACTOR))
|
||||
|
||||
#define SDM_TIMER_TICK_RESUL_CHIP (4*(1e-6))
|
||||
#define SDM_TIMER_TICK_RESUL_EMUL \
|
||||
((SDM_TIMER_TICK_RESUL_CHIP)/(EMULATION_FREQUENCY_FACTOR))
|
||||
#define SDM_TIMER_TICK_RESUL_FPGA \
|
||||
((SDM_TIMER_TICK_RESUL_CHIP)/(FPGA_FREQUENCY_FACTOR))
|
||||
|
||||
|
||||
/**** END DEFINES FOR TIMERS/CLOCKS RESOLUTIONS ****/
|
||||
#define XSTORM_IP_ID_ROLL_HALF 0x8000
|
||||
#define XSTORM_IP_ID_ROLL_ALL 0
|
||||
|
||||
#define FW_LOG_LIST_SIZE 50
|
||||
|
||||
#define NUM_OF_PROTOCOLS 4
|
||||
#define NUM_OF_SAFC_BITS 16
|
||||
#define MAX_COS_NUMBER 4
|
||||
#define MAX_T_STAT_COUNTER_ID 18
|
||||
#define MAX_X_STAT_COUNTER_ID 18
|
||||
#define MAX_U_STAT_COUNTER_ID 18
|
||||
|
||||
|
||||
#define UNKNOWN_ADDRESS 0
|
||||
#define UNICAST_ADDRESS 1
|
||||
#define MULTICAST_ADDRESS 2
|
||||
#define BROADCAST_ADDRESS 3
|
||||
|
||||
#define SINGLE_FUNCTION 0
|
||||
#define MULTI_FUNCTION 1
|
||||
|
||||
#define IP_V4 0
|
||||
#define IP_V6 1
|
||||
|
||||
#endif
|
3179
sys/dev/bxe/bxe_hsi.h
Normal file
3179
sys/dev/bxe/bxe_hsi.h
Normal file
File diff suppressed because it is too large
Load Diff
163
sys/dev/bxe/bxe_include.h
Normal file
163
sys/dev/bxe/bxe_include.h
Normal file
@ -0,0 +1,163 @@
|
||||
/*-
|
||||
* Copyright (c) 2007-2011 Broadcom Corporation. All rights reserved.
|
||||
*
|
||||
* Gary Zambrano <zambrano@broadcom.com>
|
||||
* David Christensen <davidch@broadcom.com>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of Broadcom Corporation nor the name of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written consent.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS'
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*$FreeBSD$*/
|
||||
|
||||
#ifndef _BXE_INCLUDE_H
|
||||
#define _BXE_INCLUDE_H
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/endian.h>
|
||||
|
||||
#include <machine/bus.h>
|
||||
|
||||
/*
|
||||
* Convert FreeBSD byte order to match generated code usage.
|
||||
*/
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
#define __BIG_ENDIAN 1
|
||||
#undef __LITTLE_ENDIAN
|
||||
#else
|
||||
#undef __BIG_ENDIAN
|
||||
#define __LITTLE_ENDIAN 1
|
||||
#endif
|
||||
|
||||
#include "bxe_debug.h"
|
||||
#include "bxe_reg.h"
|
||||
#include "bxe_fw_defs.h"
|
||||
#include "bxe_hsi.h"
|
||||
#include "bxe_link.h"
|
||||
|
||||
/*
|
||||
* Convenience definitions used in multiple files.
|
||||
*/
|
||||
#define BXE_PRINTF(fmt, args...) \
|
||||
do { \
|
||||
device_printf(sc->bxe_dev, fmt, ##args);\
|
||||
}while(0)
|
||||
|
||||
|
||||
#ifdef BXE_DEBUG
|
||||
|
||||
#define REG_WR(sc, offset, val) \
|
||||
bxe_reg_write32(sc, offset, val)
|
||||
#define REG_WR8(sc, offset, val) \
|
||||
bxe_reg_write8(sc, offset, val)
|
||||
#define REG_WR16(sc, offset, val) \
|
||||
bxe_reg_write16(sc, offset, val)
|
||||
#define REG_WR32(sc, offset, val) \
|
||||
bxe_reg_write32(sc, offset, val)
|
||||
|
||||
#define REG_RD(sc, offset) \
|
||||
bxe_reg_read32(sc, offset)
|
||||
#define REG_RD8(sc, offset) \
|
||||
bxe_reg_read8(sc, offset)
|
||||
#define REG_RD16(sc, offset) \
|
||||
bxe_reg_read16(sc, offset)
|
||||
#define REG_RD32(sc, offset) \
|
||||
bxe_reg_read32(sc, offset)
|
||||
|
||||
#define REG_RD_IND(sc, offset) \
|
||||
bxe_reg_rd_ind(sc, offset)
|
||||
#define REG_WR_IND(sc, offset, val) \
|
||||
bxe_reg_wr_ind(sc, offset, val)
|
||||
|
||||
#else
|
||||
|
||||
#define REG_WR(sc, offset, val) \
|
||||
bus_space_write_4(sc->bxe_btag, sc->bxe_bhandle, offset, val)
|
||||
#define REG_WR8(sc, offset, val) \
|
||||
bus_space_write_1(sc->bxe_btag, sc->bxe_bhandle, offset, val)
|
||||
#define REG_WR16(sc, offset, val) \
|
||||
bus_space_write_2(sc->bxe_btag, sc->bxe_bhandle, offset, val)
|
||||
#define REG_WR32(sc, offset, val) \
|
||||
bus_space_write_4(sc->bxe_btag, sc->bxe_bhandle, offset, val)
|
||||
|
||||
#define REG_RD(sc, offset) \
|
||||
bus_space_read_4(sc->bxe_btag, sc->bxe_bhandle, offset)
|
||||
#define REG_RD8(sc, offset) \
|
||||
bus_space_read_1(sc->bxe_btag, sc->bxe_bhandle, offset)
|
||||
#define REG_RD16(sc, offset) \
|
||||
bus_space_read_2(sc->bxe_btag, sc->bxe_bhandle, offset)
|
||||
#define REG_RD32(sc, offset) \
|
||||
bus_space_read_4(sc->bxe_btag, sc->bxe_bhandle, offset)
|
||||
|
||||
#define REG_RD_IND(sc, offset) \
|
||||
bxe_reg_rd_ind(sc, offset)
|
||||
#define REG_WR_IND(sc, offset, val) \
|
||||
bxe_reg_wr_ind(sc, offset, val)
|
||||
|
||||
#endif /* BXE_DEBUG */
|
||||
|
||||
|
||||
#define REG_RD_DMAE(sc, offset, val, len32) \
|
||||
do { \
|
||||
bxe_read_dmae(sc, offset, len32); \
|
||||
memcpy(val, BXE_SP(sc, wb_data[0]), len32 * 4); \
|
||||
} while (0)
|
||||
|
||||
|
||||
#define REG_WR_DMAE(sc, offset, val, len32) \
|
||||
do { \
|
||||
memcpy(BXE_SP(sc, wb_data[0]), val, len32 * 4); \
|
||||
bxe_write_dmae(sc, BXE_SP_MAPPING(sc, wb_data), \
|
||||
offset, len32); \
|
||||
} while (0)
|
||||
|
||||
|
||||
#define SHMEM_ADDR(sc, field) (sc->common.shmem_base + \
|
||||
offsetof(struct shmem_region, field))
|
||||
|
||||
#define SHMEM_RD(sc, field) \
|
||||
REG_RD(sc, SHMEM_ADDR(sc, field))
|
||||
#define SHMEM_RD16(sc, field) \
|
||||
REG_RD16(sc, SHMEM_ADDR(sc, field))
|
||||
|
||||
#define SHMEM_WR(sc, field, val) \
|
||||
REG_WR(sc, SHMEM_ADDR(sc, field), val)
|
||||
|
||||
#define SHMEM2_ADDR(sc, field) (sc->common.shmem2_base + \
|
||||
offsetof(struct shmem2_region, field))
|
||||
#define SHMEM2_RD(sc, field) REG_RD(sc, SHMEM2_ADDR(sc, field))
|
||||
#define SHMEM2_WR(sc, field, val) REG_WR(sc, SHMEM2_ADDR(sc, field), val)
|
||||
|
||||
|
||||
#define EMAC_RD(sc, reg) \
|
||||
REG_RD(sc, emac_base + (uint32_t) reg)
|
||||
#define EMAC_WR(sc, reg, val) \
|
||||
REG_WR(sc, emac_base + (uint32_t) reg, val)
|
||||
|
||||
#define BMAC_WR(sc, reg, val) \
|
||||
REG_WR(sc, GRCBASE_NIG + bmac_addr + reg, val)
|
||||
|
||||
#endif /* _BXE_INCLUDE_H */
|
177
sys/dev/bxe/bxe_init.h
Normal file
177
sys/dev/bxe/bxe_init.h
Normal file
@ -0,0 +1,177 @@
|
||||
/*-
|
||||
* Copyright (c) 2007-2011 Broadcom Corporation. All rights reserved.
|
||||
*
|
||||
* Gary Zambrano <zambrano@broadcom.com>
|
||||
* David Christensen <davidch@broadcom.com>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of Broadcom Corporation nor the name of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written consent.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS'
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*$FreeBSD$*/
|
||||
|
||||
#ifndef BXE_INIT_H
|
||||
#define BXE_INIT_H
|
||||
/*
|
||||
* bxe_init.h: Broadcom Everest network driver.
|
||||
* Structures and macros needed during the initialization.
|
||||
*/
|
||||
|
||||
/* RAM0 size in bytes */
|
||||
#define STORM_INTMEM_SIZE_E1 0x5800
|
||||
#define STORM_INTMEM_SIZE_E1H 0x10000
|
||||
#define STORM_INTMEM_SIZE(sc) \
|
||||
((CHIP_IS_E1(sc) ? STORM_INTMEM_SIZE_E1 : STORM_INTMEM_SIZE_E1H) / 4)
|
||||
|
||||
|
||||
/* Init operation types and structures */
|
||||
/* Common for both E1 and E1H */
|
||||
#define OP_RD 0x1 /* read single register */
|
||||
#define OP_WR 0x2 /* write single register */
|
||||
#define OP_IW 0x3 /* write single register using mailbox */
|
||||
#define OP_SW 0x4 /* copy a string to the device */
|
||||
#define OP_SI 0x5 /* copy a string using mailbox */
|
||||
#define OP_ZR 0x6 /* clear memory */
|
||||
#define OP_ZP 0x7 /* unzip then copy with DMAE */
|
||||
#define OP_WR_64 0x8 /* write 64 bit pattern */
|
||||
#define OP_WB 0x9 /* copy a string using DMAE */
|
||||
|
||||
/* FPGA and EMUL specific operations */
|
||||
#define OP_WR_EMUL 0xa /* write single register on Emulation */
|
||||
#define OP_WR_FPGA 0xb /* write single register on FPGA */
|
||||
#define OP_WR_ASIC 0xc /* write single register on ASIC */
|
||||
|
||||
/* Init stages */
|
||||
/* Never reorder stages !!! */
|
||||
#define COMMON_STAGE 0
|
||||
#define PORT0_STAGE 1
|
||||
#define PORT1_STAGE 2
|
||||
#define FUNC0_STAGE 3
|
||||
#define FUNC1_STAGE 4
|
||||
#define FUNC2_STAGE 5
|
||||
#define FUNC3_STAGE 6
|
||||
#define FUNC4_STAGE 7
|
||||
#define FUNC5_STAGE 8
|
||||
#define FUNC6_STAGE 9
|
||||
#define FUNC7_STAGE 10
|
||||
#define STAGE_IDX_MAX 11
|
||||
|
||||
#define STAGE_START 0
|
||||
#define STAGE_END 1
|
||||
|
||||
|
||||
/* Indices of blocks */
|
||||
#define PRS_BLOCK 0
|
||||
#define SRCH_BLOCK 1
|
||||
#define TSDM_BLOCK 2
|
||||
#define TCM_BLOCK 3
|
||||
#define BRB1_BLOCK 4
|
||||
#define TSEM_BLOCK 5
|
||||
#define PXPCS_BLOCK 6
|
||||
#define EMAC0_BLOCK 7
|
||||
#define EMAC1_BLOCK 8
|
||||
#define DBU_BLOCK 9
|
||||
#define MISC_BLOCK 10
|
||||
#define DBG_BLOCK 11
|
||||
#define NIG_BLOCK 12
|
||||
#define MCP_BLOCK 13
|
||||
#define UPB_BLOCK 14
|
||||
#define CSDM_BLOCK 15
|
||||
#define USDM_BLOCK 16
|
||||
#define CCM_BLOCK 17
|
||||
#define UCM_BLOCK 18
|
||||
#define USEM_BLOCK 19
|
||||
#define CSEM_BLOCK 20
|
||||
#define XPB_BLOCK 21
|
||||
#define DQ_BLOCK 22
|
||||
#define TIMERS_BLOCK 23
|
||||
#define XSDM_BLOCK 24
|
||||
#define QM_BLOCK 25
|
||||
#define PBF_BLOCK 26
|
||||
#define XCM_BLOCK 27
|
||||
#define XSEM_BLOCK 28
|
||||
#define CDU_BLOCK 29
|
||||
#define DMAE_BLOCK 30
|
||||
#define PXP_BLOCK 31
|
||||
#define CFC_BLOCK 32
|
||||
#define HC_BLOCK 33
|
||||
#define PXP2_BLOCK 34
|
||||
#define MISC_AEU_BLOCK 35
|
||||
#define PGLUE_B_BLOCK 36
|
||||
#define IGU_BLOCK 37
|
||||
|
||||
/* Returns the index of start or end of a specific block stage in ops array. */
|
||||
#define BLOCK_OPS_IDX(block, stage, end) \
|
||||
(2 * (((block) * STAGE_IDX_MAX) + (stage)) + (end))
|
||||
|
||||
struct raw_op {
|
||||
uint32_t op:8;
|
||||
uint32_t offset:24;
|
||||
uint32_t raw_data;
|
||||
};
|
||||
|
||||
struct op_read {
|
||||
uint32_t op:8;
|
||||
uint32_t offset:24;
|
||||
uint32_t pad;
|
||||
};
|
||||
|
||||
struct op_write {
|
||||
uint32_t op:8;
|
||||
uint32_t offset:24;
|
||||
uint32_t val;
|
||||
};
|
||||
|
||||
struct op_string_write {
|
||||
uint32_t op:8;
|
||||
uint32_t offset:24;
|
||||
#ifdef __LITTLE_ENDIAN
|
||||
uint16_t data_off;
|
||||
uint16_t data_len;
|
||||
#else /* __BIG_ENDIAN */
|
||||
uint16_t data_len;
|
||||
uint16_t data_off;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct op_zero {
|
||||
uint32_t op:8;
|
||||
uint32_t offset:24;
|
||||
uint32_t len;
|
||||
};
|
||||
|
||||
union init_op {
|
||||
struct op_read read;
|
||||
struct op_write write;
|
||||
struct op_string_write str_wr;
|
||||
struct op_zero zero;
|
||||
struct raw_op raw;
|
||||
};
|
||||
|
||||
#include "bxe_init_values_e1.h"
|
||||
#include "bxe_init_values_e1h.h"
|
||||
|
||||
#endif /* BXE_INIT_H */
|
||||
|
30346
sys/dev/bxe/bxe_init_values_e1.h
Normal file
30346
sys/dev/bxe/bxe_init_values_e1.h
Normal file
File diff suppressed because it is too large
Load Diff
39636
sys/dev/bxe/bxe_init_values_e1h.h
Normal file
39636
sys/dev/bxe/bxe_init_values_e1h.h
Normal file
File diff suppressed because it is too large
Load Diff
6162
sys/dev/bxe/bxe_link.c
Normal file
6162
sys/dev/bxe/bxe_link.c
Normal file
File diff suppressed because it is too large
Load Diff
239
sys/dev/bxe/bxe_link.h
Normal file
239
sys/dev/bxe/bxe_link.h
Normal file
@ -0,0 +1,239 @@
|
||||
/*-
|
||||
* Copyright (c) 2007-2010 Broadcom Corporation. All rights reserved.
|
||||
*
|
||||
* Gary Zambrano <zambrano@broadcom.com>
|
||||
* David Christensen <davidch@broadcom.com>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of Broadcom Corporation nor the name of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written consent.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS'
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*$FreeBSD$*/
|
||||
|
||||
#ifndef BXE_LINK_H
|
||||
#define BXE_LINK_H
|
||||
|
||||
/*
|
||||
* Defines
|
||||
*/
|
||||
#define DEFAULT_PHY_DEV_ADDR 3
|
||||
|
||||
|
||||
|
||||
#define FLOW_CTRL_AUTO PORT_FEATURE_FLOW_CONTROL_AUTO
|
||||
#define FLOW_CTRL_TX PORT_FEATURE_FLOW_CONTROL_TX
|
||||
#define FLOW_CTRL_RX PORT_FEATURE_FLOW_CONTROL_RX
|
||||
#define FLOW_CTRL_BOTH PORT_FEATURE_FLOW_CONTROL_BOTH
|
||||
#define FLOW_CTRL_NONE PORT_FEATURE_FLOW_CONTROL_NONE
|
||||
|
||||
#define SPEED_AUTO_NEG 0
|
||||
#define SPEED_12000 12000
|
||||
#define SPEED_12500 12500
|
||||
#define SPEED_13000 13000
|
||||
#define SPEED_15000 15000
|
||||
#define SPEED_16000 16000
|
||||
|
||||
#define SFP_EEPROM_VENDOR_NAME_ADDR 0x14
|
||||
#define SFP_EEPROM_VENDOR_NAME_SIZE 16
|
||||
#define SFP_EEPROM_VENDOR_OUI_ADDR 0x25
|
||||
#define SFP_EEPROM_VENDOR_OUI_SIZE 3
|
||||
#define SFP_EEPROM_PART_NO_ADDR 0x28
|
||||
#define SFP_EEPROM_PART_NO_SIZE 16
|
||||
#define PWR_FLT_ERR_MSG_LEN 250
|
||||
|
||||
/*
|
||||
* Structs
|
||||
*/
|
||||
/* Inputs parameters to the CLC. */
|
||||
struct link_params {
|
||||
uint8_t port;
|
||||
/* Default / User Configuration */
|
||||
uint8_t loopback_mode;
|
||||
#define LOOPBACK_NONE 0
|
||||
#define LOOPBACK_EMAC 1
|
||||
#define LOOPBACK_BMAC 2
|
||||
#define LOOPBACK_XGXS_10 3
|
||||
#define LOOPBACK_EXT_PHY 4
|
||||
#define LOOPBACK_EXT 5
|
||||
|
||||
uint16_t req_duplex;
|
||||
uint16_t req_flow_ctrl;
|
||||
/* Should be set to TX / BOTH when req_flow_ctrl is set to AUTO. */
|
||||
uint16_t req_fc_auto_adv;
|
||||
/* Also determine AutoNeg. */
|
||||
uint16_t req_line_speed;
|
||||
|
||||
/* Device parameters */
|
||||
uint8_t mac_addr[6];
|
||||
|
||||
/* shmem parameters */
|
||||
uint32_t shmem_base;
|
||||
uint32_t speed_cap_mask;
|
||||
uint32_t switch_cfg;
|
||||
#define SWITCH_CFG_1G PORT_FEATURE_CON_SWITCH_1G_SWITCH
|
||||
#define SWITCH_CFG_10G PORT_FEATURE_CON_SWITCH_10G_SWITCH
|
||||
#define SWITCH_CFG_AUTO_DETECT PORT_FEATURE_CON_SWITCH_AUTO_DETECT
|
||||
|
||||
/* Part of the hw_config read from the shmem. */
|
||||
uint16_t hw_led_mode;
|
||||
|
||||
/* phy_addr populated by the CLC. */
|
||||
uint8_t phy_addr;
|
||||
/* uint8_t reserved1; */
|
||||
|
||||
uint32_t lane_config;
|
||||
uint32_t ext_phy_config;
|
||||
#define XGXS_EXT_PHY_TYPE(ext_phy_config) \
|
||||
((ext_phy_config) & PORT_HW_CFG_XGXS_EXT_PHY_TYPE_MASK)
|
||||
#define XGXS_EXT_PHY_ADDR(ext_phy_config) \
|
||||
(((ext_phy_config) & PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> \
|
||||
PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT)
|
||||
#define SERDES_EXT_PHY_TYPE(ext_phy_config) \
|
||||
((ext_phy_config) & PORT_HW_CFG_SERDES_EXT_PHY_TYPE_MASK)
|
||||
|
||||
/* Phy register parameter */
|
||||
uint32_t chip_id;
|
||||
|
||||
uint16_t xgxs_config_rx[4]; /* preemphasis values for the rx side */
|
||||
uint16_t xgxs_config_tx[4]; /* preemphasis values for the tx side */
|
||||
|
||||
uint32_t feature_config_flags;
|
||||
#define FEATURE_CONFIG_OVERRIDE_PREEMPHASIS_ENABLED (1<<0)
|
||||
#define FEATURE_CONFIG_PFC_ENABLED (1<<1)
|
||||
#define FEATURE_CONFIG_BC_SUPPORTS_OPT_MDL_VRFY (1<<2)
|
||||
#define FEATURE_CONFIG_BCM8727_NOC (1<<3)
|
||||
|
||||
/* Device pointer passed to all callback functions. */
|
||||
struct bxe_softc *sc;
|
||||
};
|
||||
|
||||
/* Output parameters */
|
||||
struct link_vars {
|
||||
uint8_t phy_flags;
|
||||
|
||||
uint8_t mac_type;
|
||||
#define MAC_TYPE_NONE 0
|
||||
#define MAC_TYPE_EMAC 1
|
||||
#define MAC_TYPE_BMAC 2
|
||||
|
||||
/* Internal phy link indication. */
|
||||
uint8_t phy_link_up;
|
||||
uint8_t link_up;
|
||||
|
||||
uint16_t line_speed;
|
||||
uint16_t duplex;
|
||||
|
||||
uint16_t flow_ctrl;
|
||||
uint16_t ieee_fc;
|
||||
|
||||
uint32_t autoneg;
|
||||
#define AUTO_NEG_DISABLED 0x0
|
||||
#define AUTO_NEG_ENABLED 0x1
|
||||
#define AUTO_NEG_COMPLETE 0x2
|
||||
#define AUTO_NEG_PARALLEL_DETECTION_USED 0x4
|
||||
|
||||
/* The same definitions as the shmem parameter. */
|
||||
uint32_t link_status;
|
||||
};
|
||||
|
||||
/*
|
||||
* Functions
|
||||
*/
|
||||
|
||||
/* Initialize the phy. */
|
||||
uint8_t bxe_phy_init(struct link_params *input, struct link_vars *output);
|
||||
|
||||
/*
|
||||
* Reset the link. Should be called when driver or interface goes down
|
||||
* Before calling phy firmware upgrade, the reset_ext_phy should be set
|
||||
* to 0.
|
||||
*/
|
||||
uint8_t bxe_link_reset(struct link_params *params, struct link_vars *vars,
|
||||
uint8_t reset_ext_phy);
|
||||
|
||||
/* bxe_link_update should be called upon link interrupt */
|
||||
uint8_t bxe_link_update(struct link_params *input, struct link_vars *output);
|
||||
|
||||
/*
|
||||
* Use the following cl45 functions to read/write from external_phy
|
||||
* In order to use it to read/write internal phy registers, use
|
||||
* DEFAULT_PHY_DEV_ADDR as devad, and (_bank + (_addr & 0xf)) as
|
||||
* Use ext_phy_type of 0 in case of cl22 over cl45
|
||||
* the register.
|
||||
*/
|
||||
uint8_t bxe_cl45_read(struct bxe_softc *sc, uint8_t port, uint32_t ext_phy_type,
|
||||
uint8_t phy_addr, uint8_t devad, uint16_t reg, uint16_t *ret_val);
|
||||
|
||||
uint8_t bxe_cl45_write(struct bxe_softc *sc, uint8_t port,
|
||||
uint32_t ext_phy_type, uint8_t phy_addr, uint8_t devad, uint16_t reg,
|
||||
uint16_t val);
|
||||
|
||||
/*
|
||||
* Reads the link_status from the shmem, and update the link vars accordingly.
|
||||
*/
|
||||
void bxe_link_status_update(struct link_params *input,
|
||||
struct link_vars *output);
|
||||
/* Returns string representing the fw_version of the external phy. */
|
||||
uint8_t bxe_get_ext_phy_fw_version(struct link_params *params,
|
||||
uint8_t driver_loaded, uint8_t *version, uint16_t len);
|
||||
|
||||
/*
|
||||
* Set/Unset the led
|
||||
* Basically, the CLC takes care of the led for the link, but in case one needs
|
||||
* to set/unset the led unnaturally, set the "mode" to LED_MODE_OPER to blink
|
||||
* the led, and LED_MODE_OFF to set the led off.
|
||||
*/
|
||||
uint8_t bxe_set_led(struct link_params *params, uint8_t mode, uint32_t speed);
|
||||
#define LED_MODE_OFF 0
|
||||
#define LED_MODE_OPER 2
|
||||
|
||||
uint8_t bxe_override_led_value(struct bxe_softc *sc, uint8_t port,
|
||||
uint32_t led_idx, uint32_t value);
|
||||
|
||||
/*
|
||||
* bxe_handle_module_detect_int should be called upon module detection
|
||||
* interrupt.
|
||||
*/
|
||||
void bxe_handle_module_detect_int(struct link_params *params);
|
||||
|
||||
/*
|
||||
* Get the actual link status. In case it returns 0, link is up, otherwise
|
||||
* link is down.
|
||||
*/
|
||||
uint8_t bxe_test_link(struct link_params *input, struct link_vars *vars);
|
||||
|
||||
/* One-time initialization for external phy after power up. */
|
||||
uint8_t bxe_common_init_phy(struct bxe_softc *sc, uint32_t shmem_base);
|
||||
|
||||
/* Reset the external PHY using GPIO. */
|
||||
void bxe_ext_phy_hw_reset(struct bxe_softc *sc, uint8_t port);
|
||||
|
||||
void bxe_sfx7101_sp_sw_reset(struct bxe_softc *sc, uint8_t port,
|
||||
uint8_t phy_addr);
|
||||
|
||||
uint8_t bxe_read_sfp_module_eeprom(struct link_params *params, uint16_t addr,
|
||||
uint8_t byte_cnt, uint8_t *o_buf);
|
||||
|
||||
#endif /* BXE_LINK_H */
|
6391
sys/dev/bxe/bxe_reg.h
Normal file
6391
sys/dev/bxe/bxe_reg.h
Normal file
File diff suppressed because it is too large
Load Diff
1049
sys/dev/bxe/bxe_self_test.h
Normal file
1049
sys/dev/bxe/bxe_self_test.h
Normal file
File diff suppressed because it is too large
Load Diff
131
sys/dev/bxe/dump_e1.h
Normal file
131
sys/dev/bxe/dump_e1.h
Normal file
@ -0,0 +1,131 @@
|
||||
/*-
|
||||
* Copyright (c) 2007-2011 Broadcom Corporation. All rights reserved.
|
||||
*
|
||||
* Gary Zambrano <zambrano@broadcom.com>
|
||||
* David Christensen <davidch@broadcom.com>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of Broadcom Corporation nor the name of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written consent.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS'
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*$FreeBSD$*/
|
||||
|
||||
uint32_t regs_count_e1=319;
|
||||
|
||||
struct reg_addr reg_addrs_e1[319] = {
|
||||
{0x00002000,341}, {0x00002800,103}, {0x00003000,287}, {0x00003800,331},
|
||||
{0x00008800,6}, {0x0000a000,223}, {0x0000a388,1}, {0x0000a398,1},
|
||||
{0x0000a400,69}, {0x0000a518,1}, {0x0000a520,1}, {0x0000a528,1},
|
||||
{0x0000a530,1}, {0x0000a538,1}, {0x0000a540,1}, {0x0000a548,1},
|
||||
{0x0000a550,1}, {0x0000a558,1}, {0x0000a560,1}, {0x0000a568,1},
|
||||
{0x0000a570,1}, {0x0000a580,1}, {0x0000a590,1}, {0x0000a5a0,1},
|
||||
{0x0000a5c0,1}, {0x0000c000,35}, {0x0000c098,1}, {0x0000c0a8,1},
|
||||
{0x0000c100,11}, {0x0000c130,2}, {0x0000c140,2}, {0x0000c160,4},
|
||||
{0x0000c180,4}, {0x0000c1a0,4}, {0x0000c800,4}, {0x00010000,236},
|
||||
{0x000103bc,1}, {0x000103cc,1}, {0x000103dc,1}, {0x00010400,57},
|
||||
{0x000104e8,2}, {0x000104f4,2}, {0x00010500,146}, {0x00010750,2},
|
||||
{0x00010760,2}, {0x00010770,2}, {0x00010780,2}, {0x00010790,2},
|
||||
{0x000107a0,2}, {0x000107b0,2}, {0x000107c0,2}, {0x000107d0,2},
|
||||
{0x000107e0,2}, {0x00010880,2}, {0x00010900,2}, {0x00010c00,2},
|
||||
{0x00011000,2}, {0x00012000,1}, {0x00014000,1}, {0x00020000,170},
|
||||
{0x000202b4,1}, {0x000202c4,1}, {0x00020400,2}, {0x0002040c,8},
|
||||
{0x00020480,1}, {0x00020500,1}, {0x00020600,1}, {0x00028000,24674},
|
||||
{0x00040194,1}, {0x000401a4,1}, {0x00040200,4}, {0x00040400,43},
|
||||
{0x000404b8,1}, {0x000404c8,1}, {0x00040500,2}, {0x00040510,2},
|
||||
{0x00040520,2}, {0x00040530,2}, {0x00040540,2}, {0x00042000,164},
|
||||
{0x0004229c,1}, {0x000422ac,1}, {0x000422bc,1}, {0x00042400,49},
|
||||
{0x000424c8,38}, {0x00042568,2}, {0x00042800,1}, {0x00050000,116},
|
||||
{0x000501dc,1}, {0x000501ec,1}, {0x00050200,2}, {0x0005020c,7},
|
||||
{0x00050240,1}, {0x00050280,1}, {0x00052000,1}, {0x00054000,3328},
|
||||
{0x00058000,8263}, {0x00060128,1}, {0x00060138,1}, {0x00060200,1},
|
||||
{0x00061000,512}, {0x00070000,32768}, {0x000a0000,16384},
|
||||
{0x000c1000,7}, {0x000c1028,1}, {0x000c1038,1}, {0x000c1800,2},
|
||||
{0x000c2000,164}, {0x000c229c,1}, {0x000c22ac,1}, {0x000c22bc,1},
|
||||
{0x000c2400,49}, {0x000c24c8,38}, {0x000c2568,2}, {0x000c2600,1},
|
||||
{0x000c4000,165}, {0x000c42a0,1}, {0x000c42b0,1}, {0x000c42c0,1},
|
||||
{0x000c4400,51}, {0x000c44d0,38}, {0x000c4570,2}, {0x000c4600,1},
|
||||
{0x000d0000,118}, {0x000d01e4,1}, {0x000d01f4,1}, {0x000d0200,2},
|
||||
{0x000d020c,7}, {0x000d0280,1}, {0x000d0300,1}, {0x000d0400,1},
|
||||
{0x000d4000,2560}, {0x000d8000,8306}, {0x000e01d4,1}, {0x000e01e4,1},
|
||||
{0x000e0200,2}, {0x000e020c,8}, {0x000e0280,1}, {0x000e0300,1},
|
||||
{0x000e1000,1}, {0x000e2000,2048}, {0x000f0000,16384}, {0x00101000,12},
|
||||
{0x0010103c,1}, {0x0010104c,1}, {0x00101100,1}, {0x00101800,8},
|
||||
{0x00102000,18}, {0x00102054,1}, {0x00102064,1}, {0x00102080,17},
|
||||
{0x00102400,1}, {0x00103000,26}, {0x00103074,1}, {0x00103084,1},
|
||||
{0x00103094,1}, {0x00103800,8}, {0x00104000,63}, {0x00104108,1},
|
||||
{0x00104118,1}, {0x00104200,17}, {0x00104400,512}, {0x00105000,1024},
|
||||
{0x00108000,33}, {0x00108090,1}, {0x001080a0,1}, {0x00108100,5},
|
||||
{0x00108120,5}, {0x00108200,74}, {0x00108400,74}, {0x00108800,152},
|
||||
{0x00109000,1}, {0x00120000,347}, {0x00120578,1}, {0x00120588,1},
|
||||
{0x00120598,1}, {0x0012080c,65}, {0x00120a00,2}, {0x00122000,2},
|
||||
{0x00140000,114}, {0x001401d4,1}, {0x001401e4,1}, {0x00140200,6},
|
||||
{0x00144000,4}, {0x00148000,4}, {0x0014c000,4}, {0x00150000,4},
|
||||
{0x00154000,4}, {0x00158000,4}, {0x00161000,7}, {0x00161028,1},
|
||||
{0x00161038,1}, {0x00161800,2}, {0x00164000,60}, {0x001640fc,1},
|
||||
{0x0016410c,1}, {0x00164200,1}, {0x00164208,1}, {0x00164210,1},
|
||||
{0x00164218,1}, {0x00164220,1}, {0x00164228,1}, {0x00164230,1},
|
||||
{0x00164238,1}, {0x00164240,1}, {0x00164248,1}, {0x00164250,1},
|
||||
{0x00164258,1}, {0x00164260,1}, {0x00164270,2}, {0x00164280,2},
|
||||
{0x00164800,2}, {0x00165000,2}, {0x00166000,164}, {0x0016629c,1},
|
||||
{0x001662ac,1}, {0x001662bc,1}, {0x00166400,49}, {0x001664c8,38},
|
||||
{0x00166568,2}, {0x00166800,1}, {0x00168000,270}, {0x00168444,1},
|
||||
{0x00168454,1}, {0x00168800,19}, {0x00168900,1}, {0x00168a00,128},
|
||||
{0x0016a000,1536}, {0x0016c000,1536}, {0x00170000,93}, {0x00170180,1},
|
||||
{0x00170190,1}, {0x00170200,4}, {0x00170214,1}, {0x00178000,1},
|
||||
{0x00180000,61}, {0x00180100,1}, {0x00180110,1}, {0x00180120,1},
|
||||
{0x00180130,1}, {0x00180200,58}, {0x00180340,4}, {0x00180400,1},
|
||||
{0x00181000,1024}, {0x001a0000,5632}, {0x001a8000,64},
|
||||
{0x001b1800,128}, {0x001b1c00,128}, {0x001b2000,1}, {0x001b8200,1},
|
||||
{0x001b8240,1}, {0x001b8280,1}, {0x001b82c0,1}, {0x001b8a00,1},
|
||||
{0x001b8a80,1}, {0x001c0000,2}, {0x00200000,65}, {0x00200110,1},
|
||||
{0x00200120,1}, {0x00200130,1}, {0x00200140,1}, {0x00200200,58},
|
||||
{0x00200340,4}, {0x00200400,1}, {0x00202000,2048}, {0x00220000,5632},
|
||||
{0x00228000,64}, {0x00231800,128}, {0x00231c00,128}, {0x00232000,1},
|
||||
{0x00238200,1}, {0x00238240,1}, {0x00238280,1}, {0x002382c0,1},
|
||||
{0x00238a00,1}, {0x00238a80,1}, {0x00240000,2}, {0x00280000,65},
|
||||
{0x00280110,1}, {0x00280120,1}, {0x00280130,1}, {0x00280140,1},
|
||||
{0x00280200,58}, {0x00280340,4}, {0x00280400,1}, {0x00282000,2048},
|
||||
{0x002a0000,5632}, {0x002a8000,64}, {0x002b1800,128}, {0x002b1c00,128},
|
||||
{0x002b2000,1}, {0x002b8200,1}, {0x002b8240,1}, {0x002b8280,1},
|
||||
{0x002b82c0,1}, {0x002b8a00,1}, {0x002b8a80,1}, {0x002c0000,2},
|
||||
{0x00300000,65}, {0x00300110,1}, {0x00300120,1}, {0x00300130,1},
|
||||
{0x00300140,1}, {0x00300200,58}, {0x00300340,4}, {0x00300400,1},
|
||||
{0x00302000,2048}, {0x00320000,5632}, {0x00328000,64},
|
||||
{0x00331800,128}, {0x00331c00,128}, {0x00332000,1}, {0x00338200,1},
|
||||
{0x00338240,1}, {0x00338280,1}, {0x003382c0,1}, {0x00338a00,1},
|
||||
{0x00338a80,1}, {0x00340000,2}};
|
||||
|
||||
|
||||
|
||||
uint32_t wregs_count_e1=1;
|
||||
|
||||
static uint32_t const_reg0_e1[1] = {0x001b1000};
|
||||
|
||||
|
||||
struct wreg_addr wreg_addrs_e1[1] = {{0x001b0c00, 192, 1, const_reg0_e1}};
|
||||
|
||||
|
||||
struct hd_param hd_param_e1={0x497e2e43, 0x00040802, 0x0000001f};
|
||||
|
140
sys/dev/bxe/dump_e1h.h
Normal file
140
sys/dev/bxe/dump_e1h.h
Normal file
@ -0,0 +1,140 @@
|
||||
/*-
|
||||
* Copyright (c) 2007-2011 Broadcom Corporation. All rights reserved.
|
||||
*
|
||||
* Gary Zambrano <zambrano@broadcom.com>
|
||||
* David Christensen <davidch@broadcom.com>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of Broadcom Corporation nor the name of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written consent.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS'
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*$FreeBSD$*/
|
||||
|
||||
uint32_t regs_count_e1h=354;
|
||||
|
||||
struct reg_addr reg_addrs_e1h[354] = {
|
||||
{0x00002000,341}, {0x00002800,103}, {0x00003000,287}, {0x00003800,331},
|
||||
{0x0000a000,223}, {0x0000a388,1}, {0x0000a398,8}, {0x0000a3c0,3},
|
||||
{0x0000a3d0,1}, {0x0000a3d8,1}, {0x0000a3e0,1}, {0x0000a3e8,1},
|
||||
{0x0000a3f0,1}, {0x0000a3f8,1}, {0x0000a400,69}, {0x0000a518,1},
|
||||
{0x0000a520,1}, {0x0000a528,1}, {0x0000a530,1}, {0x0000a538,1},
|
||||
{0x0000a540,1}, {0x0000a548,1}, {0x0000a550,1}, {0x0000a558,1},
|
||||
{0x0000a560,1}, {0x0000a568,1}, {0x0000a570,1}, {0x0000a580,1},
|
||||
{0x0000a590,1}, {0x0000a5a0,1}, {0x0000a5c0,1}, {0x0000a5e0,1},
|
||||
{0x0000a5e8,1}, {0x0000a5f0,1}, {0x0000a5f8,10}, {0x0000c000,35},
|
||||
{0x0000c098,1}, {0x0000c0a8,1}, {0x0000c100,11}, {0x0000c130,2},
|
||||
{0x0000c140,2}, {0x0000c160,4}, {0x0000c180,4}, {0x0000c1a0,4},
|
||||
{0x0000c800,4}, {0x0000d000,347}, {0x00010000,236}, {0x000103bc,1},
|
||||
{0x000103cc,1}, {0x000103dc,1}, {0x00010400,57}, {0x000104e8,2},
|
||||
{0x000104f4,2}, {0x00010500,146}, {0x00010750,2}, {0x00010760,2},
|
||||
{0x00010770,2}, {0x00010780,2}, {0x00010790,2}, {0x000107a0,2},
|
||||
{0x000107b0,2}, {0x000107c0,2}, {0x000107d0,2}, {0x000107e0,2},
|
||||
{0x00010880,2}, {0x00010900,2}, {0x00010c00,2}, {0x00011000,2},
|
||||
{0x00012000,1}, {0x00014000,1}, {0x00016000,26}, {0x00016070,18},
|
||||
{0x000160c0,27}, {0x00016140,1}, {0x00016160,1}, {0x00016180,2},
|
||||
{0x000161c0,2}, {0x00016204,5}, {0x00018000,1}, {0x00018008,1},
|
||||
{0x00020000,170}, {0x000202b4,1}, {0x000202c4,1}, {0x00020400,2},
|
||||
{0x0002040c,26}, {0x00020480,1}, {0x00020500,1}, {0x00020600,1},
|
||||
{0x00028000,24674}, {0x00040194,1}, {0x000401a4,12}, {0x00040200,4},
|
||||
{0x00040400,43}, {0x000404b8,1}, {0x000404c8,4}, {0x00040500,2},
|
||||
{0x00040510,2}, {0x00040520,2}, {0x00040530,2}, {0x00040540,2},
|
||||
{0x00042000,164}, {0x0004229c,1}, {0x000422ac,1}, {0x000422bc,1},
|
||||
{0x000422d4,5}, {0x00042400,49}, {0x000424c8,38}, {0x00042568,2},
|
||||
{0x00042800,1}, {0x00050000,116}, {0x000501dc,1}, {0x000501ec,7},
|
||||
{0x0005020c,14}, {0x00050280,1}, {0x00052000,1}, {0x00054000,3328},
|
||||
{0x00058000,8263}, {0x00060128,1}, {0x00060138,25}, {0x00060200,1},
|
||||
{0x00061000,512}, {0x00070000,32768}, {0x000a0000,32768},
|
||||
{0x000c1000,7}, {0x000c1028,1}, {0x000c1038,1}, {0x000c1800,2},
|
||||
{0x000c2000,164}, {0x000c229c,1}, {0x000c22ac,1}, {0x000c22bc,1},
|
||||
{0x000c2400,49}, {0x000c24c8,38}, {0x000c2568,2}, {0x000c2600,1},
|
||||
{0x000c4000,165}, {0x000c42a0,1}, {0x000c42b0,1}, {0x000c42c0,1},
|
||||
{0x000c42e0,7}, {0x000c4400,51}, {0x000c44d0,38}, {0x000c4570,2},
|
||||
{0x000c4600,1}, {0x000d0000,118}, {0x000d01e4,1}, {0x000d01f4,1},
|
||||
{0x000d0200,2}, {0x000d020c,25}, {0x000d0280,1}, {0x000d0300,1},
|
||||
{0x000d0400,1}, {0x000d4000,2560}, {0x000d8000,8306}, {0x000e01d4,1},
|
||||
{0x000e01e4,1}, {0x000e0200,2}, {0x000e020c,26}, {0x000e0280,1},
|
||||
{0x000e0300,1}, {0x000e1000,1}, {0x000e2000,2048}, {0x000f0000,16384},
|
||||
{0x00101000,12}, {0x0010103c,1}, {0x0010104c,2}, {0x00101100,1},
|
||||
{0x00101800,8}, {0x00102000,18}, {0x00102054,1}, {0x00102064,1},
|
||||
{0x00102080,17}, {0x001020c8,8}, {0x00102400,1}, {0x00103000,26},
|
||||
{0x00103074,1}, {0x00103084,1}, {0x00103094,6}, {0x00103800,8},
|
||||
{0x00104000,63}, {0x00104108,1}, {0x00104118,1}, {0x00104200,17},
|
||||
{0x00104400,512}, {0x00105000,1024}, {0x00108000,33}, {0x00108090,1},
|
||||
{0x001080a0,1}, {0x001080ac,5}, {0x00108100,5}, {0x00108120,5},
|
||||
{0x00108200,74}, {0x00108400,74}, {0x00108800,152}, {0x00109000,1},
|
||||
{0x00120000,347}, {0x00120578,1}, {0x00120588,1}, {0x00120598,24},
|
||||
{0x00120614,1}, {0x0012061c,30}, {0x0012080c,65}, {0x00120a00,2},
|
||||
{0x00122000,2}, {0x00128000,2}, {0x00140000,114}, {0x001401d4,1},
|
||||
{0x001401e4,1}, {0x00140200,6}, {0x00144000,4}, {0x00148000,4},
|
||||
{0x0014c000,4}, {0x00150000,4}, {0x00154000,4}, {0x00158000,4},
|
||||
{0x0015c000,7}, {0x00161000,7}, {0x00161028,1}, {0x00161038,1},
|
||||
{0x00161800,2}, {0x00164000,60}, {0x001640fc,1}, {0x0016410c,3},
|
||||
{0x00164200,1}, {0x00164208,1}, {0x00164210,1}, {0x00164218,1},
|
||||
{0x00164220,1}, {0x00164228,1}, {0x00164230,1}, {0x00164238,1},
|
||||
{0x00164240,1}, {0x00164248,1}, {0x00164250,1}, {0x00164258,1},
|
||||
{0x00164260,1}, {0x00164270,2}, {0x00164280,2}, {0x00164800,2},
|
||||
{0x00165000,2}, {0x00166000,164}, {0x0016629c,1}, {0x001662ac,1},
|
||||
{0x001662bc,1}, {0x00166400,49}, {0x001664c8,38}, {0x00166568,2},
|
||||
{0x00166800,1}, {0x00168000,270}, {0x00168444,1}, {0x00168454,1},
|
||||
{0x00168800,19}, {0x00168900,1}, {0x00168a00,128}, {0x0016a000,1536},
|
||||
{0x0016c000,1536}, {0x0016e000,16}, {0x0016e100,1}, {0x0016e200,2},
|
||||
{0x0016e400,183}, {0x00170000,93}, {0x00170180,1}, {0x00170190,1},
|
||||
{0x00170200,4}, {0x00170214,1}, {0x00178000,1}, {0x00180000,61},
|
||||
{0x00180100,1}, {0x00180110,1}, {0x00180120,1}, {0x00180130,1},
|
||||
{0x0018013c,2}, {0x00180200,58}, {0x00180340,4}, {0x00180400,1},
|
||||
{0x00181000,1024}, {0x001a0000,16896}, {0x001b1800,128},
|
||||
{0x001b1c00,128}, {0x001b2000,1}, {0x001b2400,64}, {0x001b8200,1},
|
||||
{0x001b8240,1}, {0x001b8280,1}, {0x001b82c0,1}, {0x001b8a00,1},
|
||||
{0x001b8a80,1}, {0x001c0000,2}, {0x00200000,65}, {0x00200110,1},
|
||||
{0x00200120,1}, {0x00200130,1}, {0x00200140,1}, {0x0020014c,2},
|
||||
{0x00200200,58}, {0x00200340,4}, {0x00200400,1}, {0x00202000,2048},
|
||||
{0x00220000,16896}, {0x00231800,128}, {0x00231c00,128}, {0x00232000,1},
|
||||
{0x00232400,64}, {0x00238200,1}, {0x00238240,1}, {0x00238280,1},
|
||||
{0x002382c0,1}, {0x00238a00,1}, {0x00238a80,1}, {0x00240000,2},
|
||||
{0x00280000,65}, {0x00280110,1}, {0x00280120,1}, {0x00280130,1},
|
||||
{0x00280140,1}, {0x0028014c,2}, {0x00280200,58}, {0x00280340,4},
|
||||
{0x00280400,1}, {0x00282000,2048}, {0x002a0000,16896},
|
||||
{0x002b1800,128}, {0x002b1c00,128}, {0x002b2000,1}, {0x002b2400,64},
|
||||
{0x002b8200,1}, {0x002b8240,1}, {0x002b8280,1}, {0x002b82c0,1},
|
||||
{0x002b8a00,1}, {0x002b8a80,1}, {0x002c0000,2}, {0x00300000,65},
|
||||
{0x00300110,1}, {0x00300120,1}, {0x00300130,1}, {0x00300140,1},
|
||||
{0x0030014c,2}, {0x00300200,58}, {0x00300340,4}, {0x00300400,1},
|
||||
{0x00302000,2048}, {0x00320000,16896}, {0x00331800,128},
|
||||
{0x00331c00,128}, {0x00332000,1}, {0x00332400,64}, {0x00338200,1},
|
||||
{0x00338240,1}, {0x00338280,1}, {0x003382c0,1}, {0x00338a00,1},
|
||||
{0x00338a80,1}, {0x00340000,2}};
|
||||
|
||||
|
||||
|
||||
uint32_t wregs_count_e1h=1;
|
||||
|
||||
static uint32_t const_reg0_e1h[2] = {0x001b1040, 0x001b1000};
|
||||
|
||||
|
||||
struct wreg_addr wreg_addrs_e1h[1] = {{0x001b0c00, 256, 2, const_reg0_e1h}};
|
||||
|
||||
|
||||
struct hd_param hd_param_e1h={0x497e2efb, 0x00040802, 0x0000001f};
|
||||
|
80
sys/dev/bxe/hw_dump_reg_st.h
Normal file
80
sys/dev/bxe/hw_dump_reg_st.h
Normal file
@ -0,0 +1,80 @@
|
||||
/*-
|
||||
* Copyright (c) 2007-2011 Broadcom Corporation. All rights reserved.
|
||||
*
|
||||
* Gary Zambrano <zambrano@broadcom.com>
|
||||
* David Christensen <davidch@broadcom.com>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of Broadcom Corporation nor the name of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written consent.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS'
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*$FreeBSD$*/
|
||||
|
||||
#ifndef _HW_DUMP_REG_ST_H
|
||||
#define _HW_DUMP_REG_ST_H
|
||||
|
||||
#define BXE_GRCDUMP_BUF_SIZE 0xE0000
|
||||
|
||||
#define XSTORM_WAITP_ADDRESS 0x2b8a80
|
||||
#define TSTORM_WAITP_ADDRESS 0x2b8a80
|
||||
#define USTORM_WAITP_ADDRESS 0x2b8a80
|
||||
#define CSTORM_WAITP_ADDRESS 0x2b8a80
|
||||
#define TSTORM_CAM_MODE 0x1B1440
|
||||
|
||||
/* Register address structure. */
|
||||
typedef struct reg_addr {
|
||||
uint32_t addr;
|
||||
uint32_t size;
|
||||
}*preg_addr;
|
||||
|
||||
/* Wide register address structure. */
|
||||
typedef struct wreg_addr {
|
||||
uint32_t addr;
|
||||
uint32_t size;
|
||||
uint32_t const_regs_count;
|
||||
uint32_t * const_regs;
|
||||
}*pwreg_addr;
|
||||
|
||||
/* Dump header parameters. */
|
||||
struct hd_param {
|
||||
uint32_t time_stamp;
|
||||
uint32_t diag_ver;
|
||||
uint32_t grc_dump_ver;
|
||||
};
|
||||
|
||||
/* Global parameters. */
|
||||
extern struct wreg_addr wreg_addrs_e1[];
|
||||
extern struct reg_addr reg_addrs_e1[];
|
||||
extern uint32_t regs_count_e1;
|
||||
extern uint32_t wregs_count_e1;
|
||||
extern struct hd_param hd_param_e1;
|
||||
|
||||
extern struct wreg_addr wreg_addrs_e1h[];
|
||||
extern struct reg_addr reg_addrs_e1h[];
|
||||
extern uint32_t regs_count_e1h;
|
||||
extern uint32_t wregs_count_e1h;
|
||||
extern struct hd_param hd_param_e1h;
|
||||
|
||||
#endif //_HW_DUMP_REG_ST_H
|
17305
sys/dev/bxe/if_bxe.c
Normal file
17305
sys/dev/bxe/if_bxe.c
Normal file
File diff suppressed because it is too large
Load Diff
1853
sys/dev/bxe/if_bxe.h
Normal file
1853
sys/dev/bxe/if_bxe.h
Normal file
File diff suppressed because it is too large
Load Diff
@ -203,6 +203,7 @@ device ppi # Parallel port interface device
|
||||
#device puc
|
||||
|
||||
# PCI Ethernet NICs.
|
||||
device bxe # Broadcom BCM57710/BCM57711/BCM57711E 10Gb Ethernet
|
||||
device de # DEC/Intel DC21x4x (``Tulip'')
|
||||
device em # Intel PRO/1000 Gigabit Ethernet Family
|
||||
device igb # Intel PRO/1000 PCIE Server Gigabit Family
|
||||
|
@ -1141,7 +1141,7 @@ cpu_est_clockrate(int cpu_id, uint64_t *rate)
|
||||
|
||||
if (pcpu_find(cpu_id) == NULL || rate == NULL)
|
||||
return (EINVAL);
|
||||
if (!tsc_present)
|
||||
if ((cpu_feature & CPUID_TSC) == 0)
|
||||
return (EOPNOTSUPP);
|
||||
|
||||
/* If TSC is P-state invariant, DELAY(9) based logic fails. */
|
||||
|
@ -56,7 +56,6 @@
|
||||
#ifdef _KERNEL
|
||||
extern char btext[];
|
||||
extern char etext[];
|
||||
extern int tsc_present;
|
||||
|
||||
void cpu_halt(void);
|
||||
void cpu_reset(void);
|
||||
@ -67,18 +66,17 @@ void swi_vm(void *);
|
||||
* Return contents of in-cpu fast counter as a sort of "bogo-time"
|
||||
* for random-harvesting purposes.
|
||||
*/
|
||||
static __inline u_int64_t
|
||||
static __inline uint64_t
|
||||
get_cyclecount(void)
|
||||
{
|
||||
#if defined(I486_CPU) || defined(KLD_MODULE)
|
||||
struct bintime bt;
|
||||
|
||||
if (!tsc_present) {
|
||||
binuptime(&bt);
|
||||
return (bt.frac ^ bt.sec);
|
||||
}
|
||||
#endif
|
||||
return ((uint64_t)bt.sec << 56 | bt.frac >> 8);
|
||||
#else
|
||||
return (rdtsc());
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -5,11 +5,13 @@
|
||||
all:
|
||||
@echo "make sysent only"
|
||||
|
||||
sysent: linux_sysent.c linux_syscall.h linux_proto.h
|
||||
sysent: linux_sysent.c linux_syscall.h linux_proto.h linux_syscalls.c linux_systrace_args.c
|
||||
|
||||
linux_sysent.c linux_syscall.h linux_proto.h: ../../kern/makesyscalls.sh \
|
||||
syscalls.master syscalls.conf
|
||||
linux_sysent.c linux_syscall.h linux_proto.h linux_syscalls.c linux_systrace_args.c: \
|
||||
../../kern/makesyscalls.sh syscalls.master syscalls.conf
|
||||
-mv -f linux_sysent.c linux_sysent.c.bak
|
||||
-mv -f linux_syscall.h linux_syscall.h.bak
|
||||
-mv -f linux_proto.h linux_proto.h.bak
|
||||
-mv -f linux_syscalls.c linux_syscalls.c.bak
|
||||
-mv -f linux_systrace_args.c linux_systrace_args.c.bak
|
||||
sh ../../kern/makesyscalls.sh syscalls.master syscalls.conf
|
||||
|
@ -47,6 +47,9 @@ extern u_char linux_debug_map[];
|
||||
MALLOC_DECLARE(M_LINUX);
|
||||
#endif
|
||||
|
||||
#define LINUX_SHAREDPAGE (VM_MAXUSER_ADDRESS - PAGE_SIZE)
|
||||
#define LINUX_USRSTACK LINUX_SHAREDPAGE
|
||||
|
||||
#define PTRIN(v) (void *)(v)
|
||||
#define PTROUT(v) (l_uintptr_t)(v)
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
*
|
||||
* DO NOT EDIT-- this file is automatically generated.
|
||||
* $FreeBSD$
|
||||
* created from FreeBSD: head/sys/i386/linux/syscalls.master 218610 2011-02-12 15:33:25Z dchagin
|
||||
* created from FreeBSD: head/sys/i386/linux/syscalls.master 219559 2011-03-12 08:51:43Z avg
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_SYSPROTO_H_
|
||||
@ -172,7 +172,7 @@ struct linux_getgid16_args {
|
||||
};
|
||||
struct linux_signal_args {
|
||||
char sig_l_[PADL_(l_int)]; l_int sig; char sig_r_[PADR_(l_int)];
|
||||
char handler_l_[PADL_(l_handler_t)]; l_handler_t handler; char handler_r_[PADR_(l_handler_t)];
|
||||
char handler_l_[PADL_(void *)]; void * handler; char handler_r_[PADR_(void *)];
|
||||
};
|
||||
struct linux_geteuid16_args {
|
||||
register_t dummy;
|
||||
|
@ -3,7 +3,7 @@
|
||||
*
|
||||
* DO NOT EDIT-- this file is automatically generated.
|
||||
* $FreeBSD$
|
||||
* created from FreeBSD: head/sys/i386/linux/syscalls.master 218610 2011-02-12 15:33:25Z dchagin
|
||||
* created from FreeBSD: head/sys/i386/linux/syscalls.master 219559 2011-03-12 08:51:43Z avg
|
||||
*/
|
||||
|
||||
#define LINUX_SYS_exit 1
|
||||
|
328
sys/i386/linux/linux_syscalls.c
Normal file
328
sys/i386/linux/linux_syscalls.c
Normal file
@ -0,0 +1,328 @@
|
||||
/*
|
||||
* System call names.
|
||||
*
|
||||
* DO NOT EDIT-- this file is automatically generated.
|
||||
* $FreeBSD$
|
||||
* created from FreeBSD: head/sys/i386/linux/syscalls.master 219559 2011-03-12 08:51:43Z avg
|
||||
*/
|
||||
|
||||
const char *linux_syscallnames[] = {
|
||||
#define nosys linux_nosys
|
||||
"#0", /* 0 = setup */
|
||||
"exit", /* 1 = exit */
|
||||
"linux_fork", /* 2 = linux_fork */
|
||||
"read", /* 3 = read */
|
||||
"write", /* 4 = write */
|
||||
"linux_open", /* 5 = linux_open */
|
||||
"close", /* 6 = close */
|
||||
"linux_waitpid", /* 7 = linux_waitpid */
|
||||
"linux_creat", /* 8 = linux_creat */
|
||||
"linux_link", /* 9 = linux_link */
|
||||
"linux_unlink", /* 10 = linux_unlink */
|
||||
"linux_execve", /* 11 = linux_execve */
|
||||
"linux_chdir", /* 12 = linux_chdir */
|
||||
"linux_time", /* 13 = linux_time */
|
||||
"linux_mknod", /* 14 = linux_mknod */
|
||||
"linux_chmod", /* 15 = linux_chmod */
|
||||
"linux_lchown16", /* 16 = linux_lchown16 */
|
||||
"#17", /* 17 = break */
|
||||
"linux_stat", /* 18 = linux_stat */
|
||||
"linux_lseek", /* 19 = linux_lseek */
|
||||
"linux_getpid", /* 20 = linux_getpid */
|
||||
"linux_mount", /* 21 = linux_mount */
|
||||
"linux_oldumount", /* 22 = linux_oldumount */
|
||||
"linux_setuid16", /* 23 = linux_setuid16 */
|
||||
"linux_getuid16", /* 24 = linux_getuid16 */
|
||||
"linux_stime", /* 25 = linux_stime */
|
||||
"linux_ptrace", /* 26 = linux_ptrace */
|
||||
"linux_alarm", /* 27 = linux_alarm */
|
||||
"linux_fstat", /* 28 = linux_fstat */
|
||||
"linux_pause", /* 29 = linux_pause */
|
||||
"linux_utime", /* 30 = linux_utime */
|
||||
"#31", /* 31 = stty */
|
||||
"#32", /* 32 = gtty */
|
||||
"linux_access", /* 33 = linux_access */
|
||||
"linux_nice", /* 34 = linux_nice */
|
||||
"#35", /* 35 = ftime */
|
||||
"sync", /* 36 = sync */
|
||||
"linux_kill", /* 37 = linux_kill */
|
||||
"linux_rename", /* 38 = linux_rename */
|
||||
"linux_mkdir", /* 39 = linux_mkdir */
|
||||
"linux_rmdir", /* 40 = linux_rmdir */
|
||||
"dup", /* 41 = dup */
|
||||
"linux_pipe", /* 42 = linux_pipe */
|
||||
"linux_times", /* 43 = linux_times */
|
||||
"#44", /* 44 = prof */
|
||||
"linux_brk", /* 45 = linux_brk */
|
||||
"linux_setgid16", /* 46 = linux_setgid16 */
|
||||
"linux_getgid16", /* 47 = linux_getgid16 */
|
||||
"linux_signal", /* 48 = linux_signal */
|
||||
"linux_geteuid16", /* 49 = linux_geteuid16 */
|
||||
"linux_getegid16", /* 50 = linux_getegid16 */
|
||||
"acct", /* 51 = acct */
|
||||
"linux_umount", /* 52 = linux_umount */
|
||||
"#53", /* 53 = lock */
|
||||
"linux_ioctl", /* 54 = linux_ioctl */
|
||||
"linux_fcntl", /* 55 = linux_fcntl */
|
||||
"#56", /* 56 = mpx */
|
||||
"setpgid", /* 57 = setpgid */
|
||||
"#58", /* 58 = ulimit */
|
||||
"linux_olduname", /* 59 = linux_olduname */
|
||||
"umask", /* 60 = umask */
|
||||
"chroot", /* 61 = chroot */
|
||||
"linux_ustat", /* 62 = linux_ustat */
|
||||
"dup2", /* 63 = dup2 */
|
||||
"linux_getppid", /* 64 = linux_getppid */
|
||||
"getpgrp", /* 65 = getpgrp */
|
||||
"setsid", /* 66 = setsid */
|
||||
"linux_sigaction", /* 67 = linux_sigaction */
|
||||
"linux_sgetmask", /* 68 = linux_sgetmask */
|
||||
"linux_ssetmask", /* 69 = linux_ssetmask */
|
||||
"linux_setreuid16", /* 70 = linux_setreuid16 */
|
||||
"linux_setregid16", /* 71 = linux_setregid16 */
|
||||
"linux_sigsuspend", /* 72 = linux_sigsuspend */
|
||||
"linux_sigpending", /* 73 = linux_sigpending */
|
||||
"linux_sethostname", /* 74 = linux_sethostname */
|
||||
"linux_setrlimit", /* 75 = linux_setrlimit */
|
||||
"linux_old_getrlimit", /* 76 = linux_old_getrlimit */
|
||||
"getrusage", /* 77 = getrusage */
|
||||
"gettimeofday", /* 78 = gettimeofday */
|
||||
"settimeofday", /* 79 = settimeofday */
|
||||
"linux_getgroups16", /* 80 = linux_getgroups16 */
|
||||
"linux_setgroups16", /* 81 = linux_setgroups16 */
|
||||
"linux_old_select", /* 82 = linux_old_select */
|
||||
"linux_symlink", /* 83 = linux_symlink */
|
||||
"linux_lstat", /* 84 = linux_lstat */
|
||||
"linux_readlink", /* 85 = linux_readlink */
|
||||
"linux_uselib", /* 86 = linux_uselib */
|
||||
"swapon", /* 87 = swapon */
|
||||
"linux_reboot", /* 88 = linux_reboot */
|
||||
"linux_readdir", /* 89 = linux_readdir */
|
||||
"linux_mmap", /* 90 = linux_mmap */
|
||||
"munmap", /* 91 = munmap */
|
||||
"linux_truncate", /* 92 = linux_truncate */
|
||||
"linux_ftruncate", /* 93 = linux_ftruncate */
|
||||
"fchmod", /* 94 = fchmod */
|
||||
"fchown", /* 95 = fchown */
|
||||
"linux_getpriority", /* 96 = linux_getpriority */
|
||||
"setpriority", /* 97 = setpriority */
|
||||
"#98", /* 98 = profil */
|
||||
"linux_statfs", /* 99 = linux_statfs */
|
||||
"linux_fstatfs", /* 100 = linux_fstatfs */
|
||||
"linux_ioperm", /* 101 = linux_ioperm */
|
||||
"linux_socketcall", /* 102 = linux_socketcall */
|
||||
"linux_syslog", /* 103 = linux_syslog */
|
||||
"linux_setitimer", /* 104 = linux_setitimer */
|
||||
"linux_getitimer", /* 105 = linux_getitimer */
|
||||
"linux_newstat", /* 106 = linux_newstat */
|
||||
"linux_newlstat", /* 107 = linux_newlstat */
|
||||
"linux_newfstat", /* 108 = linux_newfstat */
|
||||
"linux_uname", /* 109 = linux_uname */
|
||||
"linux_iopl", /* 110 = linux_iopl */
|
||||
"linux_vhangup", /* 111 = linux_vhangup */
|
||||
"#112", /* 112 = idle */
|
||||
"linux_vm86old", /* 113 = linux_vm86old */
|
||||
"linux_wait4", /* 114 = linux_wait4 */
|
||||
"linux_swapoff", /* 115 = linux_swapoff */
|
||||
"linux_sysinfo", /* 116 = linux_sysinfo */
|
||||
"linux_ipc", /* 117 = linux_ipc */
|
||||
"fsync", /* 118 = fsync */
|
||||
"linux_sigreturn", /* 119 = linux_sigreturn */
|
||||
"linux_clone", /* 120 = linux_clone */
|
||||
"linux_setdomainname", /* 121 = linux_setdomainname */
|
||||
"linux_newuname", /* 122 = linux_newuname */
|
||||
"linux_modify_ldt", /* 123 = linux_modify_ldt */
|
||||
"linux_adjtimex", /* 124 = linux_adjtimex */
|
||||
"linux_mprotect", /* 125 = linux_mprotect */
|
||||
"linux_sigprocmask", /* 126 = linux_sigprocmask */
|
||||
"linux_create_module", /* 127 = linux_create_module */
|
||||
"linux_init_module", /* 128 = linux_init_module */
|
||||
"linux_delete_module", /* 129 = linux_delete_module */
|
||||
"linux_get_kernel_syms", /* 130 = linux_get_kernel_syms */
|
||||
"linux_quotactl", /* 131 = linux_quotactl */
|
||||
"getpgid", /* 132 = getpgid */
|
||||
"fchdir", /* 133 = fchdir */
|
||||
"linux_bdflush", /* 134 = linux_bdflush */
|
||||
"linux_sysfs", /* 135 = linux_sysfs */
|
||||
"linux_personality", /* 136 = linux_personality */
|
||||
"#137", /* 137 = afs_syscall */
|
||||
"linux_setfsuid16", /* 138 = linux_setfsuid16 */
|
||||
"linux_setfsgid16", /* 139 = linux_setfsgid16 */
|
||||
"linux_llseek", /* 140 = linux_llseek */
|
||||
"linux_getdents", /* 141 = linux_getdents */
|
||||
"linux_select", /* 142 = linux_select */
|
||||
"flock", /* 143 = flock */
|
||||
"linux_msync", /* 144 = linux_msync */
|
||||
"readv", /* 145 = readv */
|
||||
"writev", /* 146 = writev */
|
||||
"linux_getsid", /* 147 = linux_getsid */
|
||||
"linux_fdatasync", /* 148 = linux_fdatasync */
|
||||
"linux_sysctl", /* 149 = linux_sysctl */
|
||||
"mlock", /* 150 = mlock */
|
||||
"munlock", /* 151 = munlock */
|
||||
"mlockall", /* 152 = mlockall */
|
||||
"munlockall", /* 153 = munlockall */
|
||||
"sched_setparam", /* 154 = sched_setparam */
|
||||
"sched_getparam", /* 155 = sched_getparam */
|
||||
"linux_sched_setscheduler", /* 156 = linux_sched_setscheduler */
|
||||
"linux_sched_getscheduler", /* 157 = linux_sched_getscheduler */
|
||||
"sched_yield", /* 158 = sched_yield */
|
||||
"linux_sched_get_priority_max", /* 159 = linux_sched_get_priority_max */
|
||||
"linux_sched_get_priority_min", /* 160 = linux_sched_get_priority_min */
|
||||
"sched_rr_get_interval", /* 161 = sched_rr_get_interval */
|
||||
"linux_nanosleep", /* 162 = linux_nanosleep */
|
||||
"linux_mremap", /* 163 = linux_mremap */
|
||||
"linux_setresuid16", /* 164 = linux_setresuid16 */
|
||||
"linux_getresuid16", /* 165 = linux_getresuid16 */
|
||||
"linux_vm86", /* 166 = linux_vm86 */
|
||||
"linux_query_module", /* 167 = linux_query_module */
|
||||
"poll", /* 168 = poll */
|
||||
"linux_nfsservctl", /* 169 = linux_nfsservctl */
|
||||
"linux_setresgid16", /* 170 = linux_setresgid16 */
|
||||
"linux_getresgid16", /* 171 = linux_getresgid16 */
|
||||
"linux_prctl", /* 172 = linux_prctl */
|
||||
"linux_rt_sigreturn", /* 173 = linux_rt_sigreturn */
|
||||
"linux_rt_sigaction", /* 174 = linux_rt_sigaction */
|
||||
"linux_rt_sigprocmask", /* 175 = linux_rt_sigprocmask */
|
||||
"linux_rt_sigpending", /* 176 = linux_rt_sigpending */
|
||||
"linux_rt_sigtimedwait", /* 177 = linux_rt_sigtimedwait */
|
||||
"linux_rt_sigqueueinfo", /* 178 = linux_rt_sigqueueinfo */
|
||||
"linux_rt_sigsuspend", /* 179 = linux_rt_sigsuspend */
|
||||
"linux_pread", /* 180 = linux_pread */
|
||||
"linux_pwrite", /* 181 = linux_pwrite */
|
||||
"linux_chown16", /* 182 = linux_chown16 */
|
||||
"linux_getcwd", /* 183 = linux_getcwd */
|
||||
"linux_capget", /* 184 = linux_capget */
|
||||
"linux_capset", /* 185 = linux_capset */
|
||||
"linux_sigaltstack", /* 186 = linux_sigaltstack */
|
||||
"linux_sendfile", /* 187 = linux_sendfile */
|
||||
"#188", /* 188 = getpmsg */
|
||||
"#189", /* 189 = putpmsg */
|
||||
"linux_vfork", /* 190 = linux_vfork */
|
||||
"linux_getrlimit", /* 191 = linux_getrlimit */
|
||||
"linux_mmap2", /* 192 = linux_mmap2 */
|
||||
"linux_truncate64", /* 193 = linux_truncate64 */
|
||||
"linux_ftruncate64", /* 194 = linux_ftruncate64 */
|
||||
"linux_stat64", /* 195 = linux_stat64 */
|
||||
"linux_lstat64", /* 196 = linux_lstat64 */
|
||||
"linux_fstat64", /* 197 = linux_fstat64 */
|
||||
"linux_lchown", /* 198 = linux_lchown */
|
||||
"linux_getuid", /* 199 = linux_getuid */
|
||||
"linux_getgid", /* 200 = linux_getgid */
|
||||
"geteuid", /* 201 = geteuid */
|
||||
"getegid", /* 202 = getegid */
|
||||
"setreuid", /* 203 = setreuid */
|
||||
"setregid", /* 204 = setregid */
|
||||
"linux_getgroups", /* 205 = linux_getgroups */
|
||||
"linux_setgroups", /* 206 = linux_setgroups */
|
||||
"fchown", /* 207 = fchown */
|
||||
"setresuid", /* 208 = setresuid */
|
||||
"getresuid", /* 209 = getresuid */
|
||||
"setresgid", /* 210 = setresgid */
|
||||
"getresgid", /* 211 = getresgid */
|
||||
"linux_chown", /* 212 = linux_chown */
|
||||
"setuid", /* 213 = setuid */
|
||||
"setgid", /* 214 = setgid */
|
||||
"linux_setfsuid", /* 215 = linux_setfsuid */
|
||||
"linux_setfsgid", /* 216 = linux_setfsgid */
|
||||
"linux_pivot_root", /* 217 = linux_pivot_root */
|
||||
"linux_mincore", /* 218 = linux_mincore */
|
||||
"madvise", /* 219 = madvise */
|
||||
"linux_getdents64", /* 220 = linux_getdents64 */
|
||||
"linux_fcntl64", /* 221 = linux_fcntl64 */
|
||||
"#222", /* 222 = */
|
||||
"#223", /* 223 = */
|
||||
"linux_gettid", /* 224 = linux_gettid */
|
||||
"#225", /* 225 = linux_readahead */
|
||||
"linux_setxattr", /* 226 = linux_setxattr */
|
||||
"linux_lsetxattr", /* 227 = linux_lsetxattr */
|
||||
"linux_fsetxattr", /* 228 = linux_fsetxattr */
|
||||
"linux_getxattr", /* 229 = linux_getxattr */
|
||||
"linux_lgetxattr", /* 230 = linux_lgetxattr */
|
||||
"linux_fgetxattr", /* 231 = linux_fgetxattr */
|
||||
"linux_listxattr", /* 232 = linux_listxattr */
|
||||
"linux_llistxattr", /* 233 = linux_llistxattr */
|
||||
"linux_flistxattr", /* 234 = linux_flistxattr */
|
||||
"linux_removexattr", /* 235 = linux_removexattr */
|
||||
"linux_lremovexattr", /* 236 = linux_lremovexattr */
|
||||
"linux_fremovexattr", /* 237 = linux_fremovexattr */
|
||||
"linux_tkill", /* 238 = linux_tkill */
|
||||
"#239", /* 239 = linux_sendfile64 */
|
||||
"linux_sys_futex", /* 240 = linux_sys_futex */
|
||||
"linux_sched_setaffinity", /* 241 = linux_sched_setaffinity */
|
||||
"linux_sched_getaffinity", /* 242 = linux_sched_getaffinity */
|
||||
"linux_set_thread_area", /* 243 = linux_set_thread_area */
|
||||
"linux_get_thread_area", /* 244 = linux_get_thread_area */
|
||||
"#245", /* 245 = linux_io_setup */
|
||||
"#246", /* 246 = linux_io_destroy */
|
||||
"#247", /* 247 = linux_io_getevents */
|
||||
"#248", /* 248 = linux_io_submit */
|
||||
"#249", /* 249 = linux_io_cancel */
|
||||
"linux_fadvise64", /* 250 = linux_fadvise64 */
|
||||
"#251", /* 251 = */
|
||||
"linux_exit_group", /* 252 = linux_exit_group */
|
||||
"linux_lookup_dcookie", /* 253 = linux_lookup_dcookie */
|
||||
"linux_epoll_create", /* 254 = linux_epoll_create */
|
||||
"linux_epoll_ctl", /* 255 = linux_epoll_ctl */
|
||||
"linux_epoll_wait", /* 256 = linux_epoll_wait */
|
||||
"linux_remap_file_pages", /* 257 = linux_remap_file_pages */
|
||||
"linux_set_tid_address", /* 258 = linux_set_tid_address */
|
||||
"linux_timer_create", /* 259 = linux_timer_create */
|
||||
"linux_timer_settime", /* 260 = linux_timer_settime */
|
||||
"linux_timer_gettime", /* 261 = linux_timer_gettime */
|
||||
"linux_timer_getoverrun", /* 262 = linux_timer_getoverrun */
|
||||
"linux_timer_delete", /* 263 = linux_timer_delete */
|
||||
"linux_clock_settime", /* 264 = linux_clock_settime */
|
||||
"linux_clock_gettime", /* 265 = linux_clock_gettime */
|
||||
"linux_clock_getres", /* 266 = linux_clock_getres */
|
||||
"linux_clock_nanosleep", /* 267 = linux_clock_nanosleep */
|
||||
"linux_statfs64", /* 268 = linux_statfs64 */
|
||||
"linux_fstatfs64", /* 269 = linux_fstatfs64 */
|
||||
"linux_tgkill", /* 270 = linux_tgkill */
|
||||
"linux_utimes", /* 271 = linux_utimes */
|
||||
"linux_fadvise64_64", /* 272 = linux_fadvise64_64 */
|
||||
"#273", /* 273 = */
|
||||
"linux_mbind", /* 274 = linux_mbind */
|
||||
"linux_get_mempolicy", /* 275 = linux_get_mempolicy */
|
||||
"linux_set_mempolicy", /* 276 = linux_set_mempolicy */
|
||||
"linux_mq_open", /* 277 = linux_mq_open */
|
||||
"linux_mq_unlink", /* 278 = linux_mq_unlink */
|
||||
"linux_mq_timedsend", /* 279 = linux_mq_timedsend */
|
||||
"linux_mq_timedreceive", /* 280 = linux_mq_timedreceive */
|
||||
"linux_mq_notify", /* 281 = linux_mq_notify */
|
||||
"linux_mq_getsetattr", /* 282 = linux_mq_getsetattr */
|
||||
"linux_kexec_load", /* 283 = linux_kexec_load */
|
||||
"linux_waitid", /* 284 = linux_waitid */
|
||||
"#285", /* 285 = */
|
||||
"linux_add_key", /* 286 = linux_add_key */
|
||||
"linux_request_key", /* 287 = linux_request_key */
|
||||
"linux_keyctl", /* 288 = linux_keyctl */
|
||||
"linux_ioprio_set", /* 289 = linux_ioprio_set */
|
||||
"linux_ioprio_get", /* 290 = linux_ioprio_get */
|
||||
"linux_inotify_init", /* 291 = linux_inotify_init */
|
||||
"linux_inotify_add_watch", /* 292 = linux_inotify_add_watch */
|
||||
"linux_inotify_rm_watch", /* 293 = linux_inotify_rm_watch */
|
||||
"linux_migrate_pages", /* 294 = linux_migrate_pages */
|
||||
"linux_openat", /* 295 = linux_openat */
|
||||
"linux_mkdirat", /* 296 = linux_mkdirat */
|
||||
"linux_mknodat", /* 297 = linux_mknodat */
|
||||
"linux_fchownat", /* 298 = linux_fchownat */
|
||||
"linux_futimesat", /* 299 = linux_futimesat */
|
||||
"linux_fstatat64", /* 300 = linux_fstatat64 */
|
||||
"linux_unlinkat", /* 301 = linux_unlinkat */
|
||||
"linux_renameat", /* 302 = linux_renameat */
|
||||
"linux_linkat", /* 303 = linux_linkat */
|
||||
"linux_symlinkat", /* 304 = linux_symlinkat */
|
||||
"linux_readlinkat", /* 305 = linux_readlinkat */
|
||||
"linux_fchmodat", /* 306 = linux_fchmodat */
|
||||
"linux_faccessat", /* 307 = linux_faccessat */
|
||||
"linux_pselect6", /* 308 = linux_pselect6 */
|
||||
"linux_ppoll", /* 309 = linux_ppoll */
|
||||
"linux_unshare", /* 310 = linux_unshare */
|
||||
"linux_set_robust_list", /* 311 = linux_set_robust_list */
|
||||
"linux_get_robust_list", /* 312 = linux_get_robust_list */
|
||||
"linux_splice", /* 313 = linux_splice */
|
||||
"linux_sync_file_range", /* 314 = linux_sync_file_range */
|
||||
"linux_tee", /* 315 = linux_tee */
|
||||
"linux_vmsplice", /* 316 = linux_vmsplice */
|
||||
};
|
@ -3,7 +3,7 @@
|
||||
*
|
||||
* DO NOT EDIT-- this file is automatically generated.
|
||||
* $FreeBSD$
|
||||
* created from FreeBSD: head/sys/i386/linux/syscalls.master 218610 2011-02-12 15:33:25Z dchagin
|
||||
* created from FreeBSD: head/sys/i386/linux/syscalls.master 219559 2011-03-12 08:51:43Z avg
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
|
5396
sys/i386/linux/linux_systrace_args.c
Normal file
5396
sys/i386/linux/linux_systrace_args.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -90,6 +90,8 @@ MALLOC_DEFINE(M_LINUX, "linux", "Linux mode structures");
|
||||
#define LINUX_SYS_linux_rt_sendsig 0
|
||||
#define LINUX_SYS_linux_sendsig 0
|
||||
|
||||
#define LINUX_PS_STRINGS (LINUX_USRSTACK - sizeof(struct ps_strings))
|
||||
|
||||
extern char linux_sigcode[];
|
||||
extern int linux_szsigcode;
|
||||
|
||||
@ -308,21 +310,14 @@ linux_copyout_strings(struct image_params *imgp)
|
||||
*/
|
||||
p = imgp->proc;
|
||||
arginfo = (struct ps_strings *)p->p_sysent->sv_psstrings;
|
||||
destp = (caddr_t)arginfo - linux_szsigcode - SPARE_USRSPACE -
|
||||
linux_szplatform - roundup((ARG_MAX - imgp->args->stringspace),
|
||||
sizeof(char *));
|
||||
|
||||
/*
|
||||
* install sigcode
|
||||
*/
|
||||
copyout(p->p_sysent->sv_sigcode, ((caddr_t)arginfo -
|
||||
linux_szsigcode), linux_szsigcode);
|
||||
destp = (caddr_t)arginfo - SPARE_USRSPACE - linux_szplatform -
|
||||
roundup((ARG_MAX - imgp->args->stringspace), sizeof(char *));
|
||||
|
||||
/*
|
||||
* install LINUX_PLATFORM
|
||||
*/
|
||||
copyout(linux_platform, ((caddr_t)arginfo - linux_szsigcode -
|
||||
linux_szplatform), linux_szplatform);
|
||||
copyout(linux_platform, ((caddr_t)arginfo - linux_szplatform),
|
||||
linux_szplatform);
|
||||
|
||||
/*
|
||||
* If we have a valid auxargs ptr, prepare some room
|
||||
@ -520,8 +515,7 @@ linux_rt_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
* Build context to run handler in.
|
||||
*/
|
||||
regs->tf_esp = (int)fp;
|
||||
regs->tf_eip = PS_STRINGS - *(p->p_sysent->sv_szsigcode) +
|
||||
linux_sznonrtsigcode;
|
||||
regs->tf_eip = p->p_sysent->sv_sigcode_base + linux_sznonrtsigcode;
|
||||
regs->tf_eflags &= ~(PSL_T | PSL_VM | PSL_D);
|
||||
regs->tf_cs = _ucodesel;
|
||||
regs->tf_ds = _udatasel;
|
||||
@ -640,7 +634,7 @@ linux_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
* Build context to run handler in.
|
||||
*/
|
||||
regs->tf_esp = (int)fp;
|
||||
regs->tf_eip = PS_STRINGS - *(p->p_sysent->sv_szsigcode);
|
||||
regs->tf_eip = p->p_sysent->sv_sigcode_base;
|
||||
regs->tf_eflags &= ~(PSL_T | PSL_VM | PSL_D);
|
||||
regs->tf_cs = _ucodesel;
|
||||
regs->tf_ds = _udatasel;
|
||||
@ -986,7 +980,7 @@ struct sysentvec linux_sysvec = {
|
||||
.sv_pagesize = PAGE_SIZE,
|
||||
.sv_minuser = VM_MIN_ADDRESS,
|
||||
.sv_maxuser = VM_MAXUSER_ADDRESS,
|
||||
.sv_usrstack = USRSTACK,
|
||||
.sv_usrstack = LINUX_USRSTACK,
|
||||
.sv_psstrings = PS_STRINGS,
|
||||
.sv_stackprot = VM_PROT_ALL,
|
||||
.sv_copyout_strings = exec_copyout_strings,
|
||||
@ -997,8 +991,11 @@ struct sysentvec linux_sysvec = {
|
||||
.sv_set_syscall_retval = cpu_set_syscall_retval,
|
||||
.sv_fetch_syscall_args = linux_fetch_syscall_args,
|
||||
.sv_syscallnames = NULL,
|
||||
.sv_shared_page_base = LINUX_SHAREDPAGE,
|
||||
.sv_shared_page_len = PAGE_SIZE,
|
||||
.sv_schedtail = linux_schedtail,
|
||||
};
|
||||
INIT_SYSENTVEC(aout_sysvec, &linux_sysvec);
|
||||
|
||||
struct sysentvec elf_linux_sysvec = {
|
||||
.sv_size = LINUX_SYS_MAXSYSCALL,
|
||||
@ -1021,19 +1018,22 @@ struct sysentvec elf_linux_sysvec = {
|
||||
.sv_pagesize = PAGE_SIZE,
|
||||
.sv_minuser = VM_MIN_ADDRESS,
|
||||
.sv_maxuser = VM_MAXUSER_ADDRESS,
|
||||
.sv_usrstack = USRSTACK,
|
||||
.sv_psstrings = PS_STRINGS,
|
||||
.sv_usrstack = LINUX_USRSTACK,
|
||||
.sv_psstrings = LINUX_PS_STRINGS,
|
||||
.sv_stackprot = VM_PROT_ALL,
|
||||
.sv_copyout_strings = linux_copyout_strings,
|
||||
.sv_setregs = exec_linux_setregs,
|
||||
.sv_fixlimit = NULL,
|
||||
.sv_maxssiz = NULL,
|
||||
.sv_flags = SV_ABI_LINUX | SV_IA32 | SV_ILP32,
|
||||
.sv_flags = SV_ABI_LINUX | SV_IA32 | SV_ILP32 | SV_SHP,
|
||||
.sv_set_syscall_retval = cpu_set_syscall_retval,
|
||||
.sv_fetch_syscall_args = linux_fetch_syscall_args,
|
||||
.sv_syscallnames = NULL,
|
||||
.sv_shared_page_base = LINUX_SHAREDPAGE,
|
||||
.sv_shared_page_len = PAGE_SIZE,
|
||||
.sv_schedtail = linux_schedtail,
|
||||
};
|
||||
INIT_SYSENTVEC(elf_sysvec, &elf_linux_sysvec);
|
||||
|
||||
static char GNU_ABI_VENDOR[] = "GNU";
|
||||
static int GNULINUX_ABI_DESC = 0;
|
||||
|
@ -1,5 +1,5 @@
|
||||
# $FreeBSD$
|
||||
sysnames="/dev/null"
|
||||
sysnames="linux_syscalls.c"
|
||||
sysproto="linux_proto.h"
|
||||
sysproto_h=_LINUX_SYSPROTO_H_
|
||||
syshdr="linux_syscall.h"
|
||||
@ -8,4 +8,4 @@ sysmk="/dev/null"
|
||||
syscallprefix="LINUX_SYS_"
|
||||
switchname="linux_sysent"
|
||||
namesname="linux_syscallnames"
|
||||
systrace="/dev/null"
|
||||
systrace="linux_systrace_args.c"
|
||||
|
@ -102,7 +102,7 @@
|
||||
46 AUE_SETGID STD { int linux_setgid16(l_gid16_t gid); }
|
||||
47 AUE_GETGID STD { int linux_getgid16(void); }
|
||||
48 AUE_NULL STD { int linux_signal(l_int sig, \
|
||||
l_handler_t handler); }
|
||||
void *handler); }
|
||||
49 AUE_GETEUID STD { int linux_geteuid16(void); }
|
||||
50 AUE_GETEGID STD { int linux_getegid16(void); }
|
||||
51 AUE_ACCT NOPROTO { int acct(char *path); }
|
||||
@ -148,7 +148,7 @@
|
||||
struct timeval *tp, \
|
||||
struct timezone *tzp); }
|
||||
79 AUE_SETTIMEOFDAY NOPROTO { int settimeofday( \
|
||||
struct timeval *tp, \
|
||||
struct timeval *tv, \
|
||||
struct timezone *tzp); }
|
||||
80 AUE_GETGROUPS STD { int linux_getgroups16(l_uint gidsetsize, \
|
||||
l_gid16_t *gidset); }
|
||||
@ -293,7 +293,7 @@
|
||||
l_uid16_t *euid, l_uid16_t *suid); }
|
||||
166 AUE_NULL STD { int linux_vm86(void); }
|
||||
167 AUE_NULL STD { int linux_query_module(void); }
|
||||
168 AUE_POLL NOPROTO { int poll(struct pollfd*, \
|
||||
168 AUE_POLL NOPROTO { int poll(struct pollfd* fds, \
|
||||
unsigned int nfds, long timeout); }
|
||||
169 AUE_NULL STD { int linux_nfsservctl(void); }
|
||||
170 AUE_SETRESGID STD { int linux_setresgid16(l_gid16_t rgid, \
|
||||
|
@ -200,6 +200,8 @@ s/\$//g
|
||||
print > syscompat6
|
||||
print > syscompat7
|
||||
print > sysnames
|
||||
print > systrace
|
||||
print > systracetmp
|
||||
savesyscall = syscall
|
||||
next
|
||||
}
|
||||
@ -212,6 +214,8 @@ s/\$//g
|
||||
print > syscompat6
|
||||
print > syscompat7
|
||||
print > sysnames
|
||||
print > systrace
|
||||
print > systracetmp
|
||||
syscall = savesyscall
|
||||
next
|
||||
}
|
||||
@ -224,6 +228,8 @@ s/\$//g
|
||||
print > syscompat6
|
||||
print > syscompat7
|
||||
print > sysnames
|
||||
print > systrace
|
||||
print > systracetmp
|
||||
next
|
||||
}
|
||||
syscall != $1 {
|
||||
|
@ -136,11 +136,13 @@ ar724x_chip_set_pll_ge1(int speed)
|
||||
static void
|
||||
ar724x_chip_ddr_flush_ge0(void)
|
||||
{
|
||||
ar71xx_ddr_flush(AR724X_DDR_REG_FLUSH_GE0);
|
||||
}
|
||||
|
||||
static void
|
||||
ar724x_chip_ddr_flush_ge1(void)
|
||||
{
|
||||
ar71xx_ddr_flush(AR724X_DDR_REG_FLUSH_GE1);
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
|
@ -47,6 +47,9 @@
|
||||
|
||||
#define AR724X_BASE_FREQ 5000000
|
||||
|
||||
#define AR724X_DDR_REG_FLUSH_GE0 (AR71XX_DDR_CONFIG + 0x7c)
|
||||
#define AR724X_DDR_REG_FLUSH_GE1 (AR71XX_DDR_CONFIG + 0x80)
|
||||
|
||||
#define AR724X_RESET_REG_RESET_MODULE AR71XX_RST_BLOCK_BASE + 0x1c
|
||||
#define AR724X_RESET_MODULE_USB_OHCI_DLL (1 << 3)
|
||||
|
||||
|
@ -130,10 +130,12 @@ ar91xx_chip_set_pll_ge0(int speed)
|
||||
pll = AR91XX_PLL_VAL_1000;
|
||||
break;
|
||||
default:
|
||||
printf("ar91xx_chip_set_pll_ge0: invalid speed %d\n", speed);
|
||||
printf("ar91xx_chip_set_pll_ge0: invalid speed %d\n",
|
||||
speed);
|
||||
return;
|
||||
}
|
||||
ar71xx_write_pll(AR91XX_PLL_REG_ETH_CONFIG, AR91XX_PLL_REG_ETH0_INT_CLOCK, pll, AR91XX_ETH0_PLL_SHIFT);
|
||||
ar71xx_write_pll(AR91XX_PLL_REG_ETH_CONFIG,
|
||||
AR91XX_PLL_REG_ETH0_INT_CLOCK, pll, AR91XX_ETH0_PLL_SHIFT);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -152,10 +154,12 @@ ar91xx_chip_set_pll_ge1(int speed)
|
||||
pll = AR91XX_PLL_VAL_1000;
|
||||
break;
|
||||
default:
|
||||
printf("ar91xx_chip_set_pll_ge0: invalid speed %d\n", speed);
|
||||
printf("ar91xx_chip_set_pll_ge0: invalid speed %d\n",
|
||||
speed);
|
||||
return;
|
||||
}
|
||||
ar71xx_write_pll(AR91XX_PLL_REG_ETH_CONFIG, AR91XX_PLL_REG_ETH1_INT_CLOCK, pll, AR91XX_ETH1_PLL_SHIFT);
|
||||
ar71xx_write_pll(AR91XX_PLL_REG_ETH_CONFIG,
|
||||
AR91XX_PLL_REG_ETH1_INT_CLOCK, pll, AR91XX_ETH1_PLL_SHIFT);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -187,6 +191,13 @@ ar91xx_chip_init_usb_peripheral(void)
|
||||
|
||||
ar71xx_device_start(RST_RESET_USB_PHY);
|
||||
DELAY(100);
|
||||
|
||||
/* Wireless */
|
||||
ar71xx_device_stop(AR91XX_RST_RESET_MODULE_AMBA2WMAC);
|
||||
DELAY(1000);
|
||||
|
||||
ar71xx_device_start(AR91XX_RST_RESET_MODULE_AMBA2WMAC);
|
||||
DELAY(1000);
|
||||
}
|
||||
|
||||
struct ar71xx_cpu_def ar91xx_chip_def = {
|
||||
|
@ -79,6 +79,7 @@ MODULE_DEPEND(arge, miibus, 1, 1, 1);
|
||||
|
||||
#include <mips/atheros/ar71xxreg.h>
|
||||
#include <mips/atheros/if_argevar.h>
|
||||
#include <mips/atheros/ar71xx_setup.h>
|
||||
#include <mips/atheros/ar71xx_cpudef.h>
|
||||
|
||||
#undef ARGE_DEBUG
|
||||
@ -400,8 +401,18 @@ arge_attach(device_t dev)
|
||||
|
||||
ARGE_WRITE(sc, AR71XX_MAC_FIFO_CFG0,
|
||||
FIFO_CFG0_ALL << FIFO_CFG0_ENABLE_SHIFT);
|
||||
|
||||
switch (ar71xx_soc) {
|
||||
case AR71XX_SOC_AR7240:
|
||||
case AR71XX_SOC_AR7241:
|
||||
case AR71XX_SOC_AR7242:
|
||||
ARGE_WRITE(sc, AR71XX_MAC_FIFO_CFG1, 0x0010ffff);
|
||||
ARGE_WRITE(sc, AR71XX_MAC_FIFO_CFG2, 0x015500aa);
|
||||
break;
|
||||
default:
|
||||
ARGE_WRITE(sc, AR71XX_MAC_FIFO_CFG1, 0x0fff0000);
|
||||
ARGE_WRITE(sc, AR71XX_MAC_FIFO_CFG2, 0x00001fff);
|
||||
}
|
||||
|
||||
ARGE_WRITE(sc, AR71XX_MAC_FIFO_RX_FILTMATCH,
|
||||
FIFO_RX_FILTMATCH_DEFAULT);
|
||||
@ -663,6 +674,7 @@ static void
|
||||
arge_set_pll(struct arge_softc *sc, int media, int duplex)
|
||||
{
|
||||
uint32_t cfg, ifcontrol, rx_filtmask;
|
||||
uint32_t fifo_tx;
|
||||
int if_speed;
|
||||
|
||||
cfg = ARGE_READ(sc, AR71XX_MAC_CFG2);
|
||||
@ -701,13 +713,25 @@ arge_set_pll(struct arge_softc *sc, int media, int duplex)
|
||||
"Unknown media %d\n", media);
|
||||
}
|
||||
|
||||
ARGE_WRITE(sc, AR71XX_MAC_FIFO_TX_THRESHOLD,
|
||||
0x008001ff);
|
||||
switch (ar71xx_soc) {
|
||||
case AR71XX_SOC_AR7240:
|
||||
case AR71XX_SOC_AR7241:
|
||||
case AR71XX_SOC_AR7242:
|
||||
fifo_tx = 0x01f00140;
|
||||
break;
|
||||
case AR71XX_SOC_AR9130:
|
||||
case AR71XX_SOC_AR9132:
|
||||
fifo_tx = 0x00780fff;
|
||||
break;
|
||||
default:
|
||||
fifo_tx = 0x008001ff;
|
||||
}
|
||||
|
||||
ARGE_WRITE(sc, AR71XX_MAC_CFG2, cfg);
|
||||
ARGE_WRITE(sc, AR71XX_MAC_IFCONTROL, ifcontrol);
|
||||
ARGE_WRITE(sc, AR71XX_MAC_FIFO_RX_FILTMASK,
|
||||
rx_filtmask);
|
||||
ARGE_WRITE(sc, AR71XX_MAC_FIFO_TX_THRESHOLD, fifo_tx);
|
||||
|
||||
/* set PLL registers */
|
||||
if (sc->arge_mac_unit == 0)
|
||||
@ -1400,7 +1424,6 @@ arge_tx_ring_init(struct arge_softc *sc)
|
||||
sc->arge_cdata.arge_tx_prod = 0;
|
||||
sc->arge_cdata.arge_tx_cons = 0;
|
||||
sc->arge_cdata.arge_tx_cnt = 0;
|
||||
sc->arge_cdata.arge_tx_pkts = 0;
|
||||
|
||||
rd = &sc->arge_rdata;
|
||||
bzero(rd->arge_tx_ring, sizeof(rd->arge_tx_ring));
|
||||
@ -1760,7 +1783,7 @@ arge_intr(void *arg)
|
||||
*/
|
||||
if (status & DMA_INTR_TX_UNDERRUN) {
|
||||
ARGE_WRITE(sc, AR71XX_DMA_TX_STATUS, DMA_TX_STATUS_UNDERRUN);
|
||||
if (sc->arge_cdata.arge_tx_pkts > 0 ) {
|
||||
if (sc->arge_cdata.arge_tx_cnt > 0 ) {
|
||||
ARGE_WRITE(sc, AR71XX_DMA_TX_CONTROL,
|
||||
DMA_TX_CONTROL_EN);
|
||||
}
|
||||
|
@ -110,7 +110,6 @@ struct arge_chain_data {
|
||||
bus_dmamap_t arge_tx_ring_map;
|
||||
bus_dmamap_t arge_rx_ring_map;
|
||||
bus_dmamap_t arge_rx_sparemap;
|
||||
int arge_tx_pkts;
|
||||
int arge_tx_prod;
|
||||
int arge_tx_cons;
|
||||
int arge_tx_cnt;
|
||||
|
13
sys/modules/bxe/Makefile
Normal file
13
sys/modules/bxe/Makefile
Normal file
@ -0,0 +1,13 @@
|
||||
# $FreeBSD$
|
||||
BXE = ${.CURDIR}/../../dev/bxe
|
||||
.PATH: ${BXE}
|
||||
|
||||
KMOD= if_bxe
|
||||
SRCS = opt_bxe.h device_if.h bus_if.h pci_if.h miibus_if.h miidevs.h
|
||||
SRCS += if_bxe.c bxe_link.c
|
||||
|
||||
CFLAGS += -I${BXE} -DBXE_TASK
|
||||
#CFLAGS += -DBXE_DEBUG
|
||||
#CFLAGS += -DBXE_NVRAM_WRITE_SUPPORT
|
||||
|
||||
.include <bsd.kmod.mk>
|
@ -15,7 +15,10 @@ SUBDIR= dtmalloc \
|
||||
systrace
|
||||
|
||||
.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
|
||||
SUBDIR+= fasttrap fbt
|
||||
SUBDIR+= fasttrap fbt systrace_linux32
|
||||
.endif
|
||||
.if ${MACHINE_CPUARCH} == "amd64"
|
||||
SUBDIR+= systrace_freebsd32
|
||||
.endif
|
||||
|
||||
.include <bsd.subdir.mk>
|
||||
|
@ -1,8 +1,15 @@
|
||||
# $FreeBSD$
|
||||
|
||||
KMOD= dtraceall
|
||||
SRCS= dtraceall.c
|
||||
SRCS= dtraceall.c opt_compat.h
|
||||
|
||||
CFLAGS+= -I${.CURDIR}/../../..
|
||||
|
||||
.if !defined(KERNBUILDDIR)
|
||||
opt_compat.h:
|
||||
.if ${MACHINE_ARCH} == "amd64"
|
||||
echo "#define COMPAT_FREEBSD32 1" >> ${.TARGET}
|
||||
.endif
|
||||
.endif
|
||||
|
||||
.include <bsd.kmod.mk>
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/module.h>
|
||||
#include <sys/errno.h>
|
||||
#include "opt_compat.h"
|
||||
|
||||
static int
|
||||
dtraceall_modevent(module_t mod __unused, int type, void *data __unused)
|
||||
@ -73,4 +74,7 @@ MODULE_DEPEND(dtraceall, fasttrap, 1, 1, 1);
|
||||
MODULE_DEPEND(dtraceall, lockstat, 1, 1, 1);
|
||||
MODULE_DEPEND(dtraceall, sdt, 1, 1, 1);
|
||||
MODULE_DEPEND(dtraceall, systrace, 1, 1, 1);
|
||||
#if defined(COMPAT_FREEBSD32)
|
||||
MODULE_DEPEND(dtraceall, systrace_freebsd32, 1, 1, 1);
|
||||
#endif
|
||||
MODULE_DEPEND(dtraceall, profile, 1, 1, 1);
|
||||
|
13
sys/modules/dtrace/systrace_freebsd32/Makefile
Normal file
13
sys/modules/dtrace/systrace_freebsd32/Makefile
Normal file
@ -0,0 +1,13 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.PATH: ${.CURDIR}/../../../cddl/dev/systrace
|
||||
|
||||
KMOD= systrace_freebsd32
|
||||
SRCS= systrace.c
|
||||
SRCS+= vnode_if.h
|
||||
|
||||
CFLAGS+= -I${.CURDIR}/../../../cddl/compat/opensolaris \
|
||||
-I${.CURDIR}/../../../cddl/contrib/opensolaris/uts/common \
|
||||
-I${.CURDIR}/../../.. -DFREEBSD32_SYSTRACE
|
||||
|
||||
.include <bsd.kmod.mk>
|
13
sys/modules/dtrace/systrace_linux32/Makefile
Normal file
13
sys/modules/dtrace/systrace_linux32/Makefile
Normal file
@ -0,0 +1,13 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.PATH: ${.CURDIR}/../../../cddl/dev/systrace
|
||||
|
||||
KMOD= systrace_linux32
|
||||
SRCS= systrace.c
|
||||
SRCS+= vnode_if.h
|
||||
|
||||
CFLAGS+= -I${.CURDIR}/../../../cddl/compat/opensolaris \
|
||||
-I${.CURDIR}/../../../cddl/contrib/opensolaris/uts/common \
|
||||
-I${.CURDIR}/../../.. -DLINUX_SYSTRACE
|
||||
|
||||
.include <bsd.kmod.mk>
|
@ -133,7 +133,7 @@ enum ieee80211_roamingmode {
|
||||
*/
|
||||
struct ieee80211_channel {
|
||||
uint32_t ic_flags; /* see below */
|
||||
uint16_t ic_freq; /* setting in Mhz */
|
||||
uint16_t ic_freq; /* setting in MHz */
|
||||
uint8_t ic_ieee; /* IEEE channel number */
|
||||
int8_t ic_maxregpower; /* maximum regulatory tx power in dBm */
|
||||
int8_t ic_maxpower; /* maximum tx power in .5 dBm */
|
||||
|
@ -205,6 +205,15 @@ ieee80211_chan_init(struct ieee80211com *ic)
|
||||
DEFAULTRATES(IEEE80211_MODE_11NA, ieee80211_rateset_11a);
|
||||
DEFAULTRATES(IEEE80211_MODE_11NG, ieee80211_rateset_11g);
|
||||
|
||||
/*
|
||||
* Setup required information to fill the mcsset field, if driver did
|
||||
* not. Assume a 2T2R setup for historic reasons.
|
||||
*/
|
||||
if (ic->ic_rxstream == 0)
|
||||
ic->ic_rxstream = 2;
|
||||
if (ic->ic_txstream == 0)
|
||||
ic->ic_txstream = 2;
|
||||
|
||||
/*
|
||||
* Set auto mode to reset active channel state and any desired channel.
|
||||
*/
|
||||
@ -1067,10 +1076,18 @@ ieee80211_media_setup(struct ieee80211com *ic,
|
||||
isset(ic->ic_modecaps, IEEE80211_MODE_11NG)) {
|
||||
addmedia(media, caps, addsta,
|
||||
IEEE80211_MODE_AUTO, IFM_IEEE80211_MCS);
|
||||
/* XXX could walk htrates */
|
||||
/* XXX known array size */
|
||||
if (ieee80211_htrates[15].ht40_rate_400ns > maxrate)
|
||||
maxrate = ieee80211_htrates[15].ht40_rate_400ns;
|
||||
i = ic->ic_txstream * 8 - 1;
|
||||
if ((ic->ic_htcaps & IEEE80211_HTCAP_CHWIDTH40) &&
|
||||
(ic->ic_htcaps & IEEE80211_HTCAP_SHORTGI40))
|
||||
rate = ieee80211_htrates[i].ht40_rate_400ns;
|
||||
else if ((ic->ic_htcaps & IEEE80211_HTCAP_CHWIDTH40))
|
||||
rate = ieee80211_htrates[i].ht40_rate_800ns;
|
||||
else if ((ic->ic_htcaps & IEEE80211_HTCAP_SHORTGI20))
|
||||
rate = ieee80211_htrates[i].ht20_rate_400ns;
|
||||
else
|
||||
rate = ieee80211_htrates[i].ht20_rate_800ns;
|
||||
if (rate > maxrate)
|
||||
maxrate = rate;
|
||||
}
|
||||
return maxrate;
|
||||
}
|
||||
|
@ -134,12 +134,6 @@ const struct ieee80211_mcs_rates ieee80211_htrates[IEEE80211_HTRATE_MAXSIZE] = {
|
||||
{ 429, 477, 891, 990 }, /* MCS 76 */
|
||||
};
|
||||
|
||||
static const struct ieee80211_htrateset ieee80211_rateset_11n =
|
||||
{ 16, {
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
|
||||
10, 11, 12, 13, 14, 15 }
|
||||
};
|
||||
|
||||
#ifdef IEEE80211_AMPDU_AGE
|
||||
static int ieee80211_ampdu_age = -1; /* threshold for ampdu reorder q (ms) */
|
||||
SYSCTL_PROC(_net_wlan, OID_AUTO, ampdu_age, CTLTYPE_INT | CTLFLAG_RW,
|
||||
@ -308,75 +302,149 @@ ieee80211_ht_vdetach(struct ieee80211vap *vap)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
ht_rateprint(struct ieee80211com *ic, int mode,
|
||||
const struct ieee80211_htrateset *rs, int maxmcs, int ratetype)
|
||||
static int
|
||||
ht_getrate(struct ieee80211com *ic, int index, int mode, int ratetype)
|
||||
{
|
||||
int i, rate, mword;
|
||||
int mword, rate;
|
||||
|
||||
for (i = 0; i < rs->rs_nrates && i < maxmcs; i++) {
|
||||
mword = ieee80211_rate2media(ic,
|
||||
rs->rs_rates[i] | IEEE80211_RATE_MCS, mode);
|
||||
mword = ieee80211_rate2media(ic, index | IEEE80211_RATE_MCS, mode);
|
||||
if (IFM_SUBTYPE(mword) != IFM_IEEE80211_MCS)
|
||||
continue;
|
||||
return (0);
|
||||
switch (ratetype) {
|
||||
case 0:
|
||||
rate = ieee80211_htrates[
|
||||
rs->rs_rates[i]].ht20_rate_800ns;
|
||||
rate = ieee80211_htrates[index].ht20_rate_800ns;
|
||||
break;
|
||||
case 1:
|
||||
rate = ieee80211_htrates[
|
||||
rs->rs_rates[i]].ht20_rate_400ns;
|
||||
rate = ieee80211_htrates[index].ht20_rate_400ns;
|
||||
break;
|
||||
case 2:
|
||||
rate = ieee80211_htrates[
|
||||
rs->rs_rates[i]].ht40_rate_800ns;
|
||||
rate = ieee80211_htrates[index].ht40_rate_800ns;
|
||||
break;
|
||||
default:
|
||||
rate = ieee80211_htrates[
|
||||
rs->rs_rates[i]].ht40_rate_400ns;
|
||||
rate = ieee80211_htrates[index].ht40_rate_400ns;
|
||||
break;
|
||||
}
|
||||
printf("%s%d%sMbps", (i != 0 ? " " : ""),
|
||||
rate / 2, ((rate & 0x1) != 0 ? ".5" : ""));
|
||||
return (rate);
|
||||
}
|
||||
|
||||
static struct printranges {
|
||||
int minmcs;
|
||||
int maxmcs;
|
||||
int txstream;
|
||||
int ratetype;
|
||||
int htcapflags;
|
||||
} ranges[] = {
|
||||
{ 0, 7, 1, 0, 0 },
|
||||
{ 8, 15, 2, 0, 0 },
|
||||
{ 16, 23, 3, 0, 0 },
|
||||
{ 24, 31, 4, 0, 0 },
|
||||
{ 32, 0, 1, 2, IEEE80211_HTC_TXMCS32 },
|
||||
{ 33, 38, 2, 0, IEEE80211_HTC_TXUNEQUAL },
|
||||
{ 39, 52, 3, 0, IEEE80211_HTC_TXUNEQUAL },
|
||||
{ 53, 76, 4, 0, IEEE80211_HTC_TXUNEQUAL },
|
||||
{ 0, 0, 0, 0, 0 },
|
||||
};
|
||||
|
||||
static void
|
||||
ht_rateprint(struct ieee80211com *ic, int mode, int ratetype)
|
||||
{
|
||||
struct ifnet *ifp = ic->ic_ifp;
|
||||
int minrate, maxrate;
|
||||
struct printranges *range;
|
||||
|
||||
for (range = ranges; range->txstream != 0; range++) {
|
||||
if (ic->ic_txstream < range->txstream)
|
||||
continue;
|
||||
if (range->htcapflags &&
|
||||
(ic->ic_htcaps & range->htcapflags) == 0)
|
||||
continue;
|
||||
if (ratetype < range->ratetype)
|
||||
continue;
|
||||
minrate = ht_getrate(ic, range->minmcs, mode, ratetype);
|
||||
maxrate = ht_getrate(ic, range->maxmcs, mode, ratetype);
|
||||
if (range->maxmcs) {
|
||||
if_printf(ifp, "MCS %d-%d: %d%sMbps - %d%sMbps\n",
|
||||
range->minmcs, range->maxmcs,
|
||||
minrate/2, ((minrate & 0x1) != 0 ? ".5" : ""),
|
||||
maxrate/2, ((maxrate & 0x1) != 0 ? ".5" : ""));
|
||||
} else {
|
||||
if_printf(ifp, "MCS %d: %d%sMbps\n", range->minmcs,
|
||||
minrate/2, ((minrate & 0x1) != 0 ? ".5" : ""));
|
||||
}
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
static void
|
||||
ht_announce(struct ieee80211com *ic, int mode,
|
||||
const struct ieee80211_htrateset *rs)
|
||||
ht_announce(struct ieee80211com *ic, int mode)
|
||||
{
|
||||
struct ifnet *ifp = ic->ic_ifp;
|
||||
int maxmcs = 2 * 8;
|
||||
const char *modestr = ieee80211_phymode_name[mode];
|
||||
|
||||
KASSERT(maxmcs <= 16, ("maxmcs > 16"));
|
||||
if_printf(ifp, "%d MCS rates\n", maxmcs);
|
||||
if_printf(ifp, "%s MCS 20Mhz: ", modestr);
|
||||
ht_rateprint(ic, mode, rs, maxmcs, 0);
|
||||
if_printf(ifp, "%s MCS 20Mhz SGI: ", modestr);
|
||||
ht_rateprint(ic, mode, rs, maxmcs, 1);
|
||||
if_printf(ifp, "%s MCS 40Mhz: ", modestr);
|
||||
ht_rateprint(ic, mode, rs, maxmcs, 2);
|
||||
if_printf(ifp, "%s MCS 40Mhz SGI: ", modestr);
|
||||
ht_rateprint(ic, mode, rs, maxmcs, 3);
|
||||
if_printf(ifp, "%s MCS 20MHz\n", modestr);
|
||||
ht_rateprint(ic, mode, 0);
|
||||
if (ic->ic_htcaps & IEEE80211_HTCAP_SHORTGI20) {
|
||||
if_printf(ifp, "%s MCS 20MHz SGI\n", modestr);
|
||||
ht_rateprint(ic, mode, 1);
|
||||
}
|
||||
if (ic->ic_htcaps & IEEE80211_HTCAP_CHWIDTH40) {
|
||||
if_printf(ifp, "%s MCS 40MHz:\n", modestr);
|
||||
ht_rateprint(ic, mode, 2);
|
||||
}
|
||||
if ((ic->ic_htcaps & IEEE80211_HTCAP_CHWIDTH40) &&
|
||||
(ic->ic_htcaps & IEEE80211_HTCAP_SHORTGI40)) {
|
||||
if_printf(ifp, "%s MCS 40MHz SGI:\n", modestr);
|
||||
ht_rateprint(ic, mode, 3);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ieee80211_ht_announce(struct ieee80211com *ic)
|
||||
{
|
||||
struct ifnet *ifp = ic->ic_ifp;
|
||||
|
||||
if (isset(ic->ic_modecaps, IEEE80211_MODE_11NA) ||
|
||||
isset(ic->ic_modecaps, IEEE80211_MODE_11NG))
|
||||
if_printf(ifp, "%dT%dR\n", ic->ic_txstream, ic->ic_rxstream);
|
||||
if (isset(ic->ic_modecaps, IEEE80211_MODE_11NA))
|
||||
ht_announce(ic, IEEE80211_MODE_11NA, &ieee80211_rateset_11n);
|
||||
ht_announce(ic, IEEE80211_MODE_11NA);
|
||||
if (isset(ic->ic_modecaps, IEEE80211_MODE_11NG))
|
||||
ht_announce(ic, IEEE80211_MODE_11NG, &ieee80211_rateset_11n);
|
||||
ht_announce(ic, IEEE80211_MODE_11NG);
|
||||
}
|
||||
|
||||
static struct ieee80211_htrateset htrateset;
|
||||
|
||||
const struct ieee80211_htrateset *
|
||||
ieee80211_get_suphtrates(struct ieee80211com *ic,
|
||||
const struct ieee80211_channel *c)
|
||||
{
|
||||
return &ieee80211_rateset_11n;
|
||||
#define ADDRATE(x) do { \
|
||||
htrateset.rs_rates[htrateset.rs_nrates] = x; \
|
||||
htrateset.rs_nrates++; \
|
||||
} while (0)
|
||||
int i;
|
||||
|
||||
memset(&htrateset, 0, sizeof(struct ieee80211_htrateset));
|
||||
for (i = 0; i < ic->ic_txstream * 8; i++)
|
||||
ADDRATE(i);
|
||||
if ((ic->ic_htcaps & IEEE80211_HTCAP_CHWIDTH40) &&
|
||||
(ic->ic_htcaps & IEEE80211_HTC_TXMCS32))
|
||||
ADDRATE(i);
|
||||
if (ic->ic_htcaps & IEEE80211_HTC_TXUNEQUAL) {
|
||||
if (ic->ic_txstream >= 2) {
|
||||
for (i = 33; i <= 38; i++)
|
||||
ADDRATE(i);
|
||||
}
|
||||
if (ic->ic_txstream >= 3) {
|
||||
for (i = 39; i <= 52; i++)
|
||||
ADDRATE(i);
|
||||
}
|
||||
if (ic->ic_txstream == 4) {
|
||||
for (i = 53; i <= 76; i++)
|
||||
ADDRATE(i);
|
||||
}
|
||||
}
|
||||
return &htrateset;
|
||||
#undef ADDRATE
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1495,7 +1563,7 @@ ieee80211_ht_updatehtcap(struct ieee80211_node *ni, const uint8_t *htcapie)
|
||||
htcap_update_shortgi(ni);
|
||||
|
||||
/* NB: honor operating mode constraint */
|
||||
/* XXX 40 MHZ intolerant */
|
||||
/* XXX 40 MHz intolerant */
|
||||
htflags = (vap->iv_flags_ht & IEEE80211_FHT_HT) ?
|
||||
IEEE80211_CHAN_HT20 : 0;
|
||||
if ((ni->ni_htcap & IEEE80211_HTCAP_CHWIDTH40) &&
|
||||
@ -1514,10 +1582,22 @@ ieee80211_ht_updatehtcap(struct ieee80211_node *ni, const uint8_t *htcapie)
|
||||
int
|
||||
ieee80211_setup_htrates(struct ieee80211_node *ni, const uint8_t *ie, int flags)
|
||||
{
|
||||
struct ieee80211com *ic = ni->ni_ic;
|
||||
struct ieee80211vap *vap = ni->ni_vap;
|
||||
const struct ieee80211_ie_htcap *htcap;
|
||||
struct ieee80211_htrateset *rs;
|
||||
int i;
|
||||
int i, maxequalmcs, maxunequalmcs;
|
||||
|
||||
maxequalmcs = ic->ic_txstream * 8 - 1;
|
||||
if (ic->ic_htcaps & IEEE80211_HTC_TXUNEQUAL) {
|
||||
if (ic->ic_txstream >= 2)
|
||||
maxunequalmcs = 38;
|
||||
if (ic->ic_txstream >= 3)
|
||||
maxunequalmcs = 52;
|
||||
if (ic->ic_txstream >= 4)
|
||||
maxunequalmcs = 76;
|
||||
} else
|
||||
maxunequalmcs = 0;
|
||||
|
||||
rs = &ni->ni_htrates;
|
||||
memset(rs, 0, sizeof(*rs));
|
||||
@ -1536,6 +1616,13 @@ ieee80211_setup_htrates(struct ieee80211_node *ni, const uint8_t *ie, int flags)
|
||||
vap->iv_stats.is_rx_rstoobig++;
|
||||
break;
|
||||
}
|
||||
if (i <= 31 && i > maxequalmcs)
|
||||
continue;
|
||||
if (i == 32 &&
|
||||
(ic->ic_htcaps & IEEE80211_HTC_TXMCS32) == 0)
|
||||
continue;
|
||||
if (i > 32 && i > maxunequalmcs)
|
||||
continue;
|
||||
rs->rs_rates[rs->rs_nrates++] = i;
|
||||
}
|
||||
}
|
||||
@ -2377,21 +2464,49 @@ ht_send_action_ht_txchwidth(struct ieee80211_node *ni,
|
||||
#undef ADDSHORT
|
||||
|
||||
/*
|
||||
* Construct the MCS bit mask for inclusion
|
||||
* in an HT information element.
|
||||
* Construct the MCS bit mask for inclusion in an HT capabilities
|
||||
* information element.
|
||||
*/
|
||||
static void
|
||||
ieee80211_set_htrates(uint8_t *frm, const struct ieee80211_htrateset *rs)
|
||||
ieee80211_set_mcsset(struct ieee80211com *ic, uint8_t *frm)
|
||||
{
|
||||
int i;
|
||||
uint8_t txparams;
|
||||
|
||||
for (i = 0; i < rs->rs_nrates; i++) {
|
||||
int r = rs->rs_rates[i] & IEEE80211_RATE_VAL;
|
||||
if (r < IEEE80211_HTRATE_MAXSIZE) { /* XXX? */
|
||||
/* NB: this assumes a particular implementation */
|
||||
setbit(frm, r);
|
||||
KASSERT((ic->ic_rxstream > 0 && ic->ic_rxstream <= 4),
|
||||
("ic_rxstream %d out of range", ic->ic_rxstream));
|
||||
KASSERT((ic->ic_txstream > 0 && ic->ic_txstream <= 4),
|
||||
("ic_txstream %d out of range", ic->ic_txstream));
|
||||
|
||||
for (i = 0; i < ic->ic_rxstream * 8; i++)
|
||||
setbit(frm, i);
|
||||
if ((ic->ic_htcaps & IEEE80211_HTCAP_CHWIDTH40) &&
|
||||
(ic->ic_htcaps & IEEE80211_HTC_RXMCS32))
|
||||
setbit(frm, 32);
|
||||
if (ic->ic_htcaps & IEEE80211_HTC_RXUNEQUAL) {
|
||||
if (ic->ic_rxstream >= 2) {
|
||||
for (i = 33; i <= 38; i++)
|
||||
setbit(frm, i);
|
||||
}
|
||||
if (ic->ic_rxstream >= 3) {
|
||||
for (i = 39; i <= 52; i++)
|
||||
setbit(frm, i);
|
||||
}
|
||||
if (ic->ic_txstream >= 4) {
|
||||
for (i = 53; i <= 76; i++)
|
||||
setbit(frm, i);
|
||||
}
|
||||
}
|
||||
|
||||
if (ic->ic_rxstream != ic->ic_txstream) {
|
||||
txparams = 0x1; /* TX MCS set defined */
|
||||
txparams |= 0x2; /* TX RX MCS not equal */
|
||||
txparams |= (ic->ic_txstream - 1) << 2; /* num TX streams */
|
||||
if (ic->ic_htcaps & IEEE80211_HTC_TXUNEQUAL)
|
||||
txparams |= 0x16; /* TX unequal modulation sup */
|
||||
} else
|
||||
txparams = 0;
|
||||
frm[12] = txparams;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2457,12 +2572,12 @@ ieee80211_add_htcap_body(uint8_t *frm, struct ieee80211_node *ni)
|
||||
|
||||
/* supported MCS set */
|
||||
/*
|
||||
* XXX it would better to get the rate set from ni_htrates
|
||||
* so we can restrict it but for sta mode ni_htrates isn't
|
||||
* setup when we're called to form an AssocReq frame so for
|
||||
* now we're restricted to the default HT rate set.
|
||||
* XXX: For sta mode the rate set should be restricted based
|
||||
* on the AP's capabilities, but ni_htrates isn't setup when
|
||||
* we're called to form an AssocReq frame so for now we're
|
||||
* restricted to the device capabilities.
|
||||
*/
|
||||
ieee80211_set_htrates(frm, &ieee80211_rateset_11n);
|
||||
ieee80211_set_mcsset(ni->ni_ic, frm);
|
||||
|
||||
frm += __offsetof(struct ieee80211_ie_htcap, hc_extcap) -
|
||||
__offsetof(struct ieee80211_ie_htcap, hc_mcsset);
|
||||
|
@ -285,10 +285,7 @@ ieee80211_node_set_chan(struct ieee80211_node *ni,
|
||||
mode = ieee80211_chan2mode(chan);
|
||||
if (IEEE80211_IS_CHAN_HT(chan)) {
|
||||
/*
|
||||
* XXX Gotta be careful here; the rate set returned by
|
||||
* ieee80211_get_suprates is actually any HT rate
|
||||
* set so blindly copying it will be bad. We must
|
||||
* install the legacy rate est in ni_rates and the
|
||||
* We must install the legacy rate est in ni_rates and the
|
||||
* HT rate set in ni_htrates.
|
||||
*/
|
||||
ni->ni_htrates = *ieee80211_get_suphtrates(ic, chan);
|
||||
|
@ -419,7 +419,8 @@ ieee80211_output(struct ifnet *ifp, struct mbuf *m,
|
||||
"block %s frame in CAC state\n", "raw data");
|
||||
vap->iv_stats.is_tx_badstate++;
|
||||
senderr(EIO); /* XXX */
|
||||
}
|
||||
} else if (vap->iv_state == IEEE80211_S_SCAN)
|
||||
senderr(EIO);
|
||||
/* XXX bypass bridge, pfil, carp, etc. */
|
||||
|
||||
if (m->m_pkthdr.len < sizeof(struct ieee80211_frame_ack))
|
||||
|
@ -756,26 +756,38 @@ maxrate(const struct ieee80211_scan_entry *se)
|
||||
{
|
||||
const struct ieee80211_ie_htcap *htcap =
|
||||
(const struct ieee80211_ie_htcap *) se->se_ies.htcap_ie;
|
||||
int rmax, r, i;
|
||||
int rmax, r, i, txstream;
|
||||
uint16_t caps;
|
||||
uint8_t txparams;
|
||||
|
||||
rmax = 0;
|
||||
if (htcap != NULL) {
|
||||
/*
|
||||
* HT station; inspect supported MCS and then adjust
|
||||
* rate by channel width. Could also include short GI
|
||||
* in this if we want to be extra accurate.
|
||||
* rate by channel width.
|
||||
*/
|
||||
/* XXX assumes MCS15 is max */
|
||||
for (i = 15; i >= 0 && isclr(htcap->hc_mcsset, i); i--)
|
||||
;
|
||||
txparams = htcap->hc_mcsset[12];
|
||||
if (txparams & 0x3) {
|
||||
/*
|
||||
* TX MCS parameters defined and not equal to RX,
|
||||
* extract the number of spartial streams and
|
||||
* map it to the highest MCS rate.
|
||||
*/
|
||||
txstream = ((txparams & 0xc) >> 2) + 1;
|
||||
i = txstream * 8 - 1;
|
||||
} else
|
||||
for (i = 31; i >= 0 && isclr(htcap->hc_mcsset, i); i--);
|
||||
if (i >= 0) {
|
||||
caps = LE_READ_2(&htcap->hc_cap);
|
||||
/* XXX short/long GI */
|
||||
if (caps & IEEE80211_HTCAP_CHWIDTH40)
|
||||
if ((caps & IEEE80211_HTCAP_CHWIDTH40) &&
|
||||
(caps & IEEE80211_HTCAP_SHORTGI40))
|
||||
rmax = ieee80211_htrates[i].ht40_rate_400ns;
|
||||
else
|
||||
else if (caps & IEEE80211_HTCAP_CHWIDTH40)
|
||||
rmax = ieee80211_htrates[i].ht40_rate_800ns;
|
||||
else if (caps & IEEE80211_HTCAP_SHORTGI20)
|
||||
rmax = ieee80211_htrates[i].ht20_rate_400ns;
|
||||
else
|
||||
rmax = ieee80211_htrates[i].ht20_rate_800ns;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < se->se_rates[1]; i++) {
|
||||
|
@ -1544,7 +1544,7 @@ sta_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m0,
|
||||
htcap = frm;
|
||||
} else if (ishtinfooui(frm)) {
|
||||
if (htinfo == NULL)
|
||||
htcap = frm;
|
||||
htinfo = frm;
|
||||
}
|
||||
}
|
||||
/* XXX Atheros OUI support */
|
||||
|
@ -637,6 +637,10 @@ MALLOC_DECLARE(M_80211_VAP);
|
||||
#define IEEE80211_HTC_HT 0x00040000 /* CAPABILITY: HT operation */
|
||||
#define IEEE80211_HTC_SMPS 0x00080000 /* CAPABILITY: MIMO power save*/
|
||||
#define IEEE80211_HTC_RIFS 0x00100000 /* CAPABILITY: RIFS support */
|
||||
#define IEEE80211_HTC_RXUNEQUAL 0x00200000 /* CAPABILITY: RX unequal MCS */
|
||||
#define IEEE80211_HTC_RXMCS32 0x00400000 /* CAPABILITY: MCS32 support */
|
||||
#define IEEE80211_HTC_TXUNEQUAL 0x00800000 /* CAPABILITY: TX unequal MCS */
|
||||
#define IEEE80211_HTC_TXMCS32 0x01000000 /* CAPABILITY: MCS32 suport */
|
||||
|
||||
#define IEEE80211_C_HTCAP_BITS \
|
||||
"\20\1LDPC\2CHWIDTH40\5GREENFIELD\6SHORTGI20\7SHORTGI40\10TXSTBC" \
|
||||
|
@ -36,6 +36,7 @@ __FBSDID("$FreeBSD$");
|
||||
|
||||
#include "opt_ddb.h"
|
||||
#include "opt_ipsec.h"
|
||||
#include "opt_inet.h"
|
||||
#include "opt_inet6.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -73,6 +74,7 @@ __FBSDID("$FreeBSD$");
|
||||
#ifdef INET6
|
||||
#include <netinet/ip6.h>
|
||||
#include <netinet6/ip6_var.h>
|
||||
#include <netinet6/in6_pcb.h>
|
||||
#endif /* INET6 */
|
||||
|
||||
|
||||
@ -312,6 +314,124 @@ in_pcbbind(struct inpcb *inp, struct sockaddr *nam, struct ucred *cred)
|
||||
return (0);
|
||||
}
|
||||
|
||||
#if defined(INET) || defined(INET6)
|
||||
int
|
||||
in_pcb_lport(struct inpcb *inp, struct in_addr *laddrp, u_short *lportp,
|
||||
struct ucred *cred, int wild)
|
||||
{
|
||||
struct inpcbinfo *pcbinfo;
|
||||
struct inpcb *tmpinp;
|
||||
unsigned short *lastport;
|
||||
int count, dorandom, error;
|
||||
u_short aux, first, last, lport;
|
||||
#ifdef INET
|
||||
struct in_addr laddr;
|
||||
#endif
|
||||
|
||||
pcbinfo = inp->inp_pcbinfo;
|
||||
|
||||
/*
|
||||
* Because no actual state changes occur here, a global write lock on
|
||||
* the pcbinfo isn't required.
|
||||
*/
|
||||
INP_INFO_LOCK_ASSERT(pcbinfo);
|
||||
INP_LOCK_ASSERT(inp);
|
||||
|
||||
if (inp->inp_flags & INP_HIGHPORT) {
|
||||
first = V_ipport_hifirstauto; /* sysctl */
|
||||
last = V_ipport_hilastauto;
|
||||
lastport = &pcbinfo->ipi_lasthi;
|
||||
} else if (inp->inp_flags & INP_LOWPORT) {
|
||||
error = priv_check_cred(cred, PRIV_NETINET_RESERVEDPORT, 0);
|
||||
if (error)
|
||||
return (error);
|
||||
first = V_ipport_lowfirstauto; /* 1023 */
|
||||
last = V_ipport_lowlastauto; /* 600 */
|
||||
lastport = &pcbinfo->ipi_lastlow;
|
||||
} else {
|
||||
first = V_ipport_firstauto; /* sysctl */
|
||||
last = V_ipport_lastauto;
|
||||
lastport = &pcbinfo->ipi_lastport;
|
||||
}
|
||||
/*
|
||||
* For UDP, use random port allocation as long as the user
|
||||
* allows it. For TCP (and as of yet unknown) connections,
|
||||
* use random port allocation only if the user allows it AND
|
||||
* ipport_tick() allows it.
|
||||
*/
|
||||
if (V_ipport_randomized &&
|
||||
(!V_ipport_stoprandom || pcbinfo == &V_udbinfo))
|
||||
dorandom = 1;
|
||||
else
|
||||
dorandom = 0;
|
||||
/*
|
||||
* It makes no sense to do random port allocation if
|
||||
* we have the only port available.
|
||||
*/
|
||||
if (first == last)
|
||||
dorandom = 0;
|
||||
/* Make sure to not include UDP packets in the count. */
|
||||
if (pcbinfo != &V_udbinfo)
|
||||
V_ipport_tcpallocs++;
|
||||
/*
|
||||
* Instead of having two loops further down counting up or down
|
||||
* make sure that first is always <= last and go with only one
|
||||
* code path implementing all logic.
|
||||
*/
|
||||
if (first > last) {
|
||||
aux = first;
|
||||
first = last;
|
||||
last = aux;
|
||||
}
|
||||
|
||||
#ifdef INET
|
||||
/* Make the compiler happy. */
|
||||
laddr.s_addr = 0;
|
||||
if ((inp->inp_vflag & INP_IPV4) != 0) {
|
||||
KASSERT(laddrp != NULL, ("%s: laddrp NULL for v4 inp %p",
|
||||
__func__, inp));
|
||||
laddr = *laddrp;
|
||||
}
|
||||
#endif
|
||||
lport = *lportp;
|
||||
|
||||
if (dorandom)
|
||||
*lastport = first + (arc4random() % (last - first));
|
||||
|
||||
count = last - first;
|
||||
|
||||
do {
|
||||
if (count-- < 0) /* completely used? */
|
||||
return (EADDRNOTAVAIL);
|
||||
++*lastport;
|
||||
if (*lastport < first || *lastport > last)
|
||||
*lastport = first;
|
||||
lport = htons(*lastport);
|
||||
|
||||
#ifdef INET6
|
||||
if ((inp->inp_vflag & INP_IPV6) != 0)
|
||||
tmpinp = in6_pcblookup_local(pcbinfo,
|
||||
&inp->in6p_laddr, lport, wild, cred);
|
||||
#endif
|
||||
#if defined(INET) && defined(INET6)
|
||||
else
|
||||
#endif
|
||||
#ifdef INET
|
||||
tmpinp = in_pcblookup_local(pcbinfo, laddr,
|
||||
lport, wild, cred);
|
||||
#endif
|
||||
} while (tmpinp != NULL);
|
||||
|
||||
#ifdef INET
|
||||
if ((inp->inp_vflag & INP_IPV4) != 0)
|
||||
laddrp->s_addr = laddr.s_addr;
|
||||
#endif
|
||||
*lportp = lport;
|
||||
|
||||
return (0);
|
||||
}
|
||||
#endif /* INET || INET6 */
|
||||
|
||||
/*
|
||||
* Set up a bind operation on a PCB, performing port allocation
|
||||
* as required, but do not actually modify the PCB. Callers can
|
||||
@ -326,14 +446,12 @@ in_pcbbind_setup(struct inpcb *inp, struct sockaddr *nam, in_addr_t *laddrp,
|
||||
u_short *lportp, struct ucred *cred)
|
||||
{
|
||||
struct socket *so = inp->inp_socket;
|
||||
unsigned short *lastport;
|
||||
struct sockaddr_in *sin;
|
||||
struct inpcbinfo *pcbinfo = inp->inp_pcbinfo;
|
||||
struct in_addr laddr;
|
||||
u_short lport = 0;
|
||||
int wild = 0, reuseport = (so->so_options & SO_REUSEPORT);
|
||||
int error;
|
||||
int dorandom;
|
||||
|
||||
/*
|
||||
* Because no actual state changes occur here, a global write lock on
|
||||
@ -458,72 +576,10 @@ in_pcbbind_setup(struct inpcb *inp, struct sockaddr *nam, in_addr_t *laddrp,
|
||||
if (*lportp != 0)
|
||||
lport = *lportp;
|
||||
if (lport == 0) {
|
||||
u_short first, last, aux;
|
||||
int count;
|
||||
error = in_pcb_lport(inp, &laddr, &lport, cred, wild);
|
||||
if (error != 0)
|
||||
return (error);
|
||||
|
||||
if (inp->inp_flags & INP_HIGHPORT) {
|
||||
first = V_ipport_hifirstauto; /* sysctl */
|
||||
last = V_ipport_hilastauto;
|
||||
lastport = &pcbinfo->ipi_lasthi;
|
||||
} else if (inp->inp_flags & INP_LOWPORT) {
|
||||
error = priv_check_cred(cred,
|
||||
PRIV_NETINET_RESERVEDPORT, 0);
|
||||
if (error)
|
||||
return error;
|
||||
first = V_ipport_lowfirstauto; /* 1023 */
|
||||
last = V_ipport_lowlastauto; /* 600 */
|
||||
lastport = &pcbinfo->ipi_lastlow;
|
||||
} else {
|
||||
first = V_ipport_firstauto; /* sysctl */
|
||||
last = V_ipport_lastauto;
|
||||
lastport = &pcbinfo->ipi_lastport;
|
||||
}
|
||||
/*
|
||||
* For UDP, use random port allocation as long as the user
|
||||
* allows it. For TCP (and as of yet unknown) connections,
|
||||
* use random port allocation only if the user allows it AND
|
||||
* ipport_tick() allows it.
|
||||
*/
|
||||
if (V_ipport_randomized &&
|
||||
(!V_ipport_stoprandom || pcbinfo == &V_udbinfo))
|
||||
dorandom = 1;
|
||||
else
|
||||
dorandom = 0;
|
||||
/*
|
||||
* It makes no sense to do random port allocation if
|
||||
* we have the only port available.
|
||||
*/
|
||||
if (first == last)
|
||||
dorandom = 0;
|
||||
/* Make sure to not include UDP packets in the count. */
|
||||
if (pcbinfo != &V_udbinfo)
|
||||
V_ipport_tcpallocs++;
|
||||
/*
|
||||
* Instead of having two loops further down counting up or down
|
||||
* make sure that first is always <= last and go with only one
|
||||
* code path implementing all logic.
|
||||
*/
|
||||
if (first > last) {
|
||||
aux = first;
|
||||
first = last;
|
||||
last = aux;
|
||||
}
|
||||
|
||||
if (dorandom)
|
||||
*lastport = first +
|
||||
(arc4random() % (last - first));
|
||||
|
||||
count = last - first;
|
||||
|
||||
do {
|
||||
if (count-- < 0) /* completely used? */
|
||||
return (EADDRNOTAVAIL);
|
||||
++*lastport;
|
||||
if (*lastport < first || *lastport > last)
|
||||
*lastport = first;
|
||||
lport = htons(*lastport);
|
||||
} while (in_pcblookup_local(pcbinfo, laddr,
|
||||
lport, wild, cred));
|
||||
}
|
||||
*laddrp = laddr.s_addr;
|
||||
*lportp = lport;
|
||||
|
@ -491,6 +491,8 @@ void in_pcbinfo_init(struct inpcbinfo *, const char *, struct inpcbhead *,
|
||||
void in_pcbpurgeif0(struct inpcbinfo *, struct ifnet *);
|
||||
int in_pcballoc(struct socket *, struct inpcbinfo *);
|
||||
int in_pcbbind(struct inpcb *, struct sockaddr *, struct ucred *);
|
||||
int in_pcb_lport(struct inpcb *, struct in_addr *, u_short *,
|
||||
struct ucred *, int);
|
||||
int in_pcbbind_setup(struct inpcb *, struct sockaddr *, in_addr_t *,
|
||||
u_short *, struct ucred *);
|
||||
int in_pcbconnect(struct inpcb *, struct sockaddr *, struct ucred *);
|
||||
|
@ -256,8 +256,11 @@ in6_pcbbind(register struct inpcb *inp, struct sockaddr *nam,
|
||||
inp->in6p_laddr = sin6->sin6_addr;
|
||||
}
|
||||
if (lport == 0) {
|
||||
if ((error = in6_pcbsetport(&inp->in6p_laddr, inp, cred)) != 0)
|
||||
if ((error = in6_pcbsetport(&inp->in6p_laddr, inp, cred)) != 0) {
|
||||
/* Undo an address bind that may have occurred. */
|
||||
inp->in6p_laddr = in6addr_any;
|
||||
return (error);
|
||||
}
|
||||
} else {
|
||||
inp->inp_lport = lport;
|
||||
if (in_pcbinshash(inp) != 0) {
|
||||
|
@ -850,9 +850,11 @@ int
|
||||
in6_pcbsetport(struct in6_addr *laddr, struct inpcb *inp, struct ucred *cred)
|
||||
{
|
||||
struct socket *so = inp->inp_socket;
|
||||
u_int16_t lport = 0, first, last, *lastport;
|
||||
int count, error, wild = 0, dorandom;
|
||||
u_int16_t lport = 0;
|
||||
int error, wild = 0;
|
||||
#ifdef INVARIANTS
|
||||
struct inpcbinfo *pcbinfo = inp->inp_pcbinfo;
|
||||
#endif
|
||||
|
||||
INP_INFO_WLOCK_ASSERT(pcbinfo);
|
||||
INP_WLOCK_ASSERT(inp);
|
||||
@ -868,74 +870,9 @@ in6_pcbsetport(struct in6_addr *laddr, struct inpcb *inp, struct ucred *cred)
|
||||
|
||||
inp->inp_flags |= INP_ANONPORT;
|
||||
|
||||
if (inp->inp_flags & INP_HIGHPORT) {
|
||||
first = V_ipport_hifirstauto; /* sysctl */
|
||||
last = V_ipport_hilastauto;
|
||||
lastport = &pcbinfo->ipi_lasthi;
|
||||
} else if (inp->inp_flags & INP_LOWPORT) {
|
||||
error = priv_check_cred(cred, PRIV_NETINET_RESERVEDPORT, 0);
|
||||
if (error)
|
||||
return error;
|
||||
first = V_ipport_lowfirstauto; /* 1023 */
|
||||
last = V_ipport_lowlastauto; /* 600 */
|
||||
lastport = &pcbinfo->ipi_lastlow;
|
||||
} else {
|
||||
first = V_ipport_firstauto; /* sysctl */
|
||||
last = V_ipport_lastauto;
|
||||
lastport = &pcbinfo->ipi_lastport;
|
||||
}
|
||||
|
||||
/*
|
||||
* For UDP, use random port allocation as long as the user
|
||||
* allows it. For TCP (and as of yet unknown) connections,
|
||||
* use random port allocation only if the user allows it AND
|
||||
* ipport_tick() allows it.
|
||||
*/
|
||||
if (V_ipport_randomized &&
|
||||
(!V_ipport_stoprandom || pcbinfo == &V_udbinfo))
|
||||
dorandom = 1;
|
||||
else
|
||||
dorandom = 0;
|
||||
/*
|
||||
* It makes no sense to do random port allocation if
|
||||
* we have the only port available.
|
||||
*/
|
||||
if (first == last)
|
||||
dorandom = 0;
|
||||
/* Make sure to not include UDP packets in the count. */
|
||||
if (pcbinfo != &V_udbinfo)
|
||||
V_ipport_tcpallocs++;
|
||||
|
||||
/*
|
||||
* Instead of having two loops further down counting up or down
|
||||
* make sure that first is always <= last and go with only one
|
||||
* code path implementing all logic.
|
||||
*/
|
||||
if (first > last) {
|
||||
u_int16_t aux;
|
||||
|
||||
aux = first;
|
||||
first = last;
|
||||
last = aux;
|
||||
}
|
||||
|
||||
if (dorandom)
|
||||
*lastport = first + (arc4random() % (last - first));
|
||||
|
||||
count = last - first;
|
||||
|
||||
do {
|
||||
if (count-- < 0) { /* completely used? */
|
||||
/* Undo an address bind that may have occurred. */
|
||||
inp->in6p_laddr = in6addr_any;
|
||||
return (EADDRNOTAVAIL);
|
||||
}
|
||||
++*lastport;
|
||||
if (*lastport < first || *lastport > last)
|
||||
*lastport = first;
|
||||
lport = htons(*lastport);
|
||||
} while (in6_pcblookup_local(pcbinfo, &inp->in6p_laddr,
|
||||
lport, wild, cred));
|
||||
error = in_pcb_lport(inp, NULL, &lport, cred, wild);
|
||||
if (error != 0)
|
||||
return (error);
|
||||
|
||||
inp->inp_lport = lport;
|
||||
if (in_pcbinshash(inp) != 0) {
|
||||
|
@ -113,7 +113,7 @@ nd6_ns_input(struct mbuf *m, int off, int icmp6len)
|
||||
int anycast = 0, proxy = 0, tentative = 0;
|
||||
int tlladdr;
|
||||
union nd_opts ndopts;
|
||||
struct sockaddr_dl *proxydl = NULL;
|
||||
struct sockaddr_dl proxydl;
|
||||
char ip6bufs[INET6_ADDRSTRLEN], ip6bufd[INET6_ADDRSTRLEN];
|
||||
|
||||
#ifndef PULLDOWN_TEST
|
||||
@ -248,18 +248,25 @@ nd6_ns_input(struct mbuf *m, int off, int icmp6len)
|
||||
#endif
|
||||
need_proxy = (rt && (rt->rt_flags & RTF_ANNOUNCE) != 0 &&
|
||||
rt->rt_gateway->sa_family == AF_LINK);
|
||||
if (rt)
|
||||
if (rt != NULL) {
|
||||
/*
|
||||
* Make a copy while we can be sure that rt_gateway
|
||||
* is still stable before unlocking to avoid lock
|
||||
* order problems. proxydl will only be used if
|
||||
* proxy will be set in the next block.
|
||||
*/
|
||||
if (need_proxy)
|
||||
proxydl = *SDL(rt->rt_gateway);
|
||||
RTFREE_LOCKED(rt);
|
||||
}
|
||||
if (need_proxy) {
|
||||
/*
|
||||
* proxy NDP for single entry
|
||||
*/
|
||||
ifa = (struct ifaddr *)in6ifa_ifpforlinklocal(ifp,
|
||||
IN6_IFF_NOTREADY|IN6_IFF_ANYCAST);
|
||||
if (ifa) {
|
||||
if (ifa)
|
||||
proxy = 1;
|
||||
proxydl = SDL(rt->rt_gateway);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ifa == NULL) {
|
||||
@ -333,7 +340,7 @@ nd6_ns_input(struct mbuf *m, int off, int icmp6len)
|
||||
nd6_na_output(ifp, &in6_all, &taddr6,
|
||||
((anycast || proxy || !tlladdr) ? 0 : ND_NA_FLAG_OVERRIDE) |
|
||||
(V_ip6_forwarding ? ND_NA_FLAG_ROUTER : 0),
|
||||
tlladdr, (struct sockaddr *)proxydl);
|
||||
tlladdr, (struct sockaddr *)&proxydl);
|
||||
goto freeit;
|
||||
}
|
||||
|
||||
@ -343,7 +350,7 @@ nd6_ns_input(struct mbuf *m, int off, int icmp6len)
|
||||
nd6_na_output(ifp, &saddr6, &taddr6,
|
||||
((anycast || proxy || !tlladdr) ? 0 : ND_NA_FLAG_OVERRIDE) |
|
||||
(V_ip6_forwarding ? ND_NA_FLAG_ROUTER : 0) | ND_NA_FLAG_SOLICITED,
|
||||
tlladdr, (struct sockaddr *)proxydl);
|
||||
tlladdr, (struct sockaddr *)&proxydl);
|
||||
freeit:
|
||||
if (ifa != NULL)
|
||||
ifa_free(ifa);
|
||||
|
@ -656,8 +656,11 @@ udp6_output(struct inpcb *inp, struct mbuf *m, struct sockaddr *addr6,
|
||||
goto release;
|
||||
}
|
||||
if (inp->inp_lport == 0 &&
|
||||
(error = in6_pcbsetport(laddr, inp, td->td_ucred)) != 0)
|
||||
(error = in6_pcbsetport(laddr, inp, td->td_ucred)) != 0) {
|
||||
/* Undo an address bind that may have occurred. */
|
||||
inp->in6p_laddr = in6addr_any;
|
||||
goto release;
|
||||
}
|
||||
} else {
|
||||
if (IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_faddr)) {
|
||||
error = ENOTCONN;
|
||||
|
@ -1076,7 +1076,7 @@ cpu_est_clockrate(int cpu_id, uint64_t *rate)
|
||||
|
||||
if (pcpu_find(cpu_id) == NULL || rate == NULL)
|
||||
return (EINVAL);
|
||||
if (!tsc_present)
|
||||
if ((cpu_feature & CPUID_TSC) == 0)
|
||||
return (EOPNOTSUPP);
|
||||
|
||||
/* If we're booting, trust the rate calibrated moments ago. */
|
||||
|
@ -1177,7 +1177,7 @@ smu_gettime(device_t dev, struct timespec *ts)
|
||||
static int
|
||||
smu_settime(device_t dev, struct timespec *ts)
|
||||
{
|
||||
struct smu_cmd cmd;
|
||||
static struct smu_cmd cmd;
|
||||
struct clocktime ct;
|
||||
|
||||
cmd.cmd = SMU_RTC;
|
||||
@ -1194,7 +1194,7 @@ smu_settime(device_t dev, struct timespec *ts)
|
||||
cmd.data[6] = bin2bcd(ct.mon);
|
||||
cmd.data[7] = bin2bcd(ct.year - 2000);
|
||||
|
||||
return (smu_run_cmd(dev, &cmd, 1));
|
||||
return (smu_run_cmd(dev, &cmd, 0));
|
||||
}
|
||||
|
||||
/* SMU I2C Interface */
|
||||
|
@ -1,6 +1,5 @@
|
||||
/*-
|
||||
* Copyright (c) 1999, 2000 Matthew R. Green
|
||||
* Copyright (c) 2001 Thomas Moestl <tmm@FreeBSD.org>
|
||||
* Copyright (c) 2009 by Marius Strobl <marius@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
@ -27,7 +26,34 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* from: NetBSD: ebus.c,v 1.26 2001/09/10 16:27:53 eeh Exp
|
||||
* from: NetBSD: ebus.c,v 1.52 2008/05/29 14:51:26 mrg Exp
|
||||
*/
|
||||
/*-
|
||||
* Copyright (c) 2001 Thomas Moestl <tmm@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* $FreeBSD$ */
|
||||
/* $OpenBSD: ebusreg.h,v 1.4 2001/10/01 18:08:04 jason Exp $ */
|
||||
/* $NetBSD: ebusreg.h,v 1.1 1999/06/04 13:29:13 mrg Exp $ */
|
||||
/* $NetBSD: ebusreg.h,v 1.8 2008/05/29 14:51:27 mrg Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1999 Matthew R. Green
|
||||
@ -14,8 +14,6 @@
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
|
@ -26,7 +26,7 @@
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* From: $NetBSD: int_fmtio.h,v 1.2 2001/04/26 16:25:21 kleink Exp $
|
||||
* From: $NetBSD: int_fmtio.h,v 1.4 2008/04/28 20:23:36 martin Exp $
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
|
@ -14,13 +14,6 @@
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the NetBSD
|
||||
* Foundation, Inc. and its contributors.
|
||||
* 4. Neither the name of The NetBSD Foundation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
|
@ -14,13 +14,6 @@
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the NetBSD
|
||||
* Foundation, Inc. and its contributors.
|
||||
* 4. Neither the name of The NetBSD Foundation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
@ -65,7 +58,7 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* from: NetBSD: bus.h,v 1.28 2001/07/19 15:32:19 thorpej Exp
|
||||
* from: NetBSD: bus.h,v 1.58 2008/04/28 20:23:36 martin Exp
|
||||
* and
|
||||
* from: FreeBSD: src/sys/alpha/include/bus.h,v 1.9 2001/01/09
|
||||
*
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user