cvmx-packet.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /***********************license start***************
  2. * Author: Cavium Networks
  3. *
  4. * Contact: support@caviumnetworks.com
  5. * This file is part of the OCTEON SDK
  6. *
  7. * Copyright (c) 2003-2008 Cavium Networks
  8. *
  9. * This file is free software; you can redistribute it and/or modify
  10. * it under the terms of the GNU General Public License, Version 2, as
  11. * published by the Free Software Foundation.
  12. *
  13. * This file is distributed in the hope that it will be useful, but
  14. * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
  15. * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
  16. * NONINFRINGEMENT. See the GNU General Public License for more
  17. * details.
  18. *
  19. * You should have received a copy of the GNU General Public License
  20. * along with this file; if not, write to the Free Software
  21. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  22. * or visit http://www.gnu.org/licenses/.
  23. *
  24. * This file may also be available under a different license from Cavium.
  25. * Contact Cavium Networks for more information
  26. ***********************license end**************************************/
  27. /*
  28. * Packet buffer defines.
  29. */
  30. #ifndef __CVMX_PACKET_H__
  31. #define __CVMX_PACKET_H__
  32. /**
  33. * This structure defines a buffer pointer on Octeon
  34. */
  35. union cvmx_buf_ptr {
  36. void *ptr;
  37. uint64_t u64;
  38. struct {
  39. #ifdef __BIG_ENDIAN_BITFIELD
  40. /* if set, invert the "free" pick of the overall
  41. * packet. HW always sets this bit to 0 on inbound
  42. * packet */
  43. uint64_t i:1;
  44. /* Indicates the amount to back up to get to the
  45. * buffer start in cache lines. In most cases this is
  46. * less than one complete cache line, so the value is
  47. * zero */
  48. uint64_t back:4;
  49. /* The pool that the buffer came from / goes to */
  50. uint64_t pool:3;
  51. /* The size of the segment pointed to by addr (in bytes) */
  52. uint64_t size:16;
  53. /* Pointer to the first byte of the data, NOT buffer */
  54. uint64_t addr:40;
  55. #else
  56. uint64_t addr:40;
  57. uint64_t size:16;
  58. uint64_t pool:3;
  59. uint64_t back:4;
  60. uint64_t i:1;
  61. #endif
  62. } s;
  63. };
  64. #endif /* __CVMX_PACKET_H__ */