Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'docs/TCF Service - Memory.html')
-rw-r--r--docs/TCF Service - Memory.html172
1 files changed, 86 insertions, 86 deletions
diff --git a/docs/TCF Service - Memory.html b/docs/TCF Service - Memory.html
index 559ddcbe2..2079567fd 100644
--- a/docs/TCF Service - Memory.html
+++ b/docs/TCF Service - Memory.html
@@ -5,9 +5,9 @@
</head>
<body lang='EN-US'>
-
+
<h1>Target Communication Framework Services - Memory</h1>
-
+
<ul>
<li><a href='#VersionHistory'>Version History</a>
<li><a href='#Overview'>Overview</a>
@@ -53,20 +53,20 @@ and event parameters are encoded as zero terminated <a href='TCF Specification.h
<p>The service uses standard format for error reports,
see <a href='TCF Services.html#ErrorFormat'>Error Report Format</a>.</p>
-
+
<p>A single memory access can succeed for some addresses and fail for others. In such
situation result message can contain partially valid data. Array of error addresses,
in addition to error report, describes data validity on per byte basis:</p>
-
+
<pre><b><font face="Courier New" size=2 color=#333399>
<i>&lt;array of error addresses&gt;</i>
&rArr; null
&rArr; [ <i>&lt;error address list&gt;</i> ]
-
+
<i>&lt;error address list&gt;</i>
&rArr; <i>&lt;error address&gt;</i>
&rArr; <i>&lt;error address list&gt;</i> , <i>&lt;error address&gt;</i>
-
+
<i>&lt;error address&gt;</i>
&rArr; { "addr" : <i>&lt;int: range starting address&gt;</i> , "size" : <i>&lt;int: range length in bytes&gt;</i> , "stat" : <i>&lt;int: status code&gt;</i> , "msg" : <i>&lt;object: error description&gt;</i> }
</font></b></pre>
@@ -86,7 +86,7 @@ byte is defined by main error report.</p>
<h2><a name='Cmds'>Commands</a></h2>
<h3><a name='CmdGetContext'>Get Context</a></h3>
-
+
<pre><b><font face="Courier New" size=2 color=#333399>
C &bull; <i>&lt;token&gt;</i> &bull; Memory &bull; getContext &bull; <i>&lt;string: context ID&gt;</i> &bull;
</font></b></pre>
@@ -95,20 +95,20 @@ C &bull; <i>&lt;token&gt;</i> &bull; Memory &bull; getContext &bull; <i>&lt;stri
execution thread, process, address space, etc. Exact
meaning of a context depends on the target. Target agent should define contexts hierarchy
that is:</p>
-
+
<ul type='disc'>
<li>Sufficient to resolve possible ambiguity of a memory address;
-
+
<li>Adequately reflects target memory management strategy;
-
+
<li>Intuitive to a user.
</ul>
-
+
<p>For traditional OS, like UNIX, memory access context can be one of:</p>
-
+
<ul type='disc'>
<li>Kernel address space;
-
+
<li>A process.
</ul>
@@ -197,20 +197,20 @@ Service sends contextChanged event to notify changes in context data.</p>
</ul>
<h3><a name='CmdGetChildren'>Get Children</a></h3>
-
+
<pre><b><font face="Courier New" size=2 color=#333399>
C &bull; <i>&lt;token&gt;</i> &bull; Memory &bull; getChildren &bull; <i>&lt;string: parent context ID&gt;</i> &bull;
</font></b></pre>
<p>The command requests a list of contexts available for memory access commands.</p>
-
+
<p>Parent context ID can be null &ndash; to retrieve top level of the hierarchy, can be one
of context IDs retrieved by previous getChildren commands, or it can be obtained from another service.
Contexts hierarchy can be simple plain list or it can form a tree. It is up to target agent developers to
choose layout that is most descriptive for a given target.</p>
-
+
<p>Reply:</p>
-
+
<pre><b><font face="Courier New" size=2 color=#333399>
R &bull; <i>&lt;token&gt;</i> &bull; <i>&lt;error report&gt;</i> &bull; <i>&lt;array of context IDs&gt;</i> &bull;<i></i>
@@ -218,7 +218,7 @@ R &bull; <i>&lt;token&gt;</i> &bull; <i>&lt;error report&gt;</i> &bull; <i>&lt;a
&rArr; null
&rArr; [ ]
&rArr; [ <i>&lt;context ID list&gt;</i> ]
-
+
<i>&lt;context ID list&gt;</i>
&rArr; <i>&lt;string: context ID&gt;</i>
&rArr; <i>&lt;context ID list&gt;</i> , <i>&lt;string: context ID&gt;</i>
@@ -226,9 +226,9 @@ R &bull; <i>&lt;token&gt;</i> &bull; <i>&lt;error report&gt;</i> &bull; <i>&lt;a
</font></b></pre>
<h3><a name='CmdSetMemory'>Set Memory</a></h3>
-
+
<pre><b><font face="Courier New" size=2 color=#333399>
-C &bull; &lt;token&gt; &bull; Memory &bull; set &bull;
+C &bull; &lt;token&gt; &bull; Memory &bull; set &bull;
<i>&lt;string: context ID&gt;</i> &bull; <i>&lt;int: address&gt;</i> &bull; <i>&lt;int: word size&gt;</i> &bull;
<i>&lt;int: byte count&gt;</i> &bull; <i>&lt;int: mode&gt;</i> &bull; <i>&lt;string: BASE64 encoded byte array&gt;</i> &bull;
</font></b></pre>
@@ -236,15 +236,15 @@ C &bull; &lt;token&gt; &bull; Memory &bull; set &bull;
<p>Writes data bytes at given address in memory, "word size" bytes at a time. Address
should be aligned by "word size". Context ID must be one returned by getContexts.
Mode is logical OR of any combination of:</p>
-
+
<ul type='disc'>
<li>0x1 &ndash; continue on error (like bus error or page fault)
-
+
<li>0x2 &ndash; verify data after writing by reading back and compare
</ul>
-
+
<p>Result message:</p>
-
+
<pre><b><font face="Courier New" size=2 color=#333399>
R &bull; <i>&lt;token&gt;</i> &bull; <i>&lt;error report&gt;</i> &bull; <i>&lt;array of error addresses&gt;</i> &bull;
</font></b></pre>
@@ -254,7 +254,7 @@ of error. Error addresses, when present, let client know which bytes of data fai
to be written into memory.</p>
<h3><a name='CmdGetMemory'>Get Memory</a></h3>
-
+
<pre><b><font face="Courier New" size=2 color=#333399>
C &bull; &lt;token&gt; &bull; Memory &bull; get &bull;
<i>&lt;string: context ID&gt;</i> &bull; <i>&lt;int: address&gt;</i> &bull; <i>&lt;int: word size&gt;</i> &bull;
@@ -264,15 +264,15 @@ C &bull; &lt;token&gt; &bull; Memory &bull; get &bull;
<p>Reads data bytes at given address in memory, "word size" bytes at a time. Address
should be aligned by "word size". Context ID must be one returned by getContexts.
Mode is logical OR of any combination of:</p>
-
+
<ul type='disc'>
<li>0x1 &ndash; continue on error (like bus error or page fault)
-
+
<li>0x2 &ndash; verify data after reading by re-reading and compare
</ul>
-
+
<p>Result message:</p>
-
+
<pre><b><font face="Courier New" size=2 color=#333399>
R &bull; <i>&lt;token&gt;</i> &bull; <i>&lt;string: BASE64 encoded byte array&gt;</i> &bull; <i>&lt;error report&gt;</i> &bull; <i>&lt;array of error addresses&gt;</i> &bull;
</font></b></pre>
@@ -282,9 +282,9 @@ of error. Error addresses, when present, let client know which bytes of data fai
to be retrieved from memory.</p>
<h3><a name='CmdFillMemory'>Fill Memory</a></h3>
-
+
<pre><b><font face="Courier New" size=2 color=#333399>
-C &bull; &lt;token&gt; &bull; Memory &bull; fill &bull;
+C &bull; &lt;token&gt; &bull; Memory &bull; fill &bull;
<i>&lt;string: context ID&gt;</i> &bull; <i>&lt;int: address&gt;</i> &bull; <i>&lt;int: word size&gt;</i> &bull;
&lt;int: byte count&gt; &bull; <i>&lt;int: mode&gt;</i> &bull; <i>&lt;array: array of pattern bytes&gt;</i> &bull;
</font></b></pre>
@@ -293,15 +293,15 @@ C &bull; &lt;token&gt; &bull; Memory &bull; fill &bull;
should be aligned by "word size". If "byte count" is bigger then pattern size, then
pattern is repeated necessary number of times. Context ID must be one returned by
getContexts. Mode is logical OR of any combination of:</p>
-
+
<ul type='disc'>
<li>0x1 &ndash; continue on error (like bus error or page fault)
-
+
<li>0x2 &ndash; verify data after writing by reading back and compare
</ul>
-
+
<p>Result message:</p>
-
+
<pre><b><font face="Courier New" size=2 color=#333399>
R &bull; <i>&lt;token&gt;</i> &bull; <i>&lt;error report&gt;</i> &bull; <i>&lt;array of error addresses&gt;</i> &bull;
</font></b></pre>
@@ -311,29 +311,29 @@ of error. Error addresses, when present, let client know which bytes of data fai
to be written into memory.</p>
<h2><a name='Events'>Events</a></h2>
-
+
<p>Memory service broadcasts notification events when memory contexts are added, removed
or changed, and when memory content is altered by "set" or "fill" commands.</p>
-
+
<pre><b><font face="Courier New" size=2 color=#333399>
E &bull; Memory &bull; contextAdded &bull; <i>&lt;array of context data&gt;</i> &bull;
E &bull; Memory &bull; contextChanged &bull; <i>&lt;array of context data&gt;</i> &bull;
E &bull; Memory &bull; contextRemoved &bull; <i>&lt;array of context IDs&gt;</i> &bull;
E &bull; Memory &bull; memoryChanged &bull; <i>&lt;string: context ID&gt;</i> &bull; <i>&lt;array of address ranges&gt;</i> &bull;
-
+
<i>&lt;array of context data&gt;</i> <font face="Times New Roman" size=3>- see Get Contexts command.</font>
-
+
<i>&lt;array of context IDs&gt;</i>
&rArr; [ <i>&lt;context ID list&gt;</i> ]
-
+
<i>&lt;context ID list&gt;</i>
&rArr; <i>&lt;string: context ID&gt;</i>
&rArr; <i>&lt;context ID list&gt;</i> , <i>&lt;string: context ID&gt;</i>
-
+
<i>&lt;array of address ranges&gt;</i>
&rArr; null
&rArr; [ <i>&lt;address ranges list&gt;</i> ]
-
+
<i>&lt;address ranges list&gt;</i>
&rArr; <i>&lt;address range&gt;</i>
&rArr; <i>&lt;address ranges list&gt;</i> , <i>&lt;address range&gt;</i>
@@ -343,13 +343,13 @@ E &bull; Memory &bull; memoryChanged &bull; <i>&lt;string: context ID&gt;</i> &b
</font></b></pre>
<h2><a name='API'>API</a></h2>
-
+
<pre>
<font color=#3F5FBF>/**
* IMemory service provides basic operations to read/write memory on a target.
*/</font>
<font color=#7F0055>public interface</font> Memory <font color=#7F0055>extends</font> Service {
-
+
<font color=#7F0055>static final</font> String NAME = "Memory";
<font color=#3F5FBF>/**
@@ -365,7 +365,7 @@ E &bull; Memory &bull; memoryChanged &bull; <i>&lt;string: context ID&gt;</i> &b
PROP_START_BOUND = "StartBound", <font color=#3F5FBF>/** Number, lowest address (inclusive) which is valid for the context */</font>
PROP_END_BOUND = "EndBound", <font color=#3F5FBF>/** Number, highest address (inclusive) which is valid for the context */</font>
PROP_ACCESS_TYPES = "AccessTypes"; <font color=#3F5FBF>/** Array of String, the access types allowed for this context */</font>
-
+
<font color=#3F5FBF>/**
* Values of "AccessTypes".
* Target system can support multiple different memory access types, like instruction and data access.
@@ -386,11 +386,11 @@ E &bull; Memory &bull; memoryChanged &bull; <i>&lt;string: context ID&gt;</i> &b
ACCESS_PHYSICAL = "physical", <font color=#3F5FBF>/** Context uses physical addresses */</font>
ACCESS_CACHE = "cache", <font color=#3F5FBF>/** Context is a cache */</font>
ACCESS_TLB = "tlb"; <font color=#3F5FBF>/** Context is a TLB memory */</font>
-
+
<font color=#3F5FBF>/**
* Retrieve context info for given context ID.
- *
- * <font color=#7F9FBF>@param</font> id &ndash; context ID.
+ *
+ * <font color=#7F9FBF>@param</font> id &ndash; context ID.
* <font color=#7F9FBF>@param</font> done - callback interface called when operation is completed.
*/</font>
IToken getContext(String id, DoneGetContext done);
@@ -416,7 +416,7 @@ E &bull; Memory &bull; memoryChanged &bull; <i>&lt;string: context ID&gt;</i> &b
* all services. In other words, all services access same hierarchy of contexts,
* with same IDs, however, each service accesses its own subset of context's
* attributes and functionality, which is relevant to that service.
- *
+ *
* <font color=#7F9FBF>@param</font> parent_context_id &ndash; parent context ID. Can be null &ndash;
* to retrieve top level of the hierarchy, or one of context IDs retrieved
* by previous getContexts commands.
@@ -443,89 +443,89 @@ E &bull; Memory &bull; memoryChanged &bull; <i>&lt;string: context ID&gt;</i> &b
* were not processed correctly.
*/</font>
<font color=#7F0055>final static int</font> MODE_CONTINUEONERROR = 0x1;
-
+
<font color=#3F5FBF>/**
* Memory access mode:
* Verify result of memory operations (by reading and comparing).
*/</font>
<font color=#7F0055>final static int</font> MODE_VERIFY = 0x2;
-
+
<font color=#7F0055>interface</font> MemoryContext {
-
- <font color=#3F5FBF>/**
+
+ <font color=#3F5FBF>/**
* Get context ID.
* <font color=#7F9FBF>@return</font> context ID.
*/</font>
String getID();
- <font color=#3F5FBF>/**
+ <font color=#3F5FBF>/**
* Get parent context ID.
* <font color=#7F9FBF>@return</font> parent ID.
*/</font>
String getParentID();
-
- <font color=#3F5FBF>/**
+
+ <font color=#3F5FBF>/**
* Get process ID, if applicable.
* <font color=#7F9FBF>@return</font> process ID.
*/</font>
String getProcessID();
-
- <font color=#3F5FBF>/**
+
+ <font color=#3F5FBF>/**
* Get memory endianess.
* <font color=#7F9FBF>@return</font> true if memory id big-endian.
*/</font>
boolean isBigEndian();
-
- <font color=#3F5FBF>/**
+
+ <font color=#3F5FBF>/**
* Get memory address size.
* <font color=#7F9FBF>@return</font> number of bytes used to store memory address value.
*/</font>
<font color=#7F0055>int</font> getAddressSize();
-
- <font color=#3F5FBF>/**
+
+ <font color=#3F5FBF>/**
* Get memory context name.
* The name can be used for UI purposes.
* <font color=#7F9FBF>@return</font> context name.
*/</font>
String getName();
-
- <font color=#3F5FBF>/**
+
+ <font color=#3F5FBF>/**
* Get lowest address (inclusive) which is valid for the context.
* <font color=#7F9FBF>@return</font> lowest address.
*/</font>
Number getStartBound();
-
- <font color=#3F5FBF>/**
+
+ <font color=#3F5FBF>/**
* Get highest address (inclusive) which is valid for the context.
* <font color=#7F9FBF>@return</font> highest address.
*/</font>
Number getEndBound();
-
- <font color=#3F5FBF>/**
+
+ <font color=#3F5FBF>/**
* Get the access types allowed for this context.
* <font color=#7F9FBF>@return</font> collection of access type names.
*/</font>
Collection&lt;String> getAccessTypes();
- <font color=#3F5FBF>/**
+ <font color=#3F5FBF>/**
* Get context properties.
* <font color=#7F9FBF>@return</font> all available context properties.
*/</font>
Map&lt;String,Object> getProperties();
-
+
<font color=#3F5FBF>/**
* Set target memory.
* If 'word_size' is 0 it means client does not care about word size.
*/</font>
<font color=#7F0055>void</font> set(long addr, <font color=#7F0055>int</font> word_size, byte[] buf,
<font color=#7F0055>int</font> offs, <font color=#7F0055>int</font> size, <font color=#7F0055>int</font> mode, DoneMemory done);
-
+
<font color=#3F5FBF>/**
* Read target memory.
*/</font>
<font color=#7F0055>void</font> get(long addr, <font color=#7F0055>int</font> word_size, byte[] buf,
<font color=#7F0055>int</font> offs, <font color=#7F0055>int</font> size, <font color=#7F0055>int</font> mode, DoneMemory done);
-
+
<font color=#3F5FBF>/**
* Fill target memory with given pattern.
* 'size' is number of bytes to fill.
@@ -533,7 +533,7 @@ E &bull; Memory &bull; memoryChanged &bull; <i>&lt;string: context ID&gt;</i> &b
<font color=#7F0055>void</font> fill(long addr, <font color=#7F0055>int</font> word_size, byte[] value,
<font color=#7F0055>int</font> size, <font color=#7F0055>int</font> mode, DoneMemory done);
}
-
+
<font color=#3F5FBF>/**
* Client callback interface for set(), get() and fill().
*/</font>
@@ -543,7 +543,7 @@ E &bull; Memory &bull; memoryChanged &bull; <i>&lt;string: context ID&gt;</i> &b
<font color=#7F0055>class</font> MemoryError <font color=#7F0055>extends</font> Exception {
}
-
+
<font color=#3F5FBF>/**
* ErrorOffset interface can be implemented by MemoryError object,
* which is returned by get, set and fill commands.
@@ -556,26 +556,26 @@ E &bull; Memory &bull; memoryChanged &bull; <i>&lt;string: context ID&gt;</i> &b
* possible reasons of partial memory operation.
*/</font>
<font color=#7F0055>interface</font> ErrorOffset {
-
+
// Error may have per byte information
- <font color=#7F0055>final static int</font>
+ <font color=#7F0055>final static int</font>
BYTE_VALID = 0x00,
BYTE_UNKNOWN = 0x01, // e.g. out of range
BYTE_INVALID = 0x02,
BYTE_CANNOT_READ = 0x04,
BYTE_CANNOT_WRITE = 0x08;
-
+
<font color=#7F0055>int</font> getStatus(<font color=#7F0055>int</font> offset);
-
+
<font color=#3F5FBF>/**
* Returns the detail message string about the
* byte associated with specified location.
* <font color=#7F9FBF>@return</font> the detail error message string.
*/</font>
String getMessage(<font color=#7F0055>int</font> offset);
-
+
}
-
+
<font color=#3F5FBF>/**
* Add memory service event listener.
* <font color=#7F9FBF>@param</font> listener - event listener implementation.
@@ -590,27 +590,27 @@ E &bull; Memory &bull; memoryChanged &bull; <i>&lt;string: context ID&gt;</i> &b
<font color=#3F5FBF>/**
* Memory event listener is notified when memory context hierarchy
- * changes, and when memory is modified by memory service commands.
+ * changes, and when memory is modified by memory service commands.
*/</font>
<font color=#7F0055>interface</font> MemoryListener {
-
+
<font color=#3F5FBF>/**
* Called when a new memory access context(s) is created.
*/</font>
<font color=#7F0055>void</font> contextAdded(Context[] contexts);
-
+
<font color=#3F5FBF>/**
* Called when a new memory access context(s) properties changed.
*/</font>
<font color=#7F0055>void</font> contextChanged(Context[] contexts);
-
+
<font color=#3F5FBF>/**
* Called when memory access context(s) is removed.
*/</font>
<font color=#7F0055>void</font> contextRemoved(String[] context_ids);
-
+
<font color=#3F5FBF>/**
- * Called when target memory content was changed and clients
+ * Called when target memory content was changed and clients
* need to update themselves. Clients, at least, should invalidate
* corresponding cached memory data.
* Not every change is notified - it is not possible,

Back to the top