Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 26 Feb 2000 16:08:47 +0900
From:      MIHIRA Sanpei Yoshiro <sanpei@sanpei.org>
To:        imp@village.org
Cc:        freebsd-mobile@FreeBSD.ORG, sos@freebsd.dk, ambrisko@whistle.com
Subject:   Re: Update to pccard ata changes (removal support) 
Message-ID:  <200002260708.QAA09602@lavender.yy.cs.keio.ac.jp>
In-Reply-To: Your message of "Fri, 25 Feb 2000 22:56:08 -0700"
References:  <200002260556.WAA55601@harmony.village.org>

next in thread | previous in thread | raw e-mail | index | archive | help
>:   Next, I think we need to merge function 'fixed_disk/serial' from
>: PAO pccardd.  Does someone have any plan or experimental code?
>
>No plans from me.  I think it is a good thing to try to port, even if
>it isn't done in time for 4.0.

  I ported ``function 'fixed_disk/serial''' code from PAO3.

  I tested below PC-Card:
     PC-Card Modem
	- AIWA PV-JF5601				OK
	- AIWA PV-JF56E1				OK
	- TDK Modem DF5600/J				OK
     PC-Card Modem(ISDN/serial)
	- IO DATA PCINS II-128				OK
     Flash ATA
	- IBM Flash ATA 10MB(Richo Flash ATA 10MB)	OK
	- Non-brand 32MB Compact Flash			NG 
	  (it needs to change config index auto--> 0x1, 
	   I will post about this card)

  I hope to check my code.

Thank you
---
MIHIRA Sanpei Yoshiro
Yokohama, Japan.


--- /usr/src/etc/pccard.conf.sample	Sat Feb 26 10:46:21 2000
+++ src/etc/pccard.conf.sample	Sat Feb 26 15:48:45 2000
@@ -882,3 +882,38 @@
 	insert	/etc/pccard_ether $device
 	remove	logger -t pccard:$device -s Melco Airconnect removed
 	remove	/sbin/ifconfig $device delete
+
+# -------------------------------------------------------------------
+#
+# "Wildcard" entries
+#
+# -------------------------------------------------------------------
+
+# GENERIC PCMCIA modem
+function serial
+	config  auto "sio3" ?
+#	config  0x23 "sio3" ?         # alternative definitions
+#	config  0x21 "sio3" ?         # .........
+#	config  0x22 "sio3" ? 
+#	config  0x23 "sio3" pio
+#	config  0x21 "sio3" pio
+#	config  0x22 "sio3" pio
+#	config  0x23 "sio3" 5
+#	config  0x21 "sio3" 5
+#	config  0x22 "sio3" 5
+#	reset   100                     # default
+	reset   1000                    # safety reset time
+#	reset   10000                   # for unstable cards
+	insert	logger -t pccard:$device -s PCMCIA Modem inserted
+	remove	logger -t pccard:$device -s PCMCIA Modem removed
+
+# GENERIC Flash ATA / ATA HDD
+function fixed_disk
+#	config  auto "ata2" 15
+#	config  auto "ata2" ?
+#	config  0x03    "ata2" 15
+#	config  0x03    "ata2" ?
+	config  auto "ata2" ? iosize 16
+#	config  auto "ata2" ? iosize 16
+	insert	logger -t pccard:$device -s Flash ATA / ATA HDD inserted
+	remove	logger -t pccard:$device -s Flash ATA / ATA HDD removed
diff -ur /usr/src/usr.sbin/pccard/pccardd/cardd.c src/usr.sbin/pccard/pccardd/cardd.c
--- /usr/src/usr.sbin/pccard/pccardd/cardd.c	Sat Feb 26 10:48:41 2000
+++ src/usr.sbin/pccard/pccardd/cardd.c	Sat Feb 26 15:41:07 2000
@@ -229,10 +229,36 @@
 #if 0
 	dumpcis(sp->cis);
 #endif
