globals.h revision 1.6.2.2 1 1.6.2.2 rmind /* $NetBSD: globals.h,v 1.6.2.2 2011/03/05 20:51:47 rmind Exp $ */
2 1.6.2.2 rmind
3 1.6.2.2 rmind #ifdef DEBUG
4 1.6.2.2 rmind #define DPRINTF(x) printf x
5 1.6.2.2 rmind #else
6 1.6.2.2 rmind #define DPRINTF(x)
7 1.6.2.2 rmind #endif
8 1.6.2.2 rmind
9 1.6.2.2 rmind /* clock feed */
10 1.6.2.2 rmind #ifndef EXT_CLK_FREQ
11 1.6.2.2 rmind #define EXT_CLK_FREQ 33333333 /* external clock (PCI clock) */
12 1.6.2.2 rmind #endif
13 1.6.2.2 rmind
14 1.6.2.2 rmind /* brd type */
15 1.6.2.2 rmind extern int brdtype;
16 1.6.2.2 rmind #define BRD_SANDPOINTX2 2
17 1.6.2.2 rmind #define BRD_SANDPOINTX3 3
18 1.6.2.2 rmind #define BRD_ENCOREPP1 10
19 1.6.2.2 rmind #define BRD_KUROBOX 100
20 1.6.2.2 rmind #define BRD_QNAPTS101 101
21 1.6.2.2 rmind #define BRD_SYNOLOGY 102
22 1.6.2.2 rmind #define BRD_STORCENTER 103
23 1.6.2.2 rmind #define BRD_DLINKDSM 104
24 1.6.2.2 rmind #define BRD_NH230NAS 105
25 1.6.2.2 rmind #define BRD_UNKNOWN -1
26 1.6.2.2 rmind
27 1.6.2.2 rmind struct brdprop {
28 1.6.2.2 rmind const char *family;
29 1.6.2.2 rmind const char *verbose;
30 1.6.2.2 rmind int brdtype;
31 1.6.2.2 rmind uint32_t extclk;
32 1.6.2.2 rmind char *consname;
33 1.6.2.2 rmind int consport;
34 1.6.2.2 rmind int consspeed;
35 1.6.2.2 rmind void (*setup)(struct brdprop *);
36 1.6.2.2 rmind void (*brdfix)(struct brdprop *);
37 1.6.2.2 rmind void (*pcifix)(struct brdprop *);
38 1.6.2.2 rmind void (*reset)(void);
39 1.6.2.2 rmind };
40 1.6.2.2 rmind
41 1.6.2.2 rmind extern uint32_t cpuclock, busclock;
42 1.6.2.2 rmind
43 1.6.2.2 rmind /* board specific support code */
44 1.6.2.2 rmind struct brdprop *brd_lookup(int);
45 1.6.2.2 rmind unsigned mpc107memsize(void);
46 1.6.2.2 rmind void read_mac_from_flash(uint8_t *);
47 1.6.2.2 rmind
48 1.6.2.2 rmind /* PPC processor ctl */
49 1.6.2.2 rmind void __syncicache(void *, size_t);
50 1.6.2.2 rmind
51 1.6.2.2 rmind /* byte swap access */
52 1.6.2.2 rmind void out16rb(unsigned, unsigned);
53 1.6.2.2 rmind void out32rb(unsigned, unsigned);
54 1.6.2.2 rmind unsigned in16rb(unsigned);
55 1.6.2.2 rmind unsigned in32rb(unsigned);
56 1.6.2.2 rmind void iohtole16(unsigned, unsigned);
57 1.6.2.2 rmind void iohtole32(unsigned, unsigned);
58 1.6.2.2 rmind unsigned iole32toh(unsigned);
59 1.6.2.2 rmind unsigned iole16toh(unsigned);
60 1.6.2.2 rmind
61 1.6.2.2 rmind /* far call would never return */
62 1.6.2.2 rmind void run(void *, void *, void *, void *, void *);
63 1.6.2.2 rmind
64 1.6.2.2 rmind /* micro second precision delay */
65 1.6.2.2 rmind void delay(unsigned);
66 1.6.2.2 rmind
67 1.6.2.2 rmind /* PCI stuff */
68 1.6.2.2 rmind struct pcidev {
69 1.6.2.2 rmind unsigned bdf; /* bus.dev.func */
70 1.6.2.2 rmind unsigned pvd; /* device ID */
71 1.6.2.2 rmind void *drv; /* driver */
72 1.6.2.2 rmind };
73 1.6.2.2 rmind void pcisetup(void);
74 1.6.2.2 rmind void pcifixup(void);
75 1.6.2.2 rmind unsigned pcimaketag(int, int, int);
76 1.6.2.2 rmind void pcidecomposetag(unsigned, int *, int *, int *);
77 1.6.2.2 rmind int pcifinddev(unsigned, unsigned, unsigned *);
78 1.6.2.2 rmind int pcilookup(unsigned, struct pcidev *, int);
79 1.6.2.2 rmind unsigned pcicfgread(unsigned, int);
80 1.6.2.2 rmind void pcicfgwrite(unsigned, int, unsigned);
81 1.6.2.2 rmind
82 1.6.2.2 rmind #define PCI_ID_REG 0x00
83 1.6.2.2 rmind #define PCI_COMMAND_STATUS_REG 0x04
84 1.6.2.2 rmind #define PCI_VENDOR(id) ((id) & 0xffff)
85 1.6.2.2 rmind #define PCI_PRODUCT(id) (((id) >> 16) & 0xffff)
86 1.6.2.2 rmind #define PCI_VENDOR_INVALID 0xffff
87 1.6.2.2 rmind #define PCI_DEVICE(v,p) ((v) | ((p) << 16))
88 1.6.2.2 rmind #define PCI_CLASS_REG 0x08
89 1.6.2.2 rmind #define PCI_CLASS_PPB 0x0604
90 1.6.2.2 rmind #define PCI_CLASS_ETH 0x0200
91 1.6.2.2 rmind #define PCI_CLASS_IDE 0x0101
92 1.6.2.2 rmind #define PCI_CLASS_RAID 0x0104
93 1.6.2.2 rmind #define PCI_CLASS_SATA 0x0106
94 1.6.2.2 rmind #define PCI_CLASS_MISCSTORAGE 0x0180
95 1.6.2.2 rmind #define PCI_CLASS_USB 0x0c03
96 1.6.2.2 rmind #define PCI_BHLC_REG 0x0c
97 1.6.2.2 rmind #define PCI_HDRTYPE_TYPE(r) (((r) >> 16) & 0x7f)
98 1.6.2.2 rmind #define PCI_HDRTYPE_MULTIFN(r) ((r) & (0x80 << 16))
99 1.6.2.2 rmind
100 1.6.2.2 rmind /*
101 1.6.2.2 rmind * "Map B" layout
102 1.6.2.2 rmind *
103 1.6.2.2 rmind * practice direct mode configuration scheme with CONFIG_ADDR
104 1.6.2.2 rmind * (0xfec0'0000) and CONFIG_DATA (0xfee0'0000).
105 1.6.2.2 rmind */
106 1.6.2.2 rmind #define PCI_MEMBASE 0x80000000 /* PCI memory space */
107 1.6.2.2 rmind #define PCI_MEMLIMIT 0xfbffffff /* EUMB is next to this */
108 1.6.2.2 rmind #define PCI_IOBASE 0x00001000 /* reserves room for southbridge */
109 1.6.2.2 rmind #define PCI_IOLIMIT 0x000fffff
110 1.6.2.2 rmind #define PCI_XIOBASE 0xfe000000 /* ISA/PCI io space */
111 1.6.2.2 rmind #define CONFIG_ADDR 0xfec00000
112 1.6.2.2 rmind #define CONFIG_DATA 0xfee00000
113 1.6.2.2 rmind
114 1.6.2.2 rmind /* cache ops */
115 1.6.2.2 rmind void _wb(uint32_t, uint32_t);
116 1.6.2.2 rmind void _wbinv(uint32_t, uint32_t);
117 1.6.2.2 rmind void _inv(uint32_t, uint32_t);
118 1.6.2.2 rmind
119 1.6.2.2 rmind /* heap */
120 1.6.2.2 rmind void *allocaligned(size_t, size_t);
121 1.6.2.2 rmind
122 1.6.2.2 rmind /* NIF support */
123 1.6.2.2 rmind int net_open(struct open_file *, ...);
124 1.6.2.2 rmind int net_close(struct open_file *);
125 1.6.2.2 rmind int net_strategy(void *, int, daddr_t, size_t, void *, size_t *);
126 1.6.2.2 rmind
127 1.6.2.2 rmind int netif_init(void *);
128 1.6.2.2 rmind int netif_open(void *);
129 1.6.2.2 rmind int netif_close(int);
130 1.6.2.2 rmind
131 1.6.2.2 rmind #define NIF_DECL(xxx) \
132 1.6.2.2 rmind int xxx ## _match(unsigned, void *); \
133 1.6.2.2 rmind void * xxx ## _init(unsigned, void *); \
134 1.6.2.2 rmind int xxx ## _send(void *, char *, unsigned); \
135 1.6.2.2 rmind int xxx ## _recv(void *, char *, unsigned, unsigned)
136 1.6.2.2 rmind
137 1.6.2.2 rmind NIF_DECL(fxp);
138 1.6.2.2 rmind NIF_DECL(tlp);
139 1.6.2.2 rmind NIF_DECL(rge);
140 1.6.2.2 rmind NIF_DECL(skg);
141 1.6.2.2 rmind
142 1.6.2.2 rmind /* DSK support */
143 1.6.2.2 rmind int dskdv_init(void *);
144 1.6.2.2 rmind
145 1.6.2.2 rmind int dsk_open(struct open_file *, ...);
146 1.6.2.2 rmind int dsk_close(struct open_file *);
147 1.6.2.2 rmind int dsk_strategy(void *, int, daddr_t, size_t, void *, size_t *);
148 1.6.2.2 rmind struct fs_ops *dsk_fsops(struct open_file *);
149 1.6.2.2 rmind
150 1.6.2.2 rmind /* status */
151 1.6.2.2 rmind #define ATA_STS_BUSY 0x80
152 1.6.2.2 rmind #define ATA_STS_DRDY 0x40
153 1.6.2.2 rmind #define ATA_STS_ERR 0x01
154 1.6.2.2 rmind /* command */
155 1.6.2.2 rmind #define ATA_CMD_IDENT 0xec
156 1.6.2.2 rmind #define ATA_CMD_READ 0x20
157 1.6.2.2 rmind #define ATA_CMD_READ_EXT 0x24
158 1.6.2.2 rmind #define ATA_CMD_SETF 0xef
159 1.6.2.2 rmind /* device */
160 1.6.2.2 rmind #define ATA_DEV_LBA 0xe0
161 1.6.2.2 rmind #define ATA_DEV_OBS 0x90
162 1.6.2.2 rmind /* control */
163 1.6.2.2 rmind #define ATA_DREQ 0x08
164 1.6.2.2 rmind #define ATA_SRST 0x04
165 1.6.2.2 rmind
166 1.6.2.2 rmind #define ATA_XFER 0x03
167 1.6.2.2 rmind #define XFER_PIO4 0x0c
168 1.6.2.2 rmind #define XFER_PIO0 0x08
169 1.6.2.2 rmind
170 1.6.2.2 rmind struct dvata_chan {
171 1.6.2.2 rmind uint32_t cmd, ctl, alt, dma;
172 1.6.2.2 rmind };
173 1.6.2.2 rmind #define _DAT 0 /* RW */
174 1.6.2.2 rmind #define _ERR 1 /* R */
175 1.6.2.2 rmind #define _FEA 1 /* W */
176 1.6.2.2 rmind #define _NSECT 2 /* RW */
177 1.6.2.2 rmind #define _LBAL 3 /* RW */
178 1.6.2.2 rmind #define _LBAM 4 /* RW */
179 1.6.2.2 rmind #define _LBAH 5 /* RW */
180 1.6.2.2 rmind #define _DEV 6 /* W */
181 1.6.2.2 rmind #define _STS 7 /* R */
182 1.6.2.2 rmind #define _CMD 7 /* W */
183 1.6.2.2 rmind
184 1.6.2.2 rmind struct dkdev_ata {
185 1.6.2.2 rmind unsigned tag;
186 1.6.2.2 rmind uint32_t bar[6];
187 1.6.2.2 rmind struct dvata_chan chan[4];
188 1.6.2.2 rmind int presense[4];
189 1.6.2.2 rmind char *iobuf;
190 1.6.2.2 rmind };
191 1.6.2.2 rmind
192 1.6.2.2 rmind struct disk {
193 1.6.2.2 rmind char xname[8];
194 1.6.2.2 rmind void *dvops;
195 1.6.2.2 rmind unsigned unittag;
196 1.6.2.2 rmind uint16_t ident[128];
197 1.6.2.2 rmind uint64_t nsect;
198 1.6.2.2 rmind uint64_t first;
199 1.6.2.2 rmind void *dlabel;
200 1.6.2.2 rmind int part;
201 1.6.2.2 rmind void *fsops;
202 1.6.2.2 rmind int (*lba_read)(struct disk *, int64_t, int, void *);
203 1.6.2.2 rmind };
204 1.6.2.2 rmind
205 1.6.2.2 rmind int spinwait_unbusy(struct dkdev_ata *, int, int, const char **);
206 1.6.2.2 rmind int perform_atareset(struct dkdev_ata *, int);
207 1.6.2.2 rmind int satapresense(struct dkdev_ata *, int);
208