dsdp/tm/tcf_0_3_x/org.eclipse.tm.tcf.docs/TCF Service - Memory.html
changeset 70 11a6943ebeb2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dsdp/tm/tcf_0_3_x/org.eclipse.tm.tcf.docs/TCF Service - Memory.html	Mon Aug 17 16:02:00 2009 -0500
@@ -0,0 +1,627 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+    <title>Target Communication Framework Services - Memory</title>
+</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>
+    <li><a href='#Cmds'>Commands</a>
+    <ul>
+        <li><a href='#CmdGetContext'>Get Context</a>
+        <li><a href='#CmdGetChildren'>Get Children</a>
+        <li><a href='#CmdSetMemory'>Set Memory</a>
+        <li><a href='#CmdGetMemory'>Get Memory</a>
+        <li><a href='#CmdFillMemory'>Fill Memory</a>
+    </ul>
+    <li><a href='#Events'>Events</a>
+    <li><a href='#API'>API</a>
+</ul>
+
+<h1>Memory Service</h1>
+
+<h2><a name='VersionHistory'>Version History</a></h2>
+
+<table border=1 cellpadding=8>
+    <tr>
+        <th>Version
+        <th>Date
+        <th>Change
+    <tr>
+        <td>0.1
+        <td>2008-01-10
+        <td>Initial contribution
+    <tr>
+        <td>1.0
+        <td>2008-05-06
+        <td>Approved
+    <tr>
+        <td>1.1
+        <td>2009-03-16
+        <td>Added context properties
+</table>
+
+<h2><a name='Overview'>Overview</a></h2>
+
+<p>The service provides basic operations to read/write memory on a target. Command
+and event parameters are encoded as zero terminated <a href='TCF Specification.html#JSON'>JSON</a> strings.</p>
+
+<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>
+
+<p>If there is no entry in error addresses array for a data byte, then status of such
+byte is defined by main error report.</p>
+
+<p>Status code is bitwise or of status flags:</p>
+<dl>
+    <dt><code><b>BYTE_VALID        = 0x00</b></code> <dd>no error for this byte
+    <dt><code><b>BYTE_UNKNOWN      = 0x01</b></code> <dd>status is unknown
+    <dt><code><b>BYTE_INVALID      = 0x02</b></code> <dd>byte value in invalid, error message describes the problem
+    <dt><code><b>BYTE_CANNOT_READ  = 0x04</b></code> <dd>cannot read the byte
+    <dt><code><b>BYTE_CANNOT_WRITE = 0x08</b></code> <dd>cannot write the byte
+</dl>
+
+<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>
+
+<p>The command retrieves context info for given context ID. A context corresponds to an
+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>
+
+<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;context data&gt;</i> &bull;
+
+<i>&lt;context data&gt;</i>
+    &rArr; null
+    &rArr; <i>&lt;object&gt;</i>
+</font></b></pre>
+
+<p>Context data object should, at least, contain member
+<b><font face="Courier New" size=2 color=#333399>"ID" : <i>&lt;string&gt;.</i></font></b>
+Context data is expected to be cached by clients.
+Service sends contextChanged event to notify changes in context data.</p>
+
+<p>Predefined memory context properties are:</p>
+<ul>
+    <li><code><b><font face="Courier New" size=2 color=#333399>"ID" : <i>&lt;string&gt;</i></font></b></code>
+    - ID of the context, same as getContext command argument.
+
+    <li><code><b><font face="Courier New" size=2 color=#333399>"ParentID" : <i>&lt;string&gt;</i></font></b></code>
+    - ID of a parent context.
+
+    <li><code><b><font face="Courier New" size=2 color=#333399>"ProcessID" : <i>&lt;string&gt;</i></font></b></code>
+    - process ID.
+
+    <li><code><b><font face="Courier New" size=2 color=#333399>"BigEndian" : <i>&lt;boolean&gt;</i></font></b></code>
+    - true if memory is big-endian.
+
+    <li><code><b><font face="Courier New" size=2 color=#333399>"AddressSize" : <i>&lt;int&gt;</i></font></b></code>
+    - size of memory address in bytes.
+
+    <li><code><b><font face="Courier New" size=2 color=#333399>"Name" : <i>&lt;int&gt;</i></font></b></code>
+    - name of the context, can be used for UI purposes.
+
+    <li><code><b><font face="Courier New" size=2 color=#333399>"StartBound" : <i>&lt;int&gt;</i></font></b></code>
+    - lowest address (inclusive) which is valid for the context.
+
+    <li><code><b><font face="Courier New" size=2 color=#333399>"EndBound" : <i>&lt;int&gt;</i></font></b></code>
+    - highest address (inclusive) which is valid for the context.
+
+    <li><code><b><font face="Courier New" size=2 color=#333399>"AccessTypes" : <i>&lt;array of strings&gt;</i></font></b></code>
+    - Defines the access types allowed for this context.
+        <p>Target system can support multiple different memory access types, like instruction and data access.
+    Different access types can use different logic for address translation and memory mapping, so they can
+    end up accessing different data bits, even if address is the same.
+    Each distinct access type should be represented by separate memory context.
+    A memory context can represent multiple access types if they are equivalent - all access same memory bits.
+    Same data bits can be exposed through multiple memory contexts.</p>
+
+    <p>Predefined access types are:</p>
+    <ul>
+        <li><code><b><font face="Courier New" size=2 color=#333399>"instruction"</font></b></code>
+        - Context represent instructions fetch access.
+
+        <li><code><b><font face="Courier New" size=2 color=#333399>"data"</font></b></code>
+        - Context represents data access.
+
+        <li><code><b><font face="Courier New" size=2 color=#333399>"io"</font></b></code>
+        - Context represents IO peripherals.
+
+        <li><code><b><font face="Courier New" size=2 color=#333399>"user"</font></b></code>
+        - Context represents a user (e.g. application running in Linux) view to memory.
+
+        <li><code><b><font face="Courier New" size=2 color=#333399>"supervisor"</font></b></code>
+        - Context represents a supervisor (e.g. Linux kernel) view to memory.
+
+        <li><code><b><font face="Courier New" size=2 color=#333399>"hypervisor"</font></b></code>
+        - Context represents a hypervisor view to memory.
+
+        <li><code><b><font face="Courier New" size=2 color=#333399>"virtual"</font></b></code>
+        - Context uses virtual addresses.
+
+        <li><code><b><font face="Courier New" size=2 color=#333399>"physical"</font></b></code>
+        - Context uses physical addresses.
+
+        <li><code><b><font face="Courier New" size=2 color=#333399>"cache"</font></b></code>
+        - Context is a cache.
+
+        <li><code><b><font face="Courier New" size=2 color=#333399>"tlb"</font></b></code>
+        - Context is a TLB memory.
+    </ul>
+</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>
+
+<i>&lt;array of context IDs&gt;</i>
+    &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>
+
+</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; 
+    <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>
+
+<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>
+
+<p>Error report provides integer error code and a short, human readable explanation
+of error. Error addresses, when present, let client know which bytes of data failed
+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;
+    <i>&lt;int: byte count&gt;</i> &bull; <i>&lt;int: mode&gt;</i> &bull;
+</font></b></pre>
+
+<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>
+
+<p>Error report provides integer error code and a short, human readable explanation
+of error. Error addresses, when present, let client know which bytes of data failed
+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; 
+    <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>
+
+<p>Writes pattern bytes at given address in memory, "word size" bytes at a time. Address
+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>
+
+<p>Error report provides integer error code and a short, human readable explanation
+of error. Error addresses, when present, let client know which bytes of data failed
+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>
+
+<i>&lt;address range&gt;</i>
+    &rArr; { "addr" : <i>&lt;int: range starting address&gt;</i> , "size" : <i>&lt;int: range length in bytes&gt;</i> }
+</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>/**
+     * Context property names.
+     */</font>
+    <font color=#7F0055>static final</font> String
+        PROP_ID = "ID",                         <font color=#3F5FBF>/** String, ID of the context, same as getContext command argument */</font>
+        PROP_PARENT_ID = "ParentID",            <font color=#3F5FBF>/** String, ID of a parent context */</font>
+        PROP_PROCESS_ID = "ProcessID",          <font color=#3F5FBF>/** String, process ID, see Processes service */</font>
+        PROP_BIG_ENDIAN = "BigEndian",          <font color=#3F5FBF>/** Boolean, true if memory is big-endian */</font>
+        PROP_ADDRESS_SIZE = "AddressSize",      <font color=#3F5FBF>/** Number, size of memory address in bytes */</font>
+        PROP_NAME = "Name",                     <font color=#3F5FBF>/** String, name of the context, can be used for UI purposes */</font>
+        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.
+     * Different access types can use different logic for address translation and memory mapping, so they can
+     * end up accessing different data bits, even if address is the same.
+     * Each distinct access type should be represented by separate memory context.
+     * A memory context can represent multiple access types if they are equivalent - all access same memory bits.
+     * Same data bits can be exposed through multiple memory contexts.
+     */</font>
+    <font color=#7F0055>static final</font> String
+        ACCESS_INSTRUCTION = "instruction",     <font color=#3F5FBF>/** Context represent instructions fetch access */</font>
+        ACCESS_DATA = "data",                   <font color=#3F5FBF>/** Context represents data access */</font>
+        ACCESS_IO = "io",                       <font color=#3F5FBF>/** Context represents IO peripherals */</font>
+        ACCESS_USER = "user",                   <font color=#3F5FBF>/** Context represents a user (e.g. application running in Linux) view to memory */</font>
+        ACCESS_SUPERVISOR = "supervisor",       <font color=#3F5FBF>/** Context represents a supervisor (e.g. Linux kernel) view to memory */</font>
+        ACCESS_HYPERVISOR = "hypervisor",       <font color=#3F5FBF>/** Context represents a hypervisor view to memory */</font>
+        ACCESS_VIRTUAL = "virtual",             <font color=#3F5FBF>/** Context uses virtual addresses */</font>
+        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> done - callback interface called when operation is completed.
+     */</font>
+    IToken getContext(String id, DoneGetContext done);
+
+    <font color=#3F5FBF>/**
+     * Client callback interface for getContext().
+     */</font>
+    <font color=#7F0055>interface</font> DoneGetContext {
+        <font color=#3F5FBF>/**
+         * Called when contexts data retrieval is done.
+         * <font color=#7F9FBF>@param</font> error &ndash; error description if operation failed, null if succeeded.
+         * <font color=#7F9FBF>@param</font> context &ndash; context data.
+         */</font>
+        <font color=#7F0055>void</font> doneGetContext(IToken token, Exception error, MemoryContext context);
+    }
+
+    <font color=#3F5FBF>/**
+     * Retrieve contexts available for memory commands.
+     * A context corresponds to an execution thread, process, address space, etc.
+     * A context can belong to a parent context. 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. Context IDs are valid across
+     * 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.
+     * <font color=#7F9FBF>@param</font> done - callback interface called when operation is completed.
+     */</font>
+    IToken getChildren(String parent_context_id, DoneGetChildren done);
+
+    <font color=#3F5FBF>/**
+     * Client callback interface for getChildren().
+     */</font>
+    <font color=#7F0055>interface</font> DoneGetChildren {
+        <font color=#3F5FBF>/**
+         * Called when contexts data retrieval is done.
+         * <font color=#7F9FBF>@param</font> error &ndash; error description if operation failed, null if succeeded.
+         * <font color=#7F9FBF>@param</font> contexts &ndash; array of available context IDs.
+         */</font>
+        <font color=#7F0055>void</font> doneGetChildren(IToken token, Exception error, String[] context_ids);
+    }
+
+    <font color=#3F5FBF>/**
+     * Memory access mode:
+     * Carry on when some of the memory cannot be accessed and
+     * return MemoryError at the end if any of the bytes
+     * 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>/** 
+         * Get context ID.
+         * <font color=#7F9FBF>@return</font> context ID.
+         */</font>
+        String getID();
+
+        <font color=#3F5FBF>/** 
+         * Get parent context ID.
+         * <font color=#7F9FBF>@return</font> parent ID.
+         */</font>
+        String getParentID();
+        
+        <font color=#3F5FBF>/** 
+         * Get process ID, if applicable.
+         * <font color=#7F9FBF>@return</font> process ID.
+         */</font>
+        String getProcessID();
+        
+        <font color=#3F5FBF>/** 
+         * Get memory endianess.
+         * <font color=#7F9FBF>@return</font> true if memory id big-endian.
+         */</font>
+        boolean isBigEndian();
+        
+        <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>/** 
+         * 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>/** 
+         * Get lowest address (inclusive) which is valid for the context.
+         * <font color=#7F9FBF>@return</font> lowest address.
+         */</font>
+        Number getStartBound();
+        
+        <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>/** 
+         * 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>/** 
+         * 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.
+         */</font>
+        <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>
+    <font color=#7F0055>interface</font> DoneMemory {
+        <font color=#7F0055>void</font> doneMemory(MemoryError error);
+    }
+
+    <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.
+     *
+     * get/set/fill () returns this exception when reading failed
+     * for some but not all bytes, and MODE_CONTINUEONERROR
+     * has been set in mode. (For example, when only part of the request
+     * translates to valid memory addresses.)
+     * Exception.getMessage can be used for generalized message of the
+     * 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> 
+            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.
+     */</font>
+    <font color=#7F0055>void</font> addListener(MemoryListener listener);
+
+    <font color=#3F5FBF>/**
+     * Remove memory service event listener.
+     * <font color=#7F9FBF>@param</font> listener - event listener implementation.
+     */</font>
+    <font color=#7F0055>void</font> removeListener(MemoryListener listener);
+
+    <font color=#3F5FBF>/**
+     * Memory event listener is notified when memory context hierarchy
+     * 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 
+         * need to update themselves. Clients, at least, should invalidate
+         * corresponding cached memory data.
+         * Not every change is notified - it is not possible,
+         * only those, which are not caused by normal execution of the debuggee.
+         * &lsquo;addr&rsquo; and &lsquo;size&rsquo; can be null if unknown.
+         */</font>
+        <font color=#7F0055>void</font> memoryChanged(String context_id,
+               long[] addr, long[] size);
+    }
+}
+</pre>
+
+</body>
+</html>