xref: /OK3568_Linux_fs/kernel/arch/mips/include/asm/mach-generic/floppy.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * This file is subject to the terms and conditions of the GNU General Public
3*4882a593Smuzhiyun  * License.  See the file "COPYING" in the main directory of this archive
4*4882a593Smuzhiyun  * for more details.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Copyright (C) 1996, 1997, 1998, 2003 by Ralf Baechle
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun #ifndef __ASM_MACH_GENERIC_FLOPPY_H
9*4882a593Smuzhiyun #define __ASM_MACH_GENERIC_FLOPPY_H
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include <linux/delay.h>
12*4882a593Smuzhiyun #include <linux/ioport.h>
13*4882a593Smuzhiyun #include <linux/sched.h>
14*4882a593Smuzhiyun #include <linux/linkage.h>
15*4882a593Smuzhiyun #include <linux/types.h>
16*4882a593Smuzhiyun #include <linux/mm.h>
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #include <asm/bootinfo.h>
19*4882a593Smuzhiyun #include <asm/cachectl.h>
20*4882a593Smuzhiyun #include <asm/dma.h>
21*4882a593Smuzhiyun #include <asm/floppy.h>
22*4882a593Smuzhiyun #include <asm/io.h>
23*4882a593Smuzhiyun #include <asm/irq.h>
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /*
26*4882a593Smuzhiyun  * How to access the FDC's registers.
27*4882a593Smuzhiyun  */
fd_inb(unsigned int base,unsigned int reg)28*4882a593Smuzhiyun static inline unsigned char fd_inb(unsigned int base, unsigned int reg)
29*4882a593Smuzhiyun {
30*4882a593Smuzhiyun 	return inb_p(base + reg);
31*4882a593Smuzhiyun }
32*4882a593Smuzhiyun 
fd_outb(unsigned char value,unsigned int base,unsigned int reg)33*4882a593Smuzhiyun static inline void fd_outb(unsigned char value, unsigned int base, unsigned int reg)
34*4882a593Smuzhiyun {
35*4882a593Smuzhiyun 	outb_p(value, base + reg);
36*4882a593Smuzhiyun }
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun /*
39*4882a593Smuzhiyun  * How to access the floppy DMA functions.
40*4882a593Smuzhiyun  */
fd_enable_dma(void)41*4882a593Smuzhiyun static inline void fd_enable_dma(void)
42*4882a593Smuzhiyun {
43*4882a593Smuzhiyun 	enable_dma(FLOPPY_DMA);
44*4882a593Smuzhiyun }
45*4882a593Smuzhiyun 
fd_disable_dma(void)46*4882a593Smuzhiyun static inline void fd_disable_dma(void)
47*4882a593Smuzhiyun {
48*4882a593Smuzhiyun 	disable_dma(FLOPPY_DMA);
49*4882a593Smuzhiyun }
50*4882a593Smuzhiyun 
fd_request_dma(void)51*4882a593Smuzhiyun static inline int fd_request_dma(void)
52*4882a593Smuzhiyun {
53*4882a593Smuzhiyun 	return request_dma(FLOPPY_DMA, "floppy");
54*4882a593Smuzhiyun }
55*4882a593Smuzhiyun 
fd_free_dma(void)56*4882a593Smuzhiyun static inline void fd_free_dma(void)
57*4882a593Smuzhiyun {
58*4882a593Smuzhiyun 	free_dma(FLOPPY_DMA);
59*4882a593Smuzhiyun }
60*4882a593Smuzhiyun 
fd_clear_dma_ff(void)61*4882a593Smuzhiyun static inline void fd_clear_dma_ff(void)
62*4882a593Smuzhiyun {
63*4882a593Smuzhiyun 	clear_dma_ff(FLOPPY_DMA);
64*4882a593Smuzhiyun }
65*4882a593Smuzhiyun 
fd_set_dma_mode(char mode)66*4882a593Smuzhiyun static inline void fd_set_dma_mode(char mode)
67*4882a593Smuzhiyun {
68*4882a593Smuzhiyun 	set_dma_mode(FLOPPY_DMA, mode);
69*4882a593Smuzhiyun }
70*4882a593Smuzhiyun 
fd_set_dma_addr(char * addr)71*4882a593Smuzhiyun static inline void fd_set_dma_addr(char *addr)
72*4882a593Smuzhiyun {
73*4882a593Smuzhiyun 	set_dma_addr(FLOPPY_DMA, (unsigned long) addr);
74*4882a593Smuzhiyun }
75*4882a593Smuzhiyun 
fd_set_dma_count(unsigned int count)76*4882a593Smuzhiyun static inline void fd_set_dma_count(unsigned int count)
77*4882a593Smuzhiyun {
78*4882a593Smuzhiyun 	set_dma_count(FLOPPY_DMA, count);
79*4882a593Smuzhiyun }
80*4882a593Smuzhiyun 
fd_get_dma_residue(void)81*4882a593Smuzhiyun static inline int fd_get_dma_residue(void)
82*4882a593Smuzhiyun {
83*4882a593Smuzhiyun 	return get_dma_residue(FLOPPY_DMA);
84*4882a593Smuzhiyun }
85*4882a593Smuzhiyun 
fd_enable_irq(void)86*4882a593Smuzhiyun static inline void fd_enable_irq(void)
87*4882a593Smuzhiyun {
88*4882a593Smuzhiyun 	enable_irq(FLOPPY_IRQ);
89*4882a593Smuzhiyun }
90*4882a593Smuzhiyun 
fd_disable_irq(void)91*4882a593Smuzhiyun static inline void fd_disable_irq(void)
92*4882a593Smuzhiyun {
93*4882a593Smuzhiyun 	disable_irq(FLOPPY_IRQ);
94*4882a593Smuzhiyun }
95*4882a593Smuzhiyun 
fd_request_irq(void)96*4882a593Smuzhiyun static inline int fd_request_irq(void)
97*4882a593Smuzhiyun {
98*4882a593Smuzhiyun 	return request_irq(FLOPPY_IRQ, floppy_interrupt,
99*4882a593Smuzhiyun 			   0, "floppy", NULL);
100*4882a593Smuzhiyun }
101*4882a593Smuzhiyun 
fd_free_irq(void)102*4882a593Smuzhiyun static inline void fd_free_irq(void)
103*4882a593Smuzhiyun {
104*4882a593Smuzhiyun 	free_irq(FLOPPY_IRQ, NULL);
105*4882a593Smuzhiyun }
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun #define fd_free_irq()		free_irq(FLOPPY_IRQ, NULL);
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun 
fd_getfdaddr1(void)110*4882a593Smuzhiyun static inline unsigned long fd_getfdaddr1(void)
111*4882a593Smuzhiyun {
112*4882a593Smuzhiyun 	return 0x3f0;
113*4882a593Smuzhiyun }
114*4882a593Smuzhiyun 
fd_dma_mem_alloc(unsigned long size)115*4882a593Smuzhiyun static inline unsigned long fd_dma_mem_alloc(unsigned long size)
116*4882a593Smuzhiyun {
117*4882a593Smuzhiyun 	return __get_dma_pages(GFP_KERNEL, get_order(size));
118*4882a593Smuzhiyun }
119*4882a593Smuzhiyun 
fd_dma_mem_free(unsigned long addr,unsigned long size)120*4882a593Smuzhiyun static inline void fd_dma_mem_free(unsigned long addr, unsigned long size)
121*4882a593Smuzhiyun {
122*4882a593Smuzhiyun 	free_pages(addr, get_order(size));
123*4882a593Smuzhiyun }
124*4882a593Smuzhiyun 
fd_drive_type(unsigned long n)125*4882a593Smuzhiyun static inline unsigned long fd_drive_type(unsigned long n)
126*4882a593Smuzhiyun {
127*4882a593Smuzhiyun 	if (n == 0)
128*4882a593Smuzhiyun 		return 4;	/* 3,5", 1.44mb */
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun 	return 0;
131*4882a593Smuzhiyun }
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun #endif /* __ASM_MACH_GENERIC_FLOPPY_H */
134