blkdevice.h
128 lines
| 3.8 KiB
| text/x-c
|
CLexer
r47 | /*------------------------------------------------------------------------------ | |||
-- 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 | ||||