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