blob: e6af7b65cc950867107e7590cde826d7298f9f80 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
\ *****************************************************************************
\ * Copyright (c) 2004, 2008 IBM Corporation
\ * All rights reserved.
\ * This program and the accompanying materials
\ * are made available under the terms of the BSD License
\ * which accompanies this distribution, and is available at
\ * http://www.opensource.org/licenses/bsd-license.php
\ *
\ * Contributors:
\ * IBM Corporation - initial implementation
\ ****************************************************************************/
\ get the PUID from the node above
get-node CONSTANT my-phandle
s" my-puid" my-phandle parent $call-static CONSTANT my-puid
\ Save the bus number provided by this bridge
pci-bus-number 1+ CONSTANT my-bus
s" pci-config-bridge.fs" included
s" dma-function.fs" included
\ generate the rom-fs filename from the vendor and device ID "pci-bridge_VENDORID_DEVICEID.fs"
: filename ( -- str len )
s" pci-bridge_"
my-space pci-vendor@ 4 int2str $cat
s" _" $cat
my-space pci-device@ 4 int2str $cat
s" .fs" $cat
;
\ Set up the Bridge with either default or special settings
: setup ( -- )
\ is there special handling for this device, given vendor and device id?
filename romfs-lookup ?dup
IF
\ give it a special treatment
evaluate
ELSE
\ no special handling for this device, attempt autoconfiguration
my-space pci-class-name type 2a emit cr
my-space pci-bridge-generic-setup
my-space pci-reset-2nd
THEN
;
\ Disable Bus Master, Memory Space and I/O Space for
\ this device and so for the scanning for the devices behind
pci-device-disable
\ Enalbe #PERR and #SERR reporting
pci-error-enable
\ Print out device information
my-space 42 pci-out \ config-addr ascii('B')
\ and set up the bridge
setup
\ And enable Bus Master IO and MEM access again.
\ we need that on bridges so that the devices behind
\ can set their state on their own.
pci-master-enable
pci-mem-enable
pci-io-enable
|