X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/bfac169862856611eeb16af24c8943f005f88e12..a6d355f1cf48f39eecb2f1bdead51817d1fd5989:/lincan/src/virtual.c diff --git a/lincan/src/virtual.c b/lincan/src/virtual.c index 05a12f9..f1ae39e 100644 --- a/lincan/src/virtual.c +++ b/lincan/src/virtual.c @@ -3,7 +3,7 @@ * Written for new CAN driver version by Pavel Pisa - OCERA team member * email:pisa@cmp.felk.cvut.cz * This software is released under the GPL-License. - * Version lincan-0.2 9 Jul 2003 + * Version lincan-0.3 17 Jun 2004 */ #include "../include/can.h" @@ -24,12 +24,12 @@ long virtual_bus_latency(struct msgobj_t *obj) /* * * Virtual Chip Functionality * * */ -int virtual_enable_configuration(struct chip_t *chip) +int virtual_enable_configuration(struct canchip_t *chip) { return 0; } -int virtual_disable_configuration(struct chip_t *chip) +int virtual_disable_configuration(struct canchip_t *chip) { return 0; } @@ -41,7 +41,7 @@ int virtual_disable_configuration(struct chip_t *chip) * Return Value: negative value reports error. * File: src/virtual.c */ -int virtual_chip_config(struct chip_t *chip) +int virtual_chip_config(struct canchip_t *chip) { return 0; } @@ -55,7 +55,7 @@ int virtual_chip_config(struct chip_t *chip) * Return Value: negative value reports error. * File: src/virtual.c */ -int virtual_extended_mask(struct chip_t *chip, unsigned long code, unsigned long mask) +int virtual_extended_mask(struct canchip_t *chip, unsigned long code, unsigned long mask) { return 0; } @@ -72,7 +72,7 @@ int virtual_extended_mask(struct chip_t *chip, unsigned long code, unsigned lon * Return Value: negative value reports error. * File: src/virtual.c */ -int virtual_baud_rate(struct chip_t *chip, int rate, int clock, int sjw, +int virtual_baud_rate(struct canchip_t *chip, int rate, int clock, int sjw, int sampl_pt, int flags) { return 0; @@ -85,7 +85,7 @@ int virtual_baud_rate(struct chip_t *chip, int rate, int clock, int sjw, * * File: src/virtual.c */ -void virtual_read(struct chip_t *chip, struct msgobj_t *obj) { +void virtual_read(struct canchip_t *chip, struct msgobj_t *obj) { } @@ -98,7 +98,7 @@ void virtual_read(struct chip_t *chip, struct msgobj_t *obj) { * Positive value indicates immediate reception of message. * File: src/virtual.c */ -int virtual_pre_read_config(struct chip_t *chip, struct msgobj_t *obj) +int virtual_pre_read_config(struct canchip_t *chip, struct msgobj_t *obj) { return 0; } @@ -113,7 +113,7 @@ int virtual_pre_read_config(struct chip_t *chip, struct msgobj_t *obj) * Return Value: negative value reports error. * File: src/virtual.c */ -int virtual_pre_write_config(struct chip_t *chip, struct msgobj_t *obj, +int virtual_pre_write_config(struct canchip_t *chip, struct msgobj_t *obj, struct canmsg_t *msg) { return 0; @@ -130,7 +130,7 @@ int virtual_pre_write_config(struct chip_t *chip, struct msgobj_t *obj, * Return Value: negative value reports error. * File: src/virtual.c */ -int virtual_send_msg(struct chip_t *chip, struct msgobj_t *obj, +int virtual_send_msg(struct canchip_t *chip, struct msgobj_t *obj, struct canmsg_t *msg) { return 0; @@ -145,7 +145,7 @@ int virtual_send_msg(struct chip_t *chip, struct msgobj_t *obj, * Zero value indicates finishing of all issued transmission requests. * File: src/virtual.c */ -int virtual_check_tx_stat(struct chip_t *chip) +int virtual_check_tx_stat(struct canchip_t *chip) { return 0; } @@ -159,7 +159,7 @@ int virtual_check_tx_stat(struct chip_t *chip) * Return Value: negative value reports error. * File: src/virtual.c */ -int virtual_set_btregs(struct chip_t *chip, unsigned short btr0, +int virtual_set_btregs(struct canchip_t *chip, unsigned short btr0, unsigned short btr1) { return 0; @@ -172,7 +172,7 @@ int virtual_set_btregs(struct chip_t *chip, unsigned short btr0, * Return Value: negative value reports error. * File: src/virtual.c */ -int virtual_start_chip(struct chip_t *chip) +int virtual_start_chip(struct canchip_t *chip) { return 0; } @@ -184,11 +184,35 @@ int virtual_start_chip(struct chip_t *chip) * Return Value: negative value reports error. * File: src/virtual.c */ -int virtual_stop_chip(struct chip_t *chip) +int virtual_stop_chip(struct canchip_t *chip) { return 0; } +/** + * virtual_attach_to_chip: - attaches to the chip, setups registers and state + * @chip: pointer to chip state structure + * + * Return Value: negative value reports error. + * File: src/virtual.c + */ +int virtual_attach_to_chip(struct canchip_t *chip) +{ + return 0; +} + +/** + * virtual_release_chip: - called before chip structure removal if %CHIP_ATTACHED is set + * @chip: pointer to chip state structure + * + * Return Value: negative value reports error. + * File: src/virtual.c + */ +int virtual_release_chip(struct canchip_t *chip) +{ + virtual_stop_chip(chip); + return 0; +} /** * virtual_remote_request: - configures message object and asks for RTR message @@ -198,7 +222,7 @@ int virtual_stop_chip(struct chip_t *chip) * Return Value: negative value reports error. * File: src/virtual.c */ -int virtual_remote_request(struct chip_t *chip, struct msgobj_t *obj) +int virtual_remote_request(struct canchip_t *chip, struct msgobj_t *obj) { CANMSG("virtual_remote_request not implemented\n"); return -ENOSYS; @@ -213,7 +237,7 @@ int virtual_remote_request(struct chip_t *chip, struct msgobj_t *obj) * Return Value: negative value reports error. * File: src/virtual.c */ -int virtual_standard_mask(struct chip_t *chip, unsigned short code, +int virtual_standard_mask(struct canchip_t *chip, unsigned short code, unsigned short mask) { CANMSG("virtual_standard_mask not implemented\n"); @@ -227,7 +251,7 @@ int virtual_standard_mask(struct chip_t *chip, unsigned short code, * Return Value: negative value reports error. * File: src/virtual.c */ -int virtual_clear_objects(struct chip_t *chip) +int virtual_clear_objects(struct canchip_t *chip) { CANMSG("virtual_clear_objects not implemented\n"); return -ENOSYS; @@ -241,7 +265,7 @@ int virtual_clear_objects(struct chip_t *chip) * Return Value: negative value reports error. * File: src/virtual.c */ -int virtual_config_irqs(struct chip_t *chip, short irqs) +int virtual_config_irqs(struct canchip_t *chip, short irqs) { CANMSG("virtual_config_irqs not implemented\n"); return -ENOSYS; @@ -258,7 +282,7 @@ int virtual_config_irqs(struct chip_t *chip, short irqs) * virtual_irq_write_handler() for transmit events. * File: src/virtual.c */ -void virtual_irq_write_handler(struct chip_t *chip, struct msgobj_t *obj) +void virtual_irq_write_handler(struct canchip_t *chip, struct msgobj_t *obj) { } @@ -270,7 +294,7 @@ void virtual_irq_write_handler(struct chip_t *chip, struct msgobj_t *obj) * @irq: interrupt vector number, this value is system specific * @dev_id: driver private pointer registered at time of request_irq() call. * The CAN driver uses this pointer to store relationship of interrupt - * to chip state structure - @struct chip_t + * to chip state structure - @struct canchip_t * @regs: system dependent value pointing to registers stored in exception frame * * Interrupt handler is activated when state of CAN controller chip changes, @@ -280,9 +304,9 @@ void virtual_irq_write_handler(struct chip_t *chip, struct msgobj_t *obj) * message queues. * File: src/virtual.c */ -can_irqreturn_t virtual_irq_handler(int irq, void *dev_id, struct pt_regs *regs) +int virtual_irq_handler(int irq, struct canchip_t *chip) { - return CAN_IRQ_HANDLED; + return CANCHIP_IRQ_HANDLED; } @@ -320,6 +344,9 @@ void virtual_do_tx_timeout(unsigned long data) struct msgobj_t *obj=(struct msgobj_t *)data; if(obj->tx_slot) { + /* fill CAN message timestamp */ + can_filltimestamp(&obj->tx_slot->msg.timestamp); + /* Deliver message to edges */ canque_filter_msg2edges(obj->qends, &obj->tx_slot->msg); /* Free transmitted slot */ @@ -343,7 +370,7 @@ void virtual_do_tx_timeout(unsigned long data) * Return Value: negative value reports error. * File: src/virtual.c */ -int virtual_wakeup_tx(struct chip_t *chip, struct msgobj_t *obj) +int virtual_wakeup_tx(struct canchip_t *chip, struct msgobj_t *obj) { /* can_msgobj_set_fl(obj,TX_REQUEST); */ @@ -359,6 +386,9 @@ int virtual_wakeup_tx(struct chip_t *chip, struct msgobj_t *obj) /* Ensure delivery of all ready slots */ while((cmd=canque_test_outslot(obj->qends, &qedge, &slot)) >= 0){ if(cmd==0) { + /* fill CAN message timestamp */ + can_filltimestamp(&slot->msg.timestamp); + canque_filter_msg2edges(obj->qends, &slot->msg); DEBUGMSG("virtual: direct delivery\n"); } @@ -443,7 +473,7 @@ int virtual_init_hw_data(struct candevice_t *candev) */ int virtual_init_chip_data(struct candevice_t *candev, int chipnr) { - struct chip_t *chip = candev->chip[chipnr]; + struct canchip_t *chip = candev->chip[chipnr]; chip->chip_type = CHIP_TYPE; chip->chip_base_addr = 0; chip->clock = 10000000; @@ -467,10 +497,13 @@ int virtual_init_chip_data(struct candevice_t *candev, int chipnr) chip->chipspecops->remote_request=virtual_remote_request; chip->chipspecops->enable_configuration=virtual_enable_configuration; chip->chipspecops->disable_configuration=virtual_disable_configuration; + chip->chipspecops->attach_to_chip=virtual_attach_to_chip; + chip->chipspecops->release_chip=virtual_release_chip; chip->chipspecops->set_btregs=virtual_set_btregs; chip->chipspecops->start_chip=virtual_start_chip; chip->chipspecops->stop_chip=virtual_stop_chip; chip->chipspecops->irq_handler=NULL; + chip->chipspecops->irq_accept=NULL; return 0; } @@ -483,7 +516,7 @@ int virtual_init_chip_data(struct candevice_t *candev, int chipnr) * Return Value: The function always returns zero * File: src/virtual.c */ -int virtual_init_obj_data(struct chip_t *chip, int objnr) +int virtual_init_obj_data(struct canchip_t *chip, int objnr) { struct msgobj_t *obj=chip->msgobj[objnr]; obj->obj_base_addr=chip->chip_base_addr;