1384740dcSRalf Baechle /* 2384740dcSRalf Baechle * This file is subject to the terms and conditions of the GNU General Public 3384740dcSRalf Baechle * License. See the file "COPYING" in the main directory of this archive 4384740dcSRalf Baechle * for more details. 5384740dcSRalf Baechle * 6384740dcSRalf Baechle * Copyright (C) 1996, 1997, 1998, 2003 by Ralf Baechle 7384740dcSRalf Baechle */ 8384740dcSRalf Baechle #ifndef __ASM_MACH_GENERIC_FLOPPY_H 9384740dcSRalf Baechle #define __ASM_MACH_GENERIC_FLOPPY_H 10384740dcSRalf Baechle 11384740dcSRalf Baechle #include <linux/delay.h> 12384740dcSRalf Baechle #include <linux/ioport.h> 13384740dcSRalf Baechle #include <linux/sched.h> 14384740dcSRalf Baechle #include <linux/linkage.h> 15384740dcSRalf Baechle #include <linux/types.h> 16384740dcSRalf Baechle #include <linux/mm.h> 17384740dcSRalf Baechle 18384740dcSRalf Baechle #include <asm/bootinfo.h> 19384740dcSRalf Baechle #include <asm/cachectl.h> 20384740dcSRalf Baechle #include <asm/dma.h> 21384740dcSRalf Baechle #include <asm/floppy.h> 22384740dcSRalf Baechle #include <asm/io.h> 23384740dcSRalf Baechle #include <asm/irq.h> 24384740dcSRalf Baechle #include <asm/pgtable.h> 25384740dcSRalf Baechle 26384740dcSRalf Baechle /* 27384740dcSRalf Baechle * How to access the FDC's registers. 28384740dcSRalf Baechle */ 29*e72e8bf1SWilly Tarreau static inline unsigned char fd_inb(unsigned int base, unsigned int reg) 30384740dcSRalf Baechle { 31*e72e8bf1SWilly Tarreau return inb_p(base + reg); 32384740dcSRalf Baechle } 33384740dcSRalf Baechle 34*e72e8bf1SWilly Tarreau static inline void fd_outb(unsigned char value, unsigned int base, unsigned int reg) 35384740dcSRalf Baechle { 36*e72e8bf1SWilly Tarreau outb_p(value, base + reg); 37384740dcSRalf Baechle } 38384740dcSRalf Baechle 39384740dcSRalf Baechle /* 40384740dcSRalf Baechle * How to access the floppy DMA functions. 41384740dcSRalf Baechle */ 42384740dcSRalf Baechle static inline void fd_enable_dma(void) 43384740dcSRalf Baechle { 44384740dcSRalf Baechle enable_dma(FLOPPY_DMA); 45384740dcSRalf Baechle } 46384740dcSRalf Baechle 47384740dcSRalf Baechle static inline void fd_disable_dma(void) 48384740dcSRalf Baechle { 49384740dcSRalf Baechle disable_dma(FLOPPY_DMA); 50384740dcSRalf Baechle } 51384740dcSRalf Baechle 52384740dcSRalf Baechle static inline int fd_request_dma(void) 53384740dcSRalf Baechle { 54384740dcSRalf Baechle return request_dma(FLOPPY_DMA, "floppy"); 55384740dcSRalf Baechle } 56384740dcSRalf Baechle 57384740dcSRalf Baechle static inline void fd_free_dma(void) 58384740dcSRalf Baechle { 59384740dcSRalf Baechle free_dma(FLOPPY_DMA); 60384740dcSRalf Baechle } 61384740dcSRalf Baechle 62384740dcSRalf Baechle static inline void fd_clear_dma_ff(void) 63384740dcSRalf Baechle { 64384740dcSRalf Baechle clear_dma_ff(FLOPPY_DMA); 65384740dcSRalf Baechle } 66384740dcSRalf Baechle 67384740dcSRalf Baechle static inline void fd_set_dma_mode(char mode) 68384740dcSRalf Baechle { 69384740dcSRalf Baechle set_dma_mode(FLOPPY_DMA, mode); 70384740dcSRalf Baechle } 71384740dcSRalf Baechle 72384740dcSRalf Baechle static inline void fd_set_dma_addr(char *addr) 73384740dcSRalf Baechle { 74384740dcSRalf Baechle set_dma_addr(FLOPPY_DMA, (unsigned long) addr); 75384740dcSRalf Baechle } 76384740dcSRalf Baechle 77384740dcSRalf Baechle static inline void fd_set_dma_count(unsigned int count) 78384740dcSRalf Baechle { 79384740dcSRalf Baechle set_dma_count(FLOPPY_DMA, count); 80384740dcSRalf Baechle } 81384740dcSRalf Baechle 82384740dcSRalf Baechle static inline int fd_get_dma_residue(void) 83384740dcSRalf Baechle { 84384740dcSRalf Baechle return get_dma_residue(FLOPPY_DMA); 85384740dcSRalf Baechle } 86384740dcSRalf Baechle 87384740dcSRalf Baechle static inline void fd_enable_irq(void) 88384740dcSRalf Baechle { 89384740dcSRalf Baechle enable_irq(FLOPPY_IRQ); 90384740dcSRalf Baechle } 91384740dcSRalf Baechle 92384740dcSRalf Baechle static inline void fd_disable_irq(void) 93384740dcSRalf Baechle { 94384740dcSRalf Baechle disable_irq(FLOPPY_IRQ); 95384740dcSRalf Baechle } 96384740dcSRalf Baechle 97384740dcSRalf Baechle static inline int fd_request_irq(void) 98384740dcSRalf Baechle { 99384740dcSRalf Baechle return request_irq(FLOPPY_IRQ, floppy_interrupt, 1008b5690f8SYong Zhang 0, "floppy", NULL); 101384740dcSRalf Baechle } 102384740dcSRalf Baechle 103384740dcSRalf Baechle static inline void fd_free_irq(void) 104384740dcSRalf Baechle { 105384740dcSRalf Baechle free_irq(FLOPPY_IRQ, NULL); 106384740dcSRalf Baechle } 107384740dcSRalf Baechle 108384740dcSRalf Baechle #define fd_free_irq() free_irq(FLOPPY_IRQ, NULL); 109384740dcSRalf Baechle 110384740dcSRalf Baechle 111384740dcSRalf Baechle static inline unsigned long fd_getfdaddr1(void) 112384740dcSRalf Baechle { 113384740dcSRalf Baechle return 0x3f0; 114384740dcSRalf Baechle } 115384740dcSRalf Baechle 116384740dcSRalf Baechle static inline unsigned long fd_dma_mem_alloc(unsigned long size) 117384740dcSRalf Baechle { 118db19462bSMasahiro Yamada return __get_dma_pages(GFP_KERNEL, get_order(size)); 119384740dcSRalf Baechle } 120384740dcSRalf Baechle 121384740dcSRalf Baechle static inline void fd_dma_mem_free(unsigned long addr, unsigned long size) 122384740dcSRalf Baechle { 123384740dcSRalf Baechle free_pages(addr, get_order(size)); 124384740dcSRalf Baechle } 125384740dcSRalf Baechle 126384740dcSRalf Baechle static inline unsigned long fd_drive_type(unsigned long n) 127384740dcSRalf Baechle { 128384740dcSRalf Baechle if (n == 0) 129384740dcSRalf Baechle return 4; /* 3,5", 1.44mb */ 130384740dcSRalf Baechle 131384740dcSRalf Baechle return 0; 132384740dcSRalf Baechle } 133384740dcSRalf Baechle 134384740dcSRalf Baechle #endif /* __ASM_MACH_GENERIC_FLOPPY_H */ 135