source: rtems/c/src/lib/libbsp/sparc/shared/can/grcan_rasta.c @ e3481dcd

4.104.114.95
Last change on this file since e3481dcd was e3481dcd, checked in by Joel Sherrill <joel.sherrill@…>, on 11/30/07 at 16:48:13

2007-11-30 Daniel Hellstrom <daniel@…>

  • shared/can/grcan.c, shared/can/grcan_rasta.c, shared/include/ambapp.h: GRCAN CAN driver. Fixes Interrupt enabling/disabling in the driver, interrupt may not be restored correctly. Implements the baud rate calculation routine. Removed unnecessary printk. Fixed scanning to support GRCAN and GRHCAN hardware. Added GRCAN device number to ambapp.h.
  • Property mode set to 100644
File size: 2.4 KB
Line 
1
2#include <rasta.h>
3
4/* PCI frequency */
5#define SYS_FREQ_HZ 30000000
6
7/*#define USE_AT697_RAM              1      */
8
9/* memarea_to_hw(x)
10 *
11 * x: address in AT697 address space
12 *
13 * returns the address in the RASTA address space that can be used to access x with dma.
14 *
15*/
16#ifdef USE_AT697_RAM
17static inline unsigned int memarea_to_hw(unsigned int addr) {
18    return ((addr & 0x0fffffff) | RASTA_PCI_BASE);   
19}
20#else
21static inline unsigned int memarea_to_hw(unsigned int addr) {
22    return ((addr & 0x0fffffff) | RASTA_LOCAL_SRAM);       
23}
24#endif
25
26#define MEMAREA_TO_HW(x) memarea_to_hw(x)
27
28#define IRQ_CLEAR_PENDING(irqno)
29#define IRQ_UNMASK(irqno)
30#define IRQ_MASK(irqno)
31
32#define IRQ_GLOBAL_PREPARE(level) rtems_interrupt_level level
33#define IRQ_GLOBAL_DISABLE(level) rtems_interrupt_disable(level)
34#define IRQ_GLOBAL_ENABLE(level) rtems_interrupt_enable(level)
35
36#define GRCAN_REG_INT(handler,irqno,arg) \
37  if ( grcan_rasta_int_reg ) \
38    grcan_rasta_int_reg(handler,irqno,arg);
39
40void (*grcan_rasta_int_reg)(void *handler, int irq, void *arg) = 0;
41
42#define GRCAN_PREFIX(name) grcan_rasta##name
43
44/* We provide our own handler */
45#define GRCAN_DONT_DECLARE_IRQ_HANDLER
46
47#define GRCAN_REG_BYPASS_CACHE
48#define GRCAN_DMA_BYPASS_CACHE
49
50#define GRCAN_MAX_CORES 1
51
52/* Custom Statically allocated memory */
53#undef STATICALLY_ALLOCATED_TX_BUFFER
54#undef STATICALLY_ALLOCATED_RX_BUFFER
55
56#define STATIC_TX_BUF_SIZE 4096
57#define STATIC_RX_BUF_SIZE 4096
58#define TX_BUF_SIZE 4096
59#define RX_BUF_SIZE 4096
60
61#define STATIC_TX_BUF_ADDR(core) \
62        ((unsigned int *)\
63  (grcan_rasta_rambase+(core)*(STATIC_TX_BUF_SIZE+STATIC_RX_BUF_SIZE)))
64
65#define STATIC_RX_BUF_ADDR(core) \
66  ((unsigned int *) \
67        (grcan_rasta_rambase+(core)*(STATIC_TX_BUF_SIZE+STATIC_RX_BUF_SIZE)+STATIC_RX_BUF_SIZE))
68 
69 
70#define GRCAN_DEVNAME "/dev/grcan0"
71#define GRCAN_DEVNAME_NO(devstr,no) ((devstr)[10]='0'+(no))
72
73void grcan_rasta_interrupt_handler(int irq, void *pDev);
74
75unsigned int grcan_rasta_rambase;
76
77#include "grcan.c"
78
79
80int grcan_rasta_ram_register(amba_confarea_type *abus, int rambase)
81{
82  grcan_rasta_rambase = rambase;
83
84  return GRCAN_PREFIX(_register)(abus);
85}
86#if 0
87static void grcan_rasta_interrupt_handler(int v)
88{
89  /* We know there is always only one GRCAN core in a RASTA chip... */
90  grcan_interrupt(&grcans[0]);
91  /*
92        struct grcan_priv *pDev = arg;
93        grcan_interrupt(pDev);
94  */
95}
96#endif
97void GRCAN_PREFIX(_interrupt_handler)(int irq, void *pDev)
98{
99  grcan_interrupt(pDev);
100}
Note: See TracBrowser for help on using the repository browser.