drivers/firewire/packet-header-definitions.h

Source file repositories/reference/linux-study-clean/drivers/firewire/packet-header-definitions.h

File Facts

System
Linux kernel
Corpus path
drivers/firewire/packet-header-definitions.h
Extension
.h
Size
8399 bytes
Lines
237
Domain
Driver Families
Bucket
drivers/firewire
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

// 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

#include <linux/types.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[ASYNC_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_TLABEL_SHIFT;
}

static inline unsigned int async_header_get_retry(const u32 header[ASYNC_HEADER_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_HEADER_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[ASYNC_HEADER_QUADLET_COUNT])
{
	return (header[0] & ASYNC_HEADER_Q0_PRIORITY_MASK) >> ASYNC_HEADER_Q0_PRIORITY_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_SOURCE_SHIFT;
}

static inline unsigned int async_header_get_rcode(const u32 header[ASYNC_HEADER_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_QUADLET_COUNT])
{
	u32 hi = (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_HEADER_QUADLET_COUNT])
{
	return header[3];
}

static inline unsigned int async_header_get_data_length(const u32 header[ASYNC_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 header[ASYNC_HEADER_QUADLET_COUNT])
{
	return (header[3] & ASYNC_HEADER_Q3_EXTENDED_TCODE_MASK) >> ASYNC_HEADER_Q3_EXTENDED_TCODE_SHIFT;

Annotation

Implementation Notes