OpenCores
URL https://opencores.org/ocsvn/hf-risc/hf-risc/trunk

Subversion Repositories hf-risc

[/] [hf-risc/] [trunk/] [tools/] [riscv-gnu-toolchain-master/] [linux-headers/] [include/] [linux/] [phonet.h] - Blame information for rev 13

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 13 serginhofr
/**
2
 * file phonet.h
3
 *
4
 * Phonet sockets kernel interface
5
 *
6
 * Copyright (C) 2008 Nokia Corporation. All rights reserved.
7
 *
8
 * This program is free software; you can redistribute it and/or
9
 * modify it under the terms of the GNU General Public License
10
 * version 2 as published by the Free Software Foundation.
11
 *
12
 * This program is distributed in the hope that it will be useful, but
13
 * WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
 * General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU General Public License
18
 * along with this program; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20
 * 02110-1301 USA
21
 */
22
 
23
#ifndef LINUX_PHONET_H
24
#define LINUX_PHONET_H
25
 
26
#include <linux/types.h>
27
#include <linux/socket.h>
28
 
29
/* Automatic protocol selection */
30
#define PN_PROTO_TRANSPORT      0
31
/* Phonet datagram socket */
32
#define PN_PROTO_PHONET         1
33
/* Phonet pipe */
34
#define PN_PROTO_PIPE           2
35
#define PHONET_NPROTO           3
36
 
37
/* Socket options for SOL_PNPIPE level */
38
#define PNPIPE_ENCAP            1
39
#define PNPIPE_IFINDEX          2
40
#define PNPIPE_HANDLE           3
41
#define PNPIPE_INITSTATE        4
42
 
43
#define PNADDR_ANY              0
44
#define PNADDR_BROADCAST        0xFC
45
#define PNPORT_RESOURCE_ROUTING 0
46
 
47
/* Values for PNPIPE_ENCAP option */
48
#define PNPIPE_ENCAP_NONE       0
49
#define PNPIPE_ENCAP_IP         1
50
 
51
/* ioctls */
52
#define SIOCPNGETOBJECT         (SIOCPROTOPRIVATE + 0)
53
#define SIOCPNENABLEPIPE        (SIOCPROTOPRIVATE + 13)
54
#define SIOCPNADDRESOURCE       (SIOCPROTOPRIVATE + 14)
55
#define SIOCPNDELRESOURCE       (SIOCPROTOPRIVATE + 15)
56
 
57
/* Phonet protocol header */
58
struct phonethdr {
59
        __u8    pn_rdev;
60
        __u8    pn_sdev;
61
        __u8    pn_res;
62
        __be16  pn_length;
63
        __u8    pn_robj;
64
        __u8    pn_sobj;
65
} __attribute__((packed));
66
 
67
/* Common Phonet payload header */
68
struct phonetmsg {
69
        __u8    pn_trans_id;    /* transaction ID */
70
        __u8    pn_msg_id;      /* message type */
71
        union {
72
                struct {
73
                        __u8    pn_submsg_id;   /* message subtype */
74
                        __u8    pn_data[5];
75
                } base;
76
                struct {
77
                        __u16   pn_e_res_id;    /* extended resource ID */
78
                        __u8    pn_e_submsg_id; /* message subtype */
79
                        __u8    pn_e_data[3];
80
                } ext;
81
        } pn_msg_u;
82
};
83
#define PN_COMMON_MESSAGE       0xF0
84
#define PN_COMMGR               0x10
85
#define PN_PREFIX               0xE0 /* resource for extended messages */
86
#define pn_submsg_id            pn_msg_u.base.pn_submsg_id
87
#define pn_e_submsg_id          pn_msg_u.ext.pn_e_submsg_id
88
#define pn_e_res_id             pn_msg_u.ext.pn_e_res_id
89
#define pn_data                 pn_msg_u.base.pn_data
90
#define pn_e_data               pn_msg_u.ext.pn_e_data
91
 
92
/* data for unreachable errors */
93
#define PN_COMM_SERVICE_NOT_IDENTIFIED_RESP     0x01
94
#define PN_COMM_ISA_ENTITY_NOT_REACHABLE_RESP   0x14
95
#define pn_orig_msg_id          pn_data[0]
96
#define pn_status               pn_data[1]
97
#define pn_e_orig_msg_id        pn_e_data[0]
98
#define pn_e_status             pn_e_data[1]
99
 
100
/* Phonet socket address structure */
101
struct sockaddr_pn {
102
        __kernel_sa_family_t spn_family;
103
        __u8 spn_obj;
104
        __u8 spn_dev;
105
        __u8 spn_resource;
106
        __u8 spn_zero[sizeof(struct sockaddr) - sizeof(__kernel_sa_family_t) - 3];
107
} __attribute__((packed));
108
 
109
/* Well known address */
110
#define PN_DEV_PC       0x10
111
 
112
static __inline__ __u16 pn_object(__u8 addr, __u16 port)
113
{
114
        return (addr << 8) | (port & 0x3ff);
115
}
116
 
117
static __inline__ __u8 pn_obj(__u16 handle)
118
{
119
        return handle & 0xff;
120
}
121
 
122
static __inline__ __u8 pn_dev(__u16 handle)
123
{
124
        return handle >> 8;
125
}
126
 
127
static __inline__ __u16 pn_port(__u16 handle)
128
{
129
        return handle & 0x3ff;
130
}
131
 
132
static __inline__ __u8 pn_addr(__u16 handle)
133
{
134
        return (handle >> 8) & 0xfc;
135
}
136
 
137
static __inline__ void pn_sockaddr_set_addr(struct sockaddr_pn *spn, __u8 addr)
138
{
139
        spn->spn_dev &= 0x03;
140
        spn->spn_dev |= addr & 0xfc;
141
}
142
 
143
static __inline__ void pn_sockaddr_set_port(struct sockaddr_pn *spn, __u16 port)
144
{
145
        spn->spn_dev &= 0xfc;
146
        spn->spn_dev |= (port >> 8) & 0x03;
147
        spn->spn_obj = port & 0xff;
148
}
149
 
150
static __inline__ void pn_sockaddr_set_object(struct sockaddr_pn *spn,
151
                                                __u16 handle)
152
{
153
        spn->spn_dev = pn_dev(handle);
154
        spn->spn_obj = pn_obj(handle);
155
}
156
 
157
static __inline__ void pn_sockaddr_set_resource(struct sockaddr_pn *spn,
158
                                                __u8 resource)
159
{
160
        spn->spn_resource = resource;
161
}
162
 
163
static __inline__ __u8 pn_sockaddr_get_addr(const struct sockaddr_pn *spn)
164
{
165
        return spn->spn_dev & 0xfc;
166
}
167
 
168
static __inline__ __u16 pn_sockaddr_get_port(const struct sockaddr_pn *spn)
169
{
170
        return ((spn->spn_dev & 0x03) << 8) | spn->spn_obj;
171
}
172
 
173
static __inline__ __u16 pn_sockaddr_get_object(const struct sockaddr_pn *spn)
174
{
175
        return pn_object(spn->spn_dev, spn->spn_obj);
176
}
177
 
178
static __inline__ __u8 pn_sockaddr_get_resource(const struct sockaddr_pn *spn)
179
{
180
        return spn->spn_resource;
181
}
182
 
183
/* Phonet device ioctl requests */
184
 
185
#endif /* LINUX_PHONET_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.