10df8b29dSRoger Pau Monné#- 20df8b29dSRoger Pau Monné# Copyright (c) 2015 Roger Pau Monné <royger@FreeBSD.org> 30df8b29dSRoger Pau Monné# All rights reserved. 40df8b29dSRoger Pau Monné# 50df8b29dSRoger Pau Monné# Redistribution and use in source and binary forms, with or without 60df8b29dSRoger Pau Monné# modification, are permitted provided that the following conditions 70df8b29dSRoger Pau Monné# are met: 80df8b29dSRoger Pau Monné# 1. Redistributions of source code must retain the above copyright 90df8b29dSRoger Pau Monné# notice, this list of conditions and the following disclaimer. 100df8b29dSRoger Pau Monné# 2. Redistributions in binary form must reproduce the above copyright 110df8b29dSRoger Pau Monné# notice, this list of conditions and the following disclaimer in the 120df8b29dSRoger Pau Monné# documentation and/or other materials provided with the distribution. 130df8b29dSRoger Pau Monné# 140df8b29dSRoger Pau Monné# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 150df8b29dSRoger Pau Monné# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 160df8b29dSRoger Pau Monné# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 170df8b29dSRoger Pau Monné# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 180df8b29dSRoger Pau Monné# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 190df8b29dSRoger Pau Monné# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 200df8b29dSRoger Pau Monné# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 210df8b29dSRoger Pau Monné# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 220df8b29dSRoger Pau Monné# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 230df8b29dSRoger Pau Monné# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 240df8b29dSRoger Pau Monné# SUCH DAMAGE. 250df8b29dSRoger Pau Monné# 260df8b29dSRoger Pau Monné# 270df8b29dSRoger Pau Monné 280df8b29dSRoger Pau Monné#include <sys/bus.h> 290df8b29dSRoger Pau Monné 300df8b29dSRoger Pau MonnéINTERFACE xenmem; 310df8b29dSRoger Pau Monné 320df8b29dSRoger Pau Monné# 330df8b29dSRoger Pau Monné# Default implementations of some methods. 340df8b29dSRoger Pau Monné# 350df8b29dSRoger Pau MonnéCODE { 360df8b29dSRoger Pau Monné static struct resource * 370df8b29dSRoger Pau Monné xenmem_generic_alloc(device_t dev, device_t child, int *res_id, 380df8b29dSRoger Pau Monné size_t size) 390df8b29dSRoger Pau Monné { 400df8b29dSRoger Pau Monné device_t parent; 410df8b29dSRoger Pau Monné 420df8b29dSRoger Pau Monné parent = device_get_parent(dev); 430df8b29dSRoger Pau Monné if (parent == NULL) 440df8b29dSRoger Pau Monné return (NULL); 450df8b29dSRoger Pau Monné return (XENMEM_ALLOC(parent, child, res_id, size)); 460df8b29dSRoger Pau Monné } 470df8b29dSRoger Pau Monné 480df8b29dSRoger Pau Monné static int 490df8b29dSRoger Pau Monné xenmem_generic_free(device_t dev, device_t child, int res_id, 500df8b29dSRoger Pau Monné struct resource *res) 510df8b29dSRoger Pau Monné { 520df8b29dSRoger Pau Monné device_t parent; 530df8b29dSRoger Pau Monné 540df8b29dSRoger Pau Monné parent = device_get_parent(dev); 550df8b29dSRoger Pau Monné if (parent == NULL) 560df8b29dSRoger Pau Monné return (ENXIO); 570df8b29dSRoger Pau Monné return (XENMEM_FREE(parent, child, res_id, res)); 580df8b29dSRoger Pau Monné } 590df8b29dSRoger Pau Monné}; 600df8b29dSRoger Pau Monné 610df8b29dSRoger Pau Monné/** 620df8b29dSRoger Pau Monné * @brief Request for unused physical memory regions. 630df8b29dSRoger Pau Monné * 640df8b29dSRoger Pau Monné * @param _dev the device whose child was being probed. 650df8b29dSRoger Pau Monné * @param _child the child device which failed to probe. 660df8b29dSRoger Pau Monné * @param _res_id a pointer to the resource identifier. 670df8b29dSRoger Pau Monné * @param _size size of the required memory region. 680df8b29dSRoger Pau Monné * 690df8b29dSRoger Pau Monné * @returns the resource which was allocated or @c NULL if no 700df8b29dSRoger Pau Monné * resource could be allocated. 710df8b29dSRoger Pau Monné */ 720df8b29dSRoger Pau MonnéMETHOD struct resource * alloc { 730df8b29dSRoger Pau Monné device_t _dev; 740df8b29dSRoger Pau Monné device_t _child; 750df8b29dSRoger Pau Monné int *_res_id; 760df8b29dSRoger Pau Monné size_t _size; 770df8b29dSRoger Pau Monné} DEFAULT xenmem_generic_alloc; 780df8b29dSRoger Pau Monné 790df8b29dSRoger Pau Monné/** 800df8b29dSRoger Pau Monné * @brief Free physical memory regions. 810df8b29dSRoger Pau Monné * 820df8b29dSRoger Pau Monné * @param _dev the device whose child was being probed. 830df8b29dSRoger Pau Monné * @param _child the child device which failed to probe. 840df8b29dSRoger Pau Monné * @param _res_id the resource identifier. 850df8b29dSRoger Pau Monné * @param _res the resource. 860df8b29dSRoger Pau Monné * 870df8b29dSRoger Pau Monné * @returns 0 on success, otherwise an error code. 880df8b29dSRoger Pau Monné */ 890df8b29dSRoger Pau MonnéMETHOD int free { 900df8b29dSRoger Pau Monné device_t _dev; 910df8b29dSRoger Pau Monné device_t _child; 920df8b29dSRoger Pau Monné int _res_id; 930df8b29dSRoger Pau Monné struct resource *_res; 940df8b29dSRoger Pau Monné} DEFAULT xenmem_generic_free; 95