-	for (cp = cards; cp; cp = cp->next)
-		if (strncmp(cp->manuf, sp->cis->manuf, CIS_MAXSTR) == 0 &&
-		    strncmp(cp->version, sp->cis->vers, CIS_MAXSTR) == 0)
+	for (cp = cards; cp; cp = cp->next) {
+		switch (cp->deftype) {
+		case DT_VERS:
+			if (strncmp(cp->manuf, sp->cis->manuf, CIS_MAXSTR) == 0 &&
+			    strncmp(cp->version, sp->cis->vers, CIS_MAXSTR) == 0) {
+				logmsg("Card \"%s\"(\"%s\") "
+					"matched \"%s\" (\"%s\") ",
+					sp->cis->manuf, sp->cis->vers,
+					cp->manuf, cp->version
+					);
+				goto escape;
+			}
 			break;
+                case DT_FUNC:
+                        if (cp->func_id == sp->cis->func_id1) {
+                                logmsg("Card \"%s\"(\"%s\") "
+                                       "[%s] [%s] "
+                                       "has function ID %d\n",
+                                    sp->cis->manuf, sp->cis->vers,
+                                    sp->cis->add_info1, sp->cis->add_info2,
+                                    cp->func_id);
+                                goto escape;
+                        }
+                        break;
+		default:
+			logmsg("Unknown deftype %d\n", cp->deftype);
+			die("cardd.c:card_inserted()");
+		}
+	}
+escape:
 	sp->card = cp;
 #if 0
 	reset_slot(sp);
diff -ur /usr/src/usr.sbin/pccard/pccardd/cardd.h src/usr.sbin/pccard/pccardd/cardd.h
--- /usr/src/usr.sbin/pccard/pccardd/cardd.h	Sat Feb 26 10:48:41 2000
+++ src/usr.sbin/pccard/pccardd/cardd.h	Sat Feb 26 15:41:24 2000
@@ -67,6 +67,8 @@
 	struct card *next;
 	char   *manuf;
 	char   *version;
+	u_char  func_id;
+	int     deftype;
 	struct ether *ether;		/* For net cards, ether at offset */
 	int     reset_time;		/* Reset time */
 	int	iosize;			/* I/O window size (ignore location) */
@@ -181,3 +183,5 @@
 #define DEFAULT_INDEX	1
 #define AUTO_INDEX	2
 
+#define DT_VERS 0
+#define DT_FUNC 1
diff -ur /usr/src/usr.sbin/pccard/pccardd/file.c src/usr.sbin/pccard/pccardd/file.c
--- /usr/src/usr.sbin/pccard/pccardd/file.c	Sat Feb 26 10:48:41 2000
+++ src/usr.sbin/pccard/pccardd/file.c	Sat Feb 26 15:47:14 2000
@@ -57,6 +57,7 @@
 	"iosize",		/* 12 */
 	"debuglevel",		/* 13 */
 	"include",		/* 14 */
+	"function",		/* 15 */
 	0
 };
 
@@ -74,6 +75,7 @@
 #define KWD_IOSIZE		12
 #define KWD_DEBUGLEVEL		13
 #define KWD_INCLUDE		14
