mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 13:44:26 -04:00
Merge branch 'master' into upstream
Conflicts: net/ieee80211/ieee80211_crypt_tkip.c net/ieee80211/ieee80211_crypt_wep.c
This commit is contained in:
commit
28eb177dfa
632 changed files with 50610 additions and 17265 deletions
|
|
@ -1,2 +1,9 @@
|
|||
header-y += asm-generic/ linux/ scsi/ sound/ mtd/ rdma/ video/
|
||||
header-y += asm-$(ARCH)/
|
||||
header-y += asm-generic/
|
||||
header-y += linux/
|
||||
header-y += scsi/
|
||||
header-y += sound/
|
||||
header-y += mtd/
|
||||
header-y += rdma/
|
||||
header-y += video/
|
||||
|
||||
header-y += asm-$(ARCH)/
|
||||
|
|
|
|||
|
|
@ -1,5 +1,11 @@
|
|||
include include/asm-generic/Kbuild.asm
|
||||
|
||||
unifdef-y += console.h fpu.h sysinfo.h compiler.h
|
||||
header-y += gentrap.h
|
||||
header-y += regdef.h
|
||||
header-y += pal.h
|
||||
header-y += reg.h
|
||||
|
||||
header-y += gentrap.h regdef.h pal.h reg.h
|
||||
unifdef-y += console.h
|
||||
unifdef-y += fpu.h
|
||||
unifdef-y += sysinfo.h
|
||||
unifdef-y += compiler.h
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
header-y += atomic.h errno-base.h errno.h fcntl.h ioctl.h ipc.h mman.h \
|
||||
signal.h statfs.h
|
||||
unifdef-y := resource.h siginfo.h
|
||||
header-y += atomic.h
|
||||
header-y += errno-base.h
|
||||
header-y += errno.h
|
||||
header-y += fcntl.h
|
||||
header-y += ioctl.h
|
||||
header-y += ipc.h
|
||||
header-y += mman.h
|
||||
header-y += signal.h
|
||||
header-y += statfs.h
|
||||
|
||||
unifdef-y += resource.h
|
||||
unifdef-y += siginfo.h
|
||||
|
|
|
|||
|
|
@ -1,8 +1,34 @@
|
|||
unifdef-y += a.out.h auxvec.h byteorder.h errno.h fcntl.h ioctl.h \
|
||||
ioctls.h ipcbuf.h mman.h msgbuf.h param.h poll.h \
|
||||
posix_types.h ptrace.h resource.h sembuf.h shmbuf.h shmparam.h \
|
||||
sigcontext.h siginfo.h signal.h socket.h sockios.h stat.h \
|
||||
statfs.h termbits.h termios.h types.h unistd.h user.h
|
||||
unifdef-y += a.out.h
|
||||
unifdef-y += auxvec.h
|
||||
unifdef-y += byteorder.h
|
||||
unifdef-y += errno.h
|
||||
unifdef-y += fcntl.h
|
||||
unifdef-y += ioctl.h
|
||||
unifdef-y += ioctls.h
|
||||
unifdef-y += ipcbuf.h
|
||||
unifdef-y += mman.h
|
||||
unifdef-y += msgbuf.h
|
||||
unifdef-y += param.h
|
||||
unifdef-y += poll.h
|
||||
unifdef-y += posix_types.h
|
||||
unifdef-y += ptrace.h
|
||||
unifdef-y += resource.h
|
||||
unifdef-y += sembuf.h
|
||||
unifdef-y += shmbuf.h
|
||||
unifdef-y += sigcontext.h
|
||||
unifdef-y += siginfo.h
|
||||
unifdef-y += signal.h
|
||||
unifdef-y += socket.h
|
||||
unifdef-y += sockios.h
|
||||
unifdef-y += stat.h
|
||||
unifdef-y += statfs.h
|
||||
unifdef-y += termbits.h
|
||||
unifdef-y += termios.h
|
||||
unifdef-y += types.h
|
||||
unifdef-y += unistd.h
|
||||
unifdef-y += user.h
|
||||
|
||||
# These probably shouldn't be exported
|
||||
unifdef-y += elf.h page.h
|
||||
unifdef-y += shmparam.h
|
||||
unifdef-y += elf.h
|
||||
unifdef-y += page.h
|
||||
|
|
|
|||
|
|
@ -1,5 +1,10 @@
|
|||
include include/asm-generic/Kbuild.asm
|
||||
|
||||
header-y += boot.h debugreg.h ldt.h ucontext.h
|
||||
header-y += boot.h
|
||||
header-y += debugreg.h
|
||||
header-y += ldt.h
|
||||
header-y += ucontext.h
|
||||
|
||||
unifdef-y += mtrr.h setup.h vm86.h
|
||||
unifdef-y += mtrr.h
|
||||
unifdef-y += setup.h
|
||||
unifdef-y += vm86.h
|
||||
|
|
|
|||
|
|
@ -1,7 +1,17 @@
|
|||
include include/asm-generic/Kbuild.asm
|
||||
|
||||
header-y += break.h fpu.h fpswa.h gcc_intrin.h ia64regs.h \
|
||||
intel_intrin.h intrinsics.h perfmon_default_smpl.h \
|
||||
ptrace_offsets.h rse.h setup.h ucontext.h
|
||||
header-y += break.h
|
||||
header-y += fpu.h
|
||||
header-y += fpswa.h
|
||||
header-y += gcc_intrin.h
|
||||
header-y += ia64regs.h
|
||||
header-y += intel_intrin.h
|
||||
header-y += intrinsics.h
|
||||
header-y += perfmon_default_smpl.h
|
||||
header-y += ptrace_offsets.h
|
||||
header-y += rse.h
|
||||
header-y += setup.h
|
||||
header-y += ucontext.h
|
||||
|
||||
unifdef-y += perfmon.h ustack.h
|
||||
unifdef-y += perfmon.h
|
||||
unifdef-y += ustack.h
|
||||
|
|
|
|||
|
|
@ -1,10 +1,41 @@
|
|||
include include/asm-generic/Kbuild.asm
|
||||
|
||||
unifdef-y += a.out.h asm-compat.h bootx.h byteorder.h cputable.h elf.h \
|
||||
nvram.h param.h posix_types.h ptrace.h seccomp.h signal.h \
|
||||
termios.h types.h unistd.h
|
||||
header-y += auxvec.h
|
||||
header-y += ioctls.h
|
||||
header-y += mman.h
|
||||
header-y += sembuf.h
|
||||
header-y += siginfo.h
|
||||
header-y += stat.h
|
||||
header-y += errno.h
|
||||
header-y += ipcbuf.h
|
||||
header-y += msgbuf.h
|
||||
header-y += shmbuf.h
|
||||
header-y += socket.h
|
||||
header-y += termbits.h
|
||||
header-y += fcntl.h
|
||||
header-y += ipc.h
|
||||
header-y += poll.h
|
||||
header-y += shmparam.h
|
||||
header-y += sockios.h
|
||||
header-y += ucontext.h
|
||||
header-y += ioctl.h
|
||||
header-y += linkage.h
|
||||
header-y += resource.h
|
||||
header-y += sigcontext.h
|
||||
header-y += statfs.h
|
||||
|
||||
header-y += auxvec.h ioctls.h mman.h sembuf.h siginfo.h stat.h errno.h \
|
||||
ipcbuf.h msgbuf.h shmbuf.h socket.h termbits.h fcntl.h ipc.h \
|
||||
poll.h shmparam.h sockios.h ucontext.h ioctl.h linkage.h \
|
||||
resource.h sigcontext.h statfs.h
|
||||
unifdef-y += a.out.h
|
||||
unifdef-y += asm-compat.h
|
||||
unifdef-y += bootx.h
|
||||
unifdef-y += byteorder.h
|
||||
unifdef-y += cputable.h
|
||||
unifdef-y += elf.h
|
||||
unifdef-y += nvram.h
|
||||
unifdef-y += param.h
|
||||
unifdef-y += posix_types.h
|
||||
unifdef-y += ptrace.h
|
||||
unifdef-y += seccomp.h
|
||||
unifdef-y += signal.h
|
||||
unifdef-y += termios.h
|
||||
unifdef-y += types.h
|
||||
unifdef-y += unistd.h
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
#define PPC_FEATURE_SMT 0x00004000
|
||||
#define PPC_FEATURE_ICACHE_SNOOP 0x00002000
|
||||
#define PPC_FEATURE_ARCH_2_05 0x00001000
|
||||
#define PPC_FEATURE_PA6T 0x00000800
|
||||
|
||||
#define PPC_FEATURE_TRUE_LE 0x00000002
|
||||
#define PPC_FEATURE_PPC_LE 0x00000001
|
||||
|
|
@ -36,6 +37,7 @@
|
|||
struct cpu_spec;
|
||||
|
||||
typedef void (*cpu_setup_t)(unsigned long offset, struct cpu_spec* spec);
|
||||
typedef void (*cpu_restore_t)(void);
|
||||
|
||||
enum powerpc_oprofile_type {
|
||||
PPC_OPROFILE_INVALID = 0,
|
||||
|
|
@ -65,6 +67,8 @@ struct cpu_spec {
|
|||
* BHT, SPD, etc... from head.S before branching to identify_machine
|
||||
*/
|
||||
cpu_setup_t cpu_setup;
|
||||
/* Used to restore cpu setup on secondary processors and at resume */
|
||||
cpu_restore_t cpu_restore;
|
||||
|
||||
/* Used by oprofile userspace to select the right counters */
|
||||
char *oprofile_cpu_type;
|
||||
|
|
@ -145,7 +149,7 @@ extern void do_cpu_ftr_fixups(unsigned long offset);
|
|||
|
||||
#define CPU_FTR_PPCAS_ARCH_V2_BASE (CPU_FTR_SLB | \
|
||||
CPU_FTR_TLBIEL | CPU_FTR_NOEXECUTE | \
|
||||
CPU_FTR_NODSISRALIGN | CPU_FTR_CTRL)
|
||||
CPU_FTR_NODSISRALIGN)
|
||||
|
||||
/* iSeries doesn't support large pages */
|
||||
#ifdef CONFIG_PPC_ISERIES
|
||||
|
|
@ -310,24 +314,29 @@ extern void do_cpu_ftr_fixups(unsigned long offset);
|
|||
CPU_FTR_HPTE_TABLE | CPU_FTR_IABR | \
|
||||
CPU_FTR_MMCRA | CPU_FTR_CTRL)
|
||||
#define CPU_FTRS_POWER4 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_MMCRA)
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
|
||||
CPU_FTR_MMCRA)
|
||||
#define CPU_FTRS_PPC970 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
|
||||
CPU_FTR_ALTIVEC_COMP | CPU_FTR_CAN_NAP | CPU_FTR_MMCRA)
|
||||
#define CPU_FTRS_POWER5 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
|
||||
CPU_FTR_MMCRA | CPU_FTR_SMT | \
|
||||
CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \
|
||||
CPU_FTR_PURR)
|
||||
#define CPU_FTRS_POWER6 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
|
||||
CPU_FTR_MMCRA | CPU_FTR_SMT | \
|
||||
CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \
|
||||
CPU_FTR_PURR | CPU_FTR_CI_LARGE_PAGE | CPU_FTR_REAL_LE)
|
||||
#define CPU_FTRS_CELL (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
|
||||
CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \
|
||||
CPU_FTR_CTRL | CPU_FTR_PAUSE_ZERO | CPU_FTR_CI_LARGE_PAGE)
|
||||
CPU_FTR_PAUSE_ZERO | CPU_FTR_CI_LARGE_PAGE)
|
||||
#define CPU_FTRS_PA6T (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \
|
||||
CPU_FTR_ALTIVEC_COMP | CPU_FTR_CI_LARGE_PAGE | \
|
||||
CPU_FTR_PURR | CPU_FTR_REAL_LE)
|
||||
#define CPU_FTRS_COMPATIBLE (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2)
|
||||
#endif
|
||||
|
|
@ -336,7 +345,7 @@ extern void do_cpu_ftr_fixups(unsigned long offset);
|
|||
#define CPU_FTRS_POSSIBLE \
|
||||
(CPU_FTRS_POWER3 | CPU_FTRS_RS64 | CPU_FTRS_POWER4 | \
|
||||
CPU_FTRS_PPC970 | CPU_FTRS_POWER5 | CPU_FTRS_POWER6 | \
|
||||
CPU_FTRS_CELL | CPU_FTR_CI_LARGE_PAGE)
|
||||
CPU_FTRS_CELL | CPU_FTRS_PA6T)
|
||||
#else
|
||||
enum {
|
||||
CPU_FTRS_POSSIBLE =
|
||||
|
|
@ -375,7 +384,7 @@ enum {
|
|||
#define CPU_FTRS_ALWAYS \
|
||||
(CPU_FTRS_POWER3 & CPU_FTRS_RS64 & CPU_FTRS_POWER4 & \
|
||||
CPU_FTRS_PPC970 & CPU_FTRS_POWER5 & CPU_FTRS_POWER6 & \
|
||||
CPU_FTRS_CELL & CPU_FTRS_POSSIBLE)
|
||||
CPU_FTRS_CELL & CPU_FTRS_PA6T & CPU_FTRS_POSSIBLE)
|
||||
#else
|
||||
enum {
|
||||
CPU_FTRS_ALWAYS =
|
||||
|
|
|
|||
|
|
@ -164,9 +164,15 @@
|
|||
#define H_VIO_SIGNAL 0x104
|
||||
#define H_SEND_CRQ 0x108
|
||||
#define H_COPY_RDMA 0x110
|
||||
#define H_REGISTER_LOGICAL_LAN 0x114
|
||||
#define H_FREE_LOGICAL_LAN 0x118
|
||||
#define H_ADD_LOGICAL_LAN_BUFFER 0x11C
|
||||
#define H_SEND_LOGICAL_LAN 0x120
|
||||
#define H_MULTICAST_CTRL 0x130
|
||||
#define H_SET_XDABR 0x134
|
||||
#define H_STUFF_TCE 0x138
|
||||
#define H_PUT_TCE_INDIRECT 0x13C
|
||||
#define H_CHANGE_LOGICAL_LAN_MAC 0x14C
|
||||
#define H_VTERM_PARTNER_INFO 0x150
|
||||
#define H_REGISTER_VTERM 0x154
|
||||
#define H_FREE_VTERM 0x158
|
||||
|
|
@ -196,102 +202,59 @@
|
|||
#define H_GET_HCA_INFO 0x1B8
|
||||
#define H_GET_PERF_COUNT 0x1BC
|
||||
#define H_MANAGE_TRACE 0x1C0
|
||||
#define H_FREE_LOGICAL_LAN_BUFFER 0x1D4
|
||||
#define H_QUERY_INT_STATE 0x1E4
|
||||
#define H_POLL_PENDING 0x1D8
|
||||
#define H_JOIN 0x298
|
||||
#define H_VASI_STATE 0x2A4
|
||||
#define H_ENABLE_CRQ 0x2B0
|
||||
#define MAX_HCALL_OPCODE H_ENABLE_CRQ
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
/* plpar_hcall() -- Generic call interface using above opcodes
|
||||
/**
|
||||
* plpar_hcall_norets: - Make a pseries hypervisor call with no return arguments
|
||||
* @opcode: The hypervisor call to make.
|
||||
*
|
||||
* The actual call interface is a hypervisor call instruction with
|
||||
* the opcode in R3 and input args in R4-R7.
|
||||
* Status is returned in R3 with variable output values in R4-R11.
|
||||
* Only H_PTE_READ with H_READ_4 uses R6-R11 so we ignore it for now
|
||||
* and return only two out args which MUST ALWAYS BE PROVIDED.
|
||||
*/
|
||||
long plpar_hcall(unsigned long opcode,
|
||||
unsigned long arg1,
|
||||
unsigned long arg2,
|
||||
unsigned long arg3,
|
||||
unsigned long arg4,
|
||||
unsigned long *out1,
|
||||
unsigned long *out2,
|
||||
unsigned long *out3);
|
||||
|
||||
/* Same as plpar_hcall but for those opcodes that return no values
|
||||
* other than status. Slightly more efficient.
|
||||
* This call supports up to 7 arguments and only returns the status of
|
||||
* the hcall. Use this version where possible, its slightly faster than
|
||||
* the other plpar_hcalls.
|
||||
*/
|
||||
long plpar_hcall_norets(unsigned long opcode, ...);
|
||||
|
||||
/*
|
||||
* Special hcall interface for ibmveth support.
|
||||
* Takes 8 input parms. Returns a rc and stores the
|
||||
* R4 return value in *out1.
|
||||
*/
|
||||
long plpar_hcall_8arg_2ret(unsigned long opcode,
|
||||
unsigned long arg1,
|
||||
unsigned long arg2,
|
||||
unsigned long arg3,
|
||||
unsigned long arg4,
|
||||
unsigned long arg5,
|
||||
unsigned long arg6,
|
||||
unsigned long arg7,
|
||||
unsigned long arg8,
|
||||
unsigned long *out1);
|
||||
|
||||
/* plpar_hcall_4out()
|
||||
/**
|
||||
* plpar_hcall: - Make a pseries hypervisor call
|
||||
* @opcode: The hypervisor call to make.
|
||||
* @retbuf: Buffer to store up to 4 return arguments in.
|
||||
*
|
||||
* same as plpar_hcall except with 4 output arguments.
|
||||
* This call supports up to 6 arguments and 4 return arguments. Use
|
||||
* PLPAR_HCALL_BUFSIZE to size the return argument buffer.
|
||||
*
|
||||
* Used for all but the craziest of phyp interfaces (see plpar_hcall9)
|
||||
*/
|
||||
long plpar_hcall_4out(unsigned long opcode,
|
||||
unsigned long arg1,
|
||||
unsigned long arg2,
|
||||
unsigned long arg3,
|
||||
unsigned long arg4,
|
||||
unsigned long *out1,
|
||||
unsigned long *out2,
|
||||
unsigned long *out3,
|
||||
unsigned long *out4);
|
||||
#define PLPAR_HCALL_BUFSIZE 4
|
||||
long plpar_hcall(unsigned long opcode, unsigned long *retbuf, ...);
|
||||
|
||||
long plpar_hcall_7arg_7ret(unsigned long opcode,
|
||||
unsigned long arg1,
|
||||
unsigned long arg2,
|
||||
unsigned long arg3,
|
||||
unsigned long arg4,
|
||||
unsigned long arg5,
|
||||
unsigned long arg6,
|
||||
unsigned long arg7,
|
||||
unsigned long *out1,
|
||||
unsigned long *out2,
|
||||
unsigned long *out3,
|
||||
unsigned long *out4,
|
||||
unsigned long *out5,
|
||||
unsigned long *out6,
|
||||
unsigned long *out7);
|
||||
/**
|
||||
* plpar_hcall9: - Make a pseries hypervisor call with up to 9 return arguments
|
||||
* @opcode: The hypervisor call to make.
|
||||
* @retbuf: Buffer to store up to 9 return arguments in.
|
||||
*
|
||||
* This call supports up to 9 arguments and 9 return arguments. Use
|
||||
* PLPAR_HCALL9_BUFSIZE to size the return argument buffer.
|
||||
*/
|
||||
#define PLPAR_HCALL9_BUFSIZE 9
|
||||
long plpar_hcall9(unsigned long opcode, unsigned long *retbuf, ...);
|
||||
|
||||
long plpar_hcall_9arg_9ret(unsigned long opcode,
|
||||
unsigned long arg1,
|
||||
unsigned long arg2,
|
||||
unsigned long arg3,
|
||||
unsigned long arg4,
|
||||
unsigned long arg5,
|
||||
unsigned long arg6,
|
||||
unsigned long arg7,
|
||||
unsigned long arg8,
|
||||
unsigned long arg9,
|
||||
unsigned long *out1,
|
||||
unsigned long *out2,
|
||||
unsigned long *out3,
|
||||
unsigned long *out4,
|
||||
unsigned long *out5,
|
||||
unsigned long *out6,
|
||||
unsigned long *out7,
|
||||
unsigned long *out8,
|
||||
unsigned long *out9);
|
||||
/* For hcall instrumentation. One structure per-hcall, per-CPU */
|
||||
struct hcall_stats {
|
||||
unsigned long num_calls; /* number of calls (on this CPU) */
|
||||
unsigned long tb_total; /* total wall time (mftb) of calls. */
|
||||
unsigned long purr_total; /* total cpu time (PURR) of calls. */
|
||||
};
|
||||
void update_hcall_stats(unsigned long opcode, unsigned long tb_delta,
|
||||
unsigned long purr_delta);
|
||||
#define HCALL_STAT_ARRAY_SIZE ((MAX_HCALL_OPCODE >> 2) + 1)
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __KERNEL__ */
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ extern struct dma_mapping_ops ibmebus_dma_ops;
|
|||
extern struct bus_type ibmebus_bus_type;
|
||||
|
||||
struct ibmebus_dev {
|
||||
char *name;
|
||||
const char *name;
|
||||
struct of_device ofdev;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
#include <linux/sched.h>
|
||||
#include <asm/mpc8xx.h>
|
||||
#endif
|
||||
#include <asm/io.h>
|
||||
|
||||
#ifndef MAX_HWIFS
|
||||
#ifdef __powerpc64__
|
||||
|
|
@ -21,15 +22,14 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#define __ide_mm_insw(p, a, c) _insw_ns((volatile u16 __iomem *)(p), (a), (c))
|
||||
#define __ide_mm_insl(p, a, c) _insl_ns((volatile u32 __iomem *)(p), (a), (c))
|
||||
#define __ide_mm_outsw(p, a, c) _outsw_ns((volatile u16 __iomem *)(p), (a), (c))
|
||||
#define __ide_mm_outsl(p, a, c) _outsl_ns((volatile u32 __iomem *)(p), (a), (c))
|
||||
|
||||
#ifndef __powerpc64__
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
extern void __ide_mm_insw(void __iomem *port, void *addr, u32 count);
|
||||
extern void __ide_mm_outsw(void __iomem *port, void *addr, u32 count);
|
||||
extern void __ide_mm_insl(void __iomem *port, void *addr, u32 count);
|
||||
extern void __ide_mm_outsl(void __iomem *port, void *addr, u32 count);
|
||||
|
||||
struct ide_machdep_calls {
|
||||
int (*default_irq)(unsigned long base);
|
||||
|
|
|
|||
|
|
@ -20,20 +20,11 @@ extern int check_legacy_ioport(unsigned long base_port);
|
|||
#include <asm/page.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/paca.h>
|
||||
#ifdef CONFIG_PPC_ISERIES
|
||||
#include <asm/iseries/iseries_io.h>
|
||||
#endif
|
||||
#include <asm/synch.h>
|
||||
#include <asm/delay.h>
|
||||
|
||||
#include <asm-generic/iomap.h>
|
||||
|
||||
#define __ide_mm_insw(p, a, c) _insw_ns((volatile u16 __iomem *)(p), (a), (c))
|
||||
#define __ide_mm_insl(p, a, c) _insl_ns((volatile u32 __iomem *)(p), (a), (c))
|
||||
#define __ide_mm_outsw(p, a, c) _outsw_ns((volatile u16 __iomem *)(p), (a), (c))
|
||||
#define __ide_mm_outsl(p, a, c) _outsl_ns((volatile u32 __iomem *)(p), (a), (c))
|
||||
|
||||
|
||||
#define SIO_CONFIG_RA 0x398
|
||||
#define SIO_CONFIG_RD 0x399
|
||||
|
||||
|
|
@ -43,42 +34,53 @@ extern unsigned long isa_io_base;
|
|||
extern unsigned long pci_io_base;
|
||||
|
||||
#ifdef CONFIG_PPC_ISERIES
|
||||
/* __raw_* accessors aren't supported on iSeries */
|
||||
#define __raw_readb(addr) { BUG(); 0; }
|
||||
#define __raw_readw(addr) { BUG(); 0; }
|
||||
#define __raw_readl(addr) { BUG(); 0; }
|
||||
#define __raw_readq(addr) { BUG(); 0; }
|
||||
#define __raw_writeb(v, addr) { BUG(); 0; }
|
||||
#define __raw_writew(v, addr) { BUG(); 0; }
|
||||
#define __raw_writel(v, addr) { BUG(); 0; }
|
||||
#define __raw_writeq(v, addr) { BUG(); 0; }
|
||||
#define readb(addr) iSeries_Read_Byte(addr)
|
||||
#define readw(addr) iSeries_Read_Word(addr)
|
||||
#define readl(addr) iSeries_Read_Long(addr)
|
||||
#define writeb(data, addr) iSeries_Write_Byte((data),(addr))
|
||||
#define writew(data, addr) iSeries_Write_Word((data),(addr))
|
||||
#define writel(data, addr) iSeries_Write_Long((data),(addr))
|
||||
#define memset_io(a,b,c) iSeries_memset_io((a),(b),(c))
|
||||
#define memcpy_fromio(a,b,c) iSeries_memcpy_fromio((a), (b), (c))
|
||||
#define memcpy_toio(a,b,c) iSeries_memcpy_toio((a), (b), (c))
|
||||
|
||||
#define inb(addr) readb(((void __iomem *)(long)(addr)))
|
||||
#define inw(addr) readw(((void __iomem *)(long)(addr)))
|
||||
#define inl(addr) readl(((void __iomem *)(long)(addr)))
|
||||
#define outb(data,addr) writeb(data,((void __iomem *)(long)(addr)))
|
||||
#define outw(data,addr) writew(data,((void __iomem *)(long)(addr)))
|
||||
#define outl(data,addr) writel(data,((void __iomem *)(long)(addr)))
|
||||
/*
|
||||
* The *_ns versions below don't do byte-swapping.
|
||||
* Neither do the standard versions now, these are just here
|
||||
* for older code.
|
||||
*/
|
||||
#define insb(port, buf, ns) _insb((u8 __iomem *)((port)+pci_io_base), (buf), (ns))
|
||||
#define insw(port, buf, ns) _insw_ns((u8 __iomem *)((port)+pci_io_base), (buf), (ns))
|
||||
#define insl(port, buf, nl) _insl_ns((u8 __iomem *)((port)+pci_io_base), (buf), (nl))
|
||||
#define insw_ns(port, buf, ns) _insw_ns((u16 __iomem *)((port)+pci_io_base), (buf), (ns))
|
||||
#define insl_ns(port, buf, nl) _insl_ns((u32 __iomem *)((port)+pci_io_base), (buf), (nl))
|
||||
#else
|
||||
extern int in_8(const volatile unsigned char __iomem *addr);
|
||||
extern void out_8(volatile unsigned char __iomem *addr, int val);
|
||||
extern int in_le16(const volatile unsigned short __iomem *addr);
|
||||
extern int in_be16(const volatile unsigned short __iomem *addr);
|
||||
extern void out_le16(volatile unsigned short __iomem *addr, int val);
|
||||
extern void out_be16(volatile unsigned short __iomem *addr, int val);
|
||||
extern unsigned in_le32(const volatile unsigned __iomem *addr);
|
||||
extern unsigned in_be32(const volatile unsigned __iomem *addr);
|
||||
extern void out_le32(volatile unsigned __iomem *addr, int val);
|
||||
extern void out_be32(volatile unsigned __iomem *addr, int val);
|
||||
extern unsigned long in_le64(const volatile unsigned long __iomem *addr);
|
||||
extern unsigned long in_be64(const volatile unsigned long __iomem *addr);
|
||||
extern void out_le64(volatile unsigned long __iomem *addr, unsigned long val);
|
||||
extern void out_be64(volatile unsigned long __iomem *addr, unsigned long val);
|
||||
|
||||
extern unsigned char __raw_readb(const volatile void __iomem *addr);
|
||||
extern unsigned short __raw_readw(const volatile void __iomem *addr);
|
||||
extern unsigned int __raw_readl(const volatile void __iomem *addr);
|
||||
extern unsigned long __raw_readq(const volatile void __iomem *addr);
|
||||
extern void __raw_writeb(unsigned char v, volatile void __iomem *addr);
|
||||
extern void __raw_writew(unsigned short v, volatile void __iomem *addr);
|
||||
extern void __raw_writel(unsigned int v, volatile void __iomem *addr);
|
||||
extern void __raw_writeq(unsigned long v, volatile void __iomem *addr);
|
||||
|
||||
extern void memset_io(volatile void __iomem *addr, int c, unsigned long n);
|
||||
extern void memcpy_fromio(void *dest, const volatile void __iomem *src,
|
||||
unsigned long n);
|
||||
extern void memcpy_toio(volatile void __iomem *dest, const void *src,
|
||||
unsigned long n);
|
||||
|
||||
#else /* CONFIG_PPC_ISERIES */
|
||||
|
||||
#define in_8(addr) __in_8((addr))
|
||||
#define out_8(addr, val) __out_8((addr), (val))
|
||||
#define in_le16(addr) __in_le16((addr))
|
||||
#define in_be16(addr) __in_be16((addr))
|
||||
#define out_le16(addr, val) __out_le16((addr), (val))
|
||||
#define out_be16(addr, val) __out_be16((addr), (val))
|
||||
#define in_le32(addr) __in_le32((addr))
|
||||
#define in_be32(addr) __in_be32((addr))
|
||||
#define out_le32(addr, val) __out_le32((addr), (val))
|
||||
#define out_be32(addr, val) __out_be32((addr), (val))
|
||||
#define in_le64(addr) __in_le64((addr))
|
||||
#define in_be64(addr) __in_be64((addr))
|
||||
#define out_le64(addr, val) __out_le64((addr), (val))
|
||||
#define out_be64(addr, val) __out_be64((addr), (val))
|
||||
|
||||
static inline unsigned char __raw_readb(const volatile void __iomem *addr)
|
||||
{
|
||||
|
|
@ -112,23 +114,11 @@ static inline void __raw_writeq(unsigned long v, volatile void __iomem *addr)
|
|||
{
|
||||
*(volatile unsigned long __force *)addr = v;
|
||||
}
|
||||
#define readb(addr) eeh_readb(addr)
|
||||
#define readw(addr) eeh_readw(addr)
|
||||
#define readl(addr) eeh_readl(addr)
|
||||
#define readq(addr) eeh_readq(addr)
|
||||
#define writeb(data, addr) eeh_writeb((data), (addr))
|
||||
#define writew(data, addr) eeh_writew((data), (addr))
|
||||
#define writel(data, addr) eeh_writel((data), (addr))
|
||||
#define writeq(data, addr) eeh_writeq((data), (addr))
|
||||
#define memset_io(a,b,c) eeh_memset_io((a),(b),(c))
|
||||
#define memcpy_fromio(a,b,c) eeh_memcpy_fromio((a),(b),(c))
|
||||
#define memcpy_toio(a,b,c) eeh_memcpy_toio((a),(b),(c))
|
||||
#define inb(port) eeh_inb((unsigned long)port)
|
||||
#define outb(val, port) eeh_outb(val, (unsigned long)port)
|
||||
#define inw(port) eeh_inw((unsigned long)port)
|
||||
#define outw(val, port) eeh_outw(val, (unsigned long)port)
|
||||
#define inl(port) eeh_inl((unsigned long)port)
|
||||
#define outl(val, port) eeh_outl(val, (unsigned long)port)
|
||||
|
||||
#endif /* CONFIG_PPC_ISERIES */
|
||||
|
||||
/*
|
||||
* The insw/outsw/insl/outsl macros don't do byte-swapping.
|
||||
|
|
@ -138,30 +128,37 @@ static inline void __raw_writeq(unsigned long v, volatile void __iomem *addr)
|
|||
#define insb(port, buf, ns) eeh_insb((port), (buf), (ns))
|
||||
#define insw(port, buf, ns) eeh_insw_ns((port), (buf), (ns))
|
||||
#define insl(port, buf, nl) eeh_insl_ns((port), (buf), (nl))
|
||||
#define insw_ns(port, buf, ns) eeh_insw_ns((port), (buf), (ns))
|
||||
#define insl_ns(port, buf, nl) eeh_insl_ns((port), (buf), (nl))
|
||||
|
||||
#endif
|
||||
|
||||
#define outsb(port, buf, ns) _outsb((u8 __iomem *)((port)+pci_io_base), (buf), (ns))
|
||||
#define outsw(port, buf, ns) _outsw_ns((u16 __iomem *)((port)+pci_io_base), (buf), (ns))
|
||||
#define outsl(port, buf, nl) _outsl_ns((u32 __iomem *)((port)+pci_io_base), (buf), (nl))
|
||||
|
||||
#define readb(addr) eeh_readb(addr)
|
||||
#define readw(addr) eeh_readw(addr)
|
||||
#define readl(addr) eeh_readl(addr)
|
||||
#define readq(addr) eeh_readq(addr)
|
||||
#define writeb(data, addr) eeh_writeb((data), (addr))
|
||||
#define writew(data, addr) eeh_writew((data), (addr))
|
||||
#define writel(data, addr) eeh_writel((data), (addr))
|
||||
#define writeq(data, addr) eeh_writeq((data), (addr))
|
||||
#define inb(port) eeh_inb((unsigned long)port)
|
||||
#define outb(val, port) eeh_outb(val, (unsigned long)port)
|
||||
#define inw(port) eeh_inw((unsigned long)port)
|
||||
#define outw(val, port) eeh_outw(val, (unsigned long)port)
|
||||
#define inl(port) eeh_inl((unsigned long)port)
|
||||
#define outl(val, port) eeh_outl(val, (unsigned long)port)
|
||||
|
||||
#define readb_relaxed(addr) readb(addr)
|
||||
#define readw_relaxed(addr) readw(addr)
|
||||
#define readl_relaxed(addr) readl(addr)
|
||||
#define readq_relaxed(addr) readq(addr)
|
||||
|
||||
extern void _insb(volatile u8 __iomem *port, void *buf, int ns);
|
||||
extern void _outsb(volatile u8 __iomem *port, const void *buf, int ns);
|
||||
extern void _insw(volatile u16 __iomem *port, void *buf, int ns);
|
||||
extern void _outsw(volatile u16 __iomem *port, const void *buf, int ns);
|
||||
extern void _insl(volatile u32 __iomem *port, void *buf, int nl);
|
||||
extern void _outsl(volatile u32 __iomem *port, const void *buf, int nl);
|
||||
extern void _insw_ns(volatile u16 __iomem *port, void *buf, int ns);
|
||||
extern void _outsw_ns(volatile u16 __iomem *port, const void *buf, int ns);
|
||||
extern void _insl_ns(volatile u32 __iomem *port, void *buf, int nl);
|
||||
extern void _outsl_ns(volatile u32 __iomem *port, const void *buf, int nl);
|
||||
extern void _insb(volatile u8 __iomem *port, void *buf, long count);
|
||||
extern void _outsb(volatile u8 __iomem *port, const void *buf, long count);
|
||||
extern void _insw_ns(volatile u16 __iomem *port, void *buf, long count);
|
||||
extern void _outsw_ns(volatile u16 __iomem *port, const void *buf, long count);
|
||||
extern void _insl_ns(volatile u32 __iomem *port, void *buf, long count);
|
||||
extern void _outsl_ns(volatile u32 __iomem *port, const void *buf, long count);
|
||||
|
||||
static inline void mmiowb(void)
|
||||
{
|
||||
|
|
@ -180,14 +177,6 @@ static inline void mmiowb(void)
|
|||
#define inl_p(port) inl(port)
|
||||
#define outl_p(val, port) (udelay(1), outl((val), (port)))
|
||||
|
||||
/*
|
||||
* The *_ns versions below don't do byte-swapping.
|
||||
* Neither do the standard versions now, these are just here
|
||||
* for older code.
|
||||
*/
|
||||
#define outsw_ns(port, buf, ns) _outsw_ns((u16 __iomem *)((port)+pci_io_base), (buf), (ns))
|
||||
#define outsl_ns(port, buf, nl) _outsl_ns((u32 __iomem *)((port)+pci_io_base), (buf), (nl))
|
||||
|
||||
|
||||
#define IO_SPACE_LIMIT ~(0UL)
|
||||
|
||||
|
|
@ -279,7 +268,7 @@ static inline void iosync(void)
|
|||
* and should not be used directly by device drivers. Use inb/readb
|
||||
* instead.
|
||||
*/
|
||||
static inline int in_8(const volatile unsigned char __iomem *addr)
|
||||
static inline int __in_8(const volatile unsigned char __iomem *addr)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
|
@ -288,14 +277,14 @@ static inline int in_8(const volatile unsigned char __iomem *addr)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static inline void out_8(volatile unsigned char __iomem *addr, int val)
|
||||
static inline void __out_8(volatile unsigned char __iomem *addr, int val)
|
||||
{
|
||||
__asm__ __volatile__("sync; stb%U0%X0 %1,%0"
|
||||
: "=m" (*addr) : "r" (val));
|
||||
get_paca()->io_sync = 1;
|
||||
}
|
||||
|
||||
static inline int in_le16(const volatile unsigned short __iomem *addr)
|
||||
static inline int __in_le16(const volatile unsigned short __iomem *addr)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
|
@ -304,7 +293,7 @@ static inline int in_le16(const volatile unsigned short __iomem *addr)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static inline int in_be16(const volatile unsigned short __iomem *addr)
|
||||
static inline int __in_be16(const volatile unsigned short __iomem *addr)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
|
@ -313,21 +302,21 @@ static inline int in_be16(const volatile unsigned short __iomem *addr)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static inline void out_le16(volatile unsigned short __iomem *addr, int val)
|
||||
static inline void __out_le16(volatile unsigned short __iomem *addr, int val)
|
||||
{
|
||||
__asm__ __volatile__("sync; sthbrx %1,0,%2"
|
||||
: "=m" (*addr) : "r" (val), "r" (addr));
|
||||
get_paca()->io_sync = 1;
|
||||
}
|
||||
|
||||
static inline void out_be16(volatile unsigned short __iomem *addr, int val)
|
||||
static inline void __out_be16(volatile unsigned short __iomem *addr, int val)
|
||||
{
|
||||
__asm__ __volatile__("sync; sth%U0%X0 %1,%0"
|
||||
: "=m" (*addr) : "r" (val));
|
||||
get_paca()->io_sync = 1;
|
||||
}
|
||||
|
||||
static inline unsigned in_le32(const volatile unsigned __iomem *addr)
|
||||
static inline unsigned __in_le32(const volatile unsigned __iomem *addr)
|
||||
{
|
||||
unsigned ret;
|
||||
|
||||
|
|
@ -336,7 +325,7 @@ static inline unsigned in_le32(const volatile unsigned __iomem *addr)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static inline unsigned in_be32(const volatile unsigned __iomem *addr)
|
||||
static inline unsigned __in_be32(const volatile unsigned __iomem *addr)
|
||||
{
|
||||
unsigned ret;
|
||||
|
||||
|
|
@ -345,21 +334,21 @@ static inline unsigned in_be32(const volatile unsigned __iomem *addr)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static inline void out_le32(volatile unsigned __iomem *addr, int val)
|
||||
static inline void __out_le32(volatile unsigned __iomem *addr, int val)
|
||||
{
|
||||
__asm__ __volatile__("sync; stwbrx %1,0,%2" : "=m" (*addr)
|
||||
: "r" (val), "r" (addr));
|
||||
get_paca()->io_sync = 1;
|
||||
}
|
||||
|
||||
static inline void out_be32(volatile unsigned __iomem *addr, int val)
|
||||
static inline void __out_be32(volatile unsigned __iomem *addr, int val)
|
||||
{
|
||||
__asm__ __volatile__("sync; stw%U0%X0 %1,%0"
|
||||
: "=m" (*addr) : "r" (val));
|
||||
get_paca()->io_sync = 1;
|
||||
}
|
||||
|
||||
static inline unsigned long in_le64(const volatile unsigned long __iomem *addr)
|
||||
static inline unsigned long __in_le64(const volatile unsigned long __iomem *addr)
|
||||
{
|
||||
unsigned long tmp, ret;
|
||||
|
||||
|
|
@ -379,7 +368,7 @@ static inline unsigned long in_le64(const volatile unsigned long __iomem *addr)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static inline unsigned long in_be64(const volatile unsigned long __iomem *addr)
|
||||
static inline unsigned long __in_be64(const volatile unsigned long __iomem *addr)
|
||||
{
|
||||
unsigned long ret;
|
||||
|
||||
|
|
@ -388,7 +377,7 @@ static inline unsigned long in_be64(const volatile unsigned long __iomem *addr)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static inline void out_le64(volatile unsigned long __iomem *addr, unsigned long val)
|
||||
static inline void __out_le64(volatile unsigned long __iomem *addr, unsigned long val)
|
||||
{
|
||||
unsigned long tmp;
|
||||
|
||||
|
|
@ -406,15 +395,13 @@ static inline void out_le64(volatile unsigned long __iomem *addr, unsigned long
|
|||
get_paca()->io_sync = 1;
|
||||
}
|
||||
|
||||
static inline void out_be64(volatile unsigned long __iomem *addr, unsigned long val)
|
||||
static inline void __out_be64(volatile unsigned long __iomem *addr, unsigned long val)
|
||||
{
|
||||
__asm__ __volatile__("sync; std%U0%X0 %1,%0" : "=m" (*addr) : "r" (val));
|
||||
get_paca()->io_sync = 1;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_PPC_ISERIES
|
||||
#include <asm/eeh.h>
|
||||
#endif
|
||||
|
||||
/**
|
||||
* check_signature - find BIOS signatures
|
||||
|
|
@ -430,7 +417,6 @@ static inline int check_signature(const volatile void __iomem * io_addr,
|
|||
const unsigned char *signature, int length)
|
||||
{
|
||||
int retval = 0;
|
||||
#ifndef CONFIG_PPC_ISERIES
|
||||
do {
|
||||
if (readb(io_addr) != *signature)
|
||||
goto out;
|
||||
|
|
@ -440,7 +426,6 @@ static inline int check_signature(const volatile void __iomem * io_addr,
|
|||
} while (length);
|
||||
retval = 1;
|
||||
out:
|
||||
#endif
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@ struct irq_map_entry {
|
|||
extern struct irq_map_entry irq_map[NR_IRQS];
|
||||
|
||||
|
||||
/***
|
||||
/**
|
||||
* irq_alloc_host - Allocate a new irq_host data structure
|
||||
* @node: device-tree node of the interrupt controller
|
||||
* @revmap_type: type of reverse mapping to use
|
||||
|
|
@ -159,14 +159,14 @@ extern struct irq_host *irq_alloc_host(unsigned int revmap_type,
|
|||
irq_hw_number_t inval_irq);
|
||||
|
||||
|
||||
/***
|
||||
/**
|
||||
* irq_find_host - Locates a host for a given device node
|
||||
* @node: device-tree node of the interrupt controller
|
||||
*/
|
||||
extern struct irq_host *irq_find_host(struct device_node *node);
|
||||
|
||||
|
||||
/***
|
||||
/**
|
||||
* irq_set_default_host - Set a "default" host
|
||||
* @host: default host pointer
|
||||
*
|
||||
|
|
@ -178,7 +178,7 @@ extern struct irq_host *irq_find_host(struct device_node *node);
|
|||
extern void irq_set_default_host(struct irq_host *host);
|
||||
|
||||
|
||||
/***
|
||||
/**
|
||||
* irq_set_virq_count - Set the maximum number of virt irqs
|
||||
* @count: number of linux virtual irqs, capped with NR_IRQS
|
||||
*
|
||||
|
|
@ -188,7 +188,7 @@ extern void irq_set_default_host(struct irq_host *host);
|
|||
extern void irq_set_virq_count(unsigned int count);
|
||||
|
||||
|
||||
/***
|
||||
/**
|
||||
* irq_create_mapping - Map a hardware interrupt into linux virq space
|
||||
* @host: host owning this hardware interrupt or NULL for default host
|
||||
* @hwirq: hardware irq number in that host space
|
||||
|
|
@ -202,13 +202,13 @@ extern unsigned int irq_create_mapping(struct irq_host *host,
|
|||
irq_hw_number_t hwirq);
|
||||
|
||||
|
||||
/***
|
||||
/**
|
||||
* irq_dispose_mapping - Unmap an interrupt
|
||||
* @virq: linux virq number of the interrupt to unmap
|
||||
*/
|
||||
extern void irq_dispose_mapping(unsigned int virq);
|
||||
|
||||
/***
|
||||
/**
|
||||
* irq_find_mapping - Find a linux virq from an hw irq number.
|
||||
* @host: host owning this hardware interrupt
|
||||
* @hwirq: hardware irq number in that host space
|
||||
|
|
@ -221,7 +221,7 @@ extern unsigned int irq_find_mapping(struct irq_host *host,
|
|||
irq_hw_number_t hwirq);
|
||||
|
||||
|
||||
/***
|
||||
/**
|
||||
* irq_radix_revmap - Find a linux virq from a hw irq number.
|
||||
* @host: host owning this hardware interrupt
|
||||
* @hwirq: hardware irq number in that host space
|
||||
|
|
@ -232,7 +232,7 @@ extern unsigned int irq_find_mapping(struct irq_host *host,
|
|||
extern unsigned int irq_radix_revmap(struct irq_host *host,
|
||||
irq_hw_number_t hwirq);
|
||||
|
||||
/***
|
||||
/**
|
||||
* irq_linear_revmap - Find a linux virq from a hw irq number.
|
||||
* @host: host owning this hardware interrupt
|
||||
* @hwirq: hardware irq number in that host space
|
||||
|
|
@ -247,7 +247,7 @@ extern unsigned int irq_linear_revmap(struct irq_host *host,
|
|||
|
||||
|
||||
|
||||
/***
|
||||
/**
|
||||
* irq_alloc_virt - Allocate virtual irq numbers
|
||||
* @host: host owning these new virtual irqs
|
||||
* @count: number of consecutive numbers to allocate
|
||||
|
|
@ -261,7 +261,7 @@ extern unsigned int irq_alloc_virt(struct irq_host *host,
|
|||
unsigned int count,
|
||||
unsigned int hint);
|
||||
|
||||
/***
|
||||
/**
|
||||
* irq_free_virt - Free virtual irq numbers
|
||||
* @virq: virtual irq number of the first interrupt to free
|
||||
* @count: number of interrupts to free
|
||||
|
|
@ -300,7 +300,7 @@ extern unsigned int irq_of_parse_and_map(struct device_node *dev, int index);
|
|||
|
||||
/* -- End OF helpers -- */
|
||||
|
||||
/***
|
||||
/**
|
||||
* irq_early_init - Init irq remapping subsystem
|
||||
*/
|
||||
extern void irq_early_init(void);
|
||||
|
|
|
|||
|
|
@ -16,23 +16,6 @@
|
|||
#define HvCallXmSetTce HvCallXm + 11
|
||||
#define HvCallXmSetTces HvCallXm + 13
|
||||
|
||||
/*
|
||||
* Structure passed to HvCallXm_getTceTableParms
|
||||
*/
|
||||
struct iommu_table_cb {
|
||||
unsigned long itc_busno; /* Bus number for this tce table */
|
||||
unsigned long itc_start; /* Will be NULL for secondary */
|
||||
unsigned long itc_totalsize; /* Size (in pages) of whole table */
|
||||
unsigned long itc_offset; /* Index into real tce table of the
|
||||
start of our section */
|
||||
unsigned long itc_size; /* Size (in pages) of our section */
|
||||
unsigned long itc_index; /* Index of this tce table */
|
||||
unsigned short itc_maxtables; /* Max num of tables for partition */
|
||||
unsigned char itc_virtbus; /* Flag to indicate virtual bus */
|
||||
unsigned char itc_slotno; /* IOA Tce Slot Index */
|
||||
unsigned char itc_rsvd[4];
|
||||
};
|
||||
|
||||
static inline void HvCallXm_getTceTableParms(u64 cb)
|
||||
{
|
||||
HvCall1(HvCallXmGetTceTableParms, cb);
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
|
||||
#include <asm/iseries/hv_call_sc.h>
|
||||
#include <asm/iseries/hv_types.h>
|
||||
#include <asm/iseries/it_lp_naca.h>
|
||||
|
||||
enum {
|
||||
HvCallCfg_Cur = 0,
|
||||
|
|
@ -44,16 +43,8 @@ enum {
|
|||
#define HvCallCfgGetHostingLpIndex HvCallCfg + 32
|
||||
|
||||
extern HvLpIndex HvLpConfig_getLpIndex_outline(void);
|
||||
|
||||
static inline HvLpIndex HvLpConfig_getLpIndex(void)
|
||||
{
|
||||
return itLpNaca.xLpIndex;
|
||||
}
|
||||
|
||||
static inline HvLpIndex HvLpConfig_getPrimaryLpIndex(void)
|
||||
{
|
||||
return itLpNaca.xPrimaryLpIndex;
|
||||
}
|
||||
extern HvLpIndex HvLpConfig_getLpIndex(void);
|
||||
extern HvLpIndex HvLpConfig_getPrimaryLpIndex(void);
|
||||
|
||||
static inline u64 HvLpConfig_getMsChunks(void)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,60 +0,0 @@
|
|||
#ifndef _ASM_POWERPC_ISERIES_ISERIES_IO_H
|
||||
#define _ASM_POWERPC_ISERIES_ISERIES_IO_H
|
||||
|
||||
|
||||
#ifdef CONFIG_PPC_ISERIES
|
||||
#include <linux/types.h>
|
||||
/*
|
||||
* Created by Allan Trautman on Thu Dec 28 2000.
|
||||
*
|
||||
* Remaps the io.h for the iSeries Io
|
||||
* Copyright (C) 2000 Allan H Trautman, IBM Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the:
|
||||
* Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Change Activity:
|
||||
* Created December 28, 2000
|
||||
* End Change Activity
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
extern u8 iSeries_Read_Byte(const volatile void __iomem * IoAddress);
|
||||
extern u16 iSeries_Read_Word(const volatile void __iomem * IoAddress);
|
||||
extern u32 iSeries_Read_Long(const volatile void __iomem * IoAddress);
|
||||
extern void iSeries_Write_Byte(u8 IoData, volatile void __iomem * IoAddress);
|
||||
extern void iSeries_Write_Word(u16 IoData, volatile void __iomem * IoAddress);
|
||||
extern void iSeries_Write_Long(u32 IoData, volatile void __iomem * IoAddress);
|
||||
|
||||
extern void iSeries_memset_io(volatile void __iomem *dest, char x, size_t n);
|
||||
extern void iSeries_memcpy_toio(volatile void __iomem *dest, void *source,
|
||||
size_t n);
|
||||
extern void iSeries_memcpy_fromio(void *dest,
|
||||
const volatile void __iomem *source, size_t n);
|
||||
#else
|
||||
static inline u8 iSeries_Read_Byte(const volatile void __iomem *IoAddress)
|
||||
{
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
static inline void iSeries_Write_Byte(u8 IoData,
|
||||
volatile void __iomem *IoAddress)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_PCI */
|
||||
|
||||
#endif /* CONFIG_PPC_ISERIES */
|
||||
#endif /* _ASM_POWERPC_ISERIES_ISERIES_IO_H */
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2002 Dave Boutcher IBM Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#ifndef _ASM_POWERPC_ISERIES_IT_EXT_VPD_PANEL_H
|
||||
#define _ASM_POWERPC_ISERIES_IT_EXT_VPD_PANEL_H
|
||||
|
||||
/*
|
||||
* This struct maps the panel information
|
||||
*
|
||||
* Warning:
|
||||
* This data must match the architecture for the panel information
|
||||
*/
|
||||
|
||||
#include <asm/types.h>
|
||||
|
||||
struct ItExtVpdPanel {
|
||||
/* Definition of the Extended Vpd On Panel Data Area */
|
||||
char systemSerial[8];
|
||||
char mfgID[4];
|
||||
char reserved1[24];
|
||||
char machineType[4];
|
||||
char systemID[6];
|
||||
char somUniqueCnt[4];
|
||||
char serialNumberCount;
|
||||
char reserved2[7];
|
||||
u16 bbu3;
|
||||
u16 bbu2;
|
||||
u16 bbu1;
|
||||
char xLocationLabel[8];
|
||||
u8 xRsvd1[6];
|
||||
u16 xFrameId;
|
||||
u8 xRsvd2[48];
|
||||
};
|
||||
|
||||
extern struct ItExtVpdPanel xItExtVpdPanel;
|
||||
|
||||
#endif /* _ASM_POWERPC_ISERIES_IT_EXT_VPD_PANEL_H */
|
||||
|
|
@ -1,80 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2001 Mike Corrigan IBM Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#ifndef _ASM_POWERPC_ISERIES_IT_LP_NACA_H
|
||||
#define _ASM_POWERPC_ISERIES_IT_LP_NACA_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/*
|
||||
* This control block contains the data that is shared between the
|
||||
* hypervisor (PLIC) and the OS.
|
||||
*/
|
||||
|
||||
struct ItLpNaca {
|
||||
// CACHE_LINE_1 0x0000 - 0x007F Contains read-only data
|
||||
u32 xDesc; // Eye catcher x00-x03
|
||||
u16 xSize; // Size of this class x04-x05
|
||||
u16 xIntHdlrOffset; // Offset to IntHdlr array x06-x07
|
||||
u8 xMaxIntHdlrEntries; // Number of entries in array x08-x08
|
||||
u8 xPrimaryLpIndex; // LP Index of Primary x09-x09
|
||||
u8 xServiceLpIndex; // LP Ind of Service Focal Pointx0A-x0A
|
||||
u8 xLpIndex; // LP Index x0B-x0B
|
||||
u16 xMaxLpQueues; // Number of allocated queues x0C-x0D
|
||||
u16 xLpQueueOffset; // Offset to start of LP queues x0E-x0F
|
||||
u8 xPirEnvironMode; // Piranha or hardware x10-x10
|
||||
u8 xPirConsoleMode; // Piranha console indicator x11-x11
|
||||
u8 xPirDasdMode; // Piranha dasd indicator x12-x12
|
||||
u8 xRsvd1_0[5]; // Reserved for Piranha related x13-x17
|
||||
u8 flags; // flags, see below x18-x1F
|
||||
u8 xSpVpdFormat; // VPD areas are in CSP format ...
|
||||
u8 xIntProcRatio; // Ratio of int procs to procs ...
|
||||
u8 xRsvd1_2[5]; // Reserved ...
|
||||
u16 xRsvd1_3; // Reserved x20-x21
|
||||
u16 xPlicVrmIndex; // VRM index of PLIC x22-x23
|
||||
u16 xMinSupportedSlicVrmInd;// Min supported OS VRM index x24-x25
|
||||
u16 xMinCompatableSlicVrmInd;// Min compatible OS VRM index x26-x27
|
||||
u64 xLoadAreaAddr; // ER address of load area x28-x2F
|
||||
u32 xLoadAreaChunks; // Chunks for the load area x30-x33
|
||||
u32 xPaseSysCallCRMask; // Mask used to test CR before x34-x37
|
||||
// doing an ASR switch on PASE
|
||||
// system call.
|
||||
u64 xSlicSegmentTablePtr; // Pointer to Slic seg table. x38-x3f
|
||||
u8 xRsvd1_4[64]; // x40-x7F
|
||||
|
||||
// CACHE_LINE_2 0x0080 - 0x00FF Contains local read-write data
|
||||
u8 xRsvd2_0[128]; // Reserved x00-x7F
|
||||
|
||||
// CACHE_LINE_3-6 0x0100 - 0x02FF Contains LP Queue indicators
|
||||
// NB: Padding required to keep xInterrruptHdlr at x300 which is required
|
||||
// for v4r4 PLIC.
|
||||
u8 xOldLpQueue[128]; // LP Queue needed for v4r4 100-17F
|
||||
u8 xRsvd3_0[384]; // Reserved 180-2FF
|
||||
|
||||
// CACHE_LINE_7-8 0x0300 - 0x03FF Contains the address of the OS interrupt
|
||||
// handlers
|
||||
u64 xInterruptHdlr[32]; // Interrupt handlers 300-x3FF
|
||||
};
|
||||
|
||||
extern struct ItLpNaca itLpNaca;
|
||||
|
||||
#define ITLPNACA_LPAR 0x80 /* Is LPAR installed on the system */
|
||||
#define ITLPNACA_PARTITIONED 0x40 /* Is the system partitioned */
|
||||
#define ITLPNACA_HWSYNCEDTBS 0x20 /* Hardware synced TBs */
|
||||
#define ITLPNACA_HMTINT 0x10 /* Utilize MHT for interrupts */
|
||||
|
||||
#endif /* _ASM_POWERPC_ISERIES_IT_LP_NACA_H */
|
||||
|
|
@ -27,8 +27,6 @@
|
|||
#include <asm/types.h>
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
struct HvLpEvent;
|
||||
|
||||
#define IT_LP_MAX_QUEUES 8
|
||||
|
||||
#define IT_LP_NOT_USED 0 /* Queue will not be used by PLIC */
|
||||
|
|
|
|||
|
|
@ -122,6 +122,34 @@ enum viorc {
|
|||
viorc_openRejected = 0x0301
|
||||
};
|
||||
|
||||
/*
|
||||
* The structure of the events that flow between us and OS/400 for chario
|
||||
* events. You can't mess with this unless the OS/400 side changes too.
|
||||
*/
|
||||
struct viocharlpevent {
|
||||
struct HvLpEvent event;
|
||||
u32 reserved;
|
||||
u16 version;
|
||||
u16 subtype_result_code;
|
||||
u8 virtual_device;
|
||||
u8 len;
|
||||
u8 data[VIOCHAR_MAX_DATA];
|
||||
};
|
||||
|
||||
#define VIOCHAR_WINDOW 10
|
||||
|
||||
enum viocharsubtype {
|
||||
viocharopen = 0x0001,
|
||||
viocharclose = 0x0002,
|
||||
viochardata = 0x0003,
|
||||
viocharack = 0x0004,
|
||||
viocharconfig = 0x0005
|
||||
};
|
||||
|
||||
enum viochar_rc {
|
||||
viochar_rc_ebusy = 1
|
||||
};
|
||||
|
||||
struct device;
|
||||
|
||||
extern struct device *iSeries_vio_dev;
|
||||
|
|
|
|||
|
|
@ -27,7 +27,9 @@
|
|||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
#include <linux/cache.h>
|
||||
#include <asm/types.h>
|
||||
#include <asm/mmu.h>
|
||||
|
||||
/* The Hypervisor barfs if the lppaca crosses a page boundary. A 1k
|
||||
* alignment is sufficient to prevent this */
|
||||
|
|
@ -114,7 +116,7 @@ struct lppaca {
|
|||
|
||||
|
||||
//=============================================================================
|
||||
// CACHE_LINE_3 0x0100 - 0x007F: This line is shared with other processors
|
||||
// CACHE_LINE_3 0x0100 - 0x017F: This line is shared with other processors
|
||||
//=============================================================================
|
||||
// This is the yield_count. An "odd" value (low bit on) means that
|
||||
// the processor is yielded (either because of an OS yield or a PLIC
|
||||
|
|
@ -126,12 +128,29 @@ struct lppaca {
|
|||
u8 reserved6[124]; // Reserved x04-x7F
|
||||
|
||||
//=============================================================================
|
||||
// CACHE_LINE_4-5 0x0100 - 0x01FF Contains PMC interrupt data
|
||||
// CACHE_LINE_4-5 0x0180 - 0x027F Contains PMC interrupt data
|
||||
//=============================================================================
|
||||
u8 pmc_save_area[256]; // PMC interrupt Area x00-xFF
|
||||
} __attribute__((__aligned__(0x400)));
|
||||
|
||||
extern struct lppaca lppaca[];
|
||||
|
||||
/*
|
||||
* SLB shadow buffer structure as defined in the PAPR. The save_area
|
||||
* contains adjacent ESID and VSID pairs for each shadowed SLB. The
|
||||
* ESID is stored in the lower 64bits, then the VSID.
|
||||
*/
|
||||
struct slb_shadow {
|
||||
u32 persistent; // Number of persistent SLBs x00-x03
|
||||
u32 buffer_length; // Total shadow buffer length x04-x07
|
||||
u64 reserved; // Alignment x08-x0f
|
||||
struct {
|
||||
u64 esid;
|
||||
u64 vsid;
|
||||
} save_area[SLB_NUM_BOLTED]; // x10-x40
|
||||
} ____cacheline_aligned;
|
||||
|
||||
extern struct slb_shadow slb_shadow[];
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _ASM_POWERPC_LPPACA_H */
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
register struct paca_struct *local_paca asm("r13");
|
||||
#define get_paca() local_paca
|
||||
#define get_lppaca() (get_paca()->lppaca_ptr)
|
||||
#define get_slb_shadow() (get_paca()->slb_shadow_ptr)
|
||||
|
||||
struct task_struct;
|
||||
|
||||
|
|
@ -99,6 +100,8 @@ struct paca_struct {
|
|||
u64 user_time; /* accumulated usermode TB ticks */
|
||||
u64 system_time; /* accumulated system TB ticks */
|
||||
u64 startpurr; /* PURR/TB value snapshot */
|
||||
|
||||
struct slb_shadow *slb_shadow_ptr;
|
||||
};
|
||||
|
||||
extern struct paca_struct paca[];
|
||||
|
|
|
|||
|
|
@ -55,12 +55,6 @@
|
|||
#define PAGE_OFFSET ASM_CONST(CONFIG_KERNEL_START)
|
||||
#define KERNELBASE (PAGE_OFFSET + PHYSICAL_START)
|
||||
|
||||
#ifdef CONFIG_DISCONTIGMEM
|
||||
#define page_to_pfn(page) discontigmem_page_to_pfn(page)
|
||||
#define pfn_to_page(pfn) discontigmem_pfn_to_page(pfn)
|
||||
#define pfn_valid(pfn) discontigmem_pfn_valid(pfn)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FLATMEM
|
||||
#define pfn_valid(pfn) ((pfn) < max_mapnr)
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -68,6 +68,17 @@ struct pci_dev *pci_get_device_by_addr(unsigned long addr);
|
|||
*/
|
||||
void eeh_slot_error_detail (struct pci_dn *pdn, int severity);
|
||||
|
||||
/**
|
||||
* rtas_pci_enableo - enable IO transfers for this slot
|
||||
* @pdn: pci device node
|
||||
* @function: either EEH_THAW_MMIO or EEH_THAW_DMA
|
||||
*
|
||||
* Enable I/O transfers to this slot
|
||||
*/
|
||||
#define EEH_THAW_MMIO 2
|
||||
#define EEH_THAW_DMA 3
|
||||
int rtas_pci_enable(struct pci_dn *pdn, int function);
|
||||
|
||||
/**
|
||||
* rtas_set_slot_reset -- unfreeze a frozen slot
|
||||
*
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@
|
|||
#define _CHRP_Motorola 0x04 /* motorola chrp, the cobra */
|
||||
#define _CHRP_IBM 0x05 /* IBM chrp, the longtrail and longtrail 2 */
|
||||
#define _CHRP_Pegasos 0x06 /* Genesi/bplan's Pegasos and Pegasos2 */
|
||||
#define _CHRP_briq 0x07 /* TotalImpact's briQ */
|
||||
|
||||
#if defined(__KERNEL__) && defined(CONFIG_PPC32)
|
||||
|
||||
|
|
|
|||
|
|
@ -72,8 +72,8 @@ struct property {
|
|||
};
|
||||
|
||||
struct device_node {
|
||||
char *name;
|
||||
char *type;
|
||||
const char *name;
|
||||
const char *type;
|
||||
phandle node;
|
||||
phandle linux_phandle;
|
||||
char *full_name;
|
||||
|
|
@ -160,7 +160,7 @@ extern void unflatten_device_tree(void);
|
|||
extern void early_init_devtree(void *);
|
||||
extern int device_is_compatible(struct device_node *device, const char *);
|
||||
extern int machine_is_compatible(const char *compat);
|
||||
extern void *get_property(struct device_node *node, const char *name,
|
||||
extern const void *get_property(struct device_node *node, const char *name,
|
||||
int *lenp);
|
||||
extern void print_properties(struct device_node *node);
|
||||
extern int prom_n_addr_cells(struct device_node* np);
|
||||
|
|
@ -197,8 +197,8 @@ extern int release_OF_resource(struct device_node* node, int index);
|
|||
*/
|
||||
|
||||
|
||||
/* Helper to read a big number */
|
||||
static inline u64 of_read_number(u32 *cell, int size)
|
||||
/* Helper to read a big number; size is in cells (not bytes) */
|
||||
static inline u64 of_read_number(const u32 *cell, int size)
|
||||
{
|
||||
u64 r = 0;
|
||||
while (size--)
|
||||
|
|
@ -206,18 +206,28 @@ static inline u64 of_read_number(u32 *cell, int size)
|
|||
return r;
|
||||
}
|
||||
|
||||
/* Like of_read_number, but we want an unsigned long result */
|
||||
#ifdef CONFIG_PPC32
|
||||
static inline unsigned long of_read_ulong(const u32 *cell, int size)
|
||||
{
|
||||
return cell[size-1];
|
||||
}
|
||||
#else
|
||||
#define of_read_ulong(cell, size) of_read_number(cell, size)
|
||||
#endif
|
||||
|
||||
/* Translate an OF address block into a CPU physical address
|
||||
*/
|
||||
#define OF_BAD_ADDR ((u64)-1)
|
||||
extern u64 of_translate_address(struct device_node *np, u32 *addr);
|
||||
extern u64 of_translate_address(struct device_node *np, const u32 *addr);
|
||||
|
||||
/* Extract an address from a device, returns the region size and
|
||||
* the address space flags too. The PCI version uses a BAR number
|
||||
* instead of an absolute index
|
||||
*/
|
||||
extern u32 *of_get_address(struct device_node *dev, int index,
|
||||
extern const u32 *of_get_address(struct device_node *dev, int index,
|
||||
u64 *size, unsigned int *flags);
|
||||
extern u32 *of_get_pci_address(struct device_node *dev, int bar_no,
|
||||
extern const u32 *of_get_pci_address(struct device_node *dev, int bar_no,
|
||||
u64 *size, unsigned int *flags);
|
||||
|
||||
/* Get an address as a resource. Note that if your address is
|
||||
|
|
@ -234,7 +244,7 @@ extern int of_pci_address_to_resource(struct device_node *dev, int bar,
|
|||
/* Parse the ibm,dma-window property of an OF node into the busno, phys and
|
||||
* size parameters.
|
||||
*/
|
||||
void of_parse_dma_window(struct device_node *dn, unsigned char *dma_window_prop,
|
||||
void of_parse_dma_window(struct device_node *dn, const void *dma_window_prop,
|
||||
unsigned long *busno, unsigned long *phys, unsigned long *size);
|
||||
|
||||
extern void kdump_move_device_tree(void);
|
||||
|
|
@ -259,7 +269,7 @@ struct of_irq {
|
|||
u32 specifier[OF_MAX_IRQ_SPEC]; /* Specifier copy */
|
||||
};
|
||||
|
||||
/***
|
||||
/**
|
||||
* of_irq_map_init - Initialize the irq remapper
|
||||
* @flags: flags defining workarounds to enable
|
||||
*
|
||||
|
|
@ -272,7 +282,7 @@ struct of_irq {
|
|||
|
||||
extern void of_irq_map_init(unsigned int flags);
|
||||
|
||||
/***
|
||||
/**
|
||||
* of_irq_map_raw - Low level interrupt tree parsing
|
||||
* @parent: the device interrupt parent
|
||||
* @intspec: interrupt specifier ("interrupts" property of the device)
|
||||
|
|
@ -289,12 +299,12 @@ extern void of_irq_map_init(unsigned int flags);
|
|||
*
|
||||
*/
|
||||
|
||||
extern int of_irq_map_raw(struct device_node *parent, u32 *intspec,
|
||||
u32 ointsize, u32 *addr,
|
||||
extern int of_irq_map_raw(struct device_node *parent, const u32 *intspec,
|
||||
u32 ointsize, const u32 *addr,
|
||||
struct of_irq *out_irq);
|
||||
|
||||
|
||||
/***
|
||||
/**
|
||||
* of_irq_map_one - Resolve an interrupt for a device
|
||||
* @device: the device whose interrupt is to be resolved
|
||||
* @index: index of the interrupt to resolve
|
||||
|
|
@ -307,7 +317,7 @@ extern int of_irq_map_raw(struct device_node *parent, u32 *intspec,
|
|||
extern int of_irq_map_one(struct device_node *device, int index,
|
||||
struct of_irq *out_irq);
|
||||
|
||||
/***
|
||||
/**
|
||||
* of_irq_map_pci - Resolve the interrupt for a PCI device
|
||||
* @pdev: the device whose interrupt is to be resolved
|
||||
* @out_irq: structure of_irq filled by this function
|
||||
|
|
|
|||
|
|
@ -215,12 +215,10 @@ do { \
|
|||
#define PTRACE_GETVRREGS 18
|
||||
#define PTRACE_SETVRREGS 19
|
||||
|
||||
#ifndef __powerpc64__
|
||||
/* Get/set all the upper 32-bits of the SPE registers, accumulator, and
|
||||
* spefscr, in one go */
|
||||
#define PTRACE_GETEVRREGS 20
|
||||
#define PTRACE_SETEVRREGS 21
|
||||
#endif /* __powerpc64__ */
|
||||
|
||||
/*
|
||||
* Get or set a debug register. The first 16 are DABR registers and the
|
||||
|
|
@ -235,7 +233,6 @@ do { \
|
|||
#define PPC_PTRACE_GETFPREGS 0x97 /* Get FPRs 0 - 31 */
|
||||
#define PPC_PTRACE_SETFPREGS 0x96 /* Set FPRs 0 - 31 */
|
||||
|
||||
#ifdef __powerpc64__
|
||||
/* Calls to trace a 64bit program from a 32bit program */
|
||||
#define PPC_PTRACE_PEEKTEXT_3264 0x95
|
||||
#define PPC_PTRACE_PEEKDATA_3264 0x94
|
||||
|
|
@ -243,6 +240,5 @@ do { \
|
|||
#define PPC_PTRACE_POKEDATA_3264 0x92
|
||||
#define PPC_PTRACE_PEEKUSR_3264 0x91
|
||||
#define PPC_PTRACE_POKEUSR_3264 0x90
|
||||
#endif /* __powerpc64__ */
|
||||
|
||||
#endif /* _ASM_POWERPC_PTRACE_H */
|
||||
|
|
|
|||
|
|
@ -592,6 +592,7 @@
|
|||
#define PV_630p 0x0041
|
||||
#define PV_970MP 0x0044
|
||||
#define PV_BE 0x0070
|
||||
#define PV_PA6T 0x0090
|
||||
|
||||
/*
|
||||
* Number of entries in the SLB. If this ever changes we should handle
|
||||
|
|
|
|||
|
|
@ -230,5 +230,21 @@ extern unsigned long rtas_rmo_buf;
|
|||
|
||||
#define GLOBAL_INTERRUPT_QUEUE 9005
|
||||
|
||||
/**
|
||||
* rtas_config_addr - Format a busno, devfn and reg for RTAS.
|
||||
* @busno: The bus number.
|
||||
* @devfn: The device and function number as encoded by PCI_DEVFN().
|
||||
* @reg: The register number.
|
||||
*
|
||||
* This function encodes the given busno, devfn and register number as
|
||||
* required for RTAS calls that take a "config_addr" parameter.
|
||||
* See PAPR requirement 7.3.4-1 for more info.
|
||||
*/
|
||||
static inline u32 rtas_config_addr(int busno, int devfn, int reg)
|
||||
{
|
||||
return ((reg & 0xf00) << 20) | ((busno & 0xff) << 16) |
|
||||
(devfn << 8) | (reg & 0xff);
|
||||
}
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _POWERPC_RTAS_H */
|
||||
|
|
|
|||
|
|
@ -517,7 +517,7 @@ struct smu_sdbp_cpupiddata {
|
|||
* This returns the pointer to an SMU "sdb" partition data or NULL
|
||||
* if not found. The data format is described below
|
||||
*/
|
||||
extern struct smu_sdbp_header *smu_get_sdb_partition(int id,
|
||||
extern const struct smu_sdbp_header *smu_get_sdb_partition(int id,
|
||||
unsigned int *size);
|
||||
|
||||
/* Get "sdb" partition data from an SMU satellite */
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ struct spu_context;
|
|||
struct spu_runqueue;
|
||||
|
||||
struct spu {
|
||||
char *name;
|
||||
const char *name;
|
||||
unsigned long local_store_phys;
|
||||
u8 *local_store;
|
||||
unsigned long problem_phys;
|
||||
|
|
|
|||
|
|
@ -177,11 +177,6 @@ extern u32 booke_wdt_enabled;
|
|||
extern u32 booke_wdt_period;
|
||||
#endif /* CONFIG_BOOKE_WDT */
|
||||
|
||||
/* EBCDIC -> ASCII conversion for [0-9A-Z] on iSeries */
|
||||
extern unsigned char e2a(unsigned char);
|
||||
extern unsigned char* strne2a(unsigned char *dest,
|
||||
const unsigned char *src, size_t n);
|
||||
|
||||
struct device_node;
|
||||
extern void note_scsi_host(struct device_node *, void *);
|
||||
|
||||
|
|
|
|||
|
|
@ -46,8 +46,8 @@ struct iommu_table;
|
|||
*/
|
||||
struct vio_dev {
|
||||
struct iommu_table *iommu_table; /* vio_map_* uses this */
|
||||
char *name;
|
||||
char *type;
|
||||
const char *name;
|
||||
const char *type;
|
||||
uint32_t unit_address;
|
||||
unsigned int irq;
|
||||
struct device dev;
|
||||
|
|
|
|||
|
|
@ -327,26 +327,12 @@ __do_out_asm(outl, "stwbrx")
|
|||
#define inl_p(port) inl((port))
|
||||
#define outl_p(val, port) outl((val), (port))
|
||||
|
||||
extern void _insb(volatile u8 __iomem *port, void *buf, int ns);
|
||||
extern void _outsb(volatile u8 __iomem *port, const void *buf, int ns);
|
||||
extern void _insw(volatile u16 __iomem *port, void *buf, int ns);
|
||||
extern void _outsw(volatile u16 __iomem *port, const void *buf, int ns);
|
||||
extern void _insl(volatile u32 __iomem *port, void *buf, int nl);
|
||||
extern void _outsl(volatile u32 __iomem *port, const void *buf, int nl);
|
||||
extern void _insw_ns(volatile u16 __iomem *port, void *buf, int ns);
|
||||
extern void _outsw_ns(volatile u16 __iomem *port, const void *buf, int ns);
|
||||
extern void _insl_ns(volatile u32 __iomem *port, void *buf, int nl);
|
||||
extern void _outsl_ns(volatile u32 __iomem *port, const void *buf, int nl);
|
||||
|
||||
/*
|
||||
* The *_ns versions below don't do byte-swapping.
|
||||
* Neither do the standard versions now, these are just here
|
||||
* for older code.
|
||||
*/
|
||||
#define insw_ns(port, buf, ns) _insw_ns((port)+___IO_BASE, (buf), (ns))
|
||||
#define outsw_ns(port, buf, ns) _outsw_ns((port)+___IO_BASE, (buf), (ns))
|
||||
#define insl_ns(port, buf, nl) _insl_ns((port)+___IO_BASE, (buf), (nl))
|
||||
#define outsl_ns(port, buf, nl) _outsl_ns((port)+___IO_BASE, (buf), (nl))
|
||||
extern void _insb(volatile u8 __iomem *port, void *buf, long count);
|
||||
extern void _outsb(volatile u8 __iomem *port, const void *buf, long count);
|
||||
extern void _insw_ns(volatile u16 __iomem *port, void *buf, long count);
|
||||
extern void _outsw_ns(volatile u16 __iomem *port, const void *buf, long count);
|
||||
extern void _insl_ns(volatile u32 __iomem *port, void *buf, long count);
|
||||
extern void _outsl_ns(volatile u32 __iomem *port, const void *buf, long count);
|
||||
|
||||
|
||||
#define IO_SPACE_LIMIT ~0
|
||||
|
|
|
|||
|
|
@ -30,8 +30,6 @@
|
|||
#undef inb
|
||||
#undef inw
|
||||
#undef inl
|
||||
#undef insw_ns
|
||||
#undef insl_ns
|
||||
#undef memcpy_fromio
|
||||
|
||||
extern int readb(volatile unsigned char *addr);
|
||||
|
|
@ -43,8 +41,6 @@ extern void insl(unsigned port, void *buf, int nl);
|
|||
extern int inb(unsigned port);
|
||||
extern int inw(unsigned port);
|
||||
extern unsigned inl(unsigned port);
|
||||
extern void insw_ns(unsigned port, void *buf, int ns);
|
||||
extern void insl_ns(unsigned port, void *buf, int nl);
|
||||
extern void *memcpy_fromio(void *dest, unsigned long src, size_t count);
|
||||
|
||||
#endif /* !__CONFIG_8260_PCI9_DEFS */
|
||||
|
|
|
|||
|
|
@ -300,14 +300,14 @@ do { \
|
|||
#define DBSR_IC 0x80000000 /* Instruction Completion */
|
||||
#define DBSR_BT 0x40000000 /* Branch taken */
|
||||
#define DBSR_TIE 0x10000000 /* Trap Instruction debug Event */
|
||||
#define DBSR_IAC1 0x00800000 /* Instruction Address Compare 1 Event */
|
||||
#define DBSR_IAC2 0x00400000 /* Instruction Address Compare 2 Event */
|
||||
#define DBSR_IAC3 0x00200000 /* Instruction Address Compare 3 Event */
|
||||
#define DBSR_IAC4 0x00100000 /* Instruction Address Compare 4 Event */
|
||||
#define DBSR_DAC1R 0x00080000 /* Data Address Compare 1 Read Event */
|
||||
#define DBSR_DAC1W 0x00040000 /* Data Address Compare 1 Write Event */
|
||||
#define DBSR_DAC2R 0x00020000 /* Data Address Compare 2 Read Event */
|
||||
#define DBSR_DAC2W 0x00010000 /* Data Address Compare 2 Write Event */
|
||||
#define DBSR_IAC1 0x04000000 /* Instruction Address Compare 1 Event */
|
||||
#define DBSR_IAC2 0x02000000 /* Instruction Address Compare 2 Event */
|
||||
#define DBSR_IAC3 0x00080000 /* Instruction Address Compare 3 Event */
|
||||
#define DBSR_IAC4 0x00040000 /* Instruction Address Compare 4 Event */
|
||||
#define DBSR_DAC1R 0x01000000 /* Data Address Compare 1 Read Event */
|
||||
#define DBSR_DAC1W 0x00800000 /* Data Address Compare 1 Write Event */
|
||||
#define DBSR_DAC2R 0x00400000 /* Data Address Compare 2 Read Event */
|
||||
#define DBSR_DAC2W 0x00200000 /* Data Address Compare 2 Write Event */
|
||||
#endif
|
||||
|
||||
/* Bit definitions related to the ESR. */
|
||||
|
|
|
|||
|
|
@ -1,4 +1,12 @@
|
|||
include include/asm-generic/Kbuild.asm
|
||||
|
||||
unifdef-y += cmb.h debug.h
|
||||
header-y += dasd.h qeth.h tape390.h ucontext.h vtoc.h z90crypt.h
|
||||
header-y += dasd.h
|
||||
header-y += monwriter.h
|
||||
header-y += qeth.h
|
||||
header-y += tape390.h
|
||||
header-y += ucontext.h
|
||||
header-y += vtoc.h
|
||||
header-y += z90crypt.h
|
||||
|
||||
unifdef-y += cmb.h
|
||||
unifdef-y += debug.h
|
||||
|
|
|
|||
90
include/asm-s390/appldata.h
Normal file
90
include/asm-s390/appldata.h
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
* include/asm-s390/appldata.h
|
||||
*
|
||||
* Copyright (C) IBM Corp. 2006
|
||||
*
|
||||
* Author(s): Melissa Howland <melissah@us.ibm.com>
|
||||
*/
|
||||
|
||||
#ifndef _ASM_S390_APPLDATA_H
|
||||
#define _ASM_S390_APPLDATA_H
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
#ifndef CONFIG_64BIT
|
||||
|
||||
#define APPLDATA_START_INTERVAL_REC 0x00 /* Function codes for */
|
||||
#define APPLDATA_STOP_REC 0x01 /* DIAG 0xDC */
|
||||
#define APPLDATA_GEN_EVENT_REC 0x02
|
||||
#define APPLDATA_START_CONFIG_REC 0x03
|
||||
|
||||
/*
|
||||
* Parameter list for DIAGNOSE X'DC'
|
||||
*/
|
||||
struct appldata_parameter_list {
|
||||
u16 diag; /* The DIAGNOSE code X'00DC' */
|
||||
u8 function; /* The function code for the DIAGNOSE */
|
||||
u8 parlist_length; /* Length of the parameter list */
|
||||
u32 product_id_addr; /* Address of the 16-byte product ID */
|
||||
u16 reserved;
|
||||
u16 buffer_length; /* Length of the application data buffer */
|
||||
u32 buffer_addr; /* Address of the application data buffer */
|
||||
} __attribute__ ((packed));
|
||||
|
||||
#else /* CONFIG_64BIT */
|
||||
|
||||
#define APPLDATA_START_INTERVAL_REC 0x80
|
||||
#define APPLDATA_STOP_REC 0x81
|
||||
#define APPLDATA_GEN_EVENT_REC 0x82
|
||||
#define APPLDATA_START_CONFIG_REC 0x83
|
||||
|
||||
/*
|
||||
* Parameter list for DIAGNOSE X'DC'
|
||||
*/
|
||||
struct appldata_parameter_list {
|
||||
u16 diag;
|
||||
u8 function;
|
||||
u8 parlist_length;
|
||||
u32 unused01;
|
||||
u16 reserved;
|
||||
u16 buffer_length;
|
||||
u32 unused02;
|
||||
u64 product_id_addr;
|
||||
u64 buffer_addr;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
#endif /* CONFIG_64BIT */
|
||||
|
||||
struct appldata_product_id {
|
||||
char prod_nr[7]; /* product number */
|
||||
u16 prod_fn; /* product function */
|
||||
u8 record_nr; /* record number */
|
||||
u16 version_nr; /* version */
|
||||
u16 release_nr; /* release */
|
||||
u16 mod_lvl; /* modification level */
|
||||
} __attribute__ ((packed));
|
||||
|
||||
static inline int appldata_asm(struct appldata_product_id *id,
|
||||
unsigned short fn, void *buffer,
|
||||
unsigned short length)
|
||||
{
|
||||
struct appldata_parameter_list parm_list;
|
||||
int ry;
|
||||
|
||||
if (!MACHINE_IS_VM)
|
||||
return -ENOSYS;
|
||||
parm_list.diag = 0xdc;
|
||||
parm_list.function = fn;
|
||||
parm_list.parlist_length = sizeof(parm_list);
|
||||
parm_list.buffer_length = length;
|
||||
parm_list.product_id_addr = (unsigned long) id;
|
||||
parm_list.buffer_addr = virt_to_phys(buffer);
|
||||
asm volatile(
|
||||
"diag %1,%0,0xdc"
|
||||
: "=d" (ry)
|
||||
: "d" (&parm_list), "m" (parm_list), "m" (*id)
|
||||
: "cc");
|
||||
return ry;
|
||||
}
|
||||
|
||||
#endif /* _ASM_S390_APPLDATA_H */
|
||||
|
|
@ -270,6 +270,11 @@ struct diag210 {
|
|||
__u32 vrdccrft : 8; /* real device feature (output) */
|
||||
} __attribute__ ((packed,aligned(4)));
|
||||
|
||||
struct ccw_dev_id {
|
||||
u8 ssid;
|
||||
u16 devno;
|
||||
};
|
||||
|
||||
extern int diag210(struct diag210 *addr);
|
||||
|
||||
extern void wait_cons_dev(void);
|
||||
|
|
@ -280,6 +285,8 @@ extern void cio_reset_channel_paths(void);
|
|||
|
||||
extern void css_schedule_reprobe(void);
|
||||
|
||||
extern void reipl_ccw_dev(struct ccw_dev_id *id);
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -11,6 +11,6 @@
|
|||
|
||||
#define MAX_DMA_ADDRESS 0x80000000
|
||||
|
||||
#define free_dma(x)
|
||||
#define free_dma(x) do { } while (0)
|
||||
|
||||
#endif /* _ASM_DMA_H */
|
||||
|
|
|
|||
|
|
@ -7,75 +7,21 @@
|
|||
#include <asm/errno.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
#ifndef __s390x__
|
||||
#define __futex_atomic_fixup \
|
||||
".section __ex_table,\"a\"\n" \
|
||||
" .align 4\n" \
|
||||
" .long 0b,4b,2b,4b,3b,4b\n" \
|
||||
".previous"
|
||||
#else /* __s390x__ */
|
||||
#define __futex_atomic_fixup \
|
||||
".section __ex_table,\"a\"\n" \
|
||||
" .align 8\n" \
|
||||
" .quad 0b,4b,2b,4b,3b,4b\n" \
|
||||
".previous"
|
||||
#endif /* __s390x__ */
|
||||
|
||||
#define __futex_atomic_op(insn, ret, oldval, newval, uaddr, oparg) \
|
||||
asm volatile(" sacf 256\n" \
|
||||
"0: l %1,0(%6)\n" \
|
||||
"1: " insn \
|
||||
"2: cs %1,%2,0(%6)\n" \
|
||||
"3: jl 1b\n" \
|
||||
" lhi %0,0\n" \
|
||||
"4: sacf 0\n" \
|
||||
__futex_atomic_fixup \
|
||||
: "=d" (ret), "=&d" (oldval), "=&d" (newval), \
|
||||
"=m" (*uaddr) \
|
||||
: "0" (-EFAULT), "d" (oparg), "a" (uaddr), \
|
||||
"m" (*uaddr) : "cc" );
|
||||
|
||||
static inline int futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
|
||||
{
|
||||
int op = (encoded_op >> 28) & 7;
|
||||
int cmp = (encoded_op >> 24) & 15;
|
||||
int oparg = (encoded_op << 8) >> 20;
|
||||
int cmparg = (encoded_op << 20) >> 20;
|
||||
int oldval = 0, newval, ret;
|
||||
int oldval, ret;
|
||||
|
||||
if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
|
||||
oparg = 1 << oparg;
|
||||
|
||||
if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
|
||||
return -EFAULT;
|
||||
|
||||
inc_preempt_count();
|
||||
|
||||
switch (op) {
|
||||
case FUTEX_OP_SET:
|
||||
__futex_atomic_op("lr %2,%5\n",
|
||||
ret, oldval, newval, uaddr, oparg);
|
||||
break;
|
||||
case FUTEX_OP_ADD:
|
||||
__futex_atomic_op("lr %2,%1\nar %2,%5\n",
|
||||
ret, oldval, newval, uaddr, oparg);
|
||||
break;
|
||||
case FUTEX_OP_OR:
|
||||
__futex_atomic_op("lr %2,%1\nor %2,%5\n",
|
||||
ret, oldval, newval, uaddr, oparg);
|
||||
break;
|
||||
case FUTEX_OP_ANDN:
|
||||
__futex_atomic_op("lr %2,%1\nnr %2,%5\n",
|
||||
ret, oldval, newval, uaddr, oparg);
|
||||
break;
|
||||
case FUTEX_OP_XOR:
|
||||
__futex_atomic_op("lr %2,%1\nxr %2,%5\n",
|
||||
ret, oldval, newval, uaddr, oparg);
|
||||
break;
|
||||
default:
|
||||
ret = -ENOSYS;
|
||||
}
|
||||
|
||||
dec_preempt_count();
|
||||
ret = uaccess.futex_atomic_op(op, uaddr, oparg, &oldval);
|
||||
|
||||
if (!ret) {
|
||||
switch (cmp) {
|
||||
|
|
@ -91,32 +37,13 @@ static inline int futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static inline int
|
||||
futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
|
||||
static inline int futex_atomic_cmpxchg_inatomic(int __user *uaddr,
|
||||
int oldval, int newval)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
|
||||
return -EFAULT;
|
||||
asm volatile(" sacf 256\n"
|
||||
" cs %1,%4,0(%5)\n"
|
||||
"0: lr %0,%1\n"
|
||||
"1: sacf 0\n"
|
||||
#ifndef __s390x__
|
||||
".section __ex_table,\"a\"\n"
|
||||
" .align 4\n"
|
||||
" .long 0b,1b\n"
|
||||
".previous"
|
||||
#else /* __s390x__ */
|
||||
".section __ex_table,\"a\"\n"
|
||||
" .align 8\n"
|
||||
" .quad 0b,1b\n"
|
||||
".previous"
|
||||
#endif /* __s390x__ */
|
||||
: "=d" (ret), "+d" (oldval), "=m" (*uaddr)
|
||||
: "0" (-EFAULT), "d" (newval), "a" (uaddr), "m" (*uaddr)
|
||||
: "cc", "memory" );
|
||||
return oldval;
|
||||
|
||||
return uaccess.futex_atomic_cmpxchg(uaddr, oldval, newval);
|
||||
}
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ extern void iounmap(void *addr);
|
|||
#define outb(x,addr) ((void) writeb(x,addr))
|
||||
#define outb_p(x,addr) outb(x,addr)
|
||||
|
||||
#define mmiowb()
|
||||
#define mmiowb() do { } while (0)
|
||||
|
||||
/*
|
||||
* Convert a physical pointer to a virtual kernel pointer for /dev/mem
|
||||
|
|
|
|||
59
include/asm-s390/kdebug.h
Normal file
59
include/asm-s390/kdebug.h
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
#ifndef _S390_KDEBUG_H
|
||||
#define _S390_KDEBUG_H
|
||||
|
||||
/*
|
||||
* Feb 2006 Ported to s390 <grundym@us.ibm.com>
|
||||
*/
|
||||
#include <linux/notifier.h>
|
||||
|
||||
struct pt_regs;
|
||||
|
||||
struct die_args {
|
||||
struct pt_regs *regs;
|
||||
const char *str;
|
||||
long err;
|
||||
int trapnr;
|
||||
int signr;
|
||||
};
|
||||
|
||||
/* Note - you should never unregister because that can race with NMIs.
|
||||
* If you really want to do it first unregister - then synchronize_sched
|
||||
* - then free.
|
||||
*/
|
||||
extern int register_die_notifier(struct notifier_block *);
|
||||
extern int unregister_die_notifier(struct notifier_block *);
|
||||
extern int register_page_fault_notifier(struct notifier_block *);
|
||||
extern int unregister_page_fault_notifier(struct notifier_block *);
|
||||
extern struct atomic_notifier_head s390die_chain;
|
||||
|
||||
|
||||
enum die_val {
|
||||
DIE_OOPS = 1,
|
||||
DIE_BPT,
|
||||
DIE_SSTEP,
|
||||
DIE_PANIC,
|
||||
DIE_NMI,
|
||||
DIE_DIE,
|
||||
DIE_NMIWATCHDOG,
|
||||
DIE_KERNELDEBUG,
|
||||
DIE_TRAP,
|
||||
DIE_GPF,
|
||||
DIE_CALL,
|
||||
DIE_NMI_IPI,
|
||||
DIE_PAGE_FAULT,
|
||||
};
|
||||
|
||||
static inline int notify_die(enum die_val val, const char *str,
|
||||
struct pt_regs *regs, long err, int trap, int sig)
|
||||
{
|
||||
struct die_args args = {
|
||||
.regs = regs,
|
||||
.str = str,
|
||||
.err = err,
|
||||
.trapnr = trap,
|
||||
.signr = sig
|
||||
};
|
||||
return atomic_notifier_call_chain(&s390die_chain, val, &args);
|
||||
}
|
||||
|
||||
#endif
|
||||
114
include/asm-s390/kprobes.h
Normal file
114
include/asm-s390/kprobes.h
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
#ifndef _ASM_S390_KPROBES_H
|
||||
#define _ASM_S390_KPROBES_H
|
||||
/*
|
||||
* Kernel Probes (KProbes)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Copyright (C) IBM Corporation, 2002, 2006
|
||||
*
|
||||
* 2002-Oct Created by Vamsi Krishna S <vamsi_krishna@in.ibm.com> Kernel
|
||||
* Probes initial implementation ( includes suggestions from
|
||||
* Rusty Russell).
|
||||
* 2004-Nov Modified for PPC64 by Ananth N Mavinakayanahalli
|
||||
* <ananth@in.ibm.com>
|
||||
* 2005-Dec Used as a template for s390 by Mike Grundy
|
||||
* <grundym@us.ibm.com>
|
||||
*/
|
||||
#include <linux/types.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <linux/percpu.h>
|
||||
|
||||
#define __ARCH_WANT_KPROBES_INSN_SLOT
|
||||
struct pt_regs;
|
||||
struct kprobe;
|
||||
|
||||
typedef u16 kprobe_opcode_t;
|
||||
#define BREAKPOINT_INSTRUCTION 0x0002
|
||||
|
||||
/* Maximum instruction size is 3 (16bit) halfwords: */
|
||||
#define MAX_INSN_SIZE 0x0003
|
||||
#define MAX_STACK_SIZE 64
|
||||
#define MIN_STACK_SIZE(ADDR) (((MAX_STACK_SIZE) < \
|
||||
(((unsigned long)current_thread_info()) + THREAD_SIZE - (ADDR))) \
|
||||
? (MAX_STACK_SIZE) \
|
||||
: (((unsigned long)current_thread_info()) + THREAD_SIZE - (ADDR)))
|
||||
|
||||
#define JPROBE_ENTRY(pentry) (kprobe_opcode_t *)(pentry)
|
||||
|
||||
#define ARCH_SUPPORTS_KRETPROBES
|
||||
#define ARCH_INACTIVE_KPROBE_COUNT 0
|
||||
|
||||
#define KPROBE_SWAP_INST 0x10
|
||||
|
||||
#define FIXUP_PSW_NORMAL 0x08
|
||||
#define FIXUP_BRANCH_NOT_TAKEN 0x04
|
||||
#define FIXUP_RETURN_REGISTER 0x02
|
||||
#define FIXUP_NOT_REQUIRED 0x01
|
||||
|
||||
/* Architecture specific copy of original instruction */
|
||||
struct arch_specific_insn {
|
||||
/* copy of original instruction */
|
||||
kprobe_opcode_t *insn;
|
||||
int fixup;
|
||||
int ilen;
|
||||
int reg;
|
||||
};
|
||||
|
||||
struct ins_replace_args {
|
||||
kprobe_opcode_t *ptr;
|
||||
kprobe_opcode_t old;
|
||||
kprobe_opcode_t new;
|
||||
};
|
||||
struct prev_kprobe {
|
||||
struct kprobe *kp;
|
||||
unsigned long status;
|
||||
unsigned long saved_psw;
|
||||
unsigned long kprobe_saved_imask;
|
||||
unsigned long kprobe_saved_ctl[3];
|
||||
};
|
||||
|
||||
/* per-cpu kprobe control block */
|
||||
struct kprobe_ctlblk {
|
||||
unsigned long kprobe_status;
|
||||
unsigned long kprobe_saved_imask;
|
||||
unsigned long kprobe_saved_ctl[3];
|
||||
struct pt_regs jprobe_saved_regs;
|
||||
unsigned long jprobe_saved_r14;
|
||||
unsigned long jprobe_saved_r15;
|
||||
struct prev_kprobe prev_kprobe;
|
||||
kprobe_opcode_t jprobes_stack[MAX_STACK_SIZE];
|
||||
};
|
||||
|
||||
void arch_remove_kprobe(struct kprobe *p);
|
||||
void kretprobe_trampoline(void);
|
||||
int is_prohibited_opcode(kprobe_opcode_t *instruction);
|
||||
void get_instruction_type(struct arch_specific_insn *ainsn);
|
||||
|
||||
#define flush_insn_slot(p) do { } while (0)
|
||||
|
||||
#endif /* _ASM_S390_KPROBES_H */
|
||||
|
||||
#ifdef CONFIG_KPROBES
|
||||
|
||||
extern int kprobe_exceptions_notify(struct notifier_block *self,
|
||||
unsigned long val, void *data);
|
||||
#else /* !CONFIG_KPROBES */
|
||||
static inline int kprobe_exceptions_notify(struct notifier_block *self,
|
||||
unsigned long val, void *data)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
|
@ -35,6 +35,7 @@
|
|||
#define __LC_IO_NEW_PSW 0x01f0
|
||||
#endif /* !__s390x__ */
|
||||
|
||||
#define __LC_IPL_PARMBLOCK_PTR 0x014
|
||||
#define __LC_EXT_PARAMS 0x080
|
||||
#define __LC_CPU_ADDRESS 0x084
|
||||
#define __LC_EXT_INT_CODE 0x086
|
||||
|
|
@ -47,6 +48,7 @@
|
|||
#define __LC_PER_ATMID 0x096
|
||||
#define __LC_PER_ADDRESS 0x098
|
||||
#define __LC_PER_ACCESS_ID 0x0A1
|
||||
#define __LC_AR_MODE_ID 0x0A3
|
||||
|
||||
#define __LC_SUBCHANNEL_ID 0x0B8
|
||||
#define __LC_SUBCHANNEL_NR 0x0BA
|
||||
|
|
@ -106,18 +108,28 @@
|
|||
#define __LC_INT_CLOCK 0xDE8
|
||||
#endif /* __s390x__ */
|
||||
|
||||
#define __LC_PANIC_MAGIC 0xE00
|
||||
|
||||
#define __LC_PANIC_MAGIC 0xE00
|
||||
#ifndef __s390x__
|
||||
#define __LC_PFAULT_INTPARM 0x080
|
||||
#define __LC_CPU_TIMER_SAVE_AREA 0x0D8
|
||||
#define __LC_CLOCK_COMP_SAVE_AREA 0x0E0
|
||||
#define __LC_PSW_SAVE_AREA 0x100
|
||||
#define __LC_PREFIX_SAVE_AREA 0x108
|
||||
#define __LC_AREGS_SAVE_AREA 0x120
|
||||
#define __LC_FPREGS_SAVE_AREA 0x160
|
||||
#define __LC_GPREGS_SAVE_AREA 0x180
|
||||
#define __LC_CREGS_SAVE_AREA 0x1C0
|
||||
#else /* __s390x__ */
|
||||
#define __LC_PFAULT_INTPARM 0x11B8
|
||||
#define __LC_FPREGS_SAVE_AREA 0x1200
|
||||
#define __LC_GPREGS_SAVE_AREA 0x1280
|
||||
#define __LC_PSW_SAVE_AREA 0x1300
|
||||
#define __LC_PREFIX_SAVE_AREA 0x1318
|
||||
#define __LC_FP_CREG_SAVE_AREA 0x131C
|
||||
#define __LC_TODREG_SAVE_AREA 0x1324
|
||||
#define __LC_CPU_TIMER_SAVE_AREA 0x1328
|
||||
#define __LC_CLOCK_COMP_SAVE_AREA 0x1331
|
||||
#define __LC_AREGS_SAVE_AREA 0x1340
|
||||
#define __LC_CREGS_SAVE_AREA 0x1380
|
||||
#endif /* __s390x__ */
|
||||
|
|
|
|||
33
include/asm-s390/monwriter.h
Normal file
33
include/asm-s390/monwriter.h
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* include/asm-s390/monwriter.h
|
||||
*
|
||||
* Copyright (C) IBM Corp. 2006
|
||||
* Character device driver for writing z/VM APPLDATA monitor records
|
||||
* Version 1.0
|
||||
* Author(s): Melissa Howland <melissah@us.ibm.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _ASM_390_MONWRITER_H
|
||||
#define _ASM_390_MONWRITER_H
|
||||
|
||||
/* mon_function values */
|
||||
#define MONWRITE_START_INTERVAL 0x00 /* start interval recording */
|
||||
#define MONWRITE_STOP_INTERVAL 0x01 /* stop interval or config recording */
|
||||
#define MONWRITE_GEN_EVENT 0x02 /* generate event record */
|
||||
#define MONWRITE_START_CONFIG 0x03 /* start configuration recording */
|
||||
|
||||
/* the header the app uses in its write() data */
|
||||
struct monwrite_hdr {
|
||||
unsigned char mon_function;
|
||||
unsigned short applid;
|
||||
unsigned char record_num;
|
||||
unsigned short version;
|
||||
unsigned short release;
|
||||
unsigned short mod_level;
|
||||
unsigned short datalen;
|
||||
unsigned char hdrlen;
|
||||
|
||||
} __attribute__((packed));
|
||||
|
||||
#endif /* _ASM_390_MONWRITER_H */
|
||||
|
|
@ -21,6 +21,16 @@
|
|||
|
||||
extern void diag10(unsigned long addr);
|
||||
|
||||
/*
|
||||
* Page allocation orders.
|
||||
*/
|
||||
#ifndef __s390x__
|
||||
# define PGD_ALLOC_ORDER 1
|
||||
#else /* __s390x__ */
|
||||
# define PMD_ALLOC_ORDER 2
|
||||
# define PGD_ALLOC_ORDER 2
|
||||
#endif /* __s390x__ */
|
||||
|
||||
/*
|
||||
* Allocate and free page tables. The xxx_kernel() versions are
|
||||
* used to allocate a kernel page table - this turns on ASN bits
|
||||
|
|
@ -29,30 +39,23 @@ extern void diag10(unsigned long addr);
|
|||
|
||||
static inline pgd_t *pgd_alloc(struct mm_struct *mm)
|
||||
{
|
||||
pgd_t *pgd;
|
||||
pgd_t *pgd = (pgd_t *) __get_free_pages(GFP_KERNEL, PGD_ALLOC_ORDER);
|
||||
int i;
|
||||
|
||||
if (!pgd)
|
||||
return NULL;
|
||||
for (i = 0; i < PTRS_PER_PGD; i++)
|
||||
#ifndef __s390x__
|
||||
pgd = (pgd_t *) __get_free_pages(GFP_KERNEL,1);
|
||||
if (pgd != NULL)
|
||||
for (i = 0; i < USER_PTRS_PER_PGD; i++)
|
||||
pmd_clear(pmd_offset(pgd + i, i*PGDIR_SIZE));
|
||||
#else /* __s390x__ */
|
||||
pgd = (pgd_t *) __get_free_pages(GFP_KERNEL,2);
|
||||
if (pgd != NULL)
|
||||
for (i = 0; i < PTRS_PER_PGD; i++)
|
||||
pgd_clear(pgd + i);
|
||||
#endif /* __s390x__ */
|
||||
pmd_clear(pmd_offset(pgd + i, i*PGDIR_SIZE));
|
||||
#else
|
||||
pgd_clear(pgd + i);
|
||||
#endif
|
||||
return pgd;
|
||||
}
|
||||
|
||||
static inline void pgd_free(pgd_t *pgd)
|
||||
{
|
||||
#ifndef __s390x__
|
||||
free_pages((unsigned long) pgd, 1);
|
||||
#else /* __s390x__ */
|
||||
free_pages((unsigned long) pgd, 2);
|
||||
#endif /* __s390x__ */
|
||||
free_pages((unsigned long) pgd, PGD_ALLOC_ORDER);
|
||||
}
|
||||
|
||||
#ifndef __s390x__
|
||||
|
|
@ -68,20 +71,19 @@ static inline void pgd_free(pgd_t *pgd)
|
|||
#else /* __s390x__ */
|
||||
static inline pmd_t * pmd_alloc_one(struct mm_struct *mm, unsigned long vmaddr)
|
||||
{
|
||||
pmd_t *pmd;
|
||||
int i;
|
||||
pmd_t *pmd = (pmd_t *) __get_free_pages(GFP_KERNEL, PMD_ALLOC_ORDER);
|
||||
int i;
|
||||
|
||||
pmd = (pmd_t *) __get_free_pages(GFP_KERNEL, 2);
|
||||
if (pmd != NULL) {
|
||||
for (i=0; i < PTRS_PER_PMD; i++)
|
||||
pmd_clear(pmd+i);
|
||||
}
|
||||
if (!pmd)
|
||||
return NULL;
|
||||
for (i=0; i < PTRS_PER_PMD; i++)
|
||||
pmd_clear(pmd + i);
|
||||
return pmd;
|
||||
}
|
||||
|
||||
static inline void pmd_free (pmd_t *pmd)
|
||||
{
|
||||
free_pages((unsigned long) pmd, 2);
|
||||
free_pages((unsigned long) pmd, PMD_ALLOC_ORDER);
|
||||
}
|
||||
|
||||
#define __pmd_free_tlb(tlb,pmd) \
|
||||
|
|
@ -123,15 +125,14 @@ pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *page)
|
|||
static inline pte_t *
|
||||
pte_alloc_one_kernel(struct mm_struct *mm, unsigned long vmaddr)
|
||||
{
|
||||
pte_t *pte;
|
||||
int i;
|
||||
pte_t *pte = (pte_t *) __get_free_page(GFP_KERNEL|__GFP_REPEAT);
|
||||
int i;
|
||||
|
||||
pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
|
||||
if (pte != NULL) {
|
||||
for (i=0; i < PTRS_PER_PTE; i++) {
|
||||
pte_clear(mm, vmaddr, pte+i);
|
||||
vmaddr += PAGE_SIZE;
|
||||
}
|
||||
if (!pte)
|
||||
return NULL;
|
||||
for (i=0; i < PTRS_PER_PTE; i++) {
|
||||
pte_clear(mm, vmaddr, pte + i);
|
||||
vmaddr += PAGE_SIZE;
|
||||
}
|
||||
return pte;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,19 +89,6 @@ extern char empty_zero_page[PAGE_SIZE];
|
|||
# define PTRS_PER_PGD 2048
|
||||
#endif /* __s390x__ */
|
||||
|
||||
/*
|
||||
* pgd entries used up by user/kernel:
|
||||
*/
|
||||
#ifndef __s390x__
|
||||
# define USER_PTRS_PER_PGD 512
|
||||
# define USER_PGD_PTRS 512
|
||||
# define KERNEL_PGD_PTRS 512
|
||||
#else /* __s390x__ */
|
||||
# define USER_PTRS_PER_PGD 2048
|
||||
# define USER_PGD_PTRS 2048
|
||||
# define KERNEL_PGD_PTRS 2048
|
||||
#endif /* __s390x__ */
|
||||
|
||||
#define FIRST_USER_ADDRESS 0
|
||||
|
||||
#define pte_ERROR(e) \
|
||||
|
|
@ -216,12 +203,14 @@ extern char empty_zero_page[PAGE_SIZE];
|
|||
#define _PAGE_RO 0x200 /* HW read-only */
|
||||
#define _PAGE_INVALID 0x400 /* HW invalid */
|
||||
|
||||
/* Mask and four different kinds of invalid pages. */
|
||||
#define _PAGE_INVALID_MASK 0x601
|
||||
#define _PAGE_INVALID_EMPTY 0x400
|
||||
#define _PAGE_INVALID_NONE 0x401
|
||||
#define _PAGE_INVALID_SWAP 0x600
|
||||
#define _PAGE_INVALID_FILE 0x601
|
||||
/* Mask and six different types of pages. */
|
||||
#define _PAGE_TYPE_MASK 0x601
|
||||
#define _PAGE_TYPE_EMPTY 0x400
|
||||
#define _PAGE_TYPE_NONE 0x401
|
||||
#define _PAGE_TYPE_SWAP 0x600
|
||||
#define _PAGE_TYPE_FILE 0x601
|
||||
#define _PAGE_TYPE_RO 0x200
|
||||
#define _PAGE_TYPE_RW 0x000
|
||||
|
||||
#ifndef __s390x__
|
||||
|
||||
|
|
@ -280,15 +269,14 @@ extern char empty_zero_page[PAGE_SIZE];
|
|||
#endif /* __s390x__ */
|
||||
|
||||
/*
|
||||
* No mapping available
|
||||
* Page protection definitions.
|
||||
*/
|
||||
#define PAGE_NONE_SHARED __pgprot(_PAGE_INVALID_NONE)
|
||||
#define PAGE_NONE_PRIVATE __pgprot(_PAGE_INVALID_NONE)
|
||||
#define PAGE_RO_SHARED __pgprot(_PAGE_RO)
|
||||
#define PAGE_RO_PRIVATE __pgprot(_PAGE_RO)
|
||||
#define PAGE_COPY __pgprot(_PAGE_RO)
|
||||
#define PAGE_SHARED __pgprot(0)
|
||||
#define PAGE_KERNEL __pgprot(0)
|
||||
#define PAGE_NONE __pgprot(_PAGE_TYPE_NONE)
|
||||
#define PAGE_RO __pgprot(_PAGE_TYPE_RO)
|
||||
#define PAGE_RW __pgprot(_PAGE_TYPE_RW)
|
||||
|
||||
#define PAGE_KERNEL PAGE_RW
|
||||
#define PAGE_COPY PAGE_RO
|
||||
|
||||
/*
|
||||
* The S390 can't do page protection for execute, and considers that the
|
||||
|
|
@ -296,23 +284,23 @@ extern char empty_zero_page[PAGE_SIZE];
|
|||
* the closest we can get..
|
||||
*/
|
||||
/*xwr*/
|
||||
#define __P000 PAGE_NONE_PRIVATE
|
||||
#define __P001 PAGE_RO_PRIVATE
|
||||
#define __P010 PAGE_COPY
|
||||
#define __P011 PAGE_COPY
|
||||
#define __P100 PAGE_RO_PRIVATE
|
||||
#define __P101 PAGE_RO_PRIVATE
|
||||
#define __P110 PAGE_COPY
|
||||
#define __P111 PAGE_COPY
|
||||
#define __P000 PAGE_NONE
|
||||
#define __P001 PAGE_RO
|
||||
#define __P010 PAGE_RO
|
||||
#define __P011 PAGE_RO
|
||||
#define __P100 PAGE_RO
|
||||
#define __P101 PAGE_RO
|
||||
#define __P110 PAGE_RO
|
||||
#define __P111 PAGE_RO
|
||||
|
||||
#define __S000 PAGE_NONE_SHARED
|
||||
#define __S001 PAGE_RO_SHARED
|
||||
#define __S010 PAGE_SHARED
|
||||
#define __S011 PAGE_SHARED
|
||||
#define __S100 PAGE_RO_SHARED
|
||||
#define __S101 PAGE_RO_SHARED
|
||||
#define __S110 PAGE_SHARED
|
||||
#define __S111 PAGE_SHARED
|
||||
#define __S000 PAGE_NONE
|
||||
#define __S001 PAGE_RO
|
||||
#define __S010 PAGE_RW
|
||||
#define __S011 PAGE_RW
|
||||
#define __S100 PAGE_RO
|
||||
#define __S101 PAGE_RO
|
||||
#define __S110 PAGE_RW
|
||||
#define __S111 PAGE_RW
|
||||
|
||||
/*
|
||||
* Certain architectures need to do special things when PTEs
|
||||
|
|
@ -377,18 +365,18 @@ static inline int pmd_bad(pmd_t pmd)
|
|||
|
||||
static inline int pte_none(pte_t pte)
|
||||
{
|
||||
return (pte_val(pte) & _PAGE_INVALID_MASK) == _PAGE_INVALID_EMPTY;
|
||||
return (pte_val(pte) & _PAGE_TYPE_MASK) == _PAGE_TYPE_EMPTY;
|
||||
}
|
||||
|
||||
static inline int pte_present(pte_t pte)
|
||||
{
|
||||
return !(pte_val(pte) & _PAGE_INVALID) ||
|
||||
(pte_val(pte) & _PAGE_INVALID_MASK) == _PAGE_INVALID_NONE;
|
||||
(pte_val(pte) & _PAGE_TYPE_MASK) == _PAGE_TYPE_NONE;
|
||||
}
|
||||
|
||||
static inline int pte_file(pte_t pte)
|
||||
{
|
||||
return (pte_val(pte) & _PAGE_INVALID_MASK) == _PAGE_INVALID_FILE;
|
||||
return (pte_val(pte) & _PAGE_TYPE_MASK) == _PAGE_TYPE_FILE;
|
||||
}
|
||||
|
||||
#define pte_same(a,b) (pte_val(a) == pte_val(b))
|
||||
|
|
@ -461,7 +449,7 @@ static inline void pmd_clear(pmd_t * pmdp)
|
|||
|
||||
static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
|
||||
{
|
||||
pte_val(*ptep) = _PAGE_INVALID_EMPTY;
|
||||
pte_val(*ptep) = _PAGE_TYPE_EMPTY;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -477,7 +465,7 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
|||
|
||||
static inline pte_t pte_wrprotect(pte_t pte)
|
||||
{
|
||||
/* Do not clobber _PAGE_INVALID_NONE pages! */
|
||||
/* Do not clobber _PAGE_TYPE_NONE pages! */
|
||||
if (!(pte_val(pte) & _PAGE_INVALID))
|
||||
pte_val(pte) |= _PAGE_RO;
|
||||
return pte;
|
||||
|
|
@ -556,26 +544,30 @@ static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
|
|||
return pte;
|
||||
}
|
||||
|
||||
static inline void __ptep_ipte(unsigned long address, pte_t *ptep)
|
||||
{
|
||||
if (!(pte_val(*ptep) & _PAGE_INVALID)) {
|
||||
#ifndef __s390x__
|
||||
/* S390 has 1mb segments, we are emulating 4MB segments */
|
||||
pte_t *pto = (pte_t *) (((unsigned long) ptep) & 0x7ffffc00);
|
||||
#else
|
||||
/* ipte in zarch mode can do the math */
|
||||
pte_t *pto = ptep;
|
||||
#endif
|
||||
asm volatile ("ipte %2,%3"
|
||||
: "=m" (*ptep) : "m" (*ptep),
|
||||
"a" (pto), "a" (address) );
|
||||
}
|
||||
pte_val(*ptep) = _PAGE_TYPE_EMPTY;
|
||||
}
|
||||
|
||||
static inline pte_t
|
||||
ptep_clear_flush(struct vm_area_struct *vma,
|
||||
unsigned long address, pte_t *ptep)
|
||||
{
|
||||
pte_t pte = *ptep;
|
||||
#ifndef __s390x__
|
||||
if (!(pte_val(pte) & _PAGE_INVALID)) {
|
||||
/* S390 has 1mb segments, we are emulating 4MB segments */
|
||||
pte_t *pto = (pte_t *) (((unsigned long) ptep) & 0x7ffffc00);
|
||||
__asm__ __volatile__ ("ipte %2,%3"
|
||||
: "=m" (*ptep) : "m" (*ptep),
|
||||
"a" (pto), "a" (address) );
|
||||
}
|
||||
#else /* __s390x__ */
|
||||
if (!(pte_val(pte) & _PAGE_INVALID))
|
||||
__asm__ __volatile__ ("ipte %2,%3"
|
||||
: "=m" (*ptep) : "m" (*ptep),
|
||||
"a" (ptep), "a" (address) );
|
||||
#endif /* __s390x__ */
|
||||
pte_val(*ptep) = _PAGE_INVALID_EMPTY;
|
||||
|
||||
__ptep_ipte(address, ptep);
|
||||
return pte;
|
||||
}
|
||||
|
||||
|
|
@ -755,7 +747,7 @@ static inline pte_t mk_swap_pte(unsigned long type, unsigned long offset)
|
|||
{
|
||||
pte_t pte;
|
||||
offset &= __SWP_OFFSET_MASK;
|
||||
pte_val(pte) = _PAGE_INVALID_SWAP | ((type & 0x1f) << 2) |
|
||||
pte_val(pte) = _PAGE_TYPE_SWAP | ((type & 0x1f) << 2) |
|
||||
((offset & 1UL) << 7) | ((offset & ~1UL) << 11);
|
||||
return pte;
|
||||
}
|
||||
|
|
@ -778,7 +770,7 @@ static inline pte_t mk_swap_pte(unsigned long type, unsigned long offset)
|
|||
|
||||
#define pgoff_to_pte(__off) \
|
||||
((pte_t) { ((((__off) & 0x7f) << 1) + (((__off) >> 7) << 12)) \
|
||||
| _PAGE_INVALID_FILE })
|
||||
| _PAGE_TYPE_FILE })
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
|
|
|
|||
|
|
@ -339,4 +339,21 @@ int unregister_idle_notifier(struct notifier_block *nb);
|
|||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Helper macro for exception table entries
|
||||
*/
|
||||
#ifndef __s390x__
|
||||
#define EX_TABLE(_fault,_target) \
|
||||
".section __ex_table,\"a\"\n" \
|
||||
" .align 4\n" \
|
||||
" .long " #_fault "," #_target "\n" \
|
||||
".previous\n"
|
||||
#else
|
||||
#define EX_TABLE(_fault,_target) \
|
||||
".section __ex_table,\"a\"\n" \
|
||||
" .align 8\n" \
|
||||
" .quad " #_fault "," #_target "\n" \
|
||||
".previous\n"
|
||||
#endif
|
||||
|
||||
#endif /* __ASM_S390_PROCESSOR_H */
|
||||
|
|
|
|||
|
|
@ -14,8 +14,6 @@
|
|||
|
||||
#define PARMAREA 0x10400
|
||||
#define COMMAND_LINE_SIZE 896
|
||||
#define RAMDISK_ORIGIN 0x800000
|
||||
#define RAMDISK_SIZE 0x800000
|
||||
#define MEMORY_CHUNKS 16 /* max 0x7fff */
|
||||
#define IPL_PARMBLOCK_ORIGIN 0x2000
|
||||
|
||||
|
|
@ -46,10 +44,12 @@ extern unsigned long machine_flags;
|
|||
#define MACHINE_HAS_IEEE (machine_flags & 2)
|
||||
#define MACHINE_HAS_CSP (machine_flags & 8)
|
||||
#define MACHINE_HAS_DIAG44 (1)
|
||||
#define MACHINE_HAS_MVCOS (0)
|
||||
#else /* __s390x__ */
|
||||
#define MACHINE_HAS_IEEE (1)
|
||||
#define MACHINE_HAS_CSP (1)
|
||||
#define MACHINE_HAS_DIAG44 (machine_flags & 32)
|
||||
#define MACHINE_HAS_MVCOS (machine_flags & 512)
|
||||
#endif /* __s390x__ */
|
||||
|
||||
|
||||
|
|
@ -70,52 +70,76 @@ extern unsigned int console_irq;
|
|||
#define SET_CONSOLE_3215 do { console_mode = 2; } while (0)
|
||||
#define SET_CONSOLE_3270 do { console_mode = 3; } while (0)
|
||||
|
||||
struct ipl_list_header {
|
||||
u32 length;
|
||||
u8 reserved[3];
|
||||
|
||||
struct ipl_list_hdr {
|
||||
u32 len;
|
||||
u8 reserved1[3];
|
||||
u8 version;
|
||||
u32 blk0_len;
|
||||
u8 pbt;
|
||||
u8 flags;
|
||||
u16 reserved2;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct ipl_block_fcp {
|
||||
u32 length;
|
||||
u8 pbt;
|
||||
u8 reserved1[322-1];
|
||||
u8 reserved1[313-1];
|
||||
u8 opt;
|
||||
u8 reserved2[3];
|
||||
u16 reserved3;
|
||||
u16 devno;
|
||||
u8 reserved2[4];
|
||||
u8 reserved4[4];
|
||||
u64 wwpn;
|
||||
u64 lun;
|
||||
u32 bootprog;
|
||||
u8 reserved3[12];
|
||||
u8 reserved5[12];
|
||||
u64 br_lba;
|
||||
u32 scp_data_len;
|
||||
u8 reserved4[260];
|
||||
u8 reserved6[260];
|
||||
u8 scp_data[];
|
||||
} __attribute__((packed));
|
||||
|
||||
struct ipl_parameter_block {
|
||||
union {
|
||||
u32 length;
|
||||
struct ipl_list_header header;
|
||||
} hdr;
|
||||
struct ipl_block_fcp fcp;
|
||||
struct ipl_block_ccw {
|
||||
u8 load_param[8];
|
||||
u8 reserved1[84];
|
||||
u8 reserved2[2];
|
||||
u16 devno;
|
||||
u8 vm_flags;
|
||||
u8 reserved3[3];
|
||||
u32 vm_parm_len;
|
||||
} __attribute__((packed));
|
||||
|
||||
#define IPL_MAX_SUPPORTED_VERSION (0)
|
||||
struct ipl_parameter_block {
|
||||
struct ipl_list_hdr hdr;
|
||||
union {
|
||||
struct ipl_block_fcp fcp;
|
||||
struct ipl_block_ccw ccw;
|
||||
} ipl_info;
|
||||
} __attribute__((packed));
|
||||
|
||||
#define IPL_TYPE_FCP (0)
|
||||
#define IPL_PARM_BLK_FCP_LEN (sizeof(struct ipl_list_hdr) + \
|
||||
sizeof(struct ipl_block_fcp))
|
||||
|
||||
#define IPL_PARM_BLK_CCW_LEN (sizeof(struct ipl_list_hdr) + \
|
||||
sizeof(struct ipl_block_ccw))
|
||||
|
||||
#define IPL_MAX_SUPPORTED_VERSION (0)
|
||||
|
||||
/*
|
||||
* IPL validity flags and parameters as detected in head.S
|
||||
*/
|
||||
extern u32 ipl_parameter_flags;
|
||||
extern u32 ipl_flags;
|
||||
extern u16 ipl_devno;
|
||||
|
||||
#define IPL_DEVNO_VALID (ipl_parameter_flags & 1)
|
||||
#define IPL_PARMBLOCK_VALID (ipl_parameter_flags & 2)
|
||||
void do_reipl(void);
|
||||
|
||||
enum {
|
||||
IPL_DEVNO_VALID = 1,
|
||||
IPL_PARMBLOCK_VALID = 2,
|
||||
};
|
||||
|
||||
#define IPL_PARMBLOCK_START ((struct ipl_parameter_block *) \
|
||||
IPL_PARMBLOCK_ORIGIN)
|
||||
#define IPL_PARMBLOCK_SIZE (IPL_PARMBLOCK_START->hdr.length)
|
||||
#define IPL_PARMBLOCK_SIZE (IPL_PARMBLOCK_START->hdr.len)
|
||||
|
||||
#else /* __ASSEMBLY__ */
|
||||
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ smp_call_function_on(void (*func) (void *info), void *info,
|
|||
#define smp_cpu_not_running(cpu) 1
|
||||
#define smp_get_cpu(cpu) ({ 0; })
|
||||
#define smp_put_cpu(cpu) ({ 0; })
|
||||
#define smp_setup_cpu_possible_map()
|
||||
#define smp_setup_cpu_possible_map() do { } while (0)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
S390_lowcore.user_asce : S390_lowcore.kernel_asce; \
|
||||
asm volatile ("lctlg 7,7,%0" : : "m" (__pto) ); \
|
||||
})
|
||||
#else
|
||||
#else /* __s390x__ */
|
||||
#define set_fs(x) \
|
||||
({ \
|
||||
unsigned long __pto; \
|
||||
|
|
@ -56,7 +56,7 @@
|
|||
S390_lowcore.user_asce : S390_lowcore.kernel_asce; \
|
||||
asm volatile ("lctl 7,7,%0" : : "m" (__pto) ); \
|
||||
})
|
||||
#endif
|
||||
#endif /* __s390x__ */
|
||||
|
||||
#define segment_eq(a,b) ((a).ar4 == (b).ar4)
|
||||
|
||||
|
|
@ -85,76 +85,51 @@ struct exception_table_entry
|
|||
unsigned long insn, fixup;
|
||||
};
|
||||
|
||||
#ifndef __s390x__
|
||||
#define __uaccess_fixup \
|
||||
".section .fixup,\"ax\"\n" \
|
||||
"2: lhi %0,%4\n" \
|
||||
" bras 1,3f\n" \
|
||||
" .long 1b\n" \
|
||||
"3: l 1,0(1)\n" \
|
||||
" br 1\n" \
|
||||
".previous\n" \
|
||||
".section __ex_table,\"a\"\n" \
|
||||
" .align 4\n" \
|
||||
" .long 0b,2b\n" \
|
||||
".previous"
|
||||
#define __uaccess_clobber "cc", "1"
|
||||
#else /* __s390x__ */
|
||||
#define __uaccess_fixup \
|
||||
".section .fixup,\"ax\"\n" \
|
||||
"2: lghi %0,%4\n" \
|
||||
" jg 1b\n" \
|
||||
".previous\n" \
|
||||
".section __ex_table,\"a\"\n" \
|
||||
" .align 8\n" \
|
||||
" .quad 0b,2b\n" \
|
||||
".previous"
|
||||
#define __uaccess_clobber "cc"
|
||||
#endif /* __s390x__ */
|
||||
struct uaccess_ops {
|
||||
size_t (*copy_from_user)(size_t, const void __user *, void *);
|
||||
size_t (*copy_from_user_small)(size_t, const void __user *, void *);
|
||||
size_t (*copy_to_user)(size_t, void __user *, const void *);
|
||||
size_t (*copy_to_user_small)(size_t, void __user *, const void *);
|
||||
size_t (*copy_in_user)(size_t, void __user *, const void __user *);
|
||||
size_t (*clear_user)(size_t, void __user *);
|
||||
size_t (*strnlen_user)(size_t, const char __user *);
|
||||
size_t (*strncpy_from_user)(size_t, const char __user *, char *);
|
||||
int (*futex_atomic_op)(int op, int __user *, int oparg, int *old);
|
||||
int (*futex_atomic_cmpxchg)(int __user *, int old, int new);
|
||||
};
|
||||
|
||||
extern struct uaccess_ops uaccess;
|
||||
extern struct uaccess_ops uaccess_std;
|
||||
extern struct uaccess_ops uaccess_mvcos;
|
||||
|
||||
static inline int __put_user_fn(size_t size, void __user *ptr, void *x)
|
||||
{
|
||||
size = uaccess.copy_to_user_small(size, ptr, x);
|
||||
return size ? -EFAULT : size;
|
||||
}
|
||||
|
||||
static inline int __get_user_fn(size_t size, const void __user *ptr, void *x)
|
||||
{
|
||||
size = uaccess.copy_from_user_small(size, ptr, x);
|
||||
return size ? -EFAULT : size;
|
||||
}
|
||||
|
||||
/*
|
||||
* These are the main single-value transfer routines. They automatically
|
||||
* use the right size if we just have the right pointer type.
|
||||
*/
|
||||
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2)
|
||||
#define __put_user_asm(x, ptr, err) \
|
||||
({ \
|
||||
err = 0; \
|
||||
asm volatile( \
|
||||
"0: mvcs 0(%1,%2),%3,%0\n" \
|
||||
"1:\n" \
|
||||
__uaccess_fixup \
|
||||
: "+&d" (err) \
|
||||
: "d" (sizeof(*(ptr))), "a" (ptr), "Q" (x), \
|
||||
"K" (-EFAULT) \
|
||||
: __uaccess_clobber ); \
|
||||
})
|
||||
#else
|
||||
#define __put_user_asm(x, ptr, err) \
|
||||
({ \
|
||||
err = 0; \
|
||||
asm volatile( \
|
||||
"0: mvcs 0(%1,%2),0(%3),%0\n" \
|
||||
"1:\n" \
|
||||
__uaccess_fixup \
|
||||
: "+&d" (err) \
|
||||
: "d" (sizeof(*(ptr))), "a" (ptr), "a" (&(x)), \
|
||||
"K" (-EFAULT), "m" (x) \
|
||||
: __uaccess_clobber ); \
|
||||
})
|
||||
#endif
|
||||
|
||||
#define __put_user(x, ptr) \
|
||||
({ \
|
||||
__typeof__(*(ptr)) __x = (x); \
|
||||
int __pu_err; \
|
||||
int __pu_err = -EFAULT; \
|
||||
__chk_user_ptr(ptr); \
|
||||
switch (sizeof (*(ptr))) { \
|
||||
case 1: \
|
||||
case 2: \
|
||||
case 4: \
|
||||
case 8: \
|
||||
__put_user_asm(__x, ptr, __pu_err); \
|
||||
__pu_err = __put_user_fn(sizeof (*(ptr)), \
|
||||
ptr, &__x); \
|
||||
break; \
|
||||
default: \
|
||||
__put_user_bad(); \
|
||||
|
|
@ -172,60 +147,36 @@ struct exception_table_entry
|
|||
|
||||
extern int __put_user_bad(void) __attribute__((noreturn));
|
||||
|
||||
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2)
|
||||
#define __get_user_asm(x, ptr, err) \
|
||||
({ \
|
||||
err = 0; \
|
||||
asm volatile ( \
|
||||
"0: mvcp %O1(%2,%R1),0(%3),%0\n" \
|
||||
"1:\n" \
|
||||
__uaccess_fixup \
|
||||
: "+&d" (err), "=Q" (x) \
|
||||
: "d" (sizeof(*(ptr))), "a" (ptr), \
|
||||
"K" (-EFAULT) \
|
||||
: __uaccess_clobber ); \
|
||||
})
|
||||
#else
|
||||
#define __get_user_asm(x, ptr, err) \
|
||||
({ \
|
||||
err = 0; \
|
||||
asm volatile ( \
|
||||
"0: mvcp 0(%2,%5),0(%3),%0\n" \
|
||||
"1:\n" \
|
||||
__uaccess_fixup \
|
||||
: "+&d" (err), "=m" (x) \
|
||||
: "d" (sizeof(*(ptr))), "a" (ptr), \
|
||||
"K" (-EFAULT), "a" (&(x)) \
|
||||
: __uaccess_clobber ); \
|
||||
})
|
||||
#endif
|
||||
|
||||
#define __get_user(x, ptr) \
|
||||
({ \
|
||||
int __gu_err; \
|
||||
__chk_user_ptr(ptr); \
|
||||
int __gu_err = -EFAULT; \
|
||||
__chk_user_ptr(ptr); \
|
||||
switch (sizeof(*(ptr))) { \
|
||||
case 1: { \
|
||||
unsigned char __x; \
|
||||
__get_user_asm(__x, ptr, __gu_err); \
|
||||
__gu_err = __get_user_fn(sizeof (*(ptr)), \
|
||||
ptr, &__x); \
|
||||
(x) = *(__force __typeof__(*(ptr)) *) &__x; \
|
||||
break; \
|
||||
}; \
|
||||
case 2: { \
|
||||
unsigned short __x; \
|
||||
__get_user_asm(__x, ptr, __gu_err); \
|
||||
__gu_err = __get_user_fn(sizeof (*(ptr)), \
|
||||
ptr, &__x); \
|
||||
(x) = *(__force __typeof__(*(ptr)) *) &__x; \
|
||||
break; \
|
||||
}; \
|
||||
case 4: { \
|
||||
unsigned int __x; \
|
||||
__get_user_asm(__x, ptr, __gu_err); \
|
||||
__gu_err = __get_user_fn(sizeof (*(ptr)), \
|
||||
ptr, &__x); \
|
||||
(x) = *(__force __typeof__(*(ptr)) *) &__x; \
|
||||
break; \
|
||||
}; \
|
||||
case 8: { \
|
||||
unsigned long long __x; \
|
||||
__get_user_asm(__x, ptr, __gu_err); \
|
||||
__gu_err = __get_user_fn(sizeof (*(ptr)), \
|
||||
ptr, &__x); \
|
||||
(x) = *(__force __typeof__(*(ptr)) *) &__x; \
|
||||
break; \
|
||||
}; \
|
||||
|
|
@ -247,8 +198,6 @@ extern int __get_user_bad(void) __attribute__((noreturn));
|
|||
#define __put_user_unaligned __put_user
|
||||
#define __get_user_unaligned __get_user
|
||||
|
||||
extern long __copy_to_user_asm(const void *from, long n, void __user *to);
|
||||
|
||||
/**
|
||||
* __copy_to_user: - Copy a block of data into user space, with less checking.
|
||||
* @to: Destination address, in user space.
|
||||
|
|
@ -266,7 +215,10 @@ extern long __copy_to_user_asm(const void *from, long n, void __user *to);
|
|||
static inline unsigned long
|
||||
__copy_to_user(void __user *to, const void *from, unsigned long n)
|
||||
{
|
||||
return __copy_to_user_asm(from, n, to);
|
||||
if (__builtin_constant_p(n) && (n <= 256))
|
||||
return uaccess.copy_to_user_small(n, to, from);
|
||||
else
|
||||
return uaccess.copy_to_user(n, to, from);
|
||||
}
|
||||
|
||||
#define __copy_to_user_inatomic __copy_to_user
|
||||
|
|
@ -294,8 +246,6 @@ copy_to_user(void __user *to, const void *from, unsigned long n)
|
|||
return n;
|
||||
}
|
||||
|
||||
extern long __copy_from_user_asm(void *to, long n, const void __user *from);
|
||||
|
||||
/**
|
||||
* __copy_from_user: - Copy a block of data from user space, with less checking.
|
||||
* @to: Destination address, in kernel space.
|
||||
|
|
@ -316,7 +266,10 @@ extern long __copy_from_user_asm(void *to, long n, const void __user *from);
|
|||
static inline unsigned long
|
||||
__copy_from_user(void *to, const void __user *from, unsigned long n)
|
||||
{
|
||||
return __copy_from_user_asm(to, n, from);
|
||||
if (__builtin_constant_p(n) && (n <= 256))
|
||||
return uaccess.copy_from_user_small(n, from, to);
|
||||
else
|
||||
return uaccess.copy_from_user(n, from, to);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -346,13 +299,10 @@ copy_from_user(void *to, const void __user *from, unsigned long n)
|
|||
return n;
|
||||
}
|
||||
|
||||
extern unsigned long __copy_in_user_asm(const void __user *from, long n,
|
||||
void __user *to);
|
||||
|
||||
static inline unsigned long
|
||||
__copy_in_user(void __user *to, const void __user *from, unsigned long n)
|
||||
{
|
||||
return __copy_in_user_asm(from, n, to);
|
||||
return uaccess.copy_in_user(n, to, from);
|
||||
}
|
||||
|
||||
static inline unsigned long
|
||||
|
|
@ -360,34 +310,28 @@ copy_in_user(void __user *to, const void __user *from, unsigned long n)
|
|||
{
|
||||
might_sleep();
|
||||
if (__access_ok(from,n) && __access_ok(to,n))
|
||||
n = __copy_in_user_asm(from, n, to);
|
||||
n = __copy_in_user(to, from, n);
|
||||
return n;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy a null terminated string from userspace.
|
||||
*/
|
||||
extern long __strncpy_from_user_asm(long count, char *dst,
|
||||
const char __user *src);
|
||||
|
||||
static inline long
|
||||
strncpy_from_user(char *dst, const char __user *src, long count)
|
||||
{
|
||||
long res = -EFAULT;
|
||||
might_sleep();
|
||||
if (access_ok(VERIFY_READ, src, 1))
|
||||
res = __strncpy_from_user_asm(count, dst, src);
|
||||
res = uaccess.strncpy_from_user(count, src, dst);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
extern long __strnlen_user_asm(long count, const char __user *src);
|
||||
|
||||
static inline unsigned long
|
||||
strnlen_user(const char __user * src, unsigned long n)
|
||||
{
|
||||
might_sleep();
|
||||
return __strnlen_user_asm(n, src);
|
||||
return uaccess.strnlen_user(n, src);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -410,12 +354,10 @@ strnlen_user(const char __user * src, unsigned long n)
|
|||
* Zero Userspace
|
||||
*/
|
||||
|
||||
extern long __clear_user_asm(void __user *to, long n);
|
||||
|
||||
static inline unsigned long
|
||||
__clear_user(void __user *to, unsigned long n)
|
||||
{
|
||||
return __clear_user_asm(to, n);
|
||||
return uaccess.clear_user(n, to);
|
||||
}
|
||||
|
||||
static inline unsigned long
|
||||
|
|
@ -423,7 +365,7 @@ clear_user(void __user *to, unsigned long n)
|
|||
{
|
||||
might_sleep();
|
||||
if (access_ok(VERIFY_WRITE, to, n))
|
||||
n = __clear_user_asm(to, n);
|
||||
n = uaccess.clear_user(n, to);
|
||||
return n;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,17 +25,12 @@
|
|||
#define __NR_unlink 10
|
||||
#define __NR_execve 11
|
||||
#define __NR_chdir 12
|
||||
#define __NR_time 13
|
||||
#define __NR_mknod 14
|
||||
#define __NR_chmod 15
|
||||
#define __NR_lchown 16
|
||||
#define __NR_lseek 19
|
||||
#define __NR_getpid 20
|
||||
#define __NR_mount 21
|
||||
#define __NR_umount 22
|
||||
#define __NR_setuid 23
|
||||
#define __NR_getuid 24
|
||||
#define __NR_stime 25
|
||||
#define __NR_ptrace 26
|
||||
#define __NR_alarm 27
|
||||
#define __NR_pause 29
|
||||
|
|
@ -51,11 +46,7 @@
|
|||
#define __NR_pipe 42
|
||||
#define __NR_times 43
|
||||
#define __NR_brk 45
|
||||
#define __NR_setgid 46
|
||||
#define __NR_getgid 47
|
||||
#define __NR_signal 48
|
||||
#define __NR_geteuid 49
|
||||
#define __NR_getegid 50
|
||||
#define __NR_acct 51
|
||||
#define __NR_umount2 52
|
||||
#define __NR_ioctl 54
|
||||
|
|
@ -69,18 +60,13 @@
|
|||
#define __NR_getpgrp 65
|
||||
#define __NR_setsid 66
|
||||
#define __NR_sigaction 67
|
||||
#define __NR_setreuid 70
|
||||
#define __NR_setregid 71
|
||||
#define __NR_sigsuspend 72
|
||||
#define __NR_sigpending 73
|
||||
#define __NR_sethostname 74
|
||||
#define __NR_setrlimit 75
|
||||
#define __NR_getrlimit 76
|
||||
#define __NR_getrusage 77
|
||||
#define __NR_gettimeofday 78
|
||||
#define __NR_settimeofday 79
|
||||
#define __NR_getgroups 80
|
||||
#define __NR_setgroups 81
|
||||
#define __NR_symlink 83
|
||||
#define __NR_readlink 85
|
||||
#define __NR_uselib 86
|
||||
|
|
@ -92,12 +78,10 @@
|
|||
#define __NR_truncate 92
|
||||
#define __NR_ftruncate 93
|
||||
#define __NR_fchmod 94
|
||||
#define __NR_fchown 95
|
||||
#define __NR_getpriority 96
|
||||
#define __NR_setpriority 97
|
||||
#define __NR_statfs 99
|
||||
#define __NR_fstatfs 100
|
||||
#define __NR_ioperm 101
|
||||
#define __NR_socketcall 102
|
||||
#define __NR_syslog 103
|
||||
#define __NR_setitimer 104
|
||||
|
|
@ -131,11 +115,7 @@
|
|||
#define __NR_sysfs 135
|
||||
#define __NR_personality 136
|
||||
#define __NR_afs_syscall 137 /* Syscall for Andrew File System */
|
||||
#define __NR_setfsuid 138
|
||||
#define __NR_setfsgid 139
|
||||
#define __NR__llseek 140
|
||||
#define __NR_getdents 141
|
||||
#define __NR__newselect 142
|
||||
#define __NR_flock 143
|
||||
#define __NR_msync 144
|
||||
#define __NR_readv 145
|
||||
|
|
@ -157,13 +137,9 @@
|
|||
#define __NR_sched_rr_get_interval 161
|
||||
#define __NR_nanosleep 162
|
||||
#define __NR_mremap 163
|
||||
#define __NR_setresuid 164
|
||||
#define __NR_getresuid 165
|
||||
#define __NR_query_module 167
|
||||
#define __NR_poll 168
|
||||
#define __NR_nfsservctl 169
|
||||
#define __NR_setresgid 170
|
||||
#define __NR_getresgid 171
|
||||
#define __NR_prctl 172
|
||||
#define __NR_rt_sigreturn 173
|
||||
#define __NR_rt_sigaction 174
|
||||
|
|
@ -174,7 +150,6 @@
|
|||
#define __NR_rt_sigsuspend 179
|
||||
#define __NR_pread64 180
|
||||
#define __NR_pwrite64 181
|
||||
#define __NR_chown 182
|
||||
#define __NR_getcwd 183
|
||||
#define __NR_capget 184
|
||||
#define __NR_capset 185
|
||||
|
|
@ -183,39 +158,11 @@
|
|||
#define __NR_getpmsg 188
|
||||
#define __NR_putpmsg 189
|
||||
#define __NR_vfork 190
|
||||
#define __NR_ugetrlimit 191 /* SuS compliant getrlimit */
|
||||
#define __NR_mmap2 192
|
||||
#define __NR_truncate64 193
|
||||
#define __NR_ftruncate64 194
|
||||
#define __NR_stat64 195
|
||||
#define __NR_lstat64 196
|
||||
#define __NR_fstat64 197
|
||||
#define __NR_lchown32 198
|
||||
#define __NR_getuid32 199
|
||||
#define __NR_getgid32 200
|
||||
#define __NR_geteuid32 201
|
||||
#define __NR_getegid32 202
|
||||
#define __NR_setreuid32 203
|
||||
#define __NR_setregid32 204
|
||||
#define __NR_getgroups32 205
|
||||
#define __NR_setgroups32 206
|
||||
#define __NR_fchown32 207
|
||||
#define __NR_setresuid32 208
|
||||
#define __NR_getresuid32 209
|
||||
#define __NR_setresgid32 210
|
||||
#define __NR_getresgid32 211
|
||||
#define __NR_chown32 212
|
||||
#define __NR_setuid32 213
|
||||
#define __NR_setgid32 214
|
||||
#define __NR_setfsuid32 215
|
||||
#define __NR_setfsgid32 216
|
||||
#define __NR_pivot_root 217
|
||||
#define __NR_mincore 218
|
||||
#define __NR_madvise 219
|
||||
#define __NR_getdents64 220
|
||||
#define __NR_fcntl64 221
|
||||
#define __NR_readahead 222
|
||||
#define __NR_sendfile64 223
|
||||
#define __NR_setxattr 224
|
||||
#define __NR_lsetxattr 225
|
||||
#define __NR_fsetxattr 226
|
||||
|
|
@ -256,7 +203,6 @@
|
|||
#define __NR_clock_getres (__NR_timer_create+7)
|
||||
#define __NR_clock_nanosleep (__NR_timer_create+8)
|
||||
/* Number 263 is reserved for vserver */
|
||||
#define __NR_fadvise64_64 264
|
||||
#define __NR_statfs64 265
|
||||
#define __NR_fstatfs64 266
|
||||
#define __NR_remap_file_pages 267
|
||||
|
|
@ -285,7 +231,6 @@
|
|||
#define __NR_mknodat 290
|
||||
#define __NR_fchownat 291
|
||||
#define __NR_futimesat 292
|
||||
#define __NR_fstatat64 293
|
||||
#define __NR_unlinkat 294
|
||||
#define __NR_renameat 295
|
||||
#define __NR_linkat 296
|
||||
|
|
@ -310,62 +255,65 @@
|
|||
* have a different name although they do the same (e.g. __NR_chown32
|
||||
* is __NR_chown on 64 bit).
|
||||
*/
|
||||
#ifdef __s390x__
|
||||
#undef __NR_time
|
||||
#undef __NR_lchown
|
||||
#undef __NR_setuid
|
||||
#undef __NR_getuid
|
||||
#undef __NR_stime
|
||||
#undef __NR_setgid
|
||||
#undef __NR_getgid
|
||||
#undef __NR_geteuid
|
||||
#undef __NR_getegid
|
||||
#undef __NR_setreuid
|
||||
#undef __NR_setregid
|
||||
#undef __NR_getrlimit
|
||||
#undef __NR_getgroups
|
||||
#undef __NR_setgroups
|
||||
#undef __NR_fchown
|
||||
#undef __NR_ioperm
|
||||
#undef __NR_setfsuid
|
||||
#undef __NR_setfsgid
|
||||
#undef __NR__llseek
|
||||
#undef __NR__newselect
|
||||
#undef __NR_setresuid
|
||||
#undef __NR_getresuid
|
||||
#undef __NR_setresgid
|
||||
#undef __NR_getresgid
|
||||
#undef __NR_chown
|
||||
#undef __NR_ugetrlimit
|
||||
#undef __NR_mmap2
|
||||
#undef __NR_truncate64
|
||||
#undef __NR_ftruncate64
|
||||
#undef __NR_stat64
|
||||
#undef __NR_lstat64
|
||||
#undef __NR_fstat64
|
||||
#undef __NR_lchown32
|
||||
#undef __NR_getuid32
|
||||
#undef __NR_getgid32
|
||||
#undef __NR_geteuid32
|
||||
#undef __NR_getegid32
|
||||
#undef __NR_setreuid32
|
||||
#undef __NR_setregid32
|
||||
#undef __NR_getgroups32
|
||||
#undef __NR_setgroups32
|
||||
#undef __NR_fchown32
|
||||
#undef __NR_setresuid32
|
||||
#undef __NR_getresuid32
|
||||
#undef __NR_setresgid32
|
||||
#undef __NR_getresgid32
|
||||
#undef __NR_chown32
|
||||
#undef __NR_setuid32
|
||||
#undef __NR_setgid32
|
||||
#undef __NR_setfsuid32
|
||||
#undef __NR_setfsgid32
|
||||
#undef __NR_fcntl64
|
||||
#undef __NR_sendfile64
|
||||
#undef __NR_fadvise64_64
|
||||
#undef __NR_fstatat64
|
||||
#ifndef __s390x__
|
||||
|
||||
#define __NR_time 13
|
||||
#define __NR_lchown 16
|
||||
#define __NR_setuid 23
|
||||
#define __NR_getuid 24
|
||||
#define __NR_stime 25
|
||||
#define __NR_setgid 46
|
||||
#define __NR_getgid 47
|
||||
#define __NR_geteuid 49
|
||||
#define __NR_getegid 50
|
||||
#define __NR_setreuid 70
|
||||
#define __NR_setregid 71
|
||||
#define __NR_getrlimit 76
|
||||
#define __NR_getgroups 80
|
||||
#define __NR_setgroups 81
|
||||
#define __NR_fchown 95
|
||||
#define __NR_ioperm 101
|
||||
#define __NR_setfsuid 138
|
||||
#define __NR_setfsgid 139
|
||||
#define __NR__llseek 140
|
||||
#define __NR__newselect 142
|
||||
#define __NR_setresuid 164
|
||||
#define __NR_getresuid 165
|
||||
#define __NR_setresgid 170
|
||||
#define __NR_getresgid 171
|
||||
#define __NR_chown 182
|
||||
#define __NR_ugetrlimit 191 /* SuS compliant getrlimit */
|
||||
#define __NR_mmap2 192
|
||||
#define __NR_truncate64 193
|
||||
#define __NR_ftruncate64 194
|
||||
#define __NR_stat64 195
|
||||
#define __NR_lstat64 196
|
||||
#define __NR_fstat64 197
|
||||
#define __NR_lchown32 198
|
||||
#define __NR_getuid32 199
|
||||
#define __NR_getgid32 200
|
||||
#define __NR_geteuid32 201
|
||||
#define __NR_getegid32 202
|
||||
#define __NR_setreuid32 203
|
||||
#define __NR_setregid32 204
|
||||
#define __NR_getgroups32 205
|
||||
#define __NR_setgroups32 206
|
||||
#define __NR_fchown32 207
|
||||
#define __NR_setresuid32 208
|
||||
#define __NR_getresuid32 209
|
||||
#define __NR_setresgid32 210
|
||||
#define __NR_getresgid32 211
|
||||
#define __NR_chown32 212
|
||||
#define __NR_setuid32 213
|
||||
#define __NR_setgid32 214
|
||||
#define __NR_setfsuid32 215
|
||||
#define __NR_setfsgid32 216
|
||||
#define __NR_fcntl64 221
|
||||
#define __NR_sendfile64 223
|
||||
#define __NR_fadvise64_64 264
|
||||
#define __NR_fstatat64 293
|
||||
|
||||
#else
|
||||
|
||||
#define __NR_select 142
|
||||
#define __NR_getrlimit 191 /* SuS compliant getrlimit */
|
||||
|
|
|
|||
|
|
@ -1,212 +0,0 @@
|
|||
/*
|
||||
* include/asm-s390/z90crypt.h
|
||||
*
|
||||
* z90crypt 1.3.3 (user-visible header)
|
||||
*
|
||||
* Copyright (C) 2001, 2005 IBM Corporation
|
||||
* Author(s): Robert Burroughs
|
||||
* Eric Rossman (edrossma@us.ibm.com)
|
||||
*
|
||||
* Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_S390_Z90CRYPT_H
|
||||
#define __ASM_S390_Z90CRYPT_H
|
||||
#include <linux/ioctl.h>
|
||||
|
||||
#define z90crypt_VERSION 1
|
||||
#define z90crypt_RELEASE 3 // 2 = PCIXCC, 3 = rewrite for coding standards
|
||||
#define z90crypt_VARIANT 3 // 3 = CEX2A support
|
||||
|
||||
/**
|
||||
* struct ica_rsa_modexpo
|
||||
*
|
||||
* Requirements:
|
||||
* - outputdatalength is at least as large as inputdatalength.
|
||||
* - All key parts are right justified in their fields, padded on
|
||||
* the left with zeroes.
|
||||
* - length(b_key) = inputdatalength
|
||||
* - length(n_modulus) = inputdatalength
|
||||
*/
|
||||
struct ica_rsa_modexpo {
|
||||
char __user * inputdata;
|
||||
unsigned int inputdatalength;
|
||||
char __user * outputdata;
|
||||
unsigned int outputdatalength;
|
||||
char __user * b_key;
|
||||
char __user * n_modulus;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ica_rsa_modexpo_crt
|
||||
*
|
||||
* Requirements:
|
||||
* - inputdatalength is even.
|
||||
* - outputdatalength is at least as large as inputdatalength.
|
||||
* - All key parts are right justified in their fields, padded on
|
||||
* the left with zeroes.
|
||||
* - length(bp_key) = inputdatalength/2 + 8
|
||||
* - length(bq_key) = inputdatalength/2
|
||||
* - length(np_key) = inputdatalength/2 + 8
|
||||
* - length(nq_key) = inputdatalength/2
|
||||
* - length(u_mult_inv) = inputdatalength/2 + 8
|
||||
*/
|
||||
struct ica_rsa_modexpo_crt {
|
||||
char __user * inputdata;
|
||||
unsigned int inputdatalength;
|
||||
char __user * outputdata;
|
||||
unsigned int outputdatalength;
|
||||
char __user * bp_key;
|
||||
char __user * bq_key;
|
||||
char __user * np_prime;
|
||||
char __user * nq_prime;
|
||||
char __user * u_mult_inv;
|
||||
};
|
||||
|
||||
#define Z90_IOCTL_MAGIC 'z' // NOTE: Need to allocate from linux folks
|
||||
|
||||
/**
|
||||
* Interface notes:
|
||||
*
|
||||
* The ioctl()s which are implemented (along with relevant details)
|
||||
* are:
|
||||
*
|
||||
* ICARSAMODEXPO
|
||||
* Perform an RSA operation using a Modulus-Exponent pair
|
||||
* This takes an ica_rsa_modexpo struct as its arg.
|
||||
*
|
||||
* NOTE: please refer to the comments preceding this structure
|
||||
* for the implementation details for the contents of the
|
||||
* block
|
||||
*
|
||||
* ICARSACRT
|
||||
* Perform an RSA operation using a Chinese-Remainder Theorem key
|
||||
* This takes an ica_rsa_modexpo_crt struct as its arg.
|
||||
*
|
||||
* NOTE: please refer to the comments preceding this structure
|
||||
* for the implementation details for the contents of the
|
||||
* block
|
||||
*
|
||||
* Z90STAT_TOTALCOUNT
|
||||
* Return an integer count of all device types together.
|
||||
*
|
||||
* Z90STAT_PCICACOUNT
|
||||
* Return an integer count of all PCICAs.
|
||||
*
|
||||
* Z90STAT_PCICCCOUNT
|
||||
* Return an integer count of all PCICCs.
|
||||
*
|
||||
* Z90STAT_PCIXCCMCL2COUNT
|
||||
* Return an integer count of all MCL2 PCIXCCs.
|
||||
*
|
||||
* Z90STAT_PCIXCCMCL3COUNT
|
||||
* Return an integer count of all MCL3 PCIXCCs.
|
||||
*
|
||||
* Z90STAT_CEX2CCOUNT
|
||||
* Return an integer count of all CEX2Cs.
|
||||
*
|
||||
* Z90STAT_CEX2ACOUNT
|
||||
* Return an integer count of all CEX2As.
|
||||
*
|
||||
* Z90STAT_REQUESTQ_COUNT
|
||||
* Return an integer count of the number of entries waiting to be
|
||||
* sent to a device.
|
||||
*
|
||||
* Z90STAT_PENDINGQ_COUNT
|
||||
* Return an integer count of the number of entries sent to a
|
||||
* device awaiting the reply.
|
||||
*
|
||||
* Z90STAT_TOTALOPEN_COUNT
|
||||
* Return an integer count of the number of open file handles.
|
||||
*
|
||||
* Z90STAT_DOMAIN_INDEX
|
||||
* Return the integer value of the Cryptographic Domain.
|
||||
*
|
||||
* Z90STAT_STATUS_MASK
|
||||
* Return an 64 element array of unsigned chars for the status of
|
||||
* all devices.
|
||||
* 0x01: PCICA
|
||||
* 0x02: PCICC
|
||||
* 0x03: PCIXCC_MCL2
|
||||
* 0x04: PCIXCC_MCL3
|
||||
* 0x05: CEX2C
|
||||
* 0x06: CEX2A
|
||||
* 0x0d: device is disabled via the proc filesystem
|
||||
*
|
||||
* Z90STAT_QDEPTH_MASK
|
||||
* Return an 64 element array of unsigned chars for the queue
|
||||
* depth of all devices.
|
||||
*
|
||||
* Z90STAT_PERDEV_REQCNT
|
||||
* Return an 64 element array of unsigned integers for the number
|
||||
* of successfully completed requests per device since the device
|
||||
* was detected and made available.
|
||||
*
|
||||
* ICAZ90STATUS (deprecated)
|
||||
* Return some device driver status in a ica_z90_status struct
|
||||
* This takes an ica_z90_status struct as its arg.
|
||||
*
|
||||
* NOTE: this ioctl() is deprecated, and has been replaced with
|
||||
* single ioctl()s for each type of status being requested
|
||||
*
|
||||
* Z90STAT_PCIXCCCOUNT (deprecated)
|
||||
* Return an integer count of all PCIXCCs (MCL2 + MCL3).
|
||||
* This is DEPRECATED now that MCL3 PCIXCCs are treated differently from
|
||||
* MCL2 PCIXCCs.
|
||||
*
|
||||
* Z90QUIESCE (not recommended)
|
||||
* Quiesce the driver. This is intended to stop all new
|
||||
* requests from being processed. Its use is NOT recommended,
|
||||
* except in circumstances where there is no other way to stop
|
||||
* callers from accessing the driver. Its original use was to
|
||||
* allow the driver to be "drained" of work in preparation for
|
||||
* a system shutdown.
|
||||
*
|
||||
* NOTE: once issued, this ban on new work cannot be undone
|
||||
* except by unloading and reloading the driver.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Supported ioctl calls
|
||||
*/
|
||||
#define ICARSAMODEXPO _IOC(_IOC_READ|_IOC_WRITE, Z90_IOCTL_MAGIC, 0x05, 0)
|
||||
#define ICARSACRT _IOC(_IOC_READ|_IOC_WRITE, Z90_IOCTL_MAGIC, 0x06, 0)
|
||||
|
||||
/* DEPRECATED status calls (bound for removal at some point) */
|
||||
#define ICAZ90STATUS _IOR(Z90_IOCTL_MAGIC, 0x10, struct ica_z90_status)
|
||||
#define Z90STAT_PCIXCCCOUNT _IOR(Z90_IOCTL_MAGIC, 0x43, int)
|
||||
|
||||
/* unrelated to ICA callers */
|
||||
#define Z90QUIESCE _IO(Z90_IOCTL_MAGIC, 0x11)
|
||||
|
||||
/* New status calls */
|
||||
#define Z90STAT_TOTALCOUNT _IOR(Z90_IOCTL_MAGIC, 0x40, int)
|
||||
#define Z90STAT_PCICACOUNT _IOR(Z90_IOCTL_MAGIC, 0x41, int)
|
||||
#define Z90STAT_PCICCCOUNT _IOR(Z90_IOCTL_MAGIC, 0x42, int)
|
||||
#define Z90STAT_PCIXCCMCL2COUNT _IOR(Z90_IOCTL_MAGIC, 0x4b, int)
|
||||
#define Z90STAT_PCIXCCMCL3COUNT _IOR(Z90_IOCTL_MAGIC, 0x4c, int)
|
||||
#define Z90STAT_CEX2CCOUNT _IOR(Z90_IOCTL_MAGIC, 0x4d, int)
|
||||
#define Z90STAT_CEX2ACOUNT _IOR(Z90_IOCTL_MAGIC, 0x4e, int)
|
||||
#define Z90STAT_REQUESTQ_COUNT _IOR(Z90_IOCTL_MAGIC, 0x44, int)
|
||||
#define Z90STAT_PENDINGQ_COUNT _IOR(Z90_IOCTL_MAGIC, 0x45, int)
|
||||
#define Z90STAT_TOTALOPEN_COUNT _IOR(Z90_IOCTL_MAGIC, 0x46, int)
|
||||
#define Z90STAT_DOMAIN_INDEX _IOR(Z90_IOCTL_MAGIC, 0x47, int)
|
||||
#define Z90STAT_STATUS_MASK _IOR(Z90_IOCTL_MAGIC, 0x48, char[64])
|
||||
#define Z90STAT_QDEPTH_MASK _IOR(Z90_IOCTL_MAGIC, 0x49, char[64])
|
||||
#define Z90STAT_PERDEV_REQCNT _IOR(Z90_IOCTL_MAGIC, 0x4a, int[64])
|
||||
|
||||
#endif /* __ASM_S390_Z90CRYPT_H */
|
||||
285
include/asm-s390/zcrypt.h
Normal file
285
include/asm-s390/zcrypt.h
Normal file
|
|
@ -0,0 +1,285 @@
|
|||
/*
|
||||
* include/asm-s390/zcrypt.h
|
||||
*
|
||||
* zcrypt 2.1.0 (user-visible header)
|
||||
*
|
||||
* Copyright (C) 2001, 2006 IBM Corporation
|
||||
* Author(s): Robert Burroughs
|
||||
* Eric Rossman (edrossma@us.ibm.com)
|
||||
*
|
||||
* Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_S390_ZCRYPT_H
|
||||
#define __ASM_S390_ZCRYPT_H
|
||||
|
||||
#define ZCRYPT_VERSION 2
|
||||
#define ZCRYPT_RELEASE 1
|
||||
#define ZCRYPT_VARIANT 0
|
||||
|
||||
#include <linux/ioctl.h>
|
||||
#include <linux/compiler.h>
|
||||
|
||||
/**
|
||||
* struct ica_rsa_modexpo
|
||||
*
|
||||
* Requirements:
|
||||
* - outputdatalength is at least as large as inputdatalength.
|
||||
* - All key parts are right justified in their fields, padded on
|
||||
* the left with zeroes.
|
||||
* - length(b_key) = inputdatalength
|
||||
* - length(n_modulus) = inputdatalength
|
||||
*/
|
||||
struct ica_rsa_modexpo {
|
||||
char __user * inputdata;
|
||||
unsigned int inputdatalength;
|
||||
char __user * outputdata;
|
||||
unsigned int outputdatalength;
|
||||
char __user * b_key;
|
||||
char __user * n_modulus;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ica_rsa_modexpo_crt
|
||||
*
|
||||
* Requirements:
|
||||
* - inputdatalength is even.
|
||||
* - outputdatalength is at least as large as inputdatalength.
|
||||
* - All key parts are right justified in their fields, padded on
|
||||
* the left with zeroes.
|
||||
* - length(bp_key) = inputdatalength/2 + 8
|
||||
* - length(bq_key) = inputdatalength/2
|
||||
* - length(np_key) = inputdatalength/2 + 8
|
||||
* - length(nq_key) = inputdatalength/2
|
||||
* - length(u_mult_inv) = inputdatalength/2 + 8
|
||||
*/
|
||||
struct ica_rsa_modexpo_crt {
|
||||
char __user * inputdata;
|
||||
unsigned int inputdatalength;
|
||||
char __user * outputdata;
|
||||
unsigned int outputdatalength;
|
||||
char __user * bp_key;
|
||||
char __user * bq_key;
|
||||
char __user * np_prime;
|
||||
char __user * nq_prime;
|
||||
char __user * u_mult_inv;
|
||||
};
|
||||
|
||||
/**
|
||||
* CPRBX
|
||||
* Note that all shorts and ints are big-endian.
|
||||
* All pointer fields are 16 bytes long, and mean nothing.
|
||||
*
|
||||
* A request CPRB is followed by a request_parameter_block.
|
||||
*
|
||||
* The request (or reply) parameter block is organized thus:
|
||||
* function code
|
||||
* VUD block
|
||||
* key block
|
||||
*/
|
||||
struct ica_CPRBX {
|
||||
unsigned short cprb_len; /* CPRB length 220 */
|
||||
unsigned char cprb_ver_id; /* CPRB version id. 0x02 */
|
||||
unsigned char pad_000[3]; /* Alignment pad bytes */
|
||||
unsigned char func_id[2]; /* function id 0x5432 */
|
||||
unsigned char cprb_flags[4]; /* Flags */
|
||||
unsigned int req_parml; /* request parameter buffer len */
|
||||
unsigned int req_datal; /* request data buffer */
|
||||
unsigned int rpl_msgbl; /* reply message block length */
|
||||
unsigned int rpld_parml; /* replied parameter block len */
|
||||
unsigned int rpl_datal; /* reply data block len */
|
||||
unsigned int rpld_datal; /* replied data block len */
|
||||
unsigned int req_extbl; /* request extension block len */
|
||||
unsigned char pad_001[4]; /* reserved */
|
||||
unsigned int rpld_extbl; /* replied extension block len */
|
||||
unsigned char padx000[16 - sizeof (char *)];
|
||||
unsigned char * req_parmb; /* request parm block 'address' */
|
||||
unsigned char padx001[16 - sizeof (char *)];
|
||||
unsigned char * req_datab; /* request data block 'address' */
|
||||
unsigned char padx002[16 - sizeof (char *)];
|
||||
unsigned char * rpl_parmb; /* reply parm block 'address' */
|
||||
unsigned char padx003[16 - sizeof (char *)];
|
||||
unsigned char * rpl_datab; /* reply data block 'address' */
|
||||
unsigned char padx004[16 - sizeof (char *)];
|
||||
unsigned char * req_extb; /* request extension block 'addr'*/
|
||||
unsigned char padx005[16 - sizeof (char *)];
|
||||
unsigned char * rpl_extb; /* reply extension block 'addres'*/
|
||||
unsigned short ccp_rtcode; /* server return code */
|
||||
unsigned short ccp_rscode; /* server reason code */
|
||||
unsigned int mac_data_len; /* Mac Data Length */
|
||||
unsigned char logon_id[8]; /* Logon Identifier */
|
||||
unsigned char mac_value[8]; /* Mac Value */
|
||||
unsigned char mac_content_flgs;/* Mac content flag byte */
|
||||
unsigned char pad_002; /* Alignment */
|
||||
unsigned short domain; /* Domain */
|
||||
unsigned char usage_domain[4];/* Usage domain */
|
||||
unsigned char cntrl_domain[4];/* Control domain */
|
||||
unsigned char S390enf_mask[4];/* S/390 enforcement mask */
|
||||
unsigned char pad_004[36]; /* reserved */
|
||||
};
|
||||
|
||||
/**
|
||||
* xcRB
|
||||
*/
|
||||
struct ica_xcRB {
|
||||
unsigned short agent_ID;
|
||||
unsigned int user_defined;
|
||||
unsigned short request_ID;
|
||||
unsigned int request_control_blk_length;
|
||||
unsigned char padding1[16 - sizeof (char *)];
|
||||
char __user * request_control_blk_addr;
|
||||
unsigned int request_data_length;
|
||||
char padding2[16 - sizeof (char *)];
|
||||
char __user * request_data_address;
|
||||
unsigned int reply_control_blk_length;
|
||||
char padding3[16 - sizeof (char *)];
|
||||
char __user * reply_control_blk_addr;
|
||||
unsigned int reply_data_length;
|
||||
char padding4[16 - sizeof (char *)];
|
||||
char __user * reply_data_addr;
|
||||
unsigned short priority_window;
|
||||
unsigned int status;
|
||||
} __attribute__((packed));
|
||||
#define AUTOSELECT ((unsigned int)0xFFFFFFFF)
|
||||
|
||||
#define ZCRYPT_IOCTL_MAGIC 'z'
|
||||
|
||||
/**
|
||||
* Interface notes:
|
||||
*
|
||||
* The ioctl()s which are implemented (along with relevant details)
|
||||
* are:
|
||||
*
|
||||
* ICARSAMODEXPO
|
||||
* Perform an RSA operation using a Modulus-Exponent pair
|
||||
* This takes an ica_rsa_modexpo struct as its arg.
|
||||
*
|
||||
* NOTE: please refer to the comments preceding this structure
|
||||
* for the implementation details for the contents of the
|
||||
* block
|
||||
*
|
||||
* ICARSACRT
|
||||
* Perform an RSA operation using a Chinese-Remainder Theorem key
|
||||
* This takes an ica_rsa_modexpo_crt struct as its arg.
|
||||
*
|
||||
* NOTE: please refer to the comments preceding this structure
|
||||
* for the implementation details for the contents of the
|
||||
* block
|
||||
*
|
||||
* Z90STAT_TOTALCOUNT
|
||||
* Return an integer count of all device types together.
|
||||
*
|
||||
* Z90STAT_PCICACOUNT
|
||||
* Return an integer count of all PCICAs.
|
||||
*
|
||||
* Z90STAT_PCICCCOUNT
|
||||
* Return an integer count of all PCICCs.
|
||||
*
|
||||
* Z90STAT_PCIXCCMCL2COUNT
|
||||
* Return an integer count of all MCL2 PCIXCCs.
|
||||
*
|
||||
* Z90STAT_PCIXCCMCL3COUNT
|
||||
* Return an integer count of all MCL3 PCIXCCs.
|
||||
*
|
||||
* Z90STAT_CEX2CCOUNT
|
||||
* Return an integer count of all CEX2Cs.
|
||||
*
|
||||
* Z90STAT_CEX2ACOUNT
|
||||
* Return an integer count of all CEX2As.
|
||||
*
|
||||
* Z90STAT_REQUESTQ_COUNT
|
||||
* Return an integer count of the number of entries waiting to be
|
||||
* sent to a device.
|
||||
*
|
||||
* Z90STAT_PENDINGQ_COUNT
|
||||
* Return an integer count of the number of entries sent to a
|
||||
* device awaiting the reply.
|
||||
*
|
||||
* Z90STAT_TOTALOPEN_COUNT
|
||||
* Return an integer count of the number of open file handles.
|
||||
*
|
||||
* Z90STAT_DOMAIN_INDEX
|
||||
* Return the integer value of the Cryptographic Domain.
|
||||
*
|
||||
* Z90STAT_STATUS_MASK
|
||||
* Return an 64 element array of unsigned chars for the status of
|
||||
* all devices.
|
||||
* 0x01: PCICA
|
||||
* 0x02: PCICC
|
||||
* 0x03: PCIXCC_MCL2
|
||||
* 0x04: PCIXCC_MCL3
|
||||
* 0x05: CEX2C
|
||||
* 0x06: CEX2A
|
||||
* 0x0d: device is disabled via the proc filesystem
|
||||
*
|
||||
* Z90STAT_QDEPTH_MASK
|
||||
* Return an 64 element array of unsigned chars for the queue
|
||||
* depth of all devices.
|
||||
*
|
||||
* Z90STAT_PERDEV_REQCNT
|
||||
* Return an 64 element array of unsigned integers for the number
|
||||
* of successfully completed requests per device since the device
|
||||
* was detected and made available.
|
||||
*
|
||||
* ICAZ90STATUS (deprecated)
|
||||
* Return some device driver status in a ica_z90_status struct
|
||||
* This takes an ica_z90_status struct as its arg.
|
||||
*
|
||||
* NOTE: this ioctl() is deprecated, and has been replaced with
|
||||
* single ioctl()s for each type of status being requested
|
||||
*
|
||||
* Z90STAT_PCIXCCCOUNT (deprecated)
|
||||
* Return an integer count of all PCIXCCs (MCL2 + MCL3).
|
||||
* This is DEPRECATED now that MCL3 PCIXCCs are treated differently from
|
||||
* MCL2 PCIXCCs.
|
||||
*
|
||||
* Z90QUIESCE (not recommended)
|
||||
* Quiesce the driver. This is intended to stop all new
|
||||
* requests from being processed. Its use is NOT recommended,
|
||||
* except in circumstances where there is no other way to stop
|
||||
* callers from accessing the driver. Its original use was to
|
||||
* allow the driver to be "drained" of work in preparation for
|
||||
* a system shutdown.
|
||||
*
|
||||
* NOTE: once issued, this ban on new work cannot be undone
|
||||
* except by unloading and reloading the driver.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Supported ioctl calls
|
||||
*/
|
||||
#define ICARSAMODEXPO _IOC(_IOC_READ|_IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x05, 0)
|
||||
#define ICARSACRT _IOC(_IOC_READ|_IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x06, 0)
|
||||
#define ZSECSENDCPRB _IOC(_IOC_READ|_IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x81, 0)
|
||||
|
||||
/* New status calls */
|
||||
#define Z90STAT_TOTALCOUNT _IOR(ZCRYPT_IOCTL_MAGIC, 0x40, int)
|
||||
#define Z90STAT_PCICACOUNT _IOR(ZCRYPT_IOCTL_MAGIC, 0x41, int)
|
||||
#define Z90STAT_PCICCCOUNT _IOR(ZCRYPT_IOCTL_MAGIC, 0x42, int)
|
||||
#define Z90STAT_PCIXCCMCL2COUNT _IOR(ZCRYPT_IOCTL_MAGIC, 0x4b, int)
|
||||
#define Z90STAT_PCIXCCMCL3COUNT _IOR(ZCRYPT_IOCTL_MAGIC, 0x4c, int)
|
||||
#define Z90STAT_CEX2CCOUNT _IOR(ZCRYPT_IOCTL_MAGIC, 0x4d, int)
|
||||
#define Z90STAT_CEX2ACOUNT _IOR(ZCRYPT_IOCTL_MAGIC, 0x4e, int)
|
||||
#define Z90STAT_REQUESTQ_COUNT _IOR(ZCRYPT_IOCTL_MAGIC, 0x44, int)
|
||||
#define Z90STAT_PENDINGQ_COUNT _IOR(ZCRYPT_IOCTL_MAGIC, 0x45, int)
|
||||
#define Z90STAT_TOTALOPEN_COUNT _IOR(ZCRYPT_IOCTL_MAGIC, 0x46, int)
|
||||
#define Z90STAT_DOMAIN_INDEX _IOR(ZCRYPT_IOCTL_MAGIC, 0x47, int)
|
||||
#define Z90STAT_STATUS_MASK _IOR(ZCRYPT_IOCTL_MAGIC, 0x48, char[64])
|
||||
#define Z90STAT_QDEPTH_MASK _IOR(ZCRYPT_IOCTL_MAGIC, 0x49, char[64])
|
||||
#define Z90STAT_PERDEV_REQCNT _IOR(ZCRYPT_IOCTL_MAGIC, 0x4a, int[64])
|
||||
|
||||
#endif /* __ASM_S390_ZCRYPT_H */
|
||||
|
|
@ -1,6 +1,22 @@
|
|||
include include/asm-generic/Kbuild.asm
|
||||
|
||||
unifdef-y += fbio.h perfctr.h psr.h
|
||||
header-y += apc.h asi.h auxio.h bpp.h head.h ipc.h jsflash.h \
|
||||
openpromio.h pbm.h pconf.h pgtsun4.h reg.h traps.h \
|
||||
turbosparc.h vfc_ioctls.h winmacro.h
|
||||
header-y += apc.h
|
||||
header-y += asi.h
|
||||
header-y += auxio.h
|
||||
header-y += bpp.h
|
||||
header-y += head.h
|
||||
header-y += ipc.h
|
||||
header-y += jsflash.h
|
||||
header-y += openpromio.h
|
||||
header-y += pbm.h
|
||||
header-y += pconf.h
|
||||
header-y += pgtsun4.h
|
||||
header-y += reg.h
|
||||
header-y += traps.h
|
||||
header-y += turbosparc.h
|
||||
header-y += vfc_ioctls.h
|
||||
header-y += winmacro.h
|
||||
|
||||
unifdef-y += fbio.h
|
||||
unifdef-y += perfctr.h
|
||||
unifdef-y += psr.h
|
||||
|
|
|
|||
|
|
@ -4,7 +4,26 @@ ALTARCH := sparc
|
|||
ARCHDEF := defined __sparc__ && defined __arch64__
|
||||
ALTARCHDEF := defined __sparc__ && !defined __arch64__
|
||||
|
||||
unifdef-y += fbio.h perfctr.h
|
||||
header-y += apb.h asi.h bbc.h bpp.h display7seg.h envctrl.h floppy.h \
|
||||
ipc.h kdebug.h mostek.h openprom.h openpromio.h parport.h \
|
||||
pconf.h psrcompat.h pstate.h reg.h uctx.h utrap.h watchdog.h
|
||||
header-y += apb.h
|
||||
header-y += asi.h
|
||||
header-y += bbc.h
|
||||
header-y += bpp.h
|
||||
header-y += display7seg.h
|
||||
header-y += envctrl.h
|
||||
header-y += floppy.h
|
||||
header-y += ipc.h
|
||||
header-y += kdebug.h
|
||||
header-y += mostek.h
|
||||
header-y += openprom.h
|
||||
header-y += openpromio.h
|
||||
header-y += parport.h
|
||||
header-y += pconf.h
|
||||
header-y += psrcompat.h
|
||||
header-y += pstate.h
|
||||
header-y += reg.h
|
||||
header-y += uctx.h
|
||||
header-y += utrap.h
|
||||
header-y += watchdog.h
|
||||
|
||||
unifdef-y += fbio.h
|
||||
unifdef-y += perfctr.h
|
||||
|
|
|
|||
|
|
@ -4,8 +4,18 @@ ALTARCH := i386
|
|||
ARCHDEF := defined __x86_64__
|
||||
ALTARCHDEF := defined __i386__
|
||||
|
||||
header-y += boot.h bootsetup.h cpufeature.h debugreg.h ldt.h \
|
||||
msr.h prctl.h setup.h sigcontext32.h ucontext.h \
|
||||
vsyscall32.h
|
||||
header-y += boot.h
|
||||
header-y += bootsetup.h
|
||||
header-y += cpufeature.h
|
||||
header-y += debugreg.h
|
||||
header-y += ldt.h
|
||||
header-y += msr.h
|
||||
header-y += prctl.h
|
||||
header-y += setup.h
|
||||
header-y += sigcontext32.h
|
||||
header-y += ucontext.h
|
||||
header-y += vsyscall32.h
|
||||
|
||||
unifdef-y += mce.h mtrr.h vsyscall.h
|
||||
unifdef-y += mce.h
|
||||
unifdef-y += mtrr.h
|
||||
unifdef-y += vsyscall.h
|
||||
|
|
|
|||
156
include/crypto/algapi.h
Normal file
156
include/crypto/algapi.h
Normal file
|
|
@ -0,0 +1,156 @@
|
|||
/*
|
||||
* Cryptographic API for algorithms (i.e., low-level API).
|
||||
*
|
||||
* Copyright (c) 2006 Herbert Xu <herbert@gondor.apana.org.au>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the Free
|
||||
* Software Foundation; either version 2 of the License, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
*/
|
||||
#ifndef _CRYPTO_ALGAPI_H
|
||||
#define _CRYPTO_ALGAPI_H
|
||||
|
||||
#include <linux/crypto.h>
|
||||
|
||||
struct module;
|
||||
struct seq_file;
|
||||
|
||||
struct crypto_type {
|
||||
unsigned int (*ctxsize)(struct crypto_alg *alg);
|
||||
int (*init)(struct crypto_tfm *tfm);
|
||||
void (*exit)(struct crypto_tfm *tfm);
|
||||
void (*show)(struct seq_file *m, struct crypto_alg *alg);
|
||||
};
|
||||
|
||||
struct crypto_instance {
|
||||
struct crypto_alg alg;
|
||||
|
||||
struct crypto_template *tmpl;
|
||||
struct hlist_node list;
|
||||
|
||||
void *__ctx[] CRYPTO_MINALIGN_ATTR;
|
||||
};
|
||||
|
||||
struct crypto_template {
|
||||
struct list_head list;
|
||||
struct hlist_head instances;
|
||||
struct module *module;
|
||||
|
||||
struct crypto_instance *(*alloc)(void *param, unsigned int len);
|
||||
void (*free)(struct crypto_instance *inst);
|
||||
|
||||
char name[CRYPTO_MAX_ALG_NAME];
|
||||
};
|
||||
|
||||
struct crypto_spawn {
|
||||
struct list_head list;
|
||||
struct crypto_alg *alg;
|
||||
struct crypto_instance *inst;
|
||||
};
|
||||
|
||||
struct scatter_walk {
|
||||
struct scatterlist *sg;
|
||||
unsigned int offset;
|
||||
};
|
||||
|
||||
struct blkcipher_walk {
|
||||
union {
|
||||
struct {
|
||||
struct page *page;
|
||||
unsigned long offset;
|
||||
} phys;
|
||||
|
||||
struct {
|
||||
u8 *page;
|
||||
u8 *addr;
|
||||
} virt;
|
||||
} src, dst;
|
||||
|
||||
struct scatter_walk in;
|
||||
unsigned int nbytes;
|
||||
|
||||
struct scatter_walk out;
|
||||
unsigned int total;
|
||||
|
||||
void *page;
|
||||
u8 *buffer;
|
||||
u8 *iv;
|
||||
|
||||
int flags;
|
||||
};
|
||||
|
||||
extern const struct crypto_type crypto_blkcipher_type;
|
||||
extern const struct crypto_type crypto_hash_type;
|
||||
|
||||
void crypto_mod_put(struct crypto_alg *alg);
|
||||
|
||||
int crypto_register_template(struct crypto_template *tmpl);
|
||||
void crypto_unregister_template(struct crypto_template *tmpl);
|
||||
struct crypto_template *crypto_lookup_template(const char *name);
|
||||
|
||||
int crypto_init_spawn(struct crypto_spawn *spawn, struct crypto_alg *alg,
|
||||
struct crypto_instance *inst);
|
||||
void crypto_drop_spawn(struct crypto_spawn *spawn);
|
||||
struct crypto_tfm *crypto_spawn_tfm(struct crypto_spawn *spawn);
|
||||
|
||||
struct crypto_alg *crypto_get_attr_alg(void *param, unsigned int len,
|
||||
u32 type, u32 mask);
|
||||
struct crypto_instance *crypto_alloc_instance(const char *name,
|
||||
struct crypto_alg *alg);
|
||||
|
||||
int blkcipher_walk_done(struct blkcipher_desc *desc,
|
||||
struct blkcipher_walk *walk, int err);
|
||||
int blkcipher_walk_virt(struct blkcipher_desc *desc,
|
||||
struct blkcipher_walk *walk);
|
||||
int blkcipher_walk_phys(struct blkcipher_desc *desc,
|
||||
struct blkcipher_walk *walk);
|
||||
|
||||
static inline void *crypto_tfm_ctx_aligned(struct crypto_tfm *tfm)
|
||||
{
|
||||
unsigned long addr = (unsigned long)crypto_tfm_ctx(tfm);
|
||||
unsigned long align = crypto_tfm_alg_alignmask(tfm);
|
||||
|
||||
if (align <= crypto_tfm_ctx_alignment())
|
||||
align = 1;
|
||||
return (void *)ALIGN(addr, align);
|
||||
}
|
||||
|
||||
static inline void *crypto_instance_ctx(struct crypto_instance *inst)
|
||||
{
|
||||
return inst->__ctx;
|
||||
}
|
||||
|
||||
static inline void *crypto_blkcipher_ctx(struct crypto_blkcipher *tfm)
|
||||
{
|
||||
return crypto_tfm_ctx(&tfm->base);
|
||||
}
|
||||
|
||||
static inline void *crypto_blkcipher_ctx_aligned(struct crypto_blkcipher *tfm)
|
||||
{
|
||||
return crypto_tfm_ctx_aligned(&tfm->base);
|
||||
}
|
||||
|
||||
static inline struct cipher_alg *crypto_cipher_alg(struct crypto_cipher *tfm)
|
||||
{
|
||||
return &crypto_cipher_tfm(tfm)->__crt_alg->cra_cipher;
|
||||
}
|
||||
|
||||
static inline void *crypto_hash_ctx_aligned(struct crypto_hash *tfm)
|
||||
{
|
||||
return crypto_tfm_ctx_aligned(&tfm->base);
|
||||
}
|
||||
|
||||
static inline void blkcipher_walk_init(struct blkcipher_walk *walk,
|
||||
struct scatterlist *dst,
|
||||
struct scatterlist *src,
|
||||
unsigned int nbytes)
|
||||
{
|
||||
walk->in.sg = src;
|
||||
walk->out.sg = dst;
|
||||
walk->total = nbytes;
|
||||
}
|
||||
|
||||
#endif /* _CRYPTO_ALGAPI_H */
|
||||
|
||||
22
include/crypto/twofish.h
Normal file
22
include/crypto/twofish.h
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
#ifndef _CRYPTO_TWOFISH_H
|
||||
#define _CRYPTO_TWOFISH_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define TF_MIN_KEY_SIZE 16
|
||||
#define TF_MAX_KEY_SIZE 32
|
||||
#define TF_BLOCK_SIZE 16
|
||||
|
||||
struct crypto_tfm;
|
||||
|
||||
/* Structure for an expanded Twofish key. s contains the key-dependent
|
||||
* S-boxes composed with the MDS matrix; w contains the eight "whitening"
|
||||
* subkeys, K[0] through K[7]. k holds the remaining, "round" subkeys. Note
|
||||
* that k[i] corresponds to what the Twofish paper calls K[i+8]. */
|
||||
struct twofish_ctx {
|
||||
u32 s[4][256], w[8], k[32];
|
||||
};
|
||||
|
||||
int twofish_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int key_len);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,63 +1,343 @@
|
|||
header-y := byteorder/ dvb/ hdlc/ isdn/ nfsd/ raid/ sunrpc/ tc_act/ \
|
||||
netfilter/ netfilter_arp/ netfilter_bridge/ netfilter_ipv4/ \
|
||||
netfilter_ipv6/
|
||||
header-y += byteorder/
|
||||
header-y += dvb/
|
||||
header-y += hdlc/
|
||||
header-y += isdn/
|
||||
header-y += nfsd/
|
||||
header-y += raid/
|
||||
header-y += sunrpc/
|
||||
header-y += tc_act/
|
||||
header-y += netfilter/
|
||||
header-y += netfilter_arp/
|
||||
header-y += netfilter_bridge/
|
||||
header-y += netfilter_ipv4/
|
||||
header-y += netfilter_ipv6/
|
||||
|
||||
header-y += affs_fs.h affs_hardblocks.h aio_abi.h a.out.h arcfb.h \
|
||||
atmapi.h atmbr2684.h atmclip.h atm_eni.h atm_he.h \
|
||||
atm_idt77105.h atmioc.h atmlec.h atmmpc.h atm_nicstar.h \
|
||||
atmppp.h atmsap.h atmsvc.h atm_zatm.h auto_fs4.h auxvec.h \
|
||||
awe_voice.h ax25.h b1lli.h baycom.h bfs_fs.h blkpg.h \
|
||||
bpqether.h cdk.h chio.h coda_psdev.h coff.h comstats.h \
|
||||
consolemap.h cycx_cfm.h dm-ioctl.h dn.h dqblk_v1.h \
|
||||
dqblk_v2.h dqblk_xfs.h efs_fs_sb.h elf-fdpic.h elf.h elf-em.h \
|
||||
fadvise.h fd.h fdreg.h ftape-header-segment.h ftape-vendors.h \
|
||||
fuse.h futex.h genetlink.h gen_stats.h gigaset_dev.h hdsmart.h \
|
||||
hpfs_fs.h hysdn_if.h i2c-dev.h i8k.h icmp.h \
|
||||
if_arcnet.h if_arp.h if_bonding.h if_cablemodem.h if_fc.h \
|
||||
if_fddi.h if.h if_hippi.h if_infiniband.h if_packet.h \
|
||||
if_plip.h if_ppp.h if_slip.h if_strip.h if_tunnel.h in6.h \
|
||||
in_route.h ioctl.h ip.h ipmi_msgdefs.h ip_mp_alg.h ipsec.h \
|
||||
ipx.h irda.h isdn_divertif.h iso_fs.h ite_gpio.h ixjuser.h \
|
||||
jffs2.h keyctl.h limits.h major.h matroxfb.h meye.h minix_fs.h \
|
||||
mmtimer.h mqueue.h mtio.h ncp_no.h netfilter_arp.h netrom.h \
|
||||
nfs2.h nfs4_mount.h nfs_mount.h openprom_fs.h param.h \
|
||||
pci_ids.h pci_regs.h personality.h pfkeyv2.h pg.h pkt_cls.h \
|
||||
pkt_sched.h posix_types.h ppdev.h prctl.h ps2esdi.h qic117.h \
|
||||
qnxtypes.h quotaio_v1.h quotaio_v2.h radeonfb.h raw.h \
|
||||
resource.h rose.h sctp.h smbno.h snmp.h sockios.h som.h \
|
||||
sound.h stddef.h synclink.h telephony.h termios.h ticable.h \
|
||||
times.h tiocl.h tipc.h toshiba.h ultrasound.h un.h utime.h \
|
||||
utsname.h video_decoder.h video_encoder.h videotext.h vt.h \
|
||||
wavefront.h wireless.h xattr.h x25.h zorro_ids.h
|
||||
header-y += affs_fs.h
|
||||
header-y += affs_hardblocks.h
|
||||
header-y += aio_abi.h
|
||||
header-y += a.out.h
|
||||
header-y += arcfb.h
|
||||
header-y += atmapi.h
|
||||
header-y += atmbr2684.h
|
||||
header-y += atmclip.h
|
||||
header-y += atm_eni.h
|
||||
header-y += atm_he.h
|
||||
header-y += atm_idt77105.h
|
||||
header-y += atmioc.h
|
||||
header-y += atmlec.h
|
||||
header-y += atmmpc.h
|
||||
header-y += atm_nicstar.h
|
||||
header-y += atmppp.h
|
||||
header-y += atmsap.h
|
||||
header-y += atmsvc.h
|
||||
header-y += atm_zatm.h
|
||||
header-y += auto_fs4.h
|
||||
header-y += auxvec.h
|
||||
header-y += awe_voice.h
|
||||
header-y += ax25.h
|
||||
header-y += b1lli.h
|
||||
header-y += baycom.h
|
||||
header-y += bfs_fs.h
|
||||
header-y += blkpg.h
|
||||
header-y += bpqether.h
|
||||
header-y += cdk.h
|
||||
header-y += chio.h
|
||||
header-y += coda_psdev.h
|
||||
header-y += coff.h
|
||||
header-y += comstats.h
|
||||
header-y += consolemap.h
|
||||
header-y += cycx_cfm.h
|
||||
header-y += dm-ioctl.h
|
||||
header-y += dn.h
|
||||
header-y += dqblk_v1.h
|
||||
header-y += dqblk_v2.h
|
||||
header-y += dqblk_xfs.h
|
||||
header-y += efs_fs_sb.h
|
||||
header-y += elf-fdpic.h
|
||||
header-y += elf.h
|
||||
header-y += elf-em.h
|
||||
header-y += fadvise.h
|
||||
header-y += fd.h
|
||||
header-y += fdreg.h
|
||||
header-y += ftape-header-segment.h
|
||||
header-y += ftape-vendors.h
|
||||
header-y += fuse.h
|
||||
header-y += futex.h
|
||||
header-y += genetlink.h
|
||||
header-y += gen_stats.h
|
||||
header-y += gigaset_dev.h
|
||||
header-y += hdsmart.h
|
||||
header-y += hpfs_fs.h
|
||||
header-y += hysdn_if.h
|
||||
header-y += i2c-dev.h
|
||||
header-y += i8k.h
|
||||
header-y += icmp.h
|
||||
header-y += if_arcnet.h
|
||||
header-y += if_arp.h
|
||||
header-y += if_bonding.h
|
||||
header-y += if_cablemodem.h
|
||||
header-y += if_fc.h
|
||||
header-y += if_fddi.h
|
||||
header-y += if.h
|
||||
header-y += if_hippi.h
|
||||
header-y += if_infiniband.h
|
||||
header-y += if_packet.h
|
||||
header-y += if_plip.h
|
||||
header-y += if_ppp.h
|
||||
header-y += if_slip.h
|
||||
header-y += if_strip.h
|
||||
header-y += if_tunnel.h
|
||||
header-y += in6.h
|
||||
header-y += in_route.h
|
||||
header-y += ioctl.h
|
||||
header-y += ip.h
|
||||
header-y += ipmi_msgdefs.h
|
||||
header-y += ip_mp_alg.h
|
||||
header-y += ipsec.h
|
||||
header-y += ipx.h
|
||||
header-y += irda.h
|
||||
header-y += isdn_divertif.h
|
||||
header-y += iso_fs.h
|
||||
header-y += ite_gpio.h
|
||||
header-y += ixjuser.h
|
||||
header-y += jffs2.h
|
||||
header-y += keyctl.h
|
||||
header-y += limits.h
|
||||
header-y += major.h
|
||||
header-y += matroxfb.h
|
||||
header-y += meye.h
|
||||
header-y += minix_fs.h
|
||||
header-y += mmtimer.h
|
||||
header-y += mqueue.h
|
||||
header-y += mtio.h
|
||||
header-y += ncp_no.h
|
||||
header-y += netfilter_arp.h
|
||||
header-y += netrom.h
|
||||
header-y += nfs2.h
|
||||
header-y += nfs4_mount.h
|
||||
header-y += nfs_mount.h
|
||||
header-y += openprom_fs.h
|
||||
header-y += param.h
|
||||
header-y += pci_ids.h
|
||||
header-y += pci_regs.h
|
||||
header-y += personality.h
|
||||
header-y += pfkeyv2.h
|
||||
header-y += pg.h
|
||||
header-y += pkt_cls.h
|
||||
header-y += pkt_sched.h
|
||||
header-y += posix_types.h
|
||||
header-y += ppdev.h
|
||||
header-y += prctl.h
|
||||
header-y += ps2esdi.h
|
||||
header-y += qic117.h
|
||||
header-y += qnxtypes.h
|
||||
header-y += quotaio_v1.h
|
||||
header-y += quotaio_v2.h
|
||||
header-y += radeonfb.h
|
||||
header-y += raw.h
|
||||
header-y += resource.h
|
||||
header-y += rose.h
|
||||
header-y += sctp.h
|
||||
header-y += smbno.h
|
||||
header-y += snmp.h
|
||||
header-y += sockios.h
|
||||
header-y += som.h
|
||||
header-y += sound.h
|
||||
header-y += stddef.h
|
||||
header-y += synclink.h
|
||||
header-y += telephony.h
|
||||
header-y += termios.h
|
||||
header-y += ticable.h
|
||||
header-y += times.h
|
||||
header-y += tiocl.h
|
||||
header-y += tipc.h
|
||||
header-y += toshiba.h
|
||||
header-y += ultrasound.h
|
||||
header-y += un.h
|
||||
header-y += utime.h
|
||||
header-y += utsname.h
|
||||
header-y += video_decoder.h
|
||||
header-y += video_encoder.h
|
||||
header-y += videotext.h
|
||||
header-y += vt.h
|
||||
header-y += wavefront.h
|
||||
header-y += wireless.h
|
||||
header-y += xattr.h
|
||||
header-y += x25.h
|
||||
header-y += zorro_ids.h
|
||||
|
||||
unifdef-y += acct.h adb.h adfs_fs.h agpgart.h apm_bios.h atalk.h \
|
||||
atmarp.h atmdev.h atm.h atm_tcp.h audit.h auto_fs.h binfmts.h \
|
||||
capability.h capi.h cciss_ioctl.h cdrom.h cm4000_cs.h \
|
||||
cn_proc.h coda.h connector.h cramfs_fs.h cuda.h cyclades.h \
|
||||
dccp.h dirent.h divert.h elfcore.h errno.h errqueue.h \
|
||||
ethtool.h eventpoll.h ext2_fs.h ext3_fs.h fb.h fcntl.h \
|
||||
filter.h flat.h fs.h ftape.h gameport.h generic_serial.h \
|
||||
genhd.h hayesesp.h hdlcdrv.h hdlc.h hdreg.h hiddev.h hpet.h \
|
||||
i2c.h i2o-dev.h icmpv6.h if_bridge.h if_ec.h \
|
||||
if_eql.h if_ether.h if_frad.h if_ltalk.h if_pppox.h \
|
||||
if_shaper.h if_tr.h if_tun.h if_vlan.h if_wanpipe.h igmp.h \
|
||||
inet_diag.h in.h inotify.h input.h ipc.h ipmi.h ipv6.h \
|
||||
ipv6_route.h isdn.h isdnif.h isdn_ppp.h isicom.h jbd.h \
|
||||
joystick.h kdev_t.h kd.h kernelcapi.h kernel.h keyboard.h \
|
||||
llc.h loop.h lp.h mempolicy.h mii.h mman.h mroute.h msdos_fs.h \
|
||||
msg.h nbd.h ncp_fs.h ncp.h ncp_mount.h netdevice.h \
|
||||
netfilter_bridge.h netfilter_decnet.h netfilter.h \
|
||||
netfilter_ipv4.h netfilter_ipv6.h netfilter_logging.h net.h \
|
||||
netlink.h nfs3.h nfs4.h nfsacl.h nfs_fs.h nfs.h nfs_idmap.h \
|
||||
n_r3964.h nubus.h nvram.h parport.h patchkey.h pci.h pktcdvd.h \
|
||||
pmu.h poll.h ppp_defs.h ppp-comp.h ptrace.h qnx4_fs.h quota.h \
|
||||
random.h reboot.h reiserfs_fs.h reiserfs_xattr.h romfs_fs.h \
|
||||
route.h rtc.h rtnetlink.h scc.h sched.h sdla.h \
|
||||
selinux_netlink.h sem.h serial_core.h serial.h serio.h shm.h \
|
||||
signal.h smb_fs.h smb.h smb_mount.h socket.h sonet.h sonypi.h \
|
||||
soundcard.h stat.h sysctl.h tcp.h time.h timex.h tty.h types.h \
|
||||
udf_fs_i.h udp.h uinput.h uio.h unistd.h usb_ch9.h \
|
||||
usbdevice_fs.h user.h videodev2.h videodev.h wait.h \
|
||||
wanrouter.h watchdog.h xfrm.h zftape.h
|
||||
unifdef-y += acct.h
|
||||
unifdef-y += adb.h
|
||||
unifdef-y += adfs_fs.h
|
||||
unifdef-y += agpgart.h
|
||||
unifdef-y += apm_bios.h
|
||||
unifdef-y += atalk.h
|
||||
unifdef-y += atmarp.h
|
||||
unifdef-y += atmdev.h
|
||||
unifdef-y += atm.h
|
||||
unifdef-y += atm_tcp.h
|
||||
unifdef-y += audit.h
|
||||
unifdef-y += auto_fs.h
|
||||
unifdef-y += binfmts.h
|
||||
unifdef-y += capability.h
|
||||
unifdef-y += capi.h
|
||||
unifdef-y += cciss_ioctl.h
|
||||
unifdef-y += cdrom.h
|
||||
unifdef-y += cm4000_cs.h
|
||||
unifdef-y += cn_proc.h
|
||||
unifdef-y += coda.h
|
||||
unifdef-y += connector.h
|
||||
unifdef-y += cramfs_fs.h
|
||||
unifdef-y += cuda.h
|
||||
unifdef-y += cyclades.h
|
||||
unifdef-y += dccp.h
|
||||
unifdef-y += dirent.h
|
||||
unifdef-y += divert.h
|
||||
unifdef-y += elfcore.h
|
||||
unifdef-y += errno.h
|
||||
unifdef-y += errqueue.h
|
||||
unifdef-y += ethtool.h
|
||||
unifdef-y += eventpoll.h
|
||||
unifdef-y += ext2_fs.h
|
||||
unifdef-y += ext3_fs.h
|
||||
unifdef-y += fb.h
|
||||
unifdef-y += fcntl.h
|
||||
unifdef-y += filter.h
|
||||
unifdef-y += flat.h
|
||||
unifdef-y += fs.h
|
||||
unifdef-y += ftape.h
|
||||
unifdef-y += gameport.h
|
||||
unifdef-y += generic_serial.h
|
||||
unifdef-y += genhd.h
|
||||
unifdef-y += hayesesp.h
|
||||
unifdef-y += hdlcdrv.h
|
||||
unifdef-y += hdlc.h
|
||||
unifdef-y += hdreg.h
|
||||
unifdef-y += hiddev.h
|
||||
unifdef-y += hpet.h
|
||||
unifdef-y += i2c.h
|
||||
unifdef-y += i2o-dev.h
|
||||
unifdef-y += icmpv6.h
|
||||
unifdef-y += if_bridge.h
|
||||
unifdef-y += if_ec.h
|
||||
unifdef-y += if_eql.h
|
||||
unifdef-y += if_ether.h
|
||||
unifdef-y += if_frad.h
|
||||
unifdef-y += if_ltalk.h
|
||||
unifdef-y += if_pppox.h
|
||||
unifdef-y += if_shaper.h
|
||||
unifdef-y += if_tr.h
|
||||
unifdef-y += if_tun.h
|
||||
unifdef-y += if_vlan.h
|
||||
unifdef-y += if_wanpipe.h
|
||||
unifdef-y += igmp.h
|
||||
unifdef-y += inet_diag.h
|
||||
unifdef-y += in.h
|
||||
unifdef-y += inotify.h
|
||||
unifdef-y += input.h
|
||||
unifdef-y += ipc.h
|
||||
unifdef-y += ipmi.h
|
||||
unifdef-y += ipv6.h
|
||||
unifdef-y += ipv6_route.h
|
||||
unifdef-y += isdn.h
|
||||
unifdef-y += isdnif.h
|
||||
unifdef-y += isdn_ppp.h
|
||||
unifdef-y += isicom.h
|
||||
unifdef-y += jbd.h
|
||||
unifdef-y += joystick.h
|
||||
unifdef-y += kdev_t.h
|
||||
unifdef-y += kd.h
|
||||
unifdef-y += kernelcapi.h
|
||||
unifdef-y += kernel.h
|
||||
unifdef-y += keyboard.h
|
||||
unifdef-y += llc.h
|
||||
unifdef-y += loop.h
|
||||
unifdef-y += lp.h
|
||||
unifdef-y += mempolicy.h
|
||||
unifdef-y += mii.h
|
||||
unifdef-y += mman.h
|
||||
unifdef-y += mroute.h
|
||||
unifdef-y += msdos_fs.h
|
||||
unifdef-y += msg.h
|
||||
unifdef-y += nbd.h
|
||||
unifdef-y += ncp_fs.h
|
||||
unifdef-y += ncp.h
|
||||
unifdef-y += ncp_mount.h
|
||||
unifdef-y += netdevice.h
|
||||
unifdef-y += netfilter_bridge.h
|
||||
unifdef-y += netfilter_decnet.h
|
||||
unifdef-y += netfilter.h
|
||||
unifdef-y += netfilter_ipv4.h
|
||||
unifdef-y += netfilter_ipv6.h
|
||||
unifdef-y += netfilter_logging.h
|
||||
unifdef-y += net.h
|
||||
unifdef-y += netlink.h
|
||||
unifdef-y += nfs3.h
|
||||
unifdef-y += nfs4.h
|
||||
unifdef-y += nfsacl.h
|
||||
unifdef-y += nfs_fs.h
|
||||
unifdef-y += nfs.h
|
||||
unifdef-y += nfs_idmap.h
|
||||
unifdef-y += n_r3964.h
|
||||
unifdef-y += nubus.h
|
||||
unifdef-y += nvram.h
|
||||
unifdef-y += parport.h
|
||||
unifdef-y += patchkey.h
|
||||
unifdef-y += pci.h
|
||||
unifdef-y += pktcdvd.h
|
||||
unifdef-y += pmu.h
|
||||
unifdef-y += poll.h
|
||||
unifdef-y += ppp_defs.h
|
||||
unifdef-y += ppp-comp.h
|
||||
unifdef-y += ptrace.h
|
||||
unifdef-y += qnx4_fs.h
|
||||
unifdef-y += quota.h
|
||||
unifdef-y += random.h
|
||||
unifdef-y += reboot.h
|
||||
unifdef-y += reiserfs_fs.h
|
||||
unifdef-y += reiserfs_xattr.h
|
||||
unifdef-y += romfs_fs.h
|
||||
unifdef-y += route.h
|
||||
unifdef-y += rtc.h
|
||||
unifdef-y += rtnetlink.h
|
||||
unifdef-y += scc.h
|
||||
unifdef-y += sched.h
|
||||
unifdef-y += sdla.h
|
||||
unifdef-y += selinux_netlink.h
|
||||
unifdef-y += sem.h
|
||||
unifdef-y += serial_core.h
|
||||
unifdef-y += serial.h
|
||||
unifdef-y += serio.h
|
||||
unifdef-y += shm.h
|
||||
unifdef-y += signal.h
|
||||
unifdef-y += smb_fs.h
|
||||
unifdef-y += smb.h
|
||||
unifdef-y += smb_mount.h
|
||||
unifdef-y += socket.h
|
||||
unifdef-y += sonet.h
|
||||
unifdef-y += sonypi.h
|
||||
unifdef-y += soundcard.h
|
||||
unifdef-y += stat.h
|
||||
unifdef-y += sysctl.h
|
||||
unifdef-y += tcp.h
|
||||
unifdef-y += time.h
|
||||
unifdef-y += timex.h
|
||||
unifdef-y += tty.h
|
||||
unifdef-y += types.h
|
||||
unifdef-y += udf_fs_i.h
|
||||
unifdef-y += udp.h
|
||||
unifdef-y += uinput.h
|
||||
unifdef-y += uio.h
|
||||
unifdef-y += unistd.h
|
||||
unifdef-y += usb_ch9.h
|
||||
unifdef-y += usbdevice_fs.h
|
||||
unifdef-y += user.h
|
||||
unifdef-y += videodev2.h
|
||||
unifdef-y += videodev.h
|
||||
unifdef-y += wait.h
|
||||
unifdef-y += wanrouter.h
|
||||
unifdef-y += watchdog.h
|
||||
unifdef-y += xfrm.h
|
||||
unifdef-y += zftape.h
|
||||
|
||||
objhdr-y := version.h
|
||||
objhdr-y += version.h
|
||||
|
|
|
|||
|
|
@ -1,2 +1,7 @@
|
|||
unifdef-y += generic.h swabb.h swab.h
|
||||
header-y += big_endian.h little_endian.h pdp_endian.h
|
||||
header-y += big_endian.h
|
||||
header-y += little_endian.h
|
||||
header-y += pdp_endian.h
|
||||
|
||||
unifdef-y += generic.h
|
||||
unifdef-y += swabb.h
|
||||
unifdef-y += swab.h
|
||||
|
|
|
|||
|
|
@ -17,20 +17,36 @@
|
|||
#ifndef _LINUX_CRYPTO_H
|
||||
#define _LINUX_CRYPTO_H
|
||||
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/string.h>
|
||||
#include <asm/page.h>
|
||||
#include <linux/uaccess.h>
|
||||
|
||||
/*
|
||||
* Algorithm masks and types.
|
||||
*/
|
||||
#define CRYPTO_ALG_TYPE_MASK 0x000000ff
|
||||
#define CRYPTO_ALG_TYPE_MASK 0x0000000f
|
||||
#define CRYPTO_ALG_TYPE_CIPHER 0x00000001
|
||||
#define CRYPTO_ALG_TYPE_DIGEST 0x00000002
|
||||
#define CRYPTO_ALG_TYPE_COMPRESS 0x00000004
|
||||
#define CRYPTO_ALG_TYPE_HASH 0x00000003
|
||||
#define CRYPTO_ALG_TYPE_BLKCIPHER 0x00000004
|
||||
#define CRYPTO_ALG_TYPE_COMPRESS 0x00000005
|
||||
|
||||
#define CRYPTO_ALG_TYPE_HASH_MASK 0x0000000e
|
||||
|
||||
#define CRYPTO_ALG_LARVAL 0x00000010
|
||||
#define CRYPTO_ALG_DEAD 0x00000020
|
||||
#define CRYPTO_ALG_DYING 0x00000040
|
||||
#define CRYPTO_ALG_ASYNC 0x00000080
|
||||
|
||||
/*
|
||||
* Set this bit if and only if the algorithm requires another algorithm of
|
||||
* the same type to handle corner cases.
|
||||
*/
|
||||
#define CRYPTO_ALG_NEED_FALLBACK 0x00000100
|
||||
|
||||
/*
|
||||
* Transform masks and values (for crt_flags).
|
||||
|
|
@ -61,8 +77,37 @@
|
|||
#define CRYPTO_DIR_ENCRYPT 1
|
||||
#define CRYPTO_DIR_DECRYPT 0
|
||||
|
||||
/*
|
||||
* The macro CRYPTO_MINALIGN_ATTR (along with the void * type in the actual
|
||||
* declaration) is used to ensure that the crypto_tfm context structure is
|
||||
* aligned correctly for the given architecture so that there are no alignment
|
||||
* faults for C data types. In particular, this is required on platforms such
|
||||
* as arm where pointers are 32-bit aligned but there are data types such as
|
||||
* u64 which require 64-bit alignment.
|
||||
*/
|
||||
#if defined(ARCH_KMALLOC_MINALIGN)
|
||||
#define CRYPTO_MINALIGN ARCH_KMALLOC_MINALIGN
|
||||
#elif defined(ARCH_SLAB_MINALIGN)
|
||||
#define CRYPTO_MINALIGN ARCH_SLAB_MINALIGN
|
||||
#endif
|
||||
|
||||
#ifdef CRYPTO_MINALIGN
|
||||
#define CRYPTO_MINALIGN_ATTR __attribute__ ((__aligned__(CRYPTO_MINALIGN)))
|
||||
#else
|
||||
#define CRYPTO_MINALIGN_ATTR
|
||||
#endif
|
||||
|
||||
struct scatterlist;
|
||||
struct crypto_blkcipher;
|
||||
struct crypto_hash;
|
||||
struct crypto_tfm;
|
||||
struct crypto_type;
|
||||
|
||||
struct blkcipher_desc {
|
||||
struct crypto_blkcipher *tfm;
|
||||
void *info;
|
||||
u32 flags;
|
||||
};
|
||||
|
||||
struct cipher_desc {
|
||||
struct crypto_tfm *tfm;
|
||||
|
|
@ -72,30 +117,50 @@ struct cipher_desc {
|
|||
void *info;
|
||||
};
|
||||
|
||||
struct hash_desc {
|
||||
struct crypto_hash *tfm;
|
||||
u32 flags;
|
||||
};
|
||||
|
||||
/*
|
||||
* Algorithms: modular crypto algorithm implementations, managed
|
||||
* via crypto_register_alg() and crypto_unregister_alg().
|
||||
*/
|
||||
struct blkcipher_alg {
|
||||
int (*setkey)(struct crypto_tfm *tfm, const u8 *key,
|
||||
unsigned int keylen);
|
||||
int (*encrypt)(struct blkcipher_desc *desc,
|
||||
struct scatterlist *dst, struct scatterlist *src,
|
||||
unsigned int nbytes);
|
||||
int (*decrypt)(struct blkcipher_desc *desc,
|
||||
struct scatterlist *dst, struct scatterlist *src,
|
||||
unsigned int nbytes);
|
||||
|
||||
unsigned int min_keysize;
|
||||
unsigned int max_keysize;
|
||||
unsigned int ivsize;
|
||||
};
|
||||
|
||||
struct cipher_alg {
|
||||
unsigned int cia_min_keysize;
|
||||
unsigned int cia_max_keysize;
|
||||
int (*cia_setkey)(struct crypto_tfm *tfm, const u8 *key,
|
||||
unsigned int keylen, u32 *flags);
|
||||
unsigned int keylen);
|
||||
void (*cia_encrypt)(struct crypto_tfm *tfm, u8 *dst, const u8 *src);
|
||||
void (*cia_decrypt)(struct crypto_tfm *tfm, u8 *dst, const u8 *src);
|
||||
|
||||
unsigned int (*cia_encrypt_ecb)(const struct cipher_desc *desc,
|
||||
u8 *dst, const u8 *src,
|
||||
unsigned int nbytes);
|
||||
unsigned int nbytes) __deprecated;
|
||||
unsigned int (*cia_decrypt_ecb)(const struct cipher_desc *desc,
|
||||
u8 *dst, const u8 *src,
|
||||
unsigned int nbytes);
|
||||
unsigned int nbytes) __deprecated;
|
||||
unsigned int (*cia_encrypt_cbc)(const struct cipher_desc *desc,
|
||||
u8 *dst, const u8 *src,
|
||||
unsigned int nbytes);
|
||||
unsigned int nbytes) __deprecated;
|
||||
unsigned int (*cia_decrypt_cbc)(const struct cipher_desc *desc,
|
||||
u8 *dst, const u8 *src,
|
||||
unsigned int nbytes);
|
||||
unsigned int nbytes) __deprecated;
|
||||
};
|
||||
|
||||
struct digest_alg {
|
||||
|
|
@ -105,7 +170,20 @@ struct digest_alg {
|
|||
unsigned int len);
|
||||
void (*dia_final)(struct crypto_tfm *tfm, u8 *out);
|
||||
int (*dia_setkey)(struct crypto_tfm *tfm, const u8 *key,
|
||||
unsigned int keylen, u32 *flags);
|
||||
unsigned int keylen);
|
||||
};
|
||||
|
||||
struct hash_alg {
|
||||
int (*init)(struct hash_desc *desc);
|
||||
int (*update)(struct hash_desc *desc, struct scatterlist *sg,
|
||||
unsigned int nbytes);
|
||||
int (*final)(struct hash_desc *desc, u8 *out);
|
||||
int (*digest)(struct hash_desc *desc, struct scatterlist *sg,
|
||||
unsigned int nbytes, u8 *out);
|
||||
int (*setkey)(struct crypto_hash *tfm, const u8 *key,
|
||||
unsigned int keylen);
|
||||
|
||||
unsigned int digestsize;
|
||||
};
|
||||
|
||||
struct compress_alg {
|
||||
|
|
@ -115,30 +193,40 @@ struct compress_alg {
|
|||
unsigned int slen, u8 *dst, unsigned int *dlen);
|
||||
};
|
||||
|
||||
#define cra_blkcipher cra_u.blkcipher
|
||||
#define cra_cipher cra_u.cipher
|
||||
#define cra_digest cra_u.digest
|
||||
#define cra_hash cra_u.hash
|
||||
#define cra_compress cra_u.compress
|
||||
|
||||
struct crypto_alg {
|
||||
struct list_head cra_list;
|
||||
struct list_head cra_users;
|
||||
|
||||
u32 cra_flags;
|
||||
unsigned int cra_blocksize;
|
||||
unsigned int cra_ctxsize;
|
||||
unsigned int cra_alignmask;
|
||||
|
||||
int cra_priority;
|
||||
atomic_t cra_refcnt;
|
||||
|
||||
char cra_name[CRYPTO_MAX_ALG_NAME];
|
||||
char cra_driver_name[CRYPTO_MAX_ALG_NAME];
|
||||
|
||||
const struct crypto_type *cra_type;
|
||||
|
||||
union {
|
||||
struct blkcipher_alg blkcipher;
|
||||
struct cipher_alg cipher;
|
||||
struct digest_alg digest;
|
||||
struct hash_alg hash;
|
||||
struct compress_alg compress;
|
||||
} cra_u;
|
||||
|
||||
int (*cra_init)(struct crypto_tfm *tfm);
|
||||
void (*cra_exit)(struct crypto_tfm *tfm);
|
||||
void (*cra_destroy)(struct crypto_alg *alg);
|
||||
|
||||
struct module *cra_module;
|
||||
};
|
||||
|
|
@ -153,20 +241,39 @@ int crypto_unregister_alg(struct crypto_alg *alg);
|
|||
* Algorithm query interface.
|
||||
*/
|
||||
#ifdef CONFIG_CRYPTO
|
||||
int crypto_alg_available(const char *name, u32 flags);
|
||||
int crypto_alg_available(const char *name, u32 flags)
|
||||
__deprecated_for_modules;
|
||||
int crypto_has_alg(const char *name, u32 type, u32 mask);
|
||||
#else
|
||||
static int crypto_alg_available(const char *name, u32 flags);
|
||||
__deprecated_for_modules;
|
||||
static inline int crypto_alg_available(const char *name, u32 flags)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int crypto_has_alg(const char *name, u32 type, u32 mask)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Transforms: user-instantiated objects which encapsulate algorithms
|
||||
* and core processing logic. Managed via crypto_alloc_tfm() and
|
||||
* crypto_free_tfm(), as well as the various helpers below.
|
||||
* and core processing logic. Managed via crypto_alloc_*() and
|
||||
* crypto_free_*(), as well as the various helpers below.
|
||||
*/
|
||||
|
||||
struct blkcipher_tfm {
|
||||
void *iv;
|
||||
int (*setkey)(struct crypto_tfm *tfm, const u8 *key,
|
||||
unsigned int keylen);
|
||||
int (*encrypt)(struct blkcipher_desc *desc, struct scatterlist *dst,
|
||||
struct scatterlist *src, unsigned int nbytes);
|
||||
int (*decrypt)(struct blkcipher_desc *desc, struct scatterlist *dst,
|
||||
struct scatterlist *src, unsigned int nbytes);
|
||||
};
|
||||
|
||||
struct cipher_tfm {
|
||||
void *cit_iv;
|
||||
unsigned int cit_ivsize;
|
||||
|
|
@ -190,20 +297,20 @@ struct cipher_tfm {
|
|||
struct scatterlist *src,
|
||||
unsigned int nbytes, u8 *iv);
|
||||
void (*cit_xor_block)(u8 *dst, const u8 *src);
|
||||
void (*cit_encrypt_one)(struct crypto_tfm *tfm, u8 *dst, const u8 *src);
|
||||
void (*cit_decrypt_one)(struct crypto_tfm *tfm, u8 *dst, const u8 *src);
|
||||
};
|
||||
|
||||
struct digest_tfm {
|
||||
void (*dit_init)(struct crypto_tfm *tfm);
|
||||
void (*dit_update)(struct crypto_tfm *tfm,
|
||||
struct scatterlist *sg, unsigned int nsg);
|
||||
void (*dit_final)(struct crypto_tfm *tfm, u8 *out);
|
||||
void (*dit_digest)(struct crypto_tfm *tfm, struct scatterlist *sg,
|
||||
unsigned int nsg, u8 *out);
|
||||
int (*dit_setkey)(struct crypto_tfm *tfm,
|
||||
const u8 *key, unsigned int keylen);
|
||||
#ifdef CONFIG_CRYPTO_HMAC
|
||||
void *dit_hmac_block;
|
||||
#endif
|
||||
struct hash_tfm {
|
||||
int (*init)(struct hash_desc *desc);
|
||||
int (*update)(struct hash_desc *desc,
|
||||
struct scatterlist *sg, unsigned int nsg);
|
||||
int (*final)(struct hash_desc *desc, u8 *out);
|
||||
int (*digest)(struct hash_desc *desc, struct scatterlist *sg,
|
||||
unsigned int nsg, u8 *out);
|
||||
int (*setkey)(struct crypto_hash *tfm, const u8 *key,
|
||||
unsigned int keylen);
|
||||
unsigned int digestsize;
|
||||
};
|
||||
|
||||
struct compress_tfm {
|
||||
|
|
@ -215,8 +322,9 @@ struct compress_tfm {
|
|||
u8 *dst, unsigned int *dlen);
|
||||
};
|
||||
|
||||
#define crt_blkcipher crt_u.blkcipher
|
||||
#define crt_cipher crt_u.cipher
|
||||
#define crt_digest crt_u.digest
|
||||
#define crt_hash crt_u.hash
|
||||
#define crt_compress crt_u.compress
|
||||
|
||||
struct crypto_tfm {
|
||||
|
|
@ -224,30 +332,43 @@ struct crypto_tfm {
|
|||
u32 crt_flags;
|
||||
|
||||
union {
|
||||
struct blkcipher_tfm blkcipher;
|
||||
struct cipher_tfm cipher;
|
||||
struct digest_tfm digest;
|
||||
struct hash_tfm hash;
|
||||
struct compress_tfm compress;
|
||||
} crt_u;
|
||||
|
||||
struct crypto_alg *__crt_alg;
|
||||
|
||||
char __crt_ctx[] __attribute__ ((__aligned__));
|
||||
void *__crt_ctx[] CRYPTO_MINALIGN_ATTR;
|
||||
};
|
||||
|
||||
#define crypto_cipher crypto_tfm
|
||||
#define crypto_comp crypto_tfm
|
||||
|
||||
struct crypto_blkcipher {
|
||||
struct crypto_tfm base;
|
||||
};
|
||||
|
||||
struct crypto_hash {
|
||||
struct crypto_tfm base;
|
||||
};
|
||||
|
||||
enum {
|
||||
CRYPTOA_UNSPEC,
|
||||
CRYPTOA_ALG,
|
||||
};
|
||||
|
||||
struct crypto_attr_alg {
|
||||
char name[CRYPTO_MAX_ALG_NAME];
|
||||
};
|
||||
|
||||
/*
|
||||
* Transform user interface.
|
||||
*/
|
||||
|
||||
/*
|
||||
* crypto_alloc_tfm() will first attempt to locate an already loaded algorithm.
|
||||
* If that fails and the kernel supports dynamically loadable modules, it
|
||||
* will then attempt to load a module of the same name or alias. A refcount
|
||||
* is grabbed on the algorithm which is then associated with the new transform.
|
||||
*
|
||||
* crypto_free_tfm() frees up the transform and any associated resources,
|
||||
* then drops the refcount on the associated algorithm.
|
||||
*/
|
||||
struct crypto_tfm *crypto_alloc_tfm(const char *alg_name, u32 tfm_flags);
|
||||
struct crypto_tfm *crypto_alloc_base(const char *alg_name, u32 type, u32 mask);
|
||||
void crypto_free_tfm(struct crypto_tfm *tfm);
|
||||
|
||||
/*
|
||||
|
|
@ -258,6 +379,16 @@ static inline const char *crypto_tfm_alg_name(struct crypto_tfm *tfm)
|
|||
return tfm->__crt_alg->cra_name;
|
||||
}
|
||||
|
||||
static inline const char *crypto_tfm_alg_driver_name(struct crypto_tfm *tfm)
|
||||
{
|
||||
return tfm->__crt_alg->cra_driver_name;
|
||||
}
|
||||
|
||||
static inline int crypto_tfm_alg_priority(struct crypto_tfm *tfm)
|
||||
{
|
||||
return tfm->__crt_alg->cra_priority;
|
||||
}
|
||||
|
||||
static inline const char *crypto_tfm_alg_modname(struct crypto_tfm *tfm)
|
||||
{
|
||||
return module_name(tfm->__crt_alg->cra_module);
|
||||
|
|
@ -268,18 +399,23 @@ static inline u32 crypto_tfm_alg_type(struct crypto_tfm *tfm)
|
|||
return tfm->__crt_alg->cra_flags & CRYPTO_ALG_TYPE_MASK;
|
||||
}
|
||||
|
||||
static unsigned int crypto_tfm_alg_min_keysize(struct crypto_tfm *tfm)
|
||||
__deprecated;
|
||||
static inline unsigned int crypto_tfm_alg_min_keysize(struct crypto_tfm *tfm)
|
||||
{
|
||||
BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
|
||||
return tfm->__crt_alg->cra_cipher.cia_min_keysize;
|
||||
}
|
||||
|
||||
static unsigned int crypto_tfm_alg_max_keysize(struct crypto_tfm *tfm)
|
||||
__deprecated;
|
||||
static inline unsigned int crypto_tfm_alg_max_keysize(struct crypto_tfm *tfm)
|
||||
{
|
||||
BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
|
||||
return tfm->__crt_alg->cra_cipher.cia_max_keysize;
|
||||
}
|
||||
|
||||
static unsigned int crypto_tfm_alg_ivsize(struct crypto_tfm *tfm) __deprecated;
|
||||
static inline unsigned int crypto_tfm_alg_ivsize(struct crypto_tfm *tfm)
|
||||
{
|
||||
BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
|
||||
|
|
@ -302,6 +438,21 @@ static inline unsigned int crypto_tfm_alg_alignmask(struct crypto_tfm *tfm)
|
|||
return tfm->__crt_alg->cra_alignmask;
|
||||
}
|
||||
|
||||
static inline u32 crypto_tfm_get_flags(struct crypto_tfm *tfm)
|
||||
{
|
||||
return tfm->crt_flags;
|
||||
}
|
||||
|
||||
static inline void crypto_tfm_set_flags(struct crypto_tfm *tfm, u32 flags)
|
||||
{
|
||||
tfm->crt_flags |= flags;
|
||||
}
|
||||
|
||||
static inline void crypto_tfm_clear_flags(struct crypto_tfm *tfm, u32 flags)
|
||||
{
|
||||
tfm->crt_flags &= ~flags;
|
||||
}
|
||||
|
||||
static inline void *crypto_tfm_ctx(struct crypto_tfm *tfm)
|
||||
{
|
||||
return tfm->__crt_ctx;
|
||||
|
|
@ -316,50 +467,374 @@ static inline unsigned int crypto_tfm_ctx_alignment(void)
|
|||
/*
|
||||
* API wrappers.
|
||||
*/
|
||||
static inline void crypto_digest_init(struct crypto_tfm *tfm)
|
||||
static inline struct crypto_blkcipher *__crypto_blkcipher_cast(
|
||||
struct crypto_tfm *tfm)
|
||||
{
|
||||
BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST);
|
||||
tfm->crt_digest.dit_init(tfm);
|
||||
return (struct crypto_blkcipher *)tfm;
|
||||
}
|
||||
|
||||
static inline void crypto_digest_update(struct crypto_tfm *tfm,
|
||||
struct scatterlist *sg,
|
||||
unsigned int nsg)
|
||||
static inline struct crypto_blkcipher *crypto_blkcipher_cast(
|
||||
struct crypto_tfm *tfm)
|
||||
{
|
||||
BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST);
|
||||
tfm->crt_digest.dit_update(tfm, sg, nsg);
|
||||
BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_BLKCIPHER);
|
||||
return __crypto_blkcipher_cast(tfm);
|
||||
}
|
||||
|
||||
static inline void crypto_digest_final(struct crypto_tfm *tfm, u8 *out)
|
||||
static inline struct crypto_blkcipher *crypto_alloc_blkcipher(
|
||||
const char *alg_name, u32 type, u32 mask)
|
||||
{
|
||||
BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST);
|
||||
tfm->crt_digest.dit_final(tfm, out);
|
||||
type &= ~CRYPTO_ALG_TYPE_MASK;
|
||||
type |= CRYPTO_ALG_TYPE_BLKCIPHER;
|
||||
mask |= CRYPTO_ALG_TYPE_MASK;
|
||||
|
||||
return __crypto_blkcipher_cast(crypto_alloc_base(alg_name, type, mask));
|
||||
}
|
||||
|
||||
static inline void crypto_digest_digest(struct crypto_tfm *tfm,
|
||||
struct scatterlist *sg,
|
||||
unsigned int nsg, u8 *out)
|
||||
static inline struct crypto_tfm *crypto_blkcipher_tfm(
|
||||
struct crypto_blkcipher *tfm)
|
||||
{
|
||||
BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST);
|
||||
tfm->crt_digest.dit_digest(tfm, sg, nsg, out);
|
||||
return &tfm->base;
|
||||
}
|
||||
|
||||
static inline void crypto_free_blkcipher(struct crypto_blkcipher *tfm)
|
||||
{
|
||||
crypto_free_tfm(crypto_blkcipher_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline int crypto_has_blkcipher(const char *alg_name, u32 type, u32 mask)
|
||||
{
|
||||
type &= ~CRYPTO_ALG_TYPE_MASK;
|
||||
type |= CRYPTO_ALG_TYPE_BLKCIPHER;
|
||||
mask |= CRYPTO_ALG_TYPE_MASK;
|
||||
|
||||
return crypto_has_alg(alg_name, type, mask);
|
||||
}
|
||||
|
||||
static inline const char *crypto_blkcipher_name(struct crypto_blkcipher *tfm)
|
||||
{
|
||||
return crypto_tfm_alg_name(crypto_blkcipher_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline struct blkcipher_tfm *crypto_blkcipher_crt(
|
||||
struct crypto_blkcipher *tfm)
|
||||
{
|
||||
return &crypto_blkcipher_tfm(tfm)->crt_blkcipher;
|
||||
}
|
||||
|
||||
static inline struct blkcipher_alg *crypto_blkcipher_alg(
|
||||
struct crypto_blkcipher *tfm)
|
||||
{
|
||||
return &crypto_blkcipher_tfm(tfm)->__crt_alg->cra_blkcipher;
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_blkcipher_ivsize(struct crypto_blkcipher *tfm)
|
||||
{
|
||||
return crypto_blkcipher_alg(tfm)->ivsize;
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_blkcipher_blocksize(
|
||||
struct crypto_blkcipher *tfm)
|
||||
{
|
||||
return crypto_tfm_alg_blocksize(crypto_blkcipher_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_blkcipher_alignmask(
|
||||
struct crypto_blkcipher *tfm)
|
||||
{
|
||||
return crypto_tfm_alg_alignmask(crypto_blkcipher_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline u32 crypto_blkcipher_get_flags(struct crypto_blkcipher *tfm)
|
||||
{
|
||||
return crypto_tfm_get_flags(crypto_blkcipher_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline void crypto_blkcipher_set_flags(struct crypto_blkcipher *tfm,
|
||||
u32 flags)
|
||||
{
|
||||
crypto_tfm_set_flags(crypto_blkcipher_tfm(tfm), flags);
|
||||
}
|
||||
|
||||
static inline void crypto_blkcipher_clear_flags(struct crypto_blkcipher *tfm,
|
||||
u32 flags)
|
||||
{
|
||||
crypto_tfm_clear_flags(crypto_blkcipher_tfm(tfm), flags);
|
||||
}
|
||||
|
||||
static inline int crypto_blkcipher_setkey(struct crypto_blkcipher *tfm,
|
||||
const u8 *key, unsigned int keylen)
|
||||
{
|
||||
return crypto_blkcipher_crt(tfm)->setkey(crypto_blkcipher_tfm(tfm),
|
||||
key, keylen);
|
||||
}
|
||||
|
||||
static inline int crypto_blkcipher_encrypt(struct blkcipher_desc *desc,
|
||||
struct scatterlist *dst,
|
||||
struct scatterlist *src,
|
||||
unsigned int nbytes)
|
||||
{
|
||||
desc->info = crypto_blkcipher_crt(desc->tfm)->iv;
|
||||
return crypto_blkcipher_crt(desc->tfm)->encrypt(desc, dst, src, nbytes);
|
||||
}
|
||||
|
||||
static inline int crypto_blkcipher_encrypt_iv(struct blkcipher_desc *desc,
|
||||
struct scatterlist *dst,
|
||||
struct scatterlist *src,
|
||||
unsigned int nbytes)
|
||||
{
|
||||
return crypto_blkcipher_crt(desc->tfm)->encrypt(desc, dst, src, nbytes);
|
||||
}
|
||||
|
||||
static inline int crypto_blkcipher_decrypt(struct blkcipher_desc *desc,
|
||||
struct scatterlist *dst,
|
||||
struct scatterlist *src,
|
||||
unsigned int nbytes)
|
||||
{
|
||||
desc->info = crypto_blkcipher_crt(desc->tfm)->iv;
|
||||
return crypto_blkcipher_crt(desc->tfm)->decrypt(desc, dst, src, nbytes);
|
||||
}
|
||||
|
||||
static inline int crypto_blkcipher_decrypt_iv(struct blkcipher_desc *desc,
|
||||
struct scatterlist *dst,
|
||||
struct scatterlist *src,
|
||||
unsigned int nbytes)
|
||||
{
|
||||
return crypto_blkcipher_crt(desc->tfm)->decrypt(desc, dst, src, nbytes);
|
||||
}
|
||||
|
||||
static inline void crypto_blkcipher_set_iv(struct crypto_blkcipher *tfm,
|
||||
const u8 *src, unsigned int len)
|
||||
{
|
||||
memcpy(crypto_blkcipher_crt(tfm)->iv, src, len);
|
||||
}
|
||||
|
||||
static inline void crypto_blkcipher_get_iv(struct crypto_blkcipher *tfm,
|
||||
u8 *dst, unsigned int len)
|
||||
{
|
||||
memcpy(dst, crypto_blkcipher_crt(tfm)->iv, len);
|
||||
}
|
||||
|
||||
static inline struct crypto_cipher *__crypto_cipher_cast(struct crypto_tfm *tfm)
|
||||
{
|
||||
return (struct crypto_cipher *)tfm;
|
||||
}
|
||||
|
||||
static inline struct crypto_cipher *crypto_cipher_cast(struct crypto_tfm *tfm)
|
||||
{
|
||||
BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
|
||||
return __crypto_cipher_cast(tfm);
|
||||
}
|
||||
|
||||
static inline struct crypto_cipher *crypto_alloc_cipher(const char *alg_name,
|
||||
u32 type, u32 mask)
|
||||
{
|
||||
type &= ~CRYPTO_ALG_TYPE_MASK;
|
||||
type |= CRYPTO_ALG_TYPE_CIPHER;
|
||||
mask |= CRYPTO_ALG_TYPE_MASK;
|
||||
|
||||
return __crypto_cipher_cast(crypto_alloc_base(alg_name, type, mask));
|
||||
}
|
||||
|
||||
static inline struct crypto_tfm *crypto_cipher_tfm(struct crypto_cipher *tfm)
|
||||
{
|
||||
return tfm;
|
||||
}
|
||||
|
||||
static inline void crypto_free_cipher(struct crypto_cipher *tfm)
|
||||
{
|
||||
crypto_free_tfm(crypto_cipher_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline int crypto_has_cipher(const char *alg_name, u32 type, u32 mask)
|
||||
{
|
||||
type &= ~CRYPTO_ALG_TYPE_MASK;
|
||||
type |= CRYPTO_ALG_TYPE_CIPHER;
|
||||
mask |= CRYPTO_ALG_TYPE_MASK;
|
||||
|
||||
return crypto_has_alg(alg_name, type, mask);
|
||||
}
|
||||
|
||||
static inline struct cipher_tfm *crypto_cipher_crt(struct crypto_cipher *tfm)
|
||||
{
|
||||
return &crypto_cipher_tfm(tfm)->crt_cipher;
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_cipher_blocksize(struct crypto_cipher *tfm)
|
||||
{
|
||||
return crypto_tfm_alg_blocksize(crypto_cipher_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_cipher_alignmask(struct crypto_cipher *tfm)
|
||||
{
|
||||
return crypto_tfm_alg_alignmask(crypto_cipher_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline u32 crypto_cipher_get_flags(struct crypto_cipher *tfm)
|
||||
{
|
||||
return crypto_tfm_get_flags(crypto_cipher_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline void crypto_cipher_set_flags(struct crypto_cipher *tfm,
|
||||
u32 flags)
|
||||
{
|
||||
crypto_tfm_set_flags(crypto_cipher_tfm(tfm), flags);
|
||||
}
|
||||
|
||||
static inline void crypto_cipher_clear_flags(struct crypto_cipher *tfm,
|
||||
u32 flags)
|
||||
{
|
||||
crypto_tfm_clear_flags(crypto_cipher_tfm(tfm), flags);
|
||||
}
|
||||
|
||||
static inline int crypto_cipher_setkey(struct crypto_cipher *tfm,
|
||||
const u8 *key, unsigned int keylen)
|
||||
{
|
||||
return crypto_cipher_crt(tfm)->cit_setkey(crypto_cipher_tfm(tfm),
|
||||
key, keylen);
|
||||
}
|
||||
|
||||
static inline void crypto_cipher_encrypt_one(struct crypto_cipher *tfm,
|
||||
u8 *dst, const u8 *src)
|
||||
{
|
||||
crypto_cipher_crt(tfm)->cit_encrypt_one(crypto_cipher_tfm(tfm),
|
||||
dst, src);
|
||||
}
|
||||
|
||||
static inline void crypto_cipher_decrypt_one(struct crypto_cipher *tfm,
|
||||
u8 *dst, const u8 *src)
|
||||
{
|
||||
crypto_cipher_crt(tfm)->cit_decrypt_one(crypto_cipher_tfm(tfm),
|
||||
dst, src);
|
||||
}
|
||||
|
||||
void crypto_digest_init(struct crypto_tfm *tfm) __deprecated_for_modules;
|
||||
void crypto_digest_update(struct crypto_tfm *tfm,
|
||||
struct scatterlist *sg, unsigned int nsg)
|
||||
__deprecated_for_modules;
|
||||
void crypto_digest_final(struct crypto_tfm *tfm, u8 *out)
|
||||
__deprecated_for_modules;
|
||||
void crypto_digest_digest(struct crypto_tfm *tfm,
|
||||
struct scatterlist *sg, unsigned int nsg, u8 *out)
|
||||
__deprecated_for_modules;
|
||||
|
||||
static inline struct crypto_hash *__crypto_hash_cast(struct crypto_tfm *tfm)
|
||||
{
|
||||
return (struct crypto_hash *)tfm;
|
||||
}
|
||||
|
||||
static inline struct crypto_hash *crypto_hash_cast(struct crypto_tfm *tfm)
|
||||
{
|
||||
BUG_ON((crypto_tfm_alg_type(tfm) ^ CRYPTO_ALG_TYPE_HASH) &
|
||||
CRYPTO_ALG_TYPE_HASH_MASK);
|
||||
return __crypto_hash_cast(tfm);
|
||||
}
|
||||
|
||||
static int crypto_digest_setkey(struct crypto_tfm *tfm, const u8 *key,
|
||||
unsigned int keylen) __deprecated;
|
||||
static inline int crypto_digest_setkey(struct crypto_tfm *tfm,
|
||||
const u8 *key, unsigned int keylen)
|
||||
{
|
||||
BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST);
|
||||
if (tfm->crt_digest.dit_setkey == NULL)
|
||||
return -ENOSYS;
|
||||
return tfm->crt_digest.dit_setkey(tfm, key, keylen);
|
||||
return tfm->crt_hash.setkey(crypto_hash_cast(tfm), key, keylen);
|
||||
}
|
||||
|
||||
static inline int crypto_cipher_setkey(struct crypto_tfm *tfm,
|
||||
const u8 *key, unsigned int keylen)
|
||||
static inline struct crypto_hash *crypto_alloc_hash(const char *alg_name,
|
||||
u32 type, u32 mask)
|
||||
{
|
||||
BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
|
||||
return tfm->crt_cipher.cit_setkey(tfm, key, keylen);
|
||||
type &= ~CRYPTO_ALG_TYPE_MASK;
|
||||
type |= CRYPTO_ALG_TYPE_HASH;
|
||||
mask |= CRYPTO_ALG_TYPE_HASH_MASK;
|
||||
|
||||
return __crypto_hash_cast(crypto_alloc_base(alg_name, type, mask));
|
||||
}
|
||||
|
||||
static inline struct crypto_tfm *crypto_hash_tfm(struct crypto_hash *tfm)
|
||||
{
|
||||
return &tfm->base;
|
||||
}
|
||||
|
||||
static inline void crypto_free_hash(struct crypto_hash *tfm)
|
||||
{
|
||||
crypto_free_tfm(crypto_hash_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline int crypto_has_hash(const char *alg_name, u32 type, u32 mask)
|
||||
{
|
||||
type &= ~CRYPTO_ALG_TYPE_MASK;
|
||||
type |= CRYPTO_ALG_TYPE_HASH;
|
||||
mask |= CRYPTO_ALG_TYPE_HASH_MASK;
|
||||
|
||||
return crypto_has_alg(alg_name, type, mask);
|
||||
}
|
||||
|
||||
static inline struct hash_tfm *crypto_hash_crt(struct crypto_hash *tfm)
|
||||
{
|
||||
return &crypto_hash_tfm(tfm)->crt_hash;
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_hash_blocksize(struct crypto_hash *tfm)
|
||||
{
|
||||
return crypto_tfm_alg_blocksize(crypto_hash_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_hash_alignmask(struct crypto_hash *tfm)
|
||||
{
|
||||
return crypto_tfm_alg_alignmask(crypto_hash_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_hash_digestsize(struct crypto_hash *tfm)
|
||||
{
|
||||
return crypto_hash_crt(tfm)->digestsize;
|
||||
}
|
||||
|
||||
static inline u32 crypto_hash_get_flags(struct crypto_hash *tfm)
|
||||
{
|
||||
return crypto_tfm_get_flags(crypto_hash_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline void crypto_hash_set_flags(struct crypto_hash *tfm, u32 flags)
|
||||
{
|
||||
crypto_tfm_set_flags(crypto_hash_tfm(tfm), flags);
|
||||
}
|
||||
|
||||
static inline void crypto_hash_clear_flags(struct crypto_hash *tfm, u32 flags)
|
||||
{
|
||||
crypto_tfm_clear_flags(crypto_hash_tfm(tfm), flags);
|
||||
}
|
||||
|
||||
static inline int crypto_hash_init(struct hash_desc *desc)
|
||||
{
|
||||
return crypto_hash_crt(desc->tfm)->init(desc);
|
||||
}
|
||||
|
||||
static inline int crypto_hash_update(struct hash_desc *desc,
|
||||
struct scatterlist *sg,
|
||||
unsigned int nbytes)
|
||||
{
|
||||
return crypto_hash_crt(desc->tfm)->update(desc, sg, nbytes);
|
||||
}
|
||||
|
||||
static inline int crypto_hash_final(struct hash_desc *desc, u8 *out)
|
||||
{
|
||||
return crypto_hash_crt(desc->tfm)->final(desc, out);
|
||||
}
|
||||
|
||||
static inline int crypto_hash_digest(struct hash_desc *desc,
|
||||
struct scatterlist *sg,
|
||||
unsigned int nbytes, u8 *out)
|
||||
{
|
||||
return crypto_hash_crt(desc->tfm)->digest(desc, sg, nbytes, out);
|
||||
}
|
||||
|
||||
static inline int crypto_hash_setkey(struct crypto_hash *hash,
|
||||
const u8 *key, unsigned int keylen)
|
||||
{
|
||||
return crypto_hash_crt(hash)->setkey(hash, key, keylen);
|
||||
}
|
||||
|
||||
static int crypto_cipher_encrypt(struct crypto_tfm *tfm,
|
||||
struct scatterlist *dst,
|
||||
struct scatterlist *src,
|
||||
unsigned int nbytes) __deprecated;
|
||||
static inline int crypto_cipher_encrypt(struct crypto_tfm *tfm,
|
||||
struct scatterlist *dst,
|
||||
struct scatterlist *src,
|
||||
|
|
@ -369,16 +844,23 @@ static inline int crypto_cipher_encrypt(struct crypto_tfm *tfm,
|
|||
return tfm->crt_cipher.cit_encrypt(tfm, dst, src, nbytes);
|
||||
}
|
||||
|
||||
static int crypto_cipher_encrypt_iv(struct crypto_tfm *tfm,
|
||||
struct scatterlist *dst,
|
||||
struct scatterlist *src,
|
||||
unsigned int nbytes, u8 *iv) __deprecated;
|
||||
static inline int crypto_cipher_encrypt_iv(struct crypto_tfm *tfm,
|
||||
struct scatterlist *dst,
|
||||
struct scatterlist *src,
|
||||
unsigned int nbytes, u8 *iv)
|
||||
{
|
||||
BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
|
||||
BUG_ON(tfm->crt_cipher.cit_mode == CRYPTO_TFM_MODE_ECB);
|
||||
return tfm->crt_cipher.cit_encrypt_iv(tfm, dst, src, nbytes, iv);
|
||||
}
|
||||
|
||||
static int crypto_cipher_decrypt(struct crypto_tfm *tfm,
|
||||
struct scatterlist *dst,
|
||||
struct scatterlist *src,
|
||||
unsigned int nbytes) __deprecated;
|
||||
static inline int crypto_cipher_decrypt(struct crypto_tfm *tfm,
|
||||
struct scatterlist *dst,
|
||||
struct scatterlist *src,
|
||||
|
|
@ -388,16 +870,21 @@ static inline int crypto_cipher_decrypt(struct crypto_tfm *tfm,
|
|||
return tfm->crt_cipher.cit_decrypt(tfm, dst, src, nbytes);
|
||||
}
|
||||
|
||||
static int crypto_cipher_decrypt_iv(struct crypto_tfm *tfm,
|
||||
struct scatterlist *dst,
|
||||
struct scatterlist *src,
|
||||
unsigned int nbytes, u8 *iv) __deprecated;
|
||||
static inline int crypto_cipher_decrypt_iv(struct crypto_tfm *tfm,
|
||||
struct scatterlist *dst,
|
||||
struct scatterlist *src,
|
||||
unsigned int nbytes, u8 *iv)
|
||||
{
|
||||
BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
|
||||
BUG_ON(tfm->crt_cipher.cit_mode == CRYPTO_TFM_MODE_ECB);
|
||||
return tfm->crt_cipher.cit_decrypt_iv(tfm, dst, src, nbytes, iv);
|
||||
}
|
||||
|
||||
static void crypto_cipher_set_iv(struct crypto_tfm *tfm,
|
||||
const u8 *src, unsigned int len) __deprecated;
|
||||
static inline void crypto_cipher_set_iv(struct crypto_tfm *tfm,
|
||||
const u8 *src, unsigned int len)
|
||||
{
|
||||
|
|
@ -405,6 +892,8 @@ static inline void crypto_cipher_set_iv(struct crypto_tfm *tfm,
|
|||
memcpy(tfm->crt_cipher.cit_iv, src, len);
|
||||
}
|
||||
|
||||
static void crypto_cipher_get_iv(struct crypto_tfm *tfm,
|
||||
u8 *dst, unsigned int len) __deprecated;
|
||||
static inline void crypto_cipher_get_iv(struct crypto_tfm *tfm,
|
||||
u8 *dst, unsigned int len)
|
||||
{
|
||||
|
|
@ -412,34 +901,70 @@ static inline void crypto_cipher_get_iv(struct crypto_tfm *tfm,
|
|||
memcpy(dst, tfm->crt_cipher.cit_iv, len);
|
||||
}
|
||||
|
||||
static inline int crypto_comp_compress(struct crypto_tfm *tfm,
|
||||
static inline struct crypto_comp *__crypto_comp_cast(struct crypto_tfm *tfm)
|
||||
{
|
||||
return (struct crypto_comp *)tfm;
|
||||
}
|
||||
|
||||
static inline struct crypto_comp *crypto_comp_cast(struct crypto_tfm *tfm)
|
||||
{
|
||||
BUG_ON((crypto_tfm_alg_type(tfm) ^ CRYPTO_ALG_TYPE_COMPRESS) &
|
||||
CRYPTO_ALG_TYPE_MASK);
|
||||
return __crypto_comp_cast(tfm);
|
||||
}
|
||||
|
||||
static inline struct crypto_comp *crypto_alloc_comp(const char *alg_name,
|
||||
u32 type, u32 mask)
|
||||
{
|
||||
type &= ~CRYPTO_ALG_TYPE_MASK;
|
||||
type |= CRYPTO_ALG_TYPE_COMPRESS;
|
||||
mask |= CRYPTO_ALG_TYPE_MASK;
|
||||
|
||||
return __crypto_comp_cast(crypto_alloc_base(alg_name, type, mask));
|
||||
}
|
||||
|
||||
static inline struct crypto_tfm *crypto_comp_tfm(struct crypto_comp *tfm)
|
||||
{
|
||||
return tfm;
|
||||
}
|
||||
|
||||
static inline void crypto_free_comp(struct crypto_comp *tfm)
|
||||
{
|
||||
crypto_free_tfm(crypto_comp_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline int crypto_has_comp(const char *alg_name, u32 type, u32 mask)
|
||||
{
|
||||
type &= ~CRYPTO_ALG_TYPE_MASK;
|
||||
type |= CRYPTO_ALG_TYPE_COMPRESS;
|
||||
mask |= CRYPTO_ALG_TYPE_MASK;
|
||||
|
||||
return crypto_has_alg(alg_name, type, mask);
|
||||
}
|
||||
|
||||
static inline const char *crypto_comp_name(struct crypto_comp *tfm)
|
||||
{
|
||||
return crypto_tfm_alg_name(crypto_comp_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline struct compress_tfm *crypto_comp_crt(struct crypto_comp *tfm)
|
||||
{
|
||||
return &crypto_comp_tfm(tfm)->crt_compress;
|
||||
}
|
||||
|
||||
static inline int crypto_comp_compress(struct crypto_comp *tfm,
|
||||
const u8 *src, unsigned int slen,
|
||||
u8 *dst, unsigned int *dlen)
|
||||
{
|
||||
BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_COMPRESS);
|
||||
return tfm->crt_compress.cot_compress(tfm, src, slen, dst, dlen);
|
||||
return crypto_comp_crt(tfm)->cot_compress(tfm, src, slen, dst, dlen);
|
||||
}
|
||||
|
||||
static inline int crypto_comp_decompress(struct crypto_tfm *tfm,
|
||||
static inline int crypto_comp_decompress(struct crypto_comp *tfm,
|
||||
const u8 *src, unsigned int slen,
|
||||
u8 *dst, unsigned int *dlen)
|
||||
{
|
||||
BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_COMPRESS);
|
||||
return tfm->crt_compress.cot_decompress(tfm, src, slen, dst, dlen);
|
||||
return crypto_comp_crt(tfm)->cot_decompress(tfm, src, slen, dst, dlen);
|
||||
}
|
||||
|
||||
/*
|
||||
* HMAC support.
|
||||
*/
|
||||
#ifdef CONFIG_CRYPTO_HMAC
|
||||
void crypto_hmac_init(struct crypto_tfm *tfm, u8 *key, unsigned int *keylen);
|
||||
void crypto_hmac_update(struct crypto_tfm *tfm,
|
||||
struct scatterlist *sg, unsigned int nsg);
|
||||
void crypto_hmac_final(struct crypto_tfm *tfm, u8 *key,
|
||||
unsigned int *keylen, u8 *out);
|
||||
void crypto_hmac(struct crypto_tfm *tfm, u8 *key, unsigned int *keylen,
|
||||
struct scatterlist *sg, unsigned int nsg, u8 *out);
|
||||
#endif /* CONFIG_CRYPTO_HMAC */
|
||||
|
||||
#endif /* _LINUX_CRYPTO_H */
|
||||
|
||||
|
|
|
|||
|
|
@ -1,2 +1,9 @@
|
|||
header-y += ca.h frontend.h net.h osd.h version.h
|
||||
unifdef-y := audio.h dmx.h video.h
|
||||
header-y += ca.h
|
||||
header-y += frontend.h
|
||||
header-y += net.h
|
||||
header-y += osd.h
|
||||
header-y += version.h
|
||||
|
||||
unifdef-y += audio.h
|
||||
unifdef-y += dmx.h
|
||||
unifdef-y += video.h
|
||||
|
|
|
|||
|
|
@ -148,6 +148,17 @@ struct ccw_device_id {
|
|||
#define CCW_DEVICE_ID_MATCH_DEVICE_TYPE 0x04
|
||||
#define CCW_DEVICE_ID_MATCH_DEVICE_MODEL 0x08
|
||||
|
||||
/* s390 AP bus devices */
|
||||
struct ap_device_id {
|
||||
__u16 match_flags; /* which fields to match against */
|
||||
__u8 dev_type; /* device type */
|
||||
__u8 pad1;
|
||||
__u32 pad2;
|
||||
kernel_ulong_t driver_info;
|
||||
};
|
||||
|
||||
#define AP_DEVICE_ID_MATCH_DEVICE_TYPE 0x01
|
||||
|
||||
|
||||
#define PNP_ID_LEN 8
|
||||
#define PNP_MAX_DEVICES 8
|
||||
|
|
|
|||
|
|
@ -1,11 +1,38 @@
|
|||
header-y := nf_conntrack_sctp.h nf_conntrack_tuple_common.h \
|
||||
nfnetlink_conntrack.h nfnetlink_log.h nfnetlink_queue.h \
|
||||
xt_CLASSIFY.h xt_comment.h xt_connbytes.h xt_connmark.h \
|
||||
xt_CONNMARK.h xt_conntrack.h xt_dccp.h xt_esp.h \
|
||||
xt_helper.h xt_length.h xt_limit.h xt_mac.h xt_mark.h \
|
||||
xt_MARK.h xt_multiport.h xt_NFQUEUE.h xt_pkttype.h \
|
||||
xt_policy.h xt_realm.h xt_sctp.h xt_state.h xt_string.h \
|
||||
xt_tcpmss.h xt_tcpudp.h xt_SECMARK.h xt_CONNSECMARK.h
|
||||
header-y += nf_conntrack_sctp.h
|
||||
header-y += nf_conntrack_tuple_common.h
|
||||
header-y += nfnetlink_conntrack.h
|
||||
header-y += nfnetlink_log.h
|
||||
header-y += nfnetlink_queue.h
|
||||
header-y += xt_CLASSIFY.h
|
||||
header-y += xt_comment.h
|
||||
header-y += xt_connbytes.h
|
||||
header-y += xt_connmark.h
|
||||
header-y += xt_CONNMARK.h
|
||||
header-y += xt_conntrack.h
|
||||
header-y += xt_dccp.h
|
||||
header-y += xt_esp.h
|
||||
header-y += xt_helper.h
|
||||
header-y += xt_length.h
|
||||
header-y += xt_limit.h
|
||||
header-y += xt_mac.h
|
||||
header-y += xt_mark.h
|
||||
header-y += xt_MARK.h
|
||||
header-y += xt_multiport.h
|
||||
header-y += xt_NFQUEUE.h
|
||||
header-y += xt_pkttype.h
|
||||
header-y += xt_policy.h
|
||||
header-y += xt_realm.h
|
||||
header-y += xt_sctp.h
|
||||
header-y += xt_state.h
|
||||
header-y += xt_string.h
|
||||
header-y += xt_tcpmss.h
|
||||
header-y += xt_tcpudp.h
|
||||
header-y += xt_SECMARK.h
|
||||
header-y += xt_CONNSECMARK.h
|
||||
|
||||
unifdef-y := nf_conntrack_common.h nf_conntrack_ftp.h \
|
||||
nf_conntrack_tcp.h nfnetlink.h x_tables.h xt_physdev.h
|
||||
unifdef-y += nf_conntrack_common.h
|
||||
unifdef-y += nf_conntrack_ftp.h
|
||||
unifdef-y += nf_conntrack_tcp.h
|
||||
unifdef-y += nfnetlink.h
|
||||
unifdef-y += x_tables.h
|
||||
unifdef-y += xt_physdev.h
|
||||
|
|
|
|||
|
|
@ -1,2 +1,3 @@
|
|||
header-y := arpt_mangle.h
|
||||
unifdef-y := arp_tables.h
|
||||
header-y += arpt_mangle.h
|
||||
|
||||
unifdef-y += arp_tables.h
|
||||
|
|
|
|||
|
|
@ -1,4 +1,17 @@
|
|||
header-y += ebt_among.h ebt_arp.h ebt_arpreply.h ebt_ip.h ebt_limit.h \
|
||||
ebt_log.h ebt_mark_m.h ebt_mark_t.h ebt_nat.h ebt_pkttype.h \
|
||||
ebt_redirect.h ebt_stp.h ebt_ulog.h ebt_vlan.h
|
||||
unifdef-y := ebtables.h ebt_802_3.h
|
||||
header-y += ebt_among.h
|
||||
header-y += ebt_arp.h
|
||||
header-y += ebt_arpreply.h
|
||||
header-y += ebt_ip.h
|
||||
header-y += ebt_limit.h
|
||||
header-y += ebt_log.h
|
||||
header-y += ebt_mark_m.h
|
||||
header-y += ebt_mark_t.h
|
||||
header-y += ebt_nat.h
|
||||
header-y += ebt_pkttype.h
|
||||
header-y += ebt_redirect.h
|
||||
header-y += ebt_stp.h
|
||||
header-y += ebt_ulog.h
|
||||
header-y += ebt_vlan.h
|
||||
|
||||
unifdef-y += ebtables.h
|
||||
unifdef-y += ebt_802_3.h
|
||||
|
|
|
|||
|
|
@ -1,21 +1,63 @@
|
|||
header-y += ip_conntrack_helper.h
|
||||
header-y += ip_conntrack_helper_h323_asn1.h
|
||||
header-y += ip_conntrack_helper_h323_types.h
|
||||
header-y += ip_conntrack_protocol.h
|
||||
header-y += ip_conntrack_sctp.h
|
||||
header-y += ip_conntrack_tcp.h
|
||||
header-y += ip_conntrack_tftp.h
|
||||
header-y += ip_nat_pptp.h
|
||||
header-y += ipt_addrtype.h
|
||||
header-y += ipt_ah.h
|
||||
header-y += ipt_CLASSIFY.h
|
||||
header-y += ipt_CLUSTERIP.h
|
||||
header-y += ipt_comment.h
|
||||
header-y += ipt_connbytes.h
|
||||
header-y += ipt_connmark.h
|
||||
header-y += ipt_CONNMARK.h
|
||||
header-y += ipt_conntrack.h
|
||||
header-y += ipt_dccp.h
|
||||
header-y += ipt_dscp.h
|
||||
header-y += ipt_DSCP.h
|
||||
header-y += ipt_ecn.h
|
||||
header-y += ipt_ECN.h
|
||||
header-y += ipt_esp.h
|
||||
header-y += ipt_hashlimit.h
|
||||
header-y += ipt_helper.h
|
||||
header-y += ipt_iprange.h
|
||||
header-y += ipt_length.h
|
||||
header-y += ipt_limit.h
|
||||
header-y += ipt_LOG.h
|
||||
header-y += ipt_mac.h
|
||||
header-y += ipt_mark.h
|
||||
header-y += ipt_MARK.h
|
||||
header-y += ipt_multiport.h
|
||||
header-y += ipt_NFQUEUE.h
|
||||
header-y += ipt_owner.h
|
||||
header-y += ipt_physdev.h
|
||||
header-y += ipt_pkttype.h
|
||||
header-y += ipt_policy.h
|
||||
header-y += ipt_realm.h
|
||||
header-y += ipt_recent.h
|
||||
header-y += ipt_REJECT.h
|
||||
header-y += ipt_SAME.h
|
||||
header-y += ipt_sctp.h
|
||||
header-y += ipt_state.h
|
||||
header-y += ipt_string.h
|
||||
header-y += ipt_tcpmss.h
|
||||
header-y += ipt_TCPMSS.h
|
||||
header-y += ipt_tos.h
|
||||
header-y += ipt_TOS.h
|
||||
header-y += ipt_ttl.h
|
||||
header-y += ipt_TTL.h
|
||||
header-y += ipt_ULOG.h
|
||||
|
||||
header-y := ip_conntrack_helper.h ip_conntrack_helper_h323_asn1.h \
|
||||
ip_conntrack_helper_h323_types.h ip_conntrack_protocol.h \
|
||||
ip_conntrack_sctp.h ip_conntrack_tcp.h ip_conntrack_tftp.h \
|
||||
ip_nat_pptp.h ipt_addrtype.h ipt_ah.h \
|
||||
ipt_CLASSIFY.h ipt_CLUSTERIP.h ipt_comment.h \
|
||||
ipt_connbytes.h ipt_connmark.h ipt_CONNMARK.h \
|
||||
ipt_conntrack.h ipt_dccp.h ipt_dscp.h ipt_DSCP.h ipt_ecn.h \
|
||||
ipt_ECN.h ipt_esp.h ipt_hashlimit.h ipt_helper.h \
|
||||
ipt_iprange.h ipt_length.h ipt_limit.h ipt_LOG.h ipt_mac.h \
|
||||
ipt_mark.h ipt_MARK.h ipt_multiport.h ipt_NFQUEUE.h \
|
||||
ipt_owner.h ipt_physdev.h ipt_pkttype.h ipt_policy.h \
|
||||
ipt_realm.h ipt_recent.h ipt_REJECT.h ipt_SAME.h \
|
||||
ipt_sctp.h ipt_state.h ipt_string.h ipt_tcpmss.h \
|
||||
ipt_TCPMSS.h ipt_tos.h ipt_TOS.h ipt_ttl.h ipt_TTL.h \
|
||||
ipt_ULOG.h
|
||||
|
||||
unifdef-y := ip_conntrack.h ip_conntrack_h323.h ip_conntrack_irc.h \
|
||||
ip_conntrack_pptp.h ip_conntrack_proto_gre.h \
|
||||
ip_conntrack_tuple.h ip_nat.h ip_nat_rule.h ip_queue.h \
|
||||
ip_tables.h
|
||||
unifdef-y += ip_conntrack.h
|
||||
unifdef-y += ip_conntrack_h323.h
|
||||
unifdef-y += ip_conntrack_irc.h
|
||||
unifdef-y += ip_conntrack_pptp.h
|
||||
unifdef-y += ip_conntrack_proto_gre.h
|
||||
unifdef-y += ip_conntrack_tuple.h
|
||||
unifdef-y += ip_nat.h
|
||||
unifdef-y += ip_nat_rule.h
|
||||
unifdef-y += ip_queue.h
|
||||
unifdef-y += ip_tables.h
|
||||
|
|
|
|||
|
|
@ -1,6 +1,21 @@
|
|||
header-y += ip6t_HL.h ip6t_LOG.h ip6t_MARK.h ip6t_REJECT.h ip6t_ah.h \
|
||||
ip6t_esp.h ip6t_frag.h ip6t_hl.h ip6t_ipv6header.h \
|
||||
ip6t_length.h ip6t_limit.h ip6t_mac.h ip6t_mark.h \
|
||||
ip6t_multiport.h ip6t_opts.h ip6t_owner.h ip6t_policy.h \
|
||||
ip6t_physdev.h ip6t_rt.h
|
||||
unifdef-y := ip6_tables.h
|
||||
header-y += ip6t_HL.h
|
||||
header-y += ip6t_LOG.h
|
||||
header-y += ip6t_MARK.h
|
||||
header-y += ip6t_REJECT.h
|
||||
header-y += ip6t_ah.h
|
||||
header-y += ip6t_esp.h
|
||||
header-y += ip6t_frag.h
|
||||
header-y += ip6t_hl.h
|
||||
header-y += ip6t_ipv6header.h
|
||||
header-y += ip6t_length.h
|
||||
header-y += ip6t_limit.h
|
||||
header-y += ip6t_mac.h
|
||||
header-y += ip6t_mark.h
|
||||
header-y += ip6t_multiport.h
|
||||
header-y += ip6t_opts.h
|
||||
header-y += ip6t_owner.h
|
||||
header-y += ip6t_policy.h
|
||||
header-y += ip6t_physdev.h
|
||||
header-y += ip6t_rt.h
|
||||
|
||||
unifdef-y += ip6_tables.h
|
||||
|
|
|
|||
|
|
@ -1,2 +1,7 @@
|
|||
unifdef-y := const.h export.h stats.h syscall.h nfsfh.h debug.h auth.h
|
||||
|
||||
unifdef-y += const.h
|
||||
unifdef-y += export.h
|
||||
unifdef-y += stats.h
|
||||
unifdef-y += syscall.h
|
||||
unifdef-y += nfsfh.h
|
||||
unifdef-y += debug.h
|
||||
unifdef-y += auth.h
|
||||
|
|
|
|||
|
|
@ -1 +1,2 @@
|
|||
header-y += md_p.h md_u.h
|
||||
header-y += md_p.h
|
||||
header-y += md_u.h
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
#include <linux/mm.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
static inline void sg_set_buf(struct scatterlist *sg, void *buf,
|
||||
static inline void sg_set_buf(struct scatterlist *sg, const void *buf,
|
||||
unsigned int buflen)
|
||||
{
|
||||
sg->page = virt_to_page(buf);
|
||||
|
|
@ -13,7 +13,7 @@ static inline void sg_set_buf(struct scatterlist *sg, void *buf,
|
|||
sg->length = buflen;
|
||||
}
|
||||
|
||||
static inline void sg_init_one(struct scatterlist *sg, void *buf,
|
||||
static inline void sg_init_one(struct scatterlist *sg, const void *buf,
|
||||
unsigned int buflen)
|
||||
{
|
||||
memset(sg, 0, sizeof(*sg));
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
unifdef-y := debug.h
|
||||
unifdef-y += debug.h
|
||||
|
|
|
|||
|
|
@ -46,8 +46,8 @@ struct krb5_ctx {
|
|||
unsigned char seed[16];
|
||||
int signalg;
|
||||
int sealalg;
|
||||
struct crypto_tfm *enc;
|
||||
struct crypto_tfm *seq;
|
||||
struct crypto_blkcipher *enc;
|
||||
struct crypto_blkcipher *seq;
|
||||
s32 endtime;
|
||||
u32 seq_send;
|
||||
struct xdr_netobj mech_used;
|
||||
|
|
@ -136,26 +136,27 @@ gss_unwrap_kerberos(struct gss_ctx *ctx_id, int offset,
|
|||
|
||||
|
||||
u32
|
||||
krb5_encrypt(struct crypto_tfm * key,
|
||||
krb5_encrypt(struct crypto_blkcipher *key,
|
||||
void *iv, void *in, void *out, int length);
|
||||
|
||||
u32
|
||||
krb5_decrypt(struct crypto_tfm * key,
|
||||
krb5_decrypt(struct crypto_blkcipher *key,
|
||||
void *iv, void *in, void *out, int length);
|
||||
|
||||
int
|
||||
gss_encrypt_xdr_buf(struct crypto_tfm *tfm, struct xdr_buf *outbuf, int offset,
|
||||
struct page **pages);
|
||||
gss_encrypt_xdr_buf(struct crypto_blkcipher *tfm, struct xdr_buf *outbuf,
|
||||
int offset, struct page **pages);
|
||||
|
||||
int
|
||||
gss_decrypt_xdr_buf(struct crypto_tfm *tfm, struct xdr_buf *inbuf, int offset);
|
||||
gss_decrypt_xdr_buf(struct crypto_blkcipher *tfm, struct xdr_buf *inbuf,
|
||||
int offset);
|
||||
|
||||
s32
|
||||
krb5_make_seq_num(struct crypto_tfm * key,
|
||||
krb5_make_seq_num(struct crypto_blkcipher *key,
|
||||
int direction,
|
||||
s32 seqnum, unsigned char *cksum, unsigned char *buf);
|
||||
|
||||
s32
|
||||
krb5_get_seq_num(struct crypto_tfm * key,
|
||||
krb5_get_seq_num(struct crypto_blkcipher *key,
|
||||
unsigned char *cksum,
|
||||
unsigned char *buf, int *direction, s32 * seqnum);
|
||||
|
|
|
|||
|
|
@ -19,9 +19,9 @@ struct spkm3_ctx {
|
|||
unsigned int req_flags ;
|
||||
struct xdr_netobj share_key;
|
||||
int conf_alg;
|
||||
struct crypto_tfm* derived_conf_key;
|
||||
struct crypto_blkcipher *derived_conf_key;
|
||||
int intg_alg;
|
||||
struct crypto_tfm* derived_integ_key;
|
||||
struct crypto_blkcipher *derived_integ_key;
|
||||
int keyestb_alg; /* alg used to get share_key */
|
||||
int owf_alg; /* one way function */
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1 +1,4 @@
|
|||
header-y += tc_gact.h tc_ipt.h tc_mirred.h tc_pedit.h
|
||||
header-y += tc_gact.h
|
||||
header-y += tc_ipt.h
|
||||
header-y += tc_mirred.h
|
||||
header-y += tc_pedit.h
|
||||
|
|
|
|||
|
|
@ -1 +1,4 @@
|
|||
headers-y := tc_em_cmp.h tc_em_meta.h tc_em_nbyte.h tc_em_text.h
|
||||
header-y += tc_em_cmp.h
|
||||
header-y += tc_em_meta.h
|
||||
header-y += tc_em_nbyte.h
|
||||
header-y += tc_em_text.h
|
||||
|
|
|
|||
|
|
@ -1,2 +1,6 @@
|
|||
unifdef-y := mtd-abi.h
|
||||
header-y := inftl-user.h jffs2-user.h mtd-user.h nftl-user.h
|
||||
header-y += inftl-user.h
|
||||
header-y += jffs2-user.h
|
||||
header-y += mtd-user.h
|
||||
header-y += nftl-user.h
|
||||
|
||||
unifdef-y += mtd-abi.h
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ struct mtd_oob_buf {
|
|||
#define MTD_WRITEABLE 0x400 /* Device is writeable */
|
||||
#define MTD_BIT_WRITEABLE 0x800 /* Single bits can be flipped */
|
||||
#define MTD_NO_ERASE 0x1000 /* No erase necessary */
|
||||
#define MTD_STUPID_LOCK 0x2000 /* Always locked after reset */
|
||||
|
||||
// Some common devices / combinations of capabilities
|
||||
#define MTD_CAP_ROM 0
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef _NET_AH_H
|
||||
#define _NET_AH_H
|
||||
|
||||
#include <linux/crypto.h>
|
||||
#include <net/xfrm.h>
|
||||
|
||||
/* This is the maximum truncated ICV length that we know of. */
|
||||
|
|
@ -14,22 +15,29 @@ struct ah_data
|
|||
int icv_full_len;
|
||||
int icv_trunc_len;
|
||||
|
||||
void (*icv)(struct ah_data*,
|
||||
struct sk_buff *skb, u8 *icv);
|
||||
|
||||
struct crypto_tfm *tfm;
|
||||
struct crypto_hash *tfm;
|
||||
};
|
||||
|
||||
static inline void
|
||||
ah_hmac_digest(struct ah_data *ahp, struct sk_buff *skb, u8 *auth_data)
|
||||
static inline int ah_mac_digest(struct ah_data *ahp, struct sk_buff *skb,
|
||||
u8 *auth_data)
|
||||
{
|
||||
struct crypto_tfm *tfm = ahp->tfm;
|
||||
struct hash_desc desc;
|
||||
int err;
|
||||
|
||||
desc.tfm = ahp->tfm;
|
||||
desc.flags = 0;
|
||||
|
||||
memset(auth_data, 0, ahp->icv_trunc_len);
|
||||
crypto_hmac_init(tfm, ahp->key, &ahp->key_len);
|
||||
skb_icv_walk(skb, tfm, 0, skb->len, crypto_hmac_update);
|
||||
crypto_hmac_final(tfm, ahp->key, &ahp->key_len, ahp->work_icv);
|
||||
memcpy(auth_data, ahp->work_icv, ahp->icv_trunc_len);
|
||||
err = crypto_hash_init(&desc);
|
||||
if (unlikely(err))
|
||||
goto out;
|
||||
err = skb_icv_walk(skb, &desc, 0, skb->len, crypto_hash_update);
|
||||
if (unlikely(err))
|
||||
goto out;
|
||||
err = crypto_hash_final(&desc, ahp->work_icv);
|
||||
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef _NET_ESP_H
|
||||
#define _NET_ESP_H
|
||||
|
||||
#include <linux/crypto.h>
|
||||
#include <net/xfrm.h>
|
||||
#include <asm/scatterlist.h>
|
||||
|
||||
|
|
@ -21,7 +22,7 @@ struct esp_data
|
|||
* >= crypto_tfm_alg_ivsize(tfm). */
|
||||
int ivlen;
|
||||
int padlen; /* 0..255 */
|
||||
struct crypto_tfm *tfm; /* crypto handle */
|
||||
struct crypto_blkcipher *tfm; /* crypto handle */
|
||||
} conf;
|
||||
|
||||
/* Integrity. It is active when icv_full_len != 0 */
|
||||
|
|
@ -34,7 +35,7 @@ struct esp_data
|
|||
void (*icv)(struct esp_data*,
|
||||
struct sk_buff *skb,
|
||||
int offset, int len, u8 *icv);
|
||||
struct crypto_tfm *tfm;
|
||||
struct crypto_hash *tfm;
|
||||
} auth;
|
||||
};
|
||||
|
||||
|
|
@ -42,18 +43,22 @@ extern int skb_to_sgvec(struct sk_buff *skb, struct scatterlist *sg, int offset,
|
|||
extern int skb_cow_data(struct sk_buff *skb, int tailbits, struct sk_buff **trailer);
|
||||
extern void *pskb_put(struct sk_buff *skb, struct sk_buff *tail, int len);
|
||||
|
||||
static inline void
|
||||
esp_hmac_digest(struct esp_data *esp, struct sk_buff *skb, int offset,
|
||||
int len, u8 *auth_data)
|
||||
static inline int esp_mac_digest(struct esp_data *esp, struct sk_buff *skb,
|
||||
int offset, int len)
|
||||
{
|
||||
struct crypto_tfm *tfm = esp->auth.tfm;
|
||||
char *icv = esp->auth.work_icv;
|
||||
struct hash_desc desc;
|
||||
int err;
|
||||
|
||||
memset(auth_data, 0, esp->auth.icv_trunc_len);
|
||||
crypto_hmac_init(tfm, esp->auth.key, &esp->auth.key_len);
|
||||
skb_icv_walk(skb, tfm, offset, len, crypto_hmac_update);
|
||||
crypto_hmac_final(tfm, esp->auth.key, &esp->auth.key_len, icv);
|
||||
memcpy(auth_data, icv, esp->auth.icv_trunc_len);
|
||||
desc.tfm = esp->auth.tfm;
|
||||
desc.flags = 0;
|
||||
|
||||
err = crypto_hash_init(&desc);
|
||||
if (unlikely(err))
|
||||
return err;
|
||||
err = skb_icv_walk(skb, &desc, offset, len, crypto_hash_update);
|
||||
if (unlikely(err))
|
||||
return err;
|
||||
return crypto_hash_final(&desc, esp->auth.work_icv);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,11 +1,14 @@
|
|||
#ifndef _NET_IPCOMP_H
|
||||
#define _NET_IPCOMP_H
|
||||
|
||||
#include <linux/crypto.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#define IPCOMP_SCRATCH_SIZE 65400
|
||||
|
||||
struct ipcomp_data {
|
||||
u16 threshold;
|
||||
struct crypto_tfm **tfms;
|
||||
struct crypto_comp **tfms;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -312,9 +312,9 @@ enum { SCTP_MAX_GABS = 16 };
|
|||
*/
|
||||
|
||||
#if defined (CONFIG_SCTP_HMAC_MD5)
|
||||
#define SCTP_COOKIE_HMAC_ALG "md5"
|
||||
#define SCTP_COOKIE_HMAC_ALG "hmac(md5)"
|
||||
#elif defined (CONFIG_SCTP_HMAC_SHA1)
|
||||
#define SCTP_COOKIE_HMAC_ALG "sha1"
|
||||
#define SCTP_COOKIE_HMAC_ALG "hmac(sha1)"
|
||||
#else
|
||||
#define SCTP_COOKIE_HMAC_ALG NULL
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -330,17 +330,6 @@ static inline void sctp_v6_exit(void) { return; }
|
|||
|
||||
#endif /* #if defined(CONFIG_IPV6) */
|
||||
|
||||
/* Some wrappers, in case crypto not available. */
|
||||
#if defined (CONFIG_CRYPTO_HMAC)
|
||||
#define sctp_crypto_alloc_tfm crypto_alloc_tfm
|
||||
#define sctp_crypto_free_tfm crypto_free_tfm
|
||||
#define sctp_crypto_hmac crypto_hmac
|
||||
#else
|
||||
#define sctp_crypto_alloc_tfm(x...) NULL
|
||||
#define sctp_crypto_free_tfm(x...)
|
||||
#define sctp_crypto_hmac(x...)
|
||||
#endif
|
||||
|
||||
|
||||
/* Map an association to an assoc_id. */
|
||||
static inline sctp_assoc_t sctp_assoc2id(const struct sctp_association *asoc)
|
||||
|
|
|
|||
|
|
@ -87,6 +87,7 @@ struct sctp_bind_addr;
|
|||
struct sctp_ulpq;
|
||||
struct sctp_ep_common;
|
||||
struct sctp_ssnmap;
|
||||
struct crypto_hash;
|
||||
|
||||
|
||||
#include <net/sctp/tsnmap.h>
|
||||
|
|
@ -264,7 +265,7 @@ struct sctp_sock {
|
|||
struct sctp_pf *pf;
|
||||
|
||||
/* Access to HMAC transform. */
|
||||
struct crypto_tfm *hmac;
|
||||
struct crypto_hash *hmac;
|
||||
|
||||
/* What is our base endpointer? */
|
||||
struct sctp_endpoint *ep;
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@
|
|||
#include <linux/list.h>
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/socket.h>
|
||||
#include <linux/crypto.h>
|
||||
#include <linux/pfkeyv2.h>
|
||||
#include <linux/in6.h>
|
||||
#include <linux/mutex.h>
|
||||
|
|
@ -855,6 +854,7 @@ struct xfrm_algo_comp_info {
|
|||
|
||||
struct xfrm_algo_desc {
|
||||
char *name;
|
||||
char *compat;
|
||||
u8 available:1;
|
||||
union {
|
||||
struct xfrm_algo_auth_info auth;
|
||||
|
|
@ -984,11 +984,13 @@ extern struct xfrm_algo_desc *xfrm_aalg_get_byname(char *name, int probe);
|
|||
extern struct xfrm_algo_desc *xfrm_ealg_get_byname(char *name, int probe);
|
||||
extern struct xfrm_algo_desc *xfrm_calg_get_byname(char *name, int probe);
|
||||
|
||||
struct crypto_tfm;
|
||||
typedef void (icv_update_fn_t)(struct crypto_tfm *, struct scatterlist *, unsigned int);
|
||||
struct hash_desc;
|
||||
struct scatterlist;
|
||||
typedef int (icv_update_fn_t)(struct hash_desc *, struct scatterlist *,
|
||||
unsigned int);
|
||||
|
||||
extern void skb_icv_walk(const struct sk_buff *skb, struct crypto_tfm *tfm,
|
||||
int offset, int len, icv_update_fn_t icv_update);
|
||||
extern int skb_icv_walk(const struct sk_buff *skb, struct hash_desc *tfm,
|
||||
int offset, int len, icv_update_fn_t icv_update);
|
||||
|
||||
static inline int xfrm_addr_cmp(xfrm_address_t *a, xfrm_address_t *b,
|
||||
int family)
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
header-y := ib_user_mad.h
|
||||
header-y += ib_user_mad.h
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ struct rdma_dev_addr {
|
|||
unsigned char src_dev_addr[MAX_ADDR_LEN];
|
||||
unsigned char dst_dev_addr[MAX_ADDR_LEN];
|
||||
unsigned char broadcast[MAX_ADDR_LEN];
|
||||
enum ib_node_type dev_type;
|
||||
enum rdma_node_type dev_type;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -72,6 +72,9 @@ int rdma_resolve_ip(struct sockaddr *src_addr, struct sockaddr *dst_addr,
|
|||
|
||||
void rdma_addr_cancel(struct rdma_dev_addr *addr);
|
||||
|
||||
int rdma_copy_addr(struct rdma_dev_addr *dev_addr, struct net_device *dev,
|
||||
const unsigned char *dst_dev_addr);
|
||||
|
||||
static inline int ip_addr_size(struct sockaddr *addr)
|
||||
{
|
||||
return addr->sa_family == AF_INET6 ?
|
||||
|
|
@ -113,4 +116,16 @@ static inline void ib_addr_set_dgid(struct rdma_dev_addr *dev_addr,
|
|||
memcpy(dev_addr->dst_dev_addr + 4, gid, sizeof *gid);
|
||||
}
|
||||
|
||||
static inline void iw_addr_get_sgid(struct rdma_dev_addr *dev_addr,
|
||||
union ib_gid *gid)
|
||||
{
|
||||
memcpy(gid, dev_addr->src_dev_addr, sizeof *gid);
|
||||
}
|
||||
|
||||
static inline void iw_addr_get_dgid(struct rdma_dev_addr *dev_addr,
|
||||
union ib_gid *gid)
|
||||
{
|
||||
memcpy(gid, dev_addr->dst_dev_addr, sizeof *gid);
|
||||
}
|
||||
|
||||
#endif /* IB_ADDR_H */
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
/*
|
||||
* Copyright (c) 2004 Topspin Communications. All rights reserved.
|
||||
* Copyright (c) 2005 Voltaire, Inc. All rights reserved.
|
||||
* Copyright (c) 2006 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* This software is available to you under a choice of one of two
|
||||
* licenses. You may choose to be licensed under the terms of the GNU
|
||||
|
|
@ -36,8 +37,11 @@
|
|||
#ifndef IB_SA_H
|
||||
#define IB_SA_H
|
||||
|
||||
#include <linux/completion.h>
|
||||
#include <linux/compiler.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
|
||||
#include <rdma/ib_verbs.h>
|
||||
#include <rdma/ib_mad.h>
|
||||
|
||||
|
|
@ -79,8 +83,8 @@ enum {
|
|||
};
|
||||
|
||||
enum ib_sa_selector {
|
||||
IB_SA_GTE = 0,
|
||||
IB_SA_LTE = 1,
|
||||
IB_SA_GT = 0,
|
||||
IB_SA_LT = 1,
|
||||
IB_SA_EQ = 2,
|
||||
/*
|
||||
* The meaning of "best" depends on the attribute: for
|
||||
|
|
@ -250,11 +254,28 @@ struct ib_sa_service_rec {
|
|||
u64 data64[2];
|
||||
};
|
||||
|
||||
struct ib_sa_client {
|
||||
atomic_t users;
|
||||
struct completion comp;
|
||||
};
|
||||
|
||||
/**
|
||||
* ib_sa_register_client - Register an SA client.
|
||||
*/
|
||||
void ib_sa_register_client(struct ib_sa_client *client);
|
||||
|
||||
/**
|
||||
* ib_sa_unregister_client - Deregister an SA client.
|
||||
* @client: Client object to deregister.
|
||||
*/
|
||||
void ib_sa_unregister_client(struct ib_sa_client *client);
|
||||
|
||||
struct ib_sa_query;
|
||||
|
||||
void ib_sa_cancel_query(int id, struct ib_sa_query *query);
|
||||
|
||||
int ib_sa_path_rec_get(struct ib_device *device, u8 port_num,
|
||||
int ib_sa_path_rec_get(struct ib_sa_client *client,
|
||||
struct ib_device *device, u8 port_num,
|
||||
struct ib_sa_path_rec *rec,
|
||||
ib_sa_comp_mask comp_mask,
|
||||
int timeout_ms, gfp_t gfp_mask,
|
||||
|
|
@ -264,7 +285,8 @@ int ib_sa_path_rec_get(struct ib_device *device, u8 port_num,
|
|||
void *context,
|
||||
struct ib_sa_query **query);
|
||||
|
||||
int ib_sa_mcmember_rec_query(struct ib_device *device, u8 port_num,
|
||||
int ib_sa_mcmember_rec_query(struct ib_sa_client *client,
|
||||
struct ib_device *device, u8 port_num,
|
||||
u8 method,
|
||||
struct ib_sa_mcmember_rec *rec,
|
||||
ib_sa_comp_mask comp_mask,
|
||||
|
|
@ -275,7 +297,8 @@ int ib_sa_mcmember_rec_query(struct ib_device *device, u8 port_num,
|
|||
void *context,
|
||||
struct ib_sa_query **query);
|
||||
|
||||
int ib_sa_service_rec_query(struct ib_device *device, u8 port_num,
|
||||
int ib_sa_service_rec_query(struct ib_sa_client *client,
|
||||
struct ib_device *device, u8 port_num,
|
||||
u8 method,
|
||||
struct ib_sa_service_rec *rec,
|
||||
ib_sa_comp_mask comp_mask,
|
||||
|
|
@ -288,6 +311,7 @@ int ib_sa_service_rec_query(struct ib_device *device, u8 port_num,
|
|||
|
||||
/**
|
||||
* ib_sa_mcmember_rec_set - Start an MCMember set query
|
||||
* @client:SA client
|
||||
* @device:device to send query on
|
||||
* @port_num: port number to send query on
|
||||
* @rec:MCMember Record to send in query
|
||||
|
|
@ -311,7 +335,8 @@ int ib_sa_service_rec_query(struct ib_device *device, u8 port_num,
|
|||
* cancel the query.
|
||||
*/
|
||||
static inline int
|
||||
ib_sa_mcmember_rec_set(struct ib_device *device, u8 port_num,
|
||||
ib_sa_mcmember_rec_set(struct ib_sa_client *client,
|
||||
struct ib_device *device, u8 port_num,
|
||||
struct ib_sa_mcmember_rec *rec,
|
||||
ib_sa_comp_mask comp_mask,
|
||||
int timeout_ms, gfp_t gfp_mask,
|
||||
|
|
@ -321,7 +346,7 @@ ib_sa_mcmember_rec_set(struct ib_device *device, u8 port_num,
|
|||
void *context,
|
||||
struct ib_sa_query **query)
|
||||
{
|
||||
return ib_sa_mcmember_rec_query(device, port_num,
|
||||
return ib_sa_mcmember_rec_query(client, device, port_num,
|
||||
IB_MGMT_METHOD_SET,
|
||||
rec, comp_mask,
|
||||
timeout_ms, gfp_mask, callback,
|
||||
|
|
@ -330,6 +355,7 @@ ib_sa_mcmember_rec_set(struct ib_device *device, u8 port_num,
|
|||
|
||||
/**
|
||||
* ib_sa_mcmember_rec_delete - Start an MCMember delete query
|
||||
* @client:SA client
|
||||
* @device:device to send query on
|
||||
* @port_num: port number to send query on
|
||||
* @rec:MCMember Record to send in query
|
||||
|
|
@ -353,7 +379,8 @@ ib_sa_mcmember_rec_set(struct ib_device *device, u8 port_num,
|
|||
* cancel the query.
|
||||
*/
|
||||
static inline int
|
||||
ib_sa_mcmember_rec_delete(struct ib_device *device, u8 port_num,
|
||||
ib_sa_mcmember_rec_delete(struct ib_sa_client *client,
|
||||
struct ib_device *device, u8 port_num,
|
||||
struct ib_sa_mcmember_rec *rec,
|
||||
ib_sa_comp_mask comp_mask,
|
||||
int timeout_ms, gfp_t gfp_mask,
|
||||
|
|
@ -363,7 +390,7 @@ ib_sa_mcmember_rec_delete(struct ib_device *device, u8 port_num,
|
|||
void *context,
|
||||
struct ib_sa_query **query)
|
||||
{
|
||||
return ib_sa_mcmember_rec_query(device, port_num,
|
||||
return ib_sa_mcmember_rec_query(client, device, port_num,
|
||||
IB_SA_METHOD_DELETE,
|
||||
rec, comp_mask,
|
||||
timeout_ms, gfp_mask, callback,
|
||||
|
|
|
|||
|
|
@ -275,6 +275,8 @@ struct ib_uverbs_resize_cq {
|
|||
|
||||
struct ib_uverbs_resize_cq_resp {
|
||||
__u32 cqe;
|
||||
__u32 reserved;
|
||||
__u64 driver_data[0];
|
||||
};
|
||||
|
||||
struct ib_uverbs_poll_cq {
|
||||
|
|
|
|||
|
|
@ -56,12 +56,22 @@ union ib_gid {
|
|||
} global;
|
||||
};
|
||||
|
||||
enum ib_node_type {
|
||||
IB_NODE_CA = 1,
|
||||
IB_NODE_SWITCH,
|
||||
IB_NODE_ROUTER
|
||||
enum rdma_node_type {
|
||||
/* IB values map to NodeInfo:NodeType. */
|
||||
RDMA_NODE_IB_CA = 1,
|
||||
RDMA_NODE_IB_SWITCH,
|
||||
RDMA_NODE_IB_ROUTER,
|
||||
RDMA_NODE_RNIC
|
||||
};
|
||||
|
||||
enum rdma_transport_type {
|
||||
RDMA_TRANSPORT_IB,
|
||||
RDMA_TRANSPORT_IWARP
|
||||
};
|
||||
|
||||
enum rdma_transport_type
|
||||
rdma_node_get_transport(enum rdma_node_type node_type) __attribute_const__;
|
||||
|
||||
enum ib_device_cap_flags {
|
||||
IB_DEVICE_RESIZE_MAX_WR = 1,
|
||||
IB_DEVICE_BAD_PKEY_CNTR = (1<<1),
|
||||
|
|
@ -78,6 +88,9 @@ enum ib_device_cap_flags {
|
|||
IB_DEVICE_RC_RNR_NAK_GEN = (1<<12),
|
||||
IB_DEVICE_SRQ_RESIZE = (1<<13),
|
||||
IB_DEVICE_N_NOTIFY_CQ = (1<<14),
|
||||
IB_DEVICE_ZERO_STAG = (1<<15),
|
||||
IB_DEVICE_SEND_W_INV = (1<<16),
|
||||
IB_DEVICE_MEM_WINDOW = (1<<17)
|
||||
};
|
||||
|
||||
enum ib_atomic_cap {
|
||||
|
|
@ -835,6 +848,8 @@ struct ib_cache {
|
|||
u8 *lmc_cache;
|
||||
};
|
||||
|
||||
struct iw_cm_verbs;
|
||||
|
||||
struct ib_device {
|
||||
struct device *dma_device;
|
||||
|
||||
|
|
@ -851,6 +866,8 @@ struct ib_device {
|
|||
|
||||
u32 flags;
|
||||
|
||||
struct iw_cm_verbs *iwcm;
|
||||
|
||||
int (*query_device)(struct ib_device *device,
|
||||
struct ib_device_attr *device_attr);
|
||||
int (*query_port)(struct ib_device *device,
|
||||
|
|
@ -888,7 +905,8 @@ struct ib_device {
|
|||
struct ib_udata *udata);
|
||||
int (*modify_srq)(struct ib_srq *srq,
|
||||
struct ib_srq_attr *srq_attr,
|
||||
enum ib_srq_attr_mask srq_attr_mask);
|
||||
enum ib_srq_attr_mask srq_attr_mask,
|
||||
struct ib_udata *udata);
|
||||
int (*query_srq)(struct ib_srq *srq,
|
||||
struct ib_srq_attr *srq_attr);
|
||||
int (*destroy_srq)(struct ib_srq *srq);
|
||||
|
|
@ -900,7 +918,8 @@ struct ib_device {
|
|||
struct ib_udata *udata);
|
||||
int (*modify_qp)(struct ib_qp *qp,
|
||||
struct ib_qp_attr *qp_attr,
|
||||
int qp_attr_mask);
|
||||
int qp_attr_mask,
|
||||
struct ib_udata *udata);
|
||||
int (*query_qp)(struct ib_qp *qp,
|
||||
struct ib_qp_attr *qp_attr,
|
||||
int qp_attr_mask,
|
||||
|
|
|
|||
258
include/rdma/iw_cm.h
Normal file
258
include/rdma/iw_cm.h
Normal file
|
|
@ -0,0 +1,258 @@
|
|||
/*
|
||||
* Copyright (c) 2005 Network Appliance, Inc. All rights reserved.
|
||||
* Copyright (c) 2005 Open Grid Computing, Inc. All rights reserved.
|
||||
*
|
||||
* This software is available to you under a choice of one of two
|
||||
* licenses. You may choose to be licensed under the terms of the GNU
|
||||
* General Public License (GPL) Version 2, available from the file
|
||||
* COPYING in the main directory of this source tree, or the
|
||||
* OpenIB.org BSD license below:
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or
|
||||
* without modification, are permitted provided that the following
|
||||
* conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
#ifndef IW_CM_H
|
||||
#define IW_CM_H
|
||||
|
||||
#include <linux/in.h>
|
||||
#include <rdma/ib_cm.h>
|
||||
|
||||
struct iw_cm_id;
|
||||
|
||||
enum iw_cm_event_type {
|
||||
IW_CM_EVENT_CONNECT_REQUEST = 1, /* connect request received */
|
||||
IW_CM_EVENT_CONNECT_REPLY, /* reply from active connect request */
|
||||
IW_CM_EVENT_ESTABLISHED, /* passive side accept successful */
|
||||
IW_CM_EVENT_DISCONNECT, /* orderly shutdown */
|
||||
IW_CM_EVENT_CLOSE /* close complete */
|
||||
};
|
||||
|
||||
enum iw_cm_event_status {
|
||||
IW_CM_EVENT_STATUS_OK = 0, /* request successful */
|
||||
IW_CM_EVENT_STATUS_ACCEPTED = 0, /* connect request accepted */
|
||||
IW_CM_EVENT_STATUS_REJECTED, /* connect request rejected */
|
||||
IW_CM_EVENT_STATUS_TIMEOUT, /* the operation timed out */
|
||||
IW_CM_EVENT_STATUS_RESET, /* reset from remote peer */
|
||||
IW_CM_EVENT_STATUS_EINVAL, /* asynchronous failure for bad parm */
|
||||
};
|
||||
|
||||
struct iw_cm_event {
|
||||
enum iw_cm_event_type event;
|
||||
enum iw_cm_event_status status;
|
||||
struct sockaddr_in local_addr;
|
||||
struct sockaddr_in remote_addr;
|
||||
void *private_data;
|
||||
u8 private_data_len;
|
||||
void* provider_data;
|
||||
};
|
||||
|
||||
/**
|
||||
* iw_cm_handler - Function to be called by the IW CM when delivering events
|
||||
* to the client.
|
||||
*
|
||||
* @cm_id: The IW CM identifier associated with the event.
|
||||
* @event: Pointer to the event structure.
|
||||
*/
|
||||
typedef int (*iw_cm_handler)(struct iw_cm_id *cm_id,
|
||||
struct iw_cm_event *event);
|
||||
|
||||
/**
|
||||
* iw_event_handler - Function called by the provider when delivering provider
|
||||
* events to the IW CM. Returns either 0 indicating the event was processed
|
||||
* or -errno if the event could not be processed.
|
||||
*
|
||||
* @cm_id: The IW CM identifier associated with the event.
|
||||
* @event: Pointer to the event structure.
|
||||
*/
|
||||
typedef int (*iw_event_handler)(struct iw_cm_id *cm_id,
|
||||
struct iw_cm_event *event);
|
||||
|
||||
struct iw_cm_id {
|
||||
iw_cm_handler cm_handler; /* client callback function */
|
||||
void *context; /* client cb context */
|
||||
struct ib_device *device;
|
||||
struct sockaddr_in local_addr;
|
||||
struct sockaddr_in remote_addr;
|
||||
void *provider_data; /* provider private data */
|
||||
iw_event_handler event_handler; /* cb for provider
|
||||
events */
|
||||
/* Used by provider to add and remove refs on IW cm_id */
|
||||
void (*add_ref)(struct iw_cm_id *);
|
||||
void (*rem_ref)(struct iw_cm_id *);
|
||||
};
|
||||
|
||||
struct iw_cm_conn_param {
|
||||
const void *private_data;
|
||||
u16 private_data_len;
|
||||
u32 ord;
|
||||
u32 ird;
|
||||
u32 qpn;
|
||||
};
|
||||
|
||||
struct iw_cm_verbs {
|
||||
void (*add_ref)(struct ib_qp *qp);
|
||||
|
||||
void (*rem_ref)(struct ib_qp *qp);
|
||||
|
||||
struct ib_qp * (*get_qp)(struct ib_device *device,
|
||||
int qpn);
|
||||
|
||||
int (*connect)(struct iw_cm_id *cm_id,
|
||||
struct iw_cm_conn_param *conn_param);
|
||||
|
||||
int (*accept)(struct iw_cm_id *cm_id,
|
||||
struct iw_cm_conn_param *conn_param);
|
||||
|
||||
int (*reject)(struct iw_cm_id *cm_id,
|
||||
const void *pdata, u8 pdata_len);
|
||||
|
||||
int (*create_listen)(struct iw_cm_id *cm_id,
|
||||
int backlog);
|
||||
|
||||
int (*destroy_listen)(struct iw_cm_id *cm_id);
|
||||
};
|
||||
|
||||
/**
|
||||
* iw_create_cm_id - Create an IW CM identifier.
|
||||
*
|
||||
* @device: The IB device on which to create the IW CM identier.
|
||||
* @event_handler: User callback invoked to report events associated with the
|
||||
* returned IW CM identifier.
|
||||
* @context: User specified context associated with the id.
|
||||
*/
|
||||
struct iw_cm_id *iw_create_cm_id(struct ib_device *device,
|
||||
iw_cm_handler cm_handler, void *context);
|
||||
|
||||
/**
|
||||
* iw_destroy_cm_id - Destroy an IW CM identifier.
|
||||
*
|
||||
* @cm_id: The previously created IW CM identifier to destroy.
|
||||
*
|
||||
* The client can assume that no events will be delivered for the CM ID after
|
||||
* this function returns.
|
||||
*/
|
||||
void iw_destroy_cm_id(struct iw_cm_id *cm_id);
|
||||
|
||||
/**
|
||||
* iw_cm_bind_qp - Unbind the specified IW CM identifier and QP
|
||||
*
|
||||
* @cm_id: The IW CM idenfier to unbind from the QP.
|
||||
* @qp: The QP
|
||||
*
|
||||
* This is called by the provider when destroying the QP to ensure
|
||||
* that any references held by the IWCM are released. It may also
|
||||
* be called by the IWCM when destroying a CM_ID to that any
|
||||
* references held by the provider are released.
|
||||
*/
|
||||
void iw_cm_unbind_qp(struct iw_cm_id *cm_id, struct ib_qp *qp);
|
||||
|
||||
/**
|
||||
* iw_cm_get_qp - Return the ib_qp associated with a QPN
|
||||
*
|
||||
* @ib_device: The IB device
|
||||
* @qpn: The queue pair number
|
||||
*/
|
||||
struct ib_qp *iw_cm_get_qp(struct ib_device *device, int qpn);
|
||||
|
||||
/**
|
||||
* iw_cm_listen - Listen for incoming connection requests on the
|
||||
* specified IW CM id.
|
||||
*
|
||||
* @cm_id: The IW CM identifier.
|
||||
* @backlog: The maximum number of outstanding un-accepted inbound listen
|
||||
* requests to queue.
|
||||
*
|
||||
* The source address and port number are specified in the IW CM identifier
|
||||
* structure.
|
||||
*/
|
||||
int iw_cm_listen(struct iw_cm_id *cm_id, int backlog);
|
||||
|
||||
/**
|
||||
* iw_cm_accept - Called to accept an incoming connect request.
|
||||
*
|
||||
* @cm_id: The IW CM identifier associated with the connection request.
|
||||
* @iw_param: Pointer to a structure containing connection establishment
|
||||
* parameters.
|
||||
*
|
||||
* The specified cm_id will have been provided in the event data for a
|
||||
* CONNECT_REQUEST event. Subsequent events related to this connection will be
|
||||
* delivered to the specified IW CM identifier prior and may occur prior to
|
||||
* the return of this function. If this function returns a non-zero value, the
|
||||
* client can assume that no events will be delivered to the specified IW CM
|
||||
* identifier.
|
||||
*/
|
||||
int iw_cm_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *iw_param);
|
||||
|
||||
/**
|
||||
* iw_cm_reject - Reject an incoming connection request.
|
||||
*
|
||||
* @cm_id: Connection identifier associated with the request.
|
||||
* @private_daa: Pointer to data to deliver to the remote peer as part of the
|
||||
* reject message.
|
||||
* @private_data_len: The number of bytes in the private_data parameter.
|
||||
*
|
||||
* The client can assume that no events will be delivered to the specified IW
|
||||
* CM identifier following the return of this function. The private_data
|
||||
* buffer is available for reuse when this function returns.
|
||||
*/
|
||||
int iw_cm_reject(struct iw_cm_id *cm_id, const void *private_data,
|
||||
u8 private_data_len);
|
||||
|
||||
/**
|
||||
* iw_cm_connect - Called to request a connection to a remote peer.
|
||||
*
|
||||
* @cm_id: The IW CM identifier for the connection.
|
||||
* @iw_param: Pointer to a structure containing connection establishment
|
||||
* parameters.
|
||||
*
|
||||
* Events may be delivered to the specified IW CM identifier prior to the
|
||||
* return of this function. If this function returns a non-zero value, the
|
||||
* client can assume that no events will be delivered to the specified IW CM
|
||||
* identifier.
|
||||
*/
|
||||
int iw_cm_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *iw_param);
|
||||
|
||||
/**
|
||||
* iw_cm_disconnect - Close the specified connection.
|
||||
*
|
||||
* @cm_id: The IW CM identifier to close.
|
||||
* @abrupt: If 0, the connection will be closed gracefully, otherwise, the
|
||||
* connection will be reset.
|
||||
*
|
||||
* The IW CM identifier is still active until the IW_CM_EVENT_CLOSE event is
|
||||
* delivered.
|
||||
*/
|
||||
int iw_cm_disconnect(struct iw_cm_id *cm_id, int abrupt);
|
||||
|
||||
/**
|
||||
* iw_cm_init_qp_attr - Called to initialize the attributes of the QP
|
||||
* associated with a IW CM identifier.
|
||||
*
|
||||
* @cm_id: The IW CM identifier associated with the QP
|
||||
* @qp_attr: Pointer to the QP attributes structure.
|
||||
* @qp_attr_mask: Pointer to a bit vector specifying which QP attributes are
|
||||
* valid.
|
||||
*/
|
||||
int iw_cm_init_qp_attr(struct iw_cm_id *cm_id, struct ib_qp_attr *qp_attr,
|
||||
int *qp_attr_mask);
|
||||
|
||||
#endif /* IW_CM_H */
|
||||
|
|
@ -117,6 +117,14 @@ struct rdma_cm_id {
|
|||
struct rdma_cm_id *rdma_create_id(rdma_cm_event_handler event_handler,
|
||||
void *context, enum rdma_port_space ps);
|
||||
|
||||
/**
|
||||
* rdma_destroy_id - Destroys an RDMA identifier.
|
||||
*
|
||||
* @id: RDMA identifier.
|
||||
*
|
||||
* Note: calling this function has the effect of canceling in-flight
|
||||
* asynchronous operations associated with the id.
|
||||
*/
|
||||
void rdma_destroy_id(struct rdma_cm_id *id);
|
||||
|
||||
/**
|
||||
|
|
@ -237,6 +245,10 @@ int rdma_listen(struct rdma_cm_id *id, int backlog);
|
|||
* Typically, this routine is only called by the listener to accept a connection
|
||||
* request. It must also be called on the active side of a connection if the
|
||||
* user is performing their own QP transitions.
|
||||
*
|
||||
* In the case of error, a reject message is sent to the remote side and the
|
||||
* state of the qp associated with the id is modified to error, such that any
|
||||
* previously posted receive buffers would be flushed.
|
||||
*/
|
||||
int rdma_accept(struct rdma_cm_id *id, struct rdma_conn_param *conn_param);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,2 +1,4 @@
|
|||
header-y += scsi.h
|
||||
unifdef-y := scsi_ioctl.h sg.h
|
||||
|
||||
unifdef-y += scsi_ioctl.h
|
||||
unifdef-y += sg.h
|
||||
|
|
|
|||
|
|
@ -1,2 +1,10 @@
|
|||
header-y := asound_fm.h hdsp.h hdspm.h sfnt_info.h sscape_ioctl.h
|
||||
unifdef-y := asequencer.h asound.h emu10k1.h sb16_csp.h
|
||||
header-y += asound_fm.h
|
||||
header-y += hdsp.h
|
||||
header-y += hdspm.h
|
||||
header-y += sfnt_info.h
|
||||
header-y += sscape_ioctl.h
|
||||
|
||||
unifdef-y += asequencer.h
|
||||
unifdef-y += asound.h
|
||||
unifdef-y += emu10k1.h
|
||||
unifdef-y += sb16_csp.h
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
unifdef-y := sisfb.h
|
||||
unifdef-y += sisfb.h
|
||||
|
|
|
|||
Loading…
Reference in a new issue