xref: /freebsd-src/sys/dev/bwn/if_bwn_util.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
17780dd71SAdrian Chadd /*-
27780dd71SAdrian Chadd  * Copyright (c) 2016 Adrian Chadd <adrian@FreeBSD.org>.
37780dd71SAdrian Chadd  * All rights reserved.
47780dd71SAdrian Chadd  *
57780dd71SAdrian Chadd  * Redistribution and use in source and binary forms, with or without
67780dd71SAdrian Chadd  * modification, are permitted provided that the following conditions
77780dd71SAdrian Chadd  * are met:
87780dd71SAdrian Chadd  * 1. Redistributions of source code must retain the above copyright
97780dd71SAdrian Chadd  *    notice, this list of conditions and the following disclaimer,
107780dd71SAdrian Chadd  *    without modification.
117780dd71SAdrian Chadd  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
127780dd71SAdrian Chadd  *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
137780dd71SAdrian Chadd  *    redistribution must be conditioned upon including a substantially
147780dd71SAdrian Chadd  *    similar Disclaimer requirement for further binary redistribution.
157780dd71SAdrian Chadd  *
167780dd71SAdrian Chadd  * NO WARRANTY
177780dd71SAdrian Chadd  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
187780dd71SAdrian Chadd  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
197780dd71SAdrian Chadd  * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
207780dd71SAdrian Chadd  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
217780dd71SAdrian Chadd  * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
227780dd71SAdrian Chadd  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
237780dd71SAdrian Chadd  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
247780dd71SAdrian Chadd  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
257780dd71SAdrian Chadd  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
267780dd71SAdrian Chadd  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
277780dd71SAdrian Chadd  * THE POSSIBILITY OF SUCH DAMAGES.
287780dd71SAdrian Chadd  */
297780dd71SAdrian Chadd #ifndef	__IF_BWN_UTIL_H__
307780dd71SAdrian Chadd #define	__IF_BWN_UTIL_H__
317780dd71SAdrian Chadd 
327780dd71SAdrian Chadd /* Hamming weight; used in the PHY routines */
337780dd71SAdrian Chadd static inline int
bwn_hweight32(uint32_t val)347780dd71SAdrian Chadd bwn_hweight32(uint32_t val)
357780dd71SAdrian Chadd {
367780dd71SAdrian Chadd 	int i, r = 0;
377780dd71SAdrian Chadd 	/* yes, could do it without a loop.. */
387780dd71SAdrian Chadd 	for (i = 0; i < 32; i++) {
397780dd71SAdrian Chadd 		r = r + (val & 1);
407780dd71SAdrian Chadd 		val = val >> 1;
417780dd71SAdrian Chadd 	}
427780dd71SAdrian Chadd 	return r;
437780dd71SAdrian Chadd }
447780dd71SAdrian Chadd 
457780dd71SAdrian Chadd /* Clamp value; PHY code */
467780dd71SAdrian Chadd static inline int
bwn_clamp_val(int val,int lo,int hi)477780dd71SAdrian Chadd bwn_clamp_val(int val, int lo, int hi)
487780dd71SAdrian Chadd {
497780dd71SAdrian Chadd 	if (val < lo)
507780dd71SAdrian Chadd 		return lo;
517780dd71SAdrian Chadd 	if (val > hi)
527780dd71SAdrian Chadd 		return hi;
537780dd71SAdrian Chadd 	return val;
547780dd71SAdrian Chadd }
557780dd71SAdrian Chadd 
56*020cb220SAdrian Chadd /* Q52 format - used in PHY routines */
57*020cb220SAdrian Chadd #define	INT_TO_Q52(i)		((i) << 2)
58*020cb220SAdrian Chadd #define	Q52_TO_INT(q52)		((q52) >> 2)
59*020cb220SAdrian Chadd #define	Q52_FMT			"%u.%u"
60*020cb220SAdrian Chadd #define	Q52_ARG(q52)		Q52_TO_INT(q52), ((((q52) & 0x3) * 100) / 4)
61*020cb220SAdrian Chadd 
627780dd71SAdrian Chadd extern	unsigned int bwn_sqrt(struct bwn_mac *mac, unsigned int x);
637780dd71SAdrian Chadd 
647780dd71SAdrian Chadd #endif	/* __IF_BWN_UTIL_H__ */
65