Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
m68k
amiga
pcmcia.c
Go to the documentation of this file.
1
/*
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 !
5
**
6
** Copyright 1997 by Alain Malek
7
**
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
10
** for more details.
11
**
12
** Created: 12/10/97 by Alain Malek
13
*/
14
15
#include <linux/types.h>
16
#include <
linux/jiffies.h
>
17
#include <
linux/timer.h
>
18
#include <linux/module.h>
19
20
#include <
asm/amigayle.h
>
21
#include <
asm/amipcmcia.h
>
22
23
/* gayle config byte for program voltage and access speed */
24
static
unsigned
char
cfg_byte =
GAYLE_CFG_0V
|
GAYLE_CFG_150NS
;
25
26
void
pcmcia_reset
(
void
)
27
{
28
unsigned
long
reset_start_time =
jiffies
;
29
unsigned
char
b
;
30
31
gayle_reset
= 0x00;
32
while
(
time_before
(
jiffies
, reset_start_time + 1*
HZ
/100));
33
b =
gayle_reset
;
34
}
35
EXPORT_SYMBOL
(
pcmcia_reset
);
36
37
38
/* copy a tuple, including tuple header. return nb bytes copied */
39
/* be careful as this may trigger a GAYLE_IRQ_WR interrupt ! */
40
41
int
pcmcia_copy_tuple
(
unsigned
char
tuple_id,
void
*tuple,
int
max_len)
42
{
43
unsigned
char
id
, *
dest
;
44
int
cnt
,
pos
,
len
;
45
46
dest = tuple;
47
pos = 0;
48
49
id
=
gayle_attribute
[
pos
];
50
51
while
((
id
!=
CISTPL_END
) && (pos < 0x10000)) {
52
len = (
int
)
gayle_attribute
[pos+2] + 2;
53
if
(
id
== tuple_id) {
54
len = (len > max_len)?max_len:len;
55
for
(cnt = 0; cnt < len; cnt++) {
56
*dest++ =
gayle_attribute
[pos+(cnt<<1)];
57
}
58
59
return
len;
60
}
61
pos += len<<1;
62
id
=
gayle_attribute
[
pos
];
63
}
64
65
return
0;
66
}
67
EXPORT_SYMBOL
(
pcmcia_copy_tuple
);
68
69
void
pcmcia_program_voltage
(
int
voltage)
70
{
71
unsigned
char
v
;
72
73
switch
(voltage) {
74
case
PCMCIA_0V
:
75
v =
GAYLE_CFG_0V
;
76
break
;
77
case
PCMCIA_5V
:
78
v =
GAYLE_CFG_5V
;
79
break
;
80
case
PCMCIA_12V
:
81
v =
GAYLE_CFG_12V
;
82
break
;
83
default
:
84
v =
GAYLE_CFG_0V
;
85
}
86
87
cfg_byte = (cfg_byte & 0xfc) | v;
88
gayle
.config = cfg_byte;
89
90
}
91
EXPORT_SYMBOL
(
pcmcia_program_voltage
);
92
93
void
pcmcia_access_speed
(
int
speed)
94
{
95
unsigned
char
s
;
96
97
if
(speed <=
PCMCIA_SPEED_100NS
)
98
s =
GAYLE_CFG_100NS
;
99
else
if
(speed <=
PCMCIA_SPEED_150NS
)
100
s =
GAYLE_CFG_150NS
;
101
else
if
(speed <=
PCMCIA_SPEED_250NS
)
102
s =
GAYLE_CFG_250NS
;
103
else
104
s =
GAYLE_CFG_720NS
;
105
106
cfg_byte = (cfg_byte & 0xf3) | s;
107
gayle
.config = cfg_byte;
108
}
109
EXPORT_SYMBOL
(
pcmcia_access_speed
);
110
111
void
pcmcia_write_enable
(
void
)
112
{
113
gayle
.cardstatus =
GAYLE_CS_WR
|
GAYLE_CS_DA
;
114
}
115
EXPORT_SYMBOL
(
pcmcia_write_enable
);
116
117
void
pcmcia_write_disable
(
void
)
118
{
119
gayle
.cardstatus = 0;
120
}
121
EXPORT_SYMBOL
(
pcmcia_write_disable
);
122
Generated on Thu Jan 10 2013 13:07:43 for Linux Kernel by
1.8.2