Line 149... |
Line 149... |
/*
|
/*
|
D E V I C E S _ I N I T
|
D E V I C E S _ I N I T
|
*/
|
*/
|
void ata_devices_init(ata_devices *devices)
|
void ata_devices_init(ata_devices *devices)
|
{
|
{
|
ata_device_init(&devices->device0, 0);
|
ata_device_init(&devices->device[0], 0);
|
|
|
if(devices->device0.type)
|
if(devices->device[0].type)
|
ata_device_init(&devices->device1, ATA_DHR_DEV);
|
ata_device_init(&devices->device[1], ATA_DHR_DEV);
|
else
|
else
|
ata_device_init(&devices->device1, 0);
|
ata_device_init(&devices->device[1], 0);
|
}
|
}
|
|
|
/*
|
/*
|
D E V I C E S _ H W _ R E S E T
|
D E V I C E S _ H W _ R E S E T
|
*/
|
*/
|
Line 213... |
Line 213... |
{
|
{
|
/* display debug information */
|
/* display debug information */
|
TRACE("ata_devices_hw_reset.\n");
|
TRACE("ata_devices_hw_reset.\n");
|
|
|
/* find device 0 */
|
/* find device 0 */
|
if ( (devices->device0.stream) && (devices->device1.stream) )
|
if((devices->device[0].stream) && (devices->device[1].stream)) {
|
{
|
|
/* this one is simple, device0 is device0 */
|
/* this one is simple, device0 is device0 */
|
|
|
/* 1) handle device1 first */
|
/* 1) handle device1 first */
|
ata_device_hw_reset(&devices->device1, reset_signal,
|
ata_device_hw_reset(&devices->device[1], reset_signal,
|
1, /* assert dasp, this is device1 */
|
1, /* assert dasp, this is device1 */
|
0, /* negate pdiag input, no more devices */
|
0, /* negate pdiag input, no more devices */
|
0); /* negate dasp input, no more devices */
|
0); /* negate dasp input, no more devices */
|
|
|
/* 2) Then handle device0 */
|
/* 2) Then handle device0 */
|
ata_device_hw_reset(&devices->device0, reset_signal,
|
ata_device_hw_reset(&devices->device[0], reset_signal,
|
0,
|
0,
|
devices->device1.sigs.pdiago,
|
devices->device[1].sigs.pdiago,
|
devices->device1.sigs.daspo);
|
devices->device[1].sigs.daspo);
|
}
|
} else if(devices->device[0].stream) {
|
else if (devices->device0.stream)
|
|
{
|
|
/* device0 is device0, there's no device1 */
|
/* device0 is device0, there's no device1 */
|
ata_device_hw_reset(&devices->device0, reset_signal,
|
ata_device_hw_reset(&devices->device[0], reset_signal,
|
0, /* negate dasp, this is device0 */
|
0, /* negate dasp, this is device0 */
|
0, /* negate pdiag input, there's no device1*/
|
0, /* negate pdiag input, there's no device1*/
|
0); /* negate dasp input, there's no device1 */
|
0); /* negate dasp input, there's no device1 */
|
}
|
} else if(devices->device[1].stream) {
|
else if (devices->device1.stream)
|
|
{
|
|
/* device1 is (logical) device0, there's no (physical) device0 */
|
/* device1 is (logical) device0, there's no (physical) device0 */
|
ata_device_hw_reset(&devices->device1, reset_signal,
|
ata_device_hw_reset(&devices->device[1], reset_signal,
|
0, /* negate dasp, this is device0 */
|
0, /* negate dasp, this is device0 */
|
0, /* negate pdiag input, there's no device1*/
|
0, /* negate pdiag input, there's no device1*/
|
0); /* negate dasp input, there's no device1 */
|
0); /* negate dasp input, there's no device1 */
|
}
|
} else {
|
else
|
|
{
|
|
/* no devices connected */
|
/* no devices connected */
|
TRACE("ata_device_hw_reset, no devices connected.\n");
|
TRACE("ata_device_hw_reset, no devices connected.\n");
|
}
|
}
|
}
|
}
|
|
|
Line 343... |
Line 336... |
short ata_devices_read(ata_devices *devices, char adr)
|
short ata_devices_read(ata_devices *devices, char adr)
|
{
|
{
|
ata_device *device;
|
ata_device *device;
|
|
|
/* check for no connected devices */
|
/* check for no connected devices */
|
if ( (!devices->device0.stream) && (!devices->device1.stream) )
|
if((!devices->device[0].stream) && (!devices->device[1].stream))
|
ERR("ata_devices_read, no ata devices connected.\n");
|
ERR("ata_devices_read, no ata devices connected.\n");
|
else
|
else
|
{
|
{
|
/* check if both device0 and device1 are connected */
|
/* check if both device0 and device1 are connected */
|
if ( (devices->device0.stream) && (devices->device1.stream) )
|
if((devices->device[0].stream) && (devices->device[1].stream)) {
|
{
|
|
/* get the current active device */
|
/* get the current active device */
|
if (devices->device1.regs.device_head & ATA_DHR_DEV)
|
if (devices->device[1].regs.device_head & ATA_DHR_DEV)
|
device = &devices->device1;
|
device = &devices->device[1];
|
else
|
else
|
device = &devices->device0;
|
device = &devices->device[0];
|
}
|
}
|
else
|
else
|
{
|
{
|
/* only one device connected */
|
/* only one device connected */
|
if (devices->device1.stream)
|
if(devices->device[1].stream)
|
device = &devices->device1;
|
device = &devices->device[1];
|
else
|
else
|
device = &devices->device0;
|
device = &devices->device[0];
|
}
|
}
|
|
|
/* return data provided by selected device */
|
/* return data provided by selected device */
|
switch (adr) {
|
switch (adr) {
|
case ATA_ASR :
|
case ATA_ASR :
|
Line 522... |
Line 514... |
|
|
/* Write to devices */
|
/* Write to devices */
|
void ata_devices_write(ata_devices *devices, char adr, short value)
|
void ata_devices_write(ata_devices *devices, char adr, short value)
|
{
|
{
|
/* check for no connected devices */
|
/* check for no connected devices */
|
if(!devices->device0.stream && !devices->device1.stream)
|
if(!devices->device[0].stream && !devices->device[1].stream)
|
ERR("ata_devices_write, no ata devices connected.\n");
|
ERR("ata_devices_write, no ata devices connected.\n");
|
else {
|
else {
|
/* first device */
|
/* first device */
|
if(devices->device0.stream)
|
if(devices->device[0].stream)
|
ata_device_write(&devices->device0, adr, value);
|
ata_device_write(&devices->device[0], adr, value);
|
|
|
/* second device */
|
/* second device */
|
if(devices->device1.stream)
|
if(devices->device[1].stream)
|
ata_device_write(&devices->device1, adr, value);
|
ata_device_write(&devices->device[1], adr, value);
|
}
|
}
|
}
|
}
|
|
|
|
|
No newline at end of file
|
No newline at end of file
|