|
|
/*------------------------------------------------------------------------------
|
|
|
-- This file is a part of the libuc, microcontroler library
|
|
|
-- Copyright (C) 2012, Alexis Jeandet
|
|
|
--
|
|
|
-- This program is free software; you can redistribute it and/or modify
|
|
|
-- it under the terms of the GNU General Public License as published by
|
|
|
-- the Free Software Foundation; either version 3 of the License, or
|
|
|
-- (at your option) any later version.
|
|
|
--
|
|
|
-- This program is distributed in the hope that it will be useful,
|
|
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
-- GNU General Public License for more details.
|
|
|
--
|
|
|
-- You should have received a copy of the GNU General Public License
|
|
|
-- along with this program; if not, write to the Free Software
|
|
|
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
-------------------------------------------------------------------------------
|
|
|
-- Author : Alexis Jeandet
|
|
|
-- Mail : alexis.jeandet@gmail.com
|
|
|
-------------------------------------------------------------------------------*/
|
|
|
#ifndef BLKDEVICE_H
|
|
|
#define BLKDEVICE_H
|
|
|
#include <uhandle.h>
|
|
|
/* Disk Status Bits (DSTATUS) */
|
|
|
|
|
|
#define STA_NOINIT 0x01 /* Drive not initialized */
|
|
|
#define STA_NODISK 0x02 /* No medium in the drive */
|
|
|
#define STA_PROTECT 0x04 /* Write protected */
|
|
|
|
|
|
|
|
|
/* Command code for disk_ioctrl fucntion */
|
|
|
/* Generic ioctl command (defined for FatFs) */
|
|
|
#define CTRL_SYNC 0 /* Flush disk cache (for write functions) */
|
|
|
#define GET_SECTOR_COUNT 1 /* Get media size (for only f_mkfs()) */
|
|
|
#define GET_SECTOR_SIZE 2 /* Get sector size (for multiple sector size (_MAX_SS >= 1024)) */
|
|
|
#define GET_BLOCK_SIZE 3 /* Get erase block size (for only f_mkfs()) */
|
|
|
#define CTRL_ERASE_SECTOR 4 /* Force erased a block of sectors (for only _USE_ERASE) */
|
|
|
|
|
|
/* Generic ioctl command */
|
|
|
#define CTRL_POWER 5 /* Get/Set power status */
|
|
|
#define CTRL_LOCK 6 /* Lock/Unlock media removal */
|
|
|
#define CTRL_EJECT 7 /* Eject media */
|
|
|
|
|
|
/* MMC/SDC specific ioctl command */
|
|
|
#define MMC_GET_TYPE 10 /* Get card type */
|
|
|
#define MMC_GET_CSD 11 /* Get CSD */
|
|
|
#define MMC_GET_CID 12 /* Get CID */
|
|
|
#define MMC_GET_OCR 13 /* Get OCR */
|
|
|
#define MMC_GET_SDSTAT 14 /* Get SD status */
|
|
|
|
|
|
/* ATA/CF specific ioctl command */
|
|
|
#define ATA_GET_REV 20 /* Get F/W revision */
|
|
|
#define ATA_GET_MODEL 21 /* Get model name */
|
|
|
#define ATA_GET_SN 22 /* Get serial number */
|
|
|
|
|
|
/* NAND specific ioctl command */
|
|
|
#define NAND_FORMAT 30 /* Create physical format */
|
|
|
|
|
|
/* Status of Disk Functions */
|
|
|
typedef unsigned char DSTATUS;
|
|
|
|
|
|
/* Results of Disk Functions */
|
|
|
typedef enum {
|
|
|
RES_OK = 0, /* 0: Successful */
|
|
|
RES_ERROR, /* 1: R/W Error */
|
|
|
RES_WRPRT, /* 2: Write Protected */
|
|
|
RES_NOTRDY, /* 3: Not Ready */
|
|
|
RES_PARERR /* 4: Invalid Parameter */
|
|
|
} DRESULT;
|
|
|
|
|
|
typedef volatile struct blkdevice* blkdeviceptr;
|
|
|
|
|
|
typedef void (*blkdevselect_t)(char) ;
|
|
|
typedef void (*blkdevpower_t)(char) ;
|
|
|
typedef char (*blkdevdetect_t)() ;
|
|
|
typedef char (*blkdevwriteprotected_t)() ;
|
|
|
typedef DRESULT (*blkdevwrite_t)(blkdeviceptr _this,const char *buff,unsigned long sector,char count) ;
|
|
|
typedef DRESULT (*blkdevread_t)(blkdeviceptr _this,char *buff,unsigned long sector,char count) ;
|
|
|
typedef DRESULT (*blkdevioctl_t)(blkdeviceptr _this,char ctrl,void *buff) ;
|
|
|
typedef DSTATUS (*blkdevinitialize_t)(blkdeviceptr _this) ;
|
|
|
typedef DSTATUS (*blkdevstatus_t) (blkdeviceptr _this) ;
|
|
|
|
|
|
typedef struct blkdevice
|
|
|
{
|
|
|
UHANDLE phy;
|
|
|
unsigned int size;
|
|
|
unsigned int MaxSpeed;
|
|
|
unsigned char Version;
|
|
|
blkdevselect_t select;
|
|
|
blkdevpower_t power;
|
|
|
blkdevdetect_t detect;
|
|
|
blkdevwriteprotected_t writeprotected;
|
|
|
blkdevwrite_t write;
|
|
|
blkdevread_t read;
|
|
|
blkdevioctl_t ioctl;
|
|
|
blkdevinitialize_t initialize;
|
|
|
blkdevstatus_t status;
|
|
|
}blkdevice;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|