/* This file is autogenerated by tracetool, do not edit. */

#ifndef TRACE__GENERATED_TRACERS_H
#define TRACE__GENERATED_TRACERS_H

#include "qemu-common.h"

static inline void trace_qxl_interface_set_mm_time(int qid, uint32_t mm_time)
{
}

static inline void trace_qxl_io_write_vga(int qid, const char * mode, uint32_t addr, uint32_t val)
{
}

static inline void trace_qemu_memalign(size_t alignment, size_t size, void * ptr)
{
}

static inline void trace_qemu_anon_ram_alloc(size_t size, void * ptr)
{
}

static inline void trace_qemu_vfree(void * ptr)
{
}

static inline void trace_qemu_anon_ram_free(void * ptr, size_t size)
{
}

static inline void trace_virtqueue_fill(void * vq, const void * elem, unsigned int len, unsigned int idx)
{
}

static inline void trace_virtqueue_flush(void * vq, unsigned int count)
{
}

static inline void trace_virtqueue_pop(void * vq, void * elem, unsigned int in_num, unsigned int out_num)
{
}

static inline void trace_virtio_queue_notify(void * vdev, int n, void * vq)
{
}

static inline void trace_virtio_irq(void * vq)
{
}

static inline void trace_virtio_notify(void * vdev, void * vq)
{
}

static inline void trace_virtio_set_status(void * vdev, uint8_t val)
{
}

static inline void trace_virtio_serial_send_control_event(unsigned int port, uint16_t event, uint16_t value)
{
}

static inline void trace_virtio_serial_throttle_port(unsigned int port, bool throttle)
{
}

static inline void trace_virtio_serial_handle_control_message(uint16_t event, uint16_t value)
{
}

static inline void trace_virtio_serial_handle_control_message_port(unsigned int port)
{
}

static inline void trace_virtio_console_flush_buf(unsigned int port, size_t len, ssize_t ret)
{
}

static inline void trace_virtio_console_chr_read(unsigned int port, int size)
{
}

static inline void trace_virtio_console_chr_event(unsigned int port, int event)
{
}

static inline void trace_bdrv_open_common(void * bs, const char * filename, int flags, const char * format_name)
{
}

static inline void trace_multiwrite_cb(void * mcb, int ret)
{
}

static inline void trace_bdrv_aio_multiwrite(void * mcb, int num_callbacks, int num_reqs)
{
}

static inline void trace_bdrv_aio_discard(void * bs, int64_t sector_num, int nb_sectors, void * opaque)
{
}

static inline void trace_bdrv_aio_flush(void * bs, void * opaque)
{
}

static inline void trace_bdrv_aio_readv(void * bs, int64_t sector_num, int nb_sectors, void * opaque)
{
}

static inline void trace_bdrv_aio_writev(void * bs, int64_t sector_num, int nb_sectors, void * opaque)
{
}

static inline void trace_bdrv_aio_write_zeroes(void * bs, int64_t sector_num, int nb_sectors, int flags, void * opaque)
{
}

static inline void trace_bdrv_lock_medium(void * bs, bool locked)
{
}

static inline void trace_bdrv_co_readv(void * bs, int64_t sector_num, int nb_sector)
{
}

static inline void trace_bdrv_co_copy_on_readv(void * bs, int64_t sector_num, int nb_sector)
{
}

static inline void trace_bdrv_co_writev(void * bs, int64_t sector_num, int nb_sector)
{
}

static inline void trace_bdrv_co_write_zeroes(void * bs, int64_t sector_num, int nb_sector, int flags)
{
}

static inline void trace_bdrv_co_io_em(void * bs, int64_t sector_num, int nb_sectors, int is_write, void * acb)
{
}

static inline void trace_bdrv_co_do_copy_on_readv(void * bs, int64_t sector_num, int nb_sectors, int64_t cluster_sector_num, int cluster_nb_sectors)
{
}

static inline void trace_stream_one_iteration(void * s, int64_t sector_num, int nb_sectors, int is_allocated)
{
}

static inline void trace_stream_start(void * bs, void * base, void * s, void * co, void * opaque)
{
}

static inline void trace_commit_one_iteration(void * s, int64_t sector_num, int nb_sectors, int is_allocated)
{
}

static inline void trace_commit_start(void * bs, void * base, void * top, void * s, void * co, void * opaque)
{
}

static inline void trace_mirror_start(void * bs, void * s, void * co, void * opaque)
{
}

static inline void trace_mirror_restart_iter(void * s, int64_t cnt)
{
}

static inline void trace_mirror_before_flush(void * s)
{
}

static inline void trace_mirror_before_drain(void * s, int64_t cnt)
{
}

static inline void trace_mirror_before_sleep(void * s, int64_t cnt, int synced, uint64_t delay_ns)
{
}

static inline void trace_mirror_one_iteration(void * s, int64_t sector_num, int nb_sectors)
{
}

static inline void trace_mirror_iteration_done(void * s, int64_t sector_num, int nb_sectors, int ret)
{
}

static inline void trace_mirror_yield(void * s, int64_t cnt, int buf_free_count, int in_flight)
{
}

static inline void trace_mirror_yield_in_flight(void * s, int64_t sector_num, int in_flight)
{
}

static inline void trace_mirror_yield_buf_busy(void * s, int nb_chunks, int in_flight)
{
}

static inline void trace_mirror_break_buf_busy(void * s, int nb_chunks, int in_flight)
{
}

static inline void trace_backup_do_cow_enter(void * job, int64_t start, int64_t sector_num, int nb_sectors)
{
}

static inline void trace_backup_do_cow_return(void * job, int64_t sector_num, int nb_sectors, int ret)
{
}

static inline void trace_backup_do_cow_skip(void * job, int64_t start)
{
}

static inline void trace_backup_do_cow_process(void * job, int64_t start)
{
}

static inline void trace_backup_do_cow_read_fail(void * job, int64_t start, int ret)
{
}

static inline void trace_backup_do_cow_write_fail(void * job, int64_t start, int ret)
{
}

static inline void trace_qmp_block_job_cancel(void * job)
{
}

static inline void trace_qmp_block_job_pause(void * job)
{
}

static inline void trace_qmp_block_job_resume(void * job)
{
}

static inline void trace_qmp_block_job_complete(void * job)
{
}

static inline void trace_block_job_cb(void * bs, void * job, int ret)
{
}

static inline void trace_qmp_block_stream(void * bs, void * job)
{
}

static inline void trace_virtio_blk_req_complete(void * req, int status)
{
}

static inline void trace_virtio_blk_rw_complete(void * req, int ret)
{
}

static inline void trace_virtio_blk_handle_write(void * req, uint64_t sector, size_t nsectors)
{
}

static inline void trace_virtio_blk_handle_read(void * req, uint64_t sector, size_t nsectors)
{
}

static inline void trace_virtio_blk_data_plane_start(void * s)
{
}

static inline void trace_virtio_blk_data_plane_stop(void * s)
{
}

static inline void trace_virtio_blk_data_plane_process_request(void * s, unsigned int out_num, unsigned int in_num, unsigned int head)
{
}

static inline void trace_virtio_blk_data_plane_complete_request(void * s, unsigned int head, int ret)
{
}

static inline void trace_vring_setup(uint64_t physical, void * desc, void * avail, void * used)
{
}

static inline void trace_thread_pool_submit(void * pool, void * req, void * opaque)
{
}

static inline void trace_thread_pool_complete(void * pool, void * req, void * opaque, int ret)
{
}

static inline void trace_thread_pool_cancel(void * req, void * opaque)
{
}

static inline void trace_paio_submit_co(int64_t sector_num, int nb_sectors, int type)
{
}

static inline void trace_paio_submit(void * acb, void * opaque, int64_t sector_num, int nb_sectors, int type)
{
}

static inline void trace_cpu_in(unsigned int addr, unsigned int val)
{
}

static inline void trace_cpu_out(unsigned int addr, unsigned int val)
{
}

static inline void trace_balloon_event(void * opaque, unsigned long addr)
{
}

static inline void trace_cpu_set_apic_base(uint64_t val)
{
}

static inline void trace_cpu_get_apic_base(uint64_t val)
{
}

static inline void trace_apic_report_irq_delivered(int apic_irq_delivered)
{
}

static inline void trace_apic_reset_irq_delivered(int apic_irq_delivered)
{
}

static inline void trace_apic_get_irq_delivered(int apic_irq_delivered)
{
}

static inline void trace_apic_local_deliver(int vector, uint32_t lvt)
{
}

static inline void trace_apic_deliver_irq(uint8_t dest, uint8_t dest_mode, uint8_t delivery_mode, uint8_t vector_num, uint8_t trigger_mode)
{
}

static inline void trace_apic_mem_readl(uint64_t addr, uint32_t val)
{
}

static inline void trace_apic_mem_writel(uint64_t addr, uint32_t val)
{
}

static inline void trace_cs4231_mem_readl_dreg(uint32_t reg, uint32_t ret)
{
}

static inline void trace_cs4231_mem_readl_reg(uint32_t reg, uint32_t ret)
{
}

static inline void trace_cs4231_mem_writel_reg(uint32_t reg, uint32_t old, uint32_t val)
{
}

static inline void trace_cs4231_mem_writel_dreg(uint32_t reg, uint32_t old, uint32_t val)
{
}

static inline void trace_nvram_read(uint32_t addr, uint32_t ret)
{
}

static inline void trace_nvram_write(uint32_t addr, uint32_t old, uint32_t val)
{
}

static inline void trace_ecc_mem_writel_mer(uint32_t val)
{
}

static inline void trace_ecc_mem_writel_mdr(uint32_t val)
{
}

static inline void trace_ecc_mem_writel_mfsr(uint32_t val)
{
}

static inline void trace_ecc_mem_writel_vcr(uint32_t val)
{
}

static inline void trace_ecc_mem_writel_dr(uint32_t val)
{
}

static inline void trace_ecc_mem_writel_ecr0(uint32_t val)
{
}

static inline void trace_ecc_mem_writel_ecr1(uint32_t val)
{
}

static inline void trace_ecc_mem_readl_mer(uint32_t ret)
{
}

static inline void trace_ecc_mem_readl_mdr(uint32_t ret)
{
}

static inline void trace_ecc_mem_readl_mfsr(uint32_t ret)
{
}

static inline void trace_ecc_mem_readl_vcr(uint32_t ret)
{
}

static inline void trace_ecc_mem_readl_mfar0(uint32_t ret)
{
}

static inline void trace_ecc_mem_readl_mfar1(uint32_t ret)
{
}

static inline void trace_ecc_mem_readl_dr(uint32_t ret)
{
}

static inline void trace_ecc_mem_readl_ecr0(uint32_t ret)
{
}

static inline void trace_ecc_mem_readl_ecr1(uint32_t ret)
{
}

static inline void trace_ecc_diag_mem_writeb(uint64_t addr, uint32_t val)
{
}

static inline void trace_ecc_diag_mem_readb(uint64_t addr, uint32_t ret)
{
}

static inline void trace_fw_cfg_write(void * s, uint8_t value)
{
}

static inline void trace_fw_cfg_select(void * s, uint16_t key, int ret)
{
}

static inline void trace_fw_cfg_read(void * s, uint8_t ret)
{
}

static inline void trace_fw_cfg_add_file_dupe(void * s, char * name)
{
}

static inline void trace_fw_cfg_add_file(void * s, int index, char * name, size_t len)
{
}

