si->flags |= SI_FL_RXBLK_CHAN;
}
+/* Tell a stream interface the other side is connected */
+static inline void si_rx_conn_rdy(struct stream_interface *si)
+{
+ si->flags &= ~SI_FL_RXBLK_CONN;
+}
+
+/* Tell a stream interface it must wait for the other side to connect */
+static inline void si_rx_conn_blk(struct stream_interface *si)
+{
+ si->flags |= SI_FL_RXBLK_CONN;
+}
+
/* The stream interface just got the input buffer it was waiting for */
static inline void si_rx_buff_rdy(struct stream_interface *si)
{
*/
static inline void si_chk_rcv(struct stream_interface *si)
{
+ if (si->flags & SI_FL_RXBLK_CONN && (si_opposite(si)->state >= SI_ST_EST))
+ si_rx_conn_rdy(si);
+
if (si_rx_blocked(si) || !si_rx_endp_ready(si))
return;
SI_FL_RXBLK_BUFF = 0x00020000, /* stream-int waits for a buffer allocation to complete */
SI_FL_RXBLK_ROOM = 0x00040000, /* stream-int waits for more buffer room to store incoming data */
SI_FL_RXBLK_SHUT = 0x00080000, /* input is now closed, nothing new will ever come */
- SI_FL_RXBLK_ANY = 0x000F0000, /* any of the RXBLK flags above */
- SI_FL_RX_WAIT_EP = 0x00100000, /* stream-int waits for more data from the end point */
+ SI_FL_RXBLK_CONN = 0x00100000, /* other side is not connected */
+ SI_FL_RXBLK_ANY = 0x001F0000, /* any of the RXBLK flags above */
+ SI_FL_RX_WAIT_EP = 0x00200000, /* stream-int waits for more data from the end point */
};
/* A stream interface has 3 parts :