From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [RFC PATCH V4 08/18] Define 3-level event channel registration interface Date: Tue, 5 Mar 2013 12:30:30 +0000 Message-ID: <1362486640-14707-9-git-send-email-wei.liu2@citrix.com> References: <1362486640-14707-1-git-send-email-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1362486640-14707-1-git-send-email-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: Wei Liu , keir@xen.org, ian.campbell@citrix.com, jbeulich@suse.com, david.vrabel@citrix.com List-Id: xen-devel@lists.xenproject.org This event channel op has two sub-commands: * REGISTER_BITMAPS: register the shared pending / mask bitmaps * REGISTER_L2_SELECTOR: register L2 selector for the specific vcpu. The guest should issue REGISTER_BITMAPS first. If the registration of bitmaps succeed, it can issue REGISTER_L2_SELECTOR. Signed-off-by: Wei Liu --- xen/include/public/event_channel.h | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/xen/include/public/event_channel.h b/xen/include/public/event_channel.h index 594ea76..59a9780 100644 --- a/xen/include/public/event_channel.h +++ b/xen/include/public/event_channel.h @@ -72,6 +72,7 @@ #define EVTCHNOP_unmask 9 #define EVTCHNOP_reset 10 #define EVTCHNOP_query_extended_abis 11 +#define EVTCHNOP_register_3level 12 /* ` } */ typedef uint32_t evtchn_port_t; @@ -272,6 +273,39 @@ struct evtchn_query_extended_abis { typedef struct evtchn_query_extended_abis evtchn_query_extended_abis_t; /* + * EVTCHNOP_register_3level: Register 3-level event channel. + */ +/* + * 64 bit guests need 8 pages for evtchn_pending and evtchn_mask for + * 256k event channels while 32 bit ones only need 1 page for 32k + * event channels. + */ +#define EVTCHN_MAX_L3_PAGES 8 +/* + * A guest should register the bitmaps first, then register L2 selector for + * individual cpu. + */ +#define REGISTER_BITMAPS 1 +#define REGISTER_L2_SELECTOR 2 +struct evtchn_register_3level { + /* IN parameters. */ + uint32_t cmd; + union { + struct { + uint32_t nr_pages; + XEN_GUEST_HANDLE(xen_pfn_t) evtchn_pending; + XEN_GUEST_HANDLE(xen_pfn_t) evtchn_mask; + } bitmaps; + struct { + uint32_t cpu_id; + xen_pfn_t mfn; /* mfn of L2 selector */ + xen_pfn_t offset; /* offset of L2 selector within page */ + } l2_selector; + } u; +}; +typedef struct evtchn_register_3level evtchn_register_3level_t; + +/* * ` enum neg_errnoval * ` HYPERVISOR_event_channel_op_compat(struct evtchn_op *op) * ` -- 1.7.10.4