import of upstream 2.4.34.4 from kernel.org
[linux-2.4.git] / drivers / isdn / eicon / linsys.c
1 /*
2  * Copyright (C) Eicon Technology Corporation, 2000.
3  *
4  * Eicon File Revision :    1.10  
5  *
6  * This software may be used and distributed according to the terms
7  * of the GNU General Public License, incorporated herein by reference.
8  *
9  */
10
11 #include <linux/sched.h>
12 #undef N_DATA
13 #include <linux/tqueue.h>
14
15 #include <linux/smp.h>
16 struct pt_regs;
17 #include <linux/interrupt.h>
18 #include <linux/ioport.h>
19
20 #include "sys.h"
21 #include "divas.h"
22 #include "adapter.h"
23 #include "divalog.h"
24
25 #include "uxio.h"
26
27 int Divas4BRIInitPCI(card_t *card, dia_card_t *cfg)
28 {
29         /* Use UxPciConfigWrite routines to initialise PCI config space */
30
31 /*      wPCIcommand = 0x03;
32         cm_write_devconfig16(CMKey, PCI_COMMAND, &wPCIcommand);
33
34         wPCIcommand = 0x280;
35         cm_write_devconfig16(CMKey, PCI_STATUS, &wPCIcommand);
36
37         bPCIcommand = 0x30;
38         cm_write_devconfig16(CMKey, PCI_STATUS, &wPCIcommand);
39 */
40         return 0; 
41 }
42
43 int DivasPRIInitPCI(card_t *card, dia_card_t *cfg)
44 {
45         /* Use UxPciConfigWrite routines to initialise PCI config space */
46
47 /*              wPCIcommand = 0x03;
48         cm_write_devconfig16(CMKey, PCI_COMMAND, &wPCIcommand);
49         
50         wPCIcommand = 0x280;
51         cm_write_devconfig16(CMKey, PCI_STATUS, &wPCIcommand);
52         
53         bPCIcommand = 0x30;
54         cm_write_devconfig8(CMKey, PCI_LATENCY, &bPCIcommand);*/
55
56         return 0;  
57 }
58
59 int DivasBRIInitPCI(card_t *card, dia_card_t *cfg)
60 {
61         /* Need to set these platform dependent values after patching */
62
63         card->hw->reset_base = card->cfg.reset_base;
64         card->hw->io_base = card->cfg.io_base;
65
66         request_region(card->hw->reset_base,0x80,"Divas");
67         request_region(card->hw->io_base,0x20,"Divas");
68
69
70         /* Same as for PRI */
71         return DivasPRIInitPCI(card, cfg);
72 }
73
74 /* ######################### Stubs of routines that are not done yet ################## */
75 /*void DivasLogIdi(card_t *card, ENTITY *e, int request)
76 {
77 }
78 */
79
80 int     DivasDpcSchedule(void)
81 {
82         static  struct tq_struct DivasTask;
83
84         DivasTask.routine = DivasDoDpc;
85         DivasTask.data = (void *) 0;
86
87         queue_task(&DivasTask, &tq_immediate);
88         mark_bh(IMMEDIATE_BH);
89
90         return 0;
91 }
92
93 int     DivasScheduleRequestDpc(void)
94 {
95         static  struct tq_struct DivasTask;
96
97         DivasTask.routine = DivasDoRequestDpc;
98         DivasTask.data = (void *) 0;
99
100         queue_task(&DivasTask, &tq_immediate);
101         mark_bh(IMMEDIATE_BH);
102
103         return 0;
104 }
105
106 void    DivasLogAdd(void *buffer, int length)
107 {
108     static
109     boolean_t   overflow = FALSE;
110     static
111     boolean_t   busy = FALSE;
112
113     /* make sure we're not interrupting ourselves */
114
115     if (busy)
116     {
117         printk(KERN_DEBUG "Divas: Logging interrupting self !\n");
118         return;
119     }
120     busy = TRUE;
121
122     /* ignore call if daemon isn't running and we've reached limit */
123
124     if (DivasLogFifoFull())
125     {
126         if (!overflow)
127         {
128             printk(KERN_DEBUG "Divas: Trace buffer full\n");
129             overflow = TRUE;
130         }
131         busy = FALSE;
132         return;
133     }
134
135         DivasLogFifoWrite(buffer, length);
136
137     busy = FALSE;
138     return;
139 }
140
141 /* #################################################################################### */