1/*- 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright (c) 2020-2021 The FreeBSD Foundation 5 * Copyright (c) 2022 Bjoern A. Zeeb 6 * 7 * This software was developed by Bj��rn Zeeb under sponsorship from 8 * the FreeBSD Foundation. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 */ 31 32#ifndef _LINUXKPI_LINUX_FIRMWARE_H 33#define _LINUXKPI_LINUX_FIRMWARE_H 34 35#include <sys/types.h> 36#include <linux/types.h> 37#include <linux/device.h> 38 39struct firmware; 40 41struct linuxkpi_firmware { 42 size_t size; 43 const uint8_t *data; 44 /* XXX Does Linux expose anything else? */ 45 46 /* This is LinuxKPI implementation private. */ 47 const struct firmware *fbdfw; 48}; 49 50int linuxkpi_request_firmware_nowait(struct module *, bool, const char *, 51 struct device *, gfp_t, void *, 52 void(*cont)(const struct linuxkpi_firmware *, void *)); 53int linuxkpi_request_firmware(const struct linuxkpi_firmware **, 54 const char *, struct device *); 55int linuxkpi_firmware_request_nowarn(const struct linuxkpi_firmware **, 56 const char *, struct device *); 57void linuxkpi_release_firmware(const struct linuxkpi_firmware *); 58int linuxkpi_request_partial_firmware_into_buf(const struct linuxkpi_firmware **, 59 const char *, struct device *, uint8_t *, size_t, size_t); 60 61 62static __inline int 63request_firmware_nowait(struct module *mod, bool _t, 64 const char *fw_name, struct device *dev, gfp_t gfp, void *drv, 65 void(*cont)(const struct linuxkpi_firmware *, void *)) 66{ 67 68 69 return (linuxkpi_request_firmware_nowait(mod, _t, fw_name, dev, gfp, 70 drv, cont)); 71} 72 73static __inline int 74request_firmware(const struct linuxkpi_firmware **fw, 75 const char *fw_name, struct device *dev) 76{ 77 78 return (linuxkpi_request_firmware(fw, fw_name, dev)); 79} 80 81static __inline int 82request_firmware_direct(const struct linuxkpi_firmware **fw, 83 const char *fw_name, struct device *dev) 84{ 85 86 return (linuxkpi_request_firmware(fw, fw_name, dev)); 87} 88 89static __inline int 90firmware_request_nowarn(const struct linuxkpi_firmware **fw, 91 const char *fw_name, struct device *dev) 92{ 93 94 return (linuxkpi_firmware_request_nowarn(fw, fw_name, dev)); 95} 96 97static __inline void 98release_firmware(const struct linuxkpi_firmware *fw) 99{ 100 101 linuxkpi_release_firmware(fw); 102} 103 104static inline int 105request_partial_firmware_into_buf(const struct linuxkpi_firmware **fw, 106 const char *fw_name, struct device *dev, void *buf, size_t buflen, 107 size_t offset) 108{ 109 110 return (linuxkpi_request_partial_firmware_into_buf(fw, fw_name, 111 dev, buf, buflen, offset)); 112} 113 114#define firmware linuxkpi_firmware 115 116#endif /* _LINUXKPI_LINUX_FIRMWARE_H */ 117