/* MUX for route link devices */ #define IPC_MEM_WWAN_MUX BIT(0)
/* Initiated actions to change the state of the MUX object. */ enum mux_event {
MUX_E_INACTIVE, /* No initiated actions. */
MUX_E_MUX_SESSION_OPEN, /* Create the MUX channel and a session. */
MUX_E_MUX_SESSION_CLOSE, /* Release a session. */
MUX_E_MUX_CHANNEL_CLOSE, /* Release the MUX channel. */
MUX_E_NO_ORDERS, /* No MUX order. */
MUX_E_NOT_APPLICABLE, /* Defect IP MUX. */
};
/* Default message type to find out the right message type. */ struct mux_common { enum mux_event event;
};
/* List of ops in MUX mode. */ union mux_msg { struct mux_session_open session_open; struct mux_session_close session_close; struct mux_channel_close channel_close; struct mux_common common;
};
/* Parameter definition of the open session command. */ struct mux_cmd_open_session {
u8 flow_ctrl; /* 0: Flow control disabled (flow allowed). */ /* 1: Flow control enabled (flow not allowed)*/
u8 ipv4v6_hints; /* 0: IPv4/IPv6 hints not supported.*/ /* 1: IPv4/IPv6 hints supported*/
__le16 reserved2; /* Reserved. Set to zero. */
__le32 dl_head_pad_len; /* Maximum length supported */ /* for DL head padding on a datagram. */
};
/* Parameter definition of the open session response. */ struct mux_cmd_open_session_resp {
__le32 response; /* Response code */
u8 flow_ctrl; /* 0: Flow control disabled (flow allowed). */ /* 1: Flow control enabled (flow not allowed) */
u8 ipv4v6_hints; /* 0: IPv4/IPv6 hints not supported */ /* 1: IPv4/IPv6 hints supported */
__le16 reserved2; /* Reserved. Set to zero. */
__le32 ul_head_pad_len; /* Actual length supported for */ /* UL head padding on adatagram.*/
};
/* Parameter definition of the close session response code */ struct mux_cmd_close_session_resp {
__le32 response;
};
/* Parameter definition of the flow control command. */ struct mux_cmd_flow_ctl {
__le32 mask; /* indicating the desired flow control */ /* state for various flows/queues */
};
/* Parameter definition of the link status report code*/ struct mux_cmd_link_status_report {
u8 payload;
};
/* Parameter definition of the link status report response code. */ struct mux_cmd_link_status_report_resp {
__le32 response;
};
/* States of the MUX object.. */ enum mux_state {
MUX_S_INACTIVE, /* IP MUX is unused. */
MUX_S_ACTIVE, /* IP MUX channel is available. */
MUX_S_ERROR, /* Defect IP MUX. */
};
/* Supported UL data transfer methods. */ enum ipc_mux_ul_flow {
MUX_UL_UNKNOWN,
MUX_UL, /* Normal UL data transfer */
MUX_UL_ON_CREDITS, /* UL data transfer will be based on credits */
};
/* List of the MUX session. */ struct mux_session { struct iosm_wwan *wwan; /*Network i/f used for communication*/ int if_id; /* i/f id for session open message.*/
u32 flags;
u32 ul_head_pad_len; /* Nr of bytes for UL head padding. */
u32 dl_head_pad_len; /* Nr of bytes for DL head padding. */ struct sk_buff_head ul_list; /* skb entries for an ADT. */
u32 flow_ctl_mask; /* UL flow control */
u32 flow_ctl_en_cnt; /* Flow control Enable cmd count */
u32 flow_ctl_dis_cnt; /* Flow Control Disable cmd count */ int ul_flow_credits; /* UL flow credits */
u8 net_tx_stop:1,
flush:1; /* flush net interface ? */
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.