linux/arch/mips/include/asm/mach-jazz/floppy.h
<<
>>
Prefs
   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) 1998, 2003 by Ralf Baechle
   7 */
   8#ifndef __ASM_MACH_JAZZ_FLOPPY_H
   9#define __ASM_MACH_JAZZ_FLOPPY_H
  10
  11#include <linux/delay.h>
  12#include <linux/linkage.h>
  13#include <linux/types.h>
  14#include <linux/mm.h>
  15#include <asm/addrspace.h>
  16#include <asm/jazz.h>
  17#include <asm/jazzdma.h>
  18#include <asm/pgtable.h>
  19
  20static inline unsigned char fd_inb(unsigned int port)
  21{
  22        unsigned char c;
  23
  24        c = *(volatile unsigned char *) port;
  25        udelay(1);
  26
  27        return c;
  28}
  29
  30static inline void fd_outb(unsigned char value, unsigned int port)
  31{
  32        *(volatile unsigned char *) port = value;
  33}
  34
  35/*
  36 * How to access the floppy DMA functions.
  37 */
  38static inline void fd_enable_dma(void)
  39{
  40        vdma_enable(JAZZ_FLOPPY_DMA);
  41}
  42
  43static inline void fd_disable_dma(void)
  44{
  45        vdma_disable(JAZZ_FLOPPY_DMA);
  46}
  47
  48static inline int fd_request_dma(void)
  49{
  50        return 0;
  51}
  52
  53static inline void fd_free_dma(void)
  54{
  55}
  56
  57static inline void fd_clear_dma_ff(void)
  58{
  59}
  60
  61static inline void fd_set_dma_mode(char mode)
  62{
  63        vdma_set_mode(JAZZ_FLOPPY_DMA, mode);
  64}
  65
  66static inline void fd_set_dma_addr(char *a)
  67{
  68        vdma_set_addr(JAZZ_FLOPPY_DMA, vdma_phys2log(CPHYSADDR((unsigned long)a)));
  69}
  70
  71static inline void fd_set_dma_count(unsigned int count)
  72{
  73        vdma_set_count(JAZZ_FLOPPY_DMA, count);
  74}
  75
  76static inline int fd_get_dma_residue(void)
  77{
  78        return vdma_get_residue(JAZZ_FLOPPY_DMA);
  79}
  80
  81static inline void fd_enable_irq(void)
  82{
  83}
  84
  85static inline void fd_disable_irq(void)
  86{
  87}
  88
  89static inline int fd_request_irq(void)
  90{
  91        return request_irq(FLOPPY_IRQ, floppy_interrupt,
  92                           0, "floppy", NULL);
  93}
  94
  95static inline void fd_free_irq(void)
  96{
  97        free_irq(FLOPPY_IRQ, NULL);
  98}
  99
 100static inline unsigned long fd_getfdaddr1(void)
 101{
 102        return JAZZ_FDC_BASE;
 103}
 104
 105static inline unsigned long fd_dma_mem_alloc(unsigned long size)
 106{
 107        unsigned long mem;
 108
 109        mem = __get_dma_pages(GFP_KERNEL, get_order(size));
 110        if(!mem)
 111                return 0;
 112        vdma_alloc(CPHYSADDR(mem), size);       /* XXX error checking */
 113
 114        return mem;
 115}
 116
 117static inline void fd_dma_mem_free(unsigned long addr, unsigned long size)
 118{
 119        vdma_free(vdma_phys2log(CPHYSADDR(addr)));
 120        free_pages(addr, get_order(size));
 121}
 122
 123static inline unsigned long fd_drive_type(unsigned long n)
 124{
 125        /* XXX This is wrong for machines with ED 2.88mb disk drives like the
 126           Olivetti M700.  Anyway, we should suck this from the ARC
 127           firmware.  */
 128        if (n == 0)
 129                return 4;       /* 3,5", 1.44mb */
 130
 131        return 0;
 132}
 133
 134#endif /* __ASM_MACH_JAZZ_FLOPPY_H */
 135