Print this page
XXXX introduce drv_sectohz


 200  * Inputs:      None.
 201  *
 202  * Returns:     Returns the value returned by the ddi_softstate_init function
 203  *              on a failure to create the device state structure or the result
 204  *              of the module install routines.
 205  *
 206  */
 207 int
 208 _init(void)
 209 {
 210         int             rval = 0;
 211         int             tgts = 0;
 212 
 213         tgts |= 0x02;
 214         tgts |= 0x08;   /* In #ifdef NEXENTA block from original sTec drop. */
 215 
 216         /*
 217          * drv_usectohz() is a function, so can't initialize it at
 218          * instantiation.
 219          */
 220         skd_timer_ticks = drv_usectohz(1000000);
 221 
 222         Dcmn_err(CE_NOTE,
 223             "<# Installing skd Driver dbg-lvl=%d %s %x>",
 224             skd_dbg_level, DRV_BUILD_ID, tgts);
 225 
 226         rval = ddi_soft_state_init(&skd_state, sizeof (skd_device_t), 0);
 227         if (rval != DDI_SUCCESS)
 228                 return (rval);
 229 
 230         bd_mod_init(&skd_dev_ops);
 231 
 232         rval = mod_install(&modlinkage);
 233         if (rval != DDI_SUCCESS) {
 234                 ddi_soft_state_fini(&skd_state);
 235                 bd_mod_fini(&skd_dev_ops);
 236         }
 237 
 238         return (rval);
 239 }
 240 


