1*e8643b01SKonstantin Belousov /*- 2*e8643b01SKonstantin Belousov * Copyright (c) 2010-2012 Aleksandr Rybalko 3*e8643b01SKonstantin Belousov * Copyright (c) 2019 Mellanox Technologies 4*e8643b01SKonstantin Belousov * All rights reserved. 5*e8643b01SKonstantin Belousov * 6*e8643b01SKonstantin Belousov * Redistribution and use in source and binary forms, with or without 7*e8643b01SKonstantin Belousov * modification, are permitted provided that the following conditions 8*e8643b01SKonstantin Belousov * are met: 9*e8643b01SKonstantin Belousov * 1. Redistributions of source code must retain the above copyright 10*e8643b01SKonstantin Belousov * notice, this list of conditions and the following disclaimer. 11*e8643b01SKonstantin Belousov * 2. Redistributions in binary form must reproduce the above copyright 12*e8643b01SKonstantin Belousov * notice, this list of conditions and the following disclaimer in the 13*e8643b01SKonstantin Belousov * documentation and/or other materials provided with the distribution. 14*e8643b01SKonstantin Belousov * 15*e8643b01SKonstantin Belousov * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16*e8643b01SKonstantin Belousov * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17*e8643b01SKonstantin Belousov * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18*e8643b01SKonstantin Belousov * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19*e8643b01SKonstantin Belousov * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20*e8643b01SKonstantin Belousov * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21*e8643b01SKonstantin Belousov * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22*e8643b01SKonstantin Belousov * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23*e8643b01SKonstantin Belousov * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24*e8643b01SKonstantin Belousov * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25*e8643b01SKonstantin Belousov * SUCH DAMAGE. 26*e8643b01SKonstantin Belousov */ 27*e8643b01SKonstantin Belousov 28*e8643b01SKonstantin Belousov #include <sys/cdefs.h> 29*e8643b01SKonstantin Belousov __FBSDID("$FreeBSD$"); 30*e8643b01SKonstantin Belousov 31*e8643b01SKonstantin Belousov #include <sys/malloc.h> 32*e8643b01SKonstantin Belousov #include <sys/kernel.h> 33*e8643b01SKonstantin Belousov #include <sys/module.h> 34*e8643b01SKonstantin Belousov #include "xz.h" 35*e8643b01SKonstantin Belousov #include "xz_malloc.h" 36*e8643b01SKonstantin Belousov 37*e8643b01SKonstantin Belousov /* Wraper for XZ decompressor memory pool */ 38*e8643b01SKonstantin Belousov 39*e8643b01SKonstantin Belousov static MALLOC_DEFINE(XZ_DEC, "XZ_DEC", "XZ decompressor data"); 40*e8643b01SKonstantin Belousov 41*e8643b01SKonstantin Belousov void * 42*e8643b01SKonstantin Belousov xz_malloc(unsigned long size) 43*e8643b01SKonstantin Belousov { 44*e8643b01SKonstantin Belousov void *addr; 45*e8643b01SKonstantin Belousov 46*e8643b01SKonstantin Belousov addr = malloc(size, XZ_DEC, M_NOWAIT); 47*e8643b01SKonstantin Belousov return (addr); 48*e8643b01SKonstantin Belousov } 49*e8643b01SKonstantin Belousov 50*e8643b01SKonstantin Belousov void 51*e8643b01SKonstantin Belousov xz_free(void *addr) 52*e8643b01SKonstantin Belousov { 53*e8643b01SKonstantin Belousov 54*e8643b01SKonstantin Belousov free(addr, XZ_DEC); 55*e8643b01SKonstantin Belousov } 56*e8643b01SKonstantin Belousov 57*e8643b01SKonstantin Belousov static int 58*e8643b01SKonstantin Belousov xz_module_event_handler(module_t mod, int what, void *arg) 59*e8643b01SKonstantin Belousov { 60*e8643b01SKonstantin Belousov int error; 61*e8643b01SKonstantin Belousov 62*e8643b01SKonstantin Belousov switch (what) { 63*e8643b01SKonstantin Belousov case MOD_LOAD: 64*e8643b01SKonstantin Belousov #if XZ_INTERNAL_CRC32 65*e8643b01SKonstantin Belousov xz_crc32_init(); 66*e8643b01SKonstantin Belousov #endif 67*e8643b01SKonstantin Belousov #if XZ_INTERNAL_CRC64 68*e8643b01SKonstantin Belousov xz_crc64_init(); 69*e8643b01SKonstantin Belousov #endif 70*e8643b01SKonstantin Belousov error = 0; 71*e8643b01SKonstantin Belousov break; 72*e8643b01SKonstantin Belousov case MOD_UNLOAD: 73*e8643b01SKonstantin Belousov error = 0; 74*e8643b01SKonstantin Belousov break; 75*e8643b01SKonstantin Belousov default: 76*e8643b01SKonstantin Belousov error = EOPNOTSUPP; 77*e8643b01SKonstantin Belousov break; 78*e8643b01SKonstantin Belousov } 79*e8643b01SKonstantin Belousov 80*e8643b01SKonstantin Belousov return (error); 81*e8643b01SKonstantin Belousov } 82*e8643b01SKonstantin Belousov 83*e8643b01SKonstantin Belousov static moduledata_t xz_moduledata = { 84*e8643b01SKonstantin Belousov "xz", 85*e8643b01SKonstantin Belousov xz_module_event_handler, 86*e8643b01SKonstantin Belousov NULL 87*e8643b01SKonstantin Belousov }; 88*e8643b01SKonstantin Belousov 89*e8643b01SKonstantin Belousov DECLARE_MODULE(xz, xz_moduledata, SI_SUB_INIT_IF, SI_ORDER_ANY); 90*e8643b01SKonstantin Belousov MODULE_VERSION(xz, 1); 91