Home | History | Annotate | Download | only in qemu

Lines Matching defs:overlapped

105     OVERLAPPED read_overlapped;
106 OVERLAPPED write_overlapped;
115 static tun_buffer_t* get_buffer_from_free_list(tap_win32_overlapped_t* const overlapped)
118 WaitForSingleObject(overlapped->free_list_semaphore, INFINITE);
119 EnterCriticalSection(&overlapped->free_list_cs);
120 buffer = overlapped->free_list;
122 overlapped->free_list = buffer->next;
123 LeaveCriticalSection(&overlapped->free_list_cs);
128 static void put_buffer_on_free_list(tap_win32_overlapped_t* const overlapped, tun_buffer_t* const buffer)
130 EnterCriticalSection(&overlapped->free_list_cs);
131 buffer->next = overlapped->free_list;
132 overlapped->free_list = buffer;
133 LeaveCriticalSection(&overlapped->free_list_cs);
134 ReleaseSemaphore(overlapped->free_list_semaphore, 1, NULL);
137 static tun_buffer_t* get_buffer_from_output_queue(tap_win32_overlapped_t* const overlapped, const int block)
143 result = WaitForSingleObject(overlapped->output_queue_semaphore, timeout);
149 EnterCriticalSection(&overlapped->output_queue_cs);
151 buffer = overlapped->output_queue_front;
152 overlapped->output_queue_front = buffer->next;
154 if(overlapped->output_queue_front == NULL) {
155 overlapped->output_queue_back = NULL;
158 LeaveCriticalSection(&overlapped->output_queue_cs);
170 static tun_buffer_t* get_buffer_from_output_queue_immediate (tap_win32_overlapped_t* const overlapped)
172 return get_buffer_from_output_queue(overlapped, 0);
175 static void put_buffer_on_output_queue(tap_win32_overlapped_t* const overlapped, tun_buffer_t* const buffer)
177 EnterCriticalSection(&overlapped->output_queue_cs);
179 if(overlapped->output_queue_front == NULL && overlapped->output_queue_back == NULL) {
180 overlapped->output_queue_front = overlapped->output_queue_back = buffer;
183 overlapped->output_queue_back->next = buffer;
184 overlapped->output_queue_back = buffer;
187 LeaveCriticalSection(&overlapped->output_queue_cs);
189 ReleaseSemaphore(overlapped->output_queue_semaphore, 1, NULL);
403 static void tap_win32_overlapped_init(tap_win32_overlapped_t* const overlapped, const HANDLE handle)
405 overlapped->handle = handle;
407 overlapped->read_event = CreateEvent(NULL, FALSE, FALSE, NULL);
408 overlapped->write_event = CreateEvent(NULL, FALSE, FALSE, NULL);
410 overlapped->read_overlapped.Offset = 0;
411 overlapped->read_overlapped.OffsetHigh = 0;
412 overlapped->read_overlapped.hEvent = overlapped->read_event;
414 overlapped->write_overlapped.Offset = 0;
415 overlapped->write_overlapped.OffsetHigh = 0;
416 overlapped->write_overlapped.hEvent = overlapped->write_event;
418 InitializeCriticalSection(&overlapped->output_queue_cs);
419 InitializeCriticalSection(&overlapped->free_list_cs);
421 overlapped->output_queue_semaphore = CreateSemaphore(
427 if(!overlapped->output_queue_semaphore) {
431 overlapped->free_list_semaphore = CreateSemaphore(
437 if(!overlapped->free_list_semaphore) {
441 overlapped->free_list = overlapped->output_queue_front = overlapped->output_queue_back = NULL;
446 tun_buffer_t* element = &overlapped->buffers[index];
447 element->next = overlapped->free_list;
448 overlapped->free_list = element;
452 overlapped->tap_semaphore = CreateSemaphore(NULL, 0, TUN_MAX_BUFFER_COUNT, NULL);
453 if(!overlapped->tap_semaphore)
457 static int tap_win32_write(tap_win32_overlapped_t *overlapped,
464 result = GetOverlappedResult( overlapped->handle, &overlapped->write_overlapped,
468 WaitForSingleObject(overlapped->write_event, INFINITE);
470 result = WriteFile(overlapped->handle, buffer, size,
471 &write_size, &overlapped->write_overlapped);
478 WaitForSingleObject(overlapped->write_event, INFINITE);
491 tap_win32_overlapped_t *overlapped = (tap_win32_overlapped_t*)param;
495 tun_buffer_t* buffer = get_buffer_from_free_list(overlapped);
499 result = ReadFile(overlapped->handle,
503 &overlapped->read_overlapped);
507 WaitForSingleObject(overlapped->read_event, INFINITE);
508 result = GetOverlappedResult( overlapped->handle, &overlapped->read_overlapped,
535 put_buffer_on_output_queue(overlapped, buffer);
536 ReleaseSemaphore(overlapped->tap_semaphore, 1, NULL);
537 buffer = get_buffer_from_free_list(overlapped);
544 static int tap_win32_read(tap_win32_overlapped_t *overlapped,
549 tun_buffer_t* buffer = get_buffer_from_output_queue_immediate(overlapped);
562 static void tap_win32_free_buffer(tap_win32_overlapped_t *overlapped,
566 put_buffer_on_free_list(overlapped, buffer);