Merge branch 'master' into remove-tud_network_link_state_cb
This commit is contained in:
@@ -132,11 +132,14 @@ void netd_report(uint8_t *buf, uint16_t len)
|
||||
//--------------------------------------------------------------------+
|
||||
// USBD Driver API
|
||||
//--------------------------------------------------------------------+
|
||||
void netd_init(void)
|
||||
{
|
||||
void netd_init(void) {
|
||||
tu_memclr(&_netd_itf, sizeof(_netd_itf));
|
||||
}
|
||||
|
||||
bool netd_deinit(void) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void netd_reset(uint8_t rhport)
|
||||
{
|
||||
(void) rhport;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2021, Ha Thach (tinyusb.org)
|
||||
* Copyright (c) 2024, Hardy Griech
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -24,22 +25,58 @@
|
||||
* This file is part of the TinyUSB stack.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _TUSB_NCM_H_
|
||||
#define _TUSB_NCM_H_
|
||||
|
||||
#include "common/tusb_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
// NTB buffers size for reception side, must be >> MTU to avoid TCP retransmission (driver issue ?)
|
||||
// Linux use 2048 as minimal size
|
||||
#ifndef CFG_TUD_NCM_OUT_NTB_MAX_SIZE
|
||||
#define CFG_TUD_NCM_OUT_NTB_MAX_SIZE 3200
|
||||
#endif
|
||||
|
||||
// Table 4.3 Data Class Interface Protocol Codes
|
||||
typedef enum
|
||||
{
|
||||
NCM_DATA_PROTOCOL_NETWORK_TRANSFER_BLOCK = 0x01
|
||||
} ncm_data_interface_protocol_code_t;
|
||||
// NTB buffers size for reception side, must be > MTU
|
||||
// Linux use 2048 as minimal size
|
||||
#ifndef CFG_TUD_NCM_IN_NTB_MAX_SIZE
|
||||
#define CFG_TUD_NCM_IN_NTB_MAX_SIZE 3200
|
||||
#endif
|
||||
|
||||
// Number of NTB buffers for reception side
|
||||
// Depending on the configuration, this parameter could be increased with the cost of additional RAM requirements
|
||||
// On Full-Speed (RP2040) :
|
||||
// 1 - good performance
|
||||
// 2 - up to 30% more performance with iperf with small packets
|
||||
// >2 - no performance gain
|
||||
// On High-Speed (STM32F7) :
|
||||
// No performance gain
|
||||
#ifndef CFG_TUD_NCM_OUT_NTB_N
|
||||
#define CFG_TUD_NCM_OUT_NTB_N 1
|
||||
#endif
|
||||
|
||||
// Number of NTB buffers for transmission side
|
||||
// Depending on the configuration, this parameter could be increased with the cost of additional RAM requirements
|
||||
// On Full-Speed (RP2040) :
|
||||
// 1 - good performance but SystemView shows lost events (on load test)
|
||||
// 2 - up to 50% more performance with iperf with small packets, "tud_network_can_xmit: request blocked"
|
||||
// happens from time to time with SystemView
|
||||
// 3 - "tud_network_can_xmit: request blocked" never happens
|
||||
// >3 - no performance gain
|
||||
// On High-Speed (STM32F7) :
|
||||
// No performance gain
|
||||
#ifndef CFG_TUD_NCM_IN_NTB_N
|
||||
#define CFG_TUD_NCM_IN_NTB_N 1
|
||||
#endif
|
||||
|
||||
// How many datagrams it is allowed to put into an NTB for transmission side
|
||||
#ifndef CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB
|
||||
#define CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB 8
|
||||
#endif
|
||||
|
||||
// This tells the host how many datagrams it is allowed to put into an NTB
|
||||
#ifndef CFG_TUD_NCM_OUT_MAX_DATAGRAMS_PER_NTB
|
||||
#define CFG_TUD_NCM_OUT_MAX_DATAGRAMS_PER_NTB 6
|
||||
#endif
|
||||
|
||||
// Table 6.2 Class-Specific Request Codes for Network Control Model subclass
|
||||
typedef enum
|
||||
@@ -62,8 +99,65 @@ typedef enum
|
||||
NCM_SET_CRC_MODE = 0x8A,
|
||||
} ncm_request_code_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#define NTH16_SIGNATURE 0x484D434E
|
||||
#define NDP16_SIGNATURE_NCM0 0x304D434E
|
||||
#define NDP16_SIGNATURE_NCM1 0x314D434E
|
||||
|
||||
typedef struct TU_ATTR_PACKED {
|
||||
uint16_t wLength;
|
||||
uint16_t bmNtbFormatsSupported;
|
||||
uint32_t dwNtbInMaxSize;
|
||||
uint16_t wNdbInDivisor;
|
||||
uint16_t wNdbInPayloadRemainder;
|
||||
uint16_t wNdbInAlignment;
|
||||
uint16_t wReserved;
|
||||
uint32_t dwNtbOutMaxSize;
|
||||
uint16_t wNdbOutDivisor;
|
||||
uint16_t wNdbOutPayloadRemainder;
|
||||
uint16_t wNdbOutAlignment;
|
||||
uint16_t wNtbOutMaxDatagrams;
|
||||
} ntb_parameters_t;
|
||||
|
||||
typedef struct TU_ATTR_PACKED {
|
||||
uint32_t dwSignature;
|
||||
uint16_t wHeaderLength;
|
||||
uint16_t wSequence;
|
||||
uint16_t wBlockLength;
|
||||
uint16_t wNdpIndex;
|
||||
} nth16_t;
|
||||
|
||||
typedef struct TU_ATTR_PACKED {
|
||||
uint16_t wDatagramIndex;
|
||||
uint16_t wDatagramLength;
|
||||
} ndp16_datagram_t;
|
||||
|
||||
typedef struct TU_ATTR_PACKED {
|
||||
uint32_t dwSignature;
|
||||
uint16_t wLength;
|
||||
uint16_t wNextNdpIndex;
|
||||
//ndp16_datagram_t datagram[];
|
||||
} ndp16_t;
|
||||
|
||||
typedef union TU_ATTR_PACKED {
|
||||
struct {
|
||||
nth16_t nth;
|
||||
ndp16_t ndp;
|
||||
ndp16_datagram_t ndp_datagram[CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB + 1];
|
||||
};
|
||||
uint8_t data[CFG_TUD_NCM_IN_NTB_MAX_SIZE];
|
||||
} xmit_ntb_t;
|
||||
|
||||
typedef union TU_ATTR_PACKED {
|
||||
struct {
|
||||
nth16_t nth;
|
||||
// only the header is at a guaranteed position
|
||||
};
|
||||
uint8_t data[CFG_TUD_NCM_OUT_NTB_MAX_SIZE];
|
||||
} recv_ntb_t;
|
||||
|
||||
struct ncm_notify_t {
|
||||
tusb_control_request_t header;
|
||||
uint32_t downlink, uplink;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -28,14 +28,13 @@
|
||||
#ifndef _TUSB_NET_DEVICE_H_
|
||||
#define _TUSB_NET_DEVICE_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include "class/cdc/cdc.h"
|
||||
|
||||
#if CFG_TUD_ECM_RNDIS && CFG_TUD_NCM
|
||||
#error "Cannot enable both ECM_RNDIS and NCM network drivers"
|
||||
#endif
|
||||
|
||||
#include "ncm.h"
|
||||
|
||||
/* declared here, NOT in usb_descriptors.c, so that the driver can intelligently ZLP as needed */
|
||||
#define CFG_TUD_NET_ENDPOINT_SIZE (TUD_OPT_HIGH_SPEED ? 512 : 64)
|
||||
|
||||
@@ -44,21 +43,13 @@
|
||||
#define CFG_TUD_NET_MTU 1514
|
||||
#endif
|
||||
|
||||
#ifndef CFG_TUD_NCM_IN_NTB_MAX_SIZE
|
||||
#define CFG_TUD_NCM_IN_NTB_MAX_SIZE 3200
|
||||
#endif
|
||||
|
||||
#ifndef CFG_TUD_NCM_OUT_NTB_MAX_SIZE
|
||||
#define CFG_TUD_NCM_OUT_NTB_MAX_SIZE 3200
|
||||
#endif
|
||||
// Table 4.3 Data Class Interface Protocol Codes
|
||||
typedef enum
|
||||
{
|
||||
NCM_DATA_PROTOCOL_NETWORK_TRANSFER_BLOCK = 0x01
|
||||
} ncm_data_interface_protocol_code_t;
|
||||
|
||||
#ifndef CFG_TUD_NCM_MAX_DATAGRAMS_PER_NTB
|
||||
#define CFG_TUD_NCM_MAX_DATAGRAMS_PER_NTB 8
|
||||
#endif
|
||||
|
||||
#ifndef CFG_TUD_NCM_ALIGNMENT
|
||||
#define CFG_TUD_NCM_ALIGNMENT 4
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -100,6 +91,7 @@ extern uint8_t tud_network_mac_address[6];
|
||||
// INTERNAL USBD-CLASS DRIVER API
|
||||
//--------------------------------------------------------------------+
|
||||
void netd_init (void);
|
||||
bool netd_deinit (void);
|
||||
void netd_reset (uint8_t rhport);
|
||||
uint16_t netd_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len);
|
||||
bool netd_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request);
|
||||
|
||||
Reference in New Issue
Block a user