OpenCores
URL https://opencores.org/ocsvn/rio/rio/trunk

Subversion Repositories rio

[/] [rio/] [trunk/] [sw/] [stack/] [riopacket.h] - Blame information for rev 49

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 49 magro732
/*******************************************************************************
2
 *
3
 * RapidIO IP Library Core
4
 *
5
 * This file is part of the RapidIO IP library project
6
 * http://www.opencores.org/cores/rio/
7
 *
8
 * Description:
9
 * This file contains the public API for riopacket.
10
 *
11
 * To Do:
12
 * -
13
 *
14
 * Author(s):
15
 * - Magnus Rosenius, magro732@opencores.org
16
 *
17
 *******************************************************************************
18
 *
19
 * Copyright (C) 2015 Authors and OPENCORES.ORG
20
 *
21
 * This source file may be used and distributed without
22
 * restriction provided that this copyright statement is not
23
 * removed from the file and that any derivative work contains
24
 * the original copyright notice and the associated disclaimer.
25
 *
26
 * This source file is free software; you can redistribute it
27
 * and/or modify it under the terms of the GNU Lesser General
28
 * Public License as published by the Free Software Foundation;
29
 * either version 2.1 of the License, or (at your option) any
30
 * later version.
31
 *
32
 * This source is distributed in the hope that it will be
33
 * useful, but WITHOUT ANY WARRANTY; without even the implied
34
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
35
 * PURPOSE. See the GNU Lesser General Public License for more
36
 * details.
37
 *
38
 * You should have received a copy of the GNU Lesser General
39
 * Public License along with this source; if not, download it
40
 * from http://www.opencores.org/lgpl.shtml
41
 *
42
 *******************************************************************************/
43
 
44
/**
45
 * \file riopacket.c
46
 */
47
 
48
#ifndef __RIOPACKET_H
49
#define __RIOPACKET_H
50
 
51
/*******************************************************************************
52
 * Includes
53
 *******************************************************************************/
54
 
55
#include "rioconfig.h"
56
 
57
 
58
/*******************************************************************************
59
 * Global typedefs
60
 *******************************************************************************/
61
 
62
/* The maximum size of a RapidIO packet in words (32-bit). */
63
#define RIOPACKET_SIZE_MIN 3u
64
#define RIOPACKET_SIZE_MAX 69u
65
 
66
/* Configuration space offsets. */
67
#define DEVICE_IDENTITY_CAR ((uint32_t)0x00000000ul)
68
#define DEVICE_INFORMATION_CAR ((uint32_t)0x00000004ul)
69
#define ASSEMBLY_IDENTITY_CAR ((uint32_t)0x00000008ul)
70
#define ASSEMBLY_INFORMATION_CAR ((uint32_t)0x0000000cul)
71
#define PROCESSING_ELEMENT_FEATURES_CAR ((uint32_t)0x00000010ul)
72
#define SWITCH_PORT_INFORMATION_CAR ((uint32_t)0x00000014ul)
73
#define SOURCE_OPERATIONS_CAR ((uint32_t)0x00000018ul)
74
#define DESTINATION_OPERATIONS_CAR ((uint32_t)0x0000001cul)
75
#define SWITCH_ROUTE_TABLE_DESTINATION_ID_LIMIT_CAR ((uint32_t)0x00000034ul)
76
#define PROCESSING_ELEMENT_LOGICAL_LAYER_CONTROL_CSR ((uint32_t)0x0000004cul)
77
#define BASE_DEVICE_ID_CSR ((uint32_t)0x00000060ul)
78
#define HOST_BASE_DEVICE_ID_LOCK_CSR ((uint32_t)0x00000068ul)
79
#define COMPONENT_TAG_CSR ((uint32_t)0x0000006cul)
80
#define STANDARD_ROUTE_CONFIGURATION_DESTINATION_ID_SELECT_CSR ((uint32_t)0x00000070ul)
81
#define STANDARD_ROUTE_CONFIGURATION_PORT_SELECT_CSR ((uint32_t)0x00000074ul)
82
#define STANDARD_ROUTE_DEFAULT_PORT_CSR ((uint32_t)0x00000078ul)
83
#define EXTENDED_FEATURES_OFFSET ((uint32_t)0x00000100ul)
84
#define IMPLEMENTATION_DEFINED_OFFSET ((uint32_t)0x00010000ul)
85
#define LP_SERIAL_REGISTER_BLOCK_HEADER(offset) (offset)
86
#define PORT_LINK_TIMEOUT_CONTROL_CSR(offset) ((offset) + 0x00000020ul)
87
#define PORT_RESPONSE_TIMEOUT_CONTROL_CSR(offset) ((offset) + 0x00000024ul)
88
#define PORT_GENERAL_CONTROL_CSR(offset) ((offset) + 0x0000003cul)
89
#define PORT_N_LOCAL_ACKID_CSR(offset, n) ((offset) + (0x00000048ul+((n)*0x00000020ul)))
90
#define PORT_N_ERROR_AND_STATUS_CSR(offset, n) ((offset) + (0x00000058ul+((n)*0x00000020ul)))
91
#define PORT_N_CONTROL_CSR(offset, n) ((offset) + (0x0000005cul+((n)*0x00000020ul)))
92
 
