Jun Kuriyama wrote:
> I'm planning to commit these changes into src/sys/pccard/.  This adds
> two features.  These features are obtained from PAO.

Sorry, I forgot to add patch. :-)


-- 
Jun Kuriyama // kuriy...@sky.rim.or.jp
            // kuriy...@freebsd.org
Index: cardinfo.h
===================================================================
RCS file: /home/ncvs/src/sys/pccard/cardinfo.h,v
retrieving revision 1.10
diff -u -r1.10 cardinfo.h
--- cardinfo.h  1998/04/20 15:20:58     1.10
+++ cardinfo.h  1999/02/07 14:20:48
@@ -45,6 +45,8 @@
 #define PIOCRWFLAG     _IOW('P', 7, int)       /* Set flags for drv use */
 #define PIOCRWMEM      _IOWR('P', 8, unsigned long) /* Set mem for drv use */
 #define PIOCSPOW       _IOW('P', 9, struct power) /* Set power structure */
+#define PIOCSVIR       _IOW('P', 10, int)      /* Virtual insert/remove */
+#define PIOCSBEEP      _IOW('P', 11, int)              /* Select Beep */
 /*
  *     Debug codes.
  */
@@ -54,7 +56,7 @@
 /*
  *     Slot states for PIOCGSTATE
  */
-enum cardstate { noslot, empty, suspend, filled };
+enum cardstate { noslot, empty, suspend, filled, inactive };
 
 /*
  *     Descriptor structure for memory map.
Index: driver.h
===================================================================
RCS file: /home/ncvs/src/sys/pccard/driver.h,v
retrieving revision 1.6
diff -u -r1.6 driver.h
--- driver.h    1999/01/19 00:18:25     1.6
+++ driver.h    1999/02/07 14:20:48
@@ -23,6 +23,6 @@
 void   pccard_remove_beep __P((void));
 void   pccard_success_beep __P((void));
 void   pccard_failure_beep __P((void));
-void   pccard_beep_select __P((enum beepstate));
+int    pccard_beep_select __P((enum beepstate));
 
 #endif /* !_PCCARD_DRIVER_H_ */
Index: pccard.c
===================================================================
RCS file: /home/ncvs/src/sys/pccard/pccard.c,v
retrieving revision 1.70
diff -u -r1.70 pccard.c
--- pccard.c    1999/01/27 23:45:40     1.70
+++ pccard.c    1999/02/07 14:20:48
@@ -897,6 +897,7 @@
        struct mem_desc *mp;
        struct io_desc *ip;
        int s, err;
+       int     pwval;
 
        /* beep is disabled until the 1st call of crdioctl() */
        pccard_beep_select(BEEP_ON);
@@ -1026,6 +1027,53 @@
                else
                        pccard_failure_beep();
                return err;
+       /*
+        * Virtual removal/insertion
+        * 
+        * State of cards:
+        *
+        *         insertion        virtual removal
+        * (empty) --------> (filled) --------> (inactive)
+        *   ^ ^               |  ^                 | |
+        *   | |               |  |                 | |
+        *   | +---------------+  +-----------------+ |
+        *   |      removal        virtual insertion  |
+        *   |                                        |
+        *   +----------------------------------------+
+        *                    removal
+        *
+        * -- hosokawa
+        */
+       case PIOCSVIR:
+               pwval = *(int *)data;
+               /* virtual removal */
+               if (!pwval) {
+                       if (slt->state != filled) {
+                               return EINVAL;
+                       }
+                       s = splhigh();
+                       disable_slot(slt);
+                       slt->state = inactive;
+                       splx(s);
+                       pccard_remove_beep();
+                       selwakeup(&slt->selp);
+               }
+               /* virtual insertion */
+               else {
+                       if (slt->state != inactive) {
+                               return EINVAL;
+                       }
+                       slt->insert_seq = 1;
+                       timeout(inserted, (void *)slt, hz/4);
+                       pccard_insert_beep();
+                       break;
+               }
+               break;
+       case PIOCSBEEP:
+               if (pccard_beep_select(*(int *)data)) {
+                       return EINVAL;
+               }
+               break;
        }
        return(0);
 }
Index: pccard_beep.c
===================================================================
RCS file: /home/ncvs/src/sys/pccard/pccard_beep.c,v
retrieving revision 1.1
diff -u -r1.1 pccard_beep.c
--- pccard_beep.c       1997/10/26 06:06:48     1.1
+++ pccard_beep.c       1999/02/07 14:20:48
@@ -64,7 +64,11 @@
        sysbeep(PCCARD_BEEP_PITCH2, PCCARD_BEEP_DURATION2);
 }
 
-void pccard_beep_select(enum beepstate state)
+int pccard_beep_select(enum beepstate state)
 {
-       allow_beep = state;
+       if (state == BEEP_ON || state == BEEP_OFF) {
+               allow_beep = state;
+               return 0;
+       }
+       return 1;
 }

Reply via email to