netdev.h 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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
  10. * \author zimmerli
  11. * \date 2020-01-16
  12. * \brief Generic Network Device
  13. *
  14. */
  15. #ifndef NETDEV_H_
  16. #define NETDEV_H_
  17. #include <stdint.h>
  18. #include <kernel/net/netb.h>
  19. //TODO change; include in netdev_xxx_data.h
  20. #include <kernel/net/netdev_tc.h>
  21. #include <kernel/net/netdev_fpe.h>
  22. #include <kernel/net/netdev_bridge.h>
  23. #include <kernel/net/netdev_fdfifo.h>
  24. #include <kernel/net/netdev_monitor.h>
  25. #include <kernel/net/netdev_ethtool.h>
  26. #include <kernel/net/phydev.h>
  27. //neu
  28. #include <kernel/net/netdev_cb_data.h>
  29. #include <kernel/net/netdev_psfp_data.h>
  30. //ERSTMAL TEST
  31. #include <kernel/net/netdev_template_data.h>
  32. #include <tsn_rtos_config.h>
  33. #define MAC_ADDR_LEN 6
  34. #define NETDEV_RESULT_OK 0
  35. #define NETDEV_ERR_GENERAL -1
  36. #define NETDEV_ERR_TIMEOUT -2
  37. #define NETDEV_ERR_QFULL -3
  38. #define NETDEV_ERR_UNSUPPORTED -4
  39. #define NETDEV_ERR_INVALID_DATA -5
  40. #define IFNAMSIZ 16
  41. /**
  42. * \brief Network device settings access
  43. */
  44. enum netdev_access {
  45. NETDEV_ACCESS_SET, //!< set settings
  46. NETDEV_ACCESS_GET, //!< get settings
  47. NETDEV_ACCESS_ADD, //!< add settings
  48. NETDEV_ACCESS_DEL, //!< delete settings
  49. NETDEV_ACCESS_LIST //!< get list of settings
  50. };
  51. struct netdev_s;
  52. /**
  53. * \brief Tsync functions
  54. */
  55. struct tsync_dev_s {
  56. void (*cb_rx_frame)(struct netdev_s *netdev, void *rxdata, uint32_t rxlen, uint32_t localtm_ns, uint32_t localtm_sec);
  57. void (*cb_tx_done)(struct netdev_s *netdev, void *arg, uint32_t localtm_ns, uint32_t localtm_sec);
  58. void (*cb_timer_done)(struct netdev_s *netdev, uint32_t timer_id);
  59. };
  60. /**
  61. * \brief Network device statistics
  62. */
  63. struct netdev_stats_s {
  64. uint32_t rx_packets;
  65. uint32_t rx_dropped;
  66. uint32_t rx_error;
  67. uint32_t tx_packets;
  68. uint32_t tx_dropped;
  69. uint32_t tx_error;
  70. };
  71. /**
  72. * \brief Network device driver
  73. */
  74. struct netdev_s {
  75. char name[IFNAMSIZ]; //!< device name
  76. uint32_t tsn_port; //!< tsn port number -1-cpu, 0-eth1, ...
  77. uint32_t id; //!< device driver id //REMARK do not use it as port id, tsn port id etc. !!!
  78. void *prv; //!< pointer to private data
  79. void *parent; //!< pointer to parent member, e.g. lwip neif structure
  80. uint8_t dev_addr[MAC_ADDR_LEN]; //!< MAC address to be used
  81. uint8_t promisc; //!< promiscous mode flag
  82. uint8_t hw_queues; //!< number of implemented hardware queues
  83. uint8_t prio2tq[8]; //!< traffic class (priority) to queue mapping [0..7 --> 0..7]
  84. int speed; //!< current link speed in mbps
  85. uint32_t needed_head; //!< needed head space by driver in network buffer befor data
  86. struct phydev_s *phy; //!< pointer to child phy device
  87. struct netdev_stats_s stats; //!< netdev statistics
  88. /* functions */
  89. int32_t (*netdev_xmit)(struct netdev_s *netdev, struct netb_s *netb); //!< function ptr, transmit network buffer
  90. void (*netdev_link)(struct netdev_s *netdev); //!< function ptr, change link speed
  91. void (*netdev_addr)(struct netdev_s *netdev); //!< function ptr, set MAC address, promiscous mode
  92. int32_t (*netdev_tc)(struct netdev_s *netdev, enum netdev_access access, enum tc_setup_type type, void *data); //!< function ptr, traffic control settings
  93. int32_t (*netdev_fpe)(struct netdev_s *netdev, enum netdev_access access, struct netdev_fpe *data); //!< function ptr, frame preemption settings
  94. int32_t (*netdev_bridge)(struct netdev_s *netdev, enum netdev_access access, enum bridge_command cmd, void *data); //!< function ptr, bridge command
  95. int32_t (*netdev_fdfifo)(struct netdev_s *netdev, enum netdev_access access, enum fdfifo_command cmd, void *data); //!< function ptr, fdfifo command
  96. int32_t (*netdev_monitor)(struct netdev_s *netdev, enum netdev_access access, void *data); //!< function ptr, monitor command
  97. int32_t (*netdev_ethtool)(struct netdev_s *netdev, enum netdev_access access, enum ethtool_command cmd, void *data); //!< function ptr, monitor command
  98. int32_t (*netdev_cb)(struct netdev_s *netdev, enum netdev_access access, enum cb_command cmd, void *data); //!< function ptr, cb command
  99. int32_t (*netdev_psfp)(struct netdev_s *netdev, enum netdev_access access, enum psfp_command cmd, void *data); //!< function ptr, psfp command
  100. int32_t (*netdev_template)(struct netdev_s *netdev, enum netdev_access access, enum template_command cmd,
  101. void *data); //!< function ptr for example command (template)
  102. uint8_t (*netdev_tstamp_register)(struct netdev_s *netdev, uint32_t qsize); //!< function ptr, register tx-timestamp channel
  103. void (*netdev_tstamp_unregister)(struct netdev_s *netdev, uint8_t id); //!< function ptr, unregister tx-timestamp channel
  104. int64_t (*netdev_tstamp_get)(struct netdev_s *netdev, uint8_t id, uint32_t timeout); //!< function ptr, get tx timestamp
  105. struct tsync_dev_s tsync; //!< tsync part
  106. };
  107. struct netdev_s *netdev_register(void);
  108. //TODO deprecated !?
  109. struct netdev_s *netdev_getbyid(uint32_t id);
  110. //ERSTMAL
  111. struct netdev_s *netdev_port2netdev(uint32_t port);
  112. struct netdev_s *netdev_getbyname(char *ifname);
  113. void netdev_set_name(struct netdev_s *netdev, const char *prefix, uint32_t index);
  114. //TODO verschieben in netdev_xxx.h !?
  115. int32_t netdev_xmit(struct netdev_s *netdev, struct netb_s *netb);
  116. void netdev_adjust_link(struct netdev_s *netdev, int speed);
  117. void netdev_set_addr(struct netdev_s *netdev, uint8_t *addr, uint8_t rx_promisc);
  118. int32_t netdev_tc(struct netdev_s *netdev, enum netdev_access access, enum tc_setup_type type, void *data);
  119. int32_t netdev_fpe(struct netdev_s *netdev, enum netdev_access access, struct netdev_fpe *data);
  120. int32_t netdev_bridge(struct netdev_s *netdev, enum netdev_access access, enum bridge_command cmd, void *data);
  121. int32_t netdev_fdfifo(struct netdev_s *netdev, enum netdev_access access, enum fdfifo_command cmd, void *data);
  122. int32_t netdev_monitor(struct netdev_s *netdev, enum netdev_access access, void *data);
  123. int32_t netdev_ethtool(struct netdev_s *netdev, enum netdev_access access, enum ethtool_command cmd, void *data);
  124. void netdev_rx(struct netdev_s *netdev, struct netb_s *netb);
  125. uint8_t netdev_tstamp_register(struct netdev_s *netdev, uint32_t qsize);
  126. void netdev_tstamp_unregister(struct netdev_s *netdev, uint8_t id);
  127. int64_t netdev_tstamp_get(struct netdev_s *netdev, uint8_t id, uint32_t timeout);
  128. int32_t netdev_tsync_xmit(struct netdev_s *netdev, struct netb_s *netb);
  129. void netdev_tsync_rx(void);
  130. extern const char *NETDEV_CONTEXT;
  131. #endif /* NETDEV_H_ */