Remove simics platform.

This commit is contained in:
Jan Stoess 2010-06-02 04:49:04 +02:00
parent 656d8f811f
commit 37c9acba0a
8 changed files with 0 additions and 838 deletions

View File

@ -1,161 +0,0 @@
/*********************************************************************
*
* Copyright (C) 2002-2004, Karlsruhe University
*
* File path: platform/pc99/82093.h
* Description: Driver for IO-APIC 82093
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: 82093.h,v 1.4 2006/10/19 22:57:36 ud3 Exp $
*
********************************************************************/
#ifndef __PLATFORM__PC99__82093_H__
#define __PLATFORM__PC99__82093_H__
// the 82093 supports 24 IRQ lines
#define I82093_NUM_IRQS 24
typedef union {
struct {
u32_t version : 8;
u32_t : 8;
u32_t max_lvt : 8;
u32_t reserved0 : 8;
} __attribute__((packed)) ver;
u32_t raw;
} ioapic_version_t;
class ioapic_redir_t {
public:
word_t vector : 8;
word_t delivery_mode : 3;
word_t dest_mode : 1;
word_t delivery_status : 1;
word_t polarity : 1;
word_t irr : 1;
word_t trigger_mode : 1;
word_t mask : 1;
word_t : 15;
union {
struct {
word_t : 24;
word_t physical_dest : 4;
word_t : 4;
} __attribute__((packed)) physical;
struct {
word_t : 24;
word_t logical_dest : 8;
} __attribute__((packed)) logical;
} dest;
public:
void set_fixed_hwirq(u32_t vector, bool low_active,
bool level_triggered, bool masked,
u32_t apicid)
{
this->vector = vector;
this->delivery_mode = 0; // fixed
this->dest_mode = 0; // physical mode
this->polarity = low_active ? 1 : 0;
this->trigger_mode = level_triggered ? 1 : 0;
this->mask = masked ? 1 : 0;
this->dest.physical.physical_dest = apicid;
}
void set_phys_dest(u32_t apicid)
{ this->dest.physical.physical_dest = apicid; }
u32_t get_phys_dest()
{ return this->dest.physical.physical_dest; }
void mask_irq() { mask = 1; }
void unmask_irq() { mask = 0; }
bool is_masked_irq()
{return (mask == 1); }
bool is_edge_triggered()
{ return this->trigger_mode == 0; }
} __attribute__((packed));
class i82093_t {
/* IOAPIC register ids */
enum regno_t {
IOAPIC_ID =0x00,
IOAPIC_VER =0x01,
IOAPIC_ARBID =0x02,
IOAPIC_REDIR0 =0x10
};
private:
u32_t get(u32_t reg)
{
*(__volatile__ u32_t*) this = reg;
return *(__volatile__ u32_t*)(((word_t) this) + 0x10);
}
void set(u32_t reg, u32_t val)
{
*(__volatile__ u32_t*) this = reg;
*(__volatile__ u32_t*)(((word_t) this) + 0x10) = val;
}
u32_t reread()
{
return *(__volatile__ u32_t*)(((word_t) this) + 0x10);
}
public:
u8_t id() { return get(IOAPIC_ID) >> 24; };
ioapic_version_t version() {
return (ioapic_version_t) { raw : get(IOAPIC_VER) };
}
/* VU: masking an IRQ on the IOAPIC only becomes active after
* performing a read on the data register. Therefore, when an IRQ
* is masked we always perform the read assuming that masking/
* unmasking is the operation performed most frequently */
void set_redir_entry(word_t idx, ioapic_redir_t redir)
{
ASSERT(idx < 24);
set(0x11 + (idx * 2), *((u32_t*)(&redir) + 1));
set(0x10 + (idx * 2), *((u32_t*)(&redir) + 0));
if (redir.mask) reread();
}
void set_redir_entry_low(word_t idx, ioapic_redir_t redir)
{
ASSERT(idx < 24);
set(0x10 + (idx * 2), *(u32_t*)&redir);
if (redir.mask) reread();
}
ioapic_redir_t get_redir_entry(word_t idx)
{
ASSERT(idx < 24);
ioapic_redir_t redir;
(*((u32_t*)(&redir) + 1)) = get(0x11 + (idx * 2));
(*((u32_t*)(&redir) + 0)) = get(0x10 + (idx * 2));
return redir;
}
};
#endif /* !__PLATFORM__PC99__82093_H__ */

View File

