1
0
Fork 0
forked from len0rd/rockbox

update the gigabeat code and move to target_tree

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10535 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Marcoen Hirschberg 2006-08-12 08:01:54 +00:00
parent e6ed58f6c5
commit dd754886f5
22 changed files with 622 additions and 118 deletions

View file

@ -274,48 +274,6 @@ int ide_read_register(int reg) {
return ide_reg_temp;
}
#elif defined(TOSHIBA_GIGABEAT_F)
/* Plain C read & write loops */
#define PREFER_C_READING
#define PREFER_C_WRITING
#define ATA_IOBASE 0x18000000
#define ATA_DATA (*((volatile unsigned short*)(ATA_IOBASE)))
#define ATA_ERROR (*((volatile unsigned char*)(ATA_IOBASE + 0x02)))
#define ATA_NSECTOR (*((volatile unsigned char*)(ATA_IOBASE + 0x04)))
#define ATA_SECTOR (*((volatile unsigned char*)(ATA_IOBASE + 0x06)))
#define ATA_LCYL (*((volatile unsigned char*)(ATA_IOBASE + 0x08)))
#define ATA_HCYL (*((volatile unsigned char*)(ATA_IOBASE + 0x10)))
#define ATA_SELECT (*((volatile unsigned char*)(ATA_IOBASE + 0x12)))
#define ATA_COMMAND (*((volatile unsigned char*)(ATA_IOBASE + 0x14)))
#define ATA_CONTROL (*((volatile unsigned char*)(0x20000000 + 0x1c)))
#define STATUS_BSY 0x80
#define STATUS_RDY 0x40
#define STATUS_DF 0x20
#define STATUS_DRQ 0x08
#define STATUS_ERR 0x01
#define ERROR_ABRT 0x04
#define WRITE_PATTERN1 0xa5
#define WRITE_PATTERN2 0x5a
#define WRITE_PATTERN3 0xaa
#define WRITE_PATTERN4 0x55
#define READ_PATTERN1 0xa5
#define READ_PATTERN2 0x5a
#define READ_PATTERN3 0xaa
#define READ_PATTERN4 0x55
#define READ_PATTERN1_MASK 0xff
#define READ_PATTERN2_MASK 0xff
#define READ_PATTERN3_MASK 0xff
#define READ_PATTERN4_MASK 0xff
#define SET_REG(reg,val) reg = (val)
#define SET_16BITREG(reg,val) reg = (val)
#endif
#ifndef NOINLINE_ATTR
@ -323,6 +281,7 @@ int ide_read_register(int reg) {
#endif
#define ATA_FEATURE ATA_ERROR
#define ATA_STATUS ATA_COMMAND
#define ATA_ALT_STATUS ATA_CONTROL
@ -348,7 +307,6 @@ int ide_read_register(int reg) {
#define READ_TIMEOUT 5*HZ
static struct mutex ata_mtx;
char ata_device; /* device 0 (master) or 1 (slave) */
int ata_io_address; /* 0x300 or 0x200, only valid on recorder */
@ -430,6 +388,7 @@ static int wait_for_start_of_transfer(void)
{
if (!wait_for_bsy())
return 0;
return (ATA_ALT_STATUS & (STATUS_BSY|STATUS_DRQ)) == STATUS_DRQ;
}
@ -1402,16 +1361,16 @@ static int check_registers(void)
return -1;
for (i = 0; i<64; i++) {
SET_REG(ATA_NSECTOR, WRITE_PATTERN1);
SET_REG(ATA_SECTOR, WRITE_PATTERN2);
SET_REG(ATA_LCYL, WRITE_PATTERN3);
SET_REG(ATA_HCYL, WRITE_PATTERN4);
if (((ATA_NSECTOR & READ_PATTERN1_MASK) == READ_PATTERN1) &&
((ATA_SECTOR & READ_PATTERN2_MASK) == READ_PATTERN2) &&
((ATA_LCYL & READ_PATTERN3_MASK) == READ_PATTERN3) &&
((ATA_HCYL & READ_PATTERN4_MASK) == READ_PATTERN4))
return 0;
SET_REG(ATA_NSECTOR, WRITE_PATTERN1);
SET_REG(ATA_SECTOR, WRITE_PATTERN2);
SET_REG(ATA_LCYL, WRITE_PATTERN3);
SET_REG(ATA_HCYL, WRITE_PATTERN4);
if (((ATA_NSECTOR & READ_PATTERN1_MASK) == READ_PATTERN1) &&
((ATA_SECTOR & READ_PATTERN2_MASK) == READ_PATTERN2) &&
((ATA_LCYL & READ_PATTERN3_MASK) == READ_PATTERN3) &&
((ATA_HCYL & READ_PATTERN4_MASK) == READ_PATTERN4))
return 0;
}
return -2;
#endif
@ -1957,12 +1916,15 @@ int ata_init(void)
}
rc = identify();
if (rc)
return -40 + rc;
multisectors = identify_info[47] & 0xff;
DEBUGF("ata: %d sectors per ata request\n",multisectors);
rc = freeze_lock();
if (rc)
return -50 + rc;
@ -1977,7 +1939,6 @@ int ata_init(void)
sizeof(ata_stack), ata_thread_name);
initialized = true;
}
rc = set_multiple_mode(multisectors);
if (rc)