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
drivers
mmc
host
cb710-mmc.h
Go to the documentation of this file.
1
/*
2
* cb710/cb710-mmc.h
3
*
4
* Copyright by Michał Mirosław, 2008-2009
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License version 2 as
8
* published by the Free Software Foundation.
9
*/
10
#ifndef LINUX_CB710_MMC_H
11
#define LINUX_CB710_MMC_H
12
13
#include <
linux/cb710.h
>
14
15
/* per-MMC-reader structure */
16
struct
cb710_mmc_reader
{
17
struct
tasklet_struct
finish_req_tasklet
;
18
struct
mmc_request
*
mrq
;
19
spinlock_t
irq_lock
;
20
unsigned
char
last_power_mode
;
21
};
22
23
/* some device struct walking */
24
25
static
inline
struct
mmc_host
*cb710_slot_to_mmc(
struct
cb710_slot
*
slot
)
26
{
27
return
dev_get_drvdata
(&slot->
pdev
.dev);
28
}
29
30
static
inline
struct
cb710_slot
*cb710_mmc_to_slot(
struct
mmc_host
*mmc)
31
{
32
struct
platform_device
*
pdev
=
container_of
(
mmc_dev
(mmc),
33
struct
platform_device
,
dev
);
34
return
cb710_pdev_to_slot(pdev);
35
}
36
37
/* registers (this might be all wrong ;) */
38
39
#define CB710_MMC_DATA_PORT 0x00
40
41
#define CB710_MMC_CONFIG_PORT 0x04
42
#define CB710_MMC_CONFIG0_PORT 0x04
43
#define CB710_MMC_CONFIG1_PORT 0x05
44
#define CB710_MMC_C1_4BIT_DATA_BUS 0x40
45
#define CB710_MMC_CONFIG2_PORT 0x06
46
#define CB710_MMC_C2_READ_PIO_SIZE_MASK 0x0F
/* N-1 */
47
#define CB710_MMC_CONFIG3_PORT 0x07
48
49
#define CB710_MMC_CONFIGB_PORT 0x08
50
51
#define CB710_MMC_IRQ_ENABLE_PORT 0x0C
52
#define CB710_MMC_IE_TEST_MASK 0x00BF
53
#define CB710_MMC_IE_CARD_INSERTION_STATUS 0x1000
54
#define CB710_MMC_IE_IRQ_ENABLE 0x8000
55
#define CB710_MMC_IE_CISTATUS_MASK \
56
(CB710_MMC_IE_CARD_INSERTION_STATUS|CB710_MMC_IE_IRQ_ENABLE)
57
58
#define CB710_MMC_STATUS_PORT 0x10
59
#define CB710_MMC_STATUS_ERROR_EVENTS 0x60FF
60
#define CB710_MMC_STATUS0_PORT 0x10
61
#define CB710_MMC_S0_FIFO_UNDERFLOW 0x40
62
#define CB710_MMC_STATUS1_PORT 0x11
63
#define CB710_MMC_S1_COMMAND_SENT 0x01
64
#define CB710_MMC_S1_DATA_TRANSFER_DONE 0x02
65
#define CB710_MMC_S1_PIO_TRANSFER_DONE 0x04
66
#define CB710_MMC_S1_CARD_CHANGED 0x10
67
#define CB710_MMC_S1_RESET 0x20
68
#define CB710_MMC_STATUS2_PORT 0x12
69
#define CB710_MMC_S2_FIFO_READY 0x01
70
#define CB710_MMC_S2_FIFO_EMPTY 0x02
71
#define CB710_MMC_S2_BUSY_10 0x10
72
#define CB710_MMC_S2_BUSY_20 0x20
73
#define CB710_MMC_STATUS3_PORT 0x13
74
#define CB710_MMC_S3_CARD_DETECTED 0x02
75
#define CB710_MMC_S3_WRITE_PROTECTED 0x04
76
77
#define CB710_MMC_CMD_TYPE_PORT 0x14
78
#define CB710_MMC_RSP_TYPE_MASK 0x0007
79
#define CB710_MMC_RSP_R1 (0)
80
#define CB710_MMC_RSP_136 (5)
81
#define CB710_MMC_RSP_NO_CRC (2)
82
#define CB710_MMC_RSP_PRESENT_MASK 0x0018
83
#define CB710_MMC_RSP_NONE (0 << 3)
84
#define CB710_MMC_RSP_PRESENT (1 << 3)
85
#define CB710_MMC_RSP_PRESENT_X (2 << 3)
86
#define CB710_MMC_CMD_TYPE_MASK 0x0060
87
#define CB710_MMC_CMD_BC (0 << 5)
88
#define CB710_MMC_CMD_BCR (1 << 5)
89
#define CB710_MMC_CMD_AC (2 << 5)
90
#define CB710_MMC_CMD_ADTC (3 << 5)
91
#define CB710_MMC_DATA_READ 0x0080
92
#define CB710_MMC_CMD_CODE_MASK 0x3F00
93
#define CB710_MMC_CMD_CODE_SHIFT 8
94
#define CB710_MMC_IS_APP_CMD 0x4000
95
#define CB710_MMC_RSP_BUSY 0x8000
96
97
#define CB710_MMC_CMD_PARAM_PORT 0x18
98
#define CB710_MMC_TRANSFER_SIZE_PORT 0x1C
99
#define CB710_MMC_RESPONSE0_PORT 0x20
100
#define CB710_MMC_RESPONSE1_PORT 0x24
101
#define CB710_MMC_RESPONSE2_PORT 0x28
102
#define CB710_MMC_RESPONSE3_PORT 0x2C
103
104
#endif
/* LINUX_CB710_MMC_H */
Generated on Thu Jan 10 2013 13:55:43 for Linux Kernel by
1.8.2