Merge /spare/repo/linux-2.6/
This commit is contained in:
commit
2ee73cc2d5
491 changed files with 19975 additions and 5642 deletions
|
|
@ -15,7 +15,7 @@
|
|||
#include <asm/arch/memory.h>
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#define IOMEM(x) ((void __iomem *)(x))
|
||||
#define IOMEM(x) ((void __iomem *)(unsigned long)(x))
|
||||
#else
|
||||
#define IOMEM(x) x
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
|
@ -52,7 +52,7 @@
|
|||
/*
|
||||
* IO Addresses
|
||||
*/
|
||||
#define VIDC_BASE (void __iomem *)0xe0400000
|
||||
#define VIDC_BASE IOMEM(0xe0400000)
|
||||
#define EXPMASK_BASE 0xe0360000
|
||||
#define IOMD_BASE IOMEM(0xe0200000)
|
||||
#define IOC_BASE IOMEM(0xe0200000)
|
||||
|
|
|
|||
|
|
@ -20,22 +20,22 @@
|
|||
|
||||
/* start peripherals off after the S3C2410 */
|
||||
|
||||
#define ANUBIS_IOADDR(x) (S3C2410_ADDR((x) + 0x02000000))
|
||||
#define ANUBIS_IOADDR(x) (S3C2410_ADDR((x) + 0x01800000))
|
||||
|
||||
#define ANUBIS_PA_CPLD (S3C2410_CS1 | (1<<26))
|
||||
|
||||
/* we put the CPLD registers next, to get them out of the way */
|
||||
|
||||
#define ANUBIS_VA_CTRL1 ANUBIS_IOADDR(0x00000000) /* 0x01300000 */
|
||||
#define ANUBIS_VA_CTRL1 ANUBIS_IOADDR(0x00000000) /* 0x01800000 */
|
||||
#define ANUBIS_PA_CTRL1 (ANUBIS_PA_CPLD)
|
||||
|
||||
#define ANUBIS_VA_CTRL2 ANUBIS_IOADDR(0x00100000) /* 0x01400000 */
|
||||
#define ANUBIS_VA_CTRL2 ANUBIS_IOADDR(0x00100000) /* 0x01900000 */
|
||||
#define ANUBIS_PA_CTRL2 (ANUBIS_PA_CPLD)
|
||||
|
||||
#define ANUBIS_VA_CTRL3 ANUBIS_IOADDR(0x00200000) /* 0x01500000 */
|
||||
#define ANUBIS_VA_CTRL3 ANUBIS_IOADDR(0x00200000) /* 0x01A00000 */
|
||||
#define ANUBIS_PA_CTRL3 (ANUBIS_PA_CPLD)
|
||||
|
||||
#define ANUBIS_VA_CTRL4 ANUBIS_IOADDR(0x00300000) /* 0x01600000 */
|
||||
#define ANUBIS_VA_CTRL4 ANUBIS_IOADDR(0x00300000) /* 0x01B00000 */
|
||||
#define ANUBIS_PA_CTRL4 (ANUBIS_PA_CPLD)
|
||||
|
||||
#define ANUBIS_IDEPRI ANUBIS_IOADDR(0x01000000)
|
||||
|
|
|
|||
|
|
@ -22,7 +22,11 @@
|
|||
|
||||
#define IO_SPACE_LIMIT 0xffffffff
|
||||
|
||||
#define __io(a) ((void __iomem *)(a))
|
||||
static inline void __iomem *__io(unsigned long addr)
|
||||
{
|
||||
return (void __iomem *)addr;
|
||||
}
|
||||
#define __io(a) __io(a)
|
||||
#define __mem_pci(a) (a)
|
||||
#define __mem_isa(a) (a)
|
||||
|
||||
|
|
|
|||
|
|
@ -124,6 +124,8 @@ do { \
|
|||
if (((ex).e_flags & EF_ARM_EABI_MASK) || \
|
||||
((ex).e_flags & EF_ARM_SOFT_FLOAT)) \
|
||||
set_thread_flag(TIF_USING_IWMMXT); \
|
||||
else \
|
||||
clear_thread_flag(TIF_USING_IWMMXT); \
|
||||
} while (0)
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -136,9 +136,9 @@ extern void __readwrite_bug(const char *fn);
|
|||
/*
|
||||
* String version of IO memory access ops:
|
||||
*/
|
||||
extern void _memcpy_fromio(void *, void __iomem *, size_t);
|
||||
extern void _memcpy_toio(void __iomem *, const void *, size_t);
|
||||
extern void _memset_io(void __iomem *, int, size_t);
|
||||
extern void _memcpy_fromio(void *, const volatile void __iomem *, size_t);
|
||||
extern void _memcpy_toio(volatile void __iomem *, const void *, size_t);
|
||||
extern void _memset_io(volatile void __iomem *, int, size_t);
|
||||
|
||||
#define mmiowb()
|
||||
|
||||
|
|
|
|||
|
|
@ -115,7 +115,6 @@ typedef unsigned long sigset_t;
|
|||
|
||||
#ifdef __KERNEL__
|
||||
#define SA_TIMER 0x40000000
|
||||
#define SA_IRQNOMASK 0x08000000
|
||||
#endif
|
||||
|
||||
#include <asm-generic/signal.h>
|
||||
|
|
|
|||
|
|
@ -158,6 +158,19 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addres
|
|||
#define lazy_mmu_prot_update(pte) do { } while (0)
|
||||
#endif
|
||||
|
||||
#ifndef __HAVE_ARCH_MULTIPLE_ZERO_PAGE
|
||||
#define move_pte(pte, prot, old_addr, new_addr) (pte)
|
||||
#else
|
||||
#define move_pte(pte, prot, old_addr, new_addr) \
|
||||
({ \
|
||||
pte_t newpte = (pte); \
|
||||
if (pte_present(pte) && pfn_valid(pte_pfn(pte)) && \
|
||||
pte_page(pte) == ZERO_PAGE(old_addr)) \
|
||||
newpte = mk_pte(ZERO_PAGE(new_addr), (prot)); \
|
||||
newpte; \
|
||||
})
|
||||
#endif
|
||||
|
||||
/*
|
||||
* When walking page tables, get the address of the next boundary,
|
||||
* or the end address of the range if that comes earlier. Although no
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@
|
|||
#include <asm/irq.h>
|
||||
#include <asm/sections.h>
|
||||
|
||||
struct hw_interrupt_type;
|
||||
|
||||
/*
|
||||
* Various low-level irq details needed by irq.c, process.c,
|
||||
* time.c, io_apic.c and smp.c
|
||||
|
|
|
|||
|
|
@ -187,8 +187,8 @@ extern void __get_user_unknown (void);
|
|||
({ \
|
||||
const __typeof__(*(ptr)) __user *__gu_ptr = (ptr); \
|
||||
__typeof__ (size) __gu_size = (size); \
|
||||
long __gu_err = -EFAULT, __gu_val = 0; \
|
||||
\
|
||||
long __gu_err = -EFAULT; \
|
||||
unsigned long __gu_val = 0; \
|
||||
if (!check || __access_ok(__gu_ptr, size, segment)) \
|
||||
switch (__gu_size) { \
|
||||
case 1: __get_user_size(__gu_val, __gu_ptr, 1, __gu_err); break; \
|
||||
|
|
@ -240,13 +240,13 @@ extern unsigned long __must_check __copy_user (void __user *to, const void __use
|
|||
static inline unsigned long
|
||||
__copy_to_user (void __user *to, const void *from, unsigned long count)
|
||||
{
|
||||
return __copy_user(to, (void __user *) from, count);
|
||||
return __copy_user(to, (__force void __user *) from, count);
|
||||
}
|
||||
|
||||
static inline unsigned long
|
||||
__copy_from_user (void *to, const void __user *from, unsigned long count)
|
||||
{
|
||||
return __copy_user((void __user *) to, from, count);
|
||||
return __copy_user((__force void __user *) to, from, count);
|
||||
}
|
||||
|
||||
#define __copy_to_user_inatomic __copy_to_user
|
||||
|
|
@ -258,7 +258,7 @@ __copy_from_user (void *to, const void __user *from, unsigned long count)
|
|||
long __cu_len = (n); \
|
||||
\
|
||||
if (__access_ok(__cu_to, __cu_len, get_fs())) \
|
||||
__cu_len = __copy_user(__cu_to, (void __user *) __cu_from, __cu_len); \
|
||||
__cu_len = __copy_user(__cu_to, (__force void __user *) __cu_from, __cu_len); \
|
||||
__cu_len; \
|
||||
})
|
||||
|
||||
|
|
@ -270,7 +270,7 @@ __copy_from_user (void *to, const void __user *from, unsigned long count)
|
|||
\
|
||||
__chk_user_ptr(__cu_from); \
|
||||
if (__access_ok(__cu_from, __cu_len, get_fs())) \
|
||||
__cu_len = __copy_user((void __user *) __cu_to, __cu_from, __cu_len); \
|
||||
__cu_len = __copy_user((__force void __user *) __cu_to, __cu_from, __cu_len); \
|
||||
__cu_len; \
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ __ioremap(unsigned long offset, unsigned long size, unsigned long flags);
|
|||
* address.
|
||||
*/
|
||||
|
||||
static inline void * ioremap(unsigned long offset, unsigned long size)
|
||||
static inline void __iomem *ioremap(unsigned long offset, unsigned long size)
|
||||
{
|
||||
return __ioremap(offset, size, 0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -208,7 +208,8 @@ extern void __get_user_4(void);
|
|||
* On error, the variable @x is set to zero.
|
||||
*/
|
||||
#define get_user(x,ptr) \
|
||||
({ int __ret_gu,__val_gu; \
|
||||
({ int __ret_gu; \
|
||||
unsigned long __val_gu; \
|
||||
__chk_user_ptr(ptr); \
|
||||
switch(sizeof (*(ptr))) { \
|
||||
case 1: __get_user_x(1,__ret_gu,__val_gu,ptr); break; \
|
||||
|
|
@ -403,7 +404,8 @@ struct __large_struct { unsigned long buf[100]; };
|
|||
|
||||
#define __get_user_nocheck(x,ptr,size) \
|
||||
({ \
|
||||
long __gu_err, __gu_val; \
|
||||
long __gu_err; \
|
||||
unsigned long __gu_val; \
|
||||
__get_user_size(__gu_val,(ptr),(size),__gu_err); \
|
||||
(x) = (__typeof__(*(ptr)))__gu_val; \
|
||||
__gu_err; \
|
||||
|
|
@ -594,8 +596,8 @@ static inline unsigned long __generic_copy_to_user_nocheck(void __user *to,
|
|||
return n;
|
||||
}
|
||||
|
||||
unsigned long __generic_copy_to_user(void *, const void *, unsigned long);
|
||||
unsigned long __generic_copy_from_user(void *, const void *, unsigned long);
|
||||
unsigned long __generic_copy_to_user(void __user *, const void *, unsigned long);
|
||||
unsigned long __generic_copy_from_user(void *, const void __user *, unsigned long);
|
||||
|
||||
/**
|
||||
* __copy_to_user: - Copy a block of data into user space, with less checking.
|
||||
|
|
|
|||
|
|
@ -68,6 +68,8 @@ extern unsigned long zero_page_mask;
|
|||
#define ZERO_PAGE(vaddr) \
|
||||
(virt_to_page(empty_zero_page + (((unsigned long)(vaddr)) & zero_page_mask)))
|
||||
|
||||
#define __HAVE_ARCH_MULTIPLE_ZERO_PAGE
|
||||
|
||||
extern void paging_init(void);
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ extern unsigned long pci_dram_offset;
|
|||
* is actually performed (i.e. the data has come back) before we start
|
||||
* executing any following instructions.
|
||||
*/
|
||||
extern inline int in_8(volatile unsigned char __iomem *addr)
|
||||
extern inline int in_8(const volatile unsigned char __iomem *addr)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
|
@ -72,7 +72,7 @@ extern inline void out_8(volatile unsigned char __iomem *addr, int val)
|
|||
__asm__ __volatile__("stb%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val));
|
||||
}
|
||||
|
||||
extern inline int in_le16(volatile unsigned short __iomem *addr)
|
||||
extern inline int in_le16(const volatile unsigned short __iomem *addr)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
|
@ -83,7 +83,7 @@ extern inline int in_le16(volatile unsigned short __iomem *addr)
|
|||
return ret;
|
||||
}
|
||||
|
||||
extern inline int in_be16(volatile unsigned short __iomem *addr)
|
||||
extern inline int in_be16(const volatile unsigned short __iomem *addr)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
|
@ -104,7 +104,7 @@ extern inline void out_be16(volatile unsigned short __iomem *addr, int val)
|
|||
__asm__ __volatile__("sth%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val));
|
||||
}
|
||||
|
||||
extern inline unsigned in_le32(volatile unsigned __iomem *addr)
|
||||
extern inline unsigned in_le32(const volatile unsigned __iomem *addr)
|
||||
{
|
||||
unsigned ret;
|
||||
|
||||
|
|
@ -115,7 +115,7 @@ extern inline unsigned in_le32(volatile unsigned __iomem *addr)
|
|||
return ret;
|
||||
}
|
||||
|
||||
extern inline unsigned in_be32(volatile unsigned __iomem *addr)
|
||||
extern inline unsigned in_be32(const volatile unsigned __iomem *addr)
|
||||
{
|
||||
unsigned ret;
|
||||
|
||||
|
|
@ -139,7 +139,7 @@ extern inline void out_be32(volatile unsigned __iomem *addr, int val)
|
|||
#define readb(addr) in_8((volatile u8 *)(addr))
|
||||
#define writeb(b,addr) out_8((volatile u8 *)(addr), (b))
|
||||
#else
|
||||
static inline __u8 readb(volatile void __iomem *addr)
|
||||
static inline __u8 readb(const volatile void __iomem *addr)
|
||||
{
|
||||
return in_8(addr);
|
||||
}
|
||||
|
|
@ -150,11 +150,11 @@ static inline void writeb(__u8 b, volatile void __iomem *addr)
|
|||
#endif
|
||||
|
||||
#if defined(CONFIG_APUS)
|
||||
static inline __u16 readw(volatile void __iomem *addr)
|
||||
static inline __u16 readw(const volatile void __iomem *addr)
|
||||
{
|
||||
return *(__force volatile __u16 *)(addr);
|
||||
}
|
||||
static inline __u32 readl(volatile void __iomem *addr)
|
||||
static inline __u32 readl(const volatile void __iomem *addr)
|
||||
{
|
||||
return *(__force volatile __u32 *)(addr);
|
||||
}
|
||||
|
|
@ -173,11 +173,11 @@ static inline void writel(__u32 b, volatile void __iomem *addr)
|
|||
#define writew(b,addr) out_le16((volatile u16 *)(addr),(b))
|
||||
#define writel(b,addr) out_le32((volatile u32 *)(addr),(b))
|
||||
#else
|
||||
static inline __u16 readw(volatile void __iomem *addr)
|
||||
static inline __u16 readw(const volatile void __iomem *addr)
|
||||
{
|
||||
return in_le16(addr);
|
||||
}
|
||||
static inline __u32 readl(volatile void __iomem *addr)
|
||||
static inline __u32 readl(const volatile void __iomem *addr)
|
||||
{
|
||||
return in_le32(addr);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -233,7 +233,7 @@ struct mv64x60_chip_info {
|
|||
struct mv64x60_handle {
|
||||
u32 type; /* type of bridge */
|
||||
u32 rev; /* revision of bridge */
|
||||
void *v_base; /* virtual base addr of bridge regs */
|
||||
void __iomem *v_base;/* virtual base addr of bridge regs */
|
||||
phys_addr_t p_base; /* physical base addr of bridge regs */
|
||||
|
||||
u32 pci_mode_a; /* pci 0 mode: conventional pci, pci-x*/
|
||||
|
|
@ -303,7 +303,7 @@ void mv64x60_alloc_hose(struct mv64x60_handle *bh, u32 cfg_addr,
|
|||
u32 cfg_data, struct pci_controller **hose);
|
||||
int mv64x60_get_type(struct mv64x60_handle *bh);
|
||||
int mv64x60_setup_for_chip(struct mv64x60_handle *bh);
|
||||
void *mv64x60_get_bridge_vbase(void);
|
||||
void __iomem *mv64x60_get_bridge_vbase(void);
|
||||
u32 mv64x60_get_bridge_type(void);
|
||||
u32 mv64x60_get_bridge_rev(void);
|
||||
void mv64x60_get_mem_windows(struct mv64x60_handle *bh,
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ struct ppc64_tlb_batch {
|
|||
pte_t pte[PPC64_TLB_BATCH_NR];
|
||||
unsigned long addr[PPC64_TLB_BATCH_NR];
|
||||
unsigned long vaddr[PPC64_TLB_BATCH_NR];
|
||||
unsigned int large;
|
||||
};
|
||||
DECLARE_PER_CPU(struct ppc64_tlb_batch, ppc64_tlb_batch);
|
||||
|
||||
|
|
|
|||
|
|
@ -164,7 +164,8 @@ do { \
|
|||
|
||||
#define __get_user_nocheck(x,ptr,size) \
|
||||
({ \
|
||||
long __gu_err, __gu_val; \
|
||||
long __gu_err; \
|
||||
unsigned long __gu_val; \
|
||||
might_sleep(); \
|
||||
__get_user_size(__gu_val,(ptr),(size),__gu_err,-EFAULT);\
|
||||
(x) = (__typeof__(*(ptr)))__gu_val; \
|
||||
|
|
@ -173,7 +174,8 @@ do { \
|
|||
|
||||
#define __get_user_check(x,ptr,size) \
|
||||
({ \
|
||||
long __gu_err = -EFAULT, __gu_val = 0; \
|
||||
long __gu_err = -EFAULT; \
|
||||
unsigned long __gu_val = 0; \
|
||||
const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
|
||||
might_sleep(); \
|
||||
if (access_ok(VERIFY_READ,__gu_addr,size)) \
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ typedef struct
|
|||
struct sigcontext
|
||||
{
|
||||
unsigned long oldmask[_SIGCONTEXT_NSIG_WORDS];
|
||||
_sigregs *sregs;
|
||||
_sigregs __user *sregs;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -165,7 +165,7 @@ struct sigaction {
|
|||
#endif /* __KERNEL__ */
|
||||
|
||||
typedef struct sigaltstack {
|
||||
void *ss_sp;
|
||||
void __user *ss_sp;
|
||||
int ss_flags;
|
||||
size_t ss_size;
|
||||
} stack_t;
|
||||
|
|
|
|||
|
|
@ -82,6 +82,8 @@ extern unsigned long page_kernel;
|
|||
/* Top-level page directory */
|
||||
extern pgd_t swapper_pg_dir[1024];
|
||||
|
||||
extern void paging_init(void);
|
||||
|
||||
/* Page table for 0-4MB for everybody, on the Sparc this
|
||||
* holds the same as on the i386.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -66,6 +66,11 @@ extern void flush_ptrace_access(struct vm_area_struct *, struct page *,
|
|||
#define flush_cache_vmap(start, end) do { } while (0)
|
||||
#define flush_cache_vunmap(start, end) do { } while (0)
|
||||
|
||||
#ifdef CONFIG_DEBUG_PAGEALLOC
|
||||
/* internal debugging function */
|
||||
void kernel_map_pages(struct page *page, int numpages, int enable);
|
||||
#endif
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
#endif /* _SPARC64_CACHEFLUSH_H */
|
||||
|
|
|
|||
|
|
@ -22,6 +22,16 @@ typedef struct {
|
|||
unsigned int __pad1;
|
||||
unsigned long *pte_cache[2];
|
||||
unsigned long *pgd_cache;
|
||||
|
||||
/* Dcache line 3, rarely used */
|
||||
unsigned int dcache_size;
|
||||
unsigned int dcache_line_size;
|
||||
unsigned int icache_size;
|
||||
unsigned int icache_line_size;
|
||||
unsigned int ecache_size;
|
||||
unsigned int ecache_line_size;
|
||||
unsigned int __pad2;
|
||||
unsigned int __pad3;
|
||||
} cpuinfo_sparc;
|
||||
|
||||
DECLARE_PER_CPU(cpuinfo_sparc, __cpu_data);
|
||||
|
|
|
|||
|
|
@ -12,9 +12,12 @@
|
|||
#define __JALAPENO_ID 0x003e0016
|
||||
|
||||
#define CHEETAH_MANUF 0x003e
|
||||
#define CHEETAH_IMPL 0x0014
|
||||
#define CHEETAH_PLUS_IMPL 0x0015
|
||||
#define JALAPENO_IMPL 0x0016
|
||||
#define CHEETAH_IMPL 0x0014 /* Ultra-III */
|
||||
#define CHEETAH_PLUS_IMPL 0x0015 /* Ultra-III+ */
|
||||
#define JALAPENO_IMPL 0x0016 /* Ultra-IIIi */
|
||||
#define JAGUAR_IMPL 0x0018 /* Ultra-IV */
|
||||
#define PANTHER_IMPL 0x0019 /* Ultra-IV+ */
|
||||
#define SERRANO_IMPL 0x0022 /* Ultra-IIIi+ */
|
||||
|
||||
#define BRANCH_IF_CHEETAH_BASE(tmp1,tmp2,label) \
|
||||
rdpr %ver, %tmp1; \
|
||||
|
|
|
|||
|
|
@ -186,8 +186,8 @@ struct linux_prom_registers {
|
|||
};
|
||||
|
||||
struct linux_prom64_registers {
|
||||
long phys_addr;
|
||||
long reg_size;
|
||||
unsigned long phys_addr;
|
||||
unsigned long reg_size;
|
||||
};
|
||||
|
||||
struct linux_prom_irqs {
|
||||
|
|
|
|||
|
|
@ -38,6 +38,20 @@ extern int prom_stdin, prom_stdout;
|
|||
*/
|
||||
extern int prom_chosen_node;
|
||||
|
||||
/* Helper values and strings in arch/sparc64/kernel/head.S */
|
||||
extern const char prom_finddev_name[];
|
||||
extern const char prom_chosen_path[];
|
||||
extern const char prom_getprop_name[];
|
||||
extern const char prom_mmu_name[];
|
||||
extern const char prom_callmethod_name[];
|
||||
extern const char prom_translate_name[];
|
||||
extern const char prom_map_name[];
|
||||
extern const char prom_unmap_name[];
|
||||
extern int prom_mmu_ihandle_cache;
|
||||
extern unsigned int prom_boot_mapped_pc;
|
||||
extern unsigned int prom_boot_mapping_mode;
|
||||
extern unsigned long prom_boot_mapping_phys_high, prom_boot_mapping_phys_low;
|
||||
|
||||
struct linux_mlist_p1275 {
|
||||
struct linux_mlist_p1275 *theres_more;
|
||||
unsigned long start_adr;
|
||||
|
|
@ -68,7 +82,7 @@ extern char *prom_getbootargs(void);
|
|||
* of the string is different on V0 vs. V2->higher proms. The caller must
|
||||
* know what he/she is doing! Returns the device descriptor, an int.
|
||||
*/
|
||||
extern int prom_devopen(char *device_string);
|
||||
extern int prom_devopen(const char *device_string);
|
||||
|
||||
/* Close a previously opened device described by the passed integer
|
||||
* descriptor.
|
||||
|
|
@ -81,27 +95,13 @@ extern int prom_devclose(int device_handle);
|
|||
extern void prom_seek(int device_handle, unsigned int seek_hival,
|
||||
unsigned int seek_lowval);
|
||||
|
||||
/* Machine memory configuration routine. */
|
||||
|
||||
/* This function returns a V0 format memory descriptor table, it has three
|
||||
* entries. One for the total amount of physical ram on the machine, one
|
||||
* for the amount of physical ram available, and one describing the virtual
|
||||
* areas which are allocated by the prom. So, in a sense the physical
|
||||
* available is a calculation of the total physical minus the physical mapped
|
||||
* by the prom with virtual mappings.
|
||||
*
|
||||
* These lists are returned pre-sorted, this should make your life easier
|
||||
* since the prom itself is way too lazy to do such nice things.
|
||||
*/
|
||||
extern struct linux_mem_p1275 *prom_meminfo(void);
|
||||
|
||||
/* Miscellaneous routines, don't really fit in any category per se. */
|
||||
|
||||
/* Reboot the machine with the command line passed. */
|
||||
extern void prom_reboot(char *boot_command);
|
||||
extern void prom_reboot(const char *boot_command);
|
||||
|
||||
/* Evaluate the forth string passed. */
|
||||
extern void prom_feval(char *forth_string);
|
||||
extern void prom_feval(const char *forth_string);
|
||||
|
||||
/* Enter the prom, with possibility of continuation with the 'go'
|
||||
* command in newer proms.
|
||||
|
|
@ -154,7 +154,7 @@ extern char prom_getchar(void);
|
|||
extern void prom_putchar(char character);
|
||||
|
||||
/* Prom's internal routines, don't use in kernel/boot code. */
|
||||
extern void prom_printf(char *fmt, ...);
|
||||
extern void prom_printf(const char *fmt, ...);
|
||||
extern void prom_write(const char *buf, unsigned int len);
|
||||
|
||||
/* Query for input device type */
|
||||
|
|
@ -215,7 +215,7 @@ extern int prom_getunumber(int syndrome_code,
|
|||
char *buf, int buflen);
|
||||
|
||||
/* Retain physical memory to the caller across soft resets. */
|
||||
extern unsigned long prom_retain(char *name,
|
||||
extern unsigned long prom_retain(const char *name,
|
||||
unsigned long pa_low, unsigned long pa_high,
|
||||
long size, long align);
|
||||
|
||||
|
|
@ -269,28 +269,28 @@ extern int prom_getsibling(int node);
|
|||
/* Get the length, at the passed node, of the given property type.
|
||||
* Returns -1 on error (ie. no such property at this node).
|
||||
*/
|
||||
extern int prom_getproplen(int thisnode, char *property);
|
||||
extern int prom_getproplen(int thisnode, const char *property);
|
||||
|
||||
/* Fetch the requested property using the given buffer. Returns
|
||||
* the number of bytes the prom put into your buffer or -1 on error.
|
||||
*/
|
||||
extern int prom_getproperty(int thisnode, char *property,
|
||||
extern int prom_getproperty(int thisnode, const char *property,
|
||||
char *prop_buffer, int propbuf_size);
|
||||
|
||||
/* Acquire an integer property. */
|
||||
extern int prom_getint(int node, char *property);
|
||||
extern int prom_getint(int node, const char *property);
|
||||
|
||||
/* Acquire an integer property, with a default value. */
|
||||
extern int prom_getintdefault(int node, char *property, int defval);
|
||||
extern int prom_getintdefault(int node, const char *property, int defval);
|
||||
|
||||
/* Acquire a boolean property, 0=FALSE 1=TRUE. */
|
||||
extern int prom_getbool(int node, char *prop);
|
||||
extern int prom_getbool(int node, const char *prop);
|
||||
|
||||
/* Acquire a string property, null string on error. */
|
||||
extern void prom_getstring(int node, char *prop, char *buf, int bufsize);
|
||||
extern void prom_getstring(int node, const char *prop, char *buf, int bufsize);
|
||||
|
||||
/* Does the passed node have the given "name"? YES=1 NO=0 */
|
||||
extern int prom_nodematch(int thisnode, char *name);
|
||||
extern int prom_nodematch(int thisnode, const char *name);
|
||||
|
||||
/* Puts in buffer a prom name in the form name@x,y or name (x for which_io
|
||||
* and y for first regs phys address
|
||||
|
|
@ -300,7 +300,7 @@ extern int prom_getname(int node, char *buf, int buflen);
|
|||
/* Search all siblings starting at the passed node for "name" matching
|
||||
* the given string. Returns the node on success, zero on failure.
|
||||
*/
|
||||
extern int prom_searchsiblings(int node_start, char *name);
|
||||
extern int prom_searchsiblings(int node_start, const char *name);
|
||||
|
||||
/* Return the first property type, as a string, for the given node.
|
||||
* Returns a null string on error. Buffer should be at least 32B long.
|
||||
|
|
@ -310,21 +310,21 @@ extern char *prom_firstprop(int node, char *buffer);
|
|||
/* Returns the next property after the passed property for the given
|
||||
* node. Returns null string on failure. Buffer should be at least 32B long.
|
||||
*/
|
||||
extern char *prom_nextprop(int node, char *prev_property, char *buffer);
|
||||
extern char *prom_nextprop(int node, const char *prev_property, char *buffer);
|
||||
|
||||
/* Returns 1 if the specified node has given property. */
|
||||
extern int prom_node_has_property(int node, char *property);
|
||||
extern int prom_node_has_property(int node, const char *property);
|
||||
|
||||
/* Returns phandle of the path specified */
|
||||
extern int prom_finddevice(char *name);
|
||||
extern int prom_finddevice(const char *name);
|
||||
|
||||
/* Set the indicated property at the given node with the passed value.
|
||||
* Returns the number of bytes of your value that the prom took.
|
||||
*/
|
||||
extern int prom_setprop(int node, char *prop_name, char *prop_value,
|
||||
extern int prom_setprop(int node, const char *prop_name, char *prop_value,
|
||||
int value_size);
|
||||
|
||||
extern int prom_pathtoinode(char *path);
|
||||
extern int prom_pathtoinode(const char *path);
|
||||
extern int prom_inst2pkg(int);
|
||||
|
||||
/* CPU probing helpers. */
|
||||
|
|
@ -334,7 +334,7 @@ int cpu_find_by_mid(int mid, int *prom_node);
|
|||
/* Client interface level routines. */
|
||||
extern void prom_set_trap_table(unsigned long tba);
|
||||
|
||||
extern long p1275_cmd (char *, long, ...);
|
||||
extern long p1275_cmd(const char *, long, ...);
|
||||
|
||||
|
||||
#if 0
|
||||
|
|
|
|||
|
|
@ -140,23 +140,6 @@ extern unsigned long page_to_pfn(struct page *);
|
|||
#define virt_to_phys __pa
|
||||
#define phys_to_virt __va
|
||||
|
||||
/* The following structure is used to hold the physical
|
||||
* memory configuration of the machine. This is filled in
|
||||
* probe_memory() and is later used by mem_init() to set up
|
||||
* mem_map[]. We statically allocate SPARC_PHYS_BANKS of
|
||||
* these structs, this is arbitrary. The entry after the
|
||||
* last valid one has num_bytes==0.
|
||||
*/
|
||||
|
||||
struct sparc_phys_banks {
|
||||
unsigned long base_addr;
|
||||
unsigned long num_bytes;
|
||||
};
|
||||
|
||||
#define SPARC_PHYS_BANKS 32
|
||||
|
||||
extern struct sparc_phys_banks sp_banks[SPARC_PHYS_BANKS];
|
||||
|
||||
#endif /* !(__ASSEMBLY__) */
|
||||
|
||||
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
|
||||
|
|
|
|||
|
|
@ -60,13 +60,13 @@
|
|||
* table can map
|
||||
*/
|
||||
#define PMD_SHIFT (PAGE_SHIFT + (PAGE_SHIFT-3))
|
||||
#define PMD_SIZE (1UL << PMD_SHIFT)
|
||||
#define PMD_SIZE (_AC(1,UL) << PMD_SHIFT)
|
||||
#define PMD_MASK (~(PMD_SIZE-1))
|
||||
#define PMD_BITS (PAGE_SHIFT - 2)
|
||||
|
||||
/* PGDIR_SHIFT determines what a third-level page table entry can map */
|
||||
#define PGDIR_SHIFT (PAGE_SHIFT + (PAGE_SHIFT-3) + PMD_BITS)
|
||||
#define PGDIR_SIZE (1UL << PGDIR_SHIFT)
|
||||
#define PGDIR_SIZE (_AC(1,UL) << PGDIR_SHIFT)
|
||||
#define PGDIR_MASK (~(PGDIR_SIZE-1))
|
||||
#define PGDIR_BITS (PAGE_SHIFT - 2)
|
||||
|
||||
|
|
@ -98,7 +98,9 @@
|
|||
#define _PAGE_NFO _AC(0x1000000000000000,UL) /* No Fault Only */
|
||||
#define _PAGE_IE _AC(0x0800000000000000,UL) /* Invert Endianness */
|
||||
#define _PAGE_SOFT2 _AC(0x07FC000000000000,UL) /* Software bits, set 2 */
|
||||
#define _PAGE_RES1 _AC(0x0003000000000000,UL) /* Reserved */
|
||||
#define _PAGE_RES1 _AC(0x0002000000000000,UL) /* Reserved */
|
||||
#define _PAGE_SZ32MB _AC(0x0001000000000000,UL) /* (Panther) 32MB page */
|
||||
#define _PAGE_SZ256MB _AC(0x2001000000000000,UL) /* (Panther) 256MB page */
|
||||
#define _PAGE_SN _AC(0x0000800000000000,UL) /* (Cheetah) Snoop */
|
||||
#define _PAGE_RES2 _AC(0x0000780000000000,UL) /* Reserved */
|
||||
#define _PAGE_PADDR_SF _AC(0x000001FFFFFFE000,UL) /* (Spitfire) paddr[40:13]*/
|
||||
|
|
@ -336,7 +338,11 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, pte_t *p
|
|||
#define pte_clear(mm,addr,ptep) \
|
||||
set_pte_at((mm), (addr), (ptep), __pte(0UL))
|
||||
|
||||
extern pgd_t swapper_pg_dir[1];
|
||||
extern pgd_t swapper_pg_dir[2048];
|
||||
extern pmd_t swapper_low_pmd_dir[2048];
|
||||
|
||||
extern void paging_init(void);
|
||||
extern unsigned long find_ecache_flush_span(unsigned long size);
|
||||
|
||||
/* These do nothing with the way I have things setup. */
|
||||
#define mmu_lockarea(vaddr, len) (vaddr)
|
||||
|
|
|
|||
|
|
@ -70,26 +70,14 @@ static inline int access_ok(int type, const void __user * addr, unsigned long si
|
|||
* with the main instruction path. This means when everything is well,
|
||||
* we don't even have to jump over them. Further, they do not intrude
|
||||
* on our cache or tlb entries.
|
||||
*
|
||||
* There is a special way how to put a range of potentially faulting
|
||||
* insns (like twenty ldd/std's with now intervening other instructions)
|
||||
* You specify address of first in insn and 0 in fixup and in the next
|
||||
* exception_table_entry you specify last potentially faulting insn + 1
|
||||
* and in fixup the routine which should handle the fault.
|
||||
* That fixup code will get
|
||||
* (faulting_insn_address - first_insn_in_the_range_address)/4
|
||||
* in %g2 (ie. index of the faulting instruction in the range).
|
||||
*/
|
||||
|
||||
struct exception_table_entry
|
||||
{
|
||||
unsigned insn, fixup;
|
||||
struct exception_table_entry {
|
||||
unsigned int insn, fixup;
|
||||
};
|
||||
|
||||
/* Special exable search, which handles ranges. Returns fixup */
|
||||
unsigned long search_extables_range(unsigned long addr, unsigned long *g2);
|
||||
|
||||
extern void __ret_efault(void);
|
||||
extern void __retl_efault(void);
|
||||
|
||||
/* Uh, these should become the main single-value transfer routines..
|
||||
* They automatically use the right size if we just have the right
|
||||
|
|
@ -263,7 +251,7 @@ copy_from_user(void *to, const void __user *from, unsigned long size)
|
|||
{
|
||||
unsigned long ret = ___copy_from_user(to, from, size);
|
||||
|
||||
if (ret)
|
||||
if (unlikely(ret))
|
||||
ret = copy_from_user_fixup(to, from, size);
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -279,7 +267,7 @@ copy_to_user(void __user *to, const void *from, unsigned long size)
|
|||
{
|
||||
unsigned long ret = ___copy_to_user(to, from, size);
|
||||
|
||||
if (ret)
|
||||
if (unlikely(ret))
|
||||
ret = copy_to_user_fixup(to, from, size);
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -295,7 +283,7 @@ copy_in_user(void __user *to, void __user *from, unsigned long size)
|
|||
{
|
||||
unsigned long ret = ___copy_in_user(to, from, size);
|
||||
|
||||
if (ret)
|
||||
if (unlikely(ret))
|
||||
ret = copy_in_user_fixup(to, from, size);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@
|
|||
const __typeof__(ptr) __private_ptr = ptr; \
|
||||
__typeof__(*(__private_ptr)) __private_val; \
|
||||
int __private_ret = -EFAULT; \
|
||||
(x) = 0; \
|
||||
(x) = (__typeof__(*(__private_ptr)))0; \
|
||||
if (__copy_from_user(&__private_val, (__private_ptr), \
|
||||
sizeof(*(__private_ptr))) == 0) {\
|
||||
(x) = (__typeof__(*(__private_ptr))) __private_val; \
|
||||
|
|
|
|||
|
|
@ -234,6 +234,7 @@ static inline unsigned int cpuid_edx(unsigned int op)
|
|||
#define MSR_K8_TOP_MEM1 0xC001001A
|
||||
#define MSR_K8_TOP_MEM2 0xC001001D
|
||||
#define MSR_K8_SYSCFG 0xC0010010
|
||||
#define MSR_K8_HWCR 0xC0010015
|
||||
|
||||
/* K6 MSRs */
|
||||
#define MSR_K6_EFER 0xC0000080
|
||||
|
|
|
|||
|
|
@ -384,7 +384,7 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
|||
}
|
||||
|
||||
#define pte_index(address) \
|
||||
((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
|
||||
(((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
|
||||
#define pte_offset_kernel(dir, address) ((pte_t *) pmd_page_kernel(*(dir)) + \
|
||||
pte_index(address))
|
||||
|
||||
|
|
|
|||
|
|
@ -43,6 +43,40 @@ struct kioctx;
|
|||
#define kiocbIsKicked(iocb) test_bit(KIF_KICKED, &(iocb)->ki_flags)
|
||||
#define kiocbIsCancelled(iocb) test_bit(KIF_CANCELLED, &(iocb)->ki_flags)
|
||||
|
||||
/* is there a better place to document function pointer methods? */
|
||||
/**
|
||||
* ki_retry - iocb forward progress callback
|
||||
* @kiocb: The kiocb struct to advance by performing an operation.
|
||||
*
|
||||
* This callback is called when the AIO core wants a given AIO operation
|
||||
* to make forward progress. The kiocb argument describes the operation
|
||||
* that is to be performed. As the operation proceeds, perhaps partially,
|
||||
* ki_retry is expected to update the kiocb with progress made. Typically
|
||||
* ki_retry is set in the AIO core and it itself calls file_operations
|
||||
* helpers.
|
||||
*
|
||||
* ki_retry's return value determines when the AIO operation is completed
|
||||
* and an event is generated in the AIO event ring. Except the special
|
||||
* return values described below, the value that is returned from ki_retry
|
||||
* is transferred directly into the completion ring as the operation's
|
||||
* resulting status. Once this has happened ki_retry *MUST NOT* reference
|
||||
* the kiocb pointer again.
|
||||
*
|
||||
* If ki_retry returns -EIOCBQUEUED it has made a promise that aio_complete()
|
||||
* will be called on the kiocb pointer in the future. The AIO core will
|
||||
* not ask the method again -- ki_retry must ensure forward progress.
|
||||
* aio_complete() must be called once and only once in the future, multiple
|
||||
* calls may result in undefined behaviour.
|
||||
*
|
||||
* If ki_retry returns -EIOCBRETRY it has made a promise that kick_iocb()
|
||||
* will be called on the kiocb pointer in the future. This may happen
|
||||
* through generic helpers that associate kiocb->ki_wait with a wait
|
||||
* queue head that ki_retry uses via current->io_wait. It can also happen
|
||||
* with custom tracking and manual calls to kick_iocb(), though that is
|
||||
* discouraged. In either case, kick_iocb() must be called once and only
|
||||
* once. ki_retry must ensure forward progress, the AIO core will wait
|
||||
* indefinitely for kick_iocb() to be called.
|
||||
*/
|
||||
struct kiocb {
|
||||
struct list_head ki_run_list;
|
||||
long ki_flags;
|
||||
|
|
|
|||
|
|
@ -104,12 +104,19 @@ struct cn_queue_dev {
|
|||
struct sock *nls;
|
||||
};
|
||||
|
||||
struct cn_callback {
|
||||
struct cn_callback_id {
|
||||
unsigned char name[CN_CBQ_NAMELEN];
|
||||
|
||||
struct cb_id id;
|
||||
};
|
||||
|
||||
struct cn_callback_data {
|
||||
void (*destruct_data) (void *);
|
||||
void *ddata;
|
||||
|
||||
void *callback_priv;
|
||||
void (*callback) (void *);
|
||||
void *priv;
|
||||
|
||||
void *free;
|
||||
};
|
||||
|
||||
struct cn_callback_entry {
|
||||
|
|
@ -118,8 +125,8 @@ struct cn_callback_entry {
|
|||
struct work_struct work;
|
||||
struct cn_queue_dev *pdev;
|
||||
|
||||
void (*destruct_data) (void *);
|
||||
void *ddata;
|
||||
struct cn_callback_id id;
|
||||
struct cn_callback_data data;
|
||||
|
||||
int seq, group;
|
||||
struct sock *nls;
|
||||
|
|
@ -144,7 +151,7 @@ int cn_add_callback(struct cb_id *, char *, void (*callback) (void *));
|
|||
void cn_del_callback(struct cb_id *);
|
||||
int cn_netlink_send(struct cn_msg *, u32, int);
|
||||
|
||||
int cn_queue_add_callback(struct cn_queue_dev *dev, struct cn_callback *cb);
|
||||
int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id, void (*callback)(void *));
|
||||
void cn_queue_del_callback(struct cn_queue_dev *dev, struct cb_id *id);
|
||||
|
||||
struct cn_queue_dev *cn_queue_alloc_dev(char *name, struct sock *);
|
||||
|
|
@ -152,6 +159,8 @@ void cn_queue_free_dev(struct cn_queue_dev *dev);
|
|||
|
||||
int cn_cb_equal(struct cb_id *, struct cb_id *);
|
||||
|
||||
void cn_queue_wrapper(void *data);
|
||||
|
||||
extern int cn_already_initialized;
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
|
|
|||
|
|
@ -111,7 +111,9 @@ static inline struct ethhdr *eth_hdr(const struct sk_buff *skb)
|
|||
return (struct ethhdr *)skb->mac.raw;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
extern struct ctl_table ether_table[];
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_IF_ETHER_H */
|
||||
|
|
|
|||
|
|
@ -142,13 +142,21 @@ static __inline__ int bad_mask(u32 mask, u32 addr)
|
|||
|
||||
#define endfor_ifa(in_dev) }
|
||||
|
||||
static inline struct in_device *__in_dev_get_rcu(const struct net_device *dev)
|
||||
{
|
||||
struct in_device *in_dev = dev->ip_ptr;
|
||||
if (in_dev)
|
||||
in_dev = rcu_dereference(in_dev);
|
||||
return in_dev;
|
||||
}
|
||||
|
||||
static __inline__ struct in_device *
|
||||
in_dev_get(const struct net_device *dev)
|
||||
{
|
||||
struct in_device *in_dev;
|
||||
|
||||
rcu_read_lock();
|
||||
in_dev = dev->ip_ptr;
|
||||
in_dev = __in_dev_get_rcu(dev);
|
||||
if (in_dev)
|
||||
atomic_inc(&in_dev->refcnt);
|
||||
rcu_read_unlock();
|
||||
|
|
@ -156,7 +164,7 @@ in_dev_get(const struct net_device *dev)
|
|||
}
|
||||
|
||||
static __inline__ struct in_device *
|
||||
__in_dev_get(const struct net_device *dev)
|
||||
__in_dev_get_rtnl(const struct net_device *dev)
|
||||
{
|
||||
return (struct in_device*)dev->ip_ptr;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -372,8 +372,9 @@ static inline struct raw6_sock *raw6_sk(const struct sock *sk)
|
|||
#define inet_v6_ipv6only(__sk) 0
|
||||
#endif /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */
|
||||
|
||||
#define INET6_MATCH(__sk, __saddr, __daddr, __ports, __dif) \
|
||||
(((*((__u32 *)&(inet_sk(__sk)->dport))) == (__ports)) && \
|
||||
#define INET6_MATCH(__sk, __hash, __saddr, __daddr, __ports, __dif)\
|
||||
(((__sk)->sk_hash == (__hash)) && \
|
||||
((*((__u32 *)&(inet_sk(__sk)->dport))) == (__ports)) && \
|
||||
((__sk)->sk_family == AF_INET6) && \
|
||||
ipv6_addr_equal(&inet6_sk(__sk)->daddr, (__saddr)) && \
|
||||
ipv6_addr_equal(&inet6_sk(__sk)->rcv_saddr, (__daddr)) && \
|
||||
|
|
|
|||
|
|
@ -42,11 +42,14 @@ struct keyring_list {
|
|||
/*
|
||||
* check to see whether permission is granted to use a key in the desired way
|
||||
*/
|
||||
static inline int key_permission(const struct key *key, key_perm_t perm)
|
||||
static inline int key_permission(const key_ref_t key_ref, key_perm_t perm)
|
||||
{
|
||||
struct key *key = key_ref_to_ptr(key_ref);
|
||||
key_perm_t kperm;
|
||||
|
||||
if (key->uid == current->fsuid)
|
||||
if (is_key_possessed(key_ref))
|
||||
kperm = key->perm >> 24;
|
||||
else if (key->uid == current->fsuid)
|
||||
kperm = key->perm >> 16;
|
||||
else if (key->gid != -1 &&
|
||||
key->perm & KEY_GRP_ALL &&
|
||||
|
|
@ -65,11 +68,14 @@ static inline int key_permission(const struct key *key, key_perm_t perm)
|
|||
* check to see whether permission is granted to use a key in at least one of
|
||||
* the desired ways
|
||||
*/
|
||||
static inline int key_any_permission(const struct key *key, key_perm_t perm)
|
||||
static inline int key_any_permission(const key_ref_t key_ref, key_perm_t perm)
|
||||
{
|
||||
struct key *key = key_ref_to_ptr(key_ref);
|
||||
key_perm_t kperm;
|
||||
|
||||
if (key->uid == current->fsuid)
|
||||
if (is_key_possessed(key_ref))
|
||||
kperm = key->perm >> 24;
|
||||
else if (key->uid == current->fsuid)
|
||||
kperm = key->perm >> 16;
|
||||
else if (key->gid != -1 &&
|
||||
key->perm & KEY_GRP_ALL &&
|
||||
|
|
@ -94,13 +100,17 @@ static inline int key_task_groups_search(struct task_struct *tsk, gid_t gid)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static inline int key_task_permission(const struct key *key,
|
||||
static inline int key_task_permission(const key_ref_t key_ref,
|
||||
struct task_struct *context,
|
||||
key_perm_t perm)
|
||||
{
|
||||
struct key *key = key_ref_to_ptr(key_ref);
|
||||
key_perm_t kperm;
|
||||
|
||||
if (key->uid == context->fsuid) {
|
||||
if (is_key_possessed(key_ref)) {
|
||||
kperm = key->perm >> 24;
|
||||
}
|
||||
else if (key->uid == context->fsuid) {
|
||||
kperm = key->perm >> 16;
|
||||
}
|
||||
else if (key->gid != -1 &&
|
||||
|
|
@ -121,9 +131,9 @@ static inline int key_task_permission(const struct key *key,
|
|||
|
||||
}
|
||||
|
||||
extern struct key *lookup_user_key(struct task_struct *context,
|
||||
key_serial_t id, int create, int partial,
|
||||
key_perm_t perm);
|
||||
extern key_ref_t lookup_user_key(struct task_struct *context,
|
||||
key_serial_t id, int create, int partial,
|
||||
key_perm_t perm);
|
||||
|
||||
extern long join_session_keyring(const char *name);
|
||||
|
||||
|
|
|
|||
|
|
@ -35,11 +35,18 @@ struct key;
|
|||
|
||||
#undef KEY_DEBUGGING
|
||||
|
||||
#define KEY_USR_VIEW 0x00010000 /* user can view a key's attributes */
|
||||
#define KEY_USR_READ 0x00020000 /* user can read key payload / view keyring */
|
||||
#define KEY_USR_WRITE 0x00040000 /* user can update key payload / add link to keyring */
|
||||
#define KEY_USR_SEARCH 0x00080000 /* user can find a key in search / search a keyring */
|
||||
#define KEY_USR_LINK 0x00100000 /* user can create a link to a key/keyring */
|
||||
#define KEY_POS_VIEW 0x01000000 /* possessor can view a key's attributes */
|
||||
#define KEY_POS_READ 0x02000000 /* possessor can read key payload / view keyring */
|
||||
#define KEY_POS_WRITE 0x04000000 /* possessor can update key payload / add link to keyring */
|
||||
#define KEY_POS_SEARCH 0x08000000 /* possessor can find a key in search / search a keyring */
|
||||
#define KEY_POS_LINK 0x10000000 /* possessor can create a link to a key/keyring */
|
||||
#define KEY_POS_ALL 0x1f000000
|
||||
|
||||
#define KEY_USR_VIEW 0x00010000 /* user permissions... */
|
||||
#define KEY_USR_READ 0x00020000
|
||||
#define KEY_USR_WRITE 0x00040000
|
||||
#define KEY_USR_SEARCH 0x00080000
|
||||
#define KEY_USR_LINK 0x00100000
|
||||
#define KEY_USR_ALL 0x001f0000
|
||||
|
||||
#define KEY_GRP_VIEW 0x00000100 /* group permissions... */
|
||||
|
|
@ -65,6 +72,38 @@ struct key_owner;
|
|||
struct keyring_list;
|
||||
struct keyring_name;
|
||||
|
||||
/*****************************************************************************/
|
||||
/*
|
||||
* key reference with possession attribute handling
|
||||
*
|
||||
* NOTE! key_ref_t is a typedef'd pointer to a type that is not actually
|
||||
* defined. This is because we abuse the bottom bit of the reference to carry a
|
||||
* flag to indicate whether the calling process possesses that key in one of
|
||||
* its keyrings.
|
||||
*
|
||||
* the key_ref_t has been made a separate type so that the compiler can reject
|
||||
* attempts to dereference it without proper conversion.
|
||||
*
|
||||
* the three functions are used to assemble and disassemble references
|
||||
*/
|
||||
typedef struct __key_reference_with_attributes *key_ref_t;
|
||||
|
||||
static inline key_ref_t make_key_ref(const struct key *key,
|
||||
unsigned long possession)
|
||||
{
|
||||
return (key_ref_t) ((unsigned long) key | possession);
|
||||
}
|
||||
|
||||
static inline struct key *key_ref_to_ptr(const key_ref_t key_ref)
|
||||
{
|
||||
return (struct key *) ((unsigned long) key_ref & ~1UL);
|
||||
}
|
||||
|
||||
static inline unsigned long is_key_possessed(const key_ref_t key_ref)
|
||||
{
|
||||
return (unsigned long) key_ref & 1UL;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*
|
||||
* authentication token / access credential / keyring
|
||||
|
|
@ -215,20 +254,25 @@ static inline struct key *key_get(struct key *key)
|
|||
return key;
|
||||
}
|
||||
|
||||
static inline void key_ref_put(key_ref_t key_ref)
|
||||
{
|
||||
key_put(key_ref_to_ptr(key_ref));
|
||||
}
|
||||
|
||||
extern struct key *request_key(struct key_type *type,
|
||||
const char *description,
|
||||
const char *callout_info);
|
||||
|
||||
extern int key_validate(struct key *key);
|
||||
|
||||
extern struct key *key_create_or_update(struct key *keyring,
|
||||
const char *type,
|
||||
const char *description,
|
||||
const void *payload,
|
||||
size_t plen,
|
||||
int not_in_quota);
|
||||
extern key_ref_t key_create_or_update(key_ref_t keyring,
|
||||
const char *type,
|
||||
const char *description,
|
||||
const void *payload,
|
||||
size_t plen,
|
||||
int not_in_quota);
|
||||
|
||||
extern int key_update(struct key *key,
|
||||
extern int key_update(key_ref_t key,
|
||||
const void *payload,
|
||||
size_t plen);
|
||||
|
||||
|
|
@ -243,9 +287,9 @@ extern struct key *keyring_alloc(const char *description, uid_t uid, gid_t gid,
|
|||
|
||||
extern int keyring_clear(struct key *keyring);
|
||||
|
||||
extern struct key *keyring_search(struct key *keyring,
|
||||
struct key_type *type,
|
||||
const char *description);
|
||||
extern key_ref_t keyring_search(key_ref_t keyring,
|
||||
struct key_type *type,
|
||||
const char *description);
|
||||
|
||||
extern int keyring_add_key(struct key *keyring,
|
||||
struct key *key);
|
||||
|
|
@ -285,6 +329,10 @@ extern void key_init(void);
|
|||
#define key_serial(k) 0
|
||||
#define key_get(k) ({ NULL; })
|
||||
#define key_put(k) do { } while(0)
|
||||
#define key_ref_put(k) do { } while(0)
|
||||
#define make_key_ref(k) ({ NULL; })
|
||||
#define key_ref_to_ptr(k) ({ NULL; })
|
||||
#define is_key_possessed(k) 0
|
||||
#define alloc_uid_keyring(u) 0
|
||||
#define switch_uid_keyring(u) do { } while(0)
|
||||
#define __install_session_keyring(t, k) ({ NULL; })
|
||||
|
|
|
|||
|
|
@ -183,7 +183,7 @@ struct of_device_id
|
|||
char name[32];
|
||||
char type[32];
|
||||
char compatible[128];
|
||||
#if __KERNEL__
|
||||
#ifdef __KERNEL__
|
||||
void *data;
|
||||
#else
|
||||
kernel_ulong_t data;
|
||||
|
|
@ -209,10 +209,11 @@ struct pcmcia_device_id {
|
|||
/* for real multi-function devices */
|
||||
__u8 function;
|
||||
|
||||
/* for pseude multi-function devices */
|
||||
/* for pseudo multi-function devices */
|
||||
__u8 device_no;
|
||||
|
||||
__u32 prod_id_hash[4];
|
||||
__u32 prod_id_hash[4]
|
||||
__attribute__((aligned(sizeof(__u32))));
|
||||
|
||||
/* not matched against in kernelspace*/
|
||||
#ifdef __KERNEL__
|
||||
|
|
|
|||
|
|
@ -265,6 +265,8 @@ struct net_device
|
|||
* the interface.
|
||||
*/
|
||||
char name[IFNAMSIZ];
|
||||
/* device name hash chain */
|
||||
struct hlist_node name_hlist;
|
||||
|
||||
/*
|
||||
* I/O specific fields
|
||||
|
|
@ -292,6 +294,21 @@ struct net_device
|
|||
|
||||
/* ------- Fields preinitialized in Space.c finish here ------- */
|
||||
|
||||
/* Net device features */
|
||||
unsigned long features;
|
||||
#define NETIF_F_SG 1 /* Scatter/gather IO. */
|
||||
#define NETIF_F_IP_CSUM 2 /* Can checksum only TCP/UDP over IPv4. */
|
||||
#define NETIF_F_NO_CSUM 4 /* Does not require checksum. F.e. loopack. */
|
||||
#define NETIF_F_HW_CSUM 8 /* Can checksum all the packets. */
|
||||
#define NETIF_F_HIGHDMA 32 /* Can DMA to high memory. */
|
||||
#define NETIF_F_FRAGLIST 64 /* Scatter/gather IO. */
|
||||
#define NETIF_F_HW_VLAN_TX 128 /* Transmit VLAN hw acceleration */
|
||||
#define NETIF_F_HW_VLAN_RX 256 /* Receive VLAN hw acceleration */
|
||||
#define NETIF_F_HW_VLAN_FILTER 512 /* Receive filtering on VLAN */
|
||||
#define NETIF_F_VLAN_CHALLENGED 1024 /* Device cannot handle VLAN packets */
|
||||
#define NETIF_F_TSO 2048 /* Can offload TCP/IP segmentation */
|
||||
#define NETIF_F_LLTX 4096 /* LockLess TX */
|
||||
|
||||
struct net_device *next_sched;
|
||||
|
||||
/* Interface index. Unique device identifier */
|
||||
|
|
@ -316,9 +333,6 @@ struct net_device
|
|||
* will (read: may be cleaned up at will).
|
||||
*/
|
||||
|
||||
/* These may be needed for future network-power-down code. */
|
||||
unsigned long trans_start; /* Time (in jiffies) of last Tx */
|
||||
unsigned long last_rx; /* Time of last Rx */
|
||||
|
||||
unsigned short flags; /* interface flags (a la BSD) */
|
||||
unsigned short gflags;
|
||||
|
|
@ -328,15 +342,12 @@ struct net_device
|
|||
unsigned mtu; /* interface MTU value */
|
||||
unsigned short type; /* interface hardware type */
|
||||
unsigned short hard_header_len; /* hardware hdr length */
|
||||
void *priv; /* pointer to private data */
|
||||
|
||||
struct net_device *master; /* Pointer to master device of a group,
|
||||
* which this device is member of.
|
||||
*/
|
||||
|
||||
/* Interface address info. */
|
||||
unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */
|
||||
unsigned char dev_addr[MAX_ADDR_LEN]; /* hw address */
|
||||
unsigned char perm_addr[MAX_ADDR_LEN]; /* permanent hw address */
|
||||
unsigned char addr_len; /* hardware address length */
|
||||
unsigned short dev_id; /* for shared network cards */
|
||||
|
|
@ -346,8 +357,6 @@ struct net_device
|
|||
int promiscuity;
|
||||
int allmulti;
|
||||
|
||||
int watchdog_timeo;
|
||||
struct timer_list watchdog_timer;
|
||||
|
||||
/* Protocol specific pointers */
|
||||
|
||||
|
|
@ -358,32 +367,62 @@ struct net_device
|
|||
void *ec_ptr; /* Econet specific data */
|
||||
void *ax25_ptr; /* AX.25 specific data */
|
||||
|
||||
struct list_head poll_list; /* Link to poll list */
|
||||
/*
|
||||
* Cache line mostly used on receive path (including eth_type_trans())
|
||||
*/
|
||||
struct list_head poll_list ____cacheline_aligned_in_smp;
|
||||
/* Link to poll list */
|
||||
|
||||
int (*poll) (struct net_device *dev, int *quota);
|
||||
int quota;
|
||||
int weight;
|
||||
unsigned long last_rx; /* Time of last Rx */
|
||||
/* Interface address info used in eth_type_trans() */
|
||||
unsigned char dev_addr[MAX_ADDR_LEN]; /* hw address, (before bcast
|
||||
because most packets are unicast) */
|
||||
|
||||
unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */
|
||||
|
||||
/*
|
||||
* Cache line mostly used on queue transmit path (qdisc)
|
||||
*/
|
||||
/* device queue lock */
|
||||
spinlock_t queue_lock ____cacheline_aligned_in_smp;
|
||||
struct Qdisc *qdisc;
|
||||
struct Qdisc *qdisc_sleeping;
|
||||
struct Qdisc *qdisc_ingress;
|
||||
struct list_head qdisc_list;
|
||||
unsigned long tx_queue_len; /* Max frames per queue allowed */
|
||||
|
||||
/* ingress path synchronizer */
|
||||
spinlock_t ingress_lock;
|
||||
struct Qdisc *qdisc_ingress;
|
||||
|
||||
/*
|
||||
* One part is mostly used on xmit path (device)
|
||||
*/
|
||||
/* hard_start_xmit synchronizer */
|
||||
spinlock_t xmit_lock;
|
||||
spinlock_t xmit_lock ____cacheline_aligned_in_smp;
|
||||
/* cpu id of processor entered to hard_start_xmit or -1,
|
||||
if nobody entered there.
|
||||
*/
|
||||
int xmit_lock_owner;
|
||||
/* device queue lock */
|
||||
spinlock_t queue_lock;
|
||||
void *priv; /* pointer to private data */
|
||||
int (*hard_start_xmit) (struct sk_buff *skb,
|
||||
struct net_device *dev);
|
||||
/* These may be needed for future network-power-down code. */
|
||||
unsigned long trans_start; /* Time (in jiffies) of last Tx */
|
||||
|
||||
int watchdog_timeo; /* used by dev_watchdog() */
|
||||
struct timer_list watchdog_timer;
|
||||
|
||||
/*
|
||||
* refcnt is a very hot point, so align it on SMP
|
||||
*/
|
||||
/* Number of references to this device */
|
||||
atomic_t refcnt;
|
||||
atomic_t refcnt ____cacheline_aligned_in_smp;
|
||||
|
||||
/* delayed register/unregister */
|
||||
struct list_head todo_list;
|
||||
/* device name hash chain */
|
||||
struct hlist_node name_hlist;
|
||||
/* device index hash chain */
|
||||
struct hlist_node index_hlist;
|
||||
|
||||
|
|
@ -396,21 +435,6 @@ struct net_device
|
|||
NETREG_RELEASED, /* called free_netdev */
|
||||
} reg_state;
|
||||
|
||||
/* Net device features */
|
||||
unsigned long features;
|
||||
#define NETIF_F_SG 1 /* Scatter/gather IO. */
|
||||
#define NETIF_F_IP_CSUM 2 /* Can checksum only TCP/UDP over IPv4. */
|
||||
#define NETIF_F_NO_CSUM 4 /* Does not require checksum. F.e. loopack. */
|
||||
#define NETIF_F_HW_CSUM 8 /* Can checksum all the packets. */
|
||||
#define NETIF_F_HIGHDMA 32 /* Can DMA to high memory. */
|
||||
#define NETIF_F_FRAGLIST 64 /* Scatter/gather IO. */
|
||||
#define NETIF_F_HW_VLAN_TX 128 /* Transmit VLAN hw acceleration */
|
||||
#define NETIF_F_HW_VLAN_RX 256 /* Receive VLAN hw acceleration */
|
||||
#define NETIF_F_HW_VLAN_FILTER 512 /* Receive filtering on VLAN */
|
||||
#define NETIF_F_VLAN_CHALLENGED 1024 /* Device cannot handle VLAN packets */
|
||||
#define NETIF_F_TSO 2048 /* Can offload TCP/IP segmentation */
|
||||
#define NETIF_F_LLTX 4096 /* LockLess TX */
|
||||
|
||||
/* Called after device is detached from network. */
|
||||
void (*uninit)(struct net_device *dev);
|
||||
/* Called after last user reference disappears. */
|
||||
|
|
@ -419,10 +443,7 @@ struct net_device
|
|||
/* Pointers to interface service routines. */
|
||||
int (*open)(struct net_device *dev);
|
||||
int (*stop)(struct net_device *dev);
|
||||
int (*hard_start_xmit) (struct sk_buff *skb,
|
||||
struct net_device *dev);
|
||||
#define HAVE_NETDEV_POLL
|
||||
int (*poll) (struct net_device *dev, int *quota);
|
||||
int (*hard_header) (struct sk_buff *skb,
|
||||
struct net_device *dev,
|
||||
unsigned short type,
|
||||
|
|
|
|||
|
|
@ -5,16 +5,14 @@
|
|||
|
||||
/* This header used to share core functionality between the standalone
|
||||
NAT module, and the compatibility layer's use of NAT for masquerading. */
|
||||
extern int ip_nat_init(void);
|
||||
extern void ip_nat_cleanup(void);
|
||||
|
||||
extern unsigned int nat_packet(struct ip_conntrack *ct,
|
||||
extern unsigned int ip_nat_packet(struct ip_conntrack *ct,
|
||||
enum ip_conntrack_info conntrackinfo,
|
||||
unsigned int hooknum,
|
||||
struct sk_buff **pskb);
|
||||
|
||||
extern int icmp_reply_translation(struct sk_buff **pskb,
|
||||
struct ip_conntrack *ct,
|
||||
enum ip_nat_manip_type manip,
|
||||
enum ip_conntrack_dir dir);
|
||||
extern int ip_nat_icmp_reply_translation(struct sk_buff **pskb,
|
||||
struct ip_conntrack *ct,
|
||||
enum ip_nat_manip_type manip,
|
||||
enum ip_conntrack_dir dir);
|
||||
#endif /* _IP_NAT_CORE_H */
|
||||
|
|
|
|||
|
|
@ -185,6 +185,7 @@
|
|||
#define PCI_DEVICE_ID_LSI_61C102 0x0901
|
||||
#define PCI_DEVICE_ID_LSI_63C815 0x1000
|
||||
#define PCI_DEVICE_ID_LSI_SAS1064 0x0050
|
||||
#define PCI_DEVICE_ID_LSI_SAS1064R 0x0411
|
||||
#define PCI_DEVICE_ID_LSI_SAS1066 0x005E
|
||||
#define PCI_DEVICE_ID_LSI_SAS1068 0x0054
|
||||
#define PCI_DEVICE_ID_LSI_SAS1064A 0x005C
|
||||
|
|
@ -392,6 +393,7 @@
|
|||
#define PCI_DEVICE_ID_NS_87560_USB 0x0012
|
||||
#define PCI_DEVICE_ID_NS_83815 0x0020
|
||||
#define PCI_DEVICE_ID_NS_83820 0x0022
|
||||
#define PCI_DEVICE_ID_NS_SATURN 0x0035
|
||||
#define PCI_DEVICE_ID_NS_SCx200_BRIDGE 0x0500
|
||||
#define PCI_DEVICE_ID_NS_SCx200_SMI 0x0501
|
||||
#define PCI_DEVICE_ID_NS_SCx200_IDE 0x0502
|
||||
|
|
@ -559,6 +561,7 @@
|
|||
#define PCI_VENDOR_ID_DELL 0x1028
|
||||
#define PCI_DEVICE_ID_DELL_RACIII 0x0008
|
||||
#define PCI_DEVICE_ID_DELL_RAC4 0x0012
|
||||
#define PCI_DEVICE_ID_DELL_PERC5 0x0015
|
||||
|
||||
#define PCI_VENDOR_ID_MATROX 0x102B
|
||||
#define PCI_DEVICE_ID_MATROX_MGA_2 0x0518
|
||||
|
|
@ -769,6 +772,8 @@
|
|||
#define PCI_DEVICE_ID_TI_TVP4010 0x3d04
|
||||
#define PCI_DEVICE_ID_TI_TVP4020 0x3d07
|
||||
#define PCI_DEVICE_ID_TI_4450 0x8011
|
||||
#define PCI_DEVICE_ID_TI_XX21_XX11 0x8031
|
||||
#define PCI_DEVICE_ID_TI_X515 0x8036
|
||||
#define PCI_DEVICE_ID_TI_1130 0xac12
|
||||
#define PCI_DEVICE_ID_TI_1031 0xac13
|
||||
#define PCI_DEVICE_ID_TI_1131 0xac15
|
||||
|
|
@ -785,12 +790,17 @@
|
|||
#define PCI_DEVICE_ID_TI_4451 0xac42
|
||||
#define PCI_DEVICE_ID_TI_4510 0xac44
|
||||
#define PCI_DEVICE_ID_TI_4520 0xac46
|
||||
#define PCI_DEVICE_ID_TI_7510 0xac47
|
||||
#define PCI_DEVICE_ID_TI_7610 0xac48
|
||||
#define PCI_DEVICE_ID_TI_7410 0xac49
|
||||
#define PCI_DEVICE_ID_TI_1410 0xac50
|
||||
#define PCI_DEVICE_ID_TI_1420 0xac51
|
||||
#define PCI_DEVICE_ID_TI_1451A 0xac52
|
||||
#define PCI_DEVICE_ID_TI_1620 0xac54
|
||||
#define PCI_DEVICE_ID_TI_1520 0xac55
|
||||
#define PCI_DEVICE_ID_TI_1510 0xac56
|
||||
#define PCI_DEVICE_ID_TI_X620 0xac8d
|
||||
#define PCI_DEVICE_ID_TI_X420 0xac8e
|
||||
|
||||
#define PCI_VENDOR_ID_SONY 0x104d
|
||||
#define PCI_DEVICE_ID_SONY_CXD3222 0x8039
|
||||
|
|
@ -976,6 +986,7 @@
|
|||
#define PCI_DEVICE_ID_SUN_SABRE 0xa000
|
||||
#define PCI_DEVICE_ID_SUN_HUMMINGBIRD 0xa001
|
||||
#define PCI_DEVICE_ID_SUN_TOMATILLO 0xa801
|
||||
#define PCI_DEVICE_ID_SUN_CASSINI 0xabba
|
||||
|
||||
#define PCI_VENDOR_ID_CMD 0x1095
|
||||
#define PCI_DEVICE_ID_CMD_640 0x0640
|
||||
|
|
@ -2187,7 +2198,12 @@
|
|||
#define PCI_DEVICE_ID_ENE_1211 0x1211
|
||||
#define PCI_DEVICE_ID_ENE_1225 0x1225
|
||||
#define PCI_DEVICE_ID_ENE_1410 0x1410
|
||||
#define PCI_DEVICE_ID_ENE_710 0x1411
|
||||
#define PCI_DEVICE_ID_ENE_712 0x1412
|
||||
#define PCI_DEVICE_ID_ENE_1420 0x1420
|
||||
#define PCI_DEVICE_ID_ENE_720 0x1421
|
||||
#define PCI_DEVICE_ID_ENE_722 0x1422
|
||||
|
||||
#define PCI_VENDOR_ID_CHELSIO 0x1425
|
||||
|
||||
#define PCI_VENDOR_ID_MIPS 0x153f
|
||||
|
|
|
|||
|
|
@ -107,13 +107,25 @@ extern unsigned long nr_iowait(void);
|
|||
|
||||
#include <asm/processor.h>
|
||||
|
||||
/*
|
||||
* Task state bitmask. NOTE! These bits are also
|
||||
* encoded in fs/proc/array.c: get_task_state().
|
||||
*
|
||||
* We have two separate sets of flags: task->state
|
||||
* is about runnability, while task->exit_state are
|
||||
* about the task exiting. Confusing, but this way
|
||||
* modifying one set can't modify the other one by
|
||||
* mistake.
|
||||
*/
|
||||
#define TASK_RUNNING 0
|
||||
#define TASK_INTERRUPTIBLE 1
|
||||
#define TASK_UNINTERRUPTIBLE 2
|
||||
#define TASK_STOPPED 4
|
||||
#define TASK_TRACED 8
|
||||
/* in tsk->exit_state */
|
||||
#define EXIT_ZOMBIE 16
|
||||
#define EXIT_DEAD 32
|
||||
/* in tsk->state again */
|
||||
#define TASK_NONINTERACTIVE 64
|
||||
|
||||
#define __set_task_state(tsk, state_value) \
|
||||
|
|
|
|||
|
|
@ -155,8 +155,6 @@ struct skb_shared_info {
|
|||
#define SKB_DATAREF_SHIFT 16
|
||||
#define SKB_DATAREF_MASK ((1 << SKB_DATAREF_SHIFT) - 1)
|
||||
|
||||
extern struct timeval skb_tv_base;
|
||||
|
||||
struct skb_timeval {
|
||||
u32 off_sec;
|
||||
u32 off_usec;
|
||||
|
|
@ -175,7 +173,7 @@ enum {
|
|||
* @prev: Previous buffer in list
|
||||
* @list: List we are on
|
||||
* @sk: Socket we are owned by
|
||||
* @tstamp: Time we arrived stored as offset to skb_tv_base
|
||||
* @tstamp: Time we arrived
|
||||
* @dev: Device we arrived on/are leaving by
|
||||
* @input_dev: Device we arrived on
|
||||
* @h: Transport layer header
|
||||
|
|
@ -1255,10 +1253,6 @@ static inline void skb_get_timestamp(const struct sk_buff *skb, struct timeval *
|
|||
{
|
||||
stamp->tv_sec = skb->tstamp.off_sec;
|
||||
stamp->tv_usec = skb->tstamp.off_usec;
|
||||
if (skb->tstamp.off_sec) {
|
||||
stamp->tv_sec += skb_tv_base.tv_sec;
|
||||
stamp->tv_usec += skb_tv_base.tv_usec;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1272,8 +1266,8 @@ static inline void skb_get_timestamp(const struct sk_buff *skb, struct timeval *
|
|||
*/
|
||||
static inline void skb_set_timestamp(struct sk_buff *skb, const struct timeval *stamp)
|
||||
{
|
||||
skb->tstamp.off_sec = stamp->tv_sec - skb_tv_base.tv_sec;
|
||||
skb->tstamp.off_usec = stamp->tv_usec - skb_tv_base.tv_usec;
|
||||
skb->tstamp.off_sec = stamp->tv_sec;
|
||||
skb->tstamp.off_usec = stamp->tv_usec;
|
||||
}
|
||||
|
||||
extern void __net_timestamp(struct sk_buff *skb);
|
||||
|
|
|
|||
|
|
@ -202,7 +202,8 @@ enum
|
|||
NET_TR=14,
|
||||
NET_DECNET=15,
|
||||
NET_ECONET=16,
|
||||
NET_SCTP=17,
|
||||
NET_SCTP=17,
|
||||
NET_LLC=18,
|
||||
};
|
||||
|
||||
/* /proc/sys/kernel/random */
|
||||
|
|
@ -522,6 +523,29 @@ enum {
|
|||
NET_IPX_FORWARDING=2
|
||||
};
|
||||
|
||||
/* /proc/sys/net/llc */
|
||||
enum {
|
||||
NET_LLC2=1,
|
||||
NET_LLC_STATION=2,
|
||||
};
|
||||
|
||||
/* /proc/sys/net/llc/llc2 */
|
||||
enum {
|
||||
NET_LLC2_TIMEOUT=1,
|
||||
};
|
||||
|
||||
/* /proc/sys/net/llc/station */
|
||||
enum {
|
||||
NET_LLC_STATION_ACK_TIMEOUT=1,
|
||||
};
|
||||
|
||||
/* /proc/sys/net/llc/llc2/timeout */
|
||||
enum {
|
||||
NET_LLC2_ACK_TIMEOUT=1,
|
||||
NET_LLC2_P_TIMEOUT=2,
|
||||
NET_LLC2_REJ_TIMEOUT=3,
|
||||
NET_LLC2_BUSY_TIMEOUT=4,
|
||||
};
|
||||
|
||||
/* /proc/sys/net/appletalk */
|
||||
enum {
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ enum
|
|||
TCF_META_ID_SK_SNDBUF,
|
||||
TCF_META_ID_SK_ALLOCS,
|
||||
TCF_META_ID_SK_ROUTE_CAPS,
|
||||
TCF_META_ID_SK_HASHENT,
|
||||
TCF_META_ID_SK_HASH,
|
||||
TCF_META_ID_SK_LINGERTIME,
|
||||
TCF_META_ID_SK_ACK_BACKLOG,
|
||||
TCF_META_ID_SK_MAX_ACK_BACKLOG,
|
||||
|
|
|
|||
|
|
@ -26,19 +26,18 @@
|
|||
struct inet_hashinfo;
|
||||
|
||||
/* I have no idea if this is a good hash for v6 or not. -DaveM */
|
||||
static inline int inet6_ehashfn(const struct in6_addr *laddr, const u16 lport,
|
||||
const struct in6_addr *faddr, const u16 fport,
|
||||
const int ehash_size)
|
||||
static inline unsigned int inet6_ehashfn(const struct in6_addr *laddr, const u16 lport,
|
||||
const struct in6_addr *faddr, const u16 fport)
|
||||
{
|
||||
int hashent = (lport ^ fport);
|
||||
unsigned int hashent = (lport ^ fport);
|
||||
|
||||
hashent ^= (laddr->s6_addr32[3] ^ faddr->s6_addr32[3]);
|
||||
hashent ^= hashent >> 16;
|
||||
hashent ^= hashent >> 8;
|
||||
return (hashent & (ehash_size - 1));
|
||||
return hashent;
|
||||
}
|
||||
|
||||
static inline int inet6_sk_ehashfn(const struct sock *sk, const int ehash_size)
|
||||
static inline int inet6_sk_ehashfn(const struct sock *sk)
|
||||
{
|
||||
const struct inet_sock *inet = inet_sk(sk);
|
||||
const struct ipv6_pinfo *np = inet6_sk(sk);
|
||||
|
|
@ -46,7 +45,7 @@ static inline int inet6_sk_ehashfn(const struct sock *sk, const int ehash_size)
|
|||
const struct in6_addr *faddr = &np->daddr;
|
||||
const __u16 lport = inet->num;
|
||||
const __u16 fport = inet->dport;
|
||||
return inet6_ehashfn(laddr, lport, faddr, fport, ehash_size);
|
||||
return inet6_ehashfn(laddr, lport, faddr, fport);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -69,14 +68,14 @@ static inline struct sock *
|
|||
/* Optimize here for direct hit, only listening connections can
|
||||
* have wildcards anyways.
|
||||
*/
|
||||
const int hash = inet6_ehashfn(daddr, hnum, saddr, sport,
|
||||
hashinfo->ehash_size);
|
||||
struct inet_ehash_bucket *head = &hashinfo->ehash[hash];
|
||||
unsigned int hash = inet6_ehashfn(daddr, hnum, saddr, sport);
|
||||
struct inet_ehash_bucket *head = inet_ehash_bucket(hashinfo, hash);
|
||||
|
||||
prefetch(head->chain.first);
|
||||
read_lock(&head->lock);
|
||||
sk_for_each(sk, node, &head->chain) {
|
||||
/* For IPV6 do the cheaper port and family tests first. */
|
||||
if (INET6_MATCH(sk, saddr, daddr, ports, dif))
|
||||
if (INET6_MATCH(sk, hash, saddr, daddr, ports, dif))
|
||||
goto hit; /* You sunk my battleship! */
|
||||
}
|
||||
/* Must check for a TIME_WAIT'er before going to listener hash. */
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ struct inet_hashinfo {
|
|||
struct inet_bind_hashbucket *bhash;
|
||||
|
||||
int bhash_size;
|
||||
int ehash_size;
|
||||
unsigned int ehash_size;
|
||||
|
||||
/* All sockets in TCP_LISTEN state will be in here. This is the only
|
||||
* table where wildcard'd TCP sockets can exist. Hash function here
|
||||
|
|
@ -130,17 +130,16 @@ struct inet_hashinfo {
|
|||
int port_rover;
|
||||
};
|
||||
|
||||
static inline int inet_ehashfn(const __u32 laddr, const __u16 lport,
|
||||
const __u32 faddr, const __u16 fport,
|
||||
const int ehash_size)
|
||||
static inline unsigned int inet_ehashfn(const __u32 laddr, const __u16 lport,
|
||||
const __u32 faddr, const __u16 fport)
|
||||
{
|
||||
int h = (laddr ^ lport) ^ (faddr ^ fport);
|
||||
unsigned int h = (laddr ^ lport) ^ (faddr ^ fport);
|
||||
h ^= h >> 16;
|
||||
h ^= h >> 8;
|
||||
return h & (ehash_size - 1);
|
||||
return h;
|
||||
}
|
||||
|
||||
static inline int inet_sk_ehashfn(const struct sock *sk, const int ehash_size)
|
||||
static inline int inet_sk_ehashfn(const struct sock *sk)
|
||||
{
|
||||
const struct inet_sock *inet = inet_sk(sk);
|
||||
const __u32 laddr = inet->rcv_saddr;
|
||||
|
|
@ -148,7 +147,14 @@ static inline int inet_sk_ehashfn(const struct sock *sk, const int ehash_size)
|
|||
const __u32 faddr = inet->daddr;
|
||||
const __u16 fport = inet->dport;
|
||||
|
||||
return inet_ehashfn(laddr, lport, faddr, fport, ehash_size);
|
||||
return inet_ehashfn(laddr, lport, faddr, fport);
|
||||
}
|
||||
|
||||
static inline struct inet_ehash_bucket *inet_ehash_bucket(
|
||||
struct inet_hashinfo *hashinfo,
|
||||
unsigned int hash)
|
||||
{
|
||||
return &hashinfo->ehash[hash & (hashinfo->ehash_size - 1)];
|
||||
}
|
||||
|
||||
extern struct inet_bind_bucket *
|
||||
|
|
@ -235,9 +241,11 @@ static inline void __inet_hash(struct inet_hashinfo *hashinfo,
|
|||
lock = &hashinfo->lhash_lock;
|
||||
inet_listen_wlock(hashinfo);
|
||||
} else {
|
||||
sk->sk_hashent = inet_sk_ehashfn(sk, hashinfo->ehash_size);
|
||||
list = &hashinfo->ehash[sk->sk_hashent].chain;
|
||||
lock = &hashinfo->ehash[sk->sk_hashent].lock;
|
||||
struct inet_ehash_bucket *head;
|
||||
sk->sk_hash = inet_sk_ehashfn(sk);
|
||||
head = inet_ehash_bucket(hashinfo, sk->sk_hash);
|
||||
list = &head->chain;
|
||||
lock = &head->lock;
|
||||
write_lock(lock);
|
||||
}
|
||||
__sk_add_node(sk, list);
|
||||
|
|
@ -268,9 +276,8 @@ static inline void inet_unhash(struct inet_hashinfo *hashinfo, struct sock *sk)
|
|||
inet_listen_wlock(hashinfo);
|
||||
lock = &hashinfo->lhash_lock;
|
||||
} else {
|
||||
struct inet_ehash_bucket *head = &hashinfo->ehash[sk->sk_hashent];
|
||||
lock = &head->lock;
|
||||
write_lock_bh(&head->lock);
|
||||
lock = &inet_ehash_bucket(hashinfo, sk->sk_hash)->lock;
|
||||
write_lock_bh(lock);
|
||||
}
|
||||
|
||||
if (__sk_del_node_init(sk))
|
||||
|
|
@ -337,23 +344,27 @@ sherry_cache:
|
|||
#define INET_ADDR_COOKIE(__name, __saddr, __daddr) \
|
||||
const __u64 __name = (((__u64)(__daddr)) << 32) | ((__u64)(__saddr));
|
||||
#endif /* __BIG_ENDIAN */
|
||||
#define INET_MATCH(__sk, __cookie, __saddr, __daddr, __ports, __dif)\
|
||||
(((*((__u64 *)&(inet_sk(__sk)->daddr))) == (__cookie)) && \
|
||||
#define INET_MATCH(__sk, __hash, __cookie, __saddr, __daddr, __ports, __dif)\
|
||||
(((__sk)->sk_hash == (__hash)) && \
|
||||
((*((__u64 *)&(inet_sk(__sk)->daddr))) == (__cookie)) && \
|
||||
((*((__u32 *)&(inet_sk(__sk)->dport))) == (__ports)) && \
|
||||
(!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
|
||||
#define INET_TW_MATCH(__sk, __cookie, __saddr, __daddr, __ports, __dif)\
|
||||
(((*((__u64 *)&(inet_twsk(__sk)->tw_daddr))) == (__cookie)) && \
|
||||
#define INET_TW_MATCH(__sk, __hash, __cookie, __saddr, __daddr, __ports, __dif)\
|
||||
(((__sk)->sk_hash == (__hash)) && \
|
||||
((*((__u64 *)&(inet_twsk(__sk)->tw_daddr))) == (__cookie)) && \
|
||||
((*((__u32 *)&(inet_twsk(__sk)->tw_dport))) == (__ports)) && \
|
||||
(!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
|
||||
#else /* 32-bit arch */
|
||||
#define INET_ADDR_COOKIE(__name, __saddr, __daddr)
|
||||
#define INET_MATCH(__sk, __cookie, __saddr, __daddr, __ports, __dif) \
|
||||
((inet_sk(__sk)->daddr == (__saddr)) && \
|
||||
#define INET_MATCH(__sk, __hash, __cookie, __saddr, __daddr, __ports, __dif) \
|
||||
(((__sk)->sk_hash == (__hash)) && \
|
||||
(inet_sk(__sk)->daddr == (__saddr)) && \
|
||||
(inet_sk(__sk)->rcv_saddr == (__daddr)) && \
|
||||
((*((__u32 *)&(inet_sk(__sk)->dport))) == (__ports)) && \
|
||||
(!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
|
||||
#define INET_TW_MATCH(__sk, __cookie, __saddr, __daddr, __ports, __dif) \
|
||||
((inet_twsk(__sk)->tw_daddr == (__saddr)) && \
|
||||
#define INET_TW_MATCH(__sk, __hash,__cookie, __saddr, __daddr, __ports, __dif) \
|
||||
(((__sk)->sk_hash == (__hash)) && \
|
||||
(inet_twsk(__sk)->tw_daddr == (__saddr)) && \
|
||||
(inet_twsk(__sk)->tw_rcv_saddr == (__daddr)) && \
|
||||
((*((__u32 *)&(inet_twsk(__sk)->tw_dport))) == (__ports)) && \
|
||||
(!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
|
||||
|
|
@ -378,18 +389,19 @@ static inline struct sock *
|
|||
/* Optimize here for direct hit, only listening connections can
|
||||
* have wildcards anyways.
|
||||
*/
|
||||
const int hash = inet_ehashfn(daddr, hnum, saddr, sport, hashinfo->ehash_size);
|
||||
struct inet_ehash_bucket *head = &hashinfo->ehash[hash];
|
||||
unsigned int hash = inet_ehashfn(daddr, hnum, saddr, sport);
|
||||
struct inet_ehash_bucket *head = inet_ehash_bucket(hashinfo, hash);
|
||||
|
||||
prefetch(head->chain.first);
|
||||
read_lock(&head->lock);
|
||||
sk_for_each(sk, node, &head->chain) {
|
||||
if (INET_MATCH(sk, acookie, saddr, daddr, ports, dif))
|
||||
if (INET_MATCH(sk, hash, acookie, saddr, daddr, ports, dif))
|
||||
goto hit; /* You sunk my battleship! */
|
||||
}
|
||||
|
||||
/* Must check for a TIME_WAIT'er before going to listener hash. */
|
||||
sk_for_each(sk, node, &(head + hashinfo->ehash_size)->chain) {
|
||||
if (INET_TW_MATCH(sk, acookie, saddr, daddr, ports, dif))
|
||||
if (INET_TW_MATCH(sk, hash, acookie, saddr, daddr, ports, dif))
|
||||
goto hit;
|
||||
}
|
||||
sk = NULL;
|
||||
|
|
|
|||
|
|
@ -112,6 +112,7 @@ struct inet_timewait_sock {
|
|||
#define tw_node __tw_common.skc_node
|
||||
#define tw_bind_node __tw_common.skc_bind_node
|
||||
#define tw_refcnt __tw_common.skc_refcnt
|
||||
#define tw_hash __tw_common.skc_hash
|
||||
#define tw_prot __tw_common.skc_prot
|
||||
volatile unsigned char tw_substate;
|
||||
/* 3 bits hole, try to pack */
|
||||
|
|
@ -126,7 +127,6 @@ struct inet_timewait_sock {
|
|||
/* And these are ours. */
|
||||
__u8 tw_ipv6only:1;
|
||||
/* 31 bits hole, try to pack */
|
||||
int tw_hashent;
|
||||
int tw_timeout;
|
||||
unsigned long tw_ttd;
|
||||
struct inet_bind_bucket *tw_tb;
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@
|
|||
#include <linux/list.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
|
||||
struct net_device;
|
||||
struct packet_type;
|
||||
struct sk_buff;
|
||||
|
|
@ -44,6 +46,7 @@ struct llc_sap {
|
|||
unsigned char state;
|
||||
unsigned char p_bit;
|
||||
unsigned char f_bit;
|
||||
atomic_t refcnt;
|
||||
int (*rcv_func)(struct sk_buff *skb,
|
||||
struct net_device *dev,
|
||||
struct packet_type *pt,
|
||||
|
|
@ -81,13 +84,27 @@ extern struct llc_sap *llc_sap_open(unsigned char lsap,
|
|||
struct net_device *dev,
|
||||
struct packet_type *pt,
|
||||
struct net_device *orig_dev));
|
||||
static inline void llc_sap_hold(struct llc_sap *sap)
|
||||
{
|
||||
atomic_inc(&sap->refcnt);
|
||||
}
|
||||
|
||||
extern void llc_sap_close(struct llc_sap *sap);
|
||||
|
||||
static inline void llc_sap_put(struct llc_sap *sap)
|
||||
{
|
||||
if (atomic_dec_and_test(&sap->refcnt))
|
||||
llc_sap_close(sap);
|
||||
}
|
||||
|
||||
extern struct llc_sap *llc_sap_find(unsigned char sap_value);
|
||||
|
||||
extern int llc_build_and_send_ui_pkt(struct llc_sap *sap, struct sk_buff *skb,
|
||||
unsigned char *dmac, unsigned char dsap);
|
||||
|
||||
extern void llc_sap_handler(struct llc_sap *sap, struct sk_buff *skb);
|
||||
extern void llc_conn_handler(struct llc_sap *sap, struct sk_buff *skb);
|
||||
|
||||
extern int llc_station_init(void);
|
||||
extern void llc_station_exit(void);
|
||||
|
||||
|
|
@ -98,4 +115,17 @@ extern void llc_proc_exit(void);
|
|||
#define llc_proc_init() (0)
|
||||
#define llc_proc_exit() do { } while(0)
|
||||
#endif /* CONFIG_PROC_FS */
|
||||
#ifdef CONFIG_SYSCTL
|
||||
extern int llc_sysctl_init(void);
|
||||
extern void llc_sysctl_exit(void);
|
||||
|
||||
extern int sysctl_llc2_ack_timeout;
|
||||
extern int sysctl_llc2_busy_timeout;
|
||||
extern int sysctl_llc2_p_timeout;
|
||||
extern int sysctl_llc2_rej_timeout;
|
||||
extern int sysctl_llc_station_ack_timeout;
|
||||
#else
|
||||
#define llc_sysctl_init() (0)
|
||||
#define llc_sysctl_exit() do { } while(0)
|
||||
#endif /* CONFIG_SYSCTL */
|
||||
#endif /* LLC_H */
|
||||
|
|
|
|||
|
|
@ -19,14 +19,14 @@
|
|||
#define LLC_EVENT 1
|
||||
#define LLC_PACKET 2
|
||||
|
||||
#define LLC_P_TIME 2
|
||||
#define LLC_ACK_TIME 1
|
||||
#define LLC_REJ_TIME 3
|
||||
#define LLC_BUSY_TIME 3
|
||||
#define LLC2_P_TIME 2
|
||||
#define LLC2_ACK_TIME 1
|
||||
#define LLC2_REJ_TIME 3
|
||||
#define LLC2_BUSY_TIME 3
|
||||
|
||||
struct llc_timer {
|
||||
struct timer_list timer;
|
||||
u16 expire; /* timer expire time */
|
||||
unsigned long expire; /* timer expire time */
|
||||
};
|
||||
|
||||
struct llc_sock {
|
||||
|
|
@ -38,6 +38,7 @@ struct llc_sock {
|
|||
struct llc_addr laddr; /* lsap/mac pair */
|
||||
struct llc_addr daddr; /* dsap/mac pair */
|
||||
struct net_device *dev; /* device to send to remote */
|
||||
u32 copied_seq; /* head of yet unread data */
|
||||
u8 retry_count; /* number of retries */
|
||||
u8 ack_must_be_send;
|
||||
u8 first_pdu_Ns;
|
||||
|
|
@ -92,7 +93,8 @@ static __inline__ char llc_backlog_type(struct sk_buff *skb)
|
|||
return skb->cb[sizeof(skb->cb) - 1];
|
||||
}
|
||||
|
||||
extern struct sock *llc_sk_alloc(int family, int priority, struct proto *prot);
|
||||
extern struct sock *llc_sk_alloc(int family, unsigned int __nocast priority,
|
||||
struct proto *prot);
|
||||
extern void llc_sk_free(struct sock *sk);
|
||||
|
||||
extern void llc_sk_reset(struct sock *sk);
|
||||
|
|
@ -115,5 +117,4 @@ extern void llc_sap_remove_socket(struct llc_sap *sap, struct sock *sk);
|
|||
|
||||
extern u8 llc_data_accept_state(u8 state);
|
||||
extern void llc_build_offset_table(void);
|
||||
extern int llc_release_sockets(struct llc_sap *sap);
|
||||
#endif /* LLC_CONN_H */
|
||||
|
|
|
|||
|
|
@ -12,11 +12,15 @@
|
|||
* See the GNU General Public License for more details.
|
||||
*/
|
||||
struct llc_sap;
|
||||
struct net_device;
|
||||
struct sk_buff;
|
||||
struct sock;
|
||||
|
||||
extern void llc_sap_rtn_pdu(struct llc_sap *sap, struct sk_buff *skb);
|
||||
extern void llc_save_primitive(struct sk_buff* skb, unsigned char prim);
|
||||
extern struct sk_buff *llc_alloc_frame(void);
|
||||
extern void llc_save_primitive(struct sock *sk, struct sk_buff* skb,
|
||||
unsigned char prim);
|
||||
extern struct sk_buff *llc_alloc_frame(struct sock *sk,
|
||||
struct net_device *dev);
|
||||
|
||||
extern void llc_build_and_send_test_pkt(struct llc_sap *sap,
|
||||
struct sk_buff *skb,
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ struct proto;
|
|||
* @skc_node: main hash linkage for various protocol lookup tables
|
||||
* @skc_bind_node: bind hash linkage for various protocol lookup tables
|
||||
* @skc_refcnt: reference count
|
||||
* @skc_hash: hash value used with various protocol lookup tables
|
||||
* @skc_prot: protocol handlers inside a network family
|
||||
*
|
||||
* This is the minimal network layer representation of sockets, the header
|
||||
|
|
@ -112,6 +113,7 @@ struct sock_common {
|
|||
struct hlist_node skc_node;
|
||||
struct hlist_node skc_bind_node;
|
||||
atomic_t skc_refcnt;
|
||||
unsigned int skc_hash;
|
||||
struct proto *skc_prot;
|
||||
};
|
||||
|
||||
|
|
@ -139,7 +141,6 @@ struct sock_common {
|
|||
* @sk_no_check: %SO_NO_CHECK setting, wether or not checkup packets
|
||||
* @sk_route_caps: route capabilities (e.g. %NETIF_F_TSO)
|
||||
* @sk_lingertime: %SO_LINGER l_linger setting
|
||||
* @sk_hashent: hash entry in several tables (e.g. inet_hashinfo.ehash)
|
||||
* @sk_backlog: always used with the per-socket spinlock held
|
||||
* @sk_callback_lock: used with the callbacks in the end of this struct
|
||||
* @sk_error_queue: rarely used
|
||||
|
|
@ -186,6 +187,7 @@ struct sock {
|
|||
#define sk_node __sk_common.skc_node
|
||||
#define sk_bind_node __sk_common.skc_bind_node
|
||||
#define sk_refcnt __sk_common.skc_refcnt
|
||||
#define sk_hash __sk_common.skc_hash
|
||||
#define sk_prot __sk_common.skc_prot
|
||||
unsigned char sk_shutdown : 2,
|
||||
sk_no_check : 2,
|
||||
|
|
@ -208,7 +210,6 @@ struct sock {
|
|||
unsigned int sk_allocation;
|
||||
int sk_sndbuf;
|
||||
int sk_route_caps;
|
||||
int sk_hashent;
|
||||
unsigned long sk_flags;
|
||||
unsigned long sk_lingertime;
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -21,6 +21,9 @@
|
|||
#include <pcmcia/cs_types.h>
|
||||
#include <pcmcia/cs.h>
|
||||
#include <pcmcia/bulkmem.h>
|
||||
#ifdef CONFIG_CARDBUS
|
||||
#include <linux/pci.h>
|
||||
#endif
|
||||
|
||||
/* Definitions for card status flags for GetStatus */
|
||||
#define SS_WRPROT 0x0001
|
||||
|
|
@ -233,7 +236,11 @@ struct pcmcia_socket {
|
|||
|
||||
/* so is power hook */
|
||||
int (*power_hook)(struct pcmcia_socket *sock, int operation);
|
||||
|
||||
#ifdef CONFIG_CARDBUS
|
||||
/* allows tuning the CB bridge before loading driver for the CB card */
|
||||
void (*tune_bridge)(struct pcmcia_socket *sock, struct pci_bus *bus);
|
||||
#endif
|
||||
|
||||
/* state thread */
|
||||
struct semaphore skt_sem; /* protects socket h/w state */
|
||||
|
||||
|
|
|
|||
|
|
@ -665,7 +665,6 @@ struct ib_ucontext {
|
|||
struct list_head qp_list;
|
||||
struct list_head srq_list;
|
||||
struct list_head ah_list;
|
||||
spinlock_t lock;
|
||||
};
|
||||
|
||||
struct ib_uobject {
|
||||
|
|
|
|||
|
|
@ -163,6 +163,7 @@ struct scsi_target {
|
|||
unsigned int id; /* target id ... replace
|
||||
* scsi_device.id eventually */
|
||||
unsigned long create:1; /* signal that it needs to be added */
|
||||
char scsi_level;
|
||||
void *hostdata; /* available to low-level driver */
|
||||
unsigned long starget_data[0]; /* for the transport */
|
||||
/* starget_data must be the last element!!!! */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue