/* * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. */ #ifndef __TEGRA_IVC_H #include #include #include struct tegra_ivc_header; struct tegra_ivc { struct device *peer; struct { struct tegra_ivc_header *channel; unsigned int position; dma_addr_t phys; } rx, tx; void (*notify)(struct tegra_ivc *ivc, void *data); void *notify_data; unsigned int num_frames; size_t frame_size; }; /** * tegra_ivc_read_get_next_frame - Peek at the next frame to receive * @ivc pointer of the IVC channel * * Peek at the next frame to be received, without removing it from * the queue. * * Returns a pointer to the frame, or an error encoded pointer. */ void *tegra_ivc_read_get_next_frame(struct tegra_ivc *ivc); /** * tegra_ivc_read_advance - Advance the read queue * @ivc pointer of the IVC channel * * Advance the read queue * * Returns 0, or a negative error value if failed. */ int tegra_ivc_read_advance(struct tegra_ivc *ivc); /** * tegra_ivc_write_get_next_frame - Poke at the next frame to transmit * @ivc pointer of the IVC channel * * Get access to the next frame. * * Returns a pointer to the frame, or an error encoded pointer. */ void *tegra_ivc_write_get_next_frame(struct tegra_ivc *ivc); /** * tegra_ivc_write_advance - Advance the write queue * @ivc pointer of the IVC channel * * Advance the write queue * * Returns 0, or a negative error value if failed. */ int tegra_ivc_write_advance(struct tegra_ivc *ivc); /** * tegra_ivc_notified - handle internal messages * @ivc pointer of the IVC channel * * This function must be called following every notification. * * Returns 0 if the channel is ready for communication, or -EAGAIN if a channel * reset is in progress. */ int tegra_ivc_notified(struct tegra_ivc *ivc); /** * tegra_ivc_reset - initiates a reset of the shared memory state * @ivc pointer of the IVC channel * * This function must be called after a channel is reserved before it is used * for communication. The channel will be ready for use when a subsequent call * to notify the remote of the channel reset. */ void tegra_ivc_reset(struct tegra_ivc *ivc); size_t tegra_ivc_align(size_t size); unsigned tegra_ivc_total_queue_size(unsigned queue_size); int tegra_ivc_init(struct tegra_ivc *ivc, struct device *peer, void *rx, dma_addr_t rx_phys, void *tx, dma_addr_t tx_phys, unsigned int num_frames, size_t frame_size, void (*notify)(struct tegra_ivc *ivc, void *data), void *data); void tegra_ivc_cleanup(struct tegra_ivc *ivc); #endif /* __TEGRA_IVC_H */ ' name='id' value='095cbe66973771fecd8e8b1e8763181363ef703e'/>
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-01-22 12:47:48 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2017-01-22 12:47:48 -0800
commit095cbe66973771fecd8e8b1e8763181363ef703e (patch)
treec361a93d62ed171ac958deb0d4ff0faa980bb290 /include/uapi
parent24b86839fab8e8059d2b16e0067dc86a1a0d3514 (diff)
parent020eb3daaba2857b32c4cf4c82f503d6a00a67de (diff)
Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 fix from Thomas Gleixner: "Restore the retrigger callbacks in the IO APIC irq chips. That addresses a long standing regression which got introduced with the rewrite of the x86 irq subsystem two years ago and went unnoticed so far" * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/ioapic: Restore IO-APIC irq_chip retrigger callback
Diffstat (limited to 'include/uapi')