Diff for /wikisrc/users/mlelstv/disk-driver-template.mdwn between versions 1.6 and 1.7

version 1.6, 2015/12/21 12:28:21 version 1.7, 2015/12/21 12:59:09
Line 66  static int      xxx_match(device_t, cfda Line 66  static int      xxx_match(device_t, cfda
 static void     xxx_attach(device_t, device_t, void *);  static void     xxx_attach(device_t, device_t, void *);
 static int      xxx_detach(device_t, int);  static int      xxx_detach(device_t, int);
   
   struct xxx_softc {
           struct dk_softc         sc_dksc; /* generic disk interface */
           // private data
   };
   
 CFATTACH_DECL3_NEW(xxx, sizeof(struct xxx_softc),  CFATTACH_DECL3_NEW(xxx, sizeof(struct xxx_softc),
     xxx_match, xxx_attach, xxx_detach, NULL, NULL, NULL, DVF_DETACH_SHUTDOWN);      xxx_match, xxx_attach, xxx_detach, NULL, NULL, NULL, DVF_DETACH_SHUTDOWN);
     extern struct cfdriver xxx_cd;        extern struct cfdriver xxx_cd;  
 extern struct   cfdriver xxx_cd;  extern struct   cfdriver xxx_cd;
   
 #ifdef PSEUDODEVICE  #ifdef PSEUDODEVICE
 static void     xxxattach(int num);  static void     xxxattach(int);
   static device_t xxx_create(int);
   static int      xxx_destroy(device_t);
 #endif  #endif
   
 static int      xxx_init(device_t);  static int      xxx_init(device_t);
Line 101  static int      xxxdone(struct buf *); Line 108  static int      xxxdone(struct buf *);
 void  void
 xxxattach(int num)  xxxattach(int num)
 {  {
   #ifndef _MODULE
         int error;          int error;
   
         error = config_cfattach_attach(xxx_cd.cd_name, &xxx_ca);          error = config_cfattach_attach(xxx_cd.cd_name, &xxx_ca);
Line 111  xxxattach(int num) Line 119  xxxattach(int num)
         }          }
   
         // some global initialization          // some global initialization
   #endif
   }
   
   static device_t
   xxx_create(int unit)
   {
           cfdata_t cf;
           device_t dv;
   
           cf = malloc(sizeof(*cf), M_DEVBUF, M_WAITOK);
           cf->cf_name = xxx_cd.cd_name;
           cf->cf_atname = xxx_cd.cd_name;
           cf->cf_unit = unit;
           cf->cf_fstate = FSTATE_STAR;
   
           dv = config_attach_pseudo(cf);
           if (dv == NULL) {
                   aprint_error("%s: failed to attach pseudo device\n",
                       xxx_cd.cd_name);
                   free(cf, M_DEVBUF);
           }
   
           return dv;
   }
   
   static int
   xxx_destroy(device_t dv)
   {
           int error;
           cfdata_t cf;
   
           cf = device_cfdata(dv);
           error = config_detach(dev, DETACH_QUIET);
           if (error)
                   return error;
           free(cf, M_DEVBUF);
           return 0;
 }  }
 #endif  #endif
   
Line 346  xxx_modcmd(modcmd_t cmd, void *data) Line 391  xxx_modcmd(modcmd_t cmd, void *data)
   
 #ifdef PSEUDODEVICE  #ifdef PSEUDODEVICE
                 xxxattach(0);                  xxxattach(0);
                 // devices instances are created by xxxconfig utility  
                 // and some private ioctl  
 #else  
                 // magic happens to create device instances  
 #endif  
 #endif  #endif
                 break;                  break;
         case MODULE_CMD_FINI:          case MODULE_CMD_FINI:
                 // outside of #ifdef _MODULE to allow removal of builtins                  // outside of #ifdef _MODULE to allow removal of builtins
 #ifdef PSEUDODEVICE  
                 // magic happens to destroy device instances  
 #else  
                 // magic happens to destroy device instances  
 #endif  
   
                 // some global finalization                  // some global finalization
 #ifdef _MODULE  #ifdef _MODULE
                 error = config_cfattach_detach(&xxx_cd.cd_name, &xxx_ca);                  error = config_cfattach_detach(&xxx_cd.cd_name, &xxx_ca);

Removed from v.1.6  
changed lines
  Added in v.1.7


CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb