Real AT91 lib defines
diff --git a/sam3s_example/sam3s_examples_include/hsmci.h b/sam3s_example/sam3s_examples_include/hsmci.h
new file mode 100644
index 0000000..4235341
--- /dev/null
+++ b/sam3s_example/sam3s_examples_include/hsmci.h
@@ -0,0 +1,206 @@
+/* ----------------------------------------------------------------------------

+ *         ATMEL Microcontroller Software Support

+ * ----------------------------------------------------------------------------

+ * Copyright (c) 2008, Atmel Corporation

+ *

+ * All rights reserved.

+ *

+ * Redistribution and use in source and binary forms, with or without

+ * modification, are permitted provided that the following conditions are met:

+ *

+ * - Redistributions of source code must retain the above copyright notice,

+ * this list of conditions and the disclaimer below.

+ *

+ * Atmel's name may not be used to endorse or promote products derived from

+ * this software without specific prior written permission.

+ *

+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR

+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF

+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE

+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,

+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,

+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF

+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING

+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,

+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+ * ----------------------------------------------------------------------------

+ */

+

+/** \addtogroup hsmci_module Working with HSMCI

+ * The HSMCI driver provides the interface to configure and use the HSMCI

+ * peripheral.

+ *

+ * The user needs to set the number of wait states depending on the frequency used.\n

+ * Configure number of cycles for flash read/write operations in the FWS field of HSMCI_FMR.

+ *

+ * It offers a function to send flash command to HSMCI and waits for the

+ * flash to be ready.

+ *

+ * To send flash command, the user could do in either of following way:

+ * <ul>

+ * <li>Write a correct key, command and argument in HSMCI_FCR. </li>

+ * <li>Or, Use IAP (In Application Programming) function which is executed from

+ * ROM directly, this allows flash programming to be done by code running in flash.</li>

+ * <li>Once the command is achieved, it can be detected even by polling EEFC_FSR or interrupt.

+ * </ul>

+ *

+ * The command argument could be a page number,GPNVM number or nothing, it depends on

+ * the command itself. Some useful functions in this driver could help user tranlate physical

+ * flash address into a page number and vice verse.

+ *

+ * For more accurate information, please look at the EEFC section of the

+ * Datasheet.

+ *

+ * Related files :\n

+ * \ref hsmci_pdc.c\n

+ * \ref hsmci.h.\n

+*/

+/*@{*/

+/*@}*/

+

+/**

+ *  \file

+ */

+

+/**

+ *

+ * \section Purpose

+ *

+ * Implement MultiMediaCard(MCI) Interface Driver

+ *

+ * \section Usage

+ *

+ * -# MCI_Init(): Initializes a MCI driver instance and the underlying

+ *                peripheral.

+  * -# MCI_Handler() : Interrupt handler which is called by ISR handler.

+ * -# MCI_SetSpeed() : Configure the  MCI CLKDIV in the _MR register

+ *                     (\ref Hsmci::HSMCI_MR).

+ * -# MCI_SetBusWidth() : Configure the  MCI SDCBUS in the _SDCR register

+ *                        (\ref Hsmci::HSMCI_SDCR).

+ * -# MCI_EnableHsMode() : Configure the MCI HSMODE in the _CFG register

+ *                         (\ref Hsmci::HSMCI_CFG).

+ */

+

+#ifndef HSMCID_H

+#define HSMCID_H

+/** \addtogroup sdmmc_hal

+ *@{

+ */

+

+/*----------------------------------------------------------------------------

+ *         Headers

+ *----------------------------------------------------------------------------*/

+

+#include "chip.h"

+

+#include <stdint.h>

+#include <stdio.h>

+

+//#include <memories/sdmmc/sdmmc_cmd.h>

+

+/*----------------------------------------------------------------------------

+ *         Constants

+ *----------------------------------------------------------------------------*/

+

+/* Transfer type */

+

+/** MultiMedia Transfer type: no data */

+#define MCI_NO_TRANSFER     0

+/** MultiMedia Transfer type: Device to Host (read) */

+#define MCI_START_READ      1

+/** MultiMedia Transfer type: Host to Device (write) & check BUSY */

+#define MCI_START_WRITE     2

+/** Device to Host (read) without command */

+#define MCI_READ            3

+/** Host to Device (write) without command & check BUSY */

+#define MCI_WRITE           4

+/** MultiMedia Transfer type: STOP transfer */

+#define MCI_STOP_TRANSFER   5

+

+/** MCI Initialize clock 400K Hz */

+#define MCI_INITIAL_SPEED   400000

+

+/*----------------------------------------------------------------------------

+ *         Types

+ *----------------------------------------------------------------------------*/

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/**

+ * \brief MCI Transfer Request prepared by the application upper layer.

+ *

+ * This structure is sent to the Sdmmc_SendCommand function to start the transfer.

+ * At the end of the transfer, the callback is invoked.

+ */

+typedef struct _MciCmd {

+

+    /** Command code. */

+    uint32_t cmd;

+    /** Command argument. */

+    uint32_t arg;

+    /** Data buffer, with MCI_DMA_ENABLE defined 1, the buffer can be

+     * 1, 2 or 4 bytes aligned. It has to be 4 byte aligned if no DMA.

+     */

+    uint8_t *pData;

+    /** Size of data block in bytes. */

+    uint16_t blockSize;

+    /** Number of blocks to be transfered */

+    uint16_t nbBlock;

+    /** Response buffer. */

+    uint32_t  *pResp;

+    /** Optional user-provided callback function. */

+    void (*callback)( uint8_t status, void *pArg ) ;

+    /** Optional argument to the callback function. */

+    void *pArg;

+    /** SD card command option. */

+    uint8_t resType:7,      /** Response */

+            busyCheck:1;    /** Check busy as end of command */

+    /** Indicate transfer type */

+    uint8_t tranType;

+

+    /** Indicate end of transfer status */

+    uint8_t status;

+

+    /** Command state. */

+    volatile uint8_t state;

+} MciCmd;

+

+/**

+ *  \brief MCI Driver

+ */

+typedef struct

+{

+    /** Pointer to a MCI peripheral. */

+    Hsmci *pMciHw;

+    /** Pointer to currently executing command. */

+    MciCmd *pCommand;

+    /** MCI peripheral identifier. */

+    uint8_t mciId;

+    /** Mutex. */

+    volatile uint8_t semaphore;

+} Mcid;

+

+/*----------------------------------------------------------------------------

+ *         Exported functions

+ *----------------------------------------------------------------------------*/

+

+extern void MCI_Disable(Hsmci *pMciHw);

+extern void MCI_Enable(Hsmci *pMciHw);

+extern uint8_t MCI_EnableHsMode(Mcid * pMci, uint8_t hsEnable);

+extern void MCI_Init( Mcid  *pMci, Hsmci *pMciHw, uint8_t mciId, uint32_t dwMCk ) ;

+extern uint32_t MCI_SetBusWidth(Mcid *pMci, uint32_t busWidth);

+extern uint32_t MCI_SetSpeed(Mcid *pMci, uint32_t mciSpeed, uint32_t mck);

+

+/* pdc if used */

+extern void MCI_Reset(Mcid *pMci, uint8_t keepSettings);

+

+#ifdef __cplusplus

+}

+#endif

+

+/**@}*/

+#endif //#ifndef HSMCID_H

+