17302Sgdamore@opensolaris.org /* 27302Sgdamore@opensolaris.org * CDDL HEADER START 37302Sgdamore@opensolaris.org * 47302Sgdamore@opensolaris.org * The contents of this file are subject to the terms of the 57302Sgdamore@opensolaris.org * Common Development and Distribution License (the "License"). 67302Sgdamore@opensolaris.org * You may not use this file except in compliance with the License. 77302Sgdamore@opensolaris.org * 87302Sgdamore@opensolaris.org * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97302Sgdamore@opensolaris.org * or http://www.opensolaris.org/os/licensing. 107302Sgdamore@opensolaris.org * See the License for the specific language governing permissions 117302Sgdamore@opensolaris.org * and limitations under the License. 127302Sgdamore@opensolaris.org * 137302Sgdamore@opensolaris.org * When distributing Covered Code, include this CDDL HEADER in each 147302Sgdamore@opensolaris.org * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157302Sgdamore@opensolaris.org * If applicable, add the following below this CDDL HEADER, with the 167302Sgdamore@opensolaris.org * fields enclosed by brackets "[]" replaced with your own identifying 177302Sgdamore@opensolaris.org * information: Portions Copyright [yyyy] [name of copyright owner] 187302Sgdamore@opensolaris.org * 197302Sgdamore@opensolaris.org * CDDL HEADER END 207302Sgdamore@opensolaris.org */ 217302Sgdamore@opensolaris.org /* 22*12426Sgdamore@opensolaris.org * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. 237302Sgdamore@opensolaris.org */ 247302Sgdamore@opensolaris.org 257302Sgdamore@opensolaris.org #ifndef _SYS_SDCARD_SDA_H 267302Sgdamore@opensolaris.org #define _SYS_SDCARD_SDA_H 277302Sgdamore@opensolaris.org 287302Sgdamore@opensolaris.org #include <sys/types.h> 297302Sgdamore@opensolaris.org #include <sys/note.h> 307302Sgdamore@opensolaris.org 317302Sgdamore@opensolaris.org #ifdef __cplusplus 327302Sgdamore@opensolaris.org extern "C" { 337302Sgdamore@opensolaris.org #endif 347302Sgdamore@opensolaris.org 357302Sgdamore@opensolaris.org /* 367302Sgdamore@opensolaris.org * SD card common framework. This module provides most of the common 377302Sgdamore@opensolaris.org * functionality so that SecureDigital host adapters and client devices 387302Sgdamore@opensolaris.org * (such as the sdmem driver) can share common code. 397302Sgdamore@opensolaris.org */ 407302Sgdamore@opensolaris.org 417302Sgdamore@opensolaris.org /* 427302Sgdamore@opensolaris.org * SD Commands. Commmand format is 48-bits as follows: 437302Sgdamore@opensolaris.org * 447302Sgdamore@opensolaris.org * bits value desc 457302Sgdamore@opensolaris.org * ------------------------------------------- 467302Sgdamore@opensolaris.org * 47 0 start bit 477302Sgdamore@opensolaris.org * 46 1 transmission bit 487302Sgdamore@opensolaris.org * 45:40 cmd command index (see values listed below) 497302Sgdamore@opensolaris.org * 39:8 arg 32-bit command argument 507302Sgdamore@opensolaris.org * 7:1 crc7 crc7 check value 517302Sgdamore@opensolaris.org * 0 1 end bit 527302Sgdamore@opensolaris.org * ------------------------------------------- 537302Sgdamore@opensolaris.org */ 547302Sgdamore@opensolaris.org typedef enum { 557302Sgdamore@opensolaris.org CMD_GO_IDLE = 0, 567302Sgdamore@opensolaris.org CMD_SEND_OCR = 1, /* MMC only */ 577302Sgdamore@opensolaris.org CMD_BCAST_CID = 2, 587302Sgdamore@opensolaris.org CMD_SEND_RCA = 3, 597302Sgdamore@opensolaris.org CMD_SET_DSR = 4, 607302Sgdamore@opensolaris.org CMD_IO_SEND_OCR = 5, /* SDIO only */ 617302Sgdamore@opensolaris.org CMD_SWITCH_FUNC = 6, 627302Sgdamore@opensolaris.org CMD_SELECT_CARD = 7, 637302Sgdamore@opensolaris.org CMD_SEND_IF_COND = 8, 647302Sgdamore@opensolaris.org CMD_SEND_CSD = 9, 657302Sgdamore@opensolaris.org CMD_SEND_CID = 10, 667302Sgdamore@opensolaris.org CMD_STOP_TRANSMIT = 12, 677302Sgdamore@opensolaris.org CMD_SEND_STATUS = 13, 687302Sgdamore@opensolaris.org CMD_GO_INACTIVE = 15, 697302Sgdamore@opensolaris.org CMD_SET_BLOCKLEN = 16, 707302Sgdamore@opensolaris.org CMD_READ_SINGLE = 17, 717302Sgdamore@opensolaris.org CMD_READ_MULTI = 18, 727302Sgdamore@opensolaris.org CMD_WRITE_SINGLE = 24, 737302Sgdamore@opensolaris.org CMD_WRITE_MULTI = 25, 747302Sgdamore@opensolaris.org CMD_PROGRAM_CSD = 27, 757302Sgdamore@opensolaris.org CMD_SET_WRITE_PROT = 28, 767302Sgdamore@opensolaris.org CMD_CLR_WRITE_PROT = 29, 777302Sgdamore@opensolaris.org CMD_SEND_WRITE_PROT = 30, 787302Sgdamore@opensolaris.org CMD_ERASE_START = 32, 797302Sgdamore@opensolaris.org CMD_ERASE_END = 33, 807302Sgdamore@opensolaris.org CMD_ERASE = 38, 817302Sgdamore@opensolaris.org CMD_LOCK = 42, 827302Sgdamore@opensolaris.org CMD_IO_RW_DIRECT = 52, 837302Sgdamore@opensolaris.org CMD_IO_RW_EXTENDED = 53, 847302Sgdamore@opensolaris.org CMD_APP_CMD = 55, 857302Sgdamore@opensolaris.org CMD_GEN_CMD = 56, 867302Sgdamore@opensolaris.org /* APP CMD values, send ACMD first */ 877302Sgdamore@opensolaris.org ACMD_SET_BUS_WIDTH = 6, 887302Sgdamore@opensolaris.org ACMD_SD_STATUS = 13, 897302Sgdamore@opensolaris.org ACMD_SEND_NUM_WR_BLKS = 22, 907302Sgdamore@opensolaris.org ACMD_SET_WR_BLK_ERASE_COUNT = 23, 917302Sgdamore@opensolaris.org ACMD_SD_SEND_OCR = 41, 927302Sgdamore@opensolaris.org ACMD_SET_CLR_CARD_DETECT = 42, 937302Sgdamore@opensolaris.org ACMD_SEND_SCR = 51 947302Sgdamore@opensolaris.org } sda_index_t; 957302Sgdamore@opensolaris.org 967302Sgdamore@opensolaris.org /* 977302Sgdamore@opensolaris.org * Classes of response type. Note that we encode the "busy bit" as 987302Sgdamore@opensolaris.org * value 0x10. 997302Sgdamore@opensolaris.org */ 1007302Sgdamore@opensolaris.org typedef enum { 1017302Sgdamore@opensolaris.org R0 = 0, 1027302Sgdamore@opensolaris.org R1 = 1, 1037302Sgdamore@opensolaris.org R2 = 2, 1047302Sgdamore@opensolaris.org R3 = 3, 1057302Sgdamore@opensolaris.org R4 = 4, 1067302Sgdamore@opensolaris.org R5 = 5, 1077302Sgdamore@opensolaris.org R6 = 6, 1087302Sgdamore@opensolaris.org R7 = 7, 1097302Sgdamore@opensolaris.org Rb = 0x10, 1107302Sgdamore@opensolaris.org R1b = 0x11, 1117302Sgdamore@opensolaris.org R5b = 0x15 1127302Sgdamore@opensolaris.org } sda_rtype_t; 1137302Sgdamore@opensolaris.org 1147302Sgdamore@opensolaris.org /* 1157302Sgdamore@opensolaris.org * R1 status bits. 1167302Sgdamore@opensolaris.org */ 1177302Sgdamore@opensolaris.org #define R1_OUT_OF_RANGE (1U << 31) 1187302Sgdamore@opensolaris.org #define R1_ADDRESS_ERROR (1U << 30) 1197302Sgdamore@opensolaris.org #define R1_BLOCK_LEN_ERROR (1U << 29) 1207302Sgdamore@opensolaris.org #define R1_ERASE_SEQ_ERROR (1U << 28) 1217302Sgdamore@opensolaris.org #define R1_ERASE_PARAM (1U << 27) 1227302Sgdamore@opensolaris.org #define R1_WP_VIOLATION (1U << 26) 1237302Sgdamore@opensolaris.org #define R1_CARD_IS_LOCKED (1U << 25) 1247302Sgdamore@opensolaris.org #define R1_LOCK_FAILED (1U << 24) 1257302Sgdamore@opensolaris.org #define R1_COM_CRC_ERROR (1U << 23) 1267302Sgdamore@opensolaris.org #define R1_ILLEGAL_COMMAND (1U << 22) 1277302Sgdamore@opensolaris.org #define R1_CARD_ECC_FAILED (1U << 21) 1287302Sgdamore@opensolaris.org #define R1_CC_ERROR (1U << 20) 1297302Sgdamore@opensolaris.org #define R1_ERROR (1U << 19) 1307302Sgdamore@opensolaris.org #define R1_CSD_OVERWRITE (1U << 16) 1317302Sgdamore@opensolaris.org #define R1_WP_ERASE_SKIP (1U << 15) 1327302Sgdamore@opensolaris.org #define R1_CARD_ECC_DIS (1U << 14) 1337302Sgdamore@opensolaris.org #define R1_ERASE_RESET (1U << 13) 1347302Sgdamore@opensolaris.org #define R1_READY_FOR_DATA (1U << 8) 1357302Sgdamore@opensolaris.org #define R1_APP_CMD (1U << 5) 1367302Sgdamore@opensolaris.org #define R1_AKE_SEQ_ERROR (1U << 3) 1377302Sgdamore@opensolaris.org 1387302Sgdamore@opensolaris.org /* 1397302Sgdamore@opensolaris.org * Note that R1_COM_CRC_ERR, R1_ILLEGAL_COMMAND, R1_ERASE_SEQ_ERROR, and 1407302Sgdamore@opensolaris.org * R1_AKE_SEQ_ERROR errors are delayed error bits reported on the next 1417302Sgdamore@opensolaris.org * command. So we don't list them here. 1427302Sgdamore@opensolaris.org */ 1437302Sgdamore@opensolaris.org #define R1_ERRS (\ 1447302Sgdamore@opensolaris.org R1_ERROR | R1_OUT_OF_RANGE | R1_ADDRESS_ERROR | R1_BLOCK_LEN_ERROR | \ 1457302Sgdamore@opensolaris.org R1_ERASE_PARAM | R1_WP_VIOLATION | R1_LOCK_FAILED | \ 1467302Sgdamore@opensolaris.org R1_CARD_ECC_FAILED | R1_CC_ERROR | R1_CSD_OVERWRITE | \ 1477302Sgdamore@opensolaris.org R1_WP_ERASE_SKIP) 1487302Sgdamore@opensolaris.org 1497302Sgdamore@opensolaris.org #define R1_STATE(x) (((x) & 0xf) >> 9) 1507302Sgdamore@opensolaris.org 1517302Sgdamore@opensolaris.org /* 1527302Sgdamore@opensolaris.org * R5 status bits. 1537302Sgdamore@opensolaris.org */ 1547302Sgdamore@opensolaris.org #define R5_COM_CRC_ERROR (1U << 7) 1557302Sgdamore@opensolaris.org #define R5_ILLEGAL_COMMAND (1U << 6) 1567302Sgdamore@opensolaris.org #define R5_ERROR (1U << 3) 1577302Sgdamore@opensolaris.org #define R5_RFU (1U << 2) 1587302Sgdamore@opensolaris.org #define R5_FUNCTION_NUMBER (1U << 1) 1597302Sgdamore@opensolaris.org #define R5_OUT_OF_RANGE (1U << 0) 1607302Sgdamore@opensolaris.org 1617302Sgdamore@opensolaris.org #define R5_ERRS (R5_ERROR | R5_FUNCTION_NUMBER | R5_OUT_OF_RANGE) 1627302Sgdamore@opensolaris.org 1637302Sgdamore@opensolaris.org #define R5_IO_STATE(x) (((x) & 0x3) >> 4) 1647302Sgdamore@opensolaris.org 1657302Sgdamore@opensolaris.org /* 1667302Sgdamore@opensolaris.org * R7 bits (CMD8). 1677302Sgdamore@opensolaris.org */ 1687302Sgdamore@opensolaris.org #define R7_VHS_27_36V (1U << 8) 1697302Sgdamore@opensolaris.org #define R7_PATTERN (0xAA) 1707302Sgdamore@opensolaris.org 1717302Sgdamore@opensolaris.org /* 1727302Sgdamore@opensolaris.org * OCR bits. 1737302Sgdamore@opensolaris.org */ 1747302Sgdamore@opensolaris.org #define OCR_POWER_UP (1U << 31) 1757302Sgdamore@opensolaris.org #define OCR_CCS (1U << 30) 1767302Sgdamore@opensolaris.org #define OCR_FUNCS(x) (((x) & 7) >> 28) /* SDIO only */ 1777302Sgdamore@opensolaris.org #define OCR_MEM_PRESENT (1U << 27) /* SDIO only */ 1787302Sgdamore@opensolaris.org #define OCR_VOLTAGE_MASK (0xffffffU) /* (bits 0-23 */ 1797302Sgdamore@opensolaris.org #define OCR_HI_MASK (0xff8000U) /* 2.7-3.6V */ 1807302Sgdamore@opensolaris.org #define OCR_35_36V (1U << 23) 1817302Sgdamore@opensolaris.org #define OCR_34_35V (1U << 22) 1827302Sgdamore@opensolaris.org #define OCR_33_34V (1U << 21) 1837302Sgdamore@opensolaris.org #define OCR_32_33V (1U << 20) 1847302Sgdamore@opensolaris.org #define OCR_31_32V (1U << 19) 1857302Sgdamore@opensolaris.org #define OCR_30_31V (1U << 18) 1867302Sgdamore@opensolaris.org #define OCR_29_30V (1U << 17) 1877302Sgdamore@opensolaris.org #define OCR_28_29V (1U << 16) 1887302Sgdamore@opensolaris.org #define OCR_27_28V (1U << 15) 1897302Sgdamore@opensolaris.org #define OCR_26_27V (1U << 14) 1907302Sgdamore@opensolaris.org #define OCR_25_26V (1U << 14) 1917302Sgdamore@opensolaris.org #define OCR_24_25V (1U << 13) 1927302Sgdamore@opensolaris.org #define OCR_23_24V (1U << 12) 1937302Sgdamore@opensolaris.org #define OCR_22_23V (1U << 11) 1947302Sgdamore@opensolaris.org #define OCR_21_22V (1U << 10) 1957302Sgdamore@opensolaris.org #define OCR_20_21V (1U << 9) 1967302Sgdamore@opensolaris.org #define OCR_19_20V (1U << 8) 1977302Sgdamore@opensolaris.org #define OCR_18_19V (1U << 7) 1987302Sgdamore@opensolaris.org #define OCR_17_18V (1U << 6) 1997302Sgdamore@opensolaris.org 2007302Sgdamore@opensolaris.org 2017302Sgdamore@opensolaris.org /* 2027302Sgdamore@opensolaris.org * Command structure. Used internally by the framework, and by host 2037302Sgdamore@opensolaris.org * drivers. Note that it is forbidden to depend on the size of this 2047302Sgdamore@opensolaris.org * structure. 2057302Sgdamore@opensolaris.org */ 2067302Sgdamore@opensolaris.org typedef struct sda_cmd sda_cmd_t; 2077302Sgdamore@opensolaris.org 2087302Sgdamore@opensolaris.org struct sda_cmd { 2097302Sgdamore@opensolaris.org /* 2107302Sgdamore@opensolaris.org * The ordering of these is done to maximize packing. 2117302Sgdamore@opensolaris.org */ 2127302Sgdamore@opensolaris.org sda_index_t sc_index; /* command name */ 2137302Sgdamore@opensolaris.org sda_rtype_t sc_rtype; /* response type expected */ 2147302Sgdamore@opensolaris.org uint16_t sc_flags; 2157302Sgdamore@opensolaris.org uint32_t sc_argument; /* command argument */ 2167302Sgdamore@opensolaris.org 2177302Sgdamore@opensolaris.org uint32_t sc_response[4]; 2187302Sgdamore@opensolaris.org 2197302Sgdamore@opensolaris.org uint16_t sc_nblks; 2207302Sgdamore@opensolaris.org uint16_t sc_blksz; 2217302Sgdamore@opensolaris.org 2227302Sgdamore@opensolaris.org uint32_t sc_resid; 2237302Sgdamore@opensolaris.org 224*12426Sgdamore@opensolaris.org ddi_dma_handle_t sc_dmah; 2257302Sgdamore@opensolaris.org uint_t sc_ndmac; /* # DMA cookies */ 226*12426Sgdamore@opensolaris.org ddi_dma_cookie_t sc_dmac; /* actual DMA cookies */ 2277302Sgdamore@opensolaris.org caddr_t sc_kvaddr; /* kernel virtual address */ 2287302Sgdamore@opensolaris.org 2297302Sgdamore@opensolaris.org #define SDA_CMDF_READ 0x0001 /* transfer direction */ 2307302Sgdamore@opensolaris.org #define SDA_CMDF_WRITE 0x0002 /* transfer direction */ 2317302Sgdamore@opensolaris.org #define SDA_CMDF_AUTO_CMD12 0x0004 /* cmd12 requested */ 2327302Sgdamore@opensolaris.org /* private flags .. not for driver consumption */ 2337302Sgdamore@opensolaris.org #define SDA_CMDF_DAT 0x0100 /* data phase pending */ 2347302Sgdamore@opensolaris.org #define SDA_CMDF_BUSY 0x0200 /* cmd in-flight or queued */ 2357302Sgdamore@opensolaris.org #define SDA_CMDF_INIT 0x0400 /* initialization command */ 2367302Sgdamore@opensolaris.org #define SDA_CMDF_MEM 0x0800 /* memory target command */ 2377302Sgdamore@opensolaris.org }; 2387302Sgdamore@opensolaris.org 2397302Sgdamore@opensolaris.org /* 2407302Sgdamore@opensolaris.org * The framework has two APIs. The first API is for host controllers, 2417302Sgdamore@opensolaris.org * and is referred to as SDHOST. The second API is for target devices, 2427302Sgdamore@opensolaris.org * and is referred to as SDCLIENT. Please don't mix and match usage outside 2437302Sgdamore@opensolaris.org * of the framework implementation itself! 2447302Sgdamore@opensolaris.org */ 2457302Sgdamore@opensolaris.org 2467302Sgdamore@opensolaris.org typedef struct sda_host sda_host_t; 2477302Sgdamore@opensolaris.org 2487302Sgdamore@opensolaris.org typedef enum { 2497302Sgdamore@opensolaris.org SDA_PROP_INSERTED = 1, /* R: is card inserted? */ 2507302Sgdamore@opensolaris.org SDA_PROP_WPROTECT = 2, /* R: is card write protected */ 2517302Sgdamore@opensolaris.org SDA_PROP_LED = 3, /* W: LED */ 2527302Sgdamore@opensolaris.org SDA_PROP_CLOCK = 4, /* R: frequency, Hz */ 2537302Sgdamore@opensolaris.org SDA_PROP_BUSWIDTH = 5, /* W: bus width */ 2547302Sgdamore@opensolaris.org SDA_PROP_OCR = 6, /* RW: ocr R: supported, W: set curr */ 2557302Sgdamore@opensolaris.org SDA_PROP_CAP_4BITS = 7, /* R: 4 bit data bus? */ 2567302Sgdamore@opensolaris.org SDA_PROP_CAP_8BITS = 8, /* R: MMC future expansion */ 2577302Sgdamore@opensolaris.org SDA_PROP_CAP_HISPEED = 9, /* R: fast bus rates (> 25MHz) */ 2587302Sgdamore@opensolaris.org SDA_PROP_CAP_INTR = 10, /* R: SDIO interrupt support */ 2597302Sgdamore@opensolaris.org SDA_PROP_CAP_NOPIO = 11, /* R: Never needs bp_mapin */ 2607302Sgdamore@opensolaris.org SDA_PROP_HISPEED = 12 /* W: high speed (>25MHz) */ 2617302Sgdamore@opensolaris.org } sda_prop_t; 2627302Sgdamore@opensolaris.org 2637302Sgdamore@opensolaris.org typedef enum { 2647302Sgdamore@opensolaris.org SDA_FAULT_NONE = 0, /* No failure */ 2657302Sgdamore@opensolaris.org SDA_FAULT_ACMD12 = 1, /* Auto CMD12 failure */ 2667302Sgdamore@opensolaris.org SDA_FAULT_CRC7 = 2, /* CRC7 failure on CMD/DAT line */ 2677302Sgdamore@opensolaris.org SDA_FAULT_PROTO = 3, /* SD/MMC protocol error */ 2687302Sgdamore@opensolaris.org SDA_FAULT_CURRENT = 4, /* Current overlimit detected */ 2697302Sgdamore@opensolaris.org SDA_FAULT_INIT = 5, /* Card initialization failure */ 2707302Sgdamore@opensolaris.org SDA_FAULT_TIMEOUT = 6, /* Unexpected timeout failure */ 2717302Sgdamore@opensolaris.org SDA_FAULT_HOST = 7, /* Internal host or slot failure */ 2727302Sgdamore@opensolaris.org SDA_FAULT_RESET = 8, /* Slot failed to reset */ 2737302Sgdamore@opensolaris.org } sda_fault_t; 2747302Sgdamore@opensolaris.org 2757302Sgdamore@opensolaris.org typedef enum { 2767302Sgdamore@opensolaris.org SDA_EOK = 0, /* Success */ 2777302Sgdamore@opensolaris.org SDA_ECRC7 = 1, /* CRC7 failure */ 2787302Sgdamore@opensolaris.org SDA_EPROTO = 2, /* SD/MMC protocol error */ 2797302Sgdamore@opensolaris.org SDA_EINVAL = 3, /* Invalid argument */ 2807302Sgdamore@opensolaris.org SDA_ETIME = 4, /* Timeout */ 2817302Sgdamore@opensolaris.org SDA_ECMD12 = 5, /* Failed during stop cmd */ 2827302Sgdamore@opensolaris.org SDA_ENOTSUP = 6, /* Setting/property not supported */ 2837302Sgdamore@opensolaris.org SDA_ERESID = 7, /* Incomplete transfer */ 2847302Sgdamore@opensolaris.org SDA_EFAULT = 8, /* Previous fault condition present */ 2857302Sgdamore@opensolaris.org SDA_ENOMEM = 9, /* Memory exhausted */ 2867302Sgdamore@opensolaris.org SDA_EWPROTECT = 10, /* Media is write protected */ 2877302Sgdamore@opensolaris.org SDA_ENODEV = 11, /* Card removed */ 2887302Sgdamore@opensolaris.org SDA_ERESET = 12, /* Memory card reset */ 2897302Sgdamore@opensolaris.org SDA_EABORT = 13, /* Memory command aborted */ 2907302Sgdamore@opensolaris.org SDA_EIO = 14, /* Other generic error */ 2917302Sgdamore@opensolaris.org SDA_ESUSPENDED = 15, /* Slot has been suspended */ 2927302Sgdamore@opensolaris.org } sda_err_t; 2937302Sgdamore@opensolaris.org 2947302Sgdamore@opensolaris.org typedef struct sda_ops { 2957302Sgdamore@opensolaris.org int so_version; 2967302Sgdamore@opensolaris.org #define SDA_OPS_VERSION 1 2977302Sgdamore@opensolaris.org sda_err_t (*so_cmd)(void *, sda_cmd_t *); 2987302Sgdamore@opensolaris.org sda_err_t (*so_getprop)(void *, sda_prop_t, uint32_t *); 2997302Sgdamore@opensolaris.org sda_err_t (*so_setprop)(void *, sda_prop_t, uint32_t); 3007302Sgdamore@opensolaris.org sda_err_t (*so_poll)(void *); 3017302Sgdamore@opensolaris.org sda_err_t (*so_reset)(void *); 3027302Sgdamore@opensolaris.org sda_err_t (*so_halt)(void *); 3037302Sgdamore@opensolaris.org } sda_ops_t; 3047302Sgdamore@opensolaris.org 3057302Sgdamore@opensolaris.org /* 3067302Sgdamore@opensolaris.org * Host operations. 3077302Sgdamore@opensolaris.org */ 3087302Sgdamore@opensolaris.org void sda_host_init_ops(struct dev_ops *); 3097302Sgdamore@opensolaris.org void sda_host_fini_ops(struct dev_ops *); 3107302Sgdamore@opensolaris.org sda_host_t *sda_host_alloc(dev_info_t *, int, sda_ops_t *, ddi_dma_attr_t *); 3117302Sgdamore@opensolaris.org void sda_host_free(sda_host_t *); 3127302Sgdamore@opensolaris.org void sda_host_set_private(sda_host_t *, int, void *); 3137302Sgdamore@opensolaris.org int sda_host_attach(sda_host_t *); 3147302Sgdamore@opensolaris.org void sda_host_detach(sda_host_t *); 3158289Sgdamore@opensolaris.org void sda_host_suspend(sda_host_t *); 3168289Sgdamore@opensolaris.org void sda_host_resume(sda_host_t *); 3177302Sgdamore@opensolaris.org void sda_host_detect(sda_host_t *, int); 3187302Sgdamore@opensolaris.org void sda_host_fault(sda_host_t *, int, sda_fault_t); 3197302Sgdamore@opensolaris.org void sda_host_transfer(sda_host_t *, int, sda_err_t); 3207302Sgdamore@opensolaris.org /*PRINTFLIKE3*/ 3217302Sgdamore@opensolaris.org void sda_host_log(sda_host_t *, int, const char *, ...); 3227302Sgdamore@opensolaris.org 3237302Sgdamore@opensolaris.org #ifdef __cplusplus 3247302Sgdamore@opensolaris.org } 3257302Sgdamore@opensolaris.org #endif 3267302Sgdamore@opensolaris.org 3277302Sgdamore@opensolaris.org #endif /* _SYS_SDCARD_SDA_H */ 328