111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/****************************************************************************
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   This header was automatically generated from a Linux kernel header
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   of the same name, to make information necessary for userspace to
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   call into the kernel available to libc.  It contains only constants,
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   structures, and macros generated from the original header, and thus,
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   contains no copyrightable information.
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************/
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef LINUX_MMC_HOST_H
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define LINUX_MMC_HOST_H
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/mmc/mmc.h>
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct mmc_ios {
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int clock;
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned short vdd;
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_150 0
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_155 1
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_160 2
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_165 3
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_170 4
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_180 5
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_190 6
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_200 7
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_210 8
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_220 9
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_230 10
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_240 11
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_250 12
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_260 13
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_270 14
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_280 15
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_290 16
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_300 17
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_310 18
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_320 19
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_330 20
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_340 21
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_350 22
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_VDD_360 23
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char bus_mode;
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_BUSMODE_OPENDRAIN 1
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_BUSMODE_PUSHPULL 2
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char chip_select;
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_CS_DONTCARE 0
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_CS_HIGH 1
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_CS_LOW 2
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char power_mode;
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_POWER_OFF 0
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_POWER_UP 1
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_POWER_ON 2
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char bus_width;
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_BUS_WIDTH_1 0
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_BUS_WIDTH_4 2
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct mmc_host_ops {
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*request)(struct mmc_host *host, struct mmc_request *req);
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*set_ios)(struct mmc_host *host, struct mmc_ios *ios);
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*get_ro)(struct mmc_host *host);
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct mmc_card;
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct device;
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct mmc_host {
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct device *dev;
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct class_device class_dev;
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int index;
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const struct mmc_host_ops *ops;
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int f_min;
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int f_max;
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u32 ocr_avail;
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long caps;
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_CAP_4_BIT_DATA (1 << 0)
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int max_seg_size;
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned short max_hw_segs;
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned short max_phys_segs;
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned short max_sectors;
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned short unused;
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct mmc_ios ios;
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u32 ocr;
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int mode;
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_MODE_MMC 0
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MMC_MODE_SD 1
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct list_head cards;
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert wait_queue_head_t wq;
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert spinlock_t lock;
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct mmc_card *card_busy;
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct mmc_card *card_selected;
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct work_struct detect;
11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long private[0] ____cacheline_aligned;
11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define mmc_dev(x) ((x)->dev)
11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define mmc_hostname(x) ((x)->class_dev.class_id)
11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
121