Lines Matching refs:priv

58 static void p54spi_spi_read(struct p54s_priv *priv, u8 address,  in p54spi_spi_read()  argument
79 spi_sync(priv->spi, &m); in p54spi_spi_read()
83 static void p54spi_spi_write(struct p54s_priv *priv, u8 address, in p54spi_spi_write() argument
113 spi_sync(priv->spi, &m); in p54spi_spi_write()
116 static u32 p54spi_read32(struct p54s_priv *priv, u8 addr) in p54spi_read32() argument
120 p54spi_spi_read(priv, addr, &val, sizeof(val)); in p54spi_read32()
125 static inline void p54spi_write16(struct p54s_priv *priv, u8 addr, __le16 val) in p54spi_write16() argument
127 p54spi_spi_write(priv, addr, &val, sizeof(val)); in p54spi_write16()
130 static inline void p54spi_write32(struct p54s_priv *priv, u8 addr, __le32 val) in p54spi_write32() argument
132 p54spi_spi_write(priv, addr, &val, sizeof(val)); in p54spi_write32()
135 static int p54spi_wait_bit(struct p54s_priv *priv, u16 reg, u32 bits) in p54spi_wait_bit() argument
140 u32 buffer = p54spi_read32(priv, reg); in p54spi_wait_bit()
147 static int p54spi_spi_write_dma(struct p54s_priv *priv, __le32 base, in p54spi_spi_write_dma() argument
150 if (!p54spi_wait_bit(priv, SPI_ADRS_DMA_WRITE_CTRL, HOST_ALLOWED)) { in p54spi_spi_write_dma()
151 dev_err(&priv->spi->dev, "spi_write_dma not allowed " in p54spi_spi_write_dma()
156 p54spi_write16(priv, SPI_ADRS_DMA_WRITE_CTRL, in p54spi_spi_write_dma()
159 p54spi_write16(priv, SPI_ADRS_DMA_WRITE_LEN, cpu_to_le16(len)); in p54spi_spi_write_dma()
160 p54spi_write32(priv, SPI_ADRS_DMA_WRITE_BASE, base); in p54spi_spi_write_dma()
161 p54spi_spi_write(priv, SPI_ADRS_DMA_DATA, buf, len); in p54spi_spi_write_dma()
167 struct p54s_priv *priv = dev->priv; in p54spi_request_firmware() local
171 ret = request_firmware(&priv->firmware, "3826.arm", &priv->spi->dev); in p54spi_request_firmware()
174 dev_err(&priv->spi->dev, "request_firmware() failed: %d", ret); in p54spi_request_firmware()
178 ret = p54_parse_firmware(dev, priv->firmware); in p54spi_request_firmware()
180 release_firmware(priv->firmware); in p54spi_request_firmware()
189 struct p54s_priv *priv = dev->priv; in p54spi_request_eeprom() local
196 ret = request_firmware_direct(&eeprom, "3826.eeprom", &priv->spi->dev); in p54spi_request_eeprom()
199 dev_info(&priv->spi->dev, "loading default eeprom...\n"); in p54spi_request_eeprom()
203 dev_err(&priv->spi->dev, "Failed to request user eeprom\n"); in p54spi_request_eeprom()
206 dev_info(&priv->spi->dev, "loading user eeprom...\n"); in p54spi_request_eeprom()
216 struct p54s_priv *priv = dev->priv; in p54spi_upload_firmware() local
222 fw_len = priv->firmware->size; in p54spi_upload_firmware()
223 fw = kmemdup(priv->firmware->data, fw_len, GFP_KERNEL); in p54spi_upload_firmware()
228 p54spi_write16(priv, SPI_ADRS_DEV_CTRL_STAT, cpu_to_le16( in p54spi_upload_firmware()
234 p54spi_write16(priv, SPI_ADRS_DEV_CTRL_STAT, cpu_to_le16( in p54spi_upload_firmware()
243 err = p54spi_spi_write_dma(priv, cpu_to_le32( in p54spi_upload_firmware()
256 p54spi_write32(priv, SPI_ADRS_HOST_INT_EN, in p54spi_upload_firmware()
260 p54spi_write16(priv, SPI_ADRS_DEV_CTRL_STAT, cpu_to_le16( in p54spi_upload_firmware()
266 p54spi_write16(priv, SPI_ADRS_DEV_CTRL_STAT, cpu_to_le16( in p54spi_upload_firmware()
275 static void p54spi_power_off(struct p54s_priv *priv) in p54spi_power_off() argument
281 static void p54spi_power_on(struct p54s_priv *priv) in p54spi_power_on() argument
292 static inline void p54spi_int_ack(struct p54s_priv *priv, u32 val) in p54spi_int_ack() argument
294 p54spi_write32(priv, SPI_ADRS_HOST_INT_ACK, cpu_to_le32(val)); in p54spi_int_ack()
297 static int p54spi_wakeup(struct p54s_priv *priv) in p54spi_wakeup() argument
300 p54spi_write32(priv, SPI_ADRS_ARM_INTERRUPTS, in p54spi_wakeup()
304 if (!p54spi_wait_bit(priv, SPI_ADRS_HOST_INTERRUPTS, in p54spi_wakeup()
306 dev_err(&priv->spi->dev, "INT_READY timeout\n"); in p54spi_wakeup()
310 p54spi_int_ack(priv, SPI_HOST_INT_READY); in p54spi_wakeup()
314 static inline void p54spi_sleep(struct p54s_priv *priv) in p54spi_sleep() argument
316 p54spi_write32(priv, SPI_ADRS_ARM_INTERRUPTS, in p54spi_sleep()
320 static void p54spi_int_ready(struct p54s_priv *priv) in p54spi_int_ready() argument
322 p54spi_write32(priv, SPI_ADRS_HOST_INT_EN, cpu_to_le32( in p54spi_int_ready()
325 switch (priv->fw_state) { in p54spi_int_ready()
327 priv->fw_state = FW_STATE_READY; in p54spi_int_ready()
328 complete(&priv->fw_comp); in p54spi_int_ready()
331 priv->fw_state = FW_STATE_READY; in p54spi_int_ready()
339 static int p54spi_rx(struct p54s_priv *priv) in p54spi_rx() argument
346 if (p54spi_wakeup(priv) < 0) in p54spi_rx()
353 p54spi_spi_read(priv, SPI_ADRS_DMA_DATA, rx_head, sizeof(rx_head)); in p54spi_rx()
357 p54spi_sleep(priv); in p54spi_rx()
358 dev_err(&priv->spi->dev, "rx request of zero bytes\n"); in p54spi_rx()
369 p54spi_sleep(priv); in p54spi_rx()
370 dev_err(&priv->spi->dev, "could not alloc skb"); in p54spi_rx()
378 p54spi_spi_read(priv, SPI_ADRS_DMA_DATA, in p54spi_rx()
382 p54spi_sleep(priv); in p54spi_rx()
388 if (p54_rx(priv->hw, skb) == 0) in p54spi_rx()
398 struct p54s_priv *priv = spi_get_drvdata(spi); in p54spi_interrupt() local
400 ieee80211_queue_work(priv->hw, &priv->work); in p54spi_interrupt()
405 static int p54spi_tx_frame(struct p54s_priv *priv, struct sk_buff *skb) in p54spi_tx_frame() argument
410 if (p54spi_wakeup(priv) < 0) in p54spi_tx_frame()
413 ret = p54spi_spi_write_dma(priv, hdr->req_id, skb->data, skb->len); in p54spi_tx_frame()
417 if (!p54spi_wait_bit(priv, SPI_ADRS_HOST_INTERRUPTS, in p54spi_tx_frame()
419 dev_err(&priv->spi->dev, "WR_READY timeout\n"); in p54spi_tx_frame()
424 p54spi_int_ack(priv, SPI_HOST_INT_WR_READY); in p54spi_tx_frame()
427 p54_free_skb(priv->hw, skb); in p54spi_tx_frame()
429 p54spi_sleep(priv); in p54spi_tx_frame()
433 static int p54spi_wq_tx(struct p54s_priv *priv) in p54spi_wq_tx() argument
443 spin_lock_irqsave(&priv->tx_lock, flags); in p54spi_wq_tx()
445 while (!list_empty(&priv->tx_pending)) { in p54spi_wq_tx()
446 entry = list_entry(priv->tx_pending.next, in p54spi_wq_tx()
451 spin_unlock_irqrestore(&priv->tx_lock, flags); in p54spi_wq_tx()
461 ret = p54spi_tx_frame(priv, skb); in p54spi_wq_tx()
464 p54_free_skb(priv->hw, skb); in p54spi_wq_tx()
468 spin_lock_irqsave(&priv->tx_lock, flags); in p54spi_wq_tx()
470 spin_unlock_irqrestore(&priv->tx_lock, flags); in p54spi_wq_tx()
476 struct p54s_priv *priv = dev->priv; in p54spi_op_tx() local
484 spin_lock_irqsave(&priv->tx_lock, flags); in p54spi_op_tx()
485 list_add_tail(&di->tx_list, &priv->tx_pending); in p54spi_op_tx()
486 spin_unlock_irqrestore(&priv->tx_lock, flags); in p54spi_op_tx()
488 ieee80211_queue_work(priv->hw, &priv->work); in p54spi_op_tx()
493 struct p54s_priv *priv = container_of(work, struct p54s_priv, work); in p54spi_work() local
497 mutex_lock(&priv->mutex); in p54spi_work()
499 if (priv->fw_state == FW_STATE_OFF) in p54spi_work()
502 ints = p54spi_read32(priv, SPI_ADRS_HOST_INTERRUPTS); in p54spi_work()
505 p54spi_int_ready(priv); in p54spi_work()
506 p54spi_int_ack(priv, SPI_HOST_INT_READY); in p54spi_work()
509 if (priv->fw_state != FW_STATE_READY) in p54spi_work()
513 p54spi_int_ack(priv, SPI_HOST_INT_UPDATE); in p54spi_work()
514 ret = p54spi_rx(priv); in p54spi_work()
519 p54spi_int_ack(priv, SPI_HOST_INT_SW_UPDATE); in p54spi_work()
520 ret = p54spi_rx(priv); in p54spi_work()
525 ret = p54spi_wq_tx(priv); in p54spi_work()
527 mutex_unlock(&priv->mutex); in p54spi_work()
532 struct p54s_priv *priv = dev->priv; in p54spi_op_start() local
536 if (mutex_lock_interruptible(&priv->mutex)) { in p54spi_op_start()
541 priv->fw_state = FW_STATE_BOOTING; in p54spi_op_start()
543 p54spi_power_on(priv); in p54spi_op_start()
547 p54spi_power_off(priv); in p54spi_op_start()
551 mutex_unlock(&priv->mutex); in p54spi_op_start()
554 timeout = wait_for_completion_interruptible_timeout(&priv->fw_comp, in p54spi_op_start()
557 dev_err(&priv->spi->dev, "firmware boot failed"); in p54spi_op_start()
558 p54spi_power_off(priv); in p54spi_op_start()
563 if (mutex_lock_interruptible(&priv->mutex)) { in p54spi_op_start()
565 p54spi_power_off(priv); in p54spi_op_start()
569 WARN_ON(priv->fw_state != FW_STATE_READY); in p54spi_op_start()
572 mutex_unlock(&priv->mutex); in p54spi_op_start()
580 struct p54s_priv *priv = dev->priv; in p54spi_op_stop() local
583 mutex_lock(&priv->mutex); in p54spi_op_stop()
584 WARN_ON(priv->fw_state != FW_STATE_READY); in p54spi_op_stop()
586 p54spi_power_off(priv); in p54spi_op_stop()
587 spin_lock_irqsave(&priv->tx_lock, flags); in p54spi_op_stop()
588 INIT_LIST_HEAD(&priv->tx_pending); in p54spi_op_stop()
589 spin_unlock_irqrestore(&priv->tx_lock, flags); in p54spi_op_stop()
591 priv->fw_state = FW_STATE_OFF; in p54spi_op_stop()
592 mutex_unlock(&priv->mutex); in p54spi_op_stop()
594 cancel_work_sync(&priv->work); in p54spi_op_stop()
599 struct p54s_priv *priv = NULL; in p54spi_probe() local
603 hw = p54_init_common(sizeof(*priv)); in p54spi_probe()
609 priv = hw->priv; in p54spi_probe()
610 priv->hw = hw; in p54spi_probe()
611 spi_set_drvdata(spi, priv); in p54spi_probe()
612 priv->spi = spi; in p54spi_probe()
619 dev_err(&priv->spi->dev, "spi_setup failed"); in p54spi_probe()
625 dev_err(&priv->spi->dev, "power GPIO request failed: %d", ret); in p54spi_probe()
631 dev_err(&priv->spi->dev, "irq GPIO request failed: %d", ret); in p54spi_probe()
640 priv->spi); in p54spi_probe()
642 dev_err(&priv->spi->dev, "request_irq() failed"); in p54spi_probe()
650 INIT_WORK(&priv->work, p54spi_work); in p54spi_probe()
651 init_completion(&priv->fw_comp); in p54spi_probe()
652 INIT_LIST_HEAD(&priv->tx_pending); in p54spi_probe()
653 mutex_init(&priv->mutex); in p54spi_probe()
654 spin_lock_init(&priv->tx_lock); in p54spi_probe()
656 priv->common.open = p54spi_op_start; in p54spi_probe()
657 priv->common.stop = p54spi_op_stop; in p54spi_probe()
658 priv->common.tx = p54spi_op_tx; in p54spi_probe()
668 ret = p54_register_common(hw, &priv->spi->dev); in p54spi_probe()
681 p54_free_common(priv->hw); in p54spi_probe()
687 struct p54s_priv *priv = spi_get_drvdata(spi); in p54spi_remove() local
689 p54_unregister_common(priv->hw); in p54spi_remove()
695 release_firmware(priv->firmware); in p54spi_remove()
697 mutex_destroy(&priv->mutex); in p54spi_remove()
699 p54_free_common(priv->hw); in p54spi_remove()