2876                 Dcmn_err(CE_NOTE, "(%s): skd_stop_device not online no sync\n",
2877                     skdev->name);
2878                 goto stop_out;
2879         }
2880 
2881         if (SKD_REQ_STATE_IDLE != skspcl->req.state) {
2882                 Dcmn_err(CE_NOTE, "(%s): skd_stop_device no special\n",
2883                     skdev->name);
2884                 goto stop_out;
2885         }
2886 
2887         skdev->state = SKD_DRVR_STATE_SYNCING;
2888         skdev->sync_done = 0;
2889 
2890         skd_send_internal_skspcl(skdev, skspcl, SYNCHRONIZE_CACHE);
2891 
2892         secs = 10;
2893         mutex_enter(&skdev->skd_internalio_mutex);
2894         while (skdev->sync_done == 0) {
2895                 cur_ticks = ddi_get_lbolt();
2896                 tmo = cur_ticks + drv_usectohz(1000000 * secs);
2897                 if (cv_timedwait(&skdev->cv_waitq,
2898                     &skdev->skd_internalio_mutex, tmo) == -1) {
2899                         /* Oops - timed out */
2900 
2901                         Dcmn_err(CE_NOTE, "stop_device - %d secs TMO", secs);
2902                 }
2903         }
2904 
2905         mutex_exit(&skdev->skd_internalio_mutex);
2906 
2907         switch (skdev->sync_done) {
2908         case 0:
2909                 Dcmn_err(CE_NOTE, "(%s): skd_stop_device no sync\n",
2910                     skdev->name);
2911                 break;
2912         case 1:
2913                 Dcmn_err(CE_NOTE, "(%s): skd_stop_device sync done\n",
2914                     skdev->name);
2915                 break;
2916         default:


4503  *
4504  * Name:        skd_wait_for_s1120, wait for device to finish
4505  *              its initialization.
4506  *
4507  * Inputs:      skdev           - device state structure.
4508  *
4509  * Returns:     DDI_SUCCESS or DDI_FAILURE.
4510  *
4511  */
4512 static int
4513 skd_wait_for_s1120(skd_device_t *skdev)
4514 {
4515         clock_t cur_ticks, tmo;
4516         int     loop_cntr = 0;
4517         int     rc = DDI_FAILURE;
4518 
4519         mutex_enter(&skdev->skd_internalio_mutex);
4520 
4521         while (skdev->gendisk_on == 0) {
4522                 cur_ticks = ddi_get_lbolt();
4523                 tmo = cur_ticks + drv_usectohz(MICROSEC);
4524                 if (cv_timedwait(&skdev->cv_waitq,
4525                     &skdev->skd_internalio_mutex, tmo) == -1) {
4526                         /* Oops - timed out */
4527                         if (loop_cntr++ > 10)
4528                                 break;
4529                 }
4530         }
4531 
4532         mutex_exit(&skdev->skd_internalio_mutex);
4533 
4534         if (skdev->gendisk_on == 1)
4535                 rc = DDI_SUCCESS;
4536 
4537         return (rc);
4538 }
4539 
4540 /*
4541  *
4542  * Name:        skd_update_props, updates certain device properties.
4543  *




 200  * Inputs:      None.
 201  *
 202  * Returns:     Returns the value returned by the ddi_softstate_init function
 203  *              on a failure to create the device state structure or the result
 204  *              of the module install routines.
 205  *
 206  */
 207 int
 208 _init(void)
 209 {
 210         int             rval = 0;
 211         int             tgts = 0;
 212 
 213         tgts |= 0x02;
 214         tgts |= 0x08;   /* In #ifdef NEXENTA block from original sTec drop. */
 215 
 216         /*
 217          * drv_usectohz() is a function, so can't initialize it at
 218          * instantiation.
 219          */
 220         skd_timer_ticks = drv_sectohz(1);
 221 
 222         Dcmn_err(CE_NOTE,
 223             "<# Installing skd Driver dbg-lvl=%d %s %x>",
 224             skd_dbg_level, DRV_BUILD_ID, tgts);
 225 
 226         rval = ddi_soft_state_init(&skd_state, sizeof (skd_device_t), 0);
 227         if (rval != DDI_SUCCESS)
 228                 return (rval);
 229 
 230         bd_mod_init(&skd_dev_ops);
 231 
 232         rval = mod_install(&modlinkage);
 233         if (rval != DDI_SUCCESS) {
 234                 ddi_soft_state_fini(&skd_state);
 235                 bd_mod_fini(&skd_dev_ops);
 236         }
 237 
 238         return (rval);
 239 }
 240 


2876                 Dcmn_err(CE_NOTE, "(%s): skd_stop_device not online no sync\n",
2877                     skdev->name);
2878                 goto stop_out;
2879         }
2880 
2881         if (SKD_REQ_STATE_IDLE != skspcl->req.state) {
2882                 Dcmn_err(CE_NOTE, "(%s): skd_stop_device no special\n",
2883                     skdev->name);
2884                 goto stop_out;
2885         }
2886 
2887         skdev->state = SKD_DRVR_STATE_SYNCING;
2888         skdev->sync_done = 0;
2889 
2890         skd_send_internal_skspcl(skdev, skspcl, SYNCHRONIZE_CACHE);
2891 
2892         secs = 10;
2893         mutex_enter(&skdev->skd_internalio_mutex);
2894         while (skdev->sync_done == 0) {
2895                 cur_ticks = ddi_get_lbolt();
2896                 tmo = cur_ticks + drv_sectohz(secs);
2897                 if (cv_timedwait(&skdev->cv_waitq,
2898                     &skdev->skd_internalio_mutex, tmo) == -1) {
2899                         /* Oops - timed out */
2900 
2901                         Dcmn_err(CE_NOTE, "stop_device - %d secs TMO", secs);
2902                 }
2903         }
2904 
2905         mutex_exit(&skdev->skd_internalio_mutex);
2906 
2907         switch (skdev->sync_done) {
2908         case 0:
2909                 Dcmn_err(CE_NOTE, "(%s): skd_stop_device no sync\n",
2910                     skdev->name);
2911                 break;
2912         case 1:
2913                 Dcmn_err(CE_NOTE, "(%s): skd_stop_device sync done\n",
2914                     skdev->name);
2915                 break;
2916         default:


4503  *
4504  * Name:        skd_wait_for_s1120, wait for device to finish
4505  *              its initialization.
4506  *
4507  * Inputs:      skdev           - device state structure.
4508  *
4509  * Returns:     DDI_SUCCESS or DDI_FAILURE.
4510  *
4511  */
4512 static int
4513 skd_wait_for_s1120(skd_device_t *skdev)
4514 {
4515         clock_t cur_ticks, tmo;
4516         int     loop_cntr = 0;
4517         int     rc = DDI_FAILURE;
4518 
4519         mutex_enter(&skdev->skd_internalio_mutex);
4520 
4521         while (skdev->gendisk_on == 0) {
4522                 cur_ticks = ddi_get_lbolt();
4523                 tmo = cur_ticks + drv_sectohz(1);
4524                 if (cv_timedwait(&skdev->cv_waitq,
4525                     &skdev->skd_internalio_mutex, tmo) == -1) {
4526                         /* Oops - timed out */
4527                         if (loop_cntr++ > 10)
4528                                 break;
4529                 }
4530         }
4531 
4532         mutex_exit(&skdev->skd_internalio_mutex);
4533 
4534         if (skdev->gendisk_on == 1)
4535                 rc = DDI_SUCCESS;
4536 
4537         return (rc);
4538 }
4539 
4540 /*
4541  *
4542  * Name:        skd_update_props, updates certain device properties.
4543  *