aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/mmc
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-16 18:20:36 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-16 18:20:36 -0400
commit1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch)
tree0bba044c4ce775e45a88a51686b5d9f90697ea9d /include/linux/mmc
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!
Diffstat (limited to 'include/linux/mmc')
-rw-r--r--include/linux/mmc/card.h92
-rw-r--r--include/linux/mmc/host.h108
-rw-r--r--include/linux/mmc/mmc.h101
-rw-r--r--include/linux/mmc/protocol.h213
4 files changed, 514 insertions, 0 deletions
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
new file mode 100644
index 000000000000..aefedf04b9bb
--- /dev/null
+++ b/include/linux/mmc/card.h
@@ -0,0 +1,92 @@
1/*
2 * linux/include/linux/mmc/card.h
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * Card driver specific definitions.
9 */
10#ifndef LINUX_MMC_CARD_H
11#define LINUX_MMC_CARD_H
12
13#include <linux/mmc/mmc.h>
14
15struct mmc_cid {
16 unsigned int manfid;
17 char prod_name[8];
18 unsigned int serial;
19 unsigned short oemid;
20 unsigned short year;
21 unsigned char hwrev;
22 unsigned char fwrev;
23 unsigned char month;
24};
25
26struct mmc_csd {
27 unsigned char mmca_vsn;
28 unsigned short cmdclass;
29 unsigned short tacc_clks;
30 unsigned int tacc_ns;
31 unsigned int max_dtr;
32 unsigned int read_blkbits;
33 unsigned int capacity;
34};
35
36struct mmc_host;
37
38/*
39 * MMC device
40 */
41struct mmc_card {
42 struct list_head node; /* node in hosts devices list */
43 struct mmc_host *host; /* the host this device belongs to */
44 struct device dev; /* the device */
45 unsigned int rca; /* relative card address of device */
46 unsigned int state; /* (our) card state */
47#define MMC_STATE_PRESENT (1<<0) /* present in sysfs */
48#define MMC_STATE_DEAD (1<<1) /* device no longer in stack */
49#define MMC_STATE_BAD (1<<2) /* unrecognised device */
50 u32 raw_cid[4]; /* raw card CID */
51 u32 raw_csd[4]; /* raw card CSD */
52 struct mmc_cid cid; /* card identification */
53 struct mmc_csd csd; /* card specific */
54};
55
56#define mmc_card_present(c) ((c)->state & MMC_STATE_PRESENT)
57#define mmc_card_dead(c) ((c)->state & MMC_STATE_DEAD)
58#define mmc_card_bad(c) ((c)->state & MMC_STATE_BAD)
59
60#define mmc_card_set_present(c) ((c)->state |= MMC_STATE_PRESENT)
61#define mmc_card_set_dead(c) ((c)->state |= MMC_STATE_DEAD)
62#define mmc_card_set_bad(c) ((c)->state |= MMC_STATE_BAD)
63
64#define mmc_card_name(c) ((c)->cid.prod_name)
65#define mmc_card_id(c) ((c)->dev.bus_id)
66
67#define mmc_list_to_card(l) container_of(l, struct mmc_card, node)
68#define mmc_get_drvdata(c) dev_get_drvdata(&(c)->dev)
69#define mmc_set_drvdata(c,d) dev_set_drvdata(&(c)->dev, d)
70
71/*
72 * MMC device driver (e.g., Flash card, I/O card...)
73 */
74struct mmc_driver {
75 struct device_driver drv;
76 int (*probe)(struct mmc_card *);
77 void (*remove)(struct mmc_card *);
78 int (*suspend)(struct mmc_card *, pm_message_t);
79 int (*resume)(struct mmc_card *);
80};
81
82extern int mmc_register_driver(struct mmc_driver *);
83extern void mmc_unregister_driver(struct mmc_driver *);
84
85static inline int mmc_card_claim_host(struct mmc_card *card)
86{
87 return __mmc_claim_host(card->host, card);
88}
89
90#define mmc_card_release_host(c) mmc_release_host((c)->host)
91
92#endif
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
new file mode 100644
index 000000000000..f67686cef62a
--- /dev/null
+++ b/include/linux/mmc/host.h
@@ -0,0 +1,108 @@
1/*
2 * linux/include/linux/mmc/host.h
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * Host driver specific definitions.
9 */
10#ifndef LINUX_MMC_HOST_H
11#define LINUX_MMC_HOST_H
12
13#include <linux/mmc/mmc.h>
14
15struct mmc_ios {
16 unsigned int clock; /* clock rate */
17 unsigned short vdd;
18
19#define MMC_VDD_150 0
20#define MMC_VDD_155 1
21#define MMC_VDD_160 2
22#define MMC_VDD_165 3
23#define MMC_VDD_170 4
24#define MMC_VDD_180 5
25#define MMC_VDD_190 6
26#define MMC_VDD_200 7
27#define MMC_VDD_210 8
28#define MMC_VDD_220 9
29#define MMC_VDD_230 10
30#define MMC_VDD_240 11
31#define MMC_VDD_250 12
32#define MMC_VDD_260 13
33#define MMC_VDD_270 14
34#define MMC_VDD_280 15
35#define MMC_VDD_290 16
36#define MMC_VDD_300 17
37#define MMC_VDD_310 18
38#define MMC_VDD_320 19
39#define MMC_VDD_330 20
40#define MMC_VDD_340 21
41#define MMC_VDD_350 22
42#define MMC_VDD_360 23
43
44 unsigned char bus_mode; /* command output mode */
45
46#define MMC_BUSMODE_OPENDRAIN 1
47#define MMC_BUSMODE_PUSHPULL 2
48
49 unsigned char power_mode; /* power supply mode */
50
51#define MMC_POWER_OFF 0
52#define MMC_POWER_UP 1
53#define MMC_POWER_ON 2
54};
55
56struct mmc_host_ops {
57 void (*request)(struct mmc_host *host, struct mmc_request *req);
58 void (*set_ios)(struct mmc_host *host, struct mmc_ios *ios);
59};
60
61struct mmc_card;
62struct device;
63
64struct mmc_host {
65 struct device *dev;
66 struct mmc_host_ops *ops;
67 unsigned int f_min;
68 unsigned int f_max;
69 u32 ocr_avail;
70 char host_name[8];
71
72 /* host specific block data */
73 unsigned int max_seg_size; /* see blk_queue_max_segment_size */
74 unsigned short max_hw_segs; /* see blk_queue_max_hw_segments */
75 unsigned short max_phys_segs; /* see blk_queue_max_phys_segments */
76 unsigned short max_sectors; /* see blk_queue_max_sectors */
77 unsigned short unused;
78
79 /* private data */
80 struct mmc_ios ios; /* current io bus settings */
81 u32 ocr; /* the current OCR setting */
82
83 struct list_head cards; /* devices attached to this host */
84
85 wait_queue_head_t wq;
86 spinlock_t lock; /* card_busy lock */
87 struct mmc_card *card_busy; /* the MMC card claiming host */
88 struct mmc_card *card_selected; /* the selected MMC card */
89
90 struct work_struct detect;
91};
92
93extern struct mmc_host *mmc_alloc_host(int extra, struct device *);
94extern int mmc_add_host(struct mmc_host *);
95extern void mmc_remove_host(struct mmc_host *);
96extern void mmc_free_host(struct mmc_host *);
97
98#define mmc_priv(x) ((void *)((x) + 1))
99#define mmc_dev(x) ((x)->dev)