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

Subversion Repositories or1k

[/] [or1k/] [tags/] [rel-0-3-0-rc3/] [or1ksim/] [peripheral/] [atadevice.c] - Diff between revs 1694 and 1695

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

Rev 1694 Rev 1695
Line 120... Line 120...
{
{
  /* set DeviceID                                                     */
  /* set DeviceID                                                     */
  device->internals.dev = dev;
  device->internals.dev = dev;
 
 
  /* generate stream for hd_simulation                                */
  /* generate stream for hd_simulation                                */
  switch(device->type)
  switch(device->conf.type)
  {
  {
    case TYPE_NO_CONNECT:
    case TYPE_NO_CONNECT:
      TRACE("ata_device, using type NO_CONNECT.\n");
      TRACE("ata_device, using type NO_CONNECT.\n");
      device->stream = NULL;
      device->conf.stream = NULL;
      break;
      break;
 
 
    case TYPE_FILE:
    case TYPE_FILE:
      TRACE("ata_device, using device type FILE.\n");
      TRACE("ata_device, using device type FILE.\n");
      device->stream = open_file(&device->size, device->file);
      device->conf.stream = open_file(&device->conf.size, device->conf.file);
      break;
      break;
 
 
    case TYPE_LOCAL:
    case TYPE_LOCAL:
      TRACE("ata_device, using device type LOCAL.\n");
      TRACE("ata_device, using device type LOCAL.\n");
      device->stream = open_local();
      device->conf.stream = open_local();
      break;
      break;
 
 
    default:
    default:
      ERR("Illegal device-type.  Defaulting to type NO_CONNECT.\n");
      ERR("Illegal device-type.  Defaulting to type NO_CONNECT.\n");
      device->stream = NULL;
      device->conf.stream = NULL;
      break;
      break;
  }
  }
}
}
 
 
/*
/*
Line 151... Line 151...
*/
*/
void ata_devices_init(ata_devices *devices)
void ata_devices_init(ata_devices *devices)
{
{
  ata_device_init(&devices->device[0], 0);
  ata_device_init(&devices->device[0], 0);
 
 
  if(devices->device[0].type)
  if(devices->device[0].conf.type)
    ata_device_init(&devices->device[1], ATA_DHR_DEV);
    ata_device_init(&devices->device[1], ATA_DHR_DEV);
  else
  else
    ata_device_init(&devices->device[1],           0);
    ata_device_init(&devices->device[1],           0);
}
}
 
 
Line 182... Line 182...
 
 
      /* clear busy bit                                             */
      /* clear busy bit                                             */
      device->regs.status &= ~ATA_SR_BSY;
      device->regs.status &= ~ATA_SR_BSY;
 
 
      /* set DRDY bit, when not a PACKET device                     */
      /* set DRDY bit, when not a PACKET device                     */
      if(!device->packet)
      if(!device->conf.packet)
        device->regs.status |= ATA_SR_DRDY;
        device->regs.status |= ATA_SR_DRDY;
 
 
      /* set new state                                              */
      /* set new state                                              */
      device->internals.state = ATA_STATE_IDLE;
      device->internals.state = ATA_STATE_IDLE;
    }
    }
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->device[0].stream) && (devices->device[1].stream)) {
  if((devices->device[0].conf.stream) && (devices->device[1].conf.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->device[1], reset_signal,
    ata_device_hw_reset(&devices->device[1], reset_signal,
                        1,   /* assert dasp, this is device1          */
                        1,   /* assert dasp, this is device1          */
Line 227... Line 227...
    /* 2) Then handle device0                                         */
    /* 2) Then handle device0                                         */
    ata_device_hw_reset(&devices->device[0], reset_signal,
    ata_device_hw_reset(&devices->device[0], reset_signal,
                        0,
                        0,
                        devices->device[1].sigs.pdiago,
                        devices->device[1].sigs.pdiago,
                        devices->device[1].sigs.daspo);
                        devices->device[1].sigs.daspo);
  } else if(devices->device[0].stream) {
  } else if(devices->device[0].conf.stream) {
    /* device0 is device0, there's no device1                         */
    /* device0 is device0, there's no device1                         */
    ata_device_hw_reset(&devices->device[0], 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->device[1].conf.stream) {
    /* device1 is (logical) device0, there's no (physical) device0    */
    /* device1 is (logical) device0, there's no (physical) device0    */
    ata_device_hw_reset(&devices->device[1], 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 */
Line 289... Line 289...
 
 
      /* clear busy bit                                               */
      /* clear busy bit                                               */
      device->regs.status &= ~ATA_SR_BSY;
      device->regs.status &= ~ATA_SR_BSY;
 
 
      /* set DRDY bit, when not a PACKET device                       */
      /* set DRDY bit, when not a PACKET device                       */
      if (!device->packet)
      if(!device->conf.packet)
        device->regs.status |= ATA_SR_DRDY;
        device->regs.status |= ATA_SR_DRDY;
 
 
      /* set new state                                                */
      /* set new state                                                */
      device->internals.state = ATA_STATE_IDLE;
      device->internals.state = ATA_STATE_IDLE;
 
 
Line 336... 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->device[0].stream) && (!devices->device[1].stream))
    if((!devices->device[0].conf.stream) && (!devices->device[1].conf.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->device[0].stream) && (devices->device[1].stream)) {
      if((devices->device[0].conf.stream) && (devices->device[1].conf.stream)) {
          /* get the current active device                            */
          /* get the current active device                            */
          if (devices->device[1].regs.device_head & ATA_DHR_DEV)
          if (devices->device[1].regs.device_head & ATA_DHR_DEV)
              device = &devices->device[1];
              device = &devices->device[1];
          else
          else
              device = &devices->device[0];
              device = &devices->device[0];
      }
      }
      else
      else
      {
      {
          /* only one device connected                                */
          /* only one device connected                                */
          if(devices->device[1].stream)
          if(devices->device[1].conf.stream)
              device = &devices->device[1];
              device = &devices->device[1];
          else
          else
              device = &devices->device[0];
              device = &devices->device[0];
      }
      }
 
 
Line 514... 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->device[0].stream && !devices->device[1].stream)
  if(!devices->device[0].conf.stream && !devices->device[1].conf.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->device[0].stream)
    if(devices->device[0].conf.stream)
      ata_device_write(&devices->device[0], adr, value);
      ata_device_write(&devices->device[0], adr, value);
 
 
    /* second device                                                */
    /* second device                                                */
    if(devices->device[1].stream)
    if(devices->device[1].conf.stream)
      ata_device_write(&devices->device[1], 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.