Home | History | Annotate | Line # | Download | only in ic
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