You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

mii.h 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #ifndef _IPXE_MII_H
  2. #define _IPXE_MII_H
  3. /** @file
  4. *
  5. * Media Independent Interface
  6. *
  7. */
  8. FILE_LICENCE ( GPL2_OR_LATER );
  9. #include <mii.h>
  10. #include <ipxe/netdevice.h>
  11. struct mii_interface;
  12. /** MII interface operations */
  13. struct mii_operations {
  14. /**
  15. * Read from MII register
  16. *
  17. * @v mii MII interface
  18. * @v reg Register address
  19. * @ret data Data read, or negative error
  20. */
  21. int ( * read ) ( struct mii_interface *mii, unsigned int reg );
  22. /**
  23. * Write to MII register
  24. *
  25. * @v mii MII interface
  26. * @v reg Register address
  27. * @v data Data to write
  28. * @ret rc Return status code
  29. */
  30. int ( * write ) ( struct mii_interface *mii, unsigned int reg,
  31. unsigned int data );
  32. };
  33. /** An MII interface */
  34. struct mii_interface {
  35. /** Interface operations */
  36. struct mii_operations *op;
  37. };
  38. /**
  39. * Initialise MII interface
  40. *
  41. * @v mii MII interface
  42. * @v op MII interface operations
  43. */
  44. static inline __attribute__ (( always_inline )) void
  45. mii_init ( struct mii_interface *mii, struct mii_operations *op ) {
  46. mii->op = op;
  47. }
  48. /**
  49. * Read from MII register
  50. *
  51. * @v mii MII interface
  52. * @v reg Register address
  53. * @ret data Data read, or negative error
  54. */
  55. static inline __attribute__ (( always_inline )) int
  56. mii_read ( struct mii_interface *mii, unsigned int reg ) {
  57. return mii->op->read ( mii, reg );
  58. }
  59. /**
  60. * Write to MII register
  61. *
  62. * @v mii MII interface
  63. * @v reg Register address
  64. * @v data Data to write
  65. * @ret rc Return status code
  66. */
  67. static inline __attribute__ (( always_inline )) int
  68. mii_write ( struct mii_interface *mii, unsigned int reg, unsigned int data ) {
  69. return mii->op->write ( mii, reg, data );
  70. }
  71. /** Maximum time to wait for a reset, in milliseconds */
  72. #define MII_RESET_MAX_WAIT_MS 500
  73. extern int mii_restart ( struct mii_interface *mii );
  74. extern int mii_reset ( struct mii_interface *mii );
  75. #endif /* _IPXE_MII_H */