cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

cordic.h (2132B)


      1/*
      2 * Copyright (c) 2011 Broadcom Corporation
      3 *
      4 * Permission to use, copy, modify, and/or distribute this software for any
      5 * purpose with or without fee is hereby granted, provided that the above
      6 * copyright notice and this permission notice appear in all copies.
      7 *
      8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
      9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
     11 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
     13 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
     14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     15 */
     16#ifndef __CORDIC_H_
     17#define __CORDIC_H_
     18
     19#include <linux/types.h>
     20
     21#define CORDIC_ANGLE_GEN	39797
     22#define CORDIC_PRECISION_SHIFT	16
     23#define CORDIC_NUM_ITER	(CORDIC_PRECISION_SHIFT + 2)
     24
     25#define CORDIC_FIXED(X)	((s32)((X) << CORDIC_PRECISION_SHIFT))
     26#define CORDIC_FLOAT(X)	(((X) >= 0) \
     27		? ((((X) >> (CORDIC_PRECISION_SHIFT - 1)) + 1) >> 1) \
     28		: -((((-(X)) >> (CORDIC_PRECISION_SHIFT - 1)) + 1) >> 1))
     29
     30/**
     31 * struct cordic_iq - i/q coordinate.
     32 *
     33 * @i: real part of coordinate (in phase).
     34 * @q: imaginary part of coordinate (quadrature).
     35 */
     36struct cordic_iq {
     37	s32 i;
     38	s32 q;
     39};
     40
     41/**
     42 * cordic_calc_iq() - calculates the i/q coordinate for given angle.
     43 *
     44 * @theta: angle in degrees for which i/q coordinate is to be calculated.
     45 * @coord: function output parameter holding the i/q coordinate.
     46 *
     47 * The function calculates the i/q coordinate for a given angle using the
     48 * CORDIC algorithm. The coordinate consists of a real (i) and an
     49 * imaginary (q) part. The real part is essentially the cosine of the
     50 * angle and the imaginary part is the sine of the angle. The returned
     51 * values are scaled by 2^16 for precision. The range for theta is
     52 * for -180 degrees to +180 degrees. Passed values outside this range are
     53 * converted before doing the actual calculation.
     54 */
     55struct cordic_iq cordic_calc_iq(s32 theta);
     56
     57#endif /* __CORDIC_H_ */