The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/openzfs/module/icp/algs/modes/gcm_pclmulqdq.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * CDDL HEADER START
    3  *
    4  * The contents of this file are subject to the terms of the
    5  * Common Development and Distribution License (the "License").
    6  * You may not use this file except in compliance with the License.
    7  *
    8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
    9  * or https://opensource.org/licenses/CDDL-1.0.
   10  * See the License for the specific language governing permissions
   11  * and limitations under the License.
   12  *
   13  * When distributing Covered Code, include this CDDL HEADER in each
   14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
   15  * If applicable, add the following below this CDDL HEADER, with the
   16  * fields enclosed by brackets "[]" replaced with your own identifying
   17  * information: Portions Copyright [yyyy] [name of copyright owner]
   18  *
   19  * CDDL HEADER END
   20  */
   21 /*
   22  * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
   23  */
   24 
   25 #if defined(__x86_64) && defined(HAVE_PCLMULQDQ)
   26 
   27 #include <sys/types.h>
   28 #include <sys/simd.h>
   29 #include <sys/asm_linkage.h>
   30 
   31 /* These functions are used to execute pclmulqdq based assembly methods */
   32 extern void ASMABI gcm_mul_pclmulqdq(uint64_t *, uint64_t *, uint64_t *);
   33 
   34 #include <modes/gcm_impl.h>
   35 
   36 /*
   37  * Perform a carry-less multiplication (that is, use XOR instead of the
   38  * multiply operator) on *x_in and *y and place the result in *res.
   39  *
   40  * Byte swap the input (*x_in and *y) and the output (*res).
   41  *
   42  * Note: x_in, y, and res all point to 16-byte numbers (an array of two
   43  * 64-bit integers).
   44  */
   45 static void
   46 gcm_pclmulqdq_mul(uint64_t *x_in, uint64_t *y, uint64_t *res)
   47 {
   48         kfpu_begin();
   49         gcm_mul_pclmulqdq(x_in, y, res);
   50         kfpu_end();
   51 }
   52 
   53 static boolean_t
   54 gcm_pclmulqdq_will_work(void)
   55 {
   56         return (kfpu_allowed() && zfs_pclmulqdq_available());
   57 }
   58 
   59 const gcm_impl_ops_t gcm_pclmulqdq_impl = {
   60         .mul = &gcm_pclmulqdq_mul,
   61         .is_supported = &gcm_pclmulqdq_will_work,
   62         .name = "pclmulqdq"
   63 };
   64 
   65 #endif /* defined(__x86_64) && defined(HAVE_PCLMULQDQ) */

Cache object: a84b5452f80e6665d576934a2b088248


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.