void load_platform_drivers(void) { dev_info_t *dip; /* dip of the isa driver */ /* * Install power driver which handles the power button. */ if (i_ddi_attach_hw_nodes("power") != DDI_SUCCESS) cmn_err(CE_WARN, "Failed to install \"power\" driver."); (void) ddi_hold_driver(ddi_name_to_major("power")); /* * It is OK to return error because 'us' driver is not available * in all clusters (e.g. missing in Core cluster). */ (void) i_ddi_attach_hw_nodes("us"); if (i_ddi_attach_hw_nodes("grbeep") != DDI_SUCCESS) cmn_err(CE_WARN, "Failed to install \"beep\" driver."); /* * mc-us3i must stay loaded for plat_get_mem_unum() */ if (i_ddi_attach_hw_nodes("mc-us3i") != DDI_SUCCESS) cmn_err(CE_WARN, "mc-us3i driver failed to install"); (void) ddi_hold_driver(ddi_name_to_major("mc-us3i")); /* * Install Isa driver. This is required for the southbridge IDE * workaround - to reset the IDE channel during IDE bus reset. * Panic the system in case ISA driver could not be loaded or * any problem in accessing its pci config space. Since the register * to reset the channel for IDE is in ISA config space!. */ dip = e_ddi_hold_devi_by_path(ENCHILADA_ISA_PATHNAME, 0); if (dip == NULL) { cmn_err(CE_PANIC, "Could not install the isa driver\n"); return; } if (pci_config_setup(dip, &isa_handle) != DDI_SUCCESS) { cmn_err(CE_PANIC, "Could not get the config space of isa\n"); return; } }
/* * Validate a major number and also verify if * it is a STREAMS device. * Return values: 0 if a valid STREAMS dev * error code otherwise */ static int valid_major(major_t major) { int ret = 0; if (etoimajor(major) == -1) return (EINVAL); /* * attempt to load the driver 'major' and verify that * it is a STREAMS driver. */ if (ddi_hold_driver(major) == NULL) return (EINVAL); if (!STREAMSTAB(major)) ret = ENOSTR; ddi_rele_driver(major); return (ret); }
void load_platform_drivers(void) { dev_info_t *dip; /* dip of the isa driver */ /* * Install 'us' driver. */ (void) i_ddi_attach_hw_nodes("us"); /* * mc-us3i must stay loaded for plat_get_mem_unum() */ if (i_ddi_attach_hw_nodes("mc-us3i") != DDI_SUCCESS) cmn_err(CE_WARN, "mc-us3i driver failed to install"); (void) ddi_hold_driver(ddi_name_to_major("mc-us3i")); /* * Install Isa driver. This is required for the southbridge IDE * workaround - to reset the IDE channel during IDE bus reset. * Panic the system in case ISA driver could not be loaded or * any problem in accessing its pci config space. Since the register * to reset the channel for IDE is in ISA config space!. */ dip = e_ddi_hold_devi_by_path(SCHUMACHER_ISA_PATHNAME, 0); if (dip == NULL) { cmn_err(CE_PANIC, "Could not install the isa driver\n"); return; } if (pci_config_setup(dip, &isa_handle) != DDI_SUCCESS) { cmn_err(CE_PANIC, "Could not get the config space of isa\n"); return; } }
void load_platform_drivers(void) { /* * It is OK to return error because 'us' driver is not available * in all clusters (e.g. missing in Core cluster). */ (void) i_ddi_attach_hw_nodes("us"); /* * mc-us3i must stay loaded for plat_get_mem_unum() */ if (i_ddi_attach_hw_nodes("mc-us3i") != DDI_SUCCESS) cmn_err(CE_WARN, "mc-us3i driver failed to install"); (void) ddi_hold_driver(ddi_name_to_major("mc-us3i")); /* * load the power button driver */ if (i_ddi_attach_hw_nodes("power") != DDI_SUCCESS) cmn_err(CE_WARN, "power button driver failed to install"); (void) ddi_hold_driver(ddi_name_to_major("power")); /* * load the GPIO driver for the ALOM reset and watchdog lines */ if (i_ddi_attach_hw_nodes("pmugpio") != DDI_SUCCESS) cmn_err(CE_WARN, "pmugpio failed to install"); else { extern int watchdog_enable, watchdog_available; extern int disable_watchdog_on_exit; /* * Disable an active h/w watchdog timer upon exit to OBP. */ disable_watchdog_on_exit = 1; watchdog_enable = 1; watchdog_available = 1; } (void) ddi_hold_driver(ddi_name_to_major("pmugpio")); /* * Figure out which mi2cv dip is shared with OBP for the nvram * device, so the lock can be acquired. */ shared_mi2cv_dip = e_ddi_hold_devi_by_path(SHARED_MI2CV_PATH, 0); /* * Load the environmentals driver (rmclomv) * * We need this driver to handle events from the RMC when state * changes occur in the environmental data. */ if (i_ddi_attach_hw_nodes("rmc_comm") != DDI_SUCCESS) { cmn_err(CE_WARN, "rmc_comm failed to install"); } else { (void) ddi_hold_driver(ddi_name_to_major("rmc_comm")); if (e_ddi_hold_devi_by_path(RMCLOMV_PATHNAME, 0) == NULL) { cmn_err(CE_WARN, "Could not install rmclomv driver\n"); } } /* * These two dummy functions are loaded over the original * todm5823 set and clear_power_alarm functions. On Boston, * these functionalities are not supported. * The load_platform_drivers(void) is called from post_startup() * which is after all the initialization of the tod module is * finished, then we replace 2 of the tod_ops function pointers * with our dummy version. */ tod_ops.tod_set_power_alarm = dummy_todm5823_set_power_alarm; tod_ops.tod_clear_power_alarm = dummy_todm5823_clear_power_alarm; /* * create a handle to the rmc_comm_request_nowait() function * inside the rmc_comm module. * * The Seattle/Boston todm5823 driver will use this handle to * use the rmc_comm_request_nowait() function to send time/date * updates to ALOM. */ rmc_req_now = (int (*)(rmc_comm_msg_t *, uint8_t)) modgetsymvalue("rmc_comm_request_nowait", 0); }