diff options
| author | David Woodhouse <dwmw2@infradead.org> | 2006-10-21 11:46:04 -0400 |
|---|---|---|
| committer | David Woodhouse <dwmw2@infradead.org> | 2006-10-21 11:46:04 -0400 |
| commit | 513b046c96cc2fbce730a3474f6f7ff0c4fdd05c (patch) | |
| tree | e8006368b6f643067486f92405a404757807d6da /include | |
| parent | 82810b7b6cc7a74c68881a13b0eb66c7a6370fcc (diff) | |
| parent | c7a3bd177f248d01ee18a01d22048c80e071c331 (diff) | |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'include')
363 files changed, 8947 insertions, 2959 deletions
diff --git a/include/acpi/aclocal.h b/include/acpi/aclocal.h index a4d0e73d5aca..063c4b54290f 100644 --- a/include/acpi/aclocal.h +++ b/include/acpi/aclocal.h | |||
| @@ -708,7 +708,7 @@ struct acpi_bit_register_info { | |||
| 708 | * must be preserved. | 708 | * must be preserved. |
| 709 | */ | 709 | */ |
| 710 | #define ACPI_PM1_STATUS_PRESERVED_BITS 0x0800 /* Bit 11 */ | 710 | #define ACPI_PM1_STATUS_PRESERVED_BITS 0x0800 /* Bit 11 */ |
| 711 | #define ACPI_PM1_CONTROL_PRESERVED_BITS 0x0201 /* Bit 9, Bit 0 (SCI_EN) */ | 711 | #define ACPI_PM1_CONTROL_PRESERVED_BITS 0x0200 /* Bit 9 (whatever) */ |
| 712 | 712 | ||
| 713 | /* | 713 | /* |
| 714 | * Register IDs | 714 | * Register IDs |
diff --git a/include/acpi/pdc_intel.h b/include/acpi/pdc_intel.h index c5472be6f3a2..e72bfdd887f9 100644 --- a/include/acpi/pdc_intel.h +++ b/include/acpi/pdc_intel.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #define ACPI_PDC_SMP_C_SWCOORD (0x0040) | 13 | #define ACPI_PDC_SMP_C_SWCOORD (0x0040) |
| 14 | #define ACPI_PDC_SMP_T_SWCOORD (0x0080) | 14 | #define ACPI_PDC_SMP_T_SWCOORD (0x0080) |
| 15 | #define ACPI_PDC_C_C1_FFH (0x0100) | 15 | #define ACPI_PDC_C_C1_FFH (0x0100) |
| 16 | #define ACPI_PDC_C_C2C3_FFH (0x0200) | ||
| 16 | 17 | ||
| 17 | #define ACPI_PDC_EST_CAPABILITY_SMP (ACPI_PDC_SMP_C1PT | \ | 18 | #define ACPI_PDC_EST_CAPABILITY_SMP (ACPI_PDC_SMP_C1PT | \ |
| 18 | ACPI_PDC_C_C1_HALT | \ | 19 | ACPI_PDC_C_C1_HALT | \ |
| @@ -23,8 +24,10 @@ | |||
| 23 | ACPI_PDC_SMP_P_SWCOORD | \ | 24 | ACPI_PDC_SMP_P_SWCOORD | \ |
| 24 | ACPI_PDC_P_FFH) | 25 | ACPI_PDC_P_FFH) |
| 25 | 26 | ||
| 26 | #define ACPI_PDC_C_CAPABILITY_SMP (ACPI_PDC_SMP_C2C3 | \ | 27 | #define ACPI_PDC_C_CAPABILITY_SMP (ACPI_PDC_SMP_C2C3 | \ |
| 27 | ACPI_PDC_SMP_C1PT | \ | 28 | ACPI_PDC_SMP_C1PT | \ |
| 28 | ACPI_PDC_C_C1_HALT) | 29 | ACPI_PDC_C_C1_HALT | \ |
| 30 | ACPI_PDC_C_C1_FFH | \ | ||
| 31 | ACPI_PDC_C_C2C3_FFH) | ||
| 29 | 32 | ||
| 30 | #endif /* __PDC_INTEL_H__ */ | 33 | #endif /* __PDC_INTEL_H__ */ |
diff --git a/include/acpi/processor.h b/include/acpi/processor.h index 9dd5b75961f8..7798d2a9f793 100644 --- a/include/acpi/processor.h +++ b/include/acpi/processor.h | |||
| @@ -29,6 +29,9 @@ | |||
| 29 | #define DOMAIN_COORD_TYPE_SW_ANY 0xfd | 29 | #define DOMAIN_COORD_TYPE_SW_ANY 0xfd |
| 30 | #define DOMAIN_COORD_TYPE_HW_ALL 0xfe | 30 | #define DOMAIN_COORD_TYPE_HW_ALL 0xfe |
| 31 | 31 | ||
| 32 | #define ACPI_CSTATE_SYSTEMIO (0) | ||
| 33 | #define ACPI_CSTATE_FFH (1) | ||
| 34 | |||
| 32 | /* Power Management */ | 35 | /* Power Management */ |
| 33 | 36 | ||
| 34 | struct acpi_processor_cx; | 37 | struct acpi_processor_cx; |
| @@ -58,6 +61,8 @@ struct acpi_processor_cx { | |||
| 58 | u8 valid; | 61 | u8 valid; |
| 59 | u8 type; | 62 | u8 type; |
| 60 | u32 address; | 63 | u32 address; |
| 64 | u8 space_id; | ||
| 65 | u8 index; | ||
| 61 | u32 latency; | 66 | u32 latency; |
| 62 | u32 latency_ticks; | 67 | u32 latency_ticks; |
| 63 | u32 power; | 68 | u32 power; |
| @@ -206,6 +211,9 @@ void arch_acpi_processor_init_pdc(struct acpi_processor *pr); | |||
| 206 | #ifdef ARCH_HAS_POWER_INIT | 211 | #ifdef ARCH_HAS_POWER_INIT |
| 207 | void acpi_processor_power_init_bm_check(struct acpi_processor_flags *flags, | 212 | void acpi_processor_power_init_bm_check(struct acpi_processor_flags *flags, |
| 208 | unsigned int cpu); | 213 | unsigned int cpu); |
| 214 | int acpi_processor_ffh_cstate_probe(unsigned int cpu, | ||
| 215 | struct acpi_processor_cx *cx, struct acpi_power_register *reg); | ||
| 216 | void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx *cstate); | ||
| 209 | #else | 217 | #else |
| 210 | static inline void acpi_processor_power_init_bm_check(struct | 218 | static inline void acpi_processor_power_init_bm_check(struct |
| 211 | acpi_processor_flags | 219 | acpi_processor_flags |
| @@ -214,6 +222,16 @@ static inline void acpi_processor_power_init_bm_check(struct | |||
| 214 | flags->bm_check = 1; | 222 | flags->bm_check = 1; |
| 215 | return; | 223 | return; |
| 216 | } | 224 | } |
| 225 | static inline int acpi_processor_ffh_cstate_probe(unsigned int cpu, | ||
| 226 | struct acpi_processor_cx *cx, struct acpi_power_register *reg) | ||
| 227 | { | ||
| 228 | return -1; | ||
| 229 | } | ||
| 230 | static inline void acpi_processor_ffh_cstate_enter( | ||
| 231 | struct acpi_processor_cx *cstate) | ||
| 232 | { | ||
| 233 | return; | ||
| 234 | } | ||
| 217 | #endif | 235 | #endif |
| 218 | 236 | ||
| 219 | /* in processor_perflib.c */ | 237 | /* in processor_perflib.c */ |
diff --git a/include/asm-alpha/io.h b/include/asm-alpha/io.h index f5ae98c25d1f..5d15af24573b 100644 --- a/include/asm-alpha/io.h +++ b/include/asm-alpha/io.h | |||
| @@ -533,19 +533,6 @@ extern void outsl (unsigned long port, const void *src, unsigned long count); | |||
| 533 | #define eth_io_copy_and_sum(skb,src,len,unused) \ | 533 | #define eth_io_copy_and_sum(skb,src,len,unused) \ |
| 534 | memcpy_fromio((skb)->data,src,len) | 534 | memcpy_fromio((skb)->data,src,len) |
| 535 | 535 | ||
| 536 | static inline int | ||
| 537 | check_signature(const volatile void __iomem *io_addr, | ||
| 538 | const unsigned char *signature, int length) | ||
| 539 | { | ||
| 540 | do { | ||
| 541 | if (readb(io_addr) != *signature) | ||
| 542 | return 0; | ||
| 543 | io_addr++; | ||
| 544 | signature++; | ||
| 545 | } while (--length); | ||
| 546 | return 1; | ||
| 547 | } | ||
| 548 | |||
| 549 | /* | 536 | /* |
| 550 | * The Alpha Jensen hardware for some rather strange reason puts | 537 | * The Alpha Jensen hardware for some rather strange reason puts |
| 551 | * the RTC clock at 0x170 instead of 0x70. Probably due to some | 538 | * the RTC clock at 0x170 instead of 0x70. Probably due to some |
diff --git a/include/asm-alpha/irq_regs.h b/include/asm-alpha/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-alpha/irq_regs.h | |||
| @@ -0,0 +1 @@ | |||
| #include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-alpha/machvec.h b/include/asm-alpha/machvec.h index aced22f91752..a86c083cdf7f 100644 --- a/include/asm-alpha/machvec.h +++ b/include/asm-alpha/machvec.h | |||
| @@ -15,7 +15,6 @@ | |||
| 15 | 15 | ||
| 16 | struct task_struct; | 16 | struct task_struct; |
| 17 | struct mm_struct; | 17 | struct mm_struct; |
| 18 | struct pt_regs; | ||
| 19 | struct vm_area_struct; | 18 | struct vm_area_struct; |
| 20 | struct linux_hose_info; | 19 | struct linux_hose_info; |
| 21 | struct pci_dev; | 20 | struct pci_dev; |
| @@ -79,8 +78,8 @@ struct alpha_machine_vector | |||
| 79 | 78 | ||
| 80 | void (*update_irq_hw)(unsigned long, unsigned long, int); | 79 | void (*update_irq_hw)(unsigned long, unsigned long, int); |
| 81 | void (*ack_irq)(unsigned long); | 80 | void (*ack_irq)(unsigned long); |
| 82 | void (*device_interrupt)(unsigned long vector, struct pt_regs *regs); | 81 | void (*device_interrupt)(unsigned long vector); |
| 83 | void (*machine_check)(u64 vector, u64 la, struct pt_regs *regs); | 82 | void (*machine_check)(u64 vector, u64 la); |
| 84 | 83 | ||
| 85 | void (*smp_callin)(void); | 84 | void (*smp_callin)(void); |
| 86 | void (*init_arch)(void); | 85 | void (*init_arch)(void); |
diff --git a/include/asm-arm/arch-at91rm9200/at91rm9200_usart.h b/include/asm-arm/arch-at91rm9200/at91rm9200_usart.h deleted file mode 100644 index 79f851e31b9c..000000000000 --- a/include/asm-arm/arch-at91rm9200/at91rm9200_usart.h +++ /dev/null | |||
| @@ -1,123 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * include/asm-arm/arch-at91rm9200/at91rm9200_usart.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2005 Ivan Kokshaysky | ||
| 5 | * Copyright (C) SAN People | ||
| 6 | * | ||
| 7 | * USART registers. | ||
| 8 | * Based on AT91RM9200 datasheet revision E. | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify | ||
| 11 | * it under the terms of the GNU General Public License as published by | ||
| 12 | * the Free Software Foundation; either version 2 of the License, or | ||
| 13 | * (at your option) any later version. | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef AT91RM9200_USART_H | ||
| 17 | #define AT91RM9200_USART_H | ||
| 18 | |||
| 19 | #define AT91_US_CR 0x00 /* Control Register */ | ||
| 20 | #define AT91_US_RSTRX (1 << 2) /* Reset Receiver */ | ||
| 21 | #define AT91_US_RSTTX (1 << 3) /* Reset Transmitter */ | ||
| 22 | #define AT91_US_RXEN (1 << 4) /* Receiver Enable */ | ||
| 23 | #define AT91_US_RXDIS (1 << 5) /* Receiver Disable */ | ||
| 24 | #define AT91_US_TXEN (1 << 6) /* Transmitter Enable */ | ||
| 25 | #define AT91_US_TXDIS (1 << 7) /* Transmitter Disable */ | ||
| 26 | #define AT91_US_RSTSTA (1 << 8) /* Reset Status Bits */ | ||
| 27 | #define AT91_US_STTBRK (1 << 9) /* Start Break */ | ||
| 28 | #define AT91_US_STPBRK (1 << 10) /* Stop Break */ | ||
| 29 | #define AT91_US_STTTO (1 << 11) /* Start Time-out */ | ||
| 30 | #define AT91_US_SENDA (1 << 12) /* Send Address */ | ||
| 31 | #define AT91_US_RSTIT (1 << 13) /* Reset Iterations */ | ||
| 32 | #define AT91_US_RSTNACK (1 << 14) /* Reset Non Acknowledge */ | ||
| 33 | #define AT91_US_RETTO (1 << 15) /* Rearm Time-out */ | ||
| 34 | #define AT91_US_DTREN (1 << 16) /* Data Terminal Ready Enable */ | ||
| 35 | #define AT91_US_DTRDIS (1 << 17) /* Data Terminal Ready Disable */ | ||
| 36 | #define AT91_US_RTSEN (1 << 18) /* Request To Send Enable */ | ||
| 37 | #define AT91_US_RTSDIS (1 << 19) /* Request To Send Disable */ | ||
| 38 | |||
| 39 | #define AT91_US_MR 0x04 /* Mode Register */ | ||
| 40 | #define AT91_US_USMODE (0xf << 0) /* Mode of the USART */ | ||
| 41 | #define AT91_US_USMODE_NORMAL 0 | ||
| 42 | #define AT91_US_USMODE_RS485 1 | ||
| 43 | #define AT91_US_USMODE_HWHS 2 | ||
| 44 | #define AT91_US_USMODE_MODEM 3 | ||
| 45 | #define AT91_US_USMODE_ISO7816_T0 4 | ||
| 46 | #define AT91_US_USMODE_ISO7816_T1 6 | ||
| 47 | #define AT91_US_USMODE_IRDA 8 | ||
| 48 | #define AT91_US_USCLKS (3 << 4) /* Clock Selection */ | ||
| 49 | #define AT91_US_CHRL (3 << 6) /* Character Length */ | ||
| 50 | #define AT91_US_CHRL_5 (0 << 6) | ||
| 51 | #define AT91_US_CHRL_6 (1 << 6) | ||
| 52 | #define AT91_US_CHRL_7 (2 << 6) | ||
| 53 | #define AT91_US_CHRL_8 (3 << 6) | ||
| 54 | #define AT91_US_SYNC (1 << 8) /* Synchronous Mode Select */ | ||
| 55 | #define AT91_US_PAR (7 << 9) /* Parity Type */ | ||
| 56 | #define AT91_US_PAR_EVEN (0 << 9) | ||
| 57 | #define AT91_US_PAR_ODD (1 << 9) | ||
| 58 | #define AT91_US_PAR_SPACE (2 << 9) | ||
| 59 | #define AT91_US_PAR_MARK (3 << 9) | ||
| 60 | #define AT91_US_PAR_NONE (4 << 9) | ||
| 61 | #define AT91_US_PAR_MULTI_DROP (6 << 9) | ||
| 62 | #define AT91_US_NBSTOP (3 << 12) /* Number of Stop Bits */ | ||
| 63 | #define AT91_US_NBSTOP_1 (0 << 12) | ||
| 64 | #define AT91_US_NBSTOP_1_5 (1 << 12) | ||
| 65 | #define AT91_US_NBSTOP_2 (2 << 12) | ||
| 66 | #define AT91_US_CHMODE (3 << 14) /* Channel Mode */ | ||
| 67 | #define AT91_US_CHMODE_NORMAL (0 << 14) | ||
| 68 | #define AT91_US_CHMODE_ECHO (1 << 14) | ||
| 69 | #define AT91_US_CHMODE_LOC_LOOP (2 << 14) | ||
| 70 | #define AT91_US_CHMODE_REM_LOOP (3 << 14) | ||
| 71 | #define AT91_US_MSBF (1 << 16) /* Bit Order */ | ||
| 72 | #define AT91_US_MODE9 (1 << 17) /* 9-bit Character Length */ | ||
| 73 | #define AT91_US_CLKO (1 << 18) /* Clock Output Select */ | ||
| 74 | #define AT91_US_OVER (1 << 19) /* Oversampling Mode */ | ||
| 75 | #define AT91_US_INACK (1 << 20) /* Inhibit Non Acknowledge */ | ||
| 76 | #define AT91_US_DSNACK (1 << 21) /* Disable Successive NACK */ | ||
| 77 | #define AT91_US_MAX_ITER (7 << 24) /* Max Iterations */ | ||
| 78 | #define AT91_US_FILTER (1 << 28) /* Infrared Receive Line Filter */ | ||
| 79 | |||
| 80 | #define AT91_US_IER 0x08 /* Interrupt Enable Register */ | ||
| 81 | #define AT91_US_RXRDY (1 << 0) /* Receiver Ready */ | ||
| 82 | #define AT91_US_TXRDY (1 << 1) /* Transmitter Ready */ | ||
| 83 | #define AT91_US_RXBRK (1 << 2) /* Break Received / End of Break */ | ||
| 84 | #define AT91_US_ENDRX (1 << 3) /* End of Receiver Transfer */ | ||
| 85 | #define AT91_US_ENDTX (1 << 4) /* End of Transmitter Transfer */ | ||
| 86 | #define AT91_US_OVRE (1 << 5) /* Overrun Error */ | ||
| 87 | #define AT91_US_FRAME (1 << 6) /* Framing Error */ | ||
| 88 | #define AT91_US_PARE (1 << 7) /* Parity Error */ | ||
| 89 | #define AT91_US_TIMEOUT (1 << 8) /* Receiver Time-out */ | ||
| 90 | #define AT91_US_TXEMPTY (1 << 9) /* Transmitter Empty */ | ||
| 91 | #define AT91_US_ITERATION (1 << 10) /* Max number of Repetitions Reached */ | ||
| 92 | #define AT91_US_TXBUFE (1 << 11) /* Transmission Buffer Empty */ | ||
| 93 | #define AT91_US_RXBUFF (1 << 12) /* Reception Buffer Full */ | ||
| 94 | #define AT91_US_NACK (1 << 13) /* Non Acknowledge */ | ||
| 95 | #define AT91_US_RIIC (1 << 16) /* Ring Indicator Input Change */ | ||
| 96 | #define AT91_US_DSRIC (1 << 17) /* Data Set Ready Input Change */ | ||
| 97 | #define AT91_US_DCDIC (1 << 18) /* Data Carrier Detect Input Change */ | ||
| 98 | #define AT91_US_CTSIC (1 << 19) /* Clear to Send Input Change */ | ||
| 99 | #define AT91_US_RI (1 << 20) /* RI */ | ||
| 100 | #define AT91_US_DSR (1 << 21) /* DSR */ | ||
| 101 | #define AT91_US_DCD (1 << 22) /* DCD */ | ||
| 102 | #define AT91_US_CTS (1 << 23) /* CTS */ | ||
| 103 | |||
| 104 | #define AT91_US_IDR 0x0c /* Interrupt Disable Register */ | ||
| 105 | #define AT91_US_IMR 0x10 /* Interrupt Mask Register */ | ||
| 106 | #define AT91_US_CSR 0x14 /* Channel Status Register */ | ||
| 107 | #define AT91_US_RHR 0x18 /* Receiver Holding Register */ | ||
| 108 | #define AT91_US_THR 0x1c /* Transmitter Holding Register */ | ||
| 109 | |||
| 110 | #define AT91_US_BRGR 0x20 /* Baud Rate Generator Register */ | ||
| 111 | #define AT91_US_CD (0xffff << 0) /* Clock Divider */ | ||
| 112 | |||
| 113 | #define AT91_US_RTOR 0x24 /* Receiver Time-out Register */ | ||
| 114 | #define AT91_US_TO (0xffff << 0) /* Time-out Value */ | ||
| 115 | |||
| 116 | #define AT91_US_TTGR 0x28 /* Transmitter Timeguard Register */ | ||
| 117 | #define AT91_US_TG (0xff << 0) /* Timeguard Value */ | ||
| 118 | |||
| 119 | #define AT91_US_FIDI 0x40 /* FI DI Ratio Register */ | ||
| 120 | #define AT91_US_NER 0x44 /* Number of Errors Register */ | ||
| 121 | #define AT91_US_IF 0x4c /* IrDA Filter Register */ | ||
| 122 | |||
| 123 | #endif | ||
diff --git a/include/asm-arm/arch-at91rm9200/board.h b/include/asm-arm/arch-at91rm9200/board.h index c1ca9a4658ec..3cc9aec80f9d 100644 --- a/include/asm-arm/arch-at91rm9200/board.h +++ b/include/asm-arm/arch-at91rm9200/board.h | |||
| @@ -97,12 +97,13 @@ struct at91_uart_config { | |||
| 97 | unsigned short nr_tty; /* number of serial tty's */ | 97 | unsigned short nr_tty; /* number of serial tty's */ |
| 98 | short tty_map[]; /* map UART to tty number */ | 98 | short tty_map[]; /* map UART to tty number */ |
| 99 | }; | 99 | }; |
| 100 | extern struct platform_device *at91_default_console_device; | 100 | extern struct platform_device *atmel_default_console_device; |
| 101 | extern void __init at91_init_serial(struct at91_uart_config *config); | 101 | extern void __init at91_init_serial(struct at91_uart_config *config); |
| 102 | 102 | ||
| 103 | struct at91_uart_data { | 103 | struct atmel_uart_data { |
| 104 | short use_dma_tx; /* use transmit DMA? */ | 104 | short use_dma_tx; /* use transmit DMA? */ |
| 105 | short use_dma_rx; /* use receive DMA? */ | 105 | short use_dma_rx; /* use receive DMA? */ |
| 106 | void __iomem *regs; /* virtual base address, if any */ | ||
| 106 | }; | 107 | }; |
| 107 | extern void __init at91_add_device_serial(void); | 108 | extern void __init at91_add_device_serial(void); |
| 108 | 109 | ||
diff --git a/include/asm-arm/arch-at91rm9200/hardware.h b/include/asm-arm/arch-at91rm9200/hardware.h index 6551b4d1ff7b..9ca4cc9c0b2e 100644 --- a/include/asm-arm/arch-at91rm9200/hardware.h +++ b/include/asm-arm/arch-at91rm9200/hardware.h | |||
| @@ -44,7 +44,7 @@ | |||
| 44 | #define AT91_SRAM_VIRT_BASE (AT91_IO_VIRT_BASE - AT91RM9200_SRAM_SIZE) | 44 | #define AT91_SRAM_VIRT_BASE (AT91_IO_VIRT_BASE - AT91RM9200_SRAM_SIZE) |
| 45 | 45 | ||
| 46 | /* Serial ports */ | 46 | /* Serial ports */ |
| 47 | #define AT91_NR_UART 5 /* 4 USART3's and one DBGU port */ | 47 | #define ATMEL_MAX_UART 5 /* 4 USART3's and one DBGU port */ |
| 48 | 48 | ||
| 49 | /* FLASH */ | 49 | /* FLASH */ |
| 50 | #define AT91_FLASH_BASE 0x10000000 /* NCS0: Flash physical base address */ | 50 | #define AT91_FLASH_BASE 0x10000000 /* NCS0: Flash physical base address */ |
diff --git a/include/asm-arm/arch-clps711x/time.h b/include/asm-arm/arch-clps711x/time.h index 0e4a3901d3b3..5edaae1c61d3 100644 --- a/include/asm-arm/arch-clps711x/time.h +++ b/include/asm-arm/arch-clps711x/time.h | |||
| @@ -26,8 +26,9 @@ extern void clps711x_setup_timer(void); | |||
| 26 | * IRQ handler for the timer | 26 | * IRQ handler for the timer |
| 27 | */ | 27 | */ |
| 28 | static irqreturn_t | 28 | static irqreturn_t |
| 29 | p720t_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 29 | p720t_timer_interrupt(int irq, void *dev_id) |
| 30 | { | 30 | { |
| 31 | struct pt_regs *regs = get_irq_regs(); | ||
| 31 | do_leds(); | 32 | do_leds(); |
| 32 | do_timer(1); | 33 | do_timer(1); |
| 33 | #ifndef CONFIG_SMP | 34 | #ifndef CONFIG_SMP |
diff --git a/include/asm-arm/arch-imx/imx-dma.h b/include/asm-arm/arch-imx/imx-dma.h index 599f03e5a9ef..5b1066da4e1f 100644 --- a/include/asm-arm/arch-imx/imx-dma.h +++ b/include/asm-arm/arch-imx/imx-dma.h | |||
| @@ -45,8 +45,8 @@ | |||
| 45 | 45 | ||
| 46 | struct imx_dma_channel { | 46 | struct imx_dma_channel { |
| 47 | const char *name; | 47 | const char *name; |
| 48 | void (*irq_handler) (int, void *, struct pt_regs *); | 48 | void (*irq_handler) (int, void *); |
| 49 | void (*err_handler) (int, void *, struct pt_regs *, int errcode); | 49 | void (*err_handler) (int, void *, int errcode); |
| 50 | void *data; | 50 | void *data; |
| 51 | dmamode_t dma_mode; | 51 | dmamode_t dma_mode; |
| 52 | struct scatterlist *sg; | 52 | struct scatterlist *sg; |
| @@ -77,8 +77,8 @@ imx_dma_setup_sg(imx_dmach_t dma_ch, | |||
| 77 | 77 | ||
| 78 | int | 78 | int |
| 79 | imx_dma_setup_handlers(imx_dmach_t dma_ch, | 79 | imx_dma_setup_handlers(imx_dmach_t dma_ch, |
| 80 | void (*irq_handler) (int, void *, struct pt_regs *), | 80 | void (*irq_handler) (int, void *), |
| 81 | void (*err_handler) (int, void *, struct pt_regs *, int), void *data); | 81 | void (*err_handler) (int, void *, int), void *data); |
| 82 | 82 | ||
| 83 | void imx_dma_enable(imx_dmach_t dma_ch); | 83 | void imx_dma_enable(imx_dmach_t dma_ch); |
| 84 | 84 | ||
diff --git a/include/asm-arm/arch-l7200/time.h b/include/asm-arm/arch-l7200/time.h index c69cb508735f..ea22f7fff9cd 100644 --- a/include/asm-arm/arch-l7200/time.h +++ b/include/asm-arm/arch-l7200/time.h | |||
| @@ -43,8 +43,9 @@ | |||
| 43 | * Handler for RTC timer interrupt | 43 | * Handler for RTC timer interrupt |
| 44 | */ | 44 | */ |
| 45 | static irqreturn_t | 45 | static irqreturn_t |
| 46 | timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 46 | timer_interrupt(int irq, void *dev_id) |
| 47 | { | 47 | { |
| 48 | struct pt_regs *regs = get_irq_regs(); | ||
| 48 | do_timer(1); | 49 | do_timer(1); |
| 49 | #ifndef CONFIG_SMP | 50 | #ifndef CONFIG_SMP |
| 50 | update_process_times(user_mode(regs)); | 51 | update_process_times(user_mode(regs)); |
diff --git a/include/asm-arm/arch-lh7a40x/clocks.h b/include/asm-arm/arch-lh7a40x/clocks.h index bee02fd8dab1..7d0ba18ad578 100644 --- a/include/asm-arm/arch-lh7a40x/clocks.h +++ b/include/asm-arm/arch-lh7a40x/clocks.h | |||
| @@ -8,8 +8,6 @@ | |||
| 8 | * | 8 | * |
| 9 | */ | 9 | */ |
| 10 | 10 | ||
| 11 | #include <linux/config.h> | ||
| 12 | |||
| 13 | #ifndef __ASM_ARCH_CLOCKS_H | 11 | #ifndef __ASM_ARCH_CLOCKS_H |
| 14 | #define __ASM_ARCH_CLOCKS_H | 12 | #define __ASM_ARCH_CLOCKS_H |
| 15 | 13 | ||
diff --git a/include/asm-arm/arch-pnx4008/dma.h b/include/asm-arm/arch-pnx4008/dma.h index 3aee1204795b..418f15283ff1 100644 --- a/include/asm-arm/arch-pnx4008/dma.h +++ b/include/asm-arm/arch-pnx4008/dma.h | |||
| @@ -137,7 +137,7 @@ extern void pnx4008_free_ll_entry(struct pnx4008_dma_ll *, dma_addr_t); | |||
| 137 | extern void pnx4008_free_ll(u32 ll_dma, struct pnx4008_dma_ll *); | 137 | extern void pnx4008_free_ll(u32 ll_dma, struct pnx4008_dma_ll *); |
| 138 | 138 | ||
| 139 | extern int pnx4008_request_channel(char *, int, | 139 | extern int pnx4008_request_channel(char *, int, |
| 140 | void (*)(int, int, void *, struct pt_regs *), | 140 | void (*)(int, int, void *), |
| 141 | void *); | 141 | void *); |
| 142 | extern void pnx4008_free_channel(int); | 142 | extern void pnx4008_free_channel(int); |
| 143 | extern int pnx4008_config_dma(int, int, int); | 143 | extern int pnx4008_config_dma(int, int, int); |
diff --git a/include/asm-arm/arch-pxa/dma.h b/include/asm-arm/arch-pxa/dma.h index a008150abc59..bed042d71d68 100644 --- a/include/asm-arm/arch-pxa/dma.h +++ b/include/asm-arm/arch-pxa/dma.h | |||
| @@ -56,7 +56,7 @@ for ( \ | |||
| 56 | 56 | ||
| 57 | int pxa_request_dma (char *name, | 57 | int pxa_request_dma (char *name, |
| 58 | pxa_dma_prio prio, | 58 | pxa_dma_prio prio, |
| 59 | void (*irq_handler)(int, void *, struct pt_regs *), | 59 | void (*irq_handler)(int, void *), |
| 60 | void *data); | 60 | void *data); |
| 61 | 61 | ||
| 62 | void pxa_free_dma (int dma_ch); | 62 | void pxa_free_dma (int dma_ch); |
diff --git a/include/asm-arm/arch-pxa/mmc.h b/include/asm-arm/arch-pxa/mmc.h index 88c17dd02ed2..a38a28c4bbd8 100644 --- a/include/asm-arm/arch-pxa/mmc.h +++ b/include/asm-arm/arch-pxa/mmc.h | |||
| @@ -10,7 +10,7 @@ struct mmc_host; | |||
| 10 | struct pxamci_platform_data { | 10 | struct pxamci_platform_data { |
| 11 | unsigned int ocr_mask; /* available voltages */ | 11 | unsigned int ocr_mask; /* available voltages */ |
| 12 | unsigned long detect_delay; /* delay in jiffies before detecting cards after interrupt */ | 12 | unsigned long detect_delay; /* delay in jiffies before detecting cards after interrupt */ |
| 13 | int (*init)(struct device *, irqreturn_t (*)(int, void *, struct pt_regs *), void *); | 13 | int (*init)(struct device *, irq_handler_t , void *); |
| 14 | int (*get_ro)(struct device *); | 14 | int (*get_ro)(struct device *); |
| 15 | void (*setpower)(struct device *, unsigned int); | 15 | void (*setpower)(struct device *, unsigned int); |
| 16 | void (*exit)(struct device *, void *); | 16 | void (*exit)(struct device *, void *); |
diff --git a/include/asm-arm/arch-pxa/pxa-regs.h b/include/asm-arm/arch-pxa/pxa-regs.h index f5cc65dd7d0d..68731e0923a4 100644 --- a/include/asm-arm/arch-pxa/pxa-regs.h +++ b/include/asm-arm/arch-pxa/pxa-regs.h | |||
| @@ -1681,6 +1681,7 @@ | |||
| 1681 | #define SSSR_TINT (1 << 19) /* Receiver Time-out Interrupt */ | 1681 | #define SSSR_TINT (1 << 19) /* Receiver Time-out Interrupt */ |
| 1682 | #define SSSR_PINT (1 << 18) /* Peripheral Trailing Byte Interrupt */ | 1682 | #define SSSR_PINT (1 << 18) /* Peripheral Trailing Byte Interrupt */ |
| 1683 | 1683 | ||
| 1684 | #define SSPSP_FSRT (1 << 25) /* Frame Sync Relative Timing */ | ||
| 1684 | #define SSPSP_DMYSTOP(x) (x << 23) /* Dummy Stop */ | 1685 | #define SSPSP_DMYSTOP(x) (x << 23) /* Dummy Stop */ |
| 1685 | #define SSPSP_SFRMWDTH(x) (x << 16) /* Serial Frame Width */ | 1686 | #define SSPSP_SFRMWDTH(x) (x << 16) /* Serial Frame Width */ |
| 1686 | #define SSPSP_SFRMDLY(x) (x << 9) /* Serial Frame Delay */ | 1687 | #define SSPSP_SFRMDLY(x) (x << 9) /* Serial Frame Delay */ |
diff --git a/include/asm-arm/arch-sa1100/jornada720.h b/include/asm-arm/arch-sa1100/jornada720.h index 1b8e8a304800..3f37ca07806d 100644 --- a/include/asm-arm/arch-sa1100/jornada720.h +++ b/include/asm-arm/arch-sa1100/jornada720.h | |||
| @@ -19,6 +19,20 @@ | |||
| 19 | #define GPIO_JORNADA720_KEYBOARD_IRQ IRQ_GPIO0 | 19 | #define GPIO_JORNADA720_KEYBOARD_IRQ IRQ_GPIO0 |
| 20 | #define GPIO_JORNADA720_MOUSE_IRQ IRQ_GPIO9 | 20 | #define GPIO_JORNADA720_MOUSE_IRQ IRQ_GPIO9 |
| 21 | 21 | ||
| 22 | /* MCU COMMANDS */ | ||
| 23 | #define MCU_GetBatteryData 0xc0 | ||
| 24 | #define MCU_GetScanKeyCode 0x90 | ||
| 25 | #define MCU_GetTouchSamples 0xa0 | ||
| 26 | #define MCU_GetContrast 0xD0 | ||
| 27 | #define MCU_SetContrast 0xD1 | ||
| 28 | #define MCU_GetBrightness 0xD2 | ||
| 29 | #define MCU_SetBrightness 0xD3 | ||
| 30 | #define MCU_ContrastOff 0xD8 | ||
| 31 | #define MCU_BrightnessOff 0xD9 | ||
| 32 | #define MCU_PWMOFF 0xDF | ||
| 33 | #define MCU_TxDummy 0x11 | ||
| 34 | #define MCU_ErrorCode 0x00 | ||
| 35 | |||
| 22 | #ifndef __ASSEMBLY__ | 36 | #ifndef __ASSEMBLY__ |
| 23 | 37 | ||
| 24 | void jornada720_mcu_init(void); | 38 | void jornada720_mcu_init(void); |
diff --git a/include/asm-arm/arch-versatile/hardware.h b/include/asm-arm/arch-versatile/hardware.h index 41c1bee342ad..edc06598d187 100644 --- a/include/asm-arm/arch-versatile/hardware.h +++ b/include/asm-arm/arch-versatile/hardware.h | |||
| @@ -28,8 +28,8 @@ | |||
| 28 | /* | 28 | /* |
| 29 | * PCI space virtual addresses | 29 | * PCI space virtual addresses |
| 30 | */ | 30 | */ |
| 31 | #define VERSATILE_PCI_VIRT_BASE 0xe8000000 | 31 | #define VERSATILE_PCI_VIRT_BASE (void __iomem *)0xe8000000ul |
| 32 | #define VERSATILE_PCI_CFG_VIRT_BASE 0xe9000000 | 32 | #define VERSATILE_PCI_CFG_VIRT_BASE (void __iomem *)0xe9000000ul |
| 33 | 33 | ||
| 34 | #if 0 | 34 | #if 0 |
| 35 | #define VERSATILE_PCI_VIRT_MEM_BASE0 0xf4000000 | 35 | #define VERSATILE_PCI_VIRT_MEM_BASE0 0xf4000000 |
diff --git a/include/asm-arm/hardware/sharpsl_pm.h b/include/asm-arm/hardware/sharpsl_pm.h index a836e76a14f7..2d00db22b981 100644 --- a/include/asm-arm/hardware/sharpsl_pm.h +++ b/include/asm-arm/hardware/sharpsl_pm.h | |||
| @@ -100,7 +100,7 @@ extern struct sharpsl_pm_status sharpsl_pm; | |||
| 100 | 100 | ||
| 101 | void sharpsl_battery_kick(void); | 101 | void sharpsl_battery_kick(void); |
| 102 | void sharpsl_pm_led(int val); | 102 | void sharpsl_pm_led(int val); |
| 103 | irqreturn_t sharpsl_ac_isr(int irq, void *dev_id, struct pt_regs *fp); | 103 | irqreturn_t sharpsl_ac_isr(int irq, void *dev_id); |
| 104 | irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id, struct pt_regs *fp); | 104 | irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id); |
| 105 | irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id, struct pt_regs *fp); | 105 | irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id); |
| 106 | 106 | ||
diff --git a/include/asm-arm/hw_irq.h b/include/asm-arm/hw_irq.h index ea856971989a..98d594a973d6 100644 --- a/include/asm-arm/hw_irq.h +++ b/include/asm-arm/hw_irq.h | |||
| @@ -12,7 +12,7 @@ | |||
| 12 | if (!(action->flags & IRQF_TIMER) && system_timer->dyn_tick) { \ | 12 | if (!(action->flags & IRQF_TIMER) && system_timer->dyn_tick) { \ |
| 13 | write_seqlock(&xtime_lock); \ | 13 | write_seqlock(&xtime_lock); \ |
| 14 | if (system_timer->dyn_tick->state & DYN_TICK_ENABLED) \ | 14 | if (system_timer->dyn_tick->state & DYN_TICK_ENABLED) \ |
| 15 | system_timer->dyn_tick->handler(irq, 0, regs); \ | 15 | system_timer->dyn_tick->handler(irq, NULL); \ |
| 16 | write_sequnlock(&xtime_lock); \ | 16 | write_sequnlock(&xtime_lock); \ |
| 17 | } | 17 | } |
| 18 | #endif | 18 | #endif |
diff --git a/include/asm-arm/io.h b/include/asm-arm/io.h index 8076a85c3675..ae999fd5dc67 100644 --- a/include/asm-arm/io.h +++ b/include/asm-arm/io.h | |||
| @@ -63,7 +63,7 @@ extern void __raw_readsl(const void __iomem *addr, void *data, int longlen); | |||
| 63 | */ | 63 | */ |
| 64 | extern void __iomem * __ioremap_pfn(unsigned long, unsigned long, size_t, unsigned long); | 64 | extern void __iomem * __ioremap_pfn(unsigned long, unsigned long, size_t, unsigned long); |
| 65 | extern void __iomem * __ioremap(unsigned long, size_t, unsigned long); | 65 | extern void __iomem * __ioremap(unsigned long, size_t, unsigned long); |
| 66 | extern void __iounmap(void __iomem *addr); | 66 | extern void __iounmap(volatile void __iomem *addr); |
| 67 | 67 | ||
| 68 | /* | 68 | /* |
| 69 | * Bad read/write accesses... | 69 | * Bad read/write accesses... |
| @@ -193,23 +193,6 @@ extern void _memset_io(volatile void __iomem *, int, size_t); | |||
| 193 | #define eth_io_copy_and_sum(s,c,l,b) \ | 193 | #define eth_io_copy_and_sum(s,c,l,b) \ |
| 194 | eth_copy_and_sum((s),__mem_pci(c),(l),(b)) | 194 | eth_copy_and_sum((s),__mem_pci(c),(l),(b)) |
| 195 | 195 | ||
| 196 | static inline int | ||
| 197 | check_signature(void __iomem *io_addr, const unsigned char *signature, | ||
| 198 | int length) | ||
| 199 | { | ||
| 200 | int retval = 0; | ||
| 201 | do { | ||
| 202 | if (readb(io_addr) != *signature) | ||
| 203 | goto out; | ||
| 204 | io_addr++; | ||
| 205 | signature++; | ||
| 206 | length--; | ||
| 207 | } while (length); | ||
| 208 | retval = 1; | ||
| 209 | out: | ||
| 210 | return retval; | ||
| 211 | } | ||
| 212 | |||
| 213 | #elif !defined(readb) | 196 | #elif !defined(readb) |
| 214 | 197 | ||
| 215 | #define readb(c) (__readwrite_bug("readb"),0) | 198 | #define readb(c) (__readwrite_bug("readb"),0) |
diff --git a/include/asm-arm/irq_regs.h b/include/asm-arm/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-arm/irq_regs.h | |||
| @@ -0,0 +1 @@ | |||
| #include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-arm/mach/irq.h b/include/asm-arm/mach/irq.h index 131f33733d25..0e017ecf2096 100644 --- a/include/asm-arm/mach/irq.h +++ b/include/asm-arm/mach/irq.h | |||
| @@ -30,10 +30,9 @@ extern int show_fiq_list(struct seq_file *, void *); | |||
| 30 | /* | 30 | /* |
| 31 | * Obsolete inline function for calling irq descriptor handlers. | 31 | * Obsolete inline function for calling irq descriptor handlers. |
| 32 | */ | 32 | */ |
| 33 | static inline void desc_handle_irq(unsigned int irq, struct irq_desc *desc, | 33 | static inline void desc_handle_irq(unsigned int irq, struct irq_desc *desc) |
| 34 | struct pt_regs *regs) | ||
| 35 | { | 34 | { |
| 36 | desc->handle_irq(irq, desc, regs); | 35 | desc->handle_irq(irq, desc); |
| 37 | } | 36 | } |
| 38 | 37 | ||
| 39 | void set_irq_flags(unsigned int irq, unsigned int flags); | 38 | void set_irq_flags(unsigned int irq, unsigned int flags); |
| @@ -51,10 +50,10 @@ void set_irq_flags(unsigned int irq, unsigned int flags); | |||
| 51 | #define irqdesc irq_desc | 50 | #define irqdesc irq_desc |
| 52 | #define irqchip irq_chip | 51 | #define irqchip irq_chip |
| 53 | 52 | ||
| 54 | #define do_bad_IRQ(irq,desc,regs) \ | 53 | #define do_bad_IRQ(irq,desc) \ |
| 55 | do { \ | 54 | do { \ |
| 56 | spin_lock(&desc->lock); \ | 55 | spin_lock(&desc->lock); \ |
| 57 | handle_bad_irq(irq, desc, regs); \ | 56 | handle_bad_irq(irq, desc); \ |
| 58 | spin_unlock(&desc->lock); \ | 57 | spin_unlock(&desc->lock); \ |
| 59 | } while(0) | 58 | } while(0) |
| 60 | 59 | ||
diff --git a/include/asm-arm/mach/serial_at91.h b/include/asm-arm/mach/serial_at91.h index 1290bb32802d..55b317a89061 100644 --- a/include/asm-arm/mach/serial_at91.h +++ b/include/asm-arm/mach/serial_at91.h | |||
| @@ -14,7 +14,7 @@ struct uart_port; | |||
| 14 | * This is a temporary structure for registering these | 14 | * This is a temporary structure for registering these |
| 15 | * functions; it is intended to be discarded after boot. | 15 | * functions; it is intended to be discarded after boot. |
| 16 | */ | 16 | */ |
| 17 | struct at91_port_fns { | 17 | struct atmel_port_fns { |
| 18 | void (*set_mctrl)(struct uart_port *, u_int); | 18 | void (*set_mctrl)(struct uart_port *, u_int); |
| 19 | u_int (*get_mctrl)(struct uart_port *); | 19 | u_int (*get_mctrl)(struct uart_port *); |
| 20 | void (*enable_ms)(struct uart_port *); | 20 | void (*enable_ms)(struct uart_port *); |
| @@ -24,10 +24,10 @@ struct at91_port_fns { | |||
| 24 | void (*close)(struct uart_port *); | 24 | void (*close)(struct uart_port *); |
| 25 | }; | 25 | }; |
| 26 | 26 | ||
| 27 | #if defined(CONFIG_SERIAL_AT91) | 27 | #if defined(CONFIG_SERIAL_ATMEL) |
| 28 | void at91_register_uart_fns(struct at91_port_fns *fns); | 28 | void atmel_register_uart_fns(struct atmel_port_fns *fns); |
| 29 | #else | 29 | #else |
| 30 | #define at91_register_uart_fns(fns) do { } while (0) | 30 | #define atmel_register_uart_fns(fns) do { } while (0) |
| 31 | #endif | 31 | #endif |
| 32 | 32 | ||
| 33 | 33 | ||
diff --git a/include/asm-arm/mach/time.h b/include/asm-arm/mach/time.h index 1eb93f5c0d6c..5dc357013b79 100644 --- a/include/asm-arm/mach/time.h +++ b/include/asm-arm/mach/time.h | |||
| @@ -57,7 +57,7 @@ struct dyn_tick_timer { | |||
| 57 | int (*enable)(void); /* Enables dynamic tick */ | 57 | int (*enable)(void); /* Enables dynamic tick */ |
| 58 | int (*disable)(void); /* Disables dynamic tick */ | 58 | int (*disable)(void); /* Disables dynamic tick */ |
| 59 | void (*reprogram)(unsigned long); /* Reprograms the timer */ | 59 | void (*reprogram)(unsigned long); /* Reprograms the timer */ |
| 60 | int (*handler)(int, void *, struct pt_regs *); | 60 | int (*handler)(int, void *); |
| 61 | }; | 61 | }; |
| 62 | 62 | ||
| 63 | void timer_dyn_reprogram(void); | 63 | void timer_dyn_reprogram(void); |
| @@ -66,7 +66,7 @@ void timer_dyn_reprogram(void); | |||
| 66 | #endif | 66 | #endif |
| 67 | 67 | ||
| 68 | extern struct sys_timer *system_timer; | 68 | extern struct sys_timer *system_timer; |
| 69 | extern void timer_tick(struct pt_regs *); | 69 | extern void timer_tick(void); |
| 70 | 70 | ||
| 71 | /* | 71 | /* |
| 72 | * Kernel time keeping support. | 72 | * Kernel time keeping support. |
diff --git a/include/asm-arm/pgtable-nommu.h b/include/asm-arm/pgtable-nommu.h index b13322dccf41..c1b264dff287 100644 --- a/include/asm-arm/pgtable-nommu.h +++ b/include/asm-arm/pgtable-nommu.h | |||
| @@ -13,7 +13,6 @@ | |||
| 13 | 13 | ||
| 14 | #ifndef __ASSEMBLY__ | 14 | #ifndef __ASSEMBLY__ |
| 15 | 15 | ||
| 16 | #include <linux/config.h> | ||
| 17 | #include <linux/slab.h> | 16 | #include <linux/slab.h> |
| 18 | #include <asm/processor.h> | 17 | #include <asm/processor.h> |
| 19 | #include <asm/page.h> | 18 | #include <asm/page.h> |
diff --git a/include/asm-arm/uaccess.h b/include/asm-arm/uaccess.h index 87aba57a66c4..09ad0cab9014 100644 --- a/include/asm-arm/uaccess.h +++ b/include/asm-arm/uaccess.h | |||
| @@ -110,7 +110,7 @@ extern int __get_user_4(void *); | |||
| 110 | #define get_user(x,p) \ | 110 | #define get_user(x,p) \ |
| 111 | ({ \ | 111 | ({ \ |
| 112 | const register typeof(*(p)) __user *__p asm("r0") = (p);\ | 112 | const register typeof(*(p)) __user *__p asm("r0") = (p);\ |
| 113 | register unsigned int __r2 asm("r2"); \ | 113 | register unsigned long __r2 asm("r2"); \ |
| 114 | register int __e asm("r0"); \ | 114 | register int __e asm("r0"); \ |
| 115 | switch (sizeof(*(__p))) { \ | 115 | switch (sizeof(*(__p))) { \ |
| 116 | case 1: \ | 116 | case 1: \ |
diff --git a/include/asm-avr32/arch-at32ap/at91rm9200_usart.h b/include/asm-avr32/arch-at32ap/at91rm9200_usart.h deleted file mode 100644 index 79f851e31b9c..000000000000 --- a/include/asm-avr32/arch-at32ap/at91rm9200_usart.h +++ /dev/null | |||
| @@ -1,123 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * include/asm-arm/arch-at91rm9200/at91rm9200_usart.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2005 Ivan Kokshaysky | ||
| 5 | * Copyright (C) SAN People | ||
| 6 | * | ||
| 7 | * USART registers. | ||
| 8 | * Based on AT91RM9200 datasheet revision E. | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify | ||
| 11 | * it under the terms of the GNU General Public License as published by | ||
| 12 | * the Free Software Foundation; either version 2 of the License, or | ||
| 13 | * (at your option) any later version. | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef AT91RM9200_USART_H | ||
| 17 | #define AT91RM9200_USART_H | ||
| 18 | |||
| 19 | #define AT91_US_CR 0x00 /* Control Register */ | ||
| 20 | #define AT91_US_RSTRX (1 << 2) /* Reset Receiver */ | ||
| 21 | #define AT91_US_RSTTX (1 << 3) /* Reset Transmitter */ | ||
| 22 | #define AT91_US_RXEN (1 << 4) /* Receiver Enable */ | ||
| 23 | #define AT91_US_RXDIS (1 << 5) /* Receiver Disable */ | ||
| 24 | #define AT91_US_TXEN (1 << 6) /* Transmitter Enable */ | ||
| 25 | #define AT91_US_TXDIS (1 << 7) /* Transmitter Disable */ | ||
| 26 | #define AT91_US_RSTSTA (1 << 8) /* Reset Status Bits */ | ||
| 27 | #define AT91_US_STTBRK (1 << 9) /* Start Break */ | ||
| 28 | #define AT91_US_STPBRK (1 << 10) /* Stop Break */ | ||
| 29 | #define AT91_US_STTTO (1 << 11) /* Start Time-out */ | ||
| 30 | #define AT91_US_SENDA (1 << 12) /* Send Address */ | ||
| 31 | #define AT91_US_RSTIT (1 << 13) /* Reset Iterations */ | ||
| 32 | #define AT91_US_RSTNACK (1 << 14) /* Reset Non Acknowledge */ | ||
| 33 | #define AT91_US_RETTO (1 << 15) /* Rearm Time-out */ | ||
| 34 | #define AT91_US_DTREN (1 << 16) /* Data Terminal Ready Enable */ | ||
| 35 | #define AT91_US_DTRDIS (1 << 17) /* Data Terminal Ready Disable */ | ||
| 36 | #define AT91_US_RTSEN (1 << 18) /* Request To Send Enable */ | ||
| 37 | #define AT91_US_RTSDIS (1 << 19) /* Request To Send Disable */ | ||
| 38 | |||
| 39 | #define AT91_US_MR 0x04 /* Mode Register */ | ||
| 40 | #define AT91_US_USMODE (0xf << 0) /* Mode of the USART */ | ||
| 41 | #define AT91_US_USMODE_NORMAL 0 | ||
| 42 | #define AT91_US_USMODE_RS485 1 | ||
| 43 | #define AT91_US_USMODE_HWHS 2 | ||
| 44 | #define AT91_US_USMODE_MODEM 3 | ||
| 45 | #define AT91_US_USMODE_ISO7816_T0 4 | ||
| 46 | #define AT91_US_USMODE_ISO7816_T1 6 | ||
| 47 | #define AT91_US_USMODE_IRDA 8 | ||
| 48 | #define AT91_US_USCLKS (3 << 4) /* Clock Selection */ | ||
| 49 | #define AT91_US_CHRL (3 << 6) /* Character Length */ | ||
| 50 | #define AT91_US_CHRL_5 (0 << 6) | ||
| 51 | #define AT91_US_CHRL_6 (1 << 6) | ||
| 52 | #define AT91_US_CHRL_7 (2 << 6) | ||
| 53 | #define AT91_US_CHRL_8 (3 << 6) | ||
| 54 | #define AT91_US_SYNC (1 << 8) /* Synchronous Mode Select */ | ||
| 55 | #define AT91_US_PAR (7 << 9) /* Parity Type */ | ||
| 56 | #define AT91_US_PAR_EVEN (0 << 9) | ||
| 57 | #define AT91_US_PAR_ODD (1 << 9) | ||
| 58 | #define AT91_US_PAR_SPACE (2 << 9) | ||
| 59 | #define AT91_US_PAR_MARK (3 << 9) | ||
| 60 | #define AT91_US_PAR_NONE (4 << 9) | ||
| 61 | #define AT91_US_PAR_MULTI_DROP (6 << 9) | ||
| 62 | #define AT91_US_NBSTOP (3 << 12) /* Number of Stop Bits */ | ||
| 63 | #define AT91_US_NBSTOP_1 (0 << 12) | ||
| 64 | #define AT91_US_NBSTOP_1_5 (1 << 12) | ||
| 65 | #define AT91_US_NBSTOP_2 (2 << 12) | ||
| 66 | #define AT91_US_CHMODE (3 << 14) /* Channel Mode */ | ||
| 67 | #define AT91_US_CHMODE_NORMAL (0 << 14) | ||
| 68 | #define AT91_US_CHMODE_ECHO (1 << 14) | ||
| 69 | #define AT91_US_CHMODE_LOC_LOOP (2 << 14) | ||
| 70 | #define AT91_US_CHMODE_REM_LOOP (3 << 14) | ||
| 71 | #define AT91_US_MSBF (1 << 16) /* Bit Order */ | ||
| 72 | #define AT91_US_MODE9 (1 << 17) /* 9-bit Character Length */ | ||
| 73 | #define AT91_US_CLKO (1 << 18) /* Clock Output Select */ | ||
| 74 | #define AT91_US_OVER (1 << 19) /* Oversampling Mode */ | ||
| 75 | #define AT91_US_INACK (1 << 20) /* Inhibit Non Acknowledge */ | ||
| 76 | #define AT91_US_DSNACK (1 << 21) /* Disable Successive NACK */ | ||
| 77 | #define AT91_US_MAX_ITER (7 << 24) /* Max Iterations */ | ||
| 78 | #define AT91_US_FILTER (1 << 28) /* Infrared Receive Line Filter */ | ||
| 79 | |||
| 80 | #define AT91_US_IER 0x08 /* Interrupt Enable Register */ | ||
| 81 | #define AT91_US_RXRDY (1 << 0) /* Receiver Ready */ | ||
| 82 | #define AT91_US_TXRDY (1 << 1) /* Transmitter Ready */ | ||
| 83 | #define AT91_US_RXBRK (1 << 2) /* Break Received / End of Break */ | ||
| 84 | #define AT91_US_ENDRX (1 << 3) /* End of Receiver Transfer */ | ||
| 85 | #define AT91_US_ENDTX (1 << 4) /* End of Transmitter Transfer */ | ||
| 86 | #define AT91_US_OVRE (1 << 5) /* Overrun Error */ | ||
| 87 | #define AT91_US_FRAME (1 << 6) /* Framing Error */ | ||
| 88 | #define AT91_US_PARE (1 << 7) /* Parity Error */ | ||
| 89 | #define AT91_US_TIMEOUT (1 << 8) /* Receiver Time-out */ | ||
| 90 | #define AT91_US_TXEMPTY (1 << 9) /* Transmitter Empty */ | ||
| 91 | #define AT91_US_ITERATION (1 << 10) /* Max number of Repetitions Reached */ | ||
| 92 | #define AT91_US_TXBUFE (1 << 11) /* Transmission Buffer Empty */ | ||
| 93 | #define AT91_US_RXBUFF (1 << 12) /* Reception Buffer Full */ | ||
| 94 | #define AT91_US_NACK (1 << 13) /* Non Acknowledge */ | ||
| 95 | #define AT91_US_RIIC (1 << 16) /* Ring Indicator Input Change */ | ||
| 96 | #define AT91_US_DSRIC (1 << 17) /* Data Set Ready Input Change */ | ||
| 97 | #define AT91_US_DCDIC (1 << 18) /* Data Carrier Detect Input Change */ | ||
| 98 | #define AT91_US_CTSIC (1 << 19) /* Clear to Send Input Change */ | ||
| 99 | #define AT91_US_RI (1 << 20) /* RI */ | ||
| 100 | #define AT91_US_DSR (1 << 21) /* DSR */ | ||
| 101 | #define AT91_US_DCD (1 << 22) /* DCD */ | ||
| 102 | #define AT91_US_CTS (1 << 23) /* CTS */ | ||
| 103 | |||
| 104 | #define AT91_US_IDR 0x0c /* Interrupt Disable Register */ | ||
| 105 | #define AT91_US_IMR 0x10 /* Interrupt Mask Register */ | ||
| 106 | #define AT91_US_CSR 0x14 /* Channel Status Register */ | ||
| 107 | #define AT91_US_RHR 0x18 /* Receiver Holding Register */ | ||
| 108 | #define AT91_US_THR 0x1c /* Transmitter Holding Register */ | ||
| 109 | |||
| 110 | #define AT91_US_BRGR 0x20 /* Baud Rate Generator Register */ | ||
| 111 | #define AT91_US_CD (0xffff << 0) /* Clock Divider */ | ||
| 112 | |||
| 113 | #define AT91_US_RTOR 0x24 /* Receiver Time-out Register */ | ||
| 114 | #define AT91_US_TO (0xffff << 0) /* Time-out Value */ | ||
| 115 | |||
| 116 | #define AT91_US_TTGR 0x28 /* Transmitter Timeguard Register */ | ||
| 117 | #define AT91_US_TG (0xff << 0) /* Timeguard Value */ | ||
| 118 | |||
| 119 | #define AT91_US_FIDI 0x40 /* FI DI Ratio Register */ | ||
| 120 | #define AT91_US_NER 0x44 /* Number of Errors Register */ | ||
| 121 | #define AT91_US_IF 0x4c /* IrDA Filter Register */ | ||
| 122 | |||
| 123 | #endif | ||
diff --git a/include/asm-avr32/arch-at32ap/board.h b/include/asm-avr32/arch-at32ap/board.h index 39368e18ab20..a39b3e999f18 100644 --- a/include/asm-avr32/arch-at32ap/board.h +++ b/include/asm-avr32/arch-at32ap/board.h | |||
| @@ -9,9 +9,15 @@ | |||
| 9 | /* Add basic devices: system manager, interrupt controller, portmuxes, etc. */ | 9 | /* Add basic devices: system manager, interrupt controller, portmuxes, etc. */ |
| 10 | void at32_add_system_devices(void); | 10 | void at32_add_system_devices(void); |
| 11 | 11 | ||
| 12 | #define AT91_NR_UART 4 | 12 | #define ATMEL_MAX_UART 4 |
| 13 | extern struct platform_device *at91_default_console_device; | 13 | extern struct platform_device *atmel_default_console_device; |
| 14 | 14 | ||
| 15 | struct atmel_uart_data { | ||
| 16 | short use_dma_tx; /* use transmit DMA? */ | ||
| 17 | short use_dma_rx; /* use receive DMA? */ | ||
| 18 | void __iomem *regs; /* virtual base address, if any */ | ||
| 19 | }; | ||
| 20 | void at32_map_usart(unsigned int hw_id, unsigned int line); | ||
| 15 | struct platform_device *at32_add_device_usart(unsigned int id); | 21 | struct platform_device *at32_add_device_usart(unsigned int id); |
| 16 | 22 | ||
| 17 | struct eth_platform_data { | 23 | struct eth_platform_data { |
diff --git a/include/asm-avr32/arch-at32ap/init.h b/include/asm-avr32/arch-at32ap/init.h index 43722634e069..5e75d850d707 100644 --- a/include/asm-avr32/arch-at32ap/init.h +++ b/include/asm-avr32/arch-at32ap/init.h | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #define __ASM_AVR32_AT32AP_INIT_H__ | 11 | #define __ASM_AVR32_AT32AP_INIT_H__ |
| 12 | 12 | ||
| 13 | void setup_platform(void); | 13 | void setup_platform(void); |
| 14 | void setup_board(void); | ||
| 14 | 15 | ||
| 15 | /* Called by setup_platform */ | 16 | /* Called by setup_platform */ |
| 16 | void at32_clock_init(void); | 17 | void at32_clock_init(void); |
diff --git a/include/asm-avr32/irq_regs.h b/include/asm-avr32/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-avr32/irq_regs.h | |||
| @@ -0,0 +1 @@ | |||
| #include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-avr32/mach/serial_at91.h b/include/asm-avr32/mach/serial_at91.h index 1290bb32802d..55b317a89061 100644 --- a/include/asm-avr32/mach/serial_at91.h +++ b/include/asm-avr32/mach/serial_at91.h | |||
| @@ -14,7 +14,7 @@ struct uart_port; | |||
| 14 | * This is a temporary structure for registering these | 14 | * This is a temporary structure for registering these |
| 15 | * functions; it is intended to be discarded after boot. | 15 | * functions; it is intended to be discarded after boot. |
| 16 | */ | 16 | */ |
| 17 | struct at91_port_fns { | 17 | struct atmel_port_fns { |
| 18 | void (*set_mctrl)(struct uart_port *, u_int); | 18 | void (*set_mctrl)(struct uart_port *, u_int); |
| 19 | u_int (*get_mctrl)(struct uart_port *); | 19 | u_int (*get_mctrl)(struct uart_port *); |
| 20 | void (*enable_ms)(struct uart_port *); | 20 | void (*enable_ms)(struct uart_port *); |
| @@ -24,10 +24,10 @@ struct at91_port_fns { | |||
| 24 | void (*close)(struct uart_port *); | 24 | void (*close)(struct uart_port *); |
| 25 | }; | 25 | }; |
| 26 | 26 | ||
| 27 | #if defined(CONFIG_SERIAL_AT91) | 27 | #if defined(CONFIG_SERIAL_ATMEL) |
| 28 | void at91_register_uart_fns(struct at91_port_fns *fns); | 28 | void atmel_register_uart_fns(struct atmel_port_fns *fns); |
| 29 | #else | 29 | #else |
| 30 | #define at91_register_uart_fns(fns) do { } while (0) | 30 | #define atmel_register_uart_fns(fns) do { } while (0) |
| 31 | #endif | 31 | #endif |
| 32 | 32 | ||
| 33 | 33 | ||
diff --git a/include/asm-frv/dma.h b/include/asm-frv/dma.h index 18d6bb8f84fc..683c47d48a5b 100644 --- a/include/asm-frv/dma.h +++ b/include/asm-frv/dma.h | |||
| @@ -24,10 +24,7 @@ | |||
| 24 | /* | 24 | /* |
| 25 | * FRV DMA controller management | 25 | * FRV DMA controller management |
| 26 | */ | 26 | */ |
| 27 | struct pt_regs; | 27 | typedef irqreturn_t (*dma_irq_handler_t)(int dmachan, unsigned long cstr, void *data); |
| 28 | |||
| 29 | typedef irqreturn_t (*dma_irq_handler_t)(int dmachan, unsigned long cstr, void *data, | ||
| 30 | struct pt_regs *regs); | ||
| 31 | 28 | ||
| 32 | extern void frv_dma_init(void); | 29 | extern void frv_dma_init(void); |
| 33 | 30 | ||
diff --git a/include/asm-frv/highmem.h b/include/asm-frv/highmem.h index e2247c22a638..0f390f41f816 100644 --- a/include/asm-frv/highmem.h +++ b/include/asm-frv/highmem.h | |||
| @@ -82,11 +82,11 @@ extern struct page *kmap_atomic_to_page(void *ptr); | |||
| 82 | dampr = paddr | xAMPRx_L | xAMPRx_M | xAMPRx_S | xAMPRx_SS_16Kb | xAMPRx_V; \ | 82 | dampr = paddr | xAMPRx_L | xAMPRx_M | xAMPRx_S | xAMPRx_SS_16Kb | xAMPRx_V; \ |
| 83 | \ | 83 | \ |
| 84 | if (type != __KM_CACHE) \ | 84 | if (type != __KM_CACHE) \ |
| 85 | asm volatile("movgs %0,dampr"#ampr :: "r"(dampr)); \ | 85 | asm volatile("movgs %0,dampr"#ampr :: "r"(dampr) : "memory"); \ |
| 86 | else \ | 86 | else \ |
| 87 | asm volatile("movgs %0,iampr"#ampr"\n" \ | 87 | asm volatile("movgs %0,iampr"#ampr"\n" \ |
| 88 | "movgs %0,dampr"#ampr"\n" \ | 88 | "movgs %0,dampr"#ampr"\n" \ |
| 89 | :: "r"(dampr) \ | 89 | :: "r"(dampr) : "memory" \ |
| 90 | ); \ | 90 | ); \ |
| 91 | \ | 91 | \ |
| 92 | asm("movsg damlr"#ampr",%0" : "=r"(damlr)); \ | 92 | asm("movsg damlr"#ampr",%0" : "=r"(damlr)); \ |
| @@ -104,7 +104,7 @@ extern struct page *kmap_atomic_to_page(void *ptr); | |||
| 104 | asm volatile("movgs %0,tplr \n" \ | 104 | asm volatile("movgs %0,tplr \n" \ |
| 105 | "movgs %1,tppr \n" \ | 105 | "movgs %1,tppr \n" \ |
| 106 | "tlbpr %0,gr0,#2,#1" \ | 106 | "tlbpr %0,gr0,#2,#1" \ |
| 107 | : : "r"(damlr), "r"(dampr)); \ | 107 | : : "r"(damlr), "r"(dampr) : "memory"); \ |
| 108 | \ | 108 | \ |
| 109 | /*printk("TLB: SECN sl=%d L=%08lx P=%08lx\n", slot, damlr, dampr);*/ \ | 109 | /*printk("TLB: SECN sl=%d L=%08lx P=%08lx\n", slot, damlr, dampr);*/ \ |
| 110 | \ | 110 | \ |
| @@ -115,7 +115,7 @@ static inline void *kmap_atomic(struct page *page, enum km_type type) | |||
| 115 | { | 115 | { |
| 116 | unsigned long paddr; | 116 | unsigned long paddr; |
| 117 | 117 | ||
| 118 | preempt_disable(); | 118 | inc_preempt_count(); |
| 119 | paddr = page_to_phys(page); | 119 | paddr = page_to_phys(page); |
| 120 | 120 | ||
| 121 | switch (type) { | 121 | switch (type) { |
| @@ -138,16 +138,16 @@ static inline void *kmap_atomic(struct page *page, enum km_type type) | |||
| 138 | } | 138 | } |
| 139 | } | 139 | } |
| 140 | 140 | ||
| 141 | #define __kunmap_atomic_primary(type, ampr) \ | 141 | #define __kunmap_atomic_primary(type, ampr) \ |
| 142 | do { \ | 142 | do { \ |
| 143 | asm volatile("movgs gr0,dampr"#ampr"\n"); \ | 143 | asm volatile("movgs gr0,dampr"#ampr"\n" ::: "memory"); \ |
| 144 | if (type == __KM_CACHE) \ | 144 | if (type == __KM_CACHE) \ |
| 145 | asm volatile("movgs gr0,iampr"#ampr"\n"); \ | 145 | asm volatile("movgs gr0,iampr"#ampr"\n" ::: "memory"); \ |
| 146 | } while(0) | 146 | } while(0) |
| 147 | 147 | ||
| 148 | #define __kunmap_atomic_secondary(slot, vaddr) \ | 148 | #define __kunmap_atomic_secondary(slot, vaddr) \ |
| 149 | do { \ | 149 | do { \ |
| 150 | asm volatile("tlbpr %0,gr0,#4,#1" : : "r"(vaddr)); \ | 150 | asm volatile("tlbpr %0,gr0,#4,#1" : : "r"(vaddr) : "memory"); \ |
| 151 | } while(0) | 151 | } while(0) |
| 152 | 152 | ||
| 153 | static inline void kunmap_atomic(void *kvaddr, enum km_type type) | 153 | static inline void kunmap_atomic(void *kvaddr, enum km_type type) |
| @@ -170,7 +170,8 @@ static inline void kunmap_atomic(void *kvaddr, enum km_type type) | |||
| 170 | default: | 170 | default: |
| 171 | BUG(); | 171 | BUG(); |
| 172 | } | 172 | } |
| 173 | preempt_enable(); | 173 | dec_preempt_count(); |
| 174 | preempt_check_resched(); | ||
| 174 | } | 175 | } |
| 175 | 176 | ||
| 176 | #endif /* !__ASSEMBLY__ */ | 177 | #endif /* !__ASSEMBLY__ */ |
diff --git a/include/asm-frv/io.h b/include/asm-frv/io.h index 7765f5528894..20e44fe00abf 100644 --- a/include/asm-frv/io.h +++ b/include/asm-frv/io.h | |||
| @@ -385,27 +385,6 @@ static inline void pci_iounmap(struct pci_dev *dev, void __iomem *p) | |||
| 385 | */ | 385 | */ |
| 386 | #define xlate_dev_kmem_ptr(p) p | 386 | #define xlate_dev_kmem_ptr(p) p |
| 387 | 387 | ||
| 388 | /* | ||
| 389 | * Check BIOS signature | ||
| 390 | */ | ||
| 391 | static inline int check_signature(volatile void __iomem *io_addr, | ||
| 392 | const unsigned char *signature, int length) | ||
| 393 | { | ||
| 394 | int retval = 0; | ||
| 395 | |||
| 396 | do { | ||
| 397 | if (readb(io_addr) != *signature) | ||
| 398 | goto out; | ||
| 399 | io_addr++; | ||
| 400 | signature++; | ||
| 401 | length--; | ||
| 402 | } while (length); | ||
| 403 | |||
| 404 | retval = 1; | ||
| 405 | out: | ||
| 406 | return retval; | ||
| 407 | } | ||
| 408 | |||
| 409 | #endif /* __KERNEL__ */ | 388 | #endif /* __KERNEL__ */ |
| 410 | 389 | ||
| 411 | #endif /* _ASM_IO_H */ | 390 | #endif /* _ASM_IO_H */ |
diff --git a/include/asm-frv/irq_regs.h b/include/asm-frv/irq_regs.h new file mode 100644 index 000000000000..d22e83289ad1 --- /dev/null +++ b/include/asm-frv/irq_regs.h | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | /* FRV per-CPU frame pointer holder | ||
| 2 | * | ||
| 3 | * Copyright (C) 2006 Red Hat, Inc. All Rights Reserved. | ||
| 4 | * Written by David Howells (dhowells@redhat.com) | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or | ||
| 7 | * modify it under the terms of the GNU General Public License | ||
| 8 | * as published by the Free Software Foundation; either version | ||
| 9 | * 2 of the License, or (at your option) any later version. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #ifndef _ASM_IRQ_REGS_H | ||
| 13 | #define _ASM_IRQ_REGS_H | ||
| 14 | |||
| 15 | /* | ||
| 16 | * Per-cpu current frame pointer - the location of the last exception frame on | ||
| 17 | * the stack | ||
| 18 | * - on FRV, GR28 is dedicated to keeping a pointer to the current exception | ||
| 19 | * frame | ||
| 20 | */ | ||
| 21 | #define ARCH_HAS_OWN_IRQ_REGS | ||
| 22 | |||
| 23 | #ifndef __ASSEMBLY__ | ||
| 24 | #define get_irq_regs() (__frame) | ||
| 25 | #endif | ||
| 26 | |||
| 27 | #endif /* _ASM_IRQ_REGS_H */ | ||
diff --git a/include/asm-frv/ptrace.h b/include/asm-frv/ptrace.h index 7ff525162a72..9a2241b8eb1e 100644 --- a/include/asm-frv/ptrace.h +++ b/include/asm-frv/ptrace.h | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #define _ASM_PTRACE_H | 12 | #define _ASM_PTRACE_H |
| 13 | 13 | ||
| 14 | #include <asm/registers.h> | 14 | #include <asm/registers.h> |
| 15 | #include <asm/irq_regs.h> | ||
| 15 | 16 | ||
| 16 | #define in_syscall(regs) (((regs)->tbr & TBR_TT) == TBR_TT_TRAP0) | 17 | #define in_syscall(regs) (((regs)->tbr & TBR_TT) == TBR_TT_TRAP0) |
| 17 | 18 | ||
diff --git a/include/asm-generic/bitops/sched.h b/include/asm-generic/bitops/sched.h index 5ef93a4d009f..815bb0148060 100644 --- a/include/asm-generic/bitops/sched.h +++ b/include/asm-generic/bitops/sched.h | |||
| @@ -15,7 +15,7 @@ static inline int sched_find_first_bit(const unsigned long *b) | |||
| 15 | #if BITS_PER_LONG == 64 | 15 | #if BITS_PER_LONG == 64 |
| 16 | if (unlikely(b[0])) | 16 | if (unlikely(b[0])) |
| 17 | return __ffs(b[0]); | 17 | return __ffs(b[0]); |
| 18 | if (unlikely(b[1])) | 18 | if (likely(b[1])) |
| 19 | return __ffs(b[1]) + 64; | 19 | return __ffs(b[1]) + 64; |
| 20 | return __ffs(b[2]) + 128; | 20 | return __ffs(b[2]) + 128; |
| 21 | #elif BITS_PER_LONG == 32 | 21 | #elif BITS_PER_LONG == 32 |
diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h index a5250895155e..c92ae0f166ff 100644 --- a/include/asm-generic/bug.h +++ b/include/asm-generic/bug.h | |||
| @@ -37,18 +37,21 @@ | |||
| 37 | #endif | 37 | #endif |
| 38 | 38 | ||
| 39 | #ifndef HAVE_ARCH_WARN_ON | 39 | #ifndef HAVE_ARCH_WARN_ON |
| 40 | #define WARN_ON(condition) unlikely((condition)) | 40 | #define WARN_ON(condition) ({ \ |
| 41 | typeof(condition) __ret_warn_on = (condition); \ | ||
| 42 | unlikely(__ret_warn_on); \ | ||
| 43 | }) | ||
| 41 | #endif | 44 | #endif |
| 42 | #endif | 45 | #endif |
| 43 | 46 | ||
| 44 | #define WARN_ON_ONCE(condition) ({ \ | 47 | #define WARN_ON_ONCE(condition) ({ \ |
| 45 | static int __warn_once = 1; \ | 48 | static int __warned; \ |
| 46 | typeof(condition) __ret_warn_once = (condition);\ | 49 | typeof(condition) __ret_warn_once = (condition); \ |
| 47 | \ | 50 | \ |
| 48 | if (likely(__warn_once)) \ | 51 | if (unlikely(__ret_warn_once)) \ |
| 49 | if (WARN_ON(__ret_warn_once)) \ | 52 | if (WARN_ON(!__warned)) \ |
| 50 | __warn_once = 0; \ | 53 | __warned = 1; \ |
| 51 | unlikely(__ret_warn_once); \ | 54 | unlikely(__ret_warn_once); \ |
| 52 | }) | 55 | }) |
| 53 | 56 | ||
| 54 | #ifdef CONFIG_SMP | 57 | #ifdef CONFIG_SMP |
diff --git a/include/asm-generic/irq_regs.h b/include/asm-generic/irq_regs.h new file mode 100644 index 000000000000..5ae1d07d4a12 --- /dev/null +++ b/include/asm-generic/irq_regs.h | |||
| @@ -0,0 +1,37 @@ | |||
| 1 | /* Fallback per-CPU frame pointer holder | ||
| 2 | * | ||
| 3 | * Copyright (C) 2006 Red Hat, Inc. All Rights Reserved. | ||
| 4 | * Written by David Howells (dhowells@redhat.com) | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or | ||
| 7 | * modify it under the terms of the GNU General Public License | ||
| 8 | * as published by the Free Software Foundation; either version | ||
| 9 | * 2 of the License, or (at your option) any later version. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #ifndef _ASM_GENERIC_IRQ_REGS_H | ||
| 13 | #define _ASM_GENERIC_IRQ_REGS_H | ||
| 14 | |||
| 15 | #include <linux/percpu.h> | ||
| 16 | |||
| 17 | /* | ||
| 18 | * Per-cpu current frame pointer - the location of the last exception frame on | ||
| 19 | * the stack | ||
| 20 | */ | ||
| 21 | DECLARE_PER_CPU(struct pt_regs *, __irq_regs); | ||
| 22 | |||
| 23 | static inline struct pt_regs *get_irq_regs(void) | ||
| 24 | { | ||
| 25 | return __get_cpu_var(__irq_regs); | ||
| 26 | } | ||
| 27 | |||
| 28 | static inline struct pt_regs *set_irq_regs(struct pt_regs *new_regs) | ||
| 29 | { | ||
| 30 | struct pt_regs *old_regs, **pp_regs = &__get_cpu_var(__irq_regs); | ||
| 31 | |||
| 32 | old_regs = *pp_regs; | ||
| 33 | *pp_regs = new_regs; | ||
| 34 | return old_regs; | ||
| 35 | } | ||
| 36 | |||
| 37 | #endif /* _ASM_GENERIC_IRQ_REGS_H */ | ||
diff --git a/include/asm-generic/percpu.h b/include/asm-generic/percpu.h index 6d45ee5472af..196376262240 100644 --- a/include/asm-generic/percpu.h +++ b/include/asm-generic/percpu.h | |||
| @@ -15,7 +15,7 @@ extern unsigned long __per_cpu_offset[NR_CPUS]; | |||
| 15 | 15 | ||
| 16 | /* var is in discarded region: offset to particular copy we want */ | 16 | /* var is in discarded region: offset to particular copy we want */ |
| 17 | #define per_cpu(var, cpu) (*({ \ | 17 | #define per_cpu(var, cpu) (*({ \ |
| 18 | extern int simple_indentifier_##var(void); \ | 18 | extern int simple_identifier_##var(void); \ |
| 19 | RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]); })) | 19 | RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]); })) |
| 20 | #define __get_cpu_var(var) per_cpu(var, smp_processor_id()) | 20 | #define __get_cpu_var(var) per_cpu(var, smp_processor_id()) |
| 21 | #define __raw_get_cpu_var(var) per_cpu(var, raw_smp_processor_id()) | 21 | #define __raw_get_cpu_var(var) per_cpu(var, raw_smp_processor_id()) |
diff --git a/include/asm-i386/alternative-asm.i b/include/asm-i386/alternative-asm.i index 6c47e3b9484b..f0510209ccbe 100644 --- a/include/asm-i386/alternative-asm.i +++ b/include/asm-i386/alternative-asm.i | |||
| @@ -1,5 +1,3 @@ | |||
| 1 | #include <linux/config.h> | ||
| 2 | |||
| 3 | #ifdef CONFIG_SMP | 1 | #ifdef CONFIG_SMP |
| 4 | .macro LOCK_PREFIX | 2 | .macro LOCK_PREFIX |
| 5 | 1: lock | 3 | 1: lock |
diff --git a/include/asm-i386/apic.h b/include/asm-i386/apic.h index 3a42b7d6fc92..b9529578fc37 100644 --- a/include/asm-i386/apic.h +++ b/include/asm-i386/apic.h | |||
| @@ -98,7 +98,7 @@ extern void sync_Arb_IDs (void); | |||
| 98 | extern void init_bsp_APIC (void); | 98 | extern void init_bsp_APIC (void); |
| 99 | extern void setup_local_APIC (void); | 99 | extern void setup_local_APIC (void); |
| 100 | extern void init_apic_mappings (void); | 100 | extern void init_apic_mappings (void); |
| 101 | extern void smp_local_timer_interrupt (struct pt_regs * regs); | 101 | extern void smp_local_timer_interrupt (void); |
| 102 | extern void setup_boot_APIC_clock (void); | 102 | extern void setup_boot_APIC_clock (void); |
| 103 | extern void setup_secondary_APIC_clock (void); | 103 | extern void setup_secondary_APIC_clock (void); |
| 104 | extern int APIC_init_uniprocessor (void); | 104 | extern int APIC_init_uniprocessor (void); |
| @@ -107,7 +107,7 @@ extern void enable_APIC_timer(void); | |||
| 107 | 107 | ||
| 108 | extern void enable_NMI_through_LVT0 (void * dummy); | 108 | extern void enable_NMI_through_LVT0 (void * dummy); |
| 109 | 109 | ||
| 110 | void smp_send_timer_broadcast_ipi(struct pt_regs *regs); | 110 | void smp_send_timer_broadcast_ipi(void); |
| 111 | void switch_APIC_timer_to_ipi(void *cpumask); | 111 | void switch_APIC_timer_to_ipi(void *cpumask); |
| 112 | void switch_ipi_to_APIC_timer(void *cpumask); | 112 | void switch_ipi_to_APIC_timer(void *cpumask); |
| 113 | #define ARCH_APICTIMER_STOPS_ON_C3 1 | 113 | #define ARCH_APICTIMER_STOPS_ON_C3 1 |
diff --git a/include/asm-i386/arch_hooks.h b/include/asm-i386/arch_hooks.h index 238cf4275b96..a8c1fca9726d 100644 --- a/include/asm-i386/arch_hooks.h +++ b/include/asm-i386/arch_hooks.h | |||
| @@ -14,7 +14,7 @@ | |||
| 14 | extern void init_ISA_irqs(void); | 14 | extern void init_ISA_irqs(void); |
| 15 | extern void apic_intr_init(void); | 15 | extern void apic_intr_init(void); |
| 16 | extern void smp_intr_init(void); | 16 | extern void smp_intr_init(void); |
| 17 | extern irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs); | 17 | extern irqreturn_t timer_interrupt(int irq, void *dev_id); |
| 18 | 18 | ||
| 19 | /* these are the defined hooks */ | 19 | /* these are the defined hooks */ |
| 20 | extern void intr_init_hook(void); | 20 | extern void intr_init_hook(void); |
diff --git a/include/asm-i386/floppy.h b/include/asm-i386/floppy.h index 359ead60b718..44ef2f55a8e9 100644 --- a/include/asm-i386/floppy.h +++ b/include/asm-i386/floppy.h | |||
| @@ -51,7 +51,7 @@ static char *virtual_dma_addr; | |||
| 51 | static int virtual_dma_mode; | 51 | static int virtual_dma_mode; |
| 52 | static int doing_pdma; | 52 | static int doing_pdma; |
| 53 | 53 | ||
| 54 | static irqreturn_t floppy_hardint(int irq, void *dev_id, struct pt_regs * regs) | 54 | static irqreturn_t floppy_hardint(int irq, void *dev_id) |
| 55 | { | 55 | { |
| 56 | register unsigned char st; | 56 | register unsigned char st; |
| 57 | 57 | ||
| @@ -63,7 +63,7 @@ static irqreturn_t floppy_hardint(int irq, void *dev_id, struct pt_regs * regs) | |||
| 63 | static int dma_wait=0; | 63 | static int dma_wait=0; |
| 64 | #endif | 64 | #endif |
| 65 | if (!doing_pdma) | 65 | if (!doing_pdma) |
| 66 | return floppy_interrupt(irq, dev_id, regs); | 66 | return floppy_interrupt(irq, dev_id); |
| 67 | 67 | ||
| 68 | #ifdef TRACE_FLPY_INT | 68 | #ifdef TRACE_FLPY_INT |
| 69 | if(!calls) | 69 | if(!calls) |
| @@ -106,7 +106,7 @@ static irqreturn_t floppy_hardint(int irq, void *dev_id, struct pt_regs * regs) | |||
| 106 | dma_wait=0; | 106 | dma_wait=0; |
| 107 | #endif | 107 | #endif |
| 108 | doing_pdma = 0; | 108 | doing_pdma = 0; |
| 109 | floppy_interrupt(irq, dev_id, regs); | 109 | floppy_interrupt(irq, dev_id); |
| 110 | return IRQ_HANDLED; | 110 | return IRQ_HANDLED; |
| 111 | } | 111 | } |
| 112 | #ifdef TRACE_FLPY_INT | 112 | #ifdef TRACE_FLPY_INT |
diff --git a/include/asm-i386/frame.i b/include/asm-i386/frame.i index 4d68ddce18b6..03620251ae17 100644 --- a/include/asm-i386/frame.i +++ b/include/asm-i386/frame.i | |||
| @@ -1,4 +1,3 @@ | |||
| 1 | #include <linux/config.h> | ||
| 2 | #include <asm/dwarf2.h> | 1 | #include <asm/dwarf2.h> |
| 3 | 2 | ||
| 4 | /* The annotation hides the frame from the unwinder and makes it look | 3 | /* The annotation hides the frame from the unwinder and makes it look |
diff --git a/include/asm-i386/hpet.h b/include/asm-i386/hpet.h index af5d435519d1..e47be9a56cc2 100644 --- a/include/asm-i386/hpet.h +++ b/include/asm-i386/hpet.h | |||
| @@ -108,7 +108,7 @@ extern int hpet_set_alarm_time(unsigned char hrs, unsigned char min, unsigned ch | |||
| 108 | extern int hpet_set_periodic_freq(unsigned long freq); | 108 | extern int hpet_set_periodic_freq(unsigned long freq); |
| 109 | extern int hpet_rtc_dropped_irq(void); | 109 | extern int hpet_rtc_dropped_irq(void); |
| 110 | extern int hpet_rtc_timer_init(void); | 110 | extern int hpet_rtc_timer_init(void); |
| 111 | extern irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs); | 111 | extern irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id); |
| 112 | #endif /* CONFIG_HPET_EMULATE_RTC */ | 112 | #endif /* CONFIG_HPET_EMULATE_RTC */ |
| 113 | #endif /* CONFIG_HPET_TIMER */ | 113 | #endif /* CONFIG_HPET_TIMER */ |
| 114 | #endif /* _I386_HPET_H */ | 114 | #endif /* _I386_HPET_H */ |
diff --git a/include/asm-i386/hw_irq.h b/include/asm-i386/hw_irq.h index 87e5a351d881..0bedbdf5e907 100644 --- a/include/asm-i386/hw_irq.h +++ b/include/asm-i386/hw_irq.h | |||
| @@ -17,8 +17,6 @@ | |||
| 17 | #include <asm/irq.h> | 17 | #include <asm/irq.h> |
| 18 | #include <asm/sections.h> | 18 | #include <asm/sections.h> |
| 19 | 19 | ||
| 20 | struct hw_interrupt_type; | ||
| 21 | |||
| 22 | #define NMI_VECTOR 0x02 | 20 | #define NMI_VECTOR 0x02 |
| 23 | 21 | ||
| 24 | /* | 22 | /* |
| @@ -28,10 +26,6 @@ struct hw_interrupt_type; | |||
| 28 | * Interrupt entry/exit code at both C and assembly level | 26 | * Interrupt entry/exit code at both C and assembly level |
| 29 | */ | 27 | */ |
| 30 | 28 | ||
| 31 | extern u8 irq_vector[NR_IRQ_VECTORS]; | ||
| 32 | #define IO_APIC_VECTOR(irq) (irq_vector[irq]) | ||
| 33 | #define AUTO_ASSIGN -1 | ||
| 34 | |||
| 35 | extern void (*interrupt[NR_IRQS])(void); | 29 | extern void (*interrupt[NR_IRQS])(void); |
| 36 | 30 | ||
| 37 | #ifdef CONFIG_SMP | 31 | #ifdef CONFIG_SMP |
| @@ -44,7 +38,7 @@ fastcall void call_function_interrupt(void); | |||
| 44 | fastcall void apic_timer_interrupt(void); | 38 | fastcall void apic_timer_interrupt(void); |
| 45 | fastcall void error_interrupt(void); | 39 | fastcall void error_interrupt(void); |
| 46 | fastcall void spurious_interrupt(void); | 40 | fastcall void spurious_interrupt(void); |
| 47 | fastcall void thermal_interrupt(struct pt_regs *); | 41 | fastcall void thermal_interrupt(void); |
| 48 | #define platform_legacy_irq(irq) ((irq) < 16) | 42 | #define platform_legacy_irq(irq) ((irq) < 16) |
| 49 | #endif | 43 | #endif |
| 50 | 44 | ||
diff --git a/include/asm-i386/hypertransport.h b/include/asm-i386/hypertransport.h new file mode 100644 index 000000000000..c16c6ff4bdd7 --- /dev/null +++ b/include/asm-i386/hypertransport.h | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | #ifndef ASM_HYPERTRANSPORT_H | ||
| 2 | #define ASM_HYPERTRANSPORT_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * Constants for x86 Hypertransport Interrupts. | ||
| 6 | */ | ||
| 7 | |||
| 8 | #define HT_IRQ_LOW_BASE 0xf8000000 | ||
| 9 | |||
| 10 | #define HT_IRQ_LOW_VECTOR_SHIFT 16 | ||
| 11 | #define HT_IRQ_LOW_VECTOR_MASK 0x00ff0000 | ||
| 12 | #define HT_IRQ_LOW_VECTOR(v) (((v) << HT_IRQ_LOW_VECTOR_SHIFT) & HT_IRQ_LOW_VECTOR_MASK) | ||
| 13 | |||
| 14 | #define HT_IRQ_LOW_DEST_ID_SHIFT 8 | ||
| 15 | #define HT_IRQ_LOW_DEST_ID_MASK 0x0000ff00 | ||
| 16 | #define HT_IRQ_LOW_DEST_ID(v) (((v) << HT_IRQ_LOW_DEST_ID_SHIFT) & HT_IRQ_LOW_DEST_ID_MASK) | ||
| 17 | |||
| 18 | #define HT_IRQ_LOW_DM_PHYSICAL 0x0000000 | ||
| 19 | #define HT_IRQ_LOW_DM_LOGICAL 0x0000040 | ||
| 20 | |||
| 21 | #define HT_IRQ_LOW_RQEOI_EDGE 0x0000000 | ||
| 22 | #define HT_IRQ_LOW_RQEOI_LEVEL 0x0000020 | ||
| 23 | |||
| 24 | |||
| 25 | #define HT_IRQ_LOW_MT_FIXED 0x0000000 | ||
| 26 | #define HT_IRQ_LOW_MT_ARBITRATED 0x0000004 | ||
| 27 | #define HT_IRQ_LOW_MT_SMI 0x0000008 | ||
| 28 | #define HT_IRQ_LOW_MT_NMI 0x000000c | ||
| 29 | #define HT_IRQ_LOW_MT_INIT 0x0000010 | ||
| 30 | #define HT_IRQ_LOW_MT_STARTUP 0x0000014 | ||
| 31 | #define HT_IRQ_LOW_MT_EXTINT 0x0000018 | ||
| 32 | #define HT_IRQ_LOW_MT_LINT1 0x000008c | ||
| 33 | #define HT_IRQ_LOW_MT_LINT0 0x0000098 | ||
| 34 | |||
| 35 | #define HT_IRQ_LOW_IRQ_MASKED 0x0000001 | ||
| 36 | |||
| 37 | |||
| 38 | #define HT_IRQ_HIGH_DEST_ID_SHIFT 0 | ||
| 39 | #define HT_IRQ_HIGH_DEST_ID_MASK 0x00ffffff | ||
| 40 | #define HT_IRQ_HIGH_DEST_ID(v) ((((v) >> 8) << HT_IRQ_HIGH_DEST_ID_SHIFT) & HT_IRQ_HIGH_DEST_ID_MASK) | ||
| 41 | |||
| 42 | #endif /* ASM_HYPERTRANSPORT_H */ | ||
diff --git a/include/asm-i386/io.h b/include/asm-i386/io.h index b3724fe93ff1..68df0dc3ab8f 100644 --- a/include/asm-i386/io.h +++ b/include/asm-i386/io.h | |||
| @@ -224,33 +224,6 @@ static inline void memcpy_toio(volatile void __iomem *dst, const void *src, int | |||
| 224 | 224 | ||
| 225 | #define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(void __force *)(b),(c),(d)) | 225 | #define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(void __force *)(b),(c),(d)) |
| 226 | 226 | ||
| 227 | /** | ||
| 228 | * check_signature - find BIOS signatures | ||
| 229 | * @io_addr: mmio address to check | ||
| 230 | * @signature: signature block | ||
| 231 | * @length: length of signature | ||
| 232 | * | ||
| 233 | * Perform a signature comparison with the mmio address io_addr. This | ||
| 234 | * address should have been obtained by ioremap. | ||
| 235 | * Returns 1 on a match. | ||
| 236 | */ | ||
| 237 | |||
| 238 | static inline int check_signature(volatile void __iomem * io_addr, | ||
| 239 | const unsigned char *signature, int length) | ||
| 240 | { | ||
| 241 | int retval = 0; | ||
| 242 | do { | ||
| 243 | if (readb(io_addr) != *signature) | ||
| 244 | goto out; | ||
| 245 | io_addr++; | ||
| 246 | signature++; | ||
| 247 | length--; | ||
| 248 | } while (length); | ||
| 249 | retval = 1; | ||
| 250 | out: | ||
| 251 | return retval; | ||
| 252 | } | ||
| 253 | |||
| 254 | /* | 227 | /* |
| 255 | * Cache management | 228 | * Cache management |
| 256 | * | 229 | * |
diff --git a/include/asm-i386/io_apic.h b/include/asm-i386/io_apic.h index 5d309275a1dc..276ea7e8144a 100644 --- a/include/asm-i386/io_apic.h +++ b/include/asm-i386/io_apic.h | |||
| @@ -12,46 +12,6 @@ | |||
| 12 | 12 | ||
| 13 | #ifdef CONFIG_X86_IO_APIC | 13 | #ifdef CONFIG_X86_IO_APIC |
| 14 | 14 | ||
| 15 | #ifdef CONFIG_PCI_MSI | ||
| 16 | static inline int use_pci_vector(void) {return 1;} | ||
| 17 | static inline void disable_edge_ioapic_vector(unsigned int vector) { } | ||
| 18 | static inline void mask_and_ack_level_ioapic_vector(unsigned int vector) { } | ||
| 19 | static inline void end_edge_ioapic_vector (unsigned int vector) { } | ||
| 20 | #define startup_level_ioapic startup_level_ioapic_vector | ||
| 21 | #define shutdown_level_ioapic mask_IO_APIC_vector | ||
| 22 | #define enable_level_ioapic unmask_IO_APIC_vector | ||
| 23 | #define disable_level_ioapic mask_IO_APIC_vector | ||
| 24 | #define mask_and_ack_level_ioapic mask_and_ack_level_ioapic_vector | ||
| 25 | #define end_level_ioapic end_level_ioapic_vector | ||
| 26 | #define set_ioapic_affinity set_ioapic_affinity_vector | ||
| 27 | |||
| 28 | #define startup_edge_ioapic startup_edge_ioapic_vector | ||
| 29 | #define shutdown_edge_ioapic disable_edge_ioapic_vector | ||
| 30 | #define enable_edge_ioapic unmask_IO_APIC_vector | ||
| 31 | #define disable_edge_ioapic disable_edge_ioapic_vector | ||
| 32 | #define ack_edge_ioapic ack_edge_ioapic_vector | ||
| 33 | #define end_edge_ioapic end_edge_ioapic_vector | ||
| 34 | #else | ||
| 35 | static inline int use_pci_vector(void) {return 0;} | ||
| 36 | static inline void disable_edge_ioapic_irq(unsigned int irq) { } | ||
| 37 | static inline void mask_and_ack_level_ioapic_irq(unsigned int irq) { } | ||
| 38 | static inline void end_edge_ioapic_irq (unsigned int irq) { } | ||
| 39 | #define startup_level_ioapic startup_level_ioapic_irq | ||
| 40 | #define shutdown_level_ioapic mask_IO_APIC_irq | ||
| 41 | #define enable_level_ioapic unmask_IO_APIC_irq | ||
| 42 | #define disable_level_ioapic mask_IO_APIC_irq | ||
| 43 | #define mask_and_ack_level_ioapic mask_and_ack_level_ioapic_irq | ||
| 44 | #define end_level_ioapic end_level_ioapic_irq | ||
| 45 | #define set_ioapic_affinity set_ioapic_affinity_irq | ||
| 46 | |||
| 47 | #define startup_edge_ioapic startup_edge_ioapic_irq | ||
| 48 | #define shutdown_edge_ioapic disable_edge_ioapic_irq | ||
| 49 | #define enable_edge_ioapic unmask_IO_APIC_irq | ||
| 50 | #define disable_edge_ioapic disable_edge_ioapic_irq | ||
| 51 | #define ack_edge_ioapic ack_edge_ioapic_irq | ||
| 52 | #define end_edge_ioapic end_edge_ioapic_irq | ||
| 53 | #endif | ||
| 54 | |||
| 55 | #define IO_APIC_BASE(idx) \ | 15 | #define IO_APIC_BASE(idx) \ |
| 56 | ((volatile int *)(__fix_to_virt(FIX_IO_APIC_BASE_0 + idx) \ | 16 | ((volatile int *)(__fix_to_virt(FIX_IO_APIC_BASE_0 + idx) \ |
| 57 | + (mp_ioapics[idx].mpc_apicaddr & ~PAGE_MASK))) | 17 | + (mp_ioapics[idx].mpc_apicaddr & ~PAGE_MASK))) |
| @@ -219,6 +179,4 @@ extern int (*ioapic_renumber_irq)(int ioapic, int irq); | |||
| 219 | static inline void disable_ioapic_setup(void) { } | 179 | static inline void disable_ioapic_setup(void) { } |
| 220 | #endif | 180 | #endif |
| 221 | 181 | ||
| 222 | extern int assign_irq_vector(int irq); | ||
| 223 | |||
| 224 | #endif | 182 | #endif |
diff --git a/include/asm-i386/irq_regs.h b/include/asm-i386/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-i386/irq_regs.h | |||
| @@ -0,0 +1 @@ | |||
| #include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-i386/mach-default/do_timer.h b/include/asm-i386/mach-default/do_timer.h index 4182c347ef85..7d606e3364ae 100644 --- a/include/asm-i386/mach-default/do_timer.h +++ b/include/asm-i386/mach-default/do_timer.h | |||
| @@ -14,11 +14,11 @@ | |||
| 14 | * timer interrupt as a means of triggering reschedules etc. | 14 | * timer interrupt as a means of triggering reschedules etc. |
| 15 | **/ | 15 | **/ |
| 16 | 16 | ||
| 17 | static inline void do_timer_interrupt_hook(struct pt_regs *regs) | 17 | static inline void do_timer_interrupt_hook(void) |
| 18 | { | 18 | { |
| 19 | do_timer(1); | 19 | do_timer(1); |
| 20 | #ifndef CONFIG_SMP | 20 | #ifndef CONFIG_SMP |
| 21 | update_process_times(user_mode_vm(regs)); | 21 | update_process_times(user_mode_vm(get_irq_regs())); |
| 22 | #endif | 22 | #endif |
| 23 | /* | 23 | /* |
| 24 | * In the SMP case we use the local APIC timer interrupt to do the | 24 | * In the SMP case we use the local APIC timer interrupt to do the |
| @@ -26,10 +26,10 @@ static inline void do_timer_interrupt_hook(struct pt_regs *regs) | |||
| 26 | * system, in that case we have to call the local interrupt handler. | 26 | * system, in that case we have to call the local interrupt handler. |
| 27 | */ | 27 | */ |
| 28 | #ifndef CONFIG_X86_LOCAL_APIC | 28 | #ifndef CONFIG_X86_LOCAL_APIC |
| 29 | profile_tick(CPU_PROFILING, regs); | 29 | profile_tick(CPU_PROFILING); |
| 30 | #else | 30 | #else |
| 31 | if (!using_apic_timer) | 31 | if (!using_apic_timer) |
| 32 | smp_local_timer_interrupt(regs); | 32 | smp_local_timer_interrupt(); |
| 33 | #endif | 33 | #endif |
| 34 | } | 34 | } |
| 35 | 35 | ||
diff --git a/include/asm-i386/mach-default/irq_vectors_limits.h b/include/asm-i386/mach-default/irq_vectors_limits.h index b330026e6f7f..7f161e760be6 100644 --- a/include/asm-i386/mach-default/irq_vectors_limits.h +++ b/include/asm-i386/mach-default/irq_vectors_limits.h | |||
| @@ -1,10 +1,6 @@ | |||
| 1 | #ifndef _ASM_IRQ_VECTORS_LIMITS_H | 1 | #ifndef _ASM_IRQ_VECTORS_LIMITS_H |
| 2 | #define _ASM_IRQ_VECTORS_LIMITS_H | 2 | #define _ASM_IRQ_VECTORS_LIMITS_H |
| 3 | 3 | ||
| 4 | #ifdef CONFIG_PCI_MSI | ||
| 5 | #define NR_IRQS FIRST_SYSTEM_VECTOR | ||
| 6 | #define NR_IRQ_VECTORS NR_IRQS | ||
| 7 | #else | ||
| 8 | #ifdef CONFIG_X86_IO_APIC | 4 | #ifdef CONFIG_X86_IO_APIC |
| 9 | #define NR_IRQS 224 | 5 | #define NR_IRQS 224 |
| 10 | # if (224 >= 32 * NR_CPUS) | 6 | # if (224 >= 32 * NR_CPUS) |
| @@ -16,6 +12,5 @@ | |||
| 16 | #define NR_IRQS 16 | 12 | #define NR_IRQS 16 |
| 17 | #define NR_IRQ_VECTORS NR_IRQS | 13 | #define NR_IRQ_VECTORS NR_IRQS |
| 18 | #endif | 14 | #endif |
| 19 | #endif | ||
| 20 | 15 | ||
| 21 | #endif /* _ASM_IRQ_VECTORS_LIMITS_H */ | 16 | #endif /* _ASM_IRQ_VECTORS_LIMITS_H */ |
diff --git a/include/asm-i386/mach-visws/do_timer.h b/include/asm-i386/mach-visws/do_timer.h index 8db618c5a72b..21cd696d4d0f 100644 --- a/include/asm-i386/mach-visws/do_timer.h +++ b/include/asm-i386/mach-visws/do_timer.h | |||
| @@ -4,14 +4,14 @@ | |||
| 4 | #include <asm/i8259.h> | 4 | #include <asm/i8259.h> |
| 5 | #include "cobalt.h" | 5 | #include "cobalt.h" |
| 6 | 6 | ||
| 7 | static inline void do_timer_interrupt_hook(struct pt_regs *regs) | 7 | static inline void do_timer_interrupt_hook(void) |
| 8 | { | 8 | { |
| 9 | /* Clear the interrupt */ | 9 | /* Clear the interrupt */ |
| 10 | co_cpu_write(CO_CPU_STAT,co_cpu_read(CO_CPU_STAT) & ~CO_STAT_TIMEINTR); | 10 | co_cpu_write(CO_CPU_STAT,co_cpu_read(CO_CPU_STAT) & ~CO_STAT_TIMEINTR); |
| 11 | 11 | ||
| 12 | do_timer(1); | 12 | do_timer(1); |
| 13 | #ifndef CONFIG_SMP | 13 | #ifndef CONFIG_SMP |
| 14 | update_process_times(user_mode_vm(regs)); | 14 | update_process_times(user_mode_vm(irq_regs)); |
| 15 | #endif | 15 | #endif |
| 16 | /* | 16 | /* |
| 17 | * In the SMP case we use the local APIC timer interrupt to do the | 17 | * In the SMP case we use the local APIC timer interrupt to do the |
| @@ -19,10 +19,10 @@ static inline void do_timer_interrupt_hook(struct pt_regs *regs) | |||
| 19 | * system, in that case we have to call the local interrupt handler. | 19 | * system, in that case we have to call the local interrupt handler. |
| 20 | */ | 20 | */ |
| 21 | #ifndef CONFIG_X86_LOCAL_APIC | 21 | #ifndef CONFIG_X86_LOCAL_APIC |
| 22 | profile_tick(CPU_PROFILING, regs); | 22 | profile_tick(CPU_PROFILING); |
| 23 | #else | 23 | #else |
| 24 | if (!using_apic_timer) | 24 | if (!using_apic_timer) |
| 25 | smp_local_timer_interrupt(regs); | 25 | smp_local_timer_interrupt(); |
| 26 | #endif | 26 | #endif |
| 27 | } | 27 | } |
| 28 | 28 | ||
diff --git a/include/asm-i386/mach-voyager/do_timer.h b/include/asm-i386/mach-voyager/do_timer.h index 099fe9f5c1b2..04e69c104a74 100644 --- a/include/asm-i386/mach-voyager/do_timer.h +++ b/include/asm-i386/mach-voyager/do_timer.h | |||
| @@ -1,14 +1,14 @@ | |||
| 1 | /* defines for inline arch setup functions */ | 1 | /* defines for inline arch setup functions */ |
| 2 | #include <asm/voyager.h> | 2 | #include <asm/voyager.h> |
| 3 | 3 | ||
| 4 | static inline void do_timer_interrupt_hook(struct pt_regs *regs) | 4 | static inline void do_timer_interrupt_hook(void) |
| 5 | { | 5 | { |
| 6 | do_timer(1); | 6 | do_timer(1); |
| 7 | #ifndef CONFIG_SMP | 7 | #ifndef CONFIG_SMP |
| 8 | update_process_times(user_mode_vm(regs)); | 8 | update_process_times(user_mode_vm(irq_regs)); |
| 9 | #endif | 9 | #endif |
| 10 | 10 | ||
| 11 | voyager_timer_interrupt(regs); | 11 | voyager_timer_interrupt(); |
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | static inline int do_timer_overflow(int count) | 14 | static inline int do_timer_overflow(int count) |
diff --git a/include/asm-i386/msi.h b/include/asm-i386/msi.h deleted file mode 100644 index b11c4b7dfaef..000000000000 --- a/include/asm-i386/msi.h +++ /dev/null | |||
| @@ -1,23 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2003-2004 Intel | ||
| 3 | * Copyright (C) Tom Long Nguyen (tom.l.nguyen@intel.com) | ||
| 4 | */ | ||
| 5 | |||
| 6 | #ifndef ASM_MSI_H | ||
| 7 | #define ASM_MSI_H | ||
| 8 | |||
| 9 | #include <asm/desc.h> | ||
| 10 | #include <mach_apic.h> | ||
| 11 | |||
| 12 | #define LAST_DEVICE_VECTOR (FIRST_SYSTEM_VECTOR - 1) | ||
| 13 | #define MSI_TARGET_CPU_SHIFT 12 | ||
| 14 | |||
| 15 | extern struct msi_ops msi_apic_ops; | ||
| 16 | |||
| 17 | static inline int msi_arch_init(void) | ||
| 18 | { | ||
| 19 | msi_register(&msi_apic_ops); | ||
| 20 | return 0; | ||
| 21 | } | ||
| 22 | |||
| 23 | #endif /* ASM_MSI_H */ | ||
diff --git a/include/asm-i386/msidef.h b/include/asm-i386/msidef.h new file mode 100644 index 000000000000..5b8acddb70fb --- /dev/null +++ b/include/asm-i386/msidef.h | |||
| @@ -0,0 +1,47 @@ | |||
| 1 | #ifndef ASM_MSIDEF_H | ||
| 2 | #define ASM_MSIDEF_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * Constants for Intel APIC based MSI messages. | ||
| 6 | */ | ||
| 7 | |||
| 8 | /* | ||
| 9 | * Shifts for MSI data | ||
| 10 | */ | ||
| 11 | |||
| 12 | #define MSI_DATA_VECTOR_SHIFT 0 | ||
| 13 | #define MSI_DATA_VECTOR_MASK 0x000000ff | ||
| 14 | #define MSI_DATA_VECTOR(v) (((v) << MSI_DATA_VECTOR_SHIFT) & MSI_DATA_VECTOR_MASK) | ||
| 15 | |||
| 16 | #define MSI_DATA_DELIVERY_MODE_SHIFT 8 | ||
| 17 | #define MSI_DATA_DELIVERY_FIXED (0 << MSI_DATA_DELIVERY_MODE_SHIFT) | ||
| 18 | #define MSI_DATA_DELIVERY_LOWPRI (1 << MSI_DATA_DELIVERY_MODE_SHIFT) | ||
| 19 | |||
| 20 | #define MSI_DATA_LEVEL_SHIFT 14 | ||
| 21 | #define MSI_DATA_LEVEL_DEASSERT (0 << MSI_DATA_LEVEL_SHIFT) | ||
| 22 | #define MSI_DATA_LEVEL_ASSERT (1 << MSI_DATA_LEVEL_SHIFT) | ||
| 23 | |||
| 24 | #define MSI_DATA_TRIGGER_SHIFT 15 | ||
| 25 | #define MSI_DATA_TRIGGER_EDGE (0 << MSI_DATA_TRIGGER_SHIFT) | ||
| 26 | #define MSI_DATA_TRIGGER_LEVEL (1 << MSI_DATA_TRIGGER_SHIFT) | ||
| 27 | |||
| 28 | /* | ||
| 29 | * Shift/mask fields for msi address | ||
| 30 | */ | ||
| 31 | |||
| 32 | #define MSI_ADDR_BASE_HI 0 | ||
| 33 | #define MSI_ADDR_BASE_LO 0xfee00000 | ||
| 34 | |||
| 35 | #define MSI_ADDR_DEST_MODE_SHIFT 2 | ||
| 36 | #define MSI_ADDR_DEST_MODE_PHYSICAL (0 << MSI_ADDR_DEST_MODE_SHIFT) | ||
| 37 | #define MSI_ADDR_DEST_MODE_LOGICAL (1 << MSI_ADDR_DEST_MODE_SHIFT) | ||
| 38 | |||
| 39 | #define MSI_ADDR_REDIRECTION_SHIFT 3 | ||
| 40 | #define MSI_ADDR_REDIRECTION_CPU (0 << MSI_ADDR_REDIRECTION_SHIFT) /* dedicated cpu */ | ||
| 41 | #define MSI_ADDR_REDIRECTION_LOWPRI (1 << MSI_ADDR_REDIRECTION_SHIFT) /* lowest priority */ | ||
| 42 | |||
| 43 | #define MSI_ADDR_DEST_ID_SHIFT 12 | ||
| 44 | #define MSI_ADDR_DEST_ID_MASK 0x00ffff0 | ||
| 45 | #define MSI_ADDR_DEST_ID(dest) (((dest) << MSI_ADDR_DEST_ID_SHIFT) & MSI_ADDR_DEST_ID_MASK) | ||
| 46 | |||
| 47 | #endif /* ASM_MSIDEF_H */ | ||
diff --git a/include/asm-i386/processor.h b/include/asm-i386/processor.h index 2277127696d2..e0ddca94d50c 100644 --- a/include/asm-i386/processor.h +++ b/include/asm-i386/processor.h | |||
| @@ -306,6 +306,8 @@ static inline void __mwait(unsigned long eax, unsigned long ecx) | |||
| 306 | : :"a" (eax), "c" (ecx)); | 306 | : :"a" (eax), "c" (ecx)); |
| 307 | } | 307 | } |
| 308 | 308 | ||
| 309 | extern void mwait_idle_with_hints(unsigned long eax, unsigned long ecx); | ||
| 310 | |||
| 309 | /* from system description table in BIOS. Mostly for MCA use, but | 311 | /* from system description table in BIOS. Mostly for MCA use, but |
| 310 | others may find it useful. */ | 312 | others may find it useful. */ |
| 311 | extern unsigned int machine_id; | 313 | extern unsigned int machine_id; |
diff --git a/include/asm-i386/smp.h b/include/asm-i386/smp.h index 6aa1206f6e2a..bd59c1508e71 100644 --- a/include/asm-i386/smp.h +++ b/include/asm-i386/smp.h | |||
| @@ -46,8 +46,6 @@ extern u8 x86_cpu_to_apicid[]; | |||
| 46 | 46 | ||
| 47 | #define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] | 47 | #define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] |
| 48 | 48 | ||
| 49 | extern u8 apicid_2_node[]; | ||
| 50 | |||
| 51 | #ifdef CONFIG_HOTPLUG_CPU | 49 | #ifdef CONFIG_HOTPLUG_CPU |
| 52 | extern void cpu_exit_clear(void); | 50 | extern void cpu_exit_clear(void); |
| 53 | extern void cpu_uninit(void); | 51 | extern void cpu_uninit(void); |
| @@ -101,6 +99,9 @@ extern unsigned int num_processors; | |||
| 101 | #endif | 99 | #endif |
| 102 | 100 | ||
| 103 | #ifndef __ASSEMBLY__ | 101 | #ifndef __ASSEMBLY__ |
| 102 | |||
| 103 | extern u8 apicid_2_node[]; | ||
| 104 | |||
| 104 | #ifdef CONFIG_X86_LOCAL_APIC | 105 | #ifdef CONFIG_X86_LOCAL_APIC |
| 105 | static __inline int logical_smp_processor_id(void) | 106 | static __inline int logical_smp_processor_id(void) |
| 106 | { | 107 | { |
diff --git a/include/asm-i386/uaccess.h b/include/asm-i386/uaccess.h index 54d905ebc63d..eef5133b9ce2 100644 --- a/include/asm-i386/uaccess.h +++ b/include/asm-i386/uaccess.h | |||
| @@ -404,20 +404,6 @@ unsigned long __must_check __copy_from_user_ll_nocache_nozero(void *to, | |||
| 404 | * anything, so this is accurate. | 404 | * anything, so this is accurate. |
| 405 | */ | 405 | */ |
| 406 | 406 | ||
| 407 | /** | ||
| 408 | * __copy_to_user: - Copy a block of data into user space, with less checking. | ||
| 409 | * @to: Destination address, in user space. | ||
| 410 | * @from: Source address, in kernel space. | ||
| 411 | * @n: Number of bytes to copy. | ||
| 412 | * | ||
| 413 | * Context: User context only. This function may sleep. | ||
| 414 | * | ||
| 415 | * Copy data from kernel space to user space. Caller must check | ||
| 416 | * the specified block with access_ok() before calling this function. | ||
| 417 | * | ||
| 418 | * Returns number of bytes that could not be copied. | ||
| 419 | * On success, this will be zero. | ||
| 420 | */ | ||
| 421 | static __always_inline unsigned long __must_check | 407 | static __always_inline unsigned long __must_check |
| 422 | __copy_to_user_inatomic(void __user *to, const void *from, unsigned long n) | 408 | __copy_to_user_inatomic(void __user *to, const void *from, unsigned long n) |
| 423 | { | 409 | { |
| @@ -439,35 +425,27 @@ __copy_to_user_inatomic(void __user *to, const void *from, unsigned long n) | |||
| 439 | return __copy_to_user_ll(to, from, n); | 425 | return __copy_to_user_ll(to, from, n); |
| 440 | } | 426 | } |
| 441 | 427 | ||
| 442 | static __always_inline unsigned long __must_check | ||
| 443 | __copy_to_user(void __user *to, const void *from, unsigned long n) | ||
| 444 | { | ||
| 445 | might_sleep(); | ||
| 446 | return __copy_to_user_inatomic(to, from, n); | ||
| 447 | } | ||
| 448 | |||
| 449 | /** | 428 | /** |
| 450 | * __copy_from_user: - Copy a block of data from user space, with less checking. | 429 | * __copy_to_user: - Copy a block of data into user space, with less checking. |
| 451 | * @to: Destination address, in kernel space. | 430 | * @to: Destination address, in user space. |
| 452 | * @from: Source address, in user space. | 431 | * @from: Source address, in kernel space. |
| 453 | * @n: Number of bytes to copy. | 432 | * @n: Number of bytes to copy. |
| 454 | * | 433 | * |
| 455 | * Context: User context only. This function may sleep. | 434 | * Context: User context only. This function may sleep. |
| 456 | * | 435 | * |
| 457 | * Copy data from user space to kernel space. Caller must check | 436 | * Copy data from kernel space to user space. Caller must check |
| 458 | * the specified block with access_ok() before calling this function. | 437 | * the specified block with access_ok() before calling this function. |
| 459 | * | 438 | * |
| 460 | * Returns number of bytes that could not be copied. | 439 | * Returns number of bytes that could not be copied. |
| 461 | * On success, this will be zero. | 440 | * On success, this will be zero. |
| 462 | * | ||
| 463 | * If some data could not be copied, this function will pad the copied | ||
| 464 | * data to the requested size using zero bytes. | ||
| 465 | * | ||
| 466 | * An alternate version - __copy_from_user_inatomic() - may be called from | ||
| 467 | * atomic context and will fail rather than sleep. In this case the | ||
| 468 | * uncopied bytes will *NOT* be padded with zeros. See fs/filemap.h | ||
| 469 | * for explanation of why this is needed. | ||
| 470 | */ | 441 | */ |
| 442 | static __always_inline unsigned long __must_check | ||
| 443 | __copy_to_user(void __user *to, const void *from, unsigned long n) | ||
| 444 | { | ||
| 445 | might_sleep(); | ||
| 446 | return __copy_to_user_inatomic(to, from, n); | ||
| 447 | } | ||
| 448 | |||
| 471 | static __always_inline unsigned long | 449 | static __always_inline unsigned long |
| 472 | __copy_from_user_inatomic(void *to, const void __user *from, unsigned long n) | 450 | __copy_from_user_inatomic(void *to, const void __user *from, unsigned long n) |
| 473 | { | 451 | { |
| @@ -493,6 +471,29 @@ __copy_from_user_inatomic(void *to, const void __user *from, unsigned long n) | |||
| 493 | } | 471 | } |
| 494 | return __copy_from_user_ll_nozero(to, from, n); | 472 | return __copy_from_user_ll_nozero(to, from, n); |
| 495 | } | 473 | } |
| 474 | |||
| 475 | /** | ||
| 476 | * __copy_from_user: - Copy a block of data from user space, with less checking. | ||
| 477 | * @to: Destination address, in kernel space. | ||
| 478 | * @from: Source address, in user space. | ||
| 479 | * @n: Number of bytes to copy. | ||
| 480 | * | ||
| 481 | * Context: User context only. This function may sleep. | ||
| 482 | * | ||
| 483 | * Copy data from user space to kernel space. Caller must check | ||
| 484 | * the specified block with access_ok() before calling this function. | ||
| 485 | * | ||
| 486 | * Returns number of bytes that could not be copied. | ||
| 487 | * On success, this will be zero. | ||
| 488 | * | ||
| 489 | * If some data could not be copied, this function will pad the copied | ||
| 490 | * data to the requested size using zero bytes. | ||
| 491 | * | ||
| 492 | * An alternate version - __copy_from_user_inatomic() - may be called from | ||
| 493 | * atomic context and will fail rather than sleep. In this case the | ||
| 494 | * uncopied bytes will *NOT* be padded with zeros. See fs/filemap.h | ||
| 495 | * for explanation of why this is needed. | ||
| 496 | */ | ||
| 496 | static __always_inline unsigned long | 497 | static __always_inline unsigned long |
| 497 | __copy_from_user(void *to, const void __user *from, unsigned long n) | 498 | __copy_from_user(void *to, const void __user *from, unsigned long n) |
| 498 | { | 499 | { |
diff --git a/include/asm-i386/unistd.h b/include/asm-i386/unistd.h index 3ca7ab963d7d..beeeaf6b054a 100644 --- a/include/asm-i386/unistd.h +++ b/include/asm-i386/unistd.h | |||
| @@ -324,10 +324,11 @@ | |||
| 324 | #define __NR_vmsplice 316 | 324 | #define __NR_vmsplice 316 |
| 325 | #define __NR_move_pages 317 | 325 | #define __NR_move_pages 317 |
| 326 | #define __NR_getcpu 318 | 326 | #define __NR_getcpu 318 |
| 327 | #define __NR_epoll_pwait 319 | ||
| 327 | 328 | ||
| 328 | #ifdef __KERNEL__ | 329 | #ifdef __KERNEL__ |
| 329 | 330 | ||
| 330 | #define NR_syscalls 319 | 331 | #define NR_syscalls 320 |
| 331 | #include <linux/err.h> | 332 | #include <linux/err.h> |
| 332 | 333 | ||
| 333 | /* | 334 | /* |
diff --git a/include/asm-i386/vic.h b/include/asm-i386/vic.h index 4abfcfb91eb8..53100f353612 100644 --- a/include/asm-i386/vic.h +++ b/include/asm-i386/vic.h | |||
| @@ -58,4 +58,4 @@ static const int VIC_CPI_Registers[] = | |||
| 58 | 58 | ||
| 59 | #define VIC_BOOT_INTERRUPT_MASK 0xfe | 59 | #define VIC_BOOT_INTERRUPT_MASK 0xfe |
| 60 | 60 | ||
| 61 | extern void smp_vic_timer_interrupt(struct pt_regs *regs); | 61 | extern void smp_vic_timer_interrupt(void); |
diff --git a/include/asm-i386/voyager.h b/include/asm-i386/voyager.h index aaf432dd7673..5b27838905b2 100644 --- a/include/asm-i386/voyager.h +++ b/include/asm-i386/voyager.h | |||
| @@ -118,33 +118,33 @@ typedef struct voyager_module { | |||
| 118 | } voyager_module_t; | 118 | } voyager_module_t; |
| 119 | 119 | ||
| 120 | typedef struct voyager_eeprom_hdr { | 120 | typedef struct voyager_eeprom_hdr { |
| 121 | __u8 module_id[4] __attribute__((packed)); | 121 | __u8 module_id[4]; |
| 122 | __u8 version_id __attribute__((packed)); | 122 | __u8 version_id; |
| 123 | __u8 config_id __attribute__((packed)); | 123 | __u8 config_id; |
| 124 | __u16 boundry_id __attribute__((packed)); /* boundary scan id */ | 124 | __u16 boundry_id; /* boundary scan id */ |
| 125 | __u16 ee_size __attribute__((packed)); /* size of EEPROM */ | 125 | __u16 ee_size; /* size of EEPROM */ |
| 126 | __u8 assembly[11] __attribute__((packed)); /* assembly # */ | 126 | __u8 assembly[11]; /* assembly # */ |
| 127 | __u8 assembly_rev __attribute__((packed)); /* assembly rev */ | 127 | __u8 assembly_rev; /* assembly rev */ |
| 128 | __u8 tracer[4] __attribute__((packed)); /* tracer number */ | 128 | __u8 tracer[4]; /* tracer number */ |
| 129 | __u16 assembly_cksum __attribute__((packed)); /* asm checksum */ | 129 | __u16 assembly_cksum; /* asm checksum */ |
| 130 | __u16 power_consump __attribute__((packed)); /* pwr requirements */ | 130 | __u16 power_consump; /* pwr requirements */ |
| 131 | __u16 num_asics __attribute__((packed)); /* number of asics */ | 131 | __u16 num_asics; /* number of asics */ |
| 132 | __u16 bist_time __attribute__((packed)); /* min. bist time */ | 132 | __u16 bist_time; /* min. bist time */ |
| 133 | __u16 err_log_offset __attribute__((packed)); /* error log offset */ | 133 | __u16 err_log_offset; /* error log offset */ |
| 134 | __u16 scan_path_offset __attribute__((packed));/* scan path offset */ | 134 | __u16 scan_path_offset;/* scan path offset */ |
| 135 | __u16 cct_offset __attribute__((packed)); | 135 | __u16 cct_offset; |
| 136 | __u16 log_length __attribute__((packed)); /* length of err log */ | 136 | __u16 log_length; /* length of err log */ |
| 137 | __u16 xsum_end __attribute__((packed)); /* offset to end of | 137 | __u16 xsum_end; /* offset to end of |
| 138 | checksum */ | 138 | checksum */ |
| 139 | __u8 reserved[4] __attribute__((packed)); | 139 | __u8 reserved[4]; |
| 140 | __u8 sflag __attribute__((packed)); /* starting sentinal */ | 140 | __u8 sflag; /* starting sentinal */ |
| 141 | __u8 part_number[13] __attribute__((packed)); /* prom part number */ | 141 | __u8 part_number[13]; /* prom part number */ |
| 142 | __u8 version[10] __attribute__((packed)); /* version number */ | 142 | __u8 version[10]; /* version number */ |
| 143 | __u8 signature[8] __attribute__((packed)); | 143 | __u8 signature[8]; |
| 144 | __u16 eeprom_chksum __attribute__((packed)); | 144 | __u16 eeprom_chksum; |
| 145 | __u32 data_stamp_offset __attribute__((packed)); | 145 | __u32 data_stamp_offset; |
| 146 | __u8 eflag __attribute__((packed)); /* ending sentinal */ | 146 | __u8 eflag ; /* ending sentinal */ |
| 147 | } voyager_eprom_hdr_t; | 147 | } __attribute__((packed)) voyager_eprom_hdr_t; |
| 148 | 148 | ||
| 149 | 149 | ||
| 150 | 150 | ||
| @@ -155,30 +155,30 @@ typedef struct voyager_eeprom_hdr { | |||
| 155 | * in the module EPROMs. We really only care about the IDs and | 155 | * in the module EPROMs. We really only care about the IDs and |
| 156 | * offsets */ | 156 | * offsets */ |
| 157 | typedef struct voyager_sp_table { | 157 | typedef struct voyager_sp_table { |
| 158 | __u8 asic_id __attribute__((packed)); | 158 | __u8 asic_id; |
| 159 | __u8 bypass_flag __attribute__((packed)); | 159 | __u8 bypass_flag; |
| 160 | __u16 asic_data_offset __attribute__((packed)); | 160 | __u16 asic_data_offset; |
| 161 | __u16 config_data_offset __attribute__((packed)); | 161 | __u16 config_data_offset; |
| 162 | } voyager_sp_table_t; | 162 | } __attribute__((packed)) voyager_sp_table_t; |
| 163 | 163 | ||
| 164 | typedef struct voyager_jtag_table { | 164 | typedef struct voyager_jtag_table { |
| 165 | __u8 icode[4] __attribute__((packed)); | 165 | __u8 icode[4]; |
| 166 | __u8 runbist[4] __attribute__((packed)); | 166 | __u8 runbist[4]; |
| 167 | __u8 intest[4] __attribute__((packed)); | 167 | __u8 intest[4]; |
| 168 | __u8 samp_preld[4] __attribute__((packed)); | 168 | __u8 samp_preld[4]; |
| 169 | __u8 ireg_len __attribute__((packed)); | 169 | __u8 ireg_len; |
| 170 | } voyager_jtt_t; | 170 | } __attribute__((packed)) voyager_jtt_t; |
| 171 | 171 | ||
| 172 | typedef struct voyager_asic_data_table { | 172 | typedef struct voyager_asic_data_table { |
| 173 | __u8 jtag_id[4] __attribute__((packed)); | 173 | __u8 jtag_id[4]; |
| 174 | __u16 length_bsr __attribute__((packed)); | 174 | __u16 length_bsr; |
| 175 | __u16 length_bist_reg __attribute__((packed)); | 175 | __u16 length_bist_reg; |
| 176 | __u32 bist_clk __attribute__((packed)); | 176 | __u32 bist_clk; |
| 177 | __u16 subaddr_bits __attribute__((packed)); | 177 | __u16 subaddr_bits; |
| 178 | __u16 seed_bits __attribute__((packed)); | 178 | __u16 seed_bits; |
| 179 | __u16 sig_bits __attribute__((packed)); | 179 | __u16 sig_bits; |
| 180 | __u16 jtag_offset __attribute__((packed)); | 180 | __u16 jtag_offset; |
| 181 | } voyager_at_t; | 181 | } __attribute__((packed)) voyager_at_t; |
| 182 | 182 | ||
| 183 | /* Voyager Interrupt Controller (VIC) registers */ | 183 | /* Voyager Interrupt Controller (VIC) registers */ |
| 184 | 184 | ||
| @@ -328,52 +328,52 @@ struct voyager_bios_info { | |||
| 328 | #define NUMBER_OF_POS_REGS 8 | 328 | #define NUMBER_OF_POS_REGS 8 |
| 329 | 329 | ||
| 330 | typedef struct { | 330 | typedef struct { |
| 331 | __u8 MC_Slot __attribute__((packed)); | 331 | __u8 MC_Slot; |
| 332 | __u8 POS_Values[NUMBER_OF_POS_REGS] __attribute__((packed)); | 332 | __u8 POS_Values[NUMBER_OF_POS_REGS]; |
| 333 | } MC_SlotInformation_t; | 333 | } __attribute__((packed)) MC_SlotInformation_t; |
| 334 | 334 | ||
| 335 | struct QuadDescription { | 335 | struct QuadDescription { |
| 336 | __u8 Type __attribute__((packed)); /* for type 0 (DYADIC or MONADIC) all fields | 336 | __u8 Type; /* for type 0 (DYADIC or MONADIC) all fields |
| 337 | * will be zero except for slot */ | 337 | * will be zero except for slot */ |
| 338 | __u8 StructureVersion __attribute__((packed)); | 338 | __u8 StructureVersion; |
| 339 | __u32 CPI_BaseAddress __attribute__((packed)); | 339 | __u32 CPI_BaseAddress; |
| 340 | __u32 LARC_BankSize __attribute__((packed)); | 340 | __u32 LARC_BankSize; |
| 341 | __u32 LocalMemoryStateBits __attribute__((packed)); | 341 | __u32 LocalMemoryStateBits; |
| 342 | __u8 Slot __attribute__((packed)); /* Processor slots 1 - 4 */ | 342 | __u8 Slot; /* Processor slots 1 - 4 */ |
| 343 | }; | 343 | } __attribute__((packed)); |
| 344 | 344 | ||
| 345 | struct ProcBoardInfo { | 345 | struct ProcBoardInfo { |
| 346 | __u8 Type __attribute__((packed)); | 346 | __u8 Type; |
| 347 | __u8 StructureVersion __attribute__((packed)); | 347 | __u8 StructureVersion; |
| 348 | __u8 NumberOfBoards __attribute__((packed)); | 348 | __u8 NumberOfBoards; |
| 349 | struct QuadDescription QuadData[MAX_PROCESSOR_BOARDS] __attribute__((packed)); | 349 | struct QuadDescription QuadData[MAX_PROCESSOR_BOARDS]; |
| 350 | }; | 350 | } __attribute__((packed)); |
| 351 | 351 | ||
| 352 | struct CacheDescription { | 352 | struct CacheDescription { |
| 353 | __u8 Level __attribute__((packed)); | 353 | __u8 Level; |
| 354 | __u32 TotalSize __attribute__((packed)); | 354 | __u32 TotalSize; |
| 355 | __u16 LineSize __attribute__((packed)); | 355 | __u16 LineSize; |
| 356 | __u8 Associativity __attribute__((packed)); | 356 | __u8 Associativity; |
| 357 | __u8 CacheType __attribute__((packed)); | 357 | __u8 CacheType; |
| 358 | __u8 WriteType __attribute__((packed)); | 358 | __u8 WriteType; |
| 359 | __u8 Number_CPUs_SharedBy __attribute__((packed)); | 359 | __u8 Number_CPUs_SharedBy; |
| 360 | __u8 Shared_CPUs_Hardware_IDs[MAX_SHARED_CPUS] __attribute__((packed)); | 360 | __u8 Shared_CPUs_Hardware_IDs[MAX_SHARED_CPUS]; |
| 361 | 361 | ||
| 362 | }; | 362 | } __attribute__((packed)); |
| 363 | 363 | ||
| 364 | struct CPU_Description { | 364 | struct CPU_Description { |
| 365 | __u8 CPU_HardwareId __attribute__((packed)); | 365 | __u8 CPU_HardwareId; |
| 366 | char *FRU_String __attribute__((packed)); | 366 | char *FRU_String; |
| 367 | __u8 NumberOfCacheLevels __attribute__((packed)); | 367 | __u8 NumberOfCacheLevels; |
| 368 | struct CacheDescription CacheLevelData[MAX_CACHE_LEVELS] __attribute__((packed)); | 368 | struct CacheDescription CacheLevelData[MAX_CACHE_LEVELS]; |
| 369 | }; | 369 | } __attribute__((packed)); |
| 370 | 370 | ||
| 371 | struct CPU_Info { | 371 | struct CPU_Info { |
| 372 | __u8 Type __attribute__((packed)); | 372 | __u8 Type; |
| 373 | __u8 StructureVersion __attribute__((packed)); | 373 | __u8 StructureVersion; |
| 374 | __u8 NumberOf_CPUs __attribute__((packed)); | 374 | __u8 NumberOf_CPUs; |
| 375 | struct CPU_Description CPU_Data[MAX_CPUS] __attribute__((packed)); | 375 | struct CPU_Description CPU_Data[MAX_CPUS]; |
| 376 | }; | 376 | } __attribute__((packed)); |
| 377 | 377 | ||
| 378 | 378 | ||
| 379 | /* | 379 | /* |
| @@ -505,8 +505,8 @@ extern int voyager_memory_detect(int region, __u32 *addr, __u32 *length); | |||
| 505 | extern void voyager_smp_intr_init(void); | 505 | extern void voyager_smp_intr_init(void); |
| 506 | extern __u8 voyager_extended_cmos_read(__u16 cmos_address); | 506 | extern __u8 voyager_extended_cmos_read(__u16 cmos_address); |
| 507 | extern void voyager_smp_dump(void); | 507 | extern void voyager_smp_dump(void); |
| 508 | extern void voyager_timer_interrupt(struct pt_regs *regs); | 508 | extern void voyager_timer_interrupt(void); |
| 509 | extern void smp_local_timer_interrupt(struct pt_regs * regs); | 509 | extern void smp_local_timer_interrupt(void); |
| 510 | extern void voyager_power_off(void); | 510 | extern void voyager_power_off(void); |
| 511 | extern void smp_voyager_power_off(void *dummy); | 511 | extern void smp_voyager_power_off(void *dummy); |
| 512 | extern void voyager_restart(void); | 512 | extern void voyager_restart(void); |
diff --git a/include/asm-ia64/io.h b/include/asm-ia64/io.h index 43bfff6c6b87..855c30af72a9 100644 --- a/include/asm-ia64/io.h +++ b/include/asm-ia64/io.h | |||
| @@ -417,6 +417,8 @@ __writeq (unsigned long val, volatile void __iomem *addr) | |||
| 417 | # define outl_p outl | 417 | # define outl_p outl |
| 418 | #endif | 418 | #endif |
| 419 | 419 | ||
| 420 | # ifdef __KERNEL__ | ||
| 421 | |||
| 420 | extern void __iomem * ioremap(unsigned long offset, unsigned long size); | 422 | extern void __iomem * ioremap(unsigned long offset, unsigned long size); |
| 421 | extern void __iomem * ioremap_nocache (unsigned long offset, unsigned long size); | 423 | extern void __iomem * ioremap_nocache (unsigned long offset, unsigned long size); |
| 422 | 424 | ||
| @@ -430,8 +432,6 @@ iounmap (volatile void __iomem *addr) | |||
| 430 | #define dmi_iounmap(x,l) iounmap(x) | 432 | #define dmi_iounmap(x,l) iounmap(x) |
| 431 | #define dmi_alloc(l) kmalloc(l, GFP_ATOMIC) | 433 | #define dmi_alloc(l) kmalloc(l, GFP_ATOMIC) |
| 432 | 434 | ||
| 433 | # ifdef __KERNEL__ | ||
| 434 | |||
| 435 | /* | 435 | /* |
| 436 | * String version of IO memory access ops: | 436 | * String version of IO memory access ops: |
| 437 | */ | 437 | */ |
diff --git a/include/asm-ia64/irq_regs.h b/include/asm-ia64/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-ia64/irq_regs.h | |||
| @@ -0,0 +1 @@ | |||
| #include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-ia64/machvec.h b/include/asm-ia64/machvec.h index 15b545a897a4..7ffbddf5306f 100644 --- a/include/asm-ia64/machvec.h +++ b/include/asm-ia64/machvec.h | |||
| @@ -20,12 +20,13 @@ struct page; | |||
| 20 | struct mm_struct; | 20 | struct mm_struct; |
| 21 | struct pci_bus; | 21 | struct pci_bus; |
| 22 | struct task_struct; | 22 | struct task_struct; |
| 23 | struct pci_dev; | ||
| 23 | 24 | ||
| 24 | typedef void ia64_mv_setup_t (char **); | 25 | typedef void ia64_mv_setup_t (char **); |
| 25 | typedef void ia64_mv_cpu_init_t (void); | 26 | typedef void ia64_mv_cpu_init_t (void); |
| 26 | typedef void ia64_mv_irq_init_t (void); | 27 | typedef void ia64_mv_irq_init_t (void); |
| 27 | typedef void ia64_mv_send_ipi_t (int, int, int, int); | 28 | typedef void ia64_mv_send_ipi_t (int, int, int, int); |
| 28 | typedef void ia64_mv_timer_interrupt_t (int, void *, struct pt_regs *); | 29 | typedef void ia64_mv_timer_interrupt_t (int, void *); |
| 29 | typedef void ia64_mv_global_tlb_purge_t (struct mm_struct *, unsigned long, unsigned long, unsigned long); | 30 | typedef void ia64_mv_global_tlb_purge_t (struct mm_struct *, unsigned long, unsigned long, unsigned long); |
| 30 | typedef void ia64_mv_tlb_migrate_finish_t (struct mm_struct *); | 31 | typedef void ia64_mv_tlb_migrate_finish_t (struct mm_struct *); |
| 31 | typedef unsigned int ia64_mv_local_vector_to_irq (u8); | 32 | typedef unsigned int ia64_mv_local_vector_to_irq (u8); |
| @@ -75,7 +76,9 @@ typedef unsigned char ia64_mv_readb_relaxed_t (const volatile void __iomem *); | |||
| 75 | typedef unsigned short ia64_mv_readw_relaxed_t (const volatile void __iomem *); | 76 | typedef unsigned short ia64_mv_readw_relaxed_t (const volatile void __iomem *); |
| 76 | typedef unsigned int ia64_mv_readl_relaxed_t (const volatile void __iomem *); | 77 | typedef unsigned int ia64_mv_readl_relaxed_t (const volatile void __iomem *); |
| 77 | typedef unsigned long ia64_mv_readq_relaxed_t (const volatile void __iomem *); | 78 | typedef unsigned long ia64_mv_readq_relaxed_t (const volatile void __iomem *); |
| 78 | typedef int ia64_mv_msi_init_t (void); | 79 | |
| 80 | typedef int ia64_mv_setup_msi_irq_t (unsigned int irq, struct pci_dev *pdev); | ||
| 81 | typedef void ia64_mv_teardown_msi_irq_t (unsigned int irq); | ||
| 79 | 82 | ||
| 80 | static inline void | 83 | static inline void |
| 81 | machvec_noop (void) | 84 | machvec_noop (void) |
| @@ -93,7 +96,7 @@ machvec_noop_task (struct task_struct *task) | |||
| 93 | } | 96 | } |
| 94 | 97 | ||
| 95 | extern void machvec_setup (char **); | 98 | extern void machvec_setup (char **); |
| 96 | extern void machvec_timer_interrupt (int, void *, struct pt_regs *); | 99 | extern void machvec_timer_interrupt (int, void *); |
| 97 | extern void machvec_dma_sync_single (struct device *, dma_addr_t, size_t, int); | 100 | extern void machvec_dma_sync_single (struct device *, dma_addr_t, size_t, int); |
| 98 | extern void machvec_dma_sync_sg (struct device *, struct scatterlist *, int, int); | 101 | extern void machvec_dma_sync_sg (struct device *, struct scatterlist *, int, int); |
| 99 | extern void machvec_tlb_migrate_finish (struct mm_struct *); | 102 | extern void machvec_tlb_migrate_finish (struct mm_struct *); |
| @@ -154,7 +157,8 @@ extern void machvec_tlb_migrate_finish (struct mm_struct *); | |||
| 154 | # define platform_readl_relaxed ia64_mv.readl_relaxed | 157 | # define platform_readl_relaxed ia64_mv.readl_relaxed |
| 155 | # define platform_readq_relaxed ia64_mv.readq_relaxed | 158 | # define platform_readq_relaxed ia64_mv.readq_relaxed |
| 156 | # define platform_migrate ia64_mv.migrate | 159 | # define platform_migrate ia64_mv.migrate |
| 157 | # define platform_msi_init ia64_mv.msi_init | 160 | # define platform_setup_msi_irq ia64_mv.setup_msi_irq |
| 161 | # define platform_teardown_msi_irq ia64_mv.teardown_msi_irq | ||
| 158 | # endif | 162 | # endif |
| 159 | 163 | ||
| 160 | /* __attribute__((__aligned__(16))) is required to make size of the | 164 | /* __attribute__((__aligned__(16))) is required to make size of the |
| @@ -204,7 +208,8 @@ struct ia64_machine_vector { | |||
| 204 | ia64_mv_readl_relaxed_t *readl_relaxed; | 208 | ia64_mv_readl_relaxed_t *readl_relaxed; |
| 205 | ia64_mv_readq_relaxed_t *readq_relaxed; | 209 | ia64_mv_readq_relaxed_t *readq_relaxed; |
| 206 | ia64_mv_migrate_t *migrate; | 210 | ia64_mv_migrate_t *migrate; |
| 207 | ia64_mv_msi_init_t *msi_init; | 211 | ia64_mv_setup_msi_irq_t *setup_msi_irq; |
| 212 | ia64_mv_teardown_msi_irq_t *teardown_msi_irq; | ||
| 208 | } __attribute__((__aligned__(16))); /* align attrib? see above comment */ | 213 | } __attribute__((__aligned__(16))); /* align attrib? see above comment */ |
| 209 | 214 | ||
| 210 | #define MACHVEC_INIT(name) \ | 215 | #define MACHVEC_INIT(name) \ |
| @@ -250,7 +255,8 @@ struct ia64_machine_vector { | |||
| 250 | platform_readl_relaxed, \ | 255 | platform_readl_relaxed, \ |
| 251 | platform_readq_relaxed, \ | 256 | platform_readq_relaxed, \ |
| 252 | platform_migrate, \ | 257 | platform_migrate, \ |
| 253 | platform_msi_init, \ | 258 | platform_setup_msi_irq, \ |
| 259 | platform_teardown_msi_irq, \ | ||
| 254 | } | 260 | } |
| 255 | 261 | ||
| 256 | extern struct ia64_machine_vector ia64_mv; | 262 | extern struct ia64_machine_vector ia64_mv; |
| @@ -404,8 +410,11 @@ extern int ia64_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size | |||
| 404 | #ifndef platform_migrate | 410 | #ifndef platform_migrate |
| 405 | # define platform_migrate machvec_noop_task | 411 | # define platform_migrate machvec_noop_task |
| 406 | #endif | 412 | #endif |
| 407 | #ifndef platform_msi_init | 413 | #ifndef platform_setup_msi_irq |
| 408 | # define platform_msi_init ((ia64_mv_msi_init_t*)NULL) | 414 | # define platform_setup_msi_irq ((ia64_mv_setup_msi_irq_t*)NULL) |
| 415 | #endif | ||
| 416 | #ifndef platform_teardown_msi_irq | ||
| 417 | # define platform_teardown_msi_irq ((ia64_mv_teardown_msi_irq_t*)NULL) | ||
| 409 | #endif | 418 | #endif |
| 410 | 419 | ||
| 411 | #endif /* _ASM_IA64_MACHVEC_H */ | 420 | #endif /* _ASM_IA64_MACHVEC_H */ |
diff --git a/include/asm-ia64/machvec_sn2.h b/include/asm-ia64/machvec_sn2.h index cf724dc79d8c..c54b165b1c17 100644 --- a/include/asm-ia64/machvec_sn2.h +++ b/include/asm-ia64/machvec_sn2.h | |||
| @@ -67,7 +67,8 @@ extern ia64_mv_dma_sync_sg_for_device sn_dma_sync_sg_for_device; | |||
| 67 | extern ia64_mv_dma_mapping_error sn_dma_mapping_error; | 67 | extern ia64_mv_dma_mapping_error sn_dma_mapping_error; |
| 68 | extern ia64_mv_dma_supported sn_dma_supported; | 68 | extern ia64_mv_dma_supported sn_dma_supported; |
| 69 | extern ia64_mv_migrate_t sn_migrate; | 69 | extern ia64_mv_migrate_t sn_migrate; |
| 70 | extern ia64_mv_msi_init_t sn_msi_init; | 70 | extern ia64_mv_setup_msi_irq_t sn_setup_msi_irq; |
| 71 | extern ia64_mv_teardown_msi_irq_t sn_teardown_msi_irq; | ||
| 71 | 72 | ||
| 72 | 73 | ||
| 73 | /* | 74 | /* |
| @@ -120,9 +121,11 @@ extern ia64_mv_msi_init_t sn_msi_init; | |||
| 120 | #define platform_dma_supported sn_dma_supported | 121 | #define platform_dma_supported sn_dma_supported |
| 121 | #define platform_migrate sn_migrate | 122 | #define platform_migrate sn_migrate |
| 122 | #ifdef CONFIG_PCI_MSI | 123 | #ifdef CONFIG_PCI_MSI |
| 123 | #define platform_msi_init sn_msi_init | 124 | #define platform_setup_msi_irq sn_setup_msi_irq |
| 125 | #define platform_teardown_msi_irq sn_teardown_msi_irq | ||
| 124 | #else | 126 | #else |
| 125 | #define platform_msi_init ((ia64_mv_msi_init_t*)NULL) | 127 | #define platform_setup_msi_irq ((ia64_mv_setup_msi_irq_t*)NULL) |
| 128 | #define platform_teardown_msi_irq ((ia64_mv_teardown_msi_irq_t*)NULL) | ||
| 126 | #endif | 129 | #endif |
| 127 | 130 | ||
| 128 | #include <asm/sn/io.h> | 131 | #include <asm/sn/io.h> |
diff --git a/include/asm-ia64/msi.h b/include/asm-ia64/msi.h deleted file mode 100644 index bb92b0dbde2f..000000000000 --- a/include/asm-ia64/msi.h +++ /dev/null | |||
| @@ -1,29 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2003-2004 Intel | ||
| 3 | * Copyright (C) Tom Long Nguyen (tom.l.nguyen@intel.com) | ||
| 4 | */ | ||
| 5 | |||
| 6 | #ifndef ASM_MSI_H | ||
| 7 | #define ASM_MSI_H | ||
| 8 | |||
| 9 | #define NR_VECTORS NR_IRQS | ||
| 10 | #define FIRST_DEVICE_VECTOR IA64_FIRST_DEVICE_VECTOR | ||
| 11 | #define LAST_DEVICE_VECTOR IA64_LAST_DEVICE_VECTOR | ||
| 12 | static inline void set_intr_gate (int nr, void *func) {} | ||
| 13 | #define IO_APIC_VECTOR(irq) (irq) | ||
| 14 | #define ack_APIC_irq ia64_eoi | ||
| 15 | #define MSI_TARGET_CPU_SHIFT 4 | ||
| 16 | |||
| 17 | extern struct msi_ops msi_apic_ops; | ||
| 18 | |||
| 19 | static inline int msi_arch_init(void) | ||
| 20 | { | ||
| 21 | if (platform_msi_init) | ||
| 22 | return platform_msi_init(); | ||
| 23 | |||
| 24 | /* default ops for most ia64 platforms */ | ||
| 25 | msi_register(&msi_apic_ops); | ||
| 26 | return 0; | ||
| 27 | } | ||
| 28 | |||
| 29 | #endif /* ASM_MSI_H */ | ||
diff --git a/include/asm-ia64/pal.h b/include/asm-ia64/pal.h index 2c8fd92d0ece..4283ddcc25fb 100644 --- a/include/asm-ia64/pal.h +++ b/include/asm-ia64/pal.h | |||
| @@ -764,7 +764,7 @@ struct ia64_pal_retval { | |||
| 764 | * (generally 0) MUST be passed. Reserved parameters are not optional | 764 | * (generally 0) MUST be passed. Reserved parameters are not optional |
| 765 | * parameters. | 765 | * parameters. |
| 766 | */ | 766 | */ |
| 767 | extern struct ia64_pal_retval ia64_pal_call_static (u64, u64, u64, u64, u64); | 767 | extern struct ia64_pal_retval ia64_pal_call_static (u64, u64, u64, u64); |
| 768 | extern struct ia64_pal_retval ia64_pal_call_stacked (u64, u64, u64, u64); | 768 | extern struct ia64_pal_retval ia64_pal_call_stacked (u64, u64, u64, u64); |
| 769 | extern struct ia64_pal_retval ia64_pal_call_phys_static (u64, u64, u64, u64); | 769 | extern struct ia64_pal_retval ia64_pal_call_phys_static (u64, u64, u64, u64); |
| 770 | extern struct ia64_pal_retval ia64_pal_call_phys_stacked (u64, u64, u64, u64); | 770 | extern struct ia64_pal_retval ia64_pal_call_phys_stacked (u64, u64, u64, u64); |
| @@ -774,14 +774,7 @@ extern void ia64_load_scratch_fpregs (struct ia64_fpreg *); | |||
| 774 | #define PAL_CALL(iprv,a0,a1,a2,a3) do { \ | 774 | #define PAL_CALL(iprv,a0,a1,a2,a3) do { \ |
| 775 | struct ia64_fpreg fr[6]; \ | 775 | struct ia64_fpreg fr[6]; \ |
| 776 | ia64_save_scratch_fpregs(fr); \ | 776 | ia64_save_scratch_fpregs(fr); \ |
| 777 | iprv = ia64_pal_call_static(a0, a1, a2, a3, 0); \ | 777 | iprv = ia64_pal_call_static(a0, a1, a2, a3); \ |
| 778 | ia64_load_scratch_fpregs(fr); \ | ||
| 779 | } while (0) | ||
| 780 | |||
| 781 | #define PAL_CALL_IC_OFF(iprv,a0,a1,a2,a3) do { \ | ||
| 782 | struct ia64_fpreg fr[6]; \ | ||
| 783 | ia64_save_scratch_fpregs(fr); \ | ||
| 784 | iprv = ia64_pal_call_static(a0, a1, a2, a3, 1); \ | ||
| 785 | ia64_load_scratch_fpregs(fr); \ | 778 | ia64_load_scratch_fpregs(fr); \ |
| 786 | } while (0) | 779 | } while (0) |
| 787 | 780 | ||
diff --git a/include/asm-ia64/sn/pcibr_provider.h b/include/asm-ia64/sn/pcibr_provider.h index e3b0c3fe5eed..da3eade0cae2 100644 --- a/include/asm-ia64/sn/pcibr_provider.h +++ b/include/asm-ia64/sn/pcibr_provider.h | |||
| @@ -135,7 +135,7 @@ extern void pcireg_intr_addr_addr_set(struct pcibus_info *, int, u64 | |||
| 135 | extern void pcireg_force_intr_set(struct pcibus_info *, int); | 135 | extern void pcireg_force_intr_set(struct pcibus_info *, int); |
| 136 | extern u64 pcireg_wrb_flush_get(struct pcibus_info *, int); | 136 | extern u64 pcireg_wrb_flush_get(struct pcibus_info *, int); |
| 137 | extern void pcireg_int_ate_set(struct pcibus_info *, int, u64); | 137 | extern void pcireg_int_ate_set(struct pcibus_info *, int, u64); |
| 138 | extern u64 * pcireg_int_ate_addr(struct pcibus_info *, int); | 138 | extern u64 __iomem * pcireg_int_ate_addr(struct pcibus_info *, int); |
| 139 | extern void pcibr_force_interrupt(struct sn_irq_info *sn_irq_info); | 139 | extern void pcibr_force_interrupt(struct sn_irq_info *sn_irq_info); |
| 140 | extern void pcibr_change_devices_irq(struct sn_irq_info *sn_irq_info); | 140 | extern void pcibr_change_devices_irq(struct sn_irq_info *sn_irq_info); |
| 141 | extern int pcibr_ate_alloc(struct pcibus_info *, int); | 141 | extern int pcibr_ate_alloc(struct pcibus_info *, int); |
diff --git a/include/asm-ia64/sn/tioca_provider.h b/include/asm-ia64/sn/tioca_provider.h index 65cdd73c2a57..9a820ac61be3 100644 --- a/include/asm-ia64/sn/tioca_provider.h +++ b/include/asm-ia64/sn/tioca_provider.h | |||
| @@ -162,11 +162,11 @@ static inline void | |||
| 162 | tioca_tlbflush(struct tioca_kernel *tioca_kernel) | 162 | tioca_tlbflush(struct tioca_kernel *tioca_kernel) |
| 163 | { | 163 | { |
| 164 | volatile u64 tmp; | 164 | volatile u64 tmp; |
| 165 | volatile struct tioca *ca_base; | 165 | volatile struct tioca __iomem *ca_base; |
| 166 | struct tioca_common *tioca_common; | 166 | struct tioca_common *tioca_common; |
| 167 | 167 | ||
| 168 | tioca_common = tioca_kernel->ca_common; | 168 | tioca_common = tioca_kernel->ca_common; |
| 169 | ca_base = (struct tioca *)tioca_common->ca_common.bs_base; | 169 | ca_base = (struct tioca __iomem *)tioca_common->ca_common.bs_base; |
| 170 | 170 | ||
| 171 | /* | 171 | /* |
| 172 | * Explicit flushes not needed if GART is in cached mode | 172 | * Explicit flushes not needed if GART is in cached mode |
diff --git a/include/asm-ia64/sn/tioce_provider.h b/include/asm-ia64/sn/tioce_provider.h index 6d62b13f7ae7..32c32f30b099 100644 --- a/include/asm-ia64/sn/tioce_provider.h +++ b/include/asm-ia64/sn/tioce_provider.h | |||
| @@ -53,7 +53,7 @@ struct tioce_dmamap { | |||
| 53 | u64 ct_start; /* coretalk start address */ | 53 | u64 ct_start; /* coretalk start address */ |
| 54 | u64 pci_start; /* bus start address */ | 54 | u64 pci_start; /* bus start address */ |
| 55 | 55 | ||
| 56 | u64 *ate_hw; /* hw ptr of first ate in map */ | 56 | u64 __iomem *ate_hw;/* hw ptr of first ate in map */ |
| 57 | u64 *ate_shadow; /* shadow ptr of firat ate */ | 57 | u64 *ate_shadow; /* shadow ptr of firat ate */ |
| 58 | u16 ate_count; /* # ate's in the map */ | 58 | u16 ate_count; /* # ate's in the map */ |
| 59 | }; | 59 | }; |
diff --git a/include/asm-ia64/sn/xpc.h b/include/asm-ia64/sn/xpc.h index 35e1386f37ab..1d45e1518fb3 100644 --- a/include/asm-ia64/sn/xpc.h +++ b/include/asm-ia64/sn/xpc.h | |||
| @@ -669,7 +669,7 @@ extern struct device *xpc_part; | |||
| 669 | extern struct device *xpc_chan; | 669 | extern struct device *xpc_chan; |
| 670 | extern int xpc_disengage_request_timelimit; | 670 | extern int xpc_disengage_request_timelimit; |
| 671 | extern int xpc_disengage_request_timedout; | 671 | extern int xpc_disengage_request_timedout; |
| 672 | extern irqreturn_t xpc_notify_IRQ_handler(int, void *, struct pt_regs *); | 672 | extern irqreturn_t xpc_notify_IRQ_handler(int, void *); |
| 673 | extern void xpc_dropped_IPI_check(struct xpc_partition *); | 673 | extern void xpc_dropped_IPI_check(struct xpc_partition *); |
| 674 | extern void xpc_activate_partition(struct xpc_partition *); | 674 | extern void xpc_activate_partition(struct xpc_partition *); |
| 675 | extern void xpc_activate_kthreads(struct xpc_channel *, int); | 675 | extern void xpc_activate_kthreads(struct xpc_channel *, int); |
diff --git a/include/asm-m32r/io.h b/include/asm-m32r/io.h index 70ad1c949c2b..d06933bd6318 100644 --- a/include/asm-m32r/io.h +++ b/include/asm-m32r/io.h | |||
| @@ -166,38 +166,6 @@ static inline void _writel(unsigned long l, unsigned long addr) | |||
| 166 | 166 | ||
| 167 | #define flush_write_buffers() do { } while (0) /* M32R_FIXME */ | 167 | #define flush_write_buffers() do { } while (0) /* M32R_FIXME */ |
| 168 | 168 | ||
| 169 | /** | ||
| 170 | * check_signature - find BIOS signatures | ||
| 171 | * @io_addr: mmio address to check | ||
| 172 | * @signature: signature block | ||
| 173 | * @length: length of signature | ||
| 174 | * | ||
| 175 | * Perform a signature comparison with the ISA mmio address io_addr. | ||
| 176 | * Returns 1 on a match. | ||
| 177 | * | ||
| 178 | * This function is deprecated. New drivers should use ioremap and | ||
| 179 | * check_signature. | ||
| 180 | */ | ||
| 181 | |||
| 182 | static inline int check_signature(void __iomem *io_addr, | ||
| 183 | const unsigned char *signature, int length) | ||
| 184 | { | ||
| 185 | int retval = 0; | ||
| 186 | #if 0 | ||
| 187 | printk("check_signature\n"); | ||
| 188 | do { | ||
| 189 | if (readb(io_addr) != *signature) | ||
| 190 | goto out; | ||
| 191 | io_addr++; | ||
| 192 | signature++; | ||
| 193 | length--; | ||
| 194 | } while (length); | ||
| 195 | retval = 1; | ||
| 196 | out: | ||
| 197 | #endif | ||
| 198 | return retval; | ||
| 199 | } | ||
| 200 | |||
| 201 | static inline void | 169 | static inline void |
| 202 | memset_io(volatile void __iomem *addr, unsigned char val, int count) | 170 | memset_io(volatile void __iomem *addr, unsigned char val, int count) |
| 203 | { | 171 | { |
diff --git a/include/asm-m32r/irq_regs.h b/include/asm-m32r/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-m32r/irq_regs.h | |||
| @@ -0,0 +1 @@ | |||
| #include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-m68k/atari_stdma.h b/include/asm-m68k/atari_stdma.h index b4eadf852738..8e389b7fa70c 100644 --- a/include/asm-m68k/atari_stdma.h +++ b/include/asm-m68k/atari_stdma.h | |||
| @@ -8,8 +8,7 @@ | |||
| 8 | 8 | ||
| 9 | /***************************** Prototypes *****************************/ | 9 | /***************************** Prototypes *****************************/ |
| 10 | 10 | ||
| 11 | void stdma_lock(irqreturn_t (*handler)(int, void *, struct pt_regs *), | 11 | void stdma_lock(irq_handler_t handler, void *data); |
| 12 | void *data); | ||
| 13 | void stdma_release( void ); | 12 | void stdma_release( void ); |
| 14 | int stdma_others_waiting( void ); | 13 | int stdma_others_waiting( void ); |
| 15 | int stdma_islocked( void ); | 14 | int stdma_islocked( void ); |
diff --git a/include/asm-m68k/dma-mapping.h b/include/asm-m68k/dma-mapping.h index cebbb03370ec..d90d841d3dfd 100644 --- a/include/asm-m68k/dma-mapping.h +++ b/include/asm-m68k/dma-mapping.h | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | 5 | ||
| 6 | struct scatterlist; | 6 | struct scatterlist; |
| 7 | 7 | ||
| 8 | #ifndef CONFIG_MMU_SUN3 | ||
| 8 | static inline int dma_supported(struct device *dev, u64 mask) | 9 | static inline int dma_supported(struct device *dev, u64 mask) |
| 9 | { | 10 | { |
| 10 | return 1; | 11 | return 1; |
| @@ -26,7 +27,7 @@ static inline int dma_is_consistent(dma_addr_t dma_addr) | |||
| 26 | } | 27 | } |
| 27 | 28 | ||
| 28 | extern void *dma_alloc_coherent(struct device *, size_t, | 29 | extern void *dma_alloc_coherent(struct device *, size_t, |
| 29 | dma_addr_t *, int); | 30 | dma_addr_t *, gfp_t); |
| 30 | extern void dma_free_coherent(struct device *, size_t, | 31 | extern void dma_free_coherent(struct device *, size_t, |
| 31 | void *, dma_addr_t); | 32 | void *, dma_addr_t); |
| 32 | 33 | ||
| @@ -88,4 +89,8 @@ static inline int dma_mapping_error(dma_addr_t handle) | |||
| 88 | return 0; | 89 | return 0; |
| 89 | } | 90 | } |
| 90 | 91 | ||
| 92 | #else | ||
| 93 | #include <asm-generic/dma-mapping-broken.h> | ||
| 94 | #endif | ||
| 95 | |||
| 91 | #endif /* _M68K_DMA_MAPPING_H */ | 96 | #endif /* _M68K_DMA_MAPPING_H */ |
diff --git a/include/asm-m68k/floppy.h b/include/asm-m68k/floppy.h index 57f4fdda65ab..45dc908932a3 100644 --- a/include/asm-m68k/floppy.h +++ b/include/asm-m68k/floppy.h | |||
| @@ -17,8 +17,7 @@ | |||
| 17 | 17 | ||
| 18 | #include <linux/vmalloc.h> | 18 | #include <linux/vmalloc.h> |
| 19 | 19 | ||
| 20 | asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id, | 20 | asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id); |
| 21 | struct pt_regs *regs); | ||
| 22 | 21 | ||
| 23 | /* constants... */ | 22 | /* constants... */ |
| 24 | 23 | ||
| @@ -184,8 +183,7 @@ static void fd_disable_dma(void) | |||
| 184 | 183 | ||
| 185 | /* this is the only truly Q40 specific function */ | 184 | /* this is the only truly Q40 specific function */ |
| 186 | 185 | ||
| 187 | asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id, | 186 | asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id) |
| 188 | struct pt_regs *regs) | ||
| 189 | { | 187 | { |
| 190 | register unsigned char st; | 188 | register unsigned char st; |
| 191 | 189 | ||
| @@ -198,7 +196,7 @@ asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id, | |||
| 198 | static int dma_wait=0; | 196 | static int dma_wait=0; |
| 199 | #endif | 197 | #endif |
| 200 | if(!doing_pdma) { | 198 | if(!doing_pdma) { |
| 201 | floppy_interrupt(irq, dev_id, regs); | 199 | floppy_interrupt(irq, dev_id); |
| 202 | return IRQ_HANDLED; | 200 | return IRQ_HANDLED; |
| 203 | } | 201 | } |
| 204 | 202 | ||
| @@ -246,7 +244,7 @@ asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id, | |||
| 246 | dma_wait=0; | 244 | dma_wait=0; |
| 247 | #endif | 245 | #endif |
| 248 | doing_pdma = 0; | 246 | doing_pdma = 0; |
| 249 | floppy_interrupt(irq, dev_id, regs); | 247 | floppy_interrupt(irq, dev_id); |
| 250 | return IRQ_HANDLED; | 248 | return IRQ_HANDLED; |
| 251 | } | 249 | } |
| 252 | #ifdef TRACE_FLPY_INT | 250 | #ifdef TRACE_FLPY_INT |
diff --git a/include/asm-m68k/ide.h b/include/asm-m68k/ide.h index 365f76fb8013..f9ffb2cbbae8 100644 --- a/include/asm-m68k/ide.h +++ b/include/asm-m68k/ide.h | |||
| @@ -123,7 +123,7 @@ static __inline__ void ide_release_lock (void) | |||
| 123 | } | 123 | } |
| 124 | 124 | ||
| 125 | static __inline__ void | 125 | static __inline__ void |
| 126 | ide_get_lock(irqreturn_t (*handler)(int, void *, struct pt_regs *), void *data) | 126 | ide_get_lock(irq_handler_t handler, void *data) |
| 127 | { | 127 | { |
| 128 | if (MACH_IS_ATARI) { | 128 | if (MACH_IS_ATARI) { |
| 129 | if (falconide_intr_lock == 0) { | 129 | if (falconide_intr_lock == 0) { |
diff --git a/include/asm-m68k/irq.h b/include/asm-m68k/irq.h index 3257f9881002..4901cb105e2f 100644 --- a/include/asm-m68k/irq.h +++ b/include/asm-m68k/irq.h | |||
| @@ -83,7 +83,7 @@ struct pt_regs; | |||
| 83 | * interrupt source (if it supports chaining). | 83 | * interrupt source (if it supports chaining). |
| 84 | */ | 84 | */ |
| 85 | typedef struct irq_node { | 85 | typedef struct irq_node { |
| 86 | int (*handler)(int, void *, struct pt_regs *); | 86 | int (*handler)(int, void *); |
| 87 | void *dev_id; | 87 | void *dev_id; |
| 88 | struct irq_node *next; | 88 | struct irq_node *next; |
| 89 | unsigned long flags; | 89 | unsigned long flags; |
| @@ -93,12 +93,12 @@ typedef struct irq_node { | |||
| 93 | /* | 93 | /* |
| 94 | * This structure has only 4 elements for speed reasons | 94 | * This structure has only 4 elements for speed reasons |
| 95 | */ | 95 | */ |
| 96 | typedef struct irq_handler { | 96 | struct irq_handler { |
| 97 | int (*handler)(int, void *, struct pt_regs *); | 97 | int (*handler)(int, void *); |
| 98 | unsigned long flags; | 98 | unsigned long flags; |
| 99 | void *dev_id; | 99 | void *dev_id; |
| 100 | const char *devname; | 100 | const char *devname; |
| 101 | } irq_handler_t; | 101 | }; |
| 102 | 102 | ||
| 103 | struct irq_controller { | 103 | struct irq_controller { |
| 104 | const char *name; | 104 | const char *name; |
| @@ -122,6 +122,7 @@ extern void m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt, | |||
| 122 | void (*handler)(unsigned int, struct pt_regs *)); | 122 | void (*handler)(unsigned int, struct pt_regs *)); |
| 123 | extern void m68k_setup_irq_controller(struct irq_controller *, unsigned int, unsigned int); | 123 | extern void m68k_setup_irq_controller(struct irq_controller *, unsigned int, unsigned int); |
| 124 | 124 | ||
| 125 | asmlinkage void m68k_handle_int(unsigned int, struct pt_regs *); | 125 | asmlinkage void m68k_handle_int(unsigned int); |
| 126 | asmlinkage void __m68k_handle_int(unsigned int, struct pt_regs *); | ||
| 126 | 127 | ||
| 127 | #endif /* _M68K_IRQ_H_ */ | 128 | #endif /* _M68K_IRQ_H_ */ |
diff --git a/include/asm-m68k/irq_regs.h b/include/asm-m68k/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-m68k/irq_regs.h | |||
| @@ -0,0 +1 @@ | |||
| #include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-m68k/mac_iop.h b/include/asm-m68k/mac_iop.h index b0d2e3473537..a2c7e6fcca38 100644 --- a/include/asm-m68k/mac_iop.h +++ b/include/asm-m68k/mac_iop.h | |||
| @@ -143,17 +143,17 @@ struct iop_msg { | |||
| 143 | int status; /* status of this message */ | 143 | int status; /* status of this message */ |
| 144 | __u8 message[IOP_MSG_LEN]; /* the message being sent/received */ | 144 | __u8 message[IOP_MSG_LEN]; /* the message being sent/received */ |
| 145 | __u8 reply[IOP_MSG_LEN]; /* the reply to the message */ | 145 | __u8 reply[IOP_MSG_LEN]; /* the reply to the message */ |
| 146 | void (*handler)(struct iop_msg *, struct pt_regs *); | 146 | void (*handler)(struct iop_msg *); |
| 147 | /* function to call when reply recvd */ | 147 | /* function to call when reply recvd */ |
| 148 | }; | 148 | }; |
| 149 | 149 | ||
| 150 | extern int iop_scc_present,iop_ism_present; | 150 | extern int iop_scc_present,iop_ism_present; |
| 151 | 151 | ||
| 152 | extern int iop_listen(uint, uint, | 152 | extern int iop_listen(uint, uint, |
| 153 | void (*handler)(struct iop_msg *, struct pt_regs *), | 153 | void (*handler)(struct iop_msg *), |
| 154 | const char *); | 154 | const char *); |
| 155 | extern int iop_send_message(uint, uint, void *, uint, __u8 *, | 155 | extern int iop_send_message(uint, uint, void *, uint, __u8 *, |
| 156 | void (*)(struct iop_msg *, struct pt_regs *)); | 156 | void (*)(struct iop_msg *)); |
| 157 | extern void iop_complete_message(struct iop_msg *); | 157 | extern void iop_complete_message(struct iop_msg *); |
| 158 | extern void iop_upload_code(uint, __u8 *, uint, __u16); | 158 | extern void iop_upload_code(uint, __u8 *, uint, __u16); |
| 159 | extern void iop_download_code(uint, __u8 *, uint, __u16); | 159 | extern void iop_download_code(uint, __u8 *, uint, __u16); |
diff --git a/include/asm-m68k/machdep.h b/include/asm-m68k/machdep.h index df898f27e434..26d2b91209c5 100644 --- a/include/asm-m68k/machdep.h +++ b/include/asm-m68k/machdep.h | |||
| @@ -10,7 +10,7 @@ struct rtc_time; | |||
| 10 | struct rtc_pll_info; | 10 | struct rtc_pll_info; |
| 11 | struct buffer_head; | 11 | struct buffer_head; |
| 12 | 12 | ||
| 13 | extern void (*mach_sched_init) (irqreturn_t (*handler)(int, void *, struct pt_regs *)); | 13 | extern void (*mach_sched_init) (irq_handler_t handler); |
| 14 | /* machine dependent irq functions */ | 14 | /* machine dependent irq functions */ |
| 15 | extern void (*mach_init_IRQ) (void); | 15 | extern void (*mach_init_IRQ) (void); |
| 16 | extern void (*mach_get_model) (char *model); | 16 | extern void (*mach_get_model) (char *model); |
diff --git a/include/asm-m68k/signal.h b/include/asm-m68k/signal.h index de1ba6ead3b4..3db8a81942f1 100644 --- a/include/asm-m68k/signal.h +++ b/include/asm-m68k/signal.h | |||
| @@ -198,6 +198,7 @@ static inline int sigfindinword(unsigned long word) | |||
| 198 | return word ^ 31; | 198 | return word ^ 31; |
| 199 | } | 199 | } |
| 200 | 200 | ||
| 201 | struct pt_regs; | ||
| 201 | extern void ptrace_signal_deliver(struct pt_regs *regs, void *cookie); | 202 | extern void ptrace_signal_deliver(struct pt_regs *regs, void *cookie); |
| 202 | 203 | ||
| 203 | #endif /* __KERNEL__ */ | 204 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-m68k/string.h b/include/asm-m68k/string.h index 6c59215b285e..2eb7df1e0f5d 100644 --- a/include/asm-m68k/string.h +++ b/include/asm-m68k/string.h | |||
| @@ -1,138 +1,114 @@ | |||
| 1 | #ifndef _M68K_STRING_H_ | 1 | #ifndef _M68K_STRING_H_ |
| 2 | #define _M68K_STRING_H_ | 2 | #define _M68K_STRING_H_ |
| 3 | 3 | ||
| 4 | #include <asm/setup.h> | 4 | #include <linux/types.h> |
| 5 | #include <asm/page.h> | 5 | #include <linux/compiler.h> |
| 6 | 6 | ||
| 7 | #define __HAVE_ARCH_STRCPY | 7 | static inline size_t __kernel_strlen(const char *s) |
| 8 | static inline char * strcpy(char * dest,const char *src) | ||
| 9 | { | 8 | { |
| 10 | char *xdest = dest; | 9 | const char *sc; |
| 11 | |||
| 12 | __asm__ __volatile__ | ||
| 13 | ("1:\tmoveb %1@+,%0@+\n\t" | ||
| 14 | "jne 1b" | ||
| 15 | : "=a" (dest), "=a" (src) | ||
| 16 | : "0" (dest), "1" (src) : "memory"); | ||
| 17 | return xdest; | ||
| 18 | } | ||
| 19 | 10 | ||
| 20 | #define __HAVE_ARCH_STRNCPY | 11 | for (sc = s; *sc++; ) |
| 21 | static inline char * strncpy(char *dest, const char *src, size_t n) | 12 | ; |
| 22 | { | 13 | return sc - s - 1; |
| 23 | char *xdest = dest; | ||
| 24 | |||
| 25 | if (n == 0) | ||
| 26 | return xdest; | ||
| 27 | |||
| 28 | __asm__ __volatile__ | ||
| 29 | ("1:\tmoveb %1@+,%0@+\n\t" | ||
| 30 | "jeq 2f\n\t" | ||
| 31 | "subql #1,%2\n\t" | ||
| 32 | "jne 1b\n\t" | ||
| 33 | "2:" | ||
| 34 | : "=a" (dest), "=a" (src), "=d" (n) | ||
| 35 | : "0" (dest), "1" (src), "2" (n) | ||
| 36 | : "memory"); | ||
| 37 | return xdest; | ||
| 38 | } | 14 | } |
| 39 | 15 | ||
| 40 | #define __HAVE_ARCH_STRCAT | 16 | static inline char *__kernel_strcpy(char *dest, const char *src) |
| 41 | static inline char * strcat(char * dest, const char * src) | ||
| 42 | { | 17 | { |
| 43 | char *tmp = dest; | 18 | char *xdest = dest; |
| 44 | 19 | ||
| 45 | while (*dest) | 20 | asm volatile ("\n" |
| 46 | dest++; | 21 | "1: move.b (%1)+,(%0)+\n" |
| 47 | while ((*dest++ = *src++)) | 22 | " jne 1b" |
| 48 | ; | 23 | : "+a" (dest), "+a" (src) |
| 49 | 24 | : : "memory"); | |
| 50 | return tmp; | 25 | return xdest; |
| 51 | } | 26 | } |
| 52 | 27 | ||
| 53 | #define __HAVE_ARCH_STRNCAT | 28 | #ifndef __IN_STRING_C |
| 54 | static inline char * strncat(char *dest, const char *src, size_t count) | ||
| 55 | { | ||
| 56 | char *tmp = dest; | ||
| 57 | |||
| 58 | if (count) { | ||
| 59 | while (*dest) | ||
| 60 | dest++; | ||
| 61 | while ((*dest++ = *src++)) { | ||
| 62 | if (--count == 0) { | ||
| 63 | *dest++='\0'; | ||
| 64 | break; | ||
| 65 | } | ||
| 66 | } | ||
| 67 | } | ||
| 68 | 29 | ||
| 69 | return tmp; | 30 | #define __HAVE_ARCH_STRLEN |
| 70 | } | 31 | #define strlen(s) (__builtin_constant_p(s) ? \ |
| 32 | __builtin_strlen(s) : \ | ||
| 33 | __kernel_strlen(s)) | ||
| 71 | 34 | ||
| 72 | #define __HAVE_ARCH_STRCHR | 35 | #define __HAVE_ARCH_STRNLEN |
| 73 | static inline char * strchr(const char * s, int c) | 36 | static inline size_t strnlen(const char *s, size_t count) |
| 74 | { | 37 | { |
| 75 | const char ch = c; | 38 | const char *sc = s; |
| 76 | 39 | ||
| 77 | for(; *s != ch; ++s) | 40 | asm volatile ("\n" |
| 78 | if (*s == '\0') | 41 | "1: subq.l #1,%1\n" |
| 79 | return( NULL ); | 42 | " jcs 2f\n" |
| 80 | return( (char *) s); | 43 | " tst.b (%0)+\n" |
| 44 | " jne 1b\n" | ||
| 45 | " subq.l #1,%0\n" | ||
| 46 | "2:" | ||
| 47 | : "+a" (sc), "+d" (count)); | ||
| 48 | return sc - s; | ||
| 81 | } | 49 | } |
| 82 | 50 | ||
| 83 | /* strstr !! */ | 51 | #define __HAVE_ARCH_STRCPY |
| 52 | #if __GNUC__ >= 4 | ||
| 53 | #define strcpy(d, s) (__builtin_constant_p(s) && \ | ||
| 54 | __builtin_strlen(s) <= 32 ? \ | ||
| 55 | __builtin_strcpy(d, s) : \ | ||
| 56 | __kernel_strcpy(d, s)) | ||
| 57 | #else | ||
| 58 | #define strcpy(d, s) __kernel_strcpy(d, s) | ||
| 59 | #endif | ||
| 84 | 60 | ||
| 85 | #define __HAVE_ARCH_STRLEN | 61 | #define __HAVE_ARCH_STRNCPY |
| 86 | static inline size_t strlen(const char * s) | 62 | static inline char *strncpy(char *dest, const char *src, size_t n) |
| 87 | { | 63 | { |
| 88 | const char *sc; | 64 | char *xdest = dest; |
| 89 | for (sc = s; *sc != '\0'; ++sc) ; | 65 | |
| 90 | return(sc - s); | 66 | asm volatile ("\n" |
| 67 | " jra 2f\n" | ||
| 68 | "1: move.b (%1),(%0)+\n" | ||
| 69 | " jeq 2f\n" | ||
| 70 | " addq.l #1,%1\n" | ||
| 71 | "2: subq.l #1,%2\n" | ||
| 72 | " jcc 1b\n" | ||
| 73 | : "+a" (dest), "+a" (src), "+d" (n) | ||
| 74 | : : "memory"); | ||
| 75 | return xdest; | ||
| 91 | } | 76 | } |
| 92 | 77 | ||
| 93 | /* strnlen !! */ | 78 | #define __HAVE_ARCH_STRCAT |
| 79 | #define strcat(d, s) ({ \ | ||
| 80 | char *__d = (d); \ | ||
| 81 | strcpy(__d + strlen(__d), (s)); \ | ||
| 82 | }) | ||
| 94 | 83 | ||
| 95 | #define __HAVE_ARCH_STRCMP | 84 | #define __HAVE_ARCH_STRCHR |
| 96 | static inline int strcmp(const char * cs,const char * ct) | 85 | static inline char *strchr(const char *s, int c) |
| 97 | { | 86 | { |
| 98 | char __res; | 87 | char sc, ch = c; |
| 99 | 88 | ||
| 100 | __asm__ | 89 | for (; (sc = *s++) != ch; ) { |
| 101 | ("1:\tmoveb %0@+,%2\n\t" /* get *cs */ | 90 | if (!sc) |
| 102 | "cmpb %1@+,%2\n\t" /* compare a byte */ | 91 | return NULL; |
| 103 | "jne 2f\n\t" /* not equal, break out */ | 92 | } |
| 104 | "tstb %2\n\t" /* at end of cs? */ | 93 | return (char *)s - 1; |
| 105 | "jne 1b\n\t" /* no, keep going */ | ||
| 106 | "jra 3f\n\t" /* strings are equal */ | ||
| 107 | "2:\tsubb %1@-,%2\n\t" /* *cs - *ct */ | ||
| 108 | "3:" | ||
| 109 | : "=a" (cs), "=a" (ct), "=d" (__res) | ||
| 110 | : "0" (cs), "1" (ct)); | ||
| 111 | return __res; | ||
| 112 | } | 94 | } |
| 113 | 95 | ||
| 114 | #define __HAVE_ARCH_STRNCMP | 96 | #define __HAVE_ARCH_STRCMP |
| 115 | static inline int strncmp(const char * cs,const char * ct,size_t count) | 97 | static inline int strcmp(const char *cs, const char *ct) |
| 116 | { | 98 | { |
| 117 | char __res; | 99 | char res; |
| 118 | 100 | ||
| 119 | if (!count) | 101 | asm ("\n" |
| 120 | return 0; | 102 | "1: move.b (%0)+,%2\n" /* get *cs */ |
| 121 | __asm__ | 103 | " cmp.b (%1)+,%2\n" /* compare a byte */ |
| 122 | ("1:\tmovb %0@+,%3\n\t" /* get *cs */ | 104 | " jne 2f\n" /* not equal, break out */ |
| 123 | "cmpb %1@+,%3\n\t" /* compare a byte */ | 105 | " tst.b %2\n" /* at end of cs? */ |
| 124 | "jne 3f\n\t" /* not equal, break out */ | 106 | " jne 1b\n" /* no, keep going */ |
| 125 | "tstb %3\n\t" /* at end of cs? */ | 107 | " jra 3f\n" /* strings are equal */ |
| 126 | "jeq 4f\n\t" /* yes, all done */ | 108 | "2: sub.b -(%1),%2\n" /* *cs - *ct */ |
| 127 | "subql #1,%2\n\t" /* no, adjust count */ | 109 | "3:" |
| 128 | "jne 1b\n\t" /* more to do, keep going */ | 110 | : "+a" (cs), "+a" (ct), "=d" (res)); |
| 129 | "2:\tmoveq #0,%3\n\t" /* strings are equal */ | 111 | return res; |
| 130 | "jra 4f\n\t" | ||
| 131 | "3:\tsubb %1@-,%3\n\t" /* *cs - *ct */ | ||
| 132 | "4:" | ||
| 133 | : "=a" (cs), "=a" (ct), "=d" (count), "=d" (__res) | ||
| 134 | : "0" (cs), "1" (ct), "2" (count)); | ||
| 135 | return __res; | ||
| 136 | } | 112 | } |
| 137 | 113 | ||
| 138 | #define __HAVE_ARCH_MEMSET | 114 | #define __HAVE_ARCH_MEMSET |
| @@ -150,4 +126,6 @@ extern void *memmove(void *, const void *, __kernel_size_t); | |||
| 150 | extern int memcmp(const void *, const void *, __kernel_size_t); | 126 | extern int memcmp(const void *, const void *, __kernel_size_t); |
| 151 | #define memcmp(d, s, n) __builtin_memcmp(d, s, n) | 127 | #define memcmp(d, s, n) __builtin_memcmp(d, s, n) |
| 152 | 128 | ||
| 129 | #endif | ||
| 130 | |||
| 153 | #endif /* _M68K_STRING_H_ */ | 131 | #endif /* _M68K_STRING_H_ */ |
diff --git a/include/asm-m68k/sun3mmu.h b/include/asm-m68k/sun3mmu.h index 6c8c17d047a1..d8f17a0d8c9f 100644 --- a/include/asm-m68k/sun3mmu.h +++ b/include/asm-m68k/sun3mmu.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | #ifndef __SUN3_MMU_H__ | 4 | #ifndef __SUN3_MMU_H__ |
| 5 | #define __SUN3_MMU_H__ | 5 | #define __SUN3_MMU_H__ |
| 6 | 6 | ||
| 7 | #include <linux/types.h> | ||
| 7 | #include <asm/movs.h> | 8 | #include <asm/movs.h> |
| 8 | #include <asm/sun3-head.h> | 9 | #include <asm/sun3-head.h> |
| 9 | 10 | ||
| @@ -160,7 +161,7 @@ static inline void sun3_put_context(unsigned char c) | |||
| 160 | return; | 161 | return; |
| 161 | } | 162 | } |
| 162 | 163 | ||
| 163 | extern void *sun3_ioremap(unsigned long phys, unsigned long size, | 164 | extern void __iomem *sun3_ioremap(unsigned long phys, unsigned long size, |
| 164 | unsigned long type); | 165 | unsigned long type); |
| 165 | 166 | ||
| 166 | extern int sun3_map_test(unsigned long addr, char *val); | 167 | extern int sun3_map_test(unsigned long addr, char *val); |
diff --git a/include/asm-m68k/sun3xflop.h b/include/asm-m68k/sun3xflop.h index ca8cc4113843..32c45f84ac60 100644 --- a/include/asm-m68k/sun3xflop.h +++ b/include/asm-m68k/sun3xflop.h | |||
| @@ -111,8 +111,7 @@ static void sun3x_82072_fd_outb(unsigned char value, int port) | |||
| 111 | } | 111 | } |
| 112 | 112 | ||
| 113 | 113 | ||
| 114 | asmlinkage irqreturn_t sun3xflop_hardint(int irq, void *dev_id, | 114 | asmlinkage irqreturn_t sun3xflop_hardint(int irq, void *dev_id) |
| 115 | struct pt_regs * regs) | ||
| 116 | { | 115 | { |
| 117 | register unsigned char st; | 116 | register unsigned char st; |
| 118 | 117 | ||
| @@ -125,7 +124,7 @@ asmlinkage irqreturn_t sun3xflop_hardint(int irq, void *dev_id, | |||
| 125 | static int dma_wait=0; | 124 | static int dma_wait=0; |
| 126 | #endif | 125 | #endif |
| 127 | if(!doing_pdma) { | 126 | if(!doing_pdma) { |
| 128 | floppy_interrupt(irq, dev_id, regs); | 127 | floppy_interrupt(irq, dev_id); |
| 129 | return IRQ_HANDLED; | 128 | return IRQ_HANDLED; |
| 130 | } | 129 | } |
| 131 | 130 | ||
| @@ -189,7 +188,7 @@ asmlinkage irqreturn_t sun3xflop_hardint(int irq, void *dev_id, | |||
| 189 | dma_wait=0; | 188 | dma_wait=0; |
| 190 | #endif | 189 | #endif |
| 191 | 190 | ||
| 192 | floppy_interrupt(irq, dev_id, regs); | 191 | floppy_interrupt(irq, dev_id); |
| 193 | return IRQ_HANDLED; | 192 | return IRQ_HANDLED; |
| 194 | } | 193 | } |
| 195 | 194 | ||
diff --git a/include/asm-m68k/system.h b/include/asm-m68k/system.h index 131a0cb0f491..243dd13e6bfc 100644 --- a/include/asm-m68k/system.h +++ b/include/asm-m68k/system.h | |||
| @@ -78,13 +78,13 @@ static inline int irqs_disabled(void) | |||
| 78 | #define mb() barrier() | 78 | #define mb() barrier() |
| 79 | #define rmb() barrier() | 79 | #define rmb() barrier() |
| 80 | #define wmb() barrier() | 80 | #define wmb() barrier() |
| 81 | #define read_barrier_depends() do { } while(0) | 81 | #define read_barrier_depends() ((void)0) |
| 82 | #define set_mb(var, value) do { xchg(&var, value); } while (0) | 82 | #define set_mb(var, value) ({ (var) = (value); wmb(); }) |
| 83 | 83 | ||
| 84 | #define smp_mb() barrier() | 84 | #define smp_mb() barrier() |
| 85 | #define smp_rmb() barrier() | 85 | #define smp_rmb() barrier() |
| 86 | #define smp_wmb() barrier() | 86 | #define smp_wmb() barrier() |
| 87 | #define smp_read_barrier_depends() do { } while(0) | 87 | #define smp_read_barrier_depends() ((void)0) |
| 88 | 88 | ||
| 89 | 89 | ||
| 90 | #define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) | 90 | #define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) |
diff --git a/include/asm-m68k/uaccess.h b/include/asm-m68k/uaccess.h index 88b1f47400e1..e4c9f080ff20 100644 --- a/include/asm-m68k/uaccess.h +++ b/include/asm-m68k/uaccess.h | |||
| @@ -76,7 +76,7 @@ asm volatile ("\n" \ | |||
| 76 | break; \ | 76 | break; \ |
| 77 | case 8: \ | 77 | case 8: \ |
| 78 | { \ | 78 | { \ |
| 79 | const void *__pu_ptr = (ptr); \ | 79 | const void __user *__pu_ptr = (ptr); \ |
| 80 | asm volatile ("\n" \ | 80 | asm volatile ("\n" \ |
| 81 | "1: moves.l %2,(%1)+\n" \ | 81 | "1: moves.l %2,(%1)+\n" \ |
| 82 | "2: moves.l %R2,(%1)\n" \ | 82 | "2: moves.l %R2,(%1)\n" \ |
| @@ -125,7 +125,7 @@ asm volatile ("\n" \ | |||
| 125 | " .previous" \ | 125 | " .previous" \ |
| 126 | : "+d" (res), "=&" #reg (__gu_val) \ | 126 | : "+d" (res), "=&" #reg (__gu_val) \ |
| 127 | : "m" (*(ptr)), "i" (err)); \ | 127 | : "m" (*(ptr)), "i" (err)); \ |
| 128 | (x) = (typeof(*(ptr)))(long)__gu_val; \ | 128 | (x) = (typeof(*(ptr)))(unsigned long)__gu_val; \ |
| 129 | }) | 129 | }) |
| 130 | 130 | ||
| 131 | #define __get_user(x, ptr) \ | 131 | #define __get_user(x, ptr) \ |
| @@ -221,16 +221,16 @@ __constant_copy_from_user(void *to, const void __user *from, unsigned long n) | |||
| 221 | 221 | ||
| 222 | switch (n) { | 222 | switch (n) { |
| 223 | case 1: | 223 | case 1: |
| 224 | __get_user_asm(res, *(u8 *)to, (u8 *)from, u8, b, d, 1); | 224 | __get_user_asm(res, *(u8 *)to, (u8 __user *)from, u8, b, d, 1); |
| 225 | break; | 225 | break; |
| 226 | case 2: | 226 | case 2: |
| 227 | __get_user_asm(res, *(u16 *)to, (u16 *)from, u16, w, d, 2); | 227 | __get_user_asm(res, *(u16 *)to, (u16 __user *)from, u16, w, d, 2); |
| 228 | break; | 228 | break; |
| 229 | case 3: | 229 | case 3: |
| 230 | __constant_copy_from_user_asm(res, to, from, tmp, 3, w, b,); | 230 | __constant_copy_from_user_asm(res, to, from, tmp, 3, w, b,); |
| 231 | break; | 231 | break; |
| 232 | case 4: | 232 | case 4: |
| 233 | __get_user_asm(res, *(u32 *)to, (u32 *)from, u32, l, r, 4); | 233 | __get_user_asm(res, *(u32 *)to, (u32 __user *)from, u32, l, r, 4); |
| 234 | break; | 234 | break; |
| 235 | case 5: | 235 | case 5: |
| 236 | __constant_copy_from_user_asm(res, to, from, tmp, 5, l, b,); | 236 | __constant_copy_from_user_asm(res, to, from, tmp, 5, l, b,); |
| @@ -302,16 +302,16 @@ __constant_copy_to_user(void __user *to, const void *from, unsigned long n) | |||
| 302 | 302 | ||
| 303 | switch (n) { | 303 | switch (n) { |
| 304 | case 1: | 304 | case 1: |
| 305 | __put_user_asm(res, *(u8 *)from, (u8 *)to, b, d, 1); | 305 | __put_user_asm(res, *(u8 *)from, (u8 __user *)to, b, d, 1); |
| 306 | break; | 306 | break; |
| 307 | case 2: | 307 | case 2: |
| 308 | __put_user_asm(res, *(u16 *)from, (u16 *)to, w, d, 2); | 308 | __put_user_asm(res, *(u16 *)from, (u16 __user *)to, w, d, 2); |
| 309 | break; | 309 | break; |
| 310 | case 3: | 310 | case 3: |
| 311 | __constant_copy_to_user_asm(res, to, from, tmp, 3, w, b,); | 311 | __constant_copy_to_user_asm(res, to, from, tmp, 3, w, b,); |
| 312 | break; | 312 | break; |
| 313 | case 4: | 313 | case 4: |
| 314 | __put_user_asm(res, *(u32 *)from, (u32 *)to, l, r, 4); | 314 | __put_user_asm(res, *(u32 *)from, (u32 __user *)to, l, r, 4); |
| 315 | break; | 315 | break; |
| 316 | case 5: | 316 | case 5: |
| 317 | __constant_copy_to_user_asm(res, to, from, tmp, 5, l, b,); | 317 | __constant_copy_to_user_asm(res, to, from, tmp, 5, l, b,); |
diff --git a/include/asm-m68k/unistd.h b/include/asm-m68k/unistd.h index 3ab716f0fc18..ad4348058c66 100644 --- a/include/asm-m68k/unistd.h +++ b/include/asm-m68k/unistd.h | |||
| @@ -284,10 +284,39 @@ | |||
| 284 | #define __NR_add_key 279 | 284 | #define __NR_add_key 279 |
| 285 | #define __NR_request_key 280 | 285 | #define __NR_request_key 280 |
| 286 | #define __NR_keyctl 281 | 286 | #define __NR_keyctl 281 |
| 287 | #define __NR_ioprio_set 282 | ||
| 288 | #define __NR_ioprio_get 283 | ||
| 289 | #define __NR_inotify_init 284 | ||
| 290 | #define __NR_inotify_add_watch 285 | ||
| 291 | #define __NR_inotify_rm_watch 286 | ||
| 292 | #define __NR_migrate_pages 287 | ||
| 293 | #define __NR_openat 288 | ||
| 294 | #define __NR_mkdirat 289 | ||
| 295 | #define __NR_mknodat 290 | ||
| 296 | #define __NR_fchownat 291 | ||
| 297 | #define __NR_futimesat 292 | ||
| 298 | #define __NR_fstatat64 293 | ||
| 299 | #define __NR_unlinkat 294 | ||
| 300 | #define __NR_renameat 295 | ||
| 301 | #define __NR_linkat 296 | ||
| 302 | #define __NR_symlinkat 297 | ||
| 303 | #define __NR_readlinkat 298 | ||
| 304 | #define __NR_fchmodat 299 | ||
| 305 | #define __NR_faccessat 300 | ||
| 306 | #define __NR_pselect6 301 | ||
| 307 | #define __NR_ppoll 302 | ||
| 308 | #define __NR_unshare 303 | ||
| 309 | #define __NR_set_robust_list 304 | ||
| 310 | #define __NR_get_robust_list 305 | ||
| 311 | #define __NR_splice 306 | ||
| 312 | #define __NR_sync_file_range 307 | ||
| 313 | #define __NR_tee 308 | ||
| 314 | #define __NR_vmsplice 309 | ||
| 315 | #define __NR_move_pages 310 | ||
| 287 | 316 | ||
| 288 | #ifdef __KERNEL__ | 317 | #ifdef __KERNEL__ |
| 289 | 318 | ||
| 290 | #define NR_syscalls 282 | 319 | #define NR_syscalls 311 |
| 291 | #include <linux/err.h> | 320 | #include <linux/err.h> |
| 292 | 321 | ||
| 293 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see | 322 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see |
diff --git a/include/asm-m68k/user.h b/include/asm-m68k/user.h index e8d5a64c7e79..d7c0b109bd45 100644 --- a/include/asm-m68k/user.h +++ b/include/asm-m68k/user.h | |||
| @@ -81,7 +81,7 @@ struct user{ | |||
| 81 | unsigned long magic; /* To uniquely identify a core file */ | 81 | unsigned long magic; /* To uniquely identify a core file */ |
| 82 | char u_comm[32]; /* User command that was responsible */ | 82 | char u_comm[32]; /* User command that was responsible */ |
| 83 | }; | 83 | }; |
| 84 | #define NBPG PAGE_SIZE | 84 | #define NBPG 4096 |
| 85 | #define UPAGES 1 | 85 | #define UPAGES 1 |
| 86 | #define HOST_TEXT_START_ADDR (u.start_code) | 86 | #define HOST_TEXT_START_ADDR (u.start_code) |
| 87 | #define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) | 87 | #define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) |
diff --git a/include/asm-m68knommu/unistd.h b/include/asm-m68knommu/unistd.h index daafb5d43ef1..ebaf03197114 100644 --- a/include/asm-m68knommu/unistd.h +++ b/include/asm-m68knommu/unistd.h | |||
| @@ -281,14 +281,43 @@ | |||
| 281 | #define __NR_mq_notify 275 | 281 | #define __NR_mq_notify 275 |
| 282 | #define __NR_mq_getsetattr 276 | 282 | #define __NR_mq_getsetattr 276 |
| 283 | #define __NR_waitid 277 | 283 | #define __NR_waitid 277 |
| 284 | #define __NR_sys_setaltroot 278 | 284 | #define __NR_vserver 278 |
| 285 | #define __NR_add_key 279 | 285 | #define __NR_add_key 279 |
| 286 | #define __NR_request_key 280 | 286 | #define __NR_request_key 280 |
| 287 | #define __NR_keyctl 281 | 287 | #define __NR_keyctl 281 |
| 288 | 288 | #define __NR_ioprio_set 282 | |
| 289 | #define __NR_ioprio_get 283 | ||
| 290 | #define __NR_inotify_init 284 | ||
| 291 | #define __NR_inotify_add_watch 285 | ||
| 292 | #define __NR_inotify_rm_watch 286 | ||
| 293 | #define __NR_migrate_pages 287 | ||
| 294 | #define __NR_openat 288 | ||
| 295 | #define __NR_mkdirat 289 | ||
| 296 | #define __NR_mknodat 290 | ||
| 297 | #define __NR_fchownat 291 | ||
| 298 | #define __NR_futimesat 292 | ||
| 299 | #define __NR_fstatat64 293 | ||
| 300 | #define __NR_unlinkat 294 | ||
| 301 | #define __NR_renameat 295 | ||
| 302 | #define __NR_linkat 296 | ||
| 303 | #define __NR_symlinkat 297 | ||
| 304 | #define __NR_readlinkat 298 | ||
| 305 | #define __NR_fchmodat 299 | ||
| 306 | #define __NR_faccessat 300 | ||
| 307 | #define __NR_pselect6 301 | ||
| 308 | #define __NR_ppoll 302 | ||
| 309 | #define __NR_unshare 303 | ||
| 310 | #define __NR_set_robust_list 304 | ||
| 311 | #define __NR_get_robust_list 305 | ||
| 312 | #define __NR_splice 306 | ||
| 313 | #define __NR_sync_file_range 307 | ||
| 314 | #define __NR_tee 308 | ||
| 315 | #define __NR_vmsplice 309 | ||
| 316 | #define __NR_move_pages 310 | ||
| 317 | |||
| 289 | #ifdef __KERNEL__ | 318 | #ifdef __KERNEL__ |
| 290 | 319 | ||
| 291 | #define NR_syscalls 282 | 320 | #define NR_syscalls 311 |
| 292 | #include <linux/err.h> | 321 | #include <linux/err.h> |
| 293 | 322 | ||
| 294 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see | 323 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see |
diff --git a/include/asm-mips/dec/ecc.h b/include/asm-mips/dec/ecc.h index 19495a490e72..707ffdbc9add 100644 --- a/include/asm-mips/dec/ecc.h +++ b/include/asm-mips/dec/ecc.h | |||
| @@ -49,8 +49,7 @@ struct pt_regs; | |||
| 49 | 49 | ||
| 50 | extern void dec_ecc_be_init(void); | 50 | extern void dec_ecc_be_init(void); |
| 51 | extern int dec_ecc_be_handler(struct pt_regs *regs, int is_fixup); | 51 | extern int dec_ecc_be_handler(struct pt_regs *regs, int is_fixup); |
| 52 | extern irqreturn_t dec_ecc_be_interrupt(int irq, void *dev_id, | 52 | extern irqreturn_t dec_ecc_be_interrupt(int irq, void *dev_id); |
| 53 | struct pt_regs *regs); | ||
| 54 | #endif | 53 | #endif |
| 55 | 54 | ||
| 56 | #endif /* __ASM_MIPS_DEC_ECC_H */ | 55 | #endif /* __ASM_MIPS_DEC_ECC_H */ |
diff --git a/include/asm-mips/dec/kn01.h b/include/asm-mips/dec/kn01.h index eb522aa1e226..28fa717ac423 100644 --- a/include/asm-mips/dec/kn01.h +++ b/include/asm-mips/dec/kn01.h | |||
| @@ -84,8 +84,7 @@ extern spinlock_t kn01_lock; | |||
| 84 | 84 | ||
| 85 | extern void dec_kn01_be_init(void); | 85 | extern void dec_kn01_be_init(void); |
| 86 | extern int dec_kn01_be_handler(struct pt_regs *regs, int is_fixup); | 86 | extern int dec_kn01_be_handler(struct pt_regs *regs, int is_fixup); |
| 87 | extern irqreturn_t dec_kn01_be_interrupt(int irq, void *dev_id, | 87 | extern irqreturn_t dec_kn01_be_interrupt(int irq, void *dev_id); |
| 88 | struct pt_regs *regs); | ||
| 89 | #endif | 88 | #endif |
| 90 | 89 | ||
| 91 | #endif /* __ASM_MIPS_DEC_KN01_H */ | 90 | #endif /* __ASM_MIPS_DEC_KN01_H */ |
diff --git a/include/asm-mips/dec/kn02xa.h b/include/asm-mips/dec/kn02xa.h index a25f3d7da7f7..b56b4577f6ef 100644 --- a/include/asm-mips/dec/kn02xa.h +++ b/include/asm-mips/dec/kn02xa.h | |||
| @@ -78,8 +78,7 @@ struct pt_regs; | |||
| 78 | 78 | ||
| 79 | extern void dec_kn02xa_be_init(void); | 79 | extern void dec_kn02xa_be_init(void); |
| 80 | extern int dec_kn02xa_be_handler(struct pt_regs *regs, int is_fixup); | 80 | extern int dec_kn02xa_be_handler(struct pt_regs *regs, int is_fixup); |
| 81 | extern irqreturn_t dec_kn02xa_be_interrupt(int irq, void *dev_id, | 81 | extern irqreturn_t dec_kn02xa_be_interrupt(int irq, void *dev_id); |
| 82 | struct pt_regs *regs); | ||
| 83 | #endif | 82 | #endif |
| 84 | 83 | ||
| 85 | #endif /* __ASM_MIPS_DEC_KN02XA_H */ | 84 | #endif /* __ASM_MIPS_DEC_KN02XA_H */ |
diff --git a/include/asm-mips/fpu.h b/include/asm-mips/fpu.h index 58c561a9ec6b..efef843b93f0 100644 --- a/include/asm-mips/fpu.h +++ b/include/asm-mips/fpu.h | |||
| @@ -134,9 +134,11 @@ static inline void restore_fp(struct task_struct *tsk) | |||
| 134 | 134 | ||
| 135 | static inline fpureg_t *get_fpu_regs(struct task_struct *tsk) | 135 | static inline fpureg_t *get_fpu_regs(struct task_struct *tsk) |
| 136 | { | 136 | { |
| 137 | if (cpu_has_fpu) { | 137 | if (tsk == current) { |
| 138 | if ((tsk == current) && __is_fpu_owner()) | 138 | preempt_disable(); |
| 139 | if (is_fpu_owner()) | ||
| 139 | _save_fp(current); | 140 | _save_fp(current); |
| 141 | preempt_enable(); | ||
| 140 | } | 142 | } |
| 141 | 143 | ||
| 142 | return tsk->thread.fpu.fpr; | 144 | return tsk->thread.fpu.fpr; |
diff --git a/include/asm-mips/io.h b/include/asm-mips/io.h index df624e1ee6e2..bc5f3c53155f 100644 --- a/include/asm-mips/io.h +++ b/include/asm-mips/io.h | |||
| @@ -172,7 +172,7 @@ extern unsigned long isa_slot_offset; | |||
| 172 | #define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT) | 172 | #define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT) |
| 173 | 173 | ||
| 174 | extern void __iomem * __ioremap(phys_t offset, phys_t size, unsigned long flags); | 174 | extern void __iomem * __ioremap(phys_t offset, phys_t size, unsigned long flags); |
| 175 | extern void __iounmap(volatile void __iomem *addr); | 175 | extern void __iounmap(const volatile void __iomem *addr); |
| 176 | 176 | ||
| 177 | static inline void __iomem * __ioremap_mode(phys_t offset, unsigned long size, | 177 | static inline void __iomem * __ioremap_mode(phys_t offset, unsigned long size, |
| 178 | unsigned long flags) | 178 | unsigned long flags) |
| @@ -279,7 +279,7 @@ static inline void __iomem * __ioremap_mode(phys_t offset, unsigned long size, | |||
| 279 | #define ioremap_uncached_accelerated(offset, size) \ | 279 | #define ioremap_uncached_accelerated(offset, size) \ |
| 280 | __ioremap_mode((offset), (size), _CACHE_UNCACHED_ACCELERATED) | 280 | __ioremap_mode((offset), (size), _CACHE_UNCACHED_ACCELERATED) |
| 281 | 281 | ||
| 282 | static inline void iounmap(volatile void __iomem *addr) | 282 | static inline void iounmap(const volatile void __iomem *addr) |
| 283 | { | 283 | { |
| 284 | #define __IS_KSEG1(addr) (((unsigned long)(addr) & ~0x1fffffffUL) == CKSEG1) | 284 | #define __IS_KSEG1(addr) (((unsigned long)(addr) & ~0x1fffffffUL) == CKSEG1) |
| 285 | 285 | ||
| @@ -562,32 +562,6 @@ extern void pci_iounmap(struct pci_dev *dev, void __iomem *); | |||
| 562 | #define eth_io_copy_and_sum(skb,src,len,unused) memcpy_fromio((skb)->data,(src),(len)) | 562 | #define eth_io_copy_and_sum(skb,src,len,unused) memcpy_fromio((skb)->data,(src),(len)) |
| 563 | 563 | ||
| 564 | /* | 564 | /* |
| 565 | * check_signature - find BIOS signatures | ||
| 566 | * @io_addr: mmio address to check | ||
| 567 | * @signature: signature block | ||
| 568 | * @length: length of signature | ||
| 569 | * | ||
| 570 | * Perform a signature comparison with the mmio address io_addr. This | ||
| 571 | * address should have been obtained by ioremap. | ||
| 572 | * Returns 1 on a match. | ||
| 573 | */ | ||
| 574 | static inline int check_signature(char __iomem *io_addr, | ||
| 575 | const unsigned char *signature, int length) | ||
| 576 | { | ||
| 577 | int retval = 0; | ||
| 578 | do { | ||
| 579 | if (readb(io_addr) != *signature) | ||
| 580 | goto out; | ||
| 581 | io_addr++; | ||
| 582 | signature++; | ||
| 583 | length--; | ||
| 584 | } while (length); | ||
| 585 | retval = 1; | ||
| 586 | out: | ||
| 587 | return retval; | ||
| 588 | } | ||
| 589 | |||
| 590 | /* | ||
| 591 | * The caches on some architectures aren't dma-coherent and have need to | 565 | * The caches on some architectures aren't dma-coherent and have need to |
| 592 | * handle this in software. There are three types of operations that | 566 | * handle this in software. There are three types of operations that |
| 593 | * can be applied to dma buffers. | 567 | * can be applied to dma buffers. |
diff --git a/include/asm-mips/irq.h b/include/asm-mips/irq.h index d35c61776a02..0ce2a80b689e 100644 --- a/include/asm-mips/irq.h +++ b/include/asm-mips/irq.h | |||
| @@ -24,9 +24,7 @@ static inline int irq_canonicalize(int irq) | |||
| 24 | #define irq_canonicalize(irq) (irq) /* Sane hardware, sane code ... */ | 24 | #define irq_canonicalize(irq) (irq) /* Sane hardware, sane code ... */ |
| 25 | #endif | 25 | #endif |
| 26 | 26 | ||
| 27 | struct pt_regs; | 27 | extern asmlinkage unsigned int do_IRQ(unsigned int irq); |
| 28 | |||
| 29 | extern asmlinkage unsigned int do_IRQ(unsigned int irq, struct pt_regs *regs); | ||
| 30 | 28 | ||
| 31 | #ifdef CONFIG_MIPS_MT_SMTC | 29 | #ifdef CONFIG_MIPS_MT_SMTC |
| 32 | /* | 30 | /* |
| @@ -55,18 +53,18 @@ do { \ | |||
| 55 | * Ideally there should be away to get this into kernel/irq/handle.c to | 53 | * Ideally there should be away to get this into kernel/irq/handle.c to |
| 56 | * avoid the overhead of a call for just a tiny function ... | 54 | * avoid the overhead of a call for just a tiny function ... |
| 57 | */ | 55 | */ |
| 58 | #define do_IRQ(irq, regs) \ | 56 | #define do_IRQ(irq) \ |
| 59 | do { \ | 57 | do { \ |
| 60 | irq_enter(); \ | 58 | irq_enter(); \ |
| 61 | __DO_IRQ_SMTC_HOOK(); \ | 59 | __DO_IRQ_SMTC_HOOK(); \ |
| 62 | __do_IRQ((irq), (regs)); \ | 60 | __do_IRQ((irq)); \ |
| 63 | irq_exit(); \ | 61 | irq_exit(); \ |
| 64 | } while (0) | 62 | } while (0) |
| 65 | 63 | ||
| 66 | #endif | 64 | #endif |
| 67 | 65 | ||
| 68 | extern void arch_init_irq(void); | 66 | extern void arch_init_irq(void); |
| 69 | extern void spurious_interrupt(struct pt_regs *regs); | 67 | extern void spurious_interrupt(void); |
| 70 | 68 | ||
| 71 | #ifdef CONFIG_MIPS_MT_SMTC | 69 | #ifdef CONFIG_MIPS_MT_SMTC |
| 72 | struct irqaction; | 70 | struct irqaction; |
diff --git a/include/asm-mips/irq_regs.h b/include/asm-mips/irq_regs.h new file mode 100644 index 000000000000..33bd2a06de57 --- /dev/null +++ b/include/asm-mips/irq_regs.h | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | /* | ||
| 2 | * This program is free software; you can redistribute it and/or | ||
| 3 | * modify it under the terms of the GNU General Public License | ||
| 4 | * as published by the Free Software Foundation; either version | ||
| 5 | * 2 of the License, or (at your option) any later version. | ||
| 6 | * | ||
| 7 | * Copyright (C) 2006 Ralf Baechle (ralf@linux-mips.org) | ||
| 8 | */ | ||
| 9 | #ifndef __ASM_IRQ_REGS_H | ||
| 10 | #define __ASM_IRQ_REGS_H | ||
| 11 | |||
| 12 | #define ARCH_HAS_OWN_IRQ_REGS | ||
| 13 | |||
| 14 | #include <linux/thread_info.h> | ||
| 15 | |||
| 16 | static inline struct pt_regs *get_irq_regs(void) | ||
| 17 | { | ||
| 18 | return current_thread_info()->regs; | ||
| 19 | } | ||
| 20 | |||
| 21 | #endif /* __ASM_IRQ_REGS_H */ | ||
diff --git a/include/asm-mips/jmr3927/irq.h b/include/asm-mips/jmr3927/irq.h index fe551f33a74f..e3e7ed38da6c 100644 --- a/include/asm-mips/jmr3927/irq.h +++ b/include/asm-mips/jmr3927/irq.h | |||
| @@ -45,10 +45,6 @@ extern int | |||
| 45 | toshibaboards_setup_irq(int irq, struct irqaction * new); | 45 | toshibaboards_setup_irq(int irq, struct irqaction * new); |
| 46 | 46 | ||
| 47 | 47 | ||
| 48 | #ifdef CONFIG_TX_BRANCH_LIKELY_BUG_WORKAROUND | ||
| 49 | extern void tx_branch_likely_bug_fixup(struct pt_regs *regs); | ||
| 50 | #endif | ||
| 51 | |||
| 52 | extern int (*toshibaboards_gen_iack)(void); | 48 | extern int (*toshibaboards_gen_iack)(void); |
| 53 | 49 | ||
| 54 | #endif /* !__ASSEMBLY__ */ | 50 | #endif /* !__ASSEMBLY__ */ |
diff --git a/include/asm-mips/mach-au1x00/au1000_dma.h b/include/asm-mips/mach-au1x00/au1000_dma.h index 810f2fa33444..9f29520e8fb0 100644 --- a/include/asm-mips/mach-au1x00/au1000_dma.h +++ b/include/asm-mips/mach-au1x00/au1000_dma.h | |||
| @@ -123,8 +123,7 @@ struct dma_chan { | |||
| 123 | extern struct dma_chan au1000_dma_table[]; | 123 | extern struct dma_chan au1000_dma_table[]; |
| 124 | extern int request_au1000_dma(int dev_id, | 124 | extern int request_au1000_dma(int dev_id, |
| 125 | const char *dev_str, | 125 | const char *dev_str, |
| 126 | irqreturn_t (*irqhandler)(int, void *, | 126 | irq_handler_t irqhandler, |
| 127 | struct pt_regs *), | ||
| 128 | unsigned long irqflags, | 127 | unsigned long irqflags, |
| 129 | void *irq_dev_id); | 128 | void *irq_dev_id); |
| 130 | extern void free_au1000_dma(unsigned int dmanr); | 129 | extern void free_au1000_dma(unsigned int dmanr); |
diff --git a/include/asm-mips/mach-au1x00/au1000_usbdev.h b/include/asm-mips/mach-au1x00/au1000_usbdev.h deleted file mode 100644 index 05bc74bed0b1..000000000000 --- a/include/asm-mips/mach-au1x00/au1000_usbdev.h +++ /dev/null | |||
| @@ -1,73 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * BRIEF MODULE DESCRIPTION | ||
| 3 | * Au1000 USB Device-Side Driver | ||
| 4 | * | ||
| 5 | * Copyright 2001 MontaVista Software Inc. | ||
| 6 | * Author: MontaVista Software, Inc. | ||
| 7 | * stevel@mvista.com or source@mvista.com | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify it | ||
| 10 | * under the terms of the GNU General Public License as published by the | ||
| 11 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 12 | * option) any later version. | ||
| 13 | * | ||
| 14 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
| 15 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
| 16 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
| 17 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
| 18 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
| 19 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
| 20 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
| 21 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| 22 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
| 23 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 24 | * | ||
| 25 | * You should have received a copy of the GNU General Public License along | ||
| 26 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 27 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 28 | */ | ||
| 29 | |||
| 30 | #define USBDEV_REV 0x0110 // BCD | ||
| 31 | #define USBDEV_EP0_MAX_PACKET_SIZE 64 | ||
| 32 | |||
| 33 | typedef enum { | ||
| 34 | ATTACHED = 0, | ||
| 35 | POWERED, | ||
| 36 | DEFAULT, | ||
| 37 | ADDRESS, | ||
| 38 | CONFIGURED | ||
| 39 | } usbdev_state_t; | ||
| 40 | |||
| 41 | typedef enum { | ||
| 42 | CB_NEW_STATE = 0, | ||
| 43 | CB_PKT_COMPLETE | ||
| 44 | } usbdev_cb_type_t; | ||
| 45 | |||
| 46 | |||
| 47 | typedef struct usbdev_pkt { | ||
| 48 | int ep_addr; // ep addr this packet routed to | ||
| 49 | int size; // size of payload in bytes | ||
| 50 | unsigned status; // packet status | ||
| 51 | struct usbdev_pkt* next; // function layer can't touch this | ||
| 52 | u8 payload[0]; // the payload | ||
| 53 | } usbdev_pkt_t; | ||
| 54 | |||
| 55 | #define PKT_STATUS_ACK (1<<0) | ||
| 56 | #define PKT_STATUS_NAK (1<<1) | ||
| 57 | #define PKT_STATUS_SU (1<<2) | ||
| 58 | |||
| 59 | extern int usbdev_init(struct usb_device_descriptor* dev_desc, | ||
| 60 | struct usb_config_descriptor* config_desc, | ||
| 61 | struct usb_interface_descriptor* if_desc, | ||
| 62 | struct usb_endpoint_descriptor* ep_desc, | ||
| 63 | struct usb_string_descriptor* str_desc[], | ||
| 64 | void (*cb)(usbdev_cb_type_t, unsigned long, void *), | ||
| 65 | void* cb_data); | ||
| 66 | |||
| 67 | extern void usbdev_exit(void); | ||
| 68 | |||
| 69 | extern int usbdev_alloc_packet (int ep_addr, int data_size, | ||
| 70 | usbdev_pkt_t** pkt); | ||
| 71 | extern int usbdev_send_packet (int ep_addr, usbdev_pkt_t* pkt); | ||
| 72 | extern int usbdev_receive_packet(int ep_addr, usbdev_pkt_t** pkt); | ||
| 73 | extern int usbdev_get_byte_count(int ep_addr); | ||
diff --git a/include/asm-mips/mach-pnx8550/uart.h b/include/asm-mips/mach-pnx8550/uart.h index e32b9a23d70e..814a7a15ab49 100644 --- a/include/asm-mips/mach-pnx8550/uart.h +++ b/include/asm-mips/mach-pnx8550/uart.h | |||
| @@ -13,4 +13,18 @@ | |||
| 13 | #define PNX8550_UART_INT(x) (PNX8550_INT_GIC_MIN+19+x) | 13 | #define PNX8550_UART_INT(x) (PNX8550_INT_GIC_MIN+19+x) |
| 14 | #define IRQ_TO_UART(x) (x-PNX8550_INT_GIC_MIN-19) | 14 | #define IRQ_TO_UART(x) (x-PNX8550_INT_GIC_MIN-19) |
| 15 | 15 | ||
| 16 | /* early macros needed for prom/kgdb */ | ||
| 17 | |||
| 18 | #define ip3106_lcr(base,port) *(volatile u32 *)(base+(port*0x1000) + 0x000) | ||
| 19 | #define ip3106_mcr(base, port) *(volatile u32 *)(base+(port*0x1000) + 0x004) | ||
| 20 | #define ip3106_baud(base, port) *(volatile u32 *)(base+(port*0x1000) + 0x008) | ||
| 21 | #define ip3106_cfg(base, port) *(volatile u32 *)(base+(port*0x1000) + 0x00C) | ||
| 22 | #define ip3106_fifo(base, port) *(volatile u32 *)(base+(port*0x1000) + 0x028) | ||
| 23 | #define ip3106_istat(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFE0) | ||
| 24 | #define ip3106_ien(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFE4) | ||
| 25 | #define ip3106_iclr(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFE8) | ||
| 26 | #define ip3106_iset(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFEC) | ||
| 27 | #define ip3106_pd(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFF4) | ||
| 28 | #define ip3106_mid(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFFC) | ||
| 29 | |||
| 16 | #endif | 30 | #endif |
diff --git a/include/asm-mips/marvell.h b/include/asm-mips/marvell.h index 6bb2125bb053..df94955b098a 100644 --- a/include/asm-mips/marvell.h +++ b/include/asm-mips/marvell.h | |||
| @@ -53,6 +53,6 @@ struct mv_pci_controller { | |||
| 53 | unsigned long config_vreg; | 53 | unsigned long config_vreg; |
| 54 | }; | 54 | }; |
| 55 | 55 | ||
| 56 | extern void ll_mv64340_irq(struct pt_regs *regs); | 56 | extern void ll_mv64340_irq(void); |
| 57 | 57 | ||
| 58 | #endif /* __ASM_MIPS_MARVELL_H */ | 58 | #endif /* __ASM_MIPS_MARVELL_H */ |
diff --git a/include/asm-mips/msc01_ic.h b/include/asm-mips/msc01_ic.h index 64f17208d602..aa7ad9a71762 100644 --- a/include/asm-mips/msc01_ic.h +++ b/include/asm-mips/msc01_ic.h | |||
| @@ -145,7 +145,7 @@ typedef struct msc_irqmap { | |||
| 145 | #define MSC01_IRQ_EDGE 1 | 145 | #define MSC01_IRQ_EDGE 1 |
| 146 | 146 | ||
| 147 | extern void __init init_msc_irqs(unsigned int base, msc_irqmap_t *imp, int nirq); | 147 | extern void __init init_msc_irqs(unsigned int base, msc_irqmap_t *imp, int nirq); |
| 148 | extern void ll_msc_irq(struct pt_regs *regs); | 148 | extern void ll_msc_irq(void); |
| 149 | 149 | ||
| 150 | #endif /* __ASM_MIPS_BOARDS_MSC01_IC_H */ | 150 | #endif /* __ASM_MIPS_BOARDS_MSC01_IC_H */ |
| 151 | 151 | ||
diff --git a/include/asm-mips/stackframe.h b/include/asm-mips/stackframe.h index 158a4cd12e46..1fae5dc58138 100644 --- a/include/asm-mips/stackframe.h +++ b/include/asm-mips/stackframe.h | |||
| @@ -59,69 +59,43 @@ | |||
| 59 | .endm | 59 | .endm |
| 60 | 60 | ||
| 61 | #ifdef CONFIG_SMP | 61 | #ifdef CONFIG_SMP |
| 62 | .macro get_saved_sp /* SMP variation */ | ||
| 63 | #ifdef CONFIG_32BIT | ||
| 64 | #ifdef CONFIG_MIPS_MT_SMTC | 62 | #ifdef CONFIG_MIPS_MT_SMTC |
| 65 | .set mips32 | 63 | #define PTEBASE_SHIFT 19 /* TCBIND */ |
| 66 | mfc0 k0, CP0_TCBIND; | ||
| 67 | .set mips0 | ||
| 68 | lui k1, %hi(kernelsp) | ||
| 69 | srl k0, k0, 19 | ||
| 70 | /* No need to shift down and up to clear bits 0-1 */ | ||
| 71 | #else | 64 | #else |
| 72 | mfc0 k0, CP0_CONTEXT | 65 | #define PTEBASE_SHIFT 23 /* CONTEXT */ |
| 73 | lui k1, %hi(kernelsp) | ||
| 74 | srl k0, k0, 23 | ||
| 75 | #endif | ||
| 76 | addu k1, k0 | ||
| 77 | LONG_L k1, %lo(kernelsp)(k1) | ||
| 78 | #endif | 66 | #endif |
| 79 | #ifdef CONFIG_64BIT | 67 | .macro get_saved_sp /* SMP variation */ |
| 80 | #ifdef CONFIG_MIPS_MT_SMTC | 68 | #ifdef CONFIG_MIPS_MT_SMTC |
| 81 | .set mips64 | 69 | mfc0 k0, CP0_TCBIND |
| 82 | mfc0 k0, CP0_TCBIND; | ||
| 83 | .set mips0 | ||
| 84 | lui k0, %highest(kernelsp) | ||
| 85 | dsrl k1, 19 | ||
| 86 | /* No need to shift down and up to clear bits 0-2 */ | ||
| 87 | #else | 70 | #else |
| 88 | MFC0 k1, CP0_CONTEXT | 71 | MFC0 k0, CP0_CONTEXT |
| 89 | lui k0, %highest(kernelsp) | 72 | #endif |
| 90 | dsrl k1, 23 | 73 | #if defined(CONFIG_BUILD_ELF64) || (defined(CONFIG_64BIT) && __GNUC__ < 4) |
| 91 | daddiu k0, %higher(kernelsp) | 74 | lui k1, %highest(kernelsp) |
| 92 | dsll k0, k0, 16 | 75 | daddiu k1, %higher(kernelsp) |
| 93 | daddiu k0, %hi(kernelsp) | 76 | dsll k1, 16 |
| 94 | dsll k0, k0, 16 | 77 | daddiu k1, %hi(kernelsp) |
| 95 | #endif /* CONFIG_MIPS_MT_SMTC */ | 78 | dsll k1, 16 |
| 96 | daddu k1, k1, k0 | 79 | #else |
| 80 | lui k1, %hi(kernelsp) | ||
| 81 | #endif | ||
| 82 | LONG_SRL k0, PTEBASE_SHIFT | ||
| 83 | LONG_ADDU k1, k0 | ||
| 97 | LONG_L k1, %lo(kernelsp)(k1) | 84 | LONG_L k1, %lo(kernelsp)(k1) |
| 98 | #endif /* CONFIG_64BIT */ | ||
| 99 | .endm | 85 | .endm |
| 100 | 86 | ||
| 101 | .macro set_saved_sp stackp temp temp2 | 87 | .macro set_saved_sp stackp temp temp2 |
| 102 | #ifdef CONFIG_32BIT | ||
| 103 | #ifdef CONFIG_MIPS_MT_SMTC | ||
| 104 | mfc0 \temp, CP0_TCBIND | ||
| 105 | srl \temp, 19 | ||
| 106 | #else | ||
| 107 | mfc0 \temp, CP0_CONTEXT | ||
| 108 | srl \temp, 23 | ||
| 109 | #endif | ||
| 110 | #endif | ||
| 111 | #ifdef CONFIG_64BIT | ||
| 112 | #ifdef CONFIG_MIPS_MT_SMTC | 88 | #ifdef CONFIG_MIPS_MT_SMTC |
| 113 | mfc0 \temp, CP0_TCBIND | 89 | mfc0 \temp, CP0_TCBIND |
| 114 | dsrl \temp, 19 | ||
| 115 | #else | 90 | #else |
| 116 | MFC0 \temp, CP0_CONTEXT | 91 | MFC0 \temp, CP0_CONTEXT |
| 117 | dsrl \temp, 23 | ||
| 118 | #endif | ||
| 119 | #endif | 92 | #endif |
| 93 | LONG_SRL \temp, PTEBASE_SHIFT | ||
| 120 | LONG_S \stackp, kernelsp(\temp) | 94 | LONG_S \stackp, kernelsp(\temp) |
| 121 | .endm | 95 | .endm |
| 122 | #else | 96 | #else |
| 123 | .macro get_saved_sp /* Uniprocessor variation */ | 97 | .macro get_saved_sp /* Uniprocessor variation */ |
| 124 | #ifdef CONFIG_64BIT | 98 | #if defined(CONFIG_BUILD_ELF64) || (defined(CONFIG_64BIT) && __GNUC__ < 4) |
| 125 | lui k1, %highest(kernelsp) | 99 | lui k1, %highest(kernelsp) |
| 126 | daddiu k1, %higher(kernelsp) | 100 | daddiu k1, %higher(kernelsp) |
| 127 | dsll k1, k1, 16 | 101 | dsll k1, k1, 16 |
diff --git a/include/asm-mips/termbits.h b/include/asm-mips/termbits.h index fa6d04dac56b..b62ec7c521cc 100644 --- a/include/asm-mips/termbits.h +++ b/include/asm-mips/termbits.h | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
| 4 | * for more details. | 4 | * for more details. |
| 5 | * | 5 | * |
| 6 | * Copyright (C) 1995, 1996, 1999, 2001 Ralf Baechle | 6 | * Copyright (C) 1995, 96, 99, 2001, 06 Ralf Baechle |
| 7 | * Copyright (C) 1999 Silicon Graphics, Inc. | 7 | * Copyright (C) 1999 Silicon Graphics, Inc. |
| 8 | * Copyright (C) 2001 MIPS Technologies, Inc. | 8 | * Copyright (C) 2001 MIPS Technologies, Inc. |
| 9 | */ | 9 | */ |
| @@ -13,14 +13,8 @@ | |||
| 13 | #include <linux/posix_types.h> | 13 | #include <linux/posix_types.h> |
| 14 | 14 | ||
| 15 | typedef unsigned char cc_t; | 15 | typedef unsigned char cc_t; |
| 16 | #if (_MIPS_SZLONG == 32) | 16 | typedef unsigned int speed_t; |
| 17 | typedef unsigned long speed_t; | 17 | typedef unsigned int tcflag_t; |
| 18 | typedef unsigned long tcflag_t; | ||
| 19 | #endif | ||
| 20 | #if (_MIPS_SZLONG == 64) | ||
| 21 | typedef __u32 speed_t; | ||
| 22 | typedef __u32 tcflag_t; | ||
| 23 | #endif | ||
| 24 | 18 | ||
| 25 | /* | 19 | /* |
| 26 | * The ABI says nothing about NCC but seems to use NCCS as | 20 | * The ABI says nothing about NCC but seems to use NCCS as |
diff --git a/include/asm-mips/thread_info.h b/include/asm-mips/thread_info.h index ae8ada5b42a9..e475c45ea263 100644 --- a/include/asm-mips/thread_info.h +++ b/include/asm-mips/thread_info.h | |||
| @@ -34,6 +34,7 @@ struct thread_info { | |||
| 34 | 0-0xFFFFFFFF for kernel-thread | 34 | 0-0xFFFFFFFF for kernel-thread |
| 35 | */ | 35 | */ |
| 36 | struct restart_block restart_block; | 36 | struct restart_block restart_block; |
| 37 | struct pt_regs *regs; | ||
| 37 | }; | 38 | }; |
| 38 | 39 | ||
| 39 | /* | 40 | /* |
diff --git a/include/asm-mips/time.h b/include/asm-mips/time.h index 2d543735668b..28512ba2266e 100644 --- a/include/asm-mips/time.h +++ b/include/asm-mips/time.h | |||
| @@ -67,18 +67,18 @@ extern unsigned long (*do_gettimeoffset)(void); | |||
| 67 | /* | 67 | /* |
| 68 | * high-level timer interrupt routines. | 68 | * high-level timer interrupt routines. |
| 69 | */ | 69 | */ |
| 70 | extern irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs); | 70 | extern irqreturn_t timer_interrupt(int irq, void *dev_id); |
| 71 | 71 | ||
| 72 | /* | 72 | /* |
| 73 | * the corresponding low-level timer interrupt routine. | 73 | * the corresponding low-level timer interrupt routine. |
| 74 | */ | 74 | */ |
| 75 | extern asmlinkage void ll_timer_interrupt(int irq, struct pt_regs *regs); | 75 | extern asmlinkage void ll_timer_interrupt(int irq); |
| 76 | 76 | ||
| 77 | /* | 77 | /* |
| 78 | * profiling and process accouting is done separately in local_timer_interrupt | 78 | * profiling and process accouting is done separately in local_timer_interrupt |
| 79 | */ | 79 | */ |
| 80 | extern void local_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs); | 80 | extern void local_timer_interrupt(int irq, void *dev_id); |
| 81 | extern asmlinkage void ll_local_timer_interrupt(int irq, struct pt_regs *regs); | 81 | extern asmlinkage void ll_local_timer_interrupt(int irq); |
| 82 | 82 | ||
| 83 | /* | 83 | /* |
| 84 | * board specific routines required by time_init(). | 84 | * board specific routines required by time_init(). |
diff --git a/include/asm-mips/unistd.h b/include/asm-mips/unistd.h index 685c91467e63..30240a445dbb 100644 --- a/include/asm-mips/unistd.h +++ b/include/asm-mips/unistd.h | |||
| @@ -331,16 +331,17 @@ | |||
| 331 | #define __NR_move_pages (__NR_Linux + 308) | 331 | #define __NR_move_pages (__NR_Linux + 308) |
| 332 | #define __NR_set_robust_list (__NR_Linux + 309) | 332 | #define __NR_set_robust_list (__NR_Linux + 309) |
| 333 | #define __NR_get_robust_list (__NR_Linux + 310) | 333 | #define __NR_get_robust_list (__NR_Linux + 310) |
| 334 | #define __NR_kexec_load (__NR_Linux + 311) | ||
| 334 | 335 | ||
| 335 | /* | 336 | /* |
| 336 | * Offset of the last Linux o32 flavoured syscall | 337 | * Offset of the last Linux o32 flavoured syscall |
| 337 | */ | 338 | */ |
| 338 | #define __NR_Linux_syscalls 310 | 339 | #define __NR_Linux_syscalls 311 |
| 339 | 340 | ||
| 340 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ | 341 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ |
| 341 | 342 | ||
| 342 | #define __NR_O32_Linux 4000 | 343 | #define __NR_O32_Linux 4000 |
| 343 | #define __NR_O32_Linux_syscalls 310 | 344 | #define __NR_O32_Linux_syscalls 311 |
| 344 | 345 | ||
| 345 | #if _MIPS_SIM == _MIPS_SIM_ABI64 | 346 | #if _MIPS_SIM == _MIPS_SIM_ABI64 |
| 346 | 347 | ||
| @@ -618,16 +619,17 @@ | |||
| 618 | #define __NR_move_pages (__NR_Linux + 267) | 619 | #define __NR_move_pages (__NR_Linux + 267) |
| 619 | #define __NR_set_robust_list (__NR_Linux + 268) | 620 | #define __NR_set_robust_list (__NR_Linux + 268) |
| 620 | #define __NR_get_robust_list (__NR_Linux + 269) | 621 | #define __NR_get_robust_list (__NR_Linux + 269) |
| 622 | #define __NR_kexec_load (__NR_Linux + 270) | ||
| 621 | 623 | ||
| 622 | /* | 624 | /* |
| 623 | * Offset of the last Linux 64-bit flavoured syscall | 625 | * Offset of the last Linux 64-bit flavoured syscall |
| 624 | */ | 626 | */ |
| 625 | #define __NR_Linux_syscalls 269 | 627 | #define __NR_Linux_syscalls 270 |
| 626 | 628 | ||
| 627 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ | 629 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ |
| 628 | 630 | ||
| 629 | #define __NR_64_Linux 5000 | 631 | #define __NR_64_Linux 5000 |
| 630 | #define __NR_64_Linux_syscalls 269 | 632 | #define __NR_64_Linux_syscalls 270 |
| 631 | 633 | ||
| 632 | #if _MIPS_SIM == _MIPS_SIM_NABI32 | 634 | #if _MIPS_SIM == _MIPS_SIM_NABI32 |
| 633 | 635 | ||
| @@ -909,16 +911,17 @@ | |||
| 909 | #define __NR_move_pages (__NR_Linux + 271) | 911 | #define __NR_move_pages (__NR_Linux + 271) |
| 910 | #define __NR_set_robust_list (__NR_Linux + 272) | 912 | #define __NR_set_robust_list (__NR_Linux + 272) |
| 911 | #define __NR_get_robust_list (__NR_Linux + 273) | 913 | #define __NR_get_robust_list (__NR_Linux + 273) |
| 914 | #define __NR_kexec_load (__NR_Linux + 274) | ||
| 912 | 915 | ||
| 913 | /* | 916 | /* |
| 914 | * Offset of the last N32 flavoured syscall | 917 | * Offset of the last N32 flavoured syscall |
| 915 | */ | 918 | */ |
| 916 | #define __NR_Linux_syscalls 273 | 919 | #define __NR_Linux_syscalls 274 |
| 917 | 920 | ||
| 918 | #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ | 921 | #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ |
| 919 | 922 | ||
| 920 | #define __NR_N32_Linux 6000 | 923 | #define __NR_N32_Linux 6000 |
| 921 | #define __NR_N32_Linux_syscalls 273 | 924 | #define __NR_N32_Linux_syscalls 274 |
| 922 | 925 | ||
| 923 | #ifdef __KERNEL__ | 926 | #ifdef __KERNEL__ |
| 924 | 927 | ||
diff --git a/include/asm-mips/vr41xx/vr41xx.h b/include/asm-mips/vr41xx/vr41xx.h index dd3eb3dc5886..88b492f6ea9c 100644 --- a/include/asm-mips/vr41xx/vr41xx.h +++ b/include/asm-mips/vr41xx/vr41xx.h | |||
| @@ -75,7 +75,7 @@ extern void vr41xx_mask_clock(vr41xx_clock_t clock); | |||
| 75 | * Interrupt Control Unit | 75 | * Interrupt Control Unit |
| 76 | */ | 76 | */ |
| 77 | extern int vr41xx_set_intassign(unsigned int irq, unsigned char intassign); | 77 | extern int vr41xx_set_intassign(unsigned int irq, unsigned char intassign); |
| 78 | extern int cascade_irq(unsigned int irq, int (*get_irq)(unsigned int, struct pt_regs *)); | 78 | extern int cascade_irq(unsigned int irq, int (*get_irq)(unsigned int)); |
| 79 | 79 | ||
| 80 | #define PIUINT_COMMAND 0x0040 | 80 | #define PIUINT_COMMAND 0x0040 |
| 81 | #define PIUINT_DATA 0x0020 | 81 | #define PIUINT_DATA 0x0020 |
diff --git a/include/asm-parisc/agp.h b/include/asm-parisc/agp.h new file mode 100644 index 000000000000..9f61d4eb6c01 --- /dev/null +++ b/include/asm-parisc/agp.h | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | #ifndef _ASM_PARISC_AGP_H | ||
| 2 | #define _ASM_PARISC_AGP_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * PARISC specific AGP definitions. | ||
| 6 | * Copyright (c) 2006 Kyle McMartin <kyle@parisc-linux.org> | ||
| 7 | * | ||
| 8 | */ | ||
| 9 | |||
| 10 | #define map_page_into_agp(page) /* nothing */ | ||
| 11 | #define unmap_page_from_agp(page) /* nothing */ | ||
| 12 | #define flush_agp_mappings() /* nothing */ | ||
| 13 | #define flush_agp_cache() mb() | ||
| 14 | |||
| 15 | /* Convert a physical address to an address suitable for the GART. */ | ||
| 16 | #define phys_to_gart(x) (x) | ||
| 17 | #define gart_to_phys(x) (x) | ||
| 18 | |||
| 19 | /* GATT allocation. Returns/accepts GATT kernel virtual address. */ | ||
| 20 | #define alloc_gatt_pages(order) \ | ||
| 21 | ((char *)__get_free_pages(GFP_KERNEL, (order))) | ||
| 22 | #define free_gatt_pages(table, order) \ | ||
| 23 | free_pages((unsigned long)(table), (order)) | ||
| 24 | |||
| 25 | #endif /* _ASM_PARISC_AGP_H */ | ||
diff --git a/include/asm-parisc/assembly.h b/include/asm-parisc/assembly.h index 1a7bfe699e0c..5a1e0e8b1c32 100644 --- a/include/asm-parisc/assembly.h +++ b/include/asm-parisc/assembly.h | |||
| @@ -29,7 +29,8 @@ | |||
| 29 | #define LDREGX ldd,s | 29 | #define LDREGX ldd,s |
| 30 | #define LDREGM ldd,mb | 30 | #define LDREGM ldd,mb |
| 31 | #define STREGM std,ma | 31 | #define STREGM std,ma |
| 32 | #define SHRREG shrd | 32 | #define SHRREG shrd |
| 33 | #define SHLREG shld | ||
| 33 | #define RP_OFFSET 16 | 34 | #define RP_OFFSET 16 |
| 34 | #define FRAME_SIZE 128 | 35 | #define FRAME_SIZE 128 |
| 35 | #define CALLEE_REG_FRAME_SIZE 144 | 36 | #define CALLEE_REG_FRAME_SIZE 144 |
| @@ -39,7 +40,8 @@ | |||
| 39 | #define LDREGX ldwx,s | 40 | #define LDREGX ldwx,s |
| 40 | #define LDREGM ldwm | 41 | #define LDREGM ldwm |
| 41 | #define STREGM stwm | 42 | #define STREGM stwm |
| 42 | #define SHRREG shr | 43 | #define SHRREG shr |
| 44 | #define SHLREG shlw | ||
| 43 | #define RP_OFFSET 20 | 45 | #define RP_OFFSET 20 |
| 44 | #define FRAME_SIZE 64 | 46 | #define FRAME_SIZE 64 |
| 45 | #define CALLEE_REG_FRAME_SIZE 128 | 47 | #define CALLEE_REG_FRAME_SIZE 128 |
diff --git a/include/asm-parisc/cacheflush.h b/include/asm-parisc/cacheflush.h index 0b459cdfbd6f..2bc41f2e0271 100644 --- a/include/asm-parisc/cacheflush.h +++ b/include/asm-parisc/cacheflush.h | |||
| @@ -191,16 +191,38 @@ flush_anon_page(struct page *page, unsigned long vmaddr) | |||
| 191 | } | 191 | } |
| 192 | #define ARCH_HAS_FLUSH_ANON_PAGE | 192 | #define ARCH_HAS_FLUSH_ANON_PAGE |
| 193 | 193 | ||
| 194 | static inline void | 194 | #define ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE |
| 195 | flush_kernel_dcache_page(struct page *page) | 195 | void flush_kernel_dcache_page_addr(void *addr); |
| 196 | static inline void flush_kernel_dcache_page(struct page *page) | ||
| 196 | { | 197 | { |
| 197 | flush_kernel_dcache_page_asm(page_address(page)); | 198 | flush_kernel_dcache_page_addr(page_address(page)); |
| 198 | } | 199 | } |
| 199 | #define ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE | ||
| 200 | 200 | ||
| 201 | #ifdef CONFIG_DEBUG_RODATA | 201 | #ifdef CONFIG_DEBUG_RODATA |
| 202 | void mark_rodata_ro(void); | 202 | void mark_rodata_ro(void); |
| 203 | #endif | 203 | #endif |
| 204 | 204 | ||
| 205 | #ifdef CONFIG_PA8X00 | ||
| 206 | /* Only pa8800, pa8900 needs this */ | ||
| 207 | #define ARCH_HAS_KMAP | ||
| 208 | |||
| 209 | void kunmap_parisc(void *addr); | ||
| 210 | |||
| 211 | static inline void *kmap(struct page *page) | ||
| 212 | { | ||
| 213 | might_sleep(); | ||
| 214 | return page_address(page); | ||
| 215 | } | ||
| 216 | |||
| 217 | #define kunmap(page) kunmap_parisc(page_address(page)) | ||
| 218 | |||
| 219 | #define kmap_atomic(page, idx) page_address(page) | ||
| 220 | |||
| 221 | #define kunmap_atomic(addr, idx) kunmap_parisc(addr) | ||
| 222 | |||
| 223 | #define kmap_atomic_pfn(pfn, idx) page_address(pfn_to_page(pfn)) | ||
| 224 | #define kmap_atomic_to_page(ptr) virt_to_page(ptr) | ||
| 225 | #endif | ||
| 226 | |||
| 205 | #endif /* _PARISC_CACHEFLUSH_H */ | 227 | #endif /* _PARISC_CACHEFLUSH_H */ |
| 206 | 228 | ||
diff --git a/include/asm-parisc/compat.h b/include/asm-parisc/compat.h index 71b4eeea205a..fe8579023531 100644 --- a/include/asm-parisc/compat.h +++ b/include/asm-parisc/compat.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | */ | 5 | */ |
| 6 | #include <linux/types.h> | 6 | #include <linux/types.h> |
| 7 | #include <linux/sched.h> | 7 | #include <linux/sched.h> |
| 8 | #include <linux/personality.h> | 8 | #include <linux/thread_info.h> |
| 9 | 9 | ||
| 10 | #define COMPAT_USER_HZ 100 | 10 | #define COMPAT_USER_HZ 100 |
| 11 | 11 | ||
| @@ -152,7 +152,7 @@ static __inline__ void __user *compat_alloc_user_space(long len) | |||
| 152 | 152 | ||
| 153 | static inline int __is_compat_task(struct task_struct *t) | 153 | static inline int __is_compat_task(struct task_struct *t) |
| 154 | { | 154 | { |
| 155 | return personality(t->personality) == PER_LINUX32; | 155 | return test_ti_thread_flag(t->thread_info, TIF_32BIT); |
| 156 | } | 156 | } |
| 157 | 157 | ||
| 158 | static inline int is_compat_task(void) | 158 | static inline int is_compat_task(void) |
diff --git a/include/asm-parisc/dma.h b/include/asm-parisc/dma.h index 9979c3cb3745..da2cf373e31c 100644 --- a/include/asm-parisc/dma.h +++ b/include/asm-parisc/dma.h | |||
| @@ -72,18 +72,13 @@ | |||
| 72 | #define DMA2_MASK_ALL_REG 0xDE /* all-channels mask (w) */ | 72 | #define DMA2_MASK_ALL_REG 0xDE /* all-channels mask (w) */ |
| 73 | #define DMA2_EXT_MODE_REG (0x400 | DMA2_MODE_REG) | 73 | #define DMA2_EXT_MODE_REG (0x400 | DMA2_MODE_REG) |
| 74 | 74 | ||
| 75 | extern spinlock_t dma_spin_lock; | ||
| 76 | |||
| 77 | static __inline__ unsigned long claim_dma_lock(void) | 75 | static __inline__ unsigned long claim_dma_lock(void) |
| 78 | { | 76 | { |
| 79 | unsigned long flags; | 77 | return 0; |
| 80 | spin_lock_irqsave(&dma_spin_lock, flags); | ||
| 81 | return flags; | ||
| 82 | } | 78 | } |
| 83 | 79 | ||
| 84 | static __inline__ void release_dma_lock(unsigned long flags) | 80 | static __inline__ void release_dma_lock(unsigned long flags) |
| 85 | { | 81 | { |
| 86 | spin_unlock_irqrestore(&dma_spin_lock, flags); | ||
| 87 | } | 82 | } |
| 88 | 83 | ||
| 89 | 84 | ||
diff --git a/include/asm-parisc/futex.h b/include/asm-parisc/futex.h index 6a332a9f099c..d84bbb283fd1 100644 --- a/include/asm-parisc/futex.h +++ b/include/asm-parisc/futex.h | |||
| @@ -1,6 +1,71 @@ | |||
| 1 | #ifndef _ASM_FUTEX_H | 1 | #ifndef _ASM_PARISC_FUTEX_H |
| 2 | #define _ASM_FUTEX_H | 2 | #define _ASM_PARISC_FUTEX_H |
| 3 | 3 | ||
| 4 | #include <asm-generic/futex.h> | 4 | #ifdef __KERNEL__ |
| 5 | 5 | ||
| 6 | #include <linux/futex.h> | ||
| 7 | #include <asm/errno.h> | ||
| 8 | #include <asm/uaccess.h> | ||
| 9 | |||
| 10 | static inline int | ||
| 11 | futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | ||
| 12 | { | ||
| 13 | int op = (encoded_op >> 28) & 7; | ||
| 14 | int cmp = (encoded_op >> 24) & 15; | ||
| 15 | int oparg = (encoded_op << 8) >> 20; | ||
| 16 | int cmparg = (encoded_op << 20) >> 20; | ||
| 17 | int oldval = 0, ret; | ||
| 18 | if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28)) | ||
| 19 | oparg = 1 << oparg; | ||
| 20 | |||
| 21 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) | ||
| 22 | return -EFAULT; | ||
| 23 | |||
| 24 | inc_preempt_count(); | ||
| 25 | |||
| 26 | switch (op) { | ||
| 27 | case FUTEX_OP_SET: | ||
| 28 | case FUTEX_OP_ADD: | ||
| 29 | case FUTEX_OP_OR: | ||
| 30 | case FUTEX_OP_ANDN: | ||
| 31 | case FUTEX_OP_XOR: | ||
| 32 | default: | ||
| 33 | ret = -ENOSYS; | ||
| 34 | } | ||
| 35 | |||
| 36 | dec_preempt_count(); | ||
| 37 | |||
| 38 | if (!ret) { | ||
| 39 | switch (cmp) { | ||
| 40 | case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break; | ||
| 41 | case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break; | ||
| 42 | case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break; | ||
| 43 | case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break; | ||
| 44 | case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break; | ||
| 45 | case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break; | ||
| 46 | default: ret = -ENOSYS; | ||
| 47 | } | ||
| 48 | } | ||
| 49 | return ret; | ||
| 50 | } | ||
| 51 | |||
| 52 | /* Non-atomic version */ | ||
| 53 | static inline int | ||
| 54 | futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval) | ||
| 55 | { | ||
| 56 | int err = 0; | ||
| 57 | int uval; | ||
| 58 | |||
| 59 | if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int))) | ||
| 60 | return -EFAULT; | ||
| 61 | |||
| 62 | err = get_user(uval, uaddr); | ||
| 63 | if (err) return -EFAULT; | ||
| 64 | if (uval == oldval) | ||
| 65 | err = put_user(newval, uaddr); | ||
| 66 | if (err) return -EFAULT; | ||
| 67 | return uval; | ||
| 68 | } | ||
| 69 | |||
| 70 | #endif | ||
| 6 | #endif | 71 | #endif |
diff --git a/include/asm-parisc/io.h b/include/asm-parisc/io.h index b9eb245b8874..c1963ce19dd2 100644 --- a/include/asm-parisc/io.h +++ b/include/asm-parisc/io.h | |||
| @@ -134,7 +134,7 @@ extern inline void __iomem * ioremap(unsigned long offset, unsigned long size) | |||
| 134 | } | 134 | } |
| 135 | #define ioremap_nocache(off, sz) ioremap((off), (sz)) | 135 | #define ioremap_nocache(off, sz) ioremap((off), (sz)) |
| 136 | 136 | ||
| 137 | extern void iounmap(void __iomem *addr); | 137 | extern void iounmap(const volatile void __iomem *addr); |
| 138 | 138 | ||
| 139 | static inline unsigned char __raw_readb(const volatile void __iomem *addr) | 139 | static inline unsigned char __raw_readb(const volatile void __iomem *addr) |
| 140 | { | 140 | { |
diff --git a/include/asm-parisc/iosapic.h b/include/asm-parisc/iosapic.h deleted file mode 100644 index 613390e6805c..000000000000 --- a/include/asm-parisc/iosapic.h +++ /dev/null | |||
| @@ -1,53 +0,0 @@ | |||
| 1 | /* | ||
| 2 | ** This file is private to iosapic driver. | ||
| 3 | ** If stuff needs to be used by another driver, move it to a common file. | ||
| 4 | ** | ||
| 5 | ** WARNING: fields most data structures here are ordered to make sure | ||
| 6 | ** they pack nicely for 64-bit compilation. (ie sizeof(long) == 8) | ||
| 7 | */ | ||
| 8 | |||
| 9 | |||
| 10 | /* | ||
| 11 | ** I/O SAPIC init function | ||
| 12 | ** Caller knows where an I/O SAPIC is. LBA has an integrated I/O SAPIC. | ||
| 13 | ** Call setup as part of per instance initialization. | ||
| 14 | ** (ie *not* init_module() function unless only one is present.) | ||
| 15 | ** fixup_irq is to initialize PCI IRQ line support and | ||
| 16 | ** virtualize pcidev->irq value. To be called by pci_fixup_bus(). | ||
| 17 | */ | ||
| 18 | extern void *iosapic_register(unsigned long hpa); | ||
| 19 | extern int iosapic_fixup_irq(void *obj, struct pci_dev *pcidev); | ||
| 20 | |||
| 21 | |||
| 22 | #ifdef __IA64__ | ||
| 23 | /* | ||
| 24 | ** PA: PIB (Processor Interrupt Block) is handled by Runway bus adapter. | ||
| 25 | ** and is hardcoded to 0xfeeNNNN0 where NNNN is id_eid field. | ||
| 26 | ** | ||
| 27 | ** IA64: PIB is handled by "Local SAPIC" (integrated in the processor). | ||
| 28 | */ | ||
| 29 | struct local_sapic_info { | ||
| 30 | struct local_sapic_info *lsi_next; /* point to next CPU info */ | ||
| 31 | int *lsi_cpu_id; /* point to logical CPU id */ | ||
| 32 | unsigned long *lsi_id_eid; /* point to IA-64 CPU id */ | ||
| 33 | int *lsi_status; /* point to CPU status */ | ||
| 34 | void *lsi_private; /* point to special info */ | ||
| 35 | }; | ||
| 36 | |||
| 37 | /* | ||
| 38 | ** "root" data structure which ties everything together. | ||
| 39 | ** Should always be able to start with sapic_root and locate | ||
| 40 | ** the desired information. | ||
| 41 | */ | ||
| 42 | struct sapic_info { | ||
| 43 | struct sapic_info *si_next; /* info is per cell */ | ||
| 44 | int si_cellid; /* cell id */ | ||
| 45 | unsigned int si_status; /* status */ | ||
| 46 | char *si_pib_base; /* intr blk base address */ | ||
| 47 | local_sapic_info_t *si_local_info; | ||
| 48 | io_sapic_info_t *si_io_info; | ||
| 49 | extint_info_t *si_extint_info;/* External Intr info */ | ||
| 50 | }; | ||
| 51 | |||
| 52 | #endif /* IA64 */ | ||
| 53 | |||
diff --git a/include/asm-parisc/irq.h b/include/asm-parisc/irq.h index 5cae260615a2..399c81981ed5 100644 --- a/include/asm-parisc/irq.h +++ b/include/asm-parisc/irq.h | |||
| @@ -31,7 +31,7 @@ static __inline__ int irq_canonicalize(int irq) | |||
| 31 | return (irq == 2) ? 9 : irq; | 31 | return (irq == 2) ? 9 : irq; |
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | struct hw_interrupt_type; | 34 | struct irq_chip; |
| 35 | 35 | ||
| 36 | /* | 36 | /* |
| 37 | * Some useful "we don't have to do anything here" handlers. Should | 37 | * Some useful "we don't have to do anything here" handlers. Should |
| @@ -39,6 +39,8 @@ struct hw_interrupt_type; | |||
| 39 | */ | 39 | */ |
| 40 | void no_ack_irq(unsigned int irq); | 40 | void no_ack_irq(unsigned int irq); |
| 41 | void no_end_irq(unsigned int irq); | 41 | void no_end_irq(unsigned int irq); |
| 42 | void cpu_ack_irq(unsigned int irq); | ||
| 43 | void cpu_end_irq(unsigned int irq); | ||
| 42 | 44 | ||
| 43 | extern int txn_alloc_irq(unsigned int nbits); | 45 | extern int txn_alloc_irq(unsigned int nbits); |
| 44 | extern int txn_claim_irq(int); | 46 | extern int txn_claim_irq(int); |
| @@ -46,7 +48,7 @@ extern unsigned int txn_alloc_data(unsigned int); | |||
| 46 | extern unsigned long txn_alloc_addr(unsigned int); | 48 | extern unsigned long txn_alloc_addr(unsigned int); |
| 47 | extern unsigned long txn_affinity_addr(unsigned int irq, int cpu); | 49 | extern unsigned long txn_affinity_addr(unsigned int irq, int cpu); |
| 48 | 50 | ||
| 49 | extern int cpu_claim_irq(unsigned int irq, struct hw_interrupt_type *, void *); | 51 | extern int cpu_claim_irq(unsigned int irq, struct irq_chip *, void *); |
| 50 | extern int cpu_check_affinity(unsigned int irq, cpumask_t *dest); | 52 | extern int cpu_check_affinity(unsigned int irq, cpumask_t *dest); |
| 51 | 53 | ||
| 52 | /* soft power switch support (power.c) */ | 54 | /* soft power switch support (power.c) */ |
diff --git a/include/asm-parisc/irq_regs.h b/include/asm-parisc/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-parisc/irq_regs.h | |||
| @@ -0,0 +1 @@ | |||
| #include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-parisc/mckinley.h b/include/asm-parisc/mckinley.h new file mode 100644 index 000000000000..d1ea6f12915e --- /dev/null +++ b/include/asm-parisc/mckinley.h | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #ifndef ASM_PARISC_MCKINLEY_H | ||
| 2 | #define ASM_PARISC_MCKINLEY_H | ||
| 3 | #ifdef __KERNEL__ | ||
| 4 | |||
| 5 | /* declared in arch/parisc/kernel/setup.c */ | ||
| 6 | extern struct proc_dir_entry * proc_mckinley_root; | ||
| 7 | |||
| 8 | #endif /*__KERNEL__*/ | ||
| 9 | #endif /*ASM_PARISC_MCKINLEY_H*/ | ||
diff --git a/include/asm-parisc/page.h b/include/asm-parisc/page.h index 57d6d82756dd..3567208191e3 100644 --- a/include/asm-parisc/page.h +++ b/include/asm-parisc/page.h | |||
| @@ -26,24 +26,10 @@ | |||
| 26 | 26 | ||
| 27 | struct page; | 27 | struct page; |
| 28 | 28 | ||
| 29 | extern void purge_kernel_dcache_page(unsigned long); | 29 | void copy_user_page_asm(void *to, void *from); |
| 30 | extern void copy_user_page_asm(void *to, void *from); | 30 | void copy_user_page(void *vto, void *vfrom, unsigned long vaddr, |
| 31 | extern void clear_user_page_asm(void *page, unsigned long vaddr); | 31 | struct page *pg); |
| 32 | 32 | void clear_user_page(void *page, unsigned long vaddr, struct page *pg); | |
| 33 | static inline void | ||
| 34 | copy_user_page(void *vto, void *vfrom, unsigned long vaddr, struct page *pg) | ||
| 35 | { | ||
| 36 | copy_user_page_asm(vto, vfrom); | ||
| 37 | flush_kernel_dcache_page_asm(vto); | ||
| 38 | /* XXX: ppc flushes icache too, should we? */ | ||
| 39 | } | ||
| 40 | |||
| 41 | static inline void | ||
| 42 | clear_user_page(void *page, unsigned long vaddr, struct page *pg) | ||
| 43 | { | ||
| 44 | purge_kernel_dcache_page((unsigned long)page); | ||
| 45 | clear_user_page_asm(page, vaddr); | ||
| 46 | } | ||
| 47 | 33 | ||
| 48 | /* | 34 | /* |
| 49 | * These are used to make use of C type-checking.. | 35 | * These are used to make use of C type-checking.. |
diff --git a/include/asm-parisc/param.h b/include/asm-parisc/param.h index 07cb9b93cfe2..32e03d877858 100644 --- a/include/asm-parisc/param.h +++ b/include/asm-parisc/param.h | |||
| @@ -2,13 +2,9 @@ | |||
| 2 | #define _ASMPARISC_PARAM_H | 2 | #define _ASMPARISC_PARAM_H |
| 3 | 3 | ||
| 4 | #ifdef __KERNEL__ | 4 | #ifdef __KERNEL__ |
| 5 | # ifdef CONFIG_PA20 | 5 | #define HZ CONFIG_HZ |
| 6 | # define HZ 1000 /* Faster machines */ | 6 | #define USER_HZ 100 /* some user API use "ticks" */ |
| 7 | # else | 7 | #define CLOCKS_PER_SEC (USER_HZ) /* like times() */ |
| 8 | # define HZ 100 /* Internal kernel timer frequency */ | ||
| 9 | # endif | ||
| 10 | # define USER_HZ 100 /* .. some user interfaces are in "ticks" */ | ||
| 11 | # define CLOCKS_PER_SEC (USER_HZ) /* like times() */ | ||
| 12 | #endif | 8 | #endif |
| 13 | 9 | ||
| 14 | #ifndef HZ | 10 | #ifndef HZ |
diff --git a/include/asm-parisc/parisc-device.h b/include/asm-parisc/parisc-device.h index 1d247e32a608..e12624d8941d 100644 --- a/include/asm-parisc/parisc-device.h +++ b/include/asm-parisc/parisc-device.h | |||
| @@ -1,3 +1,6 @@ | |||
| 1 | #ifndef _ASM_PARISC_PARISC_DEVICE_H_ | ||
| 2 | #define _ASM_PARISC_PARISC_DEVICE_H_ | ||
| 3 | |||
| 1 | #include <linux/device.h> | 4 | #include <linux/device.h> |
| 2 | 5 | ||
| 3 | struct parisc_device { | 6 | struct parisc_device { |
| @@ -57,3 +60,5 @@ parisc_get_drvdata(struct parisc_device *d) | |||
| 57 | } | 60 | } |
| 58 | 61 | ||
| 59 | extern struct bus_type parisc_bus_type; | 62 | extern struct bus_type parisc_bus_type; |
| 63 | |||
| 64 | #endif /*_ASM_PARISC_PARISC_DEVICE_H_*/ | ||
diff --git a/include/asm-parisc/pci.h b/include/asm-parisc/pci.h index 8b631f47eb25..7b8ad118d2fe 100644 --- a/include/asm-parisc/pci.h +++ b/include/asm-parisc/pci.h | |||
| @@ -293,4 +293,9 @@ static inline void pcibios_penalize_isa_irq(int irq, int active) | |||
| 293 | /* We don't need to penalize isa irq's */ | 293 | /* We don't need to penalize isa irq's */ |
| 294 | } | 294 | } |
| 295 | 295 | ||
| 296 | static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel) | ||
| 297 | { | ||
| 298 | return channel ? 15 : 14; | ||
| 299 | } | ||
| 300 | |||
| 296 | #endif /* __ASM_PARISC_PCI_H */ | 301 | #endif /* __ASM_PARISC_PCI_H */ |
diff --git a/include/asm-parisc/pdc.h b/include/asm-parisc/pdc.h index c9b2e35326ee..423c2b84b4a0 100644 --- a/include/asm-parisc/pdc.h +++ b/include/asm-parisc/pdc.h | |||
| @@ -774,8 +774,6 @@ int pdc_sti_call(unsigned long func, unsigned long flags, | |||
| 774 | unsigned long inptr, unsigned long outputr, | 774 | unsigned long inptr, unsigned long outputr, |
| 775 | unsigned long glob_cfg); | 775 | unsigned long glob_cfg); |
| 776 | 776 | ||
| 777 | extern void pdc_init(void); | ||
| 778 | |||
| 779 | static inline char * os_id_to_string(u16 os_id) { | 777 | static inline char * os_id_to_string(u16 os_id) { |
| 780 | switch(os_id) { | 778 | switch(os_id) { |
| 781 | case OS_ID_NONE: return "No OS"; | 779 | case OS_ID_NONE: return "No OS"; |
diff --git a/include/asm-parisc/prefetch.h b/include/asm-parisc/prefetch.h new file mode 100644 index 000000000000..5d021726fa33 --- /dev/null +++ b/include/asm-parisc/prefetch.h | |||
| @@ -0,0 +1,39 @@ | |||
| 1 | /* | ||
| 2 | * include/asm-parisc/prefetch.h | ||
| 3 | * | ||
| 4 | * PA 2.0 defines data prefetch instructions on page 6-11 of the Kane book. | ||
| 5 | * In addition, many implementations do hardware prefetching of both | ||
| 6 | * instructions and data. | ||
| 7 | * | ||
| 8 | * PA7300LC (page 14-4 of the ERS) also implements prefetching by a load | ||
| 9 | * to gr0 but not in a way that Linux can use. If the load would cause an | ||
| 10 | * interruption (eg due to prefetching 0), it is suppressed on PA2.0 | ||
| 11 | * processors, but not on 7300LC. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __ASM_PARISC_PREFETCH_H | ||
| 16 | #define __ASM_PARISC_PREFETCH_H | ||
| 17 | |||
| 18 | #ifndef __ASSEMBLY__ | ||
| 19 | #ifdef CONFIG_PREFETCH | ||
| 20 | |||
| 21 | #define ARCH_HAS_PREFETCH | ||
| 22 | extern inline void prefetch(const void *addr) | ||
| 23 | { | ||
| 24 | __asm__("ldw 0(%0), %%r0" : : "r" (addr)); | ||
| 25 | } | ||
| 26 | |||
| 27 | /* LDD is a PA2.0 addition. */ | ||
| 28 | #ifdef CONFIG_PA20 | ||
| 29 | #define ARCH_HAS_PREFETCHW | ||
| 30 | extern inline void prefetchw(const void *addr) | ||
| 31 | { | ||
| 32 | __asm__("ldd 0(%0), %%r0" : : "r" (addr)); | ||
| 33 | } | ||
| 34 | #endif /* CONFIG_PA20 */ | ||
| 35 | |||
| 36 | #endif /* CONFIG_PREFETCH */ | ||
| 37 | #endif /* __ASSEMBLY__ */ | ||
| 38 | |||
| 39 | #endif /* __ASM_PARISC_PROCESSOR_H */ | ||
diff --git a/include/asm-parisc/processor.h b/include/asm-parisc/processor.h index b73626f040da..fd7866dc8c83 100644 --- a/include/asm-parisc/processor.h +++ b/include/asm-parisc/processor.h | |||
| @@ -9,6 +9,8 @@ | |||
| 9 | #define __ASM_PARISC_PROCESSOR_H | 9 | #define __ASM_PARISC_PROCESSOR_H |
| 10 | 10 | ||
| 11 | #ifndef __ASSEMBLY__ | 11 | #ifndef __ASSEMBLY__ |
| 12 | #include <asm/prefetch.h> /* lockdep.h needs <linux/prefetch.h> */ | ||
| 13 | |||
| 12 | #include <linux/threads.h> | 14 | #include <linux/threads.h> |
| 13 | #include <linux/spinlock_types.h> | 15 | #include <linux/spinlock_types.h> |
| 14 | 16 | ||
| @@ -276,7 +278,7 @@ on downward growing arches, it looks like this: | |||
| 276 | */ | 278 | */ |
| 277 | 279 | ||
| 278 | #ifdef __LP64__ | 280 | #ifdef __LP64__ |
| 279 | #define USER_WIDE_MODE (personality(current->personality) == PER_LINUX) | 281 | #define USER_WIDE_MODE (!test_thread_flag(TIF_32BIT)) |
| 280 | #else | 282 | #else |
| 281 | #define USER_WIDE_MODE 0 | 283 | #define USER_WIDE_MODE 0 |
| 282 | #endif | 284 | #endif |
| @@ -328,33 +330,20 @@ extern unsigned long get_wchan(struct task_struct *p); | |||
| 328 | #define KSTK_EIP(tsk) ((tsk)->thread.regs.iaoq[0]) | 330 | #define KSTK_EIP(tsk) ((tsk)->thread.regs.iaoq[0]) |
| 329 | #define KSTK_ESP(tsk) ((tsk)->thread.regs.gr[30]) | 331 | #define KSTK_ESP(tsk) ((tsk)->thread.regs.gr[30]) |
| 330 | 332 | ||
| 333 | #define cpu_relax() barrier() | ||
| 331 | 334 | ||
| 332 | /* | 335 | /* Used as a macro to identify the combined VIPT/PIPT cached |
| 333 | * PA 2.0 defines data prefetch instructions on page 6-11 of the Kane book. | 336 | * CPUs which require a guarantee of coherency (no inequivalent |
| 334 | * In addition, many implementations do hardware prefetching of both | 337 | * aliases with different data, whether clean or not) to operate */ |
| 335 | * instructions and data. | 338 | static inline int parisc_requires_coherency(void) |
| 336 | * | ||
| 337 | * PA7300LC (page 14-4 of the ERS) also implements prefetching by a load | ||
| 338 | * to gr0 but not in a way that Linux can use. If the load would cause an | ||
| 339 | * interruption (eg due to prefetching 0), it is suppressed on PA2.0 | ||
| 340 | * processors, but not on 7300LC. | ||
| 341 | */ | ||
| 342 | #ifdef CONFIG_PREFETCH | ||
| 343 | #define ARCH_HAS_PREFETCH | ||
| 344 | #define ARCH_HAS_PREFETCHW | ||
| 345 | |||
| 346 | extern inline void prefetch(const void *addr) | ||
| 347 | { | ||
| 348 | __asm__("ldw 0(%0), %%r0" : : "r" (addr)); | ||
| 349 | } | ||
| 350 | |||
| 351 | extern inline void prefetchw(const void *addr) | ||
| 352 | { | 339 | { |
| 353 | __asm__("ldd 0(%0), %%r0" : : "r" (addr)); | 340 | #ifdef CONFIG_PA8X00 |
| 354 | } | 341 | /* FIXME: also pa8900 - when we see one */ |
| 342 | return boot_cpu_data.cpu_type == mako; | ||
| 343 | #else | ||
| 344 | return 0; | ||
| 355 | #endif | 345 | #endif |
| 356 | 346 | } | |
| 357 | #define cpu_relax() barrier() | ||
| 358 | 347 | ||
| 359 | #endif /* __ASSEMBLY__ */ | 348 | #endif /* __ASSEMBLY__ */ |
| 360 | 349 | ||
diff --git a/include/asm-parisc/ropes.h b/include/asm-parisc/ropes.h new file mode 100644 index 000000000000..5542dd00472b --- /dev/null +++ b/include/asm-parisc/ropes.h | |||
| @@ -0,0 +1,322 @@ | |||
| 1 | #ifndef _ASM_PARISC_ROPES_H_ | ||
| 2 | #define _ASM_PARISC_ROPES_H_ | ||
| 3 | |||
| 4 | #include <asm-parisc/parisc-device.h> | ||
| 5 | |||
| 6 | #ifdef CONFIG_64BIT | ||
| 7 | /* "low end" PA8800 machines use ZX1 chipset: PAT PDC and only run 64-bit */ | ||
| 8 | #define ZX1_SUPPORT | ||
| 9 | #endif | ||
| 10 | |||
| 11 | #ifdef CONFIG_PROC_FS | ||
| 12 | /* depends on proc fs support. But costs CPU performance */ | ||
| 13 | #undef SBA_COLLECT_STATS | ||
| 14 | #endif | ||
| 15 | |||
| 16 | /* | ||
| 17 | ** The number of pdir entries to "free" before issueing | ||
| 18 | ** a read to PCOM register to flush out PCOM writes. | ||
| 19 | ** Interacts with allocation granularity (ie 4 or 8 entries | ||
| 20 | ** allocated and free'd/purged at a time might make this | ||
| 21 | ** less interesting). | ||
| 22 | */ | ||
| 23 | #define DELAYED_RESOURCE_CNT 16 | ||
| 24 | |||
| 25 | #define MAX_IOC 2 /* per Ike. Pluto/Astro only have 1. */ | ||
| 26 | #define ROPES_PER_IOC 8 /* per Ike half or Pluto/Astro */ | ||
| 27 | |||
| 28 | struct ioc { | ||
| 29 | void __iomem *ioc_hpa; /* I/O MMU base address */ | ||
| 30 | char *res_map; /* resource map, bit == pdir entry */ | ||
| 31 | u64 *pdir_base; /* physical base address */ | ||
| 32 | unsigned long ibase; /* pdir IOV Space base - shared w/lba_pci */ | ||
| 33 | unsigned long imask; /* pdir IOV Space mask - shared w/lba_pci */ | ||
| 34 | #ifdef ZX1_SUPPORT | ||
| 35 | unsigned long iovp_mask; /* help convert IOVA to IOVP */ | ||
| 36 | #endif | ||
| 37 | unsigned long *res_hint; /* next avail IOVP - circular search */ | ||
| 38 | spinlock_t res_lock; | ||
| 39 | unsigned int res_bitshift; /* from the LEFT! */ | ||
| 40 | unsigned int res_size; /* size of resource map in bytes */ | ||
| 41 | #ifdef SBA_HINT_SUPPORT | ||
| 42 | /* FIXME : DMA HINTs not used */ | ||
| 43 | unsigned long hint_mask_pdir; /* bits used for DMA hints */ | ||
| 44 | unsigned int hint_shift_pdir; | ||
| 45 | #endif | ||
| 46 | #if DELAYED_RESOURCE_CNT > 0 | ||
| 47 | int saved_cnt; | ||
| 48 | struct sba_dma_pair { | ||
| 49 | dma_addr_t iova; | ||
| 50 | size_t size; | ||
| 51 | } saved[DELAYED_RESOURCE_CNT]; | ||
| 52 | #endif | ||
| 53 | |||
| 54 | #ifdef SBA_COLLECT_STATS | ||
| 55 | #define SBA_SEARCH_SAMPLE 0x100 | ||
| 56 | unsigned long avg_search[SBA_SEARCH_SAMPLE]; | ||
| 57 | unsigned long avg_idx; /* current index into avg_search */ | ||
| 58 | unsigned long used_pages; | ||
| 59 | unsigned long msingle_calls; | ||
| 60 | unsigned long msingle_pages; | ||
| 61 | unsigned long msg_calls; | ||
| 62 | unsigned long msg_pages; | ||
| 63 | unsigned long usingle_calls; | ||
| 64 | unsigned long usingle_pages; | ||
| 65 | unsigned long usg_calls; | ||
| 66 | unsigned long usg_pages; | ||
| 67 | #endif | ||
| 68 | /* STUFF We don't need in performance path */ | ||
| 69 | unsigned int pdir_size; /* in bytes, determined by IOV Space size */ | ||
| 70 | }; | ||
| 71 | |||
| 72 | struct sba_device { | ||
| 73 | struct sba_device *next; /* list of SBA's in system */ | ||
| 74 | struct parisc_device *dev; /* dev found in bus walk */ | ||
| 75 | const char *name; | ||
| 76 | void __iomem *sba_hpa; /* base address */ | ||
| 77 | spinlock_t sba_lock; | ||
| 78 | unsigned int flags; /* state/functionality enabled */ | ||
| 79 | unsigned int hw_rev; /* HW revision of chip */ | ||
| 80 | |||
| 81 | struct resource chip_resv; /* MMIO reserved for chip */ | ||
| 82 | struct resource iommu_resv; /* MMIO reserved for iommu */ | ||
| 83 | |||
| 84 | unsigned int num_ioc; /* number of on-board IOC's */ | ||
| 85 | struct ioc ioc[MAX_IOC]; | ||
| 86 | }; | ||
| 87 | |||
| 88 | #define ASTRO_RUNWAY_PORT 0x582 | ||
| 89 | #define IKE_MERCED_PORT 0x803 | ||
| 90 | #define REO_MERCED_PORT 0x804 | ||
| 91 | #define REOG_MERCED_PORT 0x805 | ||
| 92 | #define PLUTO_MCKINLEY_PORT 0x880 | ||
| 93 | |||
| 94 | static inline int IS_ASTRO(struct parisc_device *d) { | ||
| 95 | return d->id.hversion == ASTRO_RUNWAY_PORT; | ||
| 96 | } | ||
| 97 | |||
| 98 | static inline int IS_IKE(struct parisc_device *d) { | ||
| 99 | return d->id.hversion == IKE_MERCED_PORT; | ||
| 100 | } | ||
| 101 | |||
| 102 | static inline int IS_PLUTO(struct parisc_device *d) { | ||
| 103 | return d->id.hversion == PLUTO_MCKINLEY_PORT; | ||
| 104 | } | ||
| 105 | |||
| 106 | #define PLUTO_IOVA_BASE (1UL*1024*1024*1024) /* 1GB */ | ||
| 107 | #define PLUTO_IOVA_SIZE (1UL*1024*1024*1024) /* 1GB */ | ||
| 108 | #define PLUTO_GART_SIZE (PLUTO_IOVA_SIZE / 2) | ||
| 109 | |||
| 110 | #define SBA_PDIR_VALID_BIT 0x8000000000000000ULL | ||
| 111 | |||
| 112 | #define SBA_AGPGART_COOKIE 0x0000badbadc0ffeeULL | ||
| 113 | |||
| 114 | #define SBA_FUNC_ID 0x0000 /* function id */ | ||
| 115 | #define SBA_FCLASS 0x0008 /* function class, bist, header, rev... */ | ||
| 116 | |||
| 117 | #define SBA_FUNC_SIZE 4096 /* SBA configuration function reg set */ | ||
| 118 | |||
| 119 | #define ASTRO_IOC_OFFSET (32 * SBA_FUNC_SIZE) | ||
| 120 | #define PLUTO_IOC_OFFSET (1 * SBA_FUNC_SIZE) | ||
| 121 | /* Ike's IOC's occupy functions 2 and 3 */ | ||
| 122 | #define IKE_IOC_OFFSET(p) ((p+2) * SBA_FUNC_SIZE) | ||
| 123 | |||
| 124 | #define IOC_CTRL 0x8 /* IOC_CTRL offset */ | ||
| 125 | #define IOC_CTRL_TC (1 << 0) /* TOC Enable */ | ||
| 126 | #define IOC_CTRL_CE (1 << 1) /* Coalesce Enable */ | ||
| 127 | #define IOC_CTRL_DE (1 << 2) /* Dillon Enable */ | ||
| 128 | #define IOC_CTRL_RM (1 << 8) /* Real Mode */ | ||
| 129 | #define IOC_CTRL_NC (1 << 9) /* Non Coherent Mode */ | ||
| 130 | #define IOC_CTRL_D4 (1 << 11) /* Disable 4-byte coalescing */ | ||
| 131 | #define IOC_CTRL_DD (1 << 13) /* Disable distr. LMMIO range coalescing */ | ||
| 132 | |||
| 133 | /* | ||
| 134 | ** Offsets into MBIB (Function 0 on Ike and hopefully Astro) | ||
| 135 | ** Firmware programs this stuff. Don't touch it. | ||
| 136 | */ | ||
| 137 | #define LMMIO_DIRECT0_BASE 0x300 | ||
| 138 | #define LMMIO_DIRECT0_MASK 0x308 | ||
| 139 | #define LMMIO_DIRECT0_ROUTE 0x310 | ||
| 140 | |||
| 141 | #define LMMIO_DIST_BASE 0x360 | ||
| 142 | #define LMMIO_DIST_MASK 0x368 | ||
| 143 | #define LMMIO_DIST_ROUTE 0x370 | ||
| 144 | |||
| 145 | #define IOS_DIST_BASE 0x390 | ||
| 146 | #define IOS_DIST_MASK 0x398 | ||
| 147 | #define IOS_DIST_ROUTE 0x3A0 | ||
| 148 | |||
| 149 | #define IOS_DIRECT_BASE 0x3C0 | ||
| 150 | #define IOS_DIRECT_MASK 0x3C8 | ||
| 151 | #define IOS_DIRECT_ROUTE 0x3D0 | ||
| 152 | |||
| 153 | /* | ||
| 154 | ** Offsets into I/O TLB (Function 2 and 3 on Ike) | ||
| 155 | */ | ||
| 156 | #define ROPE0_CTL 0x200 /* "regbus pci0" */ | ||
| 157 | #define ROPE1_CTL 0x208 | ||
| 158 | #define ROPE2_CTL 0x210 | ||
| 159 | #define ROPE3_CTL 0x218 | ||
| 160 | #define ROPE4_CTL 0x220 | ||
| 161 | #define ROPE5_CTL 0x228 | ||
| 162 | #define ROPE6_CTL 0x230 | ||
| 163 | #define ROPE7_CTL 0x238 | ||
| 164 | |||
| 165 | #define IOC_ROPE0_CFG 0x500 /* pluto only */ | ||
| 166 | #define IOC_ROPE_AO 0x10 /* Allow "Relaxed Ordering" */ | ||
| 167 | |||
| 168 | #define HF_ENABLE 0x40 | ||
| 169 | |||
| 170 | #define IOC_IBASE 0x300 /* IO TLB */ | ||
| 171 | #define IOC_IMASK 0x308 | ||
| 172 | #define IOC_PCOM 0x310 | ||
| 173 | #define IOC_TCNFG 0x318 | ||
| 174 | #define IOC_PDIR_BASE 0x320 | ||
| 175 | |||
| 176 | /* | ||
| 177 | ** IOC supports 4/8/16/64KB page sizes (see TCNFG register) | ||
| 178 | ** It's safer (avoid memory corruption) to keep DMA page mappings | ||
| 179 | ** equivalently sized to VM PAGE_SIZE. | ||
| 180 | ** | ||
| 181 | ** We really can't avoid generating a new mapping for each | ||
| 182 | ** page since the Virtual Coherence Index has to be generated | ||
| 183 | ** and updated for each page. | ||
| 184 | ** | ||
| 185 | ** PAGE_SIZE could be greater than IOVP_SIZE. But not the inverse. | ||
| 186 | */ | ||
| 187 | #define IOVP_SIZE PAGE_SIZE | ||
| 188 | #define IOVP_SHIFT PAGE_SHIFT | ||
| 189 | #define IOVP_MASK PAGE_MASK | ||
| 190 | |||
| 191 | #define SBA_PERF_CFG 0x708 /* Performance Counter stuff */ | ||
| 192 | #define SBA_PERF_MASK1 0x718 | ||
| 193 | #define SBA_PERF_MASK2 0x730 | ||
| 194 | |||
| 195 | /* | ||
| 196 | ** Offsets into PCI Performance Counters (functions 12 and 13) | ||
| 197 | ** Controlled by PERF registers in function 2 & 3 respectively. | ||
| 198 | */ | ||
| 199 | #define SBA_PERF_CNT1 0x200 | ||
| 200 | #define SBA_PERF_CNT2 0x208 | ||
| 201 | #define SBA_PERF_CNT3 0x210 | ||
| 202 | |||
| 203 | /* | ||
| 204 | ** lba_device: Per instance Elroy data structure | ||
| 205 | */ | ||
| 206 | struct lba_device { | ||
| 207 | struct pci_hba_data hba; | ||
| 208 | |||
| 209 | spinlock_t lba_lock; | ||
| 210 | void *iosapic_obj; | ||
| 211 | |||
| 212 | #ifdef CONFIG_64BIT | ||
| 213 | void __iomem *iop_base; /* PA_VIEW - for IO port accessor funcs */ | ||
| 214 | #endif | ||
| 215 | |||
| 216 | int flags; /* state/functionality enabled */ | ||
| 217 | int hw_rev; /* HW revision of chip */ | ||
| 218 | }; | ||
| 219 | |||
| 220 | #define ELROY_HVERS 0x782 | ||
| 221 | #define MERCURY_HVERS 0x783 | ||
| 222 | #define QUICKSILVER_HVERS 0x784 | ||
| 223 | |||
| 224 | static inline int IS_ELROY(struct parisc_device *d) { | ||
| 225 | return (d->id.hversion == ELROY_HVERS); | ||
| 226 | } | ||
| 227 | |||
| 228 | static inline int IS_MERCURY(struct parisc_device *d) { | ||
| 229 | return (d->id.hversion == MERCURY_HVERS); | ||
| 230 | } | ||
| 231 | |||
| 232 | static inline int IS_QUICKSILVER(struct parisc_device *d) { | ||
| 233 | return (d->id.hversion == QUICKSILVER_HVERS); | ||
| 234 | } | ||
| 235 | |||
| 236 | static inline int agp_mode_mercury(void __iomem *hpa) { | ||
| 237 | u64 bus_mode; | ||
| 238 | |||
| 239 | bus_mode = readl(hpa + 0x0620); | ||
| 240 | if (bus_mode & 1) | ||
| 241 | return 1; | ||
| 242 | |||
| 243 | return 0; | ||
| 244 | } | ||
| 245 | |||
| 246 | /* | ||
| 247 | ** I/O SAPIC init function | ||
| 248 | ** Caller knows where an I/O SAPIC is. LBA has an integrated I/O SAPIC. | ||
| 249 | ** Call setup as part of per instance initialization. | ||
| 250 | ** (ie *not* init_module() function unless only one is present.) | ||
| 251 | ** fixup_irq is to initialize PCI IRQ line support and | ||
| 252 | ** virtualize pcidev->irq value. To be called by pci_fixup_bus(). | ||
| 253 | */ | ||
| 254 | extern void *iosapic_register(unsigned long hpa); | ||
| 255 | extern int iosapic_fixup_irq(void *obj, struct pci_dev *pcidev); | ||
| 256 | |||
| 257 | #define LBA_FUNC_ID 0x0000 /* function id */ | ||
| 258 | #define LBA_FCLASS 0x0008 /* function class, bist, header, rev... */ | ||
| 259 | #define LBA_CAPABLE 0x0030 /* capabilities register */ | ||
| 260 | |||
| 261 | #define LBA_PCI_CFG_ADDR 0x0040 /* poke CFG address here */ | ||
| 262 | #define LBA_PCI_CFG_DATA 0x0048 /* read or write data here */ | ||
| 263 | |||
| 264 | #define LBA_PMC_MTLT 0x0050 /* Firmware sets this - read only. */ | ||
| 265 | #define LBA_FW_SCRATCH 0x0058 /* Firmware writes the PCI bus number here. */ | ||
| 266 | #define LBA_ERROR_ADDR 0x0070 /* On error, address gets logged here */ | ||
| 267 | |||
| 268 | #define LBA_ARB_MASK 0x0080 /* bit 0 enable arbitration. PAT/PDC enables */ | ||
| 269 | #define LBA_ARB_PRI 0x0088 /* firmware sets this. */ | ||
| 270 | #define LBA_ARB_MODE 0x0090 /* firmware sets this. */ | ||
| 271 | #define LBA_ARB_MTLT 0x0098 /* firmware sets this. */ | ||
| 272 | |||
| 273 | #define LBA_MOD_ID 0x0100 /* Module ID. PDC_PAT_CELL reports 4 */ | ||
| 274 | |||
| 275 | #define LBA_STAT_CTL 0x0108 /* Status & Control */ | ||
| 276 | #define LBA_BUS_RESET 0x01 /* Deassert PCI Bus Reset Signal */ | ||
| 277 | #define CLEAR_ERRLOG 0x10 /* "Clear Error Log" cmd */ | ||
| 278 | #define CLEAR_ERRLOG_ENABLE 0x20 /* "Clear Error Log" Enable */ | ||
| 279 | #define HF_ENABLE 0x40 /* enable HF mode (default is -1 mode) */ | ||
| 280 | |||
| 281 | #define LBA_LMMIO_BASE 0x0200 /* < 4GB I/O address range */ | ||
| 282 | #define LBA_LMMIO_MASK 0x0208 | ||
| 283 | |||
| 284 | #define LBA_GMMIO_BASE 0x0210 /* > 4GB I/O address range */ | ||
| 285 | #define LBA_GMMIO_MASK 0x0218 | ||
| 286 | |||
| 287 | #define LBA_WLMMIO_BASE 0x0220 /* All < 4GB ranges under the same *SBA* */ | ||
| 288 | #define LBA_WLMMIO_MASK 0x0228 | ||
| 289 | |||
| 290 | #define LBA_WGMMIO_BASE 0x0230 /* All > 4GB ranges under the same *SBA* */ | ||
| 291 | #define LBA_WGMMIO_MASK 0x0238 | ||
| 292 | |||
| 293 | #define LBA_IOS_BASE 0x0240 /* I/O port space for this LBA */ | ||
| 294 | #define LBA_IOS_MASK 0x0248 | ||
| 295 | |||
| 296 | #define LBA_ELMMIO_BASE 0x0250 /* Extra LMMIO range */ | ||
| 297 | #define LBA_ELMMIO_MASK 0x0258 | ||
| 298 | |||
| 299 | #define LBA_EIOS_BASE 0x0260 /* Extra I/O port space */ | ||
| 300 | #define LBA_EIOS_MASK 0x0268 | ||
| 301 | |||
| 302 | #define LBA_GLOBAL_MASK 0x0270 /* Mercury only: Global Address Mask */ | ||
| 303 | #define LBA_DMA_CTL 0x0278 /* firmware sets this */ | ||
| 304 | |||
| 305 | #define LBA_IBASE 0x0300 /* SBA DMA support */ | ||
| 306 | #define LBA_IMASK 0x0308 | ||
| 307 | |||
| 308 | /* FIXME: ignore DMA Hint stuff until we can measure performance */ | ||
| 309 | #define LBA_HINT_CFG 0x0310 | ||
| 310 | #define LBA_HINT_BASE 0x0380 /* 14 registers at every 8 bytes. */ | ||
| 311 | |||
| 312 | #define LBA_BUS_MODE 0x0620 | ||
| 313 | |||
| 314 | /* ERROR regs are needed for config cycle kluges */ | ||
| 315 | #define LBA_ERROR_CONFIG 0x0680 | ||
| 316 | #define LBA_SMART_MODE 0x20 | ||
| 317 | #define LBA_ERROR_STATUS 0x0688 | ||
| 318 | #define LBA_ROPE_CTL 0x06A0 | ||
| 319 | |||
| 320 | #define LBA_IOSAPIC_BASE 0x800 /* Offset of IRQ logic */ | ||
| 321 | |||
| 322 | #endif /*_ASM_PARISC_ROPES_H_*/ | ||
diff --git a/include/asm-parisc/serial.h b/include/asm-parisc/serial.h index 82fd820d684f..d7e3cc60dbc3 100644 --- a/include/asm-parisc/serial.h +++ b/include/asm-parisc/serial.h | |||
| @@ -3,20 +3,8 @@ | |||
| 3 | */ | 3 | */ |
| 4 | 4 | ||
| 5 | /* | 5 | /* |
| 6 | * This assumes you have a 7.272727 MHz clock for your UART. | 6 | * This is used for 16550-compatible UARTs |
| 7 | * The documentation implies a 40Mhz clock, and elsewhere a 7Mhz clock | ||
| 8 | * Clarified: 7.2727MHz on LASI. Not yet clarified for DINO | ||
| 9 | */ | 7 | */ |
| 8 | #define BASE_BAUD ( 1843200 / 16 ) | ||
| 10 | 9 | ||
| 11 | #define LASI_BASE_BAUD ( 7272727 / 16 ) | ||
| 12 | #define BASE_BAUD LASI_BASE_BAUD | ||
| 13 | |||
| 14 | /* | ||
| 15 | * We don't use the ISA probing code, so these entries are just to reserve | ||
| 16 | * space. Some example (maximal) configurations: | ||
| 17 | * - 712 w/ additional Lasi & RJ16 ports: 4 | ||
| 18 | * - J5k w/ PCI serial cards: 2 + 4 * card ~= 34 | ||
| 19 | * A500 w/ PCI serial cards: 5 + 4 * card ~= 17 | ||
| 20 | */ | ||
| 21 | |||
| 22 | #define SERIAL_PORT_DFNS | 10 | #define SERIAL_PORT_DFNS |
diff --git a/include/asm-parisc/spinlock.h b/include/asm-parisc/spinlock.h index e1825530365d..f3d2090a18dc 100644 --- a/include/asm-parisc/spinlock.h +++ b/include/asm-parisc/spinlock.h | |||
| @@ -56,50 +56,79 @@ static inline int __raw_spin_trylock(raw_spinlock_t *x) | |||
| 56 | } | 56 | } |
| 57 | 57 | ||
| 58 | /* | 58 | /* |
| 59 | * Read-write spinlocks, allowing multiple readers | 59 | * Read-write spinlocks, allowing multiple readers but only one writer. |
| 60 | * but only one writer. | 60 | * Linux rwlocks are unfair to writers; they can be starved for an indefinite |
| 61 | * time by readers. With care, they can also be taken in interrupt context. | ||
| 62 | * | ||
| 63 | * In the PA-RISC implementation, we have a spinlock and a counter. | ||
| 64 | * Readers use the lock to serialise their access to the counter (which | ||
| 65 | * records how many readers currently hold the lock). | ||
| 66 | * Writers hold the spinlock, preventing any readers or other writers from | ||
| 67 | * grabbing the rwlock. | ||
| 61 | */ | 68 | */ |
| 62 | 69 | ||
| 63 | #define __raw_read_trylock(lock) generic__raw_read_trylock(lock) | 70 | /* Note that we have to ensure interrupts are disabled in case we're |
| 64 | 71 | * interrupted by some other code that wants to grab the same read lock */ | |
| 65 | /* read_lock, read_unlock are pretty straightforward. Of course it somehow | ||
| 66 | * sucks we end up saving/restoring flags twice for read_lock_irqsave aso. */ | ||
| 67 | |||
| 68 | static __inline__ void __raw_read_lock(raw_rwlock_t *rw) | 72 | static __inline__ void __raw_read_lock(raw_rwlock_t *rw) |
| 69 | { | 73 | { |
| 70 | __raw_spin_lock(&rw->lock); | 74 | unsigned long flags; |
| 71 | 75 | local_irq_save(flags); | |
| 76 | __raw_spin_lock_flags(&rw->lock, flags); | ||
| 72 | rw->counter++; | 77 | rw->counter++; |
| 73 | |||
| 74 | __raw_spin_unlock(&rw->lock); | 78 | __raw_spin_unlock(&rw->lock); |
| 79 | local_irq_restore(flags); | ||
| 75 | } | 80 | } |
| 76 | 81 | ||
| 82 | /* Note that we have to ensure interrupts are disabled in case we're | ||
| 83 | * interrupted by some other code that wants to grab the same read lock */ | ||
| 77 | static __inline__ void __raw_read_unlock(raw_rwlock_t *rw) | 84 | static __inline__ void __raw_read_unlock(raw_rwlock_t *rw) |
| 78 | { | 85 | { |
| 79 | __raw_spin_lock(&rw->lock); | 86 | unsigned long flags; |
| 80 | 87 | local_irq_save(flags); | |
| 88 | __raw_spin_lock_flags(&rw->lock, flags); | ||
| 81 | rw->counter--; | 89 | rw->counter--; |
| 82 | |||
| 83 | __raw_spin_unlock(&rw->lock); | 90 | __raw_spin_unlock(&rw->lock); |
| 91 | local_irq_restore(flags); | ||
| 84 | } | 92 | } |
| 85 | 93 | ||
| 86 | /* write_lock is less trivial. We optimistically grab the lock and check | 94 | /* Note that we have to ensure interrupts are disabled in case we're |
| 87 | * if we surprised any readers. If so we release the lock and wait till | 95 | * interrupted by some other code that wants to grab the same read lock */ |
| 88 | * they're all gone before trying again | 96 | static __inline__ int __raw_read_trylock(raw_rwlock_t *rw) |
| 89 | * | 97 | { |
| 90 | * Also note that we don't use the _irqsave / _irqrestore suffixes here. | 98 | unsigned long flags; |
| 91 | * If we're called with interrupts enabled and we've got readers (or other | 99 | retry: |
| 92 | * writers) in interrupt handlers someone fucked up and we'd dead-lock | 100 | local_irq_save(flags); |
| 93 | * sooner or later anyway. prumpf */ | 101 | if (__raw_spin_trylock(&rw->lock)) { |
| 102 | rw->counter++; | ||
| 103 | __raw_spin_unlock(&rw->lock); | ||
| 104 | local_irq_restore(flags); | ||
| 105 | return 1; | ||
| 106 | } | ||
| 94 | 107 | ||
| 95 | static __inline__ void __raw_write_lock(raw_rwlock_t *rw) | 108 | local_irq_restore(flags); |
| 109 | /* If write-locked, we fail to acquire the lock */ | ||
| 110 | if (rw->counter < 0) | ||
| 111 | return 0; | ||
| 112 | |||
| 113 | /* Wait until we have a realistic chance at the lock */ | ||
| 114 | while (__raw_spin_is_locked(&rw->lock) && rw->counter >= 0) | ||
| 115 | cpu_relax(); | ||
| 116 | |||
| 117 | goto retry; | ||
| 118 | } | ||
| 119 | |||
| 120 | /* Note that we have to ensure interrupts are disabled in case we're | ||
| 121 | * interrupted by some other code that wants to read_trylock() this lock */ | ||
| 122 | static __inline__ void __raw_write_lock(raw_rwlock_t *rw) | ||
| 96 | { | 123 | { |
| 124 | unsigned long flags; | ||
| 97 | retry: | 125 | retry: |
| 98 | __raw_spin_lock(&rw->lock); | 126 | local_irq_save(flags); |
| 127 | __raw_spin_lock_flags(&rw->lock, flags); | ||
| 99 | 128 | ||
| 100 | if(rw->counter != 0) { | 129 | if (rw->counter != 0) { |
| 101 | /* this basically never happens */ | ||
| 102 | __raw_spin_unlock(&rw->lock); | 130 | __raw_spin_unlock(&rw->lock); |
| 131 | local_irq_restore(flags); | ||
| 103 | 132 | ||
| 104 | while (rw->counter != 0) | 133 | while (rw->counter != 0) |
| 105 | cpu_relax(); | 134 | cpu_relax(); |
| @@ -107,31 +136,37 @@ retry: | |||
| 107 | goto retry; | 136 | goto retry; |
| 108 | } | 137 | } |
| 109 | 138 | ||
| 110 | /* got it. now leave without unlocking */ | 139 | rw->counter = -1; /* mark as write-locked */ |
| 111 | rw->counter = -1; /* remember we are locked */ | 140 | mb(); |
| 141 | local_irq_restore(flags); | ||
| 112 | } | 142 | } |
| 113 | 143 | ||
| 114 | /* write_unlock is absolutely trivial - we don't have to wait for anything */ | 144 | static __inline__ void __raw_write_unlock(raw_rwlock_t *rw) |
| 115 | |||
| 116 | static __inline__ void __raw_write_unlock(raw_rwlock_t *rw) | ||
| 117 | { | 145 | { |
| 118 | rw->counter = 0; | 146 | rw->counter = 0; |
| 119 | __raw_spin_unlock(&rw->lock); | 147 | __raw_spin_unlock(&rw->lock); |
| 120 | } | 148 | } |
| 121 | 149 | ||
| 122 | static __inline__ int __raw_write_trylock(raw_rwlock_t *rw) | 150 | /* Note that we have to ensure interrupts are disabled in case we're |
| 151 | * interrupted by some other code that wants to read_trylock() this lock */ | ||
| 152 | static __inline__ int __raw_write_trylock(raw_rwlock_t *rw) | ||
| 123 | { | 153 | { |
| 124 | __raw_spin_lock(&rw->lock); | 154 | unsigned long flags; |
| 125 | if (rw->counter != 0) { | 155 | int result = 0; |
| 126 | /* this basically never happens */ | 156 | |
| 127 | __raw_spin_unlock(&rw->lock); | 157 | local_irq_save(flags); |
| 128 | 158 | if (__raw_spin_trylock(&rw->lock)) { | |
| 129 | return 0; | 159 | if (rw->counter == 0) { |
| 160 | rw->counter = -1; | ||
| 161 | result = 1; | ||
| 162 | } else { | ||
| 163 | /* Read-locked. Oh well. */ | ||
| 164 | __raw_spin_unlock(&rw->lock); | ||
| 165 | } | ||
| 130 | } | 166 | } |
| 167 | local_irq_restore(flags); | ||
| 131 | 168 | ||
| 132 | /* got it. now leave without unlocking */ | 169 | return result; |
| 133 | rw->counter = -1; /* remember we are locked */ | ||
| 134 | return 1; | ||
| 135 | } | 170 | } |
| 136 | 171 | ||
| 137 | /* | 172 | /* |
diff --git a/include/asm-powerpc/firmware.h b/include/asm-powerpc/firmware.h index 77069df92bf8..1022737f4f34 100644 --- a/include/asm-powerpc/firmware.h +++ b/include/asm-powerpc/firmware.h | |||
| @@ -14,34 +14,36 @@ | |||
| 14 | 14 | ||
| 15 | #ifdef __KERNEL__ | 15 | #ifdef __KERNEL__ |
| 16 | 16 | ||
| 17 | #ifndef __ASSEMBLY__ | 17 | #include <asm/asm-compat.h> |
| 18 | 18 | ||
| 19 | /* firmware feature bitmask values */ | 19 | /* firmware feature bitmask values */ |
| 20 | #define FIRMWARE_MAX_FEATURES 63 | 20 | #define FIRMWARE_MAX_FEATURES 63 |
| 21 | 21 | ||
| 22 | #define FW_FEATURE_PFT (1UL<<0) | 22 | #define FW_FEATURE_PFT ASM_CONST(0x0000000000000001) |
| 23 | #define FW_FEATURE_TCE (1UL<<1) | 23 | #define FW_FEATURE_TCE ASM_CONST(0x0000000000000002) |
| 24 | #define FW_FEATURE_SPRG0 (1UL<<2) | 24 | #define FW_FEATURE_SPRG0 ASM_CONST(0x0000000000000004) |
| 25 | #define FW_FEATURE_DABR (1UL<<3) | 25 | #define FW_FEATURE_DABR ASM_CONST(0x0000000000000008) |
| 26 | #define FW_FEATURE_COPY (1UL<<4) | 26 | #define FW_FEATURE_COPY ASM_CONST(0x0000000000000010) |
| 27 | #define FW_FEATURE_ASR (1UL<<5) | 27 | #define FW_FEATURE_ASR ASM_CONST(0x0000000000000020) |
| 28 | #define FW_FEATURE_DEBUG (1UL<<6) | 28 | #define FW_FEATURE_DEBUG ASM_CONST(0x0000000000000040) |
| 29 | #define FW_FEATURE_TERM (1UL<<7) | 29 | #define FW_FEATURE_TERM ASM_CONST(0x0000000000000080) |
| 30 | #define FW_FEATURE_PERF (1UL<<8) | 30 | #define FW_FEATURE_PERF ASM_CONST(0x0000000000000100) |
| 31 | #define FW_FEATURE_DUMP (1UL<<9) | 31 | #define FW_FEATURE_DUMP ASM_CONST(0x0000000000000200) |
| 32 | #define FW_FEATURE_INTERRUPT (1UL<<10) | 32 | #define FW_FEATURE_INTERRUPT ASM_CONST(0x0000000000000400) |
| 33 | #define FW_FEATURE_MIGRATE (1UL<<11) | 33 | #define FW_FEATURE_MIGRATE ASM_CONST(0x0000000000000800) |
| 34 | #define FW_FEATURE_PERFMON (1UL<<12) | 34 | #define FW_FEATURE_PERFMON ASM_CONST(0x0000000000001000) |
| 35 | #define FW_FEATURE_CRQ (1UL<<13) | 35 | #define FW_FEATURE_CRQ ASM_CONST(0x0000000000002000) |
| 36 | #define FW_FEATURE_VIO (1UL<<14) | 36 | #define FW_FEATURE_VIO ASM_CONST(0x0000000000004000) |
| 37 | #define FW_FEATURE_RDMA (1UL<<15) | 37 | #define FW_FEATURE_RDMA ASM_CONST(0x0000000000008000) |
| 38 | #define FW_FEATURE_LLAN (1UL<<16) | 38 | #define FW_FEATURE_LLAN ASM_CONST(0x0000000000010000) |
| 39 | #define FW_FEATURE_BULK (1UL<<17) | 39 | #define FW_FEATURE_BULK ASM_CONST(0x0000000000020000) |
| 40 | #define FW_FEATURE_XDABR (1UL<<18) | 40 | #define FW_FEATURE_XDABR ASM_CONST(0x0000000000040000) |
| 41 | #define FW_FEATURE_MULTITCE (1UL<<19) | 41 | #define FW_FEATURE_MULTITCE ASM_CONST(0x0000000000080000) |
| 42 | #define FW_FEATURE_SPLPAR (1UL<<20) | 42 | #define FW_FEATURE_SPLPAR ASM_CONST(0x0000000000100000) |
| 43 | #define FW_FEATURE_ISERIES (1UL<<21) | 43 | #define FW_FEATURE_ISERIES ASM_CONST(0x0000000000200000) |
| 44 | #define FW_FEATURE_LPAR (1UL<<22) | 44 | #define FW_FEATURE_LPAR ASM_CONST(0x0000000000400000) |
| 45 | |||
| 46 | #ifndef __ASSEMBLY__ | ||
| 45 | 47 | ||
| 46 | enum { | 48 | enum { |
| 47 | #ifdef CONFIG_PPC64 | 49 | #ifdef CONFIG_PPC64 |
| @@ -94,6 +96,23 @@ extern void machine_check_fwnmi(void); | |||
| 94 | /* This is true if we are using the firmware NMI handler (typically LPAR) */ | 96 | /* This is true if we are using the firmware NMI handler (typically LPAR) */ |
| 95 | extern int fwnmi_active; | 97 | extern int fwnmi_active; |
| 96 | 98 | ||
| 99 | #else /* __ASSEMBLY__ */ | ||
| 100 | |||
| 101 | #define BEGIN_FW_FTR_SECTION 96: | ||
| 102 | |||
| 103 | #define END_FW_FTR_SECTION(msk, val) \ | ||
| 104 | 97: \ | ||
| 105 | .section __fw_ftr_fixup,"a"; \ | ||
| 106 | .align 3; \ | ||
| 107 | .llong msk; \ | ||
| 108 | .llong val; \ | ||
| 109 | .llong 96b; \ | ||
| 110 | .llong 97b; \ | ||
| 111 | .previous | ||
| 112 | |||
| 113 | #define END_FW_FTR_SECTION_IFSET(msk) END_FW_FTR_SECTION((msk), (msk)) | ||
| 114 | #define END_FW_FTR_SECTION_IFCLR(msk) END_FW_FTR_SECTION((msk), 0) | ||
| 115 | |||
| 97 | #endif /* __ASSEMBLY__ */ | 116 | #endif /* __ASSEMBLY__ */ |
| 98 | #endif /* __KERNEL__ */ | 117 | #endif /* __KERNEL__ */ |
| 99 | #endif /* __ASM_POWERPC_FIRMWARE_H */ | 118 | #endif /* __ASM_POWERPC_FIRMWARE_H */ |
diff --git a/include/asm-powerpc/i8259.h b/include/asm-powerpc/i8259.h index c80e113052cd..78489fb8d140 100644 --- a/include/asm-powerpc/i8259.h +++ b/include/asm-powerpc/i8259.h | |||
| @@ -6,10 +6,10 @@ | |||
| 6 | 6 | ||
| 7 | #ifdef CONFIG_PPC_MERGE | 7 | #ifdef CONFIG_PPC_MERGE |
| 8 | extern void i8259_init(struct device_node *node, unsigned long intack_addr); | 8 | extern void i8259_init(struct device_node *node, unsigned long intack_addr); |
| 9 | extern unsigned int i8259_irq(struct pt_regs *regs); | 9 | extern unsigned int i8259_irq(void); |
| 10 | #else | 10 | #else |
| 11 | extern void i8259_init(unsigned long intack_addr, int offset); | 11 | extern void i8259_init(unsigned long intack_addr, int offset); |
| 12 | extern int i8259_irq(struct pt_regs *regs); | 12 | extern int i8259_irq(void); |
| 13 | #endif | 13 | #endif |
| 14 | 14 | ||
| 15 | #endif /* __KERNEL__ */ | 15 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-powerpc/ibmebus.h b/include/asm-powerpc/ibmebus.h index 7ab195a27888..3493429b70f5 100644 --- a/include/asm-powerpc/ibmebus.h +++ b/include/asm-powerpc/ibmebus.h | |||
| @@ -65,7 +65,7 @@ void ibmebus_unregister_driver(struct ibmebus_driver *drv); | |||
| 65 | 65 | ||
| 66 | int ibmebus_request_irq(struct ibmebus_dev *dev, | 66 | int ibmebus_request_irq(struct ibmebus_dev *dev, |
| 67 | u32 ist, | 67 | u32 ist, |
| 68 | irqreturn_t (*handler)(int, void*, struct pt_regs *), | 68 | irq_handler_t handler, |
| 69 | unsigned long irq_flags, const char * devname, | 69 | unsigned long irq_flags, const char * devname, |
| 70 | void *dev_id); | 70 | void *dev_id); |
| 71 | void ibmebus_free_irq(struct ibmebus_dev *dev, u32 ist, void *dev_id); | 71 | void ibmebus_free_irq(struct ibmebus_dev *dev, u32 ist, void *dev_id); |
diff --git a/include/asm-powerpc/immap_qe.h b/include/asm-powerpc/immap_qe.h new file mode 100644 index 000000000000..ce12f85fff9b --- /dev/null +++ b/include/asm-powerpc/immap_qe.h | |||
| @@ -0,0 +1,477 @@ | |||
| 1 | /* | ||
| 2 | * include/asm-powerpc/immap_qe.h | ||
| 3 | * | ||
| 4 | * QUICC Engine (QE) Internal Memory Map. | ||
| 5 | * The Internal Memory Map for devices with QE on them. This | ||
| 6 | * is the superset of all QE devices (8360, etc.). | ||
| 7 | |||
| 8 | * Copyright (C) 2006. Freescale Semicondutor, Inc. All rights reserved. | ||
| 9 | * | ||
| 10 | * Authors: Shlomi Gridish <gridish@freescale.com> | ||
| 11 | * Li Yang <leoli@freescale.com> | ||
| 12 | * | ||
| 13 | * This program is free software; you can redistribute it and/or modify it | ||
| 14 | * under the terms of the GNU General Public License as published by the | ||
| 15 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 16 | * option) any later version. | ||
| 17 | */ | ||
| 18 | #ifndef _ASM_POWERPC_IMMAP_QE_H | ||
| 19 | #define _ASM_POWERPC_IMMAP_QE_H | ||
| 20 | #ifdef __KERNEL__ | ||
| 21 | |||
| 22 | #include <linux/kernel.h> | ||
| 23 | |||
| 24 | #define QE_IMMAP_SIZE (1024 * 1024) /* 1MB from 1MB+IMMR */ | ||
| 25 | |||
| 26 | /* QE I-RAM */ | ||
| 27 | struct qe_iram { | ||
| 28 | __be32 iadd; /* I-RAM Address Register */ | ||
| 29 | __be32 idata; /* I-RAM Data Register */ | ||
| 30 | u8 res0[0x78]; | ||
| 31 | } __attribute__ ((packed)); | ||
| 32 | |||
| 33 | /* QE Interrupt Controller */ | ||
| 34 | struct qe_ic_regs { | ||
| 35 | __be32 qicr; | ||
| 36 | __be32 qivec; | ||
| 37 | __be32 qripnr; | ||
| 38 | __be32 qipnr; | ||
| 39 | __be32 qipxcc; | ||
| 40 | __be32 qipycc; | ||
| 41 | __be32 qipwcc; | ||
| 42 | __be32 qipzcc; | ||
| 43 | __be32 qimr; | ||
| 44 | __be32 qrimr; | ||
| 45 | __be32 qicnr; | ||
| 46 | u8 res0[0x4]; | ||
| 47 | __be32 qiprta; | ||
| 48 | __be32 qiprtb; | ||
| 49 | u8 res1[0x4]; | ||
| 50 | __be32 qricr; | ||
| 51 | u8 res2[0x20]; | ||
| 52 | __be32 qhivec; | ||
| 53 | u8 res3[0x1C]; | ||
| 54 | } __attribute__ ((packed)); | ||
| 55 | |||
| 56 | /* Communications Processor */ | ||
| 57 | struct cp_qe { | ||
| 58 | __be32 cecr; /* QE command register */ | ||
| 59 | __be32 ceccr; /* QE controller configuration register */ | ||
| 60 | __be32 cecdr; /* QE command data register */ | ||
| 61 | u8 res0[0xA]; | ||
| 62 | __be16 ceter; /* QE timer event register */ | ||
| 63 | u8 res1[0x2]; | ||
| 64 | __be16 cetmr; /* QE timers mask register */ | ||
| 65 | __be32 cetscr; /* QE time-stamp timer control register */ | ||
| 66 | __be32 cetsr1; /* QE time-stamp register 1 */ | ||
| 67 | __be32 cetsr2; /* QE time-stamp register 2 */ | ||
| 68 | u8 res2[0x8]; | ||
| 69 | __be32 cevter; /* QE virtual tasks event register */ | ||
| 70 | __be32 cevtmr; /* QE virtual tasks mask register */ | ||
| 71 | __be16 cercr; /* QE RAM control register */ | ||
| 72 | u8 res3[0x2]; | ||
| 73 | u8 res4[0x24]; | ||
| 74 | __be16 ceexe1; /* QE external request 1 event register */ | ||
| 75 | u8 res5[0x2]; | ||
| 76 | __be16 ceexm1; /* QE external request 1 mask register */ | ||
| 77 | u8 res6[0x2]; | ||
| 78 | __be16 ceexe2; /* QE external request 2 event register */ | ||
| 79 | u8 res7[0x2]; | ||
| 80 | __be16 ceexm2; /* QE external request 2 mask register */ | ||
| 81 | u8 res8[0x2]; | ||
| 82 | __be16 ceexe3; /* QE external request 3 event register */ | ||
| 83 | u8 res9[0x2]; | ||
| 84 | __be16 ceexm3; /* QE external request 3 mask register */ | ||
| 85 | u8 res10[0x2]; | ||
| 86 | __be16 ceexe4; /* QE external request 4 event register */ | ||
| 87 | u8 res11[0x2]; | ||
| 88 | __be16 ceexm4; /* QE external request 4 mask register */ | ||
| 89 | u8 res12[0x2]; | ||
| 90 | u8 res13[0x280]; | ||
| 91 | } __attribute__ ((packed)); | ||
| 92 | |||
| 93 | /* QE Multiplexer */ | ||
| 94 | struct qe_mux { | ||
| 95 | __be32 cmxgcr; /* CMX general clock route register */ | ||
| 96 | __be32 cmxsi1cr_l; /* CMX SI1 clock route low register */ | ||
| 97 | __be32 cmxsi1cr_h; /* CMX SI1 clock route high register */ | ||
| 98 | __be32 cmxsi1syr; /* CMX SI1 SYNC route register */ | ||
| 99 | __be32 cmxucr1; /* CMX UCC1, UCC3 clock route register */ | ||
| 100 | __be32 cmxucr2; /* CMX UCC5, UCC7 clock route register */ | ||
| 101 | __be32 cmxucr3; /* CMX UCC2, UCC4 clock route register */ | ||
| 102 | __be32 cmxucr4; /* CMX UCC6, UCC8 clock route register */ | ||
| 103 | __be32 cmxupcr; /* CMX UPC clock route register */ | ||
| 104 | u8 res0[0x1C]; | ||
| 105 | } __attribute__ ((packed)); | ||
| 106 | |||
| 107 | /* QE Timers */ | ||
| 108 | struct qe_timers { | ||
| 109 | u8 gtcfr1; /* Timer 1 and Timer 2 global config register*/ | ||
| 110 | u8 res0[0x3]; | ||
| 111 | u8 gtcfr2; /* Timer 3 and timer 4 global config register*/ | ||
| 112 | u8 res1[0xB]; | ||
| 113 | __be16 gtmdr1; /* Timer 1 mode register */ | ||
| 114 | __be16 gtmdr2; /* Timer 2 mode register */ | ||
| 115 | __be16 gtrfr1; /* Timer 1 reference register */ | ||
| 116 | __be16 gtrfr2; /* Timer 2 reference register */ | ||
| 117 | __be16 gtcpr1; /* Timer 1 capture register */ | ||
| 118 | __be16 gtcpr2; /* Timer 2 capture register */ | ||
| 119 | __be16 gtcnr1; /* Timer 1 counter */ | ||
| 120 | __be16 gtcnr2; /* Timer 2 counter */ | ||
| 121 | __be16 gtmdr3; /* Timer 3 mode register */ | ||
| 122 | __be16 gtmdr4; /* Timer 4 mode register */ | ||
| 123 | __be16 gtrfr3; /* Timer 3 reference register */ | ||
| 124 | __be16 gtrfr4; /* Timer 4 reference register */ | ||
| 125 | __be16 gtcpr3; /* Timer 3 capture register */ | ||
| 126 | __be16 gtcpr4; /* Timer 4 capture register */ | ||
| 127 | __be16 gtcnr3; /* Timer 3 counter */ | ||
| 128 | __be16 gtcnr4; /* Timer 4 counter */ | ||
| 129 | __be16 gtevr1; /* Timer 1 event register */ | ||
| 130 | __be16 gtevr2; /* Timer 2 event register */ | ||
| 131 | __be16 gtevr3; /* Timer 3 event register */ | ||
| 132 | __be16 gtevr4; /* Timer 4 event register */ | ||
| 133 | __be16 gtps; /* Timer 1 prescale register */ | ||
| 134 | u8 res2[0x46]; | ||
| 135 | } __attribute__ ((packed)); | ||
| 136 | |||
| 137 | /* BRG */ | ||
| 138 | struct qe_brg { | ||
| 139 | __be32 brgc1; /* BRG1 configuration register */ | ||
| 140 | __be32 brgc2; /* BRG2 configuration register */ | ||
| 141 | __be32 brgc3; /* BRG3 configuration register */ | ||
| 142 | __be32 brgc4; /* BRG4 configuration register */ | ||
| 143 | __be32 brgc5; /* BRG5 configuration register */ | ||
| 144 | __be32 brgc6; /* BRG6 configuration register */ | ||
| 145 | __be32 brgc7; /* BRG7 configuration register */ | ||
| 146 | __be32 brgc8; /* BRG8 configuration register */ | ||
| 147 | __be32 brgc9; /* BRG9 configuration register */ | ||
| 148 | __be32 brgc10; /* BRG10 configuration register */ | ||
| 149 | __be32 brgc11; /* BRG11 configuration register */ | ||
| 150 | __be32 brgc12; /* BRG12 configuration register */ | ||
| 151 | __be32 brgc13; /* BRG13 configuration register */ | ||
| 152 | __be32 brgc14; /* BRG14 configuration register */ | ||
| 153 | __be32 brgc15; /* BRG15 configuration register */ | ||
| 154 | __be32 brgc16; /* BRG16 configuration register */ | ||
| 155 | u8 res0[0x40]; | ||
| 156 | } __attribute__ ((packed)); | ||
| 157 | |||
| 158 | /* SPI */ | ||
| 159 | struct spi { | ||
| 160 | u8 res0[0x20]; | ||
| 161 | __be32 spmode; /* SPI mode register */ | ||
| 162 | u8 res1[0x2]; | ||
| 163 | u8 spie; /* SPI event register */ | ||
| 164 | u8 res2[0x1]; | ||
| 165 | u8 res3[0x2]; | ||
| 166 | u8 spim; /* SPI mask register */ | ||
| 167 | u8 res4[0x1]; | ||
| 168 | u8 res5[0x1]; | ||
| 169 | u8 spcom; /* SPI command register */ | ||
| 170 | u8 res6[0x2]; | ||
| 171 | __be32 spitd; /* SPI transmit data register (cpu mode) */ | ||
| 172 | __be32 spird; /* SPI receive data register (cpu mode) */ | ||
| 173 | u8 res7[0x8]; | ||
| 174 | } __attribute__ ((packed)); | ||
| 175 | |||
| 176 | /* SI */ | ||
| 177 | struct si1 { | ||
| 178 | __be16 siamr1; /* SI1 TDMA mode register */ | ||
| 179 | __be16 sibmr1; /* SI1 TDMB mode register */ | ||
| 180 | __be16 sicmr1; /* SI1 TDMC mode register */ | ||
| 181 | __be16 sidmr1; /* SI1 TDMD mode register */ | ||
| 182 | u8 siglmr1_h; /* SI1 global mode register high */ | ||
| 183 | u8 res0[0x1]; | ||
| 184 | u8 sicmdr1_h; /* SI1 command register high */ | ||
| 185 | u8 res2[0x1]; | ||
| 186 | u8 sistr1_h; /* SI1 status register high */ | ||
| 187 | u8 res3[0x1]; | ||
| 188 | __be16 sirsr1_h; /* SI1 RAM shadow address register high */ | ||
| 189 | u8 sitarc1; /* SI1 RAM counter Tx TDMA */ | ||
| 190 | u8 sitbrc1; /* SI1 RAM counter Tx TDMB */ | ||
| 191 | u8 sitcrc1; /* SI1 RAM counter Tx TDMC */ | ||
| 192 | u8 sitdrc1; /* SI1 RAM counter Tx TDMD */ | ||
| 193 | u8 sirarc1; /* SI1 RAM counter Rx TDMA */ | ||
| 194 | u8 sirbrc1; /* SI1 RAM counter Rx TDMB */ | ||
| 195 | u8 sircrc1; /* SI1 RAM counter Rx TDMC */ | ||
| 196 | u8 sirdrc1; /* SI1 RAM counter Rx TDMD */ | ||
| 197 | u8 res4[0x8]; | ||
| 198 | __be16 siemr1; /* SI1 TDME mode register 16 bits */ | ||
| 199 | __be16 sifmr1; /* SI1 TDMF mode register 16 bits */ | ||
| 200 | __be16 sigmr1; /* SI1 TDMG mode register 16 bits */ | ||
| 201 | __be16 sihmr1; /* SI1 TDMH mode register 16 bits */ | ||
| 202 | u8 siglmg1_l; /* SI1 global mode register low 8 bits */ | ||
| 203 | u8 res5[0x1]; | ||
| 204 | u8 sicmdr1_l; /* SI1 command register low 8 bits */ | ||
| 205 | u8 res6[0x1]; | ||
| 206 | u8 sistr1_l; /* SI1 status register low 8 bits */ | ||
| 207 | u8 res7[0x1]; | ||
| 208 | __be16 sirsr1_l; /* SI1 RAM shadow address register low 16 bits*/ | ||
| 209 | u8 siterc1; /* SI1 RAM counter Tx TDME 8 bits */ | ||
| 210 | u8 sitfrc1; /* SI1 RAM counter Tx TDMF 8 bits */ | ||
| 211 | u8 sitgrc1; /* SI1 RAM counter Tx TDMG 8 bits */ | ||
| 212 | u8 sithrc1; /* SI1 RAM counter Tx TDMH 8 bits */ | ||
| 213 | u8 sirerc1; /* SI1 RAM counter Rx TDME 8 bits */ | ||
| 214 | u8 sirfrc1; /* SI1 RAM counter Rx TDMF 8 bits */ | ||
| 215 | u8 sirgrc1; /* SI1 RAM counter Rx TDMG 8 bits */ | ||
| 216 | u8 sirhrc1; /* SI1 RAM counter Rx TDMH 8 bits */ | ||
| 217 | u8 res8[0x8]; | ||
| 218 | __be32 siml1; /* SI1 multiframe limit register */ | ||
| 219 | u8 siedm1; /* SI1 extended diagnostic mode register */ | ||
| 220 | u8 res9[0xBB]; | ||
| 221 | } __attribute__ ((packed)); | ||
| 222 | |||
| 223 | /* SI Routing Tables */ | ||
| 224 | struct sir { | ||
| 225 | u8 tx[0x400]; | ||
| 226 | u8 rx[0x400]; | ||
| 227 | u8 res0[0x800]; | ||
| 228 | } __attribute__ ((packed)); | ||
| 229 | |||
| 230 | /* USB Controller */ | ||
| 231 | struct usb_ctlr { | ||
| 232 | u8 usb_usmod; | ||
| 233 | u8 usb_usadr; | ||
| 234 | u8 usb_uscom; | ||
| 235 | u8 res1[1]; | ||
| 236 | __be16 usb_usep1; | ||
| 237 | __be16 usb_usep2; | ||
| 238 | __be16 usb_usep3; | ||
| 239 | __be16 usb_usep4; | ||
| 240 | u8 res2[4]; | ||
| 241 | __be16 usb_usber; | ||
| 242 | u8 res3[2]; | ||
| 243 | __be16 usb_usbmr; | ||
| 244 | u8 res4[1]; | ||
| 245 | u8 usb_usbs; | ||
| 246 | __be16 usb_ussft; | ||
| 247 | u8 res5[2]; | ||
| 248 | __be16 usb_usfrn; | ||
| 249 | u8 res6[0x22]; | ||
| 250 | } __attribute__ ((packed)); | ||
| 251 | |||
| 252 | /* MCC */ | ||
| 253 | struct mcc { | ||
| 254 | __be32 mcce; /* MCC event register */ | ||
| 255 | __be32 mccm; /* MCC mask register */ | ||
| 256 | __be32 mccf; /* MCC configuration register */ | ||
| 257 | __be32 merl; /* MCC emergency request level register */ | ||
| 258 | u8 res0[0xF0]; | ||
| 259 | } __attribute__ ((packed)); | ||
| 260 | |||
| 261 | /* QE UCC Slow */ | ||
| 262 | struct ucc_slow { | ||
| 263 | __be32 gumr_l; /* UCCx general mode register (low) */ | ||
| 264 | __be32 gumr_h; /* UCCx general mode register (high) */ | ||
| 265 | __be16 upsmr; /* UCCx protocol-specific mode register */ | ||
| 266 | u8 res0[0x2]; | ||
| 267 | __be16 utodr; /* UCCx transmit on demand register */ | ||
| 268 | __be16 udsr; /* UCCx data synchronization register */ | ||
| 269 | __be16 ucce; /* UCCx event register */ | ||
| 270 | u8 res1[0x2]; | ||
| 271 | __be16 uccm; /* UCCx mask register */ | ||
| 272 | u8 res2[0x1]; | ||
| 273 | u8 uccs; /* UCCx status register */ | ||
| 274 | u8 res3[0x24]; | ||
| 275 | __be16 utpt; | ||
| 276 | u8 guemr; /* UCC general extended mode register */ | ||
| 277 | u8 res4[0x200 - 0x091]; | ||
| 278 | } __attribute__ ((packed)); | ||
| 279 | |||
| 280 | /* QE UCC Fast */ | ||
| 281 | struct ucc_fast { | ||
| 282 | __be32 gumr; /* UCCx general mode register */ | ||
| 283 | __be32 upsmr; /* UCCx protocol-specific mode register */ | ||
| 284 | __be16 utodr; /* UCCx transmit on demand register */ | ||
| 285 | u8 res0[0x2]; | ||
| 286 | __be16 udsr; /* UCCx data synchronization register */ | ||
| 287 | u8 res1[0x2]; | ||
| 288 | __be32 ucce; /* UCCx event register */ | ||
| 289 | __be32 uccm; /* UCCx mask register */ | ||
| 290 | u8 uccs; /* UCCx status register */ | ||
| 291 | u8 res2[0x7]; | ||
| 292 | __be32 urfb; /* UCC receive FIFO base */ | ||
| 293 | __be16 urfs; /* UCC receive FIFO size */ | ||
| 294 | u8 res3[0x2]; | ||
| 295 | __be16 urfet; /* UCC receive FIFO emergency threshold */ | ||
| 296 | __be16 urfset; /* UCC receive FIFO special emergency | ||
| 297 | threshold */ | ||
| 298 | __be32 utfb; /* UCC transmit FIFO base */ | ||
| 299 | __be16 utfs; /* UCC transmit FIFO size */ | ||
| 300 | u8 res4[0x2]; | ||
| 301 | __be16 utfet; /* UCC transmit FIFO emergency threshold */ | ||
| 302 | u8 res5[0x2]; | ||
| 303 | __be16 utftt; /* UCC transmit FIFO transmit threshold */ | ||
| 304 | u8 res6[0x2]; | ||
| 305 | __be16 utpt; /* UCC transmit polling timer */ | ||
| 306 | u8 res7[0x2]; | ||
| 307 | __be32 urtry; /* UCC retry counter register */ | ||
| 308 | u8 res8[0x4C]; | ||
| 309 | u8 guemr; /* UCC general extended mode register */ | ||
| 310 | u8 res9[0x100 - 0x091]; | ||
| 311 | } __attribute__ ((packed)); | ||
| 312 | |||
| 313 | /* QE UCC */ | ||
| 314 | struct ucc_common { | ||
| 315 | u8 res1[0x90]; | ||
| 316 | u8 guemr; | ||
| 317 | u8 res2[0x200 - 0x091]; | ||
| 318 | } __attribute__ ((packed)); | ||
| 319 | |||
| 320 | struct ucc { | ||
| 321 | union { | ||
| 322 | struct ucc_slow slow; | ||
| 323 | struct ucc_fast fast; | ||
| 324 | struct ucc_common common; | ||
| 325 | }; | ||
| 326 | } __attribute__ ((packed)); | ||
| 327 | |||
| 328 | /* MultiPHY UTOPIA POS Controllers (UPC) */ | ||
| 329 | struct upc { | ||
| 330 | __be32 upgcr; /* UTOPIA/POS general configuration register */ | ||
| 331 | __be32 uplpa; /* UTOPIA/POS last PHY address */ | ||
| 332 | __be32 uphec; /* ATM HEC register */ | ||
| 333 | __be32 upuc; /* UTOPIA/POS UCC configuration */ | ||
| 334 | __be32 updc1; /* UTOPIA/POS device 1 configuration */ | ||
| 335 | __be32 updc2; /* UTOPIA/POS device 2 configuration */ | ||
| 336 | __be32 updc3; /* UTOPIA/POS device 3 configuration */ | ||
| 337 | __be32 updc4; /* UTOPIA/POS device 4 configuration */ | ||
| 338 | __be32 upstpa; /* UTOPIA/POS STPA threshold */ | ||
| 339 | u8 res0[0xC]; | ||
| 340 | __be32 updrs1_h; /* UTOPIA/POS device 1 rate select */ | ||
| 341 | __be32 updrs1_l; /* UTOPIA/POS device 1 rate select */ | ||
| 342 | __be32 updrs2_h; /* UTOPIA/POS device 2 rate select */ | ||
| 343 | __be32 updrs2_l; /* UTOPIA/POS device 2 rate select */ | ||
| 344 | __be32 updrs3_h; /* UTOPIA/POS device 3 rate select */ | ||
| 345 | __be32 updrs3_l; /* UTOPIA/POS device 3 rate select */ | ||
| 346 | __be32 updrs4_h; /* UTOPIA/POS device 4 rate select */ | ||
| 347 | __be32 updrs4_l; /* UTOPIA/POS device 4 rate select */ | ||
| 348 | __be32 updrp1; /* UTOPIA/POS device 1 receive priority low */ | ||
| 349 | __be32 updrp2; /* UTOPIA/POS device 2 receive priority low */ | ||
| 350 | __be32 updrp3; /* UTOPIA/POS device 3 receive priority low */ | ||
| 351 | __be32 updrp4; /* UTOPIA/POS device 4 receive priority low */ | ||
| 352 | __be32 upde1; /* UTOPIA/POS device 1 event */ | ||
| 353 | __be32 upde2; /* UTOPIA/POS device 2 event */ | ||
| 354 | __be32 upde3; /* UTOPIA/POS device 3 event */ | ||
| 355 | __be32 upde4; /* UTOPIA/POS device 4 event */ | ||
| 356 | __be16 uprp1; | ||
| 357 | __be16 uprp2; | ||
| 358 | __be16 uprp3; | ||
| 359 | __be16 uprp4; | ||
| 360 | u8 res1[0x8]; | ||
| 361 | __be16 uptirr1_0; /* Device 1 transmit internal rate 0 */ | ||
| 362 | __be16 uptirr1_1; /* Device 1 transmit internal rate 1 */ | ||
| 363 | __be16 uptirr1_2; /* Device 1 transmit internal rate 2 */ | ||
| 364 | __be16 uptirr1_3; /* Device 1 transmit internal rate 3 */ | ||
| 365 | __be16 uptirr2_0; /* Device 2 transmit internal rate 0 */ | ||
| 366 | __be16 uptirr2_1; /* Device 2 transmit internal rate 1 */ | ||
| 367 | __be16 uptirr2_2; /* Device 2 transmit internal rate 2 */ | ||
| 368 | __be16 uptirr2_3; /* Device 2 transmit internal rate 3 */ | ||
| 369 | __be16 uptirr3_0; /* Device 3 transmit internal rate 0 */ | ||
| 370 | __be16 uptirr3_1; /* Device 3 transmit internal rate 1 */ | ||
| 371 | __be16 uptirr3_2; /* Device 3 transmit internal rate 2 */ | ||
| 372 | __be16 uptirr3_3; /* Device 3 transmit internal rate 3 */ | ||
| 373 | __be16 uptirr4_0; /* Device 4 transmit internal rate 0 */ | ||
| 374 | __be16 uptirr4_1; /* Device 4 transmit internal rate 1 */ | ||
| 375 | __be16 uptirr4_2; /* Device 4 transmit internal rate 2 */ | ||
| 376 | __be16 uptirr4_3; /* Device 4 transmit internal rate 3 */ | ||
| 377 | __be32 uper1; /* Device 1 port enable register */ | ||
| 378 | __be32 uper2; /* Device 2 port enable register */ | ||
| 379 | __be32 uper3; /* Device 3 port enable register */ | ||
| 380 | __be32 uper4; /* Device 4 port enable register */ | ||
| 381 | u8 res2[0x150]; | ||
| 382 | } __attribute__ ((packed)); | ||
| 383 | |||
| 384 | /* SDMA */ | ||
| 385 | struct sdma { | ||
| 386 | __be32 sdsr; /* Serial DMA status register */ | ||
| 387 | __be32 sdmr; /* Serial DMA mode register */ | ||
| 388 | __be32 sdtr1; /* SDMA system bus threshold register */ | ||
| 389 | __be32 sdtr2; /* SDMA secondary bus threshold register */ | ||
| 390 | __be32 sdhy1; /* SDMA system bus hysteresis register */ | ||
| 391 | __be32 sdhy2; /* SDMA secondary bus hysteresis register */ | ||
| 392 | __be32 sdta1; /* SDMA system bus address register */ | ||
| 393 | __be32 sdta2; /* SDMA secondary bus address register */ | ||
| 394 | __be32 sdtm1; /* SDMA system bus MSNUM register */ | ||
| 395 | __be32 sdtm2; /* SDMA secondary bus MSNUM register */ | ||
| 396 | u8 res0[0x10]; | ||
| 397 | __be32 sdaqr; /* SDMA address bus qualify register */ | ||
| 398 | __be32 sdaqmr; /* SDMA address bus qualify mask register */ | ||
| 399 | u8 res1[0x4]; | ||
| 400 | __be32 sdebcr; /* SDMA CAM entries base register */ | ||
| 401 | u8 res2[0x38]; | ||
| 402 | } __attribute__ ((packed)); | ||
| 403 | |||
| 404 | /* Debug Space */ | ||
| 405 | struct dbg { | ||
| 406 | __be32 bpdcr; /* Breakpoint debug command register */ | ||
| 407 | __be32 bpdsr; /* Breakpoint debug status register */ | ||
| 408 | __be32 bpdmr; /* Breakpoint debug mask register */ | ||
| 409 | __be32 bprmrr0; /* Breakpoint request mode risc register 0 */ | ||
| 410 | __be32 bprmrr1; /* Breakpoint request mode risc register 1 */ | ||
| 411 | u8 res0[0x8]; | ||
| 412 | __be32 bprmtr0; /* Breakpoint request mode trb register 0 */ | ||
| 413 | __be32 bprmtr1; /* Breakpoint request mode trb register 1 */ | ||
| 414 | u8 res1[0x8]; | ||
| 415 | __be32 bprmir; /* Breakpoint request mode immediate register */ | ||
| 416 | __be32 bprmsr; /* Breakpoint request mode serial register */ | ||
| 417 | __be32 bpemr; /* Breakpoint exit mode register */ | ||
| 418 | u8 res2[0x48]; | ||
| 419 | } __attribute__ ((packed)); | ||
| 420 | |||
| 421 | /* RISC Special Registers (Trap and Breakpoint) */ | ||
| 422 | struct rsp { | ||
| 423 | u8 fixme[0x100]; | ||
| 424 | } __attribute__ ((packed)); | ||
| 425 | |||
| 426 | struct qe_immap { | ||
| 427 | struct qe_iram iram; /* I-RAM */ | ||
| 428 | struct qe_ic_regs ic; /* Interrupt Controller */ | ||
| 429 | struct cp_qe cp; /* Communications Processor */ | ||
| 430 | struct qe_mux qmx; /* QE Multiplexer */ | ||
| 431 | struct qe_timers qet; /* QE Timers */ | ||
| 432 | struct spi spi[0x2]; /* spi */ | ||
| 433 | struct mcc mcc; /* mcc */ | ||
| 434 | struct qe_brg brg; /* brg */ | ||
| 435 | struct usb_ctlr usb; /* USB */ | ||
| 436 | struct si1 si1; /* SI */ | ||
| 437 | u8 res11[0x800]; | ||
| 438 | struct sir sir; /* SI Routing Tables */ | ||
| 439 | struct ucc ucc1; /* ucc1 */ | ||
| 440 | struct ucc ucc3; /* ucc3 */ | ||
| 441 | struct ucc ucc5; /* ucc5 */ | ||
| 442 | struct ucc ucc7; /* ucc7 */ | ||
| 443 | u8 res12[0x600]; | ||
| 444 | struct upc upc1; /* MultiPHY UTOPIA POS Ctrlr 1*/ | ||
| 445 | struct ucc ucc2; /* ucc2 */ | ||
| 446 | struct ucc ucc4; /* ucc4 */ | ||
| 447 | struct ucc ucc6; /* ucc6 */ | ||
| 448 | struct ucc ucc8; /* ucc8 */ | ||
| 449 | u8 res13[0x600]; | ||
| 450 | struct upc upc2; /* MultiPHY UTOPIA POS Ctrlr 2*/ | ||
| 451 | struct sdma sdma; /* SDMA */ | ||
| 452 | struct dbg dbg; /* Debug Space */ | ||
| 453 | struct rsp rsp[0x2]; /* RISC Special Registers | ||
| 454 | (Trap and Breakpoint) */ | ||
| 455 | u8 res14[0x300]; | ||
| 456 | u8 res15[0x3A00]; | ||
| 457 | u8 res16[0x8000]; /* 0x108000 - 0x110000 */ | ||
| 458 | u8 muram[0xC000]; /* 0x110000 - 0x11C000 | ||
| 459 | Multi-user RAM */ | ||
| 460 | u8 res17[0x24000]; /* 0x11C000 - 0x140000 */ | ||
| 461 | u8 res18[0xC0000]; /* 0x140000 - 0x200000 */ | ||
| 462 | } __attribute__ ((packed)); | ||
| 463 | |||
| 464 | extern struct qe_immap *qe_immr; | ||
| 465 | extern phys_addr_t get_qe_base(void); | ||
| 466 | |||
| 467 | static inline unsigned long immrbar_virt_to_phys(volatile void * address) | ||
| 468 | { | ||
| 469 | if ( ((u32)address >= (u32)qe_immr) && | ||
| 470 | ((u32)address < ((u32)qe_immr + QE_IMMAP_SIZE)) ) | ||
| 471 | return (unsigned long)(address - (u32)qe_immr + | ||
| 472 | (u32)get_qe_base()); | ||
| 473 | return (unsigned long)virt_to_phys(address); | ||
| 474 | } | ||
| 475 | |||
| 476 | #endif /* __KERNEL__ */ | ||
| 477 | #endif /* _ASM_POWERPC_IMMAP_QE_H */ | ||
diff --git a/include/asm-powerpc/io.h b/include/asm-powerpc/io.h index cbbd8c648df1..3baff8b0fd5a 100644 --- a/include/asm-powerpc/io.h +++ b/include/asm-powerpc/io.h | |||
| @@ -404,32 +404,6 @@ static inline void __out_be64(volatile unsigned long __iomem *addr, unsigned lon | |||
| 404 | 404 | ||
| 405 | #include <asm/eeh.h> | 405 | #include <asm/eeh.h> |
| 406 | 406 | ||
| 407 | /** | ||
| 408 | * check_signature - find BIOS signatures | ||
| 409 | * @io_addr: mmio address to check | ||
| 410 | * @signature: signature block | ||
| 411 | * @length: length of signature | ||
| 412 | * | ||
| 413 | * Perform a signature comparison with the mmio address io_addr. This | ||
| 414 | * address should have been obtained by ioremap. | ||
| 415 | * Returns 1 on a match. | ||
| 416 | */ | ||
| 417 | static inline int check_signature(const volatile void __iomem * io_addr, | ||
| 418 | const unsigned char *signature, int length) | ||
| 419 | { | ||
| 420 | int retval = 0; | ||
| 421 | do { | ||
| 422 | if (readb(io_addr) != *signature) | ||
| 423 | goto out; | ||
| 424 | io_addr++; | ||
| 425 | signature++; | ||
| 426 | length--; | ||
| 427 | } while (length); | ||
| 428 | retval = 1; | ||
| 429 | out: | ||
| 430 | return retval; | ||
| 431 | } | ||
| 432 | |||
| 433 | /* Nothing to do */ | 407 | /* Nothing to do */ |
| 434 | 408 | ||
| 435 | #define dma_cache_inv(_start,_size) do { } while (0) | 409 | #define dma_cache_inv(_start,_size) do { } while (0) |
diff --git a/include/asm-powerpc/ipic.h b/include/asm-powerpc/ipic.h index 1ce09a35906e..9fbb03415860 100644 --- a/include/asm-powerpc/ipic.h +++ b/include/asm-powerpc/ipic.h | |||
| @@ -79,12 +79,12 @@ extern void ipic_clear_mcp_status(u32 mask); | |||
| 79 | 79 | ||
| 80 | #ifdef CONFIG_PPC_MERGE | 80 | #ifdef CONFIG_PPC_MERGE |
| 81 | extern void ipic_init(struct device_node *node, unsigned int flags); | 81 | extern void ipic_init(struct device_node *node, unsigned int flags); |
| 82 | extern unsigned int ipic_get_irq(struct pt_regs *regs); | 82 | extern unsigned int ipic_get_irq(void); |
| 83 | #else | 83 | #else |
| 84 | extern void ipic_init(phys_addr_t phys_addr, unsigned int flags, | 84 | extern void ipic_init(phys_addr_t phys_addr, unsigned int flags, |
| 85 | unsigned int irq_offset, | 85 | unsigned int irq_offset, |
| 86 | unsigned char *senses, unsigned int senses_count); | 86 | unsigned char *senses, unsigned int senses_count); |
| 87 | extern int ipic_get_irq(struct pt_regs *regs); | 87 | extern int ipic_get_irq(void); |
| 88 | #endif | 88 | #endif |
| 89 | 89 | ||
| 90 | #endif /* __ASM_IPIC_H__ */ | 90 | #endif /* __ASM_IPIC_H__ */ |
diff --git a/include/asm-powerpc/irq.h b/include/asm-powerpc/irq.h index 4da41efb1319..f960f5346f40 100644 --- a/include/asm-powerpc/irq.h +++ b/include/asm-powerpc/irq.h | |||
| @@ -9,7 +9,6 @@ | |||
| 9 | * 2 of the License, or (at your option) any later version. | 9 | * 2 of the License, or (at your option) any later version. |
| 10 | */ | 10 | */ |
| 11 | 11 | ||
| 12 | #include <linux/config.h> | ||
| 13 | #include <linux/threads.h> | 12 | #include <linux/threads.h> |
| 14 | #include <linux/list.h> | 13 | #include <linux/list.h> |
| 15 | #include <linux/radix-tree.h> | 14 | #include <linux/radix-tree.h> |
| @@ -826,7 +825,7 @@ extern struct thread_info *softirq_ctx[NR_CPUS]; | |||
| 826 | 825 | ||
| 827 | extern void irq_ctx_init(void); | 826 | extern void irq_ctx_init(void); |
| 828 | extern void call_do_softirq(struct thread_info *tp); | 827 | extern void call_do_softirq(struct thread_info *tp); |
| 829 | extern int call_handle_irq(int irq, void *p1, void *p2, | 828 | extern int call_handle_irq(int irq, void *p1, |
| 830 | struct thread_info *tp, void *func); | 829 | struct thread_info *tp, void *func); |
| 831 | #else | 830 | #else |
| 832 | #define irq_ctx_init() | 831 | #define irq_ctx_init() |
diff --git a/include/asm-powerpc/irq_regs.h b/include/asm-powerpc/irq_regs.h new file mode 100644 index 000000000000..ba94b51a0a70 --- /dev/null +++ b/include/asm-powerpc/irq_regs.h | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | #include <asm-generic/irq_regs.h> | ||
| 2 | |||
diff --git a/include/asm-powerpc/iseries/hv_lp_event.h b/include/asm-powerpc/iseries/hv_lp_event.h index 4065a4de4935..6ce2ce1e2690 100644 --- a/include/asm-powerpc/iseries/hv_lp_event.h +++ b/include/asm-powerpc/iseries/hv_lp_event.h | |||
| @@ -50,7 +50,7 @@ struct HvLpEvent { | |||
| 50 | u64 xCorrelationToken; /* Unique value for source/type x10-x17 */ | 50 | u64 xCorrelationToken; /* Unique value for source/type x10-x17 */ |
| 51 | }; | 51 | }; |
| 52 | 52 | ||
| 53 | typedef void (*LpEventHandler)(struct HvLpEvent *, struct pt_regs *); | 53 | typedef void (*LpEventHandler)(struct HvLpEvent *); |
| 54 | 54 | ||
| 55 | /* Register a handler for an event type - returns 0 on success */ | 55 | /* Register a handler for an event type - returns 0 on success */ |
| 56 | extern int HvLpEvent_registerHandler(HvLpEvent_Type eventType, | 56 | extern int HvLpEvent_registerHandler(HvLpEvent_Type eventType, |
diff --git a/include/asm-powerpc/iseries/it_lp_queue.h b/include/asm-powerpc/iseries/it_lp_queue.h index 3f6814769295..428278838821 100644 --- a/include/asm-powerpc/iseries/it_lp_queue.h +++ b/include/asm-powerpc/iseries/it_lp_queue.h | |||
| @@ -72,7 +72,7 @@ struct hvlpevent_queue { | |||
| 72 | extern struct hvlpevent_queue hvlpevent_queue; | 72 | extern struct hvlpevent_queue hvlpevent_queue; |
| 73 | 73 | ||
| 74 | extern int hvlpevent_is_pending(void); | 74 | extern int hvlpevent_is_pending(void); |
| 75 | extern void process_hvlpevents(struct pt_regs *); | 75 | extern void process_hvlpevents(void); |
| 76 | extern void setup_hvlpevent_queue(void); | 76 | extern void setup_hvlpevent_queue(void); |
| 77 | 77 | ||
| 78 | #endif /* _ASM_POWERPC_ISERIES_IT_LP_QUEUE_H */ | 78 | #endif /* _ASM_POWERPC_ISERIES_IT_LP_QUEUE_H */ |
diff --git a/include/asm-powerpc/machdep.h b/include/asm-powerpc/machdep.h index c17c13742401..dac90dc341cb 100644 --- a/include/asm-powerpc/machdep.h +++ b/include/asm-powerpc/machdep.h | |||
| @@ -97,7 +97,7 @@ struct machdep_calls { | |||
| 97 | void (*show_percpuinfo)(struct seq_file *m, int i); | 97 | void (*show_percpuinfo)(struct seq_file *m, int i); |
| 98 | 98 | ||
| 99 | void (*init_IRQ)(void); | 99 | void (*init_IRQ)(void); |
| 100 | unsigned int (*get_irq)(struct pt_regs *); | 100 | unsigned int (*get_irq)(void); |
| 101 | #ifdef CONFIG_KEXEC | 101 | #ifdef CONFIG_KEXEC |
| 102 | void (*kexec_cpu_down)(int crash_shutdown, int secondary); | 102 | void (*kexec_cpu_down)(int crash_shutdown, int secondary); |
| 103 | #endif | 103 | #endif |
diff --git a/include/asm-powerpc/mpic.h b/include/asm-powerpc/mpic.h index a9f9604b9eff..ef0a5458d2b2 100644 --- a/include/asm-powerpc/mpic.h +++ b/include/asm-powerpc/mpic.h | |||
| @@ -409,9 +409,9 @@ extern void mpic_send_ipi(unsigned int ipi_no, unsigned int cpu_mask); | |||
| 409 | void smp_mpic_message_pass(int target, int msg); | 409 | void smp_mpic_message_pass(int target, int msg); |
| 410 | 410 | ||
| 411 | /* Fetch interrupt from a given mpic */ | 411 | /* Fetch interrupt from a given mpic */ |
| 412 | extern unsigned int mpic_get_one_irq(struct mpic *mpic, struct pt_regs *regs); | 412 | extern unsigned int mpic_get_one_irq(struct mpic *mpic); |
| 413 | /* This one gets to the primary mpic */ | 413 | /* This one gets to the primary mpic */ |
| 414 | extern unsigned int mpic_get_irq(struct pt_regs *regs); | 414 | extern unsigned int mpic_get_irq(void); |
| 415 | 415 | ||
| 416 | /* Set the EPIC clock ratio */ | 416 | /* Set the EPIC clock ratio */ |
| 417 | void mpic_set_clk_ratio(struct mpic *mpic, u32 clock_ratio); | 417 | void mpic_set_clk_ratio(struct mpic *mpic, u32 clock_ratio); |
diff --git a/include/asm-powerpc/pci-bridge.h b/include/asm-powerpc/pci-bridge.h index 4f55573762bb..86ee46b09b8a 100644 --- a/include/asm-powerpc/pci-bridge.h +++ b/include/asm-powerpc/pci-bridge.h | |||
| @@ -6,7 +6,6 @@ | |||
| 6 | #include <asm-ppc/pci-bridge.h> | 6 | #include <asm-ppc/pci-bridge.h> |
| 7 | #else | 7 | #else |
| 8 | 8 | ||
| 9 | #include <linux/config.h> | ||
| 10 | #include <linux/pci.h> | 9 | #include <linux/pci.h> |
| 11 | #include <linux/list.h> | 10 | #include <linux/list.h> |
| 12 | 11 | ||
diff --git a/include/asm-powerpc/qe.h b/include/asm-powerpc/qe.h new file mode 100644 index 000000000000..a62168ec535f --- /dev/null +++ b/include/asm-powerpc/qe.h | |||
| @@ -0,0 +1,457 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2006 Freescale Semicondutor, Inc. All rights reserved. | ||
| 3 | * | ||
| 4 | * Authors: Shlomi Gridish <gridish@freescale.com> | ||
| 5 | * Li Yang <leoli@freescale.com> | ||
| 6 | * | ||
| 7 | * Description: | ||
| 8 | * QUICC Engine (QE) external definitions and structure. | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify it | ||
| 11 | * under the terms of the GNU General Public License as published by the | ||
| 12 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 13 | * option) any later version. | ||
| 14 | */ | ||
| 15 | #ifndef _ASM_POWERPC_QE_H | ||
| 16 | #define _ASM_POWERPC_QE_H | ||
| 17 | #ifdef __KERNEL__ | ||
| 18 | |||
| 19 | #include <asm/immap_qe.h> | ||
| 20 | |||
| 21 | #define QE_NUM_OF_SNUM 28 | ||
| 22 | #define QE_NUM_OF_BRGS 16 | ||
| 23 | #define QE_NUM_OF_PORTS 1024 | ||
| 24 | |||
| 25 | /* Memory partitions | ||
| 26 | */ | ||
| 27 | #define MEM_PART_SYSTEM 0 | ||
| 28 | #define MEM_PART_SECONDARY 1 | ||
| 29 | #define MEM_PART_MURAM 2 | ||
| 30 | |||
| 31 | /* Export QE common operations */ | ||
| 32 | extern void qe_reset(void); | ||
| 33 | extern int par_io_init(struct device_node *np); | ||
| 34 | extern int par_io_of_config(struct device_node *np); | ||
| 35 | |||
| 36 | /* QE internal API */ | ||
| 37 | int qe_issue_cmd(u32 cmd, u32 device, u8 mcn_protocol, u32 cmd_input); | ||
| 38 | void qe_setbrg(u32 brg, u32 rate); | ||
| 39 | int qe_get_snum(void); | ||
| 40 | void qe_put_snum(u8 snum); | ||
| 41 | u32 qe_muram_alloc(u32 size, u32 align); | ||
| 42 | int qe_muram_free(u32 offset); | ||
| 43 | u32 qe_muram_alloc_fixed(u32 offset, u32 size); | ||
| 44 | void qe_muram_dump(void); | ||
| 45 | void *qe_muram_addr(u32 offset); | ||
| 46 | |||
| 47 | /* Buffer descriptors */ | ||
| 48 | struct qe_bd { | ||
| 49 | u16 status; | ||
| 50 | u16 length; | ||
| 51 | u32 buf; | ||
| 52 | } __attribute__ ((packed)); | ||
| 53 | |||
| 54 | #define BD_STATUS_MASK 0xffff0000 | ||
| 55 | #define BD_LENGTH_MASK 0x0000ffff | ||
| 56 | |||
| 57 | /* Alignment */ | ||
| 58 | #define QE_INTR_TABLE_ALIGN 16 /* ??? */ | ||
| 59 | #define QE_ALIGNMENT_OF_BD 8 | ||
| 60 | #define QE_ALIGNMENT_OF_PRAM 64 | ||
| 61 | |||
| 62 | /* RISC allocation */ | ||
| 63 | enum qe_risc_allocation { | ||
| 64 | QE_RISC_ALLOCATION_RISC1 = 1, /* RISC 1 */ | ||
| 65 | QE_RISC_ALLOCATION_RISC2 = 2, /* RISC 2 */ | ||
| 66 | QE_RISC_ALLOCATION_RISC1_AND_RISC2 = 3 /* Dynamically choose | ||
| 67 | RISC 1 or RISC 2 */ | ||
| 68 | }; | ||
| 69 | |||
| 70 | /* QE extended filtering Table Lookup Key Size */ | ||
| 71 | enum qe_fltr_tbl_lookup_key_size { | ||
| 72 | QE_FLTR_TABLE_LOOKUP_KEY_SIZE_8_BYTES | ||
| 73 | = 0x3f, /* LookupKey parsed by the Generate LookupKey | ||
| 74 | CMD is truncated to 8 bytes */ | ||
| 75 | QE_FLTR_TABLE_LOOKUP_KEY_SIZE_16_BYTES | ||
| 76 | = 0x5f, /* LookupKey parsed by the Generate LookupKey | ||
| 77 | CMD is truncated to 16 bytes */ | ||
| 78 | }; | ||
| 79 | |||
| 80 | /* QE FLTR extended filtering Largest External Table Lookup Key Size */ | ||
| 81 | enum qe_fltr_largest_external_tbl_lookup_key_size { | ||
| 82 | QE_FLTR_LARGEST_EXTERNAL_TABLE_LOOKUP_KEY_SIZE_NONE | ||
| 83 | = 0x0,/* not used */ | ||
| 84 | QE_FLTR_LARGEST_EXTERNAL_TABLE_LOOKUP_KEY_SIZE_8_BYTES | ||
| 85 | = QE_FLTR_TABLE_LOOKUP_KEY_SIZE_8_BYTES, /* 8 bytes */ | ||
| 86 | QE_FLTR_LARGEST_EXTERNAL_TABLE_LOOKUP_KEY_SIZE_16_BYTES | ||
| 87 | = QE_FLTR_TABLE_LOOKUP_KEY_SIZE_16_BYTES, /* 16 bytes */ | ||
| 88 | }; | ||
| 89 | |||
| 90 | /* structure representing QE parameter RAM */ | ||
| 91 | struct qe_timer_tables { | ||
| 92 | u16 tm_base; /* QE timer table base adr */ | ||
| 93 | u16 tm_ptr; /* QE timer table pointer */ | ||
| 94 | u16 r_tmr; /* QE timer mode register */ | ||
| 95 | u16 r_tmv; /* QE timer valid register */ | ||
| 96 | u32 tm_cmd; /* QE timer cmd register */ | ||
| 97 | u32 tm_cnt; /* QE timer internal cnt */ | ||
| 98 | } __attribute__ ((packed)); | ||
| 99 | |||
| 100 | #define QE_FLTR_TAD_SIZE 8 | ||
| 101 | |||
| 102 | /* QE extended filtering Termination Action Descriptor (TAD) */ | ||
| 103 | struct qe_fltr_tad { | ||
| 104 | u8 serialized[QE_FLTR_TAD_SIZE]; | ||
| 105 | } __attribute__ ((packed)); | ||
| 106 | |||
| 107 | /* Communication Direction */ | ||
| 108 | enum comm_dir { | ||
| 109 | COMM_DIR_NONE = 0, | ||
| 110 | COMM_DIR_RX = 1, | ||
| 111 | COMM_DIR_TX = 2, | ||
| 112 | COMM_DIR_RX_AND_TX = 3 | ||
| 113 | }; | ||
| 114 | |||
| 115 | /* Clocks and BRGs */ | ||
| 116 | enum qe_clock { | ||
| 117 | QE_CLK_NONE = 0, | ||
| 118 | QE_BRG1, /* Baud Rate Generator 1 */ | ||
| 119 | QE_BRG2, /* Baud Rate Generator 2 */ | ||
| 120 | QE_BRG3, /* Baud Rate Generator 3 */ | ||
| 121 | QE_BRG4, /* Baud Rate Generator 4 */ | ||
| 122 | QE_BRG5, /* Baud Rate Generator 5 */ | ||
| 123 | QE_BRG6, /* Baud Rate Generator 6 */ | ||
| 124 | QE_BRG7, /* Baud Rate Generator 7 */ | ||
| 125 | QE_BRG8, /* Baud Rate Generator 8 */ | ||
| 126 | QE_BRG9, /* Baud Rate Generator 9 */ | ||
| 127 | QE_BRG10, /* Baud Rate Generator 10 */ | ||
| 128 | QE_BRG11, /* Baud Rate Generator 11 */ | ||
| 129 | QE_BRG12, /* Baud Rate Generator 12 */ | ||
| 130 | QE_BRG13, /* Baud Rate Generator 13 */ | ||
| 131 | QE_BRG14, /* Baud Rate Generator 14 */ | ||
| 132 | QE_BRG15, /* Baud Rate Generator 15 */ | ||
| 133 | QE_BRG16, /* Baud Rate Generator 16 */ | ||
| 134 | QE_CLK1, /* Clock 1 */ | ||
| 135 | QE_CLK2, /* Clock 2 */ | ||
| 136 | QE_CLK3, /* Clock 3 */ | ||
| 137 | QE_CLK4, /* Clock 4 */ | ||
| 138 | QE_CLK5, /* Clock 5 */ | ||
| 139 | QE_CLK6, /* Clock 6 */ | ||
| 140 | QE_CLK7, /* Clock 7 */ | ||
| 141 | QE_CLK8, /* Clock 8 */ | ||
| 142 | QE_CLK9, /* Clock 9 */ | ||
| 143 | QE_CLK10, /* Clock 10 */ | ||
| 144 | QE_CLK11, /* Clock 11 */ | ||
| 145 | QE_CLK12, /* Clock 12 */ | ||
| 146 | QE_CLK13, /* Clock 13 */ | ||
| 147 | QE_CLK14, /* Clock 14 */ | ||
| 148 | QE_CLK15, /* Clock 15 */ | ||
| 149 | QE_CLK16, /* Clock 16 */ | ||
| 150 | QE_CLK17, /* Clock 17 */ | ||
| 151 | QE_CLK18, /* Clock 18 */ | ||
| 152 | QE_CLK19, /* Clock 19 */ | ||
| 153 | QE_CLK20, /* Clock 20 */ | ||
| 154 | QE_CLK21, /* Clock 21 */ | ||
| 155 | QE_CLK22, /* Clock 22 */ | ||
| 156 | QE_CLK23, /* Clock 23 */ | ||
| 157 | QE_CLK24, /* Clock 24 */ | ||
| 158 | QE_CLK_DUMMY, | ||
| 159 | }; | ||
| 160 | |||
| 161 | /* QE CMXUCR Registers. | ||
| 162 | * There are two UCCs represented in each of the four CMXUCR registers. | ||
| 163 | * These values are for the UCC in the LSBs | ||
| 164 | */ | ||
| 165 | #define QE_CMXUCR_MII_ENET_MNG 0x00007000 | ||
| 166 | #define QE_CMXUCR_MII_ENET_MNG_SHIFT 12 | ||
| 167 | #define QE_CMXUCR_GRANT 0x00008000 | ||
| 168 | #define QE_CMXUCR_TSA 0x00004000 | ||
| 169 | #define QE_CMXUCR_BKPT 0x00000100 | ||
| 170 | #define QE_CMXUCR_TX_CLK_SRC_MASK 0x0000000F | ||
| 171 | |||
| 172 | /* QE CMXGCR Registers. | ||
| 173 | */ | ||
| 174 | #define QE_CMXGCR_MII_ENET_MNG 0x00007000 | ||
| 175 | #define QE_CMXGCR_MII_ENET_MNG_SHIFT 12 | ||
| 176 | #define QE_CMXGCR_USBCS 0x0000000f | ||
| 177 | |||
| 178 | /* QE CECR Commands. | ||
| 179 | */ | ||
| 180 | #define QE_CR_FLG 0x00010000 | ||
| 181 | #define QE_RESET 0x80000000 | ||
| 182 | #define QE_INIT_TX_RX 0x00000000 | ||
| 183 | #define QE_INIT_RX 0x00000001 | ||
| 184 | #define QE_INIT_TX 0x00000002 | ||
| 185 | #define QE_ENTER_HUNT_MODE 0x00000003 | ||
| 186 | #define QE_STOP_TX 0x00000004 | ||
| 187 | #define QE_GRACEFUL_STOP_TX 0x00000005 | ||
| 188 | #define QE_RESTART_TX 0x00000006 | ||
| 189 | #define QE_CLOSE_RX_BD 0x00000007 | ||
| 190 | #define QE_SWITCH_COMMAND 0x00000007 | ||
| 191 | #define QE_SET_GROUP_ADDRESS 0x00000008 | ||
| 192 | #define QE_START_IDMA 0x00000009 | ||
| 193 | #define QE_MCC_STOP_RX 0x00000009 | ||
| 194 | #define QE_ATM_TRANSMIT 0x0000000a | ||
| 195 | #define QE_HPAC_CLEAR_ALL 0x0000000b | ||
| 196 | #define QE_GRACEFUL_STOP_RX 0x0000001a | ||
| 197 | #define QE_RESTART_RX 0x0000001b | ||
| 198 | #define QE_HPAC_SET_PRIORITY 0x0000010b | ||
| 199 | #define QE_HPAC_STOP_TX 0x0000020b | ||
| 200 | #define QE_HPAC_STOP_RX 0x0000030b | ||
| 201 | #define QE_HPAC_GRACEFUL_STOP_TX 0x0000040b | ||
| 202 | #define QE_HPAC_GRACEFUL_STOP_RX 0x0000050b | ||
| 203 | #define QE_HPAC_START_TX 0x0000060b | ||
| 204 | #define QE_HPAC_START_RX 0x0000070b | ||
| 205 | #define QE_USB_STOP_TX 0x0000000a | ||
| 206 | #define QE_USB_RESTART_TX 0x0000000b | ||
| 207 | #define QE_QMC_STOP_TX 0x0000000c | ||
| 208 | #define QE_QMC_STOP_RX 0x0000000d | ||
| 209 | #define QE_SS7_SU_FIL_RESET 0x0000000e | ||
| 210 | /* jonathbr added from here down for 83xx */ | ||
| 211 | #define QE_RESET_BCS 0x0000000a | ||
| 212 | #define QE_MCC_INIT_TX_RX_16 0x00000003 | ||
| 213 | #define QE_MCC_STOP_TX 0x00000004 | ||
| 214 | #define QE_MCC_INIT_TX_1 0x00000005 | ||
| 215 | #define QE_MCC_INIT_RX_1 0x00000006 | ||
| 216 | #define QE_MCC_RESET 0x00000007 | ||
| 217 | #define QE_SET_TIMER 0x00000008 | ||
| 218 | #define QE_RANDOM_NUMBER 0x0000000c | ||
| 219 | #define QE_ATM_MULTI_THREAD_INIT 0x00000011 | ||
| 220 | #define QE_ASSIGN_PAGE 0x00000012 | ||
| 221 | #define QE_ADD_REMOVE_HASH_ENTRY 0x00000013 | ||
| 222 | #define QE_START_FLOW_CONTROL 0x00000014 | ||
| 223 | #define QE_STOP_FLOW_CONTROL 0x00000015 | ||
| 224 | #define QE_ASSIGN_PAGE_TO_DEVICE 0x00000016 | ||
| 225 | |||
| 226 | #define QE_ASSIGN_RISC 0x00000010 | ||
| 227 | #define QE_CR_MCN_NORMAL_SHIFT 6 | ||
| 228 | #define QE_CR_MCN_USB_SHIFT 4 | ||
| 229 | #define QE_CR_MCN_RISC_ASSIGN_SHIFT 8 | ||
| 230 | #define QE_CR_SNUM_SHIFT 17 | ||
| 231 | |||
| 232 | /* QE CECR Sub Block - sub block of QE command. | ||
| 233 | */ | ||
| 234 | #define QE_CR_SUBBLOCK_INVALID 0x00000000 | ||
| 235 | #define QE_CR_SUBBLOCK_USB 0x03200000 | ||
| 236 | #define QE_CR_SUBBLOCK_UCCFAST1 0x02000000 | ||
| 237 | #define QE_CR_SUBBLOCK_UCCFAST2 0x02200000 | ||
| 238 | #define QE_CR_SUBBLOCK_UCCFAST3 0x02400000 | ||
| 239 | #define QE_CR_SUBBLOCK_UCCFAST4 0x02600000 | ||
| 240 | #define QE_CR_SUBBLOCK_UCCFAST5 0x02800000 | ||
| 241 | #define QE_CR_SUBBLOCK_UCCFAST6 0x02a00000 | ||
| 242 | #define QE_CR_SUBBLOCK_UCCFAST7 0x02c00000 | ||
| 243 | #define QE_CR_SUBBLOCK_UCCFAST8 0x02e00000 | ||
| 244 | #define QE_CR_SUBBLOCK_UCCSLOW1 0x00000000 | ||
| 245 | #define QE_CR_SUBBLOCK_UCCSLOW2 0x00200000 | ||
| 246 | #define QE_CR_SUBBLOCK_UCCSLOW3 0x00400000 | ||
| 247 | #define QE_CR_SUBBLOCK_UCCSLOW4 0x00600000 | ||
| 248 | #define QE_CR_SUBBLOCK_UCCSLOW5 0x00800000 | ||
| 249 | #define QE_CR_SUBBLOCK_UCCSLOW6 0x00a00000 | ||
| 250 | #define QE_CR_SUBBLOCK_UCCSLOW7 0x00c00000 | ||
| 251 | #define QE_CR_SUBBLOCK_UCCSLOW8 0x00e00000 | ||
| 252 | #define QE_CR_SUBBLOCK_MCC1 0x03800000 | ||
| 253 | #define QE_CR_SUBBLOCK_MCC2 0x03a00000 | ||
| 254 | #define QE_CR_SUBBLOCK_MCC3 0x03000000 | ||
| 255 | #define QE_CR_SUBBLOCK_IDMA1 0x02800000 | ||
| 256 | #define QE_CR_SUBBLOCK_IDMA2 0x02a00000 | ||
| 257 | #define QE_CR_SUBBLOCK_IDMA3 0x02c00000 | ||
| 258 | #define QE_CR_SUBBLOCK_IDMA4 0x02e00000 | ||
| 259 | #define QE_CR_SUBBLOCK_HPAC 0x01e00000 | ||
| 260 | #define QE_CR_SUBBLOCK_SPI1 0x01400000 | ||
| 261 | #define QE_CR_SUBBLOCK_SPI2 0x01600000 | ||
| 262 | #define QE_CR_SUBBLOCK_RAND 0x01c00000 | ||
| 263 | #define QE_CR_SUBBLOCK_TIMER 0x01e00000 | ||
| 264 | #define QE_CR_SUBBLOCK_GENERAL 0x03c00000 | ||
| 265 | |||
| 266 | /* QE CECR Protocol - For non-MCC, specifies mode for QE CECR command */ | ||
| 267 | #define QE_CR_PROTOCOL_UNSPECIFIED 0x00 /* For all other protocols */ | ||
| 268 | #define QE_CR_PROTOCOL_HDLC_TRANSPARENT 0x00 | ||
| 269 | #define QE_CR_PROTOCOL_ATM_POS 0x0A | ||
| 270 | #define QE_CR_PROTOCOL_ETHERNET 0x0C | ||
| 271 | #define QE_CR_PROTOCOL_L2_SWITCH 0x0D | ||
| 272 | |||
| 273 | /* BMR byte order */ | ||
| 274 | #define QE_BMR_BYTE_ORDER_BO_PPC 0x08 /* powerpc little endian */ | ||
| 275 | #define QE_BMR_BYTE_ORDER_BO_MOT 0x10 /* motorola big endian */ | ||
| 276 | #define QE_BMR_BYTE_ORDER_BO_MAX 0x18 | ||
| 277 | |||
| 278 | /* BRG configuration register */ | ||
| 279 | #define QE_BRGC_ENABLE 0x00010000 | ||
| 280 | #define QE_BRGC_DIVISOR_SHIFT 1 | ||
| 281 | #define QE_BRGC_DIVISOR_MAX 0xFFF | ||
| 282 | #define QE_BRGC_DIV16 1 | ||
| 283 | |||
| 284 | /* QE Timers registers */ | ||
| 285 | #define QE_GTCFR1_PCAS 0x80 | ||
| 286 | #define QE_GTCFR1_STP2 0x20 | ||
| 287 | #define QE_GTCFR1_RST2 0x10 | ||
| 288 | #define QE_GTCFR1_GM2 0x08 | ||
| 289 | #define QE_GTCFR1_GM1 0x04 | ||
| 290 | #define QE_GTCFR1_STP1 0x02 | ||
| 291 | #define QE_GTCFR1_RST1 0x01 | ||
| 292 | |||
| 293 | /* SDMA registers */ | ||
| 294 | #define QE_SDSR_BER1 0x02000000 | ||
| 295 | #define QE_SDSR_BER2 0x01000000 | ||
| 296 | |||
| 297 | #define QE_SDMR_GLB_1_MSK 0x80000000 | ||
| 298 | #define QE_SDMR_ADR_SEL 0x20000000 | ||
| 299 | #define QE_SDMR_BER1_MSK 0x02000000 | ||
| 300 | #define QE_SDMR_BER2_MSK 0x01000000 | ||
| 301 | #define QE_SDMR_EB1_MSK 0x00800000 | ||
| 302 | #define QE_SDMR_ER1_MSK 0x00080000 | ||
| 303 | #define QE_SDMR_ER2_MSK 0x00040000 | ||
| 304 | #define QE_SDMR_CEN_MASK 0x0000E000 | ||
| 305 | #define QE_SDMR_SBER_1 0x00000200 | ||
| 306 | #define QE_SDMR_SBER_2 0x00000200 | ||
| 307 | #define QE_SDMR_EB1_PR_MASK 0x000000C0 | ||
| 308 | #define QE_SDMR_ER1_PR 0x00000008 | ||
| 309 | |||
| 310 | #define QE_SDMR_CEN_SHIFT 13 | ||
| 311 | #define QE_SDMR_EB1_PR_SHIFT 6 | ||
| 312 | |||
| 313 | #define QE_SDTM_MSNUM_SHIFT 24 | ||
| 314 | |||
| 315 | #define QE_SDEBCR_BA_MASK 0x01FFFFFF | ||
| 316 | |||
| 317 | /* UPC */ | ||
| 318 | #define UPGCR_PROTOCOL 0x80000000 /* protocol ul2 or pl2 */ | ||
| 319 | #define UPGCR_TMS 0x40000000 /* Transmit master/slave mode */ | ||
| 320 | #define UPGCR_RMS 0x20000000 /* Receive master/slave mode */ | ||
| 321 | #define UPGCR_ADDR 0x10000000 /* Master MPHY Addr multiplexing */ | ||
| 322 | #define UPGCR_DIAG 0x01000000 /* Diagnostic mode */ | ||
| 323 | |||
| 324 | /* UCC */ | ||
| 325 | #define UCC_GUEMR_MODE_MASK_RX 0x02 | ||
| 326 | #define UCC_GUEMR_MODE_MASK_TX 0x01 | ||
| 327 | #define UCC_GUEMR_MODE_FAST_RX 0x02 | ||
| 328 | #define UCC_GUEMR_MODE_FAST_TX 0x01 | ||
| 329 | #define UCC_GUEMR_MODE_SLOW_RX 0x00 | ||
| 330 | #define UCC_GUEMR_MODE_SLOW_TX 0x00 | ||
| 331 | #define UCC_GUEMR_SET_RESERVED3 0x10 /* Bit 3 in the guemr is reserved but | ||
| 332 | must be set 1 */ | ||
| 333 | |||
| 334 | /* structure representing UCC SLOW parameter RAM */ | ||
| 335 | struct ucc_slow_pram { | ||
| 336 | u16 rbase; /* RX BD base address */ | ||
| 337 | u16 tbase; /* TX BD base address */ | ||
| 338 | u8 rfcr; /* Rx function code */ | ||
| 339 | u8 tfcr; /* Tx function code */ | ||
| 340 | u16 mrblr; /* Rx buffer length */ | ||
| 341 | u32 rstate; /* Rx internal state */ | ||
| 342 | u32 rptr; /* Rx internal data pointer */ | ||
| 343 | u16 rbptr; /* rb BD Pointer */ | ||
| 344 | u16 rcount; /* Rx internal byte count */ | ||
| 345 | u32 rtemp; /* Rx temp */ | ||
| 346 | u32 tstate; /* Tx internal state */ | ||
| 347 | u32 tptr; /* Tx internal data pointer */ | ||
| 348 | u16 tbptr; /* Tx BD pointer */ | ||
| 349 | u16 tcount; /* Tx byte count */ | ||
| 350 | u32 ttemp; /* Tx temp */ | ||
| 351 | u32 rcrc; /* temp receive CRC */ | ||
| 352 | u32 tcrc; /* temp transmit CRC */ | ||
| 353 | } __attribute__ ((packed)); | ||
| 354 | |||
| 355 | /* General UCC SLOW Mode Register (GUMRH & GUMRL) */ | ||
| 356 | #define UCC_SLOW_GUMR_H_CRC16 0x00004000 | ||
| 357 | #define UCC_SLOW_GUMR_H_CRC16CCITT 0x00000000 | ||
| 358 | #define UCC_SLOW_GUMR_H_CRC32CCITT 0x00008000 | ||
| 359 | #define UCC_SLOW_GUMR_H_REVD 0x00002000 | ||
| 360 | #define UCC_SLOW_GUMR_H_TRX 0x00001000 | ||
| 361 | #define UCC_SLOW_GUMR_H_TTX 0x00000800 | ||
| 362 | #define UCC_SLOW_GUMR_H_CDP 0x00000400 | ||
| 363 | #define UCC_SLOW_GUMR_H_CTSP 0x00000200 | ||
| 364 | #define UCC_SLOW_GUMR_H_CDS 0x00000100 | ||
| 365 | #define UCC_SLOW_GUMR_H_CTSS 0x00000080 | ||
| 366 | #define UCC_SLOW_GUMR_H_TFL 0x00000040 | ||
| 367 | #define UCC_SLOW_GUMR_H_RFW 0x00000020 | ||
| 368 | #define UCC_SLOW_GUMR_H_TXSY 0x00000010 | ||
| 369 | #define UCC_SLOW_GUMR_H_4SYNC 0x00000004 | ||
| 370 | #define UCC_SLOW_GUMR_H_8SYNC 0x00000008 | ||
| 371 | #define UCC_SLOW_GUMR_H_16SYNC 0x0000000c | ||
| 372 | #define UCC_SLOW_GUMR_H_RTSM 0x00000002 | ||
| 373 | #define UCC_SLOW_GUMR_H_RSYN 0x00000001 | ||
| 374 | |||
| 375 | #define UCC_SLOW_GUMR_L_TCI 0x10000000 | ||
| 376 | #define UCC_SLOW_GUMR_L_RINV 0x02000000 | ||
| 377 | #define UCC_SLOW_GUMR_L_TINV 0x01000000 | ||
| 378 | #define UCC_SLOW_GUMR_L_TEND 0x00020000 | ||
| 379 | #define UCC_SLOW_GUMR_L_ENR 0x00000020 | ||
| 380 | #define UCC_SLOW_GUMR_L_ENT 0x00000010 | ||
| 381 | |||
| 382 | /* General UCC FAST Mode Register */ | ||
| 383 | #define UCC_FAST_GUMR_TCI 0x20000000 | ||
| 384 | #define UCC_FAST_GUMR_TRX 0x10000000 | ||
| 385 | #define UCC_FAST_GUMR_TTX 0x08000000 | ||
| 386 | #define UCC_FAST_GUMR_CDP 0x04000000 | ||
| 387 | #define UCC_FAST_GUMR_CTSP 0x02000000 | ||
| 388 | #define UCC_FAST_GUMR_CDS 0x01000000 | ||
| 389 | #define UCC_FAST_GUMR_CTSS 0x00800000 | ||
| 390 | #define UCC_FAST_GUMR_TXSY 0x00020000 | ||
| 391 | #define UCC_FAST_GUMR_RSYN 0x00010000 | ||
| 392 | #define UCC_FAST_GUMR_RTSM 0x00002000 | ||
| 393 | #define UCC_FAST_GUMR_REVD 0x00000400 | ||
| 394 | #define UCC_FAST_GUMR_ENR 0x00000020 | ||
| 395 | #define UCC_FAST_GUMR_ENT 0x00000010 | ||
| 396 | |||
| 397 | /* Slow UCC Event Register (UCCE) */ | ||
| 398 | #define UCC_SLOW_UCCE_GLR 0x1000 | ||
| 399 | #define UCC_SLOW_UCCE_GLT 0x0800 | ||
| 400 | #define UCC_SLOW_UCCE_DCC 0x0400 | ||
| 401 | #define UCC_SLOW_UCCE_FLG 0x0200 | ||
| 402 | #define UCC_SLOW_UCCE_AB 0x0200 | ||
| 403 | #define UCC_SLOW_UCCE_IDLE 0x0100 | ||
| 404 | #define UCC_SLOW_UCCE_GRA 0x0080 | ||
| 405 | #define UCC_SLOW_UCCE_TXE 0x0010 | ||
| 406 | #define UCC_SLOW_UCCE_RXF 0x0008 | ||
| 407 | #define UCC_SLOW_UCCE_CCR 0x0008 | ||
| 408 | #define UCC_SLOW_UCCE_RCH 0x0008 | ||
| 409 | #define UCC_SLOW_UCCE_BSY 0x0004 | ||
| 410 | #define UCC_SLOW_UCCE_TXB 0x0002 | ||
| 411 | #define UCC_SLOW_UCCE_TX 0x0002 | ||
| 412 | #define UCC_SLOW_UCCE_RX 0x0001 | ||
| 413 | #define UCC_SLOW_UCCE_GOV 0x0001 | ||
| 414 | #define UCC_SLOW_UCCE_GUN 0x0002 | ||
| 415 | #define UCC_SLOW_UCCE_GINT 0x0004 | ||
| 416 | #define UCC_SLOW_UCCE_IQOV 0x0008 | ||
| 417 | |||
| 418 | #define UCC_SLOW_UCCE_HDLC_SET (UCC_SLOW_UCCE_TXE | UCC_SLOW_UCCE_BSY | \ | ||
| 419 | UCC_SLOW_UCCE_GRA | UCC_SLOW_UCCE_TXB | UCC_SLOW_UCCE_RXF | \ | ||
| 420 | UCC_SLOW_UCCE_DCC | UCC_SLOW_UCCE_GLT | UCC_SLOW_UCCE_GLR) | ||
| 421 | #define UCC_SLOW_UCCE_ENET_SET (UCC_SLOW_UCCE_TXE | UCC_SLOW_UCCE_BSY | \ | ||
| 422 | UCC_SLOW_UCCE_GRA | UCC_SLOW_UCCE_TXB | UCC_SLOW_UCCE_RXF) | ||
| 423 | #define UCC_SLOW_UCCE_TRANS_SET (UCC_SLOW_UCCE_TXE | UCC_SLOW_UCCE_BSY | \ | ||
| 424 | UCC_SLOW_UCCE_GRA | UCC_SLOW_UCCE_TX | UCC_SLOW_UCCE_RX | \ | ||
| 425 | UCC_SLOW_UCCE_DCC | UCC_SLOW_UCCE_GLT | UCC_SLOW_UCCE_GLR) | ||
| 426 | #define UCC_SLOW_UCCE_UART_SET (UCC_SLOW_UCCE_BSY | UCC_SLOW_UCCE_GRA | \ | ||
| 427 | UCC_SLOW_UCCE_TXB | UCC_SLOW_UCCE_TX | UCC_SLOW_UCCE_RX | \ | ||
| 428 | UCC_SLOW_UCCE_GLT | UCC_SLOW_UCCE_GLR) | ||
| 429 | #define UCC_SLOW_UCCE_QMC_SET (UCC_SLOW_UCCE_IQOV | UCC_SLOW_UCCE_GINT | \ | ||
| 430 | UCC_SLOW_UCCE_GUN | UCC_SLOW_UCCE_GOV) | ||
| 431 | |||
| 432 | #define UCC_SLOW_UCCE_OTHER (UCC_SLOW_UCCE_TXE | UCC_SLOW_UCCE_BSY | \ | ||
| 433 | UCC_SLOW_UCCE_GRA | UCC_SLOW_UCCE_DCC | UCC_SLOW_UCCE_GLT | \ | ||
| 434 | UCC_SLOW_UCCE_GLR) | ||
| 435 | |||
| 436 | #define UCC_SLOW_INTR_TX UCC_SLOW_UCCE_TXB | ||
| 437 | #define UCC_SLOW_INTR_RX (UCC_SLOW_UCCE_RXF | UCC_SLOW_UCCE_RX) | ||
| 438 | #define UCC_SLOW_INTR (UCC_SLOW_INTR_TX | UCC_SLOW_INTR_RX) | ||
| 439 | |||
| 440 | /* UCC Transmit On Demand Register (UTODR) */ | ||
| 441 | #define UCC_SLOW_TOD 0x8000 | ||
| 442 | #define UCC_FAST_TOD 0x8000 | ||
| 443 | |||
| 444 | /* Function code masks */ | ||
| 445 | #define FC_GBL 0x20 | ||
| 446 | #define FC_DTB_LCL 0x02 | ||
| 447 | #define UCC_FAST_FUNCTION_CODE_GBL 0x20 | ||
| 448 | #define UCC_FAST_FUNCTION_CODE_DTB_LCL 0x02 | ||
| 449 | #define UCC_FAST_FUNCTION_CODE_BDB_LCL 0x01 | ||
| 450 | |||
| 451 | static inline long IS_MURAM_ERR(const u32 offset) | ||
| 452 | { | ||
| 453 | return offset > (u32) - 1000L; | ||
| 454 | } | ||
| 455 | |||
| 456 | #endif /* __KERNEL__ */ | ||
| 457 | #endif /* _ASM_POWERPC_QE_H */ | ||
diff --git a/include/asm-powerpc/qe_ic.h b/include/asm-powerpc/qe_ic.h new file mode 100644 index 000000000000..e386fb7e44b0 --- /dev/null +++ b/include/asm-powerpc/qe_ic.h | |||
| @@ -0,0 +1,64 @@ | |||
| 1 | /* | ||
| 2 | * include/asm-powerpc/qe_ic.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2006 Freescale Semicondutor, Inc. All rights reserved. | ||
| 5 | * | ||
| 6 | * Authors: Shlomi Gridish <gridish@freescale.com> | ||
| 7 | * Li Yang <leoli@freescale.com> | ||
| 8 | * | ||
| 9 | * Description: | ||
| 10 | * QE IC external definitions and structure. | ||
| 11 | * | ||
| 12 | * This program is free software; you can redistribute it and/or modify it | ||
| 13 | * under the terms of the GNU General Public License as published by the | ||
| 14 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 15 | * option) any later version. | ||
| 16 | */ | ||
| 17 | #ifndef _ASM_POWERPC_QE_IC_H | ||
| 18 | #define _ASM_POWERPC_QE_IC_H | ||
| 19 | |||
| 20 | #include <linux/irq.h> | ||
| 21 | |||
| 22 | #define NUM_OF_QE_IC_GROUPS 6 | ||
| 23 | |||
| 24 | /* Flags when we init the QE IC */ | ||
| 25 | #define QE_IC_SPREADMODE_GRP_W 0x00000001 | ||
| 26 | #define QE_IC_SPREADMODE_GRP_X 0x00000002 | ||
| 27 | #define QE_IC_SPREADMODE_GRP_Y 0x00000004 | ||
| 28 | #define QE_IC_SPREADMODE_GRP_Z 0x00000008 | ||
| 29 | #define QE_IC_SPREADMODE_GRP_RISCA 0x00000010 | ||
| 30 | #define QE_IC_SPREADMODE_GRP_RISCB 0x00000020 | ||
| 31 | |||
| 32 | #define QE_IC_LOW_SIGNAL 0x00000100 | ||
| 33 | #define QE_IC_HIGH_SIGNAL 0x00000200 | ||
| 34 | |||
| 35 | #define QE_IC_GRP_W_PRI0_DEST_SIGNAL_HIGH 0x00001000 | ||
| 36 | #define QE_IC_GRP_W_PRI1_DEST_SIGNAL_HIGH 0x00002000 | ||
| 37 | #define QE_IC_GRP_X_PRI0_DEST_SIGNAL_HIGH 0x00004000 | ||
| 38 | #define QE_IC_GRP_X_PRI1_DEST_SIGNAL_HIGH 0x00008000 | ||
| 39 | #define QE_IC_GRP_Y_PRI0_DEST_SIGNAL_HIGH 0x00010000 | ||
| 40 | #define QE_IC_GRP_Y_PRI1_DEST_SIGNAL_HIGH 0x00020000 | ||
| 41 | #define QE_IC_GRP_Z_PRI0_DEST_SIGNAL_HIGH 0x00040000 | ||
| 42 | #define QE_IC_GRP_Z_PRI1_DEST_SIGNAL_HIGH 0x00080000 | ||
| 43 | #define QE_IC_GRP_RISCA_PRI0_DEST_SIGNAL_HIGH 0x00100000 | ||
| 44 | #define QE_IC_GRP_RISCA_PRI1_DEST_SIGNAL_HIGH 0x00200000 | ||
| 45 | #define QE_IC_GRP_RISCB_PRI0_DEST_SIGNAL_HIGH 0x00400000 | ||
| 46 | #define QE_IC_GRP_RISCB_PRI1_DEST_SIGNAL_HIGH 0x00800000 | ||
| 47 | #define QE_IC_GRP_W_DEST_SIGNAL_SHIFT (12) | ||
| 48 | |||
| 49 | /* QE interrupt sources groups */ | ||
| 50 | enum qe_ic_grp_id { | ||
| 51 | QE_IC_GRP_W = 0, /* QE interrupt controller group W */ | ||
| 52 | QE_IC_GRP_X, /* QE interrupt controller group X */ | ||
| 53 | QE_IC_GRP_Y, /* QE interrupt controller group Y */ | ||
| 54 | QE_IC_GRP_Z, /* QE interrupt controller group Z */ | ||
| 55 | QE_IC_GRP_RISCA, /* QE interrupt controller RISC group A */ | ||
| 56 | QE_IC_GRP_RISCB /* QE interrupt controller RISC group B */ | ||
| 57 | }; | ||
| 58 | |||
| 59 | void qe_ic_init(struct device_node *node, unsigned int flags); | ||
| 60 | void qe_ic_set_highest_priority(unsigned int virq, int high); | ||
| 61 | int qe_ic_set_priority(unsigned int virq, unsigned int priority); | ||
| 62 | int qe_ic_set_high_priority(unsigned int virq, unsigned int priority, int high); | ||
| 63 | |||
| 64 | #endif /* _ASM_POWERPC_QE_IC_H */ | ||
diff --git a/include/asm-powerpc/reg.h b/include/asm-powerpc/reg.h index 3a9fcc15811b..8fb96811b55d 100644 --- a/include/asm-powerpc/reg.h +++ b/include/asm-powerpc/reg.h | |||
| @@ -503,7 +503,7 @@ | |||
| 503 | 503 | ||
| 504 | /* | 504 | /* |
| 505 | * An mtfsf instruction with the L bit set. On CPUs that support this a | 505 | * An mtfsf instruction with the L bit set. On CPUs that support this a |
| 506 | * full 64bits of FPSCR is restored and on other CPUs it is ignored. | 506 | * full 64bits of FPSCR is restored and on other CPUs the L bit is ignored. |
| 507 | * | 507 | * |
| 508 | * Until binutils gets the new form of mtfsf, hardwire the instruction. | 508 | * Until binutils gets the new form of mtfsf, hardwire the instruction. |
| 509 | */ | 509 | */ |
diff --git a/include/asm-powerpc/smp.h b/include/asm-powerpc/smp.h index 068f119aa298..20ea7c70bc38 100644 --- a/include/asm-powerpc/smp.h +++ b/include/asm-powerpc/smp.h | |||
| @@ -34,8 +34,7 @@ extern void cpu_die(void); | |||
| 34 | #ifdef CONFIG_SMP | 34 | #ifdef CONFIG_SMP |
| 35 | 35 | ||
| 36 | extern void smp_send_debugger_break(int cpu); | 36 | extern void smp_send_debugger_break(int cpu); |
| 37 | struct pt_regs; | 37 | extern void smp_message_recv(int); |
| 38 | extern void smp_message_recv(int, struct pt_regs *); | ||
| 39 | 38 | ||
| 40 | #ifdef CONFIG_HOTPLUG_CPU | 39 | #ifdef CONFIG_HOTPLUG_CPU |
| 41 | extern void fixup_irqs(cpumask_t map); | 40 | extern void fixup_irqs(cpumask_t map); |
diff --git a/include/asm-powerpc/spu.h b/include/asm-powerpc/spu.h index b42b53c40f5d..e73ea00efd8b 100644 --- a/include/asm-powerpc/spu.h +++ b/include/asm-powerpc/spu.h | |||
| @@ -138,6 +138,7 @@ struct spu { | |||
| 138 | void (* ibox_callback)(struct spu *spu); | 138 | void (* ibox_callback)(struct spu *spu); |
| 139 | void (* stop_callback)(struct spu *spu); | 139 | void (* stop_callback)(struct spu *spu); |
| 140 | void (* mfc_callback)(struct spu *spu); | 140 | void (* mfc_callback)(struct spu *spu); |
| 141 | void (* dma_callback)(struct spu *spu, int type); | ||
| 141 | 142 | ||
| 142 | char irq_c0[8]; | 143 | char irq_c0[8]; |
| 143 | char irq_c1[8]; | 144 | char irq_c1[8]; |
| @@ -147,6 +148,7 @@ struct spu { | |||
| 147 | }; | 148 | }; |
| 148 | 149 | ||
| 149 | struct spu *spu_alloc(void); | 150 | struct spu *spu_alloc(void); |
| 151 | struct spu *spu_alloc_node(int node); | ||
| 150 | void spu_free(struct spu *spu); | 152 | void spu_free(struct spu *spu); |
| 151 | int spu_irq_class_0_bottom(struct spu *spu); | 153 | int spu_irq_class_0_bottom(struct spu *spu); |
| 152 | int spu_irq_class_1_bottom(struct spu *spu); | 154 | int spu_irq_class_1_bottom(struct spu *spu); |
| @@ -168,6 +170,22 @@ extern struct spufs_calls { | |||
| 168 | struct module *owner; | 170 | struct module *owner; |
| 169 | } spufs_calls; | 171 | } spufs_calls; |
| 170 | 172 | ||
| 173 | /* return status from spu_run, same as in libspe */ | ||
| 174 | #define SPE_EVENT_DMA_ALIGNMENT 0x0008 /*A DMA alignment error */ | ||
| 175 | #define SPE_EVENT_SPE_ERROR 0x0010 /*An illegal instruction error*/ | ||
| 176 | #define SPE_EVENT_SPE_DATA_SEGMENT 0x0020 /*A DMA segmentation error */ | ||
| 177 | #define SPE_EVENT_SPE_DATA_STORAGE 0x0040 /*A DMA storage error */ | ||
| 178 | #define SPE_EVENT_INVALID_DMA 0x0800 /* Invalid MFC DMA */ | ||
| 179 | |||
| 180 | /* | ||
| 181 | * Flags for sys_spu_create. | ||
| 182 | */ | ||
| 183 | #define SPU_CREATE_EVENTS_ENABLED 0x0001 | ||
| 184 | #define SPU_CREATE_GANG 0x0002 | ||
| 185 | |||
| 186 | #define SPU_CREATE_FLAG_ALL 0x0003 /* mask of all valid flags */ | ||
| 187 | |||
| 188 | |||
| 171 | #ifdef CONFIG_SPU_FS_MODULE | 189 | #ifdef CONFIG_SPU_FS_MODULE |
| 172 | int register_spu_syscalls(struct spufs_calls *calls); | 190 | int register_spu_syscalls(struct spufs_calls *calls); |
| 173 | void unregister_spu_syscalls(struct spufs_calls *calls); | 191 | void unregister_spu_syscalls(struct spufs_calls *calls); |
| @@ -183,6 +201,24 @@ static inline void unregister_spu_syscalls(struct spufs_calls *calls) | |||
| 183 | 201 | ||
| 184 | 202 | ||
| 185 | /* | 203 | /* |
| 204 | * Notifier blocks: | ||
| 205 | * | ||
| 206 | * oprofile can get notified when a context switch is performed | ||
| 207 | * on an spe. The notifer function that gets called is passed | ||
| 208 | * a pointer to the SPU structure as well as the object-id that | ||
| 209 | * identifies the binary running on that SPU now. | ||
| 210 | * | ||
| 211 | * For a context save, the object-id that is passed is zero, | ||
| 212 | * identifying that the kernel will run from that moment on. | ||
| 213 | * | ||
| 214 | * For a context restore, the object-id is the value written | ||
| 215 | * to object-id spufs file from user space and the notifer | ||
| 216 | * function can assume that spu->ctx is valid. | ||
| 217 | */ | ||
| 218 | int spu_switch_event_register(struct notifier_block * n); | ||
| 219 | int spu_switch_event_unregister(struct notifier_block * n); | ||
| 220 | |||
| 221 | /* | ||
| 186 | * This defines the Local Store, Problem Area and Privlege Area of an SPU. | 222 | * This defines the Local Store, Problem Area and Privlege Area of an SPU. |
| 187 | */ | 223 | */ |
| 188 | 224 | ||
diff --git a/include/asm-powerpc/system.h b/include/asm-powerpc/system.h index 4b41deaa8d8d..43627596003b 100644 --- a/include/asm-powerpc/system.h +++ b/include/asm-powerpc/system.h | |||
| @@ -91,10 +91,6 @@ DEBUGGER_BOILERPLATE(debugger_iabr_match) | |||
| 91 | DEBUGGER_BOILERPLATE(debugger_dabr_match) | 91 | DEBUGGER_BOILERPLATE(debugger_dabr_match) |
| 92 | DEBUGGER_BOILERPLATE(debugger_fault_handler) | 92 | DEBUGGER_BOILERPLATE(debugger_fault_handler) |
| 93 | 93 | ||
| 94 | #ifdef CONFIG_XMON | ||
| 95 | extern void xmon_init(int enable); | ||
| 96 | #endif | ||
| 97 | |||
| 98 | #else | 94 | #else |
| 99 | static inline int debugger(struct pt_regs *regs) { return 0; } | 95 | static inline int debugger(struct pt_regs *regs) { return 0; } |
| 100 | static inline int debugger_ipi(struct pt_regs *regs) { return 0; } | 96 | static inline int debugger_ipi(struct pt_regs *regs) { return 0; } |
diff --git a/include/asm-powerpc/ucc.h b/include/asm-powerpc/ucc.h new file mode 100644 index 000000000000..afe3076bdc03 --- /dev/null +++ b/include/asm-powerpc/ucc.h | |||
| @@ -0,0 +1,84 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2006 Freescale Semicondutor, Inc. All rights reserved. | ||
| 3 | * | ||
| 4 | * Authors: Shlomi Gridish <gridish@freescale.com> | ||
| 5 | * Li Yang <leoli@freescale.com> | ||
| 6 | * | ||
| 7 | * Description: | ||
| 8 | * Internal header file for UCC unit routines. | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify it | ||
| 11 | * under the terms of the GNU General Public License as published by the | ||
| 12 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 13 | * option) any later version. | ||
| 14 | */ | ||
| 15 | #ifndef __UCC_H__ | ||
| 16 | #define __UCC_H__ | ||
| 17 | |||
| 18 | #include <asm/immap_qe.h> | ||
| 19 | #include <asm/qe.h> | ||
| 20 | |||
| 21 | #define STATISTICS | ||
| 22 | |||
| 23 | #define UCC_MAX_NUM 8 | ||
| 24 | |||
| 25 | /* Slow or fast type for UCCs. | ||
| 26 | */ | ||
| 27 | enum ucc_speed_type { | ||
| 28 | UCC_SPEED_TYPE_FAST, UCC_SPEED_TYPE_SLOW | ||
| 29 | }; | ||
| 30 | |||
| 31 | /* Initial UCCs Parameter RAM address relative to: MEM_MAP_BASE (IMMR). | ||
| 32 | */ | ||
| 33 | enum ucc_pram_initial_offset { | ||
| 34 | UCC_PRAM_OFFSET_UCC1 = 0x8400, | ||
| 35 | UCC_PRAM_OFFSET_UCC2 = 0x8500, | ||
| 36 | UCC_PRAM_OFFSET_UCC3 = 0x8600, | ||
| 37 | UCC_PRAM_OFFSET_UCC4 = 0x9000, | ||
| 38 | UCC_PRAM_OFFSET_UCC5 = 0x8000, | ||
| 39 | UCC_PRAM_OFFSET_UCC6 = 0x8100, | ||
| 40 | UCC_PRAM_OFFSET_UCC7 = 0x8200, | ||
| 41 | UCC_PRAM_OFFSET_UCC8 = 0x8300 | ||
| 42 | }; | ||
| 43 | |||
| 44 | /* ucc_set_type | ||
| 45 | * Sets UCC to slow or fast mode. | ||
| 46 | * | ||
| 47 | * ucc_num - (In) number of UCC (0-7). | ||
| 48 | * regs - (In) pointer to registers base for the UCC. | ||
| 49 | * speed - (In) slow or fast mode for UCC. | ||
| 50 | */ | ||
| 51 | int ucc_set_type(int ucc_num, struct ucc_common *regs, | ||
| 52 | enum ucc_speed_type speed); | ||
| 53 | |||
| 54 | /* ucc_init_guemr | ||
| 55 | * Init the Guemr register. | ||
| 56 | * | ||
| 57 | * regs - (In) pointer to registers base for the UCC. | ||
| 58 | */ | ||
| 59 | int ucc_init_guemr(struct ucc_common *regs); | ||
| 60 | |||
| 61 | int ucc_set_qe_mux_mii_mng(int ucc_num); | ||
| 62 | |||
| 63 | int ucc_set_qe_mux_rxtx(int ucc_num, enum qe_clock clock, enum comm_dir mode); | ||
| 64 | |||
| 65 | int ucc_mux_set_grant_tsa_bkpt(int ucc_num, int set, u32 mask); | ||
| 66 | |||
| 67 | /* QE MUX clock routing for UCC | ||
| 68 | */ | ||
| 69 | static inline int ucc_set_qe_mux_grant(int ucc_num, int set) | ||
| 70 | { | ||
| 71 | return ucc_mux_set_grant_tsa_bkpt(ucc_num, set, QE_CMXUCR_GRANT); | ||
| 72 | } | ||
| 73 | |||
| 74 | static inline int ucc_set_qe_mux_tsa(int ucc_num, int set) | ||
| 75 | { | ||
| 76 | return ucc_mux_set_grant_tsa_bkpt(ucc_num, set, QE_CMXUCR_TSA); | ||
| 77 | } | ||
| 78 | |||
| 79 | static inline int ucc_set_qe_mux_bkpt(int ucc_num, int set) | ||
| 80 | { | ||
| 81 | return ucc_mux_set_grant_tsa_bkpt(ucc_num, set, QE_CMXUCR_BKPT); | ||
| 82 | } | ||
| 83 | |||
| 84 | #endif /* __UCC_H__ */ | ||
diff --git a/include/asm-powerpc/ucc_fast.h b/include/asm-powerpc/ucc_fast.h new file mode 100644 index 000000000000..39d1c90fd2ca --- /dev/null +++ b/include/asm-powerpc/ucc_fast.h | |||
| @@ -0,0 +1,243 @@ | |||
| 1 | /* | ||
| 2 | * include/asm-powerpc/ucc_fast.h | ||
| 3 | * | ||
| 4 | * Internal header file for UCC FAST unit routines. | ||
| 5 | * | ||
| 6 | * Copyright (C) 2006 Freescale Semicondutor, Inc. All rights reserved. | ||
| 7 | * | ||
| 8 | * Authors: Shlomi Gridish <gridish@freescale.com> | ||
| 9 | * Li Yang <leoli@freescale.com> | ||
| 10 | * | ||
| 11 | * This program is free software; you can redistribute it and/or modify it | ||
| 12 | * under the terms of the GNU General Public License as published by the | ||
| 13 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 14 | * option) any later version. | ||
| 15 | */ | ||
| 16 | #ifndef __UCC_FAST_H__ | ||
| 17 | #define __UCC_FAST_H__ | ||
| 18 | |||
| 19 | #include <linux/kernel.h> | ||
| 20 | |||
| 21 | #include <asm/immap_qe.h> | ||
| 22 | #include <asm/qe.h> | ||
| 23 | |||
| 24 | #include "ucc.h" | ||
| 25 | |||
| 26 | /* Receive BD's status */ | ||
| 27 | #define R_E 0x80000000 /* buffer empty */ | ||
| 28 | #define R_W 0x20000000 /* wrap bit */ | ||
| 29 | #define R_I 0x10000000 /* interrupt on reception */ | ||
| 30 | #define R_L 0x08000000 /* last */ | ||
| 31 | #define R_F 0x04000000 /* first */ | ||
| 32 | |||
| 33 | /* transmit BD's status */ | ||
| 34 | #define T_R 0x80000000 /* ready bit */ | ||
| 35 | #define T_W 0x20000000 /* wrap bit */ | ||
| 36 | #define T_I 0x10000000 /* interrupt on completion */ | ||
| 37 | #define T_L 0x08000000 /* last */ | ||
| 38 | |||
| 39 | /* Rx Data buffer must be 4 bytes aligned in most cases */ | ||
| 40 | #define UCC_FAST_RX_ALIGN 4 | ||
| 41 | #define UCC_FAST_MRBLR_ALIGNMENT 4 | ||
| 42 | #define UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT 8 | ||
| 43 | |||
| 44 | /* Sizes */ | ||
| 45 | #define UCC_FAST_URFS_MIN_VAL 0x88 | ||
| 46 | #define UCC_FAST_RECEIVE_VIRTUAL_FIFO_SIZE_FUDGE_FACTOR 8 | ||
| 47 | |||
| 48 | /* ucc_fast_channel_protocol_mode - UCC FAST mode */ | ||
| 49 | enum ucc_fast_channel_protocol_mode { | ||
| 50 | UCC_FAST_PROTOCOL_MODE_HDLC = 0x00000000, | ||
| 51 | UCC_FAST_PROTOCOL_MODE_RESERVED01 = 0x00000001, | ||
| 52 | UCC_FAST_PROTOCOL_MODE_RESERVED_QMC = 0x00000002, | ||
| 53 | UCC_FAST_PROTOCOL_MODE_RESERVED02 = 0x00000003, | ||
| 54 | UCC_FAST_PROTOCOL_MODE_RESERVED_UART = 0x00000004, | ||
| 55 | UCC_FAST_PROTOCOL_MODE_RESERVED03 = 0x00000005, | ||
| 56 | UCC_FAST_PROTOCOL_MODE_RESERVED_EX_MAC_1 = 0x00000006, | ||
| 57 | UCC_FAST_PROTOCOL_MODE_RESERVED_EX_MAC_2 = 0x00000007, | ||
| 58 | UCC_FAST_PROTOCOL_MODE_RESERVED_BISYNC = 0x00000008, | ||
| 59 | UCC_FAST_PROTOCOL_MODE_RESERVED04 = 0x00000009, | ||
| 60 | UCC_FAST_PROTOCOL_MODE_ATM = 0x0000000A, | ||
| 61 | UCC_FAST_PROTOCOL_MODE_RESERVED05 = 0x0000000B, | ||
| 62 | UCC_FAST_PROTOCOL_MODE_ETHERNET = 0x0000000C, | ||
| 63 | UCC_FAST_PROTOCOL_MODE_RESERVED06 = 0x0000000D, | ||
| 64 | UCC_FAST_PROTOCOL_MODE_POS = 0x0000000E, | ||
| 65 | UCC_FAST_PROTOCOL_MODE_RESERVED07 = 0x0000000F | ||
| 66 | }; | ||
| 67 | |||
| 68 | /* ucc_fast_transparent_txrx - UCC Fast Transparent TX & RX */ | ||
| 69 | enum ucc_fast_transparent_txrx { | ||
| 70 | UCC_FAST_GUMR_TRANSPARENT_TTX_TRX_NORMAL = 0x00000000, | ||
| 71 | UCC_FAST_GUMR_TRANSPARENT_TTX_TRX_TRANSPARENT = 0x18000000 | ||
| 72 | }; | ||
| 73 | |||
| 74 | /* UCC fast diagnostic mode */ | ||
| 75 | enum ucc_fast_diag_mode { | ||
| 76 | UCC_FAST_DIAGNOSTIC_NORMAL = 0x0, | ||
| 77 | UCC_FAST_DIAGNOSTIC_LOCAL_LOOP_BACK = 0x40000000, | ||
| 78 | UCC_FAST_DIAGNOSTIC_AUTO_ECHO = 0x80000000, | ||
| 79 | UCC_FAST_DIAGNOSTIC_LOOP_BACK_AND_ECHO = 0xC0000000 | ||
| 80 | }; | ||
| 81 | |||
| 82 | /* UCC fast Sync length (transparent mode only) */ | ||
| 83 | enum ucc_fast_sync_len { | ||
| 84 | UCC_FAST_SYNC_LEN_NOT_USED = 0x0, | ||
| 85 | UCC_FAST_SYNC_LEN_AUTOMATIC = 0x00004000, | ||
| 86 | UCC_FAST_SYNC_LEN_8_BIT = 0x00008000, | ||
| 87 | UCC_FAST_SYNC_LEN_16_BIT = 0x0000C000 | ||
| 88 | }; | ||
| 89 | |||
| 90 | /* UCC fast RTS mode */ | ||
| 91 | enum ucc_fast_ready_to_send { | ||
| 92 | UCC_FAST_SEND_IDLES_BETWEEN_FRAMES = 0x00000000, | ||
| 93 | UCC_FAST_SEND_FLAGS_BETWEEN_FRAMES = 0x00002000 | ||
| 94 | }; | ||
| 95 | |||
| 96 | /* UCC fast receiver decoding mode */ | ||
| 97 | enum ucc_fast_rx_decoding_method { | ||
| 98 | UCC_FAST_RX_ENCODING_NRZ = 0x00000000, | ||
| 99 | UCC_FAST_RX_ENCODING_NRZI = 0x00000800, | ||
| 100 | UCC_FAST_RX_ENCODING_RESERVED0 = 0x00001000, | ||
| 101 | UCC_FAST_RX_ENCODING_RESERVED1 = 0x00001800 | ||
| 102 | }; | ||
| 103 | |||
| 104 | /* UCC fast transmitter encoding mode */ | ||
| 105 | enum ucc_fast_tx_encoding_method { | ||
| 106 | UCC_FAST_TX_ENCODING_NRZ = 0x00000000, | ||
| 107 | UCC_FAST_TX_ENCODING_NRZI = 0x00000100, | ||
| 108 | UCC_FAST_TX_ENCODING_RESERVED0 = 0x00000200, | ||
| 109 | UCC_FAST_TX_ENCODING_RESERVED1 = 0x00000300 | ||
| 110 | }; | ||
| 111 | |||
| 112 | /* UCC fast CRC length */ | ||
| 113 | enum ucc_fast_transparent_tcrc { | ||
| 114 | UCC_FAST_16_BIT_CRC = 0x00000000, | ||
| 115 | UCC_FAST_CRC_RESERVED0 = 0x00000040, | ||
| 116 | UCC_FAST_32_BIT_CRC = 0x00000080, | ||
| 117 | UCC_FAST_CRC_RESERVED1 = 0x000000C0 | ||
| 118 | }; | ||
| 119 | |||
| 120 | /* Fast UCC initialization structure */ | ||
| 121 | struct ucc_fast_info { | ||
| 122 | int ucc_num; | ||
| 123 | enum qe_clock rx_clock; | ||
| 124 | enum qe_clock tx_clock; | ||
| 125 | u32 regs; | ||
| 126 | int irq; | ||
| 127 | u32 uccm_mask; | ||
| 128 | int bd_mem_part; | ||
| 129 | int brkpt_support; | ||
| 130 | int grant_support; | ||
| 131 | int tsa; | ||
| 132 | int cdp; | ||
| 133 | int cds; | ||
| 134 | int ctsp; | ||
| 135 | int ctss; | ||
| 136 | int tci; | ||
| 137 | int txsy; | ||
| 138 | int rtsm; | ||
| 139 | int revd; | ||
| 140 | int rsyn; | ||
| 141 | u16 max_rx_buf_length; | ||
| 142 | u16 urfs; | ||
| 143 | u16 urfet; | ||
| 144 | u16 urfset; | ||
| 145 | u16 utfs; | ||
| 146 | u16 utfet; | ||
| 147 | u16 utftt; | ||
| 148 | u16 ufpt; | ||
| 149 | enum ucc_fast_channel_protocol_mode mode; | ||
| 150 | enum ucc_fast_transparent_txrx ttx_trx; | ||
| 151 | enum ucc_fast_tx_encoding_method tenc; | ||
| 152 | enum ucc_fast_rx_decoding_method renc; | ||
| 153 | enum ucc_fast_transparent_tcrc tcrc; | ||
| 154 | enum ucc_fast_sync_len synl; | ||
| 155 | }; | ||
| 156 | |||
| 157 | struct ucc_fast_private { | ||
| 158 | struct ucc_fast_info *uf_info; | ||
| 159 | struct ucc_fast *uf_regs; /* a pointer to memory map of UCC regs. */ | ||
| 160 | u32 *p_ucce; /* a pointer to the event register in memory. */ | ||
| 161 | u32 *p_uccm; /* a pointer to the mask register in memory. */ | ||
| 162 | int enabled_tx; /* Whether channel is enabled for Tx (ENT) */ | ||
| 163 | int enabled_rx; /* Whether channel is enabled for Rx (ENR) */ | ||
| 164 | int stopped_tx; /* Whether channel has been stopped for Tx | ||
| 165 | (STOP_TX, etc.) */ | ||
| 166 | int stopped_rx; /* Whether channel has been stopped for Rx */ | ||
| 167 | u32 ucc_fast_tx_virtual_fifo_base_offset;/* pointer to base of Tx | ||
| 168 | virtual fifo */ | ||
| 169 | u32 ucc_fast_rx_virtual_fifo_base_offset;/* pointer to base of Rx | ||
| 170 | virtual fifo */ | ||
| 171 | #ifdef STATISTICS | ||
| 172 | u32 tx_frames; /* Transmitted frames counter. */ | ||
| 173 | u32 rx_frames; /* Received frames counter (only frames | ||
| 174 | passed to application). */ | ||
| 175 | u32 tx_discarded; /* Discarded tx frames counter (frames that | ||
| 176 | were discarded by the driver due to errors). | ||
| 177 | */ | ||
| 178 | u32 rx_discarded; /* Discarded rx frames counter (frames that | ||
| 179 | were discarded by the driver due to errors). | ||
| 180 | */ | ||
| 181 | #endif /* STATISTICS */ | ||
| 182 | u16 mrblr; /* maximum receive buffer length */ | ||
| 183 | }; | ||
| 184 | |||
| 185 | /* ucc_fast_init | ||
| 186 | * Initializes Fast UCC according to user provided parameters. | ||
| 187 | * | ||
| 188 | * uf_info - (In) pointer to the fast UCC info structure. | ||
| 189 | * uccf_ret - (Out) pointer to the fast UCC structure. | ||
| 190 | */ | ||
| 191 | int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** uccf_ret); | ||
| 192 | |||
| 193 | /* ucc_fast_free | ||
| 194 | * Frees all resources for fast UCC. | ||
| 195 | * | ||
| 196 | * uccf - (In) pointer to the fast UCC structure. | ||
| 197 | */ | ||
| 198 | void ucc_fast_free(struct ucc_fast_private * uccf); | ||
| 199 | |||
| 200 | /* ucc_fast_enable | ||
| 201 | * Enables a fast UCC port. | ||
| 202 | * This routine enables Tx and/or Rx through the General UCC Mode Register. | ||
| 203 | * | ||
| 204 | * uccf - (In) pointer to the fast UCC structure. | ||
| 205 | * mode - (In) TX, RX, or both. | ||
| 206 | */ | ||
| 207 | void ucc_fast_enable(struct ucc_fast_private * uccf, enum comm_dir mode); | ||
| 208 | |||
| 209 | /* ucc_fast_disable | ||
| 210 | * Disables a fast UCC port. | ||
| 211 | * This routine disables Tx and/or Rx through the General UCC Mode Register. | ||
| 212 | * | ||
| 213 | * uccf - (In) pointer to the fast UCC structure. | ||
| 214 | * mode - (In) TX, RX, or both. | ||
| 215 | */ | ||
| 216 | void ucc_fast_disable(struct ucc_fast_private * uccf, enum comm_dir mode); | ||
| 217 | |||
| 218 | /* ucc_fast_irq | ||
| 219 | * Handles interrupts on fast UCC. | ||
| 220 | * Called from the general interrupt routine to handle interrupts on fast UCC. | ||
| 221 | * | ||
| 222 | * uccf - (In) pointer to the fast UCC structure. | ||
| 223 | */ | ||
| 224 | void ucc_fast_irq(struct ucc_fast_private * uccf); | ||
| 225 | |||
| 226 | /* ucc_fast_transmit_on_demand | ||
| 227 | * Immediately forces a poll of the transmitter for data to be sent. | ||
| 228 | * Typically, the hardware performs a periodic poll for data that the | ||
| 229 | * transmit routine has set up to be transmitted. In cases where | ||
| 230 | * this polling cycle is not soon enough, this optional routine can | ||
| 231 | * be invoked to force a poll right away, instead. Proper use for | ||
| 232 | * each transmission for which this functionality is desired is to | ||
| 233 | * call the transmit routine and then this routine right after. | ||
| 234 | * | ||
| 235 | * uccf - (In) pointer to the fast UCC structure. | ||
| 236 | */ | ||
| 237 | void ucc_fast_transmit_on_demand(struct ucc_fast_private * uccf); | ||
| 238 | |||
| 239 | u32 ucc_fast_get_qe_cr_subblock(int uccf_num); | ||
| 240 | |||
| 241 | void ucc_fast_dump_regs(struct ucc_fast_private * uccf); | ||
| 242 | |||
| 243 | #endif /* __UCC_FAST_H__ */ | ||
diff --git a/include/asm-powerpc/ucc_slow.h b/include/asm-powerpc/ucc_slow.h new file mode 100644 index 000000000000..ca93bc99237e --- /dev/null +++ b/include/asm-powerpc/ucc_slow.h | |||
| @@ -0,0 +1,289 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2006 Freescale Semicondutor, Inc. All rights reserved. | ||
| 3 | * | ||
| 4 | * Authors: Shlomi Gridish <gridish@freescale.com> | ||
| 5 | * Li Yang <leoli@freescale.com> | ||
| 6 | * | ||
| 7 | * Description: | ||
| 8 | * Internal header file for UCC SLOW unit routines. | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify it | ||
| 11 | * under the terms of the GNU General Public License as published by the | ||
| 12 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 13 | * option) any later version. | ||
| 14 | */ | ||
| 15 | #ifndef __UCC_SLOW_H__ | ||
| 16 | #define __UCC_SLOW_H__ | ||
| 17 | |||
| 18 | #include <linux/kernel.h> | ||
| 19 | |||
| 20 | #include <asm/immap_qe.h> | ||
| 21 | #include <asm/qe.h> | ||
| 22 | |||
| 23 | #include "ucc.h" | ||
| 24 | |||
| 25 | /* transmit BD's status */ | ||
| 26 | #define T_R 0x80000000 /* ready bit */ | ||
| 27 | #define T_PAD 0x40000000 /* add pads to short frames */ | ||
| 28 | #define T_W 0x20000000 /* wrap bit */ | ||
| 29 | #define T_I 0x10000000 /* interrupt on completion */ | ||
| 30 | #define T_L 0x08000000 /* last */ | ||
| 31 | |||
| 32 | #define T_A 0x04000000 /* Address - the data transmitted as address | ||
| 33 | chars */ | ||
| 34 | #define T_TC 0x04000000 /* transmit CRC */ | ||
| 35 | #define T_CM 0x02000000 /* continuous mode */ | ||
| 36 | #define T_DEF 0x02000000 /* collision on previous attempt to transmit */ | ||
| 37 | #define T_P 0x01000000 /* Preamble - send Preamble sequence before | ||
| 38 | data */ | ||
| 39 | #define T_HB 0x01000000 /* heartbeat */ | ||
| 40 | #define T_NS 0x00800000 /* No Stop */ | ||
| 41 | #define T_LC 0x00800000 /* late collision */ | ||
| 42 | #define T_RL 0x00400000 /* retransmission limit */ | ||
| 43 | #define T_UN 0x00020000 /* underrun */ | ||
| 44 | #define T_CT 0x00010000 /* CTS lost */ | ||
| 45 | #define T_CSL 0x00010000 /* carrier sense lost */ | ||
| 46 | #define T_RC 0x003c0000 /* retry count */ | ||
| 47 | |||
| 48 | /* Receive BD's status */ | ||
| 49 | #define R_E 0x80000000 /* buffer empty */ | ||
| 50 | #define R_W 0x20000000 /* wrap bit */ | ||
| 51 | #define R_I 0x10000000 /* interrupt on reception */ | ||
| 52 | #define R_L 0x08000000 /* last */ | ||
| 53 | #define R_C 0x08000000 /* the last byte in this buffer is a cntl | ||
| 54 | char */ | ||
| 55 | #define R_F 0x04000000 /* first */ | ||
| 56 | #define R_A 0x04000000 /* the first byte in this buffer is address | ||
| 57 | byte */ | ||
| 58 | #define R_CM 0x02000000 /* continuous mode */ | ||
| 59 | #define R_ID 0x01000000 /* buffer close on reception of idles */ | ||
| 60 | #define R_M 0x01000000 /* Frame received because of promiscuous | ||
| 61 | mode */ | ||
| 62 | #define R_AM 0x00800000 /* Address match */ | ||
| 63 | #define R_DE 0x00800000 /* Address match */ | ||
| 64 | #define R_LG 0x00200000 /* Break received */ | ||
| 65 | #define R_BR 0x00200000 /* Frame length violation */ | ||
| 66 | #define R_NO 0x00100000 /* Rx Non Octet Aligned Packet */ | ||
| 67 | #define R_FR 0x00100000 /* Framing Error (no stop bit) character | ||
| 68 | received */ | ||
| 69 | #define R_PR 0x00080000 /* Parity Error character received */ | ||
| 70 | #define R_AB 0x00080000 /* Frame Aborted */ | ||
| 71 | #define R_SH 0x00080000 /* frame is too short */ | ||
| 72 | #define R_CR 0x00040000 /* CRC Error */ | ||
| 73 | #define R_OV 0x00020000 /* Overrun */ | ||
| 74 | #define R_CD 0x00010000 /* CD lost */ | ||
| 75 | #define R_CL 0x00010000 /* this frame is closed because of a | ||
| 76 | collision */ | ||
| 77 | |||
| 78 | /* Rx Data buffer must be 4 bytes aligned in most cases.*/ | ||
| 79 | #define UCC_SLOW_RX_ALIGN 4 | ||
| 80 | #define UCC_SLOW_MRBLR_ALIGNMENT 4 | ||
| 81 | #define UCC_SLOW_PRAM_SIZE 0x100 | ||
| 82 | #define ALIGNMENT_OF_UCC_SLOW_PRAM 64 | ||
| 83 | |||
| 84 | /* UCC Slow Channel Protocol Mode */ | ||
| 85 | enum ucc_slow_channel_protocol_mode { | ||
| 86 | UCC_SLOW_CHANNEL_PROTOCOL_MODE_QMC = 0x00000002, | ||
| 87 | UCC_SLOW_CHANNEL_PROTOCOL_MODE_UART = 0x00000004, | ||
| 88 | UCC_SLOW_CHANNEL_PROTOCOL_MODE_BISYNC = 0x00000008, | ||
| 89 | }; | ||
| 90 | |||
| 91 | /* UCC Slow Transparent Transmit CRC (TCRC) */ | ||
| 92 | enum ucc_slow_transparent_tcrc { | ||
| 93 | /* 16-bit CCITT CRC (HDLC). (X16 + X12 + X5 + 1) */ | ||
| 94 | UCC_SLOW_TRANSPARENT_TCRC_CCITT_CRC16 = 0x00000000, | ||
| 95 | /* CRC16 (BISYNC). (X16 + X15 + X2 + 1) */ | ||
| 96 | UCC_SLOW_TRANSPARENT_TCRC_CRC16 = 0x00004000, | ||
| 97 | /* 32-bit CCITT CRC (Ethernet and HDLC) */ | ||
| 98 | UCC_SLOW_TRANSPARENT_TCRC_CCITT_CRC32 = 0x00008000, | ||
| 99 | }; | ||
| 100 | |||
| 101 | /* UCC Slow oversampling rate for transmitter (TDCR) */ | ||
| 102 | enum ucc_slow_tx_oversampling_rate { | ||
| 103 | /* 1x clock mode */ | ||
| 104 | UCC_SLOW_OVERSAMPLING_RATE_TX_TDCR_1 = 0x00000000, | ||
| 105 | /* 8x clock mode */ | ||
| 106 | UCC_SLOW_OVERSAMPLING_RATE_TX_TDCR_8 = 0x00010000, | ||
| 107 | /* 16x clock mode */ | ||
| 108 | UCC_SLOW_OVERSAMPLING_RATE_TX_TDCR_16 = 0x00020000, | ||
| 109 | /* 32x clock mode */ | ||
| 110 | UCC_SLOW_OVERSAMPLING_RATE_TX_TDCR_32 = 0x00030000, | ||
| 111 | }; | ||
| 112 | |||
| 113 | /* UCC Slow Oversampling rate for receiver (RDCR) | ||
| 114 | */ | ||
| 115 | enum ucc_slow_rx_oversampling_rate { | ||
| 116 | /* 1x clock mode */ | ||
| 117 | UCC_SLOW_OVERSAMPLING_RATE_RX_RDCR_1 = 0x00000000, | ||
| 118 | /* 8x clock mode */ | ||
| 119 | UCC_SLOW_OVERSAMPLING_RATE_RX_RDCR_8 = 0x00004000, | ||
| 120 | /* 16x clock mode */ | ||
| 121 | UCC_SLOW_OVERSAMPLING_RATE_RX_RDCR_16 = 0x00008000, | ||
| 122 | /* 32x clock mode */ | ||
| 123 | UCC_SLOW_OVERSAMPLING_RATE_RX_RDCR_32 = 0x0000c000, | ||
| 124 | }; | ||
| 125 | |||
| 126 | /* UCC Slow Transmitter encoding method (TENC) | ||
| 127 | */ | ||
| 128 | enum ucc_slow_tx_encoding_method { | ||
| 129 | UCC_SLOW_TRANSMITTER_ENCODING_METHOD_TENC_NRZ = 0x00000000, | ||
| 130 | UCC_SLOW_TRANSMITTER_ENCODING_METHOD_TENC_NRZI = 0x00000100 | ||
| 131 | }; | ||
| 132 | |||
| 133 | /* UCC Slow Receiver decoding method (RENC) | ||
| 134 | */ | ||
| 135 | enum ucc_slow_rx_decoding_method { | ||
| 136 | UCC_SLOW_RECEIVER_DECODING_METHOD_RENC_NRZ = 0x00000000, | ||
| 137 | UCC_SLOW_RECEIVER_DECODING_METHOD_RENC_NRZI = 0x00000800 | ||
| 138 | }; | ||
| 139 | |||
| 140 | /* UCC Slow Diagnostic mode (DIAG) | ||
| 141 | */ | ||
| 142 | enum ucc_slow_diag_mode { | ||
| 143 | UCC_SLOW_DIAG_MODE_NORMAL = 0x00000000, | ||
| 144 | UCC_SLOW_DIAG_MODE_LOOPBACK = 0x00000040, | ||
| 145 | UCC_SLOW_DIAG_MODE_ECHO = 0x00000080, | ||
| 146 | UCC_SLOW_DIAG_MODE_LOOPBACK_ECHO = 0x000000c0 | ||
| 147 | }; | ||
| 148 | |||
| 149 | struct ucc_slow_info { | ||
| 150 | int ucc_num; | ||
| 151 | enum qe_clock rx_clock; | ||
| 152 | enum qe_clock tx_clock; | ||
| 153 | struct ucc_slow *us_regs; | ||
| 154 | int irq; | ||
| 155 | u16 uccm_mask; | ||
| 156 | int data_mem_part; | ||
| 157 | int init_tx; | ||
| 158 | int init_rx; | ||
| 159 | u32 tx_bd_ring_len; | ||
| 160 | u32 rx_bd_ring_len; | ||
| 161 | int rx_interrupts; | ||
| 162 | int brkpt_support; | ||
| 163 | int grant_support; | ||
| 164 | int tsa; | ||
| 165 | int cdp; | ||
| 166 | int cds; | ||
| 167 | int ctsp; | ||
| 168 | int ctss; | ||
| 169 | int rinv; | ||
| 170 | int tinv; | ||
| 171 | int rtsm; | ||
| 172 | int rfw; | ||
| 173 | int tci; | ||
| 174 | int tend; | ||
| 175 | int tfl; | ||
| 176 | int txsy; | ||
| 177 | u16 max_rx_buf_length; | ||
| 178 | enum ucc_slow_transparent_tcrc tcrc; | ||
| 179 | enum ucc_slow_channel_protocol_mode mode; | ||
| 180 | enum ucc_slow_diag_mode diag; | ||
| 181 | enum ucc_slow_tx_oversampling_rate tdcr; | ||
| 182 | enum ucc_slow_rx_oversampling_rate rdcr; | ||
| 183 | enum ucc_slow_tx_encoding_method tenc; | ||
| 184 | enum ucc_slow_rx_decoding_method renc; | ||
| 185 | }; | ||
| 186 | |||
| 187 | struct ucc_slow_private { | ||
| 188 | struct ucc_slow_info *us_info; | ||
| 189 | struct ucc_slow *us_regs; /* a pointer to memory map of UCC regs */ | ||
| 190 | struct ucc_slow_pram *us_pram; /* a pointer to the parameter RAM */ | ||
| 191 | u32 us_pram_offset; | ||
| 192 | int enabled_tx; /* Whether channel is enabled for Tx (ENT) */ | ||
| 193 | int enabled_rx; /* Whether channel is enabled for Rx (ENR) */ | ||
| 194 | int stopped_tx; /* Whether channel has been stopped for Tx | ||
| 195 | (STOP_TX, etc.) */ | ||
| 196 | int stopped_rx; /* Whether channel has been stopped for Rx */ | ||
| 197 | struct list_head confQ; /* frames passed to chip waiting for tx */ | ||
| 198 | u32 first_tx_bd_mask; /* mask is used in Tx routine to save status | ||
| 199 | and length for first BD in a frame */ | ||
| 200 | u32 tx_base_offset; /* first BD in Tx BD table offset (In MURAM) */ | ||
| 201 | u32 rx_base_offset; /* first BD in Rx BD table offset (In MURAM) */ | ||
| 202 | u8 *confBd; /* next BD for confirm after Tx */ | ||
| 203 | u8 *tx_bd; /* next BD for new Tx request */ | ||
| 204 | u8 *rx_bd; /* next BD to collect after Rx */ | ||
| 205 | void *p_rx_frame; /* accumulating receive frame */ | ||
| 206 | u16 *p_ucce; /* a pointer to the event register in memory. | ||
| 207 | */ | ||
| 208 | u16 *p_uccm; /* a pointer to the mask register in memory */ | ||
| 209 | u16 saved_uccm; /* a saved mask for the RX Interrupt bits */ | ||
| 210 | #ifdef STATISTICS | ||
| 211 | u32 tx_frames; /* Transmitted frames counters */ | ||
| 212 | u32 rx_frames; /* Received frames counters (only frames | ||
| 213 | passed to application) */ | ||
| 214 | u32 rx_discarded; /* Discarded frames counters (frames that | ||
| 215 | were discarded by the driver due to | ||
| 216 | errors) */ | ||
| 217 | #endif /* STATISTICS */ | ||
| 218 | }; | ||
| 219 | |||
| 220 | /* ucc_slow_init | ||
| 221 | * Initializes Slow UCC according to provided parameters. | ||
| 222 | * | ||
| 223 | * us_info - (In) pointer to the slow UCC info structure. | ||
| 224 | * uccs_ret - (Out) pointer to the slow UCC structure. | ||
| 225 | */ | ||
| 226 | int ucc_slow_init(struct ucc_slow_info * us_info, struct ucc_slow_private ** uccs_ret); | ||
| 227 | |||
| 228 | /* ucc_slow_free | ||
| 229 | * Frees all resources for slow UCC. | ||
| 230 | * | ||
| 231 | * uccs - (In) pointer to the slow UCC structure. | ||
| 232 | */ | ||
| 233 | void ucc_slow_free(struct ucc_slow_private * uccs); | ||
| 234 | |||
| 235 | /* ucc_slow_enable | ||
| 236 | * Enables a fast UCC port. | ||
| 237 | * This routine enables Tx and/or Rx through the General UCC Mode Register. | ||
| 238 | * | ||
| 239 | * uccs - (In) pointer to the slow UCC structure. | ||
| 240 | * mode - (In) TX, RX, or both. | ||
| 241 | */ | ||
| 242 | void ucc_slow_enable(struct ucc_slow_private * uccs, enum comm_dir mode); | ||
| 243 | |||
| 244 | /* ucc_slow_disable | ||
| 245 | * Disables a fast UCC port. | ||
| 246 | * This routine disables Tx and/or Rx through the General UCC Mode Register. | ||
| 247 | * | ||
| 248 | * uccs - (In) pointer to the slow UCC structure. | ||
| 249 | * mode - (In) TX, RX, or both. | ||
| 250 | */ | ||
| 251 | void ucc_slow_disable(struct ucc_slow_private * uccs, enum comm_dir mode); | ||
| 252 | |||
| 253 | /* ucc_slow_poll_transmitter_now | ||
| 254 | * Immediately forces a poll of the transmitter for data to be sent. | ||
| 255 | * Typically, the hardware performs a periodic poll for data that the | ||
| 256 | * transmit routine has set up to be transmitted. In cases where | ||
| 257 | * this polling cycle is not soon enough, this optional routine can | ||
| 258 | * be invoked to force a poll right away, instead. Proper use for | ||
| 259 | * each transmission for which this functionality is desired is to | ||
| 260 | * call the transmit routine and then this routine right after. | ||
| 261 | * | ||
| 262 | * uccs - (In) pointer to the slow UCC structure. | ||
| 263 | */ | ||
| 264 | void ucc_slow_poll_transmitter_now(struct ucc_slow_private * uccs); | ||
| 265 | |||
| 266 | /* ucc_slow_graceful_stop_tx | ||
| 267 | * Smoothly stops transmission on a specified slow UCC. | ||
| 268 | * | ||
| 269 | * uccs - (In) pointer to the slow UCC structure. | ||
| 270 | */ | ||
| 271 | void ucc_slow_graceful_stop_tx(struct ucc_slow_private * uccs); | ||
| 272 | |||
| 273 | /* ucc_slow_stop_tx | ||
| 274 | * Stops transmission on a specified slow UCC. | ||
| 275 | * | ||
| 276 | * uccs - (In) pointer to the slow UCC structure. | ||
| 277 | */ | ||
| 278 | void ucc_slow_stop_tx(struct ucc_slow_private * uccs); | ||
| 279 | |||
| 280 | /* ucc_slow_restart_x | ||
| 281 | * Restarts transmitting on a specified slow UCC. | ||
| 282 | * | ||
| 283 | * uccs - (In) pointer to the slow UCC structure. | ||
| 284 | */ | ||
| 285 | void ucc_slow_restart_x(struct ucc_slow_private * uccs); | ||
| 286 | |||
| 287 | u32 ucc_slow_get_qe_cr_subblock(int uccs_num); | ||
| 288 | |||
| 289 | #endif /* __UCC_SLOW_H__ */ | ||
diff --git a/include/asm-powerpc/xmon.h b/include/asm-powerpc/xmon.h index 43f7129984c7..f1d337ed68d5 100644 --- a/include/asm-powerpc/xmon.h +++ b/include/asm-powerpc/xmon.h | |||
| @@ -1,12 +1,22 @@ | |||
| 1 | #ifndef __PPC_XMON_H | 1 | #ifndef __ASM_POWERPC_XMON_H |
| 2 | #define __PPC_XMON_H | 2 | #define __ASM_POWERPC_XMON_H |
| 3 | #ifdef __KERNEL__ | ||
| 4 | 3 | ||
| 5 | struct pt_regs; | 4 | /* |
| 5 | * Copyrignt (C) 2006 IBM Corp | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or | ||
| 8 | * modify it under the terms of the GNU General Public License | ||
| 9 | * as published by the Free Software Foundation; either version | ||
| 10 | * 2 of the License, or (at your option) any later version. | ||
| 11 | */ | ||
| 6 | 12 | ||
| 7 | extern int xmon(struct pt_regs *excp); | 13 | #ifdef __KERNEL__ |
| 8 | extern void xmon_printf(const char *fmt, ...); | ||
| 9 | extern void xmon_init(int); | ||
| 10 | 14 | ||
| 15 | #ifdef CONFIG_XMON | ||
| 16 | extern void xmon_setup(void); | ||
| 17 | #else | ||
| 18 | static inline void xmon_setup(void) { }; | ||
| 11 | #endif | 19 | #endif |
| 12 | #endif | 20 | |
| 21 | #endif /* __KERNEL __ */ | ||
| 22 | #endif /* __ASM_POWERPC_XMON_H */ | ||
diff --git a/include/asm-ppc/commproc.h b/include/asm-ppc/commproc.h index 3247bea5fc2b..7b06b4e6bf30 100644 --- a/include/asm-ppc/commproc.h +++ b/include/asm-ppc/commproc.h | |||
| @@ -690,8 +690,7 @@ typedef struct risc_timer_pram { | |||
| 690 | #define CICR_IEN ((uint)0x00000080) /* Int. enable */ | 690 | #define CICR_IEN ((uint)0x00000080) /* Int. enable */ |
| 691 | #define CICR_SPS ((uint)0x00000001) /* SCC Spread */ | 691 | #define CICR_SPS ((uint)0x00000001) /* SCC Spread */ |
| 692 | 692 | ||
| 693 | extern void cpm_install_handler(int vec, | 693 | extern void cpm_install_handler(int vec, void (*handler)(void *), void *dev_id); |
| 694 | void (*handler)(void *, struct pt_regs *regs), void *dev_id); | ||
| 695 | extern void cpm_free_handler(int vec); | 694 | extern void cpm_free_handler(int vec); |
| 696 | 695 | ||
| 697 | #endif /* __CPM_8XX__ */ | 696 | #endif /* __CPM_8XX__ */ |
diff --git a/include/asm-ppc/floppy.h b/include/asm-ppc/floppy.h index d3963ca79ad8..ae316e6d2ca9 100644 --- a/include/asm-ppc/floppy.h +++ b/include/asm-ppc/floppy.h | |||
| @@ -38,14 +38,14 @@ static int virtual_dma_mode; | |||
| 38 | static int doing_vdma; | 38 | static int doing_vdma; |
| 39 | static struct fd_dma_ops *fd_ops; | 39 | static struct fd_dma_ops *fd_ops; |
| 40 | 40 | ||
| 41 | static irqreturn_t floppy_hardint(int irq, void *dev_id, struct pt_regs * regs) | 41 | static irqreturn_t floppy_hardint(int irq, void *dev_id) |
| 42 | { | 42 | { |
| 43 | unsigned char st; | 43 | unsigned char st; |
| 44 | int lcount; | 44 | int lcount; |
| 45 | char *lptr; | 45 | char *lptr; |
| 46 | 46 | ||
| 47 | if (!doing_vdma) | 47 | if (!doing_vdma) |
| 48 | return floppy_interrupt(irq, dev_id, regs); | 48 | return floppy_interrupt(irq, dev_id); |
| 49 | 49 | ||
| 50 | 50 | ||
| 51 | st = 1; | 51 | st = 1; |
| @@ -69,7 +69,7 @@ static irqreturn_t floppy_hardint(int irq, void *dev_id, struct pt_regs * regs) | |||
| 69 | virtual_dma_residue += virtual_dma_count; | 69 | virtual_dma_residue += virtual_dma_count; |
| 70 | virtual_dma_count=0; | 70 | virtual_dma_count=0; |
| 71 | doing_vdma = 0; | 71 | doing_vdma = 0; |
| 72 | floppy_interrupt(irq, dev_id, regs); | 72 | floppy_interrupt(irq, dev_id); |
| 73 | return IRQ_HANDLED; | 73 | return IRQ_HANDLED; |
| 74 | } | 74 | } |
| 75 | return IRQ_HANDLED; | 75 | return IRQ_HANDLED; |
diff --git a/include/asm-ppc/gt64260.h b/include/asm-ppc/gt64260.h index cd0ef644943d..9e63b3cfffca 100644 --- a/include/asm-ppc/gt64260.h +++ b/include/asm-ppc/gt64260.h | |||
| @@ -315,7 +315,7 @@ int gt64260_get_base(u32 *base); | |||
| 315 | int gt64260_pci_exclude_device(u8 bus, u8 devfn); | 315 | int gt64260_pci_exclude_device(u8 bus, u8 devfn); |
| 316 | 316 | ||
| 317 | void gt64260_init_irq(void); | 317 | void gt64260_init_irq(void); |
| 318 | int gt64260_get_irq(struct pt_regs *regs); | 318 | int gt64260_get_irq(void); |
| 319 | 319 | ||
| 320 | void gt64260_mpsc_progress(char *s, unsigned short hex); | 320 | void gt64260_mpsc_progress(char *s, unsigned short hex); |
| 321 | 321 | ||
diff --git a/include/asm-ppc/io.h b/include/asm-ppc/io.h index 3d9a9e6f3321..a4c411b753ef 100644 --- a/include/asm-ppc/io.h +++ b/include/asm-ppc/io.h | |||
| @@ -439,22 +439,6 @@ extern inline void * phys_to_virt(unsigned long address) | |||
| 439 | #define iobarrier_r() eieio() | 439 | #define iobarrier_r() eieio() |
| 440 | #define iobarrier_w() eieio() | 440 | #define iobarrier_w() eieio() |
| 441 | 441 | ||
| 442 | static inline int check_signature(volatile void __iomem * io_addr, | ||
| 443 | const unsigned char *signature, int length) | ||
| 444 | { | ||
| 445 | int retval = 0; | ||
| 446 | do { | ||
| 447 | if (readb(io_addr) != *signature) | ||
| 448 | goto out; | ||
| 449 | io_addr++; | ||
| 450 | signature++; | ||
| 451 | length--; | ||
| 452 | } while (length); | ||
| 453 | retval = 1; | ||
| 454 | out: | ||
| 455 | return retval; | ||
| 456 | } | ||
| 457 | |||
| 458 | /* | 442 | /* |
| 459 | * Here comes the ppc implementation of the IOMAP | 443 | * Here comes the ppc implementation of the IOMAP |
| 460 | * interfaces. | 444 | * interfaces. |
diff --git a/include/asm-ppc/machdep.h b/include/asm-ppc/machdep.h index da7746738aee..293a444a1d77 100644 --- a/include/asm-ppc/machdep.h +++ b/include/asm-ppc/machdep.h | |||
| @@ -43,7 +43,7 @@ struct machdep_calls { | |||
| 43 | /* Optional, may be NULL. */ | 43 | /* Optional, may be NULL. */ |
| 44 | unsigned int (*irq_canonicalize)(unsigned int irq); | 44 | unsigned int (*irq_canonicalize)(unsigned int irq); |
| 45 | void (*init_IRQ)(void); | 45 | void (*init_IRQ)(void); |
| 46 | int (*get_irq)(struct pt_regs *); | 46 | int (*get_irq)(void); |
| 47 | 47 | ||
| 48 | /* A general init function, called by ppc_init in init/main.c. | 48 | /* A general init function, called by ppc_init in init/main.c. |
| 49 | May be NULL. DEPRECATED ! */ | 49 | May be NULL. DEPRECATED ! */ |
diff --git a/include/asm-ppc/mpc52xx.h b/include/asm-ppc/mpc52xx.h index 7e9842805a28..64c8874618dc 100644 --- a/include/asm-ppc/mpc52xx.h +++ b/include/asm-ppc/mpc52xx.h | |||
| @@ -415,7 +415,7 @@ struct mpc52xx_cdm { | |||
| 415 | #ifndef __ASSEMBLY__ | 415 | #ifndef __ASSEMBLY__ |
| 416 | 416 | ||
| 417 | extern void mpc52xx_init_irq(void); | 417 | extern void mpc52xx_init_irq(void); |
| 418 | extern int mpc52xx_get_irq(struct pt_regs *regs); | 418 | extern int mpc52xx_get_irq(void); |
| 419 | 419 | ||
| 420 | extern unsigned long mpc52xx_find_end_of_memory(void); | 420 | extern unsigned long mpc52xx_find_end_of_memory(void); |
| 421 | extern void mpc52xx_set_bat(void); | 421 | extern void mpc52xx_set_bat(void); |
diff --git a/include/asm-ppc/mv64x60.h b/include/asm-ppc/mv64x60.h index 663edbee3e91..db3776f18198 100644 --- a/include/asm-ppc/mv64x60.h +++ b/include/asm-ppc/mv64x60.h | |||
| @@ -336,9 +336,9 @@ int mv64x60_pci_exclude_device(u8 bus, u8 devfn); | |||
| 336 | 336 | ||
| 337 | 337 | ||
| 338 | void gt64260_init_irq(void); | 338 | void gt64260_init_irq(void); |
| 339 | int gt64260_get_irq(struct pt_regs *regs); | 339 | int gt64260_get_irq(void); |
| 340 | void mv64360_init_irq(void); | 340 | void mv64360_init_irq(void); |
| 341 | int mv64360_get_irq(struct pt_regs *regs); | 341 | int mv64360_get_irq(void); |
| 342 | 342 | ||
| 343 | u32 mv64x60_mask(u32 val, u32 num_bits); | 343 | u32 mv64x60_mask(u32 val, u32 num_bits); |
| 344 | u32 mv64x60_shift_left(u32 val, u32 num_bits); | 344 | u32 mv64x60_shift_left(u32 val, u32 num_bits); |
diff --git a/include/asm-ppc/open_pic.h b/include/asm-ppc/open_pic.h index a4fe962d9f73..778d5726212c 100644 --- a/include/asm-ppc/open_pic.h +++ b/include/asm-ppc/open_pic.h | |||
| @@ -48,12 +48,12 @@ extern void openpic_init(int linux_irq_offset); | |||
| 48 | extern void openpic_init_nmi_irq(u_int irq); | 48 | extern void openpic_init_nmi_irq(u_int irq); |
| 49 | extern void openpic_set_irq_priority(u_int irq, u_int pri); | 49 | extern void openpic_set_irq_priority(u_int irq, u_int pri); |
| 50 | extern void openpic_hookup_cascade(u_int irq, char *name, | 50 | extern void openpic_hookup_cascade(u_int irq, char *name, |
| 51 | int (*cascade_fn)(struct pt_regs *)); | 51 | int (*cascade_fn)(void)); |
| 52 | extern u_int openpic_irq(void); | 52 | extern u_int openpic_irq(void); |
| 53 | extern void openpic_eoi(void); | 53 | extern void openpic_eoi(void); |
| 54 | extern void openpic_request_IPIs(void); | 54 | extern void openpic_request_IPIs(void); |
| 55 | extern void do_openpic_setup_cpu(void); | 55 | extern void do_openpic_setup_cpu(void); |
| 56 | extern int openpic_get_irq(struct pt_regs *regs); | 56 | extern int openpic_get_irq(void); |
| 57 | extern void openpic_reset_processor_phys(u_int cpumask); | 57 | extern void openpic_reset_processor_phys(u_int cpumask); |
| 58 | extern void openpic_setup_ISU(int isu_num, unsigned long addr); | 58 | extern void openpic_setup_ISU(int isu_num, unsigned long addr); |
| 59 | extern void openpic_cause_IPI(u_int ipi, cpumask_t cpumask); | 59 | extern void openpic_cause_IPI(u_int ipi, cpumask_t cpumask); |
| @@ -93,6 +93,6 @@ extern void openpic2_init(int linux_irq_offset); | |||
| 93 | extern void openpic2_init_nmi_irq(u_int irq); | 93 | extern void openpic2_init_nmi_irq(u_int irq); |
| 94 | extern u_int openpic2_irq(void); | 94 | extern u_int openpic2_irq(void); |
| 95 | extern void openpic2_eoi(void); | 95 | extern void openpic2_eoi(void); |
| 96 | extern int openpic2_get_irq(struct pt_regs *regs); | 96 | extern int openpic2_get_irq(void); |
| 97 | extern void openpic2_setup_ISU(int isu_num, unsigned long addr); | 97 | extern void openpic2_setup_ISU(int isu_num, unsigned long addr); |
| 98 | #endif /* _PPC_KERNEL_OPEN_PIC_H */ | 98 | #endif /* _PPC_KERNEL_OPEN_PIC_H */ |
diff --git a/include/asm-ppc/smp.h b/include/asm-ppc/smp.h index 0b7fa89589df..e75791ea33a6 100644 --- a/include/asm-ppc/smp.h +++ b/include/asm-ppc/smp.h | |||
| @@ -39,7 +39,7 @@ extern struct smp_ops_t *smp_ops; | |||
| 39 | extern void smp_send_tlb_invalidate(int); | 39 | extern void smp_send_tlb_invalidate(int); |
| 40 | extern void smp_send_xmon_break(int cpu); | 40 | extern void smp_send_xmon_break(int cpu); |
| 41 | struct pt_regs; | 41 | struct pt_regs; |
| 42 | extern void smp_message_recv(int, struct pt_regs *); | 42 | extern void smp_message_recv(int); |
| 43 | 43 | ||
| 44 | extern int __cpu_disable(void); | 44 | extern int __cpu_disable(void); |
| 45 | extern void __cpu_die(unsigned int cpu); | 45 | extern void __cpu_die(unsigned int cpu); |
diff --git a/include/asm-s390/cio.h b/include/asm-s390/cio.h index da063cd5f0a0..81287d86329d 100644 --- a/include/asm-s390/cio.h +++ b/include/asm-s390/cio.h | |||
| @@ -275,6 +275,12 @@ struct ccw_dev_id { | |||
| 275 | u16 devno; | 275 | u16 devno; |
| 276 | }; | 276 | }; |
| 277 | 277 | ||
| 278 | static inline int ccw_dev_id_is_equal(struct ccw_dev_id *dev_id1, | ||
| 279 | struct ccw_dev_id *dev_id2) | ||
| 280 | { | ||
| 281 | return !memcmp(dev_id1, dev_id2, sizeof(struct ccw_dev_id)); | ||
| 282 | } | ||
| 283 | |||
| 278 | extern int diag210(struct diag210 *addr); | 284 | extern int diag210(struct diag210 *addr); |
| 279 | 285 | ||
| 280 | extern void wait_cons_dev(void); | 286 | extern void wait_cons_dev(void); |
diff --git a/include/asm-s390/hardirq.h b/include/asm-s390/hardirq.h index e84b7ef54aac..c2f6a8782d31 100644 --- a/include/asm-s390/hardirq.h +++ b/include/asm-s390/hardirq.h | |||
| @@ -32,6 +32,6 @@ typedef struct { | |||
| 32 | 32 | ||
| 33 | #define HARDIRQ_BITS 8 | 33 | #define HARDIRQ_BITS 8 |
| 34 | 34 | ||
| 35 | extern void account_ticks(struct pt_regs *); | 35 | extern void account_ticks(void); |
| 36 | 36 | ||
| 37 | #endif /* __ASM_HARDIRQ_H */ | 37 | #endif /* __ASM_HARDIRQ_H */ |
diff --git a/include/asm-s390/io.h b/include/asm-s390/io.h index 63c78b9399c4..efb7de9c1c6b 100644 --- a/include/asm-s390/io.h +++ b/include/asm-s390/io.h | |||
| @@ -45,11 +45,6 @@ static inline void * phys_to_virt(unsigned long address) | |||
| 45 | return __io_virt(address); | 45 | return __io_virt(address); |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | /* | ||
| 49 | * Change "struct page" to physical address. | ||
| 50 | */ | ||
| 51 | #define page_to_phys(page) ((page - mem_map) << PAGE_SHIFT) | ||
| 52 | |||
| 53 | extern void * __ioremap(unsigned long offset, unsigned long size, unsigned long flags); | 48 | extern void * __ioremap(unsigned long offset, unsigned long size, unsigned long flags); |
| 54 | 49 | ||
| 55 | static inline void * ioremap (unsigned long offset, unsigned long size) | 50 | static inline void * ioremap (unsigned long offset, unsigned long size) |
diff --git a/include/asm-s390/irq_regs.h b/include/asm-s390/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-s390/irq_regs.h | |||
| @@ -0,0 +1 @@ | |||
| #include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-s390/page.h b/include/asm-s390/page.h index 796c400f2b79..363ea761d5ee 100644 --- a/include/asm-s390/page.h +++ b/include/asm-s390/page.h | |||
| @@ -137,6 +137,7 @@ page_get_storage_key(unsigned long addr) | |||
| 137 | #define __pa(x) (unsigned long)(x) | 137 | #define __pa(x) (unsigned long)(x) |
| 138 | #define __va(x) (void *)(unsigned long)(x) | 138 | #define __va(x) (void *)(unsigned long)(x) |
| 139 | #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) | 139 | #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) |
| 140 | #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) | ||
| 140 | 141 | ||
| 141 | #define pfn_valid(pfn) ((pfn) < max_mapnr) | 142 | #define pfn_valid(pfn) ((pfn) < max_mapnr) |
| 142 | #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) | 143 | #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) |
diff --git a/include/asm-s390/percpu.h b/include/asm-s390/percpu.h index 495ad99c7635..9ea7f1023e57 100644 --- a/include/asm-s390/percpu.h +++ b/include/asm-s390/percpu.h | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | #if defined(__s390x__) && defined(MODULE) | 16 | #if defined(__s390x__) && defined(MODULE) |
| 17 | 17 | ||
| 18 | #define __reloc_hide(var,offset) (*({ \ | 18 | #define __reloc_hide(var,offset) (*({ \ |
| 19 | extern int simple_indentifier_##var(void); \ | 19 | extern int simple_identifier_##var(void); \ |
| 20 | unsigned long *__ptr; \ | 20 | unsigned long *__ptr; \ |
| 21 | asm ( "larl %0,per_cpu__"#var"@GOTENT" \ | 21 | asm ( "larl %0,per_cpu__"#var"@GOTENT" \ |
| 22 | : "=a" (__ptr) : "X" (per_cpu__##var) ); \ | 22 | : "=a" (__ptr) : "X" (per_cpu__##var) ); \ |
| @@ -25,7 +25,7 @@ | |||
| 25 | #else | 25 | #else |
| 26 | 26 | ||
| 27 | #define __reloc_hide(var, offset) (*({ \ | 27 | #define __reloc_hide(var, offset) (*({ \ |
| 28 | extern int simple_indentifier_##var(void); \ | 28 | extern int simple_identifier_##var(void); \ |
| 29 | unsigned long __ptr; \ | 29 | unsigned long __ptr; \ |
| 30 | asm ( "" : "=a" (__ptr) : "0" (&per_cpu__##var) ); \ | 30 | asm ( "" : "=a" (__ptr) : "0" (&per_cpu__##var) ); \ |
| 31 | (typeof(&per_cpu__##var)) (__ptr + (offset)); })) | 31 | (typeof(&per_cpu__##var)) (__ptr + (offset)); })) |
diff --git a/include/asm-s390/pgalloc.h b/include/asm-s390/pgalloc.h index 803bc7064418..28619de5ecae 100644 --- a/include/asm-s390/pgalloc.h +++ b/include/asm-s390/pgalloc.h | |||
| @@ -116,7 +116,7 @@ pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte) | |||
| 116 | static inline void | 116 | static inline void |
| 117 | pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *page) | 117 | pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *page) |
| 118 | { | 118 | { |
| 119 | pmd_populate_kernel(mm, pmd, (pte_t *)((page-mem_map) << PAGE_SHIFT)); | 119 | pmd_populate_kernel(mm, pmd, (pte_t *)page_to_phys(page)); |
| 120 | } | 120 | } |
| 121 | 121 | ||
| 122 | /* | 122 | /* |
diff --git a/include/asm-s390/pgtable.h b/include/asm-s390/pgtable.h index ecdff13b2505..36bb6dacf008 100644 --- a/include/asm-s390/pgtable.h +++ b/include/asm-s390/pgtable.h | |||
| @@ -200,18 +200,45 @@ extern char empty_zero_page[PAGE_SIZE]; | |||
| 200 | */ | 200 | */ |
| 201 | 201 | ||
| 202 | /* Hardware bits in the page table entry */ | 202 | /* Hardware bits in the page table entry */ |
| 203 | #define _PAGE_RO 0x200 /* HW read-only */ | 203 | #define _PAGE_RO 0x200 /* HW read-only bit */ |
| 204 | #define _PAGE_INVALID 0x400 /* HW invalid */ | 204 | #define _PAGE_INVALID 0x400 /* HW invalid bit */ |
| 205 | #define _PAGE_SWT 0x001 /* SW pte type bit t */ | ||
| 206 | #define _PAGE_SWX 0x002 /* SW pte type bit x */ | ||
| 205 | 207 | ||
| 206 | /* Mask and six different types of pages. */ | 208 | /* Six different types of pages. */ |
| 207 | #define _PAGE_TYPE_MASK 0x601 | ||
| 208 | #define _PAGE_TYPE_EMPTY 0x400 | 209 | #define _PAGE_TYPE_EMPTY 0x400 |
| 209 | #define _PAGE_TYPE_NONE 0x401 | 210 | #define _PAGE_TYPE_NONE 0x401 |
| 210 | #define _PAGE_TYPE_SWAP 0x600 | 211 | #define _PAGE_TYPE_SWAP 0x403 |
| 211 | #define _PAGE_TYPE_FILE 0x601 | 212 | #define _PAGE_TYPE_FILE 0x601 /* bit 0x002 is used for offset !! */ |
| 212 | #define _PAGE_TYPE_RO 0x200 | 213 | #define _PAGE_TYPE_RO 0x200 |
| 213 | #define _PAGE_TYPE_RW 0x000 | 214 | #define _PAGE_TYPE_RW 0x000 |
| 214 | 215 | ||
| 216 | /* | ||
| 217 | * PTE type bits are rather complicated. handle_pte_fault uses pte_present, | ||
| 218 | * pte_none and pte_file to find out the pte type WITHOUT holding the page | ||
| 219 | * table lock. ptep_clear_flush on the other hand uses ptep_clear_flush to | ||
| 220 | * invalidate a given pte. ipte sets the hw invalid bit and clears all tlbs | ||
| 221 | * for the page. The page table entry is set to _PAGE_TYPE_EMPTY afterwards. | ||
| 222 | * This change is done while holding the lock, but the intermediate step | ||
| 223 | * of a previously valid pte with the hw invalid bit set can be observed by | ||
| 224 | * handle_pte_fault. That makes it necessary that all valid pte types with | ||
| 225 | * the hw invalid bit set must be distinguishable from the four pte types | ||
| 226 | * empty, none, swap and file. | ||
| 227 | * | ||
| 228 | * irxt ipte irxt | ||
| 229 | * _PAGE_TYPE_EMPTY 1000 -> 1000 | ||
| 230 | * _PAGE_TYPE_NONE 1001 -> 1001 | ||
| 231 | * _PAGE_TYPE_SWAP 1011 -> 1011 | ||
| 232 | * _PAGE_TYPE_FILE 11?1 -> 11?1 | ||
| 233 | * _PAGE_TYPE_RO 0100 -> 1100 | ||
| 234 | * _PAGE_TYPE_RW 0000 -> 1000 | ||
| 235 | * | ||
| 236 | * pte_none is true for bits combinations 1000, 1100 | ||
| 237 | * pte_present is true for bits combinations 0000, 0010, 0100, 0110, 1001 | ||
| 238 | * pte_file is true for bits combinations 1101, 1111 | ||
| 239 | * swap pte is 1011 and 0001, 0011, 0101, 0111, 1010 and 1110 are invalid. | ||
| 240 | */ | ||
| 241 | |||
| 215 | #ifndef __s390x__ | 242 | #ifndef __s390x__ |
| 216 | 243 | ||
| 217 | /* Bits in the segment table entry */ | 244 | /* Bits in the segment table entry */ |
| @@ -365,18 +392,21 @@ static inline int pmd_bad(pmd_t pmd) | |||
| 365 | 392 | ||
| 366 | static inline int pte_none(pte_t pte) | 393 | static inline int pte_none(pte_t pte) |
| 367 | { | 394 | { |
| 368 | return (pte_val(pte) & _PAGE_TYPE_MASK) == _PAGE_TYPE_EMPTY; | 395 | return (pte_val(pte) & _PAGE_INVALID) && !(pte_val(pte) & _PAGE_SWT); |
| 369 | } | 396 | } |
| 370 | 397 | ||
| 371 | static inline int pte_present(pte_t pte) | 398 | static inline int pte_present(pte_t pte) |
| 372 | { | 399 | { |
| 373 | return !(pte_val(pte) & _PAGE_INVALID) || | 400 | unsigned long mask = _PAGE_RO | _PAGE_INVALID | _PAGE_SWT | _PAGE_SWX; |
| 374 | (pte_val(pte) & _PAGE_TYPE_MASK) == _PAGE_TYPE_NONE; | 401 | return (pte_val(pte) & mask) == _PAGE_TYPE_NONE || |
| 402 | (!(pte_val(pte) & _PAGE_INVALID) && | ||
| 403 | !(pte_val(pte) & _PAGE_SWT)); | ||
| 375 | } | 404 | } |
| 376 | 405 | ||
| 377 | static inline int pte_file(pte_t pte) | 406 | static inline int pte_file(pte_t pte) |
| 378 | { | 407 | { |
| 379 | return (pte_val(pte) & _PAGE_TYPE_MASK) == _PAGE_TYPE_FILE; | 408 | unsigned long mask = _PAGE_RO | _PAGE_INVALID | _PAGE_SWT; |
| 409 | return (pte_val(pte) & mask) == _PAGE_TYPE_FILE; | ||
| 380 | } | 410 | } |
| 381 | 411 | ||
| 382 | #define pte_same(a,b) (pte_val(a) == pte_val(b)) | 412 | #define pte_same(a,b) (pte_val(a) == pte_val(b)) |
| @@ -599,7 +629,7 @@ ptep_establish(struct vm_area_struct *vma, | |||
| 599 | */ | 629 | */ |
| 600 | static inline int page_test_and_clear_dirty(struct page *page) | 630 | static inline int page_test_and_clear_dirty(struct page *page) |
| 601 | { | 631 | { |
| 602 | unsigned long physpage = __pa((page - mem_map) << PAGE_SHIFT); | 632 | unsigned long physpage = page_to_phys(page); |
| 603 | int skey = page_get_storage_key(physpage); | 633 | int skey = page_get_storage_key(physpage); |
| 604 | 634 | ||
| 605 | if (skey & _PAGE_CHANGED) | 635 | if (skey & _PAGE_CHANGED) |
| @@ -612,13 +642,13 @@ static inline int page_test_and_clear_dirty(struct page *page) | |||
| 612 | */ | 642 | */ |
| 613 | static inline int page_test_and_clear_young(struct page *page) | 643 | static inline int page_test_and_clear_young(struct page *page) |
| 614 | { | 644 | { |
| 615 | unsigned long physpage = __pa((page - mem_map) << PAGE_SHIFT); | 645 | unsigned long physpage = page_to_phys(page); |
| 616 | int ccode; | 646 | int ccode; |
| 617 | 647 | ||
| 618 | asm volatile ( | 648 | asm volatile( |
| 619 | "rrbe 0,%1\n" | 649 | " rrbe 0,%1\n" |
| 620 | "ipm %0\n" | 650 | " ipm %0\n" |
| 621 | "srl %0,28\n" | 651 | " srl %0,28\n" |
| 622 | : "=d" (ccode) : "a" (physpage) : "cc" ); | 652 | : "=d" (ccode) : "a" (physpage) : "cc" ); |
| 623 | return ccode & 2; | 653 | return ccode & 2; |
| 624 | } | 654 | } |
| @@ -636,7 +666,7 @@ static inline pte_t mk_pte_phys(unsigned long physpage, pgprot_t pgprot) | |||
| 636 | 666 | ||
| 637 | static inline pte_t mk_pte(struct page *page, pgprot_t pgprot) | 667 | static inline pte_t mk_pte(struct page *page, pgprot_t pgprot) |
| 638 | { | 668 | { |
| 639 | unsigned long physpage = __pa((page - mem_map) << PAGE_SHIFT); | 669 | unsigned long physpage = page_to_phys(page); |
| 640 | 670 | ||
| 641 | return mk_pte_phys(physpage, pgprot); | 671 | return mk_pte_phys(physpage, pgprot); |
| 642 | } | 672 | } |
| @@ -664,11 +694,11 @@ static inline pmd_t pfn_pmd(unsigned long pfn, pgprot_t pgprot) | |||
| 664 | 694 | ||
| 665 | #define pmd_page_vaddr(pmd) (pmd_val(pmd) & PAGE_MASK) | 695 | #define pmd_page_vaddr(pmd) (pmd_val(pmd) & PAGE_MASK) |
| 666 | 696 | ||
| 667 | #define pmd_page(pmd) (mem_map+(pmd_val(pmd) >> PAGE_SHIFT)) | 697 | #define pmd_page(pmd) pfn_to_page(pmd_val(pmd) >> PAGE_SHIFT) |
| 668 | 698 | ||
| 669 | #define pgd_page_vaddr(pgd) (pgd_val(pgd) & PAGE_MASK) | 699 | #define pgd_page_vaddr(pgd) (pgd_val(pgd) & PAGE_MASK) |
| 670 | 700 | ||
| 671 | #define pgd_page(pgd) (mem_map+(pgd_val(pgd) >> PAGE_SHIFT)) | 701 | #define pgd_page(pgd) pfn_to_page(pgd_val(pgd) >> PAGE_SHIFT) |
| 672 | 702 | ||
| 673 | /* to find an entry in a page-table-directory */ | 703 | /* to find an entry in a page-table-directory */ |
| 674 | #define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) | 704 | #define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) |
diff --git a/include/asm-s390/s390_ext.h b/include/asm-s390/s390_ext.h index e9a2862b230d..df9b1017b703 100644 --- a/include/asm-s390/s390_ext.h +++ b/include/asm-s390/s390_ext.h | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * Martin Schwidefsky (schwidefsky@de.ibm.com) | 10 | * Martin Schwidefsky (schwidefsky@de.ibm.com) |
| 11 | */ | 11 | */ |
| 12 | 12 | ||
| 13 | typedef void (*ext_int_handler_t)(struct pt_regs *regs, __u16 code); | 13 | typedef void (*ext_int_handler_t)(__u16 code); |
| 14 | 14 | ||
| 15 | /* | 15 | /* |
| 16 | * Warning: if you change ext_int_info_t you have to change the | 16 | * Warning: if you change ext_int_info_t you have to change the |
diff --git a/include/asm-s390/spinlock.h b/include/asm-s390/spinlock.h index 6b78af16999b..3fd43826fd0b 100644 --- a/include/asm-s390/spinlock.h +++ b/include/asm-s390/spinlock.h | |||
| @@ -11,10 +11,10 @@ | |||
| 11 | #ifndef __ASM_SPINLOCK_H | 11 | #ifndef __ASM_SPINLOCK_H |
| 12 | #define __ASM_SPINLOCK_H | 12 | #define __ASM_SPINLOCK_H |
| 13 | 13 | ||
| 14 | #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2) | ||
| 15 | |||
| 16 | #include <linux/smp.h> | 14 | #include <linux/smp.h> |
| 17 | 15 | ||
| 16 | #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2) | ||
| 17 | |||
| 18 | static inline int | 18 | static inline int |
| 19 | _raw_compare_and_swap(volatile unsigned int *lock, | 19 | _raw_compare_and_swap(volatile unsigned int *lock, |
| 20 | unsigned int old, unsigned int new) | 20 | unsigned int old, unsigned int new) |
diff --git a/include/asm-s390/timer.h b/include/asm-s390/timer.h index fcd6c256a2d1..30e5cbe570f2 100644 --- a/include/asm-s390/timer.h +++ b/include/asm-s390/timer.h | |||
| @@ -26,7 +26,7 @@ struct vtimer_list { | |||
| 26 | spinlock_t lock; | 26 | spinlock_t lock; |
| 27 | unsigned long magic; | 27 | unsigned long magic; |
| 28 | 28 | ||
| 29 | void (*function)(unsigned long, struct pt_regs*); | 29 | void (*function)(unsigned long); |
| 30 | unsigned long data; | 30 | unsigned long data; |
| 31 | }; | 31 | }; |
| 32 | 32 | ||
diff --git a/include/asm-s390/unistd.h b/include/asm-s390/unistd.h index 0cccfd83c457..71d3c21b84f0 100644 --- a/include/asm-s390/unistd.h +++ b/include/asm-s390/unistd.h | |||
| @@ -247,8 +247,11 @@ | |||
| 247 | #define __NR_sync_file_range 307 | 247 | #define __NR_sync_file_range 307 |
| 248 | #define __NR_tee 308 | 248 | #define __NR_tee 308 |
| 249 | #define __NR_vmsplice 309 | 249 | #define __NR_vmsplice 309 |
| 250 | /* Number 310 is reserved for new sys_move_pages */ | ||
| 251 | #define __NR_getcpu 311 | ||
| 252 | #define __NR_epoll_pwait 312 | ||
| 250 | 253 | ||
| 251 | #define NR_syscalls 310 | 254 | #define NR_syscalls 313 |
| 252 | 255 | ||
| 253 | /* | 256 | /* |
| 254 | * There are some system calls that are not present on 64 bit, some | 257 | * There are some system calls that are not present on 64 bit, some |
diff --git a/include/asm-sh/cpu-sh4/ubc.h b/include/asm-sh/cpu-sh4/ubc.h index 3d0943167659..c86e17050935 100644 --- a/include/asm-sh/cpu-sh4/ubc.h +++ b/include/asm-sh/cpu-sh4/ubc.h | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | * | 3 | * |
| 4 | * Copyright (C) 1999 Niibe Yutaka | 4 | * Copyright (C) 1999 Niibe Yutaka |
| 5 | * Copyright (C) 2003 Paul Mundt | 5 | * Copyright (C) 2003 Paul Mundt |
| 6 | * Copyright (C) 2006 Lineo Solutions Inc. support SH4A UBC | ||
| 6 | * | 7 | * |
| 7 | * This file is subject to the terms and conditions of the GNU General Public | 8 | * This file is subject to the terms and conditions of the GNU General Public |
| 8 | * License. See the file "COPYING" in the main directory of this archive | 9 | * License. See the file "COPYING" in the main directory of this archive |
| @@ -11,6 +12,41 @@ | |||
| 11 | #ifndef __ASM_CPU_SH4_UBC_H | 12 | #ifndef __ASM_CPU_SH4_UBC_H |
| 12 | #define __ASM_CPU_SH4_UBC_H | 13 | #define __ASM_CPU_SH4_UBC_H |
| 13 | 14 | ||
| 15 | #if defined(CONFIG_CPU_SH4A) | ||
| 16 | #define UBC_CBR0 0xff200000 | ||
| 17 | #define UBC_CRR0 0xff200004 | ||
| 18 | #define UBC_CAR0 0xff200008 | ||
| 19 | #define UBC_CAMR0 0xff20000c | ||
| 20 | #define UBC_CBR1 0xff200020 | ||
| 21 | #define UBC_CRR1 0xff200024 | ||
| 22 | #define UBC_CAR1 0xff200028 | ||
| 23 | #define UBC_CAMR1 0xff20002c | ||
| 24 | #define UBC_CDR1 0xff200030 | ||
| 25 | #define UBC_CDMR1 0xff200034 | ||
| 26 | #define UBC_CETR1 0xff200038 | ||
| 27 | #define UBC_CCMFR 0xff200600 | ||
| 28 | #define UBC_CBCR 0xff200620 | ||
| 29 | |||
| 30 | /* CBR */ | ||
| 31 | #define UBC_CBR_AIE (0x01<<30) | ||
| 32 | #define UBC_CBR_ID_INST (0x01<<4) | ||
| 33 | #define UBC_CBR_RW_READ (0x01<<1) | ||
| 34 | #define UBC_CBR_CE (0x01) | ||
| 35 | |||
| 36 | #define UBC_CBR_AIV_MASK (0x00FF0000) | ||
| 37 | #define UBC_CBR_AIV_SHIFT (16) | ||
| 38 | #define UBC_CBR_AIV_SET(asid) (((asid)<<UBC_CBR_AIV_SHIFT) & UBC_CBR_AIV_MASK) | ||
| 39 | |||
| 40 | #define UBC_CBR_INIT 0x20000000 | ||
| 41 | |||
| 42 | /* CRR */ | ||
| 43 | #define UBC_CRR_RES (0x01<<13) | ||
| 44 | #define UBC_CRR_PCB (0x01<<1) | ||
| 45 | #define UBC_CRR_BIE (0x01) | ||
| 46 | |||
| 47 | #define UBC_CRR_INIT 0x00002000 | ||
| 48 | |||
| 49 | #else /* CONFIG_CPU_SH4 */ | ||
| 14 | #define UBC_BARA 0xff200000 | 50 | #define UBC_BARA 0xff200000 |
| 15 | #define UBC_BAMRA 0xff200004 | 51 | #define UBC_BAMRA 0xff200004 |
| 16 | #define UBC_BBRA 0xff200008 | 52 | #define UBC_BBRA 0xff200008 |
| @@ -22,6 +58,7 @@ | |||
| 22 | #define UBC_BDRB 0xff200018 | 58 | #define UBC_BDRB 0xff200018 |
| 23 | #define UBC_BDMRB 0xff20001c | 59 | #define UBC_BDMRB 0xff20001c |
| 24 | #define UBC_BRCR 0xff200020 | 60 | #define UBC_BRCR 0xff200020 |
| 61 | #endif /* CONFIG_CPU_SH4 */ | ||
| 25 | 62 | ||
| 26 | #endif /* __ASM_CPU_SH4_UBC_H */ | 63 | #endif /* __ASM_CPU_SH4_UBC_H */ |
| 27 | 64 | ||
diff --git a/include/asm-sh/hw_irq.h b/include/asm-sh/hw_irq.h index fed26616967a..80ee1cda7498 100644 --- a/include/asm-sh/hw_irq.h +++ b/include/asm-sh/hw_irq.h | |||
| @@ -1,4 +1,8 @@ | |||
| 1 | #ifndef __ASM_SH_HW_IRQ_H | 1 | #ifndef __ASM_SH_HW_IRQ_H |
| 2 | #define __ASM_SH_HW_IRQ_H | 2 | #define __ASM_SH_HW_IRQ_H |
| 3 | 3 | ||
| 4 | #include <asm/atomic.h> | ||
| 5 | |||
| 6 | extern atomic_t irq_err_count; | ||
| 7 | |||
| 4 | #endif /* __ASM_SH_HW_IRQ_H */ | 8 | #endif /* __ASM_SH_HW_IRQ_H */ |
diff --git a/include/asm-sh/io.h b/include/asm-sh/io.h index ed12d38e8c00..a0e55b09e4fd 100644 --- a/include/asm-sh/io.h +++ b/include/asm-sh/io.h | |||
| @@ -304,22 +304,6 @@ __ioremap_mode(unsigned long offset, unsigned long size, unsigned long flags) | |||
| 304 | #define iounmap(addr) \ | 304 | #define iounmap(addr) \ |
| 305 | __iounmap((addr)) | 305 | __iounmap((addr)) |
| 306 | 306 | ||
| 307 | static inline int check_signature(char __iomem *io_addr, | ||
| 308 | const unsigned char *signature, int length) | ||
| 309 | { | ||
| 310 | int retval = 0; | ||
| 311 | do { | ||
| 312 | if (readb(io_addr) != *signature) | ||
| 313 | goto out; | ||
| 314 | io_addr++; | ||
| 315 | signature++; | ||
| 316 | length--; | ||
| 317 | } while (length); | ||
| 318 | retval = 1; | ||
| 319 | out: | ||
| 320 | return retval; | ||
| 321 | } | ||
| 322 | |||
| 323 | /* | 307 | /* |
| 324 | * The caches on some architectures aren't dma-coherent and have need to | 308 | * The caches on some architectures aren't dma-coherent and have need to |
| 325 | * handle this in software. There are three types of operations that | 309 | * handle this in software. There are three types of operations that |
diff --git a/include/asm-sh/irq.h b/include/asm-sh/irq.h index 0e5f365aff70..28996f9c58cc 100644 --- a/include/asm-sh/irq.h +++ b/include/asm-sh/irq.h | |||
| @@ -697,13 +697,15 @@ extern int ipr_irq_demux(int irq); | |||
| 697 | 697 | ||
| 698 | #define INTC2_INTPRI_OFFSET 0x00 | 698 | #define INTC2_INTPRI_OFFSET 0x00 |
| 699 | 699 | ||
| 700 | void make_intc2_irq(unsigned int irq, | 700 | struct intc2_data { |
| 701 | unsigned int ipr_offset, unsigned int ipr_shift, | 701 | unsigned short irq; |
| 702 | unsigned int msk_offset, unsigned int msk_shift, | 702 | unsigned char ipr_offset, ipr_shift; |
| 703 | unsigned int priority); | 703 | unsigned char msk_offset, msk_shift; |
| 704 | unsigned char priority; | ||
| 705 | }; | ||
| 706 | |||
| 707 | void make_intc2_irq(struct intc2_data *); | ||
| 704 | void init_IRQ_intc2(void); | 708 | void init_IRQ_intc2(void); |
| 705 | void intc2_add_clear_irq(int irq, int (*fn)(int)); | ||
| 706 | |||
| 707 | #endif | 709 | #endif |
| 708 | 710 | ||
| 709 | extern int shmse_irq_demux(int irq); | 711 | extern int shmse_irq_demux(int irq); |
diff --git a/include/asm-sh/irq_regs.h b/include/asm-sh/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-sh/irq_regs.h | |||
| @@ -0,0 +1 @@ | |||
| #include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-sh/timer.h b/include/asm-sh/timer.h index c7ab28095ba0..5df842bcf7b6 100644 --- a/include/asm-sh/timer.h +++ b/include/asm-sh/timer.h | |||
| @@ -8,8 +8,9 @@ struct sys_timer_ops { | |||
| 8 | int (*init)(void); | 8 | int (*init)(void); |
| 9 | int (*start)(void); | 9 | int (*start)(void); |
| 10 | int (*stop)(void); | 10 | int (*stop)(void); |
| 11 | #ifndef CONFIG_GENERIC_TIME | ||
| 11 | unsigned long (*get_offset)(void); | 12 | unsigned long (*get_offset)(void); |
| 12 | unsigned long (*get_frequency)(void); | 13 | #endif |
| 13 | }; | 14 | }; |
| 14 | 15 | ||
| 15 | struct sys_timer { | 16 | struct sys_timer { |
| @@ -24,21 +25,17 @@ struct sys_timer { | |||
| 24 | extern struct sys_timer tmu_timer; | 25 | extern struct sys_timer tmu_timer; |
| 25 | extern struct sys_timer *sys_timer; | 26 | extern struct sys_timer *sys_timer; |
| 26 | 27 | ||
| 28 | #ifndef CONFIG_GENERIC_TIME | ||
| 27 | static inline unsigned long get_timer_offset(void) | 29 | static inline unsigned long get_timer_offset(void) |
| 28 | { | 30 | { |
| 29 | return sys_timer->ops->get_offset(); | 31 | return sys_timer->ops->get_offset(); |
| 30 | } | 32 | } |
| 31 | 33 | #endif | |
| 32 | static inline unsigned long get_timer_frequency(void) | ||
| 33 | { | ||
| 34 | return sys_timer->ops->get_frequency(); | ||
| 35 | } | ||
| 36 | 34 | ||
| 37 | /* arch/sh/kernel/timers/timer.c */ | 35 | /* arch/sh/kernel/timers/timer.c */ |
| 38 | struct sys_timer *get_sys_timer(void); | 36 | struct sys_timer *get_sys_timer(void); |
| 39 | 37 | ||
| 40 | /* arch/sh/kernel/time.c */ | 38 | /* arch/sh/kernel/time.c */ |
| 41 | void handle_timer_tick(struct pt_regs *); | 39 | void handle_timer_tick(void); |
| 42 | 40 | ||
| 43 | #endif /* __ASM_SH_TIMER_H */ | 41 | #endif /* __ASM_SH_TIMER_H */ |
| 44 | |||
diff --git a/include/asm-sh64/io.h b/include/asm-sh64/io.h index 252fedbb6621..14d8e7b4bf4b 100644 --- a/include/asm-sh64/io.h +++ b/include/asm-sh64/io.h | |||
| @@ -178,22 +178,6 @@ extern void iounmap(void *addr); | |||
| 178 | unsigned long onchip_remap(unsigned long addr, unsigned long size, const char* name); | 178 | unsigned long onchip_remap(unsigned long addr, unsigned long size, const char* name); |
| 179 | extern void onchip_unmap(unsigned long vaddr); | 179 | extern void onchip_unmap(unsigned long vaddr); |
| 180 | 180 | ||
| 181 | static __inline__ int check_signature(volatile void __iomem *io_addr, | ||
| 182 | const unsigned char *signature, int length) | ||
| 183 | { | ||
| 184 | int retval = 0; | ||
| 185 | do { | ||
| 186 | if (readb(io_addr) != *signature) | ||
| 187 | goto out; | ||
| 188 | io_addr++; | ||
| 189 | signature++; | ||
| 190 | length--; | ||
| 191 | } while (length); | ||
| 192 | retval = 1; | ||
| 193 | out: | ||
| 194 | return retval; | ||
| 195 | } | ||
| 196 | |||
| 197 | /* | 181 | /* |
| 198 | * The caches on some architectures aren't dma-coherent and have need to | 182 | * The caches on some architectures aren't dma-coherent and have need to |
| 199 | * handle this in software. There are three types of operations that | 183 | * handle this in software. There are three types of operations that |
diff --git a/include/asm-sparc/elf.h b/include/asm-sparc/elf.h index 83a3dd15a6ed..aaf6ef40ee2f 100644 --- a/include/asm-sparc/elf.h +++ b/include/asm-sparc/elf.h | |||
| @@ -8,11 +8,6 @@ | |||
| 8 | 8 | ||
| 9 | #include <asm/ptrace.h> | 9 | #include <asm/ptrace.h> |
| 10 | 10 | ||
| 11 | #ifdef __KERNEL__ | ||
| 12 | #include <asm/mbus.h> | ||
| 13 | #include <asm/uaccess.h> | ||
| 14 | #endif | ||
| 15 | |||
| 16 | /* | 11 | /* |
| 17 | * Sparc section types | 12 | * Sparc section types |
| 18 | */ | 13 | */ |
| @@ -77,6 +72,23 @@ typedef unsigned long elf_greg_t; | |||
| 77 | #define ELF_NGREG 38 | 72 | #define ELF_NGREG 38 |
| 78 | typedef elf_greg_t elf_gregset_t[ELF_NGREG]; | 73 | typedef elf_greg_t elf_gregset_t[ELF_NGREG]; |
| 79 | 74 | ||
| 75 | typedef struct { | ||
| 76 | union { | ||
| 77 | unsigned long pr_regs[32]; | ||
| 78 | double pr_dregs[16]; | ||
| 79 | } pr_fr; | ||
| 80 | unsigned long __unused; | ||
| 81 | unsigned long pr_fsr; | ||
| 82 | unsigned char pr_qcnt; | ||
| 83 | unsigned char pr_q_entrysize; | ||
| 84 | unsigned char pr_en; | ||
| 85 | unsigned int pr_q[64]; | ||
| 86 | } elf_fpregset_t; | ||
| 87 | |||
| 88 | #ifdef __KERNEL__ | ||
| 89 | #include <asm/mbus.h> | ||
| 90 | #include <asm/uaccess.h> | ||
| 91 | |||
| 80 | /* Format is: | 92 | /* Format is: |
| 81 | * G0 --> G7 | 93 | * G0 --> G7 |
| 82 | * O0 --> O7 | 94 | * O0 --> O7 |
| @@ -99,20 +111,7 @@ do { unsigned long *dest = &(__elf_regs[0]); \ | |||
| 99 | dest[34] = src->npc; \ | 111 | dest[34] = src->npc; \ |
| 100 | dest[35] = src->y; \ | 112 | dest[35] = src->y; \ |
| 101 | dest[36] = dest[37] = 0; /* XXX */ \ | 113 | dest[36] = dest[37] = 0; /* XXX */ \ |
| 102 | } while(0); /* Janitors: Don't touch this colon. */ | 114 | } while(0); /* Janitors: Don't touch this semicolon. */ |
| 103 | |||
| 104 | typedef struct { | ||
| 105 | union { | ||
| 106 | unsigned long pr_regs[32]; | ||
| 107 | double pr_dregs[16]; | ||
| 108 | } pr_fr; | ||
| 109 | unsigned long __unused; | ||
| 110 | unsigned long pr_fsr; | ||
| 111 | unsigned char pr_qcnt; | ||
| 112 | unsigned char pr_q_entrysize; | ||
| 113 | unsigned char pr_en; | ||
| 114 | unsigned int pr_q[64]; | ||
| 115 | } elf_fpregset_t; | ||
| 116 | 115 | ||
| 117 | #define ELF_CORE_COPY_TASK_REGS(__tsk, __elf_regs) \ | 116 | #define ELF_CORE_COPY_TASK_REGS(__tsk, __elf_regs) \ |
| 118 | ({ ELF_CORE_COPY_REGS((*(__elf_regs)), (__tsk)->thread.kregs); 1; }) | 117 | ({ ELF_CORE_COPY_REGS((*(__elf_regs)), (__tsk)->thread.kregs); 1; }) |
| @@ -165,8 +164,8 @@ typedef struct { | |||
| 165 | 164 | ||
| 166 | #define ELF_PLATFORM (NULL) | 165 | #define ELF_PLATFORM (NULL) |
| 167 | 166 | ||
| 168 | #ifdef __KERNEL__ | ||
| 169 | #define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX) | 167 | #define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX) |
| 170 | #endif | 168 | |
| 169 | #endif /* __KERNEL__ */ | ||
| 171 | 170 | ||
| 172 | #endif /* !(__ASMSPARC_ELF_H) */ | 171 | #endif /* !(__ASMSPARC_ELF_H) */ |
diff --git a/include/asm-sparc/floppy.h b/include/asm-sparc/floppy.h index c53b332c850a..9073c84218ce 100644 --- a/include/asm-sparc/floppy.h +++ b/include/asm-sparc/floppy.h | |||
| @@ -262,7 +262,7 @@ static __inline__ void sun_fd_enable_dma(void) | |||
| 262 | } | 262 | } |
| 263 | 263 | ||
| 264 | /* Our low-level entry point in arch/sparc/kernel/entry.S */ | 264 | /* Our low-level entry point in arch/sparc/kernel/entry.S */ |
| 265 | irqreturn_t floppy_hardint(int irq, void *unused, struct pt_regs *regs); | 265 | irqreturn_t floppy_hardint(int irq, void *unused); |
| 266 | 266 | ||
| 267 | static int sun_fd_request_irq(void) | 267 | static int sun_fd_request_irq(void) |
| 268 | { | 268 | { |
diff --git a/include/asm-sparc/irq.h b/include/asm-sparc/irq.h index 3141ddfea97d..ff520ea97473 100644 --- a/include/asm-sparc/irq.h +++ b/include/asm-sparc/irq.h | |||
| @@ -76,8 +76,8 @@ static inline void load_profile_irq(int cpu, int limit) | |||
| 76 | BTFIXUP_CALL(load_profile_irq)(cpu, limit); | 76 | BTFIXUP_CALL(load_profile_irq)(cpu, limit); |
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | extern void (*sparc_init_timers)(irqreturn_t (*lvl10_irq)(int, void *, struct pt_regs *)); | 79 | extern void (*sparc_init_timers)(irq_handler_t lvl10_irq); |
| 80 | extern void claim_ticker14(irqreturn_t (*irq_handler)(int, void *, struct pt_regs *), | 80 | extern void claim_ticker14(irq_handler_t irq_handler, |
| 81 | int irq, | 81 | int irq, |
| 82 | unsigned int timeout); | 82 | unsigned int timeout); |
| 83 | 83 | ||
| @@ -91,7 +91,7 @@ BTFIXUPDEF_CALL(void, set_irq_udt, int) | |||
| 91 | #define set_irq_udt(cpu) BTFIXUP_CALL(set_irq_udt)(cpu) | 91 | #define set_irq_udt(cpu) BTFIXUP_CALL(set_irq_udt)(cpu) |
| 92 | #endif | 92 | #endif |
| 93 | 93 | ||
| 94 | extern int request_fast_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigned long flags, __const__ char *devname); | 94 | extern int request_fast_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, __const__ char *devname); |
| 95 | 95 | ||
| 96 | /* On the sun4m, just like the timers, we have both per-cpu and master | 96 | /* On the sun4m, just like the timers, we have both per-cpu and master |
| 97 | * interrupt registers. | 97 | * interrupt registers. |
diff --git a/include/asm-sparc/irq_regs.h b/include/asm-sparc/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-sparc/irq_regs.h | |||
| @@ -0,0 +1 @@ | |||
| #include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-sparc/spinlock.h b/include/asm-sparc/spinlock.h index 557d08959d2f..de2249b267c6 100644 --- a/include/asm-sparc/spinlock.h +++ b/include/asm-sparc/spinlock.h | |||
| @@ -129,6 +129,7 @@ static inline void __raw_write_lock(raw_rwlock_t *rw) | |||
| 129 | : /* no outputs */ | 129 | : /* no outputs */ |
| 130 | : "r" (lp) | 130 | : "r" (lp) |
| 131 | : "g2", "g4", "memory", "cc"); | 131 | : "g2", "g4", "memory", "cc"); |
| 132 | *(volatile __u32 *)&lp->lock = ~0U; | ||
| 132 | } | 133 | } |
| 133 | 134 | ||
| 134 | static inline int __raw_write_trylock(raw_rwlock_t *rw) | 135 | static inline int __raw_write_trylock(raw_rwlock_t *rw) |
| @@ -144,15 +145,40 @@ static inline int __raw_write_trylock(raw_rwlock_t *rw) | |||
| 144 | val = rw->lock & ~0xff; | 145 | val = rw->lock & ~0xff; |
| 145 | if (val) | 146 | if (val) |
| 146 | ((volatile u8*)&rw->lock)[3] = 0; | 147 | ((volatile u8*)&rw->lock)[3] = 0; |
| 148 | else | ||
| 149 | *(volatile u32*)&rw->lock = ~0U; | ||
| 147 | } | 150 | } |
| 148 | 151 | ||
| 149 | return (val == 0); | 152 | return (val == 0); |
| 150 | } | 153 | } |
| 151 | 154 | ||
| 155 | static inline int __read_trylock(raw_rwlock_t *rw) | ||
| 156 | { | ||
| 157 | register raw_rwlock_t *lp asm("g1"); | ||
| 158 | register int res asm("o0"); | ||
| 159 | lp = rw; | ||
| 160 | __asm__ __volatile__( | ||
| 161 | "mov %%o7, %%g4\n\t" | ||
| 162 | "call ___rw_read_try\n\t" | ||
| 163 | " ldstub [%%g1 + 3], %%g2\n" | ||
| 164 | : "=r" (res) | ||
| 165 | : "r" (lp) | ||
| 166 | : "g2", "g4", "memory", "cc"); | ||
| 167 | return res; | ||
| 168 | } | ||
| 169 | |||
| 170 | #define __raw_read_trylock(lock) \ | ||
| 171 | ({ unsigned long flags; \ | ||
| 172 | int res; \ | ||
| 173 | local_irq_save(flags); \ | ||
| 174 | res = __read_trylock(lock); \ | ||
| 175 | local_irq_restore(flags); \ | ||
| 176 | res; \ | ||
| 177 | }) | ||
| 178 | |||
| 152 | #define __raw_write_unlock(rw) do { (rw)->lock = 0; } while(0) | 179 | #define __raw_write_unlock(rw) do { (rw)->lock = 0; } while(0) |
| 153 | 180 | ||
| 154 | #define __raw_spin_lock_flags(lock, flags) __raw_spin_lock(lock) | 181 | #define __raw_spin_lock_flags(lock, flags) __raw_spin_lock(lock) |
| 155 | #define __raw_read_trylock(lock) generic__raw_read_trylock(lock) | ||
| 156 | 182 | ||
| 157 | #define _raw_spin_relax(lock) cpu_relax() | 183 | #define _raw_spin_relax(lock) cpu_relax() |
| 158 | #define _raw_read_relax(lock) cpu_relax() | 184 | #define _raw_read_relax(lock) cpu_relax() |
diff --git a/include/asm-sparc64/compat_signal.h b/include/asm-sparc64/compat_signal.h index 7aefa301321e..b759eab9b51c 100644 --- a/include/asm-sparc64/compat_signal.h +++ b/include/asm-sparc64/compat_signal.h | |||
| @@ -1,7 +1,6 @@ | |||
| 1 | #ifndef _COMPAT_SIGNAL_H | 1 | #ifndef _COMPAT_SIGNAL_H |
| 2 | #define _COMPAT_SIGNAL_H | 2 | #define _COMPAT_SIGNAL_H |
| 3 | 3 | ||
| 4 | #include <linux/config.h> | ||
| 5 | #include <linux/compat.h> | 4 | #include <linux/compat.h> |
| 6 | #include <asm/signal.h> | 5 | #include <asm/signal.h> |
| 7 | 6 | ||
diff --git a/include/asm-sparc64/floppy.h b/include/asm-sparc64/floppy.h index abf150038019..dbe033e494db 100644 --- a/include/asm-sparc64/floppy.h +++ b/include/asm-sparc64/floppy.h | |||
| @@ -208,7 +208,7 @@ static void sun_fd_enable_dma(void) | |||
| 208 | pdma_areasize = pdma_size; | 208 | pdma_areasize = pdma_size; |
| 209 | } | 209 | } |
| 210 | 210 | ||
| 211 | irqreturn_t sparc_floppy_irq(int irq, void *dev_cookie, struct pt_regs *regs) | 211 | irqreturn_t sparc_floppy_irq(int irq, void *dev_cookie) |
| 212 | { | 212 | { |
| 213 | if (likely(doing_pdma)) { | 213 | if (likely(doing_pdma)) { |
| 214 | void __iomem *stat = (void __iomem *) fdc_status; | 214 | void __iomem *stat = (void __iomem *) fdc_status; |
| @@ -255,7 +255,7 @@ irqreturn_t sparc_floppy_irq(int irq, void *dev_cookie, struct pt_regs *regs) | |||
| 255 | } | 255 | } |
| 256 | 256 | ||
| 257 | main_interrupt: | 257 | main_interrupt: |
| 258 | return floppy_interrupt(irq, dev_cookie, regs); | 258 | return floppy_interrupt(irq, dev_cookie); |
| 259 | } | 259 | } |
| 260 | 260 | ||
| 261 | static int sun_fd_request_irq(void) | 261 | static int sun_fd_request_irq(void) |
| @@ -311,7 +311,7 @@ struct sun_pci_dma_op { | |||
| 311 | static struct sun_pci_dma_op sun_pci_dma_current = { -1U, 0, 0, NULL}; | 311 | static struct sun_pci_dma_op sun_pci_dma_current = { -1U, 0, 0, NULL}; |
| 312 | static struct sun_pci_dma_op sun_pci_dma_pending = { -1U, 0, 0, NULL}; | 312 | static struct sun_pci_dma_op sun_pci_dma_pending = { -1U, 0, 0, NULL}; |
| 313 | 313 | ||
| 314 | extern irqreturn_t floppy_interrupt(int irq, void *dev_id, struct pt_regs *regs); | 314 | extern irqreturn_t floppy_interrupt(int irq, void *dev_id); |
| 315 | 315 | ||
| 316 | static unsigned char sun_pci_fd_inb(unsigned long port) | 316 | static unsigned char sun_pci_fd_inb(unsigned long port) |
| 317 | { | 317 | { |
| @@ -446,7 +446,7 @@ static int sun_pci_fd_eject(int drive) | |||
| 446 | 446 | ||
| 447 | void sun_pci_fd_dma_callback(struct ebus_dma_info *p, int event, void *cookie) | 447 | void sun_pci_fd_dma_callback(struct ebus_dma_info *p, int event, void *cookie) |
| 448 | { | 448 | { |
| 449 | floppy_interrupt(0, NULL, NULL); | 449 | floppy_interrupt(0, NULL); |
| 450 | } | 450 | } |
| 451 | 451 | ||
| 452 | /* | 452 | /* |
diff --git a/include/asm-sparc64/io.h b/include/asm-sparc64/io.h index 0056770e83ad..30b912d8e8bc 100644 --- a/include/asm-sparc64/io.h +++ b/include/asm-sparc64/io.h | |||
| @@ -440,21 +440,6 @@ _memcpy_toio(volatile void __iomem *dst, const void *src, __kernel_size_t n) | |||
| 440 | 440 | ||
| 441 | #define memcpy_toio(d,s,sz) _memcpy_toio(d,s,sz) | 441 | #define memcpy_toio(d,s,sz) _memcpy_toio(d,s,sz) |
| 442 | 442 | ||
| 443 | static inline int check_signature(void __iomem *io_addr, | ||
| 444 | const unsigned char *signature, | ||
| 445 | int length) | ||
| 446 | { | ||
| 447 | int retval = 0; | ||
| 448 | do { | ||
| 449 | if (readb(io_addr) != *signature++) | ||
| 450 | goto out; | ||
| 451 | io_addr++; | ||
| 452 | } while (--length); | ||
| 453 | retval = 1; | ||
| 454 | out: | ||
| 455 | return retval; | ||
| 456 | } | ||
| 457 | |||
| 458 | #define mmiowb() | 443 | #define mmiowb() |
| 459 | 444 | ||
| 460 | #ifdef __KERNEL__ | 445 | #ifdef __KERNEL__ |
diff --git a/include/asm-sparc64/irq_regs.h b/include/asm-sparc64/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-sparc64/irq_regs.h | |||
| @@ -0,0 +1 @@ | |||
| #include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-um/archparam-ppc.h b/include/asm-um/archparam-ppc.h index 172cd6ffacc4..4269d8a37b4f 100644 --- a/include/asm-um/archparam-ppc.h +++ b/include/asm-um/archparam-ppc.h | |||
| @@ -1,15 +1,6 @@ | |||
| 1 | #ifndef __UM_ARCHPARAM_PPC_H | 1 | #ifndef __UM_ARCHPARAM_PPC_H |
| 2 | #define __UM_ARCHPARAM_PPC_H | 2 | #define __UM_ARCHPARAM_PPC_H |
| 3 | 3 | ||
| 4 | /********* Bits for asm-um/hw_irq.h **********/ | ||
| 5 | |||
| 6 | struct hw_interrupt_type; | ||
| 7 | |||
| 8 | /********* Bits for asm-um/hardirq.h **********/ | ||
| 9 | |||
| 10 | #define irq_enter(cpu, irq) hardirq_enter(cpu) | ||
| 11 | #define irq_exit(cpu, irq) hardirq_exit(cpu) | ||
| 12 | |||
| 13 | /********* Bits for asm-um/string.h **********/ | 4 | /********* Bits for asm-um/string.h **********/ |
| 14 | 5 | ||
| 15 | #define __HAVE_ARCH_STRRCHR | 6 | #define __HAVE_ARCH_STRRCHR |
diff --git a/include/asm-um/irq_regs.h b/include/asm-um/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-um/irq_regs.h | |||
| @@ -0,0 +1 @@ | |||
| #include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-x86_64/alternative-asm.i b/include/asm-x86_64/alternative-asm.i index e4041f4fa4dc..0b3f1a2bb2cb 100644 --- a/include/asm-x86_64/alternative-asm.i +++ b/include/asm-x86_64/alternative-asm.i | |||
| @@ -1,5 +1,3 @@ | |||
| 1 | #include <linux/config.h> | ||
| 2 | |||
| 3 | #ifdef CONFIG_SMP | 1 | #ifdef CONFIG_SMP |
| 4 | .macro LOCK_PREFIX | 2 | .macro LOCK_PREFIX |
| 5 | 1: lock | 3 | 1: lock |
diff --git a/include/asm-x86_64/apic.h b/include/asm-x86_64/apic.h index 9e66d32330c9..e81d0f289f0b 100644 --- a/include/asm-x86_64/apic.h +++ b/include/asm-x86_64/apic.h | |||
| @@ -77,7 +77,7 @@ extern void sync_Arb_IDs (void); | |||
| 77 | extern void init_bsp_APIC (void); | 77 | extern void init_bsp_APIC (void); |
| 78 | extern void setup_local_APIC (void); | 78 | extern void setup_local_APIC (void); |
| 79 | extern void init_apic_mappings (void); | 79 | extern void init_apic_mappings (void); |
| 80 | extern void smp_local_timer_interrupt (struct pt_regs * regs); | 80 | extern void smp_local_timer_interrupt (void); |
| 81 | extern void setup_boot_APIC_clock (void); | 81 | extern void setup_boot_APIC_clock (void); |
| 82 | extern void setup_secondary_APIC_clock (void); | 82 | extern void setup_secondary_APIC_clock (void); |
| 83 | extern int APIC_init_uniprocessor (void); | 83 | extern int APIC_init_uniprocessor (void); |
diff --git a/include/asm-x86_64/floppy.h b/include/asm-x86_64/floppy.h index 32ff5d132714..6ea13c3806f3 100644 --- a/include/asm-x86_64/floppy.h +++ b/include/asm-x86_64/floppy.h | |||
| @@ -51,7 +51,7 @@ static char *virtual_dma_addr; | |||
| 51 | static int virtual_dma_mode; | 51 | static int virtual_dma_mode; |
| 52 | static int doing_pdma; | 52 | static int doing_pdma; |
| 53 | 53 | ||
| 54 | static irqreturn_t floppy_hardint(int irq, void *dev_id, struct pt_regs * regs) | 54 | static irqreturn_t floppy_hardint(int irq, void *dev_id) |
| 55 | { | 55 | { |
| 56 | register unsigned char st; | 56 | register unsigned char st; |
| 57 | 57 | ||
| @@ -63,7 +63,7 @@ static irqreturn_t floppy_hardint(int irq, void *dev_id, struct pt_regs * regs) | |||
| 63 | static int dma_wait=0; | 63 | static int dma_wait=0; |
| 64 | #endif | 64 | #endif |
| 65 | if (!doing_pdma) | 65 | if (!doing_pdma) |
| 66 | return floppy_interrupt(irq, dev_id, regs); | 66 | return floppy_interrupt(irq, dev_id); |
| 67 | 67 | ||
| 68 | #ifdef TRACE_FLPY_INT | 68 | #ifdef TRACE_FLPY_INT |
| 69 | if(!calls) | 69 | if(!calls) |
| @@ -106,7 +106,7 @@ static irqreturn_t floppy_hardint(int irq, void *dev_id, struct pt_regs * regs) | |||
| 106 | dma_wait=0; | 106 | dma_wait=0; |
| 107 | #endif | 107 | #endif |
| 108 | doing_pdma = 0; | 108 | doing_pdma = 0; |
| 109 | floppy_interrupt(irq, dev_id, regs); | 109 | floppy_interrupt(irq, dev_id); |
| 110 | return IRQ_HANDLED; | 110 | return IRQ_HANDLED; |
| 111 | } | 111 | } |
| 112 | #ifdef TRACE_FLPY_INT | 112 | #ifdef TRACE_FLPY_INT |
diff --git a/include/asm-x86_64/genapic.h b/include/asm-x86_64/genapic.h index 81e714665344..a0e9a4b93484 100644 --- a/include/asm-x86_64/genapic.h +++ b/include/asm-x86_64/genapic.h | |||
| @@ -18,6 +18,7 @@ struct genapic { | |||
| 18 | u32 int_dest_mode; | 18 | u32 int_dest_mode; |
| 19 | int (*apic_id_registered)(void); | 19 | int (*apic_id_registered)(void); |
| 20 | cpumask_t (*target_cpus)(void); | 20 | cpumask_t (*target_cpus)(void); |
| 21 | cpumask_t (*vector_allocation_domain)(int cpu); | ||
| 21 | void (*init_apic_ldr)(void); | 22 | void (*init_apic_ldr)(void); |
| 22 | /* ipi */ | 23 | /* ipi */ |
| 23 | void (*send_IPI_mask)(cpumask_t mask, int vector); | 24 | void (*send_IPI_mask)(cpumask_t mask, int vector); |
diff --git a/include/asm-x86_64/hardirq.h b/include/asm-x86_64/hardirq.h index 64a65ce2f41f..95d5e090ed89 100644 --- a/include/asm-x86_64/hardirq.h +++ b/include/asm-x86_64/hardirq.h | |||
| @@ -6,6 +6,9 @@ | |||
| 6 | #include <asm/pda.h> | 6 | #include <asm/pda.h> |
| 7 | #include <asm/apic.h> | 7 | #include <asm/apic.h> |
| 8 | 8 | ||
| 9 | /* We can have at most NR_VECTORS irqs routed to a cpu at a time */ | ||
| 10 | #define MAX_HARDIRQS_PER_CPU NR_VECTORS | ||
| 11 | |||
| 9 | #define __ARCH_IRQ_STAT 1 | 12 | #define __ARCH_IRQ_STAT 1 |
| 10 | 13 | ||
| 11 | #define local_softirq_pending() read_pda(__softirq_pending) | 14 | #define local_softirq_pending() read_pda(__softirq_pending) |
diff --git a/include/asm-x86_64/hw_irq.h b/include/asm-x86_64/hw_irq.h index 48a4a5364e85..792dd52fcd70 100644 --- a/include/asm-x86_64/hw_irq.h +++ b/include/asm-x86_64/hw_irq.h | |||
| @@ -19,8 +19,7 @@ | |||
| 19 | #include <asm/irq.h> | 19 | #include <asm/irq.h> |
| 20 | #include <linux/profile.h> | 20 | #include <linux/profile.h> |
| 21 | #include <linux/smp.h> | 21 | #include <linux/smp.h> |
| 22 | 22 | #include <linux/percpu.h> | |
| 23 | struct hw_interrupt_type; | ||
| 24 | #endif | 23 | #endif |
| 25 | 24 | ||
| 26 | #define NMI_VECTOR 0x02 | 25 | #define NMI_VECTOR 0x02 |
| @@ -75,9 +74,8 @@ struct hw_interrupt_type; | |||
| 75 | 74 | ||
| 76 | 75 | ||
| 77 | #ifndef __ASSEMBLY__ | 76 | #ifndef __ASSEMBLY__ |
| 78 | extern u8 irq_vector[NR_IRQ_VECTORS]; | 77 | typedef int vector_irq_t[NR_VECTORS]; |
| 79 | #define IO_APIC_VECTOR(irq) (irq_vector[irq]) | 78 | DECLARE_PER_CPU(vector_irq_t, vector_irq); |
| 80 | #define AUTO_ASSIGN -1 | ||
| 81 | 79 | ||
| 82 | /* | 80 | /* |
| 83 | * Various low-level irq details needed by irq.c, process.c, | 81 | * Various low-level irq details needed by irq.c, process.c, |
diff --git a/include/asm-x86_64/hypertransport.h b/include/asm-x86_64/hypertransport.h new file mode 100644 index 000000000000..c16c6ff4bdd7 --- /dev/null +++ b/include/asm-x86_64/hypertransport.h | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | #ifndef ASM_HYPERTRANSPORT_H | ||
| 2 | #define ASM_HYPERTRANSPORT_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * Constants for x86 Hypertransport Interrupts. | ||
| 6 | */ | ||
| 7 | |||
| 8 | #define HT_IRQ_LOW_BASE 0xf8000000 | ||
| 9 | |||
| 10 | #define HT_IRQ_LOW_VECTOR_SHIFT 16 | ||
| 11 | #define HT_IRQ_LOW_VECTOR_MASK 0x00ff0000 | ||
| 12 | #define HT_IRQ_LOW_VECTOR(v) (((v) << HT_IRQ_LOW_VECTOR_SHIFT) & HT_IRQ_LOW_VECTOR_MASK) | ||
| 13 | |||
| 14 | #define HT_IRQ_LOW_DEST_ID_SHIFT 8 | ||
| 15 | #define HT_IRQ_LOW_DEST_ID_MASK 0x0000ff00 | ||
| 16 | #define HT_IRQ_LOW_DEST_ID(v) (((v) << HT_IRQ_LOW_DEST_ID_SHIFT) & HT_IRQ_LOW_DEST_ID_MASK) | ||
| 17 | |||
| 18 | #define HT_IRQ_LOW_DM_PHYSICAL 0x0000000 | ||
| 19 | #define HT_IRQ_LOW_DM_LOGICAL 0x0000040 | ||
| 20 | |||
| 21 | #define HT_IRQ_LOW_RQEOI_EDGE 0x0000000 | ||
| 22 | #define HT_IRQ_LOW_RQEOI_LEVEL 0x0000020 | ||
| 23 | |||
| 24 | |||
| 25 | #define HT_IRQ_LOW_MT_FIXED 0x0000000 | ||
| 26 | #define HT_IRQ_LOW_MT_ARBITRATED 0x0000004 | ||
| 27 | #define HT_IRQ_LOW_MT_SMI 0x0000008 | ||
| 28 | #define HT_IRQ_LOW_MT_NMI 0x000000c | ||
| 29 | #define HT_IRQ_LOW_MT_INIT 0x0000010 | ||
| 30 | #define HT_IRQ_LOW_MT_STARTUP 0x0000014 | ||
| 31 | #define HT_IRQ_LOW_MT_EXTINT 0x0000018 | ||
| 32 | #define HT_IRQ_LOW_MT_LINT1 0x000008c | ||
| 33 | #define HT_IRQ_LOW_MT_LINT0 0x0000098 | ||
| 34 | |||
| 35 | #define HT_IRQ_LOW_IRQ_MASKED 0x0000001 | ||
| 36 | |||
| 37 | |||
| 38 | #define HT_IRQ_HIGH_DEST_ID_SHIFT 0 | ||
| 39 | #define HT_IRQ_HIGH_DEST_ID_MASK 0x00ffffff | ||
| 40 | #define HT_IRQ_HIGH_DEST_ID(v) ((((v) >> 8) << HT_IRQ_HIGH_DEST_ID_SHIFT) & HT_IRQ_HIGH_DEST_ID_MASK) | ||
| 41 | |||
| 42 | #endif /* ASM_HYPERTRANSPORT_H */ | ||
diff --git a/include/asm-x86_64/io.h b/include/asm-x86_64/io.h index 70e91fe76344..6ee9fadaaacb 100644 --- a/include/asm-x86_64/io.h +++ b/include/asm-x86_64/io.h | |||
| @@ -254,33 +254,6 @@ void memset_io(volatile void __iomem *a, int b, size_t c); | |||
| 254 | 254 | ||
| 255 | #define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(void *)(b),(c),(d)) | 255 | #define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(void *)(b),(c),(d)) |
| 256 | 256 | ||
| 257 | /** | ||
| 258 | * check_signature - find BIOS signatures | ||
| 259 | * @io_addr: mmio address to check | ||
| 260 | * @signature: signature block | ||
| 261 | * @length: length of signature | ||
| 262 | * | ||
| 263 | * Perform a signature comparison with the mmio address io_addr. This | ||
| 264 | * address should have been obtained by ioremap. | ||
| 265 | * Returns 1 on a match. | ||
| 266 | */ | ||
| 267 | |||
| 268 | static inline int check_signature(void __iomem *io_addr, | ||
| 269 | const unsigned char *signature, int length) | ||
| 270 | { | ||
| 271 | int retval = 0; | ||
| 272 | do { | ||
| 273 | if (readb(io_addr) != *signature) | ||
| 274 | goto out; | ||
| 275 | io_addr++; | ||
| 276 | signature++; | ||
| 277 | length--; | ||
| 278 | } while (length); | ||
| 279 | retval = 1; | ||
| 280 | out: | ||
| 281 | return retval; | ||
| 282 | } | ||
| 283 | |||
| 284 | /* Nothing to do */ | 257 | /* Nothing to do */ |
| 285 | 258 | ||
| 286 | #define dma_cache_inv(_start,_size) do { } while (0) | 259 | #define dma_cache_inv(_start,_size) do { } while (0) |
diff --git a/include/asm-x86_64/io_apic.h b/include/asm-x86_64/io_apic.h index 5d1b5c68e36e..171ec2dc8c04 100644 --- a/include/asm-x86_64/io_apic.h +++ b/include/asm-x86_64/io_apic.h | |||
| @@ -10,46 +10,6 @@ | |||
| 10 | * Copyright (C) 1997, 1998, 1999, 2000 Ingo Molnar | 10 | * Copyright (C) 1997, 1998, 1999, 2000 Ingo Molnar |
| 11 | */ | 11 | */ |
| 12 | 12 | ||
| 13 | #ifdef CONFIG_PCI_MSI | ||
| 14 | static inline int use_pci_vector(void) {return 1;} | ||
| 15 | static inline void disable_edge_ioapic_vector(unsigned int vector) { } | ||
| 16 | static inline void mask_and_ack_level_ioapic_vector(unsigned int vector) { } | ||
| 17 | static inline void end_edge_ioapic_vector (unsigned int vector) { } | ||
| 18 | #define startup_level_ioapic startup_level_ioapic_vector | ||
| 19 | #define shutdown_level_ioapic mask_IO_APIC_vector | ||
| 20 | #define enable_level_ioapic unmask_IO_APIC_vector | ||
| 21 | #define disable_level_ioapic mask_IO_APIC_vector | ||
| 22 | #define mask_and_ack_level_ioapic mask_and_ack_level_ioapic_vector | ||
| 23 | #define end_level_ioapic end_level_ioapic_vector | ||
| 24 | #define set_ioapic_affinity set_ioapic_affinity_vector | ||
| 25 | |||
| 26 | #define startup_edge_ioapic startup_edge_ioapic_vector | ||
| 27 | #define shutdown_edge_ioapic disable_edge_ioapic_vector | ||
| 28 | #define enable_edge_ioapic unmask_IO_APIC_vector | ||
| 29 | #define disable_edge_ioapic disable_edge_ioapic_vector | ||
| 30 | #define ack_edge_ioapic ack_edge_ioapic_vector | ||
| 31 | #define end_edge_ioapic end_edge_ioapic_vector | ||
| 32 | #else | ||
| 33 | static inline int use_pci_vector(void) {return 0;} | ||
| 34 | static inline void disable_edge_ioapic_irq(unsigned int irq) { } | ||
| 35 | static inline void mask_and_ack_level_ioapic_irq(unsigned int irq) { } | ||
| 36 | static inline void end_edge_ioapic_irq (unsigned int irq) { } | ||
| 37 | #define startup_level_ioapic startup_level_ioapic_irq | ||
| 38 | #define shutdown_level_ioapic mask_IO_APIC_irq | ||
| 39 | #define enable_level_ioapic unmask_IO_APIC_irq | ||
| 40 | #define disable_level_ioapic mask_IO_APIC_irq | ||
| 41 | #define mask_and_ack_level_ioapic mask_and_ack_level_ioapic_irq | ||
| 42 | #define end_level_ioapic end_level_ioapic_irq | ||
| 43 | #define set_ioapic_affinity set_ioapic_affinity_irq | ||
| 44 | |||
| 45 | #define startup_edge_ioapic startup_edge_ioapic_irq | ||
| 46 | #define shutdown_edge_ioapic disable_edge_ioapic_irq | ||
| 47 | #define enable_edge_ioapic unmask_IO_APIC_irq | ||
| 48 | #define disable_edge_ioapic disable_edge_ioapic_irq | ||
| 49 | #define ack_edge_ioapic ack_edge_ioapic_irq | ||
| 50 | #define end_edge_ioapic end_edge_ioapic_irq | ||
| 51 | #endif | ||
| 52 | |||
| 53 | #define APIC_MISMATCH_DEBUG | 13 | #define APIC_MISMATCH_DEBUG |
| 54 | 14 | ||
| 55 | #define IO_APIC_BASE(idx) \ | 15 | #define IO_APIC_BASE(idx) \ |
| @@ -202,13 +162,10 @@ extern int skip_ioapic_setup; | |||
| 202 | extern int io_apic_get_version (int ioapic); | 162 | extern int io_apic_get_version (int ioapic); |
| 203 | extern int io_apic_get_redir_entries (int ioapic); | 163 | extern int io_apic_get_redir_entries (int ioapic); |
| 204 | extern int io_apic_set_pci_routing (int ioapic, int pin, int irq, int, int); | 164 | extern int io_apic_set_pci_routing (int ioapic, int pin, int irq, int, int); |
| 205 | extern int timer_uses_ioapic_pin_0; | ||
| 206 | #endif | 165 | #endif |
| 207 | 166 | ||
| 208 | extern int sis_apic_bug; /* dummy */ | 167 | extern int sis_apic_bug; /* dummy */ |
| 209 | 168 | ||
| 210 | extern int assign_irq_vector(int irq); | ||
| 211 | |||
| 212 | void enable_NMI_through_LVT0 (void * dummy); | 169 | void enable_NMI_through_LVT0 (void * dummy); |
| 213 | 170 | ||
| 214 | extern spinlock_t i8259A_lock; | 171 | extern spinlock_t i8259A_lock; |
diff --git a/include/asm-x86_64/irq.h b/include/asm-x86_64/irq.h index 43469d8ab71a..5006c6e75656 100644 --- a/include/asm-x86_64/irq.h +++ b/include/asm-x86_64/irq.h | |||
| @@ -31,13 +31,8 @@ | |||
| 31 | 31 | ||
| 32 | #define FIRST_SYSTEM_VECTOR 0xef /* duplicated in hw_irq.h */ | 32 | #define FIRST_SYSTEM_VECTOR 0xef /* duplicated in hw_irq.h */ |
| 33 | 33 | ||
| 34 | #ifdef CONFIG_PCI_MSI | 34 | #define NR_IRQS (NR_VECTORS + (32 *NR_CPUS)) |
| 35 | #define NR_IRQS FIRST_SYSTEM_VECTOR | ||
| 36 | #define NR_IRQ_VECTORS NR_IRQS | 35 | #define NR_IRQ_VECTORS NR_IRQS |
| 37 | #else | ||
| 38 | #define NR_IRQS 224 | ||
| 39 | #define NR_IRQ_VECTORS (32 * NR_CPUS) | ||
| 40 | #endif | ||
| 41 | 36 | ||
| 42 | static __inline__ int irq_canonicalize(int irq) | 37 | static __inline__ int irq_canonicalize(int irq) |
| 43 | { | 38 | { |
diff --git a/include/asm-x86_64/irq_regs.h b/include/asm-x86_64/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-x86_64/irq_regs.h | |||
| @@ -0,0 +1 @@ | |||
| #include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-x86_64/mach_apic.h b/include/asm-x86_64/mach_apic.h index d33422450c00..7b7115a0c1c9 100644 --- a/include/asm-x86_64/mach_apic.h +++ b/include/asm-x86_64/mach_apic.h | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #define INT_DELIVERY_MODE (genapic->int_delivery_mode) | 17 | #define INT_DELIVERY_MODE (genapic->int_delivery_mode) |
| 18 | #define INT_DEST_MODE (genapic->int_dest_mode) | 18 | #define INT_DEST_MODE (genapic->int_dest_mode) |
| 19 | #define TARGET_CPUS (genapic->target_cpus()) | 19 | #define TARGET_CPUS (genapic->target_cpus()) |
| 20 | #define vector_allocation_domain (genapic->vector_allocation_domain) | ||
| 20 | #define apic_id_registered (genapic->apic_id_registered) | 21 | #define apic_id_registered (genapic->apic_id_registered) |
| 21 | #define init_apic_ldr (genapic->init_apic_ldr) | 22 | #define init_apic_ldr (genapic->init_apic_ldr) |
| 22 | #define send_IPI_mask (genapic->send_IPI_mask) | 23 | #define send_IPI_mask (genapic->send_IPI_mask) |
diff --git a/include/asm-x86_64/msi.h b/include/asm-x86_64/msi.h deleted file mode 100644 index 3ad2346624b2..000000000000 --- a/include/asm-x86_64/msi.h +++ /dev/null | |||
| @@ -1,24 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2003-2004 Intel | ||
| 3 | * Copyright (C) Tom Long Nguyen (tom.l.nguyen@intel.com) | ||
| 4 | */ | ||
| 5 | |||
| 6 | #ifndef ASM_MSI_H | ||
| 7 | #define ASM_MSI_H | ||
| 8 | |||
| 9 | #include <asm/desc.h> | ||
| 10 | #include <asm/mach_apic.h> | ||
| 11 | #include <asm/smp.h> | ||
| 12 | |||
| 13 | #define LAST_DEVICE_VECTOR (FIRST_SYSTEM_VECTOR - 1) | ||
| 14 | #define MSI_TARGET_CPU_SHIFT 12 | ||
| 15 | |||
| 16 | extern struct msi_ops msi_apic_ops; | ||
| 17 | |||
| 18 | static inline int msi_arch_init(void) | ||
| 19 | { | ||
| 20 | msi_register(&msi_apic_ops); | ||
| 21 | return 0; | ||
| 22 | } | ||
| 23 | |||
| 24 | #endif /* ASM_MSI_H */ | ||
diff --git a/include/asm-x86_64/msidef.h b/include/asm-x86_64/msidef.h new file mode 100644 index 000000000000..5b8acddb70fb --- /dev/null +++ b/include/asm-x86_64/msidef.h | |||
| @@ -0,0 +1,47 @@ | |||
| 1 | #ifndef ASM_MSIDEF_H | ||
| 2 | #define ASM_MSIDEF_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * Constants for Intel APIC based MSI messages. | ||
| 6 | */ | ||
| 7 | |||
| 8 | /* | ||
| 9 | * Shifts for MSI data | ||
| 10 | */ | ||
| 11 | |||
| 12 | #define MSI_DATA_VECTOR_SHIFT 0 | ||
| 13 | #define MSI_DATA_VECTOR_MASK 0x000000ff | ||
| 14 | #define MSI_DATA_VECTOR(v) (((v) << MSI_DATA_VECTOR_SHIFT) & MSI_DATA_VECTOR_MASK) | ||
| 15 | |||
| 16 | #define MSI_DATA_DELIVERY_MODE_SHIFT 8 | ||
| 17 | #define MSI_DATA_DELIVERY_FIXED (0 << MSI_DATA_DELIVERY_MODE_SHIFT) | ||
| 18 | #define MSI_DATA_DELIVERY_LOWPRI (1 << MSI_DATA_DELIVERY_MODE_SHIFT) | ||
| 19 | |||
| 20 | #define MSI_DATA_LEVEL_SHIFT 14 | ||
| 21 | #define MSI_DATA_LEVEL_DEASSERT (0 << MSI_DATA_LEVEL_SHIFT) | ||
| 22 | #define MSI_DATA_LEVEL_ASSERT (1 << MSI_DATA_LEVEL_SHIFT) | ||
| 23 | |||
| 24 | #define MSI_DATA_TRIGGER_SHIFT 15 | ||
| 25 | #define MSI_DATA_TRIGGER_EDGE (0 << MSI_DATA_TRIGGER_SHIFT) | ||
| 26 | #define MSI_DATA_TRIGGER_LEVEL (1 << MSI_DATA_TRIGGER_SHIFT) | ||
| 27 | |||
| 28 | /* | ||
| 29 | * Shift/mask fields for msi address | ||
| 30 | */ | ||
| 31 | |||
| 32 | #define MSI_ADDR_BASE_HI 0 | ||
| 33 | #define MSI_ADDR_BASE_LO 0xfee00000 | ||
| 34 | |||
| 35 | #define MSI_ADDR_DEST_MODE_SHIFT 2 | ||
| 36 | #define MSI_ADDR_DEST_MODE_PHYSICAL (0 << MSI_ADDR_DEST_MODE_SHIFT) | ||
| 37 | #define MSI_ADDR_DEST_MODE_LOGICAL (1 << MSI_ADDR_DEST_MODE_SHIFT) | ||
| 38 | |||
| 39 | #define MSI_ADDR_REDIRECTION_SHIFT 3 | ||
| 40 | #define MSI_ADDR_REDIRECTION_CPU (0 << MSI_ADDR_REDIRECTION_SHIFT) /* dedicated cpu */ | ||
| 41 | #define MSI_ADDR_REDIRECTION_LOWPRI (1 << MSI_ADDR_REDIRECTION_SHIFT) /* lowest priority */ | ||
| 42 | |||
| 43 | #define MSI_ADDR_DEST_ID_SHIFT 12 | ||
| 44 | #define MSI_ADDR_DEST_ID_MASK 0x00ffff0 | ||
| 45 | #define MSI_ADDR_DEST_ID(dest) (((dest) << MSI_ADDR_DEST_ID_SHIFT) & MSI_ADDR_DEST_ID_MASK) | ||
| 46 | |||
| 47 | #endif /* ASM_MSIDEF_H */ | ||
diff --git a/include/asm-x86_64/percpu.h b/include/asm-x86_64/percpu.h index 285756010c51..5ed0ef340842 100644 --- a/include/asm-x86_64/percpu.h +++ b/include/asm-x86_64/percpu.h | |||
| @@ -32,13 +32,13 @@ | |||
| 32 | 32 | ||
| 33 | /* var is in discarded region: offset to particular copy we want */ | 33 | /* var is in discarded region: offset to particular copy we want */ |
| 34 | #define per_cpu(var, cpu) (*({ \ | 34 | #define per_cpu(var, cpu) (*({ \ |
| 35 | extern int simple_indentifier_##var(void); \ | 35 | extern int simple_identifier_##var(void); \ |
| 36 | RELOC_HIDE(&per_cpu__##var, __per_cpu_offset(cpu)); })) | 36 | RELOC_HIDE(&per_cpu__##var, __per_cpu_offset(cpu)); })) |
| 37 | #define __get_cpu_var(var) (*({ \ | 37 | #define __get_cpu_var(var) (*({ \ |
| 38 | extern int simple_indentifier_##var(void); \ | 38 | extern int simple_identifier_##var(void); \ |
| 39 | RELOC_HIDE(&per_cpu__##var, __my_cpu_offset()); })) | 39 | RELOC_HIDE(&per_cpu__##var, __my_cpu_offset()); })) |
| 40 | #define __raw_get_cpu_var(var) (*({ \ | 40 | #define __raw_get_cpu_var(var) (*({ \ |
| 41 | extern int simple_indentifier_##var(void); \ | 41 | extern int simple_identifier_##var(void); \ |
| 42 | RELOC_HIDE(&per_cpu__##var, __my_cpu_offset()); })) | 42 | RELOC_HIDE(&per_cpu__##var, __my_cpu_offset()); })) |
| 43 | 43 | ||
| 44 | /* A macro to avoid #include hell... */ | 44 | /* A macro to avoid #include hell... */ |
diff --git a/include/asm-x86_64/processor.h b/include/asm-x86_64/processor.h index de9c3147ee4c..cef17e0f828c 100644 --- a/include/asm-x86_64/processor.h +++ b/include/asm-x86_64/processor.h | |||
| @@ -475,6 +475,8 @@ static inline void __mwait(unsigned long eax, unsigned long ecx) | |||
| 475 | : :"a" (eax), "c" (ecx)); | 475 | : :"a" (eax), "c" (ecx)); |
| 476 | } | 476 | } |
| 477 | 477 | ||
| 478 | extern void mwait_idle_with_hints(unsigned long eax, unsigned long ecx); | ||
| 479 | |||
| 478 | #define stack_current() \ | 480 | #define stack_current() \ |
| 479 | ({ \ | 481 | ({ \ |
| 480 | struct thread_info *ti; \ | 482 | struct thread_info *ti; \ |
diff --git a/include/asm-x86_64/proto.h b/include/asm-x86_64/proto.h index c28fc2db2171..c181fef786e4 100644 --- a/include/asm-x86_64/proto.h +++ b/include/asm-x86_64/proto.h | |||
| @@ -66,7 +66,7 @@ extern void free_bootmem_generic(unsigned long phys, unsigned len); | |||
| 66 | extern void load_gs_index(unsigned gs); | 66 | extern void load_gs_index(unsigned gs); |
| 67 | 67 | ||
| 68 | extern void stop_timer_interrupt(void); | 68 | extern void stop_timer_interrupt(void); |
| 69 | extern void main_timer_handler(struct pt_regs *regs); | 69 | extern void main_timer_handler(void); |
| 70 | 70 | ||
| 71 | extern unsigned long end_pfn_map; | 71 | extern unsigned long end_pfn_map; |
| 72 | 72 | ||
| @@ -124,7 +124,7 @@ extern int notsc_setup(char *); | |||
| 124 | 124 | ||
| 125 | extern int gsi_irq_sharing(int gsi); | 125 | extern int gsi_irq_sharing(int gsi); |
| 126 | 126 | ||
| 127 | extern void smp_local_timer_interrupt(struct pt_regs * regs); | 127 | extern void smp_local_timer_interrupt(void); |
| 128 | 128 | ||
| 129 | long do_arch_prctl(struct task_struct *task, int code, unsigned long addr); | 129 | long do_arch_prctl(struct task_struct *task, int code, unsigned long addr); |
| 130 | 130 | ||
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index f7a52e19b4be..a1155a2beb32 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
| @@ -46,6 +46,7 @@ header-y += coff.h | |||
| 46 | header-y += comstats.h | 46 | header-y += comstats.h |
| 47 | header-y += consolemap.h | 47 | header-y += consolemap.h |
| 48 | header-y += cycx_cfm.h | 48 | header-y += cycx_cfm.h |
| 49 | header-y += dlm_device.h | ||
| 49 | header-y += dm-ioctl.h | 50 | header-y += dm-ioctl.h |
| 50 | header-y += dn.h | 51 | header-y += dn.h |
| 51 | header-y += dqblk_v1.h | 52 | header-y += dqblk_v1.h |
| @@ -99,11 +100,11 @@ header-y += ipx.h | |||
| 99 | header-y += irda.h | 100 | header-y += irda.h |
| 100 | header-y += isdn_divertif.h | 101 | header-y += isdn_divertif.h |
| 101 | header-y += iso_fs.h | 102 | header-y += iso_fs.h |
| 102 | header-y += ite_gpio.h | ||
| 103 | header-y += ixjuser.h | 103 | header-y += ixjuser.h |
| 104 | header-y += jffs2.h | 104 | header-y += jffs2.h |
| 105 | header-y += keyctl.h | 105 | header-y += keyctl.h |
| 106 | header-y += limits.h | 106 | header-y += limits.h |
| 107 | header-y += lock_dlm_plock.h | ||
| 107 | header-y += magic.h | 108 | header-y += magic.h |
| 108 | header-y += major.h | 109 | header-y += major.h |
| 109 | header-y += matroxfb.h | 110 | header-y += matroxfb.h |
| @@ -119,6 +120,7 @@ header-y += netrom.h | |||
| 119 | header-y += nfs2.h | 120 | header-y += nfs2.h |
| 120 | header-y += nfs4_mount.h | 121 | header-y += nfs4_mount.h |
| 121 | header-y += nfs_mount.h | 122 | header-y += nfs_mount.h |
| 123 | header-y += oom.h | ||
| 122 | header-y += param.h | 124 | header-y += param.h |
| 123 | header-y += pci_ids.h | 125 | header-y += pci_ids.h |
| 124 | header-y += pci_regs.h | 126 | header-y += pci_regs.h |
| @@ -156,12 +158,10 @@ header-y += toshiba.h | |||
| 156 | header-y += ultrasound.h | 158 | header-y += ultrasound.h |
| 157 | header-y += un.h | 159 | header-y += un.h |
| 158 | header-y += utime.h | 160 | header-y += utime.h |
| 159 | header-y += utsname.h | ||
| 160 | header-y += video_decoder.h | 161 | header-y += video_decoder.h |
| 161 | header-y += video_encoder.h | 162 | header-y += video_encoder.h |
| 162 | header-y += videotext.h | 163 | header-y += videotext.h |
| 163 | header-y += vt.h | 164 | header-y += vt.h |
| 164 | header-y += wavefront.h | ||
| 165 | header-y += wireless.h | 165 | header-y += wireless.h |
| 166 | header-y += xattr.h | 166 | header-y += xattr.h |
| 167 | header-y += x25.h | 167 | header-y += x25.h |
| @@ -194,6 +194,7 @@ unifdef-y += cyclades.h | |||
| 194 | unifdef-y += dccp.h | 194 | unifdef-y += dccp.h |
| 195 | unifdef-y += dirent.h | 195 | unifdef-y += dirent.h |
| 196 | unifdef-y += divert.h | 196 | unifdef-y += divert.h |
| 197 | unifdef-y += dlm.h | ||
| 197 | unifdef-y += elfcore.h | 198 | unifdef-y += elfcore.h |
| 198 | unifdef-y += errno.h | 199 | unifdef-y += errno.h |
| 199 | unifdef-y += errqueue.h | 200 | unifdef-y += errqueue.h |
| @@ -210,6 +211,7 @@ unifdef-y += ftape.h | |||
| 210 | unifdef-y += gameport.h | 211 | unifdef-y += gameport.h |
| 211 | unifdef-y += generic_serial.h | 212 | unifdef-y += generic_serial.h |
| 212 | unifdef-y += genhd.h | 213 | unifdef-y += genhd.h |
| 214 | unifdef-y += gfs2_ondisk.h | ||
| 213 | unifdef-y += hayesesp.h | 215 | unifdef-y += hayesesp.h |
| 214 | unifdef-y += hdlcdrv.h | 216 | unifdef-y += hdlcdrv.h |
| 215 | unifdef-y += hdlc.h | 217 | unifdef-y += hdlc.h |
| @@ -333,6 +335,7 @@ unifdef-y += unistd.h | |||
| 333 | unifdef-y += usb_ch9.h | 335 | unifdef-y += usb_ch9.h |
| 334 | unifdef-y += usbdevice_fs.h | 336 | unifdef-y += usbdevice_fs.h |
| 335 | unifdef-y += user.h | 337 | unifdef-y += user.h |
| 338 | unifdef-y += utsname.h | ||
| 336 | unifdef-y += videodev2.h | 339 | unifdef-y += videodev2.h |
| 337 | unifdef-y += videodev.h | 340 | unifdef-y += videodev.h |
| 338 | unifdef-y += wait.h | 341 | unifdef-y += wait.h |
diff --git a/include/linux/ac97_codec.h b/include/linux/ac97_codec.h index 2ed2fd855133..22eb9367235a 100644 --- a/include/linux/ac97_codec.h +++ b/include/linux/ac97_codec.h | |||
| @@ -331,8 +331,6 @@ extern int ac97_read_proc (char *page_out, char **start, off_t off, | |||
| 331 | extern int ac97_probe_codec(struct ac97_codec *); | 331 | extern int ac97_probe_codec(struct ac97_codec *); |
| 332 | extern unsigned int ac97_set_adc_rate(struct ac97_codec *codec, unsigned int rate); | 332 | extern unsigned int ac97_set_adc_rate(struct ac97_codec *codec, unsigned int rate); |
| 333 | extern unsigned int ac97_set_dac_rate(struct ac97_codec *codec, unsigned int rate); | 333 | extern unsigned int ac97_set_dac_rate(struct ac97_codec *codec, unsigned int rate); |
| 334 | extern int ac97_save_state(struct ac97_codec *codec); | ||
| 335 | extern int ac97_restore_state(struct ac97_codec *codec); | ||
| 336 | 334 | ||
| 337 | extern struct ac97_codec *ac97_alloc_codec(void); | 335 | extern struct ac97_codec *ac97_alloc_codec(void); |
| 338 | extern void ac97_release_codec(struct ac97_codec *codec); | 336 | extern void ac97_release_codec(struct ac97_codec *codec); |
| @@ -346,9 +344,6 @@ struct ac97_driver { | |||
| 346 | void (*remove) (struct ac97_codec *codec, struct ac97_driver *driver); | 344 | void (*remove) (struct ac97_codec *codec, struct ac97_driver *driver); |
| 347 | }; | 345 | }; |
| 348 | 346 | ||
| 349 | extern int ac97_register_driver(struct ac97_driver *driver); | ||
| 350 | extern void ac97_unregister_driver(struct ac97_driver *driver); | ||
| 351 | |||
| 352 | /* quirk types */ | 347 | /* quirk types */ |
| 353 | enum { | 348 | enum { |
| 354 | AC97_TUNE_DEFAULT = -1, /* use default from quirk list (not valid in list) */ | 349 | AC97_TUNE_DEFAULT = -1, /* use default from quirk list (not valid in list) */ |
diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 88b5dfd8ee12..2b0c955590fe 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h | |||
| @@ -494,6 +494,9 @@ void acpi_pci_unregister_driver(struct acpi_pci_driver *driver); | |||
| 494 | 494 | ||
| 495 | extern int ec_read(u8 addr, u8 *val); | 495 | extern int ec_read(u8 addr, u8 *val); |
| 496 | extern int ec_write(u8 addr, u8 val); | 496 | extern int ec_write(u8 addr, u8 val); |
| 497 | extern int ec_transaction(u8 command, | ||
| 498 | const u8 *wdata, unsigned wdata_len, | ||
| 499 | u8 *rdata, unsigned rdata_len); | ||
| 497 | 500 | ||
| 498 | #endif /*CONFIG_ACPI_EC*/ | 501 | #endif /*CONFIG_ACPI_EC*/ |
| 499 | 502 | ||
diff --git a/include/linux/adb.h b/include/linux/adb.h index b7305b178279..64d8878e1444 100644 --- a/include/linux/adb.h +++ b/include/linux/adb.h | |||
| @@ -90,10 +90,10 @@ extern struct blocking_notifier_head adb_client_list; | |||
| 90 | int adb_request(struct adb_request *req, void (*done)(struct adb_request *), | 90 | int adb_request(struct adb_request *req, void (*done)(struct adb_request *), |
| 91 | int flags, int nbytes, ...); | 91 | int flags, int nbytes, ...); |
| 92 | int adb_register(int default_id,int handler_id,struct adb_ids *ids, | 92 | int adb_register(int default_id,int handler_id,struct adb_ids *ids, |
| 93 | void (*handler)(unsigned char *, int, struct pt_regs *, int)); | 93 | void (*handler)(unsigned char *, int, int)); |
| 94 | int adb_unregister(int index); | 94 | int adb_unregister(int index); |
| 95 | void adb_poll(void); | 95 | void adb_poll(void); |
| 96 | void adb_input(unsigned char *, int, struct pt_regs *, int); | 96 | void adb_input(unsigned char *, int, int); |
| 97 | int adb_reset_bus(void); | 97 | int adb_reset_bus(void); |
| 98 | 98 | ||
| 99 | int adb_try_handler_change(int address, int new_id); | 99 | int adb_try_handler_change(int address, int new_id); |
diff --git a/include/linux/arcdevice.h b/include/linux/arcdevice.h index 231ba090ae34..2f85049cfb3d 100644 --- a/include/linux/arcdevice.h +++ b/include/linux/arcdevice.h | |||
| @@ -334,7 +334,7 @@ void arcnet_dump_skb(struct net_device *dev, struct sk_buff *skb, char *desc); | |||
| 334 | #endif | 334 | #endif |
| 335 | 335 | ||
| 336 | void arcnet_unregister_proto(struct ArcProto *proto); | 336 | void arcnet_unregister_proto(struct ArcProto *proto); |
| 337 | irqreturn_t arcnet_interrupt(int irq, void *dev_id, struct pt_regs *regs); | 337 | irqreturn_t arcnet_interrupt(int irq, void *dev_id); |
| 338 | struct net_device *alloc_arcdev(char *name); | 338 | struct net_device *alloc_arcdev(char *name); |
| 339 | 339 | ||
| 340 | #endif /* __KERNEL__ */ | 340 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/audit.h b/include/linux/audit.h index c3aa09751814..b2ca666d9997 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h | |||
| @@ -75,7 +75,7 @@ | |||
| 75 | #define AUDIT_DAEMON_CONFIG 1203 /* Daemon config change */ | 75 | #define AUDIT_DAEMON_CONFIG 1203 /* Daemon config change */ |
| 76 | 76 | ||
| 77 | #define AUDIT_SYSCALL 1300 /* Syscall event */ | 77 | #define AUDIT_SYSCALL 1300 /* Syscall event */ |
| 78 | #define AUDIT_FS_WATCH 1301 /* Filesystem watch event */ | 78 | /* #define AUDIT_FS_WATCH 1301 * Deprecated */ |
| 79 | #define AUDIT_PATH 1302 /* Filename path information */ | 79 | #define AUDIT_PATH 1302 /* Filename path information */ |
| 80 | #define AUDIT_IPC 1303 /* IPC record */ | 80 | #define AUDIT_IPC 1303 /* IPC record */ |
| 81 | #define AUDIT_SOCKETCALL 1304 /* sys_socketcall arguments */ | 81 | #define AUDIT_SOCKETCALL 1304 /* sys_socketcall arguments */ |
| @@ -88,6 +88,7 @@ | |||
| 88 | #define AUDIT_MQ_SENDRECV 1313 /* POSIX MQ send/receive record type */ | 88 | #define AUDIT_MQ_SENDRECV 1313 /* POSIX MQ send/receive record type */ |
| 89 | #define AUDIT_MQ_NOTIFY 1314 /* POSIX MQ notify record type */ | 89 | #define AUDIT_MQ_NOTIFY 1314 /* POSIX MQ notify record type */ |
| 90 | #define AUDIT_MQ_GETSETATTR 1315 /* POSIX MQ get/set attribute record type */ | 90 | #define AUDIT_MQ_GETSETATTR 1315 /* POSIX MQ get/set attribute record type */ |
| 91 | #define AUDIT_KERNEL_OTHER 1316 /* For use by 3rd party modules */ | ||
| 91 | 92 | ||
| 92 | #define AUDIT_AVC 1400 /* SE Linux avc denial or grant */ | 93 | #define AUDIT_AVC 1400 /* SE Linux avc denial or grant */ |
| 93 | #define AUDIT_SELINUX_ERR 1401 /* Internal SE Linux Errors */ | 94 | #define AUDIT_SELINUX_ERR 1401 /* Internal SE Linux Errors */ |
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h index f7a1390d67f5..7011d6255593 100644 --- a/include/linux/backing-dev.h +++ b/include/linux/backing-dev.h | |||
| @@ -10,6 +10,8 @@ | |||
| 10 | 10 | ||
| 11 | #include <asm/atomic.h> | 11 | #include <asm/atomic.h> |
| 12 | 12 | ||
| 13 | struct page; | ||
| 14 | |||
| 13 | /* | 15 | /* |
| 14 | * Bits in backing_dev_info.state | 16 | * Bits in backing_dev_info.state |
| 15 | */ | 17 | */ |
| @@ -88,6 +90,11 @@ static inline int bdi_rw_congested(struct backing_dev_info *bdi) | |||
| 88 | (1 << BDI_write_congested)); | 90 | (1 << BDI_write_congested)); |
| 89 | } | 91 | } |
| 90 | 92 | ||
| 93 | void clear_bdi_congested(struct backing_dev_info *bdi, int rw); | ||
| 94 | void set_bdi_congested(struct backing_dev_info *bdi, int rw); | ||
| 95 | long congestion_wait(int rw, long timeout); | ||
| 96 | void congestion_end(int rw); | ||
| 97 | |||
| 91 | #define bdi_cap_writeback_dirty(bdi) \ | 98 | #define bdi_cap_writeback_dirty(bdi) \ |
| 92 | (!((bdi)->capabilities & BDI_CAP_NO_WRITEBACK)) | 99 | (!((bdi)->capabilities & BDI_CAP_NO_WRITEBACK)) |
| 93 | 100 | ||
diff --git a/include/linux/bio.h b/include/linux/bio.h index 711c321a7011..092dbd0e7658 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
| @@ -70,7 +70,8 @@ typedef void (bio_destructor_t) (struct bio *); | |||
| 70 | * stacking drivers) | 70 | * stacking drivers) |
| 71 | */ | 71 | */ |
| 72 | struct bio { | 72 | struct bio { |
| 73 | sector_t bi_sector; | 73 | sector_t bi_sector; /* device address in 512 byte |
| 74 | sectors */ | ||
| 74 | struct bio *bi_next; /* request queue link */ | 75 | struct bio *bi_next; /* request queue link */ |
| 75 | struct block_device *bi_bdev; | 76 | struct block_device *bi_bdev; |
| 76 | unsigned long bi_flags; /* status, command, etc */ | 77 | unsigned long bi_flags; /* status, command, etc */ |
diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h index dcc5de7cc487..64b4641904fe 100644 --- a/include/linux/bitmap.h +++ b/include/linux/bitmap.h | |||
| @@ -46,7 +46,8 @@ | |||
| 46 | * bitmap_remap(dst, src, old, new, nbits) *dst = map(old, new)(src) | 46 | * bitmap_remap(dst, src, old, new, nbits) *dst = map(old, new)(src) |
| 47 | * bitmap_bitremap(oldbit, old, new, nbits) newbit = map(old, new)(oldbit) | 47 | * bitmap_bitremap(oldbit, old, new, nbits) newbit = map(old, new)(oldbit) |
| 48 | * bitmap_scnprintf(buf, len, src, nbits) Print bitmap src to buf | 48 | * bitmap_scnprintf(buf, len, src, nbits) Print bitmap src to buf |
| 49 | * bitmap_parse(ubuf, ulen, dst, nbits) Parse bitmap dst from user buf | 49 | * bitmap_parse(buf, buflen, dst, nbits) Parse bitmap dst from kernel buf |
| 50 | * bitmap_parse_user(ubuf, ulen, dst, nbits) Parse bitmap dst from user buf | ||
| 50 | * bitmap_scnlistprintf(buf, len, src, nbits) Print bitmap src as list to buf | 51 | * bitmap_scnlistprintf(buf, len, src, nbits) Print bitmap src as list to buf |
| 51 | * bitmap_parselist(buf, dst, nbits) Parse bitmap dst from list | 52 | * bitmap_parselist(buf, dst, nbits) Parse bitmap dst from list |
| 52 | * bitmap_find_free_region(bitmap, bits, order) Find and allocate bit region | 53 | * bitmap_find_free_region(bitmap, bits, order) Find and allocate bit region |
| @@ -106,7 +107,9 @@ extern int __bitmap_weight(const unsigned long *bitmap, int bits); | |||
| 106 | 107 | ||
| 107 | extern int bitmap_scnprintf(char *buf, unsigned int len, | 108 | extern int bitmap_scnprintf(char *buf, unsigned int len, |
| 108 | const unsigned long *src, int nbits); | 109 | const unsigned long *src, int nbits); |
| 109 | extern int bitmap_parse(const char __user *ubuf, unsigned int ulen, | 110 | extern int __bitmap_parse(const char *buf, unsigned int buflen, int is_user, |
| 111 | unsigned long *dst, int nbits); | ||
| 112 | extern int bitmap_parse_user(const char __user *ubuf, unsigned int ulen, | ||
| 110 | unsigned long *dst, int nbits); | 113 | unsigned long *dst, int nbits); |
| 111 | extern int bitmap_scnlistprintf(char *buf, unsigned int len, | 114 | extern int bitmap_scnlistprintf(char *buf, unsigned int len, |
| 112 | const unsigned long *src, int nbits); | 115 | const unsigned long *src, int nbits); |
| @@ -270,6 +273,12 @@ static inline void bitmap_shift_left(unsigned long *dst, | |||
| 270 | __bitmap_shift_left(dst, src, n, nbits); | 273 | __bitmap_shift_left(dst, src, n, nbits); |
| 271 | } | 274 | } |
| 272 | 275 | ||
| 276 | static inline int bitmap_parse(const char *buf, unsigned int buflen, | ||
| 277 | unsigned long *maskp, int nmaskbits) | ||
| 278 | { | ||
| 279 | return __bitmap_parse(buf, buflen, 0, maskp, nmaskbits); | ||
| 280 | } | ||
| 281 | |||
| 273 | #endif /* __ASSEMBLY__ */ | 282 | #endif /* __ASSEMBLY__ */ |
| 274 | 283 | ||
| 275 | #endif /* __LINUX_BITMAP_H */ | 284 | #endif /* __LINUX_BITMAP_H */ |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 1d79b8d4ca6d..7bfcde2d5578 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -157,6 +157,7 @@ enum rq_cmd_type_bits { | |||
| 157 | REQ_TYPE_ATA_CMD, | 157 | REQ_TYPE_ATA_CMD, |
| 158 | REQ_TYPE_ATA_TASK, | 158 | REQ_TYPE_ATA_TASK, |
| 159 | REQ_TYPE_ATA_TASKFILE, | 159 | REQ_TYPE_ATA_TASKFILE, |
| 160 | REQ_TYPE_ATA_PC, | ||
| 160 | }; | 161 | }; |
| 161 | 162 | ||
| 162 | /* | 163 | /* |
| @@ -650,6 +651,26 @@ extern void blk_recount_segments(request_queue_t *, struct bio *); | |||
| 650 | extern int scsi_cmd_ioctl(struct file *, struct gendisk *, unsigned int, void __user *); | 651 | extern int scsi_cmd_ioctl(struct file *, struct gendisk *, unsigned int, void __user *); |
| 651 | extern int sg_scsi_ioctl(struct file *, struct request_queue *, | 652 | extern int sg_scsi_ioctl(struct file *, struct request_queue *, |
| 652 | struct gendisk *, struct scsi_ioctl_command __user *); | 653 | struct gendisk *, struct scsi_ioctl_command __user *); |
| 654 | |||
| 655 | /* | ||
| 656 | * A queue has just exitted congestion. Note this in the global counter of | ||
| 657 | * congested queues, and wake up anyone who was waiting for requests to be | ||
| 658 | * put back. | ||
| 659 | */ | ||
| 660 | static inline void blk_clear_queue_congested(request_queue_t *q, int rw) | ||
| 661 | { | ||
| 662 | clear_bdi_congested(&q->backing_dev_info, rw); | ||
| 663 | } | ||
| 664 | |||
| 665 | /* | ||
| 666 | * A queue has just entered congestion. Flag that in the queue's VM-visible | ||
| 667 | * state flags and increment the global gounter of congested queues. | ||
| 668 | */ | ||
| 669 | static inline void blk_set_queue_congested(request_queue_t *q, int rw) | ||
| 670 | { | ||
| 671 | set_bdi_congested(&q->backing_dev_info, rw); | ||
| 672 | } | ||
| 673 | |||
| 653 | extern void blk_start_queue(request_queue_t *q); | 674 | extern void blk_start_queue(request_queue_t *q); |
| 654 | extern void blk_stop_queue(request_queue_t *q); | 675 | extern void blk_stop_queue(request_queue_t *q); |
| 655 | extern void blk_sync_queue(struct request_queue *q); | 676 | extern void blk_sync_queue(struct request_queue *q); |
| @@ -764,10 +785,16 @@ extern int blk_queue_init_tags(request_queue_t *, int, struct blk_queue_tag *); | |||
| 764 | extern void blk_queue_free_tags(request_queue_t *); | 785 | extern void blk_queue_free_tags(request_queue_t *); |
| 765 | extern int blk_queue_resize_tags(request_queue_t *, int); | 786 | extern int blk_queue_resize_tags(request_queue_t *, int); |
| 766 | extern void blk_queue_invalidate_tags(request_queue_t *); | 787 | extern void blk_queue_invalidate_tags(request_queue_t *); |
| 767 | extern long blk_congestion_wait(int rw, long timeout); | ||
| 768 | extern struct blk_queue_tag *blk_init_tags(int); | 788 | extern struct blk_queue_tag *blk_init_tags(int); |
| 769 | extern void blk_free_tags(struct blk_queue_tag *); | 789 | extern void blk_free_tags(struct blk_queue_tag *); |
| 770 | extern void blk_congestion_end(int rw); | 790 | |
| 791 | static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt, | ||
| 792 | int tag) | ||
| 793 | { | ||
| 794 | if (unlikely(bqt == NULL || tag >= bqt->real_max_depth)) | ||
| 795 | return NULL; | ||
| 796 | return bqt->tag_index[tag]; | ||
| 797 | } | ||
| 771 | 798 | ||
| 772 | extern void blk_rq_bio_prep(request_queue_t *, struct request *, struct bio *); | 799 | extern void blk_rq_bio_prep(request_queue_t *, struct request *, struct bio *); |
| 773 | extern int blkdev_issue_flush(struct block_device *, sector_t *); | 800 | extern int blkdev_issue_flush(struct block_device *, sector_t *); |
diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index 131ffd37e716..5d9fb0e94156 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h | |||
| @@ -69,6 +69,8 @@ struct buffer_head { | |||
| 69 | bh_end_io_t *b_end_io; /* I/O completion */ | 69 | bh_end_io_t *b_end_io; /* I/O completion */ |
| 70 | void *b_private; /* reserved for b_end_io */ | 70 | void *b_private; /* reserved for b_end_io */ |
| 71 | struct list_head b_assoc_buffers; /* associated with another mapping */ | 71 | struct list_head b_assoc_buffers; /* associated with another mapping */ |
| 72 | struct address_space *b_assoc_map; /* mapping this buffer is | ||
| 73 | associated with */ | ||
| 72 | atomic_t b_count; /* users using this buffer_head */ | 74 | atomic_t b_count; /* users using this buffer_head */ |
| 73 | }; | 75 | }; |
| 74 | 76 | ||
diff --git a/include/linux/carta_random32.h b/include/linux/carta_random32.h new file mode 100644 index 000000000000..f6f3bd9f20b5 --- /dev/null +++ b/include/linux/carta_random32.h | |||
| @@ -0,0 +1,29 @@ | |||
| 1 | /* | ||
| 2 | * Fast, simple, yet decent quality random number generator based on | ||
| 3 | * a paper by David G. Carta ("Two Fast Implementations of the | ||
| 4 | * `Minimal Standard' Random Number Generator," Communications of the | ||
| 5 | * ACM, January, 1990). | ||
| 6 | * | ||
| 7 | * Copyright (c) 2002-2006 Hewlett-Packard Development Company, L.P. | ||
| 8 | * Contributed by Stephane Eranian <eranian@hpl.hp.com> | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or | ||
| 11 | * modify it under the terms of version 2 of the GNU General Public | ||
| 12 | * License as published by the Free Software Foundation. | ||
| 13 | * | ||
| 14 | * This program is distributed in the hope that it will be useful, | ||
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 17 | * General Public License for more details. | ||
| 18 | * | ||
| 19 | * You should have received a copy of the GNU General Public License | ||
| 20 | * along with this program; if not, write to the Free Software | ||
| 21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | ||
| 22 | * 02111-1307 USA | ||
| 23 | */ | ||
| 24 | #ifndef _LINUX_CARTA_RANDOM32_H_ | ||
| 25 | #define _LINUX_CARTA_RANDOM32_H_ | ||
| 26 | |||
| 27 | u64 carta_random32(u64 seed); | ||
| 28 | |||
| 29 | #endif /* _LINUX_CARTA_RANDOM32_H_ */ | ||
diff --git a/include/linux/cdrom.h b/include/linux/cdrom.h index 3c9b0bc05123..bbbe7b4da0bb 100644 --- a/include/linux/cdrom.h +++ b/include/linux/cdrom.h | |||
| @@ -749,7 +749,7 @@ struct request_sense { | |||
| 749 | #define MRW_MODE_PC 0x03 | 749 | #define MRW_MODE_PC 0x03 |
| 750 | 750 | ||
| 751 | struct mrw_feature_desc { | 751 | struct mrw_feature_desc { |
| 752 | __u16 feature_code; | 752 | __be16 feature_code; |
| 753 | #if defined(__BIG_ENDIAN_BITFIELD) | 753 | #if defined(__BIG_ENDIAN_BITFIELD) |
| 754 | __u8 reserved1 : 2; | 754 | __u8 reserved1 : 2; |
| 755 | __u8 feature_version : 4; | 755 | __u8 feature_version : 4; |
| @@ -776,7 +776,7 @@ struct mrw_feature_desc { | |||
| 776 | 776 | ||
| 777 | /* cf. mmc4r02g.pdf 5.3.10 Random Writable Feature (0020h) pg 197 of 635 */ | 777 | /* cf. mmc4r02g.pdf 5.3.10 Random Writable Feature (0020h) pg 197 of 635 */ |
| 778 | struct rwrt_feature_desc { | 778 | struct rwrt_feature_desc { |
| 779 | __u16 feature_code; | 779 | __be16 feature_code; |
| 780 | #if defined(__BIG_ENDIAN_BITFIELD) | 780 | #if defined(__BIG_ENDIAN_BITFIELD) |
| 781 | __u8 reserved1 : 2; | 781 | __u8 reserved1 : 2; |
| 782 | __u8 feature_version : 4; | 782 | __u8 feature_version : 4; |
| @@ -803,7 +803,7 @@ struct rwrt_feature_desc { | |||
| 803 | }; | 803 | }; |
| 804 | 804 | ||
| 805 | typedef struct { | 805 | typedef struct { |
| 806 | __u16 disc_information_length; | 806 | __be16 disc_information_length; |
| 807 | #if defined(__BIG_ENDIAN_BITFIELD) | 807 | #if defined(__BIG_ENDIAN_BITFIELD) |
| 808 | __u8 reserved1 : 3; | 808 | __u8 reserved1 : 3; |
| 809 | __u8 erasable : 1; | 809 | __u8 erasable : 1; |
| @@ -849,7 +849,7 @@ typedef struct { | |||
| 849 | } disc_information; | 849 | } disc_information; |
| 850 | 850 | ||
| 851 | typedef struct { | 851 | typedef struct { |
| 852 | __u16 track_information_length; | 852 | __be16 track_information_length; |
| 853 | __u8 track_lsb; | 853 | __u8 track_lsb; |
| 854 | __u8 session_lsb; | 854 | __u8 session_lsb; |
| 855 | __u8 reserved1; | 855 | __u8 reserved1; |
| @@ -880,12 +880,12 @@ typedef struct { | |||
| 880 | __u8 lra_v : 1; | 880 | __u8 lra_v : 1; |
| 881 | __u8 reserved3 : 6; | 881 | __u8 reserved3 : 6; |
| 882 | #endif | 882 | #endif |
| 883 | __u32 track_start; | 883 | __be32 track_start; |
| 884 | __u32 next_writable; | 884 | __be32 next_writable; |
| 885 | __u32 free_blocks; | 885 | __be32 free_blocks; |
| 886 | __u32 fixed_packet_size; | 886 | __be32 fixed_packet_size; |
| 887 | __u32 track_size; | 887 | __be32 track_size; |
| 888 | __u32 last_rec_address; | 888 | __be32 last_rec_address; |
| 889 | } track_information; | 889 | } track_information; |
| 890 | 890 | ||
| 891 | struct feature_header { | 891 | struct feature_header { |
| @@ -896,12 +896,12 @@ struct feature_header { | |||
| 896 | }; | 896 | }; |
| 897 | 897 | ||
| 898 | struct mode_page_header { | 898 | struct mode_page_header { |
| 899 | __u16 mode_data_length; | 899 | __be16 mode_data_length; |
| 900 | __u8 medium_type; | 900 | __u8 medium_type; |
| 901 | __u8 reserved1; | 901 | __u8 reserved1; |
| 902 | __u8 reserved2; | 902 | __u8 reserved2; |
| 903 | __u8 reserved3; | 903 | __u8 reserved3; |
| 904 | __u16 desc_length; | 904 | __be16 desc_length; |
| 905 | }; | 905 | }; |
| 906 | 906 | ||
| 907 | #ifdef __KERNEL__ | 907 | #ifdef __KERNEL__ |
| @@ -1106,7 +1106,7 @@ typedef struct { | |||
| 1106 | #endif | 1106 | #endif |
| 1107 | __u8 session_format; | 1107 | __u8 session_format; |
| 1108 | __u8 reserved6; | 1108 | __u8 reserved6; |
| 1109 | __u32 packet_size; | 1109 | __be32 packet_size; |
| 1110 | __u16 audio_pause; | 1110 | __u16 audio_pause; |
| 1111 | __u8 mcn[16]; | 1111 | __u8 mcn[16]; |
| 1112 | __u8 isrc[16]; | 1112 | __u8 isrc[16]; |
| @@ -1151,7 +1151,7 @@ typedef struct { | |||
| 1151 | } rpc_state_t; | 1151 | } rpc_state_t; |
| 1152 | 1152 | ||
| 1153 | struct event_header { | 1153 | struct event_header { |
| 1154 | __u16 data_len; | 1154 | __be16 data_len; |
| 1155 | #if defined(__BIG_ENDIAN_BITFIELD) | 1155 | #if defined(__BIG_ENDIAN_BITFIELD) |
| 1156 | __u8 nea : 1; | 1156 | __u8 nea : 1; |
| 1157 | __u8 reserved1 : 4; | 1157 | __u8 reserved1 : 4; |
diff --git a/include/linux/compat.h b/include/linux/compat.h index ef5cd192784c..f4ebf96f5308 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h | |||
| @@ -163,7 +163,7 @@ asmlinkage long | |||
| 163 | compat_sys_set_robust_list(struct compat_robust_list_head __user *head, | 163 | compat_sys_set_robust_list(struct compat_robust_list_head __user *head, |
| 164 | compat_size_t len); | 164 | compat_size_t len); |
| 165 | asmlinkage long | 165 | asmlinkage long |
| 166 | compat_sys_get_robust_list(int pid, compat_uptr_t *head_ptr, | 166 | compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr, |
| 167 | compat_size_t __user *len_ptr); | 167 | compat_size_t __user *len_ptr); |
| 168 | 168 | ||
| 169 | long compat_sys_semctl(int first, int second, int third, void __user *uptr); | 169 | long compat_sys_semctl(int first, int second, int third, void __user *uptr); |
diff --git a/include/linux/compat_ioctl.h b/include/linux/compat_ioctl.h index 4e1663d7691e..cfdb4f6a89d4 100644 --- a/include/linux/compat_ioctl.h +++ b/include/linux/compat_ioctl.h | |||
| @@ -61,17 +61,23 @@ COMPATIBLE_IOCTL(FIGETBSZ) | |||
| 61 | * Some need translations, these do not. | 61 | * Some need translations, these do not. |
| 62 | */ | 62 | */ |
| 63 | COMPATIBLE_IOCTL(HDIO_GET_IDENTITY) | 63 | COMPATIBLE_IOCTL(HDIO_GET_IDENTITY) |
| 64 | COMPATIBLE_IOCTL(HDIO_SET_DMA) | ||
| 65 | COMPATIBLE_IOCTL(HDIO_SET_UNMASKINTR) | ||
| 66 | COMPATIBLE_IOCTL(HDIO_SET_NOWERR) | ||
| 67 | COMPATIBLE_IOCTL(HDIO_SET_32BIT) | ||
| 68 | COMPATIBLE_IOCTL(HDIO_SET_MULTCOUNT) | ||
| 69 | COMPATIBLE_IOCTL(HDIO_DRIVE_CMD) | ||
| 70 | COMPATIBLE_IOCTL(HDIO_DRIVE_TASK) | 64 | COMPATIBLE_IOCTL(HDIO_DRIVE_TASK) |
| 71 | COMPATIBLE_IOCTL(HDIO_SET_PIO_MODE) | 65 | COMPATIBLE_IOCTL(HDIO_DRIVE_CMD) |
| 72 | COMPATIBLE_IOCTL(HDIO_SET_NICE) | 66 | ULONG_IOCTL(HDIO_SET_MULTCOUNT) |
| 73 | COMPATIBLE_IOCTL(HDIO_SET_KEEPSETTINGS) | 67 | ULONG_IOCTL(HDIO_SET_UNMASKINTR) |
| 68 | ULONG_IOCTL(HDIO_SET_KEEPSETTINGS) | ||
| 69 | ULONG_IOCTL(HDIO_SET_32BIT) | ||
| 70 | ULONG_IOCTL(HDIO_SET_NOWERR) | ||
| 71 | ULONG_IOCTL(HDIO_SET_DMA) | ||
| 72 | ULONG_IOCTL(HDIO_SET_PIO_MODE) | ||
| 73 | ULONG_IOCTL(HDIO_SET_NICE) | ||
| 74 | ULONG_IOCTL(HDIO_SET_WCACHE) | ||
| 75 | ULONG_IOCTL(HDIO_SET_ACOUSTIC) | ||
| 76 | ULONG_IOCTL(HDIO_SET_BUSSTATE) | ||
| 77 | ULONG_IOCTL(HDIO_SET_ADDRESS) | ||
| 74 | COMPATIBLE_IOCTL(HDIO_SCAN_HWIF) | 78 | COMPATIBLE_IOCTL(HDIO_SCAN_HWIF) |
| 79 | /* 0x330 is reserved -- it used to be HDIO_GETGEO_BIG */ | ||
| 80 | COMPATIBLE_IOCTL(0x330) | ||
| 75 | /* 0x02 -- Floppy ioctls */ | 81 | /* 0x02 -- Floppy ioctls */ |
| 76 | COMPATIBLE_IOCTL(FDMSGON) | 82 | COMPATIBLE_IOCTL(FDMSGON) |
| 77 | COMPATIBLE_IOCTL(FDMSGOFF) | 83 | COMPATIBLE_IOCTL(FDMSGOFF) |
diff --git a/include/linux/config.h b/include/linux/config.h deleted file mode 100644 index a91f5e55b525..000000000000 --- a/include/linux/config.h +++ /dev/null | |||
| @@ -1,8 +0,0 @@ | |||
| 1 | #ifndef _LINUX_CONFIG_H | ||
| 2 | #define _LINUX_CONFIG_H | ||
| 3 | /* This file is no longer in use and kept only for backward compatibility. | ||
| 4 | * autoconf.h is now included via -imacros on the commandline | ||
| 5 | */ | ||
| 6 | #include <linux/autoconf.h> | ||
| 7 | |||
| 8 | #endif | ||
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index b268a3c0c376..d0e8c8b0e34d 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h | |||
| @@ -8,8 +8,8 @@ | |||
| 8 | * See detailed comments in the file linux/bitmap.h describing the | 8 | * See detailed comments in the file linux/bitmap.h describing the |
| 9 | * data type on which these cpumasks are based. | 9 | * data type on which these cpumasks are based. |
| 10 | * | 10 | * |
| 11 | * For details of cpumask_scnprintf() and cpumask_parse(), | 11 | * For details of cpumask_scnprintf() and cpumask_parse_user(), |
| 12 | * see bitmap_scnprintf() and bitmap_parse() in lib/bitmap.c. | 12 | * see bitmap_scnprintf() and bitmap_parse_user() in lib/bitmap.c. |
| 13 | * For details of cpulist_scnprintf() and cpulist_parse(), see | 13 | * For details of cpulist_scnprintf() and cpulist_parse(), see |
| 14 | * bitmap_scnlistprintf() and bitmap_parselist(), also in bitmap.c. | 14 | * bitmap_scnlistprintf() and bitmap_parselist(), also in bitmap.c. |
| 15 | * For details of cpu_remap(), see bitmap_bitremap in lib/bitmap.c | 15 | * For details of cpu_remap(), see bitmap_bitremap in lib/bitmap.c |
| @@ -49,7 +49,7 @@ | |||
| 49 | * unsigned long *cpus_addr(mask) Array of unsigned long's in mask | 49 | * unsigned long *cpus_addr(mask) Array of unsigned long's in mask |
| 50 | * | 50 | * |
| 51 | * int cpumask_scnprintf(buf, len, mask) Format cpumask for printing | 51 | * int cpumask_scnprintf(buf, len, mask) Format cpumask for printing |
| 52 | * int cpumask_parse(ubuf, ulen, mask) Parse ascii string as cpumask | 52 | * int cpumask_parse_user(ubuf, ulen, mask) Parse ascii string as cpumask |
| 53 | * int cpulist_scnprintf(buf, len, mask) Format cpumask as list for printing | 53 | * int cpulist_scnprintf(buf, len, mask) Format cpumask as list for printing |
| 54 | * int cpulist_parse(buf, map) Parse ascii string as cpulist | 54 | * int cpulist_parse(buf, map) Parse ascii string as cpulist |
| 55 | * int cpu_remap(oldbit, old, new) newbit = map(old, new)(oldbit) | 55 | * int cpu_remap(oldbit, old, new) newbit = map(old, new)(oldbit) |
| @@ -273,12 +273,12 @@ static inline int __cpumask_scnprintf(char *buf, int len, | |||
| 273 | return bitmap_scnprintf(buf, len, srcp->bits, nbits); | 273 | return bitmap_scnprintf(buf, len, srcp->bits, nbits); |
| 274 | } | 274 | } |
| 275 | 275 | ||
| 276 | #define cpumask_parse(ubuf, ulen, dst) \ | 276 | #define cpumask_parse_user(ubuf, ulen, dst) \ |
| 277 | __cpumask_parse((ubuf), (ulen), &(dst), NR_CPUS) | 277 | __cpumask_parse_user((ubuf), (ulen), &(dst), NR_CPUS) |
| 278 | static inline int __cpumask_parse(const char __user *buf, int len, | 278 | static inline int __cpumask_parse_user(const char __user *buf, int len, |
| 279 | cpumask_t *dstp, int nbits) | 279 | cpumask_t *dstp, int nbits) |
| 280 | { | 280 | { |
| 281 | return bitmap_parse(buf, len, dstp->bits, nbits); | 281 | return bitmap_parse_user(buf, len, dstp->bits, nbits); |
| 282 | } | 282 | } |
| 283 | 283 | ||
| 284 | #define cpulist_scnprintf(buf, len, src) \ | 284 | #define cpulist_scnprintf(buf, len, src) \ |
diff --git a/include/linux/dcache.h b/include/linux/dcache.h index 44605be59409..63f64a9a5bf7 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h | |||
| @@ -230,6 +230,7 @@ extern struct dentry * d_alloc_anon(struct inode *); | |||
| 230 | extern struct dentry * d_splice_alias(struct inode *, struct dentry *); | 230 | extern struct dentry * d_splice_alias(struct inode *, struct dentry *); |
| 231 | extern void shrink_dcache_sb(struct super_block *); | 231 | extern void shrink_dcache_sb(struct super_block *); |
| 232 | extern void shrink_dcache_parent(struct dentry *); | 232 | extern void shrink_dcache_parent(struct dentry *); |
| 233 | extern void shrink_dcache_for_umount(struct super_block *); | ||
| 233 | extern int d_invalidate(struct dentry *); | 234 | extern int d_invalidate(struct dentry *); |
| 234 | 235 | ||
| 235 | /* only used at mount-time */ | 236 | /* only used at mount-time */ |
diff --git a/include/linux/dccp.h b/include/linux/dccp.h index d6f4ec467a4b..53553c99cad6 100644 --- a/include/linux/dccp.h +++ b/include/linux/dccp.h | |||
| @@ -191,7 +191,7 @@ enum { | |||
| 191 | /* this structure is argument to DCCP_SOCKOPT_CHANGE_X */ | 191 | /* this structure is argument to DCCP_SOCKOPT_CHANGE_X */ |
| 192 | struct dccp_so_feat { | 192 | struct dccp_so_feat { |
| 193 | __u8 dccpsf_feat; | 193 | __u8 dccpsf_feat; |
| 194 | __u8 *dccpsf_val; | 194 | __u8 __user *dccpsf_val; |
| 195 | __u8 dccpsf_len; | 195 | __u8 dccpsf_len; |
| 196 | }; | 196 | }; |
| 197 | 197 | ||
diff --git a/include/linux/debug_locks.h b/include/linux/debug_locks.h index 88dafa246d87..952bee79a8f3 100644 --- a/include/linux/debug_locks.h +++ b/include/linux/debug_locks.h | |||
| @@ -43,6 +43,8 @@ extern int debug_locks_off(void); | |||
| 43 | # define locking_selftest() do { } while (0) | 43 | # define locking_selftest() do { } while (0) |
| 44 | #endif | 44 | #endif |
| 45 | 45 | ||
| 46 | struct task_struct; | ||
| 47 | |||
| 46 | #ifdef CONFIG_LOCKDEP | 48 | #ifdef CONFIG_LOCKDEP |
| 47 | extern void debug_show_all_locks(void); | 49 | extern void debug_show_all_locks(void); |
| 48 | extern void debug_show_held_locks(struct task_struct *task); | 50 | extern void debug_show_held_locks(struct task_struct *task); |
diff --git a/include/linux/dlm.h b/include/linux/dlm.h new file mode 100644 index 000000000000..1b1dcb9a40bb --- /dev/null +++ b/include/linux/dlm.h | |||
| @@ -0,0 +1,302 @@ | |||
| 1 | /****************************************************************************** | ||
| 2 | ******************************************************************************* | ||
| 3 | ** | ||
| 4 | ** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. | ||
| 5 | ** Copyright (C) 2004-2005 Red Hat, Inc. All rights reserved. | ||
| 6 | ** | ||
| 7 | ** This copyrighted material is made available to anyone wishing to use, | ||
| 8 | ** modify, copy, or redistribute it subject to the terms and conditions | ||
| 9 | ** of the GNU General Public License v.2. | ||
| 10 | ** | ||
| 11 | ******************************************************************************* | ||
| 12 | ******************************************************************************/ | ||
| 13 | |||
| 14 | #ifndef __DLM_DOT_H__ | ||
| 15 | #define __DLM_DOT_H__ | ||
| 16 | |||
| 17 | /* | ||
| 18 | * Interface to Distributed Lock Manager (DLM) | ||
| 19 | * routines and structures to use DLM lockspaces | ||
| 20 | */ | ||
| 21 | |||
| 22 | /* | ||
| 23 | * Lock Modes | ||
| 24 | */ | ||
| 25 | |||
| 26 | #define DLM_LOCK_IV -1 /* invalid */ | ||
| 27 | #define DLM_LOCK_NL 0 /* null */ | ||
| 28 | #define DLM_LOCK_CR 1 /* concurrent read */ | ||
| 29 | #define DLM_LOCK_CW 2 /* concurrent write */ | ||
| 30 | #define DLM_LOCK_PR 3 /* protected read */ | ||
| 31 | #define DLM_LOCK_PW 4 /* protected write */ | ||
| 32 | #define DLM_LOCK_EX 5 /* exclusive */ | ||
| 33 | |||
| 34 | /* | ||
| 35 | * Maximum size in bytes of a dlm_lock name | ||
| 36 | */ | ||
| 37 | |||
| 38 | #define DLM_RESNAME_MAXLEN 64 | ||
| 39 | |||
| 40 | /* | ||
| 41 | * Flags to dlm_lock | ||
| 42 | * | ||
| 43 | * DLM_LKF_NOQUEUE | ||
| 44 | * | ||
| 45 | * Do not queue the lock request on the wait queue if it cannot be granted | ||
| 46 | * immediately. If the lock cannot be granted because of this flag, DLM will | ||
| 47 | * either return -EAGAIN from the dlm_lock call or will return 0 from | ||
| 48 | * dlm_lock and -EAGAIN in the lock status block when the AST is executed. | ||
| 49 | * | ||
| 50 | * DLM_LKF_CANCEL | ||
| 51 | * | ||
| 52 | * Used to cancel a pending lock request or conversion. A converting lock is | ||
| 53 | * returned to its previously granted mode. | ||
| 54 | * | ||
| 55 | * DLM_LKF_CONVERT | ||
| 56 | * | ||
| 57 | * Indicates a lock conversion request. For conversions the name and namelen | ||
| 58 | * are ignored and the lock ID in the LKSB is used to identify the lock. | ||
| 59 | * | ||
| 60 | * DLM_LKF_VALBLK | ||
| 61 | * | ||
| 62 | * Requests DLM to return the current contents of the lock value block in the | ||
| 63 | * lock status block. When this flag is set in a lock conversion from PW or EX | ||
| 64 | * modes, DLM assigns the value specified in the lock status block to the lock | ||
| 65 | * value block of the lock resource. The LVB is a DLM_LVB_LEN size array | ||
| 66 | * containing application-specific information. | ||
| 67 | * | ||
| 68 | * DLM_LKF_QUECVT | ||
| 69 | * | ||
| 70 | * Force a conversion request to be queued, even if it is compatible with | ||
| 71 | * the granted modes of other locks on the same resource. | ||
| 72 | * | ||
| 73 | * DLM_LKF_IVVALBLK | ||
| 74 | * | ||
| 75 | * Invalidate the lock value block. | ||
| 76 | * | ||
| 77 | * DLM_LKF_CONVDEADLK | ||
| 78 | * | ||
| 79 | * Allows the dlm to resolve conversion deadlocks internally by demoting the | ||
| 80 | * granted mode of a converting lock to NL. The DLM_SBF_DEMOTED flag is | ||
| 81 | * returned for a conversion that's been effected by this. | ||
| 82 | * | ||
| 83 | * DLM_LKF_PERSISTENT | ||
| 84 | * | ||
| 85 | * Only relevant to locks originating in userspace. A persistent lock will not | ||
| 86 | * be removed if the process holding the lock exits. | ||
| 87 | * | ||
| 88 | * DLM_LKF_NODLKWT | ||
| 89 | * DLM_LKF_NODLCKBLK | ||
| 90 | * | ||
| 91 | * net yet implemented | ||
| 92 | * | ||
| 93 | * DLM_LKF_EXPEDITE | ||
| 94 | * | ||
| 95 | * Used only with new requests for NL mode locks. Tells the lock manager | ||
| 96 | * to grant the lock, ignoring other locks in convert and wait queues. | ||
| 97 | * | ||
| 98 | * DLM_LKF_NOQUEUEBAST | ||
| 99 | * | ||
| 100 | * Send blocking AST's before returning -EAGAIN to the caller. It is only | ||
| 101 | * used along with the NOQUEUE flag. Blocking AST's are not sent for failed | ||
| 102 | * NOQUEUE requests otherwise. | ||
| 103 | * | ||
| 104 | * DLM_LKF_HEADQUE | ||
| 105 | * | ||
| 106 | * Add a lock to the head of the convert or wait queue rather than the tail. | ||
| 107 | * | ||
| 108 | * DLM_LKF_NOORDER | ||
| 109 | * | ||
| 110 | * Disregard the standard grant order rules and grant a lock as soon as it | ||
| 111 | * is compatible with other granted locks. | ||
| 112 | * | ||
| 113 | * DLM_LKF_ORPHAN | ||
| 114 | * | ||
| 115 | * not yet implemented | ||
| 116 | * | ||
| 117 | * DLM_LKF_ALTPR | ||
| 118 | * | ||
| 119 | * If the requested mode cannot be granted immediately, try to grant the lock | ||
| 120 | * in PR mode instead. If this alternate mode is granted instead of the | ||
| 121 | * requested mode, DLM_SBF_ALTMODE is returned in the lksb. | ||
| 122 | * | ||
| 123 | * DLM_LKF_ALTCW | ||
| 124 | * | ||
| 125 | * The same as ALTPR, but the alternate mode is CW. | ||
| 126 | * | ||
| 127 | * DLM_LKF_FORCEUNLOCK | ||
| 128 | * | ||
| 129 | * Unlock the lock even if it is converting or waiting or has sublocks. | ||
| 130 | * Only really for use by the userland device.c code. | ||
| 131 | * | ||
| 132 | */ | ||
| 133 | |||
| 134 | #define DLM_LKF_NOQUEUE 0x00000001 | ||
| 135 | #define DLM_LKF_CANCEL 0x00000002 | ||
| 136 | #define DLM_LKF_CONVERT 0x00000004 | ||
| 137 | #define DLM_LKF_VALBLK 0x00000008 | ||
| 138 | #define DLM_LKF_QUECVT 0x00000010 | ||
| 139 | #define DLM_LKF_IVVALBLK 0x00000020 | ||
| 140 | #define DLM_LKF_CONVDEADLK 0x00000040 | ||
| 141 | #define DLM_LKF_PERSISTENT 0x00000080 | ||
| 142 | #define DLM_LKF_NODLCKWT 0x00000100 | ||
| 143 | #define DLM_LKF_NODLCKBLK 0x00000200 | ||
| 144 | #define DLM_LKF_EXPEDITE 0x00000400 | ||
| 145 | #define DLM_LKF_NOQUEUEBAST 0x00000800 | ||
| 146 | #define DLM_LKF_HEADQUE 0x00001000 | ||
| 147 | #define DLM_LKF_NOORDER 0x00002000 | ||
| 148 | #define DLM_LKF_ORPHAN 0x00004000 | ||
| 149 | #define DLM_LKF_ALTPR 0x00008000 | ||
| 150 | #define DLM_LKF_ALTCW 0x00010000 | ||
| 151 | #define DLM_LKF_FORCEUNLOCK 0x00020000 | ||
| 152 | |||
| 153 | /* | ||
| 154 | * Some return codes that are not in errno.h | ||
| 155 | */ | ||
| 156 | |||
| 157 | #define DLM_ECANCEL 0x10001 | ||
| 158 | #define DLM_EUNLOCK 0x10002 | ||
| 159 | |||
| 160 | typedef void dlm_lockspace_t; | ||
| 161 | |||
| 162 | /* | ||
| 163 | * Lock status block | ||
| 164 | * | ||
| 165 | * Use this structure to specify the contents of the lock value block. For a | ||
| 166 | * conversion request, this structure is used to specify the lock ID of the | ||
| 167 | * lock. DLM writes the status of the lock request and the lock ID assigned | ||
| 168 | * to the request in the lock status block. | ||
| 169 | * | ||
| 170 | * sb_lkid: the returned lock ID. It is set on new (non-conversion) requests. | ||
| 171 | * It is available when dlm_lock returns. | ||
| 172 | * | ||
| 173 | * sb_lvbptr: saves or returns the contents of the lock's LVB according to rules | ||
| 174 | * shown for the DLM_LKF_VALBLK flag. | ||
| 175 | * | ||
| 176 | * sb_flags: DLM_SBF_DEMOTED is returned if in the process of promoting a lock, | ||
| 177 | * it was first demoted to NL to avoid conversion deadlock. | ||
| 178 | * DLM_SBF_VALNOTVALID is returned if the resource's LVB is marked invalid. | ||
| 179 | * | ||
| 180 | * sb_status: the returned status of the lock request set prior to AST | ||
| 181 | * execution. Possible return values: | ||
| 182 | * | ||
| 183 | * 0 if lock request was successful | ||
| 184 | * -EAGAIN if request would block and is flagged DLM_LKF_NOQUEUE | ||
| 185 | * -ENOMEM if there is no memory to process request | ||
| 186 | * -EINVAL if there are invalid parameters | ||
| 187 | * -DLM_EUNLOCK if unlock request was successful | ||
| 188 | * -DLM_ECANCEL if a cancel completed successfully | ||
| 189 | */ | ||
| 190 | |||
| 191 | #define DLM_SBF_DEMOTED 0x01 | ||
| 192 | #define DLM_SBF_VALNOTVALID 0x02 | ||
| 193 | #define DLM_SBF_ALTMODE 0x04 | ||
| 194 | |||
| 195 | struct dlm_lksb { | ||
| 196 | int sb_status; | ||
| 197 | uint32_t sb_lkid; | ||
| 198 | char sb_flags; | ||
| 199 | char * sb_lvbptr; | ||
| 200 | }; | ||
| 201 | |||
| 202 | |||
| 203 | #ifdef __KERNEL__ | ||
| 204 | |||
| 205 | #define DLM_LSFL_NODIR 0x00000001 | ||
| 206 | |||
| 207 | /* | ||
| 208 | * dlm_new_lockspace | ||
| 209 | * | ||
| 210 | * Starts a lockspace with the given name. If the named lockspace exists in | ||
| 211 | * the cluster, the calling node joins it. | ||
| 212 | */ | ||
| 213 | |||
| 214 | int dlm_new_lockspace(char *name, int namelen, dlm_lockspace_t **lockspace, | ||
| 215 | uint32_t flags, int lvblen); | ||
| 216 | |||
| 217 | /* | ||
| 218 | * dlm_release_lockspace | ||
| 219 | * | ||
| 220 | * Stop a lockspace. | ||
| 221 | */ | ||
| 222 | |||
| 223 | int dlm_release_lockspace(dlm_lockspace_t *lockspace, int force); | ||
| 224 | |||
| 225 | /* | ||
| 226 | * dlm_lock | ||
| 227 | * | ||
| 228 | * Make an asyncronous request to acquire or convert a lock on a named | ||
| 229 | * resource. | ||
| 230 | * | ||
| 231 | * lockspace: context for the request | ||
| 232 | * mode: the requested mode of the lock (DLM_LOCK_) | ||
| 233 | * lksb: lock status block for input and async return values | ||
| 234 | * flags: input flags (DLM_LKF_) | ||
| 235 | * name: name of the resource to lock, can be binary | ||
| 236 | * namelen: the length in bytes of the resource name (MAX_RESNAME_LEN) | ||
| 237 | * parent: the lock ID of a parent lock or 0 if none | ||
| 238 | * lockast: function DLM executes when it completes processing the request | ||
| 239 | * astarg: argument passed to lockast and bast functions | ||
| 240 | * bast: function DLM executes when this lock later blocks another request | ||
| 241 | * | ||
| 242 | * Returns: | ||
| 243 | * 0 if request is successfully queued for processing | ||
| 244 | * -EINVAL if any input parameters are invalid | ||
| 245 | * -EAGAIN if request would block and is flagged DLM_LKF_NOQUEUE | ||
| 246 | * -ENOMEM if there is no memory to process request | ||
| 247 | * -ENOTCONN if there is a communication error | ||
| 248 | * | ||
| 249 | * If the call to dlm_lock returns an error then the operation has failed and | ||
| 250 | * the AST routine will not be called. If dlm_lock returns 0 it is still | ||
| 251 | * possible that the lock operation will fail. The AST routine will be called | ||
| 252 | * when the locking is complete and the status is returned in the lksb. | ||
| 253 | * | ||
| 254 | * If the AST routines or parameter are passed to a conversion operation then | ||
| 255 | * they will overwrite those values that were passed to a previous dlm_lock | ||
| 256 | * call. | ||
| 257 | * | ||
| 258 | * AST routines should not block (at least not for long), but may make | ||
| 259 | * any locking calls they please. | ||
| 260 | */ | ||
| 261 | |||
| 262 | int dlm_lock(dlm_lockspace_t *lockspace, | ||
| 263 | int mode, | ||
| 264 | struct dlm_lksb *lksb, | ||
| 265 | uint32_t flags, | ||
| 266 | void *name, | ||
| 267 | unsigned int namelen, | ||
| 268 | uint32_t parent_lkid, | ||
| 269 | void (*lockast) (void *astarg), | ||
| 270 | void *astarg, | ||
| 271 | void (*bast) (void *astarg, int mode)); | ||
| 272 | |||
| 273 | /* | ||
| 274 | * dlm_unlock | ||
| 275 | * | ||
| 276 | * Asynchronously release a lock on a resource. The AST routine is called | ||
| 277 | * when the resource is successfully unlocked. | ||
| 278 | * | ||
| 279 | * lockspace: context for the request | ||
| 280 | * lkid: the lock ID as returned in the lksb | ||
| 281 | * flags: input flags (DLM_LKF_) | ||
| 282 | * lksb: if NULL the lksb parameter passed to last lock request is used | ||
| 283 | * astarg: the arg used with the completion ast for the unlock | ||
| 284 | * | ||
| 285 | * Returns: | ||
| 286 | * 0 if request is successfully queued for processing | ||
| 287 | * -EINVAL if any input parameters are invalid | ||
| 288 | * -ENOTEMPTY if the lock still has sublocks | ||
| 289 | * -EBUSY if the lock is waiting for a remote lock operation | ||
| 290 | * -ENOTCONN if there is a communication error | ||
| 291 | */ | ||
| 292 | |||
| 293 | int dlm_unlock(dlm_lockspace_t *lockspace, | ||
| 294 | uint32_t lkid, | ||
| 295 | uint32_t flags, | ||
| 296 | struct dlm_lksb *lksb, | ||
| 297 | void *astarg); | ||
| 298 | |||
| 299 | #endif /* __KERNEL__ */ | ||
| 300 | |||
| 301 | #endif /* __DLM_DOT_H__ */ | ||
| 302 | |||
diff --git a/include/linux/dlm_device.h b/include/linux/dlm_device.h new file mode 100644 index 000000000000..2a2dd189b9fd --- /dev/null +++ b/include/linux/dlm_device.h | |||
| @@ -0,0 +1,86 @@ | |||
| 1 | /****************************************************************************** | ||
| 2 | ******************************************************************************* | ||
| 3 | ** | ||
| 4 | ** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. | ||
| 5 | ** Copyright (C) 2004-2005 Red Hat, Inc. All rights reserved. | ||
| 6 | ** | ||
| 7 | ** This copyrighted material is made available to anyone wishing to use, | ||
| 8 | ** modify, copy, or redistribute it subject to the terms and conditions | ||
| 9 | ** of the GNU General Public License v.2. | ||
| 10 | ** | ||
| 11 | ******************************************************************************* | ||
| 12 | ******************************************************************************/ | ||
| 13 | |||
| 14 | /* This is the device interface for dlm, most users will use a library | ||
| 15 | * interface. | ||
| 16 | */ | ||
| 17 | |||
| 18 | #define DLM_USER_LVB_LEN 32 | ||
| 19 | |||
| 20 | /* Version of the device interface */ | ||
| 21 | #define DLM_DEVICE_VERSION_MAJOR 5 | ||
| 22 | #define DLM_DEVICE_VERSION_MINOR 0 | ||
| 23 | #define DLM_DEVICE_VERSION_PATCH 0 | ||
| 24 | |||
| 25 | /* struct passed to the lock write */ | ||
| 26 | struct dlm_lock_params { | ||
| 27 | __u8 mode; | ||
| 28 | __u8 namelen; | ||
| 29 | __u16 flags; | ||
| 30 | __u32 lkid; | ||
| 31 | __u32 parent; | ||
| 32 | void __user *castparam; | ||
| 33 | void __user *castaddr; | ||
| 34 | void __user *bastparam; | ||
| 35 | void __user *bastaddr; | ||
| 36 | struct dlm_lksb __user *lksb; | ||
| 37 | char lvb[DLM_USER_LVB_LEN]; | ||
| 38 | char name[0]; | ||
| 39 | }; | ||
| 40 | |||
| 41 | struct dlm_lspace_params { | ||
| 42 | __u32 flags; | ||
| 43 | __u32 minor; | ||
| 44 | char name[0]; | ||
| 45 | }; | ||
| 46 | |||
| 47 | struct dlm_write_request { | ||
| 48 | __u32 version[3]; | ||
| 49 | __u8 cmd; | ||
| 50 | __u8 is64bit; | ||
| 51 | __u8 unused[2]; | ||
| 52 | |||
| 53 | union { | ||
| 54 | struct dlm_lock_params lock; | ||
| 55 | struct dlm_lspace_params lspace; | ||
| 56 | } i; | ||
| 57 | }; | ||
| 58 | |||
| 59 | /* struct read from the "device" fd, | ||
| 60 | consists mainly of userspace pointers for the library to use */ | ||
| 61 | struct dlm_lock_result { | ||
| 62 | __u32 length; | ||
| 63 | void __user * user_astaddr; | ||
| 64 | void __user * user_astparam; | ||
| 65 | struct dlm_lksb __user * user_lksb; | ||
| 66 | struct dlm_lksb lksb; | ||
| 67 | __u8 bast_mode; | ||
| 68 | __u8 unused[3]; | ||
| 69 | /* Offsets may be zero if no data is present */ | ||
| 70 | __u32 lvb_offset; | ||
| 71 | }; | ||
| 72 | |||
| 73 | /* Commands passed to the device */ | ||
| 74 | #define DLM_USER_LOCK 1 | ||
| 75 | #define DLM_USER_UNLOCK 2 | ||
| 76 | #define DLM_USER_QUERY 3 | ||
| 77 | #define DLM_USER_CREATE_LOCKSPACE 4 | ||
| 78 | #define DLM_USER_REMOVE_LOCKSPACE 5 | ||
| 79 | |||
| 80 | /* Arbitrary length restriction */ | ||
| 81 | #define MAX_LS_NAME_LEN 64 | ||
| 82 | |||
| 83 | /* Lockspace flags */ | ||
| 84 | #define DLM_USER_LSFLG_AUTOFREE 1 | ||
| 85 | #define DLM_USER_LSFLG_FORCEFREE 2 | ||
| 86 | |||
diff --git a/include/linux/elevator.h b/include/linux/elevator.h index b3370ef5164d..2fa9f1144228 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h | |||
| @@ -70,7 +70,6 @@ struct elevator_type | |||
| 70 | { | 70 | { |
| 71 | struct list_head list; | 71 | struct list_head list; |
| 72 | struct elevator_ops ops; | 72 | struct elevator_ops ops; |
| 73 | struct elevator_type *elevator_type; | ||
| 74 | struct elv_fs_entry *elevator_attrs; | 73 | struct elv_fs_entry *elevator_attrs; |
| 75 | char elevator_name[ELV_NAME_MAX]; | 74 | char elevator_name[ELV_NAME_MAX]; |
| 76 | struct module *elevator_owner; | 75 | struct module *elevator_owner; |
diff --git a/include/linux/ext4_fs.h b/include/linux/ext4_fs.h new file mode 100644 index 000000000000..498503ee613d --- /dev/null +++ b/include/linux/ext4_fs.h | |||
| @@ -0,0 +1,994 @@ | |||
| 1 | /* | ||
| 2 | * linux/include/linux/ext4_fs.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 1992, 1993, 1994, 1995 | ||
| 5 | * Remy Card (card@masi.ibp.fr) | ||
| 6 | * Laboratoire MASI - Institut Blaise Pascal | ||
| 7 | * Universite Pierre et Marie Curie (Paris VI) | ||
| 8 | * | ||
| 9 | * from | ||
| 10 | * | ||
| 11 | * linux/include/linux/minix_fs.h | ||
| 12 | * | ||
| 13 | * Copyright (C) 1991, 1992 Linus Torvalds | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef _LINUX_EXT4_FS_H | ||
| 17 | #define _LINUX_EXT4_FS_H | ||
| 18 | |||
| 19 | #include <linux/types.h> | ||
| 20 | #include <linux/blkdev.h> | ||
| 21 | #include <linux/magic.h> | ||
| 22 | |||
| 23 | /* | ||
| 24 | * The second extended filesystem constants/structures | ||
| 25 | */ | ||
| 26 | |||
| 27 | /* | ||
| 28 | * Define EXT4FS_DEBUG to produce debug messages | ||
| 29 | */ | ||
| 30 | #undef EXT4FS_DEBUG | ||
| 31 | |||
| 32 | /* | ||
| 33 | * Define EXT4_RESERVATION to reserve data blocks for expanding files | ||
| 34 | */ | ||
| 35 | #define EXT4_DEFAULT_RESERVE_BLOCKS 8 | ||
| 36 | /*max window size: 1024(direct blocks) + 3([t,d]indirect blocks) */ | ||
| 37 | #define EXT4_MAX_RESERVE_BLOCKS 1027 | ||
| 38 | #define EXT4_RESERVE_WINDOW_NOT_ALLOCATED 0 | ||
| 39 | /* | ||
| 40 | * Always enable hashed directories | ||
| 41 | */ | ||
| 42 | #define CONFIG_EXT4_INDEX | ||
| 43 | |||
| 44 | /* | ||
| 45 | * Debug code | ||
| 46 | */ | ||
| 47 | #ifdef EXT4FS_DEBUG | ||
| 48 | #define ext4_debug(f, a...) \ | ||
| 49 | do { \ | ||
| 50 | printk (KERN_DEBUG "EXT4-fs DEBUG (%s, %d): %s:", \ | ||
| 51 | __FILE__, __LINE__, __FUNCTION__); \ | ||
| 52 | printk (KERN_DEBUG f, ## a); \ | ||
| 53 | } while (0) | ||
| 54 | #else | ||
| 55 | #define ext4_debug(f, a...) do {} while (0) | ||
| 56 | #endif | ||
| 57 | |||
| 58 | /* | ||
| 59 | * Special inodes numbers | ||
| 60 | */ | ||
| 61 | #define EXT4_BAD_INO 1 /* Bad blocks inode */ | ||
| 62 | #define EXT4_ROOT_INO 2 /* Root inode */ | ||
| 63 | #define EXT4_BOOT_LOADER_INO 5 /* Boot loader inode */ | ||
| 64 | #define EXT4_UNDEL_DIR_INO 6 /* Undelete directory inode */ | ||
| 65 | #define EXT4_RESIZE_INO 7 /* Reserved group descriptors inode */ | ||
| 66 | #define EXT4_JOURNAL_INO 8 /* Journal inode */ | ||
| 67 | |||
| 68 | /* First non-reserved inode for old ext4 filesystems */ | ||
| 69 | #define EXT4_GOOD_OLD_FIRST_INO 11 | ||
| 70 | |||
| 71 | /* | ||
| 72 | * Maximal count of links to a file | ||
| 73 | */ | ||
| 74 | #define EXT4_LINK_MAX 32000 | ||
| 75 | |||
| 76 | /* | ||
| 77 | * Macro-instructions used to manage several block sizes | ||
| 78 | */ | ||
| 79 | #define EXT4_MIN_BLOCK_SIZE 1024 | ||
| 80 | #define EXT4_MAX_BLOCK_SIZE 4096 | ||
| 81 | #define EXT4_MIN_BLOCK_LOG_SIZE 10 | ||
| 82 | #ifdef __KERNEL__ | ||
| 83 | # define EXT4_BLOCK_SIZE(s) ((s)->s_blocksize) | ||
| 84 | #else | ||
| 85 | # define EXT4_BLOCK_SIZE(s) (EXT4_MIN_BLOCK_SIZE << (s)->s_log_block_size) | ||
| 86 | #endif | ||
| 87 | #define EXT4_ADDR_PER_BLOCK(s) (EXT4_BLOCK_SIZE(s) / sizeof (__u32)) | ||
| 88 | #ifdef __KERNEL__ | ||
| 89 | # define EXT4_BLOCK_SIZE_BITS(s) ((s)->s_blocksize_bits) | ||
| 90 | #else | ||
| 91 | # define EXT4_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10) | ||
| 92 | #endif | ||
| 93 | #ifdef __KERNEL__ | ||
| 94 | #define EXT4_ADDR_PER_BLOCK_BITS(s) (EXT4_SB(s)->s_addr_per_block_bits) | ||
| 95 | #define EXT4_INODE_SIZE(s) (EXT4_SB(s)->s_inode_size) | ||
| 96 | #define EXT4_FIRST_INO(s) (EXT4_SB(s)->s_first_ino) | ||
| 97 | #else | ||
| 98 | #define EXT4_INODE_SIZE(s) (((s)->s_rev_level == EXT4_GOOD_OLD_REV) ? \ | ||
| 99 | EXT4_GOOD_OLD_INODE_SIZE : \ | ||
| 100 | (s)->s_inode_size) | ||
| 101 | #define EXT4_FIRST_INO(s) (((s)->s_rev_level == EXT4_GOOD_OLD_REV) ? \ | ||
| 102 | EXT4_GOOD_OLD_FIRST_INO : \ | ||
| 103 | (s)->s_first_ino) | ||
| 104 | #endif | ||
| 105 | |||
| 106 | /* | ||
| 107 | * Macro-instructions used to manage fragments | ||
| 108 | */ | ||
| 109 | #define EXT4_MIN_FRAG_SIZE 1024 | ||
| 110 | #define EXT4_MAX_FRAG_SIZE 4096 | ||
| 111 | #define EXT4_MIN_FRAG_LOG_SIZE 10 | ||
| 112 | #ifdef __KERNEL__ | ||
| 113 | # define EXT4_FRAG_SIZE(s) (EXT4_SB(s)->s_frag_size) | ||
| 114 | # define EXT4_FRAGS_PER_BLOCK(s) (EXT4_SB(s)->s_frags_per_block) | ||
| 115 | #else | ||
| 116 | # define EXT4_FRAG_SIZE(s) (EXT4_MIN_FRAG_SIZE << (s)->s_log_frag_size) | ||
| 117 | # define EXT4_FRAGS_PER_BLOCK(s) (EXT4_BLOCK_SIZE(s) / EXT4_FRAG_SIZE(s)) | ||
| 118 | #endif | ||
| 119 | |||
| 120 | /* | ||
| 121 | * Structure of a blocks group descriptor | ||
| 122 | */ | ||
| 123 | struct ext4_group_desc | ||
| 124 | { | ||
| 125 | __le32 bg_block_bitmap; /* Blocks bitmap block */ | ||
| 126 | __le32 bg_inode_bitmap; /* Inodes bitmap block */ | ||
| 127 | __le32 bg_inode_table; /* Inodes table block */ | ||
| 128 | __le16 bg_free_blocks_count; /* Free blocks count */ | ||
| 129 | __le16 bg_free_inodes_count; /* Free inodes count */ | ||
| 130 | __le16 bg_used_dirs_count; /* Directories count */ | ||
| 131 | __u16 bg_flags; | ||
| 132 | __u32 bg_reserved[3]; | ||
| 133 | __le32 bg_block_bitmap_hi; /* Blocks bitmap block MSB */ | ||
| 134 | __le32 bg_inode_bitmap_hi; /* Inodes bitmap block MSB */ | ||
| 135 | __le32 bg_inode_table_hi; /* Inodes table block MSB */ | ||
| 136 | }; | ||
| 137 | |||
| 138 | #ifdef __KERNEL__ | ||
| 139 | #include <linux/ext4_fs_i.h> | ||
| 140 | #include <linux/ext4_fs_sb.h> | ||
| 141 | #endif | ||
| 142 | /* | ||
| 143 | * Macro-instructions used to manage group descriptors | ||
| 144 | */ | ||
| 145 | #define EXT4_MIN_DESC_SIZE 32 | ||
| 146 | #define EXT4_MIN_DESC_SIZE_64BIT 64 | ||
| 147 | #define EXT4_MAX_DESC_SIZE EXT4_MIN_BLOCK_SIZE | ||
| 148 | #define EXT4_DESC_SIZE(s) (EXT4_SB(s)->s_desc_size) | ||
| 149 | #ifdef __KERNEL__ | ||
| 150 | # define EXT4_BLOCKS_PER_GROUP(s) (EXT4_SB(s)->s_blocks_per_group) | ||
| 151 | # define EXT4_DESC_PER_BLOCK(s) (EXT4_SB(s)->s_desc_per_block) | ||
| 152 | # define EXT4_INODES_PER_GROUP(s) (EXT4_SB(s)->s_inodes_per_group) | ||
| 153 | # define EXT4_DESC_PER_BLOCK_BITS(s) (EXT4_SB(s)->s_desc_per_block_bits) | ||
| 154 | #else | ||
| 155 | # define EXT4_BLOCKS_PER_GROUP(s) ((s)->s_blocks_per_group) | ||
| 156 | # define EXT4_DESC_PER_BLOCK(s) (EXT4_BLOCK_SIZE(s) / EXT4_DESC_SIZE(s)) | ||
| 157 | # define EXT4_INODES_PER_GROUP(s) ((s)->s_inodes_per_group) | ||
| 158 | #endif | ||
| 159 | |||
| 160 | /* | ||
| 161 | * Constants relative to the data blocks | ||
| 162 | */ | ||
| 163 | #define EXT4_NDIR_BLOCKS 12 | ||
| 164 | #define EXT4_IND_BLOCK EXT4_NDIR_BLOCKS | ||
| 165 | #define EXT4_DIND_BLOCK (EXT4_IND_BLOCK + 1) | ||
| 166 | #define EXT4_TIND_BLOCK (EXT4_DIND_BLOCK + 1) | ||
| 167 | #define EXT4_N_BLOCKS (EXT4_TIND_BLOCK + 1) | ||
| 168 | |||
| 169 | /* | ||
| 170 | * Inode flags | ||
| 171 | */ | ||
| 172 | #define EXT4_SECRM_FL 0x00000001 /* Secure deletion */ | ||
| 173 | #define EXT4_UNRM_FL 0x00000002 /* Undelete */ | ||
| 174 | #define EXT4_COMPR_FL 0x00000004 /* Compress file */ | ||
| 175 | #define EXT4_SYNC_FL 0x00000008 /* Synchronous updates */ | ||
| 176 | #define EXT4_IMMUTABLE_FL 0x00000010 /* Immutable file */ | ||
| 177 | #define EXT4_APPEND_FL 0x00000020 /* writes to file may only append */ | ||
| 178 | #define EXT4_NODUMP_FL 0x00000040 /* do not dump file */ | ||
| 179 | #define EXT4_NOATIME_FL 0x00000080 /* do not update atime */ | ||
| 180 | /* Reserved for compression usage... */ | ||
| 181 | #define EXT4_DIRTY_FL 0x00000100 | ||
| 182 | #define EXT4_COMPRBLK_FL 0x00000200 /* One or more compressed clusters */ | ||
| 183 | #define EXT4_NOCOMPR_FL 0x00000400 /* Don't compress */ | ||
| 184 | #define EXT4_ECOMPR_FL 0x00000800 /* Compression error */ | ||
| 185 | /* End compression flags --- maybe not all used */ | ||
| 186 | #define EXT4_INDEX_FL 0x00001000 /* hash-indexed directory */ | ||
| 187 | #define EXT4_IMAGIC_FL 0x00002000 /* AFS directory */ | ||
| 188 | #define EXT4_JOURNAL_DATA_FL 0x00004000 /* file data should be journaled */ | ||
| 189 | #define EXT4_NOTAIL_FL 0x00008000 /* file tail should not be merged */ | ||
| 190 | #define EXT4_DIRSYNC_FL 0x00010000 /* dirsync behaviour (directories only) */ | ||
| 191 | #define EXT4_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/ | ||
| 192 | #define EXT4_RESERVED_FL 0x80000000 /* reserved for ext4 lib */ | ||
| 193 | #define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */ | ||
| 194 | |||
| 195 | #define EXT4_FL_USER_VISIBLE 0x000BDFFF /* User visible flags */ | ||
| 196 | #define EXT4_FL_USER_MODIFIABLE 0x000380FF /* User modifiable flags */ | ||
| 197 | |||
| 198 | /* | ||
| 199 | * Inode dynamic state flags | ||
| 200 | */ | ||
| 201 | #define EXT4_STATE_JDATA 0x00000001 /* journaled data exists */ | ||
| 202 | #define EXT4_STATE_NEW 0x00000002 /* inode is newly created */ | ||
| 203 | #define EXT4_STATE_XATTR 0x00000004 /* has in-inode xattrs */ | ||
| 204 | |||
| 205 | /* Used to pass group descriptor data when online resize is done */ | ||
| 206 | struct ext4_new_group_input { | ||
| 207 | __u32 group; /* Group number for this data */ | ||
| 208 | __u64 block_bitmap; /* Absolute block number of block bitmap */ | ||
| 209 | __u64 inode_bitmap; /* Absolute block number of inode bitmap */ | ||
| 210 | __u64 inode_table; /* Absolute block number of inode table start */ | ||
| 211 | __u32 blocks_count; /* Total number of blocks in this group */ | ||
| 212 | __u16 reserved_blocks; /* Number of reserved blocks in this group */ | ||
| 213 | __u16 unused; | ||
| 214 | }; | ||
| 215 | |||
| 216 | /* The struct ext4_new_group_input in kernel space, with free_blocks_count */ | ||
| 217 | struct ext4_new_group_data { | ||
| 218 | __u32 group; | ||
| 219 | __u64 block_bitmap; | ||
| 220 | __u64 inode_bitmap; | ||
| 221 | __u64 inode_table; | ||
| 222 | __u32 blocks_count; | ||
| 223 | __u16 reserved_blocks; | ||
| 224 | __u16 unused; | ||
| 225 | __u32 free_blocks_count; | ||
| 226 | }; | ||
| 227 | |||
| 228 | |||
| 229 | /* | ||
| 230 | * ioctl commands | ||
| 231 | */ | ||
| 232 | #define EXT4_IOC_GETFLAGS FS_IOC_GETFLAGS | ||
| 233 | #define EXT4_IOC_SETFLAGS FS_IOC_SETFLAGS | ||
| 234 | #define EXT4_IOC_GETVERSION _IOR('f', 3, long) | ||
| 235 | #define EXT4_IOC_SETVERSION _IOW('f', 4, long) | ||
| 236 | #define EXT4_IOC_GROUP_EXTEND _IOW('f', 7, unsigned long) | ||
| 237 | #define EXT4_IOC_GROUP_ADD _IOW('f', 8,struct ext4_new_group_input) | ||
| 238 | #define EXT4_IOC_GETVERSION_OLD FS_IOC_GETVERSION | ||
| 239 | #define EXT4_IOC_SETVERSION_OLD FS_IOC_SETVERSION | ||
| 240 | #ifdef CONFIG_JBD_DEBUG | ||
| 241 | #define EXT4_IOC_WAIT_FOR_READONLY _IOR('f', 99, long) | ||
| 242 | #endif | ||
| 243 | #define EXT4_IOC_GETRSVSZ _IOR('f', 5, long) | ||
| 244 | #define EXT4_IOC_SETRSVSZ _IOW('f', 6, long) | ||
| 245 | |||
| 246 | /* | ||
| 247 | * ioctl commands in 32 bit emulation | ||
| 248 | */ | ||
| 249 | #define EXT4_IOC32_GETFLAGS FS_IOC32_GETFLAGS | ||
| 250 | #define EXT4_IOC32_SETFLAGS FS_IOC32_SETFLAGS | ||
| 251 | #define EXT4_IOC32_GETVERSION _IOR('f', 3, int) | ||
| 252 | #define EXT4_IOC32_SETVERSION _IOW('f', 4, int) | ||
| 253 | #define EXT4_IOC32_GETRSVSZ _IOR('f', 5, int) | ||
| 254 | #define EXT4_IOC32_SETRSVSZ _IOW('f', 6, int) | ||
| 255 | #define EXT4_IOC32_GROUP_EXTEND _IOW('f', 7, unsigned int) | ||
| 256 | #ifdef CONFIG_JBD_DEBUG | ||
| 257 | #define EXT4_IOC32_WAIT_FOR_READONLY _IOR('f', 99, int) | ||
| 258 | #endif | ||
| 259 | #define EXT4_IOC32_GETVERSION_OLD FS_IOC32_GETVERSION | ||
| 260 | #define EXT4_IOC32_SETVERSION_OLD FS_IOC32_SETVERSION | ||
| 261 | |||
| 262 | |||
| 263 | /* | ||
| 264 | * Mount options | ||
| 265 | */ | ||
| 266 | struct ext4_mount_options { | ||
| 267 | unsigned long s_mount_opt; | ||
| 268 | uid_t s_resuid; | ||
| 269 | gid_t s_resgid; | ||
| 270 | unsigned long s_commit_interval; | ||
| 271 | #ifdef CONFIG_QUOTA | ||
| 272 | int s_jquota_fmt; | ||
| 273 | char *s_qf_names[MAXQUOTAS]; | ||
| 274 | #endif | ||
| 275 | }; | ||
| 276 | |||
| 277 | /* | ||
| 278 | * Structure of an inode on the disk | ||
| 279 | */ | ||
| 280 | struct ext4_inode { | ||
| 281 | __le16 i_mode; /* File mode */ | ||
| 282 | __le16 i_uid; /* Low 16 bits of Owner Uid */ | ||
| 283 | __le32 i_size; /* Size in bytes */ | ||
| 284 | __le32 i_atime; /* Access time */ | ||
| 285 | __le32 i_ctime; /* Creation time */ | ||
| 286 | __le32 i_mtime; /* Modification time */ | ||
| 287 | __le32 i_dtime; /* Deletion Time */ | ||
| 288 | __le16 i_gid; /* Low 16 bits of Group Id */ | ||
| 289 | __le16 i_links_count; /* Links count */ | ||
| 290 | __le32 i_blocks; /* Blocks count */ | ||
| 291 | __le32 i_flags; /* File flags */ | ||
| 292 | union { | ||
| 293 | struct { | ||
| 294 | __u32 l_i_reserved1; | ||
| 295 | } linux1; | ||
| 296 | struct { | ||
| 297 | __u32 h_i_translator; | ||
| 298 | } hurd1; | ||
| 299 | struct { | ||
| 300 | __u32 m_i_reserved1; | ||
| 301 | } masix1; | ||
| 302 | } osd1; /* OS dependent 1 */ | ||
| 303 | __le32 i_block[EXT4_N_BLOCKS];/* Pointers to blocks */ | ||
| 304 | __le32 i_generation; /* File version (for NFS) */ | ||
| 305 | __le32 i_file_acl; /* File ACL */ | ||
| 306 | __le32 i_dir_acl; /* Directory ACL */ | ||
| 307 | __le32 i_faddr; /* Fragment address */ | ||
| 308 | union { | ||
| 309 | struct { | ||
| 310 | __u8 l_i_frag; /* Fragment number */ | ||
| 311 | __u8 l_i_fsize; /* Fragment size */ | ||
| 312 | __le16 l_i_file_acl_high; | ||
| 313 | __le16 l_i_uid_high; /* these 2 fields */ | ||
| 314 | __le16 l_i_gid_high; /* were reserved2[0] */ | ||
| 315 | __u32 l_i_reserved2; | ||
| 316 | } linux2; | ||
| 317 | struct { | ||
| 318 | __u8 h_i_frag; /* Fragment number */ | ||
| 319 | __u8 h_i_fsize; /* Fragment size */ | ||
| 320 | __u16 h_i_mode_high; | ||
| 321 | __u16 h_i_uid_high; | ||
| 322 | __u16 h_i_gid_high; | ||
| 323 | __u32 h_i_author; | ||
| 324 | } hurd2; | ||
| 325 | struct { | ||
| 326 | __u8 m_i_frag; /* Fragment number */ | ||
| 327 | __u8 m_i_fsize; /* Fragment size */ | ||
| 328 | __le16 m_i_file_acl_high; | ||
| 329 | __u32 m_i_reserved2[2]; | ||
| 330 | } masix2; | ||
| 331 | } osd2; /* OS dependent 2 */ | ||
| 332 | __le16 i_extra_isize; | ||
| 333 | __le16 i_pad1; | ||
| 334 | }; | ||
| 335 | |||
| 336 | #define i_size_high i_dir_acl | ||
| 337 | |||
| 338 | #if defined(__KERNEL__) || defined(__linux__) | ||
| 339 | #define i_reserved1 osd1.linux1.l_i_reserved1 | ||
| 340 | #define i_frag osd2.linux2.l_i_frag | ||
| 341 | #define i_fsize osd2.linux2.l_i_fsize | ||
| 342 | #define i_file_acl_high osd2.linux2.l_i_file_acl_high | ||
| 343 | #define i_uid_low i_uid | ||
| 344 | #define i_gid_low i_gid | ||
| 345 | #define i_uid_high osd2.linux2.l_i_uid_high | ||
| 346 | #define i_gid_high osd2.linux2.l_i_gid_high | ||
| 347 | #define i_reserved2 osd2.linux2.l_i_reserved2 | ||
| 348 | |||
| 349 | #elif defined(__GNU__) | ||
| 350 | |||
| 351 | #define i_translator osd1.hurd1.h_i_translator | ||
| 352 | #define i_frag osd2.hurd2.h_i_frag; | ||
| 353 | #define i_fsize osd2.hurd2.h_i_fsize; | ||
| 354 | #define i_uid_high osd2.hurd2.h_i_uid_high | ||
| 355 | #define i_gid_high osd2.hurd2.h_i_gid_high | ||
| 356 | #define i_author osd2.hurd2.h_i_author | ||
| 357 | |||
| 358 | #elif defined(__masix__) | ||
| 359 | |||
| 360 | #define i_reserved1 osd1.masix1.m_i_reserved1 | ||
| 361 | #define i_frag osd2.masix2.m_i_frag | ||
| 362 | #define i_fsize osd2.masix2.m_i_fsize | ||
| 363 | #define i_file_acl_high osd2.masix2.m_i_file_acl_high | ||
| 364 | #define i_reserved2 osd2.masix2.m_i_reserved2 | ||
| 365 | |||
| 366 | #endif /* defined(__KERNEL__) || defined(__linux__) */ | ||
| 367 | |||
| 368 | /* | ||
| 369 | * File system states | ||
| 370 | */ | ||
| 371 | #define EXT4_VALID_FS 0x0001 /* Unmounted cleanly */ | ||
| 372 | #define EXT4_ERROR_FS 0x0002 /* Errors detected */ | ||
| 373 | #define EXT4_ORPHAN_FS 0x0004 /* Orphans being recovered */ | ||
| 374 | |||
| 375 | /* | ||
| 376 | * Mount flags | ||
| 377 | */ | ||
| 378 | #define EXT4_MOUNT_CHECK 0x00001 /* Do mount-time checks */ | ||
| 379 | #define EXT4_MOUNT_OLDALLOC 0x00002 /* Don't use the new Orlov allocator */ | ||
| 380 | #define EXT4_MOUNT_GRPID 0x00004 /* Create files with directory's group */ | ||
| 381 | #define EXT4_MOUNT_DEBUG 0x00008 /* Some debugging messages */ | ||
| 382 | #define EXT4_MOUNT_ERRORS_CONT 0x00010 /* Continue on errors */ | ||
| 383 | #define EXT4_MOUNT_ERRORS_RO 0x00020 /* Remount fs ro on errors */ | ||
| 384 | #define EXT4_MOUNT_ERRORS_PANIC 0x00040 /* Panic on errors */ | ||
| 385 | #define EXT4_MOUNT_MINIX_DF 0x00080 /* Mimics the Minix statfs */ | ||
| 386 | #define EXT4_MOUNT_NOLOAD 0x00100 /* Don't use existing journal*/ | ||
| 387 | #define EXT4_MOUNT_ABORT 0x00200 /* Fatal error detected */ | ||
| 388 | #define EXT4_MOUNT_DATA_FLAGS 0x00C00 /* Mode for data writes: */ | ||
| 389 | #define EXT4_MOUNT_JOURNAL_DATA 0x00400 /* Write data to journal */ | ||
| 390 | #define EXT4_MOUNT_ORDERED_DATA 0x00800 /* Flush data before commit */ | ||
| 391 | #define EXT4_MOUNT_WRITEBACK_DATA 0x00C00 /* No data ordering */ | ||
| 392 | #define EXT4_MOUNT_UPDATE_JOURNAL 0x01000 /* Update the journal format */ | ||
| 393 | #define EXT4_MOUNT_NO_UID32 0x02000 /* Disable 32-bit UIDs */ | ||
| 394 | #define EXT4_MOUNT_XATTR_USER 0x04000 /* Extended user attributes */ | ||
| 395 | #define EXT4_MOUNT_POSIX_ACL 0x08000 /* POSIX Access Control Lists */ | ||
| 396 | #define EXT4_MOUNT_RESERVATION 0x10000 /* Preallocation */ | ||
| 397 | #define EXT4_MOUNT_BARRIER 0x20000 /* Use block barriers */ | ||
| 398 | #define EXT4_MOUNT_NOBH 0x40000 /* No bufferheads */ | ||
| 399 | #define EXT4_MOUNT_QUOTA 0x80000 /* Some quota option set */ | ||
| 400 | #define EXT4_MOUNT_USRQUOTA 0x100000 /* "old" user quota */ | ||
| 401 | #define EXT4_MOUNT_GRPQUOTA 0x200000 /* "old" group quota */ | ||
| 402 | #define EXT4_MOUNT_EXTENTS 0x400000 /* Extents support */ | ||
| 403 | |||
| 404 | /* Compatibility, for having both ext2_fs.h and ext4_fs.h included at once */ | ||
| 405 | #ifndef _LINUX_EXT2_FS_H | ||
| 406 | #define clear_opt(o, opt) o &= ~EXT4_MOUNT_##opt | ||
| 407 | #define set_opt(o, opt) o |= EXT4_MOUNT_##opt | ||
| 408 | #define test_opt(sb, opt) (EXT4_SB(sb)->s_mount_opt & \ | ||
| 409 | EXT4_MOUNT_##opt) | ||
| 410 | #else | ||
| 411 | #define EXT2_MOUNT_NOLOAD EXT4_MOUNT_NOLOAD | ||
| 412 | #define EXT2_MOUNT_ABORT EXT4_MOUNT_ABORT | ||
| 413 | #define EXT2_MOUNT_DATA_FLAGS EXT4_MOUNT_DATA_FLAGS | ||
| 414 | #endif | ||
| 415 | |||
| 416 | #define ext4_set_bit ext2_set_bit | ||
| 417 | #define ext4_set_bit_atomic ext2_set_bit_atomic | ||
| 418 | #define ext4_clear_bit ext2_clear_bit | ||
| 419 | #define ext4_clear_bit_atomic ext2_clear_bit_atomic | ||
| 420 | #define ext4_test_bit ext2_test_bit | ||
| 421 | #define ext4_find_first_zero_bit ext2_find_first_zero_bit | ||
| 422 | #define ext4_find_next_zero_bit ext2_find_next_zero_bit | ||
| 423 | |||
| 424 | /* | ||
| 425 | * Maximal mount counts between two filesystem checks | ||
| 426 | */ | ||
| 427 | #define EXT4_DFL_MAX_MNT_COUNT 20 /* Allow 20 mounts */ | ||
| 428 | #define EXT4_DFL_CHECKINTERVAL 0 /* Don't use interval check */ | ||
| 429 | |||
| 430 | /* | ||
| 431 | * Behaviour when detecting errors | ||
| 432 | */ | ||
| 433 | #define EXT4_ERRORS_CONTINUE 1 /* Continue execution */ | ||
| 434 | #define EXT4_ERRORS_RO 2 /* Remount fs read-only */ | ||
| 435 | #define EXT4_ERRORS_PANIC 3 /* Panic */ | ||
| 436 | #define EXT4_ERRORS_DEFAULT EXT4_ERRORS_CONTINUE | ||
| 437 | |||
| 438 | /* | ||
| 439 | * Structure of the super block | ||
| 440 | */ | ||
| 441 | struct ext4_super_block { | ||
| 442 | /*00*/ __le32 s_inodes_count; /* Inodes count */ | ||
| 443 | __le32 s_blocks_count; /* Blocks count */ | ||
| 444 | __le32 s_r_blocks_count; /* Reserved blocks count */ | ||
| 445 | __le32 s_free_blocks_count; /* Free blocks count */ | ||
| 446 | /*10*/ __le32 s_free_inodes_count; /* Free inodes count */ | ||
| 447 | __le32 s_first_data_block; /* First Data Block */ | ||
| 448 | __le32 s_log_block_size; /* Block size */ | ||
| 449 | __le32 s_log_frag_size; /* Fragment size */ | ||
| 450 | /*20*/ __le32 s_blocks_per_group; /* # Blocks per group */ | ||
| 451 | __le32 s_frags_per_group; /* # Fragments per group */ | ||
| 452 | __le32 s_inodes_per_group; /* # Inodes per group */ | ||
| 453 | __le32 s_mtime; /* Mount time */ | ||
| 454 | /*30*/ __le32 s_wtime; /* Write time */ | ||
| 455 | __le16 s_mnt_count; /* Mount count */ | ||
| 456 | __le16 s_max_mnt_count; /* Maximal mount count */ | ||
| 457 | __le16 s_magic; /* Magic signature */ | ||
| 458 | __le16 s_state; /* File system state */ | ||
| 459 | __le16 s_errors; /* Behaviour when detecting errors */ | ||
| 460 | __le16 s_minor_rev_level; /* minor revision level */ | ||
| 461 | /*40*/ __le32 s_lastcheck; /* time of last check */ | ||
| 462 | __le32 s_checkinterval; /* max. time between checks */ | ||
| 463 | __le32 s_creator_os; /* OS */ | ||
| 464 | __le32 s_rev_level; /* Revision level */ | ||
| 465 | /*50*/ __le16 s_def_resuid; /* Default uid for reserved blocks */ | ||
| 466 | __le16 s_def_resgid; /* Default gid for reserved blocks */ | ||
| 467 | /* | ||
| 468 | * These fields are for EXT4_DYNAMIC_REV superblocks only. | ||
| 469 | * | ||
| 470 | * Note: the difference between the compatible feature set and | ||
| 471 | * the incompatible feature set is that if there is a bit set | ||
| 472 | * in the incompatible feature set that the kernel doesn't | ||
| 473 | * know about, it should refuse to mount the filesystem. | ||
| 474 | * | ||
| 475 | * e2fsck's requirements are more strict; if it doesn't know | ||
| 476 | * about a feature in either the compatible or incompatible | ||
| 477 | * feature set, it must abort and not try to meddle with | ||
| 478 | * things it doesn't understand... | ||
| 479 | */ | ||
| 480 | __le32 s_first_ino; /* First non-reserved inode */ | ||
| 481 | __le16 s_inode_size; /* size of inode structure */ | ||
| 482 | __le16 s_block_group_nr; /* block group # of this superblock */ | ||
| 483 | __le32 s_feature_compat; /* compatible feature set */ | ||
| 484 | /*60*/ __le32 s_feature_incompat; /* incompatible feature set */ | ||
| 485 | __le32 s_feature_ro_compat; /* readonly-compatible feature set */ | ||
| 486 | /*68*/ __u8 s_uuid[16]; /* 128-bit uuid for volume */ | ||
| 487 | /*78*/ char s_volume_name[16]; /* volume name */ | ||
| 488 | /*88*/ char s_last_mounted[64]; /* directory where last mounted */ | ||
| 489 | /*C8*/ __le32 s_algorithm_usage_bitmap; /* For compression */ | ||
| 490 | /* | ||
| 491 | * Performance hints. Directory preallocation should only | ||
| 492 | * happen if the EXT4_FEATURE_COMPAT_DIR_PREALLOC flag is on. | ||
| 493 | */ | ||
| 494 | __u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/ | ||
| 495 | __u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */ | ||
| 496 | __le16 s_reserved_gdt_blocks; /* Per group desc for online growth */ | ||
| 497 | /* | ||
| 498 | * Journaling support valid if EXT4_FEATURE_COMPAT_HAS_JOURNAL set. | ||
| 499 | */ | ||
| 500 | /*D0*/ __u8 s_journal_uuid[16]; /* uuid of journal superblock */ | ||
| 501 | /*E0*/ __le32 s_journal_inum; /* inode number of journal file */ | ||
| 502 | __le32 s_journal_dev; /* device number of journal file */ | ||
| 503 | __le32 s_last_orphan; /* start of list of inodes to delete */ | ||
| 504 | __le32 s_hash_seed[4]; /* HTREE hash seed */ | ||
| 505 | __u8 s_def_hash_version; /* Default hash version to use */ | ||
| 506 | __u8 s_reserved_char_pad; | ||
| 507 | __le16 s_desc_size; /* size of group descriptor */ | ||
| 508 | /*100*/ __le32 s_default_mount_opts; | ||
| 509 | __le32 s_first_meta_bg; /* First metablock block group */ | ||
| 510 | __le32 s_mkfs_time; /* When the filesystem was created */ | ||
| 511 | __le32 s_jnl_blocks[17]; /* Backup of the journal inode */ | ||
| 512 | /* 64bit support valid if EXT4_FEATURE_COMPAT_64BIT */ | ||
| 513 | /*150*/ __le32 s_blocks_count_hi; /* Blocks count */ | ||
| 514 | __le32 s_r_blocks_count_hi; /* Reserved blocks count */ | ||
| 515 | __le32 s_free_blocks_count_hi; /* Free blocks count */ | ||
| 516 | __u32 s_reserved[169]; /* Padding to the end of the block */ | ||
| 517 | }; | ||
| 518 | |||
| 519 | #ifdef __KERNEL__ | ||
| 520 | static inline struct ext4_sb_info * EXT4_SB(struct super_block *sb) | ||
| 521 | { | ||
| 522 | return sb->s_fs_info; | ||
| 523 | } | ||
| 524 | static inline struct ext4_inode_info *EXT4_I(struct inode *inode) | ||
| 525 | { | ||
| 526 | return container_of(inode, struct ext4_inode_info, vfs_inode); | ||
| 527 | } | ||
| 528 | |||
| 529 | static inline int ext4_valid_inum(struct super_block *sb, unsigned long ino) | ||
| 530 | { | ||
| 531 | return ino == EXT4_ROOT_INO || | ||
| 532 | ino == EXT4_JOURNAL_INO || | ||
| 533 | ino == EXT4_RESIZE_INO || | ||
| 534 | (ino >= EXT4_FIRST_INO(sb) && | ||
| 535 | ino <= le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count)); | ||
| 536 | } | ||
| 537 | #else | ||
| 538 | /* Assume that user mode programs are passing in an ext4fs superblock, not | ||
| 539 | * a kernel struct super_block. This will allow us to call the feature-test | ||
| 540 | * macros from user land. */ | ||
| 541 | #define EXT4_SB(sb) (sb) | ||
| 542 | #endif | ||
| 543 | |||
| 544 | #define NEXT_ORPHAN(inode) EXT4_I(inode)->i_dtime | ||
| 545 | |||
| 546 | /* | ||
| 547 | * Codes for operating systems | ||
| 548 | */ | ||
| 549 | #define EXT4_OS_LINUX 0 | ||
| 550 | #define EXT4_OS_HURD 1 | ||
| 551 | #define EXT4_OS_MASIX 2 | ||
| 552 | #define EXT4_OS_FREEBSD 3 | ||
| 553 | #define EXT4_OS_LITES 4 | ||
| 554 | |||
| 555 | /* | ||
| 556 | * Revision levels | ||
| 557 | */ | ||
| 558 | #define EXT4_GOOD_OLD_REV 0 /* The good old (original) format */ | ||
| 559 | #define EXT4_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */ | ||
| 560 | |||
| 561 | #define EXT4_CURRENT_REV EXT4_GOOD_OLD_REV | ||
| 562 | #define EXT4_MAX_SUPP_REV EXT4_DYNAMIC_REV | ||
| 563 | |||
| 564 | #define EXT4_GOOD_OLD_INODE_SIZE 128 | ||
| 565 | |||
| 566 | /* | ||
| 567 | * Feature set definitions | ||
| 568 | */ | ||
| 569 | |||
| 570 | #define EXT4_HAS_COMPAT_FEATURE(sb,mask) \ | ||
| 571 | ( EXT4_SB(sb)->s_es->s_feature_compat & cpu_to_le32(mask) ) | ||
| 572 | #define EXT4_HAS_RO_COMPAT_FEATURE(sb,mask) \ | ||
| 573 | ( EXT4_SB(sb)->s_es->s_feature_ro_compat & cpu_to_le32(mask) ) | ||
| 574 | #define EXT4_HAS_INCOMPAT_FEATURE(sb,mask) \ | ||
| 575 | ( EXT4_SB(sb)->s_es->s_feature_incompat & cpu_to_le32(mask) ) | ||
| 576 | #define EXT4_SET_COMPAT_FEATURE(sb,mask) \ | ||
| 577 | EXT4_SB(sb)->s_es->s_feature_compat |= cpu_to_le32(mask) | ||
| 578 | #define EXT4_SET_RO_COMPAT_FEATURE(sb,mask) \ | ||
| 579 | EXT4_SB(sb)->s_es->s_feature_ro_compat |= cpu_to_le32(mask) | ||
| 580 | #define EXT4_SET_INCOMPAT_FEATURE(sb,mask) \ | ||
| 581 | EXT4_SB(sb)->s_es->s_feature_incompat |= cpu_to_le32(mask) | ||
| 582 | #define EXT4_CLEAR_COMPAT_FEATURE(sb,mask) \ | ||
| 583 | EXT4_SB(sb)->s_es->s_feature_compat &= ~cpu_to_le32(mask) | ||
| 584 | #define EXT4_CLEAR_RO_COMPAT_FEATURE(sb,mask) \ | ||
| 585 | EXT4_SB(sb)->s_es->s_feature_ro_compat &= ~cpu_to_le32(mask) | ||
| 586 | #define EXT4_CLEAR_INCOMPAT_FEATURE(sb,mask) \ | ||
| 587 | EXT4_SB(sb)->s_es->s_feature_incompat &= ~cpu_to_le32(mask) | ||
| 588 | |||
| 589 | #define EXT4_FEATURE_COMPAT_DIR_PREALLOC 0x0001 | ||
| 590 | #define EXT4_FEATURE_COMPAT_IMAGIC_INODES 0x0002 | ||
| 591 | #define EXT4_FEATURE_COMPAT_HAS_JOURNAL 0x0004 | ||
| 592 | #define EXT4_FEATURE_COMPAT_EXT_ATTR 0x0008 | ||
| 593 | #define EXT4_FEATURE_COMPAT_RESIZE_INODE 0x0010 | ||
| 594 | #define EXT4_FEATURE_COMPAT_DIR_INDEX 0x0020 | ||
| 595 | |||
| 596 | #define EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 | ||
| 597 | #define EXT4_FEATURE_RO_COMPAT_LARGE_FILE 0x0002 | ||
| 598 | #define EXT4_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 | ||
| 599 | |||
| 600 | #define EXT4_FEATURE_INCOMPAT_COMPRESSION 0x0001 | ||
| 601 | #define EXT4_FEATURE_INCOMPAT_FILETYPE 0x0002 | ||
| 602 | #define EXT4_FEATURE_INCOMPAT_RECOVER 0x0004 /* Needs recovery */ | ||
| 603 | #define EXT4_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 /* Journal device */ | ||
| 604 | #define EXT4_FEATURE_INCOMPAT_META_BG 0x0010 | ||
| 605 | #define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040 /* extents support */ | ||
| 606 | #define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 | ||
| 607 | |||
| 608 | #define EXT4_FEATURE_COMPAT_SUPP EXT2_FEATURE_COMPAT_EXT_ATTR | ||
| 609 | #define EXT4_FEATURE_INCOMPAT_SUPP (EXT4_FEATURE_INCOMPAT_FILETYPE| \ | ||
| 610 | EXT4_FEATURE_INCOMPAT_RECOVER| \ | ||
| 611 | EXT4_FEATURE_INCOMPAT_META_BG| \ | ||
| 612 | EXT4_FEATURE_INCOMPAT_EXTENTS| \ | ||
| 613 | EXT4_FEATURE_INCOMPAT_64BIT) | ||
| 614 | #define EXT4_FEATURE_RO_COMPAT_SUPP (EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \ | ||
| 615 | EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \ | ||
| 616 | EXT4_FEATURE_RO_COMPAT_BTREE_DIR) | ||
| 617 | |||
| 618 | /* | ||
| 619 | * Default values for user and/or group using reserved blocks | ||
| 620 | */ | ||
| 621 | #define EXT4_DEF_RESUID 0 | ||
| 622 | #define EXT4_DEF_RESGID 0 | ||
| 623 | |||
| 624 | /* | ||
| 625 | * Default mount options | ||
| 626 | */ | ||
| 627 | #define EXT4_DEFM_DEBUG 0x0001 | ||
| 628 | #define EXT4_DEFM_BSDGROUPS 0x0002 | ||
| 629 | #define EXT4_DEFM_XATTR_USER 0x0004 | ||
| 630 | #define EXT4_DEFM_ACL 0x0008 | ||
| 631 | #define EXT4_DEFM_UID16 0x0010 | ||
| 632 | #define EXT4_DEFM_JMODE 0x0060 | ||
| 633 | #define EXT4_DEFM_JMODE_DATA 0x0020 | ||
| 634 | #define EXT4_DEFM_JMODE_ORDERED 0x0040 | ||
| 635 | #define EXT4_DEFM_JMODE_WBACK 0x0060 | ||
| 636 | |||
| 637 | /* | ||
| 638 | * Structure of a directory entry | ||
| 639 | */ | ||
| 640 | #define EXT4_NAME_LEN 255 | ||
| 641 | |||
| 642 | struct ext4_dir_entry { | ||
| 643 | __le32 inode; /* Inode number */ | ||
| 644 | __le16 rec_len; /* Directory entry length */ | ||
| 645 | __le16 name_len; /* Name length */ | ||
| 646 | char name[EXT4_NAME_LEN]; /* File name */ | ||
| 647 | }; | ||
| 648 | |||
| 649 | /* | ||
| 650 | * The new version of the directory entry. Since EXT4 structures are | ||
| 651 | * stored in intel byte order, and the name_len field could never be | ||
| 652 | * bigger than 255 chars, it's safe to reclaim the extra byte for the | ||
| 653 | * file_type field. | ||
| 654 | */ | ||
| 655 | struct ext4_dir_entry_2 { | ||
| 656 | __le32 inode; /* Inode number */ | ||
| 657 | __le16 rec_len; /* Directory entry length */ | ||
| 658 | __u8 name_len; /* Name length */ | ||
| 659 | __u8 file_type; | ||
| 660 | char name[EXT4_NAME_LEN]; /* File name */ | ||
| 661 | }; | ||
| 662 | |||
| 663 | /* | ||
| 664 | * Ext4 directory file types. Only the low 3 bits are used. The | ||
| 665 | * other bits are reserved for now. | ||
| 666 | */ | ||
| 667 | #define EXT4_FT_UNKNOWN 0 | ||
| 668 | #define EXT4_FT_REG_FILE 1 | ||
| 669 | #define EXT4_FT_DIR 2 | ||
| 670 | #define EXT4_FT_CHRDEV 3 | ||
| 671 | #define EXT4_FT_BLKDEV 4 | ||
| 672 | #define EXT4_FT_FIFO 5 | ||
| 673 | #define EXT4_FT_SOCK 6 | ||
| 674 | #define EXT4_FT_SYMLINK 7 | ||
| 675 | |||
| 676 | #define EXT4_FT_MAX 8 | ||
| 677 | |||
| 678 | /* | ||
| 679 | * EXT4_DIR_PAD defines the directory entries boundaries | ||
| 680 | * | ||
| 681 | * NOTE: It must be a multiple of 4 | ||
| 682 | */ | ||
| 683 | #define EXT4_DIR_PAD 4 | ||
| 684 | #define EXT4_DIR_ROUND (EXT4_DIR_PAD - 1) | ||
| 685 | #define EXT4_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT4_DIR_ROUND) & \ | ||
| 686 | ~EXT4_DIR_ROUND) | ||
| 687 | /* | ||
| 688 | * Hash Tree Directory indexing | ||
| 689 | * (c) Daniel Phillips, 2001 | ||
| 690 | */ | ||
| 691 | |||
| 692 | #ifdef CONFIG_EXT4_INDEX | ||
| 693 | #define is_dx(dir) (EXT4_HAS_COMPAT_FEATURE(dir->i_sb, \ | ||
| 694 | EXT4_FEATURE_COMPAT_DIR_INDEX) && \ | ||
| 695 | (EXT4_I(dir)->i_flags & EXT4_INDEX_FL)) | ||
| 696 | #define EXT4_DIR_LINK_MAX(dir) (!is_dx(dir) && (dir)->i_nlink >= EXT4_LINK_MAX) | ||
| 697 | #define EXT4_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2 || (dir)->i_nlink == 1) | ||
| 698 | #else | ||
| 699 | #define is_dx(dir) 0 | ||
| 700 | #define EXT4_DIR_LINK_MAX(dir) ((dir)->i_nlink >= EXT4_LINK_MAX) | ||
| 701 | #define EXT4_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2) | ||
| 702 | #endif | ||
| 703 | |||
| 704 | /* Legal values for the dx_root hash_version field: */ | ||
| 705 | |||
| 706 | #define DX_HASH_LEGACY 0 | ||
| 707 | #define DX_HASH_HALF_MD4 1 | ||
| 708 | #define DX_HASH_TEA 2 | ||
| 709 | |||
| 710 | #ifdef __KERNEL__ | ||
| 711 | |||
| 712 | /* hash info structure used by the directory hash */ | ||
| 713 | struct dx_hash_info | ||
| 714 | { | ||
| 715 | u32 hash; | ||
| 716 | u32 minor_hash; | ||
| 717 | int hash_version; | ||
| 718 | u32 *seed; | ||
| 719 | }; | ||
| 720 | |||
| 721 | #define EXT4_HTREE_EOF 0x7fffffff | ||
| 722 | |||
| 723 | /* | ||
| 724 | * Control parameters used by ext4_htree_next_block | ||
| 725 | */ | ||
| 726 | #define HASH_NB_ALWAYS 1 | ||
| 727 | |||
| 728 | |||
| 729 | /* | ||
| 730 | * Describe an inode's exact location on disk and in memory | ||
| 731 | */ | ||
| 732 | struct ext4_iloc | ||
| 733 | { | ||
| 734 | struct buffer_head *bh; | ||
| 735 | unsigned long offset; | ||
| 736 | unsigned long block_group; | ||
| 737 | }; | ||
| 738 | |||
| 739 | static inline struct ext4_inode *ext4_raw_inode(struct ext4_iloc *iloc) | ||
| 740 | { | ||
| 741 | return (struct ext4_inode *) (iloc->bh->b_data + iloc->offset); | ||
| 742 | } | ||
| 743 | |||
| 744 | /* | ||
| 745 | * This structure is stuffed into the struct file's private_data field | ||
| 746 | * for directories. It is where we put information so that we can do | ||
| 747 | * readdir operations in hash tree order. | ||
| 748 | */ | ||
| 749 | struct dir_private_info { | ||
| 750 | struct rb_root root; | ||
| 751 | struct rb_node *curr_node; | ||
| 752 | struct fname *extra_fname; | ||
| 753 | loff_t last_pos; | ||
| 754 | __u32 curr_hash; | ||
| 755 | __u32 curr_minor_hash; | ||
| 756 | __u32 next_hash; | ||
| 757 | }; | ||
| 758 | |||
| 759 | /* calculate the first block number of the group */ | ||
| 760 | static inline ext4_fsblk_t | ||
| 761 | ext4_group_first_block_no(struct super_block *sb, unsigned long group_no) | ||
| 762 | { | ||
| 763 | return group_no * (ext4_fsblk_t)EXT4_BLOCKS_PER_GROUP(sb) + | ||
| 764 | le32_to_cpu(EXT4_SB(sb)->s_es->s_first_data_block); | ||
| 765 | } | ||
| 766 | |||
| 767 | /* | ||
| 768 | * Special error return code only used by dx_probe() and its callers. | ||
| 769 | */ | ||
| 770 | #define ERR_BAD_DX_DIR -75000 | ||
| 771 | |||
| 772 | void ext4_get_group_no_and_offset(struct super_block *sb, ext4_fsblk_t blocknr, | ||
| 773 | unsigned long *blockgrpp, ext4_grpblk_t *offsetp); | ||
| 774 | |||
| 775 | /* | ||
| 776 | * Function prototypes | ||
| 777 | */ | ||
| 778 | |||
| 779 | /* | ||
| 780 | * Ok, these declarations are also in <linux/kernel.h> but none of the | ||
| 781 | * ext4 source programs needs to include it so they are duplicated here. | ||
| 782 | */ | ||
| 783 | # define NORET_TYPE /**/ | ||
| 784 | # define ATTRIB_NORET __attribute__((noreturn)) | ||
| 785 | # define NORET_AND noreturn, | ||
| 786 | |||
| 787 | /* balloc.c */ | ||
| 788 | extern unsigned int ext4_block_group(struct super_block *sb, | ||
| 789 | ext4_fsblk_t blocknr); | ||
| 790 | extern ext4_grpblk_t ext4_block_group_offset(struct super_block *sb, | ||
| 791 | ext4_fsblk_t blocknr); | ||
| 792 | extern int ext4_bg_has_super(struct super_block *sb, int group); | ||
| 793 | extern unsigned long ext4_bg_num_gdb(struct super_block *sb, int group); | ||
| 794 | extern ext4_fsblk_t ext4_new_block (handle_t *handle, struct inode *inode, | ||
| 795 | ext4_fsblk_t goal, int *errp); | ||
| 796 | extern ext4_fsblk_t ext4_new_blocks (handle_t *handle, struct inode *inode, | ||
| 797 | ext4_fsblk_t goal, unsigned long *count, int *errp); | ||
| 798 | extern void ext4_free_blocks (handle_t *handle, struct inode *inode, | ||
| 799 | ext4_fsblk_t block, unsigned long count); | ||
| 800 | extern void ext4_free_blocks_sb (handle_t *handle, struct super_block *sb, | ||
| 801 | ext4_fsblk_t block, unsigned long count, | ||
| 802 | unsigned long *pdquot_freed_blocks); | ||
| 803 | extern ext4_fsblk_t ext4_count_free_blocks (struct super_block *); | ||
| 804 | extern void ext4_check_blocks_bitmap (struct super_block *); | ||
| 805 | extern struct ext4_group_desc * ext4_get_group_desc(struct super_block * sb, | ||
| 806 | unsigned int block_group, | ||
| 807 | struct buffer_head ** bh); | ||
| 808 | extern int ext4_should_retry_alloc(struct super_block *sb, int *retries); | ||
| 809 | extern void ext4_init_block_alloc_info(struct inode *); | ||
| 810 | extern void ext4_rsv_window_add(struct super_block *sb, struct ext4_reserve_window_node *rsv); | ||
| 811 | |||
| 812 | /* dir.c */ | ||
| 813 | extern int ext4_check_dir_entry(const char *, struct inode *, | ||
| 814 | struct ext4_dir_entry_2 *, | ||
| 815 | struct buffer_head *, unsigned long); | ||
| 816 | extern int ext4_htree_store_dirent(struct file *dir_file, __u32 hash, | ||
| 817 | __u32 minor_hash, | ||
| 818 | struct ext4_dir_entry_2 *dirent); | ||
| 819 | extern void ext4_htree_free_dir_info(struct dir_private_info *p); | ||
| 820 | |||
| 821 | /* fsync.c */ | ||
| 822 | extern int ext4_sync_file (struct file *, struct dentry *, int); | ||
| 823 | |||
| 824 | /* hash.c */ | ||
| 825 | extern int ext4fs_dirhash(const char *name, int len, struct | ||
| 826 | dx_hash_info *hinfo); | ||
| 827 | |||
| 828 | /* ialloc.c */ | ||
| 829 | extern struct inode * ext4_new_inode (handle_t *, struct inode *, int); | ||
| 830 | extern void ext4_free_inode (handle_t *, struct inode *); | ||
| 831 | extern struct inode * ext4_orphan_get (struct super_block *, unsigned long); | ||
| 832 | extern unsigned long ext4_count_free_inodes (struct super_block *); | ||
| 833 | extern unsigned long ext4_count_dirs (struct super_block *); | ||
| 834 | extern void ext4_check_inodes_bitmap (struct super_block *); | ||
| 835 | extern unsigned long ext4_count_free (struct buffer_head *, unsigned); | ||
| 836 | |||
| 837 | |||
| 838 | /* inode.c */ | ||
| 839 | int ext4_forget(handle_t *handle, int is_metadata, struct inode *inode, | ||
| 840 | struct buffer_head *bh, ext4_fsblk_t blocknr); | ||
| 841 | struct buffer_head * ext4_getblk (handle_t *, struct inode *, long, int, int *); | ||
| 842 | struct buffer_head * ext4_bread (handle_t *, struct inode *, int, int, int *); | ||
| 843 | int ext4_get_blocks_handle(handle_t *handle, struct inode *inode, | ||
| 844 | sector_t iblock, unsigned long maxblocks, struct buffer_head *bh_result, | ||
| 845 | int create, int extend_disksize); | ||
| 846 | |||
| 847 | extern void ext4_read_inode (struct inode *); | ||
| 848 | extern int ext4_write_inode (struct inode *, int); | ||
| 849 | extern int ext4_setattr (struct dentry *, struct iattr *); | ||
| 850 | extern void ext4_delete_inode (struct inode *); | ||
| 851 | extern int ext4_sync_inode (handle_t *, struct inode *); | ||
| 852 | extern void ext4_discard_reservation (struct inode *); | ||
| 853 | extern void ext4_dirty_inode(struct inode *); | ||
| 854 | extern int ext4_change_inode_journal_flag(struct inode *, int); | ||
| 855 | extern int ext4_get_inode_loc(struct inode *, struct ext4_iloc *); | ||
| 856 | extern void ext4_truncate (struct inode *); | ||
| 857 | extern void ext4_set_inode_flags(struct inode *); | ||
| 858 | extern void ext4_set_aops(struct inode *inode); | ||
| 859 | extern int ext4_writepage_trans_blocks(struct inode *); | ||
| 860 | extern int ext4_block_truncate_page(handle_t *handle, struct page *page, | ||
| 861 | struct address_space *mapping, loff_t from); | ||
| 862 | |||
| 863 | /* ioctl.c */ | ||
| 864 | extern int ext4_ioctl (struct inode *, struct file *, unsigned int, | ||
| 865 | unsigned long); | ||
| 866 | extern long ext4_compat_ioctl (struct file *, unsigned int, unsigned long); | ||
| 867 | |||
| 868 | /* namei.c */ | ||
| 869 | extern int ext4_orphan_add(handle_t *, struct inode *); | ||
| 870 | extern int ext4_orphan_del(handle_t *, struct inode *); | ||
| 871 | extern int ext4_htree_fill_tree(struct file *dir_file, __u32 start_hash, | ||
| 872 | __u32 start_minor_hash, __u32 *next_hash); | ||
| 873 | |||
| 874 | /* resize.c */ | ||
| 875 | extern int ext4_group_add(struct super_block *sb, | ||
| 876 | struct ext4_new_group_data *input); | ||
| 877 | extern int ext4_group_extend(struct super_block *sb, | ||
| 878 | struct ext4_super_block *es, | ||
| 879 | ext4_fsblk_t n_blocks_count); | ||
| 880 | |||
| 881 | /* super.c */ | ||
| 882 | extern void ext4_error (struct super_block *, const char *, const char *, ...) | ||
| 883 | __attribute__ ((format (printf, 3, 4))); | ||
| 884 | extern void __ext4_std_error (struct super_block *, const char *, int); | ||
| 885 | extern void ext4_abort (struct super_block *, const char *, const char *, ...) | ||
| 886 | __attribute__ ((format (printf, 3, 4))); | ||
| 887 | extern void ext4_warning (struct super_block *, const char *, const char *, ...) | ||
| 888 | __attribute__ ((format (printf, 3, 4))); | ||
| 889 | extern void ext4_update_dynamic_rev (struct super_block *sb); | ||
| 890 | extern ext4_fsblk_t ext4_block_bitmap(struct super_block *sb, | ||
| 891 | struct ext4_group_desc *bg); | ||
| 892 | extern ext4_fsblk_t ext4_inode_bitmap(struct super_block *sb, | ||
| 893 | struct ext4_group_desc *bg); | ||
| 894 | extern ext4_fsblk_t ext4_inode_table(struct super_block *sb, | ||
| 895 | struct ext4_group_desc *bg); | ||
| 896 | extern void ext4_block_bitmap_set(struct super_block *sb, | ||
| 897 | struct ext4_group_desc *bg, ext4_fsblk_t blk); | ||
| 898 | extern void ext4_inode_bitmap_set(struct super_block *sb, | ||
| 899 | struct ext4_group_desc *bg, ext4_fsblk_t blk); | ||
| 900 | extern void ext4_inode_table_set(struct super_block *sb, | ||
| 901 | struct ext4_group_desc *bg, ext4_fsblk_t blk); | ||
| 902 | |||
| 903 | static inline ext4_fsblk_t ext4_blocks_count(struct ext4_super_block *es) | ||
| 904 | { | ||
| 905 | return ((ext4_fsblk_t)le32_to_cpu(es->s_blocks_count_hi) << 32) | | ||
| 906 | le32_to_cpu(es->s_blocks_count); | ||
| 907 | } | ||
| 908 | |||
| 909 | static inline ext4_fsblk_t ext4_r_blocks_count(struct ext4_super_block *es) | ||
| 910 | { | ||
| 911 | return ((ext4_fsblk_t)le32_to_cpu(es->s_r_blocks_count_hi) << 32) | | ||
| 912 | le32_to_cpu(es->s_r_blocks_count); | ||
| 913 | } | ||
| 914 | |||
| 915 | static inline ext4_fsblk_t ext4_free_blocks_count(struct ext4_super_block *es) | ||
| 916 | { | ||
| 917 | return ((ext4_fsblk_t)le32_to_cpu(es->s_free_blocks_count_hi) << 32) | | ||
| 918 | le32_to_cpu(es->s_free_blocks_count); | ||
| 919 | } | ||
| 920 | |||
| 921 | static inline void ext4_blocks_count_set(struct ext4_super_block *es, | ||
| 922 | ext4_fsblk_t blk) | ||
| 923 | { | ||
| 924 | es->s_blocks_count = cpu_to_le32((u32)blk); | ||
| 925 | es->s_blocks_count_hi = cpu_to_le32(blk >> 32); | ||
| 926 | } | ||
| 927 | |||
| 928 | static inline void ext4_free_blocks_count_set(struct ext4_super_block *es, | ||
| 929 | ext4_fsblk_t blk) | ||
| 930 | { | ||
| 931 | es->s_free_blocks_count = cpu_to_le32((u32)blk); | ||
| 932 | es->s_free_blocks_count_hi = cpu_to_le32(blk >> 32); | ||
| 933 | } | ||
| 934 | |||
| 935 | static inline void ext4_r_blocks_count_set(struct ext4_super_block *es, | ||
| 936 | ext4_fsblk_t blk) | ||
| 937 | { | ||
| 938 | es->s_r_blocks_count = cpu_to_le32((u32)blk); | ||
| 939 | es->s_r_blocks_count_hi = cpu_to_le32(blk >> 32); | ||
| 940 | } | ||
| 941 | |||
| 942 | |||
| 943 | |||
| 944 | #define ext4_std_error(sb, errno) \ | ||
| 945 | do { \ | ||
| 946 | if ((errno)) \ | ||
| 947 | __ext4_std_error((sb), __FUNCTION__, (errno)); \ | ||
| 948 | } while (0) | ||
| 949 | |||
| 950 | /* | ||
| 951 | * Inodes and files operations | ||
| 952 | */ | ||
| 953 | |||
| 954 | /* dir.c */ | ||
| 955 | extern const struct file_operations ext4_dir_operations; | ||
| 956 | |||
| 957 | /* file.c */ | ||
| 958 | extern struct inode_operations ext4_file_inode_operations; | ||
| 959 | extern const struct file_operations ext4_file_operations; | ||
| 960 | |||
| 961 | /* namei.c */ | ||
| 962 | extern struct inode_operations ext4_dir_inode_operations; | ||
| 963 | extern struct inode_operations ext4_special_inode_operations; | ||
| 964 | |||
| 965 | /* symlink.c */ | ||
| 966 | extern struct inode_operations ext4_symlink_inode_operations; | ||
| 967 | extern struct inode_operations ext4_fast_symlink_inode_operations; | ||
| 968 | |||
| 969 | /* extents.c */ | ||
| 970 | extern int ext4_ext_tree_init(handle_t *handle, struct inode *); | ||
| 971 | extern int ext4_ext_writepage_trans_blocks(struct inode *, int); | ||
| 972 | extern int ext4_ext_get_blocks(handle_t *handle, struct inode *inode, | ||
| 973 | ext4_fsblk_t iblock, | ||
| 974 | unsigned long max_blocks, struct buffer_head *bh_result, | ||
| 975 | int create, int extend_disksize); | ||
| 976 | extern void ext4_ext_truncate(struct inode *, struct page *); | ||
| 977 | extern void ext4_ext_init(struct super_block *); | ||
| 978 | extern void ext4_ext_release(struct super_block *); | ||
| 979 | static inline int | ||
| 980 | ext4_get_blocks_wrap(handle_t *handle, struct inode *inode, sector_t block, | ||
| 981 | unsigned long max_blocks, struct buffer_head *bh, | ||
| 982 | int create, int extend_disksize) | ||
| 983 | { | ||
| 984 | if (EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL) | ||
| 985 | return ext4_ext_get_blocks(handle, inode, block, max_blocks, | ||
| 986 | bh, create, extend_disksize); | ||
| 987 | return ext4_get_blocks_handle(handle, inode, block, max_blocks, bh, | ||
| 988 | create, extend_disksize); | ||
| 989 | } | ||
| 990 | |||
| 991 | |||
| 992 | #endif /* __KERNEL__ */ | ||
| 993 | |||
| 994 | #endif /* _LINUX_EXT4_FS_H */ | ||
diff --git a/include/linux/ext4_fs_extents.h b/include/linux/ext4_fs_extents.h new file mode 100644 index 000000000000..a41cc24568ca --- /dev/null +++ b/include/linux/ext4_fs_extents.h | |||
| @@ -0,0 +1,198 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2003-2006, Cluster File Systems, Inc, info@clusterfs.com | ||
| 3 | * Written by Alex Tomas <alex@clusterfs.com> | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License version 2 as | ||
| 7 | * published by the Free Software Foundation. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public Licens | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111- | ||
| 17 | */ | ||
| 18 | |||
| 19 | #ifndef _LINUX_EXT4_EXTENTS | ||
| 20 | #define _LINUX_EXT4_EXTENTS | ||
| 21 | |||
| 22 | #include <linux/ext4_fs.h> | ||
| 23 | |||
| 24 | /* | ||
| 25 | * With AGRESSIVE_TEST defined, the capacity of index/leaf blocks | ||
| 26 | * becomes very small, so index split, in-depth growing and | ||
| 27 | * other hard changes happen much more often. | ||
| 28 | * This is for debug purposes only. | ||
| 29 | */ | ||
| 30 | #define AGRESSIVE_TEST_ | ||
| 31 | |||
| 32 | /* | ||
| 33 | * With EXTENTS_STATS defined, the number of blocks and extents | ||
| 34 | * are collected in the truncate path. They'll be shown at | ||
| 35 | * umount time. | ||
| 36 | */ | ||
| 37 | #define EXTENTS_STATS__ | ||
| 38 | |||
| 39 | /* | ||
| 40 | * If CHECK_BINSEARCH is defined, then the results of the binary search | ||
| 41 | * will also be checked by linear search. | ||
| 42 | */ | ||
| 43 | #define CHECK_BINSEARCH__ | ||
| 44 | |||
| 45 | /* | ||
| 46 | * If EXT_DEBUG is defined you can use the 'extdebug' mount option | ||
| 47 | * to get lots of info about what's going on. | ||
| 48 | */ | ||
| 49 | #define EXT_DEBUG__ | ||
| 50 | #ifdef EXT_DEBUG | ||
| 51 | #define ext_debug(a...) printk(a) | ||
| 52 | #else | ||
| 53 | #define ext_debug(a...) | ||
| 54 | #endif | ||
| 55 | |||
| 56 | /* | ||
| 57 | * If EXT_STATS is defined then stats numbers are collected. | ||
| 58 | * These number will be displayed at umount time. | ||
| 59 | */ | ||
| 60 | #define EXT_STATS_ | ||
| 61 | |||
| 62 | |||
| 63 | /* | ||
| 64 | * ext4_inode has i_block array (60 bytes total). | ||
| 65 | * The first 12 bytes store ext4_extent_header; | ||
| 66 | * the remainder stores an array of ext4_extent. | ||
| 67 | */ | ||
| 68 | |||
| 69 | /* | ||
| 70 | * This is the extent on-disk structure. | ||
| 71 | * It's used at the bottom of the tree. | ||
| 72 | */ | ||
| 73 | struct ext4_extent { | ||
| 74 | __le32 ee_block; /* first logical block extent covers */ | ||
| 75 | __le16 ee_len; /* number of blocks covered by extent */ | ||
| 76 | __le16 ee_start_hi; /* high 16 bits of physical block */ | ||
| 77 | __le32 ee_start; /* low 32 bits of physical block */ | ||
| 78 | }; | ||
| 79 | |||
| 80 | /* | ||
| 81 | * This is index on-disk structure. | ||
| 82 | * It's used at all the levels except the bottom. | ||
| 83 | */ | ||
| 84 | struct ext4_extent_idx { | ||
| 85 | __le32 ei_block; /* index covers logical blocks from 'block' */ | ||
| 86 | __le32 ei_leaf; /* pointer to the physical block of the next * | ||
| 87 | * level. leaf or next index could be there */ | ||
| 88 | __le16 ei_leaf_hi; /* high 16 bits of physical block */ | ||
| 89 | __u16 ei_unused; | ||
| 90 | }; | ||
| 91 | |||
| 92 | /* | ||
| 93 | * Each block (leaves and indexes), even inode-stored has header. | ||
| 94 | */ | ||
| 95 | struct ext4_extent_header { | ||
| 96 | __le16 eh_magic; /* probably will support different formats */ | ||
| 97 | __le16 eh_entries; /* number of valid entries */ | ||
| 98 | __le16 eh_max; /* capacity of store in entries */ | ||
| 99 | __le16 eh_depth; /* has tree real underlying blocks? */ | ||
| 100 | __le32 eh_generation; /* generation of the tree */ | ||
| 101 | }; | ||
| 102 | |||
| 103 | #define EXT4_EXT_MAGIC cpu_to_le16(0xf30a) | ||
| 104 | |||
| 105 | /* | ||
| 106 | * Array of ext4_ext_path contains path to some extent. | ||
| 107 | * Creation/lookup routines use it for traversal/splitting/etc. | ||
| 108 | * Truncate uses it to simulate recursive walking. | ||
| 109 | */ | ||
| 110 | struct ext4_ext_path { | ||
| 111 | ext4_fsblk_t p_block; | ||
| 112 | __u16 p_depth; | ||
| 113 | struct ext4_extent *p_ext; | ||
| 114 | struct ext4_extent_idx *p_idx; | ||
| 115 | struct ext4_extent_header *p_hdr; | ||
| 116 | struct buffer_head *p_bh; | ||
| 117 | }; | ||
| 118 | |||
| 119 | /* | ||
| 120 | * structure for external API | ||
| 121 | */ | ||
| 122 | |||
| 123 | #define EXT4_EXT_CACHE_NO 0 | ||
| 124 | #define EXT4_EXT_CACHE_GAP 1 | ||
| 125 | #define EXT4_EXT_CACHE_EXTENT 2 | ||
| 126 | |||
| 127 | /* | ||
| 128 | * to be called by ext4_ext_walk_space() | ||
| 129 | * negative retcode - error | ||
| 130 | * positive retcode - signal for ext4_ext_walk_space(), see below | ||
| 131 | * callback must return valid extent (passed or newly created) | ||
| 132 | */ | ||
| 133 | typedef int (*ext_prepare_callback)(struct inode *, struct ext4_ext_path *, | ||
| 134 | struct ext4_ext_cache *, | ||
| 135 | void *); | ||
| 136 | |||
| 137 | #define EXT_CONTINUE 0 | ||
| 138 | #define EXT_BREAK 1 | ||
| 139 | #define EXT_REPEAT 2 | ||
| 140 | |||
| 141 | |||
| 142 | #define EXT_MAX_BLOCK 0xffffffff | ||
| 143 | |||
| 144 | #define EXT_MAX_LEN ((1UL << 15) - 1) | ||
| 145 | |||
| 146 | |||
| 147 | #define EXT_FIRST_EXTENT(__hdr__) \ | ||
| 148 | ((struct ext4_extent *) (((char *) (__hdr__)) + \ | ||
| 149 | sizeof(struct ext4_extent_header))) | ||
| 150 | #define EXT_FIRST_INDEX(__hdr__) \ | ||
| 151 | ((struct ext4_extent_idx *) (((char *) (__hdr__)) + \ | ||
| 152 | sizeof(struct ext4_extent_header))) | ||
| 153 | #define EXT_HAS_FREE_INDEX(__path__) \ | ||
| 154 | (le16_to_cpu((__path__)->p_hdr->eh_entries) \ | ||
| 155 | < le16_to_cpu((__path__)->p_hdr->eh_max)) | ||
| 156 | #define EXT_LAST_EXTENT(__hdr__) \ | ||
| 157 | (EXT_FIRST_EXTENT((__hdr__)) + le16_to_cpu((__hdr__)->eh_entries) - 1) | ||
| 158 | #define EXT_LAST_INDEX(__hdr__) \ | ||
| 159 | (EXT_FIRST_INDEX((__hdr__)) + le16_to_cpu((__hdr__)->eh_entries) - 1) | ||
| 160 | #define EXT_MAX_EXTENT(__hdr__) \ | ||
| 161 | (EXT_FIRST_EXTENT((__hdr__)) + le16_to_cpu((__hdr__)->eh_max) - 1) | ||
| 162 | #define EXT_MAX_INDEX(__hdr__) \ | ||
| 163 | (EXT_FIRST_INDEX((__hdr__)) + le16_to_cpu((__hdr__)->eh_max) - 1) | ||
| 164 | |||
| 165 | static inline struct ext4_extent_header *ext_inode_hdr(struct inode *inode) | ||
| 166 | { | ||
| 167 | return (struct ext4_extent_header *) EXT4_I(inode)->i_data; | ||
| 168 | } | ||
| 169 | |||
| 170 | static inline struct ext4_extent_header *ext_block_hdr(struct buffer_head *bh) | ||
| 171 | { | ||
| 172 | return (struct ext4_extent_header *) bh->b_data; | ||
| 173 | } | ||
| 174 | |||
| 175 | static inline unsigned short ext_depth(struct inode *inode) | ||
| 176 | { | ||
| 177 | return le16_to_cpu(ext_inode_hdr(inode)->eh_depth); | ||
| 178 | } | ||
| 179 | |||
| 180 | static inline void ext4_ext_tree_changed(struct inode *inode) | ||
| 181 | { | ||
| 182 | EXT4_I(inode)->i_ext_generation++; | ||
| 183 | } | ||
| 184 | |||
| 185 | static inline void | ||
| 186 | ext4_ext_invalidate_cache(struct inode *inode) | ||
| 187 | { | ||
| 188 | EXT4_I(inode)->i_cached_extent.ec_type = EXT4_EXT_CACHE_NO; | ||
| 189 | } | ||
| 190 | |||
| 191 | extern int ext4_extent_tree_init(handle_t *, struct inode *); | ||
| 192 | extern int ext4_ext_calc_credits_for_insert(struct inode *, struct ext4_ext_path *); | ||
| 193 | extern int ext4_ext_insert_extent(handle_t *, struct inode *, struct ext4_ext_path *, struct ext4_extent *); | ||
| 194 | extern int ext4_ext_walk_space(struct inode *, unsigned long, unsigned long, ext_prepare_callback, void *); | ||
| 195 | extern struct ext4_ext_path * ext4_ext_find_extent(struct inode *, int, struct ext4_ext_path *); | ||
| 196 | |||
| 197 | #endif /* _LINUX_EXT4_EXTENTS */ | ||
| 198 | |||
diff --git a/include/linux/ext4_fs_i.h b/include/linux/ext4_fs_i.h new file mode 100644 index 000000000000..bb42379cb7fd --- /dev/null +++ b/include/linux/ext4_fs_i.h | |||
| @@ -0,0 +1,158 @@ | |||
| 1 | /* | ||
| 2 | * linux/include/linux/ext4_fs_i.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 1992, 1993, 1994, 1995 | ||
| 5 | * Remy Card (card@masi.ibp.fr) | ||
| 6 | * Laboratoire MASI - Institut Blaise Pascal | ||
| 7 | * Universite Pierre et Marie Curie (Paris VI) | ||
| 8 | * | ||
| 9 | * from | ||
| 10 | * | ||
| 11 | * linux/include/linux/minix_fs_i.h | ||
| 12 | * | ||
| 13 | * Copyright (C) 1991, 1992 Linus Torvalds | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef _LINUX_EXT4_FS_I | ||
| 17 | #define _LINUX_EXT4_FS_I | ||
| 18 | |||
| 19 | #include <linux/rwsem.h> | ||
| 20 | #include <linux/rbtree.h> | ||
| 21 | #include <linux/seqlock.h> | ||
| 22 | #include <linux/mutex.h> | ||
| 23 | |||
| 24 | /* data type for block offset of block group */ | ||
| 25 | typedef int ext4_grpblk_t; | ||
| 26 | |||
| 27 | /* data type for filesystem-wide blocks number */ | ||
| 28 | typedef unsigned long long ext4_fsblk_t; | ||
| 29 | |||
| 30 | struct ext4_reserve_window { | ||
| 31 | ext4_fsblk_t _rsv_start; /* First byte reserved */ | ||
| 32 | ext4_fsblk_t _rsv_end; /* Last byte reserved or 0 */ | ||
| 33 | }; | ||
| 34 | |||
| 35 | struct ext4_reserve_window_node { | ||
| 36 | struct rb_node rsv_node; | ||
| 37 | __u32 rsv_goal_size; | ||
| 38 | __u32 rsv_alloc_hit; | ||
| 39 | struct ext4_reserve_window rsv_window; | ||
| 40 | }; | ||
| 41 | |||
| 42 | struct ext4_block_alloc_info { | ||
| 43 | /* information about reservation window */ | ||
| 44 | struct ext4_reserve_window_node rsv_window_node; | ||
| 45 | /* | ||
| 46 | * was i_next_alloc_block in ext4_inode_info | ||
| 47 | * is the logical (file-relative) number of the | ||
| 48 | * most-recently-allocated block in this file. | ||
| 49 | * We use this for detecting linearly ascending allocation requests. | ||
| 50 | */ | ||
| 51 | __u32 last_alloc_logical_block; | ||
| 52 | /* | ||
| 53 | * Was i_next_alloc_goal in ext4_inode_info | ||
| 54 | * is the *physical* companion to i_next_alloc_block. | ||
| 55 | * it the the physical block number of the block which was most-recentl | ||
| 56 | * allocated to this file. This give us the goal (target) for the next | ||
| 57 | * allocation when we detect linearly ascending requests. | ||
| 58 | */ | ||
| 59 | ext4_fsblk_t last_alloc_physical_block; | ||
| 60 | }; | ||
| 61 | |||
| 62 | #define rsv_start rsv_window._rsv_start | ||
| 63 | #define rsv_end rsv_window._rsv_end | ||
| 64 | |||
| 65 | /* | ||
| 66 | * storage for cached extent | ||
| 67 | */ | ||
| 68 | struct ext4_ext_cache { | ||
| 69 | ext4_fsblk_t ec_start; | ||
| 70 | __u32 ec_block; | ||
| 71 | __u32 ec_len; /* must be 32bit to return holes */ | ||
| 72 | __u32 ec_type; | ||
| 73 | }; | ||
| 74 | |||
| 75 | /* | ||
| 76 | * third extended file system inode data in memory | ||
| 77 | */ | ||
| 78 | struct ext4_inode_info { | ||
| 79 | __le32 i_data[15]; /* unconverted */ | ||
| 80 | __u32 i_flags; | ||
| 81 | #ifdef EXT4_FRAGMENTS | ||
| 82 | __u32 i_faddr; | ||
| 83 | __u8 i_frag_no; | ||
| 84 | __u8 i_frag_size; | ||
| 85 | #endif | ||
| 86 | ext4_fsblk_t i_file_acl; | ||
| 87 | __u32 i_dir_acl; | ||
| 88 | __u32 i_dtime; | ||
| 89 | |||
| 90 | /* | ||
| 91 | * i_block_group is the number of the block group which contains | ||
| 92 | * this file's inode. Constant across the lifetime of the inode, | ||
| 93 | * it is ued for making block allocation decisions - we try to | ||
| 94 | * place a file's data blocks near its inode block, and new inodes | ||
| 95 | * near to their parent directory's inode. | ||
| 96 | */ | ||
| 97 | __u32 i_block_group; | ||
| 98 | __u32 i_state; /* Dynamic state flags for ext4 */ | ||
| 99 | |||
| 100 | /* block reservation info */ | ||
| 101 | struct ext4_block_alloc_info *i_block_alloc_info; | ||
| 102 | |||
| 103 | __u32 i_dir_start_lookup; | ||
| 104 | #ifdef CONFIG_EXT4DEV_FS_XATTR | ||
| 105 | /* | ||
| 106 | * Extended attributes can be read independently of the main file | ||
| 107 | * data. Taking i_mutex even when reading would cause contention | ||
| 108 | * between readers of EAs and writers of regular file data, so | ||
| 109 | * instead we synchronize on xattr_sem when reading or changing | ||
| 110 | * EAs. | ||
| 111 | */ | ||
| 112 | struct rw_semaphore xattr_sem; | ||
| 113 | #endif | ||
| 114 | #ifdef CONFIG_EXT4DEV_FS_POSIX_ACL | ||
| 115 | struct posix_acl *i_acl; | ||
| 116 | struct posix_acl *i_default_acl; | ||
| 117 | #endif | ||
| 118 | |||
| 119 | struct list_head i_orphan; /* unlinked but open inodes */ | ||
| 120 | |||
| 121 | /* | ||
| 122 | * i_disksize keeps track of what the inode size is ON DISK, not | ||
| 123 | * in memory. During truncate, i_size is set to the new size by | ||
| 124 | * the VFS prior to calling ext4_truncate(), but the filesystem won't | ||
| 125 | * set i_disksize to 0 until the truncate is actually under way. | ||
| 126 | * | ||
| 127 | * The intent is that i_disksize always represents the blocks which | ||
| 128 | * are used by this file. This allows recovery to restart truncate | ||
| 129 | * on orphans if we crash during truncate. We actually write i_disksize | ||
| 130 | * into the on-disk inode when writing inodes out, instead of i_size. | ||
| 131 | * | ||
| 132 | * The only time when i_disksize and i_size may be different is when | ||
| 133 | * a truncate is in progress. The only things which change i_disksize | ||
| 134 | * are ext4_get_block (growth) and ext4_truncate (shrinkth). | ||
| 135 | */ | ||
| 136 | loff_t i_disksize; | ||
| 137 | |||
| 138 | /* on-disk additional length */ | ||
| 139 | __u16 i_extra_isize; | ||
| 140 | |||
| 141 | /* | ||
| 142 | * truncate_mutex is for serialising ext4_truncate() against | ||
| 143 | * ext4_getblock(). In the 2.4 ext2 design, great chunks of inode's | ||
| 144 | * data tree are chopped off during truncate. We can't do that in | ||
| 145 | * ext4 because whenever we perform intermediate commits during | ||
| 146 | * truncate, the inode and all the metadata blocks *must* be in a | ||
| 147 | * consistent state which allows truncation of the orphans to restart | ||
| 148 | * during recovery. Hence we must fix the get_block-vs-truncate race | ||
| 149 | * by other means, so we have truncate_mutex. | ||
| 150 | */ | ||
| 151 | struct mutex truncate_mutex; | ||
| 152 | struct inode vfs_inode; | ||
| 153 | |||
| 154 | unsigned long i_ext_generation; | ||
| 155 | struct ext4_ext_cache i_cached_extent; | ||
| 156 | }; | ||
| 157 | |||
| 158 | #endif /* _LINUX_EXT4_FS_I */ | ||
diff --git a/include/linux/ext4_fs_sb.h b/include/linux/ext4_fs_sb.h new file mode 100644 index 000000000000..691a713139ce --- /dev/null +++ b/include/linux/ext4_fs_sb.h | |||
| @@ -0,0 +1,94 @@ | |||
| 1 | /* | ||
| 2 | * linux/include/linux/ext4_fs_sb.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 1992, 1993, 1994, 1995 | ||
| 5 | * Remy Card (card@masi.ibp.fr) | ||
| 6 | * Laboratoire MASI - Institut Blaise Pascal | ||
| 7 | * Universite Pierre et Marie Curie (Paris VI) | ||
| 8 | * | ||
| 9 | * from | ||
| 10 | * | ||
| 11 | * linux/include/linux/minix_fs_sb.h | ||
| 12 | * | ||
| 13 | * Copyright (C) 1991, 1992 Linus Torvalds | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef _LINUX_EXT4_FS_SB | ||
| 17 | #define _LINUX_EXT4_FS_SB | ||
| 18 | |||
| 19 | #ifdef __KERNEL__ | ||
| 20 | #include <linux/timer.h> | ||
| 21 | #include <linux/wait.h> | ||
| 22 | #include <linux/blockgroup_lock.h> | ||
| 23 | #include <linux/percpu_counter.h> | ||
| 24 | #endif | ||
| 25 | #include <linux/rbtree.h> | ||
| 26 | |||
| 27 | /* | ||
| 28 | * third extended-fs super-block data in memory | ||
| 29 | */ | ||
| 30 | struct ext4_sb_info { | ||
| 31 | unsigned long s_frag_size; /* Size of a fragment in bytes */ | ||
| 32 | unsigned long s_desc_size; /* Size of a group descriptor in bytes */ | ||
| 33 | unsigned long s_frags_per_block;/* Number of fragments per block */ | ||
| 34 | unsigned long s_inodes_per_block;/* Number of inodes per block */ | ||
| 35 | unsigned long s_frags_per_group;/* Number of fragments in a group */ | ||
| 36 | unsigned long s_blocks_per_group;/* Number of blocks in a group */ | ||
| 37 | unsigned long s_inodes_per_group;/* Number of inodes in a group */ | ||
| 38 | unsigned long s_itb_per_group; /* Number of inode table blocks per group */ | ||
| 39 | unsigned long s_gdb_count; /* Number of group descriptor blocks */ | ||
| 40 | unsigned long s_desc_per_block; /* Number of group descriptors per block */ | ||
| 41 | unsigned long s_groups_count; /* Number of groups in the fs */ | ||
| 42 | struct buffer_head * s_sbh; /* Buffer containing the super block */ | ||
| 43 | struct ext4_super_block * s_es; /* Pointer to the super block in the buffer */ | ||
| 44 | struct buffer_head ** s_group_desc; | ||
| 45 | unsigned long s_mount_opt; | ||
| 46 | uid_t s_resuid; | ||
| 47 | gid_t s_resgid; | ||
| 48 | unsigned short s_mount_state; | ||
| 49 | unsigned short s_pad; | ||
| 50 | int s_addr_per_block_bits; | ||
| 51 | int s_desc_per_block_bits; | ||
| 52 | int s_inode_size; | ||
| 53 | int s_first_ino; | ||
| 54 | spinlock_t s_next_gen_lock; | ||
| 55 | u32 s_next_generation; | ||
| 56 | u32 s_hash_seed[4]; | ||
| 57 | int s_def_hash_version; | ||
| 58 | struct percpu_counter s_freeblocks_counter; | ||
| 59 | struct percpu_counter s_freeinodes_counter; | ||
| 60 | struct percpu_counter s_dirs_counter; | ||
| 61 | struct blockgroup_lock s_blockgroup_lock; | ||
| 62 | |||
| 63 | /* root of the per fs reservation window tree */ | ||
| 64 | spinlock_t s_rsv_window_lock; | ||
| 65 | struct rb_root s_rsv_window_root; | ||
| 66 | struct ext4_reserve_window_node s_rsv_window_head; | ||
| 67 | |||
| 68 | /* Journaling */ | ||
| 69 | struct inode * s_journal_inode; | ||
| 70 | struct journal_s * s_journal; | ||
| 71 | struct list_head s_orphan; | ||
| 72 | unsigned long s_commit_interval; | ||
| 73 | struct block_device *journal_bdev; | ||
| 74 | #ifdef CONFIG_JBD_DEBUG | ||
| 75 | struct timer_list turn_ro_timer; /* For turning read-only (crash simulation) */ | ||
| 76 | wait_queue_head_t ro_wait_queue; /* For people waiting for the fs to go read-only */ | ||
| 77 | #endif | ||
| 78 | #ifdef CONFIG_QUOTA | ||
| 79 | char *s_qf_names[MAXQUOTAS]; /* Names of quota files with journalled quota */ | ||
| 80 | int s_jquota_fmt; /* Format of quota to use */ | ||
| 81 | #endif | ||
| 82 | |||
| 83 | #ifdef EXTENTS_STATS | ||
| 84 | /* ext4 extents stats */ | ||
| 85 | unsigned long s_ext_min; | ||
| 86 | unsigned long s_ext_max; | ||
| 87 | unsigned long s_depth_max; | ||
| 88 | spinlock_t s_ext_stats_lock; | ||
| 89 | unsigned long s_ext_blocks; | ||
| 90 | unsigned long s_ext_extents; | ||
| 91 | #endif | ||
| 92 | }; | ||
| 93 | |||
| 94 | #endif /* _LINUX_EXT4_FS_SB */ | ||
diff --git a/include/linux/ext4_jbd2.h b/include/linux/ext4_jbd2.h new file mode 100644 index 000000000000..72dd631912e4 --- /dev/null +++ b/include/linux/ext4_jbd2.h | |||
| @@ -0,0 +1,273 @@ | |||
| 1 | /* | ||
| 2 | * linux/include/linux/ext4_jbd2.h | ||
| 3 | * | ||
| 4 | * Written by Stephen C. Tweedie <sct@redhat.com>, 1999 | ||
| 5 | * | ||
| 6 | * Copyright 1998--1999 Red Hat corp --- All Rights Reserved | ||
| 7 | * | ||
| 8 | * This file is part of the Linux kernel and is made available under | ||
| 9 | * the terms of the GNU General Public License, version 2, or at your | ||
| 10 | * option, any later version, incorporated herein by reference. | ||
| 11 | * | ||
| 12 | * Ext4-specific journaling extensions. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef _LINUX_EXT4_JBD_H | ||
| 16 | #define _LINUX_EXT4_JBD_H | ||
| 17 | |||
| 18 | #include <linux/fs.h> | ||
| 19 | #include <linux/jbd2.h> | ||
| 20 | #include <linux/ext4_fs.h> | ||
| 21 | |||
| 22 | #define EXT4_JOURNAL(inode) (EXT4_SB((inode)->i_sb)->s_journal) | ||
| 23 | |||
| 24 | /* Define the number of blocks we need to account to a transaction to | ||
| 25 | * modify one block of data. | ||
| 26 | * | ||
| 27 | * We may have to touch one inode, one bitmap buffer, up to three | ||
| 28 | * indirection blocks, the group and superblock summaries, and the data | ||
| 29 | * block to complete the transaction. | ||
| 30 | * | ||
| 31 | * For extents-enabled fs we may have to allocate and modify up to | ||
| 32 | * 5 levels of tree + root which are stored in the inode. */ | ||
| 33 | |||
| 34 | #define EXT4_SINGLEDATA_TRANS_BLOCKS(sb) \ | ||
| 35 | (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_EXTENTS) \ | ||
| 36 | || test_opt(sb, EXTENTS) ? 27U : 8U) | ||
| 37 | |||
| 38 | /* Extended attribute operations touch at most two data buffers, | ||
| 39 | * two bitmap buffers, and two group summaries, in addition to the inode | ||
| 40 | * and the superblock, which are already accounted for. */ | ||
| 41 | |||
| 42 | #define EXT4_XATTR_TRANS_BLOCKS 6U | ||
| 43 | |||
| 44 | /* Define the minimum size for a transaction which modifies data. This | ||
| 45 | * needs to take into account the fact that we may end up modifying two | ||
| 46 | * quota files too (one for the group, one for the user quota). The | ||
| 47 | * superblock only gets updated once, of course, so don't bother | ||
| 48 | * counting that again for the quota updates. */ | ||
| 49 | |||
| 50 | #define EXT4_DATA_TRANS_BLOCKS(sb) (EXT4_SINGLEDATA_TRANS_BLOCKS(sb) + \ | ||
| 51 | EXT4_XATTR_TRANS_BLOCKS - 2 + \ | ||
| 52 | 2*EXT4_QUOTA_TRANS_BLOCKS(sb)) | ||
| 53 | |||
| 54 | /* Delete operations potentially hit one directory's namespace plus an | ||
| 55 | * entire inode, plus arbitrary amounts of bitmap/indirection data. Be | ||
| 56 | * generous. We can grow the delete transaction later if necessary. */ | ||
| 57 | |||
| 58 | #define EXT4_DELETE_TRANS_BLOCKS(sb) (2 * EXT4_DATA_TRANS_BLOCKS(sb) + 64) | ||
| 59 | |||
| 60 | /* Define an arbitrary limit for the amount of data we will anticipate | ||
| 61 | * writing to any given transaction. For unbounded transactions such as | ||
| 62 | * write(2) and truncate(2) we can write more than this, but we always | ||
| 63 | * start off at the maximum transaction size and grow the transaction | ||
| 64 | * optimistically as we go. */ | ||
| 65 | |||
| 66 | #define EXT4_MAX_TRANS_DATA 64U | ||
| 67 | |||
| 68 | /* We break up a large truncate or write transaction once the handle's | ||
| 69 | * buffer credits gets this low, we need either to extend the | ||
| 70 | * transaction or to start a new one. Reserve enough space here for | ||
| 71 | * inode, bitmap, superblock, group and indirection updates for at least | ||
| 72 | * one block, plus two quota updates. Quota allocations are not | ||
| 73 | * needed. */ | ||
| 74 | |||
| 75 | #define EXT4_RESERVE_TRANS_BLOCKS 12U | ||
| 76 | |||
| 77 | #define EXT4_INDEX_EXTRA_TRANS_BLOCKS 8 | ||
| 78 | |||
| 79 | #ifdef CONFIG_QUOTA | ||
| 80 | /* Amount of blocks needed for quota update - we know that the structure was | ||
| 81 | * allocated so we need to update only inode+data */ | ||
| 82 | #define EXT4_QUOTA_TRANS_BLOCKS(sb) (test_opt(sb, QUOTA) ? 2 : 0) | ||
| 83 | /* Amount of blocks needed for quota insert/delete - we do some block writes | ||
| 84 | * but inode, sb and group updates are done only once */ | ||
| 85 | #define EXT4_QUOTA_INIT_BLOCKS(sb) (test_opt(sb, QUOTA) ? (DQUOT_INIT_ALLOC*\ | ||
| 86 | (EXT4_SINGLEDATA_TRANS_BLOCKS(sb)-3)+3+DQUOT_INIT_REWRITE) : 0) | ||
| 87 | #define EXT4_QUOTA_DEL_BLOCKS(sb) (test_opt(sb, QUOTA) ? (DQUOT_DEL_ALLOC*\ | ||
| 88 | (EXT4_SINGLEDATA_TRANS_BLOCKS(sb)-3)+3+DQUOT_DEL_REWRITE) : 0) | ||
| 89 | #else | ||
| 90 | #define EXT4_QUOTA_TRANS_BLOCKS(sb) 0 | ||
| 91 | #define EXT4_QUOTA_INIT_BLOCKS(sb) 0 | ||
| 92 | #define EXT4_QUOTA_DEL_BLOCKS(sb) 0 | ||
| 93 | #endif | ||
| 94 | |||
| 95 | int | ||
| 96 | ext4_mark_iloc_dirty(handle_t *handle, | ||
| 97 | struct inode *inode, | ||
| 98 | struct ext4_iloc *iloc); | ||
| 99 | |||
| 100 | /* | ||
| 101 | * On success, We end up with an outstanding reference count against | ||
| 102 | * iloc->bh. This _must_ be cleaned up later. | ||
| 103 | */ | ||
| 104 | |||
| 105 | int ext4_reserve_inode_write(handle_t *handle, struct inode *inode, | ||
| 106 | struct ext4_iloc *iloc); | ||
| 107 | |||
| 108 | int ext4_mark_inode_dirty(handle_t *handle, struct inode *inode); | ||
| 109 | |||
| 110 | /* | ||
| 111 | * Wrapper functions with which ext4 calls into JBD. The intent here is | ||
| 112 | * to allow these to be turned into appropriate stubs so ext4 can control | ||
| 113 | * ext2 filesystems, so ext2+ext4 systems only nee one fs. This work hasn't | ||
| 114 | * been done yet. | ||
| 115 | */ | ||
| 116 | |||
| 117 | void ext4_journal_abort_handle(const char *caller, const char *err_fn, | ||
| 118 | struct buffer_head *bh, handle_t *handle, int err); | ||
| 119 | |||
| 120 | static inline int | ||
| 121 | __ext4_journal_get_undo_access(const char *where, handle_t *handle, | ||
| 122 | struct buffer_head *bh) | ||
| 123 | { | ||
| 124 | int err = jbd2_journal_get_undo_access(handle, bh); | ||
| 125 | if (err) | ||
| 126 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
| 127 | return err; | ||
| 128 | } | ||
| 129 | |||
| 130 | static inline int | ||
| 131 | __ext4_journal_get_write_access(const char *where, handle_t *handle, | ||
| 132 | struct buffer_head *bh) | ||
| 133 | { | ||
| 134 | int err = jbd2_journal_get_write_access(handle, bh); | ||
| 135 | if (err) | ||
| 136 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
| 137 | return err; | ||
| 138 | } | ||
| 139 | |||
| 140 | static inline void | ||
| 141 | ext4_journal_release_buffer(handle_t *handle, struct buffer_head *bh) | ||
| 142 | { | ||
| 143 | jbd2_journal_release_buffer(handle, bh); | ||
| 144 | } | ||
| 145 | |||
| 146 | static inline int | ||
| 147 | __ext4_journal_forget(const char *where, handle_t *handle, struct buffer_head *bh) | ||
| 148 | { | ||
| 149 | int err = jbd2_journal_forget(handle, bh); | ||
| 150 | if (err) | ||
| 151 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
| 152 | return err; | ||
| 153 | } | ||
| 154 | |||
| 155 | static inline int | ||
| 156 | __ext4_journal_revoke(const char *where, handle_t *handle, | ||
| 157 | ext4_fsblk_t blocknr, struct buffer_head *bh) | ||
| 158 | { | ||
| 159 | int err = jbd2_journal_revoke(handle, blocknr, bh); | ||
| 160 | if (err) | ||
| 161 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
| 162 | return err; | ||
| 163 | } | ||
| 164 | |||
| 165 | static inline int | ||
| 166 | __ext4_journal_get_create_access(const char *where, | ||
| 167 | handle_t *handle, struct buffer_head *bh) | ||
| 168 | { | ||
| 169 | int err = jbd2_journal_get_create_access(handle, bh); | ||
| 170 | if (err) | ||
| 171 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
| 172 | return err; | ||
| 173 | } | ||
| 174 | |||
| 175 | static inline int | ||
| 176 | __ext4_journal_dirty_metadata(const char *where, | ||
| 177 | handle_t *handle, struct buffer_head *bh) | ||
| 178 | { | ||
| 179 | int err = jbd2_journal_dirty_metadata(handle, bh); | ||
| 180 | if (err) | ||
| 181 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
| 182 | return err; | ||
| 183 | } | ||
| 184 | |||
| 185 | |||
| 186 | #define ext4_journal_get_undo_access(handle, bh) \ | ||
| 187 | __ext4_journal_get_undo_access(__FUNCTION__, (handle), (bh)) | ||
| 188 | #define ext4_journal_get_write_access(handle, bh) \ | ||
| 189 | __ext4_journal_get_write_access(__FUNCTION__, (handle), (bh)) | ||
| 190 | #define ext4_journal_revoke(handle, blocknr, bh) \ | ||
| 191 | __ext4_journal_revoke(__FUNCTION__, (handle), (blocknr), (bh)) | ||
| 192 | #define ext4_journal_get_create_access(handle, bh) \ | ||
| 193 | __ext4_journal_get_create_access(__FUNCTION__, (handle), (bh)) | ||
| 194 | #define ext4_journal_dirty_metadata(handle, bh) \ | ||
| 195 | __ext4_journal_dirty_metadata(__FUNCTION__, (handle), (bh)) | ||
| 196 | #define ext4_journal_forget(handle, bh) \ | ||
| 197 | __ext4_journal_forget(__FUNCTION__, (handle), (bh)) | ||
| 198 | |||
| 199 | int ext4_journal_dirty_data(handle_t *handle, struct buffer_head *bh); | ||
| 200 | |||
| 201 | handle_t *ext4_journal_start_sb(struct super_block *sb, int nblocks); | ||
| 202 | int __ext4_journal_stop(const char *where, handle_t *handle); | ||
| 203 | |||
| 204 | static inline handle_t *ext4_journal_start(struct inode *inode, int nblocks) | ||
| 205 | { | ||
| 206 | return ext4_journal_start_sb(inode->i_sb, nblocks); | ||
| 207 | } | ||
| 208 | |||
| 209 | #define ext4_journal_stop(handle) \ | ||
| 210 | __ext4_journal_stop(__FUNCTION__, (handle)) | ||
| 211 | |||
| 212 | static inline handle_t *ext4_journal_current_handle(void) | ||
| 213 | { | ||
| 214 | return journal_current_handle(); | ||
| 215 | } | ||
| 216 | |||
| 217 | static inline int ext4_journal_extend(handle_t *handle, int nblocks) | ||
| 218 | { | ||
| 219 | return jbd2_journal_extend(handle, nblocks); | ||
| 220 | } | ||
| 221 | |||
| 222 | static inline int ext4_journal_restart(handle_t *handle, int nblocks) | ||
| 223 | { | ||
| 224 | return jbd2_journal_restart(handle, nblocks); | ||
| 225 | } | ||
| 226 | |||
| 227 | static inline int ext4_journal_blocks_per_page(struct inode *inode) | ||
| 228 | { | ||
| 229 | return jbd2_journal_blocks_per_page(inode); | ||
| 230 | } | ||
| 231 | |||
| 232 | static inline int ext4_journal_force_commit(journal_t *journal) | ||
| 233 | { | ||
| 234 | return jbd2_journal_force_commit(journal); | ||
| 235 | } | ||
| 236 | |||
| 237 | /* super.c */ | ||
| 238 | int ext4_force_commit(struct super_block *sb); | ||
| 239 | |||
| 240 | static inline int ext4_should_journal_data(struct inode *inode) | ||
| 241 | { | ||
| 242 | if (!S_ISREG(inode->i_mode)) | ||
| 243 | return 1; | ||
| 244 | if (test_opt(inode->i_sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) | ||
| 245 | return 1; | ||
| 246 | if (EXT4_I(inode)->i_flags & EXT4_JOURNAL_DATA_FL) | ||
| 247 | return 1; | ||
| 248 | return 0; | ||
| 249 | } | ||
| 250 | |||
| 251 | static inline int ext4_should_order_data(struct inode *inode) | ||
| 252 | { | ||
| 253 | if (!S_ISREG(inode->i_mode)) | ||
| 254 | return 0; | ||
| 255 | if (EXT4_I(inode)->i_flags & EXT4_JOURNAL_DATA_FL) | ||
| 256 | return 0; | ||
| 257 | if (test_opt(inode->i_sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) | ||
| 258 | return 1; | ||
| 259 | return 0; | ||
| 260 | } | ||
| 261 | |||
| 262 | static inline int ext4_should_writeback_data(struct inode *inode) | ||
| 263 | { | ||
| 264 | if (!S_ISREG(inode->i_mode)) | ||
| 265 | return 0; | ||
| 266 | if (EXT4_I(inode)->i_flags & EXT4_JOURNAL_DATA_FL) | ||
| 267 | return 0; | ||
| 268 | if (test_opt(inode->i_sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA) | ||
| 269 | return 1; | ||
| 270 | return 0; | ||
| 271 | } | ||
| 272 | |||
| 273 | #endif /* _LINUX_EXT4_JBD_H */ | ||
diff --git a/include/linux/fs.h b/include/linux/fs.h index f53bf4ff1955..661c7c572149 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -250,6 +250,8 @@ extern int dir_notify_enable; | |||
| 250 | #define FS_NOTAIL_FL 0x00008000 /* file tail should not be merged */ | 250 | #define FS_NOTAIL_FL 0x00008000 /* file tail should not be merged */ |
| 251 | #define FS_DIRSYNC_FL 0x00010000 /* dirsync behaviour (directories only) */ | 251 | #define FS_DIRSYNC_FL 0x00010000 /* dirsync behaviour (directories only) */ |
| 252 | #define FS_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/ | 252 | #define FS_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/ |
| 253 | #define FS_EXTENT_FL 0x00080000 /* Extents */ | ||
| 254 | #define FS_DIRECTIO_FL 0x00100000 /* Use direct i/o */ | ||
| 253 | #define FS_RESERVED_FL 0x80000000 /* reserved for ext2 lib */ | 255 | #define FS_RESERVED_FL 0x80000000 /* reserved for ext2 lib */ |
| 254 | 256 | ||
| 255 | #define FS_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */ | 257 | #define FS_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */ |
| @@ -654,7 +656,11 @@ static inline loff_t i_size_read(struct inode *inode) | |||
| 654 | #endif | 656 | #endif |
| 655 | } | 657 | } |
| 656 | 658 | ||
| 657 | 659 | /* | |
| 660 | * NOTE: unlike i_size_read(), i_size_write() does need locking around it | ||
| 661 | * (normally i_mutex), otherwise on 32bit/SMP an update of i_size_seqcount | ||
| 662 | * can be lost, resulting in subsequent i_size_read() calls spinning forever. | ||
| 663 | */ | ||
| 658 | static inline void i_size_write(struct inode *inode, loff_t i_size) | 664 | static inline void i_size_write(struct inode *inode, loff_t i_size) |
| 659 | { | 665 | { |
| 660 | #if BITS_PER_LONG==32 && defined(CONFIG_SMP) | 666 | #if BITS_PER_LONG==32 && defined(CONFIG_SMP) |
diff --git a/include/linux/fsl_devices.h b/include/linux/fsl_devices.h index 16fbe59edeb1..3da29e2d524a 100644 --- a/include/linux/fsl_devices.h +++ b/include/linux/fsl_devices.h | |||
| @@ -46,18 +46,17 @@ | |||
| 46 | 46 | ||
| 47 | struct gianfar_platform_data { | 47 | struct gianfar_platform_data { |
| 48 | /* device specific information */ | 48 | /* device specific information */ |
| 49 | u32 device_flags; | 49 | u32 device_flags; |
| 50 | |||
| 51 | /* board specific information */ | 50 | /* board specific information */ |
| 52 | u32 board_flags; | 51 | u32 board_flags; |
| 53 | u32 bus_id; | 52 | u32 bus_id; |
| 54 | u32 phy_id; | 53 | u32 phy_id; |
| 55 | u8 mac_addr[6]; | 54 | u8 mac_addr[6]; |
| 56 | }; | 55 | }; |
| 57 | 56 | ||
| 58 | struct gianfar_mdio_data { | 57 | struct gianfar_mdio_data { |
| 59 | /* board specific information */ | 58 | /* board specific information */ |
| 60 | int irq[32]; | 59 | int irq[32]; |
| 61 | }; | 60 | }; |
| 62 | 61 | ||
| 63 | /* Flags related to gianfar device features */ | 62 | /* Flags related to gianfar device features */ |
| @@ -76,14 +75,13 @@ struct gianfar_mdio_data { | |||
| 76 | 75 | ||
| 77 | struct fsl_i2c_platform_data { | 76 | struct fsl_i2c_platform_data { |
| 78 | /* device specific information */ | 77 | /* device specific information */ |
| 79 | u32 device_flags; | 78 | u32 device_flags; |
| 80 | }; | 79 | }; |
| 81 | 80 | ||
| 82 | /* Flags related to I2C device features */ | 81 | /* Flags related to I2C device features */ |
| 83 | #define FSL_I2C_DEV_SEPARATE_DFSRR 0x00000001 | 82 | #define FSL_I2C_DEV_SEPARATE_DFSRR 0x00000001 |
| 84 | #define FSL_I2C_DEV_CLOCK_5200 0x00000002 | 83 | #define FSL_I2C_DEV_CLOCK_5200 0x00000002 |
| 85 | 84 | ||
| 86 | |||
| 87 | enum fsl_usb2_operating_modes { | 85 | enum fsl_usb2_operating_modes { |
| 88 | FSL_USB2_MPH_HOST, | 86 | FSL_USB2_MPH_HOST, |
| 89 | FSL_USB2_DR_HOST, | 87 | FSL_USB2_DR_HOST, |
| @@ -101,9 +99,9 @@ enum fsl_usb2_phy_modes { | |||
| 101 | 99 | ||
| 102 | struct fsl_usb2_platform_data { | 100 | struct fsl_usb2_platform_data { |
| 103 | /* board specific information */ | 101 | /* board specific information */ |
| 104 | enum fsl_usb2_operating_modes operating_mode; | 102 | enum fsl_usb2_operating_modes operating_mode; |
| 105 | enum fsl_usb2_phy_modes phy_mode; | 103 | enum fsl_usb2_phy_modes phy_mode; |
| 106 | unsigned int port_enables; | 104 | unsigned int port_enables; |
| 107 | }; | 105 | }; |
| 108 | 106 | ||
| 109 | /* Flags in fsl_usb2_mph_platform_data */ | 107 | /* Flags in fsl_usb2_mph_platform_data */ |
| @@ -121,5 +119,44 @@ struct fsl_spi_platform_data { | |||
| 121 | u32 sysclk; | 119 | u32 sysclk; |
| 122 | }; | 120 | }; |
| 123 | 121 | ||
| 124 | #endif /* _FSL_DEVICE_H_ */ | 122 | /* Ethernet interface (phy management and speed) |
| 125 | #endif /* __KERNEL__ */ | 123 | */ |
| 124 | enum enet_interface { | ||
| 125 | ENET_10_MII, /* 10 Base T, MII interface */ | ||
| 126 | ENET_10_RMII, /* 10 Base T, RMII interface */ | ||
| 127 | ENET_10_RGMII, /* 10 Base T, RGMII interface */ | ||
| 128 | ENET_100_MII, /* 100 Base T, MII interface */ | ||
| 129 | ENET_100_RMII, /* 100 Base T, RMII interface */ | ||
| 130 | ENET_100_RGMII, /* 100 Base T, RGMII interface */ | ||
| 131 | ENET_1000_GMII, /* 1000 Base T, GMII interface */ | ||
| 132 | ENET_1000_RGMII, /* 1000 Base T, RGMII interface */ | ||
| 133 | ENET_1000_TBI, /* 1000 Base T, TBI interface */ | ||
| 134 | ENET_1000_RTBI /* 1000 Base T, RTBI interface */ | ||
| 135 | }; | ||
| 136 | |||
| 137 | struct ucc_geth_platform_data { | ||
| 138 | /* device specific information */ | ||
| 139 | u32 device_flags; | ||
| 140 | u32 phy_reg_addr; | ||
| 141 | |||
| 142 | /* board specific information */ | ||
| 143 | u32 board_flags; | ||
| 144 | u8 rx_clock; | ||
| 145 | u8 tx_clock; | ||
| 146 | u32 phy_id; | ||
| 147 | enum enet_interface phy_interface; | ||
| 148 | u32 phy_interrupt; | ||
| 149 | u8 mac_addr[6]; | ||
| 150 | }; | ||
| 151 | |||
| 152 | /* Flags related to UCC Gigabit Ethernet device features */ | ||
| 153 | #define FSL_UGETH_DEV_HAS_GIGABIT 0x00000001 | ||
| 154 | #define FSL_UGETH_DEV_HAS_COALESCE 0x00000002 | ||
| 155 | #define FSL_UGETH_DEV_HAS_RMON 0x00000004 | ||
| 156 | |||
| 157 | /* Flags in ucc_geth_platform_data */ | ||
| 158 | #define FSL_UGETH_BRD_HAS_PHY_INTR 0x00000001 | ||
| 159 | /* if not set use a timer */ | ||
| 160 | |||
| 161 | #endif /* _FSL_DEVICE_H_ */ | ||
| 162 | #endif /* __KERNEL__ */ | ||
diff --git a/include/linux/gfs2_ondisk.h b/include/linux/gfs2_ondisk.h new file mode 100644 index 000000000000..a7ae7c177cac --- /dev/null +++ b/include/linux/gfs2_ondisk.h | |||
| @@ -0,0 +1,443 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. | ||
| 3 | * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved. | ||
| 4 | * | ||
| 5 | * This copyrighted material is made available to anyone wishing to use, | ||
| 6 | * modify, copy, or redistribute it subject to the terms and conditions | ||
| 7 | * of the GNU General Public License v.2. | ||
| 8 | */ | ||
| 9 | |||
| 10 | #ifndef __GFS2_ONDISK_DOT_H__ | ||
| 11 | #define __GFS2_ONDISK_DOT_H__ | ||
| 12 | |||
| 13 | #define GFS2_MAGIC 0x01161970 | ||
| 14 | #define GFS2_BASIC_BLOCK 512 | ||
| 15 | #define GFS2_BASIC_BLOCK_SHIFT 9 | ||
| 16 | |||
| 17 | /* Lock numbers of the LM_TYPE_NONDISK type */ | ||
| 18 | |||
| 19 | #define GFS2_MOUNT_LOCK 0 | ||
| 20 | #define GFS2_LIVE_LOCK 1 | ||
| 21 | #define GFS2_TRANS_LOCK 2 | ||
| 22 | #define GFS2_RENAME_LOCK 3 | ||
| 23 | |||
| 24 | /* Format numbers for various metadata types */ | ||
| 25 | |||
| 26 | #define GFS2_FORMAT_NONE 0 | ||
| 27 | #define GFS2_FORMAT_SB 100 | ||
| 28 | #define GFS2_FORMAT_RG 200 | ||
| 29 | #define GFS2_FORMAT_RB 300 | ||
| 30 | #define GFS2_FORMAT_DI 400 | ||
| 31 | #define GFS2_FORMAT_IN 500 | ||
| 32 | #define GFS2_FORMAT_LF 600 | ||
| 33 | #define GFS2_FORMAT_JD 700 | ||
| 34 | #define GFS2_FORMAT_LH 800 | ||
| 35 | #define GFS2_FORMAT_LD 900 | ||
| 36 | #define GFS2_FORMAT_LB 1000 | ||
| 37 | #define GFS2_FORMAT_EA 1600 | ||
| 38 | #define GFS2_FORMAT_ED 1700 | ||
| 39 | #define GFS2_FORMAT_QC 1400 | ||
| 40 | /* These are format numbers for entities contained in files */ | ||
| 41 | #define GFS2_FORMAT_RI 1100 | ||
| 42 | #define GFS2_FORMAT_DE 1200 | ||
| 43 | #define GFS2_FORMAT_QU 1500 | ||
| 44 | /* These are part of the superblock */ | ||
| 45 | #define GFS2_FORMAT_FS 1801 | ||
| 46 | #define GFS2_FORMAT_MULTI 1900 | ||
| 47 | |||
| 48 | /* | ||
| 49 | * An on-disk inode number | ||
| 50 | */ | ||
| 51 | |||
| 52 | struct gfs2_inum { | ||
| 53 | __be64 no_formal_ino; | ||
| 54 | __be64 no_addr; | ||
| 55 | }; | ||
| 56 | |||
| 57 | static inline int gfs2_inum_equal(const struct gfs2_inum *ino1, | ||
| 58 | const struct gfs2_inum *ino2) | ||
| 59 | { | ||
| 60 | return ino1->no_formal_ino == ino2->no_formal_ino && | ||
| 61 | ino1->no_addr == ino2->no_addr; | ||
| 62 | } | ||
| 63 | |||
| 64 | /* | ||
| 65 | * Generic metadata head structure | ||
| 66 | * Every inplace buffer logged in the journal must start with this. | ||
| 67 | */ | ||
| 68 | |||
| 69 | #define GFS2_METATYPE_NONE 0 | ||
| 70 | #define GFS2_METATYPE_SB 1 | ||
| 71 | #define GFS2_METATYPE_RG 2 | ||
| 72 | #define GFS2_METATYPE_RB 3 | ||
| 73 | #define GFS2_METATYPE_DI 4 | ||
| 74 | #define GFS2_METATYPE_IN 5 | ||
| 75 | #define GFS2_METATYPE_LF 6 | ||
| 76 | #define GFS2_METATYPE_JD 7 | ||
| 77 | #define GFS2_METATYPE_LH 8 | ||
| 78 | #define GFS2_METATYPE_LD 9 | ||
| 79 | #define GFS2_METATYPE_LB 12 | ||
| 80 | #define GFS2_METATYPE_EA 10 | ||
| 81 | #define GFS2_METATYPE_ED 11 | ||
| 82 | #define GFS2_METATYPE_QC 14 | ||
| 83 | |||
| 84 | struct gfs2_meta_header { | ||
| 85 | __be32 mh_magic; | ||
| 86 | __be32 mh_type; | ||
| 87 | __be64 __pad0; /* Was generation number in gfs1 */ | ||
| 88 | __be32 mh_format; | ||
| 89 | __be32 __pad1; /* Was incarnation number in gfs1 */ | ||
| 90 | }; | ||
| 91 | |||
| 92 | /* | ||
| 93 | * super-block structure | ||
| 94 | * | ||
| 95 | * It's probably good if SIZEOF_SB <= GFS2_BASIC_BLOCK (512 bytes) | ||
| 96 | * | ||
| 97 | * Order is important, need to be able to read old superblocks to do on-disk | ||
| 98 | * version upgrades. | ||
| 99 | */ | ||
| 100 | |||
| 101 | /* Address of superblock in GFS2 basic blocks */ | ||
| 102 | #define GFS2_SB_ADDR 128 | ||
| 103 | |||
| 104 | /* The lock number for the superblock (must be zero) */ | ||
| 105 | #define GFS2_SB_LOCK 0 | ||
| 106 | |||
| 107 | /* Requirement: GFS2_LOCKNAME_LEN % 8 == 0 | ||
| 108 | Includes: the fencing zero at the end */ | ||
| 109 | #define GFS2_LOCKNAME_LEN 64 | ||
| 110 | |||
| 111 | struct gfs2_sb { | ||
| 112 | struct gfs2_meta_header sb_header; | ||
| 113 | |||
| 114 | __be32 sb_fs_format; | ||
| 115 | __be32 sb_multihost_format; | ||
| 116 | __u32 __pad0; /* Was superblock flags in gfs1 */ | ||
| 117 | |||
| 118 | __be32 sb_bsize; | ||
| 119 | __be32 sb_bsize_shift; | ||
| 120 | __u32 __pad1; /* Was journal segment size in gfs1 */ | ||
| 121 | |||
| 122 | struct gfs2_inum sb_master_dir; /* Was jindex dinode in gfs1 */ | ||
| 123 | struct gfs2_inum __pad2; /* Was rindex dinode in gfs1 */ | ||
| 124 | struct gfs2_inum sb_root_dir; | ||
| 125 | |||
| 126 | char sb_lockproto[GFS2_LOCKNAME_LEN]; | ||
| 127 | char sb_locktable[GFS2_LOCKNAME_LEN]; | ||
| 128 | /* In gfs1, quota and license dinodes followed */ | ||
| 129 | }; | ||
| 130 | |||
| 131 | /* | ||
| 132 | * resource index structure | ||
| 133 | */ | ||
| 134 | |||
| 135 | struct gfs2_rindex { | ||
| 136 | __be64 ri_addr; /* grp block disk address */ | ||
| 137 | __be32 ri_length; /* length of rgrp header in fs blocks */ | ||
| 138 | __u32 __pad; | ||
| 139 | |||
| 140 | __be64 ri_data0; /* first data location */ | ||
| 141 | __be32 ri_data; /* num of data blocks in rgrp */ | ||
| 142 | |||
| 143 | __be32 ri_bitbytes; /* number of bytes in data bitmaps */ | ||
| 144 | |||
| 145 | __u8 ri_reserved[64]; | ||
| 146 | }; | ||
| 147 | |||
| 148 | /* | ||
| 149 | * resource group header structure | ||
| 150 | */ | ||
| 151 | |||
| 152 | /* Number of blocks per byte in rgrp */ | ||
| 153 | #define GFS2_NBBY 4 | ||
| 154 | #define GFS2_BIT_SIZE 2 | ||
| 155 | #define GFS2_BIT_MASK 0x00000003 | ||
| 156 | |||
| 157 | #define GFS2_BLKST_FREE 0 | ||
| 158 | #define GFS2_BLKST_USED 1 | ||
| 159 | #define GFS2_BLKST_UNLINKED 2 | ||
| 160 | #define GFS2_BLKST_DINODE 3 | ||
| 161 | |||
| 162 | #define GFS2_RGF_JOURNAL 0x00000001 | ||
| 163 | #define GFS2_RGF_METAONLY 0x00000002 | ||
| 164 | #define GFS2_RGF_DATAONLY 0x00000004 | ||
| 165 | #define GFS2_RGF_NOALLOC 0x00000008 | ||
| 166 | |||
| 167 | struct gfs2_rgrp { | ||
| 168 | struct gfs2_meta_header rg_header; | ||
| 169 | |||
| 170 | __be32 rg_flags; | ||
| 171 | __be32 rg_free; | ||
| 172 | __be32 rg_dinodes; | ||
| 173 | __be32 __pad; | ||
| 174 | __be64 rg_igeneration; | ||
| 175 | |||
| 176 | __u8 rg_reserved[80]; /* Several fields from gfs1 now reserved */ | ||
| 177 | }; | ||
| 178 | |||
| 179 | /* | ||
| 180 | * quota structure | ||
| 181 | */ | ||
| 182 | |||
| 183 | struct gfs2_quota { | ||
| 184 | __be64 qu_limit; | ||
| 185 | __be64 qu_warn; | ||
| 186 | __be64 qu_value; | ||
| 187 | __u8 qu_reserved[64]; | ||
| 188 | }; | ||
| 189 | |||
| 190 | /* | ||
| 191 | * dinode structure | ||
| 192 | */ | ||
| 193 | |||
| 194 | #define GFS2_MAX_META_HEIGHT 10 | ||
| 195 | #define GFS2_DIR_MAX_DEPTH 17 | ||
| 196 | |||
| 197 | #define DT2IF(dt) (((dt) << 12) & S_IFMT) | ||
| 198 | #define IF2DT(sif) (((sif) & S_IFMT) >> 12) | ||
| 199 | |||
| 200 | enum { | ||
| 201 | gfs2fl_Jdata = 0, | ||
| 202 | gfs2fl_ExHash = 1, | ||
| 203 | gfs2fl_Unused = 2, | ||
| 204 | gfs2fl_EaIndirect = 3, | ||
| 205 | gfs2fl_Directio = 4, | ||
| 206 | gfs2fl_Immutable = 5, | ||
| 207 | gfs2fl_AppendOnly = 6, | ||
| 208 | gfs2fl_NoAtime = 7, | ||
| 209 | gfs2fl_Sync = 8, | ||
| 210 | gfs2fl_System = 9, | ||
| 211 | gfs2fl_TruncInProg = 29, | ||
| 212 | gfs2fl_InheritDirectio = 30, | ||
| 213 | gfs2fl_InheritJdata = 31, | ||
| 214 | }; | ||
| 215 | |||
| 216 | /* Dinode flags */ | ||
| 217 | #define GFS2_DIF_JDATA 0x00000001 | ||
| 218 | #define GFS2_DIF_EXHASH 0x00000002 | ||
| 219 | #define GFS2_DIF_UNUSED 0x00000004 /* only in gfs1 */ | ||
| 220 | #define GFS2_DIF_EA_INDIRECT 0x00000008 | ||
| 221 | #define GFS2_DIF_DIRECTIO 0x00000010 | ||
| 222 | #define GFS2_DIF_IMMUTABLE 0x00000020 | ||
| 223 | #define GFS2_DIF_APPENDONLY 0x00000040 | ||
| 224 | #define GFS2_DIF_NOATIME 0x00000080 | ||
| 225 | #define GFS2_DIF_SYNC 0x00000100 | ||
| 226 | #define GFS2_DIF_SYSTEM 0x00000200 /* New in gfs2 */ | ||
| 227 | #define GFS2_DIF_TRUNC_IN_PROG 0x20000000 /* New in gfs2 */ | ||
| 228 | #define GFS2_DIF_INHERIT_DIRECTIO 0x40000000 | ||
| 229 | #define GFS2_DIF_INHERIT_JDATA 0x80000000 | ||
| 230 | |||
| 231 | struct gfs2_dinode { | ||
| 232 | struct gfs2_meta_header di_header; | ||
| 233 | |||
| 234 | struct gfs2_inum di_num; | ||
| 235 | |||
| 236 | __be32 di_mode; /* mode of file */ | ||
| 237 | __be32 di_uid; /* owner's user id */ | ||
| 238 | __be32 di_gid; /* owner's group id */ | ||
| 239 | __be32 di_nlink; /* number of links to this file */ | ||
| 240 | __be64 di_size; /* number of bytes in file */ | ||
| 241 | __be64 di_blocks; /* number of blocks in file */ | ||
| 242 | __be64 di_atime; /* time last accessed */ | ||
| 243 | __be64 di_mtime; /* time last modified */ | ||
| 244 | __be64 di_ctime; /* time last changed */ | ||
| 245 | __be32 di_major; /* device major number */ | ||
| 246 | __be32 di_minor; /* device minor number */ | ||
| 247 | |||
| 248 | /* This section varies from gfs1. Padding added to align with | ||
| 249 | * remainder of dinode | ||
| 250 | */ | ||
| 251 | __be64 di_goal_meta; /* rgrp to alloc from next */ | ||
| 252 | __be64 di_goal_data; /* data block goal */ | ||
| 253 | __be64 di_generation; /* generation number for NFS */ | ||
| 254 | |||
| 255 | __be32 di_flags; /* GFS2_DIF_... */ | ||
| 256 | __be32 di_payload_format; /* GFS2_FORMAT_... */ | ||
| 257 | __u16 __pad1; /* Was ditype in gfs1 */ | ||
| 258 | __be16 di_height; /* height of metadata */ | ||
| 259 | __u32 __pad2; /* Unused incarnation number from gfs1 */ | ||
| 260 | |||
| 261 | /* These only apply to directories */ | ||
| 262 | __u16 __pad3; /* Padding */ | ||
| 263 | __be16 di_depth; /* Number of bits in the table */ | ||
| 264 | __be32 di_entries; /* The number of entries in the directory */ | ||
| 265 | |||
| 266 | struct gfs2_inum __pad4; /* Unused even in current gfs1 */ | ||
| 267 | |||
| 268 | __be64 di_eattr; /* extended attribute block number */ | ||
| 269 | |||
| 270 | __u8 di_reserved[56]; | ||
| 271 | }; | ||
| 272 | |||
| 273 | /* | ||
| 274 | * directory structure - many of these per directory file | ||
| 275 | */ | ||
| 276 | |||
| 277 | #define GFS2_FNAMESIZE 255 | ||
| 278 | #define GFS2_DIRENT_SIZE(name_len) ((sizeof(struct gfs2_dirent) + (name_len) + 7) & ~7) | ||
| 279 | |||
| 280 | struct gfs2_dirent { | ||
| 281 | struct gfs2_inum de_inum; | ||
| 282 | __be32 de_hash; | ||
| 283 | __be16 de_rec_len; | ||
| 284 | __be16 de_name_len; | ||
| 285 | __be16 de_type; | ||
| 286 | __u8 __pad[14]; | ||
| 287 | }; | ||
| 288 | |||
| 289 | /* | ||
| 290 | * Header of leaf directory nodes | ||
| 291 | */ | ||
| 292 | |||
| 293 | struct gfs2_leaf { | ||
| 294 | struct gfs2_meta_header lf_header; | ||
| 295 | |||
| 296 | __be16 lf_depth; /* Depth of leaf */ | ||
| 297 | __be16 lf_entries; /* Number of dirents in leaf */ | ||
| 298 | __be32 lf_dirent_format; /* Format of the dirents */ | ||
| 299 | __be64 lf_next; /* Next leaf, if overflow */ | ||
| 300 | |||
| 301 | __u8 lf_reserved[64]; | ||
| 302 | }; | ||
| 303 | |||
| 304 | /* | ||
| 305 | * Extended attribute header format | ||
| 306 | */ | ||
| 307 | |||
| 308 | #define GFS2_EA_MAX_NAME_LEN 255 | ||
| 309 | #define GFS2_EA_MAX_DATA_LEN 65536 | ||
| 310 | |||
| 311 | #define GFS2_EATYPE_UNUSED 0 | ||
| 312 | #define GFS2_EATYPE_USR 1 | ||
| 313 | #define GFS2_EATYPE_SYS 2 | ||
| 314 | #define GFS2_EATYPE_SECURITY 3 | ||
| 315 | |||
| 316 | #define GFS2_EATYPE_LAST 3 | ||
| 317 | #define GFS2_EATYPE_VALID(x) ((x) <= GFS2_EATYPE_LAST) | ||
| 318 | |||
| 319 | #define GFS2_EAFLAG_LAST 0x01 /* last ea in block */ | ||
| 320 | |||
| 321 | struct gfs2_ea_header { | ||
| 322 | __be32 ea_rec_len; | ||
| 323 | __be32 ea_data_len; | ||
| 324 | __u8 ea_name_len; /* no NULL pointer after the string */ | ||
| 325 | __u8 ea_type; /* GFS2_EATYPE_... */ | ||
| 326 | __u8 ea_flags; /* GFS2_EAFLAG_... */ | ||
| 327 | __u8 ea_num_ptrs; | ||
| 328 | __u32 __pad; | ||
| 329 | }; | ||
| 330 | |||
| 331 | /* | ||
| 332 | * Log header structure | ||
| 333 | */ | ||
| 334 | |||
| 335 | #define GFS2_LOG_HEAD_UNMOUNT 0x00000001 /* log is clean */ | ||
| 336 | |||
| 337 | struct gfs2_log_header { | ||
| 338 | struct gfs2_meta_header lh_header; | ||
| 339 | |||
| 340 | __be64 lh_sequence; /* Sequence number of this transaction */ | ||
| 341 | __be32 lh_flags; /* GFS2_LOG_HEAD_... */ | ||
| 342 | __be32 lh_tail; /* Block number of log tail */ | ||
| 343 | __be32 lh_blkno; | ||
| 344 | __be32 lh_hash; | ||
| 345 | }; | ||
| 346 | |||
| 347 | /* | ||
| 348 | * Log type descriptor | ||
| 349 | */ | ||
| 350 | |||
| 351 | #define GFS2_LOG_DESC_METADATA 300 | ||
| 352 | /* ld_data1 is the number of metadata blocks in the descriptor. | ||
| 353 | ld_data2 is unused. */ | ||
| 354 | |||
| 355 | #define GFS2_LOG_DESC_REVOKE 301 | ||
| 356 | /* ld_data1 is the number of revoke blocks in the descriptor. | ||
| 357 | ld_data2 is unused. */ | ||
| 358 | |||
| 359 | #define GFS2_LOG_DESC_JDATA 302 | ||
| 360 | /* ld_data1 is the number of data blocks in the descriptor. | ||
| 361 | ld_data2 is unused. */ | ||
| 362 | |||
| 363 | struct gfs2_log_descriptor { | ||
| 364 | struct gfs2_meta_header ld_header; | ||
| 365 | |||
| 366 | __be32 ld_type; /* GFS2_LOG_DESC_... */ | ||
| 367 | __be32 ld_length; /* Number of buffers in this chunk */ | ||
| 368 | __be32 ld_data1; /* descriptor-specific field */ | ||
| 369 | __be32 ld_data2; /* descriptor-specific field */ | ||
| 370 | |||
| 371 | __u8 ld_reserved[32]; | ||
| 372 | }; | ||
| 373 | |||
| 374 | /* | ||
| 375 | * Inum Range | ||
| 376 | * Describe a range of formal inode numbers allocated to | ||
| 377 | * one machine to assign to inodes. | ||
| 378 | */ | ||
| 379 | |||
| 380 | #define GFS2_INUM_QUANTUM 1048576 | ||
| 381 | |||
| 382 | struct gfs2_inum_range { | ||
| 383 | __be64 ir_start; | ||
| 384 | __be64 ir_length; | ||
| 385 | }; | ||
| 386 | |||
| 387 | /* | ||
| 388 | * Statfs change | ||
| 389 | * Describes an change to the pool of free and allocated | ||
| 390 | * blocks. | ||
| 391 | */ | ||
| 392 | |||
| 393 | struct gfs2_statfs_change { | ||
| 394 | __be64 sc_total; | ||
| 395 | __be64 sc_free; | ||
| 396 | __be64 sc_dinodes; | ||
| 397 | }; | ||
| 398 | |||
| 399 | /* | ||
| 400 | * Quota change | ||
| 401 | * Describes an allocation change for a particular | ||
| 402 | * user or group. | ||
| 403 | */ | ||
| 404 | |||
| 405 | #define GFS2_QCF_USER 0x00000001 | ||
| 406 | |||
| 407 | struct gfs2_quota_change { | ||
| 408 | __be64 qc_change; | ||
| 409 | __be32 qc_flags; /* GFS2_QCF_... */ | ||
| 410 | __be32 qc_id; | ||
| 411 | }; | ||
| 412 | |||
| 413 | #ifdef __KERNEL__ | ||
| 414 | /* Translation functions */ | ||
| 415 | |||
| 416 | extern void gfs2_inum_in(struct gfs2_inum *no, const void *buf); | ||
| 417 | extern void gfs2_inum_out(const struct gfs2_inum *no, void *buf); | ||
| 418 | extern void gfs2_sb_in(struct gfs2_sb *sb, const void *buf); | ||
| 419 | extern void gfs2_rindex_in(struct gfs2_rindex *ri, const void *buf); | ||
| 420 | extern void gfs2_rindex_out(const struct gfs2_rindex *ri, void *buf); | ||
| 421 | extern void gfs2_rgrp_in(struct gfs2_rgrp *rg, const void *buf); | ||
| 422 | extern void gfs2_rgrp_out(const struct gfs2_rgrp *rg, void *buf); | ||
| 423 | extern void gfs2_quota_in(struct gfs2_quota *qu, const void *buf); | ||
| 424 | extern void gfs2_quota_out(const struct gfs2_quota *qu, void *buf); | ||
| 425 | extern void gfs2_dinode_in(struct gfs2_dinode *di, const void *buf); | ||
| 426 | extern void gfs2_dinode_out(const struct gfs2_dinode *di, void *buf); | ||
| 427 | extern void gfs2_ea_header_in(struct gfs2_ea_header *ea, const void *buf); | ||
| 428 | extern void gfs2_ea_header_out(const struct gfs2_ea_header *ea, void *buf); | ||
| 429 | extern void gfs2_log_header_in(struct gfs2_log_header *lh, const void *buf); | ||
| 430 | extern void gfs2_inum_range_in(struct gfs2_inum_range *ir, const void *buf); | ||
| 431 | extern void gfs2_inum_range_out(const struct gfs2_inum_range *ir, void *buf); | ||
| 432 | extern void gfs2_statfs_change_in(struct gfs2_statfs_change *sc, const void *buf); | ||
| 433 | extern void gfs2_statfs_change_out(const struct gfs2_statfs_change *sc, void *buf); | ||
| 434 | extern void gfs2_quota_change_in(struct gfs2_quota_change *qc, const void *buf); | ||
| 435 | |||
| 436 | /* Printing functions */ | ||
| 437 | |||
| 438 | extern void gfs2_rindex_print(const struct gfs2_rindex *ri); | ||
| 439 | extern void gfs2_dinode_print(const struct gfs2_dinode *di); | ||
| 440 | |||
| 441 | #endif /* __KERNEL__ */ | ||
| 442 | |||
| 443 | #endif /* __GFS2_ONDISK_DOT_H__ */ | ||
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h index 50d8b5744cf6..612472aaa79c 100644 --- a/include/linux/hardirq.h +++ b/include/linux/hardirq.h | |||
| @@ -28,11 +28,16 @@ | |||
| 28 | 28 | ||
| 29 | #ifndef HARDIRQ_BITS | 29 | #ifndef HARDIRQ_BITS |
| 30 | #define HARDIRQ_BITS 12 | 30 | #define HARDIRQ_BITS 12 |
| 31 | |||
| 32 | #ifndef MAX_HARDIRQS_PER_CPU | ||
| 33 | #define MAX_HARDIRQS_PER_CPU NR_IRQS | ||
| 34 | #endif | ||
| 35 | |||
| 31 | /* | 36 | /* |
| 32 | * The hardirq mask has to be large enough to have space for potentially | 37 | * The hardirq mask has to be large enough to have space for potentially |
| 33 | * all IRQ sources in the system nesting on a single CPU. | 38 | * all IRQ sources in the system nesting on a single CPU. |
| 34 | */ | 39 | */ |
| 35 | #if (1 << HARDIRQ_BITS) < NR_IRQS | 40 | #if (1 << HARDIRQ_BITS) < MAX_HARDIRQS_PER_CPU |
| 36 | # error HARDIRQ_BITS is too low! | 41 | # error HARDIRQ_BITS is too low! |
| 37 | #endif | 42 | #endif |
| 38 | #endif | 43 | #endif |
diff --git a/include/linux/hiddev.h b/include/linux/hiddev.h index 945ba1ad14ac..acbdae6d7ae1 100644 --- a/include/linux/hiddev.h +++ b/include/linux/hiddev.h | |||
| @@ -222,7 +222,7 @@ struct hid_report; | |||
| 222 | int hiddev_connect(struct hid_device *); | 222 | int hiddev_connect(struct hid_device *); |
| 223 | void hiddev_disconnect(struct hid_device *); | 223 | void hiddev_disconnect(struct hid_device *); |
| 224 | void hiddev_hid_event(struct hid_device *hid, struct hid_field *field, | 224 | void hiddev_hid_event(struct hid_device *hid, struct hid_field *field, |
| 225 | struct hid_usage *usage, __s32 value, struct pt_regs *regs); | 225 | struct hid_usage *usage, __s32 value); |
| 226 | void hiddev_report_event(struct hid_device *hid, struct hid_report *report); | 226 | void hiddev_report_event(struct hid_device *hid, struct hid_report *report); |
| 227 | int __init hiddev_init(void); | 227 | int __init hiddev_init(void); |
| 228 | void hiddev_exit(void); | 228 | void hiddev_exit(void); |
| @@ -230,7 +230,7 @@ void hiddev_exit(void); | |||
| 230 | static inline int hiddev_connect(struct hid_device *hid) { return -1; } | 230 | static inline int hiddev_connect(struct hid_device *hid) { return -1; } |
| 231 | static inline void hiddev_disconnect(struct hid_device *hid) { } | 231 | static inline void hiddev_disconnect(struct hid_device *hid) { } |
| 232 | static inline void hiddev_hid_event(struct hid_device *hid, struct hid_field *field, | 232 | static inline void hiddev_hid_event(struct hid_device *hid, struct hid_field *field, |
| 233 | struct hid_usage *usage, __s32 value, struct pt_regs *regs) { } | 233 | struct hid_usage *usage, __s32 value) { } |
| 234 | static inline void hiddev_report_event(struct hid_device *hid, struct hid_report *report) { } | 234 | static inline void hiddev_report_event(struct hid_device *hid, struct hid_report *report) { } |
| 235 | static inline int hiddev_init(void) { return 0; } | 235 | static inline int hiddev_init(void) { return 0; } |
| 236 | static inline void hiddev_exit(void) { } | 236 | static inline void hiddev_exit(void) { } |
diff --git a/include/linux/htirq.h b/include/linux/htirq.h new file mode 100644 index 000000000000..1f15ce279a23 --- /dev/null +++ b/include/linux/htirq.h | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | #ifndef LINUX_HTIRQ_H | ||
| 2 | #define LINUX_HTIRQ_H | ||
| 3 | |||
| 4 | /* Helper functions.. */ | ||
| 5 | void write_ht_irq_low(unsigned int irq, u32 data); | ||
| 6 | void write_ht_irq_high(unsigned int irq, u32 data); | ||
| 7 | u32 read_ht_irq_low(unsigned int irq); | ||
| 8 | u32 read_ht_irq_high(unsigned int irq); | ||
| 9 | void mask_ht_irq(unsigned int irq); | ||
| 10 | void unmask_ht_irq(unsigned int irq); | ||
| 11 | |||
| 12 | /* The arch hook for getting things started */ | ||
| 13 | int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev); | ||
| 14 | |||
| 15 | #endif /* LINUX_HTIRQ_H */ | ||
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index c25a38d8f600..5081d27bfa27 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
| @@ -17,6 +17,7 @@ int hugetlb_sysctl_handler(struct ctl_table *, int, struct file *, void __user * | |||
| 17 | int copy_hugetlb_page_range(struct mm_struct *, struct mm_struct *, struct vm_area_struct *); | 17 | int copy_hugetlb_page_range(struct mm_struct *, struct mm_struct *, struct vm_area_struct *); |
| 18 | int follow_hugetlb_page(struct mm_struct *, struct vm_area_struct *, struct page **, struct vm_area_struct **, unsigned long *, int *, int); | 18 | int follow_hugetlb_page(struct mm_struct *, struct vm_area_struct *, struct page **, struct vm_area_struct **, unsigned long *, int *, int); |
| 19 | void unmap_hugepage_range(struct vm_area_struct *, unsigned long, unsigned long); | 19 | void unmap_hugepage_range(struct vm_area_struct *, unsigned long, unsigned long); |
| 20 | void __unmap_hugepage_range(struct vm_area_struct *, unsigned long, unsigned long); | ||
| 20 | int hugetlb_prefault(struct address_space *, struct vm_area_struct *); | 21 | int hugetlb_prefault(struct address_space *, struct vm_area_struct *); |
| 21 | int hugetlb_report_meminfo(char *); | 22 | int hugetlb_report_meminfo(char *); |
| 22 | int hugetlb_report_node_meminfo(int, char *); | 23 | int hugetlb_report_node_meminfo(int, char *); |
diff --git a/include/linux/ide.h b/include/linux/ide.h index 07d8d725541f..9c2050293f17 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
| @@ -1185,7 +1185,7 @@ extern void ide_stall_queue(ide_drive_t *drive, unsigned long timeout); | |||
| 1185 | 1185 | ||
| 1186 | extern int ide_spin_wait_hwgroup(ide_drive_t *); | 1186 | extern int ide_spin_wait_hwgroup(ide_drive_t *); |
| 1187 | extern void ide_timer_expiry(unsigned long); | 1187 | extern void ide_timer_expiry(unsigned long); |
| 1188 | extern irqreturn_t ide_intr(int irq, void *dev_id, struct pt_regs *regs); | 1188 | extern irqreturn_t ide_intr(int irq, void *dev_id); |
| 1189 | extern void do_ide_request(request_queue_t *); | 1189 | extern void do_ide_request(request_queue_t *); |
| 1190 | 1190 | ||
| 1191 | void ide_init_disk(struct gendisk *, ide_drive_t *); | 1191 | void ide_init_disk(struct gendisk *, ide_drive_t *); |
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index ab2740832742..35cb38573583 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h | |||
| @@ -44,7 +44,7 @@ struct vlan_ethhdr { | |||
| 44 | unsigned char h_source[ETH_ALEN]; /* source ether addr */ | 44 | unsigned char h_source[ETH_ALEN]; /* source ether addr */ |
| 45 | __be16 h_vlan_proto; /* Should always be 0x8100 */ | 45 | __be16 h_vlan_proto; /* Should always be 0x8100 */ |
| 46 | __be16 h_vlan_TCI; /* Encapsulates priority and VLAN ID */ | 46 | __be16 h_vlan_TCI; /* Encapsulates priority and VLAN ID */ |
| 47 | unsigned short h_vlan_encapsulated_proto; /* packet type ID field (or len) */ | 47 | __be16 h_vlan_encapsulated_proto; /* packet type ID field (or len) */ |
| 48 | }; | 48 | }; |
| 49 | 49 | ||
| 50 | #include <linux/skbuff.h> | 50 | #include <linux/skbuff.h> |
diff --git a/include/linux/in.h b/include/linux/in.h index d79fc75fa7c2..2619859f6e1b 100644 --- a/include/linux/in.h +++ b/include/linux/in.h | |||
| @@ -40,6 +40,7 @@ enum { | |||
| 40 | 40 | ||
| 41 | IPPROTO_ESP = 50, /* Encapsulation Security Payload protocol */ | 41 | IPPROTO_ESP = 50, /* Encapsulation Security Payload protocol */ |
| 42 | IPPROTO_AH = 51, /* Authentication Header protocol */ | 42 | IPPROTO_AH = 51, /* Authentication Header protocol */ |
| 43 | IPPROTO_BEETPH = 94, /* IP option pseudo header for BEET */ | ||
| 43 | IPPROTO_PIM = 103, /* Protocol Independent Multicast */ | 44 | IPPROTO_PIM = 103, /* Protocol Independent Multicast */ |
| 44 | 45 | ||
| 45 | IPPROTO_COMP = 108, /* Compression Header protocol */ | 46 | IPPROTO_COMP = 108, /* Compression Header protocol */ |
diff --git a/include/linux/input.h b/include/linux/input.h index 5770105471dd..c38507ba38b5 100644 --- a/include/linux/input.h +++ b/include/linux/input.h | |||
| @@ -953,7 +953,6 @@ struct input_dev { | |||
| 953 | unsigned int repeat_key; | 953 | unsigned int repeat_key; |
| 954 | struct timer_list timer; | 954 | struct timer_list timer; |
| 955 | 955 | ||
| 956 | struct pt_regs *regs; | ||
| 957 | int state; | 956 | int state; |
| 958 | 957 | ||
| 959 | int sync; | 958 | int sync; |
| @@ -1149,15 +1148,9 @@ static inline void input_report_switch(struct input_dev *dev, unsigned int code, | |||
| 1149 | input_event(dev, EV_SW, code, !!value); | 1148 | input_event(dev, EV_SW, code, !!value); |
| 1150 | } | 1149 | } |
| 1151 | 1150 | ||
| 1152 | static inline void input_regs(struct input_dev *dev, struct pt_regs *regs) | ||
| 1153 | { | ||
| 1154 | dev->regs = regs; | ||
| 1155 | } | ||
| 1156 | |||
| 1157 | static inline void input_sync(struct input_dev *dev) | 1151 | static inline void input_sync(struct input_dev *dev) |
| 1158 | { | 1152 | { |
| 1159 | input_event(dev, EV_SYN, SYN_REPORT, 0); | 1153 | input_event(dev, EV_SYN, SYN_REPORT, 0); |
| 1160 | dev->regs = NULL; | ||
| 1161 | } | 1154 | } |
| 1162 | 1155 | ||
| 1163 | static inline void input_set_abs_params(struct input_dev *dev, int axis, int min, int max, int fuzz, int flat) | 1156 | static inline void input_set_abs_params(struct input_dev *dev, int axis, int min, int max, int fuzz, int flat) |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 1f97e3d92639..5b83e7b59621 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
| @@ -64,8 +64,10 @@ | |||
| 64 | #define SA_TRIGGER_RISING IRQF_TRIGGER_RISING | 64 | #define SA_TRIGGER_RISING IRQF_TRIGGER_RISING |
| 65 | #define SA_TRIGGER_MASK IRQF_TRIGGER_MASK | 65 | #define SA_TRIGGER_MASK IRQF_TRIGGER_MASK |
| 66 | 66 | ||
| 67 | typedef irqreturn_t (*irq_handler_t)(int, void *); | ||
| 68 | |||
| 67 | struct irqaction { | 69 | struct irqaction { |
| 68 | irqreturn_t (*handler)(int, void *, struct pt_regs *); | 70 | irq_handler_t handler; |
| 69 | unsigned long flags; | 71 | unsigned long flags; |
| 70 | cpumask_t mask; | 72 | cpumask_t mask; |
| 71 | const char *name; | 73 | const char *name; |
| @@ -75,9 +77,8 @@ struct irqaction { | |||
| 75 | struct proc_dir_entry *dir; | 77 | struct proc_dir_entry *dir; |
| 76 | }; | 78 | }; |
| 77 | 79 | ||
| 78 | extern irqreturn_t no_action(int cpl, void *dev_id, struct pt_regs *regs); | 80 | extern irqreturn_t no_action(int cpl, void *dev_id); |
| 79 | extern int request_irq(unsigned int, | 81 | extern int request_irq(unsigned int, irq_handler_t handler, |
| 80 | irqreturn_t (*handler)(int, void *, struct pt_regs *), | ||
| 81 | unsigned long, const char *, void *); | 82 | unsigned long, const char *, void *); |
| 82 | extern void free_irq(unsigned int, void *); | 83 | extern void free_irq(unsigned int, void *); |
| 83 | 84 | ||
diff --git a/include/linux/io.h b/include/linux/io.h index aa3f5af670b5..81877ea39309 100644 --- a/include/linux/io.h +++ b/include/linux/io.h | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #ifndef _LINUX_IO_H | 18 | #ifndef _LINUX_IO_H |
| 19 | #define _LINUX_IO_H | 19 | #define _LINUX_IO_H |
| 20 | 20 | ||
| 21 | #include <linux/types.h> | ||
| 21 | #include <asm/io.h> | 22 | #include <asm/io.h> |
| 22 | #include <asm/page.h> | 23 | #include <asm/page.h> |
| 23 | 24 | ||
| @@ -27,4 +28,31 @@ void __iowrite64_copy(void __iomem *to, const void *from, size_t count); | |||
| 27 | int ioremap_page_range(unsigned long addr, unsigned long end, | 28 | int ioremap_page_range(unsigned long addr, unsigned long end, |
| 28 | unsigned long phys_addr, pgprot_t prot); | 29 | unsigned long phys_addr, pgprot_t prot); |
| 29 | 30 | ||
| 31 | /** | ||
| 32 | * check_signature - find BIOS signatures | ||
| 33 | * @io_addr: mmio address to check | ||
| 34 | * @signature: signature block | ||
| 35 | * @length: length of signature | ||
| 36 | * | ||
| 37 | * Perform a signature comparison with the mmio address io_addr. This | ||
| 38 | * address should have been obtained by ioremap. | ||
| 39 | * Returns 1 on a match. | ||
| 40 | */ | ||
| 41 | |||
| 42 | static inline int check_signature(const volatile void __iomem *io_addr, | ||
| 43 | const unsigned char *signature, int length) | ||
| 44 | { | ||
| 45 | int retval = 0; | ||
| 46 | do { | ||
| 47 | if (readb(io_addr) != *signature) | ||
| 48 | goto out; | ||
| 49 | io_addr++; | ||
| 50 | signature++; | ||
| 51 | length--; | ||
| 52 | } while (length); | ||
| 53 | retval = 1; | ||
| 54 | out: | ||
| 55 | return retval; | ||
| 56 | } | ||
| 57 | |||
| 30 | #endif /* _LINUX_IO_H */ | 58 | #endif /* _LINUX_IO_H */ |
diff --git a/include/linux/ioc3.h b/include/linux/ioc3.h index da7c09e4ede6..38b286e9a46c 100644 --- a/include/linux/ioc3.h +++ b/include/linux/ioc3.h | |||
| @@ -63,7 +63,7 @@ struct ioc3_submodule { | |||
| 63 | /* IRQ stuff */ | 63 | /* IRQ stuff */ |
| 64 | unsigned int irq_mask; /* IOC3 IRQ mask, leave clear for Ethernet */ | 64 | unsigned int irq_mask; /* IOC3 IRQ mask, leave clear for Ethernet */ |
| 65 | int reset_mask; /* non-zero if you want the ioc3.c module to reset interrupts */ | 65 | int reset_mask; /* non-zero if you want the ioc3.c module to reset interrupts */ |
| 66 | int (*intr) (struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int, struct pt_regs *); | 66 | int (*intr) (struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int); |
| 67 | /* private submodule data */ | 67 | /* private submodule data */ |
| 68 | void *data; /* assigned by submodule */ | 68 | void *data; /* assigned by submodule */ |
| 69 | }; | 69 | }; |
diff --git a/include/linux/ioc4.h b/include/linux/ioc4.h index de73a3289cc2..51e2b9fb6372 100644 --- a/include/linux/ioc4.h +++ b/include/linux/ioc4.h | |||
| @@ -157,7 +157,7 @@ struct ioc4_driver_data { | |||
| 157 | unsigned long idd_bar0; | 157 | unsigned long idd_bar0; |
| 158 | struct pci_dev *idd_pdev; | 158 | struct pci_dev *idd_pdev; |
| 159 | const struct pci_device_id *idd_pci_id; | 159 | const struct pci_device_id *idd_pci_id; |
| 160 | struct __iomem ioc4_misc_regs *idd_misc_regs; | 160 | struct ioc4_misc_regs __iomem *idd_misc_regs; |
| 161 | unsigned long count_period; | 161 | unsigned long count_period; |
| 162 | void *idd_serial_data; | 162 | void *idd_serial_data; |
| 163 | unsigned int idd_variant; | 163 | unsigned int idd_variant; |
diff --git a/include/linux/ip.h b/include/linux/ip.h index 6b25d36fc54c..ecee9bb27d0e 100644 --- a/include/linux/ip.h +++ b/include/linux/ip.h | |||
| @@ -80,6 +80,8 @@ | |||
| 80 | #define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ | 80 | #define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ |
| 81 | #define IPOPT_TS_PRESPEC 3 /* specified modules only */ | 81 | #define IPOPT_TS_PRESPEC 3 /* specified modules only */ |
| 82 | 82 | ||
| 83 | #define IPV4_BEET_PHMAXLEN 8 | ||
| 84 | |||
| 83 | struct iphdr { | 85 | struct iphdr { |
| 84 | #if defined(__LITTLE_ENDIAN_BITFIELD) | 86 | #if defined(__LITTLE_ENDIAN_BITFIELD) |
| 85 | __u8 ihl:4, | 87 | __u8 ihl:4, |
| @@ -123,4 +125,11 @@ struct ip_comp_hdr { | |||
| 123 | __be16 cpi; | 125 | __be16 cpi; |
| 124 | }; | 126 | }; |
| 125 | 127 | ||
| 128 | struct ip_beet_phdr { | ||
| 129 | __u8 nexthdr; | ||
| 130 | __u8 hdrlen; | ||
| 131 | __u8 padlen; | ||
| 132 | __u8 reserved; | ||
| 133 | }; | ||
| 134 | |||
| 126 | #endif /* _LINUX_IP_H */ | 135 | #endif /* _LINUX_IP_H */ |
diff --git a/include/linux/ipc.h b/include/linux/ipc.h index d9e2b3f36c35..636094c29b16 100644 --- a/include/linux/ipc.h +++ b/include/linux/ipc.h | |||
| @@ -2,7 +2,6 @@ | |||
| 2 | #define _LINUX_IPC_H | 2 | #define _LINUX_IPC_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | #include <linux/kref.h> | ||
| 6 | 5 | ||
| 7 | #define IPC_PRIVATE ((__kernel_key_t) 0) | 6 | #define IPC_PRIVATE ((__kernel_key_t) 0) |
| 8 | 7 | ||
| @@ -52,6 +51,8 @@ struct ipc_perm | |||
| 52 | 51 | ||
| 53 | #ifdef __KERNEL__ | 52 | #ifdef __KERNEL__ |
| 54 | 53 | ||
| 54 | #include <linux/kref.h> | ||
| 55 | |||
| 55 | #define IPCMNI 32768 /* <= MAX_INT limit for ipc arrays (including sysctl changes) */ | 56 | #define IPCMNI 32768 /* <= MAX_INT limit for ipc arrays (including sysctl changes) */ |
| 56 | 57 | ||
| 57 | /* used by in-kernel data structures */ | 58 | /* used by in-kernel data structures */ |
diff --git a/include/linux/ipsec.h b/include/linux/ipsec.h index d3c527616b5e..d17a6302a0e9 100644 --- a/include/linux/ipsec.h +++ b/include/linux/ipsec.h | |||
| @@ -12,7 +12,8 @@ | |||
| 12 | enum { | 12 | enum { |
| 13 | IPSEC_MODE_ANY = 0, /* We do not support this for SA */ | 13 | IPSEC_MODE_ANY = 0, /* We do not support this for SA */ |
| 14 | IPSEC_MODE_TRANSPORT = 1, | 14 | IPSEC_MODE_TRANSPORT = 1, |
| 15 | IPSEC_MODE_TUNNEL = 2 | 15 | IPSEC_MODE_TUNNEL = 2, |
| 16 | IPSEC_MODE_BEET = 3 | ||
| 16 | }; | 17 | }; |
| 17 | 18 | ||
| 18 | enum { | 19 | enum { |
diff --git a/include/linux/irq.h b/include/linux/irq.h index 48d3cb3b6a47..52fc4052a0ae 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
| @@ -21,6 +21,12 @@ | |||
| 21 | 21 | ||
| 22 | #include <asm/irq.h> | 22 | #include <asm/irq.h> |
| 23 | #include <asm/ptrace.h> | 23 | #include <asm/ptrace.h> |
| 24 | #include <asm/irq_regs.h> | ||
| 25 | |||
| 26 | struct irq_desc; | ||
| 27 | typedef void fastcall (*irq_flow_handler_t)(unsigned int irq, | ||
| 28 | struct irq_desc *desc); | ||
| 29 | |||
| 24 | 30 | ||
| 25 | /* | 31 | /* |
| 26 | * IRQ line status. | 32 | * IRQ line status. |
| @@ -59,6 +65,7 @@ | |||
| 59 | #define IRQ_NOAUTOEN 0x08000000 /* IRQ will not be enabled on request irq */ | 65 | #define IRQ_NOAUTOEN 0x08000000 /* IRQ will not be enabled on request irq */ |
| 60 | #define IRQ_DELAYED_DISABLE 0x10000000 /* IRQ disable (masking) happens delayed. */ | 66 | #define IRQ_DELAYED_DISABLE 0x10000000 /* IRQ disable (masking) happens delayed. */ |
| 61 | #define IRQ_WAKEUP 0x20000000 /* IRQ triggers system wakeup */ | 67 | #define IRQ_WAKEUP 0x20000000 /* IRQ triggers system wakeup */ |
| 68 | #define IRQ_MOVE_PENDING 0x40000000 /* need to re-target IRQ destination */ | ||
| 62 | 69 | ||
| 63 | struct proc_dir_entry; | 70 | struct proc_dir_entry; |
| 64 | 71 | ||
| @@ -132,16 +139,14 @@ struct irq_chip { | |||
| 132 | * @affinity: IRQ affinity on SMP | 139 | * @affinity: IRQ affinity on SMP |
| 133 | * @cpu: cpu index useful for balancing | 140 | * @cpu: cpu index useful for balancing |
| 134 | * @pending_mask: pending rebalanced interrupts | 141 | * @pending_mask: pending rebalanced interrupts |
| 135 | * @move_irq: need to re-target IRQ destination | ||
| 136 | * @dir: /proc/irq/ procfs entry | 142 | * @dir: /proc/irq/ procfs entry |
| 137 | * @affinity_entry: /proc/irq/smp_affinity procfs entry on SMP | 143 | * @affinity_entry: /proc/irq/smp_affinity procfs entry on SMP |
| 144 | * @name: flow handler name for /proc/interrupts output | ||
| 138 | * | 145 | * |
| 139 | * Pad this out to 32 bytes for cache and indexing reasons. | 146 | * Pad this out to 32 bytes for cache and indexing reasons. |
| 140 | */ | 147 | */ |
| 141 | struct irq_desc { | 148 | struct irq_desc { |
| 142 | void fastcall (*handle_irq)(unsigned int irq, | 149 | irq_flow_handler_t handle_irq; |
| 143 | struct irq_desc *desc, | ||
| 144 | struct pt_regs *regs); | ||
| 145 | struct irq_chip *chip; | 150 | struct irq_chip *chip; |
| 146 | void *handler_data; | 151 | void *handler_data; |
| 147 | void *chip_data; | 152 | void *chip_data; |
| @@ -159,11 +164,11 @@ struct irq_desc { | |||
| 159 | #endif | 164 | #endif |
| 160 | #if defined(CONFIG_GENERIC_PENDING_IRQ) || defined(CONFIG_IRQBALANCE) | 165 | #if defined(CONFIG_GENERIC_PENDING_IRQ) || defined(CONFIG_IRQBALANCE) |
| 161 | cpumask_t pending_mask; | 166 | cpumask_t pending_mask; |
| 162 | unsigned int move_irq; /* need to re-target IRQ dest */ | ||
| 163 | #endif | 167 | #endif |
| 164 | #ifdef CONFIG_PROC_FS | 168 | #ifdef CONFIG_PROC_FS |
| 165 | struct proc_dir_entry *dir; | 169 | struct proc_dir_entry *dir; |
| 166 | #endif | 170 | #endif |
| 171 | const char *name; | ||
| 167 | } ____cacheline_aligned; | 172 | } ____cacheline_aligned; |
| 168 | 173 | ||
| 169 | extern struct irq_desc irq_desc[NR_IRQS]; | 174 | extern struct irq_desc irq_desc[NR_IRQS]; |
| @@ -206,36 +211,7 @@ static inline void set_native_irq_info(int irq, cpumask_t mask) | |||
| 206 | 211 | ||
| 207 | void set_pending_irq(unsigned int irq, cpumask_t mask); | 212 | void set_pending_irq(unsigned int irq, cpumask_t mask); |
| 208 | void move_native_irq(int irq); | 213 | void move_native_irq(int irq); |
| 209 | 214 | void move_masked_irq(int irq); | |
| 210 | #ifdef CONFIG_PCI_MSI | ||
| 211 | /* | ||
| 212 | * Wonder why these are dummies? | ||
| 213 | * For e.g the set_ioapic_affinity_vector() calls the set_ioapic_affinity_irq() | ||
| 214 | * counter part after translating the vector to irq info. We need to perform | ||
| 215 | * this operation on the real irq, when we dont use vector, i.e when | ||
| 216 | * pci_use_vector() is false. | ||
| 217 | */ | ||
| 218 | static inline void move_irq(int irq) | ||
| 219 | { | ||
| 220 | } | ||
| 221 | |||
| 222 | static inline void set_irq_info(int irq, cpumask_t mask) | ||
| 223 | { | ||
| 224 | } | ||
| 225 | |||
| 226 | #else /* CONFIG_PCI_MSI */ | ||
| 227 | |||
| 228 | static inline void move_irq(int irq) | ||
| 229 | { | ||
| 230 | move_native_irq(irq); | ||
| 231 | } | ||
| 232 | |||
| 233 | static inline void set_irq_info(int irq, cpumask_t mask) | ||
| 234 | { | ||
| 235 | set_native_irq_info(irq, mask); | ||
| 236 | } | ||
| 237 | |||
| 238 | #endif /* CONFIG_PCI_MSI */ | ||
| 239 | 215 | ||
| 240 | #else /* CONFIG_GENERIC_PENDING_IRQ || CONFIG_IRQBALANCE */ | 216 | #else /* CONFIG_GENERIC_PENDING_IRQ || CONFIG_IRQBALANCE */ |
| 241 | 217 | ||
| @@ -247,21 +223,20 @@ static inline void move_native_irq(int irq) | |||
| 247 | { | 223 | { |
| 248 | } | 224 | } |
| 249 | 225 | ||
| 250 | static inline void set_pending_irq(unsigned int irq, cpumask_t mask) | 226 | static inline void move_masked_irq(int irq) |
| 251 | { | 227 | { |
| 252 | } | 228 | } |
| 253 | 229 | ||
| 254 | static inline void set_irq_info(int irq, cpumask_t mask) | 230 | static inline void set_pending_irq(unsigned int irq, cpumask_t mask) |
| 255 | { | 231 | { |
| 256 | set_native_irq_info(irq, mask); | ||
| 257 | } | 232 | } |
| 258 | 233 | ||
| 259 | #endif /* CONFIG_GENERIC_PENDING_IRQ */ | 234 | #endif /* CONFIG_GENERIC_PENDING_IRQ */ |
| 260 | 235 | ||
| 261 | #else /* CONFIG_SMP */ | 236 | #else /* CONFIG_SMP */ |
| 262 | 237 | ||
| 263 | #define move_irq(x) | ||
| 264 | #define move_native_irq(x) | 238 | #define move_native_irq(x) |
| 239 | #define move_masked_irq(x) | ||
| 265 | 240 | ||
| 266 | #endif /* CONFIG_SMP */ | 241 | #endif /* CONFIG_SMP */ |
| 267 | 242 | ||
| @@ -285,43 +260,25 @@ static inline int select_smp_affinity(unsigned int irq) | |||
| 285 | extern int no_irq_affinity; | 260 | extern int no_irq_affinity; |
| 286 | 261 | ||
| 287 | /* Handle irq action chains: */ | 262 | /* Handle irq action chains: */ |
| 288 | extern int handle_IRQ_event(unsigned int irq, struct pt_regs *regs, | 263 | extern int handle_IRQ_event(unsigned int irq, struct irqaction *action); |
| 289 | struct irqaction *action); | ||
| 290 | 264 | ||
| 291 | /* | 265 | /* |
| 292 | * Built-in IRQ handlers for various IRQ types, | 266 | * Built-in IRQ handlers for various IRQ types, |
| 293 | * callable via desc->chip->handle_irq() | 267 | * callable via desc->chip->handle_irq() |
| 294 | */ | 268 | */ |
| 295 | extern void fastcall | 269 | extern void fastcall handle_level_irq(unsigned int irq, struct irq_desc *desc); |
| 296 | handle_level_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs); | 270 | extern void fastcall handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc); |
| 297 | extern void fastcall | 271 | extern void fastcall handle_edge_irq(unsigned int irq, struct irq_desc *desc); |
| 298 | handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc, | 272 | extern void fastcall handle_simple_irq(unsigned int irq, struct irq_desc *desc); |
| 299 | struct pt_regs *regs); | 273 | extern void fastcall handle_percpu_irq(unsigned int irq, struct irq_desc *desc); |
| 300 | extern void fastcall | 274 | extern void fastcall handle_bad_irq(unsigned int irq, struct irq_desc *desc); |
| 301 | handle_edge_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs); | ||
| 302 | extern void fastcall | ||
| 303 | handle_simple_irq(unsigned int irq, struct irq_desc *desc, | ||
| 304 | struct pt_regs *regs); | ||
| 305 | extern void fastcall | ||
| 306 | handle_percpu_irq(unsigned int irq, struct irq_desc *desc, | ||
| 307 | struct pt_regs *regs); | ||
| 308 | extern void fastcall | ||
| 309 | handle_bad_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs); | ||
| 310 | |||
| 311 | /* | ||
| 312 | * Get a descriptive string for the highlevel handler, for | ||
| 313 | * /proc/interrupts output: | ||
| 314 | */ | ||
| 315 | extern const char * | ||
| 316 | handle_irq_name(void fastcall (*handle)(unsigned int, struct irq_desc *, | ||
| 317 | struct pt_regs *)); | ||
| 318 | 275 | ||
| 319 | /* | 276 | /* |
| 320 | * Monolithic do_IRQ implementation. | 277 | * Monolithic do_IRQ implementation. |
| 321 | * (is an explicit fastcall, because i386 4KSTACKS calls it from assembly) | 278 | * (is an explicit fastcall, because i386 4KSTACKS calls it from assembly) |
| 322 | */ | 279 | */ |
| 323 | #ifndef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ | 280 | #ifndef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ |
| 324 | extern fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs); | 281 | extern fastcall unsigned int __do_IRQ(unsigned int irq); |
| 325 | #endif | 282 | #endif |
| 326 | 283 | ||
| 327 | /* | 284 | /* |
| @@ -330,23 +287,23 @@ extern fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs); | |||
| 330 | * irqchip-style controller then we call the ->handle_irq() handler, | 287 | * irqchip-style controller then we call the ->handle_irq() handler, |
| 331 | * and it calls __do_IRQ() if it's attached to an irqtype-style controller. | 288 | * and it calls __do_IRQ() if it's attached to an irqtype-style controller. |
| 332 | */ | 289 | */ |
| 333 | static inline void generic_handle_irq(unsigned int irq, struct pt_regs *regs) | 290 | static inline void generic_handle_irq(unsigned int irq) |
| 334 | { | 291 | { |
| 335 | struct irq_desc *desc = irq_desc + irq; | 292 | struct irq_desc *desc = irq_desc + irq; |
| 336 | 293 | ||
| 337 | #ifdef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ | 294 | #ifdef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ |
| 338 | desc->handle_irq(irq, desc, regs); | 295 | desc->handle_irq(irq, desc); |
| 339 | #else | 296 | #else |
| 340 | if (likely(desc->handle_irq)) | 297 | if (likely(desc->handle_irq)) |
| 341 | desc->handle_irq(irq, desc, regs); | 298 | desc->handle_irq(irq, desc); |
| 342 | else | 299 | else |
| 343 | __do_IRQ(irq, regs); | 300 | __do_IRQ(irq); |
| 344 | #endif | 301 | #endif |
| 345 | } | 302 | } |
| 346 | 303 | ||
| 347 | /* Handling of unhandled and spurious interrupts: */ | 304 | /* Handling of unhandled and spurious interrupts: */ |
| 348 | extern void note_interrupt(unsigned int irq, struct irq_desc *desc, | 305 | extern void note_interrupt(unsigned int irq, struct irq_desc *desc, |
| 349 | int action_ret, struct pt_regs *regs); | 306 | int action_ret); |
| 350 | 307 | ||
| 351 | /* Resending of interrupts :*/ | 308 | /* Resending of interrupts :*/ |
| 352 | void check_irq_resend(struct irq_desc *desc, unsigned int irq); | 309 | void check_irq_resend(struct irq_desc *desc, unsigned int irq); |
| @@ -366,24 +323,22 @@ extern struct irq_chip dummy_irq_chip; | |||
| 366 | 323 | ||
| 367 | extern void | 324 | extern void |
| 368 | set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip, | 325 | set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip, |
| 369 | void fastcall (*handle)(unsigned int, | 326 | irq_flow_handler_t handle); |
| 370 | struct irq_desc *, | ||
| 371 | struct pt_regs *)); | ||
| 372 | extern void | 327 | extern void |
| 373 | __set_irq_handler(unsigned int irq, | 328 | set_irq_chip_and_handler_name(unsigned int irq, struct irq_chip *chip, |
| 374 | void fastcall (*handle)(unsigned int, struct irq_desc *, | 329 | irq_flow_handler_t handle, const char *name); |
| 375 | struct pt_regs *), | 330 | |
| 376 | int is_chained); | 331 | extern void |
| 332 | __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained, | ||
| 333 | const char *name); | ||
| 377 | 334 | ||
| 378 | /* | 335 | /* |
| 379 | * Set a highlevel flow handler for a given IRQ: | 336 | * Set a highlevel flow handler for a given IRQ: |
| 380 | */ | 337 | */ |
| 381 | static inline void | 338 | static inline void |
| 382 | set_irq_handler(unsigned int irq, | 339 | set_irq_handler(unsigned int irq, irq_flow_handler_t handle) |
| 383 | void fastcall (*handle)(unsigned int, struct irq_desc *, | ||
| 384 | struct pt_regs *)) | ||
| 385 | { | 340 | { |
| 386 | __set_irq_handler(irq, handle, 0); | 341 | __set_irq_handler(irq, handle, 0, NULL); |
| 387 | } | 342 | } |
| 388 | 343 | ||
| 389 | /* | 344 | /* |
| @@ -393,14 +348,27 @@ set_irq_handler(unsigned int irq, | |||
| 393 | */ | 348 | */ |
| 394 | static inline void | 349 | static inline void |
| 395 | set_irq_chained_handler(unsigned int irq, | 350 | set_irq_chained_handler(unsigned int irq, |
| 396 | void fastcall (*handle)(unsigned int, struct irq_desc *, | 351 | irq_flow_handler_t handle) |
| 397 | struct pt_regs *)) | ||
| 398 | { | 352 | { |
| 399 | __set_irq_handler(irq, handle, 1); | 353 | __set_irq_handler(irq, handle, 1, NULL); |
| 400 | } | 354 | } |
| 401 | 355 | ||
| 402 | /* Set/get chip/data for an IRQ: */ | 356 | /* Handle dynamic irq creation and destruction */ |
| 357 | extern int create_irq(void); | ||
| 358 | extern void destroy_irq(unsigned int irq); | ||
| 359 | |||
| 360 | /* Test to see if a driver has successfully requested an irq */ | ||
| 361 | static inline int irq_has_action(unsigned int irq) | ||
| 362 | { | ||
| 363 | struct irq_desc *desc = irq_desc + irq; | ||
| 364 | return desc->action != NULL; | ||
| 365 | } | ||
| 403 | 366 | ||
| 367 | /* Dynamic irq helper functions */ | ||
| 368 | extern void dynamic_irq_init(unsigned int irq); | ||
| 369 | extern void dynamic_irq_cleanup(unsigned int irq); | ||
| 370 | |||
| 371 | /* Set/get chip/data for an IRQ: */ | ||
| 404 | extern int set_irq_chip(unsigned int irq, struct irq_chip *chip); | 372 | extern int set_irq_chip(unsigned int irq, struct irq_chip *chip); |
| 405 | extern int set_irq_data(unsigned int irq, void *data); | 373 | extern int set_irq_data(unsigned int irq, void *data); |
| 406 | extern int set_irq_chip_data(unsigned int irq, void *data); | 374 | extern int set_irq_chip_data(unsigned int irq, void *data); |
diff --git a/include/linux/istallion.h b/include/linux/istallion.h index 1f996621bc9c..b55e2a035605 100644 --- a/include/linux/istallion.h +++ b/include/linux/istallion.h | |||
| @@ -100,7 +100,7 @@ typedef struct stlibrd { | |||
| 100 | unsigned int iobase; | 100 | unsigned int iobase; |
| 101 | int iosize; | 101 | int iosize; |
| 102 | unsigned long memaddr; | 102 | unsigned long memaddr; |
| 103 | void *membase; | 103 | void __iomem *membase; |
| 104 | int memsize; | 104 | int memsize; |
| 105 | int pagesize; | 105 | int pagesize; |
| 106 | int hostoffset; | 106 | int hostoffset; |
| @@ -113,7 +113,7 @@ typedef struct stlibrd { | |||
| 113 | void (*enable)(struct stlibrd *brdp); | 113 | void (*enable)(struct stlibrd *brdp); |
| 114 | void (*reenable)(struct stlibrd *brdp); | 114 | void (*reenable)(struct stlibrd *brdp); |
| 115 | void (*disable)(struct stlibrd *brdp); | 115 | void (*disable)(struct stlibrd *brdp); |
| 116 | char *(*getmemptr)(struct stlibrd *brdp, unsigned long offset, int line); | 116 | void __iomem *(*getmemptr)(struct stlibrd *brdp, unsigned long offset, int line); |
| 117 | void (*intr)(struct stlibrd *brdp); | 117 | void (*intr)(struct stlibrd *brdp); |
| 118 | void (*reset)(struct stlibrd *brdp); | 118 | void (*reset)(struct stlibrd *brdp); |
| 119 | stliport_t *ports[STL_MAXPORTS]; | 119 | stliport_t *ports[STL_MAXPORTS]; |
diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h new file mode 100644 index 000000000000..ddb128795781 --- /dev/null +++ b/include/linux/jbd2.h | |||
| @@ -0,0 +1,1107 @@ | |||
| 1 | /* | ||
| 2 | * linux/include/linux/jbd2.h | ||
| 3 | * | ||
| 4 | * Written by Stephen C. Tweedie <sct@redhat.com> | ||
| 5 | * | ||
| 6 | * Copyright 1998-2000 Red Hat, Inc --- All Rights Reserved | ||
| 7 | * | ||
| 8 | * This file is part of the Linux kernel and is made available under | ||
| 9 | * the terms of the GNU General Public License, version 2, or at your | ||
| 10 | * option, any later version, incorporated herein by reference. | ||
| 11 | * | ||
| 12 | * Definitions for transaction data structures for the buffer cache | ||
| 13 | * filesystem journaling support. | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef _LINUX_JBD_H | ||
| 17 | #define _LINUX_JBD_H | ||
| 18 | |||
| 19 | /* Allow this file to be included directly into e2fsprogs */ | ||
| 20 | #ifndef __KERNEL__ | ||
| 21 | #include "jfs_compat.h" | ||
| 22 | #define JBD2_DEBUG | ||
| 23 | #define jfs_debug jbd_debug | ||
| 24 | #else | ||
| 25 | |||
| 26 | #include <linux/types.h> | ||
| 27 | #include <linux/buffer_head.h> | ||
| 28 | #include <linux/journal-head.h> | ||
| 29 | #include <linux/stddef.h> | ||
| 30 | #include <linux/bit_spinlock.h> | ||
| 31 | #include <linux/mutex.h> | ||
| 32 | #include <linux/timer.h> | ||
| 33 | |||
| 34 | #include <asm/semaphore.h> | ||
| 35 | #endif | ||
| 36 | |||
| 37 | #define journal_oom_retry 1 | ||
| 38 | |||
| 39 | /* | ||
| 40 | * Define JBD_PARANIOD_IOFAIL to cause a kernel BUG() if ext3 finds | ||
| 41 | * certain classes of error which can occur due to failed IOs. Under | ||
| 42 | * normal use we want ext3 to continue after such errors, because | ||
| 43 | * hardware _can_ fail, but for debugging purposes when running tests on | ||
| 44 | * known-good hardware we may want to trap these errors. | ||
| 45 | */ | ||
| 46 | #undef JBD_PARANOID_IOFAIL | ||
| 47 | |||
| 48 | /* | ||
| 49 | * The default maximum commit age, in seconds. | ||
| 50 | */ | ||
| 51 | #define JBD_DEFAULT_MAX_COMMIT_AGE 5 | ||
| 52 | |||
| 53 | #ifdef CONFIG_JBD_DEBUG | ||
| 54 | /* | ||
| 55 | * Define JBD_EXPENSIVE_CHECKING to enable more expensive internal | ||
| 56 | * consistency checks. By default we don't do this unless | ||
| 57 | * CONFIG_JBD_DEBUG is on. | ||
| 58 | */ | ||
| 59 | #define JBD_EXPENSIVE_CHECKING | ||
| 60 | extern int jbd2_journal_enable_debug; | ||
| 61 | |||
| 62 | #define jbd_debug(n, f, a...) \ | ||
| 63 | do { \ | ||
| 64 | if ((n) <= jbd2_journal_enable_debug) { \ | ||
| 65 | printk (KERN_DEBUG "(%s, %d): %s: ", \ | ||
| 66 | __FILE__, __LINE__, __FUNCTION__); \ | ||
| 67 | printk (f, ## a); \ | ||
| 68 | } \ | ||
| 69 | } while (0) | ||
| 70 | #else | ||
| 71 | #define jbd_debug(f, a...) /**/ | ||
| 72 | #endif | ||
| 73 | |||
| 74 | extern void * __jbd2_kmalloc (const char *where, size_t size, gfp_t flags, int retry); | ||
| 75 | extern void * jbd2_slab_alloc(size_t size, gfp_t flags); | ||
| 76 | extern void jbd2_slab_free(void *ptr, size_t size); | ||
| 77 | |||
| 78 | #define jbd_kmalloc(size, flags) \ | ||
| 79 | __jbd2_kmalloc(__FUNCTION__, (size), (flags), journal_oom_retry) | ||
| 80 | #define jbd_rep_kmalloc(size, flags) \ | ||
| 81 | __jbd2_kmalloc(__FUNCTION__, (size), (flags), 1) | ||
| 82 | |||
| 83 | #define JBD2_MIN_JOURNAL_BLOCKS 1024 | ||
| 84 | |||
| 85 | #ifdef __KERNEL__ | ||
| 86 | |||
| 87 | /** | ||
| 88 | * typedef handle_t - The handle_t type represents a single atomic update being performed by some process. | ||
| 89 | * | ||
| 90 | * All filesystem modifications made by the process go | ||
| 91 | * through this handle. Recursive operations (such as quota operations) | ||
| 92 | * are gathered into a single update. | ||
| 93 | * | ||
| 94 | * The buffer credits field is used to account for journaled buffers | ||
| 95 | * being modified by the running process. To ensure that there is | ||
| 96 | * enough log space for all outstanding operations, we need to limit the | ||
| 97 | * number of outstanding buffers possible at any time. When the | ||
| 98 | * operation completes, any buffer credits not used are credited back to | ||
| 99 | * the transaction, so that at all times we know how many buffers the | ||
| 100 | * outstanding updates on a transaction might possibly touch. | ||
| 101 | * | ||
| 102 | * This is an opaque datatype. | ||
| 103 | **/ | ||
| 104 | typedef struct handle_s handle_t; /* Atomic operation type */ | ||
| 105 | |||
| 106 | |||
| 107 | /** | ||
| 108 | * typedef journal_t - The journal_t maintains all of the journaling state information for a single filesystem. | ||
| 109 | * | ||
| 110 | * journal_t is linked to from the fs superblock structure. | ||
| 111 | * | ||
| 112 | * We use the journal_t to keep track of all outstanding transaction | ||
| 113 | * activity on the filesystem, and to manage the state of the log | ||
| 114 | * writing process. | ||
| 115 | * | ||
| 116 | * This is an opaque datatype. | ||
| 117 | **/ | ||
| 118 | typedef struct journal_s journal_t; /* Journal control structure */ | ||
| 119 | #endif | ||
| 120 | |||
| 121 | /* | ||
| 122 | * Internal structures used by the logging mechanism: | ||
| 123 | */ | ||
| 124 | |||
| 125 | #define JBD2_MAGIC_NUMBER 0xc03b3998U /* The first 4 bytes of /dev/random! */ | ||
| 126 | |||
| 127 | /* | ||
| 128 | * On-disk structures | ||
| 129 | */ | ||
| 130 | |||
| 131 | /* | ||
| 132 | * Descriptor block types: | ||
| 133 | */ | ||
| 134 | |||
| 135 | #define JBD2_DESCRIPTOR_BLOCK 1 | ||
| 136 | #define JBD2_COMMIT_BLOCK 2 | ||
| 137 | #define JBD2_SUPERBLOCK_V1 3 | ||
| 138 | #define JBD2_SUPERBLOCK_V2 4 | ||
| 139 | #define JBD2_REVOKE_BLOCK 5 | ||
| 140 | |||
| 141 | /* | ||
| 142 | * Standard header for all descriptor blocks: | ||
| 143 | */ | ||
| 144 | typedef struct journal_header_s | ||
| 145 | { | ||
| 146 | __be32 h_magic; | ||
| 147 | __be32 h_blocktype; | ||
| 148 | __be32 h_sequence; | ||
| 149 | } journal_header_t; | ||
| 150 | |||
| 151 | |||
| 152 | /* | ||
| 153 | * The block tag: used to describe a single buffer in the journal. | ||
| 154 | * t_blocknr_high is only used if INCOMPAT_64BIT is set, so this | ||
| 155 | * raw struct shouldn't be used for pointer math or sizeof() - use | ||
| 156 | * journal_tag_bytes(journal) instead to compute this. | ||
| 157 | */ | ||
| 158 | typedef struct journal_block_tag_s | ||
| 159 | { | ||
| 160 | __be32 t_blocknr; /* The on-disk block number */ | ||
| 161 | __be32 t_flags; /* See below */ | ||
| 162 | __be32 t_blocknr_high; /* most-significant high 32bits. */ | ||
| 163 | } journal_block_tag_t; | ||
| 164 | |||
| 165 | #define JBD_TAG_SIZE32 (offsetof(journal_block_tag_t, t_blocknr_high)) | ||
| 166 | #define JBD_TAG_SIZE64 (sizeof(journal_block_tag_t)) | ||
| 167 | |||
| 168 | /* | ||
| 169 | * The revoke descriptor: used on disk to describe a series of blocks to | ||
| 170 | * be revoked from the log | ||
| 171 | */ | ||
| 172 | typedef struct jbd2_journal_revoke_header_s | ||
| 173 | { | ||
| 174 | journal_header_t r_header; | ||
| 175 | __be32 r_count; /* Count of bytes used in the block */ | ||
| 176 | } jbd2_journal_revoke_header_t; | ||
| 177 | |||
| 178 | |||
| 179 | /* Definitions for the journal tag flags word: */ | ||
| 180 | #define JBD2_FLAG_ESCAPE 1 /* on-disk block is escaped */ | ||
| 181 | #define JBD2_FLAG_SAME_UUID 2 /* block has same uuid as previous */ | ||
| 182 | #define JBD2_FLAG_DELETED 4 /* block deleted by this transaction */ | ||
| 183 | #define JBD2_FLAG_LAST_TAG 8 /* last tag in this descriptor block */ | ||
| 184 | |||
| 185 | |||
| 186 | /* | ||
| 187 | * The journal superblock. All fields are in big-endian byte order. | ||
| 188 | */ | ||
| 189 | typedef struct journal_superblock_s | ||
| 190 | { | ||
| 191 | /* 0x0000 */ | ||
| 192 | journal_header_t s_header; | ||
| 193 | |||
| 194 | /* 0x000C */ | ||
| 195 | /* Static information describing the journal */ | ||
| 196 | __be32 s_blocksize; /* journal device blocksize */ | ||
| 197 | __be32 s_maxlen; /* total blocks in journal file */ | ||
| 198 | __be32 s_first; /* first block of log information */ | ||
| 199 | |||
| 200 | /* 0x0018 */ | ||
| 201 | /* Dynamic information describing the current state of the log */ | ||
| 202 | __be32 s_sequence; /* first commit ID expected in log */ | ||
| 203 | __be32 s_start; /* blocknr of start of log */ | ||
| 204 | |||
| 205 | /* 0x0020 */ | ||
| 206 | /* Error value, as set by jbd2_journal_abort(). */ | ||
| 207 | __be32 s_errno; | ||
| 208 | |||
| 209 | /* 0x0024 */ | ||
| 210 | /* Remaining fields are only valid in a version-2 superblock */ | ||
| 211 | __be32 s_feature_compat; /* compatible feature set */ | ||
| 212 | __be32 s_feature_incompat; /* incompatible feature set */ | ||
| 213 | __be32 s_feature_ro_compat; /* readonly-compatible feature set */ | ||
| 214 | /* 0x0030 */ | ||
| 215 | __u8 s_uuid[16]; /* 128-bit uuid for journal */ | ||
| 216 | |||
| 217 | /* 0x0040 */ | ||
| 218 | __be32 s_nr_users; /* Nr of filesystems sharing log */ | ||
| 219 | |||
| 220 | __be32 s_dynsuper; /* Blocknr of dynamic superblock copy*/ | ||
| 221 | |||
| 222 | /* 0x0048 */ | ||
| 223 | __be32 s_max_transaction; /* Limit of journal blocks per trans.*/ | ||
| 224 | __be32 s_max_trans_data; /* Limit of data blocks per trans. */ | ||
| 225 | |||
| 226 | /* 0x0050 */ | ||
| 227 | __u32 s_padding[44]; | ||
| 228 | |||
| 229 | /* 0x0100 */ | ||
| 230 | __u8 s_users[16*48]; /* ids of all fs'es sharing the log */ | ||
| 231 | /* 0x0400 */ | ||
| 232 | } journal_superblock_t; | ||
| 233 | |||
| 234 | #define JBD2_HAS_COMPAT_FEATURE(j,mask) \ | ||
| 235 | ((j)->j_format_version >= 2 && \ | ||
| 236 | ((j)->j_superblock->s_feature_compat & cpu_to_be32((mask)))) | ||
| 237 | #define JBD2_HAS_RO_COMPAT_FEATURE(j,mask) \ | ||
| 238 | ((j)->j_format_version >= 2 && \ | ||
| 239 | ((j)->j_superblock->s_feature_ro_compat & cpu_to_be32((mask)))) | ||
| 240 | #define JBD2_HAS_INCOMPAT_FEATURE(j,mask) \ | ||
| 241 | ((j)->j_format_version >= 2 && \ | ||
| 242 | ((j)->j_superblock->s_feature_incompat & cpu_to_be32((mask)))) | ||
| 243 | |||
| 244 | #define JBD2_FEATURE_INCOMPAT_REVOKE 0x00000001 | ||
| 245 | #define JBD2_FEATURE_INCOMPAT_64BIT 0x00000002 | ||
| 246 | |||
| 247 | /* Features known to this kernel version: */ | ||
| 248 | #define JBD2_KNOWN_COMPAT_FEATURES 0 | ||
| 249 | #define JBD2_KNOWN_ROCOMPAT_FEATURES 0 | ||
| 250 | #define JBD2_KNOWN_INCOMPAT_FEATURES (JBD2_FEATURE_INCOMPAT_REVOKE | \ | ||
| 251 | JBD2_FEATURE_INCOMPAT_64BIT) | ||
| 252 | |||
| 253 | #ifdef __KERNEL__ | ||
| 254 | |||
| 255 | #include <linux/fs.h> | ||
| 256 | #include <linux/sched.h> | ||
| 257 | |||
| 258 | #define JBD_ASSERTIONS | ||
| 259 | #ifdef JBD_ASSERTIONS | ||
| 260 | #define J_ASSERT(assert) \ | ||
| 261 | do { \ | ||
| 262 | if (!(assert)) { \ | ||
| 263 | printk (KERN_EMERG \ | ||
| 264 | "Assertion failure in %s() at %s:%d: \"%s\"\n", \ | ||
| 265 | __FUNCTION__, __FILE__, __LINE__, # assert); \ | ||
| 266 | BUG(); \ | ||
| 267 | } \ | ||
| 268 | } while (0) | ||
| 269 | |||
| 270 | #if defined(CONFIG_BUFFER_DEBUG) | ||
| 271 | void buffer_assertion_failure(struct buffer_head *bh); | ||
| 272 | #define J_ASSERT_BH(bh, expr) \ | ||
| 273 | do { \ | ||
| 274 | if (!(expr)) \ | ||
| 275 | buffer_assertion_failure(bh); \ | ||
| 276 | J_ASSERT(expr); \ | ||
| 277 | } while (0) | ||
| 278 | #define J_ASSERT_JH(jh, expr) J_ASSERT_BH(jh2bh(jh), expr) | ||
| 279 | #else | ||
| 280 | #define J_ASSERT_BH(bh, expr) J_ASSERT(expr) | ||
| 281 | #define J_ASSERT_JH(jh, expr) J_ASSERT(expr) | ||
| 282 | #endif | ||
| 283 | |||
| 284 | #else | ||
| 285 | #define J_ASSERT(assert) do { } while (0) | ||
| 286 | #endif /* JBD_ASSERTIONS */ | ||
| 287 | |||
| 288 | #if defined(JBD_PARANOID_IOFAIL) | ||
| 289 | #define J_EXPECT(expr, why...) J_ASSERT(expr) | ||
| 290 | #define J_EXPECT_BH(bh, expr, why...) J_ASSERT_BH(bh, expr) | ||
| 291 | #define J_EXPECT_JH(jh, expr, why...) J_ASSERT_JH(jh, expr) | ||
| 292 | #else | ||
| 293 | #define __journal_expect(expr, why...) \ | ||
| 294 | ({ \ | ||
| 295 | int val = (expr); \ | ||
| 296 | if (!val) { \ | ||
| 297 | printk(KERN_ERR \ | ||
| 298 | "EXT3-fs unexpected failure: %s;\n",# expr); \ | ||
| 299 | printk(KERN_ERR why "\n"); \ | ||
| 300 | } \ | ||
| 301 | val; \ | ||
| 302 | }) | ||
| 303 | #define J_EXPECT(expr, why...) __journal_expect(expr, ## why) | ||
| 304 | #define J_EXPECT_BH(bh, expr, why...) __journal_expect(expr, ## why) | ||
| 305 | #define J_EXPECT_JH(jh, expr, why...) __journal_expect(expr, ## why) | ||
| 306 | #endif | ||
| 307 | |||
| 308 | enum jbd_state_bits { | ||
| 309 | BH_JBD /* Has an attached ext3 journal_head */ | ||
| 310 | = BH_PrivateStart, | ||
| 311 | BH_JWrite, /* Being written to log (@@@ DEBUGGING) */ | ||
| 312 | BH_Freed, /* Has been freed (truncated) */ | ||
| 313 | BH_Revoked, /* Has been revoked from the log */ | ||
| 314 | BH_RevokeValid, /* Revoked flag is valid */ | ||
| 315 | BH_JBDDirty, /* Is dirty but journaled */ | ||
| 316 | BH_State, /* Pins most journal_head state */ | ||
| 317 | BH_JournalHead, /* Pins bh->b_private and jh->b_bh */ | ||
| 318 | BH_Unshadow, /* Dummy bit, for BJ_Shadow wakeup filtering */ | ||
| 319 | }; | ||
| 320 | |||
| 321 | BUFFER_FNS(JBD, jbd) | ||
| 322 | BUFFER_FNS(JWrite, jwrite) | ||
| 323 | BUFFER_FNS(JBDDirty, jbddirty) | ||
| 324 | TAS_BUFFER_FNS(JBDDirty, jbddirty) | ||
| 325 | BUFFER_FNS(Revoked, revoked) | ||
| 326 | TAS_BUFFER_FNS(Revoked, revoked) | ||
| 327 | BUFFER_FNS(RevokeValid, revokevalid) | ||
| 328 | TAS_BUFFER_FNS(RevokeValid, revokevalid) | ||
| 329 | BUFFER_FNS(Freed, freed) | ||
| 330 | |||
| 331 | static inline struct buffer_head *jh2bh(struct journal_head *jh) | ||
| 332 | { | ||
| 333 | return jh->b_bh; | ||
| 334 | } | ||
| 335 | |||
| 336 | static inline struct journal_head *bh2jh(struct buffer_head *bh) | ||
| 337 | { | ||
| 338 | return bh->b_private; | ||
| 339 | } | ||
| 340 | |||
| 341 | static inline void jbd_lock_bh_state(struct buffer_head *bh) | ||
| 342 | { | ||
| 343 | bit_spin_lock(BH_State, &bh->b_state); | ||
| 344 | } | ||
| 345 | |||
| 346 | static inline int jbd_trylock_bh_state(struct buffer_head *bh) | ||
| 347 | { | ||
| 348 | return bit_spin_trylock(BH_State, &bh->b_state); | ||
| 349 | } | ||
| 350 | |||
| 351 | static inline int jbd_is_locked_bh_state(struct buffer_head *bh) | ||
| 352 | { | ||
| 353 | return bit_spin_is_locked(BH_State, &bh->b_state); | ||
| 354 | } | ||
| 355 | |||
| 356 | static inline void jbd_unlock_bh_state(struct buffer_head *bh) | ||
| 357 | { | ||
| 358 | bit_spin_unlock(BH_State, &bh->b_state); | ||
| 359 | } | ||
| 360 | |||
| 361 | static inline void jbd_lock_bh_journal_head(struct buffer_head *bh) | ||
| 362 | { | ||
| 363 | bit_spin_lock(BH_JournalHead, &bh->b_state); | ||
| 364 | } | ||
| 365 | |||
| 366 | static inline void jbd_unlock_bh_journal_head(struct buffer_head *bh) | ||
| 367 | { | ||
| 368 | bit_spin_unlock(BH_JournalHead, &bh->b_state); | ||
| 369 | } | ||
| 370 | |||
| 371 | struct jbd2_revoke_table_s; | ||
| 372 | |||
| 373 | /** | ||
| 374 | * struct handle_s - The handle_s type is the concrete type associated with | ||
| 375 | * handle_t. | ||
| 376 | * @h_transaction: Which compound transaction is this update a part of? | ||
| 377 | * @h_buffer_credits: Number of remaining buffers we are allowed to dirty. | ||
| 378 | * @h_ref: Reference count on this handle | ||
| 379 | * @h_err: Field for caller's use to track errors through large fs operations | ||
| 380 | * @h_sync: flag for sync-on-close | ||
| 381 | * @h_jdata: flag to force data journaling | ||
| 382 | * @h_aborted: flag indicating fatal error on handle | ||
| 383 | **/ | ||
| 384 | |||
| 385 | /* Docbook can't yet cope with the bit fields, but will leave the documentation | ||
| 386 | * in so it can be fixed later. | ||
| 387 | */ | ||
| 388 | |||
| 389 | struct handle_s | ||
| 390 | { | ||
| 391 | /* Which compound transaction is this update a part of? */ | ||
| 392 | transaction_t *h_transaction; | ||
| 393 | |||
| 394 | /* Number of remaining buffers we are allowed to dirty: */ | ||
| 395 | int h_buffer_credits; | ||
| 396 | |||
| 397 | /* Reference count on this handle */ | ||
| 398 | int h_ref; | ||
| 399 | |||
| 400 | /* Field for caller's use to track errors through large fs */ | ||
| 401 | /* operations */ | ||
| 402 | int h_err; | ||
| 403 | |||
| 404 | /* Flags [no locking] */ | ||
| 405 | unsigned int h_sync: 1; /* sync-on-close */ | ||
| 406 | unsigned int h_jdata: 1; /* force data journaling */ | ||
| 407 | unsigned int h_aborted: 1; /* fatal error on handle */ | ||
| 408 | }; | ||
| 409 | |||
| 410 | |||
| 411 | /* The transaction_t type is the guts of the journaling mechanism. It | ||
| 412 | * tracks a compound transaction through its various states: | ||
| 413 | * | ||
| 414 | * RUNNING: accepting new updates | ||
| 415 | * LOCKED: Updates still running but we don't accept new ones | ||
| 416 | * RUNDOWN: Updates are tidying up but have finished requesting | ||
| 417 | * new buffers to modify (state not used for now) | ||
| 418 | * FLUSH: All updates complete, but we are still writing to disk | ||
| 419 | * COMMIT: All data on disk, writing commit record | ||
| 420 | * FINISHED: We still have to keep the transaction for checkpointing. | ||
| 421 | * | ||
| 422 | * The transaction keeps track of all of the buffers modified by a | ||
| 423 | * running transaction, and all of the buffers committed but not yet | ||
| 424 | * flushed to home for finished transactions. | ||
| 425 | */ | ||
| 426 | |||
| 427 | /* | ||
| 428 | * Lock ranking: | ||
| 429 | * | ||
| 430 | * j_list_lock | ||
| 431 | * ->jbd_lock_bh_journal_head() (This is "innermost") | ||
| 432 | * | ||
| 433 | * j_state_lock | ||
| 434 | * ->jbd_lock_bh_state() | ||
| 435 | * | ||
| 436 | * jbd_lock_bh_state() | ||
| 437 | * ->j_list_lock | ||
| 438 | * | ||
| 439 | * j_state_lock | ||
| 440 | * ->t_handle_lock | ||
| 441 | * | ||
| 442 | * j_state_lock | ||
| 443 | * ->j_list_lock (journal_unmap_buffer) | ||
| 444 | * | ||
| 445 | */ | ||
| 446 | |||
| 447 | struct transaction_s | ||
| 448 | { | ||
| 449 | /* Pointer to the journal for this transaction. [no locking] */ | ||
| 450 | journal_t *t_journal; | ||
| 451 | |||
| 452 | /* Sequence number for this transaction [no locking] */ | ||
| 453 | tid_t t_tid; | ||
| 454 | |||
| 455 | /* | ||
| 456 | * Transaction's current state | ||
| 457 | * [no locking - only kjournald2 alters this] | ||
| 458 | * FIXME: needs barriers | ||
| 459 | * KLUDGE: [use j_state_lock] | ||
| 460 | */ | ||
| 461 | enum { | ||
| 462 | T_RUNNING, | ||
| 463 | T_LOCKED, | ||
| 464 | T_RUNDOWN, | ||
| 465 | T_FLUSH, | ||
| 466 | T_COMMIT, | ||
| 467 | T_FINISHED | ||
| 468 | } t_state; | ||
| 469 | |||
| 470 | /* | ||
| 471 | * Where in the log does this transaction's commit start? [no locking] | ||
| 472 | */ | ||
| 473 | unsigned long t_log_start; | ||
| 474 | |||
| 475 | /* Number of buffers on the t_buffers list [j_list_lock] */ | ||
| 476 | int t_nr_buffers; | ||
| 477 | |||
| 478 | /* | ||
| 479 | * Doubly-linked circular list of all buffers reserved but not yet | ||
| 480 | * modified by this transaction [j_list_lock] | ||
| 481 | */ | ||
| 482 | struct journal_head *t_reserved_list; | ||
| 483 | |||
| 484 | /* | ||
| 485 | * Doubly-linked circular list of all buffers under writeout during | ||
| 486 | * commit [j_list_lock] | ||
| 487 | */ | ||
| 488 | struct journal_head *t_locked_list; | ||
| 489 | |||
| 490 | /* | ||
| 491 | * Doubly-linked circular list of all metadata buffers owned by this | ||
| 492 | * transaction [j_list_lock] | ||
| 493 | */ | ||
| 494 | struct journal_head *t_buffers; | ||
| 495 | |||
| 496 | /* | ||
| 497 | * Doubly-linked circular list of all data buffers still to be | ||
| 498 | * flushed before this transaction can be committed [j_list_lock] | ||
| 499 | */ | ||
| 500 | struct journal_head *t_sync_datalist; | ||
| 501 | |||
| 502 | /* | ||
| 503 | * Doubly-linked circular list of all forget buffers (superseded | ||
| 504 | * buffers which we can un-checkpoint once this transaction commits) | ||
| 505 | * [j_list_lock] | ||
| 506 | */ | ||
| 507 | struct journal_head *t_forget; | ||
| 508 | |||
| 509 | /* | ||
| 510 | * Doubly-linked circular list of all buffers still to be flushed before | ||
| 511 | * this transaction can be checkpointed. [j_list_lock] | ||
| 512 | */ | ||
| 513 | struct journal_head *t_checkpoint_list; | ||
| 514 | |||
| 515 | /* | ||
| 516 | * Doubly-linked circular list of all buffers submitted for IO while | ||
| 517 | * checkpointing. [j_list_lock] | ||
| 518 | */ | ||
| 519 | struct journal_head *t_checkpoint_io_list; | ||
| 520 | |||
| 521 | /* | ||
| 522 | * Doubly-linked circular list of temporary buffers currently undergoing | ||
| 523 | * IO in the log [j_list_lock] | ||
| 524 | */ | ||
| 525 | struct journal_head *t_iobuf_list; | ||
| 526 | |||
| 527 | /* | ||
| 528 | * Doubly-linked circular list of metadata buffers being shadowed by log | ||
| 529 | * IO. The IO buffers on the iobuf list and the shadow buffers on this | ||
| 530 | * list match each other one for one at all times. [j_list_lock] | ||
| 531 | */ | ||
| 532 | struct journal_head *t_shadow_list; | ||
| 533 | |||
| 534 | /* | ||
| 535 | * Doubly-linked circular list of control buffers being written to the | ||
| 536 | * log. [j_list_lock] | ||
| 537 | */ | ||
| 538 | struct journal_head *t_log_list; | ||
| 539 | |||
| 540 | /* | ||
| 541 | * Protects info related to handles | ||
| 542 | */ | ||
| 543 | spinlock_t t_handle_lock; | ||
| 544 | |||
| 545 | /* | ||
| 546 | * Number of outstanding updates running on this transaction | ||
| 547 | * [t_handle_lock] | ||
| 548 | */ | ||
| 549 | int t_updates; | ||
| 550 | |||
| 551 | /* | ||
| 552 | * Number of buffers reserved for use by all handles in this transaction | ||
| 553 | * handle but not yet modified. [t_handle_lock] | ||
| 554 | */ | ||
| 555 | int t_outstanding_credits; | ||
| 556 | |||
| 557 | /* | ||
| 558 | * Forward and backward links for the circular list of all transactions | ||
| 559 | * awaiting checkpoint. [j_list_lock] | ||
| 560 | */ | ||
| 561 | transaction_t *t_cpnext, *t_cpprev; | ||
| 562 | |||
| 563 | /* | ||
| 564 | * When will the transaction expire (become due for commit), in jiffies? | ||
| 565 | * [no locking] | ||
| 566 | */ | ||
| 567 | unsigned long t_expires; | ||
| 568 | |||
| 569 | /* | ||
| 570 | * How many handles used this transaction? [t_handle_lock] | ||
| 571 | */ | ||
| 572 | int t_handle_count; | ||
| 573 | |||
| 574 | }; | ||
| 575 | |||
| 576 | /** | ||
| 577 | * struct journal_s - The journal_s type is the concrete type associated with | ||
| 578 | * journal_t. | ||
| 579 | * @j_flags: General journaling state flags | ||
| 580 | * @j_errno: Is there an outstanding uncleared error on the journal (from a | ||
| 581 | * prior abort)? | ||
| 582 | * @j_sb_buffer: First part of superblock buffer | ||
| 583 | * @j_superblock: Second part of superblock buffer | ||
| 584 | * @j_format_version: Version of the superblock format | ||
| 585 | * @j_state_lock: Protect the various scalars in the journal | ||
| 586 | * @j_barrier_count: Number of processes waiting to create a barrier lock | ||
| 587 | * @j_barrier: The barrier lock itself | ||
| 588 | * @j_running_transaction: The current running transaction.. | ||
| 589 | * @j_committing_transaction: the transaction we are pushing to disk | ||
| 590 | * @j_checkpoint_transactions: a linked circular list of all transactions | ||
| 591 | * waiting for checkpointing | ||
| 592 | * @j_wait_transaction_locked: Wait queue for waiting for a locked transaction | ||
| 593 | * to start committing, or for a barrier lock to be released | ||
| 594 | * @j_wait_logspace: Wait queue for waiting for checkpointing to complete | ||
| 595 | * @j_wait_done_commit: Wait queue for waiting for commit to complete | ||
| 596 | * @j_wait_checkpoint: Wait queue to trigger checkpointing | ||
| 597 | * @j_wait_commit: Wait queue to trigger commit | ||
| 598 | * @j_wait_updates: Wait queue to wait for updates to complete | ||
| 599 | * @j_checkpoint_mutex: Mutex for locking against concurrent checkpoints | ||
| 600 | * @j_head: Journal head - identifies the first unused block in the journal | ||
| 601 | * @j_tail: Journal tail - identifies the oldest still-used block in the | ||
| 602 | * journal. | ||
| 603 | * @j_free: Journal free - how many free blocks are there in the journal? | ||
| 604 | * @j_first: The block number of the first usable block | ||
| 605 | * @j_last: The block number one beyond the last usable block | ||
| 606 | * @j_dev: Device where we store the journal | ||
| 607 | * @j_blocksize: blocksize for the location where we store the journal. | ||
| 608 | * @j_blk_offset: starting block offset for into the device where we store the | ||
| 609 | * journal | ||
| 610 | * @j_fs_dev: Device which holds the client fs. For internal journal this will | ||
| 611 | * be equal to j_dev | ||
| 612 | * @j_maxlen: Total maximum capacity of the journal region on disk. | ||
| 613 | * @j_list_lock: Protects the buffer lists and internal buffer state. | ||
| 614 | * @j_inode: Optional inode where we store the journal. If present, all journal | ||
| 615 | * block numbers are mapped into this inode via bmap(). | ||
| 616 | * @j_tail_sequence: Sequence number of the oldest transaction in the log | ||
| 617 | * @j_transaction_sequence: Sequence number of the next transaction to grant | ||
| 618 | * @j_commit_sequence: Sequence number of the most recently committed | ||
| 619 | * transaction | ||
| 620 | * @j_commit_request: Sequence number of the most recent transaction wanting | ||
| 621 | * commit | ||
| 622 | * @j_uuid: Uuid of client object. | ||
| 623 | * @j_task: Pointer to the current commit thread for this journal | ||
| 624 | * @j_max_transaction_buffers: Maximum number of metadata buffers to allow in a | ||
| 625 | * single compound commit transaction | ||
| 626 | * @j_commit_interval: What is the maximum transaction lifetime before we begin | ||
| 627 | * a commit? | ||
| 628 | * @j_commit_timer: The timer used to wakeup the commit thread | ||
| 629 | * @j_revoke_lock: Protect the revoke table | ||
| 630 | * @j_revoke: The revoke table - maintains the list of revoked blocks in the | ||
| 631 | * current transaction. | ||
| 632 | * @j_revoke_table: alternate revoke tables for j_revoke | ||
| 633 | * @j_wbuf: array of buffer_heads for jbd2_journal_commit_transaction | ||
| 634 | * @j_wbufsize: maximum number of buffer_heads allowed in j_wbuf, the | ||
| 635 | * number that will fit in j_blocksize | ||
| 636 | * @j_last_sync_writer: most recent pid which did a synchronous write | ||
| 637 | * @j_private: An opaque pointer to fs-private information. | ||
| 638 | */ | ||
| 639 | |||
| 640 | struct journal_s | ||
| 641 | { | ||
| 642 | /* General journaling state flags [j_state_lock] */ | ||
| 643 | unsigned long j_flags; | ||
| 644 | |||
| 645 | /* | ||
| 646 | * Is there an outstanding uncleared error on the journal (from a prior | ||
| 647 | * abort)? [j_state_lock] | ||
| 648 | */ | ||
| 649 | int j_errno; | ||
| 650 | |||
| 651 | /* The superblock buffer */ | ||
| 652 | struct buffer_head *j_sb_buffer; | ||
| 653 | journal_superblock_t *j_superblock; | ||
| 654 | |||
| 655 | /* Version of the superblock format */ | ||
| 656 | int j_format_version; | ||
| 657 | |||
| 658 | /* | ||
| 659 | * Protect the various scalars in the journal | ||
| 660 | */ | ||
| 661 | spinlock_t j_state_lock; | ||
| 662 | |||
| 663 | /* | ||
| 664 | * Number of processes waiting to create a barrier lock [j_state_lock] | ||
| 665 | */ | ||
| 666 | int j_barrier_count; | ||
| 667 | |||
| 668 | /* The barrier lock itself */ | ||
| 669 | struct mutex j_barrier; | ||
| 670 | |||
| 671 | /* | ||
| 672 | * Transactions: The current running transaction... | ||
| 673 | * [j_state_lock] [caller holding open handle] | ||
| 674 | */ | ||
| 675 | transaction_t *j_running_transaction; | ||
| 676 | |||
| 677 | /* | ||
| 678 | * the transaction we are pushing to disk | ||
| 679 | * [j_state_lock] [caller holding open handle] | ||
| 680 | */ | ||
| 681 | transaction_t *j_committing_transaction; | ||
| 682 | |||
| 683 | /* | ||
| 684 | * ... and a linked circular list of all transactions waiting for | ||
| 685 | * checkpointing. [j_list_lock] | ||
| 686 | */ | ||
| 687 | transaction_t *j_checkpoint_transactions; | ||
| 688 | |||
| 689 | /* | ||
| 690 | * Wait queue for waiting for a locked transaction to start committing, | ||
| 691 | * or for a barrier lock to be released | ||
| 692 | */ | ||
| 693 | wait_queue_head_t j_wait_transaction_locked; | ||
| 694 | |||
| 695 | /* Wait queue for waiting for checkpointing to complete */ | ||
| 696 | wait_queue_head_t j_wait_logspace; | ||
| 697 | |||
| 698 | /* Wait queue for waiting for commit to complete */ | ||
| 699 | wait_queue_head_t j_wait_done_commit; | ||
| 700 | |||
| 701 | /* Wait queue to trigger checkpointing */ | ||
| 702 | wait_queue_head_t j_wait_checkpoint; | ||
| 703 | |||
| 704 | /* Wait queue to trigger commit */ | ||
| 705 | wait_queue_head_t j_wait_commit; | ||
| 706 | |||
| 707 | /* Wait queue to wait for updates to complete */ | ||
| 708 | wait_queue_head_t j_wait_updates; | ||
| 709 | |||
| 710 | /* Semaphore for locking against concurrent checkpoints */ | ||
| 711 | struct mutex j_checkpoint_mutex; | ||
| 712 | |||
| 713 | /* | ||
| 714 | * Journal head: identifies the first unused block in the journal. | ||
| 715 | * [j_state_lock] | ||
| 716 | */ | ||
| 717 | unsigned long j_head; | ||
| 718 | |||
| 719 | /* | ||
| 720 | * Journal tail: identifies the oldest still-used block in the journal. | ||
| 721 | * [j_state_lock] | ||
| 722 | */ | ||
| 723 | unsigned long j_tail; | ||
| 724 | |||
| 725 | /* | ||
| 726 | * Journal free: how many free blocks are there in the journal? | ||
| 727 | * [j_state_lock] | ||
| 728 | */ | ||
| 729 | unsigned long j_free; | ||
| 730 | |||
| 731 | /* | ||
| 732 | * Journal start and end: the block numbers of the first usable block | ||
| 733 | * and one beyond the last usable block in the journal. [j_state_lock] | ||
| 734 | */ | ||
| 735 | unsigned long j_first; | ||
| 736 | unsigned long j_last; | ||
| 737 | |||
| 738 | /* | ||
| 739 | * Device, blocksize and starting block offset for the location where we | ||
| 740 | * store the journal. | ||
| 741 | */ | ||
| 742 | struct block_device *j_dev; | ||
| 743 | int j_blocksize; | ||
| 744 | unsigned long long j_blk_offset; | ||
| 745 | |||
| 746 | /* | ||
| 747 | * Device which holds the client fs. For internal journal this will be | ||
| 748 | * equal to j_dev. | ||
| 749 | */ | ||
| 750 | struct block_device *j_fs_dev; | ||
| 751 | |||
| 752 | /* Total maximum capacity of the journal region on disk. */ | ||
| 753 | unsigned int j_maxlen; | ||
| 754 | |||
| 755 | /* | ||
| 756 | * Protects the buffer lists and internal buffer state. | ||
| 757 | */ | ||
| 758 | spinlock_t j_list_lock; | ||
| 759 | |||
| 760 | /* Optional inode where we store the journal. If present, all */ | ||
| 761 | /* journal block numbers are mapped into this inode via */ | ||
| 762 | /* bmap(). */ | ||
| 763 | struct inode *j_inode; | ||
| 764 | |||
| 765 | /* | ||
| 766 | * Sequence number of the oldest transaction in the log [j_state_lock] | ||
| 767 | */ | ||
| 768 | tid_t j_tail_sequence; | ||
| 769 | |||
| 770 | /* | ||
| 771 | * Sequence number of the next transaction to grant [j_state_lock] | ||
| 772 | */ | ||
| 773 | tid_t j_transaction_sequence; | ||
| 774 | |||
| 775 | /* | ||
| 776 | * Sequence number of the most recently committed transaction | ||
| 777 | * [j_state_lock]. | ||
| 778 | */ | ||
| 779 | tid_t j_commit_sequence; | ||
| 780 | |||
| 781 | /* | ||
| 782 | * Sequence number of the most recent transaction wanting commit | ||
| 783 | * [j_state_lock] | ||
| 784 | */ | ||
| 785 | tid_t j_commit_request; | ||
| 786 | |||
| 787 | /* | ||
| 788 | * Journal uuid: identifies the object (filesystem, LVM volume etc) | ||
| 789 | * backed by this journal. This will eventually be replaced by an array | ||
| 790 | * of uuids, allowing us to index multiple devices within a single | ||
| 791 | * journal and to perform atomic updates across them. | ||
| 792 | */ | ||
| 793 | __u8 j_uuid[16]; | ||
| 794 | |||
| 795 | /* Pointer to the current commit thread for this journal */ | ||
| 796 | struct task_struct *j_task; | ||
| 797 | |||
| 798 | /* | ||
| 799 | * Maximum number of metadata buffers to allow in a single compound | ||
| 800 | * commit transaction | ||
| 801 | */ | ||
| 802 | int j_max_transaction_buffers; | ||
| 803 | |||
| 804 | /* | ||
| 805 | * What is the maximum transaction lifetime before we begin a commit? | ||
| 806 | */ | ||
| 807 | unsigned long j_commit_interval; | ||
| 808 | |||
| 809 | /* The timer used to wakeup the commit thread: */ | ||
| 810 | struct timer_list j_commit_timer; | ||
| 811 | |||
| 812 | /* | ||
| 813 | * The revoke table: maintains the list of revoked blocks in the | ||
| 814 | * current transaction. [j_revoke_lock] | ||
| 815 | */ | ||
| 816 | spinlock_t j_revoke_lock; | ||
| 817 | struct jbd2_revoke_table_s *j_revoke; | ||
| 818 | struct jbd2_revoke_table_s *j_revoke_table[2]; | ||
| 819 | |||
| 820 | /* | ||
| 821 | * array of bhs for jbd2_journal_commit_transaction | ||
| 822 | */ | ||
| 823 | struct buffer_head **j_wbuf; | ||
| 824 | int j_wbufsize; | ||
| 825 | |||
| 826 | pid_t j_last_sync_writer; | ||
| 827 | |||
| 828 | /* | ||
| 829 | * An opaque pointer to fs-private information. ext3 puts its | ||
| 830 | * superblock pointer here | ||
| 831 | */ | ||
| 832 | void *j_private; | ||
| 833 | }; | ||
| 834 | |||
| 835 | /* | ||
| 836 | * Journal flag definitions | ||
| 837 | */ | ||
| 838 | #define JBD2_UNMOUNT 0x001 /* Journal thread is being destroyed */ | ||
| 839 | #define JBD2_ABORT 0x002 /* Journaling has been aborted for errors. */ | ||
| 840 | #define JBD2_ACK_ERR 0x004 /* The errno in the sb has been acked */ | ||
| 841 | #define JBD2_FLUSHED 0x008 /* The journal superblock has been flushed */ | ||
| 842 | #define JBD2_LOADED 0x010 /* The journal superblock has been loaded */ | ||
| 843 | #define JBD2_BARRIER 0x020 /* Use IDE barriers */ | ||
| 844 | |||
| 845 | /* | ||
| 846 | * Function declarations for the journaling transaction and buffer | ||
| 847 | * management | ||
| 848 | */ | ||
| 849 | |||
| 850 | /* Filing buffers */ | ||
| 851 | extern void __jbd2_journal_temp_unlink_buffer(struct journal_head *jh); | ||
| 852 | extern void jbd2_journal_unfile_buffer(journal_t *, struct journal_head *); | ||
| 853 | extern void __jbd2_journal_unfile_buffer(struct journal_head *); | ||
| 854 | extern void __jbd2_journal_refile_buffer(struct journal_head *); | ||
| 855 | extern void jbd2_journal_refile_buffer(journal_t *, struct journal_head *); | ||
| 856 | extern void __jbd2_journal_file_buffer(struct journal_head *, transaction_t *, int); | ||
| 857 | extern void __journal_free_buffer(struct journal_head *bh); | ||
| 858 | extern void jbd2_journal_file_buffer(struct journal_head *, transaction_t *, int); | ||
| 859 | extern void __journal_clean_data_list(transaction_t *transaction); | ||
| 860 | |||
| 861 | /* Log buffer allocation */ | ||
| 862 | extern struct journal_head * jbd2_journal_get_descriptor_buffer(journal_t *); | ||
| 863 | int jbd2_journal_next_log_block(journal_t *, unsigned long long *); | ||
| 864 | |||
| 865 | /* Commit management */ | ||
| 866 | extern void jbd2_journal_commit_transaction(journal_t *); | ||
| 867 | |||
| 868 | /* Checkpoint list management */ | ||
| 869 | int __jbd2_journal_clean_checkpoint_list(journal_t *journal); | ||
| 870 | int __jbd2_journal_remove_checkpoint(struct journal_head *); | ||
| 871 | void __jbd2_journal_insert_checkpoint(struct journal_head *, transaction_t *); | ||
| 872 | |||
| 873 | /* Buffer IO */ | ||
| 874 | extern int | ||
| 875 | jbd2_journal_write_metadata_buffer(transaction_t *transaction, | ||
| 876 | struct journal_head *jh_in, | ||
| 877 | struct journal_head **jh_out, | ||
| 878 | unsigned long long blocknr); | ||
| 879 | |||
| 880 | /* Transaction locking */ | ||
| 881 | extern void __wait_on_journal (journal_t *); | ||
| 882 | |||
| 883 | /* | ||
| 884 | * Journal locking. | ||
| 885 | * | ||
| 886 | * We need to lock the journal during transaction state changes so that nobody | ||
| 887 | * ever tries to take a handle on the running transaction while we are in the | ||
| 888 | * middle of moving it to the commit phase. j_state_lock does this. | ||
| 889 | * | ||
| 890 | * Note that the locking is completely interrupt unsafe. We never touch | ||
| 891 | * journal structures from interrupts. | ||
| 892 | */ | ||
| 893 | |||
| 894 | static inline handle_t *journal_current_handle(void) | ||
| 895 | { | ||
| 896 | return current->journal_info; | ||
| 897 | } | ||
| 898 | |||
| 899 | /* The journaling code user interface: | ||
| 900 | * | ||
| 901 | * Create and destroy handles | ||
| 902 | * Register buffer modifications against the current transaction. | ||
| 903 | */ | ||
| 904 | |||
| 905 | extern handle_t *jbd2_journal_start(journal_t *, int nblocks); | ||
| 906 | extern int jbd2_journal_restart (handle_t *, int nblocks); | ||
| 907 | extern int jbd2_journal_extend (handle_t *, int nblocks); | ||
| 908 | extern int jbd2_journal_get_write_access(handle_t *, struct buffer_head *); | ||
| 909 | extern int jbd2_journal_get_create_access (handle_t *, struct buffer_head *); | ||
| 910 | extern int jbd2_journal_get_undo_access(handle_t *, struct buffer_head *); | ||
| 911 | extern int jbd2_journal_dirty_data (handle_t *, struct buffer_head *); | ||
| 912 | extern int jbd2_journal_dirty_metadata (handle_t *, struct buffer_head *); | ||
| 913 | extern void jbd2_journal_release_buffer (handle_t *, struct buffer_head *); | ||
| 914 | extern int jbd2_journal_forget (handle_t *, struct buffer_head *); | ||
| 915 | extern void journal_sync_buffer (struct buffer_head *); | ||
| 916 | extern void jbd2_journal_invalidatepage(journal_t *, | ||
| 917 | struct page *, unsigned long); | ||
| 918 | extern int jbd2_journal_try_to_free_buffers(journal_t *, struct page *, gfp_t); | ||
| 919 | extern int jbd2_journal_stop(handle_t *); | ||
| 920 | extern int jbd2_journal_flush (journal_t *); | ||
| 921 | extern void jbd2_journal_lock_updates (journal_t *); | ||
| 922 | extern void jbd2_journal_unlock_updates (journal_t *); | ||
| 923 | |||
| 924 | extern journal_t * jbd2_journal_init_dev(struct block_device *bdev, | ||
| 925 | struct block_device *fs_dev, | ||
| 926 | unsigned long long start, int len, int bsize); | ||
| 927 | extern journal_t * jbd2_journal_init_inode (struct inode *); | ||
| 928 | extern int jbd2_journal_update_format (journal_t *); | ||
| 929 | extern int jbd2_journal_check_used_features | ||
| 930 | (journal_t *, unsigned long, unsigned long, unsigned long); | ||
| 931 | extern int jbd2_journal_check_available_features | ||
| 932 | (journal_t *, unsigned long, unsigned long, unsigned long); | ||
| 933 | extern int jbd2_journal_set_features | ||
| 934 | (journal_t *, unsigned long, unsigned long, unsigned long); | ||
| 935 | extern int jbd2_journal_create (journal_t *); | ||
| 936 | extern int jbd2_journal_load (journal_t *journal); | ||
| 937 | extern void jbd2_journal_destroy (journal_t *); | ||
| 938 | extern int jbd2_journal_recover (journal_t *journal); | ||
| 939 | extern int jbd2_journal_wipe (journal_t *, int); | ||
| 940 | extern int jbd2_journal_skip_recovery (journal_t *); | ||
| 941 | extern void jbd2_journal_update_superblock (journal_t *, int); | ||
| 942 | extern void __jbd2_journal_abort_hard (journal_t *); | ||
| 943 | extern void jbd2_journal_abort (journal_t *, int); | ||
| 944 | extern int jbd2_journal_errno (journal_t *); | ||
| 945 | extern void jbd2_journal_ack_err (journal_t *); | ||
| 946 | extern int jbd2_journal_clear_err (journal_t *); | ||
| 947 | extern int jbd2_journal_bmap(journal_t *, unsigned long, unsigned long long *); | ||
| 948 | extern int jbd2_journal_force_commit(journal_t *); | ||
| 949 | |||
| 950 | /* | ||
| 951 | * journal_head management | ||
| 952 | */ | ||
| 953 | struct journal_head *jbd2_journal_add_journal_head(struct buffer_head *bh); | ||
| 954 | struct journal_head *jbd2_journal_grab_journal_head(struct buffer_head *bh); | ||
| 955 | void jbd2_journal_remove_journal_head(struct buffer_head *bh); | ||
| 956 | void jbd2_journal_put_journal_head(struct journal_head *jh); | ||
| 957 | |||
| 958 | /* | ||
| 959 | * handle management | ||
| 960 | */ | ||
| 961 | extern kmem_cache_t *jbd2_handle_cache; | ||
| 962 | |||
| 963 | static inline handle_t *jbd_alloc_handle(gfp_t gfp_flags) | ||
| 964 | { | ||
| 965 | return kmem_cache_alloc(jbd2_handle_cache, gfp_flags); | ||
| 966 | } | ||
| 967 | |||
| 968 | static inline void jbd_free_handle(handle_t *handle) | ||
| 969 | { | ||
| 970 | kmem_cache_free(jbd2_handle_cache, handle); | ||
| 971 | } | ||
| 972 | |||
| 973 | /* Primary revoke support */ | ||
| 974 | #define JOURNAL_REVOKE_DEFAULT_HASH 256 | ||
| 975 | extern int jbd2_journal_init_revoke(journal_t *, int); | ||
| 976 | extern void jbd2_journal_destroy_revoke_caches(void); | ||
| 977 | extern int jbd2_journal_init_revoke_caches(void); | ||
| 978 | |||
| 979 | extern void jbd2_journal_destroy_revoke(journal_t *); | ||
| 980 | extern int jbd2_journal_revoke (handle_t *, unsigned long long, struct buffer_head *); | ||
| 981 | extern int jbd2_journal_cancel_revoke(handle_t *, struct journal_head *); | ||
| 982 | extern void jbd2_journal_write_revoke_records(journal_t *, transaction_t *); | ||
| 983 | |||
| 984 | /* Recovery revoke support */ | ||
| 985 | extern int jbd2_journal_set_revoke(journal_t *, unsigned long long, tid_t); | ||
| 986 | extern int jbd2_journal_test_revoke(journal_t *, unsigned long long, tid_t); | ||
| 987 | extern void jbd2_journal_clear_revoke(journal_t *); | ||
| 988 | extern void jbd2_journal_switch_revoke_table(journal_t *journal); | ||
| 989 | |||
| 990 | /* | ||
| 991 | * The log thread user interface: | ||
| 992 | * | ||
| 993 | * Request space in the current transaction, and force transaction commit | ||
| 994 | * transitions on demand. | ||
| 995 | */ | ||
| 996 | |||
| 997 | int __jbd2_log_space_left(journal_t *); /* Called with journal locked */ | ||
| 998 | int jbd2_log_start_commit(journal_t *journal, tid_t tid); | ||
| 999 | int __jbd2_log_start_commit(journal_t *journal, tid_t tid); | ||
| 1000 | int jbd2_journal_start_commit(journal_t *journal, tid_t *tid); | ||
| 1001 | int jbd2_journal_force_commit_nested(journal_t *journal); | ||
| 1002 | int jbd2_log_wait_commit(journal_t *journal, tid_t tid); | ||
| 1003 | int jbd2_log_do_checkpoint(journal_t *journal); | ||
| 1004 | |||
| 1005 | void __jbd2_log_wait_for_space(journal_t *journal); | ||
| 1006 | extern void __jbd2_journal_drop_transaction(journal_t *, transaction_t *); | ||
| 1007 | extern int jbd2_cleanup_journal_tail(journal_t *); | ||
| 1008 | |||
| 1009 | /* Debugging code only: */ | ||
| 1010 | |||
| 1011 | #define jbd_ENOSYS() \ | ||
| 1012 | do { \ | ||
| 1013 | printk (KERN_ERR "JBD unimplemented function %s\n", __FUNCTION__); \ | ||
| 1014 | current->state = TASK_UNINTERRUPTIBLE; \ | ||
| 1015 | schedule(); \ | ||
| 1016 | } while (1) | ||
| 1017 | |||
| 1018 | /* | ||
| 1019 | * is_journal_abort | ||
| 1020 | * | ||
| 1021 | * Simple test wrapper function to test the JBD2_ABORT state flag. This | ||
| 1022 | * bit, when set, indicates that we have had a fatal error somewhere, | ||
| 1023 | * either inside the journaling layer or indicated to us by the client | ||
| 1024 | * (eg. ext3), and that we and should not commit any further | ||
| 1025 | * transactions. | ||
| 1026 | */ | ||
| 1027 | |||
| 1028 | static inline int is_journal_aborted(journal_t *journal) | ||
| 1029 | { | ||
| 1030 | return journal->j_flags & JBD2_ABORT; | ||
| 1031 | } | ||
| 1032 | |||
| 1033 | static inline int is_handle_aborted(handle_t *handle) | ||
| 1034 | { | ||
| 1035 | if (handle->h_aborted) | ||
| 1036 | return 1; | ||
| 1037 | return is_journal_aborted(handle->h_transaction->t_journal); | ||
| 1038 | } | ||
| 1039 | |||
| 1040 | static inline void jbd2_journal_abort_handle(handle_t *handle) | ||
| 1041 | { | ||
| 1042 | handle->h_aborted = 1; | ||
| 1043 | } | ||
| 1044 | |||
| 1045 | #endif /* __KERNEL__ */ | ||
| 1046 | |||
| 1047 | /* Comparison functions for transaction IDs: perform comparisons using | ||
| 1048 | * modulo arithmetic so that they work over sequence number wraps. */ | ||
| 1049 | |||
| 1050 | static inline int tid_gt(tid_t x, tid_t y) | ||
| 1051 | { | ||
| 1052 | int difference = (x - y); | ||
| 1053 | return (difference > 0); | ||
| 1054 | } | ||
| 1055 | |||
| 1056 | static inline int tid_geq(tid_t x, tid_t y) | ||
| 1057 | { | ||
| 1058 | int difference = (x - y); | ||
| 1059 | return (difference >= 0); | ||
| 1060 | } | ||
| 1061 | |||
| 1062 | extern int jbd2_journal_blocks_per_page(struct inode *inode); | ||
| 1063 | extern size_t journal_tag_bytes(journal_t *journal); | ||
| 1064 | |||
| 1065 | /* | ||
| 1066 | * Return the minimum number of blocks which must be free in the journal | ||
| 1067 | * before a new transaction may be started. Must be called under j_state_lock. | ||
| 1068 | */ | ||
| 1069 | static inline int jbd_space_needed(journal_t *journal) | ||
| 1070 | { | ||
| 1071 | int nblocks = journal->j_max_transaction_buffers; | ||
| 1072 | if (journal->j_committing_transaction) | ||
| 1073 | nblocks += journal->j_committing_transaction-> | ||
| 1074 | t_outstanding_credits; | ||
| 1075 | return nblocks; | ||
| 1076 | } | ||
| 1077 | |||
| 1078 | /* | ||
| 1079 | * Definitions which augment the buffer_head layer | ||
| 1080 | */ | ||
| 1081 | |||
| 1082 | /* journaling buffer types */ | ||
| 1083 | #define BJ_None 0 /* Not journaled */ | ||
| 1084 | #define BJ_SyncData 1 /* Normal data: flush before commit */ | ||
| 1085 | #define BJ_Metadata 2 /* Normal journaled metadata */ | ||
| 1086 | #define BJ_Forget 3 /* Buffer superseded by this transaction */ | ||
| 1087 | #define BJ_IO 4 /* Buffer is for temporary IO use */ | ||
| 1088 | #define BJ_Shadow 5 /* Buffer contents being shadowed to the log */ | ||
| 1089 | #define BJ_LogCtl 6 /* Buffer contains log descriptors */ | ||
| 1090 | #define BJ_Reserved 7 /* Buffer is reserved for access by journal */ | ||
| 1091 | #define BJ_Locked 8 /* Locked for I/O during commit */ | ||
| 1092 | #define BJ_Types 9 | ||
| 1093 | |||
| 1094 | extern int jbd_blocks_per_page(struct inode *inode); | ||
| 1095 | |||
| 1096 | #ifdef __KERNEL__ | ||
| 1097 | |||
| 1098 | #define buffer_trace_init(bh) do {} while (0) | ||
| 1099 | #define print_buffer_fields(bh) do {} while (0) | ||
| 1100 | #define print_buffer_trace(bh) do {} while (0) | ||
| 1101 | #define BUFFER_TRACE(bh, info) do {} while (0) | ||
| 1102 | #define BUFFER_TRACE2(bh, bh2, info) do {} while (0) | ||
| 1103 | #define JBUFFER_TRACE(jh, info) do {} while (0) | ||
| 1104 | |||
| 1105 | #endif /* __KERNEL__ */ | ||
| 1106 | |||
| 1107 | #endif /* _LINUX_JBD_H */ | ||
diff --git a/include/linux/libata.h b/include/linux/libata.h index d6a3d4b345fc..d0a7ad5ed518 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -109,6 +109,10 @@ static inline u32 ata_msg_init(int dval, int default_msg_enable_bits) | |||
| 109 | #define ATA_TAG_POISON 0xfafbfcfdU | 109 | #define ATA_TAG_POISON 0xfafbfcfdU |
| 110 | 110 | ||
| 111 | /* move to PCI layer? */ | 111 | /* move to PCI layer? */ |
| 112 | #define PCI_VDEVICE(vendor, device) \ | ||
| 113 | PCI_VENDOR_ID_##vendor, (device), \ | ||
| 114 | PCI_ANY_ID, PCI_ANY_ID, 0, 0 | ||
| 115 | |||
| 112 | static inline struct device *pci_dev_to_dev(struct pci_dev *pdev) | 116 | static inline struct device *pci_dev_to_dev(struct pci_dev *pdev) |
| 113 | { | 117 | { |
| 114 | return &pdev->dev; | 118 | return &pdev->dev; |
| @@ -138,8 +142,9 @@ enum { | |||
| 138 | ATA_DFLAG_NCQ = (1 << 3), /* device supports NCQ */ | 142 | ATA_DFLAG_NCQ = (1 << 3), /* device supports NCQ */ |
| 139 | ATA_DFLAG_CFG_MASK = (1 << 8) - 1, | 143 | ATA_DFLAG_CFG_MASK = (1 << 8) - 1, |
| 140 | 144 | ||
| 141 | ATA_DFLAG_PIO = (1 << 8), /* device currently in PIO mode */ | 145 | ATA_DFLAG_PIO = (1 << 8), /* device limited to PIO mode */ |
| 142 | ATA_DFLAG_SUSPENDED = (1 << 9), /* device suspended */ | 146 | ATA_DFLAG_NCQ_OFF = (1 << 9), /* devied limited to non-NCQ mode */ |
| 147 | ATA_DFLAG_SUSPENDED = (1 << 10), /* device suspended */ | ||
| 143 | ATA_DFLAG_INIT_MASK = (1 << 16) - 1, | 148 | ATA_DFLAG_INIT_MASK = (1 << 16) - 1, |
| 144 | 149 | ||
| 145 | ATA_DFLAG_DETACH = (1 << 16), | 150 | ATA_DFLAG_DETACH = (1 << 16), |
| @@ -623,7 +628,7 @@ struct ata_port_operations { | |||
| 623 | void (*error_handler) (struct ata_port *ap); | 628 | void (*error_handler) (struct ata_port *ap); |
| 624 | void (*post_internal_cmd) (struct ata_queued_cmd *qc); | 629 | void (*post_internal_cmd) (struct ata_queued_cmd *qc); |
| 625 | 630 | ||
| 626 | irqreturn_t (*irq_handler)(int, void *, struct pt_regs *); | 631 | irq_handler_t irq_handler; |
| 627 | void (*irq_clear) (struct ata_port *); | 632 | void (*irq_clear) (struct ata_port *); |
| 628 | 633 | ||
| 629 | u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg); | 634 | u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg); |
| @@ -764,7 +769,7 @@ extern void ata_exec_command(struct ata_port *ap, const struct ata_taskfile *tf) | |||
| 764 | extern int ata_port_start (struct ata_port *ap); | 769 | extern int ata_port_start (struct ata_port *ap); |
| 765 | extern void ata_port_stop (struct ata_port *ap); | 770 | extern void ata_port_stop (struct ata_port *ap); |
| 766 | extern void ata_host_stop (struct ata_host *host); | 771 | extern void ata_host_stop (struct ata_host *host); |
| 767 | extern irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs); | 772 | extern irqreturn_t ata_interrupt (int irq, void *dev_instance); |
| 768 | extern void ata_mmio_data_xfer(struct ata_device *adev, unsigned char *buf, | 773 | extern void ata_mmio_data_xfer(struct ata_device *adev, unsigned char *buf, |
| 769 | unsigned int buflen, int write_data); | 774 | unsigned int buflen, int write_data); |
| 770 | extern void ata_pio_data_xfer(struct ata_device *adev, unsigned char *buf, | 775 | extern void ata_pio_data_xfer(struct ata_device *adev, unsigned char *buf, |
diff --git a/include/linux/lm_interface.h b/include/linux/lm_interface.h new file mode 100644 index 000000000000..1418fdc9ac02 --- /dev/null +++ b/include/linux/lm_interface.h | |||
| @@ -0,0 +1,273 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. | ||
| 3 | * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved. | ||
| 4 | * | ||
| 5 | * This copyrighted material is made available to anyone wishing to use, | ||
| 6 | * modify, copy, or redistribute it subject to the terms and conditions | ||
| 7 | * of the GNU General Public License version 2. | ||
| 8 | */ | ||
| 9 | |||
| 10 | #ifndef __LM_INTERFACE_DOT_H__ | ||
| 11 | #define __LM_INTERFACE_DOT_H__ | ||
| 12 | |||
| 13 | |||
| 14 | typedef void (*lm_callback_t) (void *ptr, unsigned int type, void *data); | ||
| 15 | |||
| 16 | /* | ||
| 17 | * lm_mount() flags | ||
| 18 | * | ||
| 19 | * LM_MFLAG_SPECTATOR | ||
| 20 | * GFS is asking to join the filesystem's lockspace, but it doesn't want to | ||
| 21 | * modify the filesystem. The lock module shouldn't assign a journal to the FS | ||
| 22 | * mount. It shouldn't send recovery callbacks to the FS mount. If the node | ||
| 23 | * dies or withdraws, all locks can be wiped immediately. | ||
| 24 | */ | ||
| 25 | |||
| 26 | #define LM_MFLAG_SPECTATOR 0x00000001 | ||
| 27 | |||
| 28 | /* | ||
| 29 | * lm_lockstruct flags | ||
| 30 | * | ||
| 31 | * LM_LSFLAG_LOCAL | ||
| 32 | * The lock_nolock module returns LM_LSFLAG_LOCAL to GFS, indicating that GFS | ||
| 33 | * can make single-node optimizations. | ||
| 34 | */ | ||
| 35 | |||
| 36 | #define LM_LSFLAG_LOCAL 0x00000001 | ||
| 37 | |||
| 38 | /* | ||
| 39 | * lm_lockname types | ||
| 40 | */ | ||
| 41 | |||
| 42 | #define LM_TYPE_RESERVED 0x00 | ||
| 43 | #define LM_TYPE_NONDISK 0x01 | ||
| 44 | #define LM_TYPE_INODE 0x02 | ||
| 45 | #define LM_TYPE_RGRP 0x03 | ||
| 46 | #define LM_TYPE_META 0x04 | ||
| 47 | #define LM_TYPE_IOPEN 0x05 | ||
| 48 | #define LM_TYPE_FLOCK 0x06 | ||
| 49 | #define LM_TYPE_PLOCK 0x07 | ||
| 50 | #define LM_TYPE_QUOTA 0x08 | ||
| 51 | #define LM_TYPE_JOURNAL 0x09 | ||
| 52 | |||
| 53 | /* | ||
| 54 | * lm_lock() states | ||
| 55 | * | ||
| 56 | * SHARED is compatible with SHARED, not with DEFERRED or EX. | ||
| 57 | * DEFERRED is compatible with DEFERRED, not with SHARED or EX. | ||
| 58 | */ | ||
| 59 | |||
| 60 | #define LM_ST_UNLOCKED 0 | ||
| 61 | #define LM_ST_EXCLUSIVE 1 | ||
| 62 | #define LM_ST_DEFERRED 2 | ||
| 63 | #define LM_ST_SHARED 3 | ||
| 64 | |||
| 65 | /* | ||
| 66 | * lm_lock() flags | ||
| 67 | * | ||
| 68 | * LM_FLAG_TRY | ||
| 69 | * Don't wait to acquire the lock if it can't be granted immediately. | ||
| 70 | * | ||
| 71 | * LM_FLAG_TRY_1CB | ||
| 72 | * Send one blocking callback if TRY is set and the lock is not granted. | ||
| 73 | * | ||
| 74 | * LM_FLAG_NOEXP | ||
| 75 | * GFS sets this flag on lock requests it makes while doing journal recovery. | ||
| 76 | * These special requests should not be blocked due to the recovery like | ||
| 77 | * ordinary locks would be. | ||
| 78 | * | ||
| 79 | * LM_FLAG_ANY | ||
| 80 | * A SHARED request may also be granted in DEFERRED, or a DEFERRED request may | ||
| 81 | * also be granted in SHARED. The preferred state is whichever is compatible | ||
| 82 | * with other granted locks, or the specified state if no other locks exist. | ||
| 83 | * | ||
| 84 | * LM_FLAG_PRIORITY | ||
| 85 | * Override fairness considerations. Suppose a lock is held in a shared state | ||
| 86 | * and there is a pending request for the deferred state. A shared lock | ||
| 87 | * request with the priority flag would be allowed to bypass the deferred | ||
| 88 | * request and directly join the other shared lock. A shared lock request | ||
| 89 | * without the priority flag might be forced to wait until the deferred | ||
| 90 | * requested had acquired and released the lock. | ||
| 91 | */ | ||
| 92 | |||
| 93 | #define LM_FLAG_TRY 0x00000001 | ||
| 94 | #define LM_FLAG_TRY_1CB 0x00000002 | ||
| 95 | #define LM_FLAG_NOEXP 0x00000004 | ||
| 96 | #define LM_FLAG_ANY 0x00000008 | ||
| 97 | #define LM_FLAG_PRIORITY 0x00000010 | ||
| 98 | |||
| 99 | /* | ||
| 100 | * lm_lock() and lm_async_cb return flags | ||
| 101 | * | ||
| 102 | * LM_OUT_ST_MASK | ||
| 103 | * Masks the lower two bits of lock state in the returned value. | ||
| 104 | * | ||
| 105 | * LM_OUT_CACHEABLE | ||
| 106 | * The lock hasn't been released so GFS can continue to cache data for it. | ||
| 107 | * | ||
| 108 | * LM_OUT_CANCELED | ||
| 109 | * The lock request was canceled. | ||
| 110 | * | ||
| 111 | * LM_OUT_ASYNC | ||
| 112 | * The result of the request will be returned in an LM_CB_ASYNC callback. | ||
| 113 | */ | ||
| 114 | |||
| 115 | #define LM_OUT_ST_MASK 0x00000003 | ||
| 116 | #define LM_OUT_CACHEABLE 0x00000004 | ||
| 117 | #define LM_OUT_CANCELED 0x00000008 | ||
| 118 | #define LM_OUT_ASYNC 0x00000080 | ||
| 119 | #define LM_OUT_ERROR 0x00000100 | ||
| 120 | |||
| 121 | /* | ||
| 122 | * lm_callback_t types | ||
| 123 | * | ||
| 124 | * LM_CB_NEED_E LM_CB_NEED_D LM_CB_NEED_S | ||
| 125 | * Blocking callback, a remote node is requesting the given lock in | ||
| 126 | * EXCLUSIVE, DEFERRED, or SHARED. | ||
| 127 | * | ||
| 128 | * LM_CB_NEED_RECOVERY | ||
| 129 | * The given journal needs to be recovered. | ||
| 130 | * | ||
| 131 | * LM_CB_DROPLOCKS | ||
| 132 | * Reduce the number of cached locks. | ||
| 133 | * | ||
| 134 | * LM_CB_ASYNC | ||
| 135 | * The given lock has been granted. | ||
| 136 | */ | ||
| 137 | |||
| 138 | #define LM_CB_NEED_E 257 | ||
| 139 | #define LM_CB_NEED_D 258 | ||
| 140 | #define LM_CB_NEED_S 259 | ||
| 141 | #define LM_CB_NEED_RECOVERY 260 | ||
| 142 | #define LM_CB_DROPLOCKS 261 | ||
| 143 | #define LM_CB_ASYNC 262 | ||
| 144 | |||
| 145 | /* | ||
| 146 | * lm_recovery_done() messages | ||
| 147 | */ | ||
| 148 | |||
| 149 | #define LM_RD_GAVEUP 308 | ||
| 150 | #define LM_RD_SUCCESS 309 | ||
| 151 | |||
| 152 | |||
| 153 | struct lm_lockname { | ||
| 154 | u64 ln_number; | ||
| 155 | unsigned int ln_type; | ||
| 156 | }; | ||
| 157 | |||
| 158 | #define lm_name_equal(name1, name2) \ | ||
| 159 | (((name1)->ln_number == (name2)->ln_number) && \ | ||
| 160 | ((name1)->ln_type == (name2)->ln_type)) \ | ||
| 161 | |||
| 162 | struct lm_async_cb { | ||
| 163 | struct lm_lockname lc_name; | ||
| 164 | int lc_ret; | ||
| 165 | }; | ||
| 166 | |||
| 167 | struct lm_lockstruct; | ||
| 168 | |||
| 169 | struct lm_lockops { | ||
| 170 | const char *lm_proto_name; | ||
| 171 | |||
| 172 | /* | ||
| 173 | * Mount/Unmount | ||
| 174 | */ | ||
| 175 | |||
| 176 | int (*lm_mount) (char *table_name, char *host_data, | ||
| 177 | lm_callback_t cb, void *cb_data, | ||
| 178 | unsigned int min_lvb_size, int flags, | ||
| 179 | struct lm_lockstruct *lockstruct, | ||
| 180 | struct kobject *fskobj); | ||
| 181 | |||
| 182 | void (*lm_others_may_mount) (void *lockspace); | ||
| 183 | |||
| 184 | void (*lm_unmount) (void *lockspace); | ||
| 185 | |||
| 186 | void (*lm_withdraw) (void *lockspace); | ||
| 187 | |||
| 188 | /* | ||
| 189 | * Lock oriented operations | ||
| 190 | */ | ||
| 191 | |||
| 192 | int (*lm_get_lock) (void *lockspace, struct lm_lockname *name, void **lockp); | ||
| 193 | |||
| 194 | void (*lm_put_lock) (void *lock); | ||
| 195 | |||
| 196 | unsigned int (*lm_lock) (void *lock, unsigned int cur_state, | ||
| 197 | unsigned int req_state, unsigned int flags); | ||
| 198 | |||
| 199 | unsigned int (*lm_unlock) (void *lock, unsigned int cur_state); | ||
| 200 | |||
| 201 | void (*lm_cancel) (void *lock); | ||
| 202 | |||
| 203 | int (*lm_hold_lvb) (void *lock, char **lvbp); | ||
| 204 | void (*lm_unhold_lvb) (void *lock, char *lvb); | ||
| 205 | |||
| 206 | /* | ||
| 207 | * Posix Lock oriented operations | ||
| 208 | */ | ||
| 209 | |||
| 210 | int (*lm_plock_get) (void *lockspace, struct lm_lockname *name, | ||
| 211 | struct file *file, struct file_lock *fl); | ||
| 212 | |||
| 213 | int (*lm_plock) (void *lockspace, struct lm_lockname *name, | ||
| 214 | struct file *file, int cmd, struct file_lock *fl); | ||
| 215 | |||
| 216 | int (*lm_punlock) (void *lockspace, struct lm_lockname *name, | ||
| 217 | struct file *file, struct file_lock *fl); | ||
| 218 | |||
| 219 | /* | ||
| 220 | * Client oriented operations | ||
| 221 | */ | ||
| 222 | |||
| 223 | void (*lm_recovery_done) (void *lockspace, unsigned int jid, | ||
| 224 | unsigned int message); | ||
| 225 | |||
| 226 | struct module *lm_owner; | ||
| 227 | }; | ||
| 228 | |||
| 229 | /* | ||
| 230 | * lm_mount() return values | ||
| 231 | * | ||
| 232 | * ls_jid - the journal ID this node should use | ||
| 233 | * ls_first - this node is the first to mount the file system | ||
| 234 | * ls_lvb_size - size in bytes of lock value blocks | ||
| 235 | * ls_lockspace - lock module's context for this file system | ||
| 236 | * ls_ops - lock module's functions | ||
| 237 | * ls_flags - lock module features | ||
| 238 | */ | ||
| 239 | |||
| 240 | struct lm_lockstruct { | ||
| 241 | unsigned int ls_jid; | ||
| 242 | unsigned int ls_first; | ||
| 243 | unsigned int ls_lvb_size; | ||
| 244 | void *ls_lockspace; | ||
| 245 | const struct lm_lockops *ls_ops; | ||
| 246 | int ls_flags; | ||
| 247 | }; | ||
| 248 | |||
| 249 | /* | ||
| 250 | * Lock module bottom interface. A lock module makes itself available to GFS | ||
| 251 | * with these functions. | ||
| 252 | */ | ||
| 253 | |||
| 254 | int gfs2_register_lockproto(const struct lm_lockops *proto); | ||
| 255 | void gfs2_unregister_lockproto(const struct lm_lockops *proto); | ||
| 256 | |||
| 257 | /* | ||
| 258 | * Lock module top interface. GFS calls these functions when mounting or | ||
| 259 | * unmounting a file system. | ||
| 260 | */ | ||
| 261 | |||
| 262 | int gfs2_mount_lockproto(char *proto_name, char *table_name, char *host_data, | ||
| 263 | lm_callback_t cb, void *cb_data, | ||
| 264 | unsigned int min_lvb_size, int flags, | ||
| 265 | struct lm_lockstruct *lockstruct, | ||
| 266 | struct kobject *fskobj); | ||
| 267 | |||
| 268 | void gfs2_unmount_lockproto(struct lm_lockstruct *lockstruct); | ||
| 269 | |||
| 270 | void gfs2_withdraw_lockproto(struct lm_lockstruct *lockstruct); | ||
| 271 | |||
| 272 | #endif /* __LM_INTERFACE_DOT_H__ */ | ||
| 273 | |||
diff --git a/include/linux/lock_dlm_plock.h b/include/linux/lock_dlm_plock.h new file mode 100644 index 000000000000..fc3415113973 --- /dev/null +++ b/include/linux/lock_dlm_plock.h | |||
| @@ -0,0 +1,41 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2005 Red Hat, Inc. All rights reserved. | ||
| 3 | * | ||
| 4 | * This copyrighted material is made available to anyone wishing to use, | ||
| 5 | * modify, copy, or redistribute it subject to the terms and conditions | ||
| 6 | * of the GNU General Public License v.2. | ||
| 7 | */ | ||
| 8 | |||
| 9 | #ifndef __LOCK_DLM_PLOCK_DOT_H__ | ||
| 10 | #define __LOCK_DLM_PLOCK_DOT_H__ | ||
| 11 | |||
| 12 | #define GDLM_PLOCK_MISC_NAME "lock_dlm_plock" | ||
| 13 | |||
| 14 | #define GDLM_PLOCK_VERSION_MAJOR 1 | ||
| 15 | #define GDLM_PLOCK_VERSION_MINOR 1 | ||
| 16 | #define GDLM_PLOCK_VERSION_PATCH 0 | ||
| 17 | |||
| 18 | enum { | ||
| 19 | GDLM_PLOCK_OP_LOCK = 1, | ||
| 20 | GDLM_PLOCK_OP_UNLOCK, | ||
| 21 | GDLM_PLOCK_OP_GET, | ||
| 22 | }; | ||
| 23 | |||
| 24 | struct gdlm_plock_info { | ||
| 25 | __u32 version[3]; | ||
| 26 | __u8 optype; | ||
| 27 | __u8 ex; | ||
| 28 | __u8 wait; | ||
| 29 | __u8 pad; | ||
| 30 | __u32 pid; | ||
| 31 | __s32 nodeid; | ||
| 32 | __s32 rv; | ||
| 33 | __u32 fsid; | ||
| 34 | __u64 number; | ||
| 35 | __u64 start; | ||
| 36 | __u64 end; | ||
| 37 | __u64 owner; | ||
| 38 | }; | ||
| 39 | |||
| 40 | #endif | ||
| 41 | |||
diff --git a/include/linux/lockd/bind.h b/include/linux/lockd/bind.h index 81e3a185f951..aa50d89eacd7 100644 --- a/include/linux/lockd/bind.h +++ b/include/linux/lockd/bind.h | |||
| @@ -10,6 +10,11 @@ | |||
| 10 | #define LINUX_LOCKD_BIND_H | 10 | #define LINUX_LOCKD_BIND_H |
| 11 | 11 | ||
| 12 | #include <linux/lockd/nlm.h> | 12 | #include <linux/lockd/nlm.h> |
| 13 | /* need xdr-encoded error codes too, so... */ | ||
| 14 | #include <linux/lockd/xdr.h> | ||
| 15 | #ifdef CONFIG_LOCKD_V4 | ||
| 16 | #include <linux/lockd/xdr4.h> | ||
| 17 | #endif | ||
| 13 | 18 | ||
| 14 | /* Dummy declarations */ | 19 | /* Dummy declarations */ |
| 15 | struct svc_rqst; | 20 | struct svc_rqst; |
diff --git a/include/linux/lockd/lockd.h b/include/linux/lockd/lockd.h index 47b7dbd647a6..862d9730a60d 100644 --- a/include/linux/lockd/lockd.h +++ b/include/linux/lockd/lockd.h | |||
| @@ -37,17 +37,15 @@ | |||
| 37 | * Lockd host handle (used both by the client and server personality). | 37 | * Lockd host handle (used both by the client and server personality). |
| 38 | */ | 38 | */ |
| 39 | struct nlm_host { | 39 | struct nlm_host { |
| 40 | struct nlm_host * h_next; /* linked list (hash table) */ | 40 | struct hlist_node h_hash; /* doubly linked list */ |
| 41 | struct sockaddr_in h_addr; /* peer address */ | 41 | struct sockaddr_in h_addr; /* peer address */ |
| 42 | struct rpc_clnt * h_rpcclnt; /* RPC client to talk to peer */ | 42 | struct rpc_clnt * h_rpcclnt; /* RPC client to talk to peer */ |
| 43 | char h_name[20]; /* remote hostname */ | 43 | char * h_name; /* remote hostname */ |
| 44 | u32 h_version; /* interface version */ | 44 | u32 h_version; /* interface version */ |
| 45 | unsigned short h_proto; /* transport proto */ | 45 | unsigned short h_proto; /* transport proto */ |
| 46 | unsigned short h_reclaiming : 1, | 46 | unsigned short h_reclaiming : 1, |
| 47 | h_server : 1, /* server side, not client side */ | 47 | h_server : 1, /* server side, not client side */ |
| 48 | h_inuse : 1, | 48 | h_inuse : 1; |
| 49 | h_killed : 1, | ||
| 50 | h_monitored : 1; | ||
| 51 | wait_queue_head_t h_gracewait; /* wait while reclaiming */ | 49 | wait_queue_head_t h_gracewait; /* wait while reclaiming */ |
| 52 | struct rw_semaphore h_rwsem; /* Reboot recovery lock */ | 50 | struct rw_semaphore h_rwsem; /* Reboot recovery lock */ |
| 53 | u32 h_state; /* pseudo-state counter */ | 51 | u32 h_state; /* pseudo-state counter */ |
| @@ -61,6 +59,16 @@ struct nlm_host { | |||
| 61 | spinlock_t h_lock; | 59 | spinlock_t h_lock; |
| 62 | struct list_head h_granted; /* Locks in GRANTED state */ | 60 | struct list_head h_granted; /* Locks in GRANTED state */ |
| 63 | struct list_head h_reclaim; /* Locks in RECLAIM state */ | 61 | struct list_head h_reclaim; /* Locks in RECLAIM state */ |
| 62 | struct nsm_handle * h_nsmhandle; /* NSM status handle */ | ||
| 63 | }; | ||
| 64 | |||
| 65 | struct nsm_handle { | ||
| 66 | struct list_head sm_link; | ||
| 67 | atomic_t sm_count; | ||
| 68 | char * sm_name; | ||
| 69 | struct sockaddr_in sm_addr; | ||
| 70 | unsigned int sm_monitored : 1, | ||
| 71 | sm_sticky : 1; /* don't unmonitor */ | ||
| 64 | }; | 72 | }; |
| 65 | 73 | ||
| 66 | /* | 74 | /* |
| @@ -96,15 +104,14 @@ struct nlm_rqst { | |||
| 96 | * an NFS client. | 104 | * an NFS client. |
| 97 | */ | 105 | */ |
| 98 | struct nlm_file { | 106 | struct nlm_file { |
| 99 | struct nlm_file * f_next; /* linked list */ | 107 | struct hlist_node f_list; /* linked list */ |
| 100 | struct nfs_fh f_handle; /* NFS file handle */ | 108 | struct nfs_fh f_handle; /* NFS file handle */ |
| 101 | struct file * f_file; /* VFS file pointer */ | 109 | struct file * f_file; /* VFS file pointer */ |
| 102 | struct nlm_share * f_shares; /* DOS shares */ | 110 | struct nlm_share * f_shares; /* DOS shares */ |
| 103 | struct nlm_block * f_blocks; /* blocked locks */ | 111 | struct list_head f_blocks; /* blocked locks */ |
| 104 | unsigned int f_locks; /* guesstimate # of locks */ | 112 | unsigned int f_locks; /* guesstimate # of locks */ |
| 105 | unsigned int f_count; /* reference count */ | 113 | unsigned int f_count; /* reference count */ |
| 106 | struct semaphore f_sema; /* avoid concurrent access */ | 114 | struct mutex f_mutex; /* avoid concurrent access */ |
| 107 | int f_hash; /* hash of f_handle */ | ||
| 108 | }; | 115 | }; |
| 109 | 116 | ||
| 110 | /* | 117 | /* |
| @@ -114,26 +121,18 @@ struct nlm_file { | |||
| 114 | #define NLM_NEVER (~(unsigned long) 0) | 121 | #define NLM_NEVER (~(unsigned long) 0) |
| 115 | struct nlm_block { | 122 | struct nlm_block { |
| 116 | struct kref b_count; /* Reference count */ | 123 | struct kref b_count; /* Reference count */ |
| 117 | struct nlm_block * b_next; /* linked list (all blocks) */ | 124 | struct list_head b_list; /* linked list of all blocks */ |
| 118 | struct nlm_block * b_fnext; /* linked list (per file) */ | 125 | struct list_head b_flist; /* linked list (per file) */ |
| 119 | struct nlm_rqst * b_call; /* RPC args & callback info */ | 126 | struct nlm_rqst * b_call; /* RPC args & callback info */ |
| 120 | struct svc_serv * b_daemon; /* NLM service */ | 127 | struct svc_serv * b_daemon; /* NLM service */ |
| 121 | struct nlm_host * b_host; /* host handle for RPC clnt */ | 128 | struct nlm_host * b_host; /* host handle for RPC clnt */ |
| 122 | unsigned long b_when; /* next re-xmit */ | 129 | unsigned long b_when; /* next re-xmit */ |
| 123 | unsigned int b_id; /* block id */ | 130 | unsigned int b_id; /* block id */ |
| 124 | unsigned char b_queued; /* re-queued */ | ||
| 125 | unsigned char b_granted; /* VFS granted lock */ | 131 | unsigned char b_granted; /* VFS granted lock */ |
| 126 | struct nlm_file * b_file; /* file in question */ | 132 | struct nlm_file * b_file; /* file in question */ |
| 127 | }; | 133 | }; |
| 128 | 134 | ||
| 129 | /* | 135 | /* |
| 130 | * Valid actions for nlmsvc_traverse_files | ||
| 131 | */ | ||
| 132 | #define NLM_ACT_CHECK 0 /* check for locks */ | ||
| 133 | #define NLM_ACT_MARK 1 /* mark & sweep */ | ||
| 134 | #define NLM_ACT_UNLOCK 2 /* release all locks */ | ||
| 135 | |||
| 136 | /* | ||
| 137 | * Global variables | 136 | * Global variables |
| 138 | */ | 137 | */ |
| 139 | extern struct rpc_program nlm_program; | 138 | extern struct rpc_program nlm_program; |
| @@ -143,6 +142,7 @@ extern struct svc_procedure nlmsvc_procedures4[]; | |||
| 143 | #endif | 142 | #endif |
| 144 | extern int nlmsvc_grace_period; | 143 | extern int nlmsvc_grace_period; |
| 145 | extern unsigned long nlmsvc_timeout; | 144 | extern unsigned long nlmsvc_timeout; |
| 145 | extern int nsm_use_hostnames; | ||
| 146 | 146 | ||
| 147 | /* | 147 | /* |
| 148 | * Lockd client functions | 148 | * Lockd client functions |
| @@ -154,42 +154,51 @@ int nlm_async_reply(struct nlm_rqst *, u32, const struct rpc_call_ops *); | |||
| 154 | struct nlm_wait * nlmclnt_prepare_block(struct nlm_host *host, struct file_lock *fl); | 154 | struct nlm_wait * nlmclnt_prepare_block(struct nlm_host *host, struct file_lock *fl); |
| 155 | void nlmclnt_finish_block(struct nlm_wait *block); | 155 | void nlmclnt_finish_block(struct nlm_wait *block); |
| 156 | int nlmclnt_block(struct nlm_wait *block, struct nlm_rqst *req, long timeout); | 156 | int nlmclnt_block(struct nlm_wait *block, struct nlm_rqst *req, long timeout); |
| 157 | u32 nlmclnt_grant(const struct sockaddr_in *addr, const struct nlm_lock *); | 157 | __be32 nlmclnt_grant(const struct sockaddr_in *addr, const struct nlm_lock *); |
| 158 | void nlmclnt_recovery(struct nlm_host *, u32); | 158 | void nlmclnt_recovery(struct nlm_host *); |
| 159 | int nlmclnt_reclaim(struct nlm_host *, struct file_lock *); | 159 | int nlmclnt_reclaim(struct nlm_host *, struct file_lock *); |
| 160 | void nlmclnt_next_cookie(struct nlm_cookie *); | ||
| 160 | 161 | ||
| 161 | /* | 162 | /* |
| 162 | * Host cache | 163 | * Host cache |
| 163 | */ | 164 | */ |
| 164 | struct nlm_host * nlmclnt_lookup_host(struct sockaddr_in *, int, int); | 165 | struct nlm_host * nlmclnt_lookup_host(const struct sockaddr_in *, int, int, const char *, int); |
| 165 | struct nlm_host * nlmsvc_lookup_host(struct svc_rqst *); | 166 | struct nlm_host * nlmsvc_lookup_host(struct svc_rqst *, const char *, int); |
| 166 | struct nlm_host * nlm_lookup_host(int server, struct sockaddr_in *, int, int); | 167 | struct nlm_host * nlm_lookup_host(int server, const struct sockaddr_in *, int, int, const char *, int); |
| 167 | struct rpc_clnt * nlm_bind_host(struct nlm_host *); | 168 | struct rpc_clnt * nlm_bind_host(struct nlm_host *); |
| 168 | void nlm_rebind_host(struct nlm_host *); | 169 | void nlm_rebind_host(struct nlm_host *); |
| 169 | struct nlm_host * nlm_get_host(struct nlm_host *); | 170 | struct nlm_host * nlm_get_host(struct nlm_host *); |
| 170 | void nlm_release_host(struct nlm_host *); | 171 | void nlm_release_host(struct nlm_host *); |
| 171 | void nlm_shutdown_hosts(void); | 172 | void nlm_shutdown_hosts(void); |
| 172 | extern struct nlm_host *nlm_find_client(void); | 173 | extern void nlm_host_rebooted(const struct sockaddr_in *, const char *, int, u32); |
| 174 | struct nsm_handle *nsm_find(const struct sockaddr_in *, const char *, int); | ||
| 175 | void nsm_release(struct nsm_handle *); | ||
| 176 | |||
| 173 | 177 | ||
| 178 | /* | ||
| 179 | * This is used in garbage collection and resource reclaim | ||
| 180 | * A return value != 0 means destroy the lock/block/share | ||
| 181 | */ | ||
| 182 | typedef int (*nlm_host_match_fn_t)(struct nlm_host *cur, struct nlm_host *ref); | ||
| 174 | 183 | ||
| 175 | /* | 184 | /* |
| 176 | * Server-side lock handling | 185 | * Server-side lock handling |
| 177 | */ | 186 | */ |
| 178 | u32 nlmsvc_lock(struct svc_rqst *, struct nlm_file *, | 187 | __be32 nlmsvc_lock(struct svc_rqst *, struct nlm_file *, |
| 179 | struct nlm_lock *, int, struct nlm_cookie *); | 188 | struct nlm_lock *, int, struct nlm_cookie *); |
| 180 | u32 nlmsvc_unlock(struct nlm_file *, struct nlm_lock *); | 189 | __be32 nlmsvc_unlock(struct nlm_file *, struct nlm_lock *); |
| 181 | u32 nlmsvc_testlock(struct nlm_file *, struct nlm_lock *, | 190 | __be32 nlmsvc_testlock(struct nlm_file *, struct nlm_lock *, |
| 182 | struct nlm_lock *); | 191 | struct nlm_lock *); |
| 183 | u32 nlmsvc_cancel_blocked(struct nlm_file *, struct nlm_lock *); | 192 | __be32 nlmsvc_cancel_blocked(struct nlm_file *, struct nlm_lock *); |
| 184 | unsigned long nlmsvc_retry_blocked(void); | 193 | unsigned long nlmsvc_retry_blocked(void); |
| 185 | void nlmsvc_traverse_blocks(struct nlm_host *, struct nlm_file *, | 194 | void nlmsvc_traverse_blocks(struct nlm_host *, struct nlm_file *, |
| 186 | int action); | 195 | nlm_host_match_fn_t match); |
| 187 | void nlmsvc_grant_reply(struct svc_rqst *, struct nlm_cookie *, u32); | 196 | void nlmsvc_grant_reply(struct nlm_cookie *, u32); |
| 188 | 197 | ||
| 189 | /* | 198 | /* |
| 190 | * File handling for the server personality | 199 | * File handling for the server personality |
| 191 | */ | 200 | */ |
| 192 | u32 nlm_lookup_file(struct svc_rqst *, struct nlm_file **, | 201 | __be32 nlm_lookup_file(struct svc_rqst *, struct nlm_file **, |
| 193 | struct nfs_fh *); | 202 | struct nfs_fh *); |
| 194 | void nlm_release_file(struct nlm_file *); | 203 | void nlm_release_file(struct nlm_file *); |
| 195 | void nlmsvc_mark_resources(void); | 204 | void nlmsvc_mark_resources(void); |
diff --git a/include/linux/lockd/share.h b/include/linux/lockd/share.h index c75a424ebe4c..630c5bf69b07 100644 --- a/include/linux/lockd/share.h +++ b/include/linux/lockd/share.h | |||
| @@ -21,10 +21,11 @@ struct nlm_share { | |||
| 21 | u32 s_mode; /* deny mode */ | 21 | u32 s_mode; /* deny mode */ |
| 22 | }; | 22 | }; |
| 23 | 23 | ||
| 24 | u32 nlmsvc_share_file(struct nlm_host *, struct nlm_file *, | 24 | __be32 nlmsvc_share_file(struct nlm_host *, struct nlm_file *, |
| 25 | struct nlm_args *); | 25 | struct nlm_args *); |
| 26 | u32 nlmsvc_unshare_file(struct nlm_host *, struct nlm_file *, | 26 | __be32 nlmsvc_unshare_file(struct nlm_host *, struct nlm_file *, |
| 27 | struct nlm_args *); | 27 | struct nlm_args *); |
| 28 | void nlmsvc_traverse_shares(struct nlm_host *, struct nlm_file *, int); | 28 | void nlmsvc_traverse_shares(struct nlm_host *, struct nlm_file *, |
| 29 | nlm_host_match_fn_t); | ||
| 29 | 30 | ||
| 30 | #endif /* LINUX_LOCKD_SHARE_H */ | 31 | #endif /* LINUX_LOCKD_SHARE_H */ |
diff --git a/include/linux/lockd/sm_inter.h b/include/linux/lockd/sm_inter.h index 1080bb6ae315..fc61d40964da 100644 --- a/include/linux/lockd/sm_inter.h +++ b/include/linux/lockd/sm_inter.h | |||
| @@ -28,7 +28,8 @@ struct nsm_args { | |||
| 28 | u32 prog; /* RPC callback info */ | 28 | u32 prog; /* RPC callback info */ |
| 29 | u32 vers; | 29 | u32 vers; |
| 30 | u32 proc; | 30 | u32 proc; |
| 31 | u32 proto; /* protocol (udp/tcp) plus server/client flag */ | 31 | |
| 32 | char * mon_name; | ||
| 32 | }; | 33 | }; |
| 33 | 34 | ||
| 34 | /* | 35 | /* |
| @@ -41,6 +42,6 @@ struct nsm_res { | |||
| 41 | 42 | ||
| 42 | int nsm_monitor(struct nlm_host *); | 43 | int nsm_monitor(struct nlm_host *); |
| 43 | int nsm_unmonitor(struct nlm_host *); | 44 | int nsm_unmonitor(struct nlm_host *); |
| 44 | extern u32 nsm_local_state; | 45 | extern int nsm_local_state; |
| 45 | 46 | ||
| 46 | #endif /* LINUX_LOCKD_SM_INTER_H */ | 47 | #endif /* LINUX_LOCKD_SM_INTER_H */ |
diff --git a/include/linux/lockd/xdr.h b/include/linux/lockd/xdr.h index bb0a0f1caa91..29e7d9fc9dad 100644 --- a/include/linux/lockd/xdr.h +++ b/include/linux/lockd/xdr.h | |||
| @@ -13,6 +13,8 @@ | |||
| 13 | #include <linux/nfs.h> | 13 | #include <linux/nfs.h> |
| 14 | #include <linux/sunrpc/xdr.h> | 14 | #include <linux/sunrpc/xdr.h> |
| 15 | 15 | ||
| 16 | struct svc_rqst; | ||
| 17 | |||
| 16 | #define NLM_MAXCOOKIELEN 32 | 18 | #define NLM_MAXCOOKIELEN 32 |
| 17 | #define NLM_MAXSTRLEN 1024 | 19 | #define NLM_MAXSTRLEN 1024 |
| 18 | 20 | ||
| @@ -22,6 +24,8 @@ | |||
| 22 | #define nlm_lck_blocked __constant_htonl(NLM_LCK_BLOCKED) | 24 | #define nlm_lck_blocked __constant_htonl(NLM_LCK_BLOCKED) |
| 23 | #define nlm_lck_denied_grace_period __constant_htonl(NLM_LCK_DENIED_GRACE_PERIOD) | 25 | #define nlm_lck_denied_grace_period __constant_htonl(NLM_LCK_DENIED_GRACE_PERIOD) |
| 24 | 26 | ||
| 27 | #define nlm_drop_reply __constant_htonl(30000) | ||
| 28 | |||
| 25 | /* Lock info passed via NLM */ | 29 | /* Lock info passed via NLM */ |
| 26 | struct nlm_lock { | 30 | struct nlm_lock { |
| 27 | char * caller; | 31 | char * caller; |
| @@ -86,19 +90,19 @@ struct nlm_reboot { | |||
| 86 | */ | 90 | */ |
| 87 | #define NLMSVC_XDRSIZE sizeof(struct nlm_args) | 91 | #define NLMSVC_XDRSIZE sizeof(struct nlm_args) |
| 88 | 92 | ||
| 89 | int nlmsvc_decode_testargs(struct svc_rqst *, u32 *, struct nlm_args *); | 93 | int nlmsvc_decode_testargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
| 90 | int nlmsvc_encode_testres(struct svc_rqst *, u32 *, struct nlm_res *); | 94 | int nlmsvc_encode_testres(struct svc_rqst *, __be32 *, struct nlm_res *); |
| 91 | int nlmsvc_decode_lockargs(struct svc_rqst *, u32 *, struct nlm_args *); | 95 | int nlmsvc_decode_lockargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
| 92 | int nlmsvc_decode_cancargs(struct svc_rqst *, u32 *, struct nlm_args *); | 96 | int nlmsvc_decode_cancargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
| 93 | int nlmsvc_decode_unlockargs(struct svc_rqst *, u32 *, struct nlm_args *); | 97 | int nlmsvc_decode_unlockargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
| 94 | int nlmsvc_encode_res(struct svc_rqst *, u32 *, struct nlm_res *); | 98 | int nlmsvc_encode_res(struct svc_rqst *, __be32 *, struct nlm_res *); |
| 95 | int nlmsvc_decode_res(struct svc_rqst *, u32 *, struct nlm_res *); | 99 | int nlmsvc_decode_res(struct svc_rqst *, __be32 *, struct nlm_res *); |
| 96 | int nlmsvc_encode_void(struct svc_rqst *, u32 *, void *); | 100 | int nlmsvc_encode_void(struct svc_rqst *, __be32 *, void *); |
| 97 | int nlmsvc_decode_void(struct svc_rqst *, u32 *, void *); | 101 | int nlmsvc_decode_void(struct svc_rqst *, __be32 *, void *); |
| 98 | int nlmsvc_decode_shareargs(struct svc_rqst *, u32 *, struct nlm_args *); | 102 | int nlmsvc_decode_shareargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
| 99 | int nlmsvc_encode_shareres(struct svc_rqst *, u32 *, struct nlm_res *); | 103 | int nlmsvc_encode_shareres(struct svc_rqst *, __be32 *, struct nlm_res *); |
| 100 | int nlmsvc_decode_notify(struct svc_rqst *, u32 *, struct nlm_args *); | 104 | int nlmsvc_decode_notify(struct svc_rqst *, __be32 *, struct nlm_args *); |
| 101 | int nlmsvc_decode_reboot(struct svc_rqst *, u32 *, struct nlm_reboot *); | 105 | int nlmsvc_decode_reboot(struct svc_rqst *, __be32 *, struct nlm_reboot *); |
| 102 | /* | 106 | /* |
| 103 | int nlmclt_encode_testargs(struct rpc_rqst *, u32 *, struct nlm_args *); | 107 | int nlmclt_encode_testargs(struct rpc_rqst *, u32 *, struct nlm_args *); |
| 104 | int nlmclt_encode_lockargs(struct rpc_rqst *, u32 *, struct nlm_args *); | 108 | int nlmclt_encode_lockargs(struct rpc_rqst *, u32 *, struct nlm_args *); |
diff --git a/include/linux/lockd/xdr4.h b/include/linux/lockd/xdr4.h index 3cc1ae25009b..dd12b4c9e613 100644 --- a/include/linux/lockd/xdr4.h +++ b/include/linux/lockd/xdr4.h | |||
| @@ -23,19 +23,19 @@ | |||
| 23 | 23 | ||
| 24 | 24 | ||
| 25 | 25 | ||
| 26 | int nlm4svc_decode_testargs(struct svc_rqst *, u32 *, struct nlm_args *); | 26 | int nlm4svc_decode_testargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
| 27 | int nlm4svc_encode_testres(struct svc_rqst *, u32 *, struct nlm_res *); | 27 | int nlm4svc_encode_testres(struct svc_rqst *, __be32 *, struct nlm_res *); |
| 28 | int nlm4svc_decode_lockargs(struct svc_rqst *, u32 *, struct nlm_args *); | 28 | int nlm4svc_decode_lockargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
| 29 | int nlm4svc_decode_cancargs(struct svc_rqst *, u32 *, struct nlm_args *); | 29 | int nlm4svc_decode_cancargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
| 30 | int nlm4svc_decode_unlockargs(struct svc_rqst *, u32 *, struct nlm_args *); | 30 | int nlm4svc_decode_unlockargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
| 31 | int nlm4svc_encode_res(struct svc_rqst *, u32 *, struct nlm_res *); | 31 | int nlm4svc_encode_res(struct svc_rqst *, __be32 *, struct nlm_res *); |
| 32 | int nlm4svc_decode_res(struct svc_rqst *, u32 *, struct nlm_res *); | 32 | int nlm4svc_decode_res(struct svc_rqst *, __be32 *, struct nlm_res *); |
| 33 | int nlm4svc_encode_void(struct svc_rqst *, u32 *, void *); | 33 | int nlm4svc_encode_void(struct svc_rqst *, __be32 *, void *); |
| 34 | int nlm4svc_decode_void(struct svc_rqst *, u32 *, void *); | 34 | int nlm4svc_decode_void(struct svc_rqst *, __be32 *, void *); |
| 35 | int nlm4svc_decode_shareargs(struct svc_rqst *, u32 *, struct nlm_args *); | 35 | int nlm4svc_decode_shareargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
| 36 | int nlm4svc_encode_shareres(struct svc_rqst *, u32 *, struct nlm_res *); | 36 | int nlm4svc_encode_shareres(struct svc_rqst *, __be32 *, struct nlm_res *); |
| 37 | int nlm4svc_decode_notify(struct svc_rqst *, u32 *, struct nlm_args *); | 37 | int nlm4svc_decode_notify(struct svc_rqst *, __be32 *, struct nlm_args *); |
| 38 | int nlm4svc_decode_reboot(struct svc_rqst *, u32 *, struct nlm_reboot *); | 38 | int nlm4svc_decode_reboot(struct svc_rqst *, __be32 *, struct nlm_reboot *); |
| 39 | /* | 39 | /* |
| 40 | int nlmclt_encode_testargs(struct rpc_rqst *, u32 *, struct nlm_args *); | 40 | int nlmclt_encode_testargs(struct rpc_rqst *, u32 *, struct nlm_args *); |
| 41 | int nlmclt_encode_lockargs(struct rpc_rqst *, u32 *, struct nlm_args *); | 41 | int nlmclt_encode_lockargs(struct rpc_rqst *, u32 *, struct nlm_args *); |
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index 1314ca0f29be..819f08f1310d 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h | |||
| @@ -202,7 +202,7 @@ extern int lockdep_internal(void); | |||
| 202 | */ | 202 | */ |
| 203 | 203 | ||
| 204 | extern void lockdep_init_map(struct lockdep_map *lock, const char *name, | 204 | extern void lockdep_init_map(struct lockdep_map *lock, const char *name, |
| 205 | struct lock_class_key *key); | 205 | struct lock_class_key *key, int subclass); |
| 206 | 206 | ||
| 207 | /* | 207 | /* |
| 208 | * Reinitialize a lock key - for cases where there is special locking or | 208 | * Reinitialize a lock key - for cases where there is special locking or |
| @@ -211,9 +211,14 @@ extern void lockdep_init_map(struct lockdep_map *lock, const char *name, | |||
| 211 | * or they are too narrow (they suffer from a false class-split): | 211 | * or they are too narrow (they suffer from a false class-split): |
| 212 | */ | 212 | */ |
| 213 | #define lockdep_set_class(lock, key) \ | 213 | #define lockdep_set_class(lock, key) \ |
| 214 | lockdep_init_map(&(lock)->dep_map, #key, key) | 214 | lockdep_init_map(&(lock)->dep_map, #key, key, 0) |
| 215 | #define lockdep_set_class_and_name(lock, key, name) \ | 215 | #define lockdep_set_class_and_name(lock, key, name) \ |
| 216 | lockdep_init_map(&(lock)->dep_map, name, key) | 216 | lockdep_init_map(&(lock)->dep_map, name, key, 0) |
| 217 | #define lockdep_set_class_and_subclass(lock, key, sub) \ | ||
| 218 | lockdep_init_map(&(lock)->dep_map, #key, key, sub) | ||
| 219 | #define lockdep_set_subclass(lock, sub) \ | ||
| 220 | lockdep_init_map(&(lock)->dep_map, #lock, \ | ||
| 221 | (lock)->dep_map.key, sub) | ||
| 217 | 222 | ||
| 218 | /* | 223 | /* |
| 219 | * Acquire a lock. | 224 | * Acquire a lock. |
| @@ -257,10 +262,14 @@ static inline int lockdep_internal(void) | |||
| 257 | # define lock_release(l, n, i) do { } while (0) | 262 | # define lock_release(l, n, i) do { } while (0) |
| 258 | # define lockdep_init() do { } while (0) | 263 | # define lockdep_init() do { } while (0) |
| 259 | # define lockdep_info() do { } while (0) | 264 | # define lockdep_info() do { } while (0) |
| 260 | # define lockdep_init_map(lock, name, key) do { (void)(key); } while (0) | 265 | # define lockdep_init_map(lock, name, key, sub) do { (void)(key); } while (0) |
| 261 | # define lockdep_set_class(lock, key) do { (void)(key); } while (0) | 266 | # define lockdep_set_class(lock, key) do { (void)(key); } while (0) |
| 262 | # define lockdep_set_class_and_name(lock, key, name) \ | 267 | # define lockdep_set_class_and_name(lock, key, name) \ |
| 263 | do { (void)(key); } while (0) | 268 | do { (void)(key); } while (0) |
| 269 | #define lockdep_set_class_and_subclass(lock, key, sub) \ | ||
| 270 | do { (void)(key); } while (0) | ||
| 271 | #define lockdep_set_subclass(lock, sub) do { } while (0) | ||
| 272 | |||
| 264 | # define INIT_LOCKDEP | 273 | # define INIT_LOCKDEP |
| 265 | # define lockdep_reset() do { debug_locks = 1; } while (0) | 274 | # define lockdep_reset() do { debug_locks = 1; } while (0) |
| 266 | # define lockdep_free_key_range(start, size) do { } while (0) | 275 | # define lockdep_free_key_range(start, size) do { } while (0) |
diff --git a/include/linux/magic.h b/include/linux/magic.h index 22036dd2ba36..156c40fc664e 100644 --- a/include/linux/magic.h +++ b/include/linux/magic.h | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #define EFS_SUPER_MAGIC 0x414A53 | 8 | #define EFS_SUPER_MAGIC 0x414A53 |
| 9 | #define EXT2_SUPER_MAGIC 0xEF53 | 9 | #define EXT2_SUPER_MAGIC 0xEF53 |
| 10 | #define EXT3_SUPER_MAGIC 0xEF53 | 10 | #define EXT3_SUPER_MAGIC 0xEF53 |
| 11 | #define EXT4_SUPER_MAGIC 0xEF53 | ||
| 11 | #define HPFS_SUPER_MAGIC 0xf995e849 | 12 | #define HPFS_SUPER_MAGIC 0xf995e849 |
| 12 | #define ISOFS_SUPER_MAGIC 0x9660 | 13 | #define ISOFS_SUPER_MAGIC 0x9660 |
| 13 | #define JFFS2_SUPER_MAGIC 0x72b6 | 14 | #define JFFS2_SUPER_MAGIC 0x72b6 |
diff --git a/include/linux/mm.h b/include/linux/mm.h index b7966ab8cb6a..d538de901965 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
| @@ -593,6 +593,7 @@ static inline int page_mapped(struct page *page) | |||
| 593 | */ | 593 | */ |
| 594 | #define NOPAGE_SIGBUS (NULL) | 594 | #define NOPAGE_SIGBUS (NULL) |
| 595 | #define NOPAGE_OOM ((struct page *) (-1)) | 595 | #define NOPAGE_OOM ((struct page *) (-1)) |
| 596 | #define NOPAGE_REFAULT ((struct page *) (-2)) /* Return to userspace, rerun */ | ||
| 596 | 597 | ||
| 597 | /* | 598 | /* |
| 598 | * Error return values for the *_nopfn functions | 599 | * Error return values for the *_nopfn functions |
| @@ -1102,12 +1103,7 @@ static inline void vm_stat_account(struct mm_struct *mm, | |||
| 1102 | 1103 | ||
| 1103 | #ifndef CONFIG_DEBUG_PAGEALLOC | 1104 | #ifndef CONFIG_DEBUG_PAGEALLOC |
| 1104 | static inline void | 1105 | static inline void |
| 1105 | kernel_map_pages(struct page *page, int numpages, int enable) | 1106 | kernel_map_pages(struct page *page, int numpages, int enable) {} |
| 1106 | { | ||
| 1107 | if (!PageHighMem(page) && !enable) | ||
| 1108 | debug_check_no_locks_freed(page_address(page), | ||
| 1109 | numpages * PAGE_SIZE); | ||
| 1110 | } | ||
| 1111 | #endif | 1107 | #endif |
| 1112 | 1108 | ||
| 1113 | extern struct vm_area_struct *get_gate_vma(struct task_struct *tsk); | 1109 | extern struct vm_area_struct *get_gate_vma(struct task_struct *tsk); |
| @@ -1119,9 +1115,6 @@ int in_gate_area_no_task(unsigned long addr); | |||
| 1119 | #define in_gate_area(task, addr) ({(void)task; in_gate_area_no_task(addr);}) | 1115 | #define in_gate_area(task, addr) ({(void)task; in_gate_area_no_task(addr);}) |
| 1120 | #endif /* __HAVE_ARCH_GATE_AREA */ | 1116 | #endif /* __HAVE_ARCH_GATE_AREA */ |
| 1121 | 1117 | ||
| 1122 | /* /proc/<pid>/oom_adj set to -17 protects from the oom-killer */ | ||
| 1123 | #define OOM_DISABLE -17 | ||
| 1124 | |||
| 1125 | int drop_caches_sysctl_handler(struct ctl_table *, int, struct file *, | 1118 | int drop_caches_sysctl_handler(struct ctl_table *, int, struct file *, |
| 1126 | void __user *, size_t *, loff_t *); | 1119 | void __user *, size_t *, loff_t *); |
| 1127 | unsigned long shrink_slab(unsigned long scanned, gfp_t gfp_mask, | 1120 | unsigned long shrink_slab(unsigned long scanned, gfp_t gfp_mask, |
diff --git a/include/linux/mmc/protocol.h b/include/linux/mmc/protocol.h index 81c3f77f652c..08dec8d9e703 100644 --- a/include/linux/mmc/protocol.h +++ b/include/linux/mmc/protocol.h | |||
| @@ -83,6 +83,7 @@ | |||
| 83 | 83 | ||
| 84 | /* Application commands */ | 84 | /* Application commands */ |
| 85 | #define SD_APP_SET_BUS_WIDTH 6 /* ac [1:0] bus width R1 */ | 85 | #define SD_APP_SET_BUS_WIDTH 6 /* ac [1:0] bus width R1 */ |
| 86 | #define SD_APP_SEND_NUM_WR_BLKS 22 /* adtc R1 */ | ||
| 86 | #define SD_APP_OP_COND 41 /* bcr [31:0] OCR R3 */ | 87 | #define SD_APP_OP_COND 41 /* bcr [31:0] OCR R3 */ |
| 87 | #define SD_APP_SEND_SCR 51 /* adtc R1 */ | 88 | #define SD_APP_SEND_SCR 51 /* adtc R1 */ |
| 88 | 89 | ||
diff --git a/include/linux/module.h b/include/linux/module.h index 4b2d8091a410..d1d00ce8f4ed 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
| @@ -317,9 +317,6 @@ struct module | |||
| 317 | /* Am I unsafe to unload? */ | 317 | /* Am I unsafe to unload? */ |
| 318 | int unsafe; | 318 | int unsafe; |
| 319 | 319 | ||
| 320 | /* Am I GPL-compatible */ | ||
| 321 | int license_gplok; | ||
| 322 | |||
| 323 | unsigned int taints; /* same bits as kernel:tainted */ | 320 | unsigned int taints; /* same bits as kernel:tainted */ |
| 324 | 321 | ||
| 325 | #ifdef CONFIG_MODULE_UNLOAD | 322 | #ifdef CONFIG_MODULE_UNLOAD |
diff --git a/include/linux/msi.h b/include/linux/msi.h new file mode 100644 index 000000000000..c7ef94343673 --- /dev/null +++ b/include/linux/msi.h | |||
| @@ -0,0 +1,49 @@ | |||
| 1 | #ifndef LINUX_MSI_H | ||
| 2 | #define LINUX_MSI_H | ||
| 3 | |||
| 4 | struct msi_msg { | ||
| 5 | u32 address_lo; /* low 32 bits of msi message address */ | ||
| 6 | u32 address_hi; /* high 32 bits of msi message address */ | ||
| 7 | u32 data; /* 16 bits of msi message data */ | ||
| 8 | }; | ||
| 9 | |||
| 10 | /* Heper functions */ | ||
| 11 | extern void mask_msi_irq(unsigned int irq); | ||
| 12 | extern void unmask_msi_irq(unsigned int irq); | ||
| 13 | extern void read_msi_msg(unsigned int irq, struct msi_msg *msg); | ||
| 14 | |||
| 15 | extern void write_msi_msg(unsigned int irq, struct msi_msg *msg); | ||
| 16 | |||
| 17 | struct msi_desc { | ||
| 18 | struct { | ||
| 19 | __u8 type : 5; /* {0: unused, 5h:MSI, 11h:MSI-X} */ | ||
| 20 | __u8 maskbit : 1; /* mask-pending bit supported ? */ | ||
| 21 | __u8 unused : 1; | ||
| 22 | __u8 is_64 : 1; /* Address size: 0=32bit 1=64bit */ | ||
| 23 | __u8 pos; /* Location of the msi capability */ | ||
| 24 | __u16 entry_nr; /* specific enabled entry */ | ||
| 25 | unsigned default_irq; /* default pre-assigned irq */ | ||
| 26 | }msi_attrib; | ||
| 27 | |||
| 28 | struct { | ||
| 29 | __u16 head; | ||
| 30 | __u16 tail; | ||
| 31 | }link; | ||
| 32 | |||
| 33 | void __iomem *mask_base; | ||
| 34 | struct pci_dev *dev; | ||
| 35 | |||
| 36 | #ifdef CONFIG_PM | ||
| 37 | /* PM save area for MSIX address/data */ | ||
| 38 | struct msi_msg msg_save; | ||
| 39 | #endif | ||
| 40 | }; | ||
| 41 | |||
| 42 | /* | ||
| 43 | * The arch hook for setup up msi irqs | ||
| 44 | */ | ||
| 45 | int arch_setup_msi_irq(unsigned int irq, struct pci_dev *dev); | ||
| 46 | void arch_teardown_msi_irq(unsigned int irq); | ||
| 47 | |||
| 48 | |||
| 49 | #endif /* LINUX_MSI_H */ | ||
diff --git a/include/linux/nbd.h b/include/linux/nbd.h index e712e7d47cc2..d6b6dc09ad97 100644 --- a/include/linux/nbd.h +++ b/include/linux/nbd.h | |||
| @@ -15,6 +15,8 @@ | |||
| 15 | #ifndef LINUX_NBD_H | 15 | #ifndef LINUX_NBD_H |
| 16 | #define LINUX_NBD_H | 16 | #define LINUX_NBD_H |
| 17 | 17 | ||
| 18 | #include <linux/types.h> | ||
| 19 | |||
| 18 | #define NBD_SET_SOCK _IO( 0xab, 0 ) | 20 | #define NBD_SET_SOCK _IO( 0xab, 0 ) |
| 19 | #define NBD_SET_BLKSIZE _IO( 0xab, 1 ) | 21 | #define NBD_SET_BLKSIZE _IO( 0xab, 1 ) |
| 20 | #define NBD_SET_SIZE _IO( 0xab, 2 ) | 22 | #define NBD_SET_SIZE _IO( 0xab, 2 ) |
diff --git a/include/linux/net.h b/include/linux/net.h index c257f716e00f..15c733b816f0 100644 --- a/include/linux/net.h +++ b/include/linux/net.h | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #define _LINUX_NET_H | 19 | #define _LINUX_NET_H |
| 20 | 20 | ||
| 21 | #include <linux/wait.h> | 21 | #include <linux/wait.h> |
| 22 | #include <linux/random.h> | ||
| 22 | #include <asm/socket.h> | 23 | #include <asm/socket.h> |
| 23 | 24 | ||
| 24 | struct poll_table_struct; | 25 | struct poll_table_struct; |
| @@ -193,9 +194,9 @@ extern int sock_map_fd(struct socket *sock); | |||
| 193 | extern struct socket *sockfd_lookup(int fd, int *err); | 194 | extern struct socket *sockfd_lookup(int fd, int *err); |
| 194 | #define sockfd_put(sock) fput(sock->file) | 195 | #define sockfd_put(sock) fput(sock->file) |
| 195 | extern int net_ratelimit(void); | 196 | extern int net_ratelimit(void); |
| 196 | extern unsigned long net_random(void); | 197 | |
| 197 | extern void net_srandom(unsigned long); | 198 | #define net_random() random32() |
| 198 | extern void net_random_init(void); | 199 | #define net_srandom(seed) srandom32(seed) |
| 199 | 200 | ||
| 200 | extern int kernel_sendmsg(struct socket *sock, struct msghdr *msg, | 201 | extern int kernel_sendmsg(struct socket *sock, struct msghdr *msg, |
| 201 | struct kvec *vec, size_t num, size_t len); | 202 | struct kvec *vec, size_t num, size_t len); |
diff --git a/include/linux/netfilter_bridge/ebt_mark_t.h b/include/linux/netfilter_bridge/ebt_mark_t.h index 110fec6a40a2..6270f6f33693 100644 --- a/include/linux/netfilter_bridge/ebt_mark_t.h +++ b/include/linux/netfilter_bridge/ebt_mark_t.h | |||
| @@ -1,6 +1,18 @@ | |||
| 1 | #ifndef __LINUX_BRIDGE_EBT_MARK_T_H | 1 | #ifndef __LINUX_BRIDGE_EBT_MARK_T_H |
| 2 | #define __LINUX_BRIDGE_EBT_MARK_T_H | 2 | #define __LINUX_BRIDGE_EBT_MARK_T_H |
| 3 | 3 | ||
| 4 | /* The target member is reused for adding new actions, the | ||
| 5 | * value of the real target is -1 to -NUM_STANDARD_TARGETS. | ||
| 6 | * For backward compatibility, the 4 lsb (2 would be enough, | ||
| 7 | * but let's play it safe) are kept to designate this target. | ||
| 8 | * The remaining bits designate the action. By making the set | ||
| 9 | * action 0xfffffff0, the result will look ok for older | ||
| 10 | * versions. [September 2006] */ | ||
| 11 | #define MARK_SET_VALUE (0xfffffff0) | ||
| 12 | #define MARK_OR_VALUE (0xffffffe0) | ||
| 13 | #define MARK_AND_VALUE (0xffffffd0) | ||
| 14 | #define MARK_XOR_VALUE (0xffffffc0) | ||
| 15 | |||
| 4 | struct ebt_mark_t_info | 16 | struct ebt_mark_t_info |
| 5 | { | 17 | { |
| 6 | unsigned long mark; | 18 | unsigned long mark; |
diff --git a/include/linux/netfilter_ipv4.h b/include/linux/netfilter_ipv4.h index ce02c984f3ba..5b63a231a76b 100644 --- a/include/linux/netfilter_ipv4.h +++ b/include/linux/netfilter_ipv4.h | |||
| @@ -77,7 +77,7 @@ enum nf_ip_hook_priorities { | |||
| 77 | #define SO_ORIGINAL_DST 80 | 77 | #define SO_ORIGINAL_DST 80 |
| 78 | 78 | ||
| 79 | #ifdef __KERNEL__ | 79 | #ifdef __KERNEL__ |
| 80 | extern int ip_route_me_harder(struct sk_buff **pskb); | 80 | extern int ip_route_me_harder(struct sk_buff **pskb, unsigned addr_type); |
| 81 | extern int ip_xfrm_me_harder(struct sk_buff **pskb); | 81 | extern int ip_xfrm_me_harder(struct sk_buff **pskb); |
| 82 | extern unsigned int nf_ip_checksum(struct sk_buff *skb, unsigned int hook, | 82 | extern unsigned int nf_ip_checksum(struct sk_buff *skb, unsigned int hook, |
| 83 | unsigned int dataoff, u_int8_t protocol); | 83 | unsigned int dataoff, u_int8_t protocol); |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index 76ff54846ada..45228c1a1195 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
| @@ -157,7 +157,7 @@ struct nfs_inode { | |||
| 157 | * This is the cookie verifier used for NFSv3 readdir | 157 | * This is the cookie verifier used for NFSv3 readdir |
| 158 | * operations | 158 | * operations |
| 159 | */ | 159 | */ |
| 160 | __u32 cookieverf[2]; | 160 | __be32 cookieverf[2]; |
| 161 | 161 | ||
| 162 | /* | 162 | /* |
| 163 | * This is the list of dirty unwritten pages. | 163 | * This is the list of dirty unwritten pages. |
| @@ -290,6 +290,7 @@ static inline int nfs_verify_change_attribute(struct inode *inode, unsigned long | |||
| 290 | * linux/fs/nfs/inode.c | 290 | * linux/fs/nfs/inode.c |
| 291 | */ | 291 | */ |
| 292 | extern int nfs_sync_mapping(struct address_space *mapping); | 292 | extern int nfs_sync_mapping(struct address_space *mapping); |
| 293 | extern void nfs_zap_mapping(struct inode *inode, struct address_space *mapping); | ||
| 293 | extern void nfs_zap_caches(struct inode *); | 294 | extern void nfs_zap_caches(struct inode *); |
| 294 | extern struct inode *nfs_fhget(struct super_block *, struct nfs_fh *, | 295 | extern struct inode *nfs_fhget(struct super_block *, struct nfs_fh *, |
| 295 | struct nfs_fattr *); | 296 | struct nfs_fattr *); |
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index dc5397d9d23c..768c1ad5ff6f 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
| @@ -266,7 +266,7 @@ struct nfs_writeargs { | |||
| 266 | 266 | ||
| 267 | struct nfs_writeverf { | 267 | struct nfs_writeverf { |
| 268 | enum nfs3_stable_how committed; | 268 | enum nfs3_stable_how committed; |
| 269 | __u32 verifier[2]; | 269 | __be32 verifier[2]; |
| 270 | }; | 270 | }; |
| 271 | 271 | ||
| 272 | struct nfs_writeres { | 272 | struct nfs_writeres { |
| @@ -420,7 +420,7 @@ struct nfs3_createargs { | |||
| 420 | unsigned int len; | 420 | unsigned int len; |
| 421 | struct iattr * sattr; | 421 | struct iattr * sattr; |
| 422 | enum nfs3_createmode createmode; | 422 | enum nfs3_createmode createmode; |
| 423 | __u32 verifier[2]; | 423 | __be32 verifier[2]; |
| 424 | }; | 424 | }; |
| 425 | 425 | ||
| 426 | struct nfs3_mkdirargs { | 426 | struct nfs3_mkdirargs { |
| @@ -467,7 +467,7 @@ struct nfs3_linkargs { | |||
| 467 | struct nfs3_readdirargs { | 467 | struct nfs3_readdirargs { |
| 468 | struct nfs_fh * fh; | 468 | struct nfs_fh * fh; |
| 469 | __u64 cookie; | 469 | __u64 cookie; |
| 470 | __u32 verf[2]; | 470 | __be32 verf[2]; |
| 471 | int plus; | 471 | int plus; |
| 472 | unsigned int count; | 472 | unsigned int count; |
| 473 | struct page ** pages; | 473 | struct page ** pages; |
| @@ -503,7 +503,7 @@ struct nfs3_linkres { | |||
| 503 | 503 | ||
| 504 | struct nfs3_readdirres { | 504 | struct nfs3_readdirres { |
| 505 | struct nfs_fattr * dir_attr; | 505 | struct nfs_fattr * dir_attr; |
| 506 | __u32 * verf; | 506 | __be32 * verf; |
| 507 | int plus; | 507 | int plus; |
| 508 | }; | 508 | }; |
| 509 | 509 | ||
| @@ -811,7 +811,7 @@ struct nfs_rpc_ops { | |||
| 811 | int (*pathconf) (struct nfs_server *, struct nfs_fh *, | 811 | int (*pathconf) (struct nfs_server *, struct nfs_fh *, |
| 812 | struct nfs_pathconf *); | 812 | struct nfs_pathconf *); |
| 813 | int (*set_capabilities)(struct nfs_server *, struct nfs_fh *); | 813 | int (*set_capabilities)(struct nfs_server *, struct nfs_fh *); |
| 814 | u32 * (*decode_dirent)(u32 *, struct nfs_entry *, int plus); | 814 | __be32 *(*decode_dirent)(__be32 *, struct nfs_entry *, int plus); |
| 815 | void (*read_setup) (struct nfs_read_data *); | 815 | void (*read_setup) (struct nfs_read_data *); |
| 816 | int (*read_done) (struct rpc_task *, struct nfs_read_data *); | 816 | int (*read_done) (struct rpc_task *, struct nfs_read_data *); |
| 817 | void (*write_setup) (struct nfs_write_data *, int how); | 817 | void (*write_setup) (struct nfs_write_data *, int how); |
diff --git a/include/linux/nfsd/cache.h b/include/linux/nfsd/cache.h index c3a3557c2a5b..007480cd6a60 100644 --- a/include/linux/nfsd/cache.h +++ b/include/linux/nfsd/cache.h | |||
| @@ -26,14 +26,14 @@ struct svc_cacherep { | |||
| 26 | c_type, /* status, buffer */ | 26 | c_type, /* status, buffer */ |
| 27 | c_secure : 1; /* req came from port < 1024 */ | 27 | c_secure : 1; /* req came from port < 1024 */ |
| 28 | struct sockaddr_in c_addr; | 28 | struct sockaddr_in c_addr; |
| 29 | u32 c_xid; | 29 | __be32 c_xid; |
| 30 | u32 c_prot; | 30 | u32 c_prot; |
| 31 | u32 c_proc; | 31 | u32 c_proc; |
| 32 | u32 c_vers; | 32 | u32 c_vers; |
| 33 | unsigned long c_timestamp; | 33 | unsigned long c_timestamp; |
| 34 | union { | 34 | union { |
| 35 | struct kvec u_vec; | 35 | struct kvec u_vec; |
| 36 | u32 u_status; | 36 | __be32 u_status; |
| 37 | } c_u; | 37 | } c_u; |
| 38 | }; | 38 | }; |
| 39 | 39 | ||
| @@ -75,7 +75,7 @@ enum { | |||
| 75 | void nfsd_cache_init(void); | 75 | void nfsd_cache_init(void); |
| 76 | void nfsd_cache_shutdown(void); | 76 | void nfsd_cache_shutdown(void); |
| 77 | int nfsd_cache_lookup(struct svc_rqst *, int); | 77 | int nfsd_cache_lookup(struct svc_rqst *, int); |
| 78 | void nfsd_cache_update(struct svc_rqst *, int, u32 *); | 78 | void nfsd_cache_update(struct svc_rqst *, int, __be32 *); |
| 79 | 79 | ||
| 80 | #endif /* __KERNEL__ */ | 80 | #endif /* __KERNEL__ */ |
| 81 | #endif /* NFSCACHE_H */ | 81 | #endif /* NFSCACHE_H */ |
diff --git a/include/linux/nfsd/const.h b/include/linux/nfsd/const.h index b75bb1b38d09..f0cc77790527 100644 --- a/include/linux/nfsd/const.h +++ b/include/linux/nfsd/const.h | |||
| @@ -20,17 +20,31 @@ | |||
| 20 | #define NFSSVC_MAXVERS 3 | 20 | #define NFSSVC_MAXVERS 3 |
| 21 | 21 | ||
| 22 | /* | 22 | /* |
| 23 | * Maximum blocksize supported by daemon currently at 32K | 23 | * Maximum blocksizes supported by daemon under various circumstances. |
| 24 | */ | 24 | */ |
| 25 | #define NFSSVC_MAXBLKSIZE (32*1024) | 25 | #define NFSSVC_MAXBLKSIZE RPCSVC_MAXPAYLOAD |
| 26 | /* NFSv2 is limited by the protocol specification, see RFC 1094 */ | ||
| 27 | #define NFSSVC_MAXBLKSIZE_V2 (8*1024) | ||
| 26 | 28 | ||
| 27 | #ifdef __KERNEL__ | 29 | #ifdef __KERNEL__ |
| 28 | 30 | ||
| 31 | #include <linux/sunrpc/msg_prot.h> | ||
| 32 | |||
| 29 | #ifndef NFS_SUPER_MAGIC | 33 | #ifndef NFS_SUPER_MAGIC |
| 30 | # define NFS_SUPER_MAGIC 0x6969 | 34 | # define NFS_SUPER_MAGIC 0x6969 |
| 31 | #endif | 35 | #endif |
| 32 | 36 | ||
| 33 | #define NFSD_BUFSIZE (1024 + NFSSVC_MAXBLKSIZE) | 37 | /* |
| 38 | * Largest number of bytes we need to allocate for an NFS | ||
| 39 | * call or reply. Used to control buffer sizes. We use | ||
| 40 | * the length of v3 WRITE, READDIR and READDIR replies | ||
| 41 | * which are an RPC header, up to 26 XDR units of reply | ||
| 42 | * data, and some page data. | ||
| 43 | * | ||
| 44 | * Note that accuracy here doesn't matter too much as the | ||
| 45 | * size is rounded up to a page size when allocating space. | ||
| 46 | */ | ||
| 47 | #define NFSD_BUFSIZE ((RPC_MAX_HEADER_WITH_AUTH+26)*XDR_UNIT + NFSSVC_MAXBLKSIZE) | ||
| 34 | 48 | ||
| 35 | #ifdef CONFIG_NFSD_V4 | 49 | #ifdef CONFIG_NFSD_V4 |
| 36 | # define NFSSVC_XDRSIZE NFS4_SVC_XDRSIZE | 50 | # define NFSSVC_XDRSIZE NFS4_SVC_XDRSIZE |
diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h index d2a8abb5011a..045e38cdbe64 100644 --- a/include/linux/nfsd/export.h +++ b/include/linux/nfsd/export.h | |||
| @@ -45,15 +45,36 @@ | |||
| 45 | 45 | ||
| 46 | #ifdef __KERNEL__ | 46 | #ifdef __KERNEL__ |
| 47 | 47 | ||
| 48 | /* | ||
| 49 | * FS Locations | ||
| 50 | */ | ||
| 51 | |||
| 52 | #define MAX_FS_LOCATIONS 128 | ||
| 53 | |||
| 54 | struct nfsd4_fs_location { | ||
| 55 | char *hosts; /* colon separated list of hosts */ | ||
| 56 | char *path; /* slash separated list of path components */ | ||
| 57 | }; | ||
| 58 | |||
| 59 | struct nfsd4_fs_locations { | ||
| 60 | uint32_t locations_count; | ||
| 61 | struct nfsd4_fs_location *locations; | ||
| 62 | /* If we're not actually serving this data ourselves (only providing a | ||
| 63 | * list of replicas that do serve it) then we set "migrated": */ | ||
| 64 | int migrated; | ||
| 65 | }; | ||
| 66 | |||
| 48 | struct svc_export { | 67 | struct svc_export { |
| 49 | struct cache_head h; | 68 | struct cache_head h; |
| 50 | struct auth_domain * ex_client; | 69 | struct auth_domain * ex_client; |
| 51 | int ex_flags; | 70 | int ex_flags; |
| 52 | struct vfsmount * ex_mnt; | 71 | struct vfsmount * ex_mnt; |
| 53 | struct dentry * ex_dentry; | 72 | struct dentry * ex_dentry; |
| 73 | char * ex_path; | ||
| 54 | uid_t ex_anon_uid; | 74 | uid_t ex_anon_uid; |
| 55 | gid_t ex_anon_gid; | 75 | gid_t ex_anon_gid; |
| 56 | int ex_fsid; | 76 | int ex_fsid; |
| 77 | struct nfsd4_fs_locations ex_fslocs; | ||
| 57 | }; | 78 | }; |
| 58 | 79 | ||
| 59 | /* an "export key" (expkey) maps a filehandlefragement to an | 80 | /* an "export key" (expkey) maps a filehandlefragement to an |
| @@ -96,8 +117,8 @@ struct svc_export * exp_parent(struct auth_domain *clp, | |||
| 96 | struct cache_req *reqp); | 117 | struct cache_req *reqp); |
| 97 | int exp_rootfh(struct auth_domain *, | 118 | int exp_rootfh(struct auth_domain *, |
| 98 | char *path, struct knfsd_fh *, int maxsize); | 119 | char *path, struct knfsd_fh *, int maxsize); |
| 99 | int exp_pseudoroot(struct auth_domain *, struct svc_fh *fhp, struct cache_req *creq); | 120 | __be32 exp_pseudoroot(struct auth_domain *, struct svc_fh *fhp, struct cache_req *creq); |
| 100 | int nfserrno(int errno); | 121 | __be32 nfserrno(int errno); |
| 101 | 122 | ||
| 102 | extern struct cache_detail svc_export_cache; | 123 | extern struct cache_detail svc_export_cache; |
| 103 | 124 | ||
diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h index e1dbc86c270b..eb231143d579 100644 --- a/include/linux/nfsd/nfsd.h +++ b/include/linux/nfsd/nfsd.h | |||
| @@ -50,7 +50,7 @@ | |||
| 50 | * Callback function for readdir | 50 | * Callback function for readdir |
| 51 | */ | 51 | */ |
| 52 | struct readdir_cd { | 52 | struct readdir_cd { |
| 53 | int err; /* 0, nfserr, or nfserr_eof */ | 53 | __be32 err; /* 0, nfserr, or nfserr_eof */ |
| 54 | }; | 54 | }; |
| 55 | typedef int (*encode_dent_fn)(struct readdir_cd *, const char *, | 55 | typedef int (*encode_dent_fn)(struct readdir_cd *, const char *, |
| 56 | int, loff_t, ino_t, unsigned int); | 56 | int, loff_t, ino_t, unsigned int); |
| @@ -64,7 +64,7 @@ extern struct svc_serv *nfsd_serv; | |||
| 64 | * Function prototypes. | 64 | * Function prototypes. |
| 65 | */ | 65 | */ |
| 66 | int nfsd_svc(unsigned short port, int nrservs); | 66 | int nfsd_svc(unsigned short port, int nrservs); |
| 67 | int nfsd_dispatch(struct svc_rqst *rqstp, u32 *statp); | 67 | int nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp); |
| 68 | 68 | ||
| 69 | /* nfsd/vfs.c */ | 69 | /* nfsd/vfs.c */ |
| 70 | int fh_lock_parent(struct svc_fh *, struct dentry *); | 70 | int fh_lock_parent(struct svc_fh *, struct dentry *); |
| @@ -72,57 +72,57 @@ int nfsd_racache_init(int); | |||
| 72 | void nfsd_racache_shutdown(void); | 72 | void nfsd_racache_shutdown(void); |
| 73 | int nfsd_cross_mnt(struct svc_rqst *rqstp, struct dentry **dpp, | 73 | int nfsd_cross_mnt(struct svc_rqst *rqstp, struct dentry **dpp, |
| 74 | struct svc_export **expp); | 74 | struct svc_export **expp); |
| 75 | int nfsd_lookup(struct svc_rqst *, struct svc_fh *, | 75 | __be32 nfsd_lookup(struct svc_rqst *, struct svc_fh *, |
| 76 | const char *, int, struct svc_fh *); | 76 | const char *, int, struct svc_fh *); |
| 77 | int nfsd_setattr(struct svc_rqst *, struct svc_fh *, | 77 | __be32 nfsd_setattr(struct svc_rqst *, struct svc_fh *, |
| 78 | struct iattr *, int, time_t); | 78 | struct iattr *, int, time_t); |
| 79 | #ifdef CONFIG_NFSD_V4 | 79 | #ifdef CONFIG_NFSD_V4 |
| 80 | int nfsd4_set_nfs4_acl(struct svc_rqst *, struct svc_fh *, | 80 | __be32 nfsd4_set_nfs4_acl(struct svc_rqst *, struct svc_fh *, |
| 81 | struct nfs4_acl *); | 81 | struct nfs4_acl *); |
| 82 | int nfsd4_get_nfs4_acl(struct svc_rqst *, struct dentry *, struct nfs4_acl **); | 82 | int nfsd4_get_nfs4_acl(struct svc_rqst *, struct dentry *, struct nfs4_acl **); |
| 83 | #endif /* CONFIG_NFSD_V4 */ | 83 | #endif /* CONFIG_NFSD_V4 */ |
| 84 | int nfsd_create(struct svc_rqst *, struct svc_fh *, | 84 | __be32 nfsd_create(struct svc_rqst *, struct svc_fh *, |
| 85 | char *name, int len, struct iattr *attrs, | 85 | char *name, int len, struct iattr *attrs, |
| 86 | int type, dev_t rdev, struct svc_fh *res); | 86 | int type, dev_t rdev, struct svc_fh *res); |
| 87 | #ifdef CONFIG_NFSD_V3 | 87 | #ifdef CONFIG_NFSD_V3 |
| 88 | int nfsd_access(struct svc_rqst *, struct svc_fh *, u32 *, u32 *); | 88 | __be32 nfsd_access(struct svc_rqst *, struct svc_fh *, u32 *, u32 *); |
| 89 | int nfsd_create_v3(struct svc_rqst *, struct svc_fh *, | 89 | __be32 nfsd_create_v3(struct svc_rqst *, struct svc_fh *, |
| 90 | char *name, int len, struct iattr *attrs, | 90 | char *name, int len, struct iattr *attrs, |
| 91 | struct svc_fh *res, int createmode, | 91 | struct svc_fh *res, int createmode, |
| 92 | u32 *verifier, int *truncp); | 92 | u32 *verifier, int *truncp); |
| 93 | int nfsd_commit(struct svc_rqst *, struct svc_fh *, | 93 | __be32 nfsd_commit(struct svc_rqst *, struct svc_fh *, |
| 94 | loff_t, unsigned long); | 94 | loff_t, unsigned long); |
| 95 | #endif /* CONFIG_NFSD_V3 */ | 95 | #endif /* CONFIG_NFSD_V3 */ |
| 96 | int nfsd_open(struct svc_rqst *, struct svc_fh *, int, | 96 | __be32 nfsd_open(struct svc_rqst *, struct svc_fh *, int, |
| 97 | int, struct file **); | 97 | int, struct file **); |
| 98 | void nfsd_close(struct file *); | 98 | void nfsd_close(struct file *); |
| 99 | int nfsd_read(struct svc_rqst *, struct svc_fh *, struct file *, | 99 | __be32 nfsd_read(struct svc_rqst *, struct svc_fh *, struct file *, |
| 100 | loff_t, struct kvec *, int, unsigned long *); | 100 | loff_t, struct kvec *, int, unsigned long *); |
| 101 | int nfsd_write(struct svc_rqst *, struct svc_fh *,struct file *, | 101 | __be32 nfsd_write(struct svc_rqst *, struct svc_fh *,struct file *, |
| 102 | loff_t, struct kvec *,int, unsigned long, int *); | 102 | loff_t, struct kvec *,int, unsigned long, int *); |
| 103 | int nfsd_readlink(struct svc_rqst *, struct svc_fh *, | 103 | __be32 nfsd_readlink(struct svc_rqst *, struct svc_fh *, |
| 104 | char *, int *); | 104 | char *, int *); |
| 105 | int nfsd_symlink(struct svc_rqst *, struct svc_fh *, | 105 | __be32 nfsd_symlink(struct svc_rqst *, struct svc_fh *, |
| 106 | char *name, int len, char *path, int plen, | 106 | char *name, int len, char *path, int plen, |
| 107 | struct svc_fh *res, struct iattr *); | 107 | struct svc_fh *res, struct iattr *); |
| 108 | int nfsd_link(struct svc_rqst *, struct svc_fh *, | 108 | __be32 nfsd_link(struct svc_rqst *, struct svc_fh *, |
| 109 | char *, int, struct svc_fh *); | 109 | char *, int, struct svc_fh *); |
| 110 | int nfsd_rename(struct svc_rqst *, | 110 | __be32 nfsd_rename(struct svc_rqst *, |
| 111 | struct svc_fh *, char *, int, | 111 | struct svc_fh *, char *, int, |
| 112 | struct svc_fh *, char *, int); | 112 | struct svc_fh *, char *, int); |
| 113 | int nfsd_remove(struct svc_rqst *, | 113 | __be32 nfsd_remove(struct svc_rqst *, |
| 114 | struct svc_fh *, char *, int); | 114 | struct svc_fh *, char *, int); |
| 115 | int nfsd_unlink(struct svc_rqst *, struct svc_fh *, int type, | 115 | __be32 nfsd_unlink(struct svc_rqst *, struct svc_fh *, int type, |
| 116 | char *name, int len); | 116 | char *name, int len); |
| 117 | int nfsd_truncate(struct svc_rqst *, struct svc_fh *, | 117 | int nfsd_truncate(struct svc_rqst *, struct svc_fh *, |
| 118 | unsigned long size); | 118 | unsigned long size); |
| 119 | int nfsd_readdir(struct svc_rqst *, struct svc_fh *, | 119 | __be32 nfsd_readdir(struct svc_rqst *, struct svc_fh *, |
| 120 | loff_t *, struct readdir_cd *, encode_dent_fn); | 120 | loff_t *, struct readdir_cd *, encode_dent_fn); |
| 121 | int nfsd_statfs(struct svc_rqst *, struct svc_fh *, | 121 | __be32 nfsd_statfs(struct svc_rqst *, struct svc_fh *, |
| 122 | struct kstatfs *); | 122 | struct kstatfs *); |
| 123 | 123 | ||
| 124 | int nfsd_notify_change(struct inode *, struct iattr *); | 124 | int nfsd_notify_change(struct inode *, struct iattr *); |
| 125 | int nfsd_permission(struct svc_export *, struct dentry *, int); | 125 | __be32 nfsd_permission(struct svc_export *, struct dentry *, int); |
| 126 | int nfsd_sync_dir(struct dentry *dp); | 126 | int nfsd_sync_dir(struct dentry *dp); |
| 127 | 127 | ||
| 128 | #if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL) | 128 | #if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL) |
| @@ -145,6 +145,7 @@ int nfsd_vers(int vers, enum vers_op change); | |||
| 145 | void nfsd_reset_versions(void); | 145 | void nfsd_reset_versions(void); |
| 146 | int nfsd_create_serv(void); | 146 | int nfsd_create_serv(void); |
| 147 | 147 | ||
| 148 | extern int nfsd_max_blksize; | ||
| 148 | 149 | ||
| 149 | /* | 150 | /* |
| 150 | * NFSv4 State | 151 | * NFSv4 State |
| @@ -215,6 +216,7 @@ void nfsd_lockd_shutdown(void); | |||
| 215 | #define nfserr_clid_inuse __constant_htonl(NFSERR_CLID_INUSE) | 216 | #define nfserr_clid_inuse __constant_htonl(NFSERR_CLID_INUSE) |
| 216 | #define nfserr_stale_clientid __constant_htonl(NFSERR_STALE_CLIENTID) | 217 | #define nfserr_stale_clientid __constant_htonl(NFSERR_STALE_CLIENTID) |
| 217 | #define nfserr_resource __constant_htonl(NFSERR_RESOURCE) | 218 | #define nfserr_resource __constant_htonl(NFSERR_RESOURCE) |
| 219 | #define nfserr_moved __constant_htonl(NFSERR_MOVED) | ||
| 218 | #define nfserr_nofilehandle __constant_htonl(NFSERR_NOFILEHANDLE) | 220 | #define nfserr_nofilehandle __constant_htonl(NFSERR_NOFILEHANDLE) |
| 219 | #define nfserr_minor_vers_mismatch __constant_htonl(NFSERR_MINOR_VERS_MISMATCH) | 221 | #define nfserr_minor_vers_mismatch __constant_htonl(NFSERR_MINOR_VERS_MISMATCH) |
| 220 | #define nfserr_share_denied __constant_htonl(NFSERR_SHARE_DENIED) | 222 | #define nfserr_share_denied __constant_htonl(NFSERR_SHARE_DENIED) |
| @@ -236,6 +238,7 @@ void nfsd_lockd_shutdown(void); | |||
| 236 | #define nfserr_badname __constant_htonl(NFSERR_BADNAME) | 238 | #define nfserr_badname __constant_htonl(NFSERR_BADNAME) |
| 237 | #define nfserr_cb_path_down __constant_htonl(NFSERR_CB_PATH_DOWN) | 239 | #define nfserr_cb_path_down __constant_htonl(NFSERR_CB_PATH_DOWN) |
| 238 | #define nfserr_locked __constant_htonl(NFSERR_LOCKED) | 240 | #define nfserr_locked __constant_htonl(NFSERR_LOCKED) |
| 241 | #define nfserr_replay_me __constant_htonl(NFSERR_REPLAY_ME) | ||
| 239 | 242 | ||
| 240 | /* error codes for internal use */ | 243 | /* error codes for internal use */ |
| 241 | /* if a request fails due to kmalloc failure, it gets dropped. | 244 | /* if a request fails due to kmalloc failure, it gets dropped. |
| @@ -291,7 +294,6 @@ static inline int is_fsid(struct svc_fh *fh, struct knfsd_fh *reffh) | |||
| 291 | /* | 294 | /* |
| 292 | * The following attributes are currently not supported by the NFSv4 server: | 295 | * The following attributes are currently not supported by the NFSv4 server: |
| 293 | * ARCHIVE (deprecated anyway) | 296 | * ARCHIVE (deprecated anyway) |
| 294 | * FS_LOCATIONS (will be supported eventually) | ||
| 295 | * HIDDEN (unlikely to be supported any time soon) | 297 | * HIDDEN (unlikely to be supported any time soon) |
| 296 | * MIMETYPE (unlikely to be supported any time soon) | 298 | * MIMETYPE (unlikely to be supported any time soon) |
| 297 | * QUOTA_* (will be supported in a forthcoming patch) | 299 | * QUOTA_* (will be supported in a forthcoming patch) |
| @@ -307,7 +309,7 @@ static inline int is_fsid(struct svc_fh *fh, struct knfsd_fh *reffh) | |||
| 307 | | FATTR4_WORD0_ACLSUPPORT | FATTR4_WORD0_CANSETTIME | FATTR4_WORD0_CASE_INSENSITIVE \ | 309 | | FATTR4_WORD0_ACLSUPPORT | FATTR4_WORD0_CANSETTIME | FATTR4_WORD0_CASE_INSENSITIVE \ |
| 308 | | FATTR4_WORD0_CASE_PRESERVING | FATTR4_WORD0_CHOWN_RESTRICTED \ | 310 | | FATTR4_WORD0_CASE_PRESERVING | FATTR4_WORD0_CHOWN_RESTRICTED \ |
| 309 | | FATTR4_WORD0_FILEHANDLE | FATTR4_WORD0_FILEID | FATTR4_WORD0_FILES_AVAIL \ | 311 | | FATTR4_WORD0_FILEHANDLE | FATTR4_WORD0_FILEID | FATTR4_WORD0_FILES_AVAIL \ |
| 310 | | FATTR4_WORD0_FILES_FREE | FATTR4_WORD0_FILES_TOTAL | FATTR4_WORD0_HOMOGENEOUS \ | 312 | | FATTR4_WORD0_FILES_FREE | FATTR4_WORD0_FILES_TOTAL | FATTR4_WORD0_FS_LOCATIONS | FATTR4_WORD0_HOMOGENEOUS \ |
| 311 | | FATTR4_WORD0_MAXFILESIZE | FATTR4_WORD0_MAXLINK | FATTR4_WORD0_MAXNAME \ | 313 | | FATTR4_WORD0_MAXFILESIZE | FATTR4_WORD0_MAXLINK | FATTR4_WORD0_MAXNAME \ |
| 312 | | FATTR4_WORD0_MAXREAD | FATTR4_WORD0_MAXWRITE | FATTR4_WORD0_ACL) | 314 | | FATTR4_WORD0_MAXREAD | FATTR4_WORD0_MAXWRITE | FATTR4_WORD0_ACL) |
| 313 | 315 | ||
diff --git a/include/linux/nfsd/nfsfh.h b/include/linux/nfsd/nfsfh.h index 069257ea99a0..f3b51d62ec7d 100644 --- a/include/linux/nfsd/nfsfh.h +++ b/include/linux/nfsd/nfsfh.h | |||
| @@ -157,7 +157,7 @@ typedef struct svc_fh { | |||
| 157 | __u64 fh_post_size; /* i_size */ | 157 | __u64 fh_post_size; /* i_size */ |
| 158 | unsigned long fh_post_blocks; /* i_blocks */ | 158 | unsigned long fh_post_blocks; /* i_blocks */ |
| 159 | unsigned long fh_post_blksize;/* i_blksize */ | 159 | unsigned long fh_post_blksize;/* i_blksize */ |
| 160 | __u32 fh_post_rdev[2];/* i_rdev */ | 160 | __be32 fh_post_rdev[2];/* i_rdev */ |
| 161 | struct timespec fh_post_atime; /* i_atime */ | 161 | struct timespec fh_post_atime; /* i_atime */ |
| 162 | struct timespec fh_post_mtime; /* i_mtime */ | 162 | struct timespec fh_post_mtime; /* i_mtime */ |
| 163 | struct timespec fh_post_ctime; /* i_ctime */ | 163 | struct timespec fh_post_ctime; /* i_ctime */ |
| @@ -209,9 +209,9 @@ extern char * SVCFH_fmt(struct svc_fh *fhp); | |||
| 209 | /* | 209 | /* |
| 210 | * Function prototypes | 210 | * Function prototypes |
| 211 | */ | 211 | */ |
| 212 | u32 fh_verify(struct svc_rqst *, struct svc_fh *, int, int); | 212 | __be32 fh_verify(struct svc_rqst *, struct svc_fh *, int, int); |
| 213 | int fh_compose(struct svc_fh *, struct svc_export *, struct dentry *, struct svc_fh *); | 213 | __be32 fh_compose(struct svc_fh *, struct svc_export *, struct dentry *, struct svc_fh *); |
| 214 | int fh_update(struct svc_fh *); | 214 | __be32 fh_update(struct svc_fh *); |
| 215 | void fh_put(struct svc_fh *); | 215 | void fh_put(struct svc_fh *); |
| 216 | 216 | ||
| 217 | static __inline__ struct svc_fh * | 217 | static __inline__ struct svc_fh * |
diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h index 8bf23cf8b603..c3673f487e84 100644 --- a/include/linux/nfsd/state.h +++ b/include/linux/nfsd/state.h | |||
| @@ -125,7 +125,7 @@ struct nfs4_client { | |||
| 125 | char cl_recdir[HEXDIR_LEN]; /* recovery dir */ | 125 | char cl_recdir[HEXDIR_LEN]; /* recovery dir */ |
| 126 | nfs4_verifier cl_verifier; /* generated by client */ | 126 | nfs4_verifier cl_verifier; /* generated by client */ |
| 127 | time_t cl_time; /* time of last lease renewal */ | 127 | time_t cl_time; /* time of last lease renewal */ |
| 128 | u32 cl_addr; /* client ipaddress */ | 128 | __be32 cl_addr; /* client ipaddress */ |
| 129 | struct svc_cred cl_cred; /* setclientid principal */ | 129 | struct svc_cred cl_cred; /* setclientid principal */ |
| 130 | clientid_t cl_clientid; /* generated by server */ | 130 | clientid_t cl_clientid; /* generated by server */ |
| 131 | nfs4_verifier cl_confirm; /* generated by server */ | 131 | nfs4_verifier cl_confirm; /* generated by server */ |
| @@ -164,7 +164,7 @@ update_stateid(stateid_t *stateid) | |||
| 164 | * is cached. | 164 | * is cached. |
| 165 | */ | 165 | */ |
| 166 | struct nfs4_replay { | 166 | struct nfs4_replay { |
| 167 | u32 rp_status; | 167 | __be32 rp_status; |
| 168 | unsigned int rp_buflen; | 168 | unsigned int rp_buflen; |
| 169 | char *rp_buf; | 169 | char *rp_buf; |
| 170 | unsigned intrp_allocated; | 170 | unsigned intrp_allocated; |
| @@ -273,19 +273,19 @@ struct nfs4_stateid { | |||
| 273 | ((err) != nfserr_stale_stateid) && \ | 273 | ((err) != nfserr_stale_stateid) && \ |
| 274 | ((err) != nfserr_bad_stateid)) | 274 | ((err) != nfserr_bad_stateid)) |
| 275 | 275 | ||
| 276 | extern int nfsd4_renew(clientid_t *clid); | 276 | extern __be32 nfsd4_renew(clientid_t *clid); |
| 277 | extern int nfs4_preprocess_stateid_op(struct svc_fh *current_fh, | 277 | extern __be32 nfs4_preprocess_stateid_op(struct svc_fh *current_fh, |
| 278 | stateid_t *stateid, int flags, struct file **filp); | 278 | stateid_t *stateid, int flags, struct file **filp); |
| 279 | extern void nfs4_lock_state(void); | 279 | extern void nfs4_lock_state(void); |
| 280 | extern void nfs4_unlock_state(void); | 280 | extern void nfs4_unlock_state(void); |
| 281 | extern int nfs4_in_grace(void); | 281 | extern int nfs4_in_grace(void); |
| 282 | extern int nfs4_check_open_reclaim(clientid_t *clid); | 282 | extern __be32 nfs4_check_open_reclaim(clientid_t *clid); |
| 283 | extern void put_nfs4_client(struct nfs4_client *clp); | 283 | extern void put_nfs4_client(struct nfs4_client *clp); |
| 284 | extern void nfs4_free_stateowner(struct kref *kref); | 284 | extern void nfs4_free_stateowner(struct kref *kref); |
| 285 | extern void nfsd4_probe_callback(struct nfs4_client *clp); | 285 | extern void nfsd4_probe_callback(struct nfs4_client *clp); |
| 286 | extern void nfsd4_cb_recall(struct nfs4_delegation *dp); | 286 | extern void nfsd4_cb_recall(struct nfs4_delegation *dp); |
| 287 | extern void nfs4_put_delegation(struct nfs4_delegation *dp); | 287 | extern void nfs4_put_delegation(struct nfs4_delegation *dp); |
| 288 | extern int nfs4_make_rec_clidname(char *clidname, struct xdr_netobj *clname); | 288 | extern __be32 nfs4_make_rec_clidname(char *clidname, struct xdr_netobj *clname); |
| 289 | extern void nfsd4_init_recdir(char *recdir_name); | 289 | extern void nfsd4_init_recdir(char *recdir_name); |
| 290 | extern int nfsd4_recdir_load(void); | 290 | extern int nfsd4_recdir_load(void); |
| 291 | extern void nfsd4_shutdown_recdir(void); | 291 | extern void nfsd4_shutdown_recdir(void); |
diff --git a/include/linux/nfsd/xdr.h b/include/linux/nfsd/xdr.h index a38f9d776de9..877192d3ae79 100644 --- a/include/linux/nfsd/xdr.h +++ b/include/linux/nfsd/xdr.h | |||
| @@ -30,7 +30,6 @@ struct nfsd_readargs { | |||
| 30 | struct svc_fh fh; | 30 | struct svc_fh fh; |
| 31 | __u32 offset; | 31 | __u32 offset; |
| 32 | __u32 count; | 32 | __u32 count; |
| 33 | struct kvec vec[RPCSVC_MAXPAGES]; | ||
| 34 | int vlen; | 33 | int vlen; |
| 35 | }; | 34 | }; |
| 36 | 35 | ||
| @@ -38,7 +37,6 @@ struct nfsd_writeargs { | |||
| 38 | svc_fh fh; | 37 | svc_fh fh; |
| 39 | __u32 offset; | 38 | __u32 offset; |
| 40 | int len; | 39 | int len; |
| 41 | struct kvec vec[RPCSVC_MAXPAGES]; | ||
| 42 | int vlen; | 40 | int vlen; |
| 43 | }; | 41 | }; |
| 44 | 42 | ||
| @@ -83,7 +81,7 @@ struct nfsd_readdirargs { | |||
| 83 | struct svc_fh fh; | 81 | struct svc_fh fh; |
| 84 | __u32 cookie; | 82 | __u32 cookie; |
| 85 | __u32 count; | 83 | __u32 count; |
| 86 | u32 * buffer; | 84 | __be32 * buffer; |
| 87 | }; | 85 | }; |
| 88 | 86 | ||
| 89 | struct nfsd_attrstat { | 87 | struct nfsd_attrstat { |
| @@ -110,9 +108,9 @@ struct nfsd_readdirres { | |||
| 110 | int count; | 108 | int count; |
| 111 | 109 | ||
| 112 | struct readdir_cd common; | 110 | struct readdir_cd common; |
| 113 | u32 * buffer; | 111 | __be32 * buffer; |
| 114 | int buflen; | 112 | int buflen; |
| 115 | u32 * offset; | 113 | __be32 * offset; |
| 116 | }; | 114 | }; |
| 117 | 115 | ||
| 118 | struct nfsd_statfsres { | 116 | struct nfsd_statfsres { |
| @@ -137,43 +135,43 @@ union nfsd_xdrstore { | |||
| 137 | #define NFS2_SVC_XDRSIZE sizeof(union nfsd_xdrstore) | 135 | #define NFS2_SVC_XDRSIZE sizeof(union nfsd_xdrstore) |
| 138 | 136 | ||
| 139 | 137 | ||
| 140 | int nfssvc_decode_void(struct svc_rqst *, u32 *, void *); | 138 | int nfssvc_decode_void(struct svc_rqst *, __be32 *, void *); |
| 141 | int nfssvc_decode_fhandle(struct svc_rqst *, u32 *, struct nfsd_fhandle *); | 139 | int nfssvc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *); |
| 142 | int nfssvc_decode_sattrargs(struct svc_rqst *, u32 *, | 140 | int nfssvc_decode_sattrargs(struct svc_rqst *, __be32 *, |
| 143 | struct nfsd_sattrargs *); | 141 | struct nfsd_sattrargs *); |
| 144 | int nfssvc_decode_diropargs(struct svc_rqst *, u32 *, | 142 | int nfssvc_decode_diropargs(struct svc_rqst *, __be32 *, |
| 145 | struct nfsd_diropargs *); | 143 | struct nfsd_diropargs *); |
| 146 | int nfssvc_decode_readargs(struct svc_rqst *, u32 *, | 144 | int nfssvc_decode_readargs(struct svc_rqst *, __be32 *, |
| 147 | struct nfsd_readargs *); | 145 | struct nfsd_readargs *); |
| 148 | int nfssvc_decode_writeargs(struct svc_rqst *, u32 *, | 146 | int nfssvc_decode_writeargs(struct svc_rqst *, __be32 *, |
| 149 | struct nfsd_writeargs *); | 147 | struct nfsd_writeargs *); |
| 150 | int nfssvc_decode_createargs(struct svc_rqst *, u32 *, | 148 | int nfssvc_decode_createargs(struct svc_rqst *, __be32 *, |
| 151 | struct nfsd_createargs *); | 149 | struct nfsd_createargs *); |
| 152 | int nfssvc_decode_renameargs(struct svc_rqst *, u32 *, | 150 | int nfssvc_decode_renameargs(struct svc_rqst *, __be32 *, |
| 153 | struct nfsd_renameargs *); | 151 | struct nfsd_renameargs *); |
| 154 | int nfssvc_decode_readlinkargs(struct svc_rqst *, u32 *, | 152 | int nfssvc_decode_readlinkargs(struct svc_rqst *, __be32 *, |
| 155 | struct nfsd_readlinkargs *); | 153 | struct nfsd_readlinkargs *); |
| 156 | int nfssvc_decode_linkargs(struct svc_rqst *, u32 *, | 154 | int nfssvc_decode_linkargs(struct svc_rqst *, __be32 *, |
| 157 | struct nfsd_linkargs *); | 155 | struct nfsd_linkargs *); |
| 158 | int nfssvc_decode_symlinkargs(struct svc_rqst *, u32 *, | 156 | int nfssvc_decode_symlinkargs(struct svc_rqst *, __be32 *, |
| 159 | struct nfsd_symlinkargs *); | 157 | struct nfsd_symlinkargs *); |
| 160 | int nfssvc_decode_readdirargs(struct svc_rqst *, u32 *, | 158 | int nfssvc_decode_readdirargs(struct svc_rqst *, __be32 *, |
| 161 | struct nfsd_readdirargs *); | 159 | struct nfsd_readdirargs *); |
| 162 | int nfssvc_encode_void(struct svc_rqst *, u32 *, void *); | 160 | int nfssvc_encode_void(struct svc_rqst *, __be32 *, void *); |
| 163 | int nfssvc_encode_attrstat(struct svc_rqst *, u32 *, struct nfsd_attrstat *); | 161 | int nfssvc_encode_attrstat(struct svc_rqst *, __be32 *, struct nfsd_attrstat *); |
| 164 | int nfssvc_encode_diropres(struct svc_rqst *, u32 *, struct nfsd_diropres *); | 162 | int nfssvc_encode_diropres(struct svc_rqst *, __be32 *, struct nfsd_diropres *); |
| 165 | int nfssvc_encode_readlinkres(struct svc_rqst *, u32 *, struct nfsd_readlinkres *); | 163 | int nfssvc_encode_readlinkres(struct svc_rqst *, __be32 *, struct nfsd_readlinkres *); |
| 166 | int nfssvc_encode_readres(struct svc_rqst *, u32 *, struct nfsd_readres *); | 164 | int nfssvc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd_readres *); |
| 167 | int nfssvc_encode_statfsres(struct svc_rqst *, u32 *, struct nfsd_statfsres *); | 165 | int nfssvc_encode_statfsres(struct svc_rqst *, __be32 *, struct nfsd_statfsres *); |
| 168 | int nfssvc_encode_readdirres(struct svc_rqst *, u32 *, struct nfsd_readdirres *); | 166 | int nfssvc_encode_readdirres(struct svc_rqst *, __be32 *, struct nfsd_readdirres *); |
| 169 | 167 | ||
| 170 | int nfssvc_encode_entry(struct readdir_cd *, const char *name, | 168 | int nfssvc_encode_entry(struct readdir_cd *, const char *name, |
| 171 | int namlen, loff_t offset, ino_t ino, unsigned int); | 169 | int namlen, loff_t offset, ino_t ino, unsigned int); |
| 172 | 170 | ||
| 173 | int nfssvc_release_fhandle(struct svc_rqst *, u32 *, struct nfsd_fhandle *); | 171 | int nfssvc_release_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *); |
| 174 | 172 | ||
| 175 | /* Helper functions for NFSv2 ACL code */ | 173 | /* Helper functions for NFSv2 ACL code */ |
| 176 | u32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, u32 *p, struct svc_fh *fhp); | 174 | __be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp); |
| 177 | u32 *nfs2svc_decode_fh(u32 *p, struct svc_fh *fhp); | 175 | __be32 *nfs2svc_decode_fh(__be32 *p, struct svc_fh *fhp); |
| 178 | 176 | ||
| 179 | #endif /* LINUX_NFSD_H */ | 177 | #endif /* LINUX_NFSD_H */ |
diff --git a/include/linux/nfsd/xdr3.h b/include/linux/nfsd/xdr3.h index a4322741f8b9..79963867b0d7 100644 --- a/include/linux/nfsd/xdr3.h +++ b/include/linux/nfsd/xdr3.h | |||
| @@ -33,7 +33,6 @@ struct nfsd3_readargs { | |||
| 33 | struct svc_fh fh; | 33 | struct svc_fh fh; |
| 34 | __u64 offset; | 34 | __u64 offset; |
| 35 | __u32 count; | 35 | __u32 count; |
| 36 | struct kvec vec[RPCSVC_MAXPAGES]; | ||
| 37 | int vlen; | 36 | int vlen; |
| 38 | }; | 37 | }; |
| 39 | 38 | ||
| @@ -43,7 +42,6 @@ struct nfsd3_writeargs { | |||
| 43 | __u32 count; | 42 | __u32 count; |
| 44 | int stable; | 43 | int stable; |
| 45 | __u32 len; | 44 | __u32 len; |
| 46 | struct kvec vec[RPCSVC_MAXPAGES]; | ||
| 47 | int vlen; | 45 | int vlen; |
| 48 | }; | 46 | }; |
| 49 | 47 | ||
| @@ -53,7 +51,7 @@ struct nfsd3_createargs { | |||
| 53 | int len; | 51 | int len; |
| 54 | int createmode; | 52 | int createmode; |
| 55 | struct iattr attrs; | 53 | struct iattr attrs; |
| 56 | __u32 * verf; | 54 | __be32 * verf; |
| 57 | }; | 55 | }; |
| 58 | 56 | ||
| 59 | struct nfsd3_mknodargs { | 57 | struct nfsd3_mknodargs { |
| @@ -100,8 +98,8 @@ struct nfsd3_readdirargs { | |||
| 100 | __u64 cookie; | 98 | __u64 cookie; |
| 101 | __u32 dircount; | 99 | __u32 dircount; |
| 102 | __u32 count; | 100 | __u32 count; |
| 103 | __u32 * verf; | 101 | __be32 * verf; |
| 104 | u32 * buffer; | 102 | __be32 * buffer; |
| 105 | }; | 103 | }; |
| 106 | 104 | ||
| 107 | struct nfsd3_commitargs { | 105 | struct nfsd3_commitargs { |
| @@ -124,79 +122,79 @@ struct nfsd3_setaclargs { | |||
| 124 | }; | 122 | }; |
| 125 | 123 | ||
| 126 | struct nfsd3_attrstat { | 124 | struct nfsd3_attrstat { |
| 127 | __u32 status; | 125 | __be32 status; |
| 128 | struct svc_fh fh; | 126 | struct svc_fh fh; |
| 129 | struct kstat stat; | 127 | struct kstat stat; |
| 130 | }; | 128 | }; |
| 131 | 129 | ||
| 132 | /* LOOKUP, CREATE, MKDIR, SYMLINK, MKNOD */ | 130 | /* LOOKUP, CREATE, MKDIR, SYMLINK, MKNOD */ |
| 133 | struct nfsd3_diropres { | 131 | struct nfsd3_diropres { |
| 134 | __u32 status; | 132 | __be32 status; |
| 135 | struct svc_fh dirfh; | 133 | struct svc_fh dirfh; |
| 136 | struct svc_fh fh; | 134 | struct svc_fh fh; |
| 137 | }; | 135 | }; |
| 138 | 136 | ||
| 139 | struct nfsd3_accessres { | 137 | struct nfsd3_accessres { |
| 140 | __u32 status; | 138 | __be32 status; |
| 141 | struct svc_fh fh; | 139 | struct svc_fh fh; |
| 142 | __u32 access; | 140 | __u32 access; |
| 143 | }; | 141 | }; |
| 144 | 142 | ||
| 145 | struct nfsd3_readlinkres { | 143 | struct nfsd3_readlinkres { |
| 146 | __u32 status; | 144 | __be32 status; |
| 147 | struct svc_fh fh; | 145 | struct svc_fh fh; |
| 148 | __u32 len; | 146 | __u32 len; |
| 149 | }; | 147 | }; |
| 150 | 148 | ||
| 151 | struct nfsd3_readres { | 149 | struct nfsd3_readres { |
| 152 | __u32 status; | 150 | __be32 status; |
| 153 | struct svc_fh fh; | 151 | struct svc_fh fh; |
| 154 | unsigned long count; | 152 | unsigned long count; |
| 155 | int eof; | 153 | int eof; |
| 156 | }; | 154 | }; |
| 157 | 155 | ||
| 158 | struct nfsd3_writeres { | 156 | struct nfsd3_writeres { |
| 159 | __u32 status; | 157 | __be32 status; |
| 160 | struct svc_fh fh; | 158 | struct svc_fh fh; |
| 161 | unsigned long count; | 159 | unsigned long count; |
| 162 | int committed; | 160 | int committed; |
| 163 | }; | 161 | }; |
| 164 | 162 | ||
| 165 | struct nfsd3_renameres { | 163 | struct nfsd3_renameres { |
| 166 | __u32 status; | 164 | __be32 status; |
| 167 | struct svc_fh ffh; | 165 | struct svc_fh ffh; |
| 168 | struct svc_fh tfh; | 166 | struct svc_fh tfh; |
| 169 | }; | 167 | }; |
| 170 | 168 | ||
| 171 | struct nfsd3_linkres { | 169 | struct nfsd3_linkres { |
| 172 | __u32 status; | 170 | __be32 status; |
| 173 | struct svc_fh tfh; | 171 | struct svc_fh tfh; |
| 174 | struct svc_fh fh; | 172 | struct svc_fh fh; |
| 175 | }; | 173 | }; |
| 176 | 174 | ||
| 177 | struct nfsd3_readdirres { | 175 | struct nfsd3_readdirres { |
| 178 | __u32 status; | 176 | __be32 status; |
| 179 | struct svc_fh fh; | 177 | struct svc_fh fh; |
| 180 | int count; | 178 | int count; |
| 181 | __u32 verf[2]; | 179 | __be32 verf[2]; |
| 182 | 180 | ||
| 183 | struct readdir_cd common; | 181 | struct readdir_cd common; |
| 184 | u32 * buffer; | 182 | __be32 * buffer; |
| 185 | int buflen; | 183 | int buflen; |
| 186 | u32 * offset; | 184 | __be32 * offset; |
| 187 | u32 * offset1; | 185 | __be32 * offset1; |
| 188 | struct svc_rqst * rqstp; | 186 | struct svc_rqst * rqstp; |
| 189 | 187 | ||
| 190 | }; | 188 | }; |
| 191 | 189 | ||
| 192 | struct nfsd3_fsstatres { | 190 | struct nfsd3_fsstatres { |
| 193 | __u32 status; | 191 | __be32 status; |
| 194 | struct kstatfs stats; | 192 | struct kstatfs stats; |
| 195 | __u32 invarsec; | 193 | __u32 invarsec; |
| 196 | }; | 194 | }; |
| 197 | 195 | ||
| 198 | struct nfsd3_fsinfores { | 196 | struct nfsd3_fsinfores { |
| 199 | __u32 status; | 197 | __be32 status; |
| 200 | __u32 f_rtmax; | 198 | __u32 f_rtmax; |
| 201 | __u32 f_rtpref; | 199 | __u32 f_rtpref; |
| 202 | __u32 f_rtmult; | 200 | __u32 f_rtmult; |
| @@ -209,7 +207,7 @@ struct nfsd3_fsinfores { | |||
| 209 | }; | 207 | }; |
| 210 | 208 | ||
| 211 | struct nfsd3_pathconfres { | 209 | struct nfsd3_pathconfres { |
| 212 | __u32 status; | 210 | __be32 status; |
| 213 | __u32 p_link_max; | 211 | __u32 p_link_max; |
| 214 | __u32 p_name_max; | 212 | __u32 p_name_max; |
| 215 | __u32 p_no_trunc; | 213 | __u32 p_no_trunc; |
| @@ -219,12 +217,12 @@ struct nfsd3_pathconfres { | |||
| 219 | }; | 217 | }; |
| 220 | 218 | ||
| 221 | struct nfsd3_commitres { | 219 | struct nfsd3_commitres { |
| 222 | __u32 status; | 220 | __be32 status; |
| 223 | struct svc_fh fh; | 221 | struct svc_fh fh; |
| 224 | }; | 222 | }; |
| 225 | 223 | ||
| 226 | struct nfsd3_getaclres { | 224 | struct nfsd3_getaclres { |
| 227 | __u32 status; | 225 | __be32 status; |
| 228 | struct svc_fh fh; | 226 | struct svc_fh fh; |
| 229 | int mask; | 227 | int mask; |
| 230 | struct posix_acl *acl_access; | 228 | struct posix_acl *acl_access; |
| @@ -268,70 +266,70 @@ union nfsd3_xdrstore { | |||
| 268 | 266 | ||
| 269 | #define NFS3_SVC_XDRSIZE sizeof(union nfsd3_xdrstore) | 267 | #define NFS3_SVC_XDRSIZE sizeof(union nfsd3_xdrstore) |
| 270 | 268 | ||
| 271 | int nfs3svc_decode_fhandle(struct svc_rqst *, u32 *, struct nfsd_fhandle *); | 269 | int nfs3svc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *); |
| 272 | int nfs3svc_decode_sattrargs(struct svc_rqst *, u32 *, | 270 | int nfs3svc_decode_sattrargs(struct svc_rqst *, __be32 *, |
| 273 | struct nfsd3_sattrargs *); | 271 | struct nfsd3_sattrargs *); |
| 274 | int nfs3svc_decode_diropargs(struct svc_rqst *, u32 *, | 272 | int nfs3svc_decode_diropargs(struct svc_rqst *, __be32 *, |
| 275 | struct nfsd3_diropargs *); | 273 | struct nfsd3_diropargs *); |
| 276 | int nfs3svc_decode_accessargs(struct svc_rqst *, u32 *, | 274 | int nfs3svc_decode_accessargs(struct svc_rqst *, __be32 *, |
| 277 | struct nfsd3_accessargs *); | 275 | struct nfsd3_accessargs *); |
| 278 | int nfs3svc_decode_readargs(struct svc_rqst *, u32 *, | 276 | int nfs3svc_decode_readargs(struct svc_rqst *, __be32 *, |
| 279 | struct nfsd3_readargs *); | 277 | struct nfsd3_readargs *); |
| 280 | int nfs3svc_decode_writeargs(struct svc_rqst *, u32 *, | 278 | int nfs3svc_decode_writeargs(struct svc_rqst *, __be32 *, |
| 281 | struct nfsd3_writeargs *); | 279 | struct nfsd3_writeargs *); |
| 282 | int nfs3svc_decode_createargs(struct svc_rqst *, u32 *, | 280 | int nfs3svc_decode_createargs(struct svc_rqst *, __be32 *, |
| 283 | struct nfsd3_createargs *); | 281 | struct nfsd3_createargs *); |
| 284 | int nfs3svc_decode_mkdirargs(struct svc_rqst *, u32 *, | 282 | int nfs3svc_decode_mkdirargs(struct svc_rqst *, __be32 *, |
| 285 | struct nfsd3_createargs *); | 283 | struct nfsd3_createargs *); |
| 286 | int nfs3svc_decode_mknodargs(struct svc_rqst *, u32 *, | 284 | int nfs3svc_decode_mknodargs(struct svc_rqst *, __be32 *, |
| 287 | struct nfsd3_mknodargs *); | 285 | struct nfsd3_mknodargs *); |
| 288 | int nfs3svc_decode_renameargs(struct svc_rqst *, u32 *, | 286 | int nfs3svc_decode_renameargs(struct svc_rqst *, __be32 *, |
| 289 | struct nfsd3_renameargs *); | 287 | struct nfsd3_renameargs *); |
| 290 | int nfs3svc_decode_readlinkargs(struct svc_rqst *, u32 *, | 288 | int nfs3svc_decode_readlinkargs(struct svc_rqst *, __be32 *, |
| 291 | struct nfsd3_readlinkargs *); | 289 | struct nfsd3_readlinkargs *); |
| 292 | int nfs3svc_decode_linkargs(struct svc_rqst *, u32 *, | 290 | int nfs3svc_decode_linkargs(struct svc_rqst *, __be32 *, |
| 293 | struct nfsd3_linkargs *); | 291 | struct nfsd3_linkargs *); |
| 294 | int nfs3svc_decode_symlinkargs(struct svc_rqst *, u32 *, | 292 | int nfs3svc_decode_symlinkargs(struct svc_rqst *, __be32 *, |
| 295 | struct nfsd3_symlinkargs *); | 293 | struct nfsd3_symlinkargs *); |
| 296 | int nfs3svc_decode_readdirargs(struct svc_rqst *, u32 *, | 294 | int nfs3svc_decode_readdirargs(struct svc_rqst *, __be32 *, |
| 297 | struct nfsd3_readdirargs *); | 295 | struct nfsd3_readdirargs *); |
| 298 | int nfs3svc_decode_readdirplusargs(struct svc_rqst *, u32 *, | 296 | int nfs3svc_decode_readdirplusargs(struct svc_rqst *, __be32 *, |
| 299 | struct nfsd3_readdirargs *); | 297 | struct nfsd3_readdirargs *); |
| 300 | int nfs3svc_decode_commitargs(struct svc_rqst *, u32 *, | 298 | int nfs3svc_decode_commitargs(struct svc_rqst *, __be32 *, |
| 301 | struct nfsd3_commitargs *); | 299 | struct nfsd3_commitargs *); |
| 302 | int nfs3svc_encode_voidres(struct svc_rqst *, u32 *, void *); | 300 | int nfs3svc_encode_voidres(struct svc_rqst *, __be32 *, void *); |
| 303 | int nfs3svc_encode_attrstat(struct svc_rqst *, u32 *, | 301 | int nfs3svc_encode_attrstat(struct svc_rqst *, __be32 *, |
| 304 | struct nfsd3_attrstat *); | 302 | struct nfsd3_attrstat *); |
| 305 | int nfs3svc_encode_wccstat(struct svc_rqst *, u32 *, | 303 | int nfs3svc_encode_wccstat(struct svc_rqst *, __be32 *, |
| 306 | struct nfsd3_attrstat *); | 304 | struct nfsd3_attrstat *); |
| 307 | int nfs3svc_encode_diropres(struct svc_rqst *, u32 *, | 305 | int nfs3svc_encode_diropres(struct svc_rqst *, __be32 *, |
| 308 | struct nfsd3_diropres *); | 306 | struct nfsd3_diropres *); |
| 309 | int nfs3svc_encode_accessres(struct svc_rqst *, u32 *, | 307 | int nfs3svc_encode_accessres(struct svc_rqst *, __be32 *, |
| 310 | struct nfsd3_accessres *); | 308 | struct nfsd3_accessres *); |
| 311 | int nfs3svc_encode_readlinkres(struct svc_rqst *, u32 *, | 309 | int nfs3svc_encode_readlinkres(struct svc_rqst *, __be32 *, |
| 312 | struct nfsd3_readlinkres *); | 310 | struct nfsd3_readlinkres *); |
| 313 | int nfs3svc_encode_readres(struct svc_rqst *, u32 *, struct nfsd3_readres *); | 311 | int nfs3svc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd3_readres *); |
| 314 | int nfs3svc_encode_writeres(struct svc_rqst *, u32 *, struct nfsd3_writeres *); | 312 | int nfs3svc_encode_writeres(struct svc_rqst *, __be32 *, struct nfsd3_writeres *); |
| 315 | int nfs3svc_encode_createres(struct svc_rqst *, u32 *, | 313 | int nfs3svc_encode_createres(struct svc_rqst *, __be32 *, |
| 316 | struct nfsd3_diropres *); | 314 | struct nfsd3_diropres *); |
| 317 | int nfs3svc_encode_renameres(struct svc_rqst *, u32 *, | 315 | int nfs3svc_encode_renameres(struct svc_rqst *, __be32 *, |
| 318 | struct nfsd3_renameres *); | 316 | struct nfsd3_renameres *); |
| 319 | int nfs3svc_encode_linkres(struct svc_rqst *, u32 *, | 317 | int nfs3svc_encode_linkres(struct svc_rqst *, __be32 *, |
| 320 | struct nfsd3_linkres *); | 318 | struct nfsd3_linkres *); |
| 321 | int nfs3svc_encode_readdirres(struct svc_rqst *, u32 *, | 319 | int nfs3svc_encode_readdirres(struct svc_rqst *, __be32 *, |
| 322 | struct nfsd3_readdirres *); | 320 | struct nfsd3_readdirres *); |
| 323 | int nfs3svc_encode_fsstatres(struct svc_rqst *, u32 *, | 321 | int nfs3svc_encode_fsstatres(struct svc_rqst *, __be32 *, |
| 324 | struct nfsd3_fsstatres *); | 322 | struct nfsd3_fsstatres *); |
| 325 | int nfs3svc_encode_fsinfores(struct svc_rqst *, u32 *, | 323 | int nfs3svc_encode_fsinfores(struct svc_rqst *, __be32 *, |
| 326 | struct nfsd3_fsinfores *); | 324 | struct nfsd3_fsinfores *); |
| 327 | int nfs3svc_encode_pathconfres(struct svc_rqst *, u32 *, | 325 | int nfs3svc_encode_pathconfres(struct svc_rqst *, __be32 *, |
| 328 | struct nfsd3_pathconfres *); | 326 | struct nfsd3_pathconfres *); |
| 329 | int nfs3svc_encode_commitres(struct svc_rqst *, u32 *, | 327 | int nfs3svc_encode_commitres(struct svc_rqst *, __be32 *, |
| 330 | struct nfsd3_commitres *); | 328 | struct nfsd3_commitres *); |
| 331 | 329 | ||
| 332 | int nfs3svc_release_fhandle(struct svc_rqst *, u32 *, | 330 | int nfs3svc_release_fhandle(struct svc_rqst *, __be32 *, |
| 333 | struct nfsd3_attrstat *); | 331 | struct nfsd3_attrstat *); |
| 334 | int nfs3svc_release_fhandle2(struct svc_rqst *, u32 *, | 332 | int nfs3svc_release_fhandle2(struct svc_rqst *, __be32 *, |
| 335 | struct nfsd3_fhandle_pair *); | 333 | struct nfsd3_fhandle_pair *); |
| 336 | int nfs3svc_encode_entry(struct readdir_cd *, const char *name, | 334 | int nfs3svc_encode_entry(struct readdir_cd *, const char *name, |
| 337 | int namlen, loff_t offset, ino_t ino, | 335 | int namlen, loff_t offset, ino_t ino, |
| @@ -340,9 +338,9 @@ int nfs3svc_encode_entry_plus(struct readdir_cd *, const char *name, | |||
| 340 | int namlen, loff_t offset, ino_t ino, | 338 | int namlen, loff_t offset, ino_t ino, |
| 341 | unsigned int); | 339 | unsigned int); |
| 342 | /* Helper functions for NFSv3 ACL code */ | 340 | /* Helper functions for NFSv3 ACL code */ |
| 343 | u32 *nfs3svc_encode_post_op_attr(struct svc_rqst *rqstp, u32 *p, | 341 | __be32 *nfs3svc_encode_post_op_attr(struct svc_rqst *rqstp, __be32 *p, |
| 344 | struct svc_fh *fhp); | 342 | struct svc_fh *fhp); |
| 345 | u32 *nfs3svc_decode_fh(u32 *p, struct svc_fh *fhp); | 343 | __be32 *nfs3svc_decode_fh(__be32 *p, struct svc_fh *fhp); |
| 346 | 344 | ||
| 347 | 345 | ||
| 348 | #endif /* _LINUX_NFSD_XDR3_H */ | 346 | #endif /* _LINUX_NFSD_XDR3_H */ |
diff --git a/include/linux/nfsd/xdr4.h b/include/linux/nfsd/xdr4.h index 77adba7d2281..45ca01b5f844 100644 --- a/include/linux/nfsd/xdr4.h +++ b/include/linux/nfsd/xdr4.h | |||
| @@ -241,7 +241,6 @@ struct nfsd4_read { | |||
| 241 | stateid_t rd_stateid; /* request */ | 241 | stateid_t rd_stateid; /* request */ |
| 242 | u64 rd_offset; /* request */ | 242 | u64 rd_offset; /* request */ |
| 243 | u32 rd_length; /* request */ | 243 | u32 rd_length; /* request */ |
| 244 | struct kvec rd_iov[RPCSVC_MAXPAGES]; | ||
| 245 | int rd_vlen; | 244 | int rd_vlen; |
| 246 | struct file *rd_filp; | 245 | struct file *rd_filp; |
| 247 | 246 | ||
| @@ -259,9 +258,9 @@ struct nfsd4_readdir { | |||
| 259 | struct svc_fh * rd_fhp; /* response */ | 258 | struct svc_fh * rd_fhp; /* response */ |
| 260 | 259 | ||
| 261 | struct readdir_cd common; | 260 | struct readdir_cd common; |
| 262 | u32 * buffer; | 261 | __be32 * buffer; |
| 263 | int buflen; | 262 | int buflen; |
| 264 | u32 * offset; | 263 | __be32 * offset; |
| 265 | }; | 264 | }; |
| 266 | 265 | ||
| 267 | struct nfsd4_release_lockowner { | 266 | struct nfsd4_release_lockowner { |
| @@ -326,7 +325,6 @@ struct nfsd4_write { | |||
| 326 | u64 wr_offset; /* request */ | 325 | u64 wr_offset; /* request */ |
| 327 | u32 wr_stable_how; /* request */ | 326 | u32 wr_stable_how; /* request */ |
| 328 | u32 wr_buflen; /* request */ | 327 | u32 wr_buflen; /* request */ |
| 329 | struct kvec wr_vec[RPCSVC_MAXPAGES]; /* request */ | ||
| 330 | int wr_vlen; | 328 | int wr_vlen; |
| 331 | 329 | ||
| 332 | u32 wr_bytes_written; /* response */ | 330 | u32 wr_bytes_written; /* response */ |
| @@ -336,7 +334,7 @@ struct nfsd4_write { | |||
| 336 | 334 | ||
| 337 | struct nfsd4_op { | 335 | struct nfsd4_op { |
| 338 | int opnum; | 336 | int opnum; |
| 339 | int status; | 337 | __be32 status; |
| 340 | union { | 338 | union { |
| 341 | struct nfsd4_access access; | 339 | struct nfsd4_access access; |
| 342 | struct nfsd4_close close; | 340 | struct nfsd4_close close; |
| @@ -373,12 +371,12 @@ struct nfsd4_op { | |||
| 373 | 371 | ||
| 374 | struct nfsd4_compoundargs { | 372 | struct nfsd4_compoundargs { |
| 375 | /* scratch variables for XDR decode */ | 373 | /* scratch variables for XDR decode */ |
| 376 | u32 * p; | 374 | __be32 * p; |
| 377 | u32 * end; | 375 | __be32 * end; |
| 378 | struct page ** pagelist; | 376 | struct page ** pagelist; |
| 379 | int pagelen; | 377 | int pagelen; |
| 380 | u32 tmp[8]; | 378 | __be32 tmp[8]; |
| 381 | u32 * tmpp; | 379 | __be32 * tmpp; |
| 382 | struct tmpbuf { | 380 | struct tmpbuf { |
| 383 | struct tmpbuf *next; | 381 | struct tmpbuf *next; |
| 384 | void (*release)(const void *); | 382 | void (*release)(const void *); |
| @@ -397,15 +395,15 @@ struct nfsd4_compoundargs { | |||
| 397 | 395 | ||
| 398 | struct nfsd4_compoundres { | 396 | struct nfsd4_compoundres { |
| 399 | /* scratch variables for XDR encode */ | 397 | /* scratch variables for XDR encode */ |
| 400 | u32 * p; | 398 | __be32 * p; |
| 401 | u32 * end; | 399 | __be32 * end; |
| 402 | struct xdr_buf * xbuf; | 400 | struct xdr_buf * xbuf; |
| 403 | struct svc_rqst * rqstp; | 401 | struct svc_rqst * rqstp; |
| 404 | 402 | ||
| 405 | u32 taglen; | 403 | u32 taglen; |
| 406 | char * tag; | 404 | char * tag; |
| 407 | u32 opcnt; | 405 | u32 opcnt; |
| 408 | u32 * tagp; /* where to encode tag and opcount */ | 406 | __be32 * tagp; /* where to encode tag and opcount */ |
| 409 | }; | 407 | }; |
| 410 | 408 | ||
| 411 | #define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs) | 409 | #define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs) |
| @@ -421,45 +419,45 @@ set_change_info(struct nfsd4_change_info *cinfo, struct svc_fh *fhp) | |||
| 421 | cinfo->after_ctime_nsec = fhp->fh_post_ctime.tv_nsec; | 419 | cinfo->after_ctime_nsec = fhp->fh_post_ctime.tv_nsec; |
| 422 | } | 420 | } |
| 423 | 421 | ||
| 424 | int nfs4svc_encode_voidres(struct svc_rqst *, u32 *, void *); | 422 | int nfs4svc_encode_voidres(struct svc_rqst *, __be32 *, void *); |
| 425 | int nfs4svc_decode_compoundargs(struct svc_rqst *, u32 *, | 423 | int nfs4svc_decode_compoundargs(struct svc_rqst *, __be32 *, |
| 426 | struct nfsd4_compoundargs *); | 424 | struct nfsd4_compoundargs *); |
| 427 | int nfs4svc_encode_compoundres(struct svc_rqst *, u32 *, | 425 | int nfs4svc_encode_compoundres(struct svc_rqst *, __be32 *, |
| 428 | struct nfsd4_compoundres *); | 426 | struct nfsd4_compoundres *); |
| 429 | void nfsd4_encode_operation(struct nfsd4_compoundres *, struct nfsd4_op *); | 427 | void nfsd4_encode_operation(struct nfsd4_compoundres *, struct nfsd4_op *); |
| 430 | void nfsd4_encode_replay(struct nfsd4_compoundres *resp, struct nfsd4_op *op); | 428 | void nfsd4_encode_replay(struct nfsd4_compoundres *resp, struct nfsd4_op *op); |
| 431 | int nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp, | 429 | __be32 nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp, |
| 432 | struct dentry *dentry, u32 *buffer, int *countp, | 430 | struct dentry *dentry, __be32 *buffer, int *countp, |
| 433 | u32 *bmval, struct svc_rqst *); | 431 | u32 *bmval, struct svc_rqst *); |
| 434 | extern int nfsd4_setclientid(struct svc_rqst *rqstp, | 432 | extern __be32 nfsd4_setclientid(struct svc_rqst *rqstp, |
| 435 | struct nfsd4_setclientid *setclid); | 433 | struct nfsd4_setclientid *setclid); |
| 436 | extern int nfsd4_setclientid_confirm(struct svc_rqst *rqstp, | 434 | extern __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp, |
| 437 | struct nfsd4_setclientid_confirm *setclientid_confirm); | 435 | struct nfsd4_setclientid_confirm *setclientid_confirm); |
| 438 | extern int nfsd4_process_open1(struct nfsd4_open *open); | 436 | extern __be32 nfsd4_process_open1(struct nfsd4_open *open); |
| 439 | extern int nfsd4_process_open2(struct svc_rqst *rqstp, | 437 | extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp, |
| 440 | struct svc_fh *current_fh, struct nfsd4_open *open); | 438 | struct svc_fh *current_fh, struct nfsd4_open *open); |
| 441 | extern int nfsd4_open_confirm(struct svc_rqst *rqstp, | 439 | extern __be32 nfsd4_open_confirm(struct svc_rqst *rqstp, |
| 442 | struct svc_fh *current_fh, struct nfsd4_open_confirm *oc, | 440 | struct svc_fh *current_fh, struct nfsd4_open_confirm *oc, |
| 443 | struct nfs4_stateowner **); | 441 | struct nfs4_stateowner **); |
| 444 | extern int nfsd4_close(struct svc_rqst *rqstp, struct svc_fh *current_fh, | 442 | extern __be32 nfsd4_close(struct svc_rqst *rqstp, struct svc_fh *current_fh, |
| 445 | struct nfsd4_close *close, | 443 | struct nfsd4_close *close, |
| 446 | struct nfs4_stateowner **replay_owner); | 444 | struct nfs4_stateowner **replay_owner); |
| 447 | extern int nfsd4_open_downgrade(struct svc_rqst *rqstp, | 445 | extern __be32 nfsd4_open_downgrade(struct svc_rqst *rqstp, |
| 448 | struct svc_fh *current_fh, struct nfsd4_open_downgrade *od, | 446 | struct svc_fh *current_fh, struct nfsd4_open_downgrade *od, |
| 449 | struct nfs4_stateowner **replay_owner); | 447 | struct nfs4_stateowner **replay_owner); |
| 450 | extern int nfsd4_lock(struct svc_rqst *rqstp, struct svc_fh *current_fh, | 448 | extern __be32 nfsd4_lock(struct svc_rqst *rqstp, struct svc_fh *current_fh, |
| 451 | struct nfsd4_lock *lock, | 449 | struct nfsd4_lock *lock, |
| 452 | struct nfs4_stateowner **replay_owner); | 450 | struct nfs4_stateowner **replay_owner); |
| 453 | extern int nfsd4_lockt(struct svc_rqst *rqstp, struct svc_fh *current_fh, | 451 | extern __be32 nfsd4_lockt(struct svc_rqst *rqstp, struct svc_fh *current_fh, |
| 454 | struct nfsd4_lockt *lockt); | 452 | struct nfsd4_lockt *lockt); |
| 455 | extern int nfsd4_locku(struct svc_rqst *rqstp, struct svc_fh *current_fh, | 453 | extern __be32 nfsd4_locku(struct svc_rqst *rqstp, struct svc_fh *current_fh, |
| 456 | struct nfsd4_locku *locku, | 454 | struct nfsd4_locku *locku, |
| 457 | struct nfs4_stateowner **replay_owner); | 455 | struct nfs4_stateowner **replay_owner); |
| 458 | extern int | 456 | extern __be32 |
| 459 | nfsd4_release_lockowner(struct svc_rqst *rqstp, | 457 | nfsd4_release_lockowner(struct svc_rqst *rqstp, |
| 460 | struct nfsd4_release_lockowner *rlockowner); | 458 | struct nfsd4_release_lockowner *rlockowner); |
| 461 | extern void nfsd4_release_compoundargs(struct nfsd4_compoundargs *); | 459 | extern void nfsd4_release_compoundargs(struct nfsd4_compoundargs *); |
| 462 | extern int nfsd4_delegreturn(struct svc_rqst *rqstp, | 460 | extern __be32 nfsd4_delegreturn(struct svc_rqst *rqstp, |
| 463 | struct svc_fh *current_fh, struct nfsd4_delegreturn *dr); | 461 | struct svc_fh *current_fh, struct nfsd4_delegreturn *dr); |
| 464 | #endif | 462 | #endif |
| 465 | 463 | ||
diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h index 5dce5c21822c..b1063e9cdb1b 100644 --- a/include/linux/nodemask.h +++ b/include/linux/nodemask.h | |||
| @@ -8,8 +8,8 @@ | |||
| 8 | * See detailed comments in the file linux/bitmap.h describing the | 8 | * See detailed comments in the file linux/bitmap.h describing the |
| 9 | * data type on which these nodemasks are based. | 9 | * data type on which these nodemasks are based. |
| 10 | * | 10 | * |
| 11 | * For details of nodemask_scnprintf() and nodemask_parse(), | 11 | * For details of nodemask_scnprintf() and nodemask_parse_user(), |
| 12 | * see bitmap_scnprintf() and bitmap_parse() in lib/bitmap.c. | 12 | * see bitmap_scnprintf() and bitmap_parse_user() in lib/bitmap.c. |
| 13 | * For details of nodelist_scnprintf() and nodelist_parse(), see | 13 | * For details of nodelist_scnprintf() and nodelist_parse(), see |
| 14 | * bitmap_scnlistprintf() and bitmap_parselist(), also in bitmap.c. | 14 | * bitmap_scnlistprintf() and bitmap_parselist(), also in bitmap.c. |
| 15 | * For details of node_remap(), see bitmap_bitremap in lib/bitmap.c. | 15 | * For details of node_remap(), see bitmap_bitremap in lib/bitmap.c. |
| @@ -51,7 +51,7 @@ | |||
| 51 | * unsigned long *nodes_addr(mask) Array of unsigned long's in mask | 51 | * unsigned long *nodes_addr(mask) Array of unsigned long's in mask |
| 52 | * | 52 | * |
| 53 | * int nodemask_scnprintf(buf, len, mask) Format nodemask for printing | 53 | * int nodemask_scnprintf(buf, len, mask) Format nodemask for printing |
| 54 | * int nodemask_parse(ubuf, ulen, mask) Parse ascii string as nodemask | 54 | * int nodemask_parse_user(ubuf, ulen, mask) Parse ascii string as nodemask |
| 55 | * int nodelist_scnprintf(buf, len, mask) Format nodemask as list for printing | 55 | * int nodelist_scnprintf(buf, len, mask) Format nodemask as list for printing |
| 56 | * int nodelist_parse(buf, map) Parse ascii string as nodelist | 56 | * int nodelist_parse(buf, map) Parse ascii string as nodelist |
| 57 | * int node_remap(oldbit, old, new) newbit = map(old, new)(oldbit) | 57 | * int node_remap(oldbit, old, new) newbit = map(old, new)(oldbit) |
| @@ -288,12 +288,12 @@ static inline int __nodemask_scnprintf(char *buf, int len, | |||
| 288 | return bitmap_scnprintf(buf, len, srcp->bits, nbits); | 288 | return bitmap_scnprintf(buf, len, srcp->bits, nbits); |
| 289 | } | 289 | } |
| 290 | 290 | ||
| 291 | #define nodemask_parse(ubuf, ulen, dst) \ | 291 | #define nodemask_parse_user(ubuf, ulen, dst) \ |
| 292 | __nodemask_parse((ubuf), (ulen), &(dst), MAX_NUMNODES) | 292 | __nodemask_parse_user((ubuf), (ulen), &(dst), MAX_NUMNODES) |
| 293 | static inline int __nodemask_parse(const char __user *buf, int len, | 293 | static inline int __nodemask_parse_user(const char __user *buf, int len, |
| 294 | nodemask_t *dstp, int nbits) | 294 | nodemask_t *dstp, int nbits) |
| 295 | { | 295 | { |
| 296 | return bitmap_parse(buf, len, dstp->bits, nbits); | 296 | return bitmap_parse_user(buf, len, dstp->bits, nbits); |
| 297 | } | 297 | } |
| 298 | 298 | ||
| 299 | #define nodelist_scnprintf(buf, len, src) \ | 299 | #define nodelist_scnprintf(buf, len, src) \ |
diff --git a/include/linux/notifier.h b/include/linux/notifier.h index 7ff386a6ae87..10a43ed0527e 100644 --- a/include/linux/notifier.h +++ b/include/linux/notifier.h | |||
| @@ -12,9 +12,10 @@ | |||
| 12 | #include <linux/errno.h> | 12 | #include <linux/errno.h> |
| 13 | #include <linux/mutex.h> | 13 | #include <linux/mutex.h> |
| 14 | #include <linux/rwsem.h> | 14 | #include <linux/rwsem.h> |
| 15 | #include <linux/srcu.h> | ||
| 15 | 16 | ||
| 16 | /* | 17 | /* |
| 17 | * Notifier chains are of three types: | 18 | * Notifier chains are of four types: |
| 18 | * | 19 | * |
| 19 | * Atomic notifier chains: Chain callbacks run in interrupt/atomic | 20 | * Atomic notifier chains: Chain callbacks run in interrupt/atomic |
| 20 | * context. Callouts are not allowed to block. | 21 | * context. Callouts are not allowed to block. |
| @@ -23,13 +24,27 @@ | |||
| 23 | * Raw notifier chains: There are no restrictions on callbacks, | 24 | * Raw notifier chains: There are no restrictions on callbacks, |
| 24 | * registration, or unregistration. All locking and protection | 25 | * registration, or unregistration. All locking and protection |
| 25 | * must be provided by the caller. | 26 | * must be provided by the caller. |
| 27 | * SRCU notifier chains: A variant of blocking notifier chains, with | ||
| 28 | * the same restrictions. | ||
| 26 | * | 29 | * |
| 27 | * atomic_notifier_chain_register() may be called from an atomic context, | 30 | * atomic_notifier_chain_register() may be called from an atomic context, |
| 28 | * but blocking_notifier_chain_register() must be called from a process | 31 | * but blocking_notifier_chain_register() and srcu_notifier_chain_register() |
| 29 | * context. Ditto for the corresponding _unregister() routines. | 32 | * must be called from a process context. Ditto for the corresponding |
| 33 | * _unregister() routines. | ||
| 30 | * | 34 | * |
| 31 | * atomic_notifier_chain_unregister() and blocking_notifier_chain_unregister() | 35 | * atomic_notifier_chain_unregister(), blocking_notifier_chain_unregister(), |
| 32 | * _must not_ be called from within the call chain. | 36 | * and srcu_notifier_chain_unregister() _must not_ be called from within |
| 37 | * the call chain. | ||
| 38 | * | ||
| 39 | * SRCU notifier chains are an alternative form of blocking notifier chains. | ||
| 40 | * They use SRCU (Sleepable Read-Copy Update) instead of rw-semaphores for | ||
| 41 | * protection of the chain links. This means there is _very_ low overhead | ||
| 42 | * in srcu_notifier_call_chain(): no cache bounces and no memory barriers. | ||
| 43 | * As compensation, srcu_notifier_chain_unregister() is rather expensive. | ||
| 44 | * SRCU notifier chains should be used when the chain will be called very | ||
| 45 | * often but notifier_blocks will seldom be removed. Also, SRCU notifier | ||
| 46 | * chains are slightly more difficult to use because they require special | ||
| 47 | * runtime initialization. | ||
| 33 | */ | 48 | */ |
| 34 | 49 | ||
| 35 | struct notifier_block { | 50 | struct notifier_block { |
| @@ -52,6 +67,12 @@ struct raw_notifier_head { | |||
| 52 | struct notifier_block *head; | 67 | struct notifier_block *head; |
| 53 | }; | 68 | }; |
| 54 | 69 | ||
| 70 | struct srcu_notifier_head { | ||
| 71 | struct mutex mutex; | ||
| 72 | struct srcu_struct srcu; | ||
| 73 | struct notifier_block *head; | ||
| 74 | }; | ||
| 75 | |||
| 55 | #define ATOMIC_INIT_NOTIFIER_HEAD(name) do { \ | 76 | #define ATOMIC_INIT_NOTIFIER_HEAD(name) do { \ |
| 56 | spin_lock_init(&(name)->lock); \ | 77 | spin_lock_init(&(name)->lock); \ |
| 57 | (name)->head = NULL; \ | 78 | (name)->head = NULL; \ |
| @@ -64,6 +85,11 @@ struct raw_notifier_head { | |||
| 64 | (name)->head = NULL; \ | 85 | (name)->head = NULL; \ |
| 65 | } while (0) | 86 | } while (0) |
| 66 | 87 | ||
| 88 | /* srcu_notifier_heads must be initialized and cleaned up dynamically */ | ||
| 89 | extern void srcu_init_notifier_head(struct srcu_notifier_head *nh); | ||
| 90 | #define srcu_cleanup_notifier_head(name) \ | ||
| 91 | cleanup_srcu_struct(&(name)->srcu); | ||
| 92 | |||
| 67 | #define ATOMIC_NOTIFIER_INIT(name) { \ | 93 | #define ATOMIC_NOTIFIER_INIT(name) { \ |
| 68 | .lock = __SPIN_LOCK_UNLOCKED(name.lock), \ | 94 | .lock = __SPIN_LOCK_UNLOCKED(name.lock), \ |
| 69 | .head = NULL } | 95 | .head = NULL } |
| @@ -72,6 +98,7 @@ struct raw_notifier_head { | |||
| 72 | .head = NULL } | 98 | .head = NULL } |
| 73 | #define RAW_NOTIFIER_INIT(name) { \ | 99 | #define RAW_NOTIFIER_INIT(name) { \ |
| 74 | .head = NULL } | 100 | .head = NULL } |
| 101 | /* srcu_notifier_heads cannot be initialized statically */ | ||
| 75 | 102 | ||
| 76 | #define ATOMIC_NOTIFIER_HEAD(name) \ | 103 | #define ATOMIC_NOTIFIER_HEAD(name) \ |
| 77 | struct atomic_notifier_head name = \ | 104 | struct atomic_notifier_head name = \ |
| @@ -91,6 +118,8 @@ extern int blocking_notifier_chain_register(struct blocking_notifier_head *, | |||
| 91 | struct notifier_block *); | 118 | struct notifier_block *); |
| 92 | extern int raw_notifier_chain_register(struct raw_notifier_head *, | 119 | extern int raw_notifier_chain_register(struct raw_notifier_head *, |
| 93 | struct notifier_block *); | 120 | struct notifier_block *); |
| 121 | extern int srcu_notifier_chain_register(struct srcu_notifier_head *, | ||
| 122 | struct notifier_block *); | ||
| 94 | 123 | ||
| 95 | extern int atomic_notifier_chain_unregister(struct atomic_notifier_head *, | 124 | extern int atomic_notifier_chain_unregister(struct atomic_notifier_head *, |
| 96 | struct notifier_block *); | 125 | struct notifier_block *); |
| @@ -98,6 +127,8 @@ extern int blocking_notifier_chain_unregister(struct blocking_notifier_head *, | |||
| 98 | struct notifier_block *); | 127 | struct notifier_block *); |
| 99 | extern int raw_notifier_chain_unregister(struct raw_notifier_head *, | 128 | extern int raw_notifier_chain_unregister(struct raw_notifier_head *, |
| 100 | struct notifier_block *); | 129 | struct notifier_block *); |
| 130 | extern int srcu_notifier_chain_unregister(struct srcu_notifier_head *, | ||
| 131 | struct notifier_block *); | ||
| 101 | 132 | ||
| 102 | extern int atomic_notifier_call_chain(struct atomic_notifier_head *, | 133 | extern int atomic_notifier_call_chain(struct atomic_notifier_head *, |
| 103 | unsigned long val, void *v); | 134 | unsigned long val, void *v); |
| @@ -105,6 +136,8 @@ extern int blocking_notifier_call_chain(struct blocking_notifier_head *, | |||
| 105 | unsigned long val, void *v); | 136 | unsigned long val, void *v); |
| 106 | extern int raw_notifier_call_chain(struct raw_notifier_head *, | 137 | extern int raw_notifier_call_chain(struct raw_notifier_head *, |
| 107 | unsigned long val, void *v); | 138 | unsigned long val, void *v); |
| 139 | extern int srcu_notifier_call_chain(struct srcu_notifier_head *, | ||
| 140 | unsigned long val, void *v); | ||
| 108 | 141 | ||
| 109 | #define NOTIFY_DONE 0x0000 /* Don't care */ | 142 | #define NOTIFY_DONE 0x0000 /* Don't care */ |
| 110 | #define NOTIFY_OK 0x0001 /* Suits me */ | 143 | #define NOTIFY_OK 0x0001 /* Suits me */ |
diff --git a/include/linux/oom.h b/include/linux/oom.h new file mode 100644 index 000000000000..ad76463629a0 --- /dev/null +++ b/include/linux/oom.h | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | #ifndef __INCLUDE_LINUX_OOM_H | ||
| 2 | #define __INCLUDE_LINUX_OOM_H | ||
| 3 | |||
| 4 | /* /proc/<pid>/oom_adj set to -17 protects from the oom-killer */ | ||
| 5 | #define OOM_DISABLE (-17) | ||
| 6 | /* inclusive */ | ||
| 7 | #define OOM_ADJUST_MIN (-16) | ||
| 8 | #define OOM_ADJUST_MAX 15 | ||
| 9 | |||
| 10 | #endif | ||
diff --git a/include/linux/parport.h b/include/linux/parport.h index 5bf321e82c99..80682aaa8f18 100644 --- a/include/linux/parport.h +++ b/include/linux/parport.h | |||
| @@ -229,7 +229,7 @@ struct pardevice { | |||
| 229 | int (*preempt)(void *); | 229 | int (*preempt)(void *); |
| 230 | void (*wakeup)(void *); | 230 | void (*wakeup)(void *); |
| 231 | void *private; | 231 | void *private; |
| 232 | void (*irq_func)(int, void *, struct pt_regs *); | 232 | void (*irq_func)(int, void *); |
| 233 | unsigned int flags; | 233 | unsigned int flags; |
| 234 | struct pardevice *next; | 234 | struct pardevice *next; |
| 235 | struct pardevice *prev; | 235 | struct pardevice *prev; |
| @@ -375,7 +375,7 @@ extern void parport_put_port (struct parport *); | |||
| 375 | struct pardevice *parport_register_device(struct parport *port, | 375 | struct pardevice *parport_register_device(struct parport *port, |
| 376 | const char *name, | 376 | const char *name, |
| 377 | int (*pf)(void *), void (*kf)(void *), | 377 | int (*pf)(void *), void (*kf)(void *), |
| 378 | void (*irq_func)(int, void *, struct pt_regs *), | 378 | void (*irq_func)(int, void *), |
| 379 | int flags, void *handle); | 379 | int flags, void *handle); |
| 380 | 380 | ||
| 381 | /* parport_unregister unlinks a device from the chain. */ | 381 | /* parport_unregister unlinks a device from the chain. */ |
| @@ -457,7 +457,7 @@ static __inline__ int parport_yield_blocking(struct pardevice *dev) | |||
| 457 | #define PARPORT_FLAG_EXCL (1<<1) /* EXCL driver registered. */ | 457 | #define PARPORT_FLAG_EXCL (1<<1) /* EXCL driver registered. */ |
| 458 | 458 | ||
| 459 | /* IEEE1284 functions */ | 459 | /* IEEE1284 functions */ |
| 460 | extern void parport_ieee1284_interrupt (int, void *, struct pt_regs *); | 460 | extern void parport_ieee1284_interrupt (int, void *); |
| 461 | extern int parport_negotiate (struct parport *, int mode); | 461 | extern int parport_negotiate (struct parport *, int mode); |
| 462 | extern ssize_t parport_write (struct parport *, const void *buf, size_t len); | 462 | extern ssize_t parport_write (struct parport *, const void *buf, size_t len); |
| 463 | extern ssize_t parport_read (struct parport *, void *buf, size_t len); | 463 | extern ssize_t parport_read (struct parport *, void *buf, size_t len); |
| @@ -502,8 +502,7 @@ extern void parport_daisy_fini (struct parport *port); | |||
| 502 | extern struct pardevice *parport_open (int devnum, const char *name, | 502 | extern struct pardevice *parport_open (int devnum, const char *name, |
| 503 | int (*pf) (void *), | 503 | int (*pf) (void *), |
| 504 | void (*kf) (void *), | 504 | void (*kf) (void *), |
| 505 | void (*irqf) (int, void *, | 505 | void (*irqf) (int, void *), |
| 506 | struct pt_regs *), | ||
| 507 | int flags, void *handle); | 506 | int flags, void *handle); |
| 508 | extern void parport_close (struct pardevice *dev); | 507 | extern void parport_close (struct pardevice *dev); |
| 509 | extern ssize_t parport_device_id (int devnum, char *buffer, size_t len); | 508 | extern ssize_t parport_device_id (int devnum, char *buffer, size_t len); |
| @@ -512,13 +511,12 @@ extern void parport_daisy_deselect_all (struct parport *port); | |||
| 512 | extern int parport_daisy_select (struct parport *port, int daisy, int mode); | 511 | extern int parport_daisy_select (struct parport *port, int daisy, int mode); |
| 513 | 512 | ||
| 514 | /* Lowlevel drivers _can_ call this support function to handle irqs. */ | 513 | /* Lowlevel drivers _can_ call this support function to handle irqs. */ |
| 515 | static __inline__ void parport_generic_irq(int irq, struct parport *port, | 514 | static __inline__ void parport_generic_irq(int irq, struct parport *port) |
| 516 | struct pt_regs *regs) | ||
| 517 | { | 515 | { |
| 518 | parport_ieee1284_interrupt (irq, port, regs); | 516 | parport_ieee1284_interrupt (irq, port); |
| 519 | read_lock(&port->cad_lock); | 517 | read_lock(&port->cad_lock); |
| 520 | if (port->cad && port->cad->irq_func) | 518 | if (port->cad && port->cad->irq_func) |
| 521 | port->cad->irq_func(irq, port->cad->private, regs); | 519 | port->cad->irq_func(irq, port->cad->private); |
| 522 | read_unlock(&port->cad_lock); | 520 | read_unlock(&port->cad_lock); |
| 523 | } | 521 | } |
| 524 | 522 | ||
diff --git a/include/linux/pci.h b/include/linux/pci.h index 4431ce4e1e6f..4689e2a699c0 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
| @@ -443,6 +443,7 @@ extern void pci_remove_bus(struct pci_bus *b); | |||
| 443 | extern void pci_remove_bus_device(struct pci_dev *dev); | 443 | extern void pci_remove_bus_device(struct pci_dev *dev); |
| 444 | extern void pci_stop_bus_device(struct pci_dev *dev); | 444 | extern void pci_stop_bus_device(struct pci_dev *dev); |
| 445 | void pci_setup_cardbus(struct pci_bus *bus); | 445 | void pci_setup_cardbus(struct pci_bus *bus); |
| 446 | extern void pci_sort_breadthfirst(void); | ||
| 446 | 447 | ||
| 447 | /* Generic PCI functions exported to card drivers */ | 448 | /* Generic PCI functions exported to card drivers */ |
| 448 | 449 | ||
| @@ -452,13 +453,14 @@ struct pci_dev *pci_find_slot (unsigned int bus, unsigned int devfn); | |||
| 452 | int pci_find_capability (struct pci_dev *dev, int cap); | 453 | int pci_find_capability (struct pci_dev *dev, int cap); |
| 453 | int pci_find_next_capability (struct pci_dev *dev, u8 pos, int cap); | 454 | int pci_find_next_capability (struct pci_dev *dev, u8 pos, int cap); |
| 454 | int pci_find_ext_capability (struct pci_dev *dev, int cap); | 455 | int pci_find_ext_capability (struct pci_dev *dev, int cap); |
| 455 | struct pci_bus * pci_find_next_bus(const struct pci_bus *from); | 456 | struct pci_bus *pci_find_next_bus(const struct pci_bus *from); |
| 456 | 457 | ||
| 457 | struct pci_dev *pci_get_device (unsigned int vendor, unsigned int device, struct pci_dev *from); | 458 | struct pci_dev *pci_get_device (unsigned int vendor, unsigned int device, struct pci_dev *from); |
| 458 | struct pci_dev *pci_get_subsys (unsigned int vendor, unsigned int device, | 459 | struct pci_dev *pci_get_subsys (unsigned int vendor, unsigned int device, |
| 459 | unsigned int ss_vendor, unsigned int ss_device, | 460 | unsigned int ss_vendor, unsigned int ss_device, |
| 460 | struct pci_dev *from); | 461 | struct pci_dev *from); |
| 461 | struct pci_dev *pci_get_slot (struct pci_bus *bus, unsigned int devfn); | 462 | struct pci_dev *pci_get_slot (struct pci_bus *bus, unsigned int devfn); |
| 463 | struct pci_dev *pci_get_bus_and_slot (unsigned int bus, unsigned int devfn); | ||
| 462 | struct pci_dev *pci_get_class (unsigned int class, struct pci_dev *from); | 464 | struct pci_dev *pci_get_class (unsigned int class, struct pci_dev *from); |
| 463 | int pci_dev_present(const struct pci_device_id *ids); | 465 | int pci_dev_present(const struct pci_device_id *ids); |
| 464 | 466 | ||
| @@ -595,6 +597,7 @@ struct msix_entry { | |||
| 595 | u16 entry; /* driver uses to specify entry, OS writes */ | 597 | u16 entry; /* driver uses to specify entry, OS writes */ |
| 596 | }; | 598 | }; |
| 597 | 599 | ||
| 600 | |||
| 598 | #ifndef CONFIG_PCI_MSI | 601 | #ifndef CONFIG_PCI_MSI |
| 599 | static inline void pci_scan_msi_device(struct pci_dev *dev) {} | 602 | static inline void pci_scan_msi_device(struct pci_dev *dev) {} |
| 600 | static inline int pci_enable_msi(struct pci_dev *dev) {return -1;} | 603 | static inline int pci_enable_msi(struct pci_dev *dev) {return -1;} |
| @@ -613,6 +616,12 @@ extern void pci_disable_msix(struct pci_dev *dev); | |||
| 613 | extern void msi_remove_pci_irq_vectors(struct pci_dev *dev); | 616 | extern void msi_remove_pci_irq_vectors(struct pci_dev *dev); |
| 614 | #endif | 617 | #endif |
| 615 | 618 | ||
| 619 | #ifdef CONFIG_HT_IRQ | ||
| 620 | /* The functions a driver should call */ | ||
| 621 | int ht_create_irq(struct pci_dev *dev, int idx); | ||
| 622 | void ht_destroy_irq(unsigned int irq); | ||
| 623 | #endif /* CONFIG_HT_IRQ */ | ||
| 624 | |||
| 616 | extern void pci_block_user_cfg_access(struct pci_dev *dev); | 625 | extern void pci_block_user_cfg_access(struct pci_dev *dev); |
| 617 | extern void pci_unblock_user_cfg_access(struct pci_dev *dev); | 626 | extern void pci_unblock_user_cfg_access(struct pci_dev *dev); |
| 618 | 627 | ||
diff --git a/include/linux/pci_hotplug.h b/include/linux/pci_hotplug.h new file mode 100644 index 000000000000..a675a05c4091 --- /dev/null +++ b/include/linux/pci_hotplug.h | |||
| @@ -0,0 +1,236 @@ | |||
| 1 | /* | ||
| 2 | * PCI HotPlug Core Functions | ||
| 3 | * | ||
| 4 | * Copyright (C) 1995,2001 Compaq Computer Corporation | ||
| 5 | * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) | ||
| 6 | * Copyright (C) 2001 IBM Corp. | ||
| 7 | * | ||
| 8 | * All rights reserved. | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify | ||
| 11 | * it under the terms of the GNU General Public License as published by | ||
| 12 | * the Free Software Foundation; either version 2 of the License, or (at | ||
| 13 | * your option) any later version. | ||
| 14 | * | ||
| 15 | * This program is distributed in the hope that it will be useful, but | ||
| 16 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 17 | * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or | ||
| 18 | * NON INFRINGEMENT. See the GNU General Public License for more | ||
| 19 | * details. | ||
| 20 | * | ||
| 21 | * You should have received a copy of the GNU General Public License | ||
| 22 | * along with this program; if not, write to the Free Software | ||
| 23 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 24 | * | ||
| 25 | * Send feedback to <kristen.c.accardi@intel.com> | ||
| 26 | * | ||
| 27 | */ | ||
| 28 | #ifndef _PCI_HOTPLUG_H | ||
| 29 | #define _PCI_HOTPLUG_H | ||
| 30 | |||
| 31 | |||
| 32 | /* These values come from the PCI Hotplug Spec */ | ||
| 33 | enum pci_bus_speed { | ||
| 34 | PCI_SPEED_33MHz = 0x00, | ||
| 35 | PCI_SPEED_66MHz = 0x01, | ||
| 36 | PCI_SPEED_66MHz_PCIX = 0x02, | ||
| 37 | PCI_SPEED_100MHz_PCIX = 0x03, | ||
| 38 | PCI_SPEED_133MHz_PCIX = 0x04, | ||
| 39 | PCI_SPEED_66MHz_PCIX_ECC = 0x05, | ||
| 40 | PCI_SPEED_100MHz_PCIX_ECC = 0x06, | ||
| 41 | PCI_SPEED_133MHz_PCIX_ECC = 0x07, | ||
| 42 | PCI_SPEED_66MHz_PCIX_266 = 0x09, | ||
| 43 | PCI_SPEED_100MHz_PCIX_266 = 0x0a, | ||
| 44 | PCI_SPEED_133MHz_PCIX_266 = 0x0b, | ||
| 45 | PCI_SPEED_66MHz_PCIX_533 = 0x11, | ||
| 46 | PCI_SPEED_100MHz_PCIX_533 = 0x12, | ||
| 47 | PCI_SPEED_133MHz_PCIX_533 = 0x13, | ||
| 48 | PCI_SPEED_UNKNOWN = 0xff, | ||
| 49 | }; | ||
| 50 | |||
| 51 | /* These values come from the PCI Express Spec */ | ||
| 52 | enum pcie_link_width { | ||
| 53 | PCIE_LNK_WIDTH_RESRV = 0x00, | ||
| 54 | PCIE_LNK_X1 = 0x01, | ||
| 55 | PCIE_LNK_X2 = 0x02, | ||
| 56 | PCIE_LNK_X4 = 0x04, | ||
| 57 | PCIE_LNK_X8 = 0x08, | ||
| 58 | PCIE_LNK_X12 = 0x0C, | ||
| 59 | PCIE_LNK_X16 = 0x10, | ||
| 60 | PCIE_LNK_X32 = 0x20, | ||
| 61 | PCIE_LNK_WIDTH_UNKNOWN = 0xFF, | ||
| 62 | }; | ||
| 63 | |||
| 64 | enum pcie_link_speed { | ||
| 65 | PCIE_2PT5GB = 0x14, | ||
| 66 | PCIE_LNK_SPEED_UNKNOWN = 0xFF, | ||
| 67 | }; | ||
| 68 | |||
| 69 | struct hotplug_slot; | ||
| 70 | struct hotplug_slot_attribute { | ||
| 71 | struct attribute attr; | ||
| 72 | ssize_t (*show)(struct hotplug_slot *, char *); | ||
| 73 | ssize_t (*store)(struct hotplug_slot *, const char *, size_t); | ||
| 74 | }; | ||
| 75 | #define to_hotplug_attr(n) container_of(n, struct hotplug_slot_attribute, attr); | ||
| 76 | |||
| 77 | /** | ||
| 78 | * struct hotplug_slot_ops -the callbacks that the hotplug pci core can use | ||
| 79 | * @owner: The module owner of this structure | ||
| 80 | * @enable_slot: Called when the user wants to enable a specific pci slot | ||
| 81 | * @disable_slot: Called when the user wants to disable a specific pci slot | ||
| 82 | * @set_attention_status: Called to set the specific slot's attention LED to | ||
| 83 | * the specified value | ||
| 84 | * @hardware_test: Called to run a specified hardware test on the specified | ||
| 85 | * slot. | ||
| 86 | * @get_power_status: Called to get the current power status of a slot. | ||
| 87 | * If this field is NULL, the value passed in the struct hotplug_slot_info | ||
| 88 | * will be used when this value is requested by a user. | ||
| 89 | * @get_attention_status: Called to get the current attention status of a slot. | ||
| 90 | * If this field is NULL, the value passed in the struct hotplug_slot_info | ||
| 91 | * will be used when this value is requested by a user. | ||
| 92 | * @get_latch_status: Called to get the current latch status of a slot. | ||
| 93 | * If this field is NULL, the value passed in the struct hotplug_slot_info | ||
| 94 | * will be used when this value is requested by a user. | ||
| 95 | * @get_adapter_status: Called to get see if an adapter is present in the slot or not. | ||
| 96 | * If this field is NULL, the value passed in the struct hotplug_slot_info | ||
| 97 | * will be used when this value is requested by a user. | ||
| 98 | * @get_address: Called to get pci address of a slot. | ||
| 99 | * If this field is NULL, the value passed in the struct hotplug_slot_info | ||
| 100 | * will be used when this value is requested by a user. | ||
| 101 | * @get_max_bus_speed: Called to get the max bus speed for a slot. | ||
| 102 | * If this field is NULL, the value passed in the struct hotplug_slot_info | ||
| 103 | * will be used when this value is requested by a user. | ||
| 104 | * @get_cur_bus_speed: Called to get the current bus speed for a slot. | ||
| 105 | * If this field is NULL, the value passed in the struct hotplug_slot_info | ||
| 106 | * will be used when this value is requested by a user. | ||
| 107 | * | ||
| 108 | * The table of function pointers that is passed to the hotplug pci core by a | ||
| 109 | * hotplug pci driver. These functions are called by the hotplug pci core when | ||
| 110 | * the user wants to do something to a specific slot (query it for information, | ||
| 111 | * set an LED, enable / disable power, etc.) | ||
| 112 | */ | ||
| 113 | struct hotplug_slot_ops { | ||
| 114 | struct module *owner; | ||
| 115 | int (*enable_slot) (struct hotplug_slot *slot); | ||
| 116 | int (*disable_slot) (struct hotplug_slot *slot); | ||
| 117 | int (*set_attention_status) (struct hotplug_slot *slot, u8 value); | ||
| 118 | int (*hardware_test) (struct hotplug_slot *slot, u32 value); | ||
| 119 | int (*get_power_status) (struct hotplug_slot *slot, u8 *value); | ||
| 120 | int (*get_attention_status) (struct hotplug_slot *slot, u8 *value); | ||
| 121 | int (*get_latch_status) (struct hotplug_slot *slot, u8 *value); | ||
| 122 | int (*get_adapter_status) (struct hotplug_slot *slot, u8 *value); | ||
| 123 | int (*get_address) (struct hotplug_slot *slot, u32 *value); | ||
| 124 | int (*get_max_bus_speed) (struct hotplug_slot *slot, enum pci_bus_speed *value); | ||
| 125 | int (*get_cur_bus_speed) (struct hotplug_slot *slot, enum pci_bus_speed *value); | ||
| 126 | }; | ||
| 127 | |||
| 128 | /** | ||
| 129 | * struct hotplug_slot_info - used to notify the hotplug pci core of the state of the slot | ||
| 130 | * @power: if power is enabled or not (1/0) | ||
| 131 | * @attention_status: if the attention light is enabled or not (1/0) | ||
| 132 | * @latch_status: if the latch (if any) is open or closed (1/0) | ||
| 133 | * @adapter_present: if there is a pci board present in the slot or not (1/0) | ||
| 134 | * @address: (domain << 16 | bus << 8 | dev) | ||
| 135 | * | ||
| 136 | * Used to notify the hotplug pci core of the status of a specific slot. | ||
| 137 | */ | ||
| 138 | struct hotplug_slot_info { | ||
| 139 | u8 power_status; | ||
| 140 | u8 attention_status; | ||
| 141 | u8 latch_status; | ||
| 142 | u8 adapter_status; | ||
| 143 | u32 address; | ||
| 144 | enum pci_bus_speed max_bus_speed; | ||
| 145 | enum pci_bus_speed cur_bus_speed; | ||
| 146 | }; | ||
| 147 | |||
| 148 | /** | ||
| 149 | * struct hotplug_slot - used to register a physical slot with the hotplug pci core | ||
| 150 | * @name: the name of the slot being registered. This string must | ||
| 151 | * be unique amoung slots registered on this system. | ||
| 152 | * @ops: pointer to the &struct hotplug_slot_ops to be used for this slot | ||
| 153 | * @info: pointer to the &struct hotplug_slot_info for the initial values for | ||
| 154 | * this slot. | ||
| 155 | * @release: called during pci_hp_deregister to free memory allocated in a | ||
| 156 | * hotplug_slot structure. | ||
| 157 | * @private: used by the hotplug pci controller driver to store whatever it | ||
| 158 | * needs. | ||
| 159 | */ | ||
| 160 | struct hotplug_slot { | ||
| 161 | char *name; | ||
| 162 | struct hotplug_slot_ops *ops; | ||
| 163 | struct hotplug_slot_info *info; | ||
| 164 | void (*release) (struct hotplug_slot *slot); | ||
| 165 | void *private; | ||
| 166 | |||
| 167 | /* Variables below this are for use only by the hotplug pci core. */ | ||
| 168 | struct list_head slot_list; | ||
| 169 | struct kobject kobj; | ||
| 170 | }; | ||
| 171 | #define to_hotplug_slot(n) container_of(n, struct hotplug_slot, kobj) | ||
| 172 | |||
| 173 | extern int pci_hp_register (struct hotplug_slot *slot); | ||
| 174 | extern int pci_hp_deregister (struct hotplug_slot *slot); | ||
| 175 | extern int __must_check pci_hp_change_slot_info (struct hotplug_slot *slot, | ||
| 176 | struct hotplug_slot_info *info); | ||
| 177 | extern struct subsystem pci_hotplug_slots_subsys; | ||
| 178 | |||
| 179 | /* PCI Setting Record (Type 0) */ | ||
| 180 | struct hpp_type0 { | ||
| 181 | u32 revision; | ||
| 182 | u8 cache_line_size; | ||
| 183 | u8 latency_timer; | ||
| 184 | u8 enable_serr; | ||
| 185 | u8 enable_perr; | ||
| 186 | }; | ||
| 187 | |||
| 188 | /* PCI-X Setting Record (Type 1) */ | ||
| 189 | struct hpp_type1 { | ||
| 190 | u32 revision; | ||
| 191 | u8 max_mem_read; | ||
| 192 | u8 avg_max_split; | ||
| 193 | u16 tot_max_split; | ||
| 194 | }; | ||
| 195 | |||
| 196 | /* PCI Express Setting Record (Type 2) */ | ||
| 197 | struct hpp_type2 { | ||
| 198 | u32 revision; | ||
| 199 | u32 unc_err_mask_and; | ||
| 200 | u32 unc_err_mask_or; | ||
| 201 | u32 unc_err_sever_and; | ||
| 202 | u32 unc_err_sever_or; | ||
| 203 | u32 cor_err_mask_and; | ||
| 204 | u32 cor_err_mask_or; | ||
| 205 | u32 adv_err_cap_and; | ||
| 206 | u32 adv_err_cap_or; | ||
| 207 | u16 pci_exp_devctl_and; | ||
| 208 | u16 pci_exp_devctl_or; | ||
| 209 | u16 pci_exp_lnkctl_and; | ||
| 210 | u16 pci_exp_lnkctl_or; | ||
| 211 | u32 sec_unc_err_sever_and; | ||
| 212 | u32 sec_unc_err_sever_or; | ||
| 213 | u32 sec_unc_err_mask_and; | ||
| 214 | u32 sec_unc_err_mask_or; | ||
| 215 | }; | ||
| 216 | |||
| 217 | struct hotplug_params { | ||
| 218 | struct hpp_type0 *t0; /* Type0: NULL if not available */ | ||
| 219 | struct hpp_type1 *t1; /* Type1: NULL if not available */ | ||
| 220 | struct hpp_type2 *t2; /* Type2: NULL if not available */ | ||
| 221 | struct hpp_type0 type0_data; | ||
| 222 | struct hpp_type1 type1_data; | ||
| 223 | struct hpp_type2 type2_data; | ||
| 224 | }; | ||
| 225 | |||
| 226 | #ifdef CONFIG_ACPI | ||
| 227 | #include <acpi/acpi.h> | ||
| 228 | #include <acpi/acpi_bus.h> | ||
| 229 | #include <acpi/actypes.h> | ||
| 230 | extern acpi_status acpi_run_oshp(acpi_handle handle); | ||
| 231 | extern acpi_status acpi_get_hp_params_from_firmware(struct pci_bus *bus, | ||
| 232 | struct hotplug_params *hpp); | ||
| 233 | int acpi_root_bridge(acpi_handle handle); | ||
| 234 | #endif | ||
| 235 | #endif | ||
| 236 | |||
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index f069df245469..f3a168f3c9df 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -2351,3 +2351,5 @@ | |||
| 2351 | #define PCI_DEVICE_ID_RME_DIGI32_PRO 0x9897 | 2351 | #define PCI_DEVICE_ID_RME_DIGI32_PRO 0x9897 |
| 2352 | #define PCI_DEVICE_ID_RME_DIGI32_8 0x9898 | 2352 | #define PCI_DEVICE_ID_RME_DIGI32_8 0x9898 |
| 2353 | 2353 | ||
| 2354 | #define PCI_VENDOR_ID_QUICKNET 0x15E2 | ||
| 2355 | #define PCI_DEVICE_ID_QUICKNET_XJ 0x0500 | ||
diff --git a/include/linux/pci_regs.h b/include/linux/pci_regs.h index 7d0e26cba420..c312a12ad2d6 100644 --- a/include/linux/pci_regs.h +++ b/include/linux/pci_regs.h | |||
| @@ -12,6 +12,11 @@ | |||
| 12 | * PCI Local Bus Specification | 12 | * PCI Local Bus Specification |
| 13 | * PCI to PCI Bridge Specification | 13 | * PCI to PCI Bridge Specification |
| 14 | * PCI System Design Guide | 14 | * PCI System Design Guide |
| 15 | * | ||
| 16 | * For hypertransport information, please consult the following manuals | ||
| 17 | * from http://www.hypertransport.org | ||
| 18 | * | ||
| 19 | * The Hypertransport I/O Link Specification | ||
| 15 | */ | 20 | */ |
| 16 | 21 | ||
| 17 | #ifndef LINUX_PCI_REGS_H | 22 | #ifndef LINUX_PCI_REGS_H |
| @@ -463,4 +468,20 @@ | |||
| 463 | #define PCI_PWR_CAP 12 /* Capability */ | 468 | #define PCI_PWR_CAP 12 /* Capability */ |
| 464 | #define PCI_PWR_CAP_BUDGET(x) ((x) & 1) /* Included in system budget */ | 469 | #define PCI_PWR_CAP_BUDGET(x) ((x) & 1) /* Included in system budget */ |
| 465 | 470 | ||
| 471 | /* Hypertransport sub capability types */ | ||
| 472 | #define HT_CAPTYPE_SLAVE 0x00 /* Slave/Primary link configuration */ | ||
| 473 | #define HT_CAPTYPE_HOST 0x20 /* Host/Secondary link configuration */ | ||
| 474 | #define HT_CAPTYPE_IRQ 0x80 /* IRQ Configuration */ | ||
| 475 | #define HT_CAPTYPE_REMAPPING_40 0xA0 /* 40 bit address remapping */ | ||
| 476 | #define HT_CAPTYPE_REMAPPING_64 0xA2 /* 64 bit address remapping */ | ||
| 477 | #define HT_CAPTYPE_UNITID_CLUMP 0x90 /* Unit ID clumping */ | ||
| 478 | #define HT_CAPTYPE_EXTCONF 0x98 /* Extended Configuration Space Access */ | ||
| 479 | #define HT_CAPTYPE_MSI_MAPPING 0xA8 /* MSI Mapping Capability */ | ||
| 480 | #define HT_CAPTYPE_DIRECT_ROUTE 0xB0 /* Direct routing configuration */ | ||
| 481 | #define HT_CAPTYPE_VCSET 0xB8 /* Virtual Channel configuration */ | ||
| 482 | #define HT_CAPTYPE_ERROR_RETRY 0xC0 /* Retry on error configuration */ | ||
| 483 | #define HT_CAPTYPE_GEN3 0xD0 /* Generation 3 hypertransport configuration */ | ||
| 484 | #define HT_CAPTYPE_PM 0xE0 /* Hypertransport powermanagement configuration */ | ||
| 485 | |||
| 486 | |||
| 466 | #endif /* LINUX_PCI_REGS_H */ | 487 | #endif /* LINUX_PCI_REGS_H */ |
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index 46ec72fa2c84..600e3d387ffc 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | * we force a syntax error here if it isn't. | 19 | * we force a syntax error here if it isn't. |
| 20 | */ | 20 | */ |
| 21 | #define get_cpu_var(var) (*({ \ | 21 | #define get_cpu_var(var) (*({ \ |
| 22 | extern int simple_indentifier_##var(void); \ | 22 | extern int simple_identifier_##var(void); \ |
| 23 | preempt_disable(); \ | 23 | preempt_disable(); \ |
| 24 | &__get_cpu_var(var); })) | 24 | &__get_cpu_var(var); })) |
| 25 | #define put_cpu_var(var) preempt_enable() | 25 | #define put_cpu_var(var) preempt_enable() |
diff --git a/include/linux/personality.h b/include/linux/personality.h index 80d780e5a8f5..bf4cf2080e5c 100644 --- a/include/linux/personality.h +++ b/include/linux/personality.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _LINUX_PERSONALITY_H | 1 | #ifndef _LINUX_PERSONALITY_H |
| 2 | #define _LINUX_PERSONALITY_H | 2 | #define _LINUX_PERSONALITY_H |
| 3 | 3 | ||
| 4 | #ifdef __KERNEL__ | ||
| 5 | |||
| 4 | /* | 6 | /* |
| 5 | * Handling of different ABIs (personalities). | 7 | * Handling of different ABIs (personalities). |
| 6 | */ | 8 | */ |
| @@ -12,6 +14,8 @@ extern int register_exec_domain(struct exec_domain *); | |||
| 12 | extern int unregister_exec_domain(struct exec_domain *); | 14 | extern int unregister_exec_domain(struct exec_domain *); |
| 13 | extern int __set_personality(unsigned long); | 15 | extern int __set_personality(unsigned long); |
| 14 | 16 | ||
| 17 | #endif /* __KERNEL__ */ | ||
| 18 | |||
| 15 | /* | 19 | /* |
| 16 | * Flags for bug emulation. | 20 | * Flags for bug emulation. |
| 17 | * | 21 | * |
| @@ -71,6 +75,7 @@ enum { | |||
| 71 | PER_MASK = 0x00ff, | 75 | PER_MASK = 0x00ff, |
| 72 | }; | 76 | }; |
| 73 | 77 | ||
| 78 | #ifdef __KERNEL__ | ||
| 74 | 79 | ||
| 75 | /* | 80 | /* |
| 76 | * Description of an execution domain. | 81 | * Description of an execution domain. |
| @@ -111,4 +116,6 @@ struct exec_domain { | |||
| 111 | #define set_personality(pers) \ | 116 | #define set_personality(pers) \ |
| 112 | ((current->personality == pers) ? 0 : __set_personality(pers)) | 117 | ((current->personality == pers) ? 0 : __set_personality(pers)) |
| 113 | 118 | ||
| 119 | #endif /* __KERNEL__ */ | ||
| 120 | |||
| 114 | #endif /* _LINUX_PERSONALITY_H */ | 121 | #endif /* _LINUX_PERSONALITY_H */ |
diff --git a/include/linux/profile.h b/include/linux/profile.h index e633004ae052..acce53fd38b6 100644 --- a/include/linux/profile.h +++ b/include/linux/profile.h | |||
| @@ -17,7 +17,7 @@ struct notifier_block; | |||
| 17 | 17 | ||
| 18 | /* init basic kernel profiler */ | 18 | /* init basic kernel profiler */ |
| 19 | void __init profile_init(void); | 19 | void __init profile_init(void); |
| 20 | void profile_tick(int, struct pt_regs *); | 20 | void profile_tick(int); |
| 21 | void profile_hit(int, void *); | 21 | void profile_hit(int, void *); |
| 22 | #ifdef CONFIG_PROC_FS | 22 | #ifdef CONFIG_PROC_FS |
| 23 | void create_prof_cpu_mask(struct proc_dir_entry *); | 23 | void create_prof_cpu_mask(struct proc_dir_entry *); |
diff --git a/include/linux/raid_class.h b/include/linux/raid_class.h index d0dd38b3a2fd..d22ad392242a 100644 --- a/include/linux/raid_class.h +++ b/include/linux/raid_class.h | |||
| @@ -77,5 +77,6 @@ DEFINE_RAID_ATTRIBUTE(enum raid_state, state) | |||
| 77 | struct raid_template *raid_class_attach(struct raid_function_template *); | 77 | struct raid_template *raid_class_attach(struct raid_function_template *); |
| 78 | void raid_class_release(struct raid_template *); | 78 | void raid_class_release(struct raid_template *); |
| 79 | 79 | ||
| 80 | void raid_component_add(struct raid_template *, struct device *, | 80 | int __must_check raid_component_add(struct raid_template *, struct device *, |
| 81 | struct device *); | 81 | struct device *); |
| 82 | |||
diff --git a/include/linux/random.h b/include/linux/random.h index 5d6456bcdeba..0248b30e306d 100644 --- a/include/linux/random.h +++ b/include/linux/random.h | |||
| @@ -69,6 +69,9 @@ extern struct file_operations random_fops, urandom_fops; | |||
| 69 | unsigned int get_random_int(void); | 69 | unsigned int get_random_int(void); |
| 70 | unsigned long randomize_range(unsigned long start, unsigned long end, unsigned long len); | 70 | unsigned long randomize_range(unsigned long start, unsigned long end, unsigned long len); |
| 71 | 71 | ||
| 72 | u32 random32(void); | ||
| 73 | void srandom32(u32 seed); | ||
| 74 | |||
| 72 | #endif /* __KERNEL___ */ | 75 | #endif /* __KERNEL___ */ |
| 73 | 76 | ||
| 74 | #endif /* _LINUX_RANDOM_H */ | 77 | #endif /* _LINUX_RANDOM_H */ |
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index b4ca73d65891..c6b7485eac7c 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | * | 19 | * |
| 20 | * Author: Dipankar Sarma <dipankar@in.ibm.com> | 20 | * Author: Dipankar Sarma <dipankar@in.ibm.com> |
| 21 | * | 21 | * |
| 22 | * Based on the original work by Paul McKenney <paul.mckenney@us.ibm.com> | 22 | * Based on the original work by Paul McKenney <paulmck@us.ibm.com> |
| 23 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. | 23 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. |
| 24 | * Papers: | 24 | * Papers: |
| 25 | * http://www.rdrop.com/users/paulmck/paper/rclockpdcsproof.pdf | 25 | * http://www.rdrop.com/users/paulmck/paper/rclockpdcsproof.pdf |
| @@ -66,6 +66,8 @@ struct rcu_ctrlblk { | |||
| 66 | long completed; /* Number of the last completed batch */ | 66 | long completed; /* Number of the last completed batch */ |
| 67 | int next_pending; /* Is the next batch already waiting? */ | 67 | int next_pending; /* Is the next batch already waiting? */ |
| 68 | 68 | ||
| 69 | int signaled; | ||
| 70 | |||
| 69 | spinlock_t lock ____cacheline_internodealigned_in_smp; | 71 | spinlock_t lock ____cacheline_internodealigned_in_smp; |
| 70 | cpumask_t cpumask; /* CPUs that need to switch in order */ | 72 | cpumask_t cpumask; /* CPUs that need to switch in order */ |
| 71 | /* for current batch to proceed. */ | 73 | /* for current batch to proceed. */ |
| @@ -106,9 +108,6 @@ struct rcu_data { | |||
| 106 | long blimit; /* Upper limit on a processed batch */ | 108 | long blimit; /* Upper limit on a processed batch */ |
| 107 | int cpu; | 109 | int cpu; |
| 108 | struct rcu_head barrier; | 110 | struct rcu_head barrier; |
| 109 | #ifdef CONFIG_SMP | ||
| 110 | long last_rs_qlen; /* qlen during the last resched */ | ||
| 111 | #endif | ||
| 112 | }; | 111 | }; |
| 113 | 112 | ||
| 114 | DECLARE_PER_CPU(struct rcu_data, rcu_data); | 113 | DECLARE_PER_CPU(struct rcu_data, rcu_data); |
diff --git a/include/linux/rtc.h b/include/linux/rtc.h index b89f09357054..09ff4c3e2713 100644 --- a/include/linux/rtc.h +++ b/include/linux/rtc.h | |||
| @@ -208,7 +208,7 @@ int rtc_register(rtc_task_t *task); | |||
| 208 | int rtc_unregister(rtc_task_t *task); | 208 | int rtc_unregister(rtc_task_t *task); |
| 209 | int rtc_control(rtc_task_t *t, unsigned int cmd, unsigned long arg); | 209 | int rtc_control(rtc_task_t *t, unsigned int cmd, unsigned long arg); |
| 210 | void rtc_get_rtc_time(struct rtc_time *rtc_tm); | 210 | void rtc_get_rtc_time(struct rtc_time *rtc_tm); |
| 211 | irqreturn_t rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs); | 211 | irqreturn_t rtc_interrupt(int irq, void *dev_id); |
| 212 | 212 | ||
| 213 | #endif /* __KERNEL__ */ | 213 | #endif /* __KERNEL__ */ |
| 214 | 214 | ||
diff --git a/include/linux/sched.h b/include/linux/sched.h index 331f4502e92b..6735c1cf334c 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -1065,9 +1065,10 @@ static inline int pid_alive(struct task_struct *p) | |||
| 1065 | } | 1065 | } |
| 1066 | 1066 | ||
| 1067 | /** | 1067 | /** |
| 1068 | * is_init - check if a task structure is the first user space | 1068 | * is_init - check if a task structure is init |
| 1069 | * task the kernel created. | 1069 | * @tsk: Task structure to be checked. |
| 1070 | * @p: Task structure to be checked. | 1070 | * |
| 1071 | * Check if a task structure is the first user space task the kernel created. | ||
| 1071 | */ | 1072 | */ |
| 1072 | static inline int is_init(struct task_struct *tsk) | 1073 | static inline int is_init(struct task_struct *tsk) |
| 1073 | { | 1074 | { |
diff --git a/include/linux/scx200.h b/include/linux/scx200.h index 693c0557e70b..de466e11e271 100644 --- a/include/linux/scx200.h +++ b/include/linux/scx200.h | |||
| @@ -32,7 +32,7 @@ extern unsigned scx200_cb_base; | |||
| 32 | 32 | ||
| 33 | /* High Resolution Timer */ | 33 | /* High Resolution Timer */ |
| 34 | #define SCx200_TIMER_OFFSET 0x08 | 34 | #define SCx200_TIMER_OFFSET 0x08 |
| 35 | #define SCx200_TIMER_SIZE 0x05 | 35 | #define SCx200_TIMER_SIZE 0x06 |
| 36 | 36 | ||
| 37 | /* Clock Generators */ | 37 | /* Clock Generators */ |
| 38 | #define SCx200_CLOCKGEN_OFFSET 0x10 | 38 | #define SCx200_CLOCKGEN_OFFSET 0x10 |
diff --git a/include/linux/security.h b/include/linux/security.h index 9b5fea81f55e..b200b9856f32 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
| @@ -882,7 +882,8 @@ struct request_sock; | |||
| 882 | * Check permission when a flow selects a xfrm_policy for processing | 882 | * Check permission when a flow selects a xfrm_policy for processing |
| 883 | * XFRMs on a packet. The hook is called when selecting either a | 883 | * XFRMs on a packet. The hook is called when selecting either a |
| 884 | * per-socket policy or a generic xfrm policy. | 884 | * per-socket policy or a generic xfrm policy. |
| 885 | * Return 0 if permission is granted. | 885 | * Return 0 if permission is granted, -ESRCH otherwise, or -errno |
| 886 | * on other errors. | ||
| 886 | * @xfrm_state_pol_flow_match: | 887 | * @xfrm_state_pol_flow_match: |
| 887 | * @x contains the state to match. | 888 | * @x contains the state to match. |
| 888 | * @xp contains the policy to check for a match. | 889 | * @xp contains the policy to check for a match. |
| @@ -891,6 +892,7 @@ struct request_sock; | |||
| 891 | * @xfrm_flow_state_match: | 892 | * @xfrm_flow_state_match: |
| 892 | * @fl contains the flow key to match. | 893 | * @fl contains the flow key to match. |
| 893 | * @xfrm points to the xfrm_state to match. | 894 | * @xfrm points to the xfrm_state to match. |
| 895 | * @xp points to the xfrm_policy to match. | ||
| 894 | * Return 1 if there is a match. | 896 | * Return 1 if there is a match. |
| 895 | * @xfrm_decode_session: | 897 | * @xfrm_decode_session: |
| 896 | * @skb points to skb to decode. | 898 | * @skb points to skb to decode. |
| @@ -1388,7 +1390,8 @@ struct security_operations { | |||
| 1388 | int (*xfrm_policy_lookup)(struct xfrm_policy *xp, u32 fl_secid, u8 dir); | 1390 | int (*xfrm_policy_lookup)(struct xfrm_policy *xp, u32 fl_secid, u8 dir); |
| 1389 | int (*xfrm_state_pol_flow_match)(struct xfrm_state *x, | 1391 | int (*xfrm_state_pol_flow_match)(struct xfrm_state *x, |
| 1390 | struct xfrm_policy *xp, struct flowi *fl); | 1392 | struct xfrm_policy *xp, struct flowi *fl); |
| 1391 | int (*xfrm_flow_state_match)(struct flowi *fl, struct xfrm_state *xfrm); | 1393 | int (*xfrm_flow_state_match)(struct flowi *fl, struct xfrm_state *xfrm, |
| 1394 | struct xfrm_policy *xp); | ||
| 1392 | int (*xfrm_decode_session)(struct sk_buff *skb, u32 *secid, int ckall); | 1395 | int (*xfrm_decode_session)(struct sk_buff *skb, u32 *secid, int ckall); |
| 1393 | #endif /* CONFIG_SECURITY_NETWORK_XFRM */ | 1396 | #endif /* CONFIG_SECURITY_NETWORK_XFRM */ |
| 1394 | 1397 | ||
| @@ -3120,11 +3123,6 @@ static inline int security_xfrm_policy_alloc(struct xfrm_policy *xp, struct xfrm | |||
| 3120 | return security_ops->xfrm_policy_alloc_security(xp, sec_ctx, NULL); | 3123 | return security_ops->xfrm_policy_alloc_security(xp, sec_ctx, NULL); |
| 3121 | } | 3124 | } |
| 3122 | 3125 | ||
| 3123 | static inline int security_xfrm_sock_policy_alloc(struct xfrm_policy *xp, struct sock *sk) | ||
| 3124 | { | ||
| 3125 | return security_ops->xfrm_policy_alloc_security(xp, NULL, sk); | ||
| 3126 | } | ||
| 3127 | |||
| 3128 | static inline int security_xfrm_policy_clone(struct xfrm_policy *old, struct xfrm_policy *new) | 3126 | static inline int security_xfrm_policy_clone(struct xfrm_policy *old, struct xfrm_policy *new) |
| 3129 | { | 3127 | { |
| 3130 | return security_ops->xfrm_policy_clone_security(old, new); | 3128 | return security_ops->xfrm_policy_clone_security(old, new); |
| @@ -3175,9 +3173,10 @@ static inline int security_xfrm_state_pol_flow_match(struct xfrm_state *x, | |||
| 3175 | return security_ops->xfrm_state_pol_flow_match(x, xp, fl); | 3173 | return security_ops->xfrm_state_pol_flow_match(x, xp, fl); |
| 3176 | } | 3174 | } |
| 3177 | 3175 | ||
| 3178 | static inline int security_xfrm_flow_state_match(struct flowi *fl, struct xfrm_state *xfrm) | 3176 | static inline int security_xfrm_flow_state_match(struct flowi *fl, |
| 3177 | struct xfrm_state *xfrm, struct xfrm_policy *xp) | ||
| 3179 | { | 3178 | { |
| 3180 | return security_ops->xfrm_flow_state_match(fl, xfrm); | 3179 | return security_ops->xfrm_flow_state_match(fl, xfrm, xp); |
| 3181 | } | 3180 | } |
| 3182 | 3181 | ||
| 3183 | static inline int security_xfrm_decode_session(struct sk_buff *skb, u32 *secid) | 3182 | static inline int security_xfrm_decode_session(struct sk_buff *skb, u32 *secid) |
| @@ -3197,11 +3196,6 @@ static inline int security_xfrm_policy_alloc(struct xfrm_policy *xp, struct xfrm | |||
| 3197 | return 0; | 3196 | return 0; |
| 3198 | } | 3197 | } |
| 3199 | 3198 | ||
| 3200 | static inline int security_xfrm_sock_policy_alloc(struct xfrm_policy *xp, struct sock *sk) | ||
| 3201 | { | ||
| 3202 | return 0; | ||
| 3203 | } | ||
| 3204 | |||
| 3205 | static inline int security_xfrm_policy_clone(struct xfrm_policy *old, struct xfrm_policy *new) | 3199 | static inline int security_xfrm_policy_clone(struct xfrm_policy *old, struct xfrm_policy *new) |
| 3206 | { | 3200 | { |
| 3207 | return 0; | 3201 | return 0; |
| @@ -3249,7 +3243,7 @@ static inline int security_xfrm_state_pol_flow_match(struct xfrm_state *x, | |||
| 3249 | } | 3243 | } |
| 3250 | 3244 | ||
| 3251 | static inline int security_xfrm_flow_state_match(struct flowi *fl, | 3245 | static inline int security_xfrm_flow_state_match(struct flowi *fl, |
| 3252 | struct xfrm_state *xfrm) | 3246 | struct xfrm_state *xfrm, struct xfrm_policy *xp) |
| 3253 | { | 3247 | { |
| 3254 | return 1; | 3248 | return 1; |
| 3255 | } | 3249 | } |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index de2e68159d96..463ab953b092 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
| @@ -67,8 +67,8 @@ | |||
| 67 | /* Parisc type numbers. */ | 67 | /* Parisc type numbers. */ |
| 68 | #define PORT_MUX 48 | 68 | #define PORT_MUX 48 |
| 69 | 69 | ||
| 70 | /* Atmel AT91xxx SoC */ | 70 | /* Atmel AT91 / AT32 SoC */ |
| 71 | #define PORT_AT91 49 | 71 | #define PORT_ATMEL 49 |
| 72 | 72 | ||
| 73 | /* Macintosh Zilog type numbers */ | 73 | /* Macintosh Zilog type numbers */ |
| 74 | #define PORT_MAC_ZILOG 50 /* m68k : not yet implemented */ | 74 | #define PORT_MAC_ZILOG 50 /* m68k : not yet implemented */ |
| @@ -409,13 +409,12 @@ int uart_resume_port(struct uart_driver *reg, struct uart_port *port); | |||
| 409 | * The following are helper functions for the low level drivers. | 409 | * The following are helper functions for the low level drivers. |
| 410 | */ | 410 | */ |
| 411 | static inline int | 411 | static inline int |
| 412 | uart_handle_sysrq_char(struct uart_port *port, unsigned int ch, | 412 | uart_handle_sysrq_char(struct uart_port *port, unsigned int ch) |
| 413 | struct pt_regs *regs) | ||
| 414 | { | 413 | { |
| 415 | #ifdef SUPPORT_SYSRQ | 414 | #ifdef SUPPORT_SYSRQ |
| 416 | if (port->sysrq) { | 415 | if (port->sysrq) { |
| 417 | if (ch && time_before(jiffies, port->sysrq)) { | 416 | if (ch && time_before(jiffies, port->sysrq)) { |
| 418 | handle_sysrq(ch, regs, port->info->tty); | 417 | handle_sysrq(ch, port->info->tty); |
| 419 | port->sysrq = 0; | 418 | port->sysrq = 0; |
| 420 | return 1; | 419 | return 1; |
| 421 | } | 420 | } |
| @@ -425,7 +424,7 @@ uart_handle_sysrq_char(struct uart_port *port, unsigned int ch, | |||
| 425 | return 0; | 424 | return 0; |
| 426 | } | 425 | } |
| 427 | #ifndef SUPPORT_SYSRQ | 426 | #ifndef SUPPORT_SYSRQ |
| 428 | #define uart_handle_sysrq_char(port,ch,regs) uart_handle_sysrq_char(port, 0, NULL) | 427 | #define uart_handle_sysrq_char(port,ch) uart_handle_sysrq_char(port, 0) |
| 429 | #endif | 428 | #endif |
| 430 | 429 | ||
| 431 | /* | 430 | /* |
diff --git a/include/linux/serio.h b/include/linux/serio.h index c9069310b6ac..b99c5ca9708d 100644 --- a/include/linux/serio.h +++ b/include/linux/serio.h | |||
| @@ -41,6 +41,7 @@ struct serio { | |||
| 41 | void (*stop)(struct serio *); | 41 | void (*stop)(struct serio *); |
| 42 | 42 | ||
| 43 | struct serio *parent, *child; | 43 | struct serio *parent, *child; |
| 44 | unsigned int depth; /* level of nesting in serio hierarchy */ | ||
| 44 | 45 | ||
| 45 | struct serio_driver *drv; /* accessed from interrupt, must be protected by serio->lock and serio->sem */ | 46 | struct serio_driver *drv; /* accessed from interrupt, must be protected by serio->lock and serio->sem */ |
| 46 | struct mutex drv_mutex; /* protects serio->drv so attributes can pin driver */ | 47 | struct mutex drv_mutex; /* protects serio->drv so attributes can pin driver */ |
| @@ -60,8 +61,7 @@ struct serio_driver { | |||
| 60 | unsigned int manual_bind; | 61 | unsigned int manual_bind; |
| 61 | 62 | ||
| 62 | void (*write_wakeup)(struct serio *); | 63 | void (*write_wakeup)(struct serio *); |
| 63 | irqreturn_t (*interrupt)(struct serio *, unsigned char, | 64 | irqreturn_t (*interrupt)(struct serio *, unsigned char, unsigned int); |
| 64 | unsigned int, struct pt_regs *); | ||
| 65 | int (*connect)(struct serio *, struct serio_driver *drv); | 65 | int (*connect)(struct serio *, struct serio_driver *drv); |
| 66 | int (*reconnect)(struct serio *); | 66 | int (*reconnect)(struct serio *); |
| 67 | void (*disconnect)(struct serio *); | 67 | void (*disconnect)(struct serio *); |
| @@ -75,7 +75,7 @@ int serio_open(struct serio *serio, struct serio_driver *drv); | |||
| 75 | void serio_close(struct serio *serio); | 75 | void serio_close(struct serio *serio); |
| 76 | void serio_rescan(struct serio *serio); | 76 | void serio_rescan(struct serio *serio); |
| 77 | void serio_reconnect(struct serio *serio); | 77 | void serio_reconnect(struct serio *serio); |
| 78 | irqreturn_t serio_interrupt(struct serio *serio, unsigned char data, unsigned int flags, struct pt_regs *regs); | 78 | irqreturn_t serio_interrupt(struct serio *serio, unsigned char data, unsigned int flags); |
| 79 | 79 | ||
| 80 | void __serio_register_port(struct serio *serio, struct module *owner); | 80 | void __serio_register_port(struct serio *serio, struct module *owner); |
| 81 | static inline void serio_register_port(struct serio *serio) | 81 | static inline void serio_register_port(struct serio *serio) |
diff --git a/include/linux/slab.h b/include/linux/slab.h index 70be57d8ae0d..c4947b8a2c03 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
| @@ -77,13 +77,6 @@ struct cache_sizes { | |||
| 77 | extern struct cache_sizes malloc_sizes[]; | 77 | extern struct cache_sizes malloc_sizes[]; |
| 78 | 78 | ||
| 79 | extern void *__kmalloc(size_t, gfp_t); | 79 | extern void *__kmalloc(size_t, gfp_t); |
| 80 | #ifndef CONFIG_DEBUG_SLAB | ||
| 81 | #define ____kmalloc(size, flags) __kmalloc(size, flags) | ||
| 82 | #else | ||
| 83 | extern void *__kmalloc_track_caller(size_t, gfp_t, void*); | ||
| 84 | #define ____kmalloc(size, flags) \ | ||
| 85 | __kmalloc_track_caller(size, flags, __builtin_return_address(0)) | ||
| 86 | #endif | ||
| 87 | 80 | ||
| 88 | /** | 81 | /** |
| 89 | * kmalloc - allocate memory | 82 | * kmalloc - allocate memory |
| @@ -153,6 +146,23 @@ found: | |||
| 153 | return __kmalloc(size, flags); | 146 | return __kmalloc(size, flags); |
| 154 | } | 147 | } |
| 155 | 148 | ||
| 149 | /* | ||
| 150 | * kmalloc_track_caller is a special version of kmalloc that records the | ||
| 151 | * calling function of the routine calling it for slab leak tracking instead | ||
| 152 | * of just the calling function (confusing, eh?). | ||
| 153 | * It's useful when the call to kmalloc comes from a widely-used standard | ||
| 154 | * allocator where we care about the real place the memory allocation | ||
| 155 | * request comes from. | ||
| 156 | */ | ||
| 157 | #ifndef CONFIG_DEBUG_SLAB | ||
| 158 | #define kmalloc_track_caller(size, flags) \ | ||
| 159 | __kmalloc(size, flags) | ||
| 160 | #else | ||
| 161 | extern void *__kmalloc_track_caller(size_t, gfp_t, void*); | ||
| 162 | #define kmalloc_track_caller(size, flags) \ | ||
| 163 | __kmalloc_track_caller(size, flags, __builtin_return_address(0)) | ||
| 164 | #endif | ||
| 165 | |||
| 156 | extern void *__kzalloc(size_t, gfp_t); | 166 | extern void *__kzalloc(size_t, gfp_t); |
| 157 | 167 | ||
| 158 | /** | 168 | /** |
| @@ -271,7 +281,7 @@ static inline void *kcalloc(size_t n, size_t size, gfp_t flags) | |||
| 271 | #define kmem_cache_alloc_node(c, f, n) kmem_cache_alloc(c, f) | 281 | #define kmem_cache_alloc_node(c, f, n) kmem_cache_alloc(c, f) |
| 272 | #define kmalloc_node(s, f, n) kmalloc(s, f) | 282 | #define kmalloc_node(s, f, n) kmalloc(s, f) |
| 273 | #define kzalloc(s, f) __kzalloc(s, f) | 283 | #define kzalloc(s, f) __kzalloc(s, f) |
| 274 | #define ____kmalloc kmalloc | 284 | #define kmalloc_track_caller kmalloc |
| 275 | 285 | ||
| 276 | #endif /* CONFIG_SLOB */ | 286 | #endif /* CONFIG_SLOB */ |
| 277 | 287 | ||
diff --git a/include/linux/smb_fs.h b/include/linux/smb_fs.h index 367d6c3e8ed4..13b3af547864 100644 --- a/include/linux/smb_fs.h +++ b/include/linux/smb_fs.h | |||
| @@ -43,17 +43,17 @@ static inline struct smb_inode_info *SMB_I(struct inode *inode) | |||
| 43 | 43 | ||
| 44 | /* macro names are short for word, double-word, long value (?) */ | 44 | /* macro names are short for word, double-word, long value (?) */ |
| 45 | #define WVAL(buf,pos) \ | 45 | #define WVAL(buf,pos) \ |
| 46 | (le16_to_cpu(get_unaligned((u16 *)((u8 *)(buf) + (pos))))) | 46 | (le16_to_cpu(get_unaligned((__le16 *)((u8 *)(buf) + (pos))))) |
| 47 | #define DVAL(buf,pos) \ | 47 | #define DVAL(buf,pos) \ |
| 48 | (le32_to_cpu(get_unaligned((u32 *)((u8 *)(buf) + (pos))))) | 48 | (le32_to_cpu(get_unaligned((__le32 *)((u8 *)(buf) + (pos))))) |
| 49 | #define LVAL(buf,pos) \ | 49 | #define LVAL(buf,pos) \ |
| 50 | (le64_to_cpu(get_unaligned((u64 *)((u8 *)(buf) + (pos))))) | 50 | (le64_to_cpu(get_unaligned((__le64 *)((u8 *)(buf) + (pos))))) |
| 51 | #define WSET(buf,pos,val) \ | 51 | #define WSET(buf,pos,val) \ |
| 52 | put_unaligned(cpu_to_le16((u16)(val)), (u16 *)((u8 *)(buf) + (pos))) | 52 | put_unaligned(cpu_to_le16((u16)(val)), (__le16 *)((u8 *)(buf) + (pos))) |
| 53 | #define DSET(buf,pos,val) \ | 53 | #define DSET(buf,pos,val) \ |
| 54 | put_unaligned(cpu_to_le32((u32)(val)), (u32 *)((u8 *)(buf) + (pos))) | 54 | put_unaligned(cpu_to_le32((u32)(val)), (__le32 *)((u8 *)(buf) + (pos))) |
| 55 | #define LSET(buf,pos,val) \ | 55 | #define LSET(buf,pos,val) \ |
| 56 | put_unaligned(cpu_to_le64((u64)(val)), (u64 *)((u8 *)(buf) + (pos))) | 56 | put_unaligned(cpu_to_le64((u64)(val)), (__le64 *)((u8 *)(buf) + (pos))) |
| 57 | 57 | ||
| 58 | /* where to find the base of the SMB packet proper */ | 58 | /* where to find the base of the SMB packet proper */ |
| 59 | #define smb_base(buf) ((u8 *)(((u8 *)(buf))+4)) | 59 | #define smb_base(buf) ((u8 *)(((u8 *)(buf))+4)) |
diff --git a/include/linux/sound.h b/include/linux/sound.h index f63d8342ffa3..9e2a94feed6b 100644 --- a/include/linux/sound.h +++ b/include/linux/sound.h | |||
| @@ -35,10 +35,8 @@ extern int register_sound_special_device(const struct file_operations *fops, int | |||
| 35 | extern int register_sound_mixer(const struct file_operations *fops, int dev); | 35 | extern int register_sound_mixer(const struct file_operations *fops, int dev); |
| 36 | extern int register_sound_midi(const struct file_operations *fops, int dev); | 36 | extern int register_sound_midi(const struct file_operations *fops, int dev); |
| 37 | extern int register_sound_dsp(const struct file_operations *fops, int dev); | 37 | extern int register_sound_dsp(const struct file_operations *fops, int dev); |
| 38 | extern int register_sound_synth(const struct file_operations *fops, int dev); | ||
| 39 | 38 | ||
| 40 | extern void unregister_sound_special(int unit); | 39 | extern void unregister_sound_special(int unit); |
| 41 | extern void unregister_sound_mixer(int unit); | 40 | extern void unregister_sound_mixer(int unit); |
| 42 | extern void unregister_sound_midi(int unit); | 41 | extern void unregister_sound_midi(int unit); |
| 43 | extern void unregister_sound_dsp(int unit); | 42 | extern void unregister_sound_dsp(int unit); |
| 44 | extern void unregister_sound_synth(int unit); | ||
diff --git a/include/linux/srcu.h b/include/linux/srcu.h new file mode 100644 index 000000000000..aca0eee53930 --- /dev/null +++ b/include/linux/srcu.h | |||
| @@ -0,0 +1,53 @@ | |||
| 1 | /* | ||
| 2 | * Sleepable Read-Copy Update mechanism for mutual exclusion | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
| 17 | * | ||
| 18 | * Copyright (C) IBM Corporation, 2006 | ||
| 19 | * | ||
| 20 | * Author: Paul McKenney <paulmck@us.ibm.com> | ||
| 21 | * | ||
| 22 | * For detailed explanation of Read-Copy Update mechanism see - | ||
| 23 | * Documentation/RCU/ *.txt | ||
| 24 | * | ||
| 25 | */ | ||
| 26 | |||
| 27 | #ifndef _LINUX_SRCU_H | ||
| 28 | #define _LINUX_SRCU_H | ||
| 29 | |||
| 30 | struct srcu_struct_array { | ||
| 31 | int c[2]; | ||
| 32 | }; | ||
| 33 | |||
| 34 | struct srcu_struct { | ||
| 35 | int completed; | ||
| 36 | struct srcu_struct_array *per_cpu_ref; | ||
| 37 | struct mutex mutex; | ||
| 38 | }; | ||
| 39 | |||
| 40 | #ifndef CONFIG_PREEMPT | ||
| 41 | #define srcu_barrier() barrier() | ||
| 42 | #else /* #ifndef CONFIG_PREEMPT */ | ||
| 43 | #define srcu_barrier() | ||
| 44 | #endif /* #else #ifndef CONFIG_PREEMPT */ | ||
| 45 | |||
| 46 | int init_srcu_struct(struct srcu_struct *sp); | ||
| 47 | void cleanup_srcu_struct(struct srcu_struct *sp); | ||
| 48 | int srcu_read_lock(struct srcu_struct *sp) __acquires(sp); | ||
| 49 | void srcu_read_unlock(struct srcu_struct *sp, int idx) __releases(sp); | ||
| 50 | void synchronize_srcu(struct srcu_struct *sp); | ||
| 51 | long srcu_batches_completed(struct srcu_struct *sp); | ||
| 52 | |||
| 53 | #endif | ||
diff --git a/include/linux/sunrpc/auth.h b/include/linux/sunrpc/auth.h index 862c0d8c8381..534cdc7be58d 100644 --- a/include/linux/sunrpc/auth.h +++ b/include/linux/sunrpc/auth.h | |||
| @@ -20,9 +20,6 @@ | |||
| 20 | /* size of the nodename buffer */ | 20 | /* size of the nodename buffer */ |
| 21 | #define UNX_MAXNODENAME 32 | 21 | #define UNX_MAXNODENAME 32 |
| 22 | 22 | ||
| 23 | /* Maximum size (in bytes) of an rpc credential or verifier */ | ||
| 24 | #define RPC_MAX_AUTH_SIZE (400) | ||
| 25 | |||
| 26 | /* Work around the lack of a VFS credential */ | 23 | /* Work around the lack of a VFS credential */ |
| 27 | struct auth_cred { | 24 | struct auth_cred { |
| 28 | uid_t uid; | 25 | uid_t uid; |
diff --git a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h index b5612c958cce..3699dff7db8f 100644 --- a/include/linux/sunrpc/cache.h +++ b/include/linux/sunrpc/cache.h | |||
| @@ -163,6 +163,17 @@ static inline void cache_put(struct cache_head *h, struct cache_detail *cd) | |||
| 163 | kref_put(&h->ref, cd->cache_put); | 163 | kref_put(&h->ref, cd->cache_put); |
| 164 | } | 164 | } |
| 165 | 165 | ||
| 166 | static inline int cache_valid(struct cache_head *h) | ||
| 167 | { | ||
| 168 | /* If an item has been unhashed pending removal when | ||
| 169 | * the refcount drops to 0, the expiry_time will be | ||
| 170 | * set to 0. We don't want to consider such items | ||
| 171 | * valid in this context even though CACHE_VALID is | ||
| 172 | * set. | ||
| 173 | */ | ||
| 174 | return (h->expiry_time != 0 && test_bit(CACHE_VALID, &h->flags)); | ||
| 175 | } | ||
| 176 | |||
| 166 | extern int cache_check(struct cache_detail *detail, | 177 | extern int cache_check(struct cache_detail *detail, |
| 167 | struct cache_head *h, struct cache_req *rqstp); | 178 | struct cache_head *h, struct cache_req *rqstp); |
| 168 | extern void cache_flush(void); | 179 | extern void cache_flush(void); |
diff --git a/include/linux/sunrpc/msg_prot.h b/include/linux/sunrpc/msg_prot.h index 8d10d148834e..606cb2165232 100644 --- a/include/linux/sunrpc/msg_prot.h +++ b/include/linux/sunrpc/msg_prot.h | |||
| @@ -11,6 +11,9 @@ | |||
| 11 | 11 | ||
| 12 | #define RPC_VERSION 2 | 12 | #define RPC_VERSION 2 |
| 13 | 13 | ||
| 14 | /* size of an XDR encoding unit in bytes, i.e. 32bit */ | ||
| 15 | #define XDR_UNIT (4) | ||
| 16 | |||
| 14 | /* spec defines authentication flavor as an unsigned 32 bit integer */ | 17 | /* spec defines authentication flavor as an unsigned 32 bit integer */ |
| 15 | typedef u32 rpc_authflavor_t; | 18 | typedef u32 rpc_authflavor_t; |
| 16 | 19 | ||
| @@ -34,6 +37,9 @@ enum rpc_auth_flavors { | |||
| 34 | RPC_AUTH_GSS_SPKMP = 390011, | 37 | RPC_AUTH_GSS_SPKMP = 390011, |
| 35 | }; | 38 | }; |
| 36 | 39 | ||
| 40 | /* Maximum size (in bytes) of an rpc credential or verifier */ | ||
| 41 | #define RPC_MAX_AUTH_SIZE (400) | ||
| 42 | |||
| 37 | enum rpc_msg_type { | 43 | enum rpc_msg_type { |
| 38 | RPC_CALL = 0, | 44 | RPC_CALL = 0, |
| 39 | RPC_REPLY = 1 | 45 | RPC_REPLY = 1 |
| @@ -50,7 +56,9 @@ enum rpc_accept_stat { | |||
| 50 | RPC_PROG_MISMATCH = 2, | 56 | RPC_PROG_MISMATCH = 2, |
| 51 | RPC_PROC_UNAVAIL = 3, | 57 | RPC_PROC_UNAVAIL = 3, |
| 52 | RPC_GARBAGE_ARGS = 4, | 58 | RPC_GARBAGE_ARGS = 4, |
| 53 | RPC_SYSTEM_ERR = 5 | 59 | RPC_SYSTEM_ERR = 5, |
| 60 | /* internal use only */ | ||
| 61 | RPC_DROP_REPLY = 60000, | ||
| 54 | }; | 62 | }; |
| 55 | 63 | ||
| 56 | enum rpc_reject_stat { | 64 | enum rpc_reject_stat { |
| @@ -101,5 +109,39 @@ typedef __be32 rpc_fraghdr; | |||
| 101 | #define RPC_FRAGMENT_SIZE_MASK (~RPC_LAST_STREAM_FRAGMENT) | 109 | #define RPC_FRAGMENT_SIZE_MASK (~RPC_LAST_STREAM_FRAGMENT) |
| 102 | #define RPC_MAX_FRAGMENT_SIZE ((1U << 31) - 1) | 110 | #define RPC_MAX_FRAGMENT_SIZE ((1U << 31) - 1) |
| 103 | 111 | ||
| 112 | /* | ||
| 113 | * RPC call and reply header size as number of 32bit words (verifier | ||
| 114 | * size computed separately, see below) | ||
| 115 | */ | ||
| 116 | #define RPC_CALLHDRSIZE (6) | ||
| 117 | #define RPC_REPHDRSIZE (4) | ||
| 118 | |||
| 119 | |||
| 120 | /* | ||
| 121 | * Maximum RPC header size, including authentication, | ||
| 122 | * as number of 32bit words (see RFCs 1831, 1832). | ||
| 123 | * | ||
| 124 | * xid 1 xdr unit = 4 bytes | ||
| 125 | * mtype 1 | ||
| 126 | * rpc_version 1 | ||
| 127 | * program 1 | ||
| 128 | * prog_version 1 | ||
| 129 | * procedure 1 | ||
| 130 | * cred { | ||
| 131 | * flavor 1 | ||
| 132 | * length 1 | ||
| 133 | * body<RPC_MAX_AUTH_SIZE> 100 xdr units = 400 bytes | ||
| 134 | * } | ||
| 135 | * verf { | ||
| 136 | * flavor 1 | ||
| 137 | * length 1 | ||
| 138 | * body<RPC_MAX_AUTH_SIZE> 100 xdr units = 400 bytes | ||
| 139 | * } | ||
| 140 | * TOTAL 210 xdr units = 840 bytes | ||
| 141 | */ | ||
| 142 | #define RPC_MAX_HEADER_WITH_AUTH \ | ||
| 143 | (RPC_CALLHDRSIZE + 2*(2+RPC_MAX_AUTH_SIZE/4)) | ||
| 144 | |||
| 145 | |||
| 104 | #endif /* __KERNEL__ */ | 146 | #endif /* __KERNEL__ */ |
| 105 | #endif /* _LINUX_SUNRPC_MSGPROT_H_ */ | 147 | #endif /* _LINUX_SUNRPC_MSGPROT_H_ */ |
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h index 4ebcdf91f3b3..965d6c20086e 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <linux/in.h> | 13 | #include <linux/in.h> |
| 14 | #include <linux/sunrpc/types.h> | 14 | #include <linux/sunrpc/types.h> |
| 15 | #include <linux/sunrpc/xdr.h> | 15 | #include <linux/sunrpc/xdr.h> |
| 16 | #include <linux/sunrpc/auth.h> | ||
| 16 | #include <linux/sunrpc/svcauth.h> | 17 | #include <linux/sunrpc/svcauth.h> |
| 17 | #include <linux/wait.h> | 18 | #include <linux/wait.h> |
| 18 | #include <linux/mm.h> | 19 | #include <linux/mm.h> |
| @@ -56,7 +57,8 @@ struct svc_serv { | |||
| 56 | struct svc_stat * sv_stats; /* RPC statistics */ | 57 | struct svc_stat * sv_stats; /* RPC statistics */ |
| 57 | spinlock_t sv_lock; | 58 | spinlock_t sv_lock; |
| 58 | unsigned int sv_nrthreads; /* # of server threads */ | 59 | unsigned int sv_nrthreads; /* # of server threads */ |
| 59 | unsigned int sv_bufsz; /* datagram buffer size */ | 60 | unsigned int sv_max_payload; /* datagram payload size */ |
| 61 | unsigned int sv_max_mesg; /* max_payload + 1 page for overheads */ | ||
| 60 | unsigned int sv_xdrsize; /* XDR buffer size */ | 62 | unsigned int sv_xdrsize; /* XDR buffer size */ |
| 61 | 63 | ||
| 62 | struct list_head sv_permsocks; /* all permanent sockets */ | 64 | struct list_head sv_permsocks; /* all permanent sockets */ |
| @@ -95,8 +97,28 @@ static inline void svc_get(struct svc_serv *serv) | |||
| 95 | * Maximum payload size supported by a kernel RPC server. | 97 | * Maximum payload size supported by a kernel RPC server. |
| 96 | * This is use to determine the max number of pages nfsd is | 98 | * This is use to determine the max number of pages nfsd is |
| 97 | * willing to return in a single READ operation. | 99 | * willing to return in a single READ operation. |
| 100 | * | ||
| 101 | * These happen to all be powers of 2, which is not strictly | ||
| 102 | * necessary but helps enforce the real limitation, which is | ||
| 103 | * that they should be multiples of PAGE_CACHE_SIZE. | ||
| 104 | * | ||
| 105 | * For UDP transports, a block plus NFS,RPC, and UDP headers | ||
| 106 | * has to fit into the IP datagram limit of 64K. The largest | ||
| 107 | * feasible number for all known page sizes is probably 48K, | ||
| 108 | * but we choose 32K here. This is the same as the historical | ||
| 109 | * Linux limit; someone who cares more about NFS/UDP performance | ||
| 110 | * can test a larger number. | ||
| 111 | * | ||
| 112 | * For TCP transports we have more freedom. A size of 1MB is | ||
| 113 | * chosen to match the client limit. Other OSes are known to | ||
| 114 | * have larger limits, but those numbers are probably beyond | ||
| 115 | * the point of diminishing returns. | ||
| 98 | */ | 116 | */ |
| 99 | #define RPCSVC_MAXPAYLOAD (64*1024u) | 117 | #define RPCSVC_MAXPAYLOAD (1*1024*1024u) |
| 118 | #define RPCSVC_MAXPAYLOAD_TCP RPCSVC_MAXPAYLOAD | ||
| 119 | #define RPCSVC_MAXPAYLOAD_UDP (32*1024u) | ||
| 120 | |||
| 121 | extern u32 svc_max_payload(const struct svc_rqst *rqstp); | ||
| 100 | 122 | ||
| 101 | /* | 123 | /* |
| 102 | * RPC Requsts and replies are stored in one or more pages. | 124 | * RPC Requsts and replies are stored in one or more pages. |
| @@ -170,7 +192,6 @@ static inline void svc_putu32(struct kvec *iov, __be32 val) | |||
| 170 | /* | 192 | /* |
| 171 | * The context of a single thread, including the request currently being | 193 | * The context of a single thread, including the request currently being |
| 172 | * processed. | 194 | * processed. |
| 173 | * NOTE: First two items must be prev/next. | ||
| 174 | */ | 195 | */ |
| 175 | struct svc_rqst { | 196 | struct svc_rqst { |
| 176 | struct list_head rq_list; /* idle list */ | 197 | struct list_head rq_list; /* idle list */ |
| @@ -189,12 +210,11 @@ struct svc_rqst { | |||
| 189 | 210 | ||
| 190 | struct xdr_buf rq_arg; | 211 | struct xdr_buf rq_arg; |
| 191 | struct xdr_buf rq_res; | 212 | struct xdr_buf rq_res; |
| 192 | struct page * rq_argpages[RPCSVC_MAXPAGES]; | 213 | struct page * rq_pages[RPCSVC_MAXPAGES]; |
| 193 | struct page * rq_respages[RPCSVC_MAXPAGES]; | 214 | struct page * *rq_respages; /* points into rq_pages */ |
| 194 | int rq_restailpage; | 215 | int rq_resused; /* number of pages used for result */ |
| 195 | short rq_argused; /* pages used for argument */ | 216 | |
| 196 | short rq_arghi; /* pages available in argument page list */ | 217 | struct kvec rq_vec[RPCSVC_MAXPAGES]; /* generally useful.. */ |
| 197 | short rq_resused; /* pages used for result */ | ||
| 198 | 218 | ||
| 199 | __be32 rq_xid; /* transmission id */ | 219 | __be32 rq_xid; /* transmission id */ |
| 200 | u32 rq_prog; /* program number */ | 220 | u32 rq_prog; /* program number */ |
| @@ -255,63 +275,18 @@ xdr_ressize_check(struct svc_rqst *rqstp, __be32 *p) | |||
| 255 | return vec->iov_len <= PAGE_SIZE; | 275 | return vec->iov_len <= PAGE_SIZE; |
| 256 | } | 276 | } |
| 257 | 277 | ||
| 258 | static inline struct page * | 278 | static inline void svc_free_res_pages(struct svc_rqst *rqstp) |
| 259 | svc_take_res_page(struct svc_rqst *rqstp) | ||
| 260 | { | ||
| 261 | if (rqstp->rq_arghi <= rqstp->rq_argused) | ||
| 262 | return NULL; | ||
| 263 | rqstp->rq_arghi--; | ||
| 264 | rqstp->rq_respages[rqstp->rq_resused] = | ||
| 265 | rqstp->rq_argpages[rqstp->rq_arghi]; | ||
| 266 | return rqstp->rq_respages[rqstp->rq_resused++]; | ||
| 267 | } | ||
| 268 | |||
| 269 | static inline void svc_take_page(struct svc_rqst *rqstp) | ||
| 270 | { | ||
| 271 | if (rqstp->rq_arghi <= rqstp->rq_argused) { | ||
| 272 | WARN_ON(1); | ||
| 273 | return; | ||
| 274 | } | ||
| 275 | rqstp->rq_arghi--; | ||
| 276 | rqstp->rq_respages[rqstp->rq_resused] = | ||
| 277 | rqstp->rq_argpages[rqstp->rq_arghi]; | ||
| 278 | rqstp->rq_resused++; | ||
| 279 | } | ||
| 280 | |||
| 281 | static inline void svc_pushback_allpages(struct svc_rqst *rqstp) | ||
| 282 | { | ||
| 283 | while (rqstp->rq_resused) { | ||
| 284 | if (rqstp->rq_respages[--rqstp->rq_resused] == NULL) | ||
| 285 | continue; | ||
| 286 | rqstp->rq_argpages[rqstp->rq_arghi++] = | ||
| 287 | rqstp->rq_respages[rqstp->rq_resused]; | ||
| 288 | rqstp->rq_respages[rqstp->rq_resused] = NULL; | ||
| 289 | } | ||
| 290 | } | ||
| 291 | |||
| 292 | static inline void svc_pushback_unused_pages(struct svc_rqst *rqstp) | ||
| 293 | { | 279 | { |
| 294 | while (rqstp->rq_resused && | 280 | while (rqstp->rq_resused) { |
| 295 | rqstp->rq_res.pages != &rqstp->rq_respages[rqstp->rq_resused]) { | 281 | struct page **pp = (rqstp->rq_respages + |
| 296 | 282 | --rqstp->rq_resused); | |
| 297 | if (rqstp->rq_respages[--rqstp->rq_resused] != NULL) { | 283 | if (*pp) { |
| 298 | rqstp->rq_argpages[rqstp->rq_arghi++] = | 284 | put_page(*pp); |
| 299 | rqstp->rq_respages[rqstp->rq_resused]; | 285 | *pp = NULL; |
| 300 | rqstp->rq_respages[rqstp->rq_resused] = NULL; | ||
| 301 | } | 286 | } |
| 302 | } | 287 | } |
| 303 | } | 288 | } |
| 304 | 289 | ||
| 305 | static inline void svc_free_allpages(struct svc_rqst *rqstp) | ||
| 306 | { | ||
| 307 | while (rqstp->rq_resused) { | ||
| 308 | if (rqstp->rq_respages[--rqstp->rq_resused] == NULL) | ||
| 309 | continue; | ||
| 310 | put_page(rqstp->rq_respages[rqstp->rq_resused]); | ||
| 311 | rqstp->rq_respages[rqstp->rq_resused] = NULL; | ||
| 312 | } | ||
| 313 | } | ||
| 314 | |||
| 315 | struct svc_deferred_req { | 290 | struct svc_deferred_req { |
| 316 | u32 prot; /* protocol (UDP or TCP) */ | 291 | u32 prot; /* protocol (UDP or TCP) */ |
| 317 | struct sockaddr_in addr; | 292 | struct sockaddr_in addr; |
| @@ -347,6 +322,9 @@ struct svc_version { | |||
| 347 | struct svc_procedure * vs_proc; /* per-procedure info */ | 322 | struct svc_procedure * vs_proc; /* per-procedure info */ |
| 348 | u32 vs_xdrsize; /* xdrsize needed for this version */ | 323 | u32 vs_xdrsize; /* xdrsize needed for this version */ |
| 349 | 324 | ||
| 325 | unsigned int vs_hidden : 1; /* Don't register with portmapper. | ||
| 326 | * Only used for nfsacl so far. */ | ||
| 327 | |||
| 350 | /* Override dispatch function (e.g. when caching replies). | 328 | /* Override dispatch function (e.g. when caching replies). |
| 351 | * A return value of 0 means drop the request. | 329 | * A return value of 0 means drop the request. |
| 352 | * vs_dispatch == NULL means use default dispatcher. | 330 | * vs_dispatch == NULL means use default dispatcher. |
| @@ -357,7 +335,7 @@ struct svc_version { | |||
| 357 | /* | 335 | /* |
| 358 | * RPC procedure info | 336 | * RPC procedure info |
| 359 | */ | 337 | */ |
| 360 | typedef int (*svc_procfunc)(struct svc_rqst *, void *argp, void *resp); | 338 | typedef __be32 (*svc_procfunc)(struct svc_rqst *, void *argp, void *resp); |
| 361 | struct svc_procedure { | 339 | struct svc_procedure { |
| 362 | svc_procfunc pc_func; /* process the request */ | 340 | svc_procfunc pc_func; /* process the request */ |
| 363 | kxdrproc_t pc_decode; /* XDR decode args */ | 341 | kxdrproc_t pc_decode; /* XDR decode args */ |
diff --git a/include/linux/sunrpc/svcauth.h b/include/linux/sunrpc/svcauth.h index a6601650deeb..de92619b0826 100644 --- a/include/linux/sunrpc/svcauth.h +++ b/include/linux/sunrpc/svcauth.h | |||
| @@ -126,6 +126,7 @@ extern struct auth_domain *auth_domain_find(char *name); | |||
| 126 | extern struct auth_domain *auth_unix_lookup(struct in_addr addr); | 126 | extern struct auth_domain *auth_unix_lookup(struct in_addr addr); |
| 127 | extern int auth_unix_forget_old(struct auth_domain *dom); | 127 | extern int auth_unix_forget_old(struct auth_domain *dom); |
| 128 | extern void svcauth_unix_purge(void); | 128 | extern void svcauth_unix_purge(void); |
| 129 | extern void svcauth_unix_info_release(void *); | ||
| 129 | 130 | ||
| 130 | static inline unsigned long hash_str(char *name, int bits) | 131 | static inline unsigned long hash_str(char *name, int bits) |
| 131 | { | 132 | { |
diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h index 4c296152cbfa..98b21ad370fd 100644 --- a/include/linux/sunrpc/svcsock.h +++ b/include/linux/sunrpc/svcsock.h | |||
| @@ -54,6 +54,9 @@ struct svc_sock { | |||
| 54 | int sk_reclen; /* length of record */ | 54 | int sk_reclen; /* length of record */ |
| 55 | int sk_tcplen; /* current read length */ | 55 | int sk_tcplen; /* current read length */ |
| 56 | time_t sk_lastrecv; /* time of last received request */ | 56 | time_t sk_lastrecv; /* time of last received request */ |
| 57 | |||
| 58 | /* cache of various info for TCP sockets */ | ||
| 59 | void *sk_info_authunix; | ||
| 57 | }; | 60 | }; |
| 58 | 61 | ||
| 59 | /* | 62 | /* |
diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h index 953723b09bc6..ac69e5511606 100644 --- a/include/linux/sunrpc/xdr.h +++ b/include/linux/sunrpc/xdr.h | |||
| @@ -74,6 +74,7 @@ struct xdr_buf { | |||
| 74 | #define rpc_proc_unavail __constant_htonl(RPC_PROC_UNAVAIL) | 74 | #define rpc_proc_unavail __constant_htonl(RPC_PROC_UNAVAIL) |
| 75 | #define rpc_garbage_args __constant_htonl(RPC_GARBAGE_ARGS) | 75 | #define rpc_garbage_args __constant_htonl(RPC_GARBAGE_ARGS) |
| 76 | #define rpc_system_err __constant_htonl(RPC_SYSTEM_ERR) | 76 | #define rpc_system_err __constant_htonl(RPC_SYSTEM_ERR) |
| 77 | #define rpc_drop_reply __constant_htonl(RPC_DROP_REPLY) | ||
| 77 | 78 | ||
| 78 | #define rpc_auth_ok __constant_htonl(RPC_AUTH_OK) | 79 | #define rpc_auth_ok __constant_htonl(RPC_AUTH_OK) |
| 79 | #define rpc_autherr_badcred __constant_htonl(RPC_AUTH_BADCRED) | 80 | #define rpc_autherr_badcred __constant_htonl(RPC_AUTH_BADCRED) |
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index 6cf626580752..60394fbc4c70 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/kref.h> | 15 | #include <linux/kref.h> |
| 16 | #include <linux/sunrpc/sched.h> | 16 | #include <linux/sunrpc/sched.h> |
| 17 | #include <linux/sunrpc/xdr.h> | 17 | #include <linux/sunrpc/xdr.h> |
| 18 | #include <linux/sunrpc/msg_prot.h> | ||
| 18 | 19 | ||
| 19 | extern unsigned int xprt_udp_slot_table_entries; | 20 | extern unsigned int xprt_udp_slot_table_entries; |
| 20 | extern unsigned int xprt_tcp_slot_table_entries; | 21 | extern unsigned int xprt_tcp_slot_table_entries; |
| @@ -24,13 +25,6 @@ extern unsigned int xprt_tcp_slot_table_entries; | |||
| 24 | #define RPC_MAX_SLOT_TABLE (128U) | 25 | #define RPC_MAX_SLOT_TABLE (128U) |
| 25 | 26 | ||
| 26 | /* | 27 | /* |
| 27 | * RPC call and reply header size as number of 32bit words (verifier | ||
| 28 | * size computed separately) | ||
| 29 | */ | ||
| 30 | #define RPC_CALLHDRSIZE 6 | ||
| 31 | #define RPC_REPHDRSIZE 4 | ||
| 32 | |||
| 33 | /* | ||
| 34 | * Parameters for choosing a free port | 28 | * Parameters for choosing a free port |
| 35 | */ | 29 | */ |
| 36 | extern unsigned int xprt_min_resvport; | 30 | extern unsigned int xprt_min_resvport; |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 3efcfc7e9c6c..1912c6cbef55 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
| @@ -431,6 +431,10 @@ asmlinkage long sys_epoll_ctl(int epfd, int op, int fd, | |||
| 431 | struct epoll_event __user *event); | 431 | struct epoll_event __user *event); |
| 432 | asmlinkage long sys_epoll_wait(int epfd, struct epoll_event __user *events, | 432 | asmlinkage long sys_epoll_wait(int epfd, struct epoll_event __user *events, |
| 433 | int maxevents, int timeout); | 433 | int maxevents, int timeout); |
| 434 | asmlinkage long sys_epoll_pwait(int epfd, struct epoll_event __user *events, | ||
| 435 | int maxevents, int timeout, | ||
| 436 | const sigset_t __user *sigmask, | ||
| 437 | size_t sigsetsize); | ||
| 434 | asmlinkage long sys_gethostname(char __user *name, int len); | 438 | asmlinkage long sys_gethostname(char __user *name, int len); |
| 435 | asmlinkage long sys_sethostname(char __user *name, int len); | 439 | asmlinkage long sys_sethostname(char __user *name, int len); |
| 436 | asmlinkage long sys_setdomainname(char __user *name, int len); | 440 | asmlinkage long sys_setdomainname(char __user *name, int len); |
| @@ -593,7 +597,7 @@ asmlinkage long sys_tee(int fdin, int fdout, size_t len, unsigned int flags); | |||
| 593 | asmlinkage long sys_sync_file_range(int fd, loff_t offset, loff_t nbytes, | 597 | asmlinkage long sys_sync_file_range(int fd, loff_t offset, loff_t nbytes, |
| 594 | unsigned int flags); | 598 | unsigned int flags); |
| 595 | asmlinkage long sys_get_robust_list(int pid, | 599 | asmlinkage long sys_get_robust_list(int pid, |
| 596 | struct robust_list_head __user **head_ptr, | 600 | struct robust_list_head __user * __user *head_ptr, |
| 597 | size_t __user *len_ptr); | 601 | size_t __user *len_ptr); |
| 598 | asmlinkage long sys_set_robust_list(struct robust_list_head __user *head, | 602 | asmlinkage long sys_set_robust_list(struct robust_list_head __user *head, |
| 599 | size_t len); | 603 | size_t len); |
diff --git a/include/linux/sysrq.h b/include/linux/sysrq.h index e657e523b9bf..9df8833670cb 100644 --- a/include/linux/sysrq.h +++ b/include/linux/sysrq.h | |||
| @@ -29,7 +29,7 @@ struct tty_struct; | |||
| 29 | #define SYSRQ_ENABLE_RTNICE 0x0100 | 29 | #define SYSRQ_ENABLE_RTNICE 0x0100 |
| 30 | 30 | ||
| 31 | struct sysrq_key_op { | 31 | struct sysrq_key_op { |
| 32 | void (*handler)(int, struct pt_regs *, struct tty_struct *); | 32 | void (*handler)(int, struct tty_struct *); |
| 33 | char *help_msg; | 33 | char *help_msg; |
| 34 | char *action_msg; | 34 | char *action_msg; |
| 35 | int enable_mask; | 35 | int enable_mask; |
| @@ -42,8 +42,8 @@ struct sysrq_key_op { | |||
| 42 | * are available -- else NULL's). | 42 | * are available -- else NULL's). |
| 43 | */ | 43 | */ |
| 44 | 44 | ||
| 45 | void handle_sysrq(int, struct pt_regs *, struct tty_struct *); | 45 | void handle_sysrq(int, struct tty_struct *); |
| 46 | void __handle_sysrq(int, struct pt_regs *, struct tty_struct *, int check_mask); | 46 | void __handle_sysrq(int, struct tty_struct *, int check_mask); |
| 47 | int register_sysrq_key(int, struct sysrq_key_op *); | 47 | int register_sysrq_key(int, struct sysrq_key_op *); |
| 48 | int unregister_sysrq_key(int, struct sysrq_key_op *); | 48 | int unregister_sysrq_key(int, struct sysrq_key_op *); |
| 49 | struct sysrq_key_op *__sysrq_get_key_op(int key); | 49 | struct sysrq_key_op *__sysrq_get_key_op(int key); |
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 0e058a2d1c6d..2d36f6db3706 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
| @@ -342,6 +342,8 @@ struct tcp_sock { | |||
| 342 | 342 | ||
| 343 | unsigned long last_synq_overflow; | 343 | unsigned long last_synq_overflow; |
| 344 | 344 | ||
| 345 | __u32 tso_deferred; | ||
| 346 | |||
| 345 | /* Receiver side RTT estimation */ | 347 | /* Receiver side RTT estimation */ |
| 346 | struct { | 348 | struct { |
| 347 | __u32 rtt; | 349 | __u32 rtt; |
diff --git a/include/linux/tifm.h b/include/linux/tifm.h new file mode 100644 index 000000000000..dfb8052eee5e --- /dev/null +++ b/include/linux/tifm.h | |||
| @@ -0,0 +1,159 @@ | |||
| 1 | /* | ||
| 2 | * tifm.h - TI FlashMedia driver | ||
| 3 | * | ||
| 4 | * Copyright (C) 2006 Alex Dubov <oakad@yahoo.com> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | */ | ||
| 11 | |||
| 12 | #ifndef _TIFM_H | ||
| 13 | #define _TIFM_H | ||
| 14 | |||
| 15 | #include <linux/spinlock.h> | ||
| 16 | #include <linux/interrupt.h> | ||
| 17 | #include <linux/wait.h> | ||
| 18 | #include <linux/delay.h> | ||
| 19 | #include <linux/pci.h> | ||
| 20 | #include <linux/scatterlist.h> | ||
| 21 | |||
| 22 | /* Host registers (relative to pci base address): */ | ||
| 23 | enum { | ||
| 24 | FM_SET_INTERRUPT_ENABLE = 0x008, | ||
| 25 | FM_CLEAR_INTERRUPT_ENABLE = 0x00c, | ||
| 26 | FM_INTERRUPT_STATUS = 0x014 }; | ||
| 27 | |||
| 28 | /* Socket registers (relative to socket base address): */ | ||
| 29 | enum { | ||
| 30 | SOCK_CONTROL = 0x004, | ||
| 31 | SOCK_PRESENT_STATE = 0x008, | ||
| 32 | SOCK_DMA_ADDRESS = 0x00c, | ||
| 33 | SOCK_DMA_CONTROL = 0x010, | ||
| 34 | SOCK_DMA_FIFO_INT_ENABLE_SET = 0x014, | ||
| 35 | SOCK_DMA_FIFO_INT_ENABLE_CLEAR = 0x018, | ||
| 36 | SOCK_DMA_FIFO_STATUS = 0x020, | ||
| 37 | SOCK_FIFO_CONTROL = 0x024, | ||
| 38 | SOCK_FIFO_PAGE_SIZE = 0x028, | ||
| 39 | SOCK_MMCSD_COMMAND = 0x104, | ||
| 40 | SOCK_MMCSD_ARG_LOW = 0x108, | ||
| 41 | SOCK_MMCSD_ARG_HIGH = 0x10c, | ||
| 42 | SOCK_MMCSD_CONFIG = 0x110, | ||
| 43 | SOCK_MMCSD_STATUS = 0x114, | ||
| 44 | SOCK_MMCSD_INT_ENABLE = 0x118, | ||
| 45 | SOCK_MMCSD_COMMAND_TO = 0x11c, | ||
| 46 | SOCK_MMCSD_DATA_TO = 0x120, | ||
| 47 | SOCK_MMCSD_DATA = 0x124, | ||
| 48 | SOCK_MMCSD_BLOCK_LEN = 0x128, | ||
| 49 | SOCK_MMCSD_NUM_BLOCKS = 0x12c, | ||
| 50 | SOCK_MMCSD_BUFFER_CONFIG = 0x130, | ||
| 51 | SOCK_MMCSD_SPI_CONFIG = 0x134, | ||
| 52 | SOCK_MMCSD_SDIO_MODE_CONFIG = 0x138, | ||
| 53 | SOCK_MMCSD_RESPONSE = 0x144, | ||
| 54 | SOCK_MMCSD_SDIO_SR = 0x164, | ||
| 55 | SOCK_MMCSD_SYSTEM_CONTROL = 0x168, | ||
| 56 | SOCK_MMCSD_SYSTEM_STATUS = 0x16c, | ||
| 57 | SOCK_MS_COMMAND = 0x184, | ||
| 58 | SOCK_MS_DATA = 0x188, | ||
| 59 | SOCK_MS_STATUS = 0x18c, | ||
| 60 | SOCK_MS_SYSTEM = 0x190, | ||
| 61 | SOCK_FIFO_ACCESS = 0x200 }; | ||
| 62 | |||
| 63 | |||
| 64 | #define TIFM_IRQ_ENABLE 0x80000000 | ||
| 65 | #define TIFM_IRQ_SOCKMASK 0x00000001 | ||
| 66 | #define TIFM_IRQ_CARDMASK 0x00000100 | ||
| 67 | #define TIFM_IRQ_FIFOMASK 0x00010000 | ||
| 68 | #define TIFM_IRQ_SETALL 0xffffffff | ||
| 69 | #define TIFM_IRQ_SETALLSOCK 0x0000000f | ||
| 70 | |||
| 71 | #define TIFM_CTRL_LED 0x00000040 | ||
| 72 | #define TIFM_CTRL_FAST_CLK 0x00000100 | ||
| 73 | |||
| 74 | #define TIFM_SOCK_STATE_OCCUPIED 0x00000008 | ||
| 75 | #define TIFM_SOCK_STATE_POWERED 0x00000080 | ||
| 76 | |||
| 77 | #define TIFM_FIFO_ENABLE 0x00000001 /* Meaning of this constant is unverified */ | ||
| 78 | #define TIFM_FIFO_INT_SETALL 0x0000ffff | ||
| 79 | #define TIFM_FIFO_INTMASK 0x00000005 /* Meaning of this constant is unverified */ | ||
| 80 | |||
| 81 | #define TIFM_DMA_RESET 0x00000002 /* Meaning of this constant is unverified */ | ||
| 82 | #define TIFM_DMA_TX 0x00008000 /* Meaning of this constant is unverified */ | ||
| 83 | #define TIFM_DMA_EN 0x00000001 /* Meaning of this constant is unverified */ | ||
| 84 | |||
| 85 | typedef enum {FM_NULL = 0, FM_XD = 0x01, FM_MS = 0x02, FM_SD = 0x03} tifm_media_id; | ||
| 86 | |||
| 87 | struct tifm_driver; | ||
| 88 | struct tifm_dev { | ||
| 89 | char __iomem *addr; | ||
| 90 | spinlock_t lock; | ||
| 91 | tifm_media_id media_id; | ||
| 92 | char wq_name[KOBJ_NAME_LEN]; | ||
| 93 | struct workqueue_struct *wq; | ||
| 94 | |||
| 95 | unsigned int (*signal_irq)(struct tifm_dev *sock, | ||
| 96 | unsigned int sock_irq_status); | ||
| 97 | |||
| 98 | struct tifm_driver *drv; | ||
| 99 | struct device dev; | ||
| 100 | }; | ||
| 101 | |||
| 102 | struct tifm_driver { | ||
| 103 | tifm_media_id *id_table; | ||
| 104 | int (*probe)(struct tifm_dev *dev); | ||
| 105 | void (*remove)(struct tifm_dev *dev); | ||
| 106 | |||
| 107 | struct device_driver driver; | ||
| 108 | }; | ||
| 109 | |||
| 110 | struct tifm_adapter { | ||
| 111 | char __iomem *addr; | ||
| 112 | unsigned int irq_status; | ||
| 113 | unsigned int insert_mask; | ||
| 114 | unsigned int remove_mask; | ||
| 115 | spinlock_t lock; | ||
| 116 | unsigned int id; | ||
| 117 | unsigned int max_sockets; | ||
| 118 | char wq_name[KOBJ_NAME_LEN]; | ||
| 119 | unsigned int inhibit_new_cards; | ||
| 120 | struct workqueue_struct *wq; | ||
| 121 | struct work_struct media_inserter; | ||
| 122 | struct work_struct media_remover; | ||
| 123 | struct tifm_dev **sockets; | ||
| 124 | struct class_device cdev; | ||
| 125 | struct device *dev; | ||
| 126 | |||
| 127 | void (*eject)(struct tifm_adapter *fm, struct tifm_dev *sock); | ||
| 128 | }; | ||
| 129 | |||
| 130 | struct tifm_adapter *tifm_alloc_adapter(void); | ||
| 131 | void tifm_free_device(struct device *dev); | ||
| 132 | void tifm_free_adapter(struct tifm_adapter *fm); | ||
| 133 | int tifm_add_adapter(struct tifm_adapter *fm); | ||
| 134 | void tifm_remove_adapter(struct tifm_adapter *fm); | ||
| 135 | struct tifm_dev *tifm_alloc_device(struct tifm_adapter *fm, unsigned int id); | ||
| 136 | int tifm_register_driver(struct tifm_driver *drv); | ||
| 137 | void tifm_unregister_driver(struct tifm_driver *drv); | ||
| 138 | void tifm_eject(struct tifm_dev *sock); | ||
| 139 | int tifm_map_sg(struct tifm_dev *sock, struct scatterlist *sg, int nents, | ||
| 140 | int direction); | ||
| 141 | void tifm_unmap_sg(struct tifm_dev *sock, struct scatterlist *sg, int nents, | ||
| 142 | int direction); | ||
| 143 | |||
| 144 | |||
| 145 | static inline void *tifm_get_drvdata(struct tifm_dev *dev) | ||
| 146 | { | ||
| 147 | return dev_get_drvdata(&dev->dev); | ||
| 148 | } | ||
| 149 | |||
| 150 | static inline void tifm_set_drvdata(struct tifm_dev *dev, void *data) | ||
| 151 | { | ||
| 152 | dev_set_drvdata(&dev->dev, data); | ||
| 153 | } | ||
| 154 | |||
| 155 | struct tifm_device_id { | ||
| 156 | tifm_media_id media_id; | ||
| 157 | }; | ||
| 158 | |||
| 159 | #endif | ||
diff --git a/include/linux/timex.h b/include/linux/timex.h index 049dfe4a11f2..db501dc23c29 100644 --- a/include/linux/timex.h +++ b/include/linux/timex.h | |||
| @@ -293,6 +293,9 @@ extern void second_overflow(void); | |||
| 293 | extern void update_ntp_one_tick(void); | 293 | extern void update_ntp_one_tick(void); |
| 294 | extern int do_adjtimex(struct timex *); | 294 | extern int do_adjtimex(struct timex *); |
| 295 | 295 | ||
| 296 | /* Don't use! Compatibility define for existing users. */ | ||
| 297 | #define tickadj (500/HZ ? : 1) | ||
| 298 | |||
| 296 | #endif /* KERNEL */ | 299 | #endif /* KERNEL */ |
| 297 | 300 | ||
| 298 | #endif /* LINUX_TIMEX_H */ | 301 | #endif /* LINUX_TIMEX_H */ |
diff --git a/include/linux/tipc.h b/include/linux/tipc.h index 243a15f54002..bea469455a0c 100644 --- a/include/linux/tipc.h +++ b/include/linux/tipc.h | |||
| @@ -129,6 +129,7 @@ static inline unsigned int tipc_node(__u32 addr) | |||
| 129 | 129 | ||
| 130 | #define TIPC_SUB_PORTS 0x01 /* filter for port availability */ | 130 | #define TIPC_SUB_PORTS 0x01 /* filter for port availability */ |
| 131 | #define TIPC_SUB_SERVICE 0x02 /* filter for service availability */ | 131 | #define TIPC_SUB_SERVICE 0x02 /* filter for service availability */ |
| 132 | #define TIPC_SUB_CANCEL 0x04 /* cancel a subscription */ | ||
| 132 | #if 0 | 133 | #if 0 |
| 133 | /* The following filter options are not currently implemented */ | 134 | /* The following filter options are not currently implemented */ |
| 134 | #define TIPC_SUB_NO_BIND_EVTS 0x04 /* filter out "publish" events */ | 135 | #define TIPC_SUB_NO_BIND_EVTS 0x04 /* filter out "publish" events */ |
diff --git a/include/linux/types.h b/include/linux/types.h index 406d4ae57631..750f085fa564 100644 --- a/include/linux/types.h +++ b/include/linux/types.h | |||
| @@ -129,8 +129,12 @@ typedef __s64 int64_t; | |||
| 129 | /* this is a special 64bit data type that is 8-byte aligned */ | 129 | /* this is a special 64bit data type that is 8-byte aligned */ |
| 130 | #define aligned_u64 unsigned long long __attribute__((aligned(8))) | 130 | #define aligned_u64 unsigned long long __attribute__((aligned(8))) |
| 131 | 131 | ||
| 132 | /* | 132 | /** |
| 133 | * The type used for indexing onto a disc or disc partition. | 133 | * The type used for indexing onto a disc or disc partition. |
| 134 | * | ||
| 135 | * Linux always considers sectors to be 512 bytes long independently | ||
| 136 | * of the devices real block size. | ||
| 137 | * | ||
| 134 | * If required, asm/types.h can override it and define | 138 | * If required, asm/types.h can override it and define |
| 135 | * HAVE_SECTOR_T | 139 | * HAVE_SECTOR_T |
| 136 | */ | 140 | */ |
diff --git a/include/linux/ufs_fs.h b/include/linux/ufs_fs.h index fc62887c5206..61eef508b041 100644 --- a/include/linux/ufs_fs.h +++ b/include/linux/ufs_fs.h | |||
| @@ -351,6 +351,14 @@ struct ufs2_csum_total { | |||
| 351 | __fs64 cs_spare[3]; /* future expansion */ | 351 | __fs64 cs_spare[3]; /* future expansion */ |
| 352 | }; | 352 | }; |
| 353 | 353 | ||
| 354 | struct ufs_csum_core { | ||
| 355 | __u64 cs_ndir; /* number of directories */ | ||
| 356 | __u64 cs_nbfree; /* number of free blocks */ | ||
| 357 | __u64 cs_nifree; /* number of free inodes */ | ||
| 358 | __u64 cs_nffree; /* number of free frags */ | ||
| 359 | __u64 cs_numclusters; /* number of free clusters */ | ||
| 360 | }; | ||
| 361 | |||
| 354 | /* | 362 | /* |
| 355 | * File system flags | 363 | * File system flags |
| 356 | */ | 364 | */ |
| @@ -715,7 +723,7 @@ struct ufs_cg_private_info { | |||
| 715 | 723 | ||
| 716 | struct ufs_sb_private_info { | 724 | struct ufs_sb_private_info { |
| 717 | struct ufs_buffer_head s_ubh; /* buffer containing super block */ | 725 | struct ufs_buffer_head s_ubh; /* buffer containing super block */ |
| 718 | struct ufs2_csum_total cs_total; | 726 | struct ufs_csum_core cs_total; |
| 719 | __u32 s_sblkno; /* offset of super-blocks in filesys */ | 727 | __u32 s_sblkno; /* offset of super-blocks in filesys */ |
| 720 | __u32 s_cblkno; /* offset of cg-block in filesys */ | 728 | __u32 s_cblkno; /* offset of cg-block in filesys */ |
| 721 | __u32 s_iblkno; /* offset of inode-blocks in filesys */ | 729 | __u32 s_iblkno; /* offset of inode-blocks in filesys */ |
diff --git a/include/linux/usb.h b/include/linux/usb.h index 190cc1b78fe2..5482bfb3303d 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
| @@ -764,9 +764,8 @@ struct usb_iso_packet_descriptor { | |||
| 764 | }; | 764 | }; |
| 765 | 765 | ||
| 766 | struct urb; | 766 | struct urb; |
| 767 | struct pt_regs; | ||
| 768 | 767 | ||
| 769 | typedef void (*usb_complete_t)(struct urb *, struct pt_regs *); | 768 | typedef void (*usb_complete_t)(struct urb *); |
| 770 | 769 | ||
| 771 | /** | 770 | /** |
| 772 | * struct urb - USB Request Block | 771 | * struct urb - USB Request Block |
diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h index 91c983eef899..91b3ea2bbb14 100644 --- a/include/linux/usb/serial.h +++ b/include/linux/usb/serial.h | |||
| @@ -226,10 +226,10 @@ struct usb_serial_driver { | |||
| 226 | int (*tiocmget) (struct usb_serial_port *port, struct file *file); | 226 | int (*tiocmget) (struct usb_serial_port *port, struct file *file); |
| 227 | int (*tiocmset) (struct usb_serial_port *port, struct file *file, unsigned int set, unsigned int clear); | 227 | int (*tiocmset) (struct usb_serial_port *port, struct file *file, unsigned int set, unsigned int clear); |
| 228 | 228 | ||
| 229 | void (*read_int_callback)(struct urb *urb, struct pt_regs *regs); | 229 | void (*read_int_callback)(struct urb *urb); |
| 230 | void (*write_int_callback)(struct urb *urb, struct pt_regs *regs); | 230 | void (*write_int_callback)(struct urb *urb); |
| 231 | void (*read_bulk_callback)(struct urb *urb, struct pt_regs *regs); | 231 | void (*read_bulk_callback)(struct urb *urb); |
| 232 | void (*write_bulk_callback)(struct urb *urb, struct pt_regs *regs); | 232 | void (*write_bulk_callback)(struct urb *urb); |
| 233 | }; | 233 | }; |
| 234 | #define to_usb_serial_driver(d) container_of(d, struct usb_serial_driver, driver) | 234 | #define to_usb_serial_driver(d) container_of(d, struct usb_serial_driver, driver) |
| 235 | 235 | ||
| @@ -262,8 +262,8 @@ extern int usb_serial_generic_write (struct usb_serial_port *port, const unsigne | |||
| 262 | extern void usb_serial_generic_close (struct usb_serial_port *port, struct file *filp); | 262 | extern void usb_serial_generic_close (struct usb_serial_port *port, struct file *filp); |
| 263 | extern int usb_serial_generic_write_room (struct usb_serial_port *port); | 263 | extern int usb_serial_generic_write_room (struct usb_serial_port *port); |
| 264 | extern int usb_serial_generic_chars_in_buffer (struct usb_serial_port *port); | 264 | extern int usb_serial_generic_chars_in_buffer (struct usb_serial_port *port); |
| 265 | extern void usb_serial_generic_read_bulk_callback (struct urb *urb, struct pt_regs *regs); | 265 | extern void usb_serial_generic_read_bulk_callback (struct urb *urb); |
| 266 | extern void usb_serial_generic_write_bulk_callback (struct urb *urb, struct pt_regs *regs); | 266 | extern void usb_serial_generic_write_bulk_callback (struct urb *urb); |
| 267 | extern void usb_serial_generic_shutdown (struct usb_serial *serial); | 267 | extern void usb_serial_generic_shutdown (struct usb_serial *serial); |
| 268 | extern int usb_serial_generic_register (int debug); | 268 | extern int usb_serial_generic_register (int debug); |
| 269 | extern void usb_serial_generic_deregister (void); | 269 | extern void usb_serial_generic_deregister (void); |
diff --git a/include/linux/utsname.h b/include/linux/utsname.h index 02e4b6972064..a4555fe3754c 100644 --- a/include/linux/utsname.h +++ b/include/linux/utsname.h | |||
| @@ -1,11 +1,6 @@ | |||
| 1 | #ifndef _LINUX_UTSNAME_H | 1 | #ifndef _LINUX_UTSNAME_H |
| 2 | #define _LINUX_UTSNAME_H | 2 | #define _LINUX_UTSNAME_H |
| 3 | 3 | ||
| 4 | #include <linux/sched.h> | ||
| 5 | #include <linux/kref.h> | ||
| 6 | #include <linux/nsproxy.h> | ||
| 7 | #include <asm/atomic.h> | ||
| 8 | |||
| 9 | #define __OLD_UTS_LEN 8 | 4 | #define __OLD_UTS_LEN 8 |
| 10 | 5 | ||
| 11 | struct oldold_utsname { | 6 | struct oldold_utsname { |
| @@ -35,6 +30,13 @@ struct new_utsname { | |||
| 35 | char domainname[65]; | 30 | char domainname[65]; |
| 36 | }; | 31 | }; |
| 37 | 32 | ||
| 33 | #ifdef __KERNEL__ | ||
| 34 | |||
| 35 | #include <linux/sched.h> | ||
| 36 | #include <linux/kref.h> | ||
| 37 | #include <linux/nsproxy.h> | ||
| 38 | #include <asm/atomic.h> | ||
| 39 | |||
| 38 | struct uts_namespace { | 40 | struct uts_namespace { |
| 39 | struct kref kref; | 41 | struct kref kref; |
| 40 | struct new_utsname name; | 42 | struct new_utsname name; |
| @@ -86,4 +88,7 @@ static inline struct new_utsname *init_utsname(void) | |||
| 86 | } | 88 | } |
| 87 | 89 | ||
| 88 | extern struct rw_semaphore uts_sem; | 90 | extern struct rw_semaphore uts_sem; |
| 89 | #endif | 91 | |
| 92 | #endif /* __KERNEL__ */ | ||
| 93 | |||
| 94 | #endif /* _LINUX_UTSNAME_H */ | ||
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index c5fdf6259548..df5c4654360d 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
| @@ -243,7 +243,7 @@ struct v4l2_pix_format | |||
| 243 | #define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y','U','1','2') /* 12 YUV 4:2:0 */ | 243 | #define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y','U','1','2') /* 12 YUV 4:2:0 */ |
| 244 | #define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y','Y','U','V') /* 16 YUV 4:2:2 */ | 244 | #define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y','Y','U','V') /* 16 YUV 4:2:2 */ |
| 245 | #define V4L2_PIX_FMT_HI240 v4l2_fourcc('H','I','2','4') /* 8 8-bit color */ | 245 | #define V4L2_PIX_FMT_HI240 v4l2_fourcc('H','I','2','4') /* 8 8-bit color */ |
| 246 | #define V4L2_PIX_FMT_HM12 v4l2_fourcc('H','M','1','2') /* 8 YUV 4:1:1 16x16 macroblocks */ | 246 | #define V4L2_PIX_FMT_HM12 v4l2_fourcc('H','M','1','2') /* 8 YUV 4:2:0 16x16 macroblocks */ |
| 247 | 247 | ||
| 248 | /* see http://www.siliconimaging.com/RGB%20Bayer.htm */ | 248 | /* see http://www.siliconimaging.com/RGB%20Bayer.htm */ |
| 249 | #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B','A','8','1') /* 8 BGBG.. GRGR.. */ | 249 | #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B','A','8','1') /* 8 BGBG.. GRGR.. */ |
diff --git a/include/linux/wavefront.h b/include/linux/wavefront.h deleted file mode 100644 index 51ab3c933acd..000000000000 --- a/include/linux/wavefront.h +++ /dev/null | |||
| @@ -1,675 +0,0 @@ | |||
| 1 | #ifndef __wavefront_h__ | ||
| 2 | #define __wavefront_h__ | ||
| 3 | |||
| 4 | /* WaveFront header file. | ||
| 5 | * | ||
| 6 | * Copyright (C) by Paul Barton-Davis 1998 | ||
| 7 | * | ||
| 8 | * This program is distributed under the GNU GENERAL PUBLIC LICENSE (GPL) | ||
| 9 | * Version 2 (June 1991). See the "COPYING" file distributed with this software | ||
| 10 | * for more info. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #if (!defined(__GNUC__) && !defined(__GNUG__)) | ||
| 14 | |||
| 15 | You will not be able to compile this file correctly without gcc, because | ||
| 16 | it is necessary to pack the "wavefront_alias" structure to a size | ||
| 17 | of 22 bytes, corresponding to 16-bit alignment (as would have been | ||
| 18 | the case on the original platform, MS-DOS). If this is not done, | ||
| 19 | then WavePatch-format files cannot be read/written correctly. | ||
| 20 | The method used to do this here ("__attribute__((packed)") is | ||
| 21 | completely compiler dependent. | ||
| 22 | |||
| 23 | All other wavefront_* types end up aligned to 32 bit values and | ||
| 24 | still have the same (correct) size. | ||
| 25 | |||
| 26 | #else | ||
| 27 | |||
| 28 | /* However, note that as of G++ 2.7.3.2, g++ was unable to | ||
| 29 | correctly parse *type* __attribute__ tags. It will do the | ||
| 30 | right thing if we use the "packed" attribute on each struct | ||
| 31 | member, which has the same semantics anyway. | ||
| 32 | */ | ||
| 33 | |||
| 34 | #endif /* __GNUC__ */ | ||
| 35 | |||
| 36 | /***************************** WARNING ******************************** | ||
| 37 | PLEASE DO NOT MODIFY THIS FILE IN ANY WAY THAT AFFECTS ITS ABILITY TO | ||
| 38 | BE USED WITH EITHER C *OR* C++. | ||
| 39 | **********************************************************************/ | ||
| 40 | |||
| 41 | #ifndef NUM_MIDIKEYS | ||
| 42 | #define NUM_MIDIKEYS 128 | ||
| 43 | #endif /* NUM_MIDIKEYS */ | ||
| 44 | |||
| 45 | #ifndef NUM_MIDICHANNELS | ||
| 46 | #define NUM_MIDICHANNELS 16 | ||
| 47 | #endif /* NUM_MIDICHANNELS */ | ||
| 48 | |||
| 49 | /* These are very useful/important. the original wavefront interface | ||
| 50 | was developed on a 16 bit system, where sizeof(int) = 2 | ||
| 51 | bytes. Defining things like this makes the code much more portable, and | ||
| 52 | easier to understand without having to toggle back and forth | ||
| 53 | between a 16-bit view of the world and a 32-bit one. | ||
| 54 | */ | ||
| 55 | |||
| 56 | typedef short INT16; | ||
| 57 | typedef unsigned short UINT16; | ||
| 58 | typedef int INT32; | ||
| 59 | typedef unsigned int UINT32; | ||
| 60 | typedef char CHAR8; | ||
| 61 | typedef unsigned char UCHAR8; | ||
| 62 | |||
| 63 | /* Pseudo-commands not part of the WaveFront command set. | ||
| 64 | These are used for various driver controls and direct | ||
| 65 | hardware control. | ||
| 66 | */ | ||
| 67 | |||
| 68 | #define WFC_DEBUG_DRIVER 0 | ||
| 69 | #define WFC_FX_IOCTL 1 | ||
| 70 | #define WFC_PATCH_STATUS 2 | ||
| 71 | #define WFC_PROGRAM_STATUS 3 | ||
| 72 | #define WFC_SAMPLE_STATUS 4 | ||
| 73 | #define WFC_DISABLE_INTERRUPTS 5 | ||
| 74 | #define WFC_ENABLE_INTERRUPTS 6 | ||
| 75 | #define WFC_INTERRUPT_STATUS 7 | ||
| 76 | #define WFC_ROMSAMPLES_RDONLY 8 | ||
| 77 | #define WFC_IDENTIFY_SLOT_TYPE 9 | ||
| 78 | |||
| 79 | /* Wavefront synth commands | ||
| 80 | */ | ||
| 81 | |||
| 82 | #define WFC_DOWNLOAD_SAMPLE 0x80 | ||
| 83 | #define WFC_DOWNLOAD_BLOCK 0x81 | ||
| 84 | #define WFC_DOWNLOAD_MULTISAMPLE 0x82 | ||
| 85 | #define WFC_DOWNLOAD_SAMPLE_ALIAS 0x83 | ||
| 86 | #define WFC_DELETE_SAMPLE 0x84 | ||
| 87 | #define WFC_REPORT_FREE_MEMORY 0x85 | ||
| 88 | #define WFC_DOWNLOAD_PATCH 0x86 | ||
| 89 | #define WFC_DOWNLOAD_PROGRAM 0x87 | ||
| 90 | #define WFC_SET_SYNTHVOL 0x89 | ||
| 91 | #define WFC_SET_NVOICES 0x8B | ||
| 92 | #define WFC_DOWNLOAD_DRUM 0x90 | ||
| 93 | #define WFC_GET_SYNTHVOL 0x92 | ||
| 94 | #define WFC_GET_NVOICES 0x94 | ||
| 95 | #define WFC_DISABLE_CHANNEL 0x9A | ||
| 96 | #define WFC_ENABLE_CHANNEL 0x9B | ||
| 97 | #define WFC_MISYNTH_OFF 0x9D | ||
| 98 | #define WFC_MISYNTH_ON 0x9E | ||
| 99 | #define WFC_FIRMWARE_VERSION 0x9F | ||
| 100 | #define WFC_GET_NSAMPLES 0xA0 | ||
| 101 | #define WFC_DISABLE_DRUM_PROGRAM 0xA2 | ||
| 102 | #define WFC_UPLOAD_PATCH 0xA3 | ||
| 103 | #define WFC_UPLOAD_PROGRAM 0xA4 | ||
| 104 | #define WFC_SET_TUNING 0xA6 | ||
| 105 | #define WFC_GET_TUNING 0xA7 | ||
| 106 | #define WFC_VMIDI_ON 0xA8 | ||
| 107 | #define WFC_VMIDI_OFF 0xA9 | ||
| 108 | #define WFC_MIDI_STATUS 0xAA | ||
| 109 | #define WFC_GET_CHANNEL_STATUS 0xAB | ||
| 110 | #define WFC_DOWNLOAD_SAMPLE_HEADER 0xAC | ||
| 111 | #define WFC_UPLOAD_SAMPLE_HEADER 0xAD | ||
| 112 | #define WFC_UPLOAD_MULTISAMPLE 0xAE | ||
| 113 | #define WFC_UPLOAD_SAMPLE_ALIAS 0xAF | ||
| 114 | #define WFC_IDENTIFY_SAMPLE_TYPE 0xB0 | ||
| 115 | #define WFC_DOWNLOAD_EDRUM_PROGRAM 0xB1 | ||
| 116 | #define WFC_UPLOAD_EDRUM_PROGRAM 0xB2 | ||
| 117 | #define WFC_SET_EDRUM_CHANNEL 0xB3 | ||
| 118 | #define WFC_INSTOUT_LEVELS 0xB4 | ||
| 119 | #define WFC_PEAKOUT_LEVELS 0xB5 | ||
| 120 | #define WFC_REPORT_CHANNEL_PROGRAMS 0xB6 | ||
| 121 | #define WFC_HARDWARE_VERSION 0xCF | ||
| 122 | #define WFC_UPLOAD_SAMPLE_PARAMS 0xD7 | ||
| 123 | #define WFC_DOWNLOAD_OS 0xF1 | ||
| 124 | #define WFC_NOOP 0xFF | ||
| 125 | |||
| 126 | #define WF_MAX_SAMPLE 512 | ||
| 127 | #define WF_MAX_PATCH 256 | ||
| 128 | #define WF_MAX_PROGRAM 128 | ||
| 129 | |||
| 130 | #define WF_SECTION_MAX 44 /* longest OS section length */ | ||
| 131 | |||
| 132 | /* # of bytes we send to the board when sending it various kinds of | ||
| 133 | substantive data, such as samples, patches and programs. | ||
| 134 | */ | ||
| 135 | |||
| 136 | #define WF_PROGRAM_BYTES 32 | ||
| 137 | #define WF_PATCH_BYTES 132 | ||
| 138 | #define WF_SAMPLE_BYTES 27 | ||
| 139 | #define WF_SAMPLE_HDR_BYTES 25 | ||
| 140 | #define WF_ALIAS_BYTES 25 | ||
| 141 | #define WF_DRUM_BYTES 9 | ||
| 142 | #define WF_MSAMPLE_BYTES 259 /* (MIDI_KEYS * 2) + 3 */ | ||
| 143 | |||
| 144 | #define WF_ACK 0x80 | ||
| 145 | #define WF_DMA_ACK 0x81 | ||
| 146 | |||
| 147 | /* OR-values for MIDI status bits */ | ||
| 148 | |||
| 149 | #define WF_MIDI_VIRTUAL_ENABLED 0x1 | ||
| 150 | #define WF_MIDI_VIRTUAL_IS_EXTERNAL 0x2 | ||
| 151 | #define WF_MIDI_IN_TO_SYNTH_DISABLED 0x4 | ||
| 152 | |||
| 153 | /* slot indexes for struct address_info: makes code a little more mnemonic */ | ||
| 154 | |||
| 155 | #define WF_SYNTH_SLOT 0 | ||
| 156 | #define WF_INTERNAL_MIDI_SLOT 1 | ||
| 157 | #define WF_EXTERNAL_MIDI_SLOT 2 | ||
| 158 | |||
| 159 | /* Magic MIDI bytes used to switch I/O streams on the ICS2115 MPU401 | ||
| 160 | emulation. Note these NEVER show up in output from the device and | ||
| 161 | should NEVER be used in input unless Virtual MIDI mode has been | ||
| 162 | disabled. If they do show up as input, the results are unpredictable. | ||
| 163 | */ | ||
| 164 | |||
| 165 | #define WF_EXTERNAL_SWITCH 0xFD | ||
| 166 | #define WF_INTERNAL_SWITCH 0xF9 | ||
| 167 | |||
| 168 | /* Debugging flags */ | ||
| 169 | |||
| 170 | #define WF_DEBUG_CMD 0x1 | ||
| 171 | #define WF_DEBUG_DATA 0x2 | ||
| 172 | #define WF_DEBUG_LOAD_PATCH 0x4 | ||
| 173 | #define WF_DEBUG_IO 0x8 | ||
| 174 | |||
| 175 | /* WavePatch file format stuff */ | ||
| 176 | |||
| 177 | #define WF_WAVEPATCH_VERSION 120; /* Current version number (1.2) */ | ||
| 178 | #define WF_MAX_COMMENT 64 /* Comment length */ | ||
| 179 | #define WF_NUM_LAYERS 4 | ||
| 180 | #define WF_NAME_LENGTH 32 | ||
| 181 | #define WF_SOURCE_LENGTH 260 | ||
| 182 | |||
| 183 | #define BankFileID "Bank" | ||
| 184 | #define DrumkitFileID "DrumKit" | ||
| 185 | #define ProgramFileID "Program" | ||
| 186 | |||
| 187 | struct wf_envelope | ||
| 188 | { | ||
| 189 | UCHAR8 attack_time:7; | ||
| 190 | UCHAR8 Unused1:1; | ||
| 191 | |||
| 192 | UCHAR8 decay1_time:7; | ||
| 193 | UCHAR8 Unused2:1; | ||
| 194 | |||
| 195 | UCHAR8 decay2_time:7; | ||
| 196 | UCHAR8 Unused3:1; | ||
| 197 | |||
| 198 | UCHAR8 sustain_time:7; | ||
| 199 | UCHAR8 Unused4:1; | ||
| 200 | |||
| 201 | UCHAR8 release_time:7; | ||
| 202 | UCHAR8 Unused5:1; | ||
| 203 | |||
| 204 | UCHAR8 release2_time:7; | ||
| 205 | UCHAR8 Unused6:1; | ||
| 206 | |||
| 207 | CHAR8 attack_level; | ||
| 208 | CHAR8 decay1_level; | ||
| 209 | CHAR8 decay2_level; | ||
| 210 | CHAR8 sustain_level; | ||
| 211 | CHAR8 release_level; | ||
| 212 | |||
| 213 | UCHAR8 attack_velocity:7; | ||
| 214 | UCHAR8 Unused7:1; | ||
| 215 | |||
| 216 | UCHAR8 volume_velocity:7; | ||
| 217 | UCHAR8 Unused8:1; | ||
| 218 | |||
| 219 | UCHAR8 keyboard_scaling:7; | ||
| 220 | UCHAR8 Unused9:1; | ||
| 221 | }; | ||
| 222 | typedef struct wf_envelope wavefront_envelope; | ||
| 223 | |||
| 224 | struct wf_lfo | ||
| 225 | { | ||
| 226 | UCHAR8 sample_number; | ||
| 227 | |||
| 228 | UCHAR8 frequency:7; | ||
| 229 | UCHAR8 Unused1:1; | ||
| 230 | |||
| 231 | UCHAR8 am_src:4; | ||
| 232 | UCHAR8 fm_src:4; | ||
| 233 | |||
| 234 | CHAR8 fm_amount; | ||
| 235 | CHAR8 am_amount; | ||
| 236 | CHAR8 start_level; | ||
| 237 | CHAR8 end_level; | ||
| 238 | |||
| 239 | UCHAR8 ramp_delay:7; | ||
| 240 | UCHAR8 wave_restart:1; /* for LFO2 only */ | ||
| 241 | |||
| 242 | UCHAR8 ramp_time:7; | ||
| 243 | UCHAR8 Unused2:1; | ||
| 244 | }; | ||
| 245 | typedef struct wf_lfo wavefront_lfo; | ||
| 246 | |||
| 247 | struct wf_patch | ||
| 248 | { | ||
| 249 | INT16 frequency_bias; /* ** THIS IS IN MOTOROLA FORMAT!! ** */ | ||
| 250 | |||
| 251 | UCHAR8 amplitude_bias:7; | ||
| 252 | UCHAR8 Unused1:1; | ||
| 253 | |||
| 254 | UCHAR8 portamento:7; | ||
| 255 | UCHAR8 Unused2:1; | ||
| 256 | |||
| 257 | UCHAR8 sample_number; | ||
| 258 | |||
| 259 | UCHAR8 pitch_bend:4; | ||
| 260 | UCHAR8 sample_msb:1; | ||
| 261 | UCHAR8 Unused3:3; | ||
| 262 | |||
| 263 | UCHAR8 mono:1; | ||
| 264 | UCHAR8 retrigger:1; | ||
| 265 | UCHAR8 nohold:1; | ||
| 266 | UCHAR8 restart:1; | ||
| 267 | UCHAR8 filterconfig:2; /* SDK says "not used" */ | ||
| 268 | UCHAR8 reuse:1; | ||
| 269 | UCHAR8 reset_lfo:1; | ||
| 270 | |||
| 271 | UCHAR8 fm_src2:4; | ||
| 272 | UCHAR8 fm_src1:4; | ||
| 273 | |||
| 274 | CHAR8 fm_amount1; | ||
| 275 | CHAR8 fm_amount2; | ||
| 276 | |||
| 277 | UCHAR8 am_src:4; | ||
| 278 | UCHAR8 Unused4:4; | ||
| 279 | |||
| 280 | CHAR8 am_amount; | ||
| 281 | |||
| 282 | UCHAR8 fc1_mode:4; | ||
| 283 | UCHAR8 fc2_mode:4; | ||
| 284 | |||
| 285 | CHAR8 fc1_mod_amount; | ||
| 286 | CHAR8 fc1_keyboard_scaling; | ||
| 287 | CHAR8 fc1_bias; | ||
| 288 | CHAR8 fc2_mod_amount; | ||
| 289 | CHAR8 fc2_keyboard_scaling; | ||
| 290 | CHAR8 fc2_bias; | ||
| 291 | |||
| 292 | UCHAR8 randomizer:7; | ||
| 293 | UCHAR8 Unused5:1; | ||
| 294 | |||
| 295 | struct wf_envelope envelope1; | ||
| 296 | struct wf_envelope envelope2; | ||
| 297 | struct wf_lfo lfo1; | ||
| 298 | struct wf_lfo lfo2; | ||
| 299 | }; | ||
| 300 | typedef struct wf_patch wavefront_patch; | ||
| 301 | |||
| 302 | struct wf_layer | ||
| 303 | { | ||
| 304 | UCHAR8 patch_number; | ||
| 305 | |||
| 306 | UCHAR8 mix_level:7; | ||
| 307 | UCHAR8 mute:1; | ||
| 308 | |||
| 309 | UCHAR8 split_point:7; | ||
| 310 | UCHAR8 play_below:1; | ||
| 311 | |||
| 312 | UCHAR8 pan_mod_src:2; | ||
| 313 | UCHAR8 pan_or_mod:1; | ||
| 314 | UCHAR8 pan:4; | ||
| 315 | UCHAR8 split_type:1; | ||
| 316 | }; | ||
| 317 | typedef struct wf_layer wavefront_layer; | ||
| 318 | |||
| 319 | struct wf_program | ||
| 320 | { | ||
| 321 | struct wf_layer layer[WF_NUM_LAYERS]; | ||
| 322 | }; | ||
| 323 | typedef struct wf_program wavefront_program; | ||
| 324 | |||
| 325 | struct wf_sample_offset | ||
| 326 | { | ||
| 327 | INT32 Fraction:4; | ||
| 328 | INT32 Integer:20; | ||
| 329 | INT32 Unused:8; | ||
| 330 | }; | ||
| 331 | typedef struct wf_sample_offset wavefront_sample_offset; | ||
| 332 | |||
| 333 | /* Sample slot types */ | ||
| 334 | |||
| 335 | #define WF_ST_SAMPLE 0 | ||
| 336 | #define WF_ST_MULTISAMPLE 1 | ||
| 337 | #define WF_ST_ALIAS 2 | ||
| 338 | #define WF_ST_EMPTY 3 | ||
| 339 | |||
| 340 | /* pseudo's */ | ||
| 341 | |||
| 342 | #define WF_ST_DRUM 4 | ||
| 343 | #define WF_ST_PROGRAM 5 | ||
| 344 | #define WF_ST_PATCH 6 | ||
| 345 | #define WF_ST_SAMPLEHDR 7 | ||
| 346 | |||
| 347 | #define WF_ST_MASK 0xf | ||
| 348 | |||
| 349 | /* Flags for slot status. These occupy the upper bits of the same byte | ||
| 350 | as a sample type. | ||
| 351 | */ | ||
| 352 | |||
| 353 | #define WF_SLOT_USED 0x80 /* XXX don't rely on this being accurate */ | ||
| 354 | #define WF_SLOT_FILLED 0x40 | ||
| 355 | #define WF_SLOT_ROM 0x20 | ||
| 356 | |||
| 357 | #define WF_SLOT_MASK 0xf0 | ||
| 358 | |||
| 359 | /* channel constants */ | ||
| 360 | |||
| 361 | #define WF_CH_MONO 0 | ||
| 362 | #define WF_CH_LEFT 1 | ||
| 363 | #define WF_CH_RIGHT 2 | ||
| 364 | |||
| 365 | /* Sample formats */ | ||
| 366 | |||
| 367 | #define LINEAR_16BIT 0 | ||
| 368 | #define WHITE_NOISE 1 | ||
| 369 | #define LINEAR_8BIT 2 | ||
| 370 | #define MULAW_8BIT 3 | ||
| 371 | |||
| 372 | #define WF_SAMPLE_IS_8BIT(smpl) ((smpl)->SampleResolution&2) | ||
| 373 | |||
| 374 | |||
| 375 | /* | ||
| 376 | |||
| 377 | Because most/all of the sample data we pass in via pointers has | ||
| 378 | never been copied (just mmap-ed into user space straight from the | ||
| 379 | disk), it would be nice to allow handling of multi-channel sample | ||
| 380 | data without forcing user-level extraction of the relevant bytes. | ||
| 381 | |||
| 382 | So, we need a way of specifying which channel to use (the WaveFront | ||
| 383 | only handles mono samples in a given slot), and the only way to do | ||
| 384 | this without using some struct other than wavefront_sample as the | ||
| 385 | interface is the awful hack of using the unused bits in a | ||
| 386 | wavefront_sample: | ||
| 387 | |||
| 388 | Val Meaning | ||
| 389 | --- ------- | ||
| 390 | 0 no channel selection (use channel 1, sample is MONO) | ||
| 391 | 1 use first channel, and skip one | ||
| 392 | 2 use second channel, and skip one | ||
| 393 | 3 use third channel, and skip two | ||
| 394 | 4 use fourth channel, skip three | ||
| 395 | 5 use fifth channel, skip four | ||
| 396 | 6 use six channel, skip five | ||
| 397 | |||
| 398 | |||
| 399 | This can handle up to 4 channels, and anyone downloading >4 channels | ||
| 400 | of sample data just to select one of them needs to find some tools | ||
| 401 | like sox ... | ||
| 402 | |||
| 403 | NOTE: values 0, 1 and 2 correspond to WF_CH_* above. This is | ||
| 404 | important. | ||
| 405 | |||
| 406 | */ | ||
| 407 | |||
| 408 | #define WF_SET_CHANNEL(samp,chn) \ | ||
| 409 | (samp)->Unused1 = chn & 0x1; \ | ||
| 410 | (samp)->Unused2 = chn & 0x2; \ | ||
| 411 | (samp)->Unused3 = chn & 0x4 | ||
| 412 | |||
| 413 | #define WF_GET_CHANNEL(samp) \ | ||
| 414 | (((samp)->Unused3 << 2)|((samp)->Unused2<<1)|(samp)->Unused1) | ||
| 415 | |||
| 416 | typedef struct wf_sample { | ||
| 417 | struct wf_sample_offset sampleStartOffset; | ||
| 418 | struct wf_sample_offset loopStartOffset; | ||
| 419 | struct wf_sample_offset loopEndOffset; | ||
| 420 | struct wf_sample_offset sampleEndOffset; | ||
| 421 | INT16 FrequencyBias; | ||
| 422 | UCHAR8 SampleResolution:2; /* sample_format */ | ||
| 423 | UCHAR8 Unused1:1; | ||
| 424 | UCHAR8 Loop:1; | ||
| 425 | UCHAR8 Bidirectional:1; | ||
| 426 | UCHAR8 Unused2:1; | ||
| 427 | UCHAR8 Reverse:1; | ||
| 428 | UCHAR8 Unused3:1; | ||
| 429 | } wavefront_sample; | ||
| 430 | |||
| 431 | typedef struct wf_multisample { | ||
| 432 | INT16 NumberOfSamples; /* log2 of the number of samples */ | ||
| 433 | INT16 SampleNumber[NUM_MIDIKEYS]; | ||
| 434 | } wavefront_multisample; | ||
| 435 | |||
| 436 | typedef struct wf_alias { | ||
| 437 | INT16 OriginalSample; | ||
| 438 | |||
| 439 | struct wf_sample_offset sampleStartOffset; | ||
| 440 | struct wf_sample_offset loopStartOffset; | ||
| 441 | struct wf_sample_offset sampleEndOffset; | ||
| 442 | struct wf_sample_offset loopEndOffset; | ||
| 443 | |||
| 444 | INT16 FrequencyBias; | ||
| 445 | |||
| 446 | UCHAR8 SampleResolution:2; | ||
| 447 | UCHAR8 Unused1:1; | ||
| 448 | UCHAR8 Loop:1; | ||
| 449 | UCHAR8 Bidirectional:1; | ||
| 450 | UCHAR8 Unused2:1; | ||
| 451 | UCHAR8 Reverse:1; | ||
| 452 | UCHAR8 Unused3:1; | ||
| 453 | |||
| 454 | /* This structure is meant to be padded only to 16 bits on their | ||
| 455 | original. Of course, whoever wrote their documentation didn't | ||
| 456 | realize that sizeof(struct) can be >= | ||
| 457 | sum(sizeof(struct-fields)) and so thought that giving a C level | ||
| 458 | description of the structs used in WavePatch files was | ||
| 459 | sufficient. I suppose it was, as long as you remember the | ||
| 460 | standard 16->32 bit issues. | ||
| 461 | */ | ||
| 462 | |||
| 463 | UCHAR8 sixteen_bit_padding; | ||
| 464 | } __attribute__((packed)) wavefront_alias; | ||
| 465 | |||
| 466 | typedef struct wf_drum { | ||
| 467 | UCHAR8 PatchNumber; | ||
| 468 | UCHAR8 MixLevel:7; | ||
| 469 | UCHAR8 Unmute:1; | ||
| 470 | UCHAR8 Group:4; | ||
| 471 | UCHAR8 Unused1:4; | ||
| 472 | UCHAR8 PanModSource:2; | ||
| 473 | UCHAR8 PanModulated:1; | ||
| 474 | UCHAR8 PanAmount:4; | ||
| 475 | UCHAR8 Unused2:1; | ||
| 476 | } wavefront_drum; | ||
| 477 | |||
| 478 | typedef struct wf_drumkit { | ||
| 479 | struct wf_drum drum[NUM_MIDIKEYS]; | ||
| 480 | } wavefront_drumkit; | ||
| 481 | |||
| 482 | typedef struct wf_channel_programs { | ||
| 483 | UCHAR8 Program[NUM_MIDICHANNELS]; | ||
| 484 | } wavefront_channel_programs; | ||
| 485 | |||
| 486 | /* How to get MIDI channel status from the data returned by | ||
| 487 | a WFC_GET_CHANNEL_STATUS command (a struct wf_channel_programs) | ||
| 488 | */ | ||
| 489 | |||
| 490 | #define WF_CHANNEL_STATUS(ch,wcp) (wcp)[(ch/7)] & (1<<((ch)%7)) | ||
| 491 | |||
| 492 | typedef union wf_any { | ||
| 493 | wavefront_sample s; | ||
| 494 | wavefront_multisample ms; | ||
| 495 | wavefront_alias a; | ||
| 496 | wavefront_program pr; | ||
| 497 | wavefront_patch p; | ||
| 498 | wavefront_drum d; | ||
| 499 | } wavefront_any; | ||
| 500 | |||
| 501 | /* Hannu Solvainen hoped that his "patch_info" struct in soundcard.h | ||
| 502 | might work for other wave-table based patch loading situations. | ||
| 503 | Alas, his fears were correct. The WaveFront doesn't even come with | ||
| 504 | just "patches", but several different kind of structures that | ||
| 505 | control the sound generation process. | ||
| 506 | */ | ||
| 507 | |||
| 508 | typedef struct wf_patch_info { | ||
| 509 | |||
| 510 | /* the first two fields are used by the OSS "patch loading" interface | ||
| 511 | only, and are unused by the current user-level library. | ||
| 512 | */ | ||
| 513 | |||
| 514 | INT16 key; /* Use WAVEFRONT_PATCH here */ | ||
| 515 | UINT16 devno; /* fill in when sending */ | ||
| 516 | UCHAR8 subkey; /* WF_ST_{SAMPLE,ALIAS,etc.} */ | ||
| 517 | |||
| 518 | #define WAVEFRONT_FIND_FREE_SAMPLE_SLOT 999 | ||
| 519 | |||
| 520 | UINT16 number; /* patch/sample/prog number */ | ||
| 521 | |||
| 522 | UINT32 size; /* size of any data included in | ||
| 523 | one of the fields in `hdrptr', or | ||
| 524 | as `dataptr'. | ||
| 525 | |||
| 526 | NOTE: for actual samples, this is | ||
| 527 | the size of the *SELECTED CHANNEL* | ||
| 528 | even if more data is actually available. | ||
| 529 | |||
| 530 | So, a stereo sample (2 channels) of | ||
| 531 | 6000 bytes total has `size' = 3000. | ||
| 532 | |||
| 533 | See the macros and comments for | ||
| 534 | WF_{GET,SET}_CHANNEL above. | ||
| 535 | |||
| 536 | */ | ||
| 537 | wavefront_any __user *hdrptr; /* user-space ptr to hdr bytes */ | ||
| 538 | UINT16 __user *dataptr; /* actual sample data */ | ||
| 539 | |||
| 540 | wavefront_any hdr; /* kernel-space copy of hdr bytes */ | ||
| 541 | } wavefront_patch_info; | ||
| 542 | |||
| 543 | /* The maximum number of bytes we will ever move to or from user space | ||
| 544 | in response to a WFC_* command. This obviously doesn't cover | ||
| 545 | actual sample data. | ||
| 546 | */ | ||
| 547 | |||
| 548 | #define WF_MAX_READ sizeof(wavefront_multisample) | ||
| 549 | #define WF_MAX_WRITE sizeof(wavefront_multisample) | ||
| 550 | |||
| 551 | /* | ||
| 552 | This allows us to execute any WF command except the download/upload | ||
| 553 | ones, which are handled differently due to copyin/copyout issues as | ||
| 554 | well as data-nybbling to/from the card. | ||
| 555 | */ | ||
| 556 | |||
| 557 | typedef struct wavefront_control { | ||
| 558 | int cmd; /* WFC_* */ | ||
| 559 | char status; /* return status to user-space */ | ||
| 560 | unsigned char rbuf[WF_MAX_READ]; /* bytes read from card */ | ||
| 561 | unsigned char wbuf[WF_MAX_WRITE]; /* bytes written to card */ | ||
| 562 | } wavefront_control; | ||
| 563 | |||
| 564 | #define WFCTL_WFCMD 0x1 | ||
| 565 | #define WFCTL_LOAD_SPP 0x2 | ||
| 566 | |||
| 567 | /* Modulator table */ | ||
| 568 | |||
| 569 | #define WF_MOD_LFO1 0 | ||
| 570 | #define WF_MOD_LFO2 1 | ||
| 571 | #define WF_MOD_ENV1 2 | ||
| 572 | #define WF_MOD_ENV2 3 | ||
| 573 | #define WF_MOD_KEYBOARD 4 | ||
| 574 | #define WF_MOD_LOGKEY 5 | ||
| 575 | #define WF_MOD_VELOCITY 6 | ||
| 576 | #define WF_MOD_LOGVEL 7 | ||
| 577 | #define WF_MOD_RANDOM 8 | ||
| 578 | #define WF_MOD_PRESSURE 9 | ||
| 579 | #define WF_MOD_MOD_WHEEL 10 | ||
| 580 | #define WF_MOD_1 WF_MOD_MOD_WHEEL | ||
| 581 | #define WF_MOD_BREATH 11 | ||
| 582 | #define WF_MOD_2 WF_MOD_BREATH | ||
| 583 | #define WF_MOD_FOOT 12 | ||
| 584 | #define WF_MOD_4 WF_MOD_FOOT | ||
| 585 | #define WF_MOD_VOLUME 13 | ||
| 586 | #define WF_MOD_7 WF_MOD_VOLUME | ||
| 587 | #define WF_MOD_PAN 14 | ||
| 588 | #define WF_MOD_10 WF_MOD_PAN | ||
| 589 | #define WF_MOD_EXPR 15 | ||
| 590 | #define WF_MOD_11 WF_MOD_EXPR | ||
| 591 | |||
| 592 | /* FX-related material */ | ||
| 593 | |||
| 594 | typedef struct wf_fx_info { | ||
| 595 | int request; /* see list below */ | ||
| 596 | int data[4]; /* we don't need much */ | ||
| 597 | } wavefront_fx_info; | ||
| 598 | |||
| 599 | /* support for each of these will be forthcoming once I or someone | ||
| 600 | else has figured out which of the addresses on page 6 and page 7 of | ||
| 601 | the YSS225 control each parameter. Incidentally, these come from | ||
| 602 | the Windows driver interface, but again, Turtle Beach didn't | ||
| 603 | document the API to use them. | ||
| 604 | */ | ||
| 605 | |||
| 606 | #define WFFX_SETOUTGAIN 0 | ||
| 607 | #define WFFX_SETSTEREOOUTGAIN 1 | ||
| 608 | #define WFFX_SETREVERBIN1GAIN 2 | ||
| 609 | #define WFFX_SETREVERBIN2GAIN 3 | ||
| 610 | #define WFFX_SETREVERBIN3GAIN 4 | ||
| 611 | #define WFFX_SETCHORUSINPORT 5 | ||
| 612 | #define WFFX_SETREVERBIN1PORT 6 | ||
| 613 | #define WFFX_SETREVERBIN2PORT 7 | ||
| 614 | #define WFFX_SETREVERBIN3PORT 8 | ||
| 615 | #define WFFX_SETEFFECTPORT 9 | ||
| 616 | #define WFFX_SETAUXPORT 10 | ||
| 617 | #define WFFX_SETREVERBTYPE 11 | ||
| 618 | #define WFFX_SETREVERBDELAY 12 | ||
| 619 | #define WFFX_SETCHORUSLFO 13 | ||
| 620 | #define WFFX_SETCHORUSPMD 14 | ||
| 621 | #define WFFX_SETCHORUSAMD 15 | ||
| 622 | #define WFFX_SETEFFECT 16 | ||
| 623 | #define WFFX_SETBASEALL 17 | ||
| 624 | #define WFFX_SETREVERBALL 18 | ||
| 625 | #define WFFX_SETCHORUSALL 20 | ||
| 626 | #define WFFX_SETREVERBDEF 22 | ||
| 627 | #define WFFX_SETCHORUSDEF 23 | ||
| 628 | #define WFFX_DELAYSETINGAIN 24 | ||
| 629 | #define WFFX_DELAYSETFBGAIN 25 | ||
| 630 | #define WFFX_DELAYSETFBLPF 26 | ||
| 631 | #define WFFX_DELAYSETGAIN 27 | ||
| 632 | #define WFFX_DELAYSETTIME 28 | ||
| 633 | #define WFFX_DELAYSETFBTIME 29 | ||
| 634 | #define WFFX_DELAYSETALL 30 | ||
| 635 | #define WFFX_DELAYSETDEF 32 | ||
| 636 | #define WFFX_SDELAYSETINGAIN 33 | ||
| 637 | #define WFFX_SDELAYSETFBGAIN 34 | ||
| 638 | #define WFFX_SDELAYSETFBLPF 35 | ||
| 639 | #define WFFX_SDELAYSETGAIN 36 | ||
| 640 | #define WFFX_SDELAYSETTIME 37 | ||
| 641 | #define WFFX_SDELAYSETFBTIME 38 | ||
| 642 | #define WFFX_SDELAYSETALL 39 | ||
| 643 | #define WFFX_SDELAYSETDEF 41 | ||
| 644 | #define WFFX_DEQSETINGAIN 42 | ||
| 645 | #define WFFX_DEQSETFILTER 43 | ||
| 646 | #define WFFX_DEQSETALL 44 | ||
| 647 | #define WFFX_DEQSETDEF 46 | ||
| 648 | #define WFFX_MUTE 47 | ||
| 649 | #define WFFX_FLANGESETBALANCE 48 | ||
| 650 | #define WFFX_FLANGESETDELAY 49 | ||
| 651 | #define WFFX_FLANGESETDWFFX_TH 50 | ||
| 652 | #define WFFX_FLANGESETFBGAIN 51 | ||
| 653 | #define WFFX_FLANGESETINGAIN 52 | ||
| 654 | #define WFFX_FLANGESETLFO 53 | ||
| 655 | #define WFFX_FLANGESETALL 54 | ||
| 656 | #define WFFX_FLANGESETDEF 56 | ||
| 657 | #define WFFX_PITCHSETSHIFT 57 | ||
| 658 | #define WFFX_PITCHSETBALANCE 58 | ||
| 659 | #define WFFX_PITCHSETALL 59 | ||
| 660 | #define WFFX_PITCHSETDEF 61 | ||
| 661 | #define WFFX_SRSSETINGAIN 62 | ||
| 662 | #define WFFX_SRSSETSPACE 63 | ||
| 663 | #define WFFX_SRSSETCENTER 64 | ||
| 664 | #define WFFX_SRSSETGAIN 65 | ||
| 665 | #define WFFX_SRSSETMODE 66 | ||
| 666 | #define WFFX_SRSSETDEF 68 | ||
| 667 | |||
| 668 | /* Allow direct user-space control over FX memory/coefficient data. | ||
| 669 | In theory this could be used to download the FX microprogram, | ||
| 670 | but it would be a little slower, and involve some weird code. | ||
| 671 | */ | ||
| 672 | |||
| 673 | #define WFFX_MEMSET 69 | ||
| 674 | |||
| 675 | #endif /* __wavefront_h__ */ | ||
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index a341c8032866..fc35e6bdfb93 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
| @@ -85,7 +85,6 @@ int wakeup_pdflush(long nr_pages); | |||
| 85 | void laptop_io_completion(void); | 85 | void laptop_io_completion(void); |
| 86 | void laptop_sync_completion(void); | 86 | void laptop_sync_completion(void); |
| 87 | void throttle_vm_writeout(void); | 87 | void throttle_vm_writeout(void); |
| 88 | void writeback_congestion_end(void); | ||
| 89 | 88 | ||
| 90 | /* These are exported to sysctl. */ | 89 | /* These are exported to sysctl. */ |
| 91 | extern int dirty_background_ratio; | 90 | extern int dirty_background_ratio; |
diff --git a/include/linux/xattr.h b/include/linux/xattr.h index cda8a96e2fa0..0e7f1e20ea45 100644 --- a/include/linux/xattr.h +++ b/include/linux/xattr.h | |||
| @@ -41,6 +41,7 @@ struct xattr_handler { | |||
| 41 | }; | 41 | }; |
| 42 | 42 | ||
| 43 | ssize_t vfs_getxattr(struct dentry *, char *, void *, size_t); | 43 | ssize_t vfs_getxattr(struct dentry *, char *, void *, size_t); |
| 44 | ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size); | ||
| 44 | int vfs_setxattr(struct dentry *, char *, void *, size_t, int); | 45 | int vfs_setxattr(struct dentry *, char *, void *, size_t, int); |
| 45 | int vfs_removexattr(struct dentry *, char *); | 46 | int vfs_removexattr(struct dentry *, char *); |
| 46 | 47 | ||
diff --git a/include/linux/xfrm.h b/include/linux/xfrm.h index 430afd058269..8ae7f744917b 100644 --- a/include/linux/xfrm.h +++ b/include/linux/xfrm.h | |||
| @@ -129,7 +129,8 @@ enum | |||
| 129 | #define XFRM_MODE_TUNNEL 1 | 129 | #define XFRM_MODE_TUNNEL 1 |
| 130 | #define XFRM_MODE_ROUTEOPTIMIZATION 2 | 130 | #define XFRM_MODE_ROUTEOPTIMIZATION 2 |
| 131 | #define XFRM_MODE_IN_TRIGGER 3 | 131 | #define XFRM_MODE_IN_TRIGGER 3 |
| 132 | #define XFRM_MODE_MAX 4 | 132 | #define XFRM_MODE_BEET 4 |
| 133 | #define XFRM_MODE_MAX 5 | ||
| 133 | 134 | ||
| 134 | /* Netlink configuration messages. */ | 135 | /* Netlink configuration messages. */ |
| 135 | enum { | 136 | enum { |
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index df22efcfcc0b..c0fc39620f36 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h | |||
| @@ -153,6 +153,7 @@ struct hci_conn { | |||
| 153 | __u8 mode; | 153 | __u8 mode; |
| 154 | __u8 type; | 154 | __u8 type; |
| 155 | __u8 out; | 155 | __u8 out; |
| 156 | __u8 attempt; | ||
| 156 | __u8 dev_class[3]; | 157 | __u8 dev_class[3]; |
| 157 | __u8 features[8]; | 158 | __u8 features[8]; |
| 158 | __u16 interval; | 159 | __u16 interval; |
| @@ -289,6 +290,22 @@ static inline struct hci_conn *hci_conn_hash_lookup_ba(struct hci_dev *hdev, | |||
| 289 | return NULL; | 290 | return NULL; |
| 290 | } | 291 | } |
| 291 | 292 | ||
| 293 | static inline struct hci_conn *hci_conn_hash_lookup_state(struct hci_dev *hdev, | ||
| 294 | __u8 type, __u16 state) | ||
| 295 | { | ||
| 296 | struct hci_conn_hash *h = &hdev->conn_hash; | ||
| 297 | struct list_head *p; | ||
| 298 | struct hci_conn *c; | ||
| 299 | |||
| 300 | list_for_each(p, &h->list) { | ||
| 301 | c = list_entry(p, struct hci_conn, list); | ||
| 302 | if (c->type == type && c->state == state) | ||
| 303 | return c; | ||
| 304 | } | ||
| 305 | return NULL; | ||
| 306 | } | ||
| 307 | |||
| 308 | void hci_acl_connect(struct hci_conn *conn); | ||
| 292 | void hci_acl_disconn(struct hci_conn *conn, __u8 reason); | 309 | void hci_acl_disconn(struct hci_conn *conn, __u8 reason); |
| 293 | void hci_add_sco(struct hci_conn *conn, __u16 handle); | 310 | void hci_add_sco(struct hci_conn *conn, __u16 handle); |
| 294 | 311 | ||
diff --git a/include/net/flow.h b/include/net/flow.h index ddf5f3ca1720..3b44d72b27d3 100644 --- a/include/net/flow.h +++ b/include/net/flow.h | |||
| @@ -97,7 +97,7 @@ struct flowi { | |||
| 97 | #define FLOW_DIR_FWD 2 | 97 | #define FLOW_DIR_FWD 2 |
| 98 | 98 | ||
| 99 | struct sock; | 99 | struct sock; |
| 100 | typedef void (*flow_resolve_t)(struct flowi *key, u16 family, u8 dir, | 100 | typedef int (*flow_resolve_t)(struct flowi *key, u16 family, u8 dir, |
| 101 | void **objp, atomic_t **obj_refp); | 101 | void **objp, atomic_t **obj_refp); |
| 102 | 102 | ||
| 103 | extern void *flow_cache_lookup(struct flowi *key, u16 family, u8 dir, | 103 | extern void *flow_cache_lookup(struct flowi *key, u16 family, u8 dir, |
diff --git a/include/net/inet_timewait_sock.h b/include/net/inet_timewait_sock.h index 6d14c22a00c5..5f48748fe017 100644 --- a/include/net/inet_timewait_sock.h +++ b/include/net/inet_timewait_sock.h | |||
| @@ -196,6 +196,7 @@ static inline void inet_twsk_put(struct inet_timewait_sock *tw) | |||
| 196 | { | 196 | { |
| 197 | if (atomic_dec_and_test(&tw->tw_refcnt)) { | 197 | if (atomic_dec_and_test(&tw->tw_refcnt)) { |
| 198 | struct module *owner = tw->tw_prot->owner; | 198 | struct module *owner = tw->tw_prot->owner; |
| 199 | twsk_destructor((struct sock *)tw); | ||
| 199 | #ifdef SOCK_REFCNT_DEBUG | 200 | #ifdef SOCK_REFCNT_DEBUG |
| 200 | printk(KERN_DEBUG "%s timewait_sock %p released\n", | 201 | printk(KERN_DEBUG "%s timewait_sock %p released\n", |
| 201 | tw->tw_prot->name, tw); | 202 | tw->tw_prot->name, tw); |
diff --git a/include/net/inetpeer.h b/include/net/inetpeer.h index 925573fd2aed..aa10a8178e70 100644 --- a/include/net/inetpeer.h +++ b/include/net/inetpeer.h | |||
| @@ -17,14 +17,15 @@ | |||
| 17 | 17 | ||
| 18 | struct inet_peer | 18 | struct inet_peer |
| 19 | { | 19 | { |
| 20 | /* group together avl_left,avl_right,v4daddr to speedup lookups */ | ||
| 20 | struct inet_peer *avl_left, *avl_right; | 21 | struct inet_peer *avl_left, *avl_right; |
| 21 | struct inet_peer *unused_next, **unused_prevp; | ||
| 22 | unsigned long dtime; /* the time of last use of not | ||
| 23 | * referenced entries */ | ||
| 24 | atomic_t refcnt; | ||
| 25 | __be32 v4daddr; /* peer's address */ | 22 | __be32 v4daddr; /* peer's address */ |
| 26 | __u16 avl_height; | 23 | __u16 avl_height; |
| 27 | __u16 ip_id_count; /* IP ID for the next packet */ | 24 | __u16 ip_id_count; /* IP ID for the next packet */ |
| 25 | struct inet_peer *unused_next, **unused_prevp; | ||
| 26 | __u32 dtime; /* the time of last use of not | ||
| 27 | * referenced entries */ | ||
| 28 | atomic_t refcnt; | ||
| 28 | atomic_t rid; /* Frag reception counter */ | 29 | atomic_t rid; /* Frag reception counter */ |
| 29 | __u32 tcp_ts; | 30 | __u32 tcp_ts; |
| 30 | unsigned long tcp_ts_stamp; | 31 | unsigned long tcp_ts_stamp; |
| @@ -35,21 +36,8 @@ void inet_initpeers(void) __init; | |||
| 35 | /* can be called with or without local BH being disabled */ | 36 | /* can be called with or without local BH being disabled */ |
| 36 | struct inet_peer *inet_getpeer(__be32 daddr, int create); | 37 | struct inet_peer *inet_getpeer(__be32 daddr, int create); |
| 37 | 38 | ||
| 38 | extern spinlock_t inet_peer_unused_lock; | ||
| 39 | extern struct inet_peer **inet_peer_unused_tailp; | ||
| 40 | /* can be called from BH context or outside */ | 39 | /* can be called from BH context or outside */ |
| 41 | static inline void inet_putpeer(struct inet_peer *p) | 40 | extern void inet_putpeer(struct inet_peer *p); |
| 42 | { | ||
| 43 | spin_lock_bh(&inet_peer_unused_lock); | ||
| 44 | if (atomic_dec_and_test(&p->refcnt)) { | ||
| 45 | p->unused_prevp = inet_peer_unused_tailp; | ||
| 46 | p->unused_next = NULL; | ||
| 47 | *inet_peer_unused_tailp = p; | ||
| 48 | inet_peer_unused_tailp = &p->unused_next; | ||
| 49 | p->dtime = jiffies; | ||
| 50 | } | ||
| 51 | spin_unlock_bh(&inet_peer_unused_lock); | ||
| 52 | } | ||
| 53 | 41 | ||
| 54 | extern spinlock_t inet_peer_idlock; | 42 | extern spinlock_t inet_peer_idlock; |
| 55 | /* can be called with or without local BH being disabled */ | 43 | /* can be called with or without local BH being disabled */ |
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h index 6ca6b71dfe0f..c14b70ed4c57 100644 --- a/include/net/ip6_route.h +++ b/include/net/ip6_route.h | |||
| @@ -36,13 +36,6 @@ struct route_info { | |||
| 36 | #define RT6_LOOKUP_F_REACHABLE 0x2 | 36 | #define RT6_LOOKUP_F_REACHABLE 0x2 |
| 37 | #define RT6_LOOKUP_F_HAS_SADDR 0x4 | 37 | #define RT6_LOOKUP_F_HAS_SADDR 0x4 |
| 38 | 38 | ||
| 39 | struct pol_chain { | ||
| 40 | int type; | ||
| 41 | int priority; | ||
| 42 | struct fib6_node *rules; | ||
| 43 | struct pol_chain *next; | ||
| 44 | }; | ||
| 45 | |||
| 46 | extern struct rt6_info ip6_null_entry; | 39 | extern struct rt6_info ip6_null_entry; |
| 47 | 40 | ||
| 48 | #ifdef CONFIG_IPV6_MULTIPLE_TABLES | 41 | #ifdef CONFIG_IPV6_MULTIPLE_TABLES |
diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h index 82229146bac7..949b932d2f08 100644 --- a/include/net/ip_fib.h +++ b/include/net/ip_fib.h | |||
| @@ -21,17 +21,14 @@ | |||
| 21 | #include <net/fib_rules.h> | 21 | #include <net/fib_rules.h> |
| 22 | 22 | ||
| 23 | struct fib_config { | 23 | struct fib_config { |
| 24 | u8 fc_family; | ||
| 25 | u8 fc_dst_len; | 24 | u8 fc_dst_len; |
| 26 | u8 fc_src_len; | ||
| 27 | u8 fc_tos; | 25 | u8 fc_tos; |
| 28 | u8 fc_protocol; | 26 | u8 fc_protocol; |
| 29 | u8 fc_scope; | 27 | u8 fc_scope; |
| 30 | u8 fc_type; | 28 | u8 fc_type; |
| 31 | /* 1 byte unused */ | 29 | /* 3 bytes unused */ |
| 32 | u32 fc_table; | 30 | u32 fc_table; |
| 33 | __be32 fc_dst; | 31 | __be32 fc_dst; |
| 34 | __be32 fc_src; | ||
| 35 | __be32 fc_gw; | 32 | __be32 fc_gw; |
| 36 | int fc_oif; | 33 | int fc_oif; |
| 37 | u32 fc_flags; | 34 | u32 fc_flags; |
diff --git a/include/net/netdma.h b/include/net/netdma.h index 7f53cd1d8b1e..f28c6e064e8f 100644 --- a/include/net/netdma.h +++ b/include/net/netdma.h | |||
| @@ -20,7 +20,6 @@ | |||
| 20 | */ | 20 | */ |
| 21 | #ifndef NETDMA_H | 21 | #ifndef NETDMA_H |
| 22 | #define NETDMA_H | 22 | #define NETDMA_H |
| 23 | #include <linux/config.h> | ||
| 24 | #ifdef CONFIG_NET_DMA | 23 | #ifdef CONFIG_NET_DMA |
| 25 | #include <linux/dmaengine.h> | 24 | #include <linux/dmaengine.h> |
| 26 | #include <linux/skbuff.h> | 25 | #include <linux/skbuff.h> |
diff --git a/include/net/netlabel.h b/include/net/netlabel.h index c63a58058e21..12c214b9eadf 100644 --- a/include/net/netlabel.h +++ b/include/net/netlabel.h | |||
| @@ -34,6 +34,7 @@ | |||
| 34 | #include <linux/net.h> | 34 | #include <linux/net.h> |
| 35 | #include <linux/skbuff.h> | 35 | #include <linux/skbuff.h> |
| 36 | #include <net/netlink.h> | 36 | #include <net/netlink.h> |
| 37 | #include <asm/atomic.h> | ||
| 37 | 38 | ||
| 38 | /* | 39 | /* |
| 39 | * NetLabel - A management interface for maintaining network packet label | 40 | * NetLabel - A management interface for maintaining network packet label |
| @@ -106,6 +107,7 @@ int netlbl_domhsh_remove(const char *domain, struct netlbl_audit *audit_info); | |||
| 106 | 107 | ||
| 107 | /* LSM security attributes */ | 108 | /* LSM security attributes */ |
| 108 | struct netlbl_lsm_cache { | 109 | struct netlbl_lsm_cache { |
| 110 | atomic_t refcount; | ||
| 109 | void (*free) (const void *data); | 111 | void (*free) (const void *data); |
| 110 | void *data; | 112 | void *data; |
| 111 | }; | 113 | }; |
| @@ -117,7 +119,7 @@ struct netlbl_lsm_secattr { | |||
| 117 | unsigned char *mls_cat; | 119 | unsigned char *mls_cat; |
| 118 | size_t mls_cat_len; | 120 | size_t mls_cat_len; |
| 119 | 121 | ||
| 120 | struct netlbl_lsm_cache cache; | 122 | struct netlbl_lsm_cache *cache; |
| 121 | }; | 123 | }; |
| 122 | 124 | ||
| 123 | /* | 125 | /* |
| @@ -126,6 +128,43 @@ struct netlbl_lsm_secattr { | |||
| 126 | 128 | ||
| 127 | 129 | ||
| 128 | /** | 130 | /** |
| 131 | * netlbl_secattr_cache_alloc - Allocate and initialize a secattr cache | ||
| 132 | * @flags: the memory allocation flags | ||
| 133 | * | ||
| 134 | * Description: | ||
| 135 | * Allocate and initialize a netlbl_lsm_cache structure. Returns a pointer | ||
| 136 | * on success, NULL on failure. | ||
| 137 | * | ||
| 138 | */ | ||
| 139 | static inline struct netlbl_lsm_cache *netlbl_secattr_cache_alloc(gfp_t flags) | ||
| 140 | { | ||
| 141 | struct netlbl_lsm_cache *cache; | ||
| 142 | |||
| 143 | cache = kzalloc(sizeof(*cache), flags); | ||
| 144 | if (cache) | ||
| 145 | atomic_set(&cache->refcount, 1); | ||
| 146 | return cache; | ||
| 147 | } | ||
| 148 | |||
| 149 | /** | ||
| 150 | * netlbl_secattr_cache_free - Frees a netlbl_lsm_cache struct | ||
| 151 | * @cache: the struct to free | ||
| 152 | * | ||
| 153 | * Description: | ||
| 154 | * Frees @secattr including all of the internal buffers. | ||
| 155 | * | ||
| 156 | */ | ||
| 157 | static inline void netlbl_secattr_cache_free(struct netlbl_lsm_cache *cache) | ||
| 158 | { | ||
| 159 | if (!atomic_dec_and_test(&cache->refcount)) | ||
| 160 | return; | ||
| 161 | |||
| 162 | if (cache->free) | ||
| 163 | cache->free(cache->data); | ||
| 164 | kfree(cache); | ||
| 165 | } | ||
| 166 | |||
| 167 | /** | ||
| 129 | * netlbl_secattr_init - Initialize a netlbl_lsm_secattr struct | 168 | * netlbl_secattr_init - Initialize a netlbl_lsm_secattr struct |
| 130 | * @secattr: the struct to initialize | 169 | * @secattr: the struct to initialize |
| 131 | * | 170 | * |
| @@ -143,20 +182,16 @@ static inline int netlbl_secattr_init(struct netlbl_lsm_secattr *secattr) | |||
| 143 | /** | 182 | /** |
| 144 | * netlbl_secattr_destroy - Clears a netlbl_lsm_secattr struct | 183 | * netlbl_secattr_destroy - Clears a netlbl_lsm_secattr struct |
| 145 | * @secattr: the struct to clear | 184 | * @secattr: the struct to clear |
| 146 | * @clear_cache: cache clear flag | ||
| 147 | * | 185 | * |
| 148 | * Description: | 186 | * Description: |
| 149 | * Destroys the @secattr struct, including freeing all of the internal buffers. | 187 | * Destroys the @secattr struct, including freeing all of the internal buffers. |
| 150 | * If @clear_cache is true then free the cache fields, otherwise leave them | 188 | * The struct must be reset with a call to netlbl_secattr_init() before reuse. |
| 151 | * intact. The struct must be reset with a call to netlbl_secattr_init() | ||
| 152 | * before reuse. | ||
| 153 | * | 189 | * |
| 154 | */ | 190 | */ |
| 155 | static inline void netlbl_secattr_destroy(struct netlbl_lsm_secattr *secattr, | 191 | static inline void netlbl_secattr_destroy(struct netlbl_lsm_secattr *secattr) |
| 156 | u32 clear_cache) | ||
| 157 | { | 192 | { |
| 158 | if (clear_cache && secattr->cache.data != NULL && secattr->cache.free) | 193 | if (secattr->cache) |
| 159 | secattr->cache.free(secattr->cache.data); | 194 | netlbl_secattr_cache_free(secattr->cache); |
| 160 | kfree(secattr->domain); | 195 | kfree(secattr->domain); |
| 161 | kfree(secattr->mls_cat); | 196 | kfree(secattr->mls_cat); |
| 162 | } | 197 | } |
| @@ -178,17 +213,14 @@ static inline struct netlbl_lsm_secattr *netlbl_secattr_alloc(int flags) | |||
| 178 | /** | 213 | /** |
| 179 | * netlbl_secattr_free - Frees a netlbl_lsm_secattr struct | 214 | * netlbl_secattr_free - Frees a netlbl_lsm_secattr struct |
| 180 | * @secattr: the struct to free | 215 | * @secattr: the struct to free |
| 181 | * @clear_cache: cache clear flag | ||
| 182 | * | 216 | * |
| 183 | * Description: | 217 | * Description: |
| 184 | * Frees @secattr including all of the internal buffers. If @clear_cache is | 218 | * Frees @secattr including all of the internal buffers. |
| 185 | * true then free the cache fields, otherwise leave them intact. | ||
| 186 | * | 219 | * |
| 187 | */ | 220 | */ |
| 188 | static inline void netlbl_secattr_free(struct netlbl_lsm_secattr *secattr, | 221 | static inline void netlbl_secattr_free(struct netlbl_lsm_secattr *secattr) |
| 189 | u32 clear_cache) | ||
| 190 | { | 222 | { |
| 191 | netlbl_secattr_destroy(secattr, clear_cache); | 223 | netlbl_secattr_destroy(secattr); |
| 192 | kfree(secattr); | 224 | kfree(secattr); |
| 193 | } | 225 | } |
| 194 | 226 | ||
diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h index ee68a3124076..764e3af5be93 100644 --- a/include/net/sctp/sctp.h +++ b/include/net/sctp/sctp.h | |||
| @@ -139,6 +139,7 @@ int sctp_inet_listen(struct socket *sock, int backlog); | |||
| 139 | void sctp_write_space(struct sock *sk); | 139 | void sctp_write_space(struct sock *sk); |
| 140 | unsigned int sctp_poll(struct file *file, struct socket *sock, | 140 | unsigned int sctp_poll(struct file *file, struct socket *sock, |
| 141 | poll_table *wait); | 141 | poll_table *wait); |
| 142 | void sctp_sock_rfree(struct sk_buff *skb); | ||
| 142 | 143 | ||
| 143 | /* | 144 | /* |
| 144 | * sctp/primitive.c | 145 | * sctp/primitive.c |
| @@ -444,6 +445,19 @@ static inline struct list_head *sctp_list_dequeue(struct list_head *list) | |||
| 444 | return result; | 445 | return result; |
| 445 | } | 446 | } |
| 446 | 447 | ||
| 448 | /* SCTP version of skb_set_owner_r. We need this one because | ||
| 449 | * of the way we have to do receive buffer accounting on bundled | ||
| 450 | * chunks. | ||
| 451 | */ | ||
| 452 | static inline void sctp_skb_set_owner_r(struct sk_buff *skb, struct sock *sk) | ||
| 453 | { | ||
| 454 | struct sctp_ulpevent *event = sctp_skb2event(skb); | ||
| 455 | |||
| 456 | skb->sk = sk; | ||
| 457 | skb->destructor = sctp_sock_rfree; | ||
| 458 | atomic_add(event->rmem_len, &sk->sk_rmem_alloc); | ||
| 459 | } | ||
| 460 | |||
| 447 | /* Tests if the list has one and only one entry. */ | 461 | /* Tests if the list has one and only one entry. */ |
| 448 | static inline int sctp_list_single_entry(struct list_head *head) | 462 | static inline int sctp_list_single_entry(struct list_head *head) |
| 449 | { | 463 | { |
diff --git a/include/net/sctp/ulpevent.h b/include/net/sctp/ulpevent.h index 6c40cfc4832d..1a4ddc1ec7d2 100644 --- a/include/net/sctp/ulpevent.h +++ b/include/net/sctp/ulpevent.h | |||
| @@ -63,6 +63,7 @@ struct sctp_ulpevent { | |||
| 63 | __u32 cumtsn; | 63 | __u32 cumtsn; |
| 64 | int msg_flags; | 64 | int msg_flags; |
| 65 | int iif; | 65 | int iif; |
| 66 | unsigned int rmem_len; | ||
| 66 | }; | 67 | }; |
| 67 | 68 | ||
| 68 | /* Retrieve the skb this event sits inside of. */ | 69 | /* Retrieve the skb this event sits inside of. */ |
diff --git a/include/net/timewait_sock.h b/include/net/timewait_sock.h index 2544281e1d5e..be293d795e38 100644 --- a/include/net/timewait_sock.h +++ b/include/net/timewait_sock.h | |||
| @@ -19,6 +19,7 @@ struct timewait_sock_ops { | |||
| 19 | unsigned int twsk_obj_size; | 19 | unsigned int twsk_obj_size; |
| 20 | int (*twsk_unique)(struct sock *sk, | 20 | int (*twsk_unique)(struct sock *sk, |
| 21 | struct sock *sktw, void *twp); | 21 | struct sock *sktw, void *twp); |
| 22 | void (*twsk_destructor)(struct sock *sk); | ||
| 22 | }; | 23 | }; |
| 23 | 24 | ||
| 24 | static inline int twsk_unique(struct sock *sk, struct sock *sktw, void *twp) | 25 | static inline int twsk_unique(struct sock *sk, struct sock *sktw, void *twp) |
| @@ -28,4 +29,10 @@ static inline int twsk_unique(struct sock *sk, struct sock *sktw, void *twp) | |||
| 28 | return 0; | 29 | return 0; |
| 29 | } | 30 | } |
| 30 | 31 | ||
| 32 | static inline void twsk_destructor(struct sock *sk) | ||
| 33 | { | ||
| 34 | if (sk->sk_prot->twsk_prot->twsk_destructor != NULL) | ||
| 35 | sk->sk_prot->twsk_prot->twsk_destructor(sk); | ||
| 36 | } | ||
| 37 | |||
| 31 | #endif /* _TIMEWAIT_SOCK_H */ | 38 | #endif /* _TIMEWAIT_SOCK_H */ |
diff --git a/include/net/xfrm.h b/include/net/xfrm.h index 1e2a4ddec96e..737fdb2ee8a4 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h | |||
| @@ -995,7 +995,8 @@ struct xfrm_state * xfrm_find_acq(u8 mode, u32 reqid, u8 proto, | |||
| 995 | int create, unsigned short family); | 995 | int create, unsigned short family); |
| 996 | extern void xfrm_policy_flush(u8 type); | 996 | extern void xfrm_policy_flush(u8 type); |
| 997 | extern int xfrm_sk_policy_insert(struct sock *sk, int dir, struct xfrm_policy *pol); | 997 | extern int xfrm_sk_policy_insert(struct sock *sk, int dir, struct xfrm_policy *pol); |
| 998 | extern int xfrm_bundle_ok(struct xfrm_dst *xdst, struct flowi *fl, int family, int strict); | 998 | extern int xfrm_bundle_ok(struct xfrm_policy *pol, struct xfrm_dst *xdst, |
| 999 | struct flowi *fl, int family, int strict); | ||
| 999 | extern void xfrm_init_pmtu(struct dst_entry *dst); | 1000 | extern void xfrm_init_pmtu(struct dst_entry *dst); |
| 1000 | 1001 | ||
| 1001 | extern wait_queue_head_t km_waitq; | 1002 | extern wait_queue_head_t km_waitq; |
diff --git a/include/scsi/scsi_tcq.h b/include/scsi/scsi_tcq.h index c247a28259bc..cf4c219c0b5c 100644 --- a/include/scsi/scsi_tcq.h +++ b/include/scsi/scsi_tcq.h | |||
| @@ -144,5 +144,25 @@ static inline int scsi_init_shared_tag_map(struct Scsi_Host *shost, int depth) | |||
| 144 | return shost->bqt ? 0 : -ENOMEM; | 144 | return shost->bqt ? 0 : -ENOMEM; |
| 145 | } | 145 | } |
| 146 | 146 | ||
| 147 | /** | ||
| 148 | * scsi_host_find_tag - find the tagged command by host | ||
| 149 | * @shost: pointer to scsi_host | ||
| 150 | * @tag: tag of the scsi_cmnd | ||
| 151 | * | ||
| 152 | * Notes: | ||
| 153 | * Only works with tags allocated by the generic blk layer. | ||
| 154 | **/ | ||
| 155 | static inline struct scsi_cmnd *scsi_host_find_tag(struct Scsi_Host *shost, | ||
| 156 | int tag) | ||
| 157 | { | ||
| 158 | struct request *req; | ||
| 159 | |||
| 160 | if (tag != SCSI_NO_TAG) { | ||
| 161 | req = blk_map_queue_find_tag(shost->bqt, tag); | ||
| 162 | return req ? (struct scsi_cmnd *)req->special : NULL; | ||
| 163 | } | ||
| 164 | return NULL; | ||
| 165 | } | ||
| 166 | |||
| 147 | #endif /* CONFIG_BLOCK */ | 167 | #endif /* CONFIG_BLOCK */ |
| 148 | #endif /* _SCSI_SCSI_TCQ_H */ | 168 | #endif /* _SCSI_SCSI_TCQ_H */ |
diff --git a/include/scsi/sg.h b/include/scsi/sg.h index 0a487fe26d4f..519c49a0fc11 100644 --- a/include/scsi/sg.h +++ b/include/scsi/sg.h | |||
| @@ -11,26 +11,10 @@ | |||
| 11 | Original driver (sg.h): | 11 | Original driver (sg.h): |
| 12 | * Copyright (C) 1992 Lawrence Foard | 12 | * Copyright (C) 1992 Lawrence Foard |
| 13 | Version 2 and 3 extensions to driver: | 13 | Version 2 and 3 extensions to driver: |
| 14 | * Copyright (C) 1998 - 2003 Douglas Gilbert | 14 | * Copyright (C) 1998 - 2006 Douglas Gilbert |
| 15 | 15 | ||
| 16 | Version: 3.5.29 (20030529) | 16 | Version: 3.5.34 (20060920) |
| 17 | This version is for 2.5 series kernels. | 17 | This version is for 2.6 series kernels. |
| 18 | |||
| 19 | Changes since 3.5.28 (20030308) | ||
| 20 | - fix bug introduced in version 3.1.24 (last segment of sgat list) | ||
| 21 | Changes since 3.5.27 (20020812) | ||
| 22 | - remove procfs entries: hosts, host_hdr + host_strs (now in sysfs) | ||
| 23 | - add sysfs sg driver params: def_reserved_size, allow_dio, version | ||
| 24 | - new boot option: "sg_allow_dio" and module parameter: "allow_dio" | ||
| 25 | - multiple internal changes due to scsi subsystem rework | ||
| 26 | Changes since 3.5.26 (20020708) | ||
| 27 | - re-add direct IO using Kai Makisara's work | ||
| 28 | - re-tab to 8, start using C99-isms | ||
| 29 | - simplify memory management | ||
| 30 | Changes since 3.5.25 (20020504) | ||
| 31 | - driverfs additions | ||
| 32 | - copy_to/from_user() fixes [William Stinson] | ||
| 33 | - disable kiobufs support | ||
| 34 | 18 | ||
| 35 | For a full changelog see http://www.torque.net/sg | 19 | For a full changelog see http://www.torque.net/sg |
| 36 | 20 | ||
| @@ -40,7 +24,7 @@ Map of SG verions to the Linux kernels in which they appear: | |||
| 40 | 2.1.40 2.2.20 | 24 | 2.1.40 2.2.20 |
| 41 | 3.0.x optional version 3 sg driver for 2.2 series | 25 | 3.0.x optional version 3 sg driver for 2.2 series |
| 42 | 3.1.17++ 2.4.0++ | 26 | 3.1.17++ 2.4.0++ |
| 43 | 3.5.23++ 2.5.0++ | 27 | 3.5.30++ 2.6.0++ |
| 44 | 28 | ||
| 45 | Major new features in SG 3.x driver (cf SG 2.x drivers) | 29 | Major new features in SG 3.x driver (cf SG 2.x drivers) |
| 46 | - SG_IO ioctl() combines function if write() and read() | 30 | - SG_IO ioctl() combines function if write() and read() |
| @@ -51,14 +35,15 @@ Major new features in SG 3.x driver (cf SG 2.x drivers) | |||
| 51 | data into kernel buffers and then use the CPU to copy the data into the | 35 | data into kernel buffers and then use the CPU to copy the data into the |
| 52 | user space (vice versa for writes). That is called "indirect" IO due to | 36 | user space (vice versa for writes). That is called "indirect" IO due to |
| 53 | the double handling of data. There are two methods offered to remove the | 37 | the double handling of data. There are two methods offered to remove the |
| 54 | redundant copy: 1) direct IO which uses the kernel kiobuf mechanism and | 38 | redundant copy: 1) direct IO and 2) using the mmap() system call to map |
| 55 | 2) using the mmap() system call to map the reserve buffer (this driver has | 39 | the reserve buffer (this driver has one reserve buffer per fd) into the |
| 56 | one reserve buffer per fd) into the user space. Both have their advantages. | 40 | user space. Both have their advantages. |
| 57 | In terms of absolute speed mmap() is faster. If speed is not a concern, | 41 | In terms of absolute speed mmap() is faster. If speed is not a concern, |
| 58 | indirect IO should be fine. Read the documentation for more information. | 42 | indirect IO should be fine. Read the documentation for more information. |
| 59 | 43 | ||
| 60 | ** N.B. To use direct IO 'echo 1 > /proc/scsi/sg/allow_dio' may be | 44 | ** N.B. To use direct IO 'echo 1 > /proc/scsi/sg/allow_dio' or |
| 61 | needed. That pseudo file's content is defaulted to 0. ** | 45 | 'echo 1 > /sys/module/sg/parameters/allow_dio' is needed. |
| 46 | That attribute is 0 by default. ** | ||
| 62 | 47 | ||
| 63 | Historical note: this SCSI pass-through driver has been known as "sg" for | 48 | Historical note: this SCSI pass-through driver has been known as "sg" for |
| 64 | a decade. In broader kernel discussions "sg" is used to refer to scatter | 49 | a decade. In broader kernel discussions "sg" is used to refer to scatter |
| @@ -72,20 +57,17 @@ Major new features in SG 3.x driver (cf SG 2.x drivers) | |||
| 72 | http://www.torque.net/sg/p/sg_v3_ho.html | 57 | http://www.torque.net/sg/p/sg_v3_ho.html |
| 73 | This is a rendering from DocBook source [change the extension to "sgml" | 58 | This is a rendering from DocBook source [change the extension to "sgml" |
| 74 | or "xml"]. There are renderings in "ps", "pdf", "rtf" and "txt" (soon). | 59 | or "xml"]. There are renderings in "ps", "pdf", "rtf" and "txt" (soon). |
| 60 | The SG_IO ioctl is now found in other parts kernel (e.g. the block layer). | ||
| 61 | For more information see http://www.torque.net/sg/sg_io.html | ||
| 75 | 62 | ||
| 76 | The older, version 2 documents discuss the original sg interface in detail: | 63 | The older, version 2 documents discuss the original sg interface in detail: |
| 77 | http://www.torque.net/sg/p/scsi-generic.txt | 64 | http://www.torque.net/sg/p/scsi-generic.txt |
| 78 | http://www.torque.net/sg/p/scsi-generic_long.txt | 65 | http://www.torque.net/sg/p/scsi-generic_long.txt |
| 79 | A version of this document (potentially out of date) may also be found in | 66 | Also available: <kernel_source>/Documentation/scsi/scsi-generic.txt |
| 80 | the kernel source tree, probably at: | ||
| 81 | Documentation/scsi/scsi-generic.txt . | ||
| 82 | 67 | ||
| 83 | Utility and test programs are available at the sg web site. They are | 68 | Utility and test programs are available at the sg web site. They are |
| 84 | bundled as sg_utils (for the lk 2.2 series) and sg3_utils (for the | 69 | packaged as sg3_utils (for the lk 2.4 and 2.6 series) and sg_utils |
| 85 | lk 2.4 series). | 70 | (for the lk 2.2 series). |
| 86 | |||
| 87 | There is a HOWTO on the Linux SCSI subsystem in the lk 2.4 series at: | ||
| 88 | http://www.linuxdoc.org/HOWTO/SCSI-2.4-HOWTO | ||
| 89 | */ | 71 | */ |
| 90 | 72 | ||
| 91 | 73 | ||
| @@ -238,13 +220,12 @@ typedef struct sg_req_info { /* used by SG_GET_REQUEST_TABLE ioctl() */ | |||
| 238 | #define SG_GET_ACCESS_COUNT 0x2289 | 220 | #define SG_GET_ACCESS_COUNT 0x2289 |
| 239 | 221 | ||
| 240 | 222 | ||
| 241 | #define SG_SCATTER_SZ (8 * 4096) /* PAGE_SIZE not available to user */ | 223 | #define SG_SCATTER_SZ (8 * 4096) |
| 242 | /* Largest size (in bytes) a single scatter-gather list element can have. | 224 | /* Largest size (in bytes) a single scatter-gather list element can have. |
| 243 | The value must be a power of 2 and <= (PAGE_SIZE * 32) [131072 bytes on | 225 | The value used by the driver is 'max(SG_SCATTER_SZ, PAGE_SIZE)'. |
| 244 | i386]. The minimum value is PAGE_SIZE. If scatter-gather not supported | 226 | This value should be a power of 2 (and may be rounded up internally). |
| 245 | by adapter then this value is the largest data block that can be | 227 | If scatter-gather is not supported by adapter then this value is the |
| 246 | read/written by a single scsi command. The user can find the value of | 228 | largest data block that can be read/written by a single scsi command. */ |
| 247 | PAGE_SIZE by calling getpagesize() defined in unistd.h . */ | ||
| 248 | 229 | ||
| 249 | #define SG_DEFAULT_RETRIES 0 | 230 | #define SG_DEFAULT_RETRIES 0 |
| 250 | 231 | ||
diff --git a/include/sound/core.h b/include/sound/core.h index b056ea925ecf..fa1ca0127bab 100644 --- a/include/sound/core.h +++ b/include/sound/core.h | |||
| @@ -89,10 +89,10 @@ struct snd_device { | |||
| 89 | struct snd_monitor_file { | 89 | struct snd_monitor_file { |
| 90 | struct file *file; | 90 | struct file *file; |
| 91 | struct snd_monitor_file *next; | 91 | struct snd_monitor_file *next; |
| 92 | const struct file_operations *disconnected_f_op; | ||
| 93 | struct list_head shutdown_list; | ||
| 92 | }; | 94 | }; |
| 93 | 95 | ||
| 94 | struct snd_shutdown_f_ops; /* define it later in init.c */ | ||
| 95 | |||
| 96 | /* main structure for soundcard */ | 96 | /* main structure for soundcard */ |
| 97 | 97 | ||
| 98 | struct snd_card { | 98 | struct snd_card { |
diff --git a/include/sound/cs4231.h b/include/sound/cs4231.h index 60b5b92a1319..ab51ce1ba9a5 100644 --- a/include/sound/cs4231.h +++ b/include/sound/cs4231.h | |||
| @@ -273,7 +273,7 @@ unsigned char snd_cs4236_ext_in(struct snd_cs4231 *chip, unsigned char reg); | |||
| 273 | void snd_cs4231_mce_up(struct snd_cs4231 *chip); | 273 | void snd_cs4231_mce_up(struct snd_cs4231 *chip); |
| 274 | void snd_cs4231_mce_down(struct snd_cs4231 *chip); | 274 | void snd_cs4231_mce_down(struct snd_cs4231 *chip); |
| 275 | 275 | ||
| 276 | irqreturn_t snd_cs4231_interrupt(int irq, void *dev_id, struct pt_regs *regs); | 276 | irqreturn_t snd_cs4231_interrupt(int irq, void *dev_id); |
| 277 | 277 | ||
| 278 | const char *snd_cs4231_chip_id(struct snd_cs4231 *chip); | 278 | const char *snd_cs4231_chip_id(struct snd_cs4231 *chip); |
| 279 | 279 | ||
diff --git a/include/sound/emu10k1.h b/include/sound/emu10k1.h index 892e310c504d..3d3c1514cf71 100644 --- a/include/sound/emu10k1.h +++ b/include/sound/emu10k1.h | |||
| @@ -1194,7 +1194,7 @@ int snd_emu10k1_mixer(struct snd_emu10k1 * emu, int pcm_device, int multi_device | |||
| 1194 | int snd_emu10k1_timer(struct snd_emu10k1 * emu, int device); | 1194 | int snd_emu10k1_timer(struct snd_emu10k1 * emu, int device); |
| 1195 | int snd_emu10k1_fx8010_new(struct snd_emu10k1 *emu, int device, struct snd_hwdep ** rhwdep); | 1195 | int snd_emu10k1_fx8010_new(struct snd_emu10k1 *emu, int device, struct snd_hwdep ** rhwdep); |
| 1196 | 1196 | ||
| 1197 | irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs); | 1197 | irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id); |
| 1198 | 1198 | ||
| 1199 | void snd_emu10k1_voice_init(struct snd_emu10k1 * emu, int voice); | 1199 | void snd_emu10k1_voice_init(struct snd_emu10k1 * emu, int voice); |
| 1200 | int snd_emu10k1_init_efx(struct snd_emu10k1 *emu); | 1200 | int snd_emu10k1_init_efx(struct snd_emu10k1 *emu); |
diff --git a/include/sound/gus.h b/include/sound/gus.h index 68a664ab97f3..c49ea57db8cc 100644 --- a/include/sound/gus.h +++ b/include/sound/gus.h | |||
| @@ -638,7 +638,7 @@ int snd_gus_initialize(struct snd_gus_card * gus); | |||
| 638 | 638 | ||
| 639 | /* gus_irq.c */ | 639 | /* gus_irq.c */ |
| 640 | 640 | ||
| 641 | irqreturn_t snd_gus_interrupt(int irq, void *dev_id, struct pt_regs *regs); | 641 | irqreturn_t snd_gus_interrupt(int irq, void *dev_id); |
| 642 | #ifdef CONFIG_SND_DEBUG | 642 | #ifdef CONFIG_SND_DEBUG |
| 643 | void snd_gus_irq_profile_init(struct snd_gus_card *gus); | 643 | void snd_gus_irq_profile_init(struct snd_gus_card *gus); |
| 644 | #endif | 644 | #endif |
diff --git a/include/sound/initval.h b/include/sound/initval.h index 2ae76efc696f..e85b90750a59 100644 --- a/include/sound/initval.h +++ b/include/sound/initval.h | |||
| @@ -53,7 +53,7 @@ | |||
| 53 | #ifdef SNDRV_LEGACY_FIND_FREE_IRQ | 53 | #ifdef SNDRV_LEGACY_FIND_FREE_IRQ |
| 54 | #include <linux/interrupt.h> | 54 | #include <linux/interrupt.h> |
| 55 | 55 | ||
| 56 | static irqreturn_t snd_legacy_empty_irq_handler(int irq, void *dev_id, struct pt_regs *regs) | 56 | static irqreturn_t snd_legacy_empty_irq_handler(int irq, void *dev_id) |
| 57 | { | 57 | { |
| 58 | return IRQ_HANDLED; | 58 | return IRQ_HANDLED; |
| 59 | } | 59 | } |
diff --git a/include/sound/mpu401.h b/include/sound/mpu401.h index ac504321ea56..8c88267e9bea 100644 --- a/include/sound/mpu401.h +++ b/include/sound/mpu401.h | |||
| @@ -106,10 +106,8 @@ struct snd_mpu401 { | |||
| 106 | 106 | ||
| 107 | */ | 107 | */ |
| 108 | 108 | ||
| 109 | irqreturn_t snd_mpu401_uart_interrupt(int irq, void *dev_id, | 109 | irqreturn_t snd_mpu401_uart_interrupt(int irq, void *dev_id); |
| 110 | struct pt_regs *regs); | 110 | irqreturn_t snd_mpu401_uart_interrupt_tx(int irq, void *dev_id); |
| 111 | irqreturn_t snd_mpu401_uart_interrupt_tx(int irq, void *dev_id, | ||
| 112 | struct pt_regs *regs); | ||
| 113 | 111 | ||
| 114 | int snd_mpu401_uart_new(struct snd_card *card, | 112 | int snd_mpu401_uart_new(struct snd_card *card, |
| 115 | int device, | 113 | int device, |
diff --git a/include/sound/sb.h b/include/sound/sb.h index 431d06675e36..2dd5c8e5b4fe 100644 --- a/include/sound/sb.h +++ b/include/sound/sb.h | |||
| @@ -100,7 +100,7 @@ struct snd_sb { | |||
| 100 | struct snd_rawmidi *rmidi; | 100 | struct snd_rawmidi *rmidi; |
| 101 | struct snd_rawmidi_substream *midi_substream_input; | 101 | struct snd_rawmidi_substream *midi_substream_input; |
| 102 | struct snd_rawmidi_substream *midi_substream_output; | 102 | struct snd_rawmidi_substream *midi_substream_output; |
| 103 | irqreturn_t (*rmidi_callback)(int irq, void *dev_id, struct pt_regs *regs); | 103 | irq_handler_t rmidi_callback; |
| 104 | 104 | ||
| 105 | spinlock_t reg_lock; | 105 | spinlock_t reg_lock; |
| 106 | spinlock_t open_lock; | 106 | spinlock_t open_lock; |
| @@ -286,7 +286,7 @@ int snd_sbdsp_reset(struct snd_sb *chip); | |||
| 286 | int snd_sbdsp_create(struct snd_card *card, | 286 | int snd_sbdsp_create(struct snd_card *card, |
| 287 | unsigned long port, | 287 | unsigned long port, |
| 288 | int irq, | 288 | int irq, |
| 289 | irqreturn_t (*irq_handler)(int, void *, struct pt_regs *), | 289 | irq_handler_t irq_handler, |
| 290 | int dma8, int dma16, | 290 | int dma8, int dma16, |
| 291 | unsigned short hardware, | 291 | unsigned short hardware, |
| 292 | struct snd_sb **r_chip); | 292 | struct snd_sb **r_chip); |
| @@ -316,7 +316,7 @@ int snd_sb16dsp_pcm(struct snd_sb *chip, int device, struct snd_pcm ** rpcm); | |||
| 316 | const struct snd_pcm_ops *snd_sb16dsp_get_pcm_ops(int direction); | 316 | const struct snd_pcm_ops *snd_sb16dsp_get_pcm_ops(int direction); |
| 317 | int snd_sb16dsp_configure(struct snd_sb *chip); | 317 | int snd_sb16dsp_configure(struct snd_sb *chip); |
| 318 | /* sb16.c */ | 318 | /* sb16.c */ |
| 319 | irqreturn_t snd_sb16dsp_interrupt(int irq, void *dev_id, struct pt_regs *regs); | 319 | irqreturn_t snd_sb16dsp_interrupt(int irq, void *dev_id); |
| 320 | 320 | ||
| 321 | /* exported mixer stuffs */ | 321 | /* exported mixer stuffs */ |
| 322 | enum { | 322 | enum { |
diff --git a/include/sound/version.h b/include/sound/version.h index 2ee849d0e198..4ad86eb6440b 100644 --- a/include/sound/version.h +++ b/include/sound/version.h | |||
| @@ -1,3 +1,3 @@ | |||
| 1 | /* include/version.h. Generated by configure. */ | 1 | /* include/version.h. Generated by alsa/ksync script. */ |
| 2 | #define CONFIG_SND_VERSION "1.0.12rc1" | 2 | #define CONFIG_SND_VERSION "1.0.13" |
| 3 | #define CONFIG_SND_DATE " (Thu Jun 22 13:55:50 2006 UTC)" | 3 | #define CONFIG_SND_DATE " (Fri Oct 06 18:28:19 2006 UTC)" |
diff --git a/include/sound/vx_core.h b/include/sound/vx_core.h index dbca14170615..217394652090 100644 --- a/include/sound/vx_core.h +++ b/include/sound/vx_core.h | |||
| @@ -228,7 +228,7 @@ void snd_vx_free_firmware(struct vx_core *chip); | |||
| 228 | /* | 228 | /* |
| 229 | * interrupt handler; exported for pcmcia | 229 | * interrupt handler; exported for pcmcia |
| 230 | */ | 230 | */ |
| 231 | irqreturn_t snd_vx_irq_handler(int irq, void *dev, struct pt_regs *regs); | 231 | irqreturn_t snd_vx_irq_handler(int irq, void *dev); |
| 232 | 232 | ||
| 233 | /* | 233 | /* |
| 234 | * lowlevel functions | 234 | * lowlevel functions |
