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 http://www.opensolaris.org/os/licensing. 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 * Copyright 2014 QLogic Corporation 22 * The contents of this file are subject to the terms of the 23 * QLogic End User License (the "License"). 24 * You may not use this file except in compliance with the License. 25 * 26 * You can obtain a copy of the License at 27 * http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/ 28 * QLogic_End_User_Software_License.txt 29 * See the License for the specific language governing permissions 30 * and limitations under the License. 31 * 32 * 33 * Module Description: 34 * This file should include pure ANSI C defines 35 * 36 * History: 37 * 25/04/10 Shay Haroush Inception. 38 ******************************************************************************/ 39 #ifndef CYCLIC_OPERATIONS 40 #define CYCLIC_OPERATIONS 41 42 /******** Cyclic Operators Macros ********/ 43 44 #define _ABS_DIFF(x, y) ((x) > (y) ? (x) - (y) : (y) - (x)) 45 46 static __inline u8_t _cyclic_lt(u32_t x, u32_t y, u32_t d) 47 { 48 u32_t diff = _ABS_DIFF(x,y); 49 return (diff < d) ? x < y : x > y; 50 } 51 52 static __inline u8_t _cyclic_le(u32_t x, u32_t y, u32_t d) 53 { 54 u32_t diff = _ABS_DIFF(x,y); 55 return (diff < d) ? x <= y : x >= y; 56 } 57 58 #define CYCLIC_LT_8(x, y) (_cyclic_lt(x, y, 128)) 59 #define CYCLIC_LT_16(x, y) (_cyclic_lt(x, y, 32768)) 60 #define CYCLIC_LT_24(x, y) (_cyclic_lt(x, y, 8388608)) 61 #define CYCLIC_LT_32(x, y) (_cyclic_lt(x, y, 2147483648)) 62 63 #define CYCLIC_LE_8(x, y) (_cyclic_le(x, y, 128)) 64 #define CYCLIC_LE_16(x, y) (_cyclic_le(x, y, 32768)) 65 #define CYCLIC_LE_24(x, y) (_cyclic_le(x, y, 8388608)) 66 #define CYCLIC_LE_32(x, y) (_cyclic_le(x, y, 2147483648)) 67 68 #define CYCLIC_GT_8(x, y) (!(CYCLIC_LE_8(x, y))) 69 #define CYCLIC_GT_16(x, y) (!(CYCLIC_LE_16(x, y))) 70 #define CYCLIC_GT_24(x, y) (!(CYCLIC_LE_24(x, y))) 71 #define CYCLIC_GT_32(x, y) (!(CYCLIC_LE_32(x, y))) 72 73 #define CYCLIC_GE_8(x, y) (!(CYCLIC_LT_8(x, y))) 74 #define CYCLIC_GE_16(x, y) (!(CYCLIC_LT_16(x, y))) 75 #define CYCLIC_GE_24(x, y) (!(CYCLIC_LT_24(x, y))) 76 #define CYCLIC_GE_32(x, y) (!(CYCLIC_LT_32(x, y))) 77 78 // bits = number of bits in x, y (i.e., sizeof_x) 79 #define CYCLIC_LT_BITS(x, y, bits) _cyclic_lt(x, y, 1 << ((bits)-1)) 80 #define CYCLIC_LE_BITS(x, y, bits) _cyclic_le(x, y, 1 << ((bits)-1)) 81 #define CYCLIC_GT_BITS(x, y, bits) (!(CYCLIC_LE_BITS(x, y, bits))) 82 #define CYCLIC_GE_BITS(x, y, bits) (!(CYCLIC_LT_BITS(x, y, bits))) 83 84 /******** End Cyclic Operators Macros ********/ 85 86 #endif // CYCLIC_OPERATIONS 87