Changeset 25a7e11d in mainline
- Timestamp:
- 2010-04-30T14:13:41Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f658458
- Parents:
- dafe675
- Location:
- uspace
- Files:
-
- 5 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/libc/Makefile
rdafe675 r25a7e11d 55 55 generic/devman.c \ 56 56 generic/device/hw_res.c \ 57 generic/device/char.c \ 57 58 generic/event.c \ 58 59 generic/errno.c \ -
uspace/lib/libc/include/ipc/dev_iface.h
rdafe675 r25a7e11d 37 37 typedef enum { 38 38 HW_RES_DEV_IFACE = 0, 39 CHAR_DEV_IFACE, 39 40 // TODO add more interfaces 40 41 DEV_IFACE_MAX -
uspace/lib/libdrv/Makefile
rdafe675 r25a7e11d 37 37 generic/driver.c \ 38 38 generic/dev_iface.c \ 39 generic/remote_res.h 39 generic/remote_res.c \ 40 generic/remote_char.c 40 41 41 42 include ../Makefile.common -
uspace/lib/libdrv/generic/dev_iface.c
rdafe675 r25a7e11d 38 38 #include "dev_iface.h" 39 39 #include "remote_res.h" 40 #include "remote_char.h" 40 41 41 42 static iface_dipatch_table_t remote_ifaces = { 42 43 .ifaces = { 43 &remote_res_iface 44 &remote_res_iface, 45 &remote_char_iface 44 46 } 45 47 }; -
uspace/lib/libdrv/generic/driver.c
rdafe675 r25a7e11d 224 224 // TODO - if the client is not a driver, check whether it is allowed to use the device 225 225 226 // TODO open the device (introduce some callbacks for opening and closing devices registered by the driver) 227 228 ipc_answer_0(iid, EOK); 226 int ret = EOK; 227 // open the device 228 if (NULL != dev->class && NULL != dev->class->open) { 229 ret = (*dev->class->open)(dev); 230 } 231 232 ipc_answer_0(iid, ret); 229 233 230 234 while (1) { … … 236 240 237 241 switch (method) { 238 case IPC_M_PHONE_HUNGUP: 239 240 // TODO close the device 241 242 case IPC_M_PHONE_HUNGUP: 243 // close the device 244 if (NULL != dev->class && NULL != dev->class->close) { 245 (*dev->class->close)(dev); 246 } 242 247 ipc_answer_0(callid, EOK); 243 248 return; -
uspace/lib/libdrv/include/driver.h
rdafe675 r25a7e11d 41 41 #include <ipc/dev_iface.h> 42 42 #include <device/hw_res.h> 43 #include <device/char.h> 43 44 #include <assert.h> 44 45 #include <ddi.h> … … 81 82 /** Unique identification of the class. */ 82 83 int id; 84 /** Optional callback function called when a client is connecting to the device. */ 85 int (*open)(device_t *dev); 86 /** Optional callback function called when a client is disconnecting from the device. */ 87 void (*close)(device_t *dev); 83 88 /** The table of interfaces implemented by the device. */ 84 89 void *interfaces[DEV_IFACE_COUNT]; -
uspace/srv/drivers/serial/serial.c
rdafe675 r25a7e11d 269 269 int res; 270 270 // enable interrupt globally 271 printf(NAME ": call enable_interrupt\n");272 271 if (EOK != (res = interrupt_enable(data->irq))) { 273 272 return res; … … 385 384 } 386 385 386 /** Open the device. 387 * 388 * This is a callback function called when a client tries to connect to the device. 389 * 390 * @param dev the device. 391 */ 392 static int serial_open(device_t *dev) 393 { 394 serial_dev_data_t *data = (serial_dev_data_t *)dev->driver_data; 395 int res; 396 397 fibril_mutex_lock(&data->mutex); 398 399 if (data->client_connected) { 400 res = ELIMIT; 401 } else { 402 res = EOK; 403 data->client_connected = true; 404 } 405 406 fibril_mutex_unlock(&data->mutex); 407 408 return res; 409 } 410 411 /** Close the device. 412 * 413 * This is a callback function called when a client tries to disconnect from the device. 414 * 415 * @param dev the device. 416 */ 417 static void serial_close(device_t *dev) 418 { 419 serial_dev_data_t *data = (serial_dev_data_t *)dev->driver_data; 420 421 fibril_mutex_lock(&data->mutex); 422 423 assert(data->client_connected); 424 425 data->client_connected = false; 426 buf_clear(&data->input_buffer); 427 428 fibril_mutex_unlock(&data->mutex); 429 } 430 431 /** Initialize the serial port driver. 432 * 433 * Initialize class structures with callback methods for handling 434 * client requests to the serial port devices. 435 */ 387 436 static void serial_init() 388 437 { 389 438 // TODO 390 439 serial_dev_class.id = 0; 440 serial_dev_class.open = &serial_open; 441 serial_dev_class.close = &serial_close; 391 442 } 392 443
Note:
See TracChangeset
for help on using the changeset viewer.