Changes in / [ecf823a:3819ce5] in mainline
- Files:
-
- 1 deleted
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
boot/Makefile.common
recf823a r3819ce5 128 128 nic/lo \ 129 129 nic/ne2k \ 130 nic/e1k \ 131 nic/rtl8139 130 nic/e1k 132 131 133 132 RD_DRV_CFG = -
contrib/conf/net-qe.sh
recf823a r3819ce5 10 10 qemu $@ -device e1000,vlan=0 -net user -boot d -redir udp:8080::8080 -redir udp:8081::8081 -redir tcp:8080::8080 -redir tcp:8081::8081 -cdrom image.iso 11 11 ;; 12 rtl8139)13 shift14 qemu $@ -device rtl8139,vlan=0 -net user -boot d -redir udp:8080::8080 -redir udp:8081::8081 -redir tcp:8080::8080 -redir tcp:8081::8081 -cdrom image.iso15 ;;16 12 *) 17 echo "Usage: $0 {ne2k|e1k |rtl8139}"13 echo "Usage: $0 {ne2k|e1k}" 18 14 esac -
uspace/Makefile
recf823a r3819ce5 122 122 drv/nic/lo \ 123 123 drv/nic/ne2k \ 124 drv/nic/e1k \ 125 drv/nic/rtl8139 124 drv/nic/e1k 126 125 127 126 ifeq ($(CONFIG_PCC),y) -
uspace/app/websrv/websrv.c
recf823a r3819ce5 49 49 50 50 #define PORT_NUMBER 8080 51 #define BACKLOG_SIZE 352 51 53 52 #define WEB_ROOT "/data/web" … … 276 275 } 277 276 278 rc = listen(listen_sd, BACKLOG_SIZE);277 rc = listen(listen_sd, 1); 279 278 if (rc != EOK) { 280 279 printf("Error calling listen() (%d).\n", rc); -
uspace/dist/data/web/index.htm
recf823a r3819ce5 7 7 <body> 8 8 <h1>Hello from HelenOS!</h1> 9 <img src="helenos.png" alt="" style="float: left; margin: 6px;">10 9 <p> 11 10 This web page is brought to you by courtesy of HelenOS web server -
uspace/drv/bus/usb/ohci/root_hub.c
recf823a r3819ce5 226 226 fibril_mutex_lock(&instance->guard); 227 227 assert(instance->unfinished_interrupt_transfer == NULL); 228 uint16_t mask = create_interrupt_mask(instance);228 const uint16_t mask = create_interrupt_mask(instance); 229 229 if (mask == 0) { 230 230 usb_log_debug("No changes...\n"); … … 257 257 if (instance->unfinished_interrupt_transfer) { 258 258 usb_log_debug("Finalizing interrupt transfer\n"); 259 uint16_t mask = create_interrupt_mask(instance);259 const uint16_t mask = create_interrupt_mask(instance); 260 260 interrupt_request(instance->unfinished_interrupt_transfer, 261 261 mask, instance->interrupt_mask_size); … … 278 278 279 279 /* 7 bytes + 2 port bit fields (port count + global bit) */ 280 size_t size = 7 + (instance->interrupt_mask_size * 2);280 const size_t size = 7 + (instance->interrupt_mask_size * 2); 281 281 assert(size <= HUB_DESCRIPTOR_MAX_SIZE); 282 282 instance->hub_descriptor_size = size; 283 283 284 uint32_t hub_desc = instance->registers->rh_desc_a;285 uint32_t port_desc = instance->registers->rh_desc_b;284 const uint32_t hub_desc = instance->registers->rh_desc_a; 285 const uint32_t port_desc = instance->registers->rh_desc_b; 286 286 287 287 /* bDescLength */ … … 394 394 395 395 396 usb_device_request_setup_packet_t *request_packet =396 const usb_device_request_setup_packet_t *request_packet = 397 397 (usb_device_request_setup_packet_t*)request->setup_buffer; 398 398 … … 406 406 TRANSFER_END(request, EOVERFLOW); 407 407 } else { 408 uint32_t data = instance->registers->rh_status &408 const uint32_t data = instance->registers->rh_status & 409 409 (RHS_LPS_FLAG | RHS_LPSC_FLAG 410 410 | RHS_OCI_FLAG | RHS_OCIC_FLAG); … … 420 420 TRANSFER_END(request, EOVERFLOW); 421 421 } else { 422 unsigned port = request_packet->index;422 const unsigned port = request_packet->index; 423 423 if (port < 1 || port > instance->port_count) 424 424 TRANSFER_END(request, EINVAL); 425 425 426 uint32_t data =426 const uint32_t data = 427 427 instance->registers->rh_port_status[port - 1]; 428 428 TRANSFER_END_DATA(request, &data, sizeof(data)); … … 434 434 TRANSFER_END(request, EOVERFLOW); 435 435 } else { 436 uint16_t data =436 static const uint16_t data = 437 437 uint16_host2usb(USB_DEVICE_STATUS_SELF_POWERED); 438 438 TRANSFER_END_DATA(request, &data, sizeof(data)); … … 455 455 } else { 456 456 /* Endpoints are OK. (We don't halt) */ 457 uint16_t data = 0;457 static const uint16_t data = 0; 458 458 TRANSFER_END_DATA(request, &data, sizeof(data)); 459 459 } … … 480 480 assert(request); 481 481 482 usb_device_request_setup_packet_t *setup_request =482 const usb_device_request_setup_packet_t *setup_request = 483 483 (usb_device_request_setup_packet_t *) request->setup_buffer; 484 uint16_t setup_request_value = setup_request->value_high;484 const uint16_t setup_request_value = setup_request->value_high; 485 485 switch (setup_request_value) 486 486 { … … 648 648 assert(request); 649 649 650 usb_device_request_setup_packet_t *setup_request =650 const usb_device_request_setup_packet_t *setup_request = 651 651 (usb_device_request_setup_packet_t *) request->setup_buffer; 652 652 switch (setup_request->request_type) … … 654 654 case USB_HUB_REQ_TYPE_SET_PORT_FEATURE: 655 655 usb_log_debug("USB_HUB_REQ_TYPE_SET_PORT_FEATURE\n"); 656 int ret = set_feature_port(instance,656 const int ret = set_feature_port(instance, 657 657 setup_request->value, setup_request->index); 658 658 TRANSFER_END(request, ret); … … 686 686 assert(request); 687 687 688 usb_device_request_setup_packet_t *setup_request =688 const usb_device_request_setup_packet_t *setup_request = 689 689 (usb_device_request_setup_packet_t *) request->setup_buffer; 690 690 … … 693 693 case USB_HUB_REQ_TYPE_CLEAR_PORT_FEATURE: 694 694 usb_log_debug("USB_HUB_REQ_TYPE_CLEAR_PORT_FEATURE\n"); 695 int ret = clear_feature_port(instance,695 const int ret = clear_feature_port(instance, 696 696 setup_request->value, setup_request->index); 697 697 TRANSFER_END(request, ret); … … 753 753 usb_log_debug2("CTRL packet: %s.\n", 754 754 usb_debug_str_buffer((uint8_t *) request->setup_buffer, 8, 8)); 755 usb_device_request_setup_packet_t *setup_request =755 const usb_device_request_setup_packet_t *setup_request = 756 756 (usb_device_request_setup_packet_t *) request->setup_buffer; 757 757 switch (setup_request->request) … … 771 771 if (request->buffer_size == 0) 772 772 TRANSFER_END(request, EOVERFLOW); 773 uint8_t config = 1;773 static const uint8_t config = 1; 774 774 TRANSFER_END_DATA(request, &config, sizeof(config)); 775 775 -
uspace/drv/infrastructure/rootmac/rootmac.c
recf823a r3819ce5 161 161 162 162 static hw_res_ops_t fun_hw_res_ops = { 163 .get_resource_list =&rootmac_get_resources,164 .enable_interrupt =&rootmac_enable_interrupt163 &rootmac_get_resources, 164 &rootmac_enable_interrupt 165 165 }; 166 166 -
uspace/drv/nic/rtl8139/defs.c
recf823a r3819ce5 27 27 */ 28 28 29 #include " defs.h"29 #include "rtl8139_defs.h" 30 30 31 31 const char* model_names[RTL8139_VER_COUNT] = { -
uspace/drv/nic/rtl8139/driver.c
recf823a r3819ce5 33 33 #include <libarch/ddi.h> 34 34 #include <libarch/barrier.h> 35 36 #include <as.h> 37 #include <d df/log.h>35 #include <nlog.h> 36 37 #include <dma.h> 38 38 #include <ddf/interrupt.h> 39 #include < io/log.h>39 #include <devman.h> 40 40 #include <nic.h> 41 41 #include <packet_client.h> … … 50 50 #include <str.h> 51 51 52 #include " defs.h"53 #include " driver.h"54 #include " general.h"52 #include "rtl8139_defs.h" 53 #include "rtl8139_driver.h" 54 #include "rtl8139_general.h" 55 55 56 56 /** Global mutex for work with shared irq structure */ … … 164 164 (RXBUF_SIZE_FLAGS << RCR_RBLEN_SHIFT); 165 165 166 ddf_msg(LVL_DEBUG,"Rewriting rcr: %x -> %x", pio_read_32(rtl8139->io_port + RCR),166 nlog_debug("Rewriting rcr: %x -> %x", pio_read_32(rtl8139->io_port + RCR), 167 167 rcr); 168 168 … … 373 373 static ddf_dev_ops_t rtl8139_dev_ops; 374 374 375 static int rtl8139_ dev_add(ddf_dev_t *dev);375 static int rtl8139_add_device(ddf_dev_t *dev); 376 376 377 377 /** Basic driver operations for RTL8139 driver */ 378 378 static driver_ops_t rtl8139_driver_ops = { 379 . dev_add = &rtl8139_dev_add,379 .add_device = &rtl8139_add_device, 380 380 }; 381 381 … … 409 409 rtl8139_t *rtl8139 = nic_get_specific(nic_data); 410 410 assert(rtl8139); 411 ddf_msg(LVL_DEBUG,"Sending packet");411 nlog_debug("Sending packet"); 412 412 413 413 /* Get the packet data and check if it can be send */ … … 418 418 419 419 if ((packet_length > RTL8139_PACKET_MAX_LENGTH) || !packet_data) { 420 ddf_msg(LVL_ERROR,"Write packet length error: data %p, length %z",420 nlog_error("Write packet length error: data %p, length %z", 421 421 packet_data, packet_length); 422 422 nic_report_send_error(rtl8139->nic_data, NIC_SEC_OTHER, 1); … … 527 527 nic_frame_t *frame = nic_alloc_frame(nic_data, packet_size); 528 528 if (! frame) { 529 ddf_msg(LVL_ERROR,"Can not allocate frame for received packet.");529 nlog_error("Can not allocate frame for received packet."); 530 530 return NULL; 531 531 } … … 533 533 void *packet_data = packet_suffix(frame->packet, packet_size); 534 534 if (!packet_data) { 535 ddf_msg(LVL_ERROR,"Can not get the packet suffix.");535 nlog_error("Can not get the packet suffix."); 536 536 nic_release_frame(nic_data, frame); 537 537 return NULL; … … 564 564 pio_write_32(rtl8139->io_port + CAPR, 0); 565 565 pio_write_32(rtl8139->io_port + RBSTART, 566 PTR2U32(rtl8139->rx_buff _phys));566 PTR2U32(rtl8139->rx_buff.physical)); 567 567 568 568 write_barrier(); … … 588 588 nic_frame_list_t *frames = nic_alloc_frame_list(); 589 589 if (!frames) 590 ddf_msg(LVL_ERROR,"Can not allocate frame list for received packets.");591 592 void *rx_buffer = rtl8139->rx_buff _virt;590 nlog_error("Can not allocate frame list for received packets."); 591 592 void *rx_buffer = rtl8139->rx_buff.virtual; 593 593 594 594 /* where to start reading */ … … 620 620 if (size == RTL8139_EARLY_SIZE) { 621 621 /* The packet copying is still in progress, break receiving */ 622 ddf_msg(LVL_DEBUG,"Early threshold reached, not completely coppied");622 nlog_debug("Early threshold reached, not completely coppied"); 623 623 break; 624 624 } … … 626 626 /* Check if the header is valid, otherwise we are lost in the buffer */ 627 627 if (size == 0 || size > RTL8139_PACKET_MAX_LENGTH) { 628 ddf_msg(LVL_ERROR,"Receiver error -> receiver reset (size: %4"PRIu16", "628 nlog_error("Receiver error -> receiver reset (size: %4"PRIu16", " 629 629 "header 0x%4"PRIx16". Offset: %zu)", size, packet_header, 630 630 rx_offset); … … 632 632 } 633 633 if (size < RTL8139_RUNT_MAX_SIZE && !(rcs & RSR_RUNT)) { 634 ddf_msg(LVL_ERROR,"Receiver error -> receiver reset (%"PRIx16")", size);634 nlog_error("Receiver error -> receiver reset (%"PRIx16")", size); 635 635 goto rx_err; 636 636 } … … 801 801 pio_write_32(rtl8139->io_port + TIMERINT, timer_val); 802 802 pio_write_32(rtl8139->io_port + TCTR, 0x0); 803 ddf_msg(LVL_DEBUG,"rtl8139 timer: %"PRIu32"\treceive: %d", timer_val, receive);803 nlog_debug("rtl8139 timer: %"PRIu32"\treceive: %d", timer_val, receive); 804 804 return receive; 805 805 } … … 925 925 /* Write transmittion buffer addresses */ 926 926 for(i = 0; i < TX_BUFF_COUNT; ++i) { 927 uint32_t addr = PTR2U32(rtl8139->tx_buff_ phys+ i*TX_BUFF_SIZE);927 uint32_t addr = PTR2U32(rtl8139->tx_buff_mem.physical + i*TX_BUFF_SIZE); 928 928 pio_write_32(io_base + TSAD0 + 4*i, addr); 929 929 } … … 932 932 nic_set_tx_busy(rtl8139->nic_data, 0); 933 933 934 pio_write_32(io_base + RBSTART, PTR2U32(rtl8139->rx_buff _phys));934 pio_write_32(io_base + RBSTART, PTR2U32(rtl8139->rx_buff.physical)); 935 935 936 936 /* Enable transmitter and receiver */ … … 949 949 { 950 950 assert(nic_data); 951 ddf_msg(LVL_NOTE,"Activating device");951 nlog_info("Activating device"); 952 952 953 953 rtl8139_t *rtl8139 = nic_get_specific(nic_data); … … 962 962 nic_enable_interrupt(nic_data, rtl8139->irq); 963 963 964 ddf_msg(LVL_DEBUG,"Device activated, interrupt %d registered", rtl8139->irq);964 nlog_debug("Device activated, interrupt %d registered", rtl8139->irq); 965 965 return EOK; 966 966 } … … 1079 1079 1080 1080 if (hw_resources->irqs.count != 1) { 1081 ddf_msg(LVL_ERROR,"%s device: unexpected irq count", dev->name);1081 nlog_error("%s device: unexpected irq count", dev->name); 1082 1082 return EINVAL; 1083 1083 }; 1084 1084 if (hw_resources->io_ranges.count != 1) { 1085 ddf_msg(LVL_ERROR,"%s device: unexpected io ranges count", dev->name);1085 nlog_error("%s device: unexpected io ranges count", dev->name); 1086 1086 return EINVAL; 1087 1087 } 1088 1088 1089 1089 rtl8139->irq = hw_resources->irqs.irqs[0]; 1090 ddf_msg(LVL_DEBUG,"%s device: irq 0x%x assigned", dev->name, rtl8139->irq);1090 nlog_debug("%s device: irq 0x%x assigned", dev->name, rtl8139->irq); 1091 1091 1092 1092 rtl8139->io_addr = IOADDR_TO_PTR(hw_resources->io_ranges.ranges[0].address); 1093 1093 if (hw_resources->io_ranges.ranges[0].size < RTL8139_IO_SIZE) { 1094 ddf_msg(LVL_ERROR,"i/o range assigned to the device "1094 nlog_error("i/o range assigned to the device " 1095 1095 "%s is too small.", dev->name); 1096 1096 return EINVAL; 1097 1097 } 1098 ddf_msg(LVL_DEBUG,"%s device: i/o addr %p assigned.", dev->name, rtl8139->io_addr);1098 nlog_debug("%s device: i/o addr %p assigned.", dev->name, rtl8139->io_addr); 1099 1099 1100 1100 return EOK; … … 1142 1142 static int rtl8139_buffers_create(rtl8139_t *rtl8139) 1143 1143 { 1144 assert(rtl8139); 1144 1145 size_t i = 0; 1145 1146 int rc; 1146 1147 1147 ddf_msg(LVL_DEBUG, "Creating buffers"); 1148 1149 rc = dmamem_map_anonymous(TX_PAGES * PAGE_SIZE, AS_AREA_WRITE, 0, 1150 &rtl8139->tx_buff_phys, &rtl8139->tx_buff_virt); 1148 nlog_debug("Creating buffers"); 1149 1150 rtl8139->tx_buff_mem.size = TX_PAGES; 1151 rtl8139->tx_buff_mem.mapping_flags = AS_AREA_WRITE; 1152 rc = dma_allocate_anonymous(&rtl8139->tx_buff_mem, DMA_32_BITS); 1151 1153 if (rc != EOK) { 1152 ddf_msg(LVL_ERROR,"Can not allocate transmitter buffers.");1154 nlog_error("Can not allocate transmitter buffers."); 1153 1155 goto err_tx_alloc; 1154 1156 } 1155 1157 1156 for 1157 rtl8139->tx_buff[i] = rtl8139->tx_buff_ virt+ i * TX_BUFF_SIZE;1158 1159 ddf_msg(LVL_DEBUG,"The transmittion buffers allocated");1158 for(i = 0; i < TX_BUFF_COUNT; ++i) 1159 rtl8139->tx_buff[i] = rtl8139->tx_buff_mem.virtual + i * TX_BUFF_SIZE; 1160 1161 nlog_debug("The transmittion buffers allocated"); 1160 1162 1161 1163 /* Use the first buffer for next transmittion */ … … 1164 1166 1165 1167 /* Allocate buffer for receiver */ 1166 ddf_msg(LVL_DEBUG, "Allocating receiver buffer of the size %zu bytes", 1167 RxBUF_TOT_LENGTH); 1168 1169 rc = dmamem_map_anonymous(RxBUF_TOT_LENGTH, AS_AREA_READ, 0, 1170 &rtl8139->rx_buff_phys, &rtl8139->rx_buff_virt); 1171 if (rc != EOK) { 1172 ddf_msg(LVL_ERROR, "Can not allocate receive buffer."); 1168 size_t rx_pages = ALIGN_UP(RxBUF_TOT_LENGTH, PAGE_SIZE) / PAGE_SIZE; 1169 nlog_debug("Allocating receiver buffer of the size %zd pages", rx_pages); 1170 1171 rtl8139->rx_buff.size = rx_pages; 1172 rtl8139->rx_buff.mapping_flags = AS_AREA_READ; 1173 rc = dma_allocate_anonymous(&rtl8139->rx_buff, DMA_32_BITS); 1174 if( rc != EOK ) { 1175 nlog_error("Can not allocate receiver buffer."); 1173 1176 goto err_rx_alloc; 1174 1177 } 1175 ddf_msg(LVL_DEBUG,"The buffers created");1178 nlog_debug("The buffers created"); 1176 1179 1177 1180 return EOK; 1178 1181 1179 1182 err_rx_alloc: 1180 dma mem_unmap_anonymous(&rtl8139->tx_buff_virt);1183 dma_free(&rtl8139->tx_buff_mem); 1181 1184 err_tx_alloc: 1182 1185 return rc; … … 1191 1194 static int rtl8139_device_initialize(ddf_dev_t *dev) 1192 1195 { 1193 ddf_msg(LVL_DEBUG,"rtl8139_dev_initialize %s", dev->name);1196 nlog_debug("rtl8139_dev_initialize %s", dev->name); 1194 1197 1195 1198 int ret = EOK; 1196 1199 1197 ddf_msg(LVL_DEBUG,"rtl8139: creating device data");1200 nlog_debug("rtl8139: creating device data"); 1198 1201 1199 1202 /* Allocate driver data for the device. */ 1200 1203 rtl8139_t *rtl8139 = rtl8139_create_dev_data(dev); 1201 1204 if (rtl8139 == NULL) { 1202 ddf_msg(LVL_ERROR,"Not enough memory for initializing %s.", dev->name);1205 nlog_error("Not enough memory for initializing %s.", dev->name); 1203 1206 return ENOMEM; 1204 1207 } 1205 1208 1206 ddf_msg(LVL_DEBUG,"rtl8139: dev_data created");1209 nlog_debug("rtl8139: dev_data created"); 1207 1210 1208 1211 /* Obtain and fill hardware resources info and connect to parent */ 1209 1212 ret = rtl8139_get_resource_info(dev); 1210 1213 if (ret != EOK) { 1211 ddf_msg(LVL_ERROR,"Can not obatin hw resources information");1214 nlog_error("Can not obatin hw resources information"); 1212 1215 goto failed; 1213 1216 } 1214 1217 1215 ddf_msg(LVL_DEBUG,"rtl8139: resource_info obtained");1218 nlog_debug("rtl8139: resource_info obtained"); 1216 1219 1217 1220 /* Allocate DMA buffers */ … … 1228 1231 rtl8139->rcr_data.rcr_base = (0x8 << RCR_ERTH_SHIFT); 1229 1232 1230 ddf_msg(LVL_DEBUG,"The device is initialized");1233 nlog_debug("The device is initialized"); 1231 1234 return ret; 1232 1235 1233 1236 failed: 1234 ddf_msg(LVL_ERROR,"The device initialization failed");1237 nlog_error("The device initialization failed"); 1235 1238 rtl8139_dev_cleanup(dev); 1236 1239 return ret; … … 1245 1248 static int rtl8139_pio_enable(ddf_dev_t *dev) 1246 1249 { 1247 ddf_msg(LVL_DEBUG,NAME ": rtl8139_pio_enable %s", dev->name);1250 nlog_debug(NAME ": rtl8139_pio_enable %s", dev->name); 1248 1251 1249 1252 rtl8139_t *rtl8139 = nic_get_specific(nic_get_from_ddf_dev(dev)); … … 1251 1254 /* Gain control over port's registers. */ 1252 1255 if (pio_enable(rtl8139->io_addr, RTL8139_IO_SIZE, &rtl8139->io_port)) { 1253 ddf_msg(LVL_ERROR,"Cannot gain the port %lx for device %s.", rtl8139->io_addr,1256 nlog_error("Cannot gain the port %lx for device %s.", rtl8139->io_addr, 1254 1257 dev->name); 1255 1258 return EADDRNOTAVAIL; … … 1279 1282 if (rtl8139_versions[i].hwverid == hwverid) { 1280 1283 rtl8139->hw_version = rtl8139_versions[i].ver_id; 1281 ddf_msg(LVL_NOTE,"HW version found: index %zu, ver_id %d (%s)", i,1284 nlog_info("HW version found: index %zu, ver_id %d (%s)", i, 1282 1285 rtl8139_versions[i].ver_id, model_names[rtl8139->hw_version]); 1283 1286 } … … 1293 1296 * @return EOK if added successfully, negative error code otherwise 1294 1297 */ 1295 int rtl8139_ dev_add(ddf_dev_t *dev)1298 int rtl8139_add_device(ddf_dev_t *dev) 1296 1299 { 1297 1300 assert(dev); 1298 ddf_msg(LVL_NOTE, "RTL8139_dev_add%s (handle = %d)", dev->name, dev->handle);1301 nlog_info("RTL8139_add_device %s (handle = %d)", dev->name, dev->handle); 1299 1302 1300 1303 /* Init device structure for rtl8139 */ … … 1327 1330 rc = nic_connect_to_services(nic_data); 1328 1331 if (rc != EOK) { 1329 ddf_msg(LVL_ERROR,"Failed to connect to services", rc);1332 nlog_error("Failed to connect to services", rc); 1330 1333 goto err_irq; 1331 1334 } … … 1333 1336 rc = nic_register_as_ddf_fun(nic_data, &rtl8139_dev_ops); 1334 1337 if (rc != EOK) { 1335 ddf_msg(LVL_ERROR,"Failed to register as DDF function - error %d", rc);1338 nlog_error("Failed to register as DDF function - error %d", rc); 1336 1339 goto err_irq; 1337 1340 } 1338 1341 1339 ddf_msg(LVL_NOTE,"The %s device has been successfully initialized.",1342 nlog_info("The %s device has been successfully initialized.", 1340 1343 dev->name); 1341 1344 … … 1578 1581 1579 1582 if (allow_send && time > 0) { 1580 ddf_msg(LVL_WARN,"Time setting is not supported in set_pause method.");1583 nlog_warning("Time setting is not supported in set_pause method."); 1581 1584 } 1582 1585 return EOK; … … 2118 2121 pio_write_32(rtl8139->io_port + TCTR, 0); 2119 2122 2120 ddf_msg(LVL_DEBUG,"Periodic mode. Interrupt mask %"PRIx16", poll.full_skips %"2123 nlog_debug("Periodic mode. Interrupt mask %"PRIx16", poll.full_skips %" 2121 2124 PRIu32", last timer %"PRIu32".", rtl8139->int_mask, 2122 2125 rtl8139->poll_timer.full_skips, rtl8139->poll_timer.last_val); … … 2165 2168 &rtl8139_driver_ops, &rtl8139_dev_ops, &rtl8139_nic_iface); 2166 2169 2167 ddf_log_init(NAME, LVL_ERROR);2168 ddf_msg(LVL_NOTE,"HelenOS RTL8139 driver started");2170 nlog_set_min_severity(DEBUG); 2171 nlog_info("HelenOS RTL8139 driver started"); 2169 2172 return ddf_driver_main(&rtl8139_driver); 2170 2173 } -
uspace/drv/nic/rtl8139/driver.h
recf823a r3819ce5 30 30 #define RTL8139_DRIVER_H_ 31 31 32 #include " defs.h"33 #include " general.h"32 #include "rtl8139_defs.h" 33 #include "rtl8139_general.h" 34 34 #include <sys/types.h> 35 35 #include <stdint.h> 36 #include <dma.h> 36 37 37 38 /** The driver name */ … … 96 97 * Each buffer takes 2kB 97 98 */ 98 void *tx_buff_phys; 99 void *tx_buff_virt; 100 99 dma_mem_t tx_buff_mem; 101 100 /** Virtual adresses of the Tx buffers */ 102 101 void *tx_buff[TX_BUFF_COUNT]; … … 113 112 114 113 /** Buffer for receiving packets */ 115 void *rx_buff_phys; 116 void *rx_buff_virt; 114 dma_mem_t rx_buff; 117 115 118 116 /** Receiver control register data */ -
uspace/drv/nic/rtl8139/general.c
recf823a r3819ce5 32 32 */ 33 33 34 #include " general.h"34 #include "rtl8139_general.h" 35 35 36 36 #include <mem.h> -
uspace/srv/net/tl/tcp/conn.c
recf823a r3819ce5 121 121 fibril_condvar_initialize(&conn->cstate_cv); 122 122 123 conn->cstate_cb = NULL;124 125 123 conn->cstate = st_listen; 126 124 conn->reset = false; … … 245 243 tcp_cstate_t old_state; 246 244 247 log_msg(LVL_DEBUG, "tcp_conn_state_set(%p)", conn);248 249 245 old_state = conn->cstate; 250 246 conn->cstate = nstate; 251 247 fibril_condvar_broadcast(&conn->cstate_cv); 252 253 /* Run user callback function */254 if (conn->cstate_cb != NULL) {255 log_msg(LVL_DEBUG, "tcp_conn_state_set() - run user CB");256 conn->cstate_cb(conn, conn->cstate_cb_arg);257 } else {258 log_msg(LVL_DEBUG, "tcp_conn_state_set() - no user CB");259 }260 248 261 249 assert(old_state != st_closed); -
uspace/srv/net/tl/tcp/sock.c
recf823a r3819ce5 52 52 #define FRAGMENT_SIZE 1024 53 53 54 #define MAX_BACKLOG 12855 56 54 /** Free ports pool start. */ 57 55 #define TCP_FREE_PORTS_START 1025 … … 62 60 static int last_used_port = TCP_FREE_PORTS_START - 1; 63 61 static socket_ports_t gsock; 64 65 static void tcp_sock_cstate_cb(tcp_conn_t *conn, void *arg);66 62 67 63 void tcp_sock_init(void) … … 99 95 { 100 96 tcp_sockdata_t *sock; 101 socket_core_t *sock_core;102 97 int sock_id; 103 98 int rc; … … 111 106 } 112 107 113 fibril_mutex_initialize(&sock->lock);114 108 sock->client = client; 115 109 sock->laddr.ipv4 = TCP_IPV4_ANY; 116 sock->lconn = NULL;117 sock->backlog = 0;118 list_initialize(&sock->ready);119 110 120 111 sock_id = SOCKET_GET_SOCKET_ID(call); … … 124 115 return; 125 116 } 126 127 sock_core = socket_cores_find(&client->sockets, sock_id);128 assert(sock_core != NULL);129 sock->sock_core = sock_core;130 117 131 118 refresh_answer(&answer, NULL); … … 180 167 socket_core_t *sock_core; 181 168 tcp_sockdata_t *socket; 182 tcp_error_t trc;183 tcp_sock_t lsocket;184 tcp_sock_t fsocket;185 tcp_conn_t *conn;186 tcp_sock_lconn_t *lconn;187 int i;188 169 189 170 log_msg(LVL_DEBUG, "tcp_sock_listen()"); … … 196 177 return; 197 178 } 198 199 if (backlog > MAX_BACKLOG)200 backlog = MAX_BACKLOG;201 179 202 180 sock_core = socket_cores_find(&client->sockets, socket_id); … … 209 187 210 188 /* 211 * Prepare @c backlog listening connections. 189 * XXX We do not do anything and defer action to accept(). 190 * This is a slight difference in semantics, but most servers 191 * would just listen() and immediately accept() in a loop. 192 * 193 * The only difference is that there is a window between 194 * listen() and accept() or two accept()s where we refuse 195 * connections. 212 196 */ 213 fibril_mutex_lock(&socket->lock); 214 215 socket->backlog = backlog; 216 socket->lconn = calloc(sizeof(tcp_conn_t *), backlog); 217 if (socket->lconn == NULL) { 218 fibril_mutex_unlock(&socket->lock); 219 async_answer_0(callid, ENOMEM); 220 return; 221 } 222 223 log_msg(LVL_DEBUG, " - open connections"); 224 225 lsocket.addr.ipv4 = TCP_IPV4_ANY; 226 lsocket.port = sock_core->port; 227 fsocket.addr.ipv4 = TCP_IPV4_ANY; 228 fsocket.port = TCP_PORT_ANY; 229 230 for (i = 0; i < backlog; i++) { 231 232 lconn = calloc(sizeof(tcp_sock_lconn_t), 1); 233 if (lconn == NULL) { 234 /* XXX Clean up */ 235 fibril_mutex_unlock(&socket->lock); 236 async_answer_0(callid, ENOMEM); 237 return; 238 } 239 240 trc = tcp_uc_open(&lsocket, &fsocket, ap_passive, 241 tcp_open_nonblock, &conn); 242 if (conn == NULL) { 243 /* XXX Clean up */ 244 fibril_mutex_unlock(&socket->lock); 245 async_answer_0(callid, ENOMEM); 246 return; 247 } 248 249 tcp_uc_set_cstate_cb(conn, tcp_sock_cstate_cb, lconn); 250 251 assert(trc == TCP_EOK); 252 conn->name = (char *)"S"; 253 254 lconn->conn = conn; 255 lconn->socket = socket; 256 link_initialize(&lconn->ready_list); 257 socket->lconn[i] = lconn; 258 } 259 260 fibril_mutex_unlock(&socket->lock); 197 (void)backlog; 198 (void)socket; 199 261 200 async_answer_0(callid, EOK); 201 log_msg(LVL_DEBUG, "tcp_sock_listen(): notify data\n"); 202 /* Push one accept notification to client's queue */ 203 tcp_sock_notify_aconn(sock_core); 262 204 } 263 205 … … 306 248 } 307 249 308 fibril_mutex_lock(&socket->lock);309 310 250 if (socket->laddr.ipv4 == TCP_IPV4_ANY) { 311 251 /* Find route to determine local IP address. */ … … 314 254 (void **)&phdr, &phdr_len); 315 255 if (rc != EOK) { 316 fibril_mutex_unlock(&socket->lock);317 256 async_answer_0(callid, rc); 318 257 log_msg(LVL_DEBUG, "tcp_transmit_connect: Failed to find route."); … … 330 269 fsocket.port = uint16_t_be2host(addr->sin_port); 331 270 332 trc = tcp_uc_open(&lsocket, &fsocket, ap_active, 0,&socket->conn);271 trc = tcp_uc_open(&lsocket, &fsocket, ap_active, &socket->conn); 333 272 334 273 if (socket->conn != NULL) 335 274 socket->conn->name = (char *)"C"; 336 337 fibril_mutex_unlock(&socket->lock);338 275 339 276 switch (trc) { … … 368 305 tcp_sock_t fsocket; 369 306 tcp_conn_t *conn; 370 tcp_conn_t *rconn;371 tcp_sock_lconn_t *lconn;372 307 int rc; 373 308 … … 384 319 385 320 socket = (tcp_sockdata_t *)sock_core->specific_data; 386 fibril_mutex_lock(&socket->lock);387 321 388 322 log_msg(LVL_DEBUG, " - verify socket->conn"); 389 323 if (socket->conn != NULL) { 390 fibril_mutex_unlock(&socket->lock);391 324 async_answer_0(callid, EINVAL); 392 325 return; 393 326 } 394 327 395 if (list_empty(&socket->ready)) { 396 fibril_mutex_unlock(&socket->lock); 397 async_answer_0(callid, ENOENT); 398 return; 399 } 400 401 lconn = list_get_instance(list_first(&socket->ready), 402 tcp_sock_lconn_t, ready_list); 403 list_remove(&lconn->ready_list); 404 405 conn = lconn->conn; 406 tcp_uc_set_cstate_cb(conn, NULL, NULL); 407 408 /* Replenish listening connection */ 328 log_msg(LVL_DEBUG, " - open connection"); 409 329 410 330 lsocket.addr.ipv4 = TCP_IPV4_ANY; … … 413 333 fsocket.port = TCP_PORT_ANY; 414 334 415 trc = tcp_uc_open(&lsocket, &fsocket, ap_passive, tcp_open_nonblock, 416 &rconn); 417 if (rconn == NULL) { 418 /* XXX Clean up */ 419 fibril_mutex_unlock(&socket->lock); 420 async_answer_0(callid, ENOMEM); 421 return; 422 } 423 424 tcp_uc_set_cstate_cb(rconn, tcp_sock_cstate_cb, lconn); 425 426 assert(trc == TCP_EOK); 427 rconn->name = (char *)"S"; 428 429 lconn->conn = rconn; 430 431 /* Allocate socket for accepted connection */ 335 trc = tcp_uc_open(&lsocket, &fsocket, ap_passive, &conn); 336 if (conn != NULL) 337 conn->name = (char *)"S"; 338 339 log_msg(LVL_DEBUG, " - decode TCP return code"); 340 341 switch (trc) { 342 case TCP_EOK: 343 rc = EOK; 344 break; 345 case TCP_ERESET: 346 rc = ECONNABORTED; 347 break; 348 default: 349 assert(false); 350 } 351 352 log_msg(LVL_DEBUG, " - check TCP return code"); 353 if (rc != EOK) { 354 async_answer_0(callid, rc); 355 return; 356 } 432 357 433 358 log_msg(LVL_DEBUG, "tcp_sock_accept(): allocate asocket\n"); 434 359 asocket = calloc(sizeof(tcp_sockdata_t), 1); 435 360 if (asocket == NULL) { 436 fibril_mutex_unlock(&socket->lock);437 361 async_answer_0(callid, ENOMEM); 438 362 return; 439 363 } 440 364 441 fibril_mutex_initialize(&asocket->lock);442 365 asocket->client = client; 443 366 asocket->conn = conn; … … 446 369 rc = socket_create(&client->sockets, client->sess, asocket, &asock_id); 447 370 if (rc != EOK) { 448 fibril_mutex_unlock(&socket->lock);449 371 async_answer_0(callid, rc); 450 372 return; … … 463 385 answer_call(callid, asock_core->socket_id, &answer, 3); 464 386 387 /* Push one accept notification to client's queue */ 388 tcp_sock_notify_aconn(sock_core); 389 465 390 /* Push one fragment notification to client's queue */ 466 log_msg(LVL_DEBUG, "tcp_sock_accept(): notify data\n");467 391 tcp_sock_notify_data(asock_core); 468 fibril_mutex_unlock(&socket->lock);392 log_msg(LVL_DEBUG, "tcp_sock_accept(): notify aconn\n"); 469 393 } 470 394 … … 495 419 496 420 socket = (tcp_sockdata_t *)sock_core->specific_data; 497 fibril_mutex_lock(&socket->lock);498 499 421 if (socket->conn == NULL) { 500 fibril_mutex_unlock(&socket->lock);501 422 async_answer_0(callid, ENOTCONN); 502 423 return; … … 505 426 for (index = 0; index < fragments; index++) { 506 427 if (!async_data_write_receive(&wcallid, &length)) { 507 fibril_mutex_unlock(&socket->lock);508 428 async_answer_0(callid, EINVAL); 509 429 return; … … 515 435 rc = async_data_write_finalize(wcallid, buffer, length); 516 436 if (rc != EOK) { 517 fibril_mutex_unlock(&socket->lock);518 437 async_answer_0(callid, rc); 519 438 return; … … 540 459 541 460 if (rc != EOK) { 542 fibril_mutex_unlock(&socket->lock);543 461 async_answer_0(callid, rc); 544 462 return; … … 549 467 SOCKET_SET_DATA_FRAGMENT_SIZE(answer, FRAGMENT_SIZE); 550 468 answer_call(callid, EOK, &answer, 2); 551 fibril_mutex_unlock(&socket->lock);552 469 } 553 470 … … 587 504 588 505 socket = (tcp_sockdata_t *)sock_core->specific_data; 589 fibril_mutex_lock(&socket->lock);590 591 506 if (socket->conn == NULL) { 592 fibril_mutex_unlock(&socket->lock);593 507 async_answer_0(callid, ENOTCONN); 594 508 return; … … 618 532 log_msg(LVL_DEBUG, "**** tcp_uc_receive -> %d", rc); 619 533 if (rc != EOK) { 620 fibril_mutex_unlock(&socket->lock);621 534 async_answer_0(callid, rc); 622 535 return; … … 632 545 log_msg(LVL_DEBUG, "addr read receive"); 633 546 if (!async_data_read_receive(&rcallid, &addr_length)) { 634 fibril_mutex_unlock(&socket->lock);635 547 async_answer_0(callid, EINVAL); 636 548 return; … … 643 555 rc = async_data_read_finalize(rcallid, &addr, addr_length); 644 556 if (rc != EOK) { 645 fibril_mutex_unlock(&socket->lock);646 557 async_answer_0(callid, EINVAL); 647 558 return; … … 651 562 log_msg(LVL_DEBUG, "data read receive"); 652 563 if (!async_data_read_receive(&rcallid, &length)) { 653 fibril_mutex_unlock(&socket->lock);654 564 async_answer_0(callid, EINVAL); 655 565 return; … … 670 580 /* Push one fragment notification to client's queue */ 671 581 tcp_sock_notify_data(sock_core); 672 fibril_mutex_unlock(&socket->lock);673 582 } 674 583 … … 694 603 695 604 socket = (tcp_sockdata_t *)sock_core->specific_data; 696 fibril_mutex_lock(&socket->lock);697 605 698 606 if (socket->conn != NULL) { 699 607 trc = tcp_uc_close(socket->conn); 700 608 if (trc != TCP_EOK && trc != TCP_ENOTEXIST) { 701 fibril_mutex_unlock(&socket->lock);702 609 async_answer_0(callid, EBADF); 703 610 return; … … 716 623 tcp_free_sock_data); 717 624 if (rc != EOK) { 718 fibril_mutex_unlock(&socket->lock);719 625 async_answer_0(callid, rc); 720 626 return; 721 627 } 722 628 723 fibril_mutex_unlock(&socket->lock);724 629 async_answer_0(callid, EOK); 725 630 } … … 735 640 log_msg(LVL_DEBUG, "tcp_sock_setsockopt()"); 736 641 async_answer_0(callid, ENOTSUP); 737 }738 739 /** Called when connection state changes. */740 static void tcp_sock_cstate_cb(tcp_conn_t *conn, void *arg)741 {742 tcp_conn_status_t cstatus;743 tcp_sock_lconn_t *lconn = (tcp_sock_lconn_t *)arg;744 tcp_sockdata_t *socket = lconn->socket;745 746 log_msg(LVL_DEBUG, "tcp_sock_cstate_cb()");747 fibril_mutex_lock(&socket->lock);748 assert(conn == lconn->conn);749 750 tcp_uc_status(conn, &cstatus);751 if (cstatus.cstate != st_established) {752 fibril_mutex_unlock(&socket->lock);753 return;754 }755 756 assert_link_not_used(&lconn->ready_list);757 list_append(&lconn->ready_list, &socket->ready);758 759 log_msg(LVL_DEBUG, "tcp_sock_cstate_cb(): notify accept");760 761 /* Push one accept notification to client's queue */762 tcp_sock_notify_aconn(socket->sock_core);763 fibril_mutex_unlock(&socket->lock);764 642 } 765 643 -
uspace/srv/net/tl/tcp/tcp_type.h
recf823a r3819ce5 152 152 } acpass_t; 153 153 154 typedef enum { 155 tcp_open_nonblock = 1 156 } tcp_open_flags_t; 157 158 typedef struct tcp_conn tcp_conn_t; 159 160 /** Connection state change callback function */ 161 typedef void (*tcp_cstate_cb_t)(tcp_conn_t *, void *); 162 163 /** Connection */ 164 struct tcp_conn { 154 typedef struct tcp_conn { 165 155 char *name; 166 156 link_t link; 167 168 /** Connection state change callback function */169 tcp_cstate_cb_t cstate_cb;170 /** Argument to @c cstate_cb */171 void *cstate_cb_arg;172 157 173 158 /** Connection identification (local and foreign socket) */ … … 248 233 /** Initial receive sequence number */ 249 234 uint32_t irs; 250 }; 251 252 /** Data returned by Status user call */ 253 typedef struct { 254 /** Connection state */ 255 tcp_cstate_t cstate; 235 } tcp_conn_t; 236 237 typedef struct { 238 unsigned dummy; 256 239 } tcp_conn_status_t; 257 240 … … 331 314 } tcp_client_t; 332 315 333 typedef struct tcp_sockdata { 334 /** Lock */ 335 fibril_mutex_t lock; 336 /** Socket core */ 337 socket_core_t *sock_core; 316 typedef struct { 338 317 /** Client */ 339 318 tcp_client_t *client; … … 342 321 /** Local address */ 343 322 netaddr_t laddr; 344 /** Backlog size */345 int backlog;346 /** Array of listening connections, @c backlog elements */347 struct tcp_sock_lconn **lconn;348 /** List of connections (from lconn) that are ready to be accepted */349 list_t ready;350 323 } tcp_sockdata_t; 351 352 typedef struct tcp_sock_lconn {353 tcp_conn_t *conn;354 tcp_sockdata_t *socket;355 int index;356 link_t ready_list;357 } tcp_sock_lconn_t;358 359 324 360 325 #endif -
uspace/srv/net/tl/tcp/test.c
recf823a r3819ce5 62 62 fsock.addr.ipv4 = 0x7f000001; 63 63 printf("S: User open...\n"); 64 tcp_uc_open(&lsock, &fsock, ap_passive, 0,&conn);64 tcp_uc_open(&lsock, &fsock, ap_passive, &conn); 65 65 conn->name = (char *) "S"; 66 66 … … 102 102 async_usleep(1000*1000*3); 103 103 printf("C: User open...\n"); 104 tcp_uc_open(&lsock, &fsock, ap_active, 0,&conn);104 tcp_uc_open(&lsock, &fsock, ap_active, &conn); 105 105 conn->name = (char *) "C"; 106 106 -
uspace/srv/net/tl/tcp/ucall.c
recf823a r3819ce5 53 53 * @param fsock Foreign socket 54 54 * @param acpass Active/passive 55 * @param oflags Open flags56 55 * @param conn Connection 57 56 * … … 66 65 */ 67 66 tcp_error_t tcp_uc_open(tcp_sock_t *lsock, tcp_sock_t *fsock, acpass_t acpass, 68 tcp_ open_flags_t oflags, tcp_conn_t **conn)67 tcp_conn_t **conn) 69 68 { 70 69 tcp_conn_t *nconn; 71 70 72 log_msg(LVL_DEBUG, "tcp_uc_open(%p, %p, %s, % s, %p)",71 log_msg(LVL_DEBUG, "tcp_uc_open(%p, %p, %s, %p)", 73 72 lsock, fsock, acpass == ap_active ? "active" : "passive", 74 oflags == tcp_open_nonblock ? "nonblock" : "none",conn);73 conn); 75 74 76 75 nconn = tcp_conn_new(lsock, fsock); … … 80 79 /* Synchronize (initiate) connection */ 81 80 tcp_conn_sync(nconn); 82 }83 84 if (oflags == tcp_open_nonblock) {85 *conn = nconn;86 return TCP_EOK;87 81 } 88 82 … … 107 101 108 102 *conn = nconn; 109 log_msg(LVL_DEBUG, "tcp_uc_open -> %p", nconn);110 103 return TCP_EOK; 111 104 } … … 265 258 { 266 259 log_msg(LVL_DEBUG, "tcp_uc_status()"); 267 cstatus->cstate = conn->cstate;268 260 } 269 261 … … 278 270 log_msg(LVL_DEBUG, "tcp_uc_delete()"); 279 271 tcp_conn_delete(conn); 280 }281 282 void tcp_uc_set_cstate_cb(tcp_conn_t *conn, tcp_cstate_cb_t cb, void *arg)283 {284 log_msg(LVL_DEBUG, "tcp_uc_set_ctate_cb(%p, %p, %p)",285 conn, cb, arg);286 287 conn->cstate_cb = cb;288 conn->cstate_cb_arg = arg;289 272 } 290 273 -
uspace/srv/net/tl/tcp/ucall.h
recf823a r3819ce5 42 42 * User calls 43 43 */ 44 extern tcp_error_t tcp_uc_open(tcp_sock_t *, tcp_sock_t *, acpass_t, 45 tcp_open_flags_t, tcp_conn_t **); 44 extern tcp_error_t tcp_uc_open(tcp_sock_t *, tcp_sock_t *, acpass_t, tcp_conn_t **); 46 45 extern tcp_error_t tcp_uc_send(tcp_conn_t *, void *, size_t, xflags_t); 47 46 extern tcp_error_t tcp_uc_receive(tcp_conn_t *, void *, size_t, size_t *, xflags_t *); … … 50 49 extern void tcp_uc_status(tcp_conn_t *, tcp_conn_status_t *); 51 50 extern void tcp_uc_delete(tcp_conn_t *); 52 extern void tcp_uc_set_cstate_cb(tcp_conn_t *, tcp_cstate_cb_t, void *);53 51 54 52 /*
Note:
See TracChangeset
for help on using the changeset viewer.