1f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner/**************************************************************************** 2f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner **************************************************************************** 3f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner *** 4f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner *** This header was automatically generated from a Linux kernel header 5f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner *** of the same name, to make information necessary for userspace to 6f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner *** call into the kernel available to libc. It contains only constants, 7f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner *** structures, and macros generated from the original header, and thus, 8f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner *** contains no copyrightable information. 9f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner *** 10f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner **************************************************************************** 11f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner ****************************************************************************/ 12f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#ifndef MMC_H 13f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_H 14f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 15f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#include <linux/list.h> 16f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#include <linux/interrupt.h> 17f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#include <linux/device.h> 18f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 19f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct request; 20f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct mmc_data; 21f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct mmc_request; 22f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 23f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct mmc_command { 24f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner u32 opcode; 25f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner u32 arg; 26f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner u32 resp[4]; 27f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner unsigned int flags; 28f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_RSP_PRESENT (1 << 0) 29f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_RSP_136 (1 << 1) 30f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_RSP_CRC (1 << 2) 31f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_RSP_BUSY (1 << 3) 32f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_RSP_OPCODE (1 << 4) 33f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_CMD_MASK (3 << 5) 34f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_CMD_AC (0 << 5) 35f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_CMD_ADTC (1 << 5) 36f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_CMD_BC (2 << 5) 37f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_CMD_BCR (3 << 5) 38f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 39f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_RSP_NONE (0) 40f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_RSP_R1 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE) 41f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_RSP_R1B (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE|MMC_RSP_BUSY) 42f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_RSP_R2 (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC) 43f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_RSP_R3 (MMC_RSP_PRESENT) 44f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_RSP_R6 (MMC_RSP_PRESENT|MMC_RSP_CRC) 45f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 46f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define mmc_resp_type(cmd) ((cmd)->flags & (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC|MMC_RSP_BUSY|MMC_RSP_OPCODE)) 47f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 48f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define mmc_cmd_type(cmd) ((cmd)->flags & MMC_CMD_MASK) 49f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 50f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner unsigned int retries; 51f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner unsigned int error; 52f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 53f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_ERR_NONE 0 54f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_ERR_TIMEOUT 1 55f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_ERR_BADCRC 2 56f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_ERR_FIFO 3 57f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_ERR_FAILED 4 58f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_ERR_INVALID 5 59f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 60f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner struct mmc_data *data; 61f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner struct mmc_request *mrq; 62f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner}; 63f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 64f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct mmc_data { 65f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner unsigned int timeout_ns; 66f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner unsigned int timeout_clks; 67f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner unsigned int blksz_bits; 68f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner unsigned int blksz; 69f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner unsigned int blocks; 70f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner unsigned int error; 71f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner unsigned int flags; 72f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 73f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_DATA_WRITE (1 << 8) 74f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_DATA_READ (1 << 9) 75f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_DATA_STREAM (1 << 10) 76f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MMC_DATA_MULTI (1 << 11) 77f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 78f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner unsigned int bytes_xfered; 79f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 80f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner struct mmc_command *stop; 81f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner struct mmc_request *mrq; 82f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 83f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner unsigned int sg_len; 84f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner struct scatterlist *sg; 85f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner}; 86f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 87f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct mmc_request { 88f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner struct mmc_command *cmd; 89f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner struct mmc_data *data; 90f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner struct mmc_command *stop; 91f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 92f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner void *done_data; 93f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner void (*done)(struct mmc_request *); 94f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner}; 95f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 96f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct mmc_host; 97f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct mmc_card; 98f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner 99f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#endif 100