static inline void trace_hd_geometry_lchs_guess(void * bs, int cyls, int heads, int secs)
{
}

static inline void trace_hd_geometry_guess(void * bs, uint32_t cyls, uint32_t heads, uint32_t secs, int trans)
{
}

static inline void trace_jazz_led_read(uint64_t addr, uint8_t val)
{
}

static inline void trace_jazz_led_write(uint64_t addr, uint8_t new)
{
}

static inline void trace_lance_mem_readw(uint64_t addr, uint32_t ret)
{
}

static inline void trace_lance_mem_writew(uint64_t addr, uint32_t val)
{
}

static inline void trace_slavio_intctl_mem_readl(uint32_t cpu, uint64_t addr, uint32_t ret)
{
}

static inline void trace_slavio_intctl_mem_writel(uint32_t cpu, uint64_t addr, uint32_t val)
{
}

static inline void trace_slavio_intctl_mem_writel_clear(uint32_t cpu, uint32_t val, uint32_t intreg_pending)
{
}

static inline void trace_slavio_intctl_mem_writel_set(uint32_t cpu, uint32_t val, uint32_t intreg_pending)
{
}

static inline void trace_slavio_intctlm_mem_readl(uint64_t addr, uint32_t ret)
{
}

static inline void trace_slavio_intctlm_mem_writel(uint64_t addr, uint32_t val)
{
}

static inline void trace_slavio_intctlm_mem_writel_enable(uint32_t val, uint32_t intregm_disabled)
{
}

static inline void trace_slavio_intctlm_mem_writel_disable(uint32_t val, uint32_t intregm_disabled)
{
}

static inline void trace_slavio_intctlm_mem_writel_target(uint32_t cpu)
{
}

static inline void trace_slavio_check_interrupts(uint32_t pending, uint32_t intregm_disabled)
{
}

static inline void trace_slavio_set_irq(uint32_t target_cpu, int irq, uint32_t pil, int level)
{
}

static inline void trace_slavio_set_timer_irq_cpu(int cpu, int level)
{
}

static inline void trace_slavio_misc_update_irq_raise(void)
{
}

static inline void trace_slavio_misc_update_irq_lower(void)
{
}

static inline void trace_slavio_set_power_fail(int power_failing, uint8_t config)
{
}

static inline void trace_slavio_cfg_mem_writeb(uint32_t val)
{
}

static inline void trace_slavio_cfg_mem_readb(uint32_t ret)
{
}

static inline void trace_slavio_diag_mem_writeb(uint32_t val)
{
}

static inline void trace_slavio_diag_mem_readb(uint32_t ret)
{
}

static inline void trace_slavio_mdm_mem_writeb(uint32_t val)
{
}

static inline void trace_slavio_mdm_mem_readb(uint32_t ret)
{
}

static inline void trace_slavio_aux1_mem_writeb(uint32_t val)
{
}

static inline void trace_slavio_aux1_mem_readb(uint32_t ret)
{
}

static inline void trace_slavio_aux2_mem_writeb(uint32_t val)
{
}

static inline void trace_slavio_aux2_mem_readb(uint32_t ret)
{
}

static inline void trace_apc_mem_writeb(uint32_t val)
{
}

static inline void trace_apc_mem_readb(uint32_t ret)
{
}

static inline void trace_slavio_sysctrl_mem_writel(uint32_t val)
{
}

static inline void trace_slavio_sysctrl_mem_readl(uint32_t ret)
{
}

static inline void trace_slavio_led_mem_writew(uint32_t val)
{
}

static inline void trace_slavio_led_mem_readw(uint32_t ret)
{
}

static inline void trace_slavio_timer_get_out(uint64_t limit, uint32_t counthigh, uint32_t count)
{
}

static inline void trace_slavio_timer_irq(uint32_t counthigh, uint32_t count)
{
}

static inline void trace_slavio_timer_mem_readl_invalid(uint64_t addr)
{
}

static inline void trace_slavio_timer_mem_readl(uint64_t addr, uint32_t ret)
{
}

static inline void trace_slavio_timer_mem_writel(uint64_t addr, uint32_t val)
{
}

static inline void trace_slavio_timer_mem_writel_limit(unsigned int timer_index, uint64_t count)
{
}

static inline void trace_slavio_timer_mem_writel_counter_invalid(void)
{
}

static inline void trace_slavio_timer_mem_writel_status_start(unsigned int timer_index)
{
}

static inline void trace_slavio_timer_mem_writel_status_stop(unsigned int timer_index)
{
}

static inline void trace_slavio_timer_mem_writel_mode_user(unsigned int timer_index)
{
}

static inline void trace_slavio_timer_mem_writel_mode_counter(unsigned int timer_index)
{
}

static inline void trace_slavio_timer_mem_writel_mode_invalid(void)
{
}

static inline void trace_slavio_timer_mem_writel_invalid(uint64_t addr)
{
}

static inline void trace_ledma_memory_read(uint64_t addr)
{
}

static inline void trace_ledma_memory_write(uint64_t addr)
{
}

static inline void trace_sparc32_dma_set_irq_raise(void)
{
}

static inline void trace_sparc32_dma_set_irq_lower(void)
{
}

static inline void trace_espdma_memory_read(uint32_t addr)
{
}

static inline void trace_espdma_memory_write(uint32_t addr)
{
}

static inline void trace_sparc32_dma_mem_readl(uint64_t addr, uint32_t ret)
{
}

static inline void trace_sparc32_dma_mem_writel(uint64_t addr, uint32_t old, uint32_t val)
{
}

static inline void trace_sparc32_dma_enable_raise(void)
{
}

static inline void trace_sparc32_dma_enable_lower(void)
{
}

static inline void trace_sun4m_cpu_interrupt(unsigned int level)
{
}

static inline void trace_sun4m_cpu_reset_interrupt(unsigned int level)
{
}

static inline void trace_sun4m_cpu_set_irq_raise(int level)
{
}

static inline void trace_sun4m_cpu_set_irq_lower(int level)
{
}

static inline void trace_sun4m_iommu_mem_readl(uint64_t addr, uint32_t ret)
{
}

static inline void trace_sun4m_iommu_mem_writel(uint64_t addr, uint32_t val)
{
}

static inline void trace_sun4m_iommu_mem_writel_ctrl(uint64_t iostart)
{
}

static inline void trace_sun4m_iommu_mem_writel_tlbflush(uint32_t val)
{
}

static inline void trace_sun4m_iommu_mem_writel_pgflush(uint32_t val)
{
}

static inline void trace_sun4m_iommu_page_get_flags(uint64_t pa, uint64_t iopte, uint32_t ret)
{
}

static inline void trace_sun4m_iommu_translate_pa(uint64_t addr, uint64_t pa, uint32_t iopte)
{
}

static inline void trace_sun4m_iommu_bad_addr(uint64_t addr)
{
}

static inline void trace_usb_packet_state_change(int bus, const char * port, int ep, void * p, const char * o, const char * n)
{
}

static inline void trace_usb_packet_state_fault(int bus, const char * port, int ep, void * p, const char * o, const char * n)
{
}

static inline void trace_usb_port_claim(int bus, const char * port)
{
}

static inline void trace_usb_port_attach(int bus, const char * port, const char * devspeed, const char * portspeed)
{
}

static inline void trace_usb_port_detach(int bus, const char * port)
{
}

static inline void trace_usb_port_release(int bus, const char * port)
{
}

static inline void trace_usb_ehci_reset(void)
{
}

static inline void trace_usb_ehci_opreg_read(uint32_t addr, const char * str, uint32_t val)
{
}

static inline void trace_usb_ehci_opreg_write(uint32_t addr, const char * str, uint32_t val)
{
}

static inline void trace_usb_ehci_opreg_change(uint32_t addr, const char * str, uint32_t new, uint32_t old)
{
}

static inline void trace_usb_ehci_portsc_read(uint32_t addr, uint32_t port, uint32_t val)
{
}

static inline void trace_usb_ehci_portsc_write(uint32_t addr, uint32_t port, uint32_t val)
{
}

static inline void trace_usb_ehci_portsc_change(uint32_t addr, uint32_t port, uint32_t new, uint32_t old)
{
}

static inline void trace_usb_ehci_usbsts(const char * sts, int state)
{
}

static inline void trace_usb_ehci_state(const char * schedule, const char * state)
{
}

static inline void trace_usb_ehci_qh_ptrs(void * q, uint32_t addr, uint32_t nxt, uint32_t c_qtd, uint32_t n_qtd, uint32_t a_qtd)
{
}

static inline void trace_usb_ehci_qh_fields(uint32_t addr, int rl, int mplen, int eps, int ep, int devaddr)
{
}

static inline void trace_usb_ehci_qh_bits(uint32_t addr, int c, int h, int dtc, int i)
{
}

static inline void trace_usb_ehci_qtd_ptrs(void * q, uint32_t addr, uint32_t nxt, uint32_t altnext)
{
}

static inline void trace_usb_ehci_qtd_fields(uint32_t addr, int tbytes, int cpage, int cerr, int pid)
{
}

static inline void trace_usb_ehci_qtd_bits(uint32_t addr, int ioc, int active, int halt, int babble, int xacterr)
{
}

static inline void trace_usb_ehci_itd(uint32_t addr, uint32_t nxt, uint32_t mplen, uint32_t mult, uint32_t ep, uint32_t devaddr)
{
}

static inline void trace_usb_ehci_sitd(uint32_t addr, uint32_t nxt, uint32_t active)
{
}

static inline void trace_usb_ehci_port_attach(uint32_t port, const char * owner, const char * device)
{
}

static inline void trace_usb_ehci_port_detach(uint32_t port, const char * owner)
{
}

static inline void trace_usb_ehci_port_reset(uint32_t port, int enable)
{
}

static inline void trace_usb_ehci_port_suspend(uint32_t port)
{
}

static inline void trace_usb_ehci_port_wakeup(uint32_t port)
{
}

static inline void trace_usb_ehci_port_resume(uint32_t port)
{
}

static inline void trace_usb_ehci_queue_action(void * q, const char * action)
{
}

static inline void trace_usb_ehci_packet_action(void * q, void * p, const char * action)
{
}

static inline void trace_usb_ehci_irq(uint32_t level, uint32_t frindex, uint32_t sts, uint32_t mask)
{
}

static inline void trace_usb_ehci_guest_bug(const char * reason)
{
}

static inline void trace_usb_ehci_doorbell_ring(void)
{
}

static inline void trace_usb_ehci_doorbell_ack(void)
{
}

static inline void trace_usb_ehci_dma_error(void)
{
}

static inline void trace_usb_uhci_reset(void)
{
}

static inline void trace_usb_uhci_schedule_start(void)
{
}

static inline void trace_usb_uhci_schedule_stop(void)
{
}

static inline void trace_usb_uhci_frame_start(uint32_t num)
{
}

static inline void trace_usb_uhci_frame_stop_bandwidth(void)
{
}

static inline void trace_usb_uhci_frame_loop_stop_idle(void)
{
}

static inline void trace_usb_uhci_frame_loop_continue(void)
{
}

static inline void trace_usb_uhci_mmio_readw(uint32_t addr, uint32_t val)
{
}

static inline void trace_usb_uhci_mmio_writew(uint32_t addr, uint32_t val)
{
}

static inline void trace_usb_uhci_queue_add(uint32_t token)
{
}

