simple_disk.cc revision 146
16019Shines@cs.fsu.edu/* 27189Sgblack@eecs.umich.edu * Copyright (c) 2003 The Regents of The University of Michigan 37189Sgblack@eecs.umich.edu * All rights reserved. 47189Sgblack@eecs.umich.edu * 57189Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 67189Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 77189Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 87189Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 97189Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 107189Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 117189Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 127189Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 137189Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 146019Shines@cs.fsu.edu * this software without specific prior written permission. 156019Shines@cs.fsu.edu * 166019Shines@cs.fsu.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 176019Shines@cs.fsu.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 186019Shines@cs.fsu.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 196019Shines@cs.fsu.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 206019Shines@cs.fsu.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 216019Shines@cs.fsu.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 226019Shines@cs.fsu.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 236019Shines@cs.fsu.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 246019Shines@cs.fsu.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 256019Shines@cs.fsu.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 266019Shines@cs.fsu.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 276019Shines@cs.fsu.edu */ 286019Shines@cs.fsu.edu 296019Shines@cs.fsu.edu/* @file 306019Shines@cs.fsu.edu * Simple disk interface for the system console 316019Shines@cs.fsu.edu */ 326019Shines@cs.fsu.edu 336019Shines@cs.fsu.edu#include <sys/types.h> 346019Shines@cs.fsu.edu#include <sys/uio.h> 356019Shines@cs.fsu.edu#include <fcntl.h> 366019Shines@cs.fsu.edu#include <unistd.h> 376019Shines@cs.fsu.edu 386019Shines@cs.fsu.edu#include <cstring> 396019Shines@cs.fsu.edu#include <string> 406019Shines@cs.fsu.edu 416735Sgblack@eecs.umich.edu#include "base/misc.hh" 426735Sgblack@eecs.umich.edu#include "base/trace.hh" 436019Shines@cs.fsu.edu#include "dev/disk_image.hh" 446019Shines@cs.fsu.edu#include "dev/simple_disk.hh" 456019Shines@cs.fsu.edu#include "mem/functional_mem/physical_memory.hh" 466019Shines@cs.fsu.edu#include "sim/builder.hh" 476019Shines@cs.fsu.edu 487362Sgblack@eecs.umich.eduusing namespace std; 496735Sgblack@eecs.umich.edu 506735Sgblack@eecs.umich.eduSimpleDisk::SimpleDisk(const string &name, PhysicalMemory *pmem, 516019Shines@cs.fsu.edu DiskImage *img) 527596Sminkyu.jeong@arm.com : SimObject(name), physmem(pmem), image(img) 536019Shines@cs.fsu.edu{} 546019Shines@cs.fsu.edu 556019Shines@cs.fsu.eduSimpleDisk::~SimpleDisk() 566019Shines@cs.fsu.edu{} 576019Shines@cs.fsu.edu 586735Sgblack@eecs.umich.edu 596019Shines@cs.fsu.eduvoid 607362Sgblack@eecs.umich.eduSimpleDisk::read(Addr addr, baddr_t block, int count) const 616019Shines@cs.fsu.edu{ 626019Shines@cs.fsu.edu uint8_t *data = physmem->dma_addr(addr, count); 636735Sgblack@eecs.umich.edu if (!data) 646735Sgblack@eecs.umich.edu panic("dma out of range! read addr=%#x count=%d\n", addr, count); 656019Shines@cs.fsu.edu 667362Sgblack@eecs.umich.edu if (count & (SectorSize - 1)) 677362Sgblack@eecs.umich.edu panic("Not reading a multiple of a sector (count = %d)", count); 687362Sgblack@eecs.umich.edu 697362Sgblack@eecs.umich.edu for (int i = 0, j = 0; i < count; i += SectorSize, j++) 707362Sgblack@eecs.umich.edu image->read(data + i, block + j); 717362Sgblack@eecs.umich.edu 727362Sgblack@eecs.umich.edu DPRINTF(SimpleDisk, "read block=%#x len=%d\n", (uint64_t)block, count); 737362Sgblack@eecs.umich.edu DDUMP(SimpleDiskData, data, count); 747362Sgblack@eecs.umich.edu} 757362Sgblack@eecs.umich.edu 767362Sgblack@eecs.umich.eduvoid 777362Sgblack@eecs.umich.eduSimpleDisk::write(Addr addr, baddr_t block, int count) 787362Sgblack@eecs.umich.edu{ 797595SGene.Wu@arm.com panic("unimplemented!\n"); 807362Sgblack@eecs.umich.edu 817404SAli.Saidi@ARM.com#if 0 827362Sgblack@eecs.umich.edu uint8_t *data = physmem->dma_addr(addr, count); 837404SAli.Saidi@ARM.com if (!data) 847362Sgblack@eecs.umich.edu panic("dma out of range! write addr=%#x count=%d\n", addr, count); 857362Sgblack@eecs.umich.edu 867362Sgblack@eecs.umich.edu image->write(data, block, count); 877362Sgblack@eecs.umich.edu#endif 887404SAli.Saidi@ARM.com} 897404SAli.Saidi@ARM.com 907362Sgblack@eecs.umich.eduBEGIN_DECLARE_SIM_OBJECT_PARAMS(SimpleDisk) 917362Sgblack@eecs.umich.edu 926735Sgblack@eecs.umich.edu SimObjectParam<PhysicalMemory *> physmem; 936735Sgblack@eecs.umich.edu SimObjectParam<DiskImage *> disk; 946735Sgblack@eecs.umich.edu 956735Sgblack@eecs.umich.eduEND_DECLARE_SIM_OBJECT_PARAMS(SimpleDisk) 966735Sgblack@eecs.umich.edu 976735Sgblack@eecs.umich.eduBEGIN_INIT_SIM_OBJECT_PARAMS(SimpleDisk) 986735Sgblack@eecs.umich.edu 996735Sgblack@eecs.umich.edu INIT_PARAM(physmem, "Physical Memory"), 1006735Sgblack@eecs.umich.edu INIT_PARAM(disk, "Disk Image") 1016735Sgblack@eecs.umich.edu 1026735Sgblack@eecs.umich.eduEND_INIT_SIM_OBJECT_PARAMS(SimpleDisk) 1036735Sgblack@eecs.umich.edu 1046019Shines@cs.fsu.eduCREATE_SIM_OBJECT(SimpleDisk) 1056735Sgblack@eecs.umich.edu{ 1066019Shines@cs.fsu.edu return new SimpleDisk(getInstanceName(), physmem, disk); 1076735Sgblack@eecs.umich.edu} 1086735Sgblack@eecs.umich.edu 1096735Sgblack@eecs.umich.eduREGISTER_SIM_OBJECT("SimpleDisk", SimpleDisk) 1106735Sgblack@eecs.umich.edu