@ -1,164 +0,0 @@
/*********************************************************************
*
* Copyright (C) 2002-2004, 2007, Karlsruhe University
*
* File path: platform/simics/8259.h
* Description: Driver for i8259 Programmable Interrupt Controller
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: 8259.h,v 1.5 2006/10/19 22:57:36 ud3 Exp $
*
********************************************************************/
#ifndef __PLATFORM__PC99__8259_H__
#define __PLATFORM__PC99__8259_H__
#include INC_ARCH(ioport.h) /* for in_u8/out_u8 */
/**
* Driver for i8259 PIC
* @param base the base address of the registers
*
* The template parameter BASE enables compile-time resolution of the
* PIC's control register addresses.
*
* Note:
* Depending on whether CONFIG_X86_INKERNEL_PIC is defined or not
* objects will cache the mask register or not. Thus it is not wise
* to blindly instanciate them all over the place because the cached
* state would not be shared. Making the cached state static
* wouldn't work either because there are two PICs in a
* PC99. Intended use is a single object per PIC.
*
* Assumptions:
* - BASE can be passed as port to in_u8/out_u8
* - The PIC's A0=0 register is located at BASE
* - The PIC's A0=1 register is located at BASE+1
* - PICs in unbuffered cascade mode
*
* Uses:
* - out_u8, in_u8
*/
template<u16_t base> class i8259_pic_t {
private:
u8_t mask_cache;
public:
/**
* Unmask interrupt
* @param irq interrupt line to unmask
*/
void unmask(word_t irq)
{
u8_t mask_cache = in_u8(base+1);
mask_cache &= ~(1 << (irq));
out_u8(base+1, mask_cache);
}
/**
* Mask interrupt
* @param irq interrupt line to mask
*/
void mask(word_t irq)
{
u8_t mask_cache = in_u8(base+1);
mask_cache |= (1 << (irq));
out_u8(base+1, mask_cache);
}
/**
* Send specific EOI
* @param irq interrupt line to ack
*/
void ack(word_t irq)
{
out_u8(base, 0x60 + irq);
}
/**
* Send specific EOI
* @param irq interrupt line to ack
*/
bool is_masked(word_t irq)
{
return (mask_cache & (1 << irq));
}
/**
* initialize PIC
* @param vector_base 8086-style vector number base
* @param slave_info slave mask for master or slave id for slave
*
* Initializes the PIC in 8086-mode:
* - not special-fully-nested mode
* - reporting vectors VECTOR_BASE...VECTOR_BASE+7
* - all inputs masked
*/
void init(u8_t vector_base, u8_t slave_info)
{
mask_cache = 0xFF;
/*
ICW1:
0x10 | NEED_ICW4 | CASCADE_MODE | EDGE_TRIGGERED
*/
out_u8(base, 0x11);
/*
ICW2:
- 8086 mode irq vector base
PIN0->IRQ(base), ..., PIN7->IRQ(base+7)
*/
out_u8(base+1, vector_base);
/*
ICW3:
- master: slave list
Set bits mark input PIN as connected to a slave
- slave: slave id
This PIC is connected to the master's pin SLAVE_ID
Note: The caller knows whether its a master or not -
the handling is the same.
*/
out_u8(base+1, slave_info);
/*
ICW4:
8086_MODE | NORMAL_EOI | NONBUFFERED_MODE | NOT_SFN_MODE
*/
out_u8(base+1, 0x01); /* mode - *NOT* fully nested */
/*
OCW1:
- set initial mask
*/
out_u8(base+1, mask_cache);
//out_u8(base, 0x20);
}
};
#endif /* !__PLATFORM__PC99__8259_H__ */

View File

@ -1,38 +0,0 @@
######################################################################
##
## Copyright (C) 2010, Karlsruhe University
##
## File path: platform/simics/Makeconf
## Description: Generic linkser script for x86.
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions
## are met:
## 1. Redistributions of source code must retain the above copyright
## notice, this list of conditions and the following disclaimer.
## 2. Redistributions in binary form must reproduce the above copyright
## notice, this list of conditions and the following disclaimer in the
## documentation and/or other materials provided with the distribution.
##
## THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
## ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
## FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
## DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
## OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
## LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
## OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
## SUCH DAMAGE.
##
## $Id$
##
######################################################################
SOURCES += $(addprefix src/platform/simics/, startup32.S)
ifeq ("$(CONFIG_IOAPIC)","y")
SOURCES += src/platform/generic/intctrl-apic.cc
else
SOURCES += src/platform/generic/intctrl-pic.cc
endif

View File

