[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Minios-devel] [MINIOS PATCH v2] Update Xen header files again



Wei Liu, on lun. 16 oct. 2017 16:36:41 +0100, wrote:
> The most important thing is the update to console.h, which fixes a bug
> that requires the consumers to include string.h.
> 
> Update all headers nonetheless for other fixes and new content.
> 
> Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>

Acked-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx>

> ---
>  include/xen/arch-arm/smccc.h      |  66 ++++++++++++++++++++
>  include/xen/arch-x86/xen-x86_64.h |   4 +-
>  include/xen/domctl.h              |   4 ++
>  include/xen/features.h            |   3 +
>  include/xen/hvm/dm_op.h           |  12 ++++
>  include/xen/io/console.h          |   5 +-
>  include/xen/io/netif.h            | 123 
> ++++++++++++++++++++++++++++++++++++++
>  include/xen/xen.h                 |  31 ++++++++++
>  8 files changed, 243 insertions(+), 5 deletions(-)
>  create mode 100644 include/xen/arch-arm/smccc.h
> 
> diff --git a/include/xen/arch-arm/smccc.h b/include/xen/arch-arm/smccc.h
> new file mode 100644
> index 0000000..17dc6d8
> --- /dev/null
> +++ b/include/xen/arch-arm/smccc.h
> @@ -0,0 +1,66 @@
> +/*
> + * smccc.h
> + *
> + * SMC/HVC interface in accordance with SMC Calling Convention.
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a 
> copy
> + * of this software and associated documentation files (the "Software"), to
> + * deal in the Software without restriction, including without limitation the
> + * rights to use, copy, modify, merge, publish, distribute, sublicense, 
> and/or
> + * sell copies of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
> THE
> + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> + * DEALINGS IN THE SOFTWARE.
> + *
> + * Copyright 2017 (C) EPAM Systems
> + */
> +
> +#ifndef __XEN_PUBLIC_ARCH_ARM_SMCCC_H__
> +#define __XEN_PUBLIC_ARCH_ARM_SMCCC_H__
> +
> +#include "public/xen.h"
> +
> +/*
> + * Hypervisor Service version.
> + *
> + * We can't use XEN version here, because of SMCCC requirements:
> + * Major revision should change every time SMC/HVC function is removed.
> + * Minor revision should change every time SMC/HVC function is added.
> + * So, it is SMCCC protocol revision code, not XEN version.
> + *
> + * Those values are subjected to change, when interface will be extended.
> + */
> +#define XEN_SMCCC_MAJOR_REVISION 0
> +#define XEN_SMCCC_MINOR_REVISION 1
> +
> +/* Hypervisor Service UID. Randomly generated with uuidgen. */
> +#define XEN_SMCCC_UID XEN_DEFINE_UUID(0xa71812dc, 0xc698, 0x4369, 0x9acf, \
> +                                      0x79, 0xd1, 0x8d, 0xde, 0xe6, 0x67)
> +
> +/* Standard Service Service Call version. */
> +#define SSSC_SMCCC_MAJOR_REVISION 0
> +#define SSSC_SMCCC_MINOR_REVISION 1
> +
> +/* Standard Service Call UID. Randomly generated with uuidgen. */
> +#define SSSC_SMCCC_UID XEN_DEFINE_UUID(0xf863386f, 0x4b39, 0x4cbd, 0x9220,\
> +                                       0xce, 0x16, 0x41, 0xe5, 0x9f, 0x6f)
> +
> +#endif /* __XEN_PUBLIC_ARCH_ARM_SMCCC_H__ */
> +
> +/*
> + * Local variables:
> + * mode: C
> + * c-file-style: "BSD"
> + * c-basic-offset: 4
> + * indent-tabs-mode: nil
> + * End:b
> + */
> diff --git a/include/xen/arch-x86/xen-x86_64.h 
> b/include/xen/arch-x86/xen-x86_64.h
> index 978f8cb..be52f70 100644
> --- a/include/xen/arch-x86/xen-x86_64.h
> +++ b/include/xen/arch-x86/xen-x86_64.h
> @@ -203,8 +203,8 @@ struct cpu_user_regs {
>      uint16_t ss, _pad2[3];
>      uint16_t es, _pad3[3];
>      uint16_t ds, _pad4[3];
> -    uint16_t fs, _pad5[3]; /* Non-zero => takes precedence over fs_base.     
> */
> -    uint16_t gs, _pad6[3]; /* Non-zero => takes precedence over gs_base_usr. 
> */
> +    uint16_t fs, _pad5[3]; /* Non-nul => takes precedence over fs_base.      
> */
> +    uint16_t gs, _pad6[3]; /* Non-nul => takes precedence over gs_base_user. 
> */
>  };
>  typedef struct cpu_user_regs cpu_user_regs_t;
>  DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
> diff --git a/include/xen/domctl.h b/include/xen/domctl.h
> index 8853445..70027ab 100644
> --- a/include/xen/domctl.h
> +++ b/include/xen/domctl.h
> @@ -342,6 +342,10 @@ struct xen_domctl_sched_credit2 {
>  struct xen_domctl_sched_rtds {
>      uint32_t period;
>      uint32_t budget;
> +/* Can this vCPU execute beyond its reserved amount of time? */
> +#define _XEN_DOMCTL_SCHEDRT_extra   0
> +#define XEN_DOMCTL_SCHEDRT_extra    (1U<<_XEN_DOMCTL_SCHEDRT_extra)
> +    uint32_t flags;
>  };
>  
>  typedef struct xen_domctl_schedparam_vcpu {
> diff --git a/include/xen/features.h b/include/xen/features.h
> index 2110b04..1a989b8 100644
> --- a/include/xen/features.h
> +++ b/include/xen/features.h
> @@ -102,6 +102,9 @@
>  /* Guest can use XENMEMF_vnode to specify virtual node for memory op. */
>  #define XENFEAT_memory_op_vnode_supported 13
>  
> +/* arm: Hypervisor supports ARM SMC calling convention. */
> +#define XENFEAT_ARM_SMCCC_supported       14
> +
>  #define XENFEAT_NR_SUBMAPS 1
>  
>  #endif /* __XEN_PUBLIC_FEATURES_H__ */
> diff --git a/include/xen/hvm/dm_op.h b/include/xen/hvm/dm_op.h
> index 6bbab5f..e173085 100644
> --- a/include/xen/hvm/dm_op.h
> +++ b/include/xen/hvm/dm_op.h
> @@ -357,6 +357,17 @@ struct xen_dm_op_map_mem_type_to_ioreq_server {
>                             has to be set to zero by the caller */
>  };
>  
> +/*
> + * XEN_DMOP_remote_shutdown : Declare a shutdown for another domain
> + *                            Identical to SCHEDOP_remote_shutdown
> + */
> +#define XEN_DMOP_remote_shutdown 16
> +
> +struct xen_dm_op_remote_shutdown {
> +    uint32_t reason;       /* SHUTDOWN_* => enum sched_shutdown_reason */
> +                           /* (Other reason values are not blocked) */
> +};
> +
>  struct xen_dm_op {
>      uint32_t op;
>      uint32_t pad;
> @@ -377,6 +388,7 @@ struct xen_dm_op {
>          struct xen_dm_op_inject_msi inject_msi;
>          struct xen_dm_op_map_mem_type_to_ioreq_server
>                  map_mem_type_to_ioreq_server;
> +        struct xen_dm_op_remote_shutdown remote_shutdown;
>      } u;
>  };
>  
> diff --git a/include/xen/io/console.h b/include/xen/io/console.h
> index 0f0711f..1f79ef8 100644
> --- a/include/xen/io/console.h
> +++ b/include/xen/io/console.h
> @@ -27,8 +27,6 @@
>  #ifndef __XEN_PUBLIC_IO_CONSOLE_H__
>  #define __XEN_PUBLIC_IO_CONSOLE_H__
>  
> -#include "ring.h"
> -
>  typedef uint32_t XENCONS_RING_IDX;
>  
>  #define MASK_XENCONS_IDX(idx, ring) ((idx) & (sizeof(ring)-1))
> @@ -40,7 +38,8 @@ struct xencons_interface {
>      XENCONS_RING_IDX out_cons, out_prod;
>  };
>  
> -#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
> +#ifdef XEN_WANT_FLEX_CONSOLE_RING
> +#include "ring.h"
>  DEFINE_XEN_FLEX_RING(xencons);
>  #endif
>  
> diff --git a/include/xen/io/netif.h b/include/xen/io/netif.h
> index ca00614..2454448 100644
> --- a/include/xen/io/netif.h
> +++ b/include/xen/io/netif.h
> @@ -353,6 +353,9 @@ struct xen_netif_ctrl_request {
>  #define XEN_NETIF_CTRL_TYPE_SET_HASH_MAPPING_SIZE 5
>  #define XEN_NETIF_CTRL_TYPE_SET_HASH_MAPPING      6
>  #define XEN_NETIF_CTRL_TYPE_SET_HASH_ALGORITHM    7
> +#define XEN_NETIF_CTRL_TYPE_GET_GREF_MAPPING_SIZE 8
> +#define XEN_NETIF_CTRL_TYPE_ADD_GREF_MAPPING      9
> +#define XEN_NETIF_CTRL_TYPE_DEL_GREF_MAPPING     10
>  
>      uint32_t data[3];
>  };
> @@ -390,6 +393,44 @@ struct xen_netif_ctrl_response {
>      uint32_t data;
>  };
>  
> +/*
> + * Static Grants (struct xen_netif_gref)
> + * =====================================
> + *
> + * A frontend may provide a fixed set of grant references to be mapped on
> + * the backend. The message of type XEN_NETIF_CTRL_TYPE_ADD_GREF_MAPPING
> + * prior its usage in the command ring allows for creation of these mappings.
> + * The backend will maintain a fixed amount of these mappings.
> + *
> + * XEN_NETIF_CTRL_TYPE_GET_GREF_MAPPING_SIZE lets a frontend query how many
> + * of these mappings can be kept.
> + *
> + * Each entry in the XEN_NETIF_CTRL_TYPE_{ADD,DEL}_GREF_MAPPING input table 
> has
> + * the following format:
> + *
> + *    0     1     2     3     4     5     6     7  octet
> + * +-----+-----+-----+-----+-----+-----+-----+-----+
> + * | grant ref             |  flags    |  status   |
> + * +-----+-----+-----+-----+-----+-----+-----+-----+
> + *
> + * grant ref: grant reference (IN)
> + * flags: flags describing the control operation (IN)
> + * status: XEN_NETIF_CTRL_STATUS_* (OUT)
> + *
> + * 'status' is an output parameter which does not require to be set to zero
> + * prior to its usage in the corresponding control messages.
> + */
> +
> +struct xen_netif_gref {
> +       grant_ref_t ref;
> +       uint16_t flags;
> +
> +#define _XEN_NETIF_CTRLF_GREF_readonly    0
> +#define XEN_NETIF_CTRLF_GREF_readonly    (1U<<_XEN_NETIF_CTRLF_GREF_readonly)
> +
> +       uint16_t status;
> +};
> +
>  /*
>   * Control messages
>   * ================
> @@ -609,6 +650,88 @@ struct xen_netif_ctrl_response {
>   *       invalidate any table data outside that range.
>   *       The grant reference may be read-only and must remain valid until
>   *       the response has been processed.
> + *
> + * XEN_NETIF_CTRL_TYPE_GET_GREF_MAPPING_SIZE
> + * -----------------------------------------
> + *
> + * This is sent by the frontend to fetch the number of grefs that can be kept
> + * mapped in the backend.
> + *
> + * Request:
> + *
> + *  type    = XEN_NETIF_CTRL_TYPE_GET_GREF_MAPPING_SIZE
> + *  data[0] = queue index (assumed 0 for single queue)
> + *  data[1] = 0
> + *  data[2] = 0
> + *
> + * Response:
> + *
> + *  status = XEN_NETIF_CTRL_STATUS_NOT_SUPPORTED     - Operation not
> + *                                                     supported
> + *           XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER - The queue index is
> + *                                                     out of range
> + *           XEN_NETIF_CTRL_STATUS_SUCCESS           - Operation successful
> + *  data   = maximum number of entries allowed in the gref mapping table
> + *           (if operation was successful) or zero if it is not supported.
> + *
> + * XEN_NETIF_CTRL_TYPE_ADD_GREF_MAPPING
> + * ------------------------------------
> + *
> + * This is sent by the frontend for backend to map a list of grant
> + * references.
> + *
> + * Request:
> + *
> + *  type    = XEN_NETIF_CTRL_TYPE_ADD_GREF_MAPPING
> + *  data[0] = queue index
> + *  data[1] = grant reference of page containing the mapping list
> + *            (r/w and assumed to start at beginning of page)
> + *  data[2] = size of list in entries
> + *
> + * Response:
> + *
> + *  status = XEN_NETIF_CTRL_STATUS_NOT_SUPPORTED     - Operation not
> + *                                                     supported
> + *           XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER - Operation failed
> + *           XEN_NETIF_CTRL_STATUS_SUCCESS           - Operation successful
> + *
> + * NOTE: Each entry in the input table has the format outlined
> + *       in struct xen_netif_gref.
> + *       Contrary to XEN_NETIF_CTRL_TYPE_DEL_GREF_MAPPING, the struct
> + *       xen_netif_gref 'status' field is not used and therefore the response
> + *       'status' determines the success of this operation. In case of
> + *       failure none of grants mappings get added in the backend.
> + *
> + * XEN_NETIF_CTRL_TYPE_DEL_GREF_MAPPING
> + * ------------------------------------
> + *
> + * This is sent by the frontend for backend to unmap a list of grant
> + * references.
> + *
> + * Request:
> + *
> + *  type    = XEN_NETIF_CTRL_TYPE_DEL_GREF_MAPPING
> + *  data[0] = queue index
> + *  data[1] = grant reference of page containing the mapping list
> + *            (r/w and assumed to start at beginning of page)
> + *  data[2] = size of list in entries
> + *
> + * Response:
> + *
> + *  status = XEN_NETIF_CTRL_STATUS_NOT_SUPPORTED     - Operation not
> + *                                                     supported
> + *           XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER - Operation failed
> + *           XEN_NETIF_CTRL_STATUS_SUCCESS           - Operation successful
> + *  data   = number of entries that were unmapped
> + *
> + * NOTE: Each entry in the input table has the format outlined in struct
> + *       xen_netif_gref.
> + *       The struct xen_netif_gref 'status' field determines if the entry
> + *       was successfully removed.
> + *       The entries used are only the ones representing grant references 
> that
> + *       were previously the subject of a 
> XEN_NETIF_CTRL_TYPE_ADD_GREF_MAPPING
> + *       operation. Any other entries will have their status set to
> + *       XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER upon completion.
>   */
>  
>  DEFINE_RING_TYPES(xen_netif_ctrl,
> diff --git a/include/xen/xen.h b/include/xen/xen.h
> index 2ac6b1e..308109f 100644
> --- a/include/xen/xen.h
> +++ b/include/xen/xen.h
> @@ -930,6 +930,37 @@ __DEFINE_XEN_GUEST_HANDLE(uint16, uint16_t);
>  __DEFINE_XEN_GUEST_HANDLE(uint32, uint32_t);
>  __DEFINE_XEN_GUEST_HANDLE(uint64, uint64_t);
>  
> +typedef struct {
> +    uint8_t a[16];
> +} xen_uuid_t;
> +
> +/*
> + * XEN_DEFINE_UUID(0x00112233, 0x4455, 0x6677, 0x8899,
> + *                 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff)
> + * will construct UUID 00112233-4455-6677-8899-aabbccddeeff presented as
> + * {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
> + * 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};
> + *
> + * NB: This is compatible with Linux kernel and with libuuid, but it is not
> + * compatible with Microsoft, as they use mixed-endian encoding (some
> + * components are little-endian, some are big-endian).
> + */
> +#define XEN_DEFINE_UUID_(a, b, c, d, e1, e2, e3, e4, e5, e6)            \
> +    {{((a) >> 24) & 0xFF, ((a) >> 16) & 0xFF,                           \
> +      ((a) >>  8) & 0xFF, ((a) >>  0) & 0xFF,                           \
> +      ((b) >>  8) & 0xFF, ((b) >>  0) & 0xFF,                           \
> +      ((c) >>  8) & 0xFF, ((c) >>  0) & 0xFF,                           \
> +      ((d) >>  8) & 0xFF, ((d) >>  0) & 0xFF,                           \
> +                e1, e2, e3, e4, e5, e6}}
> +
> +#if defined(__STDC_VERSION__) ? __STDC_VERSION__ >= 199901L : 
> defined(__GNUC__)
> +#define XEN_DEFINE_UUID(a, b, c, d, e1, e2, e3, e4, e5, e6)             \
> +    ((xen_uuid_t)XEN_DEFINE_UUID_(a, b, c, d, e1, e2, e3, e4, e5, e6))
> +#else
> +#define XEN_DEFINE_UUID(a, b, c, d, e1, e2, e3, e4, e5, e6)             \
> +    XEN_DEFINE_UUID_(a, b, c, d, e1, e2, e3, e4, e5, e6)
> +#endif /* __STDC_VERSION__ / __GNUC__ */
> +
>  #endif /* !__ASSEMBLY__ */
>  
>  /* Default definitions for macros used by domctl/sysctl. */
> -- 
> 2.11.0
> 

-- 
Samuel
RK > Some "PC speakers" are actually buzzers in some cases rather than
RK > real loudspeakers which give a squark rather than a beep.
DW They're not _that_ bad. Even on most recent hardware, mp3s played
DW through the PC speaker are relatively recognisable :)
 -+- lkml -+- 

_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/cgi-bin/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.