ckfwq/linux-3.0.4/drivers/net/can/gsc3280_can.h

102 lines
2.2 KiB
C

#ifndef GSC3280_CAN_H
#define GSC3280_CAN_H
/* gsc3280_can common registers */
#define BASE_ADDR 0xbc100000
#define REG_MOD 0x00
#define REG_CMR 0x04
#define REG_SR 0x08
#define REG_IR 0x0c
#define REG_IER 0x10
#define REG_BTR 0x14
#define REG_ALC 0x18
#define REG_ECC 0x1c
#define REG_EWLR 0x20
#define REG_RXERR 0x24
#define REG_TXERR 0x28
#define REG_RMC 0x2c
/* gsc3280_can registers (reset mode)*/
#define REG_ACR 0x80
#define REG_AMR 0x84
/* gsc3280_can registers (work mode)*/
#define REG_RXB1 0x80
#define REG_RXB2 0x84
#define REG_RXB3 0x88
#define REG_RXB4 0x8c
#define REG_TXB1 0x80
#define REG_TXB2 0x84
#define REG_TXB3 0x88
#define REG_TXB4 0x8c
/* mode register */
#define MOD_RM 0x01
#define MOD_LOM 0x02
#define MOD_STM 0x04
#define MOD_AFM 0x08
#define MOD_SM 0x10
/* commands */
#define CMD_SRR 0x10
#define CMD_CDO 0x08
#define CMD_RRB 0x04
#define CMD_AT 0x02
#define CMD_TR 0x01
/* status register content */
#define SR_BS 0x80
#define SR_ES 0x40
#define SR_TS 0x20
#define SR_RS 0x10
#define SR_TCS 0x08
#define SR_TBS 0x04
#define SR_DOS 0x02
#define SR_RBS 0x01
#define SR_CRIT (SR_BS|SR_ES)
/* interrupt sources */
#define IRQ_BEI 0x80
#define IRQ_ALI 0x40
#define IRQ_EPI 0x20
#define IRQ_WUI 0x10
#define IRQ_DOI 0x08
#define IRQ_EI 0x04
#define IRQ_TI 0x02
#define IRQ_RI 0x01
/*IER*/
#define IRQ_ALL 0xFF
#define IRQ_OFF 0x00
/* ECC register */
#define ECC_SEG 0x1F
#define ECC_DIR 0x20
#define ECC_MASK 0xc0
#define ECC_BIT 0x00
#define ECC_FORM 0x40
#define ECC_STUFF 0x80
#define ECC_MASK 0xc0
/*TX/RX BUFFER*/
#define FI_FF 0x80
#define FI_RTR 0x40
/**
* struct can_frame - basic CAN frame structure
* @can_ff: the CAN_*_FLAG flags and the data length field of the can frame, see above.
* @can_id: the CAN ID of the frame and CAN_*_FLAG flags, see above.
* @data: the CAN frame payload.
*/
struct can_frame_gsc3280 {
unsigned char can_ff; /* EFF/RTR flags,data length*/
unsigned int can_id; /* 32 bit CAN_ID */
unsigned int data[2];
};
void can_init(int mode, int acc, int filter, int brg);
int can_rx(int time);
int can_tx(int ff ,int id, unsigned int *data, int len, int time);
#endif /* GSC3280_CAN_H */