]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - embedded/app/usbcan/can/main.h
lpc17xx embedded: new function for obtaining chip bittiming constant parameters.
[lincan.git] / embedded / app / usbcan / can / main.h
index b7d2c59ba29444c7cb414d56039e9c3fcc2924a5..cd5fd51769c7635fa9301fc1d7d550098df77402 100644 (file)
@@ -40,6 +40,7 @@
 #include "./ul_listbase.h"
 #include "./can_sysdep.h"
 #include "./can_queue.h"
+#include "./can_bittiming.h"
 #include "./errno.h"
 
 #ifdef CAN_DEBUG
@@ -359,6 +360,9 @@ struct hwspecops_t {
  * @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);
@@ -391,6 +395,9 @@ struct chipspecops_t {
        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 {
@@ -425,7 +432,7 @@ extern struct mem_addr *mem_head;
 
 
 #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);
 }
@@ -434,7 +441,7 @@ extern inline unsigned can_read_reg(const struct canchip_t *chip, unsigned reg_o
        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);
 }
@@ -445,7 +452,7 @@ extern inline unsigned canobj_read_reg(const struct canchip_t *chip, const struc
 }
 
 #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);
 }
@@ -454,7 +461,7 @@ extern inline unsigned can_read_reg(const struct canchip_t *chip, unsigned reg_o
        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);
 }
@@ -472,7 +479,7 @@ extern inline unsigned canobj_read_reg(const struct canchip_t *chip, const struc
 /* 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;
@@ -487,7 +494,7 @@ extern inline unsigned can_read_reg(const struct canchip_t *chip, unsigned reg_o
 }
 
 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;