1*a3667aaeSNaresh Kumar Inna /* 2*a3667aaeSNaresh Kumar Inna * This file is part of the Chelsio FCoE driver for Linux. 3*a3667aaeSNaresh Kumar Inna * 4*a3667aaeSNaresh Kumar Inna * Copyright (c) 2008-2012 Chelsio Communications, Inc. All rights reserved. 5*a3667aaeSNaresh Kumar Inna * 6*a3667aaeSNaresh Kumar Inna * This software is available to you under a choice of one of two 7*a3667aaeSNaresh Kumar Inna * licenses. You may choose to be licensed under the terms of the GNU 8*a3667aaeSNaresh Kumar Inna * General Public License (GPL) Version 2, available from the file 9*a3667aaeSNaresh Kumar Inna * COPYING in the main directory of this source tree, or the 10*a3667aaeSNaresh Kumar Inna * OpenIB.org BSD license below: 11*a3667aaeSNaresh Kumar Inna * 12*a3667aaeSNaresh Kumar Inna * Redistribution and use in source and binary forms, with or 13*a3667aaeSNaresh Kumar Inna * without modification, are permitted provided that the following 14*a3667aaeSNaresh Kumar Inna * conditions are met: 15*a3667aaeSNaresh Kumar Inna * 16*a3667aaeSNaresh Kumar Inna * - Redistributions of source code must retain the above 17*a3667aaeSNaresh Kumar Inna * copyright notice, this list of conditions and the following 18*a3667aaeSNaresh Kumar Inna * disclaimer. 19*a3667aaeSNaresh Kumar Inna * 20*a3667aaeSNaresh Kumar Inna * - Redistributions in binary form must reproduce the above 21*a3667aaeSNaresh Kumar Inna * copyright notice, this list of conditions and the following 22*a3667aaeSNaresh Kumar Inna * disclaimer in the documentation and/or other materials 23*a3667aaeSNaresh Kumar Inna * provided with the distribution. 24*a3667aaeSNaresh Kumar Inna * 25*a3667aaeSNaresh Kumar Inna * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 26*a3667aaeSNaresh Kumar Inna * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 27*a3667aaeSNaresh Kumar Inna * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 28*a3667aaeSNaresh Kumar Inna * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 29*a3667aaeSNaresh Kumar Inna * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 30*a3667aaeSNaresh Kumar Inna * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 31*a3667aaeSNaresh Kumar Inna * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 32*a3667aaeSNaresh Kumar Inna * SOFTWARE. 33*a3667aaeSNaresh Kumar Inna */ 34*a3667aaeSNaresh Kumar Inna 35*a3667aaeSNaresh Kumar Inna #ifndef __CSIO_DEFS_H__ 36*a3667aaeSNaresh Kumar Inna #define __CSIO_DEFS_H__ 37*a3667aaeSNaresh Kumar Inna 38*a3667aaeSNaresh Kumar Inna #include <linux/kernel.h> 39*a3667aaeSNaresh Kumar Inna #include <linux/stddef.h> 40*a3667aaeSNaresh Kumar Inna #include <linux/timer.h> 41*a3667aaeSNaresh Kumar Inna #include <linux/list.h> 42*a3667aaeSNaresh Kumar Inna #include <linux/bug.h> 43*a3667aaeSNaresh Kumar Inna #include <linux/pci.h> 44*a3667aaeSNaresh Kumar Inna #include <linux/jiffies.h> 45*a3667aaeSNaresh Kumar Inna 46*a3667aaeSNaresh Kumar Inna #define CSIO_INVALID_IDX 0xFFFFFFFF 47*a3667aaeSNaresh Kumar Inna #define CSIO_INC_STATS(elem, val) ((elem)->stats.val++) 48*a3667aaeSNaresh Kumar Inna #define CSIO_DEC_STATS(elem, val) ((elem)->stats.val--) 49*a3667aaeSNaresh Kumar Inna #define CSIO_VALID_WWN(__n) ((*__n >> 4) == 0x5 ? true : false) 50*a3667aaeSNaresh Kumar Inna #define CSIO_DID_MASK 0xFFFFFF 51*a3667aaeSNaresh Kumar Inna #define CSIO_WORD_TO_BYTE 4 52*a3667aaeSNaresh Kumar Inna 53*a3667aaeSNaresh Kumar Inna #ifndef readq 54*a3667aaeSNaresh Kumar Inna static inline u64 readq(void __iomem *addr) 55*a3667aaeSNaresh Kumar Inna { 56*a3667aaeSNaresh Kumar Inna return readl(addr) + ((u64)readl(addr + 4) << 32); 57*a3667aaeSNaresh Kumar Inna } 58*a3667aaeSNaresh Kumar Inna 59*a3667aaeSNaresh Kumar Inna static inline void writeq(u64 val, void __iomem *addr) 60*a3667aaeSNaresh Kumar Inna { 61*a3667aaeSNaresh Kumar Inna writel(val, addr); 62*a3667aaeSNaresh Kumar Inna writel(val >> 32, addr + 4); 63*a3667aaeSNaresh Kumar Inna } 64*a3667aaeSNaresh Kumar Inna #endif 65*a3667aaeSNaresh Kumar Inna 66*a3667aaeSNaresh Kumar Inna static inline int 67*a3667aaeSNaresh Kumar Inna csio_list_deleted(struct list_head *list) 68*a3667aaeSNaresh Kumar Inna { 69*a3667aaeSNaresh Kumar Inna return ((list->next == list) && (list->prev == list)); 70*a3667aaeSNaresh Kumar Inna } 71*a3667aaeSNaresh Kumar Inna 72*a3667aaeSNaresh Kumar Inna #define csio_list_next(elem) (((struct list_head *)(elem))->next) 73*a3667aaeSNaresh Kumar Inna #define csio_list_prev(elem) (((struct list_head *)(elem))->prev) 74*a3667aaeSNaresh Kumar Inna 75*a3667aaeSNaresh Kumar Inna /* State machine */ 76*a3667aaeSNaresh Kumar Inna typedef void (*csio_sm_state_t)(void *, uint32_t); 77*a3667aaeSNaresh Kumar Inna 78*a3667aaeSNaresh Kumar Inna struct csio_sm { 79*a3667aaeSNaresh Kumar Inna struct list_head sm_list; 80*a3667aaeSNaresh Kumar Inna csio_sm_state_t sm_state; 81*a3667aaeSNaresh Kumar Inna }; 82*a3667aaeSNaresh Kumar Inna 83*a3667aaeSNaresh Kumar Inna static inline void 84*a3667aaeSNaresh Kumar Inna csio_set_state(void *smp, void *state) 85*a3667aaeSNaresh Kumar Inna { 86*a3667aaeSNaresh Kumar Inna ((struct csio_sm *)smp)->sm_state = (csio_sm_state_t)state; 87*a3667aaeSNaresh Kumar Inna } 88*a3667aaeSNaresh Kumar Inna 89*a3667aaeSNaresh Kumar Inna static inline void 90*a3667aaeSNaresh Kumar Inna csio_init_state(struct csio_sm *smp, void *state) 91*a3667aaeSNaresh Kumar Inna { 92*a3667aaeSNaresh Kumar Inna csio_set_state(smp, state); 93*a3667aaeSNaresh Kumar Inna } 94*a3667aaeSNaresh Kumar Inna 95*a3667aaeSNaresh Kumar Inna static inline void 96*a3667aaeSNaresh Kumar Inna csio_post_event(void *smp, uint32_t evt) 97*a3667aaeSNaresh Kumar Inna { 98*a3667aaeSNaresh Kumar Inna ((struct csio_sm *)smp)->sm_state(smp, evt); 99*a3667aaeSNaresh Kumar Inna } 100*a3667aaeSNaresh Kumar Inna 101*a3667aaeSNaresh Kumar Inna static inline csio_sm_state_t 102*a3667aaeSNaresh Kumar Inna csio_get_state(void *smp) 103*a3667aaeSNaresh Kumar Inna { 104*a3667aaeSNaresh Kumar Inna return ((struct csio_sm *)smp)->sm_state; 105*a3667aaeSNaresh Kumar Inna } 106*a3667aaeSNaresh Kumar Inna 107*a3667aaeSNaresh Kumar Inna static inline bool 108*a3667aaeSNaresh Kumar Inna csio_match_state(void *smp, void *state) 109*a3667aaeSNaresh Kumar Inna { 110*a3667aaeSNaresh Kumar Inna return (csio_get_state(smp) == (csio_sm_state_t)state); 111*a3667aaeSNaresh Kumar Inna } 112*a3667aaeSNaresh Kumar Inna 113*a3667aaeSNaresh Kumar Inna #define CSIO_ASSERT(cond) BUG_ON(!(cond)) 114*a3667aaeSNaresh Kumar Inna 115*a3667aaeSNaresh Kumar Inna #ifdef __CSIO_DEBUG__ 116*a3667aaeSNaresh Kumar Inna #define CSIO_DB_ASSERT(__c) CSIO_ASSERT((__c)) 117*a3667aaeSNaresh Kumar Inna #else 118*a3667aaeSNaresh Kumar Inna #define CSIO_DB_ASSERT(__c) 119*a3667aaeSNaresh Kumar Inna #endif 120*a3667aaeSNaresh Kumar Inna 121*a3667aaeSNaresh Kumar Inna #endif /* ifndef __CSIO_DEFS_H__ */ 122