From nobody Fri Dec 19 11:02:21 2025 Received: from wfhigh4-smtp.messagingengine.com (wfhigh4-smtp.messagingengine.com [64.147.123.155]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B61344F8B1 for ; Sun, 28 Apr 2024 07:13:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.155 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714288438; cv=none; b=SRAsri8f2xperWW8UfNwtNBlFJhkm09plXiLUIq8lZoffzJmzGV1vf6pltq7gDROqMkFnKAsZoiVTtd8Rne01FUoY4rg6Rpple6e55UCbpHz+wLcuczNdSMfzt8GJpCA3QNcjJIvqLTxWthMK+X0vHhu5uwRsJAASWawics2pKI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714288438; c=relaxed/simple; bh=2J6kTxZg3TzwJ6DcCrDjy7FGC7FTmcuUjviGf///+lg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pKSthl/uiRYK5DF+q/vG4HuZ/InjtYDGIEmgKWpIc5rvKD7VdxKMvbdadacmuJ0ju00xqFPbImhRpZnLHTtwBdSvZx+WjM64aM84FTdresAMvabtgMMMxQDkikPC9pd6kEh0LPyMOfpufo7+AbzZBHUoOrzOS9/NEk/tD6XCxNo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp; spf=pass smtp.mailfrom=sakamocchi.jp; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b=H/K7ZR6X; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=FTTymf+t; arc=none smtp.client-ip=64.147.123.155 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b="H/K7ZR6X"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="FTTymf+t" Received: from compute7.internal (compute7.nyi.internal [10.202.2.48]) by mailfhigh.west.internal (Postfix) with ESMTP id 81D321800120; Sun, 28 Apr 2024 03:13:54 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 28 Apr 2024 03:13:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sakamocchi.jp; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm3; t=1714288434; x= 1714374834; bh=z/PyKQzrC7jI33YYu3lpMq3bipG9vhbCODvaaOAKScU=; b=H /K7ZR6XsMkQUe8KAdqtfalhNJgh4EQnf0Os+9Q1IIp2++qVqZUwABkPVf/US4WYK IJbEDHX2UTTEFF5uNGFBZ0dZNGaySx7QOcPz2R05NuG/keRRkml+RhFbJ05gcXU5 OI4BaTwerNXM63d+X99oyiK20zyQ/IBRH2zxTBgzCys1J9T6socmhUIszELHd60n Kx8jjcjrVnGrrSQyYRcp5Yw/JwP8Ck5fABtt8S37GA5oeLYQoHeR+7FIEqh/7FPi x3xTiKsgytcvSLlwEi+emnzzYkOkSXTP26acvxefqeeIF4MjkJinRFMU7zxBRvqH lpnZ5dtsiS3I5r2/sVQnQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1714288434; x= 1714374834; bh=z/PyKQzrC7jI33YYu3lpMq3bipG9vhbCODvaaOAKScU=; b=F TTymf+t0J35WEju6C5bMcG4MbhLqCkhPzW3HQYGpdenIt1Yw5xrnW0xAObbXc+fP AoNQR2/Qff8Z02PKlb2Bw1iKFtZqlVa1oDBMIsb+KMcrNOj8j4eK55kcQalZ/RxN rCswTwlnRpZ6zEZgX+Z9ilv0YWaKIr0axOHD1HXS8m9we7S37S1JLleiUPKVS0Xu GMFXF3rXI6NIxwRPct+Vj/18qwTJaZup5GwA2AQmimmP66fWeHBQjSFkPwfnP/HD 4tyIMdy4ZjiPAvcqV5ZoPnsPtaQzo6V/FNIbymsOwkKLtDrJwFnXpa/aXc4SqgU0 TnmQTUpntffDQj3+Fu3Pg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvddtgedgvddtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvfevufffkffojghfggfgsedtke ertdertddtnecuhfhrohhmpefvrghkrghshhhiucfurghkrghmohhtohcuoehoqdhtrghk rghshhhisehsrghkrghmohgttghhihdrjhhpqeenucggtffrrghtthgvrhhnpeeugfevtd efhfeffeeuudduhfekhffgveejfeeiiefftdethfduudevjeekveffleenucffohhmrghi nhepthgvshhtrghnhihthhhinhhgrdhorhhgnecuvehluhhsthgvrhfuihiivgeptdenuc frrghrrghmpehmrghilhhfrhhomhepohdqthgrkhgrshhhihesshgrkhgrmhhotggthhhi rdhjph X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 28 Apr 2024 03:13:52 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 1/8] firewire: core: add common inline functions to serialize/deserialize asynchronous packet header Date: Sun, 28 Apr 2024 16:13:39 +0900 Message-ID: <20240428071347.409202-2-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240428071347.409202-1-o-takashi@sakamocchi.jp> References: <20240428071347.409202-1-o-takashi@sakamocchi.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In both core and 1394 OHCI driver, some hard-coded values and macros are used to serialize/deserialize the header of asynchronous packets. It is inconvenient to reuse them. This commit adds some helper inline functions with their tests for the purpose. Signed-off-by: Takashi Sakamoto --- drivers/firewire/.kunitconfig | 1 + drivers/firewire/Kconfig | 16 + drivers/firewire/Makefile | 3 + drivers/firewire/packet-header-definitions.h | 168 ++++++ drivers/firewire/packet-serdes-test.c | 538 +++++++++++++++++++ 5 files changed, 726 insertions(+) create mode 100644 drivers/firewire/packet-header-definitions.h create mode 100644 drivers/firewire/packet-serdes-test.c diff --git a/drivers/firewire/.kunitconfig b/drivers/firewire/.kunitconfig index 76444a2d5e12..60d9e7c35417 100644 --- a/drivers/firewire/.kunitconfig +++ b/drivers/firewire/.kunitconfig @@ -3,3 +3,4 @@ CONFIG_PCI=3Dy CONFIG_FIREWIRE=3Dy CONFIG_FIREWIRE_KUNIT_UAPI_TEST=3Dy CONFIG_FIREWIRE_KUNIT_DEVICE_ATTRIBUTE_TEST=3Dy +CONFIG_FIREWIRE_KUNIT_PACKET_SERDES_TEST=3Dy diff --git a/drivers/firewire/Kconfig b/drivers/firewire/Kconfig index 552a39df8cbd..869598b20e3a 100644 --- a/drivers/firewire/Kconfig +++ b/drivers/firewire/Kconfig @@ -50,6 +50,22 @@ config FIREWIRE_KUNIT_DEVICE_ATTRIBUTE_TEST For more information on KUnit and unit tests in general, refer to the KUnit documentation in Documentation/dev-tools/kunit/. =20 +config FIREWIRE_KUNIT_PACKET_SERDES_TEST + tristate "KUnit tests for packet serialization/deserialization" if !KUNIT= _ALL_TESTS + depends on FIREWIRE && KUNIT + default KUNIT_ALL_TESTS + help + This builds the KUnit tests for packet serialization and + deserialization. + + KUnit tests run during boot and output the results to the debug + log in TAP format (https://testanything.org/). Only useful for + kernel devs running KUnit test harness and are not for inclusion + into a production build. + + For more information on KUnit and unit tests in general, refer + to the KUnit documentation in Documentation/dev-tools/kunit/. + config FIREWIRE_OHCI tristate "OHCI-1394 controllers" depends on PCI && FIREWIRE && MMU diff --git a/drivers/firewire/Makefile b/drivers/firewire/Makefile index b24b2879ac34..bbde29a0fba6 100644 --- a/drivers/firewire/Makefile +++ b/drivers/firewire/Makefile @@ -17,4 +17,7 @@ obj-$(CONFIG_FIREWIRE_NOSY) +=3D nosy.o obj-$(CONFIG_PROVIDE_OHCI1394_DMA_INIT) +=3D init_ohci1394_dma.o =20 firewire-uapi-test-objs +=3D uapi-test.o +firewire-packet-serdes-test-objs +=3D packet-serdes-test.o + obj-$(CONFIG_FIREWIRE_KUNIT_UAPI_TEST) +=3D firewire-uapi-test.o +obj-$(CONFIG_FIREWIRE_KUNIT_PACKET_SERDES_TEST) +=3D firewire-packet-serde= s-test.o diff --git a/drivers/firewire/packet-header-definitions.h b/drivers/firewir= e/packet-header-definitions.h new file mode 100644 index 000000000000..83e550427706 --- /dev/null +++ b/drivers/firewire/packet-header-definitions.h @@ -0,0 +1,168 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +// +// packet-header-definitions.h - The definitions of header fields for IEEE= 1394 packet. +// +// Copyright (c) 2024 Takashi Sakamoto + +#ifndef _FIREWIRE_PACKET_HEADER_DEFINITIONS_H +#define _FIREWIRE_PACKET_HEADER_DEFINITIONS_H + +#define ASYNC_HEADER_QUADLET_COUNT 4 + +#define ASYNC_HEADER_Q0_DESTINATION_SHIFT 16 +#define ASYNC_HEADER_Q0_DESTINATION_MASK 0xffff0000 +#define ASYNC_HEADER_Q0_TLABEL_SHIFT 10 +#define ASYNC_HEADER_Q0_TLABEL_MASK 0x0000fc00 +#define ASYNC_HEADER_Q0_RETRY_SHIFT 8 +#define ASYNC_HEADER_Q0_RETRY_MASK 0x00000300 +#define ASYNC_HEADER_Q0_TCODE_SHIFT 4 +#define ASYNC_HEADER_Q0_TCODE_MASK 0x000000f0 +#define ASYNC_HEADER_Q0_PRIORITY_SHIFT 0 +#define ASYNC_HEADER_Q0_PRIORITY_MASK 0x0000000f +#define ASYNC_HEADER_Q1_SOURCE_SHIFT 16 +#define ASYNC_HEADER_Q1_SOURCE_MASK 0xffff0000 +#define ASYNC_HEADER_Q1_RCODE_SHIFT 12 +#define ASYNC_HEADER_Q1_RCODE_MASK 0x0000f000 +#define ASYNC_HEADER_Q1_RCODE_SHIFT 12 +#define ASYNC_HEADER_Q1_RCODE_MASK 0x0000f000 +#define ASYNC_HEADER_Q1_OFFSET_HIGH_SHIFT 0 +#define ASYNC_HEADER_Q1_OFFSET_HIGH_MASK 0x0000ffff +#define ASYNC_HEADER_Q3_DATA_LENGTH_SHIFT 16 +#define ASYNC_HEADER_Q3_DATA_LENGTH_MASK 0xffff0000 +#define ASYNC_HEADER_Q3_EXTENDED_TCODE_SHIFT 0 +#define ASYNC_HEADER_Q3_EXTENDED_TCODE_MASK 0x0000ffff + +static inline unsigned int async_header_get_destination(const u32 header[A= SYNC_HEADER_QUADLET_COUNT]) +{ + return (header[0] & ASYNC_HEADER_Q0_DESTINATION_MASK) >> ASYNC_HEADER_Q0_= DESTINATION_SHIFT; +} + +static inline unsigned int async_header_get_tlabel(const u32 header[ASYNC_= HEADER_QUADLET_COUNT]) +{ + return (header[0] & ASYNC_HEADER_Q0_TLABEL_MASK) >> ASYNC_HEADER_Q0_TLABE= L_SHIFT; +} + +static inline unsigned int async_header_get_retry(const u32 header[ASYNC_H= EADER_QUADLET_COUNT]) +{ + return (header[0] & ASYNC_HEADER_Q0_RETRY_MASK) >> ASYNC_HEADER_Q0_RETRY_= SHIFT; +} + +static inline unsigned int async_header_get_tcode(const u32 header[ASYNC_H= EADER_QUADLET_COUNT]) +{ + return (header[0] & ASYNC_HEADER_Q0_TCODE_MASK) >> ASYNC_HEADER_Q0_TCODE_= SHIFT; +} + +static inline unsigned int async_header_get_priority(const u32 header[ASYN= C_HEADER_QUADLET_COUNT]) +{ + return (header[0] & ASYNC_HEADER_Q0_PRIORITY_MASK) >> ASYNC_HEADER_Q0_PRI= ORITY_SHIFT; +} + +static inline unsigned int async_header_get_source(const u32 header[ASYNC_= HEADER_QUADLET_COUNT]) +{ + return (header[1] & ASYNC_HEADER_Q1_SOURCE_MASK) >> ASYNC_HEADER_Q1_SOURC= E_SHIFT; +} + +static inline unsigned int async_header_get_rcode(const u32 header[ASYNC_H= EADER_QUADLET_COUNT]) +{ + return (header[1] & ASYNC_HEADER_Q1_RCODE_MASK) >> ASYNC_HEADER_Q1_RCODE_= SHIFT; +} + +static inline u64 async_header_get_offset(const u32 header[ASYNC_HEADER_QU= ADLET_COUNT]) +{ + u32 hi =3D (header[1] & ASYNC_HEADER_Q1_OFFSET_HIGH_MASK) >> ASYNC_HEADER= _Q1_OFFSET_HIGH_SHIFT; + return (((u64)hi) << 32) | ((u64)header[2]); +} + +static inline u32 async_header_get_quadlet_data(const u32 header[ASYNC_HEA= DER_QUADLET_COUNT]) +{ + return header[3]; +} + +static inline unsigned int async_header_get_data_length(const u32 header[A= SYNC_HEADER_QUADLET_COUNT]) +{ + return (header[3] & ASYNC_HEADER_Q3_DATA_LENGTH_MASK) >> ASYNC_HEADER_Q3_= DATA_LENGTH_SHIFT; +} + +static inline unsigned int async_header_get_extended_tcode(const u32 heade= r[ASYNC_HEADER_QUADLET_COUNT]) +{ + return (header[3] & ASYNC_HEADER_Q3_EXTENDED_TCODE_MASK) >> ASYNC_HEADER_= Q3_EXTENDED_TCODE_SHIFT; +} + +static inline void async_header_set_destination(u32 header[ASYNC_HEADER_QU= ADLET_COUNT], + unsigned int destination) +{ + header[0] &=3D ~ASYNC_HEADER_Q0_DESTINATION_MASK; + header[0] |=3D (((u32)destination) << ASYNC_HEADER_Q0_DESTINATION_SHIFT) = & ASYNC_HEADER_Q0_DESTINATION_MASK; +} + +static inline void async_header_set_tlabel(u32 header[ASYNC_HEADER_QUADLET= _COUNT], + unsigned int tlabel) +{ + header[0] &=3D ~ASYNC_HEADER_Q0_TLABEL_MASK; + header[0] |=3D (((u32)tlabel) << ASYNC_HEADER_Q0_TLABEL_SHIFT) & ASYNC_HE= ADER_Q0_TLABEL_MASK; +} + +static inline void async_header_set_retry(u32 header[ASYNC_HEADER_QUADLET_= COUNT], + unsigned int retry) +{ + header[0] &=3D ~ASYNC_HEADER_Q0_RETRY_MASK; + header[0] |=3D (((u32)retry) << ASYNC_HEADER_Q0_RETRY_SHIFT) & ASYNC_HEAD= ER_Q0_RETRY_MASK; +} + +static inline void async_header_set_tcode(u32 header[ASYNC_HEADER_QUADLET_= COUNT], + unsigned int tcode) +{ + header[0] &=3D ~ASYNC_HEADER_Q0_TCODE_MASK; + header[0] |=3D (((u32)tcode) << ASYNC_HEADER_Q0_TCODE_SHIFT) & ASYNC_HEAD= ER_Q0_TCODE_MASK; +} + +static inline void async_header_set_priority(u32 header[ASYNC_HEADER_QUADL= ET_COUNT], + unsigned int priority) +{ + header[0] &=3D ~ASYNC_HEADER_Q0_PRIORITY_MASK; + header[0] |=3D (((u32)priority) << ASYNC_HEADER_Q0_PRIORITY_SHIFT) & ASYN= C_HEADER_Q0_PRIORITY_MASK; +} + + +static inline void async_header_set_source(u32 header[ASYNC_HEADER_QUADLET= _COUNT], + unsigned int source) +{ + header[1] &=3D ~ASYNC_HEADER_Q1_SOURCE_MASK; + header[1] |=3D (((u32)source) << ASYNC_HEADER_Q1_SOURCE_SHIFT) & ASYNC_HE= ADER_Q1_SOURCE_MASK; +} + +static inline void async_header_set_rcode(u32 header[ASYNC_HEADER_QUADLET_= COUNT], + unsigned int rcode) +{ + header[1] &=3D ~ASYNC_HEADER_Q1_RCODE_MASK; + header[1] |=3D (((u32)rcode) << ASYNC_HEADER_Q1_RCODE_SHIFT) & ASYNC_HEAD= ER_Q1_RCODE_MASK; +} + +static inline void async_header_set_offset(u32 header[ASYNC_HEADER_QUADLET= _COUNT], u64 offset) +{ + u32 hi =3D (u32)(offset >> 32); + header[1] &=3D ~ASYNC_HEADER_Q1_OFFSET_HIGH_MASK; + header[1] |=3D (hi << ASYNC_HEADER_Q1_OFFSET_HIGH_SHIFT) & ASYNC_HEADER_Q= 1_OFFSET_HIGH_MASK; + header[2] =3D (u32)(offset & 0x00000000ffffffff); +} + +static inline void async_header_set_quadlet_data(u32 header[ASYNC_HEADER_Q= UADLET_COUNT], u32 quadlet_data) +{ + header[3] =3D quadlet_data; +} + +static inline void async_header_set_data_length(u32 header[ASYNC_HEADER_QU= ADLET_COUNT], + unsigned int data_length) +{ + header[3] &=3D ~ASYNC_HEADER_Q3_DATA_LENGTH_MASK; + header[3] |=3D (((u32)data_length) << ASYNC_HEADER_Q3_DATA_LENGTH_SHIFT) = & ASYNC_HEADER_Q3_DATA_LENGTH_MASK; +} + +static inline void async_header_set_extended_tcode(u32 header[ASYNC_HEADER= _QUADLET_COUNT], + unsigned int extended_tcode) +{ + header[3] &=3D ~ASYNC_HEADER_Q3_EXTENDED_TCODE_MASK; + header[3] |=3D (((u32)extended_tcode) << ASYNC_HEADER_Q3_EXTENDED_TCODE_S= HIFT) & ASYNC_HEADER_Q3_EXTENDED_TCODE_MASK; +} + +#endif // _FIREWIRE_PACKET_HEADER_DEFINITIONS_H diff --git a/drivers/firewire/packet-serdes-test.c b/drivers/firewire/packe= t-serdes-test.c new file mode 100644 index 000000000000..299e9f908463 --- /dev/null +++ b/drivers/firewire/packet-serdes-test.c @@ -0,0 +1,538 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +// +// packet-serdes-test.c - An application of Kunit to check serialization/d= eserialization of packets +// defined by IEEE 1394. +// +// Copyright (c) 2024 Takashi Sakamoto + +#include + +#include + +#include "packet-header-definitions.h" + +static void serialize_async_header_common(u32 header[ASYNC_HEADER_QUADLET_= COUNT], + unsigned int dst_id, unsigned int tlabel, + unsigned int retry, unsigned int tcode, + unsigned int priority, unsigned int src_id) +{ + async_header_set_destination(header, dst_id); + async_header_set_tlabel(header, tlabel); + async_header_set_retry(header, retry); + async_header_set_tcode(header, tcode); + async_header_set_priority(header, priority); + async_header_set_source(header, src_id); +} + +static void serialize_async_header_request(u32 header[ASYNC_HEADER_QUADLET= _COUNT], + unsigned int dst_id, unsigned int tlabel, + unsigned int retry, unsigned int tcode, + unsigned int priority, unsigned int src_id, u64 offset) +{ + serialize_async_header_common(header, dst_id, tlabel, retry, tcode, prior= ity, src_id); + async_header_set_offset(header, offset); +} + +static void serialize_async_header_quadlet_request(u32 header[ASYNC_HEADER= _QUADLET_COUNT], + unsigned int dst_id, unsigned int tlabel, + unsigned int retry, unsigned int tcode, + unsigned int priority, unsigned int src_id, + u64 offset) +{ + serialize_async_header_request(header, dst_id, tlabel, retry, tcode, prio= rity, src_id, + offset); +} + +static void serialize_async_header_block_request(u32 header[ASYNC_HEADER_Q= UADLET_COUNT], + unsigned int dst_id, unsigned int tlabel, + unsigned int retry, unsigned int tcode, + unsigned int priority, unsigned int src_id, + u64 offset, unsigned int data_length, + unsigned int extended_tcode) +{ + serialize_async_header_request(header, dst_id, tlabel, retry, tcode, prio= rity, src_id, + offset); + async_header_set_data_length(header, data_length); + async_header_set_extended_tcode(header, extended_tcode); +} + +static void serialize_async_header_response(u32 header[ASYNC_HEADER_QUADLE= T_COUNT], + unsigned int dst_id, unsigned int tlabel, + unsigned int retry, unsigned int tcode, + unsigned int priority, unsigned int src_id, + unsigned int rcode) +{ + serialize_async_header_common(header, dst_id, tlabel, retry, tcode, prior= ity, src_id); + async_header_set_rcode(header, rcode); +} + +static void serialize_async_header_quadlet_response(u32 header[ASYNC_HEADE= R_QUADLET_COUNT], + unsigned int dst_id, unsigned int tlabel, + unsigned int retry, unsigned int tcode, + unsigned int priority, unsigned int src_id, + unsigned int rcode) +{ + serialize_async_header_response(header, dst_id, tlabel, retry, tcode, pri= ority, src_id, + rcode); +} + +static void serialize_async_header_block_response(u32 header[ASYNC_HEADER_= QUADLET_COUNT], + unsigned int dst_id, unsigned int tlabel, + unsigned int retry, unsigned int tcode, + unsigned int priority, unsigned int src_id, + unsigned int rcode, unsigned int data_length, + unsigned int extended_tcode) +{ + serialize_async_header_response(header, dst_id, tlabel, retry, tcode, pri= ority, src_id, + rcode); + async_header_set_data_length(header, data_length); + async_header_set_extended_tcode(header, extended_tcode); +} + +static void deserialize_async_header_common(const u32 header[ASYNC_HEADER_= QUADLET_COUNT], + unsigned int *dst_id, unsigned int *tlabel, + unsigned int *retry, unsigned int *tcode, + unsigned int *priority, unsigned int *src_id) +{ + *dst_id =3D async_header_get_destination(header); + *tlabel =3D async_header_get_tlabel(header); + *retry =3D async_header_get_retry(header); + *tcode =3D async_header_get_tcode(header); + *priority =3D async_header_get_priority(header); + *src_id =3D async_header_get_source(header); +} + +static void deserialize_async_header_request(const u32 header[ASYNC_HEADER= _QUADLET_COUNT], + unsigned int *dst_id, unsigned int *tlabel, + unsigned int *retry, unsigned int *tcode, + unsigned int *priority, unsigned int *src_id, + u64 *offset) +{ + deserialize_async_header_common(header, dst_id, tlabel, retry, tcode, pri= ority, src_id); + *offset =3D async_header_get_offset(header); +} + +static void deserialize_async_header_quadlet_request(const u32 header[ASYN= C_HEADER_QUADLET_COUNT], + unsigned int *dst_id, unsigned int *tlabel, + unsigned int *retry, unsigned int *tcode, + unsigned int *priority, unsigned int *src_id, + u64 *offset) +{ + deserialize_async_header_request(header, dst_id, tlabel, retry, tcode, pr= iority, src_id, + offset); +} + +static void deserialize_async_header_block_request(const u32 header[ASYNC_= HEADER_QUADLET_COUNT], + unsigned int *dst_id, unsigned int *tlabel, + unsigned int *retry, unsigned int *tcode, + unsigned int *priority, unsigned int *src_id, + u64 *offset, + unsigned int *data_length, + unsigned int *extended_tcode) +{ + deserialize_async_header_request(header, dst_id, tlabel, retry, tcode, pr= iority, src_id, + offset); + *data_length =3D async_header_get_data_length(header); + *extended_tcode =3D async_header_get_extended_tcode(header); +} + +static void deserialize_async_header_response(const u32 header[ASYNC_HEADE= R_QUADLET_COUNT], + unsigned int *dst_id, unsigned int *tlabel, + unsigned int *retry, unsigned int *tcode, + unsigned int *priority, unsigned int *src_id, + unsigned int *rcode) +{ + deserialize_async_header_common(header, dst_id, tlabel, retry, tcode, pri= ority, src_id); + *rcode =3D async_header_get_rcode(header); +} + +static void deserialize_async_header_quadlet_response(const u32 header[ASY= NC_HEADER_QUADLET_COUNT], + unsigned int *dst_id, unsigned int *tlabel, + unsigned int *retry, unsigned int *tcode, + unsigned int *priority, unsigned int *src_id, + unsigned int *rcode) +{ + deserialize_async_header_response(header, dst_id, tlabel, retry, tcode, p= riority, src_id, rcode); +} + +static void deserialize_async_header_block_response(const u32 header[ASYNC= _HEADER_QUADLET_COUNT], + unsigned int *dst_id, unsigned int *tlabel, + unsigned int *retry, unsigned int *tcode, + unsigned int *priority, unsigned int *src_id, + unsigned int *rcode, unsigned int *data_length, + unsigned int *extended_tcode) +{ + deserialize_async_header_response(header, dst_id, tlabel, retry, tcode, p= riority, src_id, rcode); + *data_length =3D async_header_get_data_length(header); + *extended_tcode =3D async_header_get_extended_tcode(header); +} + +static void test_async_header_write_quadlet_request(struct kunit *test) +{ + static const u32 expected[ASYNC_HEADER_QUADLET_COUNT] =3D { + 0xffc05100, + 0xffc1ffff, + 0xf0000234, + 0x1f0000c0, + }; + u32 header[ASYNC_HEADER_QUADLET_COUNT] =3D {0, 0, 0, 0}; + + unsigned int dst_id; + unsigned int tlabel; + unsigned int retry; + unsigned int tcode; + unsigned int priority; + unsigned int src_id; + u64 offset; + u32 quadlet_data; + + deserialize_async_header_quadlet_request(expected, &dst_id, &tlabel, &ret= ry, &tcode, + &priority, &src_id, &offset); + quadlet_data =3D async_header_get_quadlet_data(expected); + + KUNIT_EXPECT_EQ(test, 0xffc0, dst_id); + KUNIT_EXPECT_EQ(test, 0x14, tlabel); + KUNIT_EXPECT_EQ(test, 0x01, retry); + KUNIT_EXPECT_EQ(test, TCODE_WRITE_QUADLET_REQUEST, tcode); + KUNIT_EXPECT_EQ(test, 0x00, priority); + KUNIT_EXPECT_EQ(test, 0xffc1, src_id); + KUNIT_EXPECT_EQ(test, 0xfffff0000234, offset); + KUNIT_EXPECT_EQ(test, 0x1f0000c0, quadlet_data); + + serialize_async_header_quadlet_request(header, dst_id, tlabel, retry, tco= de, priority, + src_id, offset); + async_header_set_quadlet_data(header, quadlet_data); + + KUNIT_EXPECT_MEMEQ(test, header, expected, sizeof(expected)); +} + +static void test_async_header_write_block_request(struct kunit *test) +{ + static const u32 expected[ASYNC_HEADER_QUADLET_COUNT] =3D { + 0xffc06510, + 0xffc1ecc0, + 0x00000000, + 0x00180000, + }; + u32 header[ASYNC_HEADER_QUADLET_COUNT] =3D {0, 0, 0, 0}; + + unsigned int dst_id; + unsigned int tlabel; + unsigned int retry; + unsigned int tcode; + unsigned int priority; + unsigned int src_id; + u64 offset; + unsigned int data_length; + unsigned int extended_tcode; + + deserialize_async_header_block_request(expected, &dst_id, &tlabel, &retry= , &tcode, + &priority, &src_id, &offset, &data_length, + &extended_tcode); + + KUNIT_EXPECT_EQ(test, 0xffc0, dst_id); + KUNIT_EXPECT_EQ(test, 0x19, tlabel); + KUNIT_EXPECT_EQ(test, 0x01, retry); + KUNIT_EXPECT_EQ(test, TCODE_WRITE_BLOCK_REQUEST, tcode); + KUNIT_EXPECT_EQ(test, 0x00, priority); + KUNIT_EXPECT_EQ(test, 0xffc1, src_id); + KUNIT_EXPECT_EQ(test, 0xecc000000000, offset); + KUNIT_EXPECT_EQ(test, 0x0018, data_length); + KUNIT_EXPECT_EQ(test, 0x0000, extended_tcode); + + serialize_async_header_block_request(header, dst_id, tlabel, retry, tcode= , priority, src_id, + offset, data_length, extended_tcode); + + KUNIT_EXPECT_MEMEQ(test, header, expected, sizeof(expected)); +} + +static void test_async_header_write_response(struct kunit *test) +{ + static const u32 expected[ASYNC_HEADER_QUADLET_COUNT] =3D { + 0xffc15120, + 0xffc00000, + 0x00000000, + 0x00000000, + }; + u32 header[ASYNC_HEADER_QUADLET_COUNT] =3D {0, 0, 0, 0}; + + unsigned int dst_id; + unsigned int tlabel; + unsigned int retry; + unsigned int tcode; + unsigned int priority; + unsigned int src_id; + unsigned int rcode; + + deserialize_async_header_quadlet_response(expected, &dst_id, &tlabel, &re= try, &tcode, + &priority, &src_id, &rcode); + + KUNIT_EXPECT_EQ(test, 0xffc1, dst_id); + KUNIT_EXPECT_EQ(test, 0x14, tlabel); + KUNIT_EXPECT_EQ(test, 0x01, retry); + KUNIT_EXPECT_EQ(test, TCODE_WRITE_RESPONSE, tcode); + KUNIT_EXPECT_EQ(test, 0x00, priority); + KUNIT_EXPECT_EQ(test, 0xffc0, src_id); + KUNIT_EXPECT_EQ(test, RCODE_COMPLETE, rcode); + + serialize_async_header_quadlet_response(header, dst_id, tlabel, retry, tc= ode, priority, + src_id, rcode); + + KUNIT_EXPECT_MEMEQ(test, header, expected, sizeof(expected) - sizeof(expe= cted[0])); +} + +static void test_async_header_read_quadlet_request(struct kunit *test) +{ + static const u32 expected[ASYNC_HEADER_QUADLET_COUNT] =3D { + 0xffc0f140, + 0xffc1ffff, + 0xf0000984, + 0x00000000, + }; + u32 header[ASYNC_HEADER_QUADLET_COUNT] =3D {0, 0, 0, 0}; + + unsigned int dst_id; + unsigned int tlabel; + unsigned int retry; + unsigned int tcode; + unsigned int priority; + unsigned int src_id; + u64 offset; + + deserialize_async_header_quadlet_request(expected, &dst_id, &tlabel, &ret= ry, &tcode, + &priority, &src_id, &offset); + + KUNIT_EXPECT_EQ(test, 0xffc0, dst_id); + KUNIT_EXPECT_EQ(test, 0x3c, tlabel); + KUNIT_EXPECT_EQ(test, 0x01, retry); + KUNIT_EXPECT_EQ(test, TCODE_READ_QUADLET_REQUEST, tcode); + KUNIT_EXPECT_EQ(test, 0x00, priority); + KUNIT_EXPECT_EQ(test, 0xffc1, src_id); + KUNIT_EXPECT_EQ(test, 0xfffff0000984, offset); + + serialize_async_header_quadlet_request(header, dst_id, tlabel, retry, tco= de, priority, + src_id, offset); + + KUNIT_EXPECT_MEMEQ(test, header, expected, sizeof(expected)); +} + +static void test_async_header_read_quadlet_response(struct kunit *test) +{ + static const u32 expected[ASYNC_HEADER_QUADLET_COUNT] =3D { + 0xffc1f160, + 0xffc00000, + 0x00000000, + 0x00000180, + }; + u32 header[ASYNC_HEADER_QUADLET_COUNT] =3D {0, 0, 0, 0}; + + unsigned int dst_id; + unsigned int tlabel; + unsigned int retry; + unsigned int tcode; + unsigned int priority; + unsigned int src_id; + unsigned int rcode; + u32 quadlet_data; + + deserialize_async_header_quadlet_response(expected, &dst_id, &tlabel, &re= try, &tcode, + &priority, &src_id, &rcode); + quadlet_data =3D async_header_get_quadlet_data(expected); + + KUNIT_EXPECT_EQ(test, 0xffc1, dst_id); + KUNIT_EXPECT_EQ(test, 0x3c, tlabel); + KUNIT_EXPECT_EQ(test, 0x01, retry); + KUNIT_EXPECT_EQ(test, TCODE_READ_QUADLET_RESPONSE, tcode); + KUNIT_EXPECT_EQ(test, 0x00, priority); + KUNIT_EXPECT_EQ(test, 0xffc0, src_id); + KUNIT_EXPECT_EQ(test, RCODE_COMPLETE, rcode); + KUNIT_EXPECT_EQ(test, 0x00000180, quadlet_data); + + serialize_async_header_quadlet_response(header, dst_id, tlabel, retry, tc= ode, priority, + src_id, rcode); + async_header_set_quadlet_data(header, quadlet_data); + + KUNIT_EXPECT_MEMEQ(test, header, expected, sizeof(expected)); +} + +static void test_async_header_read_block_request(struct kunit *test) +{ + static const u32 expected[ASYNC_HEADER_QUADLET_COUNT] =3D { + 0xffc0e150, + 0xffc1ffff, + 0xf0000400, + 0x00200000, + }; + u32 header[ASYNC_HEADER_QUADLET_COUNT] =3D {0, 0, 0, 0}; + + unsigned int dst_id; + unsigned int tlabel; + unsigned int retry; + unsigned int tcode; + unsigned int priority; + unsigned int src_id; + u64 offset; + unsigned int data_length; + unsigned int extended_tcode; + + deserialize_async_header_block_request(expected, &dst_id, &tlabel, &retry= , &tcode, + &priority, &src_id, &offset, &data_length, + &extended_tcode); + + KUNIT_EXPECT_EQ(test, 0xffc0, dst_id); + KUNIT_EXPECT_EQ(test, 0x38, tlabel); + KUNIT_EXPECT_EQ(test, 0x01, retry); + KUNIT_EXPECT_EQ(test, TCODE_READ_BLOCK_REQUEST, tcode); + KUNIT_EXPECT_EQ(test, 0x00, priority); + KUNIT_EXPECT_EQ(test, 0xffc1, src_id); + KUNIT_EXPECT_EQ(test, 0xfffff0000400, offset); + KUNIT_EXPECT_EQ(test, 0x0020, data_length); + KUNIT_EXPECT_EQ(test, 0x0000, extended_tcode); + + serialize_async_header_block_request(header, dst_id, tlabel, retry, tcode= , priority, src_id, + offset, data_length, extended_tcode); + + KUNIT_EXPECT_MEMEQ(test, header, expected, sizeof(expected)); +} + +static void test_async_header_read_block_response(struct kunit *test) +{ + static const u32 expected[ASYNC_HEADER_QUADLET_COUNT] =3D { + 0xffc1e170, + 0xffc00000, + 0x00000000, + 0x00200000, + }; + u32 header[ASYNC_HEADER_QUADLET_COUNT] =3D {0, 0, 0, 0}; + + unsigned int dst_id; + unsigned int tlabel; + unsigned int retry; + unsigned int tcode; + unsigned int priority; + unsigned int src_id; + unsigned int rcode; + unsigned int data_length; + unsigned int extended_tcode; + + deserialize_async_header_block_response(expected, &dst_id, &tlabel, &retr= y, &tcode, + &priority, &src_id, &rcode, &data_length, + &extended_tcode); + + KUNIT_EXPECT_EQ(test, 0xffc1, dst_id); + KUNIT_EXPECT_EQ(test, 0x38, tlabel); + KUNIT_EXPECT_EQ(test, 0x01, retry); + KUNIT_EXPECT_EQ(test, TCODE_READ_BLOCK_RESPONSE, tcode); + KUNIT_EXPECT_EQ(test, 0x00, priority); + KUNIT_EXPECT_EQ(test, 0xffc0, src_id); + KUNIT_EXPECT_EQ(test, RCODE_COMPLETE, rcode); + KUNIT_EXPECT_EQ(test, 0x0020, data_length); + KUNIT_EXPECT_EQ(test, 0x0000, extended_tcode); + + serialize_async_header_block_response(header, dst_id, tlabel, retry, tcod= e, priority, + src_id, rcode, data_length, extended_tcode); + + KUNIT_EXPECT_MEMEQ(test, header, expected, sizeof(expected)); +} + +static void test_async_header_lock_request(struct kunit *test) +{ + static const u32 expected[ASYNC_HEADER_QUADLET_COUNT] =3D { + 0xffc02d90, + 0xffc1ffff, + 0xf0000984, + 0x00080002, + }; + u32 header[ASYNC_HEADER_QUADLET_COUNT] =3D {0, 0, 0, 0}; + + unsigned int dst_id; + unsigned int tlabel; + unsigned int retry; + unsigned int tcode; + unsigned int priority; + unsigned int src_id; + u64 offset; + unsigned int data_length; + unsigned int extended_tcode; + + deserialize_async_header_block_request(expected, &dst_id, &tlabel, &retry= , &tcode, + &priority, &src_id, &offset, &data_length, + &extended_tcode); + + KUNIT_EXPECT_EQ(test, 0xffc0, dst_id); + KUNIT_EXPECT_EQ(test, 0x0b, tlabel); + KUNIT_EXPECT_EQ(test, 0x01, retry); + KUNIT_EXPECT_EQ(test, TCODE_LOCK_REQUEST, tcode); + KUNIT_EXPECT_EQ(test, 0x00, priority); + KUNIT_EXPECT_EQ(test, 0xffc1, src_id); + KUNIT_EXPECT_EQ(test, 0xfffff0000984, offset); + KUNIT_EXPECT_EQ(test, 0x0008, data_length); + KUNIT_EXPECT_EQ(test, EXTCODE_COMPARE_SWAP, extended_tcode); + + serialize_async_header_block_request(header, dst_id, tlabel, retry, tcode= , priority, src_id, + offset, data_length, extended_tcode); + + KUNIT_EXPECT_MEMEQ(test, header, expected, sizeof(expected)); +} + +static void test_async_header_lock_response(struct kunit *test) +{ + static const u32 expected[ASYNC_HEADER_QUADLET_COUNT] =3D { + 0xffc12db0, + 0xffc00000, + 0x00000000, + 0x00040002, + }; + u32 header[ASYNC_HEADER_QUADLET_COUNT] =3D {0, 0, 0, 0}; + + unsigned int dst_id; + unsigned int tlabel; + unsigned int retry; + unsigned int tcode; + unsigned int priority; + unsigned int src_id; + unsigned int rcode; + unsigned int data_length; + unsigned int extended_tcode; + + deserialize_async_header_block_response(expected, &dst_id, &tlabel, &retr= y, &tcode, + &priority, &src_id, &rcode, &data_length, + &extended_tcode); + + KUNIT_EXPECT_EQ(test, 0xffc1, dst_id); + KUNIT_EXPECT_EQ(test, 0x0b, tlabel); + KUNIT_EXPECT_EQ(test, 0x01, retry); + KUNIT_EXPECT_EQ(test, TCODE_LOCK_RESPONSE, tcode); + KUNIT_EXPECT_EQ(test, 0x00, priority); + KUNIT_EXPECT_EQ(test, 0xffc0, src_id); + KUNIT_EXPECT_EQ(test, RCODE_COMPLETE, rcode); + KUNIT_EXPECT_EQ(test, 0x0004, data_length); + KUNIT_EXPECT_EQ(test, EXTCODE_COMPARE_SWAP, extended_tcode); + + serialize_async_header_block_response(header, dst_id, tlabel, retry, tcod= e, priority, + src_id, rcode, data_length, extended_tcode); + + KUNIT_EXPECT_MEMEQ(test, header, expected, sizeof(expected)); +} + + +static struct kunit_case packet_serdes_test_cases[] =3D { + KUNIT_CASE(test_async_header_write_quadlet_request), + KUNIT_CASE(test_async_header_write_block_request), + KUNIT_CASE(test_async_header_write_response), + KUNIT_CASE(test_async_header_read_quadlet_request), + KUNIT_CASE(test_async_header_read_quadlet_response), + KUNIT_CASE(test_async_header_read_block_request), + KUNIT_CASE(test_async_header_read_block_response), + KUNIT_CASE(test_async_header_lock_request), + KUNIT_CASE(test_async_header_lock_response), + {} +}; + +static struct kunit_suite packet_serdes_test_suite =3D { + .name =3D "firewire-packet-serdes", + .test_cases =3D packet_serdes_test_cases, +}; +kunit_test_suite(packet_serdes_test_suite); + +MODULE_LICENSE("GPL"); --=20 2.43.0 From nobody Fri Dec 19 11:02:21 2025 Received: from wfout2-smtp.messagingengine.com (wfout2-smtp.messagingengine.com [64.147.123.145]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DA52E50A67 for ; Sun, 28 Apr 2024 07:13:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.145 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714288440; cv=none; b=n3V8CJtDO0YkkL1NzuVpXmFpmBQ6aOE492cyK/PGcMHWrLioFu+LSx1o0uPeLKaRE+yeUrZu4+/yCL/BM3uLZEb4U/khfHvmbTK3RU5i2IQ5vxGT+cXfDunSaPM8pckZ1XmtQ0JdtychA1w2zgVdiweuF56AkBS/s+Ql4tXYhZs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714288440; c=relaxed/simple; bh=jjbi1AEp8NlXwrb4Zc+88MD1lPSM8EZS1QDcg+6nMyg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IGCxCc+PUtf/uC7jrqH2SOkQbbtjVABfAN4hpPekoZrycccaM4zPj1UYVpQObuCP0HavLvikqMlR+7wPP0yrWQJjoQ+q0hQmEfYntXimC70KzBwcOUJt5k6gnK8cbuO0FPLBDWhR1R19Ids8ASWDrLvHJ9yxdxVSVFt6kefBmdE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp; spf=pass smtp.mailfrom=sakamocchi.jp; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b=XzbagI2p; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=e4zDaDUO; arc=none smtp.client-ip=64.147.123.145 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b="XzbagI2p"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="e4zDaDUO" Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailfout.west.internal (Postfix) with ESMTP id C55EC1C00112; Sun, 28 Apr 2024 03:13:56 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute3.internal (MEProxy); Sun, 28 Apr 2024 03:13:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sakamocchi.jp; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm3; t=1714288436; x= 1714374836; bh=bhe/jIX2fIrMMP4LYFpXfC38ZNlP+77hegb1D1tYzu0=; b=X zbagI2ps3VaB1k2e3h5ADISbO1wfGxH51gUdiwSe7WX/DEr8RPVLW8VFlRU5yXer C40uetr3rF3F5vmQ032JGVEL98rIGkWl7Gs93kO1VIagWooOdkr1LxUvwQC6CGUF b/MEmNclq12E2c2/q37ijG4fag2YLZ0SsJ8qa8GRAps70gcDU9Oo4mUGTLlZ9OT7 5/OH58qGLOFrrwI3PQPdF50yPDylAj6xTjDlmiXlvOUMyWAI28N3GigUXWSBm5GJ 1n4PTISELkUGQU3U0S+X/xjZYMAh+9vixzj/ka2QBUs3G2e9YPCQySpJFSMjxE0t rH6aeNjEBMF0xjD49CtFA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1714288436; x= 1714374836; bh=bhe/jIX2fIrMMP4LYFpXfC38ZNlP+77hegb1D1tYzu0=; b=e 4zDaDUOICGWmEzk2xZymKd8lsXjjnHok3Xo6/mLRQg5K/1OuYVaJmvF6d5uNmgaN PovT1zMiA9uuHVooYZGJGPvYZCNl+Tgpyf9agGysSOKVlUnPSHF63eD+3tqOamGO tmGicS7b9Ec8h3Ddjs2oXrm+LYsY4azD4uv7z0XHrKCFinvxx4VLXuNGH8yBgOur Nl+Pej5uGqlItCHHVWe3jT/C5R/ViHTfUq9T8WIzOhe0DhEyoqQ/TAAezLJWL+rR kLKLfZcbQb0CCrhRzxKi8vg4aXK1qstqLLUTgN6/GHxIUM1Va77Cb+jCy69hA5AQ Hk6K6POd4LHsjHtL6Ve2w== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvddtgedgvdduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvfevufffkffojghfggfgsedtke ertdertddtnecuhfhrohhmpefvrghkrghshhhiucfurghkrghmohhtohcuoehoqdhtrghk rghshhhisehsrghkrghmohgttghhihdrjhhpqeenucggtffrrghtthgvrhhnpedvjefgje euvdfguddukeelveetgfdtvefhtdfffeeigfevueetffeivdffkedvtdenucevlhhushht vghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehoqdhtrghkrghshhhise hsrghkrghmohgttghhihdrjhhp X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 28 Apr 2024 03:13:55 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 2/8] firewire: core: replace local macros with common inline functions for asynchronous packet header Date: Sun, 28 Apr 2024 16:13:40 +0900 Message-ID: <20240428071347.409202-3-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240428071347.409202-1-o-takashi@sakamocchi.jp> References: <20240428071347.409202-1-o-takashi@sakamocchi.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This commit uses common inline functions to serialize and deserialize header of asynchronous packet. Signed-off-by: Takashi Sakamoto --- drivers/firewire/core-transaction.c | 138 +++++++++++----------------- 1 file changed, 56 insertions(+), 82 deletions(-) diff --git a/drivers/firewire/core-transaction.c b/drivers/firewire/core-tr= ansaction.c index c427b7861eaf..a113f801cf33 100644 --- a/drivers/firewire/core-transaction.c +++ b/drivers/firewire/core-transaction.c @@ -29,29 +29,13 @@ #include =20 #include "core.h" +#include "packet-header-definitions.h" =20 -#define HEADER_PRI(pri) ((pri) << 0) #define HEADER_TCODE(tcode) ((tcode) << 4) -#define HEADER_RETRY(retry) ((retry) << 8) -#define HEADER_TLABEL(tlabel) ((tlabel) << 10) -#define HEADER_DESTINATION(destination) ((destination) << 16) -#define HEADER_SOURCE(source) ((source) << 16) -#define HEADER_RCODE(rcode) ((rcode) << 12) -#define HEADER_OFFSET_HIGH(offset_high) ((offset_high) << 0) #define HEADER_DATA_LENGTH(length) ((length) << 16) -#define HEADER_EXTENDED_TCODE(tcode) ((tcode) << 0) =20 -#define HEADER_GET_TCODE(q) (((q) >> 4) & 0x0f) -#define HEADER_GET_TLABEL(q) (((q) >> 10) & 0x3f) -#define HEADER_GET_RCODE(q) (((q) >> 12) & 0x0f) -#define HEADER_GET_DESTINATION(q) (((q) >> 16) & 0xffff) -#define HEADER_GET_SOURCE(q) (((q) >> 16) & 0xffff) -#define HEADER_GET_OFFSET_HIGH(q) (((q) >> 0) & 0xffff) -#define HEADER_GET_DATA_LENGTH(q) (((q) >> 16) & 0xffff) -#define HEADER_GET_EXTENDED_TCODE(q) (((q) >> 0) & 0xffff) - -#define HEADER_DESTINATION_IS_BROADCAST(q) \ - (((q) & HEADER_DESTINATION(0x3f)) =3D=3D HEADER_DESTINATION(0x3f)) +#define HEADER_DESTINATION_IS_BROADCAST(header) \ + ((async_header_get_destination(header) & 0x3f) =3D=3D 0x3f) =20 #define PHY_PACKET_CONFIG 0x0 #define PHY_PACKET_LINK_ON 0x1 @@ -248,28 +232,24 @@ static void fw_fill_request(struct fw_packet *packet,= int tcode, int tlabel, } else ext_tcode =3D 0; =20 - packet->header[0] =3D - HEADER_RETRY(RETRY_X) | - HEADER_TLABEL(tlabel) | - HEADER_TCODE(tcode) | - HEADER_DESTINATION(destination_id); - packet->header[1] =3D - HEADER_OFFSET_HIGH(offset >> 32) | HEADER_SOURCE(source_id); - packet->header[2] =3D - offset; + async_header_set_retry(packet->header, RETRY_X); + async_header_set_tlabel(packet->header, tlabel); + async_header_set_tcode(packet->header, tcode); + async_header_set_destination(packet->header, destination_id); + async_header_set_source(packet->header, source_id); + async_header_set_offset(packet->header, offset); =20 switch (tcode) { case TCODE_WRITE_QUADLET_REQUEST: - packet->header[3] =3D *(u32 *)payload; + async_header_set_quadlet_data(packet->header, *(u32 *)payload); packet->header_length =3D 16; packet->payload_length =3D 0; break; =20 case TCODE_LOCK_REQUEST: case TCODE_WRITE_BLOCK_REQUEST: - packet->header[3] =3D - HEADER_DATA_LENGTH(length) | - HEADER_EXTENDED_TCODE(ext_tcode); + async_header_set_data_length(packet->header, length); + async_header_set_extended_tcode(packet->header, ext_tcode); packet->header_length =3D 16; packet->payload =3D payload; packet->payload_length =3D length; @@ -281,9 +261,8 @@ static void fw_fill_request(struct fw_packet *packet, i= nt tcode, int tlabel, break; =20 case TCODE_READ_BLOCK_REQUEST: - packet->header[3] =3D - HEADER_DATA_LENGTH(length) | - HEADER_EXTENDED_TCODE(ext_tcode); + async_header_set_data_length(packet->header, length); + async_header_set_extended_tcode(packet->header, ext_tcode); packet->header_length =3D 16; packet->payload_length =3D 0; break; @@ -655,7 +634,7 @@ EXPORT_SYMBOL(fw_core_remove_address_handler); struct fw_request { struct kref kref; struct fw_packet response; - u32 request_header[4]; + u32 request_header[ASYNC_HEADER_QUADLET_COUNT]; int ack; u32 timestamp; u32 length; @@ -695,7 +674,7 @@ int fw_get_response_length(struct fw_request *r) { int tcode, ext_tcode, data_length; =20 - tcode =3D HEADER_GET_TCODE(r->request_header[0]); + tcode =3D async_header_get_tcode(r->request_header); =20 switch (tcode) { case TCODE_WRITE_QUADLET_REQUEST: @@ -706,12 +685,12 @@ int fw_get_response_length(struct fw_request *r) return 4; =20 case TCODE_READ_BLOCK_REQUEST: - data_length =3D HEADER_GET_DATA_LENGTH(r->request_header[3]); + data_length =3D async_header_get_data_length(r->request_header); return data_length; =20 case TCODE_LOCK_REQUEST: - ext_tcode =3D HEADER_GET_EXTENDED_TCODE(r->request_header[3]); - data_length =3D HEADER_GET_DATA_LENGTH(r->request_header[3]); + ext_tcode =3D async_header_get_extended_tcode(r->request_header); + data_length =3D async_header_get_data_length(r->request_header); switch (ext_tcode) { case EXTCODE_FETCH_ADD: case EXTCODE_LITTLE_ADD: @@ -731,46 +710,42 @@ void fw_fill_response(struct fw_packet *response, u32= *request_header, { int tcode, tlabel, extended_tcode, source, destination; =20 - tcode =3D HEADER_GET_TCODE(request_header[0]); - tlabel =3D HEADER_GET_TLABEL(request_header[0]); - source =3D HEADER_GET_DESTINATION(request_header[0]); - destination =3D HEADER_GET_SOURCE(request_header[1]); - extended_tcode =3D HEADER_GET_EXTENDED_TCODE(request_header[3]); - - response->header[0] =3D - HEADER_RETRY(RETRY_1) | - HEADER_TLABEL(tlabel) | - HEADER_DESTINATION(destination); - response->header[1] =3D - HEADER_SOURCE(source) | - HEADER_RCODE(rcode); - response->header[2] =3D 0; + tcode =3D async_header_get_tcode(request_header); + tlabel =3D async_header_get_tlabel(request_header); + source =3D async_header_get_destination(request_header); // Exchange. + destination =3D async_header_get_source(request_header); // Exchange. + extended_tcode =3D async_header_get_extended_tcode(request_header); + + async_header_set_retry(response->header, RETRY_1); + async_header_set_tlabel(response->header, tlabel); + async_header_set_destination(response->header, destination); + async_header_set_source(response->header, source); + async_header_set_rcode(response->header, rcode); + response->header[2] =3D 0; // The field is reserved. =20 switch (tcode) { case TCODE_WRITE_QUADLET_REQUEST: case TCODE_WRITE_BLOCK_REQUEST: - response->header[0] |=3D HEADER_TCODE(TCODE_WRITE_RESPONSE); + async_header_set_tcode(response->header, TCODE_WRITE_RESPONSE); response->header_length =3D 12; response->payload_length =3D 0; break; =20 case TCODE_READ_QUADLET_REQUEST: - response->header[0] |=3D - HEADER_TCODE(TCODE_READ_QUADLET_RESPONSE); + async_header_set_tcode(response->header, TCODE_READ_QUADLET_RESPONSE); if (payload !=3D NULL) - response->header[3] =3D *(u32 *)payload; + async_header_set_quadlet_data(response->header, *(u32 *)payload); else - response->header[3] =3D 0; + async_header_set_quadlet_data(response->header, 0); response->header_length =3D 16; response->payload_length =3D 0; break; =20 case TCODE_READ_BLOCK_REQUEST: case TCODE_LOCK_REQUEST: - response->header[0] |=3D HEADER_TCODE(tcode + 2); - response->header[3] =3D - HEADER_DATA_LENGTH(length) | - HEADER_EXTENDED_TCODE(extended_tcode); + async_header_set_tcode(response->header, tcode + 2); + async_header_set_data_length(response->header, length); + async_header_set_extended_tcode(response->header, extended_tcode); response->header_length =3D 16; response->payload =3D payload; response->payload_length =3D length; @@ -807,7 +782,7 @@ static struct fw_request *allocate_request(struct fw_ca= rd *card, u32 *data, length; int request_tcode; =20 - request_tcode =3D HEADER_GET_TCODE(p->header[0]); + request_tcode =3D async_header_get_tcode(p->header); switch (request_tcode) { case TCODE_WRITE_QUADLET_REQUEST: data =3D &p->header[3]; @@ -817,7 +792,7 @@ static struct fw_request *allocate_request(struct fw_ca= rd *card, case TCODE_WRITE_BLOCK_REQUEST: case TCODE_LOCK_REQUEST: data =3D p->payload; - length =3D HEADER_GET_DATA_LENGTH(p->header[3]); + length =3D async_header_get_data_length(p->header); break; =20 case TCODE_READ_QUADLET_REQUEST: @@ -827,7 +802,7 @@ static struct fw_request *allocate_request(struct fw_ca= rd *card, =20 case TCODE_READ_BLOCK_REQUEST: data =3D NULL; - length =3D HEADER_GET_DATA_LENGTH(p->header[3]); + length =3D async_header_get_data_length(p->header); break; =20 default: @@ -872,7 +847,7 @@ void fw_send_response(struct fw_card *card, { /* unified transaction or broadcast transaction: don't respond */ if (request->ack !=3D ACK_PENDING || - HEADER_DESTINATION_IS_BROADCAST(request->request_header[0])) { + HEADER_DESTINATION_IS_BROADCAST(request->request_header)) { fw_request_put(request); return; } @@ -926,11 +901,11 @@ static void handle_exclusive_region_request(struct fw= _card *card, struct fw_address_handler *handler; int tcode, destination, source; =20 - destination =3D HEADER_GET_DESTINATION(p->header[0]); - source =3D HEADER_GET_SOURCE(p->header[1]); - tcode =3D HEADER_GET_TCODE(p->header[0]); + destination =3D async_header_get_destination(p->header); + source =3D async_header_get_source(p->header); + tcode =3D async_header_get_tcode(p->header); if (tcode =3D=3D TCODE_LOCK_REQUEST) - tcode =3D 0x10 + HEADER_GET_EXTENDED_TCODE(p->header[3]); + tcode =3D 0x10 + async_header_get_extended_tcode(p->header); =20 rcu_read_lock(); handler =3D lookup_enclosing_address_handler(&address_handler_list, @@ -963,9 +938,9 @@ static void handle_fcp_region_request(struct fw_card *c= ard, return; } =20 - tcode =3D HEADER_GET_TCODE(p->header[0]); - destination =3D HEADER_GET_DESTINATION(p->header[0]); - source =3D HEADER_GET_SOURCE(p->header[1]); + tcode =3D async_header_get_tcode(p->header); + destination =3D async_header_get_destination(p->header); + source =3D async_header_get_source(p->header); =20 if (tcode !=3D TCODE_WRITE_QUADLET_REQUEST && tcode !=3D TCODE_WRITE_BLOCK_REQUEST) { @@ -997,7 +972,7 @@ void fw_core_handle_request(struct fw_card *card, struc= t fw_packet *p) if (p->ack !=3D ACK_PENDING && p->ack !=3D ACK_COMPLETE) return; =20 - if (TCODE_IS_LINK_INTERNAL(HEADER_GET_TCODE(p->header[0]))) { + if (TCODE_IS_LINK_INTERNAL(async_header_get_tcode(p->header))) { fw_cdev_handle_phy_packet(card, p); return; } @@ -1008,8 +983,7 @@ void fw_core_handle_request(struct fw_card *card, stru= ct fw_packet *p) return; } =20 - offset =3D ((u64)HEADER_GET_OFFSET_HIGH(p->header[1]) << 32) | - p->header[2]; + offset =3D async_header_get_offset(p->header); =20 if (!is_in_fcp_region(offset, request->length)) handle_exclusive_region_request(card, p, request, offset); @@ -1027,10 +1001,10 @@ void fw_core_handle_response(struct fw_card *card, = struct fw_packet *p) size_t data_length; int tcode, tlabel, source, rcode; =20 - tcode =3D HEADER_GET_TCODE(p->header[0]); - tlabel =3D HEADER_GET_TLABEL(p->header[0]); - source =3D HEADER_GET_SOURCE(p->header[1]); - rcode =3D HEADER_GET_RCODE(p->header[1]); + tcode =3D async_header_get_tcode(p->header); + tlabel =3D async_header_get_tlabel(p->header); + source =3D async_header_get_source(p->header); + rcode =3D async_header_get_rcode(p->header); =20 spin_lock_irqsave(&card->lock, flags); list_for_each_entry(iter, &card->transaction_list, link) { @@ -1073,7 +1047,7 @@ void fw_core_handle_response(struct fw_card *card, st= ruct fw_packet *p) case TCODE_READ_BLOCK_RESPONSE: case TCODE_LOCK_RESPONSE: data =3D p->payload; - data_length =3D HEADER_GET_DATA_LENGTH(p->header[3]); + data_length =3D async_header_get_data_length(p->header); break; =20 default: --=20 2.43.0 From nobody Fri Dec 19 11:02:21 2025 Received: from wfout2-smtp.messagingengine.com (wfout2-smtp.messagingengine.com [64.147.123.145]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EFC60524AD for ; Sun, 28 Apr 2024 07:13:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.145 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714288441; cv=none; b=s4bwBCzIfeZjZxv+QIh9+9hbUXnXasY6Xd9Znem7m6n6mmJYmKqa3vQg1HzFuTEDbNw/qBVa0u9CeukW65got8XKm2IXl2K39DLzjSEF68dduMHPdRiBT1XDZmCNnrPJ375BchdVmyBVksMd+5oweg+lSI5qiVkJv7/XcJzCU64= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714288441; c=relaxed/simple; bh=TJls4eJgjILIoLoh7e72vgk38wF3wZdb5E9SMVw62i8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Js+8rqsupnEsG5OpeGuXOBRVplCWd5ONq5ePP9jMzMKYdOZR8MQ0avXL1N4VrLTHEnna3uKAoCLbKd5ydMSq35HfRS0PThU8gskmdVxWbImh8t2oamamOXhe12ELUn608q/6U0XeYXzvkRQWAVuwqit3O7F2ULAEgkJEsFKXb6Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp; spf=pass smtp.mailfrom=sakamocchi.jp; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b=coJi8ATk; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=QYqOW+Uw; arc=none smtp.client-ip=64.147.123.145 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b="coJi8ATk"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="QYqOW+Uw" Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailfout.west.internal (Postfix) with ESMTP id 0C8C21C0010F; Sun, 28 Apr 2024 03:13:58 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Sun, 28 Apr 2024 03:13:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sakamocchi.jp; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm3; t=1714288438; x= 1714374838; bh=470UmX6MvxsOpPDrhAZoiwlvja/CUYrvQC6qp4umF88=; b=c oJi8ATkKxRWB8+w2DwpZlcoEDB6RAV47lw9TimBoY/5BRM0mAcj7Z+Ls4OGKEPg1 FtH+y/A0wZ9WGpmN9bgFeKG2VYDS0fsBe0v5O3teqXhjePEk/s3B2hWpNyUHS7Lw ec/tnSOiAqIpWjjRomozS+7FyiH5s2DzF0AkiRMNLCI0oq7Y739i0xxHJmtT1kYX HRfoH8cCEG9ukH5bPHANrAjuUuWaiiDisZ3LIW+9Sf/CMdJny0zICBCQj91uVQEd iQW/DmruuxAYPCE6cgHXeebTQhCljLwchnypAsz1dOtoEFVbU88nWqEbSHmM6KzU 6dmtZ4sNPvHI4KXTzoz/A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1714288438; x= 1714374838; bh=470UmX6MvxsOpPDrhAZoiwlvja/CUYrvQC6qp4umF88=; b=Q YqOW+UwSpbxvF4GJPEJLGmuZgCYtQKx2+eV4U0RcRtJjmm1sDPzOryBG528sTwL3 tpCVqvMPQt11n1jOli4MUYnt75+a/bgcFKmcHeHFi0fpyzN27E6StrMa4AWNuy3v dgIVUTCfnUNG4Zigtv2K9Ezj0VpdMl1k6p7GcYlPrgj/rfPmqhL701ftxbm7/UJ1 KaDJXOQw+aVLAWyTxkoG3lObzo5T9ErDHWz9q8F2rQFJxUMHTDvWyS8ZeMb+ag4F tZKajJ6r+pAHYcB4VqswBijfPcS4jqVttW0/x14xu238oyBQljZtbATb+wf3CDAW 7lePIYCzujjJWX1WAGG3w== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvddtgedgvddtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvfevufffkffojghfggfgsedtke ertdertddtnecuhfhrohhmpefvrghkrghshhhiucfurghkrghmohhtohcuoehoqdhtrghk rghshhhisehsrghkrghmohgttghhihdrjhhpqeenucggtffrrghtthgvrhhnpedvjefgje euvdfguddukeelveetgfdtvefhtdfffeeigfevueetffeivdffkedvtdenucevlhhushht vghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehoqdhtrghkrghshhhise hsrghkrghmohgttghhihdrjhhp X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 28 Apr 2024 03:13:57 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 3/8] firewire: ohci: replace local macros with common inline functions for asynchronous packet header Date: Sun, 28 Apr 2024 16:13:41 +0900 Message-ID: <20240428071347.409202-4-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240428071347.409202-1-o-takashi@sakamocchi.jp> References: <20240428071347.409202-1-o-takashi@sakamocchi.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This commit uses the common inline functions to serialize and deserialize header of asynchronous packet. Signed-off-by: Takashi Sakamoto --- drivers/firewire/ohci.c | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c index e4ad624c60cb..5f702f56ac7b 100644 --- a/drivers/firewire/ohci.c +++ b/drivers/firewire/ohci.c @@ -40,6 +40,7 @@ =20 #include "core.h" #include "ohci.h" +#include "packet-header-definitions.h" =20 #define ohci_info(ohci, f, args...) dev_info(ohci->card.device, f, ##args) #define ohci_notice(ohci, f, args...) dev_notice(ohci->card.device, f, ##a= rgs) @@ -1550,21 +1551,15 @@ static int handle_at_packet(struct context *context, return 1; } =20 -#define HEADER_GET_DESTINATION(q) (((q) >> 16) & 0xffff) -#define HEADER_GET_TCODE(q) (((q) >> 4) & 0x0f) -#define HEADER_GET_OFFSET_HIGH(q) (((q) >> 0) & 0xffff) -#define HEADER_GET_DATA_LENGTH(q) (((q) >> 16) & 0xffff) -#define HEADER_GET_EXTENDED_TCODE(q) (((q) >> 0) & 0xffff) - static void handle_local_rom(struct fw_ohci *ohci, struct fw_packet *packet, u32 csr) { struct fw_packet response; int tcode, length, i; =20 - tcode =3D HEADER_GET_TCODE(packet->header[0]); + tcode =3D async_header_get_tcode(packet->header); if (TCODE_IS_BLOCK_PACKET(tcode)) - length =3D HEADER_GET_DATA_LENGTH(packet->header[3]); + length =3D async_header_get_data_length(packet->header); else length =3D 4; =20 @@ -1591,10 +1586,10 @@ static void handle_local_lock(struct fw_ohci *ohci, __be32 *payload, lock_old; u32 lock_arg, lock_data; =20 - tcode =3D HEADER_GET_TCODE(packet->header[0]); - length =3D HEADER_GET_DATA_LENGTH(packet->header[3]); + tcode =3D async_header_get_tcode(packet->header); + length =3D async_header_get_data_length(packet->header); payload =3D packet->payload; - ext_tcode =3D HEADER_GET_EXTENDED_TCODE(packet->header[3]); + ext_tcode =3D async_header_get_extended_tcode(packet->header); =20 if (tcode =3D=3D TCODE_LOCK_REQUEST && ext_tcode =3D=3D EXTCODE_COMPARE_SWAP && length =3D=3D 8) { @@ -1640,10 +1635,7 @@ static void handle_local_request(struct context *ctx= , struct fw_packet *packet) packet->callback(packet, &ctx->ohci->card, packet->ack); } =20 - offset =3D - ((unsigned long long) - HEADER_GET_OFFSET_HIGH(packet->header[1]) << 32) | - packet->header[2]; + offset =3D async_header_get_offset(packet->header); csr =3D offset - CSR_REGISTER_BASE; =20 /* Handle config rom reads. */ @@ -1679,7 +1671,7 @@ static void at_context_transmit(struct context *ctx, = struct fw_packet *packet) =20 spin_lock_irqsave(&ctx->ohci->lock, flags); =20 - if (HEADER_GET_DESTINATION(packet->header[0]) =3D=3D ctx->ohci->node_id && + if (async_header_get_destination(packet->header) =3D=3D ctx->ohci->node_i= d && ctx->ohci->generation =3D=3D packet->generation) { spin_unlock_irqrestore(&ctx->ohci->lock, flags); =20 --=20 2.43.0 From nobody Fri Dec 19 11:02:21 2025 Received: from wfout2-smtp.messagingengine.com (wfout2-smtp.messagingengine.com [64.147.123.145]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3EF0252F7C for ; Sun, 28 Apr 2024 07:14:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.145 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714288443; cv=none; b=rntAx0AbVKrceitqekEKaHRNqxTPgMoWzOA2py8aSRKyKUO7qyEC2POkZ7Lffm/8sqR8yz+MTgpkVOVrTrTwSOxRGBVxTc6mY9yacNUApja54NtpPSu6Afnuc+194Smncc0v2jDFr9y7p27GwVuGs9DEBzh4/Krjoye/C7fynMc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714288443; c=relaxed/simple; bh=/Heyz82K/5bZRVsd+YQmXqMeBzFSD3fTx1UGve6gsCw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=s9X+TcPk+5KUbTBK+78xk6AghklEPvXrBJsWDeExpWtP5xvE915Rq9YHmqRpZ2idq7zf8g7hVXUDu8Ts6yf4+ryq9Ugq1pJUkGMIA3oG2waDGZrO5ENswt4+Vpy59WmiXSGcgoJFLdem2MQGICqwEowBugxIUZXf08tsl2HQPQM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp; spf=pass smtp.mailfrom=sakamocchi.jp; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b=TZc0K+nn; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=h/pETN+6; arc=none smtp.client-ip=64.147.123.145 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b="TZc0K+nn"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="h/pETN+6" Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailfout.west.internal (Postfix) with ESMTP id 46D101C00119; Sun, 28 Apr 2024 03:14:01 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Sun, 28 Apr 2024 03:14:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sakamocchi.jp; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm3; t=1714288440; x= 1714374840; bh=isiOLW8iXZUka2YMXMuAhM8Z+3FuJbFnChslJD7oRko=; b=T Zc0K+nnONe/Cp4604VaDeB2eutwG11jXL0d0CyyxGMezTUcnw2Q8rEbi+2VMdfvO vQWS7Zg3LgC7Cm+EMXV+Yd2HMaNwYaxbPk7IARTvNE28C4ypbpblzR1ltXoJrXYV ibK9GbjxZ65aMXg//F0+5DyWnj/4gZ7kiaBpMAZLAeabGAI/bpWHKP12wo2n1jQz r1mJ7Jjcc84MivsXe8cRwK7j0LdbYPxKrE2qW22+2BsLrPqDYHlRylLDnBS/4GCz SX96s1KaTEHo9+Opn3c78HJEZiFGr3AZ/c33K9ODqU+FA/uHa+p7DlBbqBt1cH3L JmnRGMBwv42oqhsss81PQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1714288440; x= 1714374840; bh=isiOLW8iXZUka2YMXMuAhM8Z+3FuJbFnChslJD7oRko=; b=h /pETN+6lPM4sIli19cr4Qj+maW3a9buiOIYwcFjqVzRuNPkaD+dDHvCTenpwzc5f 8zVBQTqNtoOzXU1/GNLsMgYGauwkFc1wBH//Dt4zLtPMQ9If2EC5oBxyojY0DLib VZTFOR8nLMWvRwXis1Q/kQI887LvkgbDz6avZyp+NFylROqTjFd0L6OIPyUpphYZ mUBROQxMTiWEgzDkbuOxca8Z7wFBsuZByV4iy9h25nvoXqhJZvnuXb2EabvI1jeO DSIOIxTqMDaxG0xJR6tQyfAVw5LG3sUgvBLPq9/+ZvIDUAJdeFFbxgqTtdev9ZpW kwNXqxrFGWdPT5dH0CUbA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvddtgedgvddtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvfevufffkffojghfggfgsedtke ertdertddtnecuhfhrohhmpefvrghkrghshhhiucfurghkrghmohhtohcuoehoqdhtrghk rghshhhisehsrghkrghmohgttghhihdrjhhpqeenucggtffrrghtthgvrhhnpedvjefgje euvdfguddukeelveetgfdtvefhtdfffeeigfevueetffeivdffkedvtdenucevlhhushht vghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehoqdhtrghkrghshhhise hsrghkrghmohgttghhihdrjhhp X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 28 Apr 2024 03:13:59 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 4/8] firewire: ohci: replace hard-coded values with inline functions for asynchronous packet header Date: Sun, 28 Apr 2024 16:13:42 +0900 Message-ID: <20240428071347.409202-5-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240428071347.409202-1-o-takashi@sakamocchi.jp> References: <20240428071347.409202-1-o-takashi@sakamocchi.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This commit replaces the hard-coded values with the common inline functions to serialize and deserialize the header of asynchronous packet. Signed-off-by: Takashi Sakamoto --- drivers/firewire/ohci.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c index 5f702f56ac7b..be8ede492ead 100644 --- a/drivers/firewire/ohci.c +++ b/drivers/firewire/ohci.c @@ -517,14 +517,14 @@ static const char *tcodes[] =3D { static void log_ar_at_event(struct fw_ohci *ohci, char dir, int speed, u32 *header, int evt) { - int tcode =3D header[0] >> 4 & 0xf; + int tcode =3D async_header_get_tcode(header); char specific[12]; =20 if (likely(!(param_debug & OHCI_PARAM_DEBUG_AT_AR))) return; =20 if (unlikely(evt >=3D ARRAY_SIZE(evts))) - evt =3D 0x1f; + evt =3D 0x1f; =20 if (evt =3D=3D OHCI1394_evt_bus_reset) { ohci_notice(ohci, "A%c evt_bus_reset, generation %d\n", @@ -539,7 +539,8 @@ static void log_ar_at_event(struct fw_ohci *ohci, break; case 0x1: case 0x5: case 0x7: case 0x9: case 0xb: snprintf(specific, sizeof(specific), " %x,%x", - header[3] >> 16, header[3] & 0xffff); + async_header_get_data_length(header), + async_header_get_extended_tcode(header)); break; default: specific[0] =3D '\0'; @@ -556,17 +557,17 @@ static void log_ar_at_event(struct fw_ohci *ohci, break; case 0x0: case 0x1: case 0x4: case 0x5: case 0x9: ohci_notice(ohci, - "A%c spd %x tl %02x, %04x -> %04x, %s, %s, %04x%08x%s\n", - dir, speed, header[0] >> 10 & 0x3f, - header[1] >> 16, header[0] >> 16, evts[evt], - tcodes[tcode], header[1] & 0xffff, header[2], specific); + "A%c spd %x tl %02x, %04x -> %04x, %s, %s, %012llx%s\n", + dir, speed, async_header_get_tlabel(header), + async_header_get_source(header), async_header_get_destination(heade= r), + evts[evt], tcodes[tcode], async_header_get_offset(header), specific= ); break; default: ohci_notice(ohci, "A%c spd %x tl %02x, %04x -> %04x, %s, %s%s\n", - dir, speed, header[0] >> 10 & 0x3f, - header[1] >> 16, header[0] >> 16, evts[evt], - tcodes[tcode], specific); + dir, speed, async_header_get_tlabel(header), + async_header_get_source(header), async_header_get_destination(heade= r), + evts[evt], tcodes[tcode], specific); } } =20 @@ -854,7 +855,7 @@ static __le32 *handle_ar_packet(struct ar_context *ctx,= __le32 *buffer) p.header[1] =3D cond_le32_to_cpu(buffer[1]); p.header[2] =3D cond_le32_to_cpu(buffer[2]); =20 - tcode =3D (p.header[0] >> 4) & 0x0f; + tcode =3D async_header_get_tcode(p.header); switch (tcode) { case TCODE_WRITE_QUADLET_REQUEST: case TCODE_READ_QUADLET_RESPONSE: @@ -875,7 +876,7 @@ static __le32 *handle_ar_packet(struct ar_context *ctx,= __le32 *buffer) case TCODE_LOCK_RESPONSE: p.header[3] =3D cond_le32_to_cpu(buffer[3]); p.header_length =3D 16; - p.payload_length =3D p.header[3] >> 16; + p.payload_length =3D async_header_get_data_length(p.header); if (p.payload_length > MAX_ASYNC_PAYLOAD) { ar_context_abort(ctx, "invalid packet length"); return NULL; @@ -912,8 +913,7 @@ static __le32 *handle_ar_packet(struct ar_context *ctx,= __le32 *buffer) * Several controllers, notably from NEC and VIA, forget to * write ack_complete status at PHY packet reception. */ - if (evt =3D=3D OHCI1394_evt_no_status && - (p.header[0] & 0xff) =3D=3D (OHCI1394_phy_tcode << 4)) + if (evt =3D=3D OHCI1394_evt_no_status && tcode =3D=3D OHCI1394_phy_tcode) p.ack =3D ACK_COMPLETE; =20 /* @@ -1354,7 +1354,7 @@ static int at_context_queue_packet(struct context *ct= x, * accordingly. */ =20 - tcode =3D (packet->header[0] >> 4) & 0x0f; + tcode =3D async_header_get_tcode(packet->header); header =3D (__le32 *) &d[1]; switch (tcode) { case TCODE_WRITE_QUADLET_REQUEST: --=20 2.43.0 From nobody Fri Dec 19 11:02:21 2025 Received: from wfhigh4-smtp.messagingengine.com (wfhigh4-smtp.messagingengine.com [64.147.123.155]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 84ADB535A9 for ; Sun, 28 Apr 2024 07:14:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.155 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714288446; cv=none; b=KyYB61JGszeKgqTxiB5OTG+KOBNtL1hPIUumRj2ioYzom1J3sC+xTXAwwGb5nnbORRxTTW/XSsdLRcfUtdN1/oMuDlf2+6+s2GJmIXK/d3b4LAaWWVUFa4mDicdUIssYbDW2yIDLRoC4pKBcGm4VYgehiMCnZ0WfgjjhN9wgI14= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714288446; c=relaxed/simple; bh=eUXulv8SLIbPh3UEbF+PLVZxSxMdc1BB+wVcSzMxjBg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iEiAhBIXM2i7Xh2TwtCPvcML3JH/F8AISof3RT25kH92Kk9pr8t9w1kCUi8napFBiwoWAI5UDJx2KMeYP/gEQ7n+ZgHCtPHIWyJwn6/p8knnEmS5+b2aJ3kXZgSwBK466KSROQTk3E4avOHg/2R2ZxEJn4AsiYTqiGdMpb/7dsA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp; spf=pass smtp.mailfrom=sakamocchi.jp; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b=WtvjpqUu; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=Jo1KtoeW; arc=none smtp.client-ip=64.147.123.155 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b="WtvjpqUu"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="Jo1KtoeW" Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailfhigh.west.internal (Postfix) with ESMTP id 82BFA18000DF; Sun, 28 Apr 2024 03:14:03 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Sun, 28 Apr 2024 03:14:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sakamocchi.jp; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm3; t=1714288443; x= 1714374843; bh=L/RXyIBehhYux/Or0vr4pakBmao+Fg8KZrIh09642yE=; b=W tvjpqUubt161YGVTW1Rws77Fn/buXIZeCo4Pen1YMoN92WydCKHLZahDRJ5UqVUC cNqAS6L0ev7t2OwZo6orfEkqTetkTUKgZXGiwcq8/t6bJCYafMjOaqm8VZrb2Kth e0qr1cVPO7SkBhMAuOn9JO5riww9SIRmmQb6VxFbLdIuFFRiu11J59RAlkroi3qx yGdDd59dEq038wD0rU8eQhSMeGdZ8j2mmhsRPfJD3OdRNhnEMwQZdZkn6/GWPAJN K2GXkYfioIHUqUDkuh98P0m1rHoteFZABjF4djxx1z1nGjuRd6zRZoYEbNOX1u0E 6oDFt85ga91pGvlePKiBQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1714288443; x= 1714374843; bh=L/RXyIBehhYux/Or0vr4pakBmao+Fg8KZrIh09642yE=; b=J o1KtoeWtX7K9GT0S73UqzZvVFj1Ix9pnrkDpPV6zhAlGtWWakUvfpfFGTFQuRltk J3el6msTNrDXfCuMU+pIrGTGnCQ8arpmfEhmgDFUwLSs3dPemgcAEEI14s/VjfK8 YcVmgqZElmvxO2Fkab58H7BmmbEYaVfq4TAITIbtY8VvYMx7xCE8qQFCRJO2rdw4 vkgvvMJrvD7ZcaCsqxYJXO1i+Lqx5lEDy9Zlcp7cj0STbA0IhFCyJni5xe3vQkuj OJia3B31EnhXUBxDY2TVqiSGx2Iooe5nvD/8rNsLu5TAo1k5ahWc44hK7hZrjlOL pDpBhfWGLSvmcnospPVoQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvddtgedgvddtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvfevufffkffojghfggfgsedtke ertdertddtnecuhfhrohhmpefvrghkrghshhhiucfurghkrghmohhtohcuoehoqdhtrghk rghshhhisehsrghkrghmohgttghhihdrjhhpqeenucggtffrrghtthgvrhhnpedvjefgje euvdfguddukeelveetgfdtvefhtdfffeeigfevueetffeivdffkedvtdenucevlhhushht vghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehoqdhtrghkrghshhhise hsrghkrghmohgttghhihdrjhhp X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 28 Apr 2024 03:14:01 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 5/8] firewire: ohci: replace hard-coded values with common macros Date: Sun, 28 Apr 2024 16:13:43 +0900 Message-ID: <20240428071347.409202-6-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240428071347.409202-1-o-takashi@sakamocchi.jp> References: <20240428071347.409202-1-o-takashi@sakamocchi.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In the helper function for logging in 1394 ohci driver includes the hard-coded variables for transaction code. They can be replaced with the enumerations in UAPI header. Signed-off-by: Takashi Sakamoto --- drivers/firewire/ohci.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c index be8ede492ead..4811e3255ca8 100644 --- a/drivers/firewire/ohci.c +++ b/drivers/firewire/ohci.c @@ -533,11 +533,17 @@ static void log_ar_at_event(struct fw_ohci *ohci, } =20 switch (tcode) { - case 0x0: case 0x6: case 0x8: + case TCODE_WRITE_QUADLET_REQUEST: + case TCODE_READ_QUADLET_RESPONSE: + case TCODE_CYCLE_START: snprintf(specific, sizeof(specific), " =3D %08x", be32_to_cpu((__force __be32)header[3])); break; - case 0x1: case 0x5: case 0x7: case 0x9: case 0xb: + case TCODE_WRITE_BLOCK_REQUEST: + case TCODE_READ_BLOCK_REQUEST: + case TCODE_READ_BLOCK_RESPONSE: + case TCODE_LOCK_REQUEST: + case TCODE_LOCK_RESPONSE: snprintf(specific, sizeof(specific), " %x,%x", async_header_get_data_length(header), async_header_get_extended_tcode(header)); @@ -547,7 +553,7 @@ static void log_ar_at_event(struct fw_ohci *ohci, } =20 switch (tcode) { - case 0xa: + case TCODE_STREAM_DATA: ohci_notice(ohci, "A%c %s, %s\n", dir, evts[evt], tcodes[tcode]); break; @@ -555,7 +561,11 @@ static void log_ar_at_event(struct fw_ohci *ohci, ohci_notice(ohci, "A%c %s, PHY %08x %08x\n", dir, evts[evt], header[1], header[2]); break; - case 0x0: case 0x1: case 0x4: case 0x5: case 0x9: + case TCODE_WRITE_QUADLET_REQUEST: + case TCODE_WRITE_BLOCK_REQUEST: + case TCODE_READ_QUADLET_REQUEST: + case TCODE_READ_BLOCK_REQUEST: + case TCODE_LOCK_REQUEST: ohci_notice(ohci, "A%c spd %x tl %02x, %04x -> %04x, %s, %s, %012llx%s\n", dir, speed, async_header_get_tlabel(header), --=20 2.43.0 From nobody Fri Dec 19 11:02:21 2025 Received: from wfout2-smtp.messagingengine.com (wfout2-smtp.messagingengine.com [64.147.123.145]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C76A053E14 for ; Sun, 28 Apr 2024 07:14:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.145 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714288448; cv=none; b=rMx6He2jFcPg6irhyYj5aw/Mw2Bbg6d3ZnqSnX8ZFpQ5jmwjEA+kmntSrxsnnqqEhwBj+6fEiEep/Ab0a2Gr7lZUMNegxf0Y9Ph3ABQ49XsVrAudCNotR4uKPH64bkKZId/3YVtT1bD4HuXz281i9s4OfXlvlUQ/Kf2TzZRjGoI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714288448; c=relaxed/simple; bh=2Vaq9fd/yjcb9d0npa84rg+qoGmsdZijjdGRvqKP0ek=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=O8NeYjXTSTXzGg105Ggx/bHBhOYbGNPOE0ueU5kAN+8T826CMaIQVIfiG6kMyK6RS3o/42H1LDfKRqyHH8OFLWHBukjQkzXdY5IepELc6DJ7+txBsBkQhzG8zbXTwgnY4UlQrd5Aq2Kx+2jVGujm7CvatnrTE7LmytRnjePHxYU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp; spf=pass smtp.mailfrom=sakamocchi.jp; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b=D8Nn7C3L; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=NF90Df3V; arc=none smtp.client-ip=64.147.123.145 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b="D8Nn7C3L"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="NF90Df3V" Received: from compute7.internal (compute7.nyi.internal [10.202.2.48]) by mailfout.west.internal (Postfix) with ESMTP id C336D1C0010E; Sun, 28 Apr 2024 03:14:05 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 28 Apr 2024 03:14:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sakamocchi.jp; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm3; t=1714288445; x= 1714374845; bh=29saDBiucRwDFm2Dxf2GJ51sLzVdC8ydOKBz+0kYKWI=; b=D 8Nn7C3LYgunlA2nvLOeV4pixwLbMAnsueIACChcxEn24JVQlgteE/8twmdO31K5s D8IEgdQi2KT0Kq6HzWfEAwGNdulFBe+0Xa7jVB1/Bfrf8lRqYRBRu1bkBWf408nq j8h+4sg6WevcRiLkyGBTR8QtriEyHi06fK2H/GdXP8bi64OWRaCt81jCKMebAVGE 1u/B7oq2DANF+F551MUnOaNHfAOSqDlvJQnaNp2ZnS2AIYCcfUiC9mY/KQU+fBGd +J9ntILYMNNQAEiKzwAoTW5mPHkJifeKon569dHvnyZeNaTAPnirZ4Et3Mgj/S3H DbIsyhq27tFpYJJH/+yZQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1714288445; x= 1714374845; bh=29saDBiucRwDFm2Dxf2GJ51sLzVdC8ydOKBz+0kYKWI=; b=N F90Df3Vb5Tz84EVApIVzt2YxT8p3xgVDtCTxfCTxpg0B1A9TewWhXPKDvmFN9Kk/ rFiZZkr4nDJPdaCC5A04fR+SQAHp/6ZqMCIWeixGXD2HWxxv6HO2nEjctee75Pjz uHVJCZrPZry8demuk3o2SxndasM4H9nkAd6U9UWaJaIkSKTvj07CaE3Stvoq6uN6 yvW4mvLP1Ujsvy989PiLKOCcK19You9GlQhT6Rppa3IKz6OxEialqd9vHNI012pa nXwViTiSzihjpFkrebzwo1qxAKQmDOUuRmTYmcNroGAwddoowhcfaY+4NYXe00PT F4o39IxnidTmNE9wVw9/A== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvddtgedgvddtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvfevufffkffojghfggfgsedtke ertdertddtnecuhfhrohhmpefvrghkrghshhhiucfurghkrghmohhtohcuoehoqdhtrghk rghshhhisehsrghkrghmohgttghhihdrjhhpqeenucggtffrrghtthgvrhhnpedvjefgje euvdfguddukeelveetgfdtvefhtdfffeeigfevueetffeivdffkedvtdenucevlhhushht vghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehoqdhtrghkrghshhhise hsrghkrghmohgttghhihdrjhhp X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 28 Apr 2024 03:14:04 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 6/8] firewire: core: obsolete tcode check macros with inline functions Date: Sun, 28 Apr 2024 16:13:44 +0900 Message-ID: <20240428071347.409202-7-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240428071347.409202-1-o-takashi@sakamocchi.jp> References: <20240428071347.409202-1-o-takashi@sakamocchi.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This commit declares the helper functions to check tcode to obsolete the functional macros. Signed-off-by: Takashi Sakamoto --- drivers/firewire/core-transaction.c | 4 ++-- drivers/firewire/core.h | 21 ++++++++++++++------- drivers/firewire/ohci.c | 6 +++--- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/drivers/firewire/core-transaction.c b/drivers/firewire/core-tr= ansaction.c index a113f801cf33..45ea15342ab8 100644 --- a/drivers/firewire/core-transaction.c +++ b/drivers/firewire/core-transaction.c @@ -972,7 +972,7 @@ void fw_core_handle_request(struct fw_card *card, struc= t fw_packet *p) if (p->ack !=3D ACK_PENDING && p->ack !=3D ACK_COMPLETE) return; =20 - if (TCODE_IS_LINK_INTERNAL(async_header_get_tcode(p->header))) { + if (tcode_is_link_internal(async_header_get_tcode(p->header))) { fw_cdev_handle_phy_packet(card, p); return; } @@ -1109,7 +1109,7 @@ static void handle_topology_map(struct fw_card *card,= struct fw_request *request { int start; =20 - if (!TCODE_IS_READ_REQUEST(tcode)) { + if (!tcode_is_read_request(tcode)) { fw_send_response(card, request, RCODE_TYPE_ERROR); return; } diff --git a/drivers/firewire/core.h b/drivers/firewire/core.h index ff96e5456b5d..5097c7a270b4 100644 --- a/drivers/firewire/core.h +++ b/drivers/firewire/core.h @@ -225,13 +225,20 @@ static inline bool is_next_generation(int new_generat= ion, int old_generation) =20 #define TCODE_LINK_INTERNAL 0xe =20 -#define TCODE_IS_READ_REQUEST(tcode) (((tcode) & ~1) =3D=3D 4) -#define TCODE_IS_BLOCK_PACKET(tcode) (((tcode) & 1) !=3D 0) -#define TCODE_IS_LINK_INTERNAL(tcode) ((tcode) =3D=3D TCODE_LINK_INTERNAL) -#define TCODE_IS_REQUEST(tcode) (((tcode) & 2) =3D=3D 0) -#define TCODE_IS_RESPONSE(tcode) (((tcode) & 2) !=3D 0) -#define TCODE_HAS_REQUEST_DATA(tcode) (((tcode) & 12) !=3D 4) -#define TCODE_HAS_RESPONSE_DATA(tcode) (((tcode) & 12) !=3D 0) +static inline bool tcode_is_read_request(unsigned int tcode) +{ + return (tcode & ~1u) =3D=3D 4u; +} + +static inline bool tcode_is_block_packet(unsigned int tcode) +{ + return (tcode & 1u) !=3D 0u; +} + +static inline bool tcode_is_link_internal(unsigned int tcode) +{ + return (tcode =3D=3D TCODE_LINK_INTERNAL); +} =20 #define LOCAL_BUS 0xffc0 =20 diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c index 4811e3255ca8..6116153f0ce6 100644 --- a/drivers/firewire/ohci.c +++ b/drivers/firewire/ohci.c @@ -1382,7 +1382,7 @@ static int at_context_queue_packet(struct context *ct= x, (packet->header[0] & 0xffff0000)); header[2] =3D cpu_to_le32(packet->header[2]); =20 - if (TCODE_IS_BLOCK_PACKET(tcode)) + if (tcode_is_block_packet(tcode)) header[3] =3D cpu_to_le32(packet->header[3]); else header[3] =3D (__force __le32) packet->header[3]; @@ -1568,7 +1568,7 @@ static void handle_local_rom(struct fw_ohci *ohci, int tcode, length, i; =20 tcode =3D async_header_get_tcode(packet->header); - if (TCODE_IS_BLOCK_PACKET(tcode)) + if (tcode_is_block_packet(tcode)) length =3D async_header_get_data_length(packet->header); else length =3D 4; @@ -1577,7 +1577,7 @@ static void handle_local_rom(struct fw_ohci *ohci, if (i + length > CONFIG_ROM_SIZE) { fw_fill_response(&response, packet->header, RCODE_ADDRESS_ERROR, NULL, 0); - } else if (!TCODE_IS_READ_REQUEST(tcode)) { + } else if (!tcode_is_read_request(tcode)) { fw_fill_response(&response, packet->header, RCODE_TYPE_ERROR, NULL, 0); } else { --=20 2.43.0 From nobody Fri Dec 19 11:02:21 2025 Received: from wfhigh4-smtp.messagingengine.com (wfhigh4-smtp.messagingengine.com [64.147.123.155]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0756054737 for ; Sun, 28 Apr 2024 07:14:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.155 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714288450; cv=none; b=rvTzDjGS2bMIoYUNI/R/otvX78lmcY617DJH7hrF0uo1S4IVd1QLWTqvDSC7ILENe4D3YwzSZCuosmJwooGg9Xz5N0cTcWKd2qOaSYM5Yj5Pg45I8T4H5JvRzQa8aJKPL71QTnsTs/R43s6nncSIQzs7GA88cA9fqEaq+WldhO4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714288450; c=relaxed/simple; bh=3LZ2rckMN5vRD3KByODttuDnXLjALQHZtYdntvxbJI0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hZ33uCzQtO6dwDso9eUJ0uK53ketgFN6NzSJ4VYZpcp0qymr/JrxvcrmtPAXzAK9tEUKCjyaeahxiIZg1l7qIWIc30KAdyWGCpflQjadCvyghNbcSGwC2nooAOvglfVlphKg/VKdWBeY7JverEoELRC7ieoxsn+u8K8NrmSc964= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp; spf=pass smtp.mailfrom=sakamocchi.jp; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b=LFCkfgP8; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=PeLsxGaG; arc=none smtp.client-ip=64.147.123.155 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b="LFCkfgP8"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="PeLsxGaG" Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailfhigh.west.internal (Postfix) with ESMTP id 199241800142; Sun, 28 Apr 2024 03:14:08 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute3.internal (MEProxy); Sun, 28 Apr 2024 03:14:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sakamocchi.jp; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm3; t=1714288447; x= 1714374847; bh=/e7fuxX/vtKPR4pmRS6j0FIOy9tSq6SszBVnEsJ8ruY=; b=L FCkfgP8D61oyhA0PBUXCsopLXsuc8ITMR6DoIgWBnbKu4Mc3UZUfWSnFtZNWKae4 rEsch/OPbVuGAxEO4izym4o+ys0WZ9Pnfce5Usmw+DfUi5KzsYIq2VxZIh0yfnLq 4eKlxGIaAuzTtHuK3tCFR8/y+7KquhEEOcm7FiJYroPan4nZwC4LcicMtlesJMqz o8cS9C4I2Uon32wLQgQZVCMirB5MARrkRZ00/wDyeg2LAP0VU9pQmorxeN01IaEP lmJtW+RhTa+XMRh4Uz1cLaOQt0OSNeJ4sPp8LQgOrS4XDYK2JBVBe3p7fh28HzAl Azk09VNz5uqTPsmp/+M1Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1714288447; x= 1714374847; bh=/e7fuxX/vtKPR4pmRS6j0FIOy9tSq6SszBVnEsJ8ruY=; b=P eLsxGaG0mmymGdV29C1kWA9FzNuEnA25tB4hLV3Wfbo1osVnjXgGP2v04cQ5A8jE XbhyWOSa+UNcxXKTqAqWnCNDrJjYan/QUOfvRUJrQly7S4rs95MWKobyBsIU7fEV pVbLiSt8JBfB1a30a7JhGsRL+s2fcgghevSJ+ORu+phx+D79MvbH/D7Bw5NbCVsa CPJl9WleK47ZrPhyX9jD4v6Vz3/0Fy5a+I5uC42Ni3JZf0cfobdA+/vbY7TbCwv4 ABdhcxiZM3ycA3lNKKfP25wDeeW4OFO2F37dYWxIUYhfLiCEk8C+BldIkGdjxBbc S9Q6jv86vJYR0i7dZ15Cg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvddtgedgvdduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvfevufffkffojghfggfgsedtke ertdertddtnecuhfhrohhmpefvrghkrghshhhiucfurghkrghmohhtohcuoehoqdhtrghk rghshhhisehsrghkrghmohgttghhihdrjhhpqeenucggtffrrghtthgvrhhnpedvjefgje euvdfguddukeelveetgfdtvefhtdfffeeigfevueetffeivdffkedvtdenucevlhhushht vghrufhiiigvpedunecurfgrrhgrmhepmhgrihhlfhhrohhmpehoqdhtrghkrghshhhise hsrghkrghmohgttghhihdrjhhp X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 28 Apr 2024 03:14:06 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 7/8] firewire: core: add common macro to serialize/deserialize isochronous packet header Date: Sun, 28 Apr 2024 16:13:45 +0900 Message-ID: <20240428071347.409202-8-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240428071347.409202-1-o-takashi@sakamocchi.jp> References: <20240428071347.409202-1-o-takashi@sakamocchi.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The packet for Asynchronous Streaming Packet includes the same header fields as the isochronous packet has. It is helpful to have some helper functions to serialize/deserialize them. This commit adds such helper functions with their test. Signed-off-by: Takashi Sakamoto --- drivers/firewire/packet-header-definitions.h | 66 ++++++++++++++++++++ drivers/firewire/packet-serdes-test.c | 44 +++++++++++++ 2 files changed, 110 insertions(+) diff --git a/drivers/firewire/packet-header-definitions.h b/drivers/firewir= e/packet-header-definitions.h index 83e550427706..ab9d0fa790d4 100644 --- a/drivers/firewire/packet-header-definitions.h +++ b/drivers/firewire/packet-header-definitions.h @@ -165,4 +165,70 @@ static inline void async_header_set_extended_tcode(u32= header[ASYNC_HEADER_QUADL header[3] |=3D (((u32)extended_tcode) << ASYNC_HEADER_Q3_EXTENDED_TCODE_S= HIFT) & ASYNC_HEADER_Q3_EXTENDED_TCODE_MASK; } =20 +#define ISOC_HEADER_DATA_LENGTH_SHIFT 16 +#define ISOC_HEADER_DATA_LENGTH_MASK 0xffff0000 +#define ISOC_HEADER_TAG_SHIFT 14 +#define ISOC_HEADER_TAG_MASK 0x0000c000 +#define ISOC_HEADER_CHANNEL_SHIFT 8 +#define ISOC_HEADER_CHANNEL_MASK 0x00003f00 +#define ISOC_HEADER_TCODE_SHIFT 4 +#define ISOC_HEADER_TCODE_MASK 0x000000f0 +#define ISOC_HEADER_SY_SHIFT 0 +#define ISOC_HEADER_SY_MASK 0x0000000f + +static inline unsigned int isoc_header_get_data_length(u32 header) +{ + return (header & ISOC_HEADER_DATA_LENGTH_MASK) >> ISOC_HEADER_DATA_LENGTH= _SHIFT; +} + +static inline unsigned int isoc_header_get_tag(u32 header) +{ + return (header & ISOC_HEADER_TAG_MASK) >> ISOC_HEADER_TAG_SHIFT; +} + +static inline unsigned int isoc_header_get_channel(u32 header) +{ + return (header & ISOC_HEADER_CHANNEL_MASK) >> ISOC_HEADER_CHANNEL_SHIFT; +} + +static inline unsigned int isoc_header_get_tcode(u32 header) +{ + return (header & ISOC_HEADER_TCODE_MASK) >> ISOC_HEADER_TCODE_SHIFT; +} + +static inline unsigned int isoc_header_get_sy(u32 header) +{ + return (header & ISOC_HEADER_SY_MASK) >> ISOC_HEADER_SY_SHIFT; +} + +static inline void isoc_header_set_data_length(u32 *header, unsigned int d= ata_length) +{ + *header &=3D ~ISOC_HEADER_DATA_LENGTH_MASK; + *header |=3D (((u32)data_length) << ISOC_HEADER_DATA_LENGTH_SHIFT) & ISOC= _HEADER_DATA_LENGTH_MASK; +} + +static inline void isoc_header_set_tag(u32 *header, unsigned int tag) +{ + *header &=3D ~ISOC_HEADER_TAG_MASK; + *header |=3D (((u32)tag) << ISOC_HEADER_TAG_SHIFT) & ISOC_HEADER_TAG_MASK; +} + +static inline void isoc_header_set_channel(u32 *header, unsigned int chann= el) +{ + *header &=3D ~ISOC_HEADER_CHANNEL_MASK; + *header |=3D (((u32)channel) << ISOC_HEADER_CHANNEL_SHIFT) & ISOC_HEADER_= CHANNEL_MASK; +} + +static inline void isoc_header_set_tcode(u32 *header, unsigned int tcode) +{ + *header &=3D ~ISOC_HEADER_TCODE_MASK; + *header |=3D (((u32)tcode) << ISOC_HEADER_TCODE_SHIFT) & ISOC_HEADER_TCOD= E_MASK; +} + +static inline void isoc_header_set_sy(u32 *header, unsigned int sy) +{ + *header &=3D ~ISOC_HEADER_SY_MASK; + *header |=3D (((u32)sy) << ISOC_HEADER_SY_SHIFT) & ISOC_HEADER_SY_MASK; +} + #endif // _FIREWIRE_PACKET_HEADER_DEFINITIONS_H diff --git a/drivers/firewire/packet-serdes-test.c b/drivers/firewire/packe= t-serdes-test.c index 299e9f908463..f93c966e794d 100644 --- a/drivers/firewire/packet-serdes-test.c +++ b/drivers/firewire/packet-serdes-test.c @@ -167,6 +167,26 @@ static void deserialize_async_header_block_response(co= nst u32 header[ASYNC_HEADE *extended_tcode =3D async_header_get_extended_tcode(header); } =20 +static void serialize_isoc_header(u32 *header, unsigned int data_length, u= nsigned int tag, + unsigned int channel, unsigned int tcode, unsigned int sy) +{ + isoc_header_set_data_length(header, data_length); + isoc_header_set_tag(header, tag); + isoc_header_set_channel(header, channel); + isoc_header_set_tcode(header, tcode); + isoc_header_set_sy(header, sy); +} + +static void deserialize_isoc_header(u32 header, unsigned int *data_length,= unsigned int *tag, + unsigned int *channel, unsigned int *tcode, unsigned int *sy) +{ + *data_length =3D isoc_header_get_data_length(header); + *tag =3D isoc_header_get_tag(header); + *channel =3D isoc_header_get_channel(header); + *tcode =3D isoc_header_get_tcode(header); + *sy =3D isoc_header_get_sy(header); +} + static void test_async_header_write_quadlet_request(struct kunit *test) { static const u32 expected[ASYNC_HEADER_QUADLET_COUNT] =3D { @@ -515,6 +535,29 @@ static void test_async_header_lock_response(struct kun= it *test) KUNIT_EXPECT_MEMEQ(test, header, expected, sizeof(expected)); } =20 +static void test_isoc_header(struct kunit *test) +{ + const u32 expected =3D 0x00d08dec; + u32 header =3D 0; + + unsigned int data_length; + unsigned int tag; + unsigned int channel; + unsigned int tcode; + unsigned int sy; + + deserialize_isoc_header(expected, &data_length, &tag, &channel, &tcode, &= sy); + + KUNIT_EXPECT_EQ(test, 0xd0, data_length); + KUNIT_EXPECT_EQ(test, 0x02, tag); + KUNIT_EXPECT_EQ(test, 0x0d, channel); + KUNIT_EXPECT_EQ(test, 0x0e, tcode); + KUNIT_EXPECT_EQ(test, 0x0c, sy); + + serialize_isoc_header(&header, data_length, tag, channel, tcode, sy); + + KUNIT_EXPECT_EQ(test, header, expected); +} =20 static struct kunit_case packet_serdes_test_cases[] =3D { KUNIT_CASE(test_async_header_write_quadlet_request), @@ -526,6 +569,7 @@ static struct kunit_case packet_serdes_test_cases[] =3D= { KUNIT_CASE(test_async_header_read_block_response), KUNIT_CASE(test_async_header_lock_request), KUNIT_CASE(test_async_header_lock_response), + KUNIT_CASE(test_isoc_header), {} }; =20 --=20 2.43.0 From nobody Fri Dec 19 11:02:21 2025 Received: from wfout2-smtp.messagingengine.com (wfout2-smtp.messagingengine.com [64.147.123.145]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 28377548EC for ; Sun, 28 Apr 2024 07:14:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.145 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714288452; cv=none; b=ApnxIKUN74Tp4vX+0gOeDUVKbDiv9QAfH6ppn9i3p+b/TxYAEwWmBsZJkCd0k0h3PzuQ3ziDpJ43W3W8mJTstFZuUWZaTY86zzpMd2eIN8Us9PL+n21HaUVTNE5XmUbFxvRMKRLvk8BvIHPP2Lbg0M6zleuJhI2SBSurhPb93hI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714288452; c=relaxed/simple; bh=LCrACMQobUD1N2aJwOzCe0jVPAcOB6NcU9fKqGniKfw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=V0PCUwqeCt3yXD23QFzbPyMQbOdUM57dEv1Mwk4KKEixoqeoYdir5WOwofrIn7KrOTcnwZAX39vUCVsx5hQ3SMkPcX2SKi9uZIOH9ezV9+FIfejK1HMuL8ail8H/4wp2fZmBjOyYv/tLpcx715laWBi5xqMal/qFUOPr5fPHs0k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp; spf=pass smtp.mailfrom=sakamocchi.jp; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b=ZwSTrBjY; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=FYhcsQzE; arc=none smtp.client-ip=64.147.123.145 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b="ZwSTrBjY"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="FYhcsQzE" Received: from compute7.internal (compute7.nyi.internal [10.202.2.48]) by mailfout.west.internal (Postfix) with ESMTP id 557BE1C00117; Sun, 28 Apr 2024 03:14:10 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 28 Apr 2024 03:14:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sakamocchi.jp; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm3; t=1714288449; x= 1714374849; bh=lPogmESFCjjhKwyywY5ioCHwxWU0kxDIYwzD2LnEo2I=; b=Z wSTrBjY43WI6YKaYmgDkI9Nst9YYYq6A4nsb1IJ5HuvrqQqtb5WGRD2tGZ9HW6QL H1Ly41PTSoY6oidRtPzI7ViCgxNHmhVElnFuk2OKl3zCP9IuiYvKunzbE4MR50VT O8/Mp+Uh5K08o3a/at7r/msylib5UJbZqQnG4khImEwsUTdrImTLpRQhc0CVH1H/ thuc+dV5hfMKKFnegc3Mu6prEjBJaEBTcGtbH1FLYRc6Nq6Ya1iY++FM7BrHspKR 6gSK3Zd61NBOT9f78gZ5fTFjBGoTzEVkOoSd9urLcyj3af1lc5zByXfJZC7QBXEf fhZvt0qIbeAxbMFKoa31A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1714288449; x= 1714374849; bh=lPogmESFCjjhKwyywY5ioCHwxWU0kxDIYwzD2LnEo2I=; b=F YhcsQzE4PfsHqDm8r24CRLhIwR9M/lIzMWUtH0z6aNYUwdzM6N4EFeXxFLhe88EK gB9bnz3KWsh8wd0bAUZ4GICH3ggl7G9k0N15+bC9pjaISimxUqsk415vyb3Tnv7T N7gw75+4qddcXdKY+7qEPxbBclopI6R38bgV9s0nHV/Rj3PwPTCVs009uGsnVSiV xEcxZliPPvvtjmcKEt19Ys4E2rjZlelwiTux0Fg0ARjfaPVTlMFSsaY2wJXsgEMn WZWPG4Z8W1UjHf13Z2DtU7xq1vQ4vHiT2v0MAeVy0n5gUTSqaCUaO57taOlB01sJ tqVGckZGmmlGeGLh1XzlQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvddtgedgvddtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvfevufffkffojghfggfgsedtke ertdertddtnecuhfhrohhmpefvrghkrghshhhiucfurghkrghmohhtohcuoehoqdhtrghk rghshhhisehsrghkrghmohgttghhihdrjhhpqeenucggtffrrghtthgvrhhnpedvjefgje euvdfguddukeelveetgfdtvefhtdfffeeigfevueetffeivdffkedvtdenucevlhhushht vghrufhiiigvpedunecurfgrrhgrmhepmhgrihhlfhhrohhmpehoqdhtrghkrghshhhise hsrghkrghmohgttghhihdrjhhp X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 28 Apr 2024 03:14:08 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 8/8] firewire: core: replace local macros with common inline functions for isochronous packet header Date: Sun, 28 Apr 2024 16:13:46 +0900 Message-ID: <20240428071347.409202-9-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240428071347.409202-1-o-takashi@sakamocchi.jp> References: <20240428071347.409202-1-o-takashi@sakamocchi.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This commit replaces the local macros with the common inline functions to serialize the packer header for Asynchronous Streaming Packet. Signed-off-by: Takashi Sakamoto --- drivers/firewire/core-transaction.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/drivers/firewire/core-transaction.c b/drivers/firewire/core-tr= ansaction.c index 45ea15342ab8..3ecb0b945083 100644 --- a/drivers/firewire/core-transaction.c +++ b/drivers/firewire/core-transaction.c @@ -31,9 +31,6 @@ #include "core.h" #include "packet-header-definitions.h" =20 -#define HEADER_TCODE(tcode) ((tcode) << 4) -#define HEADER_DATA_LENGTH(length) ((length) << 16) - #define HEADER_DESTINATION_IS_BROADCAST(header) \ ((async_header_get_destination(header) & 0x3f) =3D=3D 0x3f) =20 @@ -215,10 +212,11 @@ static void fw_fill_request(struct fw_packet *packet,= int tcode, int tlabel, int ext_tcode; =20 if (tcode =3D=3D TCODE_STREAM_DATA) { - packet->header[0] =3D - HEADER_DATA_LENGTH(length) | - destination_id | - HEADER_TCODE(TCODE_STREAM_DATA); + // The value of destination_id argument should include tag, channel, and= sy fields + // as isochronous packet header has. + packet->header[0] =3D destination_id; + isoc_header_set_data_length(packet->header, length); + isoc_header_set_tcode(packet->header, TCODE_STREAM_DATA); packet->header_length =3D 4; packet->payload =3D payload; packet->payload_length =3D length; --=20 2.43.0