Changeset 83a2f43 in mainline for uspace/lib/drv
- Timestamp:
- 2011-02-15T19:43:50Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- af6b5157
- Parents:
- 34588a80
- Location:
- uspace/lib/drv
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/drv/generic/driver.c
r34588a80 r83a2f43 1 1 /* 2 2 * Copyright (c) 2010 Lenka Trochtova 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 76 77 }; 77 78 78 static d evice_t *create_device(void);79 static void delete_device(d evice_t *);79 static ddf_dev_t *create_device(void); 80 static void delete_device(ddf_dev_t *); 80 81 81 82 static void driver_irq_handler(ipc_callid_t iid, ipc_call_t *icall) … … 152 153 153 154 interrupt_context_t * 154 find_interrupt_context(interrupt_context_list_t *list, d evice_t *dev, int irq)155 find_interrupt_context(interrupt_context_list_t *list, ddf_dev_t *dev, int irq) 155 156 { 156 157 fibril_mutex_lock(&list->mutex); … … 174 175 175 176 int 176 register_interrupt_handler(d evice_t *dev, int irq, interrupt_handler_t *handler,177 register_interrupt_handler(ddf_dev_t *dev, int irq, interrupt_handler_t *handler, 177 178 irq_code_t *pseudocode) 178 179 { … … 197 198 } 198 199 199 int unregister_interrupt_handler(d evice_t *dev, int irq)200 int unregister_interrupt_handler(ddf_dev_t *dev, int irq) 200 201 { 201 202 interrupt_context_t *ctx = find_interrupt_context(&interrupt_contexts, … … 211 212 } 212 213 213 static void add_to_functions_list( function_t *fun)214 static void add_to_functions_list(ddf_fun_t *fun) 214 215 { 215 216 fibril_mutex_lock(&functions_mutex); … … 218 219 } 219 220 220 static void remove_from_functions_list( function_t *fun)221 static void remove_from_functions_list(ddf_fun_t *fun) 221 222 { 222 223 fibril_mutex_lock(&functions_mutex); … … 225 226 } 226 227 227 static function_t *driver_get_function(link_t *functions, devman_handle_t handle)228 { 229 function_t *fun = NULL;228 static ddf_fun_t *driver_get_function(link_t *functions, devman_handle_t handle) 229 { 230 ddf_fun_t *fun = NULL; 230 231 printf("driver_get_function handle=%" PRIun "\n", handle); 231 232 … … 234 235 235 236 while (link != functions) { 236 fun = list_get_instance(link, function_t, link);237 fun = list_get_instance(link, ddf_fun_t, link); 237 238 printf(" - fun handle %" PRIun "\n", fun->handle); 238 239 if (fun->handle == handle) { … … 257 258 devman_handle_t parent_fun_handle = IPC_GET_ARG2(*icall); 258 259 259 d evice_t *dev = create_device();260 ddf_dev_t *dev = create_device(); 260 261 dev->handle = dev_handle; 261 262 … … 318 319 */ 319 320 devman_handle_t handle = IPC_GET_ARG2(*icall); 320 function_t *fun = driver_get_function(&functions, handle);321 ddf_fun_t *fun = driver_get_function(&functions, handle); 321 322 322 323 if (fun == NULL) { … … 461 462 * @return The device structure. 462 463 */ 463 static d evice_t *create_device(void)464 { 465 d evice_t *dev;466 467 dev = malloc(sizeof(d evice_t));464 static ddf_dev_t *create_device(void) 465 { 466 ddf_dev_t *dev; 467 468 dev = malloc(sizeof(ddf_dev_t)); 468 469 if (dev == NULL) 469 470 return NULL; 470 471 471 memset(dev, 0, sizeof(d evice_t));472 memset(dev, 0, sizeof(ddf_dev_t)); 472 473 return dev; 473 474 } … … 477 478 * @return The device structure. 478 479 */ 479 static function_t *create_function(void)480 { 481 function_t *fun;482 483 fun = calloc(1, sizeof( function_t));480 static ddf_fun_t *create_function(void) 481 { 482 ddf_fun_t *fun; 483 484 fun = calloc(1, sizeof(ddf_fun_t)); 484 485 if (fun == NULL) 485 486 return NULL; … … 495 496 * @param dev The device structure. 496 497 */ 497 static void delete_device(d evice_t *dev)498 static void delete_device(ddf_dev_t *dev) 498 499 { 499 500 free(dev); … … 504 505 * @param dev The device structure. 505 506 */ 506 static void delete_function( function_t *fun)507 static void delete_function(ddf_fun_t *fun) 507 508 { 508 509 clean_match_ids(&fun->match_ids); … … 535 536 * @return New function or @c NULL if memory is not available 536 537 */ 537 function_t *ddf_fun_create(device_t *dev, fun_type_t ftype, const char *name)538 { 539 function_t *fun;538 ddf_fun_t *ddf_fun_create(ddf_dev_t *dev, fun_type_t ftype, const char *name) 539 { 540 ddf_fun_t *fun; 540 541 541 542 fun = create_function(); … … 563 564 * @param fun Function to destroy 564 565 */ 565 void ddf_fun_destroy( function_t *fun)566 void ddf_fun_destroy(ddf_fun_t *fun) 566 567 { 567 568 assert(fun->bound == false); … … 569 570 } 570 571 571 void *function_get_ops( function_t *fun, dev_inferface_idx_t idx)572 void *function_get_ops(ddf_fun_t *fun, dev_inferface_idx_t idx) 572 573 { 573 574 assert(is_valid_iface_idx(idx)); … … 589 590 * @return EOK on success or negative error code 590 591 */ 591 int ddf_fun_bind( function_t *fun)592 int ddf_fun_bind(ddf_fun_t *fun) 592 593 { 593 594 assert(fun->name != NULL); … … 617 618 * @return EOK on success, ENOMEM if out of memory. 618 619 */ 619 int ddf_fun_add_match_id( function_t *fun, const char *match_id_str,620 int ddf_fun_add_match_id(ddf_fun_t *fun, const char *match_id_str, 620 621 int match_score) 621 622 { … … 637 638 638 639 /** Get default handler for client requests */ 639 remote_handler_t *function_get_default_handler( function_t *fun)640 remote_handler_t *function_get_default_handler(ddf_fun_t *fun) 640 641 { 641 642 if (fun->ops == NULL) … … 648 649 * Must only be called when the function is bound. 649 650 */ 650 int add_function_to_class(function_t *fun, const char *class_name)651 int ddf_fun_add_to_class(ddf_fun_t *fun, const char *class_name) 651 652 { 652 653 assert(fun->bound == true); … … 656 657 } 657 658 658 int d river_main(driver_t *drv)659 int ddf_driver_main(driver_t *drv) 659 660 { 660 661 /* -
uspace/lib/drv/generic/remote_char_dev.c
r34588a80 r83a2f43 41 41 #define MAX_CHAR_RW_COUNT 256 42 42 43 static void remote_char_read( function_t *, void *, ipc_callid_t, ipc_call_t *);44 static void remote_char_write( function_t *, void *, ipc_callid_t, ipc_call_t *);43 static void remote_char_read(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *); 44 static void remote_char_write(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *); 45 45 46 46 /** Remote character interface operations. */ … … 71 71 */ 72 72 static void 73 remote_char_read( function_t *fun, void *ops, ipc_callid_t callid,73 remote_char_read(ddf_fun_t *fun, void *ops, ipc_callid_t callid, 74 74 ipc_call_t *call) 75 75 { … … 118 118 */ 119 119 static void 120 remote_char_write( function_t *fun, void *ops, ipc_callid_t callid,120 remote_char_write(ddf_fun_t *fun, void *ops, ipc_callid_t callid, 121 121 ipc_call_t *call) 122 122 { -
uspace/lib/drv/generic/remote_hw_res.c
r34588a80 r83a2f43 39 39 #include "driver.h" 40 40 41 static void remote_hw_res_get_resource_list( function_t *, void *, ipc_callid_t,41 static void remote_hw_res_get_resource_list(ddf_fun_t *, void *, ipc_callid_t, 42 42 ipc_call_t *); 43 static void remote_hw_res_enable_interrupt( function_t *, void *, ipc_callid_t,43 static void remote_hw_res_enable_interrupt(ddf_fun_t *, void *, ipc_callid_t, 44 44 ipc_call_t *); 45 45 … … 55 55 }; 56 56 57 static void remote_hw_res_enable_interrupt( function_t *fun, void *ops,57 static void remote_hw_res_enable_interrupt(ddf_fun_t *fun, void *ops, 58 58 ipc_callid_t callid, ipc_call_t *call) 59 59 { … … 68 68 } 69 69 70 static void remote_hw_res_get_resource_list( function_t *fun, void *ops,70 static void remote_hw_res_get_resource_list(ddf_fun_t *fun, void *ops, 71 71 ipc_callid_t callid, ipc_call_t *call) 72 72 { -
uspace/lib/drv/include/dev_iface.h
r34588a80 r83a2f43 43 43 */ 44 44 45 struct function;45 struct ddf_fun; 46 46 47 47 /* … … 49 49 * devices driver. 50 50 */ 51 typedef void remote_iface_func_t(struct function *, void *, ipc_callid_t,51 typedef void remote_iface_func_t(struct ddf_fun *, void *, ipc_callid_t, 52 52 ipc_call_t *); 53 53 typedef remote_iface_func_t *remote_iface_func_ptr_t; 54 typedef void remote_handler_t(struct function *, ipc_callid_t, ipc_call_t *);54 typedef void remote_handler_t(struct ddf_fun *, ipc_callid_t, ipc_call_t *); 55 55 56 56 typedef struct { -
uspace/lib/drv/include/driver.h
r34588a80 r83a2f43 49 49 #include "dev_iface.h" 50 50 51 struct device; 52 typedef struct device device_t; 53 54 struct function; 55 typedef struct function function_t; 51 typedef struct ddf_dev ddf_dev_t; 52 typedef struct ddf_fun ddf_fun_t; 56 53 57 54 /* … … 60 57 61 58 /** Devices operations */ 62 typedef struct d evice_ops {59 typedef struct ddf_dev_ops { 63 60 /** 64 61 * Optional callback function called when a client is connecting to the 65 62 * device. 66 63 */ 67 int (*open)( function_t *);64 int (*open)(ddf_fun_t *); 68 65 69 66 /** … … 71 68 * the device. 72 69 */ 73 void (*close)( function_t *);70 void (*close)(ddf_fun_t *); 74 71 75 72 /** The table of standard interfaces implemented by the device. */ … … 82 79 */ 83 80 remote_handler_t *default_handler; 84 } device_ops_t; 85 81 } ddf_dev_ops_t; 86 82 87 83 /* … … 90 86 91 87 /** Device structure */ 92 struct d evice{88 struct ddf_dev { 93 89 /** 94 90 * Globally unique device identifier (assigned to the device by the … … 114 110 115 111 /** Function structure */ 116 struct function {112 struct ddf_fun { 117 113 /** True if bound to the device manager */ 118 114 bool bound; … … 121 117 122 118 /** Device which this function belogs to */ 123 d evice_t *dev;119 ddf_dev_t *dev; 124 120 125 121 /** Function type */ … … 132 128 void *driver_data; 133 129 /** Implementation of operations provided by this function */ 134 d evice_ops_t *ops;130 ddf_dev_ops_t *ops; 135 131 136 132 /** Link in the list of functions handled by the driver */ … … 145 141 typedef struct driver_ops { 146 142 /** Callback method for passing a new device to the device driver */ 147 int (*add_device)(d evice_t *dev);143 int (*add_device)(ddf_dev_t *dev); 148 144 /* TODO: add other generic driver operations */ 149 145 } driver_ops_t; … … 157 153 } driver_t; 158 154 159 int d river_main(driver_t *);160 161 extern function_t *ddf_fun_create(device_t *, fun_type_t, const char *);162 extern void ddf_fun_destroy( function_t *);163 extern int ddf_fun_bind( function_t *);164 extern int ddf_fun_add_match_id( function_t *, const char *, int);165 166 extern void *function_get_ops( function_t *, dev_inferface_idx_t);155 int ddf_driver_main(driver_t *); 156 157 extern ddf_fun_t *ddf_fun_create(ddf_dev_t *, fun_type_t, const char *); 158 extern void ddf_fun_destroy(ddf_fun_t *); 159 extern int ddf_fun_bind(ddf_fun_t *); 160 extern int ddf_fun_add_match_id(ddf_fun_t *, const char *, int); 161 162 extern void *function_get_ops(ddf_fun_t *, dev_inferface_idx_t); 167 163 168 164 /* … … 170 166 */ 171 167 172 typedef void interrupt_handler_t(d evice_t *, ipc_callid_t, ipc_call_t *);168 typedef void interrupt_handler_t(ddf_dev_t *, ipc_callid_t, ipc_call_t *); 173 169 174 170 typedef struct interrupt_context { 175 171 int id; 176 d evice_t *dev;172 ddf_dev_t *dev; 177 173 int irq; 178 174 interrupt_handler_t *handler; … … 196 192 interrupt_context_list_t *, int); 197 193 extern interrupt_context_t *find_interrupt_context( 198 interrupt_context_list_t *, d evice_t *, int);199 200 extern int register_interrupt_handler(d evice_t *, int, interrupt_handler_t *,194 interrupt_context_list_t *, ddf_dev_t *, int); 195 196 extern int register_interrupt_handler(ddf_dev_t *, int, interrupt_handler_t *, 201 197 irq_code_t *); 202 extern int unregister_interrupt_handler(d evice_t *, int);203 204 extern remote_handler_t *function_get_default_handler( function_t *);205 extern int add_function_to_class(function_t *fun, const char *class_name);198 extern int unregister_interrupt_handler(ddf_dev_t *, int); 199 200 extern remote_handler_t *function_get_default_handler(ddf_fun_t *); 201 extern int ddf_fun_add_to_class(ddf_fun_t *fun, const char *class_name); 206 202 207 203 #endif -
uspace/lib/drv/include/ops/char_dev.h
r34588a80 r83a2f43 39 39 40 40 typedef struct { 41 int (*read)( function_t *, char *, size_t);42 int (*write)( function_t *, char *, size_t);41 int (*read)(ddf_fun_t *, char *, size_t); 42 int (*write)(ddf_fun_t *, char *, size_t); 43 43 } char_dev_ops_t; 44 44 -
uspace/lib/drv/include/ops/hw_res.h
r34588a80 r83a2f43 42 42 43 43 typedef struct { 44 hw_resource_list_t *(*get_resource_list)( function_t *);45 bool (*enable_interrupt)( function_t *);44 hw_resource_list_t *(*get_resource_list)(ddf_fun_t *); 45 bool (*enable_interrupt)(ddf_fun_t *); 46 46 } hw_res_ops_t; 47 47
Note:
See TracChangeset
for help on using the changeset viewer.