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 <asm/amigayle.h>
19 #include <asm/amipcmcia.h>
21 /* gayle config byte for program voltage and access speed */
22 static unsigned char cfg_byte
= GAYLE_CFG_0V
|GAYLE_CFG_150NS
;
24 void pcmcia_reset(void)
26 unsigned long reset_start_time
= jiffies
;
30 while (time_before(jiffies
, reset_start_time
+ 1*HZ
/100));
35 /* copy a tuple, including tuple header. return nb bytes copied */
36 /* be carefull as this may trigger a GAYLE_IRQ_WR interrupt ! */
38 int pcmcia_copy_tuple(unsigned char tuple_id
, void *tuple
, int max_len
)
40 unsigned char id
, *dest
;
46 id
= gayle_attribute
[pos
];
48 while((id
!= CISTPL_END
) && (pos
< 0x10000)) {
49 len
= (int)gayle_attribute
[pos
+2] + 2;
51 len
= (len
> max_len
)?max_len
:len
;
52 for (cnt
= 0; cnt
< len
; cnt
++) {
53 *dest
++ = gayle_attribute
[pos
+(cnt
<<1)];
59 id
= gayle_attribute
[pos
];
65 void pcmcia_program_voltage(int voltage
)
83 cfg_byte
= (cfg_byte
& 0xfc) | v
;
84 gayle
.config
= cfg_byte
;
88 void pcmcia_access_speed(int speed
)
92 if (speed
<= PCMCIA_SPEED_100NS
)
94 else if (speed
<= PCMCIA_SPEED_150NS
)
96 else if (speed
<= PCMCIA_SPEED_250NS
)
101 cfg_byte
= (cfg_byte
& 0xf3) | s
;
102 gayle
.config
= cfg_byte
;
105 void pcmcia_write_enable(void)
107 gayle
.cardstatus
= GAYLE_CS_WR
|GAYLE_CS_DA
;
110 void pcmcia_write_disable(void)
112 gayle
.cardstatus
= 0;