diff options
author | Steve French <sfrench@us.ibm.com> | 2006-01-17 22:49:59 -0500 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2006-01-17 22:49:59 -0500 |
commit | d65177c1ae7f085723154105c5dc8d9e16ae8265 (patch) | |
tree | 14408129d880d89cc5e937f2810f243ed1e6fcde /include | |
parent | d41f084a74de860fe879403fbbad13abdf7aea8e (diff) | |
parent | 15578eeb6cd4b74492f26e60624aa1a9a52ddd7b (diff) |
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'include')
197 files changed, 7851 insertions, 2928 deletions
diff --git a/include/asm-arm/arch-ixp2000/ixp2000-regs.h b/include/asm-arm/arch-ixp2000/ixp2000-regs.h index 8cf70ff160af..2b57f91b4ebd 100644 --- a/include/asm-arm/arch-ixp2000/ixp2000-regs.h +++ b/include/asm-arm/arch-ixp2000/ixp2000-regs.h | |||
@@ -26,6 +26,8 @@ | |||
26 | * fc000000 da000000 16M PCI CFG0 | 26 | * fc000000 da000000 16M PCI CFG0 |
27 | * fd000000 d8000000 16M PCI I/O | 27 | * fd000000 d8000000 16M PCI I/O |
28 | * fe[0-7]00000 8M per-platform mappings | 28 | * fe[0-7]00000 8M per-platform mappings |
29 | * fe900000 80000000 1M SRAM #0 (first MB) | ||
30 | * fea00000 cb400000 1M SCRATCH ring get/put | ||
29 | * feb00000 c8000000 1M MSF | 31 | * feb00000 c8000000 1M MSF |
30 | * fec00000 df000000 1M PCI CSRs | 32 | * fec00000 df000000 1M PCI CSRs |
31 | * fed00000 de000000 1M PCI CREG | 33 | * fed00000 de000000 1M PCI CREG |
@@ -91,6 +93,14 @@ | |||
91 | #define IXP2000_MSF_VIRT_BASE 0xfeb00000 | 93 | #define IXP2000_MSF_VIRT_BASE 0xfeb00000 |
92 | #define IXP2000_MSF_SIZE 0x00100000 | 94 | #define IXP2000_MSF_SIZE 0x00100000 |
93 | 95 | ||
96 | #define IXP2000_SCRATCH_RING_PHYS_BASE 0xcb400000 | ||
97 | #define IXP2000_SCRATCH_RING_VIRT_BASE 0xfea00000 | ||
98 | #define IXP2000_SCRATCH_RING_SIZE 0x00100000 | ||
99 | |||
100 | #define IXP2000_SRAM0_PHYS_BASE 0x80000000 | ||
101 | #define IXP2000_SRAM0_VIRT_BASE 0xfe900000 | ||
102 | #define IXP2000_SRAM0_SIZE 0x00100000 | ||
103 | |||
94 | #define IXP2000_PCI_IO_PHYS_BASE 0xd8000000 | 104 | #define IXP2000_PCI_IO_PHYS_BASE 0xd8000000 |
95 | #define IXP2000_PCI_IO_VIRT_BASE 0xfd000000 | 105 | #define IXP2000_PCI_IO_VIRT_BASE 0xfd000000 |
96 | #define IXP2000_PCI_IO_SIZE 0x01000000 | 106 | #define IXP2000_PCI_IO_SIZE 0x01000000 |
diff --git a/include/asm-arm/arch-versatile/entry-macro.S b/include/asm-arm/arch-versatile/entry-macro.S index 58f0d71759f6..feff771c0a0a 100644 --- a/include/asm-arm/arch-versatile/entry-macro.S +++ b/include/asm-arm/arch-versatile/entry-macro.S | |||
@@ -8,6 +8,7 @@ | |||
8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
9 | */ | 9 | */ |
10 | #include <asm/hardware.h> | 10 | #include <asm/hardware.h> |
11 | #include <asm/hardware/vic.h> | ||
11 | 12 | ||
12 | .macro disable_fiq | 13 | .macro disable_fiq |
13 | .endm | 14 | .endm |
diff --git a/include/asm-arm/arch-versatile/platform.h b/include/asm-arm/arch-versatile/platform.h index cbdd9fb96332..72ef874567d5 100644 --- a/include/asm-arm/arch-versatile/platform.h +++ b/include/asm-arm/arch-versatile/platform.h | |||
@@ -293,26 +293,7 @@ | |||
293 | * VERSATILE_SYS_IC | 293 | * VERSATILE_SYS_IC |
294 | * | 294 | * |
295 | */ | 295 | */ |
296 | #define VIC_IRQ_STATUS 0 | 296 | /* VIC definitions in include/asm-arm/hardware/vic.h */ |
297 | #define VIC_FIQ_STATUS 0x04 | ||
298 | #define VIC_IRQ_RAW_STATUS 0x08 | ||
299 | #define VIC_INT_SELECT 0x0C /* 1 = FIQ, 0 = IRQ */ | ||
300 | #define VIC_IRQ_ENABLE 0x10 /* 1 = enable, 0 = disable */ | ||
301 | #define VIC_IRQ_ENABLE_CLEAR 0x14 | ||
302 | #define VIC_IRQ_SOFT 0x18 | ||
303 | #define VIC_IRQ_SOFT_CLEAR 0x1C | ||
304 | #define VIC_PROTECT 0x20 | ||
305 | #define VIC_VECT_ADDR 0x30 | ||
306 | #define VIC_DEF_VECT_ADDR 0x34 | ||
307 | #define VIC_VECT_ADDR0 0x100 /* 0 to 15 */ | ||
308 | #define VIC_VECT_CNTL0 0x200 /* 0 to 15 */ | ||
309 | #define VIC_ITCR 0x300 /* VIC test control register */ | ||
310 | |||
311 | #define VIC_FIQ_RAW_STATUS 0x08 | ||
312 | #define VIC_FIQ_ENABLE 0x10 /* 1 = enable, 0 = disable */ | ||
313 | #define VIC_FIQ_ENABLE_CLEAR 0x14 | ||
314 | #define VIC_FIQ_SOFT 0x18 | ||
315 | #define VIC_FIQ_SOFT_CLEAR 0x1C | ||
316 | 297 | ||
317 | #define SIC_IRQ_STATUS 0 | 298 | #define SIC_IRQ_STATUS 0 |
318 | #define SIC_IRQ_RAW_STATUS 0x04 | 299 | #define SIC_IRQ_RAW_STATUS 0x04 |
@@ -325,8 +306,6 @@ | |||
325 | #define SIC_INT_PIC_ENABLES 0x20 /* set interrupt pass through bits */ | 306 | #define SIC_INT_PIC_ENABLES 0x20 /* set interrupt pass through bits */ |
326 | #define SIC_INT_PIC_ENABLEC 0x24 /* Clear interrupt pass through bits */ | 307 | #define SIC_INT_PIC_ENABLEC 0x24 /* Clear interrupt pass through bits */ |
327 | 308 | ||
328 | #define VICVectCntl_Enable (1 << 5) | ||
329 | |||
330 | /* ------------------------------------------------------------------------ | 309 | /* ------------------------------------------------------------------------ |
331 | * Interrupts - bit assignment (primary) | 310 | * Interrupts - bit assignment (primary) |
332 | * ------------------------------------------------------------------------ | 311 | * ------------------------------------------------------------------------ |
diff --git a/include/asm-arm/hardware/vic.h b/include/asm-arm/hardware/vic.h new file mode 100644 index 000000000000..81825eb54c9e --- /dev/null +++ b/include/asm-arm/hardware/vic.h | |||
@@ -0,0 +1,45 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/vic.h | ||
3 | * | ||
4 | * Copyright (c) ARM Limited 2003. All rights reserved. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #ifndef __ASM_ARM_HARDWARE_VIC_H | ||
21 | #define __ASM_ARM_HARDWARE_VIC_H | ||
22 | |||
23 | #define VIC_IRQ_STATUS 0x00 | ||
24 | #define VIC_FIQ_STATUS 0x04 | ||
25 | #define VIC_RAW_STATUS 0x08 | ||
26 | #define VIC_INT_SELECT 0x0c /* 1 = FIQ, 0 = IRQ */ | ||
27 | #define VIC_INT_ENABLE 0x10 /* 1 = enable, 0 = disable */ | ||
28 | #define VIC_INT_ENABLE_CLEAR 0x14 | ||
29 | #define VIC_INT_SOFT 0x18 | ||
30 | #define VIC_INT_SOFT_CLEAR 0x1c | ||
31 | #define VIC_PROTECT 0x20 | ||
32 | #define VIC_VECT_ADDR 0x30 | ||
33 | #define VIC_DEF_VECT_ADDR 0x34 | ||
34 | |||
35 | #define VIC_VECT_ADDR0 0x100 /* 0 to 15 */ | ||
36 | #define VIC_VECT_CNTL0 0x200 /* 0 to 15 */ | ||
37 | #define VIC_ITCR 0x300 /* VIC test control register */ | ||
38 | |||
39 | #define VIC_VECT_CNTL_ENABLE (1 << 5) | ||
40 | |||
41 | #ifndef __ASSEMBLY__ | ||
42 | void vic_init(void __iomem *base, u32 vic_sources); | ||
43 | #endif | ||
44 | |||
45 | #endif | ||
diff --git a/include/asm-arm/mach/arch.h b/include/asm-arm/mach/arch.h index eb262e078c46..2cd57b4d64d9 100644 --- a/include/asm-arm/mach/arch.h +++ b/include/asm-arm/mach/arch.h | |||
@@ -10,6 +10,8 @@ | |||
10 | 10 | ||
11 | #ifndef __ASSEMBLY__ | 11 | #ifndef __ASSEMBLY__ |
12 | 12 | ||
13 | #include <linux/compiler.h> | ||
14 | |||
13 | struct tag; | 15 | struct tag; |
14 | struct meminfo; | 16 | struct meminfo; |
15 | struct sys_timer; | 17 | struct sys_timer; |
@@ -20,7 +22,7 @@ struct machine_desc { | |||
20 | * by assembler code in head-armv.S | 22 | * by assembler code in head-armv.S |
21 | */ | 23 | */ |
22 | unsigned int nr; /* architecture number */ | 24 | unsigned int nr; /* architecture number */ |
23 | unsigned int phys_ram; /* start of physical ram */ | 25 | unsigned int __deprecated phys_ram; /* start of physical ram */ |
24 | unsigned int phys_io; /* start of physical io */ | 26 | unsigned int phys_io; /* start of physical io */ |
25 | unsigned int io_pg_offst; /* byte offset for io | 27 | unsigned int io_pg_offst; /* byte offset for io |
26 | * page tabe entry */ | 28 | * page tabe entry */ |
diff --git a/include/asm-arm/page.h b/include/asm-arm/page.h index 4da1d532cbeb..416320d95419 100644 --- a/include/asm-arm/page.h +++ b/include/asm-arm/page.h | |||
@@ -170,6 +170,13 @@ extern pmd_t *top_pmd; | |||
170 | #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ | 170 | #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ |
171 | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) | 171 | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) |
172 | 172 | ||
173 | /* | ||
174 | * With EABI on ARMv5 and above we must have 64-bit aligned slab pointers. | ||
175 | */ | ||
176 | #if defined(CONFIG_AEABI) && (__LINUX_ARM_ARCH__ >= 5) | ||
177 | #define ARCH_SLAB_MINALIGN 8 | ||
178 | #endif | ||
179 | |||
173 | #endif /* __KERNEL__ */ | 180 | #endif /* __KERNEL__ */ |
174 | 181 | ||
175 | #include <asm-generic/page.h> | 182 | #include <asm-generic/page.h> |
diff --git a/include/asm-arm/processor.h b/include/asm-arm/processor.h index 31290694648b..04f4d34c6317 100644 --- a/include/asm-arm/processor.h +++ b/include/asm-arm/processor.h | |||
@@ -49,6 +49,12 @@ struct thread_struct { | |||
49 | 49 | ||
50 | #define INIT_THREAD { } | 50 | #define INIT_THREAD { } |
51 | 51 | ||
52 | #ifdef CONFIG_MMU | ||
53 | #define nommu_start_thread(regs) do { } while (0) | ||
54 | #else | ||
55 | #define nommu_start_thread(regs) regs->ARM_r10 = current->mm->start_data | ||
56 | #endif | ||
57 | |||
52 | #define start_thread(regs,pc,sp) \ | 58 | #define start_thread(regs,pc,sp) \ |
53 | ({ \ | 59 | ({ \ |
54 | unsigned long *stack = (unsigned long *)sp; \ | 60 | unsigned long *stack = (unsigned long *)sp; \ |
@@ -65,6 +71,7 @@ struct thread_struct { | |||
65 | regs->ARM_r2 = stack[2]; /* r2 (envp) */ \ | 71 | regs->ARM_r2 = stack[2]; /* r2 (envp) */ \ |
66 | regs->ARM_r1 = stack[1]; /* r1 (argv) */ \ | 72 | regs->ARM_r1 = stack[1]; /* r1 (argv) */ \ |
67 | regs->ARM_r0 = stack[0]; /* r0 (argc) */ \ | 73 | regs->ARM_r0 = stack[0]; /* r0 (argc) */ \ |
74 | nommu_start_thread(regs); \ | ||
68 | }) | 75 | }) |
69 | 76 | ||
70 | /* Forward declaration, a strange C thing */ | 77 | /* Forward declaration, a strange C thing */ |
diff --git a/include/asm-arm/ptrace.h b/include/asm-arm/ptrace.h index 4377e22b7e1a..77adb7fa169b 100644 --- a/include/asm-arm/ptrace.h +++ b/include/asm-arm/ptrace.h | |||
@@ -23,6 +23,9 @@ | |||
23 | #define PTRACE_OLDSETOPTIONS 21 | 23 | #define PTRACE_OLDSETOPTIONS 21 |
24 | 24 | ||
25 | #define PTRACE_GET_THREAD_AREA 22 | 25 | #define PTRACE_GET_THREAD_AREA 22 |
26 | |||
27 | #define PTRACE_SET_SYSCALL 23 | ||
28 | |||
26 | /* | 29 | /* |
27 | * PSR bits | 30 | * PSR bits |
28 | */ | 31 | */ |
@@ -60,9 +63,11 @@ | |||
60 | 63 | ||
61 | #ifndef __ASSEMBLY__ | 64 | #ifndef __ASSEMBLY__ |
62 | 65 | ||
63 | /* this struct defines the way the registers are stored on the | 66 | /* |
64 | stack during a system call. */ | 67 | * This struct defines the way the registers are stored on the |
65 | 68 | * stack during a system call. Note that sizeof(struct pt_regs) | |
69 | * has to be a multiple of 8. | ||
70 | */ | ||
66 | struct pt_regs { | 71 | struct pt_regs { |
67 | long uregs[18]; | 72 | long uregs[18]; |
68 | }; | 73 | }; |
diff --git a/include/asm-arm/stat.h b/include/asm-arm/stat.h index ec4e2c2e3b47..42c0c13999d5 100644 --- a/include/asm-arm/stat.h +++ b/include/asm-arm/stat.h | |||
@@ -70,14 +70,7 @@ struct stat64 { | |||
70 | 70 | ||
71 | long long st_size; | 71 | long long st_size; |
72 | unsigned long st_blksize; | 72 | unsigned long st_blksize; |
73 | 73 | unsigned long long st_blocks; /* Number 512-byte blocks allocated. */ | |
74 | #if defined(__ARMEB__) | ||
75 | unsigned long __pad4; /* Future possible st_blocks hi bits */ | ||
76 | unsigned long st_blocks; /* Number 512-byte blocks allocated. */ | ||
77 | #else /* Must be little */ | ||
78 | unsigned long st_blocks; /* Number 512-byte blocks allocated. */ | ||
79 | unsigned long __pad4; /* Future possible st_blocks hi bits */ | ||
80 | #endif | ||
81 | 74 | ||
82 | unsigned long st_atime; | 75 | unsigned long st_atime; |
83 | unsigned long st_atime_nsec; | 76 | unsigned long st_atime_nsec; |
@@ -89,6 +82,6 @@ struct stat64 { | |||
89 | unsigned long st_ctime_nsec; | 82 | unsigned long st_ctime_nsec; |
90 | 83 | ||
91 | unsigned long long st_ino; | 84 | unsigned long long st_ino; |
92 | } __attribute__((packed)); | 85 | }; |
93 | 86 | ||
94 | #endif | 87 | #endif |
diff --git a/include/asm-arm/statfs.h b/include/asm-arm/statfs.h index e81f82783b87..a02e6a8c3d70 100644 --- a/include/asm-arm/statfs.h +++ b/include/asm-arm/statfs.h | |||
@@ -1,6 +1,42 @@ | |||
1 | #ifndef _ASMARM_STATFS_H | 1 | #ifndef _ASMARM_STATFS_H |
2 | #define _ASMARM_STATFS_H | 2 | #define _ASMARM_STATFS_H |
3 | 3 | ||
4 | #include <asm-generic/statfs.h> | 4 | #ifndef __KERNEL_STRICT_NAMES |
5 | # include <linux/types.h> | ||
6 | typedef __kernel_fsid_t fsid_t; | ||
7 | #endif | ||
8 | |||
9 | struct statfs { | ||
10 | __u32 f_type; | ||
11 | __u32 f_bsize; | ||
12 | __u32 f_blocks; | ||
13 | __u32 f_bfree; | ||
14 | __u32 f_bavail; | ||
15 | __u32 f_files; | ||
16 | __u32 f_ffree; | ||
17 | __kernel_fsid_t f_fsid; | ||
18 | __u32 f_namelen; | ||
19 | __u32 f_frsize; | ||
20 | __u32 f_spare[5]; | ||
21 | }; | ||
22 | |||
23 | /* | ||
24 | * With EABI there is 4 bytes of padding added to this structure. | ||
25 | * Let's pack it so the padding goes away to simplify dual ABI support. | ||
26 | * Note that user space does NOT have to pack this structure. | ||
27 | */ | ||
28 | struct statfs64 { | ||
29 | __u32 f_type; | ||
30 | __u32 f_bsize; | ||
31 | __u64 f_blocks; | ||
32 | __u64 f_bfree; | ||
33 | __u64 f_bavail; | ||
34 | __u64 f_files; | ||
35 | __u64 f_ffree; | ||
36 | __kernel_fsid_t f_fsid; | ||
37 | __u32 f_namelen; | ||
38 | __u32 f_frsize; | ||
39 | __u32 f_spare[5]; | ||
40 | } __attribute__ ((packed,aligned(4))); | ||
5 | 41 | ||
6 | #endif | 42 | #endif |
diff --git a/include/asm-arm/unistd.h b/include/asm-arm/unistd.h index d626e70faded..77430d6178ae 100644 --- a/include/asm-arm/unistd.h +++ b/include/asm-arm/unistd.h | |||
@@ -15,10 +15,12 @@ | |||
15 | 15 | ||
16 | #include <linux/linkage.h> | 16 | #include <linux/linkage.h> |
17 | 17 | ||
18 | #if defined(__thumb__) | 18 | #define __NR_OABI_SYSCALL_BASE 0x900000 |
19 | |||
20 | #if defined(__thumb__) || defined(__ARM_EABI__) | ||
19 | #define __NR_SYSCALL_BASE 0 | 21 | #define __NR_SYSCALL_BASE 0 |
20 | #else | 22 | #else |
21 | #define __NR_SYSCALL_BASE 0x900000 | 23 | #define __NR_SYSCALL_BASE __NR_OABI_SYSCALL_BASE |
22 | #endif | 24 | #endif |
23 | 25 | ||
24 | /* | 26 | /* |
@@ -373,13 +375,13 @@ | |||
373 | #define __sys1(x) __sys2(x) | 375 | #define __sys1(x) __sys2(x) |
374 | 376 | ||
375 | #ifndef __syscall | 377 | #ifndef __syscall |
376 | #if defined(__thumb__) | 378 | #if defined(__thumb__) || defined(__ARM_EABI__) |
377 | #define __syscall(name) \ | 379 | #define __SYS_REG(name) register long __sysreg __asm__("r7") = __NR_##name; |
378 | "push {r7}\n\t" \ | 380 | #define __SYS_REG_LIST(regs...) "r" (__sysreg) , ##regs |
379 | "mov r7, #" __sys1(__NR_##name) "\n\t" \ | 381 | #define __syscall(name) "swi\t0" |
380 | "swi 0\n\t" \ | ||
381 | "pop {r7}" | ||
382 | #else | 382 | #else |
383 | #define __SYS_REG(name) | ||
384 | #define __SYS_REG_LIST(regs...) regs | ||
383 | #define __syscall(name) "swi\t" __sys1(__NR_##name) "" | 385 | #define __syscall(name) "swi\t" __sys1(__NR_##name) "" |
384 | #endif | 386 | #endif |
385 | #endif | 387 | #endif |
@@ -395,33 +397,34 @@ do { \ | |||
395 | 397 | ||
396 | #define _syscall0(type,name) \ | 398 | #define _syscall0(type,name) \ |
397 | type name(void) { \ | 399 | type name(void) { \ |
400 | __SYS_REG(name) \ | ||
398 | register long __res_r0 __asm__("r0"); \ | 401 | register long __res_r0 __asm__("r0"); \ |
399 | long __res; \ | 402 | long __res; \ |
400 | __asm__ __volatile__ ( \ | 403 | __asm__ __volatile__ ( \ |
401 | __syscall(name) \ | 404 | __syscall(name) \ |
402 | : "=r" (__res_r0) \ | 405 | : "=r" (__res_r0) \ |
403 | : \ | 406 | : __SYS_REG_LIST() ); \ |
404 | : "lr"); \ | ||
405 | __res = __res_r0; \ | 407 | __res = __res_r0; \ |
406 | __syscall_return(type,__res); \ | 408 | __syscall_return(type,__res); \ |
407 | } | 409 | } |
408 | 410 | ||
409 | #define _syscall1(type,name,type1,arg1) \ | 411 | #define _syscall1(type,name,type1,arg1) \ |
410 | type name(type1 arg1) { \ | 412 | type name(type1 arg1) { \ |
413 | __SYS_REG(name) \ | ||
411 | register long __r0 __asm__("r0") = (long)arg1; \ | 414 | register long __r0 __asm__("r0") = (long)arg1; \ |
412 | register long __res_r0 __asm__("r0"); \ | 415 | register long __res_r0 __asm__("r0"); \ |
413 | long __res; \ | 416 | long __res; \ |
414 | __asm__ __volatile__ ( \ | 417 | __asm__ __volatile__ ( \ |
415 | __syscall(name) \ | 418 | __syscall(name) \ |
416 | : "=r" (__res_r0) \ | 419 | : "=r" (__res_r0) \ |
417 | : "r" (__r0) \ | 420 | : __SYS_REG_LIST( "0" (__r0) ) ); \ |
418 | : "lr"); \ | ||
419 | __res = __res_r0; \ | 421 | __res = __res_r0; \ |
420 | __syscall_return(type,__res); \ | 422 | __syscall_return(type,__res); \ |
421 | } | 423 | } |
422 | 424 | ||
423 | #define _syscall2(type,name,type1,arg1,type2,arg2) \ | 425 | #define _syscall2(type,name,type1,arg1,type2,arg2) \ |
424 | type name(type1 arg1,type2 arg2) { \ | 426 | type name(type1 arg1,type2 arg2) { \ |
427 | __SYS_REG(name) \ | ||
425 | register long __r0 __asm__("r0") = (long)arg1; \ | 428 | register long __r0 __asm__("r0") = (long)arg1; \ |
426 | register long __r1 __asm__("r1") = (long)arg2; \ | 429 | register long __r1 __asm__("r1") = (long)arg2; \ |
427 | register long __res_r0 __asm__("r0"); \ | 430 | register long __res_r0 __asm__("r0"); \ |
@@ -429,8 +432,7 @@ type name(type1 arg1,type2 arg2) { \ | |||
429 | __asm__ __volatile__ ( \ | 432 | __asm__ __volatile__ ( \ |
430 | __syscall(name) \ | 433 | __syscall(name) \ |
431 | : "=r" (__res_r0) \ | 434 | : "=r" (__res_r0) \ |
432 | : "r" (__r0),"r" (__r1) \ | 435 | : __SYS_REG_LIST( "0" (__r0), "r" (__r1) ) ); \ |
433 | : "lr"); \ | ||
434 | __res = __res_r0; \ | 436 | __res = __res_r0; \ |
435 | __syscall_return(type,__res); \ | 437 | __syscall_return(type,__res); \ |
436 | } | 438 | } |
@@ -438,6 +440,7 @@ type name(type1 arg1,type2 arg2) { \ | |||
438 | 440 | ||
439 | #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | 441 | #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ |
440 | type name(type1 arg1,type2 arg2,type3 arg3) { \ | 442 | type name(type1 arg1,type2 arg2,type3 arg3) { \ |
443 | __SYS_REG(name) \ | ||
441 | register long __r0 __asm__("r0") = (long)arg1; \ | 444 | register long __r0 __asm__("r0") = (long)arg1; \ |
442 | register long __r1 __asm__("r1") = (long)arg2; \ | 445 | register long __r1 __asm__("r1") = (long)arg2; \ |
443 | register long __r2 __asm__("r2") = (long)arg3; \ | 446 | register long __r2 __asm__("r2") = (long)arg3; \ |
@@ -446,8 +449,7 @@ type name(type1 arg1,type2 arg2,type3 arg3) { \ | |||
446 | __asm__ __volatile__ ( \ | 449 | __asm__ __volatile__ ( \ |
447 | __syscall(name) \ | 450 | __syscall(name) \ |
448 | : "=r" (__res_r0) \ | 451 | : "=r" (__res_r0) \ |
449 | : "r" (__r0),"r" (__r1),"r" (__r2) \ | 452 | : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2) ) ); \ |
450 | : "lr"); \ | ||
451 | __res = __res_r0; \ | 453 | __res = __res_r0; \ |
452 | __syscall_return(type,__res); \ | 454 | __syscall_return(type,__res); \ |
453 | } | 455 | } |
@@ -455,6 +457,7 @@ type name(type1 arg1,type2 arg2,type3 arg3) { \ | |||
455 | 457 | ||
456 | #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)\ | 458 | #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)\ |
457 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ | 459 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ |
460 | __SYS_REG(name) \ | ||
458 | register long __r0 __asm__("r0") = (long)arg1; \ | 461 | register long __r0 __asm__("r0") = (long)arg1; \ |
459 | register long __r1 __asm__("r1") = (long)arg2; \ | 462 | register long __r1 __asm__("r1") = (long)arg2; \ |
460 | register long __r2 __asm__("r2") = (long)arg3; \ | 463 | register long __r2 __asm__("r2") = (long)arg3; \ |
@@ -464,8 +467,7 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ | |||
464 | __asm__ __volatile__ ( \ | 467 | __asm__ __volatile__ ( \ |
465 | __syscall(name) \ | 468 | __syscall(name) \ |
466 | : "=r" (__res_r0) \ | 469 | : "=r" (__res_r0) \ |
467 | : "r" (__r0),"r" (__r1),"r" (__r2),"r" (__r3) \ | 470 | : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), "r" (__r3) ) ); \ |
468 | : "lr"); \ | ||
469 | __res = __res_r0; \ | 471 | __res = __res_r0; \ |
470 | __syscall_return(type,__res); \ | 472 | __syscall_return(type,__res); \ |
471 | } | 473 | } |
@@ -473,6 +475,7 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ | |||
473 | 475 | ||
474 | #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ | 476 | #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ |
475 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) { \ | 477 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) { \ |
478 | __SYS_REG(name) \ | ||
476 | register long __r0 __asm__("r0") = (long)arg1; \ | 479 | register long __r0 __asm__("r0") = (long)arg1; \ |
477 | register long __r1 __asm__("r1") = (long)arg2; \ | 480 | register long __r1 __asm__("r1") = (long)arg2; \ |
478 | register long __r2 __asm__("r2") = (long)arg3; \ | 481 | register long __r2 __asm__("r2") = (long)arg3; \ |
@@ -483,14 +486,15 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) { \ | |||
483 | __asm__ __volatile__ ( \ | 486 | __asm__ __volatile__ ( \ |
484 | __syscall(name) \ | 487 | __syscall(name) \ |
485 | : "=r" (__res_r0) \ | 488 | : "=r" (__res_r0) \ |
486 | : "r" (__r0),"r" (__r1),"r" (__r2),"r" (__r3),"r" (__r4) \ | 489 | : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), \ |
487 | : "lr"); \ | 490 | "r" (__r3), "r" (__r4) ) ); \ |
488 | __res = __res_r0; \ | 491 | __res = __res_r0; \ |
489 | __syscall_return(type,__res); \ | 492 | __syscall_return(type,__res); \ |
490 | } | 493 | } |
491 | 494 | ||
492 | #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \ | 495 | #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \ |
493 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) { \ | 496 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) { \ |
497 | __SYS_REG(name) \ | ||
494 | register long __r0 __asm__("r0") = (long)arg1; \ | 498 | register long __r0 __asm__("r0") = (long)arg1; \ |
495 | register long __r1 __asm__("r1") = (long)arg2; \ | 499 | register long __r1 __asm__("r1") = (long)arg2; \ |
496 | register long __r2 __asm__("r2") = (long)arg3; \ | 500 | register long __r2 __asm__("r2") = (long)arg3; \ |
@@ -502,30 +506,33 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6 | |||
502 | __asm__ __volatile__ ( \ | 506 | __asm__ __volatile__ ( \ |
503 | __syscall(name) \ | 507 | __syscall(name) \ |
504 | : "=r" (__res_r0) \ | 508 | : "=r" (__res_r0) \ |
505 | : "r" (__r0),"r" (__r1),"r" (__r2),"r" (__r3), "r" (__r4),"r" (__r5) \ | 509 | : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), \ |
506 | : "lr"); \ | 510 | "r" (__r3), "r" (__r4), "r" (__r5) ) ); \ |
507 | __res = __res_r0; \ | 511 | __res = __res_r0; \ |
508 | __syscall_return(type,__res); \ | 512 | __syscall_return(type,__res); \ |
509 | } | 513 | } |
510 | 514 | ||
511 | #ifdef __KERNEL__ | 515 | #ifdef __KERNEL__ |
512 | #define __ARCH_WANT_IPC_PARSE_VERSION | 516 | #define __ARCH_WANT_IPC_PARSE_VERSION |
513 | #define __ARCH_WANT_OLD_READDIR | ||
514 | #define __ARCH_WANT_STAT64 | 517 | #define __ARCH_WANT_STAT64 |
515 | #define __ARCH_WANT_SYS_ALARM | ||
516 | #define __ARCH_WANT_SYS_GETHOSTNAME | 518 | #define __ARCH_WANT_SYS_GETHOSTNAME |
517 | #define __ARCH_WANT_SYS_PAUSE | 519 | #define __ARCH_WANT_SYS_PAUSE |
518 | #define __ARCH_WANT_SYS_TIME | ||
519 | #define __ARCH_WANT_SYS_UTIME | ||
520 | #define __ARCH_WANT_SYS_SOCKETCALL | ||
521 | #define __ARCH_WANT_SYS_GETPGRP | 520 | #define __ARCH_WANT_SYS_GETPGRP |
522 | #define __ARCH_WANT_SYS_LLSEEK | 521 | #define __ARCH_WANT_SYS_LLSEEK |
523 | #define __ARCH_WANT_SYS_NICE | 522 | #define __ARCH_WANT_SYS_NICE |
524 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT | ||
525 | #define __ARCH_WANT_SYS_OLDUMOUNT | ||
526 | #define __ARCH_WANT_SYS_SIGPENDING | 523 | #define __ARCH_WANT_SYS_SIGPENDING |
527 | #define __ARCH_WANT_SYS_SIGPROCMASK | 524 | #define __ARCH_WANT_SYS_SIGPROCMASK |
528 | #define __ARCH_WANT_SYS_RT_SIGACTION | 525 | #define __ARCH_WANT_SYS_RT_SIGACTION |
526 | |||
527 | #if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT) | ||
528 | #define __ARCH_WANT_SYS_TIME | ||
529 | #define __ARCH_WANT_SYS_OLDUMOUNT | ||
530 | #define __ARCH_WANT_SYS_ALARM | ||
531 | #define __ARCH_WANT_SYS_UTIME | ||
532 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT | ||
533 | #define __ARCH_WANT_OLD_READDIR | ||
534 | #define __ARCH_WANT_SYS_SOCKETCALL | ||
535 | #endif | ||
529 | #endif | 536 | #endif |
530 | 537 | ||
531 | #ifdef __KERNEL_SYSCALLS__ | 538 | #ifdef __KERNEL_SYSCALLS__ |
diff --git a/include/asm-arm26/cache.h b/include/asm-arm26/cache.h index f52ca1b808cd..8c3abcf728fe 100644 --- a/include/asm-arm26/cache.h +++ b/include/asm-arm26/cache.h | |||
@@ -4,7 +4,8 @@ | |||
4 | #ifndef __ASMARM_CACHE_H | 4 | #ifndef __ASMARM_CACHE_H |
5 | #define __ASMARM_CACHE_H | 5 | #define __ASMARM_CACHE_H |
6 | 6 | ||
7 | #define L1_CACHE_BYTES 32 | 7 | #define L1_CACHE_SHIFT 5 |
8 | #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) | ||
8 | #define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1)) | 9 | #define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1)) |
9 | #define SMP_CACHE_BYTES L1_CACHE_BYTES | 10 | #define SMP_CACHE_BYTES L1_CACHE_BYTES |
10 | 11 | ||
diff --git a/include/asm-arm26/thread_info.h b/include/asm-arm26/thread_info.h index a65e58a0a767..9b367ebe515d 100644 --- a/include/asm-arm26/thread_info.h +++ b/include/asm-arm26/thread_info.h | |||
@@ -80,8 +80,7 @@ static inline struct thread_info *current_thread_info(void) | |||
80 | return (struct thread_info *)(sp & ~0x1fff); | 80 | return (struct thread_info *)(sp & ~0x1fff); |
81 | } | 81 | } |
82 | 82 | ||
83 | /* FIXME - PAGE_SIZE < 32K */ | 83 | #define THREAD_SIZE PAGE_SIZE |
84 | #define THREAD_SIZE (8*32768) // FIXME - this needs attention (see kernel/fork.c which gets a nice div by zero if this is lower than 8*32768 | ||
85 | #define task_pt_regs(task) ((struct pt_regs *)(task_stack_page(task) + THREAD_SIZE - 8) - 1) | 84 | #define task_pt_regs(task) ((struct pt_regs *)(task_stack_page(task) + THREAD_SIZE - 8) - 1) |
86 | 85 | ||
87 | extern struct thread_info *alloc_thread_info(struct task_struct *task); | 86 | extern struct thread_info *alloc_thread_info(struct task_struct *task); |
diff --git a/include/asm-generic/atomic.h b/include/asm-generic/atomic.h index 0fada8f16dc6..42a95d9a0641 100644 --- a/include/asm-generic/atomic.h +++ b/include/asm-generic/atomic.h | |||
@@ -35,7 +35,7 @@ static inline void atomic_long_set(atomic_long_t *l, long i) | |||
35 | { | 35 | { |
36 | atomic64_t *v = (atomic64_t *)l; | 36 | atomic64_t *v = (atomic64_t *)l; |
37 | 37 | ||
38 | atomic_set(v, i); | 38 | atomic64_set(v, i); |
39 | } | 39 | } |
40 | 40 | ||
41 | static inline void atomic_long_inc(atomic_long_t *l) | 41 | static inline void atomic_long_inc(atomic_long_t *l) |
diff --git a/include/asm-i386/bitops.h b/include/asm-i386/bitops.h index fe0819fe9c64..88e6ca248cd7 100644 --- a/include/asm-i386/bitops.h +++ b/include/asm-i386/bitops.h | |||
@@ -247,7 +247,7 @@ static inline int test_and_change_bit(int nr, volatile unsigned long* addr) | |||
247 | static int test_bit(int nr, const volatile void * addr); | 247 | static int test_bit(int nr, const volatile void * addr); |
248 | #endif | 248 | #endif |
249 | 249 | ||
250 | static inline int constant_test_bit(int nr, const volatile unsigned long *addr) | 250 | static __always_inline int constant_test_bit(int nr, const volatile unsigned long *addr) |
251 | { | 251 | { |
252 | return ((1UL << (nr & 31)) & (addr[nr >> 5])) != 0; | 252 | return ((1UL << (nr & 31)) & (addr[nr >> 5])) != 0; |
253 | } | 253 | } |
diff --git a/include/asm-i386/current.h b/include/asm-i386/current.h index d97328951f5f..3cbbecd79016 100644 --- a/include/asm-i386/current.h +++ b/include/asm-i386/current.h | |||
@@ -5,7 +5,7 @@ | |||
5 | 5 | ||
6 | struct task_struct; | 6 | struct task_struct; |
7 | 7 | ||
8 | static inline struct task_struct * get_current(void) | 8 | static __always_inline struct task_struct * get_current(void) |
9 | { | 9 | { |
10 | return current_thread_info()->task; | 10 | return current_thread_info()->task; |
11 | } | 11 | } |
diff --git a/include/asm-i386/string.h b/include/asm-i386/string.h index 02c8f5d22065..bb5f88a27f7a 100644 --- a/include/asm-i386/string.h +++ b/include/asm-i386/string.h | |||
@@ -201,7 +201,7 @@ __asm__ __volatile__( | |||
201 | return __res; | 201 | return __res; |
202 | } | 202 | } |
203 | 203 | ||
204 | static inline void * __memcpy(void * to, const void * from, size_t n) | 204 | static __always_inline void * __memcpy(void * to, const void * from, size_t n) |
205 | { | 205 | { |
206 | int d0, d1, d2; | 206 | int d0, d1, d2; |
207 | __asm__ __volatile__( | 207 | __asm__ __volatile__( |
@@ -223,7 +223,7 @@ return (to); | |||
223 | * This looks ugly, but the compiler can optimize it totally, | 223 | * This looks ugly, but the compiler can optimize it totally, |
224 | * as the count is constant. | 224 | * as the count is constant. |
225 | */ | 225 | */ |
226 | static inline void * __constant_memcpy(void * to, const void * from, size_t n) | 226 | static __always_inline void * __constant_memcpy(void * to, const void * from, size_t n) |
227 | { | 227 | { |
228 | long esi, edi; | 228 | long esi, edi; |
229 | if (!n) return to; | 229 | if (!n) return to; |
@@ -367,7 +367,7 @@ return s; | |||
367 | * things 32 bits at a time even when we don't know the size of the | 367 | * things 32 bits at a time even when we don't know the size of the |
368 | * area at compile-time.. | 368 | * area at compile-time.. |
369 | */ | 369 | */ |
370 | static inline void * __constant_c_memset(void * s, unsigned long c, size_t count) | 370 | static __always_inline void * __constant_c_memset(void * s, unsigned long c, size_t count) |
371 | { | 371 | { |
372 | int d0, d1; | 372 | int d0, d1; |
373 | __asm__ __volatile__( | 373 | __asm__ __volatile__( |
@@ -416,7 +416,7 @@ extern char *strstr(const char *cs, const char *ct); | |||
416 | * This looks horribly ugly, but the compiler can optimize it totally, | 416 | * This looks horribly ugly, but the compiler can optimize it totally, |
417 | * as we by now know that both pattern and count is constant.. | 417 | * as we by now know that both pattern and count is constant.. |
418 | */ | 418 | */ |
419 | static inline void * __constant_c_and_count_memset(void * s, unsigned long pattern, size_t count) | 419 | static __always_inline void * __constant_c_and_count_memset(void * s, unsigned long pattern, size_t count) |
420 | { | 420 | { |
421 | switch (count) { | 421 | switch (count) { |
422 | case 0: | 422 | case 0: |
diff --git a/include/asm-i386/uaccess.h b/include/asm-i386/uaccess.h index 89ab7e2bc5aa..3f1337c34208 100644 --- a/include/asm-i386/uaccess.h +++ b/include/asm-i386/uaccess.h | |||
@@ -411,7 +411,7 @@ unsigned long __must_check __copy_from_user_ll(void *to, | |||
411 | * Returns number of bytes that could not be copied. | 411 | * Returns number of bytes that could not be copied. |
412 | * On success, this will be zero. | 412 | * On success, this will be zero. |
413 | */ | 413 | */ |
414 | static inline unsigned long __must_check | 414 | static __always_inline unsigned long __must_check |
415 | __copy_to_user_inatomic(void __user *to, const void *from, unsigned long n) | 415 | __copy_to_user_inatomic(void __user *to, const void *from, unsigned long n) |
416 | { | 416 | { |
417 | if (__builtin_constant_p(n)) { | 417 | if (__builtin_constant_p(n)) { |
@@ -432,7 +432,7 @@ __copy_to_user_inatomic(void __user *to, const void *from, unsigned long n) | |||
432 | return __copy_to_user_ll(to, from, n); | 432 | return __copy_to_user_ll(to, from, n); |
433 | } | 433 | } |
434 | 434 | ||
435 | static inline unsigned long __must_check | 435 | static __always_inline unsigned long __must_check |
436 | __copy_to_user(void __user *to, const void *from, unsigned long n) | 436 | __copy_to_user(void __user *to, const void *from, unsigned long n) |
437 | { | 437 | { |
438 | might_sleep(); | 438 | might_sleep(); |
@@ -456,7 +456,7 @@ __copy_to_user(void __user *to, const void *from, unsigned long n) | |||
456 | * If some data could not be copied, this function will pad the copied | 456 | * If some data could not be copied, this function will pad the copied |
457 | * data to the requested size using zero bytes. | 457 | * data to the requested size using zero bytes. |
458 | */ | 458 | */ |
459 | static inline unsigned long | 459 | static __always_inline unsigned long |
460 | __copy_from_user_inatomic(void *to, const void __user *from, unsigned long n) | 460 | __copy_from_user_inatomic(void *to, const void __user *from, unsigned long n) |
461 | { | 461 | { |
462 | if (__builtin_constant_p(n)) { | 462 | if (__builtin_constant_p(n)) { |
@@ -477,7 +477,7 @@ __copy_from_user_inatomic(void *to, const void __user *from, unsigned long n) | |||
477 | return __copy_from_user_ll(to, from, n); | 477 | return __copy_from_user_ll(to, from, n); |
478 | } | 478 | } |
479 | 479 | ||
480 | static inline unsigned long | 480 | static __always_inline unsigned long |
481 | __copy_from_user(void *to, const void __user *from, unsigned long n) | 481 | __copy_from_user(void *to, const void __user *from, unsigned long n) |
482 | { | 482 | { |
483 | might_sleep(); | 483 | might_sleep(); |
diff --git a/include/asm-ia64/kprobes.h b/include/asm-ia64/kprobes.h index a74b68104559..8c0fc227f0fb 100644 --- a/include/asm-ia64/kprobes.h +++ b/include/asm-ia64/kprobes.h | |||
@@ -68,10 +68,14 @@ struct prev_kprobe { | |||
68 | unsigned long status; | 68 | unsigned long status; |
69 | }; | 69 | }; |
70 | 70 | ||
71 | #define MAX_PARAM_RSE_SIZE (0x60+0x60/0x3f) | ||
71 | /* per-cpu kprobe control block */ | 72 | /* per-cpu kprobe control block */ |
72 | struct kprobe_ctlblk { | 73 | struct kprobe_ctlblk { |
73 | unsigned long kprobe_status; | 74 | unsigned long kprobe_status; |
74 | struct pt_regs jprobe_saved_regs; | 75 | struct pt_regs jprobe_saved_regs; |
76 | unsigned long jprobes_saved_stacked_regs[MAX_PARAM_RSE_SIZE]; | ||
77 | unsigned long *bsp; | ||
78 | unsigned long cfm; | ||
75 | struct prev_kprobe prev_kprobe; | 79 | struct prev_kprobe prev_kprobe; |
76 | }; | 80 | }; |
77 | 81 | ||
@@ -118,5 +122,7 @@ extern int kprobe_exceptions_notify(struct notifier_block *self, | |||
118 | static inline void jprobe_return(void) | 122 | static inline void jprobe_return(void) |
119 | { | 123 | { |
120 | } | 124 | } |
125 | extern void invalidate_stacked_regs(void); | ||
126 | extern void flush_register_stack(void); | ||
121 | 127 | ||
122 | #endif /* _ASM_KPROBES_H */ | 128 | #endif /* _ASM_KPROBES_H */ |
diff --git a/include/asm-ia64/pal.h b/include/asm-ia64/pal.h index e828377ad295..7708ec669a33 100644 --- a/include/asm-ia64/pal.h +++ b/include/asm-ia64/pal.h | |||
@@ -927,7 +927,7 @@ static inline s64 | |||
927 | ia64_pal_cache_flush (u64 cache_type, u64 invalidate, u64 *progress, u64 *vector) | 927 | ia64_pal_cache_flush (u64 cache_type, u64 invalidate, u64 *progress, u64 *vector) |
928 | { | 928 | { |
929 | struct ia64_pal_retval iprv; | 929 | struct ia64_pal_retval iprv; |
930 | PAL_CALL_IC_OFF(iprv, PAL_CACHE_FLUSH, cache_type, invalidate, *progress); | 930 | PAL_CALL(iprv, PAL_CACHE_FLUSH, cache_type, invalidate, *progress); |
931 | if (vector) | 931 | if (vector) |
932 | *vector = iprv.v0; | 932 | *vector = iprv.v0; |
933 | *progress = iprv.v1; | 933 | *progress = iprv.v1; |
diff --git a/include/asm-ia64/processor.h b/include/asm-ia64/processor.h index 8c648bf72bbd..09b99029ac1a 100644 --- a/include/asm-ia64/processor.h +++ b/include/asm-ia64/processor.h | |||
@@ -25,8 +25,8 @@ | |||
25 | * Limits for PMC and PMD are set to less than maximum architected values | 25 | * Limits for PMC and PMD are set to less than maximum architected values |
26 | * but should be sufficient for a while | 26 | * but should be sufficient for a while |
27 | */ | 27 | */ |
28 | #define IA64_NUM_PMC_REGS 32 | 28 | #define IA64_NUM_PMC_REGS 64 |
29 | #define IA64_NUM_PMD_REGS 32 | 29 | #define IA64_NUM_PMD_REGS 64 |
30 | 30 | ||
31 | #define DEFAULT_MAP_BASE __IA64_UL_CONST(0x2000000000000000) | 31 | #define DEFAULT_MAP_BASE __IA64_UL_CONST(0x2000000000000000) |
32 | #define DEFAULT_TASK_SIZE __IA64_UL_CONST(0xa000000000000000) | 32 | #define DEFAULT_TASK_SIZE __IA64_UL_CONST(0xa000000000000000) |
diff --git a/include/asm-ia64/sn/intr.h b/include/asm-ia64/sn/intr.h index e35074f526d9..a3431372c6e7 100644 --- a/include/asm-ia64/sn/intr.h +++ b/include/asm-ia64/sn/intr.h | |||
@@ -40,7 +40,7 @@ struct sn_irq_info { | |||
40 | int irq_cpuid; /* kernel logical cpuid */ | 40 | int irq_cpuid; /* kernel logical cpuid */ |
41 | int irq_irq; /* the IRQ number */ | 41 | int irq_irq; /* the IRQ number */ |
42 | int irq_int_bit; /* Bridge interrupt pin */ | 42 | int irq_int_bit; /* Bridge interrupt pin */ |
43 | uint64_t irq_xtalkaddr; /* xtalkaddr IRQ is sent to */ | 43 | u64 irq_xtalkaddr; /* xtalkaddr IRQ is sent to */ |
44 | int irq_bridge_type;/* pciio asic type (pciio.h) */ | 44 | int irq_bridge_type;/* pciio asic type (pciio.h) */ |
45 | void *irq_bridge; /* bridge generating irq */ | 45 | void *irq_bridge; /* bridge generating irq */ |
46 | void *irq_pciioinfo; /* associated pciio_info_t */ | 46 | void *irq_pciioinfo; /* associated pciio_info_t */ |
diff --git a/include/asm-ia64/sn/ioc3.h b/include/asm-ia64/sn/ioc3.h new file mode 100644 index 000000000000..95ed6cc83cf1 --- /dev/null +++ b/include/asm-ia64/sn/ioc3.h | |||
@@ -0,0 +1,241 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2005 Silicon Graphics, Inc. | ||
3 | */ | ||
4 | #ifndef IA64_SN_IOC3_H | ||
5 | #define IA64_SN_IOC3_H | ||
6 | |||
7 | /* serial port register map */ | ||
8 | struct ioc3_serialregs { | ||
9 | uint32_t sscr; | ||
10 | uint32_t stpir; | ||
11 | uint32_t stcir; | ||
12 | uint32_t srpir; | ||
13 | uint32_t srcir; | ||
14 | uint32_t srtr; | ||
15 | uint32_t shadow; | ||
16 | }; | ||
17 | |||
18 | /* SUPERIO uart register map */ | ||
19 | struct ioc3_uartregs { | ||
20 | char iu_lcr; | ||
21 | union { | ||
22 | char iir; /* read only */ | ||
23 | char fcr; /* write only */ | ||
24 | } u3; | ||
25 | union { | ||
26 | char ier; /* DLAB == 0 */ | ||
27 | char dlm; /* DLAB == 1 */ | ||
28 | } u2; | ||
29 | union { | ||
30 | char rbr; /* read only, DLAB == 0 */ | ||
31 | char thr; /* write only, DLAB == 0 */ | ||
32 | char dll; /* DLAB == 1 */ | ||
33 | } u1; | ||
34 | char iu_scr; | ||
35 | char iu_msr; | ||
36 | char iu_lsr; | ||
37 | char iu_mcr; | ||
38 | }; | ||
39 | |||
40 | #define iu_rbr u1.rbr | ||
41 | #define iu_thr u1.thr | ||
42 | #define iu_dll u1.dll | ||
43 | #define iu_ier u2.ier | ||
44 | #define iu_dlm u2.dlm | ||
45 | #define iu_iir u3.iir | ||
46 | #define iu_fcr u3.fcr | ||
47 | |||
48 | struct ioc3_sioregs { | ||
49 | char fill[0x170]; | ||
50 | struct ioc3_uartregs uartb; | ||
51 | struct ioc3_uartregs uarta; | ||
52 | }; | ||
53 | |||
54 | /* PCI IO/mem space register map */ | ||
55 | struct ioc3 { | ||
56 | uint32_t pci_id; | ||
57 | uint32_t pci_scr; | ||
58 | uint32_t pci_rev; | ||
59 | uint32_t pci_lat; | ||
60 | uint32_t pci_addr; | ||
61 | uint32_t pci_err_addr_l; | ||
62 | uint32_t pci_err_addr_h; | ||
63 | |||
64 | uint32_t sio_ir; | ||
65 | /* these registers are read-only for general kernel code. To | ||
66 | * modify them use the functions in ioc3.c | ||
67 | */ | ||
68 | uint32_t sio_ies; | ||
69 | uint32_t sio_iec; | ||
70 | uint32_t sio_cr; | ||
71 | uint32_t int_out; | ||
72 | uint32_t mcr; | ||
73 | uint32_t gpcr_s; | ||
74 | uint32_t gpcr_c; | ||
75 | uint32_t gpdr; | ||
76 | uint32_t gppr[9]; | ||
77 | char fill[0x4c]; | ||
78 | |||
79 | /* serial port registers */ | ||
80 | uint32_t sbbr_h; | ||
81 | uint32_t sbbr_l; | ||
82 | |||
83 | struct ioc3_serialregs port_a; | ||
84 | struct ioc3_serialregs port_b; | ||
85 | char fill1[0x1ff10]; | ||
86 | /* superio registers */ | ||
87 | struct ioc3_sioregs sregs; | ||
88 | }; | ||
89 | |||
90 | /* These don't exist on the ioc3 serial card... */ | ||
91 | #define eier fill1[8] | ||
92 | #define eisr fill1[4] | ||
93 | |||
94 | #define PCI_LAT 0xc /* Latency Timer */ | ||
95 | #define PCI_SCR_DROP_MODE_EN 0x00008000 /* drop pios on parity err */ | ||
96 | #define UARTA_BASE 0x178 | ||
97 | #define UARTB_BASE 0x170 | ||
98 | |||
99 | |||
100 | /* bitmasks for serial RX status byte */ | ||
101 | #define RXSB_OVERRUN 0x01 /* char(s) lost */ | ||
102 | #define RXSB_PAR_ERR 0x02 /* parity error */ | ||
103 | #define RXSB_FRAME_ERR 0x04 /* framing error */ | ||
104 | #define RXSB_BREAK 0x08 /* break character */ | ||
105 | #define RXSB_CTS 0x10 /* state of CTS */ | ||
106 | #define RXSB_DCD 0x20 /* state of DCD */ | ||
107 | #define RXSB_MODEM_VALID 0x40 /* DCD, CTS and OVERRUN are valid */ | ||
108 | #define RXSB_DATA_VALID 0x80 /* FRAME_ERR PAR_ERR & BREAK valid */ | ||
109 | |||
110 | /* bitmasks for serial TX control byte */ | ||
111 | #define TXCB_INT_WHEN_DONE 0x20 /* interrupt after this byte is sent */ | ||
112 | #define TXCB_INVALID 0x00 /* byte is invalid */ | ||
113 | #define TXCB_VALID 0x40 /* byte is valid */ | ||
114 | #define TXCB_MCR 0x80 /* data<7:0> to modem cntrl register */ | ||
115 | #define TXCB_DELAY 0xc0 /* delay data<7:0> mSec */ | ||
116 | |||
117 | /* bitmasks for SBBR_L */ | ||
118 | #define SBBR_L_SIZE 0x00000001 /* 0 1KB rings, 1 4KB rings */ | ||
119 | |||
120 | /* bitmasks for SSCR_<A:B> */ | ||
121 | #define SSCR_RX_THRESHOLD 0x000001ff /* hiwater mark */ | ||
122 | #define SSCR_TX_TIMER_BUSY 0x00010000 /* TX timer in progress */ | ||
123 | #define SSCR_HFC_EN 0x00020000 /* h/w flow cntrl enabled */ | ||
124 | #define SSCR_RX_RING_DCD 0x00040000 /* postRX record on delta-DCD */ | ||
125 | #define SSCR_RX_RING_CTS 0x00080000 /* postRX record on delta-CTS */ | ||
126 | #define SSCR_HIGH_SPD 0x00100000 /* 4X speed */ | ||
127 | #define SSCR_DIAG 0x00200000 /* bypass clock divider */ | ||
128 | #define SSCR_RX_DRAIN 0x08000000 /* drain RX buffer to memory */ | ||
129 | #define SSCR_DMA_EN 0x10000000 /* enable ring buffer DMA */ | ||
130 | #define SSCR_DMA_PAUSE 0x20000000 /* pause DMA */ | ||
131 | #define SSCR_PAUSE_STATE 0x40000000 /* set when PAUSE takes effect*/ | ||
132 | #define SSCR_RESET 0x80000000 /* reset DMA channels */ | ||
133 | |||
134 | /* all producer/comsumer pointers are the same bitfield */ | ||
135 | #define PROD_CONS_PTR_4K 0x00000ff8 /* for 4K buffers */ | ||
136 | #define PROD_CONS_PTR_1K 0x000003f8 /* for 1K buffers */ | ||
137 | #define PROD_CONS_PTR_OFF 3 | ||
138 | |||
139 | /* bitmasks for SRCIR_<A:B> */ | ||
140 | #define SRCIR_ARM 0x80000000 /* arm RX timer */ | ||
141 | |||
142 | /* bitmasks for SHADOW_<A:B> */ | ||
143 | #define SHADOW_DR 0x00000001 /* data ready */ | ||
144 | #define SHADOW_OE 0x00000002 /* overrun error */ | ||
145 | #define SHADOW_PE 0x00000004 /* parity error */ | ||
146 | #define SHADOW_FE 0x00000008 /* framing error */ | ||
147 | #define SHADOW_BI 0x00000010 /* break interrupt */ | ||
148 | #define SHADOW_THRE 0x00000020 /* transmit holding reg empty */ | ||
149 | #define SHADOW_TEMT 0x00000040 /* transmit shift reg empty */ | ||
150 | #define SHADOW_RFCE 0x00000080 /* char in RX fifo has error */ | ||
151 | #define SHADOW_DCTS 0x00010000 /* delta clear to send */ | ||
152 | #define SHADOW_DDCD 0x00080000 /* delta data carrier detect */ | ||
153 | #define SHADOW_CTS 0x00100000 /* clear to send */ | ||
154 | #define SHADOW_DCD 0x00800000 /* data carrier detect */ | ||
155 | #define SHADOW_DTR 0x01000000 /* data terminal ready */ | ||
156 | #define SHADOW_RTS 0x02000000 /* request to send */ | ||
157 | #define SHADOW_OUT1 0x04000000 /* 16550 OUT1 bit */ | ||
158 | #define SHADOW_OUT2 0x08000000 /* 16550 OUT2 bit */ | ||
159 | #define SHADOW_LOOP 0x10000000 /* loopback enabled */ | ||
160 | |||
161 | /* bitmasks for SRTR_<A:B> */ | ||
162 | #define SRTR_CNT 0x00000fff /* reload value for RX timer */ | ||
163 | #define SRTR_CNT_VAL 0x0fff0000 /* current value of RX timer */ | ||
164 | #define SRTR_CNT_VAL_SHIFT 16 | ||
165 | #define SRTR_HZ 16000 /* SRTR clock frequency */ | ||
166 | |||
167 | /* bitmasks for SIO_IR, SIO_IEC and SIO_IES */ | ||
168 | #define SIO_IR_SA_TX_MT 0x00000001 /* Serial port A TX empty */ | ||
169 | #define SIO_IR_SA_RX_FULL 0x00000002 /* port A RX buf full */ | ||
170 | #define SIO_IR_SA_RX_HIGH 0x00000004 /* port A RX hiwat */ | ||
171 | #define SIO_IR_SA_RX_TIMER 0x00000008 /* port A RX timeout */ | ||
172 | #define SIO_IR_SA_DELTA_DCD 0x00000010 /* port A delta DCD */ | ||
173 | #define SIO_IR_SA_DELTA_CTS 0x00000020 /* port A delta CTS */ | ||
174 | #define SIO_IR_SA_INT 0x00000040 /* port A pass-thru intr */ | ||
175 | #define SIO_IR_SA_TX_EXPLICIT 0x00000080 /* port A explicit TX thru */ | ||
176 | #define SIO_IR_SA_MEMERR 0x00000100 /* port A PCI error */ | ||
177 | #define SIO_IR_SB_TX_MT 0x00000200 | ||
178 | #define SIO_IR_SB_RX_FULL 0x00000400 | ||
179 | #define SIO_IR_SB_RX_HIGH 0x00000800 | ||
180 | #define SIO_IR_SB_RX_TIMER 0x00001000 | ||
181 | #define SIO_IR_SB_DELTA_DCD 0x00002000 | ||
182 | #define SIO_IR_SB_DELTA_CTS 0x00004000 | ||
183 | #define SIO_IR_SB_INT 0x00008000 | ||
184 | #define SIO_IR_SB_TX_EXPLICIT 0x00010000 | ||
185 | #define SIO_IR_SB_MEMERR 0x00020000 | ||
186 | #define SIO_IR_PP_INT 0x00040000 /* P port pass-thru intr */ | ||
187 | #define SIO_IR_PP_INTA 0x00080000 /* PP context A thru */ | ||
188 | #define SIO_IR_PP_INTB 0x00100000 /* PP context B thru */ | ||
189 | #define SIO_IR_PP_MEMERR 0x00200000 /* PP PCI error */ | ||
190 | #define SIO_IR_KBD_INT 0x00400000 /* kbd/mouse intr */ | ||
191 | #define SIO_IR_RT_INT 0x08000000 /* RT output pulse */ | ||
192 | #define SIO_IR_GEN_INT1 0x10000000 /* RT input pulse */ | ||
193 | #define SIO_IR_GEN_INT_SHIFT 28 | ||
194 | |||
195 | /* per device interrupt masks */ | ||
196 | #define SIO_IR_SA (SIO_IR_SA_TX_MT | \ | ||
197 | SIO_IR_SA_RX_FULL | \ | ||
198 | SIO_IR_SA_RX_HIGH | \ | ||
199 | SIO_IR_SA_RX_TIMER | \ | ||
200 | SIO_IR_SA_DELTA_DCD | \ | ||
201 | SIO_IR_SA_DELTA_CTS | \ | ||
202 | SIO_IR_SA_INT | \ | ||
203 | SIO_IR_SA_TX_EXPLICIT | \ | ||
204 | SIO_IR_SA_MEMERR) | ||
205 | |||
206 | #define SIO_IR_SB (SIO_IR_SB_TX_MT | \ | ||
207 | SIO_IR_SB_RX_FULL | \ | ||
208 | SIO_IR_SB_RX_HIGH | \ | ||
209 | SIO_IR_SB_RX_TIMER | \ | ||
210 | SIO_IR_SB_DELTA_DCD | \ | ||
211 | SIO_IR_SB_DELTA_CTS | \ | ||
212 | SIO_IR_SB_INT | \ | ||
213 | SIO_IR_SB_TX_EXPLICIT | \ | ||
214 | SIO_IR_SB_MEMERR) | ||
215 | |||
216 | #define SIO_IR_PP (SIO_IR_PP_INT | SIO_IR_PP_INTA | \ | ||
217 | SIO_IR_PP_INTB | SIO_IR_PP_MEMERR) | ||
218 | #define SIO_IR_RT (SIO_IR_RT_INT | SIO_IR_GEN_INT1) | ||
219 | |||
220 | /* bitmasks for SIO_CR */ | ||
221 | #define SIO_CR_CMD_PULSE_SHIFT 15 | ||
222 | #define SIO_CR_SER_A_BASE_SHIFT 1 | ||
223 | #define SIO_CR_SER_B_BASE_SHIFT 8 | ||
224 | #define SIO_CR_ARB_DIAG 0x00380000 /* cur !enet PCI requet (ro) */ | ||
225 | #define SIO_CR_ARB_DIAG_TXA 0x00000000 | ||
226 | #define SIO_CR_ARB_DIAG_RXA 0x00080000 | ||
227 | #define SIO_CR_ARB_DIAG_TXB 0x00100000 | ||
228 | #define SIO_CR_ARB_DIAG_RXB 0x00180000 | ||
229 | #define SIO_CR_ARB_DIAG_PP 0x00200000 | ||
230 | #define SIO_CR_ARB_DIAG_IDLE 0x00400000 /* 0 -> active request (ro) */ | ||
231 | |||
232 | /* defs for some of the generic I/O pins */ | ||
233 | #define GPCR_PHY_RESET 0x20 /* pin is output to PHY reset */ | ||
234 | #define GPCR_UARTB_MODESEL 0x40 /* pin is output to port B mode sel */ | ||
235 | #define GPCR_UARTA_MODESEL 0x80 /* pin is output to port A mode sel */ | ||
236 | |||
237 | #define GPPR_PHY_RESET_PIN 5 /* GIO pin controlling phy reset */ | ||
238 | #define GPPR_UARTB_MODESEL_PIN 6 /* GIO pin cntrling uartb modeselect */ | ||
239 | #define GPPR_UARTA_MODESEL_PIN 7 /* GIO pin cntrling uarta modeselect */ | ||
240 | |||
241 | #endif /* IA64_SN_IOC3_H */ | ||
diff --git a/include/asm-ia64/sn/pcibr_provider.h b/include/asm-ia64/sn/pcibr_provider.h index 2b42d9ece26b..9334078b089a 100644 --- a/include/asm-ia64/sn/pcibr_provider.h +++ b/include/asm-ia64/sn/pcibr_provider.h | |||
@@ -44,9 +44,9 @@ | |||
44 | #define PCI32_MAPPED_BASE 0x40000000 | 44 | #define PCI32_MAPPED_BASE 0x40000000 |
45 | #define PCI32_DIRECT_BASE 0x80000000 | 45 | #define PCI32_DIRECT_BASE 0x80000000 |
46 | 46 | ||
47 | #define IS_PCI32_MAPPED(x) ((uint64_t)(x) < PCI32_DIRECT_BASE && \ | 47 | #define IS_PCI32_MAPPED(x) ((u64)(x) < PCI32_DIRECT_BASE && \ |
48 | (uint64_t)(x) >= PCI32_MAPPED_BASE) | 48 | (u64)(x) >= PCI32_MAPPED_BASE) |
49 | #define IS_PCI32_DIRECT(x) ((uint64_t)(x) >= PCI32_MAPPED_BASE) | 49 | #define IS_PCI32_DIRECT(x) ((u64)(x) >= PCI32_MAPPED_BASE) |
50 | 50 | ||
51 | 51 | ||
52 | /* | 52 | /* |
@@ -63,7 +63,7 @@ | |||
63 | (IOPG(IOPGOFF(addr) + (size) - 1) == IOPG((size) - 1)) | 63 | (IOPG(IOPGOFF(addr) + (size) - 1) == IOPG((size) - 1)) |
64 | 64 | ||
65 | #define MINIMAL_ATE_FLAG(addr, size) \ | 65 | #define MINIMAL_ATE_FLAG(addr, size) \ |
66 | (MINIMAL_ATES_REQUIRED((uint64_t)addr, size) ? 1 : 0) | 66 | (MINIMAL_ATES_REQUIRED((u64)addr, size) ? 1 : 0) |
67 | 67 | ||
68 | /* bit 29 of the pci address is the SWAP bit */ | 68 | /* bit 29 of the pci address is the SWAP bit */ |
69 | #define ATE_SWAPSHIFT 29 | 69 | #define ATE_SWAPSHIFT 29 |
@@ -90,27 +90,27 @@ | |||
90 | * PMU resources. | 90 | * PMU resources. |
91 | */ | 91 | */ |
92 | struct ate_resource{ | 92 | struct ate_resource{ |
93 | uint64_t *ate; | 93 | u64 *ate; |
94 | uint64_t num_ate; | 94 | u64 num_ate; |
95 | uint64_t lowest_free_index; | 95 | u64 lowest_free_index; |
96 | }; | 96 | }; |
97 | 97 | ||
98 | struct pcibus_info { | 98 | struct pcibus_info { |
99 | struct pcibus_bussoft pbi_buscommon; /* common header */ | 99 | struct pcibus_bussoft pbi_buscommon; /* common header */ |
100 | uint32_t pbi_moduleid; | 100 | u32 pbi_moduleid; |
101 | short pbi_bridge_type; | 101 | short pbi_bridge_type; |
102 | short pbi_bridge_mode; | 102 | short pbi_bridge_mode; |
103 | 103 | ||
104 | struct ate_resource pbi_int_ate_resource; | 104 | struct ate_resource pbi_int_ate_resource; |
105 | uint64_t pbi_int_ate_size; | 105 | u64 pbi_int_ate_size; |
106 | 106 | ||
107 | uint64_t pbi_dir_xbase; | 107 | u64 pbi_dir_xbase; |
108 | char pbi_hub_xid; | 108 | char pbi_hub_xid; |
109 | 109 | ||
110 | uint64_t pbi_devreg[8]; | 110 | u64 pbi_devreg[8]; |
111 | 111 | ||
112 | uint32_t pbi_valid_devices; | 112 | u32 pbi_valid_devices; |
113 | uint32_t pbi_enabled_devices; | 113 | u32 pbi_enabled_devices; |
114 | 114 | ||
115 | spinlock_t pbi_lock; | 115 | spinlock_t pbi_lock; |
116 | }; | 116 | }; |
@@ -136,22 +136,22 @@ extern void pcibr_dma_unmap(struct pci_dev *, dma_addr_t, int); | |||
136 | /* | 136 | /* |
137 | * prototypes for the bridge asic register access routines in pcibr_reg.c | 137 | * prototypes for the bridge asic register access routines in pcibr_reg.c |
138 | */ | 138 | */ |
139 | extern void pcireg_control_bit_clr(struct pcibus_info *, uint64_t); | 139 | extern void pcireg_control_bit_clr(struct pcibus_info *, u64); |
140 | extern void pcireg_control_bit_set(struct pcibus_info *, uint64_t); | 140 | extern void pcireg_control_bit_set(struct pcibus_info *, u64); |
141 | extern uint64_t pcireg_tflush_get(struct pcibus_info *); | 141 | extern u64 pcireg_tflush_get(struct pcibus_info *); |
142 | extern uint64_t pcireg_intr_status_get(struct pcibus_info *); | 142 | extern u64 pcireg_intr_status_get(struct pcibus_info *); |
143 | extern void pcireg_intr_enable_bit_clr(struct pcibus_info *, uint64_t); | 143 | extern void pcireg_intr_enable_bit_clr(struct pcibus_info *, u64); |
144 | extern void pcireg_intr_enable_bit_set(struct pcibus_info *, uint64_t); | 144 | extern void pcireg_intr_enable_bit_set(struct pcibus_info *, u64); |
145 | extern void pcireg_intr_addr_addr_set(struct pcibus_info *, int, uint64_t); | 145 | extern void pcireg_intr_addr_addr_set(struct pcibus_info *, int, u64); |
146 | extern void pcireg_force_intr_set(struct pcibus_info *, int); | 146 | extern void pcireg_force_intr_set(struct pcibus_info *, int); |
147 | extern uint64_t pcireg_wrb_flush_get(struct pcibus_info *, int); | 147 | extern u64 pcireg_wrb_flush_get(struct pcibus_info *, int); |
148 | extern void pcireg_int_ate_set(struct pcibus_info *, int, uint64_t); | 148 | extern void pcireg_int_ate_set(struct pcibus_info *, int, u64); |
149 | extern uint64_t * pcireg_int_ate_addr(struct pcibus_info *, int); | 149 | extern u64 * pcireg_int_ate_addr(struct pcibus_info *, int); |
150 | extern void pcibr_force_interrupt(struct sn_irq_info *sn_irq_info); | 150 | extern void pcibr_force_interrupt(struct sn_irq_info *sn_irq_info); |
151 | extern void pcibr_change_devices_irq(struct sn_irq_info *sn_irq_info); | 151 | extern void pcibr_change_devices_irq(struct sn_irq_info *sn_irq_info); |
152 | extern int pcibr_ate_alloc(struct pcibus_info *, int); | 152 | extern int pcibr_ate_alloc(struct pcibus_info *, int); |
153 | extern void pcibr_ate_free(struct pcibus_info *, int); | 153 | extern void pcibr_ate_free(struct pcibus_info *, int); |
154 | extern void ate_write(struct pcibus_info *, int, int, uint64_t); | 154 | extern void ate_write(struct pcibus_info *, int, int, u64); |
155 | extern int sal_pcibr_slot_enable(struct pcibus_info *soft, int device, | 155 | extern int sal_pcibr_slot_enable(struct pcibus_info *soft, int device, |
156 | void *resp); | 156 | void *resp); |
157 | extern int sal_pcibr_slot_disable(struct pcibus_info *soft, int device, | 157 | extern int sal_pcibr_slot_disable(struct pcibus_info *soft, int device, |
diff --git a/include/asm-ia64/sn/pcibus_provider_defs.h b/include/asm-ia64/sn/pcibus_provider_defs.h index ad0e8e8ae53f..ce3f6c328241 100644 --- a/include/asm-ia64/sn/pcibus_provider_defs.h +++ b/include/asm-ia64/sn/pcibus_provider_defs.h | |||
@@ -29,13 +29,13 @@ | |||
29 | */ | 29 | */ |
30 | 30 | ||
31 | struct pcibus_bussoft { | 31 | struct pcibus_bussoft { |
32 | uint32_t bs_asic_type; /* chipset type */ | 32 | u32 bs_asic_type; /* chipset type */ |
33 | uint32_t bs_xid; /* xwidget id */ | 33 | u32 bs_xid; /* xwidget id */ |
34 | uint32_t bs_persist_busnum; /* Persistent Bus Number */ | 34 | u32 bs_persist_busnum; /* Persistent Bus Number */ |
35 | uint32_t bs_persist_segment; /* Segment Number */ | 35 | u32 bs_persist_segment; /* Segment Number */ |
36 | uint64_t bs_legacy_io; /* legacy io pio addr */ | 36 | u64 bs_legacy_io; /* legacy io pio addr */ |
37 | uint64_t bs_legacy_mem; /* legacy mem pio addr */ | 37 | u64 bs_legacy_mem; /* legacy mem pio addr */ |
38 | uint64_t bs_base; /* widget base */ | 38 | u64 bs_base; /* widget base */ |
39 | struct xwidget_info *bs_xwidget_info; | 39 | struct xwidget_info *bs_xwidget_info; |
40 | }; | 40 | }; |
41 | 41 | ||
diff --git a/include/asm-ia64/sn/pcidev.h b/include/asm-ia64/sn/pcidev.h index f65d222ca5e8..38cdffbc4c7b 100644 --- a/include/asm-ia64/sn/pcidev.h +++ b/include/asm-ia64/sn/pcidev.h | |||
@@ -55,8 +55,8 @@ struct sn_pci_controller { | |||
55 | #define PCIIO_VENDOR_ID_NONE (-1) | 55 | #define PCIIO_VENDOR_ID_NONE (-1) |
56 | 56 | ||
57 | struct pcidev_info { | 57 | struct pcidev_info { |
58 | uint64_t pdi_pio_mapped_addr[7]; /* 6 BARs PLUS 1 ROM */ | 58 | u64 pdi_pio_mapped_addr[7]; /* 6 BARs PLUS 1 ROM */ |
59 | uint64_t pdi_slot_host_handle; /* Bus and devfn Host pci_dev */ | 59 | u64 pdi_slot_host_handle; /* Bus and devfn Host pci_dev */ |
60 | 60 | ||
61 | struct pcibus_bussoft *pdi_pcibus_info; /* Kernel common bus soft */ | 61 | struct pcibus_bussoft *pdi_pcibus_info; /* Kernel common bus soft */ |
62 | struct pcidev_info *pdi_host_pcidev_info; /* Kernel Host pci_dev */ | 62 | struct pcidev_info *pdi_host_pcidev_info; /* Kernel Host pci_dev */ |
diff --git a/include/asm-ia64/sn/pic.h b/include/asm-ia64/sn/pic.h index 0de82e6b0893..5f9da5fd6e56 100644 --- a/include/asm-ia64/sn/pic.h +++ b/include/asm-ia64/sn/pic.h | |||
@@ -74,120 +74,120 @@ struct pic { | |||
74 | /* 0x000000-0x00FFFF -- Local Registers */ | 74 | /* 0x000000-0x00FFFF -- Local Registers */ |
75 | 75 | ||
76 | /* 0x000000-0x000057 -- Standard Widget Configuration */ | 76 | /* 0x000000-0x000057 -- Standard Widget Configuration */ |
77 | uint64_t p_wid_id; /* 0x000000 */ | 77 | u64 p_wid_id; /* 0x000000 */ |
78 | uint64_t p_wid_stat; /* 0x000008 */ | 78 | u64 p_wid_stat; /* 0x000008 */ |
79 | uint64_t p_wid_err_upper; /* 0x000010 */ | 79 | u64 p_wid_err_upper; /* 0x000010 */ |
80 | uint64_t p_wid_err_lower; /* 0x000018 */ | 80 | u64 p_wid_err_lower; /* 0x000018 */ |
81 | #define p_wid_err p_wid_err_lower | 81 | #define p_wid_err p_wid_err_lower |
82 | uint64_t p_wid_control; /* 0x000020 */ | 82 | u64 p_wid_control; /* 0x000020 */ |
83 | uint64_t p_wid_req_timeout; /* 0x000028 */ | 83 | u64 p_wid_req_timeout; /* 0x000028 */ |
84 | uint64_t p_wid_int_upper; /* 0x000030 */ | 84 | u64 p_wid_int_upper; /* 0x000030 */ |
85 | uint64_t p_wid_int_lower; /* 0x000038 */ | 85 | u64 p_wid_int_lower; /* 0x000038 */ |
86 | #define p_wid_int p_wid_int_lower | 86 | #define p_wid_int p_wid_int_lower |
87 | uint64_t p_wid_err_cmdword; /* 0x000040 */ | 87 | u64 p_wid_err_cmdword; /* 0x000040 */ |
88 | uint64_t p_wid_llp; /* 0x000048 */ | 88 | u64 p_wid_llp; /* 0x000048 */ |
89 | uint64_t p_wid_tflush; /* 0x000050 */ | 89 | u64 p_wid_tflush; /* 0x000050 */ |
90 | 90 | ||
91 | /* 0x000058-0x00007F -- Bridge-specific Widget Configuration */ | 91 | /* 0x000058-0x00007F -- Bridge-specific Widget Configuration */ |
92 | uint64_t p_wid_aux_err; /* 0x000058 */ | 92 | u64 p_wid_aux_err; /* 0x000058 */ |
93 | uint64_t p_wid_resp_upper; /* 0x000060 */ | 93 | u64 p_wid_resp_upper; /* 0x000060 */ |
94 | uint64_t p_wid_resp_lower; /* 0x000068 */ | 94 | u64 p_wid_resp_lower; /* 0x000068 */ |
95 | #define p_wid_resp p_wid_resp_lower | 95 | #define p_wid_resp p_wid_resp_lower |
96 | uint64_t p_wid_tst_pin_ctrl; /* 0x000070 */ | 96 | u64 p_wid_tst_pin_ctrl; /* 0x000070 */ |
97 | uint64_t p_wid_addr_lkerr; /* 0x000078 */ | 97 | u64 p_wid_addr_lkerr; /* 0x000078 */ |
98 | 98 | ||
99 | /* 0x000080-0x00008F -- PMU & MAP */ | 99 | /* 0x000080-0x00008F -- PMU & MAP */ |
100 | uint64_t p_dir_map; /* 0x000080 */ | 100 | u64 p_dir_map; /* 0x000080 */ |
101 | uint64_t _pad_000088; /* 0x000088 */ | 101 | u64 _pad_000088; /* 0x000088 */ |
102 | 102 | ||
103 | /* 0x000090-0x00009F -- SSRAM */ | 103 | /* 0x000090-0x00009F -- SSRAM */ |
104 | uint64_t p_map_fault; /* 0x000090 */ | 104 | u64 p_map_fault; /* 0x000090 */ |
105 | uint64_t _pad_000098; /* 0x000098 */ | 105 | u64 _pad_000098; /* 0x000098 */ |
106 | 106 | ||
107 | /* 0x0000A0-0x0000AF -- Arbitration */ | 107 | /* 0x0000A0-0x0000AF -- Arbitration */ |
108 | uint64_t p_arb; /* 0x0000A0 */ | 108 | u64 p_arb; /* 0x0000A0 */ |
109 | uint64_t _pad_0000A8; /* 0x0000A8 */ | 109 | u64 _pad_0000A8; /* 0x0000A8 */ |
110 | 110 | ||
111 | /* 0x0000B0-0x0000BF -- Number In A Can or ATE Parity Error */ | 111 | /* 0x0000B0-0x0000BF -- Number In A Can or ATE Parity Error */ |
112 | uint64_t p_ate_parity_err; /* 0x0000B0 */ | 112 | u64 p_ate_parity_err; /* 0x0000B0 */ |
113 | uint64_t _pad_0000B8; /* 0x0000B8 */ | 113 | u64 _pad_0000B8; /* 0x0000B8 */ |
114 | 114 | ||
115 | /* 0x0000C0-0x0000FF -- PCI/GIO */ | 115 | /* 0x0000C0-0x0000FF -- PCI/GIO */ |
116 | uint64_t p_bus_timeout; /* 0x0000C0 */ | 116 | u64 p_bus_timeout; /* 0x0000C0 */ |
117 | uint64_t p_pci_cfg; /* 0x0000C8 */ | 117 | u64 p_pci_cfg; /* 0x0000C8 */ |
118 | uint64_t p_pci_err_upper; /* 0x0000D0 */ | 118 | u64 p_pci_err_upper; /* 0x0000D0 */ |
119 | uint64_t p_pci_err_lower; /* 0x0000D8 */ | 119 | u64 p_pci_err_lower; /* 0x0000D8 */ |
120 | #define p_pci_err p_pci_err_lower | 120 | #define p_pci_err p_pci_err_lower |
121 | uint64_t _pad_0000E0[4]; /* 0x0000{E0..F8} */ | 121 | u64 _pad_0000E0[4]; /* 0x0000{E0..F8} */ |
122 | 122 | ||
123 | /* 0x000100-0x0001FF -- Interrupt */ | 123 | /* 0x000100-0x0001FF -- Interrupt */ |
124 | uint64_t p_int_status; /* 0x000100 */ | 124 | u64 p_int_status; /* 0x000100 */ |
125 | uint64_t p_int_enable; /* 0x000108 */ | 125 | u64 p_int_enable; /* 0x000108 */ |
126 | uint64_t p_int_rst_stat; /* 0x000110 */ | 126 | u64 p_int_rst_stat; /* 0x000110 */ |
127 | uint64_t p_int_mode; /* 0x000118 */ | 127 | u64 p_int_mode; /* 0x000118 */ |
128 | uint64_t p_int_device; /* 0x000120 */ | 128 | u64 p_int_device; /* 0x000120 */ |
129 | uint64_t p_int_host_err; /* 0x000128 */ | 129 | u64 p_int_host_err; /* 0x000128 */ |
130 | uint64_t p_int_addr[8]; /* 0x0001{30,,,68} */ | 130 | u64 p_int_addr[8]; /* 0x0001{30,,,68} */ |
131 | uint64_t p_err_int_view; /* 0x000170 */ | 131 | u64 p_err_int_view; /* 0x000170 */ |
132 | uint64_t p_mult_int; /* 0x000178 */ | 132 | u64 p_mult_int; /* 0x000178 */ |
133 | uint64_t p_force_always[8]; /* 0x0001{80,,,B8} */ | 133 | u64 p_force_always[8]; /* 0x0001{80,,,B8} */ |
134 | uint64_t p_force_pin[8]; /* 0x0001{C0,,,F8} */ | 134 | u64 p_force_pin[8]; /* 0x0001{C0,,,F8} */ |
135 | 135 | ||
136 | /* 0x000200-0x000298 -- Device */ | 136 | /* 0x000200-0x000298 -- Device */ |
137 | uint64_t p_device[4]; /* 0x0002{00,,,18} */ | 137 | u64 p_device[4]; /* 0x0002{00,,,18} */ |
138 | uint64_t _pad_000220[4]; /* 0x0002{20,,,38} */ | 138 | u64 _pad_000220[4]; /* 0x0002{20,,,38} */ |
139 | uint64_t p_wr_req_buf[4]; /* 0x0002{40,,,58} */ | 139 | u64 p_wr_req_buf[4]; /* 0x0002{40,,,58} */ |
140 | uint64_t _pad_000260[4]; /* 0x0002{60,,,78} */ | 140 | u64 _pad_000260[4]; /* 0x0002{60,,,78} */ |
141 | uint64_t p_rrb_map[2]; /* 0x0002{80,,,88} */ | 141 | u64 p_rrb_map[2]; /* 0x0002{80,,,88} */ |
142 | #define p_even_resp p_rrb_map[0] /* 0x000280 */ | 142 | #define p_even_resp p_rrb_map[0] /* 0x000280 */ |
143 | #define p_odd_resp p_rrb_map[1] /* 0x000288 */ | 143 | #define p_odd_resp p_rrb_map[1] /* 0x000288 */ |
144 | uint64_t p_resp_status; /* 0x000290 */ | 144 | u64 p_resp_status; /* 0x000290 */ |
145 | uint64_t p_resp_clear; /* 0x000298 */ | 145 | u64 p_resp_clear; /* 0x000298 */ |
146 | 146 | ||
147 | uint64_t _pad_0002A0[12]; /* 0x0002{A0..F8} */ | 147 | u64 _pad_0002A0[12]; /* 0x0002{A0..F8} */ |
148 | 148 | ||
149 | /* 0x000300-0x0003F8 -- Buffer Address Match Registers */ | 149 | /* 0x000300-0x0003F8 -- Buffer Address Match Registers */ |
150 | struct { | 150 | struct { |
151 | uint64_t upper; /* 0x0003{00,,,F0} */ | 151 | u64 upper; /* 0x0003{00,,,F0} */ |
152 | uint64_t lower; /* 0x0003{08,,,F8} */ | 152 | u64 lower; /* 0x0003{08,,,F8} */ |
153 | } p_buf_addr_match[16]; | 153 | } p_buf_addr_match[16]; |
154 | 154 | ||
155 | /* 0x000400-0x0005FF -- Performance Monitor Registers (even only) */ | 155 | /* 0x000400-0x0005FF -- Performance Monitor Registers (even only) */ |
156 | struct { | 156 | struct { |
157 | uint64_t flush_w_touch; /* 0x000{400,,,5C0} */ | 157 | u64 flush_w_touch; /* 0x000{400,,,5C0} */ |
158 | uint64_t flush_wo_touch; /* 0x000{408,,,5C8} */ | 158 | u64 flush_wo_touch; /* 0x000{408,,,5C8} */ |
159 | uint64_t inflight; /* 0x000{410,,,5D0} */ | 159 | u64 inflight; /* 0x000{410,,,5D0} */ |
160 | uint64_t prefetch; /* 0x000{418,,,5D8} */ | 160 | u64 prefetch; /* 0x000{418,,,5D8} */ |
161 | uint64_t total_pci_retry; /* 0x000{420,,,5E0} */ | 161 | u64 total_pci_retry; /* 0x000{420,,,5E0} */ |
162 | uint64_t max_pci_retry; /* 0x000{428,,,5E8} */ | 162 | u64 max_pci_retry; /* 0x000{428,,,5E8} */ |
163 | uint64_t max_latency; /* 0x000{430,,,5F0} */ | 163 | u64 max_latency; /* 0x000{430,,,5F0} */ |
164 | uint64_t clear_all; /* 0x000{438,,,5F8} */ | 164 | u64 clear_all; /* 0x000{438,,,5F8} */ |
165 | } p_buf_count[8]; | 165 | } p_buf_count[8]; |
166 | 166 | ||
167 | 167 | ||
168 | /* 0x000600-0x0009FF -- PCI/X registers */ | 168 | /* 0x000600-0x0009FF -- PCI/X registers */ |
169 | uint64_t p_pcix_bus_err_addr; /* 0x000600 */ | 169 | u64 p_pcix_bus_err_addr; /* 0x000600 */ |
170 | uint64_t p_pcix_bus_err_attr; /* 0x000608 */ | 170 | u64 p_pcix_bus_err_attr; /* 0x000608 */ |
171 | uint64_t p_pcix_bus_err_data; /* 0x000610 */ | 171 | u64 p_pcix_bus_err_data; /* 0x000610 */ |
172 | uint64_t p_pcix_pio_split_addr; /* 0x000618 */ | 172 | u64 p_pcix_pio_split_addr; /* 0x000618 */ |
173 | uint64_t p_pcix_pio_split_attr; /* 0x000620 */ | 173 | u64 p_pcix_pio_split_attr; /* 0x000620 */ |
174 | uint64_t p_pcix_dma_req_err_attr; /* 0x000628 */ | 174 | u64 p_pcix_dma_req_err_attr; /* 0x000628 */ |
175 | uint64_t p_pcix_dma_req_err_addr; /* 0x000630 */ | 175 | u64 p_pcix_dma_req_err_addr; /* 0x000630 */ |
176 | uint64_t p_pcix_timeout; /* 0x000638 */ | 176 | u64 p_pcix_timeout; /* 0x000638 */ |
177 | 177 | ||
178 | uint64_t _pad_000640[120]; /* 0x000{640,,,9F8} */ | 178 | u64 _pad_000640[120]; /* 0x000{640,,,9F8} */ |
179 | 179 | ||
180 | /* 0x000A00-0x000BFF -- PCI/X Read&Write Buffer */ | 180 | /* 0x000A00-0x000BFF -- PCI/X Read&Write Buffer */ |
181 | struct { | 181 | struct { |
182 | uint64_t p_buf_addr; /* 0x000{A00,,,AF0} */ | 182 | u64 p_buf_addr; /* 0x000{A00,,,AF0} */ |
183 | uint64_t p_buf_attr; /* 0X000{A08,,,AF8} */ | 183 | u64 p_buf_attr; /* 0X000{A08,,,AF8} */ |
184 | } p_pcix_read_buf_64[16]; | 184 | } p_pcix_read_buf_64[16]; |
185 | 185 | ||
186 | struct { | 186 | struct { |
187 | uint64_t p_buf_addr; /* 0x000{B00,,,BE0} */ | 187 | u64 p_buf_addr; /* 0x000{B00,,,BE0} */ |
188 | uint64_t p_buf_attr; /* 0x000{B08,,,BE8} */ | 188 | u64 p_buf_attr; /* 0x000{B08,,,BE8} */ |
189 | uint64_t p_buf_valid; /* 0x000{B10,,,BF0} */ | 189 | u64 p_buf_valid; /* 0x000{B10,,,BF0} */ |
190 | uint64_t __pad1; /* 0x000{B18,,,BF8} */ | 190 | u64 __pad1; /* 0x000{B18,,,BF8} */ |
191 | } p_pcix_write_buf_64[8]; | 191 | } p_pcix_write_buf_64[8]; |
192 | 192 | ||
193 | /* End of Local Registers -- Start of Address Map space */ | 193 | /* End of Local Registers -- Start of Address Map space */ |
@@ -195,45 +195,45 @@ struct pic { | |||
195 | char _pad_000c00[0x010000 - 0x000c00]; | 195 | char _pad_000c00[0x010000 - 0x000c00]; |
196 | 196 | ||
197 | /* 0x010000-0x011fff -- Internal ATE RAM (Auto Parity Generation) */ | 197 | /* 0x010000-0x011fff -- Internal ATE RAM (Auto Parity Generation) */ |
198 | uint64_t p_int_ate_ram[1024]; /* 0x010000-0x011fff */ | 198 | u64 p_int_ate_ram[1024]; /* 0x010000-0x011fff */ |
199 | 199 | ||
200 | /* 0x012000-0x013fff -- Internal ATE RAM (Manual Parity Generation) */ | 200 | /* 0x012000-0x013fff -- Internal ATE RAM (Manual Parity Generation) */ |
201 | uint64_t p_int_ate_ram_mp[1024]; /* 0x012000-0x013fff */ | 201 | u64 p_int_ate_ram_mp[1024]; /* 0x012000-0x013fff */ |
202 | 202 | ||
203 | char _pad_014000[0x18000 - 0x014000]; | 203 | char _pad_014000[0x18000 - 0x014000]; |
204 | 204 | ||
205 | /* 0x18000-0x197F8 -- PIC Write Request Ram */ | 205 | /* 0x18000-0x197F8 -- PIC Write Request Ram */ |
206 | uint64_t p_wr_req_lower[256]; /* 0x18000 - 0x187F8 */ | 206 | u64 p_wr_req_lower[256]; /* 0x18000 - 0x187F8 */ |
207 | uint64_t p_wr_req_upper[256]; /* 0x18800 - 0x18FF8 */ | 207 | u64 p_wr_req_upper[256]; /* 0x18800 - 0x18FF8 */ |
208 | uint64_t p_wr_req_parity[256]; /* 0x19000 - 0x197F8 */ | 208 | u64 p_wr_req_parity[256]; /* 0x19000 - 0x197F8 */ |
209 | 209 | ||
210 | char _pad_019800[0x20000 - 0x019800]; | 210 | char _pad_019800[0x20000 - 0x019800]; |
211 | 211 | ||
212 | /* 0x020000-0x027FFF -- PCI Device Configuration Spaces */ | 212 | /* 0x020000-0x027FFF -- PCI Device Configuration Spaces */ |
213 | union { | 213 | union { |
214 | uint8_t c[0x1000 / 1]; /* 0x02{0000,,,7FFF} */ | 214 | u8 c[0x1000 / 1]; /* 0x02{0000,,,7FFF} */ |
215 | uint16_t s[0x1000 / 2]; /* 0x02{0000,,,7FFF} */ | 215 | u16 s[0x1000 / 2]; /* 0x02{0000,,,7FFF} */ |
216 | uint32_t l[0x1000 / 4]; /* 0x02{0000,,,7FFF} */ | 216 | u32 l[0x1000 / 4]; /* 0x02{0000,,,7FFF} */ |
217 | uint64_t d[0x1000 / 8]; /* 0x02{0000,,,7FFF} */ | 217 | u64 d[0x1000 / 8]; /* 0x02{0000,,,7FFF} */ |
218 | union { | 218 | union { |
219 | uint8_t c[0x100 / 1]; | 219 | u8 c[0x100 / 1]; |
220 | uint16_t s[0x100 / 2]; | 220 | u16 s[0x100 / 2]; |
221 | uint32_t l[0x100 / 4]; | 221 | u32 l[0x100 / 4]; |
222 | uint64_t d[0x100 / 8]; | 222 | u64 d[0x100 / 8]; |
223 | } f[8]; | 223 | } f[8]; |
224 | } p_type0_cfg_dev[8]; /* 0x02{0000,,,7FFF} */ | 224 | } p_type0_cfg_dev[8]; /* 0x02{0000,,,7FFF} */ |
225 | 225 | ||
226 | /* 0x028000-0x028FFF -- PCI Type 1 Configuration Space */ | 226 | /* 0x028000-0x028FFF -- PCI Type 1 Configuration Space */ |
227 | union { | 227 | union { |
228 | uint8_t c[0x1000 / 1]; /* 0x028000-0x029000 */ | 228 | u8 c[0x1000 / 1]; /* 0x028000-0x029000 */ |
229 | uint16_t s[0x1000 / 2]; /* 0x028000-0x029000 */ | 229 | u16 s[0x1000 / 2]; /* 0x028000-0x029000 */ |
230 | uint32_t l[0x1000 / 4]; /* 0x028000-0x029000 */ | 230 | u32 l[0x1000 / 4]; /* 0x028000-0x029000 */ |
231 | uint64_t d[0x1000 / 8]; /* 0x028000-0x029000 */ | 231 | u64 d[0x1000 / 8]; /* 0x028000-0x029000 */ |
232 | union { | 232 | union { |
233 | uint8_t c[0x100 / 1]; | 233 | u8 c[0x100 / 1]; |
234 | uint16_t s[0x100 / 2]; | 234 | u16 s[0x100 / 2]; |
235 | uint32_t l[0x100 / 4]; | 235 | u32 l[0x100 / 4]; |
236 | uint64_t d[0x100 / 8]; | 236 | u64 d[0x100 / 8]; |
237 | } f[8]; | 237 | } f[8]; |
238 | } p_type1_cfg; /* 0x028000-0x029000 */ | 238 | } p_type1_cfg; /* 0x028000-0x029000 */ |
239 | 239 | ||
@@ -241,20 +241,20 @@ struct pic { | |||
241 | 241 | ||
242 | /* 0x030000-0x030007 -- PCI Interrupt Acknowledge Cycle */ | 242 | /* 0x030000-0x030007 -- PCI Interrupt Acknowledge Cycle */ |
243 | union { | 243 | union { |
244 | uint8_t c[8 / 1]; | 244 | u8 c[8 / 1]; |
245 | uint16_t s[8 / 2]; | 245 | u16 s[8 / 2]; |
246 | uint32_t l[8 / 4]; | 246 | u32 l[8 / 4]; |
247 | uint64_t d[8 / 8]; | 247 | u64 d[8 / 8]; |
248 | } p_pci_iack; /* 0x030000-0x030007 */ | 248 | } p_pci_iack; /* 0x030000-0x030007 */ |
249 | 249 | ||
250 | char _pad_030007[0x040000-0x030008]; | 250 | char _pad_030007[0x040000-0x030008]; |
251 | 251 | ||
252 | /* 0x040000-0x030007 -- PCIX Special Cycle */ | 252 | /* 0x040000-0x030007 -- PCIX Special Cycle */ |
253 | union { | 253 | union { |
254 | uint8_t c[8 / 1]; | 254 | u8 c[8 / 1]; |
255 | uint16_t s[8 / 2]; | 255 | u16 s[8 / 2]; |
256 | uint32_t l[8 / 4]; | 256 | u32 l[8 / 4]; |
257 | uint64_t d[8 / 8]; | 257 | u64 d[8 / 8]; |
258 | } p_pcix_cycle; /* 0x040000-0x040007 */ | 258 | } p_pcix_cycle; /* 0x040000-0x040007 */ |
259 | }; | 259 | }; |
260 | 260 | ||
diff --git a/include/asm-ia64/sn/shubio.h b/include/asm-ia64/sn/shubio.h index 831b72111fdc..22a6f18a5313 100644 --- a/include/asm-ia64/sn/shubio.h +++ b/include/asm-ia64/sn/shubio.h | |||
@@ -227,13 +227,13 @@ | |||
227 | ************************************************************************/ | 227 | ************************************************************************/ |
228 | 228 | ||
229 | typedef union ii_wid_u { | 229 | typedef union ii_wid_u { |
230 | uint64_t ii_wid_regval; | 230 | u64 ii_wid_regval; |
231 | struct { | 231 | struct { |
232 | uint64_t w_rsvd_1:1; | 232 | u64 w_rsvd_1:1; |
233 | uint64_t w_mfg_num:11; | 233 | u64 w_mfg_num:11; |
234 | uint64_t w_part_num:16; | 234 | u64 w_part_num:16; |
235 | uint64_t w_rev_num:4; | 235 | u64 w_rev_num:4; |
236 | uint64_t w_rsvd:32; | 236 | u64 w_rsvd:32; |
237 | } ii_wid_fld_s; | 237 | } ii_wid_fld_s; |
238 | } ii_wid_u_t; | 238 | } ii_wid_u_t; |
239 | 239 | ||
@@ -246,18 +246,18 @@ typedef union ii_wid_u { | |||
246 | ************************************************************************/ | 246 | ************************************************************************/ |
247 | 247 | ||
248 | typedef union ii_wstat_u { | 248 | typedef union ii_wstat_u { |
249 | uint64_t ii_wstat_regval; | 249 | u64 ii_wstat_regval; |
250 | struct { | 250 | struct { |
251 | uint64_t w_pending:4; | 251 | u64 w_pending:4; |
252 | uint64_t w_xt_crd_to:1; | 252 | u64 w_xt_crd_to:1; |
253 | uint64_t w_xt_tail_to:1; | 253 | u64 w_xt_tail_to:1; |
254 | uint64_t w_rsvd_3:3; | 254 | u64 w_rsvd_3:3; |
255 | uint64_t w_tx_mx_rty:1; | 255 | u64 w_tx_mx_rty:1; |
256 | uint64_t w_rsvd_2:6; | 256 | u64 w_rsvd_2:6; |
257 | uint64_t w_llp_tx_cnt:8; | 257 | u64 w_llp_tx_cnt:8; |
258 | uint64_t w_rsvd_1:8; | 258 | u64 w_rsvd_1:8; |
259 | uint64_t w_crazy:1; | 259 | u64 w_crazy:1; |
260 | uint64_t w_rsvd:31; | 260 | u64 w_rsvd:31; |
261 | } ii_wstat_fld_s; | 261 | } ii_wstat_fld_s; |
262 | } ii_wstat_u_t; | 262 | } ii_wstat_u_t; |
263 | 263 | ||
@@ -269,16 +269,16 @@ typedef union ii_wstat_u { | |||
269 | ************************************************************************/ | 269 | ************************************************************************/ |
270 | 270 | ||
271 | typedef union ii_wcr_u { | 271 | typedef union ii_wcr_u { |
272 | uint64_t ii_wcr_regval; | 272 | u64 ii_wcr_regval; |
273 | struct { | 273 | struct { |
274 | uint64_t w_wid:4; | 274 | u64 w_wid:4; |
275 | uint64_t w_tag:1; | 275 | u64 w_tag:1; |
276 | uint64_t w_rsvd_1:8; | 276 | u64 w_rsvd_1:8; |
277 | uint64_t w_dst_crd:3; | 277 | u64 w_dst_crd:3; |
278 | uint64_t w_f_bad_pkt:1; | 278 | u64 w_f_bad_pkt:1; |
279 | uint64_t w_dir_con:1; | 279 | u64 w_dir_con:1; |
280 | uint64_t w_e_thresh:5; | 280 | u64 w_e_thresh:5; |
281 | uint64_t w_rsvd:41; | 281 | u64 w_rsvd:41; |
282 | } ii_wcr_fld_s; | 282 | } ii_wcr_fld_s; |
283 | } ii_wcr_u_t; | 283 | } ii_wcr_u_t; |
284 | 284 | ||
@@ -310,9 +310,9 @@ typedef union ii_wcr_u { | |||
310 | ************************************************************************/ | 310 | ************************************************************************/ |
311 | 311 | ||
312 | typedef union ii_ilapr_u { | 312 | typedef union ii_ilapr_u { |
313 | uint64_t ii_ilapr_regval; | 313 | u64 ii_ilapr_regval; |
314 | struct { | 314 | struct { |
315 | uint64_t i_region:64; | 315 | u64 i_region:64; |
316 | } ii_ilapr_fld_s; | 316 | } ii_ilapr_fld_s; |
317 | } ii_ilapr_u_t; | 317 | } ii_ilapr_u_t; |
318 | 318 | ||
@@ -330,9 +330,9 @@ typedef union ii_ilapr_u { | |||
330 | ************************************************************************/ | 330 | ************************************************************************/ |
331 | 331 | ||
332 | typedef union ii_ilapo_u { | 332 | typedef union ii_ilapo_u { |
333 | uint64_t ii_ilapo_regval; | 333 | u64 ii_ilapo_regval; |
334 | struct { | 334 | struct { |
335 | uint64_t i_io_ovrride:64; | 335 | u64 i_io_ovrride:64; |
336 | } ii_ilapo_fld_s; | 336 | } ii_ilapo_fld_s; |
337 | } ii_ilapo_u_t; | 337 | } ii_ilapo_u_t; |
338 | 338 | ||
@@ -344,12 +344,12 @@ typedef union ii_ilapo_u { | |||
344 | ************************************************************************/ | 344 | ************************************************************************/ |
345 | 345 | ||
346 | typedef union ii_iowa_u { | 346 | typedef union ii_iowa_u { |
347 | uint64_t ii_iowa_regval; | 347 | u64 ii_iowa_regval; |
348 | struct { | 348 | struct { |
349 | uint64_t i_w0_oac:1; | 349 | u64 i_w0_oac:1; |
350 | uint64_t i_rsvd_1:7; | 350 | u64 i_rsvd_1:7; |
351 | uint64_t i_wx_oac:8; | 351 | u64 i_wx_oac:8; |
352 | uint64_t i_rsvd:48; | 352 | u64 i_rsvd:48; |
353 | } ii_iowa_fld_s; | 353 | } ii_iowa_fld_s; |
354 | } ii_iowa_u_t; | 354 | } ii_iowa_u_t; |
355 | 355 | ||
@@ -363,12 +363,12 @@ typedef union ii_iowa_u { | |||
363 | ************************************************************************/ | 363 | ************************************************************************/ |
364 | 364 | ||
365 | typedef union ii_iiwa_u { | 365 | typedef union ii_iiwa_u { |
366 | uint64_t ii_iiwa_regval; | 366 | u64 ii_iiwa_regval; |
367 | struct { | 367 | struct { |
368 | uint64_t i_w0_iac:1; | 368 | u64 i_w0_iac:1; |
369 | uint64_t i_rsvd_1:7; | 369 | u64 i_rsvd_1:7; |
370 | uint64_t i_wx_iac:8; | 370 | u64 i_wx_iac:8; |
371 | uint64_t i_rsvd:48; | 371 | u64 i_rsvd:48; |
372 | } ii_iiwa_fld_s; | 372 | } ii_iiwa_fld_s; |
373 | } ii_iiwa_u_t; | 373 | } ii_iiwa_u_t; |
374 | 374 | ||
@@ -392,16 +392,16 @@ typedef union ii_iiwa_u { | |||
392 | ************************************************************************/ | 392 | ************************************************************************/ |
393 | 393 | ||
394 | typedef union ii_iidem_u { | 394 | typedef union ii_iidem_u { |
395 | uint64_t ii_iidem_regval; | 395 | u64 ii_iidem_regval; |
396 | struct { | 396 | struct { |
397 | uint64_t i_w8_dxs:8; | 397 | u64 i_w8_dxs:8; |
398 | uint64_t i_w9_dxs:8; | 398 | u64 i_w9_dxs:8; |
399 | uint64_t i_wa_dxs:8; | 399 | u64 i_wa_dxs:8; |
400 | uint64_t i_wb_dxs:8; | 400 | u64 i_wb_dxs:8; |
401 | uint64_t i_wc_dxs:8; | 401 | u64 i_wc_dxs:8; |
402 | uint64_t i_wd_dxs:8; | 402 | u64 i_wd_dxs:8; |
403 | uint64_t i_we_dxs:8; | 403 | u64 i_we_dxs:8; |
404 | uint64_t i_wf_dxs:8; | 404 | u64 i_wf_dxs:8; |
405 | } ii_iidem_fld_s; | 405 | } ii_iidem_fld_s; |
406 | } ii_iidem_u_t; | 406 | } ii_iidem_u_t; |
407 | 407 | ||
@@ -413,22 +413,22 @@ typedef union ii_iidem_u { | |||
413 | ************************************************************************/ | 413 | ************************************************************************/ |
414 | 414 | ||
415 | typedef union ii_ilcsr_u { | 415 | typedef union ii_ilcsr_u { |
416 | uint64_t ii_ilcsr_regval; | 416 | u64 ii_ilcsr_regval; |
417 | struct { | 417 | struct { |
418 | uint64_t i_nullto:6; | 418 | u64 i_nullto:6; |
419 | uint64_t i_rsvd_4:2; | 419 | u64 i_rsvd_4:2; |
420 | uint64_t i_wrmrst:1; | 420 | u64 i_wrmrst:1; |
421 | uint64_t i_rsvd_3:1; | 421 | u64 i_rsvd_3:1; |
422 | uint64_t i_llp_en:1; | 422 | u64 i_llp_en:1; |
423 | uint64_t i_bm8:1; | 423 | u64 i_bm8:1; |
424 | uint64_t i_llp_stat:2; | 424 | u64 i_llp_stat:2; |
425 | uint64_t i_remote_power:1; | 425 | u64 i_remote_power:1; |
426 | uint64_t i_rsvd_2:1; | 426 | u64 i_rsvd_2:1; |
427 | uint64_t i_maxrtry:10; | 427 | u64 i_maxrtry:10; |
428 | uint64_t i_d_avail_sel:2; | 428 | u64 i_d_avail_sel:2; |
429 | uint64_t i_rsvd_1:4; | 429 | u64 i_rsvd_1:4; |
430 | uint64_t i_maxbrst:10; | 430 | u64 i_maxbrst:10; |
431 | uint64_t i_rsvd:22; | 431 | u64 i_rsvd:22; |
432 | 432 | ||
433 | } ii_ilcsr_fld_s; | 433 | } ii_ilcsr_fld_s; |
434 | } ii_ilcsr_u_t; | 434 | } ii_ilcsr_u_t; |
@@ -441,11 +441,11 @@ typedef union ii_ilcsr_u { | |||
441 | ************************************************************************/ | 441 | ************************************************************************/ |
442 | 442 | ||
443 | typedef union ii_illr_u { | 443 | typedef union ii_illr_u { |
444 | uint64_t ii_illr_regval; | 444 | u64 ii_illr_regval; |
445 | struct { | 445 | struct { |
446 | uint64_t i_sn_cnt:16; | 446 | u64 i_sn_cnt:16; |
447 | uint64_t i_cb_cnt:16; | 447 | u64 i_cb_cnt:16; |
448 | uint64_t i_rsvd:32; | 448 | u64 i_rsvd:32; |
449 | } ii_illr_fld_s; | 449 | } ii_illr_fld_s; |
450 | } ii_illr_u_t; | 450 | } ii_illr_u_t; |
451 | 451 | ||
@@ -464,19 +464,19 @@ typedef union ii_illr_u { | |||
464 | ************************************************************************/ | 464 | ************************************************************************/ |
465 | 465 | ||
466 | typedef union ii_iidsr_u { | 466 | typedef union ii_iidsr_u { |
467 | uint64_t ii_iidsr_regval; | 467 | u64 ii_iidsr_regval; |
468 | struct { | 468 | struct { |
469 | uint64_t i_level:8; | 469 | u64 i_level:8; |
470 | uint64_t i_pi_id:1; | 470 | u64 i_pi_id:1; |
471 | uint64_t i_node:11; | 471 | u64 i_node:11; |
472 | uint64_t i_rsvd_3:4; | 472 | u64 i_rsvd_3:4; |
473 | uint64_t i_enable:1; | 473 | u64 i_enable:1; |
474 | uint64_t i_rsvd_2:3; | 474 | u64 i_rsvd_2:3; |
475 | uint64_t i_int_sent:2; | 475 | u64 i_int_sent:2; |
476 | uint64_t i_rsvd_1:2; | 476 | u64 i_rsvd_1:2; |
477 | uint64_t i_pi0_forward_int:1; | 477 | u64 i_pi0_forward_int:1; |
478 | uint64_t i_pi1_forward_int:1; | 478 | u64 i_pi1_forward_int:1; |
479 | uint64_t i_rsvd:30; | 479 | u64 i_rsvd:30; |
480 | } ii_iidsr_fld_s; | 480 | } ii_iidsr_fld_s; |
481 | } ii_iidsr_u_t; | 481 | } ii_iidsr_u_t; |
482 | 482 | ||
@@ -492,13 +492,13 @@ typedef union ii_iidsr_u { | |||
492 | ************************************************************************/ | 492 | ************************************************************************/ |
493 | 493 | ||
494 | typedef union ii_igfx0_u { | 494 | typedef union ii_igfx0_u { |
495 | uint64_t ii_igfx0_regval; | 495 | u64 ii_igfx0_regval; |
496 | struct { | 496 | struct { |
497 | uint64_t i_w_num:4; | 497 | u64 i_w_num:4; |
498 | uint64_t i_pi_id:1; | 498 | u64 i_pi_id:1; |
499 | uint64_t i_n_num:12; | 499 | u64 i_n_num:12; |
500 | uint64_t i_p_num:1; | 500 | u64 i_p_num:1; |
501 | uint64_t i_rsvd:46; | 501 | u64 i_rsvd:46; |
502 | } ii_igfx0_fld_s; | 502 | } ii_igfx0_fld_s; |
503 | } ii_igfx0_u_t; | 503 | } ii_igfx0_u_t; |
504 | 504 | ||
@@ -514,13 +514,13 @@ typedef union ii_igfx0_u { | |||
514 | ************************************************************************/ | 514 | ************************************************************************/ |
515 | 515 | ||
516 | typedef union ii_igfx1_u { | 516 | typedef union ii_igfx1_u { |
517 | uint64_t ii_igfx1_regval; | 517 | u64 ii_igfx1_regval; |
518 | struct { | 518 | struct { |
519 | uint64_t i_w_num:4; | 519 | u64 i_w_num:4; |
520 | uint64_t i_pi_id:1; | 520 | u64 i_pi_id:1; |
521 | uint64_t i_n_num:12; | 521 | u64 i_n_num:12; |
522 | uint64_t i_p_num:1; | 522 | u64 i_p_num:1; |
523 | uint64_t i_rsvd:46; | 523 | u64 i_rsvd:46; |
524 | } ii_igfx1_fld_s; | 524 | } ii_igfx1_fld_s; |
525 | } ii_igfx1_u_t; | 525 | } ii_igfx1_u_t; |
526 | 526 | ||
@@ -532,9 +532,9 @@ typedef union ii_igfx1_u { | |||
532 | ************************************************************************/ | 532 | ************************************************************************/ |
533 | 533 | ||
534 | typedef union ii_iscr0_u { | 534 | typedef union ii_iscr0_u { |
535 | uint64_t ii_iscr0_regval; | 535 | u64 ii_iscr0_regval; |
536 | struct { | 536 | struct { |
537 | uint64_t i_scratch:64; | 537 | u64 i_scratch:64; |
538 | } ii_iscr0_fld_s; | 538 | } ii_iscr0_fld_s; |
539 | } ii_iscr0_u_t; | 539 | } ii_iscr0_u_t; |
540 | 540 | ||
@@ -546,9 +546,9 @@ typedef union ii_iscr0_u { | |||
546 | ************************************************************************/ | 546 | ************************************************************************/ |
547 | 547 | ||
548 | typedef union ii_iscr1_u { | 548 | typedef union ii_iscr1_u { |
549 | uint64_t ii_iscr1_regval; | 549 | u64 ii_iscr1_regval; |
550 | struct { | 550 | struct { |
551 | uint64_t i_scratch:64; | 551 | u64 i_scratch:64; |
552 | } ii_iscr1_fld_s; | 552 | } ii_iscr1_fld_s; |
553 | } ii_iscr1_u_t; | 553 | } ii_iscr1_u_t; |
554 | 554 | ||
@@ -580,13 +580,13 @@ typedef union ii_iscr1_u { | |||
580 | ************************************************************************/ | 580 | ************************************************************************/ |
581 | 581 | ||
582 | typedef union ii_itte1_u { | 582 | typedef union ii_itte1_u { |
583 | uint64_t ii_itte1_regval; | 583 | u64 ii_itte1_regval; |
584 | struct { | 584 | struct { |
585 | uint64_t i_offset:5; | 585 | u64 i_offset:5; |
586 | uint64_t i_rsvd_1:3; | 586 | u64 i_rsvd_1:3; |
587 | uint64_t i_w_num:4; | 587 | u64 i_w_num:4; |
588 | uint64_t i_iosp:1; | 588 | u64 i_iosp:1; |
589 | uint64_t i_rsvd:51; | 589 | u64 i_rsvd:51; |
590 | } ii_itte1_fld_s; | 590 | } ii_itte1_fld_s; |
591 | } ii_itte1_u_t; | 591 | } ii_itte1_u_t; |
592 | 592 | ||
@@ -618,13 +618,13 @@ typedef union ii_itte1_u { | |||
618 | ************************************************************************/ | 618 | ************************************************************************/ |
619 | 619 | ||
620 | typedef union ii_itte2_u { | 620 | typedef union ii_itte2_u { |
621 | uint64_t ii_itte2_regval; | 621 | u64 ii_itte2_regval; |
622 | struct { | 622 | struct { |
623 | uint64_t i_offset:5; | 623 | u64 i_offset:5; |
624 | uint64_t i_rsvd_1:3; | 624 | u64 i_rsvd_1:3; |
625 | uint64_t i_w_num:4; | 625 | u64 i_w_num:4; |
626 | uint64_t i_iosp:1; | 626 | u64 i_iosp:1; |
627 | uint64_t i_rsvd:51; | 627 | u64 i_rsvd:51; |
628 | } ii_itte2_fld_s; | 628 | } ii_itte2_fld_s; |
629 | } ii_itte2_u_t; | 629 | } ii_itte2_u_t; |
630 | 630 | ||
@@ -656,13 +656,13 @@ typedef union ii_itte2_u { | |||
656 | ************************************************************************/ | 656 | ************************************************************************/ |
657 | 657 | ||
658 | typedef union ii_itte3_u { | 658 | typedef union ii_itte3_u { |
659 | uint64_t ii_itte3_regval; | 659 | u64 ii_itte3_regval; |
660 | struct { | 660 | struct { |
661 | uint64_t i_offset:5; | 661 | u64 i_offset:5; |
662 | uint64_t i_rsvd_1:3; | 662 | u64 i_rsvd_1:3; |
663 | uint64_t i_w_num:4; | 663 | u64 i_w_num:4; |
664 | uint64_t i_iosp:1; | 664 | u64 i_iosp:1; |
665 | uint64_t i_rsvd:51; | 665 | u64 i_rsvd:51; |
666 | } ii_itte3_fld_s; | 666 | } ii_itte3_fld_s; |
667 | } ii_itte3_u_t; | 667 | } ii_itte3_u_t; |
668 | 668 | ||
@@ -694,13 +694,13 @@ typedef union ii_itte3_u { | |||
694 | ************************************************************************/ | 694 | ************************************************************************/ |
695 | 695 | ||
696 | typedef union ii_itte4_u { | 696 | typedef union ii_itte4_u { |
697 | uint64_t ii_itte4_regval; | 697 | u64 ii_itte4_regval; |
698 | struct { | 698 | struct { |
699 | uint64_t i_offset:5; | 699 | u64 i_offset:5; |
700 | uint64_t i_rsvd_1:3; | 700 | u64 i_rsvd_1:3; |
701 | uint64_t i_w_num:4; | 701 | u64 i_w_num:4; |
702 | uint64_t i_iosp:1; | 702 | u64 i_iosp:1; |
703 | uint64_t i_rsvd:51; | 703 | u64 i_rsvd:51; |
704 | } ii_itte4_fld_s; | 704 | } ii_itte4_fld_s; |
705 | } ii_itte4_u_t; | 705 | } ii_itte4_u_t; |
706 | 706 | ||
@@ -732,13 +732,13 @@ typedef union ii_itte4_u { | |||
732 | ************************************************************************/ | 732 | ************************************************************************/ |
733 | 733 | ||
734 | typedef union ii_itte5_u { | 734 | typedef union ii_itte5_u { |
735 | uint64_t ii_itte5_regval; | 735 | u64 ii_itte5_regval; |
736 | struct { | 736 | struct { |
737 | uint64_t i_offset:5; | 737 | u64 i_offset:5; |
738 | uint64_t i_rsvd_1:3; | 738 | u64 i_rsvd_1:3; |
739 | uint64_t i_w_num:4; | 739 | u64 i_w_num:4; |
740 | uint64_t i_iosp:1; | 740 | u64 i_iosp:1; |
741 | uint64_t i_rsvd:51; | 741 | u64 i_rsvd:51; |
742 | } ii_itte5_fld_s; | 742 | } ii_itte5_fld_s; |
743 | } ii_itte5_u_t; | 743 | } ii_itte5_u_t; |
744 | 744 | ||
@@ -770,13 +770,13 @@ typedef union ii_itte5_u { | |||
770 | ************************************************************************/ | 770 | ************************************************************************/ |
771 | 771 | ||
772 | typedef union ii_itte6_u { | 772 | typedef union ii_itte6_u { |
773 | uint64_t ii_itte6_regval; | 773 | u64 ii_itte6_regval; |
774 | struct { | 774 | struct { |
775 | uint64_t i_offset:5; | 775 | u64 i_offset:5; |
776 | uint64_t i_rsvd_1:3; | 776 | u64 i_rsvd_1:3; |
777 | uint64_t i_w_num:4; | 777 | u64 i_w_num:4; |
778 | uint64_t i_iosp:1; | 778 | u64 i_iosp:1; |
779 | uint64_t i_rsvd:51; | 779 | u64 i_rsvd:51; |
780 | } ii_itte6_fld_s; | 780 | } ii_itte6_fld_s; |
781 | } ii_itte6_u_t; | 781 | } ii_itte6_u_t; |
782 | 782 | ||
@@ -808,13 +808,13 @@ typedef union ii_itte6_u { | |||
808 | ************************************************************************/ | 808 | ************************************************************************/ |
809 | 809 | ||
810 | typedef union ii_itte7_u { | 810 | typedef union ii_itte7_u { |
811 | uint64_t ii_itte7_regval; | 811 | u64 ii_itte7_regval; |
812 | struct { | 812 | struct { |
813 | uint64_t i_offset:5; | 813 | u64 i_offset:5; |
814 | uint64_t i_rsvd_1:3; | 814 | u64 i_rsvd_1:3; |
815 | uint64_t i_w_num:4; | 815 | u64 i_w_num:4; |
816 | uint64_t i_iosp:1; | 816 | u64 i_iosp:1; |
817 | uint64_t i_rsvd:51; | 817 | u64 i_rsvd:51; |
818 | } ii_itte7_fld_s; | 818 | } ii_itte7_fld_s; |
819 | } ii_itte7_u_t; | 819 | } ii_itte7_u_t; |
820 | 820 | ||
@@ -843,22 +843,22 @@ typedef union ii_itte7_u { | |||
843 | ************************************************************************/ | 843 | ************************************************************************/ |
844 | 844 | ||
845 | typedef union ii_iprb0_u { | 845 | typedef union ii_iprb0_u { |
846 | uint64_t ii_iprb0_regval; | 846 | u64 ii_iprb0_regval; |
847 | struct { | 847 | struct { |
848 | uint64_t i_c:8; | 848 | u64 i_c:8; |
849 | uint64_t i_na:14; | 849 | u64 i_na:14; |
850 | uint64_t i_rsvd_2:2; | 850 | u64 i_rsvd_2:2; |
851 | uint64_t i_nb:14; | 851 | u64 i_nb:14; |
852 | uint64_t i_rsvd_1:2; | 852 | u64 i_rsvd_1:2; |
853 | uint64_t i_m:2; | 853 | u64 i_m:2; |
854 | uint64_t i_f:1; | 854 | u64 i_f:1; |
855 | uint64_t i_of_cnt:5; | 855 | u64 i_of_cnt:5; |
856 | uint64_t i_error:1; | 856 | u64 i_error:1; |
857 | uint64_t i_rd_to:1; | 857 | u64 i_rd_to:1; |
858 | uint64_t i_spur_wr:1; | 858 | u64 i_spur_wr:1; |
859 | uint64_t i_spur_rd:1; | 859 | u64 i_spur_rd:1; |
860 | uint64_t i_rsvd:11; | 860 | u64 i_rsvd:11; |
861 | uint64_t i_mult_err:1; | 861 | u64 i_mult_err:1; |
862 | } ii_iprb0_fld_s; | 862 | } ii_iprb0_fld_s; |
863 | } ii_iprb0_u_t; | 863 | } ii_iprb0_u_t; |
864 | 864 | ||
@@ -887,22 +887,22 @@ typedef union ii_iprb0_u { | |||
887 | ************************************************************************/ | 887 | ************************************************************************/ |
888 | 888 | ||
889 | typedef union ii_iprb8_u { | 889 | typedef union ii_iprb8_u { |
890 | uint64_t ii_iprb8_regval; | 890 | u64 ii_iprb8_regval; |
891 | struct { | 891 | struct { |
892 | uint64_t i_c:8; | 892 | u64 i_c:8; |
893 | uint64_t i_na:14; | 893 | u64 i_na:14; |
894 | uint64_t i_rsvd_2:2; | 894 | u64 i_rsvd_2:2; |
895 | uint64_t i_nb:14; | 895 | u64 i_nb:14; |
896 | uint64_t i_rsvd_1:2; | 896 | u64 i_rsvd_1:2; |
897 | uint64_t i_m:2; | 897 | u64 i_m:2; |
898 | uint64_t i_f:1; | 898 | u64 i_f:1; |
899 | uint64_t i_of_cnt:5; | 899 | u64 i_of_cnt:5; |
900 | uint64_t i_error:1; | 900 | u64 i_error:1; |
901 | uint64_t i_rd_to:1; | 901 | u64 i_rd_to:1; |
902 | uint64_t i_spur_wr:1; | 902 | u64 i_spur_wr:1; |
903 | uint64_t i_spur_rd:1; | 903 | u64 i_spur_rd:1; |
904 | uint64_t i_rsvd:11; | 904 | u64 i_rsvd:11; |
905 | uint64_t i_mult_err:1; | 905 | u64 i_mult_err:1; |
906 | } ii_iprb8_fld_s; | 906 | } ii_iprb8_fld_s; |
907 | } ii_iprb8_u_t; | 907 | } ii_iprb8_u_t; |
908 | 908 | ||
@@ -931,22 +931,22 @@ typedef union ii_iprb8_u { | |||
931 | ************************************************************************/ | 931 | ************************************************************************/ |
932 | 932 | ||
933 | typedef union ii_iprb9_u { | 933 | typedef union ii_iprb9_u { |
934 | uint64_t ii_iprb9_regval; | 934 | u64 ii_iprb9_regval; |
935 | struct { | 935 | struct { |
936 | uint64_t i_c:8; | 936 | u64 i_c:8; |
937 | uint64_t i_na:14; | 937 | u64 i_na:14; |
938 | uint64_t i_rsvd_2:2; | 938 | u64 i_rsvd_2:2; |
939 | uint64_t i_nb:14; | 939 | u64 i_nb:14; |
940 | uint64_t i_rsvd_1:2; | 940 | u64 i_rsvd_1:2; |
941 | uint64_t i_m:2; | 941 | u64 i_m:2; |
942 | uint64_t i_f:1; | 942 | u64 i_f:1; |
943 | uint64_t i_of_cnt:5; | 943 | u64 i_of_cnt:5; |
944 | uint64_t i_error:1; | 944 | u64 i_error:1; |
945 | uint64_t i_rd_to:1; | 945 | u64 i_rd_to:1; |
946 | uint64_t i_spur_wr:1; | 946 | u64 i_spur_wr:1; |
947 | uint64_t i_spur_rd:1; | 947 | u64 i_spur_rd:1; |
948 | uint64_t i_rsvd:11; | 948 | u64 i_rsvd:11; |
949 | uint64_t i_mult_err:1; | 949 | u64 i_mult_err:1; |
950 | } ii_iprb9_fld_s; | 950 | } ii_iprb9_fld_s; |
951 | } ii_iprb9_u_t; | 951 | } ii_iprb9_u_t; |
952 | 952 | ||
@@ -975,22 +975,22 @@ typedef union ii_iprb9_u { | |||
975 | ************************************************************************/ | 975 | ************************************************************************/ |
976 | 976 | ||
977 | typedef union ii_iprba_u { | 977 | typedef union ii_iprba_u { |
978 | uint64_t ii_iprba_regval; | 978 | u64 ii_iprba_regval; |
979 | struct { | 979 | struct { |
980 | uint64_t i_c:8; | 980 | u64 i_c:8; |
981 | uint64_t i_na:14; | 981 | u64 i_na:14; |
982 | uint64_t i_rsvd_2:2; | 982 | u64 i_rsvd_2:2; |
983 | uint64_t i_nb:14; | 983 | u64 i_nb:14; |
984 | uint64_t i_rsvd_1:2; | 984 | u64 i_rsvd_1:2; |
985 | uint64_t i_m:2; | 985 | u64 i_m:2; |
986 | uint64_t i_f:1; | 986 | u64 i_f:1; |
987 | uint64_t i_of_cnt:5; | 987 | u64 i_of_cnt:5; |
988 | uint64_t i_error:1; | 988 | u64 i_error:1; |
989 | uint64_t i_rd_to:1; | 989 | u64 i_rd_to:1; |
990 | uint64_t i_spur_wr:1; | 990 | u64 i_spur_wr:1; |
991 | uint64_t i_spur_rd:1; | 991 | u64 i_spur_rd:1; |
992 | uint64_t i_rsvd:11; | 992 | u64 i_rsvd:11; |
993 | uint64_t i_mult_err:1; | 993 | u64 i_mult_err:1; |
994 | } ii_iprba_fld_s; | 994 | } ii_iprba_fld_s; |
995 | } ii_iprba_u_t; | 995 | } ii_iprba_u_t; |
996 | 996 | ||
@@ -1019,22 +1019,22 @@ typedef union ii_iprba_u { | |||
1019 | ************************************************************************/ | 1019 | ************************************************************************/ |
1020 | 1020 | ||
1021 | typedef union ii_iprbb_u { | 1021 | typedef union ii_iprbb_u { |
1022 | uint64_t ii_iprbb_regval; | 1022 | u64 ii_iprbb_regval; |
1023 | struct { | 1023 | struct { |
1024 | uint64_t i_c:8; | 1024 | u64 i_c:8; |
1025 | uint64_t i_na:14; | 1025 | u64 i_na:14; |
1026 | uint64_t i_rsvd_2:2; | 1026 | u64 i_rsvd_2:2; |
1027 | uint64_t i_nb:14; | 1027 | u64 i_nb:14; |
1028 | uint64_t i_rsvd_1:2; | 1028 | u64 i_rsvd_1:2; |
1029 | uint64_t i_m:2; | 1029 | u64 i_m:2; |
1030 | uint64_t i_f:1; | 1030 | u64 i_f:1; |
1031 | uint64_t i_of_cnt:5; | 1031 | u64 i_of_cnt:5; |
1032 | uint64_t i_error:1; | 1032 | u64 i_error:1; |
1033 | uint64_t i_rd_to:1; | 1033 | u64 i_rd_to:1; |
1034 | uint64_t i_spur_wr:1; | 1034 | u64 i_spur_wr:1; |
1035 | uint64_t i_spur_rd:1; | 1035 | u64 i_spur_rd:1; |
1036 | uint64_t i_rsvd:11; | 1036 | u64 i_rsvd:11; |
1037 | uint64_t i_mult_err:1; | 1037 | u64 i_mult_err:1; |
1038 | } ii_iprbb_fld_s; | 1038 | } ii_iprbb_fld_s; |
1039 | } ii_iprbb_u_t; | 1039 | } ii_iprbb_u_t; |
1040 | 1040 | ||
@@ -1063,22 +1063,22 @@ typedef union ii_iprbb_u { | |||
1063 | ************************************************************************/ | 1063 | ************************************************************************/ |
1064 | 1064 | ||
1065 | typedef union ii_iprbc_u { | 1065 | typedef union ii_iprbc_u { |
1066 | uint64_t ii_iprbc_regval; | 1066 | u64 ii_iprbc_regval; |
1067 | struct { | 1067 | struct { |
1068 | uint64_t i_c:8; | 1068 | u64 i_c:8; |
1069 | uint64_t i_na:14; | 1069 | u64 i_na:14; |
1070 | uint64_t i_rsvd_2:2; | 1070 | u64 i_rsvd_2:2; |
1071 | uint64_t i_nb:14; | 1071 | u64 i_nb:14; |
1072 | uint64_t i_rsvd_1:2; | 1072 | u64 i_rsvd_1:2; |
1073 | uint64_t i_m:2; | 1073 | u64 i_m:2; |
1074 | uint64_t i_f:1; | 1074 | u64 i_f:1; |
1075 | uint64_t i_of_cnt:5; | 1075 | u64 i_of_cnt:5; |
1076 | uint64_t i_error:1; | 1076 | u64 i_error:1; |
1077 | uint64_t i_rd_to:1; | 1077 | u64 i_rd_to:1; |
1078 | uint64_t i_spur_wr:1; | 1078 | u64 i_spur_wr:1; |
1079 | uint64_t i_spur_rd:1; | 1079 | u64 i_spur_rd:1; |
1080 | uint64_t i_rsvd:11; | 1080 | u64 i_rsvd:11; |
1081 | uint64_t i_mult_err:1; | 1081 | u64 i_mult_err:1; |
1082 | } ii_iprbc_fld_s; | 1082 | } ii_iprbc_fld_s; |
1083 | } ii_iprbc_u_t; | 1083 | } ii_iprbc_u_t; |
1084 | 1084 | ||
@@ -1107,22 +1107,22 @@ typedef union ii_iprbc_u { | |||
1107 | ************************************************************************/ | 1107 | ************************************************************************/ |
1108 | 1108 | ||
1109 | typedef union ii_iprbd_u { | 1109 | typedef union ii_iprbd_u { |
1110 | uint64_t ii_iprbd_regval; | 1110 | u64 ii_iprbd_regval; |
1111 | struct { | 1111 | struct { |
1112 | uint64_t i_c:8; | 1112 | u64 i_c:8; |
1113 | uint64_t i_na:14; | 1113 | u64 i_na:14; |
1114 | uint64_t i_rsvd_2:2; | 1114 | u64 i_rsvd_2:2; |
1115 | uint64_t i_nb:14; | 1115 | u64 i_nb:14; |
1116 | uint64_t i_rsvd_1:2; | 1116 | u64 i_rsvd_1:2; |
1117 | uint64_t i_m:2; | 1117 | u64 i_m:2; |
1118 | uint64_t i_f:1; | 1118 | u64 i_f:1; |
1119 | uint64_t i_of_cnt:5; | 1119 | u64 i_of_cnt:5; |
1120 | uint64_t i_error:1; | 1120 | u64 i_error:1; |
1121 | uint64_t i_rd_to:1; | 1121 | u64 i_rd_to:1; |
1122 | uint64_t i_spur_wr:1; | 1122 | u64 i_spur_wr:1; |
1123 | uint64_t i_spur_rd:1; | 1123 | u64 i_spur_rd:1; |
1124 | uint64_t i_rsvd:11; | 1124 | u64 i_rsvd:11; |
1125 | uint64_t i_mult_err:1; | 1125 | u64 i_mult_err:1; |
1126 | } ii_iprbd_fld_s; | 1126 | } ii_iprbd_fld_s; |
1127 | } ii_iprbd_u_t; | 1127 | } ii_iprbd_u_t; |
1128 | 1128 | ||
@@ -1151,22 +1151,22 @@ typedef union ii_iprbd_u { | |||
1151 | ************************************************************************/ | 1151 | ************************************************************************/ |
1152 | 1152 | ||
1153 | typedef union ii_iprbe_u { | 1153 | typedef union ii_iprbe_u { |
1154 | uint64_t ii_iprbe_regval; | 1154 | u64 ii_iprbe_regval; |
1155 | struct { | 1155 | struct { |
1156 | uint64_t i_c:8; | 1156 | u64 i_c:8; |
1157 | uint64_t i_na:14; | 1157 | u64 i_na:14; |
1158 | uint64_t i_rsvd_2:2; | 1158 | u64 i_rsvd_2:2; |
1159 | uint64_t i_nb:14; | 1159 | u64 i_nb:14; |
1160 | uint64_t i_rsvd_1:2; | 1160 | u64 i_rsvd_1:2; |
1161 | uint64_t i_m:2; | 1161 | u64 i_m:2; |
1162 | uint64_t i_f:1; | 1162 | u64 i_f:1; |
1163 | uint64_t i_of_cnt:5; | 1163 | u64 i_of_cnt:5; |
1164 | uint64_t i_error:1; | 1164 | u64 i_error:1; |
1165 | uint64_t i_rd_to:1; | 1165 | u64 i_rd_to:1; |
1166 | uint64_t i_spur_wr:1; | 1166 | u64 i_spur_wr:1; |
1167 | uint64_t i_spur_rd:1; | 1167 | u64 i_spur_rd:1; |
1168 | uint64_t i_rsvd:11; | 1168 | u64 i_rsvd:11; |
1169 | uint64_t i_mult_err:1; | 1169 | u64 i_mult_err:1; |
1170 | } ii_iprbe_fld_s; | 1170 | } ii_iprbe_fld_s; |
1171 | } ii_iprbe_u_t; | 1171 | } ii_iprbe_u_t; |
1172 | 1172 | ||
@@ -1195,22 +1195,22 @@ typedef union ii_iprbe_u { | |||
1195 | ************************************************************************/ | 1195 | ************************************************************************/ |
1196 | 1196 | ||
1197 | typedef union ii_iprbf_u { | 1197 | typedef union ii_iprbf_u { |
1198 | uint64_t ii_iprbf_regval; | 1198 | u64 ii_iprbf_regval; |
1199 | struct { | 1199 | struct { |
1200 | uint64_t i_c:8; | 1200 | u64 i_c:8; |
1201 | uint64_t i_na:14; | 1201 | u64 i_na:14; |
1202 | uint64_t i_rsvd_2:2; | 1202 | u64 i_rsvd_2:2; |
1203 | uint64_t i_nb:14; | 1203 | u64 i_nb:14; |
1204 | uint64_t i_rsvd_1:2; | 1204 | u64 i_rsvd_1:2; |
1205 | uint64_t i_m:2; | 1205 | u64 i_m:2; |
1206 | uint64_t i_f:1; | 1206 | u64 i_f:1; |
1207 | uint64_t i_of_cnt:5; | 1207 | u64 i_of_cnt:5; |
1208 | uint64_t i_error:1; | 1208 | u64 i_error:1; |
1209 | uint64_t i_rd_to:1; | 1209 | u64 i_rd_to:1; |
1210 | uint64_t i_spur_wr:1; | 1210 | u64 i_spur_wr:1; |
1211 | uint64_t i_spur_rd:1; | 1211 | u64 i_spur_rd:1; |
1212 | uint64_t i_rsvd:11; | 1212 | u64 i_rsvd:11; |
1213 | uint64_t i_mult_err:1; | 1213 | u64 i_mult_err:1; |
1214 | } ii_iprbe_fld_s; | 1214 | } ii_iprbe_fld_s; |
1215 | } ii_iprbf_u_t; | 1215 | } ii_iprbf_u_t; |
1216 | 1216 | ||
@@ -1232,10 +1232,10 @@ typedef union ii_iprbf_u { | |||
1232 | ************************************************************************/ | 1232 | ************************************************************************/ |
1233 | 1233 | ||
1234 | typedef union ii_ixcc_u { | 1234 | typedef union ii_ixcc_u { |
1235 | uint64_t ii_ixcc_regval; | 1235 | u64 ii_ixcc_regval; |
1236 | struct { | 1236 | struct { |
1237 | uint64_t i_time_out:26; | 1237 | u64 i_time_out:26; |
1238 | uint64_t i_rsvd:38; | 1238 | u64 i_rsvd:38; |
1239 | } ii_ixcc_fld_s; | 1239 | } ii_ixcc_fld_s; |
1240 | } ii_ixcc_u_t; | 1240 | } ii_ixcc_u_t; |
1241 | 1241 | ||
@@ -1256,16 +1256,16 @@ typedef union ii_ixcc_u { | |||
1256 | ************************************************************************/ | 1256 | ************************************************************************/ |
1257 | 1257 | ||
1258 | typedef union ii_imem_u { | 1258 | typedef union ii_imem_u { |
1259 | uint64_t ii_imem_regval; | 1259 | u64 ii_imem_regval; |
1260 | struct { | 1260 | struct { |
1261 | uint64_t i_w0_esd:1; | 1261 | u64 i_w0_esd:1; |
1262 | uint64_t i_rsvd_3:3; | 1262 | u64 i_rsvd_3:3; |
1263 | uint64_t i_b0_esd:1; | 1263 | u64 i_b0_esd:1; |
1264 | uint64_t i_rsvd_2:3; | 1264 | u64 i_rsvd_2:3; |
1265 | uint64_t i_b1_esd:1; | 1265 | u64 i_b1_esd:1; |
1266 | uint64_t i_rsvd_1:3; | 1266 | u64 i_rsvd_1:3; |
1267 | uint64_t i_clr_precise:1; | 1267 | u64 i_clr_precise:1; |
1268 | uint64_t i_rsvd:51; | 1268 | u64 i_rsvd:51; |
1269 | } ii_imem_fld_s; | 1269 | } ii_imem_fld_s; |
1270 | } ii_imem_u_t; | 1270 | } ii_imem_u_t; |
1271 | 1271 | ||
@@ -1294,13 +1294,13 @@ typedef union ii_imem_u { | |||
1294 | ************************************************************************/ | 1294 | ************************************************************************/ |
1295 | 1295 | ||
1296 | typedef union ii_ixtt_u { | 1296 | typedef union ii_ixtt_u { |
1297 | uint64_t ii_ixtt_regval; | 1297 | u64 ii_ixtt_regval; |
1298 | struct { | 1298 | struct { |
1299 | uint64_t i_tail_to:26; | 1299 | u64 i_tail_to:26; |
1300 | uint64_t i_rsvd_1:6; | 1300 | u64 i_rsvd_1:6; |
1301 | uint64_t i_rrsp_ps:23; | 1301 | u64 i_rrsp_ps:23; |
1302 | uint64_t i_rrsp_to:5; | 1302 | u64 i_rrsp_to:5; |
1303 | uint64_t i_rsvd:4; | 1303 | u64 i_rsvd:4; |
1304 | } ii_ixtt_fld_s; | 1304 | } ii_ixtt_fld_s; |
1305 | } ii_ixtt_u_t; | 1305 | } ii_ixtt_u_t; |
1306 | 1306 | ||
@@ -1316,37 +1316,37 @@ typedef union ii_ixtt_u { | |||
1316 | ************************************************************************/ | 1316 | ************************************************************************/ |
1317 | 1317 | ||
1318 | typedef union ii_ieclr_u { | 1318 | typedef union ii_ieclr_u { |
1319 | uint64_t ii_ieclr_regval; | 1319 | u64 ii_ieclr_regval; |
1320 | struct { | 1320 | struct { |
1321 | uint64_t i_e_prb_0:1; | 1321 | u64 i_e_prb_0:1; |
1322 | uint64_t i_rsvd:7; | 1322 | u64 i_rsvd:7; |
1323 | uint64_t i_e_prb_8:1; | 1323 | u64 i_e_prb_8:1; |
1324 | uint64_t i_e_prb_9:1; | 1324 | u64 i_e_prb_9:1; |
1325 | uint64_t i_e_prb_a:1; | 1325 | u64 i_e_prb_a:1; |
1326 | uint64_t i_e_prb_b:1; | 1326 | u64 i_e_prb_b:1; |
1327 | uint64_t i_e_prb_c:1; | 1327 | u64 i_e_prb_c:1; |
1328 | uint64_t i_e_prb_d:1; | 1328 | u64 i_e_prb_d:1; |
1329 | uint64_t i_e_prb_e:1; | 1329 | u64 i_e_prb_e:1; |
1330 | uint64_t i_e_prb_f:1; | 1330 | u64 i_e_prb_f:1; |
1331 | uint64_t i_e_crazy:1; | 1331 | u64 i_e_crazy:1; |
1332 | uint64_t i_e_bte_0:1; | 1332 | u64 i_e_bte_0:1; |
1333 | uint64_t i_e_bte_1:1; | 1333 | u64 i_e_bte_1:1; |
1334 | uint64_t i_reserved_1:10; | 1334 | u64 i_reserved_1:10; |
1335 | uint64_t i_spur_rd_hdr:1; | 1335 | u64 i_spur_rd_hdr:1; |
1336 | uint64_t i_cam_intr_to:1; | 1336 | u64 i_cam_intr_to:1; |
1337 | uint64_t i_cam_overflow:1; | 1337 | u64 i_cam_overflow:1; |
1338 | uint64_t i_cam_read_miss:1; | 1338 | u64 i_cam_read_miss:1; |
1339 | uint64_t i_ioq_rep_underflow:1; | 1339 | u64 i_ioq_rep_underflow:1; |
1340 | uint64_t i_ioq_req_underflow:1; | 1340 | u64 i_ioq_req_underflow:1; |
1341 | uint64_t i_ioq_rep_overflow:1; | 1341 | u64 i_ioq_rep_overflow:1; |
1342 | uint64_t i_ioq_req_overflow:1; | 1342 | u64 i_ioq_req_overflow:1; |
1343 | uint64_t i_iiq_rep_overflow:1; | 1343 | u64 i_iiq_rep_overflow:1; |
1344 | uint64_t i_iiq_req_overflow:1; | 1344 | u64 i_iiq_req_overflow:1; |
1345 | uint64_t i_ii_xn_rep_cred_overflow:1; | 1345 | u64 i_ii_xn_rep_cred_overflow:1; |
1346 | uint64_t i_ii_xn_req_cred_overflow:1; | 1346 | u64 i_ii_xn_req_cred_overflow:1; |
1347 | uint64_t i_ii_xn_invalid_cmd:1; | 1347 | u64 i_ii_xn_invalid_cmd:1; |
1348 | uint64_t i_xn_ii_invalid_cmd:1; | 1348 | u64 i_xn_ii_invalid_cmd:1; |
1349 | uint64_t i_reserved_2:21; | 1349 | u64 i_reserved_2:21; |
1350 | } ii_ieclr_fld_s; | 1350 | } ii_ieclr_fld_s; |
1351 | } ii_ieclr_u_t; | 1351 | } ii_ieclr_u_t; |
1352 | 1352 | ||
@@ -1360,12 +1360,12 @@ typedef union ii_ieclr_u { | |||
1360 | ************************************************************************/ | 1360 | ************************************************************************/ |
1361 | 1361 | ||
1362 | typedef union ii_ibcr_u { | 1362 | typedef union ii_ibcr_u { |
1363 | uint64_t ii_ibcr_regval; | 1363 | u64 ii_ibcr_regval; |
1364 | struct { | 1364 | struct { |
1365 | uint64_t i_count:4; | 1365 | u64 i_count:4; |
1366 | uint64_t i_rsvd_1:4; | 1366 | u64 i_rsvd_1:4; |
1367 | uint64_t i_soft_reset:1; | 1367 | u64 i_soft_reset:1; |
1368 | uint64_t i_rsvd:55; | 1368 | u64 i_rsvd:55; |
1369 | } ii_ibcr_fld_s; | 1369 | } ii_ibcr_fld_s; |
1370 | } ii_ibcr_u_t; | 1370 | } ii_ibcr_u_t; |
1371 | 1371 | ||
@@ -1399,22 +1399,22 @@ typedef union ii_ibcr_u { | |||
1399 | ************************************************************************/ | 1399 | ************************************************************************/ |
1400 | 1400 | ||
1401 | typedef union ii_ixsm_u { | 1401 | typedef union ii_ixsm_u { |
1402 | uint64_t ii_ixsm_regval; | 1402 | u64 ii_ixsm_regval; |
1403 | struct { | 1403 | struct { |
1404 | uint64_t i_byte_en:32; | 1404 | u64 i_byte_en:32; |
1405 | uint64_t i_reserved:1; | 1405 | u64 i_reserved:1; |
1406 | uint64_t i_tag:3; | 1406 | u64 i_tag:3; |
1407 | uint64_t i_alt_pactyp:4; | 1407 | u64 i_alt_pactyp:4; |
1408 | uint64_t i_bo:1; | 1408 | u64 i_bo:1; |
1409 | uint64_t i_error:1; | 1409 | u64 i_error:1; |
1410 | uint64_t i_vbpm:1; | 1410 | u64 i_vbpm:1; |
1411 | uint64_t i_gbr:1; | 1411 | u64 i_gbr:1; |
1412 | uint64_t i_ds:2; | 1412 | u64 i_ds:2; |
1413 | uint64_t i_ct:1; | 1413 | u64 i_ct:1; |
1414 | uint64_t i_tnum:5; | 1414 | u64 i_tnum:5; |
1415 | uint64_t i_pactyp:4; | 1415 | u64 i_pactyp:4; |
1416 | uint64_t i_sidn:4; | 1416 | u64 i_sidn:4; |
1417 | uint64_t i_didn:4; | 1417 | u64 i_didn:4; |
1418 | } ii_ixsm_fld_s; | 1418 | } ii_ixsm_fld_s; |
1419 | } ii_ixsm_u_t; | 1419 | } ii_ixsm_u_t; |
1420 | 1420 | ||
@@ -1426,11 +1426,11 @@ typedef union ii_ixsm_u { | |||
1426 | ************************************************************************/ | 1426 | ************************************************************************/ |
1427 | 1427 | ||
1428 | typedef union ii_ixss_u { | 1428 | typedef union ii_ixss_u { |
1429 | uint64_t ii_ixss_regval; | 1429 | u64 ii_ixss_regval; |
1430 | struct { | 1430 | struct { |
1431 | uint64_t i_sideband:8; | 1431 | u64 i_sideband:8; |
1432 | uint64_t i_rsvd:55; | 1432 | u64 i_rsvd:55; |
1433 | uint64_t i_valid:1; | 1433 | u64 i_valid:1; |
1434 | } ii_ixss_fld_s; | 1434 | } ii_ixss_fld_s; |
1435 | } ii_ixss_u_t; | 1435 | } ii_ixss_u_t; |
1436 | 1436 | ||
@@ -1447,17 +1447,17 @@ typedef union ii_ixss_u { | |||
1447 | ************************************************************************/ | 1447 | ************************************************************************/ |
1448 | 1448 | ||
1449 | typedef union ii_ilct_u { | 1449 | typedef union ii_ilct_u { |
1450 | uint64_t ii_ilct_regval; | 1450 | u64 ii_ilct_regval; |
1451 | struct { | 1451 | struct { |
1452 | uint64_t i_test_seed:20; | 1452 | u64 i_test_seed:20; |
1453 | uint64_t i_test_mask:8; | 1453 | u64 i_test_mask:8; |
1454 | uint64_t i_test_data:20; | 1454 | u64 i_test_data:20; |
1455 | uint64_t i_test_valid:1; | 1455 | u64 i_test_valid:1; |
1456 | uint64_t i_test_cberr:1; | 1456 | u64 i_test_cberr:1; |
1457 | uint64_t i_test_flit:3; | 1457 | u64 i_test_flit:3; |
1458 | uint64_t i_test_clear:1; | 1458 | u64 i_test_clear:1; |
1459 | uint64_t i_test_err_capture:1; | 1459 | u64 i_test_err_capture:1; |
1460 | uint64_t i_rsvd:9; | 1460 | u64 i_rsvd:9; |
1461 | } ii_ilct_fld_s; | 1461 | } ii_ilct_fld_s; |
1462 | } ii_ilct_u_t; | 1462 | } ii_ilct_u_t; |
1463 | 1463 | ||
@@ -1482,20 +1482,20 @@ typedef union ii_ilct_u { | |||
1482 | ************************************************************************/ | 1482 | ************************************************************************/ |
1483 | 1483 | ||
1484 | typedef union ii_iieph1_u { | 1484 | typedef union ii_iieph1_u { |
1485 | uint64_t ii_iieph1_regval; | 1485 | u64 ii_iieph1_regval; |
1486 | struct { | 1486 | struct { |
1487 | uint64_t i_command:7; | 1487 | u64 i_command:7; |
1488 | uint64_t i_rsvd_5:1; | 1488 | u64 i_rsvd_5:1; |
1489 | uint64_t i_suppl:14; | 1489 | u64 i_suppl:14; |
1490 | uint64_t i_rsvd_4:1; | 1490 | u64 i_rsvd_4:1; |
1491 | uint64_t i_source:14; | 1491 | u64 i_source:14; |
1492 | uint64_t i_rsvd_3:1; | 1492 | u64 i_rsvd_3:1; |
1493 | uint64_t i_err_type:4; | 1493 | u64 i_err_type:4; |
1494 | uint64_t i_rsvd_2:4; | 1494 | u64 i_rsvd_2:4; |
1495 | uint64_t i_overrun:1; | 1495 | u64 i_overrun:1; |
1496 | uint64_t i_rsvd_1:3; | 1496 | u64 i_rsvd_1:3; |
1497 | uint64_t i_valid:1; | 1497 | u64 i_valid:1; |
1498 | uint64_t i_rsvd:13; | 1498 | u64 i_rsvd:13; |
1499 | } ii_iieph1_fld_s; | 1499 | } ii_iieph1_fld_s; |
1500 | } ii_iieph1_u_t; | 1500 | } ii_iieph1_u_t; |
1501 | 1501 | ||
@@ -1511,13 +1511,13 @@ typedef union ii_iieph1_u { | |||
1511 | ************************************************************************/ | 1511 | ************************************************************************/ |
1512 | 1512 | ||
1513 | typedef union ii_iieph2_u { | 1513 | typedef union ii_iieph2_u { |
1514 | uint64_t ii_iieph2_regval; | 1514 | u64 ii_iieph2_regval; |
1515 | struct { | 1515 | struct { |
1516 | uint64_t i_rsvd_0:3; | 1516 | u64 i_rsvd_0:3; |
1517 | uint64_t i_address:47; | 1517 | u64 i_address:47; |
1518 | uint64_t i_rsvd_1:10; | 1518 | u64 i_rsvd_1:10; |
1519 | uint64_t i_tail:1; | 1519 | u64 i_tail:1; |
1520 | uint64_t i_rsvd:3; | 1520 | u64 i_rsvd:3; |
1521 | } ii_iieph2_fld_s; | 1521 | } ii_iieph2_fld_s; |
1522 | } ii_iieph2_u_t; | 1522 | } ii_iieph2_u_t; |
1523 | 1523 | ||
@@ -1532,9 +1532,9 @@ typedef union ii_iieph2_u { | |||
1532 | ************************************************************************/ | 1532 | ************************************************************************/ |
1533 | 1533 | ||
1534 | typedef union ii_islapr_u { | 1534 | typedef union ii_islapr_u { |
1535 | uint64_t ii_islapr_regval; | 1535 | u64 ii_islapr_regval; |
1536 | struct { | 1536 | struct { |
1537 | uint64_t i_region:64; | 1537 | u64 i_region:64; |
1538 | } ii_islapr_fld_s; | 1538 | } ii_islapr_fld_s; |
1539 | } ii_islapr_u_t; | 1539 | } ii_islapr_u_t; |
1540 | 1540 | ||
@@ -1547,10 +1547,10 @@ typedef union ii_islapr_u { | |||
1547 | ************************************************************************/ | 1547 | ************************************************************************/ |
1548 | 1548 | ||
1549 | typedef union ii_islapo_u { | 1549 | typedef union ii_islapo_u { |
1550 | uint64_t ii_islapo_regval; | 1550 | u64 ii_islapo_regval; |
1551 | struct { | 1551 | struct { |
1552 | uint64_t i_io_sbx_ovrride:56; | 1552 | u64 i_io_sbx_ovrride:56; |
1553 | uint64_t i_rsvd:8; | 1553 | u64 i_rsvd:8; |
1554 | } ii_islapo_fld_s; | 1554 | } ii_islapo_fld_s; |
1555 | } ii_islapo_u_t; | 1555 | } ii_islapo_u_t; |
1556 | 1556 | ||
@@ -1563,14 +1563,14 @@ typedef union ii_islapo_u { | |||
1563 | ************************************************************************/ | 1563 | ************************************************************************/ |
1564 | 1564 | ||
1565 | typedef union ii_iwi_u { | 1565 | typedef union ii_iwi_u { |
1566 | uint64_t ii_iwi_regval; | 1566 | u64 ii_iwi_regval; |
1567 | struct { | 1567 | struct { |
1568 | uint64_t i_prescale:24; | 1568 | u64 i_prescale:24; |
1569 | uint64_t i_rsvd:8; | 1569 | u64 i_rsvd:8; |
1570 | uint64_t i_timeout:8; | 1570 | u64 i_timeout:8; |
1571 | uint64_t i_rsvd1:8; | 1571 | u64 i_rsvd1:8; |
1572 | uint64_t i_intrpt_retry_period:8; | 1572 | u64 i_intrpt_retry_period:8; |
1573 | uint64_t i_rsvd2:8; | 1573 | u64 i_rsvd2:8; |
1574 | } ii_iwi_fld_s; | 1574 | } ii_iwi_fld_s; |
1575 | } ii_iwi_u_t; | 1575 | } ii_iwi_u_t; |
1576 | 1576 | ||
@@ -1582,26 +1582,26 @@ typedef union ii_iwi_u { | |||
1582 | ************************************************************************/ | 1582 | ************************************************************************/ |
1583 | 1583 | ||
1584 | typedef union ii_iwel_u { | 1584 | typedef union ii_iwel_u { |
1585 | uint64_t ii_iwel_regval; | 1585 | u64 ii_iwel_regval; |
1586 | struct { | 1586 | struct { |
1587 | uint64_t i_intr_timed_out:1; | 1587 | u64 i_intr_timed_out:1; |
1588 | uint64_t i_rsvd:7; | 1588 | u64 i_rsvd:7; |
1589 | uint64_t i_cam_overflow:1; | 1589 | u64 i_cam_overflow:1; |
1590 | uint64_t i_cam_read_miss:1; | 1590 | u64 i_cam_read_miss:1; |
1591 | uint64_t i_rsvd1:2; | 1591 | u64 i_rsvd1:2; |
1592 | uint64_t i_ioq_rep_underflow:1; | 1592 | u64 i_ioq_rep_underflow:1; |
1593 | uint64_t i_ioq_req_underflow:1; | 1593 | u64 i_ioq_req_underflow:1; |
1594 | uint64_t i_ioq_rep_overflow:1; | 1594 | u64 i_ioq_rep_overflow:1; |
1595 | uint64_t i_ioq_req_overflow:1; | 1595 | u64 i_ioq_req_overflow:1; |
1596 | uint64_t i_iiq_rep_overflow:1; | 1596 | u64 i_iiq_rep_overflow:1; |
1597 | uint64_t i_iiq_req_overflow:1; | 1597 | u64 i_iiq_req_overflow:1; |
1598 | uint64_t i_rsvd2:6; | 1598 | u64 i_rsvd2:6; |
1599 | uint64_t i_ii_xn_rep_cred_over_under:1; | 1599 | u64 i_ii_xn_rep_cred_over_under:1; |
1600 | uint64_t i_ii_xn_req_cred_over_under:1; | 1600 | u64 i_ii_xn_req_cred_over_under:1; |
1601 | uint64_t i_rsvd3:6; | 1601 | u64 i_rsvd3:6; |
1602 | uint64_t i_ii_xn_invalid_cmd:1; | 1602 | u64 i_ii_xn_invalid_cmd:1; |
1603 | uint64_t i_xn_ii_invalid_cmd:1; | 1603 | u64 i_xn_ii_invalid_cmd:1; |
1604 | uint64_t i_rsvd4:30; | 1604 | u64 i_rsvd4:30; |
1605 | } ii_iwel_fld_s; | 1605 | } ii_iwel_fld_s; |
1606 | } ii_iwel_u_t; | 1606 | } ii_iwel_u_t; |
1607 | 1607 | ||
@@ -1612,22 +1612,22 @@ typedef union ii_iwel_u { | |||
1612 | ************************************************************************/ | 1612 | ************************************************************************/ |
1613 | 1613 | ||
1614 | typedef union ii_iwc_u { | 1614 | typedef union ii_iwc_u { |
1615 | uint64_t ii_iwc_regval; | 1615 | u64 ii_iwc_regval; |
1616 | struct { | 1616 | struct { |
1617 | uint64_t i_dma_byte_swap:1; | 1617 | u64 i_dma_byte_swap:1; |
1618 | uint64_t i_rsvd:3; | 1618 | u64 i_rsvd:3; |
1619 | uint64_t i_cam_read_lines_reset:1; | 1619 | u64 i_cam_read_lines_reset:1; |
1620 | uint64_t i_rsvd1:3; | 1620 | u64 i_rsvd1:3; |
1621 | uint64_t i_ii_xn_cred_over_under_log:1; | 1621 | u64 i_ii_xn_cred_over_under_log:1; |
1622 | uint64_t i_rsvd2:19; | 1622 | u64 i_rsvd2:19; |
1623 | uint64_t i_xn_rep_iq_depth:5; | 1623 | u64 i_xn_rep_iq_depth:5; |
1624 | uint64_t i_rsvd3:3; | 1624 | u64 i_rsvd3:3; |
1625 | uint64_t i_xn_req_iq_depth:5; | 1625 | u64 i_xn_req_iq_depth:5; |
1626 | uint64_t i_rsvd4:3; | 1626 | u64 i_rsvd4:3; |
1627 | uint64_t i_iiq_depth:6; | 1627 | u64 i_iiq_depth:6; |
1628 | uint64_t i_rsvd5:12; | 1628 | u64 i_rsvd5:12; |
1629 | uint64_t i_force_rep_cred:1; | 1629 | u64 i_force_rep_cred:1; |
1630 | uint64_t i_force_req_cred:1; | 1630 | u64 i_force_req_cred:1; |
1631 | } ii_iwc_fld_s; | 1631 | } ii_iwc_fld_s; |
1632 | } ii_iwc_u_t; | 1632 | } ii_iwc_u_t; |
1633 | 1633 | ||
@@ -1638,12 +1638,12 @@ typedef union ii_iwc_u { | |||
1638 | ************************************************************************/ | 1638 | ************************************************************************/ |
1639 | 1639 | ||
1640 | typedef union ii_iws_u { | 1640 | typedef union ii_iws_u { |
1641 | uint64_t ii_iws_regval; | 1641 | u64 ii_iws_regval; |
1642 | struct { | 1642 | struct { |
1643 | uint64_t i_xn_rep_iq_credits:5; | 1643 | u64 i_xn_rep_iq_credits:5; |
1644 | uint64_t i_rsvd:3; | 1644 | u64 i_rsvd:3; |
1645 | uint64_t i_xn_req_iq_credits:5; | 1645 | u64 i_xn_req_iq_credits:5; |
1646 | uint64_t i_rsvd1:51; | 1646 | u64 i_rsvd1:51; |
1647 | } ii_iws_fld_s; | 1647 | } ii_iws_fld_s; |
1648 | } ii_iws_u_t; | 1648 | } ii_iws_u_t; |
1649 | 1649 | ||
@@ -1654,26 +1654,26 @@ typedef union ii_iws_u { | |||
1654 | ************************************************************************/ | 1654 | ************************************************************************/ |
1655 | 1655 | ||
1656 | typedef union ii_iweim_u { | 1656 | typedef union ii_iweim_u { |
1657 | uint64_t ii_iweim_regval; | 1657 | u64 ii_iweim_regval; |
1658 | struct { | 1658 | struct { |
1659 | uint64_t i_intr_timed_out:1; | 1659 | u64 i_intr_timed_out:1; |
1660 | uint64_t i_rsvd:7; | 1660 | u64 i_rsvd:7; |
1661 | uint64_t i_cam_overflow:1; | 1661 | u64 i_cam_overflow:1; |
1662 | uint64_t i_cam_read_miss:1; | 1662 | u64 i_cam_read_miss:1; |
1663 | uint64_t i_rsvd1:2; | 1663 | u64 i_rsvd1:2; |
1664 | uint64_t i_ioq_rep_underflow:1; | 1664 | u64 i_ioq_rep_underflow:1; |
1665 | uint64_t i_ioq_req_underflow:1; | 1665 | u64 i_ioq_req_underflow:1; |
1666 | uint64_t i_ioq_rep_overflow:1; | 1666 | u64 i_ioq_rep_overflow:1; |
1667 | uint64_t i_ioq_req_overflow:1; | 1667 | u64 i_ioq_req_overflow:1; |
1668 | uint64_t i_iiq_rep_overflow:1; | 1668 | u64 i_iiq_rep_overflow:1; |
1669 | uint64_t i_iiq_req_overflow:1; | 1669 | u64 i_iiq_req_overflow:1; |
1670 | uint64_t i_rsvd2:6; | 1670 | u64 i_rsvd2:6; |
1671 | uint64_t i_ii_xn_rep_cred_overflow:1; | 1671 | u64 i_ii_xn_rep_cred_overflow:1; |
1672 | uint64_t i_ii_xn_req_cred_overflow:1; | 1672 | u64 i_ii_xn_req_cred_overflow:1; |
1673 | uint64_t i_rsvd3:6; | 1673 | u64 i_rsvd3:6; |
1674 | uint64_t i_ii_xn_invalid_cmd:1; | 1674 | u64 i_ii_xn_invalid_cmd:1; |
1675 | uint64_t i_xn_ii_invalid_cmd:1; | 1675 | u64 i_xn_ii_invalid_cmd:1; |
1676 | uint64_t i_rsvd4:30; | 1676 | u64 i_rsvd4:30; |
1677 | } ii_iweim_fld_s; | 1677 | } ii_iweim_fld_s; |
1678 | } ii_iweim_u_t; | 1678 | } ii_iweim_u_t; |
1679 | 1679 | ||
@@ -1688,13 +1688,13 @@ typedef union ii_iweim_u { | |||
1688 | ************************************************************************/ | 1688 | ************************************************************************/ |
1689 | 1689 | ||
1690 | typedef union ii_ipca_u { | 1690 | typedef union ii_ipca_u { |
1691 | uint64_t ii_ipca_regval; | 1691 | u64 ii_ipca_regval; |
1692 | struct { | 1692 | struct { |
1693 | uint64_t i_wid:4; | 1693 | u64 i_wid:4; |
1694 | uint64_t i_adjust:1; | 1694 | u64 i_adjust:1; |
1695 | uint64_t i_rsvd_1:3; | 1695 | u64 i_rsvd_1:3; |
1696 | uint64_t i_field:2; | 1696 | u64 i_field:2; |
1697 | uint64_t i_rsvd:54; | 1697 | u64 i_rsvd:54; |
1698 | } ii_ipca_fld_s; | 1698 | } ii_ipca_fld_s; |
1699 | } ii_ipca_u_t; | 1699 | } ii_ipca_u_t; |
1700 | 1700 | ||
@@ -1709,12 +1709,12 @@ typedef union ii_ipca_u { | |||
1709 | ************************************************************************/ | 1709 | ************************************************************************/ |
1710 | 1710 | ||
1711 | typedef union ii_iprte0a_u { | 1711 | typedef union ii_iprte0a_u { |
1712 | uint64_t ii_iprte0a_regval; | 1712 | u64 ii_iprte0a_regval; |
1713 | struct { | 1713 | struct { |
1714 | uint64_t i_rsvd_1:54; | 1714 | u64 i_rsvd_1:54; |
1715 | uint64_t i_widget:4; | 1715 | u64 i_widget:4; |
1716 | uint64_t i_to_cnt:5; | 1716 | u64 i_to_cnt:5; |
1717 | uint64_t i_vld:1; | 1717 | u64 i_vld:1; |
1718 | } ii_iprte0a_fld_s; | 1718 | } ii_iprte0a_fld_s; |
1719 | } ii_iprte0a_u_t; | 1719 | } ii_iprte0a_u_t; |
1720 | 1720 | ||
@@ -1729,12 +1729,12 @@ typedef union ii_iprte0a_u { | |||
1729 | ************************************************************************/ | 1729 | ************************************************************************/ |
1730 | 1730 | ||
1731 | typedef union ii_iprte1a_u { | 1731 | typedef union ii_iprte1a_u { |
1732 | uint64_t ii_iprte1a_regval; | 1732 | u64 ii_iprte1a_regval; |
1733 | struct { | 1733 | struct { |
1734 | uint64_t i_rsvd_1:54; | 1734 | u64 i_rsvd_1:54; |
1735 | uint64_t i_widget:4; | 1735 | u64 i_widget:4; |
1736 | uint64_t i_to_cnt:5; | 1736 | u64 i_to_cnt:5; |
1737 | uint64_t i_vld:1; | 1737 | u64 i_vld:1; |
1738 | } ii_iprte1a_fld_s; | 1738 | } ii_iprte1a_fld_s; |
1739 | } ii_iprte1a_u_t; | 1739 | } ii_iprte1a_u_t; |
1740 | 1740 | ||
@@ -1749,12 +1749,12 @@ typedef union ii_iprte1a_u { | |||
1749 | ************************************************************************/ | 1749 | ************************************************************************/ |
1750 | 1750 | ||
1751 | typedef union ii_iprte2a_u { | 1751 | typedef union ii_iprte2a_u { |
1752 | uint64_t ii_iprte2a_regval; | 1752 | u64 ii_iprte2a_regval; |
1753 | struct { | 1753 | struct { |
1754 | uint64_t i_rsvd_1:54; | 1754 | u64 i_rsvd_1:54; |
1755 | uint64_t i_widget:4; | 1755 | u64 i_widget:4; |
1756 | uint64_t i_to_cnt:5; | 1756 | u64 i_to_cnt:5; |
1757 | uint64_t i_vld:1; | 1757 | u64 i_vld:1; |
1758 | } ii_iprte2a_fld_s; | 1758 | } ii_iprte2a_fld_s; |
1759 | } ii_iprte2a_u_t; | 1759 | } ii_iprte2a_u_t; |
1760 | 1760 | ||
@@ -1769,12 +1769,12 @@ typedef union ii_iprte2a_u { | |||
1769 | ************************************************************************/ | 1769 | ************************************************************************/ |
1770 | 1770 | ||
1771 | typedef union ii_iprte3a_u { | 1771 | typedef union ii_iprte3a_u { |
1772 | uint64_t ii_iprte3a_regval; | 1772 | u64 ii_iprte3a_regval; |
1773 | struct { | 1773 | struct { |
1774 | uint64_t i_rsvd_1:54; | 1774 | u64 i_rsvd_1:54; |
1775 | uint64_t i_widget:4; | 1775 | u64 i_widget:4; |
1776 | uint64_t i_to_cnt:5; | 1776 | u64 i_to_cnt:5; |
1777 | uint64_t i_vld:1; | 1777 | u64 i_vld:1; |
1778 | } ii_iprte3a_fld_s; | 1778 | } ii_iprte3a_fld_s; |
1779 | } ii_iprte3a_u_t; | 1779 | } ii_iprte3a_u_t; |
1780 | 1780 | ||
@@ -1789,12 +1789,12 @@ typedef union ii_iprte3a_u { | |||
1789 | ************************************************************************/ | 1789 | ************************************************************************/ |
1790 | 1790 | ||
1791 | typedef union ii_iprte4a_u { | 1791 | typedef union ii_iprte4a_u { |
1792 | uint64_t ii_iprte4a_regval; | 1792 | u64 ii_iprte4a_regval; |
1793 | struct { | 1793 | struct { |
1794 | uint64_t i_rsvd_1:54; | 1794 | u64 i_rsvd_1:54; |
1795 | uint64_t i_widget:4; | 1795 | u64 i_widget:4; |
1796 | uint64_t i_to_cnt:5; | 1796 | u64 i_to_cnt:5; |
1797 | uint64_t i_vld:1; | 1797 | u64 i_vld:1; |
1798 | } ii_iprte4a_fld_s; | 1798 | } ii_iprte4a_fld_s; |
1799 | } ii_iprte4a_u_t; | 1799 | } ii_iprte4a_u_t; |
1800 | 1800 | ||
@@ -1809,12 +1809,12 @@ typedef union ii_iprte4a_u { | |||
1809 | ************************************************************************/ | 1809 | ************************************************************************/ |
1810 | 1810 | ||
1811 | typedef union ii_iprte5a_u { | 1811 | typedef union ii_iprte5a_u { |
1812 | uint64_t ii_iprte5a_regval; | 1812 | u64 ii_iprte5a_regval; |
1813 | struct { | 1813 | struct { |
1814 | uint64_t i_rsvd_1:54; | 1814 | u64 i_rsvd_1:54; |
1815 | uint64_t i_widget:4; | 1815 | u64 i_widget:4; |
1816 | uint64_t i_to_cnt:5; | 1816 | u64 i_to_cnt:5; |
1817 | uint64_t i_vld:1; | 1817 | u64 i_vld:1; |
1818 | } ii_iprte5a_fld_s; | 1818 | } ii_iprte5a_fld_s; |
1819 | } ii_iprte5a_u_t; | 1819 | } ii_iprte5a_u_t; |
1820 | 1820 | ||
@@ -1829,12 +1829,12 @@ typedef union ii_iprte5a_u { | |||
1829 | ************************************************************************/ | 1829 | ************************************************************************/ |
1830 | 1830 | ||
1831 | typedef union ii_iprte6a_u { | 1831 | typedef union ii_iprte6a_u { |
1832 | uint64_t ii_iprte6a_regval; | 1832 | u64 ii_iprte6a_regval; |
1833 | struct { | 1833 | struct { |
1834 | uint64_t i_rsvd_1:54; | 1834 | u64 i_rsvd_1:54; |
1835 | uint64_t i_widget:4; | 1835 | u64 i_widget:4; |
1836 | uint64_t i_to_cnt:5; | 1836 | u64 i_to_cnt:5; |
1837 | uint64_t i_vld:1; | 1837 | u64 i_vld:1; |
1838 | } ii_iprte6a_fld_s; | 1838 | } ii_iprte6a_fld_s; |
1839 | } ii_iprte6a_u_t; | 1839 | } ii_iprte6a_u_t; |
1840 | 1840 | ||
@@ -1849,12 +1849,12 @@ typedef union ii_iprte6a_u { | |||
1849 | ************************************************************************/ | 1849 | ************************************************************************/ |
1850 | 1850 | ||
1851 | typedef union ii_iprte7a_u { | 1851 | typedef union ii_iprte7a_u { |
1852 | uint64_t ii_iprte7a_regval; | 1852 | u64 ii_iprte7a_regval; |
1853 | struct { | 1853 | struct { |
1854 | uint64_t i_rsvd_1:54; | 1854 | u64 i_rsvd_1:54; |
1855 | uint64_t i_widget:4; | 1855 | u64 i_widget:4; |
1856 | uint64_t i_to_cnt:5; | 1856 | u64 i_to_cnt:5; |
1857 | uint64_t i_vld:1; | 1857 | u64 i_vld:1; |
1858 | } ii_iprtea7_fld_s; | 1858 | } ii_iprtea7_fld_s; |
1859 | } ii_iprte7a_u_t; | 1859 | } ii_iprte7a_u_t; |
1860 | 1860 | ||
@@ -1869,12 +1869,12 @@ typedef union ii_iprte7a_u { | |||
1869 | ************************************************************************/ | 1869 | ************************************************************************/ |
1870 | 1870 | ||
1871 | typedef union ii_iprte0b_u { | 1871 | typedef union ii_iprte0b_u { |
1872 | uint64_t ii_iprte0b_regval; | 1872 | u64 ii_iprte0b_regval; |
1873 | struct { | 1873 | struct { |
1874 | uint64_t i_rsvd_1:3; | 1874 | u64 i_rsvd_1:3; |
1875 | uint64_t i_address:47; | 1875 | u64 i_address:47; |
1876 | uint64_t i_init:3; | 1876 | u64 i_init:3; |
1877 | uint64_t i_source:11; | 1877 | u64 i_source:11; |
1878 | } ii_iprte0b_fld_s; | 1878 | } ii_iprte0b_fld_s; |
1879 | } ii_iprte0b_u_t; | 1879 | } ii_iprte0b_u_t; |
1880 | 1880 | ||
@@ -1889,12 +1889,12 @@ typedef union ii_iprte0b_u { | |||
1889 | ************************************************************************/ | 1889 | ************************************************************************/ |
1890 | 1890 | ||
1891 | typedef union ii_iprte1b_u { | 1891 | typedef union ii_iprte1b_u { |
1892 | uint64_t ii_iprte1b_regval; | 1892 | u64 ii_iprte1b_regval; |
1893 | struct { | 1893 | struct { |
1894 | uint64_t i_rsvd_1:3; | 1894 | u64 i_rsvd_1:3; |
1895 | uint64_t i_address:47; | 1895 | u64 i_address:47; |
1896 | uint64_t i_init:3; | 1896 | u64 i_init:3; |
1897 | uint64_t i_source:11; | 1897 | u64 i_source:11; |
1898 | } ii_iprte1b_fld_s; | 1898 | } ii_iprte1b_fld_s; |
1899 | } ii_iprte1b_u_t; | 1899 | } ii_iprte1b_u_t; |
1900 | 1900 | ||
@@ -1909,12 +1909,12 @@ typedef union ii_iprte1b_u { | |||
1909 | ************************************************************************/ | 1909 | ************************************************************************/ |
1910 | 1910 | ||
1911 | typedef union ii_iprte2b_u { | 1911 | typedef union ii_iprte2b_u { |
1912 | uint64_t ii_iprte2b_regval; | 1912 | u64 ii_iprte2b_regval; |
1913 | struct { | 1913 | struct { |
1914 | uint64_t i_rsvd_1:3; | 1914 | u64 i_rsvd_1:3; |
1915 | uint64_t i_address:47; | 1915 | u64 i_address:47; |
1916 | uint64_t i_init:3; | 1916 | u64 i_init:3; |
1917 | uint64_t i_source:11; | 1917 | u64 i_source:11; |
1918 | } ii_iprte2b_fld_s; | 1918 | } ii_iprte2b_fld_s; |
1919 | } ii_iprte2b_u_t; | 1919 | } ii_iprte2b_u_t; |
1920 | 1920 | ||
@@ -1929,12 +1929,12 @@ typedef union ii_iprte2b_u { | |||
1929 | ************************************************************************/ | 1929 | ************************************************************************/ |
1930 | 1930 | ||
1931 | typedef union ii_iprte3b_u { | 1931 | typedef union ii_iprte3b_u { |
1932 | uint64_t ii_iprte3b_regval; | 1932 | u64 ii_iprte3b_regval; |
1933 | struct { | 1933 | struct { |
1934 | uint64_t i_rsvd_1:3; | 1934 | u64 i_rsvd_1:3; |
1935 | uint64_t i_address:47; | 1935 | u64 i_address:47; |
1936 | uint64_t i_init:3; | 1936 | u64 i_init:3; |
1937 | uint64_t i_source:11; | 1937 | u64 i_source:11; |
1938 | } ii_iprte3b_fld_s; | 1938 | } ii_iprte3b_fld_s; |
1939 | } ii_iprte3b_u_t; | 1939 | } ii_iprte3b_u_t; |
1940 | 1940 | ||
@@ -1949,12 +1949,12 @@ typedef union ii_iprte3b_u { | |||
1949 | ************************************************************************/ | 1949 | ************************************************************************/ |
1950 | 1950 | ||
1951 | typedef union ii_iprte4b_u { | 1951 | typedef union ii_iprte4b_u { |
1952 | uint64_t ii_iprte4b_regval; | 1952 | u64 ii_iprte4b_regval; |
1953 | struct { | 1953 | struct { |
1954 | uint64_t i_rsvd_1:3; | 1954 | u64 i_rsvd_1:3; |
1955 | uint64_t i_address:47; | 1955 | u64 i_address:47; |
1956 | uint64_t i_init:3; | 1956 | u64 i_init:3; |
1957 | uint64_t i_source:11; | 1957 | u64 i_source:11; |
1958 | } ii_iprte4b_fld_s; | 1958 | } ii_iprte4b_fld_s; |
1959 | } ii_iprte4b_u_t; | 1959 | } ii_iprte4b_u_t; |
1960 | 1960 | ||
@@ -1969,12 +1969,12 @@ typedef union ii_iprte4b_u { | |||
1969 | ************************************************************************/ | 1969 | ************************************************************************/ |
1970 | 1970 | ||
1971 | typedef union ii_iprte5b_u { | 1971 | typedef union ii_iprte5b_u { |
1972 | uint64_t ii_iprte5b_regval; | 1972 | u64 ii_iprte5b_regval; |
1973 | struct { | 1973 | struct { |
1974 | uint64_t i_rsvd_1:3; | 1974 | u64 i_rsvd_1:3; |
1975 | uint64_t i_address:47; | 1975 | u64 i_address:47; |
1976 | uint64_t i_init:3; | 1976 | u64 i_init:3; |
1977 | uint64_t i_source:11; | 1977 | u64 i_source:11; |
1978 | } ii_iprte5b_fld_s; | 1978 | } ii_iprte5b_fld_s; |
1979 | } ii_iprte5b_u_t; | 1979 | } ii_iprte5b_u_t; |
1980 | 1980 | ||
@@ -1989,12 +1989,12 @@ typedef union ii_iprte5b_u { | |||
1989 | ************************************************************************/ | 1989 | ************************************************************************/ |
1990 | 1990 | ||
1991 | typedef union ii_iprte6b_u { | 1991 | typedef union ii_iprte6b_u { |
1992 | uint64_t ii_iprte6b_regval; | 1992 | u64 ii_iprte6b_regval; |
1993 | struct { | 1993 | struct { |
1994 | uint64_t i_rsvd_1:3; | 1994 | u64 i_rsvd_1:3; |
1995 | uint64_t i_address:47; | 1995 | u64 i_address:47; |
1996 | uint64_t i_init:3; | 1996 | u64 i_init:3; |
1997 | uint64_t i_source:11; | 1997 | u64 i_source:11; |
1998 | 1998 | ||
1999 | } ii_iprte6b_fld_s; | 1999 | } ii_iprte6b_fld_s; |
2000 | } ii_iprte6b_u_t; | 2000 | } ii_iprte6b_u_t; |
@@ -2010,12 +2010,12 @@ typedef union ii_iprte6b_u { | |||
2010 | ************************************************************************/ | 2010 | ************************************************************************/ |
2011 | 2011 | ||
2012 | typedef union ii_iprte7b_u { | 2012 | typedef union ii_iprte7b_u { |
2013 | uint64_t ii_iprte7b_regval; | 2013 | u64 ii_iprte7b_regval; |
2014 | struct { | 2014 | struct { |
2015 | uint64_t i_rsvd_1:3; | 2015 | u64 i_rsvd_1:3; |
2016 | uint64_t i_address:47; | 2016 | u64 i_address:47; |
2017 | uint64_t i_init:3; | 2017 | u64 i_init:3; |
2018 | uint64_t i_source:11; | 2018 | u64 i_source:11; |
2019 | } ii_iprte7b_fld_s; | 2019 | } ii_iprte7b_fld_s; |
2020 | } ii_iprte7b_u_t; | 2020 | } ii_iprte7b_u_t; |
2021 | 2021 | ||
@@ -2038,13 +2038,13 @@ typedef union ii_iprte7b_u { | |||
2038 | ************************************************************************/ | 2038 | ************************************************************************/ |
2039 | 2039 | ||
2040 | typedef union ii_ipdr_u { | 2040 | typedef union ii_ipdr_u { |
2041 | uint64_t ii_ipdr_regval; | 2041 | u64 ii_ipdr_regval; |
2042 | struct { | 2042 | struct { |
2043 | uint64_t i_te:3; | 2043 | u64 i_te:3; |
2044 | uint64_t i_rsvd_1:1; | 2044 | u64 i_rsvd_1:1; |
2045 | uint64_t i_pnd:1; | 2045 | u64 i_pnd:1; |
2046 | uint64_t i_init_rpcnt:1; | 2046 | u64 i_init_rpcnt:1; |
2047 | uint64_t i_rsvd:58; | 2047 | u64 i_rsvd:58; |
2048 | } ii_ipdr_fld_s; | 2048 | } ii_ipdr_fld_s; |
2049 | } ii_ipdr_u_t; | 2049 | } ii_ipdr_u_t; |
2050 | 2050 | ||
@@ -2066,11 +2066,11 @@ typedef union ii_ipdr_u { | |||
2066 | ************************************************************************/ | 2066 | ************************************************************************/ |
2067 | 2067 | ||
2068 | typedef union ii_icdr_u { | 2068 | typedef union ii_icdr_u { |
2069 | uint64_t ii_icdr_regval; | 2069 | u64 ii_icdr_regval; |
2070 | struct { | 2070 | struct { |
2071 | uint64_t i_crb_num:4; | 2071 | u64 i_crb_num:4; |
2072 | uint64_t i_pnd:1; | 2072 | u64 i_pnd:1; |
2073 | uint64_t i_rsvd:59; | 2073 | u64 i_rsvd:59; |
2074 | } ii_icdr_fld_s; | 2074 | } ii_icdr_fld_s; |
2075 | } ii_icdr_u_t; | 2075 | } ii_icdr_u_t; |
2076 | 2076 | ||
@@ -2092,13 +2092,13 @@ typedef union ii_icdr_u { | |||
2092 | ************************************************************************/ | 2092 | ************************************************************************/ |
2093 | 2093 | ||
2094 | typedef union ii_ifdr_u { | 2094 | typedef union ii_ifdr_u { |
2095 | uint64_t ii_ifdr_regval; | 2095 | u64 ii_ifdr_regval; |
2096 | struct { | 2096 | struct { |
2097 | uint64_t i_ioq_max_rq:7; | 2097 | u64 i_ioq_max_rq:7; |
2098 | uint64_t i_set_ioq_rq:1; | 2098 | u64 i_set_ioq_rq:1; |
2099 | uint64_t i_ioq_max_rp:7; | 2099 | u64 i_ioq_max_rp:7; |
2100 | uint64_t i_set_ioq_rp:1; | 2100 | u64 i_set_ioq_rp:1; |
2101 | uint64_t i_rsvd:48; | 2101 | u64 i_rsvd:48; |
2102 | } ii_ifdr_fld_s; | 2102 | } ii_ifdr_fld_s; |
2103 | } ii_ifdr_u_t; | 2103 | } ii_ifdr_u_t; |
2104 | 2104 | ||
@@ -2114,12 +2114,12 @@ typedef union ii_ifdr_u { | |||
2114 | ************************************************************************/ | 2114 | ************************************************************************/ |
2115 | 2115 | ||
2116 | typedef union ii_iiap_u { | 2116 | typedef union ii_iiap_u { |
2117 | uint64_t ii_iiap_regval; | 2117 | u64 ii_iiap_regval; |
2118 | struct { | 2118 | struct { |
2119 | uint64_t i_rq_mls:6; | 2119 | u64 i_rq_mls:6; |
2120 | uint64_t i_rsvd_1:2; | 2120 | u64 i_rsvd_1:2; |
2121 | uint64_t i_rp_mls:6; | 2121 | u64 i_rp_mls:6; |
2122 | uint64_t i_rsvd:50; | 2122 | u64 i_rsvd:50; |
2123 | } ii_iiap_fld_s; | 2123 | } ii_iiap_fld_s; |
2124 | } ii_iiap_u_t; | 2124 | } ii_iiap_u_t; |
2125 | 2125 | ||
@@ -2133,22 +2133,22 @@ typedef union ii_iiap_u { | |||
2133 | ************************************************************************/ | 2133 | ************************************************************************/ |
2134 | 2134 | ||
2135 | typedef union ii_icmr_u { | 2135 | typedef union ii_icmr_u { |
2136 | uint64_t ii_icmr_regval; | 2136 | u64 ii_icmr_regval; |
2137 | struct { | 2137 | struct { |
2138 | uint64_t i_sp_msg:1; | 2138 | u64 i_sp_msg:1; |
2139 | uint64_t i_rd_hdr:1; | 2139 | u64 i_rd_hdr:1; |
2140 | uint64_t i_rsvd_4:2; | 2140 | u64 i_rsvd_4:2; |
2141 | uint64_t i_c_cnt:4; | 2141 | u64 i_c_cnt:4; |
2142 | uint64_t i_rsvd_3:4; | 2142 | u64 i_rsvd_3:4; |
2143 | uint64_t i_clr_rqpd:1; | 2143 | u64 i_clr_rqpd:1; |
2144 | uint64_t i_clr_rppd:1; | 2144 | u64 i_clr_rppd:1; |
2145 | uint64_t i_rsvd_2:2; | 2145 | u64 i_rsvd_2:2; |
2146 | uint64_t i_fc_cnt:4; | 2146 | u64 i_fc_cnt:4; |
2147 | uint64_t i_crb_vld:15; | 2147 | u64 i_crb_vld:15; |
2148 | uint64_t i_crb_mark:15; | 2148 | u64 i_crb_mark:15; |
2149 | uint64_t i_rsvd_1:2; | 2149 | u64 i_rsvd_1:2; |
2150 | uint64_t i_precise:1; | 2150 | u64 i_precise:1; |
2151 | uint64_t i_rsvd:11; | 2151 | u64 i_rsvd:11; |
2152 | } ii_icmr_fld_s; | 2152 | } ii_icmr_fld_s; |
2153 | } ii_icmr_u_t; | 2153 | } ii_icmr_u_t; |
2154 | 2154 | ||
@@ -2161,13 +2161,13 @@ typedef union ii_icmr_u { | |||
2161 | ************************************************************************/ | 2161 | ************************************************************************/ |
2162 | 2162 | ||
2163 | typedef union ii_iccr_u { | 2163 | typedef union ii_iccr_u { |
2164 | uint64_t ii_iccr_regval; | 2164 | u64 ii_iccr_regval; |
2165 | struct { | 2165 | struct { |
2166 | uint64_t i_crb_num:4; | 2166 | u64 i_crb_num:4; |
2167 | uint64_t i_rsvd_1:4; | 2167 | u64 i_rsvd_1:4; |
2168 | uint64_t i_cmd:8; | 2168 | u64 i_cmd:8; |
2169 | uint64_t i_pending:1; | 2169 | u64 i_pending:1; |
2170 | uint64_t i_rsvd:47; | 2170 | u64 i_rsvd:47; |
2171 | } ii_iccr_fld_s; | 2171 | } ii_iccr_fld_s; |
2172 | } ii_iccr_u_t; | 2172 | } ii_iccr_u_t; |
2173 | 2173 | ||
@@ -2178,10 +2178,10 @@ typedef union ii_iccr_u { | |||
2178 | ************************************************************************/ | 2178 | ************************************************************************/ |
2179 | 2179 | ||
2180 | typedef union ii_icto_u { | 2180 | typedef union ii_icto_u { |
2181 | uint64_t ii_icto_regval; | 2181 | u64 ii_icto_regval; |
2182 | struct { | 2182 | struct { |
2183 | uint64_t i_timeout:8; | 2183 | u64 i_timeout:8; |
2184 | uint64_t i_rsvd:56; | 2184 | u64 i_rsvd:56; |
2185 | } ii_icto_fld_s; | 2185 | } ii_icto_fld_s; |
2186 | } ii_icto_u_t; | 2186 | } ii_icto_u_t; |
2187 | 2187 | ||
@@ -2197,10 +2197,10 @@ typedef union ii_icto_u { | |||
2197 | ************************************************************************/ | 2197 | ************************************************************************/ |
2198 | 2198 | ||
2199 | typedef union ii_ictp_u { | 2199 | typedef union ii_ictp_u { |
2200 | uint64_t ii_ictp_regval; | 2200 | u64 ii_ictp_regval; |
2201 | struct { | 2201 | struct { |
2202 | uint64_t i_prescale:24; | 2202 | u64 i_prescale:24; |
2203 | uint64_t i_rsvd:40; | 2203 | u64 i_rsvd:40; |
2204 | } ii_ictp_fld_s; | 2204 | } ii_ictp_fld_s; |
2205 | } ii_ictp_u_t; | 2205 | } ii_ictp_u_t; |
2206 | 2206 | ||
@@ -2228,14 +2228,14 @@ typedef union ii_ictp_u { | |||
2228 | ************************************************************************/ | 2228 | ************************************************************************/ |
2229 | 2229 | ||
2230 | typedef union ii_icrb0_a_u { | 2230 | typedef union ii_icrb0_a_u { |
2231 | uint64_t ii_icrb0_a_regval; | 2231 | u64 ii_icrb0_a_regval; |
2232 | struct { | 2232 | struct { |
2233 | uint64_t ia_iow:1; | 2233 | u64 ia_iow:1; |
2234 | uint64_t ia_vld:1; | 2234 | u64 ia_vld:1; |
2235 | uint64_t ia_addr:47; | 2235 | u64 ia_addr:47; |
2236 | uint64_t ia_tnum:5; | 2236 | u64 ia_tnum:5; |
2237 | uint64_t ia_sidn:4; | 2237 | u64 ia_sidn:4; |
2238 | uint64_t ia_rsvd:6; | 2238 | u64 ia_rsvd:6; |
2239 | } ii_icrb0_a_fld_s; | 2239 | } ii_icrb0_a_fld_s; |
2240 | } ii_icrb0_a_u_t; | 2240 | } ii_icrb0_a_u_t; |
2241 | 2241 | ||
@@ -2249,30 +2249,30 @@ typedef union ii_icrb0_a_u { | |||
2249 | ************************************************************************/ | 2249 | ************************************************************************/ |
2250 | 2250 | ||
2251 | typedef union ii_icrb0_b_u { | 2251 | typedef union ii_icrb0_b_u { |
2252 | uint64_t ii_icrb0_b_regval; | 2252 | u64 ii_icrb0_b_regval; |
2253 | struct { | 2253 | struct { |
2254 | uint64_t ib_xt_err:1; | 2254 | u64 ib_xt_err:1; |
2255 | uint64_t ib_mark:1; | 2255 | u64 ib_mark:1; |
2256 | uint64_t ib_ln_uce:1; | 2256 | u64 ib_ln_uce:1; |
2257 | uint64_t ib_errcode:3; | 2257 | u64 ib_errcode:3; |
2258 | uint64_t ib_error:1; | 2258 | u64 ib_error:1; |
2259 | uint64_t ib_stall__bte_1:1; | 2259 | u64 ib_stall__bte_1:1; |
2260 | uint64_t ib_stall__bte_0:1; | 2260 | u64 ib_stall__bte_0:1; |
2261 | uint64_t ib_stall__intr:1; | 2261 | u64 ib_stall__intr:1; |
2262 | uint64_t ib_stall_ib:1; | 2262 | u64 ib_stall_ib:1; |
2263 | uint64_t ib_intvn:1; | 2263 | u64 ib_intvn:1; |
2264 | uint64_t ib_wb:1; | 2264 | u64 ib_wb:1; |
2265 | uint64_t ib_hold:1; | 2265 | u64 ib_hold:1; |
2266 | uint64_t ib_ack:1; | 2266 | u64 ib_ack:1; |
2267 | uint64_t ib_resp:1; | 2267 | u64 ib_resp:1; |
2268 | uint64_t ib_ack_cnt:11; | 2268 | u64 ib_ack_cnt:11; |
2269 | uint64_t ib_rsvd:7; | 2269 | u64 ib_rsvd:7; |
2270 | uint64_t ib_exc:5; | 2270 | u64 ib_exc:5; |
2271 | uint64_t ib_init:3; | 2271 | u64 ib_init:3; |
2272 | uint64_t ib_imsg:8; | 2272 | u64 ib_imsg:8; |
2273 | uint64_t ib_imsgtype:2; | 2273 | u64 ib_imsgtype:2; |
2274 | uint64_t ib_use_old:1; | 2274 | u64 ib_use_old:1; |
2275 | uint64_t ib_rsvd_1:11; | 2275 | u64 ib_rsvd_1:11; |
2276 | } ii_icrb0_b_fld_s; | 2276 | } ii_icrb0_b_fld_s; |
2277 | } ii_icrb0_b_u_t; | 2277 | } ii_icrb0_b_u_t; |
2278 | 2278 | ||
@@ -2286,17 +2286,17 @@ typedef union ii_icrb0_b_u { | |||
2286 | ************************************************************************/ | 2286 | ************************************************************************/ |
2287 | 2287 | ||
2288 | typedef union ii_icrb0_c_u { | 2288 | typedef union ii_icrb0_c_u { |
2289 | uint64_t ii_icrb0_c_regval; | 2289 | u64 ii_icrb0_c_regval; |
2290 | struct { | 2290 | struct { |
2291 | uint64_t ic_source:15; | 2291 | u64 ic_source:15; |
2292 | uint64_t ic_size:2; | 2292 | u64 ic_size:2; |
2293 | uint64_t ic_ct:1; | 2293 | u64 ic_ct:1; |
2294 | uint64_t ic_bte_num:1; | 2294 | u64 ic_bte_num:1; |
2295 | uint64_t ic_gbr:1; | 2295 | u64 ic_gbr:1; |
2296 | uint64_t ic_resprqd:1; | 2296 | u64 ic_resprqd:1; |
2297 | uint64_t ic_bo:1; | 2297 | u64 ic_bo:1; |
2298 | uint64_t ic_suppl:15; | 2298 | u64 ic_suppl:15; |
2299 | uint64_t ic_rsvd:27; | 2299 | u64 ic_rsvd:27; |
2300 | } ii_icrb0_c_fld_s; | 2300 | } ii_icrb0_c_fld_s; |
2301 | } ii_icrb0_c_u_t; | 2301 | } ii_icrb0_c_u_t; |
2302 | 2302 | ||
@@ -2310,14 +2310,14 @@ typedef union ii_icrb0_c_u { | |||
2310 | ************************************************************************/ | 2310 | ************************************************************************/ |
2311 | 2311 | ||
2312 | typedef union ii_icrb0_d_u { | 2312 | typedef union ii_icrb0_d_u { |
2313 | uint64_t ii_icrb0_d_regval; | 2313 | u64 ii_icrb0_d_regval; |
2314 | struct { | 2314 | struct { |
2315 | uint64_t id_pa_be:43; | 2315 | u64 id_pa_be:43; |
2316 | uint64_t id_bte_op:1; | 2316 | u64 id_bte_op:1; |
2317 | uint64_t id_pr_psc:4; | 2317 | u64 id_pr_psc:4; |
2318 | uint64_t id_pr_cnt:4; | 2318 | u64 id_pr_cnt:4; |
2319 | uint64_t id_sleep:1; | 2319 | u64 id_sleep:1; |
2320 | uint64_t id_rsvd:11; | 2320 | u64 id_rsvd:11; |
2321 | } ii_icrb0_d_fld_s; | 2321 | } ii_icrb0_d_fld_s; |
2322 | } ii_icrb0_d_u_t; | 2322 | } ii_icrb0_d_u_t; |
2323 | 2323 | ||
@@ -2331,14 +2331,14 @@ typedef union ii_icrb0_d_u { | |||
2331 | ************************************************************************/ | 2331 | ************************************************************************/ |
2332 | 2332 | ||
2333 | typedef union ii_icrb0_e_u { | 2333 | typedef union ii_icrb0_e_u { |
2334 | uint64_t ii_icrb0_e_regval; | 2334 | u64 ii_icrb0_e_regval; |
2335 | struct { | 2335 | struct { |
2336 | uint64_t ie_timeout:8; | 2336 | u64 ie_timeout:8; |
2337 | uint64_t ie_context:15; | 2337 | u64 ie_context:15; |
2338 | uint64_t ie_rsvd:1; | 2338 | u64 ie_rsvd:1; |
2339 | uint64_t ie_tvld:1; | 2339 | u64 ie_tvld:1; |
2340 | uint64_t ie_cvld:1; | 2340 | u64 ie_cvld:1; |
2341 | uint64_t ie_rsvd_0:38; | 2341 | u64 ie_rsvd_0:38; |
2342 | } ii_icrb0_e_fld_s; | 2342 | } ii_icrb0_e_fld_s; |
2343 | } ii_icrb0_e_u_t; | 2343 | } ii_icrb0_e_u_t; |
2344 | 2344 | ||
@@ -2351,12 +2351,12 @@ typedef union ii_icrb0_e_u { | |||
2351 | ************************************************************************/ | 2351 | ************************************************************************/ |
2352 | 2352 | ||
2353 | typedef union ii_icsml_u { | 2353 | typedef union ii_icsml_u { |
2354 | uint64_t ii_icsml_regval; | 2354 | u64 ii_icsml_regval; |
2355 | struct { | 2355 | struct { |
2356 | uint64_t i_tt_addr:47; | 2356 | u64 i_tt_addr:47; |
2357 | uint64_t i_newsuppl_ex:14; | 2357 | u64 i_newsuppl_ex:14; |
2358 | uint64_t i_reserved:2; | 2358 | u64 i_reserved:2; |
2359 | uint64_t i_overflow:1; | 2359 | u64 i_overflow:1; |
2360 | } ii_icsml_fld_s; | 2360 | } ii_icsml_fld_s; |
2361 | } ii_icsml_u_t; | 2361 | } ii_icsml_u_t; |
2362 | 2362 | ||
@@ -2369,10 +2369,10 @@ typedef union ii_icsml_u { | |||
2369 | ************************************************************************/ | 2369 | ************************************************************************/ |
2370 | 2370 | ||
2371 | typedef union ii_icsmm_u { | 2371 | typedef union ii_icsmm_u { |
2372 | uint64_t ii_icsmm_regval; | 2372 | u64 ii_icsmm_regval; |
2373 | struct { | 2373 | struct { |
2374 | uint64_t i_tt_ack_cnt:11; | 2374 | u64 i_tt_ack_cnt:11; |
2375 | uint64_t i_reserved:53; | 2375 | u64 i_reserved:53; |
2376 | } ii_icsmm_fld_s; | 2376 | } ii_icsmm_fld_s; |
2377 | } ii_icsmm_u_t; | 2377 | } ii_icsmm_u_t; |
2378 | 2378 | ||
@@ -2385,48 +2385,48 @@ typedef union ii_icsmm_u { | |||
2385 | ************************************************************************/ | 2385 | ************************************************************************/ |
2386 | 2386 | ||
2387 | typedef union ii_icsmh_u { | 2387 | typedef union ii_icsmh_u { |
2388 | uint64_t ii_icsmh_regval; | 2388 | u64 ii_icsmh_regval; |
2389 | struct { | 2389 | struct { |
2390 | uint64_t i_tt_vld:1; | 2390 | u64 i_tt_vld:1; |
2391 | uint64_t i_xerr:1; | 2391 | u64 i_xerr:1; |
2392 | uint64_t i_ft_cwact_o:1; | 2392 | u64 i_ft_cwact_o:1; |
2393 | uint64_t i_ft_wact_o:1; | 2393 | u64 i_ft_wact_o:1; |
2394 | uint64_t i_ft_active_o:1; | 2394 | u64 i_ft_active_o:1; |
2395 | uint64_t i_sync:1; | 2395 | u64 i_sync:1; |
2396 | uint64_t i_mnusg:1; | 2396 | u64 i_mnusg:1; |
2397 | uint64_t i_mnusz:1; | 2397 | u64 i_mnusz:1; |
2398 | uint64_t i_plusz:1; | 2398 | u64 i_plusz:1; |
2399 | uint64_t i_plusg:1; | 2399 | u64 i_plusg:1; |
2400 | uint64_t i_tt_exc:5; | 2400 | u64 i_tt_exc:5; |
2401 | uint64_t i_tt_wb:1; | 2401 | u64 i_tt_wb:1; |
2402 | uint64_t i_tt_hold:1; | 2402 | u64 i_tt_hold:1; |
2403 | uint64_t i_tt_ack:1; | 2403 | u64 i_tt_ack:1; |
2404 | uint64_t i_tt_resp:1; | 2404 | u64 i_tt_resp:1; |
2405 | uint64_t i_tt_intvn:1; | 2405 | u64 i_tt_intvn:1; |
2406 | uint64_t i_g_stall_bte1:1; | 2406 | u64 i_g_stall_bte1:1; |
2407 | uint64_t i_g_stall_bte0:1; | 2407 | u64 i_g_stall_bte0:1; |
2408 | uint64_t i_g_stall_il:1; | 2408 | u64 i_g_stall_il:1; |
2409 | uint64_t i_g_stall_ib:1; | 2409 | u64 i_g_stall_ib:1; |
2410 | uint64_t i_tt_imsg:8; | 2410 | u64 i_tt_imsg:8; |
2411 | uint64_t i_tt_imsgtype:2; | 2411 | u64 i_tt_imsgtype:2; |
2412 | uint64_t i_tt_use_old:1; | 2412 | u64 i_tt_use_old:1; |
2413 | uint64_t i_tt_respreqd:1; | 2413 | u64 i_tt_respreqd:1; |
2414 | uint64_t i_tt_bte_num:1; | 2414 | u64 i_tt_bte_num:1; |
2415 | uint64_t i_cbn:1; | 2415 | u64 i_cbn:1; |
2416 | uint64_t i_match:1; | 2416 | u64 i_match:1; |
2417 | uint64_t i_rpcnt_lt_34:1; | 2417 | u64 i_rpcnt_lt_34:1; |
2418 | uint64_t i_rpcnt_ge_34:1; | 2418 | u64 i_rpcnt_ge_34:1; |
2419 | uint64_t i_rpcnt_lt_18:1; | 2419 | u64 i_rpcnt_lt_18:1; |
2420 | uint64_t i_rpcnt_ge_18:1; | 2420 | u64 i_rpcnt_ge_18:1; |
2421 | uint64_t i_rpcnt_lt_2:1; | 2421 | u64 i_rpcnt_lt_2:1; |
2422 | uint64_t i_rpcnt_ge_2:1; | 2422 | u64 i_rpcnt_ge_2:1; |
2423 | uint64_t i_rqcnt_lt_18:1; | 2423 | u64 i_rqcnt_lt_18:1; |
2424 | uint64_t i_rqcnt_ge_18:1; | 2424 | u64 i_rqcnt_ge_18:1; |
2425 | uint64_t i_rqcnt_lt_2:1; | 2425 | u64 i_rqcnt_lt_2:1; |
2426 | uint64_t i_rqcnt_ge_2:1; | 2426 | u64 i_rqcnt_ge_2:1; |
2427 | uint64_t i_tt_device:7; | 2427 | u64 i_tt_device:7; |
2428 | uint64_t i_tt_init:3; | 2428 | u64 i_tt_init:3; |
2429 | uint64_t i_reserved:5; | 2429 | u64 i_reserved:5; |
2430 | } ii_icsmh_fld_s; | 2430 | } ii_icsmh_fld_s; |
2431 | } ii_icsmh_u_t; | 2431 | } ii_icsmh_u_t; |
2432 | 2432 | ||
@@ -2439,14 +2439,14 @@ typedef union ii_icsmh_u { | |||
2439 | ************************************************************************/ | 2439 | ************************************************************************/ |
2440 | 2440 | ||
2441 | typedef union ii_idbss_u { | 2441 | typedef union ii_idbss_u { |
2442 | uint64_t ii_idbss_regval; | 2442 | u64 ii_idbss_regval; |
2443 | struct { | 2443 | struct { |
2444 | uint64_t i_iioclk_core_submenu:3; | 2444 | u64 i_iioclk_core_submenu:3; |
2445 | uint64_t i_rsvd:5; | 2445 | u64 i_rsvd:5; |
2446 | uint64_t i_fsbclk_wrapper_submenu:3; | 2446 | u64 i_fsbclk_wrapper_submenu:3; |
2447 | uint64_t i_rsvd_1:5; | 2447 | u64 i_rsvd_1:5; |
2448 | uint64_t i_iioclk_menu:5; | 2448 | u64 i_iioclk_menu:5; |
2449 | uint64_t i_rsvd_2:43; | 2449 | u64 i_rsvd_2:43; |
2450 | } ii_idbss_fld_s; | 2450 | } ii_idbss_fld_s; |
2451 | } ii_idbss_u_t; | 2451 | } ii_idbss_u_t; |
2452 | 2452 | ||
@@ -2466,13 +2466,13 @@ typedef union ii_idbss_u { | |||
2466 | ************************************************************************/ | 2466 | ************************************************************************/ |
2467 | 2467 | ||
2468 | typedef union ii_ibls0_u { | 2468 | typedef union ii_ibls0_u { |
2469 | uint64_t ii_ibls0_regval; | 2469 | u64 ii_ibls0_regval; |
2470 | struct { | 2470 | struct { |
2471 | uint64_t i_length:16; | 2471 | u64 i_length:16; |
2472 | uint64_t i_error:1; | 2472 | u64 i_error:1; |
2473 | uint64_t i_rsvd_1:3; | 2473 | u64 i_rsvd_1:3; |
2474 | uint64_t i_busy:1; | 2474 | u64 i_busy:1; |
2475 | uint64_t i_rsvd:43; | 2475 | u64 i_rsvd:43; |
2476 | } ii_ibls0_fld_s; | 2476 | } ii_ibls0_fld_s; |
2477 | } ii_ibls0_u_t; | 2477 | } ii_ibls0_u_t; |
2478 | 2478 | ||
@@ -2487,11 +2487,11 @@ typedef union ii_ibls0_u { | |||
2487 | ************************************************************************/ | 2487 | ************************************************************************/ |
2488 | 2488 | ||
2489 | typedef union ii_ibsa0_u { | 2489 | typedef union ii_ibsa0_u { |
2490 | uint64_t ii_ibsa0_regval; | 2490 | u64 ii_ibsa0_regval; |
2491 | struct { | 2491 | struct { |
2492 | uint64_t i_rsvd_1:7; | 2492 | u64 i_rsvd_1:7; |
2493 | uint64_t i_addr:42; | 2493 | u64 i_addr:42; |
2494 | uint64_t i_rsvd:15; | 2494 | u64 i_rsvd:15; |
2495 | } ii_ibsa0_fld_s; | 2495 | } ii_ibsa0_fld_s; |
2496 | } ii_ibsa0_u_t; | 2496 | } ii_ibsa0_u_t; |
2497 | 2497 | ||
@@ -2506,11 +2506,11 @@ typedef union ii_ibsa0_u { | |||
2506 | ************************************************************************/ | 2506 | ************************************************************************/ |
2507 | 2507 | ||
2508 | typedef union ii_ibda0_u { | 2508 | typedef union ii_ibda0_u { |
2509 | uint64_t ii_ibda0_regval; | 2509 | u64 ii_ibda0_regval; |
2510 | struct { | 2510 | struct { |
2511 | uint64_t i_rsvd_1:7; | 2511 | u64 i_rsvd_1:7; |
2512 | uint64_t i_addr:42; | 2512 | u64 i_addr:42; |
2513 | uint64_t i_rsvd:15; | 2513 | u64 i_rsvd:15; |
2514 | } ii_ibda0_fld_s; | 2514 | } ii_ibda0_fld_s; |
2515 | } ii_ibda0_u_t; | 2515 | } ii_ibda0_u_t; |
2516 | 2516 | ||
@@ -2527,14 +2527,14 @@ typedef union ii_ibda0_u { | |||
2527 | ************************************************************************/ | 2527 | ************************************************************************/ |
2528 | 2528 | ||
2529 | typedef union ii_ibct0_u { | 2529 | typedef union ii_ibct0_u { |
2530 | uint64_t ii_ibct0_regval; | 2530 | u64 ii_ibct0_regval; |
2531 | struct { | 2531 | struct { |
2532 | uint64_t i_zerofill:1; | 2532 | u64 i_zerofill:1; |
2533 | uint64_t i_rsvd_2:3; | 2533 | u64 i_rsvd_2:3; |
2534 | uint64_t i_notify:1; | 2534 | u64 i_notify:1; |
2535 | uint64_t i_rsvd_1:3; | 2535 | u64 i_rsvd_1:3; |
2536 | uint64_t i_poison:1; | 2536 | u64 i_poison:1; |
2537 | uint64_t i_rsvd:55; | 2537 | u64 i_rsvd:55; |
2538 | } ii_ibct0_fld_s; | 2538 | } ii_ibct0_fld_s; |
2539 | } ii_ibct0_u_t; | 2539 | } ii_ibct0_u_t; |
2540 | 2540 | ||
@@ -2546,11 +2546,11 @@ typedef union ii_ibct0_u { | |||
2546 | ************************************************************************/ | 2546 | ************************************************************************/ |
2547 | 2547 | ||
2548 | typedef union ii_ibna0_u { | 2548 | typedef union ii_ibna0_u { |
2549 | uint64_t ii_ibna0_regval; | 2549 | u64 ii_ibna0_regval; |
2550 | struct { | 2550 | struct { |
2551 | uint64_t i_rsvd_1:7; | 2551 | u64 i_rsvd_1:7; |
2552 | uint64_t i_addr:42; | 2552 | u64 i_addr:42; |
2553 | uint64_t i_rsvd:15; | 2553 | u64 i_rsvd:15; |
2554 | } ii_ibna0_fld_s; | 2554 | } ii_ibna0_fld_s; |
2555 | } ii_ibna0_u_t; | 2555 | } ii_ibna0_u_t; |
2556 | 2556 | ||
@@ -2563,13 +2563,13 @@ typedef union ii_ibna0_u { | |||
2563 | ************************************************************************/ | 2563 | ************************************************************************/ |
2564 | 2564 | ||
2565 | typedef union ii_ibia0_u { | 2565 | typedef union ii_ibia0_u { |
2566 | uint64_t ii_ibia0_regval; | 2566 | u64 ii_ibia0_regval; |
2567 | struct { | 2567 | struct { |
2568 | uint64_t i_rsvd_2:1; | 2568 | u64 i_rsvd_2:1; |
2569 | uint64_t i_node_id:11; | 2569 | u64 i_node_id:11; |
2570 | uint64_t i_rsvd_1:4; | 2570 | u64 i_rsvd_1:4; |
2571 | uint64_t i_level:7; | 2571 | u64 i_level:7; |
2572 | uint64_t i_rsvd:41; | 2572 | u64 i_rsvd:41; |
2573 | } ii_ibia0_fld_s; | 2573 | } ii_ibia0_fld_s; |
2574 | } ii_ibia0_u_t; | 2574 | } ii_ibia0_u_t; |
2575 | 2575 | ||
@@ -2589,13 +2589,13 @@ typedef union ii_ibia0_u { | |||
2589 | ************************************************************************/ | 2589 | ************************************************************************/ |
2590 | 2590 | ||
2591 | typedef union ii_ibls1_u { | 2591 | typedef union ii_ibls1_u { |
2592 | uint64_t ii_ibls1_regval; | 2592 | u64 ii_ibls1_regval; |
2593 | struct { | 2593 | struct { |
2594 | uint64_t i_length:16; | 2594 | u64 i_length:16; |
2595 | uint64_t i_error:1; | 2595 | u64 i_error:1; |
2596 | uint64_t i_rsvd_1:3; | 2596 | u64 i_rsvd_1:3; |
2597 | uint64_t i_busy:1; | 2597 | u64 i_busy:1; |
2598 | uint64_t i_rsvd:43; | 2598 | u64 i_rsvd:43; |
2599 | } ii_ibls1_fld_s; | 2599 | } ii_ibls1_fld_s; |
2600 | } ii_ibls1_u_t; | 2600 | } ii_ibls1_u_t; |
2601 | 2601 | ||
@@ -2610,11 +2610,11 @@ typedef union ii_ibls1_u { | |||
2610 | ************************************************************************/ | 2610 | ************************************************************************/ |
2611 | 2611 | ||
2612 | typedef union ii_ibsa1_u { | 2612 | typedef union ii_ibsa1_u { |
2613 | uint64_t ii_ibsa1_regval; | 2613 | u64 ii_ibsa1_regval; |
2614 | struct { | 2614 | struct { |
2615 | uint64_t i_rsvd_1:7; | 2615 | u64 i_rsvd_1:7; |
2616 | uint64_t i_addr:33; | 2616 | u64 i_addr:33; |
2617 | uint64_t i_rsvd:24; | 2617 | u64 i_rsvd:24; |
2618 | } ii_ibsa1_fld_s; | 2618 | } ii_ibsa1_fld_s; |
2619 | } ii_ibsa1_u_t; | 2619 | } ii_ibsa1_u_t; |
2620 | 2620 | ||
@@ -2629,11 +2629,11 @@ typedef union ii_ibsa1_u { | |||
2629 | ************************************************************************/ | 2629 | ************************************************************************/ |
2630 | 2630 | ||
2631 | typedef union ii_ibda1_u { | 2631 | typedef union ii_ibda1_u { |
2632 | uint64_t ii_ibda1_regval; | 2632 | u64 ii_ibda1_regval; |
2633 | struct { | 2633 | struct { |
2634 | uint64_t i_rsvd_1:7; | 2634 | u64 i_rsvd_1:7; |
2635 | uint64_t i_addr:33; | 2635 | u64 i_addr:33; |
2636 | uint64_t i_rsvd:24; | 2636 | u64 i_rsvd:24; |
2637 | } ii_ibda1_fld_s; | 2637 | } ii_ibda1_fld_s; |
2638 | } ii_ibda1_u_t; | 2638 | } ii_ibda1_u_t; |
2639 | 2639 | ||
@@ -2650,14 +2650,14 @@ typedef union ii_ibda1_u { | |||
2650 | ************************************************************************/ | 2650 | ************************************************************************/ |
2651 | 2651 | ||
2652 | typedef union ii_ibct1_u { | 2652 | typedef union ii_ibct1_u { |
2653 | uint64_t ii_ibct1_regval; | 2653 | u64 ii_ibct1_regval; |
2654 | struct { | 2654 | struct { |
2655 | uint64_t i_zerofill:1; | 2655 | u64 i_zerofill:1; |
2656 | uint64_t i_rsvd_2:3; | 2656 | u64 i_rsvd_2:3; |
2657 | uint64_t i_notify:1; | 2657 | u64 i_notify:1; |
2658 | uint64_t i_rsvd_1:3; | 2658 | u64 i_rsvd_1:3; |
2659 | uint64_t i_poison:1; | 2659 | u64 i_poison:1; |
2660 | uint64_t i_rsvd:55; | 2660 | u64 i_rsvd:55; |
2661 | } ii_ibct1_fld_s; | 2661 | } ii_ibct1_fld_s; |
2662 | } ii_ibct1_u_t; | 2662 | } ii_ibct1_u_t; |
2663 | 2663 | ||
@@ -2669,11 +2669,11 @@ typedef union ii_ibct1_u { | |||
2669 | ************************************************************************/ | 2669 | ************************************************************************/ |
2670 | 2670 | ||
2671 | typedef union ii_ibna1_u { | 2671 | typedef union ii_ibna1_u { |
2672 | uint64_t ii_ibna1_regval; | 2672 | u64 ii_ibna1_regval; |
2673 | struct { | 2673 | struct { |
2674 | uint64_t i_rsvd_1:7; | 2674 | u64 i_rsvd_1:7; |
2675 | uint64_t i_addr:33; | 2675 | u64 i_addr:33; |
2676 | uint64_t i_rsvd:24; | 2676 | u64 i_rsvd:24; |
2677 | } ii_ibna1_fld_s; | 2677 | } ii_ibna1_fld_s; |
2678 | } ii_ibna1_u_t; | 2678 | } ii_ibna1_u_t; |
2679 | 2679 | ||
@@ -2686,13 +2686,13 @@ typedef union ii_ibna1_u { | |||
2686 | ************************************************************************/ | 2686 | ************************************************************************/ |
2687 | 2687 | ||
2688 | typedef union ii_ibia1_u { | 2688 | typedef union ii_ibia1_u { |
2689 | uint64_t ii_ibia1_regval; | 2689 | u64 ii_ibia1_regval; |
2690 | struct { | 2690 | struct { |
2691 | uint64_t i_pi_id:1; | 2691 | u64 i_pi_id:1; |
2692 | uint64_t i_node_id:8; | 2692 | u64 i_node_id:8; |
2693 | uint64_t i_rsvd_1:7; | 2693 | u64 i_rsvd_1:7; |
2694 | uint64_t i_level:7; | 2694 | u64 i_level:7; |
2695 | uint64_t i_rsvd:41; | 2695 | u64 i_rsvd:41; |
2696 | } ii_ibia1_fld_s; | 2696 | } ii_ibia1_fld_s; |
2697 | } ii_ibia1_u_t; | 2697 | } ii_ibia1_u_t; |
2698 | 2698 | ||
@@ -2712,12 +2712,12 @@ typedef union ii_ibia1_u { | |||
2712 | ************************************************************************/ | 2712 | ************************************************************************/ |
2713 | 2713 | ||
2714 | typedef union ii_ipcr_u { | 2714 | typedef union ii_ipcr_u { |
2715 | uint64_t ii_ipcr_regval; | 2715 | u64 ii_ipcr_regval; |
2716 | struct { | 2716 | struct { |
2717 | uint64_t i_ippr0_c:4; | 2717 | u64 i_ippr0_c:4; |
2718 | uint64_t i_ippr1_c:4; | 2718 | u64 i_ippr1_c:4; |
2719 | uint64_t i_icct:8; | 2719 | u64 i_icct:8; |
2720 | uint64_t i_rsvd:48; | 2720 | u64 i_rsvd:48; |
2721 | } ii_ipcr_fld_s; | 2721 | } ii_ipcr_fld_s; |
2722 | } ii_ipcr_u_t; | 2722 | } ii_ipcr_u_t; |
2723 | 2723 | ||
@@ -2728,10 +2728,10 @@ typedef union ii_ipcr_u { | |||
2728 | ************************************************************************/ | 2728 | ************************************************************************/ |
2729 | 2729 | ||
2730 | typedef union ii_ippr_u { | 2730 | typedef union ii_ippr_u { |
2731 | uint64_t ii_ippr_regval; | 2731 | u64 ii_ippr_regval; |
2732 | struct { | 2732 | struct { |
2733 | uint64_t i_ippr0:32; | 2733 | u64 i_ippr0:32; |
2734 | uint64_t i_ippr1:32; | 2734 | u64 i_ippr1:32; |
2735 | } ii_ippr_fld_s; | 2735 | } ii_ippr_fld_s; |
2736 | } ii_ippr_u_t; | 2736 | } ii_ippr_u_t; |
2737 | 2737 | ||
@@ -3267,15 +3267,15 @@ typedef ii_icrb0_e_u_t icrbe_t; | |||
3267 | #define IO_PERF_SETS 32 | 3267 | #define IO_PERF_SETS 32 |
3268 | 3268 | ||
3269 | /* Bit for the widget in inbound access register */ | 3269 | /* Bit for the widget in inbound access register */ |
3270 | #define IIO_IIWA_WIDGET(_w) ((uint64_t)(1ULL << _w)) | 3270 | #define IIO_IIWA_WIDGET(_w) ((u64)(1ULL << _w)) |
3271 | /* Bit for the widget in outbound access register */ | 3271 | /* Bit for the widget in outbound access register */ |
3272 | #define IIO_IOWA_WIDGET(_w) ((uint64_t)(1ULL << _w)) | 3272 | #define IIO_IOWA_WIDGET(_w) ((u64)(1ULL << _w)) |
3273 | 3273 | ||
3274 | /* NOTE: The following define assumes that we are going to get | 3274 | /* NOTE: The following define assumes that we are going to get |
3275 | * widget numbers from 8 thru F and the device numbers within | 3275 | * widget numbers from 8 thru F and the device numbers within |
3276 | * widget from 0 thru 7. | 3276 | * widget from 0 thru 7. |
3277 | */ | 3277 | */ |
3278 | #define IIO_IIDEM_WIDGETDEV_MASK(w, d) ((uint64_t)(1ULL << (8 * ((w) - 8) + (d)))) | 3278 | #define IIO_IIDEM_WIDGETDEV_MASK(w, d) ((u64)(1ULL << (8 * ((w) - 8) + (d)))) |
3279 | 3279 | ||
3280 | /* IO Interrupt Destination Register */ | 3280 | /* IO Interrupt Destination Register */ |
3281 | #define IIO_IIDSR_SENT_SHIFT 28 | 3281 | #define IIO_IIDSR_SENT_SHIFT 28 |
@@ -3302,9 +3302,9 @@ typedef ii_icrb0_e_u_t icrbe_t; | |||
3302 | */ | 3302 | */ |
3303 | 3303 | ||
3304 | typedef union hubii_wcr_u { | 3304 | typedef union hubii_wcr_u { |
3305 | uint64_t wcr_reg_value; | 3305 | u64 wcr_reg_value; |
3306 | struct { | 3306 | struct { |
3307 | uint64_t wcr_widget_id:4, /* LLP crossbar credit */ | 3307 | u64 wcr_widget_id:4, /* LLP crossbar credit */ |
3308 | wcr_tag_mode:1, /* Tag mode */ | 3308 | wcr_tag_mode:1, /* Tag mode */ |
3309 | wcr_rsvd1:8, /* Reserved */ | 3309 | wcr_rsvd1:8, /* Reserved */ |
3310 | wcr_xbar_crd:3, /* LLP crossbar credit */ | 3310 | wcr_xbar_crd:3, /* LLP crossbar credit */ |
@@ -3324,9 +3324,9 @@ performance registers */ | |||
3324 | performed */ | 3324 | performed */ |
3325 | 3325 | ||
3326 | typedef union io_perf_sel { | 3326 | typedef union io_perf_sel { |
3327 | uint64_t perf_sel_reg; | 3327 | u64 perf_sel_reg; |
3328 | struct { | 3328 | struct { |
3329 | uint64_t perf_ippr0:4, perf_ippr1:4, perf_icct:8, perf_rsvd:48; | 3329 | u64 perf_ippr0:4, perf_ippr1:4, perf_icct:8, perf_rsvd:48; |
3330 | } perf_sel_bits; | 3330 | } perf_sel_bits; |
3331 | } io_perf_sel_t; | 3331 | } io_perf_sel_t; |
3332 | 3332 | ||
@@ -3334,24 +3334,24 @@ typedef union io_perf_sel { | |||
3334 | hardware problems there is only one counter, not two. */ | 3334 | hardware problems there is only one counter, not two. */ |
3335 | 3335 | ||
3336 | typedef union io_perf_cnt { | 3336 | typedef union io_perf_cnt { |
3337 | uint64_t perf_cnt; | 3337 | u64 perf_cnt; |
3338 | struct { | 3338 | struct { |
3339 | uint64_t perf_cnt:20, perf_rsvd2:12, perf_rsvd1:32; | 3339 | u64 perf_cnt:20, perf_rsvd2:12, perf_rsvd1:32; |
3340 | } perf_cnt_bits; | 3340 | } perf_cnt_bits; |
3341 | 3341 | ||
3342 | } io_perf_cnt_t; | 3342 | } io_perf_cnt_t; |
3343 | 3343 | ||
3344 | typedef union iprte_a { | 3344 | typedef union iprte_a { |
3345 | uint64_t entry; | 3345 | u64 entry; |
3346 | struct { | 3346 | struct { |
3347 | uint64_t i_rsvd_1:3; | 3347 | u64 i_rsvd_1:3; |
3348 | uint64_t i_addr:38; | 3348 | u64 i_addr:38; |
3349 | uint64_t i_init:3; | 3349 | u64 i_init:3; |
3350 | uint64_t i_source:8; | 3350 | u64 i_source:8; |
3351 | uint64_t i_rsvd:2; | 3351 | u64 i_rsvd:2; |
3352 | uint64_t i_widget:4; | 3352 | u64 i_widget:4; |
3353 | uint64_t i_to_cnt:5; | 3353 | u64 i_to_cnt:5; |
3354 | uint64_t i_vld:1; | 3354 | u64 i_vld:1; |
3355 | } iprte_fields; | 3355 | } iprte_fields; |
3356 | } iprte_a_t; | 3356 | } iprte_a_t; |
3357 | 3357 | ||
diff --git a/include/asm-ia64/sn/sn_sal.h b/include/asm-ia64/sn/sn_sal.h index 2a8b0d92a5d6..e77f0c9b7d3d 100644 --- a/include/asm-ia64/sn/sn_sal.h +++ b/include/asm-ia64/sn/sn_sal.h | |||
@@ -75,7 +75,8 @@ | |||
75 | #define SN_SAL_IOIF_GET_HUBDEV_INFO 0x02000055 | 75 | #define SN_SAL_IOIF_GET_HUBDEV_INFO 0x02000055 |
76 | #define SN_SAL_IOIF_GET_PCIBUS_INFO 0x02000056 | 76 | #define SN_SAL_IOIF_GET_PCIBUS_INFO 0x02000056 |
77 | #define SN_SAL_IOIF_GET_PCIDEV_INFO 0x02000057 | 77 | #define SN_SAL_IOIF_GET_PCIDEV_INFO 0x02000057 |
78 | #define SN_SAL_IOIF_GET_WIDGET_DMAFLUSH_LIST 0x02000058 | 78 | #define SN_SAL_IOIF_GET_WIDGET_DMAFLUSH_LIST 0x02000058 // deprecated |
79 | #define SN_SAL_IOIF_GET_DEVICE_DMAFLUSH_LIST 0x0200005a | ||
79 | 80 | ||
80 | #define SN_SAL_HUB_ERROR_INTERRUPT 0x02000060 | 81 | #define SN_SAL_HUB_ERROR_INTERRUPT 0x02000060 |
81 | #define SN_SAL_BTE_RECOVER 0x02000061 | 82 | #define SN_SAL_BTE_RECOVER 0x02000061 |
@@ -272,7 +273,7 @@ ia64_sn_console_putc(char ch) | |||
272 | ret_stuff.v0 = 0; | 273 | ret_stuff.v0 = 0; |
273 | ret_stuff.v1 = 0; | 274 | ret_stuff.v1 = 0; |
274 | ret_stuff.v2 = 0; | 275 | ret_stuff.v2 = 0; |
275 | SAL_CALL_NOLOCK(ret_stuff, SN_SAL_CONSOLE_PUTC, (uint64_t)ch, 0, 0, 0, 0, 0, 0); | 276 | SAL_CALL_NOLOCK(ret_stuff, SN_SAL_CONSOLE_PUTC, (u64)ch, 0, 0, 0, 0, 0, 0); |
276 | 277 | ||
277 | return ret_stuff.status; | 278 | return ret_stuff.status; |
278 | } | 279 | } |
@@ -289,7 +290,7 @@ ia64_sn_console_putb(const char *buf, int len) | |||
289 | ret_stuff.v0 = 0; | 290 | ret_stuff.v0 = 0; |
290 | ret_stuff.v1 = 0; | 291 | ret_stuff.v1 = 0; |
291 | ret_stuff.v2 = 0; | 292 | ret_stuff.v2 = 0; |
292 | SAL_CALL_NOLOCK(ret_stuff, SN_SAL_CONSOLE_PUTB, (uint64_t)buf, (uint64_t)len, 0, 0, 0, 0, 0); | 293 | SAL_CALL_NOLOCK(ret_stuff, SN_SAL_CONSOLE_PUTB, (u64)buf, (u64)len, 0, 0, 0, 0, 0); |
293 | 294 | ||
294 | if ( ret_stuff.status == 0 ) { | 295 | if ( ret_stuff.status == 0 ) { |
295 | return ret_stuff.v0; | 296 | return ret_stuff.v0; |
@@ -309,7 +310,7 @@ ia64_sn_plat_specific_err_print(int (*hook)(const char*, ...), char *rec) | |||
309 | ret_stuff.v0 = 0; | 310 | ret_stuff.v0 = 0; |
310 | ret_stuff.v1 = 0; | 311 | ret_stuff.v1 = 0; |
311 | ret_stuff.v2 = 0; | 312 | ret_stuff.v2 = 0; |
312 | SAL_CALL_REENTRANT(ret_stuff, SN_SAL_PRINT_ERROR, (uint64_t)hook, (uint64_t)rec, 0, 0, 0, 0, 0); | 313 | SAL_CALL_REENTRANT(ret_stuff, SN_SAL_PRINT_ERROR, (u64)hook, (u64)rec, 0, 0, 0, 0, 0); |
313 | 314 | ||
314 | return ret_stuff.status; | 315 | return ret_stuff.status; |
315 | } | 316 | } |
@@ -397,7 +398,7 @@ ia64_sn_console_intr_status(void) | |||
397 | * Enable an interrupt on the SAL console device. | 398 | * Enable an interrupt on the SAL console device. |
398 | */ | 399 | */ |
399 | static inline void | 400 | static inline void |
400 | ia64_sn_console_intr_enable(uint64_t intr) | 401 | ia64_sn_console_intr_enable(u64 intr) |
401 | { | 402 | { |
402 | struct ia64_sal_retval ret_stuff; | 403 | struct ia64_sal_retval ret_stuff; |
403 | 404 | ||
@@ -414,7 +415,7 @@ ia64_sn_console_intr_enable(uint64_t intr) | |||
414 | * Disable an interrupt on the SAL console device. | 415 | * Disable an interrupt on the SAL console device. |
415 | */ | 416 | */ |
416 | static inline void | 417 | static inline void |
417 | ia64_sn_console_intr_disable(uint64_t intr) | 418 | ia64_sn_console_intr_disable(u64 intr) |
418 | { | 419 | { |
419 | struct ia64_sal_retval ret_stuff; | 420 | struct ia64_sal_retval ret_stuff; |
420 | 421 | ||
@@ -440,7 +441,7 @@ ia64_sn_console_xmit_chars(char *buf, int len) | |||
440 | ret_stuff.v1 = 0; | 441 | ret_stuff.v1 = 0; |
441 | ret_stuff.v2 = 0; | 442 | ret_stuff.v2 = 0; |
442 | SAL_CALL_NOLOCK(ret_stuff, SN_SAL_CONSOLE_XMIT_CHARS, | 443 | SAL_CALL_NOLOCK(ret_stuff, SN_SAL_CONSOLE_XMIT_CHARS, |
443 | (uint64_t)buf, (uint64_t)len, | 444 | (u64)buf, (u64)len, |
444 | 0, 0, 0, 0, 0); | 445 | 0, 0, 0, 0, 0); |
445 | 446 | ||
446 | if (ret_stuff.status == 0) { | 447 | if (ret_stuff.status == 0) { |
@@ -1100,7 +1101,7 @@ ia64_sn_bte_recovery(nasid_t nasid) | |||
1100 | struct ia64_sal_retval rv; | 1101 | struct ia64_sal_retval rv; |
1101 | 1102 | ||
1102 | rv.status = 0; | 1103 | rv.status = 0; |
1103 | SAL_CALL_NOLOCK(rv, SN_SAL_BTE_RECOVER, 0, 0, 0, 0, 0, 0, 0); | 1104 | SAL_CALL_NOLOCK(rv, SN_SAL_BTE_RECOVER, (u64)nasid, 0, 0, 0, 0, 0, 0); |
1104 | if (rv.status == SALRET_NOT_IMPLEMENTED) | 1105 | if (rv.status == SALRET_NOT_IMPLEMENTED) |
1105 | return 0; | 1106 | return 0; |
1106 | return (int) rv.status; | 1107 | return (int) rv.status; |
diff --git a/include/asm-ia64/sn/tioca.h b/include/asm-ia64/sn/tioca.h index bc1aacfb9483..666222d7f0f6 100644 --- a/include/asm-ia64/sn/tioca.h +++ b/include/asm-ia64/sn/tioca.h | |||
@@ -19,47 +19,47 @@ | |||
19 | */ | 19 | */ |
20 | 20 | ||
21 | struct tioca { | 21 | struct tioca { |
22 | uint64_t ca_id; /* 0x000000 */ | 22 | u64 ca_id; /* 0x000000 */ |
23 | uint64_t ca_control1; /* 0x000008 */ | 23 | u64 ca_control1; /* 0x000008 */ |
24 | uint64_t ca_control2; /* 0x000010 */ | 24 | u64 ca_control2; /* 0x000010 */ |
25 | uint64_t ca_status1; /* 0x000018 */ | 25 | u64 ca_status1; /* 0x000018 */ |
26 | uint64_t ca_status2; /* 0x000020 */ | 26 | u64 ca_status2; /* 0x000020 */ |
27 | uint64_t ca_gart_aperature; /* 0x000028 */ | 27 | u64 ca_gart_aperature; /* 0x000028 */ |
28 | uint64_t ca_gfx_detach; /* 0x000030 */ | 28 | u64 ca_gfx_detach; /* 0x000030 */ |
29 | uint64_t ca_inta_dest_addr; /* 0x000038 */ | 29 | u64 ca_inta_dest_addr; /* 0x000038 */ |
30 | uint64_t ca_intb_dest_addr; /* 0x000040 */ | 30 | u64 ca_intb_dest_addr; /* 0x000040 */ |
31 | uint64_t ca_err_int_dest_addr; /* 0x000048 */ | 31 | u64 ca_err_int_dest_addr; /* 0x000048 */ |
32 | uint64_t ca_int_status; /* 0x000050 */ | 32 | u64 ca_int_status; /* 0x000050 */ |
33 | uint64_t ca_int_status_alias; /* 0x000058 */ | 33 | u64 ca_int_status_alias; /* 0x000058 */ |
34 | uint64_t ca_mult_error; /* 0x000060 */ | 34 | u64 ca_mult_error; /* 0x000060 */ |
35 | uint64_t ca_mult_error_alias; /* 0x000068 */ | 35 | u64 ca_mult_error_alias; /* 0x000068 */ |
36 | uint64_t ca_first_error; /* 0x000070 */ | 36 | u64 ca_first_error; /* 0x000070 */ |
37 | uint64_t ca_int_mask; /* 0x000078 */ | 37 | u64 ca_int_mask; /* 0x000078 */ |
38 | uint64_t ca_crm_pkterr_type; /* 0x000080 */ | 38 | u64 ca_crm_pkterr_type; /* 0x000080 */ |
39 | uint64_t ca_crm_pkterr_type_alias; /* 0x000088 */ | 39 | u64 ca_crm_pkterr_type_alias; /* 0x000088 */ |
40 | uint64_t ca_crm_ct_error_detail_1; /* 0x000090 */ | 40 | u64 ca_crm_ct_error_detail_1; /* 0x000090 */ |
41 | uint64_t ca_crm_ct_error_detail_2; /* 0x000098 */ | 41 | u64 ca_crm_ct_error_detail_2; /* 0x000098 */ |
42 | uint64_t ca_crm_tnumto; /* 0x0000A0 */ | 42 | u64 ca_crm_tnumto; /* 0x0000A0 */ |
43 | uint64_t ca_gart_err; /* 0x0000A8 */ | 43 | u64 ca_gart_err; /* 0x0000A8 */ |
44 | uint64_t ca_pcierr_type; /* 0x0000B0 */ | 44 | u64 ca_pcierr_type; /* 0x0000B0 */ |
45 | uint64_t ca_pcierr_addr; /* 0x0000B8 */ | 45 | u64 ca_pcierr_addr; /* 0x0000B8 */ |
46 | 46 | ||
47 | uint64_t ca_pad_0000C0[3]; /* 0x0000{C0..D0} */ | 47 | u64 ca_pad_0000C0[3]; /* 0x0000{C0..D0} */ |
48 | 48 | ||
49 | uint64_t ca_pci_rd_buf_flush; /* 0x0000D8 */ | 49 | u64 ca_pci_rd_buf_flush; /* 0x0000D8 */ |
50 | uint64_t ca_pci_dma_addr_extn; /* 0x0000E0 */ | 50 | u64 ca_pci_dma_addr_extn; /* 0x0000E0 */ |
51 | uint64_t ca_agp_dma_addr_extn; /* 0x0000E8 */ | 51 | u64 ca_agp_dma_addr_extn; /* 0x0000E8 */ |
52 | uint64_t ca_force_inta; /* 0x0000F0 */ | 52 | u64 ca_force_inta; /* 0x0000F0 */ |
53 | uint64_t ca_force_intb; /* 0x0000F8 */ | 53 | u64 ca_force_intb; /* 0x0000F8 */ |
54 | uint64_t ca_debug_vector_sel; /* 0x000100 */ | 54 | u64 ca_debug_vector_sel; /* 0x000100 */ |
55 | uint64_t ca_debug_mux_core_sel; /* 0x000108 */ | 55 | u64 ca_debug_mux_core_sel; /* 0x000108 */ |
56 | uint64_t ca_debug_mux_pci_sel; /* 0x000110 */ | 56 | u64 ca_debug_mux_pci_sel; /* 0x000110 */ |
57 | uint64_t ca_debug_domain_sel; /* 0x000118 */ | 57 | u64 ca_debug_domain_sel; /* 0x000118 */ |
58 | 58 | ||
59 | uint64_t ca_pad_000120[28]; /* 0x0001{20..F8} */ | 59 | u64 ca_pad_000120[28]; /* 0x0001{20..F8} */ |
60 | 60 | ||
61 | uint64_t ca_gart_ptr_table; /* 0x200 */ | 61 | u64 ca_gart_ptr_table; /* 0x200 */ |
62 | uint64_t ca_gart_tlb_addr[8]; /* 0x2{08..40} */ | 62 | u64 ca_gart_tlb_addr[8]; /* 0x2{08..40} */ |
63 | }; | 63 | }; |
64 | 64 | ||
65 | /* | 65 | /* |
diff --git a/include/asm-ia64/sn/tioca_provider.h b/include/asm-ia64/sn/tioca_provider.h index b532ef6148ed..ab7fe2463468 100644 --- a/include/asm-ia64/sn/tioca_provider.h +++ b/include/asm-ia64/sn/tioca_provider.h | |||
@@ -56,31 +56,31 @@ struct tioca_kernel { | |||
56 | /* | 56 | /* |
57 | * General GART stuff | 57 | * General GART stuff |
58 | */ | 58 | */ |
59 | uint64_t ca_ap_size; /* size of aperature in bytes */ | 59 | u64 ca_ap_size; /* size of aperature in bytes */ |
60 | uint32_t ca_gart_entries; /* # uint64_t entries in gart */ | 60 | u32 ca_gart_entries; /* # u64 entries in gart */ |
61 | uint32_t ca_ap_pagesize; /* aperature page size in bytes */ | 61 | u32 ca_ap_pagesize; /* aperature page size in bytes */ |
62 | uint64_t ca_ap_bus_base; /* bus address of CA aperature */ | 62 | u64 ca_ap_bus_base; /* bus address of CA aperature */ |
63 | uint64_t ca_gart_size; /* gart size in bytes */ | 63 | u64 ca_gart_size; /* gart size in bytes */ |
64 | uint64_t *ca_gart; /* gart table vaddr */ | 64 | u64 *ca_gart; /* gart table vaddr */ |
65 | uint64_t ca_gart_coretalk_addr; /* gart coretalk addr */ | 65 | u64 ca_gart_coretalk_addr; /* gart coretalk addr */ |
66 | uint8_t ca_gart_iscoherent; /* used in tioca_tlbflush */ | 66 | u8 ca_gart_iscoherent; /* used in tioca_tlbflush */ |
67 | 67 | ||
68 | /* PCI GART convenience values */ | 68 | /* PCI GART convenience values */ |
69 | uint64_t ca_pciap_base; /* pci aperature bus base address */ | 69 | u64 ca_pciap_base; /* pci aperature bus base address */ |
70 | uint64_t ca_pciap_size; /* pci aperature size (bytes) */ | 70 | u64 ca_pciap_size; /* pci aperature size (bytes) */ |
71 | uint64_t ca_pcigart_base; /* gfx GART bus base address */ | 71 | u64 ca_pcigart_base; /* gfx GART bus base address */ |
72 | uint64_t *ca_pcigart; /* gfx GART vm address */ | 72 | u64 *ca_pcigart; /* gfx GART vm address */ |
73 | uint32_t ca_pcigart_entries; | 73 | u32 ca_pcigart_entries; |
74 | uint32_t ca_pcigart_start; /* PCI start index in ca_gart */ | 74 | u32 ca_pcigart_start; /* PCI start index in ca_gart */ |
75 | void *ca_pcigart_pagemap; | 75 | void *ca_pcigart_pagemap; |
76 | 76 | ||
77 | /* AGP GART convenience values */ | 77 | /* AGP GART convenience values */ |
78 | uint64_t ca_gfxap_base; /* gfx aperature bus base address */ | 78 | u64 ca_gfxap_base; /* gfx aperature bus base address */ |
79 | uint64_t ca_gfxap_size; /* gfx aperature size (bytes) */ | 79 | u64 ca_gfxap_size; /* gfx aperature size (bytes) */ |
80 | uint64_t ca_gfxgart_base; /* gfx GART bus base address */ | 80 | u64 ca_gfxgart_base; /* gfx GART bus base address */ |
81 | uint64_t *ca_gfxgart; /* gfx GART vm address */ | 81 | u64 *ca_gfxgart; /* gfx GART vm address */ |
82 | uint32_t ca_gfxgart_entries; | 82 | u32 ca_gfxgart_entries; |
83 | uint32_t ca_gfxgart_start; /* agpgart start index in ca_gart */ | 83 | u32 ca_gfxgart_start; /* agpgart start index in ca_gart */ |
84 | }; | 84 | }; |
85 | 85 | ||
86 | /* | 86 | /* |
@@ -93,11 +93,11 @@ struct tioca_kernel { | |||
93 | struct tioca_common { | 93 | struct tioca_common { |
94 | struct pcibus_bussoft ca_common; /* common pciio header */ | 94 | struct pcibus_bussoft ca_common; /* common pciio header */ |
95 | 95 | ||
96 | uint32_t ca_rev; | 96 | u32 ca_rev; |
97 | uint32_t ca_closest_nasid; | 97 | u32 ca_closest_nasid; |
98 | 98 | ||
99 | uint64_t ca_prom_private; | 99 | u64 ca_prom_private; |
100 | uint64_t ca_kernel_private; | 100 | u64 ca_kernel_private; |
101 | }; | 101 | }; |
102 | 102 | ||
103 | /** | 103 | /** |
@@ -139,9 +139,9 @@ tioca_paddr_to_gart(unsigned long paddr) | |||
139 | */ | 139 | */ |
140 | 140 | ||
141 | static inline unsigned long | 141 | static inline unsigned long |
142 | tioca_physpage_to_gart(uint64_t page_addr) | 142 | tioca_physpage_to_gart(u64 page_addr) |
143 | { | 143 | { |
144 | uint64_t coretalk_addr; | 144 | u64 coretalk_addr; |
145 | 145 | ||
146 | coretalk_addr = PHYS_TO_TIODMA(page_addr); | 146 | coretalk_addr = PHYS_TO_TIODMA(page_addr); |
147 | if (!coretalk_addr) { | 147 | if (!coretalk_addr) { |
@@ -161,7 +161,7 @@ tioca_physpage_to_gart(uint64_t page_addr) | |||
161 | static inline void | 161 | static inline void |
162 | tioca_tlbflush(struct tioca_kernel *tioca_kernel) | 162 | tioca_tlbflush(struct tioca_kernel *tioca_kernel) |
163 | { | 163 | { |
164 | volatile uint64_t tmp; | 164 | volatile u64 tmp; |
165 | volatile struct tioca *ca_base; | 165 | volatile struct tioca *ca_base; |
166 | struct tioca_common *tioca_common; | 166 | struct tioca_common *tioca_common; |
167 | 167 | ||
@@ -200,7 +200,7 @@ tioca_tlbflush(struct tioca_kernel *tioca_kernel) | |||
200 | tmp = __sn_readq_relaxed(&ca_base->ca_control2); | 200 | tmp = __sn_readq_relaxed(&ca_base->ca_control2); |
201 | } | 201 | } |
202 | 202 | ||
203 | extern uint32_t tioca_gart_found; | 203 | extern u32 tioca_gart_found; |
204 | extern struct list_head tioca_list; | 204 | extern struct list_head tioca_list; |
205 | extern int tioca_init_provider(void); | 205 | extern int tioca_init_provider(void); |
206 | extern void tioca_fastwrite_enable(struct tioca_kernel *tioca_kern); | 206 | extern void tioca_fastwrite_enable(struct tioca_kernel *tioca_kern); |
diff --git a/include/asm-ia64/sn/tioce.h b/include/asm-ia64/sn/tioce.h index ecaddf960086..d4c990712eac 100644 --- a/include/asm-ia64/sn/tioce.h +++ b/include/asm-ia64/sn/tioce.h | |||
@@ -35,72 +35,72 @@ typedef volatile struct tioce { | |||
35 | /* | 35 | /* |
36 | * ADMIN : Administration Registers | 36 | * ADMIN : Administration Registers |
37 | */ | 37 | */ |
38 | uint64_t ce_adm_id; /* 0x000000 */ | 38 | u64 ce_adm_id; /* 0x000000 */ |
39 | uint64_t ce_pad_000008; /* 0x000008 */ | 39 | u64 ce_pad_000008; /* 0x000008 */ |
40 | uint64_t ce_adm_dyn_credit_status; /* 0x000010 */ | 40 | u64 ce_adm_dyn_credit_status; /* 0x000010 */ |
41 | uint64_t ce_adm_last_credit_status; /* 0x000018 */ | 41 | u64 ce_adm_last_credit_status; /* 0x000018 */ |
42 | uint64_t ce_adm_credit_limit; /* 0x000020 */ | 42 | u64 ce_adm_credit_limit; /* 0x000020 */ |
43 | uint64_t ce_adm_force_credit; /* 0x000028 */ | 43 | u64 ce_adm_force_credit; /* 0x000028 */ |
44 | uint64_t ce_adm_control; /* 0x000030 */ | 44 | u64 ce_adm_control; /* 0x000030 */ |
45 | uint64_t ce_adm_mmr_chn_timeout; /* 0x000038 */ | 45 | u64 ce_adm_mmr_chn_timeout; /* 0x000038 */ |
46 | uint64_t ce_adm_ssp_ure_timeout; /* 0x000040 */ | 46 | u64 ce_adm_ssp_ure_timeout; /* 0x000040 */ |
47 | uint64_t ce_adm_ssp_dre_timeout; /* 0x000048 */ | 47 | u64 ce_adm_ssp_dre_timeout; /* 0x000048 */ |
48 | uint64_t ce_adm_ssp_debug_sel; /* 0x000050 */ | 48 | u64 ce_adm_ssp_debug_sel; /* 0x000050 */ |
49 | uint64_t ce_adm_int_status; /* 0x000058 */ | 49 | u64 ce_adm_int_status; /* 0x000058 */ |
50 | uint64_t ce_adm_int_status_alias; /* 0x000060 */ | 50 | u64 ce_adm_int_status_alias; /* 0x000060 */ |
51 | uint64_t ce_adm_int_mask; /* 0x000068 */ | 51 | u64 ce_adm_int_mask; /* 0x000068 */ |
52 | uint64_t ce_adm_int_pending; /* 0x000070 */ | 52 | u64 ce_adm_int_pending; /* 0x000070 */ |
53 | uint64_t ce_adm_force_int; /* 0x000078 */ | 53 | u64 ce_adm_force_int; /* 0x000078 */ |
54 | uint64_t ce_adm_ure_ups_buf_barrier_flush; /* 0x000080 */ | 54 | u64 ce_adm_ure_ups_buf_barrier_flush; /* 0x000080 */ |
55 | uint64_t ce_adm_int_dest[15]; /* 0x000088 -- 0x0000F8 */ | 55 | u64 ce_adm_int_dest[15]; /* 0x000088 -- 0x0000F8 */ |
56 | uint64_t ce_adm_error_summary; /* 0x000100 */ | 56 | u64 ce_adm_error_summary; /* 0x000100 */ |
57 | uint64_t ce_adm_error_summary_alias; /* 0x000108 */ | 57 | u64 ce_adm_error_summary_alias; /* 0x000108 */ |
58 | uint64_t ce_adm_error_mask; /* 0x000110 */ | 58 | u64 ce_adm_error_mask; /* 0x000110 */ |
59 | uint64_t ce_adm_first_error; /* 0x000118 */ | 59 | u64 ce_adm_first_error; /* 0x000118 */ |
60 | uint64_t ce_adm_error_overflow; /* 0x000120 */ | 60 | u64 ce_adm_error_overflow; /* 0x000120 */ |
61 | uint64_t ce_adm_error_overflow_alias; /* 0x000128 */ | 61 | u64 ce_adm_error_overflow_alias; /* 0x000128 */ |
62 | uint64_t ce_pad_000130[2]; /* 0x000130 -- 0x000138 */ | 62 | u64 ce_pad_000130[2]; /* 0x000130 -- 0x000138 */ |
63 | uint64_t ce_adm_tnum_error; /* 0x000140 */ | 63 | u64 ce_adm_tnum_error; /* 0x000140 */ |
64 | uint64_t ce_adm_mmr_err_detail; /* 0x000148 */ | 64 | u64 ce_adm_mmr_err_detail; /* 0x000148 */ |
65 | uint64_t ce_adm_msg_sram_perr_detail; /* 0x000150 */ | 65 | u64 ce_adm_msg_sram_perr_detail; /* 0x000150 */ |
66 | uint64_t ce_adm_bap_sram_perr_detail; /* 0x000158 */ | 66 | u64 ce_adm_bap_sram_perr_detail; /* 0x000158 */ |
67 | uint64_t ce_adm_ce_sram_perr_detail; /* 0x000160 */ | 67 | u64 ce_adm_ce_sram_perr_detail; /* 0x000160 */ |
68 | uint64_t ce_adm_ce_credit_oflow_detail; /* 0x000168 */ | 68 | u64 ce_adm_ce_credit_oflow_detail; /* 0x000168 */ |
69 | uint64_t ce_adm_tx_link_idle_max_timer; /* 0x000170 */ | 69 | u64 ce_adm_tx_link_idle_max_timer; /* 0x000170 */ |
70 | uint64_t ce_adm_pcie_debug_sel; /* 0x000178 */ | 70 | u64 ce_adm_pcie_debug_sel; /* 0x000178 */ |
71 | uint64_t ce_pad_000180[16]; /* 0x000180 -- 0x0001F8 */ | 71 | u64 ce_pad_000180[16]; /* 0x000180 -- 0x0001F8 */ |
72 | 72 | ||
73 | uint64_t ce_adm_pcie_debug_sel_top; /* 0x000200 */ | 73 | u64 ce_adm_pcie_debug_sel_top; /* 0x000200 */ |
74 | uint64_t ce_adm_pcie_debug_lat_sel_lo_top; /* 0x000208 */ | 74 | u64 ce_adm_pcie_debug_lat_sel_lo_top; /* 0x000208 */ |
75 | uint64_t ce_adm_pcie_debug_lat_sel_hi_top; /* 0x000210 */ | 75 | u64 ce_adm_pcie_debug_lat_sel_hi_top; /* 0x000210 */ |
76 | uint64_t ce_adm_pcie_debug_trig_sel_top; /* 0x000218 */ | 76 | u64 ce_adm_pcie_debug_trig_sel_top; /* 0x000218 */ |
77 | uint64_t ce_adm_pcie_debug_trig_lat_sel_lo_top; /* 0x000220 */ | 77 | u64 ce_adm_pcie_debug_trig_lat_sel_lo_top; /* 0x000220 */ |
78 | uint64_t ce_adm_pcie_debug_trig_lat_sel_hi_top; /* 0x000228 */ | 78 | u64 ce_adm_pcie_debug_trig_lat_sel_hi_top; /* 0x000228 */ |
79 | uint64_t ce_adm_pcie_trig_compare_top; /* 0x000230 */ | 79 | u64 ce_adm_pcie_trig_compare_top; /* 0x000230 */ |
80 | uint64_t ce_adm_pcie_trig_compare_en_top; /* 0x000238 */ | 80 | u64 ce_adm_pcie_trig_compare_en_top; /* 0x000238 */ |
81 | uint64_t ce_adm_ssp_debug_sel_top; /* 0x000240 */ | 81 | u64 ce_adm_ssp_debug_sel_top; /* 0x000240 */ |
82 | uint64_t ce_adm_ssp_debug_lat_sel_lo_top; /* 0x000248 */ | 82 | u64 ce_adm_ssp_debug_lat_sel_lo_top; /* 0x000248 */ |
83 | uint64_t ce_adm_ssp_debug_lat_sel_hi_top; /* 0x000250 */ | 83 | u64 ce_adm_ssp_debug_lat_sel_hi_top; /* 0x000250 */ |
84 | uint64_t ce_adm_ssp_debug_trig_sel_top; /* 0x000258 */ | 84 | u64 ce_adm_ssp_debug_trig_sel_top; /* 0x000258 */ |
85 | uint64_t ce_adm_ssp_debug_trig_lat_sel_lo_top; /* 0x000260 */ | 85 | u64 ce_adm_ssp_debug_trig_lat_sel_lo_top; /* 0x000260 */ |
86 | uint64_t ce_adm_ssp_debug_trig_lat_sel_hi_top; /* 0x000268 */ | 86 | u64 ce_adm_ssp_debug_trig_lat_sel_hi_top; /* 0x000268 */ |
87 | uint64_t ce_adm_ssp_trig_compare_top; /* 0x000270 */ | 87 | u64 ce_adm_ssp_trig_compare_top; /* 0x000270 */ |
88 | uint64_t ce_adm_ssp_trig_compare_en_top; /* 0x000278 */ | 88 | u64 ce_adm_ssp_trig_compare_en_top; /* 0x000278 */ |
89 | uint64_t ce_pad_000280[48]; /* 0x000280 -- 0x0003F8 */ | 89 | u64 ce_pad_000280[48]; /* 0x000280 -- 0x0003F8 */ |
90 | 90 | ||
91 | uint64_t ce_adm_bap_ctrl; /* 0x000400 */ | 91 | u64 ce_adm_bap_ctrl; /* 0x000400 */ |
92 | uint64_t ce_pad_000408[127]; /* 0x000408 -- 0x0007F8 */ | 92 | u64 ce_pad_000408[127]; /* 0x000408 -- 0x0007F8 */ |
93 | 93 | ||
94 | uint64_t ce_msg_buf_data63_0[35]; /* 0x000800 -- 0x000918 */ | 94 | u64 ce_msg_buf_data63_0[35]; /* 0x000800 -- 0x000918 */ |
95 | uint64_t ce_pad_000920[29]; /* 0x000920 -- 0x0009F8 */ | 95 | u64 ce_pad_000920[29]; /* 0x000920 -- 0x0009F8 */ |
96 | 96 | ||
97 | uint64_t ce_msg_buf_data127_64[35]; /* 0x000A00 -- 0x000B18 */ | 97 | u64 ce_msg_buf_data127_64[35]; /* 0x000A00 -- 0x000B18 */ |
98 | uint64_t ce_pad_000B20[29]; /* 0x000B20 -- 0x000BF8 */ | 98 | u64 ce_pad_000B20[29]; /* 0x000B20 -- 0x000BF8 */ |
99 | 99 | ||
100 | uint64_t ce_msg_buf_parity[35]; /* 0x000C00 -- 0x000D18 */ | 100 | u64 ce_msg_buf_parity[35]; /* 0x000C00 -- 0x000D18 */ |
101 | uint64_t ce_pad_000D20[29]; /* 0x000D20 -- 0x000DF8 */ | 101 | u64 ce_pad_000D20[29]; /* 0x000D20 -- 0x000DF8 */ |
102 | 102 | ||
103 | uint64_t ce_pad_000E00[576]; /* 0x000E00 -- 0x001FF8 */ | 103 | u64 ce_pad_000E00[576]; /* 0x000E00 -- 0x001FF8 */ |
104 | 104 | ||
105 | /* | 105 | /* |
106 | * LSI : LSI's PCI Express Link Registers (Link#1 and Link#2) | 106 | * LSI : LSI's PCI Express Link Registers (Link#1 and Link#2) |
@@ -109,141 +109,141 @@ typedef volatile struct tioce { | |||
109 | */ | 109 | */ |
110 | #define ce_lsi(link_num) ce_lsi[link_num-1] | 110 | #define ce_lsi(link_num) ce_lsi[link_num-1] |
111 | struct ce_lsi_reg { | 111 | struct ce_lsi_reg { |
112 | uint64_t ce_lsi_lpu_id; /* 0x00z000 */ | 112 | u64 ce_lsi_lpu_id; /* 0x00z000 */ |
113 | uint64_t ce_lsi_rst; /* 0x00z008 */ | 113 | u64 ce_lsi_rst; /* 0x00z008 */ |
114 | uint64_t ce_lsi_dbg_stat; /* 0x00z010 */ | 114 | u64 ce_lsi_dbg_stat; /* 0x00z010 */ |
115 | uint64_t ce_lsi_dbg_cfg; /* 0x00z018 */ | 115 | u64 ce_lsi_dbg_cfg; /* 0x00z018 */ |
116 | uint64_t ce_lsi_ltssm_ctrl; /* 0x00z020 */ | 116 | u64 ce_lsi_ltssm_ctrl; /* 0x00z020 */ |
117 | uint64_t ce_lsi_lk_stat; /* 0x00z028 */ | 117 | u64 ce_lsi_lk_stat; /* 0x00z028 */ |
118 | uint64_t ce_pad_00z030[2]; /* 0x00z030 -- 0x00z038 */ | 118 | u64 ce_pad_00z030[2]; /* 0x00z030 -- 0x00z038 */ |
119 | uint64_t ce_lsi_int_and_stat; /* 0x00z040 */ | 119 | u64 ce_lsi_int_and_stat; /* 0x00z040 */ |
120 | uint64_t ce_lsi_int_mask; /* 0x00z048 */ | 120 | u64 ce_lsi_int_mask; /* 0x00z048 */ |
121 | uint64_t ce_pad_00z050[22]; /* 0x00z050 -- 0x00z0F8 */ | 121 | u64 ce_pad_00z050[22]; /* 0x00z050 -- 0x00z0F8 */ |
122 | uint64_t ce_lsi_lk_perf_cnt_sel; /* 0x00z100 */ | 122 | u64 ce_lsi_lk_perf_cnt_sel; /* 0x00z100 */ |
123 | uint64_t ce_pad_00z108; /* 0x00z108 */ | 123 | u64 ce_pad_00z108; /* 0x00z108 */ |
124 | uint64_t ce_lsi_lk_perf_cnt_ctrl; /* 0x00z110 */ | 124 | u64 ce_lsi_lk_perf_cnt_ctrl; /* 0x00z110 */ |
125 | uint64_t ce_pad_00z118; /* 0x00z118 */ | 125 | u64 ce_pad_00z118; /* 0x00z118 */ |
126 | uint64_t ce_lsi_lk_perf_cnt1; /* 0x00z120 */ | 126 | u64 ce_lsi_lk_perf_cnt1; /* 0x00z120 */ |
127 | uint64_t ce_lsi_lk_perf_cnt1_test; /* 0x00z128 */ | 127 | u64 ce_lsi_lk_perf_cnt1_test; /* 0x00z128 */ |
128 | uint64_t ce_lsi_lk_perf_cnt2; /* 0x00z130 */ | 128 | u64 ce_lsi_lk_perf_cnt2; /* 0x00z130 */ |
129 | uint64_t ce_lsi_lk_perf_cnt2_test; /* 0x00z138 */ | 129 | u64 ce_lsi_lk_perf_cnt2_test; /* 0x00z138 */ |
130 | uint64_t ce_pad_00z140[24]; /* 0x00z140 -- 0x00z1F8 */ | 130 | u64 ce_pad_00z140[24]; /* 0x00z140 -- 0x00z1F8 */ |
131 | uint64_t ce_lsi_lk_lyr_cfg; /* 0x00z200 */ | 131 | u64 ce_lsi_lk_lyr_cfg; /* 0x00z200 */ |
132 | uint64_t ce_lsi_lk_lyr_status; /* 0x00z208 */ | 132 | u64 ce_lsi_lk_lyr_status; /* 0x00z208 */ |
133 | uint64_t ce_lsi_lk_lyr_int_stat; /* 0x00z210 */ | 133 | u64 ce_lsi_lk_lyr_int_stat; /* 0x00z210 */ |
134 | uint64_t ce_lsi_lk_ly_int_stat_test; /* 0x00z218 */ | 134 | u64 ce_lsi_lk_ly_int_stat_test; /* 0x00z218 */ |
135 | uint64_t ce_lsi_lk_ly_int_stat_mask; /* 0x00z220 */ | 135 | u64 ce_lsi_lk_ly_int_stat_mask; /* 0x00z220 */ |
136 | uint64_t ce_pad_00z228[3]; /* 0x00z228 -- 0x00z238 */ | 136 | u64 ce_pad_00z228[3]; /* 0x00z228 -- 0x00z238 */ |
137 | uint64_t ce_lsi_fc_upd_ctl; /* 0x00z240 */ | 137 | u64 ce_lsi_fc_upd_ctl; /* 0x00z240 */ |
138 | uint64_t ce_pad_00z248[3]; /* 0x00z248 -- 0x00z258 */ | 138 | u64 ce_pad_00z248[3]; /* 0x00z248 -- 0x00z258 */ |
139 | uint64_t ce_lsi_flw_ctl_upd_to_timer; /* 0x00z260 */ | 139 | u64 ce_lsi_flw_ctl_upd_to_timer; /* 0x00z260 */ |
140 | uint64_t ce_lsi_flw_ctl_upd_timer0; /* 0x00z268 */ | 140 | u64 ce_lsi_flw_ctl_upd_timer0; /* 0x00z268 */ |
141 | uint64_t ce_lsi_flw_ctl_upd_timer1; /* 0x00z270 */ | 141 | u64 ce_lsi_flw_ctl_upd_timer1; /* 0x00z270 */ |
142 | uint64_t ce_pad_00z278[49]; /* 0x00z278 -- 0x00z3F8 */ | 142 | u64 ce_pad_00z278[49]; /* 0x00z278 -- 0x00z3F8 */ |
143 | uint64_t ce_lsi_freq_nak_lat_thrsh; /* 0x00z400 */ | 143 | u64 ce_lsi_freq_nak_lat_thrsh; /* 0x00z400 */ |
144 | uint64_t ce_lsi_ack_nak_lat_tmr; /* 0x00z408 */ | 144 | u64 ce_lsi_ack_nak_lat_tmr; /* 0x00z408 */ |
145 | uint64_t ce_lsi_rply_tmr_thr; /* 0x00z410 */ | 145 | u64 ce_lsi_rply_tmr_thr; /* 0x00z410 */ |
146 | uint64_t ce_lsi_rply_tmr; /* 0x00z418 */ | 146 | u64 ce_lsi_rply_tmr; /* 0x00z418 */ |
147 | uint64_t ce_lsi_rply_num_stat; /* 0x00z420 */ | 147 | u64 ce_lsi_rply_num_stat; /* 0x00z420 */ |
148 | uint64_t ce_lsi_rty_buf_max_addr; /* 0x00z428 */ | 148 | u64 ce_lsi_rty_buf_max_addr; /* 0x00z428 */ |
149 | uint64_t ce_lsi_rty_fifo_ptr; /* 0x00z430 */ | 149 | u64 ce_lsi_rty_fifo_ptr; /* 0x00z430 */ |
150 | uint64_t ce_lsi_rty_fifo_rd_wr_ptr; /* 0x00z438 */ | 150 | u64 ce_lsi_rty_fifo_rd_wr_ptr; /* 0x00z438 */ |
151 | uint64_t ce_lsi_rty_fifo_cred; /* 0x00z440 */ | 151 | u64 ce_lsi_rty_fifo_cred; /* 0x00z440 */ |
152 | uint64_t ce_lsi_seq_cnt; /* 0x00z448 */ | 152 | u64 ce_lsi_seq_cnt; /* 0x00z448 */ |
153 | uint64_t ce_lsi_ack_sent_seq_num; /* 0x00z450 */ | 153 | u64 ce_lsi_ack_sent_seq_num; /* 0x00z450 */ |
154 | uint64_t ce_lsi_seq_cnt_fifo_max_addr; /* 0x00z458 */ | 154 | u64 ce_lsi_seq_cnt_fifo_max_addr; /* 0x00z458 */ |
155 | uint64_t ce_lsi_seq_cnt_fifo_ptr; /* 0x00z460 */ | 155 | u64 ce_lsi_seq_cnt_fifo_ptr; /* 0x00z460 */ |
156 | uint64_t ce_lsi_seq_cnt_rd_wr_ptr; /* 0x00z468 */ | 156 | u64 ce_lsi_seq_cnt_rd_wr_ptr; /* 0x00z468 */ |
157 | uint64_t ce_lsi_tx_lk_ts_ctl; /* 0x00z470 */ | 157 | u64 ce_lsi_tx_lk_ts_ctl; /* 0x00z470 */ |
158 | uint64_t ce_pad_00z478; /* 0x00z478 */ | 158 | u64 ce_pad_00z478; /* 0x00z478 */ |
159 | uint64_t ce_lsi_mem_addr_ctl; /* 0x00z480 */ | 159 | u64 ce_lsi_mem_addr_ctl; /* 0x00z480 */ |
160 | uint64_t ce_lsi_mem_d_ld0; /* 0x00z488 */ | 160 | u64 ce_lsi_mem_d_ld0; /* 0x00z488 */ |
161 | uint64_t ce_lsi_mem_d_ld1; /* 0x00z490 */ | 161 | u64 ce_lsi_mem_d_ld1; /* 0x00z490 */ |
162 | uint64_t ce_lsi_mem_d_ld2; /* 0x00z498 */ | 162 | u64 ce_lsi_mem_d_ld2; /* 0x00z498 */ |
163 | uint64_t ce_lsi_mem_d_ld3; /* 0x00z4A0 */ | 163 | u64 ce_lsi_mem_d_ld3; /* 0x00z4A0 */ |
164 | uint64_t ce_lsi_mem_d_ld4; /* 0x00z4A8 */ | 164 | u64 ce_lsi_mem_d_ld4; /* 0x00z4A8 */ |
165 | uint64_t ce_pad_00z4B0[2]; /* 0x00z4B0 -- 0x00z4B8 */ | 165 | u64 ce_pad_00z4B0[2]; /* 0x00z4B0 -- 0x00z4B8 */ |
166 | uint64_t ce_lsi_rty_d_cnt; /* 0x00z4C0 */ | 166 | u64 ce_lsi_rty_d_cnt; /* 0x00z4C0 */ |
167 | uint64_t ce_lsi_seq_buf_cnt; /* 0x00z4C8 */ | 167 | u64 ce_lsi_seq_buf_cnt; /* 0x00z4C8 */ |
168 | uint64_t ce_lsi_seq_buf_bt_d; /* 0x00z4D0 */ | 168 | u64 ce_lsi_seq_buf_bt_d; /* 0x00z4D0 */ |
169 | uint64_t ce_pad_00z4D8; /* 0x00z4D8 */ | 169 | u64 ce_pad_00z4D8; /* 0x00z4D8 */ |
170 | uint64_t ce_lsi_ack_lat_thr; /* 0x00z4E0 */ | 170 | u64 ce_lsi_ack_lat_thr; /* 0x00z4E0 */ |
171 | uint64_t ce_pad_00z4E8[3]; /* 0x00z4E8 -- 0x00z4F8 */ | 171 | u64 ce_pad_00z4E8[3]; /* 0x00z4E8 -- 0x00z4F8 */ |
172 | uint64_t ce_lsi_nxt_rcv_seq_1_cntr; /* 0x00z500 */ | 172 | u64 ce_lsi_nxt_rcv_seq_1_cntr; /* 0x00z500 */ |
173 | uint64_t ce_lsi_unsp_dllp_rcvd; /* 0x00z508 */ | 173 | u64 ce_lsi_unsp_dllp_rcvd; /* 0x00z508 */ |
174 | uint64_t ce_lsi_rcv_lk_ts_ctl; /* 0x00z510 */ | 174 | u64 ce_lsi_rcv_lk_ts_ctl; /* 0x00z510 */ |
175 | uint64_t ce_pad_00z518[29]; /* 0x00z518 -- 0x00z5F8 */ | 175 | u64 ce_pad_00z518[29]; /* 0x00z518 -- 0x00z5F8 */ |
176 | uint64_t ce_lsi_phy_lyr_cfg; /* 0x00z600 */ | 176 | u64 ce_lsi_phy_lyr_cfg; /* 0x00z600 */ |
177 | uint64_t ce_pad_00z608; /* 0x00z608 */ | 177 | u64 ce_pad_00z608; /* 0x00z608 */ |
178 | uint64_t ce_lsi_phy_lyr_int_stat; /* 0x00z610 */ | 178 | u64 ce_lsi_phy_lyr_int_stat; /* 0x00z610 */ |
179 | uint64_t ce_lsi_phy_lyr_int_stat_test; /* 0x00z618 */ | 179 | u64 ce_lsi_phy_lyr_int_stat_test; /* 0x00z618 */ |
180 | uint64_t ce_lsi_phy_lyr_int_mask; /* 0x00z620 */ | 180 | u64 ce_lsi_phy_lyr_int_mask; /* 0x00z620 */ |
181 | uint64_t ce_pad_00z628[11]; /* 0x00z628 -- 0x00z678 */ | 181 | u64 ce_pad_00z628[11]; /* 0x00z628 -- 0x00z678 */ |
182 | uint64_t ce_lsi_rcv_phy_cfg; /* 0x00z680 */ | 182 | u64 ce_lsi_rcv_phy_cfg; /* 0x00z680 */ |
183 | uint64_t ce_lsi_rcv_phy_stat1; /* 0x00z688 */ | 183 | u64 ce_lsi_rcv_phy_stat1; /* 0x00z688 */ |
184 | uint64_t ce_lsi_rcv_phy_stat2; /* 0x00z690 */ | 184 | u64 ce_lsi_rcv_phy_stat2; /* 0x00z690 */ |
185 | uint64_t ce_lsi_rcv_phy_stat3; /* 0x00z698 */ | 185 | u64 ce_lsi_rcv_phy_stat3; /* 0x00z698 */ |
186 | uint64_t ce_lsi_rcv_phy_int_stat; /* 0x00z6A0 */ | 186 | u64 ce_lsi_rcv_phy_int_stat; /* 0x00z6A0 */ |
187 | uint64_t ce_lsi_rcv_phy_int_stat_test; /* 0x00z6A8 */ | 187 | u64 ce_lsi_rcv_phy_int_stat_test; /* 0x00z6A8 */ |
188 | uint64_t ce_lsi_rcv_phy_int_mask; /* 0x00z6B0 */ | 188 | u64 ce_lsi_rcv_phy_int_mask; /* 0x00z6B0 */ |
189 | uint64_t ce_pad_00z6B8[9]; /* 0x00z6B8 -- 0x00z6F8 */ | 189 | u64 ce_pad_00z6B8[9]; /* 0x00z6B8 -- 0x00z6F8 */ |
190 | uint64_t ce_lsi_tx_phy_cfg; /* 0x00z700 */ | 190 | u64 ce_lsi_tx_phy_cfg; /* 0x00z700 */ |
191 | uint64_t ce_lsi_tx_phy_stat; /* 0x00z708 */ | 191 | u64 ce_lsi_tx_phy_stat; /* 0x00z708 */ |
192 | uint64_t ce_lsi_tx_phy_int_stat; /* 0x00z710 */ | 192 | u64 ce_lsi_tx_phy_int_stat; /* 0x00z710 */ |
193 | uint64_t ce_lsi_tx_phy_int_stat_test; /* 0x00z718 */ | 193 | u64 ce_lsi_tx_phy_int_stat_test; /* 0x00z718 */ |
194 | uint64_t ce_lsi_tx_phy_int_mask; /* 0x00z720 */ | 194 | u64 ce_lsi_tx_phy_int_mask; /* 0x00z720 */ |
195 | uint64_t ce_lsi_tx_phy_stat2; /* 0x00z728 */ | 195 | u64 ce_lsi_tx_phy_stat2; /* 0x00z728 */ |
196 | uint64_t ce_pad_00z730[10]; /* 0x00z730 -- 0x00z77F */ | 196 | u64 ce_pad_00z730[10]; /* 0x00z730 -- 0x00z77F */ |
197 | uint64_t ce_lsi_ltssm_cfg1; /* 0x00z780 */ | 197 | u64 ce_lsi_ltssm_cfg1; /* 0x00z780 */ |
198 | uint64_t ce_lsi_ltssm_cfg2; /* 0x00z788 */ | 198 | u64 ce_lsi_ltssm_cfg2; /* 0x00z788 */ |
199 | uint64_t ce_lsi_ltssm_cfg3; /* 0x00z790 */ | 199 | u64 ce_lsi_ltssm_cfg3; /* 0x00z790 */ |
200 | uint64_t ce_lsi_ltssm_cfg4; /* 0x00z798 */ | 200 | u64 ce_lsi_ltssm_cfg4; /* 0x00z798 */ |
201 | uint64_t ce_lsi_ltssm_cfg5; /* 0x00z7A0 */ | 201 | u64 ce_lsi_ltssm_cfg5; /* 0x00z7A0 */ |
202 | uint64_t ce_lsi_ltssm_stat1; /* 0x00z7A8 */ | 202 | u64 ce_lsi_ltssm_stat1; /* 0x00z7A8 */ |
203 | uint64_t ce_lsi_ltssm_stat2; /* 0x00z7B0 */ | 203 | u64 ce_lsi_ltssm_stat2; /* 0x00z7B0 */ |
204 | uint64_t ce_lsi_ltssm_int_stat; /* 0x00z7B8 */ | 204 | u64 ce_lsi_ltssm_int_stat; /* 0x00z7B8 */ |
205 | uint64_t ce_lsi_ltssm_int_stat_test; /* 0x00z7C0 */ | 205 | u64 ce_lsi_ltssm_int_stat_test; /* 0x00z7C0 */ |
206 | uint64_t ce_lsi_ltssm_int_mask; /* 0x00z7C8 */ | 206 | u64 ce_lsi_ltssm_int_mask; /* 0x00z7C8 */ |
207 | uint64_t ce_lsi_ltssm_stat_wr_en; /* 0x00z7D0 */ | 207 | u64 ce_lsi_ltssm_stat_wr_en; /* 0x00z7D0 */ |
208 | uint64_t ce_pad_00z7D8[5]; /* 0x00z7D8 -- 0x00z7F8 */ | 208 | u64 ce_pad_00z7D8[5]; /* 0x00z7D8 -- 0x00z7F8 */ |
209 | uint64_t ce_lsi_gb_cfg1; /* 0x00z800 */ | 209 | u64 ce_lsi_gb_cfg1; /* 0x00z800 */ |
210 | uint64_t ce_lsi_gb_cfg2; /* 0x00z808 */ | 210 | u64 ce_lsi_gb_cfg2; /* 0x00z808 */ |
211 | uint64_t ce_lsi_gb_cfg3; /* 0x00z810 */ | 211 | u64 ce_lsi_gb_cfg3; /* 0x00z810 */ |
212 | uint64_t ce_lsi_gb_cfg4; /* 0x00z818 */ | 212 | u64 ce_lsi_gb_cfg4; /* 0x00z818 */ |
213 | uint64_t ce_lsi_gb_stat; /* 0x00z820 */ | 213 | u64 ce_lsi_gb_stat; /* 0x00z820 */ |
214 | uint64_t ce_lsi_gb_int_stat; /* 0x00z828 */ | 214 | u64 ce_lsi_gb_int_stat; /* 0x00z828 */ |
215 | uint64_t ce_lsi_gb_int_stat_test; /* 0x00z830 */ | 215 | u64 ce_lsi_gb_int_stat_test; /* 0x00z830 */ |
216 | uint64_t ce_lsi_gb_int_mask; /* 0x00z838 */ | 216 | u64 ce_lsi_gb_int_mask; /* 0x00z838 */ |
217 | uint64_t ce_lsi_gb_pwr_dn1; /* 0x00z840 */ | 217 | u64 ce_lsi_gb_pwr_dn1; /* 0x00z840 */ |
218 | uint64_t ce_lsi_gb_pwr_dn2; /* 0x00z848 */ | 218 | u64 ce_lsi_gb_pwr_dn2; /* 0x00z848 */ |
219 | uint64_t ce_pad_00z850[246]; /* 0x00z850 -- 0x00zFF8 */ | 219 | u64 ce_pad_00z850[246]; /* 0x00z850 -- 0x00zFF8 */ |
220 | } ce_lsi[2]; | 220 | } ce_lsi[2]; |
221 | 221 | ||
222 | uint64_t ce_pad_004000[10]; /* 0x004000 -- 0x004048 */ | 222 | u64 ce_pad_004000[10]; /* 0x004000 -- 0x004048 */ |
223 | 223 | ||
224 | /* | 224 | /* |
225 | * CRM: Coretalk Receive Module Registers | 225 | * CRM: Coretalk Receive Module Registers |
226 | */ | 226 | */ |
227 | uint64_t ce_crm_debug_mux; /* 0x004050 */ | 227 | u64 ce_crm_debug_mux; /* 0x004050 */ |
228 | uint64_t ce_pad_004058; /* 0x004058 */ | 228 | u64 ce_pad_004058; /* 0x004058 */ |
229 | uint64_t ce_crm_ssp_err_cmd_wrd; /* 0x004060 */ | 229 | u64 ce_crm_ssp_err_cmd_wrd; /* 0x004060 */ |
230 | uint64_t ce_crm_ssp_err_addr; /* 0x004068 */ | 230 | u64 ce_crm_ssp_err_addr; /* 0x004068 */ |
231 | uint64_t ce_crm_ssp_err_syn; /* 0x004070 */ | 231 | u64 ce_crm_ssp_err_syn; /* 0x004070 */ |
232 | 232 | ||
233 | uint64_t ce_pad_004078[499]; /* 0x004078 -- 0x005008 */ | 233 | u64 ce_pad_004078[499]; /* 0x004078 -- 0x005008 */ |
234 | 234 | ||
235 | /* | 235 | /* |
236 | * CXM: Coretalk Xmit Module Registers | 236 | * CXM: Coretalk Xmit Module Registers |
237 | */ | 237 | */ |
238 | uint64_t ce_cxm_dyn_credit_status; /* 0x005010 */ | 238 | u64 ce_cxm_dyn_credit_status; /* 0x005010 */ |
239 | uint64_t ce_cxm_last_credit_status; /* 0x005018 */ | 239 | u64 ce_cxm_last_credit_status; /* 0x005018 */ |
240 | uint64_t ce_cxm_credit_limit; /* 0x005020 */ | 240 | u64 ce_cxm_credit_limit; /* 0x005020 */ |
241 | uint64_t ce_cxm_force_credit; /* 0x005028 */ | 241 | u64 ce_cxm_force_credit; /* 0x005028 */ |
242 | uint64_t ce_cxm_disable_bypass; /* 0x005030 */ | 242 | u64 ce_cxm_disable_bypass; /* 0x005030 */ |
243 | uint64_t ce_pad_005038[3]; /* 0x005038 -- 0x005048 */ | 243 | u64 ce_pad_005038[3]; /* 0x005038 -- 0x005048 */ |
244 | uint64_t ce_cxm_debug_mux; /* 0x005050 */ | 244 | u64 ce_cxm_debug_mux; /* 0x005050 */ |
245 | 245 | ||
246 | uint64_t ce_pad_005058[501]; /* 0x005058 -- 0x005FF8 */ | 246 | u64 ce_pad_005058[501]; /* 0x005058 -- 0x005FF8 */ |
247 | 247 | ||
248 | /* | 248 | /* |
249 | * DTL: Downstream Transaction Layer Regs (Link#1 and Link#2) | 249 | * DTL: Downstream Transaction Layer Regs (Link#1 and Link#2) |
@@ -258,209 +258,209 @@ typedef volatile struct tioce { | |||
258 | #define ce_utl(link_num) ce_dtl_utl[link_num-1] | 258 | #define ce_utl(link_num) ce_dtl_utl[link_num-1] |
259 | struct ce_dtl_utl_reg { | 259 | struct ce_dtl_utl_reg { |
260 | /* DTL */ | 260 | /* DTL */ |
261 | uint64_t ce_dtl_dtdr_credit_limit; /* 0x00y000 */ | 261 | u64 ce_dtl_dtdr_credit_limit; /* 0x00y000 */ |
262 | uint64_t ce_dtl_dtdr_credit_force; /* 0x00y008 */ | 262 | u64 ce_dtl_dtdr_credit_force; /* 0x00y008 */ |
263 | uint64_t ce_dtl_dyn_credit_status; /* 0x00y010 */ | 263 | u64 ce_dtl_dyn_credit_status; /* 0x00y010 */ |
264 | uint64_t ce_dtl_dtl_last_credit_stat; /* 0x00y018 */ | 264 | u64 ce_dtl_dtl_last_credit_stat; /* 0x00y018 */ |
265 | uint64_t ce_dtl_dtl_ctrl; /* 0x00y020 */ | 265 | u64 ce_dtl_dtl_ctrl; /* 0x00y020 */ |
266 | uint64_t ce_pad_00y028[5]; /* 0x00y028 -- 0x00y048 */ | 266 | u64 ce_pad_00y028[5]; /* 0x00y028 -- 0x00y048 */ |
267 | uint64_t ce_dtl_debug_sel; /* 0x00y050 */ | 267 | u64 ce_dtl_debug_sel; /* 0x00y050 */ |
268 | uint64_t ce_pad_00y058[501]; /* 0x00y058 -- 0x00yFF8 */ | 268 | u64 ce_pad_00y058[501]; /* 0x00y058 -- 0x00yFF8 */ |
269 | 269 | ||
270 | /* UTL */ | 270 | /* UTL */ |
271 | uint64_t ce_utl_utl_ctrl; /* 0x00z000 */ | 271 | u64 ce_utl_utl_ctrl; /* 0x00z000 */ |
272 | uint64_t ce_utl_debug_sel; /* 0x00z008 */ | 272 | u64 ce_utl_debug_sel; /* 0x00z008 */ |
273 | uint64_t ce_pad_00z010[510]; /* 0x00z010 -- 0x00zFF8 */ | 273 | u64 ce_pad_00z010[510]; /* 0x00z010 -- 0x00zFF8 */ |
274 | } ce_dtl_utl[2]; | 274 | } ce_dtl_utl[2]; |
275 | 275 | ||
276 | uint64_t ce_pad_00A000[514]; /* 0x00A000 -- 0x00B008 */ | 276 | u64 ce_pad_00A000[514]; /* 0x00A000 -- 0x00B008 */ |
277 | 277 | ||
278 | /* | 278 | /* |
279 | * URE: Upstream Request Engine | 279 | * URE: Upstream Request Engine |
280 | */ | 280 | */ |
281 | uint64_t ce_ure_dyn_credit_status; /* 0x00B010 */ | 281 | u64 ce_ure_dyn_credit_status; /* 0x00B010 */ |
282 | uint64_t ce_ure_last_credit_status; /* 0x00B018 */ | 282 | u64 ce_ure_last_credit_status; /* 0x00B018 */ |
283 | uint64_t ce_ure_credit_limit; /* 0x00B020 */ | 283 | u64 ce_ure_credit_limit; /* 0x00B020 */ |
284 | uint64_t ce_pad_00B028; /* 0x00B028 */ | 284 | u64 ce_pad_00B028; /* 0x00B028 */ |
285 | uint64_t ce_ure_control; /* 0x00B030 */ | 285 | u64 ce_ure_control; /* 0x00B030 */ |
286 | uint64_t ce_ure_status; /* 0x00B038 */ | 286 | u64 ce_ure_status; /* 0x00B038 */ |
287 | uint64_t ce_pad_00B040[2]; /* 0x00B040 -- 0x00B048 */ | 287 | u64 ce_pad_00B040[2]; /* 0x00B040 -- 0x00B048 */ |
288 | uint64_t ce_ure_debug_sel; /* 0x00B050 */ | 288 | u64 ce_ure_debug_sel; /* 0x00B050 */ |
289 | uint64_t ce_ure_pcie_debug_sel; /* 0x00B058 */ | 289 | u64 ce_ure_pcie_debug_sel; /* 0x00B058 */ |
290 | uint64_t ce_ure_ssp_err_cmd_wrd; /* 0x00B060 */ | 290 | u64 ce_ure_ssp_err_cmd_wrd; /* 0x00B060 */ |
291 | uint64_t ce_ure_ssp_err_addr; /* 0x00B068 */ | 291 | u64 ce_ure_ssp_err_addr; /* 0x00B068 */ |
292 | uint64_t ce_ure_page_map; /* 0x00B070 */ | 292 | u64 ce_ure_page_map; /* 0x00B070 */ |
293 | uint64_t ce_ure_dir_map[TIOCE_NUM_PORTS]; /* 0x00B078 */ | 293 | u64 ce_ure_dir_map[TIOCE_NUM_PORTS]; /* 0x00B078 */ |
294 | uint64_t ce_ure_pipe_sel1; /* 0x00B088 */ | 294 | u64 ce_ure_pipe_sel1; /* 0x00B088 */ |
295 | uint64_t ce_ure_pipe_mask1; /* 0x00B090 */ | 295 | u64 ce_ure_pipe_mask1; /* 0x00B090 */ |
296 | uint64_t ce_ure_pipe_sel2; /* 0x00B098 */ | 296 | u64 ce_ure_pipe_sel2; /* 0x00B098 */ |
297 | uint64_t ce_ure_pipe_mask2; /* 0x00B0A0 */ | 297 | u64 ce_ure_pipe_mask2; /* 0x00B0A0 */ |
298 | uint64_t ce_ure_pcie1_credits_sent; /* 0x00B0A8 */ | 298 | u64 ce_ure_pcie1_credits_sent; /* 0x00B0A8 */ |
299 | uint64_t ce_ure_pcie1_credits_used; /* 0x00B0B0 */ | 299 | u64 ce_ure_pcie1_credits_used; /* 0x00B0B0 */ |
300 | uint64_t ce_ure_pcie1_credit_limit; /* 0x00B0B8 */ | 300 | u64 ce_ure_pcie1_credit_limit; /* 0x00B0B8 */ |
301 | uint64_t ce_ure_pcie2_credits_sent; /* 0x00B0C0 */ | 301 | u64 ce_ure_pcie2_credits_sent; /* 0x00B0C0 */ |
302 | uint64_t ce_ure_pcie2_credits_used; /* 0x00B0C8 */ | 302 | u64 ce_ure_pcie2_credits_used; /* 0x00B0C8 */ |
303 | uint64_t ce_ure_pcie2_credit_limit; /* 0x00B0D0 */ | 303 | u64 ce_ure_pcie2_credit_limit; /* 0x00B0D0 */ |
304 | uint64_t ce_ure_pcie_force_credit; /* 0x00B0D8 */ | 304 | u64 ce_ure_pcie_force_credit; /* 0x00B0D8 */ |
305 | uint64_t ce_ure_rd_tnum_val; /* 0x00B0E0 */ | 305 | u64 ce_ure_rd_tnum_val; /* 0x00B0E0 */ |
306 | uint64_t ce_ure_rd_tnum_rsp_rcvd; /* 0x00B0E8 */ | 306 | u64 ce_ure_rd_tnum_rsp_rcvd; /* 0x00B0E8 */ |
307 | uint64_t ce_ure_rd_tnum_esent_timer; /* 0x00B0F0 */ | 307 | u64 ce_ure_rd_tnum_esent_timer; /* 0x00B0F0 */ |
308 | uint64_t ce_ure_rd_tnum_error; /* 0x00B0F8 */ | 308 | u64 ce_ure_rd_tnum_error; /* 0x00B0F8 */ |
309 | uint64_t ce_ure_rd_tnum_first_cl; /* 0x00B100 */ | 309 | u64 ce_ure_rd_tnum_first_cl; /* 0x00B100 */ |
310 | uint64_t ce_ure_rd_tnum_link_buf; /* 0x00B108 */ | 310 | u64 ce_ure_rd_tnum_link_buf; /* 0x00B108 */ |
311 | uint64_t ce_ure_wr_tnum_val; /* 0x00B110 */ | 311 | u64 ce_ure_wr_tnum_val; /* 0x00B110 */ |
312 | uint64_t ce_ure_sram_err_addr0; /* 0x00B118 */ | 312 | u64 ce_ure_sram_err_addr0; /* 0x00B118 */ |
313 | uint64_t ce_ure_sram_err_addr1; /* 0x00B120 */ | 313 | u64 ce_ure_sram_err_addr1; /* 0x00B120 */ |
314 | uint64_t ce_ure_sram_err_addr2; /* 0x00B128 */ | 314 | u64 ce_ure_sram_err_addr2; /* 0x00B128 */ |
315 | uint64_t ce_ure_sram_rd_addr0; /* 0x00B130 */ | 315 | u64 ce_ure_sram_rd_addr0; /* 0x00B130 */ |
316 | uint64_t ce_ure_sram_rd_addr1; /* 0x00B138 */ | 316 | u64 ce_ure_sram_rd_addr1; /* 0x00B138 */ |
317 | uint64_t ce_ure_sram_rd_addr2; /* 0x00B140 */ | 317 | u64 ce_ure_sram_rd_addr2; /* 0x00B140 */ |
318 | uint64_t ce_ure_sram_wr_addr0; /* 0x00B148 */ | 318 | u64 ce_ure_sram_wr_addr0; /* 0x00B148 */ |
319 | uint64_t ce_ure_sram_wr_addr1; /* 0x00B150 */ | 319 | u64 ce_ure_sram_wr_addr1; /* 0x00B150 */ |
320 | uint64_t ce_ure_sram_wr_addr2; /* 0x00B158 */ | 320 | u64 ce_ure_sram_wr_addr2; /* 0x00B158 */ |
321 | uint64_t ce_ure_buf_flush10; /* 0x00B160 */ | 321 | u64 ce_ure_buf_flush10; /* 0x00B160 */ |
322 | uint64_t ce_ure_buf_flush11; /* 0x00B168 */ | 322 | u64 ce_ure_buf_flush11; /* 0x00B168 */ |
323 | uint64_t ce_ure_buf_flush12; /* 0x00B170 */ | 323 | u64 ce_ure_buf_flush12; /* 0x00B170 */ |
324 | uint64_t ce_ure_buf_flush13; /* 0x00B178 */ | 324 | u64 ce_ure_buf_flush13; /* 0x00B178 */ |
325 | uint64_t ce_ure_buf_flush20; /* 0x00B180 */ | 325 | u64 ce_ure_buf_flush20; /* 0x00B180 */ |
326 | uint64_t ce_ure_buf_flush21; /* 0x00B188 */ | 326 | u64 ce_ure_buf_flush21; /* 0x00B188 */ |
327 | uint64_t ce_ure_buf_flush22; /* 0x00B190 */ | 327 | u64 ce_ure_buf_flush22; /* 0x00B190 */ |
328 | uint64_t ce_ure_buf_flush23; /* 0x00B198 */ | 328 | u64 ce_ure_buf_flush23; /* 0x00B198 */ |
329 | uint64_t ce_ure_pcie_control1; /* 0x00B1A0 */ | 329 | u64 ce_ure_pcie_control1; /* 0x00B1A0 */ |
330 | uint64_t ce_ure_pcie_control2; /* 0x00B1A8 */ | 330 | u64 ce_ure_pcie_control2; /* 0x00B1A8 */ |
331 | 331 | ||
332 | uint64_t ce_pad_00B1B0[458]; /* 0x00B1B0 -- 0x00BFF8 */ | 332 | u64 ce_pad_00B1B0[458]; /* 0x00B1B0 -- 0x00BFF8 */ |
333 | 333 | ||
334 | /* Upstream Data Buffer, Port1 */ | 334 | /* Upstream Data Buffer, Port1 */ |
335 | struct ce_ure_maint_ups_dat1_data { | 335 | struct ce_ure_maint_ups_dat1_data { |
336 | uint64_t data63_0[512]; /* 0x00C000 -- 0x00CFF8 */ | 336 | u64 data63_0[512]; /* 0x00C000 -- 0x00CFF8 */ |
337 | uint64_t data127_64[512]; /* 0x00D000 -- 0x00DFF8 */ | 337 | u64 data127_64[512]; /* 0x00D000 -- 0x00DFF8 */ |
338 | uint64_t parity[512]; /* 0x00E000 -- 0x00EFF8 */ | 338 | u64 parity[512]; /* 0x00E000 -- 0x00EFF8 */ |
339 | } ce_ure_maint_ups_dat1; | 339 | } ce_ure_maint_ups_dat1; |
340 | 340 | ||
341 | /* Upstream Header Buffer, Port1 */ | 341 | /* Upstream Header Buffer, Port1 */ |
342 | struct ce_ure_maint_ups_hdr1_data { | 342 | struct ce_ure_maint_ups_hdr1_data { |
343 | uint64_t data63_0[512]; /* 0x00F000 -- 0x00FFF8 */ | 343 | u64 data63_0[512]; /* 0x00F000 -- 0x00FFF8 */ |
344 | uint64_t data127_64[512]; /* 0x010000 -- 0x010FF8 */ | 344 | u64 data127_64[512]; /* 0x010000 -- 0x010FF8 */ |
345 | uint64_t parity[512]; /* 0x011000 -- 0x011FF8 */ | 345 | u64 parity[512]; /* 0x011000 -- 0x011FF8 */ |
346 | } ce_ure_maint_ups_hdr1; | 346 | } ce_ure_maint_ups_hdr1; |
347 | 347 | ||
348 | /* Upstream Data Buffer, Port2 */ | 348 | /* Upstream Data Buffer, Port2 */ |
349 | struct ce_ure_maint_ups_dat2_data { | 349 | struct ce_ure_maint_ups_dat2_data { |
350 | uint64_t data63_0[512]; /* 0x012000 -- 0x012FF8 */ | 350 | u64 data63_0[512]; /* 0x012000 -- 0x012FF8 */ |
351 | uint64_t data127_64[512]; /* 0x013000 -- 0x013FF8 */ | 351 | u64 data127_64[512]; /* 0x013000 -- 0x013FF8 */ |
352 | uint64_t parity[512]; /* 0x014000 -- 0x014FF8 */ | 352 | u64 parity[512]; /* 0x014000 -- 0x014FF8 */ |
353 | } ce_ure_maint_ups_dat2; | 353 | } ce_ure_maint_ups_dat2; |
354 | 354 | ||
355 | /* Upstream Header Buffer, Port2 */ | 355 | /* Upstream Header Buffer, Port2 */ |
356 | struct ce_ure_maint_ups_hdr2_data { | 356 | struct ce_ure_maint_ups_hdr2_data { |
357 | uint64_t data63_0[512]; /* 0x015000 -- 0x015FF8 */ | 357 | u64 data63_0[512]; /* 0x015000 -- 0x015FF8 */ |
358 | uint64_t data127_64[512]; /* 0x016000 -- 0x016FF8 */ | 358 | u64 data127_64[512]; /* 0x016000 -- 0x016FF8 */ |
359 | uint64_t parity[512]; /* 0x017000 -- 0x017FF8 */ | 359 | u64 parity[512]; /* 0x017000 -- 0x017FF8 */ |
360 | } ce_ure_maint_ups_hdr2; | 360 | } ce_ure_maint_ups_hdr2; |
361 | 361 | ||
362 | /* Downstream Data Buffer */ | 362 | /* Downstream Data Buffer */ |
363 | struct ce_ure_maint_dns_dat_data { | 363 | struct ce_ure_maint_dns_dat_data { |
364 | uint64_t data63_0[512]; /* 0x018000 -- 0x018FF8 */ | 364 | u64 data63_0[512]; /* 0x018000 -- 0x018FF8 */ |
365 | uint64_t data127_64[512]; /* 0x019000 -- 0x019FF8 */ | 365 | u64 data127_64[512]; /* 0x019000 -- 0x019FF8 */ |
366 | uint64_t parity[512]; /* 0x01A000 -- 0x01AFF8 */ | 366 | u64 parity[512]; /* 0x01A000 -- 0x01AFF8 */ |
367 | } ce_ure_maint_dns_dat; | 367 | } ce_ure_maint_dns_dat; |
368 | 368 | ||
369 | /* Downstream Header Buffer */ | 369 | /* Downstream Header Buffer */ |
370 | struct ce_ure_maint_dns_hdr_data { | 370 | struct ce_ure_maint_dns_hdr_data { |
371 | uint64_t data31_0[64]; /* 0x01B000 -- 0x01B1F8 */ | 371 | u64 data31_0[64]; /* 0x01B000 -- 0x01B1F8 */ |
372 | uint64_t data95_32[64]; /* 0x01B200 -- 0x01B3F8 */ | 372 | u64 data95_32[64]; /* 0x01B200 -- 0x01B3F8 */ |
373 | uint64_t parity[64]; /* 0x01B400 -- 0x01B5F8 */ | 373 | u64 parity[64]; /* 0x01B400 -- 0x01B5F8 */ |
374 | } ce_ure_maint_dns_hdr; | 374 | } ce_ure_maint_dns_hdr; |
375 | 375 | ||
376 | /* RCI Buffer Data */ | 376 | /* RCI Buffer Data */ |
377 | struct ce_ure_maint_rci_data { | 377 | struct ce_ure_maint_rci_data { |
378 | uint64_t data41_0[64]; /* 0x01B600 -- 0x01B7F8 */ | 378 | u64 data41_0[64]; /* 0x01B600 -- 0x01B7F8 */ |
379 | uint64_t data69_42[64]; /* 0x01B800 -- 0x01B9F8 */ | 379 | u64 data69_42[64]; /* 0x01B800 -- 0x01B9F8 */ |
380 | } ce_ure_maint_rci; | 380 | } ce_ure_maint_rci; |
381 | 381 | ||
382 | /* Response Queue */ | 382 | /* Response Queue */ |
383 | uint64_t ce_ure_maint_rspq[64]; /* 0x01BA00 -- 0x01BBF8 */ | 383 | u64 ce_ure_maint_rspq[64]; /* 0x01BA00 -- 0x01BBF8 */ |
384 | 384 | ||
385 | uint64_t ce_pad_01C000[4224]; /* 0x01BC00 -- 0x023FF8 */ | 385 | u64 ce_pad_01C000[4224]; /* 0x01BC00 -- 0x023FF8 */ |
386 | 386 | ||
387 | /* Admin Build-a-Packet Buffer */ | 387 | /* Admin Build-a-Packet Buffer */ |
388 | struct ce_adm_maint_bap_buf_data { | 388 | struct ce_adm_maint_bap_buf_data { |
389 | uint64_t data63_0[258]; /* 0x024000 -- 0x024808 */ | 389 | u64 data63_0[258]; /* 0x024000 -- 0x024808 */ |
390 | uint64_t data127_64[258]; /* 0x024810 -- 0x025018 */ | 390 | u64 data127_64[258]; /* 0x024810 -- 0x025018 */ |
391 | uint64_t parity[258]; /* 0x025020 -- 0x025828 */ | 391 | u64 parity[258]; /* 0x025020 -- 0x025828 */ |
392 | } ce_adm_maint_bap_buf; | 392 | } ce_adm_maint_bap_buf; |
393 | 393 | ||
394 | uint64_t ce_pad_025830[5370]; /* 0x025830 -- 0x02FFF8 */ | 394 | u64 ce_pad_025830[5370]; /* 0x025830 -- 0x02FFF8 */ |
395 | 395 | ||
396 | /* URE: 40bit PMU ATE Buffer */ /* 0x030000 -- 0x037FF8 */ | 396 | /* URE: 40bit PMU ATE Buffer */ /* 0x030000 -- 0x037FF8 */ |
397 | uint64_t ce_ure_ate40[TIOCE_NUM_M40_ATES]; | 397 | u64 ce_ure_ate40[TIOCE_NUM_M40_ATES]; |
398 | 398 | ||
399 | /* URE: 32/40bit PMU ATE Buffer */ /* 0x038000 -- 0x03BFF8 */ | 399 | /* URE: 32/40bit PMU ATE Buffer */ /* 0x038000 -- 0x03BFF8 */ |
400 | uint64_t ce_ure_ate3240[TIOCE_NUM_M3240_ATES]; | 400 | u64 ce_ure_ate3240[TIOCE_NUM_M3240_ATES]; |
401 | 401 | ||
402 | uint64_t ce_pad_03C000[2050]; /* 0x03C000 -- 0x040008 */ | 402 | u64 ce_pad_03C000[2050]; /* 0x03C000 -- 0x040008 */ |
403 | 403 | ||
404 | /* | 404 | /* |
405 | * DRE: Down Stream Request Engine | 405 | * DRE: Down Stream Request Engine |
406 | */ | 406 | */ |
407 | uint64_t ce_dre_dyn_credit_status1; /* 0x040010 */ | 407 | u64 ce_dre_dyn_credit_status1; /* 0x040010 */ |
408 | uint64_t ce_dre_dyn_credit_status2; /* 0x040018 */ | 408 | u64 ce_dre_dyn_credit_status2; /* 0x040018 */ |
409 | uint64_t ce_dre_last_credit_status1; /* 0x040020 */ | 409 | u64 ce_dre_last_credit_status1; /* 0x040020 */ |
410 | uint64_t ce_dre_last_credit_status2; /* 0x040028 */ | 410 | u64 ce_dre_last_credit_status2; /* 0x040028 */ |
411 | uint64_t ce_dre_credit_limit1; /* 0x040030 */ | 411 | u64 ce_dre_credit_limit1; /* 0x040030 */ |
412 | uint64_t ce_dre_credit_limit2; /* 0x040038 */ | 412 | u64 ce_dre_credit_limit2; /* 0x040038 */ |
413 | uint64_t ce_dre_force_credit1; /* 0x040040 */ | 413 | u64 ce_dre_force_credit1; /* 0x040040 */ |
414 | uint64_t ce_dre_force_credit2; /* 0x040048 */ | 414 | u64 ce_dre_force_credit2; /* 0x040048 */ |
415 | uint64_t ce_dre_debug_mux1; /* 0x040050 */ | 415 | u64 ce_dre_debug_mux1; /* 0x040050 */ |
416 | uint64_t ce_dre_debug_mux2; /* 0x040058 */ | 416 | u64 ce_dre_debug_mux2; /* 0x040058 */ |
417 | uint64_t ce_dre_ssp_err_cmd_wrd; /* 0x040060 */ | 417 | u64 ce_dre_ssp_err_cmd_wrd; /* 0x040060 */ |
418 | uint64_t ce_dre_ssp_err_addr; /* 0x040068 */ | 418 | u64 ce_dre_ssp_err_addr; /* 0x040068 */ |
419 | uint64_t ce_dre_comp_err_cmd_wrd; /* 0x040070 */ | 419 | u64 ce_dre_comp_err_cmd_wrd; /* 0x040070 */ |
420 | uint64_t ce_dre_comp_err_addr; /* 0x040078 */ | 420 | u64 ce_dre_comp_err_addr; /* 0x040078 */ |
421 | uint64_t ce_dre_req_status; /* 0x040080 */ | 421 | u64 ce_dre_req_status; /* 0x040080 */ |
422 | uint64_t ce_dre_config1; /* 0x040088 */ | 422 | u64 ce_dre_config1; /* 0x040088 */ |
423 | uint64_t ce_dre_config2; /* 0x040090 */ | 423 | u64 ce_dre_config2; /* 0x040090 */ |
424 | uint64_t ce_dre_config_req_status; /* 0x040098 */ | 424 | u64 ce_dre_config_req_status; /* 0x040098 */ |
425 | uint64_t ce_pad_0400A0[12]; /* 0x0400A0 -- 0x0400F8 */ | 425 | u64 ce_pad_0400A0[12]; /* 0x0400A0 -- 0x0400F8 */ |
426 | uint64_t ce_dre_dyn_fifo; /* 0x040100 */ | 426 | u64 ce_dre_dyn_fifo; /* 0x040100 */ |
427 | uint64_t ce_pad_040108[3]; /* 0x040108 -- 0x040118 */ | 427 | u64 ce_pad_040108[3]; /* 0x040108 -- 0x040118 */ |
428 | uint64_t ce_dre_last_fifo; /* 0x040120 */ | 428 | u64 ce_dre_last_fifo; /* 0x040120 */ |
429 | 429 | ||
430 | uint64_t ce_pad_040128[27]; /* 0x040128 -- 0x0401F8 */ | 430 | u64 ce_pad_040128[27]; /* 0x040128 -- 0x0401F8 */ |
431 | 431 | ||
432 | /* DRE Downstream Head Queue */ | 432 | /* DRE Downstream Head Queue */ |
433 | struct ce_dre_maint_ds_head_queue { | 433 | struct ce_dre_maint_ds_head_queue { |
434 | uint64_t data63_0[32]; /* 0x040200 -- 0x0402F8 */ | 434 | u64 data63_0[32]; /* 0x040200 -- 0x0402F8 */ |
435 | uint64_t data127_64[32]; /* 0x040300 -- 0x0403F8 */ | 435 | u64 data127_64[32]; /* 0x040300 -- 0x0403F8 */ |
436 | uint64_t parity[32]; /* 0x040400 -- 0x0404F8 */ | 436 | u64 parity[32]; /* 0x040400 -- 0x0404F8 */ |
437 | } ce_dre_maint_ds_head_q; | 437 | } ce_dre_maint_ds_head_q; |
438 | 438 | ||
439 | uint64_t ce_pad_040500[352]; /* 0x040500 -- 0x040FF8 */ | 439 | u64 ce_pad_040500[352]; /* 0x040500 -- 0x040FF8 */ |
440 | 440 | ||
441 | /* DRE Downstream Data Queue */ | 441 | /* DRE Downstream Data Queue */ |
442 | struct ce_dre_maint_ds_data_queue { | 442 | struct ce_dre_maint_ds_data_queue { |
443 | uint64_t data63_0[256]; /* 0x041000 -- 0x0417F8 */ | 443 | u64 data63_0[256]; /* 0x041000 -- 0x0417F8 */ |
444 | uint64_t ce_pad_041800[256]; /* 0x041800 -- 0x041FF8 */ | 444 | u64 ce_pad_041800[256]; /* 0x041800 -- 0x041FF8 */ |
445 | uint64_t data127_64[256]; /* 0x042000 -- 0x0427F8 */ | 445 | u64 data127_64[256]; /* 0x042000 -- 0x0427F8 */ |
446 | uint64_t ce_pad_042800[256]; /* 0x042800 -- 0x042FF8 */ | 446 | u64 ce_pad_042800[256]; /* 0x042800 -- 0x042FF8 */ |
447 | uint64_t parity[256]; /* 0x043000 -- 0x0437F8 */ | 447 | u64 parity[256]; /* 0x043000 -- 0x0437F8 */ |
448 | uint64_t ce_pad_043800[256]; /* 0x043800 -- 0x043FF8 */ | 448 | u64 ce_pad_043800[256]; /* 0x043800 -- 0x043FF8 */ |
449 | } ce_dre_maint_ds_data_q; | 449 | } ce_dre_maint_ds_data_q; |
450 | 450 | ||
451 | /* DRE URE Upstream Response Queue */ | 451 | /* DRE URE Upstream Response Queue */ |
452 | struct ce_dre_maint_ure_us_rsp_queue { | 452 | struct ce_dre_maint_ure_us_rsp_queue { |
453 | uint64_t data63_0[8]; /* 0x044000 -- 0x044038 */ | 453 | u64 data63_0[8]; /* 0x044000 -- 0x044038 */ |
454 | uint64_t ce_pad_044040[24]; /* 0x044040 -- 0x0440F8 */ | 454 | u64 ce_pad_044040[24]; /* 0x044040 -- 0x0440F8 */ |
455 | uint64_t data127_64[8]; /* 0x044100 -- 0x044138 */ | 455 | u64 data127_64[8]; /* 0x044100 -- 0x044138 */ |
456 | uint64_t ce_pad_044140[24]; /* 0x044140 -- 0x0441F8 */ | 456 | u64 ce_pad_044140[24]; /* 0x044140 -- 0x0441F8 */ |
457 | uint64_t parity[8]; /* 0x044200 -- 0x044238 */ | 457 | u64 parity[8]; /* 0x044200 -- 0x044238 */ |
458 | uint64_t ce_pad_044240[24]; /* 0x044240 -- 0x0442F8 */ | 458 | u64 ce_pad_044240[24]; /* 0x044240 -- 0x0442F8 */ |
459 | } ce_dre_maint_ure_us_rsp_q; | 459 | } ce_dre_maint_ure_us_rsp_q; |
460 | 460 | ||
461 | uint64_t ce_dre_maint_us_wrt_rsp[32];/* 0x044300 -- 0x0443F8 */ | 461 | u64 ce_dre_maint_us_wrt_rsp[32];/* 0x044300 -- 0x0443F8 */ |
462 | 462 | ||
463 | uint64_t ce_end_of_struct; /* 0x044400 */ | 463 | u64 ce_end_of_struct; /* 0x044400 */ |
464 | } tioce_t; | 464 | } tioce_t; |
465 | 465 | ||
466 | 466 | ||
@@ -625,11 +625,11 @@ typedef volatile struct tioce { | |||
625 | #define CE_URE_BUS_MASK (0xFFULL << BUS_SRC_ID_SHFT) | 625 | #define CE_URE_BUS_MASK (0xFFULL << BUS_SRC_ID_SHFT) |
626 | #define CE_URE_DEV_MASK (0x1FULL << DEV_SRC_ID_SHFT) | 626 | #define CE_URE_DEV_MASK (0x1FULL << DEV_SRC_ID_SHFT) |
627 | #define CE_URE_FNC_MASK (0x07ULL << FNC_SRC_ID_SHFT) | 627 | #define CE_URE_FNC_MASK (0x07ULL << FNC_SRC_ID_SHFT) |
628 | #define CE_URE_PIPE_BUS(b) (((uint64_t)(b) << BUS_SRC_ID_SHFT) & \ | 628 | #define CE_URE_PIPE_BUS(b) (((u64)(b) << BUS_SRC_ID_SHFT) & \ |
629 | CE_URE_BUS_MASK) | 629 | CE_URE_BUS_MASK) |
630 | #define CE_URE_PIPE_DEV(d) (((uint64_t)(d) << DEV_SRC_ID_SHFT) & \ | 630 | #define CE_URE_PIPE_DEV(d) (((u64)(d) << DEV_SRC_ID_SHFT) & \ |
631 | CE_URE_DEV_MASK) | 631 | CE_URE_DEV_MASK) |
632 | #define CE_URE_PIPE_FNC(f) (((uint64_t)(f) << FNC_SRC_ID_SHFT) & \ | 632 | #define CE_URE_PIPE_FNC(f) (((u64)(f) << FNC_SRC_ID_SHFT) & \ |
633 | CE_URE_FNC_MASK) | 633 | CE_URE_FNC_MASK) |
634 | 634 | ||
635 | #define CE_URE_SEL1_SHFT 0 | 635 | #define CE_URE_SEL1_SHFT 0 |
@@ -660,9 +660,9 @@ typedef volatile struct tioce { | |||
660 | #define CE_URE_PN1_MASK (0xFFULL << CE_URE_PN1_SHFT) | 660 | #define CE_URE_PN1_MASK (0xFFULL << CE_URE_PN1_SHFT) |
661 | #define CE_URE_PN2_SHFT 24 | 661 | #define CE_URE_PN2_SHFT 24 |
662 | #define CE_URE_PN2_MASK (0xFFULL << CE_URE_PN2_SHFT) | 662 | #define CE_URE_PN2_MASK (0xFFULL << CE_URE_PN2_SHFT) |
663 | #define CE_URE_PN1_SET(n) (((uint64_t)(n) << CE_URE_PN1_SHFT) & \ | 663 | #define CE_URE_PN1_SET(n) (((u64)(n) << CE_URE_PN1_SHFT) & \ |
664 | CE_URE_PN1_MASK) | 664 | CE_URE_PN1_MASK) |
665 | #define CE_URE_PN2_SET(n) (((uint64_t)(n) << CE_URE_PN2_SHFT) & \ | 665 | #define CE_URE_PN2_SET(n) (((u64)(n) << CE_URE_PN2_SHFT) & \ |
666 | CE_URE_PN2_MASK) | 666 | CE_URE_PN2_MASK) |
667 | 667 | ||
668 | /* ce_ure_pcie_control2 register bit masks & shifts */ | 668 | /* ce_ure_pcie_control2 register bit masks & shifts */ |
@@ -681,9 +681,9 @@ typedef volatile struct tioce { | |||
681 | #define CE_URE_PSN1_MASK (0x1FFFULL << CE_URE_PSN1_SHFT) | 681 | #define CE_URE_PSN1_MASK (0x1FFFULL << CE_URE_PSN1_SHFT) |
682 | #define CE_URE_PSN2_SHFT 32 | 682 | #define CE_URE_PSN2_SHFT 32 |
683 | #define CE_URE_PSN2_MASK (0x1FFFULL << CE_URE_PSN2_SHFT) | 683 | #define CE_URE_PSN2_MASK (0x1FFFULL << CE_URE_PSN2_SHFT) |
684 | #define CE_URE_PSN1_SET(n) (((uint64_t)(n) << CE_URE_PSN1_SHFT) & \ | 684 | #define CE_URE_PSN1_SET(n) (((u64)(n) << CE_URE_PSN1_SHFT) & \ |
685 | CE_URE_PSN1_MASK) | 685 | CE_URE_PSN1_MASK) |
686 | #define CE_URE_PSN2_SET(n) (((uint64_t)(n) << CE_URE_PSN2_SHFT) & \ | 686 | #define CE_URE_PSN2_SET(n) (((u64)(n) << CE_URE_PSN2_SHFT) & \ |
687 | CE_URE_PSN2_MASK) | 687 | CE_URE_PSN2_MASK) |
688 | 688 | ||
689 | /* | 689 | /* |
diff --git a/include/asm-ia64/sn/tioce_provider.h b/include/asm-ia64/sn/tioce_provider.h index cb414908671d..6d62b13f7ae7 100644 --- a/include/asm-ia64/sn/tioce_provider.h +++ b/include/asm-ia64/sn/tioce_provider.h | |||
@@ -21,9 +21,9 @@ | |||
21 | struct tioce_common { | 21 | struct tioce_common { |
22 | struct pcibus_bussoft ce_pcibus; /* common pciio header */ | 22 | struct pcibus_bussoft ce_pcibus; /* common pciio header */ |
23 | 23 | ||
24 | uint32_t ce_rev; | 24 | u32 ce_rev; |
25 | uint64_t ce_kernel_private; | 25 | u64 ce_kernel_private; |
26 | uint64_t ce_prom_private; | 26 | u64 ce_prom_private; |
27 | }; | 27 | }; |
28 | 28 | ||
29 | struct tioce_kernel { | 29 | struct tioce_kernel { |
@@ -31,31 +31,31 @@ struct tioce_kernel { | |||
31 | spinlock_t ce_lock; | 31 | spinlock_t ce_lock; |
32 | struct list_head ce_dmamap_list; | 32 | struct list_head ce_dmamap_list; |
33 | 33 | ||
34 | uint64_t ce_ate40_shadow[TIOCE_NUM_M40_ATES]; | 34 | u64 ce_ate40_shadow[TIOCE_NUM_M40_ATES]; |
35 | uint64_t ce_ate3240_shadow[TIOCE_NUM_M3240_ATES]; | 35 | u64 ce_ate3240_shadow[TIOCE_NUM_M3240_ATES]; |
36 | uint32_t ce_ate3240_pagesize; | 36 | u32 ce_ate3240_pagesize; |
37 | 37 | ||
38 | uint8_t ce_port1_secondary; | 38 | u8 ce_port1_secondary; |
39 | 39 | ||
40 | /* per-port resources */ | 40 | /* per-port resources */ |
41 | struct { | 41 | struct { |
42 | int dirmap_refcnt; | 42 | int dirmap_refcnt; |
43 | uint64_t dirmap_shadow; | 43 | u64 dirmap_shadow; |
44 | } ce_port[TIOCE_NUM_PORTS]; | 44 | } ce_port[TIOCE_NUM_PORTS]; |
45 | }; | 45 | }; |
46 | 46 | ||
47 | struct tioce_dmamap { | 47 | struct tioce_dmamap { |
48 | struct list_head ce_dmamap_list; /* headed by tioce_kernel */ | 48 | struct list_head ce_dmamap_list; /* headed by tioce_kernel */ |
49 | uint32_t refcnt; | 49 | u32 refcnt; |
50 | 50 | ||
51 | uint64_t nbytes; /* # bytes mapped */ | 51 | u64 nbytes; /* # bytes mapped */ |
52 | 52 | ||
53 | uint64_t ct_start; /* coretalk start address */ | 53 | u64 ct_start; /* coretalk start address */ |
54 | uint64_t pci_start; /* bus start address */ | 54 | u64 pci_start; /* bus start address */ |
55 | 55 | ||
56 | uint64_t *ate_hw; /* hw ptr of first ate in map */ | 56 | u64 *ate_hw; /* hw ptr of first ate in map */ |
57 | uint64_t *ate_shadow; /* shadow ptr of firat ate */ | 57 | u64 *ate_shadow; /* shadow ptr of firat ate */ |
58 | uint16_t ate_count; /* # ate's in the map */ | 58 | u16 ate_count; /* # ate's in the map */ |
59 | }; | 59 | }; |
60 | 60 | ||
61 | extern int tioce_init_provider(void); | 61 | extern int tioce_init_provider(void); |
diff --git a/include/asm-ia64/sn/tiocp.h b/include/asm-ia64/sn/tiocp.h index 5f2489c9d2dd..f47c08ab483c 100644 --- a/include/asm-ia64/sn/tiocp.h +++ b/include/asm-ia64/sn/tiocp.h | |||
@@ -21,189 +21,189 @@ struct tiocp{ | |||
21 | /* 0x000000-0x00FFFF -- Local Registers */ | 21 | /* 0x000000-0x00FFFF -- Local Registers */ |
22 | 22 | ||
23 | /* 0x000000-0x000057 -- (Legacy Widget Space) Configuration */ | 23 | /* 0x000000-0x000057 -- (Legacy Widget Space) Configuration */ |
24 | uint64_t cp_id; /* 0x000000 */ | 24 | u64 cp_id; /* 0x000000 */ |
25 | uint64_t cp_stat; /* 0x000008 */ | 25 | u64 cp_stat; /* 0x000008 */ |
26 | uint64_t cp_err_upper; /* 0x000010 */ | 26 | u64 cp_err_upper; /* 0x000010 */ |
27 | uint64_t cp_err_lower; /* 0x000018 */ | 27 | u64 cp_err_lower; /* 0x000018 */ |
28 | #define cp_err cp_err_lower | 28 | #define cp_err cp_err_lower |
29 | uint64_t cp_control; /* 0x000020 */ | 29 | u64 cp_control; /* 0x000020 */ |
30 | uint64_t cp_req_timeout; /* 0x000028 */ | 30 | u64 cp_req_timeout; /* 0x000028 */ |
31 | uint64_t cp_intr_upper; /* 0x000030 */ | 31 | u64 cp_intr_upper; /* 0x000030 */ |
32 | uint64_t cp_intr_lower; /* 0x000038 */ | 32 | u64 cp_intr_lower; /* 0x000038 */ |
33 | #define cp_intr cp_intr_lower | 33 | #define cp_intr cp_intr_lower |
34 | uint64_t cp_err_cmdword; /* 0x000040 */ | 34 | u64 cp_err_cmdword; /* 0x000040 */ |
35 | uint64_t _pad_000048; /* 0x000048 */ | 35 | u64 _pad_000048; /* 0x000048 */ |
36 | uint64_t cp_tflush; /* 0x000050 */ | 36 | u64 cp_tflush; /* 0x000050 */ |
37 | 37 | ||
38 | /* 0x000058-0x00007F -- Bridge-specific Configuration */ | 38 | /* 0x000058-0x00007F -- Bridge-specific Configuration */ |
39 | uint64_t cp_aux_err; /* 0x000058 */ | 39 | u64 cp_aux_err; /* 0x000058 */ |
40 | uint64_t cp_resp_upper; /* 0x000060 */ | 40 | u64 cp_resp_upper; /* 0x000060 */ |
41 | uint64_t cp_resp_lower; /* 0x000068 */ | 41 | u64 cp_resp_lower; /* 0x000068 */ |
42 | #define cp_resp cp_resp_lower | 42 | #define cp_resp cp_resp_lower |
43 | uint64_t cp_tst_pin_ctrl; /* 0x000070 */ | 43 | u64 cp_tst_pin_ctrl; /* 0x000070 */ |
44 | uint64_t cp_addr_lkerr; /* 0x000078 */ | 44 | u64 cp_addr_lkerr; /* 0x000078 */ |
45 | 45 | ||
46 | /* 0x000080-0x00008F -- PMU & MAP */ | 46 | /* 0x000080-0x00008F -- PMU & MAP */ |
47 | uint64_t cp_dir_map; /* 0x000080 */ | 47 | u64 cp_dir_map; /* 0x000080 */ |
48 | uint64_t _pad_000088; /* 0x000088 */ | 48 | u64 _pad_000088; /* 0x000088 */ |
49 | 49 | ||
50 | /* 0x000090-0x00009F -- SSRAM */ | 50 | /* 0x000090-0x00009F -- SSRAM */ |
51 | uint64_t cp_map_fault; /* 0x000090 */ | 51 | u64 cp_map_fault; /* 0x000090 */ |
52 | uint64_t _pad_000098; /* 0x000098 */ | 52 | u64 _pad_000098; /* 0x000098 */ |
53 | 53 | ||
54 | /* 0x0000A0-0x0000AF -- Arbitration */ | 54 | /* 0x0000A0-0x0000AF -- Arbitration */ |
55 | uint64_t cp_arb; /* 0x0000A0 */ | 55 | u64 cp_arb; /* 0x0000A0 */ |
56 | uint64_t _pad_0000A8; /* 0x0000A8 */ | 56 | u64 _pad_0000A8; /* 0x0000A8 */ |
57 | 57 | ||
58 | /* 0x0000B0-0x0000BF -- Number In A Can or ATE Parity Error */ | 58 | /* 0x0000B0-0x0000BF -- Number In A Can or ATE Parity Error */ |
59 | uint64_t cp_ate_parity_err; /* 0x0000B0 */ | 59 | u64 cp_ate_parity_err; /* 0x0000B0 */ |
60 | uint64_t _pad_0000B8; /* 0x0000B8 */ | 60 | u64 _pad_0000B8; /* 0x0000B8 */ |
61 | 61 | ||
62 | /* 0x0000C0-0x0000FF -- PCI/GIO */ | 62 | /* 0x0000C0-0x0000FF -- PCI/GIO */ |
63 | uint64_t cp_bus_timeout; /* 0x0000C0 */ | 63 | u64 cp_bus_timeout; /* 0x0000C0 */ |
64 | uint64_t cp_pci_cfg; /* 0x0000C8 */ | 64 | u64 cp_pci_cfg; /* 0x0000C8 */ |
65 | uint64_t cp_pci_err_upper; /* 0x0000D0 */ | 65 | u64 cp_pci_err_upper; /* 0x0000D0 */ |
66 | uint64_t cp_pci_err_lower; /* 0x0000D8 */ | 66 | u64 cp_pci_err_lower; /* 0x0000D8 */ |
67 | #define cp_pci_err cp_pci_err_lower | 67 | #define cp_pci_err cp_pci_err_lower |
68 | uint64_t _pad_0000E0[4]; /* 0x0000{E0..F8} */ | 68 | u64 _pad_0000E0[4]; /* 0x0000{E0..F8} */ |
69 | 69 | ||
70 | /* 0x000100-0x0001FF -- Interrupt */ | 70 | /* 0x000100-0x0001FF -- Interrupt */ |
71 | uint64_t cp_int_status; /* 0x000100 */ | 71 | u64 cp_int_status; /* 0x000100 */ |
72 | uint64_t cp_int_enable; /* 0x000108 */ | 72 | u64 cp_int_enable; /* 0x000108 */ |
73 | uint64_t cp_int_rst_stat; /* 0x000110 */ | 73 | u64 cp_int_rst_stat; /* 0x000110 */ |
74 | uint64_t cp_int_mode; /* 0x000118 */ | 74 | u64 cp_int_mode; /* 0x000118 */ |
75 | uint64_t cp_int_device; /* 0x000120 */ | 75 | u64 cp_int_device; /* 0x000120 */ |
76 | uint64_t cp_int_host_err; /* 0x000128 */ | 76 | u64 cp_int_host_err; /* 0x000128 */ |
77 | uint64_t cp_int_addr[8]; /* 0x0001{30,,,68} */ | 77 | u64 cp_int_addr[8]; /* 0x0001{30,,,68} */ |
78 | uint64_t cp_err_int_view; /* 0x000170 */ | 78 | u64 cp_err_int_view; /* 0x000170 */ |
79 | uint64_t cp_mult_int; /* 0x000178 */ | 79 | u64 cp_mult_int; /* 0x000178 */ |
80 | uint64_t cp_force_always[8]; /* 0x0001{80,,,B8} */ | 80 | u64 cp_force_always[8]; /* 0x0001{80,,,B8} */ |
81 | uint64_t cp_force_pin[8]; /* 0x0001{C0,,,F8} */ | 81 | u64 cp_force_pin[8]; /* 0x0001{C0,,,F8} */ |
82 | 82 | ||
83 | /* 0x000200-0x000298 -- Device */ | 83 | /* 0x000200-0x000298 -- Device */ |
84 | uint64_t cp_device[4]; /* 0x0002{00,,,18} */ | 84 | u64 cp_device[4]; /* 0x0002{00,,,18} */ |
85 | uint64_t _pad_000220[4]; /* 0x0002{20,,,38} */ | 85 | u64 _pad_000220[4]; /* 0x0002{20,,,38} */ |
86 | uint64_t cp_wr_req_buf[4]; /* 0x0002{40,,,58} */ | 86 | u64 cp_wr_req_buf[4]; /* 0x0002{40,,,58} */ |
87 | uint64_t _pad_000260[4]; /* 0x0002{60,,,78} */ | 87 | u64 _pad_000260[4]; /* 0x0002{60,,,78} */ |
88 | uint64_t cp_rrb_map[2]; /* 0x0002{80,,,88} */ | 88 | u64 cp_rrb_map[2]; /* 0x0002{80,,,88} */ |
89 | #define cp_even_resp cp_rrb_map[0] /* 0x000280 */ | 89 | #define cp_even_resp cp_rrb_map[0] /* 0x000280 */ |
90 | #define cp_odd_resp cp_rrb_map[1] /* 0x000288 */ | 90 | #define cp_odd_resp cp_rrb_map[1] /* 0x000288 */ |
91 | uint64_t cp_resp_status; /* 0x000290 */ | 91 | u64 cp_resp_status; /* 0x000290 */ |
92 | uint64_t cp_resp_clear; /* 0x000298 */ | 92 | u64 cp_resp_clear; /* 0x000298 */ |
93 | 93 | ||
94 | uint64_t _pad_0002A0[12]; /* 0x0002{A0..F8} */ | 94 | u64 _pad_0002A0[12]; /* 0x0002{A0..F8} */ |
95 | 95 | ||
96 | /* 0x000300-0x0003F8 -- Buffer Address Match Registers */ | 96 | /* 0x000300-0x0003F8 -- Buffer Address Match Registers */ |
97 | struct { | 97 | struct { |
98 | uint64_t upper; /* 0x0003{00,,,F0} */ | 98 | u64 upper; /* 0x0003{00,,,F0} */ |
99 | uint64_t lower; /* 0x0003{08,,,F8} */ | 99 | u64 lower; /* 0x0003{08,,,F8} */ |
100 | } cp_buf_addr_match[16]; | 100 | } cp_buf_addr_match[16]; |
101 | 101 | ||
102 | /* 0x000400-0x0005FF -- Performance Monitor Registers (even only) */ | 102 | /* 0x000400-0x0005FF -- Performance Monitor Registers (even only) */ |
103 | struct { | 103 | struct { |
104 | uint64_t flush_w_touch; /* 0x000{400,,,5C0} */ | 104 | u64 flush_w_touch; /* 0x000{400,,,5C0} */ |
105 | uint64_t flush_wo_touch; /* 0x000{408,,,5C8} */ | 105 | u64 flush_wo_touch; /* 0x000{408,,,5C8} */ |
106 | uint64_t inflight; /* 0x000{410,,,5D0} */ | 106 | u64 inflight; /* 0x000{410,,,5D0} */ |
107 | uint64_t prefetch; /* 0x000{418,,,5D8} */ | 107 | u64 prefetch; /* 0x000{418,,,5D8} */ |
108 | uint64_t total_pci_retry; /* 0x000{420,,,5E0} */ | 108 | u64 total_pci_retry; /* 0x000{420,,,5E0} */ |
109 | uint64_t max_pci_retry; /* 0x000{428,,,5E8} */ | 109 | u64 max_pci_retry; /* 0x000{428,,,5E8} */ |
110 | uint64_t max_latency; /* 0x000{430,,,5F0} */ | 110 | u64 max_latency; /* 0x000{430,,,5F0} */ |
111 | uint64_t clear_all; /* 0x000{438,,,5F8} */ | 111 | u64 clear_all; /* 0x000{438,,,5F8} */ |
112 | } cp_buf_count[8]; | 112 | } cp_buf_count[8]; |
113 | 113 | ||
114 | 114 | ||
115 | /* 0x000600-0x0009FF -- PCI/X registers */ | 115 | /* 0x000600-0x0009FF -- PCI/X registers */ |
116 | uint64_t cp_pcix_bus_err_addr; /* 0x000600 */ | 116 | u64 cp_pcix_bus_err_addr; /* 0x000600 */ |
117 | uint64_t cp_pcix_bus_err_attr; /* 0x000608 */ | 117 | u64 cp_pcix_bus_err_attr; /* 0x000608 */ |
118 | uint64_t cp_pcix_bus_err_data; /* 0x000610 */ | 118 | u64 cp_pcix_bus_err_data; /* 0x000610 */ |
119 | uint64_t cp_pcix_pio_split_addr; /* 0x000618 */ | 119 | u64 cp_pcix_pio_split_addr; /* 0x000618 */ |
120 | uint64_t cp_pcix_pio_split_attr; /* 0x000620 */ | 120 | u64 cp_pcix_pio_split_attr; /* 0x000620 */ |
121 | uint64_t cp_pcix_dma_req_err_attr; /* 0x000628 */ | 121 | u64 cp_pcix_dma_req_err_attr; /* 0x000628 */ |
122 | uint64_t cp_pcix_dma_req_err_addr; /* 0x000630 */ | 122 | u64 cp_pcix_dma_req_err_addr; /* 0x000630 */ |
123 | uint64_t cp_pcix_timeout; /* 0x000638 */ | 123 | u64 cp_pcix_timeout; /* 0x000638 */ |
124 | 124 | ||
125 | uint64_t _pad_000640[24]; /* 0x000{640,,,6F8} */ | 125 | u64 _pad_000640[24]; /* 0x000{640,,,6F8} */ |
126 | 126 | ||
127 | /* 0x000700-0x000737 -- Debug Registers */ | 127 | /* 0x000700-0x000737 -- Debug Registers */ |
128 | uint64_t cp_ct_debug_ctl; /* 0x000700 */ | 128 | u64 cp_ct_debug_ctl; /* 0x000700 */ |
129 | uint64_t cp_br_debug_ctl; /* 0x000708 */ | 129 | u64 cp_br_debug_ctl; /* 0x000708 */ |
130 | uint64_t cp_mux3_debug_ctl; /* 0x000710 */ | 130 | u64 cp_mux3_debug_ctl; /* 0x000710 */ |
131 | uint64_t cp_mux4_debug_ctl; /* 0x000718 */ | 131 | u64 cp_mux4_debug_ctl; /* 0x000718 */ |
132 | uint64_t cp_mux5_debug_ctl; /* 0x000720 */ | 132 | u64 cp_mux5_debug_ctl; /* 0x000720 */ |
133 | uint64_t cp_mux6_debug_ctl; /* 0x000728 */ | 133 | u64 cp_mux6_debug_ctl; /* 0x000728 */ |
134 | uint64_t cp_mux7_debug_ctl; /* 0x000730 */ | 134 | u64 cp_mux7_debug_ctl; /* 0x000730 */ |
135 | 135 | ||
136 | uint64_t _pad_000738[89]; /* 0x000{738,,,9F8} */ | 136 | u64 _pad_000738[89]; /* 0x000{738,,,9F8} */ |
137 | 137 | ||
138 | /* 0x000A00-0x000BFF -- PCI/X Read&Write Buffer */ | 138 | /* 0x000A00-0x000BFF -- PCI/X Read&Write Buffer */ |
139 | struct { | 139 | struct { |
140 | uint64_t cp_buf_addr; /* 0x000{A00,,,AF0} */ | 140 | u64 cp_buf_addr; /* 0x000{A00,,,AF0} */ |
141 | uint64_t cp_buf_attr; /* 0X000{A08,,,AF8} */ | 141 | u64 cp_buf_attr; /* 0X000{A08,,,AF8} */ |
142 | } cp_pcix_read_buf_64[16]; | 142 | } cp_pcix_read_buf_64[16]; |
143 | 143 | ||
144 | struct { | 144 | struct { |
145 | uint64_t cp_buf_addr; /* 0x000{B00,,,BE0} */ | 145 | u64 cp_buf_addr; /* 0x000{B00,,,BE0} */ |
146 | uint64_t cp_buf_attr; /* 0x000{B08,,,BE8} */ | 146 | u64 cp_buf_attr; /* 0x000{B08,,,BE8} */ |
147 | uint64_t cp_buf_valid; /* 0x000{B10,,,BF0} */ | 147 | u64 cp_buf_valid; /* 0x000{B10,,,BF0} */ |
148 | uint64_t __pad1; /* 0x000{B18,,,BF8} */ | 148 | u64 __pad1; /* 0x000{B18,,,BF8} */ |
149 | } cp_pcix_write_buf_64[8]; | 149 | } cp_pcix_write_buf_64[8]; |
150 | 150 | ||
151 | /* End of Local Registers -- Start of Address Map space */ | 151 | /* End of Local Registers -- Start of Address Map space */ |
152 | 152 | ||
153 | char _pad_000c00[0x010000 - 0x000c00]; | 153 | char _pad_000c00[0x010000 - 0x000c00]; |
154 | 154 | ||
155 | /* 0x010000-0x011FF8 -- Internal ATE RAM (Auto Parity Generation) */ | 155 | /* 0x010000-0x011FF8 -- Internal ATE RAM (Auto Parity Generation) */ |
156 | uint64_t cp_int_ate_ram[1024]; /* 0x010000-0x011FF8 */ | 156 | u64 cp_int_ate_ram[1024]; /* 0x010000-0x011FF8 */ |
157 | 157 | ||
158 | char _pad_012000[0x14000 - 0x012000]; | 158 | char _pad_012000[0x14000 - 0x012000]; |
159 | 159 | ||
160 | /* 0x014000-0x015FF8 -- Internal ATE RAM (Manual Parity Generation) */ | 160 | /* 0x014000-0x015FF8 -- Internal ATE RAM (Manual Parity Generation) */ |
161 | uint64_t cp_int_ate_ram_mp[1024]; /* 0x014000-0x015FF8 */ | 161 | u64 cp_int_ate_ram_mp[1024]; /* 0x014000-0x015FF8 */ |
162 | 162 | ||
163 | char _pad_016000[0x18000 - 0x016000]; | 163 | char _pad_016000[0x18000 - 0x016000]; |
164 | 164 | ||
165 | /* 0x18000-0x197F8 -- TIOCP Write Request Ram */ | 165 | /* 0x18000-0x197F8 -- TIOCP Write Request Ram */ |
166 | uint64_t cp_wr_req_lower[256]; /* 0x18000 - 0x187F8 */ | 166 | u64 cp_wr_req_lower[256]; /* 0x18000 - 0x187F8 */ |
167 | uint64_t cp_wr_req_upper[256]; /* 0x18800 - 0x18FF8 */ | 167 | u64 cp_wr_req_upper[256]; /* 0x18800 - 0x18FF8 */ |
168 | uint64_t cp_wr_req_parity[256]; /* 0x19000 - 0x197F8 */ | 168 | u64 cp_wr_req_parity[256]; /* 0x19000 - 0x197F8 */ |
169 | 169 | ||
170 | char _pad_019800[0x1C000 - 0x019800]; | 170 | char _pad_019800[0x1C000 - 0x019800]; |
171 | 171 | ||
172 | /* 0x1C000-0x1EFF8 -- TIOCP Read Response Ram */ | 172 | /* 0x1C000-0x1EFF8 -- TIOCP Read Response Ram */ |
173 | uint64_t cp_rd_resp_lower[512]; /* 0x1C000 - 0x1CFF8 */ | 173 | u64 cp_rd_resp_lower[512]; /* 0x1C000 - 0x1CFF8 */ |
174 | uint64_t cp_rd_resp_upper[512]; /* 0x1D000 - 0x1DFF8 */ | 174 | u64 cp_rd_resp_upper[512]; /* 0x1D000 - 0x1DFF8 */ |
175 | uint64_t cp_rd_resp_parity[512]; /* 0x1E000 - 0x1EFF8 */ | 175 | u64 cp_rd_resp_parity[512]; /* 0x1E000 - 0x1EFF8 */ |
176 | 176 | ||
177 | char _pad_01F000[0x20000 - 0x01F000]; | 177 | char _pad_01F000[0x20000 - 0x01F000]; |
178 | 178 | ||
179 | /* 0x020000-0x021FFF -- Host Device (CP) Configuration Space (not used) */ | 179 | /* 0x020000-0x021FFF -- Host Device (CP) Configuration Space (not used) */ |
180 | char _pad_020000[0x021000 - 0x20000]; | 180 | char _pad_020000[0x021000 - 0x20000]; |
181 | 181 | ||
182 | /* 0x021000-0x027FFF -- PCI Device Configuration Spaces */ | 182 | /* 0x021000-0x027FFF -- PCI Device Configuration Spaces */ |
183 | union { | 183 | union { |
184 | uint8_t c[0x1000 / 1]; /* 0x02{0000,,,7FFF} */ | 184 | u8 c[0x1000 / 1]; /* 0x02{0000,,,7FFF} */ |
185 | uint16_t s[0x1000 / 2]; /* 0x02{0000,,,7FFF} */ | 185 | u16 s[0x1000 / 2]; /* 0x02{0000,,,7FFF} */ |
186 | uint32_t l[0x1000 / 4]; /* 0x02{0000,,,7FFF} */ | 186 | u32 l[0x1000 / 4]; /* 0x02{0000,,,7FFF} */ |
187 | uint64_t d[0x1000 / 8]; /* 0x02{0000,,,7FFF} */ | 187 | u64 d[0x1000 / 8]; /* 0x02{0000,,,7FFF} */ |
188 | union { | 188 | union { |
189 | uint8_t c[0x100 / 1]; | 189 | u8 c[0x100 / 1]; |
190 | uint16_t s[0x100 / 2]; | 190 | u16 s[0x100 / 2]; |
191 | uint32_t l[0x100 / 4]; | 191 | u32 l[0x100 / 4]; |
192 | uint64_t d[0x100 / 8]; | 192 | u64 d[0x100 / 8]; |
193 | } f[8]; | 193 | } f[8]; |
194 | } cp_type0_cfg_dev[7]; /* 0x02{1000,,,7FFF} */ | 194 | } cp_type0_cfg_dev[7]; /* 0x02{1000,,,7FFF} */ |
195 | 195 | ||
196 | /* 0x028000-0x028FFF -- PCI Type 1 Configuration Space */ | 196 | /* 0x028000-0x028FFF -- PCI Type 1 Configuration Space */ |
197 | union { | 197 | union { |
198 | uint8_t c[0x1000 / 1]; /* 0x028000-0x029000 */ | 198 | u8 c[0x1000 / 1]; /* 0x028000-0x029000 */ |
199 | uint16_t s[0x1000 / 2]; /* 0x028000-0x029000 */ | 199 | u16 s[0x1000 / 2]; /* 0x028000-0x029000 */ |
200 | uint32_t l[0x1000 / 4]; /* 0x028000-0x029000 */ | 200 | u32 l[0x1000 / 4]; /* 0x028000-0x029000 */ |
201 | uint64_t d[0x1000 / 8]; /* 0x028000-0x029000 */ | 201 | u64 d[0x1000 / 8]; /* 0x028000-0x029000 */ |
202 | union { | 202 | union { |
203 | uint8_t c[0x100 / 1]; | 203 | u8 c[0x100 / 1]; |
204 | uint16_t s[0x100 / 2]; | 204 | u16 s[0x100 / 2]; |
205 | uint32_t l[0x100 / 4]; | 205 | u32 l[0x100 / 4]; |
206 | uint64_t d[0x100 / 8]; | 206 | u64 d[0x100 / 8]; |
207 | } f[8]; | 207 | } f[8]; |
208 | } cp_type1_cfg; /* 0x028000-0x029000 */ | 208 | } cp_type1_cfg; /* 0x028000-0x029000 */ |
209 | 209 | ||
@@ -211,30 +211,30 @@ struct tiocp{ | |||
211 | 211 | ||
212 | /* 0x030000-0x030007 -- PCI Interrupt Acknowledge Cycle */ | 212 | /* 0x030000-0x030007 -- PCI Interrupt Acknowledge Cycle */ |
213 | union { | 213 | union { |
214 | uint8_t c[8 / 1]; | 214 | u8 c[8 / 1]; |
215 | uint16_t s[8 / 2]; | 215 | u16 s[8 / 2]; |
216 | uint32_t l[8 / 4]; | 216 | u32 l[8 / 4]; |
217 | uint64_t d[8 / 8]; | 217 | u64 d[8 / 8]; |
218 | } cp_pci_iack; /* 0x030000-0x030007 */ | 218 | } cp_pci_iack; /* 0x030000-0x030007 */ |
219 | 219 | ||
220 | char _pad_030007[0x040000-0x030008]; | 220 | char _pad_030007[0x040000-0x030008]; |
221 | 221 | ||
222 | /* 0x040000-0x040007 -- PCIX Special Cycle */ | 222 | /* 0x040000-0x040007 -- PCIX Special Cycle */ |
223 | union { | 223 | union { |
224 | uint8_t c[8 / 1]; | 224 | u8 c[8 / 1]; |
225 | uint16_t s[8 / 2]; | 225 | u16 s[8 / 2]; |
226 | uint32_t l[8 / 4]; | 226 | u32 l[8 / 4]; |
227 | uint64_t d[8 / 8]; | 227 | u64 d[8 / 8]; |
228 | } cp_pcix_cycle; /* 0x040000-0x040007 */ | 228 | } cp_pcix_cycle; /* 0x040000-0x040007 */ |
229 | 229 | ||
230 | char _pad_040007[0x200000-0x040008]; | 230 | char _pad_040007[0x200000-0x040008]; |
231 | 231 | ||
232 | /* 0x200000-0x7FFFFF -- PCI/GIO Device Spaces */ | 232 | /* 0x200000-0x7FFFFF -- PCI/GIO Device Spaces */ |
233 | union { | 233 | union { |
234 | uint8_t c[0x100000 / 1]; | 234 | u8 c[0x100000 / 1]; |
235 | uint16_t s[0x100000 / 2]; | 235 | u16 s[0x100000 / 2]; |
236 | uint32_t l[0x100000 / 4]; | 236 | u32 l[0x100000 / 4]; |
237 | uint64_t d[0x100000 / 8]; | 237 | u64 d[0x100000 / 8]; |
238 | } cp_devio_raw[6]; /* 0x200000-0x7FFFFF */ | 238 | } cp_devio_raw[6]; /* 0x200000-0x7FFFFF */ |
239 | 239 | ||
240 | #define cp_devio(n) cp_devio_raw[((n)<2)?(n*2):(n+2)] | 240 | #define cp_devio(n) cp_devio_raw[((n)<2)?(n*2):(n+2)] |
@@ -243,10 +243,10 @@ struct tiocp{ | |||
243 | 243 | ||
244 | /* 0xA00000-0xBFFFFF -- PCI/GIO Device Spaces w/flush */ | 244 | /* 0xA00000-0xBFFFFF -- PCI/GIO Device Spaces w/flush */ |
245 | union { | 245 | union { |
246 | uint8_t c[0x100000 / 1]; | 246 | u8 c[0x100000 / 1]; |
247 | uint16_t s[0x100000 / 2]; | 247 | u16 s[0x100000 / 2]; |
248 | uint32_t l[0x100000 / 4]; | 248 | u32 l[0x100000 / 4]; |
249 | uint64_t d[0x100000 / 8]; | 249 | u64 d[0x100000 / 8]; |
250 | } cp_devio_raw_flush[6]; /* 0xA00000-0xBFFFFF */ | 250 | } cp_devio_raw_flush[6]; /* 0xA00000-0xBFFFFF */ |
251 | 251 | ||
252 | #define cp_devio_flush(n) cp_devio_raw_flush[((n)<2)?(n*2):(n+2)] | 252 | #define cp_devio_flush(n) cp_devio_raw_flush[((n)<2)?(n*2):(n+2)] |
diff --git a/include/asm-ia64/sn/tiocx.h b/include/asm-ia64/sn/tiocx.h index 5699e75e5024..d29728492f36 100644 --- a/include/asm-ia64/sn/tiocx.h +++ b/include/asm-ia64/sn/tiocx.h | |||
@@ -40,10 +40,10 @@ struct cx_drv { | |||
40 | }; | 40 | }; |
41 | 41 | ||
42 | /* create DMA address by stripping AS bits */ | 42 | /* create DMA address by stripping AS bits */ |
43 | #define TIOCX_DMA_ADDR(a) (uint64_t)((uint64_t)(a) & 0xffffcfffffffffUL) | 43 | #define TIOCX_DMA_ADDR(a) (u64)((u64)(a) & 0xffffcfffffffffUL) |
44 | 44 | ||
45 | #define TIOCX_TO_TIOCX_DMA_ADDR(a) (uint64_t)(((uint64_t)(a) & 0xfffffffff) | \ | 45 | #define TIOCX_TO_TIOCX_DMA_ADDR(a) (u64)(((u64)(a) & 0xfffffffff) | \ |
46 | ((((uint64_t)(a)) & 0xffffc000000000UL) <<2)) | 46 | ((((u64)(a)) & 0xffffc000000000UL) <<2)) |
47 | 47 | ||
48 | #define TIO_CE_ASIC_PARTNUM 0xce00 | 48 | #define TIO_CE_ASIC_PARTNUM 0xce00 |
49 | #define TIOCX_CORELET 3 | 49 | #define TIOCX_CORELET 3 |
@@ -63,10 +63,10 @@ extern int cx_device_unregister(struct cx_dev *); | |||
63 | extern int cx_device_register(nasid_t, int, int, struct hubdev_info *, int); | 63 | extern int cx_device_register(nasid_t, int, int, struct hubdev_info *, int); |
64 | extern int cx_driver_unregister(struct cx_drv *); | 64 | extern int cx_driver_unregister(struct cx_drv *); |
65 | extern int cx_driver_register(struct cx_drv *); | 65 | extern int cx_driver_register(struct cx_drv *); |
66 | extern uint64_t tiocx_dma_addr(uint64_t addr); | 66 | extern u64 tiocx_dma_addr(u64 addr); |
67 | extern uint64_t tiocx_swin_base(int nasid); | 67 | extern u64 tiocx_swin_base(int nasid); |
68 | extern void tiocx_mmr_store(int nasid, uint64_t offset, uint64_t value); | 68 | extern void tiocx_mmr_store(int nasid, u64 offset, u64 value); |
69 | extern uint64_t tiocx_mmr_load(int nasid, uint64_t offset); | 69 | extern u64 tiocx_mmr_load(int nasid, u64 offset); |
70 | 70 | ||
71 | #endif // __KERNEL__ | 71 | #endif // __KERNEL__ |
72 | #endif // _ASM_IA64_SN_TIO_TIOCX__ | 72 | #endif // _ASM_IA64_SN_TIO_TIOCX__ |
diff --git a/include/asm-ia64/sn/xp.h b/include/asm-ia64/sn/xp.h index 49faf8f26430..203945ae034e 100644 --- a/include/asm-ia64/sn/xp.h +++ b/include/asm-ia64/sn/xp.h | |||
@@ -227,7 +227,9 @@ enum xpc_retval { | |||
227 | 227 | ||
228 | xpcOpenCloseError, /* 50: channel open/close protocol error */ | 228 | xpcOpenCloseError, /* 50: channel open/close protocol error */ |
229 | 229 | ||
230 | xpcUnknownReason /* 51: unknown reason -- must be last in list */ | 230 | xpcDisconnected, /* 51: channel disconnected (closed) */ |
231 | |||
232 | xpcUnknownReason /* 52: unknown reason -- must be last in list */ | ||
231 | }; | 233 | }; |
232 | 234 | ||
233 | 235 | ||
diff --git a/include/asm-ia64/sn/xpc.h b/include/asm-ia64/sn/xpc.h new file mode 100644 index 000000000000..87e9cd588510 --- /dev/null +++ b/include/asm-ia64/sn/xpc.h | |||
@@ -0,0 +1,1274 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License. See the file "COPYING" in the main directory of this archive | ||
4 | * for more details. | ||
5 | * | ||
6 | * Copyright (c) 2004-2006 Silicon Graphics, Inc. All Rights Reserved. | ||
7 | */ | ||
8 | |||
9 | |||
10 | /* | ||
11 | * Cross Partition Communication (XPC) structures and macros. | ||
12 | */ | ||
13 | |||
14 | #ifndef _ASM_IA64_SN_XPC_H | ||
15 | #define _ASM_IA64_SN_XPC_H | ||
16 | |||
17 | |||
18 | #include <linux/config.h> | ||
19 | #include <linux/interrupt.h> | ||
20 | #include <linux/sysctl.h> | ||
21 | #include <linux/device.h> | ||
22 | #include <asm/pgtable.h> | ||
23 | #include <asm/processor.h> | ||
24 | #include <asm/sn/bte.h> | ||
25 | #include <asm/sn/clksupport.h> | ||
26 | #include <asm/sn/addrs.h> | ||
27 | #include <asm/sn/mspec.h> | ||
28 | #include <asm/sn/shub_mmr.h> | ||
29 | #include <asm/sn/xp.h> | ||
30 | |||
31 | |||
32 | /* | ||
33 | * XPC Version numbers consist of a major and minor number. XPC can always | ||
34 | * talk to versions with same major #, and never talk to versions with a | ||
35 | * different major #. | ||
36 | */ | ||
37 | #define _XPC_VERSION(_maj, _min) (((_maj) << 4) | ((_min) & 0xf)) | ||
38 | #define XPC_VERSION_MAJOR(_v) ((_v) >> 4) | ||
39 | #define XPC_VERSION_MINOR(_v) ((_v) & 0xf) | ||
40 | |||
41 | |||
42 | /* | ||
43 | * The next macros define word or bit representations for given | ||
44 | * C-brick nasid in either the SAL provided bit array representing | ||
45 | * nasids in the partition/machine or the AMO_t array used for | ||
46 | * inter-partition initiation communications. | ||
47 | * | ||
48 | * For SN2 machines, C-Bricks are alway even numbered NASIDs. As | ||
49 | * such, some space will be saved by insisting that nasid information | ||
50 | * passed from SAL always be packed for C-Bricks and the | ||
51 | * cross-partition interrupts use the same packing scheme. | ||
52 | */ | ||
53 | #define XPC_NASID_W_INDEX(_n) (((_n) / 64) / 2) | ||
54 | #define XPC_NASID_B_INDEX(_n) (((_n) / 2) & (64 - 1)) | ||
55 | #define XPC_NASID_IN_ARRAY(_n, _p) ((_p)[XPC_NASID_W_INDEX(_n)] & \ | ||
56 | (1UL << XPC_NASID_B_INDEX(_n))) | ||
57 | #define XPC_NASID_FROM_W_B(_w, _b) (((_w) * 64 + (_b)) * 2) | ||
58 | |||
59 | #define XPC_HB_DEFAULT_INTERVAL 5 /* incr HB every x secs */ | ||
60 | #define XPC_HB_CHECK_DEFAULT_INTERVAL 20 /* check HB every x secs */ | ||
61 | |||
62 | /* define the process name of HB checker and the CPU it is pinned to */ | ||
63 | #define XPC_HB_CHECK_THREAD_NAME "xpc_hb" | ||
64 | #define XPC_HB_CHECK_CPU 0 | ||
65 | |||
66 | /* define the process name of the discovery thread */ | ||
67 | #define XPC_DISCOVERY_THREAD_NAME "xpc_discovery" | ||
68 | |||
69 | |||
70 | /* | ||
71 | * the reserved page | ||
72 | * | ||
73 | * SAL reserves one page of memory per partition for XPC. Though a full page | ||
74 | * in length (16384 bytes), its starting address is not page aligned, but it | ||
75 | * is cacheline aligned. The reserved page consists of the following: | ||
76 | * | ||
77 | * reserved page header | ||
78 | * | ||
79 | * The first cacheline of the reserved page contains the header | ||
80 | * (struct xpc_rsvd_page). Before SAL initialization has completed, | ||
81 | * SAL has set up the following fields of the reserved page header: | ||
82 | * SAL_signature, SAL_version, partid, and nasids_size. The other | ||
83 | * fields are set up by XPC. (xpc_rsvd_page points to the local | ||
84 | * partition's reserved page.) | ||
85 | * | ||
86 | * part_nasids mask | ||
87 | * mach_nasids mask | ||
88 | * | ||
89 | * SAL also sets up two bitmaps (or masks), one that reflects the actual | ||
90 | * nasids in this partition (part_nasids), and the other that reflects | ||
91 | * the actual nasids in the entire machine (mach_nasids). We're only | ||
92 | * interested in the even numbered nasids (which contain the processors | ||
93 | * and/or memory), so we only need half as many bits to represent the | ||
94 | * nasids. The part_nasids mask is located starting at the first cacheline | ||
95 | * following the reserved page header. The mach_nasids mask follows right | ||
96 | * after the part_nasids mask. The size in bytes of each mask is reflected | ||
97 | * by the reserved page header field 'nasids_size'. (Local partition's | ||
98 | * mask pointers are xpc_part_nasids and xpc_mach_nasids.) | ||
99 | * | ||
100 | * vars | ||
101 | * vars part | ||
102 | * | ||
103 | * Immediately following the mach_nasids mask are the XPC variables | ||
104 | * required by other partitions. First are those that are generic to all | ||
105 | * partitions (vars), followed on the next available cacheline by those | ||
106 | * which are partition specific (vars part). These are setup by XPC. | ||
107 | * (Local partition's vars pointers are xpc_vars and xpc_vars_part.) | ||
108 | * | ||
109 | * Note: Until vars_pa is set, the partition XPC code has not been initialized. | ||
110 | */ | ||
111 | struct xpc_rsvd_page { | ||
112 | u64 SAL_signature; /* SAL: unique signature */ | ||
113 | u64 SAL_version; /* SAL: version */ | ||
114 | u8 partid; /* SAL: partition ID */ | ||
115 | u8 version; | ||
116 | u8 pad1[6]; /* align to next u64 in cacheline */ | ||
117 | volatile u64 vars_pa; | ||
118 | struct timespec stamp; /* time when reserved page was setup by XPC */ | ||
119 | u64 pad2[9]; /* align to last u64 in cacheline */ | ||
120 | u64 nasids_size; /* SAL: size of each nasid mask in bytes */ | ||
121 | }; | ||
122 | |||
123 | #define XPC_RP_VERSION _XPC_VERSION(1,1) /* version 1.1 of the reserved page */ | ||
124 | |||
125 | #define XPC_SUPPORTS_RP_STAMP(_version) \ | ||
126 | (_version >= _XPC_VERSION(1,1)) | ||
127 | |||
128 | /* | ||
129 | * compare stamps - the return value is: | ||
130 | * | ||
131 | * < 0, if stamp1 < stamp2 | ||
132 | * = 0, if stamp1 == stamp2 | ||
133 | * > 0, if stamp1 > stamp2 | ||
134 | */ | ||
135 | static inline int | ||
136 | xpc_compare_stamps(struct timespec *stamp1, struct timespec *stamp2) | ||
137 | { | ||
138 | int ret; | ||
139 | |||
140 | |||
141 | if ((ret = stamp1->tv_sec - stamp2->tv_sec) == 0) { | ||
142 | ret = stamp1->tv_nsec - stamp2->tv_nsec; | ||
143 | } | ||
144 | return ret; | ||
145 | } | ||
146 | |||
147 | |||
148 | /* | ||
149 | * Define the structures by which XPC variables can be exported to other | ||
150 | * partitions. (There are two: struct xpc_vars and struct xpc_vars_part) | ||
151 | */ | ||
152 | |||
153 | /* | ||
154 | * The following structure describes the partition generic variables | ||
155 | * needed by other partitions in order to properly initialize. | ||
156 | * | ||
157 | * struct xpc_vars version number also applies to struct xpc_vars_part. | ||
158 | * Changes to either structure and/or related functionality should be | ||
159 | * reflected by incrementing either the major or minor version numbers | ||
160 | * of struct xpc_vars. | ||
161 | */ | ||
162 | struct xpc_vars { | ||
163 | u8 version; | ||
164 | u64 heartbeat; | ||
165 | u64 heartbeating_to_mask; | ||
166 | u64 heartbeat_offline; /* if 0, heartbeat should be changing */ | ||
167 | int act_nasid; | ||
168 | int act_phys_cpuid; | ||
169 | u64 vars_part_pa; | ||
170 | u64 amos_page_pa; /* paddr of page of AMOs from MSPEC driver */ | ||
171 | AMO_t *amos_page; /* vaddr of page of AMOs from MSPEC driver */ | ||
172 | }; | ||
173 | |||
174 | #define XPC_V_VERSION _XPC_VERSION(3,1) /* version 3.1 of the cross vars */ | ||
175 | |||
176 | #define XPC_SUPPORTS_DISENGAGE_REQUEST(_version) \ | ||
177 | (_version >= _XPC_VERSION(3,1)) | ||
178 | |||
179 | |||
180 | static inline int | ||
181 | xpc_hb_allowed(partid_t partid, struct xpc_vars *vars) | ||
182 | { | ||
183 | return ((vars->heartbeating_to_mask & (1UL << partid)) != 0); | ||
184 | } | ||
185 | |||
186 | static inline void | ||
187 | xpc_allow_hb(partid_t partid, struct xpc_vars *vars) | ||
188 | { | ||
189 | u64 old_mask, new_mask; | ||
190 | |||
191 | do { | ||
192 | old_mask = vars->heartbeating_to_mask; | ||
193 | new_mask = (old_mask | (1UL << partid)); | ||
194 | } while (cmpxchg(&vars->heartbeating_to_mask, old_mask, new_mask) != | ||
195 | old_mask); | ||
196 | } | ||
197 | |||
198 | static inline void | ||
199 | xpc_disallow_hb(partid_t partid, struct xpc_vars *vars) | ||
200 | { | ||
201 | u64 old_mask, new_mask; | ||
202 | |||
203 | do { | ||
204 | old_mask = vars->heartbeating_to_mask; | ||
205 | new_mask = (old_mask & ~(1UL << partid)); | ||
206 | } while (cmpxchg(&vars->heartbeating_to_mask, old_mask, new_mask) != | ||
207 | old_mask); | ||
208 | } | ||
209 | |||
210 | |||
211 | /* | ||
212 | * The AMOs page consists of a number of AMO variables which are divided into | ||
213 | * four groups, The first two groups are used to identify an IRQ's sender. | ||
214 | * These two groups consist of 64 and 128 AMO variables respectively. The last | ||
215 | * two groups, consisting of just one AMO variable each, are used to identify | ||
216 | * the remote partitions that are currently engaged (from the viewpoint of | ||
217 | * the XPC running on the remote partition). | ||
218 | */ | ||
219 | #define XPC_NOTIFY_IRQ_AMOS 0 | ||
220 | #define XPC_ACTIVATE_IRQ_AMOS (XPC_NOTIFY_IRQ_AMOS + XP_MAX_PARTITIONS) | ||
221 | #define XPC_ENGAGED_PARTITIONS_AMO (XPC_ACTIVATE_IRQ_AMOS + XP_NASID_MASK_WORDS) | ||
222 | #define XPC_DISENGAGE_REQUEST_AMO (XPC_ENGAGED_PARTITIONS_AMO + 1) | ||
223 | |||
224 | |||
225 | /* | ||
226 | * The following structure describes the per partition specific variables. | ||
227 | * | ||
228 | * An array of these structures, one per partition, will be defined. As a | ||
229 | * partition becomes active XPC will copy the array entry corresponding to | ||
230 | * itself from that partition. It is desirable that the size of this | ||
231 | * structure evenly divide into a cacheline, such that none of the entries | ||
232 | * in this array crosses a cacheline boundary. As it is now, each entry | ||
233 | * occupies half a cacheline. | ||
234 | */ | ||
235 | struct xpc_vars_part { | ||
236 | volatile u64 magic; | ||
237 | |||
238 | u64 openclose_args_pa; /* physical address of open and close args */ | ||
239 | u64 GPs_pa; /* physical address of Get/Put values */ | ||
240 | |||
241 | u64 IPI_amo_pa; /* physical address of IPI AMO_t structure */ | ||
242 | int IPI_nasid; /* nasid of where to send IPIs */ | ||
243 | int IPI_phys_cpuid; /* physical CPU ID of where to send IPIs */ | ||
244 | |||
245 | u8 nchannels; /* #of defined channels supported */ | ||
246 | |||
247 | u8 reserved[23]; /* pad to a full 64 bytes */ | ||
248 | }; | ||
249 | |||
250 | /* | ||
251 | * The vars_part MAGIC numbers play a part in the first contact protocol. | ||
252 | * | ||
253 | * MAGIC1 indicates that the per partition specific variables for a remote | ||
254 | * partition have been initialized by this partition. | ||
255 | * | ||
256 | * MAGIC2 indicates that this partition has pulled the remote partititions | ||
257 | * per partition variables that pertain to this partition. | ||
258 | */ | ||
259 | #define XPC_VP_MAGIC1 0x0053524156435058L /* 'XPCVARS\0'L (little endian) */ | ||
260 | #define XPC_VP_MAGIC2 0x0073726176435058L /* 'XPCvars\0'L (little endian) */ | ||
261 | |||
262 | |||
263 | /* the reserved page sizes and offsets */ | ||
264 | |||
265 | #define XPC_RP_HEADER_SIZE L1_CACHE_ALIGN(sizeof(struct xpc_rsvd_page)) | ||
266 | #define XPC_RP_VARS_SIZE L1_CACHE_ALIGN(sizeof(struct xpc_vars)) | ||
267 | |||
268 | #define XPC_RP_PART_NASIDS(_rp) (u64 *) ((u8 *) _rp + XPC_RP_HEADER_SIZE) | ||
269 | #define XPC_RP_MACH_NASIDS(_rp) (XPC_RP_PART_NASIDS(_rp) + xp_nasid_mask_words) | ||
270 | #define XPC_RP_VARS(_rp) ((struct xpc_vars *) XPC_RP_MACH_NASIDS(_rp) + xp_nasid_mask_words) | ||
271 | #define XPC_RP_VARS_PART(_rp) (struct xpc_vars_part *) ((u8 *) XPC_RP_VARS(rp) + XPC_RP_VARS_SIZE) | ||
272 | |||
273 | |||
274 | /* | ||
275 | * Functions registered by add_timer() or called by kernel_thread() only | ||
276 | * allow for a single 64-bit argument. The following macros can be used to | ||
277 | * pack and unpack two (32-bit, 16-bit or 8-bit) arguments into or out from | ||
278 | * the passed argument. | ||
279 | */ | ||
280 | #define XPC_PACK_ARGS(_arg1, _arg2) \ | ||
281 | ((((u64) _arg1) & 0xffffffff) | \ | ||
282 | ((((u64) _arg2) & 0xffffffff) << 32)) | ||
283 | |||
284 | #define XPC_UNPACK_ARG1(_args) (((u64) _args) & 0xffffffff) | ||
285 | #define XPC_UNPACK_ARG2(_args) ((((u64) _args) >> 32) & 0xffffffff) | ||
286 | |||
287 | |||
288 | |||
289 | /* | ||
290 | * Define a Get/Put value pair (pointers) used with a message queue. | ||
291 | */ | ||
292 | struct xpc_gp { | ||
293 | volatile s64 get; /* Get value */ | ||
294 | volatile s64 put; /* Put value */ | ||
295 | }; | ||
296 | |||
297 | #define XPC_GP_SIZE \ | ||
298 | L1_CACHE_ALIGN(sizeof(struct xpc_gp) * XPC_NCHANNELS) | ||
299 | |||
300 | |||
301 | |||
302 | /* | ||
303 | * Define a structure that contains arguments associated with opening and | ||
304 | * closing a channel. | ||
305 | */ | ||
306 | struct xpc_openclose_args { | ||
307 | u16 reason; /* reason why channel is closing */ | ||
308 | u16 msg_size; /* sizeof each message entry */ | ||
309 | u16 remote_nentries; /* #of message entries in remote msg queue */ | ||
310 | u16 local_nentries; /* #of message entries in local msg queue */ | ||
311 | u64 local_msgqueue_pa; /* physical address of local message queue */ | ||
312 | }; | ||
313 | |||
314 | #define XPC_OPENCLOSE_ARGS_SIZE \ | ||
315 | L1_CACHE_ALIGN(sizeof(struct xpc_openclose_args) * XPC_NCHANNELS) | ||
316 | |||
317 | |||
318 | |||
319 | /* struct xpc_msg flags */ | ||
320 | |||
321 | #define XPC_M_DONE 0x01 /* msg has been received/consumed */ | ||
322 | #define XPC_M_READY 0x02 /* msg is ready to be sent */ | ||
323 | #define XPC_M_INTERRUPT 0x04 /* send interrupt when msg consumed */ | ||
324 | |||
325 | |||
326 | #define XPC_MSG_ADDRESS(_payload) \ | ||
327 | ((struct xpc_msg *)((u8 *)(_payload) - XPC_MSG_PAYLOAD_OFFSET)) | ||
328 | |||
329 | |||
330 | |||
331 | /* | ||
332 | * Defines notify entry. | ||
333 | * | ||
334 | * This is used to notify a message's sender that their message was received | ||
335 | * and consumed by the intended recipient. | ||
336 | */ | ||
337 | struct xpc_notify { | ||
338 | struct semaphore sema; /* notify semaphore */ | ||
339 | volatile u8 type; /* type of notification */ | ||
340 | |||
341 | /* the following two fields are only used if type == XPC_N_CALL */ | ||
342 | xpc_notify_func func; /* user's notify function */ | ||
343 | void *key; /* pointer to user's key */ | ||
344 | }; | ||
345 | |||
346 | /* struct xpc_notify type of notification */ | ||
347 | |||
348 | #define XPC_N_CALL 0x01 /* notify function provided by user */ | ||
349 | |||
350 | |||
351 | |||
352 | /* | ||
353 | * Define the structure that manages all the stuff required by a channel. In | ||
354 | * particular, they are used to manage the messages sent across the channel. | ||
355 | * | ||
356 | * This structure is private to a partition, and is NOT shared across the | ||
357 | * partition boundary. | ||
358 | * | ||
359 | * There is an array of these structures for each remote partition. It is | ||
360 | * allocated at the time a partition becomes active. The array contains one | ||
361 | * of these structures for each potential channel connection to that partition. | ||
362 | * | ||
363 | * Each of these structures manages two message queues (circular buffers). | ||
364 | * They are allocated at the time a channel connection is made. One of | ||
365 | * these message queues (local_msgqueue) holds the locally created messages | ||
366 | * that are destined for the remote partition. The other of these message | ||
367 | * queues (remote_msgqueue) is a locally cached copy of the remote partition's | ||
368 | * own local_msgqueue. | ||
369 | * | ||
370 | * The following is a description of the Get/Put pointers used to manage these | ||
371 | * two message queues. Consider the local_msgqueue to be on one partition | ||
372 | * and the remote_msgqueue to be its cached copy on another partition. A | ||
373 | * description of what each of the lettered areas contains is included. | ||
374 | * | ||
375 | * | ||
376 | * local_msgqueue remote_msgqueue | ||
377 | * | ||
378 | * |/////////| |/////////| | ||
379 | * w_remote_GP.get --> +---------+ |/////////| | ||
380 | * | F | |/////////| | ||
381 | * remote_GP.get --> +---------+ +---------+ <-- local_GP->get | ||
382 | * | | | | | ||
383 | * | | | E | | ||
384 | * | | | | | ||
385 | * | | +---------+ <-- w_local_GP.get | ||
386 | * | B | |/////////| | ||
387 | * | | |////D////| | ||
388 | * | | |/////////| | ||
389 | * | | +---------+ <-- w_remote_GP.put | ||
390 | * | | |////C////| | ||
391 | * local_GP->put --> +---------+ +---------+ <-- remote_GP.put | ||
392 | * | | |/////////| | ||
393 | * | A | |/////////| | ||
394 | * | | |/////////| | ||
395 | * w_local_GP.put --> +---------+ |/////////| | ||
396 | * |/////////| |/////////| | ||
397 | * | ||
398 | * | ||
399 | * ( remote_GP.[get|put] are cached copies of the remote | ||
400 | * partition's local_GP->[get|put], and thus their values can | ||
401 | * lag behind their counterparts on the remote partition. ) | ||
402 | * | ||
403 | * | ||
404 | * A - Messages that have been allocated, but have not yet been sent to the | ||
405 | * remote partition. | ||
406 | * | ||
407 | * B - Messages that have been sent, but have not yet been acknowledged by the | ||
408 | * remote partition as having been received. | ||
409 | * | ||
410 | * C - Area that needs to be prepared for the copying of sent messages, by | ||
411 | * the clearing of the message flags of any previously received messages. | ||
412 | * | ||
413 | * D - Area into which sent messages are to be copied from the remote | ||
414 | * partition's local_msgqueue and then delivered to their intended | ||
415 | * recipients. [ To allow for a multi-message copy, another pointer | ||
416 | * (next_msg_to_pull) has been added to keep track of the next message | ||
417 | * number needing to be copied (pulled). It chases after w_remote_GP.put. | ||
418 | * Any messages lying between w_local_GP.get and next_msg_to_pull have | ||
419 | * been copied and are ready to be delivered. ] | ||
420 | * | ||
421 | * E - Messages that have been copied and delivered, but have not yet been | ||
422 | * acknowledged by the recipient as having been received. | ||
423 | * | ||
424 | * F - Messages that have been acknowledged, but XPC has not yet notified the | ||
425 | * sender that the message was received by its intended recipient. | ||
426 | * This is also an area that needs to be prepared for the allocating of | ||
427 | * new messages, by the clearing of the message flags of the acknowledged | ||
428 | * messages. | ||
429 | */ | ||
430 | struct xpc_channel { | ||
431 | partid_t partid; /* ID of remote partition connected */ | ||
432 | spinlock_t lock; /* lock for updating this structure */ | ||
433 | u32 flags; /* general flags */ | ||
434 | |||
435 | enum xpc_retval reason; /* reason why channel is disconnect'g */ | ||
436 | int reason_line; /* line# disconnect initiated from */ | ||
437 | |||
438 | u16 number; /* channel # */ | ||
439 | |||
440 | u16 msg_size; /* sizeof each msg entry */ | ||
441 | u16 local_nentries; /* #of msg entries in local msg queue */ | ||
442 | u16 remote_nentries; /* #of msg entries in remote msg queue*/ | ||
443 | |||
444 | void *local_msgqueue_base; /* base address of kmalloc'd space */ | ||
445 | struct xpc_msg *local_msgqueue; /* local message queue */ | ||
446 | void *remote_msgqueue_base; /* base address of kmalloc'd space */ | ||
447 | struct xpc_msg *remote_msgqueue;/* cached copy of remote partition's */ | ||
448 | /* local message queue */ | ||
449 | u64 remote_msgqueue_pa; /* phys addr of remote partition's */ | ||
450 | /* local message queue */ | ||
451 | |||
452 | atomic_t references; /* #of external references to queues */ | ||
453 | |||
454 | atomic_t n_on_msg_allocate_wq; /* #on msg allocation wait queue */ | ||
455 | wait_queue_head_t msg_allocate_wq; /* msg allocation wait queue */ | ||
456 | |||
457 | u8 delayed_IPI_flags; /* IPI flags received, but delayed */ | ||
458 | /* action until channel disconnected */ | ||
459 | |||
460 | /* queue of msg senders who want to be notified when msg received */ | ||
461 | |||
462 | atomic_t n_to_notify; /* #of msg senders to notify */ | ||
463 | struct xpc_notify *notify_queue;/* notify queue for messages sent */ | ||
464 | |||
465 | xpc_channel_func func; /* user's channel function */ | ||
466 | void *key; /* pointer to user's key */ | ||
467 | |||
468 | struct semaphore msg_to_pull_sema; /* next msg to pull serialization */ | ||
469 | struct semaphore wdisconnect_sema; /* wait for channel disconnect */ | ||
470 | |||
471 | struct xpc_openclose_args *local_openclose_args; /* args passed on */ | ||
472 | /* opening or closing of channel */ | ||
473 | |||
474 | /* various flavors of local and remote Get/Put values */ | ||
475 | |||
476 | struct xpc_gp *local_GP; /* local Get/Put values */ | ||
477 | struct xpc_gp remote_GP; /* remote Get/Put values */ | ||
478 | struct xpc_gp w_local_GP; /* working local Get/Put values */ | ||
479 | struct xpc_gp w_remote_GP; /* working remote Get/Put values */ | ||
480 | s64 next_msg_to_pull; /* Put value of next msg to pull */ | ||
481 | |||
482 | /* kthread management related fields */ | ||
483 | |||
484 | // >>> rethink having kthreads_assigned_limit and kthreads_idle_limit; perhaps | ||
485 | // >>> allow the assigned limit be unbounded and let the idle limit be dynamic | ||
486 | // >>> dependent on activity over the last interval of time | ||
487 | atomic_t kthreads_assigned; /* #of kthreads assigned to channel */ | ||
488 | u32 kthreads_assigned_limit; /* limit on #of kthreads assigned */ | ||
489 | atomic_t kthreads_idle; /* #of kthreads idle waiting for work */ | ||
490 | u32 kthreads_idle_limit; /* limit on #of kthreads idle */ | ||
491 | atomic_t kthreads_active; /* #of kthreads actively working */ | ||
492 | // >>> following field is temporary | ||
493 | u32 kthreads_created; /* total #of kthreads created */ | ||
494 | |||
495 | wait_queue_head_t idle_wq; /* idle kthread wait queue */ | ||
496 | |||
497 | } ____cacheline_aligned; | ||
498 | |||
499 | |||
500 | /* struct xpc_channel flags */ | ||
501 | |||
502 | #define XPC_C_WASCONNECTED 0x00000001 /* channel was connected */ | ||
503 | |||
504 | #define XPC_C_ROPENREPLY 0x00000002 /* remote open channel reply */ | ||
505 | #define XPC_C_OPENREPLY 0x00000004 /* local open channel reply */ | ||
506 | #define XPC_C_ROPENREQUEST 0x00000008 /* remote open channel request */ | ||
507 | #define XPC_C_OPENREQUEST 0x00000010 /* local open channel request */ | ||
508 | |||
509 | #define XPC_C_SETUP 0x00000020 /* channel's msgqueues are alloc'd */ | ||
510 | #define XPC_C_CONNECTCALLOUT 0x00000040 /* channel connected callout made */ | ||
511 | #define XPC_C_CONNECTED 0x00000080 /* local channel is connected */ | ||
512 | #define XPC_C_CONNECTING 0x00000100 /* channel is being connected */ | ||
513 | |||
514 | #define XPC_C_RCLOSEREPLY 0x00000200 /* remote close channel reply */ | ||
515 | #define XPC_C_CLOSEREPLY 0x00000400 /* local close channel reply */ | ||
516 | #define XPC_C_RCLOSEREQUEST 0x00000800 /* remote close channel request */ | ||
517 | #define XPC_C_CLOSEREQUEST 0x00001000 /* local close channel request */ | ||
518 | |||
519 | #define XPC_C_DISCONNECTED 0x00002000 /* channel is disconnected */ | ||
520 | #define XPC_C_DISCONNECTING 0x00004000 /* channel is being disconnected */ | ||
521 | #define XPC_C_DISCONNECTCALLOUT 0x00008000 /* chan disconnected callout made */ | ||
522 | #define XPC_C_WDISCONNECT 0x00010000 /* waiting for channel disconnect */ | ||
523 | |||
524 | |||
525 | |||
526 | /* | ||
527 | * Manages channels on a partition basis. There is one of these structures | ||
528 | * for each partition (a partition will never utilize the structure that | ||
529 | * represents itself). | ||
530 | */ | ||
531 | struct xpc_partition { | ||
532 | |||
533 | /* XPC HB infrastructure */ | ||
534 | |||
535 | u8 remote_rp_version; /* version# of partition's rsvd pg */ | ||
536 | struct timespec remote_rp_stamp;/* time when rsvd pg was initialized */ | ||
537 | u64 remote_rp_pa; /* phys addr of partition's rsvd pg */ | ||
538 | u64 remote_vars_pa; /* phys addr of partition's vars */ | ||
539 | u64 remote_vars_part_pa; /* phys addr of partition's vars part */ | ||
540 | u64 last_heartbeat; /* HB at last read */ | ||
541 | u64 remote_amos_page_pa; /* phys addr of partition's amos page */ | ||
542 | int remote_act_nasid; /* active part's act/deact nasid */ | ||
543 | int remote_act_phys_cpuid; /* active part's act/deact phys cpuid */ | ||
544 | u32 act_IRQ_rcvd; /* IRQs since activation */ | ||
545 | spinlock_t act_lock; /* protect updating of act_state */ | ||
546 | u8 act_state; /* from XPC HB viewpoint */ | ||
547 | u8 remote_vars_version; /* version# of partition's vars */ | ||
548 | enum xpc_retval reason; /* reason partition is deactivating */ | ||
549 | int reason_line; /* line# deactivation initiated from */ | ||
550 | int reactivate_nasid; /* nasid in partition to reactivate */ | ||
551 | |||
552 | unsigned long disengage_request_timeout; /* timeout in jiffies */ | ||
553 | struct timer_list disengage_request_timer; | ||
554 | |||
555 | |||
556 | /* XPC infrastructure referencing and teardown control */ | ||
557 | |||
558 | volatile u8 setup_state; /* infrastructure setup state */ | ||
559 | wait_queue_head_t teardown_wq; /* kthread waiting to teardown infra */ | ||
560 | atomic_t references; /* #of references to infrastructure */ | ||
561 | |||
562 | |||
563 | /* | ||
564 | * NONE OF THE PRECEDING FIELDS OF THIS STRUCTURE WILL BE CLEARED WHEN | ||
565 | * XPC SETS UP THE NECESSARY INFRASTRUCTURE TO SUPPORT CROSS PARTITION | ||
566 | * COMMUNICATION. ALL OF THE FOLLOWING FIELDS WILL BE CLEARED. (THE | ||
567 | * 'nchannels' FIELD MUST BE THE FIRST OF THE FIELDS TO BE CLEARED.) | ||
568 | */ | ||
569 | |||
570 | |||
571 | u8 nchannels; /* #of defined channels supported */ | ||
572 | atomic_t nchannels_active; /* #of channels that are not DISCONNECTED */ | ||
573 | atomic_t nchannels_engaged;/* #of channels engaged with remote part */ | ||
574 | struct xpc_channel *channels;/* array of channel structures */ | ||
575 | |||
576 | void *local_GPs_base; /* base address of kmalloc'd space */ | ||
577 | struct xpc_gp *local_GPs; /* local Get/Put values */ | ||
578 | void *remote_GPs_base; /* base address of kmalloc'd space */ | ||
579 | struct xpc_gp *remote_GPs;/* copy of remote partition's local Get/Put */ | ||
580 | /* values */ | ||
581 | u64 remote_GPs_pa; /* phys address of remote partition's local */ | ||
582 | /* Get/Put values */ | ||
583 | |||
584 | |||
585 | /* fields used to pass args when opening or closing a channel */ | ||
586 | |||
587 | void *local_openclose_args_base; /* base address of kmalloc'd space */ | ||
588 | struct xpc_openclose_args *local_openclose_args; /* local's args */ | ||
589 | void *remote_openclose_args_base; /* base address of kmalloc'd space */ | ||
590 | struct xpc_openclose_args *remote_openclose_args; /* copy of remote's */ | ||
591 | /* args */ | ||
592 | u64 remote_openclose_args_pa; /* phys addr of remote's args */ | ||
593 | |||
594 | |||
595 | /* IPI sending, receiving and handling related fields */ | ||
596 | |||
597 | int remote_IPI_nasid; /* nasid of where to send IPIs */ | ||
598 | int remote_IPI_phys_cpuid; /* phys CPU ID of where to send IPIs */ | ||
599 | AMO_t *remote_IPI_amo_va; /* address of remote IPI AMO_t structure */ | ||
600 | |||
601 | AMO_t *local_IPI_amo_va; /* address of IPI AMO_t structure */ | ||
602 | u64 local_IPI_amo; /* IPI amo flags yet to be handled */ | ||
603 | char IPI_owner[8]; /* IPI owner's name */ | ||
604 | struct timer_list dropped_IPI_timer; /* dropped IPI timer */ | ||
605 | |||
606 | spinlock_t IPI_lock; /* IPI handler lock */ | ||
607 | |||
608 | |||
609 | /* channel manager related fields */ | ||
610 | |||
611 | atomic_t channel_mgr_requests; /* #of requests to activate chan mgr */ | ||
612 | wait_queue_head_t channel_mgr_wq; /* channel mgr's wait queue */ | ||
613 | |||
614 | } ____cacheline_aligned; | ||
615 | |||
616 | |||
617 | /* struct xpc_partition act_state values (for XPC HB) */ | ||
618 | |||
619 | #define XPC_P_INACTIVE 0x00 /* partition is not active */ | ||
620 | #define XPC_P_ACTIVATION_REQ 0x01 /* created thread to activate */ | ||
621 | #define XPC_P_ACTIVATING 0x02 /* activation thread started */ | ||
622 | #define XPC_P_ACTIVE 0x03 /* xpc_partition_up() was called */ | ||
623 | #define XPC_P_DEACTIVATING 0x04 /* partition deactivation initiated */ | ||
624 | |||
625 | |||
626 | #define XPC_DEACTIVATE_PARTITION(_p, _reason) \ | ||
627 | xpc_deactivate_partition(__LINE__, (_p), (_reason)) | ||
628 | |||
629 | |||
630 | /* struct xpc_partition setup_state values */ | ||
631 | |||
632 | #define XPC_P_UNSET 0x00 /* infrastructure was never setup */ | ||
633 | #define XPC_P_SETUP 0x01 /* infrastructure is setup */ | ||
634 | #define XPC_P_WTEARDOWN 0x02 /* waiting to teardown infrastructure */ | ||
635 | #define XPC_P_TORNDOWN 0x03 /* infrastructure is torndown */ | ||
636 | |||
637 | |||
638 | |||
639 | /* | ||
640 | * struct xpc_partition IPI_timer #of seconds to wait before checking for | ||
641 | * dropped IPIs. These occur whenever an IPI amo write doesn't complete until | ||
642 | * after the IPI was received. | ||
643 | */ | ||
644 | #define XPC_P_DROPPED_IPI_WAIT (0.25 * HZ) | ||
645 | |||
646 | |||
647 | /* number of seconds to wait for other partitions to disengage */ | ||
648 | #define XPC_DISENGAGE_REQUEST_DEFAULT_TIMELIMIT 90 | ||
649 | |||
650 | /* interval in seconds to print 'waiting disengagement' messages */ | ||
651 | #define XPC_DISENGAGE_PRINTMSG_INTERVAL 10 | ||
652 | |||
653 | |||
654 | #define XPC_PARTID(_p) ((partid_t) ((_p) - &xpc_partitions[0])) | ||
655 | |||
656 | |||
657 | |||
658 | /* found in xp_main.c */ | ||
659 | extern struct xpc_registration xpc_registrations[]; | ||
660 | |||
661 | |||
662 | /* found in xpc_main.c */ | ||
663 | extern struct device *xpc_part; | ||
664 | extern struct device *xpc_chan; | ||
665 | extern int xpc_disengage_request_timelimit; | ||
666 | extern int xpc_disengage_request_timedout; | ||
667 | extern irqreturn_t xpc_notify_IRQ_handler(int, void *, struct pt_regs *); | ||
668 | extern void xpc_dropped_IPI_check(struct xpc_partition *); | ||
669 | extern void xpc_activate_partition(struct xpc_partition *); | ||
670 | extern void xpc_activate_kthreads(struct xpc_channel *, int); | ||
671 | extern void xpc_create_kthreads(struct xpc_channel *, int); | ||
672 | extern void xpc_disconnect_wait(int); | ||
673 | |||
674 | |||
675 | /* found in xpc_partition.c */ | ||
676 | extern int xpc_exiting; | ||
677 | extern struct xpc_vars *xpc_vars; | ||
678 | extern struct xpc_rsvd_page *xpc_rsvd_page; | ||
679 | extern struct xpc_vars_part *xpc_vars_part; | ||
680 | extern struct xpc_partition xpc_partitions[XP_MAX_PARTITIONS + 1]; | ||
681 | extern char xpc_remote_copy_buffer[]; | ||
682 | extern struct xpc_rsvd_page *xpc_rsvd_page_init(void); | ||
683 | extern void xpc_allow_IPI_ops(void); | ||
684 | extern void xpc_restrict_IPI_ops(void); | ||
685 | extern int xpc_identify_act_IRQ_sender(void); | ||
686 | extern int xpc_partition_disengaged(struct xpc_partition *); | ||
687 | extern enum xpc_retval xpc_mark_partition_active(struct xpc_partition *); | ||
688 | extern void xpc_mark_partition_inactive(struct xpc_partition *); | ||
689 | extern void xpc_discovery(void); | ||
690 | extern void xpc_check_remote_hb(void); | ||
691 | extern void xpc_deactivate_partition(const int, struct xpc_partition *, | ||
692 | enum xpc_retval); | ||
693 | extern enum xpc_retval xpc_initiate_partid_to_nasids(partid_t, void *); | ||
694 | |||
695 | |||
696 | /* found in xpc_channel.c */ | ||
697 | extern void xpc_initiate_connect(int); | ||
698 | extern void xpc_initiate_disconnect(int); | ||
699 | extern enum xpc_retval xpc_initiate_allocate(partid_t, int, u32, void **); | ||
700 | extern enum xpc_retval xpc_initiate_send(partid_t, int, void *); | ||
701 | extern enum xpc_retval xpc_initiate_send_notify(partid_t, int, void *, | ||
702 | xpc_notify_func, void *); | ||
703 | extern void xpc_initiate_received(partid_t, int, void *); | ||
704 | extern enum xpc_retval xpc_setup_infrastructure(struct xpc_partition *); | ||
705 | extern enum xpc_retval xpc_pull_remote_vars_part(struct xpc_partition *); | ||
706 | extern void xpc_process_channel_activity(struct xpc_partition *); | ||
707 | extern void xpc_connected_callout(struct xpc_channel *); | ||
708 | extern void xpc_deliver_msg(struct xpc_channel *); | ||
709 | extern void xpc_disconnect_channel(const int, struct xpc_channel *, | ||
710 | enum xpc_retval, unsigned long *); | ||
711 | extern void xpc_disconnect_callout(struct xpc_channel *, enum xpc_retval); | ||
712 | extern void xpc_partition_going_down(struct xpc_partition *, enum xpc_retval); | ||
713 | extern void xpc_teardown_infrastructure(struct xpc_partition *); | ||
714 | |||
715 | |||
716 | |||
717 | static inline void | ||
718 | xpc_wakeup_channel_mgr(struct xpc_partition *part) | ||
719 | { | ||
720 | if (atomic_inc_return(&part->channel_mgr_requests) == 1) { | ||
721 | wake_up(&part->channel_mgr_wq); | ||
722 | } | ||
723 | } | ||
724 | |||
725 | |||
726 | |||
727 | /* | ||
728 | * These next two inlines are used to keep us from tearing down a channel's | ||
729 | * msg queues while a thread may be referencing them. | ||
730 | */ | ||
731 | static inline void | ||
732 | xpc_msgqueue_ref(struct xpc_channel *ch) | ||
733 | { | ||
734 | atomic_inc(&ch->references); | ||
735 | } | ||
736 | |||
737 | static inline void | ||
738 | xpc_msgqueue_deref(struct xpc_channel *ch) | ||
739 | { | ||
740 | s32 refs = atomic_dec_return(&ch->references); | ||
741 | |||
742 | DBUG_ON(refs < 0); | ||
743 | if (refs == 0) { | ||
744 | xpc_wakeup_channel_mgr(&xpc_partitions[ch->partid]); | ||
745 | } | ||
746 | } | ||
747 | |||
748 | |||
749 | |||
750 | #define XPC_DISCONNECT_CHANNEL(_ch, _reason, _irqflgs) \ | ||
751 | xpc_disconnect_channel(__LINE__, _ch, _reason, _irqflgs) | ||
752 | |||
753 | |||
754 | /* | ||
755 | * These two inlines are used to keep us from tearing down a partition's | ||
756 | * setup infrastructure while a thread may be referencing it. | ||
757 | */ | ||
758 | static inline void | ||
759 | xpc_part_deref(struct xpc_partition *part) | ||
760 | { | ||
761 | s32 refs = atomic_dec_return(&part->references); | ||
762 | |||
763 | |||
764 | DBUG_ON(refs < 0); | ||
765 | if (refs == 0 && part->setup_state == XPC_P_WTEARDOWN) { | ||
766 | wake_up(&part->teardown_wq); | ||
767 | } | ||
768 | } | ||
769 | |||
770 | static inline int | ||
771 | xpc_part_ref(struct xpc_partition *part) | ||
772 | { | ||
773 | int setup; | ||
774 | |||
775 | |||
776 | atomic_inc(&part->references); | ||
777 | setup = (part->setup_state == XPC_P_SETUP); | ||
778 | if (!setup) { | ||
779 | xpc_part_deref(part); | ||
780 | } | ||
781 | return setup; | ||
782 | } | ||
783 | |||
784 | |||
785 | |||
786 | /* | ||
787 | * The following macro is to be used for the setting of the reason and | ||
788 | * reason_line fields in both the struct xpc_channel and struct xpc_partition | ||
789 | * structures. | ||
790 | */ | ||
791 | #define XPC_SET_REASON(_p, _reason, _line) \ | ||
792 | { \ | ||
793 | (_p)->reason = _reason; \ | ||
794 | (_p)->reason_line = _line; \ | ||
795 | } | ||
796 | |||
797 | |||
798 | |||
799 | /* | ||
800 | * This next set of inlines are used to keep track of when a partition is | ||
801 | * potentially engaged in accessing memory belonging to another partition. | ||
802 | */ | ||
803 | |||
804 | static inline void | ||
805 | xpc_mark_partition_engaged(struct xpc_partition *part) | ||
806 | { | ||
807 | unsigned long irq_flags; | ||
808 | AMO_t *amo = (AMO_t *) __va(part->remote_amos_page_pa + | ||
809 | (XPC_ENGAGED_PARTITIONS_AMO * sizeof(AMO_t))); | ||
810 | |||
811 | |||
812 | local_irq_save(irq_flags); | ||
813 | |||
814 | /* set bit corresponding to our partid in remote partition's AMO */ | ||
815 | FETCHOP_STORE_OP(TO_AMO((u64) &amo->variable), FETCHOP_OR, | ||
816 | (1UL << sn_partition_id)); | ||
817 | /* | ||
818 | * We must always use the nofault function regardless of whether we | ||
819 | * are on a Shub 1.1 system or a Shub 1.2 slice 0xc processor. If we | ||
820 | * didn't, we'd never know that the other partition is down and would | ||
821 | * keep sending IPIs and AMOs to it until the heartbeat times out. | ||
822 | */ | ||
823 | (void) xp_nofault_PIOR((u64 *) GLOBAL_MMR_ADDR(NASID_GET(&amo-> | ||
824 | variable), xp_nofault_PIOR_target)); | ||
825 | |||
826 | local_irq_restore(irq_flags); | ||
827 | } | ||
828 | |||
829 | static inline void | ||
830 | xpc_mark_partition_disengaged(struct xpc_partition *part) | ||
831 | { | ||
832 | unsigned long irq_flags; | ||
833 | AMO_t *amo = (AMO_t *) __va(part->remote_amos_page_pa + | ||
834 | (XPC_ENGAGED_PARTITIONS_AMO * sizeof(AMO_t))); | ||
835 | |||
836 | |||
837 | local_irq_save(irq_flags); | ||
838 | |||
839 | /* clear bit corresponding to our partid in remote partition's AMO */ | ||
840 | FETCHOP_STORE_OP(TO_AMO((u64) &amo->variable), FETCHOP_AND, | ||
841 | ~(1UL << sn_partition_id)); | ||
842 | /* | ||
843 | * We must always use the nofault function regardless of whether we | ||
844 | * are on a Shub 1.1 system or a Shub 1.2 slice 0xc processor. If we | ||
845 | * didn't, we'd never know that the other partition is down and would | ||
846 | * keep sending IPIs and AMOs to it until the heartbeat times out. | ||
847 | */ | ||
848 | (void) xp_nofault_PIOR((u64 *) GLOBAL_MMR_ADDR(NASID_GET(&amo-> | ||
849 | variable), xp_nofault_PIOR_target)); | ||
850 | |||
851 | local_irq_restore(irq_flags); | ||
852 | } | ||
853 | |||
854 | static inline void | ||
855 | xpc_request_partition_disengage(struct xpc_partition *part) | ||
856 | { | ||
857 | unsigned long irq_flags; | ||
858 | AMO_t *amo = (AMO_t *) __va(part->remote_amos_page_pa + | ||
859 | (XPC_DISENGAGE_REQUEST_AMO * sizeof(AMO_t))); | ||
860 | |||
861 | |||
862 | local_irq_save(irq_flags); | ||
863 | |||
864 | /* set bit corresponding to our partid in remote partition's AMO */ | ||
865 | FETCHOP_STORE_OP(TO_AMO((u64) &amo->variable), FETCHOP_OR, | ||
866 | (1UL << sn_partition_id)); | ||
867 | /* | ||
868 | * We must always use the nofault function regardless of whether we | ||
869 | * are on a Shub 1.1 system or a Shub 1.2 slice 0xc processor. If we | ||
870 | * didn't, we'd never know that the other partition is down and would | ||
871 | * keep sending IPIs and AMOs to it until the heartbeat times out. | ||
872 | */ | ||
873 | (void) xp_nofault_PIOR((u64 *) GLOBAL_MMR_ADDR(NASID_GET(&amo-> | ||
874 | variable), xp_nofault_PIOR_target)); | ||
875 | |||
876 | local_irq_restore(irq_flags); | ||
877 | } | ||
878 | |||
879 | static inline void | ||
880 | xpc_cancel_partition_disengage_request(struct xpc_partition *part) | ||
881 | { | ||
882 | unsigned long irq_flags; | ||
883 | AMO_t *amo = (AMO_t *) __va(part->remote_amos_page_pa + | ||
884 | (XPC_DISENGAGE_REQUEST_AMO * sizeof(AMO_t))); | ||
885 | |||
886 | |||
887 | local_irq_save(irq_flags); | ||
888 | |||
889 | /* clear bit corresponding to our partid in remote partition's AMO */ | ||
890 | FETCHOP_STORE_OP(TO_AMO((u64) &amo->variable), FETCHOP_AND, | ||
891 | ~(1UL << sn_partition_id)); | ||
892 | /* | ||
893 | * We must always use the nofault function regardless of whether we | ||
894 | * are on a Shub 1.1 system or a Shub 1.2 slice 0xc processor. If we | ||
895 | * didn't, we'd never know that the other partition is down and would | ||
896 | * keep sending IPIs and AMOs to it until the heartbeat times out. | ||
897 | */ | ||
898 | (void) xp_nofault_PIOR((u64 *) GLOBAL_MMR_ADDR(NASID_GET(&amo-> | ||
899 | variable), xp_nofault_PIOR_target)); | ||
900 | |||
901 | local_irq_restore(irq_flags); | ||
902 | } | ||
903 | |||
904 | static inline u64 | ||
905 | xpc_partition_engaged(u64 partid_mask) | ||
906 | { | ||
907 | AMO_t *amo = xpc_vars->amos_page + XPC_ENGAGED_PARTITIONS_AMO; | ||
908 | |||
909 | |||
910 | /* return our partition's AMO variable ANDed with partid_mask */ | ||
911 | return (FETCHOP_LOAD_OP(TO_AMO((u64) &amo->variable), FETCHOP_LOAD) & | ||
912 | partid_mask); | ||
913 | } | ||
914 | |||
915 | static inline u64 | ||
916 | xpc_partition_disengage_requested(u64 partid_mask) | ||
917 | { | ||
918 | AMO_t *amo = xpc_vars->amos_page + XPC_DISENGAGE_REQUEST_AMO; | ||
919 | |||
920 | |||
921 | /* return our partition's AMO variable ANDed with partid_mask */ | ||
922 | return (FETCHOP_LOAD_OP(TO_AMO((u64) &amo->variable), FETCHOP_LOAD) & | ||
923 | partid_mask); | ||
924 | } | ||
925 | |||
926 | static inline void | ||
927 | xpc_clear_partition_engaged(u64 partid_mask) | ||
928 | { | ||
929 | AMO_t *amo = xpc_vars->amos_page + XPC_ENGAGED_PARTITIONS_AMO; | ||
930 | |||
931 | |||
932 | /* clear bit(s) based on partid_mask in our partition's AMO */ | ||
933 | FETCHOP_STORE_OP(TO_AMO((u64) &amo->variable), FETCHOP_AND, | ||
934 | ~partid_mask); | ||
935 | } | ||
936 | |||
937 | static inline void | ||
938 | xpc_clear_partition_disengage_request(u64 partid_mask) | ||
939 | { | ||
940 | AMO_t *amo = xpc_vars->amos_page + XPC_DISENGAGE_REQUEST_AMO; | ||
941 | |||
942 | |||
943 | /* clear bit(s) based on partid_mask in our partition's AMO */ | ||
944 | FETCHOP_STORE_OP(TO_AMO((u64) &amo->variable), FETCHOP_AND, | ||
945 | ~partid_mask); | ||
946 | } | ||
947 | |||
948 | |||
949 | |||
950 | /* | ||
951 | * The following set of macros and inlines are used for the sending and | ||
952 | * receiving of IPIs (also known as IRQs). There are two flavors of IPIs, | ||
953 | * one that is associated with partition activity (SGI_XPC_ACTIVATE) and | ||
954 | * the other that is associated with channel activity (SGI_XPC_NOTIFY). | ||
955 | */ | ||
956 | |||
957 | static inline u64 | ||
958 | xpc_IPI_receive(AMO_t *amo) | ||
959 | { | ||
960 | return FETCHOP_LOAD_OP(TO_AMO((u64) &amo->variable), FETCHOP_CLEAR); | ||
961 | } | ||
962 | |||
963 | |||
964 | static inline enum xpc_retval | ||
965 | xpc_IPI_send(AMO_t *amo, u64 flag, int nasid, int phys_cpuid, int vector) | ||
966 | { | ||
967 | int ret = 0; | ||
968 | unsigned long irq_flags; | ||
969 | |||
970 | |||
971 | local_irq_save(irq_flags); | ||
972 | |||
973 | FETCHOP_STORE_OP(TO_AMO((u64) &amo->variable), FETCHOP_OR, flag); | ||
974 | sn_send_IPI_phys(nasid, phys_cpuid, vector, 0); | ||
975 | |||
976 | /* | ||
977 | * We must always use the nofault function regardless of whether we | ||
978 | * are on a Shub 1.1 system or a Shub 1.2 slice 0xc processor. If we | ||
979 | * didn't, we'd never know that the other partition is down and would | ||
980 | * keep sending IPIs and AMOs to it until the heartbeat times out. | ||
981 | */ | ||
982 | ret = xp_nofault_PIOR((u64 *) GLOBAL_MMR_ADDR(NASID_GET(&amo->variable), | ||
983 | xp_nofault_PIOR_target)); | ||
984 | |||
985 | local_irq_restore(irq_flags); | ||
986 | |||
987 | return ((ret == 0) ? xpcSuccess : xpcPioReadError); | ||
988 | } | ||
989 | |||
990 | |||
991 | /* | ||
992 | * IPIs associated with SGI_XPC_ACTIVATE IRQ. | ||
993 | */ | ||
994 | |||
995 | /* | ||
996 | * Flag the appropriate AMO variable and send an IPI to the specified node. | ||
997 | */ | ||
998 | static inline void | ||
999 | xpc_activate_IRQ_send(u64 amos_page_pa, int from_nasid, int to_nasid, | ||
1000 | int to_phys_cpuid) | ||
1001 | { | ||
1002 | int w_index = XPC_NASID_W_INDEX(from_nasid); | ||
1003 | int b_index = XPC_NASID_B_INDEX(from_nasid); | ||
1004 | AMO_t *amos = (AMO_t *) __va(amos_page_pa + | ||
1005 | (XPC_ACTIVATE_IRQ_AMOS * sizeof(AMO_t))); | ||
1006 | |||
1007 | |||
1008 | (void) xpc_IPI_send(&amos[w_index], (1UL << b_index), to_nasid, | ||
1009 | to_phys_cpuid, SGI_XPC_ACTIVATE); | ||
1010 | } | ||
1011 | |||
1012 | static inline void | ||
1013 | xpc_IPI_send_activate(struct xpc_vars *vars) | ||
1014 | { | ||
1015 | xpc_activate_IRQ_send(vars->amos_page_pa, cnodeid_to_nasid(0), | ||
1016 | vars->act_nasid, vars->act_phys_cpuid); | ||
1017 | } | ||
1018 | |||
1019 | static inline void | ||
1020 | xpc_IPI_send_activated(struct xpc_partition *part) | ||
1021 | { | ||
1022 | xpc_activate_IRQ_send(part->remote_amos_page_pa, cnodeid_to_nasid(0), | ||
1023 | part->remote_act_nasid, part->remote_act_phys_cpuid); | ||
1024 | } | ||
1025 | |||
1026 | static inline void | ||
1027 | xpc_IPI_send_reactivate(struct xpc_partition *part) | ||
1028 | { | ||
1029 | xpc_activate_IRQ_send(xpc_vars->amos_page_pa, part->reactivate_nasid, | ||
1030 | xpc_vars->act_nasid, xpc_vars->act_phys_cpuid); | ||
1031 | } | ||
1032 | |||
1033 | static inline void | ||
1034 | xpc_IPI_send_disengage(struct xpc_partition *part) | ||
1035 | { | ||
1036 | xpc_activate_IRQ_send(part->remote_amos_page_pa, cnodeid_to_nasid(0), | ||
1037 | part->remote_act_nasid, part->remote_act_phys_cpuid); | ||
1038 | } | ||
1039 | |||
1040 | |||
1041 | /* | ||
1042 | * IPIs associated with SGI_XPC_NOTIFY IRQ. | ||
1043 | */ | ||
1044 | |||
1045 | /* | ||
1046 | * Send an IPI to the remote partition that is associated with the | ||
1047 | * specified channel. | ||
1048 | */ | ||
1049 | #define XPC_NOTIFY_IRQ_SEND(_ch, _ipi_f, _irq_f) \ | ||
1050 | xpc_notify_IRQ_send(_ch, _ipi_f, #_ipi_f, _irq_f) | ||
1051 | |||
1052 | static inline void | ||
1053 | xpc_notify_IRQ_send(struct xpc_channel *ch, u8 ipi_flag, char *ipi_flag_string, | ||
1054 | unsigned long *irq_flags) | ||
1055 | { | ||
1056 | struct xpc_partition *part = &xpc_partitions[ch->partid]; | ||
1057 | enum xpc_retval ret; | ||
1058 | |||
1059 | |||
1060 | if (likely(part->act_state != XPC_P_DEACTIVATING)) { | ||
1061 | ret = xpc_IPI_send(part->remote_IPI_amo_va, | ||
1062 | (u64) ipi_flag << (ch->number * 8), | ||
1063 | part->remote_IPI_nasid, | ||
1064 | part->remote_IPI_phys_cpuid, | ||
1065 | SGI_XPC_NOTIFY); | ||
1066 | dev_dbg(xpc_chan, "%s sent to partid=%d, channel=%d, ret=%d\n", | ||
1067 | ipi_flag_string, ch->partid, ch->number, ret); | ||
1068 | if (unlikely(ret != xpcSuccess)) { | ||
1069 | if (irq_flags != NULL) { | ||
1070 | spin_unlock_irqrestore(&ch->lock, *irq_flags); | ||
1071 | } | ||
1072 | XPC_DEACTIVATE_PARTITION(part, ret); | ||
1073 | if (irq_flags != NULL) { | ||
1074 | spin_lock_irqsave(&ch->lock, *irq_flags); | ||
1075 | } | ||
1076 | } | ||
1077 | } | ||
1078 | } | ||
1079 | |||
1080 | |||
1081 | /* | ||
1082 | * Make it look like the remote partition, which is associated with the | ||
1083 | * specified channel, sent us an IPI. This faked IPI will be handled | ||
1084 | * by xpc_dropped_IPI_check(). | ||
1085 | */ | ||
1086 | #define XPC_NOTIFY_IRQ_SEND_LOCAL(_ch, _ipi_f) \ | ||
1087 | xpc_notify_IRQ_send_local(_ch, _ipi_f, #_ipi_f) | ||
1088 | |||
1089 | static inline void | ||
1090 | xpc_notify_IRQ_send_local(struct xpc_channel *ch, u8 ipi_flag, | ||
1091 | char *ipi_flag_string) | ||
1092 | { | ||
1093 | struct xpc_partition *part = &xpc_partitions[ch->partid]; | ||
1094 | |||
1095 | |||
1096 | FETCHOP_STORE_OP(TO_AMO((u64) &part->local_IPI_amo_va->variable), | ||
1097 | FETCHOP_OR, ((u64) ipi_flag << (ch->number * 8))); | ||
1098 | dev_dbg(xpc_chan, "%s sent local from partid=%d, channel=%d\n", | ||
1099 | ipi_flag_string, ch->partid, ch->number); | ||
1100 | } | ||
1101 | |||
1102 | |||
1103 | /* | ||
1104 | * The sending and receiving of IPIs includes the setting of an AMO variable | ||
1105 | * to indicate the reason the IPI was sent. The 64-bit variable is divided | ||
1106 | * up into eight bytes, ordered from right to left. Byte zero pertains to | ||
1107 | * channel 0, byte one to channel 1, and so on. Each byte is described by | ||
1108 | * the following IPI flags. | ||
1109 | */ | ||
1110 | |||
1111 | #define XPC_IPI_CLOSEREQUEST 0x01 | ||
1112 | #define XPC_IPI_CLOSEREPLY 0x02 | ||
1113 | #define XPC_IPI_OPENREQUEST 0x04 | ||
1114 | #define XPC_IPI_OPENREPLY 0x08 | ||
1115 | #define XPC_IPI_MSGREQUEST 0x10 | ||
1116 | |||
1117 | |||
1118 | /* given an AMO variable and a channel#, get its associated IPI flags */ | ||
1119 | #define XPC_GET_IPI_FLAGS(_amo, _c) ((u8) (((_amo) >> ((_c) * 8)) & 0xff)) | ||
1120 | #define XPC_SET_IPI_FLAGS(_amo, _c, _f) (_amo) |= ((u64) (_f) << ((_c) * 8)) | ||
1121 | |||
1122 | #define XPC_ANY_OPENCLOSE_IPI_FLAGS_SET(_amo) ((_amo) & 0x0f0f0f0f0f0f0f0f) | ||
1123 | #define XPC_ANY_MSG_IPI_FLAGS_SET(_amo) ((_amo) & 0x1010101010101010) | ||
1124 | |||
1125 | |||
1126 | static inline void | ||
1127 | xpc_IPI_send_closerequest(struct xpc_channel *ch, unsigned long *irq_flags) | ||
1128 | { | ||
1129 | struct xpc_openclose_args *args = ch->local_openclose_args; | ||
1130 | |||
1131 | |||
1132 | args->reason = ch->reason; | ||
1133 | |||
1134 | XPC_NOTIFY_IRQ_SEND(ch, XPC_IPI_CLOSEREQUEST, irq_flags); | ||
1135 | } | ||
1136 | |||
1137 | static inline void | ||
1138 | xpc_IPI_send_closereply(struct xpc_channel *ch, unsigned long *irq_flags) | ||
1139 | { | ||
1140 | XPC_NOTIFY_IRQ_SEND(ch, XPC_IPI_CLOSEREPLY, irq_flags); | ||
1141 | } | ||
1142 | |||
1143 | static inline void | ||
1144 | xpc_IPI_send_openrequest(struct xpc_channel *ch, unsigned long *irq_flags) | ||
1145 | { | ||
1146 | struct xpc_openclose_args *args = ch->local_openclose_args; | ||
1147 | |||
1148 | |||
1149 | args->msg_size = ch->msg_size; | ||
1150 | args->local_nentries = ch->local_nentries; | ||
1151 | |||
1152 | XPC_NOTIFY_IRQ_SEND(ch, XPC_IPI_OPENREQUEST, irq_flags); | ||
1153 | } | ||
1154 | |||
1155 | static inline void | ||
1156 | xpc_IPI_send_openreply(struct xpc_channel *ch, unsigned long *irq_flags) | ||
1157 | { | ||
1158 | struct xpc_openclose_args *args = ch->local_openclose_args; | ||
1159 | |||
1160 | |||
1161 | args->remote_nentries = ch->remote_nentries; | ||
1162 | args->local_nentries = ch->local_nentries; | ||
1163 | args->local_msgqueue_pa = __pa(ch->local_msgqueue); | ||
1164 | |||
1165 | XPC_NOTIFY_IRQ_SEND(ch, XPC_IPI_OPENREPLY, irq_flags); | ||
1166 | } | ||
1167 | |||
1168 | static inline void | ||
1169 | xpc_IPI_send_msgrequest(struct xpc_channel *ch) | ||
1170 | { | ||
1171 | XPC_NOTIFY_IRQ_SEND(ch, XPC_IPI_MSGREQUEST, NULL); | ||
1172 | } | ||
1173 | |||
1174 | static inline void | ||
1175 | xpc_IPI_send_local_msgrequest(struct xpc_channel *ch) | ||
1176 | { | ||
1177 | XPC_NOTIFY_IRQ_SEND_LOCAL(ch, XPC_IPI_MSGREQUEST); | ||
1178 | } | ||
1179 | |||
1180 | |||
1181 | /* | ||
1182 | * Memory for XPC's AMO variables is allocated by the MSPEC driver. These | ||
1183 | * pages are located in the lowest granule. The lowest granule uses 4k pages | ||
1184 | * for cached references and an alternate TLB handler to never provide a | ||
1185 | * cacheable mapping for the entire region. This will prevent speculative | ||
1186 | * reading of cached copies of our lines from being issued which will cause | ||
1187 | * a PI FSB Protocol error to be generated by the SHUB. For XPC, we need 64 | ||
1188 | * AMO variables (based on XP_MAX_PARTITIONS) for message notification and an | ||
1189 | * additional 128 AMO variables (based on XP_NASID_MASK_WORDS) for partition | ||
1190 | * activation and 2 AMO variables for partition deactivation. | ||
1191 | */ | ||
1192 | static inline AMO_t * | ||
1193 | xpc_IPI_init(int index) | ||
1194 | { | ||
1195 | AMO_t *amo = xpc_vars->amos_page + index; | ||
1196 | |||
1197 | |||
1198 | (void) xpc_IPI_receive(amo); /* clear AMO variable */ | ||
1199 | return amo; | ||
1200 | } | ||
1201 | |||
1202 | |||
1203 | |||
1204 | static inline enum xpc_retval | ||
1205 | xpc_map_bte_errors(bte_result_t error) | ||
1206 | { | ||
1207 | switch (error) { | ||
1208 | case BTE_SUCCESS: return xpcSuccess; | ||
1209 | case BTEFAIL_DIR: return xpcBteDirectoryError; | ||
1210 | case BTEFAIL_POISON: return xpcBtePoisonError; | ||
1211 | case BTEFAIL_WERR: return xpcBteWriteError; | ||
1212 | case BTEFAIL_ACCESS: return xpcBteAccessError; | ||
1213 | case BTEFAIL_PWERR: return xpcBtePWriteError; | ||
1214 | case BTEFAIL_PRERR: return xpcBtePReadError; | ||
1215 | case BTEFAIL_TOUT: return xpcBteTimeOutError; | ||
1216 | case BTEFAIL_XTERR: return xpcBteXtalkError; | ||
1217 | case BTEFAIL_NOTAVAIL: return xpcBteNotAvailable; | ||
1218 | default: return xpcBteUnmappedError; | ||
1219 | } | ||
1220 | } | ||
1221 | |||
1222 | |||
1223 | |||
1224 | static inline void * | ||
1225 | xpc_kmalloc_cacheline_aligned(size_t size, gfp_t flags, void **base) | ||
1226 | { | ||
1227 | /* see if kmalloc will give us cachline aligned memory by default */ | ||
1228 | *base = kmalloc(size, flags); | ||
1229 | if (*base == NULL) { | ||
1230 | return NULL; | ||
1231 | } | ||
1232 | if ((u64) *base == L1_CACHE_ALIGN((u64) *base)) { | ||
1233 | return *base; | ||
1234 | } | ||
1235 | kfree(*base); | ||
1236 | |||
1237 | /* nope, we'll have to do it ourselves */ | ||
1238 | *base = kmalloc(size + L1_CACHE_BYTES, flags); | ||
1239 | if (*base == NULL) { | ||
1240 | return NULL; | ||
1241 | } | ||
1242 | return (void *) L1_CACHE_ALIGN((u64) *base); | ||
1243 | } | ||
1244 | |||
1245 | |||
1246 | /* | ||
1247 | * Check to see if there is any channel activity to/from the specified | ||
1248 | * partition. | ||
1249 | */ | ||
1250 | static inline void | ||
1251 | xpc_check_for_channel_activity(struct xpc_partition *part) | ||
1252 | { | ||
1253 | u64 IPI_amo; | ||
1254 | unsigned long irq_flags; | ||
1255 | |||
1256 | |||
1257 | IPI_amo = xpc_IPI_receive(part->local_IPI_amo_va); | ||
1258 | if (IPI_amo == 0) { | ||
1259 | return; | ||
1260 | } | ||
1261 | |||
1262 | spin_lock_irqsave(&part->IPI_lock, irq_flags); | ||
1263 | part->local_IPI_amo |= IPI_amo; | ||
1264 | spin_unlock_irqrestore(&part->IPI_lock, irq_flags); | ||
1265 | |||
1266 | dev_dbg(xpc_chan, "received IPI from partid=%d, IPI_amo=0x%lx\n", | ||
1267 | XPC_PARTID(part), IPI_amo); | ||
1268 | |||
1269 | xpc_wakeup_channel_mgr(part); | ||
1270 | } | ||
1271 | |||
1272 | |||
1273 | #endif /* _ASM_IA64_SN_XPC_H */ | ||
1274 | |||
diff --git a/include/asm-ia64/thread_info.h b/include/asm-ia64/thread_info.h index 653bb7f9a753..1d6518fe1f02 100644 --- a/include/asm-ia64/thread_info.h +++ b/include/asm-ia64/thread_info.h | |||
@@ -93,6 +93,7 @@ struct thread_info { | |||
93 | #define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling TIF_NEED_RESCHED */ | 93 | #define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling TIF_NEED_RESCHED */ |
94 | #define TIF_MEMDIE 17 | 94 | #define TIF_MEMDIE 17 |
95 | #define TIF_MCA_INIT 18 /* this task is processing MCA or INIT */ | 95 | #define TIF_MCA_INIT 18 /* this task is processing MCA or INIT */ |
96 | #define TIF_DB_DISABLED 19 /* debug trap disabled for fsyscall */ | ||
96 | 97 | ||
97 | #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) | 98 | #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) |
98 | #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) | 99 | #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) |
@@ -100,9 +101,10 @@ struct thread_info { | |||
100 | #define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) | 101 | #define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) |
101 | #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) | 102 | #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) |
102 | #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) | 103 | #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) |
103 | #define _TIF_SIGDELAYED (1 << TIF_SIGDELAYED) | 104 | #define _TIF_SIGDELAYED (1 << TIF_SIGDELAYED) |
104 | #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) | 105 | #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) |
105 | #define _TIF_MCA_INIT (1 << TIF_MCA_INIT) | 106 | #define _TIF_MCA_INIT (1 << TIF_MCA_INIT) |
107 | #define _TIF_DB_DISABLED (1 << TIF_DB_DISABLED) | ||
106 | 108 | ||
107 | /* "work to do on user-return" bits */ | 109 | /* "work to do on user-return" bits */ |
108 | #define TIF_ALLWORK_MASK (_TIF_NOTIFY_RESUME|_TIF_SIGPENDING|_TIF_NEED_RESCHED|_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SIGDELAYED) | 110 | #define TIF_ALLWORK_MASK (_TIF_NOTIFY_RESUME|_TIF_SIGPENDING|_TIF_NEED_RESCHED|_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SIGDELAYED) |
diff --git a/include/asm-powerpc/atomic.h b/include/asm-powerpc/atomic.h index 248f9aec959c..147a38dcc766 100644 --- a/include/asm-powerpc/atomic.h +++ b/include/asm-powerpc/atomic.h | |||
@@ -36,7 +36,7 @@ static __inline__ int atomic_add_return(int a, atomic_t *v) | |||
36 | int t; | 36 | int t; |
37 | 37 | ||
38 | __asm__ __volatile__( | 38 | __asm__ __volatile__( |
39 | EIEIO_ON_SMP | 39 | LWSYNC_ON_SMP |
40 | "1: lwarx %0,0,%2 # atomic_add_return\n\ | 40 | "1: lwarx %0,0,%2 # atomic_add_return\n\ |
41 | add %0,%1,%0\n" | 41 | add %0,%1,%0\n" |
42 | PPC405_ERR77(0,%2) | 42 | PPC405_ERR77(0,%2) |
@@ -72,7 +72,7 @@ static __inline__ int atomic_sub_return(int a, atomic_t *v) | |||
72 | int t; | 72 | int t; |
73 | 73 | ||
74 | __asm__ __volatile__( | 74 | __asm__ __volatile__( |
75 | EIEIO_ON_SMP | 75 | LWSYNC_ON_SMP |
76 | "1: lwarx %0,0,%2 # atomic_sub_return\n\ | 76 | "1: lwarx %0,0,%2 # atomic_sub_return\n\ |
77 | subf %0,%1,%0\n" | 77 | subf %0,%1,%0\n" |
78 | PPC405_ERR77(0,%2) | 78 | PPC405_ERR77(0,%2) |
@@ -106,7 +106,7 @@ static __inline__ int atomic_inc_return(atomic_t *v) | |||
106 | int t; | 106 | int t; |
107 | 107 | ||
108 | __asm__ __volatile__( | 108 | __asm__ __volatile__( |
109 | EIEIO_ON_SMP | 109 | LWSYNC_ON_SMP |
110 | "1: lwarx %0,0,%1 # atomic_inc_return\n\ | 110 | "1: lwarx %0,0,%1 # atomic_inc_return\n\ |
111 | addic %0,%0,1\n" | 111 | addic %0,%0,1\n" |
112 | PPC405_ERR77(0,%1) | 112 | PPC405_ERR77(0,%1) |
@@ -150,7 +150,7 @@ static __inline__ int atomic_dec_return(atomic_t *v) | |||
150 | int t; | 150 | int t; |
151 | 151 | ||
152 | __asm__ __volatile__( | 152 | __asm__ __volatile__( |
153 | EIEIO_ON_SMP | 153 | LWSYNC_ON_SMP |
154 | "1: lwarx %0,0,%1 # atomic_dec_return\n\ | 154 | "1: lwarx %0,0,%1 # atomic_dec_return\n\ |
155 | addic %0,%0,-1\n" | 155 | addic %0,%0,-1\n" |
156 | PPC405_ERR77(0,%1) | 156 | PPC405_ERR77(0,%1) |
@@ -176,19 +176,19 @@ static __inline__ int atomic_dec_return(atomic_t *v) | |||
176 | * Atomically adds @a to @v, so long as it was not @u. | 176 | * Atomically adds @a to @v, so long as it was not @u. |
177 | * Returns non-zero if @v was not @u, and zero otherwise. | 177 | * Returns non-zero if @v was not @u, and zero otherwise. |
178 | */ | 178 | */ |
179 | #define atomic_add_unless(v, a, u) \ | 179 | #define atomic_add_unless(v, a, u) \ |
180 | ({ \ | 180 | ({ \ |
181 | int c, old; \ | 181 | int c, old; \ |
182 | c = atomic_read(v); \ | 182 | c = atomic_read(v); \ |
183 | for (;;) { \ | 183 | for (;;) { \ |
184 | if (unlikely(c == (u))) \ | 184 | if (unlikely(c == (u))) \ |
185 | break; \ | 185 | break; \ |
186 | old = atomic_cmpxchg((v), c, c + (a)); \ | 186 | old = atomic_cmpxchg((v), c, c + (a)); \ |
187 | if (likely(old == c)) \ | 187 | if (likely(old == c)) \ |
188 | break; \ | 188 | break; \ |
189 | c = old; \ | 189 | c = old; \ |
190 | } \ | 190 | } \ |
191 | c != (u); \ | 191 | c != (u); \ |
192 | }) | 192 | }) |
193 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) | 193 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) |
194 | 194 | ||
@@ -204,7 +204,7 @@ static __inline__ int atomic_dec_if_positive(atomic_t *v) | |||
204 | int t; | 204 | int t; |
205 | 205 | ||
206 | __asm__ __volatile__( | 206 | __asm__ __volatile__( |
207 | EIEIO_ON_SMP | 207 | LWSYNC_ON_SMP |
208 | "1: lwarx %0,0,%1 # atomic_dec_if_positive\n\ | 208 | "1: lwarx %0,0,%1 # atomic_dec_if_positive\n\ |
209 | addic. %0,%0,-1\n\ | 209 | addic. %0,%0,-1\n\ |
210 | blt- 2f\n" | 210 | blt- 2f\n" |
@@ -253,7 +253,7 @@ static __inline__ long atomic64_add_return(long a, atomic64_t *v) | |||
253 | long t; | 253 | long t; |
254 | 254 | ||
255 | __asm__ __volatile__( | 255 | __asm__ __volatile__( |
256 | EIEIO_ON_SMP | 256 | LWSYNC_ON_SMP |
257 | "1: ldarx %0,0,%2 # atomic64_add_return\n\ | 257 | "1: ldarx %0,0,%2 # atomic64_add_return\n\ |
258 | add %0,%1,%0\n\ | 258 | add %0,%1,%0\n\ |
259 | stdcx. %0,0,%2 \n\ | 259 | stdcx. %0,0,%2 \n\ |
@@ -287,7 +287,7 @@ static __inline__ long atomic64_sub_return(long a, atomic64_t *v) | |||
287 | long t; | 287 | long t; |
288 | 288 | ||
289 | __asm__ __volatile__( | 289 | __asm__ __volatile__( |
290 | EIEIO_ON_SMP | 290 | LWSYNC_ON_SMP |
291 | "1: ldarx %0,0,%2 # atomic64_sub_return\n\ | 291 | "1: ldarx %0,0,%2 # atomic64_sub_return\n\ |
292 | subf %0,%1,%0\n\ | 292 | subf %0,%1,%0\n\ |
293 | stdcx. %0,0,%2 \n\ | 293 | stdcx. %0,0,%2 \n\ |
@@ -319,7 +319,7 @@ static __inline__ long atomic64_inc_return(atomic64_t *v) | |||
319 | long t; | 319 | long t; |
320 | 320 | ||
321 | __asm__ __volatile__( | 321 | __asm__ __volatile__( |
322 | EIEIO_ON_SMP | 322 | LWSYNC_ON_SMP |
323 | "1: ldarx %0,0,%1 # atomic64_inc_return\n\ | 323 | "1: ldarx %0,0,%1 # atomic64_inc_return\n\ |
324 | addic %0,%0,1\n\ | 324 | addic %0,%0,1\n\ |
325 | stdcx. %0,0,%1 \n\ | 325 | stdcx. %0,0,%1 \n\ |
@@ -361,7 +361,7 @@ static __inline__ long atomic64_dec_return(atomic64_t *v) | |||
361 | long t; | 361 | long t; |
362 | 362 | ||
363 | __asm__ __volatile__( | 363 | __asm__ __volatile__( |
364 | EIEIO_ON_SMP | 364 | LWSYNC_ON_SMP |
365 | "1: ldarx %0,0,%1 # atomic64_dec_return\n\ | 365 | "1: ldarx %0,0,%1 # atomic64_dec_return\n\ |
366 | addic %0,%0,-1\n\ | 366 | addic %0,%0,-1\n\ |
367 | stdcx. %0,0,%1\n\ | 367 | stdcx. %0,0,%1\n\ |
@@ -386,7 +386,7 @@ static __inline__ long atomic64_dec_if_positive(atomic64_t *v) | |||
386 | long t; | 386 | long t; |
387 | 387 | ||
388 | __asm__ __volatile__( | 388 | __asm__ __volatile__( |
389 | EIEIO_ON_SMP | 389 | LWSYNC_ON_SMP |
390 | "1: ldarx %0,0,%1 # atomic64_dec_if_positive\n\ | 390 | "1: ldarx %0,0,%1 # atomic64_dec_if_positive\n\ |
391 | addic. %0,%0,-1\n\ | 391 | addic. %0,%0,-1\n\ |
392 | blt- 2f\n\ | 392 | blt- 2f\n\ |
diff --git a/include/asm-powerpc/bitops.h b/include/asm-powerpc/bitops.h index 1996eaa8aeae..bf6941a810b8 100644 --- a/include/asm-powerpc/bitops.h +++ b/include/asm-powerpc/bitops.h | |||
@@ -112,7 +112,7 @@ static __inline__ int test_and_set_bit(unsigned long nr, | |||
112 | unsigned long *p = ((unsigned long *)addr) + BITOP_WORD(nr); | 112 | unsigned long *p = ((unsigned long *)addr) + BITOP_WORD(nr); |
113 | 113 | ||
114 | __asm__ __volatile__( | 114 | __asm__ __volatile__( |
115 | EIEIO_ON_SMP | 115 | LWSYNC_ON_SMP |
116 | "1:" PPC_LLARX "%0,0,%3 # test_and_set_bit\n" | 116 | "1:" PPC_LLARX "%0,0,%3 # test_and_set_bit\n" |
117 | "or %1,%0,%2 \n" | 117 | "or %1,%0,%2 \n" |
118 | PPC405_ERR77(0,%3) | 118 | PPC405_ERR77(0,%3) |
@@ -134,7 +134,7 @@ static __inline__ int test_and_clear_bit(unsigned long nr, | |||
134 | unsigned long *p = ((unsigned long *)addr) + BITOP_WORD(nr); | 134 | unsigned long *p = ((unsigned long *)addr) + BITOP_WORD(nr); |
135 | 135 | ||
136 | __asm__ __volatile__( | 136 | __asm__ __volatile__( |
137 | EIEIO_ON_SMP | 137 | LWSYNC_ON_SMP |
138 | "1:" PPC_LLARX "%0,0,%3 # test_and_clear_bit\n" | 138 | "1:" PPC_LLARX "%0,0,%3 # test_and_clear_bit\n" |
139 | "andc %1,%0,%2 \n" | 139 | "andc %1,%0,%2 \n" |
140 | PPC405_ERR77(0,%3) | 140 | PPC405_ERR77(0,%3) |
@@ -156,7 +156,7 @@ static __inline__ int test_and_change_bit(unsigned long nr, | |||
156 | unsigned long *p = ((unsigned long *)addr) + BITOP_WORD(nr); | 156 | unsigned long *p = ((unsigned long *)addr) + BITOP_WORD(nr); |
157 | 157 | ||
158 | __asm__ __volatile__( | 158 | __asm__ __volatile__( |
159 | EIEIO_ON_SMP | 159 | LWSYNC_ON_SMP |
160 | "1:" PPC_LLARX "%0,0,%3 # test_and_change_bit\n" | 160 | "1:" PPC_LLARX "%0,0,%3 # test_and_change_bit\n" |
161 | "xor %1,%0,%2 \n" | 161 | "xor %1,%0,%2 \n" |
162 | PPC405_ERR77(0,%3) | 162 | PPC405_ERR77(0,%3) |
diff --git a/include/asm-powerpc/cputable.h b/include/asm-powerpc/cputable.h index ef6ead34a773..64210549f56b 100644 --- a/include/asm-powerpc/cputable.h +++ b/include/asm-powerpc/cputable.h | |||
@@ -19,6 +19,7 @@ | |||
19 | #define PPC_FEATURE_POWER5 0x00040000 | 19 | #define PPC_FEATURE_POWER5 0x00040000 |
20 | #define PPC_FEATURE_POWER5_PLUS 0x00020000 | 20 | #define PPC_FEATURE_POWER5_PLUS 0x00020000 |
21 | #define PPC_FEATURE_CELL 0x00010000 | 21 | #define PPC_FEATURE_CELL 0x00010000 |
22 | #define PPC_FEATURE_BOOKE 0x00008000 | ||
22 | 23 | ||
23 | #ifdef __KERNEL__ | 24 | #ifdef __KERNEL__ |
24 | #ifndef __ASSEMBLY__ | 25 | #ifndef __ASSEMBLY__ |
@@ -31,11 +32,11 @@ struct cpu_spec; | |||
31 | typedef void (*cpu_setup_t)(unsigned long offset, struct cpu_spec* spec); | 32 | typedef void (*cpu_setup_t)(unsigned long offset, struct cpu_spec* spec); |
32 | 33 | ||
33 | enum powerpc_oprofile_type { | 34 | enum powerpc_oprofile_type { |
34 | INVALID = 0, | 35 | PPC_OPROFILE_INVALID = 0, |
35 | RS64 = 1, | 36 | PPC_OPROFILE_RS64 = 1, |
36 | POWER4 = 2, | 37 | PPC_OPROFILE_POWER4 = 2, |
37 | G4 = 3, | 38 | PPC_OPROFILE_G4 = 3, |
38 | BOOKE = 4, | 39 | PPC_OPROFILE_BOOKE = 4, |
39 | }; | 40 | }; |
40 | 41 | ||
41 | struct cpu_spec { | 42 | struct cpu_spec { |
@@ -64,6 +65,9 @@ struct cpu_spec { | |||
64 | 65 | ||
65 | /* Processor specific oprofile operations */ | 66 | /* Processor specific oprofile operations */ |
66 | enum powerpc_oprofile_type oprofile_type; | 67 | enum powerpc_oprofile_type oprofile_type; |
68 | |||
69 | /* Name of processor class, for the ELF AT_PLATFORM entry */ | ||
70 | char *platform; | ||
67 | }; | 71 | }; |
68 | 72 | ||
69 | extern struct cpu_spec *cur_cpu_spec; | 73 | extern struct cpu_spec *cur_cpu_spec; |
diff --git a/include/asm-powerpc/elf.h b/include/asm-powerpc/elf.h index 45f2af6f89c4..94d228f9c6ac 100644 --- a/include/asm-powerpc/elf.h +++ b/include/asm-powerpc/elf.h | |||
@@ -221,20 +221,18 @@ extern int dump_task_fpu(struct task_struct *, elf_fpregset_t *); | |||
221 | instruction set this cpu supports. This could be done in userspace, | 221 | instruction set this cpu supports. This could be done in userspace, |
222 | but it's not easy, and we've already done it here. */ | 222 | but it's not easy, and we've already done it here. */ |
223 | # define ELF_HWCAP (cur_cpu_spec->cpu_user_features) | 223 | # define ELF_HWCAP (cur_cpu_spec->cpu_user_features) |
224 | #ifdef __powerpc64__ | ||
225 | # define ELF_PLAT_INIT(_r, load_addr) do { \ | ||
226 | _r->gpr[2] = load_addr; \ | ||
227 | } while (0) | ||
228 | #endif /* __powerpc64__ */ | ||
229 | 224 | ||
230 | /* This yields a string that ld.so will use to load implementation | 225 | /* This yields a string that ld.so will use to load implementation |
231 | specific libraries for optimization. This is more specific in | 226 | specific libraries for optimization. This is more specific in |
232 | intent than poking at uname or /proc/cpuinfo. | 227 | intent than poking at uname or /proc/cpuinfo. */ |
233 | 228 | ||
234 | For the moment, we have only optimizations for the Intel generations, | 229 | #define ELF_PLATFORM (cur_cpu_spec->platform) |
235 | but that could change... */ | ||
236 | 230 | ||
237 | #define ELF_PLATFORM (NULL) | 231 | #ifdef __powerpc64__ |
232 | # define ELF_PLAT_INIT(_r, load_addr) do { \ | ||
233 | _r->gpr[2] = load_addr; \ | ||
234 | } while (0) | ||
235 | #endif /* __powerpc64__ */ | ||
238 | 236 | ||
239 | #ifdef __KERNEL__ | 237 | #ifdef __KERNEL__ |
240 | 238 | ||
diff --git a/include/asm-powerpc/futex.h b/include/asm-powerpc/futex.h index f0319d50b129..39e85f320a76 100644 --- a/include/asm-powerpc/futex.h +++ b/include/asm-powerpc/futex.h | |||
@@ -11,7 +11,7 @@ | |||
11 | 11 | ||
12 | #define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \ | 12 | #define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \ |
13 | __asm__ __volatile ( \ | 13 | __asm__ __volatile ( \ |
14 | SYNC_ON_SMP \ | 14 | LWSYNC_ON_SMP \ |
15 | "1: lwarx %0,0,%2\n" \ | 15 | "1: lwarx %0,0,%2\n" \ |
16 | insn \ | 16 | insn \ |
17 | PPC405_ERR77(0, %2) \ | 17 | PPC405_ERR77(0, %2) \ |
diff --git a/include/asm-powerpc/hvcall.h b/include/asm-powerpc/hvcall.h index da7af5a720e0..38ca9ad6110d 100644 --- a/include/asm-powerpc/hvcall.h +++ b/include/asm-powerpc/hvcall.h | |||
@@ -6,7 +6,10 @@ | |||
6 | 6 | ||
7 | #define H_Success 0 | 7 | #define H_Success 0 |
8 | #define H_Busy 1 /* Hardware busy -- retry later */ | 8 | #define H_Busy 1 /* Hardware busy -- retry later */ |
9 | #define H_Closed 2 /* Resource closed */ | ||
9 | #define H_Constrained 4 /* Resource request constrained to max allowed */ | 10 | #define H_Constrained 4 /* Resource request constrained to max allowed */ |
11 | #define H_InProgress 14 /* Kind of like busy */ | ||
12 | #define H_Continue 18 /* Returned from H_Join on success */ | ||
10 | #define H_LongBusyStartRange 9900 /* Start of long busy range */ | 13 | #define H_LongBusyStartRange 9900 /* Start of long busy range */ |
11 | #define H_LongBusyOrder1msec 9900 /* Long busy, hint that 1msec is a good time to retry */ | 14 | #define H_LongBusyOrder1msec 9900 /* Long busy, hint that 1msec is a good time to retry */ |
12 | #define H_LongBusyOrder10msec 9901 /* Long busy, hint that 10msec is a good time to retry */ | 15 | #define H_LongBusyOrder10msec 9901 /* Long busy, hint that 10msec is a good time to retry */ |
@@ -114,6 +117,8 @@ | |||
114 | #define H_REGISTER_VTERM 0x154 | 117 | #define H_REGISTER_VTERM 0x154 |
115 | #define H_FREE_VTERM 0x158 | 118 | #define H_FREE_VTERM 0x158 |
116 | #define H_POLL_PENDING 0x1D8 | 119 | #define H_POLL_PENDING 0x1D8 |
120 | #define H_JOIN 0x298 | ||
121 | #define H_ENABLE_CRQ 0x2B0 | ||
117 | 122 | ||
118 | #ifndef __ASSEMBLY__ | 123 | #ifndef __ASSEMBLY__ |
119 | 124 | ||
diff --git a/include/asm-powerpc/kexec.h b/include/asm-powerpc/kexec.h index fffdf690b840..640a6459f2f4 100644 --- a/include/asm-powerpc/kexec.h +++ b/include/asm-powerpc/kexec.h | |||
@@ -31,12 +31,80 @@ | |||
31 | #define KEXEC_ARCH KEXEC_ARCH_PPC | 31 | #define KEXEC_ARCH KEXEC_ARCH_PPC |
32 | #endif | 32 | #endif |
33 | 33 | ||
34 | #define HAVE_ARCH_COPY_OLDMEM_PAGE | ||
35 | |||
36 | #ifndef __ASSEMBLY__ | ||
37 | |||
38 | #ifdef CONFIG_KEXEC | 34 | #ifdef CONFIG_KEXEC |
39 | 35 | ||
36 | #ifdef __powerpc64__ | ||
37 | /* | ||
38 | * This function is responsible for capturing register states if coming | ||
39 | * via panic or invoking dump using sysrq-trigger. | ||
40 | */ | ||
41 | static inline void crash_setup_regs(struct pt_regs *newregs, | ||
42 | struct pt_regs *oldregs) | ||
43 | { | ||
44 | if (oldregs) | ||
45 | memcpy(newregs, oldregs, sizeof(*newregs)); | ||
46 | else { | ||
47 | /* FIXME Merge this with xmon_save_regs ?? */ | ||
48 | unsigned long tmp1, tmp2; | ||
49 | __asm__ __volatile__ ( | ||
50 | "std 0,0(%2)\n" | ||
51 | "std 1,8(%2)\n" | ||
52 | "std 2,16(%2)\n" | ||
53 | "std 3,24(%2)\n" | ||
54 | "std 4,32(%2)\n" | ||
55 | "std 5,40(%2)\n" | ||
56 | "std 6,48(%2)\n" | ||
57 | "std 7,56(%2)\n" | ||
58 | "std 8,64(%2)\n" | ||
59 | "std 9,72(%2)\n" | ||
60 | "std 10,80(%2)\n" | ||
61 | "std 11,88(%2)\n" | ||
62 | "std 12,96(%2)\n" | ||
63 | "std 13,104(%2)\n" | ||
64 | "std 14,112(%2)\n" | ||
65 | "std 15,120(%2)\n" | ||
66 | "std 16,128(%2)\n" | ||
67 | "std 17,136(%2)\n" | ||
68 | "std 18,144(%2)\n" | ||
69 | "std 19,152(%2)\n" | ||
70 | "std 20,160(%2)\n" | ||
71 | "std 21,168(%2)\n" | ||
72 | "std 22,176(%2)\n" | ||
73 | "std 23,184(%2)\n" | ||
74 | "std 24,192(%2)\n" | ||
75 | "std 25,200(%2)\n" | ||
76 | "std 26,208(%2)\n" | ||
77 | "std 27,216(%2)\n" | ||
78 | "std 28,224(%2)\n" | ||
79 | "std 29,232(%2)\n" | ||
80 | "std 30,240(%2)\n" | ||
81 | "std 31,248(%2)\n" | ||
82 | "mfmsr %0\n" | ||
83 | "std %0, 264(%2)\n" | ||
84 | "mfctr %0\n" | ||
85 | "std %0, 280(%2)\n" | ||
86 | "mflr %0\n" | ||
87 | "std %0, 288(%2)\n" | ||
88 | "bl 1f\n" | ||
89 | "1: mflr %1\n" | ||
90 | "std %1, 256(%2)\n" | ||
91 | "mtlr %0\n" | ||
92 | "mfxer %0\n" | ||
93 | "std %0, 296(%2)\n" | ||
94 | : "=&r" (tmp1), "=&r" (tmp2) | ||
95 | : "b" (newregs)); | ||
96 | } | ||
97 | } | ||
98 | #else | ||
99 | /* | ||
100 | * Provide a dummy definition to avoid build failures. Will remain | ||
101 | * empty till crash dump support is enabled. | ||
102 | */ | ||
103 | static inline void crash_setup_regs(struct pt_regs *newregs, | ||
104 | struct pt_regs *oldregs) { } | ||
105 | #endif /* !__powerpc64 __ */ | ||
106 | |||
107 | #ifndef __ASSEMBLY__ | ||
40 | #define MAX_NOTE_BYTES 1024 | 108 | #define MAX_NOTE_BYTES 1024 |
41 | 109 | ||
42 | #ifdef __powerpc64__ | 110 | #ifdef __powerpc64__ |
@@ -53,14 +121,7 @@ extern void default_machine_kexec(struct kimage *image); | |||
53 | extern int default_machine_kexec_prepare(struct kimage *image); | 121 | extern int default_machine_kexec_prepare(struct kimage *image); |
54 | extern void default_machine_crash_shutdown(struct pt_regs *regs); | 122 | extern void default_machine_crash_shutdown(struct pt_regs *regs); |
55 | 123 | ||
56 | #endif /* !CONFIG_KEXEC */ | ||
57 | |||
58 | /* | ||
59 | * Provide a dummy definition to avoid build failures. Will remain | ||
60 | * empty till crash dump support is enabled. | ||
61 | */ | ||
62 | static inline void crash_setup_regs(struct pt_regs *newregs, | ||
63 | struct pt_regs *oldregs) { } | ||
64 | #endif /* ! __ASSEMBLY__ */ | 124 | #endif /* ! __ASSEMBLY__ */ |
125 | #endif /* CONFIG_KEXEC */ | ||
65 | #endif /* __KERNEL__ */ | 126 | #endif /* __KERNEL__ */ |
66 | #endif /* _ASM_POWERPC_KEXEC_H */ | 127 | #endif /* _ASM_POWERPC_KEXEC_H */ |
diff --git a/include/asm-powerpc/lppaca.h b/include/asm-powerpc/lppaca.h index ff82ea7c4829..4dc514aabfe7 100644 --- a/include/asm-powerpc/lppaca.h +++ b/include/asm-powerpc/lppaca.h | |||
@@ -29,6 +29,8 @@ | |||
29 | //---------------------------------------------------------------------------- | 29 | //---------------------------------------------------------------------------- |
30 | #include <asm/types.h> | 30 | #include <asm/types.h> |
31 | 31 | ||
32 | /* The Hypervisor barfs if the lppaca crosses a page boundary. A 1k | ||
33 | * alignment is sufficient to prevent this */ | ||
32 | struct lppaca { | 34 | struct lppaca { |
33 | //============================================================================= | 35 | //============================================================================= |
34 | // CACHE_LINE_1 0x0000 - 0x007F Contains read-only data | 36 | // CACHE_LINE_1 0x0000 - 0x007F Contains read-only data |
@@ -127,7 +129,9 @@ struct lppaca { | |||
127 | // CACHE_LINE_4-5 0x0100 - 0x01FF Contains PMC interrupt data | 129 | // CACHE_LINE_4-5 0x0100 - 0x01FF Contains PMC interrupt data |
128 | //============================================================================= | 130 | //============================================================================= |
129 | u8 pmc_save_area[256]; // PMC interrupt Area x00-xFF | 131 | u8 pmc_save_area[256]; // PMC interrupt Area x00-xFF |
130 | }; | 132 | } __attribute__((__aligned__(0x400))); |
133 | |||
134 | extern struct lppaca lppaca[]; | ||
131 | 135 | ||
132 | #endif /* __KERNEL__ */ | 136 | #endif /* __KERNEL__ */ |
133 | #endif /* _ASM_POWERPC_LPPACA_H */ | 137 | #endif /* _ASM_POWERPC_LPPACA_H */ |
diff --git a/include/asm-powerpc/paca.h b/include/asm-powerpc/paca.h index a64b4d425dab..c9add8f1ad94 100644 --- a/include/asm-powerpc/paca.h +++ b/include/asm-powerpc/paca.h | |||
@@ -23,6 +23,7 @@ | |||
23 | 23 | ||
24 | register struct paca_struct *local_paca asm("r13"); | 24 | register struct paca_struct *local_paca asm("r13"); |
25 | #define get_paca() local_paca | 25 | #define get_paca() local_paca |
26 | #define get_lppaca() (get_paca()->lppaca_ptr) | ||
26 | 27 | ||
27 | struct task_struct; | 28 | struct task_struct; |
28 | 29 | ||
@@ -95,19 +96,6 @@ struct paca_struct { | |||
95 | u64 saved_r1; /* r1 save for RTAS calls */ | 96 | u64 saved_r1; /* r1 save for RTAS calls */ |
96 | u64 saved_msr; /* MSR saved here by enter_rtas */ | 97 | u64 saved_msr; /* MSR saved here by enter_rtas */ |
97 | u8 proc_enabled; /* irq soft-enable flag */ | 98 | u8 proc_enabled; /* irq soft-enable flag */ |
98 | |||
99 | /* | ||
100 | * iSeries structure which the hypervisor knows about - | ||
101 | * this structure should not cross a page boundary. | ||
102 | * The vpa_init/register_vpa call is now known to fail if the | ||
103 | * lppaca structure crosses a page boundary. | ||
104 | * The lppaca is also used on POWER5 pSeries boxes. | ||
105 | * The lppaca is 640 bytes long, and cannot readily change | ||
106 | * since the hypervisor knows its layout, so a 1kB | ||
107 | * alignment will suffice to ensure that it doesn't | ||
108 | * cross a page boundary. | ||
109 | */ | ||
110 | struct lppaca lppaca __attribute__((__aligned__(0x400))); | ||
111 | }; | 99 | }; |
112 | 100 | ||
113 | extern struct paca_struct paca[]; | 101 | extern struct paca_struct paca[]; |
diff --git a/include/asm-powerpc/ppc_asm.h b/include/asm-powerpc/ppc_asm.h index 0dc798d46ea4..ab8688d39024 100644 --- a/include/asm-powerpc/ppc_asm.h +++ b/include/asm-powerpc/ppc_asm.h | |||
@@ -156,52 +156,56 @@ n: | |||
156 | #endif | 156 | #endif |
157 | 157 | ||
158 | /* | 158 | /* |
159 | * LOADADDR( rn, name ) | 159 | * LOAD_REG_IMMEDIATE(rn, expr) |
160 | * loads the address of 'name' into 'rn' | 160 | * Loads the value of the constant expression 'expr' into register 'rn' |
161 | * using immediate instructions only. Use this when it's important not | ||
162 | * to reference other data (i.e. on ppc64 when the TOC pointer is not | ||
163 | * valid). | ||
161 | * | 164 | * |
162 | * LOADBASE( rn, name ) | 165 | * LOAD_REG_ADDR(rn, name) |
163 | * loads the address (possibly without the low 16 bits) of 'name' into 'rn' | 166 | * Loads the address of label 'name' into register 'rn'. Use this when |
164 | * suitable for base+disp addressing | 167 | * you don't particularly need immediate instructions only, but you need |
168 | * the whole address in one register (e.g. it's a structure address and | ||
169 | * you want to access various offsets within it). On ppc32 this is | ||
170 | * identical to LOAD_REG_IMMEDIATE. | ||
171 | * | ||
172 | * LOAD_REG_ADDRBASE(rn, name) | ||
173 | * ADDROFF(name) | ||
174 | * LOAD_REG_ADDRBASE loads part of the address of label 'name' into | ||
175 | * register 'rn'. ADDROFF(name) returns the remainder of the address as | ||
176 | * a constant expression. ADDROFF(name) is a signed expression < 16 bits | ||
177 | * in size, so is suitable for use directly as an offset in load and store | ||
178 | * instructions. Use this when loading/storing a single word or less as: | ||
179 | * LOAD_REG_ADDRBASE(rX, name) | ||
180 | * ld rY,ADDROFF(name)(rX) | ||
165 | */ | 181 | */ |
166 | #ifdef __powerpc64__ | 182 | #ifdef __powerpc64__ |
167 | #define LOADADDR(rn,name) \ | 183 | #define LOAD_REG_IMMEDIATE(reg,expr) \ |
168 | lis rn,name##@highest; \ | 184 | lis (reg),(expr)@highest; \ |
169 | ori rn,rn,name##@higher; \ | 185 | ori (reg),(reg),(expr)@higher; \ |
170 | rldicr rn,rn,32,31; \ | 186 | rldicr (reg),(reg),32,31; \ |
171 | oris rn,rn,name##@h; \ | 187 | oris (reg),(reg),(expr)@h; \ |
172 | ori rn,rn,name##@l | 188 | ori (reg),(reg),(expr)@l; |
173 | 189 | ||
174 | #define LOADBASE(rn,name) \ | 190 | #define LOAD_REG_ADDR(reg,name) \ |
175 | ld rn,name@got(r2) | 191 | ld (reg),name@got(r2) |
176 | 192 | ||
177 | #define OFF(name) 0 | 193 | #define LOAD_REG_ADDRBASE(reg,name) LOAD_REG_ADDR(reg,name) |
178 | 194 | #define ADDROFF(name) 0 | |
179 | #define SET_REG_TO_CONST(reg, value) \ | ||
180 | lis reg,(((value)>>48)&0xFFFF); \ | ||
181 | ori reg,reg,(((value)>>32)&0xFFFF); \ | ||
182 | rldicr reg,reg,32,31; \ | ||
183 | oris reg,reg,(((value)>>16)&0xFFFF); \ | ||
184 | ori reg,reg,((value)&0xFFFF); | ||
185 | |||
186 | #define SET_REG_TO_LABEL(reg, label) \ | ||
187 | lis reg,(label)@highest; \ | ||
188 | ori reg,reg,(label)@higher; \ | ||
189 | rldicr reg,reg,32,31; \ | ||
190 | oris reg,reg,(label)@h; \ | ||
191 | ori reg,reg,(label)@l; | ||
192 | 195 | ||
193 | /* offsets for stack frame layout */ | 196 | /* offsets for stack frame layout */ |
194 | #define LRSAVE 16 | 197 | #define LRSAVE 16 |
195 | 198 | ||
196 | #else /* 32-bit */ | 199 | #else /* 32-bit */ |
197 | #define LOADADDR(rn,name) \ | ||
198 | lis rn,name@ha; \ | ||
199 | addi rn,rn,name@l | ||
200 | 200 | ||
201 | #define LOADBASE(rn,name) \ | 201 | #define LOAD_REG_IMMEDIATE(reg,expr) \ |
202 | lis rn,name@ha | 202 | lis (reg),(expr)@ha; \ |
203 | addi (reg),(reg),(expr)@l; | ||
204 | |||
205 | #define LOAD_REG_ADDR(reg,name) LOAD_REG_IMMEDIATE(reg, name) | ||
203 | 206 | ||
204 | #define OFF(name) name@l | 207 | #define LOAD_REG_ADDRBASE(reg, name) lis (reg),name@ha |
208 | #define ADDROFF(name) name@l | ||
205 | 209 | ||
206 | /* offsets for stack frame layout */ | 210 | /* offsets for stack frame layout */ |
207 | #define LRSAVE 4 | 211 | #define LRSAVE 4 |
diff --git a/include/asm-powerpc/prom.h b/include/asm-powerpc/prom.h index 329e9bf62260..5b2bd4eefb01 100644 --- a/include/asm-powerpc/prom.h +++ b/include/asm-powerpc/prom.h | |||
@@ -87,6 +87,7 @@ struct device_node { | |||
87 | char *full_name; | 87 | char *full_name; |
88 | 88 | ||
89 | struct property *properties; | 89 | struct property *properties; |
90 | struct property *deadprops; /* removed properties */ | ||
90 | struct device_node *parent; | 91 | struct device_node *parent; |
91 | struct device_node *child; | 92 | struct device_node *child; |
92 | struct device_node *sibling; | 93 | struct device_node *sibling; |
@@ -135,6 +136,9 @@ extern struct device_node *of_find_all_nodes(struct device_node *prev); | |||
135 | extern struct device_node *of_get_parent(const struct device_node *node); | 136 | extern struct device_node *of_get_parent(const struct device_node *node); |
136 | extern struct device_node *of_get_next_child(const struct device_node *node, | 137 | extern struct device_node *of_get_next_child(const struct device_node *node, |
137 | struct device_node *prev); | 138 | struct device_node *prev); |
139 | extern struct property *of_find_property(struct device_node *np, | ||
140 | const char *name, | ||
141 | int *lenp); | ||
138 | extern struct device_node *of_node_get(struct device_node *node); | 142 | extern struct device_node *of_node_get(struct device_node *node); |
139 | extern void of_node_put(struct device_node *node); | 143 | extern void of_node_put(struct device_node *node); |
140 | 144 | ||
@@ -164,6 +168,10 @@ extern int prom_n_size_cells(struct device_node* np); | |||
164 | extern int prom_n_intr_cells(struct device_node* np); | 168 | extern int prom_n_intr_cells(struct device_node* np); |
165 | extern void prom_get_irq_senses(unsigned char *senses, int off, int max); | 169 | extern void prom_get_irq_senses(unsigned char *senses, int off, int max); |
166 | extern int prom_add_property(struct device_node* np, struct property* prop); | 170 | extern int prom_add_property(struct device_node* np, struct property* prop); |
171 | extern int prom_remove_property(struct device_node *np, struct property *prop); | ||
172 | extern int prom_update_property(struct device_node *np, | ||
173 | struct property *newprop, | ||
174 | struct property *oldprop); | ||
167 | 175 | ||
168 | #ifdef CONFIG_PPC32 | 176 | #ifdef CONFIG_PPC32 |
169 | /* | 177 | /* |
diff --git a/include/asm-powerpc/spinlock.h b/include/asm-powerpc/spinlock.h index 754900901cd8..895cb6d3a42a 100644 --- a/include/asm-powerpc/spinlock.h +++ b/include/asm-powerpc/spinlock.h | |||
@@ -46,7 +46,7 @@ static __inline__ unsigned long __spin_trylock(raw_spinlock_t *lock) | |||
46 | 46 | ||
47 | token = LOCK_TOKEN; | 47 | token = LOCK_TOKEN; |
48 | __asm__ __volatile__( | 48 | __asm__ __volatile__( |
49 | "1: lwarx %0,0,%2 # __spin_trylock\n\ | 49 | "1: lwarx %0,0,%2\n\ |
50 | cmpwi 0,%0,0\n\ | 50 | cmpwi 0,%0,0\n\ |
51 | bne- 2f\n\ | 51 | bne- 2f\n\ |
52 | stwcx. %1,0,%2\n\ | 52 | stwcx. %1,0,%2\n\ |
@@ -80,7 +80,7 @@ static int __inline__ __raw_spin_trylock(raw_spinlock_t *lock) | |||
80 | 80 | ||
81 | #if defined(CONFIG_PPC_SPLPAR) || defined(CONFIG_PPC_ISERIES) | 81 | #if defined(CONFIG_PPC_SPLPAR) || defined(CONFIG_PPC_ISERIES) |
82 | /* We only yield to the hypervisor if we are in shared processor mode */ | 82 | /* We only yield to the hypervisor if we are in shared processor mode */ |
83 | #define SHARED_PROCESSOR (get_paca()->lppaca.shared_proc) | 83 | #define SHARED_PROCESSOR (get_lppaca()->shared_proc) |
84 | extern void __spin_yield(raw_spinlock_t *lock); | 84 | extern void __spin_yield(raw_spinlock_t *lock); |
85 | extern void __rw_yield(raw_rwlock_t *lock); | 85 | extern void __rw_yield(raw_rwlock_t *lock); |
86 | #else /* SPLPAR || ISERIES */ | 86 | #else /* SPLPAR || ISERIES */ |
@@ -124,8 +124,8 @@ static void __inline__ __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long | |||
124 | 124 | ||
125 | static __inline__ void __raw_spin_unlock(raw_spinlock_t *lock) | 125 | static __inline__ void __raw_spin_unlock(raw_spinlock_t *lock) |
126 | { | 126 | { |
127 | __asm__ __volatile__(SYNC_ON_SMP" # __raw_spin_unlock" | 127 | __asm__ __volatile__("# __raw_spin_unlock\n\t" |
128 | : : :"memory"); | 128 | LWSYNC_ON_SMP: : :"memory"); |
129 | lock->slock = 0; | 129 | lock->slock = 0; |
130 | } | 130 | } |
131 | 131 | ||
@@ -167,7 +167,7 @@ static long __inline__ __read_trylock(raw_rwlock_t *rw) | |||
167 | long tmp; | 167 | long tmp; |
168 | 168 | ||
169 | __asm__ __volatile__( | 169 | __asm__ __volatile__( |
170 | "1: lwarx %0,0,%1 # read_trylock\n" | 170 | "1: lwarx %0,0,%1\n" |
171 | __DO_SIGN_EXTEND | 171 | __DO_SIGN_EXTEND |
172 | " addic. %0,%0,1\n\ | 172 | " addic. %0,%0,1\n\ |
173 | ble- 2f\n" | 173 | ble- 2f\n" |
@@ -192,7 +192,7 @@ static __inline__ long __write_trylock(raw_rwlock_t *rw) | |||
192 | 192 | ||
193 | token = WRLOCK_TOKEN; | 193 | token = WRLOCK_TOKEN; |
194 | __asm__ __volatile__( | 194 | __asm__ __volatile__( |
195 | "1: lwarx %0,0,%2 # write_trylock\n\ | 195 | "1: lwarx %0,0,%2\n\ |
196 | cmpwi 0,%0,0\n\ | 196 | cmpwi 0,%0,0\n\ |
197 | bne- 2f\n" | 197 | bne- 2f\n" |
198 | PPC405_ERR77(0,%1) | 198 | PPC405_ERR77(0,%1) |
@@ -249,8 +249,9 @@ static void __inline__ __raw_read_unlock(raw_rwlock_t *rw) | |||
249 | long tmp; | 249 | long tmp; |
250 | 250 | ||
251 | __asm__ __volatile__( | 251 | __asm__ __volatile__( |
252 | "eieio # read_unlock\n\ | 252 | "# read_unlock\n\t" |
253 | 1: lwarx %0,0,%1\n\ | 253 | LWSYNC_ON_SMP |
254 | "1: lwarx %0,0,%1\n\ | ||
254 | addic %0,%0,-1\n" | 255 | addic %0,%0,-1\n" |
255 | PPC405_ERR77(0,%1) | 256 | PPC405_ERR77(0,%1) |
256 | " stwcx. %0,0,%1\n\ | 257 | " stwcx. %0,0,%1\n\ |
@@ -262,8 +263,8 @@ static void __inline__ __raw_read_unlock(raw_rwlock_t *rw) | |||
262 | 263 | ||
263 | static __inline__ void __raw_write_unlock(raw_rwlock_t *rw) | 264 | static __inline__ void __raw_write_unlock(raw_rwlock_t *rw) |
264 | { | 265 | { |
265 | __asm__ __volatile__(SYNC_ON_SMP" # write_unlock" | 266 | __asm__ __volatile__("# write_unlock\n\t" |
266 | : : :"memory"); | 267 | LWSYNC_ON_SMP: : :"memory"); |
267 | rw->lock = 0; | 268 | rw->lock = 0; |
268 | } | 269 | } |
269 | 270 | ||
diff --git a/include/asm-powerpc/synch.h b/include/asm-powerpc/synch.h index 794870ab8fd3..c90d9d9aae72 100644 --- a/include/asm-powerpc/synch.h +++ b/include/asm-powerpc/synch.h | |||
@@ -2,6 +2,8 @@ | |||
2 | #define _ASM_POWERPC_SYNCH_H | 2 | #define _ASM_POWERPC_SYNCH_H |
3 | #ifdef __KERNEL__ | 3 | #ifdef __KERNEL__ |
4 | 4 | ||
5 | #include <linux/stringify.h> | ||
6 | |||
5 | #ifdef __powerpc64__ | 7 | #ifdef __powerpc64__ |
6 | #define __SUBARCH_HAS_LWSYNC | 8 | #define __SUBARCH_HAS_LWSYNC |
7 | #endif | 9 | #endif |
@@ -12,20 +14,12 @@ | |||
12 | # define LWSYNC sync | 14 | # define LWSYNC sync |
13 | #endif | 15 | #endif |
14 | 16 | ||
15 | |||
16 | /* | ||
17 | * Arguably the bitops and *xchg operations don't imply any memory barrier | ||
18 | * or SMP ordering, but in fact a lot of drivers expect them to imply | ||
19 | * both, since they do on x86 cpus. | ||
20 | */ | ||
21 | #ifdef CONFIG_SMP | 17 | #ifdef CONFIG_SMP |
22 | #define EIEIO_ON_SMP "eieio\n" | ||
23 | #define ISYNC_ON_SMP "\n\tisync" | 18 | #define ISYNC_ON_SMP "\n\tisync" |
24 | #define SYNC_ON_SMP __stringify(LWSYNC) "\n" | 19 | #define LWSYNC_ON_SMP __stringify(LWSYNC) "\n" |
25 | #else | 20 | #else |
26 | #define EIEIO_ON_SMP | ||
27 | #define ISYNC_ON_SMP | 21 | #define ISYNC_ON_SMP |
28 | #define SYNC_ON_SMP | 22 | #define LWSYNC_ON_SMP |
29 | #endif | 23 | #endif |
30 | 24 | ||
31 | static inline void eieio(void) | 25 | static inline void eieio(void) |
@@ -38,14 +32,5 @@ static inline void isync(void) | |||
38 | __asm__ __volatile__ ("isync" : : : "memory"); | 32 | __asm__ __volatile__ ("isync" : : : "memory"); |
39 | } | 33 | } |
40 | 34 | ||
41 | #ifdef CONFIG_SMP | ||
42 | #define eieio_on_smp() eieio() | ||
43 | #define isync_on_smp() isync() | ||
44 | #else | ||
45 | #define eieio_on_smp() __asm__ __volatile__("": : :"memory") | ||
46 | #define isync_on_smp() __asm__ __volatile__("": : :"memory") | ||
47 | #endif | ||
48 | |||
49 | #endif /* __KERNEL__ */ | 35 | #endif /* __KERNEL__ */ |
50 | #endif /* _ASM_POWERPC_SYNCH_H */ | 36 | #endif /* _ASM_POWERPC_SYNCH_H */ |
51 | |||
diff --git a/include/asm-powerpc/system.h b/include/asm-powerpc/system.h index 9b822afa7d0e..d9bf53653b10 100644 --- a/include/asm-powerpc/system.h +++ b/include/asm-powerpc/system.h | |||
@@ -212,7 +212,7 @@ __xchg_u32(volatile void *p, unsigned long val) | |||
212 | unsigned long prev; | 212 | unsigned long prev; |
213 | 213 | ||
214 | __asm__ __volatile__( | 214 | __asm__ __volatile__( |
215 | EIEIO_ON_SMP | 215 | LWSYNC_ON_SMP |
216 | "1: lwarx %0,0,%2 \n" | 216 | "1: lwarx %0,0,%2 \n" |
217 | PPC405_ERR77(0,%2) | 217 | PPC405_ERR77(0,%2) |
218 | " stwcx. %3,0,%2 \n\ | 218 | " stwcx. %3,0,%2 \n\ |
@@ -232,7 +232,7 @@ __xchg_u64(volatile void *p, unsigned long val) | |||
232 | unsigned long prev; | 232 | unsigned long prev; |
233 | 233 | ||
234 | __asm__ __volatile__( | 234 | __asm__ __volatile__( |
235 | EIEIO_ON_SMP | 235 | LWSYNC_ON_SMP |
236 | "1: ldarx %0,0,%2 \n" | 236 | "1: ldarx %0,0,%2 \n" |
237 | PPC405_ERR77(0,%2) | 237 | PPC405_ERR77(0,%2) |
238 | " stdcx. %3,0,%2 \n\ | 238 | " stdcx. %3,0,%2 \n\ |
@@ -287,7 +287,7 @@ __cmpxchg_u32(volatile unsigned int *p, unsigned long old, unsigned long new) | |||
287 | unsigned int prev; | 287 | unsigned int prev; |
288 | 288 | ||
289 | __asm__ __volatile__ ( | 289 | __asm__ __volatile__ ( |
290 | EIEIO_ON_SMP | 290 | LWSYNC_ON_SMP |
291 | "1: lwarx %0,0,%2 # __cmpxchg_u32\n\ | 291 | "1: lwarx %0,0,%2 # __cmpxchg_u32\n\ |
292 | cmpw 0,%0,%3\n\ | 292 | cmpw 0,%0,%3\n\ |
293 | bne- 2f\n" | 293 | bne- 2f\n" |
@@ -311,7 +311,7 @@ __cmpxchg_u64(volatile unsigned long *p, unsigned long old, unsigned long new) | |||
311 | unsigned long prev; | 311 | unsigned long prev; |
312 | 312 | ||
313 | __asm__ __volatile__ ( | 313 | __asm__ __volatile__ ( |
314 | EIEIO_ON_SMP | 314 | LWSYNC_ON_SMP |
315 | "1: ldarx %0,0,%2 # __cmpxchg_u64\n\ | 315 | "1: ldarx %0,0,%2 # __cmpxchg_u64\n\ |
316 | cmpd 0,%0,%3\n\ | 316 | cmpd 0,%0,%3\n\ |
317 | bne- 2f\n\ | 317 | bne- 2f\n\ |
diff --git a/include/asm-powerpc/time.h b/include/asm-powerpc/time.h index d9b86a17271b..baddc9ab57ad 100644 --- a/include/asm-powerpc/time.h +++ b/include/asm-powerpc/time.h | |||
@@ -175,11 +175,10 @@ static inline void set_dec(int val) | |||
175 | set_dec_cpu6(val); | 175 | set_dec_cpu6(val); |
176 | #else | 176 | #else |
177 | #ifdef CONFIG_PPC_ISERIES | 177 | #ifdef CONFIG_PPC_ISERIES |
178 | struct paca_struct *lpaca = get_paca(); | ||
179 | int cur_dec; | 178 | int cur_dec; |
180 | 179 | ||
181 | if (lpaca->lppaca.shared_proc) { | 180 | if (get_lppaca()->shared_proc) { |
182 | lpaca->lppaca.virtual_decr = val; | 181 | get_lppaca()->virtual_decr = val; |
183 | cur_dec = get_dec(); | 182 | cur_dec = get_dec(); |
184 | if (cur_dec > val) | 183 | if (cur_dec > val) |
185 | HvCall_setVirtualDecr(); | 184 | HvCall_setVirtualDecr(); |
diff --git a/include/asm-ppc/prom.h b/include/asm-ppc/prom.h index eb317a0806e4..6d431d6fb022 100644 --- a/include/asm-ppc/prom.h +++ b/include/asm-ppc/prom.h | |||
@@ -167,6 +167,14 @@ extern int of_address_to_resource(struct device_node *dev, int index, | |||
167 | extern int of_pci_address_to_resource(struct device_node *dev, int bar, | 167 | extern int of_pci_address_to_resource(struct device_node *dev, int bar, |
168 | struct resource *r); | 168 | struct resource *r); |
169 | 169 | ||
170 | #ifndef CONFIG_PPC_OF | ||
171 | /* | ||
172 | * Fallback definitions for builds where we don't have prom.c included. | ||
173 | */ | ||
174 | #define machine_is_compatible(x) 0 | ||
175 | #define of_find_compatible_node(f, t, c) NULL | ||
176 | #define get_property(p, n, l) NULL | ||
177 | #endif | ||
170 | 178 | ||
171 | #endif /* _PPC_PROM_H */ | 179 | #endif /* _PPC_PROM_H */ |
172 | #endif /* __KERNEL__ */ | 180 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-s390/s390_rdev.h b/include/asm-s390/s390_rdev.h index 3ad78f2b9c48..6fa20442a48c 100644 --- a/include/asm-s390/s390_rdev.h +++ b/include/asm-s390/s390_rdev.h | |||
@@ -2,7 +2,7 @@ | |||
2 | * include/asm-s390/ccwdev.h | 2 | * include/asm-s390/ccwdev.h |
3 | * | 3 | * |
4 | * Copyright (C) 2002,2005 IBM Deutschland Entwicklung GmbH, IBM Corporation | 4 | * Copyright (C) 2002,2005 IBM Deutschland Entwicklung GmbH, IBM Corporation |
5 | * Author(s): Cornelia Huck <cohuck@de.ibm.com> | 5 | * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com> |
6 | * Carsten Otte <cotte@de.ibm.com> | 6 | * Carsten Otte <cotte@de.ibm.com> |
7 | * | 7 | * |
8 | * Interface for s390 root device | 8 | * Interface for s390 root device |
diff --git a/include/asm-s390/sigcontext.h b/include/asm-s390/sigcontext.h index 803545351dd8..aeb6e0b13329 100644 --- a/include/asm-s390/sigcontext.h +++ b/include/asm-s390/sigcontext.h | |||
@@ -8,6 +8,8 @@ | |||
8 | #ifndef _ASM_S390_SIGCONTEXT_H | 8 | #ifndef _ASM_S390_SIGCONTEXT_H |
9 | #define _ASM_S390_SIGCONTEXT_H | 9 | #define _ASM_S390_SIGCONTEXT_H |
10 | 10 | ||
11 | #include <linux/compiler.h> | ||
12 | |||
11 | #define __NUM_GPRS 16 | 13 | #define __NUM_GPRS 16 |
12 | #define __NUM_FPRS 16 | 14 | #define __NUM_FPRS 16 |
13 | #define __NUM_ACRS 16 | 15 | #define __NUM_ACRS 16 |
diff --git a/include/asm-s390/system.h b/include/asm-s390/system.h index c7c3a9ad593f..b2e65e8bf812 100644 --- a/include/asm-s390/system.h +++ b/include/asm-s390/system.h | |||
@@ -115,13 +115,14 @@ static inline void sched_cacheflush(void) | |||
115 | } | 115 | } |
116 | 116 | ||
117 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | 117 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING |
118 | extern void account_user_vtime(struct task_struct *); | 118 | extern void account_vtime(struct task_struct *); |
119 | extern void account_tick_vtime(struct task_struct *); | ||
119 | extern void account_system_vtime(struct task_struct *); | 120 | extern void account_system_vtime(struct task_struct *); |
120 | #endif | 121 | #endif |
121 | 122 | ||
122 | #define finish_arch_switch(prev) do { \ | 123 | #define finish_arch_switch(prev) do { \ |
123 | set_fs(current->thread.mm_segment); \ | 124 | set_fs(current->thread.mm_segment); \ |
124 | account_system_vtime(prev); \ | 125 | account_vtime(prev); \ |
125 | } while (0) | 126 | } while (0) |
126 | 127 | ||
127 | #define nop() __asm__ __volatile__ ("nop") | 128 | #define nop() __asm__ __volatile__ ("nop") |
diff --git a/include/asm-sh/bus-sh.h b/include/asm-sh/bus-sh.h index 83c5d2fd057f..e42d63b65cb5 100644 --- a/include/asm-sh/bus-sh.h +++ b/include/asm-sh/bus-sh.h | |||
@@ -21,6 +21,7 @@ struct sh_dev { | |||
21 | void *mapbase; | 21 | void *mapbase; |
22 | unsigned int irq[6]; | 22 | unsigned int irq[6]; |
23 | u64 *dma_mask; | 23 | u64 *dma_mask; |
24 | u64 coherent_dma_mask; | ||
24 | }; | 25 | }; |
25 | 26 | ||
26 | #define to_sh_dev(d) container_of((d), struct sh_dev, dev) | 27 | #define to_sh_dev(d) container_of((d), struct sh_dev, dev) |
diff --git a/include/asm-sh/clock.h b/include/asm-sh/clock.h new file mode 100644 index 000000000000..fdfb75b30f0d --- /dev/null +++ b/include/asm-sh/clock.h | |||
@@ -0,0 +1,61 @@ | |||
1 | #ifndef __ASM_SH_CLOCK_H | ||
2 | #define __ASM_SH_CLOCK_H | ||
3 | |||
4 | #include <linux/kref.h> | ||
5 | #include <linux/list.h> | ||
6 | #include <linux/seq_file.h> | ||
7 | |||
8 | struct clk; | ||
9 | |||
10 | struct clk_ops { | ||
11 | void (*init)(struct clk *clk); | ||
12 | void (*enable)(struct clk *clk); | ||
13 | void (*disable)(struct clk *clk); | ||
14 | void (*recalc)(struct clk *clk); | ||
15 | int (*set_rate)(struct clk *clk, unsigned long rate); | ||
16 | }; | ||
17 | |||
18 | struct clk { | ||
19 | struct list_head node; | ||
20 | const char *name; | ||
21 | |||
22 | struct module *owner; | ||
23 | |||
24 | struct clk *parent; | ||
25 | struct clk_ops *ops; | ||
26 | |||
27 | struct kref kref; | ||
28 | |||
29 | unsigned long rate; | ||
30 | unsigned long flags; | ||
31 | }; | ||
32 | |||
33 | #define CLK_ALWAYS_ENABLED (1 << 0) | ||
34 | #define CLK_RATE_PROPAGATES (1 << 1) | ||
35 | |||
36 | /* Should be defined by processor-specific code */ | ||
37 | void arch_init_clk_ops(struct clk_ops **, int type); | ||
38 | |||
39 | /* arch/sh/kernel/cpu/clock.c */ | ||
40 | int clk_init(void); | ||
41 | |||
42 | int __clk_enable(struct clk *); | ||
43 | int clk_enable(struct clk *); | ||
44 | |||
45 | void __clk_disable(struct clk *); | ||
46 | void clk_disable(struct clk *); | ||
47 | |||
48 | int clk_set_rate(struct clk *, unsigned long rate); | ||
49 | unsigned long clk_get_rate(struct clk *); | ||
50 | void clk_recalc_rate(struct clk *); | ||
51 | |||
52 | struct clk *clk_get(const char *id); | ||
53 | void clk_put(struct clk *); | ||
54 | |||
55 | int clk_register(struct clk *); | ||
56 | void clk_unregister(struct clk *); | ||
57 | |||
58 | int show_clocks(struct seq_file *m); | ||
59 | |||
60 | #endif /* __ASM_SH_CLOCK_H */ | ||
61 | |||
diff --git a/include/asm-sh/cpu-sh3/dma.h b/include/asm-sh/cpu-sh3/dma.h index b972e715f9ee..954801b46022 100644 --- a/include/asm-sh/cpu-sh3/dma.h +++ b/include/asm-sh/cpu-sh3/dma.h | |||
@@ -3,5 +3,34 @@ | |||
3 | 3 | ||
4 | #define SH_DMAC_BASE 0xa4000020 | 4 | #define SH_DMAC_BASE 0xa4000020 |
5 | 5 | ||
6 | #endif /* __ASM_CPU_SH3_DMA_H */ | 6 | /* Definitions for the SuperH DMAC */ |
7 | #define TM_BURST 0x00000020 | ||
8 | #define TS_8 0x00000000 | ||
9 | #define TS_16 0x00000008 | ||
10 | #define TS_32 0x00000010 | ||
11 | #define TS_128 0x00000018 | ||
12 | |||
13 | #define CHCR_TS_MASK 0x18 | ||
14 | #define CHCR_TS_SHIFT 3 | ||
15 | |||
16 | #define DMAOR_INIT DMAOR_DME | ||
7 | 17 | ||
18 | /* | ||
19 | * The SuperH DMAC supports a number of transmit sizes, we list them here, | ||
20 | * with their respective values as they appear in the CHCR registers. | ||
21 | */ | ||
22 | enum { | ||
23 | XMIT_SZ_8BIT, | ||
24 | XMIT_SZ_16BIT, | ||
25 | XMIT_SZ_32BIT, | ||
26 | XMIT_SZ_128BIT, | ||
27 | }; | ||
28 | |||
29 | static unsigned int ts_shift[] __attribute__ ((used)) = { | ||
30 | [XMIT_SZ_8BIT] = 0, | ||
31 | [XMIT_SZ_16BIT] = 1, | ||
32 | [XMIT_SZ_32BIT] = 2, | ||
33 | [XMIT_SZ_128BIT] = 4, | ||
34 | }; | ||
35 | |||
36 | #endif /* __ASM_CPU_SH3_DMA_H */ | ||
diff --git a/include/asm-sh/cpu-sh4/dma.h b/include/asm-sh/cpu-sh4/dma.h index e2b91adf821a..0dfe61f14802 100644 --- a/include/asm-sh/cpu-sh4/dma.h +++ b/include/asm-sh/cpu-sh4/dma.h | |||
@@ -1,17 +1,49 @@ | |||
1 | #ifndef __ASM_CPU_SH4_DMA_H | 1 | #ifndef __ASM_CPU_SH4_DMA_H |
2 | #define __ASM_CPU_SH4_DMA_H | 2 | #define __ASM_CPU_SH4_DMA_H |
3 | 3 | ||
4 | #ifdef CONFIG_CPU_SH4A | ||
5 | #define SH_DMAC_BASE 0xfc808020 | ||
6 | #else | ||
4 | #define SH_DMAC_BASE 0xffa00000 | 7 | #define SH_DMAC_BASE 0xffa00000 |
8 | #endif | ||
5 | 9 | ||
6 | #define SAR ((unsigned long[]){SH_DMAC_BASE + 0x00, SH_DMAC_BASE + 0x10, \ | 10 | /* Definitions for the SuperH DMAC */ |
7 | SH_DMAC_BASE + 0x20, SH_DMAC_BASE + 0x30}) | 11 | #define TM_BURST 0x0000080 |
8 | #define DAR ((unsigned long[]){SH_DMAC_BASE + 0x04, SH_DMAC_BASE + 0x14, \ | 12 | #define TS_8 0x00000010 |
9 | SH_DMAC_BASE + 0x24, SH_DMAC_BASE + 0x34}) | 13 | #define TS_16 0x00000020 |
10 | #define DMATCR ((unsigned long[]){SH_DMAC_BASE + 0x08, SH_DMAC_BASE + 0x18, \ | 14 | #define TS_32 0x00000030 |
11 | SH_DMAC_BASE + 0x28, SH_DMAC_BASE + 0x38}) | 15 | #define TS_64 0x00000000 |
12 | #define CHCR ((unsigned long[]){SH_DMAC_BASE + 0x0c, SH_DMAC_BASE + 0x1c, \ | ||
13 | SH_DMAC_BASE + 0x2c, SH_DMAC_BASE + 0x3c}) | ||
14 | #define DMAOR (SH_DMAC_BASE + 0x40) | ||
15 | 16 | ||
16 | #endif /* __ASM_CPU_SH4_DMA_H */ | 17 | #define CHCR_TS_MASK 0x30 |
18 | #define CHCR_TS_SHIFT 4 | ||
19 | |||
20 | #define DMAOR_COD 0x00000008 | ||
21 | |||
22 | #define DMAOR_INIT ( 0x8000 | DMAOR_DME ) | ||
17 | 23 | ||
24 | /* | ||
25 | * The SuperH DMAC supports a number of transmit sizes, we list them here, | ||
26 | * with their respective values as they appear in the CHCR registers. | ||
27 | * | ||
28 | * Defaults to a 64-bit transfer size. | ||
29 | */ | ||
30 | enum { | ||
31 | XMIT_SZ_64BIT, | ||
32 | XMIT_SZ_8BIT, | ||
33 | XMIT_SZ_16BIT, | ||
34 | XMIT_SZ_32BIT, | ||
35 | XMIT_SZ_256BIT, | ||
36 | }; | ||
37 | |||
38 | /* | ||
39 | * The DMA count is defined as the number of bytes to transfer. | ||
40 | */ | ||
41 | static unsigned int ts_shift[] __attribute__ ((used)) = { | ||
42 | [XMIT_SZ_64BIT] = 3, | ||
43 | [XMIT_SZ_8BIT] = 0, | ||
44 | [XMIT_SZ_16BIT] = 1, | ||
45 | [XMIT_SZ_32BIT] = 2, | ||
46 | [XMIT_SZ_256BIT] = 5, | ||
47 | }; | ||
48 | |||
49 | #endif /* __ASM_CPU_SH4_DMA_H */ | ||
diff --git a/include/asm-sh/cpu-sh4/freq.h b/include/asm-sh/cpu-sh4/freq.h index 201d94fd214f..ef2b9b1ae41f 100644 --- a/include/asm-sh/cpu-sh4/freq.h +++ b/include/asm-sh/cpu-sh4/freq.h | |||
@@ -12,6 +12,8 @@ | |||
12 | 12 | ||
13 | #if defined(CONFIG_CPU_SUBTYPE_SH73180) | 13 | #if defined(CONFIG_CPU_SUBTYPE_SH73180) |
14 | #define FRQCR 0xa4150000 | 14 | #define FRQCR 0xa4150000 |
15 | #elif defined(CONFIG_CPU_SUBTYPE_SH7780) | ||
16 | #define FRQCR 0xffc80000 | ||
15 | #else | 17 | #else |
16 | #define FRQCR 0xffc00000 | 18 | #define FRQCR 0xffc00000 |
17 | #endif | 19 | #endif |
diff --git a/include/asm-sh/dma-mapping.h b/include/asm-sh/dma-mapping.h index d3fa5c2b889d..48f1f42c5d14 100644 --- a/include/asm-sh/dma-mapping.h +++ b/include/asm-sh/dma-mapping.h | |||
@@ -4,6 +4,7 @@ | |||
4 | #include <linux/config.h> | 4 | #include <linux/config.h> |
5 | #include <linux/mm.h> | 5 | #include <linux/mm.h> |
6 | #include <asm/scatterlist.h> | 6 | #include <asm/scatterlist.h> |
7 | #include <asm/cacheflush.h> | ||
7 | #include <asm/io.h> | 8 | #include <asm/io.h> |
8 | 9 | ||
9 | extern struct bus_type pci_bus_type; | 10 | extern struct bus_type pci_bus_type; |
@@ -141,24 +142,24 @@ static inline void dma_sync_sg(struct device *dev, struct scatterlist *sg, | |||
141 | } | 142 | } |
142 | } | 143 | } |
143 | 144 | ||
144 | static inline void dma_sync_single_for_cpu(struct device *dev, | 145 | static void dma_sync_single_for_cpu(struct device *dev, |
145 | dma_addr_t dma_handle, size_t size, | 146 | dma_addr_t dma_handle, size_t size, |
146 | enum dma_data_direction dir) | 147 | enum dma_data_direction dir) |
147 | __attribute__ ((alias("dma_sync_single"))); | 148 | __attribute__ ((alias("dma_sync_single"))); |
148 | 149 | ||
149 | static inline void dma_sync_single_for_device(struct device *dev, | 150 | static void dma_sync_single_for_device(struct device *dev, |
150 | dma_addr_t dma_handle, size_t size, | 151 | dma_addr_t dma_handle, size_t size, |
151 | enum dma_data_direction dir) | 152 | enum dma_data_direction dir) |
152 | __attribute__ ((alias("dma_sync_single"))); | 153 | __attribute__ ((alias("dma_sync_single"))); |
153 | 154 | ||
154 | static inline void dma_sync_sg_for_cpu(struct device *dev, | 155 | static void dma_sync_sg_for_cpu(struct device *dev, |
155 | struct scatterlist *sg, int nelems, | 156 | struct scatterlist *sg, int nelems, |
156 | enum dma_data_direction dir) | 157 | enum dma_data_direction dir) |
157 | __attribute__ ((alias("dma_sync_sg"))); | 158 | __attribute__ ((alias("dma_sync_sg"))); |
158 | 159 | ||
159 | static inline void dma_sync_sg_for_device(struct device *dev, | 160 | static void dma_sync_sg_for_device(struct device *dev, |
160 | struct scatterlist *sg, int nelems, | 161 | struct scatterlist *sg, int nelems, |
161 | enum dma_data_direction dir) | 162 | enum dma_data_direction dir) |
162 | __attribute__ ((alias("dma_sync_sg"))); | 163 | __attribute__ ((alias("dma_sync_sg"))); |
163 | 164 | ||
164 | static inline int dma_get_cache_alignment(void) | 165 | static inline int dma_get_cache_alignment(void) |
diff --git a/include/asm-sh/dma.h b/include/asm-sh/dma.h index 8e9436093ca8..a118a0d43053 100644 --- a/include/asm-sh/dma.h +++ b/include/asm-sh/dma.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/spinlock.h> | 15 | #include <linux/spinlock.h> |
16 | #include <linux/wait.h> | 16 | #include <linux/wait.h> |
17 | #include <linux/sysdev.h> | 17 | #include <linux/sysdev.h> |
18 | #include <linux/device.h> | ||
18 | #include <asm/cpu/dma.h> | 19 | #include <asm/cpu/dma.h> |
19 | #include <asm/semaphore.h> | 20 | #include <asm/semaphore.h> |
20 | 21 | ||
@@ -54,8 +55,8 @@ enum { | |||
54 | * DMA channel capabilities / flags | 55 | * DMA channel capabilities / flags |
55 | */ | 56 | */ |
56 | enum { | 57 | enum { |
57 | DMA_CONFIGURED = 0x00, | ||
58 | DMA_TEI_CAPABLE = 0x01, | 58 | DMA_TEI_CAPABLE = 0x01, |
59 | DMA_CONFIGURED = 0x02, | ||
59 | }; | 60 | }; |
60 | 61 | ||
61 | extern spinlock_t dma_spin_lock; | 62 | extern spinlock_t dma_spin_lock; |
@@ -74,7 +75,8 @@ struct dma_ops { | |||
74 | struct dma_channel { | 75 | struct dma_channel { |
75 | char dev_id[16]; | 76 | char dev_id[16]; |
76 | 77 | ||
77 | unsigned int chan; | 78 | unsigned int chan; /* Physical channel number */ |
79 | unsigned int vchan; /* Virtual channel number */ | ||
78 | unsigned int mode; | 80 | unsigned int mode; |
79 | unsigned int count; | 81 | unsigned int count; |
80 | 82 | ||
@@ -91,6 +93,8 @@ struct dma_channel { | |||
91 | }; | 93 | }; |
92 | 94 | ||
93 | struct dma_info { | 95 | struct dma_info { |
96 | struct platform_device *pdev; | ||
97 | |||
94 | const char *name; | 98 | const char *name; |
95 | unsigned int nr_channels; | 99 | unsigned int nr_channels; |
96 | unsigned long flags; | 100 | unsigned long flags; |
@@ -130,7 +134,11 @@ extern void unregister_dmac(struct dma_info *info); | |||
130 | 134 | ||
131 | #ifdef CONFIG_SYSFS | 135 | #ifdef CONFIG_SYSFS |
132 | /* arch/sh/drivers/dma/dma-sysfs.c */ | 136 | /* arch/sh/drivers/dma/dma-sysfs.c */ |
133 | extern int dma_create_sysfs_files(struct dma_channel *); | 137 | extern int dma_create_sysfs_files(struct dma_channel *, struct dma_info *); |
138 | extern void dma_remove_sysfs_files(struct dma_channel *, struct dma_info *); | ||
139 | #else | ||
140 | #define dma_create_sysfs_file(channel, info) do { } while (0) | ||
141 | #define dma_remove_sysfs_file(channel, info) do { } while (0) | ||
134 | #endif | 142 | #endif |
135 | 143 | ||
136 | #ifdef CONFIG_PCI | 144 | #ifdef CONFIG_PCI |
diff --git a/include/asm-sh/freq.h b/include/asm-sh/freq.h index 2c0fde46a0ed..39c0e091cf58 100644 --- a/include/asm-sh/freq.h +++ b/include/asm-sh/freq.h | |||
@@ -14,16 +14,5 @@ | |||
14 | 14 | ||
15 | #include <asm/cpu/freq.h> | 15 | #include <asm/cpu/freq.h> |
16 | 16 | ||
17 | /* arch/sh/kernel/time.c */ | ||
18 | extern void get_current_frequency_divisors(unsigned int *ifc, unsigned int *pfc, unsigned int *bfc); | ||
19 | |||
20 | extern unsigned int get_ifc_divisor(unsigned int value); | ||
21 | extern unsigned int get_ifc_divisor(unsigned int value); | ||
22 | extern unsigned int get_ifc_divisor(unsigned int value); | ||
23 | |||
24 | extern unsigned int get_ifc_value(unsigned int divisor); | ||
25 | extern unsigned int get_pfc_value(unsigned int divisor); | ||
26 | extern unsigned int get_bfc_value(unsigned int divisor); | ||
27 | |||
28 | #endif /* __KERNEL__ */ | 17 | #endif /* __KERNEL__ */ |
29 | #endif /* __ASM_SH_FREQ_H */ | 18 | #endif /* __ASM_SH_FREQ_H */ |
diff --git a/include/asm-sh/io.h b/include/asm-sh/io.h index 6bc343fee7a0..b0b2937b6f83 100644 --- a/include/asm-sh/io.h +++ b/include/asm-sh/io.h | |||
@@ -11,7 +11,7 @@ | |||
11 | * For read{b,w,l} and write{b,w,l} there are also __raw versions, which | 11 | * For read{b,w,l} and write{b,w,l} there are also __raw versions, which |
12 | * do not have a memory barrier after them. | 12 | * do not have a memory barrier after them. |
13 | * | 13 | * |
14 | * In addition, we have | 14 | * In addition, we have |
15 | * ctrl_in{b,w,l}/ctrl_out{b,w,l} for SuperH specific I/O. | 15 | * ctrl_in{b,w,l}/ctrl_out{b,w,l} for SuperH specific I/O. |
16 | * which are processor specific. | 16 | * which are processor specific. |
17 | */ | 17 | */ |
@@ -23,19 +23,27 @@ | |||
23 | * inb by default expands to _inb, but the machine specific code may | 23 | * inb by default expands to _inb, but the machine specific code may |
24 | * define it to __inb if it chooses. | 24 | * define it to __inb if it chooses. |
25 | */ | 25 | */ |
26 | 26 | #include <linux/config.h> | |
27 | #include <asm/cache.h> | 27 | #include <asm/cache.h> |
28 | #include <asm/system.h> | 28 | #include <asm/system.h> |
29 | #include <asm/addrspace.h> | 29 | #include <asm/addrspace.h> |
30 | #include <asm/machvec.h> | 30 | #include <asm/machvec.h> |
31 | #include <linux/config.h> | 31 | #include <asm/pgtable.h> |
32 | #include <asm-generic/iomap.h> | ||
33 | |||
34 | #ifdef __KERNEL__ | ||
32 | 35 | ||
33 | /* | 36 | /* |
34 | * Depending on which platform we are running on, we need different | 37 | * Depending on which platform we are running on, we need different |
35 | * I/O functions. | 38 | * I/O functions. |
36 | */ | 39 | */ |
40 | #define __IO_PREFIX generic | ||
41 | #include <asm/io_generic.h> | ||
42 | |||
43 | #define maybebadio(port) \ | ||
44 | printk(KERN_ERR "bad PC-like io %s:%u for port 0x%lx at 0x%08x\n", \ | ||
45 | __FUNCTION__, __LINE__, (port), (u32)__builtin_return_address(0)) | ||
37 | 46 | ||
38 | #ifdef __KERNEL__ | ||
39 | /* | 47 | /* |
40 | * Since boards are able to define their own set of I/O routines through | 48 | * Since boards are able to define their own set of I/O routines through |
41 | * their respective machine vector, we always wrap through the mv. | 49 | * their respective machine vector, we always wrap through the mv. |
@@ -44,113 +52,120 @@ | |||
44 | * a given routine, it will be wrapped to generic code at run-time. | 52 | * a given routine, it will be wrapped to generic code at run-time. |
45 | */ | 53 | */ |
46 | 54 | ||
47 | # define __inb(p) sh_mv.mv_inb((p)) | 55 | #define __inb(p) sh_mv.mv_inb((p)) |
48 | # define __inw(p) sh_mv.mv_inw((p)) | 56 | #define __inw(p) sh_mv.mv_inw((p)) |
49 | # define __inl(p) sh_mv.mv_inl((p)) | 57 | #define __inl(p) sh_mv.mv_inl((p)) |
50 | # define __outb(x,p) sh_mv.mv_outb((x),(p)) | 58 | #define __outb(x,p) sh_mv.mv_outb((x),(p)) |
51 | # define __outw(x,p) sh_mv.mv_outw((x),(p)) | 59 | #define __outw(x,p) sh_mv.mv_outw((x),(p)) |
52 | # define __outl(x,p) sh_mv.mv_outl((x),(p)) | 60 | #define __outl(x,p) sh_mv.mv_outl((x),(p)) |
53 | 61 | ||
54 | # define __inb_p(p) sh_mv.mv_inb_p((p)) | 62 | #define __inb_p(p) sh_mv.mv_inb_p((p)) |
55 | # define __inw_p(p) sh_mv.mv_inw_p((p)) | 63 | #define __inw_p(p) sh_mv.mv_inw_p((p)) |
56 | # define __inl_p(p) sh_mv.mv_inl_p((p)) | 64 | #define __inl_p(p) sh_mv.mv_inl_p((p)) |
57 | # define __outb_p(x,p) sh_mv.mv_outb_p((x),(p)) | 65 | #define __outb_p(x,p) sh_mv.mv_outb_p((x),(p)) |
58 | # define __outw_p(x,p) sh_mv.mv_outw_p((x),(p)) | 66 | #define __outw_p(x,p) sh_mv.mv_outw_p((x),(p)) |
59 | # define __outl_p(x,p) sh_mv.mv_outl_p((x),(p)) | 67 | #define __outl_p(x,p) sh_mv.mv_outl_p((x),(p)) |
60 | 68 | ||
61 | # define __insb(p,b,c) sh_mv.mv_insb((p), (b), (c)) | 69 | #define __insb(p,b,c) sh_mv.mv_insb((p), (b), (c)) |
62 | # define __insw(p,b,c) sh_mv.mv_insw((p), (b), (c)) | 70 | #define __insw(p,b,c) sh_mv.mv_insw((p), (b), (c)) |
63 | # define __insl(p,b,c) sh_mv.mv_insl((p), (b), (c)) | 71 | #define __insl(p,b,c) sh_mv.mv_insl((p), (b), (c)) |
64 | # define __outsb(p,b,c) sh_mv.mv_outsb((p), (b), (c)) | 72 | #define __outsb(p,b,c) sh_mv.mv_outsb((p), (b), (c)) |
65 | # define __outsw(p,b,c) sh_mv.mv_outsw((p), (b), (c)) | 73 | #define __outsw(p,b,c) sh_mv.mv_outsw((p), (b), (c)) |
66 | # define __outsl(p,b,c) sh_mv.mv_outsl((p), (b), (c)) | 74 | #define __outsl(p,b,c) sh_mv.mv_outsl((p), (b), (c)) |
67 | 75 | ||
68 | # define __readb(a) sh_mv.mv_readb((a)) | 76 | #define __readb(a) sh_mv.mv_readb((a)) |
69 | # define __readw(a) sh_mv.mv_readw((a)) | 77 | #define __readw(a) sh_mv.mv_readw((a)) |
70 | # define __readl(a) sh_mv.mv_readl((a)) | 78 | #define __readl(a) sh_mv.mv_readl((a)) |
71 | # define __writeb(v,a) sh_mv.mv_writeb((v),(a)) | 79 | #define __writeb(v,a) sh_mv.mv_writeb((v),(a)) |
72 | # define __writew(v,a) sh_mv.mv_writew((v),(a)) | 80 | #define __writew(v,a) sh_mv.mv_writew((v),(a)) |
73 | # define __writel(v,a) sh_mv.mv_writel((v),(a)) | 81 | #define __writel(v,a) sh_mv.mv_writel((v),(a)) |
74 | 82 | ||
75 | # define __ioremap(a,s) sh_mv.mv_ioremap((a), (s)) | 83 | #define inb __inb |
76 | # define __iounmap(a) sh_mv.mv_iounmap((a)) | 84 | #define inw __inw |
77 | 85 | #define inl __inl | |
78 | # define __isa_port2addr(a) sh_mv.mv_isa_port2addr(a) | 86 | #define outb __outb |
79 | 87 | #define outw __outw | |
80 | # define inb __inb | 88 | #define outl __outl |
81 | # define inw __inw | 89 | |
82 | # define inl __inl | 90 | #define inb_p __inb_p |
83 | # define outb __outb | 91 | #define inw_p __inw_p |
84 | # define outw __outw | 92 | #define inl_p __inl_p |
85 | # define outl __outl | 93 | #define outb_p __outb_p |
86 | 94 | #define outw_p __outw_p | |
87 | # define inb_p __inb_p | 95 | #define outl_p __outl_p |
88 | # define inw_p __inw_p | 96 | |
89 | # define inl_p __inl_p | 97 | #define insb __insb |
90 | # define outb_p __outb_p | 98 | #define insw __insw |
91 | # define outw_p __outw_p | 99 | #define insl __insl |
92 | # define outl_p __outl_p | 100 | #define outsb __outsb |
93 | 101 | #define outsw __outsw | |
94 | # define insb __insb | 102 | #define outsl __outsl |
95 | # define insw __insw | 103 | |
96 | # define insl __insl | 104 | #define __raw_readb(a) __readb((void __iomem *)(a)) |
97 | # define outsb __outsb | 105 | #define __raw_readw(a) __readw((void __iomem *)(a)) |
98 | # define outsw __outsw | 106 | #define __raw_readl(a) __readl((void __iomem *)(a)) |
99 | # define outsl __outsl | 107 | #define __raw_writeb(v, a) __writeb(v, (void __iomem *)(a)) |
100 | 108 | #define __raw_writew(v, a) __writew(v, (void __iomem *)(a)) | |
101 | # define __raw_readb __readb | 109 | #define __raw_writel(v, a) __writel(v, (void __iomem *)(a)) |
102 | # define __raw_readw __readw | ||
103 | # define __raw_readl __readl | ||
104 | # define __raw_writeb __writeb | ||
105 | # define __raw_writew __writew | ||
106 | # define __raw_writel __writel | ||
107 | 110 | ||
108 | /* | 111 | /* |
109 | * The platform header files may define some of these macros to use | 112 | * The platform header files may define some of these macros to use |
110 | * the inlined versions where appropriate. These macros may also be | 113 | * the inlined versions where appropriate. These macros may also be |
111 | * redefined by userlevel programs. | 114 | * redefined by userlevel programs. |
112 | */ | 115 | */ |
113 | #ifdef __raw_readb | 116 | #ifdef __readb |
114 | # define readb(a) ({ unsigned long r_ = __raw_readb((unsigned long)a); mb(); r_; }) | 117 | # define readb(a) ({ unsigned long r_ = __raw_readb(a); mb(); r_; }) |
115 | #endif | 118 | #endif |
116 | #ifdef __raw_readw | 119 | #ifdef __raw_readw |
117 | # define readw(a) ({ unsigned long r_ = __raw_readw((unsigned long)a); mb(); r_; }) | 120 | # define readw(a) ({ unsigned long r_ = __raw_readw(a); mb(); r_; }) |
118 | #endif | 121 | #endif |
119 | #ifdef __raw_readl | 122 | #ifdef __raw_readl |
120 | # define readl(a) ({ unsigned long r_ = __raw_readl((unsigned long)a); mb(); r_; }) | 123 | # define readl(a) ({ unsigned long r_ = __raw_readl(a); mb(); r_; }) |
121 | #endif | 124 | #endif |
122 | 125 | ||
123 | #ifdef __raw_writeb | 126 | #ifdef __raw_writeb |
124 | # define writeb(v,a) ({ __raw_writeb((v),(unsigned long)(a)); mb(); }) | 127 | # define writeb(v,a) ({ __raw_writeb((v),(a)); mb(); }) |
125 | #endif | 128 | #endif |
126 | #ifdef __raw_writew | 129 | #ifdef __raw_writew |
127 | # define writew(v,a) ({ __raw_writew((v),(unsigned long)(a)); mb(); }) | 130 | # define writew(v,a) ({ __raw_writew((v),(a)); mb(); }) |
128 | #endif | 131 | #endif |
129 | #ifdef __raw_writel | 132 | #ifdef __raw_writel |
130 | # define writel(v,a) ({ __raw_writel((v),(unsigned long)(a)); mb(); }) | 133 | # define writel(v,a) ({ __raw_writel((v),(a)); mb(); }) |
131 | #endif | 134 | #endif |
132 | 135 | ||
133 | #define readb_relaxed(a) readb(a) | 136 | #define readb_relaxed(a) readb(a) |
134 | #define readw_relaxed(a) readw(a) | 137 | #define readw_relaxed(a) readw(a) |
135 | #define readl_relaxed(a) readl(a) | 138 | #define readl_relaxed(a) readl(a) |
136 | 139 | ||
137 | #define mmiowb() | 140 | /* Simple MMIO */ |
141 | #define ioread8(a) readb(a) | ||
142 | #define ioread16(a) readw(a) | ||
143 | #define ioread16be(a) be16_to_cpu(__raw_readw((a))) | ||
144 | #define ioread32(a) readl(a) | ||
145 | #define ioread32be(a) be32_to_cpu(__raw_readl((a))) | ||
138 | 146 | ||
139 | /* | 147 | #define iowrite8(v,a) writeb((v),(a)) |
140 | * If the platform has PC-like I/O, this function converts the offset into | 148 | #define iowrite16(v,a) writew((v),(a)) |
141 | * an address. | 149 | #define iowrite16be(v,a) __raw_writew(cpu_to_be16((v)),(a)) |
142 | */ | 150 | #define iowrite32(v,a) writel((v),(a)) |
143 | static __inline__ unsigned long isa_port2addr(unsigned long offset) | 151 | #define iowrite32be(v,a) __raw_writel(cpu_to_be32((v)),(a)) |
144 | { | 152 | |
145 | return __isa_port2addr(offset); | 153 | #define ioread8_rep(a,d,c) insb((a),(d),(c)) |
146 | } | 154 | #define ioread16_rep(a,d,c) insw((a),(d),(c)) |
155 | #define ioread32_rep(a,d,c) insl((a),(d),(c)) | ||
156 | |||
157 | #define iowrite8_rep(a,s,c) outsb((a),(s),(c)) | ||
158 | #define iowrite16_rep(a,s,c) outsw((a),(s),(c)) | ||
159 | #define iowrite32_rep(a,s,c) outsl((a),(s),(c)) | ||
160 | |||
161 | #define mmiowb() wmb() /* synco on SH-4A, otherwise a nop */ | ||
147 | 162 | ||
148 | /* | 163 | /* |
149 | * This function provides a method for the generic case where a board-specific | 164 | * This function provides a method for the generic case where a board-specific |
150 | * isa_port2addr simply needs to return the port + some arbitrary port base. | 165 | * ioport_map simply needs to return the port + some arbitrary port base. |
151 | * | 166 | * |
152 | * We use this at board setup time to implicitly set the port base, and | 167 | * We use this at board setup time to implicitly set the port base, and |
153 | * as a result, we can use the generic isa_port2addr. | 168 | * as a result, we can use the generic ioport_map. |
154 | */ | 169 | */ |
155 | static inline void __set_io_port_base(unsigned long pbase) | 170 | static inline void __set_io_port_base(unsigned long pbase) |
156 | { | 171 | { |
@@ -159,51 +174,52 @@ static inline void __set_io_port_base(unsigned long pbase) | |||
159 | generic_io_base = pbase; | 174 | generic_io_base = pbase; |
160 | } | 175 | } |
161 | 176 | ||
162 | #define isa_readb(a) readb(isa_port2addr(a)) | 177 | #define isa_readb(a) readb(ioport_map(a, 1)) |
163 | #define isa_readw(a) readw(isa_port2addr(a)) | 178 | #define isa_readw(a) readw(ioport_map(a, 2)) |
164 | #define isa_readl(a) readl(isa_port2addr(a)) | 179 | #define isa_readl(a) readl(ioport_map(a, 4)) |
165 | #define isa_writeb(b,a) writeb(b,isa_port2addr(a)) | 180 | #define isa_writeb(b,a) writeb(b,ioport_map(a, 1)) |
166 | #define isa_writew(w,a) writew(w,isa_port2addr(a)) | 181 | #define isa_writew(w,a) writew(w,ioport_map(a, 2)) |
167 | #define isa_writel(l,a) writel(l,isa_port2addr(a)) | 182 | #define isa_writel(l,a) writel(l,ioport_map(a, 4)) |
183 | |||
168 | #define isa_memset_io(a,b,c) \ | 184 | #define isa_memset_io(a,b,c) \ |
169 | memset((void *)(isa_port2addr((unsigned long)a)),(b),(c)) | 185 | memset((void *)(ioport_map((unsigned long)(a), 1)),(b),(c)) |
170 | #define isa_memcpy_fromio(a,b,c) \ | 186 | #define isa_memcpy_fromio(a,b,c) \ |
171 | memcpy((a),(void *)(isa_port2addr((unsigned long)(b))),(c)) | 187 | memcpy((a),(void *)(ioport_map((unsigned long)(b), 1)),(c)) |
172 | #define isa_memcpy_toio(a,b,c) \ | 188 | #define isa_memcpy_toio(a,b,c) \ |
173 | memcpy((void *)(isa_port2addr((unsigned long)(a))),(b),(c)) | 189 | memcpy((void *)(ioport_map((unsigned long)(a), 1)),(b),(c)) |
174 | 190 | ||
175 | /* We really want to try and get these to memcpy etc */ | 191 | /* We really want to try and get these to memcpy etc */ |
176 | extern void memcpy_fromio(void *, unsigned long, unsigned long); | 192 | extern void memcpy_fromio(void *, volatile void __iomem *, unsigned long); |
177 | extern void memcpy_toio(unsigned long, const void *, unsigned long); | 193 | extern void memcpy_toio(volatile void __iomem *, const void *, unsigned long); |
178 | extern void memset_io(unsigned long, int, unsigned long); | 194 | extern void memset_io(volatile void __iomem *, int, unsigned long); |
179 | 195 | ||
180 | /* SuperH on-chip I/O functions */ | 196 | /* SuperH on-chip I/O functions */ |
181 | static __inline__ unsigned char ctrl_inb(unsigned long addr) | 197 | static inline unsigned char ctrl_inb(unsigned long addr) |
182 | { | 198 | { |
183 | return *(volatile unsigned char*)addr; | 199 | return *(volatile unsigned char*)addr; |
184 | } | 200 | } |
185 | 201 | ||
186 | static __inline__ unsigned short ctrl_inw(unsigned long addr) | 202 | static inline unsigned short ctrl_inw(unsigned long addr) |
187 | { | 203 | { |
188 | return *(volatile unsigned short*)addr; | 204 | return *(volatile unsigned short*)addr; |
189 | } | 205 | } |
190 | 206 | ||
191 | static __inline__ unsigned int ctrl_inl(unsigned long addr) | 207 | static inline unsigned int ctrl_inl(unsigned long addr) |
192 | { | 208 | { |
193 | return *(volatile unsigned long*)addr; | 209 | return *(volatile unsigned long*)addr; |
194 | } | 210 | } |
195 | 211 | ||
196 | static __inline__ void ctrl_outb(unsigned char b, unsigned long addr) | 212 | static inline void ctrl_outb(unsigned char b, unsigned long addr) |
197 | { | 213 | { |
198 | *(volatile unsigned char*)addr = b; | 214 | *(volatile unsigned char*)addr = b; |
199 | } | 215 | } |
200 | 216 | ||
201 | static __inline__ void ctrl_outw(unsigned short b, unsigned long addr) | 217 | static inline void ctrl_outw(unsigned short b, unsigned long addr) |
202 | { | 218 | { |
203 | *(volatile unsigned short*)addr = b; | 219 | *(volatile unsigned short*)addr = b; |
204 | } | 220 | } |
205 | 221 | ||
206 | static __inline__ void ctrl_outl(unsigned int b, unsigned long addr) | 222 | static inline void ctrl_outl(unsigned int b, unsigned long addr) |
207 | { | 223 | { |
208 | *(volatile unsigned long*)addr = b; | 224 | *(volatile unsigned long*)addr = b; |
209 | } | 225 | } |
@@ -214,12 +230,12 @@ static __inline__ void ctrl_outl(unsigned int b, unsigned long addr) | |||
214 | * Change virtual addresses to physical addresses and vv. | 230 | * Change virtual addresses to physical addresses and vv. |
215 | * These are trivial on the 1:1 Linux/SuperH mapping | 231 | * These are trivial on the 1:1 Linux/SuperH mapping |
216 | */ | 232 | */ |
217 | static __inline__ unsigned long virt_to_phys(volatile void * address) | 233 | static inline unsigned long virt_to_phys(volatile void *address) |
218 | { | 234 | { |
219 | return PHYSADDR(address); | 235 | return PHYSADDR(address); |
220 | } | 236 | } |
221 | 237 | ||
222 | static __inline__ void * phys_to_virt(unsigned long address) | 238 | static inline void *phys_to_virt(unsigned long address) |
223 | { | 239 | { |
224 | return (void *)P1SEGADDR(address); | 240 | return (void *)P1SEGADDR(address); |
225 | } | 241 | } |
@@ -234,27 +250,60 @@ static __inline__ void * phys_to_virt(unsigned long address) | |||
234 | * differently. On the x86 architecture, we just read/write the | 250 | * differently. On the x86 architecture, we just read/write the |
235 | * memory location directly. | 251 | * memory location directly. |
236 | * | 252 | * |
237 | * On SH, we have the whole physical address space mapped at all times | 253 | * On SH, we traditionally have the whole physical address space mapped |
238 | * (as MIPS does), so "ioremap()" and "iounmap()" do not need to do | 254 | * at all times (as MIPS does), so "ioremap()" and "iounmap()" do not |
239 | * anything. (This isn't true for all machines but we still handle | 255 | * need to do anything but place the address in the proper segment. This |
240 | * these cases with wired TLB entries anyway ...) | 256 | * is true for P1 and P2 addresses, as well as some P3 ones. However, |
257 | * most of the P3 addresses and newer cores using extended addressing | ||
258 | * need to map through page tables, so the ioremap() implementation | ||
259 | * becomes a bit more complicated. See arch/sh/mm/ioremap.c for | ||
260 | * additional notes on this. | ||
241 | * | 261 | * |
242 | * We cheat a bit and always return uncachable areas until we've fixed | 262 | * We cheat a bit and always return uncachable areas until we've fixed |
243 | * the drivers to handle caching properly. | 263 | * the drivers to handle caching properly. |
244 | */ | 264 | */ |
245 | static __inline__ void * ioremap(unsigned long offset, unsigned long size) | 265 | #ifdef CONFIG_MMU |
266 | void __iomem *__ioremap(unsigned long offset, unsigned long size, | ||
267 | unsigned long flags); | ||
268 | void __iounmap(void __iomem *addr); | ||
269 | #else | ||
270 | #define __ioremap(offset, size, flags) ((void __iomem *)(offset)) | ||
271 | #define __iounmap(addr) do { } while (0) | ||
272 | #endif /* CONFIG_MMU */ | ||
273 | |||
274 | static inline void __iomem * | ||
275 | __ioremap_mode(unsigned long offset, unsigned long size, unsigned long flags) | ||
246 | { | 276 | { |
247 | return __ioremap(offset, size); | 277 | unsigned long last_addr = offset + size - 1; |
278 | |||
279 | /* | ||
280 | * For P1 and P2 space this is trivial, as everything is already | ||
281 | * mapped. Uncached access for P1 addresses are done through P2. | ||
282 | * In the P3 case or for addresses outside of the 29-bit space, | ||
283 | * mapping must be done by the PMB or by using page tables. | ||
284 | */ | ||
285 | if (likely(PXSEG(offset) < P3SEG && PXSEG(last_addr) < P3SEG)) { | ||
286 | if (unlikely(flags & _PAGE_CACHABLE)) | ||
287 | return (void __iomem *)P1SEGADDR(offset); | ||
288 | |||
289 | return (void __iomem *)P2SEGADDR(offset); | ||
290 | } | ||
291 | |||
292 | return __ioremap(offset, size, flags); | ||
248 | } | 293 | } |
249 | 294 | ||
250 | static __inline__ void iounmap(void *addr) | 295 | #define ioremap(offset, size) \ |
251 | { | 296 | __ioremap_mode((offset), (size), 0) |
252 | return __iounmap(addr); | 297 | #define ioremap_nocache(offset, size) \ |
253 | } | 298 | __ioremap_mode((offset), (size), 0) |
254 | 299 | #define ioremap_cache(offset, size) \ | |
255 | #define ioremap_nocache(off,size) ioremap(off,size) | 300 | __ioremap_mode((offset), (size), _PAGE_CACHABLE) |
256 | 301 | #define p3_ioremap(offset, size, flags) \ | |
257 | static __inline__ int check_signature(unsigned long io_addr, | 302 | __ioremap((offset), (size), (flags)) |
303 | #define iounmap(addr) \ | ||
304 | __iounmap((addr)) | ||
305 | |||
306 | static inline int check_signature(char __iomem *io_addr, | ||
258 | const unsigned char *signature, int length) | 307 | const unsigned char *signature, int length) |
259 | { | 308 | { |
260 | int retval = 0; | 309 | int retval = 0; |
diff --git a/include/asm-sh/io_generic.h b/include/asm-sh/io_generic.h index be14587342f7..92fc6070d7b3 100644 --- a/include/asm-sh/io_generic.h +++ b/include/asm-sh/io_generic.h | |||
@@ -1,51 +1,49 @@ | |||
1 | /* | 1 | /* |
2 | * include/asm-sh/io_generic.h | 2 | * Trivial I/O routine definitions, intentionally meant to be included |
3 | * | 3 | * multiple times. Ugly I/O routine concatenation helpers taken from |
4 | * Copyright 2000 Stuart Menefy (stuart.menefy@st.com) | 4 | * alpha. Must be included _before_ io.h to avoid preprocessor-induced |
5 | * | 5 | * routine mismatch. |
6 | * May be copied or modified under the terms of the GNU General Public | ||
7 | * License. See linux/COPYING for more information. | ||
8 | * | ||
9 | * Generic IO functions | ||
10 | */ | 6 | */ |
11 | 7 | #define IO_CONCAT(a,b) _IO_CONCAT(a,b) | |
12 | #ifndef _ASM_SH_IO_GENERIC_H | 8 | #define _IO_CONCAT(a,b) a ## _ ## b |
13 | #define _ASM_SH_IO_GENERIC_H | 9 | |
14 | 10 | #ifndef __IO_PREFIX | |
15 | extern unsigned long generic_io_base; | 11 | #error "Don't include this header without a valid system prefix" |
16 | 12 | #endif | |
17 | extern unsigned char generic_inb(unsigned long port); | 13 | |
18 | extern unsigned short generic_inw(unsigned long port); | 14 | u8 IO_CONCAT(__IO_PREFIX,inb)(unsigned long); |
19 | extern unsigned int generic_inl(unsigned long port); | 15 | u16 IO_CONCAT(__IO_PREFIX,inw)(unsigned long); |
20 | 16 | u32 IO_CONCAT(__IO_PREFIX,inl)(unsigned long); | |
21 | extern void generic_outb(unsigned char value, unsigned long port); | 17 | |
22 | extern void generic_outw(unsigned short value, unsigned long port); | 18 | void IO_CONCAT(__IO_PREFIX,outb)(u8, unsigned long); |
23 | extern void generic_outl(unsigned int value, unsigned long port); | 19 | void IO_CONCAT(__IO_PREFIX,outw)(u16, unsigned long); |
24 | 20 | void IO_CONCAT(__IO_PREFIX,outl)(u32, unsigned long); | |
25 | extern unsigned char generic_inb_p(unsigned long port); | 21 | |
26 | extern unsigned short generic_inw_p(unsigned long port); | 22 | u8 IO_CONCAT(__IO_PREFIX,inb_p)(unsigned long); |
27 | extern unsigned int generic_inl_p(unsigned long port); | 23 | u16 IO_CONCAT(__IO_PREFIX,inw_p)(unsigned long); |
28 | extern void generic_outb_p(unsigned char value, unsigned long port); | 24 | u32 IO_CONCAT(__IO_PREFIX,inl_p)(unsigned long); |
29 | extern void generic_outw_p(unsigned short value, unsigned long port); | 25 | void IO_CONCAT(__IO_PREFIX,outb_p)(u8, unsigned long); |
30 | extern void generic_outl_p(unsigned int value, unsigned long port); | 26 | void IO_CONCAT(__IO_PREFIX,outw_p)(u16, unsigned long); |
31 | 27 | void IO_CONCAT(__IO_PREFIX,outl_p)(u32, unsigned long); | |
32 | extern void generic_insb(unsigned long port, void *addr, unsigned long count); | 28 | |
33 | extern void generic_insw(unsigned long port, void *addr, unsigned long count); | 29 | void IO_CONCAT(__IO_PREFIX,insb)(unsigned long, void *dst, unsigned long count); |
34 | extern void generic_insl(unsigned long port, void *addr, unsigned long count); | 30 | void IO_CONCAT(__IO_PREFIX,insw)(unsigned long, void *dst, unsigned long count); |
35 | extern void generic_outsb(unsigned long port, const void *addr, unsigned long count); | 31 | void IO_CONCAT(__IO_PREFIX,insl)(unsigned long, void *dst, unsigned long count); |
36 | extern void generic_outsw(unsigned long port, const void *addr, unsigned long count); | 32 | void IO_CONCAT(__IO_PREFIX,outsb)(unsigned long, const void *src, unsigned long count); |
37 | extern void generic_outsl(unsigned long port, const void *addr, unsigned long count); | 33 | void IO_CONCAT(__IO_PREFIX,outsw)(unsigned long, const void *src, unsigned long count); |
38 | 34 | void IO_CONCAT(__IO_PREFIX,outsl)(unsigned long, const void *src, unsigned long count); | |
39 | extern unsigned char generic_readb(unsigned long addr); | 35 | |
40 | extern unsigned short generic_readw(unsigned long addr); | 36 | u8 IO_CONCAT(__IO_PREFIX,readb)(void __iomem *); |
41 | extern unsigned int generic_readl(unsigned long addr); | 37 | u16 IO_CONCAT(__IO_PREFIX,readw)(void __iomem *); |
42 | extern void generic_writeb(unsigned char b, unsigned long addr); | 38 | u32 IO_CONCAT(__IO_PREFIX,readl)(void __iomem *); |
43 | extern void generic_writew(unsigned short b, unsigned long addr); | 39 | void IO_CONCAT(__IO_PREFIX,writeb)(u8, void __iomem *); |
44 | extern void generic_writel(unsigned int b, unsigned long addr); | 40 | void IO_CONCAT(__IO_PREFIX,writew)(u16, void __iomem *); |
45 | 41 | void IO_CONCAT(__IO_PREFIX,writel)(u32, void __iomem *); | |
46 | extern void *generic_ioremap(unsigned long offset, unsigned long size); | 42 | |
47 | extern void generic_iounmap(void *addr); | 43 | void *IO_CONCAT(__IO_PREFIX,ioremap)(unsigned long offset, unsigned long size); |
48 | 44 | void IO_CONCAT(__IO_PREFIX,iounmap)(void *addr); | |
49 | extern unsigned long generic_isa_port2addr(unsigned long offset); | 45 | |
50 | 46 | void __iomem *IO_CONCAT(__IO_PREFIX,ioport_map)(unsigned long addr, unsigned int size); | |
51 | #endif /* _ASM_SH_IO_GENERIC_H */ | 47 | void IO_CONCAT(__IO_PREFIX,ioport_unmap)(void __iomem *addr); |
48 | |||
49 | #undef __IO_PREFIX | ||
diff --git a/include/asm-sh/irq-sh7780.h b/include/asm-sh/irq-sh7780.h new file mode 100644 index 000000000000..8c8ca1281084 --- /dev/null +++ b/include/asm-sh/irq-sh7780.h | |||
@@ -0,0 +1,349 @@ | |||
1 | #ifndef __ASM_SH_IRQ_SH7780_H | ||
2 | #define __ASM_SH_IRQ_SH7780_H | ||
3 | |||
4 | /* | ||
5 | * linux/include/asm-sh/irq-sh7780.h | ||
6 | * | ||
7 | * Copyright (C) 2004 Takashi SHUDO <shudo@hitachi-ul.co.jp> | ||
8 | */ | ||
9 | |||
10 | #ifdef CONFIG_IDE | ||
11 | # ifndef IRQ_CFCARD | ||
12 | # define IRQ_CFCARD 14 | ||
13 | # endif | ||
14 | # ifndef IRQ_PCMCIA | ||
15 | # define IRQ_PCMCIA 15 | ||
16 | # endif | ||
17 | #endif | ||
18 | |||
19 | #define INTC_BASE 0xffd00000 | ||
20 | #define INTC_ICR0 (INTC_BASE+0x0) | ||
21 | #define INTC_ICR1 (INTC_BASE+0x1c) | ||
22 | #define INTC_INTPRI (INTC_BASE+0x10) | ||
23 | #define INTC_INTREQ (INTC_BASE+0x24) | ||
24 | #define INTC_INTMSK0 (INTC_BASE+0x44) | ||
25 | #define INTC_INTMSK1 (INTC_BASE+0x48) | ||
26 | #define INTC_INTMSK2 (INTC_BASE+0x40080) | ||
27 | #define INTC_INTMSKCLR0 (INTC_BASE+0x64) | ||
28 | #define INTC_INTMSKCLR1 (INTC_BASE+0x68) | ||
29 | #define INTC_INTMSKCLR2 (INTC_BASE+0x40084) | ||
30 | #define INTC_NMIFCR (INTC_BASE+0xc0) | ||
31 | #define INTC_USERIMASK (INTC_BASE+0x30000) | ||
32 | |||
33 | #define INTC_INT2PRI0 (INTC_BASE+0x40000) | ||
34 | #define INTC_INT2PRI1 (INTC_BASE+0x40004) | ||
35 | #define INTC_INT2PRI2 (INTC_BASE+0x40008) | ||
36 | #define INTC_INT2PRI3 (INTC_BASE+0x4000c) | ||
37 | #define INTC_INT2PRI4 (INTC_BASE+0x40010) | ||
38 | #define INTC_INT2PRI5 (INTC_BASE+0x40014) | ||
39 | #define INTC_INT2PRI6 (INTC_BASE+0x40018) | ||
40 | #define INTC_INT2PRI7 (INTC_BASE+0x4001c) | ||
41 | #define INTC_INT2A0 (INTC_BASE+0x40030) | ||
42 | #define INTC_INT2A1 (INTC_BASE+0x40034) | ||
43 | #define INTC_INT2MSKR (INTC_BASE+0x40038) | ||
44 | #define INTC_INT2MSKCR (INTC_BASE+0x4003c) | ||
45 | #define INTC_INT2B0 (INTC_BASE+0x40040) | ||
46 | #define INTC_INT2B1 (INTC_BASE+0x40044) | ||
47 | #define INTC_INT2B2 (INTC_BASE+0x40048) | ||
48 | #define INTC_INT2B3 (INTC_BASE+0x4004c) | ||
49 | #define INTC_INT2B4 (INTC_BASE+0x40050) | ||
50 | #define INTC_INT2B5 (INTC_BASE+0x40054) | ||
51 | #define INTC_INT2B6 (INTC_BASE+0x40058) | ||
52 | #define INTC_INT2B7 (INTC_BASE+0x4005c) | ||
53 | #define INTC_INT2GPIC (INTC_BASE+0x40090) | ||
54 | /* | ||
55 | NOTE: | ||
56 | *_IRQ = (INTEVT2 - 0x200)/0x20 | ||
57 | */ | ||
58 | /* IRQ 0-7 line external int*/ | ||
59 | #define IRQ0_IRQ 2 | ||
60 | #define IRQ0_IPR_ADDR INTC_INTPRI | ||
61 | #define IRQ0_IPR_POS 7 | ||
62 | #define IRQ0_PRIORITY 2 | ||
63 | |||
64 | #define IRQ1_IRQ 4 | ||
65 | #define IRQ1_IPR_ADDR INTC_INTPRI | ||
66 | #define IRQ1_IPR_POS 6 | ||
67 | #define IRQ1_PRIORITY 2 | ||
68 | |||
69 | #define IRQ2_IRQ 6 | ||
70 | #define IRQ2_IPR_ADDR INTC_INTPRI | ||
71 | #define IRQ2_IPR_POS 5 | ||
72 | #define IRQ2_PRIORITY 2 | ||
73 | |||
74 | #define IRQ3_IRQ 8 | ||
75 | #define IRQ3_IPR_ADDR INTC_INTPRI | ||
76 | #define IRQ3_IPR_POS 4 | ||
77 | #define IRQ3_PRIORITY 2 | ||
78 | |||
79 | #define IRQ4_IRQ 10 | ||
80 | #define IRQ4_IPR_ADDR INTC_INTPRI | ||
81 | #define IRQ4_IPR_POS 3 | ||
82 | #define IRQ4_PRIORITY 2 | ||
83 | |||
84 | #define IRQ5_IRQ 12 | ||
85 | #define IRQ5_IPR_ADDR INTC_INTPRI | ||
86 | #define IRQ5_IPR_POS 2 | ||
87 | #define IRQ5_PRIORITY 2 | ||
88 | |||
89 | #define IRQ6_IRQ 14 | ||
90 | #define IRQ6_IPR_ADDR INTC_INTPRI | ||
91 | #define IRQ6_IPR_POS 1 | ||
92 | #define IRQ6_PRIORITY 2 | ||
93 | |||
94 | #define IRQ7_IRQ 0 | ||
95 | #define IRQ7_IPR_ADDR INTC_INTPRI | ||
96 | #define IRQ7_IPR_POS 0 | ||
97 | #define IRQ7_PRIORITY 2 | ||
98 | |||
99 | /* TMU */ | ||
100 | /* ch0 */ | ||
101 | #define TMU_IRQ 28 | ||
102 | #define TMU_IPR_ADDR INTC_INT2PRI0 | ||
103 | #define TMU_IPR_POS 3 | ||
104 | #define TMU_PRIORITY 2 | ||
105 | |||
106 | #define TIMER_IRQ 28 | ||
107 | #define TIMER_IPR_ADDR INTC_INT2PRI0 | ||
108 | #define TIMER_IPR_POS 3 | ||
109 | #define TIMER_PRIORITY 2 | ||
110 | |||
111 | /* ch 1*/ | ||
112 | #define TMU_CH1_IRQ 29 | ||
113 | #define TMU_CH1_IPR_ADDR INTC_INT2PRI0 | ||
114 | #define TMU_CH1_IPR_POS 2 | ||
115 | #define TMU_CH1_PRIORITY 2 | ||
116 | |||
117 | #define TIMER1_IRQ 29 | ||
118 | #define TIMER1_IPR_ADDR INTC_INT2PRI0 | ||
119 | #define TIMER1_IPR_POS 2 | ||
120 | #define TIMER1_PRIORITY 2 | ||
121 | |||
122 | /* ch 2*/ | ||
123 | #define TMU_CH2_IRQ 30 | ||
124 | #define TMU_CH2_IPR_ADDR INTC_INT2PRI0 | ||
125 | #define TMU_CH2_IPR_POS 1 | ||
126 | #define TMU_CH2_PRIORITY 2 | ||
127 | /* ch 2 Input capture */ | ||
128 | #define TMU_CH2IC_IRQ 31 | ||
129 | #define TMU_CH2IC_IPR_ADDR INTC_INT2PRI0 | ||
130 | #define TMU_CH2IC_IPR_POS 0 | ||
131 | #define TMU_CH2IC_PRIORITY 2 | ||
132 | /* ch 3 */ | ||
133 | #define TMU_CH3_IRQ 96 | ||
134 | #define TMU_CH3_IPR_ADDR INTC_INT2PRI1 | ||
135 | #define TMU_CH3_IPR_POS 3 | ||
136 | #define TMU_CH3_PRIORITY 2 | ||
137 | /* ch 4 */ | ||
138 | #define TMU_CH4_IRQ 97 | ||
139 | #define TMU_CH4_IPR_ADDR INTC_INT2PRI1 | ||
140 | #define TMU_CH4_IPR_POS 2 | ||
141 | #define TMU_CH4_PRIORITY 2 | ||
142 | /* ch 5*/ | ||
143 | #define TMU_CH5_IRQ 98 | ||
144 | #define TMU_CH5_IPR_ADDR INTC_INT2PRI1 | ||
145 | #define TMU_CH5_IPR_POS 1 | ||
146 | #define TMU_CH5_PRIORITY 2 | ||
147 | |||
148 | #define RTC_IRQ 22 | ||
149 | #define RTC_IPR_ADDR INTC_INT2PRI1 | ||
150 | #define RTC_IPR_POS 0 | ||
151 | #define RTC_PRIORITY TIMER_PRIORITY | ||
152 | |||
153 | /* SCIF0 */ | ||
154 | #define SCIF0_ERI_IRQ 40 | ||
155 | #define SCIF0_RXI_IRQ 41 | ||
156 | #define SCIF0_BRI_IRQ 42 | ||
157 | #define SCIF0_TXI_IRQ 43 | ||
158 | #define SCIF0_IPR_ADDR INTC_INT2PRI2 | ||
159 | #define SCIF0_IPR_POS 3 | ||
160 | #define SCIF0_PRIORITY 3 | ||
161 | |||
162 | /* SCIF1 */ | ||
163 | #define SCIF1_ERI_IRQ 76 | ||
164 | #define SCIF1_RXI_IRQ 77 | ||
165 | #define SCIF1_BRI_IRQ 78 | ||
166 | #define SCIF1_TXI_IRQ 79 | ||
167 | #define SCIF1_IPR_ADDR INTC_INT2PRI2 | ||
168 | #define SCIF1_IPR_POS 2 | ||
169 | #define SCIF1_PRIORITY 3 | ||
170 | |||
171 | #define WDT_IRQ 27 | ||
172 | #define WDT_IPR_ADDR INTC_INT2PRI2 | ||
173 | #define WDT_IPR_POS 1 | ||
174 | #define WDT_PRIORITY 2 | ||
175 | |||
176 | /* DMAC(0) */ | ||
177 | #define DMINT0_IRQ 34 | ||
178 | #define DMINT1_IRQ 35 | ||
179 | #define DMINT2_IRQ 36 | ||
180 | #define DMINT3_IRQ 37 | ||
181 | #define DMINT4_IRQ 44 | ||
182 | #define DMINT5_IRQ 45 | ||
183 | #define DMINT6_IRQ 46 | ||
184 | #define DMINT7_IRQ 47 | ||
185 | #define DMAE_IRQ 38 | ||
186 | #define DMA0_IPR_ADDR INTC_INT2PRI3 | ||
187 | #define DMA0_IPR_POS 2 | ||
188 | #define DMA0_PRIORITY 7 | ||
189 | |||
190 | /* DMAC(1) */ | ||
191 | #define DMINT8_IRQ 92 | ||
192 | #define DMINT9_IRQ 93 | ||
193 | #define DMINT10_IRQ 94 | ||
194 | #define DMINT11_IRQ 95 | ||
195 | #define DMA1_IPR_ADDR INTC_INT2PRI3 | ||
196 | #define DMA1_IPR_POS 1 | ||
197 | #define DMA1_PRIORITY 7 | ||
198 | |||
199 | #define DMTE0_IRQ DMINT0_IRQ | ||
200 | #define DMTE4_IRQ DMINT4_IRQ | ||
201 | #define DMA_IPR_ADDR DMA0_IPR_ADDR | ||
202 | #define DMA_IPR_POS DMA0_IPR_POS | ||
203 | #define DMA_PRIORITY DMA0_PRIORITY | ||
204 | |||
205 | /* CMT */ | ||
206 | #define CMT_IRQ 56 | ||
207 | #define CMT_IPR_ADDR INTC_INT2PRI4 | ||
208 | #define CMT_IPR_POS 3 | ||
209 | #define CMT_PRIORITY 0 | ||
210 | |||
211 | /* HAC */ | ||
212 | #define HAC_IRQ 60 | ||
213 | #define HAC_IPR_ADDR INTC_INT2PRI4 | ||
214 | #define HAC_IPR_POS 2 | ||
215 | #define CMT_PRIORITY 0 | ||
216 | |||
217 | /* PCIC(0) */ | ||
218 | #define PCIC0_IRQ 64 | ||
219 | #define PCIC0_IPR_ADDR INTC_INT2PRI4 | ||
220 | #define PCIC0_IPR_POS 1 | ||
221 | #define PCIC0_PRIORITY 2 | ||
222 | |||
223 | /* PCIC(1) */ | ||
224 | #define PCIC1_IRQ 65 | ||
225 | #define PCIC1_IPR_ADDR INTC_INT2PRI4 | ||
226 | #define PCIC1_IPR_POS 0 | ||
227 | #define PCIC1_PRIORITY 2 | ||
228 | |||
229 | /* PCIC(2) */ | ||
230 | #define PCIC2_IRQ 66 | ||
231 | #define PCIC2_IPR_ADDR INTC_INT2PRI5 | ||
232 | #define PCIC2_IPR_POS 3 | ||
233 | #define PCIC2_PRIORITY 2 | ||
234 | |||
235 | /* PCIC(3) */ | ||
236 | #define PCIC3_IRQ 67 | ||
237 | #define PCIC3_IPR_ADDR INTC_INT2PRI5 | ||
238 | #define PCIC3_IPR_POS 2 | ||
239 | #define PCIC3_PRIORITY 2 | ||
240 | |||
241 | /* PCIC(4) */ | ||
242 | #define PCIC4_IRQ 68 | ||
243 | #define PCIC4_IPR_ADDR INTC_INT2PRI5 | ||
244 | #define PCIC4_IPR_POS 1 | ||
245 | #define PCIC4_PRIORITY 2 | ||
246 | |||
247 | /* PCIC(5) */ | ||
248 | #define PCICERR_IRQ 69 | ||
249 | #define PCICPWD3_IRQ 70 | ||
250 | #define PCICPWD2_IRQ 71 | ||
251 | #define PCICPWD1_IRQ 72 | ||
252 | #define PCICPWD0_IRQ 73 | ||
253 | #define PCIC5_IPR_ADDR INTC_INT2PRI5 | ||
254 | #define PCIC5_IPR_POS 0 | ||
255 | #define PCIC5_PRIORITY 2 | ||
256 | |||
257 | /* SIOF */ | ||
258 | #define SIOF_IRQ 80 | ||
259 | #define SIOF_IPR_ADDR INTC_INT2PRI6 | ||
260 | #define SIOF_IPR_POS 3 | ||
261 | #define SIOF_PRIORITY 3 | ||
262 | |||
263 | /* HSPI */ | ||
264 | #define HSPI_IRQ 84 | ||
265 | #define HSPI_IPR_ADDR INTC_INT2PRI6 | ||
266 | #define HSPI_IPR_POS 2 | ||
267 | #define HSPI_PRIORITY 3 | ||
268 | |||
269 | /* MMCIF */ | ||
270 | #define MMCIF_FSTAT_IRQ 88 | ||
271 | #define MMCIF_TRAN_IRQ 89 | ||
272 | #define MMCIF_ERR_IRQ 90 | ||
273 | #define MMCIF_FRDY_IRQ 91 | ||
274 | #define MMCIF_IPR_ADDR INTC_INT2PRI6 | ||
275 | #define MMCIF_IPR_POS 1 | ||
276 | #define HSPI_PRIORITY 3 | ||
277 | |||
278 | /* SSI */ | ||
279 | #define SSI_IRQ 100 | ||
280 | #define SSI_IPR_ADDR INTC_INT2PRI6 | ||
281 | #define SSI_IPR_POS 0 | ||
282 | #define SSI_PRIORITY 3 | ||
283 | |||
284 | /* FLCTL */ | ||
285 | #define FLCTL_FLSTE_IRQ 104 | ||
286 | #define FLCTL_FLTEND_IRQ 105 | ||
287 | #define FLCTL_FLTRQ0_IRQ 106 | ||
288 | #define FLCTL_FLTRQ1_IRQ 107 | ||
289 | #define FLCTL_IPR_ADDR INTC_INT2PRI7 | ||
290 | #define FLCTL_IPR_POS 3 | ||
291 | #define FLCTL_PRIORITY 3 | ||
292 | |||
293 | /* GPIO */ | ||
294 | #define GPIO0_IRQ 108 | ||
295 | #define GPIO1_IRQ 109 | ||
296 | #define GPIO2_IRQ 110 | ||
297 | #define GPIO3_IRQ 111 | ||
298 | #define GPIO_IPR_ADDR INTC_INT2PRI7 | ||
299 | #define GPIO_IPR_POS 2 | ||
300 | #define GPIO_PRIORITY 3 | ||
301 | |||
302 | /* ONCHIP_NR_IRQS */ | ||
303 | #define NR_IRQS 150 /* 111 + 16 */ | ||
304 | |||
305 | /* In a generic kernel, NR_IRQS is an upper bound, and we should use | ||
306 | * ACTUAL_NR_IRQS (which uses the machine vector) to get the correct value. | ||
307 | */ | ||
308 | #define ACTUAL_NR_IRQS NR_IRQS | ||
309 | |||
310 | extern void disable_irq(unsigned int); | ||
311 | extern void disable_irq_nosync(unsigned int); | ||
312 | extern void enable_irq(unsigned int); | ||
313 | |||
314 | /* | ||
315 | * Simple Mask Register Support | ||
316 | */ | ||
317 | extern void make_maskreg_irq(unsigned int irq); | ||
318 | extern unsigned short *irq_mask_register; | ||
319 | |||
320 | /* | ||
321 | * Function for "on chip support modules". | ||
322 | */ | ||
323 | extern void make_imask_irq(unsigned int irq); | ||
324 | |||
325 | #define INTC_TMU0_MSK 0 | ||
326 | #define INTC_TMU3_MSK 1 | ||
327 | #define INTC_RTC_MSK 2 | ||
328 | #define INTC_SCIF0_MSK 3 | ||
329 | #define INTC_SCIF1_MSK 4 | ||
330 | #define INTC_WDT_MSK 5 | ||
331 | #define INTC_HUID_MSK 7 | ||
332 | #define INTC_DMAC0_MSK 8 | ||
333 | #define INTC_DMAC1_MSK 9 | ||
334 | #define INTC_CMT_MSK 12 | ||
335 | #define INTC_HAC_MSK 13 | ||
336 | #define INTC_PCIC0_MSK 14 | ||
337 | #define INTC_PCIC1_MSK 15 | ||
338 | #define INTC_PCIC2_MSK 16 | ||
339 | #define INTC_PCIC3_MSK 17 | ||
340 | #define INTC_PCIC4_MSK 18 | ||
341 | #define INTC_PCIC5_MSK 19 | ||
342 | #define INTC_SIOF_MSK 20 | ||
343 | #define INTC_HSPI_MSK 21 | ||
344 | #define INTC_MMCIF_MSK 22 | ||
345 | #define INTC_SSI_MSK 23 | ||
346 | #define INTC_FLCTL_MSK 24 | ||
347 | #define INTC_GPIO_MSK 25 | ||
348 | |||
349 | #endif /* __ASM_SH_IRQ_SH7780_H */ | ||
diff --git a/include/asm-sh/irq.h b/include/asm-sh/irq.h index 614a8c13b721..060ec3c27207 100644 --- a/include/asm-sh/irq.h +++ b/include/asm-sh/irq.h | |||
@@ -15,13 +15,20 @@ | |||
15 | #include <asm/machvec.h> | 15 | #include <asm/machvec.h> |
16 | #include <asm/ptrace.h> /* for pt_regs */ | 16 | #include <asm/ptrace.h> /* for pt_regs */ |
17 | 17 | ||
18 | #if defined(CONFIG_SH_HP600) || \ | 18 | #if defined(CONFIG_SH_HP6XX) || \ |
19 | defined(CONFIG_SH_RTS7751R2D) || \ | 19 | defined(CONFIG_SH_RTS7751R2D) || \ |
20 | defined(CONFIG_SH_HS7751RVOIP) || \ | 20 | defined(CONFIG_SH_HS7751RVOIP) || \ |
21 | defined(CONFIG_SH_SH03) | 21 | defined(CONFIG_SH_HS7751RVOIP) || \ |
22 | defined(CONFIG_SH_SH03) || \ | ||
23 | defined(CONFIG_SH_R7780RP) || \ | ||
24 | defined(CONFIG_SH_LANDISK) | ||
22 | #include <asm/mach/ide.h> | 25 | #include <asm/mach/ide.h> |
23 | #endif | 26 | #endif |
24 | 27 | ||
28 | #ifndef CONFIG_CPU_SUBTYPE_SH7780 | ||
29 | |||
30 | #define INTC_DMAC0_MSK 0 | ||
31 | |||
25 | #if defined(CONFIG_CPU_SH3) | 32 | #if defined(CONFIG_CPU_SH3) |
26 | #define INTC_IPRA 0xfffffee2UL | 33 | #define INTC_IPRA 0xfffffee2UL |
27 | #define INTC_IPRB 0xfffffee4UL | 34 | #define INTC_IPRB 0xfffffee4UL |
@@ -235,8 +242,9 @@ | |||
235 | #define SCIF1_IPR_ADDR INTC_IPRB | 242 | #define SCIF1_IPR_ADDR INTC_IPRB |
236 | #define SCIF1_IPR_POS 1 | 243 | #define SCIF1_IPR_POS 1 |
237 | #define SCIF1_PRIORITY 3 | 244 | #define SCIF1_PRIORITY 3 |
238 | #endif | 245 | #endif /* ST40STB1 */ |
239 | #endif | 246 | |
247 | #endif /* 775x / SH4-202 / ST40STB1 */ | ||
240 | 248 | ||
241 | /* NR_IRQS is made from three components: | 249 | /* NR_IRQS is made from three components: |
242 | * 1. ONCHIP_NR_IRQS - number of IRLS + on-chip peripherial modules | 250 | * 1. ONCHIP_NR_IRQS - number of IRLS + on-chip peripherial modules |
@@ -245,37 +253,35 @@ | |||
245 | */ | 253 | */ |
246 | 254 | ||
247 | /* 1. ONCHIP_NR_IRQS */ | 255 | /* 1. ONCHIP_NR_IRQS */ |
248 | #ifdef CONFIG_SH_GENERIC | 256 | #if defined(CONFIG_CPU_SUBTYPE_SH7604) |
257 | # define ONCHIP_NR_IRQS 24 // Actually 21 | ||
258 | #elif defined(CONFIG_CPU_SUBTYPE_SH7707) | ||
259 | # define ONCHIP_NR_IRQS 64 | ||
260 | # define PINT_NR_IRQS 16 | ||
261 | #elif defined(CONFIG_CPU_SUBTYPE_SH7708) | ||
262 | # define ONCHIP_NR_IRQS 32 | ||
263 | #elif defined(CONFIG_CPU_SUBTYPE_SH7709) || \ | ||
264 | defined(CONFIG_CPU_SUBTYPE_SH7705) | ||
265 | # define ONCHIP_NR_IRQS 64 // Actually 61 | ||
266 | # define PINT_NR_IRQS 16 | ||
267 | #elif defined(CONFIG_CPU_SUBTYPE_SH7750) | ||
268 | # define ONCHIP_NR_IRQS 48 // Actually 44 | ||
269 | #elif defined(CONFIG_CPU_SUBTYPE_SH7751) | ||
270 | # define ONCHIP_NR_IRQS 72 | ||
271 | #elif defined(CONFIG_CPU_SUBTYPE_SH7760) | ||
272 | # define ONCHIP_NR_IRQS 112 /* XXX */ | ||
273 | #elif defined(CONFIG_CPU_SUBTYPE_SH4_202) | ||
274 | # define ONCHIP_NR_IRQS 72 | ||
275 | #elif defined(CONFIG_CPU_SUBTYPE_ST40STB1) | ||
276 | # define ONCHIP_NR_IRQS 144 | ||
277 | #elif defined(CONFIG_CPU_SUBTYPE_SH7300) | ||
278 | # define ONCHIP_NR_IRQS 109 | ||
279 | #elif defined(CONFIG_SH_UNKNOWN) /* Most be last */ | ||
249 | # define ONCHIP_NR_IRQS 144 | 280 | # define ONCHIP_NR_IRQS 144 |
250 | #else | ||
251 | # if defined(CONFIG_CPU_SUBTYPE_SH7604) | ||
252 | # define ONCHIP_NR_IRQS 24 // Actually 21 | ||
253 | # elif defined(CONFIG_CPU_SUBTYPE_SH7707) | ||
254 | # define ONCHIP_NR_IRQS 64 | ||
255 | # define PINT_NR_IRQS 16 | ||
256 | # elif defined(CONFIG_CPU_SUBTYPE_SH7708) | ||
257 | # define ONCHIP_NR_IRQS 32 | ||
258 | # elif defined(CONFIG_CPU_SUBTYPE_SH7709) || \ | ||
259 | defined(CONFIG_CPU_SUBTYPE_SH7705) | ||
260 | # define ONCHIP_NR_IRQS 64 // Actually 61 | ||
261 | # define PINT_NR_IRQS 16 | ||
262 | # elif defined(CONFIG_CPU_SUBTYPE_SH7750) | ||
263 | # define ONCHIP_NR_IRQS 48 // Actually 44 | ||
264 | # elif defined(CONFIG_CPU_SUBTYPE_SH7751) | ||
265 | # define ONCHIP_NR_IRQS 72 | ||
266 | # elif defined(CONFIG_CPU_SUBTYPE_SH7760) | ||
267 | # define ONCHIP_NR_IRQS 110 | ||
268 | # elif defined(CONFIG_CPU_SUBTYPE_SH4_202) | ||
269 | # define ONCHIP_NR_IRQS 72 | ||
270 | # elif defined(CONFIG_CPU_SUBTYPE_ST40STB1) | ||
271 | # define ONCHIP_NR_IRQS 144 | ||
272 | # elif defined(CONFIG_CPU_SUBTYPE_SH7300) | ||
273 | # define ONCHIP_NR_IRQS 109 | ||
274 | # endif | ||
275 | #endif | 281 | #endif |
276 | 282 | ||
277 | /* 2. PINT_NR_IRQS */ | 283 | /* 2. PINT_NR_IRQS */ |
278 | #ifdef CONFIG_SH_GENERIC | 284 | #ifdef CONFIG_SH_UNKNOWN |
279 | # define PINT_NR_IRQS 16 | 285 | # define PINT_NR_IRQS 16 |
280 | #else | 286 | #else |
281 | # ifndef PINT_NR_IRQS | 287 | # ifndef PINT_NR_IRQS |
@@ -288,22 +294,22 @@ | |||
288 | #endif | 294 | #endif |
289 | 295 | ||
290 | /* 3. OFFCHIP_NR_IRQS */ | 296 | /* 3. OFFCHIP_NR_IRQS */ |
291 | #ifdef CONFIG_SH_GENERIC | 297 | #if defined(CONFIG_HD64461) |
298 | # define OFFCHIP_NR_IRQS 18 | ||
299 | #elif defined (CONFIG_SH_BIGSUR) /* must be before CONFIG_HD64465 */ | ||
300 | # define OFFCHIP_NR_IRQS 48 | ||
301 | #elif defined(CONFIG_HD64465) | ||
292 | # define OFFCHIP_NR_IRQS 16 | 302 | # define OFFCHIP_NR_IRQS 16 |
303 | #elif defined (CONFIG_SH_EC3104) | ||
304 | # define OFFCHIP_NR_IRQS 16 | ||
305 | #elif defined (CONFIG_SH_DREAMCAST) | ||
306 | # define OFFCHIP_NR_IRQS 96 | ||
307 | #elif defined (CONFIG_SH_TITAN) | ||
308 | # define OFFCHIP_NR_IRQS 4 | ||
309 | #elif defined(CONFIG_SH_UNKNOWN) | ||
310 | # define OFFCHIP_NR_IRQS 16 /* Must also be last */ | ||
293 | #else | 311 | #else |
294 | # if defined(CONFIG_HD64461) | 312 | # define OFFCHIP_NR_IRQS 0 |
295 | # define OFFCHIP_NR_IRQS 18 | ||
296 | # elif defined (CONFIG_SH_BIGSUR) /* must be before CONFIG_HD64465 */ | ||
297 | # define OFFCHIP_NR_IRQS 48 | ||
298 | # elif defined(CONFIG_HD64465) | ||
299 | # define OFFCHIP_NR_IRQS 16 | ||
300 | # elif defined (CONFIG_SH_EC3104) | ||
301 | # define OFFCHIP_NR_IRQS 16 | ||
302 | # elif defined (CONFIG_SH_DREAMCAST) | ||
303 | # define OFFCHIP_NR_IRQS 96 | ||
304 | # else | ||
305 | # define OFFCHIP_NR_IRQS 0 | ||
306 | # endif | ||
307 | #endif | 313 | #endif |
308 | 314 | ||
309 | #if OFFCHIP_NR_IRQS > 0 | 315 | #if OFFCHIP_NR_IRQS > 0 |
@@ -313,16 +319,6 @@ | |||
313 | /* NR_IRQS. 1+2+3 */ | 319 | /* NR_IRQS. 1+2+3 */ |
314 | #define NR_IRQS (ONCHIP_NR_IRQS + PINT_NR_IRQS + OFFCHIP_NR_IRQS) | 320 | #define NR_IRQS (ONCHIP_NR_IRQS + PINT_NR_IRQS + OFFCHIP_NR_IRQS) |
315 | 321 | ||
316 | /* In a generic kernel, NR_IRQS is an upper bound, and we should use | ||
317 | * ACTUAL_NR_IRQS (which uses the machine vector) to get the correct value. | ||
318 | */ | ||
319 | #ifdef CONFIG_SH_GENERIC | ||
320 | # define ACTUAL_NR_IRQS (sh_mv.mv_nr_irqs) | ||
321 | #else | ||
322 | # define ACTUAL_NR_IRQS NR_IRQS | ||
323 | #endif | ||
324 | |||
325 | |||
326 | extern void disable_irq(unsigned int); | 322 | extern void disable_irq(unsigned int); |
327 | extern void disable_irq_nosync(unsigned int); | 323 | extern void disable_irq_nosync(unsigned int); |
328 | extern void enable_irq(unsigned int); | 324 | extern void enable_irq(unsigned int); |
@@ -542,9 +538,6 @@ extern int ipr_irq_demux(int irq); | |||
542 | 538 | ||
543 | extern int ipr_irq_demux(int irq); | 539 | extern int ipr_irq_demux(int irq); |
544 | #define __irq_demux(irq) ipr_irq_demux(irq) | 540 | #define __irq_demux(irq) ipr_irq_demux(irq) |
545 | |||
546 | #else | ||
547 | #define __irq_demux(irq) irq | ||
548 | #endif /* CONFIG_CPU_SUBTYPE_SH7707 || CONFIG_CPU_SUBTYPE_SH7709 */ | 541 | #endif /* CONFIG_CPU_SUBTYPE_SH7707 || CONFIG_CPU_SUBTYPE_SH7709 */ |
549 | 542 | ||
550 | #if defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_SH7751) || \ | 543 | #if defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_SH7751) || \ |
@@ -557,18 +550,35 @@ extern int ipr_irq_demux(int irq); | |||
557 | #define INTC_ICR_IRLM (1<<7) | 550 | #define INTC_ICR_IRLM (1<<7) |
558 | #endif | 551 | #endif |
559 | 552 | ||
560 | #ifdef CONFIG_CPU_SUBTYPE_ST40STB1 | 553 | #else |
554 | #include <asm/irq-sh7780.h> | ||
555 | #endif | ||
561 | 556 | ||
557 | /* SH with INTC2-style interrupts */ | ||
558 | #ifdef CONFIG_CPU_HAS_INTC2_IRQ | ||
559 | #if defined(CONFIG_CPU_SUBTYPE_ST40STB1) | ||
560 | #define INTC2_BASE 0xfe080000 | ||
562 | #define INTC2_FIRST_IRQ 64 | 561 | #define INTC2_FIRST_IRQ 64 |
563 | #define NR_INTC2_IRQS 25 | 562 | #define INTC2_INTREQ_OFFSET 0x20 |
564 | 563 | #define INTC2_INTMSK_OFFSET 0x40 | |
564 | #define INTC2_INTMSKCLR_OFFSET 0x60 | ||
565 | #define NR_INTC2_IRQS 25 | ||
566 | #elif defined(CONFIG_CPU_SUBTYPE_SH7760) | ||
565 | #define INTC2_BASE 0xfe080000 | 567 | #define INTC2_BASE 0xfe080000 |
566 | #define INTC2_INTC2MODE (INTC2_BASE+0x80) | 568 | #define INTC2_FIRST_IRQ 48 /* INTEVT 0x800 */ |
567 | |||
568 | #define INTC2_INTPRI_OFFSET 0x00 | ||
569 | #define INTC2_INTREQ_OFFSET 0x20 | 569 | #define INTC2_INTREQ_OFFSET 0x20 |
570 | #define INTC2_INTMSK_OFFSET 0x40 | 570 | #define INTC2_INTMSK_OFFSET 0x40 |
571 | #define INTC2_INTMSKCLR_OFFSET 0x60 | 571 | #define INTC2_INTMSKCLR_OFFSET 0x60 |
572 | #define NR_INTC2_IRQS 64 | ||
573 | #elif defined(CONFIG_CPU_SUBTYPE_SH7780) | ||
574 | #define INTC2_BASE 0xffd40000 | ||
575 | #define INTC2_FIRST_IRQ 22 | ||
576 | #define INTC2_INTMSK_OFFSET (0x38) | ||
577 | #define INTC2_INTMSKCLR_OFFSET (0x3c) | ||
578 | #define NR_INTC2_IRQS 60 | ||
579 | #endif | ||
580 | |||
581 | #define INTC2_INTPRI_OFFSET 0x00 | ||
572 | 582 | ||
573 | void make_intc2_irq(unsigned int irq, | 583 | void make_intc2_irq(unsigned int irq, |
574 | unsigned int ipr_offset, unsigned int ipr_shift, | 584 | unsigned int ipr_offset, unsigned int ipr_shift, |
@@ -577,13 +587,16 @@ void make_intc2_irq(unsigned int irq, | |||
577 | void init_IRQ_intc2(void); | 587 | void init_IRQ_intc2(void); |
578 | void intc2_add_clear_irq(int irq, int (*fn)(int)); | 588 | void intc2_add_clear_irq(int irq, int (*fn)(int)); |
579 | 589 | ||
580 | #endif /* CONFIG_CPU_SUBTYPE_ST40STB1 */ | 590 | #endif |
581 | 591 | ||
582 | static inline int generic_irq_demux(int irq) | 592 | static inline int generic_irq_demux(int irq) |
583 | { | 593 | { |
584 | return irq; | 594 | return irq; |
585 | } | 595 | } |
586 | 596 | ||
597 | #ifndef __irq_demux | ||
598 | #define __irq_demux(irq) (irq) | ||
599 | #endif | ||
587 | #define irq_canonicalize(irq) (irq) | 600 | #define irq_canonicalize(irq) (irq) |
588 | #define irq_demux(irq) __irq_demux(sh_mv.mv_irq_demux(irq)) | 601 | #define irq_demux(irq) __irq_demux(sh_mv.mv_irq_demux(irq)) |
589 | 602 | ||
diff --git a/include/asm-sh/kexec.h b/include/asm-sh/kexec.h new file mode 100644 index 000000000000..9dfe59f6fcb5 --- /dev/null +++ b/include/asm-sh/kexec.h | |||
@@ -0,0 +1,33 @@ | |||
1 | #ifndef _SH_KEXEC_H | ||
2 | #define _SH_KEXEC_H | ||
3 | |||
4 | /* | ||
5 | * KEXEC_SOURCE_MEMORY_LIMIT maximum page get_free_page can return. | ||
6 | * I.e. Maximum page that is mapped directly into kernel memory, | ||
7 | * and kmap is not required. | ||
8 | * | ||
9 | * Someone correct me if FIXADDR_START - PAGEOFFSET is not the correct | ||
10 | * calculation for the amount of memory directly mappable into the | ||
11 | * kernel memory space. | ||
12 | */ | ||
13 | |||
14 | /* Maximum physical address we can use pages from */ | ||
15 | #define KEXEC_SOURCE_MEMORY_LIMIT (-1UL) | ||
16 | /* Maximum address we can reach in physical address mode */ | ||
17 | #define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL) | ||
18 | /* Maximum address we can use for the control code buffer */ | ||
19 | #define KEXEC_CONTROL_MEMORY_LIMIT TASK_SIZE | ||
20 | |||
21 | #define KEXEC_CONTROL_CODE_SIZE 4096 | ||
22 | |||
23 | /* The native architecture */ | ||
24 | #define KEXEC_ARCH KEXEC_ARCH_SH | ||
25 | |||
26 | #ifndef __ASSEMBLY__ | ||
27 | |||
28 | extern void machine_shutdown(void); | ||
29 | extern void *crash_notes; | ||
30 | |||
31 | #endif /* __ASSEMBLY__ */ | ||
32 | |||
33 | #endif /* _SH_KEXEC_H */ | ||
diff --git a/include/asm-sh/machvec.h b/include/asm-sh/machvec.h index 3f18aa180516..550c50a7359e 100644 --- a/include/asm-sh/machvec.h +++ b/include/asm-sh/machvec.h | |||
@@ -18,44 +18,37 @@ | |||
18 | #include <asm/machvec_init.h> | 18 | #include <asm/machvec_init.h> |
19 | 19 | ||
20 | struct device; | 20 | struct device; |
21 | struct timeval; | ||
22 | 21 | ||
23 | struct sh_machine_vector | 22 | struct sh_machine_vector { |
24 | { | ||
25 | int mv_nr_irqs; | 23 | int mv_nr_irqs; |
26 | 24 | ||
27 | unsigned char (*mv_inb)(unsigned long); | 25 | u8 (*mv_inb)(unsigned long); |
28 | unsigned short (*mv_inw)(unsigned long); | 26 | u16 (*mv_inw)(unsigned long); |
29 | unsigned int (*mv_inl)(unsigned long); | 27 | u32 (*mv_inl)(unsigned long); |
30 | void (*mv_outb)(unsigned char, unsigned long); | 28 | void (*mv_outb)(u8, unsigned long); |
31 | void (*mv_outw)(unsigned short, unsigned long); | 29 | void (*mv_outw)(u16, unsigned long); |
32 | void (*mv_outl)(unsigned int, unsigned long); | 30 | void (*mv_outl)(u32, unsigned long); |
33 | 31 | ||
34 | unsigned char (*mv_inb_p)(unsigned long); | 32 | u8 (*mv_inb_p)(unsigned long); |
35 | unsigned short (*mv_inw_p)(unsigned long); | 33 | u16 (*mv_inw_p)(unsigned long); |
36 | unsigned int (*mv_inl_p)(unsigned long); | 34 | u32 (*mv_inl_p)(unsigned long); |
37 | void (*mv_outb_p)(unsigned char, unsigned long); | 35 | void (*mv_outb_p)(u8, unsigned long); |
38 | void (*mv_outw_p)(unsigned short, unsigned long); | 36 | void (*mv_outw_p)(u16, unsigned long); |
39 | void (*mv_outl_p)(unsigned int, unsigned long); | 37 | void (*mv_outl_p)(u32, unsigned long); |
40 | 38 | ||
41 | void (*mv_insb)(unsigned long port, void *addr, unsigned long count); | 39 | void (*mv_insb)(unsigned long, void *dst, unsigned long count); |
42 | void (*mv_insw)(unsigned long port, void *addr, unsigned long count); | 40 | void (*mv_insw)(unsigned long, void *dst, unsigned long count); |
43 | void (*mv_insl)(unsigned long port, void *addr, unsigned long count); | 41 | void (*mv_insl)(unsigned long, void *dst, unsigned long count); |
44 | void (*mv_outsb)(unsigned long port, const void *addr, unsigned long count); | 42 | void (*mv_outsb)(unsigned long, const void *src, unsigned long count); |
45 | void (*mv_outsw)(unsigned long port, const void *addr, unsigned long count); | 43 | void (*mv_outsw)(unsigned long, const void *src, unsigned long count); |
46 | void (*mv_outsl)(unsigned long port, const void *addr, unsigned long count); | 44 | void (*mv_outsl)(unsigned long, const void *src, unsigned long count); |
47 | 45 | ||
48 | unsigned char (*mv_readb)(unsigned long); | 46 | u8 (*mv_readb)(void __iomem *); |
49 | unsigned short (*mv_readw)(unsigned long); | 47 | u16 (*mv_readw)(void __iomem *); |
50 | unsigned int (*mv_readl)(unsigned long); | 48 | u32 (*mv_readl)(void __iomem *); |
51 | void (*mv_writeb)(unsigned char, unsigned long); | 49 | void (*mv_writeb)(u8, void __iomem *); |
52 | void (*mv_writew)(unsigned short, unsigned long); | 50 | void (*mv_writew)(u16, void __iomem *); |
53 | void (*mv_writel)(unsigned int, unsigned long); | 51 | void (*mv_writel)(u32, void __iomem *); |
54 | |||
55 | void* (*mv_ioremap)(unsigned long offset, unsigned long size); | ||
56 | void (*mv_iounmap)(void *addr); | ||
57 | |||
58 | unsigned long (*mv_isa_port2addr)(unsigned long offset); | ||
59 | 52 | ||
60 | int (*mv_irq_demux)(int irq); | 53 | int (*mv_irq_demux)(int irq); |
61 | 54 | ||
@@ -66,6 +59,9 @@ struct sh_machine_vector | |||
66 | 59 | ||
67 | void *(*mv_consistent_alloc)(struct device *, size_t, dma_addr_t *, gfp_t); | 60 | void *(*mv_consistent_alloc)(struct device *, size_t, dma_addr_t *, gfp_t); |
68 | int (*mv_consistent_free)(struct device *, size_t, void *, dma_addr_t); | 61 | int (*mv_consistent_free)(struct device *, size_t, void *, dma_addr_t); |
62 | |||
63 | void __iomem *(*mv_ioport_map)(unsigned long port, unsigned int size); | ||
64 | void (*mv_ioport_unmap)(void __iomem *); | ||
69 | }; | 65 | }; |
70 | 66 | ||
71 | extern struct sh_machine_vector sh_mv; | 67 | extern struct sh_machine_vector sh_mv; |
diff --git a/include/asm-sh/timer.h b/include/asm-sh/timer.h new file mode 100644 index 000000000000..dd6579c0b04c --- /dev/null +++ b/include/asm-sh/timer.h | |||
@@ -0,0 +1,42 @@ | |||
1 | #ifndef __ASM_SH_TIMER_H | ||
2 | #define __ASM_SH_TIMER_H | ||
3 | |||
4 | #include <linux/sysdev.h> | ||
5 | #include <asm/cpu/timer.h> | ||
6 | |||
7 | struct sys_timer_ops { | ||
8 | int (*init)(void); | ||
9 | unsigned long (*get_offset)(void); | ||
10 | unsigned long (*get_frequency)(void); | ||
11 | }; | ||
12 | |||
13 | struct sys_timer { | ||
14 | const char *name; | ||
15 | |||
16 | struct sys_device dev; | ||
17 | struct sys_timer_ops *ops; | ||
18 | }; | ||
19 | |||
20 | #define TICK_SIZE (tick_nsec / 1000) | ||
21 | |||
22 | extern struct sys_timer tmu_timer; | ||
23 | extern struct sys_timer *sys_timer; | ||
24 | |||
25 | static inline unsigned long get_timer_offset(void) | ||
26 | { | ||
27 | return sys_timer->ops->get_offset(); | ||
28 | } | ||
29 | |||
30 | static inline unsigned long get_timer_frequency(void) | ||
31 | { | ||
32 | return sys_timer->ops->get_frequency(); | ||
33 | } | ||
34 | |||
35 | /* arch/sh/kernel/timers/timer.c */ | ||
36 | struct sys_timer *get_sys_timer(void); | ||
37 | |||
38 | /* arch/sh/kernel/time.c */ | ||
39 | void handle_timer_tick(struct pt_regs *); | ||
40 | |||
41 | #endif /* __ASM_SH_TIMER_H */ | ||
42 | |||
diff --git a/include/asm-v850/ptrace.h b/include/asm-v850/ptrace.h index 7bf72bb5078c..4f35cf2cd641 100644 --- a/include/asm-v850/ptrace.h +++ b/include/asm-v850/ptrace.h | |||
@@ -92,7 +92,7 @@ struct pt_regs | |||
92 | /* The number of bytes used to store each register. */ | 92 | /* The number of bytes used to store each register. */ |
93 | #define _PT_REG_SIZE 4 | 93 | #define _PT_REG_SIZE 4 |
94 | 94 | ||
95 | /* Offset of a general purpose register in a stuct pt_regs. */ | 95 | /* Offset of a general purpose register in a struct pt_regs. */ |
96 | #define PT_GPR(num) ((num) * _PT_REG_SIZE) | 96 | #define PT_GPR(num) ((num) * _PT_REG_SIZE) |
97 | 97 | ||
98 | /* Offsets of various special registers & fields in a struct pt_regs. */ | 98 | /* Offsets of various special registers & fields in a struct pt_regs. */ |
diff --git a/include/asm-x86_64/fixmap.h b/include/asm-x86_64/fixmap.h index a582cfcf2231..7b286bd21d1d 100644 --- a/include/asm-x86_64/fixmap.h +++ b/include/asm-x86_64/fixmap.h | |||
@@ -76,7 +76,7 @@ extern void __this_fixmap_does_not_exist(void); | |||
76 | * directly without translation, we catch the bug with a NULL-deference | 76 | * directly without translation, we catch the bug with a NULL-deference |
77 | * kernel oops. Illegal ranges of incoming indices are caught too. | 77 | * kernel oops. Illegal ranges of incoming indices are caught too. |
78 | */ | 78 | */ |
79 | static inline unsigned long fix_to_virt(const unsigned int idx) | 79 | static __always_inline unsigned long fix_to_virt(const unsigned int idx) |
80 | { | 80 | { |
81 | /* | 81 | /* |
82 | * this branch gets completely eliminated after inlining, | 82 | * this branch gets completely eliminated after inlining, |
diff --git a/include/asm-x86_64/ia32.h b/include/asm-x86_64/ia32.h index c7bc9c0525ba..e6b7f2234e43 100644 --- a/include/asm-x86_64/ia32.h +++ b/include/asm-x86_64/ia32.h | |||
@@ -169,6 +169,8 @@ int ia32_child_tls(struct task_struct *p, struct pt_regs *childregs); | |||
169 | struct linux_binprm; | 169 | struct linux_binprm; |
170 | extern int ia32_setup_arg_pages(struct linux_binprm *bprm, | 170 | extern int ia32_setup_arg_pages(struct linux_binprm *bprm, |
171 | unsigned long stack_top, int exec_stack); | 171 | unsigned long stack_top, int exec_stack); |
172 | struct mm_struct; | ||
173 | extern void ia32_pick_mmap_layout(struct mm_struct *mm); | ||
172 | 174 | ||
173 | #endif | 175 | #endif |
174 | 176 | ||
diff --git a/include/asm-x86_64/irq.h b/include/asm-x86_64/irq.h index fb724ba37ae6..9db5a1b4f7b1 100644 --- a/include/asm-x86_64/irq.h +++ b/include/asm-x86_64/irq.h | |||
@@ -36,7 +36,7 @@ | |||
36 | #define NR_IRQ_VECTORS NR_IRQS | 36 | #define NR_IRQ_VECTORS NR_IRQS |
37 | #else | 37 | #else |
38 | #define NR_IRQS 224 | 38 | #define NR_IRQS 224 |
39 | #define NR_IRQ_VECTORS 1024 | 39 | #define NR_IRQ_VECTORS (32 * NR_CPUS) |
40 | #endif | 40 | #endif |
41 | 41 | ||
42 | static __inline__ int irq_canonicalize(int irq) | 42 | static __inline__ int irq_canonicalize(int irq) |
diff --git a/include/asm-x86_64/page.h b/include/asm-x86_64/page.h index dcbb4fcd9a18..615e3e494929 100644 --- a/include/asm-x86_64/page.h +++ b/include/asm-x86_64/page.h | |||
@@ -26,6 +26,13 @@ | |||
26 | #define IRQSTACK_ORDER 2 | 26 | #define IRQSTACK_ORDER 2 |
27 | #define IRQSTACKSIZE (PAGE_SIZE << IRQSTACK_ORDER) | 27 | #define IRQSTACKSIZE (PAGE_SIZE << IRQSTACK_ORDER) |
28 | 28 | ||
29 | #define STACKFAULT_STACK 1 | ||
30 | #define DOUBLEFAULT_STACK 2 | ||
31 | #define NMI_STACK 3 | ||
32 | #define DEBUG_STACK 4 | ||
33 | #define MCE_STACK 5 | ||
34 | #define N_EXCEPTION_STACKS 5 /* hw limit: 7 */ | ||
35 | |||
29 | #define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1)) | 36 | #define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1)) |
30 | #define LARGE_PAGE_SIZE (1UL << PMD_SHIFT) | 37 | #define LARGE_PAGE_SIZE (1UL << PMD_SHIFT) |
31 | 38 | ||
diff --git a/include/asm-x86_64/processor.h b/include/asm-x86_64/processor.h index 87a282b1043a..8c8d88c036ed 100644 --- a/include/asm-x86_64/processor.h +++ b/include/asm-x86_64/processor.h | |||
@@ -273,13 +273,6 @@ struct thread_struct { | |||
273 | #define INIT_MMAP \ | 273 | #define INIT_MMAP \ |
274 | { &init_mm, 0, 0, NULL, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, 1, NULL, NULL } | 274 | { &init_mm, 0, 0, NULL, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, 1, NULL, NULL } |
275 | 275 | ||
276 | #define STACKFAULT_STACK 1 | ||
277 | #define DOUBLEFAULT_STACK 2 | ||
278 | #define NMI_STACK 3 | ||
279 | #define DEBUG_STACK 4 | ||
280 | #define MCE_STACK 5 | ||
281 | #define N_EXCEPTION_STACKS 5 /* hw limit: 7 */ | ||
282 | |||
283 | #define start_thread(regs,new_rip,new_rsp) do { \ | 276 | #define start_thread(regs,new_rip,new_rsp) do { \ |
284 | asm volatile("movl %0,%%fs; movl %0,%%es; movl %0,%%ds": :"r" (0)); \ | 277 | asm volatile("movl %0,%%fs; movl %0,%%es; movl %0,%%ds": :"r" (0)); \ |
285 | load_gs_index(0); \ | 278 | load_gs_index(0); \ |
@@ -484,4 +477,6 @@ extern unsigned long boot_option_idle_override; | |||
484 | /* Boot loader type from the setup header */ | 477 | /* Boot loader type from the setup header */ |
485 | extern int bootloader_type; | 478 | extern int bootloader_type; |
486 | 479 | ||
480 | #define HAVE_ARCH_PICK_MMAP_LAYOUT 1 | ||
481 | |||
487 | #endif /* __ASM_X86_64_PROCESSOR_H */ | 482 | #endif /* __ASM_X86_64_PROCESSOR_H */ |
diff --git a/include/asm-x86_64/system.h b/include/asm-x86_64/system.h index 0eacbefb7dd0..a73f0c789d8b 100644 --- a/include/asm-x86_64/system.h +++ b/include/asm-x86_64/system.h | |||
@@ -354,11 +354,6 @@ static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, | |||
354 | #define local_irq_disable() __asm__ __volatile__("cli": : :"memory") | 354 | #define local_irq_disable() __asm__ __volatile__("cli": : :"memory") |
355 | #define local_irq_enable() __asm__ __volatile__("sti": : :"memory") | 355 | #define local_irq_enable() __asm__ __volatile__("sti": : :"memory") |
356 | 356 | ||
357 | /* used in the idle loop; sti takes one instruction cycle to complete */ | ||
358 | #define safe_halt() __asm__ __volatile__("sti; hlt": : :"memory") | ||
359 | /* used when interrupts are already enabled or to shutdown the processor */ | ||
360 | #define halt() __asm__ __volatile__("hlt": : :"memory") | ||
361 | |||
362 | #define irqs_disabled() \ | 357 | #define irqs_disabled() \ |
363 | ({ \ | 358 | ({ \ |
364 | unsigned long flags; \ | 359 | unsigned long flags; \ |
@@ -370,6 +365,11 @@ static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, | |||
370 | #define local_irq_save(x) do { warn_if_not_ulong(x); __asm__ __volatile__("# local_irq_save \n\t pushfq ; popq %0 ; cli":"=g" (x): /* no input */ :"memory"); } while (0) | 365 | #define local_irq_save(x) do { warn_if_not_ulong(x); __asm__ __volatile__("# local_irq_save \n\t pushfq ; popq %0 ; cli":"=g" (x): /* no input */ :"memory"); } while (0) |
371 | #endif | 366 | #endif |
372 | 367 | ||
368 | /* used in the idle loop; sti takes one instruction cycle to complete */ | ||
369 | #define safe_halt() __asm__ __volatile__("sti; hlt": : :"memory") | ||
370 | /* used when interrupts are already enabled or to shutdown the processor */ | ||
371 | #define halt() __asm__ __volatile__("hlt": : :"memory") | ||
372 | |||
373 | void cpu_idle_wait(void); | 373 | void cpu_idle_wait(void); |
374 | 374 | ||
375 | extern unsigned long arch_align_stack(unsigned long sp); | 375 | extern unsigned long arch_align_stack(unsigned long sp); |
diff --git a/include/asm-x86_64/uaccess.h b/include/asm-x86_64/uaccess.h index 2892c4b7a28b..bddffcb591b8 100644 --- a/include/asm-x86_64/uaccess.h +++ b/include/asm-x86_64/uaccess.h | |||
@@ -244,7 +244,7 @@ extern unsigned long copy_to_user(void __user *to, const void *from, unsigned le | |||
244 | extern unsigned long copy_from_user(void *to, const void __user *from, unsigned len); | 244 | extern unsigned long copy_from_user(void *to, const void __user *from, unsigned len); |
245 | extern unsigned long copy_in_user(void __user *to, const void __user *from, unsigned len); | 245 | extern unsigned long copy_in_user(void __user *to, const void __user *from, unsigned len); |
246 | 246 | ||
247 | static inline int __copy_from_user(void *dst, const void __user *src, unsigned size) | 247 | static __always_inline int __copy_from_user(void *dst, const void __user *src, unsigned size) |
248 | { | 248 | { |
249 | int ret = 0; | 249 | int ret = 0; |
250 | if (!__builtin_constant_p(size)) | 250 | if (!__builtin_constant_p(size)) |
@@ -273,7 +273,7 @@ static inline int __copy_from_user(void *dst, const void __user *src, unsigned s | |||
273 | } | 273 | } |
274 | } | 274 | } |
275 | 275 | ||
276 | static inline int __copy_to_user(void __user *dst, const void *src, unsigned size) | 276 | static __always_inline int __copy_to_user(void __user *dst, const void *src, unsigned size) |
277 | { | 277 | { |
278 | int ret = 0; | 278 | int ret = 0; |
279 | if (!__builtin_constant_p(size)) | 279 | if (!__builtin_constant_p(size)) |
@@ -305,7 +305,7 @@ static inline int __copy_to_user(void __user *dst, const void *src, unsigned siz | |||
305 | } | 305 | } |
306 | 306 | ||
307 | 307 | ||
308 | static inline int __copy_in_user(void __user *dst, const void __user *src, unsigned size) | 308 | static __always_inline int __copy_in_user(void __user *dst, const void __user *src, unsigned size) |
309 | { | 309 | { |
310 | int ret = 0; | 310 | int ret = 0; |
311 | if (!__builtin_constant_p(size)) | 311 | if (!__builtin_constant_p(size)) |
diff --git a/include/linux/auxvec.h b/include/linux/auxvec.h index 9a7b374c9fb4..d2bc0d66e65d 100644 --- a/include/linux/auxvec.h +++ b/include/linux/auxvec.h | |||
@@ -26,6 +26,6 @@ | |||
26 | 26 | ||
27 | #define AT_SECURE 23 /* secure mode boolean */ | 27 | #define AT_SECURE 23 /* secure mode boolean */ |
28 | 28 | ||
29 | #define AT_VECTOR_SIZE 42 /* Size of auxiliary table. */ | 29 | #define AT_VECTOR_SIZE 44 /* Size of auxiliary table. */ |
30 | 30 | ||
31 | #endif /* _LINUX_AUXVEC_H */ | 31 | #endif /* _LINUX_AUXVEC_H */ |
diff --git a/include/linux/compiler-gcc3.h b/include/linux/compiler-gcc3.h index 4209082ee934..1698b845761f 100644 --- a/include/linux/compiler-gcc3.h +++ b/include/linux/compiler-gcc3.h | |||
@@ -13,3 +13,4 @@ | |||
13 | #define __must_check __attribute__((warn_unused_result)) | 13 | #define __must_check __attribute__((warn_unused_result)) |
14 | #endif | 14 | #endif |
15 | 15 | ||
16 | #define __always_inline inline __attribute__((always_inline)) | ||
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h index e913e9beaf69..6f5cc6f0e7a6 100644 --- a/include/linux/compiler-gcc4.h +++ b/include/linux/compiler-gcc4.h | |||
@@ -3,7 +3,16 @@ | |||
3 | /* These definitions are for GCC v4.x. */ | 3 | /* These definitions are for GCC v4.x. */ |
4 | #include <linux/compiler-gcc.h> | 4 | #include <linux/compiler-gcc.h> |
5 | 5 | ||
6 | #ifdef CONFIG_FORCED_INLINING | ||
7 | # undef inline | ||
8 | # undef __inline__ | ||
9 | # undef __inline | ||
10 | # define inline inline __attribute__((always_inline)) | ||
11 | # define __inline__ __inline__ __attribute__((always_inline)) | ||
12 | # define __inline __inline __attribute__((always_inline)) | ||
13 | #endif | ||
14 | |||
6 | #define __attribute_used__ __attribute__((__used__)) | 15 | #define __attribute_used__ __attribute__((__used__)) |
7 | #define __must_check __attribute__((warn_unused_result)) | 16 | #define __must_check __attribute__((warn_unused_result)) |
8 | #define __compiler_offsetof(a,b) __builtin_offsetof(a,b) | 17 | #define __compiler_offsetof(a,b) __builtin_offsetof(a,b) |
9 | 18 | #define __always_inline inline __attribute__((always_inline)) | |
diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h index c472f972bd6d..3bc606927116 100644 --- a/include/linux/cpuset.h +++ b/include/linux/cpuset.h | |||
@@ -48,6 +48,9 @@ extern void __cpuset_memory_pressure_bump(void); | |||
48 | extern struct file_operations proc_cpuset_operations; | 48 | extern struct file_operations proc_cpuset_operations; |
49 | extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer); | 49 | extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer); |
50 | 50 | ||
51 | extern void cpuset_lock(void); | ||
52 | extern void cpuset_unlock(void); | ||
53 | |||
51 | #else /* !CONFIG_CPUSETS */ | 54 | #else /* !CONFIG_CPUSETS */ |
52 | 55 | ||
53 | static inline int cpuset_init_early(void) { return 0; } | 56 | static inline int cpuset_init_early(void) { return 0; } |
@@ -93,6 +96,9 @@ static inline char *cpuset_task_status_allowed(struct task_struct *task, | |||
93 | return buffer; | 96 | return buffer; |
94 | } | 97 | } |
95 | 98 | ||
99 | static inline void cpuset_lock(void) {} | ||
100 | static inline void cpuset_unlock(void) {} | ||
101 | |||
96 | #endif /* !CONFIG_CPUSETS */ | 102 | #endif /* !CONFIG_CPUSETS */ |
97 | 103 | ||
98 | #endif /* _LINUX_CPUSET_H */ | 104 | #endif /* _LINUX_CPUSET_H */ |
diff --git a/include/linux/device.h b/include/linux/device.h index 0cdee78e5ce1..58df18d9cd3e 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -49,6 +49,9 @@ struct bus_type { | |||
49 | int (*match)(struct device * dev, struct device_driver * drv); | 49 | int (*match)(struct device * dev, struct device_driver * drv); |
50 | int (*uevent)(struct device *dev, char **envp, | 50 | int (*uevent)(struct device *dev, char **envp, |
51 | int num_envp, char *buffer, int buffer_size); | 51 | int num_envp, char *buffer, int buffer_size); |
52 | int (*probe)(struct device * dev); | ||
53 | int (*remove)(struct device * dev); | ||
54 | void (*shutdown)(struct device * dev); | ||
52 | int (*suspend)(struct device * dev, pm_message_t state); | 55 | int (*suspend)(struct device * dev, pm_message_t state); |
53 | int (*resume)(struct device * dev); | 56 | int (*resume)(struct device * dev); |
54 | }; | 57 | }; |
diff --git a/include/linux/fb.h b/include/linux/fb.h index a973be2cfe61..2cb19e6503aa 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h | |||
@@ -608,15 +608,15 @@ struct fb_ops { | |||
608 | int (*fb_sync)(struct fb_info *info); | 608 | int (*fb_sync)(struct fb_info *info); |
609 | 609 | ||
610 | /* perform fb specific ioctl (optional) */ | 610 | /* perform fb specific ioctl (optional) */ |
611 | int (*fb_ioctl)(struct inode *inode, struct file *file, unsigned int cmd, | 611 | int (*fb_ioctl)(struct fb_info *info, unsigned int cmd, |
612 | unsigned long arg, struct fb_info *info); | 612 | unsigned long arg); |
613 | 613 | ||
614 | /* Handle 32bit compat ioctl (optional) */ | 614 | /* Handle 32bit compat ioctl (optional) */ |
615 | long (*fb_compat_ioctl)(struct file *f, unsigned cmd, unsigned long arg, | 615 | int (*fb_compat_ioctl)(struct fb_info *info, unsigned cmd, |
616 | struct fb_info *info); | 616 | unsigned long arg); |
617 | 617 | ||
618 | /* perform fb specific mmap */ | 618 | /* perform fb specific mmap */ |
619 | int (*fb_mmap)(struct fb_info *info, struct file *file, struct vm_area_struct *vma); | 619 | int (*fb_mmap)(struct fb_info *info, struct vm_area_struct *vma); |
620 | 620 | ||
621 | /* save current hardware state */ | 621 | /* save current hardware state */ |
622 | void (*fb_save_state)(struct fb_info *info); | 622 | void (*fb_save_state)(struct fb_info *info); |
diff --git a/include/linux/fs.h b/include/linux/fs.h index d1e370d25f7b..b77f2608eef9 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -1290,6 +1290,9 @@ extern void mnt_set_mountpoint(struct vfsmount *, struct dentry *, | |||
1290 | 1290 | ||
1291 | extern int vfs_statfs(struct super_block *, struct kstatfs *); | 1291 | extern int vfs_statfs(struct super_block *, struct kstatfs *); |
1292 | 1292 | ||
1293 | /* /sys/fs */ | ||
1294 | extern struct subsystem fs_subsys; | ||
1295 | |||
1293 | #define FLOCK_VERIFY_READ 1 | 1296 | #define FLOCK_VERIFY_READ 1 |
1294 | #define FLOCK_VERIFY_WRITE 2 | 1297 | #define FLOCK_VERIFY_WRITE 2 |
1295 | 1298 | ||
@@ -1383,6 +1386,12 @@ extern int register_chrdev(unsigned int, const char *, | |||
1383 | extern int unregister_chrdev(unsigned int, const char *); | 1386 | extern int unregister_chrdev(unsigned int, const char *); |
1384 | extern void unregister_chrdev_region(dev_t, unsigned); | 1387 | extern void unregister_chrdev_region(dev_t, unsigned); |
1385 | extern int chrdev_open(struct inode *, struct file *); | 1388 | extern int chrdev_open(struct inode *, struct file *); |
1389 | extern int get_chrdev_list(char *); | ||
1390 | extern void *acquire_chrdev_list(void); | ||
1391 | extern int count_chrdev_list(void); | ||
1392 | extern void *get_next_chrdev(void *); | ||
1393 | extern int get_chrdev_info(void *, int *, char **); | ||
1394 | extern void release_chrdev_list(void *); | ||
1386 | 1395 | ||
1387 | /* fs/block_dev.c */ | 1396 | /* fs/block_dev.c */ |
1388 | #define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */ | 1397 | #define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */ |
@@ -1391,6 +1400,11 @@ extern const char *bdevname(struct block_device *bdev, char *buffer); | |||
1391 | extern struct block_device *lookup_bdev(const char *); | 1400 | extern struct block_device *lookup_bdev(const char *); |
1392 | extern struct block_device *open_bdev_excl(const char *, int, void *); | 1401 | extern struct block_device *open_bdev_excl(const char *, int, void *); |
1393 | extern void close_bdev_excl(struct block_device *); | 1402 | extern void close_bdev_excl(struct block_device *); |
1403 | extern void *acquire_blkdev_list(void); | ||
1404 | extern int count_blkdev_list(void); | ||
1405 | extern void *get_next_blkdev(void *); | ||
1406 | extern int get_blkdev_info(void *, int *, char **); | ||
1407 | extern void release_blkdev_list(void *); | ||
1394 | 1408 | ||
1395 | extern void init_special_inode(struct inode *, umode_t, dev_t); | 1409 | extern void init_special_inode(struct inode *, umode_t, dev_t); |
1396 | 1410 | ||
diff --git a/include/linux/fsl_devices.h b/include/linux/fsl_devices.h index 934aa9bda481..a9f1cfd096ff 100644 --- a/include/linux/fsl_devices.h +++ b/include/linux/fsl_devices.h | |||
@@ -50,14 +50,12 @@ struct gianfar_platform_data { | |||
50 | 50 | ||
51 | /* board specific information */ | 51 | /* board specific information */ |
52 | u32 board_flags; | 52 | u32 board_flags; |
53 | const char *bus_id; | 53 | u32 bus_id; |
54 | u32 phy_id; | ||
54 | u8 mac_addr[6]; | 55 | u8 mac_addr[6]; |
55 | }; | 56 | }; |
56 | 57 | ||
57 | struct gianfar_mdio_data { | 58 | struct gianfar_mdio_data { |
58 | /* device specific information */ | ||
59 | u32 paddr; | ||
60 | |||
61 | /* board specific information */ | 59 | /* board specific information */ |
62 | int irq[32]; | 60 | int irq[32]; |
63 | }; | 61 | }; |
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h index 71d2b8a723b9..eab537091f2a 100644 --- a/include/linux/hardirq.h +++ b/include/linux/hardirq.h | |||
@@ -93,10 +93,6 @@ extern void synchronize_irq(unsigned int irq); | |||
93 | struct task_struct; | 93 | struct task_struct; |
94 | 94 | ||
95 | #ifndef CONFIG_VIRT_CPU_ACCOUNTING | 95 | #ifndef CONFIG_VIRT_CPU_ACCOUNTING |
96 | static inline void account_user_vtime(struct task_struct *tsk) | ||
97 | { | ||
98 | } | ||
99 | |||
100 | static inline void account_system_vtime(struct task_struct *tsk) | 96 | static inline void account_system_vtime(struct task_struct *tsk) |
101 | { | 97 | { |
102 | } | 98 | } |
diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h index 6ff2d365895f..474c8f4f5d4f 100644 --- a/include/linux/i2c-id.h +++ b/include/linux/i2c-id.h | |||
@@ -104,6 +104,10 @@ | |||
104 | #define I2C_DRIVERID_AKITAIOEXP 74 /* IO Expander on Sharp SL-C1000 */ | 104 | #define I2C_DRIVERID_AKITAIOEXP 74 /* IO Expander on Sharp SL-C1000 */ |
105 | #define I2C_DRIVERID_INFRARED 75 /* I2C InfraRed on Video boards */ | 105 | #define I2C_DRIVERID_INFRARED 75 /* I2C InfraRed on Video boards */ |
106 | #define I2C_DRIVERID_TVP5150 76 /* TVP5150 video decoder */ | 106 | #define I2C_DRIVERID_TVP5150 76 /* TVP5150 video decoder */ |
107 | #define I2C_DRIVERID_WM8739 77 /* wm8739 audio processor */ | ||
108 | #define I2C_DRIVERID_UPD64083 78 /* upd64083 video processor */ | ||
109 | #define I2C_DRIVERID_UPD64031A 79 /* upd64031a video processor */ | ||
110 | #define I2C_DRIVERID_SAA717X 80 /* saa717x video encoder */ | ||
107 | 111 | ||
108 | #define I2C_DRIVERID_I2CDEV 900 | 112 | #define I2C_DRIVERID_I2CDEV 900 |
109 | #define I2C_DRIVERID_ARP 902 /* SMBus ARP Client */ | 113 | #define I2C_DRIVERID_ARP 902 /* SMBus ARP Client */ |
diff --git a/include/linux/ide.h b/include/linux/ide.h index f2e1b5b22898..110b3cfac021 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -983,8 +983,13 @@ typedef struct ide_driver_s { | |||
983 | ide_startstop_t (*abort)(ide_drive_t *, struct request *rq); | 983 | ide_startstop_t (*abort)(ide_drive_t *, struct request *rq); |
984 | ide_proc_entry_t *proc; | 984 | ide_proc_entry_t *proc; |
985 | struct device_driver gen_driver; | 985 | struct device_driver gen_driver; |
986 | int (*probe)(ide_drive_t *); | ||
987 | void (*remove)(ide_drive_t *); | ||
988 | void (*shutdown)(ide_drive_t *); | ||
986 | } ide_driver_t; | 989 | } ide_driver_t; |
987 | 990 | ||
991 | #define to_ide_driver(drv) container_of(drv, ide_driver_t, gen_driver) | ||
992 | |||
988 | int generic_ide_ioctl(ide_drive_t *, struct file *, struct block_device *, unsigned, unsigned long); | 993 | int generic_ide_ioctl(ide_drive_t *, struct file *, struct block_device *, unsigned, unsigned long); |
989 | 994 | ||
990 | /* | 995 | /* |
diff --git a/include/linux/init.h b/include/linux/init.h index 59008c3826cf..ff8d8b8632f4 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
@@ -241,6 +241,18 @@ void __init parse_early_param(void); | |||
241 | #define __cpuexitdata __exitdata | 241 | #define __cpuexitdata __exitdata |
242 | #endif | 242 | #endif |
243 | 243 | ||
244 | #ifdef CONFIG_MEMORY_HOTPLUG | ||
245 | #define __meminit | ||
246 | #define __meminitdata | ||
247 | #define __memexit | ||
248 | #define __memexitdata | ||
249 | #else | ||
250 | #define __meminit __init | ||
251 | #define __meminitdata __initdata | ||
252 | #define __memexit __exit | ||
253 | #define __memexitdata __exitdata | ||
254 | #endif | ||
255 | |||
244 | /* Functions marked as __devexit may be discarded at kernel link time, depending | 256 | /* Functions marked as __devexit may be discarded at kernel link time, depending |
245 | on config options. Newer versions of binutils detect references from | 257 | on config options. Newer versions of binutils detect references from |
246 | retained sections to discarded sections and flag an error. Pointers to | 258 | retained sections to discarded sections and flag an error. Pointers to |
diff --git a/include/linux/ioc3.h b/include/linux/ioc3.h new file mode 100644 index 000000000000..e7906a72a4f1 --- /dev/null +++ b/include/linux/ioc3.h | |||
@@ -0,0 +1,93 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License. See the file "COPYING" in the main directory of this archive | ||
4 | * for more details. | ||
5 | * | ||
6 | * Copyright (c) 2005 Stanislaw Skowronek <skylark@linux-mips.org> | ||
7 | */ | ||
8 | |||
9 | #ifndef _LINUX_IOC3_H | ||
10 | #define _LINUX_IOC3_H | ||
11 | |||
12 | #include <asm/sn/ioc3.h> | ||
13 | |||
14 | #define IOC3_MAX_SUBMODULES 32 | ||
15 | |||
16 | #define IOC3_CLASS_NONE 0 | ||
17 | #define IOC3_CLASS_BASE_IP27 1 | ||
18 | #define IOC3_CLASS_BASE_IP30 2 | ||
19 | #define IOC3_CLASS_MENET_123 3 | ||
20 | #define IOC3_CLASS_MENET_4 4 | ||
21 | #define IOC3_CLASS_CADDUO 5 | ||
22 | #define IOC3_CLASS_SERIAL 6 | ||
23 | |||
24 | /* One of these per IOC3 */ | ||
25 | struct ioc3_driver_data { | ||
26 | struct list_head list; | ||
27 | int id; /* IOC3 sequence number */ | ||
28 | /* PCI mapping */ | ||
29 | unsigned long pma; /* physical address */ | ||
30 | struct __iomem ioc3 *vma; /* pointer to registers */ | ||
31 | struct pci_dev *pdev; /* PCI device */ | ||
32 | /* IRQ stuff */ | ||
33 | int dual_irq; /* set if separate IRQs are used */ | ||
34 | int irq_io, irq_eth; /* IRQ numbers */ | ||
35 | /* GPIO magic */ | ||
36 | spinlock_t gpio_lock; | ||
37 | unsigned int gpdr_shadow; | ||
38 | /* NIC identifiers */ | ||
39 | char nic_part[32]; | ||
40 | char nic_serial[16]; | ||
41 | char nic_mac[6]; | ||
42 | /* submodule set */ | ||
43 | int class; | ||
44 | void *data[IOC3_MAX_SUBMODULES]; /* for submodule use */ | ||
45 | int active[IOC3_MAX_SUBMODULES]; /* set if probe succeeds */ | ||
46 | /* is_ir_lock must be held while | ||
47 | * modifying sio_ie values, so | ||
48 | * we can be sure that sio_ie is | ||
49 | * not changing when we read it | ||
50 | * along with sio_ir. | ||
51 | */ | ||
52 | spinlock_t ir_lock; /* SIO_IE[SC] mod lock */ | ||
53 | }; | ||
54 | |||
55 | /* One per submodule */ | ||
56 | struct ioc3_submodule { | ||
57 | char *name; /* descriptive submodule name */ | ||
58 | struct module *owner; /* owning kernel module */ | ||
59 | int ethernet; /* set for ethernet drivers */ | ||
60 | int (*probe) (struct ioc3_submodule *, struct ioc3_driver_data *); | ||
61 | int (*remove) (struct ioc3_submodule *, struct ioc3_driver_data *); | ||
62 | int id; /* assigned by IOC3, index for the "data" array */ | ||
63 | /* IRQ stuff */ | ||
64 | unsigned int irq_mask; /* IOC3 IRQ mask, leave clear for Ethernet */ | ||
65 | int reset_mask; /* non-zero if you want the ioc3.c module to reset interrupts */ | ||
66 | int (*intr) (struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int, struct pt_regs *); | ||
67 | /* private submodule data */ | ||
68 | void *data; /* assigned by submodule */ | ||
69 | }; | ||
70 | |||
71 | /********************************** | ||
72 | * Functions needed by submodules * | ||
73 | **********************************/ | ||
74 | |||
75 | #define IOC3_W_IES 0 | ||
76 | #define IOC3_W_IEC 1 | ||
77 | |||
78 | /* registers a submodule for all existing and future IOC3 chips */ | ||
79 | extern int ioc3_register_submodule(struct ioc3_submodule *); | ||
80 | /* unregisters a submodule */ | ||
81 | extern void ioc3_unregister_submodule(struct ioc3_submodule *); | ||
82 | /* enables IRQs indicated by irq_mask for a specified IOC3 chip */ | ||
83 | extern void ioc3_enable(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int); | ||
84 | /* ackowledges specified IRQs */ | ||
85 | extern void ioc3_ack(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int); | ||
86 | /* disables IRQs indicated by irq_mask for a specified IOC3 chip */ | ||
87 | extern void ioc3_disable(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int); | ||
88 | /* atomically sets GPCR bits */ | ||
89 | extern void ioc3_gpcr_set(struct ioc3_driver_data *, unsigned int); | ||
90 | /* general ireg writer */ | ||
91 | extern void ioc3_write_ireg(struct ioc3_driver_data *idd, uint32_t value, int reg); | ||
92 | |||
93 | #endif | ||
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index e6ee2d95da7a..a5363324cf95 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -216,6 +216,7 @@ extern void dump_stack(void); | |||
216 | ((unsigned char *)&addr)[1], \ | 216 | ((unsigned char *)&addr)[1], \ |
217 | ((unsigned char *)&addr)[2], \ | 217 | ((unsigned char *)&addr)[2], \ |
218 | ((unsigned char *)&addr)[3] | 218 | ((unsigned char *)&addr)[3] |
219 | #define NIPQUAD_FMT "%u.%u.%u.%u" | ||
219 | 220 | ||
220 | #define NIP6(addr) \ | 221 | #define NIP6(addr) \ |
221 | ntohs((addr).s6_addr16[0]), \ | 222 | ntohs((addr).s6_addr16[0]), \ |
@@ -226,6 +227,8 @@ extern void dump_stack(void); | |||
226 | ntohs((addr).s6_addr16[5]), \ | 227 | ntohs((addr).s6_addr16[5]), \ |
227 | ntohs((addr).s6_addr16[6]), \ | 228 | ntohs((addr).s6_addr16[6]), \ |
228 | ntohs((addr).s6_addr16[7]) | 229 | ntohs((addr).s6_addr16[7]) |
230 | #define NIP6_FMT "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x" | ||
231 | #define NIP6_SEQFMT "%04x%04x%04x%04x%04x%04x%04x%04x" | ||
229 | 232 | ||
230 | #if defined(__LITTLE_ENDIAN) | 233 | #if defined(__LITTLE_ENDIAN) |
231 | #define HIPQUAD(addr) \ | 234 | #define HIPQUAD(addr) \ |
diff --git a/include/linux/kexec.h b/include/linux/kexec.h index 94abc07cb164..a311f58c8a7c 100644 --- a/include/linux/kexec.h +++ b/include/linux/kexec.h | |||
@@ -119,6 +119,7 @@ extern struct kimage *kexec_image; | |||
119 | #define KEXEC_ARCH_PPC64 (21 << 16) | 119 | #define KEXEC_ARCH_PPC64 (21 << 16) |
120 | #define KEXEC_ARCH_IA_64 (50 << 16) | 120 | #define KEXEC_ARCH_IA_64 (50 << 16) |
121 | #define KEXEC_ARCH_S390 (22 << 16) | 121 | #define KEXEC_ARCH_S390 (22 << 16) |
122 | #define KEXEC_ARCH_SH (42 << 16) | ||
122 | 123 | ||
123 | #define KEXEC_FLAGS (KEXEC_ON_CRASH) /* List of defined/legal kexec flags */ | 124 | #define KEXEC_FLAGS (KEXEC_ON_CRASH) /* List of defined/legal kexec flags */ |
124 | 125 | ||
diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h index c7ac77e873b3..d6a53ed6ab6c 100644 --- a/include/linux/mempolicy.h +++ b/include/linux/mempolicy.h | |||
@@ -132,12 +132,8 @@ struct shared_policy { | |||
132 | spinlock_t lock; | 132 | spinlock_t lock; |
133 | }; | 133 | }; |
134 | 134 | ||
135 | static inline void mpol_shared_policy_init(struct shared_policy *info) | 135 | void mpol_shared_policy_init(struct shared_policy *info, int policy, |
136 | { | 136 | nodemask_t *nodes); |
137 | info->root = RB_ROOT; | ||
138 | spin_lock_init(&info->lock); | ||
139 | } | ||
140 | |||
141 | int mpol_set_shared_policy(struct shared_policy *info, | 137 | int mpol_set_shared_policy(struct shared_policy *info, |
142 | struct vm_area_struct *vma, | 138 | struct vm_area_struct *vma, |
143 | struct mempolicy *new); | 139 | struct mempolicy *new); |
@@ -211,7 +207,8 @@ static inline int mpol_set_shared_policy(struct shared_policy *info, | |||
211 | return -EINVAL; | 207 | return -EINVAL; |
212 | } | 208 | } |
213 | 209 | ||
214 | static inline void mpol_shared_policy_init(struct shared_policy *info) | 210 | static inline void mpol_shared_policy_init(struct shared_policy *info, |
211 | int policy, nodemask_t *nodes) | ||
215 | { | 212 | { |
216 | } | 213 | } |
217 | 214 | ||
diff --git a/include/linux/mm.h b/include/linux/mm.h index c643016499a1..85854b867463 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -512,7 +512,7 @@ static inline void set_page_links(struct page *page, unsigned long zone, | |||
512 | extern struct page *mem_map; | 512 | extern struct page *mem_map; |
513 | #endif | 513 | #endif |
514 | 514 | ||
515 | static inline void *lowmem_page_address(struct page *page) | 515 | static __always_inline void *lowmem_page_address(struct page *page) |
516 | { | 516 | { |
517 | return __va(page_to_pfn(page) << PAGE_SHIFT); | 517 | return __va(page_to_pfn(page) << PAGE_SHIFT); |
518 | } | 518 | } |
diff --git a/include/linux/ncp_fs.h b/include/linux/ncp_fs.h index 7297e4372c0f..e01342568530 100644 --- a/include/linux/ncp_fs.h +++ b/include/linux/ncp_fs.h | |||
@@ -201,34 +201,6 @@ static inline struct ncp_inode_info *NCP_FINFO(struct inode *inode) | |||
201 | return container_of(inode, struct ncp_inode_info, vfs_inode); | 201 | return container_of(inode, struct ncp_inode_info, vfs_inode); |
202 | } | 202 | } |
203 | 203 | ||
204 | #ifdef DEBUG_NCP_MALLOC | ||
205 | |||
206 | #include <linux/slab.h> | ||
207 | |||
208 | extern int ncp_malloced; | ||
209 | extern int ncp_current_malloced; | ||
210 | |||
211 | static inline void * | ||
212 | ncp_kmalloc(unsigned int size, int priority) | ||
213 | { | ||
214 | ncp_malloced += 1; | ||
215 | ncp_current_malloced += 1; | ||
216 | return kmalloc(size, priority); | ||
217 | } | ||
218 | |||
219 | static inline void ncp_kfree_s(void *obj, int size) | ||
220 | { | ||
221 | ncp_current_malloced -= 1; | ||
222 | kfree(obj); | ||
223 | } | ||
224 | |||
225 | #else /* DEBUG_NCP_MALLOC */ | ||
226 | |||
227 | #define ncp_kmalloc(s,p) kmalloc(s,p) | ||
228 | #define ncp_kfree_s(o,s) kfree(o) | ||
229 | |||
230 | #endif /* DEBUG_NCP_MALLOC */ | ||
231 | |||
232 | /* linux/fs/ncpfs/inode.c */ | 204 | /* linux/fs/ncpfs/inode.c */ |
233 | int ncp_notify_change(struct dentry *, struct iattr *); | 205 | int ncp_notify_change(struct dentry *, struct iattr *); |
234 | struct inode *ncp_iget(struct super_block *, struct ncp_entry_info *); | 206 | struct inode *ncp_iget(struct super_block *, struct ncp_entry_info *); |
diff --git a/include/linux/netfilter/nf_conntrack_common.h b/include/linux/netfilter/nf_conntrack_common.h index 6d39b518486b..3ff88c878308 100644 --- a/include/linux/netfilter/nf_conntrack_common.h +++ b/include/linux/netfilter/nf_conntrack_common.h | |||
@@ -154,6 +154,9 @@ struct ip_conntrack_stat | |||
154 | unsigned int expect_delete; | 154 | unsigned int expect_delete; |
155 | }; | 155 | }; |
156 | 156 | ||
157 | /* call to create an explicit dependency on nf_conntrack. */ | ||
158 | extern void need_conntrack(void); | ||
159 | |||
157 | #endif /* __KERNEL__ */ | 160 | #endif /* __KERNEL__ */ |
158 | 161 | ||
159 | #endif /* _NF_CONNTRACK_COMMON_H */ | 162 | #endif /* _NF_CONNTRACK_COMMON_H */ |
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h new file mode 100644 index 000000000000..472f04834809 --- /dev/null +++ b/include/linux/netfilter/x_tables.h | |||
@@ -0,0 +1,224 @@ | |||
1 | #ifndef _X_TABLES_H | ||
2 | #define _X_TABLES_H | ||
3 | |||
4 | #define XT_FUNCTION_MAXNAMELEN 30 | ||
5 | #define XT_TABLE_MAXNAMELEN 32 | ||
6 | |||
7 | /* The argument to IPT_SO_GET_REVISION_*. Returns highest revision | ||
8 | * kernel supports, if >= revision. */ | ||
9 | struct xt_get_revision | ||
10 | { | ||
11 | char name[XT_FUNCTION_MAXNAMELEN-1]; | ||
12 | |||
13 | u_int8_t revision; | ||
14 | }; | ||
15 | |||
16 | /* CONTINUE verdict for targets */ | ||
17 | #define XT_CONTINUE 0xFFFFFFFF | ||
18 | |||
19 | /* For standard target */ | ||
20 | #define XT_RETURN (-NF_REPEAT - 1) | ||
21 | |||
22 | #define XT_ALIGN(s) (((s) + (__alignof__(void *)-1)) & ~(__alignof__(void *)-1)) | ||
23 | |||
24 | /* Standard return verdict, or do jump. */ | ||
25 | #define XT_STANDARD_TARGET "" | ||
26 | /* Error verdict. */ | ||
27 | #define XT_ERROR_TARGET "ERROR" | ||
28 | |||
29 | /* | ||
30 | * New IP firewall options for [gs]etsockopt at the RAW IP level. | ||
31 | * Unlike BSD Linux inherits IP options so you don't have to use a raw | ||
32 | * socket for this. Instead we check rights in the calls. */ | ||
33 | #define XT_BASE_CTL 64 /* base for firewall socket options */ | ||
34 | |||
35 | #define XT_SO_SET_REPLACE (XT_BASE_CTL) | ||
36 | #define XT_SO_SET_ADD_COUNTERS (XT_BASE_CTL + 1) | ||
37 | #define XT_SO_SET_MAX XT_SO_SET_ADD_COUNTERS | ||
38 | |||
39 | #define XT_SO_GET_INFO (XT_BASE_CTL) | ||
40 | #define XT_SO_GET_ENTRIES (XT_BASE_CTL + 1) | ||
41 | #define XT_SO_GET_REVISION_MATCH (XT_BASE_CTL + 2) | ||
42 | #define XT_SO_GET_REVISION_TARGET (XT_BASE_CTL + 3) | ||
43 | #define XT_SO_GET_MAX XT_SO_GET_REVISION_TARGET | ||
44 | |||
45 | #define SET_COUNTER(c,b,p) do { (c).bcnt = (b); (c).pcnt = (p); } while(0) | ||
46 | #define ADD_COUNTER(c,b,p) do { (c).bcnt += (b); (c).pcnt += (p); } while(0) | ||
47 | |||
48 | struct xt_counters | ||
49 | { | ||
50 | u_int64_t pcnt, bcnt; /* Packet and byte counters */ | ||
51 | }; | ||
52 | |||
53 | /* The argument to IPT_SO_ADD_COUNTERS. */ | ||
54 | struct xt_counters_info | ||
55 | { | ||
56 | /* Which table. */ | ||
57 | char name[XT_TABLE_MAXNAMELEN]; | ||
58 | |||
59 | unsigned int num_counters; | ||
60 | |||
61 | /* The counters (actually `number' of these). */ | ||
62 | struct xt_counters counters[0]; | ||
63 | }; | ||
64 | |||
65 | #define XT_INV_PROTO 0x40 /* Invert the sense of PROTO. */ | ||
66 | |||
67 | #ifdef __KERNEL__ | ||
68 | |||
69 | #include <linux/netdevice.h> | ||
70 | |||
71 | #define ASSERT_READ_LOCK(x) | ||
72 | #define ASSERT_WRITE_LOCK(x) | ||
73 | #include <linux/netfilter_ipv4/listhelp.h> | ||
74 | |||
75 | struct xt_match | ||
76 | { | ||
77 | struct list_head list; | ||
78 | |||
79 | const char name[XT_FUNCTION_MAXNAMELEN-1]; | ||
80 | |||
81 | u_int8_t revision; | ||
82 | |||
83 | /* Return true or false: return FALSE and set *hotdrop = 1 to | ||
84 | force immediate packet drop. */ | ||
85 | /* Arguments changed since 2.6.9, as this must now handle | ||
86 | non-linear skb, using skb_header_pointer and | ||
87 | skb_ip_make_writable. */ | ||
88 | int (*match)(const struct sk_buff *skb, | ||
89 | const struct net_device *in, | ||
90 | const struct net_device *out, | ||
91 | const void *matchinfo, | ||
92 | int offset, | ||
93 | unsigned int protoff, | ||
94 | int *hotdrop); | ||
95 | |||
96 | /* Called when user tries to insert an entry of this type. */ | ||
97 | /* Should return true or false. */ | ||
98 | int (*checkentry)(const char *tablename, | ||
99 | const void *ip, | ||
100 | void *matchinfo, | ||
101 | unsigned int matchinfosize, | ||
102 | unsigned int hook_mask); | ||
103 | |||
104 | /* Called when entry of this type deleted. */ | ||
105 | void (*destroy)(void *matchinfo, unsigned int matchinfosize); | ||
106 | |||
107 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | ||
108 | struct module *me; | ||
109 | }; | ||
110 | |||
111 | /* Registration hooks for targets. */ | ||
112 | struct xt_target | ||
113 | { | ||
114 | struct list_head list; | ||
115 | |||
116 | const char name[XT_FUNCTION_MAXNAMELEN-1]; | ||
117 | |||
118 | u_int8_t revision; | ||
119 | |||
120 | /* Returns verdict. Argument order changed since 2.6.9, as this | ||
121 | must now handle non-linear skbs, using skb_copy_bits and | ||
122 | skb_ip_make_writable. */ | ||
123 | unsigned int (*target)(struct sk_buff **pskb, | ||
124 | const struct net_device *in, | ||
125 | const struct net_device *out, | ||
126 | unsigned int hooknum, | ||
127 | const void *targinfo, | ||
128 | void *userdata); | ||
129 | |||
130 | /* Called when user tries to insert an entry of this type: | ||
131 | hook_mask is a bitmask of hooks from which it can be | ||
132 | called. */ | ||
133 | /* Should return true or false. */ | ||
134 | int (*checkentry)(const char *tablename, | ||
135 | const void *entry, | ||
136 | void *targinfo, | ||
137 | unsigned int targinfosize, | ||
138 | unsigned int hook_mask); | ||
139 | |||
140 | /* Called when entry of this type deleted. */ | ||
141 | void (*destroy)(void *targinfo, unsigned int targinfosize); | ||
142 | |||
143 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | ||
144 | struct module *me; | ||
145 | }; | ||
146 | |||
147 | /* Furniture shopping... */ | ||
148 | struct xt_table | ||
149 | { | ||
150 | struct list_head list; | ||
151 | |||
152 | /* A unique name... */ | ||
153 | char name[XT_TABLE_MAXNAMELEN]; | ||
154 | |||
155 | /* What hooks you will enter on */ | ||
156 | unsigned int valid_hooks; | ||
157 | |||
158 | /* Lock for the curtain */ | ||
159 | rwlock_t lock; | ||
160 | |||
161 | /* Man behind the curtain... */ | ||
162 | //struct ip6t_table_info *private; | ||
163 | void *private; | ||
164 | |||
165 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | ||
166 | struct module *me; | ||
167 | |||
168 | int af; /* address/protocol family */ | ||
169 | }; | ||
170 | |||
171 | #include <linux/netfilter_ipv4.h> | ||
172 | |||
173 | /* The table itself */ | ||
174 | struct xt_table_info | ||
175 | { | ||
176 | /* Size per table */ | ||
177 | unsigned int size; | ||
178 | /* Number of entries: FIXME. --RR */ | ||
179 | unsigned int number; | ||
180 | /* Initial number of entries. Needed for module usage count */ | ||
181 | unsigned int initial_entries; | ||
182 | |||
183 | /* Entry points and underflows */ | ||
184 | unsigned int hook_entry[NF_IP_NUMHOOKS]; | ||
185 | unsigned int underflow[NF_IP_NUMHOOKS]; | ||
186 | |||
187 | /* ipt_entry tables: one per CPU */ | ||
188 | char *entries[NR_CPUS]; | ||
189 | }; | ||
190 | |||
191 | extern int xt_register_target(int af, struct xt_target *target); | ||
192 | extern void xt_unregister_target(int af, struct xt_target *target); | ||
193 | extern int xt_register_match(int af, struct xt_match *target); | ||
194 | extern void xt_unregister_match(int af, struct xt_match *target); | ||
195 | |||
196 | extern int xt_register_table(struct xt_table *table, | ||
197 | struct xt_table_info *bootstrap, | ||
198 | struct xt_table_info *newinfo); | ||
199 | extern void *xt_unregister_table(struct xt_table *table); | ||
200 | |||
201 | extern struct xt_table_info *xt_replace_table(struct xt_table *table, | ||
202 | unsigned int num_counters, | ||
203 | struct xt_table_info *newinfo, | ||
204 | int *error); | ||
205 | |||
206 | extern struct xt_match *xt_find_match(int af, const char *name, u8 revision); | ||
207 | extern struct xt_target *xt_find_target(int af, const char *name, u8 revision); | ||
208 | extern struct xt_target *xt_request_find_target(int af, const char *name, | ||
209 | u8 revision); | ||
210 | extern int xt_find_revision(int af, const char *name, u8 revision, int target, | ||
211 | int *err); | ||
212 | |||
213 | extern struct xt_table *xt_find_table_lock(int af, const char *name); | ||
214 | extern void xt_table_unlock(struct xt_table *t); | ||
215 | |||
216 | extern int xt_proto_init(int af); | ||
217 | extern void xt_proto_fini(int af); | ||
218 | |||
219 | extern struct xt_table_info *xt_alloc_table_info(unsigned int size); | ||
220 | extern void xt_free_table_info(struct xt_table_info *info); | ||
221 | |||
222 | #endif /* __KERNEL__ */ | ||
223 | |||
224 | #endif /* _X_TABLES_H */ | ||
diff --git a/include/linux/netfilter/xt_CLASSIFY.h b/include/linux/netfilter/xt_CLASSIFY.h new file mode 100644 index 000000000000..58111355255d --- /dev/null +++ b/include/linux/netfilter/xt_CLASSIFY.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef _XT_CLASSIFY_H | ||
2 | #define _XT_CLASSIFY_H | ||
3 | |||
4 | struct xt_classify_target_info { | ||
5 | u_int32_t priority; | ||
6 | }; | ||
7 | |||
8 | #endif /*_XT_CLASSIFY_H */ | ||
diff --git a/include/linux/netfilter/xt_CONNMARK.h b/include/linux/netfilter/xt_CONNMARK.h new file mode 100644 index 000000000000..9f744689fffc --- /dev/null +++ b/include/linux/netfilter/xt_CONNMARK.h | |||
@@ -0,0 +1,25 @@ | |||
1 | #ifndef _XT_CONNMARK_H_target | ||
2 | #define _XT_CONNMARK_H_target | ||
3 | |||
4 | /* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com> | ||
5 | * by Henrik Nordstrom <hno@marasystems.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | */ | ||
12 | |||
13 | enum { | ||
14 | XT_CONNMARK_SET = 0, | ||
15 | XT_CONNMARK_SAVE, | ||
16 | XT_CONNMARK_RESTORE | ||
17 | }; | ||
18 | |||
19 | struct xt_connmark_target_info { | ||
20 | unsigned long mark; | ||
21 | unsigned long mask; | ||
22 | u_int8_t mode; | ||
23 | }; | ||
24 | |||
25 | #endif /*_XT_CONNMARK_H_target*/ | ||
diff --git a/include/linux/netfilter/xt_MARK.h b/include/linux/netfilter/xt_MARK.h new file mode 100644 index 000000000000..b021e93ee5d6 --- /dev/null +++ b/include/linux/netfilter/xt_MARK.h | |||
@@ -0,0 +1,21 @@ | |||
1 | #ifndef _XT_MARK_H_target | ||
2 | #define _XT_MARK_H_target | ||
3 | |||
4 | /* Version 0 */ | ||
5 | struct xt_mark_target_info { | ||
6 | unsigned long mark; | ||
7 | }; | ||
8 | |||
9 | /* Version 1 */ | ||
10 | enum { | ||
11 | XT_MARK_SET=0, | ||
12 | XT_MARK_AND, | ||
13 | XT_MARK_OR, | ||
14 | }; | ||
15 | |||
16 | struct xt_mark_target_info_v1 { | ||
17 | unsigned long mark; | ||
18 | u_int8_t mode; | ||
19 | }; | ||
20 | |||
21 | #endif /*_XT_MARK_H_target */ | ||
diff --git a/include/linux/netfilter/xt_NFQUEUE.h b/include/linux/netfilter/xt_NFQUEUE.h new file mode 100644 index 000000000000..9a9af79f74d2 --- /dev/null +++ b/include/linux/netfilter/xt_NFQUEUE.h | |||
@@ -0,0 +1,16 @@ | |||
1 | /* iptables module for using NFQUEUE mechanism | ||
2 | * | ||
3 | * (C) 2005 Harald Welte <laforge@netfilter.org> | ||
4 | * | ||
5 | * This software is distributed under GNU GPL v2, 1991 | ||
6 | * | ||
7 | */ | ||
8 | #ifndef _XT_NFQ_TARGET_H | ||
9 | #define _XT_NFQ_TARGET_H | ||
10 | |||
11 | /* target info */ | ||
12 | struct xt_NFQ_info { | ||
13 | u_int16_t queuenum; | ||
14 | }; | ||
15 | |||
16 | #endif /* _XT_NFQ_TARGET_H */ | ||
diff --git a/include/linux/netfilter/xt_comment.h b/include/linux/netfilter/xt_comment.h new file mode 100644 index 000000000000..eacfedc6b5d0 --- /dev/null +++ b/include/linux/netfilter/xt_comment.h | |||
@@ -0,0 +1,10 @@ | |||
1 | #ifndef _XT_COMMENT_H | ||
2 | #define _XT_COMMENT_H | ||
3 | |||
4 | #define XT_MAX_COMMENT_LEN 256 | ||
5 | |||
6 | struct xt_comment_info { | ||
7 | unsigned char comment[XT_MAX_COMMENT_LEN]; | ||
8 | }; | ||
9 | |||
10 | #endif /* XT_COMMENT_H */ | ||
diff --git a/include/linux/netfilter/xt_connbytes.h b/include/linux/netfilter/xt_connbytes.h new file mode 100644 index 000000000000..c022c989754d --- /dev/null +++ b/include/linux/netfilter/xt_connbytes.h | |||
@@ -0,0 +1,25 @@ | |||
1 | #ifndef _XT_CONNBYTES_H | ||
2 | #define _XT_CONNBYTES_H | ||
3 | |||
4 | enum xt_connbytes_what { | ||
5 | XT_CONNBYTES_PKTS, | ||
6 | XT_CONNBYTES_BYTES, | ||
7 | XT_CONNBYTES_AVGPKT, | ||
8 | }; | ||
9 | |||
10 | enum xt_connbytes_direction { | ||
11 | XT_CONNBYTES_DIR_ORIGINAL, | ||
12 | XT_CONNBYTES_DIR_REPLY, | ||
13 | XT_CONNBYTES_DIR_BOTH, | ||
14 | }; | ||
15 | |||
16 | struct xt_connbytes_info | ||
17 | { | ||
18 | struct { | ||
19 | aligned_u64 from; /* count to be matched */ | ||
20 | aligned_u64 to; /* count to be matched */ | ||
21 | } count; | ||
22 | u_int8_t what; /* ipt_connbytes_what */ | ||
23 | u_int8_t direction; /* ipt_connbytes_direction */ | ||
24 | }; | ||
25 | #endif | ||
diff --git a/include/linux/netfilter/xt_connmark.h b/include/linux/netfilter/xt_connmark.h new file mode 100644 index 000000000000..c592f6ae0883 --- /dev/null +++ b/include/linux/netfilter/xt_connmark.h | |||
@@ -0,0 +1,18 @@ | |||
1 | #ifndef _XT_CONNMARK_H | ||
2 | #define _XT_CONNMARK_H | ||
3 | |||
4 | /* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com> | ||
5 | * by Henrik Nordstrom <hno@marasystems.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | */ | ||
12 | |||
13 | struct xt_connmark_info { | ||
14 | unsigned long mark, mask; | ||
15 | u_int8_t invert; | ||
16 | }; | ||
17 | |||
18 | #endif /*_XT_CONNMARK_H*/ | ||
diff --git a/include/linux/netfilter/xt_conntrack.h b/include/linux/netfilter/xt_conntrack.h new file mode 100644 index 000000000000..34f63cf2e293 --- /dev/null +++ b/include/linux/netfilter/xt_conntrack.h | |||
@@ -0,0 +1,63 @@ | |||
1 | /* Header file for kernel module to match connection tracking information. | ||
2 | * GPL (C) 2001 Marc Boucher (marc@mbsi.ca). | ||
3 | */ | ||
4 | |||
5 | #ifndef _XT_CONNTRACK_H | ||
6 | #define _XT_CONNTRACK_H | ||
7 | |||
8 | #include <linux/netfilter/nf_conntrack_tuple_common.h> | ||
9 | #include <linux/in.h> | ||
10 | |||
11 | #define XT_CONNTRACK_STATE_BIT(ctinfo) (1 << ((ctinfo)%IP_CT_IS_REPLY+1)) | ||
12 | #define XT_CONNTRACK_STATE_INVALID (1 << 0) | ||
13 | |||
14 | #define XT_CONNTRACK_STATE_SNAT (1 << (IP_CT_NUMBER + 1)) | ||
15 | #define XT_CONNTRACK_STATE_DNAT (1 << (IP_CT_NUMBER + 2)) | ||
16 | #define XT_CONNTRACK_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 3)) | ||
17 | |||
18 | /* flags, invflags: */ | ||
19 | #define XT_CONNTRACK_STATE 0x01 | ||
20 | #define XT_CONNTRACK_PROTO 0x02 | ||
21 | #define XT_CONNTRACK_ORIGSRC 0x04 | ||
22 | #define XT_CONNTRACK_ORIGDST 0x08 | ||
23 | #define XT_CONNTRACK_REPLSRC 0x10 | ||
24 | #define XT_CONNTRACK_REPLDST 0x20 | ||
25 | #define XT_CONNTRACK_STATUS 0x40 | ||
26 | #define XT_CONNTRACK_EXPIRES 0x80 | ||
27 | |||
28 | /* This is exposed to userspace, so remains frozen in time. */ | ||
29 | struct ip_conntrack_old_tuple | ||
30 | { | ||
31 | struct { | ||
32 | __u32 ip; | ||
33 | union { | ||
34 | __u16 all; | ||
35 | } u; | ||
36 | } src; | ||
37 | |||
38 | struct { | ||
39 | __u32 ip; | ||
40 | union { | ||
41 | __u16 all; | ||
42 | } u; | ||
43 | |||
44 | /* The protocol. */ | ||
45 | u16 protonum; | ||
46 | } dst; | ||
47 | }; | ||
48 | |||
49 | struct xt_conntrack_info | ||
50 | { | ||
51 | unsigned int statemask, statusmask; | ||
52 | |||
53 | struct ip_conntrack_old_tuple tuple[IP_CT_DIR_MAX]; | ||
54 | struct in_addr sipmsk[IP_CT_DIR_MAX], dipmsk[IP_CT_DIR_MAX]; | ||
55 | |||
56 | unsigned long expires_min, expires_max; | ||
57 | |||
58 | /* Flags word */ | ||
59 | u_int8_t flags; | ||
60 | /* Inverse flags */ | ||
61 | u_int8_t invflags; | ||
62 | }; | ||
63 | #endif /*_XT_CONNTRACK_H*/ | ||
diff --git a/include/linux/netfilter/xt_dccp.h b/include/linux/netfilter/xt_dccp.h new file mode 100644 index 000000000000..e0221b9d32cb --- /dev/null +++ b/include/linux/netfilter/xt_dccp.h | |||
@@ -0,0 +1,23 @@ | |||
1 | #ifndef _XT_DCCP_H_ | ||
2 | #define _XT_DCCP_H_ | ||
3 | |||
4 | #define XT_DCCP_SRC_PORTS 0x01 | ||
5 | #define XT_DCCP_DEST_PORTS 0x02 | ||
6 | #define XT_DCCP_TYPE 0x04 | ||
7 | #define XT_DCCP_OPTION 0x08 | ||
8 | |||
9 | #define XT_DCCP_VALID_FLAGS 0x0f | ||
10 | |||
11 | struct xt_dccp_info { | ||
12 | u_int16_t dpts[2]; /* Min, Max */ | ||
13 | u_int16_t spts[2]; /* Min, Max */ | ||
14 | |||
15 | u_int16_t flags; | ||
16 | u_int16_t invflags; | ||
17 | |||
18 | u_int16_t typemask; | ||
19 | u_int8_t option; | ||
20 | }; | ||
21 | |||
22 | #endif /* _XT_DCCP_H_ */ | ||
23 | |||
diff --git a/include/linux/netfilter/xt_helper.h b/include/linux/netfilter/xt_helper.h new file mode 100644 index 000000000000..6b42763f999d --- /dev/null +++ b/include/linux/netfilter/xt_helper.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef _XT_HELPER_H | ||
2 | #define _XT_HELPER_H | ||
3 | |||
4 | struct xt_helper_info { | ||
5 | int invert; | ||
6 | char name[30]; | ||
7 | }; | ||
8 | #endif /* _XT_HELPER_H */ | ||
diff --git a/include/linux/netfilter/xt_length.h b/include/linux/netfilter/xt_length.h new file mode 100644 index 000000000000..7c2b439f73fe --- /dev/null +++ b/include/linux/netfilter/xt_length.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef _XT_LENGTH_H | ||
2 | #define _XT_LENGTH_H | ||
3 | |||
4 | struct xt_length_info { | ||
5 | u_int16_t min, max; | ||
6 | u_int8_t invert; | ||
7 | }; | ||
8 | |||
9 | #endif /*_XT_LENGTH_H*/ | ||
diff --git a/include/linux/netfilter/xt_limit.h b/include/linux/netfilter/xt_limit.h new file mode 100644 index 000000000000..b3ce65375ecb --- /dev/null +++ b/include/linux/netfilter/xt_limit.h | |||
@@ -0,0 +1,21 @@ | |||
1 | #ifndef _XT_RATE_H | ||
2 | #define _XT_RATE_H | ||
3 | |||
4 | /* timings are in milliseconds. */ | ||
5 | #define XT_LIMIT_SCALE 10000 | ||
6 | |||
7 | /* 1/10,000 sec period => max of 10,000/sec. Min rate is then 429490 | ||
8 | seconds, or one every 59 hours. */ | ||
9 | struct xt_rateinfo { | ||
10 | u_int32_t avg; /* Average secs between packets * scale */ | ||
11 | u_int32_t burst; /* Period multiplier for upper limit. */ | ||
12 | |||
13 | /* Used internally by the kernel */ | ||
14 | unsigned long prev; | ||
15 | u_int32_t credit; | ||
16 | u_int32_t credit_cap, cost; | ||
17 | |||
18 | /* Ugly, ugly fucker. */ | ||
19 | struct xt_rateinfo *master; | ||
20 | }; | ||
21 | #endif /*_XT_RATE_H*/ | ||
diff --git a/include/linux/netfilter/xt_mac.h b/include/linux/netfilter/xt_mac.h new file mode 100644 index 000000000000..b892cdc67e06 --- /dev/null +++ b/include/linux/netfilter/xt_mac.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef _XT_MAC_H | ||
2 | #define _XT_MAC_H | ||
3 | |||
4 | struct xt_mac_info { | ||
5 | unsigned char srcaddr[ETH_ALEN]; | ||
6 | int invert; | ||
7 | }; | ||
8 | #endif /*_XT_MAC_H*/ | ||
diff --git a/include/linux/netfilter/xt_mark.h b/include/linux/netfilter/xt_mark.h new file mode 100644 index 000000000000..802dd4842caf --- /dev/null +++ b/include/linux/netfilter/xt_mark.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef _XT_MARK_H | ||
2 | #define _XT_MARK_H | ||
3 | |||
4 | struct xt_mark_info { | ||
5 | unsigned long mark, mask; | ||
6 | u_int8_t invert; | ||
7 | }; | ||
8 | |||
9 | #endif /*_XT_MARK_H*/ | ||
diff --git a/include/linux/netfilter/xt_physdev.h b/include/linux/netfilter/xt_physdev.h new file mode 100644 index 000000000000..25a7a1815b5b --- /dev/null +++ b/include/linux/netfilter/xt_physdev.h | |||
@@ -0,0 +1,24 @@ | |||
1 | #ifndef _XT_PHYSDEV_H | ||
2 | #define _XT_PHYSDEV_H | ||
3 | |||
4 | #ifdef __KERNEL__ | ||
5 | #include <linux/if.h> | ||
6 | #endif | ||
7 | |||
8 | #define XT_PHYSDEV_OP_IN 0x01 | ||
9 | #define XT_PHYSDEV_OP_OUT 0x02 | ||
10 | #define XT_PHYSDEV_OP_BRIDGED 0x04 | ||
11 | #define XT_PHYSDEV_OP_ISIN 0x08 | ||
12 | #define XT_PHYSDEV_OP_ISOUT 0x10 | ||
13 | #define XT_PHYSDEV_OP_MASK (0x20 - 1) | ||
14 | |||
15 | struct xt_physdev_info { | ||
16 | char physindev[IFNAMSIZ]; | ||
17 | char in_mask[IFNAMSIZ]; | ||
18 | char physoutdev[IFNAMSIZ]; | ||
19 | char out_mask[IFNAMSIZ]; | ||
20 | u_int8_t invert; | ||
21 | u_int8_t bitmask; | ||
22 | }; | ||
23 | |||
24 | #endif /*_XT_PHYSDEV_H*/ | ||
diff --git a/include/linux/netfilter/xt_pkttype.h b/include/linux/netfilter/xt_pkttype.h new file mode 100644 index 000000000000..f265cf52faea --- /dev/null +++ b/include/linux/netfilter/xt_pkttype.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef _XT_PKTTYPE_H | ||
2 | #define _XT_PKTTYPE_H | ||
3 | |||
4 | struct xt_pkttype_info { | ||
5 | int pkttype; | ||
6 | int invert; | ||
7 | }; | ||
8 | #endif /*_XT_PKTTYPE_H*/ | ||
diff --git a/include/linux/netfilter/xt_realm.h b/include/linux/netfilter/xt_realm.h new file mode 100644 index 000000000000..220e87245716 --- /dev/null +++ b/include/linux/netfilter/xt_realm.h | |||
@@ -0,0 +1,10 @@ | |||
1 | #ifndef _XT_REALM_H | ||
2 | #define _XT_REALM_H | ||
3 | |||
4 | struct xt_realm_info { | ||
5 | u_int32_t id; | ||
6 | u_int32_t mask; | ||
7 | u_int8_t invert; | ||
8 | }; | ||
9 | |||
10 | #endif /* _XT_REALM_H */ | ||
diff --git a/include/linux/netfilter/xt_sctp.h b/include/linux/netfilter/xt_sctp.h new file mode 100644 index 000000000000..b157897e7792 --- /dev/null +++ b/include/linux/netfilter/xt_sctp.h | |||
@@ -0,0 +1,107 @@ | |||
1 | #ifndef _XT_SCTP_H_ | ||
2 | #define _XT_SCTP_H_ | ||
3 | |||
4 | #define XT_SCTP_SRC_PORTS 0x01 | ||
5 | #define XT_SCTP_DEST_PORTS 0x02 | ||
6 | #define XT_SCTP_CHUNK_TYPES 0x04 | ||
7 | |||
8 | #define XT_SCTP_VALID_FLAGS 0x07 | ||
9 | |||
10 | #define ELEMCOUNT(x) (sizeof(x)/sizeof(x[0])) | ||
11 | |||
12 | |||
13 | struct xt_sctp_flag_info { | ||
14 | u_int8_t chunktype; | ||
15 | u_int8_t flag; | ||
16 | u_int8_t flag_mask; | ||
17 | }; | ||
18 | |||
19 | #define XT_NUM_SCTP_FLAGS 4 | ||
20 | |||
21 | struct xt_sctp_info { | ||
22 | u_int16_t dpts[2]; /* Min, Max */ | ||
23 | u_int16_t spts[2]; /* Min, Max */ | ||
24 | |||
25 | u_int32_t chunkmap[256 / sizeof (u_int32_t)]; /* Bit mask of chunks to be matched according to RFC 2960 */ | ||
26 | |||
27 | #define SCTP_CHUNK_MATCH_ANY 0x01 /* Match if any of the chunk types are present */ | ||
28 | #define SCTP_CHUNK_MATCH_ALL 0x02 /* Match if all of the chunk types are present */ | ||
29 | #define SCTP_CHUNK_MATCH_ONLY 0x04 /* Match if these are the only chunk types present */ | ||
30 | |||
31 | u_int32_t chunk_match_type; | ||
32 | struct xt_sctp_flag_info flag_info[XT_NUM_SCTP_FLAGS]; | ||
33 | int flag_count; | ||
34 | |||
35 | u_int32_t flags; | ||
36 | u_int32_t invflags; | ||
37 | }; | ||
38 | |||
39 | #define bytes(type) (sizeof(type) * 8) | ||
40 | |||
41 | #define SCTP_CHUNKMAP_SET(chunkmap, type) \ | ||
42 | do { \ | ||
43 | chunkmap[type / bytes(u_int32_t)] |= \ | ||
44 | 1 << (type % bytes(u_int32_t)); \ | ||
45 | } while (0) | ||
46 | |||
47 | #define SCTP_CHUNKMAP_CLEAR(chunkmap, type) \ | ||
48 | do { \ | ||
49 | chunkmap[type / bytes(u_int32_t)] &= \ | ||
50 | ~(1 << (type % bytes(u_int32_t))); \ | ||
51 | } while (0) | ||
52 | |||
53 | #define SCTP_CHUNKMAP_IS_SET(chunkmap, type) \ | ||
54 | ({ \ | ||
55 | (chunkmap[type / bytes (u_int32_t)] & \ | ||
56 | (1 << (type % bytes (u_int32_t)))) ? 1: 0; \ | ||
57 | }) | ||
58 | |||
59 | #define SCTP_CHUNKMAP_RESET(chunkmap) \ | ||
60 | do { \ | ||
61 | int i; \ | ||
62 | for (i = 0; i < ELEMCOUNT(chunkmap); i++) \ | ||
63 | chunkmap[i] = 0; \ | ||
64 | } while (0) | ||
65 | |||
66 | #define SCTP_CHUNKMAP_SET_ALL(chunkmap) \ | ||
67 | do { \ | ||
68 | int i; \ | ||
69 | for (i = 0; i < ELEMCOUNT(chunkmap); i++) \ | ||
70 | chunkmap[i] = ~0; \ | ||
71 | } while (0) | ||
72 | |||
73 | #define SCTP_CHUNKMAP_COPY(destmap, srcmap) \ | ||
74 | do { \ | ||
75 | int i; \ | ||
76 | for (i = 0; i < ELEMCOUNT(chunkmap); i++) \ | ||
77 | destmap[i] = srcmap[i]; \ | ||
78 | } while (0) | ||
79 | |||
80 | #define SCTP_CHUNKMAP_IS_CLEAR(chunkmap) \ | ||
81 | ({ \ | ||
82 | int i; \ | ||
83 | int flag = 1; \ | ||
84 | for (i = 0; i < ELEMCOUNT(chunkmap); i++) { \ | ||
85 | if (chunkmap[i]) { \ | ||
86 | flag = 0; \ | ||
87 | break; \ | ||
88 | } \ | ||
89 | } \ | ||
90 | flag; \ | ||
91 | }) | ||
92 | |||
93 | #define SCTP_CHUNKMAP_IS_ALL_SET(chunkmap) \ | ||
94 | ({ \ | ||
95 | int i; \ | ||
96 | int flag = 1; \ | ||
97 | for (i = 0; i < ELEMCOUNT(chunkmap); i++) { \ | ||
98 | if (chunkmap[i] != ~0) { \ | ||
99 | flag = 0; \ | ||
100 | break; \ | ||
101 | } \ | ||
102 | } \ | ||
103 | flag; \ | ||
104 | }) | ||
105 | |||
106 | #endif /* _XT_SCTP_H_ */ | ||
107 | |||
diff --git a/include/linux/netfilter/xt_state.h b/include/linux/netfilter/xt_state.h new file mode 100644 index 000000000000..c06f32edee07 --- /dev/null +++ b/include/linux/netfilter/xt_state.h | |||
@@ -0,0 +1,13 @@ | |||
1 | #ifndef _XT_STATE_H | ||
2 | #define _XT_STATE_H | ||
3 | |||
4 | #define XT_STATE_BIT(ctinfo) (1 << ((ctinfo)%IP_CT_IS_REPLY+1)) | ||
5 | #define XT_STATE_INVALID (1 << 0) | ||
6 | |||
7 | #define XT_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 1)) | ||
8 | |||
9 | struct xt_state_info | ||
10 | { | ||
11 | unsigned int statemask; | ||
12 | }; | ||
13 | #endif /*_XT_STATE_H*/ | ||
diff --git a/include/linux/netfilter/xt_string.h b/include/linux/netfilter/xt_string.h new file mode 100644 index 000000000000..3b3419f2637d --- /dev/null +++ b/include/linux/netfilter/xt_string.h | |||
@@ -0,0 +1,18 @@ | |||
1 | #ifndef _XT_STRING_H | ||
2 | #define _XT_STRING_H | ||
3 | |||
4 | #define XT_STRING_MAX_PATTERN_SIZE 128 | ||
5 | #define XT_STRING_MAX_ALGO_NAME_SIZE 16 | ||
6 | |||
7 | struct xt_string_info | ||
8 | { | ||
9 | u_int16_t from_offset; | ||
10 | u_int16_t to_offset; | ||
11 | char algo[XT_STRING_MAX_ALGO_NAME_SIZE]; | ||
12 | char pattern[XT_STRING_MAX_PATTERN_SIZE]; | ||
13 | u_int8_t patlen; | ||
14 | u_int8_t invert; | ||
15 | struct ts_config __attribute__((aligned(8))) *config; | ||
16 | }; | ||
17 | |||
18 | #endif /*_XT_STRING_H*/ | ||
diff --git a/include/linux/netfilter/xt_tcpmss.h b/include/linux/netfilter/xt_tcpmss.h new file mode 100644 index 000000000000..e03274c4c790 --- /dev/null +++ b/include/linux/netfilter/xt_tcpmss.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef _XT_TCPMSS_MATCH_H | ||
2 | #define _XT_TCPMSS_MATCH_H | ||
3 | |||
4 | struct xt_tcpmss_match_info { | ||
5 | u_int16_t mss_min, mss_max; | ||
6 | u_int8_t invert; | ||
7 | }; | ||
8 | |||
9 | #endif /*_XT_TCPMSS_MATCH_H*/ | ||
diff --git a/include/linux/netfilter/xt_tcpudp.h b/include/linux/netfilter/xt_tcpudp.h new file mode 100644 index 000000000000..78bc65f11adf --- /dev/null +++ b/include/linux/netfilter/xt_tcpudp.h | |||
@@ -0,0 +1,36 @@ | |||
1 | #ifndef _XT_TCPUDP_H | ||
2 | #define _XT_TCPUDP_H | ||
3 | |||
4 | /* TCP matching stuff */ | ||
5 | struct xt_tcp | ||
6 | { | ||
7 | u_int16_t spts[2]; /* Source port range. */ | ||
8 | u_int16_t dpts[2]; /* Destination port range. */ | ||
9 | u_int8_t option; /* TCP Option iff non-zero*/ | ||
10 | u_int8_t flg_mask; /* TCP flags mask byte */ | ||
11 | u_int8_t flg_cmp; /* TCP flags compare byte */ | ||
12 | u_int8_t invflags; /* Inverse flags */ | ||
13 | }; | ||
14 | |||
15 | /* Values for "inv" field in struct ipt_tcp. */ | ||
16 | #define XT_TCP_INV_SRCPT 0x01 /* Invert the sense of source ports. */ | ||
17 | #define XT_TCP_INV_DSTPT 0x02 /* Invert the sense of dest ports. */ | ||
18 | #define XT_TCP_INV_FLAGS 0x04 /* Invert the sense of TCP flags. */ | ||
19 | #define XT_TCP_INV_OPTION 0x08 /* Invert the sense of option test. */ | ||
20 | #define XT_TCP_INV_MASK 0x0F /* All possible flags. */ | ||
21 | |||
22 | /* UDP matching stuff */ | ||
23 | struct xt_udp | ||
24 | { | ||
25 | u_int16_t spts[2]; /* Source port range. */ | ||
26 | u_int16_t dpts[2]; /* Destination port range. */ | ||
27 | u_int8_t invflags; /* Inverse flags */ | ||
28 | }; | ||
29 | |||
30 | /* Values for "invflags" field in struct ipt_udp. */ | ||
31 | #define XT_UDP_INV_SRCPT 0x01 /* Invert the sense of source ports. */ | ||
32 | #define XT_UDP_INV_DSTPT 0x02 /* Invert the sense of dest ports. */ | ||
33 | #define XT_UDP_INV_MASK 0x03 /* All possible flags. */ | ||
34 | |||
35 | |||
36 | #endif | ||
diff --git a/include/linux/netfilter_arp/arp_tables.h b/include/linux/netfilter_arp/arp_tables.h index e98a870a20be..fd21796e5131 100644 --- a/include/linux/netfilter_arp/arp_tables.h +++ b/include/linux/netfilter_arp/arp_tables.h | |||
@@ -19,8 +19,12 @@ | |||
19 | #include <linux/compiler.h> | 19 | #include <linux/compiler.h> |
20 | #include <linux/netfilter_arp.h> | 20 | #include <linux/netfilter_arp.h> |
21 | 21 | ||
22 | #define ARPT_FUNCTION_MAXNAMELEN 30 | 22 | #include <linux/netfilter/x_tables.h> |
23 | #define ARPT_TABLE_MAXNAMELEN 32 | 23 | |
24 | #define ARPT_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN | ||
25 | #define ARPT_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN | ||
26 | #define arpt_target xt_target | ||
27 | #define arpt_table xt_table | ||
24 | 28 | ||
25 | #define ARPT_DEV_ADDR_LEN_MAX 16 | 29 | #define ARPT_DEV_ADDR_LEN_MAX 16 |
26 | 30 | ||
@@ -91,11 +95,6 @@ struct arpt_standard_target | |||
91 | int verdict; | 95 | int verdict; |
92 | }; | 96 | }; |
93 | 97 | ||
94 | struct arpt_counters | ||
95 | { | ||
96 | u_int64_t pcnt, bcnt; /* Packet and byte counters */ | ||
97 | }; | ||
98 | |||
99 | /* Values for "flag" field in struct arpt_ip (general arp structure). | 98 | /* Values for "flag" field in struct arpt_ip (general arp structure). |
100 | * No flags defined yet. | 99 | * No flags defined yet. |
101 | */ | 100 | */ |
@@ -130,7 +129,7 @@ struct arpt_entry | |||
130 | unsigned int comefrom; | 129 | unsigned int comefrom; |
131 | 130 | ||
132 | /* Packet and byte counters. */ | 131 | /* Packet and byte counters. */ |
133 | struct arpt_counters counters; | 132 | struct xt_counters counters; |
134 | 133 | ||
135 | /* The matches (if any), then the target. */ | 134 | /* The matches (if any), then the target. */ |
136 | unsigned char elems[0]; | 135 | unsigned char elems[0]; |
@@ -141,23 +140,24 @@ struct arpt_entry | |||
141 | * Unlike BSD Linux inherits IP options so you don't have to use a raw | 140 | * Unlike BSD Linux inherits IP options so you don't have to use a raw |
142 | * socket for this. Instead we check rights in the calls. | 141 | * socket for this. Instead we check rights in the calls. |
143 | */ | 142 | */ |
144 | #define ARPT_BASE_CTL 96 /* base for firewall socket options */ | 143 | #define ARPT_CTL_OFFSET 32 |
144 | #define ARPT_BASE_CTL (XT_BASE_CTL+ARPT_CTL_OFFSET) | ||
145 | 145 | ||
146 | #define ARPT_SO_SET_REPLACE (ARPT_BASE_CTL) | 146 | #define ARPT_SO_SET_REPLACE (XT_SO_SET_REPLACE+ARPT_CTL_OFFSET) |
147 | #define ARPT_SO_SET_ADD_COUNTERS (ARPT_BASE_CTL + 1) | 147 | #define ARPT_SO_SET_ADD_COUNTERS (XT_SO_SET_ADD_COUNTERS+ARPT_CTL_OFFSET) |
148 | #define ARPT_SO_SET_MAX ARPT_SO_SET_ADD_COUNTERS | 148 | #define ARPT_SO_SET_MAX (XT_SO_SET_MAX+ARPT_CTL_OFFSET) |
149 | 149 | ||
150 | #define ARPT_SO_GET_INFO (ARPT_BASE_CTL) | 150 | #define ARPT_SO_GET_INFO (XT_SO_GET_INFO+ARPT_CTL_OFFSET) |
151 | #define ARPT_SO_GET_ENTRIES (ARPT_BASE_CTL + 1) | 151 | #define ARPT_SO_GET_ENTRIES (XT_SO_GET_ENTRIES+ARPT_CTL_OFFSET) |
152 | /* #define ARPT_SO_GET_REVISION_MATCH (ARPT_BASE_CTL + 2)*/ | 152 | /* #define ARPT_SO_GET_REVISION_MATCH XT_SO_GET_REVISION_MATCH */ |
153 | #define ARPT_SO_GET_REVISION_TARGET (ARPT_BASE_CTL + 3) | 153 | #define ARPT_SO_GET_REVISION_TARGET (XT_SO_GET_REVISION_TARGET+ARPT_CTL_OFFSET) |
154 | #define ARPT_SO_GET_MAX ARPT_SO_GET_REVISION_TARGET | 154 | #define ARPT_SO_GET_MAX (XT_SO_GET_REVISION_TARGET+ARPT_CTL_OFFSET) |
155 | 155 | ||
156 | /* CONTINUE verdict for targets */ | 156 | /* CONTINUE verdict for targets */ |
157 | #define ARPT_CONTINUE 0xFFFFFFFF | 157 | #define ARPT_CONTINUE XT_CONTINUE |
158 | 158 | ||
159 | /* For standard target */ | 159 | /* For standard target */ |
160 | #define ARPT_RETURN (-NF_REPEAT - 1) | 160 | #define ARPT_RETURN XT_RETURN |
161 | 161 | ||
162 | /* The argument to ARPT_SO_GET_INFO */ | 162 | /* The argument to ARPT_SO_GET_INFO */ |
163 | struct arpt_getinfo | 163 | struct arpt_getinfo |
@@ -208,23 +208,14 @@ struct arpt_replace | |||
208 | /* Number of counters (must be equal to current number of entries). */ | 208 | /* Number of counters (must be equal to current number of entries). */ |
209 | unsigned int num_counters; | 209 | unsigned int num_counters; |
210 | /* The old entries' counters. */ | 210 | /* The old entries' counters. */ |
211 | struct arpt_counters __user *counters; | 211 | struct xt_counters __user *counters; |
212 | 212 | ||
213 | /* The entries (hang off end: not really an array). */ | 213 | /* The entries (hang off end: not really an array). */ |
214 | struct arpt_entry entries[0]; | 214 | struct arpt_entry entries[0]; |
215 | }; | 215 | }; |
216 | 216 | ||
217 | /* The argument to ARPT_SO_ADD_COUNTERS. */ | 217 | /* The argument to ARPT_SO_ADD_COUNTERS. */ |
218 | struct arpt_counters_info | 218 | #define arpt_counters_info xt_counters_info |
219 | { | ||
220 | /* Which table. */ | ||
221 | char name[ARPT_TABLE_MAXNAMELEN]; | ||
222 | |||
223 | unsigned int num_counters; | ||
224 | |||
225 | /* The counters (actually `number' of these). */ | ||
226 | struct arpt_counters counters[0]; | ||
227 | }; | ||
228 | 219 | ||
229 | /* The argument to ARPT_SO_GET_ENTRIES. */ | 220 | /* The argument to ARPT_SO_GET_ENTRIES. */ |
230 | struct arpt_get_entries | 221 | struct arpt_get_entries |
@@ -239,19 +230,10 @@ struct arpt_get_entries | |||
239 | struct arpt_entry entrytable[0]; | 230 | struct arpt_entry entrytable[0]; |
240 | }; | 231 | }; |
241 | 232 | ||
242 | /* The argument to ARPT_SO_GET_REVISION_*. Returns highest revision | ||
243 | * kernel supports, if >= revision. */ | ||
244 | struct arpt_get_revision | ||
245 | { | ||
246 | char name[ARPT_FUNCTION_MAXNAMELEN-1]; | ||
247 | |||
248 | u_int8_t revision; | ||
249 | }; | ||
250 | |||
251 | /* Standard return verdict, or do jump. */ | 233 | /* Standard return verdict, or do jump. */ |
252 | #define ARPT_STANDARD_TARGET "" | 234 | #define ARPT_STANDARD_TARGET XT_STANDARD_TARGET |
253 | /* Error verdict. */ | 235 | /* Error verdict. */ |
254 | #define ARPT_ERROR_TARGET "ERROR" | 236 | #define ARPT_ERROR_TARGET XT_ERROR_TARGET |
255 | 237 | ||
256 | /* Helper functions */ | 238 | /* Helper functions */ |
257 | static __inline__ struct arpt_entry_target *arpt_get_target(struct arpt_entry *e) | 239 | static __inline__ struct arpt_entry_target *arpt_get_target(struct arpt_entry *e) |
@@ -281,63 +263,8 @@ static __inline__ struct arpt_entry_target *arpt_get_target(struct arpt_entry *e | |||
281 | */ | 263 | */ |
282 | #ifdef __KERNEL__ | 264 | #ifdef __KERNEL__ |
283 | 265 | ||
284 | /* Registration hooks for targets. */ | 266 | #define arpt_register_target(tgt) xt_register_target(NF_ARP, tgt) |
285 | struct arpt_target | 267 | #define arpt_unregister_target(tgt) xt_unregister_target(NF_ARP, tgt) |
286 | { | ||
287 | struct list_head list; | ||
288 | |||
289 | const char name[ARPT_FUNCTION_MAXNAMELEN-1]; | ||
290 | |||
291 | u_int8_t revision; | ||
292 | |||
293 | /* Returns verdict. */ | ||
294 | unsigned int (*target)(struct sk_buff **pskb, | ||
295 | unsigned int hooknum, | ||
296 | const struct net_device *in, | ||
297 | const struct net_device *out, | ||
298 | const void *targinfo, | ||
299 | void *userdata); | ||
300 | |||
301 | /* Called when user tries to insert an entry of this type: | ||
302 | hook_mask is a bitmask of hooks from which it can be | ||
303 | called. */ | ||
304 | /* Should return true or false. */ | ||
305 | int (*checkentry)(const char *tablename, | ||
306 | const struct arpt_entry *e, | ||
307 | void *targinfo, | ||
308 | unsigned int targinfosize, | ||
309 | unsigned int hook_mask); | ||
310 | |||
311 | /* Called when entry of this type deleted. */ | ||
312 | void (*destroy)(void *targinfo, unsigned int targinfosize); | ||
313 | |||
314 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | ||
315 | struct module *me; | ||
316 | }; | ||
317 | |||
318 | extern int arpt_register_target(struct arpt_target *target); | ||
319 | extern void arpt_unregister_target(struct arpt_target *target); | ||
320 | |||
321 | /* Furniture shopping... */ | ||
322 | struct arpt_table | ||
323 | { | ||
324 | struct list_head list; | ||
325 | |||
326 | /* A unique name... */ | ||
327 | char name[ARPT_TABLE_MAXNAMELEN]; | ||
328 | |||
329 | /* What hooks you will enter on */ | ||
330 | unsigned int valid_hooks; | ||
331 | |||
332 | /* Lock for the curtain */ | ||
333 | rwlock_t lock; | ||
334 | |||
335 | /* Man behind the curtain... */ | ||
336 | struct arpt_table_info *private; | ||
337 | |||
338 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | ||
339 | struct module *me; | ||
340 | }; | ||
341 | 268 | ||
342 | extern int arpt_register_table(struct arpt_table *table, | 269 | extern int arpt_register_table(struct arpt_table *table, |
343 | const struct arpt_replace *repl); | 270 | const struct arpt_replace *repl); |
diff --git a/include/linux/netfilter_ipv4/ip_conntrack.h b/include/linux/netfilter_ipv4/ip_conntrack.h index b3432ab59a17..215765f043e6 100644 --- a/include/linux/netfilter_ipv4/ip_conntrack.h +++ b/include/linux/netfilter_ipv4/ip_conntrack.h | |||
@@ -199,9 +199,6 @@ ip_conntrack_put(struct ip_conntrack *ct) | |||
199 | nf_conntrack_put(&ct->ct_general); | 199 | nf_conntrack_put(&ct->ct_general); |
200 | } | 200 | } |
201 | 201 | ||
202 | /* call to create an explicit dependency on ip_conntrack. */ | ||
203 | extern void need_ip_conntrack(void); | ||
204 | |||
205 | extern int invert_tuplepr(struct ip_conntrack_tuple *inverse, | 202 | extern int invert_tuplepr(struct ip_conntrack_tuple *inverse, |
206 | const struct ip_conntrack_tuple *orig); | 203 | const struct ip_conntrack_tuple *orig); |
207 | 204 | ||
diff --git a/include/linux/netfilter_ipv4/ip_tables.h b/include/linux/netfilter_ipv4/ip_tables.h index d19d65cf4530..76ba24b68515 100644 --- a/include/linux/netfilter_ipv4/ip_tables.h +++ b/include/linux/netfilter_ipv4/ip_tables.h | |||
@@ -25,8 +25,14 @@ | |||
25 | #include <linux/compiler.h> | 25 | #include <linux/compiler.h> |
26 | #include <linux/netfilter_ipv4.h> | 26 | #include <linux/netfilter_ipv4.h> |
27 | 27 | ||
28 | #define IPT_FUNCTION_MAXNAMELEN 30 | 28 | #include <linux/netfilter/x_tables.h> |
29 | #define IPT_TABLE_MAXNAMELEN 32 | 29 | |
30 | #define IPT_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN | ||
31 | #define IPT_TABLE_MAXNAMELEN XT_FUNCTION_MAXNAMELEN | ||
32 | #define ipt_match xt_match | ||
33 | #define ipt_target xt_target | ||
34 | #define ipt_table xt_table | ||
35 | #define ipt_get_revision xt_get_revision | ||
30 | 36 | ||
31 | /* Yes, Virginia, you have to zero the padding. */ | 37 | /* Yes, Virginia, you have to zero the padding. */ |
32 | struct ipt_ip { | 38 | struct ipt_ip { |
@@ -102,10 +108,7 @@ struct ipt_standard_target | |||
102 | int verdict; | 108 | int verdict; |
103 | }; | 109 | }; |
104 | 110 | ||
105 | struct ipt_counters | 111 | #define ipt_counters xt_counters |
106 | { | ||
107 | u_int64_t pcnt, bcnt; /* Packet and byte counters */ | ||
108 | }; | ||
109 | 112 | ||
110 | /* Values for "flag" field in struct ipt_ip (general ip structure). */ | 113 | /* Values for "flag" field in struct ipt_ip (general ip structure). */ |
111 | #define IPT_F_FRAG 0x01 /* Set if rule is a fragment rule */ | 114 | #define IPT_F_FRAG 0x01 /* Set if rule is a fragment rule */ |
@@ -119,7 +122,7 @@ struct ipt_counters | |||
119 | #define IPT_INV_SRCIP 0x08 /* Invert the sense of SRC IP. */ | 122 | #define IPT_INV_SRCIP 0x08 /* Invert the sense of SRC IP. */ |
120 | #define IPT_INV_DSTIP 0x10 /* Invert the sense of DST OP. */ | 123 | #define IPT_INV_DSTIP 0x10 /* Invert the sense of DST OP. */ |
121 | #define IPT_INV_FRAG 0x20 /* Invert the sense of FRAG. */ | 124 | #define IPT_INV_FRAG 0x20 /* Invert the sense of FRAG. */ |
122 | #define IPT_INV_PROTO 0x40 /* Invert the sense of PROTO. */ | 125 | #define IPT_INV_PROTO XT_INV_PROTO |
123 | #define IPT_INV_MASK 0x7F /* All possible flag bits mask. */ | 126 | #define IPT_INV_MASK 0x7F /* All possible flag bits mask. */ |
124 | 127 | ||
125 | /* This structure defines each of the firewall rules. Consists of 3 | 128 | /* This structure defines each of the firewall rules. Consists of 3 |
@@ -141,7 +144,7 @@ struct ipt_entry | |||
141 | unsigned int comefrom; | 144 | unsigned int comefrom; |
142 | 145 | ||
143 | /* Packet and byte counters. */ | 146 | /* Packet and byte counters. */ |
144 | struct ipt_counters counters; | 147 | struct xt_counters counters; |
145 | 148 | ||
146 | /* The matches (if any), then the target. */ | 149 | /* The matches (if any), then the target. */ |
147 | unsigned char elems[0]; | 150 | unsigned char elems[0]; |
@@ -151,54 +154,34 @@ struct ipt_entry | |||
151 | * New IP firewall options for [gs]etsockopt at the RAW IP level. | 154 | * New IP firewall options for [gs]etsockopt at the RAW IP level. |
152 | * Unlike BSD Linux inherits IP options so you don't have to use a raw | 155 | * Unlike BSD Linux inherits IP options so you don't have to use a raw |
153 | * socket for this. Instead we check rights in the calls. */ | 156 | * socket for this. Instead we check rights in the calls. */ |
154 | #define IPT_BASE_CTL 64 /* base for firewall socket options */ | 157 | #define IPT_BASE_CTL XT_BASE_CTL |
155 | 158 | ||
156 | #define IPT_SO_SET_REPLACE (IPT_BASE_CTL) | 159 | #define IPT_SO_SET_REPLACE XT_SO_SET_REPLACE |
157 | #define IPT_SO_SET_ADD_COUNTERS (IPT_BASE_CTL + 1) | 160 | #define IPT_SO_SET_ADD_COUNTERS XT_SO_SET_ADD_COUNTERS |
158 | #define IPT_SO_SET_MAX IPT_SO_SET_ADD_COUNTERS | 161 | #define IPT_SO_SET_MAX XT_SO_SET_MAX |
159 | 162 | ||
160 | #define IPT_SO_GET_INFO (IPT_BASE_CTL) | 163 | #define IPT_SO_GET_INFO XT_SO_GET_INFO |
161 | #define IPT_SO_GET_ENTRIES (IPT_BASE_CTL + 1) | 164 | #define IPT_SO_GET_ENTRIES XT_SO_GET_ENTRIES |
162 | #define IPT_SO_GET_REVISION_MATCH (IPT_BASE_CTL + 2) | 165 | #define IPT_SO_GET_REVISION_MATCH XT_SO_GET_REVISION_MATCH |
163 | #define IPT_SO_GET_REVISION_TARGET (IPT_BASE_CTL + 3) | 166 | #define IPT_SO_GET_REVISION_TARGET XT_SO_GET_REVISION_TARGET |
164 | #define IPT_SO_GET_MAX IPT_SO_GET_REVISION_TARGET | 167 | #define IPT_SO_GET_MAX XT_SO_GET_REVISION_TARGET |
165 | 168 | ||
166 | /* CONTINUE verdict for targets */ | 169 | #define IPT_CONTINUE XT_CONTINUE |
167 | #define IPT_CONTINUE 0xFFFFFFFF | 170 | #define IPT_RETURN XT_RETURN |
168 | 171 | ||
169 | /* For standard target */ | 172 | #include <linux/netfilter/xt_tcpudp.h> |
170 | #define IPT_RETURN (-NF_REPEAT - 1) | 173 | #define ipt_udp xt_udp |
174 | #define ipt_tcp xt_tcp | ||
171 | 175 | ||
172 | /* TCP matching stuff */ | 176 | #define IPT_TCP_INV_SRCPT XT_TCP_INV_SRCPT |
173 | struct ipt_tcp | 177 | #define IPT_TCP_INV_DSTPT XT_TCP_INV_DSTPT |
174 | { | 178 | #define IPT_TCP_INV_FLAGS XT_TCP_INV_FLAGS |
175 | u_int16_t spts[2]; /* Source port range. */ | 179 | #define IPT_TCP_INV_OPTION XT_TCP_INV_OPTION |
176 | u_int16_t dpts[2]; /* Destination port range. */ | 180 | #define IPT_TCP_INV_MASK XT_TCP_INV_MASK |
177 | u_int8_t option; /* TCP Option iff non-zero*/ | ||
178 | u_int8_t flg_mask; /* TCP flags mask byte */ | ||
179 | u_int8_t flg_cmp; /* TCP flags compare byte */ | ||
180 | u_int8_t invflags; /* Inverse flags */ | ||
181 | }; | ||
182 | |||
183 | /* Values for "inv" field in struct ipt_tcp. */ | ||
184 | #define IPT_TCP_INV_SRCPT 0x01 /* Invert the sense of source ports. */ | ||
185 | #define IPT_TCP_INV_DSTPT 0x02 /* Invert the sense of dest ports. */ | ||
186 | #define IPT_TCP_INV_FLAGS 0x04 /* Invert the sense of TCP flags. */ | ||
187 | #define IPT_TCP_INV_OPTION 0x08 /* Invert the sense of option test. */ | ||
188 | #define IPT_TCP_INV_MASK 0x0F /* All possible flags. */ | ||
189 | |||
190 | /* UDP matching stuff */ | ||
191 | struct ipt_udp | ||
192 | { | ||
193 | u_int16_t spts[2]; /* Source port range. */ | ||
194 | u_int16_t dpts[2]; /* Destination port range. */ | ||
195 | u_int8_t invflags; /* Inverse flags */ | ||
196 | }; | ||
197 | 181 | ||
198 | /* Values for "invflags" field in struct ipt_udp. */ | 182 | #define IPT_UDP_INV_SRCPT XT_UDP_INV_SRCPT |
199 | #define IPT_UDP_INV_SRCPT 0x01 /* Invert the sense of source ports. */ | 183 | #define IPT_UDP_INV_DSTPT XT_UDP_INV_DSTPT |
200 | #define IPT_UDP_INV_DSTPT 0x02 /* Invert the sense of dest ports. */ | 184 | #define IPT_UDP_INV_MASK XT_UDP_INV_MASK |
201 | #define IPT_UDP_INV_MASK 0x03 /* All possible flags. */ | ||
202 | 185 | ||
203 | /* ICMP matching stuff */ | 186 | /* ICMP matching stuff */ |
204 | struct ipt_icmp | 187 | struct ipt_icmp |
@@ -260,23 +243,14 @@ struct ipt_replace | |||
260 | /* Number of counters (must be equal to current number of entries). */ | 243 | /* Number of counters (must be equal to current number of entries). */ |
261 | unsigned int num_counters; | 244 | unsigned int num_counters; |
262 | /* The old entries' counters. */ | 245 | /* The old entries' counters. */ |
263 | struct ipt_counters __user *counters; | 246 | struct xt_counters __user *counters; |
264 | 247 | ||
265 | /* The entries (hang off end: not really an array). */ | 248 | /* The entries (hang off end: not really an array). */ |
266 | struct ipt_entry entries[0]; | 249 | struct ipt_entry entries[0]; |
267 | }; | 250 | }; |
268 | 251 | ||
269 | /* The argument to IPT_SO_ADD_COUNTERS. */ | 252 | /* The argument to IPT_SO_ADD_COUNTERS. */ |
270 | struct ipt_counters_info | 253 | #define ipt_counters_info xt_counters_info |
271 | { | ||
272 | /* Which table. */ | ||
273 | char name[IPT_TABLE_MAXNAMELEN]; | ||
274 | |||
275 | unsigned int num_counters; | ||
276 | |||
277 | /* The counters (actually `number' of these). */ | ||
278 | struct ipt_counters counters[0]; | ||
279 | }; | ||
280 | 254 | ||
281 | /* The argument to IPT_SO_GET_ENTRIES. */ | 255 | /* The argument to IPT_SO_GET_ENTRIES. */ |
282 | struct ipt_get_entries | 256 | struct ipt_get_entries |
@@ -291,19 +265,10 @@ struct ipt_get_entries | |||
291 | struct ipt_entry entrytable[0]; | 265 | struct ipt_entry entrytable[0]; |
292 | }; | 266 | }; |
293 | 267 | ||
294 | /* The argument to IPT_SO_GET_REVISION_*. Returns highest revision | ||
295 | * kernel supports, if >= revision. */ | ||
296 | struct ipt_get_revision | ||
297 | { | ||
298 | char name[IPT_FUNCTION_MAXNAMELEN-1]; | ||
299 | |||
300 | u_int8_t revision; | ||
301 | }; | ||
302 | |||
303 | /* Standard return verdict, or do jump. */ | 268 | /* Standard return verdict, or do jump. */ |
304 | #define IPT_STANDARD_TARGET "" | 269 | #define IPT_STANDARD_TARGET XT_STANDARD_TARGET |
305 | /* Error verdict. */ | 270 | /* Error verdict. */ |
306 | #define IPT_ERROR_TARGET "ERROR" | 271 | #define IPT_ERROR_TARGET XT_ERROR_TARGET |
307 | 272 | ||
308 | /* Helper functions */ | 273 | /* Helper functions */ |
309 | static __inline__ struct ipt_entry_target * | 274 | static __inline__ struct ipt_entry_target * |
@@ -356,103 +321,18 @@ ipt_get_target(struct ipt_entry *e) | |||
356 | #include <linux/init.h> | 321 | #include <linux/init.h> |
357 | extern void ipt_init(void) __init; | 322 | extern void ipt_init(void) __init; |
358 | 323 | ||
359 | struct ipt_match | 324 | #define ipt_register_target(tgt) xt_register_target(AF_INET, tgt) |
360 | { | 325 | #define ipt_unregister_target(tgt) xt_unregister_target(AF_INET, tgt) |
361 | struct list_head list; | ||
362 | |||
363 | const char name[IPT_FUNCTION_MAXNAMELEN-1]; | ||
364 | |||
365 | u_int8_t revision; | ||
366 | |||
367 | /* Return true or false: return FALSE and set *hotdrop = 1 to | ||
368 | force immediate packet drop. */ | ||
369 | /* Arguments changed since 2.4, as this must now handle | ||
370 | non-linear skbs, using skb_copy_bits and | ||
371 | skb_ip_make_writable. */ | ||
372 | int (*match)(const struct sk_buff *skb, | ||
373 | const struct net_device *in, | ||
374 | const struct net_device *out, | ||
375 | const void *matchinfo, | ||
376 | int offset, | ||
377 | int *hotdrop); | ||
378 | |||
379 | /* Called when user tries to insert an entry of this type. */ | ||
380 | /* Should return true or false. */ | ||
381 | int (*checkentry)(const char *tablename, | ||
382 | const struct ipt_ip *ip, | ||
383 | void *matchinfo, | ||
384 | unsigned int matchinfosize, | ||
385 | unsigned int hook_mask); | ||
386 | |||
387 | /* Called when entry of this type deleted. */ | ||
388 | void (*destroy)(void *matchinfo, unsigned int matchinfosize); | ||
389 | |||
390 | /* Set this to THIS_MODULE. */ | ||
391 | struct module *me; | ||
392 | }; | ||
393 | |||
394 | /* Registration hooks for targets. */ | ||
395 | struct ipt_target | ||
396 | { | ||
397 | struct list_head list; | ||
398 | |||
399 | const char name[IPT_FUNCTION_MAXNAMELEN-1]; | ||
400 | |||
401 | u_int8_t revision; | ||
402 | |||
403 | /* Called when user tries to insert an entry of this type: | ||
404 | hook_mask is a bitmask of hooks from which it can be | ||
405 | called. */ | ||
406 | /* Should return true or false. */ | ||
407 | int (*checkentry)(const char *tablename, | ||
408 | const struct ipt_entry *e, | ||
409 | void *targinfo, | ||
410 | unsigned int targinfosize, | ||
411 | unsigned int hook_mask); | ||
412 | |||
413 | /* Called when entry of this type deleted. */ | ||
414 | void (*destroy)(void *targinfo, unsigned int targinfosize); | ||
415 | |||
416 | /* Returns verdict. Argument order changed since 2.4, as this | ||
417 | must now handle non-linear skbs, using skb_copy_bits and | ||
418 | skb_ip_make_writable. */ | ||
419 | unsigned int (*target)(struct sk_buff **pskb, | ||
420 | const struct net_device *in, | ||
421 | const struct net_device *out, | ||
422 | unsigned int hooknum, | ||
423 | const void *targinfo, | ||
424 | void *userdata); | ||
425 | |||
426 | /* Set this to THIS_MODULE. */ | ||
427 | struct module *me; | ||
428 | }; | ||
429 | 326 | ||
430 | extern int ipt_register_target(struct ipt_target *target); | 327 | #define ipt_register_match(mtch) xt_register_match(AF_INET, mtch) |
431 | extern void ipt_unregister_target(struct ipt_target *target); | 328 | #define ipt_unregister_match(mtch) xt_unregister_match(AF_INET, mtch) |
432 | 329 | ||
433 | extern int ipt_register_match(struct ipt_match *match); | 330 | //#define ipt_register_table(tbl, repl) xt_register_table(AF_INET, tbl, repl) |
434 | extern void ipt_unregister_match(struct ipt_match *match); | 331 | //#define ipt_unregister_table(tbl) xt_unregister_table(AF_INET, tbl) |
435 | 332 | ||
436 | /* Furniture shopping... */ | 333 | extern int ipt_register_table(struct ipt_table *table, |
437 | struct ipt_table | 334 | const struct ipt_replace *repl); |
438 | { | 335 | extern void ipt_unregister_table(struct ipt_table *table); |
439 | struct list_head list; | ||
440 | |||
441 | /* A unique name... */ | ||
442 | char name[IPT_TABLE_MAXNAMELEN]; | ||
443 | |||
444 | /* What hooks you will enter on */ | ||
445 | unsigned int valid_hooks; | ||
446 | |||
447 | /* Lock for the curtain */ | ||
448 | rwlock_t lock; | ||
449 | |||
450 | /* Man behind the curtain... */ | ||
451 | struct ipt_table_info *private; | ||
452 | |||
453 | /* Set to THIS_MODULE. */ | ||
454 | struct module *me; | ||
455 | }; | ||
456 | 336 | ||
457 | /* net/sched/ipt.c: Gimme access to your targets! Gets target->me. */ | 337 | /* net/sched/ipt.c: Gimme access to your targets! Gets target->me. */ |
458 | extern struct ipt_target *ipt_find_target(const char *name, u8 revision); | 338 | extern struct ipt_target *ipt_find_target(const char *name, u8 revision); |
@@ -476,9 +356,6 @@ struct ipt_error | |||
476 | struct ipt_error_target target; | 356 | struct ipt_error_target target; |
477 | }; | 357 | }; |
478 | 358 | ||
479 | extern int ipt_register_table(struct ipt_table *table, | ||
480 | const struct ipt_replace *repl); | ||
481 | extern void ipt_unregister_table(struct ipt_table *table); | ||
482 | extern unsigned int ipt_do_table(struct sk_buff **pskb, | 359 | extern unsigned int ipt_do_table(struct sk_buff **pskb, |
483 | unsigned int hook, | 360 | unsigned int hook, |
484 | const struct net_device *in, | 361 | const struct net_device *in, |
@@ -486,6 +363,6 @@ extern unsigned int ipt_do_table(struct sk_buff **pskb, | |||
486 | struct ipt_table *table, | 363 | struct ipt_table *table, |
487 | void *userdata); | 364 | void *userdata); |
488 | 365 | ||
489 | #define IPT_ALIGN(s) (((s) + (__alignof__(struct ipt_entry)-1)) & ~(__alignof__(struct ipt_entry)-1)) | 366 | #define IPT_ALIGN(s) XT_ALIGN(s) |
490 | #endif /*__KERNEL__*/ | 367 | #endif /*__KERNEL__*/ |
491 | #endif /* _IPTABLES_H */ | 368 | #endif /* _IPTABLES_H */ |
diff --git a/include/linux/netfilter_ipv4/ipt_CLASSIFY.h b/include/linux/netfilter_ipv4/ipt_CLASSIFY.h index 7596e3dd00ca..a46d511b5c36 100644 --- a/include/linux/netfilter_ipv4/ipt_CLASSIFY.h +++ b/include/linux/netfilter_ipv4/ipt_CLASSIFY.h | |||
@@ -1,8 +1,7 @@ | |||
1 | #ifndef _IPT_CLASSIFY_H | 1 | #ifndef _IPT_CLASSIFY_H |
2 | #define _IPT_CLASSIFY_H | 2 | #define _IPT_CLASSIFY_H |
3 | 3 | ||
4 | struct ipt_classify_target_info { | 4 | #include <linux/netfilter/xt_CLASSIFY.h> |
5 | u_int32_t priority; | 5 | #define ipt_classify_target_info xt_classify_target_info |
6 | }; | ||
7 | 6 | ||
8 | #endif /*_IPT_CLASSIFY_H */ | 7 | #endif /*_IPT_CLASSIFY_H */ |
diff --git a/include/linux/netfilter_ipv4/ipt_CONNMARK.h b/include/linux/netfilter_ipv4/ipt_CONNMARK.h index d3c02536fc4c..9ecfee0a9e33 100644 --- a/include/linux/netfilter_ipv4/ipt_CONNMARK.h +++ b/include/linux/netfilter_ipv4/ipt_CONNMARK.h | |||
@@ -9,17 +9,11 @@ | |||
9 | * the Free Software Foundation; either version 2 of the License, or | 9 | * the Free Software Foundation; either version 2 of the License, or |
10 | * (at your option) any later version. | 10 | * (at your option) any later version. |
11 | */ | 11 | */ |
12 | #include <linux/netfilter/xt_CONNMARK.h> | ||
13 | #define IPT_CONNMARK_SET XT_CONNMARK_SET | ||
14 | #define IPT_CONNMARK_SAVE XT_CONNMARK_SAVE | ||
15 | #define IPT_CONNMARK_RESTORE XT_CONNMARK_RESTORE | ||
12 | 16 | ||
13 | enum { | 17 | #define ipt_connmark_target_info xt_connmark_target_info |
14 | IPT_CONNMARK_SET = 0, | ||
15 | IPT_CONNMARK_SAVE, | ||
16 | IPT_CONNMARK_RESTORE | ||
17 | }; | ||
18 | |||
19 | struct ipt_connmark_target_info { | ||
20 | unsigned long mark; | ||
21 | unsigned long mask; | ||
22 | u_int8_t mode; | ||
23 | }; | ||
24 | 18 | ||
25 | #endif /*_IPT_CONNMARK_H_target*/ | 19 | #endif /*_IPT_CONNMARK_H_target*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_MARK.h b/include/linux/netfilter_ipv4/ipt_MARK.h index f47485790ed4..697a486a96d3 100644 --- a/include/linux/netfilter_ipv4/ipt_MARK.h +++ b/include/linux/netfilter_ipv4/ipt_MARK.h | |||
@@ -1,20 +1,18 @@ | |||
1 | #ifndef _IPT_MARK_H_target | 1 | #ifndef _IPT_MARK_H_target |
2 | #define _IPT_MARK_H_target | 2 | #define _IPT_MARK_H_target |
3 | 3 | ||
4 | /* Backwards compatibility for old userspace */ | ||
5 | |||
6 | #include <linux/netfilter/xt_MARK.h> | ||
7 | |||
4 | /* Version 0 */ | 8 | /* Version 0 */ |
5 | struct ipt_mark_target_info { | 9 | #define ipt_mark_target_info xt_mark_target_info |
6 | unsigned long mark; | ||
7 | }; | ||
8 | 10 | ||
9 | /* Version 1 */ | 11 | /* Version 1 */ |
10 | enum { | 12 | #define IPT_MARK_SET XT_MARK_SET |
11 | IPT_MARK_SET=0, | 13 | #define IPT_MARK_AND XT_MARK_AND |
12 | IPT_MARK_AND, | 14 | #define IPT_MARK_OR XT_MARK_OR |
13 | IPT_MARK_OR | 15 | |
14 | }; | 16 | #define ipt_mark_target_info_v1 xt_mark_target_info_v1 |
15 | 17 | ||
16 | struct ipt_mark_target_info_v1 { | ||
17 | unsigned long mark; | ||
18 | u_int8_t mode; | ||
19 | }; | ||
20 | #endif /*_IPT_MARK_H_target*/ | 18 | #endif /*_IPT_MARK_H_target*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_NFQUEUE.h b/include/linux/netfilter_ipv4/ipt_NFQUEUE.h index b5b2943b0c66..97a2a7557cb9 100644 --- a/include/linux/netfilter_ipv4/ipt_NFQUEUE.h +++ b/include/linux/netfilter_ipv4/ipt_NFQUEUE.h | |||
@@ -8,9 +8,9 @@ | |||
8 | #ifndef _IPT_NFQ_TARGET_H | 8 | #ifndef _IPT_NFQ_TARGET_H |
9 | #define _IPT_NFQ_TARGET_H | 9 | #define _IPT_NFQ_TARGET_H |
10 | 10 | ||
11 | /* target info */ | 11 | /* Backwards compatibility for old userspace */ |
12 | struct ipt_NFQ_info { | 12 | #include <linux/netfilter/xt_NFQUEUE.h> |
13 | u_int16_t queuenum; | 13 | |
14 | }; | 14 | #define ipt_NFQ_info xt_NFQ_info |
15 | 15 | ||
16 | #endif /* _IPT_DSCP_TARGET_H */ | 16 | #endif /* _IPT_DSCP_TARGET_H */ |
diff --git a/include/linux/netfilter_ipv4/ipt_comment.h b/include/linux/netfilter_ipv4/ipt_comment.h index 85c1123c29ce..ae2afc2f7481 100644 --- a/include/linux/netfilter_ipv4/ipt_comment.h +++ b/include/linux/netfilter_ipv4/ipt_comment.h | |||
@@ -1,10 +1,10 @@ | |||
1 | #ifndef _IPT_COMMENT_H | 1 | #ifndef _IPT_COMMENT_H |
2 | #define _IPT_COMMENT_H | 2 | #define _IPT_COMMENT_H |
3 | 3 | ||
4 | #define IPT_MAX_COMMENT_LEN 256 | 4 | #include <linux/netfilter/xt_comment.h> |
5 | 5 | ||
6 | struct ipt_comment_info { | 6 | #define IPT_MAX_COMMENT_LEN XT_MAX_COMMENT_LEN |
7 | unsigned char comment[IPT_MAX_COMMENT_LEN]; | 7 | |
8 | }; | 8 | #define ipt_comment_info xt_comment_info |
9 | 9 | ||
10 | #endif /* _IPT_COMMENT_H */ | 10 | #endif /* _IPT_COMMENT_H */ |
diff --git a/include/linux/netfilter_ipv4/ipt_connbytes.h b/include/linux/netfilter_ipv4/ipt_connbytes.h index 9e5532f8d8ac..b04dfa3083c9 100644 --- a/include/linux/netfilter_ipv4/ipt_connbytes.h +++ b/include/linux/netfilter_ipv4/ipt_connbytes.h | |||
@@ -1,25 +1,18 @@ | |||
1 | #ifndef _IPT_CONNBYTES_H | 1 | #ifndef _IPT_CONNBYTES_H |
2 | #define _IPT_CONNBYTES_H | 2 | #define _IPT_CONNBYTES_H |
3 | 3 | ||
4 | enum ipt_connbytes_what { | 4 | #include <net/netfilter/xt_connbytes.h> |
5 | IPT_CONNBYTES_PKTS, | 5 | #define ipt_connbytes_what xt_connbytes_what |
6 | IPT_CONNBYTES_BYTES, | ||
7 | IPT_CONNBYTES_AVGPKT, | ||
8 | }; | ||
9 | 6 | ||
10 | enum ipt_connbytes_direction { | 7 | #define IPT_CONNBYTES_PKTS XT_CONNBYTES_PACKETS |
11 | IPT_CONNBYTES_DIR_ORIGINAL, | 8 | #define IPT_CONNBYTES_BYTES XT_CONNBYTES_BYTES |
12 | IPT_CONNBYTES_DIR_REPLY, | 9 | #define IPT_CONNBYTES_AVGPKT XT_CONNBYTES_AVGPKT |
13 | IPT_CONNBYTES_DIR_BOTH, | 10 | |
14 | }; | 11 | #define ipt_connbytes_direction xt_connbytes_direction |
12 | #define IPT_CONNBYTES_DIR_ORIGINAL XT_CONNBYTES_DIR_ORIGINAL | ||
13 | #define IPT_CONNBYTES_DIR_REPLY XT_CONNBYTES_DIR_REPLY | ||
14 | #define IPT_CONNBYTES_DIR_BOTH XT_CONNBYTES_DIR_BOTH | ||
15 | |||
16 | #define ipt_connbytes_info xt_connbytes_info | ||
15 | 17 | ||
16 | struct ipt_connbytes_info | ||
17 | { | ||
18 | struct { | ||
19 | aligned_u64 from; /* count to be matched */ | ||
20 | aligned_u64 to; /* count to be matched */ | ||
21 | } count; | ||
22 | u_int8_t what; /* ipt_connbytes_what */ | ||
23 | u_int8_t direction; /* ipt_connbytes_direction */ | ||
24 | }; | ||
25 | #endif | 18 | #endif |
diff --git a/include/linux/netfilter_ipv4/ipt_connmark.h b/include/linux/netfilter_ipv4/ipt_connmark.h index 46573270d9aa..c7ba6560d44c 100644 --- a/include/linux/netfilter_ipv4/ipt_connmark.h +++ b/include/linux/netfilter_ipv4/ipt_connmark.h | |||
@@ -1,18 +1,7 @@ | |||
1 | #ifndef _IPT_CONNMARK_H | 1 | #ifndef _IPT_CONNMARK_H |
2 | #define _IPT_CONNMARK_H | 2 | #define _IPT_CONNMARK_H |
3 | 3 | ||
4 | /* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com> | 4 | #include <linux/netfilter/xt_connmark.h> |
5 | * by Henrik Nordstrom <hno@marasystems.com> | 5 | #define ipt_connmark_info xt_connmark_info |
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | */ | ||
12 | |||
13 | struct ipt_connmark_info { | ||
14 | unsigned long mark, mask; | ||
15 | u_int8_t invert; | ||
16 | }; | ||
17 | 6 | ||
18 | #endif /*_IPT_CONNMARK_H*/ | 7 | #endif /*_IPT_CONNMARK_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_conntrack.h b/include/linux/netfilter_ipv4/ipt_conntrack.h index 413c5658bd3a..cde6762949c5 100644 --- a/include/linux/netfilter_ipv4/ipt_conntrack.h +++ b/include/linux/netfilter_ipv4/ipt_conntrack.h | |||
@@ -5,56 +5,24 @@ | |||
5 | #ifndef _IPT_CONNTRACK_H | 5 | #ifndef _IPT_CONNTRACK_H |
6 | #define _IPT_CONNTRACK_H | 6 | #define _IPT_CONNTRACK_H |
7 | 7 | ||
8 | #define IPT_CONNTRACK_STATE_BIT(ctinfo) (1 << ((ctinfo)%IP_CT_IS_REPLY+1)) | 8 | #include <linux/netfilter/xt_conntrack.h> |
9 | #define IPT_CONNTRACK_STATE_INVALID (1 << 0) | ||
10 | 9 | ||
11 | #define IPT_CONNTRACK_STATE_SNAT (1 << (IP_CT_NUMBER + 1)) | 10 | #define IPT_CONNTRACK_STATE_BIT(ctinfo) XT_CONNTRACK_STATE_BIT(ctinfo) |
12 | #define IPT_CONNTRACK_STATE_DNAT (1 << (IP_CT_NUMBER + 2)) | 11 | #define IPT_CONNTRACK_STATE_INVALID XT_CONNTRACK_STATE_INVALID |
13 | #define IPT_CONNTRACK_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 3)) | ||
14 | 12 | ||
15 | /* flags, invflags: */ | 13 | #define IPT_CONNTRACK_STATE_SNAT XT_CONNTRACK_STATE_SNAT |
16 | #define IPT_CONNTRACK_STATE 0x01 | 14 | #define IPT_CONNTRACK_STATE_DNAT XT_CONNTRACK_STATE_DNAT |
17 | #define IPT_CONNTRACK_PROTO 0x02 | 15 | #define IPT_CONNTRACK_STATE_UNTRACKED XT_CONNTRACK_STATE_UNTRACKED |
18 | #define IPT_CONNTRACK_ORIGSRC 0x04 | ||
19 | #define IPT_CONNTRACK_ORIGDST 0x08 | ||
20 | #define IPT_CONNTRACK_REPLSRC 0x10 | ||
21 | #define IPT_CONNTRACK_REPLDST 0x20 | ||
22 | #define IPT_CONNTRACK_STATUS 0x40 | ||
23 | #define IPT_CONNTRACK_EXPIRES 0x80 | ||
24 | |||
25 | /* This is exposed to userspace, so remains frozen in time. */ | ||
26 | struct ip_conntrack_old_tuple | ||
27 | { | ||
28 | struct { | ||
29 | __u32 ip; | ||
30 | union { | ||
31 | __u16 all; | ||
32 | } u; | ||
33 | } src; | ||
34 | |||
35 | struct { | ||
36 | __u32 ip; | ||
37 | union { | ||
38 | __u16 all; | ||
39 | } u; | ||
40 | |||
41 | /* The protocol. */ | ||
42 | u16 protonum; | ||
43 | } dst; | ||
44 | }; | ||
45 | 16 | ||
46 | struct ipt_conntrack_info | 17 | /* flags, invflags: */ |
47 | { | 18 | #define IPT_CONNTRACK_STATE XT_CONNTRACK_STATE |
48 | unsigned int statemask, statusmask; | 19 | #define IPT_CONNTRACK_PROTO XT_CONNTRACK_PROTO |
49 | 20 | #define IPT_CONNTRACK_ORIGSRC XT_CONNTRACK_ORIGSRC | |
50 | struct ip_conntrack_old_tuple tuple[IP_CT_DIR_MAX]; | 21 | #define IPT_CONNTRACK_ORIGDST XT_CONNTRACK_ORIGDST |
51 | struct in_addr sipmsk[IP_CT_DIR_MAX], dipmsk[IP_CT_DIR_MAX]; | 22 | #define IPT_CONNTRACK_REPLSRC XT_CONNTRACK_REPLSRC |
52 | 23 | #define IPT_CONNTRACK_REPLDST XT_CONNTRACK_REPLDST | |
53 | unsigned long expires_min, expires_max; | 24 | #define IPT_CONNTRACK_STATUS XT_CONNTRACK_STATUS |
54 | 25 | #define IPT_CONNTRACK_EXPIRES XT_CONNTRACK_EXPIRES | |
55 | /* Flags word */ | 26 | |
56 | u_int8_t flags; | 27 | #define ipt_conntrack_info xt_conntrack_info |
57 | /* Inverse flags */ | ||
58 | u_int8_t invflags; | ||
59 | }; | ||
60 | #endif /*_IPT_CONNTRACK_H*/ | 28 | #endif /*_IPT_CONNTRACK_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_dccp.h b/include/linux/netfilter_ipv4/ipt_dccp.h index 3cb3a522e62b..e70d11e1f53c 100644 --- a/include/linux/netfilter_ipv4/ipt_dccp.h +++ b/include/linux/netfilter_ipv4/ipt_dccp.h | |||
@@ -1,23 +1,15 @@ | |||
1 | #ifndef _IPT_DCCP_H_ | 1 | #ifndef _IPT_DCCP_H_ |
2 | #define _IPT_DCCP_H_ | 2 | #define _IPT_DCCP_H_ |
3 | 3 | ||
4 | #define IPT_DCCP_SRC_PORTS 0x01 | 4 | #include <linux/netfilter/xt_dccp.h> |
5 | #define IPT_DCCP_DEST_PORTS 0x02 | 5 | #define IPT_DCCP_SRC_PORTS XT_DCCP_SRC_PORTS |
6 | #define IPT_DCCP_TYPE 0x04 | 6 | #define IPT_DCCP_DEST_PORTS XT_DCCP_DEST_PORTS |
7 | #define IPT_DCCP_OPTION 0x08 | 7 | #define IPT_DCCP_TYPE XT_DCCP_TYPE |
8 | #define IPT_DCCP_OPTION XT_DCCP_OPTION | ||
8 | 9 | ||
9 | #define IPT_DCCP_VALID_FLAGS 0x0f | 10 | #define IPT_DCCP_VALID_FLAGS XT_DCCP_VALID_FLAGS |
10 | 11 | ||
11 | struct ipt_dccp_info { | 12 | #define ipt_dccp_info xt_dccp_info |
12 | u_int16_t dpts[2]; /* Min, Max */ | ||
13 | u_int16_t spts[2]; /* Min, Max */ | ||
14 | |||
15 | u_int16_t flags; | ||
16 | u_int16_t invflags; | ||
17 | |||
18 | u_int16_t typemask; | ||
19 | u_int8_t option; | ||
20 | }; | ||
21 | 13 | ||
22 | #endif /* _IPT_DCCP_H_ */ | 14 | #endif /* _IPT_DCCP_H_ */ |
23 | 15 | ||
diff --git a/include/linux/netfilter_ipv4/ipt_helper.h b/include/linux/netfilter_ipv4/ipt_helper.h index 6f12ecb8c93d..80452c218551 100644 --- a/include/linux/netfilter_ipv4/ipt_helper.h +++ b/include/linux/netfilter_ipv4/ipt_helper.h | |||
@@ -1,8 +1,7 @@ | |||
1 | #ifndef _IPT_HELPER_H | 1 | #ifndef _IPT_HELPER_H |
2 | #define _IPT_HELPER_H | 2 | #define _IPT_HELPER_H |
3 | 3 | ||
4 | struct ipt_helper_info { | 4 | #include <linux/netfilter/xt_helper.h> |
5 | int invert; | 5 | #define ipt_helper_info xt_helper_info |
6 | char name[30]; | 6 | |
7 | }; | ||
8 | #endif /* _IPT_HELPER_H */ | 7 | #endif /* _IPT_HELPER_H */ |
diff --git a/include/linux/netfilter_ipv4/ipt_length.h b/include/linux/netfilter_ipv4/ipt_length.h index 6e0885229615..9b45206ffcef 100644 --- a/include/linux/netfilter_ipv4/ipt_length.h +++ b/include/linux/netfilter_ipv4/ipt_length.h | |||
@@ -1,9 +1,7 @@ | |||
1 | #ifndef _IPT_LENGTH_H | 1 | #ifndef _IPT_LENGTH_H |
2 | #define _IPT_LENGTH_H | 2 | #define _IPT_LENGTH_H |
3 | 3 | ||
4 | struct ipt_length_info { | 4 | #include <linux/netfilter/xt_length.h> |
5 | u_int16_t min, max; | 5 | #define ipt_length_info xt_length_info |
6 | u_int8_t invert; | ||
7 | }; | ||
8 | 6 | ||
9 | #endif /*_IPT_LENGTH_H*/ | 7 | #endif /*_IPT_LENGTH_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_limit.h b/include/linux/netfilter_ipv4/ipt_limit.h index 256453409e21..92f5cd07bbc4 100644 --- a/include/linux/netfilter_ipv4/ipt_limit.h +++ b/include/linux/netfilter_ipv4/ipt_limit.h | |||
@@ -1,21 +1,8 @@ | |||
1 | #ifndef _IPT_RATE_H | 1 | #ifndef _IPT_RATE_H |
2 | #define _IPT_RATE_H | 2 | #define _IPT_RATE_H |
3 | 3 | ||
4 | /* timings are in milliseconds. */ | 4 | #include <linux/netfilter/xt_limit.h> |
5 | #define IPT_LIMIT_SCALE 10000 | 5 | #define IPT_LIMIT_SCALE XT_LIMIT_SCALE |
6 | #define ipt_rateinfo xt_rateinfo | ||
6 | 7 | ||
7 | /* 1/10,000 sec period => max of 10,000/sec. Min rate is then 429490 | ||
8 | seconds, or one every 59 hours. */ | ||
9 | struct ipt_rateinfo { | ||
10 | u_int32_t avg; /* Average secs between packets * scale */ | ||
11 | u_int32_t burst; /* Period multiplier for upper limit. */ | ||
12 | |||
13 | /* Used internally by the kernel */ | ||
14 | unsigned long prev; | ||
15 | u_int32_t credit; | ||
16 | u_int32_t credit_cap, cost; | ||
17 | |||
18 | /* Ugly, ugly fucker. */ | ||
19 | struct ipt_rateinfo *master; | ||
20 | }; | ||
21 | #endif /*_IPT_RATE_H*/ | 8 | #endif /*_IPT_RATE_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_mac.h b/include/linux/netfilter_ipv4/ipt_mac.h index f8d5b8e7ccdb..b186008a3c47 100644 --- a/include/linux/netfilter_ipv4/ipt_mac.h +++ b/include/linux/netfilter_ipv4/ipt_mac.h | |||
@@ -1,8 +1,7 @@ | |||
1 | #ifndef _IPT_MAC_H | 1 | #ifndef _IPT_MAC_H |
2 | #define _IPT_MAC_H | 2 | #define _IPT_MAC_H |
3 | 3 | ||
4 | struct ipt_mac_info { | 4 | #include <linux/netfilter/xt_mac.h> |
5 | unsigned char srcaddr[ETH_ALEN]; | 5 | #define ipt_mac_info xt_mac_info |
6 | int invert; | 6 | |
7 | }; | ||
8 | #endif /*_IPT_MAC_H*/ | 7 | #endif /*_IPT_MAC_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_mark.h b/include/linux/netfilter_ipv4/ipt_mark.h index f3952b563d4c..bfde67c61224 100644 --- a/include/linux/netfilter_ipv4/ipt_mark.h +++ b/include/linux/netfilter_ipv4/ipt_mark.h | |||
@@ -1,9 +1,9 @@ | |||
1 | #ifndef _IPT_MARK_H | 1 | #ifndef _IPT_MARK_H |
2 | #define _IPT_MARK_H | 2 | #define _IPT_MARK_H |
3 | 3 | ||
4 | struct ipt_mark_info { | 4 | /* Backwards compatibility for old userspace */ |
5 | unsigned long mark, mask; | 5 | #include <linux/netfilter/xt_mark.h> |
6 | u_int8_t invert; | 6 | |
7 | }; | 7 | #define ipt_mark_info xt_mark_info |
8 | 8 | ||
9 | #endif /*_IPT_MARK_H*/ | 9 | #endif /*_IPT_MARK_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_physdev.h b/include/linux/netfilter_ipv4/ipt_physdev.h index 7538c8655ec0..2400e7140f26 100644 --- a/include/linux/netfilter_ipv4/ipt_physdev.h +++ b/include/linux/netfilter_ipv4/ipt_physdev.h | |||
@@ -1,24 +1,17 @@ | |||
1 | #ifndef _IPT_PHYSDEV_H | 1 | #ifndef _IPT_PHYSDEV_H |
2 | #define _IPT_PHYSDEV_H | 2 | #define _IPT_PHYSDEV_H |
3 | 3 | ||
4 | #ifdef __KERNEL__ | 4 | /* Backwards compatibility for old userspace */ |
5 | #include <linux/if.h> | ||
6 | #endif | ||
7 | 5 | ||
8 | #define IPT_PHYSDEV_OP_IN 0x01 | 6 | #include <linux/netfilter/xt_physdev.h> |
9 | #define IPT_PHYSDEV_OP_OUT 0x02 | ||
10 | #define IPT_PHYSDEV_OP_BRIDGED 0x04 | ||
11 | #define IPT_PHYSDEV_OP_ISIN 0x08 | ||
12 | #define IPT_PHYSDEV_OP_ISOUT 0x10 | ||
13 | #define IPT_PHYSDEV_OP_MASK (0x20 - 1) | ||
14 | 7 | ||
15 | struct ipt_physdev_info { | 8 | #define IPT_PHYSDEV_OP_IN XT_PHYSDEV_OP_IN |
16 | char physindev[IFNAMSIZ]; | 9 | #define IPT_PHYSDEV_OP_OUT XT_PHYSDEV_OP_OUT |
17 | char in_mask[IFNAMSIZ]; | 10 | #define IPT_PHYSDEV_OP_BRIDGED XT_PHYSDEV_OP_BRIDGED |
18 | char physoutdev[IFNAMSIZ]; | 11 | #define IPT_PHYSDEV_OP_ISIN XT_PHYSDEV_OP_ISIN |
19 | char out_mask[IFNAMSIZ]; | 12 | #define IPT_PHYSDEV_OP_ISOUT XT_PHYSDEV_OP_ISOUT |
20 | u_int8_t invert; | 13 | #define IPT_PHYSDEV_OP_MASK XT_PHYSDEV_OP_MASK |
21 | u_int8_t bitmask; | 14 | |
22 | }; | 15 | #define ipt_physdev_info xt_physdev_info |
23 | 16 | ||
24 | #endif /*_IPT_PHYSDEV_H*/ | 17 | #endif /*_IPT_PHYSDEV_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_pkttype.h b/include/linux/netfilter_ipv4/ipt_pkttype.h index d53a65848683..ff1fbc949a0c 100644 --- a/include/linux/netfilter_ipv4/ipt_pkttype.h +++ b/include/linux/netfilter_ipv4/ipt_pkttype.h | |||
@@ -1,8 +1,7 @@ | |||
1 | #ifndef _IPT_PKTTYPE_H | 1 | #ifndef _IPT_PKTTYPE_H |
2 | #define _IPT_PKTTYPE_H | 2 | #define _IPT_PKTTYPE_H |
3 | 3 | ||
4 | struct ipt_pkttype_info { | 4 | #include <linux/netfilter/xt_pkttype.h> |
5 | int pkttype; | 5 | #define ipt_pkttype_info xt_pkttype_info |
6 | int invert; | 6 | |
7 | }; | ||
8 | #endif /*_IPT_PKTTYPE_H*/ | 7 | #endif /*_IPT_PKTTYPE_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_realm.h b/include/linux/netfilter_ipv4/ipt_realm.h index a4d6698723ac..b3996eaa0188 100644 --- a/include/linux/netfilter_ipv4/ipt_realm.h +++ b/include/linux/netfilter_ipv4/ipt_realm.h | |||
@@ -1,10 +1,7 @@ | |||
1 | #ifndef _IPT_REALM_H | 1 | #ifndef _IPT_REALM_H |
2 | #define _IPT_REALM_H | 2 | #define _IPT_REALM_H |
3 | 3 | ||
4 | struct ipt_realm_info { | 4 | #include <linux/netfilter/xt_realm.h> |
5 | u_int32_t id; | 5 | #define ipt_realm_info xt_realm_info |
6 | u_int32_t mask; | ||
7 | u_int8_t invert; | ||
8 | }; | ||
9 | 6 | ||
10 | #endif /* _IPT_REALM_H */ | 7 | #endif /* _IPT_REALM_H */ |
diff --git a/include/linux/netfilter_ipv4/ipt_state.h b/include/linux/netfilter_ipv4/ipt_state.h index 5df37868933d..a44a99cc28cc 100644 --- a/include/linux/netfilter_ipv4/ipt_state.h +++ b/include/linux/netfilter_ipv4/ipt_state.h | |||
@@ -1,13 +1,15 @@ | |||
1 | #ifndef _IPT_STATE_H | 1 | #ifndef _IPT_STATE_H |
2 | #define _IPT_STATE_H | 2 | #define _IPT_STATE_H |
3 | 3 | ||
4 | #define IPT_STATE_BIT(ctinfo) (1 << ((ctinfo)%IP_CT_IS_REPLY+1)) | 4 | /* Backwards compatibility for old userspace */ |
5 | #define IPT_STATE_INVALID (1 << 0) | ||
6 | 5 | ||
7 | #define IPT_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 1)) | 6 | #include <linux/netfilter/xt_state.h> |
7 | |||
8 | #define IPT_STATE_BIT XT_STATE_BIT | ||
9 | #define IPT_STATE_INVALID XT_STATE_INVALID | ||
10 | |||
11 | #define IPT_STATE_UNTRACKED XT_STATE_UNTRACKED | ||
12 | |||
13 | #define ipt_state_info xt_state_info | ||
8 | 14 | ||
9 | struct ipt_state_info | ||
10 | { | ||
11 | unsigned int statemask; | ||
12 | }; | ||
13 | #endif /*_IPT_STATE_H*/ | 15 | #endif /*_IPT_STATE_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_string.h b/include/linux/netfilter_ipv4/ipt_string.h index a265f6e44eab..c26de3059903 100644 --- a/include/linux/netfilter_ipv4/ipt_string.h +++ b/include/linux/netfilter_ipv4/ipt_string.h | |||
@@ -1,18 +1,10 @@ | |||
1 | #ifndef _IPT_STRING_H | 1 | #ifndef _IPT_STRING_H |
2 | #define _IPT_STRING_H | 2 | #define _IPT_STRING_H |
3 | 3 | ||
4 | #define IPT_STRING_MAX_PATTERN_SIZE 128 | 4 | #include <linux/netfilter/xt_string.h> |
5 | #define IPT_STRING_MAX_ALGO_NAME_SIZE 16 | ||
6 | 5 | ||
7 | struct ipt_string_info | 6 | #define IPT_STRING_MAX_PATTERN_SIZE XT_STRING_MAX_PATTERN_SIZE |
8 | { | 7 | #define IPT_STRING_MAX_ALGO_NAME_SIZE XT_STRING_MAX_ALGO_NAME_SIZE |
9 | u_int16_t from_offset; | 8 | #define ipt_string_info xt_string_info |
10 | u_int16_t to_offset; | ||
11 | char algo[IPT_STRING_MAX_ALGO_NAME_SIZE]; | ||
12 | char pattern[IPT_STRING_MAX_PATTERN_SIZE]; | ||
13 | u_int8_t patlen; | ||
14 | u_int8_t invert; | ||
15 | struct ts_config __attribute__((aligned(8))) *config; | ||
16 | }; | ||
17 | 9 | ||
18 | #endif /*_IPT_STRING_H*/ | 10 | #endif /*_IPT_STRING_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_tcpmss.h b/include/linux/netfilter_ipv4/ipt_tcpmss.h index e2b14397f701..18bbc8e8e009 100644 --- a/include/linux/netfilter_ipv4/ipt_tcpmss.h +++ b/include/linux/netfilter_ipv4/ipt_tcpmss.h | |||
@@ -1,9 +1,7 @@ | |||
1 | #ifndef _IPT_TCPMSS_MATCH_H | 1 | #ifndef _IPT_TCPMSS_MATCH_H |
2 | #define _IPT_TCPMSS_MATCH_H | 2 | #define _IPT_TCPMSS_MATCH_H |
3 | 3 | ||
4 | struct ipt_tcpmss_match_info { | 4 | #include <linux/netfilter/xt_tcpmss.h> |
5 | u_int16_t mss_min, mss_max; | 5 | #define ipt_tcpmss_match_info xt_tcpmss_match_info |
6 | u_int8_t invert; | ||
7 | }; | ||
8 | 6 | ||
9 | #endif /*_IPT_TCPMSS_MATCH_H*/ | 7 | #endif /*_IPT_TCPMSS_MATCH_H*/ |
diff --git a/include/linux/netfilter_ipv6/ip6_tables.h b/include/linux/netfilter_ipv6/ip6_tables.h index c163ba31aab7..f249b574f0fa 100644 --- a/include/linux/netfilter_ipv6/ip6_tables.h +++ b/include/linux/netfilter_ipv6/ip6_tables.h | |||
@@ -25,8 +25,15 @@ | |||
25 | #include <linux/compiler.h> | 25 | #include <linux/compiler.h> |
26 | #include <linux/netfilter_ipv6.h> | 26 | #include <linux/netfilter_ipv6.h> |
27 | 27 | ||
28 | #define IP6T_FUNCTION_MAXNAMELEN 30 | 28 | #include <linux/netfilter/x_tables.h> |
29 | #define IP6T_TABLE_MAXNAMELEN 32 | 29 | |
30 | #define IP6T_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN | ||
31 | #define IP6T_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN | ||
32 | |||
33 | #define ip6t_match xt_match | ||
34 | #define ip6t_target xt_target | ||
35 | #define ip6t_table xt_table | ||
36 | #define ip6t_get_revision xt_get_revision | ||
30 | 37 | ||
31 | /* Yes, Virginia, you have to zero the padding. */ | 38 | /* Yes, Virginia, you have to zero the padding. */ |
32 | struct ip6t_ip6 { | 39 | struct ip6t_ip6 { |
@@ -104,10 +111,7 @@ struct ip6t_standard_target | |||
104 | int verdict; | 111 | int verdict; |
105 | }; | 112 | }; |
106 | 113 | ||
107 | struct ip6t_counters | 114 | #define ip6t_counters xt_counters |
108 | { | ||
109 | u_int64_t pcnt, bcnt; /* Packet and byte counters */ | ||
110 | }; | ||
111 | 115 | ||
112 | /* Values for "flag" field in struct ip6t_ip6 (general ip6 structure). */ | 116 | /* Values for "flag" field in struct ip6t_ip6 (general ip6 structure). */ |
113 | #define IP6T_F_PROTO 0x01 /* Set if rule cares about upper | 117 | #define IP6T_F_PROTO 0x01 /* Set if rule cares about upper |
@@ -123,7 +127,7 @@ struct ip6t_counters | |||
123 | #define IP6T_INV_SRCIP 0x08 /* Invert the sense of SRC IP. */ | 127 | #define IP6T_INV_SRCIP 0x08 /* Invert the sense of SRC IP. */ |
124 | #define IP6T_INV_DSTIP 0x10 /* Invert the sense of DST OP. */ | 128 | #define IP6T_INV_DSTIP 0x10 /* Invert the sense of DST OP. */ |
125 | #define IP6T_INV_FRAG 0x20 /* Invert the sense of FRAG. */ | 129 | #define IP6T_INV_FRAG 0x20 /* Invert the sense of FRAG. */ |
126 | #define IP6T_INV_PROTO 0x40 /* Invert the sense of PROTO. */ | 130 | #define IP6T_INV_PROTO XT_INV_PROTO |
127 | #define IP6T_INV_MASK 0x7F /* All possible flag bits mask. */ | 131 | #define IP6T_INV_MASK 0x7F /* All possible flag bits mask. */ |
128 | 132 | ||
129 | /* This structure defines each of the firewall rules. Consists of 3 | 133 | /* This structure defines each of the firewall rules. Consists of 3 |
@@ -145,7 +149,7 @@ struct ip6t_entry | |||
145 | unsigned int comefrom; | 149 | unsigned int comefrom; |
146 | 150 | ||
147 | /* Packet and byte counters. */ | 151 | /* Packet and byte counters. */ |
148 | struct ip6t_counters counters; | 152 | struct xt_counters counters; |
149 | 153 | ||
150 | /* The matches (if any), then the target. */ | 154 | /* The matches (if any), then the target. */ |
151 | unsigned char elems[0]; | 155 | unsigned char elems[0]; |
@@ -155,54 +159,41 @@ struct ip6t_entry | |||
155 | * New IP firewall options for [gs]etsockopt at the RAW IP level. | 159 | * New IP firewall options for [gs]etsockopt at the RAW IP level. |
156 | * Unlike BSD Linux inherits IP options so you don't have to use | 160 | * Unlike BSD Linux inherits IP options so you don't have to use |
157 | * a raw socket for this. Instead we check rights in the calls. */ | 161 | * a raw socket for this. Instead we check rights in the calls. */ |
158 | #define IP6T_BASE_CTL 64 /* base for firewall socket options */ | 162 | #define IP6T_BASE_CTL XT_BASE_CTL |
159 | 163 | ||
160 | #define IP6T_SO_SET_REPLACE (IP6T_BASE_CTL) | 164 | #define IP6T_SO_SET_REPLACE XT_SO_SET_REPLACE |
161 | #define IP6T_SO_SET_ADD_COUNTERS (IP6T_BASE_CTL + 1) | 165 | #define IP6T_SO_SET_ADD_COUNTERS XT_SO_SET_ADD_COUNTERS |
162 | #define IP6T_SO_SET_MAX IP6T_SO_SET_ADD_COUNTERS | 166 | #define IP6T_SO_SET_MAX XT_SO_SET_MAX |
163 | 167 | ||
164 | #define IP6T_SO_GET_INFO (IP6T_BASE_CTL) | 168 | #define IP6T_SO_GET_INFO XT_SO_GET_INFO |
165 | #define IP6T_SO_GET_ENTRIES (IP6T_BASE_CTL + 1) | 169 | #define IP6T_SO_GET_ENTRIES XT_SO_GET_ENTRIES |
166 | #define IP6T_SO_GET_REVISION_MATCH (IP6T_BASE_CTL + 2) | 170 | #define IP6T_SO_GET_REVISION_MATCH XT_SO_GET_REVISION_MATCH |
167 | #define IP6T_SO_GET_REVISION_TARGET (IP6T_BASE_CTL + 3) | 171 | #define IP6T_SO_GET_REVISION_TARGET XT_SO_GET_REVISION_TARGET |
168 | #define IP6T_SO_GET_MAX IP6T_SO_GET_REVISION_TARGET | 172 | #define IP6T_SO_GET_MAX XT_SO_GET_REVISION_TARGET |
169 | 173 | ||
170 | /* CONTINUE verdict for targets */ | 174 | /* CONTINUE verdict for targets */ |
171 | #define IP6T_CONTINUE 0xFFFFFFFF | 175 | #define IP6T_CONTINUE XT_CONTINUE |
172 | 176 | ||
173 | /* For standard target */ | 177 | /* For standard target */ |
174 | #define IP6T_RETURN (-NF_REPEAT - 1) | 178 | #define IP6T_RETURN XT_RETURN |
175 | 179 | ||
176 | /* TCP matching stuff */ | 180 | /* TCP/UDP matching stuff */ |
177 | struct ip6t_tcp | 181 | #include <linux/netfilter/xt_tcpudp.h> |
178 | { | 182 | |
179 | u_int16_t spts[2]; /* Source port range. */ | 183 | #define ip6t_tcp xt_tcp |
180 | u_int16_t dpts[2]; /* Destination port range. */ | 184 | #define ip6t_udp xt_udp |
181 | u_int8_t option; /* TCP Option iff non-zero*/ | ||
182 | u_int8_t flg_mask; /* TCP flags mask byte */ | ||
183 | u_int8_t flg_cmp; /* TCP flags compare byte */ | ||
184 | u_int8_t invflags; /* Inverse flags */ | ||
185 | }; | ||
186 | 185 | ||
187 | /* Values for "inv" field in struct ipt_tcp. */ | 186 | /* Values for "inv" field in struct ipt_tcp. */ |
188 | #define IP6T_TCP_INV_SRCPT 0x01 /* Invert the sense of source ports. */ | 187 | #define IP6T_TCP_INV_SRCPT XT_TCP_INV_SRCPT |
189 | #define IP6T_TCP_INV_DSTPT 0x02 /* Invert the sense of dest ports. */ | 188 | #define IP6T_TCP_INV_DSTPT XT_TCP_INV_DSTPT |
190 | #define IP6T_TCP_INV_FLAGS 0x04 /* Invert the sense of TCP flags. */ | 189 | #define IP6T_TCP_INV_FLAGS XT_TCP_INV_FLAGS |
191 | #define IP6T_TCP_INV_OPTION 0x08 /* Invert the sense of option test. */ | 190 | #define IP6T_TCP_INV_OPTION XT_TCP_INV_OPTION |
192 | #define IP6T_TCP_INV_MASK 0x0F /* All possible flags. */ | 191 | #define IP6T_TCP_INV_MASK XT_TCP_INV_MASK |
193 | |||
194 | /* UDP matching stuff */ | ||
195 | struct ip6t_udp | ||
196 | { | ||
197 | u_int16_t spts[2]; /* Source port range. */ | ||
198 | u_int16_t dpts[2]; /* Destination port range. */ | ||
199 | u_int8_t invflags; /* Inverse flags */ | ||
200 | }; | ||
201 | 192 | ||
202 | /* Values for "invflags" field in struct ipt_udp. */ | 193 | /* Values for "invflags" field in struct ipt_udp. */ |
203 | #define IP6T_UDP_INV_SRCPT 0x01 /* Invert the sense of source ports. */ | 194 | #define IP6T_UDP_INV_SRCPT XT_UDP_INV_SRCPT |
204 | #define IP6T_UDP_INV_DSTPT 0x02 /* Invert the sense of dest ports. */ | 195 | #define IP6T_UDP_INV_DSTPT XT_UDP_INV_DSTPT |
205 | #define IP6T_UDP_INV_MASK 0x03 /* All possible flags. */ | 196 | #define IP6T_UDP_INV_MASK XT_UDP_INV_MASK |
206 | 197 | ||
207 | /* ICMP matching stuff */ | 198 | /* ICMP matching stuff */ |
208 | struct ip6t_icmp | 199 | struct ip6t_icmp |
@@ -264,23 +255,14 @@ struct ip6t_replace | |||
264 | /* Number of counters (must be equal to current number of entries). */ | 255 | /* Number of counters (must be equal to current number of entries). */ |
265 | unsigned int num_counters; | 256 | unsigned int num_counters; |
266 | /* The old entries' counters. */ | 257 | /* The old entries' counters. */ |
267 | struct ip6t_counters __user *counters; | 258 | struct xt_counters __user *counters; |
268 | 259 | ||
269 | /* The entries (hang off end: not really an array). */ | 260 | /* The entries (hang off end: not really an array). */ |
270 | struct ip6t_entry entries[0]; | 261 | struct ip6t_entry entries[0]; |
271 | }; | 262 | }; |
272 | 263 | ||
273 | /* The argument to IP6T_SO_ADD_COUNTERS. */ | 264 | /* The argument to IP6T_SO_ADD_COUNTERS. */ |
274 | struct ip6t_counters_info | 265 | #define ip6t_counters_info xt_counters_info |
275 | { | ||
276 | /* Which table. */ | ||
277 | char name[IP6T_TABLE_MAXNAMELEN]; | ||
278 | |||
279 | unsigned int num_counters; | ||
280 | |||
281 | /* The counters (actually `number' of these). */ | ||
282 | struct ip6t_counters counters[0]; | ||
283 | }; | ||
284 | 266 | ||
285 | /* The argument to IP6T_SO_GET_ENTRIES. */ | 267 | /* The argument to IP6T_SO_GET_ENTRIES. */ |
286 | struct ip6t_get_entries | 268 | struct ip6t_get_entries |
@@ -295,19 +277,10 @@ struct ip6t_get_entries | |||
295 | struct ip6t_entry entrytable[0]; | 277 | struct ip6t_entry entrytable[0]; |
296 | }; | 278 | }; |
297 | 279 | ||
298 | /* The argument to IP6T_SO_GET_REVISION_*. Returns highest revision | ||
299 | * kernel supports, if >= revision. */ | ||
300 | struct ip6t_get_revision | ||
301 | { | ||
302 | char name[IP6T_FUNCTION_MAXNAMELEN-1]; | ||
303 | |||
304 | u_int8_t revision; | ||
305 | }; | ||
306 | |||
307 | /* Standard return verdict, or do jump. */ | 280 | /* Standard return verdict, or do jump. */ |
308 | #define IP6T_STANDARD_TARGET "" | 281 | #define IP6T_STANDARD_TARGET XT_STANDARD_TARGET |
309 | /* Error verdict. */ | 282 | /* Error verdict. */ |
310 | #define IP6T_ERROR_TARGET "ERROR" | 283 | #define IP6T_ERROR_TARGET XT_ERROR_TARGET |
311 | 284 | ||
312 | /* Helper functions */ | 285 | /* Helper functions */ |
313 | static __inline__ struct ip6t_entry_target * | 286 | static __inline__ struct ip6t_entry_target * |
@@ -361,104 +334,11 @@ ip6t_get_target(struct ip6t_entry *e) | |||
361 | #include <linux/init.h> | 334 | #include <linux/init.h> |
362 | extern void ip6t_init(void) __init; | 335 | extern void ip6t_init(void) __init; |
363 | 336 | ||
364 | struct ip6t_match | 337 | #define ip6t_register_target(tgt) xt_register_target(AF_INET6, tgt) |
365 | { | 338 | #define ip6t_unregister_target(tgt) xt_unregister_target(AF_INET6, tgt) |
366 | struct list_head list; | ||
367 | |||
368 | const char name[IP6T_FUNCTION_MAXNAMELEN-1]; | ||
369 | |||
370 | u_int8_t revision; | ||
371 | |||
372 | /* Return true or false: return FALSE and set *hotdrop = 1 to | ||
373 | force immediate packet drop. */ | ||
374 | /* Arguments changed since 2.6.9, as this must now handle | ||
375 | non-linear skb, using skb_header_pointer and | ||
376 | skb_ip_make_writable. */ | ||
377 | int (*match)(const struct sk_buff *skb, | ||
378 | const struct net_device *in, | ||
379 | const struct net_device *out, | ||
380 | const void *matchinfo, | ||
381 | int offset, | ||
382 | unsigned int protoff, | ||
383 | int *hotdrop); | ||
384 | |||
385 | /* Called when user tries to insert an entry of this type. */ | ||
386 | /* Should return true or false. */ | ||
387 | int (*checkentry)(const char *tablename, | ||
388 | const struct ip6t_ip6 *ip, | ||
389 | void *matchinfo, | ||
390 | unsigned int matchinfosize, | ||
391 | unsigned int hook_mask); | ||
392 | |||
393 | /* Called when entry of this type deleted. */ | ||
394 | void (*destroy)(void *matchinfo, unsigned int matchinfosize); | ||
395 | |||
396 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | ||
397 | struct module *me; | ||
398 | }; | ||
399 | |||
400 | /* Registration hooks for targets. */ | ||
401 | struct ip6t_target | ||
402 | { | ||
403 | struct list_head list; | ||
404 | |||
405 | const char name[IP6T_FUNCTION_MAXNAMELEN-1]; | ||
406 | |||
407 | u_int8_t revision; | ||
408 | |||
409 | /* Returns verdict. Argument order changed since 2.6.9, as this | ||
410 | must now handle non-linear skbs, using skb_copy_bits and | ||
411 | skb_ip_make_writable. */ | ||
412 | unsigned int (*target)(struct sk_buff **pskb, | ||
413 | const struct net_device *in, | ||
414 | const struct net_device *out, | ||
415 | unsigned int hooknum, | ||
416 | const void *targinfo, | ||
417 | void *userdata); | ||
418 | |||
419 | /* Called when user tries to insert an entry of this type: | ||
420 | hook_mask is a bitmask of hooks from which it can be | ||
421 | called. */ | ||
422 | /* Should return true or false. */ | ||
423 | int (*checkentry)(const char *tablename, | ||
424 | const struct ip6t_entry *e, | ||
425 | void *targinfo, | ||
426 | unsigned int targinfosize, | ||
427 | unsigned int hook_mask); | ||
428 | |||
429 | /* Called when entry of this type deleted. */ | ||
430 | void (*destroy)(void *targinfo, unsigned int targinfosize); | ||
431 | |||
432 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | ||
433 | struct module *me; | ||
434 | }; | ||
435 | |||
436 | extern int ip6t_register_target(struct ip6t_target *target); | ||
437 | extern void ip6t_unregister_target(struct ip6t_target *target); | ||
438 | |||
439 | extern int ip6t_register_match(struct ip6t_match *match); | ||
440 | extern void ip6t_unregister_match(struct ip6t_match *match); | ||
441 | 339 | ||
442 | /* Furniture shopping... */ | 340 | #define ip6t_register_match(match) xt_register_match(AF_INET6, match) |
443 | struct ip6t_table | 341 | #define ip6t_unregister_match(match) xt_unregister_match(AF_INET6, match) |
444 | { | ||
445 | struct list_head list; | ||
446 | |||
447 | /* A unique name... */ | ||
448 | char name[IP6T_TABLE_MAXNAMELEN]; | ||
449 | |||
450 | /* What hooks you will enter on */ | ||
451 | unsigned int valid_hooks; | ||
452 | |||
453 | /* Lock for the curtain */ | ||
454 | rwlock_t lock; | ||
455 | |||
456 | /* Man behind the curtain... */ | ||
457 | struct ip6t_table_info *private; | ||
458 | |||
459 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | ||
460 | struct module *me; | ||
461 | }; | ||
462 | 342 | ||
463 | extern int ip6t_register_table(struct ip6t_table *table, | 343 | extern int ip6t_register_table(struct ip6t_table *table, |
464 | const struct ip6t_replace *repl); | 344 | const struct ip6t_replace *repl); |
diff --git a/include/linux/netfilter_ipv6/ip6t_MARK.h b/include/linux/netfilter_ipv6/ip6t_MARK.h index 7ade8d8f5246..7cf629a8ab92 100644 --- a/include/linux/netfilter_ipv6/ip6t_MARK.h +++ b/include/linux/netfilter_ipv6/ip6t_MARK.h | |||
@@ -1,8 +1,9 @@ | |||
1 | #ifndef _IP6T_MARK_H_target | 1 | #ifndef _IP6T_MARK_H_target |
2 | #define _IP6T_MARK_H_target | 2 | #define _IP6T_MARK_H_target |
3 | 3 | ||
4 | struct ip6t_mark_target_info { | 4 | /* Backwards compatibility for old userspace */ |
5 | unsigned long mark; | 5 | #include <linux/netfilter/xt_MARK.h> |
6 | }; | ||
7 | 6 | ||
8 | #endif /*_IPT_MARK_H_target*/ | 7 | #define ip6t_mark_target_info xt_mark_target_info |
8 | |||
9 | #endif /*_IP6T_MARK_H_target*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_ah.h b/include/linux/netfilter_ipv6/ip6t_ah.h index c4f0793a0a98..8531879eb464 100644 --- a/include/linux/netfilter_ipv6/ip6t_ah.h +++ b/include/linux/netfilter_ipv6/ip6t_ah.h | |||
@@ -18,13 +18,4 @@ struct ip6t_ah | |||
18 | #define IP6T_AH_INV_LEN 0x02 /* Invert the sense of length. */ | 18 | #define IP6T_AH_INV_LEN 0x02 /* Invert the sense of length. */ |
19 | #define IP6T_AH_INV_MASK 0x03 /* All possible flags. */ | 19 | #define IP6T_AH_INV_MASK 0x03 /* All possible flags. */ |
20 | 20 | ||
21 | #define MASK_HOPOPTS 128 | ||
22 | #define MASK_DSTOPTS 64 | ||
23 | #define MASK_ROUTING 32 | ||
24 | #define MASK_FRAGMENT 16 | ||
25 | #define MASK_AH 8 | ||
26 | #define MASK_ESP 4 | ||
27 | #define MASK_NONE 2 | ||
28 | #define MASK_PROTO 1 | ||
29 | |||
30 | #endif /*_IP6T_AH_H*/ | 21 | #endif /*_IP6T_AH_H*/ |
diff --git a/include/linux/netfilter_ipv6/ip6t_esp.h b/include/linux/netfilter_ipv6/ip6t_esp.h index 01142b98a231..a91b6abc8079 100644 --- a/include/linux/netfilter_ipv6/ip6t_esp.h +++ b/include/linux/netfilter_ipv6/ip6t_esp.h | |||
@@ -7,15 +7,6 @@ struct ip6t_esp | |||
7 | u_int8_t invflags; /* Inverse flags */ | 7 | u_int8_t invflags; /* Inverse flags */ |
8 | }; | 8 | }; |
9 | 9 | ||
10 | #define MASK_HOPOPTS 128 | ||
11 | #define MASK_DSTOPTS 64 | ||
12 | #define MASK_ROUTING 32 | ||
13 | #define MASK_FRAGMENT 16 | ||
14 | #define MASK_AH 8 | ||
15 | #define MASK_ESP 4 | ||
16 | #define MASK_NONE 2 | ||
17 | #define MASK_PROTO 1 | ||
18 | |||
19 | /* Values for "invflags" field in struct ip6t_esp. */ | 10 | /* Values for "invflags" field in struct ip6t_esp. */ |
20 | #define IP6T_ESP_INV_SPI 0x01 /* Invert the sense of spi. */ | 11 | #define IP6T_ESP_INV_SPI 0x01 /* Invert the sense of spi. */ |
21 | #define IP6T_ESP_INV_MASK 0x01 /* All possible flags. */ | 12 | #define IP6T_ESP_INV_MASK 0x01 /* All possible flags. */ |
diff --git a/include/linux/netfilter_ipv6/ip6t_frag.h b/include/linux/netfilter_ipv6/ip6t_frag.h index 449a57eca7dd..66070a0d6dfc 100644 --- a/include/linux/netfilter_ipv6/ip6t_frag.h +++ b/include/linux/netfilter_ipv6/ip6t_frag.h | |||
@@ -21,13 +21,4 @@ struct ip6t_frag | |||
21 | #define IP6T_FRAG_INV_LEN 0x02 /* Invert the sense of length. */ | 21 | #define IP6T_FRAG_INV_LEN 0x02 /* Invert the sense of length. */ |
22 | #define IP6T_FRAG_INV_MASK 0x03 /* All possible flags. */ | 22 | #define IP6T_FRAG_INV_MASK 0x03 /* All possible flags. */ |
23 | 23 | ||
24 | #define MASK_HOPOPTS 128 | ||
25 | #define MASK_DSTOPTS 64 | ||
26 | #define MASK_ROUTING 32 | ||
27 | #define MASK_FRAGMENT 16 | ||
28 | #define MASK_AH 8 | ||
29 | #define MASK_ESP 4 | ||
30 | #define MASK_NONE 2 | ||
31 | #define MASK_PROTO 1 | ||
32 | |||
33 | #endif /*_IP6T_FRAG_H*/ | 24 | #endif /*_IP6T_FRAG_H*/ |
diff --git a/include/linux/netfilter_ipv6/ip6t_length.h b/include/linux/netfilter_ipv6/ip6t_length.h index 7fc09f9f9d63..9e9689d03ed7 100644 --- a/include/linux/netfilter_ipv6/ip6t_length.h +++ b/include/linux/netfilter_ipv6/ip6t_length.h | |||
@@ -1,10 +1,8 @@ | |||
1 | #ifndef _IP6T_LENGTH_H | 1 | #ifndef _IP6T_LENGTH_H |
2 | #define _IP6T_LENGTH_H | 2 | #define _IP6T_LENGTH_H |
3 | 3 | ||
4 | struct ip6t_length_info { | 4 | #include <linux/netfilter/xt_length.h> |
5 | u_int16_t min, max; | 5 | #define ip6t_length_info xt_length_info |
6 | u_int8_t invert; | ||
7 | }; | ||
8 | 6 | ||
9 | #endif /*_IP6T_LENGTH_H*/ | 7 | #endif /*_IP6T_LENGTH_H*/ |
10 | 8 | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_limit.h b/include/linux/netfilter_ipv6/ip6t_limit.h index f2866e50f3b4..487e5ea342c6 100644 --- a/include/linux/netfilter_ipv6/ip6t_limit.h +++ b/include/linux/netfilter_ipv6/ip6t_limit.h | |||
@@ -1,21 +1,8 @@ | |||
1 | #ifndef _IP6T_RATE_H | 1 | #ifndef _IP6T_RATE_H |
2 | #define _IP6T_RATE_H | 2 | #define _IP6T_RATE_H |
3 | 3 | ||
4 | /* timings are in milliseconds. */ | 4 | #include <linux/netfilter/xt_limit.h> |
5 | #define IP6T_LIMIT_SCALE 10000 | 5 | #define IP6T_LIMIT_SCALE XT_LIMIT_SCALE |
6 | #define ip6t_rateinfo xt_rateinfo | ||
6 | 7 | ||
7 | /* 1/10,000 sec period => max of 10,000/sec. Min rate is then 429490 | 8 | #endif /*_IP6T_RATE_H*/ |
8 | seconds, or one every 59 hours. */ | ||
9 | struct ip6t_rateinfo { | ||
10 | u_int32_t avg; /* Average secs between packets * scale */ | ||
11 | u_int32_t burst; /* Period multiplier for upper limit. */ | ||
12 | |||
13 | /* Used internally by the kernel */ | ||
14 | unsigned long prev; | ||
15 | u_int32_t credit; | ||
16 | u_int32_t credit_cap, cost; | ||
17 | |||
18 | /* Ugly, ugly fucker. */ | ||
19 | struct ip6t_rateinfo *master; | ||
20 | }; | ||
21 | #endif /*_IPT_RATE_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_mac.h b/include/linux/netfilter_ipv6/ip6t_mac.h index 87c088c21848..ac58e83e9423 100644 --- a/include/linux/netfilter_ipv6/ip6t_mac.h +++ b/include/linux/netfilter_ipv6/ip6t_mac.h | |||
@@ -1,8 +1,7 @@ | |||
1 | #ifndef _IP6T_MAC_H | 1 | #ifndef _IP6T_MAC_H |
2 | #define _IP6T_MAC_H | 2 | #define _IP6T_MAC_H |
3 | 3 | ||
4 | struct ip6t_mac_info { | 4 | #include <linux/netfilter/xt_mac.h> |
5 | unsigned char srcaddr[ETH_ALEN]; | 5 | #define ip6t_mac_info xt_mac_info |
6 | int invert; | 6 | |
7 | }; | 7 | #endif /*_IP6T_MAC_H*/ |
8 | #endif /*_IPT_MAC_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_mark.h b/include/linux/netfilter_ipv6/ip6t_mark.h index a734441e1c19..ff204951ddc3 100644 --- a/include/linux/netfilter_ipv6/ip6t_mark.h +++ b/include/linux/netfilter_ipv6/ip6t_mark.h | |||
@@ -1,9 +1,9 @@ | |||
1 | #ifndef _IP6T_MARK_H | 1 | #ifndef _IP6T_MARK_H |
2 | #define _IP6T_MARK_H | 2 | #define _IP6T_MARK_H |
3 | 3 | ||
4 | struct ip6t_mark_info { | 4 | /* Backwards compatibility for old userspace */ |
5 | unsigned long mark, mask; | 5 | #include <linux/netfilter/xt_mark.h> |
6 | u_int8_t invert; | 6 | |
7 | }; | 7 | #define ip6t_mark_info xt_mark_info |
8 | 8 | ||
9 | #endif /*_IPT_MARK_H*/ | 9 | #endif /*_IPT_MARK_H*/ |
diff --git a/include/linux/netfilter_ipv6/ip6t_opts.h b/include/linux/netfilter_ipv6/ip6t_opts.h index e259b6275bd2..a07e36380ae8 100644 --- a/include/linux/netfilter_ipv6/ip6t_opts.h +++ b/include/linux/netfilter_ipv6/ip6t_opts.h | |||
@@ -20,13 +20,4 @@ struct ip6t_opts | |||
20 | #define IP6T_OPTS_INV_LEN 0x01 /* Invert the sense of length. */ | 20 | #define IP6T_OPTS_INV_LEN 0x01 /* Invert the sense of length. */ |
21 | #define IP6T_OPTS_INV_MASK 0x01 /* All possible flags. */ | 21 | #define IP6T_OPTS_INV_MASK 0x01 /* All possible flags. */ |
22 | 22 | ||
23 | #define MASK_HOPOPTS 128 | ||
24 | #define MASK_DSTOPTS 64 | ||
25 | #define MASK_ROUTING 32 | ||
26 | #define MASK_FRAGMENT 16 | ||
27 | #define MASK_AH 8 | ||
28 | #define MASK_ESP 4 | ||
29 | #define MASK_NONE 2 | ||
30 | #define MASK_PROTO 1 | ||
31 | |||
32 | #endif /*_IP6T_OPTS_H*/ | 23 | #endif /*_IP6T_OPTS_H*/ |
diff --git a/include/linux/netfilter_ipv6/ip6t_physdev.h b/include/linux/netfilter_ipv6/ip6t_physdev.h index c234731cd66b..c161c0a81b55 100644 --- a/include/linux/netfilter_ipv6/ip6t_physdev.h +++ b/include/linux/netfilter_ipv6/ip6t_physdev.h | |||
@@ -1,24 +1,17 @@ | |||
1 | #ifndef _IP6T_PHYSDEV_H | 1 | #ifndef _IP6T_PHYSDEV_H |
2 | #define _IP6T_PHYSDEV_H | 2 | #define _IP6T_PHYSDEV_H |
3 | 3 | ||
4 | #ifdef __KERNEL__ | 4 | /* Backwards compatibility for old userspace */ |
5 | #include <linux/if.h> | ||
6 | #endif | ||
7 | 5 | ||
8 | #define IP6T_PHYSDEV_OP_IN 0x01 | 6 | #include <linux/netfilter/xt_physdev.h> |
9 | #define IP6T_PHYSDEV_OP_OUT 0x02 | ||
10 | #define IP6T_PHYSDEV_OP_BRIDGED 0x04 | ||
11 | #define IP6T_PHYSDEV_OP_ISIN 0x08 | ||
12 | #define IP6T_PHYSDEV_OP_ISOUT 0x10 | ||
13 | #define IP6T_PHYSDEV_OP_MASK (0x20 - 1) | ||
14 | 7 | ||
15 | struct ip6t_physdev_info { | 8 | #define IP6T_PHYSDEV_OP_IN XT_PHYSDEV_OP_IN |
16 | char physindev[IFNAMSIZ]; | 9 | #define IP6T_PHYSDEV_OP_OUT XT_PHYSDEV_OP_OUT |
17 | char in_mask[IFNAMSIZ]; | 10 | #define IP6T_PHYSDEV_OP_BRIDGED XT_PHYSDEV_OP_BRIDGED |
18 | char physoutdev[IFNAMSIZ]; | 11 | #define IP6T_PHYSDEV_OP_ISIN XT_PHYSDEV_OP_ISIN |
19 | char out_mask[IFNAMSIZ]; | 12 | #define IP6T_PHYSDEV_OP_ISOUT XT_PHYSDEV_OP_ISOUT |
20 | u_int8_t invert; | 13 | #define IP6T_PHYSDEV_OP_MASK XT_PHYSDEV_OP_MASK |
21 | u_int8_t bitmask; | 14 | |
22 | }; | 15 | #define ip6t_physdev_info xt_physdev_info |
23 | 16 | ||
24 | #endif /*_IP6T_PHYSDEV_H*/ | 17 | #endif /*_IP6T_PHYSDEV_H*/ |
diff --git a/include/linux/netfilter_ipv6/ip6t_rt.h b/include/linux/netfilter_ipv6/ip6t_rt.h index f1070fbf2757..52156023e8db 100644 --- a/include/linux/netfilter_ipv6/ip6t_rt.h +++ b/include/linux/netfilter_ipv6/ip6t_rt.h | |||
@@ -30,13 +30,4 @@ struct ip6t_rt | |||
30 | #define IP6T_RT_INV_LEN 0x04 /* Invert the sense of length. */ | 30 | #define IP6T_RT_INV_LEN 0x04 /* Invert the sense of length. */ |
31 | #define IP6T_RT_INV_MASK 0x07 /* All possible flags. */ | 31 | #define IP6T_RT_INV_MASK 0x07 /* All possible flags. */ |
32 | 32 | ||
33 | #define MASK_HOPOPTS 128 | ||
34 | #define MASK_DSTOPTS 64 | ||
35 | #define MASK_ROUTING 32 | ||
36 | #define MASK_FRAGMENT 16 | ||
37 | #define MASK_AH 8 | ||
38 | #define MASK_ESP 4 | ||
39 | #define MASK_NONE 2 | ||
40 | #define MASK_PROTO 1 | ||
41 | |||
42 | #endif /*_IP6T_RT_H*/ | 33 | #endif /*_IP6T_RT_H*/ |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 7fb397e3f2d3..5403257ae3e7 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -181,6 +181,7 @@ | |||
181 | #define PCI_DEVICE_ID_LSI_FC929X 0x0626 | 181 | #define PCI_DEVICE_ID_LSI_FC929X 0x0626 |
182 | #define PCI_DEVICE_ID_LSI_FC939X 0x0642 | 182 | #define PCI_DEVICE_ID_LSI_FC939X 0x0642 |
183 | #define PCI_DEVICE_ID_LSI_FC949X 0x0640 | 183 | #define PCI_DEVICE_ID_LSI_FC949X 0x0640 |
184 | #define PCI_DEVICE_ID_LSI_FC949ES 0x0646 | ||
184 | #define PCI_DEVICE_ID_LSI_FC919X 0x0628 | 185 | #define PCI_DEVICE_ID_LSI_FC919X 0x0628 |
185 | #define PCI_DEVICE_ID_NCR_YELLOWFIN 0x0701 | 186 | #define PCI_DEVICE_ID_NCR_YELLOWFIN 0x0701 |
186 | #define PCI_DEVICE_ID_LSI_61C102 0x0901 | 187 | #define PCI_DEVICE_ID_LSI_61C102 0x0901 |
diff --git a/include/linux/pfkeyv2.h b/include/linux/pfkeyv2.h index 6351c4055ace..bac0fb389cf1 100644 --- a/include/linux/pfkeyv2.h +++ b/include/linux/pfkeyv2.h | |||
@@ -104,7 +104,7 @@ struct sadb_prop { | |||
104 | /* followed by: | 104 | /* followed by: |
105 | struct sadb_comb sadb_combs[(sadb_prop_len + | 105 | struct sadb_comb sadb_combs[(sadb_prop_len + |
106 | sizeof(uint64_t) - sizeof(struct sadb_prop)) / | 106 | sizeof(uint64_t) - sizeof(struct sadb_prop)) / |
107 | sizeof(strut sadb_comb)]; */ | 107 | sizeof(struct sadb_comb)]; */ |
108 | 108 | ||
109 | struct sadb_comb { | 109 | struct sadb_comb { |
110 | uint8_t sadb_comb_auth; | 110 | uint8_t sadb_comb_auth; |
diff --git a/include/linux/phy.h b/include/linux/phy.h index 92a9696fdebe..331521a10a2d 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h | |||
@@ -53,6 +53,9 @@ | |||
53 | 53 | ||
54 | #define PHY_MAX_ADDR 32 | 54 | #define PHY_MAX_ADDR 32 |
55 | 55 | ||
56 | /* Used when trying to connect to a specific phy (mii bus id:phy device id) */ | ||
57 | #define PHY_ID_FMT "%x:%02x" | ||
58 | |||
56 | /* The Bus class for PHYs. Devices which provide access to | 59 | /* The Bus class for PHYs. Devices which provide access to |
57 | * PHYs should register using this structure */ | 60 | * PHYs should register using this structure */ |
58 | struct mii_bus { | 61 | struct mii_bus { |
diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h index 74488e49166d..aa6322d45198 100644 --- a/include/linux/proc_fs.h +++ b/include/linux/proc_fs.h | |||
@@ -146,6 +146,11 @@ struct property; | |||
146 | extern void proc_device_tree_init(void); | 146 | extern void proc_device_tree_init(void); |
147 | extern void proc_device_tree_add_node(struct device_node *, struct proc_dir_entry *); | 147 | extern void proc_device_tree_add_node(struct device_node *, struct proc_dir_entry *); |
148 | extern void proc_device_tree_add_prop(struct proc_dir_entry *pde, struct property *prop); | 148 | extern void proc_device_tree_add_prop(struct proc_dir_entry *pde, struct property *prop); |
149 | extern void proc_device_tree_remove_prop(struct proc_dir_entry *pde, | ||
150 | struct property *prop); | ||
151 | extern void proc_device_tree_update_prop(struct proc_dir_entry *pde, | ||
152 | struct property *newprop, | ||
153 | struct property *oldprop); | ||
149 | #endif /* CONFIG_PROC_DEVICETREE */ | 154 | #endif /* CONFIG_PROC_DEVICETREE */ |
150 | 155 | ||
151 | extern struct proc_dir_entry *proc_symlink(const char *, | 156 | extern struct proc_dir_entry *proc_symlink(const char *, |
diff --git a/include/linux/raid_class.h b/include/linux/raid_class.h index 48831eac2910..d0dd38b3a2fd 100644 --- a/include/linux/raid_class.h +++ b/include/linux/raid_class.h | |||
@@ -31,9 +31,11 @@ enum raid_level { | |||
31 | RAID_LEVEL_LINEAR, | 31 | RAID_LEVEL_LINEAR, |
32 | RAID_LEVEL_0, | 32 | RAID_LEVEL_0, |
33 | RAID_LEVEL_1, | 33 | RAID_LEVEL_1, |
34 | RAID_LEVEL_10, | ||
34 | RAID_LEVEL_3, | 35 | RAID_LEVEL_3, |
35 | RAID_LEVEL_4, | 36 | RAID_LEVEL_4, |
36 | RAID_LEVEL_5, | 37 | RAID_LEVEL_5, |
38 | RAID_LEVEL_50, | ||
37 | RAID_LEVEL_6, | 39 | RAID_LEVEL_6, |
38 | }; | 40 | }; |
39 | 41 | ||
diff --git a/include/linux/sched.h b/include/linux/sched.h index a72e17135421..2df1a1a2fee5 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -160,6 +160,7 @@ extern unsigned long nr_iowait(void); | |||
160 | #define SCHED_NORMAL 0 | 160 | #define SCHED_NORMAL 0 |
161 | #define SCHED_FIFO 1 | 161 | #define SCHED_FIFO 1 |
162 | #define SCHED_RR 2 | 162 | #define SCHED_RR 2 |
163 | #define SCHED_BATCH 3 | ||
163 | 164 | ||
164 | struct sched_param { | 165 | struct sched_param { |
165 | int sched_priority; | 166 | int sched_priority; |
@@ -470,9 +471,9 @@ struct signal_struct { | |||
470 | 471 | ||
471 | /* | 472 | /* |
472 | * Priority of a process goes from 0..MAX_PRIO-1, valid RT | 473 | * Priority of a process goes from 0..MAX_PRIO-1, valid RT |
473 | * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL tasks are | 474 | * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH |
474 | * in the range MAX_RT_PRIO..MAX_PRIO-1. Priority values | 475 | * tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority |
475 | * are inverted: lower p->prio value means higher priority. | 476 | * values are inverted: lower p->prio value means higher priority. |
476 | * | 477 | * |
477 | * The MAX_USER_RT_PRIO value allows the actual maximum | 478 | * The MAX_USER_RT_PRIO value allows the actual maximum |
478 | * RT priority to be separate from the value exported to | 479 | * RT priority to be separate from the value exported to |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index a8187c3c8a7b..ec351005bf9d 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
@@ -136,6 +136,7 @@ | |||
136 | #include <linux/spinlock.h> | 136 | #include <linux/spinlock.h> |
137 | #include <linux/sched.h> | 137 | #include <linux/sched.h> |
138 | #include <linux/tty.h> | 138 | #include <linux/tty.h> |
139 | #include <linux/mutex.h> | ||
139 | 140 | ||
140 | struct uart_port; | 141 | struct uart_port; |
141 | struct uart_info; | 142 | struct uart_info; |
@@ -284,7 +285,7 @@ struct uart_state { | |||
284 | struct uart_info *info; | 285 | struct uart_info *info; |
285 | struct uart_port *port; | 286 | struct uart_port *port; |
286 | 287 | ||
287 | struct semaphore sem; | 288 | struct mutex mutex; |
288 | }; | 289 | }; |
289 | 290 | ||
290 | #define UART_XMIT_SIZE PAGE_SIZE | 291 | #define UART_XMIT_SIZE PAGE_SIZE |
diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h index c3e598276e78..c057f0b32318 100644 --- a/include/linux/shmem_fs.h +++ b/include/linux/shmem_fs.h | |||
@@ -26,6 +26,8 @@ struct shmem_sb_info { | |||
26 | unsigned long free_blocks; /* How many are left for allocation */ | 26 | unsigned long free_blocks; /* How many are left for allocation */ |
27 | unsigned long max_inodes; /* How many inodes are allowed */ | 27 | unsigned long max_inodes; /* How many inodes are allowed */ |
28 | unsigned long free_inodes; /* How many are left for allocation */ | 28 | unsigned long free_inodes; /* How many are left for allocation */ |
29 | int policy; /* Default NUMA memory alloc policy */ | ||
30 | nodemask_t policy_nodes; /* nodemask for preferred and bind */ | ||
29 | spinlock_t stat_lock; | 31 | spinlock_t stat_lock; |
30 | }; | 32 | }; |
31 | 33 | ||
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index e5fd66c5650b..ad7cc22bd424 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -926,7 +926,7 @@ static inline int skb_tailroom(const struct sk_buff *skb) | |||
926 | * Increase the headroom of an empty &sk_buff by reducing the tail | 926 | * Increase the headroom of an empty &sk_buff by reducing the tail |
927 | * room. This is only allowed for an empty buffer. | 927 | * room. This is only allowed for an empty buffer. |
928 | */ | 928 | */ |
929 | static inline void skb_reserve(struct sk_buff *skb, unsigned int len) | 929 | static inline void skb_reserve(struct sk_buff *skb, int len) |
930 | { | 930 | { |
931 | skb->data += len; | 931 | skb->data += len; |
932 | skb->tail += len; | 932 | skb->tail += len; |
diff --git a/include/linux/smb_fs.h b/include/linux/smb_fs.h index c4153120ade6..621a3d3662f3 100644 --- a/include/linux/smb_fs.h +++ b/include/linux/smb_fs.h | |||
@@ -58,53 +58,6 @@ static inline struct smb_inode_info *SMB_I(struct inode *inode) | |||
58 | /* where to find the base of the SMB packet proper */ | 58 | /* where to find the base of the SMB packet proper */ |
59 | #define smb_base(buf) ((u8 *)(((u8 *)(buf))+4)) | 59 | #define smb_base(buf) ((u8 *)(((u8 *)(buf))+4)) |
60 | 60 | ||
61 | #ifdef DEBUG_SMB_MALLOC | ||
62 | |||
63 | #include <linux/slab.h> | ||
64 | |||
65 | extern int smb_malloced; | ||
66 | extern int smb_current_vmalloced; | ||
67 | extern int smb_current_kmalloced; | ||
68 | |||
69 | static inline void * | ||
70 | smb_vmalloc(unsigned int size) | ||
71 | { | ||
72 | smb_malloced += 1; | ||
73 | smb_current_vmalloced += 1; | ||
74 | return vmalloc(size); | ||
75 | } | ||
76 | |||
77 | static inline void | ||
78 | smb_vfree(void *obj) | ||
79 | { | ||
80 | smb_current_vmalloced -= 1; | ||
81 | vfree(obj); | ||
82 | } | ||
83 | |||
84 | static inline void * | ||
85 | smb_kmalloc(size_t size, int flags) | ||
86 | { | ||
87 | smb_malloced += 1; | ||
88 | smb_current_kmalloced += 1; | ||
89 | return kmalloc(size, flags); | ||
90 | } | ||
91 | |||
92 | static inline void | ||
93 | smb_kfree(void *obj) | ||
94 | { | ||
95 | smb_current_kmalloced -= 1; | ||
96 | kfree(obj); | ||
97 | } | ||
98 | |||
99 | #else /* DEBUG_SMB_MALLOC */ | ||
100 | |||
101 | #define smb_kmalloc(s,p) kmalloc(s,p) | ||
102 | #define smb_kfree(o) kfree(o) | ||
103 | #define smb_vmalloc(s) vmalloc(s) | ||
104 | #define smb_vfree(o) vfree(o) | ||
105 | |||
106 | #endif /* DEBUG_SMB_MALLOC */ | ||
107 | |||
108 | /* | 61 | /* |
109 | * Flags for the in-memory inode | 62 | * Flags for the in-memory inode |
110 | */ | 63 | */ |
diff --git a/include/linux/socket.h b/include/linux/socket.h index 9f4019156fd8..b02dda4ee83d 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h | |||
@@ -186,6 +186,7 @@ struct ucred { | |||
186 | #define AF_PPPOX 24 /* PPPoX sockets */ | 186 | #define AF_PPPOX 24 /* PPPoX sockets */ |
187 | #define AF_WANPIPE 25 /* Wanpipe API Sockets */ | 187 | #define AF_WANPIPE 25 /* Wanpipe API Sockets */ |
188 | #define AF_LLC 26 /* Linux LLC */ | 188 | #define AF_LLC 26 /* Linux LLC */ |
189 | #define AF_TIPC 30 /* TIPC sockets */ | ||
189 | #define AF_BLUETOOTH 31 /* Bluetooth sockets */ | 190 | #define AF_BLUETOOTH 31 /* Bluetooth sockets */ |
190 | #define AF_MAX 32 /* For now.. */ | 191 | #define AF_MAX 32 /* For now.. */ |
191 | 192 | ||
@@ -218,6 +219,7 @@ struct ucred { | |||
218 | #define PF_PPPOX AF_PPPOX | 219 | #define PF_PPPOX AF_PPPOX |
219 | #define PF_WANPIPE AF_WANPIPE | 220 | #define PF_WANPIPE AF_WANPIPE |
220 | #define PF_LLC AF_LLC | 221 | #define PF_LLC AF_LLC |
222 | #define PF_TIPC AF_TIPC | ||
221 | #define PF_BLUETOOTH AF_BLUETOOTH | 223 | #define PF_BLUETOOTH AF_BLUETOOTH |
222 | #define PF_MAX AF_MAX | 224 | #define PF_MAX AF_MAX |
223 | 225 | ||
@@ -279,6 +281,7 @@ struct ucred { | |||
279 | #define SOL_LLC 268 | 281 | #define SOL_LLC 268 |
280 | #define SOL_DCCP 269 | 282 | #define SOL_DCCP 269 |
281 | #define SOL_NETLINK 270 | 283 | #define SOL_NETLINK 270 |
284 | #define SOL_TIPC 271 | ||
282 | 285 | ||
283 | /* IPX options */ | 286 | /* IPX options */ |
284 | #define IPX_TYPE 1 | 287 | #define IPX_TYPE 1 |
diff --git a/include/linux/spi/ads7846.h b/include/linux/spi/ads7846.h new file mode 100644 index 000000000000..72261e0f2ac1 --- /dev/null +++ b/include/linux/spi/ads7846.h | |||
@@ -0,0 +1,18 @@ | |||
1 | /* linux/spi/ads7846.h */ | ||
2 | |||
3 | /* Touchscreen characteristics vary between boards and models. The | ||
4 | * platform_data for the device's "struct device" holds this information. | ||
5 | * | ||
6 | * It's OK if the min/max values are zero. | ||
7 | */ | ||
8 | struct ads7846_platform_data { | ||
9 | u16 model; /* 7843, 7845, 7846. */ | ||
10 | u16 vref_delay_usecs; /* 0 for external vref; etc */ | ||
11 | u16 x_plate_ohms; | ||
12 | u16 y_plate_ohms; | ||
13 | |||
14 | u16 x_min, x_max; | ||
15 | u16 y_min, y_max; | ||
16 | u16 pressure_min, pressure_max; | ||
17 | }; | ||
18 | |||
diff --git a/include/linux/spi/flash.h b/include/linux/spi/flash.h new file mode 100644 index 000000000000..3f22932e67a4 --- /dev/null +++ b/include/linux/spi/flash.h | |||
@@ -0,0 +1,31 @@ | |||
1 | #ifndef LINUX_SPI_FLASH_H | ||
2 | #define LINUX_SPI_FLASH_H | ||
3 | |||
4 | struct mtd_partition; | ||
5 | |||
6 | /** | ||
7 | * struct flash_platform_data: board-specific flash data | ||
8 | * @name: optional flash device name (eg, as used with mtdparts=) | ||
9 | * @parts: optional array of mtd_partitions for static partitioning | ||
10 | * @nr_parts: number of mtd_partitions for static partitoning | ||
11 | * @type: optional flash device type (e.g. m25p80 vs m25p64), for use | ||
12 | * with chips that can't be queried for JEDEC or other IDs | ||
13 | * | ||
14 | * Board init code (in arch/.../mach-xxx/board-yyy.c files) can | ||
15 | * provide information about SPI flash parts (such as DataFlash) to | ||
16 | * help set up the device and its appropriate default partitioning. | ||
17 | * | ||
18 | * Note that for DataFlash, sizes for pages, blocks, and sectors are | ||
19 | * rarely powers of two; and partitions should be sector-aligned. | ||
20 | */ | ||
21 | struct flash_platform_data { | ||
22 | char *name; | ||
23 | struct mtd_partition *parts; | ||
24 | unsigned int nr_parts; | ||
25 | |||
26 | char *type; | ||
27 | |||
28 | /* we'll likely add more ... use JEDEC IDs, etc */ | ||
29 | }; | ||
30 | |||
31 | #endif | ||
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h new file mode 100644 index 000000000000..b05f1463a267 --- /dev/null +++ b/include/linux/spi/spi.h | |||
@@ -0,0 +1,668 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2005 David Brownell | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef __LINUX_SPI_H | ||
20 | #define __LINUX_SPI_H | ||
21 | |||
22 | /* | ||
23 | * INTERFACES between SPI master-side drivers and SPI infrastructure. | ||
24 | * (There's no SPI slave support for Linux yet...) | ||
25 | */ | ||
26 | extern struct bus_type spi_bus_type; | ||
27 | |||
28 | /** | ||
29 | * struct spi_device - Master side proxy for an SPI slave device | ||
30 | * @dev: Driver model representation of the device. | ||
31 | * @master: SPI controller used with the device. | ||
32 | * @max_speed_hz: Maximum clock rate to be used with this chip | ||
33 | * (on this board); may be changed by the device's driver. | ||
34 | * @chip-select: Chipselect, distinguishing chips handled by "master". | ||
35 | * @mode: The spi mode defines how data is clocked out and in. | ||
36 | * This may be changed by the device's driver. | ||
37 | * @bits_per_word: Data transfers involve one or more words; word sizes | ||
38 | * like eight or 12 bits are common. In-memory wordsizes are | ||
39 | * powers of two bytes (e.g. 20 bit samples use 32 bits). | ||
40 | * This may be changed by the device's driver. | ||
41 | * @irq: Negative, or the number passed to request_irq() to receive | ||
42 | * interrupts from this device. | ||
43 | * @controller_state: Controller's runtime state | ||
44 | * @controller_data: Board-specific definitions for controller, such as | ||
45 | * FIFO initialization parameters; from board_info.controller_data | ||
46 | * | ||
47 | * An spi_device is used to interchange data between an SPI slave | ||
48 | * (usually a discrete chip) and CPU memory. | ||
49 | * | ||
50 | * In "dev", the platform_data is used to hold information about this | ||
51 | * device that's meaningful to the device's protocol driver, but not | ||
52 | * to its controller. One example might be an identifier for a chip | ||
53 | * variant with slightly different functionality. | ||
54 | */ | ||
55 | struct spi_device { | ||
56 | struct device dev; | ||
57 | struct spi_master *master; | ||
58 | u32 max_speed_hz; | ||
59 | u8 chip_select; | ||
60 | u8 mode; | ||
61 | #define SPI_CPHA 0x01 /* clock phase */ | ||
62 | #define SPI_CPOL 0x02 /* clock polarity */ | ||
63 | #define SPI_MODE_0 (0|0) /* (original MicroWire) */ | ||
64 | #define SPI_MODE_1 (0|SPI_CPHA) | ||
65 | #define SPI_MODE_2 (SPI_CPOL|0) | ||
66 | #define SPI_MODE_3 (SPI_CPOL|SPI_CPHA) | ||
67 | #define SPI_CS_HIGH 0x04 /* chipselect active high? */ | ||
68 | u8 bits_per_word; | ||
69 | int irq; | ||
70 | void *controller_state; | ||
71 | void *controller_data; | ||
72 | const char *modalias; | ||
73 | |||
74 | // likely need more hooks for more protocol options affecting how | ||
75 | // the controller talks to each chip, like: | ||
76 | // - bit order (default is wordwise msb-first) | ||
77 | // - memory packing (12 bit samples into low bits, others zeroed) | ||
78 | // - priority | ||
79 | // - drop chipselect after each word | ||
80 | // - chipselect delays | ||
81 | // - ... | ||
82 | }; | ||
83 | |||
84 | static inline struct spi_device *to_spi_device(struct device *dev) | ||
85 | { | ||
86 | return dev ? container_of(dev, struct spi_device, dev) : NULL; | ||
87 | } | ||
88 | |||
89 | /* most drivers won't need to care about device refcounting */ | ||
90 | static inline struct spi_device *spi_dev_get(struct spi_device *spi) | ||
91 | { | ||
92 | return (spi && get_device(&spi->dev)) ? spi : NULL; | ||
93 | } | ||
94 | |||
95 | static inline void spi_dev_put(struct spi_device *spi) | ||
96 | { | ||
97 | if (spi) | ||
98 | put_device(&spi->dev); | ||
99 | } | ||
100 | |||
101 | /* ctldata is for the bus_master driver's runtime state */ | ||
102 | static inline void *spi_get_ctldata(struct spi_device *spi) | ||
103 | { | ||
104 | return spi->controller_state; | ||
105 | } | ||
106 | |||
107 | static inline void spi_set_ctldata(struct spi_device *spi, void *state) | ||
108 | { | ||
109 | spi->controller_state = state; | ||
110 | } | ||
111 | |||
112 | |||
113 | struct spi_message; | ||
114 | |||
115 | |||
116 | |||
117 | struct spi_driver { | ||
118 | int (*probe)(struct spi_device *spi); | ||
119 | int (*remove)(struct spi_device *spi); | ||
120 | void (*shutdown)(struct spi_device *spi); | ||
121 | int (*suspend)(struct spi_device *spi, pm_message_t mesg); | ||
122 | int (*resume)(struct spi_device *spi); | ||
123 | struct device_driver driver; | ||
124 | }; | ||
125 | |||
126 | static inline struct spi_driver *to_spi_driver(struct device_driver *drv) | ||
127 | { | ||
128 | return drv ? container_of(drv, struct spi_driver, driver) : NULL; | ||
129 | } | ||
130 | |||
131 | extern int spi_register_driver(struct spi_driver *sdrv); | ||
132 | |||
133 | static inline void spi_unregister_driver(struct spi_driver *sdrv) | ||
134 | { | ||
135 | if (!sdrv) | ||
136 | return; | ||
137 | driver_unregister(&sdrv->driver); | ||
138 | } | ||
139 | |||
140 | |||
141 | |||
142 | /** | ||
143 | * struct spi_master - interface to SPI master controller | ||
144 | * @cdev: class interface to this driver | ||
145 | * @bus_num: board-specific (and often SOC-specific) identifier for a | ||
146 | * given SPI controller. | ||
147 | * @num_chipselect: chipselects are used to distinguish individual | ||
148 | * SPI slaves, and are numbered from zero to num_chipselects. | ||
149 | * each slave has a chipselect signal, but it's common that not | ||
150 | * every chipselect is connected to a slave. | ||
151 | * @setup: updates the device mode and clocking records used by a | ||
152 | * device's SPI controller; protocol code may call this. | ||
153 | * @transfer: adds a message to the controller's transfer queue. | ||
154 | * @cleanup: frees controller-specific state | ||
155 | * | ||
156 | * Each SPI master controller can communicate with one or more spi_device | ||
157 | * children. These make a small bus, sharing MOSI, MISO and SCK signals | ||
158 | * but not chip select signals. Each device may be configured to use a | ||
159 | * different clock rate, since those shared signals are ignored unless | ||
160 | * the chip is selected. | ||
161 | * | ||
162 | * The driver for an SPI controller manages access to those devices through | ||
163 | * a queue of spi_message transactions, copyin data between CPU memory and | ||
164 | * an SPI slave device). For each such message it queues, it calls the | ||
165 | * message's completion function when the transaction completes. | ||
166 | */ | ||
167 | struct spi_master { | ||
168 | struct class_device cdev; | ||
169 | |||
170 | /* other than zero (== assign one dynamically), bus_num is fully | ||
171 | * board-specific. usually that simplifies to being SOC-specific. | ||
172 | * example: one SOC has three SPI controllers, numbered 1..3, | ||
173 | * and one board's schematics might show it using SPI-2. software | ||
174 | * would normally use bus_num=2 for that controller. | ||
175 | */ | ||
176 | u16 bus_num; | ||
177 | |||
178 | /* chipselects will be integral to many controllers; some others | ||
179 | * might use board-specific GPIOs. | ||
180 | */ | ||
181 | u16 num_chipselect; | ||
182 | |||
183 | /* setup mode and clock, etc (spi driver may call many times) */ | ||
184 | int (*setup)(struct spi_device *spi); | ||
185 | |||
186 | /* bidirectional bulk transfers | ||
187 | * | ||
188 | * + The transfer() method may not sleep; its main role is | ||
189 | * just to add the message to the queue. | ||
190 | * + For now there's no remove-from-queue operation, or | ||
191 | * any other request management | ||
192 | * + To a given spi_device, message queueing is pure fifo | ||
193 | * | ||
194 | * + The master's main job is to process its message queue, | ||
195 | * selecting a chip then transferring data | ||
196 | * + If there are multiple spi_device children, the i/o queue | ||
197 | * arbitration algorithm is unspecified (round robin, fifo, | ||
198 | * priority, reservations, preemption, etc) | ||
199 | * | ||
200 | * + Chipselect stays active during the entire message | ||
201 | * (unless modified by spi_transfer.cs_change != 0). | ||
202 | * + The message transfers use clock and SPI mode parameters | ||
203 | * previously established by setup() for this device | ||
204 | */ | ||
205 | int (*transfer)(struct spi_device *spi, | ||
206 | struct spi_message *mesg); | ||
207 | |||
208 | /* called on release() to free memory provided by spi_master */ | ||
209 | void (*cleanup)(const struct spi_device *spi); | ||
210 | }; | ||
211 | |||
212 | static inline void *spi_master_get_devdata(struct spi_master *master) | ||
213 | { | ||
214 | return class_get_devdata(&master->cdev); | ||
215 | } | ||
216 | |||
217 | static inline void spi_master_set_devdata(struct spi_master *master, void *data) | ||
218 | { | ||
219 | class_set_devdata(&master->cdev, data); | ||
220 | } | ||
221 | |||
222 | static inline struct spi_master *spi_master_get(struct spi_master *master) | ||
223 | { | ||
224 | if (!master || !class_device_get(&master->cdev)) | ||
225 | return NULL; | ||
226 | return master; | ||
227 | } | ||
228 | |||
229 | static inline void spi_master_put(struct spi_master *master) | ||
230 | { | ||
231 | if (master) | ||
232 | class_device_put(&master->cdev); | ||
233 | } | ||
234 | |||
235 | |||
236 | /* the spi driver core manages memory for the spi_master classdev */ | ||
237 | extern struct spi_master * | ||
238 | spi_alloc_master(struct device *host, unsigned size); | ||
239 | |||
240 | extern int spi_register_master(struct spi_master *master); | ||
241 | extern void spi_unregister_master(struct spi_master *master); | ||
242 | |||
243 | extern struct spi_master *spi_busnum_to_master(u16 busnum); | ||
244 | |||
245 | /*---------------------------------------------------------------------------*/ | ||
246 | |||
247 | /* | ||
248 | * I/O INTERFACE between SPI controller and protocol drivers | ||
249 | * | ||
250 | * Protocol drivers use a queue of spi_messages, each transferring data | ||
251 | * between the controller and memory buffers. | ||
252 | * | ||
253 | * The spi_messages themselves consist of a series of read+write transfer | ||
254 | * segments. Those segments always read the same number of bits as they | ||
255 | * write; but one or the other is easily ignored by passing a null buffer | ||
256 | * pointer. (This is unlike most types of I/O API, because SPI hardware | ||
257 | * is full duplex.) | ||
258 | * | ||
259 | * NOTE: Allocation of spi_transfer and spi_message memory is entirely | ||
260 | * up to the protocol driver, which guarantees the integrity of both (as | ||
261 | * well as the data buffers) for as long as the message is queued. | ||
262 | */ | ||
263 | |||
264 | /** | ||
265 | * struct spi_transfer - a read/write buffer pair | ||
266 | * @tx_buf: data to be written (dma-safe memory), or NULL | ||
267 | * @rx_buf: data to be read (dma-safe memory), or NULL | ||
268 | * @tx_dma: DMA address of tx_buf, if spi_message.is_dma_mapped | ||
269 | * @rx_dma: DMA address of rx_buf, if spi_message.is_dma_mapped | ||
270 | * @len: size of rx and tx buffers (in bytes) | ||
271 | * @cs_change: affects chipselect after this transfer completes | ||
272 | * @delay_usecs: microseconds to delay after this transfer before | ||
273 | * (optionally) changing the chipselect status, then starting | ||
274 | * the next transfer or completing this spi_message. | ||
275 | * @transfer_list: transfers are sequenced through spi_message.transfers | ||
276 | * | ||
277 | * SPI transfers always write the same number of bytes as they read. | ||
278 | * Protocol drivers should always provide rx_buf and/or tx_buf. | ||
279 | * In some cases, they may also want to provide DMA addresses for | ||
280 | * the data being transferred; that may reduce overhead, when the | ||
281 | * underlying driver uses dma. | ||
282 | * | ||
283 | * If the transmit buffer is null, undefined data will be shifted out | ||
284 | * while filling rx_buf. If the receive buffer is null, the data | ||
285 | * shifted in will be discarded. Only "len" bytes shift out (or in). | ||
286 | * It's an error to try to shift out a partial word. (For example, by | ||
287 | * shifting out three bytes with word size of sixteen or twenty bits; | ||
288 | * the former uses two bytes per word, the latter uses four bytes.) | ||
289 | * | ||
290 | * All SPI transfers start with the relevant chipselect active. Normally | ||
291 | * it stays selected until after the last transfer in a message. Drivers | ||
292 | * can affect the chipselect signal using cs_change: | ||
293 | * | ||
294 | * (i) If the transfer isn't the last one in the message, this flag is | ||
295 | * used to make the chipselect briefly go inactive in the middle of the | ||
296 | * message. Toggling chipselect in this way may be needed to terminate | ||
297 | * a chip command, letting a single spi_message perform all of group of | ||
298 | * chip transactions together. | ||
299 | * | ||
300 | * (ii) When the transfer is the last one in the message, the chip may | ||
301 | * stay selected until the next transfer. This is purely a performance | ||
302 | * hint; the controller driver may need to select a different device | ||
303 | * for the next message. | ||
304 | * | ||
305 | * The code that submits an spi_message (and its spi_transfers) | ||
306 | * to the lower layers is responsible for managing its memory. | ||
307 | * Zero-initialize every field you don't set up explicitly, to | ||
308 | * insulate against future API updates. After you submit a message | ||
309 | * and its transfers, ignore them until its completion callback. | ||
310 | */ | ||
311 | struct spi_transfer { | ||
312 | /* it's ok if tx_buf == rx_buf (right?) | ||
313 | * for MicroWire, one buffer must be null | ||
314 | * buffers must work with dma_*map_single() calls, unless | ||
315 | * spi_message.is_dma_mapped reports a pre-existing mapping | ||
316 | */ | ||
317 | const void *tx_buf; | ||
318 | void *rx_buf; | ||
319 | unsigned len; | ||
320 | |||
321 | dma_addr_t tx_dma; | ||
322 | dma_addr_t rx_dma; | ||
323 | |||
324 | unsigned cs_change:1; | ||
325 | u16 delay_usecs; | ||
326 | |||
327 | struct list_head transfer_list; | ||
328 | }; | ||
329 | |||
330 | /** | ||
331 | * struct spi_message - one multi-segment SPI transaction | ||
332 | * @transfers: list of transfer segments in this transaction | ||
333 | * @spi: SPI device to which the transaction is queued | ||
334 | * @is_dma_mapped: if true, the caller provided both dma and cpu virtual | ||
335 | * addresses for each transfer buffer | ||
336 | * @complete: called to report transaction completions | ||
337 | * @context: the argument to complete() when it's called | ||
338 | * @actual_length: the total number of bytes that were transferred in all | ||
339 | * successful segments | ||
340 | * @status: zero for success, else negative errno | ||
341 | * @queue: for use by whichever driver currently owns the message | ||
342 | * @state: for use by whichever driver currently owns the message | ||
343 | * | ||
344 | * An spi_message is used to execute an atomic sequence of data transfers, | ||
345 | * each represented by a struct spi_transfer. The sequence is "atomic" | ||
346 | * in the sense that no other spi_message may use that SPI bus until that | ||
347 | * sequence completes. On some systems, many such sequences can execute as | ||
348 | * as single programmed DMA transfer. On all systems, these messages are | ||
349 | * queued, and might complete after transactions to other devices. Messages | ||
350 | * sent to a given spi_device are alway executed in FIFO order. | ||
351 | * | ||
352 | * The code that submits an spi_message (and its spi_transfers) | ||
353 | * to the lower layers is responsible for managing its memory. | ||
354 | * Zero-initialize every field you don't set up explicitly, to | ||
355 | * insulate against future API updates. After you submit a message | ||
356 | * and its transfers, ignore them until its completion callback. | ||
357 | */ | ||
358 | struct spi_message { | ||
359 | struct list_head transfers; | ||
360 | |||
361 | struct spi_device *spi; | ||
362 | |||
363 | unsigned is_dma_mapped:1; | ||
364 | |||
365 | /* REVISIT: we might want a flag affecting the behavior of the | ||
366 | * last transfer ... allowing things like "read 16 bit length L" | ||
367 | * immediately followed by "read L bytes". Basically imposing | ||
368 | * a specific message scheduling algorithm. | ||
369 | * | ||
370 | * Some controller drivers (message-at-a-time queue processing) | ||
371 | * could provide that as their default scheduling algorithm. But | ||
372 | * others (with multi-message pipelines) could need a flag to | ||
373 | * tell them about such special cases. | ||
374 | */ | ||
375 | |||
376 | /* completion is reported through a callback */ | ||
377 | void (*complete)(void *context); | ||
378 | void *context; | ||
379 | unsigned actual_length; | ||
380 | int status; | ||
381 | |||
382 | /* for optional use by whatever driver currently owns the | ||
383 | * spi_message ... between calls to spi_async and then later | ||
384 | * complete(), that's the spi_master controller driver. | ||
385 | */ | ||
386 | struct list_head queue; | ||
387 | void *state; | ||
388 | }; | ||
389 | |||
390 | static inline void spi_message_init(struct spi_message *m) | ||
391 | { | ||
392 | memset(m, 0, sizeof *m); | ||
393 | INIT_LIST_HEAD(&m->transfers); | ||
394 | } | ||
395 | |||
396 | static inline void | ||
397 | spi_message_add_tail(struct spi_transfer *t, struct spi_message *m) | ||
398 | { | ||
399 | list_add_tail(&t->transfer_list, &m->transfers); | ||
400 | } | ||
401 | |||
402 | static inline void | ||
403 | spi_transfer_del(struct spi_transfer *t) | ||
404 | { | ||
405 | list_del(&t->transfer_list); | ||
406 | } | ||
407 | |||
408 | /* It's fine to embed message and transaction structures in other data | ||
409 | * structures so long as you don't free them while they're in use. | ||
410 | */ | ||
411 | |||
412 | static inline struct spi_message *spi_message_alloc(unsigned ntrans, gfp_t flags) | ||
413 | { | ||
414 | struct spi_message *m; | ||
415 | |||
416 | m = kzalloc(sizeof(struct spi_message) | ||
417 | + ntrans * sizeof(struct spi_transfer), | ||
418 | flags); | ||
419 | if (m) { | ||
420 | int i; | ||
421 | struct spi_transfer *t = (struct spi_transfer *)(m + 1); | ||
422 | |||
423 | INIT_LIST_HEAD(&m->transfers); | ||
424 | for (i = 0; i < ntrans; i++, t++) | ||
425 | spi_message_add_tail(t, m); | ||
426 | } | ||
427 | return m; | ||
428 | } | ||
429 | |||
430 | static inline void spi_message_free(struct spi_message *m) | ||
431 | { | ||
432 | kfree(m); | ||
433 | } | ||
434 | |||
435 | /** | ||
436 | * spi_setup -- setup SPI mode and clock rate | ||
437 | * @spi: the device whose settings are being modified | ||
438 | * | ||
439 | * SPI protocol drivers may need to update the transfer mode if the | ||
440 | * device doesn't work with the mode 0 default. They may likewise need | ||
441 | * to update clock rates or word sizes from initial values. This function | ||
442 | * changes those settings, and must be called from a context that can sleep. | ||
443 | * The changes take effect the next time the device is selected and data | ||
444 | * is transferred to or from it. | ||
445 | */ | ||
446 | static inline int | ||
447 | spi_setup(struct spi_device *spi) | ||
448 | { | ||
449 | return spi->master->setup(spi); | ||
450 | } | ||
451 | |||
452 | |||
453 | /** | ||
454 | * spi_async -- asynchronous SPI transfer | ||
455 | * @spi: device with which data will be exchanged | ||
456 | * @message: describes the data transfers, including completion callback | ||
457 | * | ||
458 | * This call may be used in_irq and other contexts which can't sleep, | ||
459 | * as well as from task contexts which can sleep. | ||
460 | * | ||
461 | * The completion callback is invoked in a context which can't sleep. | ||
462 | * Before that invocation, the value of message->status is undefined. | ||
463 | * When the callback is issued, message->status holds either zero (to | ||
464 | * indicate complete success) or a negative error code. After that | ||
465 | * callback returns, the driver which issued the transfer request may | ||
466 | * deallocate the associated memory; it's no longer in use by any SPI | ||
467 | * core or controller driver code. | ||
468 | * | ||
469 | * Note that although all messages to a spi_device are handled in | ||
470 | * FIFO order, messages may go to different devices in other orders. | ||
471 | * Some device might be higher priority, or have various "hard" access | ||
472 | * time requirements, for example. | ||
473 | * | ||
474 | * On detection of any fault during the transfer, processing of | ||
475 | * the entire message is aborted, and the device is deselected. | ||
476 | * Until returning from the associated message completion callback, | ||
477 | * no other spi_message queued to that device will be processed. | ||
478 | * (This rule applies equally to all the synchronous transfer calls, | ||
479 | * which are wrappers around this core asynchronous primitive.) | ||
480 | */ | ||
481 | static inline int | ||
482 | spi_async(struct spi_device *spi, struct spi_message *message) | ||
483 | { | ||
484 | message->spi = spi; | ||
485 | return spi->master->transfer(spi, message); | ||
486 | } | ||
487 | |||
488 | /*---------------------------------------------------------------------------*/ | ||
489 | |||
490 | /* All these synchronous SPI transfer routines are utilities layered | ||
491 | * over the core async transfer primitive. Here, "synchronous" means | ||
492 | * they will sleep uninterruptibly until the async transfer completes. | ||
493 | */ | ||
494 | |||
495 | extern int spi_sync(struct spi_device *spi, struct spi_message *message); | ||
496 | |||
497 | /** | ||
498 | * spi_write - SPI synchronous write | ||
499 | * @spi: device to which data will be written | ||
500 | * @buf: data buffer | ||
501 | * @len: data buffer size | ||
502 | * | ||
503 | * This writes the buffer and returns zero or a negative error code. | ||
504 | * Callable only from contexts that can sleep. | ||
505 | */ | ||
506 | static inline int | ||
507 | spi_write(struct spi_device *spi, const u8 *buf, size_t len) | ||
508 | { | ||
509 | struct spi_transfer t = { | ||
510 | .tx_buf = buf, | ||
511 | .len = len, | ||
512 | }; | ||
513 | struct spi_message m; | ||
514 | |||
515 | spi_message_init(&m); | ||
516 | spi_message_add_tail(&t, &m); | ||
517 | return spi_sync(spi, &m); | ||
518 | } | ||
519 | |||
520 | /** | ||
521 | * spi_read - SPI synchronous read | ||
522 | * @spi: device from which data will be read | ||
523 | * @buf: data buffer | ||
524 | * @len: data buffer size | ||
525 | * | ||
526 | * This writes the buffer and returns zero or a negative error code. | ||
527 | * Callable only from contexts that can sleep. | ||
528 | */ | ||
529 | static inline int | ||
530 | spi_read(struct spi_device *spi, u8 *buf, size_t len) | ||
531 | { | ||
532 | struct spi_transfer t = { | ||
533 | .rx_buf = buf, | ||
534 | .len = len, | ||
535 | }; | ||
536 | struct spi_message m; | ||
537 | |||
538 | spi_message_init(&m); | ||
539 | spi_message_add_tail(&t, &m); | ||
540 | return spi_sync(spi, &m); | ||
541 | } | ||
542 | |||
543 | /* this copies txbuf and rxbuf data; for small transfers only! */ | ||
544 | extern int spi_write_then_read(struct spi_device *spi, | ||
545 | const u8 *txbuf, unsigned n_tx, | ||
546 | u8 *rxbuf, unsigned n_rx); | ||
547 | |||
548 | /** | ||
549 | * spi_w8r8 - SPI synchronous 8 bit write followed by 8 bit read | ||
550 | * @spi: device with which data will be exchanged | ||
551 | * @cmd: command to be written before data is read back | ||
552 | * | ||
553 | * This returns the (unsigned) eight bit number returned by the | ||
554 | * device, or else a negative error code. Callable only from | ||
555 | * contexts that can sleep. | ||
556 | */ | ||
557 | static inline ssize_t spi_w8r8(struct spi_device *spi, u8 cmd) | ||
558 | { | ||
559 | ssize_t status; | ||
560 | u8 result; | ||
561 | |||
562 | status = spi_write_then_read(spi, &cmd, 1, &result, 1); | ||
563 | |||
564 | /* return negative errno or unsigned value */ | ||
565 | return (status < 0) ? status : result; | ||
566 | } | ||
567 | |||
568 | /** | ||
569 | * spi_w8r16 - SPI synchronous 8 bit write followed by 16 bit read | ||
570 | * @spi: device with which data will be exchanged | ||
571 | * @cmd: command to be written before data is read back | ||
572 | * | ||
573 | * This returns the (unsigned) sixteen bit number returned by the | ||
574 | * device, or else a negative error code. Callable only from | ||
575 | * contexts that can sleep. | ||
576 | * | ||
577 | * The number is returned in wire-order, which is at least sometimes | ||
578 | * big-endian. | ||
579 | */ | ||
580 | static inline ssize_t spi_w8r16(struct spi_device *spi, u8 cmd) | ||
581 | { | ||
582 | ssize_t status; | ||
583 | u16 result; | ||
584 | |||
585 | status = spi_write_then_read(spi, &cmd, 1, (u8 *) &result, 2); | ||
586 | |||
587 | /* return negative errno or unsigned value */ | ||
588 | return (status < 0) ? status : result; | ||
589 | } | ||
590 | |||
591 | /*---------------------------------------------------------------------------*/ | ||
592 | |||
593 | /* | ||
594 | * INTERFACE between board init code and SPI infrastructure. | ||
595 | * | ||
596 | * No SPI driver ever sees these SPI device table segments, but | ||
597 | * it's how the SPI core (or adapters that get hotplugged) grows | ||
598 | * the driver model tree. | ||
599 | * | ||
600 | * As a rule, SPI devices can't be probed. Instead, board init code | ||
601 | * provides a table listing the devices which are present, with enough | ||
602 | * information to bind and set up the device's driver. There's basic | ||
603 | * support for nonstatic configurations too; enough to handle adding | ||
604 | * parport adapters, or microcontrollers acting as USB-to-SPI bridges. | ||
605 | */ | ||
606 | |||
607 | /* board-specific information about each SPI device */ | ||
608 | struct spi_board_info { | ||
609 | /* the device name and module name are coupled, like platform_bus; | ||
610 | * "modalias" is normally the driver name. | ||
611 | * | ||
612 | * platform_data goes to spi_device.dev.platform_data, | ||
613 | * controller_data goes to spi_device.controller_data, | ||
614 | * irq is copied too | ||
615 | */ | ||
616 | char modalias[KOBJ_NAME_LEN]; | ||
617 | const void *platform_data; | ||
618 | void *controller_data; | ||
619 | int irq; | ||
620 | |||
621 | /* slower signaling on noisy or low voltage boards */ | ||
622 | u32 max_speed_hz; | ||
623 | |||
624 | |||
625 | /* bus_num is board specific and matches the bus_num of some | ||
626 | * spi_master that will probably be registered later. | ||
627 | * | ||
628 | * chip_select reflects how this chip is wired to that master; | ||
629 | * it's less than num_chipselect. | ||
630 | */ | ||
631 | u16 bus_num; | ||
632 | u16 chip_select; | ||
633 | |||
634 | /* ... may need additional spi_device chip config data here. | ||
635 | * avoid stuff protocol drivers can set; but include stuff | ||
636 | * needed to behave without being bound to a driver: | ||
637 | * - chipselect polarity | ||
638 | * - quirks like clock rate mattering when not selected | ||
639 | */ | ||
640 | }; | ||
641 | |||
642 | #ifdef CONFIG_SPI | ||
643 | extern int | ||
644 | spi_register_board_info(struct spi_board_info const *info, unsigned n); | ||
645 | #else | ||
646 | /* board init code may ignore whether SPI is configured or not */ | ||
647 | static inline int | ||
648 | spi_register_board_info(struct spi_board_info const *info, unsigned n) | ||
649 | { return 0; } | ||
650 | #endif | ||
651 | |||
652 | |||
653 | /* If you're hotplugging an adapter with devices (parport, usb, etc) | ||
654 | * use spi_new_device() to describe each device. You can also call | ||
655 | * spi_unregister_device() to start making that device vanish, but | ||
656 | * normally that would be handled by spi_unregister_master(). | ||
657 | */ | ||
658 | extern struct spi_device * | ||
659 | spi_new_device(struct spi_master *, struct spi_board_info *); | ||
660 | |||
661 | static inline void | ||
662 | spi_unregister_device(struct spi_device *spi) | ||
663 | { | ||
664 | if (spi) | ||
665 | device_unregister(&spi->dev); | ||
666 | } | ||
667 | |||
668 | #endif /* __LINUX_SPI_H */ | ||
diff --git a/include/linux/spi/spi_bitbang.h b/include/linux/spi/spi_bitbang.h new file mode 100644 index 000000000000..c961fe9bf3eb --- /dev/null +++ b/include/linux/spi/spi_bitbang.h | |||
@@ -0,0 +1,135 @@ | |||
1 | #ifndef __SPI_BITBANG_H | ||
2 | #define __SPI_BITBANG_H | ||
3 | |||
4 | /* | ||
5 | * Mix this utility code with some glue code to get one of several types of | ||
6 | * simple SPI master driver. Two do polled word-at-a-time I/O: | ||
7 | * | ||
8 | * - GPIO/parport bitbangers. Provide chipselect() and txrx_word[](), | ||
9 | * expanding the per-word routines from the inline templates below. | ||
10 | * | ||
11 | * - Drivers for controllers resembling bare shift registers. Provide | ||
12 | * chipselect() and txrx_word[](), with custom setup()/cleanup() methods | ||
13 | * that use your controller's clock and chipselect registers. | ||
14 | * | ||
15 | * Some hardware works well with requests at spi_transfer scope: | ||
16 | * | ||
17 | * - Drivers leveraging smarter hardware, with fifos or DMA; or for half | ||
18 | * duplex (MicroWire) controllers. Provide chipslect() and txrx_bufs(), | ||
19 | * and custom setup()/cleanup() methods. | ||
20 | */ | ||
21 | struct spi_bitbang { | ||
22 | struct workqueue_struct *workqueue; | ||
23 | struct work_struct work; | ||
24 | |||
25 | spinlock_t lock; | ||
26 | struct list_head queue; | ||
27 | u8 busy; | ||
28 | u8 shutdown; | ||
29 | u8 use_dma; | ||
30 | |||
31 | struct spi_master *master; | ||
32 | |||
33 | void (*chipselect)(struct spi_device *spi, int is_on); | ||
34 | #define BITBANG_CS_ACTIVE 1 /* normally nCS, active low */ | ||
35 | #define BITBANG_CS_INACTIVE 0 | ||
36 | |||
37 | /* txrx_bufs() may handle dma mapping for transfers that don't | ||
38 | * already have one (transfer.{tx,rx}_dma is zero), or use PIO | ||
39 | */ | ||
40 | int (*txrx_bufs)(struct spi_device *spi, struct spi_transfer *t); | ||
41 | |||
42 | /* txrx_word[SPI_MODE_*]() just looks like a shift register */ | ||
43 | u32 (*txrx_word[4])(struct spi_device *spi, | ||
44 | unsigned nsecs, | ||
45 | u32 word, u8 bits); | ||
46 | }; | ||
47 | |||
48 | /* you can call these default bitbang->master methods from your custom | ||
49 | * methods, if you like. | ||
50 | */ | ||
51 | extern int spi_bitbang_setup(struct spi_device *spi); | ||
52 | extern void spi_bitbang_cleanup(const struct spi_device *spi); | ||
53 | extern int spi_bitbang_transfer(struct spi_device *spi, struct spi_message *m); | ||
54 | |||
55 | /* start or stop queue processing */ | ||
56 | extern int spi_bitbang_start(struct spi_bitbang *spi); | ||
57 | extern int spi_bitbang_stop(struct spi_bitbang *spi); | ||
58 | |||
59 | #endif /* __SPI_BITBANG_H */ | ||
60 | |||
61 | /*-------------------------------------------------------------------------*/ | ||
62 | |||
63 | #ifdef EXPAND_BITBANG_TXRX | ||
64 | |||
65 | /* | ||
66 | * The code that knows what GPIO pins do what should have declared four | ||
67 | * functions, ideally as inlines, before #defining EXPAND_BITBANG_TXRX | ||
68 | * and including this header: | ||
69 | * | ||
70 | * void setsck(struct spi_device *, int is_on); | ||
71 | * void setmosi(struct spi_device *, int is_on); | ||
72 | * int getmiso(struct spi_device *); | ||
73 | * void spidelay(unsigned); | ||
74 | * | ||
75 | * A non-inlined routine would call bitbang_txrx_*() routines. The | ||
76 | * main loop could easily compile down to a handful of instructions, | ||
77 | * especially if the delay is a NOP (to run at peak speed). | ||
78 | * | ||
79 | * Since this is software, the timings may not be exactly what your board's | ||
80 | * chips need ... there may be several reasons you'd need to tweak timings | ||
81 | * in these routines, not just make to make it faster or slower to match a | ||
82 | * particular CPU clock rate. | ||
83 | */ | ||
84 | |||
85 | static inline u32 | ||
86 | bitbang_txrx_be_cpha0(struct spi_device *spi, | ||
87 | unsigned nsecs, unsigned cpol, | ||
88 | u32 word, u8 bits) | ||
89 | { | ||
90 | /* if (cpol == 0) this is SPI_MODE_0; else this is SPI_MODE_2 */ | ||
91 | |||
92 | /* clock starts at inactive polarity */ | ||
93 | for (word <<= (32 - bits); likely(bits); bits--) { | ||
94 | |||
95 | /* setup MSB (to slave) on trailing edge */ | ||
96 | setmosi(spi, word & (1 << 31)); | ||
97 | spidelay(nsecs); /* T(setup) */ | ||
98 | |||
99 | setsck(spi, !cpol); | ||
100 | spidelay(nsecs); | ||
101 | |||
102 | /* sample MSB (from slave) on leading edge */ | ||
103 | word <<= 1; | ||
104 | word |= getmiso(spi); | ||
105 | setsck(spi, cpol); | ||
106 | } | ||
107 | return word; | ||
108 | } | ||
109 | |||
110 | static inline u32 | ||
111 | bitbang_txrx_be_cpha1(struct spi_device *spi, | ||
112 | unsigned nsecs, unsigned cpol, | ||
113 | u32 word, u8 bits) | ||
114 | { | ||
115 | /* if (cpol == 0) this is SPI_MODE_1; else this is SPI_MODE_3 */ | ||
116 | |||
117 | /* clock starts at inactive polarity */ | ||
118 | for (word <<= (32 - bits); likely(bits); bits--) { | ||
119 | |||
120 | /* setup MSB (to slave) on leading edge */ | ||
121 | setsck(spi, !cpol); | ||
122 | setmosi(spi, word & (1 << 31)); | ||
123 | spidelay(nsecs); /* T(setup) */ | ||
124 | |||
125 | setsck(spi, cpol); | ||
126 | spidelay(nsecs); | ||
127 | |||
128 | /* sample MSB (from slave) on trailing edge */ | ||
129 | word <<= 1; | ||
130 | word |= getmiso(spi); | ||
131 | } | ||
132 | return word; | ||
133 | } | ||
134 | |||
135 | #endif /* EXPAND_BITBANG_TXRX */ | ||
diff --git a/include/linux/swap.h b/include/linux/swap.h index 389d1c382e20..e92054d6530b 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
@@ -180,6 +180,11 @@ extern int isolate_lru_page(struct page *p); | |||
180 | extern int putback_lru_pages(struct list_head *l); | 180 | extern int putback_lru_pages(struct list_head *l); |
181 | extern int migrate_pages(struct list_head *l, struct list_head *t, | 181 | extern int migrate_pages(struct list_head *l, struct list_head *t, |
182 | struct list_head *moved, struct list_head *failed); | 182 | struct list_head *moved, struct list_head *failed); |
183 | #else | ||
184 | static inline int isolate_lru_page(struct page *p) { return -ENOSYS; } | ||
185 | static inline int putback_lru_pages(struct list_head *l) { return 0; } | ||
186 | static inline int migrate_pages(struct list_head *l, struct list_head *t, | ||
187 | struct list_head *moved, struct list_head *failed) { return -ENOSYS; } | ||
183 | #endif | 188 | #endif |
184 | 189 | ||
185 | #ifdef CONFIG_MMU | 190 | #ifdef CONFIG_MMU |
diff --git a/include/linux/tipc.h b/include/linux/tipc.h new file mode 100644 index 000000000000..243a15f54002 --- /dev/null +++ b/include/linux/tipc.h | |||
@@ -0,0 +1,212 @@ | |||
1 | /* | ||
2 | * include/linux/tipc.h: Include file for TIPC socket interface | ||
3 | * | ||
4 | * Copyright (c) 2003-2006, Ericsson AB | ||
5 | * Copyright (c) 2005, Wind River Systems | ||
6 | * All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions are met: | ||
10 | * | ||
11 | * 1. Redistributions of source code must retain the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer. | ||
13 | * 2. Redistributions in binary form must reproduce the above copyright | ||
14 | * notice, this list of conditions and the following disclaimer in the | ||
15 | * documentation and/or other materials provided with the distribution. | ||
16 | * 3. Neither the names of the copyright holders nor the names of its | ||
17 | * contributors may be used to endorse or promote products derived from | ||
18 | * this software without specific prior written permission. | ||
19 | * | ||
20 | * Alternatively, this software may be distributed under the terms of the | ||
21 | * GNU General Public License ("GPL") version 2 as published by the Free | ||
22 | * Software Foundation. | ||
23 | * | ||
24 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
25 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
27 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | ||
28 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
29 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
30 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
31 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
32 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
33 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
34 | * POSSIBILITY OF SUCH DAMAGE. | ||
35 | */ | ||
36 | |||
37 | #ifndef _LINUX_TIPC_H_ | ||
38 | #define _LINUX_TIPC_H_ | ||
39 | |||
40 | #include <linux/types.h> | ||
41 | |||
42 | /* | ||
43 | * TIPC addressing primitives | ||
44 | */ | ||
45 | |||
46 | struct tipc_portid { | ||
47 | __u32 ref; | ||
48 | __u32 node; | ||
49 | }; | ||
50 | |||
51 | struct tipc_name { | ||
52 | __u32 type; | ||
53 | __u32 instance; | ||
54 | }; | ||
55 | |||
56 | struct tipc_name_seq { | ||
57 | __u32 type; | ||
58 | __u32 lower; | ||
59 | __u32 upper; | ||
60 | }; | ||
61 | |||
62 | static inline __u32 tipc_addr(unsigned int zone, | ||
63 | unsigned int cluster, | ||
64 | unsigned int node) | ||
65 | { | ||
66 | return (zone << 24) | (cluster << 12) | node; | ||
67 | } | ||
68 | |||
69 | static inline unsigned int tipc_zone(__u32 addr) | ||
70 | { | ||
71 | return addr >> 24; | ||
72 | } | ||
73 | |||
74 | static inline unsigned int tipc_cluster(__u32 addr) | ||
75 | { | ||
76 | return (addr >> 12) & 0xfff; | ||
77 | } | ||
78 | |||
79 | static inline unsigned int tipc_node(__u32 addr) | ||
80 | { | ||
81 | return addr & 0xfff; | ||
82 | } | ||
83 | |||
84 | /* | ||
85 | * Application-accessible port name types | ||
86 | */ | ||
87 | |||
88 | #define TIPC_CFG_SRV 0 /* configuration service name type */ | ||
89 | #define TIPC_TOP_SRV 1 /* topology service name type */ | ||
90 | #define TIPC_RESERVED_TYPES 64 /* lowest user-publishable name type */ | ||
91 | |||
92 | /* | ||
93 | * Publication scopes when binding port names and port name sequences | ||
94 | */ | ||
95 | |||
96 | #define TIPC_ZONE_SCOPE 1 | ||
97 | #define TIPC_CLUSTER_SCOPE 2 | ||
98 | #define TIPC_NODE_SCOPE 3 | ||
99 | |||
100 | /* | ||
101 | * Limiting values for messages | ||
102 | */ | ||
103 | |||
104 | #define TIPC_MAX_USER_MSG_SIZE 66000 | ||
105 | |||
106 | /* | ||
107 | * Message importance levels | ||
108 | */ | ||
109 | |||
110 | #define TIPC_LOW_IMPORTANCE 0 /* default */ | ||
111 | #define TIPC_MEDIUM_IMPORTANCE 1 | ||
112 | #define TIPC_HIGH_IMPORTANCE 2 | ||
113 | #define TIPC_CRITICAL_IMPORTANCE 3 | ||
114 | |||
115 | /* | ||
116 | * Msg rejection/connection shutdown reasons | ||
117 | */ | ||
118 | |||
119 | #define TIPC_OK 0 | ||
120 | #define TIPC_ERR_NO_NAME 1 | ||
121 | #define TIPC_ERR_NO_PORT 2 | ||
122 | #define TIPC_ERR_NO_NODE 3 | ||
123 | #define TIPC_ERR_OVERLOAD 4 | ||
124 | #define TIPC_CONN_SHUTDOWN 5 | ||
125 | |||
126 | /* | ||
127 | * TIPC topology subscription service definitions | ||
128 | */ | ||
129 | |||
130 | #define TIPC_SUB_PORTS 0x01 /* filter for port availability */ | ||
131 | #define TIPC_SUB_SERVICE 0x02 /* filter for service availability */ | ||
132 | #if 0 | ||
133 | /* The following filter options are not currently implemented */ | ||
134 | #define TIPC_SUB_NO_BIND_EVTS 0x04 /* filter out "publish" events */ | ||
135 | #define TIPC_SUB_NO_UNBIND_EVTS 0x08 /* filter out "withdraw" events */ | ||
136 | #define TIPC_SUB_SINGLE_EVT 0x10 /* expire after first event */ | ||
137 | #endif | ||
138 | |||
139 | #define TIPC_WAIT_FOREVER ~0 /* timeout for permanent subscription */ | ||
140 | |||
141 | struct tipc_subscr { | ||
142 | struct tipc_name_seq seq; /* name sequence of interest */ | ||
143 | __u32 timeout; /* subscription duration (in ms) */ | ||
144 | __u32 filter; /* bitmask of filter options */ | ||
145 | char usr_handle[8]; /* available for subscriber use */ | ||
146 | }; | ||
147 | |||
148 | #define TIPC_PUBLISHED 1 /* publication event */ | ||
149 | #define TIPC_WITHDRAWN 2 /* withdraw event */ | ||
150 | #define TIPC_SUBSCR_TIMEOUT 3 /* subscription timeout event */ | ||
151 | |||
152 | struct tipc_event { | ||
153 | __u32 event; /* event type */ | ||
154 | __u32 found_lower; /* matching name seq instances */ | ||
155 | __u32 found_upper; /* " " " " */ | ||
156 | struct tipc_portid port; /* associated port */ | ||
157 | struct tipc_subscr s; /* associated subscription */ | ||
158 | }; | ||
159 | |||
160 | /* | ||
161 | * Socket API | ||
162 | */ | ||
163 | |||
164 | #ifndef AF_TIPC | ||
165 | #define AF_TIPC 30 | ||
166 | #endif | ||
167 | |||
168 | #ifndef PF_TIPC | ||
169 | #define PF_TIPC AF_TIPC | ||
170 | #endif | ||
171 | |||
172 | #ifndef SOL_TIPC | ||
173 | #define SOL_TIPC 271 | ||
174 | #endif | ||
175 | |||
176 | #define TIPC_ADDR_NAMESEQ 1 | ||
177 | #define TIPC_ADDR_MCAST 1 | ||
178 | #define TIPC_ADDR_NAME 2 | ||
179 | #define TIPC_ADDR_ID 3 | ||
180 | |||
181 | struct sockaddr_tipc { | ||
182 | unsigned short family; | ||
183 | unsigned char addrtype; | ||
184 | signed char scope; | ||
185 | union { | ||
186 | struct tipc_portid id; | ||
187 | struct tipc_name_seq nameseq; | ||
188 | struct { | ||
189 | struct tipc_name name; | ||
190 | __u32 domain; /* 0: own zone */ | ||
191 | } name; | ||
192 | } addr; | ||
193 | }; | ||
194 | |||
195 | /* | ||
196 | * Ancillary data objects supported by recvmsg() | ||
197 | */ | ||
198 | |||
199 | #define TIPC_ERRINFO 1 /* error info */ | ||
200 | #define TIPC_RETDATA 2 /* returned data */ | ||
201 | #define TIPC_DESTNAME 3 /* destination name */ | ||
202 | |||
203 | /* | ||
204 | * TIPC-specific socket option values | ||
205 | */ | ||
206 | |||
207 | #define TIPC_IMPORTANCE 127 /* Default: TIPC_LOW_IMPORTANCE */ | ||
208 | #define TIPC_SRC_DROPPABLE 128 /* Default: 0 (resend congested msg) */ | ||
209 | #define TIPC_DEST_DROPPABLE 129 /* Default: based on socket type */ | ||
210 | #define TIPC_CONN_TIMEOUT 130 /* Default: 8000 (ms) */ | ||
211 | |||
212 | #endif | ||
diff --git a/include/linux/tipc_config.h b/include/linux/tipc_config.h new file mode 100644 index 000000000000..a52c8c64a5a3 --- /dev/null +++ b/include/linux/tipc_config.h | |||
@@ -0,0 +1,407 @@ | |||
1 | /* | ||
2 | * include/linux/tipc_config.h: Include file for TIPC configuration interface | ||
3 | * | ||
4 | * Copyright (c) 2003-2006, Ericsson AB | ||
5 | * Copyright (c) 2005, Wind River Systems | ||
6 | * All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions are met: | ||
10 | * | ||
11 | * 1. Redistributions of source code must retain the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer. | ||
13 | * 2. Redistributions in binary form must reproduce the above copyright | ||
14 | * notice, this list of conditions and the following disclaimer in the | ||
15 | * documentation and/or other materials provided with the distribution. | ||
16 | * 3. Neither the names of the copyright holders nor the names of its | ||
17 | * contributors may be used to endorse or promote products derived from | ||
18 | * this software without specific prior written permission. | ||
19 | * | ||
20 | * Alternatively, this software may be distributed under the terms of the | ||
21 | * GNU General Public License ("GPL") version 2 as published by the Free | ||
22 | * Software Foundation. | ||
23 | * | ||
24 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
25 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
27 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | ||
28 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
29 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
30 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
31 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
32 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
33 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
34 | * POSSIBILITY OF SUCH DAMAGE. | ||
35 | */ | ||
36 | |||
37 | #ifndef _LINUX_TIPC_CONFIG_H_ | ||
38 | #define _LINUX_TIPC_CONFIG_H_ | ||
39 | |||
40 | #include <linux/types.h> | ||
41 | #include <linux/string.h> | ||
42 | #include <asm/byteorder.h> | ||
43 | |||
44 | /* | ||
45 | * Configuration | ||
46 | * | ||
47 | * All configuration management messaging involves sending a request message | ||
48 | * to the TIPC configuration service on a node, which sends a reply message | ||
49 | * back. (In the future multi-message replies may be supported.) | ||
50 | * | ||
51 | * Both request and reply messages consist of a transport header and payload. | ||
52 | * The transport header contains info about the desired operation; | ||
53 | * the payload consists of zero or more type/length/value (TLV) items | ||
54 | * which specify parameters or results for the operation. | ||
55 | * | ||
56 | * For many operations, the request and reply messages have a fixed number | ||
57 | * of TLVs (usually zero or one); however, some reply messages may return | ||
58 | * a variable number of TLVs. A failed request is denoted by the presence | ||
59 | * of an "error string" TLV in the reply message instead of the TLV(s) the | ||
60 | * reply should contain if the request succeeds. | ||
61 | */ | ||
62 | |||
63 | /* | ||
64 | * Public commands: | ||
65 | * May be issued by any process. | ||
66 | * Accepted by own node, or by remote node only if remote management enabled. | ||
67 | */ | ||
68 | |||
69 | #define TIPC_CMD_NOOP 0x0000 /* tx none, rx none */ | ||
70 | #define TIPC_CMD_GET_NODES 0x0001 /* tx net_addr, rx node_info(s) */ | ||
71 | #define TIPC_CMD_GET_MEDIA_NAMES 0x0002 /* tx none, rx media_name(s) */ | ||
72 | #define TIPC_CMD_GET_BEARER_NAMES 0x0003 /* tx none, rx bearer_name(s) */ | ||
73 | #define TIPC_CMD_GET_LINKS 0x0004 /* tx net_addr, rx link_info(s) */ | ||
74 | #define TIPC_CMD_SHOW_NAME_TABLE 0x0005 /* tx name_tbl_query, rx ultra_string */ | ||
75 | #define TIPC_CMD_SHOW_PORTS 0x0006 /* tx none, rx ultra_string */ | ||
76 | #define TIPC_CMD_SHOW_LINK_STATS 0x000B /* tx link_name, rx ultra_string */ | ||
77 | |||
78 | #if 0 | ||
79 | #define TIPC_CMD_SHOW_PORT_STATS 0x0008 /* tx port_ref, rx ultra_string */ | ||
80 | #define TIPC_CMD_RESET_PORT_STATS 0x0009 /* tx port_ref, rx none */ | ||
81 | #define TIPC_CMD_GET_ROUTES 0x000A /* tx ?, rx ? */ | ||
82 | #define TIPC_CMD_GET_LINK_PEER 0x000D /* tx link_name, rx ? */ | ||
83 | #endif | ||
84 | |||
85 | /* | ||
86 | * Protected commands: | ||
87 | * May only be issued by "network administration capable" process. | ||
88 | * Accepted by own node, or by remote node only if remote management enabled | ||
89 | * and this node is zone manager. | ||
90 | */ | ||
91 | |||
92 | #define TIPC_CMD_GET_REMOTE_MNG 0x4003 /* tx none, rx unsigned */ | ||
93 | #define TIPC_CMD_GET_MAX_PORTS 0x4004 /* tx none, rx unsigned */ | ||
94 | #define TIPC_CMD_GET_MAX_PUBL 0x4005 /* tx none, rx unsigned */ | ||
95 | #define TIPC_CMD_GET_MAX_SUBSCR 0x4006 /* tx none, rx unsigned */ | ||
96 | #define TIPC_CMD_GET_MAX_ZONES 0x4007 /* tx none, rx unsigned */ | ||
97 | #define TIPC_CMD_GET_MAX_CLUSTERS 0x4008 /* tx none, rx unsigned */ | ||
98 | #define TIPC_CMD_GET_MAX_NODES 0x4009 /* tx none, rx unsigned */ | ||
99 | #define TIPC_CMD_GET_MAX_SLAVES 0x400A /* tx none, rx unsigned */ | ||
100 | #define TIPC_CMD_GET_NETID 0x400B /* tx none, rx unsigned */ | ||
101 | |||
102 | #define TIPC_CMD_ENABLE_BEARER 0x4101 /* tx bearer_config, rx none */ | ||
103 | #define TIPC_CMD_DISABLE_BEARER 0x4102 /* tx bearer_name, rx none */ | ||
104 | #define TIPC_CMD_SET_LINK_TOL 0x4107 /* tx link_config, rx none */ | ||
105 | #define TIPC_CMD_SET_LINK_PRI 0x4108 /* tx link_config, rx none */ | ||
106 | #define TIPC_CMD_SET_LINK_WINDOW 0x4109 /* tx link_config, rx none */ | ||
107 | #define TIPC_CMD_SET_LOG_SIZE 0x410A /* tx unsigned, rx none */ | ||
108 | #define TIPC_CMD_DUMP_LOG 0x410B /* tx none, rx ultra_string */ | ||
109 | #define TIPC_CMD_RESET_LINK_STATS 0x410C /* tx link_name, rx none */ | ||
110 | |||
111 | #if 0 | ||
112 | #define TIPC_CMD_CREATE_LINK 0x4103 /* tx link_create, rx none */ | ||
113 | #define TIPC_CMD_REMOVE_LINK 0x4104 /* tx link_name, rx none */ | ||
114 | #define TIPC_CMD_BLOCK_LINK 0x4105 /* tx link_name, rx none */ | ||
115 | #define TIPC_CMD_UNBLOCK_LINK 0x4106 /* tx link_name, rx none */ | ||
116 | #endif | ||
117 | |||
118 | /* | ||
119 | * Private commands: | ||
120 | * May only be issued by "network administration capable" process. | ||
121 | * Accepted by own node only; cannot be used on a remote node. | ||
122 | */ | ||
123 | |||
124 | #define TIPC_CMD_SET_NODE_ADDR 0x8001 /* tx net_addr, rx none */ | ||
125 | #if 0 | ||
126 | #define TIPC_CMD_SET_ZONE_MASTER 0x8002 /* tx none, rx none */ | ||
127 | #endif | ||
128 | #define TIPC_CMD_SET_REMOTE_MNG 0x8003 /* tx unsigned, rx none */ | ||
129 | #define TIPC_CMD_SET_MAX_PORTS 0x8004 /* tx unsigned, rx none */ | ||
130 | #define TIPC_CMD_SET_MAX_PUBL 0x8005 /* tx unsigned, rx none */ | ||
131 | #define TIPC_CMD_SET_MAX_SUBSCR 0x8006 /* tx unsigned, rx none */ | ||
132 | #define TIPC_CMD_SET_MAX_ZONES 0x8007 /* tx unsigned, rx none */ | ||
133 | #define TIPC_CMD_SET_MAX_CLUSTERS 0x8008 /* tx unsigned, rx none */ | ||
134 | #define TIPC_CMD_SET_MAX_NODES 0x8009 /* tx unsigned, rx none */ | ||
135 | #define TIPC_CMD_SET_MAX_SLAVES 0x800A /* tx unsigned, rx none */ | ||
136 | #define TIPC_CMD_SET_NETID 0x800B /* tx unsigned, rx none */ | ||
137 | |||
138 | /* | ||
139 | * TLV types defined for TIPC | ||
140 | */ | ||
141 | |||
142 | #define TIPC_TLV_NONE 0 /* no TLV present */ | ||
143 | #define TIPC_TLV_VOID 1 /* empty TLV (0 data bytes)*/ | ||
144 | #define TIPC_TLV_UNSIGNED 2 /* 32-bit integer */ | ||
145 | #define TIPC_TLV_STRING 3 /* char[128] (max) */ | ||
146 | #define TIPC_TLV_LARGE_STRING 4 /* char[2048] (max) */ | ||
147 | #define TIPC_TLV_ULTRA_STRING 5 /* char[32768] (max) */ | ||
148 | |||
149 | #define TIPC_TLV_ERROR_STRING 16 /* char[128] containing "error code" */ | ||
150 | #define TIPC_TLV_NET_ADDR 17 /* 32-bit integer denoting <Z.C.N> */ | ||
151 | #define TIPC_TLV_MEDIA_NAME 18 /* char[TIPC_MAX_MEDIA_NAME] */ | ||
152 | #define TIPC_TLV_BEARER_NAME 19 /* char[TIPC_MAX_BEARER_NAME] */ | ||
153 | #define TIPC_TLV_LINK_NAME 20 /* char[TIPC_MAX_LINK_NAME] */ | ||
154 | #define TIPC_TLV_NODE_INFO 21 /* struct tipc_node_info */ | ||
155 | #define TIPC_TLV_LINK_INFO 22 /* struct tipc_link_info */ | ||
156 | #define TIPC_TLV_BEARER_CONFIG 23 /* struct tipc_bearer_config */ | ||
157 | #define TIPC_TLV_LINK_CONFIG 24 /* struct tipc_link_config */ | ||
158 | #define TIPC_TLV_NAME_TBL_QUERY 25 /* struct tipc_name_table_query */ | ||
159 | #define TIPC_TLV_PORT_REF 26 /* 32-bit port reference */ | ||
160 | |||
161 | /* | ||
162 | * Maximum sizes of TIPC bearer-related names (including terminating NUL) | ||
163 | */ | ||
164 | |||
165 | #define TIPC_MAX_MEDIA_NAME 16 /* format = media */ | ||
166 | #define TIPC_MAX_IF_NAME 16 /* format = interface */ | ||
167 | #define TIPC_MAX_BEARER_NAME 32 /* format = media:interface */ | ||
168 | #define TIPC_MAX_LINK_NAME 60 /* format = Z.C.N:interface-Z.C.N:interface */ | ||
169 | |||
170 | /* | ||
171 | * Link priority limits (range from 0 to # priorities - 1) | ||
172 | */ | ||
173 | |||
174 | #define TIPC_NUM_LINK_PRI 32 | ||
175 | |||
176 | /* | ||
177 | * Link tolerance limits (min, default, max), in ms | ||
178 | */ | ||
179 | |||
180 | #define TIPC_MIN_LINK_TOL 50 | ||
181 | #define TIPC_DEF_LINK_TOL 1500 | ||
182 | #define TIPC_MAX_LINK_TOL 30000 | ||
183 | |||
184 | /* | ||
185 | * Link window limits (min, default, max), in packets | ||
186 | */ | ||
187 | |||
188 | #define TIPC_MIN_LINK_WIN 16 | ||
189 | #define TIPC_DEF_LINK_WIN 50 | ||
190 | #define TIPC_MAX_LINK_WIN 150 | ||
191 | |||
192 | |||
193 | struct tipc_node_info { | ||
194 | __u32 addr; /* network address of node */ | ||
195 | __u32 up; /* 0=down, 1= up */ | ||
196 | }; | ||
197 | |||
198 | struct tipc_link_info { | ||
199 | __u32 dest; /* network address of peer node */ | ||
200 | __u32 up; /* 0=down, 1=up */ | ||
201 | char str[TIPC_MAX_LINK_NAME]; /* link name */ | ||
202 | }; | ||
203 | |||
204 | struct tipc_bearer_config { | ||
205 | __u32 priority; /* Range [1,31]. Override per link */ | ||
206 | __u32 detect_scope; | ||
207 | char name[TIPC_MAX_BEARER_NAME]; | ||
208 | }; | ||
209 | |||
210 | struct tipc_link_config { | ||
211 | __u32 value; | ||
212 | char name[TIPC_MAX_LINK_NAME]; | ||
213 | }; | ||
214 | |||
215 | #define TIPC_NTQ_ALLTYPES 0x80000000 | ||
216 | |||
217 | struct tipc_name_table_query { | ||
218 | __u32 depth; /* 1:type, 2:+name info, 3:+port info, 4+:+debug info */ | ||
219 | __u32 type; /* {t,l,u} info ignored if high bit of "depth" is set */ | ||
220 | __u32 lowbound; /* (i.e. displays all entries of name table) */ | ||
221 | __u32 upbound; | ||
222 | }; | ||
223 | |||
224 | /* | ||
225 | * The error string TLV is a null-terminated string describing the cause | ||
226 | * of the request failure. To simplify error processing (and to save space) | ||
227 | * the first character of the string can be a special error code character | ||
228 | * (lying by the range 0x80 to 0xFF) which represents a pre-defined reason. | ||
229 | */ | ||
230 | |||
231 | #define TIPC_CFG_TLV_ERROR "\x80" /* request contains incorrect TLV(s) */ | ||
232 | #define TIPC_CFG_NOT_NET_ADMIN "\x81" /* must be network administrator */ | ||
233 | #define TIPC_CFG_NOT_ZONE_MSTR "\x82" /* must be zone master */ | ||
234 | #define TIPC_CFG_NO_REMOTE "\x83" /* remote management not enabled */ | ||
235 | #define TIPC_CFG_NOT_SUPPORTED "\x84" /* request is not supported by TIPC */ | ||
236 | #define TIPC_CFG_INVALID_VALUE "\x85" /* request has invalid argument value */ | ||
237 | |||
238 | #if 0 | ||
239 | /* prototypes TLV structures for proposed commands */ | ||
240 | struct tipc_link_create { | ||
241 | __u32 domain; | ||
242 | struct tipc_media_addr peer_addr; | ||
243 | char bearer_name[TIPC_MAX_BEARER_NAME]; | ||
244 | }; | ||
245 | |||
246 | struct tipc_route_info { | ||
247 | __u32 dest; | ||
248 | __u32 router; | ||
249 | }; | ||
250 | #endif | ||
251 | |||
252 | /* | ||
253 | * A TLV consists of a descriptor, followed by the TLV value. | ||
254 | * TLV descriptor fields are stored in network byte order; | ||
255 | * TLV values must also be stored in network byte order (where applicable). | ||
256 | * TLV descriptors must be aligned to addresses which are multiple of 4, | ||
257 | * so up to 3 bytes of padding may exist at the end of the TLV value area. | ||
258 | * There must not be any padding between the TLV descriptor and its value. | ||
259 | */ | ||
260 | |||
261 | struct tlv_desc { | ||
262 | __u16 tlv_len; /* TLV length (descriptor + value) */ | ||
263 | __u16 tlv_type; /* TLV identifier */ | ||
264 | }; | ||
265 | |||
266 | #define TLV_ALIGNTO 4 | ||
267 | |||
268 | #define TLV_ALIGN(datalen) (((datalen)+(TLV_ALIGNTO-1)) & ~(TLV_ALIGNTO-1)) | ||
269 | #define TLV_LENGTH(datalen) (sizeof(struct tlv_desc) + (datalen)) | ||
270 | #define TLV_SPACE(datalen) (TLV_ALIGN(TLV_LENGTH(datalen))) | ||
271 | #define TLV_DATA(tlv) ((void *)((char *)(tlv) + TLV_LENGTH(0))) | ||
272 | |||
273 | static inline int TLV_OK(const void *tlv, __u16 space) | ||
274 | { | ||
275 | /* | ||
276 | * Would also like to check that "tlv" is a multiple of 4, | ||
277 | * but don't know how to do this in a portable way. | ||
278 | * - Tried doing (!(tlv & (TLV_ALIGNTO-1))), but GCC compiler | ||
279 | * won't allow binary "&" with a pointer. | ||
280 | * - Tried casting "tlv" to integer type, but causes warning about size | ||
281 | * mismatch when pointer is bigger than chosen type (int, long, ...). | ||
282 | */ | ||
283 | |||
284 | return (space >= TLV_SPACE(0)) && | ||
285 | (ntohs(((struct tlv_desc *)tlv)->tlv_len) <= space); | ||
286 | } | ||
287 | |||
288 | static inline int TLV_CHECK(const void *tlv, __u16 space, __u16 exp_type) | ||
289 | { | ||
290 | return TLV_OK(tlv, space) && | ||
291 | (ntohs(((struct tlv_desc *)tlv)->tlv_type) == exp_type); | ||
292 | } | ||
293 | |||
294 | static inline int TLV_SET(void *tlv, __u16 type, void *data, __u16 len) | ||
295 | { | ||
296 | struct tlv_desc *tlv_ptr; | ||
297 | int tlv_len; | ||
298 | |||
299 | tlv_len = TLV_LENGTH(len); | ||
300 | tlv_ptr = (struct tlv_desc *)tlv; | ||
301 | tlv_ptr->tlv_type = htons(type); | ||
302 | tlv_ptr->tlv_len = htons(tlv_len); | ||
303 | if (len && data) | ||
304 | memcpy(TLV_DATA(tlv_ptr), data, tlv_len); | ||
305 | return TLV_SPACE(len); | ||
306 | } | ||
307 | |||
308 | /* | ||
309 | * A TLV list descriptor simplifies processing of messages | ||
310 | * containing multiple TLVs. | ||
311 | */ | ||
312 | |||
313 | struct tlv_list_desc { | ||
314 | struct tlv_desc *tlv_ptr; /* ptr to current TLV */ | ||
315 | __u32 tlv_space; /* # bytes from curr TLV to list end */ | ||
316 | }; | ||
317 | |||
318 | static inline void TLV_LIST_INIT(struct tlv_list_desc *list, | ||
319 | void *data, __u32 space) | ||
320 | { | ||
321 | list->tlv_ptr = (struct tlv_desc *)data; | ||
322 | list->tlv_space = space; | ||
323 | } | ||
324 | |||
325 | static inline int TLV_LIST_EMPTY(struct tlv_list_desc *list) | ||
326 | { | ||
327 | return (list->tlv_space == 0); | ||
328 | } | ||
329 | |||
330 | static inline int TLV_LIST_CHECK(struct tlv_list_desc *list, __u16 exp_type) | ||
331 | { | ||
332 | return TLV_CHECK(list->tlv_ptr, list->tlv_space, exp_type); | ||
333 | } | ||
334 | |||
335 | static inline void *TLV_LIST_DATA(struct tlv_list_desc *list) | ||
336 | { | ||
337 | return TLV_DATA(list->tlv_ptr); | ||
338 | } | ||
339 | |||
340 | static inline void TLV_LIST_STEP(struct tlv_list_desc *list) | ||
341 | { | ||
342 | __u16 tlv_space = TLV_ALIGN(ntohs(list->tlv_ptr->tlv_len)); | ||
343 | |||
344 | list->tlv_ptr = (struct tlv_desc *)((char *)list->tlv_ptr + tlv_space); | ||
345 | list->tlv_space -= tlv_space; | ||
346 | } | ||
347 | |||
348 | /* | ||
349 | * Configuration messages exchanged via NETLINK_GENERIC use the following | ||
350 | * family id, name, version and command. | ||
351 | */ | ||
352 | #define TIPC_GENL_NAME "TIPC" | ||
353 | #define TIPC_GENL_VERSION 0x1 | ||
354 | #define TIPC_GENL_CMD 0x1 | ||
355 | |||
356 | /* | ||
357 | * TIPC specific header used in NETLINK_GENERIC requests. | ||
358 | */ | ||
359 | struct tipc_genlmsghdr { | ||
360 | __u32 dest; /* Destination address */ | ||
361 | __u16 cmd; /* Command */ | ||
362 | __u16 reserved; /* Unused */ | ||
363 | }; | ||
364 | |||
365 | #define TIPC_GENL_HDRLEN NLMSG_ALIGN(sizeof(struct tipc_genlmsghdr)) | ||
366 | |||
367 | /* | ||
368 | * Configuration messages exchanged via TIPC sockets use the TIPC configuration | ||
369 | * message header, which is defined below. This structure is analogous | ||
370 | * to the Netlink message header, but fields are stored in network byte order | ||
371 | * and no padding is permitted between the header and the message data | ||
372 | * that follows. | ||
373 | */ | ||
374 | |||
375 | struct tipc_cfg_msg_hdr | ||
376 | { | ||
377 | __u32 tcm_len; /* Message length (including header) */ | ||
378 | __u16 tcm_type; /* Command type */ | ||
379 | __u16 tcm_flags; /* Additional flags */ | ||
380 | char tcm_reserved[8]; /* Unused */ | ||
381 | }; | ||
382 | |||
383 | #define TCM_F_REQUEST 0x1 /* Flag: Request message */ | ||
384 | #define TCM_F_MORE 0x2 /* Flag: Message to be continued */ | ||
385 | |||
386 | #define TCM_ALIGN(datalen) (((datalen)+3) & ~3) | ||
387 | #define TCM_LENGTH(datalen) (sizeof(struct tipc_cfg_msg_hdr) + datalen) | ||
388 | #define TCM_SPACE(datalen) (TCM_ALIGN(TCM_LENGTH(datalen))) | ||
389 | #define TCM_DATA(tcm_hdr) ((void *)((char *)(tcm_hdr) + TCM_LENGTH(0))) | ||
390 | |||
391 | static inline int TCM_SET(void *msg, __u16 cmd, __u16 flags, | ||
392 | void *data, __u16 data_len) | ||
393 | { | ||
394 | struct tipc_cfg_msg_hdr *tcm_hdr; | ||
395 | int msg_len; | ||
396 | |||
397 | msg_len = TCM_LENGTH(data_len); | ||
398 | tcm_hdr = (struct tipc_cfg_msg_hdr *)msg; | ||
399 | tcm_hdr->tcm_len = htonl(msg_len); | ||
400 | tcm_hdr->tcm_type = htons(cmd); | ||
401 | tcm_hdr->tcm_flags = htons(flags); | ||
402 | if (data_len && data) | ||
403 | memcpy(TCM_DATA(msg), data, data_len); | ||
404 | return TCM_SPACE(data_len); | ||
405 | } | ||
406 | |||
407 | #endif | ||
diff --git a/include/media/tuner-types.h b/include/media/tuner-types.h new file mode 100644 index 000000000000..15821ab14a9e --- /dev/null +++ b/include/media/tuner-types.h | |||
@@ -0,0 +1,55 @@ | |||
1 | /* | ||
2 | * descriptions for simple tuners. | ||
3 | */ | ||
4 | |||
5 | #ifndef __TUNER_TYPES_H__ | ||
6 | #define __TUNER_TYPES_H__ | ||
7 | |||
8 | enum param_type { | ||
9 | TUNER_PARAM_TYPE_RADIO, \ | ||
10 | TUNER_PARAM_TYPE_PAL, \ | ||
11 | TUNER_PARAM_TYPE_SECAM, \ | ||
12 | TUNER_PARAM_TYPE_NTSC | ||
13 | }; | ||
14 | |||
15 | struct tuner_range { | ||
16 | unsigned short limit; | ||
17 | unsigned char cb; | ||
18 | }; | ||
19 | |||
20 | struct tuner_params { | ||
21 | enum param_type type; | ||
22 | /* Many Philips based tuners have a comment like this in their | ||
23 | * datasheet: | ||
24 | * | ||
25 | * For channel selection involving band switching, and to ensure | ||
26 | * smooth tuning to the desired channel without causing | ||
27 | * unnecessary charge pump action, it is recommended to consider | ||
28 | * the difference between wanted channel frequency and the | ||
29 | * current channel frequency. Unnecessary charge pump action | ||
30 | * will result in very low tuning voltage which may drive the | ||
31 | * oscillator to extreme conditions. | ||
32 | * | ||
33 | * Set cb_first_if_lower_freq to 1, if this check is | ||
34 | * required for this tuner. | ||
35 | * | ||
36 | * I tested this for PAL by first setting the TV frequency to | ||
37 | * 203 MHz and then switching to 96.6 MHz FM radio. The result was | ||
38 | * static unless the control byte was sent first. | ||
39 | */ | ||
40 | unsigned int cb_first_if_lower_freq:1; | ||
41 | unsigned char config; /* to be moved into struct tuner_range for dvb-pll merge */ | ||
42 | |||
43 | unsigned int count; | ||
44 | struct tuner_range *ranges; | ||
45 | }; | ||
46 | |||
47 | struct tunertype { | ||
48 | char *name; | ||
49 | struct tuner_params *params; | ||
50 | }; | ||
51 | |||
52 | extern struct tunertype tuners[]; | ||
53 | extern unsigned const int tuner_count; | ||
54 | |||
55 | #endif | ||
diff --git a/include/media/tuner.h b/include/media/tuner.h index 27cbf08c931d..a5beeac495c7 100644 --- a/include/media/tuner.h +++ b/include/media/tuner.h | |||
@@ -23,6 +23,7 @@ | |||
23 | #define _TUNER_H | 23 | #define _TUNER_H |
24 | 24 | ||
25 | #include <linux/videodev2.h> | 25 | #include <linux/videodev2.h> |
26 | #include <media/tuner-types.h> | ||
26 | 27 | ||
27 | #define ADDR_UNSET (255) | 28 | #define ADDR_UNSET (255) |
28 | 29 | ||
@@ -114,6 +115,7 @@ | |||
114 | 115 | ||
115 | #define TUNER_PHILIPS_TUV1236D 68 /* ATI HDTV Wonder */ | 116 | #define TUNER_PHILIPS_TUV1236D 68 /* ATI HDTV Wonder */ |
116 | #define TUNER_TNF_5335MF 69 /* Sabrent Bt848 */ | 117 | #define TUNER_TNF_5335MF 69 /* Sabrent Bt848 */ |
118 | #define TUNER_SAMSUNG_TCPN_2121P30A 70 /* Hauppauge PVR-500MCE NTSC */ | ||
117 | 119 | ||
118 | /* tv card specific */ | 120 | /* tv card specific */ |
119 | #define TDA9887_PRESENT (1<<0) | 121 | #define TDA9887_PRESENT (1<<0) |
@@ -177,7 +179,9 @@ struct tuner { | |||
177 | unsigned int mode; | 179 | unsigned int mode; |
178 | unsigned int mode_mask; /* Combination of allowable modes */ | 180 | unsigned int mode_mask; /* Combination of allowable modes */ |
179 | 181 | ||
180 | unsigned int freq; /* keep track of the current settings */ | 182 | unsigned int tv_freq; /* keep track of the current settings */ |
183 | unsigned int radio_freq; | ||
184 | u16 last_div; | ||
181 | unsigned int audmode; | 185 | unsigned int audmode; |
182 | v4l2_std_id std; | 186 | v4l2_std_id std; |
183 | 187 | ||
@@ -195,8 +199,8 @@ struct tuner { | |||
195 | unsigned int sgIF; | 199 | unsigned int sgIF; |
196 | 200 | ||
197 | /* function ptrs */ | 201 | /* function ptrs */ |
198 | void (*tv_freq)(struct i2c_client *c, unsigned int freq); | 202 | void (*set_tv_freq)(struct i2c_client *c, unsigned int freq); |
199 | void (*radio_freq)(struct i2c_client *c, unsigned int freq); | 203 | void (*set_radio_freq)(struct i2c_client *c, unsigned int freq); |
200 | int (*has_signal)(struct i2c_client *c); | 204 | int (*has_signal)(struct i2c_client *c); |
201 | int (*is_stereo)(struct i2c_client *c); | 205 | int (*is_stereo)(struct i2c_client *c); |
202 | void (*standby)(struct i2c_client *c); | 206 | void (*standby)(struct i2c_client *c); |
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h index c74052abb189..d4030a7e16e0 100644 --- a/include/media/v4l2-common.h +++ b/include/media/v4l2-common.h | |||
@@ -120,6 +120,13 @@ enum v4l2_chip_ident { | |||
120 | /* select from TV,radio,extern,MUTE */ | 120 | /* select from TV,radio,extern,MUTE */ |
121 | #define AUDC_SET_INPUT _IOW('d',89,int) | 121 | #define AUDC_SET_INPUT _IOW('d',89,int) |
122 | 122 | ||
123 | /* msp3400 ioctl: will be removed in the near future */ | ||
124 | struct msp_matrix { | ||
125 | int input; | ||
126 | int output; | ||
127 | }; | ||
128 | #define MSP_SET_MATRIX _IOW('m',17,struct msp_matrix) | ||
129 | |||
123 | /* tuner ioctls */ | 130 | /* tuner ioctls */ |
124 | /* Sets tuner type and its I2C addr */ | 131 | /* Sets tuner type and its I2C addr */ |
125 | #define TUNER_SET_TYPE_ADDR _IOW('d',90,int) | 132 | #define TUNER_SET_TYPE_ADDR _IOW('d',90,int) |
diff --git a/include/net/genetlink.h b/include/net/genetlink.h index c5b96b2b8155..805de50df00d 100644 --- a/include/net/genetlink.h +++ b/include/net/genetlink.h | |||
@@ -22,7 +22,6 @@ struct genl_family | |||
22 | char name[GENL_NAMSIZ]; | 22 | char name[GENL_NAMSIZ]; |
23 | unsigned int version; | 23 | unsigned int version; |
24 | unsigned int maxattr; | 24 | unsigned int maxattr; |
25 | struct module * owner; | ||
26 | struct nlattr ** attrbuf; /* private */ | 25 | struct nlattr ** attrbuf; /* private */ |
27 | struct list_head ops_list; /* private */ | 26 | struct list_head ops_list; /* private */ |
28 | struct list_head family_list; /* private */ | 27 | struct list_head family_list; /* private */ |
diff --git a/include/net/ieee80211.h b/include/net/ieee80211.h index cde2f4f4f501..df05f468fa5c 100644 --- a/include/net/ieee80211.h +++ b/include/net/ieee80211.h | |||
@@ -363,8 +363,9 @@ enum ieee80211_reasoncode { | |||
363 | #define IEEE80211_OFDM_SHIFT_MASK_A 4 | 363 | #define IEEE80211_OFDM_SHIFT_MASK_A 4 |
364 | 364 | ||
365 | /* NOTE: This data is for statistical purposes; not all hardware provides this | 365 | /* NOTE: This data is for statistical purposes; not all hardware provides this |
366 | * information for frames received. Not setting these will not cause | 366 | * information for frames received. |
367 | * any adverse affects. */ | 367 | * For ieee80211_rx_mgt, you need to set at least the 'len' parameter. |
368 | */ | ||
368 | struct ieee80211_rx_stats { | 369 | struct ieee80211_rx_stats { |
369 | u32 mac_time; | 370 | u32 mac_time; |
370 | s8 rssi; | 371 | s8 rssi; |
@@ -1088,6 +1089,7 @@ extern int ieee80211_tx_frame(struct ieee80211_device *ieee, | |||
1088 | /* ieee80211_rx.c */ | 1089 | /* ieee80211_rx.c */ |
1089 | extern int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, | 1090 | extern int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, |
1090 | struct ieee80211_rx_stats *rx_stats); | 1091 | struct ieee80211_rx_stats *rx_stats); |
1092 | /* make sure to set stats->len */ | ||
1091 | extern void ieee80211_rx_mgt(struct ieee80211_device *ieee, | 1093 | extern void ieee80211_rx_mgt(struct ieee80211_device *ieee, |
1092 | struct ieee80211_hdr_4addr *header, | 1094 | struct ieee80211_hdr_4addr *header, |
1093 | struct ieee80211_rx_stats *stats); | 1095 | struct ieee80211_rx_stats *stats); |
diff --git a/include/net/netfilter/ipv4/nf_conntrack_ipv4.h b/include/net/netfilter/ipv4/nf_conntrack_ipv4.h index 25b081a730e6..91684436af8e 100644 --- a/include/net/netfilter/ipv4/nf_conntrack_ipv4.h +++ b/include/net/netfilter/ipv4/nf_conntrack_ipv4.h | |||
@@ -37,7 +37,4 @@ struct nf_conntrack_ipv4 { | |||
37 | struct sk_buff * | 37 | struct sk_buff * |
38 | nf_ct_ipv4_ct_gather_frags(struct sk_buff *skb); | 38 | nf_ct_ipv4_ct_gather_frags(struct sk_buff *skb); |
39 | 39 | ||
40 | /* call to create an explicit dependency on nf_conntrack_l3proto_ipv4. */ | ||
41 | extern void need_ip_conntrack(void); | ||
42 | |||
43 | #endif /*_NF_CONNTRACK_IPV4_H*/ | 40 | #endif /*_NF_CONNTRACK_IPV4_H*/ |
diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h index 64b82b74a650..6d075ca16e6e 100644 --- a/include/net/netfilter/nf_conntrack.h +++ b/include/net/netfilter/nf_conntrack.h | |||
@@ -221,9 +221,6 @@ extern void nf_ct_helper_put(struct nf_conntrack_helper *helper); | |||
221 | extern struct nf_conntrack_helper * | 221 | extern struct nf_conntrack_helper * |
222 | __nf_conntrack_helper_find_byname(const char *name); | 222 | __nf_conntrack_helper_find_byname(const char *name); |
223 | 223 | ||
224 | /* call to create an explicit dependency on nf_conntrack. */ | ||
225 | extern void need_nf_conntrack(void); | ||
226 | |||
227 | extern int nf_ct_invert_tuplepr(struct nf_conntrack_tuple *inverse, | 224 | extern int nf_ct_invert_tuplepr(struct nf_conntrack_tuple *inverse, |
228 | const struct nf_conntrack_tuple *orig); | 225 | const struct nf_conntrack_tuple *orig); |
229 | 226 | ||
diff --git a/include/net/netfilter/nf_conntrack_tuple.h b/include/net/netfilter/nf_conntrack_tuple.h index 14ce790e5c65..530ef1f75283 100644 --- a/include/net/netfilter/nf_conntrack_tuple.h +++ b/include/net/netfilter/nf_conntrack_tuple.h | |||
@@ -111,7 +111,7 @@ struct nf_conntrack_tuple | |||
111 | #ifdef __KERNEL__ | 111 | #ifdef __KERNEL__ |
112 | 112 | ||
113 | #define NF_CT_DUMP_TUPLE(tp) \ | 113 | #define NF_CT_DUMP_TUPLE(tp) \ |
114 | DEBUGP("tuple %p: %u %u %04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x %hu -> %04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x %hu\n", \ | 114 | DEBUGP("tuple %p: %u %u " NIP6_FMT " %hu -> " NIP6_FMT " %hu\n", \ |
115 | (tp), (tp)->src.l3num, (tp)->dst.protonum, \ | 115 | (tp), (tp)->src.l3num, (tp)->dst.protonum, \ |
116 | NIP6(*(struct in6_addr *)(tp)->src.u3.all), ntohs((tp)->src.u.all), \ | 116 | NIP6(*(struct in6_addr *)(tp)->src.u3.all), ntohs((tp)->src.u.all), \ |
117 | NIP6(*(struct in6_addr *)(tp)->dst.u3.all), ntohs((tp)->dst.u.all)) | 117 | NIP6(*(struct in6_addr *)(tp)->dst.u3.all), ntohs((tp)->dst.u.all)) |
diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h index 8f241216f46b..a553f39f6aee 100644 --- a/include/net/sctp/sctp.h +++ b/include/net/sctp/sctp.h | |||
@@ -225,13 +225,13 @@ extern int sctp_debug_flag; | |||
225 | if (sctp_debug_flag) { \ | 225 | if (sctp_debug_flag) { \ |
226 | if (saddr->sa.sa_family == AF_INET6) { \ | 226 | if (saddr->sa.sa_family == AF_INET6) { \ |
227 | printk(KERN_DEBUG \ | 227 | printk(KERN_DEBUG \ |
228 | lead "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x" trail, \ | 228 | lead NIP6_FMT trail, \ |
229 | leadparm, \ | 229 | leadparm, \ |
230 | NIP6(saddr->v6.sin6_addr), \ | 230 | NIP6(saddr->v6.sin6_addr), \ |
231 | otherparms); \ | 231 | otherparms); \ |
232 | } else { \ | 232 | } else { \ |
233 | printk(KERN_DEBUG \ | 233 | printk(KERN_DEBUG \ |
234 | lead "%u.%u.%u.%u" trail, \ | 234 | lead NIPQUAD_FMT trail, \ |
235 | leadparm, \ | 235 | leadparm, \ |
236 | NIPQUAD(saddr->v4.sin_addr.s_addr), \ | 236 | NIPQUAD(saddr->v4.sin_addr.s_addr), \ |
237 | otherparms); \ | 237 | otherparms); \ |
diff --git a/include/net/tipc/tipc.h b/include/net/tipc/tipc.h new file mode 100644 index 000000000000..9566608c88cf --- /dev/null +++ b/include/net/tipc/tipc.h | |||
@@ -0,0 +1,257 @@ | |||
1 | /* | ||
2 | * include/net/tipc/tipc.h: Main include file for TIPC users | ||
3 | * | ||
4 | * Copyright (c) 2003-2006, Ericsson AB | ||
5 | * Copyright (c) 2005, Wind River Systems | ||
6 | * All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions are met: | ||
10 | * | ||
11 | * 1. Redistributions of source code must retain the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer. | ||
13 | * 2. Redistributions in binary form must reproduce the above copyright | ||
14 | * notice, this list of conditions and the following disclaimer in the | ||
15 | * documentation and/or other materials provided with the distribution. | ||
16 | * 3. Neither the names of the copyright holders nor the names of its | ||
17 | * contributors may be used to endorse or promote products derived from | ||
18 | * this software without specific prior written permission. | ||
19 | * | ||
20 | * Alternatively, this software may be distributed under the terms of the | ||
21 | * GNU General Public License ("GPL") version 2 as published by the Free | ||
22 | * Software Foundation. | ||
23 | * | ||
24 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
25 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
27 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | ||
28 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
29 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
30 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
31 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
32 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
33 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
34 | * POSSIBILITY OF SUCH DAMAGE. | ||
35 | */ | ||
36 | |||
37 | #ifndef _NET_TIPC_H_ | ||
38 | #define _NET_TIPC_H_ | ||
39 | |||
40 | #ifdef __KERNEL__ | ||
41 | |||
42 | #include <linux/tipc.h> | ||
43 | #include <linux/skbuff.h> | ||
44 | |||
45 | /* | ||
46 | * Native API | ||
47 | */ | ||
48 | |||
49 | /* | ||
50 | * TIPC operating mode routines | ||
51 | */ | ||
52 | |||
53 | u32 tipc_get_addr(void); | ||
54 | |||
55 | #define TIPC_NOT_RUNNING 0 | ||
56 | #define TIPC_NODE_MODE 1 | ||
57 | #define TIPC_NET_MODE 2 | ||
58 | |||
59 | typedef void (*tipc_mode_event)(void *usr_handle, int mode, u32 addr); | ||
60 | |||
61 | int tipc_attach(unsigned int *userref, tipc_mode_event, void *usr_handle); | ||
62 | |||
63 | void tipc_detach(unsigned int userref); | ||
64 | |||
65 | int tipc_get_mode(void); | ||
66 | |||
67 | /* | ||
68 | * TIPC port manipulation routines | ||
69 | */ | ||
70 | |||
71 | typedef void (*tipc_msg_err_event) (void *usr_handle, | ||
72 | u32 portref, | ||
73 | struct sk_buff **buf, | ||
74 | unsigned char const *data, | ||
75 | unsigned int size, | ||
76 | int reason, | ||
77 | struct tipc_portid const *attmpt_destid); | ||
78 | |||
79 | typedef void (*tipc_named_msg_err_event) (void *usr_handle, | ||
80 | u32 portref, | ||
81 | struct sk_buff **buf, | ||
82 | unsigned char const *data, | ||
83 | unsigned int size, | ||
84 | int reason, | ||
85 | struct tipc_name_seq const *attmpt_dest); | ||
86 | |||
87 | typedef void (*tipc_conn_shutdown_event) (void *usr_handle, | ||
88 | u32 portref, | ||
89 | struct sk_buff **buf, | ||
90 | unsigned char const *data, | ||
91 | unsigned int size, | ||
92 | int reason); | ||
93 | |||
94 | typedef void (*tipc_msg_event) (void *usr_handle, | ||
95 | u32 portref, | ||
96 | struct sk_buff **buf, | ||
97 | unsigned char const *data, | ||
98 | unsigned int size, | ||
99 | unsigned int importance, | ||
100 | struct tipc_portid const *origin); | ||
101 | |||
102 | typedef void (*tipc_named_msg_event) (void *usr_handle, | ||
103 | u32 portref, | ||
104 | struct sk_buff **buf, | ||
105 | unsigned char const *data, | ||
106 | unsigned int size, | ||
107 | unsigned int importance, | ||
108 | struct tipc_portid const *orig, | ||
109 | struct tipc_name_seq const *dest); | ||
110 | |||
111 | typedef void (*tipc_conn_msg_event) (void *usr_handle, | ||
112 | u32 portref, | ||
113 | struct sk_buff **buf, | ||
114 | unsigned char const *data, | ||
115 | unsigned int size); | ||
116 | |||
117 | typedef void (*tipc_continue_event) (void *usr_handle, | ||
118 | u32 portref); | ||
119 | |||
120 | int tipc_createport(unsigned int tipc_user, | ||
121 | void *usr_handle, | ||
122 | unsigned int importance, | ||
123 | tipc_msg_err_event error_cb, | ||
124 | tipc_named_msg_err_event named_error_cb, | ||
125 | tipc_conn_shutdown_event conn_error_cb, | ||
126 | tipc_msg_event message_cb, | ||
127 | tipc_named_msg_event named_message_cb, | ||
128 | tipc_conn_msg_event conn_message_cb, | ||
129 | tipc_continue_event continue_event_cb,/* May be zero */ | ||
130 | u32 *portref); | ||
131 | |||
132 | int tipc_deleteport(u32 portref); | ||
133 | |||
134 | int tipc_ownidentity(u32 portref, struct tipc_portid *port); | ||
135 | |||
136 | int tipc_portimportance(u32 portref, unsigned int *importance); | ||
137 | int tipc_set_portimportance(u32 portref, unsigned int importance); | ||
138 | |||
139 | int tipc_portunreliable(u32 portref, unsigned int *isunreliable); | ||
140 | int tipc_set_portunreliable(u32 portref, unsigned int isunreliable); | ||
141 | |||
142 | int tipc_portunreturnable(u32 portref, unsigned int *isunreturnable); | ||
143 | int tipc_set_portunreturnable(u32 portref, unsigned int isunreturnable); | ||
144 | |||
145 | int tipc_publish(u32 portref, unsigned int scope, | ||
146 | struct tipc_name_seq const *name_seq); | ||
147 | int tipc_withdraw(u32 portref, unsigned int scope, | ||
148 | struct tipc_name_seq const *name_seq); /* 0: all */ | ||
149 | |||
150 | int tipc_connect2port(u32 portref, struct tipc_portid const *port); | ||
151 | |||
152 | int tipc_disconnect(u32 portref); | ||
153 | |||
154 | int tipc_shutdown(u32 ref); /* Sends SHUTDOWN msg */ | ||
155 | |||
156 | int tipc_isconnected(u32 portref, int *isconnected); | ||
157 | |||
158 | int tipc_peer(u32 portref, struct tipc_portid *peer); | ||
159 | |||
160 | int tipc_ref_valid(u32 portref); | ||
161 | |||
162 | /* | ||
163 | * TIPC messaging routines | ||
164 | */ | ||
165 | |||
166 | #define TIPC_PORT_IMPORTANCE 100 /* send using current port setting */ | ||
167 | |||
168 | |||
169 | int tipc_send(u32 portref, | ||
170 | unsigned int num_sect, | ||
171 | struct iovec const *msg_sect); | ||
172 | |||
173 | int tipc_send_buf(u32 portref, | ||
174 | struct sk_buff *buf, | ||
175 | unsigned int dsz); | ||
176 | |||
177 | int tipc_send2name(u32 portref, | ||
178 | struct tipc_name const *name, | ||
179 | u32 domain, /* 0:own zone */ | ||
180 | unsigned int num_sect, | ||
181 | struct iovec const *msg_sect); | ||
182 | |||
183 | int tipc_send_buf2name(u32 portref, | ||
184 | struct tipc_name const *name, | ||
185 | u32 domain, | ||
186 | struct sk_buff *buf, | ||
187 | unsigned int dsz); | ||
188 | |||
189 | int tipc_forward2name(u32 portref, | ||
190 | struct tipc_name const *name, | ||
191 | u32 domain, /*0: own zone */ | ||
192 | unsigned int section_count, | ||
193 | struct iovec const *msg_sect, | ||
194 | struct tipc_portid const *origin, | ||
195 | unsigned int importance); | ||
196 | |||
197 | int tipc_forward_buf2name(u32 portref, | ||
198 | struct tipc_name const *name, | ||
199 | u32 domain, | ||
200 | struct sk_buff *buf, | ||
201 | unsigned int dsz, | ||
202 | struct tipc_portid const *orig, | ||
203 | unsigned int importance); | ||
204 | |||
205 | int tipc_send2port(u32 portref, | ||
206 | struct tipc_portid const *dest, | ||
207 | unsigned int num_sect, | ||
208 | struct iovec const *msg_sect); | ||
209 | |||
210 | int tipc_send_buf2port(u32 portref, | ||
211 | struct tipc_portid const *dest, | ||
212 | struct sk_buff *buf, | ||
213 | unsigned int dsz); | ||
214 | |||
215 | int tipc_forward2port(u32 portref, | ||
216 | struct tipc_portid const *dest, | ||
217 | unsigned int num_sect, | ||
218 | struct iovec const *msg_sect, | ||
219 | struct tipc_portid const *origin, | ||
220 | unsigned int importance); | ||
221 | |||
222 | int tipc_forward_buf2port(u32 portref, | ||
223 | struct tipc_portid const *dest, | ||
224 | struct sk_buff *buf, | ||
225 | unsigned int dsz, | ||
226 | struct tipc_portid const *orig, | ||
227 | unsigned int importance); | ||
228 | |||
229 | int tipc_multicast(u32 portref, | ||
230 | struct tipc_name_seq const *seq, | ||
231 | u32 domain, /* 0:own zone */ | ||
232 | unsigned int section_count, | ||
233 | struct iovec const *msg); | ||
234 | |||
235 | #if 0 | ||
236 | int tipc_multicast_buf(u32 portref, | ||
237 | struct tipc_name_seq const *seq, | ||
238 | u32 domain, /* 0:own zone */ | ||
239 | void *buf, | ||
240 | unsigned int size); | ||
241 | #endif | ||
242 | |||
243 | /* | ||
244 | * TIPC subscription routines | ||
245 | */ | ||
246 | |||
247 | int tipc_ispublished(struct tipc_name const *name); | ||
248 | |||
249 | /* | ||
250 | * Get number of available nodes within specified domain (excluding own node) | ||
251 | */ | ||
252 | |||
253 | unsigned int tipc_available_nodes(const u32 domain); | ||
254 | |||
255 | #endif | ||
256 | |||
257 | #endif | ||
diff --git a/include/net/tipc/tipc_bearer.h b/include/net/tipc/tipc_bearer.h new file mode 100644 index 000000000000..098607cd4b78 --- /dev/null +++ b/include/net/tipc/tipc_bearer.h | |||
@@ -0,0 +1,121 @@ | |||
1 | /* | ||
2 | * include/net/tipc/tipc_bearer.h: Include file for privileged access to TIPC bearers | ||
3 | * | ||
4 | * Copyright (c) 2003-2006, Ericsson AB | ||
5 | * Copyright (c) 2005, Wind River Systems | ||
6 | * All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions are met: | ||
10 | * | ||
11 | * 1. Redistributions of source code must retain the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer. | ||
13 | * 2. Redistributions in binary form must reproduce the above copyright | ||
14 | * notice, this list of conditions and the following disclaimer in the | ||
15 | * documentation and/or other materials provided with the distribution. | ||
16 | * 3. Neither the names of the copyright holders nor the names of its | ||
17 | * contributors may be used to endorse or promote products derived from | ||
18 | * this software without specific prior written permission. | ||
19 | * | ||
20 | * Alternatively, this software may be distributed under the terms of the | ||
21 | * GNU General Public License ("GPL") version 2 as published by the Free | ||
22 | * Software Foundation. | ||
23 | * | ||
24 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
25 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
27 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | ||
28 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
29 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
30 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
31 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
32 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
33 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
34 | * POSSIBILITY OF SUCH DAMAGE. | ||
35 | */ | ||
36 | |||
37 | #ifndef _NET_TIPC_BEARER_H_ | ||
38 | #define _NET_TIPC_BEARER_H_ | ||
39 | |||
40 | #ifdef __KERNEL__ | ||
41 | |||
42 | #include <linux/tipc_config.h> | ||
43 | #include <linux/skbuff.h> | ||
44 | #include <linux/spinlock.h> | ||
45 | |||
46 | /* | ||
47 | * Identifiers of supported TIPC media types | ||
48 | */ | ||
49 | |||
50 | #define TIPC_MEDIA_TYPE_ETH 1 | ||
51 | |||
52 | struct tipc_media_addr { | ||
53 | __u32 type; | ||
54 | union { | ||
55 | __u8 eth_addr[6]; /* Ethernet bearer */ | ||
56 | #if 0 | ||
57 | /* Prototypes for other possible bearer types */ | ||
58 | |||
59 | struct { | ||
60 | __u16 sin_family; | ||
61 | __u16 sin_port; | ||
62 | struct { | ||
63 | __u32 s_addr; | ||
64 | } sin_addr; | ||
65 | char pad[4]; | ||
66 | } addr_in; /* IP-based bearer */ | ||
67 | __u16 sock_descr; /* generic socket bearer */ | ||
68 | #endif | ||
69 | } dev_addr; | ||
70 | }; | ||
71 | |||
72 | /** | ||
73 | * struct tipc_bearer - TIPC bearer info available to privileged users | ||
74 | * @usr_handle: pointer to additional user-defined information about bearer | ||
75 | * @mtu: max packet size bearer can support | ||
76 | * @blocked: non-zero if bearer is blocked | ||
77 | * @lock: spinlock for controlling access to bearer | ||
78 | * @addr: media-specific address associated with bearer | ||
79 | * @name: bearer name (format = media:interface) | ||
80 | * | ||
81 | * Note: TIPC initializes "name" and "lock" fields; user is responsible for | ||
82 | * initialization all other fields when a bearer is enabled. | ||
83 | */ | ||
84 | |||
85 | struct tipc_bearer { | ||
86 | void *usr_handle; | ||
87 | u32 mtu; | ||
88 | int blocked; | ||
89 | spinlock_t lock; | ||
90 | struct tipc_media_addr addr; | ||
91 | char name[TIPC_MAX_BEARER_NAME]; | ||
92 | }; | ||
93 | |||
94 | |||
95 | int tipc_register_media(u32 media_type, | ||
96 | char *media_name, | ||
97 | int (*enable)(struct tipc_bearer *), | ||
98 | void (*disable)(struct tipc_bearer *), | ||
99 | int (*send_msg)(struct sk_buff *, | ||
100 | struct tipc_bearer *, | ||
101 | struct tipc_media_addr *), | ||
102 | char *(*addr2str)(struct tipc_media_addr *a, | ||
103 | char *str_buf, | ||
104 | int str_size), | ||
105 | struct tipc_media_addr *bcast_addr, | ||
106 | const u32 bearer_priority, | ||
107 | const u32 link_tolerance, /* [ms] */ | ||
108 | const u32 send_window_limit); | ||
109 | |||
110 | void tipc_recv_msg(struct sk_buff *buf, struct tipc_bearer *tb_ptr); | ||
111 | |||
112 | int tipc_block_bearer(const char *name); | ||
113 | void tipc_continue(struct tipc_bearer *tb_ptr); | ||
114 | |||
115 | int tipc_enable_bearer(const char *bearer_name, u32 bcast_scope, u32 priority); | ||
116 | int tipc_disable_bearer(const char *name); | ||
117 | |||
118 | |||
119 | #endif | ||
120 | |||
121 | #endif | ||
diff --git a/include/net/tipc/tipc_msg.h b/include/net/tipc/tipc_msg.h new file mode 100644 index 000000000000..4d096eebc93f --- /dev/null +++ b/include/net/tipc/tipc_msg.h | |||
@@ -0,0 +1,223 @@ | |||
1 | /* | ||
2 | * include/net/tipc/tipc_msg.h: Include file for privileged access to TIPC message headers | ||
3 | * | ||
4 | * Copyright (c) 2003-2006, Ericsson AB | ||
5 | * Copyright (c) 2005, Wind River Systems | ||
6 | * All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions are met: | ||
10 | * | ||
11 | * 1. Redistributions of source code must retain the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer. | ||
13 | * 2. Redistributions in binary form must reproduce the above copyright | ||
14 | * notice, this list of conditions and the following disclaimer in the | ||
15 | * documentation and/or other materials provided with the distribution. | ||
16 | * 3. Neither the names of the copyright holders nor the names of its | ||
17 | * contributors may be used to endorse or promote products derived from | ||
18 | * this software without specific prior written permission. | ||
19 | * | ||
20 | * Alternatively, this software may be distributed under the terms of the | ||
21 | * GNU General Public License ("GPL") version 2 as published by the Free | ||
22 | * Software Foundation. | ||
23 | * | ||
24 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
25 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
27 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | ||
28 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
29 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
30 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
31 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
32 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
33 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
34 | * POSSIBILITY OF SUCH DAMAGE. | ||
35 | */ | ||
36 | |||
37 | #ifndef _NET_TIPC_MSG_H_ | ||
38 | #define _NET_TIPC_MSG_H_ | ||
39 | |||
40 | #ifdef __KERNEL__ | ||
41 | |||
42 | struct tipc_msg { | ||
43 | u32 hdr[15]; | ||
44 | }; | ||
45 | |||
46 | |||
47 | /* | ||
48 | TIPC user data message header format, version 2: | ||
49 | |||
50 | |||
51 | 1 0 9 8 7 6 5 4|3 2 1 0 9 8 7 6|5 4 3 2 1 0 9 8|7 6 5 4 3 2 1 0 | ||
52 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
53 | w0:|vers | user |hdr sz |n|d|s|-| message size | | ||
54 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
55 | w1:|mstyp| error |rer cnt|lsc|opt p| broadcast ack no | | ||
56 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
57 | w2:| link level ack no | broadcast/link level seq no | | ||
58 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
59 | w3:| previous node | | ||
60 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
61 | w4:| originating port | | ||
62 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
63 | w5:| destination port | | ||
64 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
65 | w6:| originating node | | ||
66 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
67 | w7:| destination node | | ||
68 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
69 | w8:| name type / transport sequence number | | ||
70 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
71 | w9:| name instance/multicast lower bound | | ||
72 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
73 | wA:| multicast upper bound | | ||
74 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
75 | / / | ||
76 | \ options \ | ||
77 | / / | ||
78 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
79 | |||
80 | */ | ||
81 | |||
82 | #define TIPC_CONN_MSG 0 | ||
83 | #define TIPC_MCAST_MSG 1 | ||
84 | #define TIPC_NAMED_MSG 2 | ||
85 | #define TIPC_DIRECT_MSG 3 | ||
86 | |||
87 | |||
88 | static inline u32 msg_word(struct tipc_msg *m, u32 pos) | ||
89 | { | ||
90 | return ntohl(m->hdr[pos]); | ||
91 | } | ||
92 | |||
93 | static inline u32 msg_bits(struct tipc_msg *m, u32 w, u32 pos, u32 mask) | ||
94 | { | ||
95 | return (msg_word(m, w) >> pos) & mask; | ||
96 | } | ||
97 | |||
98 | static inline u32 msg_importance(struct tipc_msg *m) | ||
99 | { | ||
100 | return msg_bits(m, 0, 25, 0xf); | ||
101 | } | ||
102 | |||
103 | static inline u32 msg_hdr_sz(struct tipc_msg *m) | ||
104 | { | ||
105 | return msg_bits(m, 0, 21, 0xf) << 2; | ||
106 | } | ||
107 | |||
108 | static inline int msg_short(struct tipc_msg *m) | ||
109 | { | ||
110 | return (msg_hdr_sz(m) == 24); | ||
111 | } | ||
112 | |||
113 | static inline u32 msg_size(struct tipc_msg *m) | ||
114 | { | ||
115 | return msg_bits(m, 0, 0, 0x1ffff); | ||
116 | } | ||
117 | |||
118 | static inline u32 msg_data_sz(struct tipc_msg *m) | ||
119 | { | ||
120 | return (msg_size(m) - msg_hdr_sz(m)); | ||
121 | } | ||
122 | |||
123 | static inline unchar *msg_data(struct tipc_msg *m) | ||
124 | { | ||
125 | return ((unchar *)m) + msg_hdr_sz(m); | ||
126 | } | ||
127 | |||
128 | static inline u32 msg_type(struct tipc_msg *m) | ||
129 | { | ||
130 | return msg_bits(m, 1, 29, 0x7); | ||
131 | } | ||
132 | |||
133 | static inline u32 msg_direct(struct tipc_msg *m) | ||
134 | { | ||
135 | return (msg_type(m) == TIPC_DIRECT_MSG); | ||
136 | } | ||
137 | |||
138 | static inline u32 msg_named(struct tipc_msg *m) | ||
139 | { | ||
140 | return (msg_type(m) == TIPC_NAMED_MSG); | ||
141 | } | ||
142 | |||
143 | static inline u32 msg_mcast(struct tipc_msg *m) | ||
144 | { | ||
145 | return (msg_type(m) == TIPC_MCAST_MSG); | ||
146 | } | ||
147 | |||
148 | static inline u32 msg_connected(struct tipc_msg *m) | ||
149 | { | ||
150 | return (msg_type(m) == TIPC_CONN_MSG); | ||
151 | } | ||
152 | |||
153 | static inline u32 msg_errcode(struct tipc_msg *m) | ||
154 | { | ||
155 | return msg_bits(m, 1, 25, 0xf); | ||
156 | } | ||
157 | |||
158 | static inline u32 msg_prevnode(struct tipc_msg *m) | ||
159 | { | ||
160 | return msg_word(m, 3); | ||
161 | } | ||
162 | |||
163 | static inline u32 msg_origport(struct tipc_msg *m) | ||
164 | { | ||
165 | return msg_word(m, 4); | ||
166 | } | ||
167 | |||
168 | static inline u32 msg_destport(struct tipc_msg *m) | ||
169 | { | ||
170 | return msg_word(m, 5); | ||
171 | } | ||
172 | |||
173 | static inline u32 msg_mc_netid(struct tipc_msg *m) | ||
174 | { | ||
175 | return msg_word(m, 5); | ||
176 | } | ||
177 | |||
178 | static inline u32 msg_orignode(struct tipc_msg *m) | ||
179 | { | ||
180 | if (likely(msg_short(m))) | ||
181 | return msg_prevnode(m); | ||
182 | return msg_word(m, 6); | ||
183 | } | ||
184 | |||
185 | static inline u32 msg_destnode(struct tipc_msg *m) | ||
186 | { | ||
187 | return msg_word(m, 7); | ||
188 | } | ||
189 | |||
190 | static inline u32 msg_nametype(struct tipc_msg *m) | ||
191 | { | ||
192 | return msg_word(m, 8); | ||
193 | } | ||
194 | |||
195 | static inline u32 msg_nameinst(struct tipc_msg *m) | ||
196 | { | ||
197 | return msg_word(m, 9); | ||
198 | } | ||
199 | |||
200 | static inline u32 msg_namelower(struct tipc_msg *m) | ||
201 | { | ||
202 | return msg_nameinst(m); | ||
203 | } | ||
204 | |||
205 | static inline u32 msg_nameupper(struct tipc_msg *m) | ||
206 | { | ||
207 | return msg_word(m, 10); | ||
208 | } | ||
209 | |||
210 | static inline char *msg_options(struct tipc_msg *m, u32 *len) | ||
211 | { | ||
212 | u32 pos = msg_bits(m, 1, 16, 0x7); | ||
213 | |||
214 | if (!pos) | ||
215 | return 0; | ||
216 | pos = (pos * 4) + 28; | ||
217 | *len = msg_hdr_sz(m) - pos; | ||
218 | return (char *)&m->hdr[pos/4]; | ||
219 | } | ||
220 | |||
221 | #endif | ||
222 | |||
223 | #endif | ||
diff --git a/include/net/tipc/tipc_port.h b/include/net/tipc/tipc_port.h new file mode 100644 index 000000000000..333bba6dc522 --- /dev/null +++ b/include/net/tipc/tipc_port.h | |||
@@ -0,0 +1,108 @@ | |||
1 | /* | ||
2 | * include/net/tipc/tipc_port.h: Include file for privileged access to TIPC ports | ||
3 | * | ||
4 | * Copyright (c) 1994-2006, Ericsson AB | ||
5 | * Copyright (c) 2005, Wind River Systems | ||
6 | * All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions are met: | ||
10 | * | ||
11 | * 1. Redistributions of source code must retain the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer. | ||
13 | * 2. Redistributions in binary form must reproduce the above copyright | ||
14 | * notice, this list of conditions and the following disclaimer in the | ||
15 | * documentation and/or other materials provided with the distribution. | ||
16 | * 3. Neither the names of the copyright holders nor the names of its | ||
17 | * contributors may be used to endorse or promote products derived from | ||
18 | * this software without specific prior written permission. | ||
19 | * | ||
20 | * Alternatively, this software may be distributed under the terms of the | ||
21 | * GNU General Public License ("GPL") version 2 as published by the Free | ||
22 | * Software Foundation. | ||
23 | * | ||
24 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
25 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
27 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | ||
28 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
29 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
30 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
31 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
32 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
33 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
34 | * POSSIBILITY OF SUCH DAMAGE. | ||
35 | */ | ||
36 | |||
37 | #ifndef _NET_TIPC_PORT_H_ | ||
38 | #define _NET_TIPC_PORT_H_ | ||
39 | |||
40 | #ifdef __KERNEL__ | ||
41 | |||
42 | #include <linux/tipc.h> | ||
43 | #include <linux/skbuff.h> | ||
44 | #include <net/tipc/tipc_msg.h> | ||
45 | |||
46 | #define TIPC_FLOW_CONTROL_WIN 512 | ||
47 | |||
48 | /** | ||
49 | * struct tipc_port - native TIPC port info available to privileged users | ||
50 | * @usr_handle: pointer to additional user-defined information about port | ||
51 | * @lock: pointer to spinlock for controlling access to port | ||
52 | * @connected: non-zero if port is currently connected to a peer port | ||
53 | * @conn_type: TIPC type used when connection was established | ||
54 | * @conn_instance: TIPC instance used when connection was established | ||
55 | * @conn_unacked: number of unacknowledged messages received from peer port | ||
56 | * @published: non-zero if port has one or more associated names | ||
57 | * @congested: non-zero if cannot send because of link or port congestion | ||
58 | * @ref: unique reference to port in TIPC object registry | ||
59 | * @phdr: preformatted message header used when sending messages | ||
60 | */ | ||
61 | |||
62 | struct tipc_port { | ||
63 | void *usr_handle; | ||
64 | spinlock_t *lock; | ||
65 | int connected; | ||
66 | u32 conn_type; | ||
67 | u32 conn_instance; | ||
68 | u32 conn_unacked; | ||
69 | int published; | ||
70 | u32 congested; | ||
71 | u32 ref; | ||
72 | struct tipc_msg phdr; | ||
73 | }; | ||
74 | |||
75 | |||
76 | /** | ||
77 | * tipc_createport_raw - create a native TIPC port and return it's reference | ||
78 | * | ||
79 | * Note: 'dispatcher' and 'wakeup' deliver a locked port. | ||
80 | */ | ||
81 | |||
82 | u32 tipc_createport_raw(void *usr_handle, | ||
83 | u32 (*dispatcher)(struct tipc_port *, struct sk_buff *), | ||
84 | void (*wakeup)(struct tipc_port *), | ||
85 | const u32 importance); | ||
86 | |||
87 | /* | ||
88 | * tipc_set_msg_option(): port must be locked. | ||
89 | */ | ||
90 | int tipc_set_msg_option(struct tipc_port *tp_ptr, | ||
91 | const char *opt, | ||
92 | const u32 len); | ||
93 | |||
94 | int tipc_reject_msg(struct sk_buff *buf, u32 err); | ||
95 | |||
96 | int tipc_send_buf_fast(struct sk_buff *buf, u32 destnode); | ||
97 | |||
98 | void tipc_acknowledge(u32 port_ref,u32 ack); | ||
99 | |||
100 | struct tipc_port *tipc_get_port(const u32 ref); | ||
101 | |||
102 | void *tipc_get_handle(const u32 ref); | ||
103 | |||
104 | |||
105 | #endif | ||
106 | |||
107 | #endif | ||
108 | |||
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index a7f4c355a91f..22fc886b9695 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h | |||
@@ -88,7 +88,6 @@ enum ib_atomic_cap { | |||
88 | 88 | ||
89 | struct ib_device_attr { | 89 | struct ib_device_attr { |
90 | u64 fw_ver; | 90 | u64 fw_ver; |
91 | __be64 node_guid; | ||
92 | __be64 sys_image_guid; | 91 | __be64 sys_image_guid; |
93 | u64 max_mr_size; | 92 | u64 max_mr_size; |
94 | u64 page_size_cap; | 93 | u64 page_size_cap; |
@@ -951,6 +950,7 @@ struct ib_device { | |||
951 | u64 uverbs_cmd_mask; | 950 | u64 uverbs_cmd_mask; |
952 | int uverbs_abi_ver; | 951 | int uverbs_abi_ver; |
953 | 952 | ||
953 | __be64 node_guid; | ||
954 | u8 node_type; | 954 | u8 node_type; |
955 | u8 phys_port_cnt; | 955 | u8 phys_port_cnt; |
956 | }; | 956 | }; |
diff --git a/include/scsi/iscsi_if.h b/include/scsi/iscsi_if.h index be1bc792ab18..3e5cb5ab2d34 100644 --- a/include/scsi/iscsi_if.h +++ b/include/scsi/iscsi_if.h | |||
@@ -168,6 +168,12 @@ typedef uint64_t iscsi_connh_t; /* iSCSI Data-Path connection handle */ | |||
168 | 168 | ||
169 | #define iscsi_ptr(_handle) ((void*)(unsigned long)_handle) | 169 | #define iscsi_ptr(_handle) ((void*)(unsigned long)_handle) |
170 | #define iscsi_handle(_ptr) ((uint64_t)(unsigned long)_ptr) | 170 | #define iscsi_handle(_ptr) ((uint64_t)(unsigned long)_ptr) |
171 | #define hostdata_session(_hostdata) (iscsi_ptr(*(unsigned long *)_hostdata)) | ||
172 | |||
173 | /** | ||
174 | * iscsi_hostdata - get LLD hostdata from scsi_host | ||
175 | * @_hostdata: pointer to scsi host's hostdata | ||
176 | **/ | ||
171 | #define iscsi_hostdata(_hostdata) ((void*)_hostdata + sizeof(unsigned long)) | 177 | #define iscsi_hostdata(_hostdata) ((void*)_hostdata + sizeof(unsigned long)) |
172 | 178 | ||
173 | /* | 179 | /* |
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h index 6cb1e2788d8b..c60b8ff2f5e4 100644 --- a/include/scsi/scsi.h +++ b/include/scsi/scsi.h | |||
@@ -32,6 +32,12 @@ extern const unsigned char scsi_command_size[8]; | |||
32 | extern const char *const scsi_device_types[MAX_SCSI_DEVICE_CODE]; | 32 | extern const char *const scsi_device_types[MAX_SCSI_DEVICE_CODE]; |
33 | 33 | ||
34 | /* | 34 | /* |
35 | * Special value for scanning to specify scanning or rescanning of all | ||
36 | * possible channels, (target) ids, or luns on a given shost. | ||
37 | */ | ||
38 | #define SCAN_WILD_CARD ~0 | ||
39 | |||
40 | /* | ||
35 | * SCSI opcodes | 41 | * SCSI opcodes |
36 | */ | 42 | */ |
37 | 43 | ||
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index 41cfc29be899..7529f4388bb4 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h | |||
@@ -151,6 +151,5 @@ extern struct scsi_cmnd *scsi_get_command(struct scsi_device *, gfp_t); | |||
151 | extern void scsi_put_command(struct scsi_cmnd *); | 151 | extern void scsi_put_command(struct scsi_cmnd *); |
152 | extern void scsi_io_completion(struct scsi_cmnd *, unsigned int, unsigned int); | 152 | extern void scsi_io_completion(struct scsi_cmnd *, unsigned int, unsigned int); |
153 | extern void scsi_finish_command(struct scsi_cmnd *cmd); | 153 | extern void scsi_finish_command(struct scsi_cmnd *cmd); |
154 | extern void scsi_setup_blk_pc_cmnd(struct scsi_cmnd *cmd); | ||
155 | 154 | ||
156 | #endif /* _SCSI_SCSI_CMND_H */ | 155 | #endif /* _SCSI_SCSI_CMND_H */ |
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index 230bc55c0bfa..467274a764d1 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h | |||
@@ -5,6 +5,7 @@ | |||
5 | #include <linux/list.h> | 5 | #include <linux/list.h> |
6 | #include <linux/types.h> | 6 | #include <linux/types.h> |
7 | #include <linux/workqueue.h> | 7 | #include <linux/workqueue.h> |
8 | #include <linux/mutex.h> | ||
8 | 9 | ||
9 | struct block_device; | 10 | struct block_device; |
10 | struct completion; | 11 | struct completion; |
@@ -469,7 +470,7 @@ struct Scsi_Host { | |||
469 | spinlock_t default_lock; | 470 | spinlock_t default_lock; |
470 | spinlock_t *host_lock; | 471 | spinlock_t *host_lock; |
471 | 472 | ||
472 | struct semaphore scan_mutex;/* serialize scanning activity */ | 473 | struct mutex scan_mutex;/* serialize scanning activity */ |
473 | 474 | ||
474 | struct list_head eh_cmd_q; | 475 | struct list_head eh_cmd_q; |
475 | struct task_struct * ehandler; /* Error recovery thread. */ | 476 | struct task_struct * ehandler; /* Error recovery thread. */ |
diff --git a/include/scsi/scsi_transport.h b/include/scsi/scsi_transport.h index f6e0bb484c63..e7b1054adf86 100644 --- a/include/scsi/scsi_transport.h +++ b/include/scsi/scsi_transport.h | |||
@@ -30,12 +30,9 @@ struct scsi_transport_template { | |||
30 | struct transport_container device_attrs; | 30 | struct transport_container device_attrs; |
31 | 31 | ||
32 | /* | 32 | /* |
33 | * If set, call target_parent prior to allocating a scsi_target, | 33 | * If set, called from sysfs and legacy procfs rescanning code. |
34 | * so we get the appropriate parent for the target. This function | ||
35 | * is required for transports like FC and iSCSI that do not put the | ||
36 | * scsi_target under scsi_host. | ||
37 | */ | 34 | */ |
38 | struct device *(*target_parent)(struct Scsi_Host *, int, uint); | 35 | int (*user_scan)(struct Scsi_Host *, uint, uint, uint); |
39 | 36 | ||
40 | /* The size of the specific transport attribute structure (a | 37 | /* The size of the specific transport attribute structure (a |
41 | * space of this size will be left at the end of the | 38 | * space of this size will be left at the end of the |
diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h index 394f14a5b7cb..cf3fec8be1e3 100644 --- a/include/scsi/scsi_transport_fc.h +++ b/include/scsi/scsi_transport_fc.h | |||
@@ -303,6 +303,7 @@ struct fc_host_attrs { | |||
303 | /* Fixed Attributes */ | 303 | /* Fixed Attributes */ |
304 | u64 node_name; | 304 | u64 node_name; |
305 | u64 port_name; | 305 | u64 port_name; |
306 | u64 permanent_port_name; | ||
306 | u32 supported_classes; | 307 | u32 supported_classes; |
307 | u8 supported_fc4s[FC_FC4_LIST_SIZE]; | 308 | u8 supported_fc4s[FC_FC4_LIST_SIZE]; |
308 | char symbolic_name[FC_SYMBOLIC_NAME_SIZE]; | 309 | char symbolic_name[FC_SYMBOLIC_NAME_SIZE]; |
@@ -338,6 +339,8 @@ struct fc_host_attrs { | |||
338 | (((struct fc_host_attrs *)(x)->shost_data)->node_name) | 339 | (((struct fc_host_attrs *)(x)->shost_data)->node_name) |
339 | #define fc_host_port_name(x) \ | 340 | #define fc_host_port_name(x) \ |
340 | (((struct fc_host_attrs *)(x)->shost_data)->port_name) | 341 | (((struct fc_host_attrs *)(x)->shost_data)->port_name) |
342 | #define fc_host_permanent_port_name(x) \ | ||
343 | (((struct fc_host_attrs *)(x)->shost_data)->permanent_port_name) | ||
341 | #define fc_host_supported_classes(x) \ | 344 | #define fc_host_supported_classes(x) \ |
342 | (((struct fc_host_attrs *)(x)->shost_data)->supported_classes) | 345 | (((struct fc_host_attrs *)(x)->shost_data)->supported_classes) |
343 | #define fc_host_supported_fc4s(x) \ | 346 | #define fc_host_supported_fc4s(x) \ |
@@ -426,6 +429,7 @@ struct fc_function_template { | |||
426 | /* host fixed attributes */ | 429 | /* host fixed attributes */ |
427 | unsigned long show_host_node_name:1; | 430 | unsigned long show_host_node_name:1; |
428 | unsigned long show_host_port_name:1; | 431 | unsigned long show_host_port_name:1; |
432 | unsigned long show_host_permanent_port_name:1; | ||
429 | unsigned long show_host_supported_classes:1; | 433 | unsigned long show_host_supported_classes:1; |
430 | unsigned long show_host_supported_fc4s:1; | 434 | unsigned long show_host_supported_fc4s:1; |
431 | unsigned long show_host_symbolic_name:1; | 435 | unsigned long show_host_symbolic_name:1; |
diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h index f25041c386ec..16602a547a63 100644 --- a/include/scsi/scsi_transport_iscsi.h +++ b/include/scsi/scsi_transport_iscsi.h | |||
@@ -23,8 +23,14 @@ | |||
23 | #ifndef SCSI_TRANSPORT_ISCSI_H | 23 | #ifndef SCSI_TRANSPORT_ISCSI_H |
24 | #define SCSI_TRANSPORT_ISCSI_H | 24 | #define SCSI_TRANSPORT_ISCSI_H |
25 | 25 | ||
26 | #include <linux/device.h> | ||
26 | #include <scsi/iscsi_if.h> | 27 | #include <scsi/iscsi_if.h> |
27 | 28 | ||
29 | struct scsi_transport_template; | ||
30 | struct Scsi_Host; | ||
31 | struct mempool_zone; | ||
32 | struct iscsi_cls_conn; | ||
33 | |||
28 | /** | 34 | /** |
29 | * struct iscsi_transport - iSCSI Transport template | 35 | * struct iscsi_transport - iSCSI Transport template |
30 | * | 36 | * |
@@ -48,23 +54,31 @@ struct iscsi_transport { | |||
48 | char *name; | 54 | char *name; |
49 | unsigned int caps; | 55 | unsigned int caps; |
50 | struct scsi_host_template *host_template; | 56 | struct scsi_host_template *host_template; |
57 | /* LLD session/scsi_host data size */ | ||
51 | int hostdata_size; | 58 | int hostdata_size; |
59 | /* LLD iscsi_host data size */ | ||
60 | int ihostdata_size; | ||
61 | /* LLD connection data size */ | ||
62 | int conndata_size; | ||
52 | int max_lun; | 63 | int max_lun; |
53 | unsigned int max_conn; | 64 | unsigned int max_conn; |
54 | unsigned int max_cmd_len; | 65 | unsigned int max_cmd_len; |
55 | iscsi_sessionh_t (*create_session) (uint32_t initial_cmdsn, | 66 | struct Scsi_Host *(*create_session) (struct scsi_transport_template *t, |
56 | struct Scsi_Host *shost); | 67 | uint32_t initial_cmdsn); |
57 | void (*destroy_session) (iscsi_sessionh_t session); | 68 | void (*destroy_session) (struct Scsi_Host *shost); |
58 | iscsi_connh_t (*create_conn) (iscsi_sessionh_t session, uint32_t cid); | 69 | struct iscsi_cls_conn *(*create_conn) (struct Scsi_Host *shost, |
70 | uint32_t cid); | ||
59 | int (*bind_conn) (iscsi_sessionh_t session, iscsi_connh_t conn, | 71 | int (*bind_conn) (iscsi_sessionh_t session, iscsi_connh_t conn, |
60 | uint32_t transport_fd, int is_leading); | 72 | uint32_t transport_fd, int is_leading); |
61 | int (*start_conn) (iscsi_connh_t conn); | 73 | int (*start_conn) (iscsi_connh_t conn); |
62 | void (*stop_conn) (iscsi_connh_t conn, int flag); | 74 | void (*stop_conn) (iscsi_connh_t conn, int flag); |
63 | void (*destroy_conn) (iscsi_connh_t conn); | 75 | void (*destroy_conn) (struct iscsi_cls_conn *conn); |
64 | int (*set_param) (iscsi_connh_t conn, enum iscsi_param param, | 76 | int (*set_param) (iscsi_connh_t conn, enum iscsi_param param, |
65 | uint32_t value); | 77 | uint32_t value); |
66 | int (*get_param) (iscsi_connh_t conn, enum iscsi_param param, | 78 | int (*get_conn_param) (void *conndata, enum iscsi_param param, |
67 | uint32_t *value); | 79 | uint32_t *value); |
80 | int (*get_session_param) (struct Scsi_Host *shost, | ||
81 | enum iscsi_param param, uint32_t *value); | ||
68 | int (*send_pdu) (iscsi_connh_t conn, struct iscsi_hdr *hdr, | 82 | int (*send_pdu) (iscsi_connh_t conn, struct iscsi_hdr *hdr, |
69 | char *data, uint32_t data_size); | 83 | char *data, uint32_t data_size); |
70 | void (*get_stats) (iscsi_connh_t conn, struct iscsi_stats *stats); | 84 | void (*get_stats) (iscsi_connh_t conn, struct iscsi_stats *stats); |
@@ -73,7 +87,7 @@ struct iscsi_transport { | |||
73 | /* | 87 | /* |
74 | * transport registration upcalls | 88 | * transport registration upcalls |
75 | */ | 89 | */ |
76 | extern int iscsi_register_transport(struct iscsi_transport *tt); | 90 | extern struct scsi_transport_template *iscsi_register_transport(struct iscsi_transport *tt); |
77 | extern int iscsi_unregister_transport(struct iscsi_transport *tt); | 91 | extern int iscsi_unregister_transport(struct iscsi_transport *tt); |
78 | 92 | ||
79 | /* | 93 | /* |
@@ -83,4 +97,49 @@ extern void iscsi_conn_error(iscsi_connh_t conn, enum iscsi_err error); | |||
83 | extern int iscsi_recv_pdu(iscsi_connh_t conn, struct iscsi_hdr *hdr, | 97 | extern int iscsi_recv_pdu(iscsi_connh_t conn, struct iscsi_hdr *hdr, |
84 | char *data, uint32_t data_size); | 98 | char *data, uint32_t data_size); |
85 | 99 | ||
100 | struct iscsi_cls_conn { | ||
101 | struct list_head conn_list; /* item in connlist */ | ||
102 | void *dd_data; /* LLD private data */ | ||
103 | struct iscsi_transport *transport; | ||
104 | iscsi_connh_t connh; | ||
105 | int active; /* must be accessed with the connlock */ | ||
106 | struct device dev; /* sysfs transport/container device */ | ||
107 | struct mempool_zone *z_error; | ||
108 | struct mempool_zone *z_pdu; | ||
109 | struct list_head freequeue; | ||
110 | }; | ||
111 | |||
112 | #define iscsi_dev_to_conn(_dev) \ | ||
113 | container_of(_dev, struct iscsi_cls_conn, dev) | ||
114 | |||
115 | struct iscsi_cls_session { | ||
116 | struct list_head list; /* item in session_list */ | ||
117 | struct iscsi_transport *transport; | ||
118 | struct device dev; /* sysfs transport/container device */ | ||
119 | }; | ||
120 | |||
121 | #define iscsi_dev_to_session(_dev) \ | ||
122 | container_of(_dev, struct iscsi_cls_session, dev) | ||
123 | |||
124 | #define iscsi_session_to_shost(_session) \ | ||
125 | dev_to_shost(_session->dev.parent) | ||
126 | |||
127 | /* | ||
128 | * session and connection functions that can be used by HW iSCSI LLDs | ||
129 | */ | ||
130 | extern struct iscsi_cls_session *iscsi_create_session(struct Scsi_Host *shost, | ||
131 | struct iscsi_transport *t); | ||
132 | extern int iscsi_destroy_session(struct iscsi_cls_session *session); | ||
133 | extern struct iscsi_cls_conn *iscsi_create_conn(struct iscsi_cls_session *sess, | ||
134 | uint32_t cid); | ||
135 | extern int iscsi_destroy_conn(struct iscsi_cls_conn *conn); | ||
136 | |||
137 | /* | ||
138 | * session functions used by software iscsi | ||
139 | */ | ||
140 | extern struct Scsi_Host * | ||
141 | iscsi_transport_create_session(struct scsi_transport_template *scsit, | ||
142 | struct iscsi_transport *transport); | ||
143 | extern int iscsi_transport_destroy_session(struct Scsi_Host *shost); | ||
144 | |||
86 | #endif | 145 | #endif |
diff --git a/include/scsi/scsi_transport_spi.h b/include/scsi/scsi_transport_spi.h index 54a89611e9c5..2b5930ba69ec 100644 --- a/include/scsi/scsi_transport_spi.h +++ b/include/scsi/scsi_transport_spi.h | |||
@@ -54,7 +54,7 @@ struct spi_transport_attrs { | |||
54 | unsigned int support_qas; /* supports quick arbitration and selection */ | 54 | unsigned int support_qas; /* supports quick arbitration and selection */ |
55 | /* Private Fields */ | 55 | /* Private Fields */ |
56 | unsigned int dv_pending:1; /* Internal flag */ | 56 | unsigned int dv_pending:1; /* Internal flag */ |
57 | struct semaphore dv_sem; /* semaphore to serialise dv */ | 57 | struct mutex dv_mutex; /* semaphore to serialise dv */ |
58 | }; | 58 | }; |
59 | 59 | ||
60 | enum spi_signal_type { | 60 | enum spi_signal_type { |