Subversion Repositories freemyipod

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
339 theseven 1
//
2
//
3
//    Copyright 2010 TheSeven
4
//
5
//
427 farthen 6
//    This file is part of emCORE.
339 theseven 7
//
427 farthen 8
//    emCORE is free software: you can redistribute it and/or
339 theseven 9
//    modify it under the terms of the GNU General Public License as
10
//    published by the Free Software Foundation, either version 2 of the
11
//    License, or (at your option) any later version.
12
//
427 farthen 13
//    emCORE is distributed in the hope that it will be useful,
339 theseven 14
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
15
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16
//    See the GNU General Public License for more details.
17
//
18
//    You should have received a copy of the GNU General Public License along
427 farthen 19
//    with emCORE.  If not, see <http://www.gnu.org/licenses/>.
339 theseven 20
//
21
//
22
 
23
 
24
#ifndef __STORAGE_ATA_TARGET_H__
25
#define __STORAGE_ATA_TARGET_H__
26
 
613 theseven 27
#include "../global.h"
339 theseven 28
 
29
 
966 theseven 30
struct __attribute__((packed)) ata_raw_cmd_t
31
{
32
    uint8_t lba48;
33
    uint8_t transfer;
34
    uint8_t send;
35
    uint8_t dma;
36
    uint32_t delay;
37
    void* buffer;
38
    uint32_t size;
39
    uint32_t blksize;
40
    uint16_t feature;
41
    uint16_t count;
42
    uint16_t lba_low;
43
    uint16_t lba_mid;
44
    uint16_t lba_high;
45
    uint8_t device;
46
    uint8_t command;
47
    uint8_t result_valid;
48
    uint8_t reserved[3];
49
};
50
 
613 theseven 51
struct ata_target_driverinfo
52
{
620 theseven 53
    void (*srst_after_error)(bool enable);
54
    void (*set_retries)(int retries);
613 theseven 55
    int (*bbt_translate)(uint64_t sector, uint32_t count, uint64_t* phys, uint32_t* physcount);
920 theseven 56
    int (*bbt_reload)();
613 theseven 57
    void (*bbt_disable)();
966 theseven 58
    int (*soft_reset)();
59
    int (*hard_reset)();
60
    int (*read_taskfile)(struct ata_raw_cmd_t* cmd);
61
    int (*raw_cmd)(struct ata_raw_cmd_t* cmd);
613 theseven 62
};
63
 
64
 
339 theseven 65
extern uint16_t ata_identify_data[0x100];
66
extern uint64_t ata_total_sectors;
601 theseven 67
extern struct mutex ata_mutex;
340 theseven 68
 
966 theseven 69
extern void ata_set_retries(int retries);
70
extern void ata_srst_after_error(bool enable);
71
extern int ata_soft_reset();
72
extern int ata_hard_reset();
73
extern int ata_read_taskfile(struct ata_raw_cmd_t* cmd);
74
extern int ata_raw_cmd(struct ata_raw_cmd_t* cmd);
620 theseven 75
 
340 theseven 76
#ifdef ATA_HAVE_BBT
430 theseven 77
extern uint16_t (*ata_bbt)[0x20];
339 theseven 78
extern uint64_t ata_virtual_sectors;
79
 
613 theseven 80
int ata_bbt_translate(uint64_t sector, uint32_t count, uint64_t* phys, uint32_t* physcount);
920 theseven 81
int ata_bbt_reload();
613 theseven 82
void ata_bbt_disable();
339 theseven 83
int ata_rw_sectors_internal(uint64_t sector, uint32_t count, void* buffer, bool write);
340 theseven 84
#endif
339 theseven 85
 
86
 
87
#endif