• Home
  • Raw
  • Download

Lines Matching refs:i2400m

323 size_t __i2400m_tx_tail_room(struct i2400m *i2400m)  in __i2400m_tx_tail_room()  argument
328 if (unlikely(i2400m->tx_in == 0)) in __i2400m_tx_tail_room()
330 tx_in = i2400m->tx_in % I2400M_TX_BUF_SIZE; in __i2400m_tx_tail_room()
434 void *i2400m_tx_fifo_push(struct i2400m *i2400m, size_t size, in i2400m_tx_fifo_push() argument
437 struct device *dev = i2400m_dev(i2400m); in i2400m_tx_fifo_push()
442 room = I2400M_TX_BUF_SIZE - (i2400m->tx_in - i2400m->tx_out); in i2400m_tx_fifo_push()
449 tail_room = __i2400m_tx_tail_room(i2400m); in i2400m_tx_fifo_push()
474 ptr = i2400m->tx_buf + i2400m->tx_in % I2400M_TX_BUF_SIZE; in i2400m_tx_fifo_push()
476 i2400m->tx_in % I2400M_TX_BUF_SIZE); in i2400m_tx_fifo_push()
477 i2400m->tx_in += size; in i2400m_tx_fifo_push()
505 void i2400m_tx_skip_tail(struct i2400m *i2400m) in i2400m_tx_skip_tail() argument
507 struct device *dev = i2400m_dev(i2400m); in i2400m_tx_skip_tail()
508 size_t tx_in = i2400m->tx_in % I2400M_TX_BUF_SIZE; in i2400m_tx_skip_tail()
509 size_t tail_room = __i2400m_tx_tail_room(i2400m); in i2400m_tx_skip_tail()
510 struct i2400m_msg_hdr *msg = i2400m->tx_buf + tx_in; in i2400m_tx_skip_tail()
517 i2400m->tx_in += tail_room; in i2400m_tx_skip_tail()
535 unsigned i2400m_tx_fits(struct i2400m *i2400m) in i2400m_tx_fits() argument
537 struct i2400m_msg_hdr *msg_hdr = i2400m->tx_msg; in i2400m_tx_fits()
561 void i2400m_tx_new(struct i2400m *i2400m) in i2400m_tx_new() argument
563 struct device *dev = i2400m_dev(i2400m); in i2400m_tx_new()
566 BUG_ON(i2400m->tx_msg != NULL); in i2400m_tx_new()
576 tx_msg = i2400m_tx_fifo_push(i2400m, I2400M_TX_PLD_SIZE, in i2400m_tx_new()
577 i2400m->bus_tx_room_min, try_head); in i2400m_tx_new()
581 i2400m_tx_skip_tail(i2400m); in i2400m_tx_new()
589 i2400m->tx_msg = tx_msg; in i2400m_tx_new()
591 tx_msg, (void *) tx_msg - i2400m->tx_buf); in i2400m_tx_new()
613 void i2400m_tx_close(struct i2400m *i2400m) in i2400m_tx_close() argument
615 struct device *dev = i2400m_dev(i2400m); in i2400m_tx_close()
616 struct i2400m_msg_hdr *tx_msg = i2400m->tx_msg; in i2400m_tx_close()
654 aligned_size = ALIGN(tx_msg_moved->size, i2400m->bus_tx_block_size); in i2400m_tx_close()
657 pad_buf = i2400m_tx_fifo_push(i2400m, padding, 0, 0); in i2400m_tx_close()
669 aligned_size, i2400m->tx_buf, i2400m->tx_in, in i2400m_tx_close()
670 i2400m->tx_out); in i2400m_tx_close()
679 i2400m->tx_msg = NULL; in i2400m_tx_close()
715 int i2400m_tx(struct i2400m *i2400m, const void *buf, size_t buf_len, in i2400m_tx() argument
719 struct device *dev = i2400m_dev(i2400m); in i2400m_tx()
728 i2400m, buf, buf_len, pl_type); in i2400m_tx()
734 spin_lock_irqsave(&i2400m->tx_lock, flags); in i2400m_tx()
736 if (i2400m->tx_buf == NULL) { in i2400m_tx()
741 if (unlikely(i2400m->tx_msg == NULL)) in i2400m_tx()
742 i2400m_tx_new(i2400m); in i2400m_tx()
743 else if (unlikely(!i2400m_tx_fits(i2400m) in i2400m_tx()
744 || (is_singleton && i2400m->tx_msg->num_pls != 0))) { in i2400m_tx()
746 "%u num_pls %u)\n", i2400m_tx_fits(i2400m), in i2400m_tx()
747 is_singleton, i2400m->tx_msg->num_pls); in i2400m_tx()
748 i2400m_tx_close(i2400m); in i2400m_tx()
749 i2400m_tx_new(i2400m); in i2400m_tx()
751 if (i2400m->tx_msg == NULL) in i2400m_tx()
759 if (i2400m->tx_msg->size + padded_len > I2400M_TX_MSG_SIZE) { in i2400m_tx()
761 i2400m_tx_close(i2400m); in i2400m_tx()
762 i2400m_tx_new(i2400m); in i2400m_tx()
764 if (i2400m->tx_msg == NULL) in i2400m_tx()
768 ptr = i2400m_tx_fifo_push(i2400m, padded_len, in i2400m_tx()
769 i2400m->bus_tx_block_size, try_head); in i2400m_tx()
772 i2400m_tx_close(i2400m); in i2400m_tx()
773 i2400m_tx_skip_tail(i2400m); in i2400m_tx()
780 struct i2400m_msg_hdr *tx_msg = i2400m->tx_msg; in i2400m_tx()
794 (void *)tx_msg - i2400m->tx_buf, (size_t)tx_msg->size, in i2400m_tx()
795 num_pls+1, ptr - i2400m->tx_buf, buf_len, padded_len); in i2400m_tx()
798 i2400m_tx_close(i2400m); in i2400m_tx()
801 spin_unlock_irqrestore(&i2400m->tx_lock, flags); in i2400m_tx()
805 i2400m->bus_tx_kick(i2400m); in i2400m_tx()
807 i2400m, buf, buf_len, pl_type, result); in i2400m_tx()
839 struct i2400m_msg_hdr *i2400m_tx_msg_get(struct i2400m *i2400m, in i2400m_tx_msg_get() argument
842 struct device *dev = i2400m_dev(i2400m); in i2400m_tx_msg_get()
846 d_fnstart(3, dev, "(i2400m %p bus_size %p)\n", i2400m, bus_size); in i2400m_tx_msg_get()
847 spin_lock_irqsave(&i2400m->tx_lock, flags); in i2400m_tx_msg_get()
849 if (i2400m->tx_buf == NULL) in i2400m_tx_msg_get()
853 if (i2400m->tx_in == i2400m->tx_out) { /* Empty FIFO? */ in i2400m_tx_msg_get()
854 i2400m->tx_in = 0; in i2400m_tx_msg_get()
855 i2400m->tx_out = 0; in i2400m_tx_msg_get()
859 tx_msg = i2400m->tx_buf + i2400m->tx_out % I2400M_TX_BUF_SIZE; in i2400m_tx_msg_get()
862 i2400m->tx_out % I2400M_TX_BUF_SIZE, in i2400m_tx_msg_get()
864 i2400m->tx_out += tx_msg->size & ~I2400M_TX_SKIP; in i2400m_tx_msg_get()
869 if (tx_msg == i2400m->tx_msg) { /* open, we are done */ in i2400m_tx_msg_get()
872 (void *) tx_msg - i2400m->tx_buf); in i2400m_tx_msg_get()
878 (void *) tx_msg - i2400m->tx_buf, in i2400m_tx_msg_get()
880 i2400m->tx_out += tx_msg->size & ~I2400M_TX_SKIP; in i2400m_tx_msg_get()
884 if (tx_msg == i2400m->tx_msg) /* open msg? */ in i2400m_tx_msg_get()
885 i2400m_tx_close(i2400m); in i2400m_tx_msg_get()
889 i2400m->tx_msg_size = tx_msg->size; in i2400m_tx_msg_get()
893 current->pid, (void *) tx_msg - i2400m->tx_buf, in i2400m_tx_msg_get()
897 tx_msg_moved->sequence = le32_to_cpu(i2400m->tx_sequence++); in i2400m_tx_msg_get()
900 i2400m->tx_pl_num += pls; /* Update stats */ in i2400m_tx_msg_get()
901 if (pls > i2400m->tx_pl_max) in i2400m_tx_msg_get()
902 i2400m->tx_pl_max = pls; in i2400m_tx_msg_get()
903 if (pls < i2400m->tx_pl_min) in i2400m_tx_msg_get()
904 i2400m->tx_pl_min = pls; in i2400m_tx_msg_get()
905 i2400m->tx_num++; in i2400m_tx_msg_get()
906 i2400m->tx_size_acc += *bus_size; in i2400m_tx_msg_get()
907 if (*bus_size < i2400m->tx_size_min) in i2400m_tx_msg_get()
908 i2400m->tx_size_min = *bus_size; in i2400m_tx_msg_get()
909 if (*bus_size > i2400m->tx_size_max) in i2400m_tx_msg_get()
910 i2400m->tx_size_max = *bus_size; in i2400m_tx_msg_get()
912 spin_unlock_irqrestore(&i2400m->tx_lock, flags); in i2400m_tx_msg_get()
914 i2400m, bus_size, *bus_size, tx_msg_moved); in i2400m_tx_msg_get()
932 void i2400m_tx_msg_sent(struct i2400m *i2400m) in i2400m_tx_msg_sent() argument
936 struct device *dev = i2400m_dev(i2400m); in i2400m_tx_msg_sent()
938 d_fnstart(3, dev, "(i2400m %p)\n", i2400m); in i2400m_tx_msg_sent()
939 spin_lock_irqsave(&i2400m->tx_lock, flags); in i2400m_tx_msg_sent()
940 if (i2400m->tx_buf == NULL) in i2400m_tx_msg_sent()
942 i2400m->tx_out += i2400m->tx_msg_size; in i2400m_tx_msg_sent()
943 d_printf(2, dev, "TX: sent %zu b\n", (size_t) i2400m->tx_msg_size); in i2400m_tx_msg_sent()
944 i2400m->tx_msg_size = 0; in i2400m_tx_msg_sent()
945 BUG_ON(i2400m->tx_out > i2400m->tx_in); in i2400m_tx_msg_sent()
947 n = i2400m->tx_out / I2400M_TX_BUF_SIZE; in i2400m_tx_msg_sent()
948 i2400m->tx_out %= I2400M_TX_BUF_SIZE; in i2400m_tx_msg_sent()
949 i2400m->tx_in -= n * I2400M_TX_BUF_SIZE; in i2400m_tx_msg_sent()
951 spin_unlock_irqrestore(&i2400m->tx_lock, flags); in i2400m_tx_msg_sent()
952 d_fnend(3, dev, "(i2400m %p) = void\n", i2400m); in i2400m_tx_msg_sent()
965 int i2400m_tx_setup(struct i2400m *i2400m) in i2400m_tx_setup() argument
974 INIT_WORK(&i2400m->wake_tx_ws, i2400m_wake_tx_work); in i2400m_tx_setup()
987 spin_lock_irqsave(&i2400m->tx_lock, flags); in i2400m_tx_setup()
988 i2400m->tx_sequence = 0; in i2400m_tx_setup()
989 i2400m->tx_in = 0; in i2400m_tx_setup()
990 i2400m->tx_out = 0; in i2400m_tx_setup()
991 i2400m->tx_msg_size = 0; in i2400m_tx_setup()
992 i2400m->tx_msg = NULL; in i2400m_tx_setup()
993 i2400m->tx_buf = tx_buf; in i2400m_tx_setup()
994 spin_unlock_irqrestore(&i2400m->tx_lock, flags); in i2400m_tx_setup()
996 BUG_ON(i2400m->bus_tx_block_size == 0); in i2400m_tx_setup()
1006 void i2400m_tx_release(struct i2400m *i2400m) in i2400m_tx_release() argument
1009 spin_lock_irqsave(&i2400m->tx_lock, flags); in i2400m_tx_release()
1010 kfree(i2400m->tx_buf); in i2400m_tx_release()
1011 i2400m->tx_buf = NULL; in i2400m_tx_release()
1012 spin_unlock_irqrestore(&i2400m->tx_lock, flags); in i2400m_tx_release()