1/*
2 * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
3 * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
4 * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
5 *
6 * This software is available to you under a choice of one of two
7 * licenses.  You may choose to be licensed under the terms of the GNU
8 * General Public License (GPL) Version 2, available from the file
9 * COPYING in the main directory of this source tree, or the
10 * OpenIB.org BSD license below:
11 *
12 *     Redistribution and use in source and binary forms, with or
13 *     without modification, are permitted provided that the following
14 *     conditions are met:
15 *
16 *      - Redistributions of source code must retain the above
17 *        copyright notice, this list of conditions and the following
18 *        disclaimer.
19 *
20 *      - Redistributions in binary form must reproduce the above
21 *        copyright notice, this list of conditions and the following
22 *        disclaimer in the documentation and/or other materials
23 *        provided with the distribution.
24 *
25 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32 * SOFTWARE.
33 *
34 */
35
36/*
37 * Abstract:
38 *	Defines standard math related macros and functions.
39 */
40
41#ifndef _CL_MATH_H_
42#define _CL_MATH_H_
43
44#include <complib/cl_types.h>
45
46#ifdef __cplusplus
47#  define BEGIN_C_DECLS extern "C" {
48#  define END_C_DECLS   }
49#else				/* !__cplusplus */
50#  define BEGIN_C_DECLS
51#  define END_C_DECLS
52#endif				/* __cplusplus */
53
54BEGIN_C_DECLS
55/****d* Component Library: Math/MAX
56* NAME
57*	MAX
58*
59* DESCRIPTION
60*	The MAX macro returns the greater of two values.
61*
62* SYNOPSIS
63*	MAX( x, y );
64*
65* PARAMETERS
66*	x
67*		[in] First of two values to compare.
68*
69*	y
70*		[in] Second of two values to compare.
71*
72* RETURN VALUE
73*	Returns the greater of the x and y parameters.
74*
75* SEE ALSO
76*	MIN, ROUNDUP
77*********/
78#ifndef MAX
79#define MAX(x,y)	((x) > (y) ? (x) : (y))
80#endif
81/****d* Component Library: Math/MIN
82* NAME
83*	MIN
84*
85* DESCRIPTION
86*	The MIN macro returns the greater of two values.
87*
88* SYNOPSIS
89*	MIN( x, y );
90*
91* PARAMETERS
92*	x
93*		[in] First of two values to compare.
94*
95*	y
96*		[in] Second of two values to compare.
97*
98* RETURN VALUE
99*	Returns the lesser of the x and y parameters.
100*
101* SEE ALSO
102*	MAX, ROUNDUP
103*********/
104#ifndef MIN
105#define MIN(x,y)	((x) < (y) ? (x) : (y))
106#endif
107/****d* Component Library: Math/ROUNDUP
108* NAME
109*	ROUNDUP
110*
111* DESCRIPTION
112*	The ROUNDUP macro rounds a value up to a given multiple.
113*
114* SYNOPSIS
115*	ROUNDUP( val, align );
116*
117* PARAMETERS
118*	val
119*		[in] Value that is to be rounded up. The type of the value is
120*		indeterminate, but must be at most the size of a natural integer
121*		for the platform.
122*
123*	align
124*		[in] Multiple to which the val parameter must be rounded up.
125*
126* RETURN VALUE
127*	Returns a value that is the input value specified by val rounded up to
128*	the nearest multiple of align.
129*
130* NOTES
131*	The value provided must be of a type at most the size of a natural integer.
132*********/
133#ifndef ROUNDUP
134#define ROUNDUP(val, align)	\
135	((((val) / (align))*(align)) + (((val) % (align)) ? (align) : 0))
136#endif
137END_C_DECLS
138#endif				/* _CL_MATH_H_ */
139