TUKS MCU Introductory course / TUKS-COURSE-TIMER
Committer:
elmot
Date:
Fri Feb 24 21:13:56 2017 +0000
Revision:
1:d0dfbce63a89
Ready-to-copy

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elmot 1:d0dfbce63a89 1 /* mbed Microcontroller Library
elmot 1:d0dfbce63a89 2 * Copyright (c) 2016 ARM Limited
elmot 1:d0dfbce63a89 3 *
elmot 1:d0dfbce63a89 4 * Licensed under the Apache License, Version 2.0 (the "License");
elmot 1:d0dfbce63a89 5 * you may not use this file except in compliance with the License.
elmot 1:d0dfbce63a89 6 * You may obtain a copy of the License at
elmot 1:d0dfbce63a89 7 *
elmot 1:d0dfbce63a89 8 * http://www.apache.org/licenses/LICENSE-2.0
elmot 1:d0dfbce63a89 9 *
elmot 1:d0dfbce63a89 10 * Unless required by applicable law or agreed to in writing, software
elmot 1:d0dfbce63a89 11 * distributed under the License is distributed on an "AS IS" BASIS,
elmot 1:d0dfbce63a89 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
elmot 1:d0dfbce63a89 13 * See the License for the specific language governing permissions and
elmot 1:d0dfbce63a89 14 * limitations under the License.
elmot 1:d0dfbce63a89 15 */
elmot 1:d0dfbce63a89 16
elmot 1:d0dfbce63a89 17 #ifndef MBED_EMAC_API_H
elmot 1:d0dfbce63a89 18 #define MBED_EMAC_API_H
elmot 1:d0dfbce63a89 19
elmot 1:d0dfbce63a89 20 #if DEVICE_EMAC
elmot 1:d0dfbce63a89 21
elmot 1:d0dfbce63a89 22 #include <stdbool.h>
elmot 1:d0dfbce63a89 23 #include "emac_stack_mem.h"
elmot 1:d0dfbce63a89 24
elmot 1:d0dfbce63a89 25 typedef struct emac_interface emac_interface_t;
elmot 1:d0dfbce63a89 26
elmot 1:d0dfbce63a89 27 /**
elmot 1:d0dfbce63a89 28 * EmacInterface
elmot 1:d0dfbce63a89 29 *
elmot 1:d0dfbce63a89 30 * This interface should be used to abstract low level access to networking hardware
elmot 1:d0dfbce63a89 31 */
elmot 1:d0dfbce63a89 32
elmot 1:d0dfbce63a89 33 /**
elmot 1:d0dfbce63a89 34 * Callback to be register with Emac interface and to be called fore received packets
elmot 1:d0dfbce63a89 35 *
elmot 1:d0dfbce63a89 36 * @param data Arbitrary user data (IP stack)
elmot 1:d0dfbce63a89 37 * @param buf Received data
elmot 1:d0dfbce63a89 38 */
elmot 1:d0dfbce63a89 39 typedef void (*emac_link_input_fn)(void *data, emac_stack_mem_chain_t *buf);
elmot 1:d0dfbce63a89 40
elmot 1:d0dfbce63a89 41 /**
elmot 1:d0dfbce63a89 42 * Callback to be register with Emac interface and to be called for link status changes
elmot 1:d0dfbce63a89 43 *
elmot 1:d0dfbce63a89 44 * @param data Arbitrary user data (IP stack)
elmot 1:d0dfbce63a89 45 * @param up Link status
elmot 1:d0dfbce63a89 46 */
elmot 1:d0dfbce63a89 47 typedef void (*emac_link_state_change_fn)(void *data, bool up);
elmot 1:d0dfbce63a89 48
elmot 1:d0dfbce63a89 49 /**
elmot 1:d0dfbce63a89 50 * Return maximum transmission unit
elmot 1:d0dfbce63a89 51 *
elmot 1:d0dfbce63a89 52 * @param emac Emac interface
elmot 1:d0dfbce63a89 53 * @return MTU in bytes
elmot 1:d0dfbce63a89 54 */
elmot 1:d0dfbce63a89 55 typedef uint32_t (*emac_get_mtu_size_fn)(emac_interface_t *emac);
elmot 1:d0dfbce63a89 56
elmot 1:d0dfbce63a89 57 /**
elmot 1:d0dfbce63a89 58 * Return interface name
elmot 1:d0dfbce63a89 59 *
elmot 1:d0dfbce63a89 60 * @param emac Emac interface
elmot 1:d0dfbce63a89 61 * @param name Pointer to where the name should be written
elmot 1:d0dfbce63a89 62 * @param size Maximum number of character to copy
elmot 1:d0dfbce63a89 63 */
elmot 1:d0dfbce63a89 64 typedef void (*emac_get_ifname_fn)(emac_interface_t *emac, char *name, uint8_t size);
elmot 1:d0dfbce63a89 65
elmot 1:d0dfbce63a89 66 /**
elmot 1:d0dfbce63a89 67 * Returns size of the underlying interface HW address size
elmot 1:d0dfbce63a89 68 *
elmot 1:d0dfbce63a89 69 * @param emac Emac interface
elmot 1:d0dfbce63a89 70 * @return HW address size in bytes
elmot 1:d0dfbce63a89 71 */
elmot 1:d0dfbce63a89 72 typedef uint8_t (*emac_get_hwaddr_size_fn)(emac_interface_t *emac);
elmot 1:d0dfbce63a89 73
elmot 1:d0dfbce63a89 74 /**
elmot 1:d0dfbce63a89 75 * Return interface hw address
elmot 1:d0dfbce63a89 76 *
elmot 1:d0dfbce63a89 77 * Copies HW address to provided memory, @param addr has to be of correct size see @a get_hwaddr_size
elmot 1:d0dfbce63a89 78 *
elmot 1:d0dfbce63a89 79 * @param emac Emac interface
elmot 1:d0dfbce63a89 80 * @param addr HW address for underlying interface
elmot 1:d0dfbce63a89 81 */
elmot 1:d0dfbce63a89 82 typedef void (*emac_get_hwaddr_fn)(emac_interface_t *emac, uint8_t *addr);
elmot 1:d0dfbce63a89 83
elmot 1:d0dfbce63a89 84 /**
elmot 1:d0dfbce63a89 85 * Set HW address for interface
elmot 1:d0dfbce63a89 86 *
elmot 1:d0dfbce63a89 87 * Provided address has to be of correct size, see @a get_hwaddr_size
elmot 1:d0dfbce63a89 88 *
elmot 1:d0dfbce63a89 89 * @param emac Emac interface
elmot 1:d0dfbce63a89 90 * @param addr Address to be set
elmot 1:d0dfbce63a89 91 */
elmot 1:d0dfbce63a89 92 typedef void (*emac_set_hwaddr_fn)(emac_interface_t *emac, uint8_t *addr);
elmot 1:d0dfbce63a89 93
elmot 1:d0dfbce63a89 94 /**
elmot 1:d0dfbce63a89 95 * Sends the packet over the link
elmot 1:d0dfbce63a89 96 *
elmot 1:d0dfbce63a89 97 * That can not be called from an interrupt context.
elmot 1:d0dfbce63a89 98 *
elmot 1:d0dfbce63a89 99 * @param emac Emac interface
elmot 1:d0dfbce63a89 100 * @param buf Packet to be send
elmot 1:d0dfbce63a89 101 * @return True if the packet was send successfully, False otherwise
elmot 1:d0dfbce63a89 102 */
elmot 1:d0dfbce63a89 103 typedef bool (*emac_link_out_fn)(emac_interface_t *emac, emac_stack_mem_t *buf);
elmot 1:d0dfbce63a89 104
elmot 1:d0dfbce63a89 105 /**
elmot 1:d0dfbce63a89 106 * Initializes the HW
elmot 1:d0dfbce63a89 107 *
elmot 1:d0dfbce63a89 108 * @return True on success, False in case of an error.
elmot 1:d0dfbce63a89 109 */
elmot 1:d0dfbce63a89 110 typedef bool (*emac_power_up_fn)(emac_interface_t *emac);
elmot 1:d0dfbce63a89 111
elmot 1:d0dfbce63a89 112 /**
elmot 1:d0dfbce63a89 113 * Deinitializes the HW
elmot 1:d0dfbce63a89 114 *
elmot 1:d0dfbce63a89 115 * @param emac Emac interface
elmot 1:d0dfbce63a89 116 */
elmot 1:d0dfbce63a89 117 typedef void (*emac_power_down_fn)(emac_interface_t *emac);
elmot 1:d0dfbce63a89 118
elmot 1:d0dfbce63a89 119 /**
elmot 1:d0dfbce63a89 120 * Sets a callback that needs to be called for packets received for that interface
elmot 1:d0dfbce63a89 121 *
elmot 1:d0dfbce63a89 122 * @param emac Emac interface
elmot 1:d0dfbce63a89 123 * @param input_cb Function to be register as a callback
elmot 1:d0dfbce63a89 124 * @param data Arbitrary user data to be passed to the callback
elmot 1:d0dfbce63a89 125 */
elmot 1:d0dfbce63a89 126 typedef void (*emac_set_link_input_cb_fn)(emac_interface_t *emac, emac_link_input_fn input_cb, void *data);
elmot 1:d0dfbce63a89 127
elmot 1:d0dfbce63a89 128 /**
elmot 1:d0dfbce63a89 129 * Sets a callback that needs to be called on link status changes for given interface
elmot 1:d0dfbce63a89 130 *
elmot 1:d0dfbce63a89 131 * @param emac Emac interface
elmot 1:d0dfbce63a89 132 * @param state_cb Function to be register as a callback
elmot 1:d0dfbce63a89 133 * @param data Arbitrary user data to be passed to the callback
elmot 1:d0dfbce63a89 134 */
elmot 1:d0dfbce63a89 135 typedef void (*emac_set_link_state_cb_fn)(emac_interface_t *emac, emac_link_state_change_fn state_cb, void *data);
elmot 1:d0dfbce63a89 136
elmot 1:d0dfbce63a89 137 typedef struct emac_interface_ops {
elmot 1:d0dfbce63a89 138 emac_get_mtu_size_fn get_mtu_size;
elmot 1:d0dfbce63a89 139 emac_get_ifname_fn get_ifname;
elmot 1:d0dfbce63a89 140 emac_get_hwaddr_size_fn get_hwaddr_size;
elmot 1:d0dfbce63a89 141 emac_get_hwaddr_fn get_hwaddr;
elmot 1:d0dfbce63a89 142 emac_set_hwaddr_fn set_hwaddr;
elmot 1:d0dfbce63a89 143 emac_link_out_fn link_out;
elmot 1:d0dfbce63a89 144 emac_power_up_fn power_up;
elmot 1:d0dfbce63a89 145 emac_power_down_fn power_down;
elmot 1:d0dfbce63a89 146 emac_set_link_input_cb_fn set_link_input_cb;
elmot 1:d0dfbce63a89 147 emac_set_link_state_cb_fn set_link_state_cb;
elmot 1:d0dfbce63a89 148 } emac_interface_ops_t;
elmot 1:d0dfbce63a89 149
elmot 1:d0dfbce63a89 150 typedef struct emac_interface {
elmot 1:d0dfbce63a89 151 const emac_interface_ops_t ops;
elmot 1:d0dfbce63a89 152 void *hw;
elmot 1:d0dfbce63a89 153 } emac_interface_t;
elmot 1:d0dfbce63a89 154
elmot 1:d0dfbce63a89 155 #else
elmot 1:d0dfbce63a89 156
elmot 1:d0dfbce63a89 157 typedef void *emac_interface_t;
elmot 1:d0dfbce63a89 158
elmot 1:d0dfbce63a89 159 #endif /* DEVICE_EMAC */
elmot 1:d0dfbce63a89 160 #endif /* MBED_EMAC_API_H */