|
@@ -0,0 +1,168 @@
|
|
|
+/*
|
|
|
+ * bfin_can.h - interface to Blackfin CANs
|
|
|
+ *
|
|
|
+ * Copyright 2004-2009 Analog Devices Inc.
|
|
|
+ *
|
|
|
+ * Licensed under the GPL-2 or later.
|
|
|
+ */
|
|
|
+
|
|
|
+#ifndef __ASM_BFIN_CAN_H__
|
|
|
+#define __ASM_BFIN_CAN_H__
|
|
|
+
|
|
|
+/*
|
|
|
+ * transmit and receive channels
|
|
|
+ */
|
|
|
+#define TRANSMIT_CHL 24
|
|
|
+#define RECEIVE_STD_CHL 0
|
|
|
+#define RECEIVE_EXT_CHL 4
|
|
|
+#define RECEIVE_RTR_CHL 8
|
|
|
+#define RECEIVE_EXT_RTR_CHL 12
|
|
|
+#define MAX_CHL_NUMBER 32
|
|
|
+
|
|
|
+/*
|
|
|
+ * All Blackfin system MMRs are padded to 32bits even if the register
|
|
|
+ * itself is only 16bits. So use a helper macro to streamline this.
|
|
|
+ */
|
|
|
+#define __BFP(m) u16 m; u16 __pad_##m
|
|
|
+
|
|
|
+/*
|
|
|
+ * bfin can registers layout
|
|
|
+ */
|
|
|
+struct bfin_can_mask_regs {
|
|
|
+ __BFP(aml);
|
|
|
+ __BFP(amh);
|
|
|
+};
|
|
|
+
|
|
|
+struct bfin_can_channel_regs {
|
|
|
+ /* data[0,2,4,6] -> data{0,1,2,3} while data[1,3,5,7] is padding */
|
|
|
+ u16 data[8];
|
|
|
+ __BFP(dlc);
|
|
|
+ __BFP(tsv);
|
|
|
+ __BFP(id0);
|
|
|
+ __BFP(id1);
|
|
|
+};
|
|
|
+
|
|
|
+struct bfin_can_regs {
|
|
|
+ /*
|
|
|
+ * global control and status registers
|
|
|
+ */
|
|
|
+ __BFP(mc1); /* offset 0x00 */
|
|
|
+ __BFP(md1); /* offset 0x04 */
|
|
|
+ __BFP(trs1); /* offset 0x08 */
|
|
|
+ __BFP(trr1); /* offset 0x0c */
|
|
|
+ __BFP(ta1); /* offset 0x10 */
|
|
|
+ __BFP(aa1); /* offset 0x14 */
|
|
|
+ __BFP(rmp1); /* offset 0x18 */
|
|
|
+ __BFP(rml1); /* offset 0x1c */
|
|
|
+ __BFP(mbtif1); /* offset 0x20 */
|
|
|
+ __BFP(mbrif1); /* offset 0x24 */
|
|
|
+ __BFP(mbim1); /* offset 0x28 */
|
|
|
+ __BFP(rfh1); /* offset 0x2c */
|
|
|
+ __BFP(opss1); /* offset 0x30 */
|
|
|
+ u32 __pad1[3];
|
|
|
+ __BFP(mc2); /* offset 0x40 */
|
|
|
+ __BFP(md2); /* offset 0x44 */
|
|
|
+ __BFP(trs2); /* offset 0x48 */
|
|
|
+ __BFP(trr2); /* offset 0x4c */
|
|
|
+ __BFP(ta2); /* offset 0x50 */
|
|
|
+ __BFP(aa2); /* offset 0x54 */
|
|
|
+ __BFP(rmp2); /* offset 0x58 */
|
|
|
+ __BFP(rml2); /* offset 0x5c */
|
|
|
+ __BFP(mbtif2); /* offset 0x60 */
|
|
|
+ __BFP(mbrif2); /* offset 0x64 */
|
|
|
+ __BFP(mbim2); /* offset 0x68 */
|
|
|
+ __BFP(rfh2); /* offset 0x6c */
|
|
|
+ __BFP(opss2); /* offset 0x70 */
|
|
|
+ u32 __pad2[3];
|
|
|
+ __BFP(clock); /* offset 0x80 */
|
|
|
+ __BFP(timing); /* offset 0x84 */
|
|
|
+ __BFP(debug); /* offset 0x88 */
|
|
|
+ __BFP(status); /* offset 0x8c */
|
|
|
+ __BFP(cec); /* offset 0x90 */
|
|
|
+ __BFP(gis); /* offset 0x94 */
|
|
|
+ __BFP(gim); /* offset 0x98 */
|
|
|
+ __BFP(gif); /* offset 0x9c */
|
|
|
+ __BFP(control); /* offset 0xa0 */
|
|
|
+ __BFP(intr); /* offset 0xa4 */
|
|
|
+ __BFP(version); /* offset 0xa8 */
|
|
|
+ __BFP(mbtd); /* offset 0xac */
|
|
|
+ __BFP(ewr); /* offset 0xb0 */
|
|
|
+ __BFP(esr); /* offset 0xb4 */
|
|
|
+ u32 __pad3[2];
|
|
|
+ __BFP(ucreg); /* offset 0xc0 */
|
|
|
+ __BFP(uccnt); /* offset 0xc4 */
|
|
|
+ __BFP(ucrc); /* offset 0xc8 */
|
|
|
+ __BFP(uccnf); /* offset 0xcc */
|
|
|
+ u32 __pad4[1];
|
|
|
+ __BFP(version2); /* offset 0xd4 */
|
|
|
+ u32 __pad5[10];
|
|
|
+
|
|
|
+ /*
|
|
|
+ * channel(mailbox) mask and message registers
|
|
|
+ */
|
|
|
+ struct bfin_can_mask_regs msk[MAX_CHL_NUMBER]; /* offset 0x100 */
|
|
|
+ struct bfin_can_channel_regs chl[MAX_CHL_NUMBER]; /* offset 0x200 */
|
|
|
+};
|
|
|
+
|
|
|
+#undef __BFP
|
|
|
+
|
|
|
+/* CAN_CONTROL Masks */
|
|
|
+#define SRS 0x0001 /* Software Reset */
|
|
|
+#define DNM 0x0002 /* Device Net Mode */
|
|
|
+#define ABO 0x0004 /* Auto-Bus On Enable */
|
|
|
+#define TXPRIO 0x0008 /* TX Priority (Priority/Mailbox*) */
|
|
|
+#define WBA 0x0010 /* Wake-Up On CAN Bus Activity Enable */
|
|
|
+#define SMR 0x0020 /* Sleep Mode Request */
|
|
|
+#define CSR 0x0040 /* CAN Suspend Mode Request */
|
|
|
+#define CCR 0x0080 /* CAN Configuration Mode Request */
|
|
|
+
|
|
|
+/* CAN_STATUS Masks */
|
|
|
+#define WT 0x0001 /* TX Warning Flag */
|
|
|
+#define WR 0x0002 /* RX Warning Flag */
|
|
|
+#define EP 0x0004 /* Error Passive Mode */
|
|
|
+#define EBO 0x0008 /* Error Bus Off Mode */
|
|
|
+#define SMA 0x0020 /* Sleep Mode Acknowledge */
|
|
|
+#define CSA 0x0040 /* Suspend Mode Acknowledge */
|
|
|
+#define CCA 0x0080 /* Configuration Mode Acknowledge */
|
|
|
+#define MBPTR 0x1F00 /* Mailbox Pointer */
|
|
|
+#define TRM 0x4000 /* Transmit Mode */
|
|
|
+#define REC 0x8000 /* Receive Mode */
|
|
|
+
|
|
|
+/* CAN_CLOCK Masks */
|
|
|
+#define BRP 0x03FF /* Bit-Rate Pre-Scaler */
|
|
|
+
|
|
|
+/* CAN_TIMING Masks */
|
|
|
+#define TSEG1 0x000F /* Time Segment 1 */
|
|
|
+#define TSEG2 0x0070 /* Time Segment 2 */
|
|
|
+#define SAM 0x0080 /* Sampling */
|
|
|
+#define SJW 0x0300 /* Synchronization Jump Width */
|
|
|
+
|
|
|
+/* CAN_DEBUG Masks */
|
|
|
+#define DEC 0x0001 /* Disable CAN Error Counters */
|
|
|
+#define DRI 0x0002 /* Disable CAN RX Input */
|
|
|
+#define DTO 0x0004 /* Disable CAN TX Output */
|
|
|
+#define DIL 0x0008 /* Disable CAN Internal Loop */
|
|
|
+#define MAA 0x0010 /* Mode Auto-Acknowledge Enable */
|
|
|
+#define MRB 0x0020 /* Mode Read Back Enable */
|
|
|
+#define CDE 0x8000 /* CAN Debug Enable */
|
|
|
+
|
|
|
+/* CAN_CEC Masks */
|
|
|
+#define RXECNT 0x00FF /* Receive Error Counter */
|
|
|
+#define TXECNT 0xFF00 /* Transmit Error Counter */
|
|
|
+
|
|
|
+/* CAN_INTR Masks */
|
|
|
+#define MBRIRQ 0x0001 /* Mailbox Receive Interrupt */
|
|
|
+#define MBTIRQ 0x0002 /* Mailbox Transmit Interrupt */
|
|
|
+#define GIRQ 0x0004 /* Global Interrupt */
|
|
|
+#define SMACK 0x0008 /* Sleep Mode Acknowledge */
|
|
|
+#define CANTX 0x0040 /* CAN TX Bus Value */
|
|
|
+#define CANRX 0x0080 /* CAN RX Bus Value */
|
|
|
+
|
|
|
+/* CAN_MBxx_ID1 and CAN_MBxx_ID0 Masks */
|
|
|
+#define DFC 0xFFFF /* Data Filtering Code (If Enabled) (ID0) */
|
|
|
+#define EXTID_LO 0xFFFF /* Lower 16 Bits of Extended Identifier (ID0) */
|
|
|
+#define EXTID_HI 0x0003 /* Upper 2 Bits of Extended Identifier (ID1) */
|
|
|
+#define BASEID 0x1FFC /* Base Identifier */
|
|
|
+#define IDE 0x2000 /* Identifier Extension */
|
|
|
+#define RTR 0x4000 /* Remote Frame Transmission Request */
|
|
|
+#define AME 0x8000 /* Acceptance Mask Enable */
|