93
/* Packet ftype constants. */
94
#define RIOPACKET_FTYPE_REQUEST 0x2
95
#define RIOPACKET_FTYPE_WRITE 0x5
96
#define RIOPACKET_FTYPE_MAINTENANCE 0x8
97
#define RIOPACKET_FTYPE_DOORBELL 0xa
98
#define RIOPACKET_FTYPE_MESSAGE 0xb
99
#define RIOPACKET_FTYPE_RESPONSE 0xd
100
 
101
/* Transaction constants. */
102
#define RIOPACKET_TRANSACTION_MAINT_READ_REQUEST 0ul
103
#define RIOPACKET_TRANSACTION_MAINT_WRITE_REQUEST 1ul
104
#define RIOPACKET_TRANSACTION_MAINT_READ_RESPONSE 2ul
105
#define RIOPACKET_TRANSACTION_MAINT_WRITE_RESPONSE 3ul
106
#define RIOPACKET_TRANSACTION_MAINT_PORT_WRITE_REQUEST 4ul
107
#define RIOPACKET_TRANSACTION_WRITE_NWRITE 4ul
108
#define RIOPACKET_TRANSACTION_WRITE_NWRITER 5ul
109
#define RIOPACKET_TRANSACTION_REQUEST_NREAD 4ul
110
#define RIOPACKET_TRANSACTION_RESPONSE_NO_PAYLOAD 0ul
111
#define RIOPACKET_TRANSACTION_RESPONSE_MESSAGE_RESPONSE 1ul
112
#define RIOPACKET_TRANSACTION_RESPONSE_WITH_PAYLOAD 8ul
113
 
114
/* Response status constants. */
115
#define RIOPACKET_RESPONSE_STATUS_DONE 0ul
116
#define RIOPACKET_RESPONSE_STATUS_RETRY 3ul
117
#define RIOPACKET_RESPONSE_STATUS_ERROR 7ul
118
 
119
 
120
/* The structure containing a RapidIO packet. */
121
typedef struct
122
{
123
  /* Size in words. */
124
  uint8_t size;
125
  uint32_t payload[RIOPACKET_SIZE_MAX];
126
} RioPacket_t;
127
 
128
 
129
 
130
/*******************************************************************************
131
 * Global function prototypes
132
 *******************************************************************************/
133
 
134
void RIOPACKET_init(RioPacket_t *packet);
135
uint8_t RIOPACKET_size(RioPacket_t *packet);
136
void RIOPACKET_append(RioPacket_t *packet, uint32_t word);
137
 
138
int RIOPACKET_valid(RioPacket_t *packet);
139
 
140
int RIOPACKET_serialize(RioPacket_t *packet, const uint16_t size, uint8_t *buffer);
141
int RIOPACKET_deserialize(RioPacket_t *packet, const uint16_t size, const uint8_t *buffer);
142
 
143
#ifdef ENABLE_TOSTRING
144
#include <stdio.h>
145
void RIOPACKET_toString(RioPacket_t *packet, char *buffer);
146
#endif
147
 
148
uint8_t RIOPACKET_getFtype(RioPacket_t *packet);
149
uint16_t RIOPACKET_getDestination(RioPacket_t *packet);
150
uint16_t RIOPACKET_getSource(RioPacket_t *packet);
151
uint8_t RIOPACKET_getTransaction(RioPacket_t *packet);
152
uint8_t RIOPACKET_getTid(RioPacket_t *packet);
153
 
154
void RIOPACKET_setMaintReadRequest(RioPacket_t *packet,
155
                                   uint16_t destId, uint16_t srcId, uint8_t hop,
156
                                   uint8_t tid, uint32_t offset);
157
void RIOPACKET_getMaintReadRequest(RioPacket_t *packet,
158
                                   uint16_t *destId, uint16_t *srcId, uint8_t *hop,
159
                                   uint8_t *tid, uint32_t *offset);
160
 
161
void RIOPACKET_setMaintReadResponse(RioPacket_t *packet,
162
                                    uint16_t destId, uint16_t srcId,
163
                                    uint8_t tid, uint32_t data);
164
void RIOPACKET_getMaintReadResponse(RioPacket_t *packet,
165
                                    uint16_t *destId, uint16_t *srcId,
166
                                    uint8_t *tid, uint32_t *data);
167
 
168
void RIOPACKET_setMaintWriteRequest(RioPacket_t *packet,
169
                                    uint16_t destId, uint16_t srcId, uint8_t hop,
170
                                    uint8_t tid, uint32_t offset, uint32_t data);
171
void RIOPACKET_getMaintWriteRequest(RioPacket_t *packet,
172
                                    uint16_t *destId, uint16_t *srcId, uint8_t *hop,
173
                                    uint8_t *tid, uint32_t *offset, uint32_t *data);
174
 
175
void RIOPACKET_setMaintWriteResponse(RioPacket_t *packet,
176
                                     uint16_t destId, uint16_t srcId,
177
                                     uint8_t tid);
