summaryrefslogtreecommitdiffstats
path: root/sys/pccard/slot.h
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1995-08-24 08:56:20 +0000
committerphk <phk@FreeBSD.org>1995-08-24 08:56:20 +0000
commitcb797b9f3a51481777017af541d45fbb632918bd (patch)
tree79ea479f1d023d0a1dee6bad52acfca88dedd705 /sys/pccard/slot.h
parentae1e6673d90921816b6cdd6c732b2c8d0f5afcfa (diff)
downloadFreeBSD-src-cb797b9f3a51481777017af541d45fbb632918bd.zip
FreeBSD-src-cb797b9f3a51481777017af541d45fbb632918bd.tar.gz
Andrew McRae's pcmcia/pccard code, the kernel part.
This is still very green, but I have managed to get my modem working. Lots of work still to do, but now at least we can commit it. /phk Reviewed by: phk Submitted by: Andrew McRae <andrew@mega.com.au>
Diffstat (limited to 'sys/pccard/slot.h')
-rw-r--r--sys/pccard/slot.h128
1 files changed, 128 insertions, 0 deletions
diff --git a/sys/pccard/slot.h b/sys/pccard/slot.h
new file mode 100644
index 0000000..fa29991
--- /dev/null
+++ b/sys/pccard/slot.h
@@ -0,0 +1,128 @@
+/*
+ * Slot structures for PC-CARD interface.
+ * Each slot has a controller specific structure
+ * attached to it. A slot number allows
+ * mapping from the character device to the
+ * slot structure. This is separate to the
+ * controller slot number to allow multiple controllers
+ * to be accessed.
+ *-------------------------------------------------------------------------
+ *
+ * Copyright (c) 1995 Andrew McRae. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/*
+ * Controller data - Specific to each slot controller.
+ */
+struct slot_cont
+ {
+ int (*mapmem)(); /* Map memory */
+ int (*mapio)(); /* Map io */
+ void (*reset)(); /* init */
+ void (*disable)(); /* Disable slot */
+ int (*power)(); /* Set power values */
+ int (*ioctl)(); /* ioctl to lower level */
+ void (*mapirq)(); /* Map interrupt number */
+ int extra; /* Controller specific size */
+ int maxmem; /* Number of allowed memory windows */
+ int maxio; /* Number of allowed I/O windows */
+ int irqs; /* IRQ's that are allowed */
+ char *name; /* controller name */
+/*
+ * The rest is maintained by the mainline PC-CARD code.
+ */
+
+ struct slot_cont *next; /* Allows linked list of controllers */
+ int slots; /* Slots available */
+ };
+/*
+ * Driver structure - each driver registers itself
+ * with the mainline PC-CARD code. These drivers are
+ * then available for linking to the devices.
+ */
+struct pccard_dev;
+
+struct pccard_drv
+ {
+ char *name; /* Driver name */
+ int (*handler)(struct pccard_dev *); /* Interrupt handler */
+ void (*unload)(struct pccard_dev *); /* Disable driver */
+ void (*suspend)(struct pccard_dev *); /* Suspend driver */
+ int (*init)(struct pccard_dev *, int); /* init device */
+ int attr; /* driver attributes */
+ unsigned int *imask; /* Interrupt mask ptr */
+
+ struct pccard_drv *next;
+ };
+/*
+ * Device structure for cards. Each card may have one
+ * or more drivers attached to it; each driver is assumed
+ * to require at most one interrupt handler, one I/O block
+ * and one memory block. This structure is used to link the different
+ * devices together.
+ */
+struct pccard_dev
+ {
+ struct pccard_dev *next; /* List of drivers */
+ struct isa_device isahd; /* Device details */
+ struct pccard_drv *drv;
+ void *arg; /* Device argument */
+ struct slot *sp; /* Back pointer to slot */
+ int running; /* Current state of driver */
+ };
+
+/*
+ * Per-slot structure.
+ */
+struct slot
+ {
+ struct slot *next; /* Master list */
+ int slot; /* Slot number */
+ int flags; /* Slot flags (see below) */
+ int rwmem; /* Read/write flags */
+ int ex_sel; /* PID for select */
+ int irq; /* IRQ allocated (0 = none) */
+ int irqref; /* Reference count of driver IRQs */
+ struct pccard_dev *devices; /* List of drivers attached */
+/*
+ * flags.
+ */
+ unsigned int insert_timeout:1; /* Insert timeout active */
+
+ enum cardstate state, laststate; /* Current/last card states */
+ struct selinfo selp; /* Info for select */
+ struct mem_desc mem[NUM_MEM_WINDOWS]; /* Memory windows */
+ struct io_desc io[NUM_IO_WINDOWS]; /* I/O windows */
+ struct power pwr; /* Power values */
+ struct slot_cont *cinfo; /* Per-controller data */
+ void *cdata; /* Controller specific data */
+ };
+
+enum card_event { card_removed, card_inserted };
+
+struct slot *pccard_alloc_slot(struct slot_cont *);
+void pccard_event(struct slot *, enum card_event);
+void pccard_remove_controller(struct slot_cont *);
+int pccard_alloc_intr();
+void pccard_add_driver(struct pccard_drv *);
OpenPOWER on IntegriCloud