OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [or1ksim/] [peripheral/] [atadevice.c] - Diff between revs 1693 and 1694

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 1693 Rev 1694
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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.