xref: /illumos-gate/usr/src/uts/common/io/qede/579xx/drivers/ecore/bcm_osal.h (revision 94c3dad2979525d0a82595f3d8350a6116aba8ed)
114b24e2bSVaishali Kulkarni /*
214b24e2bSVaishali Kulkarni * CDDL HEADER START
314b24e2bSVaishali Kulkarni *
414b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the
514b24e2bSVaishali Kulkarni * Common Development and Distribution License, v.1,  (the "License").
614b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License.
714b24e2bSVaishali Kulkarni *
814b24e2bSVaishali Kulkarni * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
914b24e2bSVaishali Kulkarni * or http://opensource.org/licenses/CDDL-1.0.
1014b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions
1114b24e2bSVaishali Kulkarni * and limitations under the License.
1214b24e2bSVaishali Kulkarni *
1314b24e2bSVaishali Kulkarni * When distributing Covered Code, include this CDDL HEADER in each
1414b24e2bSVaishali Kulkarni * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1514b24e2bSVaishali Kulkarni * If applicable, add the following below this CDDL HEADER, with the
1614b24e2bSVaishali Kulkarni * fields enclosed by brackets "[]" replaced with your own identifying
1714b24e2bSVaishali Kulkarni * information: Portions Copyright [yyyy] [name of copyright owner]
1814b24e2bSVaishali Kulkarni *
1914b24e2bSVaishali Kulkarni * CDDL HEADER END
2014b24e2bSVaishali Kulkarni */
2114b24e2bSVaishali Kulkarni 
2214b24e2bSVaishali Kulkarni /*
2314b24e2bSVaishali Kulkarni * Copyright 2014-2017 Cavium, Inc.
2414b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the Common Development
2514b24e2bSVaishali Kulkarni * and Distribution License, v.1,  (the "License").
2614b24e2bSVaishali Kulkarni 
2714b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License.
2814b24e2bSVaishali Kulkarni 
2914b24e2bSVaishali Kulkarni * You can obtain a copy of the License at available
3014b24e2bSVaishali Kulkarni * at http://opensource.org/licenses/CDDL-1.0
3114b24e2bSVaishali Kulkarni 
3214b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions and
3314b24e2bSVaishali Kulkarni * limitations under the License.
3414b24e2bSVaishali Kulkarni */
3514b24e2bSVaishali Kulkarni 
3614b24e2bSVaishali Kulkarni #ifndef	_BCM_OSAL_H
3714b24e2bSVaishali Kulkarni #define	_BCM_OSAL_H
3814b24e2bSVaishali Kulkarni 
3914b24e2bSVaishali Kulkarni #include <sys/ddi.h>
4014b24e2bSVaishali Kulkarni #include <sys/sunddi.h>
4114b24e2bSVaishali Kulkarni #include <sys/types.h>
4214b24e2bSVaishali Kulkarni #include <sys/mutex.h>
4314b24e2bSVaishali Kulkarni #include <sys/ksynch.h>
4414b24e2bSVaishali Kulkarni #include <sys/conf.h>
4514b24e2bSVaishali Kulkarni #include <sys/debug.h>
4614b24e2bSVaishali Kulkarni #include <sys/kmem.h>
4714b24e2bSVaishali Kulkarni #include <sys/mac.h>
4814b24e2bSVaishali Kulkarni #include <sys/mac_provider.h>
4914b24e2bSVaishali Kulkarni #include <sys/dditypes.h>
5014b24e2bSVaishali Kulkarni #include <sys/list_impl.h>
5114b24e2bSVaishali Kulkarni #include <sys/byteorder.h>
52*94c3dad2SToomas Soome #include <sys/containerof.h>
5314b24e2bSVaishali Kulkarni 
5414b24e2bSVaishali Kulkarni #include "qede_types.h"
5514b24e2bSVaishali Kulkarni #include "qede_list.h"
5614b24e2bSVaishali Kulkarni 
5714b24e2bSVaishali Kulkarni /*
5814b24e2bSVaishali Kulkarni 
5914b24e2bSVaishali Kulkarni  * Forward Declarations for ecore data structures
6014b24e2bSVaishali Kulkarni  */
6114b24e2bSVaishali Kulkarni struct ecore_dev;
6214b24e2bSVaishali Kulkarni struct ecore_hwfn;
6314b24e2bSVaishali Kulkarni 
6414b24e2bSVaishali Kulkarni #define nothing do {} while(0)
6514b24e2bSVaishali Kulkarni 
6614b24e2bSVaishali Kulkarni #define	INLINE	inline
6714b24e2bSVaishali Kulkarni #define	__iomem
6814b24e2bSVaishali Kulkarni #define OSAL_IOMEM	__iomem
6914b24e2bSVaishali Kulkarni 
7014b24e2bSVaishali Kulkarni #ifndef likely
7114b24e2bSVaishali Kulkarni #define	likely(expr)		(expr)
7214b24e2bSVaishali Kulkarni #endif
7314b24e2bSVaishali Kulkarni 
7414b24e2bSVaishali Kulkarni #ifndef	unlikely
7514b24e2bSVaishali Kulkarni #define	unlikely(expr)		(expr)
7614b24e2bSVaishali Kulkarni #endif
7714b24e2bSVaishali Kulkarni 
7814b24e2bSVaishali Kulkarni /*
7914b24e2bSVaishali Kulkarni  * Memory related OSAL
8014b24e2bSVaishali Kulkarni  */
8114b24e2bSVaishali Kulkarni #define	OSAL_MEM_ZERO(_dest_, _size_) \
8214b24e2bSVaishali Kulkarni 	(void) memset(_dest_, 0, _size_)
8314b24e2bSVaishali Kulkarni #define	OSAL_MEMCPY(_dest_, _src_, _size_) \
8414b24e2bSVaishali Kulkarni 	memcpy(_dest_, _src_, _size_)
8514b24e2bSVaishali Kulkarni #define OSAL_MEMCMP(_s1_, _s2_, _size_) \
8614b24e2bSVaishali Kulkarni 	memcmp(_s1_, _s2_, _size_)
8714b24e2bSVaishali Kulkarni #define OSAL_MEMSET(_dest_, _val_, _size_) \
8814b24e2bSVaishali Kulkarni 	memset(_dest_, _val_, _size_)
8914b24e2bSVaishali Kulkarni 
9014b24e2bSVaishali Kulkarni /*
9114b24e2bSVaishali Kulkarni  * The illumos DDI has sprintf returning a pointer to the resulting character
9214b24e2bSVaishali Kulkarni  * buffer and not the actual length. Therefore we simulate sprintf like the
9314b24e2bSVaishali Kulkarni  * others do.
9414b24e2bSVaishali Kulkarni  */
9514b24e2bSVaishali Kulkarni extern size_t qede_sprintf(char *, const char *, ...);
9614b24e2bSVaishali Kulkarni #define	OSAL_SPRINTF	qede_sprintf
9714b24e2bSVaishali Kulkarni #define OSAL_SNPRINTF	(ssize_t)snprintf
9814b24e2bSVaishali Kulkarni #define	OSAL_STRCMP	strcmp
9914b24e2bSVaishali Kulkarni 
10014b24e2bSVaishali Kulkarni #define	GFP_KERNEL	KM_SLEEP
10114b24e2bSVaishali Kulkarni #define	GFP_ATOMIC	KM_NOSLEEP
10214b24e2bSVaishali Kulkarni 
10314b24e2bSVaishali Kulkarni /* Not used in ecore */
10414b24e2bSVaishali Kulkarni #define OSAL_CALLOC(dev, GFP, num, size) OSAL_NULL
10514b24e2bSVaishali Kulkarni 
10614b24e2bSVaishali Kulkarni void *qede_osal_zalloc(struct ecore_dev *, int, size_t);
10714b24e2bSVaishali Kulkarni #define	OSAL_ZALLOC(_edev, _flags, _size) \
10814b24e2bSVaishali Kulkarni 	qede_osal_zalloc(_edev, _flags, _size)
10914b24e2bSVaishali Kulkarni void *qede_osal_alloc(struct ecore_dev *, int, size_t);
11014b24e2bSVaishali Kulkarni #define	OSAL_ALLOC(_edev, _flags, _size) \
11114b24e2bSVaishali Kulkarni 	qede_osal_alloc(_edev, _flags, _size)
11214b24e2bSVaishali Kulkarni void qede_osal_free(struct ecore_dev *, void *addr);
11314b24e2bSVaishali Kulkarni #define	OSAL_FREE(_edev, _addr) \
11414b24e2bSVaishali Kulkarni 	qede_osal_free(_edev, _addr)
11514b24e2bSVaishali Kulkarni 
11614b24e2bSVaishali Kulkarni #define OSAL_VALLOC(_edev, _size) \
11714b24e2bSVaishali Kulkarni 	qede_osal_alloc(_edev, GFP_KERNEL, _size)
11814b24e2bSVaishali Kulkarni 
11914b24e2bSVaishali Kulkarni #define OSAL_VFREE(_edev, _addr) \
12014b24e2bSVaishali Kulkarni 	qede_osal_free(_edev, _addr)
12114b24e2bSVaishali Kulkarni 
12214b24e2bSVaishali Kulkarni #define OSAL_VZALLOC(_edev, _size) \
12314b24e2bSVaishali Kulkarni 	qede_osal_zalloc(_edev, GFP_KERNEL, _size)
12414b24e2bSVaishali Kulkarni 
12514b24e2bSVaishali Kulkarni void *qede_osal_dma_alloc_coherent(struct ecore_dev *, dma_addr_t *, size_t);
12614b24e2bSVaishali Kulkarni #define	OSAL_DMA_ALLOC_COHERENT(_edev_, _paddr_, _mem_size_) \
12714b24e2bSVaishali Kulkarni 	qede_osal_dma_alloc_coherent(_edev_, _paddr_, _mem_size_)
12814b24e2bSVaishali Kulkarni void qede_osal_dma_free_coherent(struct ecore_dev *, void *, dma_addr_t, size_t);
12914b24e2bSVaishali Kulkarni #define	OSAL_DMA_FREE_COHERENT(_edev_, _vaddr_, _paddr_, _mem_size_) \
13014b24e2bSVaishali Kulkarni 	qede_osal_dma_free_coherent(_edev_, _vaddr_, _paddr_, _mem_size_)
13114b24e2bSVaishali Kulkarni 
13214b24e2bSVaishali Kulkarni /* Combine given 0xhi and 0xlo into a single U64 in format 0xhilo */
13314b24e2bSVaishali Kulkarni #define	HILO_U64(hi, lo)	((((u64)(hi)) << 32) + (lo))
13414b24e2bSVaishali Kulkarni 
13514b24e2bSVaishali Kulkarni void qede_osal_dma_sync(struct ecore_dev *edev, void* addr, u32 size, bool is_post);
13614b24e2bSVaishali Kulkarni #define OSAL_DMA_SYNC(dev, addr, length, is_post) \
13714b24e2bSVaishali Kulkarni 	qede_osal_dma_sync(dev, addr, length, is_post)
13814b24e2bSVaishali Kulkarni /*
13914b24e2bSVaishali Kulkarni  * BAR Access Related OSAL
14014b24e2bSVaishali Kulkarni  */
14114b24e2bSVaishali Kulkarni void qede_osal_pci_write32(struct ecore_hwfn *hwfn, u32 addr, u32 val);
14214b24e2bSVaishali Kulkarni void qede_osal_pci_write16(struct ecore_hwfn *hwfn, u32 addr, u16 val);
14314b24e2bSVaishali Kulkarni u32 qede_osal_pci_read32(struct ecore_hwfn *hwfn, u32 addr);
14414b24e2bSVaishali Kulkarni u32 *qede_osal_reg_addr(struct ecore_hwfn *hwfn, u32 addr);
14514b24e2bSVaishali Kulkarni void qede_osal_pci_bar2_write32(struct ecore_hwfn *hwfn, u32 offset, u32 val);
14614b24e2bSVaishali Kulkarni 
14714b24e2bSVaishali Kulkarni #define	REG_WR(_hwfn_, _addr_, _value_) \
14814b24e2bSVaishali Kulkarni 	qede_osal_pci_write32(_hwfn_, _addr_, _value_)
14914b24e2bSVaishali Kulkarni 
15014b24e2bSVaishali Kulkarni #define	REG_WR16(_hwfn_, _addr_, _value_) \
15114b24e2bSVaishali Kulkarni 	qede_osal_pci_write16(_hwfn_, _addr_, _value_)
15214b24e2bSVaishali Kulkarni 
15314b24e2bSVaishali Kulkarni #define	REG_RD(_hwfn_, _addr_) \
15414b24e2bSVaishali Kulkarni 	qede_osal_pci_read32(_hwfn_, _addr_)
15514b24e2bSVaishali Kulkarni 
15614b24e2bSVaishali Kulkarni #define OSAL_REG_ADDR(_hwfn_, _addr_)  \
15714b24e2bSVaishali Kulkarni 	qede_osal_reg_addr(_hwfn_, _addr_)
15814b24e2bSVaishali Kulkarni 
15914b24e2bSVaishali Kulkarni #define	DOORBELL(_hwfn_, _addr_, _val_) \
16014b24e2bSVaishali Kulkarni 	qede_osal_pci_bar2_write32(_hwfn_, _addr_, _val_)
16114b24e2bSVaishali Kulkarni 
16214b24e2bSVaishali Kulkarni void qede_osal_direct_reg_write32(struct ecore_hwfn *hwfn, void *addr, u32 value);
16314b24e2bSVaishali Kulkarni u32 qede_osal_direct_reg_read32(struct ecore_hwfn *hwfn, void *addr);
16414b24e2bSVaishali Kulkarni /* FIXME: not correct Writes to the PCI _addr_ directly */
16514b24e2bSVaishali Kulkarni #define	DIRECT_REG_WR(_hwfn, _addr, _val) \
16614b24e2bSVaishali Kulkarni 	qede_osal_direct_reg_write32(_hwfn, _addr, _val)
16714b24e2bSVaishali Kulkarni #define	DIRECT_REG_RD(_hwfn, _addr) \
16814b24e2bSVaishali Kulkarni 	qede_osal_direct_reg_read32(_hwfn, _addr)
16914b24e2bSVaishali Kulkarni 
17014b24e2bSVaishali Kulkarni static inline bool OSAL_NVM_IS_ACCESS_ENABLED(void *p_hwfn)
17114b24e2bSVaishali Kulkarni {
17214b24e2bSVaishali Kulkarni 	return (1);
17314b24e2bSVaishali Kulkarni }
17414b24e2bSVaishali Kulkarni 
17514b24e2bSVaishali Kulkarni /*
17614b24e2bSVaishali Kulkarni  * Bit manipulation Helper functions
17714b24e2bSVaishali Kulkarni  */
17814b24e2bSVaishali Kulkarni 
17914b24e2bSVaishali Kulkarni #define OSAL_BITS_PER_BYTE      (8)
18014b24e2bSVaishali Kulkarni #define OSAL_BITS_PER_UL        (sizeof(unsigned long)*OSAL_BITS_PER_BYTE) /* always a power of 2 */
18114b24e2bSVaishali Kulkarni #define OSAL_BITS_PER_UL_MASK   (OSAL_BITS_PER_UL - 1)
18214b24e2bSVaishali Kulkarni 
18314b24e2bSVaishali Kulkarni static inline u32 osal_ffsl(unsigned long x)
18414b24e2bSVaishali Kulkarni {
18514b24e2bSVaishali Kulkarni 	int r = 1;
18614b24e2bSVaishali Kulkarni 
18714b24e2bSVaishali Kulkarni 	if (!x)
18814b24e2bSVaishali Kulkarni 		return (0);
18914b24e2bSVaishali Kulkarni 
19014b24e2bSVaishali Kulkarni 	if (!(x & 0xffffffff)) {
19114b24e2bSVaishali Kulkarni 		x >>= 32;
19214b24e2bSVaishali Kulkarni 		r += 32;
19314b24e2bSVaishali Kulkarni 	}
19414b24e2bSVaishali Kulkarni 
19514b24e2bSVaishali Kulkarni 	if (!(x & 0xffff)) {
19614b24e2bSVaishali Kulkarni 		x >>= 16;
19714b24e2bSVaishali Kulkarni 		r += 16;
19814b24e2bSVaishali Kulkarni 	}
19914b24e2bSVaishali Kulkarni 
20014b24e2bSVaishali Kulkarni 	if (!(x & 0xff)) {
20114b24e2bSVaishali Kulkarni 		x >>= 8;
20214b24e2bSVaishali Kulkarni 		r += 8;
20314b24e2bSVaishali Kulkarni 	}
20414b24e2bSVaishali Kulkarni 
20514b24e2bSVaishali Kulkarni 	if (!(x & 0xf)) {
20614b24e2bSVaishali Kulkarni 		x >>= 4;
20714b24e2bSVaishali Kulkarni 		r += 4;
20814b24e2bSVaishali Kulkarni 	}
20914b24e2bSVaishali Kulkarni 	if (!(x & 3)) {
21014b24e2bSVaishali Kulkarni 		x >>= 2;
21114b24e2bSVaishali Kulkarni 		r += 2;
21214b24e2bSVaishali Kulkarni 	}
21314b24e2bSVaishali Kulkarni 
21414b24e2bSVaishali Kulkarni 	if (!(x & 1)) {
21514b24e2bSVaishali Kulkarni 		x >>= 1;
21614b24e2bSVaishali Kulkarni 		r += 1;
21714b24e2bSVaishali Kulkarni 	}
21814b24e2bSVaishali Kulkarni 
21914b24e2bSVaishali Kulkarni 	return (r);
22014b24e2bSVaishali Kulkarni }
22114b24e2bSVaishali Kulkarni 
22214b24e2bSVaishali Kulkarni static inline u32 osal_ffz(unsigned long word)
22314b24e2bSVaishali Kulkarni {
22414b24e2bSVaishali Kulkarni 	unsigned long first_zero;
22514b24e2bSVaishali Kulkarni 
22614b24e2bSVaishali Kulkarni 	first_zero = osal_ffsl(~word);
22714b24e2bSVaishali Kulkarni 	return first_zero ? (first_zero-1) : OSAL_BITS_PER_UL;
22814b24e2bSVaishali Kulkarni }
22914b24e2bSVaishali Kulkarni 
23014b24e2bSVaishali Kulkarni static inline void OSAL_SET_BIT(u32 nr, unsigned long *addr)
23114b24e2bSVaishali Kulkarni {
23214b24e2bSVaishali Kulkarni 	addr[nr/OSAL_BITS_PER_UL] |= 1UL << (nr & OSAL_BITS_PER_UL_MASK);
23314b24e2bSVaishali Kulkarni }
23414b24e2bSVaishali Kulkarni 
23514b24e2bSVaishali Kulkarni static inline void OSAL_CLEAR_BIT(u32 nr, unsigned long *addr)
23614b24e2bSVaishali Kulkarni {
23714b24e2bSVaishali Kulkarni 	addr[nr/OSAL_BITS_PER_UL] &= ~(1UL << (nr & OSAL_BITS_PER_UL_MASK));
23814b24e2bSVaishali Kulkarni }
23914b24e2bSVaishali Kulkarni 
24014b24e2bSVaishali Kulkarni static inline bool OSAL_TEST_BIT(u32 nr, unsigned long *addr)
24114b24e2bSVaishali Kulkarni {
24214b24e2bSVaishali Kulkarni 	return !!(addr[nr/OSAL_BITS_PER_UL] & (1UL << (nr & OSAL_BITS_PER_UL_MASK)));
24314b24e2bSVaishali Kulkarni }
24414b24e2bSVaishali Kulkarni 
24514b24e2bSVaishali Kulkarni static inline u32 OSAL_FIND_FIRST_ZERO_BIT(unsigned long *addr, u32 limit)
24614b24e2bSVaishali Kulkarni {
24714b24e2bSVaishali Kulkarni 	u32 i;
24814b24e2bSVaishali Kulkarni 	u32 nwords = 0;
24914b24e2bSVaishali Kulkarni 
25014b24e2bSVaishali Kulkarni 	ASSERT(limit);
25114b24e2bSVaishali Kulkarni 	nwords = (limit - 1)/OSAL_BITS_PER_UL + 1;
25214b24e2bSVaishali Kulkarni 	for (i = 0; i < nwords && ~(addr[i]) == 0; i++);
25314b24e2bSVaishali Kulkarni 	return  (i == nwords)  ? limit : i*OSAL_BITS_PER_UL + osal_ffz(addr[i]);
25414b24e2bSVaishali Kulkarni }
25514b24e2bSVaishali Kulkarni 
25614b24e2bSVaishali Kulkarni static inline u32 OSAL_FIND_FIRST_BIT(unsigned long *addr, u32 limit)
25714b24e2bSVaishali Kulkarni {
25814b24e2bSVaishali Kulkarni 	u32     i;
25914b24e2bSVaishali Kulkarni 	u32     nwords = (limit+OSAL_BITS_PER_UL-1)/OSAL_BITS_PER_UL;
26014b24e2bSVaishali Kulkarni 
26114b24e2bSVaishali Kulkarni 	for (i = 0; i < nwords ; i++)
26214b24e2bSVaishali Kulkarni 	{
26314b24e2bSVaishali Kulkarni 		if (addr[i]!=0)
26414b24e2bSVaishali Kulkarni 		break;
26514b24e2bSVaishali Kulkarni 	}
26614b24e2bSVaishali Kulkarni 
26714b24e2bSVaishali Kulkarni 	if (i == nwords) {
26814b24e2bSVaishali Kulkarni 		return limit;
26914b24e2bSVaishali Kulkarni 	} else {
27014b24e2bSVaishali Kulkarni 		return i*OSAL_BITS_PER_UL + osal_ffz(addr[i]);
27114b24e2bSVaishali Kulkarni 	}
27214b24e2bSVaishali Kulkarni }
27314b24e2bSVaishali Kulkarni 
27414b24e2bSVaishali Kulkarni 
27514b24e2bSVaishali Kulkarni /*
27614b24e2bSVaishali Kulkarni  * Time related OSAL
27714b24e2bSVaishali Kulkarni  */
27814b24e2bSVaishali Kulkarni #define	OSAL_UDELAY(_usecs_)		drv_usecwait(_usecs_)
27914b24e2bSVaishali Kulkarni #define	OSAL_MSLEEP(_msecs_)		delay(drv_usectohz(_msecs_ * 1000))
28014b24e2bSVaishali Kulkarni 
28114b24e2bSVaishali Kulkarni /*
28214b24e2bSVaishali Kulkarni  * Synchronization related OSAL
28314b24e2bSVaishali Kulkarni  */
28414b24e2bSVaishali Kulkarni typedef kmutex_t		osal_mutex_t;
28514b24e2bSVaishali Kulkarni typedef	kmutex_t		osal_spinlock_t;
28614b24e2bSVaishali Kulkarni 
28714b24e2bSVaishali Kulkarni /*
28814b24e2bSVaishali Kulkarni  * MUTEX/SPINLOCK Related NOTES:
28914b24e2bSVaishali Kulkarni  * 1. Currently initialize all mutex with default intr prio 0.
29014b24e2bSVaishali Kulkarni  * 2. Later do mutex_init in OSAL_MUTEX_ALLOC() instead of
29114b24e2bSVaishali Kulkarni  * OSAL_MUTEX_INIT, and use proper intr prio.
29214b24e2bSVaishali Kulkarni  * 3. Ensure that before calling any ecore api's, intr prio
29314b24e2bSVaishali Kulkarni  * is properly configured.
29414b24e2bSVaishali Kulkarni  */
29514b24e2bSVaishali Kulkarni #define OSAL_MUTEX_ALLOC(hwfn, lock) nothing
29614b24e2bSVaishali Kulkarni #define OSAL_SPIN_LOCK_ALLOC(hwfn, lock) nothing
29714b24e2bSVaishali Kulkarni 
29814b24e2bSVaishali Kulkarni #define	OSAL_MUTEX_INIT(_lock_) \
29914b24e2bSVaishali Kulkarni 	mutex_init(_lock_, NULL, MUTEX_DRIVER, 0)
30014b24e2bSVaishali Kulkarni #define	OSAL_SPIN_LOCK_INIT(lock) \
30114b24e2bSVaishali Kulkarni 	mutex_init(lock, NULL, MUTEX_DRIVER, 0)
30214b24e2bSVaishali Kulkarni #define	OSAL_MUTEX_DEALLOC(_lock) \
30314b24e2bSVaishali Kulkarni 	mutex_destroy(_lock)
30414b24e2bSVaishali Kulkarni #define OSAL_SPIN_LOCK_DEALLOC(_lock) \
30514b24e2bSVaishali Kulkarni 	mutex_destroy(_lock)
30614b24e2bSVaishali Kulkarni 
30714b24e2bSVaishali Kulkarni #define	OSAL_MUTEX_ACQUIRE(lock) \
30814b24e2bSVaishali Kulkarni 	mutex_enter(lock)
30914b24e2bSVaishali Kulkarni #define	OSAL_SPIN_LOCK(lock) \
31014b24e2bSVaishali Kulkarni 	mutex_enter(lock)
31114b24e2bSVaishali Kulkarni #define	OSAL_SPIN_LOCK_IRQSAVE(lock, flags) \
31214b24e2bSVaishali Kulkarni 	OSAL_SPIN_LOCK(lock)
31314b24e2bSVaishali Kulkarni #define	OSAL_MUTEX_RELEASE(lock) \
31414b24e2bSVaishali Kulkarni 	mutex_exit(lock)
31514b24e2bSVaishali Kulkarni #define	OSAL_SPIN_UNLOCK(lock) \
31614b24e2bSVaishali Kulkarni 	mutex_exit(lock)
31714b24e2bSVaishali Kulkarni #define	OSAL_SPIN_UNLOCK_IRQSAVE(lock, flags) \
31814b24e2bSVaishali Kulkarni 	OSAL_SPIN_UNLOCK(lock)
31914b24e2bSVaishali Kulkarni 
32014b24e2bSVaishali Kulkarni /*
32114b24e2bSVaishali Kulkarni  * TODO: Implement dpc ISR
32214b24e2bSVaishali Kulkarni  */
32314b24e2bSVaishali Kulkarni #define	OSAL_DPC_ALLOC(hwfn)		OSAL_ALLOC(hwfn->p_dev, GFP_KERNEL, sizeof (u64))
32414b24e2bSVaishali Kulkarni #define	OSAL_DPC_INIT(dpc, hwfn)	nothing
32514b24e2bSVaishali Kulkarni 
32614b24e2bSVaishali Kulkarni /*
32714b24e2bSVaishali Kulkarni  * PF recovery handler
32814b24e2bSVaishali Kulkarni  */
32914b24e2bSVaishali Kulkarni void qede_osal_recovery_handler(struct ecore_hwfn *hwfn);
33014b24e2bSVaishali Kulkarni #define	OSAL_SCHEDULE_RECOVERY_HANDLER(_ptr)	qede_osal_recovery_handler(_ptr)
33114b24e2bSVaishali Kulkarni 
33214b24e2bSVaishali Kulkarni /*
33314b24e2bSVaishali Kulkarni  * Process DCBX Event
33414b24e2bSVaishali Kulkarni  */
33514b24e2bSVaishali Kulkarni static inline void OSAL_DCBX_AEN(struct ecore_hwfn *p_hwfn, u32 mib_type)
33614b24e2bSVaishali Kulkarni {
33714b24e2bSVaishali Kulkarni }
33814b24e2bSVaishali Kulkarni 
33914b24e2bSVaishali Kulkarni /*
34014b24e2bSVaishali Kulkarni  * Endianess Related
34114b24e2bSVaishali Kulkarni  */
34214b24e2bSVaishali Kulkarni #define	LE_TO_HOST_32			LE_32
34314b24e2bSVaishali Kulkarni #define	HOST_TO_LE_32			LE_32
34414b24e2bSVaishali Kulkarni #define	HOST_TO_LE_16			LE_16
34514b24e2bSVaishali Kulkarni 
34614b24e2bSVaishali Kulkarni #define	OSAL_BE32		u32
34714b24e2bSVaishali Kulkarni #ifdef BIG_ENDIAN
34814b24e2bSVaishali Kulkarni #define	OSAL_CPU_TO_BE64(val)	((val))
34914b24e2bSVaishali Kulkarni #define	OSAL_CPU_TO_BE32(val)	((val))
35014b24e2bSVaishali Kulkarni #define	OSAL_BE32_TO_CPU(val)	((val))
35114b24e2bSVaishali Kulkarni #define OSAL_CPU_TO_LE32(val)	BSWAP_32(val)
35214b24e2bSVaishali Kulkarni #define OSAL_CPU_TO_LE16(val)	BSWAP_16(val)
35314b24e2bSVaishali Kulkarni #define OSAL_LE32_TO_CPU(val)	BSWAP_32(val)
35414b24e2bSVaishali Kulkarni #define OSAL_LE16_TO_CPU(val)	BSWAP_16(val)
35514b24e2bSVaishali Kulkarni #define OSAL_CPU_TO_LE64(val)	BSWAP_64(val)
35614b24e2bSVaishali Kulkarni #else
35714b24e2bSVaishali Kulkarni #define	OSAL_CPU_TO_BE64(val)	BSWAP_64(val)
35814b24e2bSVaishali Kulkarni #define	OSAL_CPU_TO_BE32(val)	BSWAP_32(val)
35914b24e2bSVaishali Kulkarni #define	OSAL_BE32_TO_CPU(val)	BSWAP_32(val)
36014b24e2bSVaishali Kulkarni #define OSAL_CPU_TO_LE32(val)	((val))
36114b24e2bSVaishali Kulkarni #define OSAL_CPU_TO_LE16(val)	((val))
36214b24e2bSVaishali Kulkarni #define OSAL_LE32_TO_CPU(val)	((val))
36314b24e2bSVaishali Kulkarni #define OSAL_LE16_TO_CPU(val)	((val))
36414b24e2bSVaishali Kulkarni #endif
36514b24e2bSVaishali Kulkarni /*
36614b24e2bSVaishali Kulkarni  * Physical Link Handling
36714b24e2bSVaishali Kulkarni  */
36814b24e2bSVaishali Kulkarni void qede_osal_link_update(struct ecore_hwfn *hwfn);
36914b24e2bSVaishali Kulkarni #define	OSAL_LINK_UPDATE(_hwfn_) \
37014b24e2bSVaishali Kulkarni 	qede_osal_link_update(_hwfn_)
37114b24e2bSVaishali Kulkarni 
37214b24e2bSVaishali Kulkarni /*
37314b24e2bSVaishali Kulkarni  * Linked List Related OSAL,
37414b24e2bSVaishali Kulkarni  * and general Link list API's
37514b24e2bSVaishali Kulkarni  * for driver
37614b24e2bSVaishali Kulkarni  */
37714b24e2bSVaishali Kulkarni 
37814b24e2bSVaishali Kulkarni typedef u64 osal_size_t;
37914b24e2bSVaishali Kulkarni typedef u64 osal_int_ptr_t;
38014b24e2bSVaishali Kulkarni #define OSAL_NULL	NULL
38114b24e2bSVaishali Kulkarni 
38214b24e2bSVaishali Kulkarni #define	OSAL_LIST_PUSH_HEAD(_entry_at_beg_, _head_) \
38314b24e2bSVaishali Kulkarni 	QEDE_LIST_ADD(_entry_at_beg_, _head_)
38414b24e2bSVaishali Kulkarni 
38514b24e2bSVaishali Kulkarni #define	OSAL_LIST_PUSH_TAIL(_entry_at_end_, _head_) \
38614b24e2bSVaishali Kulkarni 	QEDE_LIST_ADD_TAIL(_entry_at_end_, _head_)
38714b24e2bSVaishali Kulkarni 
38814b24e2bSVaishali Kulkarni #define	qede_list_entry(_entry_ptr_, _type_, _member_) \
389*94c3dad2SToomas Soome 	__containerof(_entry_ptr_, _type_, _member_)
39014b24e2bSVaishali Kulkarni 
39114b24e2bSVaishali Kulkarni #define	qede_list_first_entry(_head_, _type_, _member_) \
39214b24e2bSVaishali Kulkarni 	qede_list_entry((_head_)->next, _type_, _member_)
39314b24e2bSVaishali Kulkarni 
39414b24e2bSVaishali Kulkarni #define	OSAL_LIST_FIRST_ENTRY(_list_, _type_, _member_) \
39514b24e2bSVaishali Kulkarni 	qede_list_first_entry(_list_, _type_, _member_)
39614b24e2bSVaishali Kulkarni 
39714b24e2bSVaishali Kulkarni #define	OSAL_LIST_REMOVE_ENTRY(_entry_, _list_) \
39814b24e2bSVaishali Kulkarni 	QEDE_LIST_REMOVE(_entry_, _list_)
39914b24e2bSVaishali Kulkarni 
40014b24e2bSVaishali Kulkarni 
40114b24e2bSVaishali Kulkarni #define	OSAL_LIST_IS_EMPTY(_head_) \
40214b24e2bSVaishali Kulkarni 	QEDE_LIST_IS_EMPTY(_head_)
40314b24e2bSVaishali Kulkarni 
40414b24e2bSVaishali Kulkarni #define	qede_list_last_entry(_head_, _type_, _member_) \
40514b24e2bSVaishali Kulkarni 	qede_list_entry((_head_)->prev, _type_, _member_)
40614b24e2bSVaishali Kulkarni 
40714b24e2bSVaishali Kulkarni #define qede_list_prev_entry(_entry_, _type_, _member_) \
40814b24e2bSVaishali Kulkarni 	qede_list_entry((_entry_)->_member_.prev, _type_, _member_)
40914b24e2bSVaishali Kulkarni 
41014b24e2bSVaishali Kulkarni #define	qede_list_for_each_entry(_entry_, _head_, _type_, _member_) \
41114b24e2bSVaishali Kulkarni 	for (_entry_ = qede_list_last_entry(_head_, _type_, _member_); \
41214b24e2bSVaishali Kulkarni 	    &_entry_->_member_ != (_head_); \
41314b24e2bSVaishali Kulkarni 	    _entry_ = qede_list_prev_entry(_entry_, _type_, _member_))
41414b24e2bSVaishali Kulkarni 
41514b24e2bSVaishali Kulkarni #define	OSAL_LIST_FOR_EACH_ENTRY(_entry_, _list_, _member_, _type_) \
41614b24e2bSVaishali Kulkarni 	qede_list_for_each_entry(_entry_, _list_, _type_, _member_)
41714b24e2bSVaishali Kulkarni 
41814b24e2bSVaishali Kulkarni #define	qede_list_next_entry(_entry_, _type_, _member_) \
41914b24e2bSVaishali Kulkarni 	qede_list_entry((_entry_)->_member_.next, _type_, _member_)
42014b24e2bSVaishali Kulkarni 
42114b24e2bSVaishali Kulkarni #define	qede_list_for_each_entry_safe(_entry_, _tmp_, _head_, _type_, _member_) \
42214b24e2bSVaishali Kulkarni 	for (_entry_ = qede_list_first_entry(_head_, _type_, _member_), \
42314b24e2bSVaishali Kulkarni 	    _tmp_ = qede_list_next_entry(_entry_, _type_, _member_); \
42414b24e2bSVaishali Kulkarni 	    &_entry_->_member_ != (_head_); \
42514b24e2bSVaishali Kulkarni 	    _entry_ = _tmp_, _tmp_ = qede_list_next_entry(_tmp_, _type_, _member_))
42614b24e2bSVaishali Kulkarni 
42714b24e2bSVaishali Kulkarni #define	OSAL_LIST_FOR_EACH_ENTRY_SAFE(_entry_, _tmp_, _list_, \
42814b24e2bSVaishali Kulkarni 		_member_, _type_) \
42914b24e2bSVaishali Kulkarni 	qede_list_for_each_entry_safe(_entry_, _tmp_, _list_, _type_, \
43014b24e2bSVaishali Kulkarni 	    _member_)
43114b24e2bSVaishali Kulkarni 
43214b24e2bSVaishali Kulkarni /*
43314b24e2bSVaishali Kulkarni  * PCI Access Related OSAL
43414b24e2bSVaishali Kulkarni  */
43514b24e2bSVaishali Kulkarni void qede_osal_pci_read_config_byte(struct ecore_dev *, u32, u8 *);
43614b24e2bSVaishali Kulkarni #define	OSAL_PCI_READ_CONFIG_BYTE(_edev_, _addr_, _dst_) \
43714b24e2bSVaishali Kulkarni 	qede_osal_pci_read_config_byte(_edev_, _addr_, _dst_)
43814b24e2bSVaishali Kulkarni void qede_osal_pci_read_config_word(struct ecore_dev *, u32, u16 *);
43914b24e2bSVaishali Kulkarni #define	OSAL_PCI_READ_CONFIG_WORD(_edev_, _addr_, _dst_) \
44014b24e2bSVaishali Kulkarni 	qede_osal_pci_read_config_word(_edev_, _addr_, _dst_)
44114b24e2bSVaishali Kulkarni void qede_osal_pci_read_config_dword(struct ecore_dev *, u32, u32 *);
44214b24e2bSVaishali Kulkarni #define	OSAL_PCI_READ_CONFIG_DWORD(_edev_, _addr_, _dst_) \
44314b24e2bSVaishali Kulkarni 	qede_osal_pci_read_config_dword(_edev_, _addr_, _dst_)
44414b24e2bSVaishali Kulkarni 
44514b24e2bSVaishali Kulkarni int qede_osal_pci_find_ext_capab(struct ecore_dev *, u16);
44614b24e2bSVaishali Kulkarni #define	OSAL_PCI_FIND_EXT_CAPABILITY(_edev_, _pcie_id_) \
44714b24e2bSVaishali Kulkarni 	qede_osal_pci_find_ext_capab(_edev_, _pcie_id_)
44814b24e2bSVaishali Kulkarni 
44914b24e2bSVaishali Kulkarni void qede_osal_pci_write_config_word(struct ecore_dev *, u32, u16);
45014b24e2bSVaishali Kulkarni #define OSAL_PCI_WRITE_CONFIG_WORD(ecore_dev, address, value)\
45114b24e2bSVaishali Kulkarni 		qede_osal_pci_write_config_word(ecore_dev, address, value)
45214b24e2bSVaishali Kulkarni 
45314b24e2bSVaishali Kulkarni int qede_osal_pci_find_capability(struct ecore_dev *, u16);
45414b24e2bSVaishali Kulkarni #define OSAL_PCI_FIND_CAPABILITY(ecore_dev, pcie_id)\
45514b24e2bSVaishali Kulkarni 	qede_osal_pci_find_capability(ecore_dev, pcie_id)
45614b24e2bSVaishali Kulkarni /*
45714b24e2bSVaishali Kulkarni  * TODO : Can this be turned into a macro ??
45814b24e2bSVaishali Kulkarni  */
45914b24e2bSVaishali Kulkarni u32 qede_osal_bar_size(struct ecore_dev *, u8);
46014b24e2bSVaishali Kulkarni #define	OSAL_BAR_SIZE(_edev_, _bar_id_) \
46114b24e2bSVaishali Kulkarni 	(((bar_id) == 0)? 0x2000000: \
46214b24e2bSVaishali Kulkarni 	 ((bar_id) == 1)? 0x800000: 0)
46314b24e2bSVaishali Kulkarni 
46414b24e2bSVaishali Kulkarni /*
46514b24e2bSVaishali Kulkarni  * Memory Barriers related OSAL
46614b24e2bSVaishali Kulkarni  */
46714b24e2bSVaishali Kulkarni /*
46814b24e2bSVaishali Kulkarni  * TODO :Need to examine the ecore code using this Mem./IO
46914b24e2bSVaishali Kulkarni  * barriers and find out whether they are needed on Solaris
47014b24e2bSVaishali Kulkarni  */
47114b24e2bSVaishali Kulkarni #define	OSAL_MMIOWB(x)	do {} while (0)
47214b24e2bSVaishali Kulkarni #define	OSAL_BARRIER(x)	do {} while (0)
47314b24e2bSVaishali Kulkarni #define	OSAL_SMP_RMB(x)	do {} while (0)
47414b24e2bSVaishali Kulkarni #define	OSAL_SMP_WMB(x)	do {} while (0)
47514b24e2bSVaishali Kulkarni #define	OSAL_RMB(x)	do {} while (0)
47614b24e2bSVaishali Kulkarni #define	OSAL_WMB(x)	do {} while (0)
47714b24e2bSVaishali Kulkarni 
47814b24e2bSVaishali Kulkarni /*
47914b24e2bSVaishali Kulkarni  * SR-IOV Related OSAL
48014b24e2bSVaishali Kulkarni  */
48114b24e2bSVaishali Kulkarni #if 0
48214b24e2bSVaishali Kulkarni enum _ecore_status_t qede_osal_iov_vf_acquire(struct ecore_hwfn *p_hwfn, int vf_id);
48314b24e2bSVaishali Kulkarni #define OSAL_IOV_VF_ACQUIRE(p_hwfn, vf_id)	qede_osal_iov_vf_acquire(p_hwfn, vf_id)
48414b24e2bSVaishali Kulkarni #define	OSAL_VF_SEND_MSG2PF()		OSAL_NULL
48514b24e2bSVaishali Kulkarni #define	OSAL_VF_HANDLE_BULLETIN()	do {} while (0)
48614b24e2bSVaishali Kulkarni #define	OSAL_IOV_CHK_UCAST()	        OSAL_NULL
48714b24e2bSVaishali Kulkarni #define	OSAL_IOV_GET_OS_TYPE		0
48814b24e2bSVaishali Kulkarni #define OSAL_IOV_VF_CLEANUP(p_hwfn,vf_id)
48914b24e2bSVaishali Kulkarni #define OSAL_IOV_VF_VPORT_UPDATE(p_hwfn, vfid, params, tlvs_accepted) (0)
49014b24e2bSVaishali Kulkarni #define OSAL_IOV_POST_START_VPORT(p_hwfn, vfid, vport_id, opaque_fid) {};
49114b24e2bSVaishali Kulkarni 
49214b24e2bSVaishali Kulkarni 
49314b24e2bSVaishali Kulkarni 
49414b24e2bSVaishali Kulkarni #define	OSAL_VF_FILL_ACQUIRE_RESC_REQ(p_hwfn, req, vf_sw_info)	{}
49514b24e2bSVaishali Kulkarni #define OSAL_VF_UPDATE_ACQUIRE_RESC_RESP(p_hwfn, res) (0)
49614b24e2bSVaishali Kulkarni #else
49714b24e2bSVaishali Kulkarni #define	OSAL_VF_SEND_MSG2PF()		OSAL_NULL
49814b24e2bSVaishali Kulkarni #define OSAL_IOV_POST_START_VPORT(p_hwfn, vfid, vport_id, opaque_fid) {};
49914b24e2bSVaishali Kulkarni #define OSAL_IOV_CHK_UCAST(hwfn, vfid, params) (0)
50014b24e2bSVaishali Kulkarni #define OSAL_PF_VF_MSG(hwfn, vfid) (0)
50114b24e2bSVaishali Kulkarni #define OSAL_VF_FLR_UPDATE(hw_fn) {}
50214b24e2bSVaishali Kulkarni #define OSAL_IOV_VF_ACQUIRE(p_hwfn, vf_id) (0)
50314b24e2bSVaishali Kulkarni #define OSAL_IOV_VF_CLEANUP(p_hwfn,vf_id)
50414b24e2bSVaishali Kulkarni #define OSAL_IOV_VF_VPORT_UPDATE(p_hwfn, vfid, params, tlvs_accepted) (0)
50514b24e2bSVaishali Kulkarni #define OSAL_VF_FILL_ACQUIRE_RESC_REQ(p_hwfn, req, vf_sw_info) {};
50614b24e2bSVaishali Kulkarni 
50714b24e2bSVaishali Kulkarni #define OSAL_VF_UPDATE_ACQUIRE_RESC_RESP(p_hwfn, res) (0)
50814b24e2bSVaishali Kulkarni 
50914b24e2bSVaishali Kulkarni #define	OSAL_IOV_GET_OS_TYPE()	0
51014b24e2bSVaishali Kulkarni 
51114b24e2bSVaishali Kulkarni #endif
51214b24e2bSVaishali Kulkarni /*
51314b24e2bSVaishali Kulkarni  * Miscellaneous OSAL
51414b24e2bSVaishali Kulkarni  */
51514b24e2bSVaishali Kulkarni #define	OSAL_ASSERT(is_assert)		ASSERT(is_assert)
51614b24e2bSVaishali Kulkarni 
51714b24e2bSVaishali Kulkarni void qede_print(char *format, ...);
51814b24e2bSVaishali Kulkarni #define OSAL_WARN(is_warn, _fmt, ...) \
51914b24e2bSVaishali Kulkarni      	if(is_warn) { \
52014b24e2bSVaishali Kulkarni 		do { \
52114b24e2bSVaishali Kulkarni 	       		qede_print("!"_fmt, ##__VA_ARGS__); \
52214b24e2bSVaishali Kulkarni 		} while (0); \
52314b24e2bSVaishali Kulkarni 	}
52414b24e2bSVaishali Kulkarni unsigned long log2_align(unsigned long n);
52514b24e2bSVaishali Kulkarni 
52614b24e2bSVaishali Kulkarni /* TODO: Verify this helper */
52714b24e2bSVaishali Kulkarni #define	OSAL_ROUNDUP_POW_OF_TWO		log2_align
52814b24e2bSVaishali Kulkarni 
52914b24e2bSVaishali Kulkarni u32 LOG2(u32);
53014b24e2bSVaishali Kulkarni #define	OSAL_LOG2	LOG2
53114b24e2bSVaishali Kulkarni 
53214b24e2bSVaishali Kulkarni /* Needed if ecore_roce.c is included */
53314b24e2bSVaishali Kulkarni #define	OSAL_NUM_ACTIVE_CPU()			(0)
53414b24e2bSVaishali Kulkarni #define	DIV_ROUND_UP(n, d)		(((n) + (d) - 1) / (d))
53514b24e2bSVaishali Kulkarni #define	ROUNDUP(x, y)			((((x) + ((y) - 1)) / (y)) * (y))
53614b24e2bSVaishali Kulkarni 
53714b24e2bSVaishali Kulkarni 
53814b24e2bSVaishali Kulkarni /*
53914b24e2bSVaishali Kulkarni  * @VB: Don't want to include sys/sysmacros.h just
54014b24e2bSVaishali Kulkarni  * for the offsetof macro
54114b24e2bSVaishali Kulkarni  */
54214b24e2bSVaishali Kulkarni #ifndef	OFFSETOF
54314b24e2bSVaishali Kulkarni #define	OFFSETOF(type, member)		((size_t) (&(((type *)0)->member)))
54414b24e2bSVaishali Kulkarni /*#define offsetof(type, member)          ((size_t) (&(((type *)0)->member)))*/
54514b24e2bSVaishali Kulkarni #endif
54614b24e2bSVaishali Kulkarni 
54714b24e2bSVaishali Kulkarni #ifndef offsetof
54814b24e2bSVaishali Kulkarni #define offsetof(type, member)          ((size_t) (&(((type *)0)->member)))
54914b24e2bSVaishali Kulkarni #endif
55014b24e2bSVaishali Kulkarni 
55114b24e2bSVaishali Kulkarni void qede_print(char *format, ...);
55214b24e2bSVaishali Kulkarni void qede_print_err(char *format, ...);
55314b24e2bSVaishali Kulkarni 
55414b24e2bSVaishali Kulkarni #define	PRINT(_dp_ctx, _fmt, ...) \
55514b24e2bSVaishali Kulkarni 	do { \
55614b24e2bSVaishali Kulkarni 		qede_print("!"_fmt, ##__VA_ARGS__); \
55714b24e2bSVaishali Kulkarni 	} while (0);
55814b24e2bSVaishali Kulkarni #define	PRINT_ERR(_dp_ctx, _fmt, ...) \
55914b24e2bSVaishali Kulkarni 	do { \
56014b24e2bSVaishali Kulkarni 		qede_print_err("!"_fmt, ##__VA_ARGS__); \
56114b24e2bSVaishali Kulkarni 	} while (0);
56214b24e2bSVaishali Kulkarni 
56314b24e2bSVaishali Kulkarni void qede_debug_before_pf_start(struct ecore_dev *edev, u8 id);
56414b24e2bSVaishali Kulkarni void qede_debug_after_pf_stop(void *cdev, u8 my_id);
56514b24e2bSVaishali Kulkarni 
56614b24e2bSVaishali Kulkarni #define OSAL_BEFORE_PF_START(ptr, id)	qede_debug_before_pf_start(ptr, id)
56714b24e2bSVaishali Kulkarni #define	OSAL_AFTER_PF_STOP(ptr, id)	qede_debug_after_pf_stop(ptr, id)
56814b24e2bSVaishali Kulkarni 
56914b24e2bSVaishali Kulkarni #define cpu_to_le32(val)	((val))
57014b24e2bSVaishali Kulkarni #define le32_to_cpu(val)	((val))
57114b24e2bSVaishali Kulkarni #define le16_to_cpu(val) 	((val))
57214b24e2bSVaishali Kulkarni #define cpu_to_le16(val) 	((val))
57314b24e2bSVaishali Kulkarni #define OSAL_BUILD_BUG_ON(cond) nothing
57414b24e2bSVaishali Kulkarni #ifndef ARRAY_SIZE
57514b24e2bSVaishali Kulkarni #define ARRAY_SIZE(_arr)	(sizeof(_arr) / sizeof((_arr)[0]))
57614b24e2bSVaishali Kulkarni #endif
57714b24e2bSVaishali Kulkarni #define BUILD_BUG_ON(cond)	nothing
57814b24e2bSVaishali Kulkarni #define true 1
57914b24e2bSVaishali Kulkarni #define false 0
58014b24e2bSVaishali Kulkarni #define OSAL_VF_CQE_COMPLETION(_dev_p, _cqe, _protocol) (0)
58114b24e2bSVaishali Kulkarni #define OSAL_INLINE inline
58214b24e2bSVaishali Kulkarni #define OSAL_SPRINTF qede_sprintf
58314b24e2bSVaishali Kulkarni #define OSAL_STRLEN strlen
58414b24e2bSVaishali Kulkarni #define OSAL_STRCPY strcpy
58514b24e2bSVaishali Kulkarni #define OSAL_STRNCPY strncpy
58614b24e2bSVaishali Kulkarni #define OSAL_PAGE_BITS  12
58714b24e2bSVaishali Kulkarni #define OSAL_PAGE_SIZE (1 << OSAL_PAGE_BITS)
58814b24e2bSVaishali Kulkarni #define OSAL_UNLIKELY
58914b24e2bSVaishali Kulkarni #define ARRAY_DECL static const
59014b24e2bSVaishali Kulkarni 
59114b24e2bSVaishali Kulkarni #define OSAL_BUILD_BUG_ON(cond) nothing
59214b24e2bSVaishali Kulkarni 
59314b24e2bSVaishali Kulkarni #define OSAL_MIN_T(type, __min1, __min2)        \
59414b24e2bSVaishali Kulkarni         ((type)(__min1) < (type)(__min2) ? (type)(__min1) : (type)(__min2))
59514b24e2bSVaishali Kulkarni #define OSAL_MAX_T(type, __max1, __max2)        \
59614b24e2bSVaishali Kulkarni         ((type)(__max1) > (type)(__max2) ? (type)(__max1) : (type)(__max2))
59714b24e2bSVaishali Kulkarni 
59814b24e2bSVaishali Kulkarni #define	OSAL_ARRAY_SIZE(arr)	ARRAY_SIZE(arr)
59914b24e2bSVaishali Kulkarni 
60014b24e2bSVaishali Kulkarni void OSAL_CRC8_POPULATE(u8 * cdu_crc8_table, u8 polynomial);
60114b24e2bSVaishali Kulkarni 
60214b24e2bSVaishali Kulkarni u8 OSAL_CRC8(u8 * cdu_crc8_table, u8 * data_to_crc, int data_to_crc_len, u8 init_value);
60314b24e2bSVaishali Kulkarni 
60414b24e2bSVaishali Kulkarni #define OSAL_CACHE_LINE_SIZE 64
60514b24e2bSVaishali Kulkarni #define OSAL_NUM_CPUS()  (0)
60614b24e2bSVaishali Kulkarni 
60714b24e2bSVaishali Kulkarni void OSAL_DPC_SYNC(struct ecore_hwfn *p_hwfn);
60814b24e2bSVaishali Kulkarni /*
60914b24e2bSVaishali Kulkarni  *  * TODO:  Need to implement
61014b24e2bSVaishali Kulkarni  *   * Call from the ecore to get the statististics of a protocol driver. Ecore client
61114b24e2bSVaishali Kulkarni  *    * need to populate the requested statistics. If the PF has more than one function,
61214b24e2bSVaishali Kulkarni  *     * driver should return the statistics sum of all the interfaces under the PF.
61314b24e2bSVaishali Kulkarni  *      */
61414b24e2bSVaishali Kulkarni #define OSAL_GET_PROTOCOL_STATS(_ecore_dev, _type, _stats) \
61514b24e2bSVaishali Kulkarni 	;
61614b24e2bSVaishali Kulkarni 
61714b24e2bSVaishali Kulkarni /*
61814b24e2bSVaishali Kulkarni  *  * TODO:  Need to implement
61914b24e2bSVaishali Kulkarni  *   * Call from ecore to the upper layer driver to request IRQs for the slowpath
62014b24e2bSVaishali Kulkarni  *    * interrupts handling.
62114b24e2bSVaishali Kulkarni  *     */
62214b24e2bSVaishali Kulkarni #define OSAL_SLOWPATH_IRQ_REQ(p_hwfn) \
62314b24e2bSVaishali Kulkarni 	(ECORE_SUCCESS)
62414b24e2bSVaishali Kulkarni 
62514b24e2bSVaishali Kulkarni 
62614b24e2bSVaishali Kulkarni 
62714b24e2bSVaishali Kulkarni //void OSAL_HW_ERROR_OCCURRED(struct ecore_hwfn *, enum ecore_hw_err_type);
62814b24e2bSVaishali Kulkarni /*#define OSAL_HW_ERROR_OCCURRED(p_hwfn, err) \
62914b24e2bSVaishali Kulkarni 	qede_osal_hw_error_occurred(p_hwfn, err)
63014b24e2bSVaishali Kulkarni */
63114b24e2bSVaishali Kulkarni 
63214b24e2bSVaishali Kulkarni #define	OSAL_HW_ERROR_OCCURRED(p_hwfn, err)	nothing
63314b24e2bSVaishali Kulkarni 
63414b24e2bSVaishali Kulkarni void qede_osal_poll_mode_dpc(struct ecore_hwfn *);
63514b24e2bSVaishali Kulkarni #define OSAL_POLL_MODE_DPC(p_hwfn) \
63614b24e2bSVaishali Kulkarni 	qede_osal_poll_mode_dpc(p_hwfn)
63714b24e2bSVaishali Kulkarni 
63814b24e2bSVaishali Kulkarni int qede_osal_bitmap_weight(unsigned long *, uint32_t);
63914b24e2bSVaishali Kulkarni #define OSAL_BITMAP_WEIGHT(bitmap, nbits) \
64014b24e2bSVaishali Kulkarni 	qede_osal_bitmap_weight(bitmap, nbits)
64114b24e2bSVaishali Kulkarni 
64214b24e2bSVaishali Kulkarni void qede_osal_mfw_tlv_req(struct ecore_hwfn *);
64314b24e2bSVaishali Kulkarni #define OSAL_MFW_TLV_REQ(p_hwfn) \
64414b24e2bSVaishali Kulkarni 	qede_osal_mfw_tlv_req(p_hwfn)
64514b24e2bSVaishali Kulkarni 
64614b24e2bSVaishali Kulkarni u32 qede_osal_crc32(u32, u8 *, u64);
64714b24e2bSVaishali Kulkarni #define OSAL_CRC32(crc, buf, length) \
64814b24e2bSVaishali Kulkarni         qede_osal_crc32(crc, buf, length)
64914b24e2bSVaishali Kulkarni 
65014b24e2bSVaishali Kulkarni void qede_osal_hw_info_change(struct ecore_hwfn *, int);
65114b24e2bSVaishali Kulkarni #define OSAL_HW_INFO_CHANGE(p_hwfn, change) \
65214b24e2bSVaishali Kulkarni 	qede_osal_hw_info_change(p_hwfn, change)
65314b24e2bSVaishali Kulkarni 
65414b24e2bSVaishali Kulkarni 
65514b24e2bSVaishali Kulkarni #endif /* _BCM_OSAL_H */
656