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