floppy.h (2503B)
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 */ 28static inline unsigned char fd_inb(unsigned int base, unsigned int reg) 29{ 30 return inb_p(base + reg); 31} 32 33static 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 */ 41static inline void fd_enable_dma(void) 42{ 43 enable_dma(FLOPPY_DMA); 44} 45 46static inline void fd_disable_dma(void) 47{ 48 disable_dma(FLOPPY_DMA); 49} 50 51static inline int fd_request_dma(void) 52{ 53 return request_dma(FLOPPY_DMA, "floppy"); 54} 55 56static inline void fd_free_dma(void) 57{ 58 free_dma(FLOPPY_DMA); 59} 60 61static inline void fd_clear_dma_ff(void) 62{ 63 clear_dma_ff(FLOPPY_DMA); 64} 65 66static inline void fd_set_dma_mode(char mode) 67{ 68 set_dma_mode(FLOPPY_DMA, mode); 69} 70 71static inline void fd_set_dma_addr(char *addr) 72{ 73 set_dma_addr(FLOPPY_DMA, (unsigned long) addr); 74} 75 76static inline void fd_set_dma_count(unsigned int count) 77{ 78 set_dma_count(FLOPPY_DMA, count); 79} 80 81static inline int fd_get_dma_residue(void) 82{ 83 return get_dma_residue(FLOPPY_DMA); 84} 85 86static inline void fd_enable_irq(void) 87{ 88 enable_irq(FLOPPY_IRQ); 89} 90 91static inline void fd_disable_irq(void) 92{ 93 disable_irq(FLOPPY_IRQ); 94} 95 96static inline int fd_request_irq(void) 97{ 98 return request_irq(FLOPPY_IRQ, floppy_interrupt, 99 0, "floppy", NULL); 100} 101 102static 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 110static inline unsigned long fd_getfdaddr1(void) 111{ 112 return 0x3f0; 113} 114 115static inline unsigned long fd_dma_mem_alloc(unsigned long size) 116{ 117 return __get_dma_pages(GFP_KERNEL, get_order(size)); 118} 119 120static inline void fd_dma_mem_free(unsigned long addr, unsigned long size) 121{ 122 free_pages(addr, get_order(size)); 123} 124 125static 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 */