i82365var.h revision 1.1.2.1 1 1.1.2.1 marc #include <sys/device.h>
2 1.1.2.1 marc
3 1.1.2.1 marc #include <dev/pcmcia/pcmciareg.h>
4 1.1.2.1 marc #include <dev/pcmcia/pcmciachip.h>
5 1.1.2.1 marc
6 1.1.2.1 marc #include <dev/ic/i82365reg.h>
7 1.1.2.1 marc
8 1.1.2.1 marc struct pcic_handle {
9 1.1.2.1 marc struct pcic_softc *sc;
10 1.1.2.1 marc int vendor;
11 1.1.2.1 marc int sock;
12 1.1.2.1 marc int flags;
13 1.1.2.1 marc int memalloc;
14 1.1.2.1 marc int ioalloc;
15 1.1.2.1 marc struct device *pcmcia;
16 1.1.2.1 marc };
17 1.1.2.1 marc
18 1.1.2.1 marc #define C0SA PCIC_CHIP0_BASE+PCIC_SOCKETA_INDEX
19 1.1.2.1 marc #define C0SB PCIC_CHIP0_BASE+PCIC_SOCKETB_INDEX
20 1.1.2.1 marc #define C1SA PCIC_CHIP1_BASE+PCIC_SOCKETA_INDEX
21 1.1.2.1 marc #define C1SB PCIC_CHIP1_BASE+PCIC_SOCKETB_INDEX
22 1.1.2.1 marc
23 1.1.2.1 marc /* This is sort of arbitrary. It merely needs to be "enough".
24 1.1.2.1 marc It can be overridden in the conf file, anyway. */
25 1.1.2.1 marc
26 1.1.2.1 marc #define PCIC_MEM_PAGES 4
27 1.1.2.1 marc #define PCIC_MEMSIZE PCIC_MEM_PAGES*PCIC_MEM_PAGESIZE
28 1.1.2.1 marc
29 1.1.2.1 marc #define PCIC_NSLOTS 4
30 1.1.2.1 marc
31 1.1.2.1 marc struct pcic_softc {
32 1.1.2.1 marc struct device dev;
33 1.1.2.1 marc
34 1.1.2.1 marc bus_space_tag_t memt;
35 1.1.2.1 marc bus_space_handle_t memh;
36 1.1.2.1 marc bus_space_tag_t iot;
37 1.1.2.1 marc bus_space_handle_t ioh;
38 1.1.2.1 marc
39 1.1.2.1 marc /* XXX isa_chipset_tag_t, pci_chipset_tag_t, etc. */
40 1.1.2.1 marc caddr_t intr_est;
41 1.1.2.1 marc
42 1.1.2.1 marc pcmcia_chipset_tag_t pct;
43 1.1.2.1 marc
44 1.1.2.1 marc /* this needs to be large enough to hold PCIC_MEM_PAGES bits */
45 1.1.2.1 marc int subregionmask;
46 1.1.2.1 marc
47 1.1.2.1 marc /* used by memory window mapping functions */
48 1.1.2.1 marc bus_addr_t membase;
49 1.1.2.1 marc
50 1.1.2.1 marc int irq;
51 1.1.2.1 marc void *ih;
52 1.1.2.1 marc
53 1.1.2.1 marc struct pcic_handle handle[PCIC_NSLOTS];
54 1.1.2.1 marc };
55 1.1.2.1 marc
56 1.1.2.1 marc
57 1.1.2.1 marc int pcic_ident_ok __P((int));
58 1.1.2.1 marc int pcic_vendor __P((struct pcic_handle *));
59 1.1.2.1 marc char *pcic_vendor_to_string __P((int));
60 1.1.2.1 marc
61 1.1.2.1 marc void pcic_attach __P((struct pcic_softc *));
62 1.1.2.1 marc void pcic_attach_sockets __P((struct pcic_softc *));
63 1.1.2.1 marc int pcic_intr __P((void *arg));
64 1.1.2.1 marc
65 1.1.2.1 marc static inline int pcic_read __P((struct pcic_handle *, int));
66 1.1.2.1 marc static inline void pcic_write __P((struct pcic_handle *, int, int));
67 1.1.2.1 marc static inline void pcic_wait_ready __P((struct pcic_handle *));
68 1.1.2.1 marc
69 1.1.2.1 marc int pcic_chip_mem_alloc __P((pcmcia_chipset_handle_t, bus_size_t,
70 1.1.2.1 marc struct pcmcia_mem_handle *));
71 1.1.2.1 marc void pcic_chip_mem_free __P((pcmcia_chipset_handle_t,
72 1.1.2.1 marc struct pcmcia_mem_handle *));
73 1.1.2.1 marc int pcic_chip_mem_map __P((pcmcia_chipset_handle_t, int, bus_addr_t,
74 1.1.2.1 marc bus_size_t, struct pcmcia_mem_handle *,
75 1.1.2.1 marc bus_addr_t *, int *));
76 1.1.2.1 marc void pcic_chip_mem_unmap __P((pcmcia_chipset_handle_t, int));
77 1.1.2.1 marc
78 1.1.2.1 marc int pcic_chip_io_alloc __P((pcmcia_chipset_handle_t, bus_addr_t, bus_size_t,
79 1.1.2.1 marc struct pcmcia_io_handle *));
80 1.1.2.1 marc void pcic_chip_io_free __P((pcmcia_chipset_handle_t,
81 1.1.2.1 marc struct pcmcia_io_handle *));
82 1.1.2.1 marc int pcic_chip_io_map __P((pcmcia_chipset_handle_t, int, bus_addr_t, bus_size_t,
83 1.1.2.1 marc struct pcmcia_io_handle *, int *));
84 1.1.2.1 marc void pcic_chip_io_unmap __P((pcmcia_chipset_handle_t, int));
85 1.1.2.1 marc
86 1.1.2.1 marc void pcic_chip_socket_enable __P((pcmcia_chipset_handle_t));
87 1.1.2.1 marc void pcic_chip_socket_disable __P((pcmcia_chipset_handle_t));
88 1.1.2.1 marc
89 1.1.2.1 marc static inline int
90 1.1.2.1 marc pcic_read(h, idx)
91 1.1.2.1 marc struct pcic_handle *h;
92 1.1.2.1 marc int idx;
93 1.1.2.1 marc {
94 1.1.2.1 marc if (idx != -1)
95 1.1.2.1 marc bus_space_write_1(h->sc->iot, h->sc->ioh, PCIC_REG_INDEX, h->sock+idx);
96 1.1.2.1 marc return(bus_space_read_1(h->sc->iot, h->sc->ioh, PCIC_REG_DATA));
97 1.1.2.1 marc }
98 1.1.2.1 marc
99 1.1.2.1 marc static inline void
100 1.1.2.1 marc pcic_write(h, idx, data)
101 1.1.2.1 marc struct pcic_handle *h;
102 1.1.2.1 marc int idx;
103 1.1.2.1 marc int data;
104 1.1.2.1 marc {
105 1.1.2.1 marc if (idx != -1)
106 1.1.2.1 marc bus_space_write_1(h->sc->iot, h->sc->ioh, PCIC_REG_INDEX, h->sock+idx);
107 1.1.2.1 marc bus_space_write_1(h->sc->iot, h->sc->ioh, PCIC_REG_DATA, (data));
108 1.1.2.1 marc }
109 1.1.2.1 marc
110 1.1.2.1 marc static inline void
111 1.1.2.1 marc pcic_wait_ready(h)
112 1.1.2.1 marc struct pcic_handle *h;
113 1.1.2.1 marc {
114 1.1.2.1 marc int i;
115 1.1.2.1 marc
116 1.1.2.1 marc for (i=0; i<10000; i++) {
117 1.1.2.1 marc if (pcic_read(h, PCIC_IF_STATUS) & PCIC_IF_STATUS_READY)
118 1.1.2.1 marc return;
119 1.1.2.1 marc delay(500);
120 1.1.2.1 marc }
121 1.1.2.1 marc
122 1.1.2.1 marc #ifdef DIAGNOSTIC
123 1.1.2.1 marc printf("pcic_wait_ready ready never happened\n");
124 1.1.2.1 marc #endif
125 1.1.2.1 marc }
126 1.1.2.1 marc
127