/[dynamips]/trunk/memory.h
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /trunk/memory.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 12 - (show annotations)
Sat Oct 6 16:45:40 2007 UTC (11 years, 7 months ago) by dpavlin
File MIME type: text/plain
File size: 3912 byte(s)
make working copy

1 /*
2 * Cisco router simulation platform.
3 * Copyright (c) 2005,2006 Christophe Fillot (cf@utc.fr)
4 */
5
6 #ifndef __MEMORY_H__
7 #define __MEMORY_H__
8
9 #include <sys/types.h>
10 #include "utils.h"
11
12 /* MTS operation */
13 #define MTS_READ 0
14 #define MTS_WRITE 1
15
16 /* 0.5GB value */
17 #define MTS_SIZE_512M 0x20000000
18
19 /* MTS flag bits: D (device), ACC (memory access), C (chain) */
20 #define MTS_FLAG_BITS 4
21 #define MTS_FLAG_MASK 0x0000000fUL
22
23 /* Masks for MTS entries */
24 #define MTS_CHAIN_MASK 0x00000001
25 #define MTS_ACC_MASK 0x00000006
26 #define MTS_DEV_MASK 0x00000008
27 #define MTS_ADDR_MASK (~MTS_FLAG_MASK)
28
29 /* Device ID mask and shift, device offset mask */
30 #define MTS_DEVID_MASK 0xfc000000
31 #define MTS_DEVID_SHIFT 26
32 #define MTS_DEVOFF_MASK 0x03ffffff
33
34 /* Memory access flags */
35 #define MTS_ACC_AE 0x00000002 /* Address Error */
36 #define MTS_ACC_T 0x00000004 /* TLB Exception */
37 #define MTS_ACC_U 0x00000006 /* Unexistent */
38
39 /* Hash table size for MTS64 (default: [shift:16,bits:12]) */
40 #define MTS64_HASH_SHIFT 12
41 #define MTS64_HASH_BITS 14
42 #define MTS64_HASH_SIZE (1 << MTS64_HASH_BITS)
43 #define MTS64_HASH_MASK (MTS64_HASH_SIZE - 1)
44
45 /* MTS64 hash on virtual addresses */
46 #define MTS64_HASH(vaddr) (((vaddr) >> MTS64_HASH_SHIFT) & MTS64_HASH_MASK)
47
48 /* Hash table size for MTS32 (default: [shift:15,bits:15]) */
49 #define MTS32_HASH_SHIFT 12
50 #define MTS32_HASH_BITS 14
51 #define MTS32_HASH_SIZE (1 << MTS32_HASH_BITS)
52 #define MTS32_HASH_MASK (MTS32_HASH_SIZE - 1)
53
54 /* MTS32 hash on virtual addresses */
55 #define MTS32_HASH(vaddr) (((vaddr) >> MTS32_HASH_SHIFT) & MTS32_HASH_MASK)
56
57 /* Number of entries per chunk */
58 #define MTS64_CHUNK_SIZE 256
59 #define MTS32_CHUNK_SIZE 256
60
61 /* MTS64: chunk definition */
62 struct mts64_chunk {
63 mts64_entry_t entry[MTS64_CHUNK_SIZE];
64 struct mts64_chunk *next;
65 u_int count;
66 };
67
68 /* MTS32: chunk definition */
69 struct mts32_chunk {
70 mts32_entry_t entry[MTS32_CHUNK_SIZE];
71 struct mts32_chunk *next;
72 u_int count;
73 };
74
75 /* Record a memory access */
76 void memlog_rec_access(cpu_gen_t *cpu,m_uint64_t vaddr,m_uint64_t data,
77 m_uint32_t op_size,m_uint32_t op_type);
78
79 /* Show the last memory accesses */
80 void memlog_dump(cpu_gen_t *cpu);
81
82 /* Update the data obtained by a read access */
83 void memlog_update_read(cpu_gen_t *cpu,m_iptr_t raddr);
84
85 /* Copy a memory block from VM physical RAM to real host */
86 void physmem_copy_from_vm(vm_instance_t *vm,void *real_buffer,
87 m_uint64_t paddr,size_t len);
88
89 /* Copy a memory block to VM physical RAM from real host */
90 void physmem_copy_to_vm(vm_instance_t *vm,void *real_buffer,
91 m_uint64_t paddr,size_t len);
92
93 /* Copy a 32-bit word from the VM physical RAM to real host */
94 m_uint32_t physmem_copy_u32_from_vm(vm_instance_t *vm,m_uint64_t paddr);
95
96 /* Copy a 32-bit word to the VM physical RAM from real host */
97 void physmem_copy_u32_to_vm(vm_instance_t *vm,m_uint64_t paddr,m_uint32_t val);
98
99 /* Copy a 16-bit word from the VM physical RAM to real host */
100 m_uint16_t physmem_copy_u16_from_vm(vm_instance_t *vm,m_uint64_t paddr);
101
102 /* Copy a 16-bit word to the VM physical RAM from real host */
103 void physmem_copy_u16_to_vm(vm_instance_t *vm,m_uint64_t paddr,m_uint16_t val);
104
105 /* Copy a byte from the VM physical RAM to real host */
106 m_uint8_t physmem_copy_u8_from_vm(vm_instance_t *vm,m_uint64_t paddr);
107
108 /* Copy a 16-bit word to the VM physical RAM from real host */
109 void physmem_copy_u8_to_vm(vm_instance_t *vm,m_uint64_t paddr,m_uint8_t val);
110
111 /* DMA transfer operation */
112 void physmem_dma_transfer(vm_instance_t *vm,m_uint64_t src,m_uint64_t dst,
113 size_t len);
114
115 /* strlen in VM physical memory */
116 size_t physmem_strlen(vm_instance_t *vm,m_uint64_t paddr);
117
118 /* Physical memory dump (32-bit words) */
119 void physmem_dump_vm(vm_instance_t *vm,m_uint64_t paddr,m_uint32_t u32_count);
120
121 #endif

  ViewVC Help
Powered by ViewVC 1.1.26