Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * File: pep.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Phonet Pipe End Point sockets definitions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  * Copyright (C) 2008 Nokia Corporation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #ifndef NET_PHONET_PEP_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #define NET_PHONET_PEP_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) struct pep_sock {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 	struct pn_sock		pn_sk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 	/* XXX: union-ify listening vs connected stuff ? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 	/* Listening socket stuff: */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 	struct hlist_head	hlist;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 	/* Connected socket stuff: */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 	struct sock		*listener;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 	struct sk_buff_head	ctrlreq_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #define PNPIPE_CTRLREQ_MAX	10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 	atomic_t		tx_credits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 	int			ifindex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 	u16			peer_type;	/* peer type/subtype */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	u8			pipe_handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 	u8			rx_credits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	u8			rx_fc;	/* RX flow control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	u8			tx_fc;	/* TX flow control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	u8			init_enable;	/* auto-enable at creation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	u8			aligned;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) static inline struct pep_sock *pep_sk(struct sock *sk)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 	return (struct pep_sock *)sk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) extern const struct proto_ops phonet_stream_ops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) /* Pipe protocol definitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) struct pnpipehdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	u8			utid; /* transaction ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	u8			message_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	u8			pipe_handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 		u8		state_after_connect;	/* connect request */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 		u8		state_after_reset;	/* reset request */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 		u8		error_code;		/* any response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 		u8		pep_type;		/* status indication */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 		u8		data0;			/* anything else */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	u8			data[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) #define other_pep_type		data[0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) static inline struct pnpipehdr *pnp_hdr(struct sk_buff *skb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	return (struct pnpipehdr *)skb_transport_header(skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) #define MAX_PNPIPE_HEADER (MAX_PHONET_HEADER + 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	PNS_PIPE_CREATE_REQ = 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	PNS_PIPE_CREATE_RESP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	PNS_PIPE_REMOVE_REQ,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	PNS_PIPE_REMOVE_RESP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	PNS_PIPE_DATA = 0x20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	PNS_PIPE_ALIGNED_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	PNS_PEP_CONNECT_REQ = 0x40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	PNS_PEP_CONNECT_RESP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	PNS_PEP_DISCONNECT_REQ,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	PNS_PEP_DISCONNECT_RESP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	PNS_PEP_RESET_REQ,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	PNS_PEP_RESET_RESP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	PNS_PEP_ENABLE_REQ,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	PNS_PEP_ENABLE_RESP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	PNS_PEP_CTRL_REQ,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	PNS_PEP_CTRL_RESP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	PNS_PEP_DISABLE_REQ = 0x4C,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	PNS_PEP_DISABLE_RESP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	PNS_PEP_STATUS_IND = 0x60,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	PNS_PIPE_CREATED_IND,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	PNS_PIPE_RESET_IND = 0x63,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	PNS_PIPE_ENABLED_IND,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	PNS_PIPE_REDIRECTED_IND,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	PNS_PIPE_DISABLED_IND = 0x66,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) #define PN_PIPE_INVALID_HANDLE	0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) #define PN_PEP_TYPE_COMMON	0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) /* Phonet pipe status indication */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	PN_PEP_IND_FLOW_CONTROL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	PN_PEP_IND_ID_MCFC_GRANT_CREDITS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) /* Phonet pipe error codes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	PN_PIPE_NO_ERROR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	PN_PIPE_ERR_INVALID_PARAM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	PN_PIPE_ERR_INVALID_HANDLE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	PN_PIPE_ERR_INVALID_CTRL_ID,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	PN_PIPE_ERR_NOT_ALLOWED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	PN_PIPE_ERR_PEP_IN_USE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	PN_PIPE_ERR_OVERLOAD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	PN_PIPE_ERR_DEV_DISCONNECTED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	PN_PIPE_ERR_TIMEOUT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	PN_PIPE_ERR_ALL_PIPES_IN_USE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	PN_PIPE_ERR_GENERAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	PN_PIPE_ERR_NOT_SUPPORTED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) /* Phonet pipe states */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	PN_PIPE_DISABLE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	PN_PIPE_ENABLE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) /* Phonet pipe sub-block types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	PN_PIPE_SB_CREATE_REQ_PEP_SUB_TYPE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 	PN_PIPE_SB_CONNECT_REQ_PEP_SUB_TYPE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 	PN_PIPE_SB_REDIRECT_REQ_PEP_SUB_TYPE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 	PN_PIPE_SB_NEGOTIATED_FC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 	PN_PIPE_SB_REQUIRED_FC_TX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 	PN_PIPE_SB_PREFERRED_FC_RX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	PN_PIPE_SB_ALIGNED_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) /* Phonet pipe flow control models */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	PN_NO_FLOW_CONTROL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 	PN_LEGACY_FLOW_CONTROL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	PN_ONE_CREDIT_FLOW_CONTROL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	PN_MULTI_CREDIT_FLOW_CONTROL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	PN_MAX_FLOW_CONTROL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) #define pn_flow_safe(fc) ((fc) >> 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) /* Phonet pipe flow control states */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	PEP_IND_EMPTY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 	PEP_IND_BUSY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	PEP_IND_READY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) #endif