Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / tile / gxio / iorpc_trio.c
diff --git a/kernel/arch/tile/gxio/iorpc_trio.c b/kernel/arch/tile/gxio/iorpc_trio.c
new file mode 100644 (file)
index 0000000..1d3cedb
--- /dev/null
@@ -0,0 +1,350 @@
+/*
+ * 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_trio.h"
+
+struct alloc_asids_param {
+       unsigned int count;
+       unsigned int first;
+       unsigned int flags;
+};
+
+int gxio_trio_alloc_asids(gxio_trio_context_t *context, unsigned int count,
+                         unsigned int first, unsigned int flags)
+{
+       struct alloc_asids_param temp;
+       struct alloc_asids_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_TRIO_OP_ALLOC_ASIDS);
+}
+
+EXPORT_SYMBOL(gxio_trio_alloc_asids);
+
+
+struct alloc_memory_maps_param {
+       unsigned int count;
+       unsigned int first;
+       unsigned int flags;
+};
+
+int gxio_trio_alloc_memory_maps(gxio_trio_context_t *context,
+                               unsigned int count, unsigned int first,
+                               unsigned int flags)
+{
+       struct alloc_memory_maps_param temp;
+       struct alloc_memory_maps_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_TRIO_OP_ALLOC_MEMORY_MAPS);
+}
+
+EXPORT_SYMBOL(gxio_trio_alloc_memory_maps);
+
+struct alloc_scatter_queues_param {
+       unsigned int count;
+       unsigned int first;
+       unsigned int flags;
+};
+
+int gxio_trio_alloc_scatter_queues(gxio_trio_context_t *context,
+                                  unsigned int count, unsigned int first,
+                                  unsigned int flags)
+{
+       struct alloc_scatter_queues_param temp;
+       struct alloc_scatter_queues_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_TRIO_OP_ALLOC_SCATTER_QUEUES);
+}
+
+EXPORT_SYMBOL(gxio_trio_alloc_scatter_queues);
+
+struct alloc_pio_regions_param {
+       unsigned int count;
+       unsigned int first;
+       unsigned int flags;
+};
+
+int gxio_trio_alloc_pio_regions(gxio_trio_context_t *context,
+                               unsigned int count, unsigned int first,
+                               unsigned int flags)
+{
+       struct alloc_pio_regions_param temp;
+       struct alloc_pio_regions_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_TRIO_OP_ALLOC_PIO_REGIONS);
+}
+
+EXPORT_SYMBOL(gxio_trio_alloc_pio_regions);
+
+struct init_pio_region_aux_param {
+       unsigned int pio_region;
+       unsigned int mac;
+       uint32_t bus_address_hi;
+       unsigned int flags;
+};
+
+int gxio_trio_init_pio_region_aux(gxio_trio_context_t *context,
+                                 unsigned int pio_region, unsigned int mac,
+                                 uint32_t bus_address_hi, unsigned int flags)
+{
+       struct init_pio_region_aux_param temp;
+       struct init_pio_region_aux_param *params = &temp;
+
+       params->pio_region = pio_region;
+       params->mac = mac;
+       params->bus_address_hi = bus_address_hi;
+       params->flags = flags;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_TRIO_OP_INIT_PIO_REGION_AUX);
+}
+
+EXPORT_SYMBOL(gxio_trio_init_pio_region_aux);
+
+
+struct init_memory_map_mmu_aux_param {
+       unsigned int map;
+       unsigned long va;
+       uint64_t size;
+       unsigned int asid;
+       unsigned int mac;
+       uint64_t bus_address;
+       unsigned int node;
+       unsigned int order_mode;
+};
+
+int gxio_trio_init_memory_map_mmu_aux(gxio_trio_context_t *context,
+                                     unsigned int map, unsigned long va,
+                                     uint64_t size, unsigned int asid,
+                                     unsigned int mac, uint64_t bus_address,
+                                     unsigned int node,
+                                     unsigned int order_mode)
+{
+       struct init_memory_map_mmu_aux_param temp;
+       struct init_memory_map_mmu_aux_param *params = &temp;
+
+       params->map = map;
+       params->va = va;
+       params->size = size;
+       params->asid = asid;
+       params->mac = mac;
+       params->bus_address = bus_address;
+       params->node = node;
+       params->order_mode = order_mode;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params),
+                            GXIO_TRIO_OP_INIT_MEMORY_MAP_MMU_AUX);
+}
+
+EXPORT_SYMBOL(gxio_trio_init_memory_map_mmu_aux);
+
+struct get_port_property_param {
+       struct pcie_trio_ports_property trio_ports;
+};
+
+int gxio_trio_get_port_property(gxio_trio_context_t *context,
+                               struct pcie_trio_ports_property *trio_ports)
+{
+       int __result;
+       struct get_port_property_param temp;
+       struct get_port_property_param *params = &temp;
+
+       __result =
+           hv_dev_pread(context->fd, 0, (HV_VirtAddr) params, sizeof(*params),
+                        GXIO_TRIO_OP_GET_PORT_PROPERTY);
+       *trio_ports = params->trio_ports;
+
+       return __result;
+}
+
+EXPORT_SYMBOL(gxio_trio_get_port_property);
+
+struct config_legacy_intr_param {
+       union iorpc_interrupt interrupt;
+       unsigned int mac;
+       unsigned int intx;
+};
+
+int gxio_trio_config_legacy_intr(gxio_trio_context_t *context, int inter_x,
+                                int inter_y, int inter_ipi, int inter_event,
+                                unsigned int mac, unsigned int intx)
+{
+       struct config_legacy_intr_param temp;
+       struct config_legacy_intr_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->mac = mac;
+       params->intx = intx;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_TRIO_OP_CONFIG_LEGACY_INTR);
+}
+
+EXPORT_SYMBOL(gxio_trio_config_legacy_intr);
+
+struct config_msi_intr_param {
+       union iorpc_interrupt interrupt;
+       unsigned int mac;
+       unsigned int mem_map;
+       uint64_t mem_map_base;
+       uint64_t mem_map_limit;
+       unsigned int asid;
+};
+
+int gxio_trio_config_msi_intr(gxio_trio_context_t *context, int inter_x,
+                             int inter_y, int inter_ipi, int inter_event,
+                             unsigned int mac, unsigned int mem_map,
+                             uint64_t mem_map_base, uint64_t mem_map_limit,
+                             unsigned int asid)
+{
+       struct config_msi_intr_param temp;
+       struct config_msi_intr_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->mac = mac;
+       params->mem_map = mem_map;
+       params->mem_map_base = mem_map_base;
+       params->mem_map_limit = mem_map_limit;
+       params->asid = asid;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_TRIO_OP_CONFIG_MSI_INTR);
+}
+
+EXPORT_SYMBOL(gxio_trio_config_msi_intr);
+
+
+struct set_mps_mrs_param {
+       uint16_t mps;
+       uint16_t mrs;
+       unsigned int mac;
+};
+
+int gxio_trio_set_mps_mrs(gxio_trio_context_t *context, uint16_t mps,
+                         uint16_t mrs, unsigned int mac)
+{
+       struct set_mps_mrs_param temp;
+       struct set_mps_mrs_param *params = &temp;
+
+       params->mps = mps;
+       params->mrs = mrs;
+       params->mac = mac;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_TRIO_OP_SET_MPS_MRS);
+}
+
+EXPORT_SYMBOL(gxio_trio_set_mps_mrs);
+
+struct force_rc_link_up_param {
+       unsigned int mac;
+};
+
+int gxio_trio_force_rc_link_up(gxio_trio_context_t *context, unsigned int mac)
+{
+       struct force_rc_link_up_param temp;
+       struct force_rc_link_up_param *params = &temp;
+
+       params->mac = mac;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_TRIO_OP_FORCE_RC_LINK_UP);
+}
+
+EXPORT_SYMBOL(gxio_trio_force_rc_link_up);
+
+struct force_ep_link_up_param {
+       unsigned int mac;
+};
+
+int gxio_trio_force_ep_link_up(gxio_trio_context_t *context, unsigned int mac)
+{
+       struct force_ep_link_up_param temp;
+       struct force_ep_link_up_param *params = &temp;
+
+       params->mac = mac;
+
+       return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
+                            sizeof(*params), GXIO_TRIO_OP_FORCE_EP_LINK_UP);
+}
+
+EXPORT_SYMBOL(gxio_trio_force_ep_link_up);
+
+struct get_mmio_base_param {
+       HV_PTE base;
+};
+
+int gxio_trio_get_mmio_base(gxio_trio_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_TRIO_OP_GET_MMIO_BASE);
+       *base = params->base;
+
+       return __result;
+}
+
+EXPORT_SYMBOL(gxio_trio_get_mmio_base);
+
+struct check_mmio_offset_param {
+       unsigned long offset;
+       unsigned long size;
+};
+
+int gxio_trio_check_mmio_offset(gxio_trio_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_TRIO_OP_CHECK_MMIO_OFFSET);
+}
+
+EXPORT_SYMBOL(gxio_trio_check_mmio_offset);