Dataspaces and sub-region mapping
Daniel Waddington
waddy16925 at ...9...
Tue Jul 2 17:51:37 CEST 2013
Thanks Norman. One last question...
If I create a class which inherits from Dataspace_capability I assume
the RPC marshalling/unmarshalling can't deal with it properly?
struct X : Genode::Dataspace_capability
{
addr_t phys;
};
So I can avoid adding extra parameters.
Daniel
On Tue, 2013-07-02 at 08:37 +0200, Norman Feske wrote:
> Hi Daniel,
>
> > I have a server which own as Ram_dataspace and dishes it out to client's
> > by using sub-rm attachments.
> >
> > If I pass back to the client the Dataspace_capability for the sub-rm, am
> > I correct in saying that the client cannot get to the physical address
> > of the mapped region since this is a Dataspace not a Ram_dataspace?
> > This this case I'd need to pass it back explicitly as an extra param.
>
> that's correct. A managed dataspace is assembled out of (potentially)
> multiply other dataspaces, each located at a different physical address
> range. As there is no single physical contiguous address range for the
> whole managed dataspace, we cannot return a meaningful value as
> 'phys_addr'. Hence, you'd need to add an extra interface for querying
> the physical address of (a portion of) the managed dataspace.
>
> Given your description, I guess, you are using a managed dataspace to
> emulate RAM dataspace, which can be transparently revoked, or migrated
> to another physical location?
>
> > Also, can you clarify the difference between Dataspace and Ram_dataspace
> > and how you can convert (if at all) between the two?
>
> There is no functional difference. The dataspace type merely denotes the
> interface from where the dataspace originated from. E.g., a
> 'Rom_dataspace' originates from 'Rom_session', an 'Io_mem_dataspace'
> originates from 'Io_mem_session', etc. Because all those types are
> derived from the 'Dataspace' base type, you can use a 'static_cap_cast'
> to convert the types. E.g.,
>
> Ram_dataspace ram_ds_cap;
> Dataspace ds_cap;
> ...
> ds_cap = static_cap_cast<Dataspace>(ram_ds_cap);
>
> The capability-type-casting rules are analogous to using 'static_cast'
> for C++ types. The cast function templates are located at:
>
> base/include/base/capability.h
>
> Cheers
> Norman
>
More information about the users
mailing list