linux/drivers/pcmcia/au1000_generic.h
<<
>>
Prefs
   1/*
   2 * Alchemy Semi Au1000 pcmcia driver include file
   3 *
   4 * Copyright 2001 MontaVista Software Inc.
   5 * Author: MontaVista Software, Inc.
   6 *              ppopov@mvista.com or source@mvista.com
   7 *
   8 *  This program is free software; you can distribute it and/or modify it
   9 *  under the terms of the GNU General Public License (Version 2) as
  10 *  published by the Free Software Foundation.
  11 *
  12 *  This program is distributed in the hope it will be useful, but WITHOUT
  13 *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  14 *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  15 *  for more details.
  16 *
  17 *  You should have received a copy of the GNU General Public License along
  18 *  with this program; if not, write to the Free Software Foundation, Inc.,
  19 *  59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
  20 */
  21#ifndef __ASM_AU1000_PCMCIA_H
  22#define __ASM_AU1000_PCMCIA_H
  23
  24/* include the world */
  25
  26#include <pcmcia/ss.h>
  27#include <pcmcia/cistpl.h>
  28#include "cs_internal.h"
  29
  30#define AU1000_PCMCIA_POLL_PERIOD    (2*HZ)
  31#define AU1000_PCMCIA_IO_SPEED       (255)
  32#define AU1000_PCMCIA_MEM_SPEED      (300)
  33
  34#define AU1X_SOCK0_IO        0xF00000000ULL
  35#define AU1X_SOCK0_PHYS_ATTR 0xF40000000ULL
  36#define AU1X_SOCK0_PHYS_MEM  0xF80000000ULL
  37
  38/* pcmcia socket 1 needs external glue logic so the memory map
  39 * differs from board to board.
  40 */
  41#if defined(CONFIG_MIPS_PB1000)
  42#define AU1X_SOCK1_IO        0xF08000000ULL
  43#define AU1X_SOCK1_PHYS_ATTR 0xF48000000ULL
  44#define AU1X_SOCK1_PHYS_MEM  0xF88000000ULL
  45#endif
  46
  47struct pcmcia_state {
  48  unsigned detect: 1,
  49            ready: 1,
  50           wrprot: 1,
  51             bvd1: 1,
  52             bvd2: 1,
  53            vs_3v: 1,
  54            vs_Xv: 1;
  55};
  56
  57struct pcmcia_configure {
  58  unsigned sock: 8,
  59            vcc: 8,
  60            vpp: 8,
  61         output: 1,
  62        speaker: 1,
  63          reset: 1;
  64};
  65
  66struct pcmcia_irqs {
  67        int sock;
  68        int irq;
  69        const char *str;
  70};
  71
  72
  73struct au1000_pcmcia_socket {
  74        struct pcmcia_socket socket;
  75
  76        /*
  77         * Info from low level handler
  78         */
  79        struct device           *dev;
  80        unsigned int            nr;
  81        unsigned int            irq;
  82
  83        /*
  84         * Core PCMCIA state
  85         */
  86        struct pcmcia_low_level *ops;
  87
  88        unsigned int            status;
  89        socket_state_t          cs_state;
  90
  91        unsigned short          spd_io[MAX_IO_WIN];
  92        unsigned short          spd_mem[MAX_WIN];
  93        unsigned short          spd_attr[MAX_WIN];
  94
  95        struct resource         res_skt;
  96        struct resource         res_io;
  97        struct resource         res_mem;
  98        struct resource         res_attr;
  99
 100        void *                  virt_io;
 101        unsigned int            phys_io;
 102        unsigned int            phys_attr;
 103        unsigned int            phys_mem;
 104        unsigned short          speed_io, speed_attr, speed_mem;
 105
 106        unsigned int            irq_state;
 107
 108        struct timer_list       poll_timer;
 109};
 110
 111struct pcmcia_low_level {
 112        struct module *owner;
 113
 114        int (*hw_init)(struct au1000_pcmcia_socket *);
 115        void (*hw_shutdown)(struct au1000_pcmcia_socket *);
 116
 117        void (*socket_state)(struct au1000_pcmcia_socket *, struct pcmcia_state *);
 118        int (*configure_socket)(struct au1000_pcmcia_socket *, struct socket_state_t *);
 119
 120        /*
 121         * Enable card status IRQs on (re-)initialisation.  This can
 122         * be called at initialisation, power management event, or
 123         * pcmcia event.
 124         */
 125        void (*socket_init)(struct au1000_pcmcia_socket *);
 126
 127        /*
 128         * Disable card status IRQs and PCMCIA bus on suspend.
 129         */
 130        void (*socket_suspend)(struct au1000_pcmcia_socket *);
 131};
 132
 133extern int au1x_board_init(struct device *dev);
 134
 135#endif /* __ASM_AU1000_PCMCIA_H */
 136