Changeset 03362fbd in mainline for uspace/drv/nic/rtl8139/driver.c
- Timestamp:
- 2013-02-09T23:14:45Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 22dfd38
- Parents:
- b5d2e57 (diff), 005b765 (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
-
uspace/drv/nic/rtl8139/driver.c (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/nic/rtl8139/driver.c
rb5d2e57 r03362fbd 27 27 */ 28 28 29 /* XXX Fix this */ 30 #define _DDF_DATA_IMPLANT 31 29 32 #include <assert.h> 30 33 #include <errno.h> 31 34 #include <align.h> 32 35 #include <byteorder.h> 33 #include <libarch/ddi.h>34 36 #include <libarch/barrier.h> 35 37 … … 212 214 rtl8139_regs_lock(rtl8139->io_port); 213 215 216 async_sess_t *pci_sess = 217 ddf_dev_parent_sess_get(nic_get_ddf_dev(rtl8139->nic_data)); 218 214 219 if (bit_val) { 215 async_sess_t *pci_sess =216 nic_get_ddf_dev(rtl8139->nic_data)->parent_sess;217 220 uint8_t pmen; 218 221 pci_config_space_read_8(pci_sess, 0x55, &pmen); 219 222 pci_config_space_write_8(pci_sess, 0x55, pmen | 1 | (1 << 7)); 220 223 } else { 221 async_sess_t *pci_sess =222 nic_get_ddf_dev(rtl8139->nic_data)->parent_sess;223 224 uint8_t pmen; 224 225 pci_config_space_read_8(pci_sess, 0x55, &pmen); … … 618 619 /* Check if the header is valid, otherwise we are lost in the buffer */ 619 620 if (size == 0 || size > RTL8139_FRAME_MAX_LENGTH) { 620 ddf_msg(LVL_ERROR, "Receiver error -> receiver reset (size: %4" PRIu16", "621 "header 0x%4" PRIx16". Offset: %zu)", size, frame_header,621 ddf_msg(LVL_ERROR, "Receiver error -> receiver reset (size: %4" PRIu16 ", " 622 "header 0x%4" PRIx16 ". Offset: %d)", size, frame_header, 622 623 rx_offset); 623 624 goto rx_err; … … 1052 1053 assert(dev); 1053 1054 1054 if (d ev->driver_data)1055 if (ddf_dev_data_get(dev)) 1055 1056 nic_unbind_and_destroy(dev); 1056 1057 if (dev->parent_sess != NULL) {1058 async_hangup(dev->parent_sess);1059 dev->parent_sess = NULL;1060 }1061 1057 } 1062 1058 … … 1080 1076 1081 1077 if (hw_resources->irqs.count != 1) { 1082 ddf_msg(LVL_ERROR, "%s device: unexpected irq count", d ev->name);1078 ddf_msg(LVL_ERROR, "%s device: unexpected irq count", ddf_dev_get_name(dev)); 1083 1079 return EINVAL; 1084 1080 }; 1085 1081 if (hw_resources->io_ranges.count != 1) { 1086 ddf_msg(LVL_ERROR, "%s device: unexpected io ranges count", d ev->name);1082 ddf_msg(LVL_ERROR, "%s device: unexpected io ranges count", ddf_dev_get_name(dev)); 1087 1083 return EINVAL; 1088 1084 } 1089 1085 1090 1086 rtl8139->irq = hw_resources->irqs.irqs[0]; 1091 ddf_msg(LVL_DEBUG, "%s device: irq 0x%x assigned", d ev->name, rtl8139->irq);1087 ddf_msg(LVL_DEBUG, "%s device: irq 0x%x assigned", ddf_dev_get_name(dev), rtl8139->irq); 1092 1088 1093 1089 rtl8139->io_addr = IOADDR_TO_PTR(hw_resources->io_ranges.ranges[0].address); 1094 1090 if (hw_resources->io_ranges.ranges[0].size < RTL8139_IO_SIZE) { 1095 1091 ddf_msg(LVL_ERROR, "i/o range assigned to the device " 1096 "%s is too small.", d ev->name);1092 "%s is too small.", ddf_dev_get_name(dev)); 1097 1093 return EINVAL; 1098 1094 } 1099 ddf_msg(LVL_DEBUG, "%s device: i/o addr %p assigned.", d ev->name, rtl8139->io_addr);1095 ddf_msg(LVL_DEBUG, "%s device: i/o addr %p assigned.", ddf_dev_get_name(dev), rtl8139->io_addr); 1100 1096 1101 1097 return EOK; … … 1165 1161 1166 1162 /* Allocate buffer for receiver */ 1167 ddf_msg(LVL_DEBUG, "Allocating receiver buffer of the size % zubytes",1163 ddf_msg(LVL_DEBUG, "Allocating receiver buffer of the size %d bytes", 1168 1164 RxBUF_TOT_LENGTH); 1169 1165 … … 1192 1188 static int rtl8139_device_initialize(ddf_dev_t *dev) 1193 1189 { 1194 ddf_msg(LVL_DEBUG, "rtl8139_dev_initialize %s", d ev->name);1190 ddf_msg(LVL_DEBUG, "rtl8139_dev_initialize %s", ddf_dev_get_name(dev)); 1195 1191 1196 1192 int ret = EOK; … … 1201 1197 rtl8139_t *rtl8139 = rtl8139_create_dev_data(dev); 1202 1198 if (rtl8139 == NULL) { 1203 ddf_msg(LVL_ERROR, "Not enough memory for initializing %s.", d ev->name);1199 ddf_msg(LVL_ERROR, "Not enough memory for initializing %s.", ddf_dev_get_name(dev)); 1204 1200 return ENOMEM; 1205 1201 } … … 1246 1242 static int rtl8139_pio_enable(ddf_dev_t *dev) 1247 1243 { 1248 ddf_msg(LVL_DEBUG, NAME ": rtl8139_pio_enable %s", d ev->name);1244 ddf_msg(LVL_DEBUG, NAME ": rtl8139_pio_enable %s", ddf_dev_get_name(dev)); 1249 1245 1250 1246 rtl8139_t *rtl8139 = nic_get_specific(nic_get_from_ddf_dev(dev)); … … 1252 1248 /* Gain control over port's registers. */ 1253 1249 if (pio_enable(rtl8139->io_addr, RTL8139_IO_SIZE, &rtl8139->io_port)) { 1254 ddf_msg(LVL_ERROR, "Cannot gain the port % lxfor device %s.", rtl8139->io_addr,1255 d ev->name);1250 ddf_msg(LVL_ERROR, "Cannot gain the port %p for device %s.", rtl8139->io_addr, 1251 ddf_dev_get_name(dev)); 1256 1252 return EADDRNOTAVAIL; 1257 1253 } … … 1299 1295 1300 1296 assert(dev); 1301 ddf_msg(LVL_NOTE, "RTL8139_dev_add %s (handle = %d)", dev->name, dev->handle); 1297 ddf_msg(LVL_NOTE, "RTL8139_dev_add %s (handle = %zu)", 1298 ddf_dev_get_name(dev), ddf_dev_get_handle(dev)); 1302 1299 1303 1300 /* Init device structure for rtl8139 */ … … 1330 1327 rc = nic_connect_to_services(nic_data); 1331 1328 if (rc != EOK) { 1332 ddf_msg(LVL_ERROR, "Failed to connect to services ", rc);1329 ddf_msg(LVL_ERROR, "Failed to connect to services (%d)", rc); 1333 1330 goto err_irq; 1334 1331 } … … 1340 1337 } 1341 1338 nic_set_ddf_fun(nic_data, fun); 1342 fun->ops = &rtl8139_dev_ops;1343 fun->driver_data = nic_data;1339 ddf_fun_set_ops(fun, &rtl8139_dev_ops); 1340 ddf_fun_data_implant(fun, nic_data); 1344 1341 1345 1342 rc = ddf_fun_bind(fun); … … 1355 1352 1356 1353 ddf_msg(LVL_NOTE, "The %s device has been successfully initialized.", 1357 d ev->name);1354 ddf_dev_get_name(dev)); 1358 1355 1359 1356 return EOK; … … 2141 2138 pio_write_32(rtl8139->io_port + TCTR, 0); 2142 2139 2143 ddf_msg(LVL_DEBUG, "Periodic mode. Interrupt mask %"PRIx16", poll.full_skips %" 2144 PRIu32", last timer %"PRIu32".", rtl8139->int_mask, 2145 rtl8139->poll_timer.full_skips, rtl8139->poll_timer.last_val); 2140 ddf_msg(LVL_DEBUG, "Periodic mode. Interrupt mask %" PRIx16 ", " 2141 "poll.full_skips %zu, last timer %" PRIu32, 2142 rtl8139->int_mask, rtl8139->poll_timer.full_skips, 2143 rtl8139->poll_timer.last_val); 2146 2144 break; 2147 2145 default: … … 2188 2186 &rtl8139_driver_ops, &rtl8139_dev_ops, &rtl8139_nic_iface); 2189 2187 2190 ddf_log_init(NAME , LVL_ERROR);2188 ddf_log_init(NAME); 2191 2189 ddf_msg(LVL_NOTE, "HelenOS RTL8139 driver started"); 2192 2190 return ddf_driver_main(&rtl8139_driver);
Note:
See TracChangeset
for help on using the changeset viewer.