static inline void trace_usb_uhci_queue_del(uint32_t token, const char * reason)
{
}

static inline void trace_usb_uhci_packet_add(uint32_t token, uint32_t addr)
{
}

static inline void trace_usb_uhci_packet_link_async(uint32_t token, uint32_t addr)
{
}

static inline void trace_usb_uhci_packet_unlink_async(uint32_t token, uint32_t addr)
{
}

static inline void trace_usb_uhci_packet_cancel(uint32_t token, uint32_t addr, int done)
{
}

static inline void trace_usb_uhci_packet_complete_success(uint32_t token, uint32_t addr)
{
}

static inline void trace_usb_uhci_packet_complete_shortxfer(uint32_t token, uint32_t addr)
{
}

static inline void trace_usb_uhci_packet_complete_stall(uint32_t token, uint32_t addr)
{
}

static inline void trace_usb_uhci_packet_complete_babble(uint32_t token, uint32_t addr)
{
}

static inline void trace_usb_uhci_packet_complete_error(uint32_t token, uint32_t addr)
{
}

static inline void trace_usb_uhci_packet_del(uint32_t token, uint32_t addr)
{
}

static inline void trace_usb_uhci_qh_load(uint32_t qh)
{
}

static inline void trace_usb_uhci_td_load(uint32_t qh, uint32_t td, uint32_t ctrl, uint32_t token)
{
}

static inline void trace_usb_uhci_td_queue(uint32_t td, uint32_t ctrl, uint32_t token)
{
}

static inline void trace_usb_uhci_td_nextqh(uint32_t qh, uint32_t td)
{
}

static inline void trace_usb_uhci_td_async(uint32_t qh, uint32_t td)
{
}

static inline void trace_usb_uhci_td_complete(uint32_t qh, uint32_t td)
{
}

static inline void trace_usb_xhci_reset(void)
{
}

static inline void trace_usb_xhci_run(void)
{
}

static inline void trace_usb_xhci_stop(void)
{
}

static inline void trace_usb_xhci_cap_read(uint32_t off, uint32_t val)
{
}

static inline void trace_usb_xhci_oper_read(uint32_t off, uint32_t val)
{
}

static inline void trace_usb_xhci_port_read(uint32_t port, uint32_t off, uint32_t val)
{
}

static inline void trace_usb_xhci_runtime_read(uint32_t off, uint32_t val)
{
}

static inline void trace_usb_xhci_doorbell_read(uint32_t off, uint32_t val)
{
}

static inline void trace_usb_xhci_oper_write(uint32_t off, uint32_t val)
{
}

static inline void trace_usb_xhci_port_write(uint32_t port, uint32_t off, uint32_t val)
{
}

static inline void trace_usb_xhci_runtime_write(uint32_t off, uint32_t val)
{
}

static inline void trace_usb_xhci_doorbell_write(uint32_t off, uint32_t val)
{
}

static inline void trace_usb_xhci_irq_intx(uint32_t level)
{
}

static inline void trace_usb_xhci_irq_msi(uint32_t nr)
{
}

static inline void trace_usb_xhci_irq_msix(uint32_t nr)
{
}

static inline void trace_usb_xhci_irq_msix_use(uint32_t nr)
{
}

static inline void trace_usb_xhci_irq_msix_unuse(uint32_t nr)
{
}

static inline void trace_usb_xhci_queue_event(uint32_t vector, uint32_t idx, const char * trb, const char * evt, uint64_t param, uint32_t status, uint32_t control)
{
}

static inline void trace_usb_xhci_fetch_trb(uint64_t addr, const char * name, uint64_t param, uint32_t status, uint32_t control)
{
}

static inline void trace_usb_xhci_port_reset(uint32_t port)
{
}

static inline void trace_usb_xhci_port_link(uint32_t port, uint32_t pls)
{
}

static inline void trace_usb_xhci_port_notify(uint32_t port, uint32_t pls)
{
}

static inline void trace_usb_xhci_slot_enable(uint32_t slotid)
{
}

static inline void trace_usb_xhci_slot_disable(uint32_t slotid)
{
}

static inline void trace_usb_xhci_slot_address(uint32_t slotid, const char * port)
{
}

static inline void trace_usb_xhci_slot_configure(uint32_t slotid)
{
}

static inline void trace_usb_xhci_slot_evaluate(uint32_t slotid)
{
}

static inline void trace_usb_xhci_slot_reset(uint32_t slotid)
{
}

static inline void trace_usb_xhci_ep_enable(uint32_t slotid, uint32_t epid)
{
}

static inline void trace_usb_xhci_ep_disable(uint32_t slotid, uint32_t epid)
{
}

static inline void trace_usb_xhci_ep_set_dequeue(uint32_t slotid, uint32_t epid, uint32_t streamid, uint64_t param)
{
}

static inline void trace_usb_xhci_ep_kick(uint32_t slotid, uint32_t epid, uint32_t streamid)
{
}

static inline void trace_usb_xhci_ep_stop(uint32_t slotid, uint32_t epid)
{
}

static inline void trace_usb_xhci_ep_reset(uint32_t slotid, uint32_t epid)
{
}

static inline void trace_usb_xhci_ep_state(uint32_t slotid, uint32_t epid, const char * os, const char * ns)
{
}

static inline void trace_usb_xhci_xfer_start(void * xfer, uint32_t slotid, uint32_t epid, uint32_t streamid)
{
}

static inline void trace_usb_xhci_xfer_async(void * xfer)
{
}

static inline void trace_usb_xhci_xfer_nak(void * xfer)
{
}

static inline void trace_usb_xhci_xfer_retry(void * xfer)
{
}

static inline void trace_usb_xhci_xfer_success(void * xfer, uint32_t bytes)
{
}

static inline void trace_usb_xhci_xfer_error(void * xfer, uint32_t ret)
{
}

static inline void trace_usb_xhci_unimplemented(const char * item, int nr)
{
}

static inline void trace_usb_desc_device(int addr, int len, int ret)
{
}

static inline void trace_usb_desc_device_qualifier(int addr, int len, int ret)
{
}

static inline void trace_usb_desc_config(int addr, int index, int len, int ret)
{
}

static inline void trace_usb_desc_other_speed_config(int addr, int index, int len, int ret)
{
}

static inline void trace_usb_desc_string(int addr, int index, int len, int ret)
{
}

static inline void trace_usb_desc_bos(int addr, int len, int ret)
{
}

static inline void trace_usb_desc_msos(int addr, int index, int len, int ret)
{
}

static inline void trace_usb_set_addr(int addr)
{
}

static inline void trace_usb_set_config(int addr, int config, int ret)
{
}

static inline void trace_usb_set_interface(int addr, int iface, int alt, int ret)
{
}

static inline void trace_usb_clear_device_feature(int addr, int feature, int ret)
{
}

static inline void trace_usb_set_device_feature(int addr, int feature, int ret)
{
}

static inline void trace_usb_hub_reset(int addr)
{
}

static inline void trace_usb_hub_control(int addr, int request, int value, int index, int length)
{
}

static inline void trace_usb_hub_get_port_status(int addr, int nr, int status, int changed)
{
}

static inline void trace_usb_hub_set_port_feature(int addr, int nr, const char * f)
{
}

static inline void trace_usb_hub_clear_port_feature(int addr, int nr, const char * f)
{
}

static inline void trace_usb_hub_attach(int addr, int nr)
{
}

static inline void trace_usb_hub_detach(int addr, int nr)
{
}

static inline void trace_usb_hub_status_report(int addr, int status)
{
}

static inline void trace_usb_uas_reset(int addr)
{
}

static inline void trace_usb_uas_command(int addr, uint16_t tag, int lun, uint32_t lun64_1, uint32_t lun64_2)
{
}

static inline void trace_usb_uas_response(int addr, uint16_t tag, uint8_t code)
{
}

static inline void trace_usb_uas_sense(int addr, uint16_t tag, uint8_t status)
{
}

static inline void trace_usb_uas_read_ready(int addr, uint16_t tag)
{
}

static inline void trace_usb_uas_write_ready(int addr, uint16_t tag)
{
}

static inline void trace_usb_uas_xfer_data(int addr, uint16_t tag, uint32_t copy, uint32_t uoff, uint32_t usize, uint32_t soff, uint32_t ssize)
{
}

static inline void trace_usb_uas_scsi_data(int addr, uint16_t tag, uint32_t bytes)
{
}

static inline void trace_usb_uas_scsi_complete(int addr, uint16_t tag, uint32_t status, uint32_t resid)
{
}

static inline void trace_usb_uas_tmf_abort_task(int addr, uint16_t tag, uint16_t task_tag)
{
}

static inline void trace_usb_uas_tmf_logical_unit_reset(int addr, uint16_t tag, int lun)
{
}

static inline void trace_usb_uas_tmf_unsupported(int addr, uint16_t tag, uint32_t function)
{
}

static inline void trace_usb_host_open_started(int bus, int addr)
{
}

static inline void trace_usb_host_open_success(int bus, int addr)
{
}

static inline void trace_usb_host_open_failure(int bus, int addr)
{
}

static inline void trace_usb_host_close(int bus, int addr)
{
}

static inline void trace_usb_host_attach_kernel(int bus, int addr, int interface)
{
}

static inline void trace_usb_host_detach_kernel(int bus, int addr, int interface)
{
}

static inline void trace_usb_host_set_address(int bus, int addr, int config)
{
}

static inline void trace_usb_host_set_config(int bus, int addr, int config)
{
}

static inline void trace_usb_host_set_interface(int bus, int addr, int interface, int alt)
{
}

static inline void trace_usb_host_claim_interface(int bus, int addr, int config, int interface)
{
}

static inline void trace_usb_host_release_interface(int bus, int addr, int interface)
{
}

static inline void trace_usb_host_req_control(int bus, int addr, void * p, int req, int value, int index)
{
}

static inline void trace_usb_host_req_data(int bus, int addr, void * p, int in, int ep, int size)
{
}

static inline void trace_usb_host_req_complete(int bus, int addr, void * p, int status, int length)
{
}

static inline void trace_usb_host_req_emulated(int bus, int addr, void * p, int status)
{
}

static inline void trace_usb_host_req_canceled(int bus, int addr, void * p)
{
}

static inline void trace_usb_host_iso_start(int bus, int addr, int ep)
{
}

static inline void trace_usb_host_iso_stop(int bus, int addr, int ep)
{
}

static inline void trace_usb_host_iso_out_of_bufs(int bus, int addr, int ep)
{
}

static inline void trace_usb_host_reset(int bus, int addr)
{
}

static inline void trace_usb_host_auto_scan_enabled(void)
{
}

static inline void trace_usb_host_auto_scan_disabled(void)
{
}

static inline void trace_usb_host_parse_config(int bus, int addr, int value, int active)
{
}

static inline void trace_usb_host_parse_interface(int bus, int addr, int num, int alt, int active)
{
}

static inline void trace_usb_host_parse_endpoint(int bus, int addr, int ep, const char * dir, const char * type, int active)
{
}

static inline void trace_usb_host_parse_error(int bus, int addr, const char * errmsg)
{
}

static inline void trace_scsi_req_alloc(int target, int lun, int tag)
{
}

static inline void trace_scsi_req_cancel(int target, int lun, int tag)
{
}

static inline void trace_scsi_req_data(int target, int lun, int tag, int len)
{
}

static inline void trace_scsi_req_data_canceled(int target, int lun, int tag, int len)
{
}