178
void RIOPACKET_getMaintWriteResponse(RioPacket_t *packet,
179
                                     uint16_t *destId, uint16_t *srcId,
180
                                     uint8_t *tid);
181
 
182
void RIOPACKET_setMaintPortWrite(RioPacket_t *packet,
183
                                 uint16_t destId, uint16_t srcId,
184
                                 uint32_t componentTag, uint32_t portErrorDetect,
185
                                 uint32_t implementationSpecific, uint8_t portId,
186
                                 uint32_t logicalTransportErrorDetect);
187
void RIOPACKET_getMaintPortWrite(RioPacket_t *packet,
188
                                 uint16_t *destId, uint16_t *srcId,
189
                                 uint32_t *componentTag, uint32_t *portErrorDetect,
190
                                 uint32_t *implementationSpecific, uint8_t *portId,
191
                                 uint32_t *logicalTransportErrorDetect);
192
 
193
void RIOPACKET_setNwrite(RioPacket_t *packet,
194
                         uint16_t destId, uint16_t srcId,
195
                         uint32_t address, uint16_t payloadSize, uint8_t *payload);
196
void RIOPACKET_getNwrite(RioPacket_t *packet,
197
                         uint16_t *destId, uint16_t *srcId,
198
                         uint32_t *address, uint16_t *payloadSize, uint8_t *payload);
199
 
200
void RIOPACKET_setNwriteR(RioPacket_t *packet,
201
                          uint16_t destId, uint16_t srcId,
202
                          uint8_t tid,
203
                          uint32_t address, uint16_t payloadSize, uint8_t *payload);
204
void RIOPACKET_getNwriteR(RioPacket_t *packet,
205
                          uint16_t *destId, uint16_t *srcId,
206
                          uint8_t *tid,
207
                          uint32_t *address, uint16_t *payloadSize, uint8_t *payload);
208
 
209
void RIOPACKET_setNread(RioPacket_t *packet,
210
                        uint16_t destId, uint16_t srcId,
211
                        uint8_t tid,
212
                        uint32_t address, uint16_t payloadSize);
213
void RIOPACKET_getNread(RioPacket_t *packet,
214
                        uint16_t *destId, uint16_t *srcId,
215
                        uint8_t *tid,
216
                        uint32_t *address, uint16_t *payloadSize);
217
 
218
 
219
void RIOPACKET_setDoorbell(RioPacket_t *packet,
220
                           uint16_t destId, uint16_t srcId,
221
                           uint8_t tid, uint16_t info);
222
void RIOPACKET_getDoorbell(RioPacket_t *packet,
223
                           uint16_t *destId, uint16_t *srcId,
224
                           uint8_t *tid, uint16_t *info);
225
 
226
void RIOPACKET_setMessage(RioPacket_t *packet,
227
                          uint16_t destId, uint16_t srcId,
228
                          uint8_t mailbox,
229
                          uint16_t size, uint8_t *payload);
230
void RIOPACKET_getMessage(RioPacket_t *packet,
231
                          uint16_t *destId, uint16_t *srcId,
232
                          uint8_t *mailbox,
233
                          uint16_t *size, uint8_t *payload);
234
 
235
 
236
void RIOPACKET_setResponseNoPayload(RioPacket_t *packet,
237
                                    uint16_t destId, uint16_t srcId,
238
                                    uint8_t tid, uint8_t status);
239
void RIOPACKET_getResponseNoPayload(RioPacket_t *packet,
240
                                    uint16_t *destId, uint16_t *srcId,
241
                                    uint8_t *tid, uint8_t *status);
242
 
243
void RIOPACKET_setResponseWithPayload(RioPacket_t *packet,
244
                                      uint16_t destId, uint16_t srcId,
245
                                      uint8_t tid, uint8_t offset,
246
                                      uint16_t size, uint8_t *payload);
247
void RIOPACKET_getResponseWithPayload(RioPacket_t *packet,
248
                                      uint16_t *destId, uint16_t *srcId,
249
                                      uint8_t *tid, uint8_t offset,
250
                                      uint16_t *size, uint8_t *payload);
251
 
252
void RIOPACKET_setResponseMessage(RioPacket_t *packet,
253
                                  uint16_t destId, uint16_t srcId,
254
                                  uint8_t mailbox, uint8_t status);
255
void RIOPACKET_getResponseMessage(RioPacket_t *packet,
256
                                  uint16_t *destId, uint16_t *srcId,
257
                                  uint8_t *mailbox, uint8_t *status);
258
 
259
uint16_t RIOPACKET_Crc16( const uint16_t data, const uint16_t crc);
260
uint16_t RIOPACKET_Crc32( const uint32_t data, uint16_t crc);
261
 
262
uint32_t RIOPACKET_getReadPacketSize(uint32_t address, uint32_t size);
263
uint32_t RIOPACKET_getWritePacketSize(uint32_t address, uint32_t size);
264
 
265
#endif
266
 
267
/*************************** end of file **************************************/

powered by: WebSVN 2.1.0

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