+#define KWD_FUNCTION		15
 
 struct flags {
 	char   *name;
@@ -88,6 +90,7 @@
 static int     keyword(char *);
 static int     irq_tok(int);
 static int     config_tok(unsigned char *);
+static int     func_tok(void);
 static int     debuglevel_tok(int);
 static struct allocblk *ioblk_tok(int);
 static struct allocblk *memblk_tok(int);
@@ -96,7 +99,7 @@
 static void    file_include(char *);
 
 static void    addcmd(struct cmd **);
-static void    parse_card(void);
+static void    parse_card(int);
 
 /*
  * Read a file and parse the pcmcia configuration data.
@@ -190,7 +193,11 @@
 			break;
 		case KWD_CARD:
 			/* Card definition. */
-			parse_card();
+			parse_card(DT_VERS);
+			break;
+		case KWD_FUNCTION:
+			/* Function definition. */
+			parse_card(DT_FUNC);
 			break;
 		case KWD_DEBUGLEVEL:
 			i = debuglevel_tok(0);
@@ -212,7 +219,7 @@
  *	Parse a card definition.
  */
 static void
-parse_card(void)
+parse_card(int deftype)
 {
 	char   *man, *vers, *tmp;
 	unsigned char index_type;
@@ -222,11 +229,25 @@
 	struct ether *ether;
 
 	confp = 0;
-	man = newstr(next_tok());
-	vers = newstr(next_tok());
 	cp = xmalloc(sizeof(*cp));
-	cp->manuf = man;
-	cp->version = vers;
+	cp->deftype = deftype;
+	switch (deftype) {
+	case DT_VERS:
+		man = newstr(next_tok());
+		vers = newstr(next_tok());
+		cp->manuf = man;
+		cp->version = vers;
+		cp->func_id = 0;
+		break;
+	case DT_FUNC:
+		cp->manuf = "";
+		cp->version = "";
+		cp->func_id = (u_char) func_tok();
+		break;
+	default:
+		fprintf(stderr, "parse_card: unknown deftype %d\n", deftype);
+		exit(1);
+	}
 	cp->reset_time = 50;
 	cp->next = cards;
 	cards = cp;
@@ -461,6 +482,21 @@
 	*index_type = NORMAL_INDEX;
 	return num_tok();
 }
+/*
+ *	Function ID token
+ */
+static int
+func_tok(void)
+{
+	if (strcmp("serial", next_tok()) == 0)	
+		return 2;
+	pusht = 1;
+	if (strcmp("fixed_disk", next_tok()) == 0)	
+		return 4;
+	pusht = 1;
+	return num_tok();
+}
+
 
 /*
  *	debuglevel token. Must be between 0 and 9.
diff -ur /usr/src/usr.sbin/pccard/pccardd/readcis.c src/usr.sbin/pccard/pccardd/readcis.c
--- /usr/src/usr.sbin/pccard/pccardd/readcis.c	Sat Dec 11 19:24:20 1999
+++ src/usr.sbin/pccard/pccardd/readcis.c	Sat Feb 26 15:25:59 2000
@@ -47,6 +47,7 @@
 static void device_desc(unsigned char *, int, struct dev_mem *);
 static void config_map(struct cis *, unsigned char *, int);
 static void cis_config(struct cis *, unsigned char *, int);
+static void cis_func_id(struct cis *, unsigned char *, int);
 static struct tuple_list *read_one_tuplelist(int, int, off_t);
 static struct tuple_list *read_tuples(int);
 static struct tuple *find_tuple_in_list(struct tuple_list *, unsigned char);
@@ -123,6 +124,10 @@
 			case CIS_CONFIG:	/* 0x1B */
 				cis_config(cp, tp->data, tp->length);
 				break;
+			case CIS_FUNC_ID:       /* 0x21 */
+				cis_func_id(cp, tp->data, tp->length);
+				break;
+ 
 			}
 		}
 	return (cp);
@@ -180,6 +185,15 @@
 	strncpy(cp->add_info1, p, CIS_MAXSTR - 1);
 	while (*p++);
 	strncpy(cp->add_info2, p, CIS_MAXSTR - 1);
+}
+/*
+ *      Fills in CIS function ID.
+ */
+static void
+cis_func_id(struct cis *cp, unsigned char *p, int len)
+{
+	cp->func_id1 = *p++;
+	cp->func_id2 = *p++;
 }
 
 /*
diff -ur /usr/src/usr.sbin/pccard/pccardd/readcis.h src/usr.sbin/pccard/pccardd/readcis.h
--- /usr/src/usr.sbin/pccard/pccardd/readcis.h	Sat Dec 11 19:24:20 1999
+++ src/usr.sbin/pccard/pccardd/readcis.h	Sat Feb 26 14:50:52 2000
@@ -119,6 +119,7 @@
 	unsigned char last_config;
 	unsigned char ccrs;
 	unsigned long reg_addr;
+	unsigned char func_id1, func_id2;
 	struct dev_mem attr_mem;
 	struct dev_mem common_mem;
 	struct cis_config *def_config;


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-mobile" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200002260708.QAA09602>