1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28#ifndef __ASM_AU1000_PCMCIA_H
29#define __ASM_AU1000_PCMCIA_H
30
31
32#define AU1000_PCMCIA_POLL_PERIOD (2*HZ)
33#define AU1000_PCMCIA_IO_SPEED (255)
34#define AU1000_PCMCIA_MEM_SPEED (300)
35
36#define AU1X_SOCK0_IO 0xF00000000
37#define AU1X_SOCK0_PHYS_ATTR 0xF40000000
38#define AU1X_SOCK0_PHYS_MEM 0xF80000000
39
40
41
42
43#if defined(CONFIG_MIPS_PB1000) || defined(CONFIG_MIPS_PB1100) || defined(CONFIG_MIPS_PB1500)
44#define AU1X_SOCK1_IO 0xF08000000
45#define AU1X_SOCK1_PHYS_ATTR 0xF48000000
46#define AU1X_SOCK1_PHYS_MEM 0xF88000000
47#elif defined(CONFIG_MIPS_DB1000) || defined(CONFIG_MIPS_DB1100) || defined(CONFIG_MIPS_DB1500) || defined(CONFIG_MIPS_PB1550) || defined(CONFIG_MIPS_DB1550)
48#define AU1X_SOCK1_IO 0xF04000000
49#define AU1X_SOCK1_PHYS_ATTR 0xF44000000
50#define AU1X_SOCK1_PHYS_MEM 0xF84000000
51#endif
52
53struct pcmcia_state {
54 unsigned detect: 1,
55 ready: 1,
56 wrprot: 1,
57 bvd1: 1,
58 bvd2: 1,
59 vs_3v: 1,
60 vs_Xv: 1;
61};
62
63struct pcmcia_configure {
64 unsigned sock: 8,
65 vcc: 8,
66 vpp: 8,
67 output: 1,
68 speaker: 1,
69 reset: 1;
70};
71
72struct pcmcia_irq_info {
73 unsigned int sock;
74 unsigned int irq;
75};
76
77
78struct au1000_pcmcia_socket {
79 socket_state_t cs_state;
80 struct pcmcia_state k_state;
81 unsigned int irq;
82 void (*handler)(void *, unsigned int);
83 void *handler_info;
84 pccard_io_map io_map[MAX_IO_WIN];
85 pccard_mem_map mem_map[MAX_WIN];
86 u32 virt_io;
87 ioaddr_t phys_attr, phys_mem;
88 unsigned short speed_io, speed_attr, speed_mem;
89};
90
91struct pcmcia_init {
92 void (*handler)(int irq, void *dev, struct pt_regs *regs);
93};
94
95struct pcmcia_low_level {
96 int (*init)(struct pcmcia_init *);
97 int (*shutdown)(void);
98 int (*socket_state)(unsigned sock, struct pcmcia_state *);
99 int (*get_irq_info)(struct pcmcia_irq_info *);
100 int (*configure_socket)(const struct pcmcia_configure *);
101};
102
103extern struct pcmcia_low_level au1x00_pcmcia_ops;
104#endif
105