mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 05:29:04 -04:00
Merge /home/trondmy/scm/kernel/git/torvalds/linux-2.6
This commit is contained in:
commit
cff6bf9709
880 changed files with 28899 additions and 8913 deletions
|
|
@ -17,9 +17,11 @@
|
|||
static void arch_idle(void)
|
||||
{
|
||||
CPU_REG (PMU_BASE, PMU_MODE) = PMU_MODE_IDLE;
|
||||
__asm__ __volatile__(
|
||||
"mov r0, r0\n\t"
|
||||
"mov r0, r0");
|
||||
nop();
|
||||
nop();
|
||||
CPU_REG (PMU_BASE, PMU_MODE) = PMU_MODE_RUN;
|
||||
nop();
|
||||
nop();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -76,6 +76,7 @@
|
|||
#define GPIO_PIN_MASK 0x1f
|
||||
#define GPIO_PORT_MASK (0x3 << 5)
|
||||
|
||||
#define GPIO_PORT_SHIFT 5
|
||||
#define GPIO_PORTA (0<<5)
|
||||
#define GPIO_PORTB (1<<5)
|
||||
#define GPIO_PORTC (2<<5)
|
||||
|
|
@ -88,24 +89,37 @@
|
|||
#define GPIO_PF (0<<9)
|
||||
#define GPIO_AF (1<<9)
|
||||
|
||||
#define GPIO_OCR_SHIFT 10
|
||||
#define GPIO_OCR_MASK (3<<10)
|
||||
#define GPIO_AIN (0<<10)
|
||||
#define GPIO_BIN (1<<10)
|
||||
#define GPIO_CIN (2<<10)
|
||||
#define GPIO_GPIO (3<<10)
|
||||
#define GPIO_DR (3<<10)
|
||||
|
||||
#define GPIO_AOUT (1<<12)
|
||||
#define GPIO_BOUT (1<<13)
|
||||
#define GPIO_AOUT_SHIFT 12
|
||||
#define GPIO_AOUT_MASK (3<<12)
|
||||
#define GPIO_AOUT (0<<12)
|
||||
#define GPIO_AOUT_ISR (1<<12)
|
||||
#define GPIO_AOUT_0 (2<<12)
|
||||
#define GPIO_AOUT_1 (3<<12)
|
||||
|
||||
#define GPIO_BOUT_SHIFT 14
|
||||
#define GPIO_BOUT_MASK (3<<14)
|
||||
#define GPIO_BOUT (0<<14)
|
||||
#define GPIO_BOUT_ISR (1<<14)
|
||||
#define GPIO_BOUT_0 (2<<14)
|
||||
#define GPIO_BOUT_1 (3<<14)
|
||||
|
||||
#define GPIO_GIUS (1<<16)
|
||||
|
||||
/* assignements for GPIO alternate/primary functions */
|
||||
|
||||
/* FIXME: This list is not completed. The correct directions are
|
||||
* missing on some (many) pins
|
||||
*/
|
||||
#define PA0_PF_A24 ( GPIO_PORTA | GPIO_PF | 0 )
|
||||
#define PA0_AIN_SPI2_CLK ( GPIO_PORTA | GPIO_OUT | GPIO_AIN | 0 )
|
||||
#define PA0_AIN_SPI2_CLK ( GPIO_GIUS | GPIO_PORTA | GPIO_OUT | 0 )
|
||||
#define PA0_AF_ETMTRACESYNC ( GPIO_PORTA | GPIO_AF | 0 )
|
||||
#define PA1_AOUT_SPI2_RXD ( GPIO_PORTA | GPIO_IN | GPIO_AOUT | 1 )
|
||||
#define PA1_AOUT_SPI2_RXD ( GPIO_GIUS | GPIO_PORTA | GPIO_IN | 1 )
|
||||
#define PA1_PF_TIN ( GPIO_PORTA | GPIO_PF | 1 )
|
||||
#define PA2_PF_PWM0 ( GPIO_PORTA | GPIO_OUT | GPIO_PF | 2 )
|
||||
#define PA3_PF_CSI_MCLK ( GPIO_PORTA | GPIO_PF | 3 )
|
||||
|
|
@ -123,7 +137,7 @@
|
|||
#define PA15_PF_I2C_SDA ( GPIO_PORTA | GPIO_OUT | GPIO_PF | 15 )
|
||||
#define PA16_PF_I2C_SCL ( GPIO_PORTA | GPIO_OUT | GPIO_PF | 16 )
|
||||
#define PA17_AF_ETMTRACEPKT4 ( GPIO_PORTA | GPIO_AF | 17 )
|
||||
#define PA17_AIN_SPI2_SS ( GPIO_PORTA | GPIO_AIN | 17 )
|
||||
#define PA17_AIN_SPI2_SS ( GPIO_GIUS | GPIO_PORTA | GPIO_OUT | 17 )
|
||||
#define PA18_AF_ETMTRACEPKT5 ( GPIO_PORTA | GPIO_AF | 18 )
|
||||
#define PA19_AF_ETMTRACEPKT6 ( GPIO_PORTA | GPIO_AF | 19 )
|
||||
#define PA20_AF_ETMTRACEPKT7 ( GPIO_PORTA | GPIO_AF | 20 )
|
||||
|
|
@ -191,19 +205,27 @@
|
|||
#define PC15_PF_SPI1_SS ( GPIO_PORTC | GPIO_PF | 15 )
|
||||
#define PC16_PF_SPI1_MISO ( GPIO_PORTC | GPIO_PF | 16 )
|
||||
#define PC17_PF_SPI1_MOSI ( GPIO_PORTC | GPIO_PF | 17 )
|
||||
#define PC24_BIN_UART3_RI ( GPIO_GIUS | GPIO_PORTC | GPIO_OUT | GPIO_BIN | 24 )
|
||||
#define PC25_BIN_UART3_DSR ( GPIO_GIUS | GPIO_PORTC | GPIO_OUT | GPIO_BIN | 25 )
|
||||
#define PC26_AOUT_UART3_DTR ( GPIO_GIUS | GPIO_PORTC | GPIO_IN | 26 )
|
||||
#define PC27_BIN_UART3_DCD ( GPIO_GIUS | GPIO_PORTC | GPIO_OUT | GPIO_BIN | 27 )
|
||||
#define PC28_BIN_UART3_CTS ( GPIO_GIUS | GPIO_PORTC | GPIO_OUT | GPIO_BIN | 28 )
|
||||
#define PC29_AOUT_UART3_RTS ( GPIO_GIUS | GPIO_PORTC | GPIO_IN | 29 )
|
||||
#define PC30_BIN_UART3_TX ( GPIO_GIUS | GPIO_PORTC | GPIO_BIN | 30 )
|
||||
#define PC31_AOUT_UART3_RX ( GPIO_GIUS | GPIO_PORTC | GPIO_IN | 31)
|
||||
#define PD6_PF_LSCLK ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 6 )
|
||||
#define PD7_PF_REV ( GPIO_PORTD | GPIO_PF | 7 )
|
||||
#define PD7_AF_UART2_DTR ( GPIO_PORTD | GPIO_IN | GPIO_AF | 7 )
|
||||
#define PD7_AIN_SPI2_SCLK ( GPIO_PORTD | GPIO_AIN | 7 )
|
||||
#define PD7_AF_UART2_DTR ( GPIO_GIUS | GPIO_PORTD | GPIO_IN | GPIO_AF | 7 )
|
||||
#define PD7_AIN_SPI2_SCLK ( GPIO_GIUS | GPIO_PORTD | GPIO_AIN | 7 )
|
||||
#define PD8_PF_CLS ( GPIO_PORTD | GPIO_PF | 8 )
|
||||
#define PD8_AF_UART2_DCD ( GPIO_PORTD | GPIO_OUT | GPIO_AF | 8 )
|
||||
#define PD8_AIN_SPI2_SS ( GPIO_PORTD | GPIO_AIN | 8 )
|
||||
#define PD8_AIN_SPI2_SS ( GPIO_GIUS | GPIO_PORTD | GPIO_AIN | 8 )
|
||||
#define PD9_PF_PS ( GPIO_PORTD | GPIO_PF | 9 )
|
||||
#define PD9_AF_UART2_RI ( GPIO_PORTD | GPIO_OUT | GPIO_AF | 9 )
|
||||
#define PD9_AOUT_SPI2_RXD ( GPIO_PORTD | GPIO_IN | GPIO_AOUT | 9 )
|
||||
#define PD9_AOUT_SPI2_RXD ( GPIO_GIUS | GPIO_PORTD | GPIO_IN | 9 )
|
||||
#define PD10_PF_SPL_SPR ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 10 )
|
||||
#define PD10_AF_UART2_DSR ( GPIO_PORTD | GPIO_OUT | GPIO_AF | 10 )
|
||||
#define PD10_AIN_SPI2_TXD ( GPIO_PORTD | GPIO_OUT | GPIO_AIN | 10 )
|
||||
#define PD10_AIN_SPI2_TXD ( GPIO_GIUS | GPIO_PORTD | GPIO_OUT | 10 )
|
||||
#define PD11_PF_CONTRAST ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 11 )
|
||||
#define PD12_PF_ACD_OE ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 12 )
|
||||
#define PD13_PF_LP_HSYNC ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 13 )
|
||||
|
|
@ -225,7 +247,7 @@
|
|||
#define PD29_PF_LD14 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 29 )
|
||||
#define PD30_PF_LD15 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 30 )
|
||||
#define PD31_PF_TMR2OUT ( GPIO_PORTD | GPIO_PF | 31 )
|
||||
#define PD31_BIN_SPI2_TXD ( GPIO_PORTD | GPIO_BIN | 31 )
|
||||
#define PD31_BIN_SPI2_TXD ( GPIO_GIUS | GPIO_PORTD | GPIO_BIN | 31 )
|
||||
|
||||
/*
|
||||
* PWM controller
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ extern struct pci_bus *ixp4xx_scan_bus(int nr, struct pci_sys_data *sys);
|
|||
|
||||
static inline void gpio_line_config(u8 line, u32 direction)
|
||||
{
|
||||
if (direction == IXP4XX_GPIO_OUT)
|
||||
if (direction == IXP4XX_GPIO_IN)
|
||||
*IXP4XX_GPIO_GPOER |= (1 << line);
|
||||
else
|
||||
*IXP4XX_GPIO_GPOER &= ~(1 << line);
|
||||
|
|
|
|||
|
|
@ -126,8 +126,8 @@
|
|||
#define DRCMR12 __REG(0x40000130) /* Request to Channel Map Register for AC97 audio transmit Request */
|
||||
#define DRCMR13 __REG(0x40000134) /* Request to Channel Map Register for SSP receive Request */
|
||||
#define DRCMR14 __REG(0x40000138) /* Request to Channel Map Register for SSP transmit Request */
|
||||
#define DRCMR15 __REG(0x4000013c) /* Reserved */
|
||||
#define DRCMR16 __REG(0x40000140) /* Reserved */
|
||||
#define DRCMR15 __REG(0x4000013c) /* Request to Channel Map Register for SSP2 receive Request */
|
||||
#define DRCMR16 __REG(0x40000140) /* Request to Channel Map Register for SSP2 transmit Request */
|
||||
#define DRCMR17 __REG(0x40000144) /* Request to Channel Map Register for ICP receive Request */
|
||||
#define DRCMR18 __REG(0x40000148) /* Request to Channel Map Register for ICP transmit Request */
|
||||
#define DRCMR19 __REG(0x4000014c) /* Request to Channel Map Register for STUART receive Request */
|
||||
|
|
@ -151,7 +151,8 @@
|
|||
#define DRCMR37 __REG(0x40000194) /* Request to Channel Map Register for USB endpoint 13 Request */
|
||||
#define DRCMR38 __REG(0x40000198) /* Request to Channel Map Register for USB endpoint 14 Request */
|
||||
#define DRCMR39 __REG(0x4000019C) /* Reserved */
|
||||
|
||||
#define DRCMR66 __REG(0x40001108) /* Request to Channel Map Register for SSP3 receive Request */
|
||||
#define DRCMR67 __REG(0x4000110C) /* Request to Channel Map Register for SSP3 transmit Request */
|
||||
#define DRCMR68 __REG(0x40001110) /* Request to Channel Map Register for Camera FIFO 0 Request */
|
||||
#define DRCMR69 __REG(0x40001114) /* Request to Channel Map Register for Camera FIFO 1 Request */
|
||||
#define DRCMR70 __REG(0x40001118) /* Request to Channel Map Register for Camera FIFO 2 Request */
|
||||
|
|
|
|||
|
|
@ -66,4 +66,5 @@ struct pxafb_mach_info {
|
|||
|
||||
};
|
||||
void set_pxa_fb_info(struct pxafb_mach_info *hard_pxa_fb_info);
|
||||
void set_pxa_fb_parent(struct device *parent_dev);
|
||||
unsigned long pxafb_get_hsync_time(struct device *dev);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -92,6 +92,13 @@ extern unsigned int s3c2410_gpio_getpin(unsigned int pin);
|
|||
|
||||
extern unsigned int s3c2410_modify_misccr(unsigned int clr, unsigned int chg);
|
||||
|
||||
#ifdef CONFIG_CPU_S3C2440
|
||||
|
||||
extern int s3c2440_set_dsc(unsigned int pin, unsigned int value);
|
||||
|
||||
#endif /* CONFIG_CPU_S3C2440 */
|
||||
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#include <asm/sizes.h>
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
* 06-Dec-1997 RMK Created.
|
||||
* 02-Sep-2003 BJD Modified for S3C2410
|
||||
* 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA
|
||||
*
|
||||
* 13-Oct-2005 BJD Fixed problems with LDRH/STRH offset range
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARM_ARCH_IO_H
|
||||
|
|
@ -97,7 +97,7 @@ DECLARE_IO(int,l,"")
|
|||
else \
|
||||
__asm__ __volatile__( \
|
||||
"strb %0, [%1, #0] @ outbc" \
|
||||
: : "r" (value), "r" ((port))); \
|
||||
: : "r" (value), "r" ((port))); \
|
||||
})
|
||||
|
||||
#define __inbc(port) \
|
||||
|
|
@ -110,35 +110,61 @@ DECLARE_IO(int,l,"")
|
|||
else \
|
||||
__asm__ __volatile__( \
|
||||
"ldrb %0, [%1, #0] @ inbc" \
|
||||
: "=r" (result) : "r" ((port))); \
|
||||
: "=r" (result) : "r" ((port))); \
|
||||
result; \
|
||||
})
|
||||
|
||||
#define __outwc(value,port) \
|
||||
({ \
|
||||
unsigned long v = value; \
|
||||
if (__PORT_PCIO((port))) \
|
||||
__asm__ __volatile__( \
|
||||
"strh %0, [%1, %2] @ outwc" \
|
||||
: : "r" (v), "r" (PCIO_BASE), "Jr" ((port))); \
|
||||
else \
|
||||
if (__PORT_PCIO((port))) { \
|
||||
if ((port) < 256 && (port) > -256) \
|
||||
__asm__ __volatile__( \
|
||||
"strh %0, [%1, %2] @ outwc" \
|
||||
: : "r" (v), "r" (PCIO_BASE), "Jr" ((port))); \
|
||||
else if ((port) > 0) \
|
||||
__asm__ __volatile__( \
|
||||
"strh %0, [%1, %2] @ outwc" \
|
||||
: : "r" (v), \
|
||||
"r" (PCIO_BASE + ((port) & ~0xff)), \
|
||||
"Jr" (((port) & 0xff))); \
|
||||
else \
|
||||
__asm__ __volatile__( \
|
||||
"strh %0, [%1, #0] @ outwc" \
|
||||
: : "r" (v), \
|
||||
"r" (PCIO_BASE + (port))); \
|
||||
} else \
|
||||
__asm__ __volatile__( \
|
||||
"strh %0, [%1, #0] @ outwc" \
|
||||
: : "r" (v), "r" ((port))); \
|
||||
: : "r" (v), "r" ((port))); \
|
||||
})
|
||||
|
||||
#define __inwc(port) \
|
||||
({ \
|
||||
unsigned short result; \
|
||||
if (__PORT_PCIO((port))) \
|
||||
__asm__ __volatile__( \
|
||||
"ldrh %0, [%1, %2] @ inwc" \
|
||||
: "=r" (result) : "r" (PCIO_BASE), "Jr" ((port))); \
|
||||
else \
|
||||
if (__PORT_PCIO((port))) { \
|
||||
if ((port) < 256 && (port) > -256 ) \
|
||||
__asm__ __volatile__( \
|
||||
"ldrh %0, [%1, %2] @ inwc" \
|
||||
: "=r" (result) \
|
||||
: "r" (PCIO_BASE), \
|
||||
"Jr" ((port))); \
|
||||
else if ((port) > 0) \
|
||||
__asm__ __volatile__( \
|
||||
"ldrh %0, [%1, %2] @ inwc" \
|
||||
: "=r" (result) \
|
||||
: "r" (PCIO_BASE + ((port) & ~0xff)), \
|
||||
"Jr" (((port) & 0xff))); \
|
||||
else \
|
||||
__asm__ __volatile__( \
|
||||
"ldrh %0, [%1, #0] @ inwc" \
|
||||
: "=r" (result) \
|
||||
: "r" (PCIO_BASE + ((port)))); \
|
||||
} else \
|
||||
__asm__ __volatile__( \
|
||||
"ldrh %0, [%1, #0] @ inwc" \
|
||||
: "=r" (result) : "r" ((port))); \
|
||||
result; \
|
||||
: "=r" (result) : "r" ((port))); \
|
||||
result; \
|
||||
})
|
||||
|
||||
#define __outlc(value,port) \
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@
|
|||
struct scoop_config {
|
||||
unsigned short io_out;
|
||||
unsigned short io_dir;
|
||||
unsigned short suspend_clr;
|
||||
unsigned short suspend_set;
|
||||
};
|
||||
|
||||
/* Structure for linking scoop devices to PCMCIA sockets */
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ dma_set_mask(struct device *dev, u64 dma_mask)
|
|||
|
||||
static inline void *
|
||||
dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
|
||||
unsigned int __nocast flag)
|
||||
gfp_t flag)
|
||||
{
|
||||
BUG_ON(dev->bus != &pci_bus_type);
|
||||
|
||||
|
|
@ -168,7 +168,7 @@ dma_set_mask(struct device *dev, u64 dma_mask)
|
|||
|
||||
static inline void *
|
||||
dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
|
||||
unsigned int __nocast flag)
|
||||
gfp_t flag)
|
||||
{
|
||||
BUG();
|
||||
return NULL;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
|
||||
|
||||
void *dma_alloc_coherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, unsigned int __nocast flag);
|
||||
dma_addr_t *dma_handle, gfp_t flag);
|
||||
|
||||
void dma_free_coherent(struct device *dev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
#include <linux/config.h>
|
||||
#include <asm/cputable.h>
|
||||
|
||||
#define CLOCK_TICK_RATE 1193180 /* Underlying HZ */
|
||||
#define CLOCK_TICK_RATE 1024000 /* Underlying HZ */
|
||||
|
||||
typedef unsigned long cycles_t;
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
#define PPC_FEATURE_HAS_SPE 0x00800000
|
||||
#define PPC_FEATURE_HAS_EFP_SINGLE 0x00400000
|
||||
#define PPC_FEATURE_HAS_EFP_DOUBLE 0x00200000
|
||||
#define PPC_FEATURE_NO_TB 0x00100000
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ static inline int dma_set_mask(struct device *dev, u64 dma_mask)
|
|||
|
||||
static inline void *dma_alloc_coherent(struct device *dev, size_t size,
|
||||
dma_addr_t * dma_handle,
|
||||
unsigned int __nocast gfp)
|
||||
gfp_t gfp)
|
||||
{
|
||||
#ifdef CONFIG_NOT_COHERENT_CACHE
|
||||
return __dma_alloc_coherent(size, dma_handle, gfp);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
extern int dma_supported(struct device *dev, u64 mask);
|
||||
extern int dma_set_mask(struct device *dev, u64 dma_mask);
|
||||
extern void *dma_alloc_coherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, unsigned int __nocast flag);
|
||||
dma_addr_t *dma_handle, gfp_t flag);
|
||||
extern void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
|
||||
dma_addr_t dma_handle);
|
||||
extern dma_addr_t dma_map_single(struct device *dev, void *cpu_addr,
|
||||
|
|
@ -118,7 +118,7 @@ dma_cache_sync(void *vaddr, size_t size,
|
|||
*/
|
||||
struct dma_mapping_ops {
|
||||
void * (*alloc_coherent)(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, unsigned int __nocast flag);
|
||||
dma_addr_t *dma_handle, gfp_t flag);
|
||||
void (*free_coherent)(struct device *dev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle);
|
||||
dma_addr_t (*map_single)(struct device *dev, void *ptr,
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ extern void iommu_unmap_sg(struct iommu_table *tbl, struct scatterlist *sglist,
|
|||
int nelems, enum dma_data_direction direction);
|
||||
|
||||
extern void *iommu_alloc_coherent(struct iommu_table *tbl, size_t size,
|
||||
dma_addr_t *dma_handle, unsigned int __nocast flag);
|
||||
dma_addr_t *dma_handle, gfp_t flag);
|
||||
extern void iommu_free_coherent(struct iommu_table *tbl, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle);
|
||||
extern dma_addr_t iommu_map_single(struct iommu_table *tbl, void *vaddr,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -49,17 +49,17 @@ extern unsigned int ___illegal_use_of_BTFIXUP_INT_in_module(void);
|
|||
/* Put bottom 13bits into some register variable */
|
||||
|
||||
#define BTFIXUPDEF_SIMM13(__name) \
|
||||
extern unsigned int ___sf_##__name(void) __attribute_const__; \
|
||||
static inline unsigned int ___sf_##__name(void) __attribute_const__; \
|
||||
extern unsigned ___ss_##__name[2]; \
|
||||
extern __inline__ unsigned int ___sf_##__name(void) { \
|
||||
static inline unsigned int ___sf_##__name(void) { \
|
||||
unsigned int ret; \
|
||||
__asm__ ("or %%g0, ___s_" #__name ", %0" : "=r"(ret)); \
|
||||
return ret; \
|
||||
}
|
||||
#define BTFIXUPDEF_SIMM13_INIT(__name,__val) \
|
||||
extern unsigned int ___sf_##__name(void) __attribute_const__; \
|
||||
static inline unsigned int ___sf_##__name(void) __attribute_const__; \
|
||||
extern unsigned ___ss_##__name[2]; \
|
||||
extern __inline__ unsigned int ___sf_##__name(void) { \
|
||||
static inline unsigned int ___sf_##__name(void) { \
|
||||
unsigned int ret; \
|
||||
__asm__ ("or %%g0, ___s_" #__name "__btset_" #__val ", %0" : "=r"(ret));\
|
||||
return ret; \
|
||||
|
|
@ -71,17 +71,17 @@ extern unsigned int ___illegal_use_of_BTFIXUP_INT_in_module(void);
|
|||
*/
|
||||
|
||||
#define BTFIXUPDEF_HALF(__name) \
|
||||
extern unsigned int ___af_##__name(void) __attribute_const__; \
|
||||
static inline unsigned int ___af_##__name(void) __attribute_const__; \
|
||||
extern unsigned ___as_##__name[2]; \
|
||||
extern __inline__ unsigned int ___af_##__name(void) { \
|
||||
static inline unsigned int ___af_##__name(void) { \
|
||||
unsigned int ret; \
|
||||
__asm__ ("or %%g0, ___a_" #__name ", %0" : "=r"(ret)); \
|
||||
return ret; \
|
||||
}
|
||||
#define BTFIXUPDEF_HALF_INIT(__name,__val) \
|
||||
extern unsigned int ___af_##__name(void) __attribute_const__; \
|
||||
static inline unsigned int ___af_##__name(void) __attribute_const__; \
|
||||
extern unsigned ___as_##__name[2]; \
|
||||
extern __inline__ unsigned int ___af_##__name(void) { \
|
||||
static inline unsigned int ___af_##__name(void) { \
|
||||
unsigned int ret; \
|
||||
__asm__ ("or %%g0, ___a_" #__name "__btset_" #__val ", %0" : "=r"(ret));\
|
||||
return ret; \
|
||||
|
|
@ -90,17 +90,17 @@ extern unsigned int ___illegal_use_of_BTFIXUP_INT_in_module(void);
|
|||
/* Put upper 22 bits into some register variable */
|
||||
|
||||
#define BTFIXUPDEF_SETHI(__name) \
|
||||
extern unsigned int ___hf_##__name(void) __attribute_const__; \
|
||||
static inline unsigned int ___hf_##__name(void) __attribute_const__; \
|
||||
extern unsigned ___hs_##__name[2]; \
|
||||
extern __inline__ unsigned int ___hf_##__name(void) { \
|
||||
static inline unsigned int ___hf_##__name(void) { \
|
||||
unsigned int ret; \
|
||||
__asm__ ("sethi %%hi(___h_" #__name "), %0" : "=r"(ret)); \
|
||||
return ret; \
|
||||
}
|
||||
#define BTFIXUPDEF_SETHI_INIT(__name,__val) \
|
||||
extern unsigned int ___hf_##__name(void) __attribute_const__; \
|
||||
static inline unsigned int ___hf_##__name(void) __attribute_const__; \
|
||||
extern unsigned ___hs_##__name[2]; \
|
||||
extern __inline__ unsigned int ___hf_##__name(void) { \
|
||||
static inline unsigned int ___hf_##__name(void) { \
|
||||
unsigned int ret; \
|
||||
__asm__ ("sethi %%hi(___h_" #__name "__btset_" #__val "), %0" : \
|
||||
"=r"(ret)); \
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
/* First, cache-tag access. */
|
||||
extern __inline__ unsigned int get_icache_tag(int setnum, int tagnum)
|
||||
static inline unsigned int get_icache_tag(int setnum, int tagnum)
|
||||
{
|
||||
unsigned int vaddr, retval;
|
||||
|
||||
|
|
@ -38,7 +38,7 @@ extern __inline__ unsigned int get_icache_tag(int setnum, int tagnum)
|
|||
return retval;
|
||||
}
|
||||
|
||||
extern __inline__ void put_icache_tag(int setnum, int tagnum, unsigned int entry)
|
||||
static inline void put_icache_tag(int setnum, int tagnum, unsigned int entry)
|
||||
{
|
||||
unsigned int vaddr;
|
||||
|
||||
|
|
@ -51,7 +51,7 @@ extern __inline__ void put_icache_tag(int setnum, int tagnum, unsigned int entry
|
|||
/* Second cache-data access. The data is returned two-32bit quantities
|
||||
* at a time.
|
||||
*/
|
||||
extern __inline__ void get_icache_data(int setnum, int tagnum, int subblock,
|
||||
static inline void get_icache_data(int setnum, int tagnum, int subblock,
|
||||
unsigned int *data)
|
||||
{
|
||||
unsigned int value1, value2, vaddr;
|
||||
|
|
@ -67,7 +67,7 @@ extern __inline__ void get_icache_data(int setnum, int tagnum, int subblock,
|
|||
data[0] = value1; data[1] = value2;
|
||||
}
|
||||
|
||||
extern __inline__ void put_icache_data(int setnum, int tagnum, int subblock,
|
||||
static inline void put_icache_data(int setnum, int tagnum, int subblock,
|
||||
unsigned int *data)
|
||||
{
|
||||
unsigned int value1, value2, vaddr;
|
||||
|
|
@ -92,35 +92,35 @@ extern __inline__ void put_icache_data(int setnum, int tagnum, int subblock,
|
|||
*/
|
||||
|
||||
/* Flushes which clear out both the on-chip and external caches */
|
||||
extern __inline__ void flush_ei_page(unsigned int addr)
|
||||
static inline void flush_ei_page(unsigned int addr)
|
||||
{
|
||||
__asm__ __volatile__("sta %%g0, [%0] %1\n\t" : :
|
||||
"r" (addr), "i" (ASI_M_FLUSH_PAGE) :
|
||||
"memory");
|
||||
}
|
||||
|
||||
extern __inline__ void flush_ei_seg(unsigned int addr)
|
||||
static inline void flush_ei_seg(unsigned int addr)
|
||||
{
|
||||
__asm__ __volatile__("sta %%g0, [%0] %1\n\t" : :
|
||||
"r" (addr), "i" (ASI_M_FLUSH_SEG) :
|
||||
"memory");
|
||||
}
|
||||
|
||||
extern __inline__ void flush_ei_region(unsigned int addr)
|
||||
static inline void flush_ei_region(unsigned int addr)
|
||||
{
|
||||
__asm__ __volatile__("sta %%g0, [%0] %1\n\t" : :
|
||||
"r" (addr), "i" (ASI_M_FLUSH_REGION) :
|
||||
"memory");
|
||||
}
|
||||
|
||||
extern __inline__ void flush_ei_ctx(unsigned int addr)
|
||||
static inline void flush_ei_ctx(unsigned int addr)
|
||||
{
|
||||
__asm__ __volatile__("sta %%g0, [%0] %1\n\t" : :
|
||||
"r" (addr), "i" (ASI_M_FLUSH_CTX) :
|
||||
"memory");
|
||||
}
|
||||
|
||||
extern __inline__ void flush_ei_user(unsigned int addr)
|
||||
static inline void flush_ei_user(unsigned int addr)
|
||||
{
|
||||
__asm__ __volatile__("sta %%g0, [%0] %1\n\t" : :
|
||||
"r" (addr), "i" (ASI_M_FLUSH_USER) :
|
||||
|
|
|
|||
|
|
@ -48,25 +48,25 @@
|
|||
#define CYPRESS_NFAULT 0x00000002
|
||||
#define CYPRESS_MENABLE 0x00000001
|
||||
|
||||
extern __inline__ void cypress_flush_page(unsigned long page)
|
||||
static inline void cypress_flush_page(unsigned long page)
|
||||
{
|
||||
__asm__ __volatile__("sta %%g0, [%0] %1\n\t" : :
|
||||
"r" (page), "i" (ASI_M_FLUSH_PAGE));
|
||||
}
|
||||
|
||||
extern __inline__ void cypress_flush_segment(unsigned long addr)
|
||||
static inline void cypress_flush_segment(unsigned long addr)
|
||||
{
|
||||
__asm__ __volatile__("sta %%g0, [%0] %1\n\t" : :
|
||||
"r" (addr), "i" (ASI_M_FLUSH_SEG));
|
||||
}
|
||||
|
||||
extern __inline__ void cypress_flush_region(unsigned long addr)
|
||||
static inline void cypress_flush_region(unsigned long addr)
|
||||
{
|
||||
__asm__ __volatile__("sta %%g0, [%0] %1\n\t" : :
|
||||
"r" (addr), "i" (ASI_M_FLUSH_REGION));
|
||||
}
|
||||
|
||||
extern __inline__ void cypress_flush_context(void)
|
||||
static inline void cypress_flush_context(void)
|
||||
{
|
||||
__asm__ __volatile__("sta %%g0, [%%g0] %0\n\t" : :
|
||||
"i" (ASI_M_FLUSH_CTX));
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
#include <linux/config.h>
|
||||
#include <asm/cpudata.h>
|
||||
|
||||
extern __inline__ void __delay(unsigned long loops)
|
||||
static inline void __delay(unsigned long loops)
|
||||
{
|
||||
__asm__ __volatile__("cmp %0, 0\n\t"
|
||||
"1: bne 1b\n\t"
|
||||
|
|
|
|||
|
|
@ -198,7 +198,7 @@ extern void dvma_init(struct sbus_bus *);
|
|||
/* Pause until counter runs out or BIT isn't set in the DMA condition
|
||||
* register.
|
||||
*/
|
||||
extern __inline__ void sparc_dma_pause(struct sparc_dma_registers *regs,
|
||||
static inline void sparc_dma_pause(struct sparc_dma_registers *regs,
|
||||
unsigned long bit)
|
||||
{
|
||||
int ctr = 50000; /* Let's find some bugs ;) */
|
||||
|
|
|
|||
|
|
@ -108,12 +108,12 @@ struct iommu_struct {
|
|||
struct bit_map usemap;
|
||||
};
|
||||
|
||||
extern __inline__ void iommu_invalidate(struct iommu_regs *regs)
|
||||
static inline void iommu_invalidate(struct iommu_regs *regs)
|
||||
{
|
||||
regs->tlbflush = 0;
|
||||
}
|
||||
|
||||
extern __inline__ void iommu_invalidate_page(struct iommu_regs *regs, unsigned long ba)
|
||||
static inline void iommu_invalidate_page(struct iommu_regs *regs, unsigned long ba)
|
||||
{
|
||||
regs->pageflush = (ba & PAGE_MASK);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ struct kernel_debug {
|
|||
extern struct kernel_debug *linux_dbvec;
|
||||
|
||||
/* Use this macro in C-code to enter the debugger. */
|
||||
extern __inline__ void sp_enter_debugger(void)
|
||||
static inline void sp_enter_debugger(void)
|
||||
{
|
||||
__asm__ __volatile__("jmpl %0, %%o7\n\t"
|
||||
"nop\n\t" : :
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ extern unsigned int hwbug_bitmask;
|
|||
*/
|
||||
#define TBR_ID_SHIFT 20
|
||||
|
||||
extern __inline__ int get_cpuid(void)
|
||||
static inline int get_cpuid(void)
|
||||
{
|
||||
register int retval;
|
||||
__asm__ __volatile__("rd %%tbr, %0\n\t"
|
||||
|
|
@ -93,7 +93,7 @@ extern __inline__ int get_cpuid(void)
|
|||
return (retval & 3);
|
||||
}
|
||||
|
||||
extern __inline__ int get_modid(void)
|
||||
static inline int get_modid(void)
|
||||
{
|
||||
return (get_cpuid() | 0x8);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
#define MSI_ASYNC_MODE 0x80000000 /* Operate the MSI asynchronously */
|
||||
|
||||
|
||||
extern __inline__ void msi_set_sync(void)
|
||||
static inline void msi_set_sync(void)
|
||||
{
|
||||
__asm__ __volatile__ ("lda [%0] %1, %%g3\n\t"
|
||||
"andn %%g3, %2, %%g3\n\t"
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@
|
|||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
extern __inline__ void mxcc_set_stream_src(unsigned long *paddr)
|
||||
static inline void mxcc_set_stream_src(unsigned long *paddr)
|
||||
{
|
||||
unsigned long data0 = paddr[0];
|
||||
unsigned long data1 = paddr[1];
|
||||
|
|
@ -98,7 +98,7 @@ extern __inline__ void mxcc_set_stream_src(unsigned long *paddr)
|
|||
"i" (ASI_M_MXCC) : "g2", "g3");
|
||||
}
|
||||
|
||||
extern __inline__ void mxcc_set_stream_dst(unsigned long *paddr)
|
||||
static inline void mxcc_set_stream_dst(unsigned long *paddr)
|
||||
{
|
||||
unsigned long data0 = paddr[0];
|
||||
unsigned long data1 = paddr[1];
|
||||
|
|
@ -111,7 +111,7 @@ extern __inline__ void mxcc_set_stream_dst(unsigned long *paddr)
|
|||
"i" (ASI_M_MXCC) : "g2", "g3");
|
||||
}
|
||||
|
||||
extern __inline__ unsigned long mxcc_get_creg(void)
|
||||
static inline unsigned long mxcc_get_creg(void)
|
||||
{
|
||||
unsigned long mxcc_control;
|
||||
|
||||
|
|
@ -125,7 +125,7 @@ extern __inline__ unsigned long mxcc_get_creg(void)
|
|||
return mxcc_control;
|
||||
}
|
||||
|
||||
extern __inline__ void mxcc_set_creg(unsigned long mxcc_control)
|
||||
static inline void mxcc_set_creg(unsigned long mxcc_control)
|
||||
{
|
||||
__asm__ __volatile__("sta %0, [%1] %2\n\t" : :
|
||||
"r" (mxcc_control), "r" (MXCC_CREG),
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@
|
|||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
extern __inline__ int bw_get_intr_mask(int sbus_level)
|
||||
static inline int bw_get_intr_mask(int sbus_level)
|
||||
{
|
||||
int mask;
|
||||
|
||||
|
|
@ -109,7 +109,7 @@ extern __inline__ int bw_get_intr_mask(int sbus_level)
|
|||
return mask;
|
||||
}
|
||||
|
||||
extern __inline__ void bw_clear_intr_mask(int sbus_level, int mask)
|
||||
static inline void bw_clear_intr_mask(int sbus_level, int mask)
|
||||
{
|
||||
__asm__ __volatile__ ("stha %0, [%1] %2" : :
|
||||
"r" (mask),
|
||||
|
|
@ -117,7 +117,7 @@ extern __inline__ void bw_clear_intr_mask(int sbus_level, int mask)
|
|||
"i" (ASI_M_CTL));
|
||||
}
|
||||
|
||||
extern __inline__ unsigned bw_get_prof_limit(int cpu)
|
||||
static inline unsigned bw_get_prof_limit(int cpu)
|
||||
{
|
||||
unsigned limit;
|
||||
|
||||
|
|
@ -128,7 +128,7 @@ extern __inline__ unsigned bw_get_prof_limit(int cpu)
|
|||
return limit;
|
||||
}
|
||||
|
||||
extern __inline__ void bw_set_prof_limit(int cpu, unsigned limit)
|
||||
static inline void bw_set_prof_limit(int cpu, unsigned limit)
|
||||
{
|
||||
__asm__ __volatile__ ("sta %0, [%1] %2" : :
|
||||
"r" (limit),
|
||||
|
|
@ -136,7 +136,7 @@ extern __inline__ void bw_set_prof_limit(int cpu, unsigned limit)
|
|||
"i" (ASI_M_CTL));
|
||||
}
|
||||
|
||||
extern __inline__ unsigned bw_get_ctrl(int cpu)
|
||||
static inline unsigned bw_get_ctrl(int cpu)
|
||||
{
|
||||
unsigned ctrl;
|
||||
|
||||
|
|
@ -147,7 +147,7 @@ extern __inline__ unsigned bw_get_ctrl(int cpu)
|
|||
return ctrl;
|
||||
}
|
||||
|
||||
extern __inline__ void bw_set_ctrl(int cpu, unsigned ctrl)
|
||||
static inline void bw_set_ctrl(int cpu, unsigned ctrl)
|
||||
{
|
||||
__asm__ __volatile__ ("sta %0, [%1] %2" : :
|
||||
"r" (ctrl),
|
||||
|
|
@ -157,7 +157,7 @@ extern __inline__ void bw_set_ctrl(int cpu, unsigned ctrl)
|
|||
|
||||
extern unsigned char cpu_leds[32];
|
||||
|
||||
extern __inline__ void show_leds(int cpuid)
|
||||
static inline void show_leds(int cpuid)
|
||||
{
|
||||
cpuid &= 0x1e;
|
||||
__asm__ __volatile__ ("stba %0, [%1] %2" : :
|
||||
|
|
@ -166,7 +166,7 @@ extern __inline__ void show_leds(int cpuid)
|
|||
"i" (ASI_M_CTL));
|
||||
}
|
||||
|
||||
extern __inline__ unsigned cc_get_ipen(void)
|
||||
static inline unsigned cc_get_ipen(void)
|
||||
{
|
||||
unsigned pending;
|
||||
|
||||
|
|
@ -177,7 +177,7 @@ extern __inline__ unsigned cc_get_ipen(void)
|
|||
return pending;
|
||||
}
|
||||
|
||||
extern __inline__ void cc_set_iclr(unsigned clear)
|
||||
static inline void cc_set_iclr(unsigned clear)
|
||||
{
|
||||
__asm__ __volatile__ ("stha %0, [%1] %2" : :
|
||||
"r" (clear),
|
||||
|
|
@ -185,7 +185,7 @@ extern __inline__ void cc_set_iclr(unsigned clear)
|
|||
"i" (ASI_M_MXCC));
|
||||
}
|
||||
|
||||
extern __inline__ unsigned cc_get_imsk(void)
|
||||
static inline unsigned cc_get_imsk(void)
|
||||
{
|
||||
unsigned mask;
|
||||
|
||||
|
|
@ -196,7 +196,7 @@ extern __inline__ unsigned cc_get_imsk(void)
|
|||
return mask;
|
||||
}
|
||||
|
||||
extern __inline__ void cc_set_imsk(unsigned mask)
|
||||
static inline void cc_set_imsk(unsigned mask)
|
||||
{
|
||||
__asm__ __volatile__ ("stha %0, [%1] %2" : :
|
||||
"r" (mask),
|
||||
|
|
@ -204,7 +204,7 @@ extern __inline__ void cc_set_imsk(unsigned mask)
|
|||
"i" (ASI_M_MXCC));
|
||||
}
|
||||
|
||||
extern __inline__ unsigned cc_get_imsk_other(int cpuid)
|
||||
static inline unsigned cc_get_imsk_other(int cpuid)
|
||||
{
|
||||
unsigned mask;
|
||||
|
||||
|
|
@ -215,7 +215,7 @@ extern __inline__ unsigned cc_get_imsk_other(int cpuid)
|
|||
return mask;
|
||||
}
|
||||
|
||||
extern __inline__ void cc_set_imsk_other(int cpuid, unsigned mask)
|
||||
static inline void cc_set_imsk_other(int cpuid, unsigned mask)
|
||||
{
|
||||
__asm__ __volatile__ ("stha %0, [%1] %2" : :
|
||||
"r" (mask),
|
||||
|
|
@ -223,7 +223,7 @@ extern __inline__ void cc_set_imsk_other(int cpuid, unsigned mask)
|
|||
"i" (ASI_M_CTL));
|
||||
}
|
||||
|
||||
extern __inline__ void cc_set_igen(unsigned gen)
|
||||
static inline void cc_set_igen(unsigned gen)
|
||||
{
|
||||
__asm__ __volatile__ ("sta %0, [%1] %2" : :
|
||||
"r" (gen),
|
||||
|
|
@ -239,7 +239,7 @@ extern __inline__ void cc_set_igen(unsigned gen)
|
|||
#define IGEN_MESSAGE(bcast, devid, sid, levels) \
|
||||
(((bcast) << 31) | ((devid) << 23) | ((sid) << 15) | (levels))
|
||||
|
||||
extern __inline__ void sun4d_send_ipi(int cpu, int level)
|
||||
static inline void sun4d_send_ipi(int cpu, int level)
|
||||
{
|
||||
cc_set_igen(IGEN_MESSAGE(0, cpu << 3, 6 + ((level >> 1) & 7), 1 << (level - 1)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,12 +15,12 @@
|
|||
|
||||
#define PCI_IRQ_NONE 0xffffffff
|
||||
|
||||
extern inline void pcibios_set_master(struct pci_dev *dev)
|
||||
static inline void pcibios_set_master(struct pci_dev *dev)
|
||||
{
|
||||
/* No special bus mastering setup handling */
|
||||
}
|
||||
|
||||
extern inline void pcibios_penalize_isa_irq(int irq, int active)
|
||||
static inline void pcibios_penalize_isa_irq(int irq, int active)
|
||||
{
|
||||
/* We don't do dynamic PCI IRQ allocation */
|
||||
}
|
||||
|
|
@ -137,7 +137,7 @@ extern void pci_dma_sync_sg_for_device(struct pci_dev *hwdev, struct scatterlist
|
|||
* only drive the low 24-bits during PCI bus mastering, then
|
||||
* you would pass 0x00ffffff as the mask to this function.
|
||||
*/
|
||||
extern inline int pci_dma_supported(struct pci_dev *hwdev, u64 mask)
|
||||
static inline int pci_dma_supported(struct pci_dev *hwdev, u64 mask)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
*/
|
||||
|
|
@ -152,7 +154,7 @@ BTFIXUPDEF_CALL_CONST(int, pte_present, pte_t)
|
|||
BTFIXUPDEF_CALL(void, pte_clear, pte_t *)
|
||||
BTFIXUPDEF_CALL(int, pte_read, pte_t)
|
||||
|
||||
extern __inline__ int pte_none(pte_t pte)
|
||||
static inline int pte_none(pte_t pte)
|
||||
{
|
||||
return !(pte_val(pte) & ~BTFIXUP_SETHI(none_mask));
|
||||
}
|
||||
|
|
@ -165,7 +167,7 @@ BTFIXUPDEF_CALL_CONST(int, pmd_bad, pmd_t)
|
|||
BTFIXUPDEF_CALL_CONST(int, pmd_present, pmd_t)
|
||||
BTFIXUPDEF_CALL(void, pmd_clear, pmd_t *)
|
||||
|
||||
extern __inline__ int pmd_none(pmd_t pmd)
|
||||
static inline int pmd_none(pmd_t pmd)
|
||||
{
|
||||
return !(pmd_val(pmd) & ~BTFIXUP_SETHI(none_mask));
|
||||
}
|
||||
|
|
@ -192,20 +194,20 @@ BTFIXUPDEF_HALF(pte_writei)
|
|||
BTFIXUPDEF_HALF(pte_dirtyi)
|
||||
BTFIXUPDEF_HALF(pte_youngi)
|
||||
|
||||
extern int pte_write(pte_t pte) __attribute_const__;
|
||||
extern __inline__ int pte_write(pte_t pte)
|
||||
static int pte_write(pte_t pte) __attribute_const__;
|
||||
static inline int pte_write(pte_t pte)
|
||||
{
|
||||
return pte_val(pte) & BTFIXUP_HALF(pte_writei);
|
||||
}
|
||||
|
||||
extern int pte_dirty(pte_t pte) __attribute_const__;
|
||||
extern __inline__ int pte_dirty(pte_t pte)
|
||||
static int pte_dirty(pte_t pte) __attribute_const__;
|
||||
static inline int pte_dirty(pte_t pte)
|
||||
{
|
||||
return pte_val(pte) & BTFIXUP_HALF(pte_dirtyi);
|
||||
}
|
||||
|
||||
extern int pte_young(pte_t pte) __attribute_const__;
|
||||
extern __inline__ int pte_young(pte_t pte)
|
||||
static int pte_young(pte_t pte) __attribute_const__;
|
||||
static inline int pte_young(pte_t pte)
|
||||
{
|
||||
return pte_val(pte) & BTFIXUP_HALF(pte_youngi);
|
||||
}
|
||||
|
|
@ -215,8 +217,8 @@ extern __inline__ int pte_young(pte_t pte)
|
|||
*/
|
||||
BTFIXUPDEF_HALF(pte_filei)
|
||||
|
||||
extern int pte_file(pte_t pte) __attribute_const__;
|
||||
extern __inline__ int pte_file(pte_t pte)
|
||||
static int pte_file(pte_t pte) __attribute_const__;
|
||||
static inline int pte_file(pte_t pte)
|
||||
{
|
||||
return pte_val(pte) & BTFIXUP_HALF(pte_filei);
|
||||
}
|
||||
|
|
@ -227,20 +229,20 @@ BTFIXUPDEF_HALF(pte_wrprotecti)
|
|||
BTFIXUPDEF_HALF(pte_mkcleani)
|
||||
BTFIXUPDEF_HALF(pte_mkoldi)
|
||||
|
||||
extern pte_t pte_wrprotect(pte_t pte) __attribute_const__;
|
||||
extern __inline__ pte_t pte_wrprotect(pte_t pte)
|
||||
static pte_t pte_wrprotect(pte_t pte) __attribute_const__;
|
||||
static inline pte_t pte_wrprotect(pte_t pte)
|
||||
{
|
||||
return __pte(pte_val(pte) & ~BTFIXUP_HALF(pte_wrprotecti));
|
||||
}
|
||||
|
||||
extern pte_t pte_mkclean(pte_t pte) __attribute_const__;
|
||||
extern __inline__ pte_t pte_mkclean(pte_t pte)
|
||||
static pte_t pte_mkclean(pte_t pte) __attribute_const__;
|
||||
static inline pte_t pte_mkclean(pte_t pte)
|
||||
{
|
||||
return __pte(pte_val(pte) & ~BTFIXUP_HALF(pte_mkcleani));
|
||||
}
|
||||
|
||||
extern pte_t pte_mkold(pte_t pte) __attribute_const__;
|
||||
extern __inline__ pte_t pte_mkold(pte_t pte)
|
||||
static pte_t pte_mkold(pte_t pte) __attribute_const__;
|
||||
static inline pte_t pte_mkold(pte_t pte)
|
||||
{
|
||||
return __pte(pte_val(pte) & ~BTFIXUP_HALF(pte_mkoldi));
|
||||
}
|
||||
|
|
@ -276,8 +278,8 @@ BTFIXUPDEF_CALL_CONST(pte_t, mk_pte_io, unsigned long, pgprot_t, int)
|
|||
|
||||
BTFIXUPDEF_INT(pte_modify_mask)
|
||||
|
||||
extern pte_t pte_modify(pte_t pte, pgprot_t newprot) __attribute_const__;
|
||||
extern __inline__ pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
||||
static pte_t pte_modify(pte_t pte, pgprot_t newprot) __attribute_const__;
|
||||
static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
||||
{
|
||||
return __pte((pte_val(pte) & BTFIXUP_INT(pte_modify_mask)) |
|
||||
pgprot_val(newprot));
|
||||
|
|
@ -384,13 +386,13 @@ extern struct ctx_list ctx_used; /* Head of used contexts list */
|
|||
|
||||
#define NO_CONTEXT -1
|
||||
|
||||
extern __inline__ void remove_from_ctx_list(struct ctx_list *entry)
|
||||
static inline void remove_from_ctx_list(struct ctx_list *entry)
|
||||
{
|
||||
entry->next->prev = entry->prev;
|
||||
entry->prev->next = entry->next;
|
||||
}
|
||||
|
||||
extern __inline__ void add_to_ctx_list(struct ctx_list *head, struct ctx_list *entry)
|
||||
static inline void add_to_ctx_list(struct ctx_list *head, struct ctx_list *entry)
|
||||
{
|
||||
entry->next = head;
|
||||
(entry->prev = head->prev)->next = entry;
|
||||
|
|
@ -399,7 +401,7 @@ extern __inline__ void add_to_ctx_list(struct ctx_list *head, struct ctx_list *e
|
|||
#define add_to_free_ctxlist(entry) add_to_ctx_list(&ctx_free, entry)
|
||||
#define add_to_used_ctxlist(entry) add_to_ctx_list(&ctx_used, entry)
|
||||
|
||||
extern __inline__ unsigned long
|
||||
static inline unsigned long
|
||||
__get_phys (unsigned long addr)
|
||||
{
|
||||
switch (sparc_cpu_model){
|
||||
|
|
@ -414,7 +416,7 @@ __get_phys (unsigned long addr)
|
|||
}
|
||||
}
|
||||
|
||||
extern __inline__ int
|
||||
static inline int
|
||||
__get_iospace (unsigned long addr)
|
||||
{
|
||||
switch (sparc_cpu_model){
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@ extern void *srmmu_nocache_pool;
|
|||
#define __nocache_fix(VADDR) __va(__nocache_pa(VADDR))
|
||||
|
||||
/* Accessing the MMU control register. */
|
||||
extern __inline__ unsigned int srmmu_get_mmureg(void)
|
||||
static inline unsigned int srmmu_get_mmureg(void)
|
||||
{
|
||||
unsigned int retval;
|
||||
__asm__ __volatile__("lda [%%g0] %1, %0\n\t" :
|
||||
|
|
@ -157,14 +157,14 @@ extern __inline__ unsigned int srmmu_get_mmureg(void)
|
|||
return retval;
|
||||
}
|
||||
|
||||
extern __inline__ void srmmu_set_mmureg(unsigned long regval)
|
||||
static inline void srmmu_set_mmureg(unsigned long regval)
|
||||
{
|
||||
__asm__ __volatile__("sta %0, [%%g0] %1\n\t" : :
|
||||
"r" (regval), "i" (ASI_M_MMUREGS) : "memory");
|
||||
|
||||
}
|
||||
|
||||
extern __inline__ void srmmu_set_ctable_ptr(unsigned long paddr)
|
||||
static inline void srmmu_set_ctable_ptr(unsigned long paddr)
|
||||
{
|
||||
paddr = ((paddr >> 4) & SRMMU_CTX_PMASK);
|
||||
__asm__ __volatile__("sta %0, [%1] %2\n\t" : :
|
||||
|
|
@ -173,7 +173,7 @@ extern __inline__ void srmmu_set_ctable_ptr(unsigned long paddr)
|
|||
"memory");
|
||||
}
|
||||
|
||||
extern __inline__ unsigned long srmmu_get_ctable_ptr(void)
|
||||
static inline unsigned long srmmu_get_ctable_ptr(void)
|
||||
{
|
||||
unsigned int retval;
|
||||
|
||||
|
|
@ -184,14 +184,14 @@ extern __inline__ unsigned long srmmu_get_ctable_ptr(void)
|
|||
return (retval & SRMMU_CTX_PMASK) << 4;
|
||||
}
|
||||
|
||||
extern __inline__ void srmmu_set_context(int context)
|
||||
static inline void srmmu_set_context(int context)
|
||||
{
|
||||
__asm__ __volatile__("sta %0, [%1] %2\n\t" : :
|
||||
"r" (context), "r" (SRMMU_CTX_REG),
|
||||
"i" (ASI_M_MMUREGS) : "memory");
|
||||
}
|
||||
|
||||
extern __inline__ int srmmu_get_context(void)
|
||||
static inline int srmmu_get_context(void)
|
||||
{
|
||||
register int retval;
|
||||
__asm__ __volatile__("lda [%1] %2, %0\n\t" :
|
||||
|
|
@ -201,7 +201,7 @@ extern __inline__ int srmmu_get_context(void)
|
|||
return retval;
|
||||
}
|
||||
|
||||
extern __inline__ unsigned int srmmu_get_fstatus(void)
|
||||
static inline unsigned int srmmu_get_fstatus(void)
|
||||
{
|
||||
unsigned int retval;
|
||||
|
||||
|
|
@ -211,7 +211,7 @@ extern __inline__ unsigned int srmmu_get_fstatus(void)
|
|||
return retval;
|
||||
}
|
||||
|
||||
extern __inline__ unsigned int srmmu_get_faddr(void)
|
||||
static inline unsigned int srmmu_get_faddr(void)
|
||||
{
|
||||
unsigned int retval;
|
||||
|
||||
|
|
@ -222,7 +222,7 @@ extern __inline__ unsigned int srmmu_get_faddr(void)
|
|||
}
|
||||
|
||||
/* This is guaranteed on all SRMMU's. */
|
||||
extern __inline__ void srmmu_flush_whole_tlb(void)
|
||||
static inline void srmmu_flush_whole_tlb(void)
|
||||
{
|
||||
__asm__ __volatile__("sta %%g0, [%0] %1\n\t": :
|
||||
"r" (0x400), /* Flush entire TLB!! */
|
||||
|
|
@ -231,7 +231,7 @@ extern __inline__ void srmmu_flush_whole_tlb(void)
|
|||
}
|
||||
|
||||
/* These flush types are not available on all chips... */
|
||||
extern __inline__ void srmmu_flush_tlb_ctx(void)
|
||||
static inline void srmmu_flush_tlb_ctx(void)
|
||||
{
|
||||
__asm__ __volatile__("sta %%g0, [%0] %1\n\t": :
|
||||
"r" (0x300), /* Flush TLB ctx.. */
|
||||
|
|
@ -239,7 +239,7 @@ extern __inline__ void srmmu_flush_tlb_ctx(void)
|
|||
|
||||
}
|
||||
|
||||
extern __inline__ void srmmu_flush_tlb_region(unsigned long addr)
|
||||
static inline void srmmu_flush_tlb_region(unsigned long addr)
|
||||
{
|
||||
addr &= SRMMU_PGDIR_MASK;
|
||||
__asm__ __volatile__("sta %%g0, [%0] %1\n\t": :
|
||||
|
|
@ -249,7 +249,7 @@ extern __inline__ void srmmu_flush_tlb_region(unsigned long addr)
|
|||
}
|
||||
|
||||
|
||||
extern __inline__ void srmmu_flush_tlb_segment(unsigned long addr)
|
||||
static inline void srmmu_flush_tlb_segment(unsigned long addr)
|
||||
{
|
||||
addr &= SRMMU_REAL_PMD_MASK;
|
||||
__asm__ __volatile__("sta %%g0, [%0] %1\n\t": :
|
||||
|
|
@ -258,7 +258,7 @@ extern __inline__ void srmmu_flush_tlb_segment(unsigned long addr)
|
|||
|
||||
}
|
||||
|
||||
extern __inline__ void srmmu_flush_tlb_page(unsigned long page)
|
||||
static inline void srmmu_flush_tlb_page(unsigned long page)
|
||||
{
|
||||
page &= PAGE_MASK;
|
||||
__asm__ __volatile__("sta %%g0, [%0] %1\n\t": :
|
||||
|
|
@ -267,7 +267,7 @@ extern __inline__ void srmmu_flush_tlb_page(unsigned long page)
|
|||
|
||||
}
|
||||
|
||||
extern __inline__ unsigned long srmmu_hwprobe(unsigned long vaddr)
|
||||
static inline unsigned long srmmu_hwprobe(unsigned long vaddr)
|
||||
{
|
||||
unsigned long retval;
|
||||
|
||||
|
|
@ -279,7 +279,7 @@ extern __inline__ unsigned long srmmu_hwprobe(unsigned long vaddr)
|
|||
return retval;
|
||||
}
|
||||
|
||||
extern __inline__ int
|
||||
static inline int
|
||||
srmmu_get_pte (unsigned long addr)
|
||||
{
|
||||
register unsigned long entry;
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ struct thread_struct {
|
|||
extern unsigned long thread_saved_pc(struct task_struct *t);
|
||||
|
||||
/* Do necessary setup to start up a newly executed thread. */
|
||||
extern __inline__ void start_thread(struct pt_regs * regs, unsigned long pc,
|
||||
static inline void start_thread(struct pt_regs * regs, unsigned long pc,
|
||||
unsigned long sp)
|
||||
{
|
||||
register unsigned long zero asm("g1");
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
|
||||
#ifndef __ASSEMBLY__
|
||||
/* Get the %psr register. */
|
||||
extern __inline__ unsigned int get_psr(void)
|
||||
static inline unsigned int get_psr(void)
|
||||
{
|
||||
unsigned int psr;
|
||||
__asm__ __volatile__(
|
||||
|
|
@ -53,7 +53,7 @@ extern __inline__ unsigned int get_psr(void)
|
|||
return psr;
|
||||
}
|
||||
|
||||
extern __inline__ void put_psr(unsigned int new_psr)
|
||||
static inline void put_psr(unsigned int new_psr)
|
||||
{
|
||||
__asm__ __volatile__(
|
||||
"wr %0, 0x0, %%psr\n\t"
|
||||
|
|
@ -72,7 +72,7 @@ extern __inline__ void put_psr(unsigned int new_psr)
|
|||
|
||||
extern unsigned int fsr_storage;
|
||||
|
||||
extern __inline__ unsigned int get_fsr(void)
|
||||
static inline unsigned int get_fsr(void)
|
||||
{
|
||||
unsigned int fsr = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ struct sbi_regs {
|
|||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
extern __inline__ int acquire_sbi(int devid, int mask)
|
||||
static inline int acquire_sbi(int devid, int mask)
|
||||
{
|
||||
__asm__ __volatile__ ("swapa [%2] %3, %0" :
|
||||
"=r" (mask) :
|
||||
|
|
@ -75,7 +75,7 @@ extern __inline__ int acquire_sbi(int devid, int mask)
|
|||
return mask;
|
||||
}
|
||||
|
||||
extern __inline__ void release_sbi(int devid, int mask)
|
||||
static inline void release_sbi(int devid, int mask)
|
||||
{
|
||||
__asm__ __volatile__ ("sta %0, [%1] %2" : :
|
||||
"r" (mask),
|
||||
|
|
@ -83,7 +83,7 @@ extern __inline__ void release_sbi(int devid, int mask)
|
|||
"i" (ASI_M_CTL));
|
||||
}
|
||||
|
||||
extern __inline__ void set_sbi_tid(int devid, int targetid)
|
||||
static inline void set_sbi_tid(int devid, int targetid)
|
||||
{
|
||||
__asm__ __volatile__ ("sta %0, [%1] %2" : :
|
||||
"r" (targetid),
|
||||
|
|
@ -91,7 +91,7 @@ extern __inline__ void set_sbi_tid(int devid, int targetid)
|
|||
"i" (ASI_M_CTL));
|
||||
}
|
||||
|
||||
extern __inline__ int get_sbi_ctl(int devid, int cfgno)
|
||||
static inline int get_sbi_ctl(int devid, int cfgno)
|
||||
{
|
||||
int cfg;
|
||||
|
||||
|
|
@ -102,7 +102,7 @@ extern __inline__ int get_sbi_ctl(int devid, int cfgno)
|
|||
return cfg;
|
||||
}
|
||||
|
||||
extern __inline__ void set_sbi_ctl(int devid, int cfgno, int cfg)
|
||||
static inline void set_sbi_ctl(int devid, int cfgno, int cfg)
|
||||
{
|
||||
__asm__ __volatile__ ("sta %0, [%1] %2" : :
|
||||
"r" (cfg),
|
||||
|
|
|
|||
|
|
@ -28,12 +28,12 @@
|
|||
* numbers + offsets, and vice versa.
|
||||
*/
|
||||
|
||||
extern __inline__ unsigned long sbus_devaddr(int slotnum, unsigned long offset)
|
||||
static inline unsigned long sbus_devaddr(int slotnum, unsigned long offset)
|
||||
{
|
||||
return (unsigned long) (SUN_SBUS_BVADDR+((slotnum)<<25)+(offset));
|
||||
}
|
||||
|
||||
extern __inline__ int sbus_dev_slot(unsigned long dev_addr)
|
||||
static inline int sbus_dev_slot(unsigned long dev_addr)
|
||||
{
|
||||
return (int) (((dev_addr)-SUN_SBUS_BVADDR)>>25);
|
||||
}
|
||||
|
|
@ -80,7 +80,7 @@ struct sbus_bus {
|
|||
|
||||
extern struct sbus_bus *sbus_root;
|
||||
|
||||
extern __inline__ int
|
||||
static inline int
|
||||
sbus_is_slave(struct sbus_dev *dev)
|
||||
{
|
||||
/* XXX Have to write this for sun4c's */
|
||||
|
|
|
|||
|
|
@ -60,22 +60,22 @@ BTFIXUPDEF_BLACKBOX(load_current)
|
|||
#define smp_cross_call(func,arg1,arg2,arg3,arg4,arg5) BTFIXUP_CALL(smp_cross_call)(func,arg1,arg2,arg3,arg4,arg5)
|
||||
#define smp_message_pass(target,msg,data,wait) BTFIXUP_CALL(smp_message_pass)(target,msg,data,wait)
|
||||
|
||||
extern __inline__ void xc0(smpfunc_t func) { smp_cross_call(func, 0, 0, 0, 0, 0); }
|
||||
extern __inline__ void xc1(smpfunc_t func, unsigned long arg1)
|
||||
static inline void xc0(smpfunc_t func) { smp_cross_call(func, 0, 0, 0, 0, 0); }
|
||||
static inline void xc1(smpfunc_t func, unsigned long arg1)
|
||||
{ smp_cross_call(func, arg1, 0, 0, 0, 0); }
|
||||
extern __inline__ void xc2(smpfunc_t func, unsigned long arg1, unsigned long arg2)
|
||||
static inline void xc2(smpfunc_t func, unsigned long arg1, unsigned long arg2)
|
||||
{ smp_cross_call(func, arg1, arg2, 0, 0, 0); }
|
||||
extern __inline__ void xc3(smpfunc_t func, unsigned long arg1, unsigned long arg2,
|
||||
static inline void xc3(smpfunc_t func, unsigned long arg1, unsigned long arg2,
|
||||
unsigned long arg3)
|
||||
{ smp_cross_call(func, arg1, arg2, arg3, 0, 0); }
|
||||
extern __inline__ void xc4(smpfunc_t func, unsigned long arg1, unsigned long arg2,
|
||||
static inline void xc4(smpfunc_t func, unsigned long arg1, unsigned long arg2,
|
||||
unsigned long arg3, unsigned long arg4)
|
||||
{ smp_cross_call(func, arg1, arg2, arg3, arg4, 0); }
|
||||
extern __inline__ void xc5(smpfunc_t func, unsigned long arg1, unsigned long arg2,
|
||||
static inline void xc5(smpfunc_t func, unsigned long arg1, unsigned long arg2,
|
||||
unsigned long arg3, unsigned long arg4, unsigned long arg5)
|
||||
{ smp_cross_call(func, arg1, arg2, arg3, arg4, arg5); }
|
||||
|
||||
extern __inline__ int smp_call_function(void (*func)(void *info), void *info, int nonatomic, int wait)
|
||||
static inline int smp_call_function(void (*func)(void *info), void *info, int nonatomic, int wait)
|
||||
{
|
||||
xc1((smpfunc_t)func, (unsigned long)info);
|
||||
return 0;
|
||||
|
|
@ -84,16 +84,16 @@ extern __inline__ int smp_call_function(void (*func)(void *info), void *info, in
|
|||
extern __volatile__ int __cpu_number_map[NR_CPUS];
|
||||
extern __volatile__ int __cpu_logical_map[NR_CPUS];
|
||||
|
||||
extern __inline__ int cpu_logical_map(int cpu)
|
||||
static inline int cpu_logical_map(int cpu)
|
||||
{
|
||||
return __cpu_logical_map[cpu];
|
||||
}
|
||||
extern __inline__ int cpu_number_map(int cpu)
|
||||
static inline int cpu_number_map(int cpu)
|
||||
{
|
||||
return __cpu_number_map[cpu];
|
||||
}
|
||||
|
||||
extern __inline__ int hard_smp4m_processor_id(void)
|
||||
static inline int hard_smp4m_processor_id(void)
|
||||
{
|
||||
int cpuid;
|
||||
|
||||
|
|
@ -104,7 +104,7 @@ extern __inline__ int hard_smp4m_processor_id(void)
|
|||
return cpuid;
|
||||
}
|
||||
|
||||
extern __inline__ int hard_smp4d_processor_id(void)
|
||||
static inline int hard_smp4d_processor_id(void)
|
||||
{
|
||||
int cpuid;
|
||||
|
||||
|
|
@ -114,7 +114,7 @@ extern __inline__ int hard_smp4d_processor_id(void)
|
|||
}
|
||||
|
||||
#ifndef MODULE
|
||||
extern __inline__ int hard_smp_processor_id(void)
|
||||
static inline int hard_smp_processor_id(void)
|
||||
{
|
||||
int cpuid;
|
||||
|
||||
|
|
@ -136,7 +136,7 @@ extern __inline__ int hard_smp_processor_id(void)
|
|||
return cpuid;
|
||||
}
|
||||
#else
|
||||
extern __inline__ int hard_smp_processor_id(void)
|
||||
static inline int hard_smp_processor_id(void)
|
||||
{
|
||||
int cpuid;
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* atomic.
|
||||
*/
|
||||
|
||||
extern __inline__ __volatile__ char test_and_set(void *addr)
|
||||
static inline __volatile__ char test_and_set(void *addr)
|
||||
{
|
||||
char state = 0;
|
||||
|
||||
|
|
@ -27,7 +27,7 @@ extern __inline__ __volatile__ char test_and_set(void *addr)
|
|||
}
|
||||
|
||||
/* Initialize a spin-lock. */
|
||||
extern __inline__ __volatile__ smp_initlock(void *spinlock)
|
||||
static inline __volatile__ smp_initlock(void *spinlock)
|
||||
{
|
||||
/* Unset the lock. */
|
||||
*((unsigned char *) spinlock) = 0;
|
||||
|
|
@ -36,7 +36,7 @@ extern __inline__ __volatile__ smp_initlock(void *spinlock)
|
|||
}
|
||||
|
||||
/* This routine spins until it acquires the lock at ADDR. */
|
||||
extern __inline__ __volatile__ smp_lock(void *addr)
|
||||
static inline __volatile__ smp_lock(void *addr)
|
||||
{
|
||||
while(test_and_set(addr) == 0xff)
|
||||
;
|
||||
|
|
@ -46,7 +46,7 @@ extern __inline__ __volatile__ smp_lock(void *addr)
|
|||
}
|
||||
|
||||
/* This routine releases the lock at ADDR. */
|
||||
extern __inline__ __volatile__ smp_unlock(void *addr)
|
||||
static inline __volatile__ smp_unlock(void *addr)
|
||||
{
|
||||
*((unsigned char *) addr) = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
#define __raw_spin_unlock_wait(lock) \
|
||||
do { while (__raw_spin_is_locked(lock)) cpu_relax(); } while (0)
|
||||
|
||||
extern __inline__ void __raw_spin_lock(raw_spinlock_t *lock)
|
||||
static inline void __raw_spin_lock(raw_spinlock_t *lock)
|
||||
{
|
||||
__asm__ __volatile__(
|
||||
"\n1:\n\t"
|
||||
|
|
@ -37,7 +37,7 @@ extern __inline__ void __raw_spin_lock(raw_spinlock_t *lock)
|
|||
: "g2", "memory", "cc");
|
||||
}
|
||||
|
||||
extern __inline__ int __raw_spin_trylock(raw_spinlock_t *lock)
|
||||
static inline int __raw_spin_trylock(raw_spinlock_t *lock)
|
||||
{
|
||||
unsigned int result;
|
||||
__asm__ __volatile__("ldstub [%1], %0"
|
||||
|
|
@ -47,7 +47,7 @@ extern __inline__ int __raw_spin_trylock(raw_spinlock_t *lock)
|
|||
return (result == 0);
|
||||
}
|
||||
|
||||
extern __inline__ void __raw_spin_unlock(raw_spinlock_t *lock)
|
||||
static inline void __raw_spin_unlock(raw_spinlock_t *lock)
|
||||
{
|
||||
__asm__ __volatile__("stb %%g0, [%0]" : : "r" (lock) : "memory");
|
||||
}
|
||||
|
|
@ -78,7 +78,7 @@ extern __inline__ void __raw_spin_unlock(raw_spinlock_t *lock)
|
|||
*
|
||||
* Unfortunately this scheme limits us to ~16,000,000 cpus.
|
||||
*/
|
||||
extern __inline__ void __read_lock(raw_rwlock_t *rw)
|
||||
static inline void __read_lock(raw_rwlock_t *rw)
|
||||
{
|
||||
register raw_rwlock_t *lp asm("g1");
|
||||
lp = rw;
|
||||
|
|
@ -98,7 +98,7 @@ do { unsigned long flags; \
|
|||
local_irq_restore(flags); \
|
||||
} while(0)
|
||||
|
||||
extern __inline__ void __read_unlock(raw_rwlock_t *rw)
|
||||
static inline void __read_unlock(raw_rwlock_t *rw)
|
||||
{
|
||||
register raw_rwlock_t *lp asm("g1");
|
||||
lp = rw;
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@ static inline unsigned long getipl(void)
|
|||
BTFIXUPDEF_CALL(void, ___xchg32, void)
|
||||
#endif
|
||||
|
||||
extern __inline__ unsigned long xchg_u32(__volatile__ unsigned long *m, unsigned long val)
|
||||
static inline unsigned long xchg_u32(__volatile__ unsigned long *m, unsigned long val)
|
||||
{
|
||||
#ifdef CONFIG_SMP
|
||||
__asm__ __volatile__("swap [%2], %0"
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ struct tt_entry {
|
|||
/* We set this to _start in system setup. */
|
||||
extern struct tt_entry *sparc_ttable;
|
||||
|
||||
extern __inline__ unsigned long get_tbr(void)
|
||||
static inline unsigned long get_tbr(void)
|
||||
{
|
||||
unsigned long tbr;
|
||||
|
||||
|
|
|
|||
|
|
@ -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 | \
|
||||
|
|
|
|||
|
|
@ -27,23 +27,27 @@
|
|||
* PCI bus.
|
||||
*/
|
||||
|
||||
#define PBM_LOGCLUSTERS 3
|
||||
#define PBM_NCLUSTERS (1 << PBM_LOGCLUSTERS)
|
||||
|
||||
struct pci_controller_info;
|
||||
|
||||
/* This contains the software state necessary to drive a PCI
|
||||
* controller's IOMMU.
|
||||
*/
|
||||
struct pci_iommu_arena {
|
||||
unsigned long *map;
|
||||
unsigned int hint;
|
||||
unsigned int limit;
|
||||
};
|
||||
|
||||
struct pci_iommu {
|
||||
/* This protects the controller's IOMMU and all
|
||||
* streaming buffers underneath.
|
||||
*/
|
||||
spinlock_t lock;
|
||||
|
||||
struct pci_iommu_arena arena;
|
||||
|
||||
/* IOMMU page table, a linear array of ioptes. */
|
||||
iopte_t *page_table; /* The page table itself. */
|
||||
int page_table_sz_bits; /* log2 of ow many pages does it map? */
|
||||
|
||||
/* Base PCI memory space address where IOMMU mappings
|
||||
* begin.
|
||||
|
|
@ -62,12 +66,6 @@ struct pci_iommu {
|
|||
*/
|
||||
unsigned long write_complete_reg;
|
||||
|
||||
/* The lowest used consistent mapping entry. Since
|
||||
* we allocate consistent maps out of cluster 0 this
|
||||
* is relative to the beginning of closter 0.
|
||||
*/
|
||||
u32 lowest_consistent_map;
|
||||
|
||||
/* In order to deal with some buggy third-party PCI bridges that
|
||||
* do wrong prefetching, we never mark valid mappings as invalid.
|
||||
* Instead we point them at this dummy page.
|
||||
|
|
@ -75,16 +73,6 @@ struct pci_iommu {
|
|||
unsigned long dummy_page;
|
||||
unsigned long dummy_page_pa;
|
||||
|
||||
/* If PBM_NCLUSTERS is ever decreased to 4 or lower,
|
||||
* or if largest supported page_table_sz * 8K goes above
|
||||
* 2GB, you must increase the size of the type of
|
||||
* these counters. You have been duly warned. -DaveM
|
||||
*/
|
||||
struct {
|
||||
u16 next;
|
||||
u16 flush;
|
||||
} alloc_info[PBM_NCLUSTERS];
|
||||
|
||||
/* CTX allocation. */
|
||||
unsigned long ctx_lowest_free;
|
||||
unsigned long ctx_bitmap[IOMMU_NUM_CTXS / (sizeof(unsigned long) * 8)];
|
||||
|
|
@ -102,7 +90,7 @@ struct pci_iommu {
|
|||
u32 dma_addr_mask;
|
||||
};
|
||||
|
||||
extern void pci_iommu_table_init(struct pci_iommu *, int);
|
||||
extern void pci_iommu_table_init(struct pci_iommu *iommu, int tsbsize, u32 dma_offset, u32 dma_addr_mask);
|
||||
|
||||
/* This describes a PCI bus module's streaming buffer. */
|
||||
struct pci_strbuf {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ struct task_struct;
|
|||
#include "linux/config.h"
|
||||
#include "asm/ptrace.h"
|
||||
#include "choose-mode.h"
|
||||
#include "registers.h"
|
||||
|
||||
struct mm_struct;
|
||||
|
||||
|
|
@ -136,19 +137,15 @@ extern struct cpuinfo_um cpu_data[];
|
|||
#define current_cpu_data boot_cpu_data
|
||||
#endif
|
||||
|
||||
#define KSTK_EIP(tsk) (PT_REGS_IP(&tsk->thread.regs))
|
||||
#define KSTK_ESP(tsk) (PT_REGS_SP(&tsk->thread.regs))
|
||||
|
||||
#ifdef CONFIG_MODE_SKAS
|
||||
#define KSTK_REG(tsk, reg) \
|
||||
({ union uml_pt_regs regs; \
|
||||
get_thread_regs(®s, tsk->thread.mode.skas.switch_buf); \
|
||||
UPT_REG(®s, reg); })
|
||||
#else
|
||||
#define KSTK_REG(tsk, reg) (0xbadbabe)
|
||||
#endif
|
||||
#define get_wchan(p) (0)
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Overrides for Emacs so that we follow Linus's tabbing style.
|
||||
* Emacs will notice this stuff at the end of the file and automatically
|
||||
* adjust the settings for this buffer only. This must remain at the end
|
||||
* of the file.
|
||||
* ---------------------------------------------------------------------------
|
||||
* Local variables:
|
||||
* c-file-style: "linux"
|
||||
* End:
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -43,17 +43,10 @@ static inline void rep_nop(void)
|
|||
#define ARCH_IS_STACKGROW(address) \
|
||||
(address + 32 >= UPT_SP(¤t->thread.regs.regs))
|
||||
|
||||
#define KSTK_EIP(tsk) KSTK_REG(tsk, EIP)
|
||||
#define KSTK_ESP(tsk) KSTK_REG(tsk, UESP)
|
||||
#define KSTK_EBP(tsk) KSTK_REG(tsk, EBP)
|
||||
|
||||
#include "asm/processor-generic.h"
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Overrides for Emacs so that we follow Linus's tabbing style.
|
||||
* Emacs will notice this stuff at the end of the file and automatically
|
||||
* adjust the settings for this buffer only. This must remain at the end
|
||||
* of the file.
|
||||
* ---------------------------------------------------------------------------
|
||||
* Local variables:
|
||||
* c-file-style: "linux"
|
||||
* End:
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -36,17 +36,9 @@ extern inline void rep_nop(void)
|
|||
#define ARCH_IS_STACKGROW(address) \
|
||||
(address + 128 >= UPT_SP(¤t->thread.regs.regs))
|
||||
|
||||
#define KSTK_EIP(tsk) KSTK_REG(tsk, RIP)
|
||||
#define KSTK_ESP(tsk) KSTK_REG(tsk, RSP)
|
||||
|
||||
#include "asm/processor-generic.h"
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Overrides for Emacs so that we follow Linus's tabbing style.
|
||||
* Emacs will notice this stuff at the end of the file and automatically
|
||||
* adjust the settings for this buffer only. This must remain at the end
|
||||
* of the file.
|
||||
* ---------------------------------------------------------------------------
|
||||
* Local variables:
|
||||
* c-file-style: "linux"
|
||||
* End:
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@ static inline int hard_smp_processor_id(void)
|
|||
extern int safe_smp_processor_id(void);
|
||||
extern int __cpu_disable(void);
|
||||
extern void __cpu_die(unsigned int cpu);
|
||||
extern void prefill_possible_map(void);
|
||||
|
||||
#endif /* !ASSEMBLY */
|
||||
|
||||
|
|
|
|||
|
|
@ -162,13 +162,13 @@ typedef struct acct acct_t;
|
|||
#ifdef __KERNEL__
|
||||
/*
|
||||
* Yet another set of HZ to *HZ helper functions.
|
||||
* See <linux/times.h> for the original.
|
||||
* See <linux/jiffies.h> for the original.
|
||||
*/
|
||||
|
||||
static inline u32 jiffies_to_AHZ(unsigned long x)
|
||||
{
|
||||
#if (TICK_NSEC % (NSEC_PER_SEC / AHZ)) == 0
|
||||
return x / (HZ / USER_HZ);
|
||||
return x / (HZ / AHZ);
|
||||
#else
|
||||
u64 tmp = (u64)x * TICK_NSEC;
|
||||
do_div(tmp, (NSEC_PER_SEC / AHZ));
|
||||
|
|
|
|||
|
|
@ -24,7 +24,12 @@ struct kioctx;
|
|||
#define KIOCB_SYNC_KEY (~0U)
|
||||
|
||||
/* ki_flags bits */
|
||||
#define KIF_LOCKED 0
|
||||
/*
|
||||
* This may be used for cancel/retry serialization in the future, but
|
||||
* for now it's unused and we probably don't want modules to even
|
||||
* think they can use it.
|
||||
*/
|
||||
/* #define KIF_LOCKED 0 */
|
||||
#define KIF_KICKED 1
|
||||
#define KIF_CANCELLED 2
|
||||
|
||||
|
|
@ -43,6 +48,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;
|
||||
|
|
|
|||
|
|
@ -76,6 +76,13 @@ struct atm_dev_stats {
|
|||
/* set interface ESI */
|
||||
#define ATM_SETESIF _IOW('a',ATMIOC_ITF+13,struct atmif_sioc)
|
||||
/* force interface ESI */
|
||||
#define ATM_ADDLECSADDR _IOW('a', ATMIOC_ITF+14, struct atmif_sioc)
|
||||
/* register a LECS address */
|
||||
#define ATM_DELLECSADDR _IOW('a', ATMIOC_ITF+15, struct atmif_sioc)
|
||||
/* unregister a LECS address */
|
||||
#define ATM_GETLECSADDR _IOW('a', ATMIOC_ITF+16, struct atmif_sioc)
|
||||
/* retrieve LECS address(es) */
|
||||
|
||||
#define ATM_GETSTAT _IOW('a',ATMIOC_SARCOM+0,struct atmif_sioc)
|
||||
/* get AAL layer statistics */
|
||||
#define ATM_GETSTATZ _IOW('a',ATMIOC_SARCOM+1,struct atmif_sioc)
|
||||
|
|
@ -328,6 +335,8 @@ struct atm_dev_addr {
|
|||
struct list_head entry; /* next address */
|
||||
};
|
||||
|
||||
enum atm_addr_type_t { ATM_ADDR_LOCAL, ATM_ADDR_LECS };
|
||||
|
||||
struct atm_dev {
|
||||
const struct atmdev_ops *ops; /* device operations; NULL if unused */
|
||||
const struct atmphy_ops *phy; /* PHY operations, may be undefined */
|
||||
|
|
@ -338,6 +347,7 @@ struct atm_dev {
|
|||
void *phy_data; /* private PHY date */
|
||||
unsigned long flags; /* device flags (ATM_DF_*) */
|
||||
struct list_head local; /* local ATM addresses */
|
||||
struct list_head lecs; /* LECS ATM addresses learned via ILMI */
|
||||
unsigned char esi[ESI_LEN]; /* ESI ("MAC" addr) */
|
||||
struct atm_cirange ci_range; /* VPI/VCI range */
|
||||
struct k_atm_dev_stats stats; /* statistics */
|
||||
|
|
@ -457,7 +467,7 @@ static inline void atm_dev_put(struct atm_dev *dev)
|
|||
|
||||
int atm_charge(struct atm_vcc *vcc,int truesize);
|
||||
struct sk_buff *atm_alloc_charge(struct atm_vcc *vcc,int pdu_size,
|
||||
int gfp_flags);
|
||||
gfp_t gfp_flags);
|
||||
int atm_pcr_goal(struct atm_trafprm *tp);
|
||||
|
||||
void vcc_release_async(struct atm_vcc *vcc, int reply);
|
||||
|
|
|
|||
|
|
@ -20,19 +20,19 @@
|
|||
|
||||
/* BFS inode layout on disk */
|
||||
struct bfs_inode {
|
||||
__u16 i_ino;
|
||||
__le16 i_ino;
|
||||
__u16 i_unused;
|
||||
__u32 i_sblock;
|
||||
__u32 i_eblock;
|
||||
__u32 i_eoffset;
|
||||
__u32 i_vtype;
|
||||
__u32 i_mode;
|
||||
__s32 i_uid;
|
||||
__s32 i_gid;
|
||||
__u32 i_nlink;
|
||||
__u32 i_atime;
|
||||
__u32 i_mtime;
|
||||
__u32 i_ctime;
|
||||
__le32 i_sblock;
|
||||
__le32 i_eblock;
|
||||
__le32 i_eoffset;
|
||||
__le32 i_vtype;
|
||||
__le32 i_mode;
|
||||
__le32 i_uid;
|
||||
__le32 i_gid;
|
||||
__le32 i_nlink;
|
||||
__le32 i_atime;
|
||||
__le32 i_mtime;
|
||||
__le32 i_ctime;
|
||||
__u32 i_padding[4];
|
||||
};
|
||||
|
||||
|
|
@ -41,17 +41,17 @@ struct bfs_inode {
|
|||
#define BFS_DIRS_PER_BLOCK 32
|
||||
|
||||
struct bfs_dirent {
|
||||
__u16 ino;
|
||||
__le16 ino;
|
||||
char name[BFS_NAMELEN];
|
||||
};
|
||||
|
||||
/* BFS superblock layout on disk */
|
||||
struct bfs_super_block {
|
||||
__u32 s_magic;
|
||||
__u32 s_start;
|
||||
__u32 s_end;
|
||||
__s32 s_from;
|
||||
__s32 s_to;
|
||||
__le32 s_magic;
|
||||
__le32 s_start;
|
||||
__le32 s_end;
|
||||
__le32 s_from;
|
||||
__le32 s_to;
|
||||
__s32 s_bfrom;
|
||||
__s32 s_bto;
|
||||
char s_fsname[6];
|
||||
|
|
@ -66,15 +66,15 @@ struct bfs_super_block {
|
|||
#define BFS_INO2OFF(ino) \
|
||||
((__u32)(((ino) - BFS_ROOT_INO) * sizeof(struct bfs_inode)) + BFS_BSIZE)
|
||||
#define BFS_NZFILESIZE(ip) \
|
||||
((cpu_to_le32((ip)->i_eoffset) + 1) - cpu_to_le32((ip)->i_sblock) * BFS_BSIZE)
|
||||
((le32_to_cpu((ip)->i_eoffset) + 1) - le32_to_cpu((ip)->i_sblock) * BFS_BSIZE)
|
||||
|
||||
#define BFS_FILESIZE(ip) \
|
||||
((ip)->i_sblock == 0 ? 0 : BFS_NZFILESIZE(ip))
|
||||
|
||||
#define BFS_FILEBLOCKS(ip) \
|
||||
((ip)->i_sblock == 0 ? 0 : (cpu_to_le32((ip)->i_eblock) + 1) - cpu_to_le32((ip)->i_sblock))
|
||||
((ip)->i_sblock == 0 ? 0 : (le32_to_cpu((ip)->i_eblock) + 1) - le32_to_cpu((ip)->i_sblock))
|
||||
#define BFS_UNCLEAN(bfs_sb, sb) \
|
||||
((cpu_to_le32(bfs_sb->s_from) != -1) && (cpu_to_le32(bfs_sb->s_to) != -1) && !(sb->s_flags & MS_RDONLY))
|
||||
((le32_to_cpu(bfs_sb->s_from) != -1) && (le32_to_cpu(bfs_sb->s_to) != -1) && !(sb->s_flags & MS_RDONLY))
|
||||
|
||||
|
||||
#endif /* _LINUX_BFS_FS_H */
|
||||
|
|
|
|||
|
|
@ -276,8 +276,8 @@ extern void bio_pair_release(struct bio_pair *dbio);
|
|||
extern struct bio_set *bioset_create(int, int, int);
|
||||
extern void bioset_free(struct bio_set *);
|
||||
|
||||
extern struct bio *bio_alloc(unsigned int __nocast, int);
|
||||
extern struct bio *bio_alloc_bioset(unsigned int __nocast, int, struct bio_set *);
|
||||
extern struct bio *bio_alloc(gfp_t, int);
|
||||
extern struct bio *bio_alloc_bioset(gfp_t, int, struct bio_set *);
|
||||
extern void bio_put(struct bio *);
|
||||
extern void bio_free(struct bio *, struct bio_set *);
|
||||
|
||||
|
|
@ -287,7 +287,7 @@ extern int bio_phys_segments(struct request_queue *, struct bio *);
|
|||
extern int bio_hw_segments(struct request_queue *, struct bio *);
|
||||
|
||||
extern void __bio_clone(struct bio *, struct bio *);
|
||||
extern struct bio *bio_clone(struct bio *, unsigned int __nocast);
|
||||
extern struct bio *bio_clone(struct bio *, gfp_t);
|
||||
|
||||
extern void bio_init(struct bio *);
|
||||
|
||||
|
|
|
|||
|
|
@ -172,7 +172,7 @@ void __brelse(struct buffer_head *);
|
|||
void __bforget(struct buffer_head *);
|
||||
void __breadahead(struct block_device *, sector_t block, int size);
|
||||
struct buffer_head *__bread(struct block_device *, sector_t block, int size);
|
||||
struct buffer_head *alloc_buffer_head(unsigned int __nocast gfp_flags);
|
||||
struct buffer_head *alloc_buffer_head(gfp_t gfp_flags);
|
||||
void free_buffer_head(struct buffer_head * bh);
|
||||
void FASTCALL(unlock_buffer(struct buffer_head *bh));
|
||||
void FASTCALL(__lock_buffer(struct buffer_head *bh));
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -142,9 +149,9 @@ struct cn_dev {
|
|||
|
||||
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_netlink_send(struct cn_msg *, u32, gfp_t);
|
||||
|
||||
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__ */
|
||||
|
|
|
|||
|
|
@ -392,4 +392,14 @@ extern cpumask_t cpu_present_map;
|
|||
#define for_each_online_cpu(cpu) for_each_cpu_mask((cpu), cpu_online_map)
|
||||
#define for_each_present_cpu(cpu) for_each_cpu_mask((cpu), cpu_present_map)
|
||||
|
||||
/* Find the highest possible smp_processor_id() */
|
||||
#define highest_possible_processor_id() \
|
||||
({ \
|
||||
unsigned int cpu, highest = 0; \
|
||||
for_each_cpu_mask(cpu, cpu_possible_map) \
|
||||
highest = cpu; \
|
||||
highest; \
|
||||
})
|
||||
|
||||
|
||||
#endif /* __LINUX_CPUMASK_H */
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ void cpuset_init_current_mems_allowed(void);
|
|||
void cpuset_update_current_mems_allowed(void);
|
||||
void cpuset_restrict_to_mems_allowed(unsigned long *nodes);
|
||||
int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl);
|
||||
extern int cpuset_zone_allowed(struct zone *z, unsigned int __nocast gfp_mask);
|
||||
extern int cpuset_zone_allowed(struct zone *z, gfp_t gfp_mask);
|
||||
extern int cpuset_excl_nodes_overlap(const struct task_struct *p);
|
||||
extern struct file_operations proc_cpuset_operations;
|
||||
extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer);
|
||||
|
|
@ -49,8 +49,7 @@ static inline int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static inline int cpuset_zone_allowed(struct zone *z,
|
||||
unsigned int __nocast gfp_mask)
|
||||
static inline int cpuset_zone_allowed(struct zone *z, gfp_t gfp_mask)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ struct dma_pool *dma_pool_create(const char *name, struct device *dev,
|
|||
|
||||
void dma_pool_destroy(struct dma_pool *pool);
|
||||
|
||||
void *dma_pool_alloc(struct dma_pool *pool, unsigned int __nocast mem_flags,
|
||||
void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags,
|
||||
dma_addr_t *handle);
|
||||
|
||||
void dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t addr);
|
||||
|
|
|
|||
|
|
@ -85,9 +85,9 @@ static inline void arch_free_page(struct page *page, int order) { }
|
|||
#endif
|
||||
|
||||
extern struct page *
|
||||
FASTCALL(__alloc_pages(unsigned int, unsigned int, struct zonelist *));
|
||||
FASTCALL(__alloc_pages(gfp_t, unsigned int, struct zonelist *));
|
||||
|
||||
static inline struct page *alloc_pages_node(int nid, unsigned int __nocast gfp_mask,
|
||||
static inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask,
|
||||
unsigned int order)
|
||||
{
|
||||
if (unlikely(order >= MAX_ORDER))
|
||||
|
|
@ -98,17 +98,17 @@ static inline struct page *alloc_pages_node(int nid, unsigned int __nocast gfp_m
|
|||
}
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
extern struct page *alloc_pages_current(unsigned int __nocast gfp_mask, unsigned order);
|
||||
extern struct page *alloc_pages_current(gfp_t gfp_mask, unsigned order);
|
||||
|
||||
static inline struct page *
|
||||
alloc_pages(unsigned int __nocast gfp_mask, unsigned int order)
|
||||
alloc_pages(gfp_t gfp_mask, unsigned int order)
|
||||
{
|
||||
if (unlikely(order >= MAX_ORDER))
|
||||
return NULL;
|
||||
|
||||
return alloc_pages_current(gfp_mask, order);
|
||||
}
|
||||
extern struct page *alloc_page_vma(unsigned __nocast gfp_mask,
|
||||
extern struct page *alloc_page_vma(gfp_t gfp_mask,
|
||||
struct vm_area_struct *vma, unsigned long addr);
|
||||
#else
|
||||
#define alloc_pages(gfp_mask, order) \
|
||||
|
|
@ -117,8 +117,8 @@ extern struct page *alloc_page_vma(unsigned __nocast gfp_mask,
|
|||
#endif
|
||||
#define alloc_page(gfp_mask) alloc_pages(gfp_mask, 0)
|
||||
|
||||
extern unsigned long FASTCALL(__get_free_pages(unsigned int __nocast gfp_mask, unsigned int order));
|
||||
extern unsigned long FASTCALL(get_zeroed_page(unsigned int __nocast gfp_mask));
|
||||
extern unsigned long FASTCALL(__get_free_pages(gfp_t gfp_mask, unsigned int order));
|
||||
extern unsigned long FASTCALL(get_zeroed_page(gfp_t gfp_mask));
|
||||
|
||||
#define __get_free_page(gfp_mask) \
|
||||
__get_free_pages((gfp_mask),0)
|
||||
|
|
|
|||
|
|
@ -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)) && \
|
||||
|
|
|
|||
|
|
@ -935,7 +935,7 @@ void journal_put_journal_head(struct journal_head *jh);
|
|||
*/
|
||||
extern kmem_cache_t *jbd_handle_cache;
|
||||
|
||||
static inline handle_t *jbd_alloc_handle(unsigned int __nocast gfp_flags)
|
||||
static inline handle_t *jbd_alloc_handle(gfp_t gfp_flags)
|
||||
{
|
||||
return kmem_cache_alloc(jbd_handle_cache, gfp_flags);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,92 +38,21 @@ struct keyring_list {
|
|||
struct key *keys[0];
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* 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)
|
||||
extern int key_task_permission(const key_ref_t key_ref,
|
||||
struct task_struct *context,
|
||||
key_perm_t perm);
|
||||
|
||||
static inline int key_permission(const key_ref_t key_ref, key_perm_t perm)
|
||||
{
|
||||
key_perm_t kperm;
|
||||
|
||||
if (key->uid == current->fsuid)
|
||||
kperm = key->perm >> 16;
|
||||
else if (key->gid != -1 &&
|
||||
key->perm & KEY_GRP_ALL &&
|
||||
in_group_p(key->gid)
|
||||
)
|
||||
kperm = key->perm >> 8;
|
||||
else
|
||||
kperm = key->perm;
|
||||
|
||||
kperm = kperm & perm & KEY_ALL;
|
||||
|
||||
return kperm == perm;
|
||||
return key_task_permission(key_ref, current, 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)
|
||||
{
|
||||
key_perm_t kperm;
|
||||
|
||||
if (key->uid == current->fsuid)
|
||||
kperm = key->perm >> 16;
|
||||
else if (key->gid != -1 &&
|
||||
key->perm & KEY_GRP_ALL &&
|
||||
in_group_p(key->gid)
|
||||
)
|
||||
kperm = key->perm >> 8;
|
||||
else
|
||||
kperm = key->perm;
|
||||
|
||||
kperm = kperm & perm & KEY_ALL;
|
||||
|
||||
return kperm != 0;
|
||||
}
|
||||
|
||||
static inline int key_task_groups_search(struct task_struct *tsk, gid_t gid)
|
||||
{
|
||||
int ret;
|
||||
|
||||
task_lock(tsk);
|
||||
ret = groups_search(tsk->group_info, gid);
|
||||
task_unlock(tsk);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int key_task_permission(const struct key *key,
|
||||
struct task_struct *context,
|
||||
key_perm_t perm)
|
||||
{
|
||||
key_perm_t kperm;
|
||||
|
||||
if (key->uid == context->fsuid) {
|
||||
kperm = key->perm >> 16;
|
||||
}
|
||||
else if (key->gid != -1 &&
|
||||
key->perm & KEY_GRP_ALL && (
|
||||
key->gid == context->fsgid ||
|
||||
key_task_groups_search(context, key->gid)
|
||||
)
|
||||
) {
|
||||
kperm = key->perm >> 8;
|
||||
}
|
||||
else {
|
||||
kperm = key->perm;
|
||||
}
|
||||
|
||||
kperm = kperm & perm & KEY_ALL;
|
||||
|
||||
return kperm == perm;
|
||||
|
||||
}
|
||||
|
||||
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; })
|
||||
|
|
|
|||
|
|
@ -35,8 +35,8 @@ struct kfifo {
|
|||
};
|
||||
|
||||
extern struct kfifo *kfifo_init(unsigned char *buffer, unsigned int size,
|
||||
unsigned int __nocast gfp_mask, spinlock_t *lock);
|
||||
extern struct kfifo *kfifo_alloc(unsigned int size, unsigned int __nocast gfp_mask,
|
||||
gfp_t gfp_mask, spinlock_t *lock);
|
||||
extern struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask,
|
||||
spinlock_t *lock);
|
||||
extern void kfifo_free(struct kfifo *fifo);
|
||||
extern unsigned int __kfifo_put(struct kfifo *fifo,
|
||||
|
|
|
|||
|
|
@ -393,6 +393,7 @@ extern int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_i
|
|||
extern void ata_pci_remove_one (struct pci_dev *pdev);
|
||||
#endif /* CONFIG_PCI */
|
||||
extern int ata_device_add(struct ata_probe_ent *ent);
|
||||
extern void ata_host_set_remove(struct ata_host_set *host_set);
|
||||
extern int ata_scsi_detect(Scsi_Host_Template *sht);
|
||||
extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg);
|
||||
extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *));
|
||||
|
|
|
|||
|
|
@ -442,12 +442,14 @@ static inline void list_splice_init(struct list_head *list,
|
|||
* as long as the traversal is guarded by rcu_read_lock().
|
||||
*/
|
||||
#define list_for_each_rcu(pos, head) \
|
||||
for (pos = (head)->next; prefetch(pos->next), pos != (head); \
|
||||
pos = rcu_dereference(pos->next))
|
||||
for (pos = (head)->next; \
|
||||
prefetch(rcu_dereference(pos)->next), pos != (head); \
|
||||
pos = pos->next)
|
||||
|
||||
#define __list_for_each_rcu(pos, head) \
|
||||
for (pos = (head)->next; pos != (head); \
|
||||
pos = rcu_dereference(pos->next))
|
||||
for (pos = (head)->next; \
|
||||
rcu_dereference(pos) != (head); \
|
||||
pos = pos->next)
|
||||
|
||||
/**
|
||||
* list_for_each_safe_rcu - iterate over an rcu-protected list safe
|
||||
|
|
@ -461,8 +463,9 @@ static inline void list_splice_init(struct list_head *list,
|
|||
* as long as the traversal is guarded by rcu_read_lock().
|
||||
*/
|
||||
#define list_for_each_safe_rcu(pos, n, head) \
|
||||
for (pos = (head)->next, n = pos->next; pos != (head); \
|
||||
pos = rcu_dereference(n), n = pos->next)
|
||||
for (pos = (head)->next; \
|
||||
n = rcu_dereference(pos)->next, pos != (head); \
|
||||
pos = n)
|
||||
|
||||
/**
|
||||
* list_for_each_entry_rcu - iterate over rcu list of given type
|
||||
|
|
@ -474,11 +477,11 @@ static inline void list_splice_init(struct list_head *list,
|
|||
* the _rcu list-mutation primitives such as list_add_rcu()
|
||||
* as long as the traversal is guarded by rcu_read_lock().
|
||||
*/
|
||||
#define list_for_each_entry_rcu(pos, head, member) \
|
||||
for (pos = list_entry((head)->next, typeof(*pos), member); \
|
||||
prefetch(pos->member.next), &pos->member != (head); \
|
||||
pos = rcu_dereference(list_entry(pos->member.next, \
|
||||
typeof(*pos), member)))
|
||||
#define list_for_each_entry_rcu(pos, head, member) \
|
||||
for (pos = list_entry((head)->next, typeof(*pos), member); \
|
||||
prefetch(rcu_dereference(pos)->member.next), \
|
||||
&pos->member != (head); \
|
||||
pos = list_entry(pos->member.next, typeof(*pos), member))
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -492,8 +495,9 @@ static inline void list_splice_init(struct list_head *list,
|
|||
* as long as the traversal is guarded by rcu_read_lock().
|
||||
*/
|
||||
#define list_for_each_continue_rcu(pos, head) \
|
||||
for ((pos) = (pos)->next; prefetch((pos)->next), (pos) != (head); \
|
||||
(pos) = rcu_dereference((pos)->next))
|
||||
for ((pos) = (pos)->next; \
|
||||
prefetch(rcu_dereference((pos))->next), (pos) != (head); \
|
||||
(pos) = (pos)->next)
|
||||
|
||||
/*
|
||||
* Double linked lists with a single pointer list head.
|
||||
|
|
@ -696,8 +700,9 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev,
|
|||
pos = n)
|
||||
|
||||
#define hlist_for_each_rcu(pos, head) \
|
||||
for ((pos) = (head)->first; pos && ({ prefetch((pos)->next); 1; }); \
|
||||
(pos) = rcu_dereference((pos)->next))
|
||||
for ((pos) = (head)->first; \
|
||||
rcu_dereference((pos)) && ({ prefetch((pos)->next); 1; }); \
|
||||
(pos) = (pos)->next)
|
||||
|
||||
/**
|
||||
* hlist_for_each_entry - iterate over list of given type
|
||||
|
|
@ -762,9 +767,9 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev,
|
|||
*/
|
||||
#define hlist_for_each_entry_rcu(tpos, pos, head, member) \
|
||||
for (pos = (head)->first; \
|
||||
pos && ({ prefetch(pos->next); 1;}) && \
|
||||
rcu_dereference(pos) && ({ prefetch(pos->next); 1;}) && \
|
||||
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
|
||||
pos = rcu_dereference(pos->next))
|
||||
pos = pos->next)
|
||||
|
||||
#else
|
||||
#warning "don't include kernel headers in userspace"
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
#include <linux/wait.h>
|
||||
|
||||
typedef void * (mempool_alloc_t)(unsigned int __nocast gfp_mask, void *pool_data);
|
||||
typedef void * (mempool_alloc_t)(gfp_t gfp_mask, void *pool_data);
|
||||
typedef void (mempool_free_t)(void *element, void *pool_data);
|
||||
|
||||
typedef struct mempool_s {
|
||||
|
|
@ -26,17 +26,16 @@ extern mempool_t *mempool_create(int min_nr, mempool_alloc_t *alloc_fn,
|
|||
extern mempool_t *mempool_create_node(int min_nr, mempool_alloc_t *alloc_fn,
|
||||
mempool_free_t *free_fn, void *pool_data, int nid);
|
||||
|
||||
extern int mempool_resize(mempool_t *pool, int new_min_nr,
|
||||
unsigned int __nocast gfp_mask);
|
||||
extern int mempool_resize(mempool_t *pool, int new_min_nr, gfp_t gfp_mask);
|
||||
extern void mempool_destroy(mempool_t *pool);
|
||||
extern void * mempool_alloc(mempool_t *pool, unsigned int __nocast gfp_mask);
|
||||
extern void * mempool_alloc(mempool_t *pool, gfp_t gfp_mask);
|
||||
extern void mempool_free(void *element, mempool_t *pool);
|
||||
|
||||
/*
|
||||
* A mempool_alloc_t and mempool_free_t that get the memory from
|
||||
* a slab that is passed in through pool_data.
|
||||
*/
|
||||
void *mempool_alloc_slab(unsigned int __nocast gfp_mask, void *pool_data);
|
||||
void *mempool_alloc_slab(gfp_t gfp_mask, void *pool_data);
|
||||
void mempool_free_slab(void *element, void *pool_data);
|
||||
|
||||
#endif /* _LINUX_MEMPOOL_H */
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -41,11 +41,15 @@ enum nfnetlink_groups {
|
|||
struct nfattr
|
||||
{
|
||||
u_int16_t nfa_len;
|
||||
u_int16_t nfa_type;
|
||||
u_int16_t nfa_type; /* we use 15 bits for the type, and the highest
|
||||
* bit to indicate whether the payload is nested */
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/* FIXME: Shamelessly copy and pasted from rtnetlink.h, it's time
|
||||
* to put this in a generic file */
|
||||
/* FIXME: Apart from NFNL_NFA_NESTED shamelessly copy and pasted from
|
||||
* rtnetlink.h, it's time to put this in a generic file */
|
||||
|
||||
#define NFNL_NFA_NEST 0x8000
|
||||
#define NFA_TYPE(attr) ((attr)->nfa_type & 0x7fff)
|
||||
|
||||
#define NFA_ALIGNTO 4
|
||||
#define NFA_ALIGN(len) (((len) + NFA_ALIGNTO - 1) & ~(NFA_ALIGNTO - 1))
|
||||
|
|
@ -59,7 +63,7 @@ struct nfattr
|
|||
#define NFA_PAYLOAD(nfa) ((int)((nfa)->nfa_len) - NFA_LENGTH(0))
|
||||
#define NFA_NEST(skb, type) \
|
||||
({ struct nfattr *__start = (struct nfattr *) (skb)->tail; \
|
||||
NFA_PUT(skb, type, 0, NULL); \
|
||||
NFA_PUT(skb, (NFNL_NFA_NEST | type), 0, NULL); \
|
||||
__start; })
|
||||
#define NFA_NEST_END(skb, start) \
|
||||
({ (start)->nfa_len = ((skb)->tail - (unsigned char *) (start)); \
|
||||
|
|
|
|||
|
|
@ -70,15 +70,24 @@ enum ctattr_l4proto {
|
|||
|
||||
enum ctattr_protoinfo {
|
||||
CTA_PROTOINFO_UNSPEC,
|
||||
CTA_PROTOINFO_TCP_STATE,
|
||||
CTA_PROTOINFO_TCP,
|
||||
__CTA_PROTOINFO_MAX
|
||||
};
|
||||
#define CTA_PROTOINFO_MAX (__CTA_PROTOINFO_MAX - 1)
|
||||
|
||||
enum ctattr_protoinfo_tcp {
|
||||
CTA_PROTOINFO_TCP_UNSPEC,
|
||||
CTA_PROTOINFO_TCP_STATE,
|
||||
__CTA_PROTOINFO_TCP_MAX
|
||||
};
|
||||
#define CTA_PROTOINFO_TCP_MAX (__CTA_PROTOINFO_TCP_MAX - 1)
|
||||
|
||||
enum ctattr_counters {
|
||||
CTA_COUNTERS_UNSPEC,
|
||||
CTA_COUNTERS_PACKETS,
|
||||
CTA_COUNTERS_BYTES,
|
||||
CTA_COUNTERS_PACKETS, /* old 64bit counters */
|
||||
CTA_COUNTERS_BYTES, /* old 64bit counters */
|
||||
CTA_COUNTERS32_PACKETS,
|
||||
CTA_COUNTERS32_BYTES,
|
||||
__CTA_COUNTERS_MAX
|
||||
};
|
||||
#define CTA_COUNTERS_MAX (__CTA_COUNTERS_MAX - 1)
|
||||
|
|
|
|||
|
|
@ -117,6 +117,10 @@ enum ip_conntrack_events
|
|||
/* NAT info */
|
||||
IPCT_NATINFO_BIT = 10,
|
||||
IPCT_NATINFO = (1 << IPCT_NATINFO_BIT),
|
||||
|
||||
/* Counter highest bit has been set */
|
||||
IPCT_COUNTER_FILLING_BIT = 11,
|
||||
IPCT_COUNTER_FILLING = (1 << IPCT_COUNTER_FILLING_BIT),
|
||||
};
|
||||
|
||||
enum ip_conntrack_expect_events {
|
||||
|
|
@ -192,8 +196,8 @@ do { \
|
|||
|
||||
struct ip_conntrack_counter
|
||||
{
|
||||
u_int64_t packets;
|
||||
u_int64_t bytes;
|
||||
u_int32_t packets;
|
||||
u_int32_t bytes;
|
||||
};
|
||||
|
||||
struct ip_conntrack_helper;
|
||||
|
|
|
|||
|
|
@ -52,6 +52,9 @@ struct ip_conntrack_protocol
|
|||
int (*to_nfattr)(struct sk_buff *skb, struct nfattr *nfa,
|
||||
const struct ip_conntrack *ct);
|
||||
|
||||
/* convert nfnetlink attributes to protoinfo */
|
||||
int (*from_nfattr)(struct nfattr *tb[], struct ip_conntrack *ct);
|
||||
|
||||
int (*tuple_to_nfattr)(struct sk_buff *skb,
|
||||
const struct ip_conntrack_tuple *t);
|
||||
int (*nfattr_to_tuple)(struct nfattr *tb[],
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef _IP_CONNTRACK_TUPLE_H
|
||||
#define _IP_CONNTRACK_TUPLE_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* A `tuple' is a structure containing the information to uniquely
|
||||
identify a connection. ie. if two packets have the same tuple, they
|
||||
are in the same connection; if not, they are not.
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue