diff options
Diffstat (limited to 'include')
102 files changed, 2966 insertions, 984 deletions
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 0d9f984a60a1..16c3c441256e 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
@@ -316,7 +316,7 @@ struct acpi_bus_event { | |||
316 | u32 data; | 316 | u32 data; |
317 | }; | 317 | }; |
318 | 318 | ||
319 | extern struct subsystem acpi_subsys; | 319 | extern struct kset acpi_subsys; |
320 | 320 | ||
321 | /* | 321 | /* |
322 | * External Functions | 322 | * External Functions |
diff --git a/include/asm-alpha/scatterlist.h b/include/asm-alpha/scatterlist.h index 6afb8bd3aaf9..917365405e83 100644 --- a/include/asm-alpha/scatterlist.h +++ b/include/asm-alpha/scatterlist.h | |||
@@ -2,6 +2,7 @@ | |||
2 | #define _ALPHA_SCATTERLIST_H | 2 | #define _ALPHA_SCATTERLIST_H |
3 | 3 | ||
4 | #include <asm/page.h> | 4 | #include <asm/page.h> |
5 | #include <asm/types.h> | ||
5 | 6 | ||
6 | struct scatterlist { | 7 | struct scatterlist { |
7 | struct page *page; | 8 | struct page *page; |
diff --git a/include/asm-arm/arch-imx/mmc.h b/include/asm-arm/arch-imx/mmc.h index 1937151665c7..84c726934ace 100644 --- a/include/asm-arm/arch-imx/mmc.h +++ b/include/asm-arm/arch-imx/mmc.h | |||
@@ -1,7 +1,7 @@ | |||
1 | #ifndef ASMARM_ARCH_MMC_H | 1 | #ifndef ASMARM_ARCH_MMC_H |
2 | #define ASMARM_ARCH_MMC_H | 2 | #define ASMARM_ARCH_MMC_H |
3 | 3 | ||
4 | #include <linux/mmc/protocol.h> | 4 | #include <linux/mmc/host.h> |
5 | 5 | ||
6 | struct imxmmc_platform_data { | 6 | struct imxmmc_platform_data { |
7 | int (*card_present)(void); | 7 | int (*card_present)(void); |
diff --git a/include/asm-arm/arch-ixp4xx/dma.h b/include/asm-arm/arch-ixp4xx/dma.h index 789f7f53c357..2c7f5327d80f 100644 --- a/include/asm-arm/arch-ixp4xx/dma.h +++ b/include/asm-arm/arch-ixp4xx/dma.h | |||
@@ -12,7 +12,6 @@ | |||
12 | #define __ASM_ARCH_DMA_H | 12 | #define __ASM_ARCH_DMA_H |
13 | 13 | ||
14 | #include <linux/device.h> | 14 | #include <linux/device.h> |
15 | #include <linux/pci.h> | ||
16 | #include <asm/page.h> | 15 | #include <asm/page.h> |
17 | #include <asm/sizes.h> | 16 | #include <asm/sizes.h> |
18 | #include <asm/hardware.h> | 17 | #include <asm/hardware.h> |
diff --git a/include/asm-arm/arch-pxa/mmc.h b/include/asm-arm/arch-pxa/mmc.h index a38a28c4bbd8..ef4f570381d1 100644 --- a/include/asm-arm/arch-pxa/mmc.h +++ b/include/asm-arm/arch-pxa/mmc.h | |||
@@ -1,7 +1,7 @@ | |||
1 | #ifndef ASMARM_ARCH_MMC_H | 1 | #ifndef ASMARM_ARCH_MMC_H |
2 | #define ASMARM_ARCH_MMC_H | 2 | #define ASMARM_ARCH_MMC_H |
3 | 3 | ||
4 | #include <linux/mmc/protocol.h> | 4 | #include <linux/mmc/host.h> |
5 | #include <linux/interrupt.h> | 5 | #include <linux/interrupt.h> |
6 | 6 | ||
7 | struct device; | 7 | struct device; |
diff --git a/include/asm-arm/arch-pxa/pxa27x_keyboard.h b/include/asm-arm/arch-pxa/pxa27x_keyboard.h new file mode 100644 index 000000000000..3aaff923b2ca --- /dev/null +++ b/include/asm-arm/arch-pxa/pxa27x_keyboard.h | |||
@@ -0,0 +1,13 @@ | |||
1 | #define PXAKBD_MAXROW 8 | ||
2 | #define PXAKBD_MAXCOL 8 | ||
3 | |||
4 | struct pxa27x_keyboard_platform_data { | ||
5 | int nr_rows, nr_cols; | ||
6 | int keycodes[PXAKBD_MAXROW][PXAKBD_MAXCOL]; | ||
7 | int gpio_modes[PXAKBD_MAXROW + PXAKBD_MAXCOL]; | ||
8 | |||
9 | #ifdef CONFIG_PM | ||
10 | u32 reg_kpc; | ||
11 | u32 reg_kprec; | ||
12 | #endif | ||
13 | }; | ||
diff --git a/include/asm-arm/mach/mmc.h b/include/asm-arm/mach/mmc.h index 1b3555d4b41e..eb91145c00c4 100644 --- a/include/asm-arm/mach/mmc.h +++ b/include/asm-arm/mach/mmc.h | |||
@@ -4,7 +4,7 @@ | |||
4 | #ifndef ASMARM_MACH_MMC_H | 4 | #ifndef ASMARM_MACH_MMC_H |
5 | #define ASMARM_MACH_MMC_H | 5 | #define ASMARM_MACH_MMC_H |
6 | 6 | ||
7 | #include <linux/mmc/protocol.h> | 7 | #include <linux/mmc/host.h> |
8 | 8 | ||
9 | struct mmc_platform_data { | 9 | struct mmc_platform_data { |
10 | unsigned int ocr_mask; /* available voltages */ | 10 | unsigned int ocr_mask; /* available voltages */ |
diff --git a/include/asm-avr32/scatterlist.h b/include/asm-avr32/scatterlist.h index bfe7d753423c..c6d5ce3b3a25 100644 --- a/include/asm-avr32/scatterlist.h +++ b/include/asm-avr32/scatterlist.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef __ASM_AVR32_SCATTERLIST_H | 1 | #ifndef __ASM_AVR32_SCATTERLIST_H |
2 | #define __ASM_AVR32_SCATTERLIST_H | 2 | #define __ASM_AVR32_SCATTERLIST_H |
3 | 3 | ||
4 | #include <asm/types.h> | ||
5 | |||
4 | struct scatterlist { | 6 | struct scatterlist { |
5 | struct page *page; | 7 | struct page *page; |
6 | unsigned int offset; | 8 | unsigned int offset; |
diff --git a/include/asm-frv/scatterlist.h b/include/asm-frv/scatterlist.h index fb38fd329a5f..8e827fa853f1 100644 --- a/include/asm-frv/scatterlist.h +++ b/include/asm-frv/scatterlist.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef _ASM_SCATTERLIST_H | 1 | #ifndef _ASM_SCATTERLIST_H |
2 | #define _ASM_SCATTERLIST_H | 2 | #define _ASM_SCATTERLIST_H |
3 | 3 | ||
4 | #include <asm/types.h> | ||
5 | |||
4 | /* | 6 | /* |
5 | * Drivers must set either ->address or (preferred) ->page and ->offset | 7 | * Drivers must set either ->address or (preferred) ->page and ->offset |
6 | * to indicate where data must be transferred to/from. | 8 | * to indicate where data must be transferred to/from. |
diff --git a/include/asm-h8300/scatterlist.h b/include/asm-h8300/scatterlist.h index 7627f0cd1a2f..985fdf54eaca 100644 --- a/include/asm-h8300/scatterlist.h +++ b/include/asm-h8300/scatterlist.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef _H8300_SCATTERLIST_H | 1 | #ifndef _H8300_SCATTERLIST_H |
2 | #define _H8300_SCATTERLIST_H | 2 | #define _H8300_SCATTERLIST_H |
3 | 3 | ||
4 | #include <asm/types.h> | ||
5 | |||
4 | struct scatterlist { | 6 | struct scatterlist { |
5 | struct page *page; | 7 | struct page *page; |
6 | unsigned int offset; | 8 | unsigned int offset; |
diff --git a/include/asm-i386/agp.h b/include/asm-i386/agp.h index 9075083bab76..6af173dbf123 100644 --- a/include/asm-i386/agp.h +++ b/include/asm-i386/agp.h | |||
@@ -12,8 +12,10 @@ | |||
12 | * data corruption on some CPUs. | 12 | * data corruption on some CPUs. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | int map_page_into_agp(struct page *page); | 15 | /* Caller's responsibility to call global_flush_tlb() for |
16 | int unmap_page_from_agp(struct page *page); | 16 | * performance reasons */ |
17 | #define map_page_into_agp(page) change_page_attr(page, 1, PAGE_KERNEL_NOCACHE) | ||
18 | #define unmap_page_from_agp(page) change_page_attr(page, 1, PAGE_KERNEL) | ||
17 | #define flush_agp_mappings() global_flush_tlb() | 19 | #define flush_agp_mappings() global_flush_tlb() |
18 | 20 | ||
19 | /* Could use CLFLUSH here if the cpu supports it. But then it would | 21 | /* Could use CLFLUSH here if the cpu supports it. But then it would |
diff --git a/include/asm-i386/scatterlist.h b/include/asm-i386/scatterlist.h index 55d6c953a76e..d7e45a8f1aae 100644 --- a/include/asm-i386/scatterlist.h +++ b/include/asm-i386/scatterlist.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef _I386_SCATTERLIST_H | 1 | #ifndef _I386_SCATTERLIST_H |
2 | #define _I386_SCATTERLIST_H | 2 | #define _I386_SCATTERLIST_H |
3 | 3 | ||
4 | #include <asm/types.h> | ||
5 | |||
4 | struct scatterlist { | 6 | struct scatterlist { |
5 | struct page *page; | 7 | struct page *page; |
6 | unsigned int offset; | 8 | unsigned int offset; |
diff --git a/include/asm-i386/voyager.h b/include/asm-i386/voyager.h index 5b27838905b2..91a9932937ab 100644 --- a/include/asm-i386/voyager.h +++ b/include/asm-i386/voyager.h | |||
@@ -487,15 +487,11 @@ extern struct voyager_qic_cpi *voyager_quad_cpi_addr[NR_CPUS]; | |||
487 | extern struct voyager_SUS *voyager_SUS; | 487 | extern struct voyager_SUS *voyager_SUS; |
488 | 488 | ||
489 | /* variables exported always */ | 489 | /* variables exported always */ |
490 | extern struct task_struct *voyager_thread; | ||
490 | extern int voyager_level; | 491 | extern int voyager_level; |
491 | extern int kvoyagerd_running; | ||
492 | extern struct semaphore kvoyagerd_sem; | ||
493 | extern struct voyager_status voyager_status; | 492 | extern struct voyager_status voyager_status; |
494 | 493 | ||
495 | |||
496 | |||
497 | /* functions exported by the voyager and voyager_smp modules */ | 494 | /* functions exported by the voyager and voyager_smp modules */ |
498 | |||
499 | extern int voyager_cat_readb(__u8 module, __u8 asic, int reg); | 495 | extern int voyager_cat_readb(__u8 module, __u8 asic, int reg); |
500 | extern void voyager_cat_init(void); | 496 | extern void voyager_cat_init(void); |
501 | extern void voyager_detect(struct voyager_bios_info *); | 497 | extern void voyager_detect(struct voyager_bios_info *); |
diff --git a/include/asm-ia64/scatterlist.h b/include/asm-ia64/scatterlist.h index 9dbea8844d5e..a452ea24205a 100644 --- a/include/asm-ia64/scatterlist.h +++ b/include/asm-ia64/scatterlist.h | |||
@@ -6,6 +6,8 @@ | |||
6 | * David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co | 6 | * David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <asm/types.h> | ||
10 | |||
9 | struct scatterlist { | 11 | struct scatterlist { |
10 | struct page *page; | 12 | struct page *page; |
11 | unsigned int offset; | 13 | unsigned int offset; |
diff --git a/include/asm-m32r/scatterlist.h b/include/asm-m32r/scatterlist.h index c2de96cb69ed..352415ff5eb9 100644 --- a/include/asm-m32r/scatterlist.h +++ b/include/asm-m32r/scatterlist.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef _ASM_M32R_SCATTERLIST_H | 1 | #ifndef _ASM_M32R_SCATTERLIST_H |
2 | #define _ASM_M32R_SCATTERLIST_H | 2 | #define _ASM_M32R_SCATTERLIST_H |
3 | 3 | ||
4 | #include <asm/types.h> | ||
5 | |||
4 | struct scatterlist { | 6 | struct scatterlist { |
5 | char * address; /* Location data is to be transferred to, NULL for | 7 | char * address; /* Location data is to be transferred to, NULL for |
6 | * highmem page */ | 8 | * highmem page */ |
diff --git a/include/asm-m68k/adb.h b/include/asm-m68k/adb.h deleted file mode 100644 index 9176b55185bb..000000000000 --- a/include/asm-m68k/adb.h +++ /dev/null | |||
@@ -1,75 +0,0 @@ | |||
1 | /* | ||
2 | * Definitions for talking to ADB and CUDA. The CUDA is a microcontroller | ||
3 | * which controls the ADB, system power, RTC, and various other things on | ||
4 | * later Macintoshes | ||
5 | * | ||
6 | * Copyright (C) 1996 Paul Mackerras. | ||
7 | */ | ||
8 | |||
9 | /* First byte sent to or received from CUDA */ | ||
10 | #define ADB_PACKET 0 | ||
11 | #define CUDA_PACKET 1 | ||
12 | #define ERROR_PACKET 2 | ||
13 | #define TIMER_PACKET 3 | ||
14 | #define POWER_PACKET 4 | ||
15 | #define MACIIC_PACKET 5 | ||
16 | |||
17 | /* ADB commands (2nd byte) */ | ||
18 | #define ADB_BUSRESET 0 | ||
19 | #define ADB_FLUSH(id) (1 + ((id) << 4)) | ||
20 | #define ADB_WRITEREG(id, reg) (8 + (reg) + ((id) << 4)) | ||
21 | #define ADB_READREG(id, reg) (0xc + (reg) + ((id) << 4)) | ||
22 | |||
23 | /* ADB default device IDs (upper 4 bits of 2nd byte) */ | ||
24 | #define ADB_DONGLE 1 /* "software execution control" devices */ | ||
25 | #define ADB_KEYBOARD 2 | ||
26 | #define ADB_MOUSE 3 | ||
27 | #define ADB_TABLET 4 | ||
28 | #define ADB_MODEM 5 | ||
29 | #define ADB_MISC 7 /* maybe a monitor */ | ||
30 | |||
31 | /* CUDA commands (2nd byte) */ | ||
32 | #define CUDA_WARM_START 0 | ||
33 | #define CUDA_AUTOPOLL 1 | ||
34 | #define CUDA_GET_6805_ADDR 2 | ||
35 | #define CUDA_GET_TIME 3 | ||
36 | #define CUDA_GET_PRAM 7 | ||
37 | #define CUDA_SET_6805_ADDR 8 | ||
38 | #define CUDA_SET_TIME 9 | ||
39 | #define CUDA_POWERDOWN 0xa | ||
40 | #define CUDA_POWERUP_TIME 0xb | ||
41 | #define CUDA_SET_PRAM 0xc | ||
42 | #define CUDA_MS_RESET 0xd | ||
43 | #define CUDA_SEND_DFAC 0xe | ||
44 | #define CUDA_RESET_SYSTEM 0x11 | ||
45 | #define CUDA_SET_IPL 0x12 | ||
46 | #define CUDA_SET_AUTO_RATE 0x14 | ||
47 | #define CUDA_GET_AUTO_RATE 0x16 | ||
48 | #define CUDA_SET_DEVICE_LIST 0x19 | ||
49 | #define CUDA_GET_DEVICE_LIST 0x1a | ||
50 | #define CUDA_GET_SET_IIC 0x22 | ||
51 | |||
52 | #ifdef __KERNEL__ | ||
53 | |||
54 | struct adb_request { | ||
55 | unsigned char data[16]; | ||
56 | int nbytes; | ||
57 | unsigned char reply[16]; | ||
58 | int reply_len; | ||
59 | unsigned char reply_expected; | ||
60 | unsigned char sent; | ||
61 | unsigned char got_reply; | ||
62 | void (*done)(struct adb_request *); | ||
63 | void *arg; | ||
64 | struct adb_request *next; | ||
65 | }; | ||
66 | |||
67 | void via_adb_init(void); | ||
68 | int adb_request(struct adb_request *req, | ||
69 | void (*done)(struct adb_request *), int nbytes, ...); | ||
70 | int adb_send_request(struct adb_request *req); | ||
71 | void adb_poll(void); | ||
72 | int adb_register(int default_id, | ||
73 | void (*handler)(unsigned char *, int, struct pt_regs *)); | ||
74 | |||
75 | #endif /* __KERNEL */ | ||
diff --git a/include/asm-m68k/atarikb.h b/include/asm-m68k/atarikb.h index 18926058fde7..546e7da5804f 100644 --- a/include/asm-m68k/atarikb.h +++ b/include/asm-m68k/atarikb.h | |||
@@ -36,5 +36,11 @@ void ikbd_joystick_disable(void); | |||
36 | extern void (*atari_MIDI_interrupt_hook) (void); | 36 | extern void (*atari_MIDI_interrupt_hook) (void); |
37 | /* Hook for mouse driver */ | 37 | /* Hook for mouse driver */ |
38 | extern void (*atari_mouse_interrupt_hook) (char *); | 38 | extern void (*atari_mouse_interrupt_hook) (char *); |
39 | /* Hook for keyboard inputdev driver */ | ||
40 | extern void (*atari_input_keyboard_interrupt_hook) (unsigned char, char); | ||
41 | /* Hook for mouse inputdev driver */ | ||
42 | extern void (*atari_input_mouse_interrupt_hook) (char *); | ||
43 | |||
44 | int atari_keyb_init(void); | ||
39 | 45 | ||
40 | #endif /* _LINUX_ATARIKB_H */ | 46 | #endif /* _LINUX_ATARIKB_H */ |
diff --git a/include/asm-m68knommu/scatterlist.h b/include/asm-m68knommu/scatterlist.h index 2085d6ff8782..4da79d3d3f34 100644 --- a/include/asm-m68knommu/scatterlist.h +++ b/include/asm-m68knommu/scatterlist.h | |||
@@ -2,6 +2,7 @@ | |||
2 | #define _M68KNOMMU_SCATTERLIST_H | 2 | #define _M68KNOMMU_SCATTERLIST_H |
3 | 3 | ||
4 | #include <linux/mm.h> | 4 | #include <linux/mm.h> |
5 | #include <asm/types.h> | ||
5 | 6 | ||
6 | struct scatterlist { | 7 | struct scatterlist { |
7 | struct page *page; | 8 | struct page *page; |
diff --git a/include/asm-mips/scatterlist.h b/include/asm-mips/scatterlist.h index 22634706e9d5..7af104c95b20 100644 --- a/include/asm-mips/scatterlist.h +++ b/include/asm-mips/scatterlist.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef __ASM_SCATTERLIST_H | 1 | #ifndef __ASM_SCATTERLIST_H |
2 | #define __ASM_SCATTERLIST_H | 2 | #define __ASM_SCATTERLIST_H |
3 | 3 | ||
4 | #include <asm/types.h> | ||
5 | |||
4 | struct scatterlist { | 6 | struct scatterlist { |
5 | struct page * page; | 7 | struct page * page; |
6 | unsigned int offset; | 8 | unsigned int offset; |
diff --git a/include/asm-parisc/scatterlist.h b/include/asm-parisc/scatterlist.h index 236c1d0fba33..e7211c748446 100644 --- a/include/asm-parisc/scatterlist.h +++ b/include/asm-parisc/scatterlist.h | |||
@@ -2,6 +2,7 @@ | |||
2 | #define _ASM_PARISC_SCATTERLIST_H | 2 | #define _ASM_PARISC_SCATTERLIST_H |
3 | 3 | ||
4 | #include <asm/page.h> | 4 | #include <asm/page.h> |
5 | #include <asm/types.h> | ||
5 | 6 | ||
6 | struct scatterlist { | 7 | struct scatterlist { |
7 | struct page *page; | 8 | struct page *page; |
diff --git a/include/asm-powerpc/ps3av.h b/include/asm-powerpc/ps3av.h index 43e90ea96136..9efc40f1c778 100644 --- a/include/asm-powerpc/ps3av.h +++ b/include/asm-powerpc/ps3av.h | |||
@@ -18,8 +18,6 @@ | |||
18 | #ifndef _ASM_POWERPC_PS3AV_H_ | 18 | #ifndef _ASM_POWERPC_PS3AV_H_ |
19 | #define _ASM_POWERPC_PS3AV_H_ | 19 | #define _ASM_POWERPC_PS3AV_H_ |
20 | 20 | ||
21 | #include <linux/mutex.h> | ||
22 | |||
23 | /** command for ioctl() **/ | 21 | /** command for ioctl() **/ |
24 | #define PS3AV_VERSION 0x205 /* version of ps3av command */ | 22 | #define PS3AV_VERSION 0x205 /* version of ps3av command */ |
25 | 23 | ||
@@ -643,24 +641,6 @@ struct ps3av_pkt_avb_param { | |||
643 | u8 buf[PS3AV_PKT_AVB_PARAM_MAX_BUF_SIZE]; | 641 | u8 buf[PS3AV_PKT_AVB_PARAM_MAX_BUF_SIZE]; |
644 | }; | 642 | }; |
645 | 643 | ||
646 | struct ps3av { | ||
647 | int available; | ||
648 | struct semaphore sem; | ||
649 | struct semaphore ping; | ||
650 | struct semaphore pong; | ||
651 | struct mutex mutex; | ||
652 | int open_count; | ||
653 | struct ps3_vuart_port_device *dev; | ||
654 | |||
655 | int region; | ||
656 | struct ps3av_pkt_av_get_hw_conf av_hw_conf; | ||
657 | u32 av_port[PS3AV_AV_PORT_MAX + PS3AV_OPT_PORT_MAX]; | ||
658 | u32 opt_port[PS3AV_OPT_PORT_MAX]; | ||
659 | u32 head[PS3AV_HEAD_MAX]; | ||
660 | u32 audio_port; | ||
661 | int ps3av_mode; | ||
662 | int ps3av_mode_old; | ||
663 | }; | ||
664 | 644 | ||
665 | /** command status **/ | 645 | /** command status **/ |
666 | #define PS3AV_STATUS_SUCCESS 0x0000 /* success */ | 646 | #define PS3AV_STATUS_SUCCESS 0x0000 /* success */ |
@@ -718,6 +698,7 @@ static inline void ps3av_cmd_av_monitor_info_dump(const struct ps3av_pkt_av_get_ | |||
718 | extern int ps3av_cmd_video_get_monitor_info(struct ps3av_pkt_av_get_monitor_info *, | 698 | extern int ps3av_cmd_video_get_monitor_info(struct ps3av_pkt_av_get_monitor_info *, |
719 | u32); | 699 | u32); |
720 | 700 | ||
701 | struct ps3_vuart_port_device; | ||
721 | extern int ps3av_vuart_write(struct ps3_vuart_port_device *dev, | 702 | extern int ps3av_vuart_write(struct ps3_vuart_port_device *dev, |
722 | const void *buf, unsigned long size); | 703 | const void *buf, unsigned long size); |
723 | extern int ps3av_vuart_read(struct ps3_vuart_port_device *dev, void *buf, | 704 | extern int ps3av_vuart_read(struct ps3_vuart_port_device *dev, void *buf, |
@@ -725,6 +706,7 @@ extern int ps3av_vuart_read(struct ps3_vuart_port_device *dev, void *buf, | |||
725 | 706 | ||
726 | extern int ps3av_set_video_mode(u32, int); | 707 | extern int ps3av_set_video_mode(u32, int); |
727 | extern int ps3av_set_audio_mode(u32, u32, u32, u32, u32); | 708 | extern int ps3av_set_audio_mode(u32, u32, u32, u32, u32); |
709 | extern int ps3av_get_auto_mode(int); | ||
728 | extern int ps3av_set_mode(u32, int); | 710 | extern int ps3av_set_mode(u32, int); |
729 | extern int ps3av_get_mode(void); | 711 | extern int ps3av_get_mode(void); |
730 | extern int ps3av_get_scanmode(int); | 712 | extern int ps3av_get_scanmode(int); |
diff --git a/include/asm-s390/ccwdev.h b/include/asm-s390/ccwdev.h index cfc81533b9ba..6795ecefd15b 100644 --- a/include/asm-s390/ccwdev.h +++ b/include/asm-s390/ccwdev.h | |||
@@ -164,9 +164,9 @@ extern int ccw_device_resume(struct ccw_device *); | |||
164 | extern int ccw_device_halt(struct ccw_device *, unsigned long); | 164 | extern int ccw_device_halt(struct ccw_device *, unsigned long); |
165 | extern int ccw_device_clear(struct ccw_device *, unsigned long); | 165 | extern int ccw_device_clear(struct ccw_device *, unsigned long); |
166 | 166 | ||
167 | extern int read_dev_chars(struct ccw_device *cdev, void **buffer, int length); | 167 | extern int __deprecated read_dev_chars(struct ccw_device *cdev, void **buffer, int length); |
168 | extern int read_conf_data(struct ccw_device *cdev, void **buffer, int *length); | 168 | extern int __deprecated read_conf_data(struct ccw_device *cdev, void **buffer, int *length); |
169 | extern int read_conf_data_lpm(struct ccw_device *cdev, void **buffer, | 169 | extern int __deprecated read_conf_data_lpm(struct ccw_device *cdev, void **buffer, |
170 | int *length, __u8 lpm); | 170 | int *length, __u8 lpm); |
171 | 171 | ||
172 | extern int ccw_device_set_online(struct ccw_device *cdev); | 172 | extern int ccw_device_set_online(struct ccw_device *cdev); |
diff --git a/include/asm-s390/elf.h b/include/asm-s390/elf.h index c0d629d61d3e..91d06325cc79 100644 --- a/include/asm-s390/elf.h +++ b/include/asm-s390/elf.h | |||
@@ -188,7 +188,8 @@ static inline int dump_task_fpu(struct task_struct *tsk, elf_fpregset_t *fpregs) | |||
188 | /* This yields a mask that user programs can use to figure out what | 188 | /* This yields a mask that user programs can use to figure out what |
189 | instruction set this CPU supports. */ | 189 | instruction set this CPU supports. */ |
190 | 190 | ||
191 | #define ELF_HWCAP (0) | 191 | extern unsigned long elf_hwcap; |
192 | #define ELF_HWCAP (elf_hwcap) | ||
192 | 193 | ||
193 | /* This yields a string that ld.so will use to load implementation | 194 | /* This yields a string that ld.so will use to load implementation |
194 | specific libraries for optimization. This is more specific in | 195 | specific libraries for optimization. This is more specific in |
@@ -197,7 +198,9 @@ static inline int dump_task_fpu(struct task_struct *tsk, elf_fpregset_t *fpregs) | |||
197 | For the moment, we have only optimizations for the Intel generations, | 198 | For the moment, we have only optimizations for the Intel generations, |
198 | but that could change... */ | 199 | but that could change... */ |
199 | 200 | ||
200 | #define ELF_PLATFORM (NULL) | 201 | #define ELF_PLATFORM_SIZE 8 |
202 | extern char elf_platform[]; | ||
203 | #define ELF_PLATFORM (elf_platform) | ||
201 | 204 | ||
202 | #ifndef __s390x__ | 205 | #ifndef __s390x__ |
203 | #define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX) | 206 | #define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX) |
diff --git a/include/asm-s390/kdebug.h b/include/asm-s390/kdebug.h index 1b50f89819a4..d2d7ad276148 100644 --- a/include/asm-s390/kdebug.h +++ b/include/asm-s390/kdebug.h | |||
@@ -22,8 +22,21 @@ struct die_args { | |||
22 | */ | 22 | */ |
23 | extern int register_die_notifier(struct notifier_block *); | 23 | extern int register_die_notifier(struct notifier_block *); |
24 | extern int unregister_die_notifier(struct notifier_block *); | 24 | extern int unregister_die_notifier(struct notifier_block *); |
25 | extern int register_page_fault_notifier(struct notifier_block *); | 25 | |
26 | extern int unregister_page_fault_notifier(struct notifier_block *); | 26 | /* |
27 | * These are only here because kprobes.c wants them to implement a | ||
28 | * blatant layering violation. Will hopefully go away soon once all | ||
29 | * architectures are updated. | ||
30 | */ | ||
31 | static inline int register_page_fault_notifier(struct notifier_block *nb) | ||
32 | { | ||
33 | return 0; | ||
34 | } | ||
35 | static inline int unregister_page_fault_notifier(struct notifier_block *nb) | ||
36 | { | ||
37 | return 0; | ||
38 | } | ||
39 | |||
27 | extern struct atomic_notifier_head s390die_chain; | 40 | extern struct atomic_notifier_head s390die_chain; |
28 | 41 | ||
29 | enum die_val { | 42 | enum die_val { |
@@ -39,7 +52,6 @@ enum die_val { | |||
39 | DIE_GPF, | 52 | DIE_GPF, |
40 | DIE_CALL, | 53 | DIE_CALL, |
41 | DIE_NMI_IPI, | 54 | DIE_NMI_IPI, |
42 | DIE_PAGE_FAULT, | ||
43 | }; | 55 | }; |
44 | 56 | ||
45 | static inline int notify_die(enum die_val val, const char *str, | 57 | static inline int notify_die(enum die_val val, const char *str, |
diff --git a/include/asm-s390/kprobes.h b/include/asm-s390/kprobes.h index b847ff0ec3fa..830fe4c4eea6 100644 --- a/include/asm-s390/kprobes.h +++ b/include/asm-s390/kprobes.h | |||
@@ -97,18 +97,10 @@ void kretprobe_trampoline(void); | |||
97 | int is_prohibited_opcode(kprobe_opcode_t *instruction); | 97 | int is_prohibited_opcode(kprobe_opcode_t *instruction); |
98 | void get_instruction_type(struct arch_specific_insn *ainsn); | 98 | void get_instruction_type(struct arch_specific_insn *ainsn); |
99 | 99 | ||
100 | int kprobe_fault_handler(struct pt_regs *regs, int trapnr); | ||
101 | int kprobe_exceptions_notify(struct notifier_block *self, | ||
102 | unsigned long val, void *data); | ||
103 | |||
100 | #define flush_insn_slot(p) do { } while (0) | 104 | #define flush_insn_slot(p) do { } while (0) |
101 | 105 | ||
102 | #endif /* _ASM_S390_KPROBES_H */ | 106 | #endif /* _ASM_S390_KPROBES_H */ |
103 | |||
104 | #ifdef CONFIG_KPROBES | ||
105 | |||
106 | extern int kprobe_exceptions_notify(struct notifier_block *self, | ||
107 | unsigned long val, void *data); | ||
108 | #else /* !CONFIG_KPROBES */ | ||
109 | static inline int kprobe_exceptions_notify(struct notifier_block *self, | ||
110 | unsigned long val, void *data) | ||
111 | { | ||
112 | return 0; | ||
113 | } | ||
114 | #endif | ||
diff --git a/include/asm-s390/lowcore.h b/include/asm-s390/lowcore.h index ffc9788a21a7..801a6fd35b5b 100644 --- a/include/asm-s390/lowcore.h +++ b/include/asm-s390/lowcore.h | |||
@@ -229,17 +229,19 @@ struct _lowcore | |||
229 | __u16 subchannel_nr; /* 0x0ba */ | 229 | __u16 subchannel_nr; /* 0x0ba */ |
230 | __u32 io_int_parm; /* 0x0bc */ | 230 | __u32 io_int_parm; /* 0x0bc */ |
231 | __u32 io_int_word; /* 0x0c0 */ | 231 | __u32 io_int_word; /* 0x0c0 */ |
232 | __u8 pad3[0xD4-0xC4]; /* 0x0c4 */ | 232 | __u8 pad3[0xc8-0xc4]; /* 0x0c4 */ |
233 | __u32 stfl_fac_list; /* 0x0c8 */ | ||
234 | __u8 pad4[0xd4-0xcc]; /* 0x0cc */ | ||
233 | __u32 extended_save_area_addr; /* 0x0d4 */ | 235 | __u32 extended_save_area_addr; /* 0x0d4 */ |
234 | __u32 cpu_timer_save_area[2]; /* 0x0d8 */ | 236 | __u32 cpu_timer_save_area[2]; /* 0x0d8 */ |
235 | __u32 clock_comp_save_area[2]; /* 0x0e0 */ | 237 | __u32 clock_comp_save_area[2]; /* 0x0e0 */ |
236 | __u32 mcck_interruption_code[2]; /* 0x0e8 */ | 238 | __u32 mcck_interruption_code[2]; /* 0x0e8 */ |
237 | __u8 pad4[0xf4-0xf0]; /* 0x0f0 */ | 239 | __u8 pad5[0xf4-0xf0]; /* 0x0f0 */ |
238 | __u32 external_damage_code; /* 0x0f4 */ | 240 | __u32 external_damage_code; /* 0x0f4 */ |
239 | __u32 failing_storage_address; /* 0x0f8 */ | 241 | __u32 failing_storage_address; /* 0x0f8 */ |
240 | __u8 pad5[0x100-0xfc]; /* 0x0fc */ | 242 | __u8 pad6[0x100-0xfc]; /* 0x0fc */ |
241 | __u32 st_status_fixed_logout[4];/* 0x100 */ | 243 | __u32 st_status_fixed_logout[4];/* 0x100 */ |
242 | __u8 pad6[0x120-0x110]; /* 0x110 */ | 244 | __u8 pad7[0x120-0x110]; /* 0x110 */ |
243 | __u32 access_regs_save_area[16];/* 0x120 */ | 245 | __u32 access_regs_save_area[16];/* 0x120 */ |
244 | __u32 floating_pt_save_area[8]; /* 0x160 */ | 246 | __u32 floating_pt_save_area[8]; /* 0x160 */ |
245 | __u32 gpregs_save_area[16]; /* 0x180 */ | 247 | __u32 gpregs_save_area[16]; /* 0x180 */ |
diff --git a/include/asm-sh/scatterlist.h b/include/asm-sh/scatterlist.h index d19e7cd3b023..b9ae53c38365 100644 --- a/include/asm-sh/scatterlist.h +++ b/include/asm-sh/scatterlist.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef __ASM_SH_SCATTERLIST_H | 1 | #ifndef __ASM_SH_SCATTERLIST_H |
2 | #define __ASM_SH_SCATTERLIST_H | 2 | #define __ASM_SH_SCATTERLIST_H |
3 | 3 | ||
4 | #include <asm/types.h> | ||
5 | |||
4 | struct scatterlist { | 6 | struct scatterlist { |
5 | struct page * page; /* Location for highmem page, if any */ | 7 | struct page * page; /* Location for highmem page, if any */ |
6 | unsigned int offset;/* for highmem, page offset */ | 8 | unsigned int offset;/* for highmem, page offset */ |
diff --git a/include/asm-sh64/scatterlist.h b/include/asm-sh64/scatterlist.h index 5d8fa32d2e9d..1c723f2d7a95 100644 --- a/include/asm-sh64/scatterlist.h +++ b/include/asm-sh64/scatterlist.h | |||
@@ -11,6 +11,8 @@ | |||
11 | #ifndef __ASM_SH64_SCATTERLIST_H | 11 | #ifndef __ASM_SH64_SCATTERLIST_H |
12 | #define __ASM_SH64_SCATTERLIST_H | 12 | #define __ASM_SH64_SCATTERLIST_H |
13 | 13 | ||
14 | #include <asm/types.h> | ||
15 | |||
14 | struct scatterlist { | 16 | struct scatterlist { |
15 | struct page * page; /* Location for highmem page, if any */ | 17 | struct page * page; /* Location for highmem page, if any */ |
16 | unsigned int offset;/* for highmem, page offset */ | 18 | unsigned int offset;/* for highmem, page offset */ |
diff --git a/include/asm-sparc64/scatterlist.h b/include/asm-sparc64/scatterlist.h index ec4f3c63fe98..048fdb40e81d 100644 --- a/include/asm-sparc64/scatterlist.h +++ b/include/asm-sparc64/scatterlist.h | |||
@@ -3,6 +3,7 @@ | |||
3 | #define _SPARC64_SCATTERLIST_H | 3 | #define _SPARC64_SCATTERLIST_H |
4 | 4 | ||
5 | #include <asm/page.h> | 5 | #include <asm/page.h> |
6 | #include <asm/types.h> | ||
6 | 7 | ||
7 | struct scatterlist { | 8 | struct scatterlist { |
8 | struct page *page; | 9 | struct page *page; |
diff --git a/include/asm-v850/scatterlist.h b/include/asm-v850/scatterlist.h index af1cba69a526..56f402920db9 100644 --- a/include/asm-v850/scatterlist.h +++ b/include/asm-v850/scatterlist.h | |||
@@ -14,6 +14,8 @@ | |||
14 | #ifndef __V850_SCATTERLIST_H__ | 14 | #ifndef __V850_SCATTERLIST_H__ |
15 | #define __V850_SCATTERLIST_H__ | 15 | #define __V850_SCATTERLIST_H__ |
16 | 16 | ||
17 | #include <asm/types.h> | ||
18 | |||
17 | struct scatterlist { | 19 | struct scatterlist { |
18 | struct page *page; | 20 | struct page *page; |
19 | unsigned offset; | 21 | unsigned offset; |
diff --git a/include/asm-x86_64/agp.h b/include/asm-x86_64/agp.h index 06c52ee9c06b..de338666f3f9 100644 --- a/include/asm-x86_64/agp.h +++ b/include/asm-x86_64/agp.h | |||
@@ -10,8 +10,10 @@ | |||
10 | * with different cachability attributes for the same page. | 10 | * with different cachability attributes for the same page. |
11 | */ | 11 | */ |
12 | 12 | ||
13 | int map_page_into_agp(struct page *page); | 13 | /* Caller's responsibility to call global_flush_tlb() for |
14 | int unmap_page_from_agp(struct page *page); | 14 | * performance reasons */ |
15 | #define map_page_into_agp(page) change_page_attr(page, 1, PAGE_KERNEL_NOCACHE) | ||
16 | #define unmap_page_from_agp(page) change_page_attr(page, 1, PAGE_KERNEL) | ||
15 | #define flush_agp_mappings() global_flush_tlb() | 17 | #define flush_agp_mappings() global_flush_tlb() |
16 | 18 | ||
17 | /* Could use CLFLUSH here if the cpu supports it. But then it would | 19 | /* Could use CLFLUSH here if the cpu supports it. But then it would |
diff --git a/include/asm-x86_64/scatterlist.h b/include/asm-x86_64/scatterlist.h index 49d89f8129cd..eaf7ada27e14 100644 --- a/include/asm-x86_64/scatterlist.h +++ b/include/asm-x86_64/scatterlist.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef _X8664_SCATTERLIST_H | 1 | #ifndef _X8664_SCATTERLIST_H |
2 | #define _X8664_SCATTERLIST_H | 2 | #define _X8664_SCATTERLIST_H |
3 | 3 | ||
4 | #include <asm/types.h> | ||
5 | |||
4 | struct scatterlist { | 6 | struct scatterlist { |
5 | struct page *page; | 7 | struct page *page; |
6 | unsigned int offset; | 8 | unsigned int offset; |
diff --git a/include/asm-xtensa/scatterlist.h b/include/asm-xtensa/scatterlist.h index 38a2b9acd658..ca337a294290 100644 --- a/include/asm-xtensa/scatterlist.h +++ b/include/asm-xtensa/scatterlist.h | |||
@@ -11,6 +11,8 @@ | |||
11 | #ifndef _XTENSA_SCATTERLIST_H | 11 | #ifndef _XTENSA_SCATTERLIST_H |
12 | #define _XTENSA_SCATTERLIST_H | 12 | #define _XTENSA_SCATTERLIST_H |
13 | 13 | ||
14 | #include <asm/types.h> | ||
15 | |||
14 | struct scatterlist { | 16 | struct scatterlist { |
15 | struct page *page; | 17 | struct page *page; |
16 | unsigned int offset; | 18 | unsigned int offset; |
diff --git a/include/crypto/algapi.h b/include/crypto/algapi.h index 4e05e93ff681..b2b1e6efd812 100644 --- a/include/crypto/algapi.h +++ b/include/crypto/algapi.h | |||
@@ -13,8 +13,11 @@ | |||
13 | #define _CRYPTO_ALGAPI_H | 13 | #define _CRYPTO_ALGAPI_H |
14 | 14 | ||
15 | #include <linux/crypto.h> | 15 | #include <linux/crypto.h> |
16 | #include <linux/list.h> | ||
17 | #include <linux/kernel.h> | ||
16 | 18 | ||
17 | struct module; | 19 | struct module; |
20 | struct rtattr; | ||
18 | struct seq_file; | 21 | struct seq_file; |
19 | 22 | ||
20 | struct crypto_type { | 23 | struct crypto_type { |
@@ -38,7 +41,7 @@ struct crypto_template { | |||
38 | struct hlist_head instances; | 41 | struct hlist_head instances; |
39 | struct module *module; | 42 | struct module *module; |
40 | 43 | ||
41 | struct crypto_instance *(*alloc)(void *param, unsigned int len); | 44 | struct crypto_instance *(*alloc)(struct rtattr **tb); |
42 | void (*free)(struct crypto_instance *inst); | 45 | void (*free)(struct crypto_instance *inst); |
43 | 46 | ||
44 | char name[CRYPTO_MAX_ALG_NAME]; | 47 | char name[CRYPTO_MAX_ALG_NAME]; |
@@ -48,6 +51,15 @@ struct crypto_spawn { | |||
48 | struct list_head list; | 51 | struct list_head list; |
49 | struct crypto_alg *alg; | 52 | struct crypto_alg *alg; |
50 | struct crypto_instance *inst; | 53 | struct crypto_instance *inst; |
54 | u32 mask; | ||
55 | }; | ||
56 | |||
57 | struct crypto_queue { | ||
58 | struct list_head list; | ||
59 | struct list_head *backlog; | ||
60 | |||
61 | unsigned int qlen; | ||
62 | unsigned int max_qlen; | ||
51 | }; | 63 | }; |
52 | 64 | ||
53 | struct scatter_walk { | 65 | struct scatter_walk { |
@@ -81,6 +93,7 @@ struct blkcipher_walk { | |||
81 | int flags; | 93 | int flags; |
82 | }; | 94 | }; |
83 | 95 | ||
96 | extern const struct crypto_type crypto_ablkcipher_type; | ||
84 | extern const struct crypto_type crypto_blkcipher_type; | 97 | extern const struct crypto_type crypto_blkcipher_type; |
85 | extern const struct crypto_type crypto_hash_type; | 98 | extern const struct crypto_type crypto_hash_type; |
86 | 99 | ||
@@ -91,16 +104,23 @@ void crypto_unregister_template(struct crypto_template *tmpl); | |||
91 | struct crypto_template *crypto_lookup_template(const char *name); | 104 | struct crypto_template *crypto_lookup_template(const char *name); |
92 | 105 | ||
93 | int crypto_init_spawn(struct crypto_spawn *spawn, struct crypto_alg *alg, | 106 | int crypto_init_spawn(struct crypto_spawn *spawn, struct crypto_alg *alg, |
94 | struct crypto_instance *inst); | 107 | struct crypto_instance *inst, u32 mask); |
95 | void crypto_drop_spawn(struct crypto_spawn *spawn); | 108 | void crypto_drop_spawn(struct crypto_spawn *spawn); |
96 | struct crypto_tfm *crypto_spawn_tfm(struct crypto_spawn *spawn, u32 type, | 109 | struct crypto_tfm *crypto_spawn_tfm(struct crypto_spawn *spawn, u32 type, |
97 | u32 mask); | 110 | u32 mask); |
98 | 111 | ||
99 | struct crypto_alg *crypto_get_attr_alg(void *param, unsigned int len, | 112 | struct crypto_attr_type *crypto_get_attr_type(struct rtattr **tb); |
100 | u32 type, u32 mask); | 113 | int crypto_check_attr_type(struct rtattr **tb, u32 type); |
114 | struct crypto_alg *crypto_get_attr_alg(struct rtattr **tb, u32 type, u32 mask); | ||
101 | struct crypto_instance *crypto_alloc_instance(const char *name, | 115 | struct crypto_instance *crypto_alloc_instance(const char *name, |
102 | struct crypto_alg *alg); | 116 | struct crypto_alg *alg); |
103 | 117 | ||
118 | void crypto_init_queue(struct crypto_queue *queue, unsigned int max_qlen); | ||
119 | int crypto_enqueue_request(struct crypto_queue *queue, | ||
120 | struct crypto_async_request *request); | ||
121 | struct crypto_async_request *crypto_dequeue_request(struct crypto_queue *queue); | ||
122 | int crypto_tfm_in_queue(struct crypto_queue *queue, struct crypto_tfm *tfm); | ||
123 | |||
104 | int blkcipher_walk_done(struct blkcipher_desc *desc, | 124 | int blkcipher_walk_done(struct blkcipher_desc *desc, |
105 | struct blkcipher_walk *walk, int err); | 125 | struct blkcipher_walk *walk, int err); |
106 | int blkcipher_walk_virt(struct blkcipher_desc *desc, | 126 | int blkcipher_walk_virt(struct blkcipher_desc *desc, |
@@ -118,11 +138,37 @@ static inline void *crypto_tfm_ctx_aligned(struct crypto_tfm *tfm) | |||
118 | return (void *)ALIGN(addr, align); | 138 | return (void *)ALIGN(addr, align); |
119 | } | 139 | } |
120 | 140 | ||
141 | static inline struct crypto_instance *crypto_tfm_alg_instance( | ||
142 | struct crypto_tfm *tfm) | ||
143 | { | ||
144 | return container_of(tfm->__crt_alg, struct crypto_instance, alg); | ||
145 | } | ||
146 | |||
121 | static inline void *crypto_instance_ctx(struct crypto_instance *inst) | 147 | static inline void *crypto_instance_ctx(struct crypto_instance *inst) |
122 | { | 148 | { |
123 | return inst->__ctx; | 149 | return inst->__ctx; |
124 | } | 150 | } |
125 | 151 | ||
152 | static inline struct ablkcipher_alg *crypto_ablkcipher_alg( | ||
153 | struct crypto_ablkcipher *tfm) | ||
154 | { | ||
155 | return &crypto_ablkcipher_tfm(tfm)->__crt_alg->cra_ablkcipher; | ||
156 | } | ||
157 | |||
158 | static inline void *crypto_ablkcipher_ctx(struct crypto_ablkcipher *tfm) | ||
159 | { | ||
160 | return crypto_tfm_ctx(&tfm->base); | ||
161 | } | ||
162 | |||
163 | static inline struct crypto_blkcipher *crypto_spawn_blkcipher( | ||
164 | struct crypto_spawn *spawn) | ||
165 | { | ||
166 | u32 type = CRYPTO_ALG_TYPE_BLKCIPHER; | ||
167 | u32 mask = CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_ASYNC; | ||
168 | |||
169 | return __crypto_blkcipher_cast(crypto_spawn_tfm(spawn, type, mask)); | ||
170 | } | ||
171 | |||
126 | static inline void *crypto_blkcipher_ctx(struct crypto_blkcipher *tfm) | 172 | static inline void *crypto_blkcipher_ctx(struct crypto_blkcipher *tfm) |
127 | { | 173 | { |
128 | return crypto_tfm_ctx(&tfm->base); | 174 | return crypto_tfm_ctx(&tfm->base); |
@@ -170,5 +216,35 @@ static inline void blkcipher_walk_init(struct blkcipher_walk *walk, | |||
170 | walk->total = nbytes; | 216 | walk->total = nbytes; |
171 | } | 217 | } |
172 | 218 | ||
219 | static inline struct crypto_async_request *crypto_get_backlog( | ||
220 | struct crypto_queue *queue) | ||
221 | { | ||
222 | return queue->backlog == &queue->list ? NULL : | ||
223 | container_of(queue->backlog, struct crypto_async_request, list); | ||
224 | } | ||
225 | |||
226 | static inline int ablkcipher_enqueue_request(struct ablkcipher_alg *alg, | ||
227 | struct ablkcipher_request *request) | ||
228 | { | ||
229 | return crypto_enqueue_request(alg->queue, &request->base); | ||
230 | } | ||
231 | |||
232 | static inline struct ablkcipher_request *ablkcipher_dequeue_request( | ||
233 | struct ablkcipher_alg *alg) | ||
234 | { | ||
235 | return ablkcipher_request_cast(crypto_dequeue_request(alg->queue)); | ||
236 | } | ||
237 | |||
238 | static inline void *ablkcipher_request_ctx(struct ablkcipher_request *req) | ||
239 | { | ||
240 | return req->__ctx; | ||
241 | } | ||
242 | |||
243 | static inline int ablkcipher_tfm_in_queue(struct crypto_ablkcipher *tfm) | ||
244 | { | ||
245 | return crypto_tfm_in_queue(crypto_ablkcipher_alg(tfm)->queue, | ||
246 | crypto_ablkcipher_tfm(tfm)); | ||
247 | } | ||
248 | |||
173 | #endif /* _CRYPTO_ALGAPI_H */ | 249 | #endif /* _CRYPTO_ALGAPI_H */ |
174 | 250 | ||
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index cb9b2ec8849c..963051a967d6 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h | |||
@@ -265,7 +265,6 @@ struct freq_attr { | |||
265 | /********************************************************************* | 265 | /********************************************************************* |
266 | * CPUFREQ 2.6. INTERFACE * | 266 | * CPUFREQ 2.6. INTERFACE * |
267 | *********************************************************************/ | 267 | *********************************************************************/ |
268 | int cpufreq_set_policy(struct cpufreq_policy *policy); | ||
269 | int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu); | 268 | int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu); |
270 | int cpufreq_update_policy(unsigned int cpu); | 269 | int cpufreq_update_policy(unsigned int cpu); |
271 | 270 | ||
diff --git a/include/linux/crypto.h b/include/linux/crypto.h index 779aa78ee643..0de7e2ace822 100644 --- a/include/linux/crypto.h +++ b/include/linux/crypto.h | |||
@@ -56,6 +56,7 @@ | |||
56 | 56 | ||
57 | #define CRYPTO_TFM_REQ_WEAK_KEY 0x00000100 | 57 | #define CRYPTO_TFM_REQ_WEAK_KEY 0x00000100 |
58 | #define CRYPTO_TFM_REQ_MAY_SLEEP 0x00000200 | 58 | #define CRYPTO_TFM_REQ_MAY_SLEEP 0x00000200 |
59 | #define CRYPTO_TFM_REQ_MAY_BACKLOG 0x00000400 | ||
59 | #define CRYPTO_TFM_RES_WEAK_KEY 0x00100000 | 60 | #define CRYPTO_TFM_RES_WEAK_KEY 0x00100000 |
60 | #define CRYPTO_TFM_RES_BAD_KEY_LEN 0x00200000 | 61 | #define CRYPTO_TFM_RES_BAD_KEY_LEN 0x00200000 |
61 | #define CRYPTO_TFM_RES_BAD_KEY_SCHED 0x00400000 | 62 | #define CRYPTO_TFM_RES_BAD_KEY_SCHED 0x00400000 |
@@ -88,11 +89,38 @@ | |||
88 | #endif | 89 | #endif |
89 | 90 | ||
90 | struct scatterlist; | 91 | struct scatterlist; |
92 | struct crypto_ablkcipher; | ||
93 | struct crypto_async_request; | ||
91 | struct crypto_blkcipher; | 94 | struct crypto_blkcipher; |
92 | struct crypto_hash; | 95 | struct crypto_hash; |
96 | struct crypto_queue; | ||
93 | struct crypto_tfm; | 97 | struct crypto_tfm; |
94 | struct crypto_type; | 98 | struct crypto_type; |
95 | 99 | ||
100 | typedef void (*crypto_completion_t)(struct crypto_async_request *req, int err); | ||
101 | |||
102 | struct crypto_async_request { | ||
103 | struct list_head list; | ||
104 | crypto_completion_t complete; | ||
105 | void *data; | ||
106 | struct crypto_tfm *tfm; | ||
107 | |||
108 | u32 flags; | ||
109 | }; | ||
110 | |||
111 | struct ablkcipher_request { | ||
112 | struct crypto_async_request base; | ||
113 | |||
114 | unsigned int nbytes; | ||
115 | |||
116 | void *info; | ||
117 | |||
118 | struct scatterlist *src; | ||
119 | struct scatterlist *dst; | ||
120 | |||
121 | void *__ctx[] CRYPTO_MINALIGN_ATTR; | ||
122 | }; | ||
123 | |||
96 | struct blkcipher_desc { | 124 | struct blkcipher_desc { |
97 | struct crypto_blkcipher *tfm; | 125 | struct crypto_blkcipher *tfm; |
98 | void *info; | 126 | void *info; |
@@ -116,6 +144,19 @@ struct hash_desc { | |||
116 | * Algorithms: modular crypto algorithm implementations, managed | 144 | * Algorithms: modular crypto algorithm implementations, managed |
117 | * via crypto_register_alg() and crypto_unregister_alg(). | 145 | * via crypto_register_alg() and crypto_unregister_alg(). |
118 | */ | 146 | */ |
147 | struct ablkcipher_alg { | ||
148 | int (*setkey)(struct crypto_ablkcipher *tfm, const u8 *key, | ||
149 | unsigned int keylen); | ||
150 | int (*encrypt)(struct ablkcipher_request *req); | ||
151 | int (*decrypt)(struct ablkcipher_request *req); | ||
152 | |||
153 | struct crypto_queue *queue; | ||
154 | |||
155 | unsigned int min_keysize; | ||
156 | unsigned int max_keysize; | ||
157 | unsigned int ivsize; | ||
158 | }; | ||
159 | |||
119 | struct blkcipher_alg { | 160 | struct blkcipher_alg { |
120 | int (*setkey)(struct crypto_tfm *tfm, const u8 *key, | 161 | int (*setkey)(struct crypto_tfm *tfm, const u8 *key, |
121 | unsigned int keylen); | 162 | unsigned int keylen); |
@@ -170,6 +211,7 @@ struct compress_alg { | |||
170 | unsigned int slen, u8 *dst, unsigned int *dlen); | 211 | unsigned int slen, u8 *dst, unsigned int *dlen); |
171 | }; | 212 | }; |
172 | 213 | ||
214 | #define cra_ablkcipher cra_u.ablkcipher | ||
173 | #define cra_blkcipher cra_u.blkcipher | 215 | #define cra_blkcipher cra_u.blkcipher |
174 | #define cra_cipher cra_u.cipher | 216 | #define cra_cipher cra_u.cipher |
175 | #define cra_digest cra_u.digest | 217 | #define cra_digest cra_u.digest |
@@ -194,6 +236,7 @@ struct crypto_alg { | |||
194 | const struct crypto_type *cra_type; | 236 | const struct crypto_type *cra_type; |
195 | 237 | ||
196 | union { | 238 | union { |
239 | struct ablkcipher_alg ablkcipher; | ||
197 | struct blkcipher_alg blkcipher; | 240 | struct blkcipher_alg blkcipher; |
198 | struct cipher_alg cipher; | 241 | struct cipher_alg cipher; |
199 | struct digest_alg digest; | 242 | struct digest_alg digest; |
@@ -232,6 +275,15 @@ static inline int crypto_has_alg(const char *name, u32 type, u32 mask) | |||
232 | * crypto_free_*(), as well as the various helpers below. | 275 | * crypto_free_*(), as well as the various helpers below. |
233 | */ | 276 | */ |
234 | 277 | ||
278 | struct ablkcipher_tfm { | ||
279 | int (*setkey)(struct crypto_ablkcipher *tfm, const u8 *key, | ||
280 | unsigned int keylen); | ||
281 | int (*encrypt)(struct ablkcipher_request *req); | ||
282 | int (*decrypt)(struct ablkcipher_request *req); | ||
283 | unsigned int ivsize; | ||
284 | unsigned int reqsize; | ||
285 | }; | ||
286 | |||
235 | struct blkcipher_tfm { | 287 | struct blkcipher_tfm { |
236 | void *iv; | 288 | void *iv; |
237 | int (*setkey)(struct crypto_tfm *tfm, const u8 *key, | 289 | int (*setkey)(struct crypto_tfm *tfm, const u8 *key, |
@@ -290,6 +342,7 @@ struct compress_tfm { | |||
290 | u8 *dst, unsigned int *dlen); | 342 | u8 *dst, unsigned int *dlen); |
291 | }; | 343 | }; |
292 | 344 | ||
345 | #define crt_ablkcipher crt_u.ablkcipher | ||
293 | #define crt_blkcipher crt_u.blkcipher | 346 | #define crt_blkcipher crt_u.blkcipher |
294 | #define crt_cipher crt_u.cipher | 347 | #define crt_cipher crt_u.cipher |
295 | #define crt_hash crt_u.hash | 348 | #define crt_hash crt_u.hash |
@@ -300,6 +353,7 @@ struct crypto_tfm { | |||
300 | u32 crt_flags; | 353 | u32 crt_flags; |
301 | 354 | ||
302 | union { | 355 | union { |
356 | struct ablkcipher_tfm ablkcipher; | ||
303 | struct blkcipher_tfm blkcipher; | 357 | struct blkcipher_tfm blkcipher; |
304 | struct cipher_tfm cipher; | 358 | struct cipher_tfm cipher; |
305 | struct hash_tfm hash; | 359 | struct hash_tfm hash; |
@@ -311,6 +365,10 @@ struct crypto_tfm { | |||
311 | void *__crt_ctx[] CRYPTO_MINALIGN_ATTR; | 365 | void *__crt_ctx[] CRYPTO_MINALIGN_ATTR; |
312 | }; | 366 | }; |
313 | 367 | ||
368 | struct crypto_ablkcipher { | ||
369 | struct crypto_tfm base; | ||
370 | }; | ||
371 | |||
314 | struct crypto_blkcipher { | 372 | struct crypto_blkcipher { |
315 | struct crypto_tfm base; | 373 | struct crypto_tfm base; |
316 | }; | 374 | }; |
@@ -330,12 +388,21 @@ struct crypto_hash { | |||
330 | enum { | 388 | enum { |
331 | CRYPTOA_UNSPEC, | 389 | CRYPTOA_UNSPEC, |
332 | CRYPTOA_ALG, | 390 | CRYPTOA_ALG, |
391 | CRYPTOA_TYPE, | ||
392 | __CRYPTOA_MAX, | ||
333 | }; | 393 | }; |
334 | 394 | ||
395 | #define CRYPTOA_MAX (__CRYPTOA_MAX - 1) | ||
396 | |||
335 | struct crypto_attr_alg { | 397 | struct crypto_attr_alg { |
336 | char name[CRYPTO_MAX_ALG_NAME]; | 398 | char name[CRYPTO_MAX_ALG_NAME]; |
337 | }; | 399 | }; |
338 | 400 | ||
401 | struct crypto_attr_type { | ||
402 | u32 type; | ||
403 | u32 mask; | ||
404 | }; | ||
405 | |||
339 | /* | 406 | /* |
340 | * Transform user interface. | 407 | * Transform user interface. |
341 | */ | 408 | */ |
@@ -411,6 +478,167 @@ static inline unsigned int crypto_tfm_ctx_alignment(void) | |||
411 | /* | 478 | /* |
412 | * API wrappers. | 479 | * API wrappers. |
413 | */ | 480 | */ |
481 | static inline struct crypto_ablkcipher *__crypto_ablkcipher_cast( | ||
482 | struct crypto_tfm *tfm) | ||
483 | { | ||
484 | return (struct crypto_ablkcipher *)tfm; | ||
485 | } | ||
486 | |||
487 | static inline struct crypto_ablkcipher *crypto_alloc_ablkcipher( | ||
488 | const char *alg_name, u32 type, u32 mask) | ||
489 | { | ||
490 | type &= ~CRYPTO_ALG_TYPE_MASK; | ||
491 | type |= CRYPTO_ALG_TYPE_BLKCIPHER; | ||
492 | mask |= CRYPTO_ALG_TYPE_MASK; | ||
493 | |||
494 | return __crypto_ablkcipher_cast( | ||
495 | crypto_alloc_base(alg_name, type, mask)); | ||
496 | } | ||
497 | |||
498 | static inline struct crypto_tfm *crypto_ablkcipher_tfm( | ||
499 | struct crypto_ablkcipher *tfm) | ||
500 | { | ||
501 | return &tfm->base; | ||
502 | } | ||
503 | |||
504 | static inline void crypto_free_ablkcipher(struct crypto_ablkcipher *tfm) | ||
505 | { | ||
506 | crypto_free_tfm(crypto_ablkcipher_tfm(tfm)); | ||
507 | } | ||
508 | |||
509 | static inline int crypto_has_ablkcipher(const char *alg_name, u32 type, | ||
510 | u32 mask) | ||
511 | { | ||
512 | type &= ~CRYPTO_ALG_TYPE_MASK; | ||
513 | type |= CRYPTO_ALG_TYPE_BLKCIPHER; | ||
514 | mask |= CRYPTO_ALG_TYPE_MASK; | ||
515 | |||
516 | return crypto_has_alg(alg_name, type, mask); | ||
517 | } | ||
518 | |||
519 | static inline struct ablkcipher_tfm *crypto_ablkcipher_crt( | ||
520 | struct crypto_ablkcipher *tfm) | ||
521 | { | ||
522 | return &crypto_ablkcipher_tfm(tfm)->crt_ablkcipher; | ||
523 | } | ||
524 | |||
525 | static inline unsigned int crypto_ablkcipher_ivsize( | ||
526 | struct crypto_ablkcipher *tfm) | ||
527 | { | ||
528 | return crypto_ablkcipher_crt(tfm)->ivsize; | ||
529 | } | ||
530 | |||
531 | static inline unsigned int crypto_ablkcipher_blocksize( | ||
532 | struct crypto_ablkcipher *tfm) | ||
533 | { | ||
534 | return crypto_tfm_alg_blocksize(crypto_ablkcipher_tfm(tfm)); | ||
535 | } | ||
536 | |||
537 | static inline unsigned int crypto_ablkcipher_alignmask( | ||
538 | struct crypto_ablkcipher *tfm) | ||
539 | { | ||
540 | return crypto_tfm_alg_alignmask(crypto_ablkcipher_tfm(tfm)); | ||
541 | } | ||
542 | |||
543 | static inline u32 crypto_ablkcipher_get_flags(struct crypto_ablkcipher *tfm) | ||
544 | { | ||
545 | return crypto_tfm_get_flags(crypto_ablkcipher_tfm(tfm)); | ||
546 | } | ||
547 | |||
548 | static inline void crypto_ablkcipher_set_flags(struct crypto_ablkcipher *tfm, | ||
549 | u32 flags) | ||
550 | { | ||
551 | crypto_tfm_set_flags(crypto_ablkcipher_tfm(tfm), flags); | ||
552 | } | ||
553 | |||
554 | static inline void crypto_ablkcipher_clear_flags(struct crypto_ablkcipher *tfm, | ||
555 | u32 flags) | ||
556 | { | ||
557 | crypto_tfm_clear_flags(crypto_ablkcipher_tfm(tfm), flags); | ||
558 | } | ||
559 | |||
560 | static inline int crypto_ablkcipher_setkey(struct crypto_ablkcipher *tfm, | ||
561 | const u8 *key, unsigned int keylen) | ||
562 | { | ||
563 | return crypto_ablkcipher_crt(tfm)->setkey(tfm, key, keylen); | ||
564 | } | ||
565 | |||
566 | static inline struct crypto_ablkcipher *crypto_ablkcipher_reqtfm( | ||
567 | struct ablkcipher_request *req) | ||
568 | { | ||
569 | return __crypto_ablkcipher_cast(req->base.tfm); | ||
570 | } | ||
571 | |||
572 | static inline int crypto_ablkcipher_encrypt(struct ablkcipher_request *req) | ||
573 | { | ||
574 | struct ablkcipher_tfm *crt = | ||
575 | crypto_ablkcipher_crt(crypto_ablkcipher_reqtfm(req)); | ||
576 | return crt->encrypt(req); | ||
577 | } | ||
578 | |||
579 | static inline int crypto_ablkcipher_decrypt(struct ablkcipher_request *req) | ||
580 | { | ||
581 | struct ablkcipher_tfm *crt = | ||
582 | crypto_ablkcipher_crt(crypto_ablkcipher_reqtfm(req)); | ||
583 | return crt->decrypt(req); | ||
584 | } | ||
585 | |||
586 | static inline int crypto_ablkcipher_reqsize(struct crypto_ablkcipher *tfm) | ||
587 | { | ||
588 | return crypto_ablkcipher_crt(tfm)->reqsize; | ||
589 | } | ||
590 | |||
591 | static inline void ablkcipher_request_set_tfm( | ||
592 | struct ablkcipher_request *req, struct crypto_ablkcipher *tfm) | ||
593 | { | ||
594 | req->base.tfm = crypto_ablkcipher_tfm(tfm); | ||
595 | } | ||
596 | |||
597 | static inline struct ablkcipher_request *ablkcipher_request_cast( | ||
598 | struct crypto_async_request *req) | ||
599 | { | ||
600 | return container_of(req, struct ablkcipher_request, base); | ||
601 | } | ||
602 | |||
603 | static inline struct ablkcipher_request *ablkcipher_request_alloc( | ||
604 | struct crypto_ablkcipher *tfm, gfp_t gfp) | ||
605 | { | ||
606 | struct ablkcipher_request *req; | ||
607 | |||
608 | req = kmalloc(sizeof(struct ablkcipher_request) + | ||
609 | crypto_ablkcipher_reqsize(tfm), gfp); | ||
610 | |||
611 | if (likely(req)) | ||
612 | ablkcipher_request_set_tfm(req, tfm); | ||
613 | |||
614 | return req; | ||
615 | } | ||
616 | |||
617 | static inline void ablkcipher_request_free(struct ablkcipher_request *req) | ||
618 | { | ||
619 | kfree(req); | ||
620 | } | ||
621 | |||
622 | static inline void ablkcipher_request_set_callback( | ||
623 | struct ablkcipher_request *req, | ||
624 | u32 flags, crypto_completion_t complete, void *data) | ||
625 | { | ||
626 | req->base.complete = complete; | ||
627 | req->base.data = data; | ||
628 | req->base.flags = flags; | ||
629 | } | ||
630 | |||
631 | static inline void ablkcipher_request_set_crypt( | ||
632 | struct ablkcipher_request *req, | ||
633 | struct scatterlist *src, struct scatterlist *dst, | ||
634 | unsigned int nbytes, void *iv) | ||
635 | { | ||
636 | req->src = src; | ||
637 | req->dst = dst; | ||
638 | req->nbytes = nbytes; | ||
639 | req->info = iv; | ||
640 | } | ||
641 | |||
414 | static inline struct crypto_blkcipher *__crypto_blkcipher_cast( | 642 | static inline struct crypto_blkcipher *__crypto_blkcipher_cast( |
415 | struct crypto_tfm *tfm) | 643 | struct crypto_tfm *tfm) |
416 | { | 644 | { |
@@ -427,9 +655,9 @@ static inline struct crypto_blkcipher *crypto_blkcipher_cast( | |||
427 | static inline struct crypto_blkcipher *crypto_alloc_blkcipher( | 655 | static inline struct crypto_blkcipher *crypto_alloc_blkcipher( |
428 | const char *alg_name, u32 type, u32 mask) | 656 | const char *alg_name, u32 type, u32 mask) |
429 | { | 657 | { |
430 | type &= ~CRYPTO_ALG_TYPE_MASK; | 658 | type &= ~(CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_ASYNC); |
431 | type |= CRYPTO_ALG_TYPE_BLKCIPHER; | 659 | type |= CRYPTO_ALG_TYPE_BLKCIPHER; |
432 | mask |= CRYPTO_ALG_TYPE_MASK; | 660 | mask |= CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_ASYNC; |
433 | 661 | ||
434 | return __crypto_blkcipher_cast(crypto_alloc_base(alg_name, type, mask)); | 662 | return __crypto_blkcipher_cast(crypto_alloc_base(alg_name, type, mask)); |
435 | } | 663 | } |
@@ -447,9 +675,9 @@ static inline void crypto_free_blkcipher(struct crypto_blkcipher *tfm) | |||
447 | 675 | ||
448 | static inline int crypto_has_blkcipher(const char *alg_name, u32 type, u32 mask) | 676 | static inline int crypto_has_blkcipher(const char *alg_name, u32 type, u32 mask) |
449 | { | 677 | { |
450 | type &= ~CRYPTO_ALG_TYPE_MASK; | 678 | type &= ~(CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_ASYNC); |
451 | type |= CRYPTO_ALG_TYPE_BLKCIPHER; | 679 | type |= CRYPTO_ALG_TYPE_BLKCIPHER; |
452 | mask |= CRYPTO_ALG_TYPE_MASK; | 680 | mask |= CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_ASYNC; |
453 | 681 | ||
454 | return crypto_has_alg(alg_name, type, mask); | 682 | return crypto_has_alg(alg_name, type, mask); |
455 | } | 683 | } |
diff --git a/include/linux/device.h b/include/linux/device.h index a0cd2ced31a9..6579068134d1 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -53,7 +53,7 @@ struct bus_type { | |||
53 | const char * name; | 53 | const char * name; |
54 | struct module * owner; | 54 | struct module * owner; |
55 | 55 | ||
56 | struct subsystem subsys; | 56 | struct kset subsys; |
57 | struct kset drivers; | 57 | struct kset drivers; |
58 | struct kset devices; | 58 | struct kset devices; |
59 | struct klist klist_devices; | 59 | struct klist klist_devices; |
@@ -80,7 +80,6 @@ struct bus_type { | |||
80 | int (*resume)(struct device * dev); | 80 | int (*resume)(struct device * dev); |
81 | 81 | ||
82 | unsigned int drivers_autoprobe:1; | 82 | unsigned int drivers_autoprobe:1; |
83 | unsigned int multithread_probe:1; | ||
84 | }; | 83 | }; |
85 | 84 | ||
86 | extern int __must_check bus_register(struct bus_type * bus); | 85 | extern int __must_check bus_register(struct bus_type * bus); |
@@ -179,7 +178,7 @@ struct class { | |||
179 | const char * name; | 178 | const char * name; |
180 | struct module * owner; | 179 | struct module * owner; |
181 | 180 | ||
182 | struct subsystem subsys; | 181 | struct kset subsys; |
183 | struct list_head children; | 182 | struct list_head children; |
184 | struct list_head devices; | 183 | struct list_head devices; |
185 | struct list_head interfaces; | 184 | struct list_head interfaces; |
@@ -559,8 +558,8 @@ extern void device_shutdown(void); | |||
559 | 558 | ||
560 | 559 | ||
561 | /* drivers/base/firmware.c */ | 560 | /* drivers/base/firmware.c */ |
562 | extern int __must_check firmware_register(struct subsystem *); | 561 | extern int __must_check firmware_register(struct kset *); |
563 | extern void firmware_unregister(struct subsystem *); | 562 | extern void firmware_unregister(struct kset *); |
564 | 563 | ||
565 | /* debugging and troubleshooting/diagnostic helpers. */ | 564 | /* debugging and troubleshooting/diagnostic helpers. */ |
566 | extern const char *dev_driver_string(struct device *dev); | 565 | extern const char *dev_driver_string(struct device *dev); |
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index c6310aef5ab0..f2d248f8cc92 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h | |||
@@ -434,6 +434,7 @@ struct ethtool_ops { | |||
434 | #define SUPPORTED_10000baseT_Full (1 << 12) | 434 | #define SUPPORTED_10000baseT_Full (1 << 12) |
435 | #define SUPPORTED_Pause (1 << 13) | 435 | #define SUPPORTED_Pause (1 << 13) |
436 | #define SUPPORTED_Asym_Pause (1 << 14) | 436 | #define SUPPORTED_Asym_Pause (1 << 14) |
437 | #define SUPPORTED_2500baseX_Full (1 << 15) | ||
437 | 438 | ||
438 | /* Indicates what features are advertised by the interface. */ | 439 | /* Indicates what features are advertised by the interface. */ |
439 | #define ADVERTISED_10baseT_Half (1 << 0) | 440 | #define ADVERTISED_10baseT_Half (1 << 0) |
@@ -451,6 +452,7 @@ struct ethtool_ops { | |||
451 | #define ADVERTISED_10000baseT_Full (1 << 12) | 452 | #define ADVERTISED_10000baseT_Full (1 << 12) |
452 | #define ADVERTISED_Pause (1 << 13) | 453 | #define ADVERTISED_Pause (1 << 13) |
453 | #define ADVERTISED_Asym_Pause (1 << 14) | 454 | #define ADVERTISED_Asym_Pause (1 << 14) |
455 | #define ADVERTISED_2500baseX_Full (1 << 15) | ||
454 | 456 | ||
455 | /* The following are all involved in forcing a particular link | 457 | /* The following are all involved in forcing a particular link |
456 | * mode for the device for setting things. When getting the | 458 | * mode for the device for setting things. When getting the |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 095a9c9a64fb..7c0077f06e24 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -1416,7 +1416,7 @@ extern void mnt_set_mountpoint(struct vfsmount *, struct dentry *, | |||
1416 | extern int vfs_statfs(struct dentry *, struct kstatfs *); | 1416 | extern int vfs_statfs(struct dentry *, struct kstatfs *); |
1417 | 1417 | ||
1418 | /* /sys/fs */ | 1418 | /* /sys/fs */ |
1419 | extern struct subsystem fs_subsys; | 1419 | extern struct kset fs_subsys; |
1420 | 1420 | ||
1421 | #define FLOCK_VERIFY_READ 1 | 1421 | #define FLOCK_VERIFY_READ 1 |
1422 | #define FLOCK_VERIFY_WRITE 2 | 1422 | #define FLOCK_VERIFY_WRITE 2 |
diff --git a/include/linux/gpio_keys.h b/include/linux/gpio_keys.h index 2b217c7b9312..265d17830a0f 100644 --- a/include/linux/gpio_keys.h +++ b/include/linux/gpio_keys.h | |||
@@ -3,10 +3,11 @@ | |||
3 | 3 | ||
4 | struct gpio_keys_button { | 4 | struct gpio_keys_button { |
5 | /* Configuration parameters */ | 5 | /* Configuration parameters */ |
6 | int keycode; | 6 | int code; /* input event code (KEY_*, SW_*) */ |
7 | int gpio; | 7 | int gpio; |
8 | int active_low; | 8 | int active_low; |
9 | char *desc; | 9 | char *desc; |
10 | int type; /* input event type (EV_KEY, EV_SW) */ | ||
10 | }; | 11 | }; |
11 | 12 | ||
12 | struct gpio_keys_platform_data { | 13 | struct gpio_keys_platform_data { |
diff --git a/include/linux/highmem.h b/include/linux/highmem.h index bca8e2dfa355..a515eb0afdfb 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h | |||
@@ -44,8 +44,13 @@ static inline void *kmap(struct page *page) | |||
44 | 44 | ||
45 | #define kunmap(page) do { (void) (page); } while (0) | 45 | #define kunmap(page) do { (void) (page); } while (0) |
46 | 46 | ||
47 | #define kmap_atomic(page, idx) \ | 47 | #include <asm/kmap_types.h> |
48 | ({ pagefault_disable(); page_address(page); }) | 48 | |
49 | static inline void *kmap_atomic(struct page *page, enum km_type idx) | ||
50 | { | ||
51 | pagefault_disable(); | ||
52 | return page_address(page); | ||
53 | } | ||
49 | #define kmap_atomic_prot(page, idx, prot) kmap_atomic(page, idx) | 54 | #define kmap_atomic_prot(page, idx, prot) kmap_atomic(page, idx) |
50 | 55 | ||
51 | #define kunmap_atomic(addr, idx) do { pagefault_enable(); } while (0) | 56 | #define kunmap_atomic(addr, idx) do { pagefault_enable(); } while (0) |
diff --git a/include/linux/hp_sdc.h b/include/linux/hp_sdc.h index debd71515312..9db3d454887f 100644 --- a/include/linux/hp_sdc.h +++ b/include/linux/hp_sdc.h | |||
@@ -71,6 +71,7 @@ typedef struct { | |||
71 | struct semaphore *semaphore; /* Semaphore to sleep on. */ | 71 | struct semaphore *semaphore; /* Semaphore to sleep on. */ |
72 | } act; | 72 | } act; |
73 | } hp_sdc_transaction; | 73 | } hp_sdc_transaction; |
74 | int __hp_sdc_enqueue_transaction(hp_sdc_transaction *this); | ||
74 | int hp_sdc_enqueue_transaction(hp_sdc_transaction *this); | 75 | int hp_sdc_enqueue_transaction(hp_sdc_transaction *this); |
75 | int hp_sdc_dequeue_transaction(hp_sdc_transaction *this); | 76 | int hp_sdc_dequeue_transaction(hp_sdc_transaction *this); |
76 | 77 | ||
diff --git a/include/linux/i2c-algo-bit.h b/include/linux/i2c-algo-bit.h index 937da70cb4c4..9ee0f800592f 100644 --- a/include/linux/i2c-algo-bit.h +++ b/include/linux/i2c-algo-bit.h | |||
@@ -38,11 +38,14 @@ struct i2c_algo_bit_data { | |||
38 | int (*getscl) (void *data); | 38 | int (*getscl) (void *data); |
39 | 39 | ||
40 | /* local settings */ | 40 | /* local settings */ |
41 | int udelay; /* half-clock-cycle time in microsecs */ | 41 | int udelay; /* half clock cycle time in us, |
42 | /* i.e. clock is (500 / udelay) KHz */ | 42 | minimum 2 us for fast-mode I2C, |
43 | minimum 5 us for standard-mode I2C and SMBus, | ||
44 | maximum 50 us for SMBus */ | ||
43 | int timeout; /* in jiffies */ | 45 | int timeout; /* in jiffies */ |
44 | }; | 46 | }; |
45 | 47 | ||
46 | int i2c_bit_add_bus(struct i2c_adapter *); | 48 | int i2c_bit_add_bus(struct i2c_adapter *); |
49 | int i2c_bit_add_numbered_bus(struct i2c_adapter *); | ||
47 | 50 | ||
48 | #endif /* _LINUX_I2C_ALGO_BIT_H */ | 51 | #endif /* _LINUX_I2C_ALGO_BIT_H */ |
diff --git a/include/linux/i2c-gpio.h b/include/linux/i2c-gpio.h new file mode 100644 index 000000000000..c1bcb1f1d73b --- /dev/null +++ b/include/linux/i2c-gpio.h | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | * i2c-gpio interface to platform code | ||
3 | * | ||
4 | * Copyright (C) 2007 Atmel Corporation | ||
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 | #ifndef _LINUX_I2C_GPIO_H | ||
11 | #define _LINUX_I2C_GPIO_H | ||
12 | |||
13 | /** | ||
14 | * struct i2c_gpio_platform_data - Platform-dependent data for i2c-gpio | ||
15 | * @sda_pin: GPIO pin ID to use for SDA | ||
16 | * @scl_pin: GPIO pin ID to use for SCL | ||
17 | * @udelay: signal toggle delay. SCL frequency is (500 / udelay) kHz | ||
18 | * @timeout: clock stretching timeout in jiffies. If the slave keeps | ||
19 | * SCL low for longer than this, the transfer will time out. | ||
20 | * @sda_is_open_drain: SDA is configured as open drain, i.e. the pin | ||
21 | * isn't actively driven high when setting the output value high. | ||
22 | * gpio_get_value() must return the actual pin state even if the | ||
23 | * pin is configured as an output. | ||
24 | * @scl_is_open_drain: SCL is set up as open drain. Same requirements | ||
25 | * as for sda_is_open_drain apply. | ||
26 | * @scl_is_output_only: SCL output drivers cannot be turned off. | ||
27 | */ | ||
28 | struct i2c_gpio_platform_data { | ||
29 | unsigned int sda_pin; | ||
30 | unsigned int scl_pin; | ||
31 | int udelay; | ||
32 | int timeout; | ||
33 | unsigned int sda_is_open_drain:1; | ||
34 | unsigned int scl_is_open_drain:1; | ||
35 | unsigned int scl_is_output_only:1; | ||
36 | }; | ||
37 | |||
38 | #endif /* _LINUX_I2C_GPIO_H */ | ||
diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h index 9c21dc793d7b..0e8da684ce68 100644 --- a/include/linux/i2c-id.h +++ b/include/linux/i2c-id.h | |||
@@ -258,8 +258,9 @@ | |||
258 | /* --- MCP107 adapter */ | 258 | /* --- MCP107 adapter */ |
259 | #define I2C_HW_MPC107 0x0d0000 | 259 | #define I2C_HW_MPC107 0x0d0000 |
260 | 260 | ||
261 | /* --- Marvell mv64xxx i2c adapter */ | 261 | /* --- Embedded adapters */ |
262 | #define I2C_HW_MV64XXX 0x190000 | 262 | #define I2C_HW_MV64XXX 0x190000 |
263 | #define I2C_HW_BLACKFIN 0x190001 /* ADI Blackfin I2C TWI driver */ | ||
263 | 264 | ||
264 | /* --- Miscellaneous adapters */ | 265 | /* --- Miscellaneous adapters */ |
265 | #define I2C_HW_SAA7146 0x060000 /* SAA7146 video decoder bus */ | 266 | #define I2C_HW_SAA7146 0x060000 /* SAA7146 video decoder bus */ |
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index 9428092017e3..cae7d618030c 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h | |||
@@ -35,11 +35,6 @@ | |||
35 | #include <linux/sched.h> /* for completion */ | 35 | #include <linux/sched.h> /* for completion */ |
36 | #include <linux/mutex.h> | 36 | #include <linux/mutex.h> |
37 | 37 | ||
38 | /* --- For i2c-isa ---------------------------------------------------- */ | ||
39 | |||
40 | extern void i2c_adapter_dev_release(struct device *dev); | ||
41 | extern struct device_driver i2c_adapter_driver; | ||
42 | extern struct class i2c_adapter_class; | ||
43 | extern struct bus_type i2c_bus_type; | 38 | extern struct bus_type i2c_bus_type; |
44 | 39 | ||
45 | /* --- General options ------------------------------------------------ */ | 40 | /* --- General options ------------------------------------------------ */ |
@@ -87,6 +82,9 @@ extern s32 i2c_smbus_write_byte_data(struct i2c_client * client, | |||
87 | extern s32 i2c_smbus_read_word_data(struct i2c_client * client, u8 command); | 82 | extern s32 i2c_smbus_read_word_data(struct i2c_client * client, u8 command); |
88 | extern s32 i2c_smbus_write_word_data(struct i2c_client * client, | 83 | extern s32 i2c_smbus_write_word_data(struct i2c_client * client, |
89 | u8 command, u16 value); | 84 | u8 command, u16 value); |
85 | /* Returns the number of read bytes */ | ||
86 | extern s32 i2c_smbus_read_block_data(struct i2c_client *client, | ||
87 | u8 command, u8 *values); | ||
90 | extern s32 i2c_smbus_write_block_data(struct i2c_client * client, | 88 | extern s32 i2c_smbus_write_block_data(struct i2c_client * client, |
91 | u8 command, u8 length, | 89 | u8 command, u8 length, |
92 | const u8 *values); | 90 | const u8 *values); |
@@ -114,7 +112,7 @@ struct i2c_driver { | |||
114 | * can be used by the driver to test if the bus meets its conditions | 112 | * can be used by the driver to test if the bus meets its conditions |
115 | * & seek for the presence of the chip(s) it supports. If found, it | 113 | * & seek for the presence of the chip(s) it supports. If found, it |
116 | * registers the client(s) that are on the bus to the i2c admin. via | 114 | * registers the client(s) that are on the bus to the i2c admin. via |
117 | * i2c_attach_client. | 115 | * i2c_attach_client. (LEGACY I2C DRIVERS ONLY) |
118 | */ | 116 | */ |
119 | int (*attach_adapter)(struct i2c_adapter *); | 117 | int (*attach_adapter)(struct i2c_adapter *); |
120 | int (*detach_adapter)(struct i2c_adapter *); | 118 | int (*detach_adapter)(struct i2c_adapter *); |
@@ -122,10 +120,17 @@ struct i2c_driver { | |||
122 | /* tells the driver that a client is about to be deleted & gives it | 120 | /* tells the driver that a client is about to be deleted & gives it |
123 | * the chance to remove its private data. Also, if the client struct | 121 | * the chance to remove its private data. Also, if the client struct |
124 | * has been dynamically allocated by the driver in the function above, | 122 | * has been dynamically allocated by the driver in the function above, |
125 | * it must be freed here. | 123 | * it must be freed here. (LEGACY I2C DRIVERS ONLY) |
126 | */ | 124 | */ |
127 | int (*detach_client)(struct i2c_client *); | 125 | int (*detach_client)(struct i2c_client *); |
128 | 126 | ||
127 | /* Standard driver model interfaces, for "new style" i2c drivers. | ||
128 | * With the driver model, device enumeration is NEVER done by drivers; | ||
129 | * it's done by infrastructure. (NEW STYLE DRIVERS ONLY) | ||
130 | */ | ||
131 | int (*probe)(struct i2c_client *); | ||
132 | int (*remove)(struct i2c_client *); | ||
133 | |||
129 | /* driver model interfaces that don't relate to enumeration */ | 134 | /* driver model interfaces that don't relate to enumeration */ |
130 | void (*shutdown)(struct i2c_client *); | 135 | void (*shutdown)(struct i2c_client *); |
131 | int (*suspend)(struct i2c_client *, pm_message_t mesg); | 136 | int (*suspend)(struct i2c_client *, pm_message_t mesg); |
@@ -141,25 +146,34 @@ struct i2c_driver { | |||
141 | }; | 146 | }; |
142 | #define to_i2c_driver(d) container_of(d, struct i2c_driver, driver) | 147 | #define to_i2c_driver(d) container_of(d, struct i2c_driver, driver) |
143 | 148 | ||
144 | #define I2C_NAME_SIZE 50 | 149 | #define I2C_NAME_SIZE 20 |
145 | 150 | ||
146 | /* | 151 | /** |
147 | * i2c_client identifies a single device (i.e. chip) that is connected to an | 152 | * struct i2c_client - represent an I2C slave device |
148 | * i2c bus. The behaviour is defined by the routines of the driver. This | 153 | * @addr: Address used on the I2C bus connected to the parent adapter. |
149 | * function is mainly used for lookup & other admin. functions. | 154 | * @name: Indicates the type of the device, usually a chip name that's |
155 | * generic enough to hide second-sourcing and compatible revisions. | ||
156 | * @dev: Driver model device node for the slave. | ||
157 | * @driver_name: Identifies new-style driver used with this device; also | ||
158 | * used as the module name for hotplug/coldplug modprobe support. | ||
159 | * | ||
160 | * An i2c_client identifies a single device (i.e. chip) connected to an | ||
161 | * i2c bus. The behaviour is defined by the routines of the driver. | ||
150 | */ | 162 | */ |
151 | struct i2c_client { | 163 | struct i2c_client { |
152 | unsigned int flags; /* div., see below */ | 164 | unsigned short flags; /* div., see below */ |
153 | unsigned short addr; /* chip address - NOTE: 7bit */ | 165 | unsigned short addr; /* chip address - NOTE: 7bit */ |
154 | /* addresses are stored in the */ | 166 | /* addresses are stored in the */ |
155 | /* _LOWER_ 7 bits */ | 167 | /* _LOWER_ 7 bits */ |
168 | char name[I2C_NAME_SIZE]; | ||
156 | struct i2c_adapter *adapter; /* the adapter we sit on */ | 169 | struct i2c_adapter *adapter; /* the adapter we sit on */ |
157 | struct i2c_driver *driver; /* and our access routines */ | 170 | struct i2c_driver *driver; /* and our access routines */ |
158 | int usage_count; /* How many accesses currently */ | 171 | int usage_count; /* How many accesses currently */ |
159 | /* to the client */ | 172 | /* to the client */ |
160 | struct device dev; /* the device structure */ | 173 | struct device dev; /* the device structure */ |
174 | int irq; /* irq issued by device (or -1) */ | ||
175 | char driver_name[KOBJ_NAME_LEN]; | ||
161 | struct list_head list; | 176 | struct list_head list; |
162 | char name[I2C_NAME_SIZE]; | ||
163 | struct completion released; | 177 | struct completion released; |
164 | }; | 178 | }; |
165 | #define to_i2c_client(d) container_of(d, struct i2c_client, dev) | 179 | #define to_i2c_client(d) container_of(d, struct i2c_client, dev) |
@@ -179,6 +193,76 @@ static inline void i2c_set_clientdata (struct i2c_client *dev, void *data) | |||
179 | dev_set_drvdata (&dev->dev, data); | 193 | dev_set_drvdata (&dev->dev, data); |
180 | } | 194 | } |
181 | 195 | ||
196 | /** | ||
197 | * struct i2c_board_info - template for device creation | ||
198 | * @driver_name: identifies the driver to be bound to the device | ||
199 | * @type: optional chip type information, to initialize i2c_client.name | ||
200 | * @flags: to initialize i2c_client.flags | ||
201 | * @addr: stored in i2c_client.addr | ||
202 | * @platform_data: stored in i2c_client.dev.platform_data | ||
203 | * @irq: stored in i2c_client.irq | ||
204 | |||
205 | * I2C doesn't actually support hardware probing, although controllers and | ||
206 | * devices may be able to use I2C_SMBUS_QUICK to tell whether or not there's | ||
207 | * a device at a given address. Drivers commonly need more information than | ||
208 | * that, such as chip type, configuration, associated IRQ, and so on. | ||
209 | * | ||
210 | * i2c_board_info is used to build tables of information listing I2C devices | ||
211 | * that are present. This information is used to grow the driver model tree | ||
212 | * for "new style" I2C drivers. For mainboards this is done statically using | ||
213 | * i2c_register_board_info(), where @bus_num represents an adapter that isn't | ||
214 | * yet available. For add-on boards, i2c_new_device() does this dynamically | ||
215 | * with the adapter already known. | ||
216 | */ | ||
217 | struct i2c_board_info { | ||
218 | char driver_name[KOBJ_NAME_LEN]; | ||
219 | char type[I2C_NAME_SIZE]; | ||
220 | unsigned short flags; | ||
221 | unsigned short addr; | ||
222 | void *platform_data; | ||
223 | int irq; | ||
224 | }; | ||
225 | |||
226 | /** | ||
227 | * I2C_BOARD_INFO - macro used to list an i2c device and its driver | ||
228 | * @driver: identifies the driver to use with the device | ||
229 | * @dev_addr: the device's address on the bus. | ||
230 | * | ||
231 | * This macro initializes essential fields of a struct i2c_board_info, | ||
232 | * declaring what has been provided on a particular board. Optional | ||
233 | * fields (such as the chip type, its associated irq, or device-specific | ||
234 | * platform_data) are provided using conventional syntax. | ||
235 | */ | ||
236 | #define I2C_BOARD_INFO(driver,dev_addr) \ | ||
237 | .driver_name = (driver), .addr = (dev_addr) | ||
238 | |||
239 | |||
240 | /* Add-on boards should register/unregister their devices; e.g. a board | ||
241 | * with integrated I2C, a config eeprom, sensors, and a codec that's | ||
242 | * used in conjunction with the primary hardware. | ||
243 | */ | ||
244 | extern struct i2c_client * | ||
245 | i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info); | ||
246 | |||
247 | /* If you don't know the exact address of an I2C device, use this variant | ||
248 | * instead, which can probe for device presence in a list of possible | ||
249 | * addresses. | ||
250 | */ | ||
251 | extern struct i2c_client * | ||
252 | i2c_new_probed_device(struct i2c_adapter *adap, | ||
253 | struct i2c_board_info *info, | ||
254 | unsigned short const *addr_list); | ||
255 | |||
256 | extern void i2c_unregister_device(struct i2c_client *); | ||
257 | |||
258 | /* Mainboard arch_initcall() code should register all its I2C devices. | ||
259 | * This is done at arch_initcall time, before declaring any i2c adapters. | ||
260 | * Modules for add-on boards must use other calls. | ||
261 | */ | ||
262 | extern int | ||
263 | i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsigned n); | ||
264 | |||
265 | |||
182 | /* | 266 | /* |
183 | * The following structs are for those who like to implement new bus drivers: | 267 | * The following structs are for those who like to implement new bus drivers: |
184 | * i2c_algorithm is the interface to a class of hardware solutions which can | 268 | * i2c_algorithm is the interface to a class of hardware solutions which can |
@@ -228,17 +312,14 @@ struct i2c_adapter { | |||
228 | int timeout; | 312 | int timeout; |
229 | int retries; | 313 | int retries; |
230 | struct device dev; /* the adapter device */ | 314 | struct device dev; /* the adapter device */ |
231 | struct class_device class_dev; /* the class device */ | ||
232 | 315 | ||
233 | int nr; | 316 | int nr; |
234 | struct list_head clients; | 317 | struct list_head clients; |
235 | struct list_head list; | 318 | struct list_head list; |
236 | char name[I2C_NAME_SIZE]; | 319 | char name[48]; |
237 | struct completion dev_released; | 320 | struct completion dev_released; |
238 | struct completion class_dev_released; | ||
239 | }; | 321 | }; |
240 | #define dev_to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev) | 322 | #define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev) |
241 | #define class_dev_to_i2c_adapter(d) container_of(d, struct i2c_adapter, class_dev) | ||
242 | 323 | ||
243 | static inline void *i2c_get_adapdata (struct i2c_adapter *dev) | 324 | static inline void *i2c_get_adapdata (struct i2c_adapter *dev) |
244 | { | 325 | { |
@@ -290,9 +371,10 @@ struct i2c_client_address_data { | |||
290 | */ | 371 | */ |
291 | extern int i2c_add_adapter(struct i2c_adapter *); | 372 | extern int i2c_add_adapter(struct i2c_adapter *); |
292 | extern int i2c_del_adapter(struct i2c_adapter *); | 373 | extern int i2c_del_adapter(struct i2c_adapter *); |
374 | extern int i2c_add_numbered_adapter(struct i2c_adapter *); | ||
293 | 375 | ||
294 | extern int i2c_register_driver(struct module *, struct i2c_driver *); | 376 | extern int i2c_register_driver(struct module *, struct i2c_driver *); |
295 | extern int i2c_del_driver(struct i2c_driver *); | 377 | extern void i2c_del_driver(struct i2c_driver *); |
296 | 378 | ||
297 | static inline int i2c_add_driver(struct i2c_driver *driver) | 379 | static inline int i2c_add_driver(struct i2c_driver *driver) |
298 | { | 380 | { |
@@ -365,6 +447,7 @@ struct i2c_msg { | |||
365 | #define I2C_M_REV_DIR_ADDR 0x2000 | 447 | #define I2C_M_REV_DIR_ADDR 0x2000 |
366 | #define I2C_M_IGNORE_NAK 0x1000 | 448 | #define I2C_M_IGNORE_NAK 0x1000 |
367 | #define I2C_M_NO_RD_ACK 0x0800 | 449 | #define I2C_M_NO_RD_ACK 0x0800 |
450 | #define I2C_M_RECV_LEN 0x0400 /* length will be first received byte */ | ||
368 | __u16 len; /* msg length */ | 451 | __u16 len; /* msg length */ |
369 | __u8 *buf; /* pointer to msg data */ | 452 | __u8 *buf; /* pointer to msg data */ |
370 | }; | 453 | }; |
diff --git a/include/linux/ide.h b/include/linux/ide.h index d3bbc7188b6a..418dfb5adadd 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -613,7 +613,6 @@ typedef struct ide_drive_s { | |||
613 | 613 | ||
614 | u8 quirk_list; /* considered quirky, set for a specific host */ | 614 | u8 quirk_list; /* considered quirky, set for a specific host */ |
615 | u8 init_speed; /* transfer rate set at boot */ | 615 | u8 init_speed; /* transfer rate set at boot */ |
616 | u8 pio_speed; /* unused by core, used by some drivers for fallback from DMA */ | ||
617 | u8 current_speed; /* current transfer rate set */ | 616 | u8 current_speed; /* current transfer rate set */ |
618 | u8 desired_speed; /* desired transfer rate set */ | 617 | u8 desired_speed; /* desired transfer rate set */ |
619 | u8 dn; /* now wide spread use */ | 618 | u8 dn; /* now wide spread use */ |
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h new file mode 100644 index 000000000000..ecd61e8438a5 --- /dev/null +++ b/include/linux/ieee80211.h | |||
@@ -0,0 +1,342 @@ | |||
1 | /* | ||
2 | * IEEE 802.11 defines | ||
3 | * | ||
4 | * Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen | ||
5 | * <jkmaline@cc.hut.fi> | ||
6 | * Copyright (c) 2002-2003, Jouni Malinen <jkmaline@cc.hut.fi> | ||
7 | * Copyright (c) 2005, Devicescape Software, Inc. | ||
8 | * Copyright (c) 2006, Michael Wu <flamingice@sourmilk.net> | ||
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 version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #ifndef IEEE80211_H | ||
16 | #define IEEE80211_H | ||
17 | |||
18 | #include <linux/types.h> | ||
19 | |||
20 | #define FCS_LEN 4 | ||
21 | |||
22 | #define IEEE80211_FCTL_VERS 0x0003 | ||
23 | #define IEEE80211_FCTL_FTYPE 0x000c | ||
24 | #define IEEE80211_FCTL_STYPE 0x00f0 | ||
25 | #define IEEE80211_FCTL_TODS 0x0100 | ||
26 | #define IEEE80211_FCTL_FROMDS 0x0200 | ||
27 | #define IEEE80211_FCTL_MOREFRAGS 0x0400 | ||
28 | #define IEEE80211_FCTL_RETRY 0x0800 | ||
29 | #define IEEE80211_FCTL_PM 0x1000 | ||
30 | #define IEEE80211_FCTL_MOREDATA 0x2000 | ||
31 | #define IEEE80211_FCTL_PROTECTED 0x4000 | ||
32 | #define IEEE80211_FCTL_ORDER 0x8000 | ||
33 | |||
34 | #define IEEE80211_SCTL_FRAG 0x000F | ||
35 | #define IEEE80211_SCTL_SEQ 0xFFF0 | ||
36 | |||
37 | #define IEEE80211_FTYPE_MGMT 0x0000 | ||
38 | #define IEEE80211_FTYPE_CTL 0x0004 | ||
39 | #define IEEE80211_FTYPE_DATA 0x0008 | ||
40 | |||
41 | /* management */ | ||
42 | #define IEEE80211_STYPE_ASSOC_REQ 0x0000 | ||
43 | #define IEEE80211_STYPE_ASSOC_RESP 0x0010 | ||
44 | #define IEEE80211_STYPE_REASSOC_REQ 0x0020 | ||
45 | #define IEEE80211_STYPE_REASSOC_RESP 0x0030 | ||
46 | #define IEEE80211_STYPE_PROBE_REQ 0x0040 | ||
47 | #define IEEE80211_STYPE_PROBE_RESP 0x0050 | ||
48 | #define IEEE80211_STYPE_BEACON 0x0080 | ||
49 | #define IEEE80211_STYPE_ATIM 0x0090 | ||
50 | #define IEEE80211_STYPE_DISASSOC 0x00A0 | ||
51 | #define IEEE80211_STYPE_AUTH 0x00B0 | ||
52 | #define IEEE80211_STYPE_DEAUTH 0x00C0 | ||
53 | #define IEEE80211_STYPE_ACTION 0x00D0 | ||
54 | |||
55 | /* control */ | ||
56 | #define IEEE80211_STYPE_PSPOLL 0x00A0 | ||
57 | #define IEEE80211_STYPE_RTS 0x00B0 | ||
58 | #define IEEE80211_STYPE_CTS 0x00C0 | ||
59 | #define IEEE80211_STYPE_ACK 0x00D0 | ||
60 | #define IEEE80211_STYPE_CFEND 0x00E0 | ||
61 | #define IEEE80211_STYPE_CFENDACK 0x00F0 | ||
62 | |||
63 | /* data */ | ||
64 | #define IEEE80211_STYPE_DATA 0x0000 | ||
65 | #define IEEE80211_STYPE_DATA_CFACK 0x0010 | ||
66 | #define IEEE80211_STYPE_DATA_CFPOLL 0x0020 | ||
67 | #define IEEE80211_STYPE_DATA_CFACKPOLL 0x0030 | ||
68 | #define IEEE80211_STYPE_NULLFUNC 0x0040 | ||
69 | #define IEEE80211_STYPE_CFACK 0x0050 | ||
70 | #define IEEE80211_STYPE_CFPOLL 0x0060 | ||
71 | #define IEEE80211_STYPE_CFACKPOLL 0x0070 | ||
72 | #define IEEE80211_STYPE_QOS_DATA 0x0080 | ||
73 | #define IEEE80211_STYPE_QOS_DATA_CFACK 0x0090 | ||
74 | #define IEEE80211_STYPE_QOS_DATA_CFPOLL 0x00A0 | ||
75 | #define IEEE80211_STYPE_QOS_DATA_CFACKPOLL 0x00B0 | ||
76 | #define IEEE80211_STYPE_QOS_NULLFUNC 0x00C0 | ||
77 | #define IEEE80211_STYPE_QOS_CFACK 0x00D0 | ||
78 | #define IEEE80211_STYPE_QOS_CFPOLL 0x00E0 | ||
79 | #define IEEE80211_STYPE_QOS_CFACKPOLL 0x00F0 | ||
80 | |||
81 | |||
82 | /* miscellaneous IEEE 802.11 constants */ | ||
83 | #define IEEE80211_MAX_FRAG_THRESHOLD 2346 | ||
84 | #define IEEE80211_MAX_RTS_THRESHOLD 2347 | ||
85 | #define IEEE80211_MAX_AID 2007 | ||
86 | #define IEEE80211_MAX_TIM_LEN 251 | ||
87 | #define IEEE80211_MAX_DATA_LEN 2304 | ||
88 | /* Maximum size for the MA-UNITDATA primitive, 802.11 standard section | ||
89 | 6.2.1.1.2. | ||
90 | |||
91 | The figure in section 7.1.2 suggests a body size of up to 2312 | ||
92 | bytes is allowed, which is a bit confusing, I suspect this | ||
93 | represents the 2304 bytes of real data, plus a possible 8 bytes of | ||
94 | WEP IV and ICV. (this interpretation suggested by Ramiro Barreiro) */ | ||
95 | |||
96 | #define IEEE80211_MAX_SSID_LEN 32 | ||
97 | |||
98 | struct ieee80211_hdr { | ||
99 | __le16 frame_control; | ||
100 | __le16 duration_id; | ||
101 | u8 addr1[6]; | ||
102 | u8 addr2[6]; | ||
103 | u8 addr3[6]; | ||
104 | __le16 seq_ctrl; | ||
105 | u8 addr4[6]; | ||
106 | } __attribute__ ((packed)); | ||
107 | |||
108 | |||
109 | struct ieee80211_mgmt { | ||
110 | __le16 frame_control; | ||
111 | __le16 duration; | ||
112 | u8 da[6]; | ||
113 | u8 sa[6]; | ||
114 | u8 bssid[6]; | ||
115 | __le16 seq_ctrl; | ||
116 | union { | ||
117 | struct { | ||
118 | __le16 auth_alg; | ||
119 | __le16 auth_transaction; | ||
120 | __le16 status_code; | ||
121 | /* possibly followed by Challenge text */ | ||
122 | u8 variable[0]; | ||
123 | } __attribute__ ((packed)) auth; | ||
124 | struct { | ||
125 | __le16 reason_code; | ||
126 | } __attribute__ ((packed)) deauth; | ||
127 | struct { | ||
128 | __le16 capab_info; | ||
129 | __le16 listen_interval; | ||
130 | /* followed by SSID and Supported rates */ | ||
131 | u8 variable[0]; | ||
132 | } __attribute__ ((packed)) assoc_req; | ||
133 | struct { | ||
134 | __le16 capab_info; | ||
135 | __le16 status_code; | ||
136 | __le16 aid; | ||
137 | /* followed by Supported rates */ | ||
138 | u8 variable[0]; | ||
139 | } __attribute__ ((packed)) assoc_resp, reassoc_resp; | ||
140 | struct { | ||
141 | __le16 capab_info; | ||
142 | __le16 listen_interval; | ||
143 | u8 current_ap[6]; | ||
144 | /* followed by SSID and Supported rates */ | ||
145 | u8 variable[0]; | ||
146 | } __attribute__ ((packed)) reassoc_req; | ||
147 | struct { | ||
148 | __le16 reason_code; | ||
149 | } __attribute__ ((packed)) disassoc; | ||
150 | struct { | ||
151 | __le64 timestamp; | ||
152 | __le16 beacon_int; | ||
153 | __le16 capab_info; | ||
154 | /* followed by some of SSID, Supported rates, | ||
155 | * FH Params, DS Params, CF Params, IBSS Params, TIM */ | ||
156 | u8 variable[0]; | ||
157 | } __attribute__ ((packed)) beacon; | ||
158 | struct { | ||
159 | /* only variable items: SSID, Supported rates */ | ||
160 | u8 variable[0]; | ||
161 | } __attribute__ ((packed)) probe_req; | ||
162 | struct { | ||
163 | __le64 timestamp; | ||
164 | __le16 beacon_int; | ||
165 | __le16 capab_info; | ||
166 | /* followed by some of SSID, Supported rates, | ||
167 | * FH Params, DS Params, CF Params, IBSS Params */ | ||
168 | u8 variable[0]; | ||
169 | } __attribute__ ((packed)) probe_resp; | ||
170 | struct { | ||
171 | u8 category; | ||
172 | union { | ||
173 | struct { | ||
174 | u8 action_code; | ||
175 | u8 dialog_token; | ||
176 | u8 status_code; | ||
177 | u8 variable[0]; | ||
178 | } __attribute__ ((packed)) wme_action; | ||
179 | struct{ | ||
180 | u8 action_code; | ||
181 | u8 element_id; | ||
182 | u8 length; | ||
183 | u8 switch_mode; | ||
184 | u8 new_chan; | ||
185 | u8 switch_count; | ||
186 | } __attribute__((packed)) chan_switch; | ||
187 | } u; | ||
188 | } __attribute__ ((packed)) action; | ||
189 | } u; | ||
190 | } __attribute__ ((packed)); | ||
191 | |||
192 | |||
193 | /* Control frames */ | ||
194 | struct ieee80211_rts { | ||
195 | __le16 frame_control; | ||
196 | __le16 duration; | ||
197 | u8 ra[6]; | ||
198 | u8 ta[6]; | ||
199 | } __attribute__ ((packed)); | ||
200 | |||
201 | struct ieee80211_cts { | ||
202 | __le16 frame_control; | ||
203 | __le16 duration; | ||
204 | u8 ra[6]; | ||
205 | } __attribute__ ((packed)); | ||
206 | |||
207 | |||
208 | /* Authentication algorithms */ | ||
209 | #define WLAN_AUTH_OPEN 0 | ||
210 | #define WLAN_AUTH_SHARED_KEY 1 | ||
211 | #define WLAN_AUTH_FAST_BSS_TRANSITION 2 | ||
212 | #define WLAN_AUTH_LEAP 128 | ||
213 | |||
214 | #define WLAN_AUTH_CHALLENGE_LEN 128 | ||
215 | |||
216 | #define WLAN_CAPABILITY_ESS (1<<0) | ||
217 | #define WLAN_CAPABILITY_IBSS (1<<1) | ||
218 | #define WLAN_CAPABILITY_CF_POLLABLE (1<<2) | ||
219 | #define WLAN_CAPABILITY_CF_POLL_REQUEST (1<<3) | ||
220 | #define WLAN_CAPABILITY_PRIVACY (1<<4) | ||
221 | #define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5) | ||
222 | #define WLAN_CAPABILITY_PBCC (1<<6) | ||
223 | #define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7) | ||
224 | /* 802.11h */ | ||
225 | #define WLAN_CAPABILITY_SPECTRUM_MGMT (1<<8) | ||
226 | #define WLAN_CAPABILITY_QOS (1<<9) | ||
227 | #define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10) | ||
228 | #define WLAN_CAPABILITY_DSSS_OFDM (1<<13) | ||
229 | |||
230 | /* Status codes */ | ||
231 | enum ieee80211_statuscode { | ||
232 | WLAN_STATUS_SUCCESS = 0, | ||
233 | WLAN_STATUS_UNSPECIFIED_FAILURE = 1, | ||
234 | WLAN_STATUS_CAPS_UNSUPPORTED = 10, | ||
235 | WLAN_STATUS_REASSOC_NO_ASSOC = 11, | ||
236 | WLAN_STATUS_ASSOC_DENIED_UNSPEC = 12, | ||
237 | WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG = 13, | ||
238 | WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION = 14, | ||
239 | WLAN_STATUS_CHALLENGE_FAIL = 15, | ||
240 | WLAN_STATUS_AUTH_TIMEOUT = 16, | ||
241 | WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA = 17, | ||
242 | WLAN_STATUS_ASSOC_DENIED_RATES = 18, | ||
243 | /* 802.11b */ | ||
244 | WLAN_STATUS_ASSOC_DENIED_NOSHORTPREAMBLE = 19, | ||
245 | WLAN_STATUS_ASSOC_DENIED_NOPBCC = 20, | ||
246 | WLAN_STATUS_ASSOC_DENIED_NOAGILITY = 21, | ||
247 | /* 802.11h */ | ||
248 | WLAN_STATUS_ASSOC_DENIED_NOSPECTRUM = 22, | ||
249 | WLAN_STATUS_ASSOC_REJECTED_BAD_POWER = 23, | ||
250 | WLAN_STATUS_ASSOC_REJECTED_BAD_SUPP_CHAN = 24, | ||
251 | /* 802.11g */ | ||
252 | WLAN_STATUS_ASSOC_DENIED_NOSHORTTIME = 25, | ||
253 | WLAN_STATUS_ASSOC_DENIED_NODSSSOFDM = 26, | ||
254 | /* 802.11i */ | ||
255 | WLAN_STATUS_INVALID_IE = 40, | ||
256 | WLAN_STATUS_INVALID_GROUP_CIPHER = 41, | ||
257 | WLAN_STATUS_INVALID_PAIRWISE_CIPHER = 42, | ||
258 | WLAN_STATUS_INVALID_AKMP = 43, | ||
259 | WLAN_STATUS_UNSUPP_RSN_VERSION = 44, | ||
260 | WLAN_STATUS_INVALID_RSN_IE_CAP = 45, | ||
261 | WLAN_STATUS_CIPHER_SUITE_REJECTED = 46, | ||
262 | }; | ||
263 | |||
264 | |||
265 | /* Reason codes */ | ||
266 | enum ieee80211_reasoncode { | ||
267 | WLAN_REASON_UNSPECIFIED = 1, | ||
268 | WLAN_REASON_PREV_AUTH_NOT_VALID = 2, | ||
269 | WLAN_REASON_DEAUTH_LEAVING = 3, | ||
270 | WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY = 4, | ||
271 | WLAN_REASON_DISASSOC_AP_BUSY = 5, | ||
272 | WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA = 6, | ||
273 | WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA = 7, | ||
274 | WLAN_REASON_DISASSOC_STA_HAS_LEFT = 8, | ||
275 | WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH = 9, | ||
276 | /* 802.11h */ | ||
277 | WLAN_REASON_DISASSOC_BAD_POWER = 10, | ||
278 | WLAN_REASON_DISASSOC_BAD_SUPP_CHAN = 11, | ||
279 | /* 802.11i */ | ||
280 | WLAN_REASON_INVALID_IE = 13, | ||
281 | WLAN_REASON_MIC_FAILURE = 14, | ||
282 | WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT = 15, | ||
283 | WLAN_REASON_GROUP_KEY_HANDSHAKE_TIMEOUT = 16, | ||
284 | WLAN_REASON_IE_DIFFERENT = 17, | ||
285 | WLAN_REASON_INVALID_GROUP_CIPHER = 18, | ||
286 | WLAN_REASON_INVALID_PAIRWISE_CIPHER = 19, | ||
287 | WLAN_REASON_INVALID_AKMP = 20, | ||
288 | WLAN_REASON_UNSUPP_RSN_VERSION = 21, | ||
289 | WLAN_REASON_INVALID_RSN_IE_CAP = 22, | ||
290 | WLAN_REASON_IEEE8021X_FAILED = 23, | ||
291 | WLAN_REASON_CIPHER_SUITE_REJECTED = 24, | ||
292 | }; | ||
293 | |||
294 | |||
295 | /* Information Element IDs */ | ||
296 | enum ieee80211_eid { | ||
297 | WLAN_EID_SSID = 0, | ||
298 | WLAN_EID_SUPP_RATES = 1, | ||
299 | WLAN_EID_FH_PARAMS = 2, | ||
300 | WLAN_EID_DS_PARAMS = 3, | ||
301 | WLAN_EID_CF_PARAMS = 4, | ||
302 | WLAN_EID_TIM = 5, | ||
303 | WLAN_EID_IBSS_PARAMS = 6, | ||
304 | WLAN_EID_CHALLENGE = 16, | ||
305 | /* 802.11d */ | ||
306 | WLAN_EID_COUNTRY = 7, | ||
307 | WLAN_EID_HP_PARAMS = 8, | ||
308 | WLAN_EID_HP_TABLE = 9, | ||
309 | WLAN_EID_REQUEST = 10, | ||
310 | /* 802.11h */ | ||
311 | WLAN_EID_PWR_CONSTRAINT = 32, | ||
312 | WLAN_EID_PWR_CAPABILITY = 33, | ||
313 | WLAN_EID_TPC_REQUEST = 34, | ||
314 | WLAN_EID_TPC_REPORT = 35, | ||
315 | WLAN_EID_SUPPORTED_CHANNELS = 36, | ||
316 | WLAN_EID_CHANNEL_SWITCH = 37, | ||
317 | WLAN_EID_MEASURE_REQUEST = 38, | ||
318 | WLAN_EID_MEASURE_REPORT = 39, | ||
319 | WLAN_EID_QUIET = 40, | ||
320 | WLAN_EID_IBSS_DFS = 41, | ||
321 | /* 802.11g */ | ||
322 | WLAN_EID_ERP_INFO = 42, | ||
323 | WLAN_EID_EXT_SUPP_RATES = 50, | ||
324 | /* 802.11i */ | ||
325 | WLAN_EID_RSN = 48, | ||
326 | WLAN_EID_WPA = 221, | ||
327 | WLAN_EID_GENERIC = 221, | ||
328 | WLAN_EID_VENDOR_SPECIFIC = 221, | ||
329 | WLAN_EID_QOS_PARAMETER = 222 | ||
330 | }; | ||
331 | |||
332 | /* cipher suite selectors */ | ||
333 | #define WLAN_CIPHER_SUITE_USE_GROUP 0x000FAC00 | ||
334 | #define WLAN_CIPHER_SUITE_WEP40 0x000FAC01 | ||
335 | #define WLAN_CIPHER_SUITE_TKIP 0x000FAC02 | ||
336 | /* reserved: 0x000FAC03 */ | ||
337 | #define WLAN_CIPHER_SUITE_CCMP 0x000FAC04 | ||
338 | #define WLAN_CIPHER_SUITE_WEP104 0x000FAC05 | ||
339 | |||
340 | #define WLAN_MAX_KEY_LEN 32 | ||
341 | |||
342 | #endif /* IEEE80211_H */ | ||
diff --git a/include/linux/input-polldev.h b/include/linux/input-polldev.h new file mode 100644 index 000000000000..597a0077b3c5 --- /dev/null +++ b/include/linux/input-polldev.h | |||
@@ -0,0 +1,46 @@ | |||
1 | #ifndef _INPUT_POLLDEV_H | ||
2 | #define _INPUT_POLLDEV_H | ||
3 | |||
4 | /* | ||
5 | * Copyright (c) 2007 Dmitry Torokhov | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published by | ||
9 | * the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #include <linux/input.h> | ||
13 | #include <linux/workqueue.h> | ||
14 | |||
15 | /** | ||
16 | * struct input_polled_dev - simple polled input device | ||
17 | * @private: private driver data | ||
18 | * @flush: driver-supplied method that flushes device's state upon | ||
19 | * opening (optional) | ||
20 | * @poll: driver-supplied method that polls the device and posts | ||
21 | * input events (mandatory). | ||
22 | * @poll_interval: specifies how often the poll() method shoudl be called. | ||
23 | * @input: input device structire associated with the polled device. | ||
24 | * Must be properly initialized by the driver (id, name, phys, bits). | ||
25 | * | ||
26 | * Polled input device provides a skeleton for supporting simple input | ||
27 | * devices that do not raise interrupts but have to be periodically | ||
28 | * scanned or polled to detect changes in their state. | ||
29 | */ | ||
30 | struct input_polled_dev { | ||
31 | void *private; | ||
32 | |||
33 | void (*flush)(struct input_polled_dev *dev); | ||
34 | void (*poll)(struct input_polled_dev *dev); | ||
35 | unsigned int poll_interval; /* msec */ | ||
36 | |||
37 | struct input_dev *input; | ||
38 | struct delayed_work work; | ||
39 | }; | ||
40 | |||
41 | struct input_polled_dev *input_allocate_polled_device(void); | ||
42 | void input_free_polled_device(struct input_polled_dev *dev); | ||
43 | int input_register_polled_device(struct input_polled_dev *dev); | ||
44 | void input_unregister_polled_device(struct input_polled_dev *dev); | ||
45 | |||
46 | #endif | ||
diff --git a/include/linux/input.h b/include/linux/input.h index bde65c8a3519..439954d09752 100644 --- a/include/linux/input.h +++ b/include/linux/input.h | |||
@@ -506,6 +506,7 @@ struct input_absinfo { | |||
506 | #define KEY_VOICEMAIL 0x1ac | 506 | #define KEY_VOICEMAIL 0x1ac |
507 | #define KEY_ADDRESSBOOK 0x1ad | 507 | #define KEY_ADDRESSBOOK 0x1ad |
508 | #define KEY_MESSENGER 0x1ae | 508 | #define KEY_MESSENGER 0x1ae |
509 | #define KEY_DISPLAYTOGGLE 0x1af /* Turn display (LCD) on and off */ | ||
509 | 510 | ||
510 | #define KEY_DEL_EOL 0x1c0 | 511 | #define KEY_DEL_EOL 0x1c0 |
511 | #define KEY_DEL_EOS 0x1c1 | 512 | #define KEY_DEL_EOS 0x1c1 |
@@ -676,6 +677,7 @@ struct input_absinfo { | |||
676 | #define BUS_I2C 0x18 | 677 | #define BUS_I2C 0x18 |
677 | #define BUS_HOST 0x19 | 678 | #define BUS_HOST 0x19 |
678 | #define BUS_GSC 0x1A | 679 | #define BUS_GSC 0x1A |
680 | #define BUS_ATARI 0x1B | ||
679 | 681 | ||
680 | /* | 682 | /* |
681 | * Values describing the status of a force-feedback effect | 683 | * Values describing the status of a force-feedback effect |
@@ -913,33 +915,6 @@ struct ff_effect { | |||
913 | #define BIT(x) (1UL<<((x)%BITS_PER_LONG)) | 915 | #define BIT(x) (1UL<<((x)%BITS_PER_LONG)) |
914 | #define LONG(x) ((x)/BITS_PER_LONG) | 916 | #define LONG(x) ((x)/BITS_PER_LONG) |
915 | 917 | ||
916 | #define INPUT_KEYCODE(dev, scancode) ((dev->keycodesize == 1) ? ((u8*)dev->keycode)[scancode] : \ | ||
917 | ((dev->keycodesize == 2) ? ((u16*)dev->keycode)[scancode] : (((u32*)dev->keycode)[scancode]))) | ||
918 | |||
919 | #define SET_INPUT_KEYCODE(dev, scancode, val) \ | ||
920 | ({ unsigned __old; \ | ||
921 | switch (dev->keycodesize) { \ | ||
922 | case 1: { \ | ||
923 | u8 *k = (u8 *)dev->keycode; \ | ||
924 | __old = k[scancode]; \ | ||
925 | k[scancode] = val; \ | ||
926 | break; \ | ||
927 | } \ | ||
928 | case 2: { \ | ||
929 | u16 *k = (u16 *)dev->keycode; \ | ||
930 | __old = k[scancode]; \ | ||
931 | k[scancode] = val; \ | ||
932 | break; \ | ||
933 | } \ | ||
934 | default: { \ | ||
935 | u32 *k = (u32 *)dev->keycode; \ | ||
936 | __old = k[scancode]; \ | ||
937 | k[scancode] = val; \ | ||
938 | break; \ | ||
939 | } \ | ||
940 | } \ | ||
941 | __old; }) | ||
942 | |||
943 | struct input_dev { | 918 | struct input_dev { |
944 | 919 | ||
945 | void *private; | 920 | void *private; |
@@ -962,6 +937,8 @@ struct input_dev { | |||
962 | unsigned int keycodemax; | 937 | unsigned int keycodemax; |
963 | unsigned int keycodesize; | 938 | unsigned int keycodesize; |
964 | void *keycode; | 939 | void *keycode; |
940 | int (*setkeycode)(struct input_dev *dev, int scancode, int keycode); | ||
941 | int (*getkeycode)(struct input_dev *dev, int scancode, int *keycode); | ||
965 | 942 | ||
966 | struct ff_device *ff; | 943 | struct ff_device *ff; |
967 | 944 | ||
@@ -996,6 +973,9 @@ struct input_dev { | |||
996 | unsigned int users; | 973 | unsigned int users; |
997 | 974 | ||
998 | struct class_device cdev; | 975 | struct class_device cdev; |
976 | union { /* temporarily so while we switching to struct device */ | ||
977 | struct device *parent; | ||
978 | } dev; | ||
999 | 979 | ||
1000 | struct list_head h_list; | 980 | struct list_head h_list; |
1001 | struct list_head node; | 981 | struct list_head node; |
@@ -1074,7 +1054,7 @@ struct input_handler { | |||
1074 | void *private; | 1054 | void *private; |
1075 | 1055 | ||
1076 | void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); | 1056 | void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); |
1077 | struct input_handle* (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id); | 1057 | int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id); |
1078 | void (*disconnect)(struct input_handle *handle); | 1058 | void (*disconnect)(struct input_handle *handle); |
1079 | void (*start)(struct input_handle *handle); | 1059 | void (*start)(struct input_handle *handle); |
1080 | 1060 | ||
@@ -1104,7 +1084,7 @@ struct input_handle { | |||
1104 | }; | 1084 | }; |
1105 | 1085 | ||
1106 | #define to_dev(n) container_of(n,struct input_dev,node) | 1086 | #define to_dev(n) container_of(n,struct input_dev,node) |
1107 | #define to_handler(n) container_of(n,struct input_handler,node); | 1087 | #define to_handler(n) container_of(n,struct input_handler,node) |
1108 | #define to_handle(n) container_of(n,struct input_handle,d_node) | 1088 | #define to_handle(n) container_of(n,struct input_handle,d_node) |
1109 | #define to_handle_h(n) container_of(n,struct input_handle,h_node) | 1089 | #define to_handle_h(n) container_of(n,struct input_handle,h_node) |
1110 | 1090 | ||
@@ -1121,12 +1101,25 @@ static inline void input_put_device(struct input_dev *dev) | |||
1121 | class_device_put(&dev->cdev); | 1101 | class_device_put(&dev->cdev); |
1122 | } | 1102 | } |
1123 | 1103 | ||
1104 | static inline void *input_get_drvdata(struct input_dev *dev) | ||
1105 | { | ||
1106 | return dev->private; | ||
1107 | } | ||
1108 | |||
1109 | static inline void input_set_drvdata(struct input_dev *dev, void *data) | ||
1110 | { | ||
1111 | dev->private = data; | ||
1112 | } | ||
1113 | |||
1124 | int input_register_device(struct input_dev *); | 1114 | int input_register_device(struct input_dev *); |
1125 | void input_unregister_device(struct input_dev *); | 1115 | void input_unregister_device(struct input_dev *); |
1126 | 1116 | ||
1127 | int input_register_handler(struct input_handler *); | 1117 | int input_register_handler(struct input_handler *); |
1128 | void input_unregister_handler(struct input_handler *); | 1118 | void input_unregister_handler(struct input_handler *); |
1129 | 1119 | ||
1120 | int input_register_handle(struct input_handle *); | ||
1121 | void input_unregister_handle(struct input_handle *); | ||
1122 | |||
1130 | int input_grab_device(struct input_handle *); | 1123 | int input_grab_device(struct input_handle *); |
1131 | void input_release_device(struct input_handle *); | 1124 | void input_release_device(struct input_handle *); |
1132 | 1125 | ||
@@ -1168,6 +1161,8 @@ static inline void input_sync(struct input_dev *dev) | |||
1168 | input_event(dev, EV_SYN, SYN_REPORT, 0); | 1161 | input_event(dev, EV_SYN, SYN_REPORT, 0); |
1169 | } | 1162 | } |
1170 | 1163 | ||
1164 | void input_set_capability(struct input_dev *dev, unsigned int type, unsigned int code); | ||
1165 | |||
1171 | static inline void input_set_abs_params(struct input_dev *dev, int axis, int min, int max, int fuzz, int flat) | 1166 | static inline void input_set_abs_params(struct input_dev *dev, int axis, int min, int max, int fuzz, int flat) |
1172 | { | 1167 | { |
1173 | dev->absmin[axis] = min; | 1168 | dev->absmin[axis] = min; |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 838cf5a5bd7f..0319f665dd3f 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
@@ -185,10 +185,14 @@ static inline int disable_irq_wake(unsigned int irq) | |||
185 | * validator need to define the methods below in their asm/irq.h | 185 | * validator need to define the methods below in their asm/irq.h |
186 | * files, under an #ifdef CONFIG_LOCKDEP section. | 186 | * files, under an #ifdef CONFIG_LOCKDEP section. |
187 | */ | 187 | */ |
188 | # ifndef CONFIG_LOCKDEP | 188 | #ifndef CONFIG_LOCKDEP |
189 | # define disable_irq_nosync_lockdep(irq) disable_irq_nosync(irq) | 189 | # define disable_irq_nosync_lockdep(irq) disable_irq_nosync(irq) |
190 | # define disable_irq_nosync_lockdep_irqsave(irq, flags) \ | ||
191 | disable_irq_nosync(irq) | ||
190 | # define disable_irq_lockdep(irq) disable_irq(irq) | 192 | # define disable_irq_lockdep(irq) disable_irq(irq) |
191 | # define enable_irq_lockdep(irq) enable_irq(irq) | 193 | # define enable_irq_lockdep(irq) enable_irq(irq) |
194 | # define enable_irq_lockdep_irqrestore(irq, flags) \ | ||
195 | enable_irq(irq) | ||
192 | # endif | 196 | # endif |
193 | 197 | ||
194 | #endif /* CONFIG_GENERIC_HARDIRQS */ | 198 | #endif /* CONFIG_GENERIC_HARDIRQS */ |
diff --git a/include/linux/kobject.h b/include/linux/kobject.h index eb0e63ef297f..c288e41ba331 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h | |||
@@ -124,7 +124,6 @@ struct kset_uevent_ops { | |||
124 | }; | 124 | }; |
125 | 125 | ||
126 | struct kset { | 126 | struct kset { |
127 | struct subsystem * subsys; | ||
128 | struct kobj_type * ktype; | 127 | struct kobj_type * ktype; |
129 | struct list_head list; | 128 | struct list_head list; |
130 | spinlock_t list_lock; | 129 | spinlock_t list_lock; |
@@ -171,32 +170,23 @@ extern struct kobject * kset_find_obj(struct kset *, const char *); | |||
171 | #define set_kset_name(str) .kset = { .kobj = { .name = str } } | 170 | #define set_kset_name(str) .kset = { .kobj = { .name = str } } |
172 | 171 | ||
173 | 172 | ||
174 | |||
175 | struct subsystem { | ||
176 | struct kset kset; | ||
177 | }; | ||
178 | |||
179 | #define decl_subsys(_name,_type,_uevent_ops) \ | 173 | #define decl_subsys(_name,_type,_uevent_ops) \ |
180 | struct subsystem _name##_subsys = { \ | 174 | struct kset _name##_subsys = { \ |
181 | .kset = { \ | 175 | .kobj = { .name = __stringify(_name) }, \ |
182 | .kobj = { .name = __stringify(_name) }, \ | 176 | .ktype = _type, \ |
183 | .ktype = _type, \ | 177 | .uevent_ops =_uevent_ops, \ |
184 | .uevent_ops =_uevent_ops, \ | ||
185 | } \ | ||
186 | } | 178 | } |
187 | #define decl_subsys_name(_varname,_name,_type,_uevent_ops) \ | 179 | #define decl_subsys_name(_varname,_name,_type,_uevent_ops) \ |
188 | struct subsystem _varname##_subsys = { \ | 180 | struct kset _varname##_subsys = { \ |
189 | .kset = { \ | 181 | .kobj = { .name = __stringify(_name) }, \ |
190 | .kobj = { .name = __stringify(_name) }, \ | 182 | .ktype = _type, \ |
191 | .ktype = _type, \ | 183 | .uevent_ops =_uevent_ops, \ |
192 | .uevent_ops =_uevent_ops, \ | ||
193 | } \ | ||
194 | } | 184 | } |
195 | 185 | ||
196 | /* The global /sys/kernel/ subsystem for people to chain off of */ | 186 | /* The global /sys/kernel/ subsystem for people to chain off of */ |
197 | extern struct subsystem kernel_subsys; | 187 | extern struct kset kernel_subsys; |
198 | /* The global /sys/hypervisor/ subsystem */ | 188 | /* The global /sys/hypervisor/ subsystem */ |
199 | extern struct subsystem hypervisor_subsys; | 189 | extern struct kset hypervisor_subsys; |
200 | 190 | ||
201 | /** | 191 | /** |
202 | * Helpers for setting the kset of registered objects. | 192 | * Helpers for setting the kset of registered objects. |
@@ -214,7 +204,7 @@ extern struct subsystem hypervisor_subsys; | |||
214 | */ | 204 | */ |
215 | 205 | ||
216 | #define kobj_set_kset_s(obj,subsys) \ | 206 | #define kobj_set_kset_s(obj,subsys) \ |
217 | (obj)->kobj.kset = &(subsys).kset | 207 | (obj)->kobj.kset = &(subsys) |
218 | 208 | ||
219 | /** | 209 | /** |
220 | * kset_set_kset_s(obj,subsys) - set kset for embedded kset. | 210 | * kset_set_kset_s(obj,subsys) - set kset for embedded kset. |
@@ -228,7 +218,7 @@ extern struct subsystem hypervisor_subsys; | |||
228 | */ | 218 | */ |
229 | 219 | ||
230 | #define kset_set_kset_s(obj,subsys) \ | 220 | #define kset_set_kset_s(obj,subsys) \ |
231 | (obj)->kset.kobj.kset = &(subsys).kset | 221 | (obj)->kset.kobj.kset = &(subsys) |
232 | 222 | ||
233 | /** | 223 | /** |
234 | * subsys_set_kset(obj,subsys) - set kset for subsystem | 224 | * subsys_set_kset(obj,subsys) - set kset for subsystem |
@@ -241,29 +231,31 @@ extern struct subsystem hypervisor_subsys; | |||
241 | */ | 231 | */ |
242 | 232 | ||
243 | #define subsys_set_kset(obj,_subsys) \ | 233 | #define subsys_set_kset(obj,_subsys) \ |
244 | (obj)->subsys.kset.kobj.kset = &(_subsys).kset | 234 | (obj)->subsys.kobj.kset = &(_subsys) |
245 | 235 | ||
246 | extern void subsystem_init(struct subsystem *); | 236 | extern void subsystem_init(struct kset *); |
247 | extern int __must_check subsystem_register(struct subsystem *); | 237 | extern int __must_check subsystem_register(struct kset *); |
248 | extern void subsystem_unregister(struct subsystem *); | 238 | extern void subsystem_unregister(struct kset *); |
249 | 239 | ||
250 | static inline struct subsystem * subsys_get(struct subsystem * s) | 240 | static inline struct kset *subsys_get(struct kset *s) |
251 | { | 241 | { |
252 | return s ? container_of(kset_get(&s->kset),struct subsystem,kset) : NULL; | 242 | if (s) |
243 | return kset_get(s); | ||
244 | return NULL; | ||
253 | } | 245 | } |
254 | 246 | ||
255 | static inline void subsys_put(struct subsystem * s) | 247 | static inline void subsys_put(struct kset *s) |
256 | { | 248 | { |
257 | kset_put(&s->kset); | 249 | kset_put(s); |
258 | } | 250 | } |
259 | 251 | ||
260 | struct subsys_attribute { | 252 | struct subsys_attribute { |
261 | struct attribute attr; | 253 | struct attribute attr; |
262 | ssize_t (*show)(struct subsystem *, char *); | 254 | ssize_t (*show)(struct kset *, char *); |
263 | ssize_t (*store)(struct subsystem *, const char *, size_t); | 255 | ssize_t (*store)(struct kset *, const char *, size_t); |
264 | }; | 256 | }; |
265 | 257 | ||
266 | extern int __must_check subsys_create_file(struct subsystem * , | 258 | extern int __must_check subsys_create_file(struct kset *, |
267 | struct subsys_attribute *); | 259 | struct subsys_attribute *); |
268 | 260 | ||
269 | #if defined(CONFIG_HOTPLUG) | 261 | #if defined(CONFIG_HOTPLUG) |
diff --git a/include/linux/lockd/lockd.h b/include/linux/lockd/lockd.h index ac25b5649c59..f6a81e0b1b93 100644 --- a/include/linux/lockd/lockd.h +++ b/include/linux/lockd/lockd.h | |||
@@ -88,7 +88,7 @@ struct nlm_wait; | |||
88 | /* | 88 | /* |
89 | * Memory chunk for NLM client RPC request. | 89 | * Memory chunk for NLM client RPC request. |
90 | */ | 90 | */ |
91 | #define NLMCLNT_OHSIZE (sizeof(utsname()->nodename)+10) | 91 | #define NLMCLNT_OHSIZE ((__NEW_UTS_LEN) + 10u) |
92 | struct nlm_rqst { | 92 | struct nlm_rqst { |
93 | unsigned int a_flags; /* initial RPC task flags */ | 93 | unsigned int a_flags; /* initial RPC task flags */ |
94 | struct nlm_host * a_host; /* host handle */ | 94 | struct nlm_host * a_host; /* host handle */ |
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h index e45712acfac5..badf702fcff4 100644 --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h | |||
@@ -10,7 +10,7 @@ | |||
10 | #ifndef LINUX_MMC_CARD_H | 10 | #ifndef LINUX_MMC_CARD_H |
11 | #define LINUX_MMC_CARD_H | 11 | #define LINUX_MMC_CARD_H |
12 | 12 | ||
13 | #include <linux/mmc/mmc.h> | 13 | #include <linux/mmc/core.h> |
14 | 14 | ||
15 | struct mmc_cid { | 15 | struct mmc_cid { |
16 | unsigned int manfid; | 16 | unsigned int manfid; |
@@ -41,6 +41,7 @@ struct mmc_csd { | |||
41 | 41 | ||
42 | struct mmc_ext_csd { | 42 | struct mmc_ext_csd { |
43 | unsigned int hs_max_dtr; | 43 | unsigned int hs_max_dtr; |
44 | unsigned int sectors; | ||
44 | }; | 45 | }; |
45 | 46 | ||
46 | struct sd_scr { | 47 | struct sd_scr { |
@@ -60,18 +61,17 @@ struct mmc_host; | |||
60 | * MMC device | 61 | * MMC device |
61 | */ | 62 | */ |
62 | struct mmc_card { | 63 | struct mmc_card { |
63 | struct list_head node; /* node in hosts devices list */ | ||
64 | struct mmc_host *host; /* the host this device belongs to */ | 64 | struct mmc_host *host; /* the host this device belongs to */ |
65 | struct device dev; /* the device */ | 65 | struct device dev; /* the device */ |
66 | unsigned int rca; /* relative card address of device */ | 66 | unsigned int rca; /* relative card address of device */ |
67 | unsigned int type; /* card type */ | ||
68 | #define MMC_TYPE_MMC 0 /* MMC card */ | ||
69 | #define MMC_TYPE_SD 1 /* SD card */ | ||
67 | unsigned int state; /* (our) card state */ | 70 | unsigned int state; /* (our) card state */ |
68 | #define MMC_STATE_PRESENT (1<<0) /* present in sysfs */ | 71 | #define MMC_STATE_PRESENT (1<<0) /* present in sysfs */ |
69 | #define MMC_STATE_DEAD (1<<1) /* device no longer in stack */ | 72 | #define MMC_STATE_READONLY (1<<1) /* card is read-only */ |
70 | #define MMC_STATE_BAD (1<<2) /* unrecognised device */ | 73 | #define MMC_STATE_HIGHSPEED (1<<2) /* card is in high speed mode */ |
71 | #define MMC_STATE_SDCARD (1<<3) /* is an SD card */ | 74 | #define MMC_STATE_BLOCKADDR (1<<3) /* card uses block-addressing */ |
72 | #define MMC_STATE_READONLY (1<<4) /* card is read-only */ | ||
73 | #define MMC_STATE_HIGHSPEED (1<<5) /* card is in high speed mode */ | ||
74 | #define MMC_STATE_BLOCKADDR (1<<6) /* card uses block-addressing */ | ||
75 | u32 raw_cid[4]; /* raw card CID */ | 75 | u32 raw_cid[4]; /* raw card CID */ |
76 | u32 raw_csd[4]; /* raw card CSD */ | 76 | u32 raw_csd[4]; /* raw card CSD */ |
77 | u32 raw_scr[2]; /* raw card SCR */ | 77 | u32 raw_scr[2]; /* raw card SCR */ |
@@ -82,18 +82,15 @@ struct mmc_card { | |||
82 | struct sd_switch_caps sw_caps; /* switch (CMD6) caps */ | 82 | struct sd_switch_caps sw_caps; /* switch (CMD6) caps */ |
83 | }; | 83 | }; |
84 | 84 | ||
85 | #define mmc_card_mmc(c) ((c)->type == MMC_TYPE_MMC) | ||
86 | #define mmc_card_sd(c) ((c)->type == MMC_TYPE_SD) | ||
87 | |||
85 | #define mmc_card_present(c) ((c)->state & MMC_STATE_PRESENT) | 88 | #define mmc_card_present(c) ((c)->state & MMC_STATE_PRESENT) |
86 | #define mmc_card_dead(c) ((c)->state & MMC_STATE_DEAD) | ||
87 | #define mmc_card_bad(c) ((c)->state & MMC_STATE_BAD) | ||
88 | #define mmc_card_sd(c) ((c)->state & MMC_STATE_SDCARD) | ||
89 | #define mmc_card_readonly(c) ((c)->state & MMC_STATE_READONLY) | 89 | #define mmc_card_readonly(c) ((c)->state & MMC_STATE_READONLY) |
90 | #define mmc_card_highspeed(c) ((c)->state & MMC_STATE_HIGHSPEED) | 90 | #define mmc_card_highspeed(c) ((c)->state & MMC_STATE_HIGHSPEED) |
91 | #define mmc_card_blockaddr(c) ((c)->state & MMC_STATE_BLOCKADDR) | 91 | #define mmc_card_blockaddr(c) ((c)->state & MMC_STATE_BLOCKADDR) |
92 | 92 | ||
93 | #define mmc_card_set_present(c) ((c)->state |= MMC_STATE_PRESENT) | 93 | #define mmc_card_set_present(c) ((c)->state |= MMC_STATE_PRESENT) |
94 | #define mmc_card_set_dead(c) ((c)->state |= MMC_STATE_DEAD) | ||
95 | #define mmc_card_set_bad(c) ((c)->state |= MMC_STATE_BAD) | ||
96 | #define mmc_card_set_sd(c) ((c)->state |= MMC_STATE_SDCARD) | ||
97 | #define mmc_card_set_readonly(c) ((c)->state |= MMC_STATE_READONLY) | 94 | #define mmc_card_set_readonly(c) ((c)->state |= MMC_STATE_READONLY) |
98 | #define mmc_card_set_highspeed(c) ((c)->state |= MMC_STATE_HIGHSPEED) | 95 | #define mmc_card_set_highspeed(c) ((c)->state |= MMC_STATE_HIGHSPEED) |
99 | #define mmc_card_set_blockaddr(c) ((c)->state |= MMC_STATE_BLOCKADDR) | 96 | #define mmc_card_set_blockaddr(c) ((c)->state |= MMC_STATE_BLOCKADDR) |
@@ -119,11 +116,4 @@ struct mmc_driver { | |||
119 | extern int mmc_register_driver(struct mmc_driver *); | 116 | extern int mmc_register_driver(struct mmc_driver *); |
120 | extern void mmc_unregister_driver(struct mmc_driver *); | 117 | extern void mmc_unregister_driver(struct mmc_driver *); |
121 | 118 | ||
122 | static inline int mmc_card_claim_host(struct mmc_card *card) | ||
123 | { | ||
124 | return __mmc_claim_host(card->host, card); | ||
125 | } | ||
126 | |||
127 | #define mmc_card_release_host(c) mmc_release_host((c)->host) | ||
128 | |||
129 | #endif | 119 | #endif |
diff --git a/include/linux/mmc/core.h b/include/linux/mmc/core.h new file mode 100644 index 000000000000..04bbe12fae8d --- /dev/null +++ b/include/linux/mmc/core.h | |||
@@ -0,0 +1,112 @@ | |||
1 | /* | ||
2 | * linux/include/linux/mmc/core.h | ||
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 version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | #ifndef LINUX_MMC_CORE_H | ||
9 | #define LINUX_MMC_CORE_H | ||
10 | |||
11 | #include <linux/interrupt.h> | ||
12 | #include <linux/device.h> | ||
13 | |||
14 | struct request; | ||
15 | struct mmc_data; | ||
16 | struct mmc_request; | ||
17 | |||
18 | struct mmc_command { | ||
19 | u32 opcode; | ||
20 | u32 arg; | ||
21 | u32 resp[4]; | ||
22 | unsigned int flags; /* expected response type */ | ||
23 | #define MMC_RSP_PRESENT (1 << 0) | ||
24 | #define MMC_RSP_136 (1 << 1) /* 136 bit response */ | ||
25 | #define MMC_RSP_CRC (1 << 2) /* expect valid crc */ | ||
26 | #define MMC_RSP_BUSY (1 << 3) /* card may send busy */ | ||
27 | #define MMC_RSP_OPCODE (1 << 4) /* response contains opcode */ | ||
28 | #define MMC_CMD_MASK (3 << 5) /* command type */ | ||
29 | #define MMC_CMD_AC (0 << 5) | ||
30 | #define MMC_CMD_ADTC (1 << 5) | ||
31 | #define MMC_CMD_BC (2 << 5) | ||
32 | #define MMC_CMD_BCR (3 << 5) | ||
33 | |||
34 | /* | ||
35 | * These are the response types, and correspond to valid bit | ||
36 | * patterns of the above flags. One additional valid pattern | ||
37 | * is all zeros, which means we don't expect a response. | ||
38 | */ | ||
39 | #define MMC_RSP_NONE (0) | ||
40 | #define MMC_RSP_R1 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE) | ||
41 | #define MMC_RSP_R1B (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE|MMC_RSP_BUSY) | ||
42 | #define MMC_RSP_R2 (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC) | ||
43 | #define MMC_RSP_R3 (MMC_RSP_PRESENT) | ||
44 | #define MMC_RSP_R6 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE) | ||
45 | #define MMC_RSP_R7 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE) | ||
46 | |||
47 | #define mmc_resp_type(cmd) ((cmd)->flags & (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC|MMC_RSP_BUSY|MMC_RSP_OPCODE)) | ||
48 | |||
49 | /* | ||
50 | * These are the command types. | ||
51 | */ | ||
52 | #define mmc_cmd_type(cmd) ((cmd)->flags & MMC_CMD_MASK) | ||
53 | |||
54 | unsigned int retries; /* max number of retries */ | ||
55 | unsigned int error; /* command error */ | ||
56 | |||
57 | #define MMC_ERR_NONE 0 | ||
58 | #define MMC_ERR_TIMEOUT 1 | ||
59 | #define MMC_ERR_BADCRC 2 | ||
60 | #define MMC_ERR_FIFO 3 | ||
61 | #define MMC_ERR_FAILED 4 | ||
62 | #define MMC_ERR_INVALID 5 | ||
63 | |||
64 | struct mmc_data *data; /* data segment associated with cmd */ | ||
65 | struct mmc_request *mrq; /* associated request */ | ||
66 | }; | ||
67 | |||
68 | struct mmc_data { | ||
69 | unsigned int timeout_ns; /* data timeout (in ns, max 80ms) */ | ||
70 | unsigned int timeout_clks; /* data timeout (in clocks) */ | ||
71 | unsigned int blksz; /* data block size */ | ||
72 | unsigned int blocks; /* number of blocks */ | ||
73 | unsigned int error; /* data error */ | ||
74 | unsigned int flags; | ||
75 | |||
76 | #define MMC_DATA_WRITE (1 << 8) | ||
77 | #define MMC_DATA_READ (1 << 9) | ||
78 | #define MMC_DATA_STREAM (1 << 10) | ||
79 | #define MMC_DATA_MULTI (1 << 11) | ||
80 | |||
81 | unsigned int bytes_xfered; | ||
82 | |||
83 | struct mmc_command *stop; /* stop command */ | ||
84 | struct mmc_request *mrq; /* associated request */ | ||
85 | |||
86 | unsigned int sg_len; /* size of scatter list */ | ||
87 | struct scatterlist *sg; /* I/O scatter list */ | ||
88 | }; | ||
89 | |||
90 | struct mmc_request { | ||
91 | struct mmc_command *cmd; | ||
92 | struct mmc_data *data; | ||
93 | struct mmc_command *stop; | ||
94 | |||
95 | void *done_data; /* completion data */ | ||
96 | void (*done)(struct mmc_request *);/* completion function */ | ||
97 | }; | ||
98 | |||
99 | struct mmc_host; | ||
100 | struct mmc_card; | ||
101 | |||
102 | extern int mmc_wait_for_req(struct mmc_host *, struct mmc_request *); | ||
103 | extern int mmc_wait_for_cmd(struct mmc_host *, struct mmc_command *, int); | ||
104 | extern int mmc_wait_for_app_cmd(struct mmc_host *, struct mmc_card *, | ||
105 | struct mmc_command *, int); | ||
106 | |||
107 | extern void mmc_set_data_timeout(struct mmc_data *, const struct mmc_card *, int); | ||
108 | |||
109 | extern void mmc_claim_host(struct mmc_host *host); | ||
110 | extern void mmc_release_host(struct mmc_host *host); | ||
111 | |||
112 | #endif | ||
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index bfcef8a1ad8b..b1350dfd3e91 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h | |||
@@ -10,36 +10,13 @@ | |||
10 | #ifndef LINUX_MMC_HOST_H | 10 | #ifndef LINUX_MMC_HOST_H |
11 | #define LINUX_MMC_HOST_H | 11 | #define LINUX_MMC_HOST_H |
12 | 12 | ||
13 | #include <linux/mmc/mmc.h> | 13 | #include <linux/mmc/core.h> |
14 | 14 | ||
15 | struct mmc_ios { | 15 | struct mmc_ios { |
16 | unsigned int clock; /* clock rate */ | 16 | unsigned int clock; /* clock rate */ |
17 | unsigned short vdd; | 17 | unsigned short vdd; |
18 | 18 | ||
19 | #define MMC_VDD_150 0 | 19 | /* vdd stores the bit number of the selected voltage range from below. */ |
20 | #define MMC_VDD_155 1 | ||
21 | #define MMC_VDD_160 2 | ||
22 | #define MMC_VDD_165 3 | ||
23 | #define MMC_VDD_170 4 | ||
24 | #define MMC_VDD_180 5 | ||
25 | #define MMC_VDD_190 6 | ||
26 | #define MMC_VDD_200 7 | ||
27 | #define MMC_VDD_210 8 | ||
28 | #define MMC_VDD_220 9 | ||
29 | #define MMC_VDD_230 10 | ||
30 | #define MMC_VDD_240 11 | ||
31 | #define MMC_VDD_250 12 | ||
32 | #define MMC_VDD_260 13 | ||
33 | #define MMC_VDD_270 14 | ||
34 | #define MMC_VDD_280 15 | ||
35 | #define MMC_VDD_290 16 | ||
36 | #define MMC_VDD_300 17 | ||
37 | #define MMC_VDD_310 18 | ||
38 | #define MMC_VDD_320 19 | ||
39 | #define MMC_VDD_330 20 | ||
40 | #define MMC_VDD_340 21 | ||
41 | #define MMC_VDD_350 22 | ||
42 | #define MMC_VDD_360 23 | ||
43 | 20 | ||
44 | unsigned char bus_mode; /* command output mode */ | 21 | unsigned char bus_mode; /* command output mode */ |
45 | 22 | ||
@@ -88,6 +65,24 @@ struct mmc_host { | |||
88 | unsigned int f_max; | 65 | unsigned int f_max; |
89 | u32 ocr_avail; | 66 | u32 ocr_avail; |
90 | 67 | ||
68 | #define MMC_VDD_165_195 0x00000080 /* VDD voltage 1.65 - 1.95 */ | ||
69 | #define MMC_VDD_20_21 0x00000100 /* VDD voltage 2.0 ~ 2.1 */ | ||
70 | #define MMC_VDD_21_22 0x00000200 /* VDD voltage 2.1 ~ 2.2 */ | ||
71 | #define MMC_VDD_22_23 0x00000400 /* VDD voltage 2.2 ~ 2.3 */ | ||
72 | #define MMC_VDD_23_24 0x00000800 /* VDD voltage 2.3 ~ 2.4 */ | ||
73 | #define MMC_VDD_24_25 0x00001000 /* VDD voltage 2.4 ~ 2.5 */ | ||
74 | #define MMC_VDD_25_26 0x00002000 /* VDD voltage 2.5 ~ 2.6 */ | ||
75 | #define MMC_VDD_26_27 0x00004000 /* VDD voltage 2.6 ~ 2.7 */ | ||
76 | #define MMC_VDD_27_28 0x00008000 /* VDD voltage 2.7 ~ 2.8 */ | ||
77 | #define MMC_VDD_28_29 0x00010000 /* VDD voltage 2.8 ~ 2.9 */ | ||
78 | #define MMC_VDD_29_30 0x00020000 /* VDD voltage 2.9 ~ 3.0 */ | ||
79 | #define MMC_VDD_30_31 0x00040000 /* VDD voltage 3.0 ~ 3.1 */ | ||
80 | #define MMC_VDD_31_32 0x00080000 /* VDD voltage 3.1 ~ 3.2 */ | ||
81 | #define MMC_VDD_32_33 0x00100000 /* VDD voltage 3.2 ~ 3.3 */ | ||
82 | #define MMC_VDD_33_34 0x00200000 /* VDD voltage 3.3 ~ 3.4 */ | ||
83 | #define MMC_VDD_34_35 0x00400000 /* VDD voltage 3.4 ~ 3.5 */ | ||
84 | #define MMC_VDD_35_36 0x00800000 /* VDD voltage 3.5 ~ 3.6 */ | ||
85 | |||
91 | unsigned long caps; /* Host capabilities */ | 86 | unsigned long caps; /* Host capabilities */ |
92 | 87 | ||
93 | #define MMC_CAP_4_BIT_DATA (1 << 0) /* Can the host do 4 bit transfers */ | 88 | #define MMC_CAP_4_BIT_DATA (1 << 0) /* Can the host do 4 bit transfers */ |
@@ -106,6 +101,8 @@ struct mmc_host { | |||
106 | unsigned int max_blk_count; /* maximum number of blocks in one req */ | 101 | unsigned int max_blk_count; /* maximum number of blocks in one req */ |
107 | 102 | ||
108 | /* private data */ | 103 | /* private data */ |
104 | spinlock_t lock; /* lock for claim and bus ops */ | ||
105 | |||
109 | struct mmc_ios ios; /* current io bus settings */ | 106 | struct mmc_ios ios; /* current io bus settings */ |
110 | u32 ocr; /* the current OCR setting */ | 107 | u32 ocr; /* the current OCR setting */ |
111 | 108 | ||
@@ -113,15 +110,19 @@ struct mmc_host { | |||
113 | #define MMC_MODE_MMC 0 | 110 | #define MMC_MODE_MMC 0 |
114 | #define MMC_MODE_SD 1 | 111 | #define MMC_MODE_SD 1 |
115 | 112 | ||
116 | struct list_head cards; /* devices attached to this host */ | 113 | struct mmc_card *card; /* device attached to this host */ |
117 | 114 | ||
118 | wait_queue_head_t wq; | 115 | wait_queue_head_t wq; |
119 | spinlock_t lock; /* claimed lock */ | ||
120 | unsigned int claimed:1; /* host exclusively claimed */ | 116 | unsigned int claimed:1; /* host exclusively claimed */ |
121 | 117 | ||
122 | struct mmc_card *card_selected; /* the selected MMC card */ | ||
123 | |||
124 | struct delayed_work detect; | 118 | struct delayed_work detect; |
119 | #ifdef CONFIG_MMC_DEBUG | ||
120 | unsigned int removed:1; /* host is being removed */ | ||
121 | #endif | ||
122 | |||
123 | const struct mmc_bus_ops *bus_ops; /* current bus driver */ | ||
124 | unsigned int bus_refs; /* reference counter */ | ||
125 | unsigned int bus_dead:1; /* bus has been released */ | ||
125 | 126 | ||
126 | unsigned long private[0] ____cacheline_aligned; | 127 | unsigned long private[0] ____cacheline_aligned; |
127 | }; | 128 | }; |
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h index cdc54be804f1..e3ed9b95040e 100644 --- a/include/linux/mmc/mmc.h +++ b/include/linux/mmc/mmc.h | |||
@@ -1,119 +1,257 @@ | |||
1 | /* | 1 | /* |
2 | * linux/include/linux/mmc/mmc.h | 2 | * Header for MultiMediaCard (MMC) |
3 | * | 3 | * |
4 | * This program is free software; you can redistribute it and/or modify | 4 | * Copyright 2002 Hewlett-Packard Company |
5 | * it under the terms of the GNU General Public License version 2 as | 5 | * |
6 | * published by the Free Software Foundation. | 6 | * Use consistent with the GNU GPL is permitted, |
7 | * provided that this copyright notice is | ||
8 | * preserved in its entirety in all copies and derived works. | ||
9 | * | ||
10 | * HEWLETT-PACKARD COMPANY MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, | ||
11 | * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS | ||
12 | * FITNESS FOR ANY PARTICULAR PURPOSE. | ||
13 | * | ||
14 | * Many thanks to Alessandro Rubini and Jonathan Corbet! | ||
15 | * | ||
16 | * Based strongly on code by: | ||
17 | * | ||
18 | * Author: Yong-iL Joh <tolkien@mizi.com> | ||
19 | * Date : $Date: 2002/06/18 12:37:30 $ | ||
20 | * | ||
21 | * Author: Andrew Christian | ||
22 | * 15 May 2002 | ||
7 | */ | 23 | */ |
8 | #ifndef MMC_H | 24 | |
9 | #define MMC_H | 25 | #ifndef MMC_MMC_H |
10 | 26 | #define MMC_MMC_H | |
11 | #include <linux/list.h> | 27 | |
12 | #include <linux/interrupt.h> | 28 | /* Standard MMC commands (4.1) type argument response */ |
13 | #include <linux/device.h> | 29 | /* class 1 */ |
14 | 30 | #define MMC_GO_IDLE_STATE 0 /* bc */ | |
15 | struct request; | 31 | #define MMC_SEND_OP_COND 1 /* bcr [31:0] OCR R3 */ |
16 | struct mmc_data; | 32 | #define MMC_ALL_SEND_CID 2 /* bcr R2 */ |
17 | struct mmc_request; | 33 | #define MMC_SET_RELATIVE_ADDR 3 /* ac [31:16] RCA R1 */ |
18 | 34 | #define MMC_SET_DSR 4 /* bc [31:16] RCA */ | |
19 | struct mmc_command { | 35 | #define MMC_SWITCH 6 /* ac [31:0] See below R1b */ |
20 | u32 opcode; | 36 | #define MMC_SELECT_CARD 7 /* ac [31:16] RCA R1 */ |
21 | u32 arg; | 37 | #define MMC_SEND_EXT_CSD 8 /* adtc R1 */ |
22 | u32 resp[4]; | 38 | #define MMC_SEND_CSD 9 /* ac [31:16] RCA R2 */ |
23 | unsigned int flags; /* expected response type */ | 39 | #define MMC_SEND_CID 10 /* ac [31:16] RCA R2 */ |
24 | #define MMC_RSP_PRESENT (1 << 0) | 40 | #define MMC_READ_DAT_UNTIL_STOP 11 /* adtc [31:0] dadr R1 */ |
25 | #define MMC_RSP_136 (1 << 1) /* 136 bit response */ | 41 | #define MMC_STOP_TRANSMISSION 12 /* ac R1b */ |
26 | #define MMC_RSP_CRC (1 << 2) /* expect valid crc */ | 42 | #define MMC_SEND_STATUS 13 /* ac [31:16] RCA R1 */ |
27 | #define MMC_RSP_BUSY (1 << 3) /* card may send busy */ | 43 | #define MMC_GO_INACTIVE_STATE 15 /* ac [31:16] RCA */ |
28 | #define MMC_RSP_OPCODE (1 << 4) /* response contains opcode */ | 44 | |
29 | #define MMC_CMD_MASK (3 << 5) /* command type */ | 45 | /* class 2 */ |
30 | #define MMC_CMD_AC (0 << 5) | 46 | #define MMC_SET_BLOCKLEN 16 /* ac [31:0] block len R1 */ |
31 | #define MMC_CMD_ADTC (1 << 5) | 47 | #define MMC_READ_SINGLE_BLOCK 17 /* adtc [31:0] data addr R1 */ |
32 | #define MMC_CMD_BC (2 << 5) | 48 | #define MMC_READ_MULTIPLE_BLOCK 18 /* adtc [31:0] data addr R1 */ |
33 | #define MMC_CMD_BCR (3 << 5) | 49 | |
50 | /* class 3 */ | ||
51 | #define MMC_WRITE_DAT_UNTIL_STOP 20 /* adtc [31:0] data addr R1 */ | ||
52 | |||
53 | /* class 4 */ | ||
54 | #define MMC_SET_BLOCK_COUNT 23 /* adtc [31:0] data addr R1 */ | ||
55 | #define MMC_WRITE_BLOCK 24 /* adtc [31:0] data addr R1 */ | ||
56 | #define MMC_WRITE_MULTIPLE_BLOCK 25 /* adtc R1 */ | ||
57 | #define MMC_PROGRAM_CID 26 /* adtc R1 */ | ||
58 | #define MMC_PROGRAM_CSD 27 /* adtc R1 */ | ||
59 | |||
60 | /* class 6 */ | ||
61 | #define MMC_SET_WRITE_PROT 28 /* ac [31:0] data addr R1b */ | ||
62 | #define MMC_CLR_WRITE_PROT 29 /* ac [31:0] data addr R1b */ | ||
63 | #define MMC_SEND_WRITE_PROT 30 /* adtc [31:0] wpdata addr R1 */ | ||
64 | |||
65 | /* class 5 */ | ||
66 | #define MMC_ERASE_GROUP_START 35 /* ac [31:0] data addr R1 */ | ||
67 | #define MMC_ERASE_GROUP_END 36 /* ac [31:0] data addr R1 */ | ||
68 | #define MMC_ERASE 38 /* ac R1b */ | ||
69 | |||
70 | /* class 9 */ | ||
71 | #define MMC_FAST_IO 39 /* ac <Complex> R4 */ | ||
72 | #define MMC_GO_IRQ_STATE 40 /* bcr R5 */ | ||
73 | |||
74 | /* class 7 */ | ||
75 | #define MMC_LOCK_UNLOCK 42 /* adtc R1b */ | ||
76 | |||
77 | /* class 8 */ | ||
78 | #define MMC_APP_CMD 55 /* ac [31:16] RCA R1 */ | ||
79 | #define MMC_GEN_CMD 56 /* adtc [0] RD/WR R1 */ | ||
34 | 80 | ||
35 | /* | 81 | /* |
36 | * These are the response types, and correspond to valid bit | 82 | * MMC_SWITCH argument format: |
37 | * patterns of the above flags. One additional valid pattern | 83 | * |
38 | * is all zeros, which means we don't expect a response. | 84 | * [31:26] Always 0 |
85 | * [25:24] Access Mode | ||
86 | * [23:16] Location of target Byte in EXT_CSD | ||
87 | * [15:08] Value Byte | ||
88 | * [07:03] Always 0 | ||
89 | * [02:00] Command Set | ||
39 | */ | 90 | */ |
40 | #define MMC_RSP_NONE (0) | ||
41 | #define MMC_RSP_R1 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE) | ||
42 | #define MMC_RSP_R1B (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE|MMC_RSP_BUSY) | ||
43 | #define MMC_RSP_R2 (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC) | ||
44 | #define MMC_RSP_R3 (MMC_RSP_PRESENT) | ||
45 | #define MMC_RSP_R6 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE) | ||
46 | #define MMC_RSP_R7 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE) | ||
47 | |||
48 | #define mmc_resp_type(cmd) ((cmd)->flags & (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC|MMC_RSP_BUSY|MMC_RSP_OPCODE)) | ||
49 | 91 | ||
50 | /* | 92 | /* |
51 | * These are the command types. | 93 | MMC status in R1 |
94 | Type | ||
95 | e : error bit | ||
96 | s : status bit | ||
97 | r : detected and set for the actual command response | ||
98 | x : detected and set during command execution. the host must poll | ||
99 | the card by sending status command in order to read these bits. | ||
100 | Clear condition | ||
101 | a : according to the card state | ||
102 | b : always related to the previous command. Reception of | ||
103 | a valid command will clear it (with a delay of one command) | ||
104 | c : clear by read | ||
52 | */ | 105 | */ |
53 | #define mmc_cmd_type(cmd) ((cmd)->flags & MMC_CMD_MASK) | ||
54 | 106 | ||
55 | unsigned int retries; /* max number of retries */ | 107 | #define R1_OUT_OF_RANGE (1 << 31) /* er, c */ |
56 | unsigned int error; /* command error */ | 108 | #define R1_ADDRESS_ERROR (1 << 30) /* erx, c */ |
109 | #define R1_BLOCK_LEN_ERROR (1 << 29) /* er, c */ | ||
110 | #define R1_ERASE_SEQ_ERROR (1 << 28) /* er, c */ | ||
111 | #define R1_ERASE_PARAM (1 << 27) /* ex, c */ | ||
112 | #define R1_WP_VIOLATION (1 << 26) /* erx, c */ | ||
113 | #define R1_CARD_IS_LOCKED (1 << 25) /* sx, a */ | ||
114 | #define R1_LOCK_UNLOCK_FAILED (1 << 24) /* erx, c */ | ||
115 | #define R1_COM_CRC_ERROR (1 << 23) /* er, b */ | ||
116 | #define R1_ILLEGAL_COMMAND (1 << 22) /* er, b */ | ||
117 | #define R1_CARD_ECC_FAILED (1 << 21) /* ex, c */ | ||
118 | #define R1_CC_ERROR (1 << 20) /* erx, c */ | ||
119 | #define R1_ERROR (1 << 19) /* erx, c */ | ||
120 | #define R1_UNDERRUN (1 << 18) /* ex, c */ | ||
121 | #define R1_OVERRUN (1 << 17) /* ex, c */ | ||
122 | #define R1_CID_CSD_OVERWRITE (1 << 16) /* erx, c, CID/CSD overwrite */ | ||
123 | #define R1_WP_ERASE_SKIP (1 << 15) /* sx, c */ | ||
124 | #define R1_CARD_ECC_DISABLED (1 << 14) /* sx, a */ | ||
125 | #define R1_ERASE_RESET (1 << 13) /* sr, c */ | ||
126 | #define R1_STATUS(x) (x & 0xFFFFE000) | ||
127 | #define R1_CURRENT_STATE(x) ((x & 0x00001E00) >> 9) /* sx, b (4 bits) */ | ||
128 | #define R1_READY_FOR_DATA (1 << 8) /* sx, a */ | ||
129 | #define R1_APP_CMD (1 << 5) /* sr, c */ | ||
57 | 130 | ||
58 | #define MMC_ERR_NONE 0 | 131 | /* These are unpacked versions of the actual responses */ |
59 | #define MMC_ERR_TIMEOUT 1 | ||
60 | #define MMC_ERR_BADCRC 2 | ||
61 | #define MMC_ERR_FIFO 3 | ||
62 | #define MMC_ERR_FAILED 4 | ||
63 | #define MMC_ERR_INVALID 5 | ||
64 | 132 | ||
65 | struct mmc_data *data; /* data segment associated with cmd */ | 133 | struct _mmc_csd { |
66 | struct mmc_request *mrq; /* associated request */ | 134 | u8 csd_structure; |
135 | u8 spec_vers; | ||
136 | u8 taac; | ||
137 | u8 nsac; | ||
138 | u8 tran_speed; | ||
139 | u16 ccc; | ||
140 | u8 read_bl_len; | ||
141 | u8 read_bl_partial; | ||
142 | u8 write_blk_misalign; | ||
143 | u8 read_blk_misalign; | ||
144 | u8 dsr_imp; | ||
145 | u16 c_size; | ||
146 | u8 vdd_r_curr_min; | ||
147 | u8 vdd_r_curr_max; | ||
148 | u8 vdd_w_curr_min; | ||
149 | u8 vdd_w_curr_max; | ||
150 | u8 c_size_mult; | ||
151 | union { | ||
152 | struct { /* MMC system specification version 3.1 */ | ||
153 | u8 erase_grp_size; | ||
154 | u8 erase_grp_mult; | ||
155 | } v31; | ||
156 | struct { /* MMC system specification version 2.2 */ | ||
157 | u8 sector_size; | ||
158 | u8 erase_grp_size; | ||
159 | } v22; | ||
160 | } erase; | ||
161 | u8 wp_grp_size; | ||
162 | u8 wp_grp_enable; | ||
163 | u8 default_ecc; | ||
164 | u8 r2w_factor; | ||
165 | u8 write_bl_len; | ||
166 | u8 write_bl_partial; | ||
167 | u8 file_format_grp; | ||
168 | u8 copy; | ||
169 | u8 perm_write_protect; | ||
170 | u8 tmp_write_protect; | ||
171 | u8 file_format; | ||
172 | u8 ecc; | ||
67 | }; | 173 | }; |
68 | 174 | ||
69 | struct mmc_data { | 175 | /* |
70 | unsigned int timeout_ns; /* data timeout (in ns, max 80ms) */ | 176 | * OCR bits are mostly in host.h |
71 | unsigned int timeout_clks; /* data timeout (in clocks) */ | 177 | */ |
72 | unsigned int blksz; /* data block size */ | 178 | #define MMC_CARD_BUSY 0x80000000 /* Card Power up status bit */ |
73 | unsigned int blocks; /* number of blocks */ | ||
74 | unsigned int error; /* data error */ | ||
75 | unsigned int flags; | ||
76 | 179 | ||
77 | #define MMC_DATA_WRITE (1 << 8) | 180 | /* |
78 | #define MMC_DATA_READ (1 << 9) | 181 | * Card Command Classes (CCC) |
79 | #define MMC_DATA_STREAM (1 << 10) | 182 | */ |
80 | #define MMC_DATA_MULTI (1 << 11) | 183 | #define CCC_BASIC (1<<0) /* (0) Basic protocol functions */ |
184 | /* (CMD0,1,2,3,4,7,9,10,12,13,15) */ | ||
185 | #define CCC_STREAM_READ (1<<1) /* (1) Stream read commands */ | ||
186 | /* (CMD11) */ | ||
187 | #define CCC_BLOCK_READ (1<<2) /* (2) Block read commands */ | ||
188 | /* (CMD16,17,18) */ | ||
189 | #define CCC_STREAM_WRITE (1<<3) /* (3) Stream write commands */ | ||
190 | /* (CMD20) */ | ||
191 | #define CCC_BLOCK_WRITE (1<<4) /* (4) Block write commands */ | ||
192 | /* (CMD16,24,25,26,27) */ | ||
193 | #define CCC_ERASE (1<<5) /* (5) Ability to erase blocks */ | ||
194 | /* (CMD32,33,34,35,36,37,38,39) */ | ||
195 | #define CCC_WRITE_PROT (1<<6) /* (6) Able to write protect blocks */ | ||
196 | /* (CMD28,29,30) */ | ||
197 | #define CCC_LOCK_CARD (1<<7) /* (7) Able to lock down card */ | ||
198 | /* (CMD16,CMD42) */ | ||
199 | #define CCC_APP_SPEC (1<<8) /* (8) Application specific */ | ||
200 | /* (CMD55,56,57,ACMD*) */ | ||
201 | #define CCC_IO_MODE (1<<9) /* (9) I/O mode */ | ||
202 | /* (CMD5,39,40,52,53) */ | ||
203 | #define CCC_SWITCH (1<<10) /* (10) High speed switch */ | ||
204 | /* (CMD6,34,35,36,37,50) */ | ||
205 | /* (11) Reserved */ | ||
206 | /* (CMD?) */ | ||
81 | 207 | ||
82 | unsigned int bytes_xfered; | 208 | /* |
209 | * CSD field definitions | ||
210 | */ | ||
83 | 211 | ||
84 | struct mmc_command *stop; /* stop command */ | 212 | #define CSD_STRUCT_VER_1_0 0 /* Valid for system specification 1.0 - 1.2 */ |
85 | struct mmc_request *mrq; /* associated request */ | 213 | #define CSD_STRUCT_VER_1_1 1 /* Valid for system specification 1.4 - 2.2 */ |
214 | #define CSD_STRUCT_VER_1_2 2 /* Valid for system specification 3.1 - 3.2 - 3.31 - 4.0 - 4.1 */ | ||
215 | #define CSD_STRUCT_EXT_CSD 3 /* Version is coded in CSD_STRUCTURE in EXT_CSD */ | ||
86 | 216 | ||
87 | unsigned int sg_len; /* size of scatter list */ | 217 | #define CSD_SPEC_VER_0 0 /* Implements system specification 1.0 - 1.2 */ |
88 | struct scatterlist *sg; /* I/O scatter list */ | 218 | #define CSD_SPEC_VER_1 1 /* Implements system specification 1.4 */ |
89 | }; | 219 | #define CSD_SPEC_VER_2 2 /* Implements system specification 2.0 - 2.2 */ |
220 | #define CSD_SPEC_VER_3 3 /* Implements system specification 3.1 - 3.2 - 3.31 */ | ||
221 | #define CSD_SPEC_VER_4 4 /* Implements system specification 4.0 - 4.1 */ | ||
90 | 222 | ||
91 | struct mmc_request { | 223 | /* |
92 | struct mmc_command *cmd; | 224 | * EXT_CSD fields |
93 | struct mmc_data *data; | 225 | */ |
94 | struct mmc_command *stop; | ||
95 | 226 | ||
96 | void *done_data; /* completion data */ | 227 | #define EXT_CSD_BUS_WIDTH 183 /* R/W */ |
97 | void (*done)(struct mmc_request *);/* completion function */ | 228 | #define EXT_CSD_HS_TIMING 185 /* R/W */ |
98 | }; | 229 | #define EXT_CSD_CARD_TYPE 196 /* RO */ |
230 | #define EXT_CSD_SEC_CNT 212 /* RO, 4 bytes */ | ||
231 | |||
232 | /* | ||
233 | * EXT_CSD field definitions | ||
234 | */ | ||
99 | 235 | ||
100 | struct mmc_host; | 236 | #define EXT_CSD_CMD_SET_NORMAL (1<<0) |
101 | struct mmc_card; | 237 | #define EXT_CSD_CMD_SET_SECURE (1<<1) |
238 | #define EXT_CSD_CMD_SET_CPSECURE (1<<2) | ||
102 | 239 | ||
103 | extern int mmc_wait_for_req(struct mmc_host *, struct mmc_request *); | 240 | #define EXT_CSD_CARD_TYPE_26 (1<<0) /* Card can run at 26MHz */ |
104 | extern int mmc_wait_for_cmd(struct mmc_host *, struct mmc_command *, int); | 241 | #define EXT_CSD_CARD_TYPE_52 (1<<1) /* Card can run at 52MHz */ |
105 | extern int mmc_wait_for_app_cmd(struct mmc_host *, unsigned int, | ||
106 | struct mmc_command *, int); | ||
107 | 242 | ||
108 | extern void mmc_set_data_timeout(struct mmc_data *, const struct mmc_card *, int); | 243 | #define EXT_CSD_BUS_WIDTH_1 0 /* Card is in 1 bit mode */ |
244 | #define EXT_CSD_BUS_WIDTH_4 1 /* Card is in 4 bit mode */ | ||
245 | #define EXT_CSD_BUS_WIDTH_8 2 /* Card is in 8 bit mode */ | ||
109 | 246 | ||
110 | extern int __mmc_claim_host(struct mmc_host *host, struct mmc_card *card); | 247 | /* |
248 | * MMC_SWITCH access modes | ||
249 | */ | ||
111 | 250 | ||
112 | static inline void mmc_claim_host(struct mmc_host *host) | 251 | #define MMC_SWITCH_MODE_CMD_SET 0x00 /* Change the command set */ |
113 | { | 252 | #define MMC_SWITCH_MODE_SET_BITS 0x01 /* Set bits which are 1 in value */ |
114 | __mmc_claim_host(host, (struct mmc_card *)-1); | 253 | #define MMC_SWITCH_MODE_CLEAR_BITS 0x02 /* Clear bits which are 1 in value */ |
115 | } | 254 | #define MMC_SWITCH_MODE_WRITE_BYTE 0x03 /* Set target to value */ |
116 | 255 | ||
117 | extern void mmc_release_host(struct mmc_host *host); | 256 | #endif /* MMC_MMC_PROTOCOL_H */ |
118 | 257 | ||
119 | #endif | ||
diff --git a/include/linux/mmc/protocol.h b/include/linux/mmc/protocol.h deleted file mode 100644 index c90b6768329d..000000000000 --- a/include/linux/mmc/protocol.h +++ /dev/null | |||
@@ -1,327 +0,0 @@ | |||
1 | /* | ||
2 | * Header for MultiMediaCard (MMC) | ||
3 | * | ||
4 | * Copyright 2002 Hewlett-Packard Company | ||
5 | * | ||
6 | * Use consistent with the GNU GPL is permitted, | ||
7 | * provided that this copyright notice is | ||
8 | * preserved in its entirety in all copies and derived works. | ||
9 | * | ||
10 | * HEWLETT-PACKARD COMPANY MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, | ||
11 | * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS | ||
12 | * FITNESS FOR ANY PARTICULAR PURPOSE. | ||
13 | * | ||
14 | * Many thanks to Alessandro Rubini and Jonathan Corbet! | ||
15 | * | ||
16 | * Based strongly on code by: | ||
17 | * | ||
18 | * Author: Yong-iL Joh <tolkien@mizi.com> | ||
19 | * Date : $Date: 2002/06/18 12:37:30 $ | ||
20 | * | ||
21 | * Author: Andrew Christian | ||
22 | * 15 May 2002 | ||
23 | */ | ||
24 | |||
25 | #ifndef MMC_MMC_PROTOCOL_H | ||
26 | #define MMC_MMC_PROTOCOL_H | ||
27 | |||
28 | /* Standard MMC commands (4.1) type argument response */ | ||
29 | /* class 1 */ | ||
30 | #define MMC_GO_IDLE_STATE 0 /* bc */ | ||
31 | #define MMC_SEND_OP_COND 1 /* bcr [31:0] OCR R3 */ | ||
32 | #define MMC_ALL_SEND_CID 2 /* bcr R2 */ | ||
33 | #define MMC_SET_RELATIVE_ADDR 3 /* ac [31:16] RCA R1 */ | ||
34 | #define MMC_SET_DSR 4 /* bc [31:16] RCA */ | ||
35 | #define MMC_SWITCH 6 /* ac [31:0] See below R1b */ | ||
36 | #define MMC_SELECT_CARD 7 /* ac [31:16] RCA R1 */ | ||
37 | #define MMC_SEND_EXT_CSD 8 /* adtc R1 */ | ||
38 | #define MMC_SEND_CSD 9 /* ac [31:16] RCA R2 */ | ||
39 | #define MMC_SEND_CID 10 /* ac [31:16] RCA R2 */ | ||
40 | #define MMC_READ_DAT_UNTIL_STOP 11 /* adtc [31:0] dadr R1 */ | ||
41 | #define MMC_STOP_TRANSMISSION 12 /* ac R1b */ | ||
42 | #define MMC_SEND_STATUS 13 /* ac [31:16] RCA R1 */ | ||
43 | #define MMC_GO_INACTIVE_STATE 15 /* ac [31:16] RCA */ | ||
44 | |||
45 | /* class 2 */ | ||
46 | #define MMC_SET_BLOCKLEN 16 /* ac [31:0] block len R1 */ | ||
47 | #define MMC_READ_SINGLE_BLOCK 17 /* adtc [31:0] data addr R1 */ | ||
48 | #define MMC_READ_MULTIPLE_BLOCK 18 /* adtc [31:0] data addr R1 */ | ||
49 | |||
50 | /* class 3 */ | ||
51 | #define MMC_WRITE_DAT_UNTIL_STOP 20 /* adtc [31:0] data addr R1 */ | ||
52 | |||
53 | /* class 4 */ | ||
54 | #define MMC_SET_BLOCK_COUNT 23 /* adtc [31:0] data addr R1 */ | ||
55 | #define MMC_WRITE_BLOCK 24 /* adtc [31:0] data addr R1 */ | ||
56 | #define MMC_WRITE_MULTIPLE_BLOCK 25 /* adtc R1 */ | ||
57 | #define MMC_PROGRAM_CID 26 /* adtc R1 */ | ||
58 | #define MMC_PROGRAM_CSD 27 /* adtc R1 */ | ||
59 | |||
60 | /* class 6 */ | ||
61 | #define MMC_SET_WRITE_PROT 28 /* ac [31:0] data addr R1b */ | ||
62 | #define MMC_CLR_WRITE_PROT 29 /* ac [31:0] data addr R1b */ | ||
63 | #define MMC_SEND_WRITE_PROT 30 /* adtc [31:0] wpdata addr R1 */ | ||
64 | |||
65 | /* class 5 */ | ||
66 | #define MMC_ERASE_GROUP_START 35 /* ac [31:0] data addr R1 */ | ||
67 | #define MMC_ERASE_GROUP_END 36 /* ac [31:0] data addr R1 */ | ||
68 | #define MMC_ERASE 38 /* ac R1b */ | ||
69 | |||
70 | /* class 9 */ | ||
71 | #define MMC_FAST_IO 39 /* ac <Complex> R4 */ | ||
72 | #define MMC_GO_IRQ_STATE 40 /* bcr R5 */ | ||
73 | |||
74 | /* class 7 */ | ||
75 | #define MMC_LOCK_UNLOCK 42 /* adtc R1b */ | ||
76 | |||
77 | /* class 8 */ | ||
78 | #define MMC_APP_CMD 55 /* ac [31:16] RCA R1 */ | ||
79 | #define MMC_GEN_CMD 56 /* adtc [0] RD/WR R1 */ | ||
80 | |||
81 | /* SD commands type argument response */ | ||
82 | /* class 0 */ | ||
83 | /* This is basically the same command as for MMC with some quirks. */ | ||
84 | #define SD_SEND_RELATIVE_ADDR 3 /* bcr R6 */ | ||
85 | #define SD_SEND_IF_COND 8 /* bcr [11:0] See below R7 */ | ||
86 | |||
87 | /* class 10 */ | ||
88 | #define SD_SWITCH 6 /* adtc [31:0] See below R1 */ | ||
89 | |||
90 | /* Application commands */ | ||
91 | #define SD_APP_SET_BUS_WIDTH 6 /* ac [1:0] bus width R1 */ | ||
92 | #define SD_APP_SEND_NUM_WR_BLKS 22 /* adtc R1 */ | ||
93 | #define SD_APP_OP_COND 41 /* bcr [31:0] OCR R3 */ | ||
94 | #define SD_APP_SEND_SCR 51 /* adtc R1 */ | ||
95 | |||
96 | /* | ||
97 | * MMC_SWITCH argument format: | ||
98 | * | ||
99 | * [31:26] Always 0 | ||
100 | * [25:24] Access Mode | ||
101 | * [23:16] Location of target Byte in EXT_CSD | ||
102 | * [15:08] Value Byte | ||
103 | * [07:03] Always 0 | ||
104 | * [02:00] Command Set | ||
105 | */ | ||
106 | |||
107 | /* | ||
108 | * SD_SWITCH argument format: | ||
109 | * | ||
110 | * [31] Check (0) or switch (1) | ||
111 | * [30:24] Reserved (0) | ||
112 | * [23:20] Function group 6 | ||
113 | * [19:16] Function group 5 | ||
114 | * [15:12] Function group 4 | ||
115 | * [11:8] Function group 3 | ||
116 | * [7:4] Function group 2 | ||
117 | * [3:0] Function group 1 | ||
118 | */ | ||
119 | |||
120 | /* | ||
121 | * SD_SEND_IF_COND argument format: | ||
122 | * | ||
123 | * [31:12] Reserved (0) | ||
124 | * [11:8] Host Voltage Supply Flags | ||
125 | * [7:0] Check Pattern (0xAA) | ||
126 | */ | ||
127 | |||
128 | /* | ||
129 | MMC status in R1 | ||
130 | Type | ||
131 | e : error bit | ||
132 | s : status bit | ||
133 | r : detected and set for the actual command response | ||
134 | x : detected and set during command execution. the host must poll | ||
135 | the card by sending status command in order to read these bits. | ||
136 | Clear condition | ||
137 | a : according to the card state | ||
138 | b : always related to the previous command. Reception of | ||
139 | a valid command will clear it (with a delay of one command) | ||
140 | c : clear by read | ||
141 | */ | ||
142 | |||
143 | #define R1_OUT_OF_RANGE (1 << 31) /* er, c */ | ||
144 | #define R1_ADDRESS_ERROR (1 << 30) /* erx, c */ | ||
145 | #define R1_BLOCK_LEN_ERROR (1 << 29) /* er, c */ | ||
146 | #define R1_ERASE_SEQ_ERROR (1 << 28) /* er, c */ | ||
147 | #define R1_ERASE_PARAM (1 << 27) /* ex, c */ | ||
148 | #define R1_WP_VIOLATION (1 << 26) /* erx, c */ | ||
149 | #define R1_CARD_IS_LOCKED (1 << 25) /* sx, a */ | ||
150 | #define R1_LOCK_UNLOCK_FAILED (1 << 24) /* erx, c */ | ||
151 | #define R1_COM_CRC_ERROR (1 << 23) /* er, b */ | ||
152 | #define R1_ILLEGAL_COMMAND (1 << 22) /* er, b */ | ||
153 | #define R1_CARD_ECC_FAILED (1 << 21) /* ex, c */ | ||
154 | #define R1_CC_ERROR (1 << 20) /* erx, c */ | ||
155 | #define R1_ERROR (1 << 19) /* erx, c */ | ||
156 | #define R1_UNDERRUN (1 << 18) /* ex, c */ | ||
157 | #define R1_OVERRUN (1 << 17) /* ex, c */ | ||
158 | #define R1_CID_CSD_OVERWRITE (1 << 16) /* erx, c, CID/CSD overwrite */ | ||
159 | #define R1_WP_ERASE_SKIP (1 << 15) /* sx, c */ | ||
160 | #define R1_CARD_ECC_DISABLED (1 << 14) /* sx, a */ | ||
161 | #define R1_ERASE_RESET (1 << 13) /* sr, c */ | ||
162 | #define R1_STATUS(x) (x & 0xFFFFE000) | ||
163 | #define R1_CURRENT_STATE(x) ((x & 0x00001E00) >> 9) /* sx, b (4 bits) */ | ||
164 | #define R1_READY_FOR_DATA (1 << 8) /* sx, a */ | ||
165 | #define R1_APP_CMD (1 << 5) /* sr, c */ | ||
166 | |||
167 | /* These are unpacked versions of the actual responses */ | ||
168 | |||
169 | struct _mmc_csd { | ||
170 | u8 csd_structure; | ||
171 | u8 spec_vers; | ||
172 | u8 taac; | ||
173 | u8 nsac; | ||
174 | u8 tran_speed; | ||
175 | u16 ccc; | ||
176 | u8 read_bl_len; | ||
177 | u8 read_bl_partial; | ||
178 | u8 write_blk_misalign; | ||
179 | u8 read_blk_misalign; | ||
180 | u8 dsr_imp; | ||
181 | u16 c_size; | ||
182 | u8 vdd_r_curr_min; | ||
183 | u8 vdd_r_curr_max; | ||
184 | u8 vdd_w_curr_min; | ||
185 | u8 vdd_w_curr_max; | ||
186 | u8 c_size_mult; | ||
187 | union { | ||
188 | struct { /* MMC system specification version 3.1 */ | ||
189 | u8 erase_grp_size; | ||
190 | u8 erase_grp_mult; | ||
191 | } v31; | ||
192 | struct { /* MMC system specification version 2.2 */ | ||
193 | u8 sector_size; | ||
194 | u8 erase_grp_size; | ||
195 | } v22; | ||
196 | } erase; | ||
197 | u8 wp_grp_size; | ||
198 | u8 wp_grp_enable; | ||
199 | u8 default_ecc; | ||
200 | u8 r2w_factor; | ||
201 | u8 write_bl_len; | ||
202 | u8 write_bl_partial; | ||
203 | u8 file_format_grp; | ||
204 | u8 copy; | ||
205 | u8 perm_write_protect; | ||
206 | u8 tmp_write_protect; | ||
207 | u8 file_format; | ||
208 | u8 ecc; | ||
209 | }; | ||
210 | |||
211 | #define MMC_VDD_145_150 0x00000001 /* VDD voltage 1.45 - 1.50 */ | ||
212 | #define MMC_VDD_150_155 0x00000002 /* VDD voltage 1.50 - 1.55 */ | ||
213 | #define MMC_VDD_155_160 0x00000004 /* VDD voltage 1.55 - 1.60 */ | ||
214 | #define MMC_VDD_160_165 0x00000008 /* VDD voltage 1.60 - 1.65 */ | ||
215 | #define MMC_VDD_165_170 0x00000010 /* VDD voltage 1.65 - 1.70 */ | ||
216 | #define MMC_VDD_17_18 0x00000020 /* VDD voltage 1.7 - 1.8 */ | ||
217 | #define MMC_VDD_18_19 0x00000040 /* VDD voltage 1.8 - 1.9 */ | ||
218 | #define MMC_VDD_19_20 0x00000080 /* VDD voltage 1.9 - 2.0 */ | ||
219 | #define MMC_VDD_20_21 0x00000100 /* VDD voltage 2.0 ~ 2.1 */ | ||
220 | #define MMC_VDD_21_22 0x00000200 /* VDD voltage 2.1 ~ 2.2 */ | ||
221 | #define MMC_VDD_22_23 0x00000400 /* VDD voltage 2.2 ~ 2.3 */ | ||
222 | #define MMC_VDD_23_24 0x00000800 /* VDD voltage 2.3 ~ 2.4 */ | ||
223 | #define MMC_VDD_24_25 0x00001000 /* VDD voltage 2.4 ~ 2.5 */ | ||
224 | #define MMC_VDD_25_26 0x00002000 /* VDD voltage 2.5 ~ 2.6 */ | ||
225 | #define MMC_VDD_26_27 0x00004000 /* VDD voltage 2.6 ~ 2.7 */ | ||
226 | #define MMC_VDD_27_28 0x00008000 /* VDD voltage 2.7 ~ 2.8 */ | ||
227 | #define MMC_VDD_28_29 0x00010000 /* VDD voltage 2.8 ~ 2.9 */ | ||
228 | #define MMC_VDD_29_30 0x00020000 /* VDD voltage 2.9 ~ 3.0 */ | ||
229 | #define MMC_VDD_30_31 0x00040000 /* VDD voltage 3.0 ~ 3.1 */ | ||
230 | #define MMC_VDD_31_32 0x00080000 /* VDD voltage 3.1 ~ 3.2 */ | ||
231 | #define MMC_VDD_32_33 0x00100000 /* VDD voltage 3.2 ~ 3.3 */ | ||
232 | #define MMC_VDD_33_34 0x00200000 /* VDD voltage 3.3 ~ 3.4 */ | ||
233 | #define MMC_VDD_34_35 0x00400000 /* VDD voltage 3.4 ~ 3.5 */ | ||
234 | #define MMC_VDD_35_36 0x00800000 /* VDD voltage 3.5 ~ 3.6 */ | ||
235 | #define MMC_CARD_BUSY 0x80000000 /* Card Power up status bit */ | ||
236 | |||
237 | /* | ||
238 | * Card Command Classes (CCC) | ||
239 | */ | ||
240 | #define CCC_BASIC (1<<0) /* (0) Basic protocol functions */ | ||
241 | /* (CMD0,1,2,3,4,7,9,10,12,13,15) */ | ||
242 | #define CCC_STREAM_READ (1<<1) /* (1) Stream read commands */ | ||
243 | /* (CMD11) */ | ||
244 | #define CCC_BLOCK_READ (1<<2) /* (2) Block read commands */ | ||
245 | /* (CMD16,17,18) */ | ||
246 | #define CCC_STREAM_WRITE (1<<3) /* (3) Stream write commands */ | ||
247 | /* (CMD20) */ | ||
248 | #define CCC_BLOCK_WRITE (1<<4) /* (4) Block write commands */ | ||
249 | /* (CMD16,24,25,26,27) */ | ||
250 | #define CCC_ERASE (1<<5) /* (5) Ability to erase blocks */ | ||
251 | /* (CMD32,33,34,35,36,37,38,39) */ | ||
252 | #define CCC_WRITE_PROT (1<<6) /* (6) Able to write protect blocks */ | ||
253 | /* (CMD28,29,30) */ | ||
254 | #define CCC_LOCK_CARD (1<<7) /* (7) Able to lock down card */ | ||
255 | /* (CMD16,CMD42) */ | ||
256 | #define CCC_APP_SPEC (1<<8) /* (8) Application specific */ | ||
257 | /* (CMD55,56,57,ACMD*) */ | ||
258 | #define CCC_IO_MODE (1<<9) /* (9) I/O mode */ | ||
259 | /* (CMD5,39,40,52,53) */ | ||
260 | #define CCC_SWITCH (1<<10) /* (10) High speed switch */ | ||
261 | /* (CMD6,34,35,36,37,50) */ | ||
262 | /* (11) Reserved */ | ||
263 | /* (CMD?) */ | ||
264 | |||
265 | /* | ||
266 | * CSD field definitions | ||
267 | */ | ||
268 | |||
269 | #define CSD_STRUCT_VER_1_0 0 /* Valid for system specification 1.0 - 1.2 */ | ||
270 | #define CSD_STRUCT_VER_1_1 1 /* Valid for system specification 1.4 - 2.2 */ | ||
271 | #define CSD_STRUCT_VER_1_2 2 /* Valid for system specification 3.1 - 3.2 - 3.31 - 4.0 - 4.1 */ | ||
272 | #define CSD_STRUCT_EXT_CSD 3 /* Version is coded in CSD_STRUCTURE in EXT_CSD */ | ||
273 | |||
274 | #define CSD_SPEC_VER_0 0 /* Implements system specification 1.0 - 1.2 */ | ||
275 | #define CSD_SPEC_VER_1 1 /* Implements system specification 1.4 */ | ||
276 | #define CSD_SPEC_VER_2 2 /* Implements system specification 2.0 - 2.2 */ | ||
277 | #define CSD_SPEC_VER_3 3 /* Implements system specification 3.1 - 3.2 - 3.31 */ | ||
278 | #define CSD_SPEC_VER_4 4 /* Implements system specification 4.0 - 4.1 */ | ||
279 | |||
280 | /* | ||
281 | * EXT_CSD fields | ||
282 | */ | ||
283 | |||
284 | #define EXT_CSD_BUS_WIDTH 183 /* R/W */ | ||
285 | #define EXT_CSD_HS_TIMING 185 /* R/W */ | ||
286 | #define EXT_CSD_CARD_TYPE 196 /* RO */ | ||
287 | |||
288 | /* | ||
289 | * EXT_CSD field definitions | ||
290 | */ | ||
291 | |||
292 | #define EXT_CSD_CMD_SET_NORMAL (1<<0) | ||
293 | #define EXT_CSD_CMD_SET_SECURE (1<<1) | ||
294 | #define EXT_CSD_CMD_SET_CPSECURE (1<<2) | ||
295 | |||
296 | #define EXT_CSD_CARD_TYPE_26 (1<<0) /* Card can run at 26MHz */ | ||
297 | #define EXT_CSD_CARD_TYPE_52 (1<<1) /* Card can run at 52MHz */ | ||
298 | |||
299 | #define EXT_CSD_BUS_WIDTH_1 0 /* Card is in 1 bit mode */ | ||
300 | #define EXT_CSD_BUS_WIDTH_4 1 /* Card is in 4 bit mode */ | ||
301 | #define EXT_CSD_BUS_WIDTH_8 2 /* Card is in 8 bit mode */ | ||
302 | |||
303 | /* | ||
304 | * MMC_SWITCH access modes | ||
305 | */ | ||
306 | |||
307 | #define MMC_SWITCH_MODE_CMD_SET 0x00 /* Change the command set */ | ||
308 | #define MMC_SWITCH_MODE_SET_BITS 0x01 /* Set bits which are 1 in value */ | ||
309 | #define MMC_SWITCH_MODE_CLEAR_BITS 0x02 /* Clear bits which are 1 in value */ | ||
310 | #define MMC_SWITCH_MODE_WRITE_BYTE 0x03 /* Set target to value */ | ||
311 | |||
312 | /* | ||
313 | * SCR field definitions | ||
314 | */ | ||
315 | |||
316 | #define SCR_SPEC_VER_0 0 /* Implements system specification 1.0 - 1.01 */ | ||
317 | #define SCR_SPEC_VER_1 1 /* Implements system specification 1.10 */ | ||
318 | #define SCR_SPEC_VER_2 2 /* Implements system specification 2.00 */ | ||
319 | |||
320 | /* | ||
321 | * SD bus widths | ||
322 | */ | ||
323 | #define SD_BUS_WIDTH_1 0 | ||
324 | #define SD_BUS_WIDTH_4 2 | ||
325 | |||
326 | #endif /* MMC_MMC_PROTOCOL_H */ | ||
327 | |||
diff --git a/include/linux/mmc/sd.h b/include/linux/mmc/sd.h new file mode 100644 index 000000000000..f310062cffb4 --- /dev/null +++ b/include/linux/mmc/sd.h | |||
@@ -0,0 +1,83 @@ | |||
1 | /* | ||
2 | * include/linux/mmc/sd.h | ||
3 | * | ||
4 | * Copyright (C) 2005-2007 Pierre Ossman, All Rights Reserved. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or (at | ||
9 | * your option) any later version. | ||
10 | */ | ||
11 | |||
12 | #ifndef MMC_SD_H | ||
13 | #define MMC_SD_H | ||
14 | |||
15 | /* SD commands type argument response */ | ||
16 | /* class 0 */ | ||
17 | /* This is basically the same command as for MMC with some quirks. */ | ||
18 | #define SD_SEND_RELATIVE_ADDR 3 /* bcr R6 */ | ||
19 | #define SD_SEND_IF_COND 8 /* bcr [11:0] See below R7 */ | ||
20 | |||
21 | /* class 10 */ | ||
22 | #define SD_SWITCH 6 /* adtc [31:0] See below R1 */ | ||
23 | |||
24 | /* Application commands */ | ||
25 | #define SD_APP_SET_BUS_WIDTH 6 /* ac [1:0] bus width R1 */ | ||
26 | #define SD_APP_SEND_NUM_WR_BLKS 22 /* adtc R1 */ | ||
27 | #define SD_APP_OP_COND 41 /* bcr [31:0] OCR R3 */ | ||
28 | #define SD_APP_SEND_SCR 51 /* adtc R1 */ | ||
29 | |||
30 | /* | ||
31 | * SD_SWITCH argument format: | ||
32 | * | ||
33 | * [31] Check (0) or switch (1) | ||
34 | * [30:24] Reserved (0) | ||
35 | * [23:20] Function group 6 | ||
36 | * [19:16] Function group 5 | ||
37 | * [15:12] Function group 4 | ||
38 | * [11:8] Function group 3 | ||
39 | * [7:4] Function group 2 | ||
40 | * [3:0] Function group 1 | ||
41 | */ | ||
42 | |||
43 | /* | ||
44 | * SD_SEND_IF_COND argument format: | ||
45 | * | ||
46 | * [31:12] Reserved (0) | ||
47 | * [11:8] Host Voltage Supply Flags | ||
48 | * [7:0] Check Pattern (0xAA) | ||
49 | */ | ||
50 | |||
51 | /* | ||
52 | * SCR field definitions | ||
53 | */ | ||
54 | |||
55 | #define SCR_SPEC_VER_0 0 /* Implements system specification 1.0 - 1.01 */ | ||
56 | #define SCR_SPEC_VER_1 1 /* Implements system specification 1.10 */ | ||
57 | #define SCR_SPEC_VER_2 2 /* Implements system specification 2.00 */ | ||
58 | |||
59 | /* | ||
60 | * SD bus widths | ||
61 | */ | ||
62 | #define SD_BUS_WIDTH_1 0 | ||
63 | #define SD_BUS_WIDTH_4 2 | ||
64 | |||
65 | /* | ||
66 | * SD_SWITCH mode | ||
67 | */ | ||
68 | #define SD_SWITCH_CHECK 0 | ||
69 | #define SD_SWITCH_SET 1 | ||
70 | |||
71 | /* | ||
72 | * SD_SWITCH function groups | ||
73 | */ | ||
74 | #define SD_SWITCH_GRP_ACCESS 0 | ||
75 | |||
76 | /* | ||
77 | * SD_SWITCH access modes | ||
78 | */ | ||
79 | #define SD_SWITCH_ACCESS_DEF 0 | ||
80 | #define SD_SWITCH_ACCESS_HS 1 | ||
81 | |||
82 | #endif | ||
83 | |||
diff --git a/include/linux/module.h b/include/linux/module.h index 95679eb8571e..f0b0faf42d5d 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
@@ -568,7 +568,7 @@ struct device_driver; | |||
568 | #ifdef CONFIG_SYSFS | 568 | #ifdef CONFIG_SYSFS |
569 | struct module; | 569 | struct module; |
570 | 570 | ||
571 | extern struct subsystem module_subsys; | 571 | extern struct kset module_subsys; |
572 | 572 | ||
573 | int mod_sysfs_init(struct module *mod); | 573 | int mod_sysfs_init(struct module *mod); |
574 | int mod_sysfs_setup(struct module *mod, | 574 | int mod_sysfs_setup(struct module *mod, |
diff --git a/include/linux/msi.h b/include/linux/msi.h index e38fe6822cb4..94bb46d82efd 100644 --- a/include/linux/msi.h +++ b/include/linux/msi.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef LINUX_MSI_H | 1 | #ifndef LINUX_MSI_H |
2 | #define LINUX_MSI_H | 2 | #define LINUX_MSI_H |
3 | 3 | ||
4 | #include <linux/list.h> | ||
5 | |||
4 | struct msi_msg { | 6 | struct msi_msg { |
5 | u32 address_lo; /* low 32 bits of msi message address */ | 7 | u32 address_lo; /* low 32 bits of msi message address */ |
6 | u32 address_hi; /* high 32 bits of msi message address */ | 8 | u32 address_hi; /* high 32 bits of msi message address */ |
@@ -24,10 +26,8 @@ struct msi_desc { | |||
24 | unsigned default_irq; /* default pre-assigned irq */ | 26 | unsigned default_irq; /* default pre-assigned irq */ |
25 | }msi_attrib; | 27 | }msi_attrib; |
26 | 28 | ||
27 | struct { | 29 | unsigned int irq; |
28 | __u16 head; | 30 | struct list_head list; |
29 | __u16 tail; | ||
30 | }link; | ||
31 | 31 | ||
32 | void __iomem *mask_base; | 32 | void __iomem *mask_base; |
33 | struct pci_dev *dev; | 33 | struct pci_dev *dev; |
@@ -41,6 +41,9 @@ struct msi_desc { | |||
41 | */ | 41 | */ |
42 | int arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc); | 42 | int arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc); |
43 | void arch_teardown_msi_irq(unsigned int irq); | 43 | void arch_teardown_msi_irq(unsigned int irq); |
44 | extern int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type); | ||
45 | extern void arch_teardown_msi_irqs(struct pci_dev *dev); | ||
46 | extern int arch_msi_check_device(struct pci_dev* dev, int nvec, int type); | ||
44 | 47 | ||
45 | 48 | ||
46 | #endif /* LINUX_MSI_H */ | 49 | #endif /* LINUX_MSI_H */ |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index ac0c92b1e002..30446222b396 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -304,7 +304,7 @@ struct net_device | |||
304 | 304 | ||
305 | unsigned long state; | 305 | unsigned long state; |
306 | 306 | ||
307 | struct net_device *next; | 307 | struct list_head dev_list; |
308 | 308 | ||
309 | /* The device initialization function. Called only once. */ | 309 | /* The device initialization function. Called only once. */ |
310 | int (*init)(struct net_device *dev); | 310 | int (*init)(struct net_device *dev); |
@@ -575,13 +575,36 @@ struct packet_type { | |||
575 | #include <linux/notifier.h> | 575 | #include <linux/notifier.h> |
576 | 576 | ||
577 | extern struct net_device loopback_dev; /* The loopback */ | 577 | extern struct net_device loopback_dev; /* The loopback */ |
578 | extern struct net_device *dev_base; /* All devices */ | 578 | extern struct list_head dev_base_head; /* All devices */ |
579 | extern rwlock_t dev_base_lock; /* Device list lock */ | 579 | extern rwlock_t dev_base_lock; /* Device list lock */ |
580 | 580 | ||
581 | #define for_each_netdev(d) \ | ||
582 | list_for_each_entry(d, &dev_base_head, dev_list) | ||
583 | #define for_each_netdev_safe(d, n) \ | ||
584 | list_for_each_entry_safe(d, n, &dev_base_head, dev_list) | ||
585 | #define for_each_netdev_continue(d) \ | ||
586 | list_for_each_entry_continue(d, &dev_base_head, dev_list) | ||
587 | #define net_device_entry(lh) list_entry(lh, struct net_device, dev_list) | ||
588 | |||
589 | static inline struct net_device *next_net_device(struct net_device *dev) | ||
590 | { | ||
591 | struct list_head *lh; | ||
592 | |||
593 | lh = dev->dev_list.next; | ||
594 | return lh == &dev_base_head ? NULL : net_device_entry(lh); | ||
595 | } | ||
596 | |||
597 | static inline struct net_device *first_net_device(void) | ||
598 | { | ||
599 | return list_empty(&dev_base_head) ? NULL : | ||
600 | net_device_entry(dev_base_head.next); | ||
601 | } | ||
602 | |||
581 | extern int netdev_boot_setup_check(struct net_device *dev); | 603 | extern int netdev_boot_setup_check(struct net_device *dev); |
582 | extern unsigned long netdev_boot_base(const char *prefix, int unit); | 604 | extern unsigned long netdev_boot_base(const char *prefix, int unit); |
583 | extern struct net_device *dev_getbyhwaddr(unsigned short type, char *hwaddr); | 605 | extern struct net_device *dev_getbyhwaddr(unsigned short type, char *hwaddr); |
584 | extern struct net_device *dev_getfirstbyhwtype(unsigned short type); | 606 | extern struct net_device *dev_getfirstbyhwtype(unsigned short type); |
607 | extern struct net_device *__dev_getfirstbyhwtype(unsigned short type); | ||
585 | extern void dev_add_pack(struct packet_type *pt); | 608 | extern void dev_add_pack(struct packet_type *pt); |
586 | extern void dev_remove_pack(struct packet_type *pt); | 609 | extern void dev_remove_pack(struct packet_type *pt); |
587 | extern void __dev_remove_pack(struct packet_type *pt); | 610 | extern void __dev_remove_pack(struct packet_type *pt); |
diff --git a/include/linux/netfilter/nf_conntrack_proto_gre.h b/include/linux/netfilter/nf_conntrack_proto_gre.h index 4e6bbce04ff8..535e4219d2bb 100644 --- a/include/linux/netfilter/nf_conntrack_proto_gre.h +++ b/include/linux/netfilter/nf_conntrack_proto_gre.h | |||
@@ -87,24 +87,6 @@ int nf_ct_gre_keymap_add(struct nf_conn *ct, enum ip_conntrack_dir dir, | |||
87 | /* delete keymap entries */ | 87 | /* delete keymap entries */ |
88 | void nf_ct_gre_keymap_destroy(struct nf_conn *ct); | 88 | void nf_ct_gre_keymap_destroy(struct nf_conn *ct); |
89 | 89 | ||
90 | /* get pointer to gre key, if present */ | ||
91 | static inline __be32 *gre_key(struct gre_hdr *greh) | ||
92 | { | ||
93 | if (!greh->key) | ||
94 | return NULL; | ||
95 | if (greh->csum || greh->routing) | ||
96 | return (__be32 *)(greh+sizeof(*greh)+4); | ||
97 | return (__be32 *)(greh+sizeof(*greh)); | ||
98 | } | ||
99 | |||
100 | /* get pointer ot gre csum, if present */ | ||
101 | static inline __sum16 *gre_csum(struct gre_hdr *greh) | ||
102 | { | ||
103 | if (!greh->csum) | ||
104 | return NULL; | ||
105 | return (__sum16 *)(greh+sizeof(*greh)); | ||
106 | } | ||
107 | |||
108 | extern void nf_ct_gre_keymap_flush(void); | 90 | extern void nf_ct_gre_keymap_flush(void); |
109 | extern void nf_nat_need_gre(void); | 91 | extern void nf_nat_need_gre(void); |
110 | 92 | ||
diff --git a/include/linux/netfilter_bridge.h b/include/linux/netfilter_bridge.h index 19060030bac9..533ee351a273 100644 --- a/include/linux/netfilter_bridge.h +++ b/include/linux/netfilter_bridge.h | |||
@@ -55,18 +55,25 @@ static inline int nf_bridge_maybe_copy_header(struct sk_buff *skb) | |||
55 | return 0; | 55 | return 0; |
56 | } | 56 | } |
57 | 57 | ||
58 | static inline unsigned int nf_bridge_encap_header_len(const struct sk_buff *skb) | ||
59 | { | ||
60 | switch (skb->protocol) { | ||
61 | case __constant_htons(ETH_P_8021Q): | ||
62 | return VLAN_HLEN; | ||
63 | case __constant_htons(ETH_P_PPP_SES): | ||
64 | return PPPOE_SES_HLEN; | ||
65 | default: | ||
66 | return 0; | ||
67 | } | ||
68 | } | ||
69 | |||
58 | /* This is called by the IP fragmenting code and it ensures there is | 70 | /* This is called by the IP fragmenting code and it ensures there is |
59 | * enough room for the encapsulating header (if there is one). */ | 71 | * enough room for the encapsulating header (if there is one). */ |
60 | static inline int nf_bridge_pad(const struct sk_buff *skb) | 72 | static inline unsigned int nf_bridge_pad(const struct sk_buff *skb) |
61 | { | 73 | { |
62 | int padding = 0; | 74 | if (skb->nf_bridge) |
63 | 75 | return nf_bridge_encap_header_len(skb); | |
64 | if (skb->nf_bridge && skb->protocol == htons(ETH_P_8021Q)) | 76 | return 0; |
65 | padding = VLAN_HLEN; | ||
66 | else if (skb->nf_bridge && skb->protocol == htons(ETH_P_PPP_SES)) | ||
67 | padding = PPPOE_SES_HLEN; | ||
68 | |||
69 | return padding; | ||
70 | } | 77 | } |
71 | 78 | ||
72 | struct bridge_skb_cb { | 79 | struct bridge_skb_cb { |
diff --git a/include/linux/netlink.h b/include/linux/netlink.h index f41688f56632..2e23353c28a5 100644 --- a/include/linux/netlink.h +++ b/include/linux/netlink.h | |||
@@ -31,7 +31,7 @@ struct sockaddr_nl | |||
31 | { | 31 | { |
32 | sa_family_t nl_family; /* AF_NETLINK */ | 32 | sa_family_t nl_family; /* AF_NETLINK */ |
33 | unsigned short nl_pad; /* zero */ | 33 | unsigned short nl_pad; /* zero */ |
34 | __u32 nl_pid; /* process pid */ | 34 | __u32 nl_pid; /* port ID */ |
35 | __u32 nl_groups; /* multicast groups mask */ | 35 | __u32 nl_groups; /* multicast groups mask */ |
36 | }; | 36 | }; |
37 | 37 | ||
@@ -41,7 +41,7 @@ struct nlmsghdr | |||
41 | __u16 nlmsg_type; /* Message content */ | 41 | __u16 nlmsg_type; /* Message content */ |
42 | __u16 nlmsg_flags; /* Additional flags */ | 42 | __u16 nlmsg_flags; /* Additional flags */ |
43 | __u32 nlmsg_seq; /* Sequence number */ | 43 | __u32 nlmsg_seq; /* Sequence number */ |
44 | __u32 nlmsg_pid; /* Sending process PID */ | 44 | __u32 nlmsg_pid; /* Sending process port ID */ |
45 | }; | 45 | }; |
46 | 46 | ||
47 | /* Flags values */ | 47 | /* Flags values */ |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index e9ae0c6e2c62..0543439a97af 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
@@ -455,7 +455,7 @@ nfs_have_writebacks(struct inode *inode) | |||
455 | /* | 455 | /* |
456 | * Allocate nfs_write_data structures | 456 | * Allocate nfs_write_data structures |
457 | */ | 457 | */ |
458 | extern struct nfs_write_data *nfs_writedata_alloc(size_t len); | 458 | extern struct nfs_write_data *nfs_writedata_alloc(unsigned int npages); |
459 | 459 | ||
460 | /* | 460 | /* |
461 | * linux/fs/nfs/read.c | 461 | * linux/fs/nfs/read.c |
@@ -469,7 +469,7 @@ extern void nfs_readdata_release(void *data); | |||
469 | /* | 469 | /* |
470 | * Allocate nfs_read_data structures | 470 | * Allocate nfs_read_data structures |
471 | */ | 471 | */ |
472 | extern struct nfs_read_data *nfs_readdata_alloc(size_t len); | 472 | extern struct nfs_read_data *nfs_readdata_alloc(unsigned int npages); |
473 | 473 | ||
474 | /* | 474 | /* |
475 | * linux/fs/nfs3proc.c | 475 | * linux/fs/nfs3proc.c |
diff --git a/include/linux/nfs_mount.h b/include/linux/nfs_mount.h index 659c75438454..cc8b9c59acb8 100644 --- a/include/linux/nfs_mount.h +++ b/include/linux/nfs_mount.h | |||
@@ -61,6 +61,7 @@ struct nfs_mount_data { | |||
61 | #define NFS_MOUNT_NOACL 0x0800 /* 4 */ | 61 | #define NFS_MOUNT_NOACL 0x0800 /* 4 */ |
62 | #define NFS_MOUNT_STRICTLOCK 0x1000 /* reserved for NFSv4 */ | 62 | #define NFS_MOUNT_STRICTLOCK 0x1000 /* reserved for NFSv4 */ |
63 | #define NFS_MOUNT_SECFLAVOUR 0x2000 /* 5 */ | 63 | #define NFS_MOUNT_SECFLAVOUR 0x2000 /* 5 */ |
64 | #define NFS_MOUNT_NORDIRPLUS 0x4000 /* 5 */ | ||
64 | #define NFS_MOUNT_FLAGMASK 0xFFFF | 65 | #define NFS_MOUNT_FLAGMASK 0xFFFF |
65 | 66 | ||
66 | #endif | 67 | #endif |
diff --git a/include/linux/nfs_page.h b/include/linux/nfs_page.h index 16b0266b14fd..41afab6b5f09 100644 --- a/include/linux/nfs_page.h +++ b/include/linux/nfs_page.h | |||
@@ -21,8 +21,7 @@ | |||
21 | /* | 21 | /* |
22 | * Valid flags for the radix tree | 22 | * Valid flags for the radix tree |
23 | */ | 23 | */ |
24 | #define NFS_PAGE_TAG_DIRTY 0 | 24 | #define NFS_PAGE_TAG_WRITEBACK 0 |
25 | #define NFS_PAGE_TAG_WRITEBACK 1 | ||
26 | 25 | ||
27 | /* | 26 | /* |
28 | * Valid flags for a dirty buffer | 27 | * Valid flags for a dirty buffer |
@@ -39,7 +38,7 @@ struct nfs_page { | |||
39 | struct page *wb_page; /* page to read in/write out */ | 38 | struct page *wb_page; /* page to read in/write out */ |
40 | struct nfs_open_context *wb_context; /* File state context info */ | 39 | struct nfs_open_context *wb_context; /* File state context info */ |
41 | atomic_t wb_complete; /* i/os we're waiting for */ | 40 | atomic_t wb_complete; /* i/os we're waiting for */ |
42 | unsigned long wb_index; /* Offset >> PAGE_CACHE_SHIFT */ | 41 | pgoff_t wb_index; /* Offset >> PAGE_CACHE_SHIFT */ |
43 | unsigned int wb_offset, /* Offset & ~PAGE_CACHE_MASK */ | 42 | unsigned int wb_offset, /* Offset & ~PAGE_CACHE_MASK */ |
44 | wb_pgbase, /* Start of page data */ | 43 | wb_pgbase, /* Start of page data */ |
45 | wb_bytes; /* Length of request */ | 44 | wb_bytes; /* Length of request */ |
@@ -48,6 +47,19 @@ struct nfs_page { | |||
48 | struct nfs_writeverf wb_verf; /* Commit cookie */ | 47 | struct nfs_writeverf wb_verf; /* Commit cookie */ |
49 | }; | 48 | }; |
50 | 49 | ||
50 | struct nfs_pageio_descriptor { | ||
51 | struct list_head pg_list; | ||
52 | unsigned long pg_bytes_written; | ||
53 | size_t pg_count; | ||
54 | size_t pg_bsize; | ||
55 | unsigned int pg_base; | ||
56 | |||
57 | struct inode *pg_inode; | ||
58 | int (*pg_doio)(struct inode *, struct list_head *, unsigned int, size_t, int); | ||
59 | int pg_ioflags; | ||
60 | int pg_error; | ||
61 | }; | ||
62 | |||
51 | #define NFS_WBACK_BUSY(req) (test_bit(PG_BUSY,&(req)->wb_flags)) | 63 | #define NFS_WBACK_BUSY(req) (test_bit(PG_BUSY,&(req)->wb_flags)) |
52 | 64 | ||
53 | extern struct nfs_page *nfs_create_request(struct nfs_open_context *ctx, | 65 | extern struct nfs_page *nfs_create_request(struct nfs_open_context *ctx, |
@@ -59,13 +71,16 @@ extern void nfs_clear_request(struct nfs_page *req); | |||
59 | extern void nfs_release_request(struct nfs_page *req); | 71 | extern void nfs_release_request(struct nfs_page *req); |
60 | 72 | ||
61 | 73 | ||
62 | extern long nfs_scan_dirty(struct address_space *mapping, | ||
63 | struct writeback_control *wbc, | ||
64 | struct list_head *dst); | ||
65 | extern int nfs_scan_list(struct nfs_inode *nfsi, struct list_head *head, struct list_head *dst, | 74 | extern int nfs_scan_list(struct nfs_inode *nfsi, struct list_head *head, struct list_head *dst, |
66 | unsigned long idx_start, unsigned int npages); | 75 | pgoff_t idx_start, unsigned int npages); |
67 | extern int nfs_coalesce_requests(struct list_head *, struct list_head *, | 76 | extern void nfs_pageio_init(struct nfs_pageio_descriptor *desc, |
68 | unsigned int); | 77 | struct inode *inode, |
78 | int (*doio)(struct inode *, struct list_head *, unsigned int, size_t, int), | ||
79 | size_t bsize, | ||
80 | int how); | ||
81 | extern int nfs_pageio_add_request(struct nfs_pageio_descriptor *, | ||
82 | struct nfs_page *); | ||
83 | extern void nfs_pageio_complete(struct nfs_pageio_descriptor *desc); | ||
69 | extern int nfs_wait_on_request(struct nfs_page *); | 84 | extern int nfs_wait_on_request(struct nfs_page *); |
70 | extern void nfs_unlock_request(struct nfs_page *req); | 85 | extern void nfs_unlock_request(struct nfs_page *req); |
71 | extern int nfs_set_page_writeback_locked(struct nfs_page *req); | 86 | extern int nfs_set_page_writeback_locked(struct nfs_page *req); |
diff --git a/include/linux/nubus.h b/include/linux/nubus.h index 870e66a96286..cdb3e9b8db54 100644 --- a/include/linux/nubus.h +++ b/include/linux/nubus.h | |||
@@ -28,18 +28,18 @@ enum nubus_category { | |||
28 | }; | 28 | }; |
29 | 29 | ||
30 | enum nubus_type_network { | 30 | enum nubus_type_network { |
31 | NUBUS_TYPE_ETHERNET = 0x0001, | 31 | NUBUS_TYPE_ETHERNET = 0x0001, |
32 | NUBUS_TYPE_RS232 = 0x0002 | 32 | NUBUS_TYPE_RS232 = 0x0002 |
33 | }; | 33 | }; |
34 | 34 | ||
35 | enum nubus_type_display { | 35 | enum nubus_type_display { |
36 | NUBUS_TYPE_VIDEO = 0x0001 | 36 | NUBUS_TYPE_VIDEO = 0x0001 |
37 | }; | 37 | }; |
38 | 38 | ||
39 | enum nubus_type_cpu { | 39 | enum nubus_type_cpu { |
40 | NUBUS_TYPE_68020 = 0x0003, | 40 | NUBUS_TYPE_68020 = 0x0003, |
41 | NUBUS_TYPE_68030 = 0x0004, | 41 | NUBUS_TYPE_68030 = 0x0004, |
42 | NUBUS_TYPE_68040 = 0x0005 | 42 | NUBUS_TYPE_68040 = 0x0005 |
43 | }; | 43 | }; |
44 | 44 | ||
45 | /* Known <Cat,Type,SW,HW> tuples: (according to TattleTech and Slots) | 45 | /* Known <Cat,Type,SW,HW> tuples: (according to TattleTech and Slots) |
@@ -56,6 +56,7 @@ enum nubus_type_cpu { | |||
56 | * | 56 | * |
57 | * SONIC comm-slot/on-board and DuoDock Ethernet: <4,1,1,272> | 57 | * SONIC comm-slot/on-board and DuoDock Ethernet: <4,1,1,272> |
58 | * SONIC LC-PDS Ethernet (Dayna, but like Apple 16-bit, sort of): <4,1,1,271> | 58 | * SONIC LC-PDS Ethernet (Dayna, but like Apple 16-bit, sort of): <4,1,1,271> |
59 | * Apple SONIC LC-PDS Ethernet ("Apple Ethernet LC Twisted-Pair Card"): <4,1,0,281> | ||
59 | * Sonic Systems Ethernet A-Series Card: <4,1,268,256> | 60 | * Sonic Systems Ethernet A-Series Card: <4,1,268,256> |
60 | * Asante MacCon NuBus-A: <4,1,260,256> (alpha-1.0,1.1 revision) | 61 | * Asante MacCon NuBus-A: <4,1,260,256> (alpha-1.0,1.1 revision) |
61 | * ROM on the above card: <2,1,0,0> | 62 | * ROM on the above card: <2,1,0,0> |
@@ -80,24 +81,26 @@ enum nubus_type_cpu { | |||
80 | /* Add known DrSW values here */ | 81 | /* Add known DrSW values here */ |
81 | enum nubus_drsw { | 82 | enum nubus_drsw { |
82 | /* NUBUS_CAT_DISPLAY */ | 83 | /* NUBUS_CAT_DISPLAY */ |
83 | NUBUS_DRSW_APPLE = 0x0001, | 84 | NUBUS_DRSW_APPLE = 0x0001, |
84 | NUBUS_DRSW_APPLE_HIRES = 0x0013, /* MacII HiRes card driver */ | 85 | NUBUS_DRSW_APPLE_HIRES = 0x0013, /* MacII HiRes card driver */ |
85 | 86 | ||
86 | /* NUBUS_CAT_NETWORK */ | 87 | /* NUBUS_CAT_NETWORK */ |
87 | NUBUS_DRSW_CABLETRON = 0x0001, | 88 | NUBUS_DRSW_3COM = 0x0000, |
88 | NUBUS_DRSW_SONIC_LC = 0x0001, | 89 | NUBUS_DRSW_CABLETRON = 0x0001, |
89 | NUBUS_DRSW_KINETICS = 0x0103, | 90 | NUBUS_DRSW_SONIC_LC = 0x0001, |
90 | NUBUS_DRSW_ASANTE = 0x0104, | 91 | NUBUS_DRSW_KINETICS = 0x0103, |
91 | NUBUS_DRSW_DAYNA = 0x010b, | 92 | NUBUS_DRSW_ASANTE = 0x0104, |
92 | NUBUS_DRSW_FARALLON = 0x010c, | 93 | NUBUS_DRSW_TECHWORKS = 0x0109, |
93 | NUBUS_DRSW_APPLE_SN = 0x010f, | 94 | NUBUS_DRSW_DAYNA = 0x010b, |
94 | NUBUS_DRSW_DAYNA2 = 0x0115, | 95 | NUBUS_DRSW_FARALLON = 0x010c, |
96 | NUBUS_DRSW_APPLE_SN = 0x010f, | ||
97 | NUBUS_DRSW_DAYNA2 = 0x0115, | ||
95 | NUBUS_DRSW_FOCUS = 0x011a, | 98 | NUBUS_DRSW_FOCUS = 0x011a, |
96 | NUBUS_DRSW_ASANTE_CS = 0x011d, /* use asante SMC9194 driver */ | 99 | NUBUS_DRSW_ASANTE_CS = 0x011d, /* use asante SMC9194 driver */ |
97 | NUBUS_DRSW_DAYNA_LC = 0x011e, | 100 | NUBUS_DRSW_DAYNA_LC = 0x011e, |
98 | 101 | ||
99 | /* NUBUS_CAT_CPU */ | 102 | /* NUBUS_CAT_CPU */ |
100 | NUBUS_DRSW_NONE = 0x0000, | 103 | NUBUS_DRSW_NONE = 0x0000, |
101 | }; | 104 | }; |
102 | 105 | ||
103 | /* DrHW: Uniquely identifies the hardware interface to a board (or at | 106 | /* DrHW: Uniquely identifies the hardware interface to a board (or at |
@@ -107,27 +110,48 @@ enum nubus_drsw { | |||
107 | /* Add known DrHW values here */ | 110 | /* Add known DrHW values here */ |
108 | enum nubus_drhw { | 111 | enum nubus_drhw { |
109 | /* NUBUS_CAT_DISPLAY */ | 112 | /* NUBUS_CAT_DISPLAY */ |
110 | NUBUS_DRHW_APPLE_TFB = 0x0001, /* Toby frame buffer card */ | 113 | NUBUS_DRHW_APPLE_TFB = 0x0001, /* Toby frame buffer card */ |
111 | NUBUS_DRHW_APPLE_HRVC = 0x0013, /* Mac II High Res Video card */ | 114 | NUBUS_DRHW_APPLE_WVC = 0x0006, /* Apple Workstation Video Card */ |
112 | NUBUS_DRHW_APPLE_RBV1 = 0x0018, /* IIci RBV video */ | 115 | NUBUS_DRHW_SIGMA_CLRMAX = 0x0007, /* Sigma Design ColorMax */ |
113 | NUBUS_DRHW_APPLE_MDC = 0x0019, /* Macintosh Display Card */ | 116 | NUBUS_DRHW_APPLE_SE30 = 0x0009, /* Apple SE/30 video */ |
114 | NUBUS_DRHW_APPLE_SONORA = 0x0022, /* Sonora built-in video */ | 117 | NUBUS_DRHW_APPLE_HRVC = 0x0013, /* Mac II High-Res Video Card */ |
115 | NUBUS_DRHW_APPLE_JET = 0x0029, /* Jet framebuffer (DuoDock) */ | 118 | NUBUS_DRHW_APPLE_PVC = 0x0017, /* Mac II Portrait Video Card */ |
119 | NUBUS_DRHW_APPLE_RBV1 = 0x0018, /* IIci RBV video */ | ||
120 | NUBUS_DRHW_APPLE_MDC = 0x0019, /* Macintosh Display Card */ | ||
121 | NUBUS_DRHW_APPLE_SONORA = 0x0022, /* Sonora built-in video */ | ||
122 | NUBUS_DRHW_APPLE_24AC = 0x002b, /* Mac 24AC Video Card */ | ||
116 | NUBUS_DRHW_APPLE_VALKYRIE = 0x002e, | 123 | NUBUS_DRHW_APPLE_VALKYRIE = 0x002e, |
117 | NUBUS_DRHW_THUNDER24 = 0x02cb, /* SuperMac Thunder/24 */ | 124 | NUBUS_DRHW_APPLE_JET = 0x0029, /* Jet framebuffer (DuoDock) */ |
125 | NUBUS_DRHW_SMAC_GFX = 0x0105, /* SuperMac GFX */ | ||
126 | NUBUS_DRHW_RASTER_CB264 = 0x013B, /* RasterOps ColorBoard 264 */ | ||
127 | NUBUS_DRHW_MICRON_XCEED = 0x0146, /* Micron Exceed color */ | ||
128 | NUBUS_DRHW_RDIUS_GSC = 0x0153, /* Radius GS/C */ | ||
129 | NUBUS_DRHW_SMAC_SPEC8 = 0x017B, /* SuperMac Spectrum/8 */ | ||
130 | NUBUS_DRHW_SMAC_SPEC24 = 0x017C, /* SuperMac Spectrum/24 */ | ||
131 | NUBUS_DRHW_RASTER_CB364 = 0x026F, /* RasterOps ColorBoard 364 */ | ||
132 | NUBUS_DRHW_RDIUS_DCGX = 0x027C, /* Radius DirectColor/GX */ | ||
133 | NUBUS_DRHW_RDIUS_PC8 = 0x0291, /* Radius PrecisionColor 8 */ | ||
134 | NUBUS_DRHW_LAPIS_PCS8 = 0x0292, /* Lapis ProColorServer 8 */ | ||
135 | NUBUS_DRHW_RASTER_24LXI = 0x02A0, /* RasterOps 8/24 XLi */ | ||
136 | NUBUS_DRHW_RASTER_PBPGT = 0x02A5, /* RasterOps PaintBoard Prism GT */ | ||
137 | NUBUS_DRHW_EMACH_FSX = 0x02AE, /* E-Machines Futura SX */ | ||
138 | NUBUS_DRHW_SMAC_THUND24 = 0x02CB, /* SuperMac Thunder/24 */ | ||
139 | NUBUS_DRHW_RDIUS_PC24XP = 0x0406, /* Radius PrecisionColor 24Xp */ | ||
140 | NUBUS_DRHW_RDIUS_PC24X = 0x040A, /* Radius PrecisionColor 24X */ | ||
141 | NUBUS_DRHW_RDIUS_PC8XJ = 0x040B, /* Radius PrecisionColor 8XJ */ | ||
118 | 142 | ||
119 | /* NUBUS_CAT_NETWORK */ | 143 | /* NUBUS_CAT_NETWORK */ |
120 | NUBUS_DRHW_INTERLAN = 0x0100, | 144 | NUBUS_DRHW_INTERLAN = 0x0100, |
121 | NUBUS_DRHW_SMC9194 = 0x0101, | 145 | NUBUS_DRHW_SMC9194 = 0x0101, |
122 | NUBUS_DRHW_KINETICS = 0x0106, | 146 | NUBUS_DRHW_KINETICS = 0x0106, |
123 | NUBUS_DRHW_CABLETRON = 0x0109, | 147 | NUBUS_DRHW_CABLETRON = 0x0109, |
124 | NUBUS_DRHW_ASANTE_LC = 0x010f, | 148 | NUBUS_DRHW_ASANTE_LC = 0x010f, |
125 | NUBUS_DRHW_SONIC = 0x0110, | 149 | NUBUS_DRHW_SONIC = 0x0110, |
126 | NUBUS_DRHW_SONIC_NB = 0x0118, | 150 | NUBUS_DRHW_TECHWORKS = 0x0112, |
127 | NUBUS_DRHW_SONIC_LC = 0x0119, | 151 | NUBUS_DRHW_APPLE_SONIC_NB = 0x0118, |
128 | 152 | NUBUS_DRHW_APPLE_SONIC_LC = 0x0119, | |
129 | /* NUBUS_CAT_COMMUNICATIONS */ | 153 | NUBUS_DRHW_FOCUS = 0x011c, |
130 | NUBUS_DRHW_DOVEFAX = 0x0100, | 154 | NUBUS_DRHW_SONNET = 0x011d, |
131 | }; | 155 | }; |
132 | 156 | ||
133 | /* Resource IDs: These are the identifiers for the various weird and | 157 | /* Resource IDs: These are the identifiers for the various weird and |
@@ -153,17 +177,17 @@ enum nubus_res_id { | |||
153 | 177 | ||
154 | /* Category-specific resources. */ | 178 | /* Category-specific resources. */ |
155 | enum nubus_board_res_id { | 179 | enum nubus_board_res_id { |
156 | NUBUS_RESID_BOARDID = 0x0020, | 180 | NUBUS_RESID_BOARDID = 0x0020, |
157 | NUBUS_RESID_PRAMINITDATA = 0x0021, | 181 | NUBUS_RESID_PRAMINITDATA = 0x0021, |
158 | NUBUS_RESID_PRIMARYINIT = 0x0022, | 182 | NUBUS_RESID_PRIMARYINIT = 0x0022, |
159 | NUBUS_RESID_TIMEOUTCONST = 0x0023, | 183 | NUBUS_RESID_TIMEOUTCONST = 0x0023, |
160 | NUBUS_RESID_VENDORINFO = 0x0024, | 184 | NUBUS_RESID_VENDORINFO = 0x0024, |
161 | NUBUS_RESID_BOARDFLAGS = 0x0025, | 185 | NUBUS_RESID_BOARDFLAGS = 0x0025, |
162 | NUBUS_RESID_SECONDINIT = 0x0026, | 186 | NUBUS_RESID_SECONDINIT = 0x0026, |
163 | 187 | ||
164 | /* Not sure why Apple put these next two in here */ | 188 | /* Not sure why Apple put these next two in here */ |
165 | NUBUS_RESID_VIDNAMES = 0x0041, | 189 | NUBUS_RESID_VIDNAMES = 0x0041, |
166 | NUBUS_RESID_VIDMODES = 0x007e | 190 | NUBUS_RESID_VIDMODES = 0x007e |
167 | }; | 191 | }; |
168 | 192 | ||
169 | /* Fields within the vendor info directory */ | 193 | /* Fields within the vendor info directory */ |
@@ -185,13 +209,13 @@ enum nubus_cpu_res_id { | |||
185 | }; | 209 | }; |
186 | 210 | ||
187 | enum nubus_display_res_id { | 211 | enum nubus_display_res_id { |
188 | NUBUS_RESID_GAMMADIR = 0x0040, | 212 | NUBUS_RESID_GAMMADIR = 0x0040, |
189 | NUBUS_RESID_FIRSTMODE = 0x0080, | 213 | NUBUS_RESID_FIRSTMODE = 0x0080, |
190 | NUBUS_RESID_SECONDMODE = 0x0081, | 214 | NUBUS_RESID_SECONDMODE = 0x0081, |
191 | NUBUS_RESID_THIRDMODE = 0x0082, | 215 | NUBUS_RESID_THIRDMODE = 0x0082, |
192 | NUBUS_RESID_FOURTHMODE = 0x0083, | 216 | NUBUS_RESID_FOURTHMODE = 0x0083, |
193 | NUBUS_RESID_FIFTHMODE = 0x0084, | 217 | NUBUS_RESID_FIFTHMODE = 0x0084, |
194 | NUBUS_RESID_SIXTHMODE = 0x0085 | 218 | NUBUS_RESID_SIXTHMODE = 0x0085 |
195 | }; | 219 | }; |
196 | 220 | ||
197 | struct nubus_dir | 221 | struct nubus_dir |
@@ -214,7 +238,7 @@ struct nubus_board { | |||
214 | struct nubus_board* next; | 238 | struct nubus_board* next; |
215 | struct nubus_dev* first_dev; | 239 | struct nubus_dev* first_dev; |
216 | 240 | ||
217 | /* Only 9-E actually exist, though 0-8 are also theoretically | 241 | /* Only 9-E actually exist, though 0-8 are also theoretically |
218 | possible, and 0 is a special case which represents the | 242 | possible, and 0 is a special case which represents the |
219 | motherboard and onboard peripherals (Ethernet, video) */ | 243 | motherboard and onboard peripherals (Ethernet, video) */ |
220 | int slot; | 244 | int slot; |
diff --git a/include/linux/parser.h b/include/linux/parser.h index fa3332861a09..26b2bdfcaf06 100644 --- a/include/linux/parser.h +++ b/include/linux/parser.h | |||
@@ -11,7 +11,7 @@ | |||
11 | /* associates an integer enumerator with a pattern string. */ | 11 | /* associates an integer enumerator with a pattern string. */ |
12 | struct match_token { | 12 | struct match_token { |
13 | int token; | 13 | int token; |
14 | char *pattern; | 14 | const char *pattern; |
15 | }; | 15 | }; |
16 | 16 | ||
17 | typedef struct match_token match_table_t[]; | 17 | typedef struct match_token match_table_t[]; |
@@ -29,5 +29,5 @@ int match_token(char *, match_table_t table, substring_t args[]); | |||
29 | int match_int(substring_t *, int *result); | 29 | int match_int(substring_t *, int *result); |
30 | int match_octal(substring_t *, int *result); | 30 | int match_octal(substring_t *, int *result); |
31 | int match_hex(substring_t *, int *result); | 31 | int match_hex(substring_t *, int *result); |
32 | void match_strcpy(char *, substring_t *); | 32 | void match_strcpy(char *, const substring_t *); |
33 | char *match_strdup(substring_t *); | 33 | char *match_strdup(const substring_t *); |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 972491089ac9..fbf3766dac1e 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -96,6 +96,19 @@ enum pci_channel_state { | |||
96 | pci_channel_io_perm_failure = (__force pci_channel_state_t) 3, | 96 | pci_channel_io_perm_failure = (__force pci_channel_state_t) 3, |
97 | }; | 97 | }; |
98 | 98 | ||
99 | typedef unsigned int __bitwise pcie_reset_state_t; | ||
100 | |||
101 | enum pcie_reset_state { | ||
102 | /* Reset is NOT asserted (Use to deassert reset) */ | ||
103 | pcie_deassert_reset = (__force pcie_reset_state_t) 1, | ||
104 | |||
105 | /* Use #PERST to reset PCI-E device */ | ||
106 | pcie_warm_reset = (__force pcie_reset_state_t) 2, | ||
107 | |||
108 | /* Use PCI-E Hot Reset to reset device */ | ||
109 | pcie_hot_reset = (__force pcie_reset_state_t) 3 | ||
110 | }; | ||
111 | |||
99 | typedef unsigned short __bitwise pci_bus_flags_t; | 112 | typedef unsigned short __bitwise pci_bus_flags_t; |
100 | enum pci_bus_flags { | 113 | enum pci_bus_flags { |
101 | PCI_BUS_FLAGS_NO_MSI = (__force pci_bus_flags_t) 1, | 114 | PCI_BUS_FLAGS_NO_MSI = (__force pci_bus_flags_t) 1, |
@@ -176,10 +189,12 @@ struct pci_dev { | |||
176 | int rom_attr_enabled; /* has display of the rom attribute been enabled? */ | 189 | int rom_attr_enabled; /* has display of the rom attribute been enabled? */ |
177 | struct bin_attribute *res_attr[DEVICE_COUNT_RESOURCE]; /* sysfs file for resources */ | 190 | struct bin_attribute *res_attr[DEVICE_COUNT_RESOURCE]; /* sysfs file for resources */ |
178 | #ifdef CONFIG_PCI_MSI | 191 | #ifdef CONFIG_PCI_MSI |
179 | unsigned int first_msi_irq; | 192 | struct list_head msi_list; |
180 | #endif | 193 | #endif |
181 | }; | 194 | }; |
182 | 195 | ||
196 | extern struct pci_dev *alloc_pci_dev(void); | ||
197 | |||
183 | #define pci_dev_g(n) list_entry(n, struct pci_dev, global_list) | 198 | #define pci_dev_g(n) list_entry(n, struct pci_dev, global_list) |
184 | #define pci_dev_b(n) list_entry(n, struct pci_dev, bus_list) | 199 | #define pci_dev_b(n) list_entry(n, struct pci_dev, bus_list) |
185 | #define to_pci_dev(n) container_of(n, struct pci_dev, dev) | 200 | #define to_pci_dev(n) container_of(n, struct pci_dev, dev) |
@@ -392,12 +407,6 @@ struct pci_driver { | |||
392 | .vendor = PCI_ANY_ID, .device = PCI_ANY_ID, \ | 407 | .vendor = PCI_ANY_ID, .device = PCI_ANY_ID, \ |
393 | .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID | 408 | .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID |
394 | 409 | ||
395 | /* | ||
396 | * pci_module_init is obsolete, this stays here till we fix up all usages of it | ||
397 | * in the tree. | ||
398 | */ | ||
399 | #define pci_module_init pci_register_driver | ||
400 | |||
401 | /** | 410 | /** |
402 | * PCI_VDEVICE - macro used to describe a specific pci device in short form | 411 | * PCI_VDEVICE - macro used to describe a specific pci device in short form |
403 | * @vend: the vendor name | 412 | * @vend: the vendor name |
@@ -532,6 +541,7 @@ static inline int pci_is_managed(struct pci_dev *pdev) | |||
532 | 541 | ||
533 | void pci_disable_device(struct pci_dev *dev); | 542 | void pci_disable_device(struct pci_dev *dev); |
534 | void pci_set_master(struct pci_dev *dev); | 543 | void pci_set_master(struct pci_dev *dev); |
544 | int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state); | ||
535 | #define HAVE_PCI_SET_MWI | 545 | #define HAVE_PCI_SET_MWI |
536 | int __must_check pci_set_mwi(struct pci_dev *dev); | 546 | int __must_check pci_set_mwi(struct pci_dev *dev); |
537 | void pci_clear_mwi(struct pci_dev *dev); | 547 | void pci_clear_mwi(struct pci_dev *dev); |
@@ -730,6 +740,9 @@ static inline int pci_set_power_state(struct pci_dev *dev, pci_power_t state) { | |||
730 | static inline pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state) { return PCI_D0; } | 740 | static inline pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state) { return PCI_D0; } |
731 | static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable) { return 0; } | 741 | static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable) { return 0; } |
732 | 742 | ||
743 | static inline int pci_request_regions(struct pci_dev *dev, const char *res_name) { return -EIO; } | ||
744 | static inline void pci_release_regions(struct pci_dev *dev) { } | ||
745 | |||
733 | #define pci_dma_burst_advice(pdev, strat, strategy_parameter) do { } while (0) | 746 | #define pci_dma_burst_advice(pdev, strat, strategy_parameter) do { } while (0) |
734 | 747 | ||
735 | static inline void pci_block_user_cfg_access(struct pci_dev *dev) { } | 748 | static inline void pci_block_user_cfg_access(struct pci_dev *dev) { } |
diff --git a/include/linux/pci_hotplug.h b/include/linux/pci_hotplug.h index a675a05c4091..ab4cb6ecd47c 100644 --- a/include/linux/pci_hotplug.h +++ b/include/linux/pci_hotplug.h | |||
@@ -174,7 +174,7 @@ extern int pci_hp_register (struct hotplug_slot *slot); | |||
174 | extern int pci_hp_deregister (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, | 175 | extern int __must_check pci_hp_change_slot_info (struct hotplug_slot *slot, |
176 | struct hotplug_slot_info *info); | 176 | struct hotplug_slot_info *info); |
177 | extern struct subsystem pci_hotplug_slots_subsys; | 177 | extern struct kset pci_hotplug_slots_subsys; |
178 | 178 | ||
179 | /* PCI Setting Record (Type 0) */ | 179 | /* PCI Setting Record (Type 0) */ |
180 | struct hpp_type0 { | 180 | struct hpp_type0 { |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 1b0ddbb8a804..ae849f0d4430 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -1213,11 +1213,13 @@ | |||
1213 | #define PCI_DEVICE_ID_NVIDIA_NVENET_16 0x03E5 | 1213 | #define PCI_DEVICE_ID_NVIDIA_NVENET_16 0x03E5 |
1214 | #define PCI_DEVICE_ID_NVIDIA_NVENET_17 0x03E6 | 1214 | #define PCI_DEVICE_ID_NVIDIA_NVENET_17 0x03E6 |
1215 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA 0x03E7 | 1215 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA 0x03E7 |
1216 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SMBUS 0x03EB | ||
1216 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE 0x03EC | 1217 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE 0x03EC |
1217 | #define PCI_DEVICE_ID_NVIDIA_NVENET_18 0x03EE | 1218 | #define PCI_DEVICE_ID_NVIDIA_NVENET_18 0x03EE |
1218 | #define PCI_DEVICE_ID_NVIDIA_NVENET_19 0x03EF | 1219 | #define PCI_DEVICE_ID_NVIDIA_NVENET_19 0x03EF |
1219 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2 0x03F6 | 1220 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2 0x03F6 |
1220 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3 0x03F7 | 1221 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3 0x03F7 |
1222 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_SMBUS 0x0446 | ||
1221 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE 0x0448 | 1223 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE 0x0448 |
1222 | #define PCI_DEVICE_ID_NVIDIA_NVENET_20 0x0450 | 1224 | #define PCI_DEVICE_ID_NVIDIA_NVENET_20 0x0450 |
1223 | #define PCI_DEVICE_ID_NVIDIA_NVENET_21 0x0451 | 1225 | #define PCI_DEVICE_ID_NVIDIA_NVENET_21 0x0451 |
@@ -1924,6 +1926,7 @@ | |||
1924 | #define PCI_DEVICE_ID_TIGON3_5752 0x1600 | 1926 | #define PCI_DEVICE_ID_TIGON3_5752 0x1600 |
1925 | #define PCI_DEVICE_ID_TIGON3_5752M 0x1601 | 1927 | #define PCI_DEVICE_ID_TIGON3_5752M 0x1601 |
1926 | #define PCI_DEVICE_ID_NX2_5709 0x1639 | 1928 | #define PCI_DEVICE_ID_NX2_5709 0x1639 |
1929 | #define PCI_DEVICE_ID_NX2_5709S 0x163a | ||
1927 | #define PCI_DEVICE_ID_TIGON3_5700 0x1644 | 1930 | #define PCI_DEVICE_ID_TIGON3_5700 0x1644 |
1928 | #define PCI_DEVICE_ID_TIGON3_5701 0x1645 | 1931 | #define PCI_DEVICE_ID_TIGON3_5701 0x1645 |
1929 | #define PCI_DEVICE_ID_TIGON3_5702 0x1646 | 1932 | #define PCI_DEVICE_ID_TIGON3_5702 0x1646 |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 253a2b9be9d6..e7367c74e1bb 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -197,7 +197,7 @@ typedef unsigned char *sk_buff_data_t; | |||
197 | * @tstamp: Time we arrived | 197 | * @tstamp: Time we arrived |
198 | * @dev: Device we arrived on/are leaving by | 198 | * @dev: Device we arrived on/are leaving by |
199 | * @iif: ifindex of device we arrived on | 199 | * @iif: ifindex of device we arrived on |
200 | * @h: Transport layer header | 200 | * @transport_header: Transport layer header |
201 | * @network_header: Network layer header | 201 | * @network_header: Network layer header |
202 | * @mac_header: Link layer header | 202 | * @mac_header: Link layer header |
203 | * @dst: destination entry | 203 | * @dst: destination entry |
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index c7a78eef2b4f..66611423c8ee 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h | |||
@@ -84,7 +84,8 @@ struct rpc_procinfo { | |||
84 | u32 p_proc; /* RPC procedure number */ | 84 | u32 p_proc; /* RPC procedure number */ |
85 | kxdrproc_t p_encode; /* XDR encode function */ | 85 | kxdrproc_t p_encode; /* XDR encode function */ |
86 | kxdrproc_t p_decode; /* XDR decode function */ | 86 | kxdrproc_t p_decode; /* XDR decode function */ |
87 | unsigned int p_bufsiz; /* req. buffer size */ | 87 | unsigned int p_arglen; /* argument hdr length (u32) */ |
88 | unsigned int p_replen; /* reply hdr length (u32) */ | ||
88 | unsigned int p_count; /* call count */ | 89 | unsigned int p_count; /* call count */ |
89 | unsigned int p_timer; /* Which RTT timer to use */ | 90 | unsigned int p_timer; /* Which RTT timer to use */ |
90 | u32 p_statidx; /* Which procedure to account */ | 91 | u32 p_statidx; /* Which procedure to account */ |
@@ -121,8 +122,8 @@ struct rpc_clnt *rpc_clone_client(struct rpc_clnt *); | |||
121 | int rpc_shutdown_client(struct rpc_clnt *); | 122 | int rpc_shutdown_client(struct rpc_clnt *); |
122 | int rpc_destroy_client(struct rpc_clnt *); | 123 | int rpc_destroy_client(struct rpc_clnt *); |
123 | void rpc_release_client(struct rpc_clnt *); | 124 | void rpc_release_client(struct rpc_clnt *); |
124 | void rpc_getport(struct rpc_task *); | 125 | int rpcb_register(u32, u32, int, unsigned short, int *); |
125 | int rpc_register(u32, u32, int, unsigned short, int *); | 126 | void rpcb_getport(struct rpc_task *); |
126 | 127 | ||
127 | void rpc_call_setup(struct rpc_task *, struct rpc_message *, int); | 128 | void rpc_call_setup(struct rpc_task *, struct rpc_message *, int); |
128 | 129 | ||
@@ -144,7 +145,7 @@ char * rpc_peeraddr2str(struct rpc_clnt *, enum rpc_display_format_t); | |||
144 | /* | 145 | /* |
145 | * Helper function for NFSroot support | 146 | * Helper function for NFSroot support |
146 | */ | 147 | */ |
147 | int rpc_getport_external(struct sockaddr_in *, __u32, __u32, int); | 148 | int rpcb_getport_external(struct sockaddr_in *, __u32, __u32, int); |
148 | 149 | ||
149 | #endif /* __KERNEL__ */ | 150 | #endif /* __KERNEL__ */ |
150 | #endif /* _LINUX_SUNRPC_CLNT_H */ | 151 | #endif /* _LINUX_SUNRPC_CLNT_H */ |
diff --git a/include/linux/sunrpc/debug.h b/include/linux/sunrpc/debug.h index b7c7307ceec6..3912cf16361e 100644 --- a/include/linux/sunrpc/debug.h +++ b/include/linux/sunrpc/debug.h | |||
@@ -17,7 +17,7 @@ | |||
17 | #define RPCDBG_DEBUG 0x0004 | 17 | #define RPCDBG_DEBUG 0x0004 |
18 | #define RPCDBG_NFS 0x0008 | 18 | #define RPCDBG_NFS 0x0008 |
19 | #define RPCDBG_AUTH 0x0010 | 19 | #define RPCDBG_AUTH 0x0010 |
20 | #define RPCDBG_PMAP 0x0020 | 20 | #define RPCDBG_BIND 0x0020 |
21 | #define RPCDBG_SCHED 0x0040 | 21 | #define RPCDBG_SCHED 0x0040 |
22 | #define RPCDBG_TRANS 0x0080 | 22 | #define RPCDBG_TRANS 0x0080 |
23 | #define RPCDBG_SVCSOCK 0x0100 | 23 | #define RPCDBG_SVCSOCK 0x0100 |
diff --git a/include/linux/sunrpc/msg_prot.h b/include/linux/sunrpc/msg_prot.h index 606cb2165232..784d4c3ef651 100644 --- a/include/linux/sunrpc/msg_prot.h +++ b/include/linux/sunrpc/msg_prot.h | |||
@@ -78,10 +78,6 @@ enum rpc_auth_stat { | |||
78 | RPCSEC_GSS_CTXPROBLEM = 14 | 78 | RPCSEC_GSS_CTXPROBLEM = 14 |
79 | }; | 79 | }; |
80 | 80 | ||
81 | #define RPC_PMAP_PROGRAM 100000 | ||
82 | #define RPC_PMAP_VERSION 2 | ||
83 | #define RPC_PMAP_PORT 111 | ||
84 | |||
85 | #define RPC_MAXNETNAMELEN 256 | 81 | #define RPC_MAXNETNAMELEN 256 |
86 | 82 | ||
87 | /* | 83 | /* |
diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h index 3069ecca0129..2047fb202a13 100644 --- a/include/linux/sunrpc/sched.h +++ b/include/linux/sunrpc/sched.h | |||
@@ -264,7 +264,7 @@ struct rpc_task *rpc_wake_up_next(struct rpc_wait_queue *); | |||
264 | void rpc_wake_up_status(struct rpc_wait_queue *, int); | 264 | void rpc_wake_up_status(struct rpc_wait_queue *, int); |
265 | void rpc_delay(struct rpc_task *, unsigned long); | 265 | void rpc_delay(struct rpc_task *, unsigned long); |
266 | void * rpc_malloc(struct rpc_task *, size_t); | 266 | void * rpc_malloc(struct rpc_task *, size_t); |
267 | void rpc_free(struct rpc_task *); | 267 | void rpc_free(void *); |
268 | int rpciod_up(void); | 268 | int rpciod_up(void); |
269 | void rpciod_down(void); | 269 | void rpciod_down(void); |
270 | int __rpc_wait_for_completion_task(struct rpc_task *task, int (*)(void *)); | 270 | int __rpc_wait_for_completion_task(struct rpc_task *task, int (*)(void *)); |
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index f780e72fc417..fa89ce6ce076 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
@@ -84,7 +84,9 @@ struct rpc_rqst { | |||
84 | struct list_head rq_list; | 84 | struct list_head rq_list; |
85 | 85 | ||
86 | __u32 * rq_buffer; /* XDR encode buffer */ | 86 | __u32 * rq_buffer; /* XDR encode buffer */ |
87 | size_t rq_bufsize; | 87 | size_t rq_bufsize, |
88 | rq_callsize, | ||
89 | rq_rcvsize; | ||
88 | 90 | ||
89 | struct xdr_buf rq_private_buf; /* The receive buffer | 91 | struct xdr_buf rq_private_buf; /* The receive buffer |
90 | * used in the softirq. | 92 | * used in the softirq. |
@@ -112,7 +114,7 @@ struct rpc_xprt_ops { | |||
112 | void (*set_port)(struct rpc_xprt *xprt, unsigned short port); | 114 | void (*set_port)(struct rpc_xprt *xprt, unsigned short port); |
113 | void (*connect)(struct rpc_task *task); | 115 | void (*connect)(struct rpc_task *task); |
114 | void * (*buf_alloc)(struct rpc_task *task, size_t size); | 116 | void * (*buf_alloc)(struct rpc_task *task, size_t size); |
115 | void (*buf_free)(struct rpc_task *task); | 117 | void (*buf_free)(void *buffer); |
116 | int (*send_request)(struct rpc_task *task); | 118 | int (*send_request)(struct rpc_task *task); |
117 | void (*set_retrans_timeout)(struct rpc_task *task); | 119 | void (*set_retrans_timeout)(struct rpc_task *task); |
118 | void (*timer)(struct rpc_task *task); | 120 | void (*timer)(struct rpc_task *task); |
@@ -150,6 +152,7 @@ struct rpc_xprt { | |||
150 | unsigned long state; /* transport state */ | 152 | unsigned long state; /* transport state */ |
151 | unsigned char shutdown : 1, /* being shut down */ | 153 | unsigned char shutdown : 1, /* being shut down */ |
152 | resvport : 1; /* use a reserved port */ | 154 | resvport : 1; /* use a reserved port */ |
155 | unsigned int bind_index; /* bind function index */ | ||
153 | 156 | ||
154 | /* | 157 | /* |
155 | * Connection of transports | 158 | * Connection of transports |
diff --git a/include/linux/tifm.h b/include/linux/tifm.h index 3deb0a6c1370..2a196982601f 100644 --- a/include/linux/tifm.h +++ b/include/linux/tifm.h | |||
@@ -14,16 +14,16 @@ | |||
14 | 14 | ||
15 | #include <linux/spinlock.h> | 15 | #include <linux/spinlock.h> |
16 | #include <linux/interrupt.h> | 16 | #include <linux/interrupt.h> |
17 | #include <linux/wait.h> | ||
18 | #include <linux/delay.h> | 17 | #include <linux/delay.h> |
19 | #include <linux/pci.h> | 18 | #include <linux/pci.h> |
20 | #include <linux/kthread.h> | 19 | #include <linux/workqueue.h> |
21 | 20 | ||
22 | /* Host registers (relative to pci base address): */ | 21 | /* Host registers (relative to pci base address): */ |
23 | enum { | 22 | enum { |
24 | FM_SET_INTERRUPT_ENABLE = 0x008, | 23 | FM_SET_INTERRUPT_ENABLE = 0x008, |
25 | FM_CLEAR_INTERRUPT_ENABLE = 0x00c, | 24 | FM_CLEAR_INTERRUPT_ENABLE = 0x00c, |
26 | FM_INTERRUPT_STATUS = 0x014 }; | 25 | FM_INTERRUPT_STATUS = 0x014 |
26 | }; | ||
27 | 27 | ||
28 | /* Socket registers (relative to socket base address): */ | 28 | /* Socket registers (relative to socket base address): */ |
29 | enum { | 29 | enum { |
@@ -58,14 +58,8 @@ enum { | |||
58 | SOCK_MS_DATA = 0x188, | 58 | SOCK_MS_DATA = 0x188, |
59 | SOCK_MS_STATUS = 0x18c, | 59 | SOCK_MS_STATUS = 0x18c, |
60 | SOCK_MS_SYSTEM = 0x190, | 60 | SOCK_MS_SYSTEM = 0x190, |
61 | SOCK_FIFO_ACCESS = 0x200 }; | 61 | SOCK_FIFO_ACCESS = 0x200 |
62 | 62 | }; | |
63 | |||
64 | #define TIFM_IRQ_ENABLE 0x80000000 | ||
65 | #define TIFM_IRQ_SOCKMASK(x) (x) | ||
66 | #define TIFM_IRQ_CARDMASK(x) ((x) << 8) | ||
67 | #define TIFM_IRQ_FIFOMASK(x) ((x) << 16) | ||
68 | #define TIFM_IRQ_SETALL 0xffffffff | ||
69 | 63 | ||
70 | #define TIFM_CTRL_LED 0x00000040 | 64 | #define TIFM_CTRL_LED 0x00000040 |
71 | #define TIFM_CTRL_FAST_CLK 0x00000100 | 65 | #define TIFM_CTRL_FAST_CLK 0x00000100 |
@@ -73,63 +67,76 @@ enum { | |||
73 | #define TIFM_SOCK_STATE_OCCUPIED 0x00000008 | 67 | #define TIFM_SOCK_STATE_OCCUPIED 0x00000008 |
74 | #define TIFM_SOCK_STATE_POWERED 0x00000080 | 68 | #define TIFM_SOCK_STATE_POWERED 0x00000080 |
75 | 69 | ||
76 | #define TIFM_FIFO_ENABLE 0x00000001 /* Meaning of this constant is unverified */ | 70 | #define TIFM_FIFO_ENABLE 0x00000001 |
71 | #define TIFM_FIFO_READY 0x00000001 | ||
77 | #define TIFM_FIFO_INT_SETALL 0x0000ffff | 72 | #define TIFM_FIFO_INT_SETALL 0x0000ffff |
78 | #define TIFM_FIFO_INTMASK 0x00000005 /* Meaning of this constant is unverified */ | 73 | #define TIFM_FIFO_INTMASK 0x00000005 |
74 | |||
75 | #define TIFM_DMA_RESET 0x00000002 | ||
76 | #define TIFM_DMA_TX 0x00008000 | ||
77 | #define TIFM_DMA_EN 0x00000001 | ||
78 | #define TIFM_DMA_TSIZE 0x0000007f | ||
79 | 79 | ||
80 | #define TIFM_DMA_RESET 0x00000002 /* Meaning of this constant is unverified */ | 80 | #define TIFM_TYPE_XD 1 |
81 | #define TIFM_DMA_TX 0x00008000 /* Meaning of this constant is unverified */ | 81 | #define TIFM_TYPE_MS 2 |
82 | #define TIFM_DMA_EN 0x00000001 /* Meaning of this constant is unverified */ | 82 | #define TIFM_TYPE_SD 3 |
83 | 83 | ||
84 | typedef enum {FM_NULL = 0, FM_XD = 0x01, FM_MS = 0x02, FM_SD = 0x03} tifm_media_id; | 84 | struct tifm_device_id { |
85 | unsigned char type; | ||
86 | }; | ||
85 | 87 | ||
86 | struct tifm_driver; | 88 | struct tifm_driver; |
87 | struct tifm_dev { | 89 | struct tifm_dev { |
88 | char __iomem *addr; | 90 | char __iomem *addr; |
89 | spinlock_t lock; | 91 | spinlock_t lock; |
90 | tifm_media_id media_id; | 92 | unsigned char type; |
91 | unsigned int socket_id; | 93 | unsigned int socket_id; |
92 | 94 | ||
93 | void (*signal_irq)(struct tifm_dev *sock, | 95 | void (*card_event)(struct tifm_dev *sock); |
94 | unsigned int sock_irq_status); | 96 | void (*data_event)(struct tifm_dev *sock); |
95 | 97 | ||
96 | struct tifm_driver *drv; | 98 | struct device dev; |
97 | struct device dev; | ||
98 | }; | 99 | }; |
99 | 100 | ||
100 | struct tifm_driver { | 101 | struct tifm_driver { |
101 | tifm_media_id *id_table; | 102 | struct tifm_device_id *id_table; |
102 | int (*probe)(struct tifm_dev *dev); | 103 | int (*probe)(struct tifm_dev *dev); |
103 | void (*remove)(struct tifm_dev *dev); | 104 | void (*remove)(struct tifm_dev *dev); |
104 | int (*suspend)(struct tifm_dev *dev, | 105 | int (*suspend)(struct tifm_dev *dev, |
105 | pm_message_t state); | 106 | pm_message_t state); |
106 | int (*resume)(struct tifm_dev *dev); | 107 | int (*resume)(struct tifm_dev *dev); |
107 | 108 | ||
108 | struct device_driver driver; | 109 | struct device_driver driver; |
109 | }; | 110 | }; |
110 | 111 | ||
111 | struct tifm_adapter { | 112 | struct tifm_adapter { |
112 | char __iomem *addr; | 113 | char __iomem *addr; |
113 | spinlock_t lock; | 114 | spinlock_t lock; |
114 | unsigned int irq_status; | 115 | unsigned int irq_status; |
115 | unsigned int socket_change_set; | 116 | unsigned int socket_change_set; |
116 | wait_queue_head_t change_set_notify; | 117 | unsigned int id; |
117 | unsigned int id; | 118 | unsigned int num_sockets; |
118 | unsigned int num_sockets; | 119 | struct completion *finish_me; |
119 | struct tifm_dev **sockets; | 120 | |
120 | struct task_struct *media_switcher; | 121 | struct work_struct media_switcher; |
121 | struct class_device cdev; | 122 | struct class_device cdev; |
122 | struct device *dev; | 123 | |
123 | 124 | void (*eject)(struct tifm_adapter *fm, | |
124 | void (*eject)(struct tifm_adapter *fm, struct tifm_dev *sock); | 125 | struct tifm_dev *sock); |
126 | |||
127 | struct tifm_dev *sockets[0]; | ||
125 | }; | 128 | }; |
126 | 129 | ||
127 | struct tifm_adapter *tifm_alloc_adapter(void); | 130 | struct tifm_adapter *tifm_alloc_adapter(unsigned int num_sockets, |
128 | void tifm_free_device(struct device *dev); | 131 | struct device *dev); |
129 | void tifm_free_adapter(struct tifm_adapter *fm); | 132 | int tifm_add_adapter(struct tifm_adapter *fm); |
130 | int tifm_add_adapter(struct tifm_adapter *fm, int (*mediathreadfn)(void *data)); | ||
131 | void tifm_remove_adapter(struct tifm_adapter *fm); | 133 | void tifm_remove_adapter(struct tifm_adapter *fm); |
132 | struct tifm_dev *tifm_alloc_device(struct tifm_adapter *fm); | 134 | void tifm_free_adapter(struct tifm_adapter *fm); |
135 | |||
136 | void tifm_free_device(struct device *dev); | ||
137 | struct tifm_dev *tifm_alloc_device(struct tifm_adapter *fm, unsigned int id, | ||
138 | unsigned char type); | ||
139 | |||
133 | int tifm_register_driver(struct tifm_driver *drv); | 140 | int tifm_register_driver(struct tifm_driver *drv); |
134 | void tifm_unregister_driver(struct tifm_driver *drv); | 141 | void tifm_unregister_driver(struct tifm_driver *drv); |
135 | void tifm_eject(struct tifm_dev *sock); | 142 | void tifm_eject(struct tifm_dev *sock); |
@@ -137,11 +144,11 @@ int tifm_map_sg(struct tifm_dev *sock, struct scatterlist *sg, int nents, | |||
137 | int direction); | 144 | int direction); |
138 | void tifm_unmap_sg(struct tifm_dev *sock, struct scatterlist *sg, int nents, | 145 | void tifm_unmap_sg(struct tifm_dev *sock, struct scatterlist *sg, int nents, |
139 | int direction); | 146 | int direction); |
140 | 147 | void tifm_queue_work(struct work_struct *work); | |
141 | 148 | ||
142 | static inline void *tifm_get_drvdata(struct tifm_dev *dev) | 149 | static inline void *tifm_get_drvdata(struct tifm_dev *dev) |
143 | { | 150 | { |
144 | return dev_get_drvdata(&dev->dev); | 151 | return dev_get_drvdata(&dev->dev); |
145 | } | 152 | } |
146 | 153 | ||
147 | static inline void tifm_set_drvdata(struct tifm_dev *dev, void *data) | 154 | static inline void tifm_set_drvdata(struct tifm_dev *dev, void *data) |
@@ -149,8 +156,4 @@ static inline void tifm_set_drvdata(struct tifm_dev *dev, void *data) | |||
149 | dev_set_drvdata(&dev->dev, data); | 156 | dev_set_drvdata(&dev->dev, data); |
150 | } | 157 | } |
151 | 158 | ||
152 | struct tifm_device_id { | ||
153 | tifm_media_id media_id; | ||
154 | }; | ||
155 | |||
156 | #endif | 159 | #endif |
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index 0c78f7f4a976..daa6c125f66e 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
@@ -59,6 +59,8 @@ struct writeback_control { | |||
59 | unsigned for_reclaim:1; /* Invoked from the page allocator */ | 59 | unsigned for_reclaim:1; /* Invoked from the page allocator */ |
60 | unsigned for_writepages:1; /* This is a writepages() call */ | 60 | unsigned for_writepages:1; /* This is a writepages() call */ |
61 | unsigned range_cyclic:1; /* range_start is cyclic */ | 61 | unsigned range_cyclic:1; /* range_start is cyclic */ |
62 | |||
63 | void *fs_private; /* For use by ->writepages() */ | ||
62 | }; | 64 | }; |
63 | 65 | ||
64 | /* | 66 | /* |
diff --git a/include/linux/xfrm.h b/include/linux/xfrm.h index a5d53e0fe152..b58adc52448d 100644 --- a/include/linux/xfrm.h +++ b/include/linux/xfrm.h | |||
@@ -243,17 +243,6 @@ enum xfrm_ae_ftype_t { | |||
243 | #define XFRM_AE_MAX (__XFRM_AE_MAX - 1) | 243 | #define XFRM_AE_MAX (__XFRM_AE_MAX - 1) |
244 | }; | 244 | }; |
245 | 245 | ||
246 | /* SAD Table filter flags */ | ||
247 | enum xfrm_sad_ftype_t { | ||
248 | XFRM_SAD_UNSPEC, | ||
249 | XFRM_SAD_HMASK=1, | ||
250 | XFRM_SAD_HMAX=2, | ||
251 | XFRM_SAD_CNT=4, | ||
252 | __XFRM_SAD_MAX | ||
253 | |||
254 | #define XFRM_SAD_MAX (__XFRM_SAD_MAX - 1) | ||
255 | }; | ||
256 | |||
257 | struct xfrm_userpolicy_type { | 246 | struct xfrm_userpolicy_type { |
258 | __u8 type; | 247 | __u8 type; |
259 | __u16 reserved1; | 248 | __u16 reserved1; |
@@ -287,44 +276,41 @@ enum xfrm_attr_type_t { | |||
287 | 276 | ||
288 | enum xfrm_sadattr_type_t { | 277 | enum xfrm_sadattr_type_t { |
289 | XFRMA_SAD_UNSPEC, | 278 | XFRMA_SAD_UNSPEC, |
290 | XFRMA_SADHMASK, | 279 | XFRMA_SAD_CNT, |
291 | XFRMA_SADHMAX, | 280 | XFRMA_SAD_HINFO, |
292 | XFRMA_SADCNT, | ||
293 | __XFRMA_SAD_MAX | 281 | __XFRMA_SAD_MAX |
294 | 282 | ||
295 | #define XFRMA_SAD_MAX (__XFRMA_SAD_MAX - 1) | 283 | #define XFRMA_SAD_MAX (__XFRMA_SAD_MAX - 1) |
296 | }; | 284 | }; |
297 | 285 | ||
298 | /* SPD Table filter flags */ | 286 | struct xfrmu_sadhinfo { |
299 | enum xfrm_spd_ftype_t { | 287 | __u32 sadhcnt; /* current hash bkts */ |
300 | XFRM_SPD_UNSPEC, | 288 | __u32 sadhmcnt; /* max allowed hash bkts */ |
301 | XFRM_SPD_HMASK=1, | ||
302 | XFRM_SPD_HMAX=2, | ||
303 | XFRM_SPD_ICNT=4, | ||
304 | XFRM_SPD_OCNT=8, | ||
305 | XFRM_SPD_FCNT=16, | ||
306 | XFRM_SPD_ISCNT=32, | ||
307 | XFRM_SPD_OSCNT=64, | ||
308 | XFRM_SPD_FSCNT=128, | ||
309 | __XFRM_SPD_MAX | ||
310 | |||
311 | #define XFRM_SPD_MAX (__XFRM_SPD_MAX - 1) | ||
312 | }; | 289 | }; |
290 | |||
313 | enum xfrm_spdattr_type_t { | 291 | enum xfrm_spdattr_type_t { |
314 | XFRMA_SPD_UNSPEC, | 292 | XFRMA_SPD_UNSPEC, |
315 | XFRMA_SPDHMASK, | 293 | XFRMA_SPD_INFO, |
316 | XFRMA_SPDHMAX, | 294 | XFRMA_SPD_HINFO, |
317 | XFRMA_SPDICNT, | ||
318 | XFRMA_SPDOCNT, | ||
319 | XFRMA_SPDFCNT, | ||
320 | XFRMA_SPDISCNT, | ||
321 | XFRMA_SPDOSCNT, | ||
322 | XFRMA_SPDFSCNT, | ||
323 | __XFRMA_SPD_MAX | 295 | __XFRMA_SPD_MAX |
324 | 296 | ||
325 | #define XFRMA_SPD_MAX (__XFRMA_SPD_MAX - 1) | 297 | #define XFRMA_SPD_MAX (__XFRMA_SPD_MAX - 1) |
326 | }; | 298 | }; |
327 | 299 | ||
300 | struct xfrmu_spdinfo { | ||
301 | __u32 incnt; | ||
302 | __u32 outcnt; | ||
303 | __u32 fwdcnt; | ||
304 | __u32 inscnt; | ||
305 | __u32 outscnt; | ||
306 | __u32 fwdscnt; | ||
307 | }; | ||
308 | |||
309 | struct xfrmu_spdhinfo { | ||
310 | __u32 spdhcnt; | ||
311 | __u32 spdhmcnt; | ||
312 | }; | ||
313 | |||
328 | struct xfrm_usersa_info { | 314 | struct xfrm_usersa_info { |
329 | struct xfrm_selector sel; | 315 | struct xfrm_selector sel; |
330 | struct xfrm_id id; | 316 | struct xfrm_id id; |
diff --git a/include/media/ovcamchip.h b/include/media/ovcamchip.h index 0f43451f8bb3..05b9569ef1c8 100644 --- a/include/media/ovcamchip.h +++ b/include/media/ovcamchip.h | |||
@@ -16,7 +16,6 @@ | |||
16 | 16 | ||
17 | #include <linux/videodev.h> | 17 | #include <linux/videodev.h> |
18 | #include <media/v4l2-common.h> | 18 | #include <media/v4l2-common.h> |
19 | #include <linux/i2c.h> | ||
20 | 19 | ||
21 | /* --------------------------------- */ | 20 | /* --------------------------------- */ |
22 | /* ENUMERATIONS */ | 21 | /* ENUMERATIONS */ |
diff --git a/include/media/tuner.h b/include/media/tuner.h index a41ac41113ac..6dcf3c45707d 100644 --- a/include/media/tuner.h +++ b/include/media/tuner.h | |||
@@ -23,6 +23,7 @@ | |||
23 | #define _TUNER_H | 23 | #define _TUNER_H |
24 | 24 | ||
25 | #include <linux/videodev2.h> | 25 | #include <linux/videodev2.h> |
26 | #include <linux/i2c.h> | ||
26 | #include <media/tuner-types.h> | 27 | #include <media/tuner-types.h> |
27 | 28 | ||
28 | extern int tuner_debug; | 29 | extern int tuner_debug; |
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index f70afef9c3cc..4fa5dfe886c4 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h | |||
@@ -204,9 +204,9 @@ struct ip6_flowlabel | |||
204 | { | 204 | { |
205 | struct ip6_flowlabel *next; | 205 | struct ip6_flowlabel *next; |
206 | __be32 label; | 206 | __be32 label; |
207 | atomic_t users; | ||
207 | struct in6_addr dst; | 208 | struct in6_addr dst; |
208 | struct ipv6_txoptions *opt; | 209 | struct ipv6_txoptions *opt; |
209 | atomic_t users; | ||
210 | unsigned long linger; | 210 | unsigned long linger; |
211 | u8 share; | 211 | u8 share; |
212 | u32 owner; | 212 | u32 owner; |
@@ -291,7 +291,7 @@ static inline int ipv6_addr_src_scope(const struct in6_addr *addr) | |||
291 | 291 | ||
292 | static inline int ipv6_addr_cmp(const struct in6_addr *a1, const struct in6_addr *a2) | 292 | static inline int ipv6_addr_cmp(const struct in6_addr *a1, const struct in6_addr *a2) |
293 | { | 293 | { |
294 | return memcmp((const void *) a1, (const void *) a2, sizeof(struct in6_addr)); | 294 | return memcmp(a1, a2, sizeof(struct in6_addr)); |
295 | } | 295 | } |
296 | 296 | ||
297 | static inline int | 297 | static inline int |
@@ -308,7 +308,7 @@ ipv6_masked_addr_cmp(const struct in6_addr *a1, const struct in6_addr *m, | |||
308 | 308 | ||
309 | static inline void ipv6_addr_copy(struct in6_addr *a1, const struct in6_addr *a2) | 309 | static inline void ipv6_addr_copy(struct in6_addr *a1, const struct in6_addr *a2) |
310 | { | 310 | { |
311 | memcpy((void *) a1, (const void *) a2, sizeof(struct in6_addr)); | 311 | memcpy(a1, a2, sizeof(struct in6_addr)); |
312 | } | 312 | } |
313 | 313 | ||
314 | static inline void ipv6_addr_prefix(struct in6_addr *pfx, | 314 | static inline void ipv6_addr_prefix(struct in6_addr *pfx, |
@@ -319,16 +319,12 @@ static inline void ipv6_addr_prefix(struct in6_addr *pfx, | |||
319 | int o = plen >> 3, | 319 | int o = plen >> 3, |
320 | b = plen & 0x7; | 320 | b = plen & 0x7; |
321 | 321 | ||
322 | memset(pfx->s6_addr, 0, sizeof(pfx->s6_addr)); | ||
322 | memcpy(pfx->s6_addr, addr, o); | 323 | memcpy(pfx->s6_addr, addr, o); |
323 | if (b != 0) { | 324 | if (b != 0) |
324 | pfx->s6_addr[o] = addr->s6_addr[o] & (0xff00 >> b); | 325 | pfx->s6_addr[o] = addr->s6_addr[o] & (0xff00 >> b); |
325 | o++; | ||
326 | } | ||
327 | if (o < 16) | ||
328 | memset(pfx->s6_addr + o, 0, 16 - o); | ||
329 | } | 326 | } |
330 | 327 | ||
331 | #ifndef __HAVE_ARCH_ADDR_SET | ||
332 | static inline void ipv6_addr_set(struct in6_addr *addr, | 328 | static inline void ipv6_addr_set(struct in6_addr *addr, |
333 | __be32 w1, __be32 w2, | 329 | __be32 w1, __be32 w2, |
334 | __be32 w3, __be32 w4) | 330 | __be32 w3, __be32 w4) |
@@ -338,7 +334,6 @@ static inline void ipv6_addr_set(struct in6_addr *addr, | |||
338 | addr->s6_addr32[2] = w3; | 334 | addr->s6_addr32[2] = w3; |
339 | addr->s6_addr32[3] = w4; | 335 | addr->s6_addr32[3] = w4; |
340 | } | 336 | } |
341 | #endif | ||
342 | 337 | ||
343 | static inline int ipv6_addr_equal(const struct in6_addr *a1, | 338 | static inline int ipv6_addr_equal(const struct in6_addr *a1, |
344 | const struct in6_addr *a2) | 339 | const struct in6_addr *a2) |
diff --git a/include/net/iucv/af_iucv.h b/include/net/iucv/af_iucv.h index 04d1abb72d25..f9bd11be1891 100644 --- a/include/net/iucv/af_iucv.h +++ b/include/net/iucv/af_iucv.h | |||
@@ -28,6 +28,7 @@ enum { | |||
28 | IUCV_LISTEN, | 28 | IUCV_LISTEN, |
29 | IUCV_SEVERED, | 29 | IUCV_SEVERED, |
30 | IUCV_DISCONN, | 30 | IUCV_DISCONN, |
31 | IUCV_CLOSING, | ||
31 | IUCV_CLOSED | 32 | IUCV_CLOSED |
32 | }; | 33 | }; |
33 | 34 | ||
@@ -62,6 +63,7 @@ struct iucv_sock { | |||
62 | struct sock *parent; | 63 | struct sock *parent; |
63 | struct iucv_path *path; | 64 | struct iucv_path *path; |
64 | struct sk_buff_head send_skb_q; | 65 | struct sk_buff_head send_skb_q; |
66 | struct sk_buff_head backlog_skb_q; | ||
65 | unsigned int send_tag; | 67 | unsigned int send_tag; |
66 | }; | 68 | }; |
67 | 69 | ||
diff --git a/include/net/mac80211.h b/include/net/mac80211.h new file mode 100644 index 000000000000..a7f122b79948 --- /dev/null +++ b/include/net/mac80211.h | |||
@@ -0,0 +1,1045 @@ | |||
1 | /* | ||
2 | * Low-level hardware driver -- IEEE 802.11 driver (80211.o) interface | ||
3 | * Copyright 2002-2005, Devicescape Software, Inc. | ||
4 | * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> | ||
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 | #ifndef MAC80211_H | ||
12 | #define MAC80211_H | ||
13 | |||
14 | #include <linux/kernel.h> | ||
15 | #include <linux/if_ether.h> | ||
16 | #include <linux/skbuff.h> | ||
17 | #include <linux/wireless.h> | ||
18 | #include <linux/device.h> | ||
19 | #include <linux/ieee80211.h> | ||
20 | #include <net/wireless.h> | ||
21 | #include <net/cfg80211.h> | ||
22 | |||
23 | /* Note! Only ieee80211_tx_status_irqsafe() and ieee80211_rx_irqsafe() can be | ||
24 | * called in hardware interrupt context. The low-level driver must not call any | ||
25 | * other functions in hardware interrupt context. If there is a need for such | ||
26 | * call, the low-level driver should first ACK the interrupt and perform the | ||
27 | * IEEE 802.11 code call after this, e.g., from a scheduled tasklet (in | ||
28 | * software interrupt context). | ||
29 | */ | ||
30 | |||
31 | /* | ||
32 | * Frame format used when passing frame between low-level hardware drivers | ||
33 | * and IEEE 802.11 driver the same as used in the wireless media, i.e., | ||
34 | * buffers start with IEEE 802.11 header and include the same octets that | ||
35 | * are sent over air. | ||
36 | * | ||
37 | * If hardware uses IEEE 802.3 headers (and perform 802.3 <-> 802.11 | ||
38 | * conversion in firmware), upper layer 802.11 code needs to be changed to | ||
39 | * support this. | ||
40 | * | ||
41 | * If the receive frame format is not the same as the real frame sent | ||
42 | * on the wireless media (e.g., due to padding etc.), upper layer 802.11 code | ||
43 | * could be updated to provide support for such format assuming this would | ||
44 | * optimize the performance, e.g., by removing need to re-allocation and | ||
45 | * copying of the data. | ||
46 | */ | ||
47 | |||
48 | #define IEEE80211_CHAN_W_SCAN 0x00000001 | ||
49 | #define IEEE80211_CHAN_W_ACTIVE_SCAN 0x00000002 | ||
50 | #define IEEE80211_CHAN_W_IBSS 0x00000004 | ||
51 | |||
52 | /* Channel information structure. Low-level driver is expected to fill in chan, | ||
53 | * freq, and val fields. Other fields will be filled in by 80211.o based on | ||
54 | * hostapd information and low-level driver does not need to use them. The | ||
55 | * limits for each channel will be provided in 'struct ieee80211_conf' when | ||
56 | * configuring the low-level driver with hw->config callback. If a device has | ||
57 | * a default regulatory domain, IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED | ||
58 | * can be set to let the driver configure all fields */ | ||
59 | struct ieee80211_channel { | ||
60 | short chan; /* channel number (IEEE 802.11) */ | ||
61 | short freq; /* frequency in MHz */ | ||
62 | int val; /* hw specific value for the channel */ | ||
63 | int flag; /* flag for hostapd use (IEEE80211_CHAN_*) */ | ||
64 | unsigned char power_level; | ||
65 | unsigned char antenna_max; | ||
66 | }; | ||
67 | |||
68 | #define IEEE80211_RATE_ERP 0x00000001 | ||
69 | #define IEEE80211_RATE_BASIC 0x00000002 | ||
70 | #define IEEE80211_RATE_PREAMBLE2 0x00000004 | ||
71 | #define IEEE80211_RATE_SUPPORTED 0x00000010 | ||
72 | #define IEEE80211_RATE_OFDM 0x00000020 | ||
73 | #define IEEE80211_RATE_CCK 0x00000040 | ||
74 | #define IEEE80211_RATE_TURBO 0x00000080 | ||
75 | #define IEEE80211_RATE_MANDATORY 0x00000100 | ||
76 | |||
77 | #define IEEE80211_RATE_CCK_2 (IEEE80211_RATE_CCK | IEEE80211_RATE_PREAMBLE2) | ||
78 | #define IEEE80211_RATE_MODULATION(f) \ | ||
79 | (f & (IEEE80211_RATE_CCK | IEEE80211_RATE_OFDM)) | ||
80 | |||
81 | /* Low-level driver should set PREAMBLE2, OFDM, CCK, and TURBO flags. | ||
82 | * BASIC, SUPPORTED, ERP, and MANDATORY flags are set in 80211.o based on the | ||
83 | * configuration. */ | ||
84 | struct ieee80211_rate { | ||
85 | int rate; /* rate in 100 kbps */ | ||
86 | int val; /* hw specific value for the rate */ | ||
87 | int flags; /* IEEE80211_RATE_ flags */ | ||
88 | int val2; /* hw specific value for the rate when using short preamble | ||
89 | * (only when IEEE80211_RATE_PREAMBLE2 flag is set, i.e., for | ||
90 | * 2, 5.5, and 11 Mbps) */ | ||
91 | signed char min_rssi_ack; | ||
92 | unsigned char min_rssi_ack_delta; | ||
93 | |||
94 | /* following fields are set by 80211.o and need not be filled by the | ||
95 | * low-level driver */ | ||
96 | int rate_inv; /* inverse of the rate (LCM(all rates) / rate) for | ||
97 | * optimizing channel utilization estimates */ | ||
98 | }; | ||
99 | |||
100 | /* 802.11g is backwards-compatible with 802.11b, so a wlan card can | ||
101 | * actually be both in 11b and 11g modes at the same time. */ | ||
102 | enum { | ||
103 | MODE_IEEE80211A, /* IEEE 802.11a */ | ||
104 | MODE_IEEE80211B, /* IEEE 802.11b only */ | ||
105 | MODE_ATHEROS_TURBO, /* Atheros Turbo mode (2x.11a at 5 GHz) */ | ||
106 | MODE_IEEE80211G, /* IEEE 802.11g (and 802.11b compatibility) */ | ||
107 | MODE_ATHEROS_TURBOG, /* Atheros Turbo mode (2x.11g at 2.4 GHz) */ | ||
108 | |||
109 | /* keep last */ | ||
110 | NUM_IEEE80211_MODES | ||
111 | }; | ||
112 | |||
113 | struct ieee80211_hw_mode { | ||
114 | int mode; /* MODE_IEEE80211... */ | ||
115 | int num_channels; /* Number of channels (below) */ | ||
116 | struct ieee80211_channel *channels; /* Array of supported channels */ | ||
117 | int num_rates; /* Number of rates (below) */ | ||
118 | struct ieee80211_rate *rates; /* Array of supported rates */ | ||
119 | |||
120 | struct list_head list; /* Internal, don't touch */ | ||
121 | }; | ||
122 | |||
123 | struct ieee80211_tx_queue_params { | ||
124 | int aifs; /* 0 .. 255; -1 = use default */ | ||
125 | int cw_min; /* 2^n-1: 1, 3, 7, .. , 1023; 0 = use default */ | ||
126 | int cw_max; /* 2^n-1: 1, 3, 7, .. , 1023; 0 = use default */ | ||
127 | int burst_time; /* maximum burst time in 0.1 ms (i.e., 10 = 1 ms); | ||
128 | * 0 = disabled */ | ||
129 | }; | ||
130 | |||
131 | struct ieee80211_tx_queue_stats_data { | ||
132 | unsigned int len; /* num packets in queue */ | ||
133 | unsigned int limit; /* queue len (soft) limit */ | ||
134 | unsigned int count; /* total num frames sent */ | ||
135 | }; | ||
136 | |||
137 | enum { | ||
138 | IEEE80211_TX_QUEUE_DATA0, | ||
139 | IEEE80211_TX_QUEUE_DATA1, | ||
140 | IEEE80211_TX_QUEUE_DATA2, | ||
141 | IEEE80211_TX_QUEUE_DATA3, | ||
142 | IEEE80211_TX_QUEUE_DATA4, | ||
143 | IEEE80211_TX_QUEUE_SVP, | ||
144 | |||
145 | NUM_TX_DATA_QUEUES, | ||
146 | |||
147 | /* due to stupidity in the sub-ioctl userspace interface, the items in | ||
148 | * this struct need to have fixed values. As soon as it is removed, we can | ||
149 | * fix these entries. */ | ||
150 | IEEE80211_TX_QUEUE_AFTER_BEACON = 6, | ||
151 | IEEE80211_TX_QUEUE_BEACON = 7 | ||
152 | }; | ||
153 | |||
154 | struct ieee80211_tx_queue_stats { | ||
155 | struct ieee80211_tx_queue_stats_data data[NUM_TX_DATA_QUEUES]; | ||
156 | }; | ||
157 | |||
158 | struct ieee80211_low_level_stats { | ||
159 | unsigned int dot11ACKFailureCount; | ||
160 | unsigned int dot11RTSFailureCount; | ||
161 | unsigned int dot11FCSErrorCount; | ||
162 | unsigned int dot11RTSSuccessCount; | ||
163 | }; | ||
164 | |||
165 | /* Transmit control fields. This data structure is passed to low-level driver | ||
166 | * with each TX frame. The low-level driver is responsible for configuring | ||
167 | * the hardware to use given values (depending on what is supported). */ | ||
168 | #define HW_KEY_IDX_INVALID -1 | ||
169 | |||
170 | struct ieee80211_tx_control { | ||
171 | int tx_rate; /* Transmit rate, given as the hw specific value for the | ||
172 | * rate (from struct ieee80211_rate) */ | ||
173 | int rts_cts_rate; /* Transmit rate for RTS/CTS frame, given as the hw | ||
174 | * specific value for the rate (from | ||
175 | * struct ieee80211_rate) */ | ||
176 | |||
177 | #define IEEE80211_TXCTL_REQ_TX_STATUS (1<<0)/* request TX status callback for | ||
178 | * this frame */ | ||
179 | #define IEEE80211_TXCTL_DO_NOT_ENCRYPT (1<<1) /* send this frame without | ||
180 | * encryption; e.g., for EAPOL | ||
181 | * frames */ | ||
182 | #define IEEE80211_TXCTL_USE_RTS_CTS (1<<2) /* use RTS-CTS before sending | ||
183 | * frame */ | ||
184 | #define IEEE80211_TXCTL_USE_CTS_PROTECT (1<<3) /* use CTS protection for the | ||
185 | * frame (e.g., for combined | ||
186 | * 802.11g / 802.11b networks) */ | ||
187 | #define IEEE80211_TXCTL_NO_ACK (1<<4) /* tell the low level not to | ||
188 | * wait for an ack */ | ||
189 | #define IEEE80211_TXCTL_RATE_CTRL_PROBE (1<<5) | ||
190 | #define IEEE80211_TXCTL_CLEAR_DST_MASK (1<<6) | ||
191 | #define IEEE80211_TXCTL_REQUEUE (1<<7) | ||
192 | #define IEEE80211_TXCTL_FIRST_FRAGMENT (1<<8) /* this is a first fragment of | ||
193 | * the frame */ | ||
194 | #define IEEE80211_TXCTL_TKIP_NEW_PHASE1_KEY (1<<9) | ||
195 | u32 flags; /* tx control flags defined | ||
196 | * above */ | ||
197 | u8 retry_limit; /* 1 = only first attempt, 2 = one retry, .. */ | ||
198 | u8 power_level; /* per-packet transmit power level, in dBm */ | ||
199 | u8 antenna_sel_tx; /* 0 = default/diversity, 1 = Ant0, 2 = Ant1 */ | ||
200 | s8 key_idx; /* -1 = do not encrypt, >= 0 keyidx from | ||
201 | * hw->set_key() */ | ||
202 | u8 icv_len; /* length of the ICV/MIC field in octets */ | ||
203 | u8 iv_len; /* length of the IV field in octets */ | ||
204 | u8 tkip_key[16]; /* generated phase2/phase1 key for hw TKIP */ | ||
205 | u8 queue; /* hardware queue to use for this frame; | ||
206 | * 0 = highest, hw->queues-1 = lowest */ | ||
207 | u8 sw_retry_attempt; /* number of times hw has tried to | ||
208 | * transmit frame (not incl. hw retries) */ | ||
209 | |||
210 | struct ieee80211_rate *rate; /* internal 80211.o rate */ | ||
211 | struct ieee80211_rate *rts_rate; /* internal 80211.o rate | ||
212 | * for RTS/CTS */ | ||
213 | int alt_retry_rate; /* retry rate for the last retries, given as the | ||
214 | * hw specific value for the rate (from | ||
215 | * struct ieee80211_rate). To be used to limit | ||
216 | * packet dropping when probing higher rates, if hw | ||
217 | * supports multiple retry rates. -1 = not used */ | ||
218 | int type; /* internal */ | ||
219 | int ifindex; /* internal */ | ||
220 | }; | ||
221 | |||
222 | /* Receive status. The low-level driver should provide this information | ||
223 | * (the subset supported by hardware) to the 802.11 code with each received | ||
224 | * frame. */ | ||
225 | struct ieee80211_rx_status { | ||
226 | u64 mactime; | ||
227 | int freq; /* receive frequency in Mhz */ | ||
228 | int channel; | ||
229 | int phymode; | ||
230 | int ssi; | ||
231 | int signal; /* used as qual in statistics reporting */ | ||
232 | int noise; | ||
233 | int antenna; | ||
234 | int rate; | ||
235 | #define RX_FLAG_MMIC_ERROR (1<<0) | ||
236 | #define RX_FLAG_DECRYPTED (1<<1) | ||
237 | #define RX_FLAG_RADIOTAP (1<<2) | ||
238 | int flag; | ||
239 | }; | ||
240 | |||
241 | /* Transmit status. The low-level driver should provide this information | ||
242 | * (the subset supported by hardware) to the 802.11 code for each transmit | ||
243 | * frame. */ | ||
244 | struct ieee80211_tx_status { | ||
245 | /* copied ieee80211_tx_control structure */ | ||
246 | struct ieee80211_tx_control control; | ||
247 | |||
248 | #define IEEE80211_TX_STATUS_TX_FILTERED (1<<0) | ||
249 | #define IEEE80211_TX_STATUS_ACK (1<<1) /* whether the TX frame was ACKed */ | ||
250 | u32 flags; /* tx staus flags defined above */ | ||
251 | |||
252 | int ack_signal; /* measured signal strength of the ACK frame */ | ||
253 | int excessive_retries; | ||
254 | int retry_count; | ||
255 | |||
256 | int queue_length; /* information about TX queue */ | ||
257 | int queue_number; | ||
258 | }; | ||
259 | |||
260 | |||
261 | /** | ||
262 | * struct ieee80211_conf - configuration of the device | ||
263 | * | ||
264 | * This struct indicates how the driver shall configure the hardware. | ||
265 | * | ||
266 | * @radio_enabled: when zero, driver is required to switch off the radio. | ||
267 | */ | ||
268 | struct ieee80211_conf { | ||
269 | int channel; /* IEEE 802.11 channel number */ | ||
270 | int freq; /* MHz */ | ||
271 | int channel_val; /* hw specific value for the channel */ | ||
272 | |||
273 | int phymode; /* MODE_IEEE80211A, .. */ | ||
274 | struct ieee80211_channel *chan; | ||
275 | struct ieee80211_hw_mode *mode; | ||
276 | unsigned int regulatory_domain; | ||
277 | int radio_enabled; | ||
278 | |||
279 | int beacon_int; | ||
280 | |||
281 | #define IEEE80211_CONF_SHORT_SLOT_TIME (1<<0) /* use IEEE 802.11g Short Slot | ||
282 | * Time */ | ||
283 | #define IEEE80211_CONF_SSID_HIDDEN (1<<1) /* do not broadcast the ssid */ | ||
284 | #define IEEE80211_CONF_RADIOTAP (1<<2) /* use radiotap if supported | ||
285 | check this bit at RX time */ | ||
286 | u32 flags; /* configuration flags defined above */ | ||
287 | |||
288 | u8 power_level; /* transmit power limit for current | ||
289 | * regulatory domain; in dBm */ | ||
290 | u8 antenna_max; /* maximum antenna gain */ | ||
291 | short tx_power_reduction; /* in 0.1 dBm */ | ||
292 | |||
293 | /* 0 = default/diversity, 1 = Ant0, 2 = Ant1 */ | ||
294 | u8 antenna_sel_tx; | ||
295 | u8 antenna_sel_rx; | ||
296 | |||
297 | int antenna_def; | ||
298 | int antenna_mode; | ||
299 | |||
300 | /* Following five fields are used for IEEE 802.11H */ | ||
301 | unsigned int radar_detect; | ||
302 | unsigned int spect_mgmt; | ||
303 | /* All following fields are currently unused. */ | ||
304 | unsigned int quiet_duration; /* duration of quiet period */ | ||
305 | unsigned int quiet_offset; /* how far into the beacon is the quiet | ||
306 | * period */ | ||
307 | unsigned int quiet_period; | ||
308 | u8 radar_firpwr_threshold; | ||
309 | u8 radar_rssi_threshold; | ||
310 | u8 pulse_height_threshold; | ||
311 | u8 pulse_rssi_threshold; | ||
312 | u8 pulse_inband_threshold; | ||
313 | }; | ||
314 | |||
315 | /** | ||
316 | * enum ieee80211_if_types - types of 802.11 network interfaces | ||
317 | * | ||
318 | * @IEEE80211_IF_TYPE_AP: interface in AP mode. | ||
319 | * @IEEE80211_IF_TYPE_MGMT: special interface for communication with hostap | ||
320 | * daemon. Drivers should never see this type. | ||
321 | * @IEEE80211_IF_TYPE_STA: interface in STA (client) mode. | ||
322 | * @IEEE80211_IF_TYPE_IBSS: interface in IBSS (ad-hoc) mode. | ||
323 | * @IEEE80211_IF_TYPE_MNTR: interface in monitor (rfmon) mode. | ||
324 | * @IEEE80211_IF_TYPE_WDS: interface in WDS mode. | ||
325 | * @IEEE80211_IF_TYPE_VLAN: not used. | ||
326 | */ | ||
327 | enum ieee80211_if_types { | ||
328 | IEEE80211_IF_TYPE_AP = 0x00000000, | ||
329 | IEEE80211_IF_TYPE_MGMT = 0x00000001, | ||
330 | IEEE80211_IF_TYPE_STA = 0x00000002, | ||
331 | IEEE80211_IF_TYPE_IBSS = 0x00000003, | ||
332 | IEEE80211_IF_TYPE_MNTR = 0x00000004, | ||
333 | IEEE80211_IF_TYPE_WDS = 0x5A580211, | ||
334 | IEEE80211_IF_TYPE_VLAN = 0x00080211, | ||
335 | }; | ||
336 | |||
337 | /** | ||
338 | * struct ieee80211_if_init_conf - initial configuration of an interface | ||
339 | * | ||
340 | * @if_id: internal interface ID. This number has no particular meaning to | ||
341 | * drivers and the only allowed usage is to pass it to | ||
342 | * ieee80211_beacon_get() and ieee80211_get_buffered_bc() functions. | ||
343 | * This field is not valid for monitor interfaces | ||
344 | * (interfaces of %IEEE80211_IF_TYPE_MNTR type). | ||
345 | * @type: one of &enum ieee80211_if_types constants. Determines the type of | ||
346 | * added/removed interface. | ||
347 | * @mac_addr: pointer to MAC address of the interface. This pointer is valid | ||
348 | * until the interface is removed (i.e. it cannot be used after | ||
349 | * remove_interface() callback was called for this interface). | ||
350 | * | ||
351 | * This structure is used in add_interface() and remove_interface() | ||
352 | * callbacks of &struct ieee80211_hw. | ||
353 | */ | ||
354 | struct ieee80211_if_init_conf { | ||
355 | int if_id; | ||
356 | int type; | ||
357 | void *mac_addr; | ||
358 | }; | ||
359 | |||
360 | /** | ||
361 | * struct ieee80211_if_conf - configuration of an interface | ||
362 | * | ||
363 | * @type: type of the interface. This is always the same as was specified in | ||
364 | * &struct ieee80211_if_init_conf. The type of an interface never changes | ||
365 | * during the life of the interface; this field is present only for | ||
366 | * convenience. | ||
367 | * @bssid: BSSID of the network we are associated to/creating. | ||
368 | * @ssid: used (together with @ssid_len) by drivers for hardware that | ||
369 | * generate beacons independently. The pointer is valid only during the | ||
370 | * config_interface() call, so copy the value somewhere if you need | ||
371 | * it. | ||
372 | * @ssid_len: length of the @ssid field. | ||
373 | * @generic_elem: used (together with @generic_elem_len) by drivers for | ||
374 | * hardware that generate beacons independently. The pointer is valid | ||
375 | * only during the config_interface() call, so copy the value somewhere | ||
376 | * if you need it. | ||
377 | * @generic_elem_len: length of the generic element. | ||
378 | * @beacon: beacon template. Valid only if @host_gen_beacon_template in | ||
379 | * &struct ieee80211_hw is set. The driver is responsible of freeing | ||
380 | * the sk_buff. | ||
381 | * @beacon_control: tx_control for the beacon template, this field is only | ||
382 | * valid when the @beacon field was set. | ||
383 | * | ||
384 | * This structure is passed to the config_interface() callback of | ||
385 | * &struct ieee80211_hw. | ||
386 | */ | ||
387 | struct ieee80211_if_conf { | ||
388 | int type; | ||
389 | u8 *bssid; | ||
390 | u8 *ssid; | ||
391 | size_t ssid_len; | ||
392 | u8 *generic_elem; | ||
393 | size_t generic_elem_len; | ||
394 | struct sk_buff *beacon; | ||
395 | struct ieee80211_tx_control *beacon_control; | ||
396 | }; | ||
397 | |||
398 | typedef enum { ALG_NONE, ALG_WEP, ALG_TKIP, ALG_CCMP, ALG_NULL } | ||
399 | ieee80211_key_alg; | ||
400 | |||
401 | |||
402 | struct ieee80211_key_conf { | ||
403 | |||
404 | int hw_key_idx; /* filled + used by low-level driver */ | ||
405 | ieee80211_key_alg alg; | ||
406 | int keylen; | ||
407 | |||
408 | #define IEEE80211_KEY_FORCE_SW_ENCRYPT (1<<0) /* to be cleared by low-level | ||
409 | driver */ | ||
410 | #define IEEE80211_KEY_DEFAULT_TX_KEY (1<<1) /* This key is the new default TX | ||
411 | key (used only for broadcast | ||
412 | keys). */ | ||
413 | #define IEEE80211_KEY_DEFAULT_WEP_ONLY (1<<2) /* static WEP is the only | ||
414 | configured security policy; | ||
415 | this allows some low-level | ||
416 | drivers to determine when | ||
417 | hwaccel can be used */ | ||
418 | u32 flags; /* key configuration flags defined above */ | ||
419 | |||
420 | s8 keyidx; /* WEP key index */ | ||
421 | u8 key[0]; | ||
422 | }; | ||
423 | |||
424 | #define IEEE80211_SEQ_COUNTER_RX 0 | ||
425 | #define IEEE80211_SEQ_COUNTER_TX 1 | ||
426 | |||
427 | typedef enum { | ||
428 | SET_KEY, DISABLE_KEY, REMOVE_ALL_KEYS, | ||
429 | } set_key_cmd; | ||
430 | |||
431 | /* This is driver-visible part of the per-hw state the stack keeps. */ | ||
432 | struct ieee80211_hw { | ||
433 | /* points to the cfg80211 wiphy for this piece. Note | ||
434 | * that you must fill in the perm_addr and dev fields | ||
435 | * of this structure, use the macros provided below. */ | ||
436 | struct wiphy *wiphy; | ||
437 | |||
438 | /* assigned by mac80211, don't write */ | ||
439 | struct ieee80211_conf conf; | ||
440 | |||
441 | /* Single thread workqueue available for driver use | ||
442 | * Allocated by mac80211 on registration */ | ||
443 | struct workqueue_struct *workqueue; | ||
444 | |||
445 | /* Pointer to the private area that was | ||
446 | * allocated with this struct for you. */ | ||
447 | void *priv; | ||
448 | |||
449 | /* The rest is information about your hardware */ | ||
450 | |||
451 | /* TODO: frame_type 802.11/802.3, sw_encryption requirements */ | ||
452 | |||
453 | /* Some wireless LAN chipsets generate beacons in the hardware/firmware | ||
454 | * and others rely on host generated beacons. This option is used to | ||
455 | * configure the upper layer IEEE 802.11 module to generate beacons. | ||
456 | * The low-level driver can use ieee80211_beacon_get() to fetch the | ||
457 | * next beacon frame. */ | ||
458 | #define IEEE80211_HW_HOST_GEN_BEACON (1<<0) | ||
459 | |||
460 | /* The device needs to be supplied with a beacon template only. */ | ||
461 | #define IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE (1<<1) | ||
462 | |||
463 | /* Some devices handle decryption internally and do not | ||
464 | * indicate whether the frame was encrypted (unencrypted frames | ||
465 | * will be dropped by the hardware, unless specifically allowed | ||
466 | * through) */ | ||
467 | #define IEEE80211_HW_DEVICE_HIDES_WEP (1<<2) | ||
468 | |||
469 | /* Whether RX frames passed to ieee80211_rx() include FCS in the end */ | ||
470 | #define IEEE80211_HW_RX_INCLUDES_FCS (1<<3) | ||
471 | |||
472 | /* Some wireless LAN chipsets buffer broadcast/multicast frames for | ||
473 | * power saving stations in the hardware/firmware and others rely on | ||
474 | * the host system for such buffering. This option is used to | ||
475 | * configure the IEEE 802.11 upper layer to buffer broadcast/multicast | ||
476 | * frames when there are power saving stations so that low-level driver | ||
477 | * can fetch them with ieee80211_get_buffered_bc(). */ | ||
478 | #define IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING (1<<4) | ||
479 | |||
480 | #define IEEE80211_HW_WEP_INCLUDE_IV (1<<5) | ||
481 | |||
482 | /* will data nullfunc frames get proper TX status callback */ | ||
483 | #define IEEE80211_HW_DATA_NULLFUNC_ACK (1<<6) | ||
484 | |||
485 | /* Force software encryption for TKIP packets if WMM is enabled. */ | ||
486 | #define IEEE80211_HW_NO_TKIP_WMM_HWACCEL (1<<7) | ||
487 | |||
488 | /* Some devices handle Michael MIC internally and do not include MIC in | ||
489 | * the received packets passed up. device_strips_mic must be set | ||
490 | * for such devices. The 'encryption' frame control bit is expected to | ||
491 | * be still set in the IEEE 802.11 header with this option unlike with | ||
492 | * the device_hides_wep configuration option. | ||
493 | */ | ||
494 | #define IEEE80211_HW_DEVICE_STRIPS_MIC (1<<8) | ||
495 | |||
496 | /* Device is capable of performing full monitor mode even during | ||
497 | * normal operation. */ | ||
498 | #define IEEE80211_HW_MONITOR_DURING_OPER (1<<9) | ||
499 | |||
500 | /* Device does not need BSSID filter set to broadcast in order to | ||
501 | * receive all probe responses while scanning */ | ||
502 | #define IEEE80211_HW_NO_PROBE_FILTERING (1<<10) | ||
503 | |||
504 | /* Channels are already configured to the default regulatory domain | ||
505 | * specified in the device's EEPROM */ | ||
506 | #define IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED (1<<11) | ||
507 | |||
508 | /* calculate Michael MIC for an MSDU when doing hwcrypto */ | ||
509 | #define IEEE80211_HW_TKIP_INCLUDE_MMIC (1<<12) | ||
510 | /* Do TKIP phase1 key mixing in stack to support cards only do | ||
511 | * phase2 key mixing when doing hwcrypto */ | ||
512 | #define IEEE80211_HW_TKIP_REQ_PHASE1_KEY (1<<13) | ||
513 | /* Do TKIP phase1 and phase2 key mixing in stack and send the generated | ||
514 | * per-packet RC4 key with each TX frame when doing hwcrypto */ | ||
515 | #define IEEE80211_HW_TKIP_REQ_PHASE2_KEY (1<<14) | ||
516 | |||
517 | u32 flags; /* hardware flags defined above */ | ||
518 | |||
519 | /* Set to the size of a needed device specific skb headroom for TX skbs. */ | ||
520 | unsigned int extra_tx_headroom; | ||
521 | |||
522 | /* This is the time in us to change channels | ||
523 | */ | ||
524 | int channel_change_time; | ||
525 | /* Maximum values for various statistics. | ||
526 | * Leave at 0 to indicate no support. Use negative numbers for dBm. */ | ||
527 | s8 max_rssi; | ||
528 | s8 max_signal; | ||
529 | s8 max_noise; | ||
530 | |||
531 | /* Number of available hardware TX queues for data packets. | ||
532 | * WMM requires at least four queues. */ | ||
533 | int queues; | ||
534 | }; | ||
535 | |||
536 | static inline void SET_IEEE80211_DEV(struct ieee80211_hw *hw, struct device *dev) | ||
537 | { | ||
538 | set_wiphy_dev(hw->wiphy, dev); | ||
539 | } | ||
540 | |||
541 | static inline void SET_IEEE80211_PERM_ADDR(struct ieee80211_hw *hw, u8 *addr) | ||
542 | { | ||
543 | memcpy(hw->wiphy->perm_addr, addr, ETH_ALEN); | ||
544 | } | ||
545 | |||
546 | /* Configuration block used by the low-level driver to tell the 802.11 code | ||
547 | * about supported hardware features and to pass function pointers to callback | ||
548 | * functions. */ | ||
549 | struct ieee80211_ops { | ||
550 | /* Handler that 802.11 module calls for each transmitted frame. | ||
551 | * skb contains the buffer starting from the IEEE 802.11 header. | ||
552 | * The low-level driver should send the frame out based on | ||
553 | * configuration in the TX control data. | ||
554 | * Must be atomic. */ | ||
555 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb, | ||
556 | struct ieee80211_tx_control *control); | ||
557 | |||
558 | /* Handler for performing hardware reset. */ | ||
559 | int (*reset)(struct ieee80211_hw *hw); | ||
560 | |||
561 | /* Handler that is called when any netdevice attached to the hardware | ||
562 | * device is set UP for the first time. This can be used, e.g., to | ||
563 | * enable interrupts and beacon sending. */ | ||
564 | int (*open)(struct ieee80211_hw *hw); | ||
565 | |||
566 | /* Handler that is called when the last netdevice attached to the | ||
567 | * hardware device is set DOWN. This can be used, e.g., to disable | ||
568 | * interrupts and beacon sending. */ | ||
569 | int (*stop)(struct ieee80211_hw *hw); | ||
570 | |||
571 | /* Handler for asking a driver if a new interface can be added (or, | ||
572 | * more exactly, set UP). If the handler returns zero, the interface | ||
573 | * is added. Driver should perform any initialization it needs prior | ||
574 | * to returning zero. By returning non-zero addition of the interface | ||
575 | * is inhibited. Unless monitor_during_oper is set, it is guaranteed | ||
576 | * that monitor interfaces and normal interfaces are mutually | ||
577 | * exclusive. The open() handler is called after add_interface() | ||
578 | * if this is the first device added. At least one of the open() | ||
579 | * open() and add_interface() callbacks has to be assigned. If | ||
580 | * add_interface() is NULL, one STA interface is permitted only. */ | ||
581 | int (*add_interface)(struct ieee80211_hw *hw, | ||
582 | struct ieee80211_if_init_conf *conf); | ||
583 | |||
584 | /* Notify a driver that an interface is going down. The stop() handler | ||
585 | * is called prior to this if this is a last interface. */ | ||
586 | void (*remove_interface)(struct ieee80211_hw *hw, | ||
587 | struct ieee80211_if_init_conf *conf); | ||
588 | |||
589 | /* Handler for configuration requests. IEEE 802.11 code calls this | ||
590 | * function to change hardware configuration, e.g., channel. */ | ||
591 | int (*config)(struct ieee80211_hw *hw, struct ieee80211_conf *conf); | ||
592 | |||
593 | /* Handler for configuration requests related to interfaces (e.g. | ||
594 | * BSSID). */ | ||
595 | int (*config_interface)(struct ieee80211_hw *hw, | ||
596 | int if_id, struct ieee80211_if_conf *conf); | ||
597 | |||
598 | /* ieee80211 drivers do not have access to the &struct net_device | ||
599 | * that is (are) connected with their device. Hence (and because | ||
600 | * we need to combine the multicast lists and flags for multiple | ||
601 | * virtual interfaces), they cannot assign set_multicast_list. | ||
602 | * The parameters here replace dev->flags and dev->mc_count, | ||
603 | * dev->mc_list is replaced by calling ieee80211_get_mc_list_item. | ||
604 | * Must be atomic. */ | ||
605 | void (*set_multicast_list)(struct ieee80211_hw *hw, | ||
606 | unsigned short flags, int mc_count); | ||
607 | |||
608 | /* Set TIM bit handler. If the hardware/firmware takes care of beacon | ||
609 | * generation, IEEE 802.11 code uses this function to tell the | ||
610 | * low-level to set (or clear if set==0) TIM bit for the given aid. If | ||
611 | * host system is used to generate beacons, this handler is not used | ||
612 | * and low-level driver should set it to NULL. | ||
613 | * Must be atomic. */ | ||
614 | int (*set_tim)(struct ieee80211_hw *hw, int aid, int set); | ||
615 | |||
616 | /* Set encryption key. IEEE 802.11 module calls this function to set | ||
617 | * encryption keys. addr is ff:ff:ff:ff:ff:ff for default keys and | ||
618 | * station hwaddr for individual keys. aid of the station is given | ||
619 | * to help low-level driver in selecting which key->hw_key_idx to use | ||
620 | * for this key. TX control data will use the hw_key_idx selected by | ||
621 | * the low-level driver. | ||
622 | * Must be atomic. */ | ||
623 | int (*set_key)(struct ieee80211_hw *hw, set_key_cmd cmd, | ||
624 | u8 *addr, struct ieee80211_key_conf *key, int aid); | ||
625 | |||
626 | /* Set TX key index for default/broadcast keys. This is needed in cases | ||
627 | * where wlan card is doing full WEP/TKIP encapsulation (wep_include_iv | ||
628 | * is not set), in other cases, this function pointer can be set to | ||
629 | * NULL since the IEEE 802. 11 module takes care of selecting the key | ||
630 | * index for each TX frame. */ | ||
631 | int (*set_key_idx)(struct ieee80211_hw *hw, int idx); | ||
632 | |||
633 | /* Enable/disable IEEE 802.1X. This item requests wlan card to pass | ||
634 | * unencrypted EAPOL-Key frames even when encryption is configured. | ||
635 | * If the wlan card does not require such a configuration, this | ||
636 | * function pointer can be set to NULL. */ | ||
637 | int (*set_ieee8021x)(struct ieee80211_hw *hw, int use_ieee8021x); | ||
638 | |||
639 | /* Set port authorization state (IEEE 802.1X PAE) to be authorized | ||
640 | * (authorized=1) or unauthorized (authorized=0). This function can be | ||
641 | * used if the wlan hardware or low-level driver implements PAE. | ||
642 | * 80211.o module will anyway filter frames based on authorization | ||
643 | * state, so this function pointer can be NULL if low-level driver does | ||
644 | * not require event notification about port state changes. | ||
645 | * Currently unused. */ | ||
646 | int (*set_port_auth)(struct ieee80211_hw *hw, u8 *addr, | ||
647 | int authorized); | ||
648 | |||
649 | /* Ask the hardware to service the scan request, no need to start | ||
650 | * the scan state machine in stack. */ | ||
651 | int (*hw_scan)(struct ieee80211_hw *hw, u8 *ssid, size_t len); | ||
652 | |||
653 | /* return low-level statistics */ | ||
654 | int (*get_stats)(struct ieee80211_hw *hw, | ||
655 | struct ieee80211_low_level_stats *stats); | ||
656 | |||
657 | /* For devices that generate their own beacons and probe response | ||
658 | * or association responses this updates the state of privacy_invoked | ||
659 | * returns 0 for success or an error number */ | ||
660 | int (*set_privacy_invoked)(struct ieee80211_hw *hw, | ||
661 | int privacy_invoked); | ||
662 | |||
663 | /* For devices that have internal sequence counters, allow 802.11 | ||
664 | * code to access the current value of a counter */ | ||
665 | int (*get_sequence_counter)(struct ieee80211_hw *hw, | ||
666 | u8* addr, u8 keyidx, u8 txrx, | ||
667 | u32* iv32, u16* iv16); | ||
668 | |||
669 | /* Configuration of RTS threshold (if device needs it) */ | ||
670 | int (*set_rts_threshold)(struct ieee80211_hw *hw, u32 value); | ||
671 | |||
672 | /* Configuration of fragmentation threshold. | ||
673 | * Assign this if the device does fragmentation by itself, | ||
674 | * if this method is assigned then the stack will not do | ||
675 | * fragmentation. */ | ||
676 | int (*set_frag_threshold)(struct ieee80211_hw *hw, u32 value); | ||
677 | |||
678 | /* Configuration of retry limits (if device needs it) */ | ||
679 | int (*set_retry_limit)(struct ieee80211_hw *hw, | ||
680 | u32 short_retry, u32 long_retr); | ||
681 | |||
682 | /* Number of STAs in STA table notification (NULL = disabled). | ||
683 | * Must be atomic. */ | ||
684 | void (*sta_table_notification)(struct ieee80211_hw *hw, | ||
685 | int num_sta); | ||
686 | |||
687 | /* Configure TX queue parameters (EDCF (aifs, cw_min, cw_max), | ||
688 | * bursting) for a hardware TX queue. | ||
689 | * queue = IEEE80211_TX_QUEUE_*. | ||
690 | * Must be atomic. */ | ||
691 | int (*conf_tx)(struct ieee80211_hw *hw, int queue, | ||
692 | const struct ieee80211_tx_queue_params *params); | ||
693 | |||
694 | /* Get statistics of the current TX queue status. This is used to get | ||
695 | * number of currently queued packets (queue length), maximum queue | ||
696 | * size (limit), and total number of packets sent using each TX queue | ||
697 | * (count). | ||
698 | * Currently unused. */ | ||
699 | int (*get_tx_stats)(struct ieee80211_hw *hw, | ||
700 | struct ieee80211_tx_queue_stats *stats); | ||
701 | |||
702 | /* Get the current TSF timer value from firmware/hardware. Currently, | ||
703 | * this is only used for IBSS mode debugging and, as such, is not a | ||
704 | * required function. | ||
705 | * Must be atomic. */ | ||
706 | u64 (*get_tsf)(struct ieee80211_hw *hw); | ||
707 | |||
708 | /* Reset the TSF timer and allow firmware/hardware to synchronize with | ||
709 | * other STAs in the IBSS. This is only used in IBSS mode. This | ||
710 | * function is optional if the firmware/hardware takes full care of | ||
711 | * TSF synchronization. */ | ||
712 | void (*reset_tsf)(struct ieee80211_hw *hw); | ||
713 | |||
714 | /* Setup beacon data for IBSS beacons. Unlike access point (Master), | ||
715 | * IBSS uses a fixed beacon frame which is configured using this | ||
716 | * function. This handler is required only for IBSS mode. */ | ||
717 | int (*beacon_update)(struct ieee80211_hw *hw, | ||
718 | struct sk_buff *skb, | ||
719 | struct ieee80211_tx_control *control); | ||
720 | |||
721 | /* Determine whether the last IBSS beacon was sent by us. This is | ||
722 | * needed only for IBSS mode and the result of this function is used to | ||
723 | * determine whether to reply to Probe Requests. */ | ||
724 | int (*tx_last_beacon)(struct ieee80211_hw *hw); | ||
725 | }; | ||
726 | |||
727 | /* Allocate a new hardware device. This must be called once for each | ||
728 | * hardware device. The returned pointer must be used to refer to this | ||
729 | * device when calling other functions. 802.11 code allocates a private data | ||
730 | * area for the low-level driver. The size of this area is given as | ||
731 | * priv_data_len. | ||
732 | */ | ||
733 | struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len, | ||
734 | const struct ieee80211_ops *ops); | ||
735 | |||
736 | /* Register hardware device to the IEEE 802.11 code and kernel. Low-level | ||
737 | * drivers must call this function before using any other IEEE 802.11 | ||
738 | * function except ieee80211_register_hwmode. */ | ||
739 | int ieee80211_register_hw(struct ieee80211_hw *hw); | ||
740 | |||
741 | /* driver can use this and ieee80211_get_rx_led_name to get the | ||
742 | * name of the registered LEDs after ieee80211_register_hw | ||
743 | * was called. | ||
744 | * This is useful to set the default trigger on the LED class | ||
745 | * device that your driver should export for each LED the device | ||
746 | * has, that way the default behaviour will be as expected but | ||
747 | * the user can still change it/turn off the LED etc. | ||
748 | */ | ||
749 | #ifdef CONFIG_MAC80211_LEDS | ||
750 | extern char *__ieee80211_get_tx_led_name(struct ieee80211_hw *hw); | ||
751 | extern char *__ieee80211_get_rx_led_name(struct ieee80211_hw *hw); | ||
752 | #endif | ||
753 | static inline char *ieee80211_get_tx_led_name(struct ieee80211_hw *hw) | ||
754 | { | ||
755 | #ifdef CONFIG_MAC80211_LEDS | ||
756 | return __ieee80211_get_tx_led_name(hw); | ||
757 | #else | ||
758 | return NULL; | ||
759 | #endif | ||
760 | } | ||
761 | |||
762 | static inline char *ieee80211_get_rx_led_name(struct ieee80211_hw *hw) | ||
763 | { | ||
764 | #ifdef CONFIG_MAC80211_LEDS | ||
765 | return __ieee80211_get_rx_led_name(hw); | ||
766 | #else | ||
767 | return NULL; | ||
768 | #endif | ||
769 | } | ||
770 | |||
771 | /* Register a new hardware PHYMODE capability to the stack. */ | ||
772 | int ieee80211_register_hwmode(struct ieee80211_hw *hw, | ||
773 | struct ieee80211_hw_mode *mode); | ||
774 | |||
775 | /* Unregister a hardware device. This function instructs 802.11 code to free | ||
776 | * allocated resources and unregister netdevices from the kernel. */ | ||
777 | void ieee80211_unregister_hw(struct ieee80211_hw *hw); | ||
778 | |||
779 | /* Free everything that was allocated including private data of a driver. */ | ||
780 | void ieee80211_free_hw(struct ieee80211_hw *hw); | ||
781 | |||
782 | /* Receive frame callback function. The low-level driver uses this function to | ||
783 | * send received frames to the IEEE 802.11 code. Receive buffer (skb) must | ||
784 | * start with IEEE 802.11 header. */ | ||
785 | void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, | ||
786 | struct ieee80211_rx_status *status); | ||
787 | void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, | ||
788 | struct sk_buff *skb, | ||
789 | struct ieee80211_rx_status *status); | ||
790 | |||
791 | /* Transmit status callback function. The low-level driver must call this | ||
792 | * function to report transmit status for all the TX frames that had | ||
793 | * req_tx_status set in the transmit control fields. In addition, this should | ||
794 | * be called at least for all unicast frames to provide information for TX rate | ||
795 | * control algorithm. In order to maintain all statistics, this function is | ||
796 | * recommended to be called after each frame, including multicast/broadcast, is | ||
797 | * sent. */ | ||
798 | void ieee80211_tx_status(struct ieee80211_hw *hw, | ||
799 | struct sk_buff *skb, | ||
800 | struct ieee80211_tx_status *status); | ||
801 | void ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw, | ||
802 | struct sk_buff *skb, | ||
803 | struct ieee80211_tx_status *status); | ||
804 | |||
805 | /** | ||
806 | * ieee80211_beacon_get - beacon generation function | ||
807 | * @hw: pointer obtained from ieee80211_alloc_hw(). | ||
808 | * @if_id: interface ID from &struct ieee80211_if_init_conf. | ||
809 | * @control: will be filled with information needed to send this beacon. | ||
810 | * | ||
811 | * If the beacon frames are generated by the host system (i.e., not in | ||
812 | * hardware/firmware), the low-level driver uses this function to receive | ||
813 | * the next beacon frame from the 802.11 code. The low-level is responsible | ||
814 | * for calling this function before beacon data is needed (e.g., based on | ||
815 | * hardware interrupt). Returned skb is used only once and low-level driver | ||
816 | * is responsible of freeing it. | ||
817 | */ | ||
818 | struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw, | ||
819 | int if_id, | ||
820 | struct ieee80211_tx_control *control); | ||
821 | |||
822 | /** | ||
823 | * ieee80211_rts_get - RTS frame generation function | ||
824 | * @hw: pointer obtained from ieee80211_alloc_hw(). | ||
825 | * @frame: pointer to the frame that is going to be protected by the RTS. | ||
826 | * @frame_len: the frame length (in octets). | ||
827 | * @frame_txctl: &struct ieee80211_tx_control of the frame. | ||
828 | * @rts: The buffer where to store the RTS frame. | ||
829 | * | ||
830 | * If the RTS frames are generated by the host system (i.e., not in | ||
831 | * hardware/firmware), the low-level driver uses this function to receive | ||
832 | * the next RTS frame from the 802.11 code. The low-level is responsible | ||
833 | * for calling this function before and RTS frame is needed. | ||
834 | */ | ||
835 | void ieee80211_rts_get(struct ieee80211_hw *hw, | ||
836 | const void *frame, size_t frame_len, | ||
837 | const struct ieee80211_tx_control *frame_txctl, | ||
838 | struct ieee80211_rts *rts); | ||
839 | |||
840 | /** | ||
841 | * ieee80211_rts_duration - Get the duration field for an RTS frame | ||
842 | * @hw: pointer obtained from ieee80211_alloc_hw(). | ||
843 | * @frame_len: the length of the frame that is going to be protected by the RTS. | ||
844 | * @frame_txctl: &struct ieee80211_tx_control of the frame. | ||
845 | * | ||
846 | * If the RTS is generated in firmware, but the host system must provide | ||
847 | * the duration field, the low-level driver uses this function to receive | ||
848 | * the duration field value in little-endian byteorder. | ||
849 | */ | ||
850 | __le16 ieee80211_rts_duration(struct ieee80211_hw *hw, | ||
851 | size_t frame_len, | ||
852 | const struct ieee80211_tx_control *frame_txctl); | ||
853 | |||
854 | /** | ||
855 | * ieee80211_ctstoself_get - CTS-to-self frame generation function | ||
856 | * @hw: pointer obtained from ieee80211_alloc_hw(). | ||
857 | * @frame: pointer to the frame that is going to be protected by the CTS-to-self. | ||
858 | * @frame_len: the frame length (in octets). | ||
859 | * @frame_txctl: &struct ieee80211_tx_control of the frame. | ||
860 | * @cts: The buffer where to store the CTS-to-self frame. | ||
861 | * | ||
862 | * If the CTS-to-self frames are generated by the host system (i.e., not in | ||
863 | * hardware/firmware), the low-level driver uses this function to receive | ||
864 | * the next CTS-to-self frame from the 802.11 code. The low-level is responsible | ||
865 | * for calling this function before and CTS-to-self frame is needed. | ||
866 | */ | ||
867 | void ieee80211_ctstoself_get(struct ieee80211_hw *hw, | ||
868 | const void *frame, size_t frame_len, | ||
869 | const struct ieee80211_tx_control *frame_txctl, | ||
870 | struct ieee80211_cts *cts); | ||
871 | |||
872 | /** | ||
873 | * ieee80211_ctstoself_duration - Get the duration field for a CTS-to-self frame | ||
874 | * @hw: pointer obtained from ieee80211_alloc_hw(). | ||
875 | * @frame_len: the length of the frame that is going to be protected by the CTS-to-self. | ||
876 | * @frame_txctl: &struct ieee80211_tx_control of the frame. | ||
877 | * | ||
878 | * If the CTS-to-self is generated in firmware, but the host system must provide | ||
879 | * the duration field, the low-level driver uses this function to receive | ||
880 | * the duration field value in little-endian byteorder. | ||
881 | */ | ||
882 | __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw, | ||
883 | size_t frame_len, | ||
884 | const struct ieee80211_tx_control *frame_txctl); | ||
885 | |||
886 | /** | ||
887 | * ieee80211_generic_frame_duration - Calculate the duration field for a frame | ||
888 | * @hw: pointer obtained from ieee80211_alloc_hw(). | ||
889 | * @frame_len: the length of the frame. | ||
890 | * @rate: the rate (in 100kbps) at which the frame is going to be transmitted. | ||
891 | * | ||
892 | * Calculate the duration field of some generic frame, given its | ||
893 | * length and transmission rate (in 100kbps). | ||
894 | */ | ||
895 | __le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw, | ||
896 | size_t frame_len, | ||
897 | int rate); | ||
898 | |||
899 | /** | ||
900 | * ieee80211_get_buffered_bc - accessing buffered broadcast and multicast frames | ||
901 | * @hw: pointer as obtained from ieee80211_alloc_hw(). | ||
902 | * @if_id: interface ID from &struct ieee80211_if_init_conf. | ||
903 | * @control: will be filled with information needed to send returned frame. | ||
904 | * | ||
905 | * Function for accessing buffered broadcast and multicast frames. If | ||
906 | * hardware/firmware does not implement buffering of broadcast/multicast | ||
907 | * frames when power saving is used, 802.11 code buffers them in the host | ||
908 | * memory. The low-level driver uses this function to fetch next buffered | ||
909 | * frame. In most cases, this is used when generating beacon frame. This | ||
910 | * function returns a pointer to the next buffered skb or NULL if no more | ||
911 | * buffered frames are available. | ||
912 | * | ||
913 | * Note: buffered frames are returned only after DTIM beacon frame was | ||
914 | * generated with ieee80211_beacon_get() and the low-level driver must thus | ||
915 | * call ieee80211_beacon_get() first. ieee80211_get_buffered_bc() returns | ||
916 | * NULL if the previous generated beacon was not DTIM, so the low-level driver | ||
917 | * does not need to check for DTIM beacons separately and should be able to | ||
918 | * use common code for all beacons. | ||
919 | */ | ||
920 | struct sk_buff * | ||
921 | ieee80211_get_buffered_bc(struct ieee80211_hw *hw, int if_id, | ||
922 | struct ieee80211_tx_control *control); | ||
923 | |||
924 | /* Low level drivers that have their own MLME and MAC indicate | ||
925 | * the aid for an associating station with this call */ | ||
926 | int ieee80211_set_aid_for_sta(struct ieee80211_hw *hw, | ||
927 | u8 *peer_address, u16 aid); | ||
928 | |||
929 | |||
930 | /* Given an sk_buff with a raw 802.11 header at the data pointer this function | ||
931 | * returns the 802.11 header length in bytes (not including encryption | ||
932 | * headers). If the data in the sk_buff is too short to contain a valid 802.11 | ||
933 | * header the function returns 0. | ||
934 | */ | ||
935 | int ieee80211_get_hdrlen_from_skb(const struct sk_buff *skb); | ||
936 | |||
937 | /* Like ieee80211_get_hdrlen_from_skb() but takes a FC in CPU order. */ | ||
938 | int ieee80211_get_hdrlen(u16 fc); | ||
939 | |||
940 | /** | ||
941 | * ieee80211_wake_queue - wake specific queue | ||
942 | * @hw: pointer as obtained from ieee80211_alloc_hw(). | ||
943 | * @queue: queue number (counted from zero). | ||
944 | * | ||
945 | * Drivers should use this function instead of netif_wake_queue. | ||
946 | */ | ||
947 | void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue); | ||
948 | |||
949 | /** | ||
950 | * ieee80211_stop_queue - stop specific queue | ||
951 | * @hw: pointer as obtained from ieee80211_alloc_hw(). | ||
952 | * @queue: queue number (counted from zero). | ||
953 | * | ||
954 | * Drivers should use this function instead of netif_stop_queue. | ||
955 | */ | ||
956 | void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue); | ||
957 | |||
958 | /** | ||
959 | * ieee80211_start_queues - start all queues | ||
960 | * @hw: pointer to as obtained from ieee80211_alloc_hw(). | ||
961 | * | ||
962 | * Drivers should use this function instead of netif_start_queue. | ||
963 | */ | ||
964 | void ieee80211_start_queues(struct ieee80211_hw *hw); | ||
965 | |||
966 | /** | ||
967 | * ieee80211_stop_queues - stop all queues | ||
968 | * @hw: pointer as obtained from ieee80211_alloc_hw(). | ||
969 | * | ||
970 | * Drivers should use this function instead of netif_stop_queue. | ||
971 | */ | ||
972 | void ieee80211_stop_queues(struct ieee80211_hw *hw); | ||
973 | |||
974 | /** | ||
975 | * ieee80211_wake_queues - wake all queues | ||
976 | * @hw: pointer as obtained from ieee80211_alloc_hw(). | ||
977 | * | ||
978 | * Drivers should use this function instead of netif_wake_queue. | ||
979 | */ | ||
980 | void ieee80211_wake_queues(struct ieee80211_hw *hw); | ||
981 | |||
982 | /** | ||
983 | * ieee80211_get_mc_list_item - iteration over items in multicast list | ||
984 | * @hw: pointer as obtained from ieee80211_alloc_hw(). | ||
985 | * @prev: value returned by previous call to ieee80211_get_mc_list_item() or | ||
986 | * NULL to start a new iteration. | ||
987 | * @ptr: pointer to buffer of void * type for internal usage of | ||
988 | * ieee80211_get_mc_list_item(). | ||
989 | * | ||
990 | * Iterates over items in multicast list of given device. To get the first | ||
991 | * item, pass NULL in @prev and in *@ptr. In subsequent calls, pass the | ||
992 | * value returned by previous call in @prev. Don't alter *@ptr during | ||
993 | * iteration. When there are no more items, NULL is returned. | ||
994 | */ | ||
995 | struct dev_mc_list * | ||
996 | ieee80211_get_mc_list_item(struct ieee80211_hw *hw, | ||
997 | struct dev_mc_list *prev, | ||
998 | void **ptr); | ||
999 | |||
1000 | /* called by driver to notify scan status completed */ | ||
1001 | void ieee80211_scan_completed(struct ieee80211_hw *hw); | ||
1002 | |||
1003 | /* Function to indicate Radar Detection. The low level driver must call this | ||
1004 | * function to indicate the presence of radar in the current channel. | ||
1005 | * Additionally the radar type also could be sent */ | ||
1006 | int ieee80211_radar_status(struct ieee80211_hw *hw, int channel, | ||
1007 | int radar, int radar_type); | ||
1008 | |||
1009 | /* return a pointer to the source address (SA) */ | ||
1010 | static inline u8 *ieee80211_get_SA(struct ieee80211_hdr *hdr) | ||
1011 | { | ||
1012 | u8 *raw = (u8 *) hdr; | ||
1013 | u8 tofrom = (*(raw+1)) & 3; /* get the TODS and FROMDS bits */ | ||
1014 | |||
1015 | switch (tofrom) { | ||
1016 | case 2: | ||
1017 | return hdr->addr3; | ||
1018 | case 3: | ||
1019 | return hdr->addr4; | ||
1020 | } | ||
1021 | return hdr->addr2; | ||
1022 | } | ||
1023 | |||
1024 | /* return a pointer to the destination address (DA) */ | ||
1025 | static inline u8 *ieee80211_get_DA(struct ieee80211_hdr *hdr) | ||
1026 | { | ||
1027 | u8 *raw = (u8 *) hdr; | ||
1028 | u8 to_ds = (*(raw+1)) & 1; /* get the TODS bit */ | ||
1029 | |||
1030 | if (to_ds) | ||
1031 | return hdr->addr3; | ||
1032 | return hdr->addr1; | ||
1033 | } | ||
1034 | |||
1035 | static inline int ieee80211_get_morefrag(struct ieee80211_hdr *hdr) | ||
1036 | { | ||
1037 | return (le16_to_cpu(hdr->frame_control) & | ||
1038 | IEEE80211_FCTL_MOREFRAGS) != 0; | ||
1039 | } | ||
1040 | |||
1041 | #define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" | ||
1042 | #define MAC_ARG(x) ((u8*)(x))[0], ((u8*)(x))[1], ((u8*)(x))[2], \ | ||
1043 | ((u8*)(x))[3], ((u8*)(x))[4], ((u8*)(x))[5] | ||
1044 | |||
1045 | #endif /* MAC80211_H */ | ||
diff --git a/include/net/sctp/command.h b/include/net/sctp/command.h index 6114c4f54b0a..f56c8d695a82 100644 --- a/include/net/sctp/command.h +++ b/include/net/sctp/command.h | |||
@@ -100,6 +100,8 @@ typedef enum { | |||
100 | SCTP_CMD_T3_RTX_TIMERS_STOP, /* Stops T3-rtx pending timers */ | 100 | SCTP_CMD_T3_RTX_TIMERS_STOP, /* Stops T3-rtx pending timers */ |
101 | SCTP_CMD_FORCE_PRIM_RETRAN, /* Forces retrans. over primary path. */ | 101 | SCTP_CMD_FORCE_PRIM_RETRAN, /* Forces retrans. over primary path. */ |
102 | SCTP_CMD_SET_SK_ERR, /* Set sk_err */ | 102 | SCTP_CMD_SET_SK_ERR, /* Set sk_err */ |
103 | SCTP_CMD_ASSOC_CHANGE, /* generate and send assoc_change event */ | ||
104 | SCTP_CMD_ADAPTATION_IND, /* generate and send adaptation event */ | ||
103 | SCTP_CMD_LAST | 105 | SCTP_CMD_LAST |
104 | } sctp_verb_t; | 106 | } sctp_verb_t; |
105 | 107 | ||
diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h index 28af68059521..dda72bf5b9b4 100644 --- a/include/net/sctp/sctp.h +++ b/include/net/sctp/sctp.h | |||
@@ -378,11 +378,15 @@ static inline int sctp_sysctl_jiffies_ms(ctl_table *table, int __user *name, int | |||
378 | 378 | ||
379 | int sctp_v6_init(void); | 379 | int sctp_v6_init(void); |
380 | void sctp_v6_exit(void); | 380 | void sctp_v6_exit(void); |
381 | int sctp_v6_add_protocol(void); | ||
382 | void sctp_v6_del_protocol(void); | ||
381 | 383 | ||
382 | #else /* #ifdef defined(CONFIG_IPV6) */ | 384 | #else /* #ifdef defined(CONFIG_IPV6) */ |
383 | 385 | ||
384 | static inline int sctp_v6_init(void) { return 0; } | 386 | static inline int sctp_v6_init(void) { return 0; } |
385 | static inline void sctp_v6_exit(void) { return; } | 387 | static inline void sctp_v6_exit(void) { return; } |
388 | static inline int sctp_v6_add_protocol(void) { return 0; } | ||
389 | static inline void sctp_v6_del_protocol(void) { return; } | ||
386 | 390 | ||
387 | #endif /* #if defined(CONFIG_IPV6) */ | 391 | #endif /* #if defined(CONFIG_IPV6) */ |
388 | 392 | ||
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h index 7b4fff93ba7f..5e81984b8478 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h | |||
@@ -1857,6 +1857,7 @@ int sctp_assoc_set_bind_addr_from_ep(struct sctp_association *, | |||
1857 | int sctp_assoc_set_bind_addr_from_cookie(struct sctp_association *, | 1857 | int sctp_assoc_set_bind_addr_from_cookie(struct sctp_association *, |
1858 | struct sctp_cookie*, | 1858 | struct sctp_cookie*, |
1859 | gfp_t gfp); | 1859 | gfp_t gfp); |
1860 | int sctp_assoc_set_id(struct sctp_association *, gfp_t); | ||
1860 | 1861 | ||
1861 | int sctp_cmp_addr_exact(const union sctp_addr *ss1, | 1862 | int sctp_cmp_addr_exact(const union sctp_addr *ss1, |
1862 | const union sctp_addr *ss2); | 1863 | const union sctp_addr *ss2); |
diff --git a/include/net/tcp.h b/include/net/tcp.h index ef8f9d4dae85..e22b4f0305a3 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h | |||
@@ -736,7 +736,8 @@ static inline __u32 tcp_current_ssthresh(const struct sock *sk) | |||
736 | 736 | ||
737 | static inline void tcp_sync_left_out(struct tcp_sock *tp) | 737 | static inline void tcp_sync_left_out(struct tcp_sock *tp) |
738 | { | 738 | { |
739 | BUG_ON(tp->sacked_out + tp->lost_out > tp->packets_out); | 739 | BUG_ON(tp->rx_opt.sack_ok && |
740 | (tp->sacked_out + tp->lost_out > tp->packets_out)); | ||
740 | tp->left_out = tp->sacked_out + tp->lost_out; | 741 | tp->left_out = tp->sacked_out + tp->lost_out; |
741 | } | 742 | } |
742 | 743 | ||
diff --git a/include/net/xfrm.h b/include/net/xfrm.h index 66c2d3eec03c..39ef925d39dd 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h | |||
@@ -416,25 +416,6 @@ struct xfrm_audit | |||
416 | u32 secid; | 416 | u32 secid; |
417 | }; | 417 | }; |
418 | 418 | ||
419 | /* SAD metadata, add more later */ | ||
420 | struct xfrm_sadinfo | ||
421 | { | ||
422 | u32 sadhcnt; /* current hash bkts */ | ||
423 | u32 sadhmcnt; /* max allowed hash bkts */ | ||
424 | u32 sadcnt; /* current running count */ | ||
425 | }; | ||
426 | |||
427 | struct xfrm_spdinfo | ||
428 | { | ||
429 | u32 incnt; | ||
430 | u32 outcnt; | ||
431 | u32 fwdcnt; | ||
432 | u32 inscnt; | ||
433 | u32 outscnt; | ||
434 | u32 fwdscnt; | ||
435 | u32 spdhcnt; | ||
436 | u32 spdhmcnt; | ||
437 | }; | ||
438 | #ifdef CONFIG_AUDITSYSCALL | 419 | #ifdef CONFIG_AUDITSYSCALL |
439 | extern void xfrm_audit_log(uid_t auid, u32 secid, int type, int result, | 420 | extern void xfrm_audit_log(uid_t auid, u32 secid, int type, int result, |
440 | struct xfrm_policy *xp, struct xfrm_state *x); | 421 | struct xfrm_policy *xp, struct xfrm_state *x); |
@@ -964,11 +945,29 @@ static inline int xfrm_state_sort(struct xfrm_state **dst, struct xfrm_state **s | |||
964 | return -ENOSYS; | 945 | return -ENOSYS; |
965 | } | 946 | } |
966 | #endif | 947 | #endif |
948 | |||
949 | struct xfrmk_sadinfo { | ||
950 | u32 sadhcnt; /* current hash bkts */ | ||
951 | u32 sadhmcnt; /* max allowed hash bkts */ | ||
952 | u32 sadcnt; /* current running count */ | ||
953 | }; | ||
954 | |||
955 | struct xfrmk_spdinfo { | ||
956 | u32 incnt; | ||
957 | u32 outcnt; | ||
958 | u32 fwdcnt; | ||
959 | u32 inscnt; | ||
960 | u32 outscnt; | ||
961 | u32 fwdscnt; | ||
962 | u32 spdhcnt; | ||
963 | u32 spdhmcnt; | ||
964 | }; | ||
965 | |||
967 | extern struct xfrm_state *xfrm_find_acq_byseq(u32 seq); | 966 | extern struct xfrm_state *xfrm_find_acq_byseq(u32 seq); |
968 | extern int xfrm_state_delete(struct xfrm_state *x); | 967 | extern int xfrm_state_delete(struct xfrm_state *x); |
969 | extern void xfrm_state_flush(u8 proto, struct xfrm_audit *audit_info); | 968 | extern void xfrm_state_flush(u8 proto, struct xfrm_audit *audit_info); |
970 | extern void xfrm_sad_getinfo(struct xfrm_sadinfo *si); | 969 | extern void xfrm_sad_getinfo(struct xfrmk_sadinfo *si); |
971 | extern void xfrm_spd_getinfo(struct xfrm_spdinfo *si); | 970 | extern void xfrm_spd_getinfo(struct xfrmk_spdinfo *si); |
972 | extern int xfrm_replay_check(struct xfrm_state *x, __be32 seq); | 971 | extern int xfrm_replay_check(struct xfrm_state *x, __be32 seq); |
973 | extern void xfrm_replay_advance(struct xfrm_state *x, __be32 seq); | 972 | extern void xfrm_replay_advance(struct xfrm_state *x, __be32 seq); |
974 | extern void xfrm_replay_notify(struct xfrm_state *x, int event); | 973 | extern void xfrm_replay_notify(struct xfrm_state *x, int event); |
diff --git a/include/rdma/ib_mad.h b/include/rdma/ib_mad.h index 585d28e960dd..739fa4d0e539 100644 --- a/include/rdma/ib_mad.h +++ b/include/rdma/ib_mad.h | |||
@@ -39,8 +39,6 @@ | |||
39 | #if !defined( IB_MAD_H ) | 39 | #if !defined( IB_MAD_H ) |
40 | #define IB_MAD_H | 40 | #define IB_MAD_H |
41 | 41 | ||
42 | #include <linux/pci.h> | ||
43 | |||
44 | #include <rdma/ib_verbs.h> | 42 | #include <rdma/ib_verbs.h> |
45 | 43 | ||
46 | /* Management base version */ | 44 | /* Management base version */ |
diff --git a/include/scsi/iscsi_proto.h b/include/scsi/iscsi_proto.h index 4a44278ed768..8d1e4e8026fe 100644 --- a/include/scsi/iscsi_proto.h +++ b/include/scsi/iscsi_proto.h | |||
@@ -588,7 +588,17 @@ struct iscsi_reject { | |||
588 | #define VALUE_MAXLEN 255 | 588 | #define VALUE_MAXLEN 255 |
589 | #define TARGET_NAME_MAXLEN VALUE_MAXLEN | 589 | #define TARGET_NAME_MAXLEN VALUE_MAXLEN |
590 | 590 | ||
591 | #define DEFAULT_MAX_RECV_DATA_SEGMENT_LENGTH 8192 | 591 | #define ISCSI_DEF_MAX_RECV_SEG_LEN 8192 |
592 | #define ISCSI_MIN_MAX_RECV_SEG_LEN 512 | ||
593 | #define ISCSI_MAX_MAX_RECV_SEG_LEN 16777215 | ||
594 | |||
595 | #define ISCSI_DEF_FIRST_BURST_LEN 65536 | ||
596 | #define ISCSI_MIN_FIRST_BURST_LEN 512 | ||
597 | #define ISCSI_MAX_FIRST_BURST_LEN 16777215 | ||
598 | |||
599 | #define ISCSI_DEF_MAX_BURST_LEN 262144 | ||
600 | #define ISCSI_MIN_MAX_BURST_LEN 512 | ||
601 | #define ISCSI_MAX_MAX_BURST_LEN 16777215 | ||
592 | 602 | ||
593 | /************************* RFC 3720 End *****************************/ | 603 | /************************* RFC 3720 End *****************************/ |
594 | 604 | ||
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h index 5c0e9791441c..9f8f80ab0c8b 100644 --- a/include/scsi/scsi.h +++ b/include/scsi/scsi.h | |||
@@ -203,6 +203,7 @@ static inline int scsi_status_is_good(int status) | |||
203 | 203 | ||
204 | /* | 204 | /* |
205 | * DEVICE TYPES | 205 | * DEVICE TYPES |
206 | * Please keep them in 0x%02x format for $MODALIAS to work | ||
206 | */ | 207 | */ |
207 | 208 | ||
208 | #define TYPE_DISK 0x00 | 209 | #define TYPE_DISK 0x00 |
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index d6948d0e8cdb..a2e0c1032491 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h | |||
@@ -73,9 +73,6 @@ struct scsi_cmnd { | |||
73 | unsigned short use_sg; /* Number of pieces of scatter-gather */ | 73 | unsigned short use_sg; /* Number of pieces of scatter-gather */ |
74 | unsigned short sglist_len; /* size of malloc'd scatter-gather list */ | 74 | unsigned short sglist_len; /* size of malloc'd scatter-gather list */ |
75 | 75 | ||
76 | /* offset in cmd we are at (for multi-transfer tgt cmds) */ | ||
77 | unsigned offset; | ||
78 | |||
79 | unsigned underflow; /* Return error if less than | 76 | unsigned underflow; /* Return error if less than |
80 | this amount is transferred */ | 77 | this amount is transferred */ |
81 | 78 | ||
diff --git a/include/scsi/scsi_dbg.h b/include/scsi/scsi_dbg.h index 3bbbfbe8cbfc..5a43a4cd96c6 100644 --- a/include/scsi/scsi_dbg.h +++ b/include/scsi/scsi_dbg.h | |||
@@ -5,14 +5,16 @@ struct scsi_cmnd; | |||
5 | struct scsi_sense_hdr; | 5 | struct scsi_sense_hdr; |
6 | 6 | ||
7 | extern void scsi_print_command(struct scsi_cmnd *); | 7 | extern void scsi_print_command(struct scsi_cmnd *); |
8 | extern void scsi_print_sense_hdr(const char *, struct scsi_sense_hdr *); | ||
9 | extern void __scsi_print_command(unsigned char *); | 8 | extern void __scsi_print_command(unsigned char *); |
10 | extern void scsi_print_sense(const char *, struct scsi_cmnd *); | 9 | extern void scsi_show_extd_sense(unsigned char, unsigned char); |
10 | extern void scsi_show_sense_hdr(struct scsi_sense_hdr *); | ||
11 | extern void scsi_print_sense_hdr(const char *, struct scsi_sense_hdr *); | ||
12 | extern void scsi_print_sense(char *, struct scsi_cmnd *); | ||
11 | extern void __scsi_print_sense(const char *name, | 13 | extern void __scsi_print_sense(const char *name, |
12 | const unsigned char *sense_buffer, | 14 | const unsigned char *sense_buffer, |
13 | int sense_len); | 15 | int sense_len); |
14 | extern void scsi_print_driverbyte(int); | 16 | extern void scsi_show_result(int); |
15 | extern void scsi_print_hostbyte(int); | 17 | extern void scsi_print_result(struct scsi_cmnd *); |
16 | extern void scsi_print_status(unsigned char); | 18 | extern void scsi_print_status(unsigned char); |
17 | extern const char *scsi_sense_key_string(unsigned char); | 19 | extern const char *scsi_sense_key_string(unsigned char); |
18 | extern const char *scsi_extd_sense_format(unsigned char, unsigned char); | 20 | extern const char *scsi_extd_sense_format(unsigned char, unsigned char); |
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 9dd37e2f5a84..2f3c5b8b1d6a 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h | |||
@@ -5,6 +5,7 @@ | |||
5 | #include <linux/list.h> | 5 | #include <linux/list.h> |
6 | #include <linux/spinlock.h> | 6 | #include <linux/spinlock.h> |
7 | #include <linux/workqueue.h> | 7 | #include <linux/workqueue.h> |
8 | #include <linux/blkdev.h> | ||
8 | #include <asm/atomic.h> | 9 | #include <asm/atomic.h> |
9 | 10 | ||
10 | struct request_queue; | 11 | struct request_queue; |
@@ -119,6 +120,7 @@ struct scsi_device { | |||
119 | unsigned use_192_bytes_for_3f:1; /* ask for 192 bytes from page 0x3f */ | 120 | unsigned use_192_bytes_for_3f:1; /* ask for 192 bytes from page 0x3f */ |
120 | unsigned no_start_on_add:1; /* do not issue start on add */ | 121 | unsigned no_start_on_add:1; /* do not issue start on add */ |
121 | unsigned allow_restart:1; /* issue START_UNIT in error handler */ | 122 | unsigned allow_restart:1; /* issue START_UNIT in error handler */ |
123 | unsigned manage_start_stop:1; /* Let HLD (sd) manage start/stop */ | ||
122 | unsigned no_uld_attach:1; /* disable connecting to upper level drivers */ | 124 | unsigned no_uld_attach:1; /* disable connecting to upper level drivers */ |
123 | unsigned select_no_atn:1; | 125 | unsigned select_no_atn:1; |
124 | unsigned fix_capacity:1; /* READ_CAPACITY is too high by 1 */ | 126 | unsigned fix_capacity:1; /* READ_CAPACITY is too high by 1 */ |
@@ -154,8 +156,11 @@ struct scsi_device { | |||
154 | #define sdev_printk(prefix, sdev, fmt, a...) \ | 156 | #define sdev_printk(prefix, sdev, fmt, a...) \ |
155 | dev_printk(prefix, &(sdev)->sdev_gendev, fmt, ##a) | 157 | dev_printk(prefix, &(sdev)->sdev_gendev, fmt, ##a) |
156 | 158 | ||
157 | #define scmd_printk(prefix, scmd, fmt, a...) \ | 159 | #define scmd_printk(prefix, scmd, fmt, a...) \ |
158 | dev_printk(prefix, &(scmd)->device->sdev_gendev, fmt, ##a) | 160 | (scmd)->request->rq_disk ? \ |
161 | sdev_printk(prefix, (scmd)->device, "[%s] " fmt, \ | ||
162 | (scmd)->request->rq_disk->disk_name, ##a) : \ | ||
163 | sdev_printk(prefix, (scmd)->device, fmt, ##a) | ||
159 | 164 | ||
160 | enum scsi_target_state { | 165 | enum scsi_target_state { |
161 | STARGET_RUNNING = 1, | 166 | STARGET_RUNNING = 1, |
@@ -353,4 +358,9 @@ static inline int scsi_device_qas(struct scsi_device *sdev) | |||
353 | return 0; | 358 | return 0; |
354 | return sdev->inquiry[56] & 0x02; | 359 | return sdev->inquiry[56] & 0x02; |
355 | } | 360 | } |
361 | |||
362 | #define MODULE_ALIAS_SCSI_DEVICE(type) \ | ||
363 | MODULE_ALIAS("scsi:t-" __stringify(type) "*") | ||
364 | #define SCSI_DEVICE_MODALIAS_FMT "scsi:t-0x%02x" | ||
365 | |||
356 | #endif /* _SCSI_SCSI_DEVICE_H */ | 366 | #endif /* _SCSI_SCSI_DEVICE_H */ |
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index 7f1f411d07af..68f461b7a835 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h | |||
@@ -129,6 +129,11 @@ struct scsi_host_template { | |||
129 | * the LLD. When the driver is finished processing the command | 129 | * the LLD. When the driver is finished processing the command |
130 | * the done callback is invoked. | 130 | * the done callback is invoked. |
131 | * | 131 | * |
132 | * This is called to inform the LLD to transfer | ||
133 | * cmd->request_bufflen bytes. The cmd->use_sg speciefies the | ||
134 | * number of scatterlist entried in the command and | ||
135 | * cmd->request_buffer contains the scatterlist. | ||
136 | * | ||
132 | * return values: see queuecommand | 137 | * return values: see queuecommand |
133 | * | 138 | * |
134 | * If the LLD accepts the cmd, it should set the result to an | 139 | * If the LLD accepts the cmd, it should set the result to an |
@@ -139,20 +144,6 @@ struct scsi_host_template { | |||
139 | /* TODO: rename */ | 144 | /* TODO: rename */ |
140 | int (* transfer_response)(struct scsi_cmnd *, | 145 | int (* transfer_response)(struct scsi_cmnd *, |
141 | void (*done)(struct scsi_cmnd *)); | 146 | void (*done)(struct scsi_cmnd *)); |
142 | /* | ||
143 | * This is called to inform the LLD to transfer cmd->request_bufflen | ||
144 | * bytes of the cmd at cmd->offset in the cmd. The cmd->use_sg | ||
145 | * speciefies the number of scatterlist entried in the command | ||
146 | * and cmd->request_buffer contains the scatterlist. | ||
147 | * | ||
148 | * If the command cannot be processed in one transfer_data call | ||
149 | * becuase a scatterlist within the LLD's limits cannot be | ||
150 | * created then transfer_data will be called multiple times. | ||
151 | * It is initially called from process context, and later | ||
152 | * calls are from the interrup context. | ||
153 | */ | ||
154 | int (* transfer_data)(struct scsi_cmnd *, | ||
155 | void (*done)(struct scsi_cmnd *)); | ||
156 | 147 | ||
157 | /* Used as callback for the completion of task management request. */ | 148 | /* Used as callback for the completion of task management request. */ |
158 | int (* tsk_mgmt_response)(u64 mid, int result); | 149 | int (* tsk_mgmt_response)(u64 mid, int result); |
@@ -335,6 +326,19 @@ struct scsi_host_template { | |||
335 | int (*proc_info)(struct Scsi_Host *, char *, char **, off_t, int, int); | 326 | int (*proc_info)(struct Scsi_Host *, char *, char **, off_t, int, int); |
336 | 327 | ||
337 | /* | 328 | /* |
329 | * This is an optional routine that allows the transport to become | ||
330 | * involved when a scsi io timer fires. The return value tells the | ||
331 | * timer routine how to finish the io timeout handling: | ||
332 | * EH_HANDLED: I fixed the error, please complete the command | ||
333 | * EH_RESET_TIMER: I need more time, reset the timer and | ||
334 | * begin counting again | ||
335 | * EH_NOT_HANDLED Begin normal error recovery | ||
336 | * | ||
337 | * Status: OPTIONAL | ||
338 | */ | ||
339 | enum scsi_eh_timer_return (* eh_timed_out)(struct scsi_cmnd *); | ||
340 | |||
341 | /* | ||
338 | * suspend support | 342 | * suspend support |
339 | */ | 343 | */ |
340 | int (*resume)(struct scsi_device *); | 344 | int (*resume)(struct scsi_device *); |
diff --git a/include/scsi/scsi_tgt_if.h b/include/scsi/scsi_tgt_if.h index 07d6e77ae895..4cf9dff29a2f 100644 --- a/include/scsi/scsi_tgt_if.h +++ b/include/scsi/scsi_tgt_if.h | |||
@@ -45,11 +45,13 @@ struct tgt_event { | |||
45 | /* user-> kernel */ | 45 | /* user-> kernel */ |
46 | struct { | 46 | struct { |
47 | int host_no; | 47 | int host_no; |
48 | uint32_t len; | ||
49 | int result; | 48 | int result; |
49 | aligned_u64 tag; | ||
50 | aligned_u64 uaddr; | 50 | aligned_u64 uaddr; |
51 | aligned_u64 sense_uaddr; | ||
52 | uint32_t len; | ||
53 | uint32_t sense_len; | ||
51 | uint8_t rw; | 54 | uint8_t rw; |
52 | aligned_u64 tag; | ||
53 | } cmd_rsp; | 55 | } cmd_rsp; |
54 | struct { | 56 | struct { |
55 | int host_no; | 57 | int host_no; |
diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h index 798f7c7ee426..1e797308640a 100644 --- a/include/scsi/scsi_transport_fc.h +++ b/include/scsi/scsi_transport_fc.h | |||
@@ -108,6 +108,8 @@ enum fc_port_state { | |||
108 | #define FC_PORTSPEED_2GBIT 2 | 108 | #define FC_PORTSPEED_2GBIT 2 |
109 | #define FC_PORTSPEED_4GBIT 4 | 109 | #define FC_PORTSPEED_4GBIT 4 |
110 | #define FC_PORTSPEED_10GBIT 8 | 110 | #define FC_PORTSPEED_10GBIT 8 |
111 | #define FC_PORTSPEED_8GBIT 0x10 | ||
112 | #define FC_PORTSPEED_16GBIT 0x20 | ||
111 | #define FC_PORTSPEED_NOT_NEGOTIATED (1 << 15) /* Speed not established */ | 113 | #define FC_PORTSPEED_NOT_NEGOTIATED (1 << 15) /* Speed not established */ |
112 | 114 | ||
113 | /* | 115 | /* |
diff --git a/include/scsi/sd.h b/include/scsi/sd.h new file mode 100644 index 000000000000..5261488e1108 --- /dev/null +++ b/include/scsi/sd.h | |||
@@ -0,0 +1,72 @@ | |||
1 | #ifndef _SCSI_DISK_H | ||
2 | #define _SCSI_DISK_H | ||
3 | |||
4 | /* | ||
5 | * More than enough for everybody ;) The huge number of majors | ||
6 | * is a leftover from 16bit dev_t days, we don't really need that | ||
7 | * much numberspace. | ||
8 | */ | ||
9 | #define SD_MAJORS 16 | ||
10 | |||
11 | /* | ||
12 | * This is limited by the naming scheme enforced in sd_probe, | ||
13 | * add another character to it if you really need more disks. | ||
14 | */ | ||
15 | #define SD_MAX_DISKS (((26 * 26) + 26 + 1) * 26) | ||
16 | |||
17 | /* | ||
18 | * Time out in seconds for disks and Magneto-opticals (which are slower). | ||
19 | */ | ||
20 | #define SD_TIMEOUT (30 * HZ) | ||
21 | #define SD_MOD_TIMEOUT (75 * HZ) | ||
22 | |||
23 | /* | ||
24 | * Number of allowed retries | ||
25 | */ | ||
26 | #define SD_MAX_RETRIES 5 | ||
27 | #define SD_PASSTHROUGH_RETRIES 1 | ||
28 | |||
29 | /* | ||
30 | * Size of the initial data buffer for mode and read capacity data | ||
31 | */ | ||
32 | #define SD_BUF_SIZE 512 | ||
33 | |||
34 | struct scsi_disk { | ||
35 | struct scsi_driver *driver; /* always &sd_template */ | ||
36 | struct scsi_device *device; | ||
37 | struct class_device cdev; | ||
38 | struct gendisk *disk; | ||
39 | unsigned int openers; /* protected by BKL for now, yuck */ | ||
40 | sector_t capacity; /* size in 512-byte sectors */ | ||
41 | u32 index; | ||
42 | u8 media_present; | ||
43 | u8 write_prot; | ||
44 | unsigned WCE : 1; /* state of disk WCE bit */ | ||
45 | unsigned RCD : 1; /* state of disk RCD bit, unused */ | ||
46 | unsigned DPOFUA : 1; /* state of disk DPOFUA bit */ | ||
47 | }; | ||
48 | #define to_scsi_disk(obj) container_of(obj,struct scsi_disk,cdev) | ||
49 | |||
50 | static int sd_revalidate_disk(struct gendisk *disk); | ||
51 | static void sd_rw_intr(struct scsi_cmnd * SCpnt); | ||
52 | static int sd_probe(struct device *); | ||
53 | static int sd_remove(struct device *); | ||
54 | static void sd_shutdown(struct device *dev); | ||
55 | static int sd_suspend(struct device *dev, pm_message_t state); | ||
56 | static int sd_resume(struct device *dev); | ||
57 | static void sd_rescan(struct device *); | ||
58 | static int sd_init_command(struct scsi_cmnd *); | ||
59 | static int sd_issue_flush(struct device *, sector_t *); | ||
60 | static void sd_prepare_flush(request_queue_t *, struct request *); | ||
61 | static void sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer); | ||
62 | static void scsi_disk_release(struct class_device *cdev); | ||
63 | static void sd_print_sense_hdr(struct scsi_disk *, struct scsi_sense_hdr *); | ||
64 | static void sd_print_result(struct scsi_disk *, int); | ||
65 | |||
66 | #define sd_printk(prefix, sdsk, fmt, a...) \ | ||
67 | (sdsk)->disk ? \ | ||
68 | sdev_printk(prefix, (sdsk)->device, "[%s] " fmt, \ | ||
69 | (sdsk)->disk->disk_name, ##a) : \ | ||
70 | sdev_printk(prefix, (sdsk)->device, fmt, ##a) | ||
71 | |||
72 | #endif /* _SCSI_DISK_H */ | ||