Blame view

include/asm-alpha/floppy.h 3.18 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
11
  /*
   * Architecture specific parts of the Floppy driver
   *
   * This file is subject to the terms and conditions of the GNU General Public
   * License.  See the file "COPYING" in the main directory of this archive
   * for more details.
   *
   * Copyright (C) 1995
   */
  #ifndef __ASM_ALPHA_FLOPPY_H
  #define __ASM_ALPHA_FLOPPY_H
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  
  #define fd_inb(port)			inb_p(port)
  #define fd_outb(value,port)		outb_p(value,port)
  
  #define fd_enable_dma()         enable_dma(FLOPPY_DMA)
  #define fd_disable_dma()        disable_dma(FLOPPY_DMA)
  #define fd_request_dma()        request_dma(FLOPPY_DMA,"floppy")
  #define fd_free_dma()           free_dma(FLOPPY_DMA)
  #define fd_clear_dma_ff()       clear_dma_ff(FLOPPY_DMA)
  #define fd_set_dma_mode(mode)   set_dma_mode(FLOPPY_DMA,mode)
  #define fd_set_dma_addr(addr)   set_dma_addr(FLOPPY_DMA,virt_to_bus(addr))
  #define fd_set_dma_count(count) set_dma_count(FLOPPY_DMA,count)
  #define fd_enable_irq()         enable_irq(FLOPPY_IRQ)
  #define fd_disable_irq()        disable_irq(FLOPPY_IRQ)
  #define fd_cacheflush(addr,size) /* nothing */
afedfd016   Matt Mackall   [PATCH] random: r...
27
  #define fd_request_irq()        request_irq(FLOPPY_IRQ, floppy_interrupt,\
d18ecedc0   Thomas Gleixner   [PATCH] irq-flags...
28
  					    IRQF_DISABLED, "floppy", NULL)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
  #define fd_free_irq()           free_irq(FLOPPY_IRQ, NULL);
  
  #ifdef CONFIG_PCI
  
  #include <linux/pci.h>
  
  #define fd_dma_setup(addr,size,mode,io) alpha_fd_dma_setup(addr,size,mode,io)
  
  static __inline__ int 
  alpha_fd_dma_setup(char *addr, unsigned long size, int mode, int io)
  {
  	static unsigned long prev_size;
  	static dma_addr_t bus_addr = 0;
  	static char *prev_addr;
  	static int prev_dir;
  	int dir;
  
  	dir = (mode != DMA_MODE_READ) ? PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE;
  
  	if (bus_addr 
  	    && (addr != prev_addr || size != prev_size || dir != prev_dir)) {
  		/* different from last time -- unmap prev */
  		pci_unmap_single(isa_bridge, bus_addr, prev_size, prev_dir);
  		bus_addr = 0;
  	}
  
  	if (!bus_addr)	/* need to map it */
  		bus_addr = pci_map_single(isa_bridge, addr, size, dir);
  
  	/* remember this one as prev */
  	prev_addr = addr;
  	prev_size = size;
  	prev_dir = dir;
  
  	fd_clear_dma_ff();
  	fd_cacheflush(addr, size);
  	fd_set_dma_mode(mode);
  	set_dma_addr(FLOPPY_DMA, bus_addr);
  	fd_set_dma_count(size);
  	virtual_dma_port = io;
  	fd_enable_dma();
  
  	return 0;
  }
  
  #endif /* CONFIG_PCI */
  
  __inline__ void virtual_dma_init(void)
  {
  	/* Nothing to do on an Alpha */
  }
  
  static int FDC1 = 0x3f0;
  static int FDC2 = -1;
  
  /*
   * Again, the CMOS information doesn't work on the alpha..
   */
  #define FLOPPY0_TYPE 6
  #define FLOPPY1_TYPE 0
  
  #define N_FDC 2
  #define N_DRIVE 8
  
  #define FLOPPY_MOTOR_MASK 0xf0
  
  /*
   * Most Alphas have no problems with floppy DMA crossing 64k borders,
   * except for certain ones, like XL and RUFFIAN.
   *
   * However, the test is simple and fast, and this *is* floppy, after all,
   * so we do it for all platforms, just to make sure.
   *
   * This is advantageous in other circumstances as well, as in moving
   * about the PCI DMA windows and forcing the floppy to start doing
   * scatter-gather when it never had before, and there *is* a problem
   * on that platform... ;-}
   */
  
  static inline unsigned long CROSS_64KB(void *a, unsigned long s)
  {
  	unsigned long p = (unsigned long)a;
  	return ((p + s - 1) ^ p) & ~0xffffUL;
  }
  
  #define EXTRA_FLOPPY_PARAMS
  
  #endif /* __ASM_ALPHA_FLOPPY_H */