* Version lincan-0.2 9 Jul 2003
*/
-#include <asm/io.h>
-#include <linux/fs.h>
-#include <linux/version.h>
-#include <linux/wait.h>
-#include <linux/interrupt.h>
#include "./can.h"
#include "./constants.h"
+#include "./can_sysdep.h"
#include "./can_queue.h"
#ifdef CAN_DEBUG
#define CANMSG(fmt,args...) printk(KERN_ERR "can.o: " fmt,##args)
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,7))
-
-#define MINOR_NR \
- (MINOR(file->f_dentry->d_inode->i_rdev))
-
-#else /* Linux kernel > 2.5.7 */
-
-#define MINOR_NR \
- (minor(file->f_dentry->d_inode->i_rdev))
-#endif /* Linux kernel > 2.5.7 */
-
-#if ((LINUX_VERSION_CODE < KERNEL_VERSION(2,5,68)) && !defined(IRQ_RETVAL))
- typedef void irqreturn_t;
- #define IRQ_NONE
- #define IRQ_HANDLED
- #define IRQ_RETVAL(x)
-#endif /* <=2.5.67 */
/**
* struct canhardware_t - structure representing pointers to all CAN boards
* @flags: chip flags: %CHIP_CONFIGURED .. chip is configured,
* %CHIP_SEGMENTED .. access to the chip is segmented (mainly for i82527 chips)
* @clock: chip base clock frequency in Hz
+ * @baudrate: selected chip baudrate in Hz
* @write_register: write chip register function copy -
* @read_register: read chip register function copy
* @sja_cdr_reg: SJA specific register -
int chip_irq;
unsigned long chip_base_addr;
unsigned int flags;
- int clock; /* Chip clock in Hz */
+ long clock; /* Chip clock in Hz */
+ long baudrate;
void (*write_register)(unsigned char data,unsigned long address);
unsigned (*read_register)(unsigned long address);
struct candevice_t *hostdevice;
- int max_objects; /* 1 for sja1000, 15 for */
+ int max_objects; /* 1 for sja1000, 15 for i82527 */
};
/**
* @tx_slot: slot holding transmitted message, slot is taken from
* canque_test_outslot() call and is freed by canque_free_outslot()
* or rescheduled canque_again_outslot()
+ * @tx_retry_cnt: transmission attempt counter
+ * @tx_timeout: can be used by chip driver to check for the transmission timeout
* @rx_msg: temporary storage to hold received messages before
* calling to canque_filter_msg2edges()
* @hostchip: pointer to the &chip_t structure this object belongs to
int ret;
struct canque_ends_t *qends;
+
struct canque_edge_t *tx_qedge;
struct canque_slot_t *tx_slot;
+ int tx_retry_cnt;
+ struct timer_list tx_timeout;
+
struct canmsg_t rx_msg;
struct chip_t *hostchip;
struct mem_addr {
void *address;
struct mem_addr *next;
+ size_t size;
};
/* Structure for the RTR queue */
extern int major;
extern int minor[MAX_TOT_CHIPS];
extern int extended;
-extern int baudrate;
+extern int baudrate[MAX_TOT_CHIPS];
extern char *hw[MAX_HW_CARDS];
extern int irq[MAX_IRQ];
extern unsigned long io[MAX_HW_CARDS];
+extern int processlocal;
extern struct canhardware_t *hardware_p;
extern struct chip_t *chips_p[MAX_TOT_CHIPS];