Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
script3r
GitHub Repository: script3r/os161
Path: blob/master/kern/dev/lamebus/lser_att.c
2124 views
1
/*
2
* Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009
3
* The President and Fellows of Harvard College.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* 3. Neither the name of the University nor the names of its contributors
14
* may be used to endorse or promote products derived from this software
15
* without specific prior written permission.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND
18
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE
21
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27
* SUCH DAMAGE.
28
*/
29
30
#include <types.h>
31
#include <lib.h>
32
#include <lamebus/lamebus.h>
33
#include <lamebus/lser.h>
34
#include "autoconf.h"
35
36
/* Lowest revision we support */
37
#define LOW_VERSION 1
38
/* Highest revision we support */
39
#define HIGH_VERSION 1
40
41
/*
42
* wrappers to satisfy the type system
43
*/
44
static
45
void
46
do_lamebus_mask_interrupt(void *bus, uint32_t buspos)
47
{
48
struct lamebus_softc *lb = bus;
49
lamebus_mask_interrupt(lb, buspos);
50
}
51
52
static
53
void
54
do_lamebus_unmask_interrupt(void *bus, uint32_t buspos)
55
{
56
struct lamebus_softc *lb = bus;
57
lamebus_unmask_interrupt(lb, buspos);
58
}
59
60
/*
61
* attachment function
62
*/
63
struct lser_softc *
64
attach_lser_to_lamebus(int lserno, struct lamebus_softc *sc)
65
{
66
struct lser_softc *ls;
67
int slot = lamebus_probe(sc, LB_VENDOR_CS161, LBCS161_SERIAL,
68
LOW_VERSION, HIGH_VERSION);
69
if (slot < 0) {
70
return NULL;
71
}
72
73
ls = kmalloc(sizeof(struct lser_softc));
74
if (ls==NULL) {
75
return NULL;
76
}
77
78
(void)lserno; // unused
79
80
ls->ls_busdata = sc;
81
ls->ls_buspos = slot;
82
ls->ls_maskinterrupt = do_lamebus_mask_interrupt;
83
ls->ls_unmaskinterrupt = do_lamebus_unmask_interrupt;
84
85
lamebus_mark(sc, slot);
86
lamebus_attach_interrupt(sc, slot, ls, lser_irq);
87
88
return ls;
89
}
90
91