1 /* 2 * Copyright 2012 Tilera Corporation. All Rights Reserved. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation, version 2. 7 * 8 * This program is distributed in the hope that it will be useful, but 9 * WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 * NON INFRINGEMENT. See the GNU General Public License for 12 * more details. 13 */ 14 15 /* Machine-generated file; do not edit. */ 16 17 18 #ifndef __ARCH_MPIPE_SHM_H__ 19 #define __ARCH_MPIPE_SHM_H__ 20 21 #include <arch/abi.h> 22 #include <arch/mpipe_shm_def.h> 23 24 #ifndef __ASSEMBLER__ 25 /** 26 * MPIPE eDMA Descriptor. 27 * The eDMA descriptor is written by software and consumed by hardware. It 28 * is used to specify the location of egress packet data to be sent out of 29 * the chip via one of the packet interfaces. 30 */ 31 32 __extension__ 33 typedef union 34 { 35 struct 36 { 37 /* Word 0 */ 38 39 #ifndef __BIG_ENDIAN__ 40 /** 41 * Generation number. Used to indicate a valid descriptor in ring. When 42 * a new descriptor is written into the ring, software must toggle this 43 * bit. The net effect is that the GEN bit being written into new 44 * descriptors toggles each time the ring tail pointer wraps. 45 */ 46 uint_reg_t gen : 1; 47 /** 48 * For devices with EDMA reorder support, this field allows the 49 * descriptor to select the egress FIFO. The associated DMA ring must 50 * have ALLOW_EFIFO_SEL enabled. 51 */ 52 uint_reg_t efifo_sel : 6; 53 /** Reserved. Must be zero. */ 54 uint_reg_t r0 : 1; 55 /** Checksum generation enabled for this transfer. */ 56 uint_reg_t csum : 1; 57 /** 58 * Nothing to be sent. Used, for example, when software has dropped a 59 * packet but still wishes to return all of the associated buffers. 60 */ 61 uint_reg_t ns : 1; 62 /** 63 * Notification interrupt will be delivered when packet has been egressed. 64 */ 65 uint_reg_t notif : 1; 66 /** 67 * Boundary indicator. When 1, this transfer includes the EOP for this 68 * command. Must be clear on all but the last descriptor for an egress 69 * packet. 70 */ 71 uint_reg_t bound : 1; 72 /** Reserved. Must be zero. */ 73 uint_reg_t r1 : 4; 74 /** 75 * Number of bytes to be sent for this descriptor. When zero, no data 76 * will be moved and the buffer descriptor will be ignored. If the 77 * buffer descriptor indicates that it is chained, the low 7 bits of the 78 * VA indicate the offset within the first buffer (e.g. 127 bytes is the 79 * maximum offset into the first buffer). If the size exceeds a single 80 * buffer, subsequent buffer descriptors will be fetched prior to 81 * processing the next eDMA descriptor in the ring. 82 */ 83 uint_reg_t xfer_size : 14; 84 /** Reserved. Must be zero. */ 85 uint_reg_t r2 : 2; 86 /** 87 * Destination of checksum relative to CSUM_START relative to the first 88 * byte moved by this descriptor. Must be zero if CSUM=0 in this 89 * descriptor. Must be less than XFER_SIZE (e.g. the first byte of the 90 * CSUM_DEST must be within the span of this descriptor). 91 */ 92 uint_reg_t csum_dest : 8; 93 /** 94 * Start byte of checksum relative to the first byte moved by this 95 * descriptor. If this is not the first descriptor for the egress 96 * packet, CSUM_START is still relative to the first byte in this 97 * descriptor. Must be zero if CSUM=0 in this descriptor. 98 */ 99 uint_reg_t csum_start : 8; 100 /** 101 * Initial value for 16-bit 1's compliment checksum if enabled via CSUM. 102 * Specified in network order. That is, bits[7:0] will be added to the 103 * byte pointed to by CSUM_START and bits[15:8] will be added to the byte 104 * pointed to by CSUM_START+1 (with appropriate 1's compliment carries). 105 * Must be zero if CSUM=0 in this descriptor. 106 */ 107 uint_reg_t csum_seed : 16; 108 #else /* __BIG_ENDIAN__ */ 109 uint_reg_t csum_seed : 16; 110 uint_reg_t csum_start : 8; 111 uint_reg_t csum_dest : 8; 112 uint_reg_t r2 : 2; 113 uint_reg_t xfer_size : 14; 114 uint_reg_t r1 : 4; 115 uint_reg_t bound : 1; 116 uint_reg_t notif : 1; 117 uint_reg_t ns : 1; 118 uint_reg_t csum : 1; 119 uint_reg_t r0 : 1; 120 uint_reg_t efifo_sel : 6; 121 uint_reg_t gen : 1; 122 #endif 123 124 /* Word 1 */ 125 126 #ifndef __BIG_ENDIAN__ 127 /** Virtual address. Must be sign extended by consumer. */ 128 int_reg_t va : 42; 129 /** Reserved. */ 130 uint_reg_t __reserved_0 : 6; 131 /** Index of the buffer stack to which this buffer belongs. */ 132 uint_reg_t stack_idx : 5; 133 /** Reserved. */ 134 uint_reg_t __reserved_1 : 3; 135 /** 136 * Instance ID. For devices that support automatic buffer return between 137 * mPIPE instances, this field indicates the buffer owner. If the INST 138 * field does not match the mPIPE's instance number when a packet is 139 * egressed, buffers with HWB set will be returned to the other mPIPE 140 * instance. Note that not all devices support multi-mPIPE buffer 141 * return. The MPIPE_EDMA_INFO.REMOTE_BUFF_RTN_SUPPORT bit indicates 142 * whether the INST field in the buffer descriptor is populated by iDMA 143 * hardware. 144 */ 145 uint_reg_t inst : 2; 146 /** 147 * Always set to one by hardware in iDMA packet descriptors. For eDMA, 148 * indicates whether the buffer will be released to the buffer stack 149 * manager. When 0, software is responsible for releasing the buffer. 150 */ 151 uint_reg_t hwb : 1; 152 /** 153 * Encoded size of buffer. Set by the ingress hardware for iDMA packet 154 * descriptors. For eDMA descriptors, indicates the buffer size if .c 155 * indicates a chained packet. If an eDMA descriptor is not chained and 156 * the .hwb bit is not set, this field is ignored and the size is 157 * specified by the .xfer_size field. 158 * 0 = 128 bytes 159 * 1 = 256 bytes 160 * 2 = 512 bytes 161 * 3 = 1024 bytes 162 * 4 = 1664 bytes 163 * 5 = 4096 bytes 164 * 6 = 10368 bytes 165 * 7 = 16384 bytes 166 */ 167 uint_reg_t size : 3; 168 /** 169 * Chaining configuration for the buffer. Indicates that an ingress 170 * packet or egress command is chained across multiple buffers, with each 171 * buffer's size indicated by the .size field. 172 */ 173 uint_reg_t c : 2; 174 #else /* __BIG_ENDIAN__ */ 175 uint_reg_t c : 2; 176 uint_reg_t size : 3; 177 uint_reg_t hwb : 1; 178 uint_reg_t inst : 2; 179 uint_reg_t __reserved_1 : 3; 180 uint_reg_t stack_idx : 5; 181 uint_reg_t __reserved_0 : 6; 182 int_reg_t va : 42; 183 #endif 184 185 }; 186 187 /** Word access */ 188 uint_reg_t words[2]; 189 } MPIPE_EDMA_DESC_t; 190 191 /** 192 * MPIPE Packet Descriptor. 193 * The packet descriptor is filled by the mPIPE's classification, 194 * load-balancing, and buffer management services. Some fields are consumed 195 * by mPIPE hardware, and others are consumed by Tile software. 196 */ 197 198 __extension__ 199 typedef union 200 { 201 struct 202 { 203 /* Word 0 */ 204 205 #ifndef __BIG_ENDIAN__ 206 /** 207 * Notification ring into which this packet descriptor is written. 208 * Typically written by load balancer, but can be overridden by 209 * classification program if NR is asserted. 210 */ 211 uint_reg_t notif_ring : 8; 212 /** Source channel for this packet. Written by mPIPE DMA hardware. */ 213 uint_reg_t channel : 5; 214 /** Reserved. */ 215 uint_reg_t __reserved_0 : 1; 216 /** 217 * MAC Error. 218 * Generated by the MAC interface. Asserted if there was an overrun of 219 * the MAC's receive FIFO. This condition generally only occurs if the 220 * mPIPE clock is running too slowly. 221 */ 222 uint_reg_t me : 1; 223 /** 224 * Truncation Error. 225 * Written by the iDMA hardware. Asserted if packet was truncated due to 226 * insufficient space in iPkt buffer 227 */ 228 uint_reg_t tr : 1; 229 /** 230 * Written by the iDMA hardware. Indicates the number of bytes written 231 * to Tile memory. In general, this is the actual size of the packet as 232 * received from the MAC. But if the packet is truncated due to running 233 * out of buffers or due to the iPkt buffer filling up, then the L2_SIZE 234 * will be reduced to reflect the actual number of valid bytes written to 235 * Tile memory. 236 */ 237 uint_reg_t l2_size : 14; 238 /** 239 * CRC Error. 240 * Generated by the MAC. Asserted if MAC indicated an L2 CRC error or 241 * other L2 error (bad length etc.) on the packet. 242 */ 243 uint_reg_t ce : 1; 244 /** 245 * Cut Through. 246 * Written by the iDMA hardware. Asserted if packet was not completely 247 * received before being sent to classifier. L2_Size will indicate 248 * number of bytes received so far. 249 */ 250 uint_reg_t ct : 1; 251 /** 252 * Written by the classification program. Used by the load balancer to 253 * select the ring into which this packet descriptor is written. 254 */ 255 uint_reg_t bucket_id : 13; 256 /** Reserved. */ 257 uint_reg_t __reserved_1 : 3; 258 /** 259 * Checksum. 260 * Written by classification program. When 1, the checksum engine will 261 * perform checksum based on the CSUM_SEED, CSUM_START, and CSUM_BYTES 262 * fields. The result will be placed in CSUM_VAL. 263 */ 264 uint_reg_t cs : 1; 265 /** 266 * Notification Ring Select. 267 * Written by the classification program. When 1, the NotifRingIDX is 268 * set by classification program rather than being set by load balancer. 269 */ 270 uint_reg_t nr : 1; 271 /** 272 * Written by classification program. Indicates whether packet and 273 * descriptor should both be dropped, both be delivered, or only the 274 * descriptor should be delivered. 275 */ 276 uint_reg_t dest : 2; 277 /** 278 * General Purpose Sequence Number Enable. 279 * Written by the classification program. When 1, the GP_SQN_SEL field 280 * contains the sequence number selector and the GP_SQN field will be 281 * replaced with the associated sequence number. When clear, the GP_SQN 282 * field is left intact and be used as "Custom" bytes. 283 */ 284 uint_reg_t sq : 1; 285 /** 286 * TimeStamp Enable. 287 * Enable TimeStamp insertion. When clear, timestamp field may be filled 288 * with custom data by classifier. When set, hardware inserts the 289 * timestamp when the start of packet is received from the MAC. 290 */ 291 uint_reg_t ts : 1; 292 /** 293 * Packet Sequence Number Enable. 294 * Enable PacketSQN insertion. When clear, PacketSQN field may be filled 295 * with custom data by classifier. When set, hardware inserts the packet 296 * sequence number when the packet descriptor is written to a 297 * notification ring. 298 */ 299 uint_reg_t ps : 1; 300 /** 301 * Buffer Error. 302 * Written by the iDMA hardware. Asserted if iDMA ran out of buffers 303 * while writing the packet. Software must still return any buffer 304 * descriptors whose C field indicates a valid descriptor was consumed. 305 */ 306 uint_reg_t be : 1; 307 /** 308 * Written by the classification program. The associated counter is 309 * incremented when the packet is sent. 310 */ 311 uint_reg_t ctr0 : 5; 312 /** Reserved. */ 313 uint_reg_t __reserved_2 : 3; 314 #else /* __BIG_ENDIAN__ */ 315 uint_reg_t __reserved_2 : 3; 316 uint_reg_t ctr0 : 5; 317 uint_reg_t be : 1; 318 uint_reg_t ps : 1; 319 uint_reg_t ts : 1; 320 uint_reg_t sq : 1; 321 uint_reg_t dest : 2; 322 uint_reg_t nr : 1; 323 uint_reg_t cs : 1; 324 uint_reg_t __reserved_1 : 3; 325 uint_reg_t bucket_id : 13; 326 uint_reg_t ct : 1; 327 uint_reg_t ce : 1; 328 uint_reg_t l2_size : 14; 329 uint_reg_t tr : 1; 330 uint_reg_t me : 1; 331 uint_reg_t __reserved_0 : 1; 332 uint_reg_t channel : 5; 333 uint_reg_t notif_ring : 8; 334 #endif 335 336 /* Word 1 */ 337 338 #ifndef __BIG_ENDIAN__ 339 /** 340 * Written by the classification program. The associated counter is 341 * incremented when the packet is sent. 342 */ 343 uint_reg_t ctr1 : 5; 344 /** Reserved. */ 345 uint_reg_t __reserved_3 : 3; 346 /** 347 * Written by classification program. Indicates the start byte for 348 * checksum. Relative to 1st byte received from MAC. 349 */ 350 uint_reg_t csum_start : 8; 351 /** 352 * Checksum seed written by classification program. Overwritten with 353 * resultant checksum if CS bit is asserted. The endianness of the CSUM 354 * value bits when viewed by Tile software match the packet byte order. 355 * That is, bits[7:0] of the resulting checksum value correspond to 356 * earlier (more significant) bytes in the packet. To avoid classifier 357 * software from having to byte swap the CSUM_SEED, the iDMA checksum 358 * engine byte swaps the classifier's result before seeding the checksum 359 * calculation. Thus, the CSUM_START byte of packet data is added to 360 * bits[15:8] of the CSUM_SEED field generated by the classifier. This 361 * byte swap will be visible to Tile software if the CS bit is clear. 362 */ 363 uint_reg_t csum_seed_val : 16; 364 /** 365 * Written by the classification program. Not interpreted by mPIPE 366 * hardware. 367 */ 368 uint_reg_t custom0 : 32; 369 #else /* __BIG_ENDIAN__ */ 370 uint_reg_t custom0 : 32; 371 uint_reg_t csum_seed_val : 16; 372 uint_reg_t csum_start : 8; 373 uint_reg_t __reserved_3 : 3; 374 uint_reg_t ctr1 : 5; 375 #endif 376 377 /* Word 2 */ 378 379 #ifndef __BIG_ENDIAN__ 380 /** 381 * Written by the classification program. Not interpreted by mPIPE 382 * hardware. 383 */ 384 uint_reg_t custom1 : 64; 385 #else /* __BIG_ENDIAN__ */ 386 uint_reg_t custom1 : 64; 387 #endif 388 389 /* Word 3 */ 390 391 #ifndef __BIG_ENDIAN__ 392 /** 393 * Written by the classification program. Not interpreted by mPIPE 394 * hardware. 395 */ 396 uint_reg_t custom2 : 64; 397 #else /* __BIG_ENDIAN__ */ 398 uint_reg_t custom2 : 64; 399 #endif 400 401 /* Word 4 */ 402 403 #ifndef __BIG_ENDIAN__ 404 /** 405 * Written by the classification program. Not interpreted by mPIPE 406 * hardware. 407 */ 408 uint_reg_t custom3 : 64; 409 #else /* __BIG_ENDIAN__ */ 410 uint_reg_t custom3 : 64; 411 #endif 412 413 /* Word 5 */ 414 415 #ifndef __BIG_ENDIAN__ 416 /** 417 * Sequence number applied when packet is distributed. Classifier 418 * selects which sequence number is to be applied by writing the 13-bit 419 * SQN-selector into this field. For devices that support EXT_SQN (as 420 * indicated in IDMA_INFO.EXT_SQN_SUPPORT), the GP_SQN can be extended to 421 * 32-bits via the IDMA_CTL.EXT_SQN register. In this case the 422 * PACKET_SQN will be reduced to 32 bits. 423 */ 424 uint_reg_t gp_sqn : 16; 425 /** 426 * Written by notification hardware. The packet sequence number is 427 * incremented for each packet that wasn't dropped. 428 */ 429 uint_reg_t packet_sqn : 48; 430 #else /* __BIG_ENDIAN__ */ 431 uint_reg_t packet_sqn : 48; 432 uint_reg_t gp_sqn : 16; 433 #endif 434 435 /* Word 6 */ 436 437 #ifndef __BIG_ENDIAN__ 438 /** 439 * Written by hardware when the start-of-packet is received by the mPIPE 440 * from the MAC. This is the nanoseconds part of the packet timestamp. 441 */ 442 uint_reg_t time_stamp_ns : 32; 443 /** 444 * Written by hardware when the start-of-packet is received by the mPIPE 445 * from the MAC. This is the seconds part of the packet timestamp. 446 */ 447 uint_reg_t time_stamp_sec : 32; 448 #else /* __BIG_ENDIAN__ */ 449 uint_reg_t time_stamp_sec : 32; 450 uint_reg_t time_stamp_ns : 32; 451 #endif 452 453 /* Word 7 */ 454 455 #ifndef __BIG_ENDIAN__ 456 /** Virtual address. Must be sign extended by consumer. */ 457 int_reg_t va : 42; 458 /** Reserved. */ 459 uint_reg_t __reserved_4 : 6; 460 /** Index of the buffer stack to which this buffer belongs. */ 461 uint_reg_t stack_idx : 5; 462 /** Reserved. */ 463 uint_reg_t __reserved_5 : 3; 464 /** 465 * Instance ID. For devices that support automatic buffer return between 466 * mPIPE instances, this field indicates the buffer owner. If the INST 467 * field does not match the mPIPE's instance number when a packet is 468 * egressed, buffers with HWB set will be returned to the other mPIPE 469 * instance. Note that not all devices support multi-mPIPE buffer 470 * return. The MPIPE_EDMA_INFO.REMOTE_BUFF_RTN_SUPPORT bit indicates 471 * whether the INST field in the buffer descriptor is populated by iDMA 472 * hardware. 473 */ 474 uint_reg_t inst : 2; 475 /** 476 * Always set to one by hardware in iDMA packet descriptors. For eDMA, 477 * indicates whether the buffer will be released to the buffer stack 478 * manager. When 0, software is responsible for releasing the buffer. 479 */ 480 uint_reg_t hwb : 1; 481 /** 482 * Encoded size of buffer. Set by the ingress hardware for iDMA packet 483 * descriptors. For eDMA descriptors, indicates the buffer size if .c 484 * indicates a chained packet. If an eDMA descriptor is not chained and 485 * the .hwb bit is not set, this field is ignored and the size is 486 * specified by the .xfer_size field. 487 * 0 = 128 bytes 488 * 1 = 256 bytes 489 * 2 = 512 bytes 490 * 3 = 1024 bytes 491 * 4 = 1664 bytes 492 * 5 = 4096 bytes 493 * 6 = 10368 bytes 494 * 7 = 16384 bytes 495 */ 496 uint_reg_t size : 3; 497 /** 498 * Chaining configuration for the buffer. Indicates that an ingress 499 * packet or egress command is chained across multiple buffers, with each 500 * buffer's size indicated by the .size field. 501 */ 502 uint_reg_t c : 2; 503 #else /* __BIG_ENDIAN__ */ 504 uint_reg_t c : 2; 505 uint_reg_t size : 3; 506 uint_reg_t hwb : 1; 507 uint_reg_t inst : 2; 508 uint_reg_t __reserved_5 : 3; 509 uint_reg_t stack_idx : 5; 510 uint_reg_t __reserved_4 : 6; 511 int_reg_t va : 42; 512 #endif 513 514 }; 515 516 /** Word access */ 517 uint_reg_t words[8]; 518 } MPIPE_PDESC_t; 519 #endif /* !defined(__ASSEMBLER__) */ 520 521 #endif /* !defined(__ARCH_MPIPE_SHM_H__) */ 522