2 ** asm-m68k/pcmcia.c -- Amiga Linux PCMCIA support
3 ** most information was found by disassembling card.resource
4 ** I'm still looking for an official doc !
6 ** Copyright 1997 by Alain Malek
8 ** This file is subject to the terms and conditions of the GNU General Public
9 ** License. See the file COPYING in the main directory of this archive
12 ** Created: 12/10/97 by Alain Malek
15 #include <linux/types.h>
16 #include <linux/jiffies.h>
17 #include <linux/timer.h>
18 #include <linux/module.h>
20 #include <asm/amigayle.h>
21 #include <asm/amipcmcia.h>
23 /* gayle config byte for program voltage and access speed */
24 static unsigned char cfg_byte
= GAYLE_CFG_0V
|GAYLE_CFG_150NS
;
26 void pcmcia_reset(void)
28 unsigned long reset_start_time
= jiffies
;
32 while (time_before(jiffies
, reset_start_time
+ 1*HZ
/100));
35 EXPORT_SYMBOL(pcmcia_reset
);
38 /* copy a tuple, including tuple header. return nb bytes copied */
39 /* be careful as this may trigger a GAYLE_IRQ_WR interrupt ! */
41 int pcmcia_copy_tuple(unsigned char tuple_id
, void *tuple
, int max_len
)
43 unsigned char id
, *dest
;
49 id
= gayle_attribute
[pos
];
51 while((id
!= CISTPL_END
) && (pos
< 0x10000)) {
52 len
= (int)gayle_attribute
[pos
+2] + 2;
54 len
= (len
> max_len
)?max_len
:len
;
55 for (cnt
= 0; cnt
< len
; cnt
++) {
56 *dest
++ = gayle_attribute
[pos
+(cnt
<<1)];
62 id
= gayle_attribute
[pos
];
67 EXPORT_SYMBOL(pcmcia_copy_tuple
);
69 void pcmcia_program_voltage(int voltage
)
87 cfg_byte
= (cfg_byte
& 0xfc) | v
;
88 gayle
.config
= cfg_byte
;
91 EXPORT_SYMBOL(pcmcia_program_voltage
);
93 void pcmcia_access_speed(int speed
)
97 if (speed
<= PCMCIA_SPEED_100NS
)
99 else if (speed
<= PCMCIA_SPEED_150NS
)
101 else if (speed
<= PCMCIA_SPEED_250NS
)
106 cfg_byte
= (cfg_byte
& 0xf3) | s
;
107 gayle
.config
= cfg_byte
;
109 EXPORT_SYMBOL(pcmcia_access_speed
);
111 void pcmcia_write_enable(void)
113 gayle
.cardstatus
= GAYLE_CS_WR
|GAYLE_CS_DA
;
115 EXPORT_SYMBOL(pcmcia_write_enable
);
117 void pcmcia_write_disable(void)
119 gayle
.cardstatus
= 0;
121 EXPORT_SYMBOL(pcmcia_write_disable
);