@ -1,66 +0,0 @@
/*********************************************************************
*
* Copyright (C) 2003, Karlsruhe University
*
* File path: platform/pc99/acpi.h
* Description: ACPI support code for IA-PCs (PC99)
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: acpi.h,v 1.1 2004/03/01 19:48:24 stoess Exp $
*
********************************************************************/
#ifndef __PLATFORM__PC99__ACPI_H__
#define __PLATFORM__PC99__ACPI_H__
#include <acpi.h>
/* ACPI 2.0 Specification, 5.2.4.1
Finding the RSDP on IA-PC Systems */
#define ACPI20_PC99_RSDP_START 0x0e0000
#define ACPI20_PC99_RSDP_END 0x100000
INLINE acpi_rsdp_t* acpi_rsdp_t::locate()
{
/** @todo checksum, check version */
for (addr_t p = (addr_t)ACPI20_PC99_RSDP_START;
p < (addr_t)ACPI20_PC99_RSDP_END;
p = addr_offset(p, 16))
{
acpi_rsdp_t* r = (acpi_rsdp_t*) p;
if (r->sig[0] == 'R' &&
r->sig[1] == 'S' &&
r->sig[2] == 'D' &&
r->sig[3] == ' ' &&
r->sig[4] == 'P' &&
r->sig[5] == 'T' &&
r->sig[6] == 'R' &&
r->sig[7] == ' ')
return r;
};
/* not found */
return NULL;
};
#endif /* !__PLATFORM__PC99__ACPI_H__ */

View File

@ -1,176 +0,0 @@
/*********************************************************************
*
* Copyright (C) 2002, Karlsruhe University
*
* File path: platform/pc99/mps.h
* Description: Intel multiprocessor specification
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: mps.h,v 1.2 2003/09/24 19:05:00 skoglund Exp $
*
********************************************************************/
#ifndef __PLATFORM__PC99__MPS_H__
#define __PLATFORM__PC99__MPS_H__
enum mps_bustype_t {
MP_BUS_UNKNOWN = 0,
MP_BUS_ISA = 1,
MP_BUS_EISA = 2,
MP_BUS_PCI = 3,
MP_BUS_MCA = 4
};
class mps_mpc_processor_t
{
public:
u8_t type;
u8_t apicid;
u8_t apicver;
u8_t cpuflag;
u32_t cpufeature;
u32_t featureflag;
u32_t reserved[2];
public:
bool is_available()
{ return cpuflag & 1; }
bool is_boot_cpu()
{ return cpuflag & 2; }
};
class mps_mpc_bus_t
{
public:
u8_t type;
u8_t busid;
u8_t bustype[6] __attribute__((packed));
public:
mps_bustype_t get_bustype()
{
if ((bustype[0] == 'I') &&
(bustype[1] == 'S') &&
(bustype[2] == 'A'))
return MPS_BUS_ISA;
return MPS_BUS_UNKNOWN;
}
};
class mps_mpc_ioapic_t
{
public:
u8_t type;
u8_t apicid;
u8_t apicver;
u8_t flags;
addr_t addr;
public:
bool is_usable()
{ return flags & 1; }
};
class mps_mpc_intsrc_t
{
public:
enum irqtype_t {
INT = 0,
NMI = 1,
SMI = 2,
ExtINT = 3
};
u8_t type;
u8_t irqtype;
u16_t irqflags;
u8_t srcbus;
u8_t srcbusirq;
u8_t dstapic;
u8_t dstirq;
public:
irqtype_t get_irqtype()
{ return (irqtype_t)irqtype; }
};
class mps_mp_config_table_t
{
public:
enum entrytype_t
{
processor = 0,
bus = 1,
ioapic = 2,
intsrc = 3,
lintsrc = 4
};
u32_t signature;
u32_t length;
u8_t spec;
u8_t checksum;
char oem[8];
char productid[12];
addr_t oemptr;
u32_t oemsize;
u32_t entries;
u32_t lapic;
u32_t reserved;
public:
bool is_valid()
{ return signature == ('P'|('C'<<8)|('M'<<16)|('P'<<24)); }
};
class mps_mp_floating_t
{
public:
u32_t signature;
mps_mp_config_table_t * config_table;
u8_t length;
u8_t specification;
u8_t checksum;
u8_t feature[5];
public:
static mps_mp_floating_t * scan(addr_t start, addr_t end);
bool is_valid()
{ return signature == (('_'<<24)|('P'<<16)|('M'<<8)|'_'); }
};
static inline mps_mp_floating_t * mps_mp_floating_t::scan(addr_t start, addr_t end)
{
start = addr_mask(start, ~0xf);
while (start < end)
{
if (((mps_mp_floating_t*)start)->is_valid())
return (mps_mp_floating_t*)start;
start = addr_offset(start, 0x10);
}
return NULL;
}
#endif /* !__PLATFORM__PC99__MPS_H__ */

