rt/tmp/_msr_io.c
branchkernel2.6
changeset 32 7d9809fbf7b9
parent 31 2b3e06f48ffe
child 33 f4171b8aadf8
--- a/rt/tmp/_msr_io.c	Fri Dec 16 09:23:56 2005 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,420 +0,0 @@
-/**************************************************************************************************
-*
-*                          msr_io.c
-*
-*           Verwaltung der IO-Karten
-*           
-*           
-*           Autor: Wilhelm Hagemeister
-*
-*           (C) Copyright IgH 2002
-*           Ingenieurgemeinschaft IgH
-*           Heinz-Bäcker Str. 34
-*           D-45356 Essen
-*           Tel.: +49 201/61 99 31
-*           Fax.: +49 201/61 98 36
-*           E-mail: sp@igh-essen.com
-*
-*
-*           $RCSfile: msr_io.c,v $
-*           $Revision: 1.9 $
-*           $Author: ha $
-*           $Date: 2005/06/24 20:06:56 $
-*           $State: Exp $
-*
-*
-*           $Log: msr_io.c,v $
-*           Revision 1.9  2005/06/24 20:06:56  ha
-*           *** empty log message ***
-*
-*           Revision 1.8  2005/06/24 17:39:05  ha
-*           *** empty log message ***
-*
-*
-*
-*
-*
-*
-**************************************************************************************************/
-
-
-/*--includes-------------------------------------------------------------------------------------*/
-
-#ifndef __KERNEL__
-#  define __KERNEL__
-#endif
-#ifndef MODULE
-#  define MODULE
-#endif
-
-#include <linux/delay.h> 	/* mdelay() */
-#include <linux/spinlock.h> 
-#include <linux/param.h>	/* HZ */
-#include <linux/sched.h> 	/* jiffies */
-#include <linux/fs.h>     /* everything... */
-#include <rtai_fifos.h>
-
-#include "msr_io.h"
-
-#include <msr_messages.h>
-
-
-#include "aim_globals.h"
-
-spinlock_t data_lock = SPIN_LOCK_UNLOCKED;
-
-#include "cif-rtai-io.h"
-
-/*--defines--------------------------------------------------------------------------------------*/
-
-
-/*--external functions---------------------------------------------------------------------------*/
-
-
-/*--external data--------------------------------------------------------------------------------*/
-
-
-/*--public data----------------------------------------------------------------------------------*/
-
-#define PB_CARDS 4
-struct {
-	unsigned int fd;
-	unsigned int timestamp;
-	unsigned int fault;
-	unsigned int active;
-	void *in_buf;
-	void *out_buf;
-	size_t in_buf_len;
-	size_t out_buf_len;
-
-	unsigned int reset_timeout;
-} card[PB_CARDS];
-
-
-/*
-***************************************************************************************************
-*
-* Function: msr_io_init
-*
-* Beschreibung: Initialisieren der I/O-Karten
-*
-* Parameter:
-*
-* Rückgabe: 
-*               
-* Status: exp
-*
-***************************************************************************************************
-*/
-void x_PB_io(unsigned long card_no) {
-	int rv = 0;
-	unsigned int flags;
-
-	spin_lock_irqsave(&data_lock, flags);
-
-	switch (card_no) {
-	case 0:
-		rv = cif_exchange_io(card[0].fd,card[0].in_buf,card[0].out_buf);
-		if (!rv)
-			card[0].timestamp = jiffies;
-		break;
-	case 1:
-		rv = cif_exchange_io(card[1].fd,card[1].in_buf,card[1].out_buf);
-//		rv = cif_read_io(card[1].fd,card[1].in_buf);
-//		IMO.to_dSPACE.P101.HX_Stat = 51;
-//		IMO.from_dSPACE.P101.HX_Control |= IMO.to_dSPACE.P101.HX_Stat<<4;
-//		rv += cif_write_io(card[1].fd,card[1].out_buf);
-		if (!rv)
-			card[1].timestamp = jiffies;
-		break;
-	/*
-	case 2:
-		rv = cif_exchange_io(card[2].fd,&cif_in.P201,&cif_out.P201);
-		break;
-	*/
-	case 3:
-		rv = cif_exchange_io(card[3].fd,card[3].in_buf,card[3].out_buf);
-		if (!rv)
-			card[3].timestamp = jiffies;
-		break;
-	}
-
-	if (rv) {
-			msr_print_error("Error during exchange_io %i %i", 
-					card_no, rv );
-	}
-
-	spin_unlock_irqrestore(&data_lock, flags);
-
-}
-
-int msr_io_init()
-{   
-    int rv;
-
-    memset(card, 0, sizeof(card));
-
-#define FIFO_BUF 10000
-
-    if ((rv = rtf_create(0, FIFO_BUF)) < 0) {
-	    msr_print_error("Could not open FIFO %i", rv);
-	    return -1;
-    }
-
-#ifndef _SIMULATION
-/*
-    card[0].in_buf_len = sizeof(IMO.from_dSPACE);
-    card[0].out_buf_len = sizeof(IMO.to_dSPACE);
-    card[0].in_buf = &IMO.from_dSPACE;
-    card[0].out_buf = &IMO.to_dSPACE;
-    card[0].active = 1;
-    if (!(card[0].fd = cif_open_card(0, card[0].in_buf_len,
-				    card[0].out_buf_len, x_PB_io, 0))) {
-	msr_print_error("Cannot open CIF card PB01");
-	return -1;
-    }
- 
-
-    card[1].in_buf_len = sizeof(IMO.to_dSPACE.P101);
-    card[1].out_buf_len = sizeof(IMO.from_dSPACE.P101);
-    card[1].in_buf = &IMO.to_dSPACE.P101;
-    card[1].out_buf = &IMO.from_dSPACE.P101;
-    card[1].active = 1;
-    if (!(card[1].fd = cif_open_card(1, card[1].in_buf_len, 
-				    card[1].out_buf_len, x_PB_io, 1))) {
-	msr_print_error("Cannot open CIF card P101");
-	return -1;
-    }
- 
-    card[2].in_buf_len = sizeof(IMO.to_dSPACE.P201);
-    card[2].out_buf_len = sizeof(IMO.from_dSPACE.P201);
-    card[2].in_buf = &IMO.to_dSPACE.P201;
-    card[2].out_buf = &IMO.from_dSPACE.P201;
-    if (!(card[2].fd = cif_open_card(2, card[2].in_buf_len, 
-				    card[2].out_buf_len, x_PB_io, 2))) {
-	msr_print_error("Cannot open CIF card P201");
-	return -1;
-    }
- 
-*/
-    card[3].in_buf_len = sizeof(dSPACE.in);
-    card[3].out_buf_len = sizeof(dSPACE.out);
-    card[3].in_buf = &dSPACE.in;
-    card[3].out_buf = &dSPACE.out;
-    card[3].active = 1;
-    if (!(card[3].fd = cif_open_card(0,  card[3].in_buf_len, 
-				    card[3].out_buf_len, x_PB_io,3))) {
-	msr_print_error("Cannot open CIF card P301");
-	return -1;
-    }
- 
-    //msr_reg_chk_failure(&int_cif_io_fail,TINT,T_CHK_HIGH,0,T_CRIT,"CIF Card was not ready to exchange data");
-
-
-#endif
-
-    return 0;
-}
-
-/*
-***************************************************************************************************
-*
-* Function: msr_io_register
-*
-* Beschreibung: Rohdaten als Kanaele registrieren
-*
-* Parameter:
-*
-* Rückgabe: 
-*               
-* Status: exp
-*
-***************************************************************************************************
-*/
-
-int msr_io_register()
-{
-
-#ifndef _SIMULATION
-
-#endif
-
-    return 0;
-}
-
-
-/*
-***************************************************************************************************
-*
-* Function: msr_io_write
-*
-* Beschreibung: Schreiben der Werte
-*
-* Parameter:
-*
-* Rückgabe: 
-*               
-* Status: exp
-*
-***************************************************************************************************
-*/
-int msr_io_write()
-{
-    static int return_value = 0;
-    int rv;
-    int i = 0;
-    unsigned int flags;
-    unsigned int com_check_timestamp = 0;
-    static int COM_Up = 1;
-
-    if (jiffies - com_check_timestamp > HZ/20) {
-
-	    if ( rtf_put_if(0,&IMO,sizeof(IMO)) != sizeof(IMO)) {
-		    //msr_print_error("Could not output data");
-	    }
-
-	    com_check_timestamp = jiffies;
-
-	    spin_lock_irqsave(&data_lock, flags);
-	    for ( i=0; i < PB_CARDS; i++) {
-		    // Ignore inactive and cards that already have a fault
-		    if (!card[i].active || card[i].fault)
-			    continue;
-
-		    // For active cards, check timestamp value. Mark card
-		    // as faulty if there was no data exchange in the last
-		    // 50ms
-		    if (jiffies - card[i].timestamp > HZ/20) {
-			    COM_Up = 0;
-			    card[i].fault = 1;
-			    card[i].reset_timeout = jiffies;
-			    msr_print_error("Card %i timed out", i);
-		    }
-
-	    }
-    
-	    spin_unlock_irqrestore(&data_lock, flags);
-    
-	    for ( i = 0; i < PB_CARDS; i++ ) {
-		    if (!card[i].active || (card[i].active && !card[i].fault))
-			    continue;
-
-		    switch (card[i].fault) {
-		    case 1:
-			    rv = cif_write_io(card[i].fd,card[i].out_buf);
-
-			    if (!rv) {
-				    msr_print_error("Card %i online", i);
-				    card[i].fault = 0;
-				    card[i].timestamp = jiffies;
-				    break;
-			    }
-
-			    msr_print_error("rv of cif_write_io(%i) = %i", 
-					    i, rv);
-
-			    card[i].fault = 2;
-			    cif_set_host_state(card[i].fd,0);
-			    card[i].reset_timeout = jiffies;
-
-		    case 2:
-			    if (cif_card_ready(card[i].fd)) {
-				    cif_set_host_state(card[i].fd,1);
-				    card[i].fault = 0;
-				    break;
-			    }
-			    if (jiffies < card[i].reset_timeout)
-				    break;
-
-			    rv = cif_reset_card(card[i].fd,10,1);
-			    msr_print_error("rv of cif_reset_card(%i) = %i", 
-					    i, rv);
-
-			    // Reset again in 10 seconds
-			    card[i].reset_timeout += 10*HZ;
-		    }
-	    }
-    }
-
-    if (COM_Up)
-	    IMO.to_dSPACE.Status = IMO.from_dSPACE.WatchDog;
-
-//    if (return_value)
-//	int_cif_io_fail = 1;
-
-    return return_value;
-}
-
-/*
-***************************************************************************************************
-*
-* Function: msr_io_read
-*
-* Beschreibung: Lesen der Werte
-*
-* Parameter:
-*
-* Rückgabe: 
-*               
-* Status: exp
-*
-***************************************************************************************************
-*/
-int msr_io_read()
-{
-    int return_value = 0;
-
-#ifndef _SIMULATION
-
-    int_cif_io_fail = 0;
-    /*
-    return_value = cif_exchange_io(fd_PB01,
-		    &cif_out,&cif_in,
-		    sizeof(cif_out),sizeof(cif_in)
-		    );
-		    */
-/*     if (return_value) */
-/* 	int_cif_io_fail = 1; */
-//    printk("%i\n", return_value);
-
-#endif
-    return return_value;
-}
-
-
-/*
-***************************************************************************************************
-*
-* Function: msr_io_cleanup
-*
-* Beschreibung: Aufräumen
-*
-* Parameter:
-*
-* Rückgabe: 
-*               
-* Status: exp
-*
-***************************************************************************************************
-*/
-void msr_io_cleanup()
-{
-/*
-    cif_set_host_state(card[0].fd,0);
-    cif_close_card(card[0].fd);
-
-    cif_set_host_state(card[1].fd,0);
-    cif_close_card(card[1].fd);
-
-    cif_set_host_state(card[2].fd,0);
-    cif_close_card(card[2].fd);
-
-
-*/
-    cif_set_host_state(card[3].fd,0);
-    cif_close_card(card[3].fd);
-
-    rtf_destroy(0);
-}
-
-