Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / tile / gxio / iorpc_mpipe.c
diff --git a/kernel/arch/tile/gxio/iorpc_mpipe.c b/kernel/arch/tile/gxio/iorpc_mpipe.c
new file mode 100644 (file)
index 0000000..e19325c
--- /dev/null
@@ -0,0 +1,593 @@
+/*
+ * Copyright 2012 Tilera Corporation. All Rights Reserved.
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation, version 2.
+ *
+ *   This program is distributed in the hope that it will be useful, but
+ *   WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
+ *   NON INFRINGEMENT.  See the GNU General Public License for
+ *   more details.
+ */
+
+/* This file is machine-generated; DO NOT EDIT! */
+#include "gxio/iorpc_mpipe.h"
+
+struct alloc_buffer_stacks_param {
+       unsigned int count;
+       unsigned int first;
+       unsigned int flags;
+};
+
+int gxio_mpipe_alloc_buffer_stacks(gxio_mpipe_context_t *context,
+                                  unsigned int count, unsigned int first,
+                                  unsigned int flags)
+{
+       struct alloc_buffer_stacks_param temp;
+       struct alloc_buffer_stacks_param *params = &temp;
+
+       params->count = count;
+       params->first = first;
+       params->flags = flags;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params),
+                            GXIO_MPIPE_OP_ALLOC_BUFFER_STACKS);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_alloc_buffer_stacks);
+
+struct init_buffer_stack_aux_param {
+       union iorpc_mem_buffer buffer;
+       unsigned int stack;
+       unsigned int buffer_size_enum;
+};
+
+int gxio_mpipe_init_buffer_stack_aux(gxio_mpipe_context_t *context,
+                                    void *mem_va, size_t mem_size,
+                                    unsigned int mem_flags, unsigned int stack,
+                                    unsigned int buffer_size_enum)
+{
+       int __result;
+       unsigned long long __cpa;
+       pte_t __pte;
+       struct init_buffer_stack_aux_param temp;
+       struct init_buffer_stack_aux_param *params = &temp;
+
+       __result = va_to_cpa_and_pte(mem_va, &__cpa, &__pte);
+       if (__result != 0)
+               return __result;
+       params->buffer.kernel.cpa = __cpa;
+       params->buffer.kernel.size = mem_size;
+       params->buffer.kernel.pte = __pte;
+       params->buffer.kernel.flags = mem_flags;
+       params->stack = stack;
+       params->buffer_size_enum = buffer_size_enum;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params),
+                            GXIO_MPIPE_OP_INIT_BUFFER_STACK_AUX);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_init_buffer_stack_aux);
+
+
+struct alloc_notif_rings_param {
+       unsigned int count;
+       unsigned int first;
+       unsigned int flags;
+};
+
+int gxio_mpipe_alloc_notif_rings(gxio_mpipe_context_t *context,
+                                unsigned int count, unsigned int first,
+                                unsigned int flags)
+{
+       struct alloc_notif_rings_param temp;
+       struct alloc_notif_rings_param *params = &temp;
+
+       params->count = count;
+       params->first = first;
+       params->flags = flags;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_MPIPE_OP_ALLOC_NOTIF_RINGS);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_alloc_notif_rings);
+
+struct init_notif_ring_aux_param {
+       union iorpc_mem_buffer buffer;
+       unsigned int ring;
+};
+
+int gxio_mpipe_init_notif_ring_aux(gxio_mpipe_context_t *context, void *mem_va,
+                                  size_t mem_size, unsigned int mem_flags,
+                                  unsigned int ring)
+{
+       int __result;
+       unsigned long long __cpa;
+       pte_t __pte;
+       struct init_notif_ring_aux_param temp;
+       struct init_notif_ring_aux_param *params = &temp;
+
+       __result = va_to_cpa_and_pte(mem_va, &__cpa, &__pte);
+       if (__result != 0)
+               return __result;
+       params->buffer.kernel.cpa = __cpa;
+       params->buffer.kernel.size = mem_size;
+       params->buffer.kernel.pte = __pte;
+       params->buffer.kernel.flags = mem_flags;
+       params->ring = ring;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params),
+                            GXIO_MPIPE_OP_INIT_NOTIF_RING_AUX);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_init_notif_ring_aux);
+
+struct request_notif_ring_interrupt_param {
+       union iorpc_interrupt interrupt;
+       unsigned int ring;
+};
+
+int gxio_mpipe_request_notif_ring_interrupt(gxio_mpipe_context_t *context,
+                                           int inter_x, int inter_y,
+                                           int inter_ipi, int inter_event,
+                                           unsigned int ring)
+{
+       struct request_notif_ring_interrupt_param temp;
+       struct request_notif_ring_interrupt_param *params = &temp;
+
+       params->interrupt.kernel.x = inter_x;
+       params->interrupt.kernel.y = inter_y;
+       params->interrupt.kernel.ipi = inter_ipi;
+       params->interrupt.kernel.event = inter_event;
+       params->ring = ring;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params),
+                            GXIO_MPIPE_OP_REQUEST_NOTIF_RING_INTERRUPT);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_request_notif_ring_interrupt);
+
+struct enable_notif_ring_interrupt_param {
+       unsigned int ring;
+};
+
+int gxio_mpipe_enable_notif_ring_interrupt(gxio_mpipe_context_t *context,
+                                          unsigned int ring)
+{
+       struct enable_notif_ring_interrupt_param temp;
+       struct enable_notif_ring_interrupt_param *params = &temp;
+
+       params->ring = ring;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params),
+                            GXIO_MPIPE_OP_ENABLE_NOTIF_RING_INTERRUPT);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_enable_notif_ring_interrupt);
+
+struct alloc_notif_groups_param {
+       unsigned int count;
+       unsigned int first;
+       unsigned int flags;
+};
+
+int gxio_mpipe_alloc_notif_groups(gxio_mpipe_context_t *context,
+                                 unsigned int count, unsigned int first,
+                                 unsigned int flags)
+{
+       struct alloc_notif_groups_param temp;
+       struct alloc_notif_groups_param *params = &temp;
+
+       params->count = count;
+       params->first = first;
+       params->flags = flags;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_MPIPE_OP_ALLOC_NOTIF_GROUPS);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_alloc_notif_groups);
+
+struct init_notif_group_param {
+       unsigned int group;
+       gxio_mpipe_notif_group_bits_t bits;
+};
+
+int gxio_mpipe_init_notif_group(gxio_mpipe_context_t *context,
+                               unsigned int group,
+                               gxio_mpipe_notif_group_bits_t bits)
+{
+       struct init_notif_group_param temp;
+       struct init_notif_group_param *params = &temp;
+
+       params->group = group;
+       params->bits = bits;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_MPIPE_OP_INIT_NOTIF_GROUP);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_init_notif_group);
+
+struct alloc_buckets_param {
+       unsigned int count;
+       unsigned int first;
+       unsigned int flags;
+};
+
+int gxio_mpipe_alloc_buckets(gxio_mpipe_context_t *context, unsigned int count,
+                            unsigned int first, unsigned int flags)
+{
+       struct alloc_buckets_param temp;
+       struct alloc_buckets_param *params = &temp;
+
+       params->count = count;
+       params->first = first;
+       params->flags = flags;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_MPIPE_OP_ALLOC_BUCKETS);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_alloc_buckets);
+
+struct init_bucket_param {
+       unsigned int bucket;
+       MPIPE_LBL_INIT_DAT_BSTS_TBL_t bucket_info;
+};
+
+int gxio_mpipe_init_bucket(gxio_mpipe_context_t *context, unsigned int bucket,
+                          MPIPE_LBL_INIT_DAT_BSTS_TBL_t bucket_info)
+{
+       struct init_bucket_param temp;
+       struct init_bucket_param *params = &temp;
+
+       params->bucket = bucket;
+       params->bucket_info = bucket_info;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_MPIPE_OP_INIT_BUCKET);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_init_bucket);
+
+struct alloc_edma_rings_param {
+       unsigned int count;
+       unsigned int first;
+       unsigned int flags;
+};
+
+int gxio_mpipe_alloc_edma_rings(gxio_mpipe_context_t *context,
+                               unsigned int count, unsigned int first,
+                               unsigned int flags)
+{
+       struct alloc_edma_rings_param temp;
+       struct alloc_edma_rings_param *params = &temp;
+
+       params->count = count;
+       params->first = first;
+       params->flags = flags;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_MPIPE_OP_ALLOC_EDMA_RINGS);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_alloc_edma_rings);
+
+struct init_edma_ring_aux_param {
+       union iorpc_mem_buffer buffer;
+       unsigned int ring;
+       unsigned int channel;
+};
+
+int gxio_mpipe_init_edma_ring_aux(gxio_mpipe_context_t *context, void *mem_va,
+                                 size_t mem_size, unsigned int mem_flags,
+                                 unsigned int ring, unsigned int channel)
+{
+       int __result;
+       unsigned long long __cpa;
+       pte_t __pte;
+       struct init_edma_ring_aux_param temp;
+       struct init_edma_ring_aux_param *params = &temp;
+
+       __result = va_to_cpa_and_pte(mem_va, &__cpa, &__pte);
+       if (__result != 0)
+               return __result;
+       params->buffer.kernel.cpa = __cpa;
+       params->buffer.kernel.size = mem_size;
+       params->buffer.kernel.pte = __pte;
+       params->buffer.kernel.flags = mem_flags;
+       params->ring = ring;
+       params->channel = channel;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_MPIPE_OP_INIT_EDMA_RING_AUX);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_init_edma_ring_aux);
+
+
+int gxio_mpipe_commit_rules(gxio_mpipe_context_t *context, const void *blob,
+                           size_t blob_size)
+{
+       const void *params = blob;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params, blob_size,
+                            GXIO_MPIPE_OP_COMMIT_RULES);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_commit_rules);
+
+struct register_client_memory_param {
+       unsigned int iotlb;
+       HV_PTE pte;
+       unsigned int flags;
+};
+
+int gxio_mpipe_register_client_memory(gxio_mpipe_context_t *context,
+                                     unsigned int iotlb, HV_PTE pte,
+                                     unsigned int flags)
+{
+       struct register_client_memory_param temp;
+       struct register_client_memory_param *params = &temp;
+
+       params->iotlb = iotlb;
+       params->pte = pte;
+       params->flags = flags;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params),
+                            GXIO_MPIPE_OP_REGISTER_CLIENT_MEMORY);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_register_client_memory);
+
+struct link_open_aux_param {
+       _gxio_mpipe_link_name_t name;
+       unsigned int flags;
+};
+
+int gxio_mpipe_link_open_aux(gxio_mpipe_context_t *context,
+                            _gxio_mpipe_link_name_t name, unsigned int flags)
+{
+       struct link_open_aux_param temp;
+       struct link_open_aux_param *params = &temp;
+
+       params->name = name;
+       params->flags = flags;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_MPIPE_OP_LINK_OPEN_AUX);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_link_open_aux);
+
+struct link_close_aux_param {
+       int mac;
+};
+
+int gxio_mpipe_link_close_aux(gxio_mpipe_context_t *context, int mac)
+{
+       struct link_close_aux_param temp;
+       struct link_close_aux_param *params = &temp;
+
+       params->mac = mac;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_MPIPE_OP_LINK_CLOSE_AUX);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_link_close_aux);
+
+struct link_set_attr_aux_param {
+       int mac;
+       uint32_t attr;
+       int64_t val;
+};
+
+int gxio_mpipe_link_set_attr_aux(gxio_mpipe_context_t *context, int mac,
+                                uint32_t attr, int64_t val)
+{
+       struct link_set_attr_aux_param temp;
+       struct link_set_attr_aux_param *params = &temp;
+
+       params->mac = mac;
+       params->attr = attr;
+       params->val = val;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_MPIPE_OP_LINK_SET_ATTR_AUX);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_link_set_attr_aux);
+
+struct get_timestamp_aux_param {
+       uint64_t sec;
+       uint64_t nsec;
+       uint64_t cycles;
+};
+
+int gxio_mpipe_get_timestamp_aux(gxio_mpipe_context_t *context, uint64_t *sec,
+                                uint64_t *nsec, uint64_t *cycles)
+{
+       int __result;
+       struct get_timestamp_aux_param temp;
+       struct get_timestamp_aux_param *params = &temp;
+
+       __result =
+           hv_dev_pread(context->fd, 0, (HV_VirtAddr) params, sizeof(*params),
+                        GXIO_MPIPE_OP_GET_TIMESTAMP_AUX);
+       *sec = params->sec;
+       *nsec = params->nsec;
+       *cycles = params->cycles;
+
+       return __result;
+}
+
+EXPORT_SYMBOL(gxio_mpipe_get_timestamp_aux);
+
+struct set_timestamp_aux_param {
+       uint64_t sec;
+       uint64_t nsec;
+       uint64_t cycles;
+};
+
+int gxio_mpipe_set_timestamp_aux(gxio_mpipe_context_t *context, uint64_t sec,
+                                uint64_t nsec, uint64_t cycles)
+{
+       struct set_timestamp_aux_param temp;
+       struct set_timestamp_aux_param *params = &temp;
+
+       params->sec = sec;
+       params->nsec = nsec;
+       params->cycles = cycles;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_MPIPE_OP_SET_TIMESTAMP_AUX);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_set_timestamp_aux);
+
+struct adjust_timestamp_aux_param {
+       int64_t nsec;
+};
+
+int gxio_mpipe_adjust_timestamp_aux(gxio_mpipe_context_t *context, int64_t nsec)
+{
+       struct adjust_timestamp_aux_param temp;
+       struct adjust_timestamp_aux_param *params = &temp;
+
+       params->nsec = nsec;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params),
+                            GXIO_MPIPE_OP_ADJUST_TIMESTAMP_AUX);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_adjust_timestamp_aux);
+
+struct config_edma_ring_blks_param {
+       unsigned int ering;
+       unsigned int max_blks;
+       unsigned int min_snf_blks;
+       unsigned int db;
+};
+
+int gxio_mpipe_config_edma_ring_blks(gxio_mpipe_context_t *context,
+                                    unsigned int ering, unsigned int max_blks,
+                                    unsigned int min_snf_blks, unsigned int db)
+{
+       struct config_edma_ring_blks_param temp;
+       struct config_edma_ring_blks_param *params = &temp;
+
+       params->ering = ering;
+       params->max_blks = max_blks;
+       params->min_snf_blks = min_snf_blks;
+       params->db = db;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params),
+                            GXIO_MPIPE_OP_CONFIG_EDMA_RING_BLKS);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_config_edma_ring_blks);
+
+struct adjust_timestamp_freq_param {
+       int32_t ppb;
+};
+
+int gxio_mpipe_adjust_timestamp_freq(gxio_mpipe_context_t *context, int32_t ppb)
+{
+       struct adjust_timestamp_freq_param temp;
+       struct adjust_timestamp_freq_param *params = &temp;
+
+       params->ppb = ppb;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params),
+                            GXIO_MPIPE_OP_ADJUST_TIMESTAMP_FREQ);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_adjust_timestamp_freq);
+
+struct arm_pollfd_param {
+       union iorpc_pollfd pollfd;
+};
+
+int gxio_mpipe_arm_pollfd(gxio_mpipe_context_t *context, int pollfd_cookie)
+{
+       struct arm_pollfd_param temp;
+       struct arm_pollfd_param *params = &temp;
+
+       params->pollfd.kernel.cookie = pollfd_cookie;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_MPIPE_OP_ARM_POLLFD);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_arm_pollfd);
+
+struct close_pollfd_param {
+       union iorpc_pollfd pollfd;
+};
+
+int gxio_mpipe_close_pollfd(gxio_mpipe_context_t *context, int pollfd_cookie)
+{
+       struct close_pollfd_param temp;
+       struct close_pollfd_param *params = &temp;
+
+       params->pollfd.kernel.cookie = pollfd_cookie;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_MPIPE_OP_CLOSE_POLLFD);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_close_pollfd);
+
+struct get_mmio_base_param {
+       HV_PTE base;
+};
+
+int gxio_mpipe_get_mmio_base(gxio_mpipe_context_t *context, HV_PTE *base)
+{
+       int __result;
+       struct get_mmio_base_param temp;
+       struct get_mmio_base_param *params = &temp;
+
+       __result =
+           hv_dev_pread(context->fd, 0, (HV_VirtAddr) params, sizeof(*params),
+                        GXIO_MPIPE_OP_GET_MMIO_BASE);
+       *base = params->base;
+
+       return __result;
+}
+
+EXPORT_SYMBOL(gxio_mpipe_get_mmio_base);
+
+struct check_mmio_offset_param {
+       unsigned long offset;
+       unsigned long size;
+};
+
+int gxio_mpipe_check_mmio_offset(gxio_mpipe_context_t *context,
+                                unsigned long offset, unsigned long size)
+{
+       struct check_mmio_offset_param temp;
+       struct check_mmio_offset_param *params = &temp;
+
+       params->offset = offset;
+       params->size = size;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_MPIPE_OP_CHECK_MMIO_OFFSET);
+}
+
+EXPORT_SYMBOL(gxio_mpipe_check_mmio_offset);