Changeset df747b9c in mainline for uspace/srv/drivers/serial/serial.c
- Timestamp:
- 2010-04-23T11:30:25Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 5af21c5
- Parents:
- a78fa2a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/drivers/serial/serial.c
ra78fa2a rdf747b9c 93 93 static device_class_t serial_dev_class; 94 94 95 static boolserial_add_device(device_t *dev);95 static int serial_add_device(device_t *dev); 96 96 97 97 /** The serial port device driver's standard operations. … … 123 123 static bool serial_pio_enable(device_t *dev) 124 124 { 125 printf(NAME ": serial_pio_enable =%s\n", dev->name);125 printf(NAME ": serial_pio_enable %s\n", dev->name); 126 126 127 127 serial_dev_data_t *data = (serial_dev_data_t *)dev->driver_data; … … 138 138 static bool serial_dev_probe(device_t *dev) 139 139 { 140 printf(NAME ": serial_dev_probe dev =%s\n", dev->name);140 printf(NAME ": serial_dev_probe %s\n", dev->name); 141 141 142 142 serial_dev_data_t *data = (serial_dev_data_t *)dev->driver_data; … … 166 166 } 167 167 168 static bool serial_dev_initialize(device_t *dev) 169 { 170 printf(NAME ": serial_dev_initialize dev = %s\n", dev->name); 171 168 static int serial_dev_initialize(device_t *dev) 169 { 170 printf(NAME ": serial_dev_initialize %s\n", dev->name); 171 172 int ret = EOK; 172 173 hw_resource_list_t hw_resources; 173 174 memset(&hw_resources, 0, sizeof(hw_resource_list_t)); … … 176 177 serial_dev_data_t *data = create_serial_dev_data(); 177 178 if (NULL == data) { 178 return false;179 return ENOMEM; 179 180 } 180 181 dev->driver_data = data; … … 184 185 if (dev->parent_phone <= 0) { 185 186 printf(NAME ": failed to connect to the parent driver of the device %s.\n", dev->name); 187 ret = EPARTY; 186 188 goto failed; 187 189 } … … 191 193 if (!get_hw_resources(dev->parent_phone, &hw_resources)) { 192 194 printf(NAME ": failed to get hw resources for the device %s.\n", dev->name); 195 ret = EPARTY; 193 196 goto failed; 194 197 } … … 211 214 if (res->res.io_range.size < REG_COUNT) { 212 215 printf(NAME ": i/o range assigned to the device %s is too small.\n", dev->name); 216 ret = EPARTY; 213 217 goto failed; 214 218 } … … 221 225 if (!irq || !ioport) { 222 226 printf(NAME ": missing hw resource(s) for the device %s.\n", dev->name); 227 ret = EPARTY; 223 228 goto failed; 224 229 } 225 230 226 231 clean_hw_resource_list(&hw_resources); 227 return true;232 return ret; 228 233 229 234 failed: 230 235 serial_dev_cleanup(dev); 231 236 clean_hw_resource_list(&hw_resources); 232 return false; 233 } 234 235 static bool serial_add_device(device_t *dev) 236 { 237 printf(NAME ": serial_add_device, device handle = %d\n", dev->handle); 238 239 if (!serial_dev_initialize(dev)) { 240 return false; 237 return ret; 238 } 239 240 static int serial_add_device(device_t *dev) 241 { 242 printf(NAME ": serial_add_device %s (handle = %d)\n", dev->name, dev->handle); 243 244 int res = serial_dev_initialize(dev); 245 if (EOK != res) { 246 return res; 241 247 } 242 248 243 249 if (!serial_pio_enable(dev)) { 244 250 serial_dev_cleanup(dev); 245 return false; 246 } 251 return EADDRNOTAVAIL; 252 } 253 247 254 248 255 if (!serial_dev_probe(dev)) { 249 256 serial_dev_cleanup(dev); 250 return false;257 return ENOENT; 251 258 } 252 259 253 260 // TODO interrupt and serial port initialization (baud rate etc.) 254 261 255 return true;262 return EOK; 256 263 } 257 264
Note:
See TracChangeset
for help on using the changeset viewer.