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