Lines Matching refs:eerb
97 static int dasd_eer_get_free_bytes(struct eerbuffer *eerb) in dasd_eer_get_free_bytes() argument
99 if (eerb->head < eerb->tail) in dasd_eer_get_free_bytes()
100 return eerb->tail - eerb->head - 1; in dasd_eer_get_free_bytes()
101 return eerb->buffersize - eerb->head + eerb->tail -1; in dasd_eer_get_free_bytes()
108 static int dasd_eer_get_filled_bytes(struct eerbuffer *eerb) in dasd_eer_get_filled_bytes() argument
111 if (eerb->head >= eerb->tail) in dasd_eer_get_filled_bytes()
112 return eerb->head - eerb->tail; in dasd_eer_get_filled_bytes()
113 return eerb->buffersize - eerb->tail + eerb->head; in dasd_eer_get_filled_bytes()
122 static void dasd_eer_write_buffer(struct eerbuffer *eerb, in dasd_eer_write_buffer() argument
133 headindex = eerb->head / PAGE_SIZE; in dasd_eer_write_buffer()
134 localhead = eerb->head % PAGE_SIZE; in dasd_eer_write_buffer()
136 memcpy(eerb->buffer[headindex]+localhead, nextdata, len); in dasd_eer_write_buffer()
139 eerb->head += len; in dasd_eer_write_buffer()
140 if (eerb->head == eerb->buffersize) in dasd_eer_write_buffer()
141 eerb->head = 0; /* wrap around */ in dasd_eer_write_buffer()
142 BUG_ON(eerb->head > eerb->buffersize); in dasd_eer_write_buffer()
149 static int dasd_eer_read_buffer(struct eerbuffer *eerb, char *data, int count) in dasd_eer_read_buffer() argument
156 finalcount = min(count, dasd_eer_get_filled_bytes(eerb)); in dasd_eer_read_buffer()
160 tailindex = eerb->tail / PAGE_SIZE; in dasd_eer_read_buffer()
161 localtail = eerb->tail % PAGE_SIZE; in dasd_eer_read_buffer()
163 memcpy(nextdata, eerb->buffer[tailindex] + localtail, len); in dasd_eer_read_buffer()
166 eerb->tail += len; in dasd_eer_read_buffer()
167 if (eerb->tail == eerb->buffersize) in dasd_eer_read_buffer()
168 eerb->tail = 0; /* wrap around */ in dasd_eer_read_buffer()
169 BUG_ON(eerb->tail > eerb->buffersize); in dasd_eer_read_buffer()
181 static int dasd_eer_start_record(struct eerbuffer *eerb, int count) in dasd_eer_start_record() argument
185 if (count + sizeof(count) > eerb->buffersize) in dasd_eer_start_record()
187 while (dasd_eer_get_free_bytes(eerb) < count + sizeof(count)) { in dasd_eer_start_record()
188 if (eerb->residual > 0) { in dasd_eer_start_record()
189 eerb->tail += eerb->residual; in dasd_eer_start_record()
190 if (eerb->tail >= eerb->buffersize) in dasd_eer_start_record()
191 eerb->tail -= eerb->buffersize; in dasd_eer_start_record()
192 eerb->residual = -1; in dasd_eer_start_record()
194 dasd_eer_read_buffer(eerb, (char *) &tailcount, in dasd_eer_start_record()
196 eerb->tail += tailcount; in dasd_eer_start_record()
197 if (eerb->tail >= eerb->buffersize) in dasd_eer_start_record()
198 eerb->tail -= eerb->buffersize; in dasd_eer_start_record()
200 dasd_eer_write_buffer(eerb, (char*) &count, sizeof(count)); in dasd_eer_start_record()
295 struct eerbuffer *eerb; in dasd_eer_write_standard_trigger() local
313 list_for_each_entry(eerb, &bufferlist, list) { in dasd_eer_write_standard_trigger()
314 dasd_eer_start_record(eerb, header.total_size); in dasd_eer_write_standard_trigger()
315 dasd_eer_write_buffer(eerb, (char *) &header, sizeof(header)); in dasd_eer_write_standard_trigger()
319 dasd_eer_write_buffer(eerb, sense, 32); in dasd_eer_write_standard_trigger()
321 dasd_eer_write_buffer(eerb, "EOR", 4); in dasd_eer_write_standard_trigger()
339 struct eerbuffer *eerb; in dasd_eer_write_snss_trigger() local
356 list_for_each_entry(eerb, &bufferlist, list) { in dasd_eer_write_snss_trigger()
357 dasd_eer_start_record(eerb, header.total_size); in dasd_eer_write_snss_trigger()
358 dasd_eer_write_buffer(eerb, (char *) &header , sizeof(header)); in dasd_eer_write_snss_trigger()
360 dasd_eer_write_buffer(eerb, cqr->data, SNSS_DATA_SIZE); in dasd_eer_write_snss_trigger()
361 dasd_eer_write_buffer(eerb, "EOR", 4); in dasd_eer_write_snss_trigger()
543 struct eerbuffer *eerb; in dasd_eer_open() local
546 eerb = kzalloc(sizeof(struct eerbuffer), GFP_KERNEL); in dasd_eer_open()
547 if (!eerb) in dasd_eer_open()
549 eerb->buffer_page_count = eer_pages; in dasd_eer_open()
550 if (eerb->buffer_page_count < 1 || in dasd_eer_open()
551 eerb->buffer_page_count > INT_MAX / PAGE_SIZE) { in dasd_eer_open()
552 kfree(eerb); in dasd_eer_open()
558 eerb->buffersize = eerb->buffer_page_count * PAGE_SIZE; in dasd_eer_open()
559 eerb->buffer = kmalloc_array(eerb->buffer_page_count, sizeof(char *), in dasd_eer_open()
561 if (!eerb->buffer) { in dasd_eer_open()
562 kfree(eerb); in dasd_eer_open()
565 if (dasd_eer_allocate_buffer_pages(eerb->buffer, in dasd_eer_open()
566 eerb->buffer_page_count)) { in dasd_eer_open()
567 kfree(eerb->buffer); in dasd_eer_open()
568 kfree(eerb); in dasd_eer_open()
571 filp->private_data = eerb; in dasd_eer_open()
573 list_add(&eerb->list, &bufferlist); in dasd_eer_open()
581 struct eerbuffer *eerb; in dasd_eer_close() local
584 eerb = (struct eerbuffer *) filp->private_data; in dasd_eer_close()
586 list_del(&eerb->list); in dasd_eer_close()
588 dasd_eer_free_buffer_pages(eerb->buffer, eerb->buffer_page_count); in dasd_eer_close()
589 kfree(eerb->buffer); in dasd_eer_close()
590 kfree(eerb); in dasd_eer_close()
601 struct eerbuffer *eerb; in dasd_eer_read() local
603 eerb = (struct eerbuffer *) filp->private_data; in dasd_eer_read()
609 if (eerb->residual < 0) { /* the remainder of this record */ in dasd_eer_read()
611 eerb->residual = 0; in dasd_eer_read()
615 } else if (eerb->residual > 0) { in dasd_eer_read()
617 effective_count = min(eerb->residual, (int) count); in dasd_eer_read()
618 eerb->residual -= effective_count; in dasd_eer_read()
622 tc = dasd_eer_read_buffer(eerb, (char *) &tailcount, in dasd_eer_read()
632 eerb->head != eerb->tail); in dasd_eer_read()
642 eerb->residual = tailcount - effective_count; in dasd_eer_read()
645 tc = dasd_eer_read_buffer(eerb, readbuffer, effective_count); in dasd_eer_read()
663 struct eerbuffer *eerb; in dasd_eer_poll() local
665 eerb = (struct eerbuffer *) filp->private_data; in dasd_eer_poll()
668 if (eerb->head != eerb->tail) in dasd_eer_poll()