#include "./ul_listbase.h"
#include "./can_sysdep.h"
#include "./can_queue.h"
+#include "./can_bittiming.h"
#include "./errno.h"
#ifdef CAN_DEBUG
* @stop_chip: stops chip message processing
* @irq_handler: interrupt service routine
* @irq_accept: optional fast irq accept routine responsible for blocking further interrupts
+ *
+ * @set_bittiming: set bittiming parameters
+ * @get_bittiming_const: get chip specific constants for bittiming computation
*/
struct chipspecops_t {
int (*chip_config)(struct canchip_t *chip);
int (*stop_chip)(struct canchip_t *chip);
int (*irq_handler)(int irq, struct canchip_t *chip);
int (*irq_accept)(int irq, struct canchip_t *chip);
+
+ int (*set_bittiming)(struct canchip_t *chip, int brp, int sjw, int tseg1, int tseg2);
+ int (*get_bittiming_const)(struct canchip_t *chip, struct can_bittiming_const *btc);
};
struct mem_addr {
#if defined(CONFIG_OC_LINCAN_PORTIO_ONLY)
-extern inline void can_write_reg(const struct canchip_t *chip, unsigned char data, unsigned reg_offs)
+extern inline void can_write_reg(const struct canchip_t *chip, unsigned data, unsigned reg_offs)
{
can_outb(data, chip->chip_base_addr+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)
+ unsigned data, unsigned reg_offs)
{
can_outb(data, 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)
+extern inline void can_write_reg(const struct canchip_t *chip, unsigned data, unsigned reg_offs)
{
can_writeb(data, chip->chip_base_addr+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)
+ unsigned data, unsigned reg_offs)
{
can_writeb(data, obj->obj_base_addr+reg_offs);
}
/* Inline function to write to the hardware registers. The argument reg_offs is
* relative to the memory map of the chip and not the absolute memory reg_offs.
*/
-extern inline void can_write_reg(const struct canchip_t *chip, unsigned char data, unsigned reg_offs)
+extern inline void can_write_reg(const struct canchip_t *chip, unsigned data, unsigned reg_offs)
{
can_ioptr_t address_to_write;
address_to_write = 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)
+ unsigned data, unsigned reg_offs)
{
can_ioptr_t address_to_write;
address_to_write = obj->obj_base_addr+reg_offs;