/*
+ * Copyright (c) 2013 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder. You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
* Copyright (c) 2004-2005 The Regents of The University of Michigan
* All rights reserved.
*
#include "dev/ide_ctrl.hh"
#include "dev/ide_wdcreg.h"
#include "dev/io_device.hh"
-#include "sim/eventq.hh"
#include "params/IdeDisk.hh"
-
+#include "sim/eventq.hh"
class ChunkGenerator;
-#define DMA_BACKOFF_PERIOD 200
+#define DMA_BACKOFF_PERIOD 200
-#define MAX_DMA_SIZE (131072) // 128K
-#define MAX_MULTSECT (128)
+#define MAX_DMA_SIZE 0x20000 // 128K
+#define MAX_SINGLE_DMA_SIZE 0x10000
+#define MAX_MULTSECT (128)
#define PRD_BASE_MASK 0xfffffffe
#define PRD_COUNT_MASK 0xfffe
uint32_t getByteCount()
{
- return ((entry.byteCount == 0) ? MAX_DMA_SIZE :
+ return ((entry.byteCount == 0) ? MAX_SINGLE_DMA_SIZE :
(entry.byteCount & PRD_COUNT_MASK));
}
// DMA protocol
Prepare_Data_Dma,
- Transfer_Data_Dma
+ Transfer_Data_Dma,
+ Device_Dma_Abort
} DevState_t;
typedef enum DmaState {
Dma_Transfer
} DmaState_t;
-class PhysicalMemory;
class IdeController;
/**
int devID;
/** Interrupt pending */
bool intrPending;
-
- Stats::Scalar<> dmaReadFullPages;
- Stats::Scalar<> dmaReadBytes;
- Stats::Scalar<> dmaReadTxs;
- Stats::Scalar<> dmaWriteFullPages;
- Stats::Scalar<> dmaWriteBytes;
- Stats::Scalar<> dmaWriteTxs;
- Stats::Formula rdBandwidth;
- Stats::Formula wrBandwidth;
- Stats::Formula totBandwidth;
- Stats::Formula totBytes;
+ /** DMA Aborted */
+ bool dmaAborted;
+
+ Stats::Scalar dmaReadFullPages;
+ Stats::Scalar dmaReadBytes;
+ Stats::Scalar dmaReadTxs;
+ Stats::Scalar dmaWriteFullPages;
+ Stats::Scalar dmaWriteBytes;
+ Stats::Scalar dmaWriteTxs;
public:
typedef IdeDiskParams Params;