1/* 2 * Copyright 2010 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 * This header defines a wrapper interface for managing hypervisor 15 * device calls that will result in an interrupt at some later time. 16 * In particular, this provides wrappers for hv_preada() and 17 * hv_pwritea(). 18 */ 19 20#ifndef _ASM_TILE_HV_DRIVER_H 21#define _ASM_TILE_HV_DRIVER_H 22 23#include <hv/hypervisor.h> 24 25struct hv_driver_cb; 26 27/* A callback to be invoked when an operation completes. */ 28typedef void hv_driver_callback_t(struct hv_driver_cb *cb, __hv32 result); 29 30/* 31 * A structure to hold information about an outstanding call. 32 * The driver must allocate a separate structure for each call. 33 */ 34struct hv_driver_cb { 35 hv_driver_callback_t *callback; /* Function to call on interrupt. */ 36 void *dev; /* Driver-specific state variable. */ 37}; 38 39/* Wrapper for invoking hv_dev_preada(). */ 40static inline int 41tile_hv_dev_preada(int devhdl, __hv32 flags, __hv32 sgl_len, 42 HV_SGL sgl[/* sgl_len */], __hv64 offset, 43 struct hv_driver_cb *callback) 44{ 45 return hv_dev_preada(devhdl, flags, sgl_len, sgl, 46 offset, (HV_IntArg)callback); 47} 48 49/* Wrapper for invoking hv_dev_pwritea(). */ 50static inline int 51tile_hv_dev_pwritea(int devhdl, __hv32 flags, __hv32 sgl_len, 52 HV_SGL sgl[/* sgl_len */], __hv64 offset, 53 struct hv_driver_cb *callback) 54{ 55 return hv_dev_pwritea(devhdl, flags, sgl_len, sgl, 56 offset, (HV_IntArg)callback); 57} 58 59 60#endif /* _ASM_TILE_HV_DRIVER_H */ 61