Blame view

arch/x86/kernel/i8237.c 1.18 KB
795312e76   Pierre Ossman   [PATCH] ISA DMA s...
1
  /*
835c34a16   Dave Jones   Delete filenames ...
2
   * 8237A DMA controller suspend functions.
795312e76   Pierre Ossman   [PATCH] ISA DMA s...
3
4
   *
   * Written by Pierre Ossman, 2005.
643f720ce   Pierre Ossman   [PATCH] mmc (main...
5
6
7
8
9
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation; either version 2 of the License, or (at
   * your option) any later version.
795312e76   Pierre Ossman   [PATCH] ISA DMA s...
10
11
12
   */
  
  #include <linux/init.h>
f3c6ea1b0   Rafael J. Wysocki   x86: Use syscore_...
13
  #include <linux/syscore_ops.h>
795312e76   Pierre Ossman   [PATCH] ISA DMA s...
14
15
16
17
18
19
20
21
22
  
  #include <asm/dma.h>
  
  /*
   * This module just handles suspend/resume issues with the
   * 8237A DMA controller (used for ISA and LPC).
   * Allocation is handled in kernel/dma.c and normal usage is
   * in asm/dma.h.
   */
f3c6ea1b0   Rafael J. Wysocki   x86: Use syscore_...
23
  static void i8237A_resume(void)
795312e76   Pierre Ossman   [PATCH] ISA DMA s...
24
25
26
27
28
  {
  	unsigned long flags;
  	int i;
  
  	flags = claim_dma_lock();
b52af4092   Clemens Ladisch   i8327: fix outb()...
29
30
  	dma_outb(0, DMA1_RESET_REG);
  	dma_outb(0, DMA2_RESET_REG);
795312e76   Pierre Ossman   [PATCH] ISA DMA s...
31

b52af4092   Clemens Ladisch   i8327: fix outb()...
32
  	for (i = 0; i < 8; i++) {
795312e76   Pierre Ossman   [PATCH] ISA DMA s...
33
34
35
36
37
38
39
40
41
  		set_dma_addr(i, 0x000000);
  		/* DMA count is a bit weird so this is not 0 */
  		set_dma_count(i, 1);
  	}
  
  	/* Enable cascade DMA or channel 0-3 won't work */
  	enable_dma(4);
  
  	release_dma_lock(flags);
795312e76   Pierre Ossman   [PATCH] ISA DMA s...
42
  }
f3c6ea1b0   Rafael J. Wysocki   x86: Use syscore_...
43
  static struct syscore_ops i8237_syscore_ops = {
b52af4092   Clemens Ladisch   i8327: fix outb()...
44
  	.resume		= i8237A_resume,
795312e76   Pierre Ossman   [PATCH] ISA DMA s...
45
  };
f3c6ea1b0   Rafael J. Wysocki   x86: Use syscore_...
46
  static int __init i8237A_init_ops(void)
795312e76   Pierre Ossman   [PATCH] ISA DMA s...
47
  {
f3c6ea1b0   Rafael J. Wysocki   x86: Use syscore_...
48
49
  	register_syscore_ops(&i8237_syscore_ops);
  	return 0;
795312e76   Pierre Ossman   [PATCH] ISA DMA s...
50
  }
f3c6ea1b0   Rafael J. Wysocki   x86: Use syscore_...
51
  device_initcall(i8237A_init_ops);