diff --git a/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/BUILD.gn b/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/BUILD.gn index ed97fa7f8a16007d75f817a1227031540b16ee66..fc224f4e88d5b43249276c8d051816ee3d3c6971 100644 --- a/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/BUILD.gn +++ b/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/BUILD.gn @@ -34,6 +34,7 @@ driver_module("iwlwifi_driver") { "iwl-drv.c", "iwl-drv.h", "iwl-fh.h", + "iwl-io.c", "iwl-phy-db.c", "iwl-trans.c", "iwl-trans.h", diff --git a/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/fuchsia_porting.h b/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/fuchsia_porting.h index 4c42edaf3f591327984bf8b35d1b4bc6a1d835e8..c28f3492b5ed31df972c948a13f19d7573bc3787 100644 --- a/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/fuchsia_porting.h +++ b/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/fuchsia_porting.h @@ -47,6 +47,9 @@ typedef char* acpi_string; #define le32_to_cpup(x) (*x) #define cpu_to_le32(x) (x) +#define lower_32_bits(x) (x & 0xffffffff) +#define upper_32_bits(x) (x >> 32) + #define BITS_PER_LONG (sizeof(long) * 8) #define BITS_TO_LONGS(nr) (nr / BITS_PER_LONG) diff --git a/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-io.c b/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-io.c index 5018c954c7746d2dbcadbe931de969b3922ae27c..4188ef16626686dad933e3c5e585c5567ee31a22 100644 --- a/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-io.c +++ b/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-io.c @@ -31,59 +31,49 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * *****************************************************************************/ -#include <linux/delay.h> -#include <linux/device.h> -#include <linux/export.h> -#include "iwl-csr.h" -#include "iwl-debug.h" -#include "iwl-drv.h" -#include "iwl-fh.h" -#include "iwl-io.h" -#include "iwl-prph.h" +#include <zircon/syscalls.h> + +#include "src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-csr.h" +#include "src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-debug.h" +#include "src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-drv.h" +#include "src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-fh.h" +#include "src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-io.h" +#include "src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-prph.h" void iwl_write8(struct iwl_trans* trans, uint32_t ofs, uint8_t val) { - trace_iwlwifi_dev_iowrite8(trans->dev, ofs, val); iwl_trans_write8(trans, ofs, val); } -IWL_EXPORT_SYMBOL(iwl_write8); void iwl_write32(struct iwl_trans* trans, uint32_t ofs, uint32_t val) { - trace_iwlwifi_dev_iowrite32(trans->dev, ofs, val); iwl_trans_write32(trans, ofs, val); } -IWL_EXPORT_SYMBOL(iwl_write32); void iwl_write64(struct iwl_trans* trans, uint64_t ofs, uint64_t val) { - trace_iwlwifi_dev_iowrite64(trans->dev, ofs, val); iwl_trans_write32(trans, ofs, lower_32_bits(val)); iwl_trans_write32(trans, ofs + 4, upper_32_bits(val)); } -IWL_EXPORT_SYMBOL(iwl_write64); uint32_t iwl_read32(struct iwl_trans* trans, uint32_t ofs) { uint32_t val = iwl_trans_read32(trans, ofs); - trace_iwlwifi_dev_ioread32(trans->dev, ofs, val); return val; } -IWL_EXPORT_SYMBOL(iwl_read32); #define IWL_POLL_INTERVAL 10 /* microseconds */ -int iwl_poll_bit(struct iwl_trans* trans, uint32_t addr, uint32_t bits, uint32_t mask, - int timeout) { +zx_status_t iwl_poll_bit(struct iwl_trans* trans, uint32_t addr, uint32_t bits, uint32_t mask, + int timeout) { int t = 0; do { if ((iwl_read32(trans, addr) & mask) == (bits & mask)) { return t; } - udelay(IWL_POLL_INTERVAL); + zx_nanosleep(zx_deadline_after(ZX_USEC(IWL_POLL_INTERVAL))); t += IWL_POLL_INTERVAL; } while (t < timeout); - return -ETIMEDOUT; + return ZX_ERR_TIMED_OUT; } -IWL_EXPORT_SYMBOL(iwl_poll_bit); uint32_t iwl_read_direct32(struct iwl_trans* trans, uint32_t reg) { uint32_t value = 0x5a5a5a5a; @@ -95,7 +85,6 @@ uint32_t iwl_read_direct32(struct iwl_trans* trans, uint32_t reg) { return value; } -IWL_EXPORT_SYMBOL(iwl_read_direct32); void iwl_write_direct32(struct iwl_trans* trans, uint32_t reg, uint32_t value) { unsigned long flags; @@ -105,7 +94,6 @@ void iwl_write_direct32(struct iwl_trans* trans, uint32_t reg, uint32_t value) { iwl_trans_release_nic_access(trans, &flags); } } -IWL_EXPORT_SYMBOL(iwl_write_direct32); void iwl_write_direct64(struct iwl_trans* trans, uint64_t reg, uint64_t value) { unsigned long flags; @@ -115,40 +103,32 @@ void iwl_write_direct64(struct iwl_trans* trans, uint64_t reg, uint64_t value) { iwl_trans_release_nic_access(trans, &flags); } } -IWL_EXPORT_SYMBOL(iwl_write_direct64); -int iwl_poll_direct_bit(struct iwl_trans* trans, uint32_t addr, uint32_t mask, int timeout) { +zx_status_t iwl_poll_direct_bit(struct iwl_trans* trans, uint32_t addr, uint32_t mask, int timeout) { int t = 0; do { if ((iwl_read_direct32(trans, addr) & mask) == mask) { return t; } - udelay(IWL_POLL_INTERVAL); + zx_nanosleep(zx_deadline_after(ZX_USEC(IWL_POLL_INTERVAL))); t += IWL_POLL_INTERVAL; } while (t < timeout); - return -ETIMEDOUT; + return ZX_ERR_TIMED_OUT; } -IWL_EXPORT_SYMBOL(iwl_poll_direct_bit); uint32_t iwl_read_prph_no_grab(struct iwl_trans* trans, uint32_t ofs) { uint32_t val = iwl_trans_read_prph(trans, ofs); - trace_iwlwifi_dev_ioread_prph32(trans->dev, ofs, val); return val; } -IWL_EXPORT_SYMBOL(iwl_read_prph_no_grab); void iwl_write_prph_no_grab(struct iwl_trans* trans, uint32_t ofs, uint32_t val) { - trace_iwlwifi_dev_iowrite_prph32(trans->dev, ofs, val); iwl_trans_write_prph(trans, ofs, val); } -IWL_EXPORT_SYMBOL(iwl_write_prph_no_grab); void iwl_write_prph64_no_grab(struct iwl_trans* trans, uint64_t ofs, uint64_t val) { - trace_iwlwifi_dev_iowrite_prph64(trans->dev, ofs, val); iwl_write_prph_no_grab(trans, ofs, val & 0xffffffff); iwl_write_prph_no_grab(trans, ofs + 4, val >> 32); } -IWL_EXPORT_SYMBOL(iwl_write_prph64_no_grab); uint32_t iwl_read_prph(struct iwl_trans* trans, uint32_t ofs) { unsigned long flags; @@ -160,7 +140,6 @@ uint32_t iwl_read_prph(struct iwl_trans* trans, uint32_t ofs) { } return val; } -IWL_EXPORT_SYMBOL(iwl_read_prph); void iwl_write_prph(struct iwl_trans* trans, uint32_t ofs, uint32_t val) { unsigned long flags; @@ -170,19 +149,18 @@ void iwl_write_prph(struct iwl_trans* trans, uint32_t ofs, uint32_t val) { iwl_trans_release_nic_access(trans, &flags); } } -IWL_EXPORT_SYMBOL(iwl_write_prph); -int iwl_poll_prph_bit(struct iwl_trans* trans, uint32_t addr, uint32_t bits, uint32_t mask, - int timeout) { +zx_status_t iwl_poll_prph_bit(struct iwl_trans* trans, uint32_t addr, uint32_t bits, uint32_t mask, + int timeout) { int t = 0; do { if ((iwl_read_prph(trans, addr) & mask) == (bits & mask)) { return t; } - udelay(IWL_POLL_INTERVAL); + zx_nanosleep(zx_deadline_after(ZX_USEC(IWL_POLL_INTERVAL))); t += IWL_POLL_INTERVAL; } while (t < timeout); - return -ETIMEDOUT; + return ZX_ERR_TIMED_OUT; } void iwl_set_bits_prph(struct iwl_trans* trans, uint32_t ofs, uint32_t mask) { @@ -193,7 +171,6 @@ void iwl_set_bits_prph(struct iwl_trans* trans, uint32_t ofs, uint32_t mask) { iwl_trans_release_nic_access(trans, &flags); } } -IWL_EXPORT_SYMBOL(iwl_set_bits_prph); void iwl_set_bits_mask_prph(struct iwl_trans* trans, uint32_t ofs, uint32_t bits, uint32_t mask) { unsigned long flags; @@ -203,7 +180,6 @@ void iwl_set_bits_mask_prph(struct iwl_trans* trans, uint32_t ofs, uint32_t bits iwl_trans_release_nic_access(trans, &flags); } } -IWL_EXPORT_SYMBOL(iwl_set_bits_mask_prph); void iwl_clear_bits_prph(struct iwl_trans* trans, uint32_t ofs, uint32_t mask) { unsigned long flags; @@ -215,7 +191,6 @@ void iwl_clear_bits_prph(struct iwl_trans* trans, uint32_t ofs, uint32_t mask) { iwl_trans_release_nic_access(trans, &flags); } } -IWL_EXPORT_SYMBOL(iwl_clear_bits_prph); void iwl_force_nmi(struct iwl_trans* trans) { if (trans->cfg->device_family < IWL_DEVICE_FAMILY_9000) { @@ -224,7 +199,6 @@ void iwl_force_nmi(struct iwl_trans* trans) { iwl_write_prph(trans, UREG_NIC_SET_NMI_DRIVER, UREG_NIC_SET_NMI_DRIVER_NMI_FROM_DRIVER_MSK); } } -IWL_EXPORT_SYMBOL(iwl_force_nmi); static const char* get_rfh_string(int cmd) { #define IWL_CMD(x) \ @@ -262,8 +236,8 @@ struct reg { }; static int iwl_dump_rfh(struct iwl_trans* trans, char** buf) { - int i, q; - int num_q = trans->num_rx_queues; + size_t i; + int q, num_q = trans->num_rx_queues; static const uint32_t rfh_tbl[] = { RFH_RXF_DMA_CFG, RFH_GEN_CFG, RFH_GEN_STATUS, FH_TSSR_TX_STATUS_REG, FH_TSSR_TX_ERROR_REG, }; @@ -343,7 +317,7 @@ static const char* get_fh_string(int cmd) { } int iwl_dump_fh(struct iwl_trans* trans, char** buf) { - int i; + size_t i; static const uint32_t fh_tbl[] = { FH_RSCSR_CHNL0_STTS_WPTR_REG, FH_RSCSR_CHNL0_RBDCB_BASE_REG, FH_RSCSR_CHNL0_WPTR, FH_MEM_RCSR_CHNL0_CONFIG_REG, FH_MEM_RSSR_SHARED_CTRL_REG, FH_MEM_RSSR_RX_STATUS_REG, diff --git a/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-io.h b/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-io.h index 9937468f7978ef33b6fa37c92ba4dc26313fa949..c603c19f5c8dc3a982ab2cb4f4740fb5beaf88d4 100644 --- a/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-io.h +++ b/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-io.h @@ -32,6 +32,8 @@ #ifndef SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_IWL_IO_H_ #define SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_IWL_IO_H_ +#include <zircon/types.h> + #if 0 // NEEDS_PORTING #include "src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-devtrace.h" #endif // NEEDS_PORTING @@ -50,8 +52,10 @@ static inline void iwl_clear_bit(struct iwl_trans* trans, uint32_t reg, uint32_t iwl_trans_set_bits_mask(trans, reg, mask, 0); } -int iwl_poll_bit(struct iwl_trans* trans, uint32_t addr, uint32_t bits, uint32_t mask, int timeout); -int iwl_poll_direct_bit(struct iwl_trans* trans, uint32_t addr, uint32_t mask, int timeout); +zx_status_t iwl_poll_bit(struct iwl_trans* trans, uint32_t addr, uint32_t bits, uint32_t mask, + int timeout); +zx_status_t iwl_poll_direct_bit(struct iwl_trans* trans, uint32_t addr, uint32_t mask, + int timeout); uint32_t iwl_read_direct32(struct iwl_trans* trans, uint32_t reg); void iwl_write_direct32(struct iwl_trans* trans, uint32_t reg, uint32_t value); @@ -62,8 +66,8 @@ uint32_t iwl_read_prph(struct iwl_trans* trans, uint32_t ofs); void iwl_write_prph_no_grab(struct iwl_trans* trans, uint32_t ofs, uint32_t val); void iwl_write_prph64_no_grab(struct iwl_trans* trans, uint64_t ofs, uint64_t val); void iwl_write_prph(struct iwl_trans* trans, uint32_t ofs, uint32_t val); -int iwl_poll_prph_bit(struct iwl_trans* trans, uint32_t addr, uint32_t bits, uint32_t mask, - int timeout); +zx_status_t iwl_poll_prph_bit(struct iwl_trans* trans, uint32_t addr, uint32_t bits, uint32_t mask, + int timeout); void iwl_set_bits_prph(struct iwl_trans* trans, uint32_t ofs, uint32_t mask); void iwl_set_bits_mask_prph(struct iwl_trans* trans, uint32_t ofs, uint32_t bits, uint32_t mask); void iwl_clear_bits_prph(struct iwl_trans* trans, uint32_t ofs, uint32_t mask); diff --git a/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-trans.h b/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-trans.h index 681353c802111592d210c624c25806c07088fdbb..cd877ccc72771483eb57c6dff0ef825675c21816 100644 --- a/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-trans.h +++ b/src/connectivity/wlan/drivers/third_party/intel/iwlwifi/iwl-trans.h @@ -1079,6 +1079,7 @@ static inline int iwl_trans_test_mode_cmd(struct iwl_trans* trans, bool enable) return -ENOTSUPP; } #endif +#endif // NEEDS_PORTING static inline void iwl_trans_write8(struct iwl_trans* trans, uint32_t ofs, uint8_t val) { trans->ops->write8(trans, ofs, val); @@ -1101,6 +1102,7 @@ static inline void iwl_trans_write_prph(struct iwl_trans* trans, uint32_t ofs, return trans->ops->write_prph(trans, ofs, val); } +#if 0 // NEEDS_PORTING static inline int iwl_trans_read_mem(struct iwl_trans* trans, uint32_t addr, void* buf, int dwords) { return trans->ops->read_mem(trans, addr, buf, dwords); @@ -1150,16 +1152,14 @@ iwl_trans_set_bits_mask(struct iwl_trans* trans, uint32_t reg, uint32_t mask, ui trans->ops->set_bits_mask(trans, reg, mask, value); } -#if 0 // NEEDS_PORTING #define iwl_trans_grab_nic_access(trans, flags) \ - __cond_lock(nic_access, likely((trans)->ops->grab_nic_access(trans, flags))) + ((trans)->ops->grab_nic_access(trans, flags)) -static inline void __releases(nic_access) -iwl_trans_release_nic_access(struct iwl_trans* trans, unsigned long* flags) { +static inline void iwl_trans_release_nic_access(struct iwl_trans* trans, unsigned long* flags) { trans->ops->release_nic_access(trans, flags); - __release(nic_access); } +#if 0 // NEEDS_PORTING static inline void iwl_trans_fw_error(struct iwl_trans* trans) { if (WARN_ON_ONCE(!trans->op_mode)) { return;