1/****************************************************************************** 2 * 3 * Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. 4 * 5 * Portions of this file are derived from the ipw3945 project. 6 * 7 * This program is free software; you can redistribute it and/or modify it 8 * under the terms of version 2 of the GNU General Public License as 9 * published by the Free Software Foundation. 10 * 11 * This program is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 14 * more details. 15 * 16 * You should have received a copy of the GNU General Public License along with 17 * this program; if not, write to the Free Software Foundation, Inc., 18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA 19 * 20 * The full GNU General Public License is included in this distribution in the 21 * file called LICENSE. 22 * 23 * Contact Information: 24 * Intel Linux Wireless <ilw@linux.intel.com> 25 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 26 * 27 *****************************************************************************/ 28 29#ifndef __iwl_io_h__ 30#define __iwl_io_h__ 31 32#include "iwl-devtrace.h" 33#include "iwl-trans.h" 34 35static inline void iwl_write8(struct iwl_trans *trans, u32 ofs, u8 val) 36{ 37 trace_iwlwifi_dev_iowrite8(trans->dev, ofs, val); 38 iwl_trans_write8(trans, ofs, val); 39} 40 41static inline void iwl_write32(struct iwl_trans *trans, u32 ofs, u32 val) 42{ 43 trace_iwlwifi_dev_iowrite32(trans->dev, ofs, val); 44 iwl_trans_write32(trans, ofs, val); 45} 46 47static inline u32 iwl_read32(struct iwl_trans *trans, u32 ofs) 48{ 49 u32 val = iwl_trans_read32(trans, ofs); 50 trace_iwlwifi_dev_ioread32(trans->dev, ofs, val); 51 return val; 52} 53 54static inline void iwl_set_bit(struct iwl_trans *trans, u32 reg, u32 mask) 55{ 56 iwl_trans_set_bits_mask(trans, reg, mask, mask); 57} 58 59static inline void iwl_clear_bit(struct iwl_trans *trans, u32 reg, u32 mask) 60{ 61 iwl_trans_set_bits_mask(trans, reg, mask, 0); 62} 63 64int iwl_poll_bit(struct iwl_trans *trans, u32 addr, 65 u32 bits, u32 mask, int timeout); 66int iwl_poll_direct_bit(struct iwl_trans *trans, u32 addr, u32 mask, 67 int timeout); 68 69u32 iwl_read_direct32(struct iwl_trans *trans, u32 reg); 70void iwl_write_direct32(struct iwl_trans *trans, u32 reg, u32 value); 71 72 73u32 __iwl_read_prph(struct iwl_trans *trans, u32 ofs); 74u32 iwl_read_prph(struct iwl_trans *trans, u32 ofs); 75void __iwl_write_prph(struct iwl_trans *trans, u32 ofs, u32 val); 76void iwl_write_prph(struct iwl_trans *trans, u32 ofs, u32 val); 77int iwl_poll_prph_bit(struct iwl_trans *trans, u32 addr, 78 u32 bits, u32 mask, int timeout); 79void iwl_set_bits_prph(struct iwl_trans *trans, u32 ofs, u32 mask); 80void iwl_set_bits_mask_prph(struct iwl_trans *trans, u32 ofs, 81 u32 bits, u32 mask); 82void iwl_clear_bits_prph(struct iwl_trans *trans, u32 ofs, u32 mask); 83void iwl_force_nmi(struct iwl_trans *trans); 84 85/* Error handling */ 86int iwl_dump_fh(struct iwl_trans *trans, char **buf); 87 88#endif 89