can: peak: add support for PEAK PCAN-PCIe FD CAN-FD boards
This patch adds the support of the PCAN-PCI Express FD boards made by PEAK-System, for computers using the PCI Express slot. The PCAN-PCI Express FD has one or two CAN FD channels, depending on the model. A galvanic isolation of the CAN ports protects the electronics of the card and the respective computer against disturbances of up to 500 Volts. The PCAN-PCI Express FD can be operated with ambient temperatures in a range of -40 to +85 °C. Such boards run an extented version of the CAN-FD IP running into USB CAN-FD interfaces from PEAK-System, so this patch adds several new commands and their corresponding data types to the PEAK CAN-FD common definitions header file too. Signed-off-by: Stephane Grosjean <s.grosjean@peak-system.com> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:

committed by
Marc Kleine-Budde

parent
c3df7c5755
commit
8ac8321e4a
@@ -23,11 +23,14 @@
|
||||
#define PUCAN_CMD_LISTEN_ONLY_MODE 0x003
|
||||
#define PUCAN_CMD_TIMING_SLOW 0x004
|
||||
#define PUCAN_CMD_TIMING_FAST 0x005
|
||||
#define PUCAN_CMD_SET_STD_FILTER 0x006
|
||||
#define PUCAN_CMD_RESERVED2 0x007
|
||||
#define PUCAN_CMD_FILTER_STD 0x008
|
||||
#define PUCAN_CMD_TX_ABORT 0x009
|
||||
#define PUCAN_CMD_WR_ERR_CNT 0x00a
|
||||
#define PUCAN_CMD_SET_EN_OPTION 0x00b
|
||||
#define PUCAN_CMD_CLR_DIS_OPTION 0x00c
|
||||
#define PUCAN_CMD_RX_BARRIER 0x010
|
||||
#define PUCAN_CMD_END_OF_COLLECTION 0x3ff
|
||||
|
||||
/* uCAN received messages list */
|
||||
@@ -35,6 +38,10 @@
|
||||
#define PUCAN_MSG_ERROR 0x0002
|
||||
#define PUCAN_MSG_STATUS 0x0003
|
||||
#define PUCAN_MSG_BUSLOAD 0x0004
|
||||
|
||||
#define PUCAN_MSG_CACHE_CRITICAL 0x0102
|
||||
|
||||
/* uCAN transmitted messages */
|
||||
#define PUCAN_MSG_CAN_TX 0x1000
|
||||
|
||||
/* uCAN command common header */
|
||||
@@ -43,6 +50,12 @@ struct __packed pucan_command {
|
||||
u16 args[3];
|
||||
};
|
||||
|
||||
/* return the opcode from the opcode_channel field of a command */
|
||||
static inline u16 pucan_cmd_get_opcode(struct pucan_command *c)
|
||||
{
|
||||
return le16_to_cpu(c->opcode_channel) & 0x3ff;
|
||||
}
|
||||
|
||||
#define PUCAN_TSLOW_BRP_BITS 10
|
||||
#define PUCAN_TSLOW_TSGEG1_BITS 8
|
||||
#define PUCAN_TSLOW_TSGEG2_BITS 7
|
||||
@@ -108,6 +121,27 @@ struct __packed pucan_filter_std {
|
||||
__le32 mask; /* CAN-ID bitmask in idx range */
|
||||
};
|
||||
|
||||
#define PUCAN_FLTSTD_ROW_IDX_MAX ((1 << PUCAN_FLTSTD_ROW_IDX_BITS) - 1)
|
||||
|
||||
/* uCAN SET_STD_FILTER command fields */
|
||||
struct __packed pucan_std_filter {
|
||||
__le16 opcode_channel;
|
||||
|
||||
u8 unused;
|
||||
u8 idx;
|
||||
__le32 mask; /* CAN-ID bitmask in idx range */
|
||||
};
|
||||
|
||||
/* uCAN TX_ABORT commands fields */
|
||||
#define PUCAN_TX_ABORT_FLUSH 0x0001
|
||||
|
||||
struct __packed pucan_tx_abort {
|
||||
__le16 opcode_channel;
|
||||
|
||||
__le16 flags;
|
||||
u32 unused;
|
||||
};
|
||||
|
||||
/* uCAN WR_ERR_CNT command fields */
|
||||
#define PUCAN_WRERRCNT_TE 0x4000 /* Tx error cntr write Enable */
|
||||
#define PUCAN_WRERRCNT_RE 0x8000 /* Rx error cntr write Enable */
|
||||
@@ -184,6 +218,12 @@ struct __packed pucan_error_msg {
|
||||
u8 rx_err_cnt;
|
||||
};
|
||||
|
||||
static inline int pucan_error_get_channel(const struct pucan_error_msg *msg)
|
||||
{
|
||||
return msg->channel_type_d & 0x0f;
|
||||
}
|
||||
|
||||
#define PUCAN_RX_BARRIER 0x10
|
||||
#define PUCAN_BUS_PASSIVE 0x20
|
||||
#define PUCAN_BUS_WARNING 0x40
|
||||
#define PUCAN_BUS_BUSOFF 0x80
|
||||
@@ -197,6 +237,31 @@ struct __packed pucan_status_msg {
|
||||
u8 unused[3];
|
||||
};
|
||||
|
||||
static inline int pucan_status_get_channel(const struct pucan_status_msg *msg)
|
||||
{
|
||||
return msg->channel_p_w_b & 0x0f;
|
||||
}
|
||||
|
||||
static inline int pucan_status_is_rx_barrier(const struct pucan_status_msg *msg)
|
||||
{
|
||||
return msg->channel_p_w_b & PUCAN_RX_BARRIER;
|
||||
}
|
||||
|
||||
static inline int pucan_status_is_passive(const struct pucan_status_msg *msg)
|
||||
{
|
||||
return msg->channel_p_w_b & PUCAN_BUS_PASSIVE;
|
||||
}
|
||||
|
||||
static inline int pucan_status_is_warning(const struct pucan_status_msg *msg)
|
||||
{
|
||||
return msg->channel_p_w_b & PUCAN_BUS_WARNING;
|
||||
}
|
||||
|
||||
static inline int pucan_status_is_busoff(const struct pucan_status_msg *msg)
|
||||
{
|
||||
return msg->channel_p_w_b & PUCAN_BUS_BUSOFF;
|
||||
}
|
||||
|
||||
/* uCAN transmitted message format */
|
||||
#define PUCAN_MSG_CHANNEL_DLC(c, d) (((c) & 0xf) | ((d) << 4))
|
||||
|
||||
|
Reference in New Issue
Block a user