~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/include/asm-alpha/floppy.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * Architecture specific parts of the Floppy driver
  3  *
  4  * This file is subject to the terms and conditions of the GNU General Public
  5  * License.  See the file "COPYING" in the main directory of this archive
  6  * for more details.
  7  *
  8  * Copyright (C) 1995
  9  */
 10 #ifndef __ASM_ALPHA_FLOPPY_H
 11 #define __ASM_ALPHA_FLOPPY_H
 12 
 13 #include <linux/config.h>
 14 
 15 #define fd_inb(port)                    inb_p(port)
 16 #define fd_outb(port,value)             outb_p(port,value)
 17 
 18 #define fd_enable_dma()         enable_dma(FLOPPY_DMA)
 19 #define fd_disable_dma()        disable_dma(FLOPPY_DMA)
 20 #define fd_request_dma()        request_dma(FLOPPY_DMA,"floppy")
 21 #define fd_free_dma()           free_dma(FLOPPY_DMA)
 22 #define fd_clear_dma_ff()       clear_dma_ff(FLOPPY_DMA)
 23 #define fd_set_dma_mode(mode)   set_dma_mode(FLOPPY_DMA,mode)
 24 #define fd_set_dma_addr(addr)   set_dma_addr(FLOPPY_DMA,virt_to_bus(addr))
 25 #define fd_set_dma_count(count) set_dma_count(FLOPPY_DMA,count)
 26 #define fd_enable_irq()         enable_irq(FLOPPY_IRQ)
 27 #define fd_disable_irq()        disable_irq(FLOPPY_IRQ)
 28 #define fd_cacheflush(addr,size) /* nothing */
 29 #define fd_request_irq()        request_irq(FLOPPY_IRQ, floppy_interrupt, \
 30                                             SA_INTERRUPT|SA_SAMPLE_RANDOM, \
 31                                             "floppy", NULL)
 32 #define fd_free_irq()           free_irq(FLOPPY_IRQ, NULL);
 33 
 34 #ifdef CONFIG_PCI
 35 
 36 #include <linux/pci.h>
 37 
 38 #define fd_dma_setup(addr,size,mode,io) alpha_fd_dma_setup(addr,size,mode,io)
 39 
 40 static __inline__ int 
 41 alpha_fd_dma_setup(char *addr, unsigned long size, int mode, int io)
 42 {
 43         static unsigned long prev_size;
 44         static dma_addr_t bus_addr = 0;
 45         static char *prev_addr;
 46         static int prev_dir;
 47         int dir;
 48 
 49         dir = (mode != DMA_MODE_READ) ? PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE;
 50 
 51         if (bus_addr 
 52             && (addr != prev_addr || size != prev_size || dir != prev_dir)) {
 53                 /* different from last time -- unmap prev */
 54                 pci_unmap_single(NULL, bus_addr, prev_size, prev_dir);
 55                 bus_addr = 0;
 56         }
 57 
 58         if (!bus_addr)  /* need to map it */
 59                 bus_addr = pci_map_single(NULL, addr, size, dir);
 60 
 61         /* remember this one as prev */
 62         prev_addr = addr;
 63         prev_size = size;
 64         prev_dir = dir;
 65 
 66         fd_clear_dma_ff();
 67         fd_cacheflush(addr, size);
 68         fd_set_dma_mode(mode);
 69         set_dma_addr(FLOPPY_DMA, bus_addr);
 70         fd_set_dma_count(size);
 71         virtual_dma_port = io;
 72         fd_enable_dma();
 73 
 74         return 0;
 75 }
 76 
 77 #endif /* CONFIG_PCI */
 78 
 79 __inline__ void virtual_dma_init(void)
 80 {
 81         /* Nothing to do on an Alpha */
 82 }
 83 
 84 static int FDC1 = 0x3f0;
 85 static int FDC2 = -1;
 86 
 87 /*
 88  * Again, the CMOS information doesn't work on the alpha..
 89  */
 90 #define FLOPPY0_TYPE 6
 91 #define FLOPPY1_TYPE 0
 92 
 93 #define N_FDC 2
 94 #define N_DRIVE 8
 95 
 96 #define FLOPPY_MOTOR_MASK 0xf0
 97 
 98 /*
 99  * Most Alphas have no problems with floppy DMA crossing 64k borders,
100  * except for XL and RUFFIAN.  They are also the only one with DMA
101  * limits, so we use that to test in the generic kernel.
102  */
103 
104 #define __CROSS_64KB(a,s)                                       \
105 ({ unsigned long __s64 = (unsigned long)(a);                    \
106    unsigned long __e64 = __s64 + (unsigned long)(s) - 1;        \
107    (__s64 ^ __e64) & ~0xfffful; })
108 
109 #ifdef CONFIG_ALPHA_GENERIC
110 # define CROSS_64KB(a,s)   (__CROSS_64KB(a,s) && ~alpha_mv.max_dma_address)
111 #else
112 # if defined(CONFIG_ALPHA_XL) || defined(CONFIG_ALPHA_RUFFIAN) || defined(CONFIG_ALPHA_NAUTILUS)
113 #  define CROSS_64KB(a,s)  __CROSS_64KB(a,s)
114 # else
115 #  define CROSS_64KB(a,s)  (0)
116 # endif
117 #endif
118 
119 #endif /* __ASM_ALPHA_FLOPPY_H */
120 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.