Print this page
XXXX introduce drv_sectohz


4974                     (uint_t (*)(caddr_t))gem_intr,
4975                     (caddr_t)dp) != DDI_SUCCESS) {
4976                         cmn_err(CE_WARN, "!%s: ddi_add_softintr failed",
4977                             dp->name);
4978                         goto err_unregister;
4979                 }
4980         } else if ((dp->misc_flag & GEM_NOINTR) == 0) {
4981                 if (ddi_add_intr(dip, 0, NULL, NULL,
4982                     (uint_t (*)(caddr_t))gem_intr,
4983                     (caddr_t)dp) != DDI_SUCCESS) {
4984                         cmn_err(CE_WARN, "!%s: ddi_add_intr failed", dp->name);
4985                         goto err_unregister;
4986                 }
4987         } else {
4988                 /*
4989                  * Dont use interrupt.
4990                  * schedule first call of gem_intr_watcher
4991                  */
4992                 dp->intr_watcher_id =
4993                     timeout((void (*)(void *))gem_intr_watcher,
4994                     (void *)dp, drv_usectohz(3*1000000));
4995         }
4996 
4997         /* link this device to dev_info */
4998         dp->next = (struct gem_dev *)ddi_get_driver_private(dip);
4999         dp->port = port;
5000         ddi_set_driver_private(dip, (caddr_t)dp);
5001 
5002         /* reset mii phy and start mii link watcher */
5003         gem_mii_start(dp);
5004 
5005         DPRINTF(2, (CE_CONT, "!gem_do_attach: return: success"));
5006         return (dp);
5007 
5008 err_unregister:
5009         (void) mac_unregister(dp->mh);
5010 err_release_stats:
5011         /* release NDD resources */
5012         gem_nd_cleanup(dp);
5013 
5014 err_free_ring:


5187                 if ((*dp->gc.gc_reset_chip)(dp) != GEM_SUCCESS) {
5188                         cmn_err(CE_WARN, "%s: %s: failed to reset chip",
5189                             dp->name, __func__);
5190                         mutex_exit(&dp->intrlock);
5191                         goto err;
5192                 }
5193                 mutex_exit(&dp->intrlock);
5194 
5195                 /* initialize mii phy because we are just after power up */
5196                 if (dp->gc.gc_mii_init) {
5197                         (void) (*dp->gc.gc_mii_init)(dp);
5198                 }
5199 
5200                 if (dp->misc_flag & GEM_NOINTR) {
5201                         /*
5202                          * schedule first call of gem_intr_watcher
5203                          * instead of interrupts.
5204                          */
5205                         dp->intr_watcher_id =
5206                             timeout((void (*)(void *))gem_intr_watcher,
5207                             (void *)dp, drv_usectohz(3*1000000));
5208                 }
5209 
5210                 /* restart mii link watcher */
5211                 gem_mii_start(dp);
5212 
5213                 /* restart mac */
5214                 mutex_enter(&dp->intrlock);
5215 
5216                 if (gem_mac_init(dp) != GEM_SUCCESS) {
5217                         mutex_exit(&dp->intrlock);
5218                         goto err_reset;
5219                 }
5220                 dp->nic_state = NIC_STATE_INITIALIZED;
5221 
5222                 /* setup media mode if the link have been up */
5223                 if (dp->mii_state == MII_STATE_LINKUP) {
5224                         if ((dp->gc.gc_set_media)(dp) != GEM_SUCCESS) {
5225                                 mutex_exit(&dp->intrlock);
5226                                 goto err_reset;
5227                         }




4974                     (uint_t (*)(caddr_t))gem_intr,
4975                     (caddr_t)dp) != DDI_SUCCESS) {
4976                         cmn_err(CE_WARN, "!%s: ddi_add_softintr failed",
4977                             dp->name);
4978                         goto err_unregister;
4979                 }
4980         } else if ((dp->misc_flag & GEM_NOINTR) == 0) {
4981                 if (ddi_add_intr(dip, 0, NULL, NULL,
4982                     (uint_t (*)(caddr_t))gem_intr,
4983                     (caddr_t)dp) != DDI_SUCCESS) {
4984                         cmn_err(CE_WARN, "!%s: ddi_add_intr failed", dp->name);
4985                         goto err_unregister;
4986                 }
4987         } else {
4988                 /*
4989                  * Dont use interrupt.
4990                  * schedule first call of gem_intr_watcher
4991                  */
4992                 dp->intr_watcher_id =
4993                     timeout((void (*)(void *))gem_intr_watcher,
4994                     (void *)dp, drv_sectohz(3));
4995         }
4996 
4997         /* link this device to dev_info */
4998         dp->next = (struct gem_dev *)ddi_get_driver_private(dip);
4999         dp->port = port;
5000         ddi_set_driver_private(dip, (caddr_t)dp);
5001 
5002         /* reset mii phy and start mii link watcher */
5003         gem_mii_start(dp);
5004 
5005         DPRINTF(2, (CE_CONT, "!gem_do_attach: return: success"));
5006         return (dp);
5007 
5008 err_unregister:
5009         (void) mac_unregister(dp->mh);
5010 err_release_stats:
5011         /* release NDD resources */
5012         gem_nd_cleanup(dp);
5013 
5014 err_free_ring:


5187                 if ((*dp->gc.gc_reset_chip)(dp) != GEM_SUCCESS) {
5188                         cmn_err(CE_WARN, "%s: %s: failed to reset chip",
5189                             dp->name, __func__);
5190                         mutex_exit(&dp->intrlock);
5191                         goto err;
5192                 }
5193                 mutex_exit(&dp->intrlock);
5194 
5195                 /* initialize mii phy because we are just after power up */
5196                 if (dp->gc.gc_mii_init) {
5197                         (void) (*dp->gc.gc_mii_init)(dp);
5198                 }
5199 
5200                 if (dp->misc_flag & GEM_NOINTR) {
5201                         /*
5202                          * schedule first call of gem_intr_watcher
5203                          * instead of interrupts.
5204                          */
5205                         dp->intr_watcher_id =
5206                             timeout((void (*)(void *))gem_intr_watcher,
5207                             (void *)dp, drv_sectohz(3));
5208                 }
5209 
5210                 /* restart mii link watcher */
5211                 gem_mii_start(dp);
5212 
5213                 /* restart mac */
5214                 mutex_enter(&dp->intrlock);
5215 
5216                 if (gem_mac_init(dp) != GEM_SUCCESS) {
5217                         mutex_exit(&dp->intrlock);
5218                         goto err_reset;
5219                 }
5220                 dp->nic_state = NIC_STATE_INITIALIZED;
5221 
5222                 /* setup media mode if the link have been up */
5223                 if (dp->mii_state == MII_STATE_LINKUP) {
5224                         if ((dp->gc.gc_set_media)(dp) != GEM_SUCCESS) {
5225                                 mutex_exit(&dp->intrlock);
5226                                 goto err_reset;
5227                         }