Merge svn+ssh://svn.freebsd.org/base/head@219680

This commit is contained in:
Marcel Moolenaar 2011-03-15 23:28:15 +00:00
commit 155438b4bd
135 changed files with 128538 additions and 1198 deletions

View File

@ -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

View File

@ -56,7 +56,6 @@
#ifdef _KERNEL
extern char btext[];
extern char etext[];
extern int tsc_present;
void cpu_halt(void);
void cpu_reset(void);

View File

@ -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

View File

@ -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 */

View File

@ -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_

View File

@ -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

View 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 */
};

View File

@ -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"

File diff suppressed because it is too large Load Diff

View File

@ -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;

View File

@ -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"

View File

@ -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, \

View File

@ -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

View File

@ -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)

View File

@ -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);

View File

@ -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);

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -8,4 +8,4 @@ sysmk="/dev/null"
syscallprefix="FREEBSD32_SYS_"
switchname="freebsd32_sysent"
namesname="freebsd32_syscallnames"
systrace="/dev/null"
systrace="freebsd32_systrace_args.c"

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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_ */

View File

@ -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;
}

View File

@ -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,

View File

@ -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

View File

@ -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;
}
/*

View File

@ -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;

View File

@ -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

View File

@ -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;
}

View File

@ -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
View 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
View 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

File diff suppressed because it is too large Load Diff

163
sys/dev/bxe/bxe_include.h Normal file
View 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
View 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 */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

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
View 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

File diff suppressed because it is too large Load Diff

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
View 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
View 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};

View 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

File diff suppressed because it is too large Load Diff

1853
sys/dev/bxe/if_bxe.h Normal file

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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. */

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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;

View File

@ -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

View 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 */
};

View File

@ -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>

File diff suppressed because it is too large Load Diff

View File

@ -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;

View File

@ -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"

View File

@ -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, \

View File

@ -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 {

View File

@ -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

View File

@ -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)

View File

@ -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 = {

View File

@ -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);
}

View File

@ -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
View 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>

View File

@ -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>

View File

@ -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>

View File

@ -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);

View 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>

View 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>

View File

@ -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 */

View File

@ -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;
}

View File

@ -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);

View File

@ -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);

View File

@ -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))

View File

@ -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++) {

View File

@ -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 */

View File

@ -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" \

View File

@ -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;

View File

@ -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 *);

View File

@ -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) {

View File

@ -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) {

View File

@ -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);

View File

@ -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;

View File

@ -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. */

View File

@ -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 */

View File

@ -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>

View File

@ -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

View File

@ -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$
*/

View File

@ -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

View File

@ -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