Lines Matching defs:midev
109 static int mctp_i2c_recv(struct mctp_i2c_dev *midev);
207 struct mctp_i2c_dev *midev)
210 if (midev)
211 dev_hold(midev->ndev);
214 mcli->sel = midev;
219 struct mctp_i2c_dev *midev)
224 __mctp_i2c_device_select(mcli, midev);
232 struct mctp_i2c_dev *midev = NULL;
237 midev = mcli->sel;
238 if (midev)
239 dev_hold(midev->ndev);
242 if (!midev)
247 if (midev->rx_pos < MCTP_I2C_BUFSZ) {
248 midev->rx_buffer[midev->rx_pos] = *val;
249 midev->rx_pos++;
251 midev->ndev->stats.rx_over_errors++;
257 midev->rx_buffer[0] = mcli->lladdr << 1;
258 midev->rx_pos = 1;
261 rc = mctp_i2c_recv(midev);
267 dev_put(midev->ndev);
272 static int mctp_i2c_recv(struct mctp_i2c_dev *midev)
274 struct net_device *ndev = midev->ndev;
284 if (midev->rx_pos < MCTP_I2C_MINLEN + 1) {
289 recvlen = midev->rx_pos - 1;
291 hdr = (void *)midev->rx_buffer;
302 pec = midev->rx_buffer[midev->rx_pos - 1];
303 calc_pec = i2c_smbus_pec(0, midev->rx_buffer, recvlen);
316 skb_put_data(skb, midev->rx_buffer, recvlen);
328 spin_lock_irqsave(&midev->lock, flags);
329 if (midev->allow_rx) {
330 reinit_completion(&midev->rx_done);
331 spin_unlock_irqrestore(&midev->lock, flags);
334 complete(&midev->rx_done);
337 spin_unlock_irqrestore(&midev->lock, flags);
357 mctp_i2c_get_tx_flow_state(struct mctp_i2c_dev *midev, struct sk_buff *skb)
401 static void mctp_i2c_lock_nest(struct mctp_i2c_dev *midev)
406 spin_lock_irqsave(&midev->lock, flags);
407 lock = midev->i2c_lock_count == 0;
408 midev->i2c_lock_count++;
409 spin_unlock_irqrestore(&midev->lock, flags);
412 i2c_lock_bus(midev->adapter, I2C_LOCK_SEGMENT);
415 static void mctp_i2c_unlock_nest(struct mctp_i2c_dev *midev)
420 spin_lock_irqsave(&midev->lock, flags);
421 if (!WARN_ONCE(midev->i2c_lock_count == 0, "lock count underflow!"))
422 midev->i2c_lock_count--;
423 unlock = midev->i2c_lock_count == 0;
424 spin_unlock_irqrestore(&midev->lock, flags);
427 i2c_unlock_bus(midev->adapter, I2C_LOCK_SEGMENT);
431 static void mctp_i2c_unlock_reset(struct mctp_i2c_dev *midev)
436 spin_lock_irqsave(&midev->lock, flags);
437 unlock = midev->i2c_lock_count > 0;
438 midev->i2c_lock_count = 0;
439 spin_unlock_irqrestore(&midev->lock, flags);
442 i2c_unlock_bus(midev->adapter, I2C_LOCK_SEGMENT);
445 static void mctp_i2c_xmit(struct mctp_i2c_dev *midev, struct sk_buff *skb)
447 struct net_device_stats *stats = &midev->ndev->stats;
454 fs = mctp_i2c_get_tx_flow_state(midev, skb);
461 dev_warn_ratelimited(&midev->adapter->dev,
472 skb_copy_bits(skb, 0, midev->tx_scratch, skb->len);
473 hdr = (void *)midev->tx_scratch;
486 mctp_i2c_lock_nest(midev);
487 mctp_i2c_device_select(midev->client, midev);
488 rc = __i2c_transfer(midev->adapter, &msg, 1);
489 mctp_i2c_unlock_nest(midev);
496 mctp_i2c_lock_nest(midev);
497 mctp_i2c_device_select(midev->client, midev);
502 rc = __i2c_transfer(midev->adapter, &msg, 1);
510 dev_warn_ratelimited(&midev->adapter->dev,
519 static void mctp_i2c_flow_release(struct mctp_i2c_dev *midev)
524 spin_lock_irqsave(&midev->lock, flags);
525 if (midev->release_count > midev->i2c_lock_count) {
527 midev->release_count = midev->i2c_lock_count;
530 midev->i2c_lock_count -= midev->release_count;
531 unlock = midev->i2c_lock_count == 0 && midev->release_count > 0;
532 midev->release_count = 0;
533 spin_unlock_irqrestore(&midev->lock, flags);
536 i2c_unlock_bus(midev->adapter, I2C_LOCK_SEGMENT);
568 struct mctp_i2c_dev *midev = data;
576 spin_lock_irqsave(&midev->tx_queue.lock, flags);
577 skb = __skb_dequeue(&midev->tx_queue);
578 if (netif_queue_stopped(midev->ndev))
579 netif_wake_queue(midev->ndev);
580 spin_unlock_irqrestore(&midev->tx_queue.lock, flags);
582 if (skb == &midev->unlock_marker) {
583 mctp_i2c_flow_release(midev);
586 mctp_i2c_xmit(midev, skb);
590 wait_event_idle(midev->tx_wq,
591 !skb_queue_empty(&midev->tx_queue) ||
602 struct mctp_i2c_dev *midev = netdev_priv(dev);
605 spin_lock_irqsave(&midev->tx_queue.lock, flags);
606 if (skb_queue_len(&midev->tx_queue) >= MCTP_I2C_TX_WORK_LEN) {
608 spin_unlock_irqrestore(&midev->tx_queue.lock, flags);
613 __skb_queue_tail(&midev->tx_queue, skb);
614 if (skb_queue_len(&midev->tx_queue) == MCTP_I2C_TX_WORK_LEN)
616 spin_unlock_irqrestore(&midev->tx_queue.lock, flags);
618 wake_up(&midev->tx_wq);
626 struct mctp_i2c_dev *midev = netdev_priv(mdev->dev);
630 spin_lock_irqsave(&midev->lock, flags);
635 midev->release_count++;
639 spin_unlock_irqrestore(&midev->lock, flags);
645 spin_lock(&midev->tx_queue.lock);
646 if (!midev->unlock_marker.next)
647 __skb_queue_tail(&midev->tx_queue,
648 &midev->unlock_marker);
649 spin_unlock(&midev->tx_queue.lock);
650 wake_up(&midev->tx_wq);
691 struct mctp_i2c_dev *midev = netdev_priv(dev);
694 midev->tx_thread = kthread_create(mctp_i2c_tx_thread, midev,
696 if (IS_ERR(midev->tx_thread))
697 return ERR_CAST(midev->tx_thread);
699 midev->ndev = dev;
701 midev->adapter = adap;
703 midev->client = mcli;
704 INIT_LIST_HEAD(&midev->list);
705 spin_lock_init(&midev->lock);
706 midev->i2c_lock_count = 0;
707 midev->release_count = 0;
708 init_completion(&midev->rx_done);
709 complete(&midev->rx_done);
710 init_waitqueue_head(&midev->tx_wq);
711 skb_queue_head_init(&midev->tx_queue);
715 list_add(&midev->list, &mcli->devs);
718 __mctp_i2c_device_select(mcli, midev);
722 wake_up_process(midev->tx_thread);
724 return midev;
728 static void mctp_i2c_midev_free(struct mctp_i2c_dev *midev)
730 struct mctp_i2c_client *mcli = midev->client;
733 if (midev->tx_thread) {
734 kthread_stop(midev->tx_thread);
735 midev->tx_thread = NULL;
739 mctp_i2c_unlock_reset(midev);
743 list_del(&midev->list);
744 if (mcli->sel == midev) {
752 skb_queue_purge(&midev->tx_queue);
753 put_device(&midev->adapter->dev);
757 /* Stops, unregisters, and frees midev */
758 static void mctp_i2c_unregister(struct mctp_i2c_dev *midev)
763 kthread_stop(midev->tx_thread);
764 midev->tx_thread = NULL;
767 spin_lock_irqsave(&midev->lock, flags);
768 midev->allow_rx = false;
769 spin_unlock_irqrestore(&midev->lock, flags);
770 wait_for_completion(&midev->rx_done);
772 mctp_unregister_netdev(midev->ndev);
773 /* midev has been freed now by mctp_i2c_ndo_uninit callback */
775 free_netdev(midev->ndev);
780 struct mctp_i2c_dev *midev = netdev_priv(dev);
786 mctp_i2c_midev_free(midev);
791 struct mctp_i2c_dev *midev = netdev_priv(dev);
795 spin_lock_irqsave(&midev->lock, flags);
796 midev->allow_rx = true;
797 spin_unlock_irqrestore(&midev->lock, flags);
805 struct mctp_i2c_dev *midev = NULL;
822 ndev = alloc_netdev(sizeof(*midev), namebuf, NET_NAME_ENUM, mctp_i2c_net_setup);
832 midev = mctp_i2c_midev_init(ndev, mcli, adap);
833 if (IS_ERR(midev)) {
834 rc = PTR_ERR(midev);
835 midev = NULL;
847 spin_lock_irqsave(&midev->lock, flags);
848 midev->allow_rx = false;
849 spin_unlock_irqrestore(&midev->lock, flags);
853 if (midev)
854 mctp_i2c_midev_free(midev);
864 struct mctp_i2c_dev *midev = NULL, *m = NULL;
872 midev = m;
877 if (midev)
878 mctp_i2c_unregister(midev);
1009 struct mctp_i2c_dev *midev = NULL, *tmp = NULL;
1014 list_for_each_entry_safe(midev, tmp, &mcli->devs, list)
1015 mctp_i2c_unregister(midev);