View File

@ -1,64 +0,0 @@
/*********************************************************************
*
* Copyright (C) 2002-2003, 2007, Karlsruhe University
*
* File path: platform/simics/nmi.h
* Description: Driver for NMI masking hardware
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: nmi.h,v 1.4 2006/10/19 22:57:36 ud3 Exp $
*
********************************************************************/
#ifndef __PLATFORM__SIMICS__NMI_H__
#define __PLATFORM__SIMICS__NMI_H__
#include INC_ARCH(ioport.h) /* for in_u8/out_u8 */
#include INC_PLAT(rtc.h) /* for rtc_t */
class nmi_t {
public:
static void mask()
{
/* disable NMI with read from rtc port < 0x80 */
rtc_t<0x70>().read(0);
/* clear and disable IOCHK and PCI SERR# */
out_u8(0x61, (in_u8(0x61) & 0x03) | 0x0c);
};
static void unmask()
{
/* clear and disable IOCHK and PCI SERR# */
out_u8(0x61, (in_u8(0x61) & 0x03) | 0x0c);
/* waste some time */
for (int i = 10000000; i--; ) __asm__ ("");
/* enable IOCHK and PCI SERR# */
out_u8(0x61, in_u8(0x61) & 0x03);
/* enable NMI with read from rtc port < 0x80 */
rtc_t<0x70>().read(0);
};
};
#endif /* !__PLATFORM__SIMICS__NMI_H__ */

View File

@ -1,100 +0,0 @@
/*********************************************************************
*
* Copyright (C) 2002-2003, 2007, Karlsruhe University
*
* File path: platform/simics/rtc.h
* Description: driver for Real Time Clock
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: rtc.h,v 1.3 2003/09/24 19:05:00 skoglund Exp $
*
********************************************************************/
#ifndef __PLATFORM__SIMICS__RTC_H__
#define __PLATFORM__SIMICS__RTC_H__
#include INC_ARCH(ioport.h) /* for in_u8/out_u8 */
/**
* Driver for Real Time Clock
* @param base the base address of the control registers
*
* The template parameter BASE enables compile-time resolution of the
* RTC's control register addresses.
*
* Assumptions:
* - BASE can be passed as port to in_u8/out_u8
* - The RTC's data register is located at BASE+1
*
* Uses:
* - out_u8, in_u8
*/
template <u16_t base> class rtc_t {
public:
/**
* Read RTC register
* @param reg register to read
*
* @returns the content of RTC register REG.
*/
static u8_t read(const u8_t reg) {
/* select register */
out_u8(base, reg);
/* read value */
return in_u8(base+1);
};
/**
* Write RTC register
* @param reg register to write
* @param val value to be written
*
* Sets the content of RTC register REG to VAL.
*/
static void write(const u8_t reg, const u8_t val) {
out_u8(base, reg);
out_u8(base+1, val);
};
};
/**
* Waits for a 1 second tick of the realtime clock
*/
INLINE void wait_for_second_tick()
{
rtc_t<0x70> rtc;
// wait that update bit is off
while (rtc.read(0x0a) & 0x80);
// read second value
word_t secstart = rtc.read(0);
// now wait until seconds change
while (secstart == rtc.read(0));
}
#endif /* !__PLATFORM__SIMICS__RTC_H__ */

View File

@ -1,69 +0,0 @@
/*********************************************************************
*
* Copyright (C) 2002-2004, Karlsruhe University
*
* File path: platform/simics/startup32.S
* Description: startup file for pc99 platform
* initializes segments, invokes init_paging and
* startup_system
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: startup32.S,v 1.4 2006/10/19 22:57:40 ud3 Exp $
*
********************************************************************/
.section .init
.globl start
.align 4
start:
/* Save the multiboot info structure pointer (ebx) to physical
address of kernel_arg. We assume that the kernel IS multibooted.
This value is later on passed to the root task */
/* UD: Actually, we should save the mbi flags as well - just for the
case where we AREN'T multibooted. */
cli /* disable int's */
cld /* clear direction flag */
mov %ds, %ax
mov %ax, %es
mov %ax, %fs
mov %ax, %gs
mov %ax, %ss
/* load temporary stack pointer */
lea _mini_stack-4, %esp
/* set up paging */
call init_paging
nop
.align 4
.space 1024
_mini_stack:
.align 4
.section .mb_header
_mb_header:
.long 0x1BADB002 /* magic */
.long 0x00000000 /* flags */
.long - 0x00000000 - 0x1BADB002 /* check */