Commit | Line | Data |
---|---|---|
69e9ae1b | 1 | /* vbaparam.h 1.4 87/06/30 */ |
d08ce1d7 SL |
2 | |
3 | /* | |
4 | * Parameters related to the VERSAbus i/o configuration. | |
5 | */ | |
6 | ||
7 | /* | |
8 | * VERSAbus i/o devices use either memory mapped interfaces | |
9 | * or mapped i/o register banks, or some of both. Page tables | |
10 | * are allocated at boot time by each device driver, as needed. | |
11 | * VMEMmap is used to map a fixed size portion of the VERSAbus | |
12 | * i/o space, while VMEMmap1 maps dynamically defined portions | |
13 | * for devices which utilize shared i/o memory. VBmap is used | |
14 | * for mapping kernel intermediate buffers for DMA devices which | |
15 | * are incapable of utilizing user virtual addresses or which | |
16 | * require page aligned i/o buffers. The size of the VMEMmap1 | |
17 | * VBmap tables must be large enough for the needs of all devices | |
18 | * in the system. | |
19 | */ | |
20 | extern struct pte VMEMmap[], VMEMmap1[]; | |
21 | extern caddr_t vmem1, vmemend; | |
22 | extern struct pte VBmap[]; | |
23 | extern caddr_t vbbase, vbend; | |
24 | ||
586cab6f SL |
25 | /* |
26 | * The following macros relate to the segmentation of the VERSAbus | |
27 | * i/o space. | |
28 | * | |
29 | * The VERSAbus adapter segments the i/o space (as seen by the cpu) | |
30 | * into three regions. Cpu accesses to the upper 64Kb of the i/o space | |
31 | * generate VERSAbus cycles with a 16-bit address and a non-privileged | |
32 | * short i/o space address modifier. Accesses to the next 1Mb - 64Kb | |
33 | * generate 24-bit addresses and a non-privileged standard address | |
34 | * modifier. Accesses to the remainder of the 1Gb i/o space generate | |
35 | * 32-bit addresses with a non-privileged extended address modifier. | |
36 | * Beware that 32-bit addresses generated from this region always have | |
37 | * zero in the upper 2 bits; e.g. a reference to physical address fe000000 | |
38 | * results in a VERSAbus address of 3e000000. | |
39 | */ | |
9d61b7ff SL |
40 | #define VBIO16BIT(a) ((unsigned)0xfffe0000 <= ((unsigned)(a))) |
41 | #define VBIO24BIT(a) ((unsigned)0xff000000 <= ((unsigned)(a)) && \ | |
42 | ((unsigned)(a)) < (unsigned)0xfffe0000) | |
43 | #define VBIO32BIT(a) (((unsigned)(a)) < (unsigned)0xff000000) | |
586cab6f | 44 | |
d08ce1d7 SL |
45 | /* |
46 | * The following constants define the fixed size map of the | |
47 | * VERSAbus i/o space. The values should reflect the range | |
586cab6f SL |
48 | * of i/o addresses used by all the controllers unprepared |
49 | * to allocate and initialize their own page maps. | |
d08ce1d7 SL |
50 | */ |
51 | #define VBIOBASE 0xfff00000 /* base of VERSAbus address space */ | |
52 | #define VBIOEND 0xffffee45 /* last address in mapped space */ | |
586cab6f | 53 | /* number of entries in the system page table for i/o space */ |
d08ce1d7 | 54 | #define VBIOSIZE btoc(VBIOEND-VBIOBASE) |
586cab6f | 55 | /* is device in mapped region */ |
9d61b7ff SL |
56 | #define VBIOMAPPED(a) ((unsigned)VBIOBASE <= ((unsigned)(a)) && \ |
57 | ((unsigned)(a)) <= (unsigned)VBIOEND) | |
586cab6f | 58 | #define vboff(addr) ((int)(((caddr_t)(addr)) - VBIOBASE)) |