Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * File: pep.h
0004  *
0005  * Phonet Pipe End Point sockets definitions
0006  *
0007  * Copyright (C) 2008 Nokia Corporation.
0008  */
0009 
0010 #ifndef NET_PHONET_PEP_H
0011 #define NET_PHONET_PEP_H
0012 
0013 #include <linux/skbuff.h>
0014 #include <net/phonet/phonet.h>
0015 
0016 struct pep_sock {
0017     struct pn_sock      pn_sk;
0018 
0019     /* XXX: union-ify listening vs connected stuff ? */
0020     /* Listening socket stuff: */
0021     struct hlist_head   hlist;
0022 
0023     /* Connected socket stuff: */
0024     struct sock     *listener;
0025     struct sk_buff_head ctrlreq_queue;
0026 #define PNPIPE_CTRLREQ_MAX  10
0027     atomic_t        tx_credits;
0028     int         ifindex;
0029     u16         peer_type;  /* peer type/subtype */
0030     u8          pipe_handle;
0031 
0032     u8          rx_credits;
0033     u8          rx_fc;  /* RX flow control */
0034     u8          tx_fc;  /* TX flow control */
0035     u8          init_enable;    /* auto-enable at creation */
0036     u8          aligned;
0037 };
0038 
0039 static inline struct pep_sock *pep_sk(struct sock *sk)
0040 {
0041     return (struct pep_sock *)sk;
0042 }
0043 
0044 extern const struct proto_ops phonet_stream_ops;
0045 
0046 /* Pipe protocol definitions */
0047 struct pnpipehdr {
0048     u8          utid; /* transaction ID */
0049     u8          message_id;
0050     u8          pipe_handle;
0051     union {
0052         u8      state_after_connect;    /* connect request */
0053         u8      state_after_reset;  /* reset request */
0054         u8      error_code;     /* any response */
0055         u8      pep_type;       /* status indication */
0056         u8      data0;          /* anything else */
0057     };
0058     u8          data[];
0059 };
0060 #define other_pep_type      data[0]
0061 
0062 static inline struct pnpipehdr *pnp_hdr(struct sk_buff *skb)
0063 {
0064     return (struct pnpipehdr *)skb_transport_header(skb);
0065 }
0066 
0067 #define MAX_PNPIPE_HEADER (MAX_PHONET_HEADER + 4)
0068 
0069 enum {
0070     PNS_PIPE_CREATE_REQ = 0x00,
0071     PNS_PIPE_CREATE_RESP,
0072     PNS_PIPE_REMOVE_REQ,
0073     PNS_PIPE_REMOVE_RESP,
0074 
0075     PNS_PIPE_DATA = 0x20,
0076     PNS_PIPE_ALIGNED_DATA,
0077 
0078     PNS_PEP_CONNECT_REQ = 0x40,
0079     PNS_PEP_CONNECT_RESP,
0080     PNS_PEP_DISCONNECT_REQ,
0081     PNS_PEP_DISCONNECT_RESP,
0082     PNS_PEP_RESET_REQ,
0083     PNS_PEP_RESET_RESP,
0084     PNS_PEP_ENABLE_REQ,
0085     PNS_PEP_ENABLE_RESP,
0086     PNS_PEP_CTRL_REQ,
0087     PNS_PEP_CTRL_RESP,
0088     PNS_PEP_DISABLE_REQ = 0x4C,
0089     PNS_PEP_DISABLE_RESP,
0090 
0091     PNS_PEP_STATUS_IND = 0x60,
0092     PNS_PIPE_CREATED_IND,
0093     PNS_PIPE_RESET_IND = 0x63,
0094     PNS_PIPE_ENABLED_IND,
0095     PNS_PIPE_REDIRECTED_IND,
0096     PNS_PIPE_DISABLED_IND = 0x66,
0097 };
0098 
0099 #define PN_PIPE_INVALID_HANDLE  0xff
0100 #define PN_PEP_TYPE_COMMON  0x00
0101 
0102 /* Phonet pipe status indication */
0103 enum {
0104     PN_PEP_IND_FLOW_CONTROL,
0105     PN_PEP_IND_ID_MCFC_GRANT_CREDITS,
0106 };
0107 
0108 /* Phonet pipe error codes */
0109 enum {
0110     PN_PIPE_NO_ERROR,
0111     PN_PIPE_ERR_INVALID_PARAM,
0112     PN_PIPE_ERR_INVALID_HANDLE,
0113     PN_PIPE_ERR_INVALID_CTRL_ID,
0114     PN_PIPE_ERR_NOT_ALLOWED,
0115     PN_PIPE_ERR_PEP_IN_USE,
0116     PN_PIPE_ERR_OVERLOAD,
0117     PN_PIPE_ERR_DEV_DISCONNECTED,
0118     PN_PIPE_ERR_TIMEOUT,
0119     PN_PIPE_ERR_ALL_PIPES_IN_USE,
0120     PN_PIPE_ERR_GENERAL,
0121     PN_PIPE_ERR_NOT_SUPPORTED,
0122 };
0123 
0124 /* Phonet pipe states */
0125 enum {
0126     PN_PIPE_DISABLE,
0127     PN_PIPE_ENABLE,
0128 };
0129 
0130 /* Phonet pipe sub-block types */
0131 enum {
0132     PN_PIPE_SB_CREATE_REQ_PEP_SUB_TYPE,
0133     PN_PIPE_SB_CONNECT_REQ_PEP_SUB_TYPE,
0134     PN_PIPE_SB_REDIRECT_REQ_PEP_SUB_TYPE,
0135     PN_PIPE_SB_NEGOTIATED_FC,
0136     PN_PIPE_SB_REQUIRED_FC_TX,
0137     PN_PIPE_SB_PREFERRED_FC_RX,
0138     PN_PIPE_SB_ALIGNED_DATA,
0139 };
0140 
0141 /* Phonet pipe flow control models */
0142 enum {
0143     PN_NO_FLOW_CONTROL,
0144     PN_LEGACY_FLOW_CONTROL,
0145     PN_ONE_CREDIT_FLOW_CONTROL,
0146     PN_MULTI_CREDIT_FLOW_CONTROL,
0147     PN_MAX_FLOW_CONTROL,
0148 };
0149 
0150 #define pn_flow_safe(fc) ((fc) >> 1)
0151 
0152 /* Phonet pipe flow control states */
0153 enum {
0154     PEP_IND_EMPTY,
0155     PEP_IND_BUSY,
0156     PEP_IND_READY,
0157 };
0158 
0159 #endif