home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-powerpc / floppy.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.8 KB  |  108 lines

  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_POWERPC_FLOPPY_H
  11. #define __ASM_POWERPC_FLOPPY_H
  12. #ifdef __KERNEL__
  13.  
  14. #include <asm/machdep.h>
  15.  
  16. #define fd_inb(port)        inb_p(port)
  17. #define fd_outb(value,port)    outb_p(value,port)
  18.  
  19. #define fd_enable_dma()         enable_dma(FLOPPY_DMA)
  20. #define fd_disable_dma()        disable_dma(FLOPPY_DMA)
  21. #define fd_request_dma()        request_dma(FLOPPY_DMA, "floppy")
  22. #define fd_free_dma()           free_dma(FLOPPY_DMA)
  23. #define fd_clear_dma_ff()       clear_dma_ff(FLOPPY_DMA)
  24. #define fd_set_dma_mode(mode)   set_dma_mode(FLOPPY_DMA, mode)
  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. #include <asm/ppc-pci.h>    /* for ppc64_isabridge_dev */
  38.  
  39. #define fd_dma_setup(addr,size,mode,io) powerpc_fd_dma_setup(addr,size,mode,io)
  40.  
  41. static __inline__ int powerpc_fd_dma_setup(char *addr, unsigned long size,
  42.                        int mode, int io)
  43. {
  44.     static unsigned long prev_size;
  45.     static dma_addr_t bus_addr = 0;
  46.     static char *prev_addr;
  47.     static int prev_dir;
  48.     int dir;
  49.  
  50.     dir = (mode == DMA_MODE_READ) ? PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE;
  51.  
  52.     if (bus_addr 
  53.         && (addr != prev_addr || size != prev_size || dir != prev_dir)) {
  54.         /* different from last time -- unmap prev */
  55.         pci_unmap_single(ppc64_isabridge_dev, bus_addr, prev_size, prev_dir);
  56.         bus_addr = 0;
  57.     }
  58.  
  59.     if (!bus_addr)    /* need to map it */
  60.         bus_addr = pci_map_single(ppc64_isabridge_dev, addr, size, dir);
  61.  
  62.     /* remember this one as prev */
  63.     prev_addr = addr;
  64.     prev_size = size;
  65.     prev_dir = dir;
  66.  
  67.     fd_clear_dma_ff();
  68.     fd_cacheflush(addr, size);
  69.     fd_set_dma_mode(mode);
  70.     set_dma_addr(FLOPPY_DMA, bus_addr);
  71.     fd_set_dma_count(size);
  72.     virtual_dma_port = io;
  73.     fd_enable_dma();
  74.  
  75.     return 0;
  76. }
  77.  
  78. #endif /* CONFIG_PCI */
  79.  
  80. __inline__ void virtual_dma_init(void)
  81. {
  82.     /* Nothing to do on PowerPC */
  83. }
  84.  
  85. static int FDC1 = 0x3f0;
  86. static int FDC2 = -1;
  87.  
  88. /*
  89.  * Again, the CMOS information not available
  90.  */
  91. #define FLOPPY0_TYPE 6
  92. #define FLOPPY1_TYPE 0
  93.  
  94. #define N_FDC 2            /* Don't change this! */
  95. #define N_DRIVE 8
  96.  
  97. #define FLOPPY_MOTOR_MASK 0xf0
  98.  
  99. /*
  100.  * The PowerPC has no problems with floppy DMA crossing 64k borders.
  101.  */
  102. #define CROSS_64KB(a,s)    (0)
  103.  
  104. #define EXTRA_FLOPPY_PARAMS
  105.  
  106. #endif /* __KERNEL__ */
  107. #endif /* __ASM_POWERPC_FLOPPY_H */
  108.