xref: /openbmc/linux/include/net/phonet/pep.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
12b27bdccSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
29995a32bSRémi Denis-Courmont /*
39995a32bSRémi Denis-Courmont  * File: pep.h
49995a32bSRémi Denis-Courmont  *
59995a32bSRémi Denis-Courmont  * Phonet Pipe End Point sockets definitions
69995a32bSRémi Denis-Courmont  *
79995a32bSRémi Denis-Courmont  * Copyright (C) 2008 Nokia Corporation.
89995a32bSRémi Denis-Courmont  */
99995a32bSRémi Denis-Courmont 
109995a32bSRémi Denis-Courmont #ifndef NET_PHONET_PEP_H
119995a32bSRémi Denis-Courmont #define NET_PHONET_PEP_H
129995a32bSRémi Denis-Courmont 
13*949d6b40SJakub Kicinski #include <linux/skbuff.h>
14*949d6b40SJakub Kicinski #include <net/phonet/phonet.h>
15*949d6b40SJakub Kicinski 
169995a32bSRémi Denis-Courmont struct pep_sock {
179995a32bSRémi Denis-Courmont 	struct pn_sock		pn_sk;
189995a32bSRémi Denis-Courmont 
199641458dSRémi Denis-Courmont 	/* XXX: union-ify listening vs connected stuff ? */
209995a32bSRémi Denis-Courmont 	/* Listening socket stuff: */
219641458dSRémi Denis-Courmont 	struct hlist_head	hlist;
229995a32bSRémi Denis-Courmont 
239995a32bSRémi Denis-Courmont 	/* Connected socket stuff: */
249641458dSRémi Denis-Courmont 	struct sock		*listener;
25c41bd97fSRémi Denis-Courmont 	struct sk_buff_head	ctrlreq_queue;
26c41bd97fSRémi Denis-Courmont #define PNPIPE_CTRLREQ_MAX	10
27be677730SRémi Denis-Courmont 	atomic_t		tx_credits;
2802a47617SRémi Denis-Courmont 	int			ifindex;
299641458dSRémi Denis-Courmont 	u16			peer_type;	/* peer type/subtype */
309641458dSRémi Denis-Courmont 	u8			pipe_handle;
319641458dSRémi Denis-Courmont 
329641458dSRémi Denis-Courmont 	u8			rx_credits;
339641458dSRémi Denis-Courmont 	u8			rx_fc;	/* RX flow control */
349641458dSRémi Denis-Courmont 	u8			tx_fc;	/* TX flow control */
359641458dSRémi Denis-Courmont 	u8			init_enable;	/* auto-enable at creation */
36fea93eceSRémi Denis-Courmont 	u8			aligned;
379995a32bSRémi Denis-Courmont };
389995a32bSRémi Denis-Courmont 
pep_sk(struct sock * sk)399995a32bSRémi Denis-Courmont static inline struct pep_sock *pep_sk(struct sock *sk)
409995a32bSRémi Denis-Courmont {
419995a32bSRémi Denis-Courmont 	return (struct pep_sock *)sk;
429995a32bSRémi Denis-Courmont }
439995a32bSRémi Denis-Courmont 
449995a32bSRémi Denis-Courmont extern const struct proto_ops phonet_stream_ops;
459995a32bSRémi Denis-Courmont 
469641458dSRémi Denis-Courmont /* Pipe protocol definitions */
479641458dSRémi Denis-Courmont struct pnpipehdr {
489641458dSRémi Denis-Courmont 	u8			utid; /* transaction ID */
499641458dSRémi Denis-Courmont 	u8			message_id;
509641458dSRémi Denis-Courmont 	u8			pipe_handle;
519641458dSRémi Denis-Courmont 	union {
529641458dSRémi Denis-Courmont 		u8		state_after_connect;	/* connect request */
539641458dSRémi Denis-Courmont 		u8		state_after_reset;	/* reset request */
549641458dSRémi Denis-Courmont 		u8		error_code;		/* any response */
559641458dSRémi Denis-Courmont 		u8		pep_type;		/* status indication */
566321aa19SArnd Bergmann 		u8		data0;			/* anything else */
579641458dSRémi Denis-Courmont 	};
586321aa19SArnd Bergmann 	u8			data[];
599641458dSRémi Denis-Courmont };
606321aa19SArnd Bergmann #define other_pep_type		data[0]
619641458dSRémi Denis-Courmont 
pnp_hdr(struct sk_buff * skb)629641458dSRémi Denis-Courmont static inline struct pnpipehdr *pnp_hdr(struct sk_buff *skb)
639641458dSRémi Denis-Courmont {
649641458dSRémi Denis-Courmont 	return (struct pnpipehdr *)skb_transport_header(skb);
659641458dSRémi Denis-Courmont }
669641458dSRémi Denis-Courmont 
679641458dSRémi Denis-Courmont #define MAX_PNPIPE_HEADER (MAX_PHONET_HEADER + 4)
689641458dSRémi Denis-Courmont 
699641458dSRémi Denis-Courmont enum {
706482f554SRémi Denis-Courmont 	PNS_PIPE_CREATE_REQ = 0x00,
716482f554SRémi Denis-Courmont 	PNS_PIPE_CREATE_RESP,
726482f554SRémi Denis-Courmont 	PNS_PIPE_REMOVE_REQ,
736482f554SRémi Denis-Courmont 	PNS_PIPE_REMOVE_RESP,
746482f554SRémi Denis-Courmont 
759641458dSRémi Denis-Courmont 	PNS_PIPE_DATA = 0x20,
76fc6a1107SRémi Denis-Courmont 	PNS_PIPE_ALIGNED_DATA,
779641458dSRémi Denis-Courmont 
789641458dSRémi Denis-Courmont 	PNS_PEP_CONNECT_REQ = 0x40,
799641458dSRémi Denis-Courmont 	PNS_PEP_CONNECT_RESP,
809641458dSRémi Denis-Courmont 	PNS_PEP_DISCONNECT_REQ,
819641458dSRémi Denis-Courmont 	PNS_PEP_DISCONNECT_RESP,
829641458dSRémi Denis-Courmont 	PNS_PEP_RESET_REQ,
839641458dSRémi Denis-Courmont 	PNS_PEP_RESET_RESP,
849641458dSRémi Denis-Courmont 	PNS_PEP_ENABLE_REQ,
859641458dSRémi Denis-Courmont 	PNS_PEP_ENABLE_RESP,
869641458dSRémi Denis-Courmont 	PNS_PEP_CTRL_REQ,
879641458dSRémi Denis-Courmont 	PNS_PEP_CTRL_RESP,
889641458dSRémi Denis-Courmont 	PNS_PEP_DISABLE_REQ = 0x4C,
899641458dSRémi Denis-Courmont 	PNS_PEP_DISABLE_RESP,
909641458dSRémi Denis-Courmont 
919641458dSRémi Denis-Courmont 	PNS_PEP_STATUS_IND = 0x60,
929641458dSRémi Denis-Courmont 	PNS_PIPE_CREATED_IND,
939641458dSRémi Denis-Courmont 	PNS_PIPE_RESET_IND = 0x63,
949641458dSRémi Denis-Courmont 	PNS_PIPE_ENABLED_IND,
959641458dSRémi Denis-Courmont 	PNS_PIPE_REDIRECTED_IND,
969641458dSRémi Denis-Courmont 	PNS_PIPE_DISABLED_IND = 0x66,
979641458dSRémi Denis-Courmont };
989641458dSRémi Denis-Courmont 
999641458dSRémi Denis-Courmont #define PN_PIPE_INVALID_HANDLE	0xff
1009641458dSRémi Denis-Courmont #define PN_PEP_TYPE_COMMON	0x00
1019641458dSRémi Denis-Courmont 
1029641458dSRémi Denis-Courmont /* Phonet pipe status indication */
1039641458dSRémi Denis-Courmont enum {
1049641458dSRémi Denis-Courmont 	PN_PEP_IND_FLOW_CONTROL,
1059641458dSRémi Denis-Courmont 	PN_PEP_IND_ID_MCFC_GRANT_CREDITS,
1069641458dSRémi Denis-Courmont };
1079641458dSRémi Denis-Courmont 
1089641458dSRémi Denis-Courmont /* Phonet pipe error codes */
1099641458dSRémi Denis-Courmont enum {
1109641458dSRémi Denis-Courmont 	PN_PIPE_NO_ERROR,
1119641458dSRémi Denis-Courmont 	PN_PIPE_ERR_INVALID_PARAM,
1129641458dSRémi Denis-Courmont 	PN_PIPE_ERR_INVALID_HANDLE,
1139641458dSRémi Denis-Courmont 	PN_PIPE_ERR_INVALID_CTRL_ID,
1149641458dSRémi Denis-Courmont 	PN_PIPE_ERR_NOT_ALLOWED,
1159641458dSRémi Denis-Courmont 	PN_PIPE_ERR_PEP_IN_USE,
1169641458dSRémi Denis-Courmont 	PN_PIPE_ERR_OVERLOAD,
1179641458dSRémi Denis-Courmont 	PN_PIPE_ERR_DEV_DISCONNECTED,
1189641458dSRémi Denis-Courmont 	PN_PIPE_ERR_TIMEOUT,
1199641458dSRémi Denis-Courmont 	PN_PIPE_ERR_ALL_PIPES_IN_USE,
1209641458dSRémi Denis-Courmont 	PN_PIPE_ERR_GENERAL,
1219641458dSRémi Denis-Courmont 	PN_PIPE_ERR_NOT_SUPPORTED,
1229641458dSRémi Denis-Courmont };
1239641458dSRémi Denis-Courmont 
1249641458dSRémi Denis-Courmont /* Phonet pipe states */
1259641458dSRémi Denis-Courmont enum {
1269641458dSRémi Denis-Courmont 	PN_PIPE_DISABLE,
1279641458dSRémi Denis-Courmont 	PN_PIPE_ENABLE,
1289641458dSRémi Denis-Courmont };
1299641458dSRémi Denis-Courmont 
1309641458dSRémi Denis-Courmont /* Phonet pipe sub-block types */
1319641458dSRémi Denis-Courmont enum {
1329641458dSRémi Denis-Courmont 	PN_PIPE_SB_CREATE_REQ_PEP_SUB_TYPE,
1339641458dSRémi Denis-Courmont 	PN_PIPE_SB_CONNECT_REQ_PEP_SUB_TYPE,
1349641458dSRémi Denis-Courmont 	PN_PIPE_SB_REDIRECT_REQ_PEP_SUB_TYPE,
1359641458dSRémi Denis-Courmont 	PN_PIPE_SB_NEGOTIATED_FC,
1369641458dSRémi Denis-Courmont 	PN_PIPE_SB_REQUIRED_FC_TX,
1379641458dSRémi Denis-Courmont 	PN_PIPE_SB_PREFERRED_FC_RX,
138fea93eceSRémi Denis-Courmont 	PN_PIPE_SB_ALIGNED_DATA,
1399641458dSRémi Denis-Courmont };
1409641458dSRémi Denis-Courmont 
1419641458dSRémi Denis-Courmont /* Phonet pipe flow control models */
1429641458dSRémi Denis-Courmont enum {
1439641458dSRémi Denis-Courmont 	PN_NO_FLOW_CONTROL,
1449641458dSRémi Denis-Courmont 	PN_LEGACY_FLOW_CONTROL,
1459641458dSRémi Denis-Courmont 	PN_ONE_CREDIT_FLOW_CONTROL,
1469641458dSRémi Denis-Courmont 	PN_MULTI_CREDIT_FLOW_CONTROL,
1478f44fcc7SRémi Denis-Courmont 	PN_MAX_FLOW_CONTROL,
1489641458dSRémi Denis-Courmont };
1499641458dSRémi Denis-Courmont 
1509641458dSRémi Denis-Courmont #define pn_flow_safe(fc) ((fc) >> 1)
1519641458dSRémi Denis-Courmont 
1529641458dSRémi Denis-Courmont /* Phonet pipe flow control states */
1539641458dSRémi Denis-Courmont enum {
1549641458dSRémi Denis-Courmont 	PEP_IND_EMPTY,
1559641458dSRémi Denis-Courmont 	PEP_IND_BUSY,
1569641458dSRémi Denis-Courmont 	PEP_IND_READY,
1579641458dSRémi Denis-Courmont };
1589641458dSRémi Denis-Courmont 
1599995a32bSRémi Denis-Courmont #endif
160