Reworking our support for platform specific functions
Christopher James Halse Rogers
chris at cooperteam.net
Tue Oct 14 07:14:52 UTC 2014
I, too, like the idea of a generalised approach. I just think that this
is insufficiently generalised :).
We're talking about extensions here, but again we're talking about
throwing void* around. It's entirely possible to add a mechanism for
the platform (or other code) to register extra protobuf handlers.
I look forward to discussing this in Washington :)
On Tue, Oct 14, 2014 at 12:57 PM, Daniel van Vugt
<daniel.van.vugt at canonical.com> wrote:
> Liking the idea of a generalised approach... Although on first glance
> this does not sound like a real function name:
> mir_connection_platform_operation()
> I know we want to be generic, but that sounds somehow overly generic
> with "platform operation". Maybe we need a better function name
> there. Not "ioctl" :)
>
> Also, to generalise you would probably not use a parameter named
> "DataAndFds" as "Fds" is too specific. The structure would need to
> contain a size and pointer (void*) field, although they may as well
> be parameters instead of a struct. And Protobuf could use opaque type
> "bytes".
>
> Finally instead of MesaPlatformOperationType, you could just make
> "type" a UUID string. That has a few advantages:
> 1. Adding new (private-ish) operations does not require public
> header changes.
> 2. An operation can be made portable and understood by multiple
> platforms if need be.
> 3. Operation types can be removed and retired without lingering or
> leaving a hole in any enum definition.
>
> Then again, enum/ints are beautifully simple.
>
>
> On 13/10/14 19:37, Alexandros Frantzis wrote:
>> Hi all,
>>
>> the need has arisen to add another platform-specific function, in
>> order
>> to resolve bug LP: #1379266. This addition triggered some concerns
>> about
>> the way we implement such functions.
>>
>> The problem
>> -----------
>>
>> In our current implementation, adding a platform-specific function
>> causes platform-specific details to leak into many layers from
>> client to
>> server. For example, for the existing drm_auth_magic() call we have:
>>
>> Client API: mir_connection_drm_auth_magic(int magic, ...)
>> Client : MirConnection::drm_auth_magic(...)
>> Protobuf : rpc drm_auth_magic(DRMMagic) returns (DRMAuthMagicStatus)
>> Server : SessionMediator::drm_auth_magic(), mg::DRMAuthenticator
>>
>> This approach has a few drawbacks:
>>
>> 1. Platform-specific details leak in code that should be platform
>> agnostic.
>> 2. It can't support platform-specific functions for 3rd party
>> platforms.
>> 3. It's burdensome to add a new platform-specific functions (I guess
>> this is a problem for our API functions in general).
>>
>> Proposed solution
>> -----------------
>>
>> To solve the issues mentioned above we need to provide a way to make
>> an
>> opaque (as far as the rest of Mir is concerned) request to the
>> platform:
>>
>> Client API: mir_connection_platform_operation(type, DataAndFds
>> request, ...);
>> Client : MirConnection::platform_operation(type, ...)
>> Protobuf : rpc platform_operation(type, DataAndFds) returns
>> (DataAndFds)
>> Server : SessionMediator::platform_operation()
>> Platform : DataAndFds
>> PlatformIpcOperations::platform_operation(type, DataAndFds)
>>
>> Each platform should expose a header with its operation types and
>> expected parameters types. For mesa it could be something like:
>>
>> enum MesaPlatformOperationType { drm_auth_magic, drm_get_auth_fd };
>> struct DRMAuthMagicRequest { int magic; }
>> struct DRMAuthMagicReply { int status; }
>> ...
>>
>> And a request would be:
>>
>> DRMAuthMagicRequest request = { magic };
>>
>> void platform_operation_callback(
>> MirConnection* connection, DataAndFds const* reply, void*
>> context)
>> {
>> struct DRMAuthMagicReply const* magic_reply = reply->data;
>> ...
>> }
>>
>> mir_connection_platform_operation(
>> drm_auth_magic, request, platform_operation_callback);
>>
>> With this approach:
>>
>> 1. No platform-specific details leak into unrelated layers. Only the
>> platform knows about these details and exposes them to other
>> interested
>> parties.
>>
>> 2+3. It's trivial for 3rd party platforms to expose
>> platform-specific operations
>>
>> This proposal involves changes and ABI bumps to a few layers, so I
>> would
>> appreciate some early feedback and discussion.
>>
>> Thoughts?
>>
>> Thanks,
>> Alexandros
>>
>
> --
> Mir-devel mailing list
> Mir-devel at lists.ubuntu.com
> Modify settings or unsubscribe at:
> https://lists.ubuntu.com/mailman/listinfo/mir-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/mir-devel/attachments/20141014/7380d445/attachment.html>
More information about the Mir-devel
mailing list