typedef struct { CTL_NET_MAC_ADDR_t mac_addr; CTL_NET_MAC_INIT_FN_t init_fn; CTL_NET_MAC_UPDATE_FN_t update_fn; CTL_NET_MAC_GET_STATE_FN_t get_state_fn; CTL_NET_MAC_SEND_FN_t send_fn; CTL_NET_MAC_MULTICAST_ACCEPT_FN_t multicast_accept_fn; CTL_NET_MAC_MULTICAST_QUERY_FN_t multicast_query_fn; CTL_NET_MAC_MII_WRITE_FN_t mii_write_fn; CTL_NET_MAC_MII_READ_FN_t mii_read_fn; CTL_NET_MAC_MII_DEFERRED_READ_FN_t mii_deferred_read_fn; CTL_NET_MAC_MII_DEFERRED_READ_RESULT_FN_t mii_deferred_read_result_fn; CTL_NET_MAC_SELECT_PHY_FN_t select_phy_fn; CTL_NET_MAC_PRIVATE_s *device; } CTL_NET_MAC_DRIVER_t;
typedef CTL_STATUS_t (*CTL_NET_MAC_INIT_FN_t)(CTL_NET_INTERFACE_t *);
typedef void (*CTL_NET_MAC_UPDATE_FN_t)(CTL_NET_INTERFACE_t *, unsigned);
typedef CTL_MAC_STATE_t (*CTL_NET_MAC_GET_STATE_FN_t)(CTL_NET_INTERFACE_t *);
typedef void (*CTL_NET_MAC_SEND_FN_t)(CTL_NET_INTERFACE_t *, CTL_ETH_TX_FRAME_t *);
typedef unsigned (*CTL_NET_MAC_MULTICAST_ACCEPT_FN_t)(CTL_NET_INTERFACE_t *, const CTL_NET_MAC_ADDR_t *, unsigned);
typedef unsigned (*CTL_NET_MAC_MULTICAST_QUERY_FN_t)(CTL_NET_INTERFACE_t *, const CTL_NET_MAC_ADDR_t *);
typedef CTL_STATUS_t (*CTL_NET_MAC_MII_WRITE_FN_t)(CTL_NET_INTERFACE_t *, int , int);
typedef CTL_STATUS_t (*CTL_NET_MAC_MII_READ_FN_t)(CTL_NET_INTERFACE_t *, int);
typedef CTL_STATUS_t (*CTL_NET_MAC_MII_DEFERRED_READ_FN_t)(CTL_NET_INTERFACE_t *, int);
typedef CTL_STATUS_t (*CTL_NET_MAC_MII_DEFERRED_READ_RESULT_FN_t)(CTL_NET_INTERFACE_t *);
typedef CTL_STATUS_t (*CTL_NET_MAC_SELECT_PHY_FN_t)(CTL_NET_INTERFACE_t *);
CTL_NET_MAC_DRIVER_t holds the data and functions that handle the MAC layer.