gem5  v19.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
ufs_device.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013-2015 ARM Limited
3  * All rights reserved
4  *
5  * The license below extends only to copyright in the software and shall
6  * not be construed as granting a license to any other intellectual
7  * property including but not limited to intellectual property relating
8  * to a hardware implementation of the functionality of the software
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Redistribution and use in source and binary forms, with or without
15  * modification, are permitted provided that the following conditions are
16  * met: redistributions of source code must retain the above copyright
17  * notice, this list of conditions and the following disclaimer;
18  * redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions and the following disclaimer in the
20  * documentation and/or other materials provided with the distribution;
21  * neither the name of the copyright holders nor the names of its
22  * contributors may be used to endorse or promote products derived from
23  * this software without specific prior written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36  *
37  * Authors: Rene de Jong
38  */
39 
40 
144 #ifndef __DEV_ARM_UFS_DEVICE_HH__
145 #define __DEV_ARM_UFS_DEVICE_HH__
146 
147 #include <deque>
148 
149 #include "base/addr_range.hh"
150 #include "base/bitfield.hh"
151 #include "base/statistics.hh"
152 #include "debug/UFSHostDevice.hh"
153 #include "dev/arm/abstract_nvm.hh"
154 #include "dev/arm/base_gic.hh"
155 #include "dev/storage/disk_image.hh"
156 #include "dev/dma_device.hh"
157 #include "dev/io_device.hh"
158 #include "mem/packet.hh"
159 #include "mem/packet_access.hh"
160 #include "params/UFSHostDevice.hh"
161 #include "sim/serialize.hh"
162 #include "sim/stats.hh"
163 
170 class UFSHostDevice : public DmaDevice
171 {
172  public:
173 
174  UFSHostDevice(const UFSHostDeviceParams* p);
175 
176  DrainState drain() override;
177  void checkDrain();
178  void serialize(CheckpointOut &cp) const override;
179  void unserialize(CheckpointIn &cp) override;
180 
181  private:
189  struct HCIMem {
193  uint32_t HCCAP;
194  uint32_t HCversion;
195  uint32_t HCHCDDID;
196  uint32_t HCHCPMID;
197 
205  uint32_t ORUECPA;
206  uint32_t ORUECDL;
207  uint32_t ORUECN;
208  uint32_t ORUECT;
209  uint32_t ORUECDME;
210  uint32_t ORUTRIACR;
211 
215  uint32_t vendorSpecific;
216 
220  uint32_t TRUTRLBA;
221  uint32_t TRUTRLBAU;
222  uint32_t TRUTRLDBR;
223  uint32_t TRUTRLCLR;
224  uint32_t TRUTRLRSR;
225 
229  uint32_t TMUTMRLBA;
230  uint32_t TMUTMRLBAU;
231  uint32_t TMUTMRLDBR;
232  uint32_t TMUTMRLCLR;
233  uint32_t TMUTMRLRSR;
234 
238  uint32_t CMDUICCMDR;
239  uint32_t CMDUCMDARG1;
240  uint32_t CMDUCMDARG2;
241  uint32_t CMDUCMDARG3;
242  };
243 
257  struct UTPUPIUHeader {
258  uint32_t dWord0;
259  uint32_t dWord1;
260  uint32_t dWord2;
261  };
262 
271  struct UTPUPIURSP {
274  uint32_t reserved[4];
275  uint16_t senseDataLen;
276  uint8_t senseData[18];
277  };
278 
287  struct UTPUPIUTaskReq {
289  uint32_t inputParam1;
290  uint32_t inputParam2;
291  uint32_t inputParam3;
292  uint32_t reserved[2];
293  };
294 
302  struct UFSHCDSGEntry {
303  uint32_t baseAddr;
304  uint32_t upperAddr;
305  uint32_t reserved;
306  uint32_t size;
307  };
308 
317  uint8_t commandUPIU[128];
318  uint8_t responseUPIU[128];
319  struct UFSHCDSGEntry PRDTable[128];
320  };
321 
325  struct UPIUMessage {
327  uint32_t dataOffset;
328  uint32_t dataCount;
330  };
331 
343 
352  uint32_t dWord0;
353  uint32_t dWord1;
354  uint32_t dWord2;
355  uint32_t dWord3;
356  } header;
357 
358  /* DW 4-5*/
361 
362  /* DW 6 */
365 
366  /* DW 7 */
367  uint16_t PRDTableLength;
368  uint16_t PRDTableOffset;
369  };
370 
375  struct SCSIReply {
376  void reset() {
377  memset(static_cast<void*>(this), 0, sizeof(*this));
378  }
379 
380  uint8_t status;
381  uint32_t msgSize;
382  uint8_t LUN;
383  struct UPIUMessage message;
384  uint8_t senseSize;
385  uint8_t expectMore;//0x01 is for writes, 0x02 is for reads
386  uint64_t offset;
387  uint8_t senseCode[19];
388  };
389 
395  struct LUNInfo {
396  uint32_t dWord0;
397  uint32_t dWord1;
398  uint32_t vendor0;
399  uint32_t vendor1;
400  uint32_t product0;
401  uint32_t product1;
402  uint32_t product2;
403  uint32_t product3;
404  uint32_t productRevision;
405  };
406 
426  struct transferInfo {
428  uint32_t size;
429  uint64_t offset;
430  uint32_t filePointer;
431  uint32_t lunID;
432  };
433 
440  uint32_t reqPos;
441  struct UTPUPIURSP requestOut;
442  uint32_t size;
444  uint8_t *destination;
445  bool finished;
446  uint32_t lunID;
447  };
448 
452  struct transferStart {
454  uint32_t mask;
456  uint32_t size;
457  uint32_t done;
458  uint32_t lun_id;
459  };
460 
464  struct taskStart {
466  uint32_t mask;
468  uint32_t size;
469  bool done;
470  };
471 
476  struct SCSIResumeInfo {
478  int reqPos;
480  uint32_t finalSize;
482  uint32_t done;
483  };
484 
491  uint64_t SCSIDiskOffset;
492  uint32_t size;
493  uint32_t LUN;
494  };
495 
504 
512 
516 
521 
526 
530  };
531 
538  {
539  public:
543  UFSSCSIDevice(const UFSHostDeviceParams* p, uint32_t lun_id, Callback*
544  transfer_cb, Callback *read_cb);
545  ~UFSSCSIDevice();
546 
552  struct SCSIReply SCSICMDHandle(uint32_t* SCSI_msg);
553 
562  void readFlash(uint8_t* readaddr, uint64_t offset, uint32_t size);
563 
568  void writeFlash(uint8_t* writeaddr, uint64_t offset, uint32_t size);
569 
575  bool finishedCommand() const {return transferCompleted;};
576 
581  void clearSignal() {transferCompleted = false;};
582 
590  bool finishedRead() const {return readCompleted;};
591 
596  void clearReadSignal() {readCompleted = false;};
597 
603  void SSDReadStart(uint32_t total_read);
604  void SSDWriteStart();
605 
611  void setTotalWrite(uint32_t total_write) {totalWrite = total_write;};
612 
617 
628 
634 
642 
643  private:
650  void readCallback();
651 
656  void SSDReadDone();
657 
661  void SSDWriteDone();
662 
668  void statusCheck(uint8_t status, uint8_t* sensecodelist);
669 
673  void setSignal() {transferCompleted = true;};
674 
678  void setReadSignal() {readCompleted = true;};
679 
685  DiskImage* flashDisk;
687 
691  const uint32_t blkSize;
692  const uint32_t lunAvail;
693  const uint64_t diskSize;
694  const uint32_t capacityLower;
695  const uint32_t capacityUpper;
696 
701  struct LUNInfo lunInfo;
702  const uint32_t lunID;
703 
711 
715  uint32_t totalRead;
716  uint32_t totalWrite;
717 
723 
729 
735 
736  /*
737  * Default response header layout. For more information refer to
738  * chapter 7 http://www.jedec.org/standards-documents/results/jesd220
739  */
740  static const unsigned int UPIUHeaderDataIndWord0 = 0x0000C022;
741  static const unsigned int UPIUHeaderDataIndWord1 = 0x00000000;
742  static const unsigned int UPIUHeaderDataIndWord2 = 0x40000000;
743 
744  /*
745  * SCSI mode pages values assigned in ufs_device.cc
746  * The mode pages give device specific information via the SCSI
747  * protocol. They are defined in
748  * http://www.jedec.org/standards-documents/results/jesd220
749  */
750  static const unsigned int controlPage[3];
751  static const unsigned int recoveryPage[3];
752  static const unsigned int cachingPage[5];
753 
754  /*
755  * SCSI command set; defined in
756  * http://www.jedec.org/standards-documents/results/jesd220
757  */
759  SCSIInquiry = 0x12,
760  SCSIRead6 = 0x08,
761  SCSIRead10 = 0x28,
762  SCSIRead16 = 0x88,
763  SCSIReadCapacity10 = 0x25,
764  SCSIReadCapacity16 = 0x9E,
765  SCSIReportLUNs = 0xA0,
766  SCSIStartStop = 0x1B,
767  SCSITestUnitReady = 0x00,
768  SCSIVerify10 = 0x2F,
769  SCSIWrite6 = 0x0A,
770  SCSIWrite10 = 0x2A,
771  SCSIWrite16 = 0x8A,
772  SCSIFormatUnit = 0x04,
773  SCSISendDiagnostic = 0x1D,
774  SCSISynchronizeCache = 0x35,
775  //UFS SCSI additional command set for full functionality
776  SCSIModeSelect10 = 0x55,
777  SCSIModeSense6 = 0x1A,
778  SCSIModeSense10 = 0x5A,
779  SCSIRequestSense = 0x03,
780  SCSIUnmap = 0x42,
781  SCSIWriteBuffer = 0x3B,
782  SCSIReadBuffer = 0x3C,
783  //SCSI commands not supported by UFS; but Linux send them anyway
784  SCSIMaintenanceIn = 0xA3
785  };
786 
787  /*
788  * SCSI status codes; defined in
789  * http://www.jedec.org/standards-documents/results/jesd220
790  */
792  SCSIGood = 0x00,
793  SCSICheckCondition = 0x02,
794  SCSIConditionGood = 0x04,
795  SCSIBusy = 0x08,
796  SCSIIntermediateGood = 0x10,
797  SCSIIntermediatCGood = 0x14,
798  SCSIReservationConflict = 0x18,
799  SCSICommandTerminated = 0x22,
800  SCSITaskSetFull = 0x28,
801  SCSIACAActive = 0x30,
802  SCSITaskAborted = 0x40
803  };
804 
805  /*
806  * SCSI sense codes; defined in
807  * http://www.jedec.org/standards-documents/results/jesd220
808  */
810  SCSINoSense = 0x00,
811  SCSIRecoverdError = 0x01,
812  SCSINotReady = 0x02,
813  SCSIMediumError = 0x03,
814  SCSIHardwareError = 0x04,
815  SCSIIllegalRequest = 0x05,
816  SCSIUnitAttention = 0x06,
817  SCSIDataProtect = 0x07,
818  SCSIBlankCheck = 0x08,
819  SCSIAbortedCommand = 0x0B,
820  SCSIVolumeOverflow = 0x0D,
821  SCSIMisCompare = 0x0E
822  };
823 
824  };
825 
826  //All access functions are inherrited; no need to make them public
830  AddrRangeList getAddrRanges() const override;
831 
835  Tick read(PacketPtr pkt) override;
836  Tick write(PacketPtr pkt) override;
837  // end of access functions
838 
842  void setValues();
843 
857  void requestHandler();
858 
863  void commandHandler();
864 
869  void taskStart();
870 
876  void taskHandler(struct UTPUPIUTaskReq* request_in,
877  uint32_t req_pos, Addr finaladdress, uint32_t finalsize);
878 
883  void transferStart();
884 
895  request_in, int req_pos, Addr finaladdress,
896  uint32_t finalsize, uint32_t done);
897 
902  void SCSIStart();
903 
908  void SCSIResume(uint32_t lun_id);
909 
913  void LUNSignal();
914 
919  void transferDone(Addr responseStartAddr, uint32_t req_pos,
920  struct UTPUPIURSP request_out, uint32_t size,
921  Addr address, uint8_t* destination, bool finished,
922  uint32_t lun_id);
927  void finalUTP();
928 
932  void clearInterrupt();
933  void generateInterrupt();
934 
942  void writeDevice(Event* additional_action, bool toDisk, Addr start,
943  int size, uint8_t* destination, uint64_t SCSIDiskOffset,
944  uint32_t lun_id);
945  void readDevice(bool lastTransfer, Addr SCSIStart, uint32_t SCSISize,
946  uint8_t* SCSIDestination, bool no_cache,
947  Event* additional_action);
948 
955  void manageWriteTransfer(uint8_t LUN, uint64_t offset, uint32_t
956  sg_table_length, struct UFSHCDSGEntry* sglist);
957  void manageReadTransfer(uint32_t size, uint32_t LUN, uint64_t offset,
958  uint32_t sg_table_length,
959  struct UFSHCDSGEntry* sglist);
960 
967  void readDone();
968 
975  void writeDone();
976 
983  void readCallback();
984 
992  void readGarbage();
993 
995  void regStats() override;
996 
1000  const Addr pioAddr;
1001  const Addr pioSize;
1003  const int intNum;
1005  const uint32_t lunAvail;
1006  const uint8_t UFSSlots;
1007 
1012 
1018 
1030 
1038  uint32_t countInt;
1039 
1048  uint32_t transferTrack;
1050 
1058 
1065 
1072 
1080 
1089 
1101 
1106 
1111 
1116 
1121 
1126 
1138 
1146 
1158 
1163 
1168 
1176 
1180  static const unsigned int UTPTransferREQCOMPL = 0x01;//UFS_BIT(0)
1181  static const unsigned int UTPTaskREQCOMPL = 0x200;//UFS_BIT(9)
1182  static const unsigned int UICCommandCOMPL = 0x400;//UFS_BIT(10)
1183  static const unsigned int UICCommandReady = 0x08;//UFS_BIT(3)
1184 
1185  /*
1186  * UFSHCI Registers; please refer to
1187  * http://www.jedec.org/standards-documents/results/jesd223
1188  * for their definition.
1189  */
1219  };
1220 };
1221 
1222 #endif //__DEV_ARM_UFS_DEVICE_HH__
Stats::Scalar currentSCSIQueue
Queue lengths.
Definition: ufs_device.hh:501
const uint32_t lunAvail
Definition: ufs_device.hh:1005
std::deque< struct transferInfo > SSDReadPending
Information from the Disk, waiting to be pushed to the DMA.
Definition: ufs_device.hh:1115
void clearReadSignal()
Clear signal.
Definition: ufs_device.hh:596
struct SCSIResumeInfo SCSIInfo
SCSI resume info information structure for SCSI resume.
Definition: ufs_device.hh:1079
void generateInterrupt()
set interrupt and sort out the doorbell register.
Definition: ufs_device.cc:1819
std::deque< EventFunctionWrapper > writeDoneEvent
Definition: ufs_device.hh:1137
output header
Definition: nop.cc:39
Callback * transferDoneCallback
Callbacks for the logic units.
Definition: ufs_device.hh:1144
void setSignal()
set signal to indicate that the transaction has been completed.
Definition: ufs_device.hh:673
std::deque< struct taskStart > taskInfo
When a task/transfer is started it needs information about the task/transfer it is about to perform...
Definition: ufs_device.hh:1099
Generic callback class.
Definition: callback.hh:41
AddrRangeList getAddrRanges() const override
Address range functions.
Definition: ufs_device.cc:916
uint32_t totalRead
Total amount transactions that need to be made.
Definition: ufs_device.hh:715
void unserialize(CheckpointIn &cp) override
Unserialize; needed to restore from checkpoints.
Definition: ufs_device.cc:2315
A stat that calculates the per tick average of a value.
Definition: statistics.hh:2524
DrainState
Object drain/handover states.
Definition: drain.hh:71
void setValues()
Initialization function.
Definition: ufs_device.cc:889
std::deque< struct transferStart > transferStartInfo
Definition: ufs_device.hh:1100
Tick transactionStart[32]
Helper for latency stats These variables keep track of the latency for every doorbell.
Definition: ufs_device.hh:1056
uint32_t ORInterruptStatus
Operation and runtime registers.
Definition: ufs_device.hh:201
std::vector< uint8_t > buffer
Definition: ufs_device.hh:427
UPIU tranfer message.
Definition: ufs_device.hh:325
void finalUTP()
final UTP, sends the last acknowledge data structure to the system; prepares the clean up functions...
Definition: ufs_device.cc:1745
Stats::Scalar totalReadSSD
Amount of data read/written.
Definition: ufs_device.hh:506
EventFunctionWrapper UTPEvent
Wait for the moment where we can send the last frame.
Definition: ufs_device.hh:1162
void transferStart()
Transfer Start function.
Definition: ufs_device.cc:1364
std::deque< EventFunctionWrapper > readGarbageEventQueue
Event after a read to clean up the UTP data structures.
Definition: ufs_device.hh:1167
std::deque< EventFunctionWrapper > transferEventQueue
Definition: ufs_device.hh:1175
struct UTPUPIURSP - Response UPIU structure header: UPIU header DW-0 to DW-2 residualTransferCount: R...
Definition: ufs_device.hh:271
void manageWriteTransfer(uint8_t LUN, uint64_t offset, uint32_t sg_table_length, struct UFSHCDSGEntry *sglist)
Disk transfer management functions these set up the queues, and initiated them, leading to the data t...
Definition: ufs_device.cc:1932
bool transferCompleted
Signals to Host layer 1: signal for transaction completion 2: signal for read action completion...
Definition: ufs_device.hh:709
struct UTPTransferReqDesc - UTRD structure header: UTRD header DW-0 to DW-3 commandDescBaseAddrLo: UC...
Definition: ufs_device.hh:342
UFS command flow state machine digraph CommandFlow{ node [fontsize=10]; IDLE -> transferHandler [ lab...
Definition: ufs_device.hh:170
UFSHostDevice(const UFSHostDeviceParams *p)
Constructor for the UFS Host device.
Definition: ufs_device.cc:719
transferDoneInfo transferInfo
End of transfer information.
Definition: ufs_device.hh:611
uint32_t ORInterruptEnable
Definition: ufs_device.hh:202
Bitfield< 23, 0 > offset
Definition: types.hh:154
void regStats() override
register statistics
Definition: ufs_device.cc:775
Stats::Scalar totalWriteDiskTransactions
Definition: ufs_device.hh:509
uint8_t pendingDoorbells
Definition: ufs_device.hh:1029
Definition: cprintf.cc:42
struct UTPUPIUTaskReq - Task request UPIU structure header - UPIU header structure DW0 to DW-2 inputP...
Definition: ufs_device.hh:287
Tick write(PacketPtr pkt) override
UFSHCD write function.
Definition: ufs_device.cc:1067
struct UFSHostDeviceStats stats
RequestHandler stats.
Definition: ufs_device.hh:1125
std::deque< EventFunctionWrapper > taskEventQueue
Multiple tasks transfers can be scheduled at once for the device, the only thing we know for sure abo...
Definition: ufs_device.hh:1174
std::deque< struct transferStart > transferEnd
To finish the transaction one needs information about the original message.
Definition: ufs_device.hh:1088
uint32_t ORHostControllerEnable
Definition: ufs_device.hh:204
Tick read(PacketPtr pkt) override
register access functions
Definition: ufs_device.cc:929
Declaration of Statistics objects.
This is a simple scalar statistic, like a counter.
Definition: statistics.hh:2508
int readPendingNum
Track number of DMA transactions in progress.
Definition: ufs_device.hh:1016
const Addr pioAddr
Host controller information.
Definition: ufs_device.hh:1000
void readCallback()
Read callback Call back function for the logic units to indicate the completion of a read action...
Definition: ufs_device.cc:2248
std::deque< struct UTPTransferReqDesc * > garbage
garbage queue, ensure clearing of the allocated memory
Definition: ufs_device.hh:1120
bool finishedCommand() const
finished command.
Definition: ufs_device.hh:575
Bitfield< 5, 0 > status
void commandHandler()
Command handler function.
Definition: ufs_device.cc:1384
const int intNum
Definition: ufs_device.hh:1003
uint32_t HCCAP
Specify the host capabilities.
Definition: ufs_device.hh:193
uint8_t activeDoorbells
Statistics helper variables Active doorbells indicates how many doorbells are in teh process of being...
Definition: ufs_device.hh:1028
Callback * memReadCallback
Callbacks between Device and Memory.
Definition: ufs_device.hh:733
All the data structures are defined in the UFS standard This standard be found at the JEDEC website f...
Definition: ufs_device.hh:257
Stats::Average averageSCSIQueue
Average Queue lengths.
Definition: ufs_device.hh:518
SCSI reply structure.
Definition: ufs_device.hh:375
uint32_t ORHostControllerStatus
Definition: ufs_device.hh:203
std::deque< struct SCSIResumeInfo > SCSIInfoQueue
Information message queues, as there can be multiple messages queued for handling in this system...
Definition: ufs_device.hh:627
uint64_t Tick
Tick count type.
Definition: types.hh:63
void clearInterrupt()
Interrupt control functions.
Definition: ufs_device.cc:1842
transfer completion info.
Definition: ufs_device.hh:438
bool finishedRead() const
Finished read.
Definition: ufs_device.hh:590
std::vector< uint8_t > destination
Definition: ufs_device.hh:481
void taskStart()
Task Start function.
Definition: ufs_device.cc:1350
void readDevice(bool lastTransfer, Addr SCSIStart, uint32_t SCSISize, uint8_t *SCSIDestination, bool no_cache, Event *additional_action)
Dma transaction function: read device.
Definition: ufs_device.cc:2086
A simple histogram stat.
Definition: statistics.hh:2629
void serialize(CheckpointOut &cp) const override
Serialize; needed to make checkpoints.
Definition: ufs_device.cc:2298
std::deque< struct transferInfo > SSDWriteDoneInfo
SSDWriteDoneInfo: Structure from dma to disk, that contains data, and helper info to get it to the ri...
Definition: ufs_device.hh:641
HCIMem UFSHCIMem
Host controller memory.
Definition: ufs_device.hh:1011
BaseGic * gic
Definition: ufs_device.hh:1004
const uint32_t capacityUpper
Definition: ufs_device.hh:695
Stats::Formula curDoorbell
Number of doorbells rung.
Definition: ufs_device.hh:523
void LUNSignal()
LU callback function to indicate that the action has completed.
Definition: ufs_device.cc:1674
DrainState drain() override
Drain; needed to enable checkpoints.
Definition: ufs_device.cc:2332
std::deque< struct writeToDiskBurst > dmaWriteInfo
Information to get a DMA transaction.
Definition: ufs_device.hh:1105
Basic interface for accessing a disk image.
Definition: disk_image.hh:51
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
uint32_t TMUTMRLBA
Task control registers.
Definition: ufs_device.hh:229
void transferHandler(struct UTPTransferReqDesc *request_in, int req_pos, Addr finaladdress, uint32_t finalsize, uint32_t done)
Transfer handler function.
Definition: ufs_device.cc:1434
void SCSIStart()
Transfer SCSI function.
Definition: ufs_device.cc:1477
struct UTPTransferCMDDesc - UFS Commad Descriptor structure commandUPIU: Command UPIU Frame address r...
Definition: ufs_device.hh:316
void readGarbage()
Read garbage A read from disk data structure can vary in size and is therefor allocated on creation...
Definition: ufs_device.cc:2286
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
Definition: packet.hh:255
uint32_t CMDUICCMDR
Command registers.
Definition: ufs_device.hh:238
Callback * signalDone
Callbacks between Host and Device.
Definition: ufs_device.hh:727
EventFunctionWrapper SCSIResumeEvent
The events that control the functionality.
Definition: ufs_device.hh:1157
static const unsigned int UTPTaskREQCOMPL
Definition: ufs_device.hh:1181
std::deque< EventFunctionWrapper > readDoneEvent
Transfer flow events Basically these events form two queues, one from memory to UFS device (DMA) and ...
Definition: ufs_device.hh:1136
void manageReadTransfer(uint32_t size, uint32_t LUN, uint64_t offset, uint32_t sg_table_length, struct UFSHCDSGEntry *sglist)
Manage read transfer.
Definition: ufs_device.cc:2121
STL deque class.
Definition: stl.hh:47
struct UTPTransferReqDesc * destination
Definition: ufs_device.hh:453
A formula for statistics that is calculated when printed.
Definition: statistics.hh:3012
void setReadSignal()
set signal to indicate that the read action has been completed
Definition: ufs_device.hh:678
Logic unit information structure.
Definition: ufs_device.hh:395
Task start information.
Definition: ufs_device.hh:464
device layer: This is your Logic unit This layer implements the SCSI functionality of the UFS Device ...
Definition: ufs_device.hh:537
struct UTPTransferReqDesc * RequestIn
Definition: ufs_device.hh:477
uint32_t amountOfWriteTransfers
transaction progress tracking
Definition: ufs_device.hh:721
Base class for ARM GIC implementations.
void readDone()
Read done Started at the end of a transaction after the last read action.
Definition: ufs_device.cc:1791
struct RequestDescHeader dword0: Descriptor Header DW0 dword1: Descriptor Header DW1 dword2: Descript...
Definition: ufs_device.hh:351
Declaration of the Packet class.
const Addr pioSize
Definition: ufs_device.hh:1001
uint32_t vendorSpecific
vendor specific register
Definition: ufs_device.hh:215
std::ostream CheckpointOut
Definition: serialize.hh:68
static const unsigned int UTPTransferREQCOMPL
Bits of interest within UFS data packages.
Definition: ufs_device.hh:1180
Stats::Formula averageReadSSDBW
Average bandwidth for reads and writes.
Definition: ufs_device.hh:514
Host Controller Interface This is a set of registers that allow the driver to control the transaction...
Definition: ufs_device.hh:189
void writeDone()
Write done After a DMA write with data intended for the disk, this function is called.
Definition: ufs_device.cc:1991
Different events, and scenarios require different types of information.
Definition: ufs_device.hh:426
Definition: eventq.hh:189
const Tick pioDelay
Definition: ufs_device.hh:1002
Disk Image Interfaces.
uint32_t TRUTRLBA
Transfer control registers.
Definition: ufs_device.hh:220
struct SCSIReply request_out_datain
SCSI reply structure, used for direct answering.
Definition: ufs_device.hh:1071
After a SCSI command has been identified, the SCSI resume function will handle it.
Definition: ufs_device.hh:476
uint32_t taskCommandTrack
Definition: ufs_device.hh:1049
std::deque< struct transferInfo > SSDWriteinfo
Information from DMA transaction to disk.
Definition: ufs_device.hh:1110
void clearSignal()
Clear signal.
Definition: ufs_device.hh:581
const uint32_t capacityLower
Definition: ufs_device.hh:694
Stats::Histogram transactionLatency
Histogram of latencies.
Definition: ufs_device.hh:528
const uint32_t blkSize
Logic unit dimensions.
Definition: ufs_device.hh:691
Transfer start information.
Definition: ufs_device.hh:452
This is an interface between the disk interface (which will handle the disk data transactions) and th...
Definition: abstract_nvm.hh:55
struct UFSHCDSGEntry - UFSHCI PRD Entry baseAddr: Lower 32bit physical address DW-0 upperAddr: Upper ...
Definition: ufs_device.hh:302
Callback * memReadCallback
Definition: ufs_device.hh:1145
void taskHandler(struct UTPUPIUTaskReq *request_in, uint32_t req_pos, Addr finaladdress, uint32_t finalsize)
Task handler function.
Definition: ufs_device.cc:1398
uint32_t transferTrack
Track the transfer This is allows the driver to "group" certain transfers together by using a tag in ...
Definition: ufs_device.hh:1048
std::vector< uint32_t > dataMsg
Definition: ufs_device.hh:329
Disk transfer burst information.
Definition: ufs_device.hh:489
std::vector< UFSSCSIDevice * > UFSDevice
logic units connected to the UFS Host device Note again that the "device" as such is represented by o...
Definition: ufs_device.hh:1064
uint32_t countInt
interrupt verification This keeps track of the number of interrupts generated.
Definition: ufs_device.hh:1038
Bitfield< 0 > p
const uint8_t UFSSlots
Definition: ufs_device.hh:1006
void requestHandler()
Handler functions.
Definition: ufs_device.cc:1231
void checkDrain()
Checkdrain; needed to enable checkpoints.
Definition: ufs_device.cc:2348
void SCSIResume(uint32_t lun_id)
Starts the scsi handling function in the apropriate Logic unit, prepares the right data transfer sche...
Definition: ufs_device.cc:1522
Abstract superclass for simulation objects.
Definition: sim_object.hh:96
void transferDone(Addr responseStartAddr, uint32_t req_pos, struct UTPUPIURSP request_out, uint32_t size, Addr address, uint8_t *destination, bool finished, uint32_t lun_id)
transfer done, the beginning of the final stage of the transfer.
Definition: ufs_device.cc:1706
static const unsigned int UICCommandCOMPL
Definition: ufs_device.hh:1182
static const unsigned int UICCommandReady
Definition: ufs_device.hh:1183
std::deque< struct transferInfo > SSDReadInfo
SSDReadInfo: Structure from disk to dma, that contains data, and helper info to get it to the right p...
Definition: ufs_device.hh:633
void writeDevice(Event *additional_action, bool toDisk, Addr start, int size, uint8_t *destination, uint64_t SCSIDiskOffset, uint32_t lun_id)
DMA transfer functions These allow the host to push/pull the data to the memory The provided event in...
Definition: ufs_device.cc:1880

Generated on Fri Feb 28 2020 16:27:00 for gem5 by doxygen 1.8.13