can-utils/isobusfs/isobusfs_cmn_fa.h

385 lines
13 KiB
C

// SPDX-License-Identifier: LGPL-2.0-only
// SPDX-FileCopyrightText: 2023 Oleksij Rempel <linux@rempel-privat.de>
#ifndef _ISOBUSFS_CMN_FA_H
#define _ISOBUSFS_CMN_FA_H
#include <linux/kernel.h>
#include "isobusfs_cmn.h"
/* B.14 Flags */
/**
* ISOBUSFS_FA_REPORT_HIDDEN: (version 4 and later)
* 0 - Do not report hidden files and folders in directory listing.
* 1 - Report hidden files and folders in directory listing.
*/
#define ISOBUSFS_FA_REPORT_HIDDEN BIT(5)
/**
* ISOBUSFS_FA_OPEN_EXCLUSIVE:
* 0 - Open file for shared read access
* 1 - Open file with exclusive access (fails if already open)
*/
#define ISOBUSFS_FA_OPEN_EXCLUSIVE BIT(4)
/**
* ISOBUSFS_FA_OPEN_APPEND
* 0 - Open file for random access (file pointer set to the start of
* the file)
* 1 - Open file for appending data to the end of the file (file
* pointer set to the end of the file).
*/
#define ISOBUSFS_FA_OPEN_APPEND BIT(3)
/**
* ISOBUSFS_FA_CREATE_FILE_DIR:
* 0 - Open an existing file (fails if non-existent file)
* 1 - Create a new file and/or directories if not yet existing
*/
#define ISOBUSFS_FA_CREATE_FILE_DIR BIT(2)
#define ISOBUSFS_FA_OPEN_MASK GENMASK(1, 0)
#define ISOBUSFS_FA_OPEN_FILE_RO 0
#define ISOBUSFS_FA_OPEN_FILE_WO 1
#define ISOBUSFS_FA_OPEN_FILE_WR 2
#define ISOBUSFS_FA_OPEN_DIR 3
/*
* ISO 11783-13:2021 B.15 - File Attributes
* Bit 7: Case Sensitivity
* 0 - Volume is case-insensitive
* 1 - Volume is case-sensitive (Version 3 and later FS support this attribute)
* Bit 6: Removability
* 0 - Volume is removable
* 1 - Volume is not removable
* Bit 5: Long Filename Support
* 0 - Volume does not support long filenames
* 1 - Volume supports long filenames
* Bit 4: Directory Specification
* 0 - Does not specify a directory
* 1 - Specifies a directory
* Bit 3: Volume Specification
* 0 - Does not specify a volume
* 1 - Specifies a volume
* Bit 2: Hidden Attribute Support
* 0 - Volume does not support hidden attribute
* 1 - Volume supports hidden attribute and implementation supports it for the given volume
* Bit 1: Hidden Attribute Setting
* 0 - "Hidden" attribute is not set
* 1 - "Hidden" attribute is set (not applicable unless volume supports hidden attribute)
* Bit 0: Read-Only Attribute
* 0 - "Read-only" attribute is not set
* 1 - "Read-only" attribute is set
*/
#define ISOBUSFS_ATTR_CASE_SENSITIVE BIT(7)
#define ISOBUSFS_ATTR_REMOVABLE BIT(6)
#define ISOBUSFS_ATTR_LONG_FILENAME BIT(5)
#define ISOBUSFS_ATTR_DIRECTORY BIT(4)
#define ISOBUSFS_ATTR_VOLUME BIT(3)
#define ISOBUSFS_ATTR_HIDDEN_SUPPORT BIT(2)
#define ISOBUSFS_ATTR_HIDDEN BIT(1)
#define ISOBUSFS_ATTR_READ_ONLY BIT(0)
/**
* C.3.3.2 Open File Request
* struct isobusfs_fa_openf_req - Open File Request structure
* @fs_function: Function and command (1 byte)
* Bits 7-4: 0b0010 (Command - File Access)
* Bits 3-0: 0b0000 (Function - Read File) (see B.2)
* @tan: Transaction number (1 byte) (see B.8)
* @flags: Flags (1 byte) (see B.14)
* name_len: Path Name Length (2 bytes) (see B.12)
* @name: Name (Filename, Path or Wildcard name, depending on Flags)
* (Variable length)
*
* Transmission repetition rate: On request
* Data length: Variable
* Parameter group number: Client to FS, destination-specific
*
* Open File Request message is used to request opening a file, directory or
* using a wildcard name. The message contains the TAN, Flags, Path Name
* Length, and Name.
*/
struct isobusfs_fa_openf_req {
uint8_t fs_function;
uint8_t tan;
uint8_t flags;
__le16 name_len;
uint8_t name[];
};
/**
* C.3.3.3 Open File Response
* struct isobusfs_fa_openf_res - Open File Response structure
* @fs_function: Function and command (1 byte)
* Bits 7-4: 0b0010 (Command - File Access) (see B.1)
* Bits 3-0: 0b0000 (Function - Open File) (see B.2)
* @tan: Transaction number (1 byte)
* @error_code: Error code (1 byte), possible values:
* 0: Success
* 1: Access denied
* 2: Invalid access
* 3: Too many files open
* 4: File, path or volume not found
* 6: Invalid given source name
* 8: Volume out of free space
* 10: Media is not present
* 13: Volume is possibly not initialized
* 43: Out of memory
* 44: Any other error
* @handle: File handle (1 byte)
* @attributes: File attributes (1 byte)
* @reserved: Reserved, transmit as 0xFF (3 bytes)
*
* Transmission repetition rate: In response to Open File Request message
* Data length: 8 bytes
* Parameter group number: FS to client, destination-specific
*/
struct isobusfs_fa_openf_res {
uint8_t fs_function;
uint8_t tan;
uint8_t error_code;
uint8_t handle;
uint8_t attributes;
uint8_t reserved[3];
};
/* B.17 Position mode */
/* From the beginning of the file */
#define ISOBUSFS_FA_SEEK_SET 0
/* From the current position in the file */
#define ISOBUSFS_FA_SEEK_CUR 1
/* From the end of the file (can only be negative or 0 value) */
#define ISOBUSFS_FA_SEEK_END 2
/**
* C.3.4.2 Seek File Request
* struct isobusfs_fa_seekf_req - Seek File Request structure
* @fs_function: Function and command (1 byte)
* Bits 7-4: 0b0010 (Command - File Access) (see B.1)
* Bits 3-0: 0b0001 (Function - Seek File) (see B.2)
* @tan: Transaction number (1 byte) (see B.8)
* @handle: Handle (1 byte) (see B.10)
* @position_mode: Position mode (1 byte) (see B.17)
* @offset: Offset (4 bytes) (see B.18)
*/
struct isobusfs_fa_seekf_req {
uint8_t fs_function;
uint8_t tan;
uint8_t handle;
uint8_t position_mode;
__le32 offset;
};
/**
* C.3.4.2 Seek File Response
* struct isobusfs_fa_seekf_res - Seek File Response structure
* @fs_function: Function and command (1 byte)
* Bits 7-4: 0b0010 (Command - File Access) (see B.1)
* Bits 3-0: 0b0001 (Function - Seek File) (see B.2)
* @tan: Transaction number (1 byte) (see B.8)
* @error_code: Error code (1 byte) (see B.9)
* 0: Success
* 1: Access denied
* 5: Invalid Handle
* 11: Failure during a read operation
* 42: Invalid request length
* 43: Out of memory
* 44: Any other error
* 45: File pointer at end of file
* @reserved: Reserved, transmit as 0xFF (1 byte)
* @position: Position (4 bytes) (see B.19)
*/
struct isobusfs_fa_seekf_res {
uint8_t fs_function;
uint8_t tan;
uint8_t error_code;
uint8_t reserved;
__le32 position;
};
/**
* C.3.5.2 Read File Request
* struct isobusfs_fa_readf_req - Read File Request structure
* @fs_function: Function and command (1 byte)
* Bits 7-4: 0b0010 (Command: File Access, see B.1)
* Bits 3-0: 0b0010 (Function: Read File, see B.2)
* @tan: Transaction number (1 byte) (see B.8)
* @handle: File handle (1 byte) (see B.10)
* @count: Count (2 bytes) (see B.20)
* @reserved: Reserved, transmit as 0xFF (3 bytes)
* Byte 6: Version 4 and later: Reserved
* Version 3 and prior: Report Hidden Files (see B.28)
*
* Transmission repetition rate: On request
* Data length: 8 bytes
* Parameter group number: Client to FS, destination-specific
*/
struct isobusfs_fa_readf_req {
uint8_t fs_function;
uint8_t tan;
uint8_t handle;
__le16 count;
uint8_t reserved[3];
};
/**
* C.3.5.3 Read File Response (Handle-referenced file)
* struct isobusfs_read_file_response - Read File Response structure
* @fs_function: Function and command (1 byte)
* Bits 7-4: 0b0010 (Command: File Access, see B.1)
* Bits 3-0: 0b0010 (Function: Read File, see B.2)
* @tan: Transaction number (1 byte) (see B.8)
* @error_code: Error code (1 byte) (see B.9)
* 0: Success
* 1: Access denied
* 5: Invalid Handle
* 11: Failure during a read operation
* 43: Out of memory
* 44: Any other error
* 45: File pointer at end of file
* @count: Count (2 bytes) (see B.20)
* @data: Data (variable length)
*
* Transmission repetition rate: In response to Read File Request message
* Data length: Variable
* Parameter group number: FS to client, destination-specific
*/
struct isobusfs_read_file_response {
uint8_t fs_function;
uint8_t tan;
uint8_t error_code;
__le16 count;
uint8_t data[];
};
/**
* C.3.5.4 Read Directory Response (Handle-referenced directory)
* struct isobusfs_read_dir_response - Read Directory Response structure
* @fs_function: Function and command (1 byte)
* Bits 7-4: 0b0010 (Command: File Access, see B.1)
* Bits 3-0: 0b0010 (Function: Read File, see B.2)
* @tan: Transaction number (1 byte) (see B.8)
* @error_code: Error code (1 byte) (see B.9)
* 0: Success
* 1: Access denied
* 5: Invalid Handle
* 11: Failure during a read operation
* 43: Out of memory
* 44: Any other error
* 45: File pointer at end of file
* @count: Count (2 bytes) (see B.20)
* @data: Data (variable length) (see B.21)
*
* Transmission repetition rate: In response to Read File Request message
* Data length: Variable
* Parameter group number: FS to client, destination-specific
*/
struct isobusfs_read_dir_response {
uint8_t fs_function;
uint8_t tan;
uint8_t error_code;
__le16 count;
uint8_t data[];
};
/**
* C.3.6.2 Write File Request
* struct isobusfs_write_file_request - Write File Request structure
* @fs_function: Function and command (1 byte)
* Bits 7-4: 0b0010 (Command: File Access, see B.1)
* Bits 3-0: 0b0011 (Function: Write File, see B.2)
* @tan: Transaction number (1 byte) (see B.8)
* @handle: Handle (1 byte) (see B.10)
* @count: Count (2 bytes) (see B.20)
* @data: Data (variable length)
*
* Transmission repetition rate: On request
* Data length: Variable
* Parameter group number: Client to FS, destination-specific
*/
struct isobusfs_write_file_request {
uint8_t fs_function;
uint8_t tan;
uint8_t handle;
__le16 count;
uint8_t data[];
};
/**
* C.3.6.3 Write File Response
* struct isobusfs_write_file_response - Write File Response structure
* @fs_function: Function and command (1 byte)
* Bits 7-4: 0b0010 (Command: File Access, see B.1)
* Bits 3-0: 0b0011 (Function: Write File, see B.2)
* @tan: Transaction number (1 byte) (see B.8)
* @error_code: Error code (1 byte) (see B.9)
* 0: Success
* 1: Access denied
* 5: Invalid Handle
* 8: Volume out of space
* 9: Failure during a write operation
* 43: Out of memory
* 44: Any other error
* @count: Count (2 bytes) (see B.20)
* @reserved: Reserved, transmit as 0xFF (3 bytes)
*
* Transmission repetition rate: In response to Write File Request message
* Data length: 8 bytes
* Parameter group number: FS to client, destination-specific
*/
struct isobusfs_write_file_response {
uint8_t fs_function;
uint8_t tan;
uint8_t error_code;
__le16 count;
uint8_t reserved[3];
};
/**
* C.3.7.1 Close File Request
* struct isobusfs_close_file_request - Close File Request structure
* @fs_function: Function and command (1 byte)
* Bits 7-4: 0b0010 (Command: File Access, see B.1)
* Bits 3-0: 0b0100 (Function: Close File, see B.2)
* @tan: Transaction number (1 byte) (see B.8)
* @handle: Handle (1 byte) (see B.10)
* @reserved: Reserved, transmit as 0xFF (5 bytes)
*
* Transmission repetition rate: On request
* Data length: 8 bytes
* Parameter group number: Client to FS, destination-specific
*/
struct isobusfs_close_file_request {
uint8_t fs_function;
uint8_t tan;
uint8_t handle;
uint8_t reserved[5];
};
/**
* C.3.7.2 Close File Response
* struct isobusfs_close_file_response - Close File Response structure
* @fs_function: Function and command (1 byte)
* Bits 7-4: 0b0010 (Command: File Access, see B.1)
* Bits 3-0: 0b0100 (Function: Close File, see B.2)
* @tan: Transaction number (1 byte) (see B.8)
* @error_code: Error code (1 byte) (see B.9)
* 0: Success
* 1: Access denied
* 5: Invalid Handle
* 8: Volume out of space
* 9: Failure during a write operation
* 43: Out of memory
* 44: Any other error
* @reserved: Reserved, transmit as 0xFF (6 bytes)
*/
struct isobusfs_close_file_res {
uint8_t fs_function;
uint8_t tan;
uint8_t error_code;
uint8_t reserved[6];
};
#endif /* _LINUX_ISOBUS_FS_H */