1#- 2# Copyright (c) 2015 Roger Pau Monné <royger@FreeBSD.org> 3# All rights reserved. 4# 5# Redistribution and use in source and binary forms, with or without 6# modification, are permitted provided that the following conditions 7# are met: 8# 1. Redistributions of source code must retain the above copyright 9# notice, this list of conditions and the following disclaimer. 10# 2. Redistributions in binary form must reproduce the above copyright 11# notice, this list of conditions and the following disclaimer in the 12# documentation and/or other materials provided with the distribution. 13# 14# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24# SUCH DAMAGE. 25# 26# 27 28#include <sys/bus.h> 29 30INTERFACE xenmem; 31 32# 33# Default implementations of some methods. 34# 35CODE { 36 static struct resource * 37 xenmem_generic_alloc(device_t dev, device_t child, int *res_id, 38 size_t size) 39 { 40 device_t parent; 41 42 parent = device_get_parent(dev); 43 if (parent == NULL) 44 return (NULL); 45 return (XENMEM_ALLOC(parent, child, res_id, size)); 46 } 47 48 static int 49 xenmem_generic_free(device_t dev, device_t child, int res_id, 50 struct resource *res) 51 { 52 device_t parent; 53 54 parent = device_get_parent(dev); 55 if (parent == NULL) 56 return (ENXIO); 57 return (XENMEM_FREE(parent, child, res_id, res)); 58 } 59}; 60 61/** 62 * @brief Request for unused physical memory regions. 63 * 64 * @param _dev the device whose child was being probed. 65 * @param _child the child device which failed to probe. 66 * @param _res_id a pointer to the resource identifier. 67 * @param _size size of the required memory region. 68 * 69 * @returns the resource which was allocated or @c NULL if no 70 * resource could be allocated. 71 */ 72METHOD struct resource * alloc { 73 device_t _dev; 74 device_t _child; 75 int *_res_id; 76 size_t _size; 77} DEFAULT xenmem_generic_alloc; 78 79/** 80 * @brief Free physical memory regions. 81 * 82 * @param _dev the device whose child was being probed. 83 * @param _child the child device which failed to probe. 84 * @param _res_id the resource identifier. 85 * @param _res the resource. 86 * 87 * @returns 0 on success, otherwise an error code. 88 */ 89METHOD int free { 90 device_t _dev; 91 device_t _child; 92 int _res_id; 93 struct resource *_res; 94} DEFAULT xenmem_generic_free; 95