Merge pull request #12715 from RyoheiHagimoto/rza1-eth-deprecation

RZ_A1H remove usage of ethernet hal API
pull/12741/head
Martin Kojtal 2020-04-01 08:54:31 +02:00 committed by GitHub
commit 0eca8d38d0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 101 additions and 68 deletions

View File

@ -17,8 +17,8 @@
#include "rtos/ThisThread.h" #include "rtos/ThisThread.h"
#include "netsocket/nsapi_types.h" #include "netsocket/nsapi_types.h"
#include "mbed_shared_queues.h" #include "mbed_shared_queues.h"
#include "ethernet_api.h" #include "rza1_eth.h"
#include "ethernetext_api.h" #include "rza1_eth_ext.h"
#include "rza1_emac.h" #include "rza1_emac.h"
#define RZ_A1_ETH_IF_NAME "en" #define RZ_A1_ETH_IF_NAME "en"
@ -70,7 +70,7 @@ void RZ_A1_EMAC::set_hwaddr(const uint8_t *addr)
/* Reconnect */ /* Reconnect */
if (power_on != false) { if (power_on != false) {
ethernet_cfg_t ethcfg; rza1_ethernet_cfg_t ethcfg;
ethcfg.int_priority = 6; ethcfg.int_priority = 6;
ethcfg.recv_cb = &_recv_callback; ethcfg.recv_cb = &_recv_callback;
ethcfg.ether_mac = NULL; ethcfg.ether_mac = NULL;
@ -89,7 +89,7 @@ bool RZ_A1_EMAC::link_out(emac_mem_buf_t *buf)
while ((copy_buf != NULL) && (memory_manager->get_ptr(copy_buf) != NULL) && (memory_manager->get_len(copy_buf) != 0)) { while ((copy_buf != NULL) && (memory_manager->get_ptr(copy_buf) != NULL) && (memory_manager->get_len(copy_buf) != 0)) {
for (retry_cnt = 0; retry_cnt < 100; retry_cnt++) { for (retry_cnt = 0; retry_cnt < 100; retry_cnt++) {
write_size = ethernet_write((char *)memory_manager->get_ptr(copy_buf), memory_manager->get_len(copy_buf)); write_size = rza1_ethernet_write((char *)memory_manager->get_ptr(copy_buf), memory_manager->get_len(copy_buf));
if (write_size != 0) { if (write_size != 0) {
total_write_size += write_size; total_write_size += write_size;
break; break;
@ -101,7 +101,7 @@ bool RZ_A1_EMAC::link_out(emac_mem_buf_t *buf)
memory_manager->free(buf); memory_manager->free(buf);
if (total_write_size > 0) { if (total_write_size > 0) {
if (ethernet_send() == 1) { if (rza1_ethernet_send() == 1) {
result = true; result = true;
} }
} }
@ -115,7 +115,7 @@ bool RZ_A1_EMAC::power_up()
return true; return true;
} }
ethernet_cfg_t ethcfg; rza1_ethernet_cfg_t ethcfg;
ethcfg.int_priority = 6; ethcfg.int_priority = 6;
ethcfg.recv_cb = &_recv_callback; ethcfg.recv_cb = &_recv_callback;
ethcfg.ether_mac = NULL; ethcfg.ether_mac = NULL;
@ -184,13 +184,13 @@ void RZ_A1_EMAC::recv_task(void) {
while (1) { while (1) {
rtos::ThisThread::flags_wait_all(1); rtos::ThisThread::flags_wait_all(1);
for (cnt = 0; cnt < 16; cnt++) { for (cnt = 0; cnt < 16; cnt++) {
recv_size = ethernet_receive(); recv_size = rza1_ethernet_receive();
if (recv_size == 0) { if (recv_size == 0) {
break; break;
} }
buf = memory_manager->alloc_heap(recv_size, 0); buf = memory_manager->alloc_heap(recv_size, 0);
if (buf != NULL) { if (buf != NULL) {
(void)ethernet_read((char *)memory_manager->get_ptr(buf), memory_manager->get_len(buf)); (void)rza1_ethernet_read((char *)memory_manager->get_ptr(buf), memory_manager->get_len(buf));
emac_link_input_cb(buf); emac_link_input_cb(buf);
} }
} }
@ -199,7 +199,7 @@ void RZ_A1_EMAC::recv_task(void) {
void RZ_A1_EMAC::phy_task(void) void RZ_A1_EMAC::phy_task(void)
{ {
if (ethernet_link() == 1) { if (rza1_ethernet_link() == 1) {
int link_mode = ethernetext_chk_link_mode(); int link_mode = ethernetext_chk_link_mode();
if (link_mode != link_mode_last) { if (link_mode != link_mode_last) {
if (connect_sts != false) { if (connect_sts != false) {

View File

@ -1,5 +1,5 @@
/* mbed Microcontroller Library /* Copyright (c) 2020 Renesas Electronics Corporation.
* Copyright (c) 2006-2013 ARM Limited * SPDX-License-Identifier: Apache-2.0
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -14,13 +14,13 @@
* limitations under the License. * limitations under the License.
*/ */
#include <string.h> #include <string.h>
#include "ethernet_api.h" #include "rza1_eth.h"
#include "cmsis.h" #include "cmsis.h"
#include "mbed_interface.h" #include "mbed_interface.h"
#include "mbed_toolchain.h" #include "mbed_toolchain.h"
#include "mbed_error.h" #include "mbed_error.h"
#include "iodefine.h" #include "iodefine.h"
#include "ethernetext_api.h" #include "rza1_eth_ext.h"
#if DEVICE_ETHERNET #if DEVICE_ETHERNET
@ -89,8 +89,8 @@
/* 0x00000001 : Receive frame CRC error */ /* 0x00000001 : Receive frame CRC error */
#define EDMAC_EESIPR_INI_EtherC (0x00400000) /* 0x00400000 : E-MAC status register */ #define EDMAC_EESIPR_INI_EtherC (0x00400000) /* 0x00400000 : E-MAC status register */
void ethernet_address(char *); void rza1_ethernet_address(char *);
void ethernet_set_link(int, int); void rza1_ethernet_set_link(int, int);
/* Send descriptor */ /* Send descriptor */
@ -114,13 +114,13 @@ typedef struct tag_edmac_recv_desc {
/* Transmit/receive buffers (must be allocated in 16-byte boundaries) */ /* Transmit/receive buffers (must be allocated in 16-byte boundaries) */
#if defined(__ICCARM__) #if defined(__ICCARM__)
#pragma data_alignment=16 #pragma data_alignment=16
static uint8_t ethernet_nc_memory[(sizeof(edmac_send_desc_t) * NUM_OF_TX_DESCRIPTOR) + static uint8_t rza1_ethernet_nc_memory[(sizeof(edmac_send_desc_t) * NUM_OF_TX_DESCRIPTOR) +
(sizeof(edmac_recv_desc_t) * NUM_OF_RX_DESCRIPTOR) + (sizeof(edmac_recv_desc_t) * NUM_OF_RX_DESCRIPTOR) +
(NUM_OF_TX_DESCRIPTOR * SIZE_OF_BUFFER) + (NUM_OF_TX_DESCRIPTOR * SIZE_OF_BUFFER) +
(NUM_OF_RX_DESCRIPTOR * SIZE_OF_BUFFER)] //16 bytes aligned! (NUM_OF_RX_DESCRIPTOR * SIZE_OF_BUFFER)] //16 bytes aligned!
@ ".mirrorram"; @ ".mirrorram";
#else #else
static uint8_t ethernet_nc_memory[(sizeof(edmac_send_desc_t) * NUM_OF_TX_DESCRIPTOR) + static uint8_t rza1_ethernet_nc_memory[(sizeof(edmac_send_desc_t) * NUM_OF_TX_DESCRIPTOR) +
(sizeof(edmac_recv_desc_t) * NUM_OF_RX_DESCRIPTOR) + (sizeof(edmac_recv_desc_t) * NUM_OF_RX_DESCRIPTOR) +
(NUM_OF_TX_DESCRIPTOR * SIZE_OF_BUFFER) + (NUM_OF_TX_DESCRIPTOR * SIZE_OF_BUFFER) +
(NUM_OF_RX_DESCRIPTOR * SIZE_OF_BUFFER)] (NUM_OF_RX_DESCRIPTOR * SIZE_OF_BUFFER)]
@ -162,7 +162,7 @@ static void set_ether_pir(uint32_t set_data);
static void wait_100us(int32_t wait_cnt); static void wait_100us(int32_t wait_cnt);
int ethernetext_init(ethernet_cfg_t *p_ethcfg) { int ethernetext_init(rza1_ethernet_cfg_t *p_ethcfg) {
int32_t i; int32_t i;
uint16_t val; uint16_t val;
@ -210,38 +210,6 @@ int ethernetext_init(ethernet_cfg_t *p_ethcfg) {
wait_100us(250); /* 25msec */ wait_100us(250); /* 25msec */
GPIOP4 |= 0x0004; /* P4_2 Outputs high level */ GPIOP4 |= 0x0004; /* P4_2 Outputs high level */
wait_100us(100); /* 10msec */ wait_100us(100); /* 10msec */
#elif defined(TARGET_VK_RZ_A1H)
/* -->4F<-- P1_14(ET_COL) */
GPIOPMC1 |= 0x4000;
GPIOPFCAE1 &= ~0x4000;
GPIOPFCE1 |= 0x4000;
GPIOPFC1 |= 0x4000;
GPIOPIPC1 |= 0x4000;
/* -->2F<-- P2_0(ET_TXCLK), P2_1(ET_TXER), P2_2(ET_TXEN), P2_3(ET_CRS), P2_4(ET_TXD0),
P2_5(ET_TXD1), P2_6(ET_TXD2), P2_7(ET_TXD3), P2_8(ET_RXD0), P2_9(ET_RXD1), P2_10(ET_RXD2) P2_11(ET_RXD3) */
GPIOPMC2 |= 0x0FFF;
GPIOPFCAE2 &= ~0x0FFF;
GPIOPFCE2 &= ~0x0FFF;
GPIOPFC2 |= 0x0FFF;
GPIOPIPC2 |= 0x0FFF;
/* -->3F<-- P3_3(ET_MDIO), P3_4(ET_RXCLK), P3_5(ET_RXER), P3_6(ET_RXDV) */
GPIOPMC3 |= 0x0078;
GPIOPFCAE3 &= ~0x0078;
GPIOPFCE3 &= ~0x0078;
GPIOPFC3 |= 0x0078;
GPIOPIPC3 |= 0x0078;
/* -->3F<-- P7_0(ET_MDC) */
GPIOPMC7 |= 0x0001;
GPIOPFCAE7 &= ~0x0001;
GPIOPFCE7 |= 0x0001;
GPIOPFC7 &= ~0x0001;
GPIOPIPC7 |= 0x0001;
/* Resets the E-MAC,E-DMAC */
lan_reg_reset();
#else #else
#error "There is no initialization processing." #error "There is no initialization processing."
#endif #endif
@ -265,7 +233,7 @@ int ethernetext_init(ethernet_cfg_t *p_ethcfg) {
if (p_ethcfg->ether_mac != NULL) { if (p_ethcfg->ether_mac != NULL) {
(void)memcpy(mac_addr, p_ethcfg->ether_mac, sizeof(mac_addr)); (void)memcpy(mac_addr, p_ethcfg->ether_mac, sizeof(mac_addr));
} else { } else {
ethernet_address(mac_addr); /* Get MAC Address */ rza1_ethernet_address(mac_addr); /* Get MAC Address */
} }
return 0; return 0;
@ -390,24 +358,24 @@ void ethernetext_set_all_multicast(int all) {
} }
int ethernet_init() { int rza1_ethernet_init() {
ethernet_cfg_t ethcfg; rza1_ethernet_cfg_t ethcfg;
ethcfg.int_priority = 5; ethcfg.int_priority = 5;
ethcfg.recv_cb = NULL; ethcfg.recv_cb = NULL;
ethcfg.ether_mac = NULL; ethcfg.ether_mac = NULL;
ethernetext_init(&ethcfg); ethernetext_init(&ethcfg);
ethernet_set_link(-1, 0); /* Auto-Negotiation */ rza1_ethernet_set_link(-1, 0); /* Auto-Negotiation */
return 0; return 0;
} }
void ethernet_free() { void rza1_ethernet_free() {
ETHERARSTR |= 0x00000001; /* ETHER software reset */ ETHERARSTR |= 0x00000001; /* ETHER software reset */
CPGSTBCR7 |= CPG_STBCR7_BIT_MSTP74; /* disable ETHER clock */ CPGSTBCR7 |= CPG_STBCR7_BIT_MSTP74; /* disable ETHER clock */
} }
int ethernet_write(const char *data, int slen) { int rza1_ethernet_write(const char *data, int slen) {
edmac_send_desc_t *p_send_desc; edmac_send_desc_t *p_send_desc;
int32_t copy_size; int32_t copy_size;
@ -431,7 +399,7 @@ int ethernet_write(const char *data, int slen) {
return copy_size; return copy_size;
} }
int ethernet_send() { int rza1_ethernet_send() {
edmac_send_desc_t *p_send_desc; edmac_send_desc_t *p_send_desc;
int32_t ret; int32_t ret;
@ -463,7 +431,7 @@ int ethernet_send() {
return ret; return ret;
} }
int ethernet_receive() { int rza1_ethernet_receive() {
edmac_recv_desc_t *p_recv_desc; edmac_recv_desc_t *p_recv_desc;
int32_t receive_size = 0; int32_t receive_size = 0;
@ -507,7 +475,7 @@ int ethernet_receive() {
return receive_size; return receive_size;
} }
int ethernet_read(char *data, int dlen) { int rza1_ethernet_read(char *data, int dlen) {
edmac_recv_desc_t *p_recv_desc = p_recv_end_desc; /* Read top descriptor */ edmac_recv_desc_t *p_recv_desc = p_recv_end_desc; /* Read top descriptor */
int32_t copy_size; int32_t copy_size;
@ -525,13 +493,13 @@ int ethernet_read(char *data, int dlen) {
return copy_size; return copy_size;
} }
void ethernet_address(char *mac) { void rza1_ethernet_address(char *mac) {
if (mac != NULL) { if (mac != NULL) {
mbed_mac_address(mac); /* Get MAC Address */ mbed_mac_address(mac); /* Get MAC Address */
} }
} }
int ethernet_link(void) { int rza1_ethernet_link(void) {
int32_t ret; int32_t ret;
uint16_t data; uint16_t data;
@ -545,7 +513,7 @@ int ethernet_link(void) {
return ret; return ret;
} }
void ethernet_set_link(int speed, int duplex) { void rza1_ethernet_set_link(int speed, int duplex) {
uint16_t data; uint16_t data;
int32_t i; int32_t i;
int32_t link; int32_t link;
@ -612,8 +580,8 @@ static void lan_desc_create(void) {
int32_t i; int32_t i;
uint8_t *p_memory_top; uint8_t *p_memory_top;
(void)memset((void *)ethernet_nc_memory, 0, sizeof(ethernet_nc_memory)); (void)memset((void *)rza1_ethernet_nc_memory, 0, sizeof(rza1_ethernet_nc_memory));
p_memory_top = ethernet_nc_memory; p_memory_top = rza1_ethernet_nc_memory;
/* Descriptor area configuration */ /* Descriptor area configuration */
p_eth_desc_dsend = (edmac_send_desc_t *)p_memory_top; p_eth_desc_dsend = (edmac_send_desc_t *)p_memory_top;

View File

@ -0,0 +1,65 @@
/* Copyright (c) 2020 Renesas Electronics Corporation.
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef MBED_ETHERNET_API_H
#define MBED_ETHERNET_API_H
#include "device.h"
#include "platform/mbed_toolchain.h"
#if DEVICE_ETHERNET
#ifdef __cplusplus
extern "C" {
#endif
// Connection constants
int rza1_ethernet_init(void);
void rza1_ethernet_free(void);
// write size bytes from data to ethernet buffer
// return num bytes written
// or -1 if size is too big
int rza1_ethernet_write(const char *data, int size);
// send ethernet write buffer, returning the packet size sent
int rza1_ethernet_send(void);
// receive from ethernet buffer, returning packet size, or 0 if no packet
int rza1_ethernet_receive(void);
// read size bytes in to data, return actual num bytes read (0..size)
// if data == NULL, throw the bytes away
int rza1_ethernet_read(char *data, int size);
// get the ethernet address
void rza1_ethernet_address(char *mac);
// see if the link is up
int rza1_ethernet_link(void);
// force link settings
void rza1_ethernet_set_link(int speed, int duplex);
#ifdef __cplusplus
}
#endif
#endif
#endif
/** @}*/

View File

@ -1,4 +1,4 @@
/* Copyright (c) 2014 Renesas Electronics Corporation. /* Copyright (c) 2020 Renesas Electronics Corporation.
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
@ -29,13 +29,13 @@ extern "C" {
typedef void (ethernetext_cb_fnc)(void); typedef void (ethernetext_cb_fnc)(void);
typedef struct tag_ethernet_cfg { typedef struct tag_rza1_ethernet_cfg {
int int_priority; int int_priority;
ethernetext_cb_fnc *recv_cb; ethernetext_cb_fnc *recv_cb;
char *ether_mac; char *ether_mac;
} ethernet_cfg_t; } rza1_ethernet_cfg_t;
extern int ethernetext_init(ethernet_cfg_t *p_ethcfg); extern int ethernetext_init(rza1_ethernet_cfg_t *p_ethcfg);
extern void ethernetext_start_stop(int32_t mode); extern void ethernetext_start_stop(int32_t mode);
extern int ethernetext_chk_link_mode(void); extern int ethernetext_chk_link_mode(void);
extern void ethernetext_set_link_mode(int32_t link); extern void ethernetext_set_link_mode(int32_t link);