summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/dev/pccard/card_if.m9
-rw-r--r--sys/dev/pccard/pccard.c1
-rw-r--r--sys/dev/pccard/pccard_cis.c11
-rw-r--r--sys/dev/pccard/pccardvar.h5
4 files changed, 18 insertions, 8 deletions
diff --git a/sys/dev/pccard/card_if.m b/sys/dev/pccard/card_if.m
index bd003e4..51977cc 100644
--- a/sys/dev/pccard/card_if.m
+++ b/sys/dev/pccard/card_if.m
@@ -169,3 +169,12 @@ METHOD struct pccard_product * do_product_lookup {
METHOD int compat_match {
device_t dev;
}
+
+#
+# Scanning function for accessing the CIS of a card in its driver.
+#
+METHOD int cis_scan {
+ device_t bus;
+ pccard_scan_t fnp;
+ void *argp;
+};
diff --git a/sys/dev/pccard/pccard.c b/sys/dev/pccard/pccard.c
index 9f98fd0..911ccdb 100644
--- a/sys/dev/pccard/pccard.c
+++ b/sys/dev/pccard/pccard.c
@@ -1325,6 +1325,7 @@ static device_method_t pccard_methods[] = {
DEVMETHOD(card_compat_do_probe, pccard_compat_do_probe),
DEVMETHOD(card_compat_do_attach, pccard_compat_do_attach),
DEVMETHOD(card_do_product_lookup, pccard_do_product_lookup),
+ DEVMETHOD(card_cis_scan, pccard_scan_cis),
{ 0, 0 }
};
diff --git a/sys/dev/pccard/pccard_cis.c b/sys/dev/pccard/pccard_cis.c
index ce5a01f..7c7898e 100644
--- a/sys/dev/pccard/pccard_cis.c
+++ b/sys/dev/pccard/pccard_cis.c
@@ -71,7 +71,7 @@ struct cis_state {
struct pccard_function *pf;
};
-int pccard_parse_cis_tuple(struct pccard_tuple *, void *);
+static int pccard_parse_cis_tuple(struct pccard_tuple *, void *);
static int decode_funce(struct pccard_tuple *, struct pccard_function *);
void
@@ -103,8 +103,7 @@ pccard_read_cis(struct pccard_softc *sc)
}
int
-pccard_scan_cis(device_t dev, int (*fct)(struct pccard_tuple *, void *),
- void *arg)
+pccard_scan_cis(device_t dev, pccard_scan_t fct, void *arg)
{
struct resource *res;
int rid;
@@ -193,7 +192,7 @@ pccard_scan_cis(device_t dev, int (*fct)(struct pccard_tuple *, void *),
DPRINTF(("CISTPL_END\n ff\n"));
/* Call the function for the END tuple, since
the CIS semantics depend on it */
- if ((*fct) (&tuple, arg)) {
+ if ((*fct)(&tuple, arg)) {
ret = 1;
goto done;
}
@@ -353,7 +352,7 @@ pccard_scan_cis(device_t dev, int (*fct)(struct pccard_tuple *, void *),
*/
default:
{
- if ((*fct) (&tuple, arg)) {
+ if ((*fct)(&tuple, arg)) {
ret = 1;
goto done;
}
@@ -616,7 +615,7 @@ pccard_print_cis(device_t dev)
card->error);
}
-int
+static int
pccard_parse_cis_tuple(struct pccard_tuple *tuple, void *arg)
{
/* most of these are educated guesses */
diff --git a/sys/dev/pccard/pccardvar.h b/sys/dev/pccard/pccardvar.h
index c4bd0e3..3df9fcc 100644
--- a/sys/dev/pccard/pccardvar.h
+++ b/sys/dev/pccard/pccardvar.h
@@ -221,6 +221,8 @@ struct pccard_tuple {
bus_space_handle_t memh;
};
+typedef int (*pccard_scan_t)(struct pccard_tuple *, void *);
+
struct pccard_product {
const char *pp_name; /* NULL if end of table */
#define PCCARD_VENDOR_ANY (0xffffffff)
@@ -250,8 +252,7 @@ pccard_product_lookup(device_t dev, const struct pccard_product *tab,
void pccard_read_cis(struct pccard_softc *);
void pccard_check_cis_quirks(device_t);
void pccard_print_cis(device_t);
-int pccard_scan_cis(device_t,
- int (*) (struct pccard_tuple *, void *), void *);
+int pccard_scan_cis(device_t, pccard_scan_t, void *);
#define pccard_cis_read_1(tuple, idx0) \
(bus_space_read_1((tuple)->memt, (tuple)->memh, (tuple)->mult*(idx0)))
OpenPOWER on IntegriCloud