git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@15800 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
parent
8db57fad44
commit
80a5f29892
|
@ -225,7 +225,7 @@ typedef struct {
|
||||||
/* Link status flag.*/ \
|
/* Link status flag.*/ \
|
||||||
bool link_up; \
|
bool link_up; \
|
||||||
/* PHY address (pre shifted).*/ \
|
/* PHY address (pre shifted).*/ \
|
||||||
uint32_t phyaddr; \
|
uint32_t phyaddr; \
|
||||||
/* Receive next frame pointer.*/ \
|
/* Receive next frame pointer.*/ \
|
||||||
stm32_eth_rx_descriptor_t *rxptr; \
|
stm32_eth_rx_descriptor_t *rxptr; \
|
||||||
/* Transmit next frame pointer.*/ \
|
/* Transmit next frame pointer.*/ \
|
||||||
|
|
|
@ -237,35 +237,28 @@ static void mac_lld_set_address(const uint8_t *p) {
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
OSAL_IRQ_HANDLER(STM32_ETH_HANDLER) {
|
OSAL_IRQ_HANDLER(STM32_ETH_HANDLER) {
|
||||||
uint32_t dmasr;
|
MACDriver *macp = ÐD1;
|
||||||
|
uint32_t dmacsr;
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
||||||
dmasr = ETH->DMACSR;
|
dmacsr = ETH->DMACSR;
|
||||||
|
ETH->DMACSR = dmacsr; /* Clear status bits.*/
|
||||||
|
|
||||||
if (dmasr & ETH_DMACSR_RI) {
|
if ((dmacsr & (ETH_DMACSR_RI | ETH_DMACSR_TI)) != 0U) {
|
||||||
/* Data Received.*/
|
if ((dmacsr & ETH_DMACSR_TI) != 0U) {
|
||||||
ETH->DMACSR = ETH_DMACSR_RI;
|
/* Data Transmitted.*/
|
||||||
ETH->DMACIER &= ~ETH_DMACIER_RIE;
|
__mac_tx_wakeup(macp);
|
||||||
osalSysLockFromISR();
|
}
|
||||||
osalThreadDequeueAllI(ÐD1.rdqueue, MSG_RESET);
|
|
||||||
#if MAC_USE_EVENTS
|
if ((dmacsr & ETH_DMACSR_RI) != 0U) {
|
||||||
osalEventBroadcastFlagsI(ÐD1.rdevent, 0);
|
/* Data Received.*/
|
||||||
#endif
|
__mac_rx_wakeup(macp);
|
||||||
osalSysUnlockFromISR();
|
}
|
||||||
|
|
||||||
|
__mac_callback(macp);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dmasr & ETH_DMACSR_TI) {
|
|
||||||
/* Data Transmitted.*/
|
|
||||||
ETH->DMACSR = ETH_DMACSR_TI;
|
|
||||||
osalSysLockFromISR();
|
|
||||||
osalThreadDequeueAllI(ÐD1.tdqueue, MSG_RESET);
|
|
||||||
osalSysUnlockFromISR();
|
|
||||||
}
|
|
||||||
|
|
||||||
ETH->DMACSR |= ETH_DMACSR_NIS;
|
|
||||||
ETH->DMACIER = ETH_DMACIER_NIE | ETH_DMACIER_RIE | ETH_DMACIER_TIE;
|
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -230,104 +230,42 @@ typedef struct {
|
||||||
volatile uint32_t tdes3;
|
volatile uint32_t tdes3;
|
||||||
} stm32_eth_tx_descriptor_t;
|
} stm32_eth_tx_descriptor_t;
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Driver configuration structure.
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
/**
|
|
||||||
* @brief MAC address.
|
|
||||||
*/
|
|
||||||
uint8_t *mac_address;
|
|
||||||
/* End of the mandatory fields.*/
|
|
||||||
} MACConfig;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Structure representing a MAC driver.
|
|
||||||
*/
|
|
||||||
struct MACDriver {
|
|
||||||
/**
|
|
||||||
* @brief Driver state.
|
|
||||||
*/
|
|
||||||
macstate_t state;
|
|
||||||
/**
|
|
||||||
* @brief Current configuration data.
|
|
||||||
*/
|
|
||||||
const MACConfig *config;
|
|
||||||
/**
|
|
||||||
* @brief Transmit semaphore.
|
|
||||||
*/
|
|
||||||
threads_queue_t tdqueue;
|
|
||||||
/**
|
|
||||||
* @brief Receive semaphore.
|
|
||||||
*/
|
|
||||||
threads_queue_t rdqueue;
|
|
||||||
#if MAC_USE_EVENTS || defined(__DOXYGEN__)
|
|
||||||
/**
|
|
||||||
* @brief Receive event.
|
|
||||||
*/
|
|
||||||
event_source_t rdevent;
|
|
||||||
#endif
|
|
||||||
/* End of the mandatory fields.*/
|
|
||||||
/**
|
|
||||||
* @brief Link status flag.
|
|
||||||
*/
|
|
||||||
bool link_up;
|
|
||||||
/**
|
|
||||||
* @brief PHY address (pre shifted).
|
|
||||||
*/
|
|
||||||
uint32_t phyaddr;
|
|
||||||
/**
|
|
||||||
* @brief Receive next frame index.
|
|
||||||
*/
|
|
||||||
uint16_t rdindex;
|
|
||||||
/**
|
|
||||||
* @brief Transmit next frame index.
|
|
||||||
*/
|
|
||||||
uint16_t tdindex;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Structure representing a transmit descriptor.
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
/**
|
|
||||||
* @brief Current write offset.
|
|
||||||
*/
|
|
||||||
size_t offset;
|
|
||||||
/**
|
|
||||||
* @brief Available space size.
|
|
||||||
*/
|
|
||||||
size_t size;
|
|
||||||
/* End of the mandatory fields.*/
|
|
||||||
/**
|
|
||||||
* @brief Pointer to the physical descriptor.
|
|
||||||
*/
|
|
||||||
stm32_eth_tx_descriptor_t *physdesc;
|
|
||||||
} MACTransmitDescriptor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Structure representing a receive descriptor.
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
/**
|
|
||||||
* @brief Current read offset.
|
|
||||||
*/
|
|
||||||
size_t offset;
|
|
||||||
/**
|
|
||||||
* @brief Available data size.
|
|
||||||
*/
|
|
||||||
size_t size;
|
|
||||||
/* End of the mandatory fields.*/
|
|
||||||
/**
|
|
||||||
* @brief Pointer to the physical descriptor.
|
|
||||||
*/
|
|
||||||
stm32_eth_rx_descriptor_t *physdesc;
|
|
||||||
} MACReceiveDescriptor;
|
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Driver macros. */
|
/* Driver macros. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Low level fields of the MAC driver structure.
|
||||||
|
*/
|
||||||
|
#define mac_lld_driver_fields \
|
||||||
|
/* Link status flag.*/ \
|
||||||
|
bool link_up; \
|
||||||
|
/* PHY address (pre shifted).*/ \
|
||||||
|
uint32_t phyaddr; \
|
||||||
|
/* Receive next frame index.*/ \
|
||||||
|
uint32_t rdindex; \
|
||||||
|
/* Transmit next frame index.*/ \
|
||||||
|
uint32_t tdindex
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Low level fields of the MAC configuration structure.
|
||||||
|
*/
|
||||||
|
#define mac_lld_config_fields
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Low level fields of the MAC transmit descriptor structure.
|
||||||
|
*/
|
||||||
|
#define mac_lld_transmit_descriptor_fields \
|
||||||
|
/* Pointer to the physical descriptor.*/ \
|
||||||
|
stm32_eth_tx_descriptor_t *physdesc
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Low level fields of the MAC receive descriptor structure.
|
||||||
|
*/
|
||||||
|
#define mac_lld_receive_descriptor_fields \
|
||||||
|
/* Pointer to the physical descriptor.*/ \
|
||||||
|
stm32_eth_rx_descriptor_t *physdesc
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* External declarations. */
|
/* External declarations. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
Loading…
Reference in New Issue