netb.c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*!
  2. * Copyright (C) Fraunhofer-Institut for Photonic Microsystems (IPMS)
  3. * Maria-Reiche-Str. 2
  4. * 01109 Dresden
  5. *
  6. * Unauthorized copying of this file, via any medium is strictly prohibited
  7. * Proprietary and confidential
  8. *
  9. * \file netb.c
  10. * \author zimmerli
  11. * \date 2020-01-20
  12. * \brief Network buffer
  13. *
  14. */
  15. #include "netb.h"
  16. #include <kernel/base/kernel.h>
  17. #include <kernel/net/ether.h>
  18. /**
  19. * \brief Init network buffer
  20. *
  21. * @param netb pointer to network buffer
  22. */
  23. void netb_set_empty(struct netb_s *netb)
  24. {
  25. netb->data = netb->head;
  26. netb->tail = netb->head;
  27. netb->netdev = (void *)0;
  28. netb->tstamp_id = 0;
  29. netb->priority = ETH_PRIO_BE; //default: best effort
  30. }
  31. /**
  32. * \brief Reserve space in empty netb in front of data
  33. *
  34. * @param netb pointer to netb
  35. * @param len length to reserve
  36. */
  37. void netb_reserve(struct netb_s *netb, uint32_t len)
  38. {
  39. netb->data += len;
  40. netb->tail += len;
  41. }
  42. /**
  43. * \brief Add data to start of buffer
  44. *
  45. * @param netb pointer to netb
  46. * @param len length in bytes
  47. * @return pointer to data
  48. */
  49. uint8_t *netb_push(struct netb_s *netb, uint32_t len)
  50. {
  51. netb->data -= len;
  52. kassert(netb->data >= netb->head);
  53. return (uint8_t *)netb->data;
  54. }
  55. /**
  56. * \brief Remove data from start of buffer
  57. *
  58. * @param netb pointer to netb
  59. * @param len length in bytes
  60. * @return pointer to data
  61. */
  62. uint8_t *netb_pull(struct netb_s *netb, uint32_t len)
  63. {
  64. netb->data += len;
  65. kassert(netb->data <= netb->tail);
  66. return (uint8_t *)netb->data;
  67. }
  68. /**
  69. * \brief Add data to buffer
  70. *
  71. * @param netb pointer to netb
  72. * @param len length in bytes
  73. * @return pointer to extra amount of data
  74. */
  75. uint8_t *netb_put(struct netb_s *netb, uint32_t len)
  76. {
  77. uint8_t *ptail;
  78. ptail = (uint8_t *)netb->tail;
  79. netb->tail += len;
  80. kassert(netb->tail <= netb->end);
  81. return ptail;
  82. }