Lines Matching refs:dev

22  * @dev: ISHTP device pointer
29 static inline uint32_t ish_reg_read(const struct ishtp_device *dev,
32 struct ish_hw *hw = to_ish_hw(dev);
39 * @dev: ISHTP device pointer
45 static inline void ish_reg_write(struct ishtp_device *dev,
49 struct ish_hw *hw = to_ish_hw(dev);
56 * @dev: ISHTP device pointer
62 static inline uint32_t _ish_read_fw_sts_reg(struct ishtp_device *dev)
64 return ish_reg_read(dev, IPC_REG_ISH_HOST_FWSTS);
69 * @dev: ISHTP device pointer
75 static bool check_generated_interrupt(struct ishtp_device *dev)
80 if (dev->pdev->device == CHV_DEVICE_ID) {
81 pisr_val = ish_reg_read(dev, IPC_REG_PISR_CHV_AB);
85 pisr_val = ish_reg_read(dev, IPC_REG_PISR_BXT);
89 ish_reg_write(dev, IPC_REG_PISR_BXT, pisr_val);
97 * @dev: ISHTP device pointer
103 static bool ish_is_input_ready(struct ishtp_device *dev)
107 doorbell_val = ish_reg_read(dev, IPC_REG_HOST2ISH_DRBL);
113 * @dev: ISHTP device pointer
117 static void set_host_ready(struct ishtp_device *dev)
119 if (dev->pdev->device == CHV_DEVICE_ID) {
120 if (dev->pdev->revision == REVISION_ID_CHT_A0 ||
121 (dev->pdev->revision & REVISION_ID_SI_MASK) ==
123 ish_reg_write(dev, IPC_REG_HOST_COMM, 0x81);
124 else if (dev->pdev->revision == REVISION_ID_CHT_B0 ||
125 (dev->pdev->revision & REVISION_ID_SI_MASK) ==
127 (dev->pdev->revision & REVISION_ID_SI_MASK) ==
129 (dev->pdev->revision & REVISION_ID_SI_MASK) ==
133 host_comm_val = ish_reg_read(dev, IPC_REG_HOST_COMM);
135 ish_reg_write(dev, IPC_REG_HOST_COMM, host_comm_val);
140 host_pimr_val = ish_reg_read(dev, IPC_REG_PIMR_BXT);
148 ish_reg_write(dev, IPC_REG_PIMR_BXT, host_pimr_val);
154 * @dev: ISHTP device pointer
160 static bool ishtp_fw_is_ready(struct ishtp_device *dev)
162 uint32_t ish_status = _ish_read_fw_sts_reg(dev);
170 * @dev: ISHTP device pointer
174 static void ish_set_host_rdy(struct ishtp_device *dev)
176 uint32_t host_status = ish_reg_read(dev, IPC_REG_HOST_COMM);
179 ish_reg_write(dev, IPC_REG_HOST_COMM, host_status);
184 * @dev: ISHTP device pointer
188 static void ish_clr_host_rdy(struct ishtp_device *dev)
190 uint32_t host_status = ish_reg_read(dev, IPC_REG_HOST_COMM);
193 ish_reg_write(dev, IPC_REG_HOST_COMM, host_status);
198 * @dev: ISHTP device pointer
204 static uint32_t _ishtp_read_hdr(const struct ishtp_device *dev)
206 return ish_reg_read(dev, IPC_REG_ISH2HOST_MSG);
211 * @dev: ISHTP device pointer
219 static int _ishtp_read(struct ishtp_device *dev, unsigned char *buffer,
228 *r_buf++ = ish_reg_read(dev, msg_offs + i);
235 * @dev: ishtp device pointer
242 static int write_ipc_from_queue(struct ishtp_device *dev)
255 if (dev->dev_state == ISHTP_DEV_DISABLED)
258 spin_lock_irqsave(&dev->wr_processing_spinlock, flags);
259 if (!ish_is_input_ready(dev)) {
260 spin_unlock_irqrestore(&dev->wr_processing_spinlock, flags);
268 if (list_empty(&dev->wr_processing_list)) {
269 spin_unlock_irqrestore(&dev->wr_processing_spinlock, flags);
273 ipc_link = list_first_entry(&dev->wr_processing_list,
303 ish_reg_write(dev, reg_addr, r_buf[i]);
310 ish_reg_write(dev, reg_addr, reg);
312 ish_reg_write(dev, IPC_REG_HOST2ISH_DRBL, doorbell_val);
315 ish_reg_read(dev, IPC_REG_ISH_HOST_FWSTS);
318 ++dev->ipc_tx_cnt;
319 dev->ipc_tx_bytes_cnt += IPC_HEADER_GET_LENGTH(doorbell_val);
324 list_add(&ipc_link->link, &dev->wr_free_list);
325 spin_unlock_irqrestore(&dev->wr_processing_spinlock, flags);
339 * @dev: ishtp device instance
353 static int write_ipc_to_queue(struct ishtp_device *dev,
363 spin_lock_irqsave(&dev->wr_processing_spinlock, flags);
364 if (list_empty(&dev->wr_free_list)) {
365 spin_unlock_irqrestore(&dev->wr_processing_spinlock, flags);
368 ipc_link = list_first_entry(&dev->wr_free_list,
377 list_add_tail(&ipc_link->link, &dev->wr_processing_list);
378 spin_unlock_irqrestore(&dev->wr_processing_spinlock, flags);
380 write_ipc_from_queue(dev);
387 * @dev: ishtp device instance
396 static int ipc_send_mng_msg(struct ishtp_device *dev, uint32_t msg_code,
404 return write_ipc_to_queue(dev, NULL, NULL, ipc_msg,
413 * @dev: ISHTP device pointer
423 static int timed_wait_for_timeout(struct ishtp_device *dev, int condition,
431 complete = ishtp_fw_is_ready(dev);
433 complete = ish_is_input_ready(dev);
463 * @dev: ishtp device pointer
469 static int ish_fw_reset_handler(struct ishtp_device *dev)
475 reset_id = ish_reg_read(dev, IPC_REG_ISH2HOST_MSG) & 0xFFFF;
478 spin_lock_irqsave(&dev->wr_processing_spinlock, flags);
479 list_splice_init(&dev->wr_processing_list, &dev->wr_free_list);
480 spin_unlock_irqrestore(&dev->wr_processing_spinlock, flags);
483 ishtp_reset_handler(dev);
485 if (!ish_is_input_ready(dev))
486 timed_wait_for_timeout(dev, WAIT_FOR_INPUT_RDY,
490 if (!ish_is_input_ready(dev))
496 ish_set_host_rdy(dev);
498 ipc_send_mng_msg(dev, MNG_RESET_NOTIFY_ACK, &reset_id,
502 timed_wait_for_timeout(dev, WAIT_FOR_FW_RDY,
504 if (!ishtp_fw_is_ready(dev)) {
508 ish_status = _ish_read_fw_sts_reg(dev);
509 dev_err(dev->devc,
545 * @dev: ishtp device pointer
549 static void _ish_sync_fw_clock(struct ishtp_device *dev)
559 ipc_send_mng_msg(dev, MNG_SYNC_FW_CLOCK, &usec, sizeof(uint64_t));
564 * @dev: ishtp device instance
571 static void recv_ipc(struct ishtp_device *dev, uint32_t doorbell_val)
582 if (dev->suspend_flag) {
583 dev->suspend_flag = 0;
584 wake_up_interruptible(&dev->suspend_wait);
586 if (dev->resume_flag) {
587 dev->resume_flag = 0;
588 wake_up_interruptible(&dev->resume_wait);
591 write_ipc_from_queue(dev);
596 ishtp_dev = dev;
603 dev->recvd_hw_ready = 1;
604 wake_up_interruptible(&dev->wait_hw_ready);
619 struct ishtp_device *dev = dev_id;
624 interrupt_generated = check_generated_interrupt(dev);
629 doorbell_val = ish_reg_read(dev, IPC_REG_ISH2HOST_DRBL);
633 if (dev->dev_state == ISHTP_DEV_DISABLED)
638 dev_err(dev->devc,
648 recv_ipc(dev, doorbell_val);
651 ishtp_recv(dev);
657 ++dev->ipc_rx_cnt;
658 dev->ipc_rx_bytes_cnt += IPC_HEADER_GET_LENGTH(doorbell_val);
660 ish_reg_write(dev, IPC_REG_ISH2HOST_DRBL, 0);
662 ish_reg_read(dev, IPC_REG_ISH_HOST_FWSTS);
669 * @dev: ishtp device pointer
675 int ish_disable_dma(struct ishtp_device *dev)
680 ish_reg_write(dev, IPC_REG_ISH_RMP2, 0);
684 _ish_read_fw_sts_reg(dev) & (IPC_ISH_IN_DMA);
689 dev_err(dev->devc,
699 * @dev: ishtp device pointer
704 static void ish_wakeup(struct ishtp_device *dev)
707 ish_reg_write(dev, IPC_REG_ISH_RMP2, IPC_RMP2_DMA_ENABLED);
713 ish_reg_write(dev, IPC_REG_HOST2ISH_DRBL, IPC_DRBL_BUSY_BIT);
716 ish_reg_read(dev, IPC_REG_ISH_HOST_FWSTS);
721 * @dev: ishtp device pointer
727 static int _ish_hw_reset(struct ishtp_device *dev)
729 struct pci_dev *pdev = dev->pdev;
738 dev->dev_state = ISHTP_DEV_RESETTING;
741 dev_err(&pdev->dev, "Can't reset - no PM caps\n");
746 if (ish_disable_dma(dev)) {
747 dev_err(&pdev->dev,
765 ish_wakeup(dev);
772 * @dev: ishtp device pointer
778 static int _ish_ipc_reset(struct ishtp_device *dev)
786 set_host_ready(dev);
789 ish_reg_write(dev, IPC_REG_ISH2HOST_DRBL, 0);
791 ish_reg_read(dev, IPC_REG_ISH_HOST_FWSTS);
793 dev->recvd_hw_ready = 0;
796 rv = ipc_send_mng_msg(dev, MNG_RESET_NOTIFY, &ipc_mng_msg,
799 dev_err(dev->devc, "Failed to send IPC MNG_RESET_NOTIFY\n");
803 wait_event_interruptible_timeout(dev->wait_hw_ready,
804 dev->recvd_hw_ready, 2 * HZ);
805 if (!dev->recvd_hw_ready) {
806 dev_err(dev->devc, "Timed out waiting for HW ready\n");
815 * @dev: ishtp device pointer
821 int ish_hw_start(struct ishtp_device *dev)
823 ish_set_host_rdy(dev);
825 set_host_ready(dev);
828 ish_wakeup(dev);
831 if (!dev->recvd_hw_ready)
832 wait_event_interruptible_timeout(dev->wait_hw_ready,
833 dev->recvd_hw_ready,
836 if (!dev->recvd_hw_ready) {
837 dev_err(dev->devc,
847 * @dev: ishtp device pointer
855 static uint32_t ish_ipc_get_header(struct ishtp_device *dev, int length,
886 struct ishtp_device *dev;
889 dev = devm_kzalloc(&pdev->dev,
892 if (!dev)
895 ishtp_device_init(dev);
897 init_waitqueue_head(&dev->wait_hw_ready);
899 spin_lock_init(&dev->wr_processing_spinlock);
902 INIT_LIST_HEAD(&dev->wr_processing_list);
903 INIT_LIST_HEAD(&dev->wr_free_list);
907 tx_buf = devm_kzalloc(&pdev->dev,
915 dev_err(dev->devc,
920 list_add_tail(&tx_buf->link, &dev->wr_free_list);
923 dev->ops = &ish_hw_ops;
924 dev->devc = &pdev->dev;
925 dev->mtu = IPC_PAYLOAD_SIZE - sizeof(struct ishtp_msg_hdr);
926 return dev;
931 * @dev: ISHTP device pointer
935 void ish_device_disable(struct ishtp_device *dev)
937 struct pci_dev *pdev = dev->pdev;
943 if (ish_disable_dma(dev)) {
944 dev_err(&pdev->dev,
952 dev->dev_state = ISHTP_DEV_DISABLED;
953 ish_clr_host_rdy(dev);