+
+#if defined(CONFIG_OC_LINCAN_PORTIO_ONLY)
+extern inline void can_write_reg(const struct canchip_t *chip, unsigned char data, unsigned reg_offs)
+{
+ can_outb(data, chip->chip_base_addr+reg_offs);
+}
+extern inline unsigned can_read_reg(const struct canchip_t *chip, unsigned reg_offs)
+{
+ return can_inb(chip->chip_base_addr+reg_offs);
+}
+extern inline void canobj_write_reg(const struct canchip_t *chip, const struct msgobj_t *obj,
+ unsigned char data, unsigned reg_offs)
+{
+ can_outb(data, obj->obj_base_addr+reg_offs);
+}
+extern inline unsigned canobj_read_reg(const struct canchip_t *chip, const struct msgobj_t *obj,
+ unsigned reg_offs)
+{
+ return can_inb(obj->obj_base_addr+reg_offs);
+}
+
+#elif defined(CONFIG_OC_LINCAN_MEMIO_ONLY)
+extern inline void can_write_reg(const struct canchip_t *chip, unsigned char data, unsigned reg_offs)
+{
+ can_writeb(data, chip->chip_base_addr+reg_offs);
+}
+extern inline unsigned can_read_reg(const struct canchip_t *chip, unsigned reg_offs)
+{
+ return can_readb(chip->chip_base_addr+reg_offs);
+}
+extern inline void canobj_write_reg(const struct canchip_t *chip, const struct msgobj_t *obj,
+ unsigned char data, unsigned reg_offs)
+{
+ can_writeb(data, obj->obj_base_addr+reg_offs);
+}
+extern inline unsigned canobj_read_reg(const struct canchip_t *chip, const struct msgobj_t *obj,
+ unsigned reg_offs)
+{
+ return can_readb(obj->obj_base_addr+reg_offs);
+}
+
+#else /*CONFIG_OC_LINCAN_DYNAMICIO*/
+#ifndef CONFIG_OC_LINCAN_DYNAMICIO
+#define CONFIG_OC_LINCAN_DYNAMICIO
+#endif
+
+#define SPI_MESSAGE_LENGTH (32)
+
+/**
+ * struct can_spi_async_t - SPI asynchronous communication supplemental data
+ * @chip: pointer to the chip structure
+ * @opcode: Operation code to be identified by spi_async callback function
+ * @tx_buf: a read-only copy of the transfer buffer
+ * @rx_buf: a read-only copy of the transfer buffer
+ * @len: length of the transmitted buffer
+ * @obj: lincan message for data transmission