Changeset b25970f in mainline for uspace/drv
- Timestamp:
- 2018-10-29T14:11:39Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 94ab1fee
- Parents:
- 184f2f8a
- git-author:
- Jiri Svoboda <jiri@…> (2018-10-28 22:10:25)
- git-committer:
- Jiri Svoboda <jiri@…> (2018-10-29 14:11:39)
- Location:
- uspace/drv
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/isa/isa.c
r184f2f8a rb25970f 1 1 /* 2 * Copyright (c) 2018 Jiri Svoboda 2 3 * Copyright (c) 2010 Lenka Trochtova 3 * Copyright (c) 2011 Jiri Svoboda4 4 * Copyright (c) 2011 Jan Vesely 5 5 * All rights reserved. … … 697 697 } 698 698 699 static errno_t isa_dev_add(ddf_dev_t *dev) 700 { 701 async_sess_t *sess; 699 static errno_t isa_read_pci_cfg(isa_bus_t *isa, async_sess_t *sess) 700 { 702 701 errno_t rc; 703 704 ddf_msg(LVL_DEBUG, "isa_dev_add, device handle = %d",705 (int) ddf_dev_get_handle(dev));706 707 isa_bus_t *isa = ddf_dev_data_alloc(dev, sizeof(isa_bus_t));708 if (isa == NULL)709 return ENOMEM;710 711 fibril_mutex_initialize(&isa->mutex);712 isa->dev = dev;713 list_initialize(&isa->functions);714 715 sess = ddf_dev_parent_sess_get(dev);716 if (sess == NULL) {717 ddf_msg(LVL_ERROR, "isa_dev_add failed to connect to the "718 "parent driver.");719 return ENOENT;720 }721 702 722 703 rc = pci_config_space_read_16(sess, PCI_VENDOR_ID, &isa->pci_vendor_id); … … 733 714 return rc; 734 715 716 return EOK; 717 } 718 719 static errno_t isa_dev_add(ddf_dev_t *dev) 720 { 721 async_sess_t *sess; 722 errno_t rc; 723 724 ddf_msg(LVL_DEBUG, "isa_dev_add, device handle = %d", 725 (int) ddf_dev_get_handle(dev)); 726 727 isa_bus_t *isa = ddf_dev_data_alloc(dev, sizeof(isa_bus_t)); 728 if (isa == NULL) 729 return ENOMEM; 730 731 fibril_mutex_initialize(&isa->mutex); 732 isa->dev = dev; 733 list_initialize(&isa->functions); 734 735 sess = ddf_dev_parent_sess_get(dev); 736 if (sess == NULL) { 737 ddf_msg(LVL_ERROR, "isa_dev_add failed to connect to the " 738 "parent driver."); 739 return ENOENT; 740 } 741 742 rc = isa_read_pci_cfg(isa, sess); 743 if (rc != EOK) { 744 ddf_msg(LVL_NOTE, "Cannot read PCI config. Assuming ISA classic."); 745 isa->pci_vendor_id = 0; 746 isa->pci_device_id = 0; 747 isa->pci_class = BASE_CLASS_BRIDGE; 748 isa->pci_subclass = SUB_CLASS_BRIDGE_ISA; 749 } 750 735 751 rc = pio_window_get(sess, &isa->pio_win); 736 752 if (rc != EOK) { -
uspace/drv/bus/isa/isa.ma
r184f2f8a rb25970f 1 # Classic ISA 2 10 isa 3 1 4 # ISA bridge 2 5 10 pci/class=06&subclass=01 -
uspace/drv/platform/pc/pc.c
r184f2f8a rb25970f 1 1 /* 2 * Copyright (c) 2018 Jiri Svoboda 2 3 * Copyright (c) 2010 Lenka Trochtova 3 4 * All rights reserved. … … 93 94 }; 94 95 95 static pc_fun_t pci_data = {96 static pc_fun_t sys_data = { 96 97 .hw_resources = { 97 98 sizeof(pci_conf_regs) / sizeof(pci_conf_regs[0]), … … 151 152 static ddf_dev_ops_t pc_fun_ops; 152 153 153 static bool 154 pc_add_fun(ddf_dev_t *dev, const char *name, const char *str_match_id, 155 pc_fun_t *fun_proto) 156 { 157 ddf_msg(LVL_DEBUG, "Adding new function '%s'.", name); 158 154 static errno_t pc_add_sysbus(ddf_dev_t *dev) 155 { 159 156 ddf_fun_t *fnode = NULL; 160 157 errno_t rc; 161 158 159 ddf_msg(LVL_DEBUG, "Adding system bus."); 160 162 161 /* Create new device. */ 163 fnode = ddf_fun_create(dev, fun_inner, name); 164 if (fnode == NULL) 165 goto failure; 162 fnode = ddf_fun_create(dev, fun_inner, "sys"); 163 if (fnode == NULL) { 164 rc = ENOMEM; 165 goto error; 166 } 166 167 167 168 pc_fun_t *fun = ddf_fun_data_alloc(fnode, sizeof(pc_fun_t)); 168 *fun = *fun_proto;169 170 /* Add match ID */171 rc = ddf_fun_add_match_id(fnode, str_match_id, 100);169 *fun = sys_data; 170 171 /* Add match IDs */ 172 rc = ddf_fun_add_match_id(fnode, "intel_pci", 100); 172 173 if (rc != EOK) 173 goto failure; 174 goto error; 175 176 rc = ddf_fun_add_match_id(fnode, "isa", 10); 177 if (rc != EOK) 178 goto error; 174 179 175 180 /* Set provided operations to the device. */ … … 177 182 178 183 /* Register function. */ 179 if (ddf_fun_bind(fnode) != EOK) { 180 ddf_msg(LVL_ERROR, "Failed binding function %s.", name); 181 goto failure; 182 } 183 184 return true; 185 186 failure: 184 rc = ddf_fun_bind(fnode); 185 if (rc != EOK) { 186 ddf_msg(LVL_ERROR, "Failed binding system bus function."); 187 goto error; 188 } 189 190 return EOK; 191 192 error: 187 193 if (fnode != NULL) 188 194 ddf_fun_destroy(fnode); 189 195 190 ddf_msg(LVL_ERROR, "Failed adding function '%s'.", name); 191 192 return false; 193 } 194 195 static bool pc_add_functions(ddf_dev_t *dev) 196 { 197 return pc_add_fun(dev, "pci0", "intel_pci", &pci_data); 196 ddf_msg(LVL_ERROR, "Failed adding system bus."); 197 return rc; 198 } 199 200 static errno_t pc_add_functions(ddf_dev_t *dev) 201 { 202 errno_t rc; 203 204 rc = pc_add_sysbus(dev); 205 if (rc != EOK) 206 return rc; 207 208 return EOK; 198 209 } 199 210 … … 206 217 static errno_t pc_dev_add(ddf_dev_t *dev) 207 218 { 219 errno_t rc; 220 208 221 ddf_msg(LVL_DEBUG, "pc_dev_add, device handle = %d", 209 222 (int)ddf_dev_get_handle(dev)); 210 223 211 224 /* Register functions. */ 212 if (!pc_add_functions(dev)) { 225 rc = pc_add_functions(dev); 226 if (rc != EOK) { 213 227 ddf_msg(LVL_ERROR, "Failed to add functions for PC platform."); 228 return rc; 214 229 } 215 230
Note:
See TracChangeset
for help on using the changeset viewer.