Changeset 729fa2d6 in mainline for uspace/srv/drivers/root/root.c
- Timestamp:
- 2010-02-25T14:29:23Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 92413de
- Parents:
- 924c75e1
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/drivers/root/root.c
r924c75e1 r729fa2d6 48 48 #include <ctype.h> 49 49 50 #include <devman.h> 50 51 #include <ipc/devman.h> 51 52 … … 149 150 150 151 151 // TODO put this to library (like in device mapper) 152 static int devman_phone_driver = -1; 153 static int devman_phone_client = -1; 154 155 int devman_get_phone(devman_interface_t iface, unsigned int flags) 156 { 157 switch (iface) { 158 case DEVMAN_DRIVER: 159 if (devman_phone_driver >= 0) 160 return devman_phone_driver; 161 162 if (flags & IPC_FLAG_BLOCKING) 163 devman_phone_driver = ipc_connect_me_to_blocking(PHONE_NS, 164 SERVICE_DEVMAN, DEVMAN_DRIVER, 0); 165 else 166 devman_phone_driver = ipc_connect_me_to(PHONE_NS, 167 SERVICE_DEVMAN, DEVMAN_DRIVER, 0); 168 169 return devman_phone_driver; 170 case DEVMAN_CLIENT: 171 if (devman_phone_client >= 0) 172 return devman_phone_client; 173 174 if (flags & IPC_FLAG_BLOCKING) 175 devman_phone_client = ipc_connect_me_to_blocking(PHONE_NS, 176 SERVICE_DEVMAN, DEVMAN_CLIENT, 0); 177 else 178 devman_phone_client = ipc_connect_me_to(PHONE_NS, 179 SERVICE_DEVMAN, DEVMAN_CLIENT, 0); 180 181 return devman_phone_client; 182 default: 152 153 int driver_main(driver_t *drv) 154 { 155 // remember driver structure - driver_ops will be called by generic handler for incoming connections 156 driver = drv; 157 158 // register driver by device manager with generic handler for incoming connections 159 printf("%s: sending registration request to devman.\n", driver->name); 160 devman_driver_register(driver->name, driver_connection); 161 162 async_manager(); 163 164 // Never reached 165 return 0; 166 167 } 168 169 //////////////////////////////////////// 170 // ROOT driver 171 //////////////////////////////////////// 172 173 #define NAME "root" 174 175 176 177 bool root_add_device(device_t *dev) 178 { 179 // TODO add root device and register its children 180 return true; 181 } 182 183 static driver_ops_t root_ops = { 184 .add_device = &root_add_device 185 }; 186 187 static driver_t root_driver = { 188 .name = NAME, 189 .driver_ops = &root_ops 190 }; 191 192 bool root_init() 193 { 194 // TODO driver initialization 195 return true; 196 } 197 198 int main(int argc, char *argv[]) 199 { 200 printf(NAME ": HelenOS root device driver\n"); 201 if (!root_init()) { 202 printf(NAME ": Error while initializing driver.\n"); 183 203 return -1; 184 204 } 185 }186 187 /** Register new driver with device manager. */188 int devman_driver_register(const char *name, async_client_conn_t conn)189 {190 int phone = devman_get_phone(DEVMAN_DRIVER, IPC_FLAG_BLOCKING);191 192 if (phone < 0)193 return phone;194 195 async_serialize_start();196 197 ipc_call_t answer;198 aid_t req = async_send_2(phone, DEVMAN_DRIVER_REGISTER, 0, 0, &answer);199 200 ipcarg_t retval = async_data_write_start(phone, name, str_size(name));201 if (retval != EOK) {202 async_wait_for(req, NULL);203 async_serialize_end();204 return -1;205 }206 207 async_set_client_connection(conn);208 209 ipcarg_t callback_phonehash;210 ipc_connect_to_me(phone, 0, 0, 0, &callback_phonehash);211 async_wait_for(req, &retval);212 213 async_serialize_end();214 215 return retval;216 }217 218 int driver_main(driver_t *drv)219 {220 // remember driver structure - driver_ops will be called by generic handler for incoming connections221 driver = drv;222 223 // register driver by device manager with generic handler for incoming connections224 devman_driver_register(driver->name, driver_connection);225 226 async_manager();227 228 // Never reached229 return 0;230 231 }232 233 ////////////////////////////////////////234 // ROOT driver235 ////////////////////////////////////////236 237 #define NAME "root"238 239 static driver_t root_driver;240 241 bool root_add_device(device_t *dev)242 {243 // TODO244 return true;245 }246 247 bool root_init(driver_t *drv, const char *name)248 {249 // TODO initialize driver structure250 251 return true;252 }253 254 int main(int argc, char *argv[])255 {256 printf(NAME ": HelenOS root device driver\n");257 if (!root_init(&root_driver, argv[0])) {258 printf(NAME ": Error while initializing driver\n");259 return -1;260 }261 205 262 206 return driver_main(&root_driver); 263 264 } 207 }
Note:
See TracChangeset
for help on using the changeset viewer.