Zhu Yi | b481de9 | 2007-09-25 17:54:57 -0700 | [diff] [blame] | 1 | /****************************************************************************** |
| 2 | * |
Reinette Chatre | eb7ae89 | 2008-03-11 16:17:17 -0700 | [diff] [blame] | 3 | * Copyright(c) 2003 - 2008 Intel Corporation. All rights reserved. |
Zhu Yi | b481de9 | 2007-09-25 17:54:57 -0700 | [diff] [blame] | 4 | * |
| 5 | * Portions of this file are derived from the ipw3945 project, as well |
| 6 | * as portions of the ieee80211 subsystem header files. |
| 7 | * |
| 8 | * This program is free software; you can redistribute it and/or modify it |
| 9 | * under the terms of version 2 of the GNU General Public License as |
| 10 | * published by the Free Software Foundation. |
| 11 | * |
| 12 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 13 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| 14 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 15 | * more details. |
| 16 | * |
| 17 | * You should have received a copy of the GNU General Public License along with |
| 18 | * this program; if not, write to the Free Software Foundation, Inc., |
| 19 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA |
| 20 | * |
| 21 | * The full GNU General Public License is included in this distribution in the |
| 22 | * file called LICENSE. |
| 23 | * |
| 24 | * Contact Information: |
Winkler, Tomas | 759ef89 | 2008-12-09 11:28:58 -0800 | [diff] [blame^] | 25 | * Intel Linux Wireless <ilw@linux.intel.com> |
Zhu Yi | b481de9 | 2007-09-25 17:54:57 -0700 | [diff] [blame] | 26 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 27 | * |
| 28 | *****************************************************************************/ |
| 29 | |
| 30 | #ifndef __iwl_helpers_h__ |
| 31 | #define __iwl_helpers_h__ |
| 32 | |
| 33 | #include <linux/ctype.h> |
| 34 | |
Zhu Yi | b481de9 | 2007-09-25 17:54:57 -0700 | [diff] [blame] | 35 | #define KELVIN_TO_CELSIUS(x) ((x)-273) |
| 36 | #define CELSIUS_TO_KELVIN(x) ((x)+273) |
Tomas Winkler | da1bc45 | 2008-05-29 16:35:00 +0800 | [diff] [blame] | 37 | #define IWL_MASK(lo, hi) ((1 << (hi)) | ((1 << (hi)) - (1 << (lo)))) |
| 38 | |
Zhu Yi | b481de9 | 2007-09-25 17:54:57 -0700 | [diff] [blame] | 39 | |
Zhu Yi | b481de9 | 2007-09-25 17:54:57 -0700 | [diff] [blame] | 40 | static inline struct ieee80211_conf *ieee80211_get_hw_conf( |
| 41 | struct ieee80211_hw *hw) |
| 42 | { |
| 43 | return &hw->conf; |
| 44 | } |
| 45 | |
Zhu Yi | b481de9 | 2007-09-25 17:54:57 -0700 | [diff] [blame] | 46 | static inline int iwl_check_bits(unsigned long field, unsigned long mask) |
| 47 | { |
| 48 | return ((field & mask) == mask) ? 1 : 0; |
| 49 | } |
| 50 | |
| 51 | static inline unsigned long elapsed_jiffies(unsigned long start, |
| 52 | unsigned long end) |
| 53 | { |
Eric Sandeen | 9e7d1a4 | 2008-01-24 15:47:39 -0500 | [diff] [blame] | 54 | if (end >= start) |
Zhu Yi | b481de9 | 2007-09-25 17:54:57 -0700 | [diff] [blame] | 55 | return end - start; |
| 56 | |
Eric Sandeen | 9e7d1a4 | 2008-01-24 15:47:39 -0500 | [diff] [blame] | 57 | return end + (MAX_JIFFY_OFFSET - start) + 1; |
Zhu Yi | b481de9 | 2007-09-25 17:54:57 -0700 | [diff] [blame] | 58 | } |
| 59 | |
Tomas Winkler | c54b679 | 2008-03-06 17:36:53 -0800 | [diff] [blame] | 60 | /** |
| 61 | * iwl_queue_inc_wrap - increment queue index, wrap back to beginning |
| 62 | * @index -- current index |
| 63 | * @n_bd -- total number of entries in queue (must be power of 2) |
| 64 | */ |
| 65 | static inline int iwl_queue_inc_wrap(int index, int n_bd) |
| 66 | { |
| 67 | return ++index & (n_bd - 1); |
| 68 | } |
| 69 | |
| 70 | /** |
| 71 | * iwl_queue_dec_wrap - decrement queue index, wrap back to end |
| 72 | * @index -- current index |
| 73 | * @n_bd -- total number of entries in queue (must be power of 2) |
| 74 | */ |
| 75 | static inline int iwl_queue_dec_wrap(int index, int n_bd) |
| 76 | { |
| 77 | return --index & (n_bd - 1); |
| 78 | } |
| 79 | |
Tomas Winkler | 98c9221 | 2008-01-14 17:46:20 -0800 | [diff] [blame] | 80 | /* TODO: Move fw_desc functions to iwl-pci.ko */ |
| 81 | static inline void iwl_free_fw_desc(struct pci_dev *pci_dev, |
| 82 | struct fw_desc *desc) |
| 83 | { |
| 84 | if (desc->v_addr) |
| 85 | pci_free_consistent(pci_dev, desc->len, |
| 86 | desc->v_addr, desc->p_addr); |
| 87 | desc->v_addr = NULL; |
| 88 | desc->len = 0; |
| 89 | } |
| 90 | |
| 91 | static inline int iwl_alloc_fw_desc(struct pci_dev *pci_dev, |
| 92 | struct fw_desc *desc) |
| 93 | { |
| 94 | desc->v_addr = pci_alloc_consistent(pci_dev, desc->len, &desc->p_addr); |
| 95 | return (desc->v_addr != NULL) ? 0 : -ENOMEM; |
| 96 | } |
| 97 | |
Zhu Yi | b481de9 | 2007-09-25 17:54:57 -0700 | [diff] [blame] | 98 | #endif /* __iwl_helpers_h__ */ |