linux/arch/tile/kernel/hvglue_trace.c
<<
>>
Prefs
   1/*
   2 * Copyright 2013 Tilera Corporation. All Rights Reserved.
   3 *
   4 *   This program is free software; you can redistribute it and/or
   5 *   modify it under the terms of the GNU General Public License
   6 *   as published by the Free Software Foundation, version 2.
   7 *
   8 *   This program is distributed in the hope that it will be useful, but
   9 *   WITHOUT ANY WARRANTY; without even the implied warranty of
  10 *   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
  11 *   NON INFRINGEMENT.  See the GNU General Public License for
  12 *   more details.
  13 */
  14
  15/*
  16 * Pull in the hypervisor header so we declare all the ABI functions
  17 * with the underscore versions, then undef the names so that we can
  18 * provide our own wrapper versions.
  19 */
  20#define hv_init _hv_init
  21#define hv_install_context _hv_install_context
  22#define hv_sysconf _hv_sysconf
  23#define hv_get_rtc _hv_get_rtc
  24#define hv_set_rtc _hv_set_rtc
  25#define hv_flush_asid _hv_flush_asid
  26#define hv_flush_page _hv_flush_page
  27#define hv_flush_pages _hv_flush_pages
  28#define hv_restart _hv_restart
  29#define hv_halt _hv_halt
  30#define hv_power_off _hv_power_off
  31#define hv_inquire_physical _hv_inquire_physical
  32#define hv_inquire_memory_controller _hv_inquire_memory_controller
  33#define hv_inquire_virtual _hv_inquire_virtual
  34#define hv_inquire_asid _hv_inquire_asid
  35#define hv_nanosleep _hv_nanosleep
  36#define hv_console_read_if_ready _hv_console_read_if_ready
  37#define hv_console_write _hv_console_write
  38#define hv_downcall_dispatch _hv_downcall_dispatch
  39#define hv_inquire_topology _hv_inquire_topology
  40#define hv_fs_findfile _hv_fs_findfile
  41#define hv_fs_fstat _hv_fs_fstat
  42#define hv_fs_pread _hv_fs_pread
  43#define hv_physaddr_read64 _hv_physaddr_read64
  44#define hv_physaddr_write64 _hv_physaddr_write64
  45#define hv_get_command_line _hv_get_command_line
  46#define hv_set_caching _hv_set_caching
  47#define hv_bzero_page _hv_bzero_page
  48#define hv_register_message_state _hv_register_message_state
  49#define hv_send_message _hv_send_message
  50#define hv_receive_message _hv_receive_message
  51#define hv_inquire_context _hv_inquire_context
  52#define hv_start_all_tiles _hv_start_all_tiles
  53#define hv_dev_open _hv_dev_open
  54#define hv_dev_close _hv_dev_close
  55#define hv_dev_pread _hv_dev_pread
  56#define hv_dev_pwrite _hv_dev_pwrite
  57#define hv_dev_poll _hv_dev_poll
  58#define hv_dev_poll_cancel _hv_dev_poll_cancel
  59#define hv_dev_preada _hv_dev_preada
  60#define hv_dev_pwritea _hv_dev_pwritea
  61#define hv_flush_remote _hv_flush_remote
  62#define hv_console_putc _hv_console_putc
  63#define hv_inquire_tiles _hv_inquire_tiles
  64#define hv_confstr _hv_confstr
  65#define hv_reexec _hv_reexec
  66#define hv_set_command_line _hv_set_command_line
  67#define hv_clear_intr _hv_clear_intr
  68#define hv_enable_intr _hv_enable_intr
  69#define hv_disable_intr _hv_disable_intr
  70#define hv_raise_intr _hv_raise_intr
  71#define hv_trigger_ipi _hv_trigger_ipi
  72#define hv_store_mapping _hv_store_mapping
  73#define hv_inquire_realpa _hv_inquire_realpa
  74#define hv_flush_all _hv_flush_all
  75#define hv_get_ipi_pte _hv_get_ipi_pte
  76#define hv_set_pte_super_shift _hv_set_pte_super_shift
  77#define hv_console_set_ipi _hv_console_set_ipi
  78#include <hv/hypervisor.h>
  79#undef hv_init
  80#undef hv_install_context
  81#undef hv_sysconf
  82#undef hv_get_rtc
  83#undef hv_set_rtc
  84#undef hv_flush_asid
  85#undef hv_flush_page
  86#undef hv_flush_pages
  87#undef hv_restart
  88#undef hv_halt
  89#undef hv_power_off
  90#undef hv_inquire_physical
  91#undef hv_inquire_memory_controller
  92#undef hv_inquire_virtual
  93#undef hv_inquire_asid
  94#undef hv_nanosleep
  95#undef hv_console_read_if_ready
  96#undef hv_console_write
  97#undef hv_downcall_dispatch
  98#undef hv_inquire_topology
  99#undef hv_fs_findfile
 100#undef hv_fs_fstat
 101#undef hv_fs_pread
 102#undef hv_physaddr_read64
 103#undef hv_physaddr_write64
 104#undef hv_get_command_line
 105#undef hv_set_caching
 106#undef hv_bzero_page
 107#undef hv_register_message_state
 108#undef hv_send_message
 109#undef hv_receive_message
 110#undef hv_inquire_context
 111#undef hv_start_all_tiles
 112#undef hv_dev_open
 113#undef hv_dev_close
 114#undef hv_dev_pread
 115#undef hv_dev_pwrite
 116#undef hv_dev_poll
 117#undef hv_dev_poll_cancel
 118#undef hv_dev_preada
 119#undef hv_dev_pwritea
 120#undef hv_flush_remote
 121#undef hv_console_putc
 122#undef hv_inquire_tiles
 123#undef hv_confstr
 124#undef hv_reexec
 125#undef hv_set_command_line
 126#undef hv_clear_intr
 127#undef hv_enable_intr
 128#undef hv_disable_intr
 129#undef hv_raise_intr
 130#undef hv_trigger_ipi
 131#undef hv_store_mapping
 132#undef hv_inquire_realpa
 133#undef hv_flush_all
 134#undef hv_get_ipi_pte
 135#undef hv_set_pte_super_shift
 136#undef hv_console_set_ipi
 137
 138/*
 139 * Provide macros based on <linux/syscalls.h> to provide a wrapper
 140 * function that invokes the same function with an underscore prefix.
 141 * We can't use the existing __SC_xxx macros because we need to
 142 * support up to nine arguments rather than up to six, and also this
 143 * way the file stands alone from possible changes in the
 144 * implementation of <linux/syscalls.h>.
 145 */
 146#define HV_WRAP0(type, name)                                    \
 147        type name(void);                                        \
 148        type name(void)                                         \
 149        {                                                       \
 150                return _##name();                               \
 151        }
 152#define __HV_DECL1(t1, a1)      t1 a1
 153#define __HV_DECL2(t2, a2, ...) t2 a2, __HV_DECL1(__VA_ARGS__)
 154#define __HV_DECL3(t3, a3, ...) t3 a3, __HV_DECL2(__VA_ARGS__)
 155#define __HV_DECL4(t4, a4, ...) t4 a4, __HV_DECL3(__VA_ARGS__)
 156#define __HV_DECL5(t5, a5, ...) t5 a5, __HV_DECL4(__VA_ARGS__)
 157#define __HV_DECL6(t6, a6, ...) t6 a6, __HV_DECL5(__VA_ARGS__)
 158#define __HV_DECL7(t7, a7, ...) t7 a7, __HV_DECL6(__VA_ARGS__)
 159#define __HV_DECL8(t8, a8, ...) t8 a8, __HV_DECL7(__VA_ARGS__)
 160#define __HV_DECL9(t9, a9, ...) t9 a9, __HV_DECL8(__VA_ARGS__)
 161#define __HV_PASS1(t1, a1)      a1
 162#define __HV_PASS2(t2, a2, ...) a2, __HV_PASS1(__VA_ARGS__)
 163#define __HV_PASS3(t3, a3, ...) a3, __HV_PASS2(__VA_ARGS__)
 164#define __HV_PASS4(t4, a4, ...) a4, __HV_PASS3(__VA_ARGS__)
 165#define __HV_PASS5(t5, a5, ...) a5, __HV_PASS4(__VA_ARGS__)
 166#define __HV_PASS6(t6, a6, ...) a6, __HV_PASS5(__VA_ARGS__)
 167#define __HV_PASS7(t7, a7, ...) a7, __HV_PASS6(__VA_ARGS__)
 168#define __HV_PASS8(t8, a8, ...) a8, __HV_PASS7(__VA_ARGS__)
 169#define __HV_PASS9(t9, a9, ...) a9, __HV_PASS8(__VA_ARGS__)
 170#define HV_WRAPx(x, type, name, ...)                            \
 171        type name(__HV_DECL##x(__VA_ARGS__));                   \
 172        type name(__HV_DECL##x(__VA_ARGS__))                    \
 173        {                                                       \
 174                return _##name(__HV_PASS##x(__VA_ARGS__));      \
 175        }
 176#define HV_WRAP1(type, name, ...) HV_WRAPx(1, type, name, __VA_ARGS__)
 177#define HV_WRAP2(type, name, ...) HV_WRAPx(2, type, name, __VA_ARGS__)
 178#define HV_WRAP3(type, name, ...) HV_WRAPx(3, type, name, __VA_ARGS__)
 179#define HV_WRAP4(type, name, ...) HV_WRAPx(4, type, name, __VA_ARGS__)
 180#define HV_WRAP5(type, name, ...) HV_WRAPx(5, type, name, __VA_ARGS__)
 181#define HV_WRAP6(type, name, ...) HV_WRAPx(6, type, name, __VA_ARGS__)
 182#define HV_WRAP7(type, name, ...) HV_WRAPx(7, type, name, __VA_ARGS__)
 183#define HV_WRAP8(type, name, ...) HV_WRAPx(8, type, name, __VA_ARGS__)
 184#define HV_WRAP9(type, name, ...) HV_WRAPx(9, type, name, __VA_ARGS__)
 185
 186/* List all the hypervisor API functions. */
 187HV_WRAP4(void, hv_init, HV_VersionNumber, interface_version_number,
 188         int, chip_num, int, chip_rev_num, int, client_pl)
 189HV_WRAP1(long, hv_sysconf, HV_SysconfQuery, query)
 190HV_WRAP3(int, hv_confstr, HV_ConfstrQuery, query, HV_VirtAddr, buf, int, len)
 191#if CHIP_HAS_IPI()
 192HV_WRAP3(int, hv_get_ipi_pte, HV_Coord, tile, int, pl, HV_PTE*, pte)
 193HV_WRAP3(int, hv_console_set_ipi, int, ipi, int, event, HV_Coord, coord);
 194#else
 195HV_WRAP1(void, hv_enable_intr, HV_IntrMask, enab_mask)
 196HV_WRAP1(void, hv_disable_intr, HV_IntrMask, disab_mask)
 197HV_WRAP1(void, hv_clear_intr, HV_IntrMask, clear_mask)
 198HV_WRAP1(void, hv_raise_intr, HV_IntrMask, raise_mask)
 199HV_WRAP2(HV_Errno, hv_trigger_ipi, HV_Coord, tile, int, interrupt)
 200#endif /* !CHIP_HAS_IPI() */
 201HV_WRAP3(int, hv_store_mapping, HV_VirtAddr, va, unsigned int, len,
 202         HV_PhysAddr, pa)
 203HV_WRAP2(HV_PhysAddr, hv_inquire_realpa, HV_PhysAddr, cpa, unsigned int, len)
 204HV_WRAP0(HV_RTCTime, hv_get_rtc)
 205HV_WRAP1(void, hv_set_rtc, HV_RTCTime, time)
 206HV_WRAP4(int, hv_install_context, HV_PhysAddr, page_table, HV_PTE, access,
 207         HV_ASID, asid, __hv32, flags)
 208HV_WRAP2(int, hv_set_pte_super_shift, int, level, int, log2_count)
 209HV_WRAP0(HV_Context, hv_inquire_context)
 210HV_WRAP1(int, hv_flush_asid, HV_ASID, asid)
 211HV_WRAP2(int, hv_flush_page, HV_VirtAddr, address, HV_PageSize, page_size)
 212HV_WRAP3(int, hv_flush_pages, HV_VirtAddr, start, HV_PageSize, page_size,
 213         unsigned long, size)
 214HV_WRAP1(int, hv_flush_all, int, preserve_global)
 215HV_WRAP2(void, hv_restart, HV_VirtAddr, cmd, HV_VirtAddr, args)
 216HV_WRAP0(void, hv_halt)
 217HV_WRAP0(void, hv_power_off)
 218HV_WRAP1(int, hv_reexec, HV_PhysAddr, entry)
 219HV_WRAP0(HV_Topology, hv_inquire_topology)
 220HV_WRAP3(HV_Errno, hv_inquire_tiles, HV_InqTileSet, set, HV_VirtAddr, cpumask,
 221         int, length)
 222HV_WRAP1(HV_PhysAddrRange, hv_inquire_physical, int, idx)
 223HV_WRAP2(HV_MemoryControllerInfo, hv_inquire_memory_controller, HV_Coord, coord,
 224         int, controller)
 225HV_WRAP1(HV_VirtAddrRange, hv_inquire_virtual, int, idx)
 226HV_WRAP1(HV_ASIDRange, hv_inquire_asid, int, idx)
 227HV_WRAP1(void, hv_nanosleep, int, nanosecs)
 228HV_WRAP0(int, hv_console_read_if_ready)
 229HV_WRAP1(void, hv_console_putc, int, byte)
 230HV_WRAP2(int, hv_console_write, HV_VirtAddr, bytes, int, len)
 231HV_WRAP0(void, hv_downcall_dispatch)
 232HV_WRAP1(int, hv_fs_findfile, HV_VirtAddr, filename)
 233HV_WRAP1(HV_FS_StatInfo, hv_fs_fstat, int, inode)
 234HV_WRAP4(int, hv_fs_pread, int, inode, HV_VirtAddr, buf,
 235         int, length, int, offset)
 236HV_WRAP2(unsigned long long, hv_physaddr_read64, HV_PhysAddr, addr,
 237         HV_PTE, access)
 238HV_WRAP3(void, hv_physaddr_write64, HV_PhysAddr, addr, HV_PTE, access,
 239         unsigned long long, val)
 240HV_WRAP2(int, hv_get_command_line, HV_VirtAddr, buf, int, length)
 241HV_WRAP2(HV_Errno, hv_set_command_line, HV_VirtAddr, buf, int, length)
 242HV_WRAP1(void, hv_set_caching, unsigned long, bitmask)
 243HV_WRAP2(void, hv_bzero_page, HV_VirtAddr, va, unsigned int, size)
 244HV_WRAP1(HV_Errno, hv_register_message_state, HV_MsgState*, msgstate)
 245HV_WRAP4(int, hv_send_message, HV_Recipient *, recips, int, nrecip,
 246         HV_VirtAddr, buf, int, buflen)
 247HV_WRAP3(HV_RcvMsgInfo, hv_receive_message, HV_MsgState, msgstate,
 248         HV_VirtAddr, buf, int, buflen)
 249HV_WRAP0(void, hv_start_all_tiles)
 250HV_WRAP2(int, hv_dev_open, HV_VirtAddr, name, __hv32, flags)
 251HV_WRAP1(int, hv_dev_close, int, devhdl)
 252HV_WRAP5(int, hv_dev_pread, int, devhdl, __hv32, flags, HV_VirtAddr, va,
 253         __hv32, len, __hv64, offset)
 254HV_WRAP5(int, hv_dev_pwrite, int, devhdl, __hv32, flags, HV_VirtAddr, va,
 255         __hv32, len, __hv64, offset)
 256HV_WRAP3(int, hv_dev_poll, int, devhdl, __hv32, events, HV_IntArg, intarg)
 257HV_WRAP1(int, hv_dev_poll_cancel, int, devhdl)
 258HV_WRAP6(int, hv_dev_preada, int, devhdl, __hv32, flags, __hv32, sgl_len,
 259         HV_SGL *, sglp, __hv64, offset, HV_IntArg, intarg)
 260HV_WRAP6(int, hv_dev_pwritea, int, devhdl, __hv32, flags, __hv32, sgl_len,
 261         HV_SGL *, sglp, __hv64, offset, HV_IntArg, intarg)
 262HV_WRAP9(int, hv_flush_remote, HV_PhysAddr, cache_pa,
 263         unsigned long, cache_control, unsigned long*, cache_cpumask,
 264         HV_VirtAddr, tlb_va, unsigned long, tlb_length,
 265         unsigned long, tlb_pgsize, unsigned long*, tlb_cpumask,
 266         HV_Remote_ASID*, asids, int, asidcount)
 267