/**************************************************************************//**
  @file lip_ll_wch32v307.h

  Файл содержит функции для работы с дескрипторами Ethernet для контроллера
  wch32v307.
  Работа с дескрипторами не включает работу с регистрами и не привязывается
  к расположению регистров какого-то контроллера, в связи с чем может использоваться
  другими чипами, которые используют модифицированную версию данного контроллера
  Ethernet.
  ******************************************************************************/

#ifndef LIP_LL_WCH32V307_H
#define LIP_LL_WCH32V307_H

#include "lip.h"
#include "ch32v30x_eth.h"

/* размер последнего блока (=макс. размеру пакета + размер CRC + выравнивание на слово) */
#define LIP_PORT_RX_LAST_BUF_SIZE  (LIP_ETH_MAX_PACKET_SIZE + 4 + (LIP_ETH_MAX_PACKET_SIZE%4 ? (4 - LIP_ETH_MAX_PACKET_SIZE%4) : 0))
/* общий размер всей памяти на прием */
#define LIP_PORT_RX_FULL_BUF_SIZE ((LIP_PORT_RX_DESCR_CNT-1)*LIP_PORT_RX_BUF_SIZE + LIP_PORT_RX_LAST_BUF_SIZE)


/* кол-во дескрипторов на передачу */
#define LIP_PORT_TX_DESCR_CNT      32




uint32_t lip_ll_wch32descr_rx_init(void);
uint32_t lip_ll_wch32descr_tx_init(void);

uint8_t *lip_ll_wch32descr_rx_get_buf(size_t *length);
t_lip_errs lip_ll_wch32descr_rx_drop(void);

uint8_t *lip_ll_wch32descr_tx_get_buf(int* max_length) ;
t_lip_errs lip_ll_wch32descr_tx_flush_split(size_t size, const uint8_t* data, int data_size);

extern void lip_ll_wch32descr_tx_poll_req(void);
extern void lip_ll_wch32descr_clear_stat(void);

#endif // LIP_LL_WCH32V307_H

