aboutsummaryrefslogtreecommitdiffstats
path: root/tools/ioemu/memory/memory.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/ioemu/memory/memory.h')
-rw-r--r--tools/ioemu/memory/memory.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/tools/ioemu/memory/memory.h b/tools/ioemu/memory/memory.h
new file mode 100644
index 0000000000..2af787b3c3
--- /dev/null
+++ b/tools/ioemu/memory/memory.h
@@ -0,0 +1,98 @@
+/////////////////////////////////////////////////////////////////////////
+// $Id: memory.h,v 1.16 2003/08/05 13:19:35 cbothamy Exp $
+/////////////////////////////////////////////////////////////////////////
+//
+// Copyright (C) 2001 MandrakeSoft S.A.
+//
+// MandrakeSoft S.A.
+// 43, rue d'Aboukir
+// 75002 Paris - France
+// http://www.linux-mandrake.com/
+// http://www.mandrakesoft.com/
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+
+#define BX_USE_MEM_SMF 0
+
+#if BX_USE_MEM_SMF
+// if static member functions on, then there is only one memory
+# define BX_MEM_SMF static
+# define BX_MEM_THIS BX_MEM(0)->
+#else
+# define BX_MEM_SMF
+# define BX_MEM_THIS this->
+#endif
+
+// alignment of memory vector, must be a power of 2
+#define BX_MEM_VECTOR_ALIGN 4096
+
+class BOCHSAPI BX_MEM_C : public logfunctions {
+
+public:
+ Bit8u *actual_vector;
+ Bit8u *vector; // aligned correctly
+ size_t len;
+ size_t dma_limit;
+ size_t megabytes; // (len in Megabytes)
+#if BX_PCI_SUPPORT
+ Bit8u shadow[4*16*4096]; // 256k of memory
+#endif
+#if BX_DEBUGGER
+ unsigned char dbg_dirty_pages[(BX_MAX_DIRTY_PAGE_TABLE_MEGS * 1024 * 1024) / 4096];
+ Bit32u dbg_count_dirty_pages () {
+ return (BX_MAX_DIRTY_PAGE_TABLE_MEGS * 1024 * 1024) / 4096;
+ }
+#endif
+ unsigned long *page_array; /* for get_pfn_list() */
+
+ BX_MEM_C(void);
+ //BX_MEM_C(size_t memsize);
+ ~BX_MEM_C(void);
+ BX_MEM_SMF void alloc_vector_aligned (size_t bytes, size_t alignment) BX_CPP_AttrRegparmN(2);
+ BX_MEM_SMF void init_memory(int memsize);
+ BX_MEM_SMF void readPhysicalPage(BX_CPU_C *cpu, Bit32u addr,
+ unsigned len, void *data) BX_CPP_AttrRegparmN(3);
+ BX_MEM_SMF void writePhysicalPage(BX_CPU_C *cpu, Bit32u addr,
+ unsigned len, void *data) BX_CPP_AttrRegparmN(3);
+ BX_MEM_SMF void load_ROM(const char *path, Bit32u romaddress, Bit8u type);
+ BX_MEM_SMF Bit32u get_memory_in_k(void);
+#if BX_PCI_SUPPORT
+ BX_MEM_SMF Bit8u* pci_fetch_ptr(Bit32u addr) BX_CPP_AttrRegparmN(1);
+#endif
+ BX_MEM_SMF bx_bool dbg_fetch_mem(Bit32u addr, unsigned len, Bit8u *buf);
+ BX_MEM_SMF bx_bool dbg_set_mem(Bit32u addr, unsigned len, Bit8u *buf);
+ BX_MEM_SMF bx_bool dbg_crc32(
+ unsigned long (*f)(unsigned char *buf, int len),
+ Bit32u addr1, Bit32u addr2, Bit32u *crc);
+ BX_MEM_SMF Bit8u * getHostMemAddr(BX_CPU_C *cpu, Bit32u a20Addr, unsigned op) BX_CPP_AttrRegparmN(3);
+ };
+
+#if BX_PROVIDE_CPU_MEMORY==1
+
+#if BX_SMP_PROCESSORS==1
+BOCHSAPI extern BX_MEM_C bx_mem;
+#else
+BOCHSAPI extern BX_MEM_C *bx_mem_array[BX_ADDRESS_SPACES];
+#endif /* BX_SMP_PROCESSORS */
+
+#endif /* BX_PROVIDE_CPU_MEMORY==1 */
+
+#if BX_DEBUGGER
+# define BX_DBG_DIRTY_PAGE(page) BX_MEM(0)->dbg_dirty_pages[page] = 1;
+#else
+# define BX_DBG_DIRTY_PAGE(page)
+#endif