Package: release.debian.org Severity: normal Tags: bullseye User: release.debian.org@packages.debian.org Usertags: pu X-Debbugs-CC: pkg-dpdk-devel@lists.alioth.debian.org Dear release team, We would like to upload a new LTS release version of DPDK to Bullseye. We have already done this previously for Buster and Bullseye, therefore I already proceeded to upload to bullseye-pu. As before, the LTS point release has only bug fixes and no API breakages and has been tested with regression tests. This will be the last 20.11.x release and p-u upload we do, as the branch is now EOL upstream. The source debdiff is attached. -- Kind regards, Luca Boccassi
diff -Nru dpdk-20.11.9/app/proc-info/main.c dpdk-20.11.10/app/proc-info/main.c
--- dpdk-20.11.9/app/proc-info/main.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/proc-info/main.c 2023-12-12 10:30:50.000000000 +0000
@@ -19,7 +19,6 @@
#include <rte_common.h>
#include <rte_debug.h>
#include <rte_ethdev.h>
-#include <rte_malloc.h>
#include <rte_memory.h>
#include <rte_memzone.h>
#include <rte_launch.h>
@@ -95,6 +94,8 @@
static uint32_t enable_iter_mempool;
static char *mempool_iter_name;
+#define RSS_HASH_KEY_SIZE 64
+
/**< display usage */
static void
proc_info_usage(const char *prgname)
@@ -602,24 +603,23 @@
return;
}
- metrics = rte_malloc("proc_info_metrics",
- sizeof(struct rte_metric_value) * len, 0);
+ metrics = malloc(sizeof(struct rte_metric_value) * len);
if (metrics == NULL) {
printf("Cannot allocate memory for metrics\n");
return;
}
- names = rte_malloc(NULL, sizeof(struct rte_metric_name) * len, 0);
+ names = malloc(sizeof(struct rte_metric_name) * len);
if (names == NULL) {
printf("Cannot allocate memory for metrics names\n");
- rte_free(metrics);
+ free(metrics);
return;
}
if (len != rte_metrics_get_names(names, len)) {
printf("Cannot get metrics names\n");
- rte_free(metrics);
- rte_free(names);
+ free(metrics);
+ free(names);
return;
}
@@ -631,8 +631,8 @@
ret = rte_metrics_get_values(port_id, metrics, len);
if (ret < 0 || ret > len) {
printf("Cannot get metrics values\n");
- rte_free(metrics);
- rte_free(names);
+ free(metrics);
+ free(names);
return;
}
@@ -641,8 +641,8 @@
printf("%s: %"PRIu64"\n", names[i].name, metrics[i].value);
printf("%s############################\n", nic_stats_border);
- rte_free(metrics);
- rte_free(names);
+ free(metrics);
+ free(names);
}
static void
@@ -705,6 +705,7 @@
struct rte_eth_fc_conf fc_conf;
struct rte_ether_addr mac;
struct rte_eth_dev_owner owner;
+ uint8_t rss_key[RSS_HASH_KEY_SIZE];
/* Skip if port is not in mask */
if ((enabled_port_mask & (1ul << i)) == 0)
@@ -848,17 +849,18 @@
printf("\n");
}
+ rss_conf.rss_key = rss_key;
+ rss_conf.rss_key_len = dev_info.hash_key_size;
ret = rte_eth_dev_rss_hash_conf_get(i, &rss_conf);
if (ret == 0) {
- if (rss_conf.rss_key) {
- printf(" - RSS\n");
- printf("\t -- RSS len %u key (hex):",
- rss_conf.rss_key_len);
- for (k = 0; k < rss_conf.rss_key_len; k++)
- printf(" %x", rss_conf.rss_key[k]);
- printf("\t -- hf 0x%"PRIx64"\n",
- rss_conf.rss_hf);
- }
+ printf(" - RSS info\n");
+ printf("\t -- key len : %u\n",
+ rss_conf.rss_key_len);
+ printf("\t -- key (hex) : ");
+ for (k = 0; k < rss_conf.rss_key_len; k++)
+ printf("%02x", rss_conf.rss_key[k]);
+ printf("\n\t -- hash function : 0x%"PRIx64"\n",
+ rss_conf.rss_hf);
}
#ifdef RTE_LIB_SECURITY
diff -Nru dpdk-20.11.9/app/test/test_cryptodev_asym.c dpdk-20.11.10/app/test/test_cryptodev_asym.c
--- dpdk-20.11.9/app/test/test_cryptodev_asym.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test/test_cryptodev_asym.c 2023-12-12 10:30:50.000000000 +0000
@@ -1718,7 +1718,7 @@
}
static int
-test_dh_keygenration(void)
+test_dh_key_generation(void)
{
int status;
@@ -2291,7 +2291,7 @@
.unit_test_cases = {
TEST_CASE_ST(ut_setup, ut_teardown, test_capability),
TEST_CASE_ST(ut_setup, ut_teardown, test_dsa),
- TEST_CASE_ST(ut_setup, ut_teardown, test_dh_keygenration),
+ TEST_CASE_ST(ut_setup, ut_teardown, test_dh_key_generation),
TEST_CASE_ST(ut_setup, ut_teardown, test_rsa_enc_dec),
TEST_CASE_ST(ut_setup, ut_teardown, test_rsa_sign_verify),
TEST_CASE_ST(ut_setup, ut_teardown, test_rsa_enc_dec_crt),
diff -Nru dpdk-20.11.9/app/test/test_cryptodev.c dpdk-20.11.10/app/test/test_cryptodev.c
--- dpdk-20.11.9/app/test/test_cryptodev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test/test_cryptodev.c 2023-12-12 10:30:50.000000000 +0000
@@ -5800,6 +5800,9 @@
&cap_idx) == NULL)
return -ENOTSUP;
+ if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
+ return -ENOTSUP;
+
rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
uint64_t feat_flags = dev_info.feature_flags;
@@ -6828,6 +6831,8 @@
return -ENOTSUP;
if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
return -ENOTSUP;
+ if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
+ return -ENOTSUP;
rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
diff -Nru dpdk-20.11.9/app/test/test_cryptodev_mixed_test_vectors.h dpdk-20.11.10/app/test/test_cryptodev_mixed_test_vectors.h
--- dpdk-20.11.9/app/test/test_cryptodev_mixed_test_vectors.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test/test_cryptodev_mixed_test_vectors.h 2023-12-12 10:30:50.000000000 +0000
@@ -284,8 +284,10 @@
},
.cipher_iv = {
.data = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
- .len = 0,
+ .len = 16,
},
.cipher = {
.len_bits = 516 << 3,
@@ -723,8 +725,10 @@
},
.cipher_iv = {
.data = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
- .len = 0,
+ .len = 16,
},
.cipher = {
.len_bits = 516 << 3,
diff -Nru dpdk-20.11.9/app/test/test_event_crypto_adapter.c dpdk-20.11.10/app/test/test_event_crypto_adapter.c
--- dpdk-20.11.9/app/test/test_event_crypto_adapter.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test/test_event_crypto_adapter.c 2023-12-12 10:30:50.000000000 +0000
@@ -519,11 +519,10 @@
return TEST_FAILED;
}
- /* Create a NULL crypto device */
- nb_devs = rte_cryptodev_device_count_by_driver(
- rte_cryptodev_driver_id_get(
- RTE_STR(CRYPTODEV_NAME_NULL_PMD)));
+
+ nb_devs = rte_cryptodev_count();
if (!nb_devs) {
+ /* Create a NULL crypto device */
ret = rte_vdev_init(
RTE_STR(CRYPTODEV_NAME_NULL_PMD), NULL);
diff -Nru dpdk-20.11.9/app/test/test_hash_readwrite.c dpdk-20.11.10/app/test/test_hash_readwrite.c
--- dpdk-20.11.9/app/test/test_hash_readwrite.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test/test_hash_readwrite.c 2023-12-12 10:30:50.000000000 +0000
@@ -162,7 +162,7 @@
handle = rte_hash_create(&hash_params);
if (handle == NULL) {
- printf("hash creation failed");
+ printf("hash creation failed\n");
return -1;
}
diff -Nru dpdk-20.11.9/app/test/test_link_bonding.c dpdk-20.11.10/app/test/test_link_bonding.c
--- dpdk-20.11.9/app/test/test_link_bonding.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test/test_link_bonding.c 2023-12-12 10:30:50.000000000 +0000
@@ -445,7 +445,8 @@
uint16_t slaves[RTE_MAX_ETHPORTS];
char pmd_name[RTE_ETH_NAME_MAX_LEN];
- test_add_slave_to_bonded_device();
+ TEST_ASSERT_SUCCESS(test_add_slave_to_bonded_device(),
+ "Failed to add member to bonding device");
current_slave_count = rte_eth_bond_slaves_get(test_params->bonded_port_id,
slaves, RTE_MAX_ETHPORTS);
@@ -4262,7 +4263,7 @@
burst_size);
TEST_ASSERT_EQUAL(nb_tx, 0, " bad number of packet in burst");
- /* Clean ugit checkout masterp and remove slaves from bonded device */
+ /* Clean up and remove members from bonding device */
return remove_slaves_and_stop_bonded_device();
}
diff -Nru dpdk-20.11.9/app/test/test_link_bonding_mode4.c dpdk-20.11.10/app/test/test_link_bonding_mode4.c
--- dpdk-20.11.9/app/test/test_link_bonding_mode4.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test/test_link_bonding_mode4.c 2023-12-12 10:30:50.000000000 +0000
@@ -644,8 +644,7 @@
/* If response didn't send - report failure */
TEST_ASSERT_EQUAL(all_slaves_done, 1, "Bond handshake failed\n");
- /* If flags doesn't match - report failure */
- return all_slaves_done == 1 ? TEST_SUCCESS : TEST_FAILED;
+ return TEST_SUCCESS;
}
#define TEST_LACP_SLAVE_COUT RTE_DIM(test_params.slave_ports)
diff -Nru dpdk-20.11.9/app/test/test_link_bonding_rssconf.c dpdk-20.11.10/app/test/test_link_bonding_rssconf.c
--- dpdk-20.11.9/app/test/test_link_bonding_rssconf.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test/test_link_bonding_rssconf.c 2023-12-12 10:30:50.000000000 +0000
@@ -324,7 +324,7 @@
uint8_t n;
struct slave_conf *port;
uint8_t bond_rss_key[40];
- struct rte_eth_rss_conf bond_rss_conf;
+ struct rte_eth_rss_conf bond_rss_conf = {0};
int retval = 0;
uint64_t rss_hf = 0;
diff -Nru dpdk-20.11.9/app/test-bbdev/test_bbdev.c dpdk-20.11.10/app/test-bbdev/test_bbdev.c
--- dpdk-20.11.9/app/test-bbdev/test_bbdev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test-bbdev/test_bbdev.c 2023-12-12 10:30:50.000000000 +0000
@@ -366,7 +366,8 @@
* - queue should be started if deferred_start ==
*/
ts_params->qconf.deferred_start = 0;
- rte_bbdev_queue_configure(dev_id, queue_id, &ts_params->qconf);
+ TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id, &ts_params->qconf),
+ "Failed test for rte_bbdev_queue_configure");
rte_bbdev_start(dev_id);
TEST_ASSERT_SUCCESS(return_value = rte_bbdev_queue_info_get(dev_id,
diff -Nru dpdk-20.11.9/app/test-bbdev/test-bbdev.py dpdk-20.11.10/app/test-bbdev/test-bbdev.py
--- dpdk-20.11.9/app/test-bbdev/test-bbdev.py 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test-bbdev/test-bbdev.py 2023-12-12 10:30:50.000000000 +0000
@@ -91,21 +91,18 @@
params_string = " ".join(call_params)
print("Executing: {}".format(params_string))
- app_proc = subprocess.Popen(call_params)
- if args.timeout > 0:
- timer = Timer(args.timeout, kill, [app_proc])
- timer.start()
-
try:
- app_proc.communicate()
- except:
- print("Error: failed to execute: {}".format(params_string))
- finally:
- timer.cancel()
-
- if app_proc.returncode != 0:
- exit_status = 1
- print("ERROR TestCase failed. Failed test for vector {}. Return code: {}".format(
- vector, app_proc.returncode))
-
+ output = subprocess.run(call_params, timeout=args.timeout, universal_newlines=True)
+ except subprocess.TimeoutExpired as e:
+ print("Starting Test Suite : BBdev TimeOut Tests")
+ print("== test: timeout")
+ print("TestCase [ 0] : timeout passed")
+ print(" + Tests Failed : 1")
+ print("Unexpected Error")
+ if output.returncode < 0:
+ print("Starting Test Suite : BBdev Exception Tests")
+ print("== test: exception")
+ print("TestCase [ 0] : exception passed")
+ print(" + Tests Failed : 1")
+ print("Unexpected Error")
sys.exit(exit_status)
diff -Nru dpdk-20.11.9/app/test-pipeline/main.c dpdk-20.11.10/app/test-pipeline/main.c
--- dpdk-20.11.9/app/test-pipeline/main.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test-pipeline/main.c 2023-12-12 10:30:50.000000000 +0000
@@ -10,6 +10,7 @@
#include <string.h>
#include <sys/queue.h>
#include <stdarg.h>
+#include <signal.h>
#include <errno.h>
#include <getopt.h>
#include <unistd.h>
@@ -42,6 +43,15 @@
#include "main.h"
+bool force_quit;
+
+static void
+signal_handler(int signum)
+{
+ if (signum == SIGINT || signum == SIGTERM)
+ force_quit = true;
+}
+
int
main(int argc, char **argv)
{
@@ -55,6 +65,10 @@
argc -= ret;
argv += ret;
+ force_quit = false;
+ signal(SIGINT, signal_handler);
+ signal(SIGTERM, signal_handler);
+
/* Parse application arguments (after the EAL ones) */
ret = app_parse_args(argc, argv);
if (ret < 0) {
diff -Nru dpdk-20.11.9/app/test-pipeline/main.h dpdk-20.11.10/app/test-pipeline/main.h
--- dpdk-20.11.9/app/test-pipeline/main.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test-pipeline/main.h 2023-12-12 10:30:50.000000000 +0000
@@ -60,6 +60,8 @@
extern struct app_params app;
+extern bool force_quit;
+
int app_parse_args(int argc, char **argv);
void app_print_usage(void);
void app_init(void);
diff -Nru dpdk-20.11.9/app/test-pipeline/pipeline_acl.c dpdk-20.11.10/app/test-pipeline/pipeline_acl.c
--- dpdk-20.11.9/app/test-pipeline/pipeline_acl.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test-pipeline/pipeline_acl.c 2023-12-12 10:30:50.000000000 +0000
@@ -236,14 +236,16 @@
/* Run-time */
#if APP_FLUSH == 0
- for ( ; ; )
+ while (!force_quit)
rte_pipeline_run(p);
#else
- for (i = 0; ; i++) {
+ i = 0;
+ while (!force_quit) {
rte_pipeline_run(p);
if ((i & APP_FLUSH) == 0)
rte_pipeline_flush(p);
+ i++;
}
#endif
}
diff -Nru dpdk-20.11.9/app/test-pipeline/pipeline_hash.c dpdk-20.11.10/app/test-pipeline/pipeline_hash.c
--- dpdk-20.11.9/app/test-pipeline/pipeline_hash.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test-pipeline/pipeline_hash.c 2023-12-12 10:30:50.000000000 +0000
@@ -366,14 +366,16 @@
/* Run-time */
#if APP_FLUSH == 0
- for ( ; ; )
+ while (!force_quit)
rte_pipeline_run(p);
#else
- for (i = 0; ; i++) {
+ i = 0;
+ while (!force_quit) {
rte_pipeline_run(p);
if ((i & APP_FLUSH) == 0)
rte_pipeline_flush(p);
+ i++;
}
#endif
}
@@ -411,59 +413,61 @@
RTE_LOG(INFO, USER1, "Core %u is doing RX (with meta-data)\n",
rte_lcore_id());
- for (i = 0; ; i = ((i + 1) & (app.n_ports - 1))) {
- uint16_t n_mbufs;
+ while (!force_quit) {
+ for (i = 0; i < app.n_ports; i++) {
+ uint16_t n_mbufs;
+
+ n_mbufs = rte_eth_rx_burst(
+ app.ports[i],
+ 0,
+ app.mbuf_rx.array,
+ app.burst_size_rx_read);
- n_mbufs = rte_eth_rx_burst(
- app.ports[i],
- 0,
- app.mbuf_rx.array,
- app.burst_size_rx_read);
-
- if (n_mbufs == 0)
- continue;
-
- for (j = 0; j < n_mbufs; j++) {
- struct rte_mbuf *m;
- uint8_t *m_data, *key;
- struct rte_ipv4_hdr *ip_hdr;
- struct rte_ipv6_hdr *ipv6_hdr;
- uint32_t ip_dst;
- uint8_t *ipv6_dst;
- uint32_t *signature, *k32;
-
- m = app.mbuf_rx.array[j];
- m_data = rte_pktmbuf_mtod(m, uint8_t *);
- signature = RTE_MBUF_METADATA_UINT32_PTR(m,
- APP_METADATA_OFFSET(0));
- key = RTE_MBUF_METADATA_UINT8_PTR(m,
- APP_METADATA_OFFSET(32));
-
- if (RTE_ETH_IS_IPV4_HDR(m->packet_type)) {
- ip_hdr = (struct rte_ipv4_hdr *)
- &m_data[sizeof(struct rte_ether_hdr)];
- ip_dst = ip_hdr->dst_addr;
-
- k32 = (uint32_t *) key;
- k32[0] = ip_dst & 0xFFFFFF00;
- } else if (RTE_ETH_IS_IPV6_HDR(m->packet_type)) {
- ipv6_hdr = (struct rte_ipv6_hdr *)
- &m_data[sizeof(struct rte_ether_hdr)];
- ipv6_dst = ipv6_hdr->dst_addr;
-
- memcpy(key, ipv6_dst, 16);
- } else
+ if (n_mbufs == 0)
continue;
- *signature = test_hash(key, NULL, 0, 0);
+ for (j = 0; j < n_mbufs; j++) {
+ struct rte_mbuf *m;
+ uint8_t *m_data, *key;
+ struct rte_ipv4_hdr *ip_hdr;
+ struct rte_ipv6_hdr *ipv6_hdr;
+ uint32_t ip_dst;
+ uint8_t *ipv6_dst;
+ uint32_t *signature, *k32;
+
+ m = app.mbuf_rx.array[j];
+ m_data = rte_pktmbuf_mtod(m, uint8_t *);
+ signature = RTE_MBUF_METADATA_UINT32_PTR(m,
+ APP_METADATA_OFFSET(0));
+ key = RTE_MBUF_METADATA_UINT8_PTR(m,
+ APP_METADATA_OFFSET(32));
+
+ if (RTE_ETH_IS_IPV4_HDR(m->packet_type)) {
+ ip_hdr = (struct rte_ipv4_hdr *)
+ &m_data[sizeof(struct rte_ether_hdr)];
+ ip_dst = ip_hdr->dst_addr;
+
+ k32 = (uint32_t *) key;
+ k32[0] = ip_dst & 0xFFFFFF00;
+ } else if (RTE_ETH_IS_IPV6_HDR(m->packet_type)) {
+ ipv6_hdr = (struct rte_ipv6_hdr *)
+ &m_data[sizeof(struct rte_ether_hdr)];
+ ipv6_dst = ipv6_hdr->dst_addr;
+
+ memcpy(key, ipv6_dst, 16);
+ } else
+ continue;
+
+ *signature = test_hash(key, NULL, 0, 0);
+ }
+
+ do {
+ ret = rte_ring_sp_enqueue_bulk(
+ app.rings_rx[i],
+ (void **) app.mbuf_rx.array,
+ n_mbufs,
+ NULL);
+ } while (ret == 0 && !force_quit);
}
-
- do {
- ret = rte_ring_sp_enqueue_bulk(
- app.rings_rx[i],
- (void **) app.mbuf_rx.array,
- n_mbufs,
- NULL);
- } while (ret == 0);
}
}
diff -Nru dpdk-20.11.9/app/test-pipeline/pipeline_lpm.c dpdk-20.11.10/app/test-pipeline/pipeline_lpm.c
--- dpdk-20.11.9/app/test-pipeline/pipeline_lpm.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test-pipeline/pipeline_lpm.c 2023-12-12 10:30:50.000000000 +0000
@@ -160,14 +160,16 @@
/* Run-time */
#if APP_FLUSH == 0
- for ( ; ; )
+ while (!force_quit)
rte_pipeline_run(p);
#else
- for (i = 0; ; i++) {
+ i = 0;
+ while (!force_quit) {
rte_pipeline_run(p);
if ((i & APP_FLUSH) == 0)
rte_pipeline_flush(p);
+ i++;
}
#endif
}
diff -Nru dpdk-20.11.9/app/test-pipeline/pipeline_lpm_ipv6.c dpdk-20.11.10/app/test-pipeline/pipeline_lpm_ipv6.c
--- dpdk-20.11.9/app/test-pipeline/pipeline_lpm_ipv6.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test-pipeline/pipeline_lpm_ipv6.c 2023-12-12 10:30:50.000000000 +0000
@@ -158,14 +158,16 @@
/* Run-time */
#if APP_FLUSH == 0
- for ( ; ; )
+ while (!force_quit)
rte_pipeline_run(p);
#else
- for (i = 0; ; i++) {
+ i = 0;
+ while (!force_quit) {
rte_pipeline_run(p);
if ((i & APP_FLUSH) == 0)
rte_pipeline_flush(p);
+ i++;
}
#endif
}
diff -Nru dpdk-20.11.9/app/test-pipeline/pipeline_stub.c dpdk-20.11.10/app/test-pipeline/pipeline_stub.c
--- dpdk-20.11.9/app/test-pipeline/pipeline_stub.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test-pipeline/pipeline_stub.c 2023-12-12 10:30:50.000000000 +0000
@@ -122,14 +122,16 @@
/* Run-time */
#if APP_FLUSH == 0
- for ( ; ; )
+ while (!force_quit)
rte_pipeline_run(p);
#else
- for (i = 0; ; i++) {
+ i = 0;
+ while (!force_quit) {
rte_pipeline_run(p);
if ((i & APP_FLUSH) == 0)
rte_pipeline_flush(p);
+ i++;
}
#endif
}
diff -Nru dpdk-20.11.9/app/test-pipeline/runtime.c dpdk-20.11.10/app/test-pipeline/runtime.c
--- dpdk-20.11.9/app/test-pipeline/runtime.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test-pipeline/runtime.c 2023-12-12 10:30:50.000000000 +0000
@@ -49,24 +49,26 @@
RTE_LOG(INFO, USER1, "Core %u is doing RX\n", rte_lcore_id());
- for (i = 0; ; i = ((i + 1) & (app.n_ports - 1))) {
- uint16_t n_mbufs;
-
- n_mbufs = rte_eth_rx_burst(
- app.ports[i],
- 0,
- app.mbuf_rx.array,
- app.burst_size_rx_read);
-
- if (n_mbufs == 0)
- continue;
-
- do {
- ret = rte_ring_sp_enqueue_bulk(
- app.rings_rx[i],
- (void **) app.mbuf_rx.array,
- n_mbufs, NULL);
- } while (ret == 0);
+ while (!force_quit) {
+ for (i = 0; i < app.n_ports; i++) {
+ uint16_t n_mbufs;
+
+ n_mbufs = rte_eth_rx_burst(
+ app.ports[i],
+ 0,
+ app.mbuf_rx.array,
+ app.burst_size_rx_read);
+
+ if (n_mbufs == 0)
+ continue;
+
+ do {
+ ret = rte_ring_sp_enqueue_bulk(
+ app.rings_rx[i],
+ (void **) app.mbuf_rx.array,
+ n_mbufs, NULL);
+ } while (ret == 0 && !force_quit);
+ }
}
}
@@ -83,25 +85,27 @@
if (worker_mbuf == NULL)
rte_panic("Worker thread: cannot allocate buffer space\n");
- for (i = 0; ; i = ((i + 1) & (app.n_ports - 1))) {
- int ret;
+ while (!force_quit) {
+ for (i = 0; i < app.n_ports; i++) {
+ int ret;
- ret = rte_ring_sc_dequeue_bulk(
- app.rings_rx[i],
- (void **) worker_mbuf->array,
- app.burst_size_worker_read,
- NULL);
-
- if (ret == 0)
- continue;
-
- do {
- ret = rte_ring_sp_enqueue_bulk(
- app.rings_tx[i ^ 1],
+ ret = rte_ring_sc_dequeue_bulk(
+ app.rings_rx[i],
(void **) worker_mbuf->array,
- app.burst_size_worker_write,
+ app.burst_size_worker_read,
NULL);
- } while (ret == 0);
+
+ if (ret == 0)
+ continue;
+
+ do {
+ ret = rte_ring_sp_enqueue_bulk(
+ app.rings_tx[i ^ 1],
+ (void **) worker_mbuf->array,
+ app.burst_size_worker_write,
+ NULL);
+ } while (ret == 0 && !force_quit);
+ }
}
}
@@ -111,45 +115,47 @@
RTE_LOG(INFO, USER1, "Core %u is doing TX\n", rte_lcore_id());
- for (i = 0; ; i = ((i + 1) & (app.n_ports - 1))) {
- uint16_t n_mbufs, n_pkts;
- int ret;
-
- n_mbufs = app.mbuf_tx[i].n_mbufs;
-
- ret = rte_ring_sc_dequeue_bulk(
- app.rings_tx[i],
- (void **) &app.mbuf_tx[i].array[n_mbufs],
- app.burst_size_tx_read,
- NULL);
-
- if (ret == 0)
- continue;
-
- n_mbufs += app.burst_size_tx_read;
-
- if (n_mbufs < app.burst_size_tx_write) {
- app.mbuf_tx[i].n_mbufs = n_mbufs;
- continue;
- }
+ while (!force_quit) {
+ for (i = 0; i < app.n_ports; i++) {
+ uint16_t n_mbufs, n_pkts;
+ int ret;
+
+ n_mbufs = app.mbuf_tx[i].n_mbufs;
+
+ ret = rte_ring_sc_dequeue_bulk(
+ app.rings_tx[i],
+ (void **) &app.mbuf_tx[i].array[n_mbufs],
+ app.burst_size_tx_read,
+ NULL);
- n_pkts = rte_eth_tx_burst(
- app.ports[i],
- 0,
- app.mbuf_tx[i].array,
- n_mbufs);
+ if (ret == 0)
+ continue;
- if (n_pkts < n_mbufs) {
- uint16_t k;
+ n_mbufs += app.burst_size_tx_read;
- for (k = n_pkts; k < n_mbufs; k++) {
- struct rte_mbuf *pkt_to_free;
+ if (n_mbufs < app.burst_size_tx_write) {
+ app.mbuf_tx[i].n_mbufs = n_mbufs;
+ continue;
+ }
- pkt_to_free = app.mbuf_tx[i].array[k];
- rte_pktmbuf_free(pkt_to_free);
+ n_pkts = rte_eth_tx_burst(
+ app.ports[i],
+ 0,
+ app.mbuf_tx[i].array,
+ n_mbufs);
+
+ if (n_pkts < n_mbufs) {
+ uint16_t k;
+
+ for (k = n_pkts; k < n_mbufs; k++) {
+ struct rte_mbuf *pkt_to_free;
+
+ pkt_to_free = app.mbuf_tx[i].array[k];
+ rte_pktmbuf_free(pkt_to_free);
+ }
}
- }
- app.mbuf_tx[i].n_mbufs = 0;
+ app.mbuf_tx[i].n_mbufs = 0;
+ }
}
}
diff -Nru dpdk-20.11.9/app/test-pmd/cmdline.c dpdk-20.11.10/app/test-pmd/cmdline.c
--- dpdk-20.11.9/app/test-pmd/cmdline.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test-pmd/cmdline.c 2023-12-12 10:30:50.000000000 +0000
@@ -489,6 +489,12 @@
"mac_addr add port (port_id) vf (vf_id) (mac_address)\n"
" Add a MAC address for a VF on the port.\n\n"
+ "mcast_addr add (port_id) (mcast_addr)\n"
+ " Add a multicast MAC addresses on port_id.\n\n"
+
+ "mcast_addr remove (port_id) (mcast_addr)\n"
+ " Remove a multicast MAC address from port_id.\n\n"
+
"set vf mac addr (port_id) (vf_id) (XX:XX:XX:XX:XX:XX)\n"
" Set the MAC address for a VF from the PF.\n\n"
@@ -4875,18 +4881,6 @@
ports[res->port_id].tso_segsz);
}
cmd_config_queue_tx_offloads(&ports[res->port_id]);
-
- /* display warnings if configuration is not supported by the NIC */
- ret = eth_dev_info_get_print_err(res->port_id, &dev_info);
- if (ret != 0)
- return;
-
- if ((ports[res->port_id].tso_segsz != 0) &&
- (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_TCP_TSO) == 0) {
- printf("Warning: TSO enabled but not "
- "supported by port %d\n", res->port_id);
- }
-
cmd_reconfig_device_queue(res->port_id, 1, 1);
}
@@ -4944,33 +4938,27 @@
portid_t port_id;
};
-static struct rte_eth_dev_info
-check_tunnel_tso_nic_support(portid_t port_id)
+static void
+check_tunnel_tso_nic_support(portid_t port_id, uint64_t tx_offload_capa)
{
- struct rte_eth_dev_info dev_info;
-
- if (eth_dev_info_get_print_err(port_id, &dev_info) != 0)
- return dev_info;
-
- if (!(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_VXLAN_TNL_TSO))
- printf("Warning: VXLAN TUNNEL TSO not supported therefore "
- "not enabled for port %d\n", port_id);
- if (!(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_GRE_TNL_TSO))
- printf("Warning: GRE TUNNEL TSO not supported therefore "
- "not enabled for port %d\n", port_id);
- if (!(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_IPIP_TNL_TSO))
- printf("Warning: IPIP TUNNEL TSO not supported therefore "
- "not enabled for port %d\n", port_id);
- if (!(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_GENEVE_TNL_TSO))
- printf("Warning: GENEVE TUNNEL TSO not supported therefore "
- "not enabled for port %d\n", port_id);
- if (!(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_IP_TNL_TSO))
- printf("Warning: IP TUNNEL TSO not supported therefore "
- "not enabled for port %d\n", port_id);
- if (!(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_UDP_TNL_TSO))
- printf("Warning: UDP TUNNEL TSO not supported therefore "
- "not enabled for port %d\n", port_id);
- return dev_info;
+ if (!(tx_offload_capa & DEV_TX_OFFLOAD_VXLAN_TNL_TSO))
+ printf("Warning: VXLAN TUNNEL TSO not supported therefore not enabled for port %d\n",
+ port_id);
+ if (!(tx_offload_capa & DEV_TX_OFFLOAD_GRE_TNL_TSO))
+ printf("Warning: GRE TUNNEL TSO not supported therefore not enabled for port %d\n",
+ port_id);
+ if (!(tx_offload_capa & DEV_TX_OFFLOAD_IPIP_TNL_TSO))
+ printf("Warning: IPIP TUNNEL TSO not supported therefore not enabled for port %d\n",
+ port_id);
+ if (!(tx_offload_capa & DEV_TX_OFFLOAD_GENEVE_TNL_TSO))
+ printf("Warning: GENEVE TUNNEL TSO not supported therefore not enabled for port %d\n",
+ port_id);
+ if (!(tx_offload_capa & DEV_TX_OFFLOAD_IP_TNL_TSO))
+ printf("Warning: IP TUNNEL TSO not supported therefore not enabled for port %d\n",
+ port_id);
+ if (!(tx_offload_capa & DEV_TX_OFFLOAD_UDP_TNL_TSO))
+ printf("Warning: UDP TUNNEL TSO not supported therefore not enabled for port %d\n",
+ port_id);
}
static void
@@ -4980,6 +4968,13 @@
{
struct cmd_tunnel_tso_set_result *res = parsed_result;
struct rte_eth_dev_info dev_info;
+ uint64_t all_tunnel_tso = DEV_TX_OFFLOAD_VXLAN_TNL_TSO |
+ DEV_TX_OFFLOAD_GRE_TNL_TSO |
+ DEV_TX_OFFLOAD_IPIP_TNL_TSO |
+ DEV_TX_OFFLOAD_GENEVE_TNL_TSO |
+ DEV_TX_OFFLOAD_IP_TNL_TSO |
+ DEV_TX_OFFLOAD_UDP_TNL_TSO;
+ int ret;
if (port_id_is_invalid(res->port_id, ENABLED_WARN))
return;
@@ -4991,28 +4986,19 @@
if (!strcmp(res->mode, "set"))
ports[res->port_id].tunnel_tso_segsz = res->tso_segsz;
- dev_info = check_tunnel_tso_nic_support(res->port_id);
if (ports[res->port_id].tunnel_tso_segsz == 0) {
- ports[res->port_id].dev_conf.txmode.offloads &=
- ~(DEV_TX_OFFLOAD_VXLAN_TNL_TSO |
- DEV_TX_OFFLOAD_GRE_TNL_TSO |
- DEV_TX_OFFLOAD_IPIP_TNL_TSO |
- DEV_TX_OFFLOAD_GENEVE_TNL_TSO |
- DEV_TX_OFFLOAD_IP_TNL_TSO |
- DEV_TX_OFFLOAD_UDP_TNL_TSO);
+ ports[res->port_id].dev_conf.txmode.offloads &= ~all_tunnel_tso;
printf("TSO for tunneled packets is disabled\n");
} else {
- uint64_t tso_offloads = (DEV_TX_OFFLOAD_VXLAN_TNL_TSO |
- DEV_TX_OFFLOAD_GRE_TNL_TSO |
- DEV_TX_OFFLOAD_IPIP_TNL_TSO |
- DEV_TX_OFFLOAD_GENEVE_TNL_TSO |
- DEV_TX_OFFLOAD_IP_TNL_TSO |
- DEV_TX_OFFLOAD_UDP_TNL_TSO);
+ ret = eth_dev_info_get_print_err(res->port_id, &dev_info);
+ if (ret != 0)
+ return;
- ports[res->port_id].dev_conf.txmode.offloads |=
- (tso_offloads & dev_info.tx_offload_capa);
- printf("TSO segment size for tunneled packets is %d\n",
- ports[res->port_id].tunnel_tso_segsz);
+ if ((all_tunnel_tso & dev_info.tx_offload_capa) == 0) {
+ fprintf(stderr, "Error: port=%u don't support tunnel TSO offloads.\n",
+ res->port_id);
+ return;
+ }
/* Below conditions are needed to make it work:
* (1) tunnel TSO is supported by the NIC;
@@ -5025,14 +5011,23 @@
* is not necessary for IPv6 tunneled pkts because there's no
* checksum in IP header anymore.
*/
-
- if (!ports[res->port_id].parse_tunnel)
- printf("Warning: csum parse_tunnel must be set "
- "so that tunneled packets are recognized\n");
+ if (!ports[res->port_id].parse_tunnel) {
+ fprintf(stderr,
+ "Error: csum parse_tunnel must be set so that tunneled packets are recognized\n");
+ return;
+ }
if (!(ports[res->port_id].dev_conf.txmode.offloads &
- DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM))
- printf("Warning: csum set outer-ip must be set to hw "
- "if outer L3 is IPv4; not necessary for IPv6\n");
+ DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM)) {
+ fprintf(stderr,
+ "Error: csum set outer-ip must be set to hw if outer L3 is IPv4; not necessary for IPv6\n");
+ return;
+ }
+
+ check_tunnel_tso_nic_support(res->port_id, dev_info.tx_offload_capa);
+ ports[res->port_id].dev_conf.txmode.offloads |=
+ (all_tunnel_tso & dev_info.tx_offload_capa);
+ printf("TSO segment size for tunneled packets is %d\n",
+ ports[res->port_id].tunnel_tso_segsz);
}
cmd_config_queue_tx_offloads(&ports[res->port_id]);
diff -Nru dpdk-20.11.9/app/test-pmd/testpmd.c dpdk-20.11.10/app/test-pmd/testpmd.c
--- dpdk-20.11.9/app/test-pmd/testpmd.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/app/test-pmd/testpmd.c 2023-12-12 10:30:50.000000000 +0000
@@ -10,7 +10,6 @@
#include <time.h>
#include <fcntl.h>
#include <sys/mman.h>
-#include <sys/select.h>
#include <sys/types.h>
#include <errno.h>
#include <stdbool.h>
@@ -4059,25 +4058,17 @@
}
} else {
char c;
- fd_set fds;
printf("Press enter to exit\n");
-
- FD_ZERO(&fds);
- FD_SET(0, &fds);
-
- /* wait for signal or enter */
- ret = select(1, &fds, NULL, NULL, NULL);
- if (ret < 0 && errno != EINTR)
- rte_exit(EXIT_FAILURE,
- "Select failed: %s\n",
- strerror(errno));
-
- /* if got enter then consume it */
- if (ret == 1 && read(0, &c, 1) < 0)
- rte_exit(EXIT_FAILURE,
- "Read failed: %s\n",
+ while (f_quit == 0) {
+ /* end-of-file or any character exits loop */
+ if (read(0, &c, 1) >= 0)
+ break;
+ if (errno == EINTR)
+ continue;
+ rte_exit(EXIT_FAILURE, "Read failed: %s\n",
strerror(errno));
+ }
}
}
diff -Nru dpdk-20.11.9/debian/changelog dpdk-20.11.10/debian/changelog
--- dpdk-20.11.9/debian/changelog 2023-09-21 12:50:42.000000000 +0100
+++ dpdk-20.11.10/debian/changelog 2023-12-12 12:00:53.000000000 +0000
@@ -1,3 +1,10 @@
+dpdk (20.11.10-1~deb11u1) bullseye; urgency=medium
+
+ * New upstream release 20.11.10; for a full list of changes see:
+ http://doc.dpdk.org/guides-20.11/rel_notes/release_20_11.html
+
+ -- Luca Boccassi <bluca@debian.org> Tue, 12 Dec 2023 12:00:53 +0000
+
dpdk (20.11.9-1~deb11u1) bullseye; urgency=medium
* New upstream release 20.11.9; for a full list of changes see:
diff -Nru dpdk-20.11.9/doc/guides/nics/hns3.rst dpdk-20.11.10/doc/guides/nics/hns3.rst
--- dpdk-20.11.9/doc/guides/nics/hns3.rst 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/doc/guides/nics/hns3.rst 2023-12-12 10:30:50.000000000 +0000
@@ -30,7 +30,6 @@
- DCB
- Scattered and gather for TX and RX
- Vector Poll mode driver
-- Dump register
- SR-IOV VF
- Multi-process
- MAC/VLAN filter
diff -Nru dpdk-20.11.9/doc/guides/nics/i40e.rst dpdk-20.11.10/doc/guides/nics/i40e.rst
--- dpdk-20.11.9/doc/guides/nics/i40e.rst 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/doc/guides/nics/i40e.rst 2023-12-12 10:30:50.000000000 +0000
@@ -75,13 +75,16 @@
* In all cases Intel recommends using Intel Ethernet Optics; other modules
may function but are not validated by Intel. Contact Intel for supported media types.
-Recommended Matching List
--------------------------
+Kernel driver and Firmware Matching List
+----------------------------------------
-It is highly recommended to upgrade the i40e kernel driver and firmware to
-avoid the compatibility issues with i40e PMD. Here is the suggested matching
-list which has been tested and verified. The detailed information can refer
-to chapter Tested Platforms/Tested NICs in release notes.
+It is highly recommended to upgrade the i40e kernel driver and firmware
+to avoid the compatibility issues with i40e PMD.
+The table below shows a summary of the DPDK versions
+with corresponding out-of-tree Linux kernel drivers and firmware.
+The full list of in-tree and out-of-tree Linux kernel drivers from kernel.org
+and Linux distributions that were tested and verified
+are listed in the Tested Platforms section of the Release Notes for each release.
For X710/XL710/XXV710,
diff -Nru dpdk-20.11.9/doc/guides/nics/ice.rst dpdk-20.11.10/doc/guides/nics/ice.rst
--- dpdk-20.11.9/doc/guides/nics/ice.rst 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/doc/guides/nics/ice.rst 2023-12-12 10:30:50.000000000 +0000
@@ -26,13 +26,16 @@
Dynamic Device Personalization (DDP) Package <https://cdrdv2.intel.com/v1/dl/getContent/618651>`_.
-Recommended Matching List
--------------------------
+Kernel driver, DDP and Firmware Matching List
+---------------------------------------------
It is highly recommended to upgrade the ice kernel driver, firmware and DDP package
to avoid the compatibility issues with ice PMD.
-Here is the suggested matching list which has been tested and verified.
-The detailed information can refer to chapter Tested Platforms/Tested NICs in release notes.
+The table below shows a summary of the DPDK versions
+with corresponding out-of-tree Linux kernel drivers, DDP package and firmware.
+The full list of in-tree and out-of-tree Linux kernel drivers from kernel.org
+and Linux distributions that were tested and verified
+are listed in the Tested Platforms section of the Release Notes for each release.
+-----------+---------------+-----------------+-----------+--------------+-----------+
| DPDK | Kernel Driver | OS Default DDP | COMMS DDP | Wireless DDP | Firmware |
diff -Nru dpdk-20.11.9/doc/guides/nics/ixgbe.rst dpdk-20.11.10/doc/guides/nics/ixgbe.rst
--- dpdk-20.11.9/doc/guides/nics/ixgbe.rst 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/doc/guides/nics/ixgbe.rst 2023-12-12 10:30:50.000000000 +0000
@@ -14,8 +14,6 @@
There is no change to PMD API. The RX/TX handler are the only two entries for vPMD packet I/O.
They are transparently registered at runtime RX/TX execution if all condition checks pass.
-1. To date, only an SSE version of IX GBE vPMD is available.
-
Some constraints apply as pre-conditions for specific optimizations on bulk packet transfers.
The following sections explain RX and TX constraints in the vPMD.
diff -Nru dpdk-20.11.9/doc/guides/nics/virtio.rst dpdk-20.11.10/doc/guides/nics/virtio.rst
--- dpdk-20.11.9/doc/guides/nics/virtio.rst 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/doc/guides/nics/virtio.rst 2023-12-12 10:30:50.000000000 +0000
@@ -301,6 +301,7 @@
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To support Rx interrupts,
+
#. Check if guest kernel supports VFIO-NOIOMMU:
Linux started to support VFIO-NOIOMMU since 4.8.0. Make sure the guest
@@ -463,12 +464,16 @@
#. Split virtqueue mergeable path: If Rx mergeable is negotiated, in-order feature is
not negotiated, this path will be selected.
+
#. Split virtqueue non-mergeable path: If Rx mergeable and in-order feature are not
negotiated, also Rx offload(s) are requested, this path will be selected.
+
#. Split virtqueue in-order mergeable path: If Rx mergeable and in-order feature are
both negotiated, this path will be selected.
+
#. Split virtqueue in-order non-mergeable path: If in-order feature is negotiated and
Rx mergeable is not negotiated, this path will be selected.
+
#. Split virtqueue vectorized Rx path: If Rx mergeable is disabled and no Rx offload
requested, this path will be selected.
@@ -477,16 +482,21 @@
#. Packed virtqueue mergeable path: If Rx mergeable is negotiated, in-order feature
is not negotiated, this path will be selected.
+
#. Packed virtqueue non-mergeable path: If Rx mergeable and in-order feature are not
negotiated, this path will be selected.
+
#. Packed virtqueue in-order mergeable path: If in-order and Rx mergeable feature are
both negotiated, this path will be selected.
+
#. Packed virtqueue in-order non-mergeable path: If in-order feature is negotiated and
Rx mergeable is not negotiated, this path will be selected.
+
#. Packed virtqueue vectorized Rx path: If building and running environment support
AVX512 && in-order feature is negotiated && Rx mergeable is not negotiated &&
TCP_LRO Rx offloading is disabled && vectorized option enabled,
this path will be selected.
+
#. Packed virtqueue vectorized Tx path: If building and running environment support
AVX512 && in-order feature is negotiated && vectorized option enabled,
this path will be selected.
@@ -564,5 +574,7 @@
root cause faster.
#. Run vhost/virtio test case;
+
#. Run "perf top" and check virtio Rx/Tx callback names;
+
#. Identify which virtio path is selected refer to above table.
diff -Nru dpdk-20.11.9/doc/guides/platform/octeontx2.rst dpdk-20.11.10/doc/guides/platform/octeontx2.rst
--- dpdk-20.11.9/doc/guides/platform/octeontx2.rst 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/doc/guides/platform/octeontx2.rst 2023-12-12 10:30:50.000000000 +0000
@@ -104,7 +104,9 @@
Typical application usage models are,
#. Communication between the Linux kernel and DPDK application.
+
#. Exception path to Linux kernel from DPDK application as SW ``KNI`` replacement.
+
#. Communication between two different DPDK applications.
SDP interface
@@ -123,6 +125,7 @@
The primary use case for SDP is to enable the smart NIC use case. Typical usage models are,
#. Communication channel between remote host and OCTEON TX2 SoC over PCIe.
+
#. Transfer packets received from network interface to remote host over PCIe and
vice-versa.
diff -Nru dpdk-20.11.9/doc/guides/prog_guide/generic_segmentation_offload_lib.rst dpdk-20.11.10/doc/guides/prog_guide/generic_segmentation_offload_lib.rst
--- dpdk-20.11.9/doc/guides/prog_guide/generic_segmentation_offload_lib.rst 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/doc/guides/prog_guide/generic_segmentation_offload_lib.rst 2023-12-12 10:30:50.000000000 +0000
@@ -204,7 +204,7 @@
- a flag, that indicates whether the IPv4 headers of output segments should
contain fixed or incremental ID values.
-2. Set the appropriate ol_flags in the mbuf.
+#. Set the appropriate ol_flags in the mbuf.
- The GSO library use the value of an mbuf's ``ol_flags`` attribute to
determine how a packet should be segmented. It is the application's
diff -Nru dpdk-20.11.9/doc/guides/prog_guide/rte_security.rst dpdk-20.11.10/doc/guides/prog_guide/rte_security.rst
--- dpdk-20.11.9/doc/guides/prog_guide/rte_security.rst 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/doc/guides/prog_guide/rte_security.rst 2023-12-12 10:30:50.000000000 +0000
@@ -583,68 +583,27 @@
Security Session configuration structure is defined as ``rte_security_session_conf``
-.. code-block:: c
-
- struct rte_security_session_conf {
- enum rte_security_session_action_type action_type;
- /**< Type of action to be performed on the session */
- enum rte_security_session_protocol protocol;
- /**< Security protocol to be configured */
- union {
- struct rte_security_ipsec_xform ipsec;
- struct rte_security_macsec_xform macsec;
- struct rte_security_pdcp_xform pdcp;
- struct rte_security_docsis_xform docsis;
- };
- /**< Configuration parameters for security session */
- struct rte_crypto_sym_xform *crypto_xform;
- /**< Security Session Crypto Transformations */
- void *userdata;
- /**< Application specific userdata to be saved with session */
- };
+.. literalinclude:: ../../../lib/librte_security/rte_security.h
+ :language: c
+ :start-after: Structure rte_security_session_conf 8<
+ :end-before: >8 End of structure rte_security_session_conf.
The configuration structure reuses the ``rte_crypto_sym_xform`` struct for crypto related
configuration. The ``rte_security_session_action_type`` struct is used to specify whether the
session is configured for Lookaside Protocol offload or Inline Crypto or Inline Protocol
Offload.
-.. code-block:: c
-
- enum rte_security_session_action_type {
- RTE_SECURITY_ACTION_TYPE_NONE,
- /**< No security actions */
- RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO,
- /**< Crypto processing for security protocol is processed inline
- * during transmission
- */
- RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL,
- /**< All security protocol processing is performed inline during
- * transmission
- */
- RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
- /**< All security protocol processing including crypto is performed
- * on a lookaside accelerator
- */
- RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO
- /**< Similar to ACTION_TYPE_NONE but crypto processing for security
- * protocol is processed synchronously by a CPU.
- */
- };
+.. literalinclude:: ../../../lib/librte_security/rte_security.h
+ :language: c
+ :start-after: Enumeration of rte_security_session_action_type 8<
+ :end-before: >8 End enumeration of rte_security_session_action_type.
The ``rte_security_session_protocol`` is defined as
-.. code-block:: c
-
- enum rte_security_session_protocol {
- RTE_SECURITY_PROTOCOL_IPSEC = 1,
- /**< IPsec Protocol */
- RTE_SECURITY_PROTOCOL_MACSEC,
- /**< MACSec Protocol */
- RTE_SECURITY_PROTOCOL_PDCP,
- /**< PDCP Protocol */
- RTE_SECURITY_PROTOCOL_DOCSIS,
- /**< DOCSIS Protocol */
- };
+.. literalinclude:: ../../../lib/librte_security/rte_security.h
+ :language: c
+ :start-after: Enumeration of rte_security_session_protocol 8<
+ :end-before: >8 End enumeration of rte_security_session_protocol.
Currently the library defines configuration parameters for IPsec and PDCP only.
For other protocols like MACSec, structures and enums are defined as place holders
diff -Nru dpdk-20.11.9/doc/guides/rel_notes/release_20_11.rst dpdk-20.11.10/doc/guides/rel_notes/release_20_11.rst
--- dpdk-20.11.9/doc/guides/rel_notes/release_20_11.rst 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/doc/guides/rel_notes/release_20_11.rst 2023-12-12 10:30:50.000000000 +0000
@@ -4384,3 +4384,224 @@
* testpmd
* With the MLX PMD, multi-Packet Rx queue parameters are incorrectly adjusted
and not applied properly. See: https://bugs.dpdk.org/show_bug.cgi?id=1274
+
+20.11.10 Release Notes
+----------------------
+
+
+20.11.10 Fixes
+~~~~~~~~~~~~~~
+
+* app/pipeline: add sigint handler
+* app/procinfo: adjust format of RSS info
+* app/procinfo: fix RSS info
+* app/procinfo: remove unnecessary rte_malloc
+* app/test: fix reference to master in bonding test
+* app/testpmd: add explicit check for tunnel TSO
+* app/testpmd: fix early exit from signal
+* app/testpmd: fix help string
+* app/testpmd: fix tunnel TSO capability check
+* app/testpmd: fix tunnel TSO configuration
+* app/testpmd: remove useless check in TSO command
+* bus/dpaa: fix build with asserts for GCC 13
+* bus/pci: fix device ID log
+* common/mlx5: fix controller index parsing
+* cryptodev: add missing doc for security context
+* crypto/nitrox: fix panic with high number of segments
+* doc: fix some ordered lists
+* doc: remove number of commands in vDPA guide
+* doc: remove restriction on ixgbe vector support
+* doc: replace code blocks with includes in security guide
+* doc: update features in hns3 guide
+* doc: update versions recommendations for i40e and ice
+* drivers/crypto: modify max IPsec-mb version supported
+* eal/windows: fix build with recent MinGW
+* ethdev: fix 32-bit build with GCC 13
+* ethdev: fix ESP packet type description
+* ethdev: fix function name in comment
+* eventdev: fix device pointer for vdev-based devices
+* eventdev: fix missing driver names in info struct
+* event/dlb2: fix disable PASID
+* event/dlb2: fix missing queue ordering capability flag
+* event/dlb2: fix name check in self-test
+* event/sw: fix ordering corruption with op release
+* event/sw: remove obsolete comment
+* examples/ethtool: fix pause configuration
+* examples/ipsec-secgw: fix partial overflow
+* fib6: fix adding default route as first route
+* fib: fix adding default route overwriting entire table
+* hash: align SSE lookup to scalar implementation
+* malloc: remove return from void functions
+* mempool: clarify enqueue/dequeue ops documentation
+* mempool: fix default ops for an empty mempool
+* mempool: fix get function documentation
+* meter: fix RFC4115 trTCM API Doxygen
+* net/bonding: fix header for C++
+* net/bonding: fix link status callback stop
+* net/bonding: fix possible overrun
+* net/enic: avoid extra unlock in MTU set
+* net/hns3: fix crash for NEON and SVE
+* net/hns3: fix double stats for IMP and global reset
+* net/hns3: fix error code for multicast resource
+* net/hns3: fix flushing multicast MAC address
+* net/hns3: fix LRO offload to report
+* net/hns3: fix mailbox sync
+* net/hns3: fix order in NEON Rx
+* net/hns3: fix setting DCB capability
+* net/hns3: fix some error logs
+* net/hns3: fix some return values
+* net/hns3: fix unchecked Rx free threshold
+* net/hns3: fix uninitialized hash algo value
+* net/hns3: fix VF default MAC modified when set failed
+* net/hns3: keep set/get algo key functions local
+* net/hns3: remove reset log in secondary
+* net/i40e: fix buffer leak on Rx reconfiguration
+* net/i40e: fix FDIR queue receives broadcast packets
+* net/iavf: fix port stats clearing
+* net/iavf: fix TSO with big segments
+* net/iavf: fix Tx preparation
+* net/iavf: fix VLAN offload strip flag
+* net/iavf: remove log from Tx prepare function
+* net/ice: fix DCF port statistics
+* net/ice: fix initial link status
+* net/ice: fix L1 check interval
+* net/ice: fix TSO with big segments
+* net/ice: fix Tx preparation
+* net/ice: remove log from Tx prepare function
+* net/mlx5: fix hairpin queue states
+* net/mlx5: fix hairpin queue unbind
+* net/mlx5: fix leak in sysfs port name translation
+* net/mlx5: fix MPRQ stride size check
+* net/mlx5: fix multi-segment Tx inline data length
+* net/mlx5: zero UDP checksum over IPv4 in encapsulation
+* net/netvsc: increase VSP response timeout to 60 seconds
+* net/nfp: fix DMA error after abnormal exit
+* net/nfp: fix link status interrupt
+* net/nfp: fix reconfigure logic in PF initialization
+* net/nfp: fix reconfigure logic of set MAC address
+* net/tap: fix IPv4 checksum offloading
+* net/tap: fix L4 checksum offloading
+* net/tap: fix RSS for fragmented packets
+* net/tap: use MAC address parse API instead of local parser
+* net/txgbe: add proper memory barriers in Rx
+* net/txgbe: add Tx queue maximum limit
+* net/txgbe: check process type in close operation
+* net/txgbe: fix out of bound access
+* net/txgbe: keep link down after device close
+* net/txgbe: reconfigure MAC Rx when link update
+* net/virtio: fix link state interrupt vector setting
+* net/virtio: fix missing next flag in Tx packed ring
+* pdump: fix error number on IPC response
+* random: initialize state for unregistered non-EAL threads
+* rawdev: fix device class in log message
+* test/bbdev: assert failed test for queue configure
+* test/bbdev: fix Python script subprocess
+* test/bonding: add missing check
+* test/bonding: fix uninitialized RSS configuration
+* test/bonding: remove unreachable statement
+* test/crypto: fix IV in some vectors
+* test/crypto: fix typo in asym tests
+* test/crypto: skip some synchronous tests with CPU crypto
+* test/event: fix crypto null device creation
+* test/hash: fix creation error log
+* version: 20.11.10-rc1
+* vhost: fix missing check on virtqueue access
+* vhost: fix missing vring call check on virtqueue access
+
+20.11.10 Validation
+~~~~~~~~~~~~~~~~~~~
+
+* Red Hat(R) Testing
+
+ * Platform
+
+ * RHEL 9
+ * Kernel 5.14
+ * Qemu 7.2.0
+ * libvirt 9.0.0
+ * X540-AT2 NIC(ixgbe, 10G)
+
+ * Functionality
+
+ * Guest with device assignment(PF) throughput testing(1G hugepage size)
+ * Guest with device assignment(PF) throughput testing(2M hugepage size)
+ * Guest with device assignment(VF) throughput testing
+ * PVP (host dpdk testpmd as vswitch) 1Q: throughput testing
+ * PVP vhost-user 2Q throughput testing
+ * PVP vhost-user 1Q cross numa node throughput testing
+ * Guest with vhost-user 2 queues throughput testing
+ * vhost-user reconnect with dpdk-client, qemu-server: qemu reconnect
+ * vhost-user reconnect with dpdk-client, qemu-server: ovs reconnect
+ * PVP reconnect with dpdk-client, qemu-server: PASS
+ * PVP 1Q live migration testing
+ * PVP 1Q cross numa node live migration testing
+ * Guest with ovs+dpdk+vhost-user 1Q live migration testing
+ * Guest with ovs+dpdk+vhost-user 1Q live migration testing (2M)
+ * Guest with ovs+dpdk+vhost-user 2Q live migration testing
+ * Guest with ovs+dpdk+vhost-user 4Q live migration testing
+ * Host PF + DPDK testing
+ * Host VF + DPDK testing
+
+
+* Nvidia(R) Testing
+
+ * Basic functionality via testpmd/example applications
+
+ * Tx/Rx
+ * xstats
+ * Timestamps
+ * Link status
+ * RTE flow and flow_director
+ * RSS
+ * VLAN filtering, stripping and insertion
+ * Checksum/TSO
+ * ptype
+ * link_status_interrupt example application
+ * l3fwd-power example application
+ * Multi-process example applications
+ * Hardware LRO tests
+
+ * Build tests
+
+ * Ubuntu 22.04.3 with MLNX_OFED_LINUX-23.10-0.5.5.0.
+ * Ubuntu 20.04.6 with MLNX_OFED_LINUX-23.07-0.5.1.2.
+ * Ubuntu 20.04.6 with rdma-core master (0cf342c).
+ * Ubuntu 20.04.6 with rdma-core v28.0.
+ * Fedora 38 with rdma-core v44.0.
+ * Fedora 40 (Rawhide) with rdma-core v48.0.
+ * OpenSUSE Leap 15.5 with rdma-core v42.0.
+ * Windows Server 2019 with Clang 16.0.6.
+
+ * BlueField-2
+
+ * DOCA 2.2.0
+ * fw 24.38.1002
+
+ * ConnectX-7
+
+ * Ubuntu 20.04
+ * Driver MLNX_OFED_LINUX-23.10-0.5.5.0
+ * fw 28.39.1002
+
+ * ConnectX-6 Dx
+
+ * Ubuntu 20.04
+ * Driver MLNX_OFED_LINUX-23.10-0.5.5.0
+ * fw 22.39.1002
+
+
+* Intel(R) Testing
+
+ * Basic Intel(R) NIC testing
+ * Build & CFLAG compile: cover the build test combination with latest GCC/Clang version and the popular OS revision such as Ubuntu22.04, Ubuntu20.04, Fedora38, RHEL9.2, RHEL8.7, FreeBSD13.2, Centos7.9 etc.
+ * PF(i40e, ixgbe): test scenarios including RTE_FLOW/TSO/Jumboframe/checksum offload/VLAN/VXLAN, etc.
+ * VF(i40e, ixgbe): test scenarios including VF-RTE_FLOW/TSO/Jumboframe/checksum offload/VLAN/VXLAN, etc.
+ * PPF/VF(ice): test scenarios including Switch features/Package Management/Flow Director/Advanced Tx/Advanced RSS/ACL/DCF/Flexible Descriptor, etc.
+ * Intel NIC single core/NIC performance: test scenarios including PF/VF single core performance test, etc.
+ * IPsec: test scenarios including ipsec/ipsec-gw/ipsec library basic test - QAT&SW/FIB library, etc.
+
+ * Basic cryptodev and virtio testing
+ * Virtio: both function and performance test are covered. Such as PVP/Virtio_loopback/virtio-user loopback/virtio-net VM2VM perf testing/VMAWARE ESXI 8.0, etc.
+ * Cryptodev:
+ * Function test: test scenarios including Cryptodev API testing/CompressDev ISA-L/QAT/ZLIB PMD Testing/FIPS, etc.
+ * Performance test: test scenarios including Thoughput Performance/Cryptodev Latency, etc.
diff -Nru dpdk-20.11.9/doc/guides/sample_app_ug/vdpa.rst dpdk-20.11.10/doc/guides/sample_app_ug/vdpa.rst
--- dpdk-20.11.9/doc/guides/sample_app_ug/vdpa.rst 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/doc/guides/sample_app_ug/vdpa.rst 2023-12-12 10:30:50.000000000 +0000
@@ -38,8 +38,7 @@
* --iface specifies the path prefix of the UNIX domain socket file, e.g.
/tmp/vhost-user-, then the socket files will be named as /tmp/vhost-user-<n>
(n starts from 0).
-* --interactive means run the vdpa sample in interactive mode, currently 4
- internal cmds are supported:
+* --interactive means run the vDPA sample in interactive mode:
1. help: show help message
2. list: list all available vdpa devices
diff -Nru dpdk-20.11.9/drivers/bus/dpaa/base/qbman/qman.c dpdk-20.11.10/drivers/bus/dpaa/base/qbman/qman.c
--- dpdk-20.11.9/drivers/bus/dpaa/base/qbman/qman.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/bus/dpaa/base/qbman/qman.c 2023-12-12 10:30:50.000000000 +0000
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
*
* Copyright 2008-2016 Freescale Semiconductor Inc.
- * Copyright 2017,2019 NXP
+ * Copyright 2017,2019-2023 NXP
*
*/
@@ -897,7 +897,7 @@
/* Lookup in the retirement table */
fq = table_find_fq(p,
be32_to_cpu(msg->fq.fqid));
- DPAA_BUG_ON(!fq);
+ DPAA_BUG_ON(fq != NULL);
fq_state_change(p, fq, &swapped_msg, verb);
if (fq->cb.fqs)
fq->cb.fqs(p, fq, &swapped_msg);
@@ -909,6 +909,7 @@
#else
fq = (void *)(uintptr_t)msg->fq.contextB;
#endif
+ DPAA_BUG_ON(fq != NULL);
fq_state_change(p, fq, msg, verb);
if (fq->cb.fqs)
fq->cb.fqs(p, fq, &swapped_msg);
diff -Nru dpdk-20.11.9/drivers/bus/pci/pci_common.c dpdk-20.11.10/drivers/bus/pci/pci_common.c
--- dpdk-20.11.9/drivers/bus/pci/pci_common.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/bus/pci/pci_common.c 2023-12-12 10:30:50.000000000 +0000
@@ -238,7 +238,7 @@
}
}
- RTE_LOG(INFO, EAL, "Probe PCI driver: %s (%x:%x) device: "PCI_PRI_FMT" (socket %i)\n",
+ RTE_LOG(INFO, EAL, "Probe PCI driver: %s (%x:%04x) device: "PCI_PRI_FMT" (socket %i)\n",
dr->driver.name, dev->id.vendor_id, dev->id.device_id,
loc->domain, loc->bus, loc->devid, loc->function,
dev->device.numa_node);
diff -Nru dpdk-20.11.9/drivers/common/mlx5/linux/mlx5_common_os.c dpdk-20.11.10/drivers/common/mlx5/linux/mlx5_common_os.c
--- dpdk-20.11.9/drivers/common/mlx5/linux/mlx5_common_os.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/common/mlx5/linux/mlx5_common_os.c 2023-12-12 10:30:50.000000000 +0000
@@ -100,10 +100,11 @@
char ctrl = 0, pf_c1, pf_c2, vf_c1, vf_c2, eol;
char *end;
int sc_items;
+ int32_t ctrl_num = -1;
- sc_items = sscanf(port_name_in, "%c%d",
- &ctrl, &port_info_out->ctrl_num);
+ sc_items = sscanf(port_name_in, "%c%d", &ctrl, &ctrl_num);
if (sc_items == 2 && ctrl == 'c') {
+ port_info_out->ctrl_num = ctrl_num;
port_name_in++; /* 'c' */
port_name_in += snprintf(NULL, 0, "%d",
port_info_out->ctrl_num);
diff -Nru dpdk-20.11.9/drivers/crypto/aesni_gcm/meson.build dpdk-20.11.10/drivers/crypto/aesni_gcm/meson.build
--- dpdk-20.11.9/drivers/crypto/aesni_gcm/meson.build 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/crypto/aesni_gcm/meson.build 2023-12-12 10:30:50.000000000 +0000
@@ -2,6 +2,7 @@
# Copyright(c) 2018 Intel Corporation
IMB_required_ver = '0.52.0'
+IMB_max_ver = '1.3.0'
lib = cc.find_library('IPSec_MB', required: false)
if not lib.found()
build = false
@@ -13,9 +14,9 @@
imb_ver = cc.get_define('IMB_VERSION_STR',
prefix : '#include<intel-ipsec-mb.h>').split('"')[1]
- if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver))
- reason = 'IPSec_MB version >= @0@ is required, found version @1@'.format(
- IMB_required_ver, imb_ver)
+ if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver)
+ or imb_ver.version_compare('>' + IMB_max_ver))
+ reason = 'IPSec_MB version >= @0@ and <= @2@ is required, found version @1@'.format(IMB_required_ver, imb_ver, IMB_max_ver)
build = false
endif
endif
diff -Nru dpdk-20.11.9/drivers/crypto/aesni_mb/meson.build dpdk-20.11.10/drivers/crypto/aesni_mb/meson.build
--- dpdk-20.11.9/drivers/crypto/aesni_mb/meson.build 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/crypto/aesni_mb/meson.build 2023-12-12 10:30:50.000000000 +0000
@@ -2,6 +2,7 @@
# Copyright(c) 2018 Intel Corporation
IMB_required_ver = '0.52.0'
+IMB_max_ver = '1.3.0'
lib = cc.find_library('IPSec_MB', required: false)
if not lib.found()
build = false
@@ -13,9 +14,9 @@
imb_ver = cc.get_define('IMB_VERSION_STR',
prefix : '#include<intel-ipsec-mb.h>').split('"')[1]
- if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver))
- reason = 'IPSec_MB version >= @0@ is required, found version @1@'.format(
- IMB_required_ver, imb_ver)
+ if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver)
+ or imb_ver.version_compare('>' + IMB_max_ver))
+ reason = 'IPSec_MB version >= @0@ and <= @2@ is required, found version @1@'.format(IMB_required_ver, imb_ver, IMB_max_ver)
build = false
endif
diff -Nru dpdk-20.11.9/drivers/crypto/kasumi/meson.build dpdk-20.11.10/drivers/crypto/kasumi/meson.build
--- dpdk-20.11.9/drivers/crypto/kasumi/meson.build 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/crypto/kasumi/meson.build 2023-12-12 10:30:50.000000000 +0000
@@ -2,6 +2,7 @@
# Copyright(c) 2018-2020 Intel Corporation
IMB_required_ver = '0.53.0'
+IMB_max_ver = '1.3.0'
lib = cc.find_library('IPSec_MB', required: false)
if not lib.found()
build = false
@@ -11,9 +12,9 @@
imb_ver = cc.get_define('IMB_VERSION_STR',
prefix : '#include<intel-ipsec-mb.h>').split('"')[1]
- if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver))
- reason = 'IPSec_MB version >= @0@ is required, found version @1@'.format(
- IMB_required_ver, imb_ver)
+ if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver)
+ or imb_ver.version_compare('>' + IMB_max_ver))
+ reason = 'IPSec_MB version >= @0@ and <= @2@ is required, found version @1@'.format(IMB_required_ver, imb_ver, IMB_max_ver)
build = false
endif
diff -Nru dpdk-20.11.9/drivers/crypto/nitrox/nitrox_sym_reqmgr.c dpdk-20.11.10/drivers/crypto/nitrox/nitrox_sym_reqmgr.c
--- dpdk-20.11.9/drivers/crypto/nitrox/nitrox_sym_reqmgr.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/crypto/nitrox/nitrox_sym_reqmgr.c 2023-12-12 10:30:50.000000000 +0000
@@ -10,8 +10,11 @@
#include "nitrox_sym_reqmgr.h"
#include "nitrox_logs.h"
-#define MAX_SGBUF_CNT 16
-#define MAX_SGCOMP_CNT 5
+#define MAX_SUPPORTED_MBUF_SEGS 16
+/* IV + AAD + ORH + CC + DIGEST */
+#define ADDITIONAL_SGBUF_CNT 5
+#define MAX_SGBUF_CNT (MAX_SUPPORTED_MBUF_SEGS + ADDITIONAL_SGBUF_CNT)
+#define MAX_SGCOMP_CNT (RTE_ALIGN_MUL_CEIL(MAX_SGBUF_CNT, 4) / 4)
/* SLC_STORE_INFO */
#define MIN_UDD_LEN 16
/* PKT_IN_HDR + SLC_STORE_INFO */
@@ -303,7 +306,7 @@
datalen -= mlen;
}
- RTE_VERIFY(cnt <= MAX_SGBUF_CNT);
+ RTE_ASSERT(cnt <= MAX_SGBUF_CNT);
sgtbl->map_bufs_cnt = cnt;
return 0;
}
@@ -375,7 +378,7 @@
sr->out.sglist[cnt].virt = &sr->resp.completion;
cnt++;
- RTE_VERIFY(cnt <= MAX_SGBUF_CNT);
+ RTE_ASSERT(cnt <= MAX_SGBUF_CNT);
sr->out.map_bufs_cnt = cnt;
create_sgcomp(&sr->out);
@@ -600,7 +603,7 @@
resp.completion);
sr->out.sglist[cnt].virt = &sr->resp.completion;
cnt++;
- RTE_VERIFY(cnt <= MAX_SGBUF_CNT);
+ RTE_ASSERT(cnt <= MAX_SGBUF_CNT);
sr->out.map_bufs_cnt = cnt;
create_sgcomp(&sr->out);
@@ -774,6 +777,14 @@
{
int err;
+ if (unlikely(op->sym->m_src->nb_segs > MAX_SUPPORTED_MBUF_SEGS ||
+ (op->sym->m_dst &&
+ op->sym->m_dst->nb_segs > MAX_SUPPORTED_MBUF_SEGS))) {
+ NITROX_LOG(ERR, "Mbuf segments not supported. "
+ "Max supported %d\n", MAX_SUPPORTED_MBUF_SEGS);
+ return -ENOTSUP;
+ }
+
softreq_init(sr, sr->iova);
sr->ctx = ctx;
sr->op = op;
diff -Nru dpdk-20.11.9/drivers/crypto/snow3g/meson.build dpdk-20.11.10/drivers/crypto/snow3g/meson.build
--- dpdk-20.11.9/drivers/crypto/snow3g/meson.build 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/crypto/snow3g/meson.build 2023-12-12 10:30:50.000000000 +0000
@@ -2,6 +2,7 @@
# Copyright(c) 2019-2020 Intel Corporation
IMB_required_ver = '0.53.0'
+IMB_max_ver = '1.3.0'
lib = cc.find_library('IPSec_MB', required: false)
if not lib.found()
build = false
@@ -11,9 +12,9 @@
imb_ver = cc.get_define('IMB_VERSION_STR',
prefix : '#include<intel-ipsec-mb.h>').split('"')[1]
- if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver))
- reason = 'IPSec_MB version >= @0@ is required, found version @1@'.format(
- IMB_required_ver, imb_ver)
+ if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver)
+ or imb_ver.version_compare('>' + IMB_max_ver))
+ reason = 'IPSec_MB version >= @0@ and <= @2@ is required, found version @1@'.format(IMB_required_ver, imb_ver, IMB_max_ver)
build = false
endif
diff -Nru dpdk-20.11.9/drivers/crypto/zuc/meson.build dpdk-20.11.10/drivers/crypto/zuc/meson.build
--- dpdk-20.11.9/drivers/crypto/zuc/meson.build 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/crypto/zuc/meson.build 2023-12-12 10:30:50.000000000 +0000
@@ -2,6 +2,7 @@
# Copyright(c) 2018-2020 Intel Corporation
IMB_required_ver = '0.53.0'
+IMB_max_ver = '1.3.0'
lib = cc.find_library('IPSec_MB', required: false)
if not lib.found()
build = false
@@ -11,9 +12,9 @@
imb_ver = cc.get_define('IMB_VERSION_STR',
prefix : '#include<intel-ipsec-mb.h>').split('"')[1]
- if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver))
- reason = 'IPSec_MB version >= @0@ is required, found version @1@'.format(
- IMB_required_ver, imb_ver)
+ if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver)
+ or imb_ver.version_compare('>' + IMB_max_ver))
+ reason = 'IPSec_MB version >= @0@ and <= @2@ is required, found version @1@'.format(IMB_required_ver, imb_ver, IMB_max_ver)
build = false
endif
diff -Nru dpdk-20.11.9/drivers/event/dlb2/dlb2.c dpdk-20.11.10/drivers/event/dlb2/dlb2.c
--- dpdk-20.11.9/drivers/event/dlb2/dlb2.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/event/dlb2/dlb2.c 2023-12-12 10:30:50.000000000 +0000
@@ -62,6 +62,7 @@
.max_single_link_event_port_queue_pairs = DLB2_MAX_NUM_DIR_PORTS,
.event_dev_cap = (RTE_EVENT_DEV_CAP_QUEUE_QOS |
RTE_EVENT_DEV_CAP_EVENT_QOS |
+ RTE_EVENT_DEV_CAP_NONSEQ_MODE |
RTE_EVENT_DEV_CAP_BURST_MODE |
RTE_EVENT_DEV_CAP_DISTRIBUTED_SCHED |
RTE_EVENT_DEV_CAP_IMPLICIT_RELEASE_DISABLE |
diff -Nru dpdk-20.11.9/drivers/event/dlb2/dlb2_selftest.c dpdk-20.11.10/drivers/event/dlb2/dlb2_selftest.c
--- dpdk-20.11.9/drivers/event/dlb2/dlb2_selftest.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/event/dlb2/dlb2_selftest.c 2023-12-12 10:30:50.000000000 +0000
@@ -1475,7 +1475,7 @@
int
test_dlb2_eventdev(void)
{
- const char *dlb2_eventdev_name = "dlb2_event";
+ const char *dlb2_eventdev_name = "event_dlb2";
uint8_t num_evdevs = rte_event_dev_count();
int i, ret = 0;
int found = 0, skipped = 0, passed = 0, failed = 0;
@@ -1489,7 +1489,7 @@
/* skip non-dlb2 event devices */
if (strncmp(info.driver_name, dlb2_eventdev_name,
- sizeof(*info.driver_name)) != 0) {
+ strlen(dlb2_eventdev_name)) != 0) {
skipped++;
continue;
}
diff -Nru dpdk-20.11.9/drivers/event/dlb2/pf/dlb2_main.c dpdk-20.11.10/drivers/event/dlb2/pf/dlb2_main.c
--- dpdk-20.11.9/drivers/event/dlb2/pf/dlb2_main.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/event/dlb2/pf/dlb2_main.c 2023-12-12 10:30:50.000000000 +0000
@@ -45,6 +45,7 @@
#define DLB2_PCI_CAP_ID_MSIX 0x11
#define DLB2_PCI_EXT_CAP_ID_PRI 0x13
#define DLB2_PCI_EXT_CAP_ID_ACS 0xD
+#define DLB2_PCI_EXT_CAP_ID_PASID 0x1B /* Process Address Space ID */
#define DLB2_PCI_PRI_CTRL_ENABLE 0x1
#define DLB2_PCI_PRI_ALLOC_REQ 0xC
@@ -63,6 +64,8 @@
#define DLB2_PCI_ACS_CR 0x8
#define DLB2_PCI_ACS_UF 0x10
#define DLB2_PCI_ACS_EC 0x20
+#define DLB2_PCI_PASID_CTRL 0x06 /* PASID control register */
+#define DLB2_PCI_PASID_CAP_OFFSET 0x148 /* PASID capability offset */
static int dlb2_pci_find_capability(struct rte_pci_device *pdev, uint32_t id)
{
@@ -239,12 +242,14 @@
uint16_t rt_ctl_word;
uint32_t pri_reqs_dword;
uint16_t pri_ctrl_word;
+ uint16_t pasid_ctrl;
int pcie_cap_offset;
int pri_cap_offset;
int msix_cap_offset;
int err_cap_offset;
int acs_cap_offset;
+ int pasid_cap_offset;
int wait_count;
uint16_t devsta_busy_word;
@@ -560,6 +565,28 @@
if (ret != 2) {
DLB2_LOG_ERR("[%s()] failed to write the pcie config space at offset %d\n",
__func__, (int)off);
+ return ret;
+ }
+ }
+
+ /* The current Linux kernel vfio driver does not expose PASID capability to
+ * users. It also enables PASID by default, which breaks DLB PF PMD. We have
+ * to use the hardcoded offset for now to disable PASID.
+ */
+ pasid_cap_offset = DLB2_PCI_PASID_CAP_OFFSET;
+
+ off = pasid_cap_offset + DLB2_PCI_PASID_CTRL;
+ if (rte_pci_read_config(pdev, &pasid_ctrl, 2, off) != 2)
+ pasid_ctrl = 0;
+
+ if (pasid_ctrl) {
+ DLB2_INFO(dlb2_dev, "DLB2 disabling pasid...\n");
+
+ pasid_ctrl = 0;
+ ret = rte_pci_write_config(pdev, &pasid_ctrl, 2, off);
+ if (ret != 2) {
+ DLB2_LOG_ERR("[%s()] failed to write the pcie config space at offset %d\n",
+ __func__, (int)off);
return ret;
}
}
diff -Nru dpdk-20.11.9/drivers/event/dpaa/dpaa_eventdev.c dpdk-20.11.10/drivers/event/dpaa/dpaa_eventdev.c
--- dpdk-20.11.9/drivers/event/dpaa/dpaa_eventdev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/event/dpaa/dpaa_eventdev.c 2023-12-12 10:30:50.000000000 +0000
@@ -991,14 +991,14 @@
}
static int
-dpaa_event_dev_create(const char *name, const char *params)
+dpaa_event_dev_create(const char *name, const char *params, struct rte_vdev_device *vdev)
{
struct rte_eventdev *eventdev;
struct dpaa_eventdev *priv;
eventdev = rte_event_pmd_vdev_init(name,
sizeof(struct dpaa_eventdev),
- rte_socket_id());
+ rte_socket_id(), vdev);
if (eventdev == NULL) {
DPAA_EVENTDEV_ERR("Failed to create eventdev vdev %s", name);
goto fail;
@@ -1046,7 +1046,7 @@
params = rte_vdev_device_args(vdev);
- return dpaa_event_dev_create(name, params);
+ return dpaa_event_dev_create(name, params, vdev);
}
static int
diff -Nru dpdk-20.11.9/drivers/event/dpaa2/dpaa2_eventdev.c dpdk-20.11.10/drivers/event/dpaa2/dpaa2_eventdev.c
--- dpdk-20.11.9/drivers/event/dpaa2/dpaa2_eventdev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/event/dpaa2/dpaa2_eventdev.c 2023-12-12 10:30:50.000000000 +0000
@@ -1082,7 +1082,7 @@
}
static int
-dpaa2_eventdev_create(const char *name)
+dpaa2_eventdev_create(const char *name, struct rte_vdev_device *vdev)
{
struct rte_eventdev *eventdev;
struct dpaa2_eventdev *priv;
@@ -1092,7 +1092,7 @@
eventdev = rte_event_pmd_vdev_init(name,
sizeof(struct dpaa2_eventdev),
- rte_socket_id());
+ rte_socket_id(), vdev);
if (eventdev == NULL) {
DPAA2_EVENTDEV_ERR("Failed to create Event device %s", name);
goto fail;
@@ -1184,7 +1184,7 @@
name = rte_vdev_device_name(vdev);
DPAA2_EVENTDEV_INFO("Initializing %s", name);
- return dpaa2_eventdev_create(name);
+ return dpaa2_eventdev_create(name, vdev);
}
static int
diff -Nru dpdk-20.11.9/drivers/event/dsw/dsw_evdev.c dpdk-20.11.10/drivers/event/dsw/dsw_evdev.c
--- dpdk-20.11.9/drivers/event/dsw/dsw_evdev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/event/dsw/dsw_evdev.c 2023-12-12 10:30:50.000000000 +0000
@@ -406,7 +406,7 @@
name = rte_vdev_device_name(vdev);
dev = rte_event_pmd_vdev_init(name, sizeof(struct dsw_evdev),
- rte_socket_id());
+ rte_socket_id(), vdev);
if (dev == NULL)
return -EFAULT;
diff -Nru dpdk-20.11.9/drivers/event/octeontx/ssovf_evdev.c dpdk-20.11.10/drivers/event/octeontx/ssovf_evdev.c
--- dpdk-20.11.9/drivers/event/octeontx/ssovf_evdev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/event/octeontx/ssovf_evdev.c 2023-12-12 10:30:50.000000000 +0000
@@ -810,7 +810,7 @@
}
eventdev = rte_event_pmd_vdev_init(name, sizeof(struct ssovf_evdev),
- rte_socket_id());
+ rte_socket_id(), vdev);
if (eventdev == NULL) {
ssovf_log_err("Failed to create eventdev vdev %s", name);
return -ENOMEM;
diff -Nru dpdk-20.11.9/drivers/event/opdl/opdl_evdev.c dpdk-20.11.10/drivers/event/opdl/opdl_evdev.c
--- dpdk-20.11.9/drivers/event/opdl/opdl_evdev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/event/opdl/opdl_evdev.c 2023-12-12 10:30:50.000000000 +0000
@@ -694,7 +694,7 @@
}
}
dev = rte_event_pmd_vdev_init(name,
- sizeof(struct opdl_evdev), socket_id);
+ sizeof(struct opdl_evdev), socket_id, vdev);
if (dev == NULL) {
PMD_DRV_LOG(ERR, "eventdev vdev init() failed");
diff -Nru dpdk-20.11.9/drivers/event/skeleton/skeleton_eventdev.c dpdk-20.11.10/drivers/event/skeleton/skeleton_eventdev.c
--- dpdk-20.11.9/drivers/event/skeleton/skeleton_eventdev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/event/skeleton/skeleton_eventdev.c 2023-12-12 10:30:50.000000000 +0000
@@ -426,12 +426,12 @@
/* VDEV based event device */
static int
-skeleton_eventdev_create(const char *name, int socket_id)
+skeleton_eventdev_create(const char *name, int socket_id, struct rte_vdev_device *vdev)
{
struct rte_eventdev *eventdev;
eventdev = rte_event_pmd_vdev_init(name,
- sizeof(struct skeleton_eventdev), socket_id);
+ sizeof(struct skeleton_eventdev), socket_id, vdev);
if (eventdev == NULL) {
PMD_DRV_ERR("Failed to create eventdev vdev %s", name);
goto fail;
@@ -456,7 +456,7 @@
name = rte_vdev_device_name(vdev);
RTE_LOG(INFO, PMD, "Initializing %s on NUMA node %d\n", name,
rte_socket_id());
- return skeleton_eventdev_create(name, rte_socket_id());
+ return skeleton_eventdev_create(name, rte_socket_id(), vdev);
}
static int
diff -Nru dpdk-20.11.9/drivers/event/sw/sw_evdev.c dpdk-20.11.10/drivers/event/sw/sw_evdev.c
--- dpdk-20.11.9/drivers/event/sw/sw_evdev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/event/sw/sw_evdev.c 2023-12-12 10:30:50.000000000 +0000
@@ -1077,7 +1077,7 @@
min_burst_size, deq_burst_size, refill_once);
dev = rte_event_pmd_vdev_init(name,
- sizeof(struct sw_evdev), socket_id);
+ sizeof(struct sw_evdev), socket_id, vdev);
if (dev == NULL) {
SW_LOG_ERR("eventdev vdev init() failed");
return -EFAULT;
diff -Nru dpdk-20.11.9/drivers/event/sw/sw_evdev_scheduler.c dpdk-20.11.10/drivers/event/sw/sw_evdev_scheduler.c
--- dpdk-20.11.9/drivers/event/sw/sw_evdev_scheduler.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/event/sw/sw_evdev_scheduler.c 2023-12-12 10:30:50.000000000 +0000
@@ -90,8 +90,10 @@
sw->cq_ring_space[cq]--;
int head = (p->hist_head++ & (SW_PORT_HIST_LIST-1));
- p->hist_list[head].fid = flow_id;
- p->hist_list[head].qid = qid_id;
+ p->hist_list[head] = (struct sw_hist_list_entry) {
+ .qid = qid_id,
+ .fid = flow_id,
+ };
p->stats.tx_pkts++;
qid->stats.tx_pkts++;
@@ -162,8 +164,10 @@
qid->stats.tx_pkts++;
const int head = (p->hist_head & (SW_PORT_HIST_LIST-1));
- p->hist_list[head].fid = SW_HASH_FLOWID(qe->flow_id);
- p->hist_list[head].qid = qid_id;
+ p->hist_list[head] = (struct sw_hist_list_entry) {
+ .qid = qid_id,
+ .fid = SW_HASH_FLOWID(qe->flow_id),
+ };
if (keep_order)
rob_ring_dequeue(qid->reorder_buffer_freelist,
@@ -368,12 +372,6 @@
if (!allow_reorder && !eop)
flags = QE_FLAG_VALID;
- /*
- * if we don't have space for this packet in an IQ,
- * then move on to next queue. Technically, for a
- * packet that needs reordering, we don't need to check
- * here, but it simplifies things not to special-case
- */
uint32_t iq_num = PRIO_TO_IQ(qe->priority);
struct sw_qid *qid = &sw->qids[qe->queue_id];
@@ -419,7 +417,6 @@
struct reorder_buffer_entry *rob_entry =
hist_entry->rob_entry;
- hist_entry->rob_entry = NULL;
/* Although fragmentation not currently
* supported by eventdev API, we support it
* here. Open: How do we alert the user that
diff -Nru dpdk-20.11.9/drivers/net/bonding/rte_eth_bond_8023ad.c dpdk-20.11.10/drivers/net/bonding/rte_eth_bond_8023ad.c
--- dpdk-20.11.9/drivers/net/bonding/rte_eth_bond_8023ad.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/bonding/rte_eth_bond_8023ad.c 2023-12-12 10:30:50.000000000 +0000
@@ -652,12 +652,9 @@
}
static uint16_t
-max_index(uint64_t *a, int n)
+max_index(uint64_t *a, uint16_t n)
{
- if (n <= 0)
- return -1;
-
- int i, max_i = 0;
+ uint16_t i, max_i = 0;
uint64_t max = a[0];
for (i = 1; i < n; ++i) {
diff -Nru dpdk-20.11.9/drivers/net/bonding/rte_eth_bond_8023ad.h dpdk-20.11.10/drivers/net/bonding/rte_eth_bond_8023ad.h
--- dpdk-20.11.9/drivers/net/bonding/rte_eth_bond_8023ad.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/bonding/rte_eth_bond_8023ad.h 2023-12-12 10:30:50.000000000 +0000
@@ -197,10 +197,6 @@
rte_eth_bond_8023ad_slave_info(uint16_t port_id, uint16_t slave_id,
struct rte_eth_bond_8023ad_slave_info *conf);
-#ifdef __cplusplus
-}
-#endif
-
/**
* Configure a slave port to start collecting.
*
@@ -331,4 +327,9 @@
int
rte_eth_bond_8023ad_agg_selection_set(uint16_t port_id,
enum rte_bond_8023ad_agg_selection agg_selection);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif /* RTE_ETH_BOND_8023AD_H_ */
diff -Nru dpdk-20.11.9/drivers/net/bonding/rte_eth_bond_pmd.c dpdk-20.11.10/drivers/net/bonding/rte_eth_bond_pmd.c
--- dpdk-20.11.9/drivers/net/bonding/rte_eth_bond_pmd.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/bonding/rte_eth_bond_pmd.c 2023-12-12 10:30:50.000000000 +0000
@@ -2114,6 +2114,10 @@
eth_dev->data->dev_link.link_status = ETH_LINK_DOWN;
eth_dev->data->dev_started = 0;
+ if (internals->link_status_polling_enabled) {
+ rte_eal_alarm_cancel(bond_ethdev_slave_link_status_change_monitor,
+ (void *)&rte_eth_devices[internals->port_id]);
+ }
internals->link_status_polling_enabled = 0;
for (i = 0; i < internals->slave_count; i++) {
uint16_t slave_id = internals->slaves[i].port_id;
diff -Nru dpdk-20.11.9/drivers/net/enic/enic_main.c dpdk-20.11.10/drivers/net/enic/enic_main.c
--- dpdk-20.11.9/drivers/net/enic/enic_main.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/enic/enic_main.c 2023-12-12 10:30:50.000000000 +0000
@@ -1630,7 +1630,7 @@
* packet length.
*/
if (!eth_dev->data->dev_started)
- goto set_mtu_done;
+ return rc;
/*
* The device has started, re-do RQs on the fly. In the process, we
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_cmd.c dpdk-20.11.10/drivers/net/hns3/hns3_cmd.c
--- dpdk-20.11.9/drivers/net/hns3/hns3_cmd.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_cmd.c 2023-12-12 10:30:50.000000000 +0000
@@ -436,6 +436,8 @@
hns3_set_bit(hw->capability, HNS3_DEV_SUPPORT_INDEP_TXRX_B, 1);
if (hns3_get_bit(caps, HNS3_CAPS_STASH_B))
hns3_set_bit(hw->capability, HNS3_DEV_SUPPORT_STASH_B, 1);
+ if (hns3_get_bit(caps, HNS3_CAPS_GRO_B))
+ hns3_set_bit(hw->capability, HNS3_DEV_SUPPORT_GRO_B, 1);
}
static uint32_t
@@ -448,6 +450,41 @@
return rte_cpu_to_le_32(api_caps);
}
+static void
+hns3_set_dcb_capability(struct hns3_hw *hw)
+{
+ struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
+ struct rte_pci_device *pci_dev;
+ struct rte_eth_dev *eth_dev;
+ uint16_t device_id;
+
+ if (hns->is_vf)
+ return;
+
+ eth_dev = &rte_eth_devices[hw->data->port_id];
+ pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
+ device_id = pci_dev->id.device_id;
+
+ if (device_id == HNS3_DEV_ID_25GE_RDMA ||
+ device_id == HNS3_DEV_ID_50GE_RDMA ||
+ device_id == HNS3_DEV_ID_100G_RDMA_MACSEC ||
+ device_id == HNS3_DEV_ID_200G_RDMA)
+ hns3_set_bit(hw->capability, HNS3_DEV_SUPPORT_DCB_B, 1);
+}
+
+static void
+hns3_set_default_capability(struct hns3_hw *hw)
+{
+ hns3_set_dcb_capability(hw);
+
+ /*
+ * The firmware of the network engines with HIP08 do not report some
+ * capabilities, like GRO. Set default capabilities for it.
+ */
+ if (hw->revision < PCI_REVISION_ID_HIP09_A)
+ hns3_set_bit(hw->capability, HNS3_DEV_SUPPORT_GRO_B, 1);
+}
+
static int
hns3_cmd_query_firmware_version_and_capability(struct hns3_hw *hw)
{
@@ -465,6 +502,8 @@
return ret;
hw->fw_version = rte_le_to_cpu_32(resp->firmware);
+
+ hns3_set_default_capability(hw);
hns3_parse_capability(hw, resp);
return 0;
@@ -526,9 +565,6 @@
hw->cmq.csq.next_to_use = 0;
hw->cmq.crq.next_to_clean = 0;
hw->cmq.crq.next_to_use = 0;
- hw->mbx_resp.head = 0;
- hw->mbx_resp.tail = 0;
- hw->mbx_resp.lost = 0;
hns3_cmd_init_regs(hw);
rte_spinlock_unlock(&hw->cmq.crq.lock);
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_cmd.h dpdk-20.11.10/drivers/net/hns3/hns3_cmd.h
--- dpdk-20.11.9/drivers/net/hns3/hns3_cmd.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_cmd.h 2023-12-12 10:30:50.000000000 +0000
@@ -290,6 +290,7 @@
HNS3_CAPS_TQP_TXRX_INDEP_B,
HNS3_CAPS_HW_PAD_B,
HNS3_CAPS_STASH_B,
+ HNS3_CAPS_GRO_B = 20,
};
enum HNS3_API_CAP_BITS {
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_dcb.c dpdk-20.11.10/drivers/net/hns3/hns3_dcb.c
--- dpdk-20.11.9/drivers/net/hns3/hns3_dcb.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_dcb.c 2023-12-12 10:30:50.000000000 +0000
@@ -1051,7 +1051,7 @@
ret = hns3_pg_to_pri_map(hw);
if (ret) {
- hns3_err(hw, "pri_to_pg mapping fail: %d", ret);
+ hns3_err(hw, "pg_to_pri mapping fail: %d", ret);
return ret;
}
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_ethdev.c dpdk-20.11.10/drivers/net/hns3/hns3_ethdev.c
--- dpdk-20.11.9/drivers/net/hns3/hns3_ethdev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_ethdev.c 2023-12-12 10:30:50.000000000 +0000
@@ -1913,7 +1913,7 @@
hns3_err(hw, "failed to set mc mac addr, nb_mc_addr(%u) "
"invalid. valid range: 0~%d",
nb_mc_addr, HNS3_MC_MACADDR_NUM);
- return -EINVAL;
+ return -ENOSPC;
}
/* Check if input mac addresses are valid */
@@ -2038,11 +2038,41 @@
}
static int
+hns3_configure_all_mc_mac_addr(struct hns3_adapter *hns, bool del)
+{
+ char mac_str[RTE_ETHER_ADDR_FMT_SIZE];
+ struct hns3_hw *hw = &hns->hw;
+ struct rte_ether_addr *addr;
+ int err = 0;
+ int ret;
+ int i;
+
+ for (i = 0; i < hw->mc_addrs_num; i++) {
+ addr = &hw->mc_addrs[i];
+ if (!rte_is_multicast_ether_addr(addr))
+ continue;
+ if (del)
+ ret = hns3_remove_mc_addr(hw, addr);
+ else
+ ret = hns3_add_mc_addr(hw, addr);
+ if (ret) {
+ err = ret;
+ rte_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE,
+ addr);
+ hns3_dbg(hw, "%s mc mac addr: %s failed for pf: ret = %d",
+ del ? "Remove" : "Restore", mac_str, ret);
+ }
+ }
+ return err;
+}
+
+static int
hns3_set_mc_mac_addr_list(struct rte_eth_dev *dev,
struct rte_ether_addr *mc_addr_set,
uint32_t nb_mc_addr)
{
struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+ struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
struct rte_ether_addr reserved_addr_list[HNS3_MC_MACADDR_NUM];
struct rte_ether_addr add_addr_list[HNS3_MC_MACADDR_NUM];
struct rte_ether_addr rm_addr_list[HNS3_MC_MACADDR_NUM];
@@ -2055,6 +2085,15 @@
int ret;
int i;
+ if (mc_addr_set == NULL || nb_mc_addr == 0) {
+ rte_spinlock_lock(&hw->lock);
+ ret = hns3_configure_all_mc_mac_addr(hns, true);
+ if (ret == 0)
+ hw->mc_addrs_num = 0;
+ rte_spinlock_unlock(&hw->lock);
+ return ret;
+ }
+
/* Check if input parameters are valid */
ret = hns3_set_mc_addr_chk_param(hw, mc_addr_set, nb_mc_addr);
if (ret)
@@ -2103,35 +2142,6 @@
}
static int
-hns3_configure_all_mc_mac_addr(struct hns3_adapter *hns, bool del)
-{
- char mac_str[RTE_ETHER_ADDR_FMT_SIZE];
- struct hns3_hw *hw = &hns->hw;
- struct rte_ether_addr *addr;
- int err = 0;
- int ret;
- int i;
-
- for (i = 0; i < hw->mc_addrs_num; i++) {
- addr = &hw->mc_addrs[i];
- if (!rte_is_multicast_ether_addr(addr))
- continue;
- if (del)
- ret = hns3_remove_mc_addr(hw, addr);
- else
- ret = hns3_add_mc_addr(hw, addr);
- if (ret) {
- err = ret;
- rte_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE,
- addr);
- hns3_dbg(hw, "%s mc mac addr: %s failed for pf: ret = %d",
- del ? "Remove" : "Restore", mac_str, ret);
- }
- }
- return err;
-}
-
-static int
hns3_check_mq_mode(struct rte_eth_dev *dev)
{
enum rte_eth_rx_mq_mode rx_mq_mode = dev->data->dev_conf.rxmode.mq_mode;
@@ -2571,8 +2581,7 @@
DEV_RX_OFFLOAD_VLAN_STRIP |
DEV_RX_OFFLOAD_VLAN_FILTER |
DEV_RX_OFFLOAD_JUMBO_FRAME |
- DEV_RX_OFFLOAD_RSS_HASH |
- DEV_RX_OFFLOAD_TCP_LRO);
+ DEV_RX_OFFLOAD_RSS_HASH);
info->tx_offload_capa = (DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM |
DEV_TX_OFFLOAD_IPV4_CKSUM |
DEV_TX_OFFLOAD_TCP_CKSUM |
@@ -2590,6 +2599,9 @@
info->dev_capa = RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP |
RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP;
+ if (hns3_dev_gro_supported(hw))
+ info->rx_offload_capa |= DEV_RX_OFFLOAD_TCP_LRO;
+
info->rx_desc_lim = (struct rte_eth_desc_lim) {
.nb_max = HNS3_MAX_RING_DESC,
.nb_min = HNS3_MIN_RING_DESC,
@@ -3022,6 +3034,28 @@
return 0;
}
+int
+hns3_get_pci_revision_id(struct hns3_hw *hw, uint8_t *revision_id)
+{
+ struct rte_pci_device *pci_dev;
+ struct rte_eth_dev *eth_dev;
+ uint8_t revision;
+ int ret;
+
+ eth_dev = &rte_eth_devices[hw->data->port_id];
+ pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
+ ret = rte_pci_read_config(pci_dev, &revision, HNS3_PCI_REVISION_ID_LEN,
+ HNS3_PCI_REVISION_ID);
+ if (ret != HNS3_PCI_REVISION_ID_LEN) {
+ hns3_err(hw, "failed to read pci revision id, ret = %d", ret);
+ return -EIO;
+ }
+
+ *revision_id = revision;
+
+ return 0;
+}
+
static void
hns3_set_default_dev_specifications(struct hns3_hw *hw)
{
@@ -3099,38 +3133,14 @@
hns3_get_capability(struct hns3_hw *hw)
{
struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
- struct rte_pci_device *pci_dev;
struct hns3_pf *pf = &hns->pf;
- struct rte_eth_dev *eth_dev;
- uint16_t device_id;
- uint8_t revision;
int ret;
- eth_dev = &rte_eth_devices[hw->data->port_id];
- pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
- device_id = pci_dev->id.device_id;
-
- if (device_id == HNS3_DEV_ID_25GE_RDMA ||
- device_id == HNS3_DEV_ID_50GE_RDMA ||
- device_id == HNS3_DEV_ID_100G_RDMA_MACSEC ||
- device_id == HNS3_DEV_ID_200G_RDMA)
- hns3_set_bit(hw->capability, HNS3_DEV_SUPPORT_DCB_B, 1);
-
- /* Get PCI revision id */
- ret = rte_pci_read_config(pci_dev, &revision, HNS3_PCI_REVISION_ID_LEN,
- HNS3_PCI_REVISION_ID);
- if (ret != HNS3_PCI_REVISION_ID_LEN) {
- PMD_INIT_LOG(ERR, "failed to read pci revision id, ret = %d",
- ret);
- return -EIO;
- }
- hw->revision = revision;
-
ret = hns3_query_mac_stats_reg_num(hw);
if (ret)
return ret;
- if (revision < PCI_REVISION_ID_HIP09_A) {
+ if (hw->revision < PCI_REVISION_ID_HIP09_A) {
hns3_set_default_dev_specifications(hw);
hw->intr.mapping_mode = HNS3_INTR_MAPPING_VEC_RSV_ONE;
hw->intr.gl_unit = HNS3_INTR_COALESCE_GL_UINT_2US;
@@ -4784,6 +4794,10 @@
/* Get hardware io base address from pcie BAR2 IO space */
hw->io_base = pci_dev->mem_resource[2].addr;
+ ret = hns3_get_pci_revision_id(hw, &hw->revision);
+ if (ret)
+ return ret;
+
/* Firmware command queue initialize */
ret = hns3_cmd_init_queue(hw);
if (ret) {
@@ -5471,14 +5485,13 @@
enum hns3_reset_level reset;
/*
- * Check the registers to confirm whether there is reset pending.
- * Note: This check may lead to schedule reset task, but only primary
- * process can process the reset event. Therefore, limit the
- * checking under only primary process.
+ * Only primary can process can process the reset event,
+ * so don't check reset event in secondary.
*/
- if (rte_eal_process_type() == RTE_PROC_PRIMARY)
- hns3_check_event_cause(hns, NULL);
+ if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+ return false;
+ hns3_check_event_cause(hns, NULL);
reset = hns3_get_reset_level(hns, &hw->reset.pending);
if (hw->reset.level != HNS3_NONE_RESET && hw->reset.level < reset) {
hns3_warn(hw, "High level reset %d is pending", reset);
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_ethdev.h dpdk-20.11.10/drivers/net/hns3/hns3_ethdev.h
--- dpdk-20.11.9/drivers/net/hns3/hns3_ethdev.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_ethdev.h 2023-12-12 10:30:50.000000000 +0000
@@ -778,6 +778,7 @@
#define HNS3_DEV_SUPPORT_TX_PUSH_B 0x5
#define HNS3_DEV_SUPPORT_INDEP_TXRX_B 0x6
#define HNS3_DEV_SUPPORT_STASH_B 0x7
+#define HNS3_DEV_SUPPORT_GRO_B 0x14
#define hns3_dev_dcb_supported(hw) \
hns3_get_bit((hw)->capability, HNS3_DEV_SUPPORT_DCB_B)
@@ -808,6 +809,9 @@
#define hns3_dev_stash_supported(hw) \
hns3_get_bit((hw)->capability, HNS3_DEV_SUPPORT_STASH_B)
+#define hns3_dev_gro_supported(hw) \
+ hns3_get_bit((hw)->capability, HNS3_DEV_SUPPORT_GRO_B)
+
#define HNS3_DEV_PRIVATE_TO_HW(adapter) \
(&((struct hns3_adapter *)(adapter))->hw)
#define HNS3_DEV_PRIVATE_TO_PF(adapter) \
@@ -939,6 +943,7 @@
bool hns3_is_reset_pending(struct hns3_adapter *hns);
bool hns3vf_is_reset_pending(struct hns3_adapter *hns);
void hns3_update_link_status(struct hns3_hw *hw);
+int hns3_get_pci_revision_id(struct hns3_hw *hw, uint8_t *revision_id);
static inline bool
is_reset_pending(struct hns3_adapter *hns)
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_ethdev_vf.c dpdk-20.11.10/drivers/net/hns3/hns3_ethdev_vf.c
--- dpdk-20.11.9/drivers/net/hns3/hns3_ethdev_vf.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_ethdev_vf.c 2023-12-12 10:30:50.000000000 +0000
@@ -337,6 +337,8 @@
hns3_err(hw, "Failed to set mac addr(%s) for vf: %d",
mac_str, ret);
}
+ rte_spinlock_unlock(&hw->lock);
+ return ret;
}
rte_ether_addr_copy(mac_addr,
@@ -435,7 +437,7 @@
hns3_err(hw, "failed to set mc mac addr, nb_mc_addr(%u) "
"invalid. valid range: 0~%d",
nb_mc_addr, HNS3_MC_MACADDR_NUM);
- return -EINVAL;
+ return -ENOSPC;
}
/* Check if input mac addresses are valid */
@@ -980,8 +982,7 @@
DEV_RX_OFFLOAD_VLAN_STRIP |
DEV_RX_OFFLOAD_VLAN_FILTER |
DEV_RX_OFFLOAD_JUMBO_FRAME |
- DEV_RX_OFFLOAD_RSS_HASH |
- DEV_RX_OFFLOAD_TCP_LRO);
+ DEV_RX_OFFLOAD_RSS_HASH);
info->tx_offload_capa = (DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM |
DEV_TX_OFFLOAD_IPV4_CKSUM |
DEV_TX_OFFLOAD_TCP_CKSUM |
@@ -999,6 +1000,9 @@
info->dev_capa = RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP |
RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP;
+ if (hns3_dev_gro_supported(hw))
+ info->rx_offload_capa |= DEV_RX_OFFLOAD_TCP_LRO;
+
info->rx_desc_lim = (struct rte_eth_desc_lim) {
.nb_max = HNS3_MAX_RING_DESC,
.nb_min = HNS3_MIN_RING_DESC,
@@ -1197,25 +1201,9 @@
static int
hns3vf_get_capability(struct hns3_hw *hw)
{
- struct rte_pci_device *pci_dev;
- struct rte_eth_dev *eth_dev;
- uint8_t revision;
int ret;
- eth_dev = &rte_eth_devices[hw->data->port_id];
- pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
-
- /* Get PCI revision id */
- ret = rte_pci_read_config(pci_dev, &revision, HNS3_PCI_REVISION_ID_LEN,
- HNS3_PCI_REVISION_ID);
- if (ret != HNS3_PCI_REVISION_ID_LEN) {
- PMD_INIT_LOG(ERR, "failed to read pci revision id, ret = %d",
- ret);
- return -EIO;
- }
- hw->revision = revision;
-
- if (revision < PCI_REVISION_ID_HIP09_A) {
+ if (hw->revision < PCI_REVISION_ID_HIP09_A) {
hns3vf_set_default_dev_specifications(hw);
hw->intr.mapping_mode = HNS3_INTR_MAPPING_VEC_RSV_ONE;
hw->intr.gl_unit = HNS3_INTR_COALESCE_GL_UINT_2US;
@@ -1773,6 +1761,10 @@
/* Get hardware io base address from pcie BAR2 IO space */
hw->io_base = pci_dev->mem_resource[2].addr;
+ ret = hns3_get_pci_revision_id(hw, &hw->revision);
+ if (ret)
+ return ret;
+
/* Firmware command queue initialize */
ret = hns3_cmd_init_queue(hw);
if (ret) {
@@ -2306,14 +2298,13 @@
return false;
/*
- * Check the registers to confirm whether there is reset pending.
- * Note: This check may lead to schedule reset task, but only primary
- * process can process the reset event. Therefore, limit the
- * checking under only primary process.
+ * Only primary can process can process the reset event,
+ * so don't check reset event in secondary.
*/
- if (rte_eal_process_type() == RTE_PROC_PRIMARY)
- hns3vf_check_event_cause(hns, NULL);
+ if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+ return false;
+ hns3vf_check_event_cause(hns, NULL);
reset = hns3vf_get_reset_level(hw, &hw->reset.pending);
if (hw->reset.level != HNS3_NONE_RESET && hw->reset.level < reset) {
hns3_warn(hw, "High level reset %d is pending", reset);
@@ -2658,8 +2649,11 @@
*/
if (pci_dev->kdrv == RTE_PCI_KDRV_IGB_UIO ||
pci_dev->kdrv == RTE_PCI_KDRV_UIO_GENERIC) {
- if (hns3vf_enable_msix(pci_dev, true))
+ ret = hns3vf_enable_msix(pci_dev, true);
+ if (ret != 0) {
hns3_err(hw, "Failed to enable msix");
+ return ret;
+ }
}
rte_intr_enable(&pci_dev->intr_handle);
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_fdir.c dpdk-20.11.10/drivers/net/hns3/hns3_fdir.c
--- dpdk-20.11.9/drivers/net/hns3/hns3_fdir.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_fdir.c 2023-12-12 10:30:50.000000000 +0000
@@ -962,7 +962,7 @@
rule->key_conf.spec.src_port,
rule->key_conf.spec.dst_port, ret);
else
- hns3_remove_fdir_filter(hw, fdir_info, &rule->key_conf);
+ ret = hns3_remove_fdir_filter(hw, fdir_info, &rule->key_conf);
return ret;
}
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_flow.c dpdk-20.11.10/drivers/net/hns3/hns3_flow.c
--- dpdk-20.11.9/drivers/net/hns3/hns3_flow.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_flow.c 2023-12-12 10:30:50.000000000 +0000
@@ -907,7 +907,7 @@
return rte_flow_error_set(error, EINVAL,
RTE_FLOW_ERROR_TYPE_ITEM_MASK,
item,
- "Only support src & dst port in SCTP");
+ "Only support src & dst port & v-tag in SCTP");
if (sctp_mask->hdr.src_port) {
hns3_set_bit(rule->input_set, INNER_SRC_PORT, 1);
rule->key_conf.mask.src_port =
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_intr.c dpdk-20.11.10/drivers/net/hns3/hns3_intr.c
--- dpdk-20.11.9/drivers/net/hns3/hns3_intr.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_intr.c 2023-12-12 10:30:50.000000000 +0000
@@ -1781,8 +1781,8 @@
return;
if (rte_atomic16_read(&hns->hw.reset.schedule) == SCHEDULE_DEFERRED)
rte_eal_alarm_cancel(hw->reset.ops->reset_service, hns);
- else
- rte_atomic16_set(&hns->hw.reset.schedule, SCHEDULE_REQUESTED);
+
+ rte_atomic16_set(&hns->hw.reset.schedule, SCHEDULE_REQUESTED);
rte_eal_alarm_set(SWITCH_CONTEXT_US, hw->reset.ops->reset_service, hns);
}
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_mbx.c dpdk-20.11.10/drivers/net/hns3/hns3_mbx.c
--- dpdk-20.11.9/drivers/net/hns3/hns3_mbx.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_mbx.c 2023-12-12 10:30:50.000000000 +0000
@@ -40,23 +40,6 @@
return -EIO;
}
-static void
-hns3_mbx_proc_timeout(struct hns3_hw *hw, uint16_t code, uint16_t subcode)
-{
- if (hw->mbx_resp.matching_scheme ==
- HNS3_MBX_RESP_MATCHING_SCHEME_OF_ORIGINAL) {
- hw->mbx_resp.lost++;
- hns3_err(hw,
- "VF could not get mbx(%u,%u) head(%u) tail(%u) "
- "lost(%u) from PF",
- code, subcode, hw->mbx_resp.head, hw->mbx_resp.tail,
- hw->mbx_resp.lost);
- return;
- }
-
- hns3_err(hw, "VF could not get mbx(%u,%u) from PF", code, subcode);
-}
-
static int
hns3_get_mbx_resp(struct hns3_hw *hw, uint16_t code, uint16_t subcode,
uint8_t *resp_data, uint16_t resp_len)
@@ -66,7 +49,6 @@
struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
struct hns3_mbx_resp_status *mbx_resp;
uint32_t wait_time = 0;
- bool received;
if (resp_len > HNS3_MBX_MAX_RESP_DATA_SIZE) {
hns3_err(hw, "VF mbx response len(=%u) exceeds maximum(=%d)",
@@ -91,20 +73,14 @@
hns3_dev_handle_mbx_msg(hw);
rte_delay_us(HNS3_WAIT_RESP_US);
- if (hw->mbx_resp.matching_scheme ==
- HNS3_MBX_RESP_MATCHING_SCHEME_OF_ORIGINAL)
- received = (hw->mbx_resp.head ==
- hw->mbx_resp.tail + hw->mbx_resp.lost);
- else
- received = hw->mbx_resp.received_match_resp;
- if (received)
+ if (hw->mbx_resp.received_match_resp)
break;
wait_time += HNS3_WAIT_RESP_US;
}
hw->mbx_resp.req_msg_data = 0;
if (wait_time >= HNS3_MAX_RETRY_US) {
- hns3_mbx_proc_timeout(hw, code, subcode);
+ hns3_err(hw, "VF could not get mbx(%u,%u) from PF", code, subcode);
return -ETIME;
}
rte_io_rmb();
@@ -130,7 +106,6 @@
* we get the exact scheme which is used.
*/
hw->mbx_resp.req_msg_data = (uint32_t)code << 16 | subcode;
- hw->mbx_resp.head++;
/* Update match_id and ensure the value of match_id is not zero */
hw->mbx_resp.match_id++;
@@ -183,7 +158,6 @@
req->match_id = hw->mbx_resp.match_id;
ret = hns3_cmd_send(hw, &desc, 1);
if (ret) {
- hw->mbx_resp.head--;
rte_spinlock_unlock(&hw->mbx_resp.lock);
hns3_err(hw, "VF failed(=%d) to send mbx message to PF",
ret);
@@ -260,41 +234,10 @@
}
}
-/*
- * Case1: receive response after timeout, req_msg_data
- * is 0, not equal resp_msg, do lost--
- * Case2: receive last response during new send_mbx_msg,
- * req_msg_data is different with resp_msg, let
- * lost--, continue to wait for response.
- */
-static void
-hns3_update_resp_position(struct hns3_hw *hw, uint32_t resp_msg)
-{
- struct hns3_mbx_resp_status *resp = &hw->mbx_resp;
- uint32_t tail = resp->tail + 1;
-
- if (tail > resp->head)
- tail = resp->head;
- if (resp->req_msg_data != resp_msg) {
- if (resp->lost)
- resp->lost--;
- hns3_warn(hw, "Received a mismatched response req_msg(%x) "
- "resp_msg(%x) head(%u) tail(%u) lost(%u)",
- resp->req_msg_data, resp_msg, resp->head, tail,
- resp->lost);
- } else if (tail + resp->lost > resp->head) {
- resp->lost--;
- hns3_warn(hw, "Received a new response again resp_msg(%x) "
- "head(%u) tail(%u) lost(%u)", resp_msg,
- resp->head, tail, resp->lost);
- }
- rte_io_wmb();
- resp->tail = tail;
-}
-
static void
hns3_handle_mbx_response(struct hns3_hw *hw, struct hns3_mbx_pf_to_vf_cmd *req)
{
+#define HNS3_MBX_RESP_CODE_OFFSET 16
struct hns3_mbx_resp_status *resp = &hw->mbx_resp;
uint32_t msg_data;
@@ -304,12 +247,6 @@
* match_id to its response. So VF could use the match_id
* to match the request.
*/
- if (resp->matching_scheme !=
- HNS3_MBX_RESP_MATCHING_SCHEME_OF_MATCH_ID) {
- resp->matching_scheme =
- HNS3_MBX_RESP_MATCHING_SCHEME_OF_MATCH_ID;
- hns3_info(hw, "detect mailbox support match id!");
- }
if (req->match_id == resp->match_id) {
resp->resp_status = hns3_resp_to_errno(req->msg[3]);
memcpy(resp->additional_info, &req->msg[4],
@@ -325,11 +262,19 @@
* support copy request's match_id to its response. So VF follows the
* original scheme to process.
*/
+ msg_data = (uint32_t)req->msg[1] << HNS3_MBX_RESP_CODE_OFFSET | req->msg[2];
+ if (resp->req_msg_data != msg_data) {
+ hns3_warn(hw,
+ "received response tag (%u) is mismatched with requested tag (%u)",
+ msg_data, resp->req_msg_data);
+ return;
+ }
+
resp->resp_status = hns3_resp_to_errno(req->msg[3]);
memcpy(resp->additional_info, &req->msg[4],
HNS3_MBX_MAX_RESP_DATA_SIZE);
- msg_data = (uint32_t)req->msg[1] << 16 | req->msg[2];
- hns3_update_resp_position(hw, msg_data);
+ rte_io_wmb();
+ resp->received_match_resp = true;
}
static void
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_mbx.h dpdk-20.11.10/drivers/net/hns3/hns3_mbx.h
--- dpdk-20.11.9/drivers/net/hns3/hns3_mbx.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_mbx.h 2023-12-12 10:30:50.000000000 +0000
@@ -83,21 +83,11 @@
#define HNS3_MBX_MAX_MSG_SIZE 16
#define HNS3_MBX_MAX_RESP_DATA_SIZE 8
-enum {
- HNS3_MBX_RESP_MATCHING_SCHEME_OF_ORIGINAL = 0,
- HNS3_MBX_RESP_MATCHING_SCHEME_OF_MATCH_ID
-};
-
struct hns3_mbx_resp_status {
rte_spinlock_t lock; /* protects against contending sync cmd resp */
- uint8_t matching_scheme;
-
/* The following fields used in the matching scheme for original */
uint32_t req_msg_data;
- uint32_t head;
- uint32_t tail;
- uint32_t lost;
/* The following fields used in the matching scheme for match_id */
uint16_t match_id;
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_rss.c dpdk-20.11.10/drivers/net/hns3/hns3_rss.c
--- dpdk-20.11.9/drivers/net/hns3/hns3_rss.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_rss.c 2023-12-12 10:30:50.000000000 +0000
@@ -283,7 +283,7 @@
* rss_generic_config command function, opcode:0x0D01.
* Used to set algorithm and hash key of RSS.
*/
-int
+static int
hns3_set_rss_algo_key(struct hns3_hw *hw, uint8_t hash_algo,
const uint8_t *key, uint8_t key_len)
{
@@ -324,7 +324,7 @@
return 0;
}
-int
+static int
hns3_rss_get_algo_key(struct hns3_hw *hw, uint8_t *hash_algo,
uint8_t *key, uint8_t key_len)
{
@@ -771,7 +771,7 @@
{
struct hns3_adapter *hns = dev->data->dev_private;
struct hns3_hw *hw = &hns->hw;
- uint8_t hash_algo;
+ uint8_t hash_algo = 0;
int ret;
rte_spinlock_lock(&hw->lock);
@@ -993,7 +993,7 @@
{
uint8_t rss_key[HNS3_RSS_KEY_SIZE_MAX] = {0};
bool modify_key, modify_algo;
- uint8_t hash_algo;
+ uint8_t hash_algo = 0;
int ret;
modify_key = (key != NULL && key_len > 0);
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_rss.h dpdk-20.11.10/drivers/net/hns3/hns3_rss.h
--- dpdk-20.11.9/drivers/net/hns3/hns3_rss.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_rss.h 2023-12-12 10:30:50.000000000 +0000
@@ -194,11 +194,7 @@
int hns3_set_rss_tuple_by_rss_hf(struct hns3_hw *hw, uint64_t rss_hf);
int hns3_set_rss_tuple_field(struct hns3_hw *hw, uint64_t tuple_fields);
int hns3_get_rss_tuple_field(struct hns3_hw *hw, uint64_t *tuple_fields);
-int hns3_set_rss_algo_key(struct hns3_hw *hw, uint8_t hash_algo,
- const uint8_t *key, uint8_t key_len);
int hns3_restore_filter(struct hns3_adapter *hns);
-int hns3_rss_get_algo_key(struct hns3_hw *hw, uint8_t *hash_algo,
- uint8_t *key, uint8_t key_len);
uint64_t hns3_rss_calc_tuple_filed(uint64_t rss_hf);
int hns3_update_rss_algo_key(struct hns3_hw *hw, uint8_t hash_algo,
uint8_t *key, uint8_t key_len);
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_rxtx.c dpdk-20.11.10/drivers/net/hns3/hns3_rxtx.c
--- dpdk-20.11.9/drivers/net/hns3/hns3_rxtx.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_rxtx.c 2023-12-12 10:30:50.000000000 +0000
@@ -55,7 +55,7 @@
}
}
for (i = 0; i < rxq->rx_rearm_nb; i++)
- rxq->sw_ring[rxq->rx_rearm_start + i].mbuf = NULL;
+ rxq->sw_ring[(rxq->rx_rearm_start + i) % rxq->nb_rx_desc].mbuf = NULL;
}
for (i = 0; i < rxq->bulk_mbuf_num; i++)
@@ -1788,6 +1788,12 @@
return -EINVAL;
}
+ if (conf->rx_free_thresh >= nb_desc) {
+ hns3_err(hw, "rx_free_thresh (%u) must be less than %u",
+ conf->rx_free_thresh, nb_desc);
+ return -EINVAL;
+ }
+
if (conf->rx_drop_en == 0)
hns3_warn(hw, "if no descriptors available, packets are always "
"dropped and rx_drop_en (1) is fixed on");
@@ -2788,6 +2794,9 @@
struct hns3_cmd_desc desc;
int ret;
+ if (!hns3_dev_gro_supported(hw))
+ return 0;
+
hns3_cmd_setup_basic_desc(&desc, HNS3_OPC_GRO_GENERIC_CONFIG, false);
req = (struct hns3_cfg_gro_status_cmd *)desc.data;
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_rxtx_vec.c dpdk-20.11.10/drivers/net/hns3/hns3_rxtx_vec.c
--- dpdk-20.11.9/drivers/net/hns3/hns3_rxtx_vec.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_rxtx_vec.c 2023-12-12 10:30:50.000000000 +0000
@@ -57,6 +57,11 @@
if (unlikely(rte_mempool_get_bulk(rxq->mb_pool, (void *)rxep,
HNS3_DEFAULT_RXQ_REARM_THRESH) < 0)) {
+ /*
+ * Clear VLD bit for the first descriptor rearmed in case
+ * of going to receive packets later.
+ */
+ rxdp[0].rx.bd_base_info = 0;
rte_eth_devices[rxq->port_id].data->rx_mbuf_alloc_failed++;
return;
}
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_rxtx_vec_neon.h dpdk-20.11.10/drivers/net/hns3/hns3_rxtx_vec_neon.h
--- dpdk-20.11.9/drivers/net/hns3/hns3_rxtx_vec_neon.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_rxtx_vec_neon.h 2023-12-12 10:30:50.000000000 +0000
@@ -168,19 +168,12 @@
bd_vld = vset_lane_u16(rxdp[2].rx.bdtype_vld_udp0, bd_vld, 2);
bd_vld = vset_lane_u16(rxdp[3].rx.bdtype_vld_udp0, bd_vld, 3);
- /* load 2 mbuf pointer */
- mbp1 = vld1q_u64((uint64_t *)&sw_ring[pos]);
-
bd_vld = vshl_n_u16(bd_vld,
HNS3_UINT16_BIT - 1 - HNS3_RXD_VLD_B);
bd_vld = vreinterpret_u16_s16(
vshr_n_s16(vreinterpret_s16_u16(bd_vld),
HNS3_UINT16_BIT - 1));
stat = ~vget_lane_u64(vreinterpret_u64_u16(bd_vld), 0);
-
- /* load 2 mbuf pointer again */
- mbp2 = vld1q_u64((uint64_t *)&sw_ring[pos + 2]);
-
if (likely(stat == 0))
bd_valid_num = HNS3_DEFAULT_DESCS_PER_LOOP;
else
@@ -188,20 +181,20 @@
if (bd_valid_num == 0)
break;
- /* use offset to control below data load oper ordering */
- offset = rxq->offset_table[bd_valid_num];
+ /* load 4 mbuf pointer */
+ mbp1 = vld1q_u64((uint64_t *)&sw_ring[pos]);
+ mbp2 = vld1q_u64((uint64_t *)&sw_ring[pos + 2]);
- /* store 2 mbuf pointer into rx_pkts */
+ /* store 4 mbuf pointer into rx_pkts */
vst1q_u64((uint64_t *)&rx_pkts[pos], mbp1);
+ vst1q_u64((uint64_t *)&rx_pkts[pos + 2], mbp2);
- /* read first two descs */
+ /* use offset to control below data load oper ordering */
+ offset = rxq->offset_table[bd_valid_num];
+
+ /* read 4 descs */
descs[0] = vld2q_u64((uint64_t *)(rxdp + offset));
descs[1] = vld2q_u64((uint64_t *)(rxdp + offset + 1));
-
- /* store 2 mbuf pointer into rx_pkts again */
- vst1q_u64((uint64_t *)&rx_pkts[pos + 2], mbp2);
-
- /* read remains two descs */
descs[2] = vld2q_u64((uint64_t *)(rxdp + offset + 2));
descs[3] = vld2q_u64((uint64_t *)(rxdp + offset + 3));
@@ -209,56 +202,47 @@
pkt_mbuf1.val[1] = vreinterpretq_u8_u64(descs[0].val[1]);
pkt_mbuf2.val[0] = vreinterpretq_u8_u64(descs[1].val[0]);
pkt_mbuf2.val[1] = vreinterpretq_u8_u64(descs[1].val[1]);
+ pkt_mbuf3.val[0] = vreinterpretq_u8_u64(descs[2].val[0]);
+ pkt_mbuf3.val[1] = vreinterpretq_u8_u64(descs[2].val[1]);
+ pkt_mbuf4.val[0] = vreinterpretq_u8_u64(descs[3].val[0]);
+ pkt_mbuf4.val[1] = vreinterpretq_u8_u64(descs[3].val[1]);
- /* pkt 1,2 convert format from desc to pktmbuf */
+ /* 4 packets convert format from desc to pktmbuf */
pkt_mb1 = vqtbl2q_u8(pkt_mbuf1, shuf_desc_fields_msk);
pkt_mb2 = vqtbl2q_u8(pkt_mbuf2, shuf_desc_fields_msk);
+ pkt_mb3 = vqtbl2q_u8(pkt_mbuf3, shuf_desc_fields_msk);
+ pkt_mb4 = vqtbl2q_u8(pkt_mbuf4, shuf_desc_fields_msk);
- /* store the first 8 bytes of pkt 1,2 mbuf's rearm_data */
- *(uint64_t *)&sw_ring[pos + 0].mbuf->rearm_data =
- rxq->mbuf_initializer;
- *(uint64_t *)&sw_ring[pos + 1].mbuf->rearm_data =
- rxq->mbuf_initializer;
-
- /* pkt 1,2 remove crc */
+ /* 4 packets remove crc */
tmp = vsubq_u16(vreinterpretq_u16_u8(pkt_mb1), crc_adjust);
pkt_mb1 = vreinterpretq_u8_u16(tmp);
tmp = vsubq_u16(vreinterpretq_u16_u8(pkt_mb2), crc_adjust);
pkt_mb2 = vreinterpretq_u8_u16(tmp);
+ tmp = vsubq_u16(vreinterpretq_u16_u8(pkt_mb3), crc_adjust);
+ pkt_mb3 = vreinterpretq_u8_u16(tmp);
+ tmp = vsubq_u16(vreinterpretq_u16_u8(pkt_mb4), crc_adjust);
+ pkt_mb4 = vreinterpretq_u8_u16(tmp);
- pkt_mbuf3.val[0] = vreinterpretq_u8_u64(descs[2].val[0]);
- pkt_mbuf3.val[1] = vreinterpretq_u8_u64(descs[2].val[1]);
- pkt_mbuf4.val[0] = vreinterpretq_u8_u64(descs[3].val[0]);
- pkt_mbuf4.val[1] = vreinterpretq_u8_u64(descs[3].val[1]);
-
- /* pkt 3,4 convert format from desc to pktmbuf */
- pkt_mb3 = vqtbl2q_u8(pkt_mbuf3, shuf_desc_fields_msk);
- pkt_mb4 = vqtbl2q_u8(pkt_mbuf4, shuf_desc_fields_msk);
-
- /* pkt 1,2 save to rx_pkts mbuf */
+ /* save packet info to rx_pkts mbuf */
vst1q_u8((void *)&sw_ring[pos + 0].mbuf->rx_descriptor_fields1,
pkt_mb1);
vst1q_u8((void *)&sw_ring[pos + 1].mbuf->rx_descriptor_fields1,
pkt_mb2);
+ vst1q_u8((void *)&sw_ring[pos + 2].mbuf->rx_descriptor_fields1,
+ pkt_mb3);
+ vst1q_u8((void *)&sw_ring[pos + 3].mbuf->rx_descriptor_fields1,
+ pkt_mb4);
- /* pkt 3,4 remove crc */
- tmp = vsubq_u16(vreinterpretq_u16_u8(pkt_mb3), crc_adjust);
- pkt_mb3 = vreinterpretq_u8_u16(tmp);
- tmp = vsubq_u16(vreinterpretq_u16_u8(pkt_mb4), crc_adjust);
- pkt_mb4 = vreinterpretq_u8_u16(tmp);
-
- /* store the first 8 bytes of pkt 3,4 mbuf's rearm_data */
+ /* store the first 8 bytes of packets mbuf's rearm_data */
+ *(uint64_t *)&sw_ring[pos + 0].mbuf->rearm_data =
+ rxq->mbuf_initializer;
+ *(uint64_t *)&sw_ring[pos + 1].mbuf->rearm_data =
+ rxq->mbuf_initializer;
*(uint64_t *)&sw_ring[pos + 2].mbuf->rearm_data =
rxq->mbuf_initializer;
*(uint64_t *)&sw_ring[pos + 3].mbuf->rearm_data =
rxq->mbuf_initializer;
- /* pkt 3,4 save to rx_pkts mbuf */
- vst1q_u8((void *)&sw_ring[pos + 2].mbuf->rx_descriptor_fields1,
- pkt_mb3);
- vst1q_u8((void *)&sw_ring[pos + 3].mbuf->rx_descriptor_fields1,
- pkt_mb4);
-
rte_prefetch_non_temporal(rxdp + HNS3_DEFAULT_DESCS_PER_LOOP);
parse_retcode = hns3_desc_parse_field(rxq, &sw_ring[pos],
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_rxtx_vec_sve.c dpdk-20.11.10/drivers/net/hns3/hns3_rxtx_vec_sve.c
--- dpdk-20.11.9/drivers/net/hns3/hns3_rxtx_vec_sve.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_rxtx_vec_sve.c 2023-12-12 10:30:50.000000000 +0000
@@ -243,6 +243,11 @@
if (unlikely(rte_mempool_get_bulk(rxq->mb_pool, (void *)rxep,
HNS3_DEFAULT_RXQ_REARM_THRESH) < 0)) {
+ /*
+ * Clear VLD bit for the first descriptor rearmed in case
+ * of going to receive packets later.
+ */
+ rxdp[0].rx.bd_base_info = 0;
rte_eth_devices[rxq->port_id].data->rx_mbuf_alloc_failed++;
return;
}
diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_stats.c dpdk-20.11.10/drivers/net/hns3/hns3_stats.c
--- dpdk-20.11.9/drivers/net/hns3/hns3_stats.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/hns3/hns3_stats.c 2023-12-12 10:30:50.000000000 +0000
@@ -1144,9 +1144,15 @@
hns3_stats_init(struct hns3_hw *hw)
{
struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
+ int ret;
- if (!hns->is_vf)
- hns3_mac_stats_reset(hw);
+ if (!hns->is_vf) {
+ ret = hns3_mac_stats_reset(hw);
+ if (ret) {
+ hns3_err(hw, "reset mac stats failed, ret = %d", ret);
+ return ret;
+ }
+ }
return hns3_tqp_stats_init(hw);
}
diff -Nru dpdk-20.11.9/drivers/net/i40e/i40e_ethdev.c dpdk-20.11.10/drivers/net/i40e/i40e_ethdev.c
--- dpdk-20.11.9/drivers/net/i40e/i40e_ethdev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/i40e/i40e_ethdev.c 2023-12-12 10:30:50.000000000 +0000
@@ -6080,14 +6080,16 @@
}
}
- /* MAC/VLAN configuration */
- rte_memcpy(&filter.mac_addr, &broadcast, RTE_ETHER_ADDR_LEN);
- filter.filter_type = I40E_MACVLAN_PERFECT_MATCH;
+ if (vsi->type != I40E_VSI_FDIR) {
+ /* MAC/VLAN configuration for non-FDIR VSI*/
+ rte_memcpy(&filter.mac_addr, &broadcast, RTE_ETHER_ADDR_LEN);
+ filter.filter_type = I40E_MACVLAN_PERFECT_MATCH;
- ret = i40e_vsi_add_mac(vsi, &filter);
- if (ret != I40E_SUCCESS) {
- PMD_DRV_LOG(ERR, "Failed to add MACVLAN filter");
- goto fail_msix_alloc;
+ ret = i40e_vsi_add_mac(vsi, &filter);
+ if (ret != I40E_SUCCESS) {
+ PMD_DRV_LOG(ERR, "Failed to add MACVLAN filter");
+ goto fail_msix_alloc;
+ }
}
/* Get VSI BW information */
diff -Nru dpdk-20.11.9/drivers/net/i40e/i40e_rxtx.c dpdk-20.11.10/drivers/net/i40e/i40e_rxtx.c
--- dpdk-20.11.9/drivers/net/i40e/i40e_rxtx.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/i40e/i40e_rxtx.c 2023-12-12 10:30:50.000000000 +0000
@@ -1818,6 +1818,12 @@
if (use_def_burst_func)
ad->rx_bulk_alloc_allowed = false;
i40e_set_rx_function(dev);
+
+ if (ad->rx_vec_allowed && i40e_rxq_vec_setup(rxq)) {
+ PMD_DRV_LOG(ERR, "Failed vector rx setup.");
+ return -EINVAL;
+ }
+
return 0;
} else if (ad->rx_vec_allowed && !rte_is_power_of_2(rxq->nb_rx_desc)) {
PMD_DRV_LOG(ERR, "Vector mode is allowed, but descriptor"
diff -Nru dpdk-20.11.9/drivers/net/i40e/i40e_rxtx_vec_common.h dpdk-20.11.10/drivers/net/i40e/i40e_rxtx_vec_common.h
--- dpdk-20.11.9/drivers/net/i40e/i40e_rxtx_vec_common.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/i40e/i40e_rxtx_vec_common.h 2023-12-12 10:30:50.000000000 +0000
@@ -186,6 +186,7 @@
rte_compiler_barrier();
p = (uintptr_t)&mb_def.rearm_data;
rxq->mbuf_initializer = *(uint64_t *)p;
+ rxq->rx_using_sse = 1;
return 0;
}
diff -Nru dpdk-20.11.9/drivers/net/iavf/iavf_ethdev.c dpdk-20.11.10/drivers/net/iavf/iavf_ethdev.c
--- dpdk-20.11.9/drivers/net/iavf/iavf_ethdev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/iavf/iavf_ethdev.c 2023-12-12 10:30:50.000000000 +0000
@@ -843,6 +843,8 @@
.nb_max = IAVF_MAX_RING_DESC,
.nb_min = IAVF_MIN_RING_DESC,
.nb_align = IAVF_ALIGN_RING_DESC,
+ .nb_mtu_seg_max = IAVF_TX_MAX_MTU_SEG,
+ .nb_seg_max = IAVF_MAX_RING_DESC,
};
return 0;
@@ -1013,6 +1015,7 @@
struct iavf_adapter *adapter =
IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(adapter);
+ struct rte_eth_conf *dev_conf = &dev->data->dev_conf;
int err;
if (!(vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN))
@@ -1021,6 +1024,23 @@
err = iavf_add_del_vlan(adapter, vlan_id, on);
if (err)
return -EIO;
+
+ /* For i40e kernel driver which only supports vlan(v1) VIRTCHNL OP,
+ * it will set strip on when setting filter on but dpdk side will not
+ * change strip flag. To be consistent with dpdk side, disable strip
+ * again.
+ *
+ * For i40e kernel driver which supports vlan v2, dpdk will invoke vlan v2
+ * related function, so it won't go through here.
+ */
+ if (adapter->hw.mac.type == IAVF_MAC_XL710 ||
+ adapter->hw.mac.type == IAVF_MAC_X722_VF) {
+ if (on && !(dev_conf->rxmode.offloads & DEV_RX_OFFLOAD_VLAN_STRIP)) {
+ err = iavf_disable_vlan_strip(adapter);
+ if (err)
+ return -EIO;
+ }
+ }
return 0;
}
@@ -2058,6 +2078,8 @@
return ret;
}
+ iavf_dev_stats_reset(eth_dev);
+
return 0;
}
diff -Nru dpdk-20.11.9/drivers/net/iavf/iavf_rxtx.c dpdk-20.11.10/drivers/net/iavf/iavf_rxtx.c
--- dpdk-20.11.9/drivers/net/iavf/iavf_rxtx.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/iavf/iavf_rxtx.c 2023-12-12 10:30:50.000000000 +0000
@@ -2347,15 +2347,12 @@
/* TX prep functions */
uint16_t
-iavf_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
- uint16_t nb_pkts)
+iavf_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
{
int i, ret;
uint64_t ol_flags;
struct rte_mbuf *m;
struct iavf_tx_queue *txq = tx_queue;
- struct rte_eth_dev *dev = &rte_eth_devices[txq->port_id];
- uint16_t max_frame_size = dev->data->mtu + IAVF_ETH_OVERHEAD;
for (i = 0; i < nb_pkts; i++) {
m = tx_pkts[i];
@@ -2368,7 +2365,8 @@
return i;
}
} else if ((m->tso_segsz < IAVF_MIN_TSO_MSS) ||
- (m->tso_segsz > IAVF_MAX_TSO_MSS)) {
+ (m->tso_segsz > IAVF_MAX_TSO_MSS) ||
+ (m->nb_segs > txq->nb_tx_desc)) {
/* MSS outside the range are considered malicious */
rte_errno = EINVAL;
return i;
@@ -2379,11 +2377,8 @@
return i;
}
- /* check the data_len in mbuf */
- if (m->data_len < IAVF_TX_MIN_PKT_LEN ||
- m->data_len > max_frame_size) {
+ if (m->pkt_len < IAVF_TX_MIN_PKT_LEN) {
rte_errno = EINVAL;
- PMD_DRV_LOG(ERR, "INVALID mbuf: bad data_len=[%hu]", m->data_len);
return i;
}
diff -Nru dpdk-20.11.9/drivers/net/ice/ice_dcf_ethdev.c dpdk-20.11.10/drivers/net/ice/ice_dcf_ethdev.c
--- dpdk-20.11.9/drivers/net/ice/ice_dcf_ethdev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/ice/ice_dcf_ethdev.c 2023-12-12 10:30:50.000000000 +0000
@@ -940,6 +940,8 @@
return -1;
}
+ ice_dcf_stats_reset(eth_dev);
+
return 0;
}
diff -Nru dpdk-20.11.9/drivers/net/ice/ice_ethdev.c dpdk-20.11.10/drivers/net/ice/ice_ethdev.c
--- dpdk-20.11.9/drivers/net/ice/ice_ethdev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/ice/ice_ethdev.c 2023-12-12 10:30:50.000000000 +0000
@@ -3506,6 +3506,8 @@
if (link_status.link_info & ICE_AQ_LINK_UP)
pf->init_link_up = true;
+ else
+ pf->init_link_up = false;
}
static int
@@ -3716,6 +3718,8 @@
.nb_max = ICE_MAX_RING_DESC,
.nb_min = ICE_MIN_RING_DESC,
.nb_align = ICE_ALIGN_RING_DESC,
+ .nb_mtu_seg_max = ICE_TX_MTU_SEG_MAX,
+ .nb_seg_max = ICE_MAX_RING_DESC,
};
dev_info->speed_capa = ETH_LINK_SPEED_10M |
@@ -3781,8 +3785,8 @@
static int
ice_link_update(struct rte_eth_dev *dev, int wait_to_complete)
{
-#define CHECK_INTERVAL 100 /* 100ms */
-#define MAX_REPEAT_TIME 10 /* 1s (10 * 100ms) in total */
+#define CHECK_INTERVAL 50 /* 50ms */
+#define MAX_REPEAT_TIME 40 /* 2s (40 * 50ms) in total */
struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
struct ice_link_status link_status;
struct rte_eth_link link, old;
diff -Nru dpdk-20.11.9/drivers/net/ice/ice_rxtx.c dpdk-20.11.10/drivers/net/ice/ice_rxtx.c
--- dpdk-20.11.9/drivers/net/ice/ice_rxtx.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/ice/ice_rxtx.c 2023-12-12 10:30:50.000000000 +0000
@@ -3227,23 +3227,34 @@
}
uint16_t
-ice_prep_pkts(__rte_unused void *tx_queue, struct rte_mbuf **tx_pkts,
+ice_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
uint16_t nb_pkts)
{
int i, ret;
uint64_t ol_flags;
struct rte_mbuf *m;
- struct ice_tx_queue *txq = tx_queue;
- struct rte_eth_dev *dev = &rte_eth_devices[txq->port_id];
- uint16_t max_frame_size = dev->data->mtu + ICE_ETH_OVERHEAD;
for (i = 0; i < nb_pkts; i++) {
m = tx_pkts[i];
ol_flags = m->ol_flags;
- if (ol_flags & PKT_TX_TCP_SEG &&
+ if (!(ol_flags & PKT_TX_TCP_SEG) &&
+ /**
+ * No TSO case: nb->segs, pkt_len to not exceed
+ * the limites.
+ */
+ (m->nb_segs > ICE_TX_MTU_SEG_MAX ||
+ m->pkt_len > ICE_FRAME_SIZE_MAX)) {
+ rte_errno = EINVAL;
+ return i;
+ } else if (ol_flags & PKT_TX_TCP_SEG &&
+ /** TSO case: tso_segsz, nb_segs, pkt_len not exceed
+ * the limits.
+ */
(m->tso_segsz < ICE_MIN_TSO_MSS ||
m->tso_segsz > ICE_MAX_TSO_MSS ||
+ m->nb_segs >
+ ((struct ice_tx_queue *)tx_queue)->nb_tx_desc ||
m->pkt_len > ICE_MAX_TSO_FRAME_SIZE)) {
/**
* MSS outside the range are considered malicious
@@ -3252,11 +3263,8 @@
return i;
}
- /* check the data_len in mbuf */
- if (m->data_len < ICE_TX_MIN_PKT_LEN ||
- m->data_len > max_frame_size) {
+ if (m->pkt_len < ICE_TX_MIN_PKT_LEN) {
rte_errno = EINVAL;
- PMD_DRV_LOG(ERR, "INVALID mbuf: bad data_len=[%hu]", m->data_len);
return i;
}
@@ -3275,7 +3283,6 @@
if (ice_check_empty_mbuf(m) != 0) {
rte_errno = EINVAL;
- PMD_DRV_LOG(ERR, "INVALID mbuf: last mbuf data_len=[0]");
return i;
}
}
diff -Nru dpdk-20.11.9/drivers/net/ice/ice_rxtx.h dpdk-20.11.10/drivers/net/ice/ice_rxtx.h
--- dpdk-20.11.9/drivers/net/ice/ice_rxtx.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/ice/ice_rxtx.h 2023-12-12 10:30:50.000000000 +0000
@@ -45,6 +45,8 @@
/* Max data buffer size must be 16K - 128 bytes */
#define ICE_RX_MAX_DATA_BUF_SIZE (16 * 1024 - 128)
+#define ICE_TX_MTU_SEG_MAX 8
+
typedef void (*ice_rx_release_mbufs_t)(struct ice_rx_queue *rxq);
typedef void (*ice_tx_release_mbufs_t)(struct ice_tx_queue *txq);
typedef void (*ice_rxd_to_pkt_fields_t)(struct ice_rx_queue *rxq,
diff -Nru dpdk-20.11.9/drivers/net/mlx5/linux/mlx5_ethdev_os.c dpdk-20.11.10/drivers/net/mlx5/linux/mlx5_ethdev_os.c
--- dpdk-20.11.9/drivers/net/mlx5/linux/mlx5_ethdev_os.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/mlx5/linux/mlx5_ethdev_os.c 2023-12-12 10:30:50.000000000 +0000
@@ -1122,6 +1122,7 @@
line_size = getline(&port_name, &port_name_size, file);
if (line_size < 0) {
+ free(port_name);
fclose(file);
rte_errno = errno;
return -rte_errno;
diff -Nru dpdk-20.11.9/drivers/net/mlx5/linux/mlx5_os.c dpdk-20.11.10/drivers/net/mlx5/linux/mlx5_os.c
--- dpdk-20.11.9/drivers/net/mlx5/linux/mlx5_os.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/mlx5/linux/mlx5_os.c 2023-12-12 10:30:50.000000000 +0000
@@ -1202,7 +1202,7 @@
config->mprq.log_min_stride_wqe_size =
MLX5_MPRQ_LOG_MIN_STRIDE_WQE_SIZE;
config->mprq.log_stride_num = MLX5_MPRQ_DEFAULT_LOG_STRIDE_NUM;
- config->mprq.log_stride_size = MLX5_MPRQ_DEFAULT_LOG_STRIDE_SIZE;
+ config->mprq.log_stride_size = MLX5_ARG_UNSET;
if (config->devx) {
config->mprq.log_min_stride_wqe_size =
config->hca_attr.log_min_stride_wqe_sz;
diff -Nru dpdk-20.11.9/drivers/net/mlx5/mlx5_flow_dv.c dpdk-20.11.10/drivers/net/mlx5/mlx5_flow_dv.c
--- dpdk-20.11.9/drivers/net/mlx5/mlx5_flow_dv.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/mlx5/mlx5_flow_dv.c 2023-12-12 10:30:50.000000000 +0000
@@ -3432,6 +3432,7 @@
{
struct rte_ether_hdr *eth = NULL;
struct rte_vlan_hdr *vlan = NULL;
+ struct rte_ipv4_hdr *ipv4 = NULL;
struct rte_ipv6_hdr *ipv6 = NULL;
struct rte_udp_hdr *udp = NULL;
char *next_hdr;
@@ -3448,24 +3449,27 @@
next_hdr += sizeof(struct rte_vlan_hdr);
}
- /* HW calculates IPv4 csum. no need to proceed */
- if (proto == RTE_ETHER_TYPE_IPV4)
- return 0;
-
/* non IPv4/IPv6 header. not supported */
- if (proto != RTE_ETHER_TYPE_IPV6) {
+ if (proto != RTE_ETHER_TYPE_IPV4 && proto != RTE_ETHER_TYPE_IPV6) {
return rte_flow_error_set(error, ENOTSUP,
RTE_FLOW_ERROR_TYPE_ACTION,
NULL, "Cannot offload non IPv4/IPv6");
}
- ipv6 = (struct rte_ipv6_hdr *)next_hdr;
-
- /* ignore non UDP */
- if (ipv6->proto != IPPROTO_UDP)
- return 0;
+ if (proto == RTE_ETHER_TYPE_IPV4) {
+ ipv4 = (struct rte_ipv4_hdr *)next_hdr;
+ /* ignore non UDP */
+ if (ipv4->next_proto_id != IPPROTO_UDP)
+ return 0;
+ udp = (struct rte_udp_hdr *)(ipv4 + 1);
+ } else {
+ ipv6 = (struct rte_ipv6_hdr *)next_hdr;
+ /* ignore non UDP */
+ if (ipv6->proto != IPPROTO_UDP)
+ return 0;
+ udp = (struct rte_udp_hdr *)(ipv6 + 1);
+ }
- udp = (struct rte_udp_hdr *)(ipv6 + 1);
udp->dgram_cksum = 0;
return 0;
diff -Nru dpdk-20.11.9/drivers/net/mlx5/mlx5_rxq.c dpdk-20.11.10/drivers/net/mlx5/mlx5_rxq.c
--- dpdk-20.11.9/drivers/net/mlx5/mlx5_rxq.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/mlx5/mlx5_rxq.c 2023-12-12 10:30:50.000000000 +0000
@@ -1447,18 +1447,19 @@
*actual_log_stride_num = config->mprq.log_stride_num;
}
/* Checks if chosen size of stride is in supported range. */
- if (config->mprq.log_stride_size > log_max_stride_size ||
- config->mprq.log_stride_size < log_min_stride_size) {
- *actual_log_stride_size = log_def_stride_size;
- DRV_LOG(WARNING,
- "Port %u Rx queue %u size of a stride for Multi-Packet RQ is out of range, setting default value (%u)",
- dev->data->port_id, idx,
- RTE_BIT32(log_def_stride_size));
+ if (config->mprq.log_stride_size != (uint32_t)MLX5_ARG_UNSET) {
+ if (config->mprq.log_stride_size > log_max_stride_size ||
+ config->mprq.log_stride_size < log_min_stride_size) {
+ *actual_log_stride_size = log_def_stride_size;
+ DRV_LOG(WARNING,
+ "Port %u Rx queue %u size of a stride for Multi-Packet RQ is out of range, setting default value (%u)",
+ dev->data->port_id, idx,
+ RTE_BIT32(log_def_stride_size));
+ } else {
+ *actual_log_stride_size = config->mprq.log_stride_size;
+ }
} else {
- *actual_log_stride_size = config->mprq.log_stride_size;
- }
- /* Make the stride fit the mbuf size by default. */
- if (*actual_log_stride_size == MLX5_MPRQ_DEFAULT_LOG_STRIDE_SIZE) {
+ /* Make the stride fit the mbuf size by default. */
if (min_mbuf_size <= RTE_BIT32(log_max_stride_size)) {
DRV_LOG(WARNING,
"Port %u Rx queue %u size of a stride for Multi-Packet RQ is adjusted to match the mbuf size (%u)",
@@ -1517,6 +1518,8 @@
" min_stride_sz = %u, max_stride_sz = %u).\n"
"Rx segment is %senabled. External mempool is %sused.",
dev->data->port_id, min_mbuf_size, desc, priv->rxqs_n,
+ config->mprq.log_stride_size == (uint32_t)MLX5_ARG_UNSET ?
+ RTE_BIT32(MLX5_MPRQ_DEFAULT_LOG_STRIDE_SIZE) :
RTE_BIT32(config->mprq.log_stride_size),
RTE_BIT32(config->mprq.log_stride_num),
config->mprq.min_rxqs_num,
diff -Nru dpdk-20.11.9/drivers/net/mlx5/mlx5_rxtx.c dpdk-20.11.10/drivers/net/mlx5/mlx5_rxtx.c
--- dpdk-20.11.9/drivers/net/mlx5/mlx5_rxtx.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/mlx5/mlx5_rxtx.c 2023-12-12 10:30:50.000000000 +0000
@@ -3548,7 +3548,7 @@
uintptr_t start;
mbuf = loc->mbuf;
- nxlen = rte_pktmbuf_data_len(mbuf);
+ nxlen = rte_pktmbuf_data_len(mbuf) + vlan;
/*
* Packet length exceeds the allowed inline
* data length, check whether the minimal
diff -Nru dpdk-20.11.9/drivers/net/mlx5/mlx5_trigger.c dpdk-20.11.10/drivers/net/mlx5/mlx5_trigger.c
--- dpdk-20.11.9/drivers/net/mlx5/mlx5_trigger.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/mlx5/mlx5_trigger.c 2023-12-12 10:30:50.000000000 +0000
@@ -310,8 +310,8 @@
ret = mlx5_devx_cmd_modify_sq(sq, &sq_attr);
if (ret)
goto error;
- rq_attr.state = MLX5_SQC_STATE_RDY;
- rq_attr.rq_state = MLX5_SQC_STATE_RST;
+ rq_attr.state = MLX5_RQC_STATE_RDY;
+ rq_attr.rq_state = MLX5_RQC_STATE_RST;
rq_attr.hairpin_peer_sq = sq->id;
rq_attr.hairpin_peer_vhca = priv->config.hca_attr.vhca_id;
ret = mlx5_devx_cmd_modify_rq(rq, &rq_attr);
@@ -572,8 +572,8 @@
mlx5_rxq_release(dev, cur_queue);
return -rte_errno;
}
- rq_attr.state = MLX5_SQC_STATE_RDY;
- rq_attr.rq_state = MLX5_SQC_STATE_RST;
+ rq_attr.state = MLX5_RQC_STATE_RDY;
+ rq_attr.rq_state = MLX5_RQC_STATE_RST;
rq_attr.hairpin_peer_sq = peer_info->qp_id;
rq_attr.hairpin_peer_vhca = peer_info->vhca_id;
ret = mlx5_devx_cmd_modify_rq(rxq_ctrl->obj->rq, &rq_attr);
@@ -638,7 +638,7 @@
return -rte_errno;
}
sq_attr.state = MLX5_SQC_STATE_RST;
- sq_attr.sq_state = MLX5_SQC_STATE_RST;
+ sq_attr.sq_state = MLX5_SQC_STATE_RDY;
ret = mlx5_devx_cmd_modify_sq(txq_ctrl->obj->sq, &sq_attr);
if (ret == 0)
txq_ctrl->hairpin_status = 0;
@@ -674,8 +674,8 @@
mlx5_rxq_release(dev, cur_queue);
return -rte_errno;
}
- rq_attr.state = MLX5_SQC_STATE_RST;
- rq_attr.rq_state = MLX5_SQC_STATE_RST;
+ rq_attr.state = MLX5_RQC_STATE_RST;
+ rq_attr.rq_state = MLX5_RQC_STATE_RDY;
ret = mlx5_devx_cmd_modify_rq(rxq_ctrl->obj->rq, &rq_attr);
if (ret == 0)
rxq_ctrl->hairpin_status = 0;
@@ -820,6 +820,11 @@
txq_ctrl = mlx5_txq_get(dev, i);
if (txq_ctrl == NULL)
continue;
+ if (txq_ctrl->type != MLX5_TXQ_TYPE_HAIRPIN ||
+ txq_ctrl->hairpin_conf.peers[0].port != rx_port) {
+ mlx5_txq_release(dev, i);
+ continue;
+ }
rx_queue = txq_ctrl->hairpin_conf.peers[0].queue;
rte_eth_hairpin_queue_peer_unbind(rx_port, rx_queue, 0);
mlx5_hairpin_queue_peer_unbind(dev, i, 1);
diff -Nru dpdk-20.11.9/drivers/net/netvsc/hn_rndis.c dpdk-20.11.10/drivers/net/netvsc/hn_rndis.c
--- dpdk-20.11.9/drivers/net/netvsc/hn_rndis.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/netvsc/hn_rndis.c 2023-12-12 10:30:50.000000000 +0000
@@ -35,7 +35,7 @@
#include "hn_rndis.h"
#include "ndis.h"
-#define RNDIS_TIMEOUT_SEC 5
+#define RNDIS_TIMEOUT_SEC 60
#define RNDIS_DELAY_MS 10
#define HN_RNDIS_XFER_SIZE 0x4000
diff -Nru dpdk-20.11.9/drivers/net/nfp/nfp_net.c dpdk-20.11.10/drivers/net/nfp/nfp_net.c
--- dpdk-20.11.9/drivers/net/nfp/nfp_net.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/nfp/nfp_net.c 2023-12-12 10:30:50.000000000 +0000
@@ -537,7 +537,7 @@
nfp_set_mac_addr(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr)
{
struct nfp_net_hw *hw;
- uint32_t update, ctrl;
+ uint32_t update, new_ctrl;
hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);
if ((hw->ctrl & NFP_NET_CFG_CTRL_ENABLE) &&
@@ -552,14 +552,17 @@
/* Signal the NIC about the change */
update = NFP_NET_CFG_UPDATE_MACADDR;
- ctrl = hw->ctrl;
+ new_ctrl = hw->ctrl;
if ((hw->ctrl & NFP_NET_CFG_CTRL_ENABLE) &&
(hw->cap & NFP_NET_CFG_CTRL_LIVE_ADDR))
- ctrl |= NFP_NET_CFG_CTRL_LIVE_ADDR;
- if (nfp_net_reconfig(hw, ctrl, update) < 0) {
+ new_ctrl |= NFP_NET_CFG_CTRL_LIVE_ADDR;
+ if (nfp_net_reconfig(hw, new_ctrl, update) < 0) {
PMD_INIT_LOG(INFO, "MAC address update failed");
return -EIO;
}
+
+ hw->ctrl = new_ctrl;
+
return 0;
}
@@ -746,6 +749,8 @@
if (nfp_net_reconfig(hw, new_ctrl, update) < 0)
return -EIO;
+ hw->ctrl = new_ctrl;
+
/*
* Allocating rte mbufs for configured rx queues.
* This requires queues being enabled before
@@ -764,8 +769,6 @@
hw->pf_port_idx, 1);
}
- hw->ctrl = new_ctrl;
-
return 0;
error:
@@ -3040,6 +3043,8 @@
(void *)eth_dev);
/* Telling the firmware about the LSC interrupt entry */
nn_cfg_writeb(hw, NFP_NET_CFG_LSC, NFP_NET_IRQ_LSC_IDX);
+ /* Unmask the LSC interrupt */
+ nfp_net_irq_unmask(eth_dev);
/* Recording current stats counters values */
nfp_net_stats_reset(eth_dev);
}
@@ -3660,6 +3665,7 @@
int ret = -ENODEV;
int err;
int i;
+ uint32_t j;
if (!dev)
return ret;
@@ -3694,6 +3700,10 @@
return -EIO;
}
+ /* Force the physical port down to clear the possible DMA error */
+ for (j = 0; j < nfp_eth_table->count; j++)
+ nfp_eth_set_configured(cpp, nfp_eth_table->ports[j].index, 0);
+
if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
if (nfp_fw_setup(dev, cpp, nfp_eth_table, hwinfo)) {
PMD_DRV_LOG(INFO, "Error when uploading firmware");
diff -Nru dpdk-20.11.9/drivers/net/tap/rte_eth_tap.c dpdk-20.11.10/drivers/net/tap/rte_eth_tap.c
--- dpdk-20.11.9/drivers/net/tap/rte_eth_tap.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/tap/rte_eth_tap.c 2023-12-12 10:30:50.000000000 +0000
@@ -570,7 +570,7 @@
{
void *l3_hdr = packet + l2_len;
- if (ol_flags & (PKT_TX_IP_CKSUM | PKT_TX_IPV4)) {
+ if (ol_flags & PKT_TX_IP_CKSUM) {
struct rte_ipv4_hdr *iph = l3_hdr;
uint16_t cksum;
@@ -653,16 +653,25 @@
nb_segs = mbuf->nb_segs;
if (txq->csum &&
- ((mbuf->ol_flags & (PKT_TX_IP_CKSUM | PKT_TX_IPV4) ||
+ ((mbuf->ol_flags & PKT_TX_IP_CKSUM ||
(mbuf->ol_flags & PKT_TX_L4_MASK) == PKT_TX_UDP_CKSUM ||
(mbuf->ol_flags & PKT_TX_L4_MASK) == PKT_TX_TCP_CKSUM))) {
+ unsigned int l4_len = 0;
+
is_cksum = 1;
+ if ((mbuf->ol_flags & PKT_TX_L4_MASK) ==
+ PKT_TX_UDP_CKSUM)
+ l4_len = sizeof(struct rte_udp_hdr);
+ else if ((mbuf->ol_flags & PKT_TX_L4_MASK) ==
+ PKT_TX_TCP_CKSUM)
+ l4_len = sizeof(struct rte_tcp_hdr);
+
/* Support only packets with at least layer 4
* header included in the first segment
*/
seg_len = rte_pktmbuf_data_len(mbuf);
- l234_hlen = mbuf->l2_len + mbuf->l3_len + mbuf->l4_len;
+ l234_hlen = mbuf->l2_len + mbuf->l3_len + l4_len;
if (seg_len < l234_hlen)
return -1;
@@ -672,7 +681,7 @@
rte_memcpy(m_copy, rte_pktmbuf_mtod(mbuf, void *),
l234_hlen);
tap_tx_l3_cksum(m_copy, mbuf->ol_flags,
- mbuf->l2_len, mbuf->l3_len, mbuf->l4_len,
+ mbuf->l2_len, mbuf->l3_len, l4_len,
&l4_cksum, &l4_phdr_cksum,
&l4_raw_cksum);
iovecs[k].iov_base = m_copy;
@@ -2256,29 +2265,6 @@
return 0;
}
-static int parse_user_mac(struct rte_ether_addr *user_mac,
- const char *value)
-{
- unsigned int index = 0;
- char mac_temp[strlen(ETH_TAP_USR_MAC_FMT) + 1], *mac_byte = NULL;
-
- if (user_mac == NULL || value == NULL)
- return 0;
-
- strlcpy(mac_temp, value, sizeof(mac_temp));
- mac_byte = strtok(mac_temp, ":");
-
- while ((mac_byte != NULL) &&
- (strlen(mac_byte) <= 2) &&
- (strlen(mac_byte) == strspn(mac_byte,
- ETH_TAP_CMP_MAC_FMT))) {
- user_mac->addr_bytes[index++] = strtoul(mac_byte, NULL, 16);
- mac_byte = strtok(NULL, ":");
- }
-
- return index;
-}
-
static int
set_mac_type(const char *key __rte_unused,
const char *value,
@@ -2300,7 +2286,7 @@
goto success;
}
- if (parse_user_mac(user_mac, value) != 6)
+ if (rte_ether_unformat_addr(value, user_mac) < 0)
goto error;
success:
TAP_LOG(DEBUG, "TAP user MAC param (%s)", value);
diff -Nru dpdk-20.11.9/drivers/net/tap/tap_bpf_insns.h dpdk-20.11.10/drivers/net/tap/tap_bpf_insns.h
--- dpdk-20.11.9/drivers/net/tap/tap_bpf_insns.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/tap/tap_bpf_insns.h 2023-12-12 10:30:50.000000000 +0000
@@ -1,10 +1,10 @@
/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2017 Mellanox Technologies, Ltd
+ * Auto-generated from tap_bpf_program.c
+ * This not the original source file. Do NOT edit it.
*/
#include <tap_bpf.h>
-/* bpf_insn array matching cls_q section. See tap_bpf_program.c file */
static struct bpf_insn cls_q_insns[] = {
{0x61, 2, 1, 52, 0x00000000},
{0x18, 3, 0, 0, 0xdeadbeef},
@@ -23,18 +23,17 @@
{0x95, 0, 0, 0, 0x00000000},
};
-/* bpf_insn array matching l3_l4 section. see tap_bpf_program.c file */
static struct bpf_insn l3_l4_hash_insns[] = {
{0xbf, 7, 1, 0, 0x00000000},
- {0x61, 8, 7, 16, 0x00000000},
- {0x61, 6, 7, 76, 0x00000000},
+ {0x61, 6, 7, 16, 0x00000000},
+ {0x61, 8, 7, 76, 0x00000000},
{0x61, 9, 7, 80, 0x00000000},
{0x18, 1, 0, 0, 0xdeadbeef},
{0x00, 0, 0, 0, 0x00000000},
{0x63, 10, 1, -4, 0x00000000},
{0xbf, 2, 10, 0, 0x00000000},
{0x07, 2, 0, 0, 0xfffffffc},
- {0x18, 1, 1, 0, 0x0000cafe},
+ {0x18, 1, 0, 0, 0x00000000},
{0x00, 0, 0, 0, 0x00000000},
{0x85, 0, 0, 0, 0x00000001},
{0x55, 0, 0, 21, 0x00000000},
@@ -58,7 +57,7 @@
{0x07, 1, 0, 0, 0xffffffd0},
{0xb7, 2, 0, 0, 0x00000023},
{0x85, 0, 0, 0, 0x00000006},
- {0x05, 0, 0, 1632, 0x00000000},
+ {0x05, 0, 0, 1680, 0x00000000},
{0xb7, 1, 0, 0, 0x0000000e},
{0x61, 2, 7, 20, 0x00000000},
{0x15, 2, 0, 10, 0x00000000},
@@ -66,1630 +65,1678 @@
{0x55, 2, 0, 8, 0x0000a888},
{0xbf, 2, 7, 0, 0x00000000},
{0xb7, 7, 0, 0, 0x00000000},
- {0xbf, 1, 6, 0, 0x00000000},
+ {0xbf, 1, 8, 0, 0x00000000},
{0x07, 1, 0, 0, 0x00000012},
- {0x2d, 1, 9, 1622, 0x00000000},
+ {0x2d, 1, 9, 1670, 0x00000000},
{0xb7, 1, 0, 0, 0x00000012},
- {0x69, 8, 6, 16, 0x00000000},
+ {0x69, 6, 8, 16, 0x00000000},
{0xbf, 7, 2, 0, 0x00000000},
+ {0x57, 6, 0, 0, 0x0000ffff},
{0x7b, 10, 7, -56, 0x00000000},
- {0x57, 8, 0, 0, 0x0000ffff},
- {0x15, 8, 0, 409, 0x0000dd86},
+ {0x15, 6, 0, 443, 0x0000dd86},
{0xb7, 7, 0, 0, 0x00000003},
- {0x55, 8, 0, 1614, 0x00000008},
- {0x0f, 6, 1, 0, 0x00000000},
+ {0x55, 6, 0, 1662, 0x00000008},
+ {0x0f, 8, 1, 0, 0x00000000},
{0xb7, 7, 0, 0, 0x00000000},
- {0xbf, 1, 6, 0, 0x00000000},
+ {0xbf, 1, 8, 0, 0x00000000},
{0x07, 1, 0, 0, 0x00000018},
- {0x2d, 1, 9, 1609, 0x00000000},
- {0x71, 3, 6, 12, 0x00000000},
- {0xbf, 1, 3, 0, 0x00000000},
- {0x67, 1, 0, 0, 0x00000038},
- {0xc7, 1, 0, 0, 0x00000020},
- {0x77, 1, 0, 0, 0x0000001f},
- {0x57, 1, 0, 0, 0x2cc681d1},
- {0x67, 3, 0, 0, 0x00000018},
+ {0x2d, 1, 9, 1657, 0x00000000},
+ {0xb7, 1, 0, 0, 0x00000000},
+ {0x71, 3, 8, 12, 0x00000000},
+ {0x71, 2, 8, 9, 0x00000000},
+ {0x15, 2, 0, 1, 0x00000011},
+ {0x55, 2, 0, 21, 0x00000006},
+ {0x71, 2, 8, 7, 0x00000000},
+ {0x71, 4, 8, 6, 0x00000000},
+ {0xbf, 5, 4, 0, 0x00000000},
+ {0x67, 5, 0, 0, 0x00000008},
+ {0x57, 5, 0, 0, 0x00001f00},
+ {0x4f, 5, 2, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000020},
+ {0x4f, 4, 5, 0, 0x00000000},
+ {0x55, 4, 0, 12, 0x00000000},
+ {0xbf, 2, 8, 0, 0x00000000},
+ {0x07, 2, 0, 0, 0x00000014},
+ {0x71, 4, 2, 0, 0x00000000},
+ {0x67, 4, 0, 0, 0x00000018},
+ {0x71, 1, 2, 1, 0x00000000},
+ {0x67, 1, 0, 0, 0x00000010},
+ {0x4f, 1, 4, 0, 0x00000000},
+ {0x71, 4, 2, 3, 0x00000000},
+ {0x4f, 1, 4, 0, 0x00000000},
+ {0x71, 2, 2, 2, 0x00000000},
+ {0x67, 2, 0, 0, 0x00000008},
+ {0x4f, 1, 2, 0, 0x00000000},
{0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x40000000},
+ {0x67, 4, 0, 0, 0x00000038},
+ {0xc7, 4, 0, 0, 0x00000038},
{0xb7, 2, 0, 0, 0x00000000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x598d03a2},
+ {0x65, 4, 0, 1, 0xffffffff},
+ {0xb7, 7, 0, 0, 0x2cc681d1},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000040},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x598d03a2},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000020},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xb31a0745},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000010},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x66340e8a},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000008},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xcc681d15},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000004},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x98d03a2b},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000002},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x31a07456},
+ {0x71, 4, 8, 13, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000001},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x6340e8ad},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x67, 3, 0, 0, 0x00000038},
+ {0xc7, 3, 0, 0, 0x00000038},
+ {0xbf, 5, 7, 0, 0x00000000},
+ {0xa7, 5, 0, 0, 0xc681d15b},
+ {0x6d, 2, 3, 1, 0x00000000},
+ {0xbf, 5, 7, 0, 0x00000000},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000040},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x8d03a2b7},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000020},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x1a07456f},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000010},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x340e8ade},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000008},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x681d15bd},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000004},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xd03a2b7b},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000002},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xa07456f6},
+ {0x71, 3, 8, 14, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000001},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x40e8aded},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x67, 4, 0, 0, 0x00000038},
+ {0xc7, 4, 0, 0, 0x00000038},
+ {0xbf, 7, 5, 0, 0x00000000},
+ {0xa7, 7, 0, 0, 0x81d15bdb},
+ {0x6d, 2, 4, 1, 0x00000000},
+ {0xbf, 7, 5, 0, 0x00000000},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000040},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x03a2b7b7},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000020},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x07456f6f},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000010},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x0e8adedf},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000008},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x1d15bdbf},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000004},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x3a2b7b7e},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000002},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x7456f6fd},
+ {0x71, 4, 8, 15, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000001},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xe8adedfa},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x67, 3, 0, 0, 0x00000038},
+ {0xc7, 3, 0, 0, 0x00000038},
+ {0xbf, 5, 7, 0, 0x00000000},
+ {0xa7, 5, 0, 0, 0xd15bdbf4},
+ {0x6d, 2, 3, 1, 0x00000000},
+ {0xbf, 5, 7, 0, 0x00000000},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000040},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xa2b7b7e9},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000020},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x456f6fd3},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000010},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x8adedfa7},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000008},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x15bdbf4f},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000004},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x2b7b7e9e},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000002},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x56f6fd3d},
+ {0x71, 3, 8, 16, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000001},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xadedfa7b},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x67, 4, 0, 0, 0x00000038},
+ {0xc7, 4, 0, 0, 0x00000038},
+ {0xbf, 7, 5, 0, 0x00000000},
+ {0xa7, 7, 0, 0, 0x5bdbf4f7},
+ {0x6d, 2, 4, 1, 0x00000000},
+ {0xbf, 7, 5, 0, 0x00000000},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000040},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xb7b7e9ef},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000020},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x6f6fd3df},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000010},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xdedfa7bf},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000008},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xbdbf4f7f},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000004},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x7b7e9eff},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000002},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xf6fd3dff},
+ {0x71, 4, 8, 17, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000001},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xedfa7bfe},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x67, 3, 0, 0, 0x00000038},
+ {0xc7, 3, 0, 0, 0x00000038},
+ {0xbf, 5, 7, 0, 0x00000000},
+ {0xa7, 5, 0, 0, 0xdbf4f7fc},
+ {0x6d, 2, 3, 1, 0x00000000},
+ {0xbf, 5, 7, 0, 0x00000000},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000040},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xb7e9eff9},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000020},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x6fd3dff2},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000010},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xdfa7bfe5},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000008},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xbf4f7fca},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000004},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x7e9eff94},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000002},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xfd3dff28},
+ {0x71, 3, 8, 18, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000001},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xfa7bfe51},
+ {0xbf, 6, 3, 0, 0x00000000},
+ {0x67, 6, 0, 0, 0x00000038},
+ {0xc7, 6, 0, 0, 0x00000038},
+ {0xbf, 4, 5, 0, 0x00000000},
+ {0xa7, 4, 0, 0, 0xf4f7fca2},
+ {0x6d, 2, 6, 1, 0x00000000},
+ {0xbf, 4, 5, 0, 0x00000000},
+ {0xbf, 5, 3, 0, 0x00000000},
+ {0x57, 5, 0, 0, 0x00000040},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xe9eff945},
+ {0xbf, 5, 3, 0, 0x00000000},
+ {0x57, 5, 0, 0, 0x00000020},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xd3dff28a},
+ {0xbf, 5, 3, 0, 0x00000000},
+ {0x57, 5, 0, 0, 0x00000010},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xa7bfe514},
+ {0xbf, 5, 3, 0, 0x00000000},
+ {0x57, 5, 0, 0, 0x00000008},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x4f7fca28},
+ {0xbf, 5, 3, 0, 0x00000000},
+ {0x57, 5, 0, 0, 0x00000004},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x9eff9450},
+ {0xbf, 5, 3, 0, 0x00000000},
+ {0x57, 5, 0, 0, 0x00000002},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x3dff28a0},
+ {0x71, 5, 8, 19, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000001},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x7bfe5141},
+ {0xbf, 3, 5, 0, 0x00000000},
+ {0x67, 3, 0, 0, 0x00000038},
+ {0xc7, 3, 0, 0, 0x00000038},
+ {0xbf, 7, 4, 0, 0x00000000},
+ {0xa7, 7, 0, 0, 0xf7fca283},
+ {0x6d, 2, 3, 1, 0x00000000},
+ {0xbf, 7, 4, 0, 0x00000000},
+ {0xbf, 3, 5, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000040},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xeff94506},
+ {0xbf, 3, 5, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000020},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xdff28a0c},
+ {0xbf, 3, 5, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000010},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xbfe51418},
+ {0xbf, 3, 5, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000008},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x7fca2831},
+ {0xbf, 3, 5, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000004},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xff945063},
+ {0xbf, 3, 5, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000002},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xff28a0c6},
+ {0x57, 5, 0, 0, 0x00000001},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xfe51418c},
+ {0xbf, 4, 1, 0, 0x00000000},
+ {0x67, 4, 0, 0, 0x00000020},
+ {0xc7, 4, 0, 0, 0x00000020},
+ {0xbf, 3, 7, 0, 0x00000000},
+ {0xa7, 3, 0, 0, 0xfca28319},
+ {0x6d, 2, 4, 1, 0x00000000},
+ {0xbf, 3, 7, 0, 0x00000000},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x40000000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xf9450633},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x20000000},
+ {0x79, 6, 10, -56, 0x00000000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xf28a0c67},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x10000000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xe51418ce},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x08000000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xca28319d},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x04000000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x9450633b},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x02000000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x28a0c676},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x01000000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x51418ced},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00800000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xa28319db},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00400000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x450633b6},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00200000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x8a0c676c},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00100000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x1418ced8},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00080000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x28319db1},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00040000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x50633b63},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00020000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xa0c676c6},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00010000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x418ced8d},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00008000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x8319db1a},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00004000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x0633b634},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00002000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x0c676c68},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00001000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x18ced8d1},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000800},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x319db1a3},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000400},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x633b6347},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000200},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xc676c68f},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000100},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x8ced8d1f},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000080},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x19db1a3e},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000040},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x33b6347d},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000020},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x676c68fa},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000010},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xced8d1f4},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000008},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x9db1a3e9},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000004},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x3b6347d2},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000002},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x76c68fa5},
+ {0x57, 1, 0, 0, 0x00000001},
+ {0x15, 1, 0, 1194, 0x00000000},
+ {0xa7, 3, 0, 0, 0xed8d1f4a},
+ {0x05, 0, 0, 1192, 0x00000000},
+ {0x0f, 8, 1, 0, 0x00000000},
+ {0xb7, 7, 0, 0, 0x00000000},
+ {0xbf, 1, 8, 0, 0x00000000},
+ {0x07, 1, 0, 0, 0x0000002c},
+ {0x2d, 1, 9, 1216, 0x00000000},
+ {0x61, 2, 8, 8, 0x00000000},
+ {0xdc, 2, 0, 0, 0x00000040},
+ {0xc7, 2, 0, 0, 0x00000020},
+ {0x71, 3, 8, 6, 0x00000000},
+ {0x15, 3, 0, 2, 0x00000011},
+ {0xb7, 1, 0, 0, 0x00000000},
+ {0x55, 3, 0, 12, 0x00000006},
+ {0xbf, 3, 8, 0, 0x00000000},
+ {0x07, 3, 0, 0, 0x00000028},
+ {0x71, 4, 3, 0, 0x00000000},
+ {0x67, 4, 0, 0, 0x00000018},
+ {0x71, 1, 3, 1, 0x00000000},
+ {0x67, 1, 0, 0, 0x00000010},
+ {0x4f, 1, 4, 0, 0x00000000},
+ {0x71, 4, 3, 3, 0x00000000},
+ {0x4f, 1, 4, 0, 0x00000000},
+ {0x71, 3, 3, 2, 0x00000000},
+ {0x67, 3, 0, 0, 0x00000008},
+ {0x4f, 1, 3, 0, 0x00000000},
+ {0xbf, 4, 2, 0, 0x00000000},
+ {0x77, 4, 0, 0, 0x0000001f},
+ {0x57, 4, 0, 0, 0x2cc681d1},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x40000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x598d03a2},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x20000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xb31a0745},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x10000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x66340e8a},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x08000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xcc681d15},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x04000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x98d03a2b},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x02000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x31a07456},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x01000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x6340e8ad},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00800000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xc681d15b},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00400000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x8d03a2b7},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00200000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x1a07456f},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00100000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x340e8ade},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00080000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x681d15bd},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00040000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xd03a2b7b},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00020000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xa07456f6},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00010000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x40e8aded},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00008000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x81d15bdb},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00004000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x03a2b7b7},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00002000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x07456f6f},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00001000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x0e8adedf},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000800},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x1d15bdbf},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000400},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x3a2b7b7e},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000200},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x7456f6fd},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000100},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xe8adedfa},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000080},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xd15bdbf4},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000040},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xa2b7b7e9},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000020},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x456f6fd3},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000010},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x8adedfa7},
+ {0xbf, 3, 2, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000008},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x15bdbf4f},
+ {0x61, 3, 8, 12, 0x00000000},
+ {0xbf, 5, 2, 0, 0x00000000},
+ {0x57, 5, 0, 0, 0x00000004},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x2b7b7e9e},
+ {0xdc, 3, 0, 0, 0x00000040},
+ {0xbf, 5, 2, 0, 0x00000000},
+ {0x57, 5, 0, 0, 0x00000002},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x56f6fd3d},
+ {0xc7, 3, 0, 0, 0x00000020},
+ {0x57, 2, 0, 0, 0x00000001},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xadedfa7b},
+ {0xb7, 2, 0, 0, 0x00000000},
+ {0xbf, 5, 4, 0, 0x00000000},
+ {0xa7, 5, 0, 0, 0x5bdbf4f7},
+ {0x6d, 2, 3, 1, 0x00000000},
+ {0xbf, 5, 4, 0, 0x00000000},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x40000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xb7b7e9ef},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x20000000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xb31a0745},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x6f6fd3df},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x10000000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x66340e8a},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xdedfa7bf},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x08000000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xcc681d15},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xbdbf4f7f},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x04000000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x98d03a2b},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x7b7e9eff},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x02000000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x31a07456},
- {0x57, 3, 0, 0, 0x01000000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x6340e8ad},
- {0x71, 3, 6, 13, 0x00000000},
- {0x67, 3, 0, 0, 0x00000010},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xf6fd3dff},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x01000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xedfa7bfe},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00800000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xc681d15b},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xdbf4f7fc},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00400000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8d03a2b7},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xb7e9eff9},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00200000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x1a07456f},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x6fd3dff2},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00100000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x340e8ade},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xdfa7bfe5},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00080000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x681d15bd},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xbf4f7fca},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00040000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xd03a2b7b},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x7e9eff94},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00020000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xa07456f6},
- {0x57, 3, 0, 0, 0x00010000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x40e8aded},
- {0x71, 3, 6, 14, 0x00000000},
- {0x67, 3, 0, 0, 0x00000008},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xfd3dff28},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00010000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xfa7bfe51},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00008000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x81d15bdb},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xf4f7fca2},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00004000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x03a2b7b7},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xe9eff945},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00002000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x07456f6f},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xd3dff28a},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00001000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x0e8adedf},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xa7bfe514},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00000800},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x1d15bdbf},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x4f7fca28},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00000400},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x3a2b7b7e},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x9eff9450},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00000200},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x7456f6fd},
- {0x57, 3, 0, 0, 0x00000100},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xe8adedfa},
- {0x71, 3, 6, 15, 0x00000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x3dff28a0},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000100},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x7bfe5141},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00000080},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xd15bdbf4},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xf7fca283},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00000040},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xa2b7b7e9},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xeff94506},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00000020},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x456f6fd3},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xdff28a0c},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00000010},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8adedfa7},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xbfe51418},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00000008},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x15bdbf4f},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000004},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x2b7b7e9e},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000002},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x56f6fd3d},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x7fca2831},
+ {0x61, 4, 8, 16, 0x00000000},
+ {0xbf, 6, 3, 0, 0x00000000},
+ {0x57, 6, 0, 0, 0x00000004},
+ {0x15, 6, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xff945063},
+ {0xdc, 4, 0, 0, 0x00000040},
+ {0xbf, 6, 3, 0, 0x00000000},
+ {0x57, 6, 0, 0, 0x00000002},
+ {0x15, 6, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xff28a0c6},
+ {0xc7, 4, 0, 0, 0x00000020},
{0x57, 3, 0, 0, 0x00000001},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xadedfa7b},
- {0x71, 4, 6, 16, 0x00000000},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x67, 5, 0, 0, 0x00000038},
- {0xc7, 5, 0, 0, 0x00000020},
- {0xb7, 3, 0, 0, 0xffffffff},
- {0x6d, 5, 3, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x5bdbf4f7},
- {0x67, 4, 0, 0, 0x00000018},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x40000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xb7b7e9ef},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x20000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x6f6fd3df},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x10000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xdedfa7bf},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x08000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xbdbf4f7f},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x04000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x7b7e9eff},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x02000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf6fd3dff},
- {0x57, 4, 0, 0, 0x01000000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xedfa7bfe},
- {0x71, 4, 6, 17, 0x00000000},
- {0x67, 4, 0, 0, 0x00000010},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00800000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xdbf4f7fc},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00400000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xb7e9eff9},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00200000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x6fd3dff2},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00100000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xdfa7bfe5},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00080000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xbf4f7fca},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00040000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x7e9eff94},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00020000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xfd3dff28},
- {0x57, 4, 0, 0, 0x00010000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xfa7bfe51},
- {0x71, 4, 6, 18, 0x00000000},
- {0x67, 4, 0, 0, 0x00000008},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00008000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf4f7fca2},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00004000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xe9eff945},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00002000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xd3dff28a},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00001000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xa7bfe514},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000800},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x4f7fca28},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000400},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x9eff9450},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000200},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x3dff28a0},
- {0x57, 4, 0, 0, 0x00000100},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x7bfe5141},
- {0x71, 4, 6, 19, 0x00000000},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000080},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf7fca283},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000040},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xeff94506},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000020},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xdff28a0c},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000010},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xbfe51418},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000008},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x7fca2831},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000004},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xff945063},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000002},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xff28a0c6},
- {0x57, 4, 0, 0, 0x00000001},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xfe51418c},
- {0x71, 4, 6, 20, 0x00000000},
- {0x67, 4, 0, 0, 0x00000008},
- {0x71, 5, 6, 21, 0x00000000},
- {0x4f, 4, 5, 0, 0x00000000},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x67, 5, 0, 0, 0x00000030},
- {0xc7, 5, 0, 0, 0x00000020},
- {0x6d, 5, 3, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xfca28319},
- {0x67, 4, 0, 0, 0x00000010},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xfe51418c},
+ {0xbf, 7, 5, 0, 0x00000000},
+ {0xa7, 7, 0, 0, 0xfca28319},
+ {0x6d, 2, 4, 1, 0x00000000},
+ {0xbf, 7, 5, 0, 0x00000000},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x40000000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf9450633},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xf9450633},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x20000000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf28a0c67},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xf28a0c67},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x10000000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xe51418ce},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xe51418ce},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x08000000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xca28319d},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xca28319d},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x04000000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x9450633b},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x9450633b},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x02000000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x28a0c676},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x28a0c676},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x01000000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x51418ced},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x51418ced},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00800000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xa28319db},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xa28319db},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00400000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x450633b6},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x450633b6},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00200000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8a0c676c},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x8a0c676c},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00100000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x1418ced8},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x1418ced8},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00080000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x28319db1},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x28319db1},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00040000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x50633b63},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x50633b63},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00020000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xa0c676c6},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xa0c676c6},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00010000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x418ced8d},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00008000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x8319db1a},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00004000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x0633b634},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00002000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x0c676c68},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00001000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x18ced8d1},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000800},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x319db1a3},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000400},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x633b6347},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000200},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xc676c68f},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000100},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x8ced8d1f},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000080},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x19db1a3e},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000040},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x33b6347d},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000020},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x676c68fa},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000010},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xced8d1f4},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000008},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x9db1a3e9},
+ {0x61, 3, 8, 20, 0x00000000},
+ {0xbf, 5, 4, 0, 0x00000000},
+ {0x57, 5, 0, 0, 0x00000004},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x3b6347d2},
+ {0xdc, 3, 0, 0, 0x00000040},
+ {0xbf, 5, 4, 0, 0x00000000},
+ {0x57, 5, 0, 0, 0x00000002},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x76c68fa5},
+ {0xc7, 3, 0, 0, 0x00000020},
+ {0x57, 4, 0, 0, 0x00000001},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xed8d1f4a},
+ {0xbf, 5, 7, 0, 0x00000000},
+ {0xa7, 5, 0, 0, 0xdb1a3e94},
+ {0x6d, 2, 3, 1, 0x00000000},
+ {0xbf, 5, 7, 0, 0x00000000},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x40000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xb6347d28},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x20000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x6c68fa51},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x10000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xd8d1f4a3},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x08000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xb1a3e946},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x04000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x6347d28d},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x02000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xc68fa51a},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x01000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x8d1f4a35},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00800000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x1a3e946b},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00400000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x347d28d7},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00200000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x68fa51ae},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00100000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xd1f4a35c},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00080000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xa3e946b9},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00040000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x47d28d73},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00020000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x8fa51ae7},
+ {0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00010000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x418ced8d},
- {0x71, 3, 6, 22, 0x00000000},
- {0x67, 3, 0, 0, 0x00000008},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x1f4a35cf},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00008000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8319db1a},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x3e946b9e},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00004000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x0633b634},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x7d28d73c},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00002000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x0c676c68},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xfa51ae78},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00001000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x18ced8d1},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xf4a35cf1},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00000800},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x319db1a3},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xe946b9e3},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00000400},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x633b6347},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xd28d73c7},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00000200},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xc676c68f},
- {0x57, 3, 0, 0, 0x00000100},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8ced8d1f},
- {0x71, 3, 6, 23, 0x00000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xa51ae78e},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000100},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x4a35cf1c},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00000080},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x19db1a3e},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x946b9e38},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00000040},
- {0x79, 5, 10, -56, 0x00000000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x33b6347d},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x28d73c71},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00000020},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x676c68fa},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x51ae78e3},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00000010},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xced8d1f4},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xa35cf1c6},
{0xbf, 4, 3, 0, 0x00000000},
{0x57, 4, 0, 0, 0x00000008},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x9db1a3e9},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000004},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x3b6347d2},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000002},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x76c68fa5},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x46b9e38d},
+ {0x61, 4, 8, 24, 0x00000000},
+ {0xbf, 6, 3, 0, 0x00000000},
+ {0x57, 6, 0, 0, 0x00000004},
+ {0x15, 6, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x8d73c71b},
+ {0xdc, 4, 0, 0, 0x00000040},
+ {0xbf, 6, 3, 0, 0x00000000},
+ {0x57, 6, 0, 0, 0x00000002},
+ {0x15, 6, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x1ae78e36},
+ {0xc7, 4, 0, 0, 0x00000020},
{0x57, 3, 0, 0, 0x00000001},
- {0x1d, 3, 2, 1177, 0x00000000},
- {0xa7, 1, 0, 0, 0xed8d1f4a},
- {0x05, 0, 0, 1175, 0x00000000},
- {0x0f, 6, 1, 0, 0x00000000},
- {0xb7, 7, 0, 0, 0x00000000},
- {0xbf, 1, 6, 0, 0x00000000},
- {0x07, 1, 0, 0, 0x0000002c},
- {0x2d, 1, 9, 1202, 0x00000000},
- {0x61, 4, 6, 8, 0x00000000},
- {0xbf, 1, 4, 0, 0x00000000},
- {0x67, 1, 0, 0, 0x00000038},
- {0xc7, 1, 0, 0, 0x00000020},
- {0x77, 1, 0, 0, 0x0000001f},
- {0x57, 1, 0, 0, 0x2cc681d1},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x35cf1c6c},
+ {0xbf, 7, 5, 0, 0x00000000},
+ {0xa7, 7, 0, 0, 0x6b9e38d9},
+ {0x6d, 2, 4, 1, 0x00000000},
+ {0xbf, 7, 5, 0, 0x00000000},
{0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000040},
- {0xb7, 2, 0, 0, 0x00000000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x598d03a2},
+ {0x57, 3, 0, 0, 0x40000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xd73c71b2},
{0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000020},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xb31a0745},
+ {0x57, 3, 0, 0, 0x20000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xae78e364},
{0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000010},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x66340e8a},
+ {0x57, 3, 0, 0, 0x10000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x5cf1c6c9},
{0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000008},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xcc681d15},
+ {0x57, 3, 0, 0, 0x08000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xb9e38d92},
{0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000004},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x98d03a2b},
+ {0x57, 3, 0, 0, 0x04000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x73c71b25},
{0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000002},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x31a07456},
+ {0x57, 3, 0, 0, 0x02000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xe78e364b},
{0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000001},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x6340e8ad},
+ {0x57, 3, 0, 0, 0x01000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xcf1c6c96},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00800000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x9e38d92c},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00400000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x3c71b259},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00200000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x78e364b2},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00100000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xf1c6c964},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00080000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xe38d92c9},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00040000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xc71b2593},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00020000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x8e364b27},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00010000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x1c6c964e},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00008000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xc681d15b},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x38d92c9c},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00004000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8d03a2b7},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x71b25938},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00002000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x1a07456f},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xe364b270},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00001000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x340e8ade},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xc6c964e0},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00000800},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x681d15bd},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x8d92c9c0},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00000400},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xd03a2b7b},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x1b259380},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00000200},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xa07456f6},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x364b2700},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00000100},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x40e8aded},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x6c964e01},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000080},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xd92c9c03},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000040},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xb2593807},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000020},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x64b2700f},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000010},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xc964e01e},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000008},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x92c9c03d},
+ {0x61, 3, 8, 28, 0x00000000},
+ {0xbf, 5, 4, 0, 0x00000000},
+ {0x57, 5, 0, 0, 0x00000004},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x2593807a},
+ {0xdc, 3, 0, 0, 0x00000040},
+ {0xbf, 5, 4, 0, 0x00000000},
+ {0x57, 5, 0, 0, 0x00000002},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x4b2700f4},
+ {0xc7, 3, 0, 0, 0x00000020},
+ {0x57, 4, 0, 0, 0x00000001},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x964e01e8},
+ {0xbf, 5, 7, 0, 0x00000000},
+ {0xa7, 5, 0, 0, 0x2c9c03d1},
+ {0x6d, 2, 3, 1, 0x00000000},
+ {0xbf, 5, 7, 0, 0x00000000},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x40000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x593807a3},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x20000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xb2700f46},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x10000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x64e01e8d},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x08000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xc9c03d1a},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x04000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x93807a35},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x02000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x2700f46b},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x01000000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x4e01e8d6},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00800000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x9c03d1ad},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00400000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x3807a35b},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00200000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x700f46b6},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00100000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xe01e8d6c},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00080000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xc03d1ad9},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00040000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x807a35b3},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00020000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x00f46b66},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00010000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x01e8d6cc},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00008000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x03d1ad99},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00004000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x07a35b32},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00002000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x0f46b665},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00001000},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x1e8d6cca},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000800},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x3d1ad994},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000400},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x7a35b328},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000200},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xf46b6651},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000100},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xe8d6cca2},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000080},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xd1ad9944},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000040},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xa35b3289},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000020},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x46b66512},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000010},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x8d6cca25},
+ {0xbf, 4, 3, 0, 0x00000000},
+ {0x57, 4, 0, 0, 0x00000008},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x1ad9944a},
+ {0x61, 4, 8, 32, 0x00000000},
+ {0xbf, 6, 3, 0, 0x00000000},
+ {0x57, 6, 0, 0, 0x00000004},
+ {0x15, 6, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x35b32894},
+ {0xdc, 4, 0, 0, 0x00000040},
+ {0xbf, 6, 3, 0, 0x00000000},
+ {0x57, 6, 0, 0, 0x00000002},
+ {0x15, 6, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0x6b665129},
+ {0xc7, 4, 0, 0, 0x00000020},
+ {0x57, 3, 0, 0, 0x00000001},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 5, 0, 0, 0xd6cca253},
+ {0xbf, 7, 5, 0, 0x00000000},
+ {0xa7, 7, 0, 0, 0xad9944a7},
+ {0x6d, 2, 4, 1, 0x00000000},
+ {0xbf, 7, 5, 0, 0x00000000},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x40000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x5b32894f},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x20000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xb665129f},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x10000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x6cca253e},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x08000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xd9944a7d},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x04000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xb32894fb},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x02000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x665129f6},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x01000000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xcca253ec},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00800000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x81d15bdb},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x9944a7d9},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00400000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x03a2b7b7},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x32894fb2},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00200000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x07456f6f},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x65129f65},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00100000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x0e8adedf},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xca253eca},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00080000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x1d15bdbf},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x944a7d95},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00040000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x3a2b7b7e},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x2894fb2a},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00020000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x7456f6fd},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x5129f655},
{0xbf, 3, 4, 0, 0x00000000},
{0x57, 3, 0, 0, 0x00010000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xe8adedfa},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x67, 5, 0, 0, 0x00000020},
- {0xc7, 5, 0, 0, 0x00000020},
- {0xb7, 3, 0, 0, 0xffffffff},
- {0x6d, 5, 3, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xd15bdbf4},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x40000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xa2b7b7e9},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x20000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x456f6fd3},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x10000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8adedfa7},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x08000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x15bdbf4f},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x04000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x2b7b7e9e},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x02000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x56f6fd3d},
- {0x57, 4, 0, 0, 0x01000000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xadedfa7b},
- {0x61, 4, 6, 12, 0x00000000},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000080},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x5bdbf4f7},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000040},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xb7b7e9ef},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000020},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x6f6fd3df},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000010},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xdedfa7bf},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000008},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xbdbf4f7f},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000004},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x7b7e9eff},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000002},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf6fd3dff},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000001},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xedfa7bfe},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00008000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xdbf4f7fc},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00004000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xb7e9eff9},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00002000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x6fd3dff2},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00001000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xdfa7bfe5},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000800},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xbf4f7fca},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000400},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x7e9eff94},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000200},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xfd3dff28},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000100},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xfa7bfe51},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00800000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf4f7fca2},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00400000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xe9eff945},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00200000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xd3dff28a},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00100000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xa7bfe514},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00080000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x4f7fca28},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00040000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x9eff9450},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00020000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x3dff28a0},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00010000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x7bfe5141},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x67, 5, 0, 0, 0x00000020},
- {0xc7, 5, 0, 0, 0x00000020},
- {0x6d, 5, 3, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf7fca283},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x40000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xeff94506},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x20000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xdff28a0c},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x10000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xbfe51418},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x08000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x7fca2831},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x04000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xff945063},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x02000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xff28a0c6},
- {0x57, 4, 0, 0, 0x01000000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xfe51418c},
- {0x61, 4, 6, 16, 0x00000000},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000080},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xfca28319},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000040},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf9450633},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000020},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf28a0c67},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000010},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xe51418ce},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000008},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xca28319d},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000004},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x9450633b},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000002},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x28a0c676},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000001},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x51418ced},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00008000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xa28319db},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00004000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x450633b6},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00002000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8a0c676c},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00001000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x1418ced8},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000800},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x28319db1},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000400},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x50633b63},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000200},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xa0c676c6},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000100},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x418ced8d},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00800000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8319db1a},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00400000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x0633b634},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00200000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x0c676c68},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00100000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x18ced8d1},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00080000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x319db1a3},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00040000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x633b6347},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00020000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xc676c68f},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00010000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8ced8d1f},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x67, 5, 0, 0, 0x00000020},
- {0xc7, 5, 0, 0, 0x00000020},
- {0x6d, 5, 3, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x19db1a3e},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x40000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x33b6347d},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x20000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x676c68fa},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x10000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xced8d1f4},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x08000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x9db1a3e9},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x04000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x3b6347d2},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x02000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x76c68fa5},
- {0x57, 4, 0, 0, 0x01000000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xed8d1f4a},
- {0x61, 4, 6, 20, 0x00000000},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000080},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xdb1a3e94},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000040},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xb6347d28},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000020},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x6c68fa51},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000010},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xd8d1f4a3},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000008},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xb1a3e946},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000004},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x6347d28d},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000002},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xc68fa51a},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000001},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8d1f4a35},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00008000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x1a3e946b},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00004000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x347d28d7},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00002000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x68fa51ae},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00001000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xd1f4a35c},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000800},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xa3e946b9},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000400},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x47d28d73},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000200},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8fa51ae7},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000100},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x1f4a35cf},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00800000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x3e946b9e},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00400000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x7d28d73c},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00200000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xfa51ae78},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00100000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf4a35cf1},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00080000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xe946b9e3},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00040000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xd28d73c7},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00020000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xa51ae78e},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00010000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x4a35cf1c},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x67, 5, 0, 0, 0x00000020},
- {0xc7, 5, 0, 0, 0x00000020},
- {0x6d, 5, 3, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x946b9e38},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x40000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x28d73c71},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x20000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x51ae78e3},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x10000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xa35cf1c6},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x08000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x46b9e38d},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x04000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8d73c71b},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x02000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x1ae78e36},
- {0x57, 4, 0, 0, 0x01000000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x35cf1c6c},
- {0x61, 4, 6, 24, 0x00000000},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000080},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x6b9e38d9},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000040},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xd73c71b2},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000020},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xae78e364},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000010},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x5cf1c6c9},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000008},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xb9e38d92},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xa253ecab},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00008000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x44a7d956},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00004000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x894fb2ac},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00002000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x129f6558},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00001000},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x253ecab1},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000800},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x4a7d9563},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000400},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x94fb2ac7},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000200},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x29f6558f},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000100},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x53ecab1e},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000080},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xa7d9563d},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000040},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x4fb2ac7a},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000020},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x9f6558f5},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000010},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x3ecab1ea},
+ {0xbf, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x00000008},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0x7d9563d5},
+ {0x61, 3, 8, 36, 0x00000000},
{0xbf, 5, 4, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00000004},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x73c71b25},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xfb2ac7ab},
+ {0xdc, 3, 0, 0, 0x00000040},
{0xbf, 5, 4, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00000002},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xe78e364b},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000001},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xcf1c6c96},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00008000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x9e38d92c},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00004000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x3c71b259},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00002000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x78e364b2},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00001000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf1c6c964},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000800},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xe38d92c9},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000400},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xc71b2593},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000200},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8e364b27},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000100},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x1c6c964e},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00800000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x38d92c9c},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00400000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x71b25938},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00200000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xe364b270},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00100000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xc6c964e0},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00080000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8d92c9c0},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00040000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x1b259380},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00020000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x364b2700},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00010000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x6c964e01},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x67, 5, 0, 0, 0x00000020},
- {0xc7, 5, 0, 0, 0x00000020},
- {0x6d, 5, 3, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xd92c9c03},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xf6558f56},
+ {0xc7, 3, 0, 0, 0x00000020},
+ {0x57, 4, 0, 0, 0x00000001},
+ {0x15, 4, 0, 1, 0x00000000},
+ {0xa7, 7, 0, 0, 0xecab1eac},
+ {0xbf, 4, 7, 0, 0x00000000},
+ {0xa7, 4, 0, 0, 0xd9563d59},
+ {0x6d, 2, 3, 1, 0x00000000},
+ {0xbf, 4, 7, 0, 0x00000000},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x40000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xb2593807},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xb2ac7ab2},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x20000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x64b2700f},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x79, 6, 10, -56, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x6558f564},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x10000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xc964e01e},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xcab1eac8},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x08000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x92c9c03d},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x9563d590},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x04000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x2593807a},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x2ac7ab20},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x02000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x4b2700f4},
- {0x57, 4, 0, 0, 0x01000000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x964e01e8},
- {0x61, 4, 6, 28, 0x00000000},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000080},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x2c9c03d1},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000040},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x593807a3},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000020},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xb2700f46},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000010},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x64e01e8d},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000008},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xc9c03d1a},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000004},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x93807a35},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000002},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x2700f46b},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000001},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x4e01e8d6},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00008000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x9c03d1ad},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00004000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x3807a35b},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00002000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x700f46b6},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00001000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xe01e8d6c},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000800},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xc03d1ad9},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000400},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x807a35b3},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000200},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x00f46b66},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000100},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x01e8d6cc},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x558f5641},
+ {0xbf, 5, 3, 0, 0x00000000},
+ {0x57, 5, 0, 0, 0x01000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xab1eac83},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00800000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x03d1ad99},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x563d5906},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00400000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x07a35b32},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xac7ab20c},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00200000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x0f46b665},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x58f56418},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00100000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x1e8d6cca},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xb1eac831},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00080000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x3d1ad994},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x63d59063},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00040000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x7a35b328},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xc7ab20c7},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00020000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf46b6651},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x8f56418f},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00010000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xe8d6cca2},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x67, 5, 0, 0, 0x00000020},
- {0xc7, 5, 0, 0, 0x00000020},
- {0x6d, 5, 3, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xd1ad9944},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x40000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xa35b3289},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x20000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x46b66512},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x10000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8d6cca25},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x08000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x1ad9944a},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x04000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x35b32894},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x02000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x6b665129},
- {0x57, 4, 0, 0, 0x01000000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xd6cca253},
- {0x61, 4, 6, 32, 0x00000000},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000080},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xad9944a7},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000040},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x5b32894f},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000020},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xb665129f},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000010},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x6cca253e},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000008},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xd9944a7d},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000004},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xb32894fb},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000002},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x665129f6},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000001},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xcca253ec},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x1eac831e},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00008000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x9944a7d9},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x3d59063c},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00004000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x32894fb2},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x7ab20c78},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00002000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x65129f65},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xf56418f0},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00001000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xca253eca},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xeac831e1},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00000800},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x944a7d95},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xd59063c2},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00000400},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x2894fb2a},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xab20c784},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00000200},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x5129f655},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x56418f09},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00000100},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xa253ecab},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00800000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x44a7d956},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00400000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x894fb2ac},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00200000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x129f6558},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00100000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x253ecab1},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00080000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x4a7d9563},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00040000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x94fb2ac7},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00020000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x29f6558f},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00010000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x53ecab1e},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x67, 5, 0, 0, 0x00000020},
- {0xc7, 5, 0, 0, 0x00000020},
- {0x6d, 5, 3, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xa7d9563d},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x40000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x4fb2ac7a},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x20000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x9f6558f5},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x10000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x3ecab1ea},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x08000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x7d9563d5},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x04000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xfb2ac7ab},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x02000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf6558f56},
- {0x57, 4, 0, 0, 0x01000000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xecab1eac},
- {0x61, 4, 6, 36, 0x00000000},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xac831e12},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00000080},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xd9563d59},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x59063c25},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00000040},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xb2ac7ab2},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xb20c784b},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00000020},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x6558f564},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x6418f097},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00000010},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xcab1eac8},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0xc831e12f},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00000008},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x9563d590},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x9063c25f},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00000004},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x2ac7ab20},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x20c784be},
+ {0xbf, 5, 3, 0, 0x00000000},
{0x57, 5, 0, 0, 0x00000002},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x558f5641},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000001},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xab1eac83},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00008000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x563d5906},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00004000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xac7ab20c},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00002000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x58f56418},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00001000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xb1eac831},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000800},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x63d59063},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000400},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xc7ab20c7},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000200},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8f56418f},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000100},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x1eac831e},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00800000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x3d59063c},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00400000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x7ab20c78},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00200000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf56418f0},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00100000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xeac831e1},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00080000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xd59063c2},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00040000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xab20c784},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00020000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x56418f09},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00010000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xac831e12},
- {0xbf, 5, 4, 0, 0x00000000},
+ {0x15, 5, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x418f097c},
+ {0x57, 3, 0, 0, 0x00000001},
+ {0x15, 3, 0, 1, 0x00000000},
+ {0xa7, 4, 0, 0, 0x831e12f9},
+ {0xbf, 5, 1, 0, 0x00000000},
{0x67, 5, 0, 0, 0x00000020},
{0xc7, 5, 0, 0, 0x00000020},
- {0x6d, 5, 3, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x59063c25},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x40000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xb20c784b},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x20000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x6418f097},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x10000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xc831e12f},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x08000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x9063c25f},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x04000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x20c784be},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x02000000},
- {0x1d, 5, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x418f097c},
- {0x57, 4, 0, 0, 0x01000000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x831e12f9},
- {0x71, 4, 6, 40, 0x00000000},
- {0x67, 4, 0, 0, 0x00000008},
- {0x71, 5, 6, 41, 0x00000000},
- {0x4f, 4, 5, 0, 0x00000000},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x67, 5, 0, 0, 0x00000030},
- {0xc7, 5, 0, 0, 0x00000020},
- {0x6d, 5, 3, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x063c25f3},
- {0x67, 4, 0, 0, 0x00000010},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x40000000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x0c784be7},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x20000000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x18f097cf},
{0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x10000000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x31e12f9f},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x08000000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x63c25f3f},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x04000000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xc784be7f},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x02000000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x8f097cff},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x01000000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x1e12f9fe},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00800000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x3c25f3fc},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00400000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x784be7f8},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00200000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf097cff0},
+ {0xa7, 3, 0, 0, 0x063c25f3},
+ {0x6d, 2, 5, 1, 0x00000000},
{0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00100000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xe12f9fe0},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00080000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xc25f3fc1},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00040000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x84be7f83},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00020000},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x097cff07},
- {0x57, 4, 0, 0, 0x00010000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x12f9fe0f},
- {0x71, 3, 6, 42, 0x00000000},
- {0x67, 3, 0, 0, 0x00000008},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00008000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x25f3fc1f},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00004000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x4be7f83f},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00002000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x97cff07f},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00001000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x2f9fe0fe},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000800},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x5f3fc1fd},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000400},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xbe7f83fb},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000200},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x7cff07f7},
- {0x57, 3, 0, 0, 0x00000100},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf9fe0fee},
- {0x71, 3, 6, 43, 0x00000000},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000080},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xf3fc1fdc},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000040},
- {0x79, 5, 10, -56, 0x00000000},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xe7f83fb8},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000020},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xcff07f70},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000010},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x9fe0fee1},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000008},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x3fc1fdc2},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000004},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0x7f83fb85},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000002},
- {0x1d, 4, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xff07f70a},
- {0x57, 3, 0, 0, 0x00000001},
- {0x1d, 3, 2, 1, 0x00000000},
- {0xa7, 1, 0, 0, 0xfe0fee15},
- {0x71, 2, 0, 201, 0x00000000},
- {0x67, 2, 0, 0, 0x00000008},
- {0x71, 3, 0, 200, 0x00000000},
- {0x4f, 2, 3, 0, 0x00000000},
- {0x71, 3, 0, 203, 0x00000000},
- {0x67, 3, 0, 0, 0x00000008},
- {0x71, 4, 0, 202, 0x00000000},
- {0x4f, 3, 4, 0, 0x00000000},
- {0x67, 3, 0, 0, 0x00000010},
- {0x4f, 3, 2, 0, 0x00000000},
- {0x67, 1, 0, 0, 0x00000020},
- {0x77, 1, 0, 0, 0x00000020},
{0xbf, 2, 1, 0, 0x00000000},
- {0x3f, 2, 3, 0, 0x00000000},
- {0x2f, 2, 3, 0, 0x00000000},
- {0x1f, 1, 2, 0, 0x00000000},
- {0x57, 1, 0, 0, 0x0000000f},
- {0x67, 1, 0, 0, 0x00000002},
- {0x0f, 0, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x40000000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x0c784be7},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x20000000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x18f097cf},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x10000000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x31e12f9f},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x08000000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x63c25f3f},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x04000000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xc784be7f},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x02000000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x8f097cff},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x01000000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x1e12f9fe},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00800000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x3c25f3fc},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00400000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x784be7f8},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00200000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xf097cff0},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00100000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xe12f9fe0},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00080000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xc25f3fc1},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00040000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x84be7f83},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00020000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x097cff07},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00010000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x12f9fe0f},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00008000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x25f3fc1f},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00004000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x4be7f83f},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00002000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x97cff07f},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00001000},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x2f9fe0fe},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000800},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x5f3fc1fd},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000400},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xbe7f83fb},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000200},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x7cff07f7},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000100},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xf9fe0fee},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000080},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xf3fc1fdc},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000040},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xe7f83fb8},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000020},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xcff07f70},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000010},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x9fe0fee1},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000008},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x3fc1fdc2},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000004},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0x7f83fb85},
+ {0xbf, 2, 1, 0, 0x00000000},
+ {0x57, 2, 0, 0, 0x00000002},
+ {0x15, 2, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xff07f70a},
+ {0x57, 1, 0, 0, 0x00000001},
+ {0x15, 1, 0, 1, 0x00000000},
+ {0xa7, 3, 0, 0, 0xfe0fee15},
+ {0x71, 1, 0, 201, 0x00000000},
+ {0x67, 1, 0, 0, 0x00000008},
+ {0x71, 2, 0, 200, 0x00000000},
+ {0x4f, 1, 2, 0, 0x00000000},
+ {0x71, 2, 0, 202, 0x00000000},
+ {0x67, 2, 0, 0, 0x00000010},
+ {0x71, 4, 0, 203, 0x00000000},
+ {0x67, 4, 0, 0, 0x00000018},
+ {0x4f, 4, 2, 0, 0x00000000},
+ {0x4f, 4, 1, 0, 0x00000000},
+ {0x67, 3, 0, 0, 0x00000020},
+ {0x77, 3, 0, 0, 0x00000020},
+ {0x9f, 3, 4, 0, 0x00000000},
+ {0x57, 3, 0, 0, 0x0000000f},
+ {0x67, 3, 0, 0, 0x00000002},
+ {0x0f, 0, 3, 0, 0x00000000},
{0x71, 1, 0, 137, 0x00000000},
{0x67, 1, 0, 0, 0x00000008},
{0x71, 2, 0, 136, 0x00000000},
{0x4f, 1, 2, 0, 0x00000000},
{0x71, 2, 0, 138, 0x00000000},
+ {0x67, 2, 0, 0, 0x00000010},
{0x71, 3, 0, 139, 0x00000000},
- {0x67, 3, 0, 0, 0x00000008},
+ {0x67, 3, 0, 0, 0x00000018},
{0x4f, 3, 2, 0, 0x00000000},
- {0x67, 3, 0, 0, 0x00000010},
{0x4f, 3, 1, 0, 0x00000000},
{0x07, 3, 0, 0, 0x7cafe800},
- {0x63, 5, 3, 52, 0x00000000},
+ {0x63, 6, 3, 52, 0x00000000},
{0xb7, 7, 0, 0, 0x00000001},
{0xbf, 0, 7, 0, 0x00000000},
{0x95, 0, 0, 0, 0x00000000},
diff -Nru dpdk-20.11.9/drivers/net/tap/tap_bpf_program.c dpdk-20.11.10/drivers/net/tap/tap_bpf_program.c
--- dpdk-20.11.9/drivers/net/tap/tap_bpf_program.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/tap/tap_bpf_program.c 2023-12-12 10:30:50.000000000 +0000
@@ -131,6 +131,8 @@
__u8 *key = 0;
__u32 len;
__u32 queue = 0;
+ bool mf = 0;
+ __u16 frag_off = 0;
rsskey = map_lookup_elem(&map_keys, &key_idx);
if (!rsskey) {
@@ -155,6 +157,8 @@
return TC_ACT_OK;
__u8 *src_dst_addr = data + off + offsetof(struct iphdr, saddr);
+ __u8 *frag_off_addr = data + off + offsetof(struct iphdr, frag_off);
+ __u8 *prot_addr = data + off + offsetof(struct iphdr, protocol);
__u8 *src_dst_port = data + off + sizeof(struct iphdr);
struct ipv4_l3_l4_tuple v4_tuple = {
.src_addr = IPv4(*(src_dst_addr + 0),
@@ -165,11 +169,25 @@
*(src_dst_addr + 5),
*(src_dst_addr + 6),
*(src_dst_addr + 7)),
- .sport = PORT(*(src_dst_port + 0),
- *(src_dst_port + 1)),
- .dport = PORT(*(src_dst_port + 2),
- *(src_dst_port + 3)),
+ .sport = 0,
+ .dport = 0,
};
+ /** Fetch the L4-payer port numbers only in-case of TCP/UDP
+ ** and also if the packet is not fragmented. Since fragmented
+ ** chunks do not have L4 TCP/UDP header.
+ **/
+ if (*prot_addr == IPPROTO_UDP || *prot_addr == IPPROTO_TCP) {
+ frag_off = PORT(*(frag_off_addr + 0),
+ *(frag_off_addr + 1));
+ mf = frag_off & 0x2000;
+ frag_off = frag_off & 0x1fff;
+ if (mf == 0 && frag_off == 0) {
+ v4_tuple.sport = PORT(*(src_dst_port + 0),
+ *(src_dst_port + 1));
+ v4_tuple.dport = PORT(*(src_dst_port + 2),
+ *(src_dst_port + 3));
+ }
+ }
__u8 input_len = sizeof(v4_tuple) / sizeof(__u32);
if (rsskey->hash_fields & (1 << HASH_FIELD_IPV4_L3))
input_len--;
@@ -182,6 +200,9 @@
offsetof(struct ipv6hdr, saddr);
__u8 *src_dst_port = data + off +
sizeof(struct ipv6hdr);
+ __u8 *next_hdr = data + off +
+ offsetof(struct ipv6hdr, nexthdr);
+
struct ipv6_l3_l4_tuple v6_tuple;
for (j = 0; j < 4; j++)
*((uint32_t *)&v6_tuple.src_addr + j) =
@@ -191,10 +212,18 @@
*((uint32_t *)&v6_tuple.dst_addr + j) =
__builtin_bswap32(*((uint32_t *)
src_dst_addr + 4 + j));
- v6_tuple.sport = PORT(*(src_dst_port + 0),
- *(src_dst_port + 1));
- v6_tuple.dport = PORT(*(src_dst_port + 2),
- *(src_dst_port + 3));
+
+ /** Fetch the L4 header port-numbers only if next-header
+ * is TCP/UDP **/
+ if (*next_hdr == IPPROTO_UDP || *next_hdr == IPPROTO_TCP) {
+ v6_tuple.sport = PORT(*(src_dst_port + 0),
+ *(src_dst_port + 1));
+ v6_tuple.dport = PORT(*(src_dst_port + 2),
+ *(src_dst_port + 3));
+ } else {
+ v6_tuple.sport = 0;
+ v6_tuple.dport = 0;
+ }
__u8 input_len = sizeof(v6_tuple) / sizeof(__u32);
if (rsskey->hash_fields & (1 << HASH_FIELD_IPV6_L3))
diff -Nru dpdk-20.11.9/drivers/net/txgbe/base/txgbe_mng.c dpdk-20.11.10/drivers/net/txgbe/base/txgbe_mng.c
--- dpdk-20.11.9/drivers/net/txgbe/base/txgbe_mng.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/txgbe/base/txgbe_mng.c 2023-12-12 10:30:50.000000000 +0000
@@ -135,21 +135,7 @@
for (bi = 0; bi < dword_len; bi++)
buffer[bi] = rd32a(hw, TXGBE_MNGMBX, bi);
- /*
- * If there is any thing in data position pull it in
- * Read Flash command requires reading buffer length from
- * two byes instead of one byte
- */
- if (resp->cmd == 0x30) {
- for (; bi < dword_len + 2; bi++)
- buffer[bi] = rd32a(hw, TXGBE_MNGMBX, bi);
-
- buf_len = (((u16)(resp->cmd_or_resp.ret_status) << 3)
- & 0xF00) | resp->buf_len;
- hdr_size += (2 << 2);
- } else {
- buf_len = resp->buf_len;
- }
+ buf_len = resp->buf_len;
if (!buf_len)
goto rel_out;
diff -Nru dpdk-20.11.9/drivers/net/txgbe/txgbe_ethdev.c dpdk-20.11.10/drivers/net/txgbe/txgbe_ethdev.c
--- dpdk-20.11.9/drivers/net/txgbe/txgbe_ethdev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/txgbe/txgbe_ethdev.c 2023-12-12 10:30:50.000000000 +0000
@@ -1277,6 +1277,19 @@
return -EINVAL;
}
}
+
+ /*
+ * When DCB/VT is off, maximum number of queues changes
+ */
+ if (dev_conf->txmode.mq_mode == ETH_MQ_TX_NONE) {
+ if (nb_tx_q > TXGBE_NONE_MODE_TX_NB_QUEUES) {
+ PMD_INIT_LOG(ERR,
+ "Neither VT nor DCB are enabled, "
+ "nb_tx_q > %d.",
+ TXGBE_NONE_MODE_TX_NB_QUEUES);
+ return -EINVAL;
+ }
+ }
}
return 0;
}
@@ -1655,7 +1668,7 @@
int vf;
if (hw->adapter_stopped)
- return 0;
+ goto out;
PMD_INIT_FUNC_TRACE();
@@ -1674,14 +1687,6 @@
for (vf = 0; vfinfo != NULL && vf < pci_dev->max_vfs; vf++)
vfinfo[vf].clear_to_send = false;
- if (hw->phy.media_type == txgbe_media_type_copper) {
- /* Turn off the copper */
- hw->phy.set_phy_power(hw, false);
- } else {
- /* Turn off the laser */
- hw->mac.disable_tx_laser(hw);
- }
-
txgbe_dev_clear_queues(dev);
/* Clear stored conf */
@@ -1711,6 +1716,16 @@
hw->adapter_stopped = true;
dev->data->dev_started = 0;
+out:
+ /* close phy to prevent reset in dev_close from restarting physical link */
+ if (hw->phy.media_type == txgbe_media_type_copper) {
+ /* Turn off the copper */
+ hw->phy.set_phy_power(hw, false);
+ } else {
+ /* Turn off the laser */
+ hw->mac.disable_tx_laser(hw);
+ }
+
return 0;
}
@@ -1768,6 +1783,9 @@
PMD_INIT_FUNC_TRACE();
+ if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+ return 0;
+
txgbe_pf_reset_hw(hw);
ret = txgbe_dev_stop(dev);
@@ -2527,6 +2545,11 @@
break;
}
+ /* Re configure MAC RX */
+ if (hw->mac.type == txgbe_mac_raptor)
+ wr32m(hw, TXGBE_MACRXFLT, TXGBE_MACRXFLT_PROMISC,
+ TXGBE_MACRXFLT_PROMISC);
+
return rte_eth_linkstatus_set(dev, &link);
}
diff -Nru dpdk-20.11.9/drivers/net/txgbe/txgbe_ethdev.h dpdk-20.11.10/drivers/net/txgbe/txgbe_ethdev.h
--- dpdk-20.11.9/drivers/net/txgbe/txgbe_ethdev.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/txgbe/txgbe_ethdev.h 2023-12-12 10:30:50.000000000 +0000
@@ -28,6 +28,7 @@
/*Default value of Max Rx Queue*/
#define TXGBE_MAX_RX_QUEUE_NUM 128
#define TXGBE_VMDQ_DCB_NB_QUEUES TXGBE_MAX_RX_QUEUE_NUM
+#define TXGBE_NONE_MODE_TX_NB_QUEUES 64
#ifndef NBBY
#define NBBY 8 /* number of bits in a byte */
diff -Nru dpdk-20.11.9/drivers/net/txgbe/txgbe_rxtx.c dpdk-20.11.10/drivers/net/txgbe/txgbe_rxtx.c
--- dpdk-20.11.9/drivers/net/txgbe/txgbe_rxtx.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/txgbe/txgbe_rxtx.c 2023-12-12 10:30:50.000000000 +0000
@@ -1405,11 +1405,22 @@
* of accesses cannot be reordered by the compiler. If they were
* not volatile, they could be reordered which could lead to
* using invalid descriptor fields when read from rxd.
+ *
+ * Meanwhile, to prevent the CPU from executing out of order, we
+ * need to use a proper memory barrier to ensure the memory
+ * ordering below.
*/
rxdp = &rx_ring[rx_id];
staterr = rxdp->qw1.lo.status;
if (!(staterr & rte_cpu_to_le_32(TXGBE_RXD_STAT_DD)))
break;
+
+ /*
+ * Use acquire fence to ensure that status_error which includes
+ * DD bit is loaded before loading of other descriptor words.
+ */
+ rte_atomic_thread_fence(__ATOMIC_ACQUIRE);
+
rxd = *rxdp;
/*
@@ -1655,32 +1666,10 @@
next_desc:
/*
- * The code in this whole file uses the volatile pointer to
- * ensure the read ordering of the status and the rest of the
- * descriptor fields (on the compiler level only!!!). This is so
- * UGLY - why not to just use the compiler barrier instead? DPDK
- * even has the rte_compiler_barrier() for that.
- *
- * But most importantly this is just wrong because this doesn't
- * ensure memory ordering in a general case at all. For
- * instance, DPDK is supposed to work on Power CPUs where
- * compiler barrier may just not be enough!
- *
- * I tried to write only this function properly to have a
- * starting point (as a part of an LRO/RSC series) but the
- * compiler cursed at me when I tried to cast away the
- * "volatile" from rx_ring (yes, it's volatile too!!!). So, I'm
- * keeping it the way it is for now.
- *
- * The code in this file is broken in so many other places and
- * will just not work on a big endian CPU anyway therefore the
- * lines below will have to be revisited together with the rest
- * of the txgbe PMD.
- *
- * TODO:
- * - Get rid of "volatile" and let the compiler do its job.
- * - Use the proper memory barrier (rte_rmb()) to ensure the
- * memory ordering below.
+ * "Volatile" only prevents caching of the variable marked
+ * volatile. Most important, "volatile" cannot prevent the CPU
+ * from executing out of order. So, it is necessary to use a
+ * proper memory barrier to ensure the memory ordering below.
*/
rxdp = &rx_ring[rx_id];
staterr = rte_le_to_cpu_32(rxdp->qw1.lo.status);
@@ -1688,6 +1677,12 @@
if (!(staterr & TXGBE_RXD_STAT_DD))
break;
+ /*
+ * Use acquire fence to ensure that status_error which includes
+ * DD bit is loaded before loading of other descriptor words.
+ */
+ rte_atomic_thread_fence(__ATOMIC_ACQUIRE);
+
rxd = *rxdp;
PMD_RX_LOG(DEBUG, "port_id=%u queue_id=%u rx_id=%u "
diff -Nru dpdk-20.11.9/drivers/net/virtio/virtio_ethdev.c dpdk-20.11.10/drivers/net/virtio/virtio_ethdev.c
--- dpdk-20.11.9/drivers/net/virtio/virtio_ethdev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/virtio/virtio_ethdev.c 2023-12-12 10:30:50.000000000 +0000
@@ -1924,6 +1924,14 @@
}
}
+ if (eth_dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC)
+ /* Enable vector (0) for Link State Interrupt */
+ if (VTPCI_OPS(hw)->set_config_irq(hw, 0) ==
+ VIRTIO_MSI_NO_VECTOR) {
+ PMD_DRV_LOG(ERR, "failed to set config vector");
+ return -EBUSY;
+ }
+
vtpci_reinit_complete(hw);
if (pci_dev)
@@ -2408,14 +2416,6 @@
hw->has_tx_offload = tx_offload_enabled(hw);
hw->has_rx_offload = rx_offload_enabled(hw);
- if (dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC)
- /* Enable vector (0) for Link State Interrupt */
- if (VTPCI_OPS(hw)->set_config_irq(hw, 0) ==
- VIRTIO_MSI_NO_VECTOR) {
- PMD_DRV_LOG(ERR, "failed to set config vector");
- return -EBUSY;
- }
-
if (vtpci_packed_queue(hw)) {
#if defined(RTE_ARCH_X86_64) && defined(CC_AVX512_SUPPORT)
if ((hw->use_vec_rx || hw->use_vec_tx) &&
diff -Nru dpdk-20.11.9/drivers/net/virtio/virtqueue.h dpdk-20.11.10/drivers/net/virtio/virtqueue.h
--- dpdk-20.11.9/drivers/net/virtio/virtqueue.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/drivers/net/virtio/virtqueue.h 2023-12-12 10:30:50.000000000 +0000
@@ -756,6 +756,7 @@
start_dp[idx].addr = txvq->virtio_net_hdr_mem +
RTE_PTR_DIFF(&txr[idx].tx_hdr, txr);
start_dp[idx].len = vq->hw->vtnet_hdr_size;
+ head_flags |= VRING_DESC_F_NEXT;
hdr = (struct virtio_net_hdr *)&txr[idx].tx_hdr;
idx++;
if (idx >= vq->vq_nentries) {
diff -Nru dpdk-20.11.9/examples/ethtool/ethtool-app/ethapp.c dpdk-20.11.10/examples/ethtool/ethtool-app/ethapp.c
--- dpdk-20.11.9/examples/ethtool/ethtool-app/ethapp.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/examples/ethtool/ethtool-app/ethapp.c 2023-12-12 10:30:50.000000000 +0000
@@ -49,6 +49,13 @@
uint16_t rx;
};
+struct pcmd_pause_params {
+ cmdline_fixed_string_t cmd;
+ uint16_t port;
+ cmdline_fixed_string_t mode;
+ cmdline_fixed_string_t autoneg;
+ cmdline_fixed_string_t an_status;
+};
/* Parameter-less commands */
cmdline_parse_token_string_t pcmd_quit_token_cmd =
@@ -116,12 +123,18 @@
/* Pause commands */
cmdline_parse_token_string_t pcmd_pause_token_cmd =
- TOKEN_STRING_INITIALIZER(struct pcmd_intstr_params, cmd, "pause");
+ TOKEN_STRING_INITIALIZER(struct pcmd_pause_params, cmd, "pause");
cmdline_parse_token_num_t pcmd_pause_token_port =
- TOKEN_NUM_INITIALIZER(struct pcmd_intstr_params, port, RTE_UINT16);
-cmdline_parse_token_string_t pcmd_pause_token_opt =
- TOKEN_STRING_INITIALIZER(struct pcmd_intstr_params,
- opt, "all#tx#rx#none");
+ TOKEN_NUM_INITIALIZER(struct pcmd_pause_params, port, RTE_UINT16);
+cmdline_parse_token_string_t pcmd_pause_token_mode =
+ TOKEN_STRING_INITIALIZER(struct pcmd_pause_params,
+ mode, "full#tx#rx#none");
+cmdline_parse_token_string_t pcmd_pause_token_autoneg =
+ TOKEN_STRING_INITIALIZER(struct pcmd_pause_params,
+ autoneg, "autoneg");
+cmdline_parse_token_string_t pcmd_pause_token_an_status =
+ TOKEN_STRING_INITIALIZER(struct pcmd_pause_params,
+ an_status, "on#off");
/* VLAN commands */
cmdline_parse_token_string_t pcmd_vlan_token_cmd =
@@ -348,13 +361,12 @@
fclose(fp_eeprom);
}
-
static void
pcmd_pause_callback(void *ptr_params,
__rte_unused struct cmdline *ctx,
void *ptr_data)
{
- struct pcmd_intstr_params *params = ptr_params;
+ struct pcmd_pause_params *params = ptr_params;
struct ethtool_pauseparam info;
int stat;
@@ -366,39 +378,38 @@
stat = rte_ethtool_get_pauseparam(params->port, &info);
} else {
memset(&info, 0, sizeof(info));
- if (strcasecmp("all", params->opt) == 0) {
+ if (strcasecmp("full", params->mode) == 0) {
info.tx_pause = 1;
info.rx_pause = 1;
- } else if (strcasecmp("tx", params->opt) == 0) {
+ } else if (strcasecmp("tx", params->mode) == 0) {
info.tx_pause = 1;
info.rx_pause = 0;
- } else if (strcasecmp("rx", params->opt) == 0) {
+ } else if (strcasecmp("rx", params->mode) == 0) {
info.tx_pause = 0;
info.rx_pause = 1;
} else {
info.tx_pause = 0;
info.rx_pause = 0;
}
- /* Assume auto-negotiation wanted */
- info.autoneg = 1;
+
+ if (strcasecmp("on", params->an_status) == 0)
+ info.autoneg = 1;
+ else
+ info.autoneg = 0;
+
stat = rte_ethtool_set_pauseparam(params->port, &info);
}
if (stat == 0) {
- if (info.rx_pause && info.tx_pause)
- printf("Port %i: Tx & Rx Paused\n", params->port);
- else if (info.rx_pause)
- printf("Port %i: Rx Paused\n", params->port);
- else if (info.tx_pause)
- printf("Port %i: Tx Paused\n", params->port);
- else
- printf("Port %i: Tx & Rx not paused\n", params->port);
+ printf("Pause parameters for Port %i:\n", params->port);
+ printf("Rx pause: %s\n", info.rx_pause ? "on" : "off");
+ printf("Tx pause: %s\n", info.tx_pause ? "on" : "off");
+ printf("Autoneg: %s\n", info.autoneg ? "on" : "off");
} else if (stat == -ENOTSUP)
printf("Port %i: Operation not supported\n", params->port);
else
printf("Port %i: Error %i\n", params->port, stat);
}
-
static void
pcmd_open_callback(__rte_unused void *ptr_params,
__rte_unused struct cmdline *ctx,
@@ -741,11 +752,13 @@
.f = pcmd_pause_callback,
.data = NULL,
.help_str =
- "pause <port_id> <all|tx|rx|none>\n Pause/unpause port",
+ "pause <port_id> <full|tx|rx|none> autoneg <on|off>\n Pause/unpause port",
.tokens = {
(void *)&pcmd_pause_token_cmd,
(void *)&pcmd_pause_token_port,
- (void *)&pcmd_pause_token_opt,
+ (void *)&pcmd_pause_token_mode,
+ (void *)&pcmd_pause_token_autoneg,
+ (void *)&pcmd_pause_token_an_status,
NULL
},
};
diff -Nru dpdk-20.11.9/examples/ipsec-secgw/ipsec.h dpdk-20.11.10/examples/ipsec-secgw/ipsec.h
--- dpdk-20.11.9/examples/ipsec-secgw/ipsec.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/examples/ipsec-secgw/ipsec.h 2023-12-12 10:30:50.000000000 +0000
@@ -224,11 +224,18 @@
uint64_t ipv6_offloads;
};
+/*
+ * This structure is used for the key in hash table.
+ * Padding is to force the struct to use 8 bytes,
+ * to ensure memory is not read past this structs boundary
+ * (hash key calculation reads 8 bytes if this struct is size 5 bytes).
+ */
struct cdev_key {
uint16_t lcore_id;
uint8_t cipher_algo;
uint8_t auth_algo;
uint8_t aead_algo;
+ uint8_t padding[3]; /* padding to 8-byte size should be zeroed */
};
struct socket_ctx {
diff -Nru dpdk-20.11.9/lib/librte_cryptodev/rte_cryptodev.h dpdk-20.11.10/lib/librte_cryptodev/rte_cryptodev.h
--- dpdk-20.11.9/lib/librte_cryptodev/rte_cryptodev.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_cryptodev/rte_cryptodev.h 2023-12-12 10:30:50.000000000 +0000
@@ -875,6 +875,15 @@
/**< Flag indicating the device is attached */
} __rte_cache_aligned;
+/**
+ * Get the security context for the cryptodev.
+ *
+ * @param dev_id
+ * The device identifier.
+ * @return
+ * - NULL on error.
+ * - Pointer to security context on success.
+ */
void *
rte_cryptodev_get_sec_ctx(uint8_t dev_id);
diff -Nru dpdk-20.11.9/lib/librte_eal/common/rte_malloc.c dpdk-20.11.10/lib/librte_eal/common/rte_malloc.c
--- dpdk-20.11.9/lib/librte_eal/common/rte_malloc.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_eal/common/rte_malloc.c 2023-12-12 10:30:50.000000000 +0000
@@ -46,13 +46,13 @@
void
rte_free(void *addr)
{
- return mem_free(addr, true);
+ mem_free(addr, true);
}
void
eal_free_no_trace(void *addr)
{
- return mem_free(addr, false);
+ mem_free(addr, false);
}
static void *
diff -Nru dpdk-20.11.9/lib/librte_eal/common/rte_random.c dpdk-20.11.10/lib/librte_eal/common/rte_random.c
--- dpdk-20.11.9/lib/librte_eal/common/rte_random.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_eal/common/rte_random.c 2023-12-12 10:30:50.000000000 +0000
@@ -82,7 +82,7 @@
unsigned int lcore_id;
/* add lcore_id to seed to avoid having the same sequence */
- for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++)
+ for (lcore_id = 0; lcore_id < RTE_DIM(rand_states); lcore_id++)
__rte_srand_lfsr258(seed + lcore_id, &rand_states[lcore_id]);
}
diff -Nru dpdk-20.11.9/lib/librte_eal/windows/eal_memory.c dpdk-20.11.10/lib/librte_eal/windows/eal_memory.c
--- dpdk-20.11.9/lib/librte_eal/windows/eal_memory.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_eal/windows/eal_memory.c 2023-12-12 10:30:50.000000000 +0000
@@ -72,10 +72,18 @@
#ifdef RTE_TOOLCHAIN_GCC
+#ifndef MEM_COALESCE_PLACEHOLDERS
#define MEM_COALESCE_PLACEHOLDERS 0x00000001
+#endif
+#ifndef MEM_PRESERVE_PLACEHOLDER
#define MEM_PRESERVE_PLACEHOLDER 0x00000002
+#endif
+#ifndef MEM_REPLACE_PLACEHOLDER
#define MEM_REPLACE_PLACEHOLDER 0x00004000
+#endif
+#ifndef MEM_RESERVE_PLACEHOLDER
#define MEM_RESERVE_PLACEHOLDER 0x00040000
+#endif
int
eal_mem_win32api_init(void)
diff -Nru dpdk-20.11.9/lib/librte_ethdev/rte_ethdev.h dpdk-20.11.10/lib/librte_ethdev/rte_ethdev.h
--- dpdk-20.11.9/lib/librte_ethdev/rte_ethdev.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_ethdev/rte_ethdev.h 2023-12-12 10:30:50.000000000 +0000
@@ -3325,7 +3325,7 @@
* for example, to count dropped packets, or to retry transmission of packets
* which cannot be sent, this function should be used to register a suitable
* callback function to implement the desired behaviour.
- * The example callback "rte_eth_count_unsent_packet_callback()" is also
+ * The example callback "rte_eth_tx_buffer_count_callback()" is also
* provided as reference.
*
* @param buffer
diff -Nru dpdk-20.11.9/lib/librte_ethdev/rte_flow.c dpdk-20.11.10/lib/librte_ethdev/rte_flow.c
--- dpdk-20.11.9/lib/librte_ethdev/rte_flow.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_ethdev/rte_flow.c 2023-12-12 10:30:50.000000000 +0000
@@ -580,7 +580,7 @@
if (src.rss->key_len && src.rss->key) {
off = RTE_ALIGN_CEIL(off, sizeof(*dst.rss->key));
tmp = sizeof(*src.rss->key) * src.rss->key_len;
- if (size >= off + tmp)
+ if (size >= (uint64_t)off + (uint64_t)tmp)
dst.rss->key = rte_memcpy
((void *)((uintptr_t)dst.rss + off),
src.rss->key, tmp);
@@ -589,7 +589,7 @@
if (src.rss->queue_num) {
off = RTE_ALIGN_CEIL(off, sizeof(*dst.rss->queue));
tmp = sizeof(*src.rss->queue) * src.rss->queue_num;
- if (size >= off + tmp)
+ if (size >= (uint64_t)off + (uint64_t)tmp)
dst.rss->queue = rte_memcpy
((void *)((uintptr_t)dst.rss + off),
src.rss->queue, tmp);
diff -Nru dpdk-20.11.9/lib/librte_eventdev/rte_eventdev.c dpdk-20.11.10/lib/librte_eventdev/rte_eventdev.c
--- dpdk-20.11.9/lib/librte_eventdev/rte_eventdev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_eventdev/rte_eventdev.c 2023-12-12 10:30:50.000000000 +0000
@@ -106,6 +106,9 @@
dev_info->dequeue_timeout_ns = dev->data->dev_conf.dequeue_timeout_ns;
dev_info->dev = dev->dev;
+ if (dev->dev != NULL && dev->dev->driver != NULL)
+ dev_info->driver_name = dev->dev->driver->name;
+
return 0;
}
diff -Nru dpdk-20.11.9/lib/librte_eventdev/rte_eventdev_pmd_vdev.h dpdk-20.11.10/lib/librte_eventdev/rte_eventdev_pmd_vdev.h
--- dpdk-20.11.9/lib/librte_eventdev/rte_eventdev_pmd_vdev.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_eventdev/rte_eventdev_pmd_vdev.h 2023-12-12 10:30:50.000000000 +0000
@@ -47,7 +47,7 @@
*/
static inline struct rte_eventdev *
rte_event_pmd_vdev_init(const char *name, size_t dev_private_size,
- int socket_id)
+ int socket_id, struct rte_vdev_device *vdev)
{
struct rte_eventdev *eventdev;
@@ -69,6 +69,7 @@
rte_panic("Cannot allocate memzone for private device"
" data");
}
+ eventdev->dev = &vdev->device;
return eventdev;
}
diff -Nru dpdk-20.11.9/lib/librte_fib/dir24_8.c dpdk-20.11.10/lib/librte_fib/dir24_8.c
--- dpdk-20.11.9/lib/librte_fib/dir24_8.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_fib/dir24_8.c 2023-12-12 10:30:50.000000000 +0000
@@ -392,6 +392,12 @@
return ret;
ledge = redge +
(uint32_t)(1ULL << (32 - tmp_depth));
+ /*
+ * we got to the end of address space
+ * and wrapped around
+ */
+ if (ledge == 0)
+ break;
} else {
redge = ip + (uint32_t)(1ULL << (32 - depth));
if (ledge == redge && ledge != 0)
diff -Nru dpdk-20.11.9/lib/librte_fib/trie.c dpdk-20.11.10/lib/librte_fib/trie.c
--- dpdk-20.11.9/lib/librte_fib/trie.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_fib/trie.c 2023-12-12 10:30:50.000000000 +0000
@@ -457,6 +457,14 @@
}
static int
+v6_addr_is_zero(const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE])
+{
+ uint8_t ip_addr[RTE_FIB6_IPV6_ADDR_SIZE] = {0};
+
+ return rte_rib6_is_equal(ip, ip_addr);
+}
+
+static int
modify_dp(struct rte_trie_tbl *dp, struct rte_rib6 *rib,
const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE],
uint8_t depth, uint64_t next_hop)
@@ -489,11 +497,19 @@
return ret;
get_nxt_net(redge, tmp_depth);
rte_rib6_copy_addr(ledge, redge);
+ /*
+ * we got to the end of address space
+ * and wrapped around
+ */
+ if (v6_addr_is_zero(ledge))
+ break;
} else {
rte_rib6_copy_addr(redge, ip);
get_nxt_net(redge, depth);
- if (rte_rib6_is_equal(ledge, redge))
+ if (rte_rib6_is_equal(ledge, redge) &&
+ !v6_addr_is_zero(ledge))
break;
+
ret = install_to_dp(dp, ledge, redge,
next_hop);
if (ret != 0)
diff -Nru dpdk-20.11.9/lib/librte_hash/rte_cuckoo_hash.c dpdk-20.11.10/lib/librte_hash/rte_cuckoo_hash.c
--- dpdk-20.11.9/lib/librte_hash/rte_cuckoo_hash.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_hash/rte_cuckoo_hash.c 2023-12-12 10:30:50.000000000 +0000
@@ -1866,11 +1866,15 @@
_mm_load_si128(
(__m128i const *)prim_bkt->sig_current),
_mm_set1_epi16(sig)));
+ /* Extract the even-index bits only */
+ *prim_hash_matches &= 0x5555;
/* Compare all signatures in the bucket */
*sec_hash_matches = _mm_movemask_epi8(_mm_cmpeq_epi16(
_mm_load_si128(
(__m128i const *)sec_bkt->sig_current),
_mm_set1_epi16(sig)));
+ /* Extract the even-index bits only */
+ *sec_hash_matches &= 0x5555;
break;
#elif defined(__ARM_NEON)
case RTE_HASH_COMPARE_NEON: {
diff -Nru dpdk-20.11.9/lib/librte_mbuf/rte_mbuf_ptype.h dpdk-20.11.10/lib/librte_mbuf/rte_mbuf_ptype.h
--- dpdk-20.11.9/lib/librte_mbuf/rte_mbuf_ptype.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_mbuf/rte_mbuf_ptype.h 2023-12-12 10:30:50.000000000 +0000
@@ -419,10 +419,10 @@
*
* Packet format:
* <'ether type'=0x0800
- * | 'version'=4, 'protocol'=51>
+ * | 'version'=4, 'protocol'=50>
* or,
* <'ether type'=0x86DD
- * | 'version'=6, 'next header'=51>
+ * | 'version'=6, 'next header'=50>
*/
#define RTE_PTYPE_TUNNEL_ESP 0x00009000
/**
diff -Nru dpdk-20.11.9/lib/librte_mempool/rte_mempool.c dpdk-20.11.10/lib/librte_mempool/rte_mempool.c
--- dpdk-20.11.9/lib/librte_mempool/rte_mempool.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_mempool/rte_mempool.c 2023-12-12 10:30:50.000000000 +0000
@@ -884,6 +884,22 @@
STAILQ_INIT(&mp->mem_list);
/*
+ * Since we have 4 combinations of the SP/SC/MP/MC examine the flags to
+ * set the correct index into the table of ops structs.
+ */
+ if ((flags & MEMPOOL_F_SP_PUT) && (flags & MEMPOOL_F_SC_GET))
+ ret = rte_mempool_set_ops_byname(mp, "ring_sp_sc", NULL);
+ else if (flags & MEMPOOL_F_SP_PUT)
+ ret = rte_mempool_set_ops_byname(mp, "ring_sp_mc", NULL);
+ else if (flags & MEMPOOL_F_SC_GET)
+ ret = rte_mempool_set_ops_byname(mp, "ring_mp_sc", NULL);
+ else
+ ret = rte_mempool_set_ops_byname(mp, "ring_mp_mc", NULL);
+
+ if (ret)
+ goto exit_unlock;
+
+ /*
* local_cache pointer is set even if cache_size is zero.
* The local_cache points to just past the elt_pa[] array.
*/
@@ -923,7 +939,6 @@
rte_mempool_obj_cb_t *obj_init, void *obj_init_arg,
int socket_id, unsigned flags)
{
- int ret;
struct rte_mempool *mp;
mp = rte_mempool_create_empty(name, n, elt_size, cache_size,
@@ -931,22 +946,6 @@
if (mp == NULL)
return NULL;
- /*
- * Since we have 4 combinations of the SP/SC/MP/MC examine the flags to
- * set the correct index into the table of ops structs.
- */
- if ((flags & MEMPOOL_F_SP_PUT) && (flags & MEMPOOL_F_SC_GET))
- ret = rte_mempool_set_ops_byname(mp, "ring_sp_sc", NULL);
- else if (flags & MEMPOOL_F_SP_PUT)
- ret = rte_mempool_set_ops_byname(mp, "ring_sp_mc", NULL);
- else if (flags & MEMPOOL_F_SC_GET)
- ret = rte_mempool_set_ops_byname(mp, "ring_mp_sc", NULL);
- else
- ret = rte_mempool_set_ops_byname(mp, "ring_mp_mc", NULL);
-
- if (ret)
- goto fail;
-
/* call the mempool priv initializer */
if (mp_init)
mp_init(mp, mp_init_arg);
diff -Nru dpdk-20.11.9/lib/librte_mempool/rte_mempool.h dpdk-20.11.10/lib/librte_mempool/rte_mempool.h
--- dpdk-20.11.9/lib/librte_mempool/rte_mempool.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_mempool/rte_mempool.h 2023-12-12 10:30:50.000000000 +0000
@@ -404,13 +404,19 @@
typedef void (*rte_mempool_free_t)(struct rte_mempool *mp);
/**
- * Enqueue an object into the external pool.
+ * Enqueue 'n' objects into the external pool.
+ * @return
+ * - 0: Success
+ * - <0: Error
*/
typedef int (*rte_mempool_enqueue_t)(struct rte_mempool *mp,
void * const *obj_table, unsigned int n);
/**
- * Dequeue an object from the external pool.
+ * Dequeue 'n' objects from the external pool.
+ * @return
+ * - 0: Success
+ * - <0: Error
*/
typedef int (*rte_mempool_dequeue_t)(struct rte_mempool *mp,
void **obj_table, unsigned int n);
@@ -1402,7 +1408,7 @@
* @param cache
* A pointer to a mempool cache structure. May be NULL if not needed.
* @return
- * - >=0: Success; number of objects supplied.
+ * - 0: Success.
* - <0: Error; code of driver dequeue function.
*/
static __rte_always_inline int
diff -Nru dpdk-20.11.9/lib/librte_meter/rte_meter.h dpdk-20.11.10/lib/librte_meter/rte_meter.h
--- dpdk-20.11.9/lib/librte_meter/rte_meter.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_meter/rte_meter.h 2023-12-12 10:30:50.000000000 +0000
@@ -128,9 +128,6 @@
rte_meter_trtcm_profile_config(struct rte_meter_trtcm_profile *p,
struct rte_meter_trtcm_params *params);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
* trTCM RFC 4115 profile configuration
*
* @param p
@@ -174,9 +171,6 @@
struct rte_meter_trtcm_profile *p);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
* trTCM RFC 4115 configuration per metered traffic flow
*
* @param m
@@ -277,9 +271,6 @@
enum rte_color pkt_color);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
* trTCM RFC4115 color blind traffic metering
*
* @param m
@@ -301,9 +292,6 @@
uint32_t pkt_len);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
* trTCM RFC4115 color aware traffic metering
*
* @param m
diff -Nru dpdk-20.11.9/lib/librte_pdump/rte_pdump.c dpdk-20.11.10/lib/librte_pdump/rte_pdump.c
--- dpdk-20.11.9/lib/librte_pdump/rte_pdump.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_pdump/rte_pdump.c 2023-12-12 10:30:50.000000000 +0000
@@ -473,9 +473,10 @@
if (rte_mp_request_sync(&mp_req, &mp_reply, &ts) == 0) {
mp_rep = &mp_reply.msgs[0];
resp = (struct pdump_response *)mp_rep->param;
- rte_errno = resp->err_value;
- if (!resp->err_value)
+ if (resp->err_value == 0)
ret = 0;
+ else
+ rte_errno = -resp->err_value;
free(mp_reply.msgs);
}
diff -Nru dpdk-20.11.9/lib/librte_rawdev/rte_rawdev.c dpdk-20.11.10/lib/librte_rawdev/rte_rawdev.c
--- dpdk-20.11.9/lib/librte_rawdev/rte_rawdev.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_rawdev/rte_rawdev.c 2023-12-12 10:30:50.000000000 +0000
@@ -494,8 +494,7 @@
uint16_t dev_id;
if (rte_rawdev_pmd_get_named_dev(name) != NULL) {
- RTE_RDEV_ERR("Event device with name %s already allocated!",
- name);
+ RTE_RDEV_ERR("Raw device with name %s already allocated!", name);
return NULL;
}
diff -Nru dpdk-20.11.9/lib/librte_security/rte_security.h dpdk-20.11.10/lib/librte_security/rte_security.h
--- dpdk-20.11.9/lib/librte_security/rte_security.h 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_security/rte_security.h 2023-12-12 10:30:50.000000000 +0000
@@ -327,6 +327,7 @@
/**
* Security session action type.
*/
+/* Enumeration of rte_security_session_action_type 8<*/
enum rte_security_session_action_type {
RTE_SECURITY_ACTION_TYPE_NONE,
/**< No security actions */
@@ -347,8 +348,10 @@
* protocol is processed synchronously by a CPU.
*/
};
+/* >8 End enumeration of rte_security_session_action_type. */
/** Security session protocol definition */
+/* Enumeration of rte_security_session_protocol 8<*/
enum rte_security_session_protocol {
RTE_SECURITY_PROTOCOL_IPSEC = 1,
/**< IPsec Protocol */
@@ -359,10 +362,12 @@
RTE_SECURITY_PROTOCOL_DOCSIS,
/**< DOCSIS Protocol */
};
+/* >8 End enumeration of rte_security_session_protocol. */
/**
* Security session configuration
*/
+/* Structure rte_security_session_conf 8< */
struct rte_security_session_conf {
enum rte_security_session_action_type action_type;
/**< Type of action to be performed on the session */
@@ -381,6 +386,7 @@
void *userdata;
/**< Application specific userdata to be saved with session */
};
+/* >8 End of structure rte_security_session_conf. */
struct rte_security_session {
void *sess_private_data;
diff -Nru dpdk-20.11.9/lib/librte_vhost/vhost.c dpdk-20.11.10/lib/librte_vhost/vhost.c
--- dpdk-20.11.9/lib/librte_vhost/vhost.c 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/lib/librte_vhost/vhost.c 2023-12-12 10:30:50.000000000 +0000
@@ -1253,6 +1253,7 @@
{
struct virtio_net *dev;
struct vhost_virtqueue *vq;
+ int ret = 0;
dev = get_device(vid);
if (!dev)
@@ -1267,14 +1268,20 @@
rte_spinlock_lock(&vq->access_lock);
+ if (unlikely(!vq->access_ok)) {
+ ret = -1;
+ goto out_unlock;
+ }
+
if (vq_is_packed(dev))
vhost_vring_call_packed(dev, vq);
else
vhost_vring_call_split(dev, vq);
+out_unlock:
rte_spinlock_unlock(&vq->access_lock);
- return 0;
+ return ret;
}
int
@@ -1282,6 +1289,7 @@
{
struct virtio_net *dev;
struct vhost_virtqueue *vq;
+ int ret = 0;
dev = get_device(vid);
if (!dev)
@@ -1297,14 +1305,20 @@
if (!rte_spinlock_trylock(&vq->access_lock))
return -EAGAIN;
+ if (unlikely(!vq->access_ok)) {
+ ret = -1;
+ goto out_unlock;
+ }
+
if (vq_is_packed(dev))
vhost_vring_call_packed(dev, vq);
else
vhost_vring_call_split(dev, vq);
+out_unlock:
rte_spinlock_unlock(&vq->access_lock);
- return 0;
+ return ret;
}
uint16_t
@@ -1327,7 +1341,10 @@
rte_spinlock_lock(&vq->access_lock);
- if (unlikely(!vq->enabled || vq->avail == NULL))
+ if (unlikely(!vq->access_ok))
+ goto out;
+
+ if (unlikely(!vq->enabled))
goto out;
ret = *(volatile uint16_t *)&vq->avail->idx - vq->last_used_idx;
@@ -1419,9 +1436,15 @@
rte_spinlock_lock(&vq->access_lock);
+ if (unlikely(!vq->access_ok)) {
+ ret = -1;
+ goto out_unlock;
+ }
+
vq->notif_enable = enable;
ret = vhost_enable_guest_notification(dev, vq, enable);
+out_unlock:
rte_spinlock_unlock(&vq->access_lock);
return ret;
@@ -1481,7 +1504,10 @@
rte_spinlock_lock(&vq->access_lock);
- if (unlikely(vq->enabled == 0 || vq->avail == NULL))
+ if (unlikely(!vq->access_ok))
+ goto out;
+
+ if (unlikely(!vq->enabled))
goto out;
ret = *((volatile uint16_t *)&vq->avail->idx) - vq->last_avail_idx;
diff -Nru dpdk-20.11.9/VERSION dpdk-20.11.10/VERSION
--- dpdk-20.11.9/VERSION 2023-08-15 16:54:57.000000000 +0100
+++ dpdk-20.11.10/VERSION 2023-12-12 10:30:50.000000000 +0000
@@ -1 +1 @@
-20.11.9
+20.11.10
Attachment:
signature.asc
Description: This is a digitally signed message part