summaryrefslogtreecommitdiff
path: root/gdb/sh-stub.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/sh-stub.c')
-rw-r--r--gdb/sh-stub.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/gdb/sh-stub.c b/gdb/sh-stub.c
index 2eb6a5d750..7a717e0ac5 100644
--- a/gdb/sh-stub.c
+++ b/gdb/sh-stub.c
@@ -409,6 +409,52 @@ static const char hexchars[] = "0123456789abcdef";
409static char remcomInBuffer[BUFMAX]; 409static char remcomInBuffer[BUFMAX];
410static char remcomOutBuffer[BUFMAX]; 410static char remcomOutBuffer[BUFMAX];
411 411
412#define ATA_NSECTOR (*((volatile unsigned char*)0x06100102))
413#define ATA_COMMAND (*((volatile unsigned char*)0x06100107))
414#define ATA_CONTROL (*((volatile unsigned char*)0x06200306))
415#define ATA_ALT_STATUS ATA_CONTROL
416
417#define STATUS_BSY 0x80
418#define STATUS_RDY 0x40
419
420#define CMD_STANDBY_IMMEDIATE 0xE0
421#define CMD_STANDBY 0xE2
422
423void ata_wait_for_bsy(void)
424{
425 while (ATA_ALT_STATUS & STATUS_BSY);
426}
427
428int ata_wait_for_rdy(void)
429{
430 ata_wait_for_bsy();
431 return ATA_ALT_STATUS & STATUS_RDY;
432}
433
434int ata_spindown(int time)
435{
436 /* activate ATA */
437 PADR &= ~0x80;
438
439 if(!ata_wait_for_rdy())
440 return -1;
441
442 if ( time == -1 ) {
443 ATA_COMMAND = CMD_STANDBY_IMMEDIATE;
444 }
445 else {
446 if (time > 255)
447 return -1;
448 ATA_NSECTOR = time & 0xff;
449 ATA_COMMAND = CMD_STANDBY;
450 }
451
452 if (!ata_wait_for_rdy())
453 return -1;
454
455 return 0;
456}
457
412void blink(void) 458void blink(void)
413{ 459{
414 while(1) 460 while(1)
@@ -1097,6 +1143,8 @@ void INIT (void)
1097 dofault = 1; 1143 dofault = 1;
1098 stepped = 0; 1144 stepped = 0;
1099 1145
1146 ata_spindown(-1);
1147
1100 stub_sp = stub_stack; 1148 stub_sp = stub_stack;
1101 breakpoint (); 1149 breakpoint ();
1102 1150