From aee118ec3bf99ba1af94bdf321c91d91553e9835 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Fri, 25 Sep 2009 16:15:54 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1185 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/io/platforms/AT91SAM7X/mac_lld.c | 144 ++++++++++++++++++++++++++++++++++++ os/io/platforms/AT91SAM7X/mac_lld.h | 141 +++++++++++++++++++++++++++++++++++ 2 files changed, 285 insertions(+) create mode 100644 os/io/platforms/AT91SAM7X/mac_lld.c create mode 100644 os/io/platforms/AT91SAM7X/mac_lld.h diff --git a/os/io/platforms/AT91SAM7X/mac_lld.c b/os/io/platforms/AT91SAM7X/mac_lld.c new file mode 100644 index 000000000..8dc674fcb --- /dev/null +++ b/os/io/platforms/AT91SAM7X/mac_lld.c @@ -0,0 +1,144 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/** + * @file templates/mac_lld.c + * @brief MAC Driver subsystem low level driver source template + * @addtogroup MAC_LLD + * @{ + */ + +#include +#include + +/** + * @brief Low level MAC initialization. + */ +void mac_lld_init(void) { + +} + +/** + * @brief Low level MAC address setup. + * + * @param[in] macp pointer to the @p MACDriver object + * @param[in] p pointer to a six bytes buffer containing the MAC address. If + * this parameter is set to @p NULL then a system default MAC is + * used. + * + * @note This function should be invoked after the @p macInit() and before + * @p macStart() else the result is unspecified (performed or ignored). + */ +void mac_lld_set_address(MACDriver *macp, uint8_t *p) { + +} + +/** + * @brief Starts the I/O activity and enters a low power mode. + * + * @param[in] macp pointer to the @p MACDriver object + */ +void mac_lld_start(MACDriver *macp) { + +} + +/** + * @brief Stops the I/O activity. + * + * @param[in] macp pointer to the @p MACDriver object + */ +void mac_lld_stop(MACDriver *macp) { + +} + +/** + * @brief Returns a transmission descriptor. + * @details One of the available transmission descriptors is locked and + * returned. + * + * @param[in] macp pointer to the @p MACDriver object + * @return A pointer to a @p MACTransmitDescriptor structure or @p NULL if + * a descriptor is not available or the driver went in stop mode. + */ +MACTransmitDescriptor *max_lld_get_transmit_descriptor(MACDriver *macp) { + + return NULL; +} + +/** + * @brief Releases a transmit descriptor and starts the transmission of the + * enqueued data as a single frame. + * + * @param[in] macp pointer to the @p MACDriver object + * @param[in] tdp the pointer to the @p MACTransmitDescriptor structure + */ +void mac_lld_release_transmit_descriptor(MACDriver *macp, + MACTransmitDescriptor *tdp) { + +} + +/** + * @brief Returns the buffer associated to a @p MACTransmitDescriptor. + * + * @param[in] tdp the pointer to the @p MACTransmitDescriptor structure + * @return The pointer to the transmit buffer. + */ +uint8_t *mac_lld_get_transmit_buffer(MACTransmitDescriptor *tdp) { + + return NULL; +} + +/** + * @brief Returns a received frame. + * + * @param[in] macp pointer to the @p MACDriver object + * @return A pointer to a @p MACReceiveDescriptor structure or @p NULL if + * the operation timed out, the driver went in stop mode or some + * transient error happened. + */ +MACReceiveDescriptor *max_lld_get_receive_descriptor(MACDriver *macp) { + + return NULL; +} + +/** + * @brief Releases a receive descriptor. + * @details The descriptor and its buffer is made available for more incoming + * frames. + * + * @param[in] macp pointer to the @p MACDriver object + * @param[in] rdp the pointer to the @p MACReceiveDescriptor structure + */ +void mac_lld_release_receive_descriptor(MACDriver *macp, + MACReceiveDescriptor *rdp) { + +} + +/** + * @brief Returns the buffer associated to a @p MACTransmitDescriptor. + * + * @param[in] tdp the pointer to the @p MACTransmitDescriptor structure + * @return The pointer to the transmit buffer. + */ +uint8_t *mac_lld_get_receive_buffer(MACReceiveDescriptor *rdp) { + + return NULL; +} + +/** @} */ diff --git a/os/io/platforms/AT91SAM7X/mac_lld.h b/os/io/platforms/AT91SAM7X/mac_lld.h new file mode 100644 index 000000000..68bed475d --- /dev/null +++ b/os/io/platforms/AT91SAM7X/mac_lld.h @@ -0,0 +1,141 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/** + * @file templates/mac_lld.h + * @brief MAC Driver subsystem low level driver header template + * @addtogroup MAC_LLD + * @{ + */ + +#ifndef _MAC_LLD_H_ +#define _MAC_LLD_H_ + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/** + * @brief Number of available descriptors/buffers. + */ +#if !defined(MAC_TRANSMIT_DESCRIPTORS) || defined(__DOXYGEN__) +#define MAC_TRANSMIT_DESCRIPTORS 2 +#endif + +/*===========================================================================*/ +/* EMAC specific constants and settings. */ +/*===========================================================================*/ + +#define EMAC_RECEIVE_BUFFERS 24 +#define EMAC_RECEIVE_BUFFERS_SIZE 128 /* Do not modify */ +#define EMAC_TRANSMIT_BUFFERS MAC_TRANSMIT_DESCRIPTORS +#define EMAC_TRANSMIT_BUFFERS_SIZE 1518 + +#define W1_R_OWNERSHIP 0x00000001 +#define W1_R_WRAP 0x00000002 +#define W1_R_ADDRESS_MASK 0xFFFFFFFC + +#define W2_R_LENGTH_MASK 0x00000FFF +#define W2_R_FRAME_START 0x00004000 +#define W2_R_FRAME_END 0x00008000 +#define W2_R_CFI 0x00010000 +#define W2_R_VLAN_PRIO_MASK 0x000E0000 +#define W2_R_PRIO_TAG_DETECTED 0x00100000 +#define W2_R_VLAN_TAG_DETECTED 0x00200000 +#define W2_R_TYPE_ID_MATCH 0x00400000 +#define W2_R_ADDR4_MATCH 0x00800000 +#define W2_R_ADDR3_MATCH 0x01000000 +#define W2_R_ADDR2_MATCH 0x02000000 +#define W2_R_ADDR1_MATCH 0x04000000 +#define W2_R_RFU1 0x08000000 +#define W2_R_ADDR_EXT_MATCH 0x10000000 +#define W2_R_UNICAST_MATCH 0x20000000 +#define W2_R_MULTICAST_MATCH 0x40000000 +#define W2_R_BROADCAST_DETECTED 0x80000000 + +#define W2_T_LENGTH_MASK 0x000007FF +#define W2_T_LOCKED 0x00000800 /* Not an EMAC flag, used by the driver */ +#define W2_T_RFU1 0x00003000 +#define W2_T_LAST_BUFFER 0x00008000 +#define W2_T_NO_CRC 0x00010000 +#define W2_T_RFU2 0x07FE0000 +#define W2_T_BUFFERS_EXHAUSTED 0x08000000 +#define W2_T_TRANSMIT_UNDERRUN 0x10000000 +#define W2_T_RETRY_LIMIT_EXC 0x20000000 +#define W2_T_WRAP 0x40000000 +#define W2_T_USED 0x80000000 + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/** + * @brief Structure representing a MAC driver. + */ +typedef struct { + enum {ifStopped = 0, + ifStarted} md_state; /**< @brief Interface status.*/ + Semaphore md_tdsem; /**< Transmit semaphore.*/ + Semaphore md_rdsem; /**< Receive semaphore.*/ +} MACDriver; + +/** + * @brief Structure representing a transmission descriptor. + */ +typedef struct { + + uint32_t w1; + uint32_t w2; +} MACTransmitDescriptor; + +/** + * @brief Structure representing a receive descriptor. + */ +typedef struct { + + uint32_t w1; + uint32_t w2; +} MACReceiveDescriptor; + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + void mac_lld_init(void); + void mac_lld_set_address(MACDriver *macp, uint8_t *p); + void mac_lld_start(MACDriver *macp); + void mac_lld_stop(MACDriver *macp); + MACTransmitDescriptor *max_lld_get_transmit_descriptor(MACDriver *macp); + void mac_lld_release_transmit_descriptor(MACDriver *macp, + MACTransmitDescriptor *tdp); + uint8_t *mac_lld_get_transmit_buffer(MACTransmitDescriptor *tdp); + MACReceiveDescriptor *max_lld_get_receive_descriptor(MACDriver *macp); + void mac_lld_release_receive_descriptor(MACDriver *macp, + MACReceiveDescriptor *rdp); + uint8_t *mac_lld_get_receive_buffer(MACReceiveDescriptor *rdp); +#ifdef __cplusplus +} +#endif + +#endif /* _MAC_LLD_H_ */ + +/** @} */ -- cgit v1.2.3