summaryrefslogtreecommitdiff
path: root/tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_KPSDK_CODE/drivers/enet/fsl_enet_rtcs_adapter.h
diff options
context:
space:
mode:
Diffstat (limited to 'tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_KPSDK_CODE/drivers/enet/fsl_enet_rtcs_adapter.h')
-rw-r--r--tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_KPSDK_CODE/drivers/enet/fsl_enet_rtcs_adapter.h513
1 files changed, 513 insertions, 0 deletions
diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_KPSDK_CODE/drivers/enet/fsl_enet_rtcs_adapter.h b/tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_KPSDK_CODE/drivers/enet/fsl_enet_rtcs_adapter.h
new file mode 100644
index 0000000000..49eeba71b5
--- /dev/null
+++ b/tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_KPSDK_CODE/drivers/enet/fsl_enet_rtcs_adapter.h
@@ -0,0 +1,513 @@
+/*
+ * Copyright (c) 2013 - 2014, Freescale Semiconductor, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * o Redistributions of source code must retain the above copyright notice, this list
+ * of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright notice, this
+ * list of conditions and the following disclaimer in the documentation and/or
+ * other materials provided with the distribution.
+ *
+ * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __FSL_ENET_RTCS_ADAPTOR_H__
+#define __FSL_ENET_RTCS_ADAPTOR_H__
+
+#include "fsl_enet_hal.h"
+
+#ifndef MBED_NO_ENET
+
+#ifdef FSL_RTOS_MQX
+ #include "rtcs.h"
+ #include "pcb.h"
+#endif
+/*!
+ * @addtogroup enet_rtcs_adaptor
+ * @{
+ */
+
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+/*! @brief Definitions of the task parameter*/
+#ifndef FSL_RTOS_MQX
+ extern unsigned long _RTCSTASK_priority;
+#endif
+#define ENET_RECEIVE_TASK_PRIO (1)
+#define ENET_TASK_STACK_SIZE (800)
+#define ENET_PCB_NUM (16)
+
+/*! @brief Definitions of the configuration parameter*/
+#define ENET_RXBD_NUM (8)
+#define ENET_TXBD_NUM (4)
+#define ENET_EXTRXBD_NUM (4)
+#define ENET_RXBuff_SIZE (kEnetMaxFrameSize)
+#define ENET_TXBuff_SIZE (kEnetMaxFrameSize)
+#define ENET_RXRTCSBUFF_NUM (8)
+#define ENET_RX_BUFFER_ALIGNMENT (16)
+#define ENET_TX_BUFFER_ALIGNMENT (16)
+#define ENET_BD_ALIGNMENT (16)
+#define ENET_RXBuffSizeAlign(n) ENET_ALIGN(n, ENET_RX_BUFFER_ALIGNMENT)
+#define ENET_TXBuffSizeAlign(n) ENET_ALIGN(n, ENET_TX_BUFFER_ALIGNMENT)
+#define ENET_MII_CLOCK (2500000L)
+#if FSL_FEATURE_ENET_SUPPORT_PTP
+#define ENET_PTP_TXTS_RING_LEN (25)
+#define ENET_PTP_RXTS_RING_LEN (25)
+#endif
+
+/*! @brief Definitions of the error codes */
+#define ENET_OK (0)
+#define ENET_ERROR (0xff) /* General ENET error */
+
+#define ENETERR_INVALID_DEVICE (kStatus_ENET_InvalidDevice) /* Device number out of range */
+#define ENETERR_INIT_DEVICE (kStatus_ENET_Initialized) /* Device already initialized */
+
+/*! @brief Definitions of the ENET protocol parameter*/
+#define ENETPROT_IP 0x0800
+#define ENETPROT_ARP 0x0806
+#define ENETPROT_8021Q 0x8100
+#define ENETPROT_IP6 0x86DD
+#define ENETPROT_ETHERNET 0x88F7
+#define ENET_OPT_8023 0x0001
+#define ENET_OPT_8021QTAG 0x0002
+#define ENET_SETOPT_8021QPRIO(p) (ENET_OPT_8021QTAG | (((uint_32)(p) & 0x7) << 2))
+#define ENET_GETOPT_8021QPRIO(f) ((((unsigned int)f) >> 2) & 0x7)
+
+/*! @brief Definitions of the ENET option macro*/
+#define ENET_OPTION_HW_TX_IP_CHECKSUM 0x00001000
+#define ENET_OPTION_HW_TX_PROTOCOL_CHECKSUM 0x00002000
+#define ENET_OPTION_HW_RX_IP_CHECKSUM 0x00004000
+#define ENET_OPTION_HW_RX_PROTOCOL_CHECKSUM 0x00008000
+#define ENET_OPTION_HW_RX_MAC_ERR 0x00010000
+
+/*! @brief Definitions of the ENET default Mac*/
+#define ENET_DEFAULT_MAC_ADD { 0x00, 0x00, 0x5E, 0, 0, 0 }
+#define PCB_MINIMUM_SIZE (sizeof(PCB2))
+#define PCB_free(pcb_ptr) ((pcb_ptr)->FREE(pcb_ptr))
+
+/*! @brief Definitions of the macro for byte-swap*/
+#if SYSTEM_LITTLE_ENDIAN
+#define RTCS_HTONS(n) BSWAP_16(n)
+#define RTCS_HTONL(n) BSWAP_32(n)
+#define RTCS_NTOHS(n) BSWAP_16(n)
+#define RTCS_NTOHL(n) BSWAP_32(n)
+#else
+#define RTCS_HTONS(n) (n)
+#define RTCS_HTONL(n) (n)
+#define RTCS_NTOHS(n) (n)
+#define RTCS_NTOHL(n) (n)
+#endif
+
+#ifndef FSL_RTOS_MQX
+ #define htonl(p,x) (((uint_8_ptr)(p))[0] = ((x) >> 24) & 0xFF, \
+ ((uint_8_ptr)(p))[1] = ((x) >> 16) & 0xFF, \
+ ((uint_8_ptr)(p))[2] = ((x) >> 8) & 0xFF, \
+ ((uint_8_ptr)(p))[3] = (x) & 0xFF, \
+ (x))
+
+#define htons(p,x) (((uint_8_ptr)(p))[0] = ((x) >> 8) & 0xFF, \
+ ((uint_8_ptr)(p))[1] = (x) & 0xFF, \
+ (x))
+
+#define htonc(p,x) (((uint_8_ptr)(p))[0] = (x) & 0xFF, \
+ (x))
+
+#define ntohl(p) (\
+ (((uint_32)(((uint_8_ptr)(p))[0])) << 24) | \
+ (((uint_32)(((uint_8_ptr)(p))[1])) << 16) | \
+ (((uint_32)(((uint_8_ptr)(p))[2])) << 8) | \
+ ( (uint_32)(((uint_8_ptr)(p))[3])) \
+ )
+
+#define ntohs(p) (\
+ (((uint_16)(((uint_8_ptr)(p))[0])) << 8) | \
+ ( (uint_16)(((uint_8_ptr)(p))[1])) \
+ )
+
+#define ntohc(p) ((uint_8)(((uint_8_ptr)(p))[0]))
+#endif
+#define htone(p,x) ((p)[0] = (x)[0], \
+ (p)[1] = (x)[1], \
+ (p)[2] = (x)[2], \
+ (p)[3] = (x)[3], \
+ (p)[4] = (x)[4], \
+ (p)[5] = (x)[5] \
+ )
+
+#define ntohe(p,x) ((x)[0] = (p)[0] & 0xFF, \
+ (x)[1] = (p)[1] & 0xFF, \
+ (x)[2] = (p)[2] & 0xFF, \
+ (x)[3] = (p)[3] & 0xFF, \
+ (x)[4] = (p)[4] & 0xFF, \
+ (x)[5] = (p)[5] & 0xFF \
+ )
+
+/*! @brief Definitions of the add to queue*/
+#define QUEUEADD(head,tail,pcb) \
+ if ((head) == NULL) { \
+ (head) = (pcb); \
+ } else { \
+ (tail)->PRIVATE = (pcb); \
+ } \
+ (tail) = (pcb); \
+ (pcb)->PRIVATE = NULL
+
+/*! @brief Definitions of the get from queue*/
+#define QUEUEGET(head,tail,pcb) \
+ (pcb) = (head); \
+ if (head) { \
+ (head) = (head)->PRIVATE; \
+ if ((head) == NULL) { \
+ (tail) = NULL; \
+ } \
+ }
+
+/*! @brief Definition for ENET six-byte Mac type*/
+typedef unsigned char _enet_address[6];
+
+/*! @brief Definition of the IPCFG structure*/
+typedef void * _enet_handle;
+
+#ifndef FSL_RTOS_MQX
+ struct pcb;
+ typedef void (* PCB_FREE_FPTR)(struct pcb *);
+#endif
+
+/*! @brief Definition of the Ethernet packet header structure*/
+typedef struct enet_header
+{
+ _enet_address DEST; /*!< destination Mac address*/
+ _enet_address SOURCE; /*!< source Mac address*/
+ unsigned char TYPE[2]; /*!< protocol type*/
+} ENET_HEADER, * ENET_HEADER_PTR;
+
+#ifndef FSL_RTOS_MQX
+
+/*! @brief Definition of the fragment PCB structure*/
+typedef struct pcb_fragment
+{
+ uint32_t LENGTH; /*!< Packet fragment length*/
+ unsigned char *FRAGMENT; /*!< brief Pointer to fragment*/
+} PCB_FRAGMENT, * PCB_FRAGMENT_PTR;
+
+/*! @brief Definition of the PCB structure for the RTCS adaptor*/
+typedef struct pcb
+{
+ PCB_FREE_FPTR FREE; /*!< Function that frees PCB*/
+ void *PRIVATE; /*!< Private PCB information*/
+ PCB_FRAGMENT FRAG[1]; /*!< Pointer to PCB fragment*/
+} PCB, * PCB_PTR;
+
+/*! @brief Definition of the two fragment PCB structure*/
+typedef struct pcb2
+{
+ PCB_FREE_FPTR FREE; /*!< Function that frees PCB*/
+ void *PRIVATE; /*!< Private PCB information*/
+ PCB_FRAGMENT FRAG[2]; /*!< Pointers to two PCB fragments*/
+} PCB2, *PCB2_PTR;
+
+#endif
+
+/*! @brief Definition of the two fragment PCB structure*/
+typedef struct pcb_queue
+{
+ PCB *pcbHead; /*!< PCB buffer head*/
+ PCB *pcbTail; /*!< PCB buffer tail*/
+}pcb_queue;
+
+/*! @brief Definition of the ECB structure, which contains the protocol type and it's related service function*/
+typedef struct ENETEcbStruct
+{
+ uint16_t TYPE;
+ void (* SERVICE)(PCB_PTR, void *);
+ void *PRIVATE;
+ struct ENETEcbStruct *NEXT;
+} enet_ecb_struct_t;
+
+/*! @brief Definition of the 8022 header*/
+typedef struct enet_8022_header
+{
+ uint8_t dsap[1]; /*!< DSAP region*/
+ uint8_t ssap[1]; /*!< SSAP region*/
+ uint8_t command[1]; /*!< Command region*/
+ uint8_t oui[3]; /*!< OUI region*/
+ uint16_t type; /*!< type region*/
+}enet_8022_header_t, *enet_8022_header_ptr;
+
+/*! @brief Definition of the common status structure*/
+typedef struct enet_commom_stats_struct {
+ uint32_t ST_RX_TOTAL; /*!< Total number of received packets*/
+ uint32_t ST_RX_MISSED; /*!< Number of missed packets*/
+ uint32_t ST_RX_DISCARDED; /*!< Discarded a protocol that was not recognized*/
+ uint32_t ST_RX_ERRORS; /*!< Discarded error during reception*/
+ uint32_t ST_TX_TOTAL; /*!< Total number of transmitted packets*/
+ uint32_t ST_TX_MISSED; /*!< Discarded transmit ring full*/
+ uint32_t ST_TX_DISCARDED; /*!< Discarded bad packet*/
+ uint32_t ST_TX_ERRORS; /*!< Error during transmission*/
+} ENET_COMMON_STATS_STRUCT, * ENET_COMMON_STATS_STRUCT_PTR;
+
+typedef struct enet_stats {
+ ENET_COMMON_STATS_STRUCT COMMON; /*!< Common status structure*/
+ uint32_t ST_RX_ALIGN; /*!< Frame Alignment error*/
+ uint32_t ST_RX_FCS; /*!< CRC error */
+ uint32_t ST_RX_RUNT; /*!< Runt packet received */
+ uint32_t ST_RX_GIANT; /*!< Giant packet received*/
+ uint32_t ST_RX_LATECOLL; /*!< Late collision */
+ uint32_t ST_RX_OVERRUN; /*!< DMA overrun*/
+ uint32_t ST_TX_SQE; /*!< Heartbeat lost*/
+ uint32_t ST_TX_DEFERRED; /*!< Transmission deferred*/
+ uint32_t ST_TX_LATECOLL; /*!< Late collision*/
+ uint32_t ST_TX_EXCESSCOLL; /*!< Excessive collisions*/
+ uint32_t ST_TX_CARRIER; /*!< Carrier sense lost*/
+ uint32_t ST_TX_UNDERRUN; /*!< DMA underrun*/
+ /* Following stats are collected by the Ethernet driver */
+ uint32_t ST_RX_COPY_SMALL; /*!< Driver had to copy packet */
+ uint32_t ST_RX_COPY_LARGE; /*!< Driver had to copy packet */
+ uint32_t ST_TX_COPY_SMALL; /*!< Driver had to copy packet */
+ uint32_t ST_TX_COPY_LARGE; /*!< Driver had to copy packet */
+ uint32_t RX_FRAGS_EXCEEDED;
+ uint32_t RX_PCBS_EXHAUSTED;
+ uint32_t RX_LARGE_BUFFERS_EXHAUSTED;
+ uint32_t TX_ALIGNED;
+ uint32_t TX_ALL_ALIGNED;
+#if BSPCFG_ENABLE_ENET_HISTOGRAM
+ uint32_t RX_HISTOGRAM[ENET_HISTOGRAM_ENTRIES];
+ uint32_t TX_HISTOGRAM[ENET_HISTOGRAM_ENTRIES];
+#endif
+
+} ENET_STATS, * ENET_STATS_PTR;
+
+/*******************************************************************************
+ * API
+ ******************************************************************************/
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/*!
+ * @name ENET RTCS ADAPTOR
+ * @{
+ */
+
+ /*!
+ * @brief Initializes the ENET device.
+ *
+ * @param device The ENET device number.
+ * @param address The hardware address.
+ * @param flag The flag for upper layer.
+ * @param handle The address pointer for ENET device structure.
+ * @return The execution status.
+ */
+uint32_t ENET_initialize(uint32_t device, _enet_address address,uint32_t flag, _enet_handle *handle);
+
+/*!
+ * @brief Opens the ENET device.
+ *
+ * @param handle The address pointer for ENET device structure.
+ * @param type The ENET protocol type.
+ * @param service The service function for type.
+ * @param private The private data for ENET device.
+ * @return The execution status.
+ */
+uint32_t ENET_open(_enet_handle handle, uint16_t type, void (* service)(PCB_PTR, void *), void *private);
+
+/*!
+ * @brief Shuts down the ENET device.
+ *
+ * @param handle The address pointer for ENET device structure.
+ * @return The execution status.
+ */
+uint32_t ENET_shutdown(_enet_handle handle);
+#if !ENET_RECEIVE_ALL_INTERRUPT
+/*!
+ * @brief ENET frame receive.
+ *
+ * @param enetIfPtr The address pointer for ENET device structure.
+ */
+static void ENET_receive(task_param_t param);
+#endif
+/*!
+ * @brief ENET frame transmit.
+ *
+ * @param handle The address pointer for ENET device structure.
+ * @param packet The ENET packet buffer.
+ * @param type The ENET protocol type.
+ * @param dest The destination hardware address.
+ * @param flag The flag for upper layer.
+ * @return The execution status.
+ */
+uint32_t ENET_send(_enet_handle handle, PCB_PTR packet, uint32_t type, _enet_address dest, uint32_t flags) ;
+
+/*!
+ * @brief The ENET gets the address with the initialized device.
+ *
+ * @param handle The address pointer for ENET device structure.
+ * @param address The destination hardware address.
+ * @return The execution status.
+ */
+uint32_t ENET_get_address(_enet_handle handle, _enet_address address);
+
+/*!
+ * @brief The ENET gets the address with an uninitialized device.
+ *
+ * @param handle The address pointer for ENET device structure.
+ * @param value The value to change the last three bytes of hardware.
+ * @param address The destination hardware address.
+ * @return True if the execution status is success else false.
+ */
+uint32_t ENET_get_mac_address(uint32_t device, uint32_t value, _enet_address address);
+/*!
+ * @brief The ENET joins a multicast group address.
+ *
+ * @param handle The address pointer for ENET device structure.
+ * @param type The ENET protocol type.
+ * @param address The destination hardware address.
+ * @return The execution status.
+ */
+uint32_t ENET_join(_enet_handle handle, uint16_t type, _enet_address address);
+
+/*!
+ * @brief The ENET leaves a multicast group address.
+ *
+ * @param handle The address pointer for ENET device structure.
+ * @param type The ENET protocol type.
+ * @param address The destination hardware address.
+ * @return The execution status.
+ */
+uint32_t ENET_leave(_enet_handle handle, uint16_t type, _enet_address address);
+#if BSPCFG_ENABLE_ENET_STATS
+/*!
+ * @brief The ENET gets the packet statistic.
+ *
+ * @param handle The address pointer for ENET device structure.
+ * @return The statistic.
+ */
+ENET_STATS_PTR ENET_get_stats(_enet_handle handle);
+#endif
+/*!
+ * @brief The ENET gets the link status.
+ *
+ * @param handle The address pointer for ENET device structure.
+ * @return The link status.
+ */
+bool ENET_link_status(_enet_handle handle);
+
+/*!
+ * @brief The ENET gets the link speed.
+ *
+ * @param handle The address pointer for ENET device structure.
+ * @return The link speed.
+ */
+uint32_t ENET_get_speed(_enet_handle handle);
+
+/*!
+ * @brief The ENET gets the MTU.
+ *
+ * @param handle The address pointer for ENET device structure.
+ * @return The link MTU
+ */
+uint32_t ENET_get_MTU(_enet_handle handle);
+
+/*!
+ * @brief Gets the ENET PHY registers.
+ *
+ * @param handle The address pointer for ENET device structure.
+ * @param numRegs The number of registers.
+ * @param regPtr The buffer for data read from PHY registers.
+ * @return True if all numRegs registers are read succeed else false.
+ */
+bool ENET_phy_registers(_enet_handle handle, uint32_t numRegs, uint32_t *regPtr);
+
+/*!
+ * @brief Gets ENET options.
+ *
+ * @param handle The address pointer for ENET device structure.
+ * @return ENET options.
+ */
+uint32_t ENET_get_options(_enet_handle handle);
+
+/*!
+ * @brief Unregisters a protocol type on an Ethernet channel.
+ *
+ * @param handle The address pointer for ENET device structure.
+ * @return ENET options.
+ */
+uint32_t ENET_close(_enet_handle handle, uint16_t type);
+
+/*!
+ * @brief ENET mediactl.
+ *
+ * @param handle The address pointer for ENET device structure.
+ * @param The command ID.
+ * @param The buffer for input or output parameters.
+ * @return ENET options.
+ */
+uint32_t ENET_mediactl(_enet_handle handle, uint32_t commandId, void *inOutParam);
+
+/*!
+ * @brief Gets the next ENET device handle address.
+ *
+ * @param handle The address pointer for ENET device structure.
+ * @return The address of next ENET device handle.
+ */
+_enet_handle ENET_get_next_device_handle(_enet_handle handle);
+
+/*!
+ * @brief ENET free.
+ *
+ * @param packet The buffer address.
+ */
+void ENET_free(PCB_PTR packet);
+
+/*!
+ * @brief ENET error description.
+ *
+ * @param error The ENET error code.
+ * @return The error string.
+ */
+const char * ENET_strerror(uint32_t error);
+
+
+
+/* @} */
+
+#if defined(__cplusplus)
+}
+#endif
+
+/*! @}*/
+
+#endif /* MBED_NO_ENET */
+
+#endif /* __FSL_ENET_RTCS_ADAPTOR_H__ */
+/*******************************************************************************
+ * EOF
+ ******************************************************************************/
+
+
+
+
+
+
+
+
+