PNP0700
     ?ˆËÑƒ| sÊ¿Î #’    ?/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2020 Oliver Hartkopp <socketcan@hartkopp.net>
 * Copyright (C) 2020 Marc Kleine-Budde <kernel@pengutronix.de>
 * Copyright (C) 2020, 2023 Vincent Mailhol <mailhol.vincent@wanadoo.fr>
 */

#ifndef _CAN_LENGTH_H
#define _CAN_LENGTH_H

#include <linux/bits.h>
#include <linux/can.h>
#include <linux/can/netlink.h>
#include <linux/math.h>

/*
 * Size of a Classical CAN Standard Frame header in bits
 *
 * Name of Field				Bits
 * ---------------------------------------------------------
 * Start Of Frame (SOF)				1
 * Arbitration field:
 *	base ID					11
 *	Remote Transmission Request (RTR)	1
 * Control field:
 *	IDentifier Extension bit (IDE)		1
 *	FD Format indicator (FDF)		1
 *	Data Length Code (DLC)			4
 *
 * including all fields preceding the data field, ignoring bitstuffing
 */
#define CAN_FRAME_HEADER_SFF_BITS 19

/*
 * Size of a Classical CAN Extended Frame header in bits
 *
 * Name of Field				Bits
 * ---------------------------------------------------------
 * Start Of Frame (SOF)				1
 * Arbitration field:
 *	base ID					11
 *	Substitute Remote Request (SRR)		1
 *	IDentifier Extension bit (IDE)		1
 *	ID extension				18
 *	Remote Transmission Request (RTR)	1
 * Control field:
 *	FD Format indicator (FDF)		1
 *	Reserved bit (r0)			1
 *	Data length code (DLC)			4
 *
 * including all fields preceding the data field, ignoring bitstuffing
 */
#define CAN_FRAME_HEADER_EFF_BITS 39

/*
 * Size of a CAN-FD Standard Frame in bits
 *
 * Name of Field				Bits
 * ---------------------------------------------------------
 * Start Of Frame (SOF)				1
 * Arbitration field:
 *	base ID					11
 *	Remote Request Substitution (RRS)	1
 * Control field:
 *	IDentifier Extension bit (IDE)		1
 *	FD Format indicator (FDF)		1
 *	Reserved bit (res)			1
 *	Bit Rate Switch (BRS)			1
 *	Error Status Indicator (ESI)		1
 *	Data length code (DLC)			4
 *
 * including all fields preceding the data field, ignoring bitstuffing
 */
#define CANFD_FRAME_HEADER_SFF_BITS 22

/*
 * Size of a CAN-FD Extended Frame in bits
 *
 * Name of Field				Bits
 * ---------------------------------------------------------
 * Start Of Frame (SOF)				1
 * Arbitration field:
 *	base ID					11
 *	Substitute Remote Request (SRR)		1
 *	IDentifier Extension bit (IDE)		1
 *	ID extension				18
 *	Remote Request Substitution (RRS)	1
 * Control field:
 *	FD Format indicator (FDF)		1
 *	Reserved bit (res)			1
 *	Bit Rate Switch (BRS)			1
 *	Error Status Indicator (ESI)		1
 *	Data length code (DLC)			4
 *
 * including all fields preceding the data field, ignoring bitstuffing
 */
#define CANFD_FRAME_HEADER_EFF_BITS 41

/*
 * Size of a CAN CRC Field in bits
 *
 * Name of Field			Bits
 * ---------------------------------------------------------
 * CRC sequence (CRC15)			15
 * CRC Delimiter			1
 *
 * ignoring bitstuffing
 */
#define CAN_FRAME_CRC_FIELD_BITS 16

/*
 * Size of a CAN-FD CRC17 Field in bits (length: 0..16)
 *
 * Name of Field			Bits
 * ---------------------------------------------------------
 * Stuff Count				4
 * CRC Sequence (CRC17)			17
 * CRC Delimiter			1
 * Fixed stuff bits			6
 */
#define CANFD_FRAME_CRC17_FIELD_BITS 28

/*
 * Size of a CAN-FD CRC21 Field in bits (length: 20..64)
 *
 * Name of Field			Bits
 * ---------------------------------------------------------
 * Stuff Count				4
 * CRC sequence (CRC21)			21
 * CRC Delimiter			1
 * Fixed stuff bits			7
 */
#define CANFD_FRAME_CRC21_FIELD_BITS 33

/*
 * Size of a CAN(-FD) Frame footer in bits
 *
 * Name of Field			Bits
 * ---------------------------------------------------------
 * ACK slot				1
 * ACK delimiter			1
 * End Of Frame (EOF)			7
 *
 * including all fields following the CRC field
 */
#define CAN_FRAME_FOOTER_BITS 9

/*
 * First part of the Inter Frame Space
 * (a.k.a. IMF - intermission field)
 */
#define CAN_INTERMISSION_BITS 3

/**
 * can_bitstuffing_len() - Calculate the maximum length with bitstuffing
 * @destuffed_len: length of a destuffed bit stream
 *
 * The worst bit stuffing case is a sequence in which 