Changeset ad7a6c9 in mainline for uspace/drv/root/root.c
- Timestamp:
- 2011-03-30T13:10:24Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4ae90f9
- Parents:
- 6e50466 (diff), d6b81941 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/root/root.c
r6e50466 rad7a6c9 2 2 * Copyright (c) 2010 Lenka Trochtova 3 3 * Copyright (c) 2010 Vojtech Horky 4 * Copyright (c) 2011 Jiri Svoboda 4 5 * All rights reserved. 5 6 * … … 44 45 #include <stdlib.h> 45 46 #include <str.h> 47 #include <str_error.h> 46 48 #include <ctype.h> 47 49 #include <macros.h> 48 50 #include <inttypes.h> 49 50 #include <driver.h> 51 #include <sysinfo.h> 52 53 #include <ddf/driver.h> 51 54 #include <devman.h> 52 55 #include <ipc/devman.h> … … 54 57 #define NAME "root" 55 58 56 #define PLATFORM_ DEVICE_NAME "hw"57 #define PLATFORM_ DEVICE_MATCH_ID STRING(UARCH)58 #define PLATFORM_ DEVICE_MATCH_SCORE 10059 60 #define VIRTUAL_ DEVICE_NAME "virt"61 #define VIRTUAL_ DEVICE_MATCH_ID "rootvirt"62 #define VIRTUAL_ DEVICE_MATCH_SCORE 10063 64 static int root_add_device(d evice_t *dev);59 #define PLATFORM_FUN_NAME "hw" 60 #define PLATFORM_FUN_MATCH_ID_FMT "platform/%s" 61 #define PLATFORM_FUN_MATCH_SCORE 100 62 63 #define VIRTUAL_FUN_NAME "virt" 64 #define VIRTUAL_FUN_MATCH_ID "rootvirt" 65 #define VIRTUAL_FUN_MATCH_SCORE 100 66 67 static int root_add_device(ddf_dev_t *dev); 65 68 66 69 /** The root device driver's standard operations. */ … … 75 78 }; 76 79 77 /** Create the device which represents the root of virtual device tree. 78 * 79 * @param parent Parent of the newly created device. 80 * @return Error code. 81 */ 82 static int add_virtual_root_child(device_t *parent) 83 { 84 printf(NAME ": adding new child for virtual devices.\n"); 85 printf(NAME ": device node is `%s' (%d %s)\n", VIRTUAL_DEVICE_NAME, 86 VIRTUAL_DEVICE_MATCH_SCORE, VIRTUAL_DEVICE_MATCH_ID); 87 88 int res = child_device_register_wrapper(parent, VIRTUAL_DEVICE_NAME, 89 VIRTUAL_DEVICE_MATCH_ID, VIRTUAL_DEVICE_MATCH_SCORE); 90 91 return res; 92 } 93 94 /** Create the device which represents the root of HW device tree. 95 * 96 * @param parent Parent of the newly created device. 97 * @return 0 on success, negative error number otherwise. 98 */ 99 static int add_platform_child(device_t *parent) 100 { 101 printf(NAME ": adding new child for platform device.\n"); 102 printf(NAME ": device node is `%s' (%d %s)\n", PLATFORM_DEVICE_NAME, 103 PLATFORM_DEVICE_MATCH_SCORE, PLATFORM_DEVICE_MATCH_ID); 104 105 int res = child_device_register_wrapper(parent, PLATFORM_DEVICE_NAME, 106 PLATFORM_DEVICE_MATCH_ID, PLATFORM_DEVICE_MATCH_SCORE); 107 108 return res; 80 /** Create the function which represents the root of virtual device tree. 81 * 82 * @param dev Device 83 * @return EOK on success or negative error code 84 */ 85 static int add_virtual_root_fun(ddf_dev_t *dev) 86 { 87 const char *name = VIRTUAL_FUN_NAME; 88 ddf_fun_t *fun; 89 int rc; 90 91 printf(NAME ": adding new function for virtual devices.\n"); 92 printf(NAME ": function node is `%s' (%d %s)\n", name, 93 VIRTUAL_FUN_MATCH_SCORE, VIRTUAL_FUN_MATCH_ID); 94 95 fun = ddf_fun_create(dev, fun_inner, name); 96 if (fun == NULL) { 97 printf(NAME ": error creating function %s\n", name); 98 return ENOMEM; 99 } 100 101 rc = ddf_fun_add_match_id(fun, VIRTUAL_FUN_MATCH_ID, 102 VIRTUAL_FUN_MATCH_SCORE); 103 if (rc != EOK) { 104 printf(NAME ": error adding match IDs to function %s\n", name); 105 ddf_fun_destroy(fun); 106 return rc; 107 } 108 109 rc = ddf_fun_bind(fun); 110 if (rc != EOK) { 111 printf(NAME ": error binding function %s: %s\n", name, 112 str_error(rc)); 113 ddf_fun_destroy(fun); 114 return rc; 115 } 116 117 return EOK; 118 } 119 120 /** Create the function which represents the root of HW device tree. 121 * 122 * @param dev Device 123 * @return EOK on success or negative error code 124 */ 125 static int add_platform_fun(ddf_dev_t *dev) 126 { 127 char *match_id; 128 char *platform; 129 size_t platform_size; 130 131 const char *name = PLATFORM_FUN_NAME; 132 ddf_fun_t *fun; 133 int rc; 134 135 /* Get platform name from sysinfo. */ 136 platform = sysinfo_get_data("platform", &platform_size); 137 if (platform == NULL) { 138 printf(NAME ": Failed to obtain platform name.\n"); 139 return ENOENT; 140 } 141 142 /* Null-terminate string. */ 143 platform = realloc(platform, platform_size + 1); 144 if (platform == NULL) { 145 printf(NAME ": Memory allocation failed.\n"); 146 return ENOMEM; 147 } 148 149 platform[platform_size] = '\0'; 150 151 /* Construct match ID. */ 152 if (asprintf(&match_id, PLATFORM_FUN_MATCH_ID_FMT, platform) == -1) { 153 printf(NAME ": Memory allocation failed.\n"); 154 return ENOMEM; 155 } 156 157 /* Add function. */ 158 printf(NAME ": adding platform function\n"); 159 printf(NAME ": function node is `%s' (%d %s)\n", PLATFORM_FUN_NAME, 160 PLATFORM_FUN_MATCH_SCORE, match_id); 161 162 fun = ddf_fun_create(dev, fun_inner, name); 163 if (fun == NULL) { 164 printf(NAME ": error creating function %s\n", name); 165 return ENOMEM; 166 } 167 168 rc = ddf_fun_add_match_id(fun, match_id, PLATFORM_FUN_MATCH_SCORE); 169 if (rc != EOK) { 170 printf(NAME ": error adding match IDs to function %s\n", name); 171 ddf_fun_destroy(fun); 172 return rc; 173 } 174 175 rc = ddf_fun_bind(fun); 176 if (rc != EOK) { 177 printf(NAME ": error binding function %s: %s\n", name, 178 str_error(rc)); 179 ddf_fun_destroy(fun); 180 return rc; 181 } 182 183 return EOK; 109 184 } 110 185 … … 114 189 * of HW and pseudo devices). 115 190 */ 116 static int root_add_device(d evice_t *dev)191 static int root_add_device(ddf_dev_t *dev) 117 192 { 118 193 printf(NAME ": root_add_device, device handle=%" PRIun "\n", 119 194 dev->handle); 120 195 121 196 /* 122 197 * Register virtual devices root. … … 124 199 * vital for the system. 125 200 */ 126 add_virtual_root_ child(dev);201 add_virtual_root_fun(dev); 127 202 128 203 /* Register root device's children. */ 129 int res = add_platform_ child(dev);204 int res = add_platform_fun(dev); 130 205 if (EOK != res) 131 206 printf(NAME ": failed to add child device for platform.\n"); 132 207 133 208 return res; 134 209 } … … 137 212 { 138 213 printf(NAME ": HelenOS root device driver\n"); 139 return d river_main(&root_driver);214 return ddf_driver_main(&root_driver); 140 215 } 141 216
Note:
See TracChangeset
for help on using the changeset viewer.