The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/include/asm-alpha/floppy.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    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 static int FDC1 = 0x3f0;
   80 static int FDC2 = -1;
   81 
   82 /*
   83  * Again, the CMOS information doesn't work on the alpha..
   84  */
   85 #define FLOPPY0_TYPE 6
   86 #define FLOPPY1_TYPE 0
   87 
   88 #define N_FDC 2
   89 #define N_DRIVE 8
   90 
   91 #define FLOPPY_MOTOR_MASK 0xf0
   92 
   93 /*
   94  * Most Alphas have no problems with floppy DMA crossing 64k borders,
   95  * except for certain ones, like XL and RUFFIAN.
   96  *
   97  * However, the test is simple and fast, and this *is* floppy, after all,
   98  * so we do it for all platforms, just to make sure.
   99  *
  100  * This is advantageous in other circumstances as well, as in moving
  101  * about the PCI DMA windows and forcing the floppy to start doing
  102  * scatter-gather when it never had before, and there *is* a problem
  103  * on that platform... ;-}
  104  */
  105 
  106 #define CROSS_64KB(a,s)                                         \
  107 ({ unsigned long __s64 = (unsigned long)(a);                    \
  108    unsigned long __e64 = __s64 + (unsigned long)(s) - 1;        \
  109    (__s64 ^ __e64) & ~0xfffful; })
  110 
  111 #define EXTRA_FLOPPY_PARAMS
  112 
  113 #endif /* __ASM_ALPHA_FLOPPY_H */

Cache object: 05b6b882ae17e01fe3062760fac07682


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.