diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2007-10-11 05:17:01 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2007-10-11 05:17:01 -0400 |
commit | 9a163ed8e0552fdcffe405d2ea7134819a81456e (patch) | |
tree | b322fd2afbb812ba7ddfd22f3734aaab007c2aa5 /arch/x86/kernel/i8237.c | |
parent | f7627e2513987bb5d4e8cb13c4e0a478352141ac (diff) |
i386: move kernel
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/i8237.c')
-rw-r--r-- | arch/x86/kernel/i8237.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/arch/x86/kernel/i8237.c b/arch/x86/kernel/i8237.c new file mode 100644 index 000000000000..6f508e8d7c57 --- /dev/null +++ b/arch/x86/kernel/i8237.c | |||
@@ -0,0 +1,72 @@ | |||
1 | /* | ||
2 | * i8237.c: 8237A DMA controller suspend functions. | ||
3 | * | ||
4 | * Written by Pierre Ossman, 2005. | ||
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 | #include <linux/init.h> | ||
13 | #include <linux/sysdev.h> | ||
14 | |||
15 | #include <asm/dma.h> | ||
16 | |||
17 | /* | ||
18 | * This module just handles suspend/resume issues with the | ||
19 | * 8237A DMA controller (used for ISA and LPC). | ||
20 | * Allocation is handled in kernel/dma.c and normal usage is | ||
21 | * in asm/dma.h. | ||
22 | */ | ||
23 | |||
24 | static int i8237A_resume(struct sys_device *dev) | ||
25 | { | ||
26 | unsigned long flags; | ||
27 | int i; | ||
28 | |||
29 | flags = claim_dma_lock(); | ||
30 | |||
31 | dma_outb(DMA1_RESET_REG, 0); | ||
32 | dma_outb(DMA2_RESET_REG, 0); | ||
33 | |||
34 | for (i = 0;i < 8;i++) { | ||
35 | set_dma_addr(i, 0x000000); | ||
36 | /* DMA count is a bit weird so this is not 0 */ | ||
37 | set_dma_count(i, 1); | ||
38 | } | ||
39 | |||
40 | /* Enable cascade DMA or channel 0-3 won't work */ | ||
41 | enable_dma(4); | ||
42 | |||
43 | release_dma_lock(flags); | ||
44 | |||
45 | return 0; | ||
46 | } | ||
47 | |||
48 | static int i8237A_suspend(struct sys_device *dev, pm_message_t state) | ||
49 | { | ||
50 | return 0; | ||
51 | } | ||
52 | |||
53 | static struct sysdev_class i8237_sysdev_class = { | ||
54 | set_kset_name("i8237"), | ||
55 | .suspend = i8237A_suspend, | ||
56 | .resume = i8237A_resume, | ||
57 | }; | ||
58 | |||
59 | static struct sys_device device_i8237A = { | ||
60 | .id = 0, | ||
61 | .cls = &i8237_sysdev_class, | ||
62 | }; | ||
63 | |||
64 | static int __init i8237A_init_sysfs(void) | ||
65 | { | ||
66 | int error = sysdev_class_register(&i8237_sysdev_class); | ||
67 | if (!error) | ||
68 | error = sysdev_register(&device_i8237A); | ||
69 | return error; | ||
70 | } | ||
71 | |||
72 | device_initcall(i8237A_init_sysfs); | ||