static inline void trace_scsi_req_dequeue(int target, int lun, int tag)
{
}

static inline void trace_scsi_req_continue(int target, int lun, int tag)
{
}

static inline void trace_scsi_req_continue_canceled(int target, int lun, int tag)
{
}

static inline void trace_scsi_req_parsed(int target, int lun, int tag, int cmd, int mode, int xfer)
{
}

static inline void trace_scsi_req_parsed_lba(int target, int lun, int tag, int cmd, uint64_t lba)
{
}

static inline void trace_scsi_req_parse_bad(int target, int lun, int tag, int cmd)
{
}

static inline void trace_scsi_req_build_sense(int target, int lun, int tag, int key, int asc, int ascq)
{
}

static inline void trace_scsi_device_set_ua(int target, int lun, int key, int asc, int ascq)
{
}

static inline void trace_scsi_report_luns(int target, int lun, int tag)
{
}

static inline void trace_scsi_inquiry(int target, int lun, int tag, int cdb1, int cdb2)
{
}

static inline void trace_scsi_test_unit_ready(int target, int lun, int tag)
{
}

static inline void trace_scsi_request_sense(int target, int lun, int tag)
{
}

static inline void trace_vm_state_notify(int running, int reason)
{
}

static inline void trace_load_file(const char * name, const char * path)
{
}

static inline void trace_runstate_set(int new_state)
{
}

static inline void trace_g_malloc(size_t size, void * ptr)
{
}

static inline void trace_g_realloc(void * ptr, size_t size, void * newptr)
{
}

static inline void trace_g_free(void * ptr)
{
}

static inline void trace_system_wakeup_request(int reason)
{
}

static inline void trace_qcow2_writev_start_req(void * co, int64_t sector, int nb_sectors)
{
}

static inline void trace_qcow2_writev_done_req(void * co, int ret)
{
}

static inline void trace_qcow2_writev_start_part(void * co)
{
}

static inline void trace_qcow2_writev_done_part(void * co, int cur_nr_sectors)
{
}

static inline void trace_qcow2_writev_data(void * co, uint64_t offset)
{
}

static inline void trace_qcow2_alloc_clusters_offset(void * co, uint64_t offset, int num)
{
}

static inline void trace_qcow2_handle_copied(void * co, uint64_t guest_offset, uint64_t host_offset, uint64_t bytes)
{
}

static inline void trace_qcow2_handle_alloc(void * co, uint64_t guest_offset, uint64_t host_offset, uint64_t bytes)
{
}

static inline void trace_qcow2_do_alloc_clusters_offset(void * co, uint64_t guest_offset, uint64_t host_offset, int nb_clusters)
{
}

static inline void trace_qcow2_cluster_alloc_phys(void * co)
{
}

static inline void trace_qcow2_cluster_link_l2(void * co, int nb_clusters)
{
}

static inline void trace_qcow2_l2_allocate(void * bs, int l1_index)
{
}

static inline void trace_qcow2_l2_allocate_get_empty(void * bs, int l1_index)
{
}

static inline void trace_qcow2_l2_allocate_write_l2(void * bs, int l1_index)
{
}

static inline void trace_qcow2_l2_allocate_write_l1(void * bs, int l1_index)
{
}

static inline void trace_qcow2_l2_allocate_done(void * bs, int l1_index, int ret)
{
}

static inline void trace_qcow2_cache_get(void * co, int c, uint64_t offset, bool read_from_disk)
{
}

static inline void trace_qcow2_cache_get_replace_entry(void * co, int c, int i)
{
}

static inline void trace_qcow2_cache_get_read(void * co, int c, int i)
{
}

static inline void trace_qcow2_cache_get_done(void * co, int c, int i)
{
}

static inline void trace_qcow2_cache_flush(void * co, int c)
{
}

static inline void trace_qcow2_cache_entry_flush(void * co, int c, int i)
{
}

static inline void trace_qed_alloc_l2_cache_entry(void * l2_cache, void * entry)
{
}

static inline void trace_qed_unref_l2_cache_entry(void * entry, int ref)
{
}

static inline void trace_qed_find_l2_cache_entry(void * l2_cache, void * entry, uint64_t offset, int ref)
{
}

static inline void trace_qed_read_table(void * s, uint64_t offset, void * table)
{
}

static inline void trace_qed_read_table_cb(void * s, void * table, int ret)
{
}

static inline void trace_qed_write_table(void * s, uint64_t offset, void * table, unsigned int index, unsigned int n)
{
}

static inline void trace_qed_write_table_cb(void * s, void * table, int flush, int ret)
{
}

static inline void trace_qed_need_check_timer_cb(void * s)
{
}

static inline void trace_qed_start_need_check_timer(void * s)
{
}

static inline void trace_qed_cancel_need_check_timer(void * s)
{
}

static inline void trace_qed_aio_complete(void * s, void * acb, int ret)
{
}

static inline void trace_qed_aio_setup(void * s, void * acb, int64_t sector_num, int nb_sectors, void * opaque, int flags)
{
}

static inline void trace_qed_aio_next_io(void * s, void * acb, int ret, uint64_t cur_pos)
{
}

static inline void trace_qed_aio_read_data(void * s, void * acb, int ret, uint64_t offset, size_t len)
{
}

static inline void trace_qed_aio_write_data(void * s, void * acb, int ret, uint64_t offset, size_t len)
{
}

static inline void trace_qed_aio_write_prefill(void * s, void * acb, uint64_t start, size_t len, uint64_t offset)
{
}

static inline void trace_qed_aio_write_postfill(void * s, void * acb, uint64_t start, size_t len, uint64_t offset)
{
}

static inline void trace_qed_aio_write_main(void * s, void * acb, int ret, uint64_t offset, size_t len)
{
}

static inline void trace_g364fb_read(uint64_t addr, uint32_t val)
{
}

static inline void trace_g364fb_write(uint64_t addr, uint32_t new)
{
}

static inline void trace_grlib_gptimer_enable(int id, uint32_t count)
{
}

static inline void trace_grlib_gptimer_disabled(int id, uint32_t config)
{
}

static inline void trace_grlib_gptimer_restart(int id, uint32_t reload)
{
}

static inline void trace_grlib_gptimer_set_scaler(uint32_t scaler, uint32_t freq)
{
}

static inline void trace_grlib_gptimer_hit(int id)
{
}

static inline void trace_grlib_gptimer_readl(int id, uint64_t addr, uint32_t val)
{
}

static inline void trace_grlib_gptimer_writel(int id, uint64_t addr, uint32_t val)
{
}

static inline void trace_grlib_irqmp_check_irqs(uint32_t pend, uint32_t force, uint32_t mask, uint32_t lvl1, uint32_t lvl2)
{
}

static inline void trace_grlib_irqmp_ack(int intno)
{
}

static inline void trace_grlib_irqmp_set_irq(int irq)
{
}

static inline void trace_grlib_irqmp_readl_unknown(uint64_t addr)
{
}

static inline void trace_grlib_irqmp_writel_unknown(uint64_t addr, uint32_t value)
{
}

static inline void trace_grlib_apbuart_event(int event)
{
}

static inline void trace_grlib_apbuart_writel_unknown(uint64_t addr, uint32_t value)
{
}

static inline void trace_grlib_apbuart_readl_unknown(uint64_t addr)
{
}

static inline void trace_leon3_set_irq(int intno)
{
}

static inline void trace_leon3_reset_irq(int intno)
{
}

static inline void trace_spice_vmc_write(ssize_t out, int len)
{
}

static inline void trace_spice_vmc_read(int bytes, int len)
{
}

static inline void trace_spice_vmc_register_interface(void * scd)
{
}

static inline void trace_spice_vmc_unregister_interface(void * scd)
{
}

static inline void trace_spice_vmc_event(int event)
{
}

static inline void trace_lm32_pic_raise_irq(void)
{
}

static inline void trace_lm32_pic_lower_irq(void)
{
}

static inline void trace_lm32_pic_interrupt(int irq, int level)
{
}

static inline void trace_lm32_pic_set_im(uint32_t im)
{
}

static inline void trace_lm32_pic_set_ip(uint32_t ip)
{
}

static inline void trace_lm32_pic_get_im(uint32_t im)
{
}

static inline void trace_lm32_pic_get_ip(uint32_t ip)
{
}

static inline void trace_lm32_juart_get_jtx(uint32_t value)
{
}

static inline void trace_lm32_juart_set_jtx(uint32_t value)
{
}

static inline void trace_lm32_juart_get_jrx(uint32_t value)
{
}

static inline void trace_lm32_juart_set_jrx(uint32_t value)
{
}

static inline void trace_lm32_timer_memory_write(uint32_t addr, uint32_t value)
{
}

static inline void trace_lm32_timer_memory_read(uint32_t addr, uint32_t value)
{
}

static inline void trace_lm32_timer_hit(void)
{
}

static inline void trace_lm32_timer_irq_state(int level)
{
}

static inline void trace_lm32_uart_memory_write(uint32_t addr, uint32_t value)
{
}

static inline void trace_lm32_uart_memory_read(uint32_t addr, uint32_t value)
{
}

static inline void trace_lm32_uart_irq_state(int level)
{
}

static inline void trace_lm32_sys_memory_write(uint32_t addr, uint32_t value)
{
}

static inline void trace_megasas_init_firmware(uint64_t pa)
{
}

static inline void trace_megasas_init_queue(uint64_t queue_pa, int queue_len, uint64_t head, uint64_t tail, uint32_t flags)
{
}

static inline void trace_megasas_initq_map_failed(int frame)
{
}

static inline void trace_megasas_initq_mismatch(int queue_len, int fw_cmds)
{
}

static inline void trace_megasas_qf_found(unsigned int index, uint64_t pa)
{
}

static inline void trace_megasas_qf_new(unsigned int index, void * cmd)
{
}

static inline void trace_megasas_qf_failed(unsigned long pa)
{
}

static inline void trace_megasas_qf_enqueue(unsigned int index, unsigned int count, uint64_t context, unsigned int tail, int busy)
{
}

static inline void trace_megasas_qf_update(unsigned int head, unsigned int busy)
{
}

static inline void trace_megasas_qf_map_failed(int cmd, unsigned long frame)
{
}

static inline void trace_megasas_qf_complete_noirq(uint64_t context)
{
}

static inline void trace_megasas_qf_complete(uint64_t context, unsigned int tail, unsigned int offset, int busy, unsigned int doorbell)
{
}

static inline void trace_megasas_frame_busy(uint64_t addr)
{
}

static inline void trace_megasas_unhandled_frame_cmd(int cmd, uint8_t frame_cmd)
{
}

static inline void trace_megasas_handle_scsi(const char * frame, int bus, int dev, int lun, void * sdev, unsigned long size)
{
}

static inline void trace_megasas_scsi_target_not_present(const char * frame, int bus, int dev, int lun)
{
}

static inline void trace_megasas_scsi_invalid_cdb_len(const char * frame, int bus, int dev, int lun, int len)
{
}

static inline void trace_megasas_iov_read_overflow(int cmd, int bytes, int len)
{
}

static inline void trace_megasas_iov_write_overflow(int cmd, int bytes, int len)
{
}

static inline void trace_megasas_iov_read_underflow(int cmd, int bytes, int len)
{
}

static inline void trace_megasas_iov_write_underflow(int cmd, int bytes, int len)
{
}

