Rev 968 | Blame | Compare with Previous | Last modification | View Log | RSS feed
////// Copyright 2010 TheSeven////// This file is part of emCORE.//// emCORE 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 2 of the// License, or (at your option) any later version.//// emCORE 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 emCORE. If not, see <http://www.gnu.org/licenses/>.////#ifndef __STORAGE_ATA_TARGET_H__#define __STORAGE_ATA_TARGET_H__#include "../global.h"struct __attribute__((packed)) ata_raw_cmd_t{uint8_t lba48;uint8_t transfer;uint8_t send;uint8_t dma;uint32_t delay;void* buffer;uint32_t size;uint32_t blksize;uint16_t feature;uint16_t count;uint16_t lba_low;uint16_t lba_mid;uint16_t lba_high;uint8_t device;uint8_t command;uint8_t result_valid;uint8_t reserved[3];};struct ata_target_driverinfo{void (*srst_after_error)(bool enable);void (*set_retries)(int retries);int (*bbt_translate)(uint64_t sector, uint32_t count, uint64_t* phys, uint32_t* physcount);int (*bbt_reload)();void (*bbt_disable)();int (*soft_reset)();int (*hard_reset)();int (*read_taskfile)(struct ata_raw_cmd_t* cmd);int (*raw_cmd)(struct ata_raw_cmd_t* cmd);};extern uint16_t ata_identify_data[0x100];extern uint64_t ata_total_sectors;extern struct mutex ata_mutex;extern void ata_set_retries(int retries);extern void ata_srst_after_error(bool enable);extern int ata_lock_exclusive(int timeout);extern void ata_unlock_exclusive();extern int ata_soft_reset();extern int ata_hard_reset();extern int ata_read_taskfile(struct ata_raw_cmd_t* cmd);extern int ata_raw_cmd(struct ata_raw_cmd_t* cmd);#ifdef ATA_HAVE_BBTextern uint16_t (*ata_bbt)[0x20];extern uint64_t ata_virtual_sectors;int ata_bbt_translate(uint64_t sector, uint32_t count, uint64_t* phys, uint32_t* physcount);int ata_bbt_reload();void ata_bbt_disable();int ata_rw_sectors_internal(uint64_t sector, uint32_t count, void* buffer, bool write);#endif#endif