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