1/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
  2/*
  3 * j1939.h
  4 *
  5 * Copyright (c) 2010-2011 EIA Electronics
  6 *
  7 * This program is free software; you can redistribute it and/or modify
  8 * it under the terms of the GNU General Public License version 2 as
  9 * published by the Free Software Foundation.
 10 */
 11
 12#ifndef _CAN_J1939_H_
 13#define _CAN_J1939_H_
 14
 15#include <linux/types.h>
 16#include <linux/socket.h>
 17#include <linux/can.h>
 18
 19#define J1939_MAX_UNICAST_ADDR 0xfd
 20#define J1939_IDLE_ADDR 0xfe
 21#define J1939_NO_ADDR 0xff		/* == broadcast or no addr */
 22#define J1939_NO_NAME 0
 23#define J1939_PGN_REQUEST 0x0ea00		/* Request PG */
 24#define J1939_PGN_ADDRESS_CLAIMED 0x0ee00	/* Address Claimed */
 25#define J1939_PGN_ADDRESS_COMMANDED 0x0fed8	/* Commanded Address */
 26#define J1939_PGN_PDU1_MAX 0x3ff00
 27#define J1939_PGN_MAX 0x3ffff
 28#define J1939_NO_PGN 0x40000
 29
 30/* J1939 Parameter Group Number
 31 *
 32 * bit 0-7	: PDU Specific (PS)
 33 * bit 8-15	: PDU Format (PF)
 34 * bit 16	: Data Page (DP)
 35 * bit 17	: Reserved (R)
 36 * bit 19-31	: set to zero
 37 */
 38typedef __u32 pgn_t;
 39
 40/* J1939 Priority
 41 *
 42 * bit 0-2	: Priority (P)
 43 * bit 3-7	: set to zero
 44 */
 45typedef __u8 priority_t;
 46
 47/* J1939 NAME
 48 *
 49 * bit 0-20	: Identity Number
 50 * bit 21-31	: Manufacturer Code
 51 * bit 32-34	: ECU Instance
 52 * bit 35-39	: Function Instance
 53 * bit 40-47	: Function
 54 * bit 48	: Reserved
 55 * bit 49-55	: Vehicle System
 56 * bit 56-59	: Vehicle System Instance
 57 * bit 60-62	: Industry Group
 58 * bit 63	: Arbitrary Address Capable
 59 */
 60typedef __u64 name_t;
 61
 62/* J1939 socket options */
 63#define SOL_CAN_J1939 (SOL_CAN_BASE + CAN_J1939)
 64enum {
 65	SO_J1939_FILTER = 1,	/* set filters */
 66	SO_J1939_PROMISC = 2,	/* set/clr promiscuous mode */
 67	SO_J1939_SEND_PRIO = 3,
 68	SO_J1939_ERRQUEUE = 4,
 69};
 70
 71enum {
 72	SCM_J1939_DEST_ADDR = 1,
 73	SCM_J1939_DEST_NAME = 2,
 74	SCM_J1939_PRIO = 3,
 75	SCM_J1939_ERRQUEUE = 4,
 76};
 77
 78enum {
 79	J1939_NLA_PAD,
 80	J1939_NLA_BYTES_ACKED,
 81	J1939_NLA_TOTAL_SIZE,
 82	J1939_NLA_PGN,
 83	J1939_NLA_SRC_NAME,
 84	J1939_NLA_DEST_NAME,
 85	J1939_NLA_SRC_ADDR,
 86	J1939_NLA_DEST_ADDR,
 87};
 88
 89enum {
 90	J1939_EE_INFO_NONE,
 91	J1939_EE_INFO_TX_ABORT,
 92	J1939_EE_INFO_RX_RTS,
 93	J1939_EE_INFO_RX_DPO,
 94	J1939_EE_INFO_RX_ABORT,
 95};
 96
 97struct j1939_filter {
 98	name_t name;
 99	name_t name_mask;
100	pgn_t pgn;
101	pgn_t pgn_mask;
102	__u8 addr;
103	__u8 addr_mask;
104};
105
106#define J1939_FILTER_MAX 512 /* maximum number of j1939_filter set via setsockopt() */
107
108#endif /* !_UAPI_CAN_J1939_H_ */