static inline void trace_megasas_scsi_req_alloc_failed(const char * frame, int dev, int lun)
{
}

static inline void trace_megasas_scsi_read_start(int cmd, int len)
{
}

static inline void trace_megasas_scsi_write_start(int cmd, int len)
{
}

static inline void trace_megasas_scsi_nodata(int cmd)
{
}

static inline void trace_megasas_scsi_complete(int cmd, uint32_t status, int len, int xfer)
{
}

static inline void trace_megasas_command_complete(int cmd, uint32_t status, uint32_t resid)
{
}

static inline void trace_megasas_handle_io(int cmd, const char * frame, int dev, int lun, unsigned long lba, unsigned long count)
{
}

static inline void trace_megasas_io_target_not_present(int cmd, const char * frame, int dev, int lun)
{
}

static inline void trace_megasas_io_read_start(int cmd, unsigned long lba, unsigned long count, unsigned long len)
{
}

static inline void trace_megasas_io_write_start(int cmd, unsigned long lba, unsigned long count, unsigned long len)
{
}

static inline void trace_megasas_io_complete(int cmd, uint32_t len)
{
}

static inline void trace_megasas_io_read(int cmd, int bytes, int len, unsigned long offset)
{
}

static inline void trace_megasas_io_write(int cmd, int bytes, int len, unsigned long offset)
{
}

static inline void trace_megasas_iovec_sgl_overflow(int cmd, int index, int limit)
{
}

static inline void trace_megasas_iovec_sgl_underflow(int cmd, int index)
{
}

static inline void trace_megasas_iovec_sgl_invalid(int cmd, int index, uint64_t pa, uint32_t len)
{
}

static inline void trace_megasas_iovec_overflow(int cmd, int len, int limit)
{
}

static inline void trace_megasas_iovec_underflow(int cmd, int len, int limit)
{
}

static inline void trace_megasas_handle_dcmd(int cmd, int opcode)
{
}

static inline void trace_megasas_finish_dcmd(int cmd, int size)
{
}

static inline void trace_megasas_dcmd_req_alloc_failed(int cmd, const char * desc)
{
}

static inline void trace_megasas_dcmd_internal_submit(int cmd, const char * desc, int dev)
{
}

static inline void trace_megasas_dcmd_internal_finish(int cmd, int opcode, int lun)
{
}

static inline void trace_megasas_dcmd_internal_invalid(int cmd, int opcode)
{
}

static inline void trace_megasas_dcmd_unhandled(int cmd, int opcode, int len)
{
}

static inline void trace_megasas_dcmd_zero_sge(int cmd)
{
}

static inline void trace_megasas_dcmd_invalid_sge(int cmd, int count)
{
}

static inline void trace_megasas_dcmd_invalid_xfer_len(int cmd, unsigned long size, unsigned long max)
{
}

static inline void trace_megasas_dcmd_enter(int cmd, const char * dcmd, int len)
{
}

static inline void trace_megasas_dcmd_dummy(int cmd, unsigned long size)
{
}

static inline void trace_megasas_dcmd_set_fw_time(int cmd, unsigned long time)
{
}

static inline void trace_megasas_dcmd_pd_get_list(int cmd, int num, int max, int offset)
{
}

static inline void trace_megasas_dcmd_ld_get_list(int cmd, int num, int max)
{
}

static inline void trace_megasas_dcmd_ld_get_info(int cmd, int ld_id)
{
}

static inline void trace_megasas_dcmd_pd_get_info(int cmd, int pd_id)
{
}

static inline void trace_megasas_dcmd_pd_list_query(int cmd, int flags)
{
}

static inline void trace_megasas_dcmd_unsupported(int cmd, unsigned long size)
{
}

static inline void trace_megasas_abort_frame(int cmd, int abort_cmd)
{
}

static inline void trace_megasas_abort_no_cmd(int cmd, uint64_t context)
{
}

static inline void trace_megasas_abort_invalid_context(int cmd, uint64_t context, int abort_cmd)
{
}

static inline void trace_megasas_reset(void)
{
}

static inline void trace_megasas_init(int sges, int cmds, const char * intr, const char * mode)
{
}

static inline void trace_megasas_msix_raise(int vector)
{
}

static inline void trace_megasas_irq_lower(void)
{
}

static inline void trace_megasas_irq_raise(void)
{
}

static inline void trace_megasas_intr_enabled(void)
{
}

static inline void trace_megasas_intr_disabled(void)
{
}

static inline void trace_megasas_mmio_readl(unsigned long addr, uint32_t val)
{
}

static inline void trace_megasas_mmio_invalid_readl(unsigned long addr)
{
}

static inline void trace_megasas_mmio_writel(uint32_t addr, uint32_t val)
{
}

static inline void trace_megasas_mmio_invalid_writel(uint32_t addr, uint32_t val)
{
}

static inline void trace_milkymist_ac97_memory_read(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_ac97_memory_write(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_ac97_pulse_irq_crrequest(void)
{
}

static inline void trace_milkymist_ac97_pulse_irq_crreply(void)
{
}

static inline void trace_milkymist_ac97_pulse_irq_dmaw(void)
{
}

static inline void trace_milkymist_ac97_pulse_irq_dmar(void)
{
}

static inline void trace_milkymist_ac97_in_cb(int avail, uint32_t remaining)
{
}

static inline void trace_milkymist_ac97_in_cb_transferred(int transferred)
{
}

static inline void trace_milkymist_ac97_out_cb(int free, uint32_t remaining)
{
}

static inline void trace_milkymist_ac97_out_cb_transferred(int transferred)
{
}

static inline void trace_milkymist_hpdmc_memory_read(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_hpdmc_memory_write(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_memcard_memory_read(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_memcard_memory_write(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_minimac2_memory_read(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_minimac2_memory_write(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_minimac2_mdio_write(uint8_t phy_addr, uint8_t addr, uint16_t value)
{
}

static inline void trace_milkymist_minimac2_mdio_read(uint8_t phy_addr, uint8_t addr, uint16_t value)
{
}

static inline void trace_milkymist_minimac2_tx_frame(uint32_t length)
{
}

static inline void trace_milkymist_minimac2_rx_frame(const void * buf, uint32_t length)
{
}

static inline void trace_milkymist_minimac2_drop_rx_frame(const void * buf)
{
}

static inline void trace_milkymist_minimac2_rx_transfer(const void * buf, uint32_t length)
{
}

static inline void trace_milkymist_minimac2_raise_irq_rx(void)
{
}

static inline void trace_milkymist_minimac2_lower_irq_rx(void)
{
}

static inline void trace_milkymist_minimac2_pulse_irq_tx(void)
{
}

static inline void trace_milkymist_pfpu_memory_read(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_pfpu_memory_write(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_pfpu_vectout(uint32_t a, uint32_t b, uint32_t dma_ptr)
{
}

static inline void trace_milkymist_pfpu_pulse_irq(void)
{
}

static inline void trace_milkymist_softusb_memory_read(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_softusb_memory_write(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_softusb_mevt(uint8_t m)
{
}

static inline void trace_milkymist_softusb_kevt(uint8_t m)
{
}

static inline void trace_milkymist_softusb_pulse_irq(void)
{
}

static inline void trace_milkymist_sysctl_memory_read(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_sysctl_memory_write(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_sysctl_icap_write(uint32_t value)
{
}

static inline void trace_milkymist_sysctl_start_timer0(void)
{
}

static inline void trace_milkymist_sysctl_stop_timer0(void)
{
}

static inline void trace_milkymist_sysctl_start_timer1(void)
{
}

static inline void trace_milkymist_sysctl_stop_timer1(void)
{
}

static inline void trace_milkymist_sysctl_pulse_irq_timer0(void)
{
}

static inline void trace_milkymist_sysctl_pulse_irq_timer1(void)
{
}

static inline void trace_milkymist_tmu2_memory_read(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_tmu2_memory_write(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_tmu2_start(void)
{
}

static inline void trace_milkymist_tmu2_pulse_irq(void)
{
}

static inline void trace_milkymist_uart_memory_read(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_uart_memory_write(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_uart_raise_irq(void)
{
}

static inline void trace_milkymist_uart_lower_irq(void)
{
}

static inline void trace_milkymist_vgafb_memory_read(uint32_t addr, uint32_t value)
{
}

static inline void trace_milkymist_vgafb_memory_write(uint32_t addr, uint32_t value)
{
}

static inline void trace_mipsnet_send(uint32_t size)
{
}

static inline void trace_mipsnet_receive(uint32_t size)
{
}

static inline void trace_mipsnet_read(uint64_t addr, uint32_t val)
{
}

static inline void trace_mipsnet_write(uint64_t addr, uint64_t val)
{
}

static inline void trace_mipsnet_irq(uint32_t isr, uint32_t intctl)
{
}

static inline void trace_pc87312_io_read(uint32_t addr, uint32_t val)
{
}

static inline void trace_pc87312_io_write(uint32_t addr, uint32_t val)
{
}

static inline void trace_pc87312_info_floppy(uint32_t base)
{
}

static inline void trace_pc87312_info_ide(uint32_t base)
{
}

static inline void trace_pc87312_info_parallel(uint32_t base, uint32_t irq)
{
}

static inline void trace_pc87312_info_serial(int n, uint32_t base, uint32_t irq)
{
}

static inline void trace_pvscsi_ring_init_data(uint32_t txr_len_log2, uint32_t rxr_len_log2)
{
}

static inline void trace_pvscsi_ring_init_msg(uint32_t len_log2)
{
}

static inline void trace_pvscsi_ring_flush_cmp(uint64_t filled_cmp_ptr)
{
}

static inline void trace_pvscsi_ring_flush_msg(uint64_t filled_cmp_ptr)
{
}

static inline void trace_pvscsi_update_irq_level(bool raise, uint64_t mask, uint64_t status)
{
}

static inline void trace_pvscsi_update_irq_msi(void)
{
}

static inline void trace_pvscsi_cmp_ring_put(unsigned long addr)
{
}

static inline void trace_pvscsi_msg_ring_put(unsigned long addr)
{
}

static inline void trace_pvscsi_complete_request(uint64_t context, uint64_t len, uint8_t sense_key)
{
}

static inline void trace_pvscsi_get_sg_list(int nsg, size_t size)
{
}

static inline void trace_pvscsi_get_next_sg_elem(uint32_t flags)
{
}

static inline void trace_pvscsi_command_complete_not_found(uint32_t tag)
{
}

static inline void trace_pvscsi_command_complete_data_run(void)
{
}

static inline void trace_pvscsi_command_complete_sense_len(int len)
{
}

static inline void trace_pvscsi_convert_sglist(uint64_t context, unsigned long addr, uint32_t resid)
{
}

static inline void trace_pvscsi_process_req_descr(uint8_t cmd, uint64_t ctx)
{
}

static inline void trace_pvscsi_process_req_descr_unknown_device(void)
{
}

static inline void trace_pvscsi_process_req_descr_invalid_dir(void)
{
}

static inline void trace_pvscsi_process_io(unsigned long addr)
{
}

static inline void trace_pvscsi_on_cmd_noimpl(const char* cmd)
{
}

static inline void trace_pvscsi_on_cmd_reset_dev(uint32_t tgt, int lun, void* dev)
{
}

static inline void trace_pvscsi_on_cmd_arrived(const char* cmd)
{
}

static inline void trace_pvscsi_on_cmd_abort(uint64_t ctx, uint32_t tgt)
{
}

static inline void trace_pvscsi_on_cmd_unknown(uint64_t cmd_id)
{
}

static inline void trace_pvscsi_on_cmd_unknown_data(uint32_t data)
{
}

static inline void trace_pvscsi_io_write(const char* cmd, uint64_t val)
{
}

static inline void trace_pvscsi_io_write_unknown(unsigned long addr, unsigned sz, uint64_t val)
{
}

static inline void trace_pvscsi_io_read(const char* cmd, uint64_t status)
{
}

static inline void trace_pvscsi_io_read_unknown(unsigned long addr, unsigned sz)
{
}

static inline void trace_pvscsi_init_msi_fail(int res)
{
}

static inline void trace_pvscsi_state(const char* state)
{
}

static inline void trace_pvscsi_tx_rings_ppn(const char* label, uint64_t ppn)
{
}

static inline void trace_pvscsi_tx_rings_num_pages(const char* label, uint32_t num)
{
}

static inline void trace_xen_ram_alloc(unsigned long ram_addr, unsigned long size)
{
}

static inline void trace_xen_client_set_memory(uint64_t start_addr, unsigned long size, bool log_dirty)
{
}

static inline void trace_xen_map_cache(uint64_t phys_addr)
{
}

static inline void trace_xen_remap_bucket(uint64_t index)
{
}

static inline void trace_xen_map_cache_return(void* ptr)
{
}

static inline void trace_xen_platform_log(char * s)
{
}

static inline void trace_qemu_coroutine_enter(void * from, void * to, void * opaque)
{
}

static inline void trace_qemu_coroutine_yield(void * from, void * to)
{
}

static inline void trace_qemu_coroutine_terminate(void * co)
{
}

static inline void trace_qemu_co_queue_run_restart(void * co)
{
}

static inline void trace_qemu_co_queue_next(void * nxt)
{
}

static inline void trace_qemu_co_mutex_lock_entry(void * mutex, void * self)
{
}

static inline void trace_qemu_co_mutex_lock_return(void * mutex, void * self)
{
}

static inline void trace_qemu_co_mutex_unlock_entry(void * mutex, void * self)
{
}

static inline void trace_qemu_co_mutex_unlock_return(void * mutex, void * self)
{
}

static inline void trace_escc_put_queue(char channel, int b)
{
}

static inline void trace_escc_get_queue(char channel, int val)
{
}

static inline void trace_escc_update_irq(int irq)
{
}

static inline void trace_escc_update_parameters(char channel, int speed, int parity, int data_bits, int stop_bits)
{
}

static inline void trace_escc_mem_writeb_ctrl(char channel, uint32_t reg, uint32_t val)
{
}

static inline void trace_escc_mem_writeb_data(char channel, uint32_t val)
{
}

static inline void trace_escc_mem_readb_ctrl(char channel, uint32_t reg, uint8_t val)
{
}

static inline void trace_escc_mem_readb_data(char channel, uint32_t ret)
{
}

static inline void trace_escc_serial_receive_byte(char channel, int ch)
{
}

static inline void trace_escc_sunkbd_event_in(int ch)
{
}

static inline void trace_escc_sunkbd_event_out(int ch)
{
}

static inline void trace_escc_kbd_command(int val)
{
}

static inline void trace_escc_sunmouse_event(int dx, int dy, int buttons_state)
{
}

static inline void trace_iscsi_aio_write16_cb(void * iscsi, int status, void * acb, int canceled)
{
}

static inline void trace_iscsi_aio_writev(void * iscsi, int64_t sector_num, int nb_sectors, void * opaque, void * acb)
{
}

static inline void trace_iscsi_aio_read16_cb(void * iscsi, int status, void * acb, int canceled)
{
}

static inline void trace_iscsi_aio_readv(void * iscsi, int64_t sector_num, int nb_sectors, void * opaque, void * acb)
{
}

static inline void trace_esp_error_fifo_overrun(void)
{
}

static inline void trace_esp_error_unhandled_command(uint32_t val)
{
}

static inline void trace_esp_error_invalid_write(uint32_t val, uint32_t addr)
{
}

static inline void trace_esp_raise_irq(void)
{
}

static inline void trace_esp_lower_irq(void)
{
}

static inline void trace_esp_dma_enable(void)
{
}

static inline void trace_esp_dma_disable(void)
{
}

static inline void trace_esp_get_cmd(uint32_t dmalen, int target)
{
}

static inline void trace_esp_do_busid_cmd(uint8_t busid)
{
}

static inline void trace_esp_handle_satn_stop(uint32_t cmdlen)
{
}

static inline void trace_esp_write_response(uint32_t status)
{
}

static inline void trace_esp_do_dma(uint32_t cmdlen, uint32_t len)
{
}

static inline void trace_esp_command_complete(void)
{
}

static inline void trace_esp_command_complete_unexpected(void)
{
}

static inline void trace_esp_command_complete_fail(void)
{
}

static inline void trace_esp_transfer_data(uint32_t dma_left, int32_t ti_size)
{
}

static inline void trace_esp_handle_ti(uint32_t minlen)
{
}

static inline void trace_esp_handle_ti_cmd(uint32_t cmdlen)
{
}

static inline void trace_esp_mem_readb(uint32_t saddr, uint8_t reg)
{
}

static inline void trace_esp_mem_writeb(uint32_t saddr, uint8_t reg, uint32_t val)
{
}

static inline void trace_esp_mem_writeb_cmd_nop(uint32_t val)
{
}

static inline void trace_esp_mem_writeb_cmd_flush(uint32_t val)
{
}

static inline void trace_esp_mem_writeb_cmd_reset(uint32_t val)
{
}

static inline void trace_esp_mem_writeb_cmd_bus_reset(uint32_t val)
{
}

static inline void trace_esp_mem_writeb_cmd_iccs(uint32_t val)
{
}

static inline void trace_esp_mem_writeb_cmd_msgacc(uint32_t val)
{
}

static inline void trace_esp_mem_writeb_cmd_pad(uint32_t val)
{
}

static inline void trace_esp_mem_writeb_cmd_satn(uint32_t val)
{
}

static inline void trace_esp_mem_writeb_cmd_rstatn(uint32_t val)
{
}

static inline void trace_esp_mem_writeb_cmd_sel(uint32_t val)
{
}

static inline void trace_esp_mem_writeb_cmd_selatn(uint32_t val)
{
}

static inline void trace_esp_mem_writeb_cmd_selatns(uint32_t val)
{
}

static inline void trace_esp_mem_writeb_cmd_ensel(uint32_t val)
{
}

static inline void trace_esp_mem_writeb_cmd_dissel(uint32_t val)
{
}

static inline void trace_esp_pci_error_invalid_dma_direction(void)
{
}

static inline void trace_esp_pci_error_invalid_read(uint32_t reg)
{
}

static inline void trace_esp_pci_error_invalid_write(uint32_t reg)
{
}

static inline void trace_esp_pci_error_invalid_write_dma(uint32_t val, uint32_t addr)
{
}

static inline void trace_esp_pci_dma_read(uint32_t saddr, uint32_t reg)
{
}

static inline void trace_esp_pci_dma_write(uint32_t saddr, uint32_t reg, uint32_t val)
{
}

static inline void trace_esp_pci_dma_idle(uint32_t val)
{
}

static inline void trace_esp_pci_dma_blast(uint32_t val)
{
}

static inline void trace_esp_pci_dma_abort(uint32_t val)
{
}

static inline void trace_esp_pci_dma_start(uint32_t val)
{
}

static inline void trace_esp_pci_sbac_read(uint32_t reg)
{
}

static inline void trace_esp_pci_sbac_write(uint32_t reg, uint32_t val)
{
}

static inline void trace_handle_qmp_command(void * mon, const char * cmd_name)
{
}

static inline void trace_monitor_protocol_emitter(void * mon)
{
}

static inline void trace_monitor_protocol_event(uint32_t event, const char * evname, void * data)
{
}

static inline void trace_monitor_protocol_event_handler(uint32_t event, void * data, uint64_t last, uint64_t now)
{
}

static inline void trace_monitor_protocol_event_emit(uint32_t event, void * data)
{
}

static inline void trace_monitor_protocol_event_queue(uint32_t event, void * data, uint64_t rate, uint64_t last, uint64_t now)
{
}

static inline void trace_monitor_protocol_event_throttle(uint32_t event, uint64_t rate)
{
}

static inline void trace_open_eth_mii_write(unsigned idx, uint16_t v)
{
}

static inline void trace_open_eth_mii_read(unsigned idx, uint16_t v)
{
}

static inline void trace_open_eth_update_irq(uint32_t v)
{
}

static inline void trace_open_eth_receive(unsigned len)
{
}

static inline void trace_open_eth_receive_mcast(unsigned idx, uint32_t h0, uint32_t h1)
{
}

static inline void trace_open_eth_receive_reject(void)
{
}

static inline void trace_open_eth_receive_desc(uint32_t addr, uint32_t len_flags)
{
}

static inline void trace_open_eth_start_xmit(uint32_t addr, unsigned len, unsigned tx_len)
{
}

static inline void trace_open_eth_reg_read(uint32_t addr, uint32_t v)
{
}

static inline void trace_open_eth_reg_write(uint32_t addr, uint32_t v)
{
}

static inline void trace_open_eth_desc_read(uint32_t addr, uint32_t v)
{
}

static inline void trace_open_eth_desc_write(uint32_t addr, uint32_t v)
{
}

static inline void trace_v9fs_rerror(uint16_t tag, uint8_t id, int err)
{
}

static inline void trace_v9fs_version(uint16_t tag, uint8_t id, int32_t msize, char* version)
{
}

static inline void trace_v9fs_version_return(uint16_t tag, uint8_t id, int32_t msize, char* version)
{
}

static inline void trace_v9fs_attach(uint16_t tag, uint8_t id, int32_t fid, int32_t afid, char* uname, char* aname)
{
}

static inline void trace_v9fs_attach_return(uint16_t tag, uint8_t id, int8_t type, int32_t version, int64_t path)
{
}

static inline void trace_v9fs_stat(uint16_t tag, uint8_t id, int32_t fid)
{
}

static inline void trace_v9fs_stat_return(uint16_t tag, uint8_t id, int32_t mode, int32_t atime, int32_t mtime, int64_t length)
{
}

static inline void trace_v9fs_getattr(uint16_t tag, uint8_t id, int32_t fid, uint64_t request_mask)
{
}

static inline void trace_v9fs_getattr_return(uint16_t tag, uint8_t id, uint64_t result_mask, uint32_t mode, uint32_t uid, uint32_t gid)
{
}

static inline void trace_v9fs_walk(uint16_t tag, uint8_t id, int32_t fid, int32_t newfid, uint16_t nwnames)
{
}

static inline void trace_v9fs_walk_return(uint16_t tag, uint8_t id, uint16_t nwnames, void* qids)
{
}

static inline void trace_v9fs_open(uint16_t tag, uint8_t id, int32_t fid, int32_t mode)
{
}

static inline void trace_v9fs_open_return(uint16_t tag, uint8_t id, int8_t type, int32_t version, int64_t path, int iounit)
{
}

static inline void trace_v9fs_lcreate(uint16_t tag, uint8_t id, int32_t dfid, int32_t flags, int32_t mode, uint32_t gid)
{
}

static inline void trace_v9fs_lcreate_return(uint16_t tag, uint8_t id, int8_t type, int32_t version, int64_t path, int32_t iounit)
{
}

static inline void trace_v9fs_fsync(uint16_t tag, uint8_t id, int32_t fid, int datasync)
{
}

static inline void trace_v9fs_clunk(uint16_t tag, uint8_t id, int32_t fid)
{
}

static inline void trace_v9fs_read(uint16_t tag, uint8_t id, int32_t fid, uint64_t off, uint32_t max_count)
{
}

static inline void trace_v9fs_read_return(uint16_t tag, uint8_t id, int32_t count, ssize_t err)
{
}

static inline void trace_v9fs_readdir(uint16_t tag, uint8_t id, int32_t fid, uint64_t offset, uint32_t max_count)
{
}

static inline void trace_v9fs_readdir_return(uint16_t tag, uint8_t id, uint32_t count, ssize_t retval)
{
}

static inline void trace_v9fs_write(uint16_t tag, uint8_t id, int32_t fid, uint64_t off, uint32_t count, int cnt)
{
}

static inline void trace_v9fs_write_return(uint16_t tag, uint8_t id, int32_t total, ssize_t err)
{
}

static inline void trace_v9fs_create(uint16_t tag, uint8_t id, int32_t fid, char* name, int32_t perm, int8_t mode)
{
}

static inline void trace_v9fs_create_return(uint16_t tag, uint8_t id, int8_t type, int32_t version, int64_t path, int iounit)
{
}

static inline void trace_v9fs_symlink(uint16_t tag, uint8_t id, int32_t fid, char* name, char* symname, uint32_t gid)
{
}

static inline void trace_v9fs_symlink_return(uint16_t tag, uint8_t id, int8_t type, int32_t version, int64_t path)
{
}

static inline void trace_v9fs_flush(uint16_t tag, uint8_t id, int16_t flush_tag)
{
}

static inline void trace_v9fs_link(uint16_t tag, uint8_t id, int32_t dfid, int32_t oldfid, char* name)
{
}

static inline void trace_v9fs_remove(uint16_t tag, uint8_t id, int32_t fid)
{
}

static inline void trace_v9fs_wstat(uint16_t tag, uint8_t id, int32_t fid, int32_t mode, int32_t atime, int32_t mtime)
{
}

static inline void trace_v9fs_mknod(uint16_t tag, uint8_t id, int32_t fid, int mode, int major, int minor)
{
}

static inline void trace_v9fs_mknod_return(uint16_t tag, uint8_t id, int8_t type, int32_t version, int64_t path)
{
}

static inline void trace_v9fs_lock(uint16_t tag, uint8_t id, int32_t fid, uint8_t type, uint64_t start, uint64_t length)
{
}

static inline void trace_v9fs_lock_return(uint16_t tag, uint8_t id, int8_t status)
{
}

static inline void trace_v9fs_getlock(uint16_t tag, uint8_t id, int32_t fid, uint8_t type, uint64_t start, uint64_t length)
{
}

static inline void trace_v9fs_getlock_return(uint16_t tag, uint8_t id, uint8_t type, uint64_t start, uint64_t length, uint32_t proc_id)
{
}

static inline void trace_v9fs_mkdir(uint16_t tag, uint8_t id, int32_t fid, char* name, int mode, uint32_t gid)
{
}

static inline void trace_v9fs_mkdir_return(uint16_t tag, uint8_t id, int8_t type, int32_t version, int64_t path, int err)
{
}

static inline void trace_v9fs_xattrwalk(uint16_t tag, uint8_t id, int32_t fid, int32_t newfid, char* name)
{
}

static inline void trace_v9fs_xattrwalk_return(uint16_t tag, uint8_t id, int64_t size)
{
}

static inline void trace_v9fs_xattrcreate(uint16_t tag, uint8_t id, int32_t fid, char* name, int64_t size, int flags)
{
}

static inline void trace_v9fs_readlink(uint16_t tag, uint8_t id, int32_t fid)
{
}

static inline void trace_v9fs_readlink_return(uint16_t tag, uint8_t id, char* target)
{
}

static inline void trace_mmu_helper_dfault(uint64_t address, uint64_t context, int mmu_idx, uint32_t tl)
{
}

static inline void trace_mmu_helper_dprot(uint64_t address, uint64_t context, int mmu_idx, uint32_t tl)
{
}

static inline void trace_mmu_helper_dmiss(uint64_t address, uint64_t context)
{
}

static inline void trace_mmu_helper_tfault(uint64_t address, uint64_t context)
{
}

static inline void trace_mmu_helper_tmiss(uint64_t address, uint64_t context)
{
}

static inline void trace_mmu_helper_get_phys_addr_code(uint32_t tl, int mmu_idx, uint64_t prim_context, uint64_t sec_context, uint64_t address)
{
}

static inline void trace_mmu_helper_get_phys_addr_data(uint32_t tl, int mmu_idx, uint64_t prim_context, uint64_t sec_context, uint64_t address)
{
}

static inline void trace_mmu_helper_mmu_fault(uint64_t address, uint64_t paddr, int mmu_idx, uint32_t tl, uint64_t prim_context, uint64_t sec_context)
{
}

static inline void trace_int_helper_set_softint(uint32_t softint)
{
}

static inline void trace_int_helper_clear_softint(uint32_t softint)
{
}

static inline void trace_int_helper_write_softint(uint32_t softint)
{
}

static inline void trace_int_helper_icache_freeze(void)
{
}

static inline void trace_int_helper_dcache_freeze(void)
{
}

static inline void trace_win_helper_gregset_error(uint32_t pstate)
{
}

static inline void trace_win_helper_switch_pstate(uint32_t pstate_regs, uint32_t new_pstate_regs)
{
}

static inline void trace_win_helper_no_switch_pstate(uint32_t new_pstate_regs)
{
}

static inline void trace_win_helper_wrpil(uint32_t psrpil, uint32_t new_pil)
{
}

static inline void trace_win_helper_done(uint32_t tl)
{
}

static inline void trace_win_helper_retry(uint32_t tl)
{
}

static inline void trace_dma_bdrv_io(void * dbs, void * bs, int64_t sector_num, bool to_dev)
{
}

static inline void trace_dma_aio_cancel(void * dbs)
{
}

static inline void trace_dma_complete(void * dbs, int ret, void * cb)
{
}

static inline void trace_dma_bdrv_cb(void * dbs, int ret)
{
}

static inline void trace_dma_map_wait(void * dbs)
{
}

static inline void trace_console_gfx_new(void)
{
}

static inline void trace_console_putchar_csi(int esc_param0, int esc_param1, int ch, int nb_esc_params)
{
}

static inline void trace_console_putchar_unhandled(int ch)
{
}

static inline void trace_console_txt_new(int w, int h)
{
}

static inline void trace_console_select(int nr)
{
}

static inline void trace_console_refresh(int interval)
{
}

static inline void trace_displaysurface_create(void * display_surface, int w, int h)
{
}

static inline void trace_displaysurface_create_from(void * display_surface, int w, int h, int bpp, int swap)
{
}

static inline void trace_displaysurface_free(void * display_surface)
{
}

static inline void trace_displaychangelistener_register(void * dcl, const char * name)
{
}

static inline void trace_displaychangelistener_unregister(void * dcl, const char * name)
{
}

static inline void trace_ppm_save(const char * filename, void * display_surface)
{
}

static inline void trace_gd_switch(int width, int height)
{
}

static inline void trace_gd_update(int x, int y, int w, int h)
{
}

static inline void trace_gd_key_event(int gdk_keycode, int qemu_keycode, const char * action)
{
}

static inline void trace_input_event_key_number(int conidx, int number, bool down)
{
}

static inline void trace_input_event_key_qcode(int conidx, const char * qcode, bool down)
{
}

static inline void trace_input_event_btn(int conidx, const char * btn, bool down)
{
}

static inline void trace_input_event_rel(int conidx, const char * axis, int value)
{
}

static inline void trace_input_event_abs(int conidx, const char * axis, int value)
{
}

static inline void trace_input_event_sync(void)
{
}

static inline void trace_input_mouse_mode(int absolute)
{
}

static inline void trace_vmware_value_read(uint32_t index, uint32_t value)
{
}

static inline void trace_vmware_value_write(uint32_t index, uint32_t value)
{
}

static inline void trace_vmware_palette_read(uint32_t index, uint32_t value)
{
}

static inline void trace_vmware_palette_write(uint32_t index, uint32_t value)
{
}

static inline void trace_vmware_scratch_read(uint32_t index, uint32_t value)
{
}

static inline void trace_vmware_scratch_write(uint32_t index, uint32_t value)
{
}

static inline void trace_vmware_setmode(uint32_t w, uint32_t h, uint32_t bpp)
{
}

static inline void trace_savevm_section_start(const char * id, unsigned int section_id)
{
}

static inline void trace_savevm_section_end(const char * id, unsigned int section_id)
{
}

static inline void trace_savevm_state_begin(void)
{
}

static inline void trace_savevm_state_iterate(void)
{
}

static inline void trace_savevm_state_complete(void)
{
}

static inline void trace_savevm_state_cancel(void)
{
}

static inline void trace_vmstate_save(const char * idstr, const char * vmsd_name)
{
}

static inline void trace_vmstate_load(const char * idstr, const char * vmsd_name)
{
}

static inline void trace_vmstate_load_field_error(const char * field, int ret)
{
}

static inline void trace_qemu_announce_self_iter(const char * mac)
{
}

static inline void trace_qemu_file_fclose(void)
{
}

static inline void trace_migration_bitmap_sync_start(void)
{
}

static inline void trace_migration_bitmap_sync_end(uint64_t dirty_pages)
{
}

static inline void trace_migration_throttle(void)
{
}

static inline void trace_qxl_create_guest_primary(int qid, uint32_t width, uint32_t height, uint64_t mem, uint32_t format, uint32_t position)
{
}

static inline void trace_qxl_create_guest_primary_rest(int qid, int32_t stride, uint32_t type, uint32_t flags)
{
}

static inline void trace_qxl_destroy_primary(int qid)
{
}

static inline void trace_qxl_enter_vga_mode(int qid)
{
}

static inline void trace_qxl_exit_vga_mode(int qid)
{
}

static inline void trace_qxl_hard_reset(int qid, int64_t loadvm)
{
}

static inline void trace_qxl_interface_async_complete_io(int qid, uint32_t current_async, void * cookie)
{
}

static inline void trace_qxl_interface_attach_worker(int qid)
{
}

static inline void trace_qxl_interface_get_init_info(int qid)
{
}

static inline void trace_qxl_interface_set_compression_level(int qid, int64_t level)
{
}

static inline void trace_qxl_interface_update_area_complete(int qid, uint32_t surface_id, uint32_t dirty_left, uint32_t dirty_right, uint32_t dirty_top, uint32_t dirty_bottom)
{
}

static inline void trace_qxl_interface_update_area_complete_rest(int qid, uint32_t num_updated_rects)
{
}

static inline void trace_qxl_interface_update_area_complete_overflow(int qid, int max)
{
}

static inline void trace_qxl_interface_update_area_complete_schedule_bh(int qid, uint32_t num_dirty)
{
}

static inline void trace_qxl_io_destroy_primary_ignored(int qid, const char * mode)
{
}

static inline void trace_qxl_io_log(int qid, const uint8_t * log_buf)
{
}

static inline void trace_qxl_io_read_unexpected(int qid)
{
}

static inline void trace_qxl_io_unexpected_vga_mode(int qid, uint64_t addr, uint64_t val, const char * desc)
{
}

static inline void trace_qxl_io_write(int qid, const char * mode, uint64_t addr, const char * aname, uint64_t val, unsigned size, int async)
{
}

static inline void trace_qxl_memslot_add_guest(int qid, uint32_t slot_id, uint64_t guest_start, uint64_t guest_end)
{
}

static inline void trace_qxl_post_load(int qid, const char * mode)
{
}

static inline void trace_qxl_pre_load(int qid)
{
}

static inline void trace_qxl_pre_save(int qid)
{
}

static inline void trace_qxl_reset_surfaces(int qid)
{
}

static inline void trace_qxl_ring_command_check(int qid, const char * mode)
{
}

static inline void trace_qxl_ring_command_get(int qid, const char * mode)
{
}

static inline void trace_qxl_ring_command_req_notification(int qid)
{
}

static inline void trace_qxl_ring_cursor_check(int qid, const char * mode)
{
}

static inline void trace_qxl_ring_cursor_get(int qid, const char * mode)
{
}

static inline void trace_qxl_ring_cursor_req_notification(int qid)
{
}

static inline void trace_qxl_ring_res_push(int qid, const char * mode, uint32_t surface_count, uint32_t free_res, void * last_release, const char * notify)
{
}

static inline void trace_qxl_ring_res_push_rest(int qid, uint32_t ring_has, uint32_t ring_size, uint32_t prod, uint32_t cons)
{
}

static inline void trace_qxl_ring_res_put(int qid, uint32_t free_res)
{
}

static inline void trace_qxl_set_mode(int qid, int modenr, uint32_t x_res, uint32_t y_res, uint32_t bits, uint64_t devmem)
{
}

static inline void trace_qxl_soft_reset(int qid)
{
}

static inline void trace_qxl_spice_destroy_surfaces_complete(int qid)
{
}

static inline void trace_qxl_spice_destroy_surfaces(int qid, int async)
{
}

static inline void trace_qxl_spice_destroy_surface_wait_complete(int qid, uint32_t id)
{
}

static inline void trace_qxl_spice_destroy_surface_wait(int qid, uint32_t id, int async)
{
}

static inline void trace_qxl_spice_flush_surfaces_async(int qid, uint32_t surface_count, uint32_t num_free_res)
{
}

static inline void trace_qxl_spice_monitors_config(int qid)
{
}

static inline void trace_qxl_spice_loadvm_commands(int qid, void * ext, uint32_t count)
{
}

static inline void trace_qxl_spice_oom(int qid)
{
}

static inline void trace_qxl_spice_reset_cursor(int qid)
{
}

static inline void trace_qxl_spice_reset_image_cache(int qid)
{
}

static inline void trace_qxl_spice_reset_memslots(int qid)
{
}

static inline void trace_qxl_spice_update_area(int qid, uint32_t surface_id, uint32_t left, uint32_t right, uint32_t top, uint32_t bottom)
{
}

static inline void trace_qxl_spice_update_area_rest(int qid, uint32_t num_dirty_rects, uint32_t clear_dirty_region)
{
}

static inline void trace_qxl_surfaces_dirty(int qid, int surface, int offset, int size)
{
}

static inline void trace_qxl_send_events(int qid, uint32_t events)
{
}

static inline void trace_qxl_send_events_vm_stopped(int qid, uint32_t events)
{
}

static inline void trace_qxl_set_guest_bug(int qid)
{
}

static inline void trace_qxl_interrupt_client_monitors_config(int qid, int num_heads, void * heads)
{
}

static inline void trace_qxl_client_monitors_config_unsupported_by_guest(int qid, uint32_t int_mask, void * client_monitors_config)
{
}

static inline void trace_qxl_client_monitors_config_unsupported_by_device(int qid, int revision)
{
}

static inline void trace_qxl_client_monitors_config_capped(int qid, int requested, int limit)
{
}

static inline void trace_qxl_client_monitors_config_crc(int qid, unsigned size, uint32_t crc32)
{
}

static inline void trace_qxl_set_client_capabilities_unsupported_by_revision(int qid, int revision)
{
}

static inline void trace_qemu_spice_add_memslot(int qid, uint32_t slot_id, unsigned long virt_start, unsigned long virt_end, int async)
{
}

static inline void trace_qemu_spice_del_memslot(int qid, uint32_t gid, uint32_t slot_id)
{
}

static inline void trace_qemu_spice_create_primary_surface(int qid, uint32_t sid, void * surface, int async)
{
}

static inline void trace_qemu_spice_destroy_primary_surface(int qid, uint32_t sid, int async)
{
}

static inline void trace_qemu_spice_wakeup(uint32_t qid)
{
}

static inline void trace_qemu_spice_create_update(uint32_t left, uint32_t right, uint32_t top, uint32_t bottom)
{
}

static inline void trace_qxl_render_blit(int32_t stride, int32_t left, int32_t right, int32_t top, int32_t bottom)
{
}

static inline void trace_qxl_render_guest_primary_resized(int32_t width, int32_t height, int32_t stride, int32_t bytes_pp, int32_t bits_pp)
{
}

static inline void trace_qxl_render_update_area_done(void * cookie)
{
}

static inline void trace_spapr_pci_msi(const char * msg, uint32_t n, uint32_t ca)
{
}

static inline void trace_spapr_pci_msi_setup(const char * name, unsigned vector, uint64_t addr)
{
}

static inline void trace_spapr_pci_rtas_ibm_change_msi(unsigned func, unsigned req)
{
}

static inline void trace_spapr_pci_rtas_ibm_query_interrupt_source_number(unsigned ioa, unsigned intr)
{
}

static inline void trace_spapr_pci_msi_write(uint64_t addr, uint64_t data, uint32_t dt_irq)
{
}

static inline void trace_spapr_pci_lsi_set(const char * busname, int pin, uint32_t irq)
{
}

static inline void trace_xics_icp_check_ipi(int server, uint8_t mfrr)
{
}

static inline void trace_xics_icp_accept(uint32_t old_xirr, uint32_t new_xirr)
{
}

static inline void trace_xics_icp_eoi(int server, uint32_t xirr, uint32_t new_xirr)
{
}

static inline void trace_xics_icp_irq(int server, int nr, uint8_t priority)
{
}

static inline void trace_xics_icp_raise(uint32_t xirr, uint8_t pending_priority)
{
}

static inline void trace_xics_set_irq_msi(int srcno, int nr)
{
}

static inline void trace_xics_masked_pending(void)
{
}

static inline void trace_xics_set_irq_lsi(int srcno, int nr)
{
}

static inline void trace_xics_ics_write_xive(int nr, int srcno, int server, uint8_t priority)
{
}

static inline void trace_xics_ics_reject(int nr, int srcno)
{
}

static inline void trace_xics_ics_eoi(int nr)
{
}

static inline void trace_spapr_iommu_put(uint64_t liobn, uint64_t ioba, uint64_t tce, uint64_t ret)
{
}

static inline void trace_spapr_iommu_get(uint64_t liobn, uint64_t ioba, uint64_t ret, uint64_t tce)
{
}

static inline void trace_spapr_iommu_xlate(uint64_t liobn, uint64_t ioba, uint64_t tce, unsigned perm, unsigned pgsize)
{
}

static inline void trace_spapr_iommu_new_table(uint64_t liobn, void * tcet, void * table, int fd)
{
}

static inline void trace_hbitmap_iter_skip_words(const void * hb, void * hbi, uint64_t pos, unsigned long cur)
{
}

static inline void trace_hbitmap_reset(void * hb, uint64_t start, uint64_t count, uint64_t sbit, uint64_t ebit)
{
}

static inline void trace_hbitmap_set(void * hb, uint64_t start, uint64_t count, uint64_t sbit, uint64_t ebit)
{
}

static inline void trace_ioinst(const char * insn)
{
}

static inline void trace_ioinst_sch_id(const char * insn, int cssid, int ssid, int schid)
{
}

static inline void trace_ioinst_chp_id(const char * insn, int cssid, int chpid)
{
}

static inline void trace_ioinst_chsc_cmd(uint16_t cmd, uint16_t len)
{
}

static inline void trace_css_enable_facility(const char * facility)
{
}

static inline void trace_css_crw(uint8_t rsc, uint8_t erc, uint16_t rsid, const char * chained)
{
}

static inline void trace_css_chpid_add(uint8_t cssid, uint8_t chpid, uint8_t type)
{
}

static inline void trace_css_new_image(uint8_t cssid, const char * default_cssid)
{
}

static inline void trace_css_assign_subch(const char * do_assign, uint8_t cssid, uint8_t ssid, uint16_t schid, uint16_t devno)
{
}

static inline void trace_css_io_interrupt(int cssid, int ssid, int schid, uint32_t intparm, uint8_t isc, const char * conditional)
{
}

static inline void trace_css_adapter_interrupt(uint8_t isc)
{
}

static inline void trace_virtio_ccw_interpret_ccw(int cssid, int ssid, int schid, int cmd_code)
{
}

static inline void trace_virtio_ccw_new_device(int cssid, int ssid, int schid, int devno, const char * devno_mode)
{
}

static inline void trace_flic_create_device(int err)
{
}

static inline void trace_flic_no_device_api(int err)
{
}

static inline void trace_flic_reset_failed(int err)
{
}

static inline void trace_migrate_set_state(int new_state)
{
}

static inline void trace_migrate_fd_cleanup(void)
{
}

static inline void trace_migrate_fd_error(void)
{
}

static inline void trace_migrate_fd_cancel(void)
{
}

static inline void trace_migrate_pending(uint64_t size, uint64_t max)
{
}

static inline void trace_migrate_transferred(uint64_t tranferred, uint64_t time_spent, double bandwidth, uint64_t size)
{
}

static inline void trace_kvm_ioctl(int type, void * arg)
{
}

static inline void trace_kvm_vm_ioctl(int type, void * arg)
{
}

static inline void trace_kvm_vcpu_ioctl(int cpu_index, int type, void * arg)
{
}

static inline void trace_kvm_run_exit(int cpu_index, uint32_t reason)
{
}

static inline void trace_kvm_device_ioctl(int fd, int type, void * arg)
{
}

static inline void trace_kvm_failed_spr_set(int str, const char * msg)
{
}

static inline void trace_kvm_failed_spr_get(int str, const char * msg)
{
}

static inline void trace_memory_region_ops_read(void * mr, uint64_t addr, uint64_t value, unsigned size)
{
}

static inline void trace_memory_region_ops_write(void * mr, uint64_t addr, uint64_t value, unsigned size)
{
}

static inline void trace_object_dynamic_cast_assert(const char * type, const char * target, const char * file, int line, const char * func)
{
}

static inline void trace_object_class_dynamic_cast_assert(const char * type, const char * target, const char * file, int line, const char * func)
{
}

static inline void trace_xen_pv_mmio_read(uint64_t addr)
{
}

static inline void trace_xen_pv_mmio_write(uint64_t addr)
{
}

static inline void trace_pci_cfg_read(const char * dev, unsigned devid, unsigned fnid, unsigned offs, unsigned val)
{
}

static inline void trace_pci_cfg_write(const char * dev, unsigned devid, unsigned fnid, unsigned offs, unsigned val)
{
}
#endif /* TRACE__GENERATED